From 7258a8da2e32704c156c11ef611cc7961d085681 Mon Sep 17 00:00:00 2001 From: Alexander Smarus Date: Mon, 25 Dec 2023 14:39:24 +0200 Subject: [PATCH 001/198] Make _MultiHandle timeout timer non-repeatable CURL documentation (https://curl.se/libcurl/c/CURLMOPT_TIMERFUNCTION.html) explicitly says that the timer should be one-time. We basically have to follow CURL requests for setting, resetting and disarming such timers. Current logic eventually leaves a 1ms repeating timer forever, because CURL assumes it fires once, and may not ask us to remove it explicitly. Also, being used as request timeout trigger, this timer also has no sense to be repeated. --- .../URLSession/libcurl/MultiHandle.swift | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift index 19bda9723d..6196b2fa39 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift @@ -359,7 +359,7 @@ class _TimeoutSource { let delay = UInt64(max(1, milliseconds - 1)) let start = DispatchTime.now() + DispatchTimeInterval.milliseconds(Int(delay)) - rawSource.schedule(deadline: start, repeating: .milliseconds(Int(delay)), leeway: (milliseconds == 1) ? .microseconds(Int(1)) : .milliseconds(Int(1))) + rawSource.schedule(deadline: start, repeating: .never, leeway: (milliseconds == 1) ? .microseconds(Int(1)) : .milliseconds(Int(1))) rawSource.setEventHandler(handler: handler) rawSource.resume() } @@ -384,13 +384,12 @@ fileprivate extension URLSession._MultiHandle { timeoutSource = nil queue.async { self.timeoutTimerFired() } case .milliseconds(let milliseconds): - if (timeoutSource == nil) || timeoutSource!.milliseconds != milliseconds { - //TODO: Could simply change the existing timer by using DispatchSourceTimer again. - let block = DispatchWorkItem { [weak self] in - self?.timeoutTimerFired() - } - timeoutSource = _TimeoutSource(queue: queue, milliseconds: milliseconds, handler: block) + //TODO: Could simply change the existing timer by using DispatchSourceTimer again. + let block = DispatchWorkItem { [weak self] in + self?.timeoutTimerFired() } + // Note: Previous timer instance would cancel internal Dispatch timer in deinit + timeoutSource = _TimeoutSource(queue: queue, milliseconds: milliseconds, handler: block) } } enum _Timeout { From f9a54f3afa4ca4adfba88d6e6c48c0120c3022a8 Mon Sep 17 00:00:00 2001 From: Alexander Smarus Date: Mon, 25 Dec 2023 15:10:26 +0200 Subject: [PATCH 002/198] Cancel DispatchSource before closing socket (#4791) Extends socket lifetime enough to let DispatchSource cancel properly. Also prevents from creating new DispatchSources while other are in the middle of cancelling. Also includes tests (see #4854 for test details). --- .../URL.subproj/CFURLSessionInterface.c | 4 + .../URL.subproj/CFURLSessionInterface.h | 2 + .../URLSession/libcurl/MultiHandle.swift | 152 ++++++++++++++++-- Tests/Foundation/HTTPServer.swift | 54 +++++-- Tests/Foundation/Tests/TestURLSession.swift | 106 +++++++++++- 5 files changed, 290 insertions(+), 28 deletions(-) diff --git a/CoreFoundation/URL.subproj/CFURLSessionInterface.c b/CoreFoundation/URL.subproj/CFURLSessionInterface.c index 6226a3f5ce..6a30127b81 100644 --- a/CoreFoundation/URL.subproj/CFURLSessionInterface.c +++ b/CoreFoundation/URL.subproj/CFURLSessionInterface.c @@ -111,6 +111,10 @@ CFURLSessionEasyCode CFURLSession_easy_setopt_tc(CFURLSessionEasyHandle _Nonnull return MakeEasyCode(curl_easy_setopt(curl, option.value, a)); } +CFURLSessionEasyCode CFURLSession_easy_setopt_scl(CFURLSessionEasyHandle _Nonnull curl, CFURLSessionOption option, CFURLSessionCloseSocketCallback * _Nullable a) { + return MakeEasyCode(curl_easy_setopt(curl, option.value, a)); +} + CFURLSessionEasyCode CFURLSession_easy_getinfo_long(CFURLSessionEasyHandle _Nonnull curl, CFURLSessionInfo info, long *_Nonnull a) { return MakeEasyCode(curl_easy_getinfo(curl, info.value, a)); } diff --git a/CoreFoundation/URL.subproj/CFURLSessionInterface.h b/CoreFoundation/URL.subproj/CFURLSessionInterface.h index d760177041..3e219f8003 100644 --- a/CoreFoundation/URL.subproj/CFURLSessionInterface.h +++ b/CoreFoundation/URL.subproj/CFURLSessionInterface.h @@ -625,6 +625,8 @@ typedef int (CFURLSessionSeekCallback)(void *_Nullable userp, long long offset, CF_EXPORT CFURLSessionEasyCode CFURLSession_easy_setopt_seek(CFURLSessionEasyHandle _Nonnull curl, CFURLSessionOption option, CFURLSessionSeekCallback * _Nullable a); typedef int (CFURLSessionTransferInfoCallback)(void *_Nullable userp, long long dltotal, long long dlnow, long long ultotal, long long ulnow); CF_EXPORT CFURLSessionEasyCode CFURLSession_easy_setopt_tc(CFURLSessionEasyHandle _Nonnull curl, CFURLSessionOption option, CFURLSessionTransferInfoCallback * _Nullable a); +typedef int (CFURLSessionCloseSocketCallback)(void *_Nullable clientp, CFURLSession_socket_t item); +CF_EXPORT CFURLSessionEasyCode CFURLSession_easy_setopt_scl(CFURLSessionEasyHandle _Nonnull curl, CFURLSessionOption option, CFURLSessionCloseSocketCallback * _Nullable a); CF_EXPORT CFURLSessionEasyCode CFURLSession_easy_getinfo_long(CFURLSessionEasyHandle _Nonnull curl, CFURLSessionInfo info, long *_Nonnull a); CF_EXPORT CFURLSessionEasyCode CFURLSession_easy_getinfo_double(CFURLSessionEasyHandle _Nonnull curl, CFURLSessionInfo info, double *_Nonnull a); diff --git a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift index 6196b2fa39..b58748dc9a 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift @@ -45,6 +45,7 @@ extension URLSession { let queue: DispatchQueue let group = DispatchGroup() fileprivate var easyHandles: [_EasyHandle] = [] + fileprivate var socketReferences: [CFURLSession_socket_t: _SocketReference] = [:] fileprivate var timeoutSource: _TimeoutSource? = nil private var reentrantInUpdateTimeoutTimer = false @@ -127,13 +128,14 @@ fileprivate extension URLSession._MultiHandle { if let opaque = socketSourcePtr { Unmanaged<_SocketSources>.fromOpaque(opaque).release() } + socketSources?.tearDown(handle: self, socket: socket, queue: queue) socketSources = nil } if let ss = socketSources { let handler = DispatchWorkItem { [weak self] in self?.performAction(for: socket) } - ss.createSources(with: action, socket: socket, queue: queue, handler: handler) + ss.createSources(with: action, handle: self, socket: socket, queue: queue, handler: handler) } return 0 } @@ -161,9 +163,104 @@ extension Collection where Element == _EasyHandle { } } +private extension URLSession._MultiHandle { + class _SocketReference { + let socket: CFURLSession_socket_t + var shouldClose: Bool + var workItem: DispatchWorkItem? + + init(socket: CFURLSession_socket_t) { + self.socket = socket + shouldClose = false + } + + deinit { + if shouldClose { + #if os(Windows) + closesocket(socket) + #else + close(socket) + #endif + } + } + } + + /// Creates and stores socket reference. Reentrancy is not supported. + /// Trying to begin operation for same socket twice would mean something + /// went horribly wrong, or our assumptions about CURL register/unregister + /// action flow are nor correct. + func beginOperation(for socket: CFURLSession_socket_t) -> _SocketReference { + let reference = _SocketReference(socket: socket) + precondition(socketReferences.updateValue(reference, forKey: socket) == nil, "Reentrancy is not supported for socket operations") + return reference + } + + /// Removes socket reference from the shared store. If there is work item scheduled, + /// executes it on the current thread. + func endOperation(for socketReference: _SocketReference) { + precondition(socketReferences.removeValue(forKey: socketReference.socket) != nil, "No operation associated with the socket") + if let workItem = socketReference.workItem, !workItem.isCancelled { + // CURL never asks for socket close without unregistering first, and + // we should cancel pending work when unregister action is requested. + precondition(!socketReference.shouldClose, "Socket close was scheduled, but there is some pending work left") + workItem.perform() + } + } + + /// Marks this reference to close socket on deinit. This allows us + /// to extend socket lifecycle by keeping the reference alive. + func scheduleClose(for socket: CFURLSession_socket_t) { + let reference = socketReferences[socket] ?? _SocketReference(socket: socket) + reference.shouldClose = true + } + + /// Schedules work to be performed when an operation ends for the socket, + /// or performs it immediately if there is no operation in progress. + /// + /// We're using this to postpone Dispatch Source creation when + /// previous Dispatch Source is not cancelled yet. + func schedule(_ workItem: DispatchWorkItem, for socket: CFURLSession_socket_t) { + guard let socketReference = socketReferences[socket] else { + workItem.perform() + return + } + // CURL never asks for register without pairing it with unregister later, + // and we're cancelling pending work item on unregister. + // But it is safe to just drop existing work item anyway, + // and replace it with the new one. + socketReference.workItem = workItem + } + + /// Cancels pending work for socket operation. Does nothing if + /// there is no operation in progress or no pending work item. + /// + /// CURL may become not interested in Dispatch Sources + /// we have planned to create. In this case we should just cancel + /// scheduled work. + func cancelWorkItem(for socket: CFURLSession_socket_t) { + guard let socketReference = socketReferences[socket] else { + return + } + socketReference.workItem?.cancel() + socketReference.workItem = nil + } + +} + internal extension URLSession._MultiHandle { /// Add an easy handle -- start its transfer. func add(_ handle: _EasyHandle) { + // Set CLOSESOCKETFUNCTION. Note that while the option belongs to easy_handle, + // the connection cache is managed by CURL multi_handle, and sockets can actually + // outlive easy_handle (even after curl_easy_cleanup call). That's why + // socket management lives in _MultiHandle. + try! CFURLSession_easy_setopt_ptr(handle.rawHandle, CFURLSessionOptionCLOSESOCKETDATA, UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque())).asError() + try! CFURLSession_easy_setopt_scl(handle.rawHandle, CFURLSessionOptionCLOSESOCKETFUNCTION) { (clientp: UnsafeMutableRawPointer?, item: CFURLSession_socket_t) in + guard let handle = URLSession._MultiHandle.from(callbackUserData: clientp) else { fatalError() } + handle.scheduleClose(for: item) + return 0 + }.asError() + // If this is the first handle being added, we need to `kick` the // underlying multi handle by calling `timeoutTimerFired` as // described in @@ -448,25 +545,56 @@ fileprivate class _SocketSources { s.resume() } - func tearDown() { - if let s = readSource { - s.cancel() + func tearDown(handle: URLSession._MultiHandle, socket: CFURLSession_socket_t, queue: DispatchQueue) { + handle.cancelWorkItem(for: socket) // There could be pending register action which needs to be cancelled + + guard readSource != nil || writeSource != nil else { + // This means that we have posponed (and already abandoned) + // sources creation. + return } - readSource = nil - if let s = writeSource { - s.cancel() + + // Socket is guaranteed to not to be closed as long as we keeping + // the reference. + let socketReference = handle.beginOperation(for: socket) + let cancelHandlerGroup = DispatchGroup() + [readSource, writeSource].compactMap({ $0 }).forEach { source in + cancelHandlerGroup.enter() + source.setCancelHandler { + cancelHandlerGroup.leave() + } + source.cancel() + } + cancelHandlerGroup.notify(queue: queue) { + handle.endOperation(for: socketReference) } + + readSource = nil writeSource = nil } } extension _SocketSources { /// Create a read and/or write source as specified by the action. - func createSources(with action: URLSession._MultiHandle._SocketRegisterAction, socket: CFURLSession_socket_t, queue: DispatchQueue, handler: DispatchWorkItem) { - if action.needsReadSource { - createReadSource(socket: socket, queue: queue, handler: handler) + func createSources(with action: URLSession._MultiHandle._SocketRegisterAction, handle: URLSession._MultiHandle, socket: CFURLSession_socket_t, queue: DispatchQueue, handler: DispatchWorkItem) { + // CURL casually requests to unregister and register handlers for same + // socket in a row. There is (pretty low) chance of overlapping tear-down operation + // with "register" request. Bad things could happen if we create + // a new Dispatch Source while other is being cancelled for the same socket. + // We're using `_MultiHandle.schedule(_:for:)` here to postpone sources creation until + // pending operation is finished (if there is none, submitted work item is performed + // immediately). + // Also, CURL may request unregister even before we perform any postponed work, + // so we have to cancel such work in such case. See + let createSources = DispatchWorkItem { + if action.needsReadSource { + self.createReadSource(socket: socket, queue: queue, handler: handler) + } + if action.needsWriteSource { + self.createWriteSource(socket: socket, queue: queue, handler: handler) + } } - if action.needsWriteSource { - createWriteSource(socket: socket, queue: queue, handler: handler) + if action.needsReadSource || action.needsWriteSource { + handle.schedule(createSources, for: socket) } } } diff --git a/Tests/Foundation/HTTPServer.swift b/Tests/Foundation/HTTPServer.swift index 5af9fb9c52..0ab0f0dc71 100644 --- a/Tests/Foundation/HTTPServer.swift +++ b/Tests/Foundation/HTTPServer.swift @@ -99,7 +99,7 @@ class _TCPSocket: CustomStringConvertible { listening = false } - init(port: UInt16?) throws { + init(port: UInt16?, backlog: Int32) throws { listening = true self.port = 0 @@ -124,7 +124,7 @@ class _TCPSocket: CustomStringConvertible { try socketAddress.withMemoryRebound(to: sockaddr.self, capacity: MemoryLayout.size, { let addr = UnsafePointer($0) _ = try attempt("bind", valid: isZero, bind(_socket, addr, socklen_t(MemoryLayout.size))) - _ = try attempt("listen", valid: isZero, listen(_socket, SOMAXCONN)) + _ = try attempt("listen", valid: isZero, listen(_socket, backlog)) }) var actualSA = sockaddr_in() @@ -295,8 +295,8 @@ class _HTTPServer: CustomStringConvertible { let tcpSocket: _TCPSocket var port: UInt16 { tcpSocket.port } - init(port: UInt16?) throws { - tcpSocket = try _TCPSocket(port: port) + init(port: UInt16?, backlog: Int32 = SOMAXCONN) throws { + tcpSocket = try _TCPSocket(port: port, backlog: backlog) } init(socket: _TCPSocket) { @@ -1094,6 +1094,14 @@ enum InternalServerError : Error { case badHeaders } +extension LoopbackServerTest { + struct Options { + var serverBacklog: Int32 + var isAsynchronous: Bool + + static let `default` = Options(serverBacklog: SOMAXCONN, isAsynchronous: true) + } +} class LoopbackServerTest : XCTestCase { private static let staticSyncQ = DispatchQueue(label: "org.swift.TestFoundation.HTTPServer.StaticSyncQ") @@ -1101,8 +1109,17 @@ class LoopbackServerTest : XCTestCase { private static var _serverPort: Int = -1 private static var _serverActive = false private static var testServer: _HTTPServer? = nil - - + private static var _options: Options = .default + + static var options: Options { + get { + return staticSyncQ.sync { _options } + } + set { + staticSyncQ.sync { _options = newValue } + } + } + static var serverPort: Int { get { return staticSyncQ.sync { _serverPort } @@ -1119,12 +1136,20 @@ class LoopbackServerTest : XCTestCase { override class func setUp() { super.setUp() + Self.startServer() + } + override class func tearDown() { + Self.stopServer() + super.tearDown() + } + + static func startServer() { var _serverPort = 0 let dispatchGroup = DispatchGroup() func runServer() throws { - testServer = try _HTTPServer(port: nil) + testServer = try _HTTPServer(port: nil, backlog: options.serverBacklog) _serverPort = Int(testServer!.port) serverActive = true dispatchGroup.leave() @@ -1132,7 +1157,8 @@ class LoopbackServerTest : XCTestCase { while serverActive { do { let httpServer = try testServer!.listen() - globalDispatchQueue.async { + + func handleRequest() { let subServer = TestURLSessionServer(httpServer: httpServer) do { try subServer.readAndRespond() @@ -1140,6 +1166,12 @@ class LoopbackServerTest : XCTestCase { NSLog("readAndRespond: \(error)") } } + + if options.isAsynchronous { + globalDispatchQueue.async(execute: handleRequest) + } else { + handleRequest() + } } catch { if (serverActive) { // Ignore errors thrown on shutdown NSLog("httpServer: \(error)") @@ -1165,11 +1197,11 @@ class LoopbackServerTest : XCTestCase { fatalError("Timedout waiting for server to be ready") } serverPort = _serverPort + debugLog("Listening on \(serverPort)") } - - override class func tearDown() { + + static func stopServer() { serverActive = false try? testServer?.stop() - super.tearDown() } } diff --git a/Tests/Foundation/Tests/TestURLSession.swift b/Tests/Foundation/Tests/TestURLSession.swift index 8c04855589..19118ee80b 100644 --- a/Tests/Foundation/Tests/TestURLSession.swift +++ b/Tests/Foundation/Tests/TestURLSession.swift @@ -495,21 +495,104 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 30) } - func test_timeoutInterval() { + func test_httpTimeout() { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 10 - let urlString = "http://127.0.0.1:-1/Peru" + let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/Peru" let session = URLSession(configuration: config, delegate: nil, delegateQueue: nil) let expect = expectation(description: "GET \(urlString): will timeout") - var req = URLRequest(url: URL(string: "http://127.0.0.1:-1/Peru")!) + var req = URLRequest(url: URL(string: urlString)!) + req.setValue("3", forHTTPHeaderField: "x-pause") req.timeoutInterval = 1 let task = session.dataTask(with: req) { (data, _, error) -> Void in defer { expect.fulfill() } - XCTAssertNotNil(error) + XCTAssertEqual((error as? URLError)?.code, .timedOut, "Task should fail with URLError.timedOut error") } task.resume() + waitForExpectations(timeout: 30) + } + + func test_connectTimeout() { + // Reconfigure http server for this specific scenario: + // a slow request keeps web server busy, while other + // request times out on connection attempt. + Self.stopServer() + Self.options = Options(serverBacklog: 1, isAsynchronous: false) + Self.startServer() + + let config = URLSessionConfiguration.default + let slowUrlString = "http://127.0.0.1:\(TestURLSession.serverPort)/Peru" + let fastUrlString = "http://127.0.0.1:\(TestURLSession.serverPort)/Italy" + let session = URLSession(configuration: config, delegate: nil, delegateQueue: nil) + let slowReqExpect = expectation(description: "GET \(slowUrlString): will complete") + let fastReqExpect = expectation(description: "GET \(fastUrlString): will timeout") + + var slowReq = URLRequest(url: URL(string: slowUrlString)!) + slowReq.setValue("3", forHTTPHeaderField: "x-pause") + + var fastReq = URLRequest(url: URL(string: fastUrlString)!) + fastReq.timeoutInterval = 1 + + let slowTask = session.dataTask(with: slowReq) { (data, _, error) -> Void in + slowReqExpect.fulfill() + } + let fastTask = session.dataTask(with: fastReq) { (data, _, error) -> Void in + defer { fastReqExpect.fulfill() } + XCTAssertEqual((error as? URLError)?.code, .timedOut, "Task should fail with URLError.timedOut error") + } + slowTask.resume() + Thread.sleep(forTimeInterval: 0.1) // Give slow task some time to start + fastTask.resume() waitForExpectations(timeout: 30) + + // Reconfigure http server back to default settings + Self.stopServer() + Self.options = .default + Self.startServer() + } + + func test_repeatedRequestsStress() throws { + // TODO: try disabling curl connection cache to force socket close early. Or create several url sessions (they have cleanup in deinit) + + let config = URLSessionConfiguration.default + let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/Peru" + let session = URLSession(configuration: config, delegate: nil, delegateQueue: nil) + let req = URLRequest(url: URL(string: urlString)!) + + var requestsLeft = 3000 + let expect = expectation(description: "\(requestsLeft) x GET \(urlString)") + + func doRequests(completion: @escaping () -> Void) { + // We only care about completion of one of the tasks, + // so we could move to next cycle. + // Some overlapping would happen and that's what we + // want actually to provoke issue with socket reuse + // on Windows. + let task = session.dataTask(with: req) { (_, _, _) -> Void in + } + task.resume() + let task2 = session.dataTask(with: req) { (_, _, _) -> Void in + } + task2.resume() + let task3 = session.dataTask(with: req) { (_, _, _) -> Void in + completion() + } + task3.resume() + } + + func checkCountAndRunNext() { + guard requestsLeft > 0 else { + expect.fulfill() + return + } + requestsLeft -= 1 + doRequests(completion: checkCountAndRunNext) + } + + checkCountAndRunNext() + + waitForExpectations(timeout: 30) } func test_httpRedirectionWithCode300() throws { @@ -2049,7 +2132,6 @@ class TestURLSession: LoopbackServerTest { ("test_taskTimeout", test_taskTimeout), ("test_verifyRequestHeaders", test_verifyRequestHeaders), ("test_verifyHttpAdditionalHeaders", test_verifyHttpAdditionalHeaders), - ("test_timeoutInterval", test_timeoutInterval), ("test_httpRedirectionWithCode300", test_httpRedirectionWithCode300), ("test_httpRedirectionWithCode301_302", test_httpRedirectionWithCode301_302), ("test_httpRedirectionWithCode303", test_httpRedirectionWithCode303), @@ -2098,6 +2180,7 @@ class TestURLSession: LoopbackServerTest { /* ⚠️ */ testExpectedToFail(test_noDoubleCallbackWhenCancellingAndProtocolFailsFast, "This test crashes nondeterministically: https://bugs.swift.org/browse/SR-11310")), /* ⚠️ */ ("test_cancelledTasksCannotBeResumed", testExpectedToFail(test_cancelledTasksCannotBeResumed, "Breaks on Ubuntu 18.04")), ] + #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT if #available(macOS 12.0, *) { retVal.append(contentsOf: [ ("test_webSocket", asyncTest(test_webSocket)), @@ -2106,6 +2189,19 @@ class TestURLSession: LoopbackServerTest { ("test_webSocketSemiAbruptClose", asyncTest(test_webSocketSemiAbruptClose)), ]) } + #endif + #if os(Windows) + retVal.append(contentsOf: [ + ("test_httpTimeout", test_httpTimeout), + ("test_connectTimeout", test_connectTimeout), + ("test_repeatedRequestsStress", testExpectedToFail(test_repeatedRequestsStress, "Crashes with high probability")), + ]) + #else + retVal.append(contentsOf: [ + ("test_httpTimeout", test_httpTimeout), + ("test_connectTimeout", test_connectTimeout), + ]) + #endif return retVal } From 3eb4fab685f30ade62703ebcc781c890cfc82653 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Wed, 31 Jan 2024 17:40:08 -0800 Subject: [PATCH 003/198] wip --- .gitignore | 2 + .../AppServices.subproj/CFUserNotification.c | 460 ------------------ CoreFoundation/Base.subproj/CoreFoundation.h | 100 ---- .../CFStringLocalizedFormattingInternal.h | 12 - Package.swift | 45 ++ Sources/BlocksRuntime/CMakeLists.txt | 15 - .../CFApplicationPreferences.c | 14 +- .../CoreFoundation}/CFArray.c | 4 +- .../CoreFoundation}/CFAttributedString.c | 6 +- .../CoreFoundation}/CFBag.c | 4 +- .../CoreFoundation}/CFBase.c | 2 +- .../CoreFoundation}/CFBasicHash.c | 6 +- .../CoreFoundation}/CFBasicHashFindBucket.m | 0 .../CoreFoundation}/CFBigNumber.c | 6 +- .../CoreFoundation}/CFBinaryHeap.c | 4 +- .../CoreFoundation}/CFBinaryPList.c | 30 +- .../CoreFoundation}/CFBitVector.c | 2 +- .../CoreFoundation}/CFBuiltinConverters.c | 0 .../CoreFoundation}/CFBundle.c | 18 +- .../CoreFoundation}/CFBundle_Binary.c | 0 .../CoreFoundation}/CFBundle_DebugStrings.c | 0 .../CoreFoundation}/CFBundle_Executable.c | 4 +- .../CoreFoundation}/CFBundle_Grok.c | 0 .../CoreFoundation}/CFBundle_InfoPlist.c | 10 +- .../CoreFoundation}/CFBundle_Locale.c | 2 +- .../CoreFoundation}/CFBundle_Main.c | 2 +- .../CoreFoundation}/CFBundle_ResourceFork.c | 2 +- .../CoreFoundation}/CFBundle_Resources.c | 14 +- .../CoreFoundation}/CFBundle_SplitFileName.c | 2 +- .../CoreFoundation}/CFBundle_Strings.c | 4 +- .../CoreFoundation}/CFBundle_Tables.c | 2 +- .../CoreFoundation}/CFBurstTrie.c | 4 +- .../CoreFoundation}/CFCalendar.c | 4 +- .../CoreFoundation}/CFCalendar_Enumerate.c | 2 +- .../CoreFoundation}/CFCharacterSet.c | 10 +- .../CFCharacterSetBitmaps.bitmap | Bin .../CoreFoundation}/CFCharacterSetData.S | 2 +- .../CoreFoundation}/CFConcreteStreams.c | 4 +- .../CoreFoundation}/CFData.c | 6 +- .../CoreFoundation}/CFDate.c | 12 +- .../CoreFoundation}/CFDateComponents.c | 4 +- .../CoreFoundation}/CFDateFormatter.c | 12 +- .../CoreFoundation}/CFDateInterval.c | 6 +- .../CoreFoundation}/CFDateIntervalFormatter.c | 16 +- .../CoreFoundation}/CFDictionary.c | 4 +- .../CoreFoundation}/CFError.c | 8 +- .../CoreFoundation}/CFFileUtilities.c | 2 +- .../CoreFoundation}/CFICUConverters.c | 4 +- .../CoreFoundation}/CFKnownLocations.c | 2 +- .../CoreFoundation}/CFListFormatter.c | 0 .../CoreFoundation}/CFLocale.c | 18 +- .../CoreFoundation}/CFLocaleIdentifier.c | 4 +- .../CoreFoundation}/CFLocaleKeys.c | 0 .../CoreFoundation}/CFMachPort.c | 6 +- .../CoreFoundation}/CFMachPort_Lifetime.c | 0 .../CoreFoundation}/CFMessagePort.c | 12 +- .../CoreFoundation}/CFNumber.c | 8 +- .../CoreFoundation}/CFNumberFormatter.c | 8 +- .../CoreFoundation}/CFOldStylePList.c | 16 +- .../CoreFoundation}/CFPlatform.c | 2 +- .../CoreFoundation}/CFPlatformConverters.c | 4 +- .../CoreFoundation}/CFPlugIn.c | 0 .../CoreFoundation}/CFPreferences.c | 16 +- .../CoreFoundation}/CFPropertyList.c | 30 +- .../CoreFoundation}/CFRegularExpression.c | 2 +- .../CFRelativeDateTimeFormatter.c | 0 .../CoreFoundation}/CFRunArray.c | 2 +- .../CoreFoundation}/CFRunLoop.c | 12 +- .../CoreFoundation}/CFRuntime.c | 18 +- .../CoreFoundation}/CFSet.c | 4 +- .../CoreFoundation}/CFSocket.c | 14 +- .../CoreFoundation}/CFSocketStream.c | 4 +- .../CoreFoundation}/CFSortFunctions.c | 2 +- .../CoreFoundation}/CFStorage.c | 2 +- .../CoreFoundation}/CFStream.c | 4 +- .../CoreFoundation}/CFString.c | 22 +- .../CFStringEncodingConverter.c | 8 +- .../CFStringEncodingDatabase.c | 2 +- .../CoreFoundation}/CFStringEncodings.c | 14 +- .../CoreFoundation}/CFStringScanner.c | 2 +- .../CoreFoundation}/CFStringTransform.c | 9 +- .../CoreFoundation}/CFStringUtilities.c | 6 +- .../CoreFoundation}/CFSystemDirectories.c | 2 +- .../CoreFoundation}/CFTimeZone.c | 10 +- .../CoreFoundation}/CFTree.c | 4 +- .../CoreFoundation}/CFURL.c | 14 +- .../CoreFoundation}/CFURLAccess.c | 12 +- .../CoreFoundation}/CFURLComponents.c | 2 +- .../CFURLComponents_URIParser.c | 4 +- .../CoreFoundation}/CFURLSessionInterface.c | 4 +- .../CoreFoundation}/CFUUID.c | 10 +- .../CoreFoundation}/CFUniChar.c | 4 +- .../CFUniCharPropertyDatabase.S | 2 +- .../CFUniCharPropertyDatabase.data | Bin .../CoreFoundation}/CFUnicodeData-B.mapping | Bin .../CoreFoundation}/CFUnicodeData-L.mapping | Bin .../CoreFoundation}/CFUnicodeData.S | 2 +- .../CoreFoundation}/CFUnicodeDecomposition.c | 8 +- .../CoreFoundation}/CFUnicodePrecomposition.c | 4 +- .../CoreFoundation}/CFUtilities.c | 12 +- .../CoreFoundation}/CFWindowsUtilities.c | 4 +- .../CoreFoundation}/CFXMLInterface.c | 6 +- .../CoreFoundation}/CFXMLPreferencesDomain.c | 10 +- .../CoreFoundation}/CMakeLists.txt | 0 .../CoreFoundation}/CoreFoundation.rc | 0 .../CoreFoundation}/DarwinSymbolAliases | 0 .../CoreFoundation}/Info.plist | 0 .../CoreFoundation}/OlsonWindowsMapping.plist | 0 .../CoreFoundation}/SymbolAliases | 0 .../Tools/OlsonWindowsDatabase.xsl | 0 .../Tools/WindowsOlsonDatabase.xsl | 0 .../CoreFoundation}/WindowsOlsonMapping.plist | 0 .../CoreFoundation}/build.py | 0 .../CoreFoundation/cfxml-module.map | 0 .../CoreFoundation/cfxml-module.modulemap | 0 .../modules/CoreFoundationAddFramework.cmake | 0 .../{BlocksRuntime => CoreFoundation}/data.c | 0 .../include}/Block.h | 1 + .../include}/Block_private.h | 1 + .../CoreFoundation/include}/CFArray.h | 2 +- .../CoreFoundation/include}/CFAsmMacros.h | 0 .../include}/CFAttributedString.h | 6 +- .../include}/CFAttributedStringPriv.h | 2 +- .../CoreFoundation/include}/CFAvailability.h | 2 +- .../CoreFoundation/include}/CFBag.h | 2 +- .../CoreFoundation/include}/CFBase.h | 6 +- .../CoreFoundation/include}/CFBasicHash.h | 4 +- .../CoreFoundation/include}/CFBigNumber.h | 4 +- .../CoreFoundation/include}/CFBinaryHeap.h | 2 +- .../CoreFoundation/include}/CFBitVector.h | 2 +- .../CoreFoundation/include}/CFBundle.h | 12 +- .../CoreFoundation/include}/CFBundlePriv.h | 12 +- .../include}/CFBundle_BinaryTypes.h | 0 .../include}/CFBundle_Internal.h | 10 +- .../include}/CFBundle_SplitFileName.h | 2 +- .../CoreFoundation/include}/CFBurstTrie.h | 4 +- .../CoreFoundation/include}/CFByteOrder.h | 2 +- .../CoreFoundation/include}/CFCalendar.h | 8 +- .../include}/CFCalendar_Internal.h | 10 +- .../CoreFoundation/include}/CFCharacterSet.h | 4 +- .../include}/CFCharacterSetPriv.h | 2 +- .../include}/CFCollections_Internal.h | 4 +- .../CoreFoundation/include}/CFData.h | 2 +- .../CoreFoundation/include}/CFDate.h | 2 +- .../include}/CFDateComponents.h | 2 +- .../CoreFoundation/include}/CFDateFormatter.h | 6 +- .../include}/CFDateFormatter_Private.h | 4 +- .../CoreFoundation/include}/CFDateInterval.h | 4 +- .../include}/CFDateIntervalFormatter.h | 12 +- .../CoreFoundation/include}/CFDictionary.h | 2 +- .../CoreFoundation/include}/CFError.h | 6 +- .../CoreFoundation/include}/CFError_Private.h | 2 +- .../CoreFoundation/include}/CFICUConverters.h | 2 +- .../CoreFoundation/include}/CFICULogging.h | 0 .../CoreFoundation/include}/CFInternal.h | 30 +- .../include}/CFKnownLocations.h | 4 +- .../CoreFoundation/include}/CFListFormatter.h | 4 +- .../CoreFoundation/include}/CFLocale.h | 8 +- .../include}/CFLocaleInternal.h | 2 +- .../include}/CFLocale_Private.h | 2 +- .../CoreFoundation/include}/CFLocking.h | 2 +- .../CoreFoundation/include}/CFLogUtilities.h | 4 +- .../CoreFoundation/include}/CFMachPort.h | 2 +- .../include}/CFMachPort_Internal.h | 0 .../include}/CFMachPort_Lifetime.h | 2 + .../CoreFoundation/include}/CFMessagePort.h | 6 +- .../include}/CFNotificationCenter.h | 4 +- .../CoreFoundation/include}/CFNumber.h | 2 +- .../include}/CFNumberFormatter.h | 6 +- .../include}/CFNumber_Private.h | 2 +- .../CoreFoundation/include}/CFOverflow.h | 3 +- .../CoreFoundation/include}/CFPlugIn.h | 14 +- .../CoreFoundation/include}/CFPlugInCOM.h | 2 +- .../include}/CFPlugIn_Factory.h | 0 .../CoreFoundation/include}/CFPreferences.h | 6 +- .../CoreFoundation/include}/CFPriv.h | 28 +- .../CoreFoundation/include}/CFPropertyList.h | 10 +- .../include}/CFPropertyList_Internal.h | 0 .../include}/CFPropertyList_Private.h | 2 +- .../include}/CFRegularExpression.h | 6 +- .../include}/CFRelativeDateTimeFormatter.h | 6 +- .../CoreFoundation/include}/CFRunArray.h | 6 +- .../CoreFoundation/include}/CFRunLoop.h | 8 +- .../CoreFoundation/include}/CFRuntime.h | 4 +- .../include}/CFRuntime_Internal.h | 4 +- .../CoreFoundation/include}/CFSet.h | 2 +- .../CoreFoundation/include}/CFSocket.h | 4 +- .../CoreFoundation/include}/CFStorage.h | 2 +- .../CoreFoundation/include}/CFStream.h | 19 +- .../include}/CFStreamAbstract.h | 2 +- .../include}/CFStreamInternal.h | 8 +- .../CoreFoundation/include}/CFStreamPriv.h | 6 +- .../CoreFoundation/include}/CFString.h | 12 +- .../include}/CFStringDefaultEncoding.h | 2 +- .../include}/CFStringEncodingConverter.h | 2 +- .../include}/CFStringEncodingConverterExt.h | 2 +- .../include}/CFStringEncodingConverterPriv.h | 2 +- .../include}/CFStringEncodingDatabase.h | 2 +- .../include}/CFStringEncodingExt.h | 2 +- .../CFStringLocalizedFormattingInternal.h | 6 +- .../include}/CFString_Internal.h | 6 +- .../include}/CFString_Private.h | 4 +- .../CoreFoundation/include}/CFTimeZone.h | 16 +- .../CoreFoundation/include}/CFTree.h | 2 +- .../CoreFoundation/include}/CFURL.h | 8 +- .../CoreFoundation/include}/CFURL.inc.h | 0 .../CoreFoundation/include}/CFURLAccess.h | 14 +- .../CoreFoundation/include}/CFURLComponents.h | 8 +- .../include}/CFURLComponents_Internal.h | 2 +- .../CoreFoundation/include}/CFURLPriv.h | 14 +- .../include}/CFURLSessionInterface.h | 2 +- .../CoreFoundation/include}/CFUUID.h | 4 +- .../CoreFoundation/include}/CFUniChar.h | 4 +- .../CoreFoundation/include}/CFUniCharPriv.h | 4 +- .../include}/CFUnicodeDecomposition.h | 2 +- .../include}/CFUnicodePrecomposition.h | 2 +- .../include}/CFUserNotification.h | 12 +- .../CoreFoundation/include}/CFUtilities.h | 6 +- .../CoreFoundation/include}/CFXMLInterface.h | 2 +- .../include/CoreFoundation-SwiftRuntime.h | 74 +-- .../CoreFoundation/include/CoreFoundation.h | 100 ++++ .../include}/CoreFoundation_Prefix.h | 10 +- .../include}/ForFoundationOnly.h | 36 +- .../include}/ForSwiftFoundationOnly.h | 36 +- .../include}/TargetConditionals.h | 0 .../include}/WindowsResources.h | 0 .../{UUID => CoreFoundation/include}/uuid.h | 0 .../CoreFoundation}/module.map | 2 +- .../CoreFoundation}/module.modulemap | 2 +- .../runtime.c | 3 +- .../CoreFoundation/static-cfxml-module.map | 0 .../CoreFoundation/static-module.map | 2 +- .../CoreFoundation/url-module.map | 0 .../CoreFoundation/url-module.modulemap | 0 .../CoreFoundation/url-static-module.map | 0 Sources/{UUID => CoreFoundation}/uuid.c | 0 Sources/UUID/CMakeLists.txt | 34 -- 237 files changed, 793 insertions(+), 1257 deletions(-) delete mode 100644 CoreFoundation/AppServices.subproj/CFUserNotification.c delete mode 100644 CoreFoundation/Base.subproj/CoreFoundation.h delete mode 100644 CoreFoundation/String.subproj/CFStringLocalizedFormattingInternal.h create mode 100644 Package.swift delete mode 100644 Sources/BlocksRuntime/CMakeLists.txt rename {CoreFoundation/Preferences.subproj => Sources/CoreFoundation}/CFApplicationPreferences.c (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation}/CFArray.c (99%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation}/CFAttributedString.c (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation}/CFBag.c (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation}/CFBase.c (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation}/CFBasicHash.c (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation}/CFBasicHashFindBucket.m (100%) rename {CoreFoundation/NumberDate.subproj => Sources/CoreFoundation}/CFBigNumber.c (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation}/CFBinaryHeap.c (99%) rename {CoreFoundation/Parsing.subproj => Sources/CoreFoundation}/CFBinaryPList.c (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation}/CFBitVector.c (99%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation}/CFBuiltinConverters.c (100%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation}/CFBundle.c (99%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation}/CFBundle_Binary.c (100%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation}/CFBundle_DebugStrings.c (100%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation}/CFBundle_Executable.c (99%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation}/CFBundle_Grok.c (100%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation}/CFBundle_InfoPlist.c (99%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation}/CFBundle_Locale.c (99%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation}/CFBundle_Main.c (99%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation}/CFBundle_ResourceFork.c (78%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation}/CFBundle_Resources.c (99%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation}/CFBundle_SplitFileName.c (99%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation}/CFBundle_Strings.c (99%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation}/CFBundle_Tables.c (99%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation}/CFBurstTrie.c (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation}/CFCalendar.c (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation}/CFCalendar_Enumerate.c (99%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation}/CFCharacterSet.c (99%) rename {CoreFoundation/CharacterSets => Sources/CoreFoundation}/CFCharacterSetBitmaps.bitmap (100%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation}/CFCharacterSetData.S (95%) rename {CoreFoundation/Stream.subproj => Sources/CoreFoundation}/CFConcreteStreams.c (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation}/CFData.c (99%) rename {CoreFoundation/NumberDate.subproj => Sources/CoreFoundation}/CFDate.c (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation}/CFDateComponents.c (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation}/CFDateFormatter.c (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation}/CFDateInterval.c (98%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation}/CFDateIntervalFormatter.c (98%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation}/CFDictionary.c (99%) rename {CoreFoundation/Error.subproj => Sources/CoreFoundation}/CFError.c (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation}/CFFileUtilities.c (99%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation}/CFICUConverters.c (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation}/CFKnownLocations.c (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation}/CFListFormatter.c (100%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation}/CFLocale.c (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation}/CFLocaleIdentifier.c (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation}/CFLocaleKeys.c (100%) rename {CoreFoundation/RunLoop.subproj => Sources/CoreFoundation}/CFMachPort.c (99%) rename {CoreFoundation/RunLoop.subproj => Sources/CoreFoundation}/CFMachPort_Lifetime.c (100%) rename {CoreFoundation/RunLoop.subproj => Sources/CoreFoundation}/CFMessagePort.c (99%) rename {CoreFoundation/NumberDate.subproj => Sources/CoreFoundation}/CFNumber.c (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation}/CFNumberFormatter.c (99%) rename {CoreFoundation/Parsing.subproj => Sources/CoreFoundation}/CFOldStylePList.c (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation}/CFPlatform.c (99%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation}/CFPlatformConverters.c (99%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation}/CFPlugIn.c (100%) rename {CoreFoundation/Preferences.subproj => Sources/CoreFoundation}/CFPreferences.c (99%) rename {CoreFoundation/Parsing.subproj => Sources/CoreFoundation}/CFPropertyList.c (99%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation}/CFRegularExpression.c (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation}/CFRelativeDateTimeFormatter.c (100%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation}/CFRunArray.c (99%) rename {CoreFoundation/RunLoop.subproj => Sources/CoreFoundation}/CFRunLoop.c (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation}/CFRuntime.c (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation}/CFSet.c (99%) rename {CoreFoundation/RunLoop.subproj => Sources/CoreFoundation}/CFSocket.c (99%) rename {CoreFoundation/Stream.subproj => Sources/CoreFoundation}/CFSocketStream.c (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation}/CFSortFunctions.c (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation}/CFStorage.c (99%) rename {CoreFoundation/Stream.subproj => Sources/CoreFoundation}/CFStream.c (99%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation}/CFString.c (99%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation}/CFStringEncodingConverter.c (99%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation}/CFStringEncodingDatabase.c (99%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation}/CFStringEncodings.c (99%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation}/CFStringScanner.c (99%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation}/CFStringTransform.c (99%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation}/CFStringUtilities.c (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation}/CFSystemDirectories.c (99%) rename {CoreFoundation/NumberDate.subproj => Sources/CoreFoundation}/CFTimeZone.c (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation}/CFTree.c (99%) rename {CoreFoundation/URL.subproj => Sources/CoreFoundation}/CFURL.c (99%) rename {CoreFoundation/URL.subproj => Sources/CoreFoundation}/CFURLAccess.c (99%) rename {CoreFoundation/URL.subproj => Sources/CoreFoundation}/CFURLComponents.c (99%) rename {CoreFoundation/URL.subproj => Sources/CoreFoundation}/CFURLComponents_URIParser.c (99%) rename {CoreFoundation/URL.subproj => Sources/CoreFoundation}/CFURLSessionInterface.c (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation}/CFUUID.c (98%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation}/CFUniChar.c (99%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation}/CFUniCharPropertyDatabase.S (95%) rename {CoreFoundation/CharacterSets => Sources/CoreFoundation}/CFUniCharPropertyDatabase.data (100%) rename {CoreFoundation/CharacterSets => Sources/CoreFoundation}/CFUnicodeData-B.mapping (100%) rename {CoreFoundation/CharacterSets => Sources/CoreFoundation}/CFUnicodeData-L.mapping (100%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation}/CFUnicodeData.S (96%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation}/CFUnicodeDecomposition.c (99%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation}/CFUnicodePrecomposition.c (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation}/CFUtilities.c (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation}/CFWindowsUtilities.c (98%) rename {CoreFoundation/Parsing.subproj => Sources/CoreFoundation}/CFXMLInterface.c (99%) rename {CoreFoundation/Preferences.subproj => Sources/CoreFoundation}/CFXMLPreferencesDomain.c (99%) rename {CoreFoundation => Sources/CoreFoundation}/CMakeLists.txt (100%) rename {CoreFoundation => Sources/CoreFoundation}/CoreFoundation.rc (100%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation}/DarwinSymbolAliases (100%) rename {CoreFoundation => Sources/CoreFoundation}/Info.plist (100%) rename {CoreFoundation => Sources/CoreFoundation}/OlsonWindowsMapping.plist (100%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation}/SymbolAliases (100%) rename {CoreFoundation => Sources/CoreFoundation}/Tools/OlsonWindowsDatabase.xsl (100%) rename {CoreFoundation => Sources/CoreFoundation}/Tools/WindowsOlsonDatabase.xsl (100%) rename {CoreFoundation => Sources/CoreFoundation}/WindowsOlsonMapping.plist (100%) rename {CoreFoundation => Sources/CoreFoundation}/build.py (100%) rename CoreFoundation/Parsing.subproj/module.map => Sources/CoreFoundation/cfxml-module.map (100%) rename CoreFoundation/Parsing.subproj/module.modulemap => Sources/CoreFoundation/cfxml-module.modulemap (100%) rename {CoreFoundation => Sources/CoreFoundation}/cmake/modules/CoreFoundationAddFramework.cmake (100%) rename Sources/{BlocksRuntime => CoreFoundation}/data.c (100%) rename Sources/{BlocksRuntime => CoreFoundation/include}/Block.h (98%) rename Sources/{BlocksRuntime => CoreFoundation/include}/Block_private.h (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation/include}/CFArray.h (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CFAsmMacros.h (100%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation/include}/CFAttributedString.h (99%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation/include}/CFAttributedStringPriv.h (96%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CFAvailability.h (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation/include}/CFBag.h (98%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CFBase.h (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation/include}/CFBasicHash.h (98%) rename {CoreFoundation/NumberDate.subproj => Sources/CoreFoundation/include}/CFBigNumber.h (97%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation/include}/CFBinaryHeap.h (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation/include}/CFBitVector.h (98%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation/include}/CFBundle.h (98%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation/include}/CFBundlePriv.h (98%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation/include}/CFBundle_BinaryTypes.h (100%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation/include}/CFBundle_Internal.h (99%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation/include}/CFBundle_SplitFileName.h (95%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation/include}/CFBurstTrie.h (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CFByteOrder.h (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFCalendar.h (96%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFCalendar_Internal.h (96%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation/include}/CFCharacterSet.h (99%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation/include}/CFCharacterSetPriv.h (98%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation/include}/CFCollections_Internal.h (91%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation/include}/CFData.h (98%) rename {CoreFoundation/NumberDate.subproj => Sources/CoreFoundation/include}/CFDate.h (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFDateComponents.h (98%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFDateFormatter.h (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFDateFormatter_Private.h (93%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFDateInterval.h (97%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFDateIntervalFormatter.h (95%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation/include}/CFDictionary.h (99%) rename {CoreFoundation/Error.subproj => Sources/CoreFoundation/include}/CFError.h (99%) rename {CoreFoundation/Error.subproj => Sources/CoreFoundation/include}/CFError_Private.h (96%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation/include}/CFICUConverters.h (97%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFICULogging.h (100%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CFInternal.h (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CFKnownLocations.h (96%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFListFormatter.h (93%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFLocale.h (98%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFLocaleInternal.h (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFLocale_Private.h (97%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CFLocking.h (98%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CFLogUtilities.h (95%) rename {CoreFoundation/RunLoop.subproj => Sources/CoreFoundation/include}/CFMachPort.h (98%) rename {CoreFoundation/RunLoop.subproj => Sources/CoreFoundation/include}/CFMachPort_Internal.h (100%) rename {CoreFoundation/RunLoop.subproj => Sources/CoreFoundation/include}/CFMachPort_Lifetime.h (98%) rename {CoreFoundation/RunLoop.subproj => Sources/CoreFoundation/include}/CFMessagePort.h (96%) rename {CoreFoundation/AppServices.subproj => Sources/CoreFoundation/include}/CFNotificationCenter.h (98%) rename {CoreFoundation/NumberDate.subproj => Sources/CoreFoundation/include}/CFNumber.h (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFNumberFormatter.h (98%) rename {CoreFoundation/NumberDate.subproj => Sources/CoreFoundation/include}/CFNumber_Private.h (95%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CFOverflow.h (98%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation/include}/CFPlugIn.h (95%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation/include}/CFPlugInCOM.h (99%) rename {CoreFoundation/PlugIn.subproj => Sources/CoreFoundation/include}/CFPlugIn_Factory.h (100%) rename {CoreFoundation/Preferences.subproj => Sources/CoreFoundation/include}/CFPreferences.h (98%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CFPriv.h (98%) rename {CoreFoundation/Parsing.subproj => Sources/CoreFoundation/include}/CFPropertyList.h (98%) rename {CoreFoundation/Parsing.subproj => Sources/CoreFoundation/include}/CFPropertyList_Internal.h (100%) rename {CoreFoundation/Parsing.subproj => Sources/CoreFoundation/include}/CFPropertyList_Private.h (94%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation/include}/CFRegularExpression.h (97%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFRelativeDateTimeFormatter.h (96%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation/include}/CFRunArray.h (94%) rename {CoreFoundation/RunLoop.subproj => Sources/CoreFoundation/include}/CFRunLoop.h (98%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CFRuntime.h (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CFRuntime_Internal.h (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation/include}/CFSet.h (99%) rename {CoreFoundation/RunLoop.subproj => Sources/CoreFoundation/include}/CFSocket.h (99%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation/include}/CFStorage.h (99%) rename {CoreFoundation/Stream.subproj => Sources/CoreFoundation/include}/CFStream.h (98%) rename {CoreFoundation/Stream.subproj => Sources/CoreFoundation/include}/CFStreamAbstract.h (99%) rename {CoreFoundation/Stream.subproj => Sources/CoreFoundation/include}/CFStreamInternal.h (95%) rename {CoreFoundation/Stream.subproj => Sources/CoreFoundation/include}/CFStreamPriv.h (97%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation/include}/CFString.h (99%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation/include}/CFStringDefaultEncoding.h (98%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation/include}/CFStringEncodingConverter.h (99%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation/include}/CFStringEncodingConverterExt.h (99%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation/include}/CFStringEncodingConverterPriv.h (98%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation/include}/CFStringEncodingDatabase.h (96%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation/include}/CFStringEncodingExt.h (99%) rename {CoreFoundation/Locale.subproj => Sources/CoreFoundation/include}/CFStringLocalizedFormattingInternal.h (80%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation/include}/CFString_Internal.h (86%) rename {CoreFoundation/String.subproj => Sources/CoreFoundation/include}/CFString_Private.h (96%) rename {CoreFoundation/NumberDate.subproj => Sources/CoreFoundation/include}/CFTimeZone.h (90%) rename {CoreFoundation/Collections.subproj => Sources/CoreFoundation/include}/CFTree.h (99%) rename {CoreFoundation/URL.subproj => Sources/CoreFoundation/include}/CFURL.h (99%) rename {CoreFoundation/URL.subproj => Sources/CoreFoundation/include}/CFURL.inc.h (100%) rename {CoreFoundation/URL.subproj => Sources/CoreFoundation/include}/CFURLAccess.h (96%) rename {CoreFoundation/URL.subproj => Sources/CoreFoundation/include}/CFURLComponents.h (98%) rename {CoreFoundation/URL.subproj => Sources/CoreFoundation/include}/CFURLComponents_Internal.h (98%) rename {CoreFoundation/URL.subproj => Sources/CoreFoundation/include}/CFURLPriv.h (99%) rename {CoreFoundation/URL.subproj => Sources/CoreFoundation/include}/CFURLSessionInterface.h (99%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CFUUID.h (97%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation/include}/CFUniChar.h (99%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation/include}/CFUniCharPriv.h (95%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation/include}/CFUnicodeDecomposition.h (97%) rename {CoreFoundation/StringEncodings.subproj => Sources/CoreFoundation/include}/CFUnicodePrecomposition.h (95%) rename {CoreFoundation/AppServices.subproj => Sources/CoreFoundation/include}/CFUserNotification.h (97%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CFUtilities.h (87%) rename {CoreFoundation/Parsing.subproj => Sources/CoreFoundation/include}/CFXMLInterface.h (99%) rename CoreFoundation/Base.subproj/SwiftRuntime/CoreFoundation.h => Sources/CoreFoundation/include/CoreFoundation-SwiftRuntime.h (52%) create mode 100644 Sources/CoreFoundation/include/CoreFoundation.h rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/CoreFoundation_Prefix.h (98%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/ForFoundationOnly.h (98%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation/include}/ForSwiftFoundationOnly.h (97%) rename {CoreFoundation/Base.subproj/SwiftRuntime => Sources/CoreFoundation/include}/TargetConditionals.h (100%) rename {CoreFoundation => Sources/CoreFoundation/include}/WindowsResources.h (100%) rename Sources/{UUID => CoreFoundation/include}/uuid.h (100%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation}/module.map (68%) rename {CoreFoundation/Base.subproj => Sources/CoreFoundation}/module.modulemap (73%) rename Sources/{BlocksRuntime => CoreFoundation}/runtime.c (99%) rename CoreFoundation/Parsing.subproj/static/module.map => Sources/CoreFoundation/static-cfxml-module.map (100%) rename CoreFoundation/Base.subproj/static/module.map => Sources/CoreFoundation/static-module.map (76%) rename CoreFoundation/URL.subproj/module.map => Sources/CoreFoundation/url-module.map (100%) rename CoreFoundation/URL.subproj/module.modulemap => Sources/CoreFoundation/url-module.modulemap (100%) rename CoreFoundation/URL.subproj/static/module.map => Sources/CoreFoundation/url-static-module.map (100%) rename Sources/{UUID => CoreFoundation}/uuid.c (100%) delete mode 100644 Sources/UUID/CMakeLists.txt diff --git a/.gitignore b/.gitignore index 659bd4e79d..16e7ca9f18 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ # Mac OS X filesystem metadata .DS_Store +Package.resolved + # Xcode user artifacts xcuserdata/ project.xcworkspace diff --git a/CoreFoundation/AppServices.subproj/CFUserNotification.c b/CoreFoundation/AppServices.subproj/CFUserNotification.c deleted file mode 100644 index 73697af12a..0000000000 --- a/CoreFoundation/AppServices.subproj/CFUserNotification.c +++ /dev/null @@ -1,460 +0,0 @@ -/* CFUserNotification.c - Copyright (c) 2000-2019, Apple Inc. All rights reserved. - - Portions Copyright (c) 2014-2019, Apple Inc. and the Swift project authors - Licensed under Apache License v2.0 with Runtime Library Exception - See http://swift.org/LICENSE.txt for license information - See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors - Original Author: Doug Davidson - Responsibility: Kevin Perry -*/ - -#include -#include -#include -#include -#include "CFInternal.h" -#include "CFRuntime_Internal.h" -#include -#include -#include -#include -#include -#include -#include - -#if __has_include() -#include -#endif -#if _POSIX_THREADS -#include -#endif - -#define CFUserNotificationLog(alertHeader, alertMessage) CFLog(3, CFSTR("%@: %@"), alertHeader, alertMessage); - -enum { - kCFUserNotificationCancelFlag = (1 << 3), - kCFUserNotificationUpdateFlag = (1 << 4) -}; - -CONST_STRING_DECL(kCFUserNotificationTokenKey, "Token") -CONST_STRING_DECL(kCFUserNotificationTimeoutKey, "Timeout") -CONST_STRING_DECL(kCFUserNotificationFlagsKey, "Flags") -CONST_STRING_DECL(kCFUserNotificationIconPathKey, "IconPath") -CONST_STRING_DECL(kCFUserNotificationSoundPathKey, "SoundPath") -CONST_STRING_DECL(kCFUserNotificationLocalizationPathKey, "LocalizationPath") -CONST_STRING_DECL(kCFUserNotificationAlertSourceKey, "AlertSource") -CONST_STRING_DECL(kCFUserNotificationTextFieldLabelsKey, "TextFieldTitles") -CONST_STRING_DECL(kCFUserNotificationCheckBoxLabelsKey, "CheckBoxTitles") -CONST_STRING_DECL(kCFUserNotificationIconURLKey, "IconURL") -CONST_STRING_DECL(kCFUserNotificationSoundURLKey, "SoundURL") -CONST_STRING_DECL(kCFUserNotificationLocalizationURLKey, "LocalizationURL") -CONST_STRING_DECL(kCFUserNotificationAlertHeaderKey, "AlertHeader") -CONST_STRING_DECL(kCFUserNotificationAlertMessageKey, "AlertMessage") -CONST_STRING_DECL(kCFUserNotificationDefaultButtonTitleKey, "DefaultButtonTitle") -CONST_STRING_DECL(kCFUserNotificationAlternateButtonTitleKey, "AlternateButtonTitle") -CONST_STRING_DECL(kCFUserNotificationOtherButtonTitleKey, "OtherButtonTitle") -CONST_STRING_DECL(kCFUserNotificationProgressIndicatorValueKey, "ProgressIndicatorValue") -CONST_STRING_DECL(kCFUserNotificationSessionIDKey, "SessionID") -CONST_STRING_DECL(kCFUserNotificationPopUpTitlesKey, "PopUpTitles") -CONST_STRING_DECL(kCFUserNotificationTextFieldTitlesKey, "TextFieldTitles") -CONST_STRING_DECL(kCFUserNotificationCheckBoxTitlesKey, "CheckBoxTitles") -CONST_STRING_DECL(kCFUserNotificationTextFieldValuesKey, "TextFieldValues") -#if TARGET_OS_OSX -CONST_STRING_DECL(kCFUserNotificationPopUpSelectionKey, "PopUpSelection") -#endif -CONST_STRING_DECL(kCFUserNotificationKeyboardTypesKey, "KeyboardTypes") -CONST_STRING_DECL(kCFUserNotificationAlertTopMostKey, "AlertTopMost") // boolean value - - -struct __CFUserNotification { - CFRuntimeBase _base; - SInt32 _replyPort; - SInt32 _token; - CFTimeInterval _timeout; - CFOptionFlags _requestFlags; - CFOptionFlags _responseFlags; - CFStringRef _sessionID; - CFDictionaryRef _responseDictionary; - CFMachPortRef _machPort; - CFUserNotificationCallBack _callout; -}; - -static CFStringRef __CFUserNotificationCopyDescription(CFTypeRef cf) { - CFMutableStringRef result; - result = CFStringCreateMutable(CFGetAllocator(cf), 0); - CFStringAppendFormat(result, NULL, CFSTR(""), cf); - return result; -} - -#define MAX_STRING_LENGTH PATH_MAX -#define MAX_STRING_COUNT 16 -#define MAX_PORT_NAME_LENGTH 63 -#define NOTIFICATION_PORT_NAME_SUFFIX ".session." -#define MESSAGE_TIMEOUT 100 -#define NOTIFICATION_PORT_NAME_MAC "com.apple.UNCUserNotification" -#define NOTIFICATION_PORT_NAME_IOS "com.apple.SBUserNotification" - - -static void __CFUserNotificationDeallocate(CFTypeRef cf); - -const CFRuntimeClass __CFUserNotificationClass = { - 0, - "CFUserNotification", - NULL, // init - NULL, // copy - __CFUserNotificationDeallocate, - NULL, // equal - NULL, // hash - NULL, // - __CFUserNotificationCopyDescription -}; - -CFTypeID CFUserNotificationGetTypeID(void) { - return _kCFRuntimeIDCFUserNotification; -} - -static void __CFUserNotificationDeallocate(CFTypeRef cf) { - CFUserNotificationRef userNotification = (CFUserNotificationRef)cf; - if (userNotification->_machPort) { - CFMachPortInvalidate(userNotification->_machPort); - CFRelease(userNotification->_machPort); - userNotification->_machPort = NULL; // NOTE: this is still potentially racey and should probably have a CAS (for now this is just a stop-gap to reduce an already very rare crash potential) - } else if (MACH_PORT_NULL != userNotification->_replyPort) { - mach_port_mod_refs(mach_task_self(), userNotification->_replyPort, MACH_PORT_RIGHT_RECEIVE, -1); - } - if (userNotification->_sessionID) CFRelease(userNotification->_sessionID); - if (userNotification->_responseDictionary) CFRelease(userNotification->_responseDictionary); -} - -static void _CFUserNotificationAddToDictionary(const void *key, const void *value, void *context) { - if (CFGetTypeID(key) == CFStringGetTypeID()) CFDictionarySetValue((CFMutableDictionaryRef)context, key, value); -} - -static CFDictionaryRef _CFUserNotificationCreateModifiedDictionary(CFAllocatorRef allocator, CFDictionaryRef dictionary, SInt32 token, SInt32 timeout, CFStringRef source) { - CFMutableDictionaryRef md = CFDictionaryCreateMutable(allocator, 0, &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); - CFNumberRef tokenNumber = CFNumberCreate(allocator, kCFNumberSInt32Type, &token); - CFNumberRef timeoutNumber = CFNumberCreate(allocator, kCFNumberSInt32Type, &timeout); - CFURLRef url = NULL; - CFStringRef path = NULL; - - if (dictionary) CFDictionaryApplyFunction(dictionary, _CFUserNotificationAddToDictionary, md); - if (source) CFDictionaryAddValue(md, kCFUserNotificationAlertSourceKey, source); - if (tokenNumber) { - CFDictionaryAddValue(md, kCFUserNotificationTokenKey, tokenNumber); - CFRelease(tokenNumber); - } - if (timeoutNumber) { - CFDictionaryAddValue(md, kCFUserNotificationTimeoutKey, timeoutNumber); - CFRelease(timeoutNumber); - } - - url = CFDictionaryGetValue(md, kCFUserNotificationIconURLKey); - if (url && CFGetTypeID((CFTypeRef)url) == CFURLGetTypeID()) { - url = CFURLCopyAbsoluteURL(url); - CFDictionaryRemoveValue(md, kCFUserNotificationIconURLKey); - path = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle); - CFDictionaryAddValue(md, kCFUserNotificationIconPathKey, path); - CFRelease(url); - CFRelease(path); - } - url = CFDictionaryGetValue(md, kCFUserNotificationSoundURLKey); - if (url && CFGetTypeID((CFTypeRef)url) == CFURLGetTypeID()) { - url = CFURLCopyAbsoluteURL(url); - CFDictionaryRemoveValue(md, kCFUserNotificationSoundURLKey); - path = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle); - CFDictionaryAddValue(md, kCFUserNotificationSoundPathKey, path); - CFRelease(url); - CFRelease(path); - } - url = CFDictionaryGetValue(md, kCFUserNotificationLocalizationURLKey); - if (url && CFGetTypeID((CFTypeRef)url) == CFURLGetTypeID()) { - url = CFURLCopyAbsoluteURL(url); - CFDictionaryRemoveValue(md, kCFUserNotificationLocalizationURLKey); - path = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle); - CFDictionaryAddValue(md, kCFUserNotificationLocalizationPathKey, path); - CFRelease(url); - CFRelease(path); - } - return md; -} - -static SInt32 _CFUserNotificationSendRequest(CFAllocatorRef allocator, CFStringRef sessionID, mach_port_t replyPort, SInt32 token, CFTimeInterval timeout, CFOptionFlags flags, CFDictionaryRef dictionary) { - CFDictionaryRef modifiedDictionary = NULL; - SInt32 retval = ERR_SUCCESS, itimeout = (timeout > 0.0 && timeout < INT_MAX) ? (SInt32)timeout : 0; - CFDataRef data; - mach_msg_base_t *msg = NULL; - mach_port_t bootstrapPort = MACH_PORT_NULL, serverPort = MACH_PORT_NULL; - CFIndex size; - - -#if TARGET_OS_OSX - const char *namebuffer = NOTIFICATION_PORT_NAME_MAC; - const CFIndex nameLen = sizeof(NOTIFICATION_PORT_NAME_MAC); -#else - const char *namebuffer = NOTIFICATION_PORT_NAME_IOS; - const CFIndex nameLen = sizeof(NOTIFICATION_PORT_NAME_IOS); -#endif - - if (sessionID) { - char sessionid[MAX_PORT_NAME_LENGTH + 1]; - CFIndex len = MAX_PORT_NAME_LENGTH - nameLen - sizeof(NOTIFICATION_PORT_NAME_SUFFIX); - CFStringGetBytes(sessionID, CFRangeMake(0, CFStringGetLength(sessionID)), kCFStringEncodingUTF8, 0, false, (uint8_t *)sessionid, len, &size); - sessionid[len - 1] = '\0'; - strlcat(namebuffer, NOTIFICATION_PORT_NAME_SUFFIX, sizeof(namebuffer)); - strlcat(namebuffer, sessionid, sizeof(namebuffer)); - } - - retval = task_get_bootstrap_port(mach_task_self(), &bootstrapPort); - if (ERR_SUCCESS == retval && MACH_PORT_NULL != serverPort) { - modifiedDictionary = _CFUserNotificationCreateModifiedDictionary(allocator, dictionary, token, itimeout, _CFProcessNameString()); - if (modifiedDictionary) { - data = CFPropertyListCreateData(allocator, modifiedDictionary, kCFPropertyListXMLFormat_v1_0, 0, NULL); - if (data) { - size = sizeof(mach_msg_base_t) + ((CFDataGetLength(data) + 3) & (~0x3)); - msg = (mach_msg_base_t *)CFAllocatorAllocate(kCFAllocatorSystemDefault, size, 0); - if (__CFOASafe) __CFSetLastAllocationEventName(msg, "CFUserNotification (temp)"); - if (msg) { - memset(msg, 0, size); - msg->header.msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, (replyPort == MACH_PORT_NULL) ? 0 : MACH_MSG_TYPE_MAKE_SEND_ONCE); - msg->header.msgh_size = size; - msg->header.msgh_remote_port = serverPort; - msg->header.msgh_local_port = replyPort; - msg->header.msgh_id = flags; - msg->body.msgh_descriptor_count = 0; - CFDataGetBytes(data, CFRangeMake(0, CFDataGetLength(data)), (uint8_t *)msg + sizeof(mach_msg_base_t)); - //CFShow(CFStringCreateWithBytes(kCFAllocatorSystemDefault, (UInt8 *)msg + sizeof(mach_msg_base_t), CFDataGetLength(data), kCFStringEncodingUTF8, false)); - retval = mach_msg((mach_msg_header_t *)msg, MACH_SEND_MSG|MACH_SEND_TIMEOUT, size, 0, MACH_PORT_NULL, MESSAGE_TIMEOUT, MACH_PORT_NULL); - CFAllocatorDeallocate(kCFAllocatorSystemDefault, msg); - } else { - retval = unix_err(ENOMEM); - } - CFRelease(data); - } else { - retval = unix_err(ENOMEM); - } - CFRelease(modifiedDictionary); - } else { - retval = unix_err(ENOMEM); - } - } - return retval; -} - -static SInt32 _getNextToken() { - static uint16_t tokenCounter = 0; - SInt32 token = ((getpid() << 16) | (tokenCounter++)); - return token; -} - -CFUserNotificationRef CFUserNotificationCreate(CFAllocatorRef allocator, CFTimeInterval timeout, CFOptionFlags flags, SInt32 *error, CFDictionaryRef dictionary) { - CHECK_FOR_FORK(); - CFUserNotificationRef userNotification = NULL; - SInt32 retval = ERR_SUCCESS; - SInt32 token = _getNextToken(); - CFStringRef sessionID = (dictionary ? CFDictionaryGetValue(dictionary, kCFUserNotificationSessionIDKey) : NULL); - mach_port_t replyPort = MACH_PORT_NULL; - - if (!allocator) allocator = __CFGetDefaultAllocator(); - retval = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &replyPort); - if (ERR_SUCCESS == retval && MACH_PORT_NULL != replyPort) retval = _CFUserNotificationSendRequest(allocator, sessionID, replyPort, token, timeout, flags, dictionary); - if (ERR_SUCCESS == retval) { - userNotification = (CFUserNotificationRef)_CFRuntimeCreateInstance(allocator, CFUserNotificationGetTypeID(), sizeof(struct __CFUserNotification) - sizeof(CFRuntimeBase), NULL); - if (userNotification) { - userNotification->_replyPort = replyPort; - userNotification->_token = token; - userNotification->_timeout = timeout; - userNotification->_requestFlags = flags; - if (sessionID) userNotification->_sessionID = CFStringCreateCopy(allocator, sessionID); - } else { - retval = unix_err(ENOMEM); - } - } else { - if (dictionary) CFUserNotificationLog(CFDictionaryGetValue(dictionary, kCFUserNotificationAlertHeaderKey), CFDictionaryGetValue(dictionary, kCFUserNotificationAlertMessageKey)); - } - if (ERR_SUCCESS != retval && MACH_PORT_NULL != replyPort) { - mach_port_mod_refs(mach_task_self(), replyPort, MACH_PORT_RIGHT_RECEIVE, -1); - } - if (error) *error = retval; - return userNotification; -} - -static void _CFUserNotificationMachPortCallBack(CFMachPortRef port, void *m, CFIndex size, void *info) { - CFUserNotificationRef userNotification = (CFUserNotificationRef)info; - mach_msg_base_t *msg = (mach_msg_base_t *)m; - CFOptionFlags responseFlags = msg->header.msgh_id; - if (msg->header.msgh_size > sizeof(mach_msg_base_t)) { - CFDataRef responseData = CFDataCreate(kCFAllocatorSystemDefault, (uint8_t *)msg + sizeof(mach_msg_base_t), msg->header.msgh_size - sizeof(mach_msg_base_t)); - if (responseData) { - userNotification->_responseDictionary = CFPropertyListCreateWithData(kCFAllocatorSystemDefault, responseData, kCFPropertyListImmutable, NULL, NULL); - CFRelease(responseData); - } - } - CFMachPortInvalidate(userNotification->_machPort); - CFRelease(userNotification->_machPort); - userNotification->_machPort = NULL; - mach_port_mod_refs(mach_task_self(), userNotification->_replyPort, MACH_PORT_RIGHT_RECEIVE, -1); - userNotification->_replyPort = MACH_PORT_NULL; - userNotification->_callout(userNotification, responseFlags); -} - -SInt32 CFUserNotificationReceiveResponse(CFUserNotificationRef userNotification, CFTimeInterval timeout, CFOptionFlags *responseFlags) { - CF_ASSERT_TYPE_OR_NULL(_kCFRuntimeIDCFUserNotification, userNotification); - CHECK_FOR_FORK(); - SInt32 retval = ERR_SUCCESS; - mach_msg_timeout_t msgtime = (timeout > 0.0 && 1000.0 * timeout < INT_MAX) ? (mach_msg_timeout_t)(1000.0 * timeout) : 0; - mach_msg_base_t *msg = NULL; - CFIndex size = MAX_STRING_COUNT * MAX_STRING_LENGTH; - CFDataRef responseData; - - if (userNotification && MACH_PORT_NULL != userNotification->_replyPort) { - msg = (mach_msg_base_t *)CFAllocatorAllocate(kCFAllocatorSystemDefault, size, 0); - if (__CFOASafe) __CFSetLastAllocationEventName(msg, "CFUserNotification (temp)"); - if (msg) { - memset(msg, 0, size); - msg->header.msgh_size = size; - if (msgtime > 0) { - retval = mach_msg((mach_msg_header_t *)msg, MACH_RCV_MSG|MACH_RCV_TIMEOUT, 0, size, userNotification->_replyPort, msgtime, MACH_PORT_NULL); - } else { - retval = mach_msg((mach_msg_header_t *)msg, MACH_RCV_MSG, 0, size, userNotification->_replyPort, 0, MACH_PORT_NULL); - } - if (ERR_SUCCESS == retval) { - if (responseFlags) *responseFlags = msg->header.msgh_id; - if (msg->header.msgh_size > sizeof(mach_msg_base_t)) { - responseData = CFDataCreate(kCFAllocatorSystemDefault, (uint8_t *)msg + sizeof(mach_msg_base_t), msg->header.msgh_size - sizeof(mach_msg_base_t)); - if (responseData) { - userNotification->_responseDictionary = CFPropertyListCreateWithData(kCFAllocatorSystemDefault, responseData, kCFPropertyListImmutable, NULL, NULL); - CFRelease(responseData); - } - } - if (userNotification->_machPort) { - CFMachPortInvalidate(userNotification->_machPort); - CFRelease(userNotification->_machPort); - userNotification->_machPort = NULL; - } - mach_port_mod_refs(mach_task_self(), userNotification->_replyPort, MACH_PORT_RIGHT_RECEIVE, -1); - userNotification->_replyPort = MACH_PORT_NULL; - } - CFAllocatorDeallocate(kCFAllocatorSystemDefault, msg); - } else { - retval = unix_err(ENOMEM); - } - } - return retval; -} - -CFStringRef CFUserNotificationGetResponseValue(CFUserNotificationRef userNotification, CFStringRef key, CFIndex idx) { - CF_ASSERT_TYPE_OR_NULL(_kCFRuntimeIDCFUserNotification, userNotification); - CHECK_FOR_FORK(); - CFStringRef retval = NULL; - CFTypeRef value = NULL; - if (userNotification && userNotification->_responseDictionary) { - value = CFDictionaryGetValue(userNotification->_responseDictionary, key); - if (value == NULL) { - return NULL; - } - if (CFGetTypeID(value) == CFStringGetTypeID()) { - if (0 == idx) retval = (CFStringRef)value; - } else if (CFGetTypeID(value) == CFArrayGetTypeID()) { - if (0 <= idx && idx < CFArrayGetCount((CFArrayRef)value)) retval = (CFStringRef)CFArrayGetValueAtIndex((CFArrayRef)value, idx); - } - } - return retval; -} - -CFDictionaryRef CFUserNotificationGetResponseDictionary(CFUserNotificationRef userNotification) { - CF_ASSERT_TYPE_OR_NULL(_kCFRuntimeIDCFUserNotification, userNotification); - CHECK_FOR_FORK(); - return userNotification ? userNotification->_responseDictionary : NULL; -} - -SInt32 CFUserNotificationUpdate(CFUserNotificationRef userNotification, CFTimeInterval timeout, CFOptionFlags flags, CFDictionaryRef dictionary) { - CF_ASSERT_TYPE_OR_NULL(_kCFRuntimeIDCFUserNotification, userNotification); - CHECK_FOR_FORK(); - SInt32 retval = ERR_SUCCESS; - if (userNotification && MACH_PORT_NULL != userNotification->_replyPort) { - // Avoid including a new send-once right with update/cancel messages by passing MACH_PORT_NULL, since the server doesn't need to use them. - retval = _CFUserNotificationSendRequest(CFGetAllocator(userNotification), userNotification->_sessionID, MACH_PORT_NULL, userNotification->_token, timeout, flags|kCFUserNotificationUpdateFlag, dictionary); - } - return retval; -} - -SInt32 CFUserNotificationCancel(CFUserNotificationRef userNotification) { - CF_ASSERT_TYPE_OR_NULL(_kCFRuntimeIDCFUserNotification, userNotification); - CHECK_FOR_FORK(); - SInt32 retval = ERR_SUCCESS; - if (userNotification && MACH_PORT_NULL != userNotification->_replyPort) { - // Avoid including a new send-once right with update/cancel messages by passing MACH_PORT_NULL, since the server doesn't need to use them. - retval = _CFUserNotificationSendRequest(CFGetAllocator(userNotification), userNotification->_sessionID, MACH_PORT_NULL, userNotification->_token, 0, kCFUserNotificationCancelFlag, NULL); - } - return retval; -} - -CFRunLoopSourceRef CFUserNotificationCreateRunLoopSource(CFAllocatorRef allocator, CFUserNotificationRef userNotification, CFUserNotificationCallBack callout, CFIndex order) { - CF_ASSERT_TYPE_OR_NULL(_kCFRuntimeIDCFUserNotification, userNotification); - CHECK_FOR_FORK(); - CFRunLoopSourceRef source = NULL; - if (userNotification && callout && !userNotification->_machPort && MACH_PORT_NULL != userNotification->_replyPort) { - CFMachPortContext context = {0, userNotification, NULL, NULL, NULL}; - userNotification->_machPort = CFMachPortCreateWithPort(CFGetAllocator(userNotification), (mach_port_t)userNotification->_replyPort, _CFUserNotificationMachPortCallBack, &context, NULL); - } - if (userNotification && userNotification->_machPort) { - source = CFMachPortCreateRunLoopSource(allocator, userNotification->_machPort, order); - userNotification->_callout = callout; - } - return source; -} - -SInt32 CFUserNotificationDisplayNotice(CFTimeInterval timeout, CFOptionFlags flags, CFURLRef iconURL, CFURLRef soundURL, CFURLRef localizationURL, CFStringRef alertHeader, CFStringRef alertMessage, CFStringRef defaultButtonTitle) { - CHECK_FOR_FORK(); - SInt32 retval = ERR_SUCCESS; - CFMutableDictionaryRef dict = CFDictionaryCreateMutable(kCFAllocatorSystemDefault, 0, &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); - if (iconURL) CFDictionaryAddValue(dict, kCFUserNotificationIconURLKey, iconURL); - if (soundURL) CFDictionaryAddValue(dict, kCFUserNotificationSoundURLKey, soundURL); - if (localizationURL) CFDictionaryAddValue(dict, kCFUserNotificationLocalizationURLKey, localizationURL); - if (alertHeader) CFDictionaryAddValue(dict, kCFUserNotificationAlertHeaderKey, alertHeader); - if (alertMessage) CFDictionaryAddValue(dict, kCFUserNotificationAlertMessageKey, alertMessage); - if (defaultButtonTitle) CFDictionaryAddValue(dict, kCFUserNotificationDefaultButtonTitleKey, defaultButtonTitle); - retval = _CFUserNotificationSendRequest(__CFGetDefaultAllocator(), NULL, MACH_PORT_NULL, _getNextToken(), timeout, flags, dict); - if (ERR_SUCCESS != retval) { - CFUserNotificationLog(alertHeader, alertMessage); - } - CFRelease(dict); - return retval; -} - - -CF_EXPORT SInt32 CFUserNotificationDisplayAlert(CFTimeInterval timeout, CFOptionFlags flags, CFURLRef iconURL, CFURLRef soundURL, CFURLRef localizationURL, CFStringRef alertHeader, CFStringRef alertMessage, CFStringRef defaultButtonTitle, CFStringRef alternateButtonTitle, CFStringRef otherButtonTitle, CFOptionFlags *responseFlags) { - CHECK_FOR_FORK(); - CFUserNotificationRef userNotification; - SInt32 retval = ERR_SUCCESS; - CFMutableDictionaryRef dict = CFDictionaryCreateMutable(kCFAllocatorSystemDefault, 0, &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); - if (iconURL) CFDictionaryAddValue(dict, kCFUserNotificationIconURLKey, iconURL); - if (soundURL) CFDictionaryAddValue(dict, kCFUserNotificationSoundURLKey, soundURL); - if (localizationURL) CFDictionaryAddValue(dict, kCFUserNotificationLocalizationURLKey, localizationURL); - if (alertHeader) CFDictionaryAddValue(dict, kCFUserNotificationAlertHeaderKey, alertHeader); - if (alertMessage) CFDictionaryAddValue(dict, kCFUserNotificationAlertMessageKey, alertMessage); - if (defaultButtonTitle) CFDictionaryAddValue(dict, kCFUserNotificationDefaultButtonTitleKey, defaultButtonTitle); - if (alternateButtonTitle) CFDictionaryAddValue(dict, kCFUserNotificationAlternateButtonTitleKey, alternateButtonTitle); - if (otherButtonTitle) CFDictionaryAddValue(dict, kCFUserNotificationOtherButtonTitleKey, otherButtonTitle); - userNotification = CFUserNotificationCreate(kCFAllocatorSystemDefault, timeout, flags, &retval, dict); - if (userNotification) { - retval = CFUserNotificationReceiveResponse(userNotification, timeout, responseFlags); - if (MACH_RCV_TIMED_OUT == retval) { - retval = CFUserNotificationCancel(userNotification); - if (responseFlags) *responseFlags = kCFUserNotificationCancelResponse; - } - CFRelease(userNotification); - } - CFRelease(dict); - return retval; -} - -#undef MAX_STRING_LENGTH -#undef MAX_STRING_COUNT -#undef NOTIFICATION_PORT_NAME_MAC -#undef NOTIFICATION_PORT_NAME_IOS -#undef MESSAGE_TIMEOUT -#undef MAX_PORT_NAME_LENGTH -#undef NOTIFICATION_PORT_NAME_SUFFIX - diff --git a/CoreFoundation/Base.subproj/CoreFoundation.h b/CoreFoundation/Base.subproj/CoreFoundation.h deleted file mode 100644 index b95bf265ce..0000000000 --- a/CoreFoundation/Base.subproj/CoreFoundation.h +++ /dev/null @@ -1,100 +0,0 @@ -/* CoreFoundation.h - Copyright (c) 1998-2019, Apple Inc. and the Swift project authors - - Portions Copyright (c) 2014-2019, Apple Inc. and the Swift project authors - Licensed under Apache License v2.0 with Runtime Library Exception - See http://swift.org/LICENSE.txt for license information - See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -*/ - -#if !defined(__COREFOUNDATION_COREFOUNDATION__) -#define __COREFOUNDATION_COREFOUNDATION__ 1 -#define __COREFOUNDATION__ 1 - -#if !defined(CF_EXCLUDE_CSTD_HEADERS) - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if !defined(__wasi__) -#include -#endif -#include -#include -#include -#include -#include -#include - -#if defined(__STDC_VERSION__) && (199901L <= __STDC_VERSION__) - -#include -#include -#include - -#endif - -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if !TARGET_OS_WASI -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if TARGET_OS_OSX || TARGET_OS_IPHONE || TARGET_OS_WIN32 -#include -#include -#include -#include -#include -#include - -#include -#include - -#endif - -#if TARGET_OS_OSX || TARGET_OS_IPHONE -#endif - -#include - -#if !DEPLOYMENT_RUNTIME_SWIFT -#include -#include -#endif - -#endif /* ! __COREFOUNDATION_COREFOUNDATION__ */ - diff --git a/CoreFoundation/String.subproj/CFStringLocalizedFormattingInternal.h b/CoreFoundation/String.subproj/CFStringLocalizedFormattingInternal.h deleted file mode 100644 index 1a90ab659b..0000000000 --- a/CoreFoundation/String.subproj/CFStringLocalizedFormattingInternal.h +++ /dev/null @@ -1,12 +0,0 @@ -/* CFStringLocalizedFormattingInternal.h - Copyright (c) 2015, Apple Inc. All rights reserved. - */ - -#include -#include -#include - -CF_PRIVATE CFDictionaryRef _CFStringGetLocalizedFormattingInfo(void); -CF_PRIVATE CFDictionaryRef _CFStringGetInputIdentifierFormatterMappingFromDescriptor(CFDictionaryRef inputInfo); -CF_PRIVATE bool _CFStringContentsInCharacterSet(CFStringRef str, CFCharacterSetRef set); -CF_PRIVATE CFDictionaryRef _CFStringGetRelevantLocaleInfoFromLocaleSummary(CFDictionaryRef localeSummaryInfo, CFLocaleRef locale); \ No newline at end of file diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000000..e57b235221 --- /dev/null +++ b/Package.swift @@ -0,0 +1,45 @@ +// swift-tools-version: 5.10 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let buildSettings: [CSetting] = [ + .define("DEBUG", .when(configuration: .debug)), + .define("CF_BUILDING_CF"), + .define("DEPLOYMENT_RUNTIME_SWIFT"), + .define("DEPLOYMENT_ENABLE_LIBDISPATCH"), + .define("HAVE_STRUCT_TIMESPEC"), + .define("__CONSTANT_CFSTRINGS__"), + .define("_GNU_SOURCE"), // TODO: Linux only? + .define("CF_CHARACTERSET_UNICODE_DATA_L", to: "\"Sources/CoreFoundation/CFUnicodeData-L.mapping\""), + .define("CF_CHARACTERSET_UNICODE_DATA_B", to: "\"Sources/CoreFoundation/CFUnicodeData-B.mapping\""), + .define("CF_CHARACTERSET_UNICHAR_DB", to: "\"Sources/CoreFoundation/CFUniCharPropertyDatabase.data\""), + .define("CF_CHARACTERSET_BITMAP", to: "\"Sources/CoreFoundation/CFCharacterSetBitmaps.bitmap\""), + .unsafeFlags(["-Wno-int-conversion", "-fconstant-cfstrings", "-fexceptions"]), + // .headerSearchPath("libxml2"), + .unsafeFlags(["-I/usr/include/libxml2"]), +] + +let package = Package( + name: "swift-corelibs-foundation", + products: [ + .library( + name: "CoreFoundationP", + targets: ["CoreFoundationP"]), + ], + dependencies: [ + .package( + url: "https://github.com/apple/swift-foundation-icu", + exact: "0.0.5"), + ], + targets: [ + .target( + name: "CoreFoundationP", + dependencies: [ + .product(name: "FoundationICU", package: "swift-foundation-icu") + ], + path: "Sources/CoreFoundation", + cSettings: buildSettings + ) + ] +) diff --git a/Sources/BlocksRuntime/CMakeLists.txt b/Sources/BlocksRuntime/CMakeLists.txt deleted file mode 100644 index 057302dd43..0000000000 --- a/Sources/BlocksRuntime/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -add_library(BlocksRuntime - data.c - runtime.c) - -target_include_directories(BlocksRuntime PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}) - -set_target_properties(BlocksRuntime PROPERTIES - POSITION_INDEPENDENT_CODE FALSE) - -add_library(BlocksRuntime::BlocksRuntime ALIAS BlocksRuntime) - -install(TARGETS BlocksRuntime - ARCHIVE DESTINATION lib/swift$<$>:_static>/$ - LIBRARY DESTINATION lib/swift$<$>:_static>/$) diff --git a/CoreFoundation/Preferences.subproj/CFApplicationPreferences.c b/Sources/CoreFoundation/CFApplicationPreferences.c similarity index 99% rename from CoreFoundation/Preferences.subproj/CFApplicationPreferences.c rename to Sources/CoreFoundation/CFApplicationPreferences.c index aac68d3775..eb259584e2 100644 --- a/CoreFoundation/Preferences.subproj/CFApplicationPreferences.c +++ b/Sources/CoreFoundation/CFApplicationPreferences.c @@ -8,14 +8,14 @@ Responsibility: David Smith */ -#include +#include "CFPreferences.h" #include "CFInternal.h" -#include -#include -#include -#include -#include -#include +#include "CFUniChar.h" +#include "CFNumber.h" +#include "CFString.h" +#include "CFLocale.h" +#include "CFNumberFormatter.h" +#include "CFDateFormatter.h" #include #if TARGET_OS_MAC #include diff --git a/CoreFoundation/Collections.subproj/CFArray.c b/Sources/CoreFoundation/CFArray.c similarity index 99% rename from CoreFoundation/Collections.subproj/CFArray.c rename to Sources/CoreFoundation/CFArray.c index 97a4bb2131..cc03d66f88 100644 --- a/CoreFoundation/Collections.subproj/CFArray.c +++ b/Sources/CoreFoundation/CFArray.c @@ -8,8 +8,8 @@ Responsibility: Michael LeHew */ -#include -#include +#include "CFArray.h" +#include "CFPriv.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" #include diff --git a/CoreFoundation/String.subproj/CFAttributedString.c b/Sources/CoreFoundation/CFAttributedString.c similarity index 99% rename from CoreFoundation/String.subproj/CFAttributedString.c rename to Sources/CoreFoundation/CFAttributedString.c index cc33885d7e..3ee97377e8 100644 --- a/CoreFoundation/String.subproj/CFAttributedString.c +++ b/Sources/CoreFoundation/CFAttributedString.c @@ -9,10 +9,10 @@ Responsibility: Ali Ozer */ -#include -#include +#include "CFBase.h" +#include "CFAttributedString.h" #include "CFRunArray.h" -#include +#include "ForFoundationOnly.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" diff --git a/CoreFoundation/Collections.subproj/CFBag.c b/Sources/CoreFoundation/CFBag.c similarity index 99% rename from CoreFoundation/Collections.subproj/CFBag.c rename to Sources/CoreFoundation/CFBag.c index fcf1bcb625..e088ae932e 100644 --- a/CoreFoundation/Collections.subproj/CFBag.c +++ b/Sources/CoreFoundation/CFBag.c @@ -8,11 +8,11 @@ Responsibility: Michael LeHew */ -#include +#include "CFBag.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" #include "CFBasicHash.h" -#include +#include "CFString.h" const CFBagCallBacks kCFTypeBagCallBacks = {0, __CFTypeCollectionRetain, __CFTypeCollectionRelease, CFCopyDescription, CFEqual, CFHash}; diff --git a/CoreFoundation/Base.subproj/CFBase.c b/Sources/CoreFoundation/CFBase.c similarity index 99% rename from CoreFoundation/Base.subproj/CFBase.c rename to Sources/CoreFoundation/CFBase.c index 760c632996..848cb65728 100644 --- a/CoreFoundation/Base.subproj/CFBase.c +++ b/Sources/CoreFoundation/CFBase.c @@ -8,7 +8,7 @@ Responsibility: Michael LeHew */ -#include +#include "CFBase.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" #if __has_include() diff --git a/CoreFoundation/Collections.subproj/CFBasicHash.c b/Sources/CoreFoundation/CFBasicHash.c similarity index 99% rename from CoreFoundation/Collections.subproj/CFBasicHash.c rename to Sources/CoreFoundation/CFBasicHash.c index baf1e7b089..d026183771 100644 --- a/CoreFoundation/Collections.subproj/CFBasicHash.c +++ b/Sources/CoreFoundation/CFBasicHash.c @@ -9,10 +9,10 @@ */ #include "CFBasicHash.h" -#include -#include +#include "CFBase.h" +#include "CFRuntime.h" #include "CFRuntime_Internal.h" -#include +#include "CFSet.h" #include #include #if __HAS_DISPATCH__ diff --git a/CoreFoundation/Collections.subproj/CFBasicHashFindBucket.m b/Sources/CoreFoundation/CFBasicHashFindBucket.m similarity index 100% rename from CoreFoundation/Collections.subproj/CFBasicHashFindBucket.m rename to Sources/CoreFoundation/CFBasicHashFindBucket.m diff --git a/CoreFoundation/NumberDate.subproj/CFBigNumber.c b/Sources/CoreFoundation/CFBigNumber.c similarity index 99% rename from CoreFoundation/NumberDate.subproj/CFBigNumber.c rename to Sources/CoreFoundation/CFBigNumber.c index b26dadcadb..b55afb85cb 100644 --- a/CoreFoundation/NumberDate.subproj/CFBigNumber.c +++ b/Sources/CoreFoundation/CFBigNumber.c @@ -9,9 +9,9 @@ Original author: Zhi Feng Huang */ -#include -#include -#include +#include "CFBase.h" +#include "CFBigNumber.h" +#include "CFNumber_Private.h" #include #include #include diff --git a/CoreFoundation/Collections.subproj/CFBinaryHeap.c b/Sources/CoreFoundation/CFBinaryHeap.c similarity index 99% rename from CoreFoundation/Collections.subproj/CFBinaryHeap.c rename to Sources/CoreFoundation/CFBinaryHeap.c index 3b498d82a1..2ec2f360e5 100644 --- a/CoreFoundation/Collections.subproj/CFBinaryHeap.c +++ b/Sources/CoreFoundation/CFBinaryHeap.c @@ -8,8 +8,8 @@ Responsibility: Michael LeHew */ -#include -#include +#include "CFBinaryHeap.h" +#include "CFPriv.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" diff --git a/CoreFoundation/Parsing.subproj/CFBinaryPList.c b/Sources/CoreFoundation/CFBinaryPList.c similarity index 99% rename from CoreFoundation/Parsing.subproj/CFBinaryPList.c rename to Sources/CoreFoundation/CFBinaryPList.c index 54a4877c0b..24c5603f52 100644 --- a/CoreFoundation/Parsing.subproj/CFBinaryPList.c +++ b/Sources/CoreFoundation/CFBinaryPList.c @@ -9,20 +9,20 @@ */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFString.h" +#include "CFNumber.h" +#include "CFDate.h" +#include "CFData.h" +#include "CFError.h" +#include "CFArray.h" +#include "CFDictionary.h" +#include "CFSet.h" +#include "CFPropertyList.h" +#include "CFByteOrder.h" +#include "CFRuntime.h" +#include "CFUUID.h" +#include "CFNumber_Private.h" #include "CFBasicHash.h" #include #include @@ -32,7 +32,7 @@ #include "CFPropertyList_Internal.h" #if !TARGET_OS_WASI -#include +#include "CFStream.h" #endif enum { diff --git a/CoreFoundation/Collections.subproj/CFBitVector.c b/Sources/CoreFoundation/CFBitVector.c similarity index 99% rename from CoreFoundation/Collections.subproj/CFBitVector.c rename to Sources/CoreFoundation/CFBitVector.c index 3ec3ff1701..ce8ca0823b 100644 --- a/CoreFoundation/Collections.subproj/CFBitVector.c +++ b/Sources/CoreFoundation/CFBitVector.c @@ -8,7 +8,7 @@ Responsibility: Michael LeHew */ -#include +#include "CFBitVector.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" #include diff --git a/CoreFoundation/StringEncodings.subproj/CFBuiltinConverters.c b/Sources/CoreFoundation/CFBuiltinConverters.c similarity index 100% rename from CoreFoundation/StringEncodings.subproj/CFBuiltinConverters.c rename to Sources/CoreFoundation/CFBuiltinConverters.c diff --git a/CoreFoundation/PlugIn.subproj/CFBundle.c b/Sources/CoreFoundation/CFBundle.c similarity index 99% rename from CoreFoundation/PlugIn.subproj/CFBundle.c rename to Sources/CoreFoundation/CFBundle.c index e9e6db3de7..6a564e3ea4 100644 --- a/CoreFoundation/PlugIn.subproj/CFBundle.c +++ b/Sources/CoreFoundation/CFBundle.c @@ -8,19 +8,19 @@ Responsibility: Tony Parker */ -#include +#include "CoreFoundation.h" #include "CFBundle_Internal.h" -#include -#include -#include -#include -#include -#include +#include "CFPropertyList.h" +#include "CFNumber.h" +#include "CFSet.h" +#include "CFURLAccess.h" +#include "CFError.h" +#include "CFError_Private.h" #include -#include +#include "CFPriv.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" -#include +#include "CFByteOrder.h" #include "CFBundle_BinaryTypes.h" #include #include diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_Binary.c b/Sources/CoreFoundation/CFBundle_Binary.c similarity index 100% rename from CoreFoundation/PlugIn.subproj/CFBundle_Binary.c rename to Sources/CoreFoundation/CFBundle_Binary.c diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_DebugStrings.c b/Sources/CoreFoundation/CFBundle_DebugStrings.c similarity index 100% rename from CoreFoundation/PlugIn.subproj/CFBundle_DebugStrings.c rename to Sources/CoreFoundation/CFBundle_DebugStrings.c diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_Executable.c b/Sources/CoreFoundation/CFBundle_Executable.c similarity index 99% rename from CoreFoundation/PlugIn.subproj/CFBundle_Executable.c rename to Sources/CoreFoundation/CFBundle_Executable.c index 365504a977..368b8abeb6 100644 --- a/CoreFoundation/PlugIn.subproj/CFBundle_Executable.c +++ b/Sources/CoreFoundation/CFBundle_Executable.c @@ -8,8 +8,8 @@ Responsibility: Tony Parker */ -#include -#include +#include "CFBase.h" +#include "CFBundle.h" #include "CFBundle_Internal.h" #if TARGET_OS_IPHONE diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_Grok.c b/Sources/CoreFoundation/CFBundle_Grok.c similarity index 100% rename from CoreFoundation/PlugIn.subproj/CFBundle_Grok.c rename to Sources/CoreFoundation/CFBundle_Grok.c diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_InfoPlist.c b/Sources/CoreFoundation/CFBundle_InfoPlist.c similarity index 99% rename from CoreFoundation/PlugIn.subproj/CFBundle_InfoPlist.c rename to Sources/CoreFoundation/CFBundle_InfoPlist.c index 3a9e0101eb..4df11e8d1a 100644 --- a/CoreFoundation/PlugIn.subproj/CFBundle_InfoPlist.c +++ b/Sources/CoreFoundation/CFBundle_InfoPlist.c @@ -8,12 +8,12 @@ Responsibility: Tony Parker */ -#include -#include -#include +#include "CFBundle.h" +#include "CFNumber.h" +#include "CFError_Private.h" #include "CFBundle_Internal.h" -#include -#include +#include "CFByteOrder.h" +#include "CFURLAccess.h" #if (TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD) && !TARGET_OS_CYGWIN #include diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_Locale.c b/Sources/CoreFoundation/CFBundle_Locale.c similarity index 99% rename from CoreFoundation/PlugIn.subproj/CFBundle_Locale.c rename to Sources/CoreFoundation/CFBundle_Locale.c index 567caf3129..8cbdbb635c 100644 --- a/CoreFoundation/PlugIn.subproj/CFBundle_Locale.c +++ b/Sources/CoreFoundation/CFBundle_Locale.c @@ -12,7 +12,7 @@ -#include +#include "CFPreferences.h" #if __HAS_APPLE_ICU__ #include diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_Main.c b/Sources/CoreFoundation/CFBundle_Main.c similarity index 99% rename from CoreFoundation/PlugIn.subproj/CFBundle_Main.c rename to Sources/CoreFoundation/CFBundle_Main.c index 1e09e7dad3..9afe05fa88 100644 --- a/CoreFoundation/PlugIn.subproj/CFBundle_Main.c +++ b/Sources/CoreFoundation/CFBundle_Main.c @@ -8,7 +8,7 @@ Responsibility: Tony Parker */ -#include +#include "CFBundle.h" #include "CFBundle_Internal.h" diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_ResourceFork.c b/Sources/CoreFoundation/CFBundle_ResourceFork.c similarity index 78% rename from CoreFoundation/PlugIn.subproj/CFBundle_ResourceFork.c rename to Sources/CoreFoundation/CFBundle_ResourceFork.c index a35d54e78a..de7d638b6f 100644 --- a/CoreFoundation/PlugIn.subproj/CFBundle_ResourceFork.c +++ b/Sources/CoreFoundation/CFBundle_ResourceFork.c @@ -3,5 +3,5 @@ Responsibility: Tony Parker */ -#include +#include "CFBundle.h" diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_Resources.c b/Sources/CoreFoundation/CFBundle_Resources.c similarity index 99% rename from CoreFoundation/PlugIn.subproj/CFBundle_Resources.c rename to Sources/CoreFoundation/CFBundle_Resources.c index 601d014a73..ed0194f911 100644 --- a/CoreFoundation/PlugIn.subproj/CFBundle_Resources.c +++ b/Sources/CoreFoundation/CFBundle_Resources.c @@ -10,15 +10,15 @@ #include "CFBundle_Internal.h" #include "CFBundle_SplitFileName.h" -#include -#include -#include -#include -#include -#include +#include "CFURLAccess.h" +#include "CFPropertyList.h" +#include "CFByteOrder.h" +#include "CFNumber.h" +#include "CFLocale.h" +#include "CFPreferences.h" #include #include "CFInternal.h" -#include +#include "CFPriv.h" #include #include #include diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_SplitFileName.c b/Sources/CoreFoundation/CFBundle_SplitFileName.c similarity index 99% rename from CoreFoundation/PlugIn.subproj/CFBundle_SplitFileName.c rename to Sources/CoreFoundation/CFBundle_SplitFileName.c index 9c8bdfbfe9..eeaa185db2 100644 --- a/CoreFoundation/PlugIn.subproj/CFBundle_SplitFileName.c +++ b/Sources/CoreFoundation/CFBundle_SplitFileName.c @@ -4,7 +4,7 @@ #include "CFBundle_SplitFileName.h" -#include +#include "CFPriv.h" #define _CFBundleiPadDeviceNameSuffix CFSTR("~ipad") diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_Strings.c b/Sources/CoreFoundation/CFBundle_Strings.c similarity index 99% rename from CoreFoundation/PlugIn.subproj/CFBundle_Strings.c rename to Sources/CoreFoundation/CFBundle_Strings.c index 3f3f1c2268..8cf1b3e25b 100644 --- a/CoreFoundation/PlugIn.subproj/CFBundle_Strings.c +++ b/Sources/CoreFoundation/CFBundle_Strings.c @@ -15,8 +15,8 @@ #endif -#include -#include +#include "CFPreferences.h" +#include "CFURLAccess.h" #pragma mark - #pragma mark Localized Strings diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_Tables.c b/Sources/CoreFoundation/CFBundle_Tables.c similarity index 99% rename from CoreFoundation/PlugIn.subproj/CFBundle_Tables.c rename to Sources/CoreFoundation/CFBundle_Tables.c index 6405eea9c2..a0c1b9ea2e 100644 --- a/CoreFoundation/PlugIn.subproj/CFBundle_Tables.c +++ b/Sources/CoreFoundation/CFBundle_Tables.c @@ -10,7 +10,7 @@ #if 0 -#include +#include "CFBundle.h" #include "CFBundle_Internal.h" static CFMutableDictionaryRef _bundlesByIdentifier = NULL; diff --git a/CoreFoundation/String.subproj/CFBurstTrie.c b/Sources/CoreFoundation/CFBurstTrie.c similarity index 99% rename from CoreFoundation/String.subproj/CFBurstTrie.c rename to Sources/CoreFoundation/CFBurstTrie.c index da4928e51a..84c59944a8 100644 --- a/CoreFoundation/String.subproj/CFBurstTrie.c +++ b/Sources/CoreFoundation/CFBurstTrie.c @@ -10,8 +10,8 @@ #include "CFInternal.h" #include "CFBurstTrie.h" -#include -#include +#include "CFByteOrder.h" +#include "CFNumber.h" #include #include #include diff --git a/CoreFoundation/Locale.subproj/CFCalendar.c b/Sources/CoreFoundation/CFCalendar.c similarity index 99% rename from CoreFoundation/Locale.subproj/CFCalendar.c rename to Sources/CoreFoundation/CFCalendar.c index b4f3a2b313..8ac9be95a1 100644 --- a/CoreFoundation/Locale.subproj/CFCalendar.c +++ b/Sources/CoreFoundation/CFCalendar.c @@ -7,8 +7,8 @@ See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors */ -#include -#include +#include "CFCalendar.h" +#include "CFRuntime.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" #include "CFPriv.h" diff --git a/CoreFoundation/Locale.subproj/CFCalendar_Enumerate.c b/Sources/CoreFoundation/CFCalendar_Enumerate.c similarity index 99% rename from CoreFoundation/Locale.subproj/CFCalendar_Enumerate.c rename to Sources/CoreFoundation/CFCalendar_Enumerate.c index 39df0384ed..67d0de91cf 100644 --- a/CoreFoundation/Locale.subproj/CFCalendar_Enumerate.c +++ b/Sources/CoreFoundation/CFCalendar_Enumerate.c @@ -8,7 +8,7 @@ */ -#include +#include "CFCalendar.h" #include "CFCalendar_Internal.h" #include "CFDateComponents.h" #include "CFLocaleInternal.h" diff --git a/CoreFoundation/String.subproj/CFCharacterSet.c b/Sources/CoreFoundation/CFCharacterSet.c similarity index 99% rename from CoreFoundation/String.subproj/CFCharacterSet.c rename to Sources/CoreFoundation/CFCharacterSet.c index e8e540703d..3213beb5ba 100644 --- a/CoreFoundation/String.subproj/CFCharacterSet.c +++ b/Sources/CoreFoundation/CFCharacterSet.c @@ -8,14 +8,14 @@ Responsibility: Foundation Team */ -#include -#include +#include "CFCharacterSet.h" +#include "CFByteOrder.h" #include "CFCharacterSetPriv.h" -#include -#include +#include "CFData.h" +#include "CFString.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" -#include +#include "CFUniChar.h" #include "CFUniCharPriv.h" #include #include diff --git a/CoreFoundation/CharacterSets/CFCharacterSetBitmaps.bitmap b/Sources/CoreFoundation/CFCharacterSetBitmaps.bitmap similarity index 100% rename from CoreFoundation/CharacterSets/CFCharacterSetBitmaps.bitmap rename to Sources/CoreFoundation/CFCharacterSetBitmaps.bitmap diff --git a/CoreFoundation/String.subproj/CFCharacterSetData.S b/Sources/CoreFoundation/CFCharacterSetData.S similarity index 95% rename from CoreFoundation/String.subproj/CFCharacterSetData.S rename to Sources/CoreFoundation/CFCharacterSetData.S index 6cc016c3dd..358f2ed87f 100644 --- a/CoreFoundation/String.subproj/CFCharacterSetData.S +++ b/Sources/CoreFoundation/CFCharacterSetData.S @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -#include +#include "CFAsmMacros.h" #if defined(__ELF__) .section .rodata diff --git a/CoreFoundation/Stream.subproj/CFConcreteStreams.c b/Sources/CoreFoundation/CFConcreteStreams.c similarity index 99% rename from CoreFoundation/Stream.subproj/CFConcreteStreams.c rename to Sources/CoreFoundation/CFConcreteStreams.c index 4cf2b208cd..89afbc629d 100644 --- a/CoreFoundation/Stream.subproj/CFConcreteStreams.c +++ b/Sources/CoreFoundation/CFConcreteStreams.c @@ -10,8 +10,8 @@ #include "CFStreamInternal.h" #include "CFInternal.h" -#include -#include +#include "CFPriv.h" +#include "CFNumber.h" #include #include #include diff --git a/CoreFoundation/Collections.subproj/CFData.c b/Sources/CoreFoundation/CFData.c similarity index 99% rename from CoreFoundation/Collections.subproj/CFData.c rename to Sources/CoreFoundation/CFData.c index a8eaade00c..ba159e14ee 100644 --- a/CoreFoundation/Collections.subproj/CFData.c +++ b/Sources/CoreFoundation/CFData.c @@ -8,9 +8,9 @@ Responsibility: Kevin Perry */ -#include -#include -#include +#include "CFBase.h" +#include "CFData.h" +#include "CFPriv.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" #include diff --git a/CoreFoundation/NumberDate.subproj/CFDate.c b/Sources/CoreFoundation/CFDate.c similarity index 99% rename from CoreFoundation/NumberDate.subproj/CFDate.c rename to Sources/CoreFoundation/CFDate.c index e6abb43cb2..7cbadcfddd 100644 --- a/CoreFoundation/NumberDate.subproj/CFDate.c +++ b/Sources/CoreFoundation/CFDate.c @@ -8,12 +8,12 @@ Responsibility: Kevin Perry */ -#include -#include -#include -#include -#include -#include +#include "CFDate.h" +#include "CFTimeZone.h" +#include "CFDictionary.h" +#include "CFArray.h" +#include "CFString.h" +#include "CFNumber.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" #include diff --git a/CoreFoundation/Locale.subproj/CFDateComponents.c b/Sources/CoreFoundation/CFDateComponents.c similarity index 99% rename from CoreFoundation/Locale.subproj/CFDateComponents.c rename to Sources/CoreFoundation/CFDateComponents.c index 19bf0fd08a..c3f4f81260 100644 --- a/CoreFoundation/Locale.subproj/CFDateComponents.c +++ b/Sources/CoreFoundation/CFDateComponents.c @@ -9,8 +9,8 @@ */ #include -#include -#include +#include "CFCalendar.h" +#include "CFString.h" #include "CFDateComponents.h" #include "CFInternal.h" #include "CFCalendar_Internal.h" diff --git a/CoreFoundation/Locale.subproj/CFDateFormatter.c b/Sources/CoreFoundation/CFDateFormatter.c similarity index 99% rename from CoreFoundation/Locale.subproj/CFDateFormatter.c rename to Sources/CoreFoundation/CFDateFormatter.c index 4ffcad40d5..7dea503747 100644 --- a/CoreFoundation/Locale.subproj/CFDateFormatter.c +++ b/Sources/CoreFoundation/CFDateFormatter.c @@ -10,12 +10,12 @@ #define U_SHOW_INTERNAL_API 1 -#include -#include -#include -#include -#include -#include +#include "CFDateFormatter.h" +#include "CFDateFormatter_Private.h" +#include "CFDate.h" +#include "CFTimeZone.h" +#include "CFCalendar.h" +#include "CFNumber.h" #include "CFPriv.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" diff --git a/CoreFoundation/Locale.subproj/CFDateInterval.c b/Sources/CoreFoundation/CFDateInterval.c similarity index 98% rename from CoreFoundation/Locale.subproj/CFDateInterval.c rename to Sources/CoreFoundation/CFDateInterval.c index 00aaf201c3..f4fc29b54b 100644 --- a/CoreFoundation/Locale.subproj/CFDateInterval.c +++ b/Sources/CoreFoundation/CFDateInterval.c @@ -7,10 +7,10 @@ See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors */ -#include -#include +#include "CFRuntime.h" +#include "CFString.h" #include "CFInternal.h" -#include +#include "CFDateInterval.h" /* Runtime setup */ static CFTypeID __kCFDateIntervalTypeID = _kCFRuntimeNotATypeID; diff --git a/CoreFoundation/Locale.subproj/CFDateIntervalFormatter.c b/Sources/CoreFoundation/CFDateIntervalFormatter.c similarity index 98% rename from CoreFoundation/Locale.subproj/CFDateIntervalFormatter.c rename to Sources/CoreFoundation/CFDateIntervalFormatter.c index 6fe554c85b..641f4e603c 100644 --- a/CoreFoundation/Locale.subproj/CFDateIntervalFormatter.c +++ b/Sources/CoreFoundation/CFDateIntervalFormatter.c @@ -7,17 +7,17 @@ See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors */ -#include -#include +#include "CFDateIntervalFormatter.h" +#include "CFRuntime.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" -#include -#include -#include -#include -#include -#include +#include "CFCalendar.h" +#include "CFDate.h" +#include "CFDateFormatter.h" +#include "CFDateInterval.h" +#include "CFLocale.h" +#include "CFTimeZone.h" #include diff --git a/CoreFoundation/Collections.subproj/CFDictionary.c b/Sources/CoreFoundation/CFDictionary.c similarity index 99% rename from CoreFoundation/Collections.subproj/CFDictionary.c rename to Sources/CoreFoundation/CFDictionary.c index d2ba0899b0..1156b5a88f 100644 --- a/CoreFoundation/Collections.subproj/CFDictionary.c +++ b/Sources/CoreFoundation/CFDictionary.c @@ -8,11 +8,11 @@ Responsibility: Michael LeHew */ -#include +#include "CFDictionary.h" #include "CFInternal.h" #include "CFBasicHash.h" #include -#include +#include "CFString.h" #include "CFRuntime_Internal.h" diff --git a/CoreFoundation/Error.subproj/CFError.c b/Sources/CoreFoundation/CFError.c similarity index 99% rename from CoreFoundation/Error.subproj/CFError.c rename to Sources/CoreFoundation/CFError.c index 7ff93ce459..229898cb09 100644 --- a/CoreFoundation/Error.subproj/CFError.c +++ b/Sources/CoreFoundation/CFError.c @@ -8,12 +8,12 @@ Responsibility: Ali Ozer */ -#include -#include +#include "CFError.h" +#include "CFError_Private.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" -#include -#include +#include "CFPriv.h" +#include "ForFoundationOnly.h" #if TARGET_OS_MAC #include #endif diff --git a/CoreFoundation/Base.subproj/CFFileUtilities.c b/Sources/CoreFoundation/CFFileUtilities.c similarity index 99% rename from CoreFoundation/Base.subproj/CFFileUtilities.c rename to Sources/CoreFoundation/CFFileUtilities.c index 53596fb964..759d55bbdd 100644 --- a/CoreFoundation/Base.subproj/CFFileUtilities.c +++ b/Sources/CoreFoundation/CFFileUtilities.c @@ -9,7 +9,7 @@ */ #include "CFInternal.h" -#include +#include "CFPriv.h" #include #include diff --git a/CoreFoundation/StringEncodings.subproj/CFICUConverters.c b/Sources/CoreFoundation/CFICUConverters.c similarity index 99% rename from CoreFoundation/StringEncodings.subproj/CFICUConverters.c rename to Sources/CoreFoundation/CFICUConverters.c index e59f668936..b63565d1b3 100644 --- a/CoreFoundation/StringEncodings.subproj/CFICUConverters.c +++ b/Sources/CoreFoundation/CFICUConverters.c @@ -11,8 +11,8 @@ #include "CFStringEncodingDatabase.h" #include "CFStringEncodingConverterPriv.h" #include "CFICUConverters.h" -#include -#include +#include "CFStringEncodingExt.h" +#include "CFUniChar.h" #include #include #include "CFInternal.h" diff --git a/CoreFoundation/Base.subproj/CFKnownLocations.c b/Sources/CoreFoundation/CFKnownLocations.c similarity index 99% rename from CoreFoundation/Base.subproj/CFKnownLocations.c rename to Sources/CoreFoundation/CFKnownLocations.c index c9c9ed44a1..4ed726b891 100644 --- a/CoreFoundation/Base.subproj/CFKnownLocations.c +++ b/Sources/CoreFoundation/CFKnownLocations.c @@ -9,7 +9,7 @@ #include "CFKnownLocations.h" -#include +#include "CFString.h" #include "CFPriv.h" #include "CFInternal.h" #include "CFUtilities.h" diff --git a/CoreFoundation/Locale.subproj/CFListFormatter.c b/Sources/CoreFoundation/CFListFormatter.c similarity index 100% rename from CoreFoundation/Locale.subproj/CFListFormatter.c rename to Sources/CoreFoundation/CFListFormatter.c diff --git a/CoreFoundation/Locale.subproj/CFLocale.c b/Sources/CoreFoundation/CFLocale.c similarity index 99% rename from CoreFoundation/Locale.subproj/CFLocale.c rename to Sources/CoreFoundation/CFLocale.c index c5c555c92a..1163954a3b 100644 --- a/CoreFoundation/Locale.subproj/CFLocale.c +++ b/Sources/CoreFoundation/CFLocale.c @@ -10,17 +10,17 @@ // Note the header file is in the OpenSource set (stripped to almost nothing), but not the .c file -#include -#include -#include -#include -#include -#include -#include +#include "CFLocale.h" +#include "CFLocale_Private.h" +#include "CFString.h" +#include "CFArray.h" +#include "CFDictionary.h" +#include "CFCalendar.h" +#include "CFNumber.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" #if !TARGET_OS_WASI -#include +#include "CFPreferences.h" #include "CFBundle_Internal.h" #else #include "CFBase.h" @@ -51,7 +51,7 @@ uameasfmt_getUnitsForUsage( const char* locale, #endif #endif -#include +#include "CFNumberFormatter.h" #include #include #include diff --git a/CoreFoundation/Locale.subproj/CFLocaleIdentifier.c b/Sources/CoreFoundation/CFLocaleIdentifier.c similarity index 99% rename from CoreFoundation/Locale.subproj/CFLocaleIdentifier.c rename to Sources/CoreFoundation/CFLocaleIdentifier.c index 56f04db25f..363ab7846c 100644 --- a/CoreFoundation/Locale.subproj/CFLocaleIdentifier.c +++ b/Sources/CoreFoundation/CFLocaleIdentifier.c @@ -52,8 +52,8 @@ */ -#include -#include +#include "CFString.h" +#include "CFCalendar.h" #include #include #include diff --git a/CoreFoundation/Locale.subproj/CFLocaleKeys.c b/Sources/CoreFoundation/CFLocaleKeys.c similarity index 100% rename from CoreFoundation/Locale.subproj/CFLocaleKeys.c rename to Sources/CoreFoundation/CFLocaleKeys.c diff --git a/CoreFoundation/RunLoop.subproj/CFMachPort.c b/Sources/CoreFoundation/CFMachPort.c similarity index 99% rename from CoreFoundation/RunLoop.subproj/CFMachPort.c rename to Sources/CoreFoundation/CFMachPort.c index edf81efb26..718dad20ec 100644 --- a/CoreFoundation/RunLoop.subproj/CFMachPort.c +++ b/Sources/CoreFoundation/CFMachPort.c @@ -8,9 +8,9 @@ Responsibility: Michael LeHew */ -#include -#include -#include +#include "CFMachPort.h" +#include "CFRunLoop.h" +#include "CFArray.h" #include #if __has_include() #include diff --git a/CoreFoundation/RunLoop.subproj/CFMachPort_Lifetime.c b/Sources/CoreFoundation/CFMachPort_Lifetime.c similarity index 100% rename from CoreFoundation/RunLoop.subproj/CFMachPort_Lifetime.c rename to Sources/CoreFoundation/CFMachPort_Lifetime.c diff --git a/CoreFoundation/RunLoop.subproj/CFMessagePort.c b/Sources/CoreFoundation/CFMessagePort.c similarity index 99% rename from CoreFoundation/RunLoop.subproj/CFMessagePort.c rename to Sources/CoreFoundation/CFMessagePort.c index 8fc8d82d84..22387607b8 100644 --- a/CoreFoundation/RunLoop.subproj/CFMessagePort.c +++ b/Sources/CoreFoundation/CFMessagePort.c @@ -8,12 +8,12 @@ Responsibility: Michael LeHew */ -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFMessagePort.h" +#include "CFRunLoop.h" +#include "CFMachPort.h" +#include "CFDictionary.h" +#include "CFByteOrder.h" #include #include #include "CFInternal.h" diff --git a/CoreFoundation/NumberDate.subproj/CFNumber.c b/Sources/CoreFoundation/CFNumber.c similarity index 99% rename from CoreFoundation/NumberDate.subproj/CFNumber.c rename to Sources/CoreFoundation/CFNumber.c index 35fd87c8d2..d5ea7fa55e 100644 --- a/CoreFoundation/NumberDate.subproj/CFNumber.c +++ b/Sources/CoreFoundation/CFNumber.c @@ -8,12 +8,12 @@ Responsibility: Ali Ozer */ -#include -#include +#include "CFBase.h" +#include "CFNumber.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" -#include -#include +#include "CFPriv.h" +#include "CFNumber_Private.h" #include #include #include diff --git a/CoreFoundation/Locale.subproj/CFNumberFormatter.c b/Sources/CoreFoundation/CFNumberFormatter.c similarity index 99% rename from CoreFoundation/Locale.subproj/CFNumberFormatter.c rename to Sources/CoreFoundation/CFNumberFormatter.c index adfba4a0f0..784c543415 100644 --- a/CoreFoundation/Locale.subproj/CFNumberFormatter.c +++ b/Sources/CoreFoundation/CFNumberFormatter.c @@ -8,10 +8,10 @@ Responsibility: Itai Ferber */ -#include -#include -#include -#include +#include "CFBase.h" +#include "CFNumberFormatter.h" +#include "ForFoundationOnly.h" +#include "CFBigNumber.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" #include "CFLocaleInternal.h" diff --git a/CoreFoundation/Parsing.subproj/CFOldStylePList.c b/Sources/CoreFoundation/CFOldStylePList.c similarity index 99% rename from CoreFoundation/Parsing.subproj/CFOldStylePList.c rename to Sources/CoreFoundation/CFOldStylePList.c index fc33350303..3bba5ba94d 100644 --- a/CoreFoundation/Parsing.subproj/CFOldStylePList.c +++ b/Sources/CoreFoundation/CFOldStylePList.c @@ -8,15 +8,15 @@ Responsibility: Tony Parker */ -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFPropertyList.h" +#include "CFDate.h" +#include "CFNumber.h" +#include "CFError.h" +#include "CFStringEncodingConverter.h" #include "CFInternal.h" -#include -#include +#include "CFCalendar.h" +#include "CFSet.h" #include #include "CFOverflow.h" diff --git a/CoreFoundation/Base.subproj/CFPlatform.c b/Sources/CoreFoundation/CFPlatform.c similarity index 99% rename from CoreFoundation/Base.subproj/CFPlatform.c rename to Sources/CoreFoundation/CFPlatform.c index 040e8966f2..91a3c5b018 100644 --- a/CoreFoundation/Base.subproj/CFPlatform.c +++ b/Sources/CoreFoundation/CFPlatform.c @@ -10,7 +10,7 @@ #include "CFInternal.h" -#include +#include "CFPriv.h" #if TARGET_OS_MAC #include #include diff --git a/CoreFoundation/StringEncodings.subproj/CFPlatformConverters.c b/Sources/CoreFoundation/CFPlatformConverters.c similarity index 99% rename from CoreFoundation/StringEncodings.subproj/CFPlatformConverters.c rename to Sources/CoreFoundation/CFPlatformConverters.c index 177e03757a..9aa136e594 100644 --- a/CoreFoundation/StringEncodings.subproj/CFPlatformConverters.c +++ b/Sources/CoreFoundation/CFPlatformConverters.c @@ -9,9 +9,9 @@ */ #include "CFInternal.h" -#include +#include "CFString.h" #include "CFStringEncodingConverterExt.h" -#include +#include "CFStringEncodingExt.h" #include "CFUniChar.h" #include "CFUnicodeDecomposition.h" #include "CFStringEncodingConverterPriv.h" diff --git a/CoreFoundation/PlugIn.subproj/CFPlugIn.c b/Sources/CoreFoundation/CFPlugIn.c similarity index 100% rename from CoreFoundation/PlugIn.subproj/CFPlugIn.c rename to Sources/CoreFoundation/CFPlugIn.c diff --git a/CoreFoundation/Preferences.subproj/CFPreferences.c b/Sources/CoreFoundation/CFPreferences.c similarity index 99% rename from CoreFoundation/Preferences.subproj/CFPreferences.c rename to Sources/CoreFoundation/CFPreferences.c index e8f88bcb75..cce0fc2be8 100644 --- a/CoreFoundation/Preferences.subproj/CFPreferences.c +++ b/Sources/CoreFoundation/CFPreferences.c @@ -8,22 +8,22 @@ Responsibility: David Smith */ -#include -#include +#include "CFPreferences.h" +#include "CFURLAccess.h" #if TARGET_OS_MAC -#include +#include "CFUserNotification.h" #endif -#include +#include "CFPropertyList.h" #if TARGET_OS_MAC || TARGET_OS_WIN32 -#include +#include "CFBundle.h" #endif -#include -#include +#include "CFNumber.h" +#include "CFPriv.h" #include "CFInternal.h" #include #if TARGET_OS_OSX #include -#include +#include "CFUUID.h" #endif #if DEBUG_PREFERENCES_MEMORY diff --git a/CoreFoundation/Parsing.subproj/CFPropertyList.c b/Sources/CoreFoundation/CFPropertyList.c similarity index 99% rename from CoreFoundation/Parsing.subproj/CFPropertyList.c rename to Sources/CoreFoundation/CFPropertyList.c index 1a40299052..536d649e61 100644 --- a/CoreFoundation/Parsing.subproj/CFPropertyList.c +++ b/Sources/CoreFoundation/CFPropertyList.c @@ -8,26 +8,26 @@ Responsibility: Itai Ferber */ -#include -#include +#include "CFPropertyList.h" +#include "CFPropertyList_Private.h" #include "CFPropertyList_Internal.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "CFByteOrder.h" +#include "CFDate.h" +#include "CFNumber.h" +#include "CFSet.h" +#include "CFError.h" +#include "CFError_Private.h" +#include "CFPriv.h" +#include "CFStringEncodingConverter.h" +#include "CFNumber_Private.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" -#include -#include +#include "CFBurstTrie.h" +#include "CFString.h" #if !TARGET_OS_WASI -#include +#include "CFStream.h" #endif -#include +#include "CFCalendar.h" #include "CFLocaleInternal.h" #include #include diff --git a/CoreFoundation/String.subproj/CFRegularExpression.c b/Sources/CoreFoundation/CFRegularExpression.c similarity index 99% rename from CoreFoundation/String.subproj/CFRegularExpression.c rename to Sources/CoreFoundation/CFRegularExpression.c index 4eb9f1a4a0..093847825e 100644 --- a/CoreFoundation/String.subproj/CFRegularExpression.c +++ b/Sources/CoreFoundation/CFRegularExpression.c @@ -11,7 +11,7 @@ Copyright (c) 2015 Apple Inc. and the Swift project authors */ -#include +#include "CFRegularExpression.h" #include "CFInternal.h" #define U_SHOW_DRAFT_API 1 #define U_SHOW_INTERNAL_API 1 diff --git a/CoreFoundation/Locale.subproj/CFRelativeDateTimeFormatter.c b/Sources/CoreFoundation/CFRelativeDateTimeFormatter.c similarity index 100% rename from CoreFoundation/Locale.subproj/CFRelativeDateTimeFormatter.c rename to Sources/CoreFoundation/CFRelativeDateTimeFormatter.c diff --git a/CoreFoundation/String.subproj/CFRunArray.c b/Sources/CoreFoundation/CFRunArray.c similarity index 99% rename from CoreFoundation/String.subproj/CFRunArray.c rename to Sources/CoreFoundation/CFRunArray.c index 07bb1e32e6..03fb1cdc8d 100644 --- a/CoreFoundation/String.subproj/CFRunArray.c +++ b/Sources/CoreFoundation/CFRunArray.c @@ -13,7 +13,7 @@ */ #include "CFRunArray.h" -#include +#include "CFString.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" diff --git a/CoreFoundation/RunLoop.subproj/CFRunLoop.c b/Sources/CoreFoundation/CFRunLoop.c similarity index 99% rename from CoreFoundation/RunLoop.subproj/CFRunLoop.c rename to Sources/CoreFoundation/CFRunLoop.c index f202dda2bf..7f918dddf2 100644 --- a/CoreFoundation/RunLoop.subproj/CFRunLoop.c +++ b/Sources/CoreFoundation/CFRunLoop.c @@ -8,11 +8,11 @@ Responsibility: Michael LeHew */ -#include -#include -#include -#include -#include +#include "CFRunLoop.h" +#include "CFSet.h" +#include "CFBag.h" +#include "CFNumber.h" +#include "CFPreferences.h" #include "CFInternal.h" #include "CFPriv.h" #include "CFRuntime_Internal.h" @@ -78,7 +78,7 @@ typedef uint64_t dispatch_runloop_handle_t; #if TARGET_OS_MAC #include -#include +#include "CFUserNotification.h" #include #include #include diff --git a/CoreFoundation/Base.subproj/CFRuntime.c b/Sources/CoreFoundation/CFRuntime.c similarity index 99% rename from CoreFoundation/Base.subproj/CFRuntime.c rename to Sources/CoreFoundation/CFRuntime.c index afdbf5d21e..ddcd3ffea4 100644 --- a/CoreFoundation/Base.subproj/CFRuntime.c +++ b/Sources/CoreFoundation/CFRuntime.c @@ -10,8 +10,8 @@ #define ENABLE_ZOMBIES 1 -#include -#include +#include "CFBase.h" +#include "CFRuntime.h" #include "CFRuntime_Internal.h" #include "CFInternal.h" #include "CFBasicHash.h" @@ -19,9 +19,9 @@ #include #include #include -#include -#include -#include +#include "CFUUID.h" +#include "CFCalendar.h" +#include "CFURLComponents.h" #if TARGET_OS_MAC #include #include @@ -29,11 +29,11 @@ #include #include #include -#include +#include "CFStringDefaultEncoding.h" #endif -#include -#include -#include +#include "CFUUID.h" +#include "CFTimeZone.h" +#include "CFCalendar.h" #if TARGET_OS_IPHONE // This isn't in the embedded runtime.h header OBJC_EXPORT void *objc_destructInstance(id obj); diff --git a/CoreFoundation/Collections.subproj/CFSet.c b/Sources/CoreFoundation/CFSet.c similarity index 99% rename from CoreFoundation/Collections.subproj/CFSet.c rename to Sources/CoreFoundation/CFSet.c index 2300583432..9c1d998efd 100644 --- a/CoreFoundation/Collections.subproj/CFSet.c +++ b/Sources/CoreFoundation/CFSet.c @@ -8,10 +8,10 @@ Responsibility: Michael LeHew */ -#include +#include "CFSet.h" #include "CFInternal.h" #include "CFBasicHash.h" -#include +#include "CFString.h" #include "CFRuntime_Internal.h" diff --git a/CoreFoundation/RunLoop.subproj/CFSocket.c b/Sources/CoreFoundation/CFSocket.c similarity index 99% rename from CoreFoundation/RunLoop.subproj/CFSocket.c rename to Sources/CoreFoundation/CFSocket.c index 31add9ef64..7aead7e081 100644 --- a/CoreFoundation/RunLoop.subproj/CFSocket.c +++ b/Sources/CoreFoundation/CFSocket.c @@ -8,7 +8,7 @@ Responsibility: Michael LeHew */ -#include +#include "CFSocket.h" #include #include #include @@ -37,12 +37,12 @@ #include #endif #include -#include -#include -#include -#include -#include -#include +#include "CFArray.h" +#include "CFData.h" +#include "CFDictionary.h" +#include "CFRunLoop.h" +#include "CFString.h" +#include "CFPropertyList.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" #if TARGET_OS_WIN32 diff --git a/CoreFoundation/Stream.subproj/CFSocketStream.c b/Sources/CoreFoundation/CFSocketStream.c similarity index 99% rename from CoreFoundation/Stream.subproj/CFSocketStream.c rename to Sources/CoreFoundation/CFSocketStream.c index 74a792d08a..b250272916 100644 --- a/CoreFoundation/Stream.subproj/CFSocketStream.c +++ b/Sources/CoreFoundation/CFSocketStream.c @@ -8,8 +8,8 @@ Responsibility: Jeremy Wyld */ // Original Author: Becky Willrich -#include -#include +#include "CFStream.h" +#include "CFNumber.h" #include "CFInternal.h" #include "CFStreamInternal.h" #include "CFStreamPriv.h" diff --git a/CoreFoundation/Base.subproj/CFSortFunctions.c b/Sources/CoreFoundation/CFSortFunctions.c similarity index 99% rename from CoreFoundation/Base.subproj/CFSortFunctions.c rename to Sources/CoreFoundation/CFSortFunctions.c index d394e85a4d..2e3a93f494 100644 --- a/CoreFoundation/Base.subproj/CFSortFunctions.c +++ b/Sources/CoreFoundation/CFSortFunctions.c @@ -8,7 +8,7 @@ Responsibility: Michael LeHew */ -#include +#include "CFBase.h" #include "CFInternal.h" #if __HAS_DISPATCH__ #include diff --git a/CoreFoundation/Collections.subproj/CFStorage.c b/Sources/CoreFoundation/CFStorage.c similarity index 99% rename from CoreFoundation/Collections.subproj/CFStorage.c rename to Sources/CoreFoundation/CFStorage.c index 74948ebae4..ec94f3834f 100644 --- a/CoreFoundation/Collections.subproj/CFStorage.c +++ b/Sources/CoreFoundation/CFStorage.c @@ -30,7 +30,7 @@ #define NO_SHIFTER ((uint32_t)(-1)) -#include +#include "CFStorage.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" #if __HAS_DISPATCH__ diff --git a/CoreFoundation/Stream.subproj/CFStream.c b/Sources/CoreFoundation/CFStream.c similarity index 99% rename from CoreFoundation/Stream.subproj/CFStream.c rename to Sources/CoreFoundation/CFStream.c index 010f69bc13..9aa97b2225 100644 --- a/CoreFoundation/Stream.subproj/CFStream.c +++ b/Sources/CoreFoundation/CFStream.c @@ -8,8 +8,8 @@ Responsibility: John Iarocci */ -#include -#include +#include "CFRuntime.h" +#include "CFNumber.h" #include #include "CFStreamInternal.h" #include "CFRuntime_Internal.h" diff --git a/CoreFoundation/String.subproj/CFString.c b/Sources/CoreFoundation/CFString.c similarity index 99% rename from CoreFoundation/String.subproj/CFString.c rename to Sources/CoreFoundation/CFString.c index ad23980722..939464bfca 100644 --- a/CoreFoundation/String.subproj/CFString.c +++ b/Sources/CoreFoundation/CFString.c @@ -10,18 +10,18 @@ !!! For performance reasons, it's important that all functions marked CF_INLINE in this file are inlined. */ -#include -#include -#include -#include +#include "CFBase.h" +#include "CFString.h" +#include "CFDictionary.h" +#include "CFStringEncodingConverterExt.h" #include "CFStringEncodingConverterPriv.h" -#include -#include -#include -#include -#include -#include -#include +#include "CFUniChar.h" +#include "CFUnicodeDecomposition.h" +#include "CFUnicodePrecomposition.h" +#include "CFPriv.h" +#include "CFNumber.h" +#include "CFNumberFormatter.h" +#include "CFError_Private.h" #include "CFInternal.h" #include "CFUniCharPriv.h" #include "CFString_Internal.h" diff --git a/CoreFoundation/StringEncodings.subproj/CFStringEncodingConverter.c b/Sources/CoreFoundation/CFStringEncodingConverter.c similarity index 99% rename from CoreFoundation/StringEncodings.subproj/CFStringEncodingConverter.c rename to Sources/CoreFoundation/CFStringEncodingConverter.c index a3aca9bb5d..120791bdbc 100644 --- a/CoreFoundation/StringEncodings.subproj/CFStringEncodingConverter.c +++ b/Sources/CoreFoundation/CFStringEncodingConverter.c @@ -9,11 +9,11 @@ */ #include "CFInternal.h" -#include -#include +#include "CFArray.h" +#include "CFDictionary.h" #include "CFICUConverters.h" -#include -#include +#include "CFUniChar.h" +#include "CFPriv.h" #include "CFUnicodeDecomposition.h" #include "CFStringEncodingConverterExt.h" #include "CFStringEncodingConverterPriv.h" diff --git a/CoreFoundation/StringEncodings.subproj/CFStringEncodingDatabase.c b/Sources/CoreFoundation/CFStringEncodingDatabase.c similarity index 99% rename from CoreFoundation/StringEncodings.subproj/CFStringEncodingDatabase.c rename to Sources/CoreFoundation/CFStringEncodingDatabase.c index c871281f34..3f25102a7f 100644 --- a/CoreFoundation/StringEncodings.subproj/CFStringEncodingDatabase.c +++ b/Sources/CoreFoundation/CFStringEncodingDatabase.c @@ -9,7 +9,7 @@ */ #include "CFInternal.h" -#include +#include "CFStringEncodingExt.h" #include "CFStringEncodingConverterPriv.h" #include "CFStringEncodingDatabase.h" #include diff --git a/CoreFoundation/String.subproj/CFStringEncodings.c b/Sources/CoreFoundation/CFStringEncodings.c similarity index 99% rename from CoreFoundation/String.subproj/CFStringEncodings.c rename to Sources/CoreFoundation/CFStringEncodings.c index 8fff5d3e1d..e4f6f4eb57 100644 --- a/CoreFoundation/String.subproj/CFStringEncodings.c +++ b/Sources/CoreFoundation/CFStringEncodings.c @@ -11,14 +11,14 @@ #include "CFInternal.h" #include "CFRuntime_Internal.h" #include "CFString_Internal.h" -#include -#include -#include +#include "CFString.h" +#include "CFByteOrder.h" +#include "CFPriv.h" #include -#include +#include "CFStringEncodingConverterExt.h" #include "CFStringEncodingConverterPriv.h" -#include -#include +#include "CFUniChar.h" +#include "CFUnicodeDecomposition.h" #if TARGET_OS_OSX || TARGET_OS_IPHONE #include #include @@ -28,7 +28,7 @@ #include #include #include -#include +#include "CFStringDefaultEncoding.h" #endif static bool __CFWantsToUseASCIICompatibleConversion = false; diff --git a/CoreFoundation/String.subproj/CFStringScanner.c b/Sources/CoreFoundation/CFStringScanner.c similarity index 99% rename from CoreFoundation/String.subproj/CFStringScanner.c rename to Sources/CoreFoundation/CFStringScanner.c index 673a113a4e..ab7002611d 100644 --- a/CoreFoundation/String.subproj/CFStringScanner.c +++ b/Sources/CoreFoundation/CFStringScanner.c @@ -9,7 +9,7 @@ */ #include "CFInternal.h" -#include +#include "CFString.h" #include #include #include diff --git a/CoreFoundation/String.subproj/CFStringTransform.c b/Sources/CoreFoundation/CFStringTransform.c similarity index 99% rename from CoreFoundation/String.subproj/CFStringTransform.c rename to Sources/CoreFoundation/CFStringTransform.c index 0d1c1948b1..bed21ccb83 100644 --- a/CoreFoundation/String.subproj/CFStringTransform.c +++ b/Sources/CoreFoundation/CFStringTransform.c @@ -13,10 +13,11 @@ !!! For performance reasons, it's important that all functions marked CF_INLINE in this file are inlined. */ -#include -#include -#include -#include +#include "CoreFoundation_Prefix.h" +#include "CFBase.h" +#include "CFString.h" +#include "CFUniChar.h" +#include "CFPriv.h" #include "CFInternal.h" #include diff --git a/CoreFoundation/String.subproj/CFStringUtilities.c b/Sources/CoreFoundation/CFStringUtilities.c similarity index 99% rename from CoreFoundation/String.subproj/CFStringUtilities.c rename to Sources/CoreFoundation/CFStringUtilities.c index 29e5c94ccd..2b41f9723d 100644 --- a/CoreFoundation/String.subproj/CFStringUtilities.c +++ b/Sources/CoreFoundation/CFStringUtilities.c @@ -9,9 +9,9 @@ */ #include "CFInternal.h" -#include -#include -#include +#include "CFStringEncodingConverterExt.h" +#include "CFUniChar.h" +#include "CFStringEncodingExt.h" #include "CFStringEncodingConverterPriv.h" #include "CFStringEncodingDatabase.h" #include "CFICUConverters.h" diff --git a/CoreFoundation/Base.subproj/CFSystemDirectories.c b/Sources/CoreFoundation/CFSystemDirectories.c similarity index 99% rename from CoreFoundation/Base.subproj/CFSystemDirectories.c rename to Sources/CoreFoundation/CFSystemDirectories.c index a480903710..1a394db3d1 100644 --- a/CoreFoundation/Base.subproj/CFSystemDirectories.c +++ b/Sources/CoreFoundation/CFSystemDirectories.c @@ -15,7 +15,7 @@ On Windows, it calls the enumeration functions defined here. */ -#include +#include "CFPriv.h" #include "CFInternal.h" #if TARGET_OS_MAC diff --git a/CoreFoundation/NumberDate.subproj/CFTimeZone.c b/Sources/CoreFoundation/CFTimeZone.c similarity index 99% rename from CoreFoundation/NumberDate.subproj/CFTimeZone.c rename to Sources/CoreFoundation/CFTimeZone.c index 9594f00ad8..f69c3ece70 100644 --- a/CoreFoundation/NumberDate.subproj/CFTimeZone.c +++ b/Sources/CoreFoundation/CFTimeZone.c @@ -9,10 +9,10 @@ */ -#include -#include -#include -#include +#include "CFTimeZone.h" +#include "CFPropertyList.h" +#include "CFDateFormatter.h" +#include "CFPriv.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" #include @@ -24,7 +24,7 @@ #include #include #include -#include +#include "CFDateFormatter.h" #if TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI #include #include diff --git a/CoreFoundation/Collections.subproj/CFTree.c b/Sources/CoreFoundation/CFTree.c similarity index 99% rename from CoreFoundation/Collections.subproj/CFTree.c rename to Sources/CoreFoundation/CFTree.c index ba6a73fdd4..a132b8b2c9 100644 --- a/CoreFoundation/Collections.subproj/CFTree.c +++ b/Sources/CoreFoundation/CFTree.c @@ -8,10 +8,10 @@ Responsibility: Michael LeHew */ -#include +#include "CFTree.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" -#include +#include "CFPriv.h" struct __CFTreeCallBacks { CFTreeRetainCallBack retain; diff --git a/CoreFoundation/URL.subproj/CFURL.c b/Sources/CoreFoundation/CFURL.c similarity index 99% rename from CoreFoundation/URL.subproj/CFURL.c rename to Sources/CoreFoundation/CFURL.c index 9b2dc82be8..93e0444686 100644 --- a/CoreFoundation/URL.subproj/CFURL.c +++ b/Sources/CoreFoundation/CFURL.c @@ -8,14 +8,14 @@ Responsibility: Jim Luther/Chris Linn */ -#include -#include -#include -#include +#include "CFURL.h" +#include "CFPriv.h" +#include "CFCharacterSetPriv.h" +#include "CFNumber.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" #include -#include +#include "CFStringEncodingConverter.h" #include #include #include @@ -24,7 +24,7 @@ #include #if TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD #if TARGET_OS_OSX -#include +#include "CFNumberFormatter.h" #endif #include #include @@ -34,7 +34,7 @@ #else #include #endif -#include +#include "CFURLPriv.h" #endif #ifndef DEBUG_URL_MEMORY_USAGE diff --git a/CoreFoundation/URL.subproj/CFURLAccess.c b/Sources/CoreFoundation/CFURLAccess.c similarity index 99% rename from CoreFoundation/URL.subproj/CFURLAccess.c rename to Sources/CoreFoundation/CFURLAccess.c index b404741173..2e700c605b 100644 --- a/CoreFoundation/URL.subproj/CFURLAccess.c +++ b/Sources/CoreFoundation/CFURLAccess.c @@ -16,12 +16,12 @@ CFData read/write routines #pragma GCC diagnostic ignored "-Wdeprecated" #include "CFInternal.h" -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFURL.h" +#include "CFDictionary.h" +#include "CFURLAccess.h" +#include "CFDate.h" +#include "CFNumber.h" #include #include #if TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI diff --git a/CoreFoundation/URL.subproj/CFURLComponents.c b/Sources/CoreFoundation/CFURLComponents.c similarity index 99% rename from CoreFoundation/URL.subproj/CFURLComponents.c rename to Sources/CoreFoundation/CFURLComponents.c index 6918307551..38cc83dae9 100644 --- a/CoreFoundation/URL.subproj/CFURLComponents.c +++ b/Sources/CoreFoundation/CFURLComponents.c @@ -9,7 +9,7 @@ */ -#include +#include "CFURLComponents.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" #include "CFURLComponents_Internal.h" diff --git a/CoreFoundation/URL.subproj/CFURLComponents_URIParser.c b/Sources/CoreFoundation/CFURLComponents_URIParser.c similarity index 99% rename from CoreFoundation/URL.subproj/CFURLComponents_URIParser.c rename to Sources/CoreFoundation/CFURLComponents_URIParser.c index 8f916fa0b4..76242fe823 100644 --- a/CoreFoundation/URL.subproj/CFURLComponents_URIParser.c +++ b/Sources/CoreFoundation/CFURLComponents_URIParser.c @@ -3,8 +3,8 @@ Responsibility: Jim Luther/Chris Linn */ -#include -#include +#include "CFBase.h" +#include "CFString.h" #include "CFOverflow.h" #include "CFURLComponents_Internal.h" #include "CFInternal.h" diff --git a/CoreFoundation/URL.subproj/CFURLSessionInterface.c b/Sources/CoreFoundation/CFURLSessionInterface.c similarity index 99% rename from CoreFoundation/URL.subproj/CFURLSessionInterface.c rename to Sources/CoreFoundation/CFURLSessionInterface.c index 6226a3f5ce..afd950d6fc 100644 --- a/CoreFoundation/URL.subproj/CFURLSessionInterface.c +++ b/Sources/CoreFoundation/CFURLSessionInterface.c @@ -19,8 +19,8 @@ //===----------------------------------------------------------------------===// #include "CFURLSessionInterface.h" -#include -#include +#include "CFInternal.h" +#include "CFString.h" #include FILE* aa = NULL; diff --git a/CoreFoundation/Base.subproj/CFUUID.c b/Sources/CoreFoundation/CFUUID.c similarity index 98% rename from CoreFoundation/Base.subproj/CFUUID.c rename to Sources/CoreFoundation/CFUUID.c index e5d78b48e2..beb0911eb7 100644 --- a/CoreFoundation/Base.subproj/CFUUID.c +++ b/Sources/CoreFoundation/CFUUID.c @@ -8,7 +8,7 @@ Responsibility: Ben D. Jones */ -#include +#include "CFUUID.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" @@ -135,13 +135,7 @@ static CFUUIDRef __CFUUIDCreateWithBytesPrimitive(CFAllocatorRef allocator, CFUU #include #endif -#if DEPLOYMENT_RUNTIME_SWIFT -#include "uuid/uuid.h" -#else -#if !TARGET_OS_WIN32 -#include -#endif -#endif +#include "uuid.h" CFUUIDRef CFUUIDCreate(CFAllocatorRef alloc) { /* Create a new bytes struct and then call the primitive. */ diff --git a/CoreFoundation/StringEncodings.subproj/CFUniChar.c b/Sources/CoreFoundation/CFUniChar.c similarity index 99% rename from CoreFoundation/StringEncodings.subproj/CFUniChar.c rename to Sources/CoreFoundation/CFUniChar.c index 120e1af7ab..3b51d495da 100644 --- a/CoreFoundation/StringEncodings.subproj/CFUniChar.c +++ b/Sources/CoreFoundation/CFUniChar.c @@ -8,8 +8,8 @@ Responsibility: Foundation Team */ -#include -#include +#include "CFBase.h" +#include "CFByteOrder.h" #include "CFBase.h" #include "CFInternal.h" #include "CFUniChar.h" diff --git a/CoreFoundation/String.subproj/CFUniCharPropertyDatabase.S b/Sources/CoreFoundation/CFUniCharPropertyDatabase.S similarity index 95% rename from CoreFoundation/String.subproj/CFUniCharPropertyDatabase.S rename to Sources/CoreFoundation/CFUniCharPropertyDatabase.S index d05e0dfad5..f83a194af7 100644 --- a/CoreFoundation/String.subproj/CFUniCharPropertyDatabase.S +++ b/Sources/CoreFoundation/CFUniCharPropertyDatabase.S @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -#include +#include "CFAsmMacros.h" #if defined(__ELF__) .section .rodata diff --git a/CoreFoundation/CharacterSets/CFUniCharPropertyDatabase.data b/Sources/CoreFoundation/CFUniCharPropertyDatabase.data similarity index 100% rename from CoreFoundation/CharacterSets/CFUniCharPropertyDatabase.data rename to Sources/CoreFoundation/CFUniCharPropertyDatabase.data diff --git a/CoreFoundation/CharacterSets/CFUnicodeData-B.mapping b/Sources/CoreFoundation/CFUnicodeData-B.mapping similarity index 100% rename from CoreFoundation/CharacterSets/CFUnicodeData-B.mapping rename to Sources/CoreFoundation/CFUnicodeData-B.mapping diff --git a/CoreFoundation/CharacterSets/CFUnicodeData-L.mapping b/Sources/CoreFoundation/CFUnicodeData-L.mapping similarity index 100% rename from CoreFoundation/CharacterSets/CFUnicodeData-L.mapping rename to Sources/CoreFoundation/CFUnicodeData-L.mapping diff --git a/CoreFoundation/String.subproj/CFUnicodeData.S b/Sources/CoreFoundation/CFUnicodeData.S similarity index 96% rename from CoreFoundation/String.subproj/CFUnicodeData.S rename to Sources/CoreFoundation/CFUnicodeData.S index 9272ab01c2..aaa44519b7 100644 --- a/CoreFoundation/String.subproj/CFUnicodeData.S +++ b/Sources/CoreFoundation/CFUnicodeData.S @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -#include +#include "CFAsmMacros.h" #if defined(__ELF__) .section .rodata diff --git a/CoreFoundation/StringEncodings.subproj/CFUnicodeDecomposition.c b/Sources/CoreFoundation/CFUnicodeDecomposition.c similarity index 99% rename from CoreFoundation/StringEncodings.subproj/CFUnicodeDecomposition.c rename to Sources/CoreFoundation/CFUnicodeDecomposition.c index 40c3e62ede..f2050642f0 100644 --- a/CoreFoundation/StringEncodings.subproj/CFUnicodeDecomposition.c +++ b/Sources/CoreFoundation/CFUnicodeDecomposition.c @@ -9,10 +9,10 @@ */ #include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFCharacterSet.h" +#include "CFUniChar.h" +#include "CFUnicodeDecomposition.h" #include "CFInternal.h" #include "CFUniCharPriv.h" diff --git a/CoreFoundation/StringEncodings.subproj/CFUnicodePrecomposition.c b/Sources/CoreFoundation/CFUnicodePrecomposition.c similarity index 99% rename from CoreFoundation/StringEncodings.subproj/CFUnicodePrecomposition.c rename to Sources/CoreFoundation/CFUnicodePrecomposition.c index 88776c45ef..fe2d34603f 100644 --- a/CoreFoundation/StringEncodings.subproj/CFUnicodePrecomposition.c +++ b/Sources/CoreFoundation/CFUnicodePrecomposition.c @@ -9,8 +9,8 @@ */ #include -#include -#include +#include "CFBase.h" +#include "CFCharacterSet.h" #include "CFUniChar.h" #include "CFUnicodePrecomposition.h" #include "CFInternal.h" diff --git a/CoreFoundation/Base.subproj/CFUtilities.c b/Sources/CoreFoundation/CFUtilities.c similarity index 99% rename from CoreFoundation/Base.subproj/CFUtilities.c rename to Sources/CoreFoundation/CFUtilities.c index 7c3fc9f8e7..4a31db0f6b 100644 --- a/CoreFoundation/Base.subproj/CFUtilities.c +++ b/Sources/CoreFoundation/CFUtilities.c @@ -14,20 +14,20 @@ #define XPC_TRANSACTION_DEPRECATED #endif -#include -#include +#include "CFBase.h" +#include "CFPriv.h" #include "CFInternal.h" #include "CFLocaleInternal.h" #if !TARGET_OS_WASI #include "CFBundle_Internal.h" #endif -#include +#include "CFPriv.h" #if TARGET_OS_MAC || TARGET_OS_WIN32 -#include +#include "CFBundle.h" #endif -#include +#include "CFURLAccess.h" #if !TARGET_OS_WASI -#include +#include "CFPropertyList.h" #endif #if TARGET_OS_WIN32 #include diff --git a/CoreFoundation/Base.subproj/CFWindowsUtilities.c b/Sources/CoreFoundation/CFWindowsUtilities.c similarity index 98% rename from CoreFoundation/Base.subproj/CFWindowsUtilities.c rename to Sources/CoreFoundation/CFWindowsUtilities.c index ef4e25cca0..dd40df2214 100644 --- a/CoreFoundation/Base.subproj/CFWindowsUtilities.c +++ b/Sources/CoreFoundation/CFWindowsUtilities.c @@ -11,8 +11,8 @@ #if TARGET_OS_WIN32 -#include -#include +#include "CFArray.h" +#include "CFString.h" #include "CFInternal.h" #include "CFPriv.h" diff --git a/CoreFoundation/Parsing.subproj/CFXMLInterface.c b/Sources/CoreFoundation/CFXMLInterface.c similarity index 99% rename from CoreFoundation/Parsing.subproj/CFXMLInterface.c rename to Sources/CoreFoundation/CFXMLInterface.c index fe841ea3e8..6ad5720718 100644 --- a/CoreFoundation/Parsing.subproj/CFXMLInterface.c +++ b/Sources/CoreFoundation/CFXMLInterface.c @@ -11,9 +11,9 @@ Copyright (c) 2020 Apple Inc. and the Swift project authors */ -#include -#include -#include +#include "CFRuntime.h" +#include "CFInternal.h" +#include "ForSwiftFoundationOnly.h" #include #include #include diff --git a/CoreFoundation/Preferences.subproj/CFXMLPreferencesDomain.c b/Sources/CoreFoundation/CFXMLPreferencesDomain.c similarity index 99% rename from CoreFoundation/Preferences.subproj/CFXMLPreferencesDomain.c rename to Sources/CoreFoundation/CFXMLPreferencesDomain.c index 2c037657a4..f115c985fb 100644 --- a/CoreFoundation/Preferences.subproj/CFXMLPreferencesDomain.c +++ b/Sources/CoreFoundation/CFXMLPreferencesDomain.c @@ -9,11 +9,11 @@ */ -#include -#include -#include -#include -#include +#include "CFPreferences.h" +#include "CFURLAccess.h" +#include "CFPropertyList.h" +#include "CFNumber.h" +#include "CFDate.h" #include "CFInternal.h" #include #if TARGET_OS_OSX diff --git a/CoreFoundation/CMakeLists.txt b/Sources/CoreFoundation/CMakeLists.txt similarity index 100% rename from CoreFoundation/CMakeLists.txt rename to Sources/CoreFoundation/CMakeLists.txt diff --git a/CoreFoundation/CoreFoundation.rc b/Sources/CoreFoundation/CoreFoundation.rc similarity index 100% rename from CoreFoundation/CoreFoundation.rc rename to Sources/CoreFoundation/CoreFoundation.rc diff --git a/CoreFoundation/Base.subproj/DarwinSymbolAliases b/Sources/CoreFoundation/DarwinSymbolAliases similarity index 100% rename from CoreFoundation/Base.subproj/DarwinSymbolAliases rename to Sources/CoreFoundation/DarwinSymbolAliases diff --git a/CoreFoundation/Info.plist b/Sources/CoreFoundation/Info.plist similarity index 100% rename from CoreFoundation/Info.plist rename to Sources/CoreFoundation/Info.plist diff --git a/CoreFoundation/OlsonWindowsMapping.plist b/Sources/CoreFoundation/OlsonWindowsMapping.plist similarity index 100% rename from CoreFoundation/OlsonWindowsMapping.plist rename to Sources/CoreFoundation/OlsonWindowsMapping.plist diff --git a/CoreFoundation/Base.subproj/SymbolAliases b/Sources/CoreFoundation/SymbolAliases similarity index 100% rename from CoreFoundation/Base.subproj/SymbolAliases rename to Sources/CoreFoundation/SymbolAliases diff --git a/CoreFoundation/Tools/OlsonWindowsDatabase.xsl b/Sources/CoreFoundation/Tools/OlsonWindowsDatabase.xsl similarity index 100% rename from CoreFoundation/Tools/OlsonWindowsDatabase.xsl rename to Sources/CoreFoundation/Tools/OlsonWindowsDatabase.xsl diff --git a/CoreFoundation/Tools/WindowsOlsonDatabase.xsl b/Sources/CoreFoundation/Tools/WindowsOlsonDatabase.xsl similarity index 100% rename from CoreFoundation/Tools/WindowsOlsonDatabase.xsl rename to Sources/CoreFoundation/Tools/WindowsOlsonDatabase.xsl diff --git a/CoreFoundation/WindowsOlsonMapping.plist b/Sources/CoreFoundation/WindowsOlsonMapping.plist similarity index 100% rename from CoreFoundation/WindowsOlsonMapping.plist rename to Sources/CoreFoundation/WindowsOlsonMapping.plist diff --git a/CoreFoundation/build.py b/Sources/CoreFoundation/build.py similarity index 100% rename from CoreFoundation/build.py rename to Sources/CoreFoundation/build.py diff --git a/CoreFoundation/Parsing.subproj/module.map b/Sources/CoreFoundation/cfxml-module.map similarity index 100% rename from CoreFoundation/Parsing.subproj/module.map rename to Sources/CoreFoundation/cfxml-module.map diff --git a/CoreFoundation/Parsing.subproj/module.modulemap b/Sources/CoreFoundation/cfxml-module.modulemap similarity index 100% rename from CoreFoundation/Parsing.subproj/module.modulemap rename to Sources/CoreFoundation/cfxml-module.modulemap diff --git a/CoreFoundation/cmake/modules/CoreFoundationAddFramework.cmake b/Sources/CoreFoundation/cmake/modules/CoreFoundationAddFramework.cmake similarity index 100% rename from CoreFoundation/cmake/modules/CoreFoundationAddFramework.cmake rename to Sources/CoreFoundation/cmake/modules/CoreFoundationAddFramework.cmake diff --git a/Sources/BlocksRuntime/data.c b/Sources/CoreFoundation/data.c similarity index 100% rename from Sources/BlocksRuntime/data.c rename to Sources/CoreFoundation/data.c diff --git a/Sources/BlocksRuntime/Block.h b/Sources/CoreFoundation/include/Block.h similarity index 98% rename from Sources/BlocksRuntime/Block.h rename to Sources/CoreFoundation/include/Block.h index 5b18102f7e..f3b92fdacc 100644 --- a/Sources/BlocksRuntime/Block.h +++ b/Sources/CoreFoundation/include/Block.h @@ -7,6 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +#include "TargetConditionals.h" #ifndef _Block_H_ #define _Block_H_ diff --git a/Sources/BlocksRuntime/Block_private.h b/Sources/CoreFoundation/include/Block_private.h similarity index 99% rename from Sources/BlocksRuntime/Block_private.h rename to Sources/CoreFoundation/include/Block_private.h index 5a1bf4d7d0..66079bf7ac 100644 --- a/Sources/BlocksRuntime/Block_private.h +++ b/Sources/CoreFoundation/include/Block_private.h @@ -7,6 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +#include "TargetConditionals.h" #ifndef _BLOCK_PRIVATE_H_ #define _BLOCK_PRIVATE_H_ diff --git a/CoreFoundation/Collections.subproj/CFArray.h b/Sources/CoreFoundation/include/CFArray.h similarity index 99% rename from CoreFoundation/Collections.subproj/CFArray.h rename to Sources/CoreFoundation/include/CFArray.h index 1ac10debfe..1cde1f27e3 100644 --- a/CoreFoundation/Collections.subproj/CFArray.h +++ b/Sources/CoreFoundation/include/CFArray.h @@ -44,7 +44,7 @@ #if !defined(__COREFOUNDATION_CFARRAY__) #define __COREFOUNDATION_CFARRAY__ 1 -#include +#include "CFBase.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Base.subproj/CFAsmMacros.h b/Sources/CoreFoundation/include/CFAsmMacros.h similarity index 100% rename from CoreFoundation/Base.subproj/CFAsmMacros.h rename to Sources/CoreFoundation/include/CFAsmMacros.h diff --git a/CoreFoundation/String.subproj/CFAttributedString.h b/Sources/CoreFoundation/include/CFAttributedString.h similarity index 99% rename from CoreFoundation/String.subproj/CFAttributedString.h rename to Sources/CoreFoundation/include/CFAttributedString.h index 9eafdcbb02..6884b73dda 100644 --- a/CoreFoundation/String.subproj/CFAttributedString.h +++ b/Sources/CoreFoundation/include/CFAttributedString.h @@ -22,9 +22,9 @@ Attributes are identified by key/value pairs stored in CFDictionaryRefs. Keys mu #if !defined(__COREFOUNDATION_CFATTRIBUTEDSTRING__) #define __COREFOUNDATION_CFATTRIBUTEDSTRING__ 1 -#include -#include -#include +#include "CFBase.h" +#include "CFString.h" +#include "CFDictionary.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/String.subproj/CFAttributedStringPriv.h b/Sources/CoreFoundation/include/CFAttributedStringPriv.h similarity index 96% rename from CoreFoundation/String.subproj/CFAttributedStringPriv.h rename to Sources/CoreFoundation/include/CFAttributedStringPriv.h index 6f2e0ef7f6..1ccf632a8a 100644 --- a/CoreFoundation/String.subproj/CFAttributedStringPriv.h +++ b/Sources/CoreFoundation/include/CFAttributedStringPriv.h @@ -5,7 +5,7 @@ #if !defined(__COREFOUNDATION_CFATTRIBUTEDSTRINGPRIV__) #define __COREFOUNDATION_CFATTRIBUTEDSTRINGPRIV__ 1 -#include +#include "CFAttributedString.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Base.subproj/CFAvailability.h b/Sources/CoreFoundation/include/CFAvailability.h similarity index 99% rename from CoreFoundation/Base.subproj/CFAvailability.h rename to Sources/CoreFoundation/include/CFAvailability.h index ef4b6edbb5..8f1f163f03 100644 --- a/CoreFoundation/Base.subproj/CFAvailability.h +++ b/Sources/CoreFoundation/include/CFAvailability.h @@ -11,7 +11,7 @@ #define __COREFOUNDATION_CFAVAILABILITY__ 1 #if __has_include() -#include +#include "TargetConditionals.h" #else #include #endif diff --git a/CoreFoundation/Collections.subproj/CFBag.h b/Sources/CoreFoundation/include/CFBag.h similarity index 98% rename from CoreFoundation/Collections.subproj/CFBag.h rename to Sources/CoreFoundation/include/CFBag.h index e5337439d6..b541d7f13e 100644 --- a/CoreFoundation/Collections.subproj/CFBag.h +++ b/Sources/CoreFoundation/include/CFBag.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFBAG__) #define __COREFOUNDATION_CFBAG__ 1 -#include +#include "CFBase.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Base.subproj/CFBase.h b/Sources/CoreFoundation/include/CFBase.h similarity index 99% rename from CoreFoundation/Base.subproj/CFBase.h rename to Sources/CoreFoundation/include/CFBase.h index f32b96f8a3..54f3bb475e 100644 --- a/CoreFoundation/Base.subproj/CFBase.h +++ b/Sources/CoreFoundation/include/CFBase.h @@ -7,16 +7,18 @@ See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors */ +#include "CoreFoundation_Prefix.h" + #if !defined(__COREFOUNDATION_CFBASE__) #define __COREFOUNDATION_CFBASE__ 1 #if __has_include() -#include +#include "TargetConditionals.h" #else #include #endif -#include +#include "CFAvailability.h" #if (defined(__CYGWIN32__) || defined(_WIN32)) && !defined(__WIN32__) #define __WIN32__ 1 diff --git a/CoreFoundation/Collections.subproj/CFBasicHash.h b/Sources/CoreFoundation/include/CFBasicHash.h similarity index 98% rename from CoreFoundation/Collections.subproj/CFBasicHash.h rename to Sources/CoreFoundation/include/CFBasicHash.h index 988dc9f167..5df0113d72 100644 --- a/CoreFoundation/Collections.subproj/CFBasicHash.h +++ b/Sources/CoreFoundation/include/CFBasicHash.h @@ -7,8 +7,8 @@ See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors */ -#include -#include +#include "CFBase.h" +#include "CFString.h" #include "CFInternal.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/NumberDate.subproj/CFBigNumber.h b/Sources/CoreFoundation/include/CFBigNumber.h similarity index 97% rename from CoreFoundation/NumberDate.subproj/CFBigNumber.h rename to Sources/CoreFoundation/include/CFBigNumber.h index e73cf9f432..b7154dcb6c 100644 --- a/CoreFoundation/NumberDate.subproj/CFBigNumber.h +++ b/Sources/CoreFoundation/include/CFBigNumber.h @@ -10,8 +10,8 @@ #if !defined(__COREFOUNDATION_CFBIGNUMBER__) #define __COREFOUNDATION_CFBIGNUMBER__ 1 -#include -#include +#include "CFBase.h" +#include "CFNumber.h" // Base 1 billion number: each digit represents 0 to 999999999 diff --git a/CoreFoundation/Collections.subproj/CFBinaryHeap.h b/Sources/CoreFoundation/include/CFBinaryHeap.h similarity index 99% rename from CoreFoundation/Collections.subproj/CFBinaryHeap.h rename to Sources/CoreFoundation/include/CFBinaryHeap.h index 23cf01a498..5b9710bc90 100644 --- a/CoreFoundation/Collections.subproj/CFBinaryHeap.h +++ b/Sources/CoreFoundation/include/CFBinaryHeap.h @@ -16,7 +16,7 @@ #if !defined(__COREFOUNDATION_CFBINARYHEAP__) #define __COREFOUNDATION_CFBINARYHEAP__ 1 -#include +#include "CFBase.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Collections.subproj/CFBitVector.h b/Sources/CoreFoundation/include/CFBitVector.h similarity index 98% rename from CoreFoundation/Collections.subproj/CFBitVector.h rename to Sources/CoreFoundation/include/CFBitVector.h index 86ec08b9a6..08fee1e1b6 100644 --- a/CoreFoundation/Collections.subproj/CFBitVector.h +++ b/Sources/CoreFoundation/include/CFBitVector.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFBITVECTOR__) #define __COREFOUNDATION_CFBITVECTOR__ 1 -#include +#include "CFBase.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/PlugIn.subproj/CFBundle.h b/Sources/CoreFoundation/include/CFBundle.h similarity index 98% rename from CoreFoundation/PlugIn.subproj/CFBundle.h rename to Sources/CoreFoundation/include/CFBundle.h index e00359bc18..36d6d061f9 100644 --- a/CoreFoundation/PlugIn.subproj/CFBundle.h +++ b/Sources/CoreFoundation/include/CFBundle.h @@ -5,12 +5,12 @@ #if !defined(__COREFOUNDATION_CFBUNDLE__) #define __COREFOUNDATION_CFBUNDLE__ 1 -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFArray.h" +#include "CFDictionary.h" +#include "CFError.h" +#include "CFString.h" +#include "CFURL.h" #if TARGET_OS_MAC #include diff --git a/CoreFoundation/PlugIn.subproj/CFBundlePriv.h b/Sources/CoreFoundation/include/CFBundlePriv.h similarity index 98% rename from CoreFoundation/PlugIn.subproj/CFBundlePriv.h rename to Sources/CoreFoundation/include/CFBundlePriv.h index 3edfdf9b1c..b1250f7ce8 100644 --- a/CoreFoundation/PlugIn.subproj/CFBundlePriv.h +++ b/Sources/CoreFoundation/include/CFBundlePriv.h @@ -10,12 +10,12 @@ #if !defined(__COREFOUNDATION_CFBUNDLEPRIV__) #define __COREFOUNDATION_CFBUNDLEPRIV__ 1 -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFArray.h" +#include "CFBundle.h" +#include "CFDictionary.h" +#include "CFString.h" +#include "CFURL.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_BinaryTypes.h b/Sources/CoreFoundation/include/CFBundle_BinaryTypes.h similarity index 100% rename from CoreFoundation/PlugIn.subproj/CFBundle_BinaryTypes.h rename to Sources/CoreFoundation/include/CFBundle_BinaryTypes.h diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_Internal.h b/Sources/CoreFoundation/include/CFBundle_Internal.h similarity index 99% rename from CoreFoundation/PlugIn.subproj/CFBundle_Internal.h rename to Sources/CoreFoundation/include/CFBundle_Internal.h index def3aafc8d..53dce5cbb2 100644 --- a/CoreFoundation/PlugIn.subproj/CFBundle_Internal.h +++ b/Sources/CoreFoundation/include/CFBundle_Internal.h @@ -10,14 +10,14 @@ #if !defined(__COREFOUNDATION_CFBUNDLE_INTERNAL__) #define __COREFOUNDATION_CFBUNDLE_INTERNAL__ 1 -#include -#include -#include -#include +#include "CFDate.h" +#include "CFBundle.h" +#include "CFPlugIn.h" +#include "CFError.h" #include "CFInternal.h" #include "CFPlugIn_Factory.h" #include "CFBundle_BinaryTypes.h" -#include +#include "CFByteOrder.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/PlugIn.subproj/CFBundle_SplitFileName.h b/Sources/CoreFoundation/include/CFBundle_SplitFileName.h similarity index 95% rename from CoreFoundation/PlugIn.subproj/CFBundle_SplitFileName.h rename to Sources/CoreFoundation/include/CFBundle_SplitFileName.h index 89af5eebf4..d1f081d947 100644 --- a/CoreFoundation/PlugIn.subproj/CFBundle_SplitFileName.h +++ b/Sources/CoreFoundation/include/CFBundle_SplitFileName.h @@ -5,7 +5,7 @@ #ifndef CFBundle_SplitFileName_h #define CFBundle_SplitFileName_h -#include +#include "CFString.h" typedef enum { _CFBundleFileVersionNoProductNoPlatform = 1, diff --git a/CoreFoundation/String.subproj/CFBurstTrie.h b/Sources/CoreFoundation/include/CFBurstTrie.h similarity index 99% rename from CoreFoundation/String.subproj/CFBurstTrie.h rename to Sources/CoreFoundation/include/CFBurstTrie.h index 58cc53ef41..a5cc31b36c 100644 --- a/CoreFoundation/String.subproj/CFBurstTrie.h +++ b/Sources/CoreFoundation/include/CFBurstTrie.h @@ -10,8 +10,8 @@ #if !defined(__COREFOUNDATION_CFBURSTTRIE__) #define __COREFOUNDATION_CFBURSTTRIE__ 1 -#include -#include +#include "CFString.h" +#include "CFDictionary.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Base.subproj/CFByteOrder.h b/Sources/CoreFoundation/include/CFByteOrder.h similarity index 99% rename from CoreFoundation/Base.subproj/CFByteOrder.h rename to Sources/CoreFoundation/include/CFByteOrder.h index bcf087fc07..f553a6533b 100644 --- a/CoreFoundation/Base.subproj/CFByteOrder.h +++ b/Sources/CoreFoundation/include/CFByteOrder.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFBYTEORDER__) #define __COREFOUNDATION_CFBYTEORDER__ 1 -#include +#include "CFBase.h" #if (TARGET_OS_OSX || TARGET_OS_IPHONE) && !defined(CF_USE_OSBYTEORDER_H) #include #define CF_USE_OSBYTEORDER_H 1 diff --git a/CoreFoundation/Locale.subproj/CFCalendar.h b/Sources/CoreFoundation/include/CFCalendar.h similarity index 96% rename from CoreFoundation/Locale.subproj/CFCalendar.h rename to Sources/CoreFoundation/include/CFCalendar.h index eb3685067d..b2c3c8eed1 100644 --- a/CoreFoundation/Locale.subproj/CFCalendar.h +++ b/Sources/CoreFoundation/include/CFCalendar.h @@ -10,10 +10,10 @@ #if !defined(__COREFOUNDATION_CFCALENDAR__) #define __COREFOUNDATION_CFCALENDAR__ 1 -#include -#include -#include -#include +#include "CFBase.h" +#include "CFLocale.h" +#include "CFDate.h" +#include "CFTimeZone.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Locale.subproj/CFCalendar_Internal.h b/Sources/CoreFoundation/include/CFCalendar_Internal.h similarity index 96% rename from CoreFoundation/Locale.subproj/CFCalendar_Internal.h rename to Sources/CoreFoundation/include/CFCalendar_Internal.h index 3a80eade7c..a4f31b6659 100644 --- a/CoreFoundation/Locale.subproj/CFCalendar_Internal.h +++ b/Sources/CoreFoundation/include/CFCalendar_Internal.h @@ -10,11 +10,11 @@ #if !defined(__COREFOUNDATION_CFCALENDAR_INTERNAL__) #define __COREFOUNDATION_CFCALENDAR_INTERNAL__ 1 -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFRuntime.h" +#include "CFPriv.h" +#include "CFTimeZone.h" +#include "CFString.h" #include "CFDateComponents.h" #include "CFDateInterval.h" diff --git a/CoreFoundation/String.subproj/CFCharacterSet.h b/Sources/CoreFoundation/include/CFCharacterSet.h similarity index 99% rename from CoreFoundation/String.subproj/CFCharacterSet.h rename to Sources/CoreFoundation/include/CFCharacterSet.h index 789c590edc..9e316afc35 100644 --- a/CoreFoundation/String.subproj/CFCharacterSet.h +++ b/Sources/CoreFoundation/include/CFCharacterSet.h @@ -36,8 +36,8 @@ #if !defined(__COREFOUNDATION_CFCHARACTERSET__) #define __COREFOUNDATION_CFCHARACTERSET__ 1 -#include -#include +#include "CFBase.h" +#include "CFData.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/String.subproj/CFCharacterSetPriv.h b/Sources/CoreFoundation/include/CFCharacterSetPriv.h similarity index 98% rename from CoreFoundation/String.subproj/CFCharacterSetPriv.h rename to Sources/CoreFoundation/include/CFCharacterSetPriv.h index 90a6ab9689..73f12b3a07 100644 --- a/CoreFoundation/String.subproj/CFCharacterSetPriv.h +++ b/Sources/CoreFoundation/include/CFCharacterSetPriv.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFCHARACTERSETPRIV__) #define __COREFOUNDATION_CFCHARACTERSETPRIV__ 1 -#include +#include "CFCharacterSet.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Collections.subproj/CFCollections_Internal.h b/Sources/CoreFoundation/include/CFCollections_Internal.h similarity index 91% rename from CoreFoundation/Collections.subproj/CFCollections_Internal.h rename to Sources/CoreFoundation/include/CFCollections_Internal.h index 0d85c44ee4..0f88d101e2 100644 --- a/CoreFoundation/Collections.subproj/CFCollections_Internal.h +++ b/Sources/CoreFoundation/include/CFCollections_Internal.h @@ -10,8 +10,8 @@ #if !defined(__COREFOUNDATION_CFCOLLECTIONS_INTERNAL__) #define __COREFOUNDATION_CFCOLLECTIONS_INTERNAL__ -#include -#include +#include "CFBase.h" +#include "CFDictionary.h" #include "CFInternal.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Collections.subproj/CFData.h b/Sources/CoreFoundation/include/CFData.h similarity index 98% rename from CoreFoundation/Collections.subproj/CFData.h rename to Sources/CoreFoundation/include/CFData.h index 41eef4514d..26481fd258 100644 --- a/CoreFoundation/Collections.subproj/CFData.h +++ b/Sources/CoreFoundation/include/CFData.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFDATA__) #define __COREFOUNDATION_CFDATA__ 1 -#include +#include "CFBase.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/NumberDate.subproj/CFDate.h b/Sources/CoreFoundation/include/CFDate.h similarity index 99% rename from CoreFoundation/NumberDate.subproj/CFDate.h rename to Sources/CoreFoundation/include/CFDate.h index 58eed27b75..0b4c25428f 100644 --- a/CoreFoundation/NumberDate.subproj/CFDate.h +++ b/Sources/CoreFoundation/include/CFDate.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFDATE__) #define __COREFOUNDATION_CFDATE__ 1 -#include +#include "CFBase.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Locale.subproj/CFDateComponents.h b/Sources/CoreFoundation/include/CFDateComponents.h similarity index 98% rename from CoreFoundation/Locale.subproj/CFDateComponents.h rename to Sources/CoreFoundation/include/CFDateComponents.h index 0a5cf7233e..ecfae5148f 100644 --- a/CoreFoundation/Locale.subproj/CFDateComponents.h +++ b/Sources/CoreFoundation/include/CFDateComponents.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFDATECOMPONENTS__) #define __COREFOUNDATION_CFDATECOMPONENTS__ 1 -#include +#include "CFBase.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Locale.subproj/CFDateFormatter.h b/Sources/CoreFoundation/include/CFDateFormatter.h similarity index 99% rename from CoreFoundation/Locale.subproj/CFDateFormatter.h rename to Sources/CoreFoundation/include/CFDateFormatter.h index 0cae10f48a..1a06c489b6 100644 --- a/CoreFoundation/Locale.subproj/CFDateFormatter.h +++ b/Sources/CoreFoundation/include/CFDateFormatter.h @@ -10,9 +10,9 @@ #if !defined(__COREFOUNDATION_CFDATEFORMATTER__) #define __COREFOUNDATION_CFDATEFORMATTER__ 1 -#include -#include -#include +#include "CFBase.h" +#include "CFDate.h" +#include "CFLocale.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Locale.subproj/CFDateFormatter_Private.h b/Sources/CoreFoundation/include/CFDateFormatter_Private.h similarity index 93% rename from CoreFoundation/Locale.subproj/CFDateFormatter_Private.h rename to Sources/CoreFoundation/include/CFDateFormatter_Private.h index d7659e8972..24d45e6d59 100644 --- a/CoreFoundation/Locale.subproj/CFDateFormatter_Private.h +++ b/Sources/CoreFoundation/include/CFDateFormatter_Private.h @@ -10,8 +10,8 @@ #if !defined(__COREFOUNDATION_CFDATEFORMATTER_PRIVATE__) #define __COREFOUNDATION_CFDATEFORMATTER_PRIVATE__ 1 -#include -#include +#include "CFDateFormatter.h" +#include "CFAttributedString.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Locale.subproj/CFDateInterval.h b/Sources/CoreFoundation/include/CFDateInterval.h similarity index 97% rename from CoreFoundation/Locale.subproj/CFDateInterval.h rename to Sources/CoreFoundation/include/CFDateInterval.h index 920963763d..3195c063ea 100644 --- a/CoreFoundation/Locale.subproj/CFDateInterval.h +++ b/Sources/CoreFoundation/include/CFDateInterval.h @@ -10,8 +10,8 @@ #if !defined(__COREFOUNDATION_CFDATEINTERVAL__) #define __COREFOUNDATION_CFDATEINTERVAL__ 1 -#include -#include +#include "CFBase.h" +#include "CFDate.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Locale.subproj/CFDateIntervalFormatter.h b/Sources/CoreFoundation/include/CFDateIntervalFormatter.h similarity index 95% rename from CoreFoundation/Locale.subproj/CFDateIntervalFormatter.h rename to Sources/CoreFoundation/include/CFDateIntervalFormatter.h index b6b0e9fa77..b66f4cd48a 100644 --- a/CoreFoundation/Locale.subproj/CFDateIntervalFormatter.h +++ b/Sources/CoreFoundation/include/CFDateIntervalFormatter.h @@ -10,12 +10,12 @@ #if !defined(__COREFOUNDATION_CFDATEINTERVALFORMATTER__) #define __COREFOUNDATION_CFDATEINTERVALFORMATTER__ 1 -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFCalendar.h" +#include "CFDateInterval.h" +#include "CFLocale.h" +#include "CFString.h" +#include "CFTimeZone.h" CF_ASSUME_NONNULL_BEGIN CF_IMPLICIT_BRIDGING_ENABLED diff --git a/CoreFoundation/Collections.subproj/CFDictionary.h b/Sources/CoreFoundation/include/CFDictionary.h similarity index 99% rename from CoreFoundation/Collections.subproj/CFDictionary.h rename to Sources/CoreFoundation/include/CFDictionary.h index a52f5ce722..93d7af8385 100644 --- a/CoreFoundation/Collections.subproj/CFDictionary.h +++ b/Sources/CoreFoundation/include/CFDictionary.h @@ -64,7 +64,7 @@ #if !defined(__COREFOUNDATION_CFDICTIONARY__) #define __COREFOUNDATION_CFDICTIONARY__ 1 -#include +#include "CFBase.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Error.subproj/CFError.h b/Sources/CoreFoundation/include/CFError.h similarity index 99% rename from CoreFoundation/Error.subproj/CFError.h rename to Sources/CoreFoundation/include/CFError.h index cfe74fb55d..7d44af932b 100644 --- a/CoreFoundation/Error.subproj/CFError.h +++ b/Sources/CoreFoundation/include/CFError.h @@ -34,9 +34,9 @@ #if !defined(__COREFOUNDATION_CFERROR__) #define __COREFOUNDATION_CFERROR__ 1 -#include -#include -#include +#include "CFBase.h" +#include "CFString.h" +#include "CFDictionary.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Error.subproj/CFError_Private.h b/Sources/CoreFoundation/include/CFError_Private.h similarity index 96% rename from CoreFoundation/Error.subproj/CFError_Private.h rename to Sources/CoreFoundation/include/CFError_Private.h index f046650c72..117c59957c 100644 --- a/CoreFoundation/Error.subproj/CFError_Private.h +++ b/Sources/CoreFoundation/include/CFError_Private.h @@ -12,7 +12,7 @@ #if !defined(__COREFOUNDATION_CFERRORPRIVATE__) #define __COREFOUNDATION_CFERRORPRIVATE__ 1 -#include +#include "CFError.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/StringEncodings.subproj/CFICUConverters.h b/Sources/CoreFoundation/include/CFICUConverters.h similarity index 97% rename from CoreFoundation/StringEncodings.subproj/CFICUConverters.h rename to Sources/CoreFoundation/include/CFICUConverters.h index d6ab35467d..a9f6639993 100644 --- a/CoreFoundation/StringEncodings.subproj/CFICUConverters.h +++ b/Sources/CoreFoundation/include/CFICUConverters.h @@ -10,7 +10,7 @@ See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors */ -#include +#include "CFString.h" CF_PRIVATE const char *__CFStringEncodingGetICUName(CFStringEncoding encoding); diff --git a/CoreFoundation/Locale.subproj/CFICULogging.h b/Sources/CoreFoundation/include/CFICULogging.h similarity index 100% rename from CoreFoundation/Locale.subproj/CFICULogging.h rename to Sources/CoreFoundation/include/CFICULogging.h diff --git a/CoreFoundation/Base.subproj/CFInternal.h b/Sources/CoreFoundation/include/CFInternal.h similarity index 99% rename from CoreFoundation/Base.subproj/CFInternal.h rename to Sources/CoreFoundation/include/CFInternal.h index b737f30ec7..e89fd67d9c 100644 --- a/CoreFoundation/Base.subproj/CFInternal.h +++ b/Sources/CoreFoundation/include/CFInternal.h @@ -10,6 +10,7 @@ /* NOT TO BE USED OUTSIDE CF! */ +#include "CoreFoundation_Prefix.h" #if !CF_BUILDING_CF #error The header file CFInternal.h is for the exclusive use of CoreFoundation. No other project should include it. @@ -19,7 +20,7 @@ #define __COREFOUNDATION_CFINTERNAL__ 1 #if __has_include() -#include +#include "TargetConditionals.h" #else #include #endif @@ -93,13 +94,13 @@ CF_EXTERN_C_BEGIN -#include -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFURL.h" +#include "CFString.h" +#include "CFDate.h" +#include "CFArray.h" +#include "CFLogUtilities.h" +#include "CFRuntime.h" #include "CFRuntime_Internal.h" #include #include @@ -166,10 +167,10 @@ typedef struct os_log_s *os_log_t; #define __CF_BIG_ENDIAN__ 0 #endif -#include +#include "ForFoundationOnly.h" #if DEPLOYMENT_RUNTIME_SWIFT -#include -#include +#include "ForSwiftFoundationOnly.h" +#include "CFString.h" #endif CF_EXPORT const char *_CFProcessName(void); @@ -182,7 +183,7 @@ CF_EXPORT CFArrayRef _CFGetWindowsBinaryDirectories(void); CF_EXPORT CFStringRef _CFStringCreateHostName(void); #if TARGET_OS_MAC -#include +#include "CFRunLoop.h" CF_EXPORT void _CFMachPortInstallNotifyPort(CFRunLoopRef rl, CFStringRef mode); #endif @@ -578,7 +579,7 @@ CF_EXPORT id __NSDictionary0__; CF_EXPORT id __NSArray0__; #endif -#include +#include "CFLocking.h" #if _POSIX_THREADS typedef pthread_mutex_t _CFMutex; @@ -1177,7 +1178,10 @@ CF_INLINE dispatch_queue_t __CFDispatchQueueGetGenericBackground(void) { CF_PRIVATE CFStringRef _CFStringCopyBundleUnloadingProtectedString(CFStringRef str); CF_PRIVATE uint8_t *_CFDataGetBytePtrNonObjC(CFDataRef data); + +#if __HAS_DISPATCH__ CF_PRIVATE dispatch_data_t _CFDataCreateDispatchData(CFDataRef data); //avoids copying in most cases +#endif // Use this for functions that are intended to be breakpoint hooks. If you do not, the compiler may optimize them away. // Based on: BREAKPOINT_FUNCTION in objc-os.h diff --git a/CoreFoundation/Base.subproj/CFKnownLocations.h b/Sources/CoreFoundation/include/CFKnownLocations.h similarity index 96% rename from CoreFoundation/Base.subproj/CFKnownLocations.h rename to Sources/CoreFoundation/include/CFKnownLocations.h index 629468c0ae..6e9799b077 100644 --- a/CoreFoundation/Base.subproj/CFKnownLocations.h +++ b/Sources/CoreFoundation/include/CFKnownLocations.h @@ -10,8 +10,8 @@ #if !defined(__COREFOUNDATION_CFKNOWNLOCATIONS__) #define __COREFOUNDATION_CFKNOWNLOCATIONS__ 1 -#include -#include +#include "CFBase.h" +#include "CFURL.h" CF_ASSUME_NONNULL_BEGIN diff --git a/CoreFoundation/Locale.subproj/CFListFormatter.h b/Sources/CoreFoundation/include/CFListFormatter.h similarity index 93% rename from CoreFoundation/Locale.subproj/CFListFormatter.h rename to Sources/CoreFoundation/include/CFListFormatter.h index fffa436eaa..eb87134c27 100644 --- a/CoreFoundation/Locale.subproj/CFListFormatter.h +++ b/Sources/CoreFoundation/include/CFListFormatter.h @@ -10,8 +10,8 @@ #ifndef __COREFOUNDATION_CFLISTFORMATTER_h #define __COREFOUNDATION_CFLISTFORMATTER_h -#include -#include +#include "CFBase.h" +#include "CFLocale.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Locale.subproj/CFLocale.h b/Sources/CoreFoundation/include/CFLocale.h similarity index 98% rename from CoreFoundation/Locale.subproj/CFLocale.h rename to Sources/CoreFoundation/include/CFLocale.h index 6fda9a9ec7..8c0a131496 100644 --- a/CoreFoundation/Locale.subproj/CFLocale.h +++ b/Sources/CoreFoundation/include/CFLocale.h @@ -10,10 +10,10 @@ #if !defined(__COREFOUNDATION_CFLOCALE__) #define __COREFOUNDATION_CFLOCALE__ 1 -#include -#include -#include -#include +#include "CFBase.h" +#include "CFArray.h" +#include "CFDictionary.h" +#include "CFNotificationCenter.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Locale.subproj/CFLocaleInternal.h b/Sources/CoreFoundation/include/CFLocaleInternal.h similarity index 99% rename from CoreFoundation/Locale.subproj/CFLocaleInternal.h rename to Sources/CoreFoundation/include/CFLocaleInternal.h index 8b5125689c..d9da160259 100644 --- a/CoreFoundation/Locale.subproj/CFLocaleInternal.h +++ b/Sources/CoreFoundation/include/CFLocaleInternal.h @@ -12,7 +12,7 @@ This file is for the use of the CoreFoundation project only. */ -#include +#include "CFString.h" CF_EXPORT CFStringRef const kCFLocaleAlternateQuotationBeginDelimiterKey; CF_EXPORT CFStringRef const kCFLocaleAlternateQuotationEndDelimiterKey; diff --git a/CoreFoundation/Locale.subproj/CFLocale_Private.h b/Sources/CoreFoundation/include/CFLocale_Private.h similarity index 97% rename from CoreFoundation/Locale.subproj/CFLocale_Private.h rename to Sources/CoreFoundation/include/CFLocale_Private.h index f7d0c181fc..4b6ad447de 100644 --- a/CoreFoundation/Locale.subproj/CFLocale_Private.h +++ b/Sources/CoreFoundation/include/CFLocale_Private.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFLOCALE_PRIVATE__) #define __COREFOUNDATION_CFLOCALE_PRIVATE__ 1 -#include +#include "CoreFoundation.h" /// Returns the user’s preferred locale as-is, without attempting to match the locale’s language to the main bundle, unlike `CFLocaleCopyCurrent`. CF_EXPORT CFLocaleRef _CFLocaleCopyPreferred(void) API_AVAILABLE(macosx(10.13), ios(11.0), watchos(4.0), tvos(11.0)); diff --git a/CoreFoundation/Base.subproj/CFLocking.h b/Sources/CoreFoundation/include/CFLocking.h similarity index 98% rename from CoreFoundation/Base.subproj/CFLocking.h rename to Sources/CoreFoundation/include/CFLocking.h index b797c1aff8..ca7f8a86b9 100644 --- a/CoreFoundation/Base.subproj/CFLocking.h +++ b/Sources/CoreFoundation/include/CFLocking.h @@ -15,7 +15,7 @@ #define __COREFOUNDATION_CFLOCKING_H__ 1 #if __has_include() -#include +#include "TargetConditionals.h" #else #include #endif diff --git a/CoreFoundation/Base.subproj/CFLogUtilities.h b/Sources/CoreFoundation/include/CFLogUtilities.h similarity index 95% rename from CoreFoundation/Base.subproj/CFLogUtilities.h rename to Sources/CoreFoundation/include/CFLogUtilities.h index cc90e215e2..05a91e6b61 100644 --- a/CoreFoundation/Base.subproj/CFLogUtilities.h +++ b/Sources/CoreFoundation/include/CFLogUtilities.h @@ -14,8 +14,8 @@ #if !defined(__COREFOUNDATION_CFLOGUTILITIES__) #define __COREFOUNDATION_CFLOGUTILITIES__ 1 -#include -#include +#include "CFBase.h" +#include "CFString.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/RunLoop.subproj/CFMachPort.h b/Sources/CoreFoundation/include/CFMachPort.h similarity index 98% rename from CoreFoundation/RunLoop.subproj/CFMachPort.h rename to Sources/CoreFoundation/include/CFMachPort.h index 99c19e03a8..1fab928f0e 100644 --- a/CoreFoundation/RunLoop.subproj/CFMachPort.h +++ b/Sources/CoreFoundation/include/CFMachPort.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFMACHPORT__) #define __COREFOUNDATION_CFMACHPORT__ 1 -#include +#include "CFRunLoop.h" #if TARGET_OS_MAC #include diff --git a/CoreFoundation/RunLoop.subproj/CFMachPort_Internal.h b/Sources/CoreFoundation/include/CFMachPort_Internal.h similarity index 100% rename from CoreFoundation/RunLoop.subproj/CFMachPort_Internal.h rename to Sources/CoreFoundation/include/CFMachPort_Internal.h diff --git a/CoreFoundation/RunLoop.subproj/CFMachPort_Lifetime.h b/Sources/CoreFoundation/include/CFMachPort_Lifetime.h similarity index 98% rename from CoreFoundation/RunLoop.subproj/CFMachPort_Lifetime.h rename to Sources/CoreFoundation/include/CFMachPort_Lifetime.h index b34ef6d2bb..fef286a6a5 100644 --- a/CoreFoundation/RunLoop.subproj/CFMachPort_Lifetime.h +++ b/Sources/CoreFoundation/include/CFMachPort_Lifetime.h @@ -8,6 +8,8 @@ and dispatch_sources. */ +#include "CoreFoundation_Prefix.h" + #if !defined(__COREFOUNDATION_CFMACHPORT_LIFETIME__) #define __COREFOUNDATION_CFMACHPORT_LIFETIME__ 1 diff --git a/CoreFoundation/RunLoop.subproj/CFMessagePort.h b/Sources/CoreFoundation/include/CFMessagePort.h similarity index 96% rename from CoreFoundation/RunLoop.subproj/CFMessagePort.h rename to Sources/CoreFoundation/include/CFMessagePort.h index 5ec1fc847b..e0615e4615 100644 --- a/CoreFoundation/RunLoop.subproj/CFMessagePort.h +++ b/Sources/CoreFoundation/include/CFMessagePort.h @@ -10,9 +10,9 @@ #if !defined(__COREFOUNDATION_CFMESSAGEPORT__) #define __COREFOUNDATION_CFMESSAGEPORT__ 1 -#include -#include -#include +#include "CFString.h" +#include "CFRunLoop.h" +#include "CFData.h" #include CF_IMPLICIT_BRIDGING_ENABLED diff --git a/CoreFoundation/AppServices.subproj/CFNotificationCenter.h b/Sources/CoreFoundation/include/CFNotificationCenter.h similarity index 98% rename from CoreFoundation/AppServices.subproj/CFNotificationCenter.h rename to Sources/CoreFoundation/include/CFNotificationCenter.h index f26544dc5c..166d58822a 100644 --- a/CoreFoundation/AppServices.subproj/CFNotificationCenter.h +++ b/Sources/CoreFoundation/include/CFNotificationCenter.h @@ -10,8 +10,8 @@ #if !defined(__COREFOUNDATION_CFNOTIFICATIONCENTER__) #define __COREFOUNDATION_CFNOTIFICATIONCENTER__ 1 -#include -#include +#include "CFBase.h" +#include "CFDictionary.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/NumberDate.subproj/CFNumber.h b/Sources/CoreFoundation/include/CFNumber.h similarity index 99% rename from CoreFoundation/NumberDate.subproj/CFNumber.h rename to Sources/CoreFoundation/include/CFNumber.h index 0e0c361c91..851248d3b0 100644 --- a/CoreFoundation/NumberDate.subproj/CFNumber.h +++ b/Sources/CoreFoundation/include/CFNumber.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFNUMBER__) #define __COREFOUNDATION_CFNUMBER__ 1 -#include +#include "CFBase.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Locale.subproj/CFNumberFormatter.h b/Sources/CoreFoundation/include/CFNumberFormatter.h similarity index 98% rename from CoreFoundation/Locale.subproj/CFNumberFormatter.h rename to Sources/CoreFoundation/include/CFNumberFormatter.h index 300064b220..2539c8f179 100644 --- a/CoreFoundation/Locale.subproj/CFNumberFormatter.h +++ b/Sources/CoreFoundation/include/CFNumberFormatter.h @@ -10,9 +10,9 @@ #if !defined(__COREFOUNDATION_CFNUMBERFORMATTER__) #define __COREFOUNDATION_CFNUMBERFORMATTER__ 1 -#include -#include -#include +#include "CFBase.h" +#include "CFNumber.h" +#include "CFLocale.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/NumberDate.subproj/CFNumber_Private.h b/Sources/CoreFoundation/include/CFNumber_Private.h similarity index 95% rename from CoreFoundation/NumberDate.subproj/CFNumber_Private.h rename to Sources/CoreFoundation/include/CFNumber_Private.h index c604bea514..eaff348d94 100644 --- a/CoreFoundation/NumberDate.subproj/CFNumber_Private.h +++ b/Sources/CoreFoundation/include/CFNumber_Private.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFNUMBER_PRIVATE__) #define __COREFOUNDATION_CFNUMBER_PRIVATE__ 1 -#include +#include "CFNumber.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Base.subproj/CFOverflow.h b/Sources/CoreFoundation/include/CFOverflow.h similarity index 98% rename from CoreFoundation/Base.subproj/CFOverflow.h rename to Sources/CoreFoundation/include/CFOverflow.h index d797bf1bcd..800b33174b 100644 --- a/CoreFoundation/Base.subproj/CFOverflow.h +++ b/Sources/CoreFoundation/include/CFOverflow.h @@ -9,8 +9,9 @@ #ifndef CFOverflow_h #define CFOverflow_h +#include "CoreFoundation_Prefix.h" -#include +#include "CFBase.h" #if __has_include() #include diff --git a/CoreFoundation/PlugIn.subproj/CFPlugIn.h b/Sources/CoreFoundation/include/CFPlugIn.h similarity index 95% rename from CoreFoundation/PlugIn.subproj/CFPlugIn.h rename to Sources/CoreFoundation/include/CFPlugIn.h index c20463b59d..633b59bd25 100644 --- a/CoreFoundation/PlugIn.subproj/CFPlugIn.h +++ b/Sources/CoreFoundation/include/CFPlugIn.h @@ -14,12 +14,12 @@ #define COREFOUNDATION_CFPLUGINCOM_SEPARATE 1 #endif -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFArray.h" +#include "CFBundle.h" +#include "CFString.h" +#include "CFURL.h" +#include "CFUUID.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN @@ -117,7 +117,7 @@ CF_EXTERN_C_END CF_IMPLICIT_BRIDGING_DISABLED #if !COREFOUNDATION_CFPLUGINCOM_SEPARATE -#include +#include "CFPlugInCOM.h" #endif /* !COREFOUNDATION_CFPLUGINCOM_SEPARATE */ #endif /* ! __COREFOUNDATION_CFPLUGIN__ */ diff --git a/CoreFoundation/PlugIn.subproj/CFPlugInCOM.h b/Sources/CoreFoundation/include/CFPlugInCOM.h similarity index 99% rename from CoreFoundation/PlugIn.subproj/CFPlugInCOM.h rename to Sources/CoreFoundation/include/CFPlugInCOM.h index 8c796ab83f..0f05af3cca 100644 --- a/CoreFoundation/PlugIn.subproj/CFPlugInCOM.h +++ b/Sources/CoreFoundation/include/CFPlugInCOM.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFPLUGINCOM__) #define __COREFOUNDATION_CFPLUGINCOM__ 1 -#include +#include "CFPlugIn.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/PlugIn.subproj/CFPlugIn_Factory.h b/Sources/CoreFoundation/include/CFPlugIn_Factory.h similarity index 100% rename from CoreFoundation/PlugIn.subproj/CFPlugIn_Factory.h rename to Sources/CoreFoundation/include/CFPlugIn_Factory.h diff --git a/CoreFoundation/Preferences.subproj/CFPreferences.h b/Sources/CoreFoundation/include/CFPreferences.h similarity index 98% rename from CoreFoundation/Preferences.subproj/CFPreferences.h rename to Sources/CoreFoundation/include/CFPreferences.h index 9022da9fec..80d25676a4 100644 --- a/CoreFoundation/Preferences.subproj/CFPreferences.h +++ b/Sources/CoreFoundation/include/CFPreferences.h @@ -10,9 +10,9 @@ #if !defined(__COREFOUNDATION_CFPREFERENCES__) #define __COREFOUNDATION_CFPREFERENCES__ 1 -#include -#include -#include +#include "CFBase.h" +#include "CFArray.h" +#include "CFString.h" CF_IMPLICIT_BRIDGING_ENABLED CF_ASSUME_NONNULL_BEGIN diff --git a/CoreFoundation/Base.subproj/CFPriv.h b/Sources/CoreFoundation/include/CFPriv.h similarity index 98% rename from CoreFoundation/Base.subproj/CFPriv.h rename to Sources/CoreFoundation/include/CFPriv.h index 692a106a99..16492698be 100644 --- a/CoreFoundation/Base.subproj/CFPriv.h +++ b/Sources/CoreFoundation/include/CFPriv.h @@ -17,13 +17,13 @@ #define __COREFOUNDATION_CFPRIV__ 1 #include -#include -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFArray.h" +#include "CFString.h" +#include "CFURL.h" +#include "CFLocale.h" +#include "CFDate.h" +#include "CFSet.h" #include #define CF_CROSS_PLATFORM_EXPORT extern @@ -42,15 +42,15 @@ #if (TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_LINUX)) || TARGET_OS_IPHONE -#include -#include +#include "CFMachPort.h" +#include "CFMessagePort.h" #endif #if !TARGET_OS_WASI -#include -#include +#include "CFRunLoop.h" +#include "CFSocket.h" #endif -#include +#include "CFBundlePriv.h" CF_EXTERN_C_BEGIN @@ -583,7 +583,7 @@ CF_EXPORT CFMutableStringRef _CFCreateApplicationRepositoryPath(CFAllocatorRef a #if (TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_LINUX)) || TARGET_OS_IPHONE -#include +#include "CFMessagePort.h" CF_EXPORT CFMessagePortRef CFMessagePortCreatePerProcessLocal(CFAllocatorRef allocator, CFStringRef name, CFMessagePortCallBack callout, CFMessagePortContext *context, Boolean *shouldFreeInfo); CF_EXPORT CFMessagePortRef CFMessagePortCreatePerProcessRemote(CFAllocatorRef allocator, CFStringRef name, CFIndex pid); @@ -647,7 +647,7 @@ CF_EXPORT CFPropertyListRef _CFBundleCreateFilteredLocalizedInfoPlist(CFBundleRe #endif #if TARGET_OS_WIN32 -#include +#include "CFNotificationCenter.h" CF_EXPORT CFStringRef _CFGetWindowsAppleAppDataDirectory(void); CF_EXPORT CFArrayRef _CFGetWindowsBinaryDirectories(void); diff --git a/CoreFoundation/Parsing.subproj/CFPropertyList.h b/Sources/CoreFoundation/include/CFPropertyList.h similarity index 98% rename from CoreFoundation/Parsing.subproj/CFPropertyList.h rename to Sources/CoreFoundation/include/CFPropertyList.h index 07b32e6b46..2c37e4f1b7 100644 --- a/CoreFoundation/Parsing.subproj/CFPropertyList.h +++ b/Sources/CoreFoundation/include/CFPropertyList.h @@ -10,13 +10,13 @@ #if !defined(__COREFOUNDATION_CFPROPERTYLIST__) #define __COREFOUNDATION_CFPROPERTYLIST__ 1 -#include -#include -#include -#include +#include "CFBase.h" +#include "CFData.h" +#include "CFString.h" +#include "CFError.h" #if !TARGET_OS_WASI -#include +#include "CFStream.h" #endif CF_IMPLICIT_BRIDGING_ENABLED diff --git a/CoreFoundation/Parsing.subproj/CFPropertyList_Internal.h b/Sources/CoreFoundation/include/CFPropertyList_Internal.h similarity index 100% rename from CoreFoundation/Parsing.subproj/CFPropertyList_Internal.h rename to Sources/CoreFoundation/include/CFPropertyList_Internal.h diff --git a/CoreFoundation/Parsing.subproj/CFPropertyList_Private.h b/Sources/CoreFoundation/include/CFPropertyList_Private.h similarity index 94% rename from CoreFoundation/Parsing.subproj/CFPropertyList_Private.h rename to Sources/CoreFoundation/include/CFPropertyList_Private.h index 94bb834ce2..c7315d7fa5 100644 --- a/CoreFoundation/Parsing.subproj/CFPropertyList_Private.h +++ b/Sources/CoreFoundation/include/CFPropertyList_Private.h @@ -7,7 +7,7 @@ See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors */ -#include +#include "CFPropertyList.h" // this is only allowed the first 8 bits typedef CF_OPTIONS(CFOptionFlags, CFPropertyListSupportedFormats) { diff --git a/CoreFoundation/String.subproj/CFRegularExpression.h b/Sources/CoreFoundation/include/CFRegularExpression.h similarity index 97% rename from CoreFoundation/String.subproj/CFRegularExpression.h rename to Sources/CoreFoundation/include/CFRegularExpression.h index 32768f4e9d..49d42be9ae 100644 --- a/CoreFoundation/String.subproj/CFRegularExpression.h +++ b/Sources/CoreFoundation/include/CFRegularExpression.h @@ -14,9 +14,9 @@ #if !defined(__COREFOUNDATION_CFREGULAREXPRESSION__) #define __COREFOUNDATION_CFREGULAREXPRESSION__ 1 -#include -#include -#include +#include "CFBase.h" +#include "CFString.h" +#include "CFError.h" CF_ASSUME_NONNULL_BEGIN CF_IMPLICIT_BRIDGING_ENABLED diff --git a/CoreFoundation/Locale.subproj/CFRelativeDateTimeFormatter.h b/Sources/CoreFoundation/include/CFRelativeDateTimeFormatter.h similarity index 96% rename from CoreFoundation/Locale.subproj/CFRelativeDateTimeFormatter.h rename to Sources/CoreFoundation/include/CFRelativeDateTimeFormatter.h index 2997648663..cd1b6bbe97 100644 --- a/CoreFoundation/Locale.subproj/CFRelativeDateTimeFormatter.h +++ b/Sources/CoreFoundation/include/CFRelativeDateTimeFormatter.h @@ -10,9 +10,9 @@ #ifndef __COREFOUNDATION_CFRELATIVEDATETIMEFORMATTER_h #define __COREFOUNDATION_CFRELATIVEDATETIMEFORMATTER_h -#include -#include -#include +#include "CFBase.h" +#include "CFLocale.h" +#include "CFCalendar.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/String.subproj/CFRunArray.h b/Sources/CoreFoundation/include/CFRunArray.h similarity index 94% rename from CoreFoundation/String.subproj/CFRunArray.h rename to Sources/CoreFoundation/include/CFRunArray.h index 4148116606..6d966cff87 100644 --- a/CoreFoundation/String.subproj/CFRunArray.h +++ b/Sources/CoreFoundation/include/CFRunArray.h @@ -17,9 +17,9 @@ #if !defined(__COREFOUNDATION_CFRUNARRAY__) #define __COREFOUNDATION_CFRUNARRAY__ 1 -#include -#include -#include +#include "CFBase.h" +#include "CFString.h" +#include "CFDictionary.h" #include CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/RunLoop.subproj/CFRunLoop.h b/Sources/CoreFoundation/include/CFRunLoop.h similarity index 98% rename from CoreFoundation/RunLoop.subproj/CFRunLoop.h rename to Sources/CoreFoundation/include/CFRunLoop.h index 9e012c3b6b..3cff673163 100644 --- a/CoreFoundation/RunLoop.subproj/CFRunLoop.h +++ b/Sources/CoreFoundation/include/CFRunLoop.h @@ -10,10 +10,10 @@ #if !defined(__COREFOUNDATION_CFRUNLOOP__) #define __COREFOUNDATION_CFRUNLOOP__ 1 -#include -#include -#include -#include +#include "CFBase.h" +#include "CFArray.h" +#include "CFDate.h" +#include "CFString.h" #if TARGET_OS_OSX || TARGET_OS_IPHONE #include #endif diff --git a/CoreFoundation/Base.subproj/CFRuntime.h b/Sources/CoreFoundation/include/CFRuntime.h similarity index 99% rename from CoreFoundation/Base.subproj/CFRuntime.h rename to Sources/CoreFoundation/include/CFRuntime.h index 13efc68a95..3170424f43 100644 --- a/CoreFoundation/Base.subproj/CFRuntime.h +++ b/Sources/CoreFoundation/include/CFRuntime.h @@ -10,8 +10,8 @@ #if !defined(__COREFOUNDATION_CFRUNTIME__) #define __COREFOUNDATION_CFRUNTIME__ 1 -#include -#include +#include "CFBase.h" +#include "CFDictionary.h" #include #if __has_include() diff --git a/CoreFoundation/Base.subproj/CFRuntime_Internal.h b/Sources/CoreFoundation/include/CFRuntime_Internal.h similarity index 99% rename from CoreFoundation/Base.subproj/CFRuntime_Internal.h rename to Sources/CoreFoundation/include/CFRuntime_Internal.h index d3c4e79e6b..06a5d50de0 100644 --- a/CoreFoundation/Base.subproj/CFRuntime_Internal.h +++ b/Sources/CoreFoundation/include/CFRuntime_Internal.h @@ -9,8 +9,8 @@ #ifndef CFRuntime_Internal_h #define CFRuntime_Internal_h - -#include +#include "CoreFoundation_Prefix.h" +#include "CFRuntime.h" // Note: Platform differences leave us with some holes in the table, but that's ok. diff --git a/CoreFoundation/Collections.subproj/CFSet.h b/Sources/CoreFoundation/include/CFSet.h similarity index 99% rename from CoreFoundation/Collections.subproj/CFSet.h rename to Sources/CoreFoundation/include/CFSet.h index 65e248c209..5400e78af0 100644 --- a/CoreFoundation/Collections.subproj/CFSet.h +++ b/Sources/CoreFoundation/include/CFSet.h @@ -14,7 +14,7 @@ #if !defined(__COREFOUNDATION_CFSET__) #define __COREFOUNDATION_CFSET__ 1 -#include +#include "CFBase.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/RunLoop.subproj/CFSocket.h b/Sources/CoreFoundation/include/CFSocket.h similarity index 99% rename from CoreFoundation/RunLoop.subproj/CFSocket.h rename to Sources/CoreFoundation/include/CFSocket.h index 5ffba978e7..0d5e881480 100644 --- a/CoreFoundation/RunLoop.subproj/CFSocket.h +++ b/Sources/CoreFoundation/include/CFSocket.h @@ -10,8 +10,8 @@ #if !defined(__COREFOUNDATION_CFSOCKET__) #define __COREFOUNDATION_CFSOCKET__ 1 -#include -#include +#include "CFRunLoop.h" +#include "CFData.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Collections.subproj/CFStorage.h b/Sources/CoreFoundation/include/CFStorage.h similarity index 99% rename from CoreFoundation/Collections.subproj/CFStorage.h rename to Sources/CoreFoundation/include/CFStorage.h index a7361b84e4..9bbe4b806f 100644 --- a/CoreFoundation/Collections.subproj/CFStorage.h +++ b/Sources/CoreFoundation/include/CFStorage.h @@ -32,7 +32,7 @@ storage was a single block. #if !defined(__COREFOUNDATION_CFSTORAGE__) #define __COREFOUNDATION_CFSTORAGE__ 1 -#include +#include "CFBase.h" typedef CF_OPTIONS(CFOptionFlags, CFStorageEnumerationOptionFlags) { kCFStorageEnumerationConcurrent = (1UL << 0) /* Allow enumeration to proceed concurrently */ diff --git a/CoreFoundation/Stream.subproj/CFStream.h b/Sources/CoreFoundation/include/CFStream.h similarity index 98% rename from CoreFoundation/Stream.subproj/CFStream.h rename to Sources/CoreFoundation/include/CFStream.h index b3ed237862..baf3e70115 100644 --- a/CoreFoundation/Stream.subproj/CFStream.h +++ b/Sources/CoreFoundation/include/CFStream.h @@ -10,14 +10,16 @@ #if !defined(__COREFOUNDATION_CFSTREAM__) #define __COREFOUNDATION_CFSTREAM__ 1 -#include -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFString.h" +#include "CFDictionary.h" +#include "CFURL.h" +#include "CFRunLoop.h" +#include "CFSocket.h" +#include "CFError.h" +#if __HAS_DISPATCH__ #include +#endif CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN @@ -456,7 +458,7 @@ void CFReadStreamUnscheduleFromRunLoop(CFReadStreamRef _Null_unspecified stream, CF_EXPORT void CFWriteStreamUnscheduleFromRunLoop(CFWriteStreamRef _Null_unspecified stream, CFRunLoopRef _Null_unspecified runLoop, CFRunLoopMode _Null_unspecified runLoopMode); - +#if __HAS_DISPATCH__ /* * Specify the dispatch queue upon which the client callbacks will be invoked. * Passing NULL for the queue will prevent future callbacks from being invoked. @@ -481,6 +483,7 @@ dispatch_queue_t _Null_unspecified CFReadStreamCopyDispatchQueue(CFReadStreamRef CF_EXPORT dispatch_queue_t _Null_unspecified CFWriteStreamCopyDispatchQueue(CFWriteStreamRef _Null_unspecified stream) API_AVAILABLE(macos(10.9), ios(7.0), watchos(2.0), tvos(9.0)); +#endif // __HAS_DISPATCH__ /* The following API is deprecated starting in 10.5; please use CFRead/WriteStreamCopyError(), above, instead */ typedef CF_ENUM(CFIndex, CFStreamErrorDomain) { diff --git a/CoreFoundation/Stream.subproj/CFStreamAbstract.h b/Sources/CoreFoundation/include/CFStreamAbstract.h similarity index 99% rename from CoreFoundation/Stream.subproj/CFStreamAbstract.h rename to Sources/CoreFoundation/include/CFStreamAbstract.h index 458dc401c4..8eefa83a21 100644 --- a/CoreFoundation/Stream.subproj/CFStreamAbstract.h +++ b/Sources/CoreFoundation/include/CFStreamAbstract.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFSTREAMABSTRACT__) #define __COREFOUNDATION_CFSTREAMABSTRACT__ 1 -#include +#include "CFStream.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Stream.subproj/CFStreamInternal.h b/Sources/CoreFoundation/include/CFStreamInternal.h similarity index 95% rename from CoreFoundation/Stream.subproj/CFStreamInternal.h rename to Sources/CoreFoundation/include/CFStreamInternal.h index 6e3a155f48..dfc8464a96 100644 --- a/CoreFoundation/Stream.subproj/CFStreamInternal.h +++ b/Sources/CoreFoundation/include/CFStreamInternal.h @@ -9,11 +9,11 @@ #if !defined(__COREFOUNDATION_CFSTREAMINTERNAL__) #define __COREFOUNDATION_CFSTREAMINTERNAL__ 1 -#include -#include -#include +#include "CFStreamAbstract.h" +#include "CFStreamPriv.h" +#include "CFBase.h" #include "CFInternal.h" -#include +#include "CFRuntime.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Stream.subproj/CFStreamPriv.h b/Sources/CoreFoundation/include/CFStreamPriv.h similarity index 97% rename from CoreFoundation/Stream.subproj/CFStreamPriv.h rename to Sources/CoreFoundation/include/CFStreamPriv.h index f4a24a8846..78763f81ce 100644 --- a/CoreFoundation/Stream.subproj/CFStreamPriv.h +++ b/Sources/CoreFoundation/include/CFStreamPriv.h @@ -10,9 +10,9 @@ #if !defined(__COREFOUNDATION_CFSTREAMPRIV__) #define __COREFOUNDATION_CFSTREAMPRIV__ 1 -#include -#include -#include +#include "CFStream.h" +#include "CFRunLoop.h" +#include "CFRuntime.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/String.subproj/CFString.h b/Sources/CoreFoundation/include/CFString.h similarity index 99% rename from CoreFoundation/String.subproj/CFString.h rename to Sources/CoreFoundation/include/CFString.h index a01462a6a5..ffb616936f 100644 --- a/CoreFoundation/String.subproj/CFString.h +++ b/Sources/CoreFoundation/include/CFString.h @@ -10,12 +10,12 @@ #if !defined(__COREFOUNDATION_CFSTRING__) #define __COREFOUNDATION_CFSTRING__ 1 -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFArray.h" +#include "CFData.h" +#include "CFDictionary.h" +#include "CFCharacterSet.h" +#include "CFLocale.h" #include CF_IMPLICIT_BRIDGING_ENABLED diff --git a/CoreFoundation/String.subproj/CFStringDefaultEncoding.h b/Sources/CoreFoundation/include/CFStringDefaultEncoding.h similarity index 98% rename from CoreFoundation/String.subproj/CFStringDefaultEncoding.h rename to Sources/CoreFoundation/include/CFStringDefaultEncoding.h index 5d1804f451..e47afaa56f 100644 --- a/CoreFoundation/String.subproj/CFStringDefaultEncoding.h +++ b/Sources/CoreFoundation/include/CFStringDefaultEncoding.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFSTRINGDEFAULTENCODING__) #define __COREFOUNDATION_CFSTRINGDEFAULTENCODING__ 1 -#include +#include "CFBase.h" #if TARGET_OS_OSX || TARGET_OS_IPHONE #include diff --git a/CoreFoundation/StringEncodings.subproj/CFStringEncodingConverter.h b/Sources/CoreFoundation/include/CFStringEncodingConverter.h similarity index 99% rename from CoreFoundation/StringEncodings.subproj/CFStringEncodingConverter.h rename to Sources/CoreFoundation/include/CFStringEncodingConverter.h index 2daf3fc185..0447727cb6 100644 --- a/CoreFoundation/StringEncodings.subproj/CFStringEncodingConverter.h +++ b/Sources/CoreFoundation/include/CFStringEncodingConverter.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFSTRINGENCODINGCONVERTER__) #define __COREFOUNDATION_CFSTRINGENCODINGCONVERTER__ 1 -#include +#include "CFString.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/StringEncodings.subproj/CFStringEncodingConverterExt.h b/Sources/CoreFoundation/include/CFStringEncodingConverterExt.h similarity index 99% rename from CoreFoundation/StringEncodings.subproj/CFStringEncodingConverterExt.h rename to Sources/CoreFoundation/include/CFStringEncodingConverterExt.h index c990c3f637..39e279373a 100644 --- a/CoreFoundation/StringEncodings.subproj/CFStringEncodingConverterExt.h +++ b/Sources/CoreFoundation/include/CFStringEncodingConverterExt.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFSTRINGENCODINGCONVERETEREXT__) #define __COREFOUNDATION_CFSTRINGENCODINGCONVERETEREXT__ 1 -#include +#include "CFStringEncodingConverter.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/StringEncodings.subproj/CFStringEncodingConverterPriv.h b/Sources/CoreFoundation/include/CFStringEncodingConverterPriv.h similarity index 98% rename from CoreFoundation/StringEncodings.subproj/CFStringEncodingConverterPriv.h rename to Sources/CoreFoundation/include/CFStringEncodingConverterPriv.h index 2bf3b60dc0..12fadeb20c 100644 --- a/CoreFoundation/StringEncodings.subproj/CFStringEncodingConverterPriv.h +++ b/Sources/CoreFoundation/include/CFStringEncodingConverterPriv.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFSTRINGENCODINGCONVERTERPRIV__) #define __COREFOUNDATION_CFSTRINGENCODINGCONVERTERPRIV__ 1 -#include +#include "CFBase.h" #include "CFStringEncodingConverterExt.h" CF_PRIVATE const CFStringEncodingConverter __CFConverterASCII; diff --git a/CoreFoundation/StringEncodings.subproj/CFStringEncodingDatabase.h b/Sources/CoreFoundation/include/CFStringEncodingDatabase.h similarity index 96% rename from CoreFoundation/StringEncodings.subproj/CFStringEncodingDatabase.h rename to Sources/CoreFoundation/include/CFStringEncodingDatabase.h index d9d8c07f23..3700cd2e52 100644 --- a/CoreFoundation/StringEncodings.subproj/CFStringEncodingDatabase.h +++ b/Sources/CoreFoundation/include/CFStringEncodingDatabase.h @@ -10,7 +10,7 @@ See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors */ -#include +#include "CFString.h" CF_PRIVATE uint16_t __CFStringEncodingGetWindowsCodePage(CFStringEncoding encoding); CF_PRIVATE CFStringEncoding __CFStringEncodingGetFromWindowsCodePage(uint16_t codepage); diff --git a/CoreFoundation/String.subproj/CFStringEncodingExt.h b/Sources/CoreFoundation/include/CFStringEncodingExt.h similarity index 99% rename from CoreFoundation/String.subproj/CFStringEncodingExt.h rename to Sources/CoreFoundation/include/CFStringEncodingExt.h index 7e404fdd47..5fd44aa9ca 100644 --- a/CoreFoundation/String.subproj/CFStringEncodingExt.h +++ b/Sources/CoreFoundation/include/CFStringEncodingExt.h @@ -10,7 +10,7 @@ #if !defined(__COREFOUNDATION_CFSTRINGENCODINGEXT__) #define __COREFOUNDATION_CFSTRINGENCODINGEXT__ 1 -#include +#include "CFBase.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Locale.subproj/CFStringLocalizedFormattingInternal.h b/Sources/CoreFoundation/include/CFStringLocalizedFormattingInternal.h similarity index 80% rename from CoreFoundation/Locale.subproj/CFStringLocalizedFormattingInternal.h rename to Sources/CoreFoundation/include/CFStringLocalizedFormattingInternal.h index 1a90ab659b..db7e4b5f08 100644 --- a/CoreFoundation/Locale.subproj/CFStringLocalizedFormattingInternal.h +++ b/Sources/CoreFoundation/include/CFStringLocalizedFormattingInternal.h @@ -2,9 +2,9 @@ Copyright (c) 2015, Apple Inc. All rights reserved. */ -#include -#include -#include +#include "CFDictionary.h" +#include "CFLocale.h" +#include "CFCharacterSet.h" CF_PRIVATE CFDictionaryRef _CFStringGetLocalizedFormattingInfo(void); CF_PRIVATE CFDictionaryRef _CFStringGetInputIdentifierFormatterMappingFromDescriptor(CFDictionaryRef inputInfo); diff --git a/CoreFoundation/String.subproj/CFString_Internal.h b/Sources/CoreFoundation/include/CFString_Internal.h similarity index 86% rename from CoreFoundation/String.subproj/CFString_Internal.h rename to Sources/CoreFoundation/include/CFString_Internal.h index 3074777e26..8bb2b4e055 100644 --- a/CoreFoundation/String.subproj/CFString_Internal.h +++ b/Sources/CoreFoundation/include/CFString_Internal.h @@ -7,9 +7,9 @@ See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors */ -#include -#include -#include +#include "CFBase.h" +#include "CFString.h" +#include "CFStringEncodingConverterExt.h" #include "CFInternal.h" CF_ASSUME_NONNULL_BEGIN diff --git a/CoreFoundation/String.subproj/CFString_Private.h b/Sources/CoreFoundation/include/CFString_Private.h similarity index 96% rename from CoreFoundation/String.subproj/CFString_Private.h rename to Sources/CoreFoundation/include/CFString_Private.h index 87e1e0ea80..3214c364a4 100644 --- a/CoreFoundation/String.subproj/CFString_Private.h +++ b/Sources/CoreFoundation/include/CFString_Private.h @@ -5,8 +5,8 @@ #if !defined(__COREFOUNDATION_CFSTRING_PRIVATE__) #define __COREFOUNDATION_CFSTRING_PRIVATE__ 1 -#include -#include +#include "CFString.h" +#include "CFBundle.h" CF_ASSUME_NONNULL_BEGIN CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/NumberDate.subproj/CFTimeZone.h b/Sources/CoreFoundation/include/CFTimeZone.h similarity index 90% rename from CoreFoundation/NumberDate.subproj/CFTimeZone.h rename to Sources/CoreFoundation/include/CFTimeZone.h index c3f8b723ca..bafa78bbf1 100644 --- a/CoreFoundation/NumberDate.subproj/CFTimeZone.h +++ b/Sources/CoreFoundation/include/CFTimeZone.h @@ -10,14 +10,14 @@ #if !defined(__COREFOUNDATION_CFTIMEZONE__) #define __COREFOUNDATION_CFTIMEZONE__ 1 -#include -#include -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFArray.h" +#include "CFData.h" +#include "CFDate.h" +#include "CFDictionary.h" +#include "CFString.h" +#include "CFNotificationCenter.h" +#include "CFLocale.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Collections.subproj/CFTree.h b/Sources/CoreFoundation/include/CFTree.h similarity index 99% rename from CoreFoundation/Collections.subproj/CFTree.h rename to Sources/CoreFoundation/include/CFTree.h index 9b0251653b..7d76e34868 100644 --- a/CoreFoundation/Collections.subproj/CFTree.h +++ b/Sources/CoreFoundation/include/CFTree.h @@ -15,7 +15,7 @@ #if !defined(__COREFOUNDATION_CFTREE__) #define __COREFOUNDATION_CFTREE__ 1 -#include +#include "CFBase.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/URL.subproj/CFURL.h b/Sources/CoreFoundation/include/CFURL.h similarity index 99% rename from CoreFoundation/URL.subproj/CFURL.h rename to Sources/CoreFoundation/include/CFURL.h index fb8ca57d4a..0ff668e1ce 100644 --- a/CoreFoundation/URL.subproj/CFURL.h +++ b/Sources/CoreFoundation/include/CFURL.h @@ -10,10 +10,10 @@ #if !defined(__COREFOUNDATION_CFURL__) #define __COREFOUNDATION_CFURL__ 1 -#include -#include -#include -#include +#include "CFBase.h" +#include "CFData.h" +#include "CFError.h" +#include "CFString.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/URL.subproj/CFURL.inc.h b/Sources/CoreFoundation/include/CFURL.inc.h similarity index 100% rename from CoreFoundation/URL.subproj/CFURL.inc.h rename to Sources/CoreFoundation/include/CFURL.inc.h diff --git a/CoreFoundation/URL.subproj/CFURLAccess.h b/Sources/CoreFoundation/include/CFURLAccess.h similarity index 96% rename from CoreFoundation/URL.subproj/CFURLAccess.h rename to Sources/CoreFoundation/include/CFURLAccess.h index fddcefd3fa..64a7c01888 100644 --- a/CoreFoundation/URL.subproj/CFURLAccess.h +++ b/Sources/CoreFoundation/include/CFURLAccess.h @@ -12,13 +12,13 @@ #if !defined(__COREFOUNDATION_CFURLACCESS__) #define __COREFOUNDATION_CFURLACCESS__ 1 -#include -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFArray.h" +#include "CFData.h" +#include "CFDictionary.h" +#include "CFError.h" +#include "CFString.h" +#include "CFURL.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/URL.subproj/CFURLComponents.h b/Sources/CoreFoundation/include/CFURLComponents.h similarity index 98% rename from CoreFoundation/URL.subproj/CFURLComponents.h rename to Sources/CoreFoundation/include/CFURLComponents.h index 17ad816285..bdd5f8b52d 100644 --- a/CoreFoundation/URL.subproj/CFURLComponents.h +++ b/Sources/CoreFoundation/include/CFURLComponents.h @@ -12,10 +12,10 @@ // This file is for the use of NSURLComponents only. -#include -#include -#include -#include +#include "CFBase.h" +#include "CFURL.h" +#include "CFString.h" +#include "CFNumber.h" // For swift-corelibs-foundation: // When SCF is compiled under Darwin, these are IPI, not SPI. diff --git a/CoreFoundation/URL.subproj/CFURLComponents_Internal.h b/Sources/CoreFoundation/include/CFURLComponents_Internal.h similarity index 98% rename from CoreFoundation/URL.subproj/CFURLComponents_Internal.h rename to Sources/CoreFoundation/include/CFURLComponents_Internal.h index e2587bc9cc..3f9e67ba62 100644 --- a/CoreFoundation/URL.subproj/CFURLComponents_Internal.h +++ b/Sources/CoreFoundation/include/CFURLComponents_Internal.h @@ -10,7 +10,7 @@ #ifndef CFURLComponents_Internal_h #define CFURLComponents_Internal_h -#include +#include "CFString.h" // _URIParseInfo keeps track of what parts of a parsed uriReference are // present and the offset of where they start in the uriReference. diff --git a/CoreFoundation/URL.subproj/CFURLPriv.h b/Sources/CoreFoundation/include/CFURLPriv.h similarity index 99% rename from CoreFoundation/URL.subproj/CFURLPriv.h rename to Sources/CoreFoundation/include/CFURLPriv.h index d61acc909b..4e2c004ea4 100644 --- a/CoreFoundation/URL.subproj/CFURLPriv.h +++ b/Sources/CoreFoundation/include/CFURLPriv.h @@ -11,13 +11,13 @@ #if !defined(__COREFOUNDATION_CFURLPRIV__) #define __COREFOUNDATION_CFURLPRIV__ 1 -#include -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFError.h" +#include "CFArray.h" +#include "CFDictionary.h" +#include "CFString.h" +#include "CFURL.h" +#include "CFDate.h" #if TARGET_OS_MAC #include #endif diff --git a/CoreFoundation/URL.subproj/CFURLSessionInterface.h b/Sources/CoreFoundation/include/CFURLSessionInterface.h similarity index 99% rename from CoreFoundation/URL.subproj/CFURLSessionInterface.h rename to Sources/CoreFoundation/include/CFURLSessionInterface.h index d760177041..b0104c33bd 100644 --- a/CoreFoundation/URL.subproj/CFURLSessionInterface.h +++ b/Sources/CoreFoundation/include/CFURLSessionInterface.h @@ -27,7 +27,7 @@ #if !defined(__COREFOUNDATION_URLSESSIONINTERFACE__) #define __COREFOUNDATION_URLSESSIONINTERFACE__ 1 -#include +#include "CoreFoundation.h" #include #if defined(_WIN32) #include diff --git a/CoreFoundation/Base.subproj/CFUUID.h b/Sources/CoreFoundation/include/CFUUID.h similarity index 97% rename from CoreFoundation/Base.subproj/CFUUID.h rename to Sources/CoreFoundation/include/CFUUID.h index 2c41d4a13f..1aec23eca2 100644 --- a/CoreFoundation/Base.subproj/CFUUID.h +++ b/Sources/CoreFoundation/include/CFUUID.h @@ -10,8 +10,8 @@ #if !defined(__COREFOUNDATION_CFUUID__) #define __COREFOUNDATION_CFUUID__ 1 -#include -#include +#include "CFBase.h" +#include "CFString.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/StringEncodings.subproj/CFUniChar.h b/Sources/CoreFoundation/include/CFUniChar.h similarity index 99% rename from CoreFoundation/StringEncodings.subproj/CFUniChar.h rename to Sources/CoreFoundation/include/CFUniChar.h index 7da8d52ce6..9501e0efe7 100644 --- a/CoreFoundation/StringEncodings.subproj/CFUniChar.h +++ b/Sources/CoreFoundation/include/CFUniChar.h @@ -11,8 +11,8 @@ #define __COREFOUNDATION_CFUNICHAR__ 1 -#include -#include +#include "CFByteOrder.h" +#include "CFBase.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/StringEncodings.subproj/CFUniCharPriv.h b/Sources/CoreFoundation/include/CFUniCharPriv.h similarity index 95% rename from CoreFoundation/StringEncodings.subproj/CFUniCharPriv.h rename to Sources/CoreFoundation/include/CFUniCharPriv.h index d22b2279e5..1ea3d0a5cf 100644 --- a/CoreFoundation/StringEncodings.subproj/CFUniCharPriv.h +++ b/Sources/CoreFoundation/include/CFUniCharPriv.h @@ -10,8 +10,8 @@ #if !defined(__COREFOUNDATION_CFUNICHARPRIV__) #define __COREFOUNDATION_CFUNICHARPRIV__ 1 -#include -#include +#include "CFBase.h" +#include "CFUniChar.h" #define kCFUniCharRecursiveDecompositionFlag (1UL << 30) #define kCFUniCharNonBmpFlag (1UL << 31) diff --git a/CoreFoundation/StringEncodings.subproj/CFUnicodeDecomposition.h b/Sources/CoreFoundation/include/CFUnicodeDecomposition.h similarity index 97% rename from CoreFoundation/StringEncodings.subproj/CFUnicodeDecomposition.h rename to Sources/CoreFoundation/include/CFUnicodeDecomposition.h index ebe37e99be..572753260f 100644 --- a/CoreFoundation/StringEncodings.subproj/CFUnicodeDecomposition.h +++ b/Sources/CoreFoundation/include/CFUnicodeDecomposition.h @@ -14,7 +14,7 @@ #if !defined(__COREFOUNDATION_CFUNICODEDECOMPOSITION__) #define __COREFOUNDATION_CFUNICODEDECOMPOSITION__ 1 -#include +#include "CFUniChar.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/StringEncodings.subproj/CFUnicodePrecomposition.h b/Sources/CoreFoundation/include/CFUnicodePrecomposition.h similarity index 95% rename from CoreFoundation/StringEncodings.subproj/CFUnicodePrecomposition.h rename to Sources/CoreFoundation/include/CFUnicodePrecomposition.h index 3fc32c9c43..8c48141df4 100644 --- a/CoreFoundation/StringEncodings.subproj/CFUnicodePrecomposition.h +++ b/Sources/CoreFoundation/include/CFUnicodePrecomposition.h @@ -14,7 +14,7 @@ #if !defined(__COREFOUNDATION_CFUNICODEPRECOMPOSITION__) #define __COREFOUNDATION_CFUNICODEPRECOMPOSITION__ 1 -#include +#include "CFUniChar.h" CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/AppServices.subproj/CFUserNotification.h b/Sources/CoreFoundation/include/CFUserNotification.h similarity index 97% rename from CoreFoundation/AppServices.subproj/CFUserNotification.h rename to Sources/CoreFoundation/include/CFUserNotification.h index a9ab6538a7..155a7b51ae 100644 --- a/CoreFoundation/AppServices.subproj/CFUserNotification.h +++ b/Sources/CoreFoundation/include/CFUserNotification.h @@ -10,12 +10,12 @@ #if !defined(__COREFOUNDATION_CFUSERNOTIFICATION__) #define __COREFOUNDATION_CFUSERNOTIFICATION__ 1 -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFDate.h" +#include "CFDictionary.h" +#include "CFString.h" +#include "CFURL.h" +#include "CFRunLoop.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Base.subproj/CFUtilities.h b/Sources/CoreFoundation/include/CFUtilities.h similarity index 87% rename from CoreFoundation/Base.subproj/CFUtilities.h rename to Sources/CoreFoundation/include/CFUtilities.h index b70f14bacc..03a1a3250f 100644 --- a/CoreFoundation/Base.subproj/CFUtilities.h +++ b/Sources/CoreFoundation/include/CFUtilities.h @@ -10,9 +10,9 @@ #if !defined(__COREFOUNDATION_CFUTILITIES__) #define __COREFOUNDATION_CFUTILITIES__ 1 -#include -#include -#include +#include "CFBase.h" +#include "CFString.h" +#include "CFURL.h" CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN diff --git a/CoreFoundation/Parsing.subproj/CFXMLInterface.h b/Sources/CoreFoundation/include/CFXMLInterface.h similarity index 99% rename from CoreFoundation/Parsing.subproj/CFXMLInterface.h rename to Sources/CoreFoundation/include/CFXMLInterface.h index 8a2fc98bf7..9d95e6ee57 100644 --- a/CoreFoundation/Parsing.subproj/CFXMLInterface.h +++ b/Sources/CoreFoundation/include/CFXMLInterface.h @@ -14,7 +14,7 @@ #if !defined(__COREFOUNDATION_CFXMLINTERFACE__) #define __COREFOUNDATION_CFXMLINTERFACE__ 1 -#include +#include "CoreFoundation.h" #include #include #include diff --git a/CoreFoundation/Base.subproj/SwiftRuntime/CoreFoundation.h b/Sources/CoreFoundation/include/CoreFoundation-SwiftRuntime.h similarity index 52% rename from CoreFoundation/Base.subproj/SwiftRuntime/CoreFoundation.h rename to Sources/CoreFoundation/include/CoreFoundation-SwiftRuntime.h index b373875ac2..c3220c2590 100644 --- a/CoreFoundation/Base.subproj/SwiftRuntime/CoreFoundation.h +++ b/Sources/CoreFoundation/include/CoreFoundation-SwiftRuntime.h @@ -59,48 +59,48 @@ #endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFArray.h" +#include "CFBag.h" +#include "CFBinaryHeap.h" +#include "CFBitVector.h" +#include "CFByteOrder.h" +#include "CFCalendar.h" +#include "CFCharacterSet.h" +#include "CFData.h" +#include "CFDate.h" +#include "CFDateFormatter.h" +#include "CFDictionary.h" +#include "CFError.h" +#include "CFLocale.h" +#include "CFNumber.h" +#include "CFNumberFormatter.h" +#include "CFPropertyList.h" +#include "CFSet.h" +#include "CFString.h" +#include "CFStringEncodingExt.h" +#include "CFTimeZone.h" +#include "CFTree.h" +#include "CFURL.h" +#include "CFURLAccess.h" +#include "CFUUID.h" +#include "CFUtilities.h" #if !TARGET_OS_WASI -#include -#include -#include -#include -#include -#include -#include -#include +#include "CFBundle.h" +#include "CFPlugIn.h" +#include "CFMessagePort.h" +#include "CFPreferences.h" +#include "CFRunLoop.h" +#include "CFStream.h" +#include "CFSocket.h" +#include "CFMachPort.h" #endif -#include -#include +#include "CFAttributedString.h" +#include "CFNotificationCenter.h" -#include +#include "ForSwiftFoundationOnly.h" #endif /* ! __COREFOUNDATION_COREFOUNDATION__ */ diff --git a/Sources/CoreFoundation/include/CoreFoundation.h b/Sources/CoreFoundation/include/CoreFoundation.h new file mode 100644 index 0000000000..d9b28df0dd --- /dev/null +++ b/Sources/CoreFoundation/include/CoreFoundation.h @@ -0,0 +1,100 @@ +/* CoreFoundation.h + Copyright (c) 1998-2019, Apple Inc. and the Swift project authors + + Portions Copyright (c) 2014-2019, Apple Inc. and the Swift project authors + Licensed under Apache License v2.0 with Runtime Library Exception + See http://swift.org/LICENSE.txt for license information + See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +*/ + +#if !defined(__COREFOUNDATION_COREFOUNDATION__) +#define __COREFOUNDATION_COREFOUNDATION__ 1 +#define __COREFOUNDATION__ 1 + +#if !defined(CF_EXCLUDE_CSTD_HEADERS) + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if !defined(__wasi__) +#include +#endif +#include +#include +#include +#include +#include +#include + +#if defined(__STDC_VERSION__) && (199901L <= __STDC_VERSION__) + +#include +#include +#include + +#endif + +#endif + +#include "CFBase.h" +#include "CFArray.h" +#include "CFBag.h" +#include "CFBinaryHeap.h" +#include "CFBitVector.h" +#include "CFByteOrder.h" +#include "CFCalendar.h" +#include "CFCharacterSet.h" +#include "CFData.h" +#include "CFDate.h" +#include "CFDateFormatter.h" +#include "CFDictionary.h" +#include "CFError.h" +#include "CFLocale.h" +#include "CFNumber.h" +#include "CFNumberFormatter.h" +#if !TARGET_OS_WASI +#include "CFPreferences.h" +#endif +#include "CFPropertyList.h" +#include "CFSet.h" +#include "CFString.h" +#include "CFStringEncodingExt.h" +#include "CFTimeZone.h" +#include "CFTree.h" +#include "CFURL.h" +#include "CFURLAccess.h" +#include "CFUUID.h" +#include "CFUtilities.h" +#include "CFBundle.h" + +#if TARGET_OS_OSX || TARGET_OS_IPHONE || TARGET_OS_WIN32 +#include "CFMessagePort.h" +#include "CFPlugIn.h" +#include "CFRunLoop.h" +#include "CFStream.h" +#include "CFSocket.h" +#include "CFMachPort.h" + +#include "CFAttributedString.h" +#include "CFNotificationCenter.h" + +#endif + +#if TARGET_OS_OSX || TARGET_OS_IPHONE +#endif + +#include "CFUserNotification.h" + +#if !DEPLOYMENT_RUNTIME_SWIFT +#include "CFXMLNode.h" +#include "CFXMLParser.h" +#endif + +#endif /* ! __COREFOUNDATION_COREFOUNDATION__ */ + diff --git a/CoreFoundation/Base.subproj/CoreFoundation_Prefix.h b/Sources/CoreFoundation/include/CoreFoundation_Prefix.h similarity index 98% rename from CoreFoundation/Base.subproj/CoreFoundation_Prefix.h rename to Sources/CoreFoundation/include/CoreFoundation_Prefix.h index bf6f203b5f..d8d4202bde 100644 --- a/CoreFoundation/Base.subproj/CoreFoundation_Prefix.h +++ b/Sources/CoreFoundation/include/CoreFoundation_Prefix.h @@ -11,19 +11,15 @@ #define __COREFOUNDATION_PREFIX_H__ 1 #if __has_include() -#include +#include "TargetConditionals.h" #define __TARGETCONDITIONALS__ // Prevent loading the macOS TargetConditionals.h at all. #else #include #endif -#include +#include "CFAvailability.h" -#if TARGET_OS_WASI #define __HAS_DISPATCH__ 0 -#else -#define __HAS_DISPATCH__ 1 -#endif // Darwin may or may not define these macros, but we rely on them for building in Swift; define them privately. #ifndef TARGET_OS_LINUX @@ -60,7 +56,7 @@ #define TARGET_OS_WATCH 0 #endif -#include +#include "CFBase.h" #include diff --git a/CoreFoundation/Base.subproj/ForFoundationOnly.h b/Sources/CoreFoundation/include/ForFoundationOnly.h similarity index 98% rename from CoreFoundation/Base.subproj/ForFoundationOnly.h rename to Sources/CoreFoundation/include/ForFoundationOnly.h index 4084755960..5bb11ccf18 100644 --- a/CoreFoundation/Base.subproj/ForFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForFoundationOnly.h @@ -13,24 +13,24 @@ #if !defined(__COREFOUNDATION_FORFOUNDATIONONLY__) #define __COREFOUNDATION_FORFOUNDATIONONLY__ 1 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFString.h" +#include "CFArray.h" +#include "CFData.h" +#include "CFDictionary.h" +#include "CFSet.h" +#include "CFPriv.h" +#include "CFPropertyList.h" +#include "CFError.h" +#include "CFStringEncodingExt.h" +#include "CFStringEncodingConverterExt.h" +#include "CFNumberFormatter.h" +#include "CFBag.h" +#include "CFCalendar.h" #if !TARGET_OS_WASI -#include -#include +#include "CFStreamPriv.h" +#include "CFRuntime.h" #endif #include #include @@ -105,7 +105,7 @@ CF_EXPORT BOOL _NSIsNSAttributedString(NSISARGTYPE arg); #if !TARGET_OS_WASI #pragma mark - CFBundle -#include +#include "CFBundlePriv.h" #define _CFBundleDefaultStringTableName CFSTR("Localizable") @@ -208,7 +208,7 @@ _CF_EXPORT_SCOPE_END #pragma mark - CFString -#include +#include "CFStringEncodingExt.h" #define NSSTRING_BOUNDSERROR do {\ _CFThrowFormattedException((CFStringRef)NSInvalidArgumentException, CFSTR("%@: Range or index out of bounds"), __CFExceptionProem(self, _cmd));\ diff --git a/CoreFoundation/Base.subproj/ForSwiftFoundationOnly.h b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h similarity index 97% rename from CoreFoundation/Base.subproj/ForSwiftFoundationOnly.h rename to Sources/CoreFoundation/include/ForSwiftFoundationOnly.h index 642151ab34..43f04bf32a 100644 --- a/CoreFoundation/Base.subproj/ForSwiftFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h @@ -15,21 +15,21 @@ #define CF_PRIVATE extern __attribute__((__visibility__("hidden"))) #endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "CFBase.h" +#include "CFNumber.h" +#include "CFLocking.h" +#include "CFLocaleInternal.h" +#include "CFCalendar.h" +#include "CFPriv.h" +#include "CFRegularExpression.h" +#include "CFLogUtilities.h" +#include "CFDateIntervalFormatter.h" +#include "ForFoundationOnly.h" +#include "CFCharacterSetPriv.h" +#include "CFURLPriv.h" +#include "CFURLComponents.h" +#include "CFRunArray.h" +#include "CFDateComponents.h" #if TARGET_OS_WIN32 #define NOMINMAX @@ -49,7 +49,7 @@ #include #endif -#include +#include "CFCalendar_Internal.h" #if __has_include() #include @@ -59,6 +59,10 @@ #include #endif +#if TARGET_OS_LINUX +#include +#endif + #if TARGET_OS_ANDROID #include #include diff --git a/CoreFoundation/Base.subproj/SwiftRuntime/TargetConditionals.h b/Sources/CoreFoundation/include/TargetConditionals.h similarity index 100% rename from CoreFoundation/Base.subproj/SwiftRuntime/TargetConditionals.h rename to Sources/CoreFoundation/include/TargetConditionals.h diff --git a/CoreFoundation/WindowsResources.h b/Sources/CoreFoundation/include/WindowsResources.h similarity index 100% rename from CoreFoundation/WindowsResources.h rename to Sources/CoreFoundation/include/WindowsResources.h diff --git a/Sources/UUID/uuid.h b/Sources/CoreFoundation/include/uuid.h similarity index 100% rename from Sources/UUID/uuid.h rename to Sources/CoreFoundation/include/uuid.h diff --git a/CoreFoundation/Base.subproj/module.map b/Sources/CoreFoundation/module.map similarity index 68% rename from CoreFoundation/Base.subproj/module.map rename to Sources/CoreFoundation/module.map index b057b7a0e0..37965a408e 100644 --- a/CoreFoundation/Base.subproj/module.map +++ b/Sources/CoreFoundation/module.map @@ -1,4 +1,4 @@ -module CoreFoundation [extern_c] [system] { +module CoreFoundationP [extern_c] [system] { umbrella header "CoreFoundation.h" explicit module CFPlugInCOM { header "CFPlugInCOM.h" } } diff --git a/CoreFoundation/Base.subproj/module.modulemap b/Sources/CoreFoundation/module.modulemap similarity index 73% rename from CoreFoundation/Base.subproj/module.modulemap rename to Sources/CoreFoundation/module.modulemap index fe4c0a68aa..28f412e579 100644 --- a/CoreFoundation/Base.subproj/module.modulemap +++ b/Sources/CoreFoundation/module.modulemap @@ -1,4 +1,4 @@ -framework module CoreFoundation [extern_c] [system] { +framework module CoreFoundationP [extern_c] [system] { umbrella header "CoreFoundation.h" explicit module CFPlugInCOM { header "CFPlugInCOM.h" } diff --git a/Sources/BlocksRuntime/runtime.c b/Sources/CoreFoundation/runtime.c similarity index 99% rename from Sources/BlocksRuntime/runtime.c rename to Sources/CoreFoundation/runtime.c index 1b7945b949..8d0003e42a 100644 --- a/Sources/BlocksRuntime/runtime.c +++ b/Sources/CoreFoundation/runtime.c @@ -7,6 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +#include "TargetConditionals.h" #include "Block_private.h" #include #include @@ -268,7 +269,7 @@ void _Block_use_RR( void (*retain)(const void *), break; } #else - _Block_destructInstance = dlsym(RTLD_DEFAULT, "objc_destructInstance"); +// _Block_destructInstance = dlsym(RTLD_DEFAULT, "objc_destructInstance"); #endif } diff --git a/CoreFoundation/Parsing.subproj/static/module.map b/Sources/CoreFoundation/static-cfxml-module.map similarity index 100% rename from CoreFoundation/Parsing.subproj/static/module.map rename to Sources/CoreFoundation/static-cfxml-module.map diff --git a/CoreFoundation/Base.subproj/static/module.map b/Sources/CoreFoundation/static-module.map similarity index 76% rename from CoreFoundation/Base.subproj/static/module.map rename to Sources/CoreFoundation/static-module.map index 8a7ecf4855..e9d1ca26cf 100644 --- a/CoreFoundation/Base.subproj/static/module.map +++ b/Sources/CoreFoundation/static-module.map @@ -1,4 +1,4 @@ -module CoreFoundation [extern_c] [system] { +module CoreFoundationP [extern_c] [system] { umbrella header "CoreFoundation.h" explicit module CFPlugInCOM { header "CFPlugInCOM.h" } diff --git a/CoreFoundation/URL.subproj/module.map b/Sources/CoreFoundation/url-module.map similarity index 100% rename from CoreFoundation/URL.subproj/module.map rename to Sources/CoreFoundation/url-module.map diff --git a/CoreFoundation/URL.subproj/module.modulemap b/Sources/CoreFoundation/url-module.modulemap similarity index 100% rename from CoreFoundation/URL.subproj/module.modulemap rename to Sources/CoreFoundation/url-module.modulemap diff --git a/CoreFoundation/URL.subproj/static/module.map b/Sources/CoreFoundation/url-static-module.map similarity index 100% rename from CoreFoundation/URL.subproj/static/module.map rename to Sources/CoreFoundation/url-static-module.map diff --git a/Sources/UUID/uuid.c b/Sources/CoreFoundation/uuid.c similarity index 100% rename from Sources/UUID/uuid.c rename to Sources/CoreFoundation/uuid.c diff --git a/Sources/UUID/CMakeLists.txt b/Sources/UUID/CMakeLists.txt deleted file mode 100644 index fea52c7396..0000000000 --- a/Sources/UUID/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -add_library(uuid STATIC - uuid.h - uuid.c) -if(CMAKE_SYSTEM_NAME STREQUAL Windows) - target_compile_definitions(uuid PRIVATE - _CRT_NONSTDC_NO_WARNINGS - _CRT_SECURE_NO_DEPRECATE - _CRT_SECURE_NO_WARNINGS) -endif() - -# Add an include directory for the CoreFoundation framework headers to satisfy -# the dependency on TargetConditionals.h -add_dependencies(uuid CoreFoundation) -target_include_directories(uuid PUBLIC - ${CMAKE_BINARY_DIR}/CoreFoundation.framework/Headers) - -if(CMAKE_SYSTEM_NAME STREQUAL Windows) - target_link_libraries(uuid PRIVATE Bcrypt) -endif() -set_target_properties(uuid PROPERTIES - POSITION_INDEPENDENT_CODE YES) - -if(NOT BUILD_SHARED_LIBS) - set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS uuid) - - # get_swift_host_arch(swift_arch) - - # TODO(drexin): should be installed in architecture specific folder, once - # the layout is fixed for non-Darwin platforms - install(TARGETS uuid - ARCHIVE DESTINATION lib/swift_static/$ - LIBRARY DESTINATION lib/swift_static/$ - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) -endif() From 1115c115ab3070e9a269783929d8aef19c1d517f Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 1 Feb 2024 09:28:20 -0800 Subject: [PATCH 004/198] wip --- Package.swift | 7 +- Sources/CoreFoundation/CFBasicHash.c | 24 +- ...FindBucket.m => CFBasicHashFindBucket.inc} | 0 Sources/CoreFoundation/CFMachPort.c | 587 -------- Sources/CoreFoundation/CFMachPort_Lifetime.c | 311 ----- Sources/CoreFoundation/CFMessagePort.c | 1218 ----------------- .../include/CoreFoundation_Prefix.h | 4 + 7 files changed, 20 insertions(+), 2131 deletions(-) rename Sources/CoreFoundation/{CFBasicHashFindBucket.m => CFBasicHashFindBucket.inc} (100%) delete mode 100644 Sources/CoreFoundation/CFMachPort.c delete mode 100644 Sources/CoreFoundation/CFMachPort_Lifetime.c delete mode 100644 Sources/CoreFoundation/CFMessagePort.c diff --git a/Package.swift b/Package.swift index e57b235221..605ed95b1d 100644 --- a/Package.swift +++ b/Package.swift @@ -18,14 +18,15 @@ let buildSettings: [CSetting] = [ .unsafeFlags(["-Wno-int-conversion", "-fconstant-cfstrings", "-fexceptions"]), // .headerSearchPath("libxml2"), .unsafeFlags(["-I/usr/include/libxml2"]), + .unsafeFlags(["-I/usr/lib/swift"]) ] let package = Package( name: "swift-corelibs-foundation", products: [ .library( - name: "CoreFoundationP", - targets: ["CoreFoundationP"]), + name: "CoreFoundationPackage", + targets: ["CoreFoundationPackage"]), ], dependencies: [ .package( @@ -34,7 +35,7 @@ let package = Package( ], targets: [ .target( - name: "CoreFoundationP", + name: "CoreFoundationPackage", dependencies: [ .product(name: "FoundationICU", package: "swift-foundation-icu") ], diff --git a/Sources/CoreFoundation/CFBasicHash.c b/Sources/CoreFoundation/CFBasicHash.c index d026183771..2360c26b7c 100644 --- a/Sources/CoreFoundation/CFBasicHash.c +++ b/Sources/CoreFoundation/CFBasicHash.c @@ -804,73 +804,73 @@ static uintptr_t __CFBasicHashFold(uintptr_t dividend, uint8_t idx) { #define FIND_BUCKET_HASH_STYLE 1 #define FIND_BUCKET_FOR_REHASH 0 #define FIND_BUCKET_FOR_INDIRECT_KEY 0 -#include "CFBasicHashFindBucket.m" +#include "CFBasicHashFindBucket.inc" #define FIND_BUCKET_NAME ___CFBasicHashFindBucket_Linear_NoCollision #define FIND_BUCKET_HASH_STYLE 1 #define FIND_BUCKET_FOR_REHASH 1 #define FIND_BUCKET_FOR_INDIRECT_KEY 0 -#include "CFBasicHashFindBucket.m" +#include "CFBasicHashFindBucket.inc" #define FIND_BUCKET_NAME ___CFBasicHashFindBucket_Linear_Indirect #define FIND_BUCKET_HASH_STYLE 1 #define FIND_BUCKET_FOR_REHASH 0 #define FIND_BUCKET_FOR_INDIRECT_KEY 1 -#include "CFBasicHashFindBucket.m" +#include "CFBasicHashFindBucket.inc" #define FIND_BUCKET_NAME ___CFBasicHashFindBucket_Linear_Indirect_NoCollision #define FIND_BUCKET_HASH_STYLE 1 #define FIND_BUCKET_FOR_REHASH 1 #define FIND_BUCKET_FOR_INDIRECT_KEY 1 -#include "CFBasicHashFindBucket.m" +#include "CFBasicHashFindBucket.inc" #define FIND_BUCKET_NAME ___CFBasicHashFindBucket_Double #define FIND_BUCKET_HASH_STYLE 2 #define FIND_BUCKET_FOR_REHASH 0 #define FIND_BUCKET_FOR_INDIRECT_KEY 0 -#include "CFBasicHashFindBucket.m" +#include "CFBasicHashFindBucket.inc" #define FIND_BUCKET_NAME ___CFBasicHashFindBucket_Double_NoCollision #define FIND_BUCKET_HASH_STYLE 2 #define FIND_BUCKET_FOR_REHASH 1 #define FIND_BUCKET_FOR_INDIRECT_KEY 0 -#include "CFBasicHashFindBucket.m" +#include "CFBasicHashFindBucket.inc" #define FIND_BUCKET_NAME ___CFBasicHashFindBucket_Double_Indirect #define FIND_BUCKET_HASH_STYLE 2 #define FIND_BUCKET_FOR_REHASH 0 #define FIND_BUCKET_FOR_INDIRECT_KEY 1 -#include "CFBasicHashFindBucket.m" +#include "CFBasicHashFindBucket.inc" #define FIND_BUCKET_NAME ___CFBasicHashFindBucket_Double_Indirect_NoCollision #define FIND_BUCKET_HASH_STYLE 2 #define FIND_BUCKET_FOR_REHASH 1 #define FIND_BUCKET_FOR_INDIRECT_KEY 1 -#include "CFBasicHashFindBucket.m" +#include "CFBasicHashFindBucket.inc" #define FIND_BUCKET_NAME ___CFBasicHashFindBucket_Exponential #define FIND_BUCKET_HASH_STYLE 3 #define FIND_BUCKET_FOR_REHASH 0 #define FIND_BUCKET_FOR_INDIRECT_KEY 0 -#include "CFBasicHashFindBucket.m" +#include "CFBasicHashFindBucket.inc" #define FIND_BUCKET_NAME ___CFBasicHashFindBucket_Exponential_NoCollision #define FIND_BUCKET_HASH_STYLE 3 #define FIND_BUCKET_FOR_REHASH 1 #define FIND_BUCKET_FOR_INDIRECT_KEY 0 -#include "CFBasicHashFindBucket.m" +#include "CFBasicHashFindBucket.inc" #define FIND_BUCKET_NAME ___CFBasicHashFindBucket_Exponential_Indirect #define FIND_BUCKET_HASH_STYLE 3 #define FIND_BUCKET_FOR_REHASH 0 #define FIND_BUCKET_FOR_INDIRECT_KEY 1 -#include "CFBasicHashFindBucket.m" +#include "CFBasicHashFindBucket.inc" #define FIND_BUCKET_NAME ___CFBasicHashFindBucket_Exponential_Indirect_NoCollision #define FIND_BUCKET_HASH_STYLE 3 #define FIND_BUCKET_FOR_REHASH 1 #define FIND_BUCKET_FOR_INDIRECT_KEY 1 -#include "CFBasicHashFindBucket.m" +#include "CFBasicHashFindBucket.inc" CF_INLINE CFBasicHashBucket __CFBasicHashFindBucket(CFConstBasicHashRef ht, uintptr_t stack_key) { diff --git a/Sources/CoreFoundation/CFBasicHashFindBucket.m b/Sources/CoreFoundation/CFBasicHashFindBucket.inc similarity index 100% rename from Sources/CoreFoundation/CFBasicHashFindBucket.m rename to Sources/CoreFoundation/CFBasicHashFindBucket.inc diff --git a/Sources/CoreFoundation/CFMachPort.c b/Sources/CoreFoundation/CFMachPort.c deleted file mode 100644 index 718dad20ec..0000000000 --- a/Sources/CoreFoundation/CFMachPort.c +++ /dev/null @@ -1,587 +0,0 @@ -/* CFMachPort.c - Copyright (c) 1998-2019, Apple Inc. and the Swift project authors - - Portions Copyright (c) 2014-2019, Apple Inc. and the Swift project authors - Licensed under Apache License v2.0 with Runtime Library Exception - See http://swift.org/LICENSE.txt for license information - See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors - Responsibility: Michael LeHew -*/ - -#include "CFMachPort.h" -#include "CFRunLoop.h" -#include "CFArray.h" -#include -#if __has_include() -#include -#endif -#include -#include -#include -#include "CFInternal.h" -#include "CFRuntime_Internal.h" -#include "CFMachPort_Lifetime.h" - - -// This queue is used for the cancel/event handler for dead name notification. -static dispatch_queue_t _CFMachPortQueue() { - static volatile dispatch_queue_t __CFMachPortQueue = NULL; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - dispatch_queue_attr_t dqattr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_BACKGROUND, 0); - __CFMachPortQueue = dispatch_queue_create("com.apple.CFMachPort", dqattr); - }); - return __CFMachPortQueue; -} - -enum { - kCFMachPortStateReady = 0, - kCFMachPortStateInvalidating = 1, - kCFMachPortStateInvalid = 2, - kCFMachPortStateDeallocating = 3 -}; - -struct __CFMachPort { - CFRuntimeBase _base; - int32_t _state; - mach_port_t _port; /* immutable */ - dispatch_source_t _dsrc; /* protected by _lock */ - CFMachPortInvalidationCallBack _icallout; /* protected by _lock */ - CFRunLoopSourceRef _source; /* immutable, once created */ - CFMachPortCallBack _callout; /* immutable */ - CFMachPortContext _context; /* immutable */ - CFLock_t _lock; - const void *(*retain)(const void *info); // use these to store the real callbacks - void (*release)(const void *info); -}; - -/* Bit 1 in the base reserved bits is used for has-receive-ref state */ -/* Bit 2 in the base reserved bits is used for has-send-ref state */ - -CF_INLINE Boolean __CFMachPortHasReceive(CFMachPortRef mp) { - return __CFRuntimeGetFlag(mp, 1); -} - -CF_INLINE void __CFMachPortSetHasReceive(CFMachPortRef mp) { - __CFRuntimeSetFlag(mp, 1, true); -} - -CF_INLINE Boolean __CFMachPortHasSend(CFMachPortRef mp) { - return __CFRuntimeGetFlag(mp, 2); -} - -CF_INLINE void __CFMachPortSetHasSend(CFMachPortRef mp) { - __CFRuntimeSetFlag(mp, 2, true); -} - -CF_INLINE Boolean __CFMachPortIsValid(CFMachPortRef mp) { - return kCFMachPortStateReady == mp->_state; -} - - -void _CFMachPortInstallNotifyPort(CFRunLoopRef rl, CFStringRef mode) { -} - -static Boolean __CFMachPortEqual(CFTypeRef cf1, CFTypeRef cf2) { - CFMachPortRef mp1 = (CFMachPortRef)cf1; - CFMachPortRef mp2 = (CFMachPortRef)cf2; - return (mp1->_port == mp2->_port); -} - -static CFHashCode __CFMachPortHash(CFTypeRef cf) { - CFMachPortRef mp = (CFMachPortRef)cf; - return (CFHashCode)mp->_port; -} - -static CFStringRef __CFMachPortCopyDescription(CFTypeRef cf) { - CFMachPortRef mp = (CFMachPortRef)cf; - CFStringRef contextDesc = NULL; - if (NULL != mp->_context.info && NULL != mp->_context.copyDescription) { - contextDesc = mp->_context.copyDescription(mp->_context.info); - } - if (NULL == contextDesc) { - contextDesc = CFStringCreateWithFormat(kCFAllocatorSystemDefault, NULL, CFSTR(""), mp->_context.info); - } - Dl_info info; - void *addr = mp->_callout; - const char *name = (dladdr(addr, &info) && info.dli_saddr == addr && info.dli_sname) ? info.dli_sname : "???"; - CFStringRef result = CFStringCreateWithFormat(kCFAllocatorSystemDefault, NULL, CFSTR("{valid = %s, port = %x, source = %p, callout = %s (%p), context = %@}"), cf, CFGetAllocator(mp), (__CFMachPortIsValid(mp) ? "Yes" : "No"), mp->_port, mp->_source, name, addr, contextDesc); - if (NULL != contextDesc) { - CFRelease(contextDesc); - } - return result; -} - -// Only call with mp->_lock locked -CF_INLINE void __CFMachPortInvalidateLocked(CFRunLoopSourceRef source, CFMachPortRef mp) { - CFMachPortInvalidationCallBack cb = mp->_icallout; - void *const info = mp->_context.info; - void (*const release)(const void *info) = mp->release; - - mp->_context.info = NULL; - if (cb) { - __CFUnlock(&mp->_lock); - cb(mp, info); - __CFLock(&mp->_lock); - } - if (NULL != source) { - __CFUnlock(&mp->_lock); - CFRunLoopSourceInvalidate(source); - CFRelease(source); - __CFLock(&mp->_lock); - } - if (release && info) { - __CFUnlock(&mp->_lock); - release(info); - __CFLock(&mp->_lock); - } - mp->_state = kCFMachPortStateInvalid; -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated" - OSMemoryBarrier(); -#pragma GCC diagnostic pop -} - -static void __CFMachPortDeallocate(CFTypeRef cf) { - CHECK_FOR_FORK_RET(); - CFMachPortRef mp = (CFMachPortRef)cf; - - // CFMachPortRef is invalid before we get here - __CFLock(&mp->_lock); - CFRunLoopSourceRef source = NULL; - Boolean wasReady = (mp->_state == kCFMachPortStateReady); - if (wasReady) { - mp->_state = kCFMachPortStateInvalidating; -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated" - OSMemoryBarrier(); -#pragma GCC diagnostic pop - if (mp->_dsrc) { - dispatch_source_cancel(mp->_dsrc); - mp->_dsrc = NULL; - } - source = mp->_source; - mp->_source = NULL; - } - if (wasReady) { - __CFMachPortInvalidateLocked(source, mp); - } - mp->_state = kCFMachPortStateDeallocating; - - const mach_port_t port = mp->_port; - const Boolean doSend = __CFMachPortHasSend(mp), doReceive = __CFMachPortHasReceive(mp); - __CFUnlock(&mp->_lock); - - _cfmp_record_deallocation(_CFMPLifetimeClientCFMachPort, port, doSend, doReceive); - -} - -// This lock protects __CFAllMachPorts. Take before any instance-specific lock. -static os_unfair_lock __CFAllMachPortsLock = OS_UNFAIR_LOCK_INIT; - -static CFMutableArrayRef __CFAllMachPorts = NULL; - -static Boolean __CFMachPortCheck(mach_port_t) __attribute__((noinline)); -static Boolean __CFMachPortCheck(mach_port_t port) { - mach_port_type_t type = 0; - kern_return_t ret = mach_port_type(mach_task_self(), port, &type); - return (KERN_SUCCESS != ret || (0 == (type & MACH_PORT_TYPE_PORT_RIGHTS))) ? false : true; -} - -// This function exists regardless of platform, but is only declared in headers for legacy clients. -CF_EXPORT CFIndex CFGetRetainCount(CFTypeRef object); - -static void __CFMachPortChecker(void) { - os_unfair_lock_lock(&__CFAllMachPortsLock); // take this lock first before any instance-specific lock - for (CFIndex idx = 0, cnt = __CFAllMachPorts ? CFArrayGetCount(__CFAllMachPorts) : 0; idx < cnt; idx++) { - CFMachPortRef mp = (CFMachPortRef)CFArrayGetValueAtIndex(__CFAllMachPorts, idx); - if (!mp) continue; - // second clause cleans no-longer-wanted CFMachPorts out of our strong table - if (!__CFMachPortCheck(mp->_port) || (1 == CFGetRetainCount(mp))) { - CFRunLoopSourceRef source = NULL; - Boolean wasReady = (mp->_state == kCFMachPortStateReady); - if (wasReady) { - __CFLock(&mp->_lock); // take this lock second - // double check the state under lock, just in case, we should be the last reference per retain count check above... but it doesn't hurt to be robust. - wasReady = (mp->_state == kCFMachPortStateReady); - if (!wasReady) { - __CFUnlock(&mp->_lock); - } - else { - mp->_state = kCFMachPortStateInvalidating; -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated" - OSMemoryBarrier(); -#pragma GCC diagnostic pop - if (mp->_dsrc) { - dispatch_source_cancel(mp->_dsrc); - mp->_dsrc = NULL; - } - source = mp->_source; - mp->_source = NULL; - CFRetain(mp); // matched below: - __CFUnlock(&mp->_lock); - dispatch_async(dispatch_get_main_queue(), ^{ - // We can grab the mach port-specific spin lock here since we're no longer on the same thread as the one taking the all mach ports spin lock. - // But be sure to release it during callouts - __CFLock(&mp->_lock); - __CFMachPortInvalidateLocked(source, mp); - __CFUnlock(&mp->_lock); - CFRelease(mp); // matched above: - }); - } - } - CFArrayRemoveValueAtIndex(__CFAllMachPorts, idx); - idx--; - cnt--; - } - } - os_unfair_lock_unlock(&__CFAllMachPortsLock); -}; - - -const CFRuntimeClass __CFMachPortClass = { - 0, - "CFMachPort", - NULL, // init - NULL, // copy - __CFMachPortDeallocate, - __CFMachPortEqual, - __CFMachPortHash, - NULL, // - __CFMachPortCopyDescription -}; - -CFTypeID CFMachPortGetTypeID(void) { - return _kCFRuntimeIDCFMachPort; -} - -/* Note: any receive or send rights that the port contains coming in will - * not be cleaned up by CFMachPort; it will increment and decrement - * references on the port if the kernel ever allows that in the future, - * but will not cleanup any references you got when you got the port. */ -CFMachPortRef _CFMachPortCreateWithPort2(CFAllocatorRef allocator, mach_port_t port, CFMachPortCallBack callout, CFMachPortContext *context, Boolean *shouldFreeInfo) { - if (shouldFreeInfo) *shouldFreeInfo = true; - CHECK_FOR_FORK_RET(NULL); - - mach_port_type_t type = 0; - kern_return_t ret = mach_port_type(mach_task_self(), port, &type); - if (KERN_SUCCESS != ret || (0 == (type & MACH_PORT_TYPE_PORT_RIGHTS))) { - if (type & ~MACH_PORT_TYPE_DEAD_NAME) { - CFLog(kCFLogLevelError, CFSTR("*** CFMachPortCreateWithPort(): bad Mach port parameter (0x%lx) or unsupported mysterious kind of Mach port (%d, %ld)"), (unsigned long)port, ret, (unsigned long)type); - } - return NULL; - } - - CFMachPortRef mp = NULL; - os_unfair_lock_lock(&__CFAllMachPortsLock); - // First, do a scan for an existing CFMachPortRef for the specified port: - if (__CFAllMachPorts != NULL) { - CFIndex const nPorts = CFArrayGetCount(__CFAllMachPorts); - for (CFIndex idx = 0; idx < nPorts; idx++) { - CFMachPortRef const p = (CFMachPortRef)CFArrayGetValueAtIndex(__CFAllMachPorts, idx); - if (p && p->_port == port) { - CFRetain(p); - mp = p; // mp now has +2 retain count: 1: from set 2: from this local retain - break; - } - } - } - - if (mp) { - // We found a matching port, so we're done with the global lock - os_unfair_lock_unlock(&__CFAllMachPortsLock); - } else { - // We need to create a new CFMachPortRef. - // keep the global lock a bit longer, until we add it to the set of all ports. - CFIndex const size = sizeof(struct __CFMachPort) - sizeof(CFRuntimeBase); - CFMachPortRef const memory = (CFMachPortRef)_CFRuntimeCreateInstance(allocator, CFMachPortGetTypeID(), size, NULL); - if (NULL == memory) { - os_unfair_lock_unlock(&__CFAllMachPortsLock); - return NULL; - } - memory->_port = port; - memory->_callout = callout; - memory->_lock = CFLockInit; - if (NULL != context) { - memmove(&memory->_context, context, sizeof(CFMachPortContext)); - memory->_context.info = context->retain ? (void *)context->retain(context->info) : context->info; - memory->retain = context->retain; - memory->release = context->release; - memory->_context.retain = (void *)0xAAAAAAAAAACCCAAA; - memory->_context.release = (void *)0xAAAAAAAAAABBBAAA; - } - memory->_state = kCFMachPortStateReady; - if (!__CFAllMachPorts) { - // Create the set of all mach ports if it doesn't exist - __CFAllMachPorts = CFArrayCreateMutable(kCFAllocatorSystemDefault, 0, &kCFTypeArrayCallBacks); - } - CFArrayAppendValue(__CFAllMachPorts, memory); - os_unfair_lock_unlock(&__CFAllMachPortsLock); - mp = memory; // NOTE: at this point mp has +2 retain count, 1: from birth 2: from being added to the set - if (shouldFreeInfo) { *shouldFreeInfo = false; } - - if (type & MACH_PORT_TYPE_SEND_RIGHTS) { - _cfmp_record_intent_to_invalidate(_CFMPLifetimeClientCFMachPort, port); - dispatch_source_t theSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_MACH_SEND, port, DISPATCH_MACH_SEND_DEAD, _CFMachPortQueue()); - if (theSource) { - dispatch_source_set_cancel_handler(theSource, ^{ - _cfmp_source_invalidated(_CFMPLifetimeClientCFMachPort, port); - dispatch_release(theSource); - }); - dispatch_source_set_event_handler(theSource, ^{ - _cfmp_source_record_deadness(_CFMPLifetimeClientCFMachPort, port); - __CFMachPortChecker(); - }); - memory->_dsrc = theSource; - dispatch_resume(theSource); - } - } - } - - if (mp && !CFMachPortIsValid(mp)) { // must do this outside lock to avoid deadlock - CFRelease(mp); // NOTE: we release the extra +1 introduced in this function (or birth) so that the only potential refcount left for this frame is from the set of all ports. - mp = NULL; - } - return mp; -} - -CFMachPortRef CFMachPortCreateWithPort(CFAllocatorRef allocator, mach_port_t port, CFMachPortCallBack callout, CFMachPortContext *context, Boolean *shouldFreeInfo) { - return _CFMachPortCreateWithPort2(allocator, port, callout, context, shouldFreeInfo); -} - -CFMachPortRef CFMachPortCreate(CFAllocatorRef allocator, CFMachPortCallBack callout, CFMachPortContext *context, Boolean *shouldFreeInfo) { - if (shouldFreeInfo) *shouldFreeInfo = true; - CHECK_FOR_FORK_RET(NULL); - mach_port_t port = MACH_PORT_NULL; - kern_return_t ret = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &port); - if (KERN_SUCCESS == ret) { - ret = mach_port_insert_right(mach_task_self(), port, port, MACH_MSG_TYPE_MAKE_SEND); - } - if (KERN_SUCCESS != ret) { - if (MACH_PORT_NULL != port) { - // inserting the send right failed, so only decrement the receive - mach_port_mod_refs(mach_task_self(), port, MACH_PORT_RIGHT_RECEIVE, -1); - } - return NULL; - } - CFMachPortRef result = _CFMachPortCreateWithPort2(allocator, port, callout, context, shouldFreeInfo); - if (NULL == result) { - if (MACH_PORT_NULL != port) { - // both receive and send succeeded above so decrement both - mach_port_mod_refs(mach_task_self(), port, MACH_PORT_RIGHT_RECEIVE, -1); - mach_port_deallocate(mach_task_self(), port); - } - return NULL; - } - __CFMachPortSetHasReceive(result); - __CFMachPortSetHasSend(result); - return result; -} - -void CFMachPortInvalidate(CFMachPortRef mp) { - CHECK_FOR_FORK_RET(); - CF_OBJC_FUNCDISPATCHV(CFMachPortGetTypeID(), void, (NSMachPort *)mp, invalidate); - __CFGenericValidateType(mp, CFMachPortGetTypeID()); - CFRetain(mp); // matched below: - CFRunLoopSourceRef source = NULL; - Boolean wasReady = false; - os_unfair_lock_lock(&__CFAllMachPortsLock); // take this lock first - __CFLock(&mp->_lock); - wasReady = (mp->_state == kCFMachPortStateReady); - if (wasReady) { - mp->_state = kCFMachPortStateInvalidating; -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated" - OSMemoryBarrier(); -#pragma GCC diagnostic pop - for (CFIndex idx = 0, cnt = __CFAllMachPorts ? CFArrayGetCount(__CFAllMachPorts) : 0; idx < cnt; idx++) { - CFMachPortRef p = (CFMachPortRef)CFArrayGetValueAtIndex(__CFAllMachPorts, idx); - if (p == mp) { - CFArrayRemoveValueAtIndex(__CFAllMachPorts, idx); - break; - } - } - if (mp->_dsrc) { - dispatch_source_cancel(mp->_dsrc); - mp->_dsrc = NULL; - } - source = mp->_source; - mp->_source = NULL; - } - __CFUnlock(&mp->_lock); - os_unfair_lock_unlock(&__CFAllMachPortsLock); // release this lock last - if (wasReady) { - __CFLock(&mp->_lock); - __CFMachPortInvalidateLocked(source, mp); - __CFUnlock(&mp->_lock); - } - CFRelease(mp); // matched above: -} - -mach_port_t CFMachPortGetPort(CFMachPortRef mp) { - CHECK_FOR_FORK_RET(0); - CF_OBJC_FUNCDISPATCHV(CFMachPortGetTypeID(), mach_port_t, (NSMachPort *)mp, machPort); - __CFGenericValidateType(mp, CFMachPortGetTypeID()); - return mp->_port; -} - -void CFMachPortGetContext(CFMachPortRef mp, CFMachPortContext *context) { - CF_ASSERT_TYPE(_kCFRuntimeIDCFMachPort, mp); - __CFGenericValidateType(mp, CFMachPortGetTypeID()); - CFAssert1(0 == context->version, __kCFLogAssertion, "%s(): context version not initialized to 0", __PRETTY_FUNCTION__); - memmove(context, &mp->_context, sizeof(CFMachPortContext)); -} - -Boolean CFMachPortIsValid(CFMachPortRef mp) { - CF_OBJC_FUNCDISPATCHV(CFMachPortGetTypeID(), Boolean, (NSMachPort *)mp, isValid); - __CFGenericValidateType(mp, CFMachPortGetTypeID()); - if (!__CFMachPortIsValid(mp)) return false; - mach_port_type_t type = 0; - MACH_PORT_TYPE_PORT_RIGHTS; - kern_return_t ret = mach_port_type(mach_task_self(), mp->_port, &type); - if (KERN_SUCCESS != ret || (0 == (type & MACH_PORT_TYPE_PORT_RIGHTS))) { - return false; - } - return true; -} - -CFMachPortInvalidationCallBack CFMachPortGetInvalidationCallBack(CFMachPortRef mp) { - CF_ASSERT_TYPE(_kCFRuntimeIDCFMachPort, mp); - __CFLock(&mp->_lock); - CFMachPortInvalidationCallBack cb = mp->_icallout; - __CFUnlock(&mp->_lock); - return cb; -} - -/* After the CFMachPort has started going invalid, or done invalid, you can't change this, and - we'll only do the callout directly on a transition from NULL to non-NULL. */ -void CFMachPortSetInvalidationCallBack(CFMachPortRef mp, CFMachPortInvalidationCallBack callout) { - CF_ASSERT_TYPE(_kCFRuntimeIDCFMachPort, mp); - CHECK_FOR_FORK_RET(); - if (callout) { - mach_port_type_t type = 0; - kern_return_t ret = mach_port_type(mach_task_self(), mp->_port, &type); - if (KERN_SUCCESS != ret || 0 == (type & MACH_PORT_TYPE_SEND_RIGHTS)) { - CFLog(kCFLogLevelError, CFSTR("*** WARNING: CFMachPortSetInvalidationCallBack() called on a CFMachPort with a Mach port (0x%x) which does not have any send rights. This is not going to work. Callback function: %p"), mp->_port, callout); - } - } - __CFLock(&mp->_lock); - void *const info = mp->_context.info; - if (__CFMachPortIsValid(mp) || !callout) { - mp->_icallout = callout; - } else if (!mp->_icallout && callout) { - __CFUnlock(&mp->_lock); - callout(mp, info); - __CFLock(&mp->_lock); - } else { - CFLog(kCFLogLevelWarning, CFSTR("CFMachPortSetInvalidationCallBack(): attempt to set invalidation callback (%p) on invalid CFMachPort (%p) thwarted"), callout, mp); - } - __CFUnlock(&mp->_lock); -} - -/* Returns the number of messages queued for a receive port. */ -CFIndex CFMachPortGetQueuedMessageCount(CFMachPortRef mp) { - CF_ASSERT_TYPE(_kCFRuntimeIDCFMachPort, mp); - CHECK_FOR_FORK_RET(0); - mach_port_status_t status; - mach_msg_type_number_t num = MACH_PORT_RECEIVE_STATUS_COUNT; - kern_return_t ret = mach_port_get_attributes(mach_task_self(), mp->_port, MACH_PORT_RECEIVE_STATUS, (mach_port_info_t)&status, &num); - return (KERN_SUCCESS != ret) ? 0 : status.mps_msgcount; -} - -static mach_port_t __CFMachPortGetPort(void *info) { - CFMachPortRef mp = (CFMachPortRef)info; - return mp->_port; -} - -CF_PRIVATE void *__CFMachPortPerform(void *msg, CFIndex size, CFAllocatorRef allocator, void *info) { - CHECK_FOR_FORK_RET(NULL); - CFMachPortRef mp = (CFMachPortRef)info; - __CFLock(&mp->_lock); - Boolean isValid = __CFMachPortIsValid(mp); - void *context_info = NULL; - void (*context_release)(const void *) = NULL; - if (isValid) { - if (mp->retain) { - context_info = (void *)mp->retain(mp->_context.info); - context_release = mp->release; - } else { - context_info = mp->_context.info; - } - } - __CFUnlock(&mp->_lock); - if (isValid) { - mp->_callout(mp, msg, size, context_info); - - if (context_release) { - context_release(context_info); - } - if (HAS_FORKED()) { - return NULL; - } - } - return NULL; -} - - - - -CFRunLoopSourceRef CFMachPortCreateRunLoopSource(CFAllocatorRef allocator, CFMachPortRef mp, CFIndex order) { - CF_ASSERT_TYPE(_kCFRuntimeIDCFMachPort, mp); - CHECK_FOR_FORK_RET(NULL); - if (!CFMachPortIsValid(mp)) return NULL; - CFRunLoopSourceRef result = NULL; - __CFLock(&mp->_lock); - if (__CFMachPortIsValid(mp)) { - if (NULL != mp->_source && !CFRunLoopSourceIsValid(mp->_source)) { - CFRelease(mp->_source); - mp->_source = NULL; - } - if (NULL == mp->_source) { - CFRunLoopSourceContext1 context; - context.version = 1; - context.info = (void *)mp; - context.retain = (const void *(*)(const void *))CFRetain; - context.release = (void (*)(const void *))CFRelease; - context.copyDescription = (CFStringRef (*)(const void *))__CFMachPortCopyDescription; - context.equal = (Boolean (*)(const void *, const void *))__CFMachPortEqual; - context.hash = (CFHashCode (*)(const void *))__CFMachPortHash; - context.getPort = __CFMachPortGetPort; - context.perform = __CFMachPortPerform; - mp->_source = CFRunLoopSourceCreate(allocator, order, (CFRunLoopSourceContext *)&context); - } - result = mp->_source ? (CFRunLoopSourceRef)CFRetain(mp->_source) : NULL; - } - __CFUnlock(&mp->_lock); - return result; -} - -void __CFMachMessageCheckForAndDestroyUnsentMessage(kern_return_t const kr, mach_msg_header_t *const msg) { - // Account for the psuedo-receive of the local port described in [39359253] - switch (kr) { - case MACH_SEND_TIMEOUT: // fallthrough - case MACH_SEND_INTERRUPTED: { - mach_port_t const localPort = msg->msgh_local_port; - if (MACH_PORT_VALID(localPort)) { - mach_msg_bits_t const mbits = MACH_MSGH_BITS_LOCAL(msg->msgh_bits); - if (mbits == MACH_MSG_TYPE_MOVE_SEND || mbits == MACH_MSG_TYPE_MOVE_SEND_ONCE) { - mach_port_deallocate(mach_task_self(), localPort); - } - msg->msgh_bits &= ~MACH_MSGH_BITS_LOCAL_MASK; - } - break; - } - default: - break; - } - - // [53512422] It is only reasonable to destroy the msg for the following: - switch (kr) { - case MACH_SEND_TIMEOUT: // fallthrough - case MACH_SEND_INVALID_DEST: - mach_msg_destroy(msg); - default: - break; - } -} diff --git a/Sources/CoreFoundation/CFMachPort_Lifetime.c b/Sources/CoreFoundation/CFMachPort_Lifetime.c deleted file mode 100644 index 3c344decdc..0000000000 --- a/Sources/CoreFoundation/CFMachPort_Lifetime.c +++ /dev/null @@ -1,311 +0,0 @@ -/* - CFMachPort_Lifetime.h - Copyright (c) 1998-2019, Apple Inc. and the Swift project authors - - All of the functions in this file exist to orchestrate the exact time/circumstances we decrement the port references. - */ - -#include "CFMachPort_Lifetime.h" -#include -#include "CFInternal.h" - -// Records information relevant for cleaning up after a given mach port. Here's -// a summary of its life cycle: -// A) _cfmp_deallocation_record created and stored in _cfmp_records -// This means a dispatch source has been created to track dead name for -// the port. -// B) There is no record for a given port in _cfmp_records -// This means either: the dispatch source above has been cancelled, or that -// there was a never a dispatch source in the first place. -// -// For pure CFMachPorts with no Foundation NSPort references, the flags doSend -// and doReceive record the kind of rights a given port should clear up when -// the cancel handler is called. -// -// The reason for this is that the Deallocate of a CFMachPort can happen before -// the cancel handler has been called, and historically the deallocate was the -// where the rights would be decremented. -// -// When NSPort's are involved, we track a few other bits for exactly the same -// reasons. The reason these are tracked separately is out of an abundance of -// caution - by all reads, the two mechanisms do not overlap, but tracking them -// separate is more debugable. -// -typedef struct { - mach_port_t port; // which port (contributes to identity) - uint8_t client; // which subsystem is tracking (contributes to identity) - // should be kept in sync with MAX_CLIENTS constants below - - uint8_t inSet:1; // helps detect invariant violations - - uint8_t deallocated:1; - uint8_t invalidated:1; - - uint8_t doSend:1; - uint8_t doReceive:1; - - // indicates that there is additional invalidation requested by NSMachPort - uint8_t nsportIsInterested:1; - uint8_t nsportDoSend:1; - uint8_t nsportDoReceive:1; -} _cfmp_deallocation_record; - -#define MAX_CLIENTS 256 -#define MAX_CLIENTS_BITS 8 - -#pragma mark - Port Right Modification -CF_INLINE void _cfmp_mod_refs(mach_port_t const port, const Boolean doSend, const Boolean doReceive) { - // NOTE: do receive right first per: https://howto.apple.com/wiki/pages/r853A7H2j/Mach_Ports_and_You.html - if (doReceive) { - mach_port_mod_refs(mach_task_self(), port, MACH_PORT_RIGHT_RECEIVE, -1); - } - if (doSend) { - mach_port_deallocate(mach_task_self(), port); - } -} - -#pragma mark - Logging -CF_BREAKPOINT_FUNCTION(void _CFMachPortDeallocationFailure(void)); -static void _cfmp_log_failure(char const *const msg, _cfmp_deallocation_record *const pr, _CFMPLifetimeClient const client, mach_port_t const port) { - if (pr) { - _cfmp_deallocation_record const R = *pr; - os_log_error(OS_LOG_DEFAULT, "*** %{public}s break on '_CFMachPortDeallocationFailure' to debug: {p:%{private}d c:%d is:%d s:%d,r:%d nsi:%d,nss:%d,nsr:%d - ic:%d,ip:%d}", msg, R.port, R.client, R.inSet, R.invalidated, R.deallocated, R.doSend, R.doReceive, R.nsportIsInterested, R.nsportDoSend, R.nsportDoReceive, client, port); - } else { - os_log_error(OS_LOG_DEFAULT, "*** %{public}s break on '_CFMachPortDeallocationFailure' to debug: {null - ic:%d,ip:%d}", msg, client, port); - } - _CFMachPortDeallocationFailure(); -} - - - -#pragma mark - _cfmp_deallocation_record CFSet Callbacks -// Various CFSet callbacks for _cfmp_deallocation_record -static CFTypeRef _cfmp_deallocation_record_retain(CFAllocatorRef allocator, CFTypeRef const cf) { - _cfmp_deallocation_record *const pr = (_cfmp_deallocation_record *)cf; - if (pr->inSet) { - HALT_MSG("refcnt overflow"); - } - pr->inSet = 1; - return pr; -} -static Boolean _cfmp_equal(void const *const value1, void const *const value2) { - Boolean equal = false; - if (value1 == value2) { - equal = true; - } else if (value1 && value2){ - _cfmp_deallocation_record const R1 = *(_cfmp_deallocation_record *)value1; - _cfmp_deallocation_record const R2 = *(_cfmp_deallocation_record *)value2; - equal = R1.port == R2.port && R1.client == R2.client; - } - return equal; -} -static CFHashCode _cfmp_hash(void const *const value) { - CFHashCode hash = 0; - if (value) { - _cfmp_deallocation_record const R = *(_cfmp_deallocation_record *)value; - hash = _CFHashInt(R.port << MAX_CLIENTS_BITS | R.client); - } - return hash; -} -static void _cfmp_deallocation_record_release(CFAllocatorRef const allocator, void const *const value) { - _cfmp_deallocation_record *pr = (_cfmp_deallocation_record *)value; - if (!pr->inSet) { - _cfmp_log_failure("Freeing a record not in the set", pr, pr->client, pr->port); - } - free(pr); -} -static CFStringRef _cfmp_copy_description(const void *value) { - CFStringRef s = CFSTR("{null}"); - if (value) { - _cfmp_deallocation_record const R = *(_cfmp_deallocation_record *)value; - s = CFStringCreateWithFormat(NULL, NULL, CFSTR("{p:%d c:%d is:%d s:%d,r:%d nsi:%d,nss:%d,nsr:%d}"), R.port, R.client, R.inSet, R.invalidated, R.deallocated, R.doSend, R.doReceive, R.nsportIsInterested, R.nsportDoSend, R.nsportDoReceive); - } - return s; -} - -#pragma mark - Deallocation Records - -// Pending deallocations/invalidations are recorded in the global set returned by _cfmp_records, whose access should be protected by _cfmp_records_lock -static os_unfair_lock _cfmp_records_lock = OS_UNFAIR_LOCK_INIT; -static CFMutableSetRef _cfmp_records(void) { - static CFMutableSetRef oRecords; - static dispatch_once_t oGuard; - dispatch_once(&oGuard, ^{ - CFSetCallBacks const cb = { - .version = 0, - .retain = _cfmp_deallocation_record_retain, - .release = _cfmp_deallocation_record_release, - .copyDescription = _cfmp_copy_description, - .equal = _cfmp_equal, - .hash = _cfmp_hash - }; - oRecords = CFSetCreateMutable(NULL, 16, &cb); - }); - return oRecords; -}; - -CF_INLINE _cfmp_deallocation_record *const _cfmp_find_record_for_port(CFSetRef const records, _CFMPLifetimeClient const client, mach_port_t const port) { - _cfmp_deallocation_record const lookup = {.port = port, .client = client}; - _cfmp_deallocation_record *const pr = (_cfmp_deallocation_record *)CFSetGetValue(records, &lookup); - return pr; -} - -#pragma mark - Lifetime Management -CF_PRIVATE void _cfmp_cleanup(_cfmp_deallocation_record const R) { - _cfmp_mod_refs(R.port, R.doSend, R.doReceive); - if (R.nsportIsInterested) { - _cfmp_mod_refs(R.port, R.nsportDoSend, R.nsportDoReceive); - } -} - -/// Records that a given mach_port has been deallocated. -void _cfmp_record_deallocation(_CFMPLifetimeClient const client, mach_port_t const port, Boolean const doSend, Boolean const doReceive) { - if (port == MACH_PORT_NULL) { return; } - - // now that we know we're not a no-op, look for an existing deallocation record - CFMutableSetRef records = _cfmp_records(); - - Boolean cleanupNow = false; - _cfmp_deallocation_record R = {0}; - - os_unfair_lock_lock(&_cfmp_records_lock); - _cfmp_deallocation_record *const pr = _cfmp_find_record_for_port(records, client, port); - if (pr) { - if (pr->invalidated) { - // it's already been invalidated, so can tidy up now - R = *(_cfmp_deallocation_record *)pr; - CFSetRemoveValue(records, pr); - cleanupNow = true; - } else { - // we're expecting invalidation, record that we want clean up doSend/Receive for later - pr->deallocated = true; - pr->doSend = doSend; - pr->doReceive = doReceive; - } - } else { - R.port = port; - R.doSend = doSend; - R.doReceive = doReceive; - cleanupNow = true; - } - os_unfair_lock_unlock(&_cfmp_records_lock); - - if (cleanupNow) { - _cfmp_cleanup(R); - } -} - -void _cfmp_record_intent_to_invalidate(_CFMPLifetimeClient const client, mach_port_t const port) { - if (port == MACH_PORT_NULL) { return; } - - _cfmp_deallocation_record *pr = calloc(1, sizeof(_cfmp_deallocation_record)); - if (pr == NULL) { - HALT_MSG("Unable to allocate mach_port deallocation record"); - } - pr->port = port; - pr->client = client; - - CFMutableSetRef const records = _cfmp_records(); - os_unfair_lock_lock(&_cfmp_records_lock); - if (CFSetGetValue(records, pr) != NULL) { - // since we calloc before we insert; we check to make sure records doesn't already have an entry for this port - os_unfair_lock_unlock(&_cfmp_records_lock); - free(pr); - } else { - CFSetAddValue(records, pr); - os_unfair_lock_unlock(&_cfmp_records_lock); - } -} - -void _cfmp_source_invalidated(_CFMPLifetimeClient const client, mach_port_t port) { - Boolean cleanupNow = false; - _cfmp_deallocation_record R = {0}; - - CFMutableSetRef const records = _cfmp_records(); - os_unfair_lock_lock(&_cfmp_records_lock); - _cfmp_deallocation_record *pr = _cfmp_find_record_for_port(records, client, port); - if (pr == NULL) { - _cfmp_log_failure("not expecting invalidation", pr, client, port); - } else { - if (pr->deallocated) { - cleanupNow = true; - R = *(_cfmp_deallocation_record *)pr; - CFSetRemoveValue(records, pr); - } else { - pr->invalidated = true; - } - } - os_unfair_lock_unlock(&_cfmp_records_lock); - - if (cleanupNow) { - _cfmp_cleanup(R); - } -} - -// records that we have received a deadname notification for the specified port -void _cfmp_source_record_deadness(_CFMPLifetimeClient const client, mach_port_t const port) { - CFMutableSetRef const records = _cfmp_records(); - os_unfair_lock_lock(&_cfmp_records_lock); - _cfmp_deallocation_record *const pr = _cfmp_find_record_for_port(records, client, port); - if (pr == NULL) { - _cfmp_log_failure("received deadname notification for untracked port", pr, client, port); - } else { - pr->doReceive = 0; - } - os_unfair_lock_unlock(&_cfmp_records_lock); -} - -void _cfmp_record_nsmachport_is_interested(_CFMPLifetimeClient const client, mach_port_t const port) { - if (port == MACH_PORT_NULL) { return; } - - // now that we know we're not a no-op, look for an existing deallocation record - CFMutableSetRef records = _cfmp_records(); - - os_unfair_lock_lock(&_cfmp_records_lock); - _cfmp_deallocation_record *const pr = _cfmp_find_record_for_port(records, client, port); - if (pr) { - // we're expecting invalidation. record that nsport is interested. - pr->nsportIsInterested = true; - } - os_unfair_lock_unlock(&_cfmp_records_lock); -} - -void _cfmp_record_nsmachport_deallocation(_CFMPLifetimeClient const client, mach_port_t const port, Boolean const doSend, Boolean const doReceive) { - if (port == MACH_PORT_NULL) { return; } - if (doSend == false && doReceive == false) { return; } - - CFMutableSetRef records = _cfmp_records(); - - Boolean cleanupNow = false; - _cfmp_deallocation_record R = {0}; - - os_unfair_lock_lock(&_cfmp_records_lock); - _cfmp_deallocation_record *const pr = _cfmp_find_record_for_port(records, client, port); - if (pr == NULL) { - R.port = port; - R.nsportDoSend = doSend; - R.nsportDoReceive = doReceive; - cleanupNow = true; - } else { - // we're expecting invalidation. record that we want to doSend/Receive for nsport later - // but first make sure we were expecting an NSMachPort at all - if (!pr->nsportIsInterested) { - _cfmp_log_failure("setting nsport state - when its not interested", pr, client, port); - } else if (pr->invalidated) { - // it's already been invalidated, so can tidy up now - R = *(_cfmp_deallocation_record *)pr; - CFSetRemoveValue(records, pr); - cleanupNow = true; - } else { - // we're expecting invalidation, record that we want clean up doSend/Receive for later - pr->deallocated = true; - pr->nsportDoSend = doSend; - pr->nsportDoReceive = doReceive; - } - } - os_unfair_lock_unlock(&_cfmp_records_lock); - - if (cleanupNow) { - _cfmp_cleanup(R); - } -} diff --git a/Sources/CoreFoundation/CFMessagePort.c b/Sources/CoreFoundation/CFMessagePort.c deleted file mode 100644 index 22387607b8..0000000000 --- a/Sources/CoreFoundation/CFMessagePort.c +++ /dev/null @@ -1,1218 +0,0 @@ -/* CFMessagePort.c - Copyright (c) 1998-2019, Apple Inc. and the Swift project authors - - Portions Copyright (c) 2014-2019, Apple Inc. and the Swift project authors - Licensed under Apache License v2.0 with Runtime Library Exception - See http://swift.org/LICENSE.txt for license information - See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors - Responsibility: Michael LeHew -*/ - -#include "CFBase.h" -#include "CFMessagePort.h" -#include "CFRunLoop.h" -#include "CFMachPort.h" -#include "CFDictionary.h" -#include "CFByteOrder.h" -#include -#include -#include "CFInternal.h" -#include "CFRuntime_Internal.h" -#include -#include -#include -#include "CFMachPort_Internal.h" -#include "CFMachPort_Lifetime.h" -#include -#include -#include -#if __HAS_DISPATCH__ -#include -#if TARGET_OS_MAC && __has_include() -#include -#endif -#endif - -#if TARGET_OS_MAC -#include -#endif - -extern pid_t getpid(void); - -#define __kCFMessagePortMaxNameLengthMax 255 - -#if defined(BOOTSTRAP_MAX_NAME_LEN) - #define __kCFMessagePortMaxNameLength BOOTSTRAP_MAX_NAME_LEN -#else - #define __kCFMessagePortMaxNameLength 128 -#endif - -#if __kCFMessagePortMaxNameLengthMax < __kCFMessagePortMaxNameLength - #undef __kCFMessagePortMaxNameLength - #define __kCFMessagePortMaxNameLength __kCFMessagePortMaxNameLengthMax -#endif - -#define __CFMessagePortMaxDataSize 0x60000000L - -static os_unfair_lock __CFAllMessagePortsLock = OS_UNFAIR_LOCK_INIT; -static CFMutableDictionaryRef __CFAllLocalMessagePorts = NULL; -static CFMutableDictionaryRef __CFAllRemoteMessagePorts = NULL; - -struct __CFMessagePort { - CFRuntimeBase _base; - CFLock_t _lock; - CFStringRef _name; - CFMachPortRef _port; /* immutable; invalidated */ - CFMutableDictionaryRef _replies; - int32_t _convCounter; - int32_t _perPID; /* zero if not per-pid, else pid */ - CFMachPortRef _replyPort; /* only used by remote port; immutable once created; invalidated */ - CFRunLoopSourceRef _source; /* only used by local port; immutable once created; invalidated */ - dispatch_source_t _dispatchSource; /* only used by local port; invalidated */ - dispatch_queue_t _dispatchQ; /* only used by local port */ - CFMessagePortInvalidationCallBack _icallout; - CFMessagePortCallBack _callout; /* only used by local port; immutable */ - CFMessagePortCallBackEx _calloutEx; /* only used by local port; immutable */ - CFMessagePortContext _context; /* not part of remote port; immutable; invalidated */ -}; - -/* Bit 0 in the base reserved bits is used for invalid state */ -/* Bit 1 of the base reserved bits is used for has-extra-port-refs state */ -/* Bit 2 of the base reserved bits is used for is-remote state */ -/* Bit 3 in the base reserved bits is used for is-deallocing state */ - -CF_INLINE Boolean __CFMessagePortIsValid(CFMessagePortRef ms) { - return __CFRuntimeGetFlag(ms, 0); -} - -CF_INLINE void __CFMessagePortSetValid(CFMessagePortRef ms) { - __CFRuntimeSetFlag(ms, 0, true); -} - -CF_INLINE void __CFMessagePortUnsetValid(CFMessagePortRef ms) { - __CFRuntimeSetFlag(ms, 0, false); -} - -CF_INLINE Boolean __CFMessagePortExtraMachRef(CFMessagePortRef ms) { - return __CFRuntimeGetFlag(ms, 1); -} - -CF_INLINE void __CFMessagePortSetExtraMachRef(CFMessagePortRef ms) { - __CFRuntimeSetFlag(ms, 1, true); -} - -CF_INLINE void __CFMessagePortUnsetExtraMachRef(CFMessagePortRef ms) { - __CFRuntimeSetFlag(ms, 1, false); -} - -CF_INLINE Boolean __CFMessagePortIsRemote(CFMessagePortRef ms) { - return __CFRuntimeGetFlag(ms, 2); -} - -CF_INLINE void __CFMessagePortSetRemote(CFMessagePortRef ms) { - __CFRuntimeSetFlag(ms, 2, true); -} - -CF_INLINE void __CFMessagePortUnsetRemote(CFMessagePortRef ms) { - __CFRuntimeSetFlag(ms, 2, false); -} - -CF_INLINE Boolean __CFMessagePortIsDeallocing(CFMessagePortRef ms) { - return __CFRuntimeGetFlag(ms, 3); -} - -CF_INLINE void __CFMessagePortSetIsDeallocing(CFMessagePortRef ms) { - __CFRuntimeSetFlag(ms, 3, true); -} - -CF_INLINE void __CFMessagePortLock(CFMessagePortRef ms) { - __CFLock(&(ms->_lock)); -} - -CF_INLINE void __CFMessagePortUnlock(CFMessagePortRef ms) { - __CFUnlock(&(ms->_lock)); -} - -// Just a heuristic -#define __CFMessagePortMaxInlineBytes ((int32_t)4000) - -struct __CFMessagePortMachMessage { - mach_msg_base_t base; - mach_msg_ool_descriptor_t ool; - struct innards { - int32_t magic; - int32_t msgid; - int32_t convid; - int32_t byteslen; - uint8_t bytes[0]; - } innards; -}; - -#define CFMP_MSGH_ID_64 0x63666d70 // 'cfmp' -#define CFMP_MSGH_ID_32 0x43464d50 // 'CFMP' -#if TARGET_RT_64_BIT -#define CFMP_MSGH_ID CFMP_MSGH_ID_64 -#else -#define CFMP_MSGH_ID CFMP_MSGH_ID_32 -#endif - -// NOTE: mach_msg_ool_descriptor_t has different sizes based on 32/64-bit for send/receive -#define __INNARD_OFFSET (((!(msgp->header.msgh_bits & MACH_MSGH_BITS_COMPLEX) && ((mach_msg_header_t *)msgp)->msgh_id == CFMP_MSGH_ID_32) || ( (msgp->header.msgh_bits & MACH_MSGH_BITS_COMPLEX) && !TARGET_RT_64_BIT)) ? 40 : 44) - -#define MAGIC 0xF0F2F4F8 - -// These 3 macros should ONLY be used on RECEIVED messages, not ones being constructed on the sending side -#define MSGP_GET(msgp, ident) (((struct __CFMessagePortMachMessage *)msgp)->ident) -#define MSGP_INFO(msgp, ident) ((struct innards *)((void *)msgp + __INNARD_OFFSET))->ident -#define MSGP_SIZE(msgp) (__INNARD_OFFSET + sizeof(struct innards)) - - -static mach_msg_base_t *__CFMessagePortCreateMessage(bool reply, mach_port_t port, mach_port_t replyPort, int32_t convid, int32_t msgid, const uint8_t *bytes, int32_t byteslen) { - if (__CFMessagePortMaxDataSize < byteslen) return NULL; - if (byteslen < -1) return NULL; - int32_t rounded_byteslen = (byteslen < 0) ? 0 : ((byteslen + 7) & ~0x7); - int32_t size = (int32_t)sizeof(struct __CFMessagePortMachMessage) + ((rounded_byteslen <= __CFMessagePortMaxInlineBytes) ? rounded_byteslen : 0); - struct __CFMessagePortMachMessage *msg = CFAllocatorAllocate(kCFAllocatorSystemDefault, size, 0); - if (!msg) return NULL; - memset(msg, 0, size); - msg->base.header.msgh_id = CFMP_MSGH_ID; - msg->base.header.msgh_size = size; - msg->base.header.msgh_remote_port = port; - msg->base.header.msgh_local_port = replyPort; - msg->base.header.msgh_bits = MACH_MSGH_BITS((reply ? MACH_MSG_TYPE_MOVE_SEND_ONCE : MACH_MSG_TYPE_COPY_SEND), (MACH_PORT_NULL != replyPort ? MACH_MSG_TYPE_MAKE_SEND_ONCE : 0)); - msg->base.body.msgh_descriptor_count = 0; - msg->innards.magic = MAGIC; - msg->innards.msgid = CFSwapInt32HostToLittle(msgid); - msg->innards.convid = CFSwapInt32HostToLittle(convid); - msg->innards.byteslen = CFSwapInt32HostToLittle(byteslen); - if (rounded_byteslen <= __CFMessagePortMaxInlineBytes) { - if (NULL != bytes && 0 < byteslen) { - memmove(msg->innards.bytes, bytes, byteslen); - } - } else { - msg->base.header.msgh_bits |= MACH_MSGH_BITS_COMPLEX; - msg->base.body.msgh_descriptor_count = 1; - msg->ool.deallocate = false; - msg->ool.copy = MACH_MSG_VIRTUAL_COPY; - msg->ool.address = (void *)bytes; - msg->ool.size = byteslen; - msg->ool.type = MACH_MSG_OOL_DESCRIPTOR; - } - return (mach_msg_base_t *)msg; -} - -static CFStringRef __CFMessagePortCopyDescription(CFTypeRef cf) { - CFMessagePortRef ms = (CFMessagePortRef)cf; - CFStringRef result; - const char *locked; - CFStringRef contextDesc = NULL; - locked = "Maybe"; - if (__CFMessagePortIsRemote(ms)) { - result = CFStringCreateWithFormat(kCFAllocatorSystemDefault, NULL, CFSTR("{locked = %s, valid = %s, remote = %s, name = %@}"), cf, CFGetAllocator(ms), locked, (__CFMessagePortIsValid(ms) ? "Yes" : "No"), (__CFMessagePortIsRemote(ms) ? "Yes" : "No"), ms->_name); - } else { - if (NULL != ms->_context.info && NULL != ms->_context.copyDescription) { - contextDesc = ms->_context.copyDescription(ms->_context.info); - } - if (NULL == contextDesc) { - contextDesc = CFStringCreateWithFormat(kCFAllocatorSystemDefault, NULL, CFSTR(""), ms->_context.info); - } - void *addr = ms->_callout ? (void *)ms->_callout : (void *)ms->_calloutEx; - Dl_info info; - const char *name = (dladdr(addr, &info) && info.dli_saddr == addr && info.dli_sname) ? info.dli_sname : "???"; - result = CFStringCreateWithFormat(kCFAllocatorSystemDefault, NULL, CFSTR("{locked = %s, valid = %s, remote = %s, name = %@, source = %p, callout = %s (%p), context = %@}"), cf, CFGetAllocator(ms), locked, (__CFMessagePortIsValid(ms) ? "Yes" : "No"), (__CFMessagePortIsRemote(ms) ? "Yes" : "No"), ms->_name, ms->_source, name, addr, (NULL != contextDesc ? contextDesc : CFSTR(""))); - } - if (NULL != contextDesc) { - CFRelease(contextDesc); - } - return result; -} - -static void __CFMessagePortDeallocate(CFTypeRef cf) { - CFMessagePortRef ms = (CFMessagePortRef)cf; - __CFMessagePortSetIsDeallocing(ms); - CFMessagePortInvalidate(ms); - // Delay cleanup of _replies until here so that invalidation during - // SendRequest does not cause _replies to disappear out from under that function. - if (NULL != ms->_replies) { - CFRelease(ms->_replies); - } - if (NULL != ms->_name) { - CFRelease(ms->_name); - } - if (NULL != ms->_port) { - mach_port_t const mp = CFMachPortGetPort(ms->_port); - if (__CFMessagePortExtraMachRef(ms)) { - _cfmp_record_deallocation(_CFMPLifetimeClientCFMessagePort, mp, true /*doSend*/, true /*doReceive*/); - } - CFMachPortInvalidate(ms->_port); - CFRelease(ms->_port); - } - - // A remote message port for a local message port in the same process will get the - // same mach port, and the remote port will keep the mach port from being torn down, - // thus keeping the remote port from getting any sort of death notification and - // auto-invalidating; so we manually implement the 'auto-invalidation' here by - // tickling each remote port to check its state after any message port is destroyed, - // but most importantly after local message ports are destroyed. - os_unfair_lock_lock(&__CFAllMessagePortsLock); - CFMessagePortRef *remotePorts = NULL; - CFIndex cnt = 0; - if (NULL != __CFAllRemoteMessagePorts) { - cnt = CFDictionaryGetCount(__CFAllRemoteMessagePorts); - remotePorts = CFAllocatorAllocate(kCFAllocatorSystemDefault, cnt * sizeof(CFMessagePortRef), 0); - CFDictionaryGetKeysAndValues(__CFAllRemoteMessagePorts, NULL, (const void **)remotePorts); - for (CFIndex idx = 0; idx < cnt; idx++) { - CFRetain(remotePorts[idx]); - } - } - os_unfair_lock_unlock(&__CFAllMessagePortsLock); - if (remotePorts) { - for (CFIndex idx = 0; idx < cnt; idx++) { - // as a side-effect, this will auto-invalidate the CFMessagePort if the CFMachPort is invalid - CFMessagePortIsValid(remotePorts[idx]); - CFRelease(remotePorts[idx]); - } - CFAllocatorDeallocate(kCFAllocatorSystemDefault, remotePorts); - } -} - -const CFRuntimeClass __CFMessagePortClass = { - 0, - "CFMessagePort", - NULL, // init - NULL, // copy - __CFMessagePortDeallocate, - NULL, - NULL, - NULL, // - __CFMessagePortCopyDescription -}; - -CFTypeID CFMessagePortGetTypeID(void) { - return _kCFRuntimeIDCFMessagePort; -} - -static CFStringRef __CFMessagePortCreateSanitizedStringName(CFStringRef name, uint8_t **utfnamep, CFIndex *utfnamelenp) { - uint8_t *utfname; - CFIndex utflen; - CFStringRef result = NULL; - utfname = CFAllocatorAllocate(kCFAllocatorSystemDefault, __kCFMessagePortMaxNameLength + 1, 0); - CFStringGetBytes(name, CFRangeMake(0, CFStringGetLength(name)), kCFStringEncodingUTF8, 0, false, utfname, __kCFMessagePortMaxNameLength, &utflen); - utfname[utflen] = '\0'; - if (strlen((const char *)utfname) != utflen) { - /* PCA 9194709: refuse to sanitize a string with an embedded nul character */ - CFAllocatorDeallocate(kCFAllocatorSystemDefault, utfname); - utfname = NULL; - utfnamelenp = 0; - } else { - /* A new string is created, because the original string may have been - truncated to the max length, and we want the string name to definitely - match the raw UTF-8 chunk that has been created. Also, this is useful - to get a constant string in case the original name string was mutable. */ - result = CFStringCreateWithBytes(kCFAllocatorSystemDefault, utfname, utflen, kCFStringEncodingUTF8, false); - } - if (NULL != utfnamep) { - *utfnamep = utfname; - } else if (NULL != utfname) { - CFAllocatorDeallocate(kCFAllocatorSystemDefault, utfname); - } - if (NULL != utfnamelenp) { - *utfnamelenp = utflen; - } - return result; -} - -static void __CFMessagePortDummyCallback(CFMachPortRef port, void *msg, CFIndex size, void *info) { - // not supposed to be implemented -} - -static void __CFMessagePortInvalidationCallBack(CFMachPortRef port, void *info) { - // info has been setup as the CFMessagePort owning the CFMachPort - if (info) CFMessagePortInvalidate(info); -} - -static CFMessagePortRef __CFMessagePortCreateLocal(CFAllocatorRef allocator, CFStringRef inName, CFMessagePortCallBack callout, CFMessagePortContext *context, Boolean *shouldFreeInfo, Boolean perPID, CFMessagePortCallBackEx calloutEx) { - CFMessagePortRef memory; - uint8_t *utfname = NULL; - - if (shouldFreeInfo) *shouldFreeInfo = true; - - CFStringRef name = NULL; - if (inName != NULL) { - name = __CFMessagePortCreateSanitizedStringName(inName, &utfname, NULL); - } - - os_unfair_lock_lock(&__CFAllMessagePortsLock); - if (!perPID && NULL != name) { - CFMessagePortRef existing; - if (NULL != __CFAllLocalMessagePorts && CFDictionaryGetValueIfPresent(__CFAllLocalMessagePorts, name, (const void **)&existing)) { - CFRetain(existing); - os_unfair_lock_unlock(&__CFAllMessagePortsLock); - CFRelease(name); - CFAllocatorDeallocate(kCFAllocatorSystemDefault, utfname); - if (!CFMessagePortIsValid(existing)) { // must do this outside lock to avoid deadlock - CFRelease(existing); - existing = NULL; - } - return (CFMessagePortRef)(existing); - } - } - os_unfair_lock_unlock(&__CFAllMessagePortsLock); - CFIndex size = sizeof(struct __CFMessagePort) - sizeof(CFRuntimeBase); - memory = (CFMessagePortRef)_CFRuntimeCreateInstance(allocator, CFMessagePortGetTypeID(), size, NULL); - if (NULL == memory) { - if (NULL != name) { - CFRelease(name); - } - CFAllocatorDeallocate(kCFAllocatorSystemDefault, utfname); - return NULL; - } - __CFMessagePortUnsetValid(memory); - __CFMessagePortUnsetExtraMachRef(memory); - __CFMessagePortUnsetRemote(memory); - memory->_lock = CFLockInit; - memory->_name = name; - if (perPID) { - memory->_perPID = getpid(); // actual value not terribly useful for local ports - } - memory->_callout = callout; - memory->_calloutEx = calloutEx; - - // sadly this is mostly a repeat of SetName function below sans locks... - if (NULL != name) { - CFMachPortRef native = NULL; - kern_return_t ret; - mach_port_t mp; - if (!perPID) { - } - if (!native) { - CFMachPortContext ctx = {0, memory, NULL, NULL, NULL}; - native = CFMachPortCreate(allocator, __CFMessagePortDummyCallback, &ctx, NULL); - if (!native) { - CFAllocatorDeallocate(kCFAllocatorSystemDefault, utfname); - // name is released by deallocation - CFRelease(memory); - return NULL; - } - mp = CFMachPortGetPort(native); - } - CFMachPortSetInvalidationCallBack(native, __CFMessagePortInvalidationCallBack); - memory->_port = native; - } - - CFAllocatorDeallocate(kCFAllocatorSystemDefault, utfname); - __CFMessagePortSetValid(memory); - if (NULL != context) { - memmove(&memory->_context, context, sizeof(CFMessagePortContext)); - memory->_context.info = context->retain ? (void *)context->retain(context->info) : context->info; - } - os_unfair_lock_lock(&__CFAllMessagePortsLock); - if (!perPID && NULL != name) { - CFMessagePortRef existing; - if (NULL != __CFAllLocalMessagePorts && CFDictionaryGetValueIfPresent(__CFAllLocalMessagePorts, name, (const void **)&existing)) { - CFRetain(existing); - os_unfair_lock_unlock(&__CFAllMessagePortsLock); - CFRelease(memory); - return (CFMessagePortRef)(existing); - } - if (NULL == __CFAllLocalMessagePorts) { - __CFAllLocalMessagePorts = CFDictionaryCreateMutable(kCFAllocatorSystemDefault, 0, &kCFTypeDictionaryKeyCallBacks, NULL); - } - CFDictionaryAddValue(__CFAllLocalMessagePorts, name, memory); - } - os_unfair_lock_unlock(&__CFAllMessagePortsLock); - if (shouldFreeInfo) *shouldFreeInfo = false; - return memory; -} - -CFMessagePortRef CFMessagePortCreateLocal(CFAllocatorRef allocator, CFStringRef name, CFMessagePortCallBack callout, CFMessagePortContext *context, Boolean *shouldFreeInfo) { - return __CFMessagePortCreateLocal(allocator, name, callout, context, shouldFreeInfo, false, NULL); -} - -CFMessagePortRef CFMessagePortCreatePerProcessLocal(CFAllocatorRef allocator, CFStringRef name, CFMessagePortCallBack callout, CFMessagePortContext *context, Boolean *shouldFreeInfo) { - return __CFMessagePortCreateLocal(allocator, name, callout, context, shouldFreeInfo, true, NULL); -} - -CFMessagePortRef _CFMessagePortCreateLocalEx(CFAllocatorRef allocator, CFStringRef name, Boolean perPID, uintptr_t unused, CFMessagePortCallBackEx calloutEx, CFMessagePortContext *context, Boolean *shouldFreeInfo) { - return __CFMessagePortCreateLocal(allocator, name, NULL, context, shouldFreeInfo, perPID, calloutEx); -} - -static CFMessagePortRef __CFMessagePortCreateRemote(CFAllocatorRef allocator, CFStringRef inName, Boolean perPID, CFIndex pid) { - CFMessagePortRef memory; - CFMachPortRef native; - CFMachPortContext ctx; - uint8_t *utfname = NULL; - CFIndex size; - mach_port_t port = MACH_PORT_NULL; - - CFStringRef const name = __CFMessagePortCreateSanitizedStringName(inName, &utfname, NULL); - if (NULL == name) { - return NULL; - } - os_unfair_lock_lock(&__CFAllMessagePortsLock); - if (!perPID && NULL != name) { - CFMessagePortRef existing; - if (NULL != __CFAllRemoteMessagePorts && CFDictionaryGetValueIfPresent(__CFAllRemoteMessagePorts, name, (const void **)&existing)) { - CFRetain(existing); - os_unfair_lock_unlock(&__CFAllMessagePortsLock); - CFRelease(name); - CFAllocatorDeallocate(kCFAllocatorSystemDefault, utfname); - if (!CFMessagePortIsValid(existing)) { // must do this outside lock to avoid deadlock - CFRelease(existing); - existing = NULL; - } - return (CFMessagePortRef)(existing); - } - } - os_unfair_lock_unlock(&__CFAllMessagePortsLock); - size = sizeof(struct __CFMessagePort) - sizeof(CFMessagePortContext) - sizeof(CFRuntimeBase); - memory = (CFMessagePortRef)_CFRuntimeCreateInstance(allocator, CFMessagePortGetTypeID(), size, NULL); - if (NULL == memory) { - if (NULL != name) { - CFRelease(name); - } - CFAllocatorDeallocate(kCFAllocatorSystemDefault, utfname); - return NULL; - } - __CFMessagePortUnsetValid(memory); - __CFMessagePortUnsetExtraMachRef(memory); - __CFMessagePortSetRemote(memory); - memory->_lock = CFLockInit; - memory->_name = name; - memory->_replies = CFDictionaryCreateMutable(kCFAllocatorSystemDefault, 0, NULL, &kCFTypeDictionaryValueCallBacks); - if (perPID) { - memory->_perPID = pid; - } - ctx.version = 0; - ctx.info = memory; - ctx.retain = NULL; - ctx.release = NULL; - ctx.copyDescription = NULL; - native = CFMachPortCreateWithPort(allocator, port, __CFMessagePortDummyCallback, &ctx, NULL); - CFAllocatorDeallocate(kCFAllocatorSystemDefault, utfname); - if (NULL == native) { - // name is released by deallocation - CFRelease(memory); - return NULL; - } - memory->_port = native; - __CFMessagePortSetValid(memory); - os_unfair_lock_lock(&__CFAllMessagePortsLock); - if (!perPID && NULL != name) { - CFMessagePortRef existing; - if (NULL != __CFAllRemoteMessagePorts && CFDictionaryGetValueIfPresent(__CFAllRemoteMessagePorts, name, (const void **)&existing)) { - CFRetain(existing); - os_unfair_lock_unlock(&__CFAllMessagePortsLock); - CFRelease(memory); - return (CFMessagePortRef)(existing); - } - if (NULL == __CFAllRemoteMessagePorts) { - __CFAllRemoteMessagePorts = CFDictionaryCreateMutable(kCFAllocatorSystemDefault, 0, &kCFTypeDictionaryKeyCallBacks, NULL); - } - CFDictionaryAddValue(__CFAllRemoteMessagePorts, name, memory); - } - CFRetain(native); - os_unfair_lock_unlock(&__CFAllMessagePortsLock); - CFMachPortSetInvalidationCallBack(native, __CFMessagePortInvalidationCallBack); - // that set-invalidation-callback might have called back into us - // if the CFMachPort is already bad, but that was a no-op since - // there was no callback setup at the (previous) time the CFMachPort - // went invalid; so check for validity manually and react - if (!CFMachPortIsValid(native)) { - CFRelease(memory); // does the invalidate - CFRelease(native); - return NULL; - } - CFRelease(native); - return (CFMessagePortRef)memory; -} - -CFMessagePortRef CFMessagePortCreateRemote(CFAllocatorRef allocator, CFStringRef name) { - return __CFMessagePortCreateRemote(allocator, name, false, 0); -} - -CFMessagePortRef CFMessagePortCreatePerProcessRemote(CFAllocatorRef allocator, CFStringRef name, CFIndex pid) { - return __CFMessagePortCreateRemote(allocator, name, true, pid); -} - -Boolean CFMessagePortIsRemote(CFMessagePortRef ms) { - CF_ASSERT_TYPE(_kCFRuntimeIDCFMessagePort, ms); - return __CFMessagePortIsRemote(ms); -} - -CFStringRef CFMessagePortGetName(CFMessagePortRef ms) { - CF_ASSERT_TYPE(_kCFRuntimeIDCFMessagePort, ms); - return ms->_name; -} - -Boolean CFMessagePortSetName(CFMessagePortRef ms, CFStringRef inName) { - CF_ASSERT_TYPE(_kCFRuntimeIDCFMessagePort, ms); - CFAllocatorRef allocator = CFGetAllocator(ms); - uint8_t *utfname = NULL; - - if (ms->_perPID || __CFMessagePortIsRemote(ms)) return false; - CFStringRef const name = __CFMessagePortCreateSanitizedStringName(inName, &utfname, NULL); - if (NULL == name) { - return false; - } - - os_unfair_lock_lock(&__CFAllMessagePortsLock); - if (NULL != name) { - CFMessagePortRef existing; - if (NULL != __CFAllLocalMessagePorts && CFDictionaryGetValueIfPresent(__CFAllLocalMessagePorts, name, (const void **)&existing)) { - os_unfair_lock_unlock(&__CFAllMessagePortsLock); - CFRelease(name); - CFAllocatorDeallocate(kCFAllocatorSystemDefault, utfname); - return false; - } - } - os_unfair_lock_unlock(&__CFAllMessagePortsLock); - - - __CFMessagePortLock(ms); - if (ms->_dispatchSource) { - CFLog(kCFLogLevelDebug, CFSTR("*** CFMessagePort: Unable to SetName on CFMessagePort %p as it already has a dispatch queue associated with itself."), ms); - __CFMessagePortUnlock(ms); - CFRelease(name); - CFAllocatorDeallocate(kCFAllocatorSystemDefault, utfname); - return false; - } - - - if (NULL != name && (NULL == ms->_name || !CFEqual(ms->_name, name))) { - CFMachPortRef oldPort = ms->_port; - Boolean const previousNameHadExtraRef = ms->_name != NULL && __CFMessagePortExtraMachRef(ms); - CFMachPortRef native = NULL; - kern_return_t ret; - mach_port_t bs, mp; - task_get_bootstrap_port(mach_task_self(), &bs); - - // NOTE: bootstrap_check_in always yields +1 receive-right - ret = bootstrap_check_in(bs, (char *)utfname, &mp); /* If we're started by launchd or the old mach_init */ - - if (ret == KERN_SUCCESS) { - ret = mach_port_insert_right(mach_task_self(), mp, mp, MACH_MSG_TYPE_MAKE_SEND); - if (KERN_SUCCESS == ret) { - CFMachPortContext ctx = {0, ms, NULL, NULL, NULL}; - native = CFMachPortCreateWithPort(allocator, mp, __CFMessagePortDummyCallback, &ctx, NULL); - // at this point we have +1 SEND, +1 RECV, so we record that fact - __CFMessagePortSetExtraMachRef(ms); - } else { - __CFMessagePortUnlock(ms); - // balance the +1 receive-right we got from bootstrap_check_in - mach_port_mod_refs(mach_task_self(), mp, MACH_PORT_RIGHT_RECEIVE, -1); - - // the insert failed, so we don't need to decrement send right here - CFAllocatorDeallocate(kCFAllocatorSystemDefault, utfname); - CFRelease(name); - return false; - } - } - - if (!native) { - CFMachPortContext ctx = {0, ms, NULL, NULL, NULL}; - native = CFMachPortCreate(allocator, __CFMessagePortDummyCallback, &ctx, NULL); - if (!native) { - __CFMessagePortUnlock(ms); - CFAllocatorDeallocate(kCFAllocatorSystemDefault, utfname); - CFRelease(name); - return false; - } - mp = CFMachPortGetPort(native); - } - CFMachPortSetInvalidationCallBack(native, __CFMessagePortInvalidationCallBack); - ms->_port = native; - if (NULL != oldPort && oldPort != native) { - if (previousNameHadExtraRef) { - // this code is known to be incorrect when ms->_dispatchSource is non-null, we prevent this above, but just to be sure we're not about to do something bad we assert - assert(ms->_dispatchSource == NULL); - - // this is one of the reasons we are deprecating this API - mach_port_t const oldmp = CFMachPortGetPort(oldPort); - mach_port_mod_refs(mach_task_self(), oldmp, MACH_PORT_RIGHT_RECEIVE, -1); - mach_port_deallocate(mach_task_self(), oldmp); - } - CFMachPortInvalidate(oldPort); - CFRelease(oldPort); - } - os_unfair_lock_lock(&__CFAllMessagePortsLock); - // This relocking without checking to see if something else has grabbed - // that name in the cache is rather suspect, but what would that even - // mean has happened? We'd expect the bootstrap_* calls above to have - // failed for this one and not gotten this far, or failed for all of the - // other simultaneous attempts to get the name (and having succeeded for - // this one, gotten here). So we're not going to try very hard here - // with the thread-safety. - if (NULL == __CFAllLocalMessagePorts) { - __CFAllLocalMessagePorts = CFDictionaryCreateMutable(kCFAllocatorSystemDefault, 0, &kCFTypeDictionaryKeyCallBacks, NULL); - } - if (NULL != ms->_name) { - CFDictionaryRemoveValue(__CFAllLocalMessagePorts, ms->_name); - CFRelease(ms->_name); - } - ms->_name = name; // consumes the +1 from sanitize above - CFDictionaryAddValue(__CFAllLocalMessagePorts, name, ms); - os_unfair_lock_unlock(&__CFAllMessagePortsLock); - } - else if (name) { - // if setting the same name on the message port, then avoid leak - CFRelease(name); - } - __CFMessagePortUnlock(ms); - CFAllocatorDeallocate(kCFAllocatorSystemDefault, utfname); - return true; -} - -void CFMessagePortGetContext(CFMessagePortRef ms, CFMessagePortContext *context) { - CF_ASSERT_TYPE(_kCFRuntimeIDCFMessagePort, ms); -//#warning CF: assert that this is a local port - CFAssert1(0 == context->version, __kCFLogAssertion, "%s(): context version not initialized to 0", __PRETTY_FUNCTION__); - memmove(context, &ms->_context, sizeof(CFMessagePortContext)); -} - -void CFMessagePortInvalidate(CFMessagePortRef ms) { - CF_ASSERT_TYPE_OR_NULL(_kCFRuntimeIDCFMessagePort, ms); - if (ms == NULL) { - return; - } - if (!__CFMessagePortIsDeallocing(ms)) { - CFRetain(ms); - } - __CFMessagePortLock(ms); - if (__CFMessagePortIsValid(ms)) { - if (ms->_dispatchSource) { - dispatch_source_cancel(ms->_dispatchSource); - ms->_dispatchSource = NULL; - ms->_dispatchQ = NULL; - } - - CFMessagePortInvalidationCallBack callout = ms->_icallout; - CFRunLoopSourceRef source = ms->_source; - CFMachPortRef replyPort = ms->_replyPort; - CFMachPortRef port = ms->_port; - CFStringRef name = ms->_name; - void *info = NULL; - - __CFMessagePortUnsetValid(ms); - if (!__CFMessagePortIsRemote(ms)) { - info = ms->_context.info; - ms->_context.info = NULL; - } - ms->_source = NULL; - ms->_replyPort = NULL; - ms->_port = NULL; - __CFMessagePortUnlock(ms); - - os_unfair_lock_lock(&__CFAllMessagePortsLock); - if (0 == ms->_perPID && NULL != name && NULL != (__CFMessagePortIsRemote(ms) ? __CFAllRemoteMessagePorts : __CFAllLocalMessagePorts)) { - CFDictionaryRemoveValue(__CFMessagePortIsRemote(ms) ? __CFAllRemoteMessagePorts : __CFAllLocalMessagePorts, name); - } - os_unfair_lock_unlock(&__CFAllMessagePortsLock); - if (NULL != callout) { - callout(ms, info); - } - if (!__CFMessagePortIsRemote(ms) && NULL != ms->_context.release) { - ms->_context.release(info); - } - if (NULL != source) { - CFRunLoopSourceInvalidate(source); - CFRelease(source); - } - if (NULL != replyPort) { - CFMachPortInvalidate(replyPort); - CFRelease(replyPort); - } - - if (NULL != port) { - mach_port_t const mp = CFMachPortGetPort(port); - if (__CFMessagePortIsRemote(ms)) { - _cfmp_record_deallocation(_CFMPLifetimeClientCFMessagePort, mp, true /*doSend*/, false /*doReceive*/); - } - // We already know we're going invalid, don't need this callback - // anymore; plus, this solves a reentrancy deadlock; also, this - // must be done before the deallocate of the Mach port, to - // avoid a race between the notification message which could be - // handled in another thread, and this NULL'ing out. - CFMachPortSetInvalidationCallBack(port, NULL); - if (__CFMessagePortExtraMachRef(ms)) { - _cfmp_record_deallocation(_CFMPLifetimeClientCFMessagePort, mp, true /*doSend*/, true /*doReceive*/); - } - CFMachPortInvalidate(port); - CFRelease(port); - } - } else { - __CFMessagePortUnlock(ms); - } - if (!__CFMessagePortIsDeallocing(ms)) { - CFRelease(ms); - } -} - -Boolean CFMessagePortIsValid(CFMessagePortRef ms) { - CF_ASSERT_TYPE(_kCFRuntimeIDCFMessagePort, ms); - if (!__CFMessagePortIsValid(ms)) return false; - CFRetain(ms); - if (NULL != ms->_port && !CFMachPortIsValid(ms->_port)) { - CFMessagePortInvalidate(ms); - CFRelease(ms); - return false; - } - if (NULL != ms->_replyPort && !CFMachPortIsValid(ms->_replyPort)) { - CFMessagePortInvalidate(ms); - CFRelease(ms); - return false; - } - CFRelease(ms); - return true; -} - -CFMessagePortInvalidationCallBack CFMessagePortGetInvalidationCallBack(CFMessagePortRef ms) { - CF_ASSERT_TYPE(_kCFRuntimeIDCFMessagePort, ms); - return ms->_icallout; -} - -void CFMessagePortSetInvalidationCallBack(CFMessagePortRef ms, CFMessagePortInvalidationCallBack callout) { - CF_ASSERT_TYPE(_kCFRuntimeIDCFMessagePort, ms); - if (!__CFMessagePortIsValid(ms) && NULL != callout) { - callout(ms, ms->_context.info); - } else { - ms->_icallout = callout; - } -} - -static void __CFMessagePortReplyCallBack(CFMachPortRef port, void *msg, CFIndex size, void *info) { - CFMessagePortRef ms = info; - mach_msg_base_t *msgp = msg; - mach_msg_base_t *replymsg; - __CFMessagePortLock(ms); - if (!__CFMessagePortIsValid(ms)) { - __CFMessagePortUnlock(ms); - return; - } - - int32_t byteslen = 0; - - Boolean wayTooSmall = size < sizeof(mach_msg_header_t) || size < MSGP_SIZE(msgp) || msgp->header.msgh_size < MSGP_SIZE(msgp); - Boolean invalidMagic = false; - Boolean invalidComplex = false; - Boolean wayTooBig = false; - if (!wayTooSmall) { - invalidMagic = ((MSGP_INFO(msgp, magic) != MAGIC) && (CFSwapInt32(MSGP_INFO(msgp, magic)) != MAGIC)); - invalidComplex = (msgp->header.msgh_bits & MACH_MSGH_BITS_COMPLEX) && ((1 != msgp->body.msgh_descriptor_count) || MSGP_GET(msgp, ool).type != MACH_MSG_OOL_DESCRIPTOR); - wayTooBig = ((int32_t)MSGP_SIZE(msgp) + __CFMessagePortMaxInlineBytes) < msgp->header.msgh_size; // also less than a 32-bit signed int can hold - } - - Boolean wrongSize = false; - if (!(invalidComplex || wayTooBig || wayTooSmall)) { - byteslen = CFSwapInt32LittleToHost(MSGP_INFO(msgp, byteslen)); - wrongSize = (byteslen < -1) || (__CFMessagePortMaxDataSize < byteslen); - if (msgp->header.msgh_bits & MACH_MSGH_BITS_COMPLEX) { - wrongSize = wrongSize || (MSGP_GET(msgp, ool).size != byteslen); - } else { - wrongSize = wrongSize || ((int32_t)msgp->header.msgh_size - (int32_t)MSGP_SIZE(msgp) < byteslen); - } - } - Boolean invalidMsgID = wayTooSmall ? false : ((0 <= MSGP_INFO(msgp, convid)) && (MSGP_INFO(msgp, convid) <= INT32_MAX)); // conversation id - if (invalidMagic || invalidComplex || wayTooBig || wayTooSmall || wrongSize || invalidMsgID) { - CFLog(kCFLogLevelWarning, CFSTR("*** CFMessagePort: dropping corrupt reply Mach message (0b%d%d%d%d%d%d)"), invalidMagic, invalidComplex, wayTooBig, wayTooSmall, wrongSize, invalidMsgID); - mach_msg_destroy((mach_msg_header_t *)msgp); - __CFMessagePortUnlock(ms); - return; - } - - if (CFDictionaryContainsKey(ms->_replies, (void *)(uintptr_t)MSGP_INFO(msgp, convid))) { - CFTypeRef reply = NULL; - replymsg = (mach_msg_base_t *)msg; - if (!(replymsg->header.msgh_bits & MACH_MSGH_BITS_COMPLEX)) { - uintptr_t msgp_extent = (uintptr_t)((uint8_t *)msgp + msgp->header.msgh_size); - uintptr_t data_extent = (uintptr_t)((uint8_t *)&(MSGP_INFO(replymsg, bytes)) + byteslen); - if (byteslen < 0) byteslen = 0; // from here on, treat negative same as zero -- this is historical behavior: a NULL return from the callback on the other side results in empty data to the original requestor - if (0 <= byteslen && data_extent <= msgp_extent) { - reply = CFDataCreate(kCFAllocatorSystemDefault, MSGP_INFO(replymsg, bytes), byteslen); - } else { - reply = CFRetain(kCFBooleanFalse); // means NULL data - } - } else { - //#warning CF: should create a no-copy data here that has a custom VM-freeing allocator, and not vm_dealloc here - reply = CFDataCreate(kCFAllocatorSystemDefault, MSGP_GET(replymsg, ool).address, MSGP_GET(replymsg, ool).size); - vm_deallocate(mach_task_self(), (vm_address_t)MSGP_GET(replymsg, ool).address, MSGP_GET(replymsg, ool).size); - } - CFDictionarySetValue(ms->_replies, (void *)(uintptr_t)MSGP_INFO(msgp, convid), reply); - CFRelease(reply); - } else { /* discard message */ - if (msgp->header.msgh_bits & MACH_MSGH_BITS_COMPLEX) { - vm_deallocate(mach_task_self(), (vm_address_t)MSGP_GET(msgp, ool).address, MSGP_GET(msgp, ool).size); - } - } - __CFMessagePortUnlock(ms); -} - -SInt32 CFMessagePortSendRequest(CFMessagePortRef remote, SInt32 msgid, CFDataRef data, CFTimeInterval sendTimeout, CFTimeInterval rcvTimeout, CFStringRef replyMode, CFDataRef *returnDatap) { - CF_ASSERT_TYPE(_kCFRuntimeIDCFMessagePort, remote); - mach_msg_base_t *sendmsg; - CFRunLoopRef currentRL = CFRunLoopGetCurrent(); - CFRunLoopSourceRef source = NULL; - CFTypeRef reply = NULL; - uint64_t termTSR; - uint32_t sendOpts = 0, sendTimeOut = 0; - int32_t desiredReply; - Boolean didRegister = false; - kern_return_t ret; - - //#warning CF: This should be an assert - // if (!__CFMessagePortIsRemote(remote)) return -999; - if (data && __CFMessagePortMaxDataSize < CFDataGetLength(data)) { - CFLog(kCFLogLevelWarning, CFSTR("*** CFMessagePortSendRequest: CFMessagePort cannot send more than %lu bytes of data"), __CFMessagePortMaxDataSize); - return kCFMessagePortTransportError; - } - __CFMessagePortLock(remote); - if (!__CFMessagePortIsValid(remote)) { - __CFMessagePortUnlock(remote); - return kCFMessagePortIsInvalid; - } - CFRetain(remote); // retain during run loop to avoid invalidation causing freeing - if (NULL == remote->_replyPort) { - CFMachPortContext context; - context.version = 0; - context.info = remote; - context.retain = (const void *(*)(const void *))CFRetain; - context.release = (void (*)(const void *))CFRelease; - context.copyDescription = (CFStringRef (*)(const void *))__CFMessagePortCopyDescription; - remote->_replyPort = CFMachPortCreate(CFGetAllocator(remote), __CFMessagePortReplyCallBack, &context, NULL); - } - remote->_convCounter++; - desiredReply = -remote->_convCounter; - sendmsg = __CFMessagePortCreateMessage(false, CFMachPortGetPort(remote->_port), (replyMode != NULL ? CFMachPortGetPort(remote->_replyPort) : MACH_PORT_NULL), -desiredReply, msgid, (data ? CFDataGetBytePtr(data) : NULL), (data ? CFDataGetLength(data) : -1)); - if (!sendmsg) { - __CFMessagePortUnlock(remote); - CFRelease(remote); - return kCFMessagePortTransportError; - } - if (replyMode != NULL) { - CFDictionarySetValue(remote->_replies, (void *)(uintptr_t)desiredReply, kCFNull); - source = CFMachPortCreateRunLoopSource(CFGetAllocator(remote), remote->_replyPort, -100); - didRegister = !CFRunLoopContainsSource(currentRL, source, replyMode); - if (didRegister) { - CFRunLoopAddSource(currentRL, source, replyMode); - } - } - if (sendTimeout < 10.0*86400) { - // anything more than 10 days is no timeout! - sendOpts = MACH_SEND_TIMEOUT; - sendTimeout *= 1000.0; - if (sendTimeout < 1.0) sendTimeout = 0.0; - sendTimeOut = (uint32_t)floor(sendTimeout); - } - __CFMessagePortUnlock(remote); - ret = mach_msg((mach_msg_header_t *)sendmsg, MACH_SEND_MSG|sendOpts, sendmsg->header.msgh_size, 0, MACH_PORT_NULL, sendTimeOut, MACH_PORT_NULL); - __CFMessagePortLock(remote); - if (KERN_SUCCESS != ret) { - // need to deallocate the send-once right that might have been created - if (replyMode != NULL && - (ret == MACH_SEND_INVALID_DEST || ret == MACH_SEND_INTERRUPTED || ret == MACH_SEND_TIMED_OUT) // [55207069, 39359253] it is only valid to clean cleaup the local port for these two return values; to do otherwise is unsafe/undefined-behavior - ) { - mach_port_t port = ((mach_msg_header_t *)sendmsg)->msgh_local_port; - if (MACH_PORT_VALID(port)) { - if (MACH_MSGH_BITS_LOCAL(((mach_msg_header_t *)sendmsg)->msgh_bits) == MACH_MSG_TYPE_MOVE_SEND_ONCE) { - /* destroy the send-once right */ - (void) mach_port_deallocate(mach_task_self(), port); - ((mach_msg_header_t *)sendmsg)->msgh_local_port = MACH_PORT_NULL; - } - } - } - if (didRegister) { - CFRunLoopRemoveSource(currentRL, source, replyMode); - } - if (source) CFRelease(source); - __CFMessagePortUnlock(remote); - CFAllocatorDeallocate(kCFAllocatorSystemDefault, sendmsg); - CFRelease(remote); - return (MACH_SEND_TIMED_OUT == ret) ? kCFMessagePortSendTimeout : kCFMessagePortTransportError; - } - __CFMessagePortUnlock(remote); - CFAllocatorDeallocate(kCFAllocatorSystemDefault, sendmsg); - if (replyMode == NULL) { - CFRelease(remote); - return kCFMessagePortSuccess; - } - _CFMachPortInstallNotifyPort(currentRL, replyMode); - termTSR = mach_absolute_time() + __CFTimeIntervalToTSR(rcvTimeout); - for (;;) { - CFRunLoopRunInMode(replyMode, __CFTimeIntervalUntilTSR(termTSR), true); - // warning: what, if anything, should be done if remote is now invalid? - reply = CFDictionaryGetValue(remote->_replies, (void *)(uintptr_t)desiredReply); - if (!(NULL == reply || kCFNull == reply) || termTSR < mach_absolute_time()) { - break; - } - if (!CFMessagePortIsValid(remote)) { - // no reason that reply port alone should go invalid so we don't check for that - break; - } - } - // Should we uninstall the notify port? A complex question... - if (didRegister) { - CFRunLoopRemoveSource(currentRL, source, replyMode); - } - if (source) CFRelease(source); - // kCFNull is the placeholder for a reply mode - if (NULL == reply || kCFNull == reply) { - CFDictionaryRemoveValue(remote->_replies, (void *)(uintptr_t)desiredReply); - CFRelease(remote); - return CFMessagePortIsValid(remote) ? kCFMessagePortReceiveTimeout : kCFMessagePortBecameInvalidError; - } - if (NULL != returnDatap) { - // kCFBooleanFalse is the placeholder for a null data - *returnDatap = (kCFBooleanFalse == reply) ? NULL : CFRetain((CFDataRef)reply); - } - CFDictionaryRemoveValue(remote->_replies, (void *)(uintptr_t)desiredReply); - CFRelease(remote); - return kCFMessagePortSuccess; -} - -static mach_port_t __CFMessagePortGetPort(void *info) { - CFMessagePortRef ms = info; - if (!ms->_port && __CFMessagePortIsValid(ms)) CFLog(kCFLogLevelWarning, CFSTR("*** Warning: A local CFMessagePort (%p) is being put in a run loop or dispatch queue, but it has not been named yet, so this will be a no-op and no messages are going to be received, even if named later."), info); - return ms->_port ? CFMachPortGetPort(ms->_port) : MACH_PORT_NULL; -} - - -static void *__CFMessagePortPerform(void *msg, CFIndex size, CFAllocatorRef allocator, void *info) { - CFMessagePortRef ms = info; - mach_msg_base_t *msgp = msg; - mach_msg_base_t *replymsg = NULL; - void *context_info; - void (*context_release)(const void *); - CFDataRef returnData, data = NULL; - void *return_bytes = NULL; - CFIndex return_len = -1; - int32_t msgid; - - __CFMessagePortLock(ms); - if (!__CFMessagePortIsValid(ms)) { - __CFMessagePortUnlock(ms); - return NULL; - } - if (NULL != ms->_context.retain) { - context_info = (void *)ms->_context.retain(ms->_context.info); - context_release = ms->_context.release; - } else { - context_info = ms->_context.info; - context_release = NULL; - } - __CFMessagePortUnlock(ms); - - - int32_t byteslen = 0; - - Boolean wayTooSmall = size < sizeof(mach_msg_header_t) || size < MSGP_SIZE(msgp) || msgp->header.msgh_size < MSGP_SIZE(msgp); - Boolean invalidMagic = false; - Boolean invalidComplex = false; - Boolean wayTooBig = false; - if (!wayTooSmall) { - invalidMagic = ((MSGP_INFO(msgp, magic) != MAGIC) && (CFSwapInt32(MSGP_INFO(msgp, magic)) != MAGIC)); - invalidComplex = (msgp->header.msgh_bits & MACH_MSGH_BITS_COMPLEX) && (1 != msgp->body.msgh_descriptor_count); - wayTooBig = ((int32_t)MSGP_SIZE(msgp) + __CFMessagePortMaxInlineBytes) < msgp->header.msgh_size; // also less than a 32-bit signed int can hold - } - Boolean wrongSize = false; - if (!(invalidComplex || wayTooBig || wayTooSmall)) { - byteslen = CFSwapInt32LittleToHost(MSGP_INFO(msgp, byteslen)); - wrongSize = (byteslen < -1) || (__CFMessagePortMaxDataSize < byteslen); - if (msgp->header.msgh_bits & MACH_MSGH_BITS_COMPLEX) { - wrongSize = wrongSize || (MSGP_GET(msgp, ool).size != byteslen); - } else { - wrongSize = wrongSize || ((int32_t)msgp->header.msgh_size - (int32_t)MSGP_SIZE(msgp) < byteslen); - } - } - Boolean invalidMsgID = wayTooSmall ? false : ((MSGP_INFO(msgp, convid) <= 0) || (INT32_MAX < MSGP_INFO(msgp, convid))); // conversation id - if (invalidMagic || invalidComplex || wayTooBig || wayTooSmall || wrongSize || invalidMsgID) { - CFLog(kCFLogLevelWarning, CFSTR("*** CFMessagePort: dropping corrupt request Mach message (0b%d%d%d%d%d%d)"), invalidMagic, invalidComplex, wayTooBig, wayTooSmall, wrongSize, invalidMsgID); - mach_msg_destroy((mach_msg_header_t *)msgp); - return NULL; - } - - if (byteslen < 0) byteslen = 0; // from here on, treat negative same as zero - - /* Create no-copy, no-free-bytes wrapper CFData */ - if (!(msgp->header.msgh_bits & MACH_MSGH_BITS_COMPLEX)) { - uintptr_t msgp_extent = (uintptr_t)((uint8_t *)msgp + msgp->header.msgh_size); - uintptr_t data_extent = (uintptr_t)((uint8_t *)&(MSGP_INFO(msgp, bytes)) + byteslen); - msgid = CFSwapInt32LittleToHost(MSGP_INFO(msgp, msgid)); - if (0 <= byteslen && data_extent <= msgp_extent) { - data = CFDataCreateWithBytesNoCopy(allocator, MSGP_INFO(msgp, bytes), byteslen, kCFAllocatorNull); - } - } else { - msgid = CFSwapInt32LittleToHost(MSGP_INFO(msgp, msgid)); - data = CFDataCreateWithBytesNoCopy(allocator, MSGP_GET(msgp, ool).address, MSGP_GET(msgp, ool).size, kCFAllocatorNull); - } - if (ms->_callout) { - returnData = ms->_callout(ms, msgid, data, context_info); - } else { - mach_msg_trailer_t *trailer = (mach_msg_trailer_t *)(((uintptr_t)&(msgp->header) + msgp->header.msgh_size + sizeof(natural_t) - 1) & ~(sizeof(natural_t) - 1)); - returnData = ms->_calloutEx(ms, msgid, data, context_info, trailer, 0); - } - /* Now, returnData could be (1) NULL, (2) an ordinary data < MAX_INLINE, - (3) ordinary data >= MAX_INLINE, (4) a no-copy data < MAX_INLINE, - (5) a no-copy data >= MAX_INLINE. In cases (2) and (4), we send the return - bytes inline in the Mach message, so can release the returnData object - here. In cases (3) and (5), we'll send the data out-of-line, we need to - create a copy of the memory, which we'll have the kernel autodeallocate - for us on send. In case (4) also, the bytes in the return data may be part - of the bytes in "data" that we sent into the callout, so if the incoming - data was received out of line, we wouldn't be able to clean up the out-of-line - wad until the message was sent either, if we didn't make the copy. */ - if (NULL != returnData) { - return_len = CFDataGetLength(returnData); - if (__CFMessagePortMaxDataSize < return_len) { - CFLog(kCFLogLevelWarning, CFSTR("*** CFMessagePort reply: CFMessagePort cannot send more than %lu bytes of data"), __CFMessagePortMaxDataSize); - return_len = 0; - CFRelease(returnData); - returnData = NULL; - } - if (returnData && return_len < __CFMessagePortMaxInlineBytes) { - return_bytes = (void *)CFDataGetBytePtr(returnData); - } else if (returnData) { - return_bytes = NULL; - kern_return_t ret = vm_allocate(mach_task_self(), (vm_address_t *)&return_bytes, return_len, VM_FLAGS_ANYWHERE | VM_MAKE_TAG(VM_MEMORY_MACH_MSG)); - if (ret == KERN_SUCCESS) { - /* vm_copy would only be a win here if the source address - is page aligned; it is a lose in all other cases, since - the kernel will just do the memmove for us (but not in - as simple a way). */ - memmove(return_bytes, CFDataGetBytePtr(returnData), return_len); - } else { - return_len = 0; - } - } - } - replymsg = __CFMessagePortCreateMessage(true, msgp->header.msgh_remote_port, MACH_PORT_NULL, -1 * (int32_t)MSGP_INFO(msgp, convid), msgid, return_bytes, return_len); - if (replymsg->header.msgh_bits & MACH_MSGH_BITS_COMPLEX) { - MSGP_GET(replymsg, ool).deallocate = true; - } - if (data) CFRelease(data); - if (msgp->header.msgh_bits & MACH_MSGH_BITS_COMPLEX) { - vm_deallocate(mach_task_self(), (vm_address_t)MSGP_GET(msgp, ool).address, MSGP_GET(msgp, ool).size); - } - if (returnData) CFRelease(returnData); - if (context_release) { - context_release(context_info); - } - return replymsg; -} - -CFRunLoopSourceRef CFMessagePortCreateRunLoopSource(CFAllocatorRef allocator, CFMessagePortRef ms, CFIndex order) { - CF_ASSERT_TYPE_OR_NULL(_kCFRuntimeIDCFMessagePort, ms); - CFRunLoopSourceRef result = NULL; - if (!CFMessagePortIsValid(ms)) return NULL; - if (__CFMessagePortIsRemote(ms)) return NULL; - __CFMessagePortLock(ms); - if (NULL != ms->_source && !CFRunLoopSourceIsValid(ms->_source)) { - CFRelease(ms->_source); - ms->_source = NULL; - } - if (NULL == ms->_source && NULL == ms->_dispatchSource && __CFMessagePortIsValid(ms)) { - CFRunLoopSourceContext1 context; - context.version = 1; - context.info = (void *)ms; - context.retain = (const void *(*)(const void *))CFRetain; - context.release = (void (*)(const void *))CFRelease; - context.copyDescription = (CFStringRef (*)(const void *))__CFMessagePortCopyDescription; - context.equal = NULL; - context.hash = NULL; - context.getPort = __CFMessagePortGetPort; - context.perform = __CFMessagePortPerform; - ms->_source = CFRunLoopSourceCreate(allocator, order, (CFRunLoopSourceContext *)&context); - } - if (NULL != ms->_source) { - result = (CFRunLoopSourceRef)CFRetain(ms->_source); - } - __CFMessagePortUnlock(ms); - return result; -} - -void CFMessagePortSetDispatchQueue(CFMessagePortRef ms, dispatch_queue_t queue) { - CF_ASSERT_TYPE(_kCFRuntimeIDCFMessagePort, ms); - __CFMessagePortLock(ms); - if (!__CFMessagePortIsValid(ms)) { - __CFMessagePortUnlock(ms); - CFLog(kCFLogLevelWarning, CFSTR("*** CFMessagePortSetDispatchQueue(): CFMessagePort is invalid")); - return; - } - if (__CFMessagePortIsRemote(ms)) { - __CFMessagePortUnlock(ms); - CFLog(kCFLogLevelWarning, CFSTR("*** CFMessagePortSetDispatchQueue(): CFMessagePort is not a local port, queue cannot be set")); - return; - } - if (NULL != ms->_source) { - __CFMessagePortUnlock(ms); - CFLog(kCFLogLevelWarning, CFSTR("*** CFMessagePortSetDispatchQueue(): CFMessagePort already has a CFRunLoopSourceRef, queue cannot be set")); - return; - } - - if (ms->_dispatchSource) { - dispatch_source_cancel(ms->_dispatchSource); - ms->_dispatchSource = NULL; - ms->_dispatchQ = NULL; - } - - if (queue) { - mach_port_t port = __CFMessagePortGetPort(ms); - if (MACH_PORT_NULL != port) { - static dispatch_queue_t mportQueue = NULL; - static dispatch_once_t once; - dispatch_once(&once, ^{ - dispatch_queue_attr_t dqattr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, qos_class_main(), 0); - mportQueue = dispatch_queue_create("com.apple.CFMessagePort", dqattr); - }); - - _cfmp_record_intent_to_invalidate(_CFMPLifetimeClientCFMessagePort, port); - dispatch_source_t theSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_MACH_RECV, port, 0, mportQueue); - dispatch_source_set_cancel_handler(theSource, ^{ - dispatch_release(queue); - dispatch_release(theSource); - _cfmp_source_invalidated(_CFMPLifetimeClientCFMessagePort, port); - }); - dispatch_source_set_event_handler(theSource, ^{ - CFRetain(ms); - mach_msg_header_t *msg = (mach_msg_header_t *)CFAllocatorAllocate(kCFAllocatorSystemDefault, 2048, 0); - msg->msgh_size = 2048; - - for (;;) { - msg->msgh_bits = 0; - msg->msgh_local_port = port; - msg->msgh_remote_port = MACH_PORT_NULL; - msg->msgh_id = 0; - - kern_return_t ret = mach_msg(msg, MACH_RCV_MSG|MACH_RCV_LARGE|MACH_RCV_TRAILER_TYPE(MACH_MSG_TRAILER_FORMAT_0)|MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_AV), 0, msg->msgh_size, port, 0, MACH_PORT_NULL); - if (MACH_MSG_SUCCESS == ret) break; - if (MACH_RCV_TOO_LARGE != ret) HALT; - - uint32_t newSize = round_msg(msg->msgh_size + MAX_TRAILER_SIZE); - msg = __CFSafelyReallocateWithAllocator(kCFAllocatorSystemDefault, msg, newSize, 0, NULL); - msg->msgh_size = newSize; - } - - dispatch_async(queue, ^{ - mach_msg_header_t *reply = __CFMessagePortPerform(msg, msg->msgh_size, kCFAllocatorSystemDefault, ms); - if (NULL != reply) { - kern_return_t const ret = mach_msg(reply, MACH_SEND_MSG, reply->msgh_size, 0, MACH_PORT_NULL, 0, MACH_PORT_NULL); - - __CFMachMessageCheckForAndDestroyUnsentMessage(ret, reply); - - CFAllocatorDeallocate(kCFAllocatorSystemDefault, reply); - } - CFAllocatorDeallocate(kCFAllocatorSystemDefault, msg); - CFRelease(ms); - }); - }); - ms->_dispatchSource = theSource; - } - if (ms->_dispatchSource) { - dispatch_retain(queue); - ms->_dispatchQ = queue; - dispatch_resume(ms->_dispatchSource); - } else { - CFLog(kCFLogLevelWarning, CFSTR("*** CFMessagePortSetDispatchQueue(): dispatch source could not be created")); - } - } - __CFMessagePortUnlock(ms); -} diff --git a/Sources/CoreFoundation/include/CoreFoundation_Prefix.h b/Sources/CoreFoundation/include/CoreFoundation_Prefix.h index d8d4202bde..e7df72b371 100644 --- a/Sources/CoreFoundation/include/CoreFoundation_Prefix.h +++ b/Sources/CoreFoundation/include/CoreFoundation_Prefix.h @@ -19,7 +19,11 @@ #include "CFAvailability.h" +#if TARGET_OS_WASI #define __HAS_DISPATCH__ 0 +#else +#define __HAS_DISPATCH__ 1 +#endif // Darwin may or may not define these macros, but we rely on them for building in Swift; define them privately. #ifndef TARGET_OS_LINUX From 5daa77276a6d330f2779e6bd8c89182974b464da Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Fri, 2 Feb 2024 10:12:42 -0800 Subject: [PATCH 005/198] Basic Foundation package builds --- Package.swift | 61 ++++++++++++++++--- Sources/CMakeLists.txt | 5 -- Sources/Clibxml2/module.modulemap | 0 Sources/Clibxml2/xml2.h | 0 Sources/CoreFoundation/CFBasicHash.c | 2 +- Sources/CoreFoundation/CFLocaleKeys.c | 1 + Sources/CoreFoundation/CFRunLoop.c | 2 +- Sources/CoreFoundation/CFUtilities.c | 2 +- Sources/CoreFoundation/include/CFBase.h | 2 +- .../CoreFoundation/include/CoreFoundation.h | 9 +-- .../{include => internalInclude}/Block.h | 0 .../Block_private.h | 0 .../CFAsmMacros.h | 0 .../CFBasicHash.h | 0 .../CFBundle_Internal.h | 0 .../CFCalendar_Internal.h | 0 .../CFCollections_Internal.h | 0 .../{include => internalInclude}/CFInternal.h | 2 +- .../CFLocaleInternal.h | 0 .../CFMachPort_Internal.h | 0 .../CFMachPort_Lifetime.h | 0 .../CFPlugIn_Factory.h | 0 .../CFPropertyList_Internal.h | 0 .../CFRuntime_Internal.h | 0 .../CFStreamInternal.h | 0 .../CFStringLocalizedFormattingInternal.h | 0 .../CFString_Internal.h | 0 .../{include => internalInclude}/CFURL.inc.h | 0 .../CFURLComponents_Internal.h | 0 .../ForSwiftFoundationOnly.h | 0 .../{include => internalInclude}/uuid.h | 0 Sources/Foundation/Data.swift | 1 - Sources/Tools/CMakeLists.txt | 1 - Sources/{Tools => }/plutil/CMakeLists.txt | 0 Sources/{Tools => }/plutil/main.swift | 0 35 files changed, 63 insertions(+), 25 deletions(-) delete mode 100644 Sources/CMakeLists.txt create mode 100644 Sources/Clibxml2/module.modulemap create mode 100644 Sources/Clibxml2/xml2.h rename Sources/CoreFoundation/{include => internalInclude}/Block.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/Block_private.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFAsmMacros.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFBasicHash.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFBundle_Internal.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFCalendar_Internal.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFCollections_Internal.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFInternal.h (99%) rename Sources/CoreFoundation/{include => internalInclude}/CFLocaleInternal.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFMachPort_Internal.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFMachPort_Lifetime.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFPlugIn_Factory.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFPropertyList_Internal.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFRuntime_Internal.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFStreamInternal.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFStringLocalizedFormattingInternal.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFString_Internal.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFURL.inc.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFURLComponents_Internal.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/ForSwiftFoundationOnly.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/uuid.h (100%) delete mode 100644 Sources/Tools/CMakeLists.txt rename Sources/{Tools => }/plutil/CMakeLists.txt (100%) rename Sources/{Tools => }/plutil/main.swift (100%) diff --git a/Package.swift b/Package.swift index 605ed95b1d..fd04f2ed5f 100644 --- a/Package.swift +++ b/Package.swift @@ -4,43 +4,86 @@ import PackageDescription let buildSettings: [CSetting] = [ + .headerSearchPath("internalInclude"), .define("DEBUG", .when(configuration: .debug)), .define("CF_BUILDING_CF"), .define("DEPLOYMENT_RUNTIME_SWIFT"), .define("DEPLOYMENT_ENABLE_LIBDISPATCH"), .define("HAVE_STRUCT_TIMESPEC"), .define("__CONSTANT_CFSTRINGS__"), - .define("_GNU_SOURCE"), // TODO: Linux only? + .define("_GNU_SOURCE", .when(platforms: [.linux, .android])), .define("CF_CHARACTERSET_UNICODE_DATA_L", to: "\"Sources/CoreFoundation/CFUnicodeData-L.mapping\""), .define("CF_CHARACTERSET_UNICODE_DATA_B", to: "\"Sources/CoreFoundation/CFUnicodeData-B.mapping\""), .define("CF_CHARACTERSET_UNICHAR_DB", to: "\"Sources/CoreFoundation/CFUniCharPropertyDatabase.data\""), .define("CF_CHARACTERSET_BITMAP", to: "\"Sources/CoreFoundation/CFCharacterSetBitmaps.bitmap\""), - .unsafeFlags(["-Wno-int-conversion", "-fconstant-cfstrings", "-fexceptions"]), - // .headerSearchPath("libxml2"), - .unsafeFlags(["-I/usr/include/libxml2"]), + .unsafeFlags([ + "-Wno-shorten-64-to-32", + "-Wno-deprecated-declarations", + "-Wno-unreachable-code", + "-Wno-conditional-uninitialized", + "-Wno-unused-variable", + "-Wno-int-conversion", + "-Wno-unused-function", + "-Wno-microsoft-enum-forward-reference", + "-fconstant-cfstrings", + "-fexceptions", // TODO: not on OpenBSD + "-fdollars-in-identifiers", + "-fno-common", + "-fcf-runtime-abi=swift" + // /EHsc for Windows + ]), .unsafeFlags(["-I/usr/lib/swift"]) ] let package = Package( name: "swift-corelibs-foundation", products: [ - .library( - name: "CoreFoundationPackage", - targets: ["CoreFoundationPackage"]), + .library(name: "Foundation", targets: ["Foundation"]), + .executable(name: "plutil", targets: ["plutil"]) ], dependencies: [ .package( url: "https://github.com/apple/swift-foundation-icu", exact: "0.0.5"), + .package( + // url: "https://github.com/apple/swift-foundation", + // branch: "main" + url: "https://github.com/parkera/swift-foundation", + branch: "parkera/rename_uuid" + ) ], targets: [ + .target( + name: "Foundation", + dependencies: [ + .product(name: "FoundationEssentials", package: "swift-foundation"), + .product(name: "FoundationInternationalization", package: "swift-foundation"), + "CoreFoundationPackage" + ], + path: "Sources/Foundation", + swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT")] + ), .target( name: "CoreFoundationPackage", dependencies: [ - .product(name: "FoundationICU", package: "swift-foundation-icu") + .product(name: "FoundationICU", package: "swift-foundation-icu"), + "Clibxml2" ], path: "Sources/CoreFoundation", + exclude: ["CFURLSessionInterface.c"], // TODO: Need curl cSettings: buildSettings - ) + ), + .systemLibrary( + name: "Clibxml2", + pkgConfig: "libxml-2.0", + providers: [ + .brew(["libxml2"]), + .apt(["libxml2-dev"]) + ] + ), + .executableTarget( + name: "plutil", + dependencies: ["Foundation"] + ) ] ) diff --git a/Sources/CMakeLists.txt b/Sources/CMakeLists.txt deleted file mode 100644 index ab3a1bef11..0000000000 --- a/Sources/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -add_subdirectory(UUID) -add_subdirectory(Foundation) -add_subdirectory(FoundationNetworking) -add_subdirectory(FoundationXML) -add_subdirectory(Tools) diff --git a/Sources/Clibxml2/module.modulemap b/Sources/Clibxml2/module.modulemap new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Sources/Clibxml2/xml2.h b/Sources/Clibxml2/xml2.h new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Sources/CoreFoundation/CFBasicHash.c b/Sources/CoreFoundation/CFBasicHash.c index 2360c26b7c..40a9ce03ce 100644 --- a/Sources/CoreFoundation/CFBasicHash.c +++ b/Sources/CoreFoundation/CFBasicHash.c @@ -13,7 +13,7 @@ #include "CFRuntime.h" #include "CFRuntime_Internal.h" #include "CFSet.h" -#include +#include "Block.h" #include #if __HAS_DISPATCH__ #include diff --git a/Sources/CoreFoundation/CFLocaleKeys.c b/Sources/CoreFoundation/CFLocaleKeys.c index a4ec9eb033..2cf05e97a6 100644 --- a/Sources/CoreFoundation/CFLocaleKeys.c +++ b/Sources/CoreFoundation/CFLocaleKeys.c @@ -7,6 +7,7 @@ See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors */ +#include "TargetConditionals.h" #include "CFInternal.h" CONST_STRING_DECL(kCFLocaleAlternateQuotationBeginDelimiterKey, "kCFLocaleAlternateQuotationBeginDelimiterKey"); diff --git a/Sources/CoreFoundation/CFRunLoop.c b/Sources/CoreFoundation/CFRunLoop.c index 7f918dddf2..4b27c1be30 100644 --- a/Sources/CoreFoundation/CFRunLoop.c +++ b/Sources/CoreFoundation/CFRunLoop.c @@ -125,7 +125,7 @@ CF_EXPORT _CFThreadRef _CF_pthread_main_thread_np(void); #define pthread_main_thread_np() _CF_pthread_main_thread_np() #endif -#include +#include "Block.h" #if __has_include() #include #elif __has_include("Block_private.h") diff --git a/Sources/CoreFoundation/CFUtilities.c b/Sources/CoreFoundation/CFUtilities.c index 4a31db0f6b..69d42918cb 100644 --- a/Sources/CoreFoundation/CFUtilities.c +++ b/Sources/CoreFoundation/CFUtilities.c @@ -65,7 +65,7 @@ #include #include #include -#include +#include "Block.h" #include #endif diff --git a/Sources/CoreFoundation/include/CFBase.h b/Sources/CoreFoundation/include/CFBase.h index 54f3bb475e..e918cd6bdd 100644 --- a/Sources/CoreFoundation/include/CFBase.h +++ b/Sources/CoreFoundation/include/CFBase.h @@ -73,7 +73,7 @@ #include #if __BLOCKS__ && (TARGET_OS_OSX || TARGET_OS_IPHONE) -#include +#include "Block.h" #endif #if (TARGET_OS_OSX || TARGET_OS_IPHONE) && !DEPLOYMENT_RUNTIME_SWIFT diff --git a/Sources/CoreFoundation/include/CoreFoundation.h b/Sources/CoreFoundation/include/CoreFoundation.h index d9b28df0dd..7a75465e8c 100644 --- a/Sources/CoreFoundation/include/CoreFoundation.h +++ b/Sources/CoreFoundation/include/CoreFoundation.h @@ -72,6 +72,7 @@ #include "CFUUID.h" #include "CFUtilities.h" #include "CFBundle.h" +#include "CFLocaleInternal.h" #if TARGET_OS_OSX || TARGET_OS_IPHONE || TARGET_OS_WIN32 #include "CFMessagePort.h" @@ -91,10 +92,10 @@ #include "CFUserNotification.h" -#if !DEPLOYMENT_RUNTIME_SWIFT -#include "CFXMLNode.h" -#include "CFXMLParser.h" -#endif +// #if !DEPLOYMENT_RUNTIME_SWIFT +// #include "CFXMLNode.h" +// #include "CFXMLParser.h" +// #endif #endif /* ! __COREFOUNDATION_COREFOUNDATION__ */ diff --git a/Sources/CoreFoundation/include/Block.h b/Sources/CoreFoundation/internalInclude/Block.h similarity index 100% rename from Sources/CoreFoundation/include/Block.h rename to Sources/CoreFoundation/internalInclude/Block.h diff --git a/Sources/CoreFoundation/include/Block_private.h b/Sources/CoreFoundation/internalInclude/Block_private.h similarity index 100% rename from Sources/CoreFoundation/include/Block_private.h rename to Sources/CoreFoundation/internalInclude/Block_private.h diff --git a/Sources/CoreFoundation/include/CFAsmMacros.h b/Sources/CoreFoundation/internalInclude/CFAsmMacros.h similarity index 100% rename from Sources/CoreFoundation/include/CFAsmMacros.h rename to Sources/CoreFoundation/internalInclude/CFAsmMacros.h diff --git a/Sources/CoreFoundation/include/CFBasicHash.h b/Sources/CoreFoundation/internalInclude/CFBasicHash.h similarity index 100% rename from Sources/CoreFoundation/include/CFBasicHash.h rename to Sources/CoreFoundation/internalInclude/CFBasicHash.h diff --git a/Sources/CoreFoundation/include/CFBundle_Internal.h b/Sources/CoreFoundation/internalInclude/CFBundle_Internal.h similarity index 100% rename from Sources/CoreFoundation/include/CFBundle_Internal.h rename to Sources/CoreFoundation/internalInclude/CFBundle_Internal.h diff --git a/Sources/CoreFoundation/include/CFCalendar_Internal.h b/Sources/CoreFoundation/internalInclude/CFCalendar_Internal.h similarity index 100% rename from Sources/CoreFoundation/include/CFCalendar_Internal.h rename to Sources/CoreFoundation/internalInclude/CFCalendar_Internal.h diff --git a/Sources/CoreFoundation/include/CFCollections_Internal.h b/Sources/CoreFoundation/internalInclude/CFCollections_Internal.h similarity index 100% rename from Sources/CoreFoundation/include/CFCollections_Internal.h rename to Sources/CoreFoundation/internalInclude/CFCollections_Internal.h diff --git a/Sources/CoreFoundation/include/CFInternal.h b/Sources/CoreFoundation/internalInclude/CFInternal.h similarity index 99% rename from Sources/CoreFoundation/include/CFInternal.h rename to Sources/CoreFoundation/internalInclude/CFInternal.h index e89fd67d9c..de3af09f08 100644 --- a/Sources/CoreFoundation/include/CFInternal.h +++ b/Sources/CoreFoundation/internalInclude/CFInternal.h @@ -104,7 +104,7 @@ CF_EXTERN_C_BEGIN #include "CFRuntime_Internal.h" #include #include -#include +#include "Block.h" #if TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI diff --git a/Sources/CoreFoundation/include/CFLocaleInternal.h b/Sources/CoreFoundation/internalInclude/CFLocaleInternal.h similarity index 100% rename from Sources/CoreFoundation/include/CFLocaleInternal.h rename to Sources/CoreFoundation/internalInclude/CFLocaleInternal.h diff --git a/Sources/CoreFoundation/include/CFMachPort_Internal.h b/Sources/CoreFoundation/internalInclude/CFMachPort_Internal.h similarity index 100% rename from Sources/CoreFoundation/include/CFMachPort_Internal.h rename to Sources/CoreFoundation/internalInclude/CFMachPort_Internal.h diff --git a/Sources/CoreFoundation/include/CFMachPort_Lifetime.h b/Sources/CoreFoundation/internalInclude/CFMachPort_Lifetime.h similarity index 100% rename from Sources/CoreFoundation/include/CFMachPort_Lifetime.h rename to Sources/CoreFoundation/internalInclude/CFMachPort_Lifetime.h diff --git a/Sources/CoreFoundation/include/CFPlugIn_Factory.h b/Sources/CoreFoundation/internalInclude/CFPlugIn_Factory.h similarity index 100% rename from Sources/CoreFoundation/include/CFPlugIn_Factory.h rename to Sources/CoreFoundation/internalInclude/CFPlugIn_Factory.h diff --git a/Sources/CoreFoundation/include/CFPropertyList_Internal.h b/Sources/CoreFoundation/internalInclude/CFPropertyList_Internal.h similarity index 100% rename from Sources/CoreFoundation/include/CFPropertyList_Internal.h rename to Sources/CoreFoundation/internalInclude/CFPropertyList_Internal.h diff --git a/Sources/CoreFoundation/include/CFRuntime_Internal.h b/Sources/CoreFoundation/internalInclude/CFRuntime_Internal.h similarity index 100% rename from Sources/CoreFoundation/include/CFRuntime_Internal.h rename to Sources/CoreFoundation/internalInclude/CFRuntime_Internal.h diff --git a/Sources/CoreFoundation/include/CFStreamInternal.h b/Sources/CoreFoundation/internalInclude/CFStreamInternal.h similarity index 100% rename from Sources/CoreFoundation/include/CFStreamInternal.h rename to Sources/CoreFoundation/internalInclude/CFStreamInternal.h diff --git a/Sources/CoreFoundation/include/CFStringLocalizedFormattingInternal.h b/Sources/CoreFoundation/internalInclude/CFStringLocalizedFormattingInternal.h similarity index 100% rename from Sources/CoreFoundation/include/CFStringLocalizedFormattingInternal.h rename to Sources/CoreFoundation/internalInclude/CFStringLocalizedFormattingInternal.h diff --git a/Sources/CoreFoundation/include/CFString_Internal.h b/Sources/CoreFoundation/internalInclude/CFString_Internal.h similarity index 100% rename from Sources/CoreFoundation/include/CFString_Internal.h rename to Sources/CoreFoundation/internalInclude/CFString_Internal.h diff --git a/Sources/CoreFoundation/include/CFURL.inc.h b/Sources/CoreFoundation/internalInclude/CFURL.inc.h similarity index 100% rename from Sources/CoreFoundation/include/CFURL.inc.h rename to Sources/CoreFoundation/internalInclude/CFURL.inc.h diff --git a/Sources/CoreFoundation/include/CFURLComponents_Internal.h b/Sources/CoreFoundation/internalInclude/CFURLComponents_Internal.h similarity index 100% rename from Sources/CoreFoundation/include/CFURLComponents_Internal.h rename to Sources/CoreFoundation/internalInclude/CFURLComponents_Internal.h diff --git a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h b/Sources/CoreFoundation/internalInclude/ForSwiftFoundationOnly.h similarity index 100% rename from Sources/CoreFoundation/include/ForSwiftFoundationOnly.h rename to Sources/CoreFoundation/internalInclude/ForSwiftFoundationOnly.h diff --git a/Sources/CoreFoundation/include/uuid.h b/Sources/CoreFoundation/internalInclude/uuid.h similarity index 100% rename from Sources/CoreFoundation/include/uuid.h rename to Sources/CoreFoundation/internalInclude/uuid.h diff --git a/Sources/Foundation/Data.swift b/Sources/Foundation/Data.swift index 86585a3a86..00865bae7e 100644 --- a/Sources/Foundation/Data.swift +++ b/Sources/Foundation/Data.swift @@ -2897,4 +2897,3 @@ extension Data : Codable { } } } - diff --git a/Sources/Tools/CMakeLists.txt b/Sources/Tools/CMakeLists.txt deleted file mode 100644 index b55fb8a780..0000000000 --- a/Sources/Tools/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_subdirectory(plutil) diff --git a/Sources/Tools/plutil/CMakeLists.txt b/Sources/plutil/CMakeLists.txt similarity index 100% rename from Sources/Tools/plutil/CMakeLists.txt rename to Sources/plutil/CMakeLists.txt diff --git a/Sources/Tools/plutil/main.swift b/Sources/plutil/main.swift similarity index 100% rename from Sources/Tools/plutil/main.swift rename to Sources/plutil/main.swift From 763145c705d01c000ccbd60925d7b8c47df9a662 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Fri, 2 Feb 2024 14:17:26 -0800 Subject: [PATCH 006/198] Reexport FoundationEssentials and start fixing build errors - error types first --- Package.swift | 3 +- Sources/Foundation/Date.swift | 2 + Sources/Foundation/Headers/SwiftFoundation.h | 1 - Sources/Foundation/NSError.swift | 403 +------------------ Sources/Foundation/NSStringAPI.swift | 27 +- Sources/Foundation/Resources/Info.plist | 28 -- Sources/Foundation/StringEncodings.swift | 104 ++--- 7 files changed, 40 insertions(+), 528 deletions(-) delete mode 100644 Sources/Foundation/Headers/SwiftFoundation.h delete mode 100644 Sources/Foundation/Resources/Info.plist diff --git a/Package.swift b/Package.swift index fd04f2ed5f..9681581531 100644 --- a/Package.swift +++ b/Package.swift @@ -48,8 +48,7 @@ let package = Package( .package( // url: "https://github.com/apple/swift-foundation", // branch: "main" - url: "https://github.com/parkera/swift-foundation", - branch: "parkera/rename_uuid" + path: "../swift-foundation" ) ], targets: [ diff --git a/Sources/Foundation/Date.swift b/Sources/Foundation/Date.swift index f6ec9110e1..755e945d45 100644 --- a/Sources/Foundation/Date.swift +++ b/Sources/Foundation/Date.swift @@ -7,6 +7,8 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +@_exported import FoundationEssentials + @_implementationOnly import CoreFoundation /** diff --git a/Sources/Foundation/Headers/SwiftFoundation.h b/Sources/Foundation/Headers/SwiftFoundation.h deleted file mode 100644 index fe11bff42c..0000000000 --- a/Sources/Foundation/Headers/SwiftFoundation.h +++ /dev/null @@ -1 +0,0 @@ -// This is a dummy umbrella header for the SwiftFoundation.framework Xcode target diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index 3ec150e63b..9ea349e113 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -977,13 +977,10 @@ extension URLError { } /// Describes an error in the POSIX error domain. -public struct POSIXError : _BridgedStoredNSError { - - public let _nsError: NSError - +extension POSIXError : _BridgedStoredNSError { public init(_nsError error: NSError) { precondition(error.domain == NSPOSIXErrorDomain) - self._nsError = error + self.code = error.code } public static var _nsErrorDomain: String { return NSPOSIXErrorDomain } @@ -991,402 +988,6 @@ public struct POSIXError : _BridgedStoredNSError { public typealias Code = POSIXErrorCode } -extension POSIXErrorCode: _ErrorCodeProtocol { - public typealias _ErrorType = POSIXError -} - -extension POSIXError { - /// Operation not permitted. - public static var EPERM: POSIXError.Code { return .EPERM } - - /// No such file or directory. - public static var ENOENT: POSIXError.Code { return .ENOENT } - - /// No such process. - public static var ESRCH: POSIXError.Code { return .ESRCH } - - /// Interrupted system call. - public static var EINTR: POSIXError.Code { return .EINTR } - - /// Input/output error. - public static var EIO: POSIXError.Code { return .EIO } - - /// Device not configured. - public static var ENXIO: POSIXError.Code { return .ENXIO } - - /// Argument list too long. - public static var E2BIG: POSIXError.Code { return .E2BIG } - - /// Exec format error. - public static var ENOEXEC: POSIXError.Code { return .ENOEXEC } - - /// Bad file descriptor. - public static var EBADF: POSIXError.Code { return .EBADF } - - /// No child processes. - public static var ECHILD: POSIXError.Code { return .ECHILD } - - /// Resource deadlock avoided. - public static var EDEADLK: POSIXError.Code { return .EDEADLK } - - /// Cannot allocate memory. - public static var ENOMEM: POSIXError.Code { return .ENOMEM } - - /// Permission denied. - public static var EACCES: POSIXError.Code { return .EACCES } - - /// Bad address. - public static var EFAULT: POSIXError.Code { return .EFAULT } - - #if !os(Windows) - /// Block device required. - public static var ENOTBLK: POSIXError.Code { return .ENOTBLK } - #endif - - /// Device / Resource busy. - public static var EBUSY: POSIXError.Code { return .EBUSY } - - /// File exists. - public static var EEXIST: POSIXError.Code { return .EEXIST } - - /// Cross-device link. - public static var EXDEV: POSIXError.Code { return .EXDEV } - - /// Operation not supported by device. - public static var ENODEV: POSIXError.Code { return .ENODEV } - - /// Not a directory. - public static var ENOTDIR: POSIXError.Code { return .ENOTDIR } - - /// Is a directory. - public static var EISDIR: POSIXError.Code { return .EISDIR } - - /// Invalid argument. - public static var EINVAL: POSIXError.Code { return .EINVAL } - - /// Too many open files in system. - public static var ENFILE: POSIXError.Code { return .ENFILE } - - /// Too many open files. - public static var EMFILE: POSIXError.Code { return .EMFILE } - - /// Inappropriate ioctl for device. - public static var ENOTTY: POSIXError.Code { return .ENOTTY } - - #if !os(Windows) - /// Text file busy. - public static var ETXTBSY: POSIXError.Code { return .ETXTBSY } - #endif - - /// File too large. - public static var EFBIG: POSIXError.Code { return .EFBIG } - - /// No space left on device. - public static var ENOSPC: POSIXError.Code { return .ENOSPC } - - /// Illegal seek. - public static var ESPIPE: POSIXError.Code { return .ESPIPE } - - /// Read-only file system. - public static var EROFS: POSIXError.Code { return .EROFS } - - /// Too many links. - public static var EMLINK: POSIXError.Code { return .EMLINK } - - /// Broken pipe. - public static var EPIPE: POSIXError.Code { return .EPIPE } - - /// Math Software - - /// Numerical argument out of domain. - public static var EDOM: POSIXError.Code { return .EDOM } - - /// Result too large. - public static var ERANGE: POSIXError.Code { return .ERANGE } - - /// Non-blocking and interrupt I/O. - - /// Resource temporarily unavailable. - public static var EAGAIN: POSIXError.Code { return .EAGAIN } - - #if !os(Windows) - /// Operation would block. - public static var EWOULDBLOCK: POSIXError.Code { return .EWOULDBLOCK } - - /// Operation now in progress. - public static var EINPROGRESS: POSIXError.Code { return .EINPROGRESS } - - /// Operation already in progress. - public static var EALREADY: POSIXError.Code { return .EALREADY } - #endif - - /// IPC/Network software -- argument errors. - - #if !os(Windows) - /// Socket operation on non-socket. - public static var ENOTSOCK: POSIXError.Code { return .ENOTSOCK } - - /// Destination address required. - public static var EDESTADDRREQ: POSIXError.Code { return .EDESTADDRREQ } - - /// Message too long. - public static var EMSGSIZE: POSIXError.Code { return .EMSGSIZE } - - /// Protocol wrong type for socket. - public static var EPROTOTYPE: POSIXError.Code { return .EPROTOTYPE } - - /// Protocol not available. - public static var ENOPROTOOPT: POSIXError.Code { return .ENOPROTOOPT } - - /// Protocol not supported. - public static var EPROTONOSUPPORT: POSIXError.Code { return .EPROTONOSUPPORT } - - /// Socket type not supported. - public static var ESOCKTNOSUPPORT: POSIXError.Code { return .ESOCKTNOSUPPORT } - #endif - - #if canImport(Darwin) - /// Operation not supported. - public static var ENOTSUP: POSIXError.Code { return .ENOTSUP } - #endif - - #if !os(Windows) - /// Protocol family not supported. - public static var EPFNOSUPPORT: POSIXError.Code { return .EPFNOSUPPORT } - - /// Address family not supported by protocol family. - public static var EAFNOSUPPORT: POSIXError.Code { return .EAFNOSUPPORT } - - /// Address already in use. - public static var EADDRINUSE: POSIXError.Code { return .EADDRINUSE } - - /// Can't assign requested address. - public static var EADDRNOTAVAIL: POSIXError.Code { return .EADDRNOTAVAIL } - #endif - - /// IPC/Network software -- operational errors - - #if !os(Windows) - /// Network is down. - public static var ENETDOWN: POSIXError.Code { return .ENETDOWN } - - /// Network is unreachable. - public static var ENETUNREACH: POSIXError.Code { return .ENETUNREACH } - - /// Network dropped connection on reset. - public static var ENETRESET: POSIXError.Code { return .ENETRESET } - - /// Software caused connection abort. - public static var ECONNABORTED: POSIXError.Code { return .ECONNABORTED } - - /// Connection reset by peer. - public static var ECONNRESET: POSIXError.Code { return .ECONNRESET } - - /// No buffer space available. - public static var ENOBUFS: POSIXError.Code { return .ENOBUFS } - - /// Socket is already connected. - public static var EISCONN: POSIXError.Code { return .EISCONN } - - /// Socket is not connected. - public static var ENOTCONN: POSIXError.Code { return .ENOTCONN } - - /// Can't send after socket shutdown. - public static var ESHUTDOWN: POSIXError.Code { return .ESHUTDOWN } - - /// Too many references: can't splice. - public static var ETOOMANYREFS: POSIXError.Code { return .ETOOMANYREFS } - - /// Operation timed out. - public static var ETIMEDOUT: POSIXError.Code { return .ETIMEDOUT } - - /// Connection refused. - public static var ECONNREFUSED: POSIXError.Code { return .ECONNREFUSED } - - /// Too many levels of symbolic links. - public static var ELOOP: POSIXError.Code { return .ELOOP } - #endif - - /// File name too long. - public static var ENAMETOOLONG: POSIXError.Code { return .ENAMETOOLONG } - - #if !os(Windows) - /// Host is down. - public static var EHOSTDOWN: POSIXError.Code { return .EHOSTDOWN } - - /// No route to host. - public static var EHOSTUNREACH: POSIXError.Code { return .EHOSTUNREACH } - #endif - - /// Directory not empty. - public static var ENOTEMPTY: POSIXError.Code { return .ENOTEMPTY } - - /// Quotas - - #if canImport(Darwin) - /// Too many processes. - public static var EPROCLIM: POSIXError.Code { return .EPROCLIM } - #endif - - #if !os(Windows) - /// Too many users. - public static var EUSERS: POSIXError.Code { return .EUSERS } - - /// Disk quota exceeded. - public static var EDQUOT: POSIXError.Code { return .EDQUOT } - #endif - - /// Network File System - - #if !os(Windows) - /// Stale NFS file handle. - public static var ESTALE: POSIXError.Code { return .ESTALE } - - /// Too many levels of remote in path. - public static var EREMOTE: POSIXError.Code { return .EREMOTE } - #endif - - #if canImport(Darwin) - /// RPC struct is bad. - public static var EBADRPC: POSIXError.Code { return .EBADRPC } - - /// RPC version wrong. - public static var ERPCMISMATCH: POSIXError.Code { return .ERPCMISMATCH } - - /// RPC prog. not avail. - public static var EPROGUNAVAIL: POSIXError.Code { return .EPROGUNAVAIL } - - /// Program version wrong. - public static var EPROGMISMATCH: POSIXError.Code { return .EPROGMISMATCH } - - /// Bad procedure for program. - public static var EPROCUNAVAIL: POSIXError.Code { return .EPROCUNAVAIL } - #endif - - /// No locks available. - public static var ENOLCK: POSIXError.Code { return .ENOLCK } - - /// Function not implemented. - public static var ENOSYS: POSIXError.Code { return .ENOSYS } - - #if canImport(Darwin) - /// Inappropriate file type or format. - public static var EFTYPE: POSIXError.Code { return .EFTYPE } - - /// Authentication error. - public static var EAUTH: POSIXError.Code { return .EAUTH } - - /// Need authenticator. - public static var ENEEDAUTH: POSIXError.Code { return .ENEEDAUTH } - #endif - - /// Intelligent device errors. - - #if canImport(Darwin) - /// Device power is off. - public static var EPWROFF: POSIXError.Code { return .EPWROFF } - - /// Device error, e.g. paper out. - public static var EDEVERR: POSIXError.Code { return .EDEVERR } - #endif - - #if !os(Windows) - /// Value too large to be stored in data type. - public static var EOVERFLOW: POSIXError.Code { return .EOVERFLOW } - #endif - - /// Program loading errors. - - #if canImport(Darwin) - /// Bad executable. - public static var EBADEXEC: POSIXError.Code { return .EBADEXEC } - #endif - - #if canImport(Darwin) - /// Bad CPU type in executable. - public static var EBADARCH: POSIXError.Code { return .EBADARCH } - - /// Shared library version mismatch. - public static var ESHLIBVERS: POSIXError.Code { return .ESHLIBVERS } - - /// Malformed Macho file. - public static var EBADMACHO: POSIXError.Code { return .EBADMACHO } - #endif - - /// Operation canceled. - public static var ECANCELED: POSIXError.Code { -#if os(Windows) - return POSIXError.Code(rawValue: Int32(ERROR_CANCELLED))! -#else - return .ECANCELED -#endif - } - - #if !os(Windows) - /// Identifier removed. - public static var EIDRM: POSIXError.Code { return .EIDRM } - - /// No message of desired type. - public static var ENOMSG: POSIXError.Code { return .ENOMSG } - #endif - - /// Illegal byte sequence. - public static var EILSEQ: POSIXError.Code { return .EILSEQ } - - #if canImport(Darwin) - /// Attribute not found. - public static var ENOATTR: POSIXError.Code { return .ENOATTR } - #endif - - #if !os(Windows) - /// Bad message. - public static var EBADMSG: POSIXError.Code { return .EBADMSG } - - #if !os(OpenBSD) - /// Reserved. - public static var EMULTIHOP: POSIXError.Code { return .EMULTIHOP } - - /// No message available on STREAM. - public static var ENODATA: POSIXError.Code { return .ENODATA } - - /// Reserved. - public static var ENOLINK: POSIXError.Code { return .ENOLINK } - - /// No STREAM resources. - public static var ENOSR: POSIXError.Code { return .ENOSR } - - /// Not a STREAM. - public static var ENOSTR: POSIXError.Code { return .ENOSTR } - #endif - - /// Protocol error. - public static var EPROTO: POSIXError.Code { return .EPROTO } - - #if !os(OpenBSD) - /// STREAM ioctl timeout. - public static var ETIME: POSIXError.Code { return .ETIME } - #endif - #endif - - #if canImport(Darwin) - /// No such policy registered. - public static var ENOPOLICY: POSIXError.Code { return .ENOPOLICY } - #endif - - #if !os(Windows) - /// State not recoverable. - public static var ENOTRECOVERABLE: POSIXError.Code { return .ENOTRECOVERABLE } - - /// Previous owner died. - public static var EOWNERDEAD: POSIXError.Code { return .EOWNERDEAD } - #endif - - #if canImport(Darwin) - /// Interface output queue is full. - public static var EQFULL: POSIXError.Code { return .EQFULL } - #endif -} - enum UnknownNSError: Error { case missingError } diff --git a/Sources/Foundation/NSStringAPI.swift b/Sources/Foundation/NSStringAPI.swift index efd7b38c39..00b5d08bca 100644 --- a/Sources/Foundation/NSStringAPI.swift +++ b/Sources/Foundation/NSStringAPI.swift @@ -81,6 +81,11 @@ internal func _persistCString(_ p: UnsafePointer?) -> [CChar]? { return result } +extension String { + public typealias EncodingConversionOptions = NSString.EncodingConversionOptions + public typealias EnumerationOptions = NSString.EnumerationOptions +} + extension String { //===--- Class Methods --------------------------------------------------===// //===--------------------------------------------------------------------===// @@ -907,28 +912,6 @@ extension StringProtocol { } } - // - (NSData *)dataUsingEncoding:(NSStringEncoding)encoding - // - // - (NSData *) - // dataUsingEncoding:(NSStringEncoding)encoding - // allowLossyConversion:(BOOL)flag - - /// Returns a `Data` containing a representation of - /// the `String` encoded using a given encoding. - public func data( - using encoding: String.Encoding, - allowLossyConversion: Bool = false - ) -> Data? { - switch encoding { - case .utf8: - return Data(self.utf8) - default: - return _ns.data( - using: encoding.rawValue, - allowLossyConversion: allowLossyConversion) - } - } - // @property NSString* decomposedStringWithCanonicalMapping; /// A string created by normalizing the string's contents using Form D. diff --git a/Sources/Foundation/Resources/Info.plist b/Sources/Foundation/Resources/Info.plist deleted file mode 100644 index 0cc65760d6..0000000000 --- a/Sources/Foundation/Resources/Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - SwiftFoundation - CFBundleIdentifier - org.swift.Foundation - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - SwiftFoundation - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSHumanReadableCopyright - Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors - NSPrincipalClass - - - diff --git a/Sources/Foundation/StringEncodings.swift b/Sources/Foundation/StringEncodings.swift index 70f74a6f2e..6f9d882ac3 100644 --- a/Sources/Foundation/StringEncodings.swift +++ b/Sources/Foundation/StringEncodings.swift @@ -1,83 +1,39 @@ -extension String { - public struct Encoding : RawRepresentable { - public var rawValue: UInt - public init(rawValue: UInt) { self.rawValue = rawValue } - - public static let ascii = Encoding(rawValue: 1) - public static let nextstep = Encoding(rawValue: 2) - public static let japaneseEUC = Encoding(rawValue: 3) - public static let utf8 = Encoding(rawValue: 4) - public static let isoLatin1 = Encoding(rawValue: 5) - public static let symbol = Encoding(rawValue: 6) - public static let nonLossyASCII = Encoding(rawValue: 7) - public static let shiftJIS = Encoding(rawValue: 8) - public static let isoLatin2 = Encoding(rawValue: 9) - public static let unicode = Encoding(rawValue: 10) - public static let windowsCP1251 = Encoding(rawValue: 11) - public static let windowsCP1252 = Encoding(rawValue: 12) - public static let windowsCP1253 = Encoding(rawValue: 13) - public static let windowsCP1254 = Encoding(rawValue: 14) - public static let windowsCP1250 = Encoding(rawValue: 15) - public static let iso2022JP = Encoding(rawValue: 21) - public static let macOSRoman = Encoding(rawValue: 30) - public static let utf16 = Encoding.unicode - public static let utf16BigEndian = Encoding(rawValue: 0x90000100) - public static let utf16LittleEndian = Encoding(rawValue: 0x94000100) - public static let utf32 = Encoding(rawValue: 0x8c000100) - public static let utf32BigEndian = Encoding(rawValue: 0x98000100) - public static let utf32LittleEndian = Encoding(rawValue: 0x9c000100) +extension String.Encoding { + // Map selected IANA character set names to encodings, see + // https://www.iana.org/assignments/character-sets/character-sets.xhtml + internal init?(charSet: String) { + let encoding: String.Encoding? - // Map selected IANA character set names to encodings, see - // https://www.iana.org/assignments/character-sets/character-sets.xhtml - internal init?(charSet: String) { - let encoding: Encoding? - - switch charSet.lowercased() { - case "us-ascii": encoding = .ascii - case "utf-8": encoding = .utf8 - case "utf-16": encoding = .utf16 - case "utf-16be": encoding = .utf16BigEndian - case "utf-16le": encoding = .utf16LittleEndian - case "utf-32": encoding = .utf32 - case "utf-32be": encoding = .utf32BigEndian - case "utf-32le": encoding = .utf32LittleEndian - case "iso-8859-1": encoding = .isoLatin1 - case "iso-8859-2": encoding = .isoLatin2 - case "iso-2022-jp": encoding = .iso2022JP - case "windows-1250": encoding = .windowsCP1250 - case "windows-1251": encoding = .windowsCP1251 - case "windows-1252": encoding = .windowsCP1252 - case "windows-1253": encoding = .windowsCP1253 - case "windows-1254": encoding = .windowsCP1254 - case "shift_jis": encoding = .shiftJIS - case "euc-jp": encoding = .japaneseEUC - case "macintosh": encoding = .macOSRoman - default: encoding = nil - } - guard let value = encoding?.rawValue else { - return nil - } - rawValue = value + switch charSet.lowercased() { + case "us-ascii": encoding = .ascii + case "utf-8": encoding = .utf8 + case "utf-16": encoding = .utf16 + case "utf-16be": encoding = .utf16BigEndian + case "utf-16le": encoding = .utf16LittleEndian + case "utf-32": encoding = .utf32 + case "utf-32be": encoding = .utf32BigEndian + case "utf-32le": encoding = .utf32LittleEndian + case "iso-8859-1": encoding = .isoLatin1 + case "iso-8859-2": encoding = .isoLatin2 + case "iso-2022-jp": encoding = .iso2022JP + case "windows-1250": encoding = .windowsCP1250 + case "windows-1251": encoding = .windowsCP1251 + case "windows-1252": encoding = .windowsCP1252 + case "windows-1253": encoding = .windowsCP1253 + case "windows-1254": encoding = .windowsCP1254 + case "shift_jis": encoding = .shiftJIS + case "euc-jp": encoding = .japaneseEUC + case "macintosh": encoding = .macOSRoman + default: encoding = nil } - } - - public typealias EncodingConversionOptions = NSString.EncodingConversionOptions - public typealias EnumerationOptions = NSString.EnumerationOptions - public typealias CompareOptions = NSString.CompareOptions -} - -extension String.Encoding : Hashable { - // ==, hash(into:) supplied by RawRepresentable -} - -extension String.Encoding : CustomStringConvertible { - public var description: String { - return String.localizedName(of: self) + guard let value = encoding?.rawValue else { + return nil + } + rawValue = value } } - @available(*, unavailable, renamed: "String.Encoding") public typealias NSStringEncoding = UInt From 8017faab2c3b515078eb2b7a591a3eb097b691f9 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Fri, 2 Feb 2024 16:28:04 -0800 Subject: [PATCH 007/198] Remove legacy Darwin files --- Darwin/Config/install-swiftmodules.sh | 32 - Darwin/Config/overlay-base.xcconfig | 49 - Darwin/Config/overlay-debug.xcconfig | 24 - Darwin/Config/overlay-release.xcconfig | 24 - Darwin/Config/overlay-shared.xcconfig | 40 - Darwin/Config/overlay-tests-shared.xcconfig | 31 - .../CoreFoundationTests.swift | 18 - .../CoreFoundationTests.xcconfig | 15 - .../Info.plist | 22 - .../CoreFoundation.swift | 26 - .../CoreFoundation.xcconfig | 21 - .../magic-symbols-for-install-name.c | 13 - .../magic-symbols-for-install-name.h | 100 - .../CodableTests.swift | 865 ---- .../FoundationBridge.h | 97 - .../FoundationBridge.m | 279 -- .../FoundationTests.xcconfig | 16 - .../Foundation-swiftoverlay-Tests/Info.plist | 22 - .../StdlibUnittest checkEquatable.swift | 124 - .../StdlibUnittest checkHashable.swift | 178 - .../StdlibUnittest expectEqual Types.swift | 33 - .../TestAffineTransform.swift | 396 -- .../TestCalendar.swift | 296 -- .../TestCharacterSet.swift | 327 -- .../TestData.swift | 4142 ----------------- .../TestDate.swift | 204 - .../TestDateInterval.swift | 191 - .../TestDecimal.swift | 784 ---- .../TestFileManager.swift | 116 - .../TestIndexPath.swift | 737 --- .../TestIndexSet.swift | 840 ---- .../TestJSONEncoder.swift | 1691 ------- .../TestLocale.swift | 127 - .../TestMeasurement.swift | 220 - .../TestNSRange.swift | 142 - .../TestNSString.swift | 50 - .../TestNotification.swift | 86 - .../TestPersonNameComponents.swift | 96 - .../TestPlistEncoder.swift | 857 ---- .../TestProgress.swift | 62 - .../TestTimeZone.swift | 79 - .../TestURL.swift | 410 -- .../TestUUID.swift | 133 - .../TestUserInfo.swift | 170 - .../project.pbxproj | 1003 ---- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../CoreFoundation-swiftoverlay.xcscheme | 80 - .../Foundation-swiftoverlay.xcscheme | 77 - .../AffineTransform.swift | 362 -- Darwin/Foundation-swiftoverlay/Boxing.swift | 64 - .../Foundation-swiftoverlay/BundleLookup.mm | 46 - Darwin/Foundation-swiftoverlay/Calendar.swift | 1164 ----- .../CharacterSet.swift | 829 ---- .../Foundation-swiftoverlay/CheckClass.swift | 67 - Darwin/Foundation-swiftoverlay/Codable.swift | 80 - .../Collections+DataProtocol.swift | 61 - .../CombineTypealiases.swift | 23 - .../ContiguousBytes.swift | 100 - Darwin/Foundation-swiftoverlay/Data.swift | 2853 ------------ .../DataProtocol.swift | 295 -- Darwin/Foundation-swiftoverlay/DataThunks.m | 176 - Darwin/Foundation-swiftoverlay/Date.swift | 297 -- .../DateComponents.swift | 429 -- .../DateInterval.swift | 228 - Darwin/Foundation-swiftoverlay/Decimal.swift | 756 --- .../DispatchData+DataProtocol.swift | 56 - .../Foundation-swiftoverlay/FileManager.swift | 56 - .../Foundation-swiftoverlay/Foundation.swift | 245 - .../Foundation.xcconfig | 32 - .../Foundation-swiftoverlay/IndexPath.swift | 767 --- Darwin/Foundation-swiftoverlay/IndexSet.swift | 899 ---- .../Foundation-swiftoverlay/JSONEncoder.swift | 2583 ---------- Darwin/Foundation-swiftoverlay/Locale.swift | 501 -- .../Foundation-swiftoverlay/Measurement.swift | 358 -- Darwin/Foundation-swiftoverlay/NSArray.swift | 166 - Darwin/Foundation-swiftoverlay/NSCoder.swift | 231 - .../NSData+DataProtocol.swift | 56 - Darwin/Foundation-swiftoverlay/NSDate.swift | 28 - .../NSDictionary.swift | 465 -- Darwin/Foundation-swiftoverlay/NSError.swift | 3330 ------------- .../NSExpression.swift | 28 - .../NSFastEnumeration.swift | 96 - .../Foundation-swiftoverlay/NSGeometry.swift | 37 - .../Foundation-swiftoverlay/NSIndexSet.swift | 51 - .../NSItemProvider.swift | 56 - Darwin/Foundation-swiftoverlay/NSNumber.swift | 700 --- Darwin/Foundation-swiftoverlay/NSObject.swift | 313 -- .../NSOrderedCollectionDifference.swift | 106 - .../Foundation-swiftoverlay/NSPredicate.swift | 22 - Darwin/Foundation-swiftoverlay/NSRange.swift | 249 - Darwin/Foundation-swiftoverlay/NSSet.swift | 195 - .../NSSortDescriptor.swift | 32 - Darwin/Foundation-swiftoverlay/NSString.swift | 109 - .../Foundation-swiftoverlay/NSStringAPI.swift | 2215 --------- .../NSStringEncodings.swift | 183 - .../NSTextCheckingResult.swift | 31 - Darwin/Foundation-swiftoverlay/NSURL.swift | 21 - .../NSUndoManager.swift | 28 - Darwin/Foundation-swiftoverlay/NSValue.swift | 352 -- .../Notification.swift | 166 - .../PersonNameComponents.swift | 181 - .../PlistEncoder.swift | 1851 -------- .../Pointers+DataProtocol.swift | 24 - Darwin/Foundation-swiftoverlay/Progress.swift | 85 - .../Publishers+KeyValueObserving.swift | 210 - .../Publishers+Locking.swift | 117 - .../Publishers+NotificationCenter.swift | 183 - .../Publishers+Timer.swift | 328 -- .../Publishers+URLSession.swift | 175 - .../ReferenceConvertible.swift | 20 - Darwin/Foundation-swiftoverlay/Scanner.swift | 217 - .../Schedulers+Date.swift | 33 - .../Schedulers+OperationQueue.swift | 214 - .../Schedulers+RunLoop.swift | 199 - Darwin/Foundation-swiftoverlay/String.swift | 124 - Darwin/Foundation-swiftoverlay/TimeZone.swift | 303 -- Darwin/Foundation-swiftoverlay/URL.swift | 1240 ----- Darwin/Foundation-swiftoverlay/URLCache.swift | 20 - .../URLComponents.swift | 517 -- .../Foundation-swiftoverlay/URLRequest.swift | 328 -- .../Foundation-swiftoverlay/URLSession.swift | 69 - Darwin/Foundation-swiftoverlay/UUID.swift | 172 - .../magic-symbols-for-install-name.c | 13 - .../magic-symbols-for-install-name.h | 100 - Darwin/shims/CFCharacterSetShims.h | 26 - Darwin/shims/CFHashingShims.h | 41 - Darwin/shims/CoreFoundationOverlayShims.h | 21 - Darwin/shims/FoundationOverlayShims.h | 82 - Darwin/shims/FoundationShimSupport.h | 33 - Darwin/shims/NSCalendarShims.h | 40 - Darwin/shims/NSCharacterSetShims.h | 41 - Darwin/shims/NSCoderShims.h | 49 - Darwin/shims/NSDataShims.h | 29 - Darwin/shims/NSDictionaryShims.h | 21 - Darwin/shims/NSErrorShims.h | 23 - Darwin/shims/NSFileManagerShims.h | 34 - Darwin/shims/NSIndexPathShims.h | 22 - Darwin/shims/NSIndexSetShims.h | 37 - Darwin/shims/NSKeyedArchiverShims.h | 33 - Darwin/shims/NSLocaleShims.h | 34 - Darwin/shims/NSTimeZoneShims.h | 34 - Darwin/shims/NSUndoManagerShims.h | 21 - Darwin/shims/module.modulemap | 19 - 144 files changed, 45316 deletions(-) delete mode 100755 Darwin/Config/install-swiftmodules.sh delete mode 100644 Darwin/Config/overlay-base.xcconfig delete mode 100644 Darwin/Config/overlay-debug.xcconfig delete mode 100644 Darwin/Config/overlay-release.xcconfig delete mode 100644 Darwin/Config/overlay-shared.xcconfig delete mode 100644 Darwin/Config/overlay-tests-shared.xcconfig delete mode 100644 Darwin/CoreFoundation-swiftoverlay-Tests/CoreFoundationTests.swift delete mode 100644 Darwin/CoreFoundation-swiftoverlay-Tests/CoreFoundationTests.xcconfig delete mode 100644 Darwin/CoreFoundation-swiftoverlay-Tests/Info.plist delete mode 100644 Darwin/CoreFoundation-swiftoverlay/CoreFoundation.swift delete mode 100644 Darwin/CoreFoundation-swiftoverlay/CoreFoundation.xcconfig delete mode 100644 Darwin/CoreFoundation-swiftoverlay/magic-symbols-for-install-name.c delete mode 100644 Darwin/CoreFoundation-swiftoverlay/magic-symbols-for-install-name.h delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/CodableTests.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/FoundationBridge.h delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/FoundationBridge.m delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/FoundationTests.xcconfig delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/Info.plist delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/StdlibUnittest checkEquatable.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/StdlibUnittest checkHashable.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/StdlibUnittest expectEqual Types.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestAffineTransform.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestCalendar.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestCharacterSet.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestData.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestDate.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestDateInterval.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestDecimal.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestFileManager.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestIndexPath.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestIndexSet.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestJSONEncoder.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestLocale.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestMeasurement.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestNSRange.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestNSString.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestNotification.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestPersonNameComponents.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestPlistEncoder.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestProgress.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestTimeZone.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestURL.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestUUID.swift delete mode 100644 Darwin/Foundation-swiftoverlay-Tests/TestUserInfo.swift delete mode 100644 Darwin/Foundation-swiftoverlay.xcodeproj/project.pbxproj delete mode 100644 Darwin/Foundation-swiftoverlay.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 Darwin/Foundation-swiftoverlay.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 Darwin/Foundation-swiftoverlay.xcodeproj/xcshareddata/xcschemes/CoreFoundation-swiftoverlay.xcscheme delete mode 100644 Darwin/Foundation-swiftoverlay.xcodeproj/xcshareddata/xcschemes/Foundation-swiftoverlay.xcscheme delete mode 100644 Darwin/Foundation-swiftoverlay/AffineTransform.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Boxing.swift delete mode 100644 Darwin/Foundation-swiftoverlay/BundleLookup.mm delete mode 100644 Darwin/Foundation-swiftoverlay/Calendar.swift delete mode 100644 Darwin/Foundation-swiftoverlay/CharacterSet.swift delete mode 100644 Darwin/Foundation-swiftoverlay/CheckClass.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Codable.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Collections+DataProtocol.swift delete mode 100644 Darwin/Foundation-swiftoverlay/CombineTypealiases.swift delete mode 100644 Darwin/Foundation-swiftoverlay/ContiguousBytes.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Data.swift delete mode 100644 Darwin/Foundation-swiftoverlay/DataProtocol.swift delete mode 100644 Darwin/Foundation-swiftoverlay/DataThunks.m delete mode 100644 Darwin/Foundation-swiftoverlay/Date.swift delete mode 100644 Darwin/Foundation-swiftoverlay/DateComponents.swift delete mode 100644 Darwin/Foundation-swiftoverlay/DateInterval.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Decimal.swift delete mode 100644 Darwin/Foundation-swiftoverlay/DispatchData+DataProtocol.swift delete mode 100644 Darwin/Foundation-swiftoverlay/FileManager.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Foundation.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Foundation.xcconfig delete mode 100644 Darwin/Foundation-swiftoverlay/IndexPath.swift delete mode 100644 Darwin/Foundation-swiftoverlay/IndexSet.swift delete mode 100644 Darwin/Foundation-swiftoverlay/JSONEncoder.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Locale.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Measurement.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSArray.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSCoder.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSData+DataProtocol.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSDate.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSDictionary.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSError.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSExpression.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSFastEnumeration.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSGeometry.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSIndexSet.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSItemProvider.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSNumber.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSObject.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSOrderedCollectionDifference.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSPredicate.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSRange.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSSet.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSSortDescriptor.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSString.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSStringAPI.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSStringEncodings.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSTextCheckingResult.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSURL.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSUndoManager.swift delete mode 100644 Darwin/Foundation-swiftoverlay/NSValue.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Notification.swift delete mode 100644 Darwin/Foundation-swiftoverlay/PersonNameComponents.swift delete mode 100644 Darwin/Foundation-swiftoverlay/PlistEncoder.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Pointers+DataProtocol.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Progress.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Publishers+KeyValueObserving.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Publishers+Locking.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Publishers+NotificationCenter.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Publishers+Timer.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Publishers+URLSession.swift delete mode 100644 Darwin/Foundation-swiftoverlay/ReferenceConvertible.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Scanner.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Schedulers+Date.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Schedulers+OperationQueue.swift delete mode 100644 Darwin/Foundation-swiftoverlay/Schedulers+RunLoop.swift delete mode 100644 Darwin/Foundation-swiftoverlay/String.swift delete mode 100644 Darwin/Foundation-swiftoverlay/TimeZone.swift delete mode 100644 Darwin/Foundation-swiftoverlay/URL.swift delete mode 100644 Darwin/Foundation-swiftoverlay/URLCache.swift delete mode 100644 Darwin/Foundation-swiftoverlay/URLComponents.swift delete mode 100644 Darwin/Foundation-swiftoverlay/URLRequest.swift delete mode 100644 Darwin/Foundation-swiftoverlay/URLSession.swift delete mode 100644 Darwin/Foundation-swiftoverlay/UUID.swift delete mode 100644 Darwin/Foundation-swiftoverlay/magic-symbols-for-install-name.c delete mode 100644 Darwin/Foundation-swiftoverlay/magic-symbols-for-install-name.h delete mode 100644 Darwin/shims/CFCharacterSetShims.h delete mode 100644 Darwin/shims/CFHashingShims.h delete mode 100644 Darwin/shims/CoreFoundationOverlayShims.h delete mode 100644 Darwin/shims/FoundationOverlayShims.h delete mode 100644 Darwin/shims/FoundationShimSupport.h delete mode 100644 Darwin/shims/NSCalendarShims.h delete mode 100644 Darwin/shims/NSCharacterSetShims.h delete mode 100644 Darwin/shims/NSCoderShims.h delete mode 100644 Darwin/shims/NSDataShims.h delete mode 100644 Darwin/shims/NSDictionaryShims.h delete mode 100644 Darwin/shims/NSErrorShims.h delete mode 100644 Darwin/shims/NSFileManagerShims.h delete mode 100644 Darwin/shims/NSIndexPathShims.h delete mode 100644 Darwin/shims/NSIndexSetShims.h delete mode 100644 Darwin/shims/NSKeyedArchiverShims.h delete mode 100644 Darwin/shims/NSLocaleShims.h delete mode 100644 Darwin/shims/NSTimeZoneShims.h delete mode 100644 Darwin/shims/NSUndoManagerShims.h delete mode 100644 Darwin/shims/module.modulemap diff --git a/Darwin/Config/install-swiftmodules.sh b/Darwin/Config/install-swiftmodules.sh deleted file mode 100755 index 44b43602a4..0000000000 --- a/Darwin/Config/install-swiftmodules.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh -#===----------------------------------------------------------------------===// -# -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2020 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -# -#===----------------------------------------------------------------------===// - -set -e -#set -xv - -# This only needs to run during installation, but that includes "installapi". -[ "$ACTION" = "installapi" -o "$ACTION" = "install" ] || exit 0 - -[ "$SKIP_INSTALL" != "YES" ] || exit 0 -[ "$SWIFT_INSTALL_MODULES" = "YES" ] || exit 0 - -srcmodule="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.swiftmodule" -dstpath="${INSTALL_ROOT}/${INSTALL_PATH}/" - -if [ ! -d "$srcmodule" ]; then - echo "Cannot find Swift module at $srcmodule" >&2 - exit 1 -fi - -mkdir -p "$dstpath" -cp -r "$srcmodule" "$dstpath" diff --git a/Darwin/Config/overlay-base.xcconfig b/Darwin/Config/overlay-base.xcconfig deleted file mode 100644 index 944ea637d7..0000000000 --- a/Darwin/Config/overlay-base.xcconfig +++ /dev/null @@ -1,49 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// Configuration settings file format documentation can be found at: -// https://help.apple.com/xcode/#/dev745c5c974 - -// Base configuration for Swift overlays. - -EXECUTABLE_PREFIX = libswift -SWIFT_OVERLAY_INSTALL_PATH=/usr/lib/swift -STRIP_SWIFT_SYMBOLS = NO -BUILD_LIBRARY_FOR_DISTRIBUTION = YES -GENERATE_TEXT_BASED_STUBS = YES -SWIFT_LINK_OBJC_RUNTIME = NO -CLANG_LINK_OBJC_RUNTIME = NO - -// Enable InstallAPI. -SUPPORTS_TEXT_BASED_API = YES - -// We need to run install-swiftmodules.sh during the installapi action. -INSTALLHDRS_SCRIPT_PHASE = YES - -INSTALL_PATH=$(SWIFT_OVERLAY_INSTALL_PATH) - -OTHER_SWIFT_FLAGS = -module-link-name $(SWIFT_MODULE_LINK_NAME) -autolink-force-load -runtime-compatibility-version none -SWIFT_MODULE_LINK_NAME = swift$(PRODUCT_NAME) -SWIFT_ENABLE_INCREMENTAL_COMPILATION = NO // YES conflicts with -autolink-force-load - -// Custom build settings for install-swiftmodules.sh. -SWIFT_INSTALL_MODULES = YES -SWIFT_MODULE_INSTALL_PATH = $(INSTALL_PATH) - -// We need to generate swiftmodules for these architectures, so that they can be -// imported in apps that are deployable on OS versions that support them. -// However, we can only generate module files for these; we can't emit binaries. -// (All imported definitions will be unavailable on these older OS versions.) -SWIFT_MODULE_ONLY_IPHONEOS_DEPLOYMENT_TARGET = 10.3 -SWIFT_MODULE_ONLY_ARCHS_iphoneos = armv7 armv7s -SWIFT_MODULE_ONLY_ARCHS_iphonesimulator = i386 -SWIFT_MODULE_ONLY_ARCHS = $(SWIFT_MODULE_ONLY_ARCHS_$(PLATFORM_NAME)) diff --git a/Darwin/Config/overlay-debug.xcconfig b/Darwin/Config/overlay-debug.xcconfig deleted file mode 100644 index 916e0be012..0000000000 --- a/Darwin/Config/overlay-debug.xcconfig +++ /dev/null @@ -1,24 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// Configuration settings file format documentation can be found at: -// https://help.apple.com/xcode/#/dev745c5c974 - -#include "../Config/overlay-base.xcconfig" - -ONLY_ACTIVE_ARCH = YES -ENABLE_TESTABILITY = YES -GCC_OPTIMIZATION_LEVEL = 0 -SWIFT_OPTIMIZATION_LEVEL = -Onone -DEBUG_INFORMATION_FORMAT = dwarf -SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG -GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 $(inherited) diff --git a/Darwin/Config/overlay-release.xcconfig b/Darwin/Config/overlay-release.xcconfig deleted file mode 100644 index f26bdf205c..0000000000 --- a/Darwin/Config/overlay-release.xcconfig +++ /dev/null @@ -1,24 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// Configuration settings file format documentation can be found at: -// https://help.apple.com/xcode/#/dev745c5c974 - -#include "../Config/overlay-base.xcconfig" - -ONLY_ACTIVE_ARCH = NO -ENABLE_TESTABILITY = NO -GCC_OPTIMIZATION_LEVEL = s -SWIFT_OPTIMIZATION_LEVEL = -O -DEBUG_INFORMATION_FORMAT = dwarf-with-dsym -SWIFT_COMPILATION_MODE = wholemodule -ENABLE_NS_ASSERTIONS = NO diff --git a/Darwin/Config/overlay-shared.xcconfig b/Darwin/Config/overlay-shared.xcconfig deleted file mode 100644 index 0140c6e766..0000000000 --- a/Darwin/Config/overlay-shared.xcconfig +++ /dev/null @@ -1,40 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// Configuration settings file format documentation can be found at: -// https://help.apple.com/xcode/#/dev745c5c974 - -SWIFT_IS_OVERLAY = YES - -SWIFT_VERSION = 5.0 -SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator - -// TAPI needs to be told about the magic-symbols-for-install-name header. -OTHER_TAPI_FLAGS = $(inherited) -extra-public-header $(SRCROOT)/$(PRODUCT_NAME)-swiftoverlay/magic-symbols-for-install-name.h - -// Pass the module link name to C/C++ files; this is needed to generate the -// magic install name symbols for overlays that existed in Swift 5.0. -GCC_PREPROCESSOR_DEFINITIONS = SWIFT_TARGET_LIBRARY_NAME=$(SWIFT_MODULE_LINK_NAME) - -// We need to generate swiftmodules for these architectures, so that they can be -// imported in apps that are deployable on OS versions that support them. -// However, we can only generate module files for these; we can't emit binaries. -// (All imported definitions will be unavailable on these older OS versions.) -SWIFT_MODULE_ONLY_IPHONEOS_DEPLOYMENT_TARGET = 10.3 -SWIFT_MODULE_ONLY_ARCHS_iphoneos = armv7 armv7s -SWIFT_MODULE_ONLY_ARCHS_iphonesimulator = i386 -SWIFT_MODULE_ONLY_ARCHS = $(SWIFT_MODULE_ONLY_ARCHS_$(PLATFORM_NAME)) - -// Custom settings specific for the Foundation overlay -OTHER_SWIFT_FLAGS = $(inherited) -Xllvm -sil-inline-generics -Xllvm -sil-partial-specialization -ALWAYS_SEARCH_USER_PATHS = NO -CLANG_ENABLE_OBJC_ARC = NO diff --git a/Darwin/Config/overlay-tests-shared.xcconfig b/Darwin/Config/overlay-tests-shared.xcconfig deleted file mode 100644 index f692323cb0..0000000000 --- a/Darwin/Config/overlay-tests-shared.xcconfig +++ /dev/null @@ -1,31 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// Configuration settings file format documentation can be found at: -// https://help.apple.com/xcode/#/dev745c5c974 - -SWIFT_VERSION = 5.0 - -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks - -PRODUCT_NAME = $(TARGET_NAME) -INFOPLIST_FILE = $(PROJECT_DIR)/$(PRODUCT_NAME)/Info.plist - -// Can't emit a swift module interface with bridging headers -SWIFT_EMIT_MODULE_INTERFACE = NO - -CLANG_LINK_OBJC_RUNTIME = YES -SWIFT_LINK_OBJC_RUNTIME = YES -CLANG_ENABLE_OBJC_ARC = YES - -ALWAYS_SEARCH_USER_PATHS = NO diff --git a/Darwin/CoreFoundation-swiftoverlay-Tests/CoreFoundationTests.swift b/Darwin/CoreFoundation-swiftoverlay-Tests/CoreFoundationTests.swift deleted file mode 100644 index a5d35d97a0..0000000000 --- a/Darwin/CoreFoundation-swiftoverlay-Tests/CoreFoundationTests.swift +++ /dev/null @@ -1,18 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import XCTest -import CoreFoundation - -class CoreFoundationTests: XCTestCase { - // There are no tests dedicated to the CoreFoundation overlay yet. -} diff --git a/Darwin/CoreFoundation-swiftoverlay-Tests/CoreFoundationTests.xcconfig b/Darwin/CoreFoundation-swiftoverlay-Tests/CoreFoundationTests.xcconfig deleted file mode 100644 index 8eb2dc97dc..0000000000 --- a/Darwin/CoreFoundation-swiftoverlay-Tests/CoreFoundationTests.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#include "../Config/overlay-tests-shared.xcconfig" - -PRODUCT_BUNDLE_IDENTIFIER = org.swift.CoreFoundationTests diff --git a/Darwin/CoreFoundation-swiftoverlay-Tests/Info.plist b/Darwin/CoreFoundation-swiftoverlay-Tests/Info.plist deleted file mode 100644 index 64d65ca495..0000000000 --- a/Darwin/CoreFoundation-swiftoverlay-Tests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/Darwin/CoreFoundation-swiftoverlay/CoreFoundation.swift b/Darwin/CoreFoundation-swiftoverlay/CoreFoundation.swift deleted file mode 100644 index edf4ec460d..0000000000 --- a/Darwin/CoreFoundation-swiftoverlay/CoreFoundation.swift +++ /dev/null @@ -1,26 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import CoreFoundation - -public protocol _CFObject: class, Hashable {} -extension _CFObject { - public var hashValue: Int { - return Int(bitPattern: CFHash(self)) - } - public func hash(into hasher: inout Hasher) { - hasher.combine(self.hashValue) - } - public static func ==(left: Self, right: Self) -> Bool { - return CFEqual(left, right) - } -} diff --git a/Darwin/CoreFoundation-swiftoverlay/CoreFoundation.xcconfig b/Darwin/CoreFoundation-swiftoverlay/CoreFoundation.xcconfig deleted file mode 100644 index 19c0df7a34..0000000000 --- a/Darwin/CoreFoundation-swiftoverlay/CoreFoundation.xcconfig +++ /dev/null @@ -1,21 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#include "../Config/overlay-shared.xcconfig" - -PRODUCT_NAME = CoreFoundation -OTHER_LDFLAGS = $(inherited) -framework CoreFoundation - -// Use 0.0.0 as the version number for development builds. -CURRENT_PROJECT_VERSION = 0.0.0 -DYLIB_CURRENT_VERSION = $(CURRENT_PROJECT_VERSION) -MODULE_VERSION = $(CURRENT_PROJECT_VERSION) diff --git a/Darwin/CoreFoundation-swiftoverlay/magic-symbols-for-install-name.c b/Darwin/CoreFoundation-swiftoverlay/magic-symbols-for-install-name.c deleted file mode 100644 index 8c549713a8..0000000000 --- a/Darwin/CoreFoundation-swiftoverlay/magic-symbols-for-install-name.c +++ /dev/null @@ -1,13 +0,0 @@ -//===--- magic-symbols-for-install-name.c - Magic linker directive symbols ===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#include "magic-symbols-for-install-name.h" diff --git a/Darwin/CoreFoundation-swiftoverlay/magic-symbols-for-install-name.h b/Darwin/CoreFoundation-swiftoverlay/magic-symbols-for-install-name.h deleted file mode 100644 index b79359db68..0000000000 --- a/Darwin/CoreFoundation-swiftoverlay/magic-symbols-for-install-name.h +++ /dev/null @@ -1,100 +0,0 @@ -//===--- magic-symbols-for-install-name.h - Magic linker directive symbols ===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// -// -// A file containing magic symbols that instruct the linker to use a -// different install name when targeting older OSes. This file gets -// compiled into all of the libraries that are embedded for backward -// deployment. -// -//===----------------------------------------------------------------------===// - -#if defined(__APPLE__) && defined(__MACH__) - -#include -#include - -#ifndef SWIFT_TARGET_LIBRARY_NAME -#error Please define SWIFT_TARGET_LIBRARY_NAME -#endif - -#define SWIFT_RUNTIME_EXPORT __attribute__((__visibility__("default"))) - -#define RPATH_INSTALL_NAME_DIRECTIVE_IMPL2(name, major, minor) \ - SWIFT_RUNTIME_EXPORT const char install_name_ ## major ## _ ## minor \ - __asm("$ld$install_name$os" #major "." #minor "$@rpath/lib" #name ".dylib"); \ - const char install_name_ ## major ## _ ## minor = 0; - -#define RPATH_INSTALL_NAME_DIRECTIVE_IMPL(name, major, minor) \ - RPATH_INSTALL_NAME_DIRECTIVE_IMPL2(name, major, minor) - -#define RPATH_INSTALL_NAME_DIRECTIVE(major, minor) \ - RPATH_INSTALL_NAME_DIRECTIVE_IMPL(SWIFT_TARGET_LIBRARY_NAME, major, minor) - - -// Check iOS last, because TARGET_OS_IPHONE includes both watchOS and macCatalyst. -#if TARGET_OS_OSX - RPATH_INSTALL_NAME_DIRECTIVE(10, 9) - RPATH_INSTALL_NAME_DIRECTIVE(10, 10) - RPATH_INSTALL_NAME_DIRECTIVE(10, 11) - RPATH_INSTALL_NAME_DIRECTIVE(10, 12) - RPATH_INSTALL_NAME_DIRECTIVE(10, 13) - RPATH_INSTALL_NAME_DIRECTIVE(10, 14) -#elif TARGET_OS_MACCATALYST - // Note: This only applies to zippered overlays. - RPATH_INSTALL_NAME_DIRECTIVE(10, 9) - RPATH_INSTALL_NAME_DIRECTIVE(10, 10) - RPATH_INSTALL_NAME_DIRECTIVE(10, 11) - RPATH_INSTALL_NAME_DIRECTIVE(10, 12) - RPATH_INSTALL_NAME_DIRECTIVE(10, 13) - RPATH_INSTALL_NAME_DIRECTIVE(10, 14) -#elif TARGET_OS_WATCH - RPATH_INSTALL_NAME_DIRECTIVE( 2, 0) - RPATH_INSTALL_NAME_DIRECTIVE( 2, 1) - RPATH_INSTALL_NAME_DIRECTIVE( 2, 2) - RPATH_INSTALL_NAME_DIRECTIVE( 3, 0) - RPATH_INSTALL_NAME_DIRECTIVE( 3, 1) - RPATH_INSTALL_NAME_DIRECTIVE( 3, 2) - RPATH_INSTALL_NAME_DIRECTIVE( 4, 0) - RPATH_INSTALL_NAME_DIRECTIVE( 4, 1) - RPATH_INSTALL_NAME_DIRECTIVE( 4, 2) - RPATH_INSTALL_NAME_DIRECTIVE( 4, 3) - RPATH_INSTALL_NAME_DIRECTIVE( 5, 0) - RPATH_INSTALL_NAME_DIRECTIVE( 5, 1) -#elif TARGET_OS_IPHONE - RPATH_INSTALL_NAME_DIRECTIVE( 7, 0) - RPATH_INSTALL_NAME_DIRECTIVE( 7, 1) - RPATH_INSTALL_NAME_DIRECTIVE( 8, 0) - RPATH_INSTALL_NAME_DIRECTIVE( 8, 1) - RPATH_INSTALL_NAME_DIRECTIVE( 8, 2) - RPATH_INSTALL_NAME_DIRECTIVE( 8, 3) - RPATH_INSTALL_NAME_DIRECTIVE( 8, 4) - RPATH_INSTALL_NAME_DIRECTIVE( 9, 0) - RPATH_INSTALL_NAME_DIRECTIVE( 9, 1) - RPATH_INSTALL_NAME_DIRECTIVE( 9, 2) - RPATH_INSTALL_NAME_DIRECTIVE( 9, 3) - RPATH_INSTALL_NAME_DIRECTIVE(10, 0) - RPATH_INSTALL_NAME_DIRECTIVE(10, 1) - RPATH_INSTALL_NAME_DIRECTIVE(10, 2) - RPATH_INSTALL_NAME_DIRECTIVE(10, 3) - RPATH_INSTALL_NAME_DIRECTIVE(11, 0) - RPATH_INSTALL_NAME_DIRECTIVE(11, 1) - RPATH_INSTALL_NAME_DIRECTIVE(11, 2) - RPATH_INSTALL_NAME_DIRECTIVE(11, 3) - RPATH_INSTALL_NAME_DIRECTIVE(11, 4) - RPATH_INSTALL_NAME_DIRECTIVE(12, 0) - RPATH_INSTALL_NAME_DIRECTIVE(12, 1) - -#else - #error Unknown target. -#endif - -#endif // defined(__APPLE__) && defined(__MACH__) diff --git a/Darwin/Foundation-swiftoverlay-Tests/CodableTests.swift b/Darwin/Foundation-swiftoverlay-Tests/CodableTests.swift deleted file mode 100644 index 083f6d358d..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/CodableTests.swift +++ /dev/null @@ -1,865 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import CoreGraphics -import XCTest - -// MARK: - Helper Functions -@available(macOS 10.11, iOS 9.0, watchOS 2.0, tvOS 9.0, *) -func makePersonNameComponents(namePrefix: String? = nil, - givenName: String? = nil, - middleName: String? = nil, - familyName: String? = nil, - nameSuffix: String? = nil, - nickname: String? = nil) -> PersonNameComponents { - var result = PersonNameComponents() - result.namePrefix = namePrefix - result.givenName = givenName - result.middleName = middleName - result.familyName = familyName - result.nameSuffix = nameSuffix - result.nickname = nickname - return result -} - -func _debugDescription(_ value: T) -> String { - if let debugDescribable = value as? CustomDebugStringConvertible { - return debugDescribable.debugDescription - } else if let describable = value as? CustomStringConvertible { - return describable.description - } else { - return "\(value)" - } -} - -func performEncodeAndDecode(of value: T, encode: (T) throws -> Data, decode: (T.Type, Data) throws -> T, lineNumber: Int) -> T { - - let data: Data - do { - data = try encode(value) - } catch { - fatalError("\(#file):\(lineNumber): Unable to encode \(T.self) <\(_debugDescription(value))>: \(error)") - } - - do { - return try decode(T.self, data) - } catch { - fatalError("\(#file):\(lineNumber): Unable to decode \(T.self) <\(_debugDescription(value))>: \(error)") - } -} - -func expectRoundTripEquality(of value: T, encode: (T) throws -> Data, decode: (T.Type, Data) throws -> T, lineNumber: Int) where T : Equatable { - - let decoded = performEncodeAndDecode(of: value, encode: encode, decode: decode, lineNumber: lineNumber) - - XCTAssertEqual(value, decoded, "\(#file):\(lineNumber): Decoded \(T.self) <\(_debugDescription(decoded))> not equal to original <\(_debugDescription(value))>") -} - -func expectRoundTripEqualityThroughJSON(for value: T, lineNumber: Int) where T : Equatable { - let inf = "INF", negInf = "-INF", nan = "NaN" - let encode = { (_ value: T) throws -> Data in - let encoder = JSONEncoder() - encoder.nonConformingFloatEncodingStrategy = .convertToString(positiveInfinity: inf, - negativeInfinity: negInf, - nan: nan) - return try encoder.encode(value) - } - - let decode = { (_ type: T.Type, _ data: Data) throws -> T in - let decoder = JSONDecoder() - decoder.nonConformingFloatDecodingStrategy = .convertFromString(positiveInfinity: inf, - negativeInfinity: negInf, - nan: nan) - return try decoder.decode(type, from: data) - } - - expectRoundTripEquality(of: value, encode: encode, decode: decode, lineNumber: lineNumber) -} - -func expectRoundTripEqualityThroughPlist(for value: T, lineNumber: Int) where T : Equatable { - let encode = { (_ value: T) throws -> Data in - return try PropertyListEncoder().encode(value) - } - - let decode = { (_ type: T.Type,_ data: Data) throws -> T in - return try PropertyListDecoder().decode(type, from: data) - } - - expectRoundTripEquality(of: value, encode: encode, decode: decode, lineNumber: lineNumber) -} - -// MARK: - Helper Types -// A wrapper around a UUID that will allow it to be encoded at the top level of an encoder. -struct UUIDCodingWrapper : Codable, Equatable { - let value: UUID - - init(_ value: UUID) { - self.value = value - } - - static func ==(_ lhs: UUIDCodingWrapper, _ rhs: UUIDCodingWrapper) -> Bool { - return lhs.value == rhs.value - } -} - -// MARK: - Tests -class TestCodable : XCTestCase { - // MARK: - AffineTransform -#if os(macOS) - lazy var affineTransformValues: [Int : AffineTransform] = [ - #line : AffineTransform.identity, - #line : AffineTransform(), - #line : AffineTransform(translationByX: 2.0, byY: 2.0), - #line : AffineTransform(scale: 2.0), - #line : AffineTransform(rotationByDegrees: .pi / 2), - - #line : AffineTransform(m11: 1.0, m12: 2.5, m21: 66.2, m22: 40.2, tX: -5.5, tY: 3.7), - #line : AffineTransform(m11: -55.66, m12: 22.7, m21: 1.5, m22: 0.0, tX: -22, tY: -33), - #line : AffineTransform(m11: 4.5, m12: 1.1, m21: 0.025, m22: 0.077, tX: -0.55, tY: 33.2), - #line : AffineTransform(m11: 7.0, m12: -2.3, m21: 6.7, m22: 0.25, tX: 0.556, tY: 0.99), - #line : AffineTransform(m11: 0.498, m12: -0.284, m21: -0.742, m22: 0.3248, tX: 12, tY: 44) - ] - - func test_AffineTransform_JSON() { - for (testLine, transform) in affineTransformValues { - expectRoundTripEqualityThroughJSON(for: transform, lineNumber: testLine) - } - } - - func test_AffineTransform_Plist() { - for (testLine, transform) in affineTransformValues { - expectRoundTripEqualityThroughPlist(for: transform, lineNumber: testLine) - } - } -#endif - - // MARK: - Calendar - lazy var calendarValues: [Int : Calendar] = [ - #line : Calendar(identifier: .gregorian), - #line : Calendar(identifier: .buddhist), - #line : Calendar(identifier: .chinese), - #line : Calendar(identifier: .coptic), - #line : Calendar(identifier: .ethiopicAmeteMihret), - #line : Calendar(identifier: .ethiopicAmeteAlem), - #line : Calendar(identifier: .hebrew), - #line : Calendar(identifier: .iso8601), - #line : Calendar(identifier: .indian), - #line : Calendar(identifier: .islamic), - #line : Calendar(identifier: .islamicCivil), - #line : Calendar(identifier: .japanese), - #line : Calendar(identifier: .persian), - #line : Calendar(identifier: .republicOfChina), - ] - - func test_Calendar_JSON() { - for (testLine, calendar) in calendarValues { - expectRoundTripEqualityThroughJSON(for: calendar, lineNumber: testLine) - } - } - - func test_Calendar_Plist() { - for (testLine, calendar) in calendarValues { - expectRoundTripEqualityThroughPlist(for: calendar, lineNumber: testLine) - } - } - - // MARK: - CharacterSet - lazy var characterSetValues: [Int : CharacterSet] = [ - #line : CharacterSet.controlCharacters, - #line : CharacterSet.whitespaces, - #line : CharacterSet.whitespacesAndNewlines, - #line : CharacterSet.decimalDigits, - #line : CharacterSet.letters, - #line : CharacterSet.lowercaseLetters, - #line : CharacterSet.uppercaseLetters, - #line : CharacterSet.nonBaseCharacters, - #line : CharacterSet.alphanumerics, - #line : CharacterSet.decomposables, - #line : CharacterSet.illegalCharacters, - #line : CharacterSet.punctuationCharacters, - #line : CharacterSet.capitalizedLetters, - #line : CharacterSet.symbols, - #line : CharacterSet.newlines - ] - - func test_CharacterSet_JSON() { - for (testLine, characterSet) in characterSetValues { - expectRoundTripEqualityThroughJSON(for: characterSet, lineNumber: testLine) - } - } - - func test_CharacterSet_Plist() { - for (testLine, characterSet) in characterSetValues { - expectRoundTripEqualityThroughPlist(for: characterSet, lineNumber: testLine) - } - } - - // MARK: - CGAffineTransform - lazy var cg_affineTransformValues: [Int : CGAffineTransform] = { - var values = [ - #line : CGAffineTransform.identity, - #line : CGAffineTransform(), - #line : CGAffineTransform(translationX: 2.0, y: 2.0), - #line : CGAffineTransform(scaleX: 2.0, y: 2.0), - #line : CGAffineTransform(a: 1.0, b: 2.5, c: 66.2, d: 40.2, tx: -5.5, ty: 3.7), - #line : CGAffineTransform(a: -55.66, b: 22.7, c: 1.5, d: 0.0, tx: -22, ty: -33), - #line : CGAffineTransform(a: 4.5, b: 1.1, c: 0.025, d: 0.077, tx: -0.55, ty: 33.2), - #line : CGAffineTransform(a: 7.0, b: -2.3, c: 6.7, d: 0.25, tx: 0.556, ty: 0.99), - #line : CGAffineTransform(a: 0.498, b: -0.284, c: -0.742, d: 0.3248, tx: 12, ty: 44) - ] - - if #available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) { - values[#line] = CGAffineTransform(rotationAngle: .pi / 2) - } - - return values - }() - - func test_CGAffineTransform_JSON() { - for (testLine, transform) in cg_affineTransformValues { - expectRoundTripEqualityThroughJSON(for: transform, lineNumber: testLine) - } - } - - func test_CGAffineTransform_Plist() { - for (testLine, transform) in cg_affineTransformValues { - expectRoundTripEqualityThroughPlist(for: transform, lineNumber: testLine) - } - } - - // MARK: - CGPoint - lazy var cg_pointValues: [Int : CGPoint] = { - var values = [ - #line : CGPoint.zero, - #line : CGPoint(x: 10, y: 20) - ] - - if #available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) { - // Limit on magnitude in JSON. See rdar://problem/12717407 - values[#line] = CGPoint(x: CGFloat.greatestFiniteMagnitude, - y: CGFloat.greatestFiniteMagnitude) - } - - return values - }() - - func test_CGPoint_JSON() { - for (testLine, point) in cg_pointValues { - expectRoundTripEqualityThroughJSON(for: point, lineNumber: testLine) - } - } - - func test_CGPoint_Plist() { - for (testLine, point) in cg_pointValues { - expectRoundTripEqualityThroughPlist(for: point, lineNumber: testLine) - } - } - - // MARK: - CGSize - lazy var cg_sizeValues: [Int : CGSize] = { - var values = [ - #line : CGSize.zero, - #line : CGSize(width: 30, height: 40) - ] - - if #available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) { - // Limit on magnitude in JSON. See rdar://problem/12717407 - values[#line] = CGSize(width: CGFloat.greatestFiniteMagnitude, - height: CGFloat.greatestFiniteMagnitude) - } - - return values - }() - - func test_CGSize_JSON() { - for (testLine, size) in cg_sizeValues { - expectRoundTripEqualityThroughJSON(for: size, lineNumber: testLine) - } - } - - func test_CGSize_Plist() { - for (testLine, size) in cg_sizeValues { - expectRoundTripEqualityThroughPlist(for: size, lineNumber: testLine) - } - } - - // MARK: - CGRect - lazy var cg_rectValues: [Int : CGRect] = { - var values = [ - #line : CGRect.zero, - #line : CGRect.null, - #line : CGRect(x: 10, y: 20, width: 30, height: 40) - ] - - if #available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) { - // Limit on magnitude in JSON. See rdar://problem/12717407 - values[#line] = CGRect.infinite - } - - return values - }() - - func test_CGRect_JSON() { - for (testLine, rect) in cg_rectValues { - expectRoundTripEqualityThroughJSON(for: rect, lineNumber: testLine) - } - } - - func test_CGRect_Plist() { - for (testLine, rect) in cg_rectValues { - expectRoundTripEqualityThroughPlist(for: rect, lineNumber: testLine) - } - } - - // MARK: - CGVector - lazy var cg_vectorValues: [Int : CGVector] = { - var values = [ - #line : CGVector.zero, - #line : CGVector(dx: 0.0, dy: -9.81) - ] - - if #available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) { - // Limit on magnitude in JSON. See rdar://problem/12717407 - values[#line] = CGVector(dx: CGFloat.greatestFiniteMagnitude, - dy: CGFloat.greatestFiniteMagnitude) - } - - return values - }() - - func test_CGVector_JSON() { - for (testLine, vector) in cg_vectorValues { - expectRoundTripEqualityThroughJSON(for: vector, lineNumber: testLine) - } - } - - func test_CGVector_Plist() { - for (testLine, vector) in cg_vectorValues { - expectRoundTripEqualityThroughPlist(for: vector, lineNumber: testLine) - } - } - - // MARK: - ClosedRange - func test_ClosedRange_JSON() { - // NSJSONSerialization used to produce NSDecimalNumber values with different ranges, making Int.max as a bound lossy. - if #available(macOS 10.10, iOS 8.0, tvOS 9.0, watchOS 2.0, *) { - let value = 0...Int.max - let decoded = performEncodeAndDecode(of: value, encode: { try JSONEncoder().encode($0) }, decode: { try JSONDecoder().decode($0, from: $1) }, lineNumber: #line) - XCTAssertEqual(value.upperBound, decoded.upperBound, "\(#file):\(#line): Decoded ClosedRange upperBound <\(_debugDescription(decoded))> not equal to original <\(_debugDescription(value))>") - XCTAssertEqual(value.lowerBound, decoded.lowerBound, "\(#file):\(#line): Decoded ClosedRange lowerBound <\(_debugDescription(decoded))> not equal to original <\(_debugDescription(value))>") - } - } - - func test_ClosedRange_Plist() { - let value = 0...Int.max - let decoded = performEncodeAndDecode(of: value, encode: { try PropertyListEncoder().encode($0) }, decode: { try PropertyListDecoder().decode($0, from: $1) }, lineNumber: #line) - XCTAssertEqual(value.upperBound, decoded.upperBound, "\(#file):\(#line): Decoded ClosedRange upperBound <\(_debugDescription(decoded))> not equal to original <\(_debugDescription(value))>") - XCTAssertEqual(value.lowerBound, decoded.lowerBound, "\(#file):\(#line): Decoded ClosedRange lowerBound <\(_debugDescription(decoded))> not equal to original <\(_debugDescription(value))>") - } - - // MARK: - ContiguousArray - lazy var contiguousArrayValues: [Int : ContiguousArray] = [ - #line : [], - #line : ["foo"], - #line : ["foo", "bar"], - #line : ["foo", "bar", "baz"], - ] - - func test_ContiguousArray_JSON() { - for (testLine, contiguousArray) in contiguousArrayValues { - expectRoundTripEqualityThroughJSON(for: contiguousArray, lineNumber: testLine) - } - } - - func test_ContiguousArray_Plist() { - for (testLine, contiguousArray) in contiguousArrayValues { - expectRoundTripEqualityThroughPlist(for: contiguousArray, lineNumber: testLine) - } - } - - // MARK: - DateComponents - lazy var dateComponents: Set = [ - .era, .year, .month, .day, .hour, .minute, .second, .nanosecond, - .weekday, .weekdayOrdinal, .quarter, .weekOfMonth, .weekOfYear, - .yearForWeekOfYear, .timeZone, .calendar - ] - - func test_DateComponents_JSON() { - let calendar = Calendar(identifier: .gregorian) - let components = calendar.dateComponents(dateComponents, from: Date()) - expectRoundTripEqualityThroughJSON(for: components, lineNumber: #line - 1) - } - - func test_DateComponents_Plist() { - let calendar = Calendar(identifier: .gregorian) - let components = calendar.dateComponents(dateComponents, from: Date()) - expectRoundTripEqualityThroughPlist(for: components, lineNumber: #line - 1) - } - - // MARK: - DateInterval - @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) - lazy var dateIntervalValues: [Int : DateInterval] = [ - #line : DateInterval(), - #line : DateInterval(start: Date.distantPast, end: Date()), - #line : DateInterval(start: Date(), end: Date.distantFuture), - #line : DateInterval(start: Date.distantPast, end: Date.distantFuture) - ] - - @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) - func test_DateInterval_JSON() { - for (testLine, interval) in dateIntervalValues { - expectRoundTripEqualityThroughJSON(for: interval, lineNumber: testLine) - } - } - - @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) - func test_DateInterval_Plist() { - for (testLine, interval) in dateIntervalValues { - expectRoundTripEqualityThroughPlist(for: interval, lineNumber: testLine) - } - } - - // MARK: - Decimal - lazy var decimalValues: [Int : Decimal] = [ - #line : Decimal.leastFiniteMagnitude, - #line : Decimal.greatestFiniteMagnitude, - #line : Decimal.leastNormalMagnitude, - #line : Decimal.leastNonzeroMagnitude, - #line : Decimal(), - - // See 33996620 for re-enabling this test. - // #line : Decimal.pi, - ] - - func test_Decimal_JSON() { - for (testLine, decimal) in decimalValues { - // Decimal encodes as a number in JSON and cannot be encoded at the top level. - expectRoundTripEqualityThroughJSON(for: TopLevelWrapper(decimal), lineNumber: testLine) - } - } - - func test_Decimal_Plist() { - for (testLine, decimal) in decimalValues { - expectRoundTripEqualityThroughPlist(for: decimal, lineNumber: testLine) - } - } - - // MARK: - IndexPath - lazy var indexPathValues: [Int : IndexPath] = [ - #line : IndexPath(), // empty - #line : IndexPath(index: 0), // single - #line : IndexPath(indexes: [1, 2]), // pair - #line : IndexPath(indexes: [3, 4, 5, 6, 7, 8]), // array - ] - - func test_IndexPath_JSON() { - for (testLine, indexPath) in indexPathValues { - expectRoundTripEqualityThroughJSON(for: indexPath, lineNumber: testLine) - } - } - - func test_IndexPath_Plist() { - for (testLine, indexPath) in indexPathValues { - expectRoundTripEqualityThroughPlist(for: indexPath, lineNumber: testLine) - } - } - - // MARK: - IndexSet - lazy var indexSetValues: [Int : IndexSet] = [ - #line : IndexSet(), - #line : IndexSet(integer: 42), - ] - lazy var indexSetMaxValues: [Int : IndexSet] = [ - #line : IndexSet(integersIn: 0 ..< Int.max) - ] - - func test_IndexSet_JSON() { - for (testLine, indexSet) in indexSetValues { - expectRoundTripEqualityThroughJSON(for: indexSet, lineNumber: testLine) - } - if #available(macOS 10.10, iOS 8, *) { - // Mac OS X 10.9 and iOS 7 weren't able to round-trip Int.max in JSON. - for (testLine, indexSet) in indexSetMaxValues { - expectRoundTripEqualityThroughJSON(for: indexSet, lineNumber: testLine) - } - } - } - - func test_IndexSet_Plist() { - for (testLine, indexSet) in indexSetValues { - expectRoundTripEqualityThroughPlist(for: indexSet, lineNumber: testLine) - } - for (testLine, indexSet) in indexSetMaxValues { - expectRoundTripEqualityThroughPlist(for: indexSet, lineNumber: testLine) - } - } - - // MARK: - Locale - lazy var localeValues: [Int : Locale] = [ - #line : Locale(identifier: ""), - #line : Locale(identifier: "en"), - #line : Locale(identifier: "en_US"), - #line : Locale(identifier: "en_US_POSIX"), - #line : Locale(identifier: "uk"), - #line : Locale(identifier: "fr_FR"), - #line : Locale(identifier: "fr_BE"), - #line : Locale(identifier: "zh-Hant-HK") - ] - - func test_Locale_JSON() { - for (testLine, locale) in localeValues { - expectRoundTripEqualityThroughJSON(for: locale, lineNumber: testLine) - } - } - - func test_Locale_Plist() { - for (testLine, locale) in localeValues { - expectRoundTripEqualityThroughPlist(for: locale, lineNumber: testLine) - } - } - - // MARK: - Measurement - @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) - lazy var unitValues: [Int : Dimension] = [ - #line : UnitAcceleration.metersPerSecondSquared, - #line : UnitMass.kilograms, - #line : UnitLength.miles - ] - - #if false // FIXME: This test is broken; it was commented out in the original StdlibUnittest setup. - // (The problem is that it uses encodes/decodes through `Measurement` which should not be a thing.) - @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) - func test_Measurement_JSON() { - for (testLine, unit) in unitValues { - expectRoundTripEqualityThroughJSON(for: Measurement(value: 42, unit: unit), lineNumber: testLine) - } - } - - @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) - func test_Measurement_Plist() { - for (testLine, unit) in unitValues { - expectRoundTripEqualityThroughJSON(for: Measurement(value: 42, unit: unit), lineNumber: testLine) - } - } - #endif - - // MARK: - NSRange - lazy var nsrangeValues: [Int : NSRange] = [ - #line : NSRange(), - #line : NSRange(location: 5, length: 20), - ] - lazy var nsrangeMaxValues: [Int : NSRange] = [ - #line : NSRange(location: 0, length: Int.max), - #line : NSRange(location: NSNotFound, length: 0), - ] - - func test_NSRange_JSON() { - for (testLine, range) in nsrangeValues { - expectRoundTripEqualityThroughJSON(for: range, lineNumber: testLine) - } - if #available(macOS 10.10, iOS 8, *) { - // Mac OS X 10.9 and iOS 7 weren't able to round-trip Int.max in JSON. - for (testLine, range) in nsrangeMaxValues { - expectRoundTripEqualityThroughJSON(for: range, lineNumber: testLine) - } - } - } - - func test_NSRange_Plist() { - for (testLine, range) in nsrangeValues { - expectRoundTripEqualityThroughPlist(for: range, lineNumber: testLine) - } - for (testLine, range) in nsrangeMaxValues { - expectRoundTripEqualityThroughPlist(for: range, lineNumber: testLine) - } - } - - // MARK: - PartialRangeFrom - func test_PartialRangeFrom_JSON() { - let value = 0... - let decoded = performEncodeAndDecode(of: value, encode: { try JSONEncoder().encode($0) }, decode: { try JSONDecoder().decode($0, from: $1) }, lineNumber: #line) - XCTAssertEqual(value.lowerBound, decoded.lowerBound, "\(#file):\(#line): Decoded PartialRangeFrom <\(_debugDescription(decoded))> not equal to original <\(_debugDescription(value))>") - } - - func test_PartialRangeFrom_Plist() { - let value = 0... - let decoded = performEncodeAndDecode(of: value, encode: { try PropertyListEncoder().encode($0) }, decode: { try PropertyListDecoder().decode($0, from: $1) }, lineNumber: #line) - XCTAssertEqual(value.lowerBound, decoded.lowerBound, "\(#file):\(#line): Decoded PartialRangeFrom <\(_debugDescription(decoded))> not equal to original <\(_debugDescription(value))>") - } - - // MARK: - PartialRangeThrough - func test_PartialRangeThrough_JSON() { - // NSJSONSerialization used to produce NSDecimalNumber values with different ranges, making Int.max as a bound lossy. - if #available(macOS 10.10, iOS 8.0, tvOS 9.0, watchOS 2.0, *) { - - let value = ...Int.max - let decoded = performEncodeAndDecode(of: value, encode: { try JSONEncoder().encode($0) }, decode: { try JSONDecoder().decode($0, from: $1) }, lineNumber: #line) - XCTAssertEqual(value.upperBound, decoded.upperBound, "\(#file):\(#line): Decoded PartialRangeThrough <\(_debugDescription(decoded))> not equal to original <\(_debugDescription(value))>") - } - } - - func test_PartialRangeThrough_Plist() { - let value = ...Int.max - let decoded = performEncodeAndDecode(of: value, encode: { try PropertyListEncoder().encode($0) }, decode: { try PropertyListDecoder().decode($0, from: $1) }, lineNumber: #line) - XCTAssertEqual(value.upperBound, decoded.upperBound, "\(#file):\(#line): Decoded PartialRangeThrough <\(_debugDescription(decoded))> not equal to original <\(_debugDescription(value))>") - } - - // MARK: - PartialRangeUpTo - func test_PartialRangeUpTo_JSON() { - // NSJSONSerialization used to produce NSDecimalNumber values with different ranges, making Int.max as a bound lossy. - if #available(macOS 10.10, iOS 8.0, tvOS 9.0, watchOS 2.0, *) { - - let value = .. not equal to original <\(_debugDescription(value))>") - } - } - - func test_PartialRangeUpTo_Plist() { - let value = .. not equal to original <\(_debugDescription(value))>") - } - - // MARK: - PersonNameComponents - @available(macOS 10.11, iOS 9.0, watchOS 2.0, tvOS 9.0, *) - lazy var personNameComponentsValues: [Int : PersonNameComponents] = [ - #line : makePersonNameComponents(givenName: "John", familyName: "Appleseed"), - #line : makePersonNameComponents(givenName: "John", familyName: "Appleseed", nickname: "Johnny"), - #line : makePersonNameComponents(namePrefix: "Dr.", givenName: "Jane", middleName: "A.", familyName: "Appleseed", nameSuffix: "Esq.", nickname: "Janie") - ] - - @available(macOS 10.11, iOS 9.0, watchOS 2.0, tvOS 9.0, *) - func test_PersonNameComponents_JSON() { - for (testLine, components) in personNameComponentsValues { - expectRoundTripEqualityThroughJSON(for: components, lineNumber: testLine) - } - } - - @available(macOS 10.11, iOS 9.0, watchOS 2.0, tvOS 9.0, *) - func test_PersonNameComponents_Plist() { - for (testLine, components) in personNameComponentsValues { - expectRoundTripEqualityThroughPlist(for: components, lineNumber: testLine) - } - } - - // MARK: - Range - func test_Range_JSON() { - // NSJSONSerialization used to produce NSDecimalNumber values with different ranges, making Int.max as a bound lossy. - if #available(macOS 10.10, iOS 8.0, tvOS 9.0, watchOS 2.0, *) { - let value = 0.. not equal to original <\(_debugDescription(value))>") - XCTAssertEqual(value.lowerBound, decoded.lowerBound, "\(#file):\(#line): Decoded Range lowerBound<\(_debugDescription(decoded))> not equal to original <\(_debugDescription(value))>") - } - } - - func test_Range_Plist() { - let value = 0.. not equal to original <\(_debugDescription(value))>") - XCTAssertEqual(value.lowerBound, decoded.lowerBound, "\(#file):\(#line): Decoded Range lowerBound<\(_debugDescription(decoded))> not equal to original <\(_debugDescription(value))>") - } - - // MARK: - TimeZone - lazy var timeZoneValues: [Int : TimeZone] = [ - #line : TimeZone(identifier: "America/Los_Angeles")!, - #line : TimeZone(identifier: "UTC")!, - #line : TimeZone.current - ] - - func test_TimeZone_JSON() { - for (testLine, timeZone) in timeZoneValues { - expectRoundTripEqualityThroughJSON(for: timeZone, lineNumber: testLine) - } - } - - func test_TimeZone_Plist() { - for (testLine, timeZone) in timeZoneValues { - expectRoundTripEqualityThroughPlist(for: timeZone, lineNumber: testLine) - } - } - - // MARK: - URL - lazy var urlValues: [Int : URL] = { - var values: [Int : URL] = [ - #line : URL(fileURLWithPath: NSTemporaryDirectory()), - #line : URL(fileURLWithPath: "/"), - #line : URL(string: "http://swift.org")!, - #line : URL(string: "documentation", relativeTo: URL(string: "http://swift.org")!)! - ] - - if #available(macOS 10.11, iOS 9.0, watchOS 2.0, tvOS 9.0, *) { - values[#line] = URL(fileURLWithPath: "bin/sh", relativeTo: URL(fileURLWithPath: "/")) - } - - return values - }() - - func test_URL_JSON() { - for (testLine, url) in urlValues { - // URLs encode as single strings in JSON. They lose their baseURL this way. - // For relative URLs, we don't expect them to be equal to the original. - if url.baseURL == nil { - // This is an absolute URL; we can expect equality. - expectRoundTripEqualityThroughJSON(for: TopLevelWrapper(url), lineNumber: testLine) - } else { - // This is a relative URL. Make it absolute first. - let absoluteURL = URL(string: url.absoluteString)! - expectRoundTripEqualityThroughJSON(for: TopLevelWrapper(absoluteURL), lineNumber: testLine) - } - } - } - - func test_URL_Plist() { - for (testLine, url) in urlValues { - expectRoundTripEqualityThroughPlist(for: url, lineNumber: testLine) - } - } - - // MARK: - URLComponents - lazy var urlComponentsValues: [Int : URLComponents] = [ - #line : URLComponents(), - - #line : URLComponents(string: "http://swift.org")!, - #line : URLComponents(string: "http://swift.org:80")!, - #line : URLComponents(string: "https://www.mywebsite.org/api/v42/something.php#param1=hi¶m2=hello")!, - #line : URLComponents(string: "ftp://johnny:apples@myftpserver.org:4242/some/path")!, - - #line : URLComponents(url: URL(string: "http://swift.org")!, resolvingAgainstBaseURL: false)!, - #line : URLComponents(url: URL(string: "http://swift.org:80")!, resolvingAgainstBaseURL: false)!, - #line : URLComponents(url: URL(string: "https://www.mywebsite.org/api/v42/something.php#param1=hi¶m2=hello")!, resolvingAgainstBaseURL: false)!, - #line : URLComponents(url: URL(string: "ftp://johnny:apples@myftpserver.org:4242/some/path")!, resolvingAgainstBaseURL: false)!, - #line : URLComponents(url: URL(fileURLWithPath: NSTemporaryDirectory()), resolvingAgainstBaseURL: false)!, - #line : URLComponents(url: URL(fileURLWithPath: "/"), resolvingAgainstBaseURL: false)!, - #line : URLComponents(url: URL(string: "documentation", relativeTo: URL(string: "http://swift.org")!)!, resolvingAgainstBaseURL: false)!, - - #line : URLComponents(url: URL(string: "http://swift.org")!, resolvingAgainstBaseURL: true)!, - #line : URLComponents(url: URL(string: "http://swift.org:80")!, resolvingAgainstBaseURL: true)!, - #line : URLComponents(url: URL(string: "https://www.mywebsite.org/api/v42/something.php#param1=hi¶m2=hello")!, resolvingAgainstBaseURL: true)!, - #line : URLComponents(url: URL(string: "ftp://johnny:apples@myftpserver.org:4242/some/path")!, resolvingAgainstBaseURL: true)!, - #line : URLComponents(url: URL(fileURLWithPath: NSTemporaryDirectory()), resolvingAgainstBaseURL: true)!, - #line : URLComponents(url: URL(fileURLWithPath: "/"), resolvingAgainstBaseURL: true)!, - #line : URLComponents(url: URL(string: "documentation", relativeTo: URL(string: "http://swift.org")!)!, resolvingAgainstBaseURL: true)!, - - #line : { - var components = URLComponents() - components.scheme = "https" - return components - }(), - - #line : { - var components = URLComponents() - components.user = "johnny" - return components - }(), - - #line : { - var components = URLComponents() - components.password = "apples" - return components - }(), - - #line : { - var components = URLComponents() - components.host = "0.0.0.0" - return components - }(), - - #line : { - var components = URLComponents() - components.port = 8080 - return components - }(), - - #line : { - var components = URLComponents() - components.path = ".." - return components - }(), - - #line : { - var components = URLComponents() - components.query = "param1=hi¶m2=there" - return components - }(), - - #line : { - var components = URLComponents() - components.fragment = "anchor" - return components - }(), - - #line : { - var components = URLComponents() - components.scheme = "ftp" - components.user = "johnny" - components.password = "apples" - components.host = "0.0.0.0" - components.port = 4242 - components.path = "/some/file" - components.query = "utf8=✅" - components.fragment = "anchor" - return components - }() - ] - - func test_URLComponents_JSON() { - for (testLine, components) in urlComponentsValues { - expectRoundTripEqualityThroughJSON(for: components, lineNumber: testLine) - } - } - - func test_URLComponents_Plist() { - for (testLine, components) in urlComponentsValues { - expectRoundTripEqualityThroughPlist(for: components, lineNumber: testLine) - } - } - - // MARK: - UUID - lazy var uuidValues: [Int : UUID] = [ - #line : UUID(), - #line : UUID(uuidString: "E621E1F8-C36C-495A-93FC-0C247A3E6E5F")!, - #line : UUID(uuidString: "e621e1f8-c36c-495a-93fc-0c247a3e6e5f")!, - #line : UUID(uuid: uuid_t(0xe6,0x21,0xe1,0xf8,0xc3,0x6c,0x49,0x5a,0x93,0xfc,0x0c,0x24,0x7a,0x3e,0x6e,0x5f)) - ] - - func test_UUID_JSON() { - for (testLine, uuid) in uuidValues { - // We have to wrap the UUID since we cannot have a top-level string. - expectRoundTripEqualityThroughJSON(for: UUIDCodingWrapper(uuid), lineNumber: testLine) - } - } - - func test_UUID_Plist() { - for (testLine, uuid) in uuidValues { - // We have to wrap the UUID since we cannot have a top-level string. - expectRoundTripEqualityThroughPlist(for: UUIDCodingWrapper(uuid), lineNumber: testLine) - } - } -} - -// MARK: - Helper Types - -private struct TopLevelWrapper : Codable, Equatable where T : Codable, T : Equatable { - let value: T - - init(_ value: T) { - self.value = value - } - - static func ==(_ lhs: TopLevelWrapper, _ rhs: TopLevelWrapper) -> Bool { - return lhs.value == rhs.value - } -} - diff --git a/Darwin/Foundation-swiftoverlay-Tests/FoundationBridge.h b/Darwin/Foundation-swiftoverlay-Tests/FoundationBridge.h deleted file mode 100644 index 54518d4a9c..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/FoundationBridge.h +++ /dev/null @@ -1,97 +0,0 @@ -//===--- FoundationBridge.h -------------------------------------*- C++ -*-===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSInteger, ObjectBehaviorAction) { - ObjectBehaviorActionRetain, - ObjectBehaviorActionCopy, - ObjectBehaviorActionMutableCopy -}; - -// NOTE: this class is NOT meant to be used in threaded contexts. -@interface ObjectBehaviorVerifier : NSObject -@property (readonly) BOOL wasRetained; -@property (readonly) BOOL wasCopied; -@property (readonly) BOOL wasMutableCopied; - -- (void)appendAction:(ObjectBehaviorAction)action; -- (void)enumerate:(void (^)(ObjectBehaviorAction))block; -- (void)reset; -- (void)dump; -@end - -#pragma mark - NSData verification - -@interface ImmutableDataVerifier : NSData { - ObjectBehaviorVerifier *_verifier; - NSData *_data; -} -@property (readonly) ObjectBehaviorVerifier *verifier; -@end - -@interface MutableDataVerifier : NSMutableData { - ObjectBehaviorVerifier *_verifier; - NSMutableData *_data; -} -@property (readonly) ObjectBehaviorVerifier *verifier; -@end - -void takesData(NSData *object); -NSData *returnsData(); -BOOL identityOfData(NSData *data); - -#pragma mark - NSCalendar verification - -@interface CalendarBridgingTester : NSObject -- (NSCalendar *)autoupdatingCurrentCalendar; -- (BOOL)verifyAutoupdatingCalendar:(NSCalendar *)calendar; -@end - -@interface TimeZoneBridgingTester : NSObject -- (NSTimeZone *)autoupdatingCurrentTimeZone; -- (BOOL)verifyAutoupdatingTimeZone:(NSTimeZone *)tz; -@end - -@interface LocaleBridgingTester : NSObject -- (NSLocale *)autoupdatingCurrentLocale; -- (BOOL)verifyAutoupdatingLocale:(NSLocale *)locale; -@end - -#pragma mark - NSNumber verification - -@interface NumberBridgingTester : NSObject -- (BOOL)verifyKeysInRange:(NSRange)range existInDictionary:(NSDictionary *)dictionary; -@end - -#pragma mark - NSString bridging - -static inline NSString *getNSStringEqualTestString() { - return [NSString stringWithUTF8String:"2166002315@874404110.1042078977"]; -} - -static inline BOOL NSStringBridgeTestEqual(NSString * _Nonnull a, NSString * _Nonnull b) { - return [a isEqual:b]; -} - -static inline NSString *getNSStringWithUnpairedSurrogate() { - unichar chars[16] = { - 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, - 0xD800 }; - return [NSString stringWithCharacters:chars length:1]; -} - -NS_ASSUME_NONNULL_END diff --git a/Darwin/Foundation-swiftoverlay-Tests/FoundationBridge.m b/Darwin/Foundation-swiftoverlay-Tests/FoundationBridge.m deleted file mode 100644 index e24e8bdcda..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/FoundationBridge.m +++ /dev/null @@ -1,279 +0,0 @@ -//===--- FoundationBridge.m -----------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import "FoundationBridge.h" -#import - -@implementation ObjectBehaviorVerifier { - NSMutableArray *_actions; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _actions = [[NSMutableArray alloc] init]; - } - return self; -} - -- (void)dealloc { - [_actions release]; - [super dealloc]; -} - -- (void)appendAction:(ObjectBehaviorAction)action { - [_actions addObject:@(action)]; - switch (action) { - case ObjectBehaviorActionRetain: - _wasRetained = YES; - break; - case ObjectBehaviorActionMutableCopy: - _wasMutableCopied = YES; - // fall through - case ObjectBehaviorActionCopy: - _wasCopied = YES; - break; - } -} - -- (void)enumerate:(void (^)(ObjectBehaviorAction))block { - for (NSNumber *action in _actions) { - block((ObjectBehaviorAction)action.integerValue); - } -} - -- (void)reset { - [_actions removeAllObjects]; - _wasRetained = NO; - _wasMutableCopied = NO; - _wasCopied = NO; -} - -- (void)dump { - [self enumerate:^(ObjectBehaviorAction action) { - switch (action) { - case ObjectBehaviorActionRetain: - printf("retain\n"); - break; - case ObjectBehaviorActionMutableCopy: - printf("mutableCopy\n"); - break; - case ObjectBehaviorActionCopy: - printf("copy\n"); - break; - } - }]; -} - -@end - - -@implementation ImmutableDataVerifier - -- (instancetype)init { - self = [super init]; - if (self) { - _verifier = [[ObjectBehaviorVerifier alloc] init]; - char *bytes = "hello world"; - _data = [[NSData alloc] initWithBytes:bytes length:strlen(bytes)]; - } - return self; -} - -- (instancetype)initWithData:(NSData *)data verifier:(ObjectBehaviorVerifier *)verifier { - self = [super init]; - if (self) { - _verifier = [verifier retain]; - _data = [data mutableCopyWithZone:nil]; - } - return self; -} - -- (void)dealloc { - [_verifier release]; - [_data release]; - [super dealloc]; -} - -- (id)retain { - [_verifier appendAction:ObjectBehaviorActionRetain]; - return [super retain]; -} - -- (id)copyWithZone:(NSZone *)zone { - [_verifier appendAction:ObjectBehaviorActionCopy]; - return [super retain]; -} - -- (id)mutableCopyWithZone:(NSZone *)zone { - [_verifier appendAction:ObjectBehaviorActionMutableCopy]; - return [[MutableDataVerifier alloc] initWithData:_data verifier:_verifier]; -} - -- (NSUInteger)length { - return _data.length; -} - -- (const void *)bytes { - return _data.bytes; -} - -- (NSData *)subdataWithRange:(NSRange)range { - return [_data subdataWithRange:range]; -} - -@end - -@implementation MutableDataVerifier - -- (instancetype)init { - self = [super init]; - if (self) { - _verifier = [[ObjectBehaviorVerifier alloc] init]; - char *bytes = "hello world"; - _data = [[NSMutableData alloc] initWithBytes:bytes length:strlen(bytes)]; - } - return self; -} - -- (instancetype)initWithData:(NSData *)data verifier:(ObjectBehaviorVerifier *)verifier { - self = [super init]; - if (self) { - _verifier = [verifier retain]; - _data = [data mutableCopyWithZone:nil]; - } - return self; -} - -- (void)dealloc { - [_verifier release]; - [_data release]; - [super dealloc]; -} - -- (id)retain { - [_verifier appendAction:ObjectBehaviorActionRetain]; - return [super retain]; -} - -- (id)copyWithZone:(NSZone *)zone { - [_verifier appendAction:ObjectBehaviorActionCopy]; - return [[ImmutableDataVerifier alloc] initWithData:_data verifier:_verifier]; -} - -- (id)mutableCopyWithZone:(NSZone *)zone { - [_verifier appendAction:ObjectBehaviorActionMutableCopy]; - return [[MutableDataVerifier alloc] initWithData:_data verifier:_verifier]; -} - -- (NSUInteger)length { - return _data.length; -} - -- (void)setLength:(NSUInteger)length { - _data.length = length; -} - -- (const void *)bytes { - return _data.bytes; -} - -- (void *)mutableBytes { - return _data.mutableBytes; -} - -- (void)appendBytes:(const void *)bytes length:(NSUInteger)length { - [_data appendBytes:bytes length:length]; -} - -- (NSData *)subdataWithRange:(NSRange)range { - return [_data subdataWithRange:range]; -} - -@end - -void takesData(NSData *object) { - // do NOTHING here... -} - -NSData *returnsData() { - static dispatch_once_t once = 0L; - static NSData *data = nil; - dispatch_once(&once, ^{ - char *bytes = "hello world"; - data = [[NSData alloc] initWithBytes:bytes length:strlen(bytes)]; - }); - return data; -} - -BOOL identityOfData(NSData *data) { - return data == returnsData(); -} - - -@implementation CalendarBridgingTester - -- (NSCalendar *)autoupdatingCurrentCalendar { - return [NSCalendar autoupdatingCurrentCalendar]; -} - -- (BOOL)verifyAutoupdatingCalendar:(NSCalendar *)calendar { - Class autoCalendarClass = (Class)objc_lookUpClass("_NSAutoCalendar"); - if (autoCalendarClass && [calendar isKindOfClass:autoCalendarClass]) { - return YES; - } else { - autoCalendarClass = (Class)objc_lookUpClass("NSAutoCalendar"); - return [calendar isKindOfClass:autoCalendarClass]; - } -} - -@end - -@implementation TimeZoneBridgingTester - -- (NSTimeZone *)autoupdatingCurrentTimeZone { - return [NSTimeZone localTimeZone]; -} - -- (BOOL)verifyAutoupdatingTimeZone:(NSTimeZone *)tz { - Class autoTimeZoneClass = (Class)objc_lookUpClass("__NSLocalTimeZone"); - return [tz isKindOfClass:autoTimeZoneClass]; - -} -@end - -@implementation LocaleBridgingTester - -- (NSLocale *)autoupdatingCurrentLocale { - return [NSLocale autoupdatingCurrentLocale]; -} - -- (BOOL)verifyAutoupdatingLocale:(NSLocale *)locale { - Class autoLocaleClass = (Class)objc_lookUpClass("NSAutoLocale"); - return [locale isKindOfClass:autoLocaleClass]; -} - -@end - -@implementation NumberBridgingTester - -- (BOOL)verifyKeysInRange:(NSRange)range existInDictionary:(NSDictionary *)dictionary { - for (NSUInteger i = 0; i < range.length; i += 1) { - if (!dictionary[@(range.location + i)]) { - return NO; - } - } - - return YES; -} - -@end diff --git a/Darwin/Foundation-swiftoverlay-Tests/FoundationTests.xcconfig b/Darwin/Foundation-swiftoverlay-Tests/FoundationTests.xcconfig deleted file mode 100644 index 07a16d8048..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/FoundationTests.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -//===--- FoundationBridge.h -------------------------------------*- C++ -*-===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#include "../Config/overlay-tests-shared.xcconfig" - -PRODUCT_BUNDLE_IDENTIFIER = org.swift.FoundationTests -SWIFT_OBJC_BRIDGING_HEADER = $(PROJECT_DIR)/Foundation-swiftoverlay-Tests/FoundationBridge.h diff --git a/Darwin/Foundation-swiftoverlay-Tests/Info.plist b/Darwin/Foundation-swiftoverlay-Tests/Info.plist deleted file mode 100644 index 64d65ca495..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/Darwin/Foundation-swiftoverlay-Tests/StdlibUnittest checkEquatable.swift b/Darwin/Foundation-swiftoverlay-Tests/StdlibUnittest checkEquatable.swift deleted file mode 100644 index 789a22ba40..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/StdlibUnittest checkEquatable.swift +++ /dev/null @@ -1,124 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// FIXME: This should be in a separate package: -// rdar://57247249 Port StdlibUnittest's collection test suite to XCTest - -import XCTest - -// -// Semantic tests for protocol conformance -// - -/// Test that the elements of `instances` satisfy the semantic -/// requirements of `Equatable`, using `oracle` to generate equality -/// expectations from pairs of positions in `instances`. -/// -/// - Note: `oracle` is also checked for conformance to the -/// laws. -public func checkEquatable( - _ instances: Instances, - oracle: (Instances.Index, Instances.Index) -> Bool, - allowBrokenTransitivity: Bool = false, - _ message: @autoclosure () -> String = "", - file: StaticString = #file, line: UInt = #line -) where - Instances.Element: Equatable -{ - let indices = Array(instances.indices) - _checkEquatableImpl( - Array(instances), - oracle: { oracle(indices[$0], indices[$1]) }, - allowBrokenTransitivity: allowBrokenTransitivity, - message(), - file: file, - line: line) -} - -public final class Box { - public init(_ value: T) { self.value = value } - public var value: T -} - -internal func _checkEquatableImpl( - _ instances: [Instance], - oracle: (Int, Int) -> Bool, - allowBrokenTransitivity: Bool = false, - - _ message: @autoclosure () -> String = "", - file: StaticString, - line: UInt -) { - // For each index (which corresponds to an instance being tested) track the - // set of equal instances. - var transitivityScoreboard: [Box>] = - instances.indices.map { _ in Box(Set()) } - - // TODO: swift-3-indexing-model: add tests for this function. - for i in instances.indices { - let x = instances[i] - XCTAssertTrue(oracle(i, i), "bad oracle: broken reflexivity at index \(i)", file: file, line: line) - - for j in instances.indices { - let y = instances[j] - - let predictedXY = oracle(i, j) - XCTAssertEqual( - predictedXY, oracle(j, i), - "bad oracle: broken symmetry between indices \(i), \(j)", - file: file, line: line) - - let isEqualXY = x == y - XCTAssertEqual( - predictedXY, isEqualXY, - """ - \((predictedXY - ? "expected equal, found not equal" - : "expected not equal, found equal")) - lhs (at index \(i)): \(String(reflecting: x)) - rhs (at index \(j)): \(String(reflecting: y)) - """, - file: file, line: line) - - // Not-equal is an inverse of equal. - XCTAssertNotEqual( - isEqualXY, x != y, - """ - lhs (at index \(i)): \(String(reflecting: x)) - rhs (at index \(j)): \(String(reflecting: y)) - """, - file: file, line: line) - - if !allowBrokenTransitivity { - // Check transitivity of the predicate represented by the oracle. - // If we are adding the instance `j` into an equivalence set, check that - // it is equal to every other instance in the set. - if predictedXY && i < j && transitivityScoreboard[i].value.insert(j).inserted { - if transitivityScoreboard[i].value.count == 1 { - transitivityScoreboard[i].value.insert(i) - } - for k in transitivityScoreboard[i].value { - XCTAssertTrue( - oracle(j, k), - "bad oracle: broken transitivity at indices \(i), \(j), \(k)", - file: file, line: line) - // No need to check equality between actual values, we will check - // them with the checks above. - } - precondition(transitivityScoreboard[j].value.isEmpty) - transitivityScoreboard[j] = transitivityScoreboard[i] - } - } - } - } -} - diff --git a/Darwin/Foundation-swiftoverlay-Tests/StdlibUnittest checkHashable.swift b/Darwin/Foundation-swiftoverlay-Tests/StdlibUnittest checkHashable.swift deleted file mode 100644 index d9a0b5e85f..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/StdlibUnittest checkHashable.swift +++ /dev/null @@ -1,178 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// FIXME: This should be in a separate package: -// rdar://57247249 Port StdlibUnittest's collection test suite to XCTest - -import XCTest - -/// Produce an integer hash value for `value` by feeding it to a dedicated -/// `Hasher`. This is always done by calling the `hash(into:)` method. -/// If a non-nil `seed` is given, it is used to perturb the hasher state; -/// this is useful for resolving accidental hash collisions. -private func hash(_ value: H, seed: Int? = nil) -> Int { - var hasher = Hasher() - if let seed = seed { - hasher.combine(seed) - } - hasher.combine(value) - return hasher.finalize() -} - -/// Test that the elements of `groups` consist of instances that satisfy the -/// semantic requirements of `Hashable`, with each group defining a distinct -/// equivalence class under `==`. -public func checkHashableGroups( - _ groups: Groups, - _ message: @autoclosure () -> String = "", - allowIncompleteHashing: Bool = false, - file: StaticString = #file, line: UInt = #line -) where Groups.Element: Collection, Groups.Element.Element: Hashable { - let instances = groups.flatMap { $0 } - // groupIndices[i] is the index of the element in groups that contains - // instances[i]. - let groupIndices = - zip(0..., groups).flatMap { i, group in group.map { _ in i } } - func equalityOracle(_ lhs: Int, _ rhs: Int) -> Bool { - return groupIndices[lhs] == groupIndices[rhs] - } - checkHashable( - instances, - equalityOracle: equalityOracle, - hashEqualityOracle: equalityOracle, - allowBrokenTransitivity: false, - allowIncompleteHashing: allowIncompleteHashing, - file: file, line: line) -} - -/// Test that the elements of `instances` satisfy the semantic requirements of -/// `Hashable`, using `equalityOracle` to generate equality and hashing -/// expectations from pairs of positions in `instances`. -public func checkHashable( - _ instances: Instances, - equalityOracle: (Instances.Index, Instances.Index) -> Bool, - allowBrokenTransitivity: Bool = false, - allowIncompleteHashing: Bool = false, - _ message: @autoclosure () -> String = "", - file: StaticString = #file, line: UInt = #line -) where Instances.Element: Hashable { - checkHashable( - instances, - equalityOracle: equalityOracle, - hashEqualityOracle: equalityOracle, - allowBrokenTransitivity: allowBrokenTransitivity, - allowIncompleteHashing: allowIncompleteHashing, - file: file, line: line) -} - -/// Test that the elements of `instances` satisfy the semantic -/// requirements of `Hashable`, using `equalityOracle` to generate -/// equality expectations from pairs of positions in `instances`, -/// and `hashEqualityOracle` to do the same for hashing. -public func checkHashable( - _ instances: Instances, - equalityOracle: (Instances.Index, Instances.Index) -> Bool, - hashEqualityOracle: (Instances.Index, Instances.Index) -> Bool, - allowBrokenTransitivity: Bool = false, - allowIncompleteHashing: Bool = false, - _ message: @autoclosure () -> String = "", - file: StaticString = #file, line: UInt = #line -) where - Instances.Element: Hashable { - checkEquatable( - instances, - oracle: equalityOracle, - allowBrokenTransitivity: allowBrokenTransitivity, - message(), - file: file, line: line) - - for i in instances.indices { - let x = instances[i] - for j in instances.indices { - let y = instances[j] - let predicted = hashEqualityOracle(i, j) - XCTAssertEqual( - predicted, hashEqualityOracle(j, i), - "bad hash oracle: broken symmetry between indices \(i), \(j)", - file: file, line: line) - if x == y { - XCTAssertTrue( - predicted, - """ - bad hash oracle: equality must imply hash equality - lhs (at index \(i)): \(x) - rhs (at index \(j)): \(y) - """, - file: file, line: line) - } - if predicted { - XCTAssertEqual( - hash(x), hash(y), - """ - hash(into:) expected to match, found to differ - lhs (at index \(i)): \(x) - rhs (at index \(j)): \(y) - """, - file: file, line: line) - XCTAssertEqual( - x.hashValue, y.hashValue, - """ - hashValue expected to match, found to differ - lhs (at index \(i)): \(x) - rhs (at index \(j)): \(y) - """, - file: file, line: line) - XCTAssertEqual( - x._rawHashValue(seed: 0), y._rawHashValue(seed: 0), - """ - _rawHashValue(seed:) expected to match, found to differ - lhs (at index \(i)): \(x) - rhs (at index \(j)): \(y) - """, - file: file, line: line) - } else if !allowIncompleteHashing { - // Try a few different seeds; at least one of them should discriminate - // between the hashes. It is extremely unlikely this check will fail - // all ten attempts, unless the type's hash encoding is not unique, - // or unless the hash equality oracle is wrong. - XCTAssertTrue( - (0..<10).contains { hash(x, seed: $0) != hash(y, seed: $0) }, - """ - hash(into:) expected to differ, found to match - lhs (at index \(i)): \(x) - rhs (at index \(j)): \(y) - """, - file: file, line: line) - XCTAssertTrue( - (0..<10).contains { i in - x._rawHashValue(seed: i) != y._rawHashValue(seed: i) - }, - """ - _rawHashValue(seed:) expected to differ, found to match - lhs (at index \(i)): \(x) - rhs (at index \(j)): \(y) - """, - file: file, line: line) - } - } - } -} - -public func checkHashable( - expectedEqual: Bool, _ lhs: T, _ rhs: T, - _ message: @autoclosure () -> String = "", - file: StaticString = #file, line: UInt = #line -) { - checkHashable( - [lhs, rhs], equalityOracle: { expectedEqual || $0 == $1 }, message(), - file: file, line: line) -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/StdlibUnittest expectEqual Types.swift b/Darwin/Foundation-swiftoverlay-Tests/StdlibUnittest expectEqual Types.swift deleted file mode 100644 index c34c6f582d..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/StdlibUnittest expectEqual Types.swift +++ /dev/null @@ -1,33 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// FIXME: This should be in a separate package: -// rdar://57247249 Port StdlibUnittest's collection test suite to XCTest - -import XCTest - -public func expectEqual( - _ expected: Any.Type, _ actual: Any.Type, - _ message: @autoclosure () -> String = "", - file: StaticString = #file, line: UInt = #line -) { - guard expected != actual else { return } - var report = """ - expected: \(String(reflecting: expected)) (of type \(String(reflecting: type(of: expected)))) - actual: \(String(reflecting: actual)) (of type \(String(reflecting: type(of: actual)))) - """ - let message = message() - if message != "" { - report += "\n\(message)" - } - XCTFail(report, file: file, line: line) -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestAffineTransform.swift b/Darwin/Foundation-swiftoverlay-Tests/TestAffineTransform.swift deleted file mode 100644 index 2e38f4af84..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestAffineTransform.swift +++ /dev/null @@ -1,396 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -#if os(macOS) -extension AffineTransform { - func transform(_ aRect: NSRect) -> NSRect { - return NSRect(origin: transform(aRect.origin), size: transform(aRect.size)) - } -} - -class TestAffineTransform : XCTestCase { - private let accuracyThreshold = 0.001 - - func checkPointTransformation(_ transform: AffineTransform, point: NSPoint, expectedPoint: NSPoint, _ message: String = "", file: StaticString = #file, line: UInt = #line) { - let newPoint = transform.transform(point) - XCTAssertEqual(Double(newPoint.x), Double(expectedPoint.x), accuracy: accuracyThreshold, - "x (expected: \(expectedPoint.x), was: \(newPoint.x)): \(message)", file: file, line: line) - XCTAssertEqual(Double(newPoint.y), Double(expectedPoint.y), accuracy: accuracyThreshold, - "y (expected: \(expectedPoint.y), was: \(newPoint.y)): \(message)", file: file, line: line) - } - - func checkSizeTransformation(_ transform: AffineTransform, size: NSSize, expectedSize: NSSize, _ message: String = "", file: StaticString = #file, line: UInt = #line) { - let newSize = transform.transform(size) - XCTAssertEqual(Double(newSize.width), Double(expectedSize.width), accuracy: accuracyThreshold, - "width (expected: \(expectedSize.width), was: \(newSize.width)): \(message)", file: file, line: line) - XCTAssertEqual(Double(newSize.height), Double(expectedSize.height), accuracy: accuracyThreshold, - "height (expected: \(expectedSize.height), was: \(newSize.height)): \(message)", file: file, line: line) - } - - func checkRectTransformation(_ transform: AffineTransform, rect: NSRect, expectedRect: NSRect, _ message: String = "", file: StaticString = #file, line: UInt = #line) { - let newRect = transform.transform(rect) - - checkPointTransformation(transform, point: newRect.origin, expectedPoint: expectedRect.origin, - "origin (expected: \(expectedRect.origin), was: \(newRect.origin)): \(message)", file: file, line: line) - checkSizeTransformation(transform, size: newRect.size, expectedSize: expectedRect.size, - "size (expected: \(expectedRect.size), was: \(newRect.size)): \(message)", file: file, line: line) - } - - func test_BasicConstruction() { - let defaultAffineTransform = AffineTransform() - let identityTransform = AffineTransform.identity - - XCTAssertEqual(defaultAffineTransform, identityTransform) - - // The diagonal entries (1,1) and (2,2) of the identity matrix are ones. The other entries are zeros. - // TODO: These should use DBL_MAX but it's not available as part of Glibc on Linux - XCTAssertEqual(Double(identityTransform.m11), Double(1), accuracy: accuracyThreshold) - XCTAssertEqual(Double(identityTransform.m22), Double(1), accuracy: accuracyThreshold) - - XCTAssertEqual(Double(identityTransform.m12), Double(0), accuracy: accuracyThreshold) - XCTAssertEqual(Double(identityTransform.m21), Double(0), accuracy: accuracyThreshold) - XCTAssertEqual(Double(identityTransform.tX), Double(0), accuracy: accuracyThreshold) - XCTAssertEqual(Double(identityTransform.tY), Double(0), accuracy: accuracyThreshold) - } - - func test_IdentityTransformation() { - let identityTransform = AffineTransform.identity - - func checkIdentityPointTransformation(_ point: NSPoint) { - checkPointTransformation(identityTransform, point: point, expectedPoint: point) - } - - checkIdentityPointTransformation(NSPoint()) - checkIdentityPointTransformation(NSPoint(x: CGFloat(24.5), y: CGFloat(10.0))) - checkIdentityPointTransformation(NSPoint(x: CGFloat(-7.5), y: CGFloat(2.0))) - - func checkIdentitySizeTransformation(_ size: NSSize) { - checkSizeTransformation(identityTransform, size: size, expectedSize: size) - } - - checkIdentitySizeTransformation(NSSize()) - checkIdentitySizeTransformation(NSSize(width: CGFloat(13.0), height: CGFloat(12.5))) - checkIdentitySizeTransformation(NSSize(width: CGFloat(100.0), height: CGFloat(-100.0))) - } - - func test_Translation() { - let point = NSPoint(x: CGFloat(0.0), y: CGFloat(0.0)) - - var noop = AffineTransform.identity - noop.translate(x: CGFloat(), y: CGFloat()) - checkPointTransformation(noop, point: point, expectedPoint: point) - - var translateH = AffineTransform.identity - translateH.translate(x: CGFloat(10.0), y: CGFloat()) - checkPointTransformation(translateH, point: point, expectedPoint: NSPoint(x: CGFloat(10.0), y: CGFloat())) - - var translateV = AffineTransform.identity - translateV.translate(x: CGFloat(), y: CGFloat(20.0)) - checkPointTransformation(translateV, point: point, expectedPoint: NSPoint(x: CGFloat(), y: CGFloat(20.0))) - - var translate = AffineTransform.identity - translate.translate(x: CGFloat(-30.0), y: CGFloat(40.0)) - checkPointTransformation(translate, point: point, expectedPoint: NSPoint(x: CGFloat(-30.0), y: CGFloat(40.0))) - } - - func test_Scale() { - let size = NSSize(width: CGFloat(10.0), height: CGFloat(10.0)) - - var noop = AffineTransform.identity - noop.scale(CGFloat(1.0)) - checkSizeTransformation(noop, size: size, expectedSize: size) - - var shrink = AffineTransform.identity - shrink.scale(CGFloat(0.5)) - checkSizeTransformation(shrink, size: size, expectedSize: NSSize(width: CGFloat(5.0), height: CGFloat(5.0))) - - var grow = AffineTransform.identity - grow.scale(CGFloat(3.0)) - checkSizeTransformation(grow, size: size, expectedSize: NSSize(width: CGFloat(30.0), height: CGFloat(30.0))) - - var stretch = AffineTransform.identity - stretch.scale(x: CGFloat(2.0), y: CGFloat(0.5)) - checkSizeTransformation(stretch, size: size, expectedSize: NSSize(width: CGFloat(20.0), height: CGFloat(5.0))) - } - - func test_Rotation_Degrees() { - let point = NSPoint(x: CGFloat(10.0), y: CGFloat(10.0)) - - var noop = AffineTransform.identity - noop.rotate(byDegrees: CGFloat()) - checkPointTransformation(noop, point: point, expectedPoint: point) - - var tenEighty = AffineTransform.identity - tenEighty.rotate(byDegrees: CGFloat(1080.0)) - checkPointTransformation(tenEighty, point: point, expectedPoint: point) - - var rotateCounterClockwise = AffineTransform.identity - rotateCounterClockwise.rotate(byDegrees: CGFloat(90.0)) - checkPointTransformation(rotateCounterClockwise, point: point, expectedPoint: NSPoint(x: CGFloat(-10.0), y: CGFloat(10.0))) - - var rotateClockwise = AffineTransform.identity - rotateClockwise.rotate(byDegrees: CGFloat(-90.0)) - checkPointTransformation(rotateClockwise, point: point, expectedPoint: NSPoint(x: CGFloat(10.0), y: CGFloat(-10.0))) - - var reflectAboutOrigin = AffineTransform.identity - reflectAboutOrigin.rotate(byDegrees: CGFloat(180.0)) - checkPointTransformation(reflectAboutOrigin, point: point, expectedPoint: NSPoint(x: CGFloat(-10.0), y: CGFloat(-10.0))) - } - - func test_Rotation_Radians() { - let point = NSPoint(x: CGFloat(10.0), y: CGFloat(10.0)) - - var noop = AffineTransform.identity - noop.rotate(byRadians: CGFloat()) - checkPointTransformation(noop, point: point, expectedPoint: point) - - var tenEighty = AffineTransform.identity - tenEighty.rotate(byRadians: 6 * .pi) - checkPointTransformation(tenEighty, point: point, expectedPoint: point) - - var rotateCounterClockwise = AffineTransform.identity - rotateCounterClockwise.rotate(byRadians: .pi / 2) - checkPointTransformation(rotateCounterClockwise, point: point, expectedPoint: NSPoint(x: CGFloat(-10.0), y: CGFloat(10.0))) - - var rotateClockwise = AffineTransform.identity - rotateClockwise.rotate(byRadians: -.pi / 2) - checkPointTransformation(rotateClockwise, point: point, expectedPoint: NSPoint(x: CGFloat(10.0), y: CGFloat(-10.0))) - - var reflectAboutOrigin = AffineTransform.identity - reflectAboutOrigin.rotate(byRadians: .pi) - checkPointTransformation(reflectAboutOrigin, point: point, expectedPoint: NSPoint(x: CGFloat(-10.0), y: CGFloat(-10.0))) - - var scaleThenRotate = AffineTransform(scale: 2) - scaleThenRotate.rotate(byRadians: .pi / 2) - checkPointTransformation(scaleThenRotate, point: point, expectedPoint: NSPoint(x: CGFloat(-20.0), y: CGFloat(20.0))) - } - - func test_Inversion() { - let point = NSPoint(x: CGFloat(10.0), y: CGFloat(10.0)) - - var translate = AffineTransform.identity - translate.translate(x: CGFloat(-30.0), y: CGFloat(40.0)) - - var rotate = AffineTransform.identity - translate.rotate(byDegrees: CGFloat(30.0)) - - var scale = AffineTransform.identity - scale.scale(CGFloat(2.0)) - - var identityTransform = AffineTransform.identity - - // append transformations - identityTransform.append(translate) - identityTransform.append(rotate) - identityTransform.append(scale) - - // invert transformations - scale.invert() - rotate.invert() - translate.invert() - - // append inverse transformations in reverse order - identityTransform.append(scale) - identityTransform.append(rotate) - identityTransform.append(translate) - - checkPointTransformation(identityTransform, point: point, expectedPoint: point) - } - - func test_TranslationComposed() { - var xyPlus5 = AffineTransform.identity - xyPlus5.translate(x: CGFloat(2.0), y: CGFloat(3.0)) - xyPlus5.translate(x: CGFloat(3.0), y: CGFloat(2.0)) - - checkPointTransformation(xyPlus5, point: NSPoint(x: CGFloat(-2.0), y: CGFloat(-3.0)), - expectedPoint: NSPoint(x: CGFloat(3.0), y: CGFloat(2.0))) - } - - func test_Scaling() { - var xyTimes5 = AffineTransform.identity - xyTimes5.scale(CGFloat(5.0)) - - checkPointTransformation(xyTimes5, point: NSPoint(x: CGFloat(-2.0), y: CGFloat(3.0)), - expectedPoint: NSPoint(x: CGFloat(-10.0), y: CGFloat(15.0))) - - var xTimes2YTimes3 = AffineTransform.identity - xTimes2YTimes3.scale(x: CGFloat(2.0), y: CGFloat(-3.0)) - - checkPointTransformation(xTimes2YTimes3, point: NSPoint(x: CGFloat(-1.0), y: CGFloat(3.5)), - expectedPoint: NSPoint(x: CGFloat(-2.0), y: CGFloat(-10.5))) - } - - func test_TranslationScaling() { - var xPlus2XYTimes5 = AffineTransform.identity - xPlus2XYTimes5.translate(x: CGFloat(2.0), y: CGFloat()) - xPlus2XYTimes5.scale(x: CGFloat(5.0), y: CGFloat(-5.0)) - - checkPointTransformation(xPlus2XYTimes5, point: NSPoint(x: CGFloat(1.0), y: CGFloat(2.0)), - expectedPoint: NSPoint(x: CGFloat(7.0), y: CGFloat(-10.0))) - } - - func test_ScalingTranslation() { - var xyTimes5XPlus3 = AffineTransform.identity - xyTimes5XPlus3.scale(CGFloat(5.0)) - xyTimes5XPlus3.translate(x: CGFloat(3.0), y: CGFloat()) - - checkPointTransformation(xyTimes5XPlus3, point: NSPoint(x: CGFloat(1.0), y: CGFloat(2.0)), - expectedPoint: NSPoint(x: CGFloat(20.0), y: CGFloat(10.0))) - } - - func test_AppendTransform() { - let point = NSPoint(x: CGFloat(10.0), y: CGFloat(10.0)) - - var identityTransform = AffineTransform.identity - identityTransform.append(identityTransform) - checkPointTransformation(identityTransform, point: point, expectedPoint: point) - - let translate = AffineTransform(translationByX: 10.0, byY: 0.0) - - let scale = AffineTransform(scale: 2.0) - - var translateThenScale = translate - translateThenScale.append(scale) - checkPointTransformation(translateThenScale, point: point, expectedPoint: NSPoint(x: CGFloat(40.0), y: CGFloat(20.0))) - } - - func test_PrependTransform() { - let point = NSPoint(x: CGFloat(10.0), y: CGFloat(10.0)) - - var identityTransform = AffineTransform.identity - identityTransform.append(identityTransform) - checkPointTransformation(identityTransform, point: point, expectedPoint: point) - - let translate = AffineTransform(translationByX: 10.0, byY: 0.0) - - let scale = AffineTransform(scale: 2.0) - - var scaleThenTranslate = translate - scaleThenTranslate.prepend(scale) - checkPointTransformation(scaleThenTranslate, point: point, expectedPoint: NSPoint(x: CGFloat(30.0), y: CGFloat(20.0))) - } - - func test_TransformComposition() { - let origin = NSPoint(x: CGFloat(10.0), y: CGFloat(10.0)) - let size = NSSize(width: CGFloat(40.0), height: CGFloat(20.0)) - let rect = NSRect(origin: origin, size: size) - let center = NSPoint(x: NSMidX(rect), y: NSMidY(rect)) - - let rotate = AffineTransform(rotationByDegrees: 90.0) - - let moveOrigin = AffineTransform(translationByX: -center.x, byY: -center.y) - - var moveBack = moveOrigin - moveBack.invert() - - var rotateAboutCenter = rotate - rotateAboutCenter.prepend(moveOrigin) - rotateAboutCenter.append(moveBack) - - // center of rect shouldn't move as its the rotation anchor - checkPointTransformation(rotateAboutCenter, point: center, expectedPoint: center) - } - - func test_hashing() { - guard #available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) else { return } - - // the transforms are made up and the values don't matter - let a = AffineTransform(m11: 1.0, m12: 2.5, m21: 66.2, m22: 40.2, tX: -5.5, tY: 3.7) - let b = AffineTransform(m11: -55.66, m12: 22.7, m21: 1.5, m22: 0.0, tX: -22, tY: -33) - let c = AffineTransform(m11: 4.5, m12: 1.1, m21: 0.025, m22: 0.077, tX: -0.55, tY: 33.2) - let d = AffineTransform(m11: 7.0, m12: -2.3, m21: 6.7, m22: 0.25, tX: 0.556, tY: 0.99) - let e = AffineTransform(m11: 0.498, m12: -0.284, m21: -0.742, m22: 0.3248, tX: 12, tY: 44) - - // Samples testing that every component is properly hashed - let x1 = AffineTransform(m11: 1.0, m12: 2.0, m21: 3.0, m22: 4.0, tX: 5.0, tY: 6.0) - let x2 = AffineTransform(m11: 1.5, m12: 2.0, m21: 3.0, m22: 4.0, tX: 5.0, tY: 6.0) - let x3 = AffineTransform(m11: 1.0, m12: 2.5, m21: 3.0, m22: 4.0, tX: 5.0, tY: 6.0) - let x4 = AffineTransform(m11: 1.0, m12: 2.0, m21: 3.5, m22: 4.0, tX: 5.0, tY: 6.0) - let x5 = AffineTransform(m11: 1.0, m12: 2.0, m21: 3.0, m22: 4.5, tX: 5.0, tY: 6.0) - let x6 = AffineTransform(m11: 1.0, m12: 2.0, m21: 3.0, m22: 4.0, tX: 5.5, tY: 6.0) - let x7 = AffineTransform(m11: 1.0, m12: 2.0, m21: 3.0, m22: 4.0, tX: 5.0, tY: 6.5) - - @inline(never) - func bridged(_ t: AffineTransform) -> NSAffineTransform { - return t as NSAffineTransform - } - - let values: [[AffineTransform]] = [ - [AffineTransform.identity, NSAffineTransform() as AffineTransform], - [a, bridged(a) as AffineTransform], - [b, bridged(b) as AffineTransform], - [c, bridged(c) as AffineTransform], - [d, bridged(d) as AffineTransform], - [e, bridged(e) as AffineTransform], - [x1], [x2], [x3], [x4], [x5], [x6], [x7] - ] - checkHashableGroups(values) - } - - func test_AnyHashable() { - func makeNSAffineTransform(rotatedByDegrees angle: CGFloat) -> NSAffineTransform { - let result = NSAffineTransform() - result.rotate(byDegrees: angle) - return result - } - - let s1 = AffineTransform.identity - let s2 = AffineTransform(m11: -55.66, m12: 22.7, m21: 1.5, m22: 0.0, tX: -22, tY: -33) - let s3 = AffineTransform(m11: -55.66, m12: 22.7, m21: 1.5, m22: 0.0, tX: -22, tY: -33) - let s4 = makeNSAffineTransform(rotatedByDegrees: 10) as AffineTransform - let s5 = makeNSAffineTransform(rotatedByDegrees: 10) as AffineTransform - - let c1 = NSAffineTransform(transform: s1) - let c2 = NSAffineTransform(transform: s2) - let c3 = NSAffineTransform(transform: s3) - let c4 = makeNSAffineTransform(rotatedByDegrees: 10) - let c5 = makeNSAffineTransform(rotatedByDegrees: 10) - - let groups: [[AnyHashable]] = [ - [s1, c1], - [s2, c2, s3, c3], - [s4, c4, s5, c5] - ] - checkHashableGroups(groups) - - expectEqual(AffineTransform.self, type(of: (s1 as AnyHashable).base)) - expectEqual(AffineTransform.self, type(of: (s2 as AnyHashable).base)) - expectEqual(AffineTransform.self, type(of: (s3 as AnyHashable).base)) - expectEqual(AffineTransform.self, type(of: (s4 as AnyHashable).base)) - expectEqual(AffineTransform.self, type(of: (s5 as AnyHashable).base)) - - expectEqual(AffineTransform.self, type(of: (c1 as AnyHashable).base)) - expectEqual(AffineTransform.self, type(of: (c2 as AnyHashable).base)) - expectEqual(AffineTransform.self, type(of: (c3 as AnyHashable).base)) - expectEqual(AffineTransform.self, type(of: (c4 as AnyHashable).base)) - expectEqual(AffineTransform.self, type(of: (c5 as AnyHashable).base)) - } - - func test_unconditionallyBridgeFromObjectiveC() { - XCTAssertEqual(AffineTransform(), AffineTransform._unconditionallyBridgeFromObjectiveC(nil)) - } - - func test_rotation_compose() { - var t = AffineTransform.identity - t.translate(x: 1.0, y: 1.0) - t.rotate(byDegrees: 90) - t.translate(x: -1.0, y: -1.0) - let result = t.transform(NSPoint(x: 1.0, y: 2.0)) - XCTAssertEqual(0.0, Double(result.x), accuracy: accuracyThreshold) - XCTAssertEqual(1.0, Double(result.y), accuracy: accuracyThreshold) - } -} - -#endif diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestCalendar.swift b/Darwin/Foundation-swiftoverlay-Tests/TestCalendar.swift deleted file mode 100644 index 85ff8afbdc..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestCalendar.swift +++ /dev/null @@ -1,296 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -class TestCalendar : XCTestCase { - - func test_copyOnWrite() { - var c = Calendar(identifier: .gregorian) - let c2 = c - XCTAssertEqual(c, c2) - - // Change the weekday and check result - let firstWeekday = c.firstWeekday - let newFirstWeekday = firstWeekday < 7 ? firstWeekday + 1 : firstWeekday - 1 - - c.firstWeekday = newFirstWeekday - XCTAssertEqual(newFirstWeekday, c.firstWeekday) - XCTAssertEqual(c2.firstWeekday, firstWeekday) - - XCTAssertNotEqual(c, c2) - - // Change the time zone and check result - let c3 = c - XCTAssertEqual(c, c3) - - let tz = c.timeZone - // Use two different identifiers so we don't fail if the current time zone happens to be the one returned - let aTimeZoneId = TimeZone.knownTimeZoneIdentifiers[1] - let anotherTimeZoneId = TimeZone.knownTimeZoneIdentifiers[0] - - let newTz = tz.identifier == aTimeZoneId ? TimeZone(identifier: anotherTimeZoneId)! : TimeZone(identifier: aTimeZoneId)! - - c.timeZone = newTz - XCTAssertNotEqual(c, c3) - - } - - func test_bridgingAutoupdating() { - let tester = CalendarBridgingTester() - - do { - let c = Calendar.autoupdatingCurrent - let result = tester.verifyAutoupdating(c) - XCTAssertTrue(result) - } - - // Round trip an autoupdating calendar - do { - let c = tester.autoupdatingCurrentCalendar() - let result = tester.verifyAutoupdating(c) - XCTAssertTrue(result) - } - } - - func test_equality() { - let autoupdating = Calendar.autoupdatingCurrent - let autoupdating2 = Calendar.autoupdatingCurrent - - XCTAssertEqual(autoupdating, autoupdating2) - - let current = Calendar.current - - XCTAssertNotEqual(autoupdating, current) - - // Make a copy of current - var current2 = current - XCTAssertEqual(current, current2) - - // Mutate something (making sure we don't use the current time zone) - if current2.timeZone.identifier == "America/Los_Angeles" { - current2.timeZone = TimeZone(identifier: "America/New_York")! - } else { - current2.timeZone = TimeZone(identifier: "America/Los_Angeles")! - } - XCTAssertNotEqual(current, current2) - - // Mutate something else - current2 = current - XCTAssertEqual(current, current2) - - current2.locale = Locale(identifier: "MyMadeUpLocale") - XCTAssertNotEqual(current, current2) - } - - func test_hash() { - let calendars: [Calendar] = [ - Calendar.autoupdatingCurrent, - Calendar(identifier: .buddhist), - Calendar(identifier: .gregorian), - Calendar(identifier: .islamic), - Calendar(identifier: .iso8601), - ] - checkHashable(calendars, equalityOracle: { $0 == $1 }) - - // autoupdating calendar isn't equal to the current, even though it's - // likely to be the same. - let calendars2: [Calendar] = [ - Calendar.autoupdatingCurrent, - Calendar.current, - ] - checkHashable(calendars2, equalityOracle: { $0 == $1 }) - } - - func test_properties() { - // Mainly we want to just make sure these go through to the NSCalendar implementation at this point. - if #available(iOS 8.0, macOS 10.7, *) { - var c = Calendar(identifier: .gregorian) - // Use english localization - c.locale = Locale(identifier: "en_US") - c.timeZone = TimeZone(identifier: "America/Los_Angeles")! - - XCTAssertEqual("AM", c.amSymbol) - XCTAssertEqual("PM", c.pmSymbol) - XCTAssertEqual(["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], c.quarterSymbols) - XCTAssertEqual(["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], c.standaloneQuarterSymbols) - XCTAssertEqual(["BC", "AD"], c.eraSymbols) - XCTAssertEqual(["Before Christ", "Anno Domini"], c.longEraSymbols) - XCTAssertEqual(["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], c.veryShortMonthSymbols) - XCTAssertEqual(["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], c.veryShortStandaloneMonthSymbols) - XCTAssertEqual(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], c.shortMonthSymbols) - XCTAssertEqual(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], c.shortStandaloneMonthSymbols) - XCTAssertEqual(["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], c.monthSymbols) - XCTAssertEqual(["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], c.standaloneMonthSymbols) - XCTAssertEqual(["Q1", "Q2", "Q3", "Q4"], c.shortQuarterSymbols) - XCTAssertEqual(["Q1", "Q2", "Q3", "Q4"], c.shortStandaloneQuarterSymbols) - XCTAssertEqual(["S", "M", "T", "W", "T", "F", "S"], c.veryShortStandaloneWeekdaySymbols) - XCTAssertEqual(["S", "M", "T", "W", "T", "F", "S"], c.veryShortWeekdaySymbols) - XCTAssertEqual(["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], c.shortStandaloneWeekdaySymbols) - XCTAssertEqual(["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], c.shortWeekdaySymbols) - XCTAssertEqual(["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], c.standaloneWeekdaySymbols) - XCTAssertEqual(["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], c.weekdaySymbols) - - // The idea behind these tests is not to test calendrical math, but to simply verify that we are getting some kind of result from calling through to the underlying Foundation and ICU logic. If we move that logic into this struct in the future, then we will need to expand the test cases. - - // This is a very special Date in my life: the exact moment when I wrote these test cases and therefore knew all of the answers. - let d = Date(timeIntervalSince1970: 1468705593.2533731) - let earlierD = c.date(byAdding: DateComponents(day: -10), to: d)! - - XCTAssertEqual(1..<29, c.minimumRange(of: .day)) - XCTAssertEqual(1..<54, c.maximumRange(of: .weekOfYear)) - XCTAssertEqual(0..<60, c.range(of: .second, in: .minute, for: d)) - - var d1 = Date() - var ti : TimeInterval = 0 - - XCTAssertTrue(c.dateInterval(of: .day, start: &d1, interval: &ti, for: d)) - XCTAssertEqual(Date(timeIntervalSince1970: 1468652400.0), d1) - XCTAssertEqual(86400, ti) - - if #available(iOS 10.10, macOS 10.12, tvOS 10.0, watchOS 3.0, *) { - let dateInterval = c.dateInterval(of: .day, for: d) - XCTAssertEqual(DateInterval(start: d1, duration: ti), dateInterval) - } - - XCTAssertEqual(15, c.ordinality(of: .hour, in: .day, for: d)) - - XCTAssertEqual(Date(timeIntervalSince1970: 1468791993.2533731), c.date(byAdding: .day, value: 1, to: d)) - XCTAssertEqual(Date(timeIntervalSince1970: 1468791993.2533731), c.date(byAdding: DateComponents(day: 1), to: d)) - - XCTAssertEqual(Date(timeIntervalSince1970: 946627200.0), c.date(from: DateComponents(year: 1999, month: 12, day: 31))) - - let comps = c.dateComponents([.year, .month, .day], from: Date(timeIntervalSince1970: 946627200.0)) - XCTAssertEqual(1999, comps.year) - XCTAssertEqual(12, comps.month) - XCTAssertEqual(31, comps.day) - - XCTAssertEqual(10, c.dateComponents([.day], from: d, to: c.date(byAdding: DateComponents(day: 10), to: d)!).day) - - XCTAssertEqual(30, c.dateComponents([.day], from: DateComponents(year: 1999, month: 12, day: 1), to: DateComponents(year: 1999, month: 12, day: 31)).day) - - XCTAssertEqual(2016, c.component(.year, from: d)) - - XCTAssertEqual(Date(timeIntervalSince1970: 1468652400.0), c.startOfDay(for: d)) - - if #available(iOS 8, macOS 10.10, *) { - // Mac OS X 10.9 and iOS 7 had a bug in NSCalendar for hour, minute, and second granularities. - XCTAssertEqual(.orderedSame, c.compare(d, to: d + 10, toGranularity: .minute)) - } - - XCTAssertFalse(c.isDate(d, equalTo: d + 10, toGranularity: .second)) - XCTAssertTrue(c.isDate(d, equalTo: d + 10, toGranularity: .day)) - - XCTAssertFalse(c.isDate(earlierD, inSameDayAs: d)) - XCTAssertTrue(c.isDate(d, inSameDayAs: d)) - - XCTAssertFalse(c.isDateInToday(earlierD)) - XCTAssertFalse(c.isDateInYesterday(earlierD)) - XCTAssertFalse(c.isDateInTomorrow(earlierD)) - - XCTAssertTrue(c.isDateInWeekend(d)) // 😢 - - XCTAssertTrue(c.dateIntervalOfWeekend(containing: d, start: &d1, interval: &ti)) - - if #available(iOS 10.10, macOS 10.12, tvOS 10.0, watchOS 3.0, *) { - let thisWeekend = DateInterval(start: Date(timeIntervalSince1970: 1468652400.0), duration: 172800.0) - - XCTAssertEqual(thisWeekend, DateInterval(start: d1, duration: ti)) - XCTAssertEqual(thisWeekend, c.dateIntervalOfWeekend(containing: d)) - } - - - XCTAssertTrue(c.nextWeekend(startingAfter: d, start: &d1, interval: &ti)) - - if #available(iOS 10.10, macOS 10.12, tvOS 10.0, watchOS 3.0, *) { - let nextWeekend = DateInterval(start: Date(timeIntervalSince1970: 1469257200.0), duration: 172800.0) - - XCTAssertEqual(nextWeekend, DateInterval(start: d1, duration: ti)) - XCTAssertEqual(nextWeekend, c.nextWeekend(startingAfter: d)) - } - - // Enumeration - - var count = 0 - var exactCount = 0 - - // Find the days numbered '31' after 'd', allowing the algorithm to move to the next day if required - c.enumerateDates(startingAfter: d, matching: DateComponents(day: 31), matchingPolicy: .nextTime) { result, exact, stop in - // Just stop some arbitrary time in the future - if result! > d + 86400*365 { stop = true } - count += 1 - if exact { exactCount += 1 } - } - - /* - Optional(2016-07-31 07:00:00 +0000) - Optional(2016-08-31 07:00:00 +0000) - Optional(2016-10-01 07:00:00 +0000) - Optional(2016-10-31 07:00:00 +0000) - Optional(2016-12-01 08:00:00 +0000) - Optional(2016-12-31 08:00:00 +0000) - Optional(2017-01-31 08:00:00 +0000) - Optional(2017-03-01 08:00:00 +0000) - Optional(2017-03-31 07:00:00 +0000) - Optional(2017-05-01 07:00:00 +0000) - Optional(2017-05-31 07:00:00 +0000) - Optional(2017-07-01 07:00:00 +0000) - Optional(2017-07-31 07:00:00 +0000) - */ - - XCTAssertEqual(count, 13) - XCTAssertEqual(exactCount, 8) - - - XCTAssertEqual(Date(timeIntervalSince1970: 1469948400.0), c.nextDate(after: d, matching: DateComponents(day: 31), matchingPolicy: .nextTime)) - - - XCTAssertEqual(Date(timeIntervalSince1970: 1468742400.0), c.date(bySetting: .hour, value: 1, of: d)) - - XCTAssertEqual(Date(timeIntervalSince1970: 1468656123.0), c.date(bySettingHour: 1, minute: 2, second: 3, of: d, matchingPolicy: .nextTime)) - - XCTAssertTrue(c.date(d, matchesComponents: DateComponents(month: 7))) - XCTAssertFalse(c.date(d, matchesComponents: DateComponents(month: 7, day: 31))) - } - } - - func test_AnyHashableContainingCalendar() { - let values: [Calendar] = [ - Calendar(identifier: .gregorian), - Calendar(identifier: .japanese), - Calendar(identifier: .japanese) - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(Calendar.self, type(of: anyHashables[0].base)) - expectEqual(Calendar.self, type(of: anyHashables[1].base)) - expectEqual(Calendar.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableCreatedFromNSCalendar() { - if #available(iOS 8.0, *) { - let values: [NSCalendar] = [ - NSCalendar(identifier: .gregorian)!, - NSCalendar(identifier: .japanese)!, - NSCalendar(identifier: .japanese)!, - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(Calendar.self, type(of: anyHashables[0].base)) - expectEqual(Calendar.self, type(of: anyHashables[1].base)) - expectEqual(Calendar.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - } -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestCharacterSet.swift b/Darwin/Foundation-swiftoverlay-Tests/TestCharacterSet.swift deleted file mode 100644 index de86ef1b0c..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestCharacterSet.swift +++ /dev/null @@ -1,327 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -class TestCharacterSet : XCTestCase { - let capitalA = UnicodeScalar(0x0041)! // LATIN CAPITAL LETTER A - let capitalB = UnicodeScalar(0x0042)! // LATIN CAPITAL LETTER B - let capitalC = UnicodeScalar(0x0043)! // LATIN CAPITAL LETTER C - - func testBasicConstruction() { - // Create a character set - let cs = CharacterSet.letters - - // Use some method from it - let invertedCs = cs.inverted - XCTAssertTrue(!invertedCs.contains(capitalA), "Character set must not contain our letter") - - // Use another method from it - let originalCs = invertedCs.inverted - - XCTAssertTrue(originalCs.contains(capitalA), "Character set must contain our letter") - } - - func testMutability_copyOnWrite() { - var firstCharacterSet = CharacterSet(charactersIn: "ABC") - XCTAssertTrue(firstCharacterSet.contains(capitalA), "Character set must contain our letter") - XCTAssertTrue(firstCharacterSet.contains(capitalB), "Character set must contain our letter") - XCTAssertTrue(firstCharacterSet.contains(capitalC), "Character set must contain our letter") - - // Make a 'copy' (just the struct) - var secondCharacterSet = firstCharacterSet - // first: ABC, second: ABC - - // Mutate first and verify that it has correct content - firstCharacterSet.remove(charactersIn: "A") - // first: BC, second: ABC - - XCTAssertTrue(!firstCharacterSet.contains(capitalA), "Character set must not contain our letter") - XCTAssertTrue(secondCharacterSet.contains(capitalA), "Copy should not have been mutated") - - // Make a 'copy' (just the struct) of the second set, mutate it - let thirdCharacterSet = secondCharacterSet - // first: BC, second: ABC, third: ABC - - secondCharacterSet.remove(charactersIn: "B") - // first: BC, second: AC, third: ABC - - XCTAssertTrue(firstCharacterSet.contains(capitalB), "Character set must contain our letter") - XCTAssertTrue(!secondCharacterSet.contains(capitalB), "Character set must not contain our letter") - XCTAssertTrue(thirdCharacterSet.contains(capitalB), "Character set must contain our letter") - - firstCharacterSet.remove(charactersIn: "C") - // first: B, second: AC, third: ABC - - XCTAssertTrue(!firstCharacterSet.contains(capitalC), "Character set must not contain our letter") - XCTAssertTrue(secondCharacterSet.contains(capitalC), "Character set must not contain our letter") - XCTAssertTrue(thirdCharacterSet.contains(capitalC), "Character set must contain our letter") - } - - func testMutability_mutableCopyCrash() { - let cs = CharacterSet(charactersIn: "ABC") - (cs as NSCharacterSet).mutableCopy() // this should not crash - } - - func testMutability_SR_1782() { - var nonAlphanumeric = CharacterSet.alphanumerics.inverted - nonAlphanumeric.remove(charactersIn: " ") // this should not crash - } - - func testRanges() { - // Simple range check - let asciiUppercase = CharacterSet(charactersIn: UnicodeScalar(0x41)!...UnicodeScalar(0x5A)!) - XCTAssertTrue(asciiUppercase.contains(UnicodeScalar(0x49)!)) - XCTAssertTrue(asciiUppercase.contains(UnicodeScalar(0x5A)!)) - XCTAssertTrue(asciiUppercase.contains(UnicodeScalar(0x41)!)) - XCTAssertTrue(!asciiUppercase.contains(UnicodeScalar(0x5B)!)) - - // Some string filtering tests - let asciiLowercase = CharacterSet(charactersIn: UnicodeScalar(0x61)!...UnicodeScalar(0x7B)!) - let testString = "helloHELLOhello" - let expected = "HELLO" - - let result = testString.trimmingCharacters(in: asciiLowercase) - XCTAssertEqual(result, expected) - } - - func testClosedRanges_SR_2988() { - // "CharacterSet.insert(charactersIn: ClosedRange) crashes on a closed ClosedRange containing U+D7FF" - let problematicChar = UnicodeScalar(0xD7FF)! - let range = capitalA...problematicChar - var characters = CharacterSet(charactersIn: range) // this should not crash - XCTAssertTrue(characters.contains(problematicChar)) - characters.remove(charactersIn: range) // this should not crash - XCTAssertTrue(!characters.contains(problematicChar)) - characters.insert(charactersIn: range) // this should not crash - XCTAssertTrue(characters.contains(problematicChar)) - } - - func testUpperBoundaryInsert_SR_2988() { - // "CharacterSet.insert(_: Unicode.Scalar) crashes on U+D7FF" - let problematicChar = UnicodeScalar(0xD7FF)! - var characters = CharacterSet() - characters.insert(problematicChar) // this should not crash - XCTAssertTrue(characters.contains(problematicChar)) - characters.remove(problematicChar) // this should not crash - XCTAssertTrue(!characters.contains(problematicChar)) - } - - func testInsertAndRemove() { - var asciiUppercase = CharacterSet(charactersIn: UnicodeScalar(0x41)!...UnicodeScalar(0x5A)!) - XCTAssertTrue(asciiUppercase.contains(UnicodeScalar(0x49)!)) - XCTAssertTrue(asciiUppercase.contains(UnicodeScalar(0x5A)!)) - XCTAssertTrue(asciiUppercase.contains(UnicodeScalar(0x41)!)) - - asciiUppercase.remove(UnicodeScalar(0x49)!) - XCTAssertTrue(!asciiUppercase.contains(UnicodeScalar(0x49)!)) - XCTAssertTrue(asciiUppercase.contains(UnicodeScalar(0x5A)!)) - XCTAssertTrue(asciiUppercase.contains(UnicodeScalar(0x41)!)) - - - // Zero-length range - asciiUppercase.remove(charactersIn: UnicodeScalar(0x41)!..? { - willSet { - if let p = _pointer { free(p.baseAddress) } - } - } - - init(length : Int) { - _length = length - super.init() - } - - required init?(coder aDecoder: NSCoder) { - // Not tested - fatalError() - } - - deinit { - if let p = _pointer { - free(p.baseAddress) - } - } - - override var length : Int { - get { - return _length - } - } - - override var bytes : UnsafeRawPointer { - if let d = _pointer { - return UnsafeRawPointer(d.baseAddress!) - } else { - // Need to allocate the buffer now. - // It doesn't matter if the buffer is uniquely referenced or not here. - let buffer = malloc(length) - memset(buffer, 1, length) - let bytePtr = buffer!.bindMemory(to: UInt8.self, capacity: length) - let result = UnsafeMutableBufferPointer(start: bytePtr, count: length) - _pointer = result - return UnsafeRawPointer(result.baseAddress!) - } - } - - override func getBytes(_ buffer: UnsafeMutableRawPointer, length: Int) { - if let d = _pointer { - // Get the real data from the buffer - memmove(buffer, d.baseAddress, length) - } else { - // A more efficient implementation of getBytes in the case where no one has asked for our backing bytes - memset(buffer, 1, length) - } - } - - override func copy(with zone: NSZone? = nil) -> Any { - return self - } - - override func mutableCopy(with zone: NSZone? = nil) -> Any { - return AllOnesData(length: _length) - } - } - - - class AllOnesData : NSMutableData { - - private var _length : Int - var _pointer : UnsafeMutableBufferPointer? { - willSet { - if let p = _pointer { free(p.baseAddress) } - } - } - - override init(length : Int) { - _length = length - super.init() - } - - required init?(coder aDecoder: NSCoder) { - // Not tested - fatalError() - } - - deinit { - if let p = _pointer { - free(p.baseAddress) - } - } - - override var length : Int { - get { - return _length - } - set { - if let ptr = _pointer { - // Copy the data to our new length buffer - let newBuffer = malloc(newValue)! - if newValue <= _length { - memmove(newBuffer, ptr.baseAddress, newValue) - } else if newValue > _length { - memmove(newBuffer, ptr.baseAddress, _length) - memset(newBuffer + _length, 1, newValue - _length) - } - let bytePtr = newBuffer.bindMemory(to: UInt8.self, capacity: newValue) - _pointer = UnsafeMutableBufferPointer(start: bytePtr, count: newValue) - } - _length = newValue - } - } - - override var bytes : UnsafeRawPointer { - if let d = _pointer { - return UnsafeRawPointer(d.baseAddress!) - } else { - // Need to allocate the buffer now. - // It doesn't matter if the buffer is uniquely referenced or not here. - let buffer = malloc(length) - memset(buffer, 1, length) - let bytePtr = buffer!.bindMemory(to: UInt8.self, capacity: length) - let result = UnsafeMutableBufferPointer(start: bytePtr, count: length) - _pointer = result - return UnsafeRawPointer(result.baseAddress!) - } - } - - override var mutableBytes: UnsafeMutableRawPointer { - let newBufferLength = _length - let newBuffer = malloc(newBufferLength) - if let ptr = _pointer { - // Copy the existing data to the new box, then return its pointer - memmove(newBuffer, ptr.baseAddress, newBufferLength) - } else { - // Set new data to 1s - memset(newBuffer, 1, newBufferLength) - } - let bytePtr = newBuffer!.bindMemory(to: UInt8.self, capacity: newBufferLength) - let result = UnsafeMutableBufferPointer(start: bytePtr, count: newBufferLength) - _pointer = result - _length = newBufferLength - return UnsafeMutableRawPointer(result.baseAddress!) - } - - override func getBytes(_ buffer: UnsafeMutableRawPointer, length: Int) { - if let d = _pointer { - // Get the real data from the buffer - memmove(buffer, d.baseAddress, length) - } else { - // A more efficient implementation of getBytes in the case where no one has asked for our backing bytes - memset(buffer, 1, length) - } - } - } - - var heldData: Data? - - // this holds a reference while applying the function which forces the internal ref type to become non-uniquely referenced - func holdReference(_ data: Data, apply: () -> Void) { - heldData = data - apply() - heldData = nil - } - - // MARK: - - - // String of course has its own way to get data, but this way tests our own data struct - func dataFrom(_ string : String) -> Data { - // Create a Data out of those bytes - return string.utf8CString.withUnsafeBufferPointer { (ptr) in - ptr.baseAddress!.withMemoryRebound(to: UInt8.self, capacity: ptr.count) { - // Subtract 1 so we don't get the null terminator byte. This matches NSString behavior. - return Data(bytes: $0, count: ptr.count - 1) - } - } - } - - // MARK: - - - func testBasicConstruction() { - - // Make sure that we were able to create some data - let hello = dataFrom("hello") - let helloLength = hello.count - XCTAssertEqual(hello[0], 0x68, "Unexpected first byte") - - let world = dataFrom(" world") - var helloWorld = hello - world.withUnsafeBytes { - helloWorld.append($0, count: world.count) - } - - XCTAssertEqual(hello[0], 0x68, "First byte should not have changed") - XCTAssertEqual(hello.count, helloLength, "Length of first data should not have changed") - XCTAssertEqual(helloWorld.count, hello.count + world.count, "The total length should include both buffers") - } - - func testInitializationWithArray() { - let data = Data(bytes: [1, 2, 3]) - XCTAssertEqual(3, data.count) - - let data2 = Data(bytes: [1, 2, 3].filter { $0 >= 2 }) - XCTAssertEqual(2, data2.count) - - let data3 = Data(bytes: [1, 2, 3, 4, 5][1..<3]) - XCTAssertEqual(2, data3.count) - } - - func testInitializationWithBufferPointer() { - let nilBuffer = UnsafeBufferPointer(start: nil, count: 0) - let data = Data(buffer: nilBuffer) - XCTAssertEqual(data, Data()) - - let validPointer = UnsafeMutablePointer.allocate(capacity: 2) - validPointer[0] = 0xCA - validPointer[1] = 0xFE - defer { validPointer.deallocate() } - - let emptyBuffer = UnsafeBufferPointer(start: validPointer, count: 0) - let data2 = Data(buffer: emptyBuffer) - XCTAssertEqual(data2, Data()) - - let shortBuffer = UnsafeBufferPointer(start: validPointer, count: 1) - let data3 = Data(buffer: shortBuffer) - XCTAssertEqual(data3, Data([0xCA])) - - let fullBuffer = UnsafeBufferPointer(start: validPointer, count: 2) - let data4 = Data(buffer: fullBuffer) - XCTAssertEqual(data4, Data([0xCA, 0xFE])) - - let tuple: (UInt16, UInt16, UInt16, UInt16) = (0xFF, 0xFE, 0xFD, 0xFC) - withUnsafeBytes(of: tuple) { - // If necessary, port this to big-endian. - let tupleBuffer: UnsafeBufferPointer = $0.bindMemory(to: UInt8.self) - let data5 = Data(buffer: tupleBuffer) - XCTAssertEqual(data5, Data([0xFF, 0x00, 0xFE, 0x00, 0xFD, 0x00, 0xFC, 0x00])) - } - } - - func testInitializationWithMutableBufferPointer() { - let nilBuffer = UnsafeMutableBufferPointer(start: nil, count: 0) - let data = Data(buffer: nilBuffer) - XCTAssertEqual(data, Data()) - - let validPointer = UnsafeMutablePointer.allocate(capacity: 2) - validPointer[0] = 0xCA - validPointer[1] = 0xFE - defer { validPointer.deallocate() } - - let emptyBuffer = UnsafeMutableBufferPointer(start: validPointer, count: 0) - let data2 = Data(buffer: emptyBuffer) - XCTAssertEqual(data2, Data()) - - let shortBuffer = UnsafeMutableBufferPointer(start: validPointer, count: 1) - let data3 = Data(buffer: shortBuffer) - XCTAssertEqual(data3, Data([0xCA])) - - let fullBuffer = UnsafeMutableBufferPointer(start: validPointer, count: 2) - let data4 = Data(buffer: fullBuffer) - XCTAssertEqual(data4, Data([0xCA, 0xFE])) - - var tuple: (UInt16, UInt16, UInt16, UInt16) = (0xFF, 0xFE, 0xFD, 0xFC) - withUnsafeMutableBytes(of: &tuple) { - // If necessary, port this to big-endian. - let tupleBuffer: UnsafeMutableBufferPointer = $0.bindMemory(to: UInt8.self) - let data5 = Data(buffer: tupleBuffer) - XCTAssertEqual(data5, Data([0xFF, 0x00, 0xFE, 0x00, 0xFD, 0x00, 0xFC, 0x00])) - } - } - - func testMutableData() { - let hello = dataFrom("hello") - let helloLength = hello.count - XCTAssertEqual(hello[0], 0x68, "Unexpected first byte") - - // Double the length - var mutatingHello = hello - mutatingHello.count *= 2 - - XCTAssertEqual(hello.count, helloLength, "The length of the initial data should not have changed") - XCTAssertEqual(mutatingHello.count, helloLength * 2, "The length should have changed") - - // Get the underlying data for hello2 - mutatingHello.withUnsafeMutableBytes { (bytes : UnsafeMutablePointer) in - XCTAssertEqual(bytes.pointee, 0x68, "First byte should be 0x68") - - // Mutate it - bytes.pointee = 0x67 - XCTAssertEqual(bytes.pointee, 0x67, "First byte should be 0x67") - - // Verify that the first data is still correct - XCTAssertEqual(hello[0], 0x68, "The first byte should still be 0x68") - } - } - - func testCustomData() { - let length = 5 - let allOnesData = Data(referencing: AllOnesData(length: length)) - XCTAssertEqual(1, allOnesData[0], "First byte of all 1s data should be 1") - - // Double the length - var allOnesCopyToMutate = allOnesData - allOnesCopyToMutate.count = allOnesData.count * 2 - - XCTAssertEqual(allOnesData.count, length, "The length of the initial data should not have changed") - XCTAssertEqual(allOnesCopyToMutate.count, length * 2, "The length should have changed") - - // Force the second data to create its storage - allOnesCopyToMutate.withUnsafeMutableBytes { (bytes : UnsafeMutablePointer) in - XCTAssertEqual(bytes.pointee, 1, "First byte should be 1") - - // Mutate the second data - bytes.pointee = 0 - XCTAssertEqual(bytes.pointee, 0, "First byte should be 0") - - // Verify that the first data is still 1 - XCTAssertEqual(allOnesData[0], 1, "The first byte should still be 1") - } - - } - - func testBridgingDefault() { - let hello = dataFrom("hello") - // Convert from struct Data to NSData - if let s = NSString(data: hello, encoding: String.Encoding.utf8.rawValue) { - XCTAssertTrue(s.isEqual(to: "hello"), "The strings should be equal") - } - - // Convert from NSData to struct Data - let goodbye = dataFrom("goodbye") - if let resultingData = NSString(string: "goodbye").data(using: String.Encoding.utf8.rawValue) { - XCTAssertEqual(resultingData[0], goodbye[0], "First byte should be equal") - } - } - - func testBridgingMutable() { - // Create a mutable data - var helloWorld = dataFrom("hello") - helloWorld.append(dataFrom("world")) - - // Convert from struct Data to NSData - if let s = NSString(data: helloWorld, encoding: String.Encoding.utf8.rawValue) { - XCTAssertTrue(s.isEqual(to: "helloworld"), "The strings should be equal") - } - - } - - func testBridgingCustom() { - // Let's use an AllOnesData with some Objective-C code - let allOnes = AllOnesData(length: 64) - - // Type-erased - let data = Data(referencing: allOnes) - - // Create a home for our test data - let dirPath = (NSTemporaryDirectory() as NSString).appendingPathComponent(NSUUID().uuidString) - try! FileManager.default.createDirectory(atPath: dirPath, withIntermediateDirectories: true, attributes: nil) - let filePath = (dirPath as NSString).appendingPathComponent("temp_file") - guard FileManager.default.createFile(atPath: filePath, contents: nil, attributes: nil) else { XCTAssertTrue(false, "Unable to create temporary file"); return} - guard let fh = FileHandle(forWritingAtPath: filePath) else { XCTAssertTrue(false, "Unable to open temporary file"); return } - defer { try! FileManager.default.removeItem(atPath: dirPath) } - - // Now use this data with some Objective-C code that takes NSData arguments - fh.write(data) - - // Get the data back - do { - let url = URL(fileURLWithPath: filePath) - let readData = try Data.init(contentsOf: url) - XCTAssertEqual(data.count, readData.count, "The length of the data is not the same") - } catch { - XCTAssertTrue(false, "Unable to read back data") - return - } - } - - func testEquality() { - let d1 = dataFrom("hello") - let d2 = dataFrom("hello") - - // Use == explicitly here to make sure we're calling the right methods - XCTAssertTrue(d1 == d2, "Data should be equal") - } - - func testDataInSet() { - let d1 = dataFrom("Hello") - let d2 = dataFrom("Hello") - let d3 = dataFrom("World") - - var s = Set() - s.insert(d1) - s.insert(d2) - s.insert(d3) - - XCTAssertEqual(s.count, 2, "Expected only two entries in the Set") - } - - func testReplaceSubrange() { - var hello = dataFrom("Hello") - let world = dataFrom("World") - - hello[0] = world[0] - XCTAssertEqual(hello[0], world[0]) - - var goodbyeWorld = dataFrom("Hello World") - let goodbye = dataFrom("Goodbye") - let expected = dataFrom("Goodbye World") - - goodbyeWorld.replaceSubrange(0..<5, with: goodbye) - XCTAssertEqual(goodbyeWorld, expected) - } - - func testReplaceSubrange2() { - let hello = dataFrom("Hello") - let world = dataFrom(" World") - let goodbye = dataFrom("Goodbye") - let expected = dataFrom("Goodbye World") - - var mutateMe = hello - mutateMe.append(world) - - if let found = mutateMe.range(of: hello) { - mutateMe.replaceSubrange(found, with: goodbye) - } - XCTAssertEqual(mutateMe, expected) - } - - func testReplaceSubrange3() { - // The expected result - let expectedBytes : [UInt8] = [1, 2, 9, 10, 11, 12, 13] - let expected = expectedBytes.withUnsafeBufferPointer { - return Data(buffer: $0) - } - - // The data we'll mutate - let someBytes : [UInt8] = [1, 2, 3, 4, 5] - var a = someBytes.withUnsafeBufferPointer { - return Data(buffer: $0) - } - - // The bytes we'll insert - let b : [UInt8] = [9, 10, 11, 12, 13] - b.withUnsafeBufferPointer { - a.replaceSubrange(2..<5, with: $0) - } - XCTAssertEqual(expected, a) - } - - func testReplaceSubrange4() { - let expectedBytes : [UInt8] = [1, 2, 9, 10, 11, 12, 13] - let expected = Data(bytes: expectedBytes) - - // The data we'll mutate - let someBytes : [UInt8] = [1, 2, 3, 4, 5] - var a = Data(bytes: someBytes) - - // The bytes we'll insert - let b : [UInt8] = [9, 10, 11, 12, 13] - a.replaceSubrange(2..<5, with: b) - XCTAssertEqual(expected, a) - } - - func testReplaceSubrange5() { - var d = Data(bytes: [1, 2, 3]) - d.replaceSubrange(0..<0, with: [4]) - XCTAssertEqual(Data(bytes: [4, 1, 2, 3]), d) - - d.replaceSubrange(0..<4, with: [9]) - XCTAssertEqual(Data(bytes: [9]), d) - - d.replaceSubrange(0..= 65 && byte <= 90 } - - let allCaps = hello.filter(isCapital) - XCTAssertEqual(allCaps.count, 2) - - let capCount = hello.reduce(0) { isCapital($1) ? $0 + 1 : $0 } - XCTAssertEqual(capCount, 2) - - let allLower = hello.map { isCapital($0) ? $0 + 31 : $0 } - XCTAssertEqual(allLower.count, hello.count) - } - - func testCustomDeallocator() { - var deallocatorCalled = false - - // Scope the data to a block to control lifecycle - autoreleasepool { - let buffer = malloc(16)! - let bytePtr = buffer.bindMemory(to: UInt8.self, capacity: 16) - var data = Data(bytesNoCopy: bytePtr, count: 16, deallocator: .custom({ (ptr, size) in - deallocatorCalled = true - free(UnsafeMutableRawPointer(ptr)) - })) - // Use the data - data[0] = 1 - } - - XCTAssertTrue(deallocatorCalled, "Custom deallocator was never called") - } - - func testCopyBytes() { - let c = 10 - let underlyingBuffer = malloc(c * MemoryLayout.stride)! - let u16Ptr = underlyingBuffer.bindMemory(to: UInt16.self, capacity: c) - let buffer = UnsafeMutableBufferPointer(start: u16Ptr, count: c) - - buffer[0] = 0 - buffer[1] = 0 - - var data = Data(capacity: c * MemoryLayout.stride) - data.resetBytes(in: 0...stride) - data[0] = 0xFF - data[1] = 0xFF - let copiedCount = data.copyBytes(to: buffer) - XCTAssertEqual(copiedCount, c * MemoryLayout.stride) - - XCTAssertEqual(buffer[0], 0xFFFF) - free(underlyingBuffer) - } - - func testCopyBytes_undersized() { - let a : [UInt8] = [1, 2, 3, 4, 5] - var data = a.withUnsafeBufferPointer { - return Data(buffer: $0) - } - let expectedSize = MemoryLayout.stride * a.count - XCTAssertEqual(expectedSize, data.count) - - let underlyingBuffer = unsafeBitCast(malloc(expectedSize - 1)!, to: UnsafeMutablePointer.self) - let buffer = UnsafeMutableBufferPointer(start: underlyingBuffer, count: expectedSize - 1) - - // We should only copy in enough bytes that can fit in the buffer - let copiedCount = data.copyBytes(to: buffer) - XCTAssertEqual(expectedSize - 1, copiedCount) - - var index = 0 - for v in a[0...stride * a.count - XCTAssertEqual(expectedSize, data.count) - - let underlyingBuffer = unsafeBitCast(malloc(expectedSize + 1)!, to: UnsafeMutablePointer.self) - let buffer = UnsafeMutableBufferPointer(start: underlyingBuffer, count: expectedSize + 1) - - let copiedCount = data.copyBytes(to: buffer) - XCTAssertEqual(expectedSize, copiedCount) - - free(underlyingBuffer) - } - - func testCopyBytes_ranges() { - - do { - // Equal sized buffer, data - let a : [UInt8] = [1, 2, 3, 4, 5] - var data = a.withUnsafeBufferPointer { - return Data(buffer: $0) - } - - let underlyingBuffer = unsafeBitCast(malloc(data.count)!, to: UnsafeMutablePointer.self) - let buffer = UnsafeMutableBufferPointer(start: underlyingBuffer, count: data.count) - - var copiedCount : Int - - copiedCount = data.copyBytes(to: buffer, from: 0..<0) - XCTAssertEqual(0, copiedCount) - - copiedCount = data.copyBytes(to: buffer, from: 1..<1) - XCTAssertEqual(0, copiedCount) - - copiedCount = data.copyBytes(to: buffer, from: 0..<3) - XCTAssertEqual((0..<3).count, copiedCount) - - var index = 0 - for v in a[0..<3] { - XCTAssertEqual(v, buffer[index]) - index += 1 - } - free(underlyingBuffer) - } - - do { - // Larger buffer than data - let a : [UInt8] = [1, 2, 3, 4] - let data = a.withUnsafeBufferPointer { - return Data(buffer: $0) - } - - let underlyingBuffer = unsafeBitCast(malloc(10)!, to: UnsafeMutablePointer.self) - let buffer = UnsafeMutableBufferPointer(start: underlyingBuffer, count: 10) - - var copiedCount : Int - - copiedCount = data.copyBytes(to: buffer, from: 0..<3) - XCTAssertEqual((0..<3).count, copiedCount) - - var index = 0 - for v in a[0..<3] { - XCTAssertEqual(v, buffer[index]) - index += 1 - } - free(underlyingBuffer) - } - - do { - // Larger data than buffer - let a : [UInt8] = [1, 2, 3, 4, 5, 6] - let data = a.withUnsafeBufferPointer { - return Data(buffer: $0) - } - - let underlyingBuffer = unsafeBitCast(malloc(4)!, to: UnsafeMutablePointer.self) - let buffer = UnsafeMutableBufferPointer(start: underlyingBuffer, count: 4) - - var copiedCount : Int - - copiedCount = data.copyBytes(to: buffer, from: 0...stride * a.count - XCTAssertEqual(expectedSize, data.count) - - [false, true].withUnsafeBufferPointer { - data.append($0) - } - - expectedSize += MemoryLayout.stride * 2 - XCTAssertEqual(expectedSize, data.count) - - let underlyingBuffer = unsafeBitCast(malloc(expectedSize)!, to: UnsafeMutablePointer.self) - - let buffer = UnsafeMutableBufferPointer(start: underlyingBuffer, count: expectedSize) - let copiedCount = data.copyBytes(to: buffer) - XCTAssertEqual(copiedCount, expectedSize) - - free(underlyingBuffer) - } - - func test_basicDataMutation() { - let object = ImmutableDataVerifier() - - object.verifier.reset() - var data = object as Data - XCTAssertTrue(object.verifier.wasCopied) - XCTAssertFalse(object.verifier.wasMutableCopied, "Expected an invocation to mutableCopy") - - object.verifier.reset() - XCTAssertTrue(data.count == object.length) - XCTAssertFalse(object.verifier.wasCopied, "Expected an invocation to copy") - } - - func test_basicMutableDataMutation() { - let object = MutableDataVerifier() - - object.verifier.reset() - var data = object as Data - XCTAssertTrue(object.verifier.wasCopied) - XCTAssertFalse(object.verifier.wasMutableCopied, "Expected an invocation to mutableCopy") - - object.verifier.reset() - XCTAssertTrue(data.count == object.length) - XCTAssertFalse(object.verifier.wasCopied, "Expected an invocation to copy") - } - - func test_passing() { - let object = ImmutableDataVerifier() - let object_notPeepholed = object as Data - takesData(object_notPeepholed) - XCTAssertTrue(object.verifier.wasCopied) - } - - func test_passing_peepholed() { - let object = ImmutableDataVerifier() - takesData(object as Data) - XCTAssertFalse(object.verifier.wasCopied) // because of the peephole - } - - // intentionally structured so sizeof() != strideof() - struct MyStruct { - var time: UInt64 - let x: UInt32 - let y: UInt32 - let z: UInt32 - init() { - time = 0 - x = 1 - y = 2 - z = 3 - } - } - - func test_bufferSizeCalculation() { - // Make sure that Data is correctly using strideof instead of sizeof. - // n.b. if sizeof(MyStruct) == strideof(MyStruct), this test is not as useful as it could be - - // init - let stuff = [MyStruct(), MyStruct(), MyStruct()] - var data = stuff.withUnsafeBufferPointer { - return Data(buffer: $0) - } - - XCTAssertEqual(data.count, MemoryLayout.stride * 3) - - - // append - stuff.withUnsafeBufferPointer { - data.append($0) - } - - XCTAssertEqual(data.count, MemoryLayout.stride * 6) - - // copyBytes - do { - // equal size - let underlyingBuffer = malloc(6 * MemoryLayout.stride)! - defer { free(underlyingBuffer) } - - let ptr = underlyingBuffer.bindMemory(to: MyStruct.self, capacity: 6) - let buffer = UnsafeMutableBufferPointer(start: ptr, count: 6) - - let byteCount = data.copyBytes(to: buffer) - XCTAssertEqual(6 * MemoryLayout.stride, byteCount) - } - - do { - // undersized - let underlyingBuffer = malloc(3 * MemoryLayout.stride)! - defer { free(underlyingBuffer) } - - let ptr = underlyingBuffer.bindMemory(to: MyStruct.self, capacity: 3) - let buffer = UnsafeMutableBufferPointer(start: ptr, count: 3) - - let byteCount = data.copyBytes(to: buffer) - XCTAssertEqual(3 * MemoryLayout.stride, byteCount) - } - - do { - // oversized - let underlyingBuffer = malloc(12 * MemoryLayout.stride)! - defer { free(underlyingBuffer) } - - let ptr = underlyingBuffer.bindMemory(to: MyStruct.self, capacity: 6) - let buffer = UnsafeMutableBufferPointer(start: ptr, count: 6) - - let byteCount = data.copyBytes(to: buffer) - XCTAssertEqual(6 * MemoryLayout.stride, byteCount) - } - } - - - // MARK: - - func test_classForCoder() { - // confirm internal bridged impl types are not exposed to archival machinery - let d = Data() as NSData - let expected: AnyClass = NSData.self as AnyClass - XCTAssertTrue(d.classForCoder == expected) - XCTAssertTrue(d.classForKeyedArchiver == expected) - } - - func test_AnyHashableContainingData() { - let values: [Data] = [ - Data(base64Encoded: "AAAA")!, - Data(base64Encoded: "AAAB")!, - Data(base64Encoded: "AAAB")!, - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(Data.self, type(of: anyHashables[0].base)) - expectEqual(Data.self, type(of: anyHashables[1].base)) - expectEqual(Data.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableCreatedFromNSData() { - let values: [NSData] = [ - NSData(base64Encoded: "AAAA")!, - NSData(base64Encoded: "AAAB")!, - NSData(base64Encoded: "AAAB")!, - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(Data.self, type(of: anyHashables[0].base)) - expectEqual(Data.self, type(of: anyHashables[1].base)) - expectEqual(Data.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_noCopyBehavior() { - let ptr = UnsafeMutableRawPointer.allocate(byteCount: 17, alignment: 1) - - var deallocated = false - autoreleasepool { - let data = Data(bytesNoCopy: ptr, count: 17, deallocator: .custom({ (bytes, length) in - deallocated = true - ptr.deallocate() - })) - XCTAssertFalse(deallocated) - let equal = data.withUnsafeBytes { (bytes: UnsafePointer) -> Bool in - return ptr == UnsafeMutableRawPointer(mutating: bytes) - } - - XCTAssertTrue(equal) - } - XCTAssertTrue(deallocated) - } - - func test_doubleDeallocation() { - let data = "12345679".data(using: .utf8)! - let len = data.withUnsafeBytes { (bytes: UnsafePointer) -> Int in - let slice = Data(bytesNoCopy: UnsafeMutablePointer(mutating: bytes), count: 1, deallocator: .none) - return slice.count - } - XCTAssertEqual(len, 1) - } - - func test_repeatingValueInitialization() { - var d = Data(repeating: 0x01, count: 3) - let elements = repeatElement(UInt8(0x02), count: 3) // ensure we fall into the sequence case - d.append(contentsOf: elements) - - XCTAssertEqual(d[0], 0x01) - XCTAssertEqual(d[1], 0x01) - XCTAssertEqual(d[2], 0x01) - - XCTAssertEqual(d[3], 0x02) - XCTAssertEqual(d[4], 0x02) - XCTAssertEqual(d[5], 0x02) - } - - func test_rangeSlice() { - var a: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7] - var d = Data(bytes: a) - for i in 0..? = nil, - expectedStartIndex: Int?, - _ message: @autoclosure () -> String = "", - file: StaticString = #file, line: UInt = #line) { - if let index = expectedStartIndex { - let expectedRange: Range = index..<(index + fragment.count) - if let someRange = range { - XCTAssertEqual(data.firstRange(of: fragment, in: someRange), expectedRange, message(), file: file, line: line) - } else { - XCTAssertEqual(data.firstRange(of: fragment), expectedRange, message(), file: file, line: line) - } - } else { - if let someRange = range { - XCTAssertNil(data.firstRange(of: fragment, in: someRange), message(), file: file, line: line) - } else { - XCTAssertNil(data.firstRange(of: fragment), message(), file: file, line: line) - } - } - } - - assertFirstRange(base, base, expectedStartIndex: base.startIndex) - assertFirstRange(base, subdata, expectedStartIndex: 2) - assertFirstRange(base, oneByte, expectedStartIndex: 2) - - assertFirstRange(subdata, base, expectedStartIndex: nil) - assertFirstRange(subdata, subdata, expectedStartIndex: subdata.startIndex) - assertFirstRange(subdata, oneByte, expectedStartIndex: subdata.startIndex) - - assertFirstRange(oneByte, base, expectedStartIndex: nil) - assertFirstRange(oneByte, subdata, expectedStartIndex: nil) - assertFirstRange(oneByte, oneByte, expectedStartIndex: oneByte.startIndex) - - assertFirstRange(base, subdata, range: 1...14, expectedStartIndex: 2) - assertFirstRange(base, subdata, range: 6...8, expectedStartIndex: 6) - assertFirstRange(base, subdata, range: 8...10, expectedStartIndex: nil) - - assertFirstRange(base, oneByte, range: 1...14, expectedStartIndex: 2) - assertFirstRange(base, oneByte, range: 6...6, expectedStartIndex: 6) - assertFirstRange(base, oneByte, range: 8...9, expectedStartIndex: nil) - } - - do { // lastRange(of:in:) - func assertLastRange(_ data: Data, _ fragment: Data, range: ClosedRange? = nil, - expectedStartIndex: Int?, - _ message: @autoclosure () -> String = "", - file: StaticString = #file, line: UInt = #line) { - if let index = expectedStartIndex { - let expectedRange: Range = index..<(index + fragment.count) - if let someRange = range { - XCTAssertEqual(data.lastRange(of: fragment, in: someRange), expectedRange, file: file, line: line) - } else { - XCTAssertEqual(data.lastRange(of: fragment), expectedRange, message(), file: file, line: line) - } - } else { - if let someRange = range { - XCTAssertNil(data.lastRange(of: fragment, in: someRange), message(), file: file, line: line) - } else { - XCTAssertNil(data.lastRange(of: fragment), message(), file: file, line: line) - } - } - } - - assertLastRange(base, base, expectedStartIndex: base.startIndex) - assertLastRange(base, subdata, expectedStartIndex: 10) - assertLastRange(base, oneByte, expectedStartIndex: 14) - - assertLastRange(subdata, base, expectedStartIndex: nil) - assertLastRange(subdata, subdata, expectedStartIndex: subdata.startIndex) - assertLastRange(subdata, oneByte, expectedStartIndex: subdata.startIndex) - - assertLastRange(oneByte, base, expectedStartIndex: nil) - assertLastRange(oneByte, subdata, expectedStartIndex: nil) - assertLastRange(oneByte, oneByte, expectedStartIndex: oneByte.startIndex) - - assertLastRange(base, subdata, range: 1...14, expectedStartIndex: 10) - assertLastRange(base, subdata, range: 6...8, expectedStartIndex: 6) - assertLastRange(base, subdata, range: 8...10, expectedStartIndex: nil) - - assertLastRange(base, oneByte, range: 1...14, expectedStartIndex: 14) - assertLastRange(base, oneByte, range: 6...6, expectedStartIndex: 6) - assertLastRange(base, oneByte, range: 8...9, expectedStartIndex: nil) - } - } - - func test_sliceAppending() { - // https://bugs.swift.org/browse/SR-4473 - var fooData = Data() - let barData = Data([0, 1, 2, 3, 4, 5]) - let slice = barData.suffix(from: 3) - fooData.append(slice) - XCTAssertEqual(fooData[0], 0x03) - XCTAssertEqual(fooData[1], 0x04) - XCTAssertEqual(fooData[2], 0x05) - } - - func test_replaceSubrange() { - // https://bugs.swift.org/browse/SR-4462 - let data = Data(bytes: [0x01, 0x02]) - var dataII = Data(base64Encoded: data.base64EncodedString())! - dataII.replaceSubrange(0..<1, with: Data()) - XCTAssertEqual(dataII[0], 0x02) - } - - func test_sliceWithUnsafeBytes() { - let base = Data([0, 1, 2, 3, 4, 5]) - let slice = base[2..<4] - let segment = slice.withUnsafeBytes { (ptr: UnsafePointer) -> [UInt8] in - return [ptr.pointee, ptr.advanced(by: 1).pointee] - } - XCTAssertEqual(segment, [UInt8(2), UInt8(3)]) - } - - func test_sliceIteration() { - let base = Data([0, 1, 2, 3, 4, 5]) - let slice = base[2..<4] - var found = [UInt8]() - for byte in slice { - found.append(byte) - } - XCTAssertEqual(found[0], 2) - XCTAssertEqual(found[1], 3) - } - - func test_unconditionallyBridgeFromObjectiveC() { - XCTAssertEqual(Data(), Data._unconditionallyBridgeFromObjectiveC(nil)) - } - - func test_sliceIndexing() { - let d = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) - let slice = d[5..<10] - XCTAssertEqual(slice[5], d[5]) - } - - func test_sliceEquality() { - let d = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) - let slice = d[5..<7] - let expected = Data(bytes: [5, 6]) - XCTAssertEqual(expected, slice) - } - - func test_sliceEquality2() { - let d = Data(bytes: [5, 6, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) - let slice1 = d[0..<2] - let slice2 = d[5..<7] - XCTAssertEqual(slice1, slice2) - } - - func test_splittingHttp() { - func split(_ data: Data, on delimiter: String) -> [Data] { - let dataDelimiter = delimiter.data(using: .utf8)! - var found = [Data]() - let start = data.startIndex - let end = data.endIndex.advanced(by: -dataDelimiter.count) - guard end >= start else { return [data] } - var index = start - var previousIndex = index - while index < end { - let slice = data[index..(_:)` -- a discontiguous sequence of unknown length. - func test_appendingNonContiguousSequence_underestimatedCount() { - var d = Data() - - // d should go from .empty representation to .inline. - // Appending a small enough sequence to fit in .inline should actually be copied. - d.append(contentsOf: (0x00...0x01).makeIterator()) // `.makeIterator()` produces a sequence whose `.underestimatedCount` is 0. - XCTAssertEqual(Data([0x00, 0x01]), d) - - // Appending another small sequence should similarly still work. - d.append(contentsOf: (0x02...0x02).makeIterator()) // `.makeIterator()` produces a sequence whose `.underestimatedCount` is 0. - XCTAssertEqual(Data([0x00, 0x01, 0x02]), d) - - // If we append a sequence of elements larger than a single InlineData, the internal append here should buffer. - // We want to make sure that buffering in this way does not accidentally drop trailing elements on the floor. - d.append(contentsOf: (0x03...0x2F).makeIterator()) // `.makeIterator()` produces a sequence whose `.underestimatedCount` is 0. - XCTAssertEqual(Data([0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, - 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F]), d) - } - - func test_sequenceInitializers() { - let seq = repeatElement(UInt8(0x02), count: 3) // ensure we fall into the sequence case - - let dataFromSeq = Data(seq) - XCTAssertEqual(3, dataFromSeq.count) - XCTAssertEqual(UInt8(0x02), dataFromSeq[0]) - XCTAssertEqual(UInt8(0x02), dataFromSeq[1]) - XCTAssertEqual(UInt8(0x02), dataFromSeq[2]) - - let array: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - - let dataFromArray = Data(array) - XCTAssertEqual(array.count, dataFromArray.count) - XCTAssertEqual(array[0], dataFromArray[0]) - XCTAssertEqual(array[1], dataFromArray[1]) - XCTAssertEqual(array[2], dataFromArray[2]) - XCTAssertEqual(array[3], dataFromArray[3]) - - let slice = array[1..<4] - - let dataFromSlice = Data(slice) - XCTAssertEqual(slice.count, dataFromSlice.count) - XCTAssertEqual(slice.first, dataFromSlice.first) - XCTAssertEqual(slice.last, dataFromSlice.last) - - let data = Data(bytes: [1, 2, 3, 4, 5, 6, 7, 8, 9]) - - let dataFromData = Data(data) - XCTAssertEqual(data, dataFromData) - - let sliceOfData = data[1..<3] - - let dataFromSliceOfData = Data(sliceOfData) - XCTAssertEqual(sliceOfData, dataFromSliceOfData) - } - - func test_reversedDataInit() { - let data = Data(bytes: [1, 2, 3, 4, 5, 6, 7, 8, 9]) - let reversedData = Data(data.reversed()) - let expected = Data(bytes: [9, 8, 7, 6, 5, 4, 3, 2, 1]) - XCTAssertEqual(expected, reversedData) - } - - func test_replaceSubrangeReferencingMutable() { - let mdataObj = NSMutableData(bytes: [0x01, 0x02, 0x03, 0x04], length: 4) - var data = Data(referencing: mdataObj) - let expected = data.count - data.replaceSubrange(4 ..< 4, with: Data(bytes: [])) - XCTAssertEqual(expected, data.count) - data.replaceSubrange(4 ..< 4, with: Data(bytes: [])) - XCTAssertEqual(expected, data.count) - } - - func test_replaceSubrangeReferencingImmutable() { - let dataObj = NSData(bytes: [0x01, 0x02, 0x03, 0x04], length: 4) - var data = Data(referencing: dataObj) - let expected = data.count - data.replaceSubrange(4 ..< 4, with: Data(bytes: [])) - XCTAssertEqual(expected, data.count) - data.replaceSubrange(4 ..< 4, with: Data(bytes: [])) - XCTAssertEqual(expected, data.count) - } - - func test_replaceSubrangeFromBridged() { - var data = NSData(bytes: [0x01, 0x02, 0x03, 0x04], length: 4) as Data - let expected = data.count - data.replaceSubrange(4 ..< 4, with: Data(bytes: [])) - XCTAssertEqual(expected, data.count) - data.replaceSubrange(4 ..< 4, with: Data(bytes: [])) - XCTAssertEqual(expected, data.count) - } - - func test_validateMutation_withUnsafeMutableBytes() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - data.withUnsafeMutableBytes { (ptr: UnsafeMutablePointer) in - ptr.advanced(by: 5).pointee = 0xFF - } - XCTAssertEqual(data, Data(bytes: [0, 1, 2, 3, 4, 0xFF, 6, 7, 8, 9])) - } - - func test_validateMutation_appendBytes() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - data.append("hello", count: 5) - XCTAssertEqual(data[data.startIndex.advanced(by: 5)], 0x5) - } - - func test_validateMutation_appendData() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - let other = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - data.append(other) - XCTAssertEqual(data[data.startIndex.advanced(by: 9)], 9) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0) - } - - func test_validateMutation_appendBuffer() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - let bytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data[data.startIndex.advanced(by: 9)], 9) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0) - } - - func test_validateMutation_appendSequence() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - let seq = repeatElement(UInt8(1), count: 10) - data.append(contentsOf: seq) - XCTAssertEqual(data[data.startIndex.advanced(by: 9)], 9) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 1) - } - - func test_validateMutation_appendContentsOf() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - let bytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - data.append(contentsOf: bytes) - XCTAssertEqual(data[data.startIndex.advanced(by: 9)], 9) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0) - } - - func test_validateMutation_resetBytes() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [0, 1, 2, 3, 4, 0, 0, 0, 8, 9])) - } - - func test_validateMutation_replaceSubrange() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - let range: Range = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4)..) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data, Data(bytes: [4, 0xFF, 6, 7, 8])) - } - - func test_validateMutation_slice_appendBytes() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[4..<9] - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0.baseAddress!, count: $0.count) } - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_appendData() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[4..<9] - let other = Data(bytes: [0xFF, 0xFF]) - data.append(other) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_appendBuffer() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[4..<9] - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_appendSequence() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[4..<9] - let seq = repeatElement(UInt8(0xFF), count: 2) - data.append(contentsOf: seq) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_appendContentsOf() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[4..<9] - let bytes: [UInt8] = [0xFF, 0xFF] - data.append(contentsOf: bytes) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_resetBytes() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[4..<9] - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [4, 0, 0, 0, 8])) - } - - func test_validateMutation_slice_replaceSubrange() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[4..<9] - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 5).pointee = 0xFF - } - XCTAssertEqual(data, Data(bytes: [0, 1, 2, 3, 4, 0xFF, 6, 7, 8, 9])) - } - } - - func test_validateMutation_cow_appendBytes() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - holdReference(data) { - data.append("hello", count: 5) - XCTAssertEqual(data[data.startIndex.advanced(by: 9)], 0x9) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0x68) - } - } - - func test_validateMutation_cow_appendData() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - holdReference(data) { - let other = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - data.append(other) - XCTAssertEqual(data[data.startIndex.advanced(by: 9)], 9) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0) - } - } - - func test_validateMutation_cow_appendBuffer() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - holdReference(data) { - let bytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data[data.startIndex.advanced(by: 9)], 9) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0) - } - } - - func test_validateMutation_cow_appendSequence() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - holdReference(data) { - let seq = repeatElement(UInt8(1), count: 10) - data.append(contentsOf: seq) - XCTAssertEqual(data[data.startIndex.advanced(by: 9)], 9) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 1) - } - } - - func test_validateMutation_cow_appendContentsOf() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - holdReference(data) { - let bytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - data.append(contentsOf: bytes) - XCTAssertEqual(data[data.startIndex.advanced(by: 9)], 9) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0) - } - } - - func test_validateMutation_cow_resetBytes() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - holdReference(data) { - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [0, 1, 2, 3, 4, 0, 0, 0, 8, 9])) - } - } - - func test_validateMutation_cow_replaceSubrange() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - holdReference(data) { - let range: Range = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4)..) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data, Data(bytes: [4, 0xFF, 6, 7, 8])) - } - } - - func test_validateMutation_slice_cow_appendBytes() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[4..<9] - holdReference(data) { - data.append("hello", count: 5) - XCTAssertEqual(data[data.startIndex.advanced(by: 4)], 0x8) - XCTAssertEqual(data[data.startIndex.advanced(by: 5)], 0x68) - } - } - - func test_validateMutation_slice_cow_appendData() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[4..<9] - holdReference(data) { - let other = Data(bytes: [0xFF, 0xFF]) - data.append(other) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_appendBuffer() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[4..<9] - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_appendSequence() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[4..<9] - holdReference(data) { - let seq = repeatElement(UInt8(0xFF), count: 2) - data.append(contentsOf: seq) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_appendContentsOf() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[4..<9] - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - data.append(contentsOf: bytes) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_resetBytes() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[4..<9] - holdReference(data) { - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [4, 0, 0, 0, 8])) - } - } - - func test_validateMutation_slice_cow_replaceSubrange() { - var data = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[4..<9] - holdReference(data) { - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 5).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 5)], 0xFF) - } - - func test_validateMutation_immutableBacking_appendBytes() { - var data = NSData(bytes: "hello world", length: 11) as Data - data.append("hello", count: 5) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0x64) - XCTAssertEqual(data[data.startIndex.advanced(by: 11)], 0x68) - } - - func test_validateMutation_immutableBacking_appendData() { - var data = NSData(bytes: "hello world", length: 11) as Data - let other = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - data.append(other) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0x64) - XCTAssertEqual(data[data.startIndex.advanced(by: 11)], 0) - } - - func test_validateMutation_immutableBacking_appendBuffer() { - var data = NSData(bytes: "hello world", length: 11) as Data - let bytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0x64) - XCTAssertEqual(data[data.startIndex.advanced(by: 11)], 0) - } - - func test_validateMutation_immutableBacking_appendSequence() { - var data = NSData(bytes: "hello world", length: 11) as Data - let seq = repeatElement(UInt8(1), count: 10) - data.append(contentsOf: seq) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0x64) - XCTAssertEqual(data[data.startIndex.advanced(by: 11)], 1) - } - - func test_validateMutation_immutableBacking_appendContentsOf() { - var data = NSData(bytes: "hello world", length: 11) as Data - let bytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - data.append(contentsOf: bytes) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0x64) - XCTAssertEqual(data[data.startIndex.advanced(by: 11)], 0) - } - - func test_validateMutation_immutableBacking_resetBytes() { - var data = NSData(bytes: "hello world", length: 11) as Data - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00, 0x72, 0x6c, 0x64])) - } - - func test_validateMutation_immutableBacking_replaceSubrange() { - var data = NSData(bytes: "hello world", length: 11) as Data - let range: Range = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4)..) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 1)], 0xFF) - } - - func test_validateMutation_slice_immutableBacking_appendBytes() { - let base: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - var data = base.withUnsafeBufferPointer { - return (NSData(bytes: $0.baseAddress!, length: $0.count) as Data)[4..<9] - } - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0.baseAddress!, count: $0.count) } - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_immutableBacking_appendData() { - let base: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - var data = base.withUnsafeBufferPointer { - return (NSData(bytes: $0.baseAddress!, length: $0.count) as Data)[4..<9] - } - data.append(Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_immutableBacking_appendBuffer() { - let base: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - var data = base.withUnsafeBufferPointer { - return (NSData(bytes: $0.baseAddress!, length: $0.count) as Data)[4..<9] - } - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_immutableBacking_appendSequence() { - let base: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - var data = base.withUnsafeBufferPointer { - return (NSData(bytes: $0.baseAddress!, length: $0.count) as Data)[4..<9] - } - data.append(contentsOf: repeatElement(UInt8(0xFF), count: 2)) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_immutableBacking_appendContentsOf() { - let base: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - var data = base.withUnsafeBufferPointer { - return (NSData(bytes: $0.baseAddress!, length: $0.count) as Data)[4..<9] - } - data.append(contentsOf: [0xFF, 0xFF]) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_immutableBacking_resetBytes() { - let base: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - var data = base.withUnsafeBufferPointer { - return (NSData(bytes: $0.baseAddress!, length: $0.count) as Data)[4..<9] - } - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [4, 0, 0, 0, 8])) - } - - func test_validateMutation_slice_immutableBacking_replaceSubrange() { - let base: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - var data = base.withUnsafeBufferPointer { - return (NSData(bytes: $0.baseAddress!, length: $0.count) as Data)[4..<9] - } - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - data.replaceSubrange(range, with: buffer) - } - XCTAssertEqual(data, Data(bytes: [4, 0xFF, 0xFF, 8])) - } - - func test_validateMutation_slice_immutableBacking_replaceSubrangeWithCollection() { - let base: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - var data = base.withUnsafeBufferPointer { - return (NSData(bytes: $0.baseAddress!, length: $0.count) as Data)[4..<9] - } - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 5).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 5)], 0xFF) - } - } - - func test_validateMutation_cow_immutableBacking_appendBytes() { - var data = NSData(bytes: "hello world", length: 11) as Data - holdReference(data) { - data.append("hello", count: 5) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0x64) - XCTAssertEqual(data[data.startIndex.advanced(by: 11)], 0x68) - } - } - - func test_validateMutation_cow_immutableBacking_appendData() { - var data = NSData(bytes: "hello world", length: 11) as Data - holdReference(data) { - let other = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - data.append(other) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0x64) - XCTAssertEqual(data[data.startIndex.advanced(by: 11)], 0) - } - } - - func test_validateMutation_cow_immutableBacking_appendBuffer() { - var data = NSData(bytes: "hello world", length: 11) as Data - holdReference(data) { - let bytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0x64) - XCTAssertEqual(data[data.startIndex.advanced(by: 11)], 0) - } - } - - func test_validateMutation_cow_immutableBacking_appendSequence() { - var data = NSData(bytes: "hello world", length: 11) as Data - holdReference(data) { - let seq = repeatElement(UInt8(1), count: 10) - data.append(contentsOf: seq) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0x64) - XCTAssertEqual(data[data.startIndex.advanced(by: 11)], 1) - } - } - - func test_validateMutation_cow_immutableBacking_appendContentsOf() { - var data = NSData(bytes: "hello world", length: 11) as Data - holdReference(data) { - let bytes: [UInt8] = [1, 1, 2, 3, 4, 5, 6, 7, 8, 9] - data.append(contentsOf: bytes) - XCTAssertEqual(data[data.startIndex.advanced(by: 10)], 0x64) - XCTAssertEqual(data[data.startIndex.advanced(by: 11)], 1) - } - } - - func test_validateMutation_cow_immutableBacking_resetBytes() { - var data = NSData(bytes: "hello world", length: 11) as Data - holdReference(data) { - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00, 0x72, 0x6c, 0x64])) - } - } - - func test_validateMutation_cow_immutableBacking_replaceSubrange() { - var data = NSData(bytes: "hello world", length: 11) as Data - holdReference(data) { - let range: Range = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 1)..) in - data.replaceSubrange(range, with: buffer) - } - XCTAssertEqual(data, Data(bytes: [0x68, 0xff, 0xff, 0x64])) - } - } - - func test_validateMutation_cow_immutableBacking_replaceSubrangeWithCollection() { - var data = NSData(bytes: "hello world", length: 11) as Data - holdReference(data) { - let replacement: [UInt8] = [0xFF, 0xFF] - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 1)], 0xFF) - } - } - - func test_validateMutation_slice_cow_immutableBacking_appendBytes() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - var data = baseBytes.withUnsafeBufferPointer { - return (NSData(bytes: $0.baseAddress!, length: $0.count) as Data)[4..<9] - } - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0.baseAddress!, count: $0.count) } - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_immutableBacking_appendData() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - var data = baseBytes.withUnsafeBufferPointer { - return (NSData(bytes: $0.baseAddress!, length: $0.count) as Data)[4..<9] - } - holdReference(data) { - data.append(Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_immutableBacking_appendBuffer() { - var data = (NSData(bytes: "hello world", length: 11) as Data)[4..<9] - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer{ data.append($0) } - XCTAssertEqual(data, Data(bytes: [0x6f, 0x20, 0x77, 0x6f, 0x72, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_immutableBacking_appendSequence() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - var data = baseBytes.withUnsafeBufferPointer { - return (NSData(bytes: $0.baseAddress!, length: $0.count) as Data)[4..<9] - } - holdReference(data) { - let bytes = repeatElement(UInt8(0xFF), count: 2) - data.append(contentsOf: bytes) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_immutableBacking_appendContentsOf() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - var data = baseBytes.withUnsafeBufferPointer { - return (NSData(bytes: $0.baseAddress!, length: $0.count) as Data)[4..<9] - } - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - data.append(contentsOf: bytes) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_immutableBacking_resetBytes() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - var data = baseBytes.withUnsafeBufferPointer { - return (NSData(bytes: $0.baseAddress!, length: $0.count) as Data)[4..<9] - } - holdReference(data) { - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [4, 0, 0, 0, 8])) - } - } - - func test_validateMutation_slice_cow_immutableBacking_replaceSubrange() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - var data = baseBytes.withUnsafeBufferPointer { - return (NSData(bytes: $0.baseAddress!, length: $0.count) as Data)[4..<9] - } - holdReference(data) { - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 5).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 5)], 0xFF) - } - - func test_validateMutation_mutableBacking_appendBytes() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var data = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - data.append(contentsOf: [7, 8, 9]) - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0.baseAddress!, count: $0.count) } - XCTAssertEqual(data, Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xFF, 0xFF])) - } - - func test_validateMutation_mutableBacking_appendData() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var data = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - data.append(contentsOf: [7, 8, 9]) - data.append(Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xFF, 0xFF])) - } - - func test_validateMutation_mutableBacking_appendBuffer() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var data = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - data.append(contentsOf: [7, 8, 9]) - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data, Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xFF, 0xFF])) - } - - func test_validateMutation_mutableBacking_appendSequence() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var data = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - data.append(contentsOf: [7, 8, 9]) - data.append(contentsOf: repeatElement(UInt8(0xFF), count: 2)) - XCTAssertEqual(data, Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xFF, 0xFF])) - } - - func test_validateMutation_mutableBacking_appendContentsOf() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var data = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - data.append(contentsOf: [7, 8, 9]) - data.append(contentsOf: [0xFF, 0xFF]) - XCTAssertEqual(data, Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xFF, 0xFF])) - } - - func test_validateMutation_mutableBacking_resetBytes() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var data = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - data.append(contentsOf: [7, 8, 9]) - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [0, 1, 2, 3, 4, 0, 0, 0, 8, 9])) - } - - func test_validateMutation_mutableBacking_replaceSubrange() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var data = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - data.append(contentsOf: [7, 8, 9]) - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 1)], 0xFF) - } - - func test_validateMutation_slice_mutableBacking_appendBytes() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var base = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - base.append(contentsOf: [7, 8, 9]) - var data = base[4..<9] - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0.baseAddress!, count: $0.count) } - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_mutableBacking_appendData() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var base = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - base.append(contentsOf: [7, 8, 9]) - var data = base[4..<9] - data.append(Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_mutableBacking_appendBuffer() { - var base = NSData(bytes: "hello world", length: 11) as Data - base.append(contentsOf: [1, 2, 3, 4, 5, 6]) - var data = base[4..<9] - let bytes: [UInt8] = [1, 2, 3] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data, Data(bytes: [0x6f, 0x20, 0x77, 0x6f, 0x72, 0x1, 0x2, 0x3])) - } - - func test_validateMutation_slice_mutableBacking_appendSequence() { - var base = NSData(bytes: "hello world", length: 11) as Data - base.append(contentsOf: [1, 2, 3, 4, 5, 6]) - var data = base[4..<9] - let seq = repeatElement(UInt8(1), count: 3) - data.append(contentsOf: seq) - XCTAssertEqual(data, Data(bytes: [0x6f, 0x20, 0x77, 0x6f, 0x72, 0x1, 0x1, 0x1])) - } - - func test_validateMutation_slice_mutableBacking_appendContentsOf() { - var base = NSData(bytes: "hello world", length: 11) as Data - base.append(contentsOf: [1, 2, 3, 4, 5, 6]) - var data = base[4..<9] - let bytes: [UInt8] = [1, 2, 3] - data.append(contentsOf: bytes) - XCTAssertEqual(data, Data(bytes: [0x6f, 0x20, 0x77, 0x6f, 0x72, 0x1, 0x2, 0x3])) - } - - func test_validateMutation_slice_mutableBacking_resetBytes() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var base = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - base.append(contentsOf: [7, 8, 9]) - var data = base[4..<9] - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [4, 0, 0, 0, 8])) - } - - func test_validateMutation_slice_mutableBacking_replaceSubrange() { - var base = NSData(bytes: "hello world", length: 11) as Data - base.append(contentsOf: [1, 2, 3, 4, 5, 6]) - var data = base[4..<9] - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - data.replaceSubrange(range, with: buffer) - } - XCTAssertEqual(data, Data(bytes: [0x6f, 0xFF, 0xFF, 0x72])) - } - - func test_validateMutation_slice_mutableBacking_replaceSubrangeWithCollection() { - var base = NSData(bytes: "hello world", length: 11) as Data - base.append(contentsOf: [1, 2, 3, 4, 5, 6]) - var data = base[4..<9] - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 5).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 5)], 0xFF) - } - } - - func test_validateMutation_cow_mutableBacking_appendBytes() { - var data = NSData(bytes: "hello world", length: 11) as Data - data.append(contentsOf: [1, 2, 3, 4, 5, 6]) - holdReference(data) { - data.append("hello", count: 5) - XCTAssertEqual(data[data.startIndex.advanced(by: 16)], 6) - XCTAssertEqual(data[data.startIndex.advanced(by: 17)], 0x68) - } - } - - func test_validateMutation_cow_mutableBacking_appendData() { - var data = NSData(bytes: "hello world", length: 11) as Data - data.append(contentsOf: [1, 2, 3, 4, 5, 6]) - holdReference(data) { - data.append("hello", count: 5) - XCTAssertEqual(data[data.startIndex.advanced(by: 16)], 6) - XCTAssertEqual(data[data.startIndex.advanced(by: 17)], 0x68) - } - } - - func test_validateMutation_cow_mutableBacking_appendBuffer() { - var data = NSData(bytes: "hello world", length: 11) as Data - data.append(contentsOf: [1, 2, 3, 4, 5, 6]) - holdReference(data) { - let other = Data(bytes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - data.append(other) - XCTAssertEqual(data[data.startIndex.advanced(by: 16)], 6) - XCTAssertEqual(data[data.startIndex.advanced(by: 17)], 0) - } - } - - func test_validateMutation_cow_mutableBacking_appendSequence() { - var data = NSData(bytes: "hello world", length: 11) as Data - data.append(contentsOf: [1, 2, 3, 4, 5, 6]) - holdReference(data) { - let seq = repeatElement(UInt8(1), count: 10) - data.append(contentsOf: seq) - XCTAssertEqual(data[data.startIndex.advanced(by: 16)], 6) - XCTAssertEqual(data[data.startIndex.advanced(by: 17)], 1) - } - } - - func test_validateMutation_cow_mutableBacking_appendContentsOf() { - var data = NSData(bytes: "hello world", length: 11) as Data - data.append(contentsOf: [1, 2, 3, 4, 5, 6]) - holdReference(data) { - let bytes: [UInt8] = [1, 1, 2, 3, 4, 5, 6, 7, 8, 9] - data.append(contentsOf: bytes) - XCTAssertEqual(data[data.startIndex.advanced(by: 16)], 6) - XCTAssertEqual(data[data.startIndex.advanced(by: 17)], 1) - } - } - - func test_validateMutation_cow_mutableBacking_resetBytes() { - var data = NSData(bytes: "hello world", length: 11) as Data - data.append(contentsOf: [1, 2, 3, 4, 5, 6]) - holdReference(data) { - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00, 0x72, 0x6c, 0x64, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06])) - } - } - - func test_validateMutation_cow_mutableBacking_replaceSubrange() { - var data = NSData(bytes: "hello world", length: 11) as Data - data.append(contentsOf: [1, 2, 3, 4, 5, 6]) - holdReference(data) { - let range: Range = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4)..) in - data.replaceSubrange(range, with: buffer) - } - XCTAssertEqual(data, Data(bytes: [0x68, 0x65, 0x6c, 0x6c, 0xff, 0xff, 0x6c, 0x64, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06])) - } - } - - func test_validateMutation_cow_mutableBacking_replaceSubrangeWithCollection() { - var data = NSData(bytes: "hello world", length: 11) as Data - data.append(contentsOf: [1, 2, 3, 4, 5, 6]) - holdReference(data) { - let replacement: [UInt8] = [0xFF, 0xFF] - let range: Range = data.startIndex.advanced(by: 4).. = data.startIndex.advanced(by: 4)..) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 1)], 0xFF) - } - } - - func test_validateMutation_slice_cow_mutableBacking_appendBytes() { - let bytes: [UInt8] = [0, 1, 2] - var base = bytes.withUnsafeBytes { (ptr) in - return NSData(bytes: ptr.baseAddress!, length: ptr.count) as Data - } - base.append(contentsOf: [3, 4, 5]) - var data = base[1..<4] - holdReference(data) { - let bytesToAppend: [UInt8] = [6, 7, 8] - bytesToAppend.withUnsafeBytes { (ptr) in - data.append(ptr.baseAddress!.assumingMemoryBound(to: UInt8.self), count: ptr.count) - } - XCTAssertEqual(data, Data(bytes: [1, 2, 3, 6, 7, 8])) - } - } - - func test_validateMutation_slice_cow_mutableBacking_appendData() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var base = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - base.append(contentsOf: [7, 8, 9]) - var data = base[4..<9] - holdReference(data) { - data.append(Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_mutableBacking_appendBuffer() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var base = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - base.append(contentsOf: [7, 8, 9]) - var data = base[4..<9] - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer{ data.append($0) } - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_mutableBacking_appendSequence() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var base = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - base.append(contentsOf: [7, 8, 9]) - var data = base[4..<9] - holdReference(data) { - let bytes = repeatElement(UInt8(0xFF), count: 2) - data.append(contentsOf: bytes) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_mutableBacking_appendContentsOf() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var base = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - base.append(contentsOf: [7, 8, 9]) - var data = base[4..<9] - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - data.append(contentsOf: bytes) - XCTAssertEqual(data, Data(bytes: [4, 5, 6, 7, 8, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_mutableBacking_resetBytes() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var base = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - base.append(contentsOf: [7, 8, 9]) - var data = base[4..<9] - holdReference(data) { - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [4, 0, 0, 0, 8])) - } - } - - func test_validateMutation_slice_cow_mutableBacking_replaceSubrange() { - let baseBytes: [UInt8] = [0, 1, 2, 3, 4, 5, 6] - var base = baseBytes.withUnsafeBufferPointer { - return NSData(bytes: $0.baseAddress!, length: $0.count) as Data - } - base.append(contentsOf: [7, 8, 9]) - var data = base[4..<9] - holdReference(data) { - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 5).pointee = 0xFF - } - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 0xFF, 1, 1, 1, 1])) - } - - func test_validateMutation_customBacking_appendBytes() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0.baseAddress!, count: $0.count) } - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - - func test_validateMutation_customBacking_appendData() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - data.append(Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - - func test_validateMutation_customBacking_appendBuffer() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { (buffer) in - data.append(buffer) - } - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0xFF, 0xFF])) - - } - - func test_validateMutation_customBacking_appendSequence() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - data.append(contentsOf: repeatElement(UInt8(0xFF), count: 2)) - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - - func test_validateMutation_customBacking_appendContentsOf() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - data.append(contentsOf: [0xFF, 0xFF]) - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - - func test_validateMutation_customBacking_resetBytes() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 0, 0, 0, 1, 1])) - } - - func test_validateMutation_customBacking_replaceSubrange() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - let range: Range = 1..<4 - data.replaceSubrange(range, with: Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [1, 0xFF, 0xFF, 1, 1, 1, 1, 1, 1])) - } - - func test_validateMutation_customBacking_replaceSubrangeRange() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - let range: Range = 1..<4 - data.replaceSubrange(range, with: Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [1, 0xFF, 0xFF, 1, 1, 1, 1, 1, 1])) - } - - func test_validateMutation_customBacking_replaceSubrangeWithBuffer() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - let bytes: [UInt8] = [0xFF, 0xFF] - let range: Range = 1..<4 - bytes.withUnsafeBufferPointer { (buffer) in - data.replaceSubrange(range, with: buffer) - } - XCTAssertEqual(data, Data(bytes: [1, 0xFF, 0xFF, 1, 1, 1, 1, 1, 1])) - } - - func test_validateMutation_customBacking_replaceSubrangeWithCollection() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - let range: Range = 1..<4 - data.replaceSubrange(range, with: [0xFF, 0xFF]) - XCTAssertEqual(data, Data(bytes: [1, 0xFF, 0xFF, 1, 1, 1, 1, 1, 1])) - } - - func test_validateMutation_customBacking_replaceSubrangeWithBytes() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - let bytes: [UInt8] = [0xFF, 0xFF] - let range: Range = 1..<5 - bytes.withUnsafeBufferPointer { (buffer) in - data.replaceSubrange(range, with: buffer.baseAddress!, count: buffer.count) - } - XCTAssertEqual(data, Data(bytes: [1, 0xFF, 0xFF, 1, 1, 1, 1, 1])) - } - - func test_validateMutation_slice_customBacking_withUnsafeMutableBytes() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - data.withUnsafeMutableBytes { (ptr: UnsafeMutablePointer) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 1)], 0xFF) - } - - func test_validateMutation_slice_customBacking_appendBytes() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBytes { ptr in - data.append(ptr.baseAddress!.assumingMemoryBound(to: UInt8.self), count: ptr.count) - } - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_customBacking_appendData() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - data.append(Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_customBacking_appendBuffer() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { (buffer) in - data.append(buffer) - } - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_customBacking_appendSequence() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - let seq = repeatElement(UInt8(0xFF), count: 2) - data.append(contentsOf: seq) - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_customBacking_appendContentsOf() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - data.append(contentsOf: [0xFF, 0xFF]) - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_customBacking_resetBytes() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [1, 0, 0, 0, 1])) - } - - func test_validateMutation_slice_customBacking_replaceSubrange() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 5).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 5)], 0xFF) - } - } - - func test_validateMutation_cow_customBacking_appendBytes() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { (buffer) in - data.append(buffer.baseAddress!, count: buffer.count) - } - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - } - - func test_validateMutation_cow_customBacking_appendData() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - holdReference(data) { - data.append(Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - } - - func test_validateMutation_cow_customBacking_appendBuffer() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - } - - func test_validateMutation_cow_customBacking_appendSequence() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - holdReference(data) { - data.append(contentsOf: repeatElement(UInt8(0xFF), count: 2)) - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - } - - func test_validateMutation_cow_customBacking_appendContentsOf() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - holdReference(data) { - data.append(contentsOf: [0xFF, 0xFF]) - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - } - - func test_validateMutation_cow_customBacking_resetBytes() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - holdReference(data) { - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 0, 0, 0, 1, 1])) - } - } - - func test_validateMutation_cow_customBacking_replaceSubrange() { - var data = Data(referencing: AllOnesImmutableData(length: 10)) - holdReference(data) { - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 1)], 0xFF) - } - } - - func test_validateMutation_slice_cow_customBacking_appendBytes() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { (buffer) in - data.append(buffer.baseAddress!, count: buffer.count) - } - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_customBacking_appendData() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - holdReference(data) { - data.append(Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_customBacking_appendBuffer() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_customBacking_appendSequence() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - holdReference(data) { - data.append(contentsOf: repeatElement(UInt8(0xFF), count: 2)) - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_customBacking_appendContentsOf() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - holdReference(data) { - data.append(contentsOf: [0xFF, 0xFF]) - XCTAssertEqual(data, Data(bytes: [1, 1, 1, 1, 1, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_customBacking_resetBytes() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - holdReference(data) { - data.resetBytes(in: 5..<8) - XCTAssertEqual(data, Data(bytes: [1, 0, 0, 0, 1])) - } - } - - func test_validateMutation_slice_cow_customBacking_replaceSubrange() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<9] - holdReference(data) { - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 5).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 5)], 0xFF) - } - - func test_validateMutation_customMutableBacking_appendBytes() { - var data = Data(referencing: AllOnesData(length: 1)) - data.count = 10 - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0.baseAddress!, count: $0.count) } - XCTAssertEqual(data, Data(bytes: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - - func test_validateMutation_customMutableBacking_appendData() { - var data = Data(referencing: AllOnesData(length: 1)) - data.count = 10 - data.append(Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - - func test_validateMutation_customMutableBacking_appendBuffer() { - var data = Data(referencing: AllOnesData(length: 1)) - data.count = 10 - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data, Data(bytes: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - - func test_validateMutation_customMutableBacking_appendSequence() { - var data = Data(referencing: AllOnesData(length: 1)) - data.count = 10 - data.append(contentsOf: repeatElement(UInt8(0xFF), count: 2)) - XCTAssertEqual(data, Data(bytes: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - - func test_validateMutation_customMutableBacking_appendContentsOf() { - var data = Data(referencing: AllOnesData(length: 1)) - data.count = 10 - data.append(contentsOf: [0xFF, 0xFF]) - XCTAssertEqual(data, Data(bytes: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - - func test_validateMutation_customMutableBacking_resetBytes() { - var data = Data(referencing: AllOnesData(length: 1)) - data.count = 10 - data.resetBytes(in: 5..<8) - XCTAssertEqual(data.count, 10) - XCTAssertEqual(data[data.startIndex.advanced(by: 0)], 1) - XCTAssertEqual(data[data.startIndex.advanced(by: 5)], 0) - XCTAssertEqual(data[data.startIndex.advanced(by: 6)], 0) - XCTAssertEqual(data[data.startIndex.advanced(by: 7)], 0) - } - - func test_validateMutation_customMutableBacking_replaceSubrange() { - var data = Data(referencing: AllOnesData(length: 1)) - data.count = 10 - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 1)], 0xFF) - } - - func test_validateMutation_slice_customMutableBacking_appendBytes() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<9] - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0.baseAddress!, count: $0.count) } - XCTAssertEqual(data, Data(bytes: [0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_customMutableBacking_appendData() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<9] - data.append(Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_customMutableBacking_appendBuffer() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<9] - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data, Data(bytes: [0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_customMutableBacking_appendSequence() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<9] - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data, Data(bytes: [0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_customMutableBacking_appendContentsOf() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<9] - data.append(contentsOf: [0xFF, 0xFF]) - XCTAssertEqual(data, Data(bytes: [0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - - func test_validateMutation_slice_customMutableBacking_resetBytes() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<9] - data.resetBytes(in: 5..<8) - - XCTAssertEqual(data[data.startIndex.advanced(by: 1)], 0) - XCTAssertEqual(data[data.startIndex.advanced(by: 2)], 0) - XCTAssertEqual(data[data.startIndex.advanced(by: 3)], 0) - } - - func test_validateMutation_slice_customMutableBacking_replaceSubrange() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<9] - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 5).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 5)], 0xFF) - } - } - - func test_validateMutation_cow_customMutableBacking_appendBytes() { - var data = Data(referencing: AllOnesData(length: 1)) - data.count = 10 - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0.baseAddress!, count: $0.count) } - XCTAssertEqual(data, Data(bytes: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - } - - func test_validateMutation_cow_customMutableBacking_appendData() { - var data = Data(referencing: AllOnesData(length: 1)) - data.count = 10 - holdReference(data) { - data.append(Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - } - - func test_validateMutation_cow_customMutableBacking_appendBuffer() { - var data = Data(referencing: AllOnesData(length: 1)) - data.count = 10 - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data, Data(bytes: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - } - - func test_validateMutation_cow_customMutableBacking_appendSequence() { - var data = Data(referencing: AllOnesData(length: 1)) - data.count = 10 - holdReference(data) { - data.append(contentsOf: repeatElement(UInt8(0xFF), count: 2)) - XCTAssertEqual(data, Data(bytes: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - } - - func test_validateMutation_cow_customMutableBacking_appendContentsOf() { - var data = Data(referencing: AllOnesData(length: 1)) - data.count = 10 - holdReference(data) { - data.append(contentsOf: [0xFF, 0xFF]) - XCTAssertEqual(data, Data(bytes: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - } - - func test_validateMutation_cow_customMutableBacking_resetBytes() { - var data = Data(referencing: AllOnesData(length: 10)) - holdReference(data) { - data.resetBytes(in: 5..<8) - XCTAssertEqual(data.count, 10) - XCTAssertEqual(data[data.startIndex.advanced(by: 0)], 1) - XCTAssertEqual(data[data.startIndex.advanced(by: 5)], 0) - XCTAssertEqual(data[data.startIndex.advanced(by: 6)], 0) - XCTAssertEqual(data[data.startIndex.advanced(by: 7)], 0) - } - } - - func test_validateMutation_cow_customMutableBacking_replaceSubrange() { - var data = Data(referencing: AllOnesData(length: 1)) - data.count = 10 - holdReference(data) { - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 1)], 0xFF) - } - } - - func test_validateMutation_slice_cow_customMutableBacking_appendBytes() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<9] - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0.baseAddress!, count: $0.count) } - XCTAssertEqual(data, Data(bytes: [0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_customMutableBacking_appendData() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<9] - holdReference(data) { - data.append(Data(bytes: [0xFF, 0xFF])) - XCTAssertEqual(data, Data(bytes: [0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_customMutableBacking_appendBuffer() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<9] - holdReference(data) { - let bytes: [UInt8] = [0xFF, 0xFF] - bytes.withUnsafeBufferPointer { data.append($0) } - XCTAssertEqual(data, Data(bytes: [0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_customMutableBacking_appendSequence() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<9] - holdReference(data) { - data.append(contentsOf: repeatElement(UInt8(0xFF), count: 2)) - XCTAssertEqual(data, Data(bytes: [0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_customMutableBacking_appendContentsOf() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<9] - holdReference(data) { - data.append(contentsOf: [0xFF, 0xFF]) - XCTAssertEqual(data, Data(bytes: [0, 0, 0, 0, 0, 0xFF, 0xFF])) - } - } - - func test_validateMutation_slice_cow_customMutableBacking_resetBytes() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<9] - holdReference(data) { - data.resetBytes(in: 5..<8) - XCTAssertEqual(data[data.startIndex.advanced(by: 1)], 0) - XCTAssertEqual(data[data.startIndex.advanced(by: 2)], 0) - XCTAssertEqual(data[data.startIndex.advanced(by: 3)], 0) - } - } - - func test_validateMutation_slice_cow_customMutableBacking_replaceSubrange() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<9] - holdReference(data) { - let range: Range = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1).. = data.startIndex.advanced(by: 1)..) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data, Data(bytes: [4, 0xFF])) - } - - func test_validateMutation_slice_immutableBacking_withUnsafeMutableBytes_lengthLessThanLowerBound() { - var data = Data(referencing: NSData(bytes: "hello world", length: 11))[4..<6] - data.withUnsafeMutableBytes { (ptr: UnsafeMutablePointer) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 1)], 0xFF) - } - - func test_validateMutation_slice_mutableBacking_withUnsafeMutableBytes_lengthLessThanLowerBound() { - var base = Data(referencing: NSData(bytes: "hello world", length: 11)) - base.append(contentsOf: [1, 2, 3, 4, 5, 6]) - var data = base[4..<6] - data.withUnsafeMutableBytes { (ptr: UnsafeMutablePointer) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 1)], 0xFF) - } - - func test_validateMutation_slice_customBacking_withUnsafeMutableBytes_lengthLessThanLowerBound() { - var data = Data(referencing: AllOnesImmutableData(length: 10))[4..<6] - data.withUnsafeMutableBytes { (ptr: UnsafeMutablePointer) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 1)], 0xFF) - } - - func test_validateMutation_slice_customMutableBacking_withUnsafeMutableBytes_lengthLessThanLowerBound() { - var base = Data(referencing: AllOnesData(length: 1)) - base.count = 10 - var data = base[4..<6] - data.withUnsafeMutableBytes { (ptr: UnsafeMutablePointer) in - ptr.advanced(by: 1).pointee = 0xFF - } - XCTAssertEqual(data[data.startIndex.advanced(by: 1)], 0xFF) - } - - func test_byte_access_of_discontiguousData() { - var d = DispatchData.empty - let bytes: [UInt8] = [0, 1, 2, 3, 4, 5] - for _ in 0..<3 { - bytes.withUnsafeBufferPointer { - d.append($0) - } - } - let ref = d as AnyObject - let data = ref as! Data - - let cnt = data.count - 4 - let t = data.dropFirst(4).withUnsafeBytes { (bytes: UnsafePointer) in - return Data(bytes: bytes, count: cnt) - } - - XCTAssertEqual(Data(bytes: [4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5]), t) - } - - func test_rangeOfSlice() { - let data = "FooBar".data(using: .ascii)! - let slice = data[3...] // Bar - - let range = slice.range(of: "a".data(using: .ascii)!) - XCTAssertEqual(range, 4..<5 as Range) - } - - func test_nsdataSequence() { - if #available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) { - let bytes: [UInt8] = Array(0x00...0xFF) - let data = bytes.withUnsafeBytes { NSData(bytes: $0.baseAddress, length: $0.count) } - - for byte in bytes { - XCTAssertEqual(data[Int(byte)], byte) - } - } - } - - func test_dispatchSequence() { - if #available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) { - let bytes1: [UInt8] = Array(0x00..<0xF0) - let bytes2: [UInt8] = Array(0xF0..<0xFF) - var data = DispatchData.empty - bytes1.withUnsafeBytes { - data.append($0) - } - bytes2.withUnsafeBytes { - data.append($0) - } - - for byte in bytes1 { - XCTAssertEqual(data[Int(byte)], byte) - } - for byte in bytes2 { - XCTAssertEqual(data[Int(byte)], byte) - } - } - } - - func test_increaseCount() { - // https://github.com/apple/swift/pull/28919 - guard #available(macOS 10.16, iOS 14.0, watchOS 7.0, tvOS 14.0, *) else { return } - let initials: [Range] = [ - 0..<0, - 0..<2, - 0..<4, - 0..<8, - 0..<16, - 0..<32, - 0..<64 - ] - let diffs = [0, 1, 2, 4, 8, 16, 32] - for initial in initials { - for diff in diffs { - var data = Data(initial) - data.count += diff - XCTAssertEqual( - Data(Array(initial) + Array(repeating: 0, count: diff)), - data) - } - } - } - - func test_decreaseCount() { - // https://github.com/apple/swift/pull/28919 - guard #available(macOS 10.16, iOS 14.0, watchOS 7.0, tvOS 14.0, *) else { return } - let initials: [Range] = [ - 0..<0, - 0..<2, - 0..<4, - 0..<8, - 0..<16, - 0..<32, - 0..<64 - ] - let diffs = [0, 1, 2, 4, 8, 16, 32] - for initial in initials { - for diff in diffs { - guard initial.count >= diff else { continue } - var data = Data(initial) - data.count -= diff - XCTAssertEqual( - Data(initial.dropLast(diff)), - data) - } - } - } - - // This is a (potentially invalid) sequence that produces a configurable number of 42s and has a freely customizable `underestimatedCount`. - struct TestSequence: Sequence { - typealias Element = UInt8 - struct Iterator: IteratorProtocol { - var _remaining: Int - init(_ count: Int) { - _remaining = count - } - mutating func next() -> UInt8? { - guard _remaining > 0 else { return nil } - _remaining -= 1 - return 42 - } - } - let underestimatedCount: Int - let count: Int - - func makeIterator() -> Iterator { - return Iterator(count) - } - } - - func test_init_TestSequence() { - // Underestimated count - do { - let d = Data(TestSequence(underestimatedCount: 0, count: 10)) - XCTAssertEqual(10, d.count) - XCTAssertEqual(Array(repeating: 42 as UInt8, count: 10), Array(d)) - } - - // Very underestimated count (to exercise realloc path) - do { - let d = Data(TestSequence(underestimatedCount: 0, count: 1000)) - XCTAssertEqual(1000, d.count) - XCTAssertEqual(Array(repeating: 42 as UInt8, count: 1000), Array(d)) - } - - // Exact count - do { - let d = Data(TestSequence(underestimatedCount: 10, count: 10)) - XCTAssertEqual(10, d.count) - XCTAssertEqual(Array(repeating: 42 as UInt8, count: 10), Array(d)) - } - - // Overestimated count. This is an illegal case, so trapping would be fine. - // However, for compatibility with the implementation in Swift 5, Data - // handles this case by simply truncating itself to the actual size. - do { - let d = Data(TestSequence(underestimatedCount: 20, count: 10)) - XCTAssertEqual(10, d.count) - XCTAssertEqual(Array(repeating: 42 as UInt8, count: 10), Array(d)) - } - } - - func test_append_TestSequence() { - let base = Data(Array(repeating: 23 as UInt8, count: 10)) - - // Underestimated count - do { - var d = base - d.append(contentsOf: TestSequence(underestimatedCount: 0, count: 10)) - XCTAssertEqual(20, d.count) - XCTAssertEqual(Array(base) + Array(repeating: 42 as UInt8, count: 10), - Array(d)) - } - - // Very underestimated count (to exercise realloc path) - do { - var d = base - d.append(contentsOf: TestSequence(underestimatedCount: 0, count: 1000)) - XCTAssertEqual(1010, d.count) - XCTAssertEqual(Array(base) + Array(repeating: 42 as UInt8, count: 1000), Array(d)) - } - - // Exact count - do { - var d = base - d.append(contentsOf: TestSequence(underestimatedCount: 10, count: 10)) - XCTAssertEqual(20, d.count) - XCTAssertEqual(Array(base) + Array(repeating: 42 as UInt8, count: 10), Array(d)) - } - - // Overestimated count. This is an illegal case, so trapping would be fine. - // However, for compatibility with the implementation in Swift 5, Data - // handles this case by simply truncating itself to the actual size. - do { - var d = base - d.append(contentsOf: TestSequence(underestimatedCount: 20, count: 10)) - XCTAssertEqual(20, d.count) - XCTAssertEqual(Array(base) + Array(repeating: 42 as UInt8, count: 10), Array(d)) - } - } - - #if false // FIXME: XCTest doesn't support crash tests yet rdar://20195010&22387653 - func test_bounding_failure_subdata() { - let data = "Hello World".data(using: .utf8)! - expectCrashLater() - let c = data.subdata(in: 5..<200) - } - #endif - - #if false // FIXME: XCTest doesn't support crash tests yet rdar://20195010&22387653 - func test_bounding_failure_replace() { - var data = "Hello World".data(using: .utf8)! - expectCrashLater() - data.replaceSubrange(5..<200, with: Data()) - } - #endif - - #if false // FIXME: XCTest doesn't support crash tests yet rdar://20195010&22387653 - func test_bounding_failure_replace2() { - var data = "a".data(using: .utf8)! - var bytes : [UInt8] = [1, 2, 3] - expectCrashLater() - bytes.withUnsafeBufferPointer { - // lowerBound ok, upperBound after end of data - data.replaceSubrange(0..<2, with: $0) - } - } - #endif - - #if false // FIXME: XCTest doesn't support crash tests yet rdar://20195010&22387653 - func test_bounding_failure_replace3() { - var data = "a".data(using: .utf8)! - var bytes : [UInt8] = [1, 2, 3] - expectCrashLater() - bytes.withUnsafeBufferPointer { - // lowerBound is > length - data.replaceSubrange(2..<4, with: $0) - } - } - #endif - - #if false // FIXME: XCTest doesn't support crash tests yet rdar://20195010&22387653 - func test_bounding_failure_replace4() { - var data = "a".data(using: .utf8)! - var bytes : [UInt8] = [1, 2, 3] - expectCrashLater() - // lowerBound is > length - data.replaceSubrange(2..<4, with: bytes) - } - #endif - - #if false // FIXME: XCTest doesn't support crash tests yet rdar://20195010&22387653 - func test_bounding_failure_reset_range() { - var data = "Hello World".data(using: .utf8)! - expectCrashLater() - data.resetBytes(in: 100..<200) - } - #endif - - #if false // FIXME: XCTest doesn't support crash tests yet rdar://20195010&22387653 - func test_bounding_failure_append_bad_length() { - var data = "Hello World".data(using: .utf8)! - expectCrashLater() - data.append("hello", count: -2) - } - #endif - - #if false // FIXME: XCTest doesn't support crash tests yet rdar://20195010&22387653 - func test_bounding_failure_append_absurd_length() { - var data = "Hello World".data(using: .utf8)! - expectCrashLater() - data.append("hello", count: Int.min) - } - #endif - - #if false // FIXME: XCTest doesn't support crash tests yet rdar://20195010&22387653 - func test_bounding_failure_subscript() { - var data = "Hello World".data(using: .utf8)! - expectCrashLater() - data[100] = 4 - } - #endif -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestDate.swift b/Darwin/Foundation-swiftoverlay-Tests/TestDate.swift deleted file mode 100644 index 74c3aaa5b0..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestDate.swift +++ /dev/null @@ -1,204 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import CoreFoundation -import XCTest - -class TestDate : XCTestCase { - - func testDateComparison() { - let d1 = Date() - let d2 = d1 + 1 - - XCTAssertTrue(d2 > d1) - XCTAssertTrue(d1 < d2) - - let d3 = Date(timeIntervalSince1970: 12345) - let d4 = Date(timeIntervalSince1970: 12345) - - XCTAssertTrue(d3 == d4) - XCTAssertTrue(d3 <= d4) - XCTAssertTrue(d4 >= d3) - } - - func testDateMutation() { - let d0 = Date() - var d1 = Date() - d1 = d1 + 1 - let d2 = Date(timeIntervalSinceNow: 10) - - XCTAssertTrue(d2 > d1) - XCTAssertTrue(d1 != d0) - - let d3 = d1 - d1 += 10 - XCTAssertTrue(d1 > d3) - } - - func testCast() { - let d0 = NSDate() - let d1 = d0 as Date - XCTAssertEqual(d0.timeIntervalSinceReferenceDate, d1.timeIntervalSinceReferenceDate) - } - - func testDistantPast() { - let distantPast = Date.distantPast - let currentDate = Date() - XCTAssertTrue(distantPast < currentDate) - XCTAssertTrue(currentDate > distantPast) - XCTAssertTrue(distantPast.timeIntervalSince(currentDate) < 3600.0*24*365*100) /* ~1 century in seconds */ - } - - func testDistantFuture() { - let distantFuture = Date.distantFuture - let currentDate = Date() - XCTAssertTrue(currentDate < distantFuture) - XCTAssertTrue(distantFuture > currentDate) - XCTAssertTrue(distantFuture.timeIntervalSince(currentDate) > 3600.0*24*365*100) /* ~1 century in seconds */ - } - - func dateWithString(_ str: String) -> Date { - let formatter = DateFormatter() - // Note: Calendar(identifier:) is OSX 10.9+ and iOS 8.0+ whereas the CF version has always been available - formatter.calendar = Calendar(identifier: .gregorian) - formatter.locale = Locale(identifier: "en_US") - formatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z" - return formatter.date(from: str)! as Date - } - - func testEquality() { - let date = dateWithString("2010-05-17 14:49:47 -0700") - let sameDate = dateWithString("2010-05-17 14:49:47 -0700") - XCTAssertEqual(date, sameDate) - XCTAssertEqual(sameDate, date) - - let differentDate = dateWithString("2010-05-17 14:49:46 -0700") - XCTAssertNotEqual(date, differentDate) - XCTAssertNotEqual(differentDate, date) - - let sameDateByTimeZone = dateWithString("2010-05-17 13:49:47 -0800") - XCTAssertEqual(date, sameDateByTimeZone) - XCTAssertEqual(sameDateByTimeZone, date) - - let differentDateByTimeZone = dateWithString("2010-05-17 14:49:47 -0800") - XCTAssertNotEqual(date, differentDateByTimeZone) - XCTAssertNotEqual(differentDateByTimeZone, date) - } - - func testTimeIntervalSinceDate() { - let referenceDate = dateWithString("1900-01-01 00:00:00 +0000") - let sameDate = dateWithString("1900-01-01 00:00:00 +0000") - let laterDate = dateWithString("2010-05-17 14:49:47 -0700") - let earlierDate = dateWithString("1810-05-17 14:49:47 -0700") - - let laterSeconds = laterDate.timeIntervalSince(referenceDate) - XCTAssertEqual(laterSeconds, 3483121787.0) - - let earlierSeconds = earlierDate.timeIntervalSince(referenceDate) - XCTAssertEqual(earlierSeconds, -2828311813.0) - - let sameSeconds = sameDate.timeIntervalSince(referenceDate) - XCTAssertEqual(sameSeconds, 0.0) - } - - func testDateComponents() { - // Make sure the optional init stuff works - let dc = DateComponents() - - XCTAssertNil(dc.year) - - let dc2 = DateComponents(year: 1999) - - XCTAssertNil(dc2.day) - XCTAssertEqual(1999, dc2.year) - } - - func test_DateHashing() { - let values: [Date] = [ - dateWithString("2010-05-17 14:49:47 -0700"), - dateWithString("2011-05-17 14:49:47 -0700"), - dateWithString("2010-06-17 14:49:47 -0700"), - dateWithString("2010-05-18 14:49:47 -0700"), - dateWithString("2010-05-17 15:49:47 -0700"), - dateWithString("2010-05-17 14:50:47 -0700"), - dateWithString("2010-05-17 14:49:48 -0700"), - ] - checkHashable(values, equalityOracle: { $0 == $1 }) - } - - func test_AnyHashableContainingDate() { - let values: [Date] = [ - dateWithString("2016-05-17 14:49:47 -0700"), - dateWithString("2010-05-17 14:49:47 -0700"), - dateWithString("2010-05-17 14:49:47 -0700"), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(Date.self, type(of: anyHashables[0].base)) - expectEqual(Date.self, type(of: anyHashables[1].base)) - expectEqual(Date.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableCreatedFromNSDate() { - let values: [NSDate] = [ - NSDate(timeIntervalSince1970: 1000000000), - NSDate(timeIntervalSince1970: 1000000001), - NSDate(timeIntervalSince1970: 1000000001), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(Date.self, type(of: anyHashables[0].base)) - expectEqual(Date.self, type(of: anyHashables[1].base)) - expectEqual(Date.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableContainingDateComponents() { - let values: [DateComponents] = [ - DateComponents(year: 2016), - DateComponents(year: 1995), - DateComponents(year: 1995), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(DateComponents.self, type(of: anyHashables[0].base)) - expectEqual(DateComponents.self, type(of: anyHashables[1].base)) - expectEqual(DateComponents.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableCreatedFromNSDateComponents() { - func makeNSDateComponents(year: Int) -> NSDateComponents { - let result = NSDateComponents() - result.year = year - return result - } - let values: [NSDateComponents] = [ - makeNSDateComponents(year: 2016), - makeNSDateComponents(year: 1995), - makeNSDateComponents(year: 1995), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(DateComponents.self, type(of: anyHashables[0].base)) - expectEqual(DateComponents.self, type(of: anyHashables[1].base)) - expectEqual(DateComponents.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_dateComponents_unconditionallyBridgeFromObjectiveC() { - XCTAssertEqual(DateComponents(), DateComponents._unconditionallyBridgeFromObjectiveC(nil)) - } -} - diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestDateInterval.swift b/Darwin/Foundation-swiftoverlay-Tests/TestDateInterval.swift deleted file mode 100644 index bcf313ccd6..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestDateInterval.swift +++ /dev/null @@ -1,191 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -class TestDateInterval : XCTestCase { - func dateWithString(_ str: String) -> Date { - let formatter = DateFormatter() - formatter.calendar = Calendar(identifier: .gregorian) - formatter.locale = Locale(identifier: "en_US") - formatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z" - return formatter.date(from: str)! as Date - } - - func test_compareDateIntervals() { - if #available(iOS 10.10, macOS 10.12, tvOS 10.0, watchOS 3.0, *) { - let start = dateWithString("2010-05-17 14:49:47 -0700") - let duration: TimeInterval = 10000000.0 - let testInterval1 = DateInterval(start: start, duration: duration) - let testInterval2 = DateInterval(start: start, duration: duration) - XCTAssertEqual(testInterval1, testInterval2) - XCTAssertEqual(testInterval2, testInterval1) - XCTAssertEqual(testInterval1.compare(testInterval2), ComparisonResult.orderedSame) - - let testInterval3 = DateInterval(start: start, duration: 10000000000.0) - XCTAssertTrue(testInterval1 < testInterval3) - XCTAssertTrue(testInterval3 > testInterval1) - - let earlierStart = dateWithString("2009-05-17 14:49:47 -0700") - let testInterval4 = DateInterval(start: earlierStart, duration: duration) - - XCTAssertTrue(testInterval4 < testInterval1) - XCTAssertTrue(testInterval1 > testInterval4) - } - } - - func test_isEqualToDateInterval() { - if #available(iOS 10.10, macOS 10.12, tvOS 10.0, watchOS 3.0, *) { - let start = dateWithString("2010-05-17 14:49:47 -0700") - let duration = 10000000.0 - let testInterval1 = DateInterval(start: start, duration: duration) - let testInterval2 = DateInterval(start: start, duration: duration) - - XCTAssertEqual(testInterval1, testInterval2) - - let testInterval3 = DateInterval(start: start, duration: 100.0) - XCTAssertNotEqual(testInterval1, testInterval3) - } - } - - func test_hashing() { - guard #available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) else { return } - - let start1a = dateWithString("2019-04-04 17:09:23 -0700") - let start1b = dateWithString("2019-04-04 17:09:23 -0700") - let start2a = Date(timeIntervalSinceReferenceDate: start1a.timeIntervalSinceReferenceDate.nextUp) - let start2b = Date(timeIntervalSinceReferenceDate: start1a.timeIntervalSinceReferenceDate.nextUp) - let duration1 = 1800.0 - let duration2 = duration1.nextUp - let intervals: [[DateInterval]] = [ - [ - DateInterval(start: start1a, duration: duration1), - DateInterval(start: start1b, duration: duration1), - ], - [ - DateInterval(start: start1a, duration: duration2), - DateInterval(start: start1b, duration: duration2), - ], - [ - DateInterval(start: start2a, duration: duration1), - DateInterval(start: start2b, duration: duration1), - ], - [ - DateInterval(start: start2a, duration: duration2), - DateInterval(start: start2b, duration: duration2), - ], - ] - checkHashableGroups(intervals) - } - - func test_checkIntersection() { - if #available(iOS 10.10, macOS 10.12, tvOS 10.0, watchOS 3.0, *) { - let start1 = dateWithString("2010-05-17 14:49:47 -0700") - let end1 = dateWithString("2010-08-17 14:49:47 -0700") - - let testInterval1 = DateInterval(start: start1, end: end1) - - let start2 = dateWithString("2010-02-17 14:49:47 -0700") - let end2 = dateWithString("2010-07-17 14:49:47 -0700") - - let testInterval2 = DateInterval(start: start2, end: end2) - - XCTAssertTrue(testInterval1.intersects(testInterval2)) - - let start3 = dateWithString("2010-10-17 14:49:47 -0700") - let end3 = dateWithString("2010-11-17 14:49:47 -0700") - - let testInterval3 = DateInterval(start: start3, end: end3) - - XCTAssertFalse(testInterval1.intersects(testInterval3)) - } - } - - func test_validIntersections() { - if #available(iOS 10.10, macOS 10.12, tvOS 10.0, watchOS 3.0, *) { - let start1 = dateWithString("2010-05-17 14:49:47 -0700") - let end1 = dateWithString("2010-08-17 14:49:47 -0700") - - let testInterval1 = DateInterval(start: start1, end: end1) - - let start2 = dateWithString("2010-02-17 14:49:47 -0700") - let end2 = dateWithString("2010-07-17 14:49:47 -0700") - - let testInterval2 = DateInterval(start: start2, end: end2) - - let start3 = dateWithString("2010-05-17 14:49:47 -0700") - let end3 = dateWithString("2010-07-17 14:49:47 -0700") - - let testInterval3 = DateInterval(start: start3, end: end3) - - let intersection1 = testInterval2.intersection(with: testInterval1) - XCTAssertNotNil(intersection1) - XCTAssertEqual(testInterval3, intersection1) - - let intersection2 = testInterval1.intersection(with: testInterval2) - XCTAssertNotNil(intersection2) - XCTAssertEqual(intersection1, intersection2) - } - } - - func test_containsDate() { - if #available(iOS 10.10, macOS 10.12, tvOS 10.0, watchOS 3.0, *) { - let start = dateWithString("2010-05-17 14:49:47 -0700") - let duration = 10000000.0 - - let testInterval = DateInterval(start: start, duration: duration) - let containedDate = dateWithString("2010-05-17 20:49:47 -0700") - - XCTAssertTrue(testInterval.contains(containedDate)) - - let earlierStart = dateWithString("2009-05-17 14:49:47 -0700") - XCTAssertFalse(testInterval.contains(earlierStart)) - } - } - - func test_AnyHashableContainingDateInterval() { - if #available(iOS 10.10, macOS 10.12, tvOS 10.0, watchOS 3.0, *) { - let start = dateWithString("2010-05-17 14:49:47 -0700") - let duration = 10000000.0 - let values: [DateInterval] = [ - DateInterval(start: start, duration: duration), - DateInterval(start: start, duration: duration / 2), - DateInterval(start: start, duration: duration / 2), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(DateInterval.self, type(of: anyHashables[0].base)) - expectEqual(DateInterval.self, type(of: anyHashables[1].base)) - expectEqual(DateInterval.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - } - - func test_AnyHashableCreatedFromNSDateInterval() { - if #available(iOS 10.10, macOS 10.12, tvOS 10.0, watchOS 3.0, *) { - let start = dateWithString("2010-05-17 14:49:47 -0700") - let duration = 10000000.0 - let values: [NSDateInterval] = [ - NSDateInterval(start: start, duration: duration), - NSDateInterval(start: start, duration: duration / 2), - NSDateInterval(start: start, duration: duration / 2), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(DateInterval.self, type(of: anyHashables[0].base)) - expectEqual(DateInterval.self, type(of: anyHashables[1].base)) - expectEqual(DateInterval.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - } -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestDecimal.swift b/Darwin/Foundation-swiftoverlay-Tests/TestDecimal.swift deleted file mode 100644 index 26b1f72ac7..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestDecimal.swift +++ /dev/null @@ -1,784 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -class TestDecimal : XCTestCase { - func test_AdditionWithNormalization() { - - let biggie = Decimal(65536) - let smallee = Decimal(65536) - let answer = biggie/smallee - XCTAssertEqual(Decimal(1),answer) - - var one = Decimal(1) - var addend = Decimal(1) - var expected = Decimal() - var result = Decimal() - - expected._isNegative = 0; - expected._isCompact = 0; - - // 2 digits -- certain to work - addend._exponent = -1; - XCTAssertEqual(.noError, NSDecimalAdd(&result, &one, &addend, .plain), "1 + 0.1") - expected._exponent = -1; - expected._length = 1; - expected._mantissa.0 = 11; - XCTAssertEqual(.orderedSame, NSDecimalCompare(&expected, &result), "1.1 == 1 + 0.1") - - // 38 digits -- guaranteed by NSDecimal to work - addend._exponent = -37; - XCTAssertEqual(.noError, NSDecimalAdd(&result, &one, &addend, .plain), "1 + 1e-37") - expected._exponent = -37; - expected._length = 8; - expected._mantissa.0 = 0x0001; - expected._mantissa.1 = 0x0000; - expected._mantissa.2 = 0x36a0; - expected._mantissa.3 = 0x00f4; - expected._mantissa.4 = 0x46d9; - expected._mantissa.5 = 0xd5da; - expected._mantissa.6 = 0xee10; - expected._mantissa.7 = 0x0785; - XCTAssertEqual(.orderedSame, NSDecimalCompare(&expected, &result), "1 + 1e-37") - - // 39 digits -- not guaranteed to work but it happens to, so we make the test work either way - addend._exponent = -38; - let error = NSDecimalAdd(&result, &one, &addend, .plain) - XCTAssertTrue(error == .noError || error == .lossOfPrecision, "1 + 1e-38") - if error == .noError { - expected._exponent = -38; - expected._length = 8; - expected._mantissa.0 = 0x0001; - expected._mantissa.1 = 0x0000; - expected._mantissa.2 = 0x2240; - expected._mantissa.3 = 0x098a; - expected._mantissa.4 = 0xc47a; - expected._mantissa.5 = 0x5a86; - expected._mantissa.6 = 0x4ca8; - expected._mantissa.7 = 0x4b3b; - XCTAssertEqual(.orderedSame, NSDecimalCompare(&expected, &result), "1 + 1e-38") - } else { - XCTAssertEqual(.orderedSame, NSDecimalCompare(&one, &result), "1 + 1e-38") - } - - // 40 digits -- doesn't work; need to make sure it's rounding for us - addend._exponent = -39; - XCTAssertEqual(.lossOfPrecision, NSDecimalAdd(&result, &one, &addend, .plain), "1 + 1e-39") - XCTAssertEqual("1", result.description) - XCTAssertEqual(.orderedSame, NSDecimalCompare(&one, &result), "1 + 1e-39") - } - - func test_BasicConstruction() { - let zero = Decimal() - XCTAssertEqual(20, MemoryLayout.size) - XCTAssertEqual(0, zero._exponent) - XCTAssertEqual(0, zero._length) - XCTAssertEqual(0, zero._isNegative) - XCTAssertEqual(0, zero._isCompact) - XCTAssertEqual(0, zero._reserved) - let (m0, m1, m2, m3, m4, m5, m6, m7) = zero._mantissa - XCTAssertEqual(0, m0) - XCTAssertEqual(0, m1) - XCTAssertEqual(0, m2) - XCTAssertEqual(0, m3) - XCTAssertEqual(0, m4) - XCTAssertEqual(0, m5) - XCTAssertEqual(0, m6) - XCTAssertEqual(0, m7) - XCTAssertEqual(8, NSDecimalMaxSize) - XCTAssertEqual(32767, NSDecimalNoScale) - XCTAssertFalse(zero.isNormal) - XCTAssertTrue(zero.isFinite) - XCTAssertTrue(zero.isZero) - XCTAssertFalse(zero.isSubnormal) - XCTAssertFalse(zero.isInfinite) - XCTAssertFalse(zero.isNaN) - XCTAssertFalse(zero.isSignaling) - - if #available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) { - let d1 = Decimal(1234567890123456789 as UInt64) - XCTAssertEqual(d1._exponent, 0) - XCTAssertEqual(d1._length, 4) - } - } - func test_Constants() { - XCTAssertEqual(8, NSDecimalMaxSize) - XCTAssertEqual(32767, NSDecimalNoScale) - let smallest = Decimal(_exponent: 127, _length: 8, _isNegative: 1, _isCompact: 1, _reserved: 0, _mantissa: (UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max)) - XCTAssertEqual(smallest, -Decimal.greatestFiniteMagnitude) - let biggest = Decimal(_exponent: 127, _length: 8, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max)) - XCTAssertEqual(biggest, Decimal.greatestFiniteMagnitude) - let leastNormal = Decimal(_exponent: -128, _length: 1, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (1, 0, 0, 0, 0, 0, 0, 0)) - XCTAssertEqual(leastNormal, Decimal.leastNormalMagnitude) - let leastNonzero = Decimal(_exponent: -128, _length: 1, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (1, 0, 0, 0, 0, 0, 0, 0)) - XCTAssertEqual(leastNonzero, Decimal.leastNonzeroMagnitude) - let pi = Decimal(_exponent: -38, _length: 8, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (0x6623, 0x7d57, 0x16e7, 0xad0d, 0xaf52, 0x4641, 0xdfa7, 0xec58)) - XCTAssertEqual(pi, Decimal.pi) - XCTAssertEqual(10, Decimal.radix) - XCTAssertTrue(Decimal().isCanonical) - XCTAssertFalse(Decimal().isSignalingNaN) - XCTAssertFalse(Decimal.nan.isSignalingNaN) - XCTAssertTrue(Decimal.nan.isNaN) - XCTAssertEqual(.quietNaN, Decimal.nan.floatingPointClass) - XCTAssertEqual(.positiveZero, Decimal().floatingPointClass) - XCTAssertEqual(.negativeNormal, smallest.floatingPointClass) - XCTAssertEqual(.positiveNormal, biggest.floatingPointClass) - XCTAssertFalse(Double.nan.isFinite) - XCTAssertFalse(Double.nan.isInfinite) - } - - func test_Description() { - XCTAssertEqual("0", Decimal().description) - XCTAssertEqual("0", Decimal(0).description) - XCTAssertEqual("10", Decimal(_exponent: 1, _length: 1, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (1, 0, 0, 0, 0, 0, 0, 0)).description) - XCTAssertEqual("10", Decimal(10).description) - XCTAssertEqual("123.458", Decimal(_exponent: -3, _length: 2, _isNegative: 0, _isCompact:1, _reserved: 0, _mantissa: (57922, 1, 0, 0, 0, 0, 0, 0)).description) - XCTAssertEqual("123.458", Decimal(123.458).description) - XCTAssertEqual("123", Decimal(UInt8(123)).description) - XCTAssertEqual("45", Decimal(Int8(45)).description) - XCTAssertEqual("3.14159265358979323846264338327950288419", Decimal.pi.description) - XCTAssertEqual("-30000000000", Decimal(sign: .minus, exponent: 10, significand: Decimal(3)).description) - XCTAssertEqual("300000", Decimal(sign: .plus, exponent: 5, significand: Decimal(3)).description) - XCTAssertEqual("5", Decimal(signOf: Decimal(3), magnitudeOf: Decimal(5)).description) - XCTAssertEqual("-5", Decimal(signOf: Decimal(-3), magnitudeOf: Decimal(5)).description) - XCTAssertEqual("5", Decimal(signOf: Decimal(3), magnitudeOf: Decimal(-5)).description) - XCTAssertEqual("-5", Decimal(signOf: Decimal(-3), magnitudeOf: Decimal(-5)).description) - } - - func test_ExplicitConstruction() { - var explicit = Decimal( - _exponent: 0x17f, - _length: 0xff, - _isNegative: 3, - _isCompact: 4, - _reserved: UInt32(1<<18 + 1<<17 + 1), - _mantissa: (6, 7, 8, 9, 10, 11, 12, 13) - ) - XCTAssertEqual(0x7f, explicit._exponent) - XCTAssertEqual(0x7f, explicit.exponent) - XCTAssertEqual(0x0f, explicit._length) - XCTAssertEqual(1, explicit._isNegative) - XCTAssertEqual(FloatingPointSign.minus, explicit.sign) - XCTAssertTrue(explicit.isSignMinus) - XCTAssertEqual(0, explicit._isCompact) - XCTAssertEqual(UInt32(1<<17 + 1), explicit._reserved) - let (m0, m1, m2, m3, m4, m5, m6, m7) = explicit._mantissa - XCTAssertEqual(6, m0) - XCTAssertEqual(7, m1) - XCTAssertEqual(8, m2) - XCTAssertEqual(9, m3) - XCTAssertEqual(10, m4) - XCTAssertEqual(11, m5) - XCTAssertEqual(12, m6) - XCTAssertEqual(13, m7) - explicit._isCompact = 5 - explicit._isNegative = 6 - XCTAssertEqual(0, explicit._isNegative) - XCTAssertEqual(1, explicit._isCompact) - XCTAssertEqual(FloatingPointSign.plus, explicit.sign) - XCTAssertFalse(explicit.isSignMinus) - XCTAssertTrue(explicit.isNormal) - - let significand = explicit.significand - XCTAssertEqual(0, significand._exponent) - XCTAssertEqual(0, significand.exponent) - XCTAssertEqual(0x0f, significand._length) - XCTAssertEqual(0, significand._isNegative) - XCTAssertEqual(1, significand._isCompact) - XCTAssertEqual(0, significand._reserved) - let (sm0, sm1, sm2, sm3, sm4, sm5, sm6, sm7) = significand._mantissa - XCTAssertEqual(6, sm0) - XCTAssertEqual(7, sm1) - XCTAssertEqual(8, sm2) - XCTAssertEqual(9, sm3) - XCTAssertEqual(10, sm4) - XCTAssertEqual(11, sm5) - XCTAssertEqual(12, sm6) - XCTAssertEqual(13, sm7) - } - - func test_Maths() { - for i in -2...10 { - for j in 0...5 { - XCTAssertEqual(Decimal(i*j), Decimal(i) * Decimal(j), "\(Decimal(i*j)) == \(i) * \(j)") - XCTAssertEqual(Decimal(i+j), Decimal(i) + Decimal(j), "\(Decimal(i+j)) == \(i)+\(j)") - XCTAssertEqual(Decimal(i-j), Decimal(i) - Decimal(j), "\(Decimal(i-j)) == \(i)-\(j)") - if j != 0 { - let approximation = Decimal(Double(i)/Double(j)) - let answer = Decimal(i) / Decimal(j) - let answerDescription = answer.description - let approximationDescription = approximation.description - var failed: Bool = false - var count = 0 - let SIG_FIG = 14 - for (a, b) in zip(answerDescription, approximationDescription) { - if a != b { - failed = true - break - } - if count == 0 && (a == "-" || a == "0" || a == ".") { - continue // don't count these as significant figures - } - if count >= SIG_FIG { - break - } - count += 1 - } - XCTAssertFalse(failed, "\(Decimal(i/j)) == \(i)/\(j)") - } - } - } - } - - func test_Misc() { - XCTAssertEqual(.minus, Decimal(-5.2).sign) - XCTAssertEqual(.plus, Decimal(5.2).sign) - var d = Decimal(5.2) - XCTAssertEqual(.plus, d.sign) - d.negate() - XCTAssertEqual(.minus, d.sign) - d.negate() - XCTAssertEqual(.plus, d.sign) - var e = Decimal(0) - e.negate() - XCTAssertEqual(e, 0) - XCTAssertTrue(Decimal(3.5).isEqual(to: Decimal(3.5))) - XCTAssertTrue(Decimal.nan.isEqual(to: Decimal.nan)) - XCTAssertTrue(Decimal(1.28).isLess(than: Decimal(2.24))) - XCTAssertFalse(Decimal(2.28).isLess(than: Decimal(2.24))) - XCTAssertTrue(Decimal(1.28).isTotallyOrdered(belowOrEqualTo: Decimal(2.24))) - XCTAssertFalse(Decimal(2.28).isTotallyOrdered(belowOrEqualTo: Decimal(2.24))) - XCTAssertTrue(Decimal(1.2).isTotallyOrdered(belowOrEqualTo: Decimal(1.2))) - XCTAssertTrue(Decimal.nan.isEqual(to: Decimal.nan)) - XCTAssertTrue(Decimal.nan.isLess(than: Decimal(0))) - XCTAssertFalse(Decimal.nan.isLess(than: Decimal.nan)) - XCTAssertTrue(Decimal.nan.isLessThanOrEqualTo(Decimal(0))) - XCTAssertTrue(Decimal.nan.isLessThanOrEqualTo(Decimal.nan)) - XCTAssertFalse(Decimal.nan.isTotallyOrdered(belowOrEqualTo: Decimal.nan)) - XCTAssertFalse(Decimal.nan.isTotallyOrdered(belowOrEqualTo: Decimal(2.3))) - XCTAssertTrue(Decimal(2) < Decimal(3)) - XCTAssertTrue(Decimal(3) > Decimal(2)) - XCTAssertEqual(Decimal(-9), Decimal(1) - Decimal(10)) - XCTAssertEqual(Decimal(1.234), abs(Decimal(1.234))) - XCTAssertEqual(Decimal(1.234), abs(Decimal(-1.234))) - if #available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) { - XCTAssertTrue(Decimal.nan.magnitude.isNaN) - } - var a = Decimal(1234) - var r = a - XCTAssertEqual(.noError, NSDecimalMultiplyByPowerOf10(&r, &a, 1, .plain)) - XCTAssertEqual(Decimal(12340), r) - a = Decimal(1234) - XCTAssertEqual(.noError, NSDecimalMultiplyByPowerOf10(&r, &a, 2, .plain)) - XCTAssertEqual(Decimal(123400), r) - XCTAssertEqual(.overflow, NSDecimalMultiplyByPowerOf10(&r, &a, 128, .plain)) - XCTAssertTrue(r.isNaN) - a = Decimal(1234) - XCTAssertEqual(.noError, NSDecimalMultiplyByPowerOf10(&r, &a, -2, .plain)) - XCTAssertEqual(Decimal(12.34), r) - var ur = r - XCTAssertEqual(.underflow, NSDecimalMultiplyByPowerOf10(&ur, &r, -128, .plain)) - XCTAssertTrue(ur.isNaN) - a = Decimal(1234) - XCTAssertEqual(.noError, NSDecimalPower(&r, &a, 0, .plain)) - XCTAssertEqual(Decimal(1), r) - a = Decimal(8) - XCTAssertEqual(.noError, NSDecimalPower(&r, &a, 2, .plain)) - XCTAssertEqual(Decimal(64), r) - a = Decimal(-2) - XCTAssertEqual(.noError, NSDecimalPower(&r, &a, 3, .plain)) - XCTAssertEqual(Decimal(-8), r) - for i in -2...10 { - for j in 0...5 { - var actual = Decimal(i) - var result = actual - XCTAssertEqual(.noError, NSDecimalPower(&result, &actual, j, .plain)) - let expected = Decimal(pow(Double(i), Double(j))) - XCTAssertEqual(expected, result, "\(result) == \(i)^\(j)") - if #available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) { - XCTAssertEqual(expected, pow(actual, j)) - } - } - } - } - - func test_MultiplicationOverflow() { - var multiplicand = Decimal(_exponent: 0, _length: 8, _isNegative: 0, _isCompact: 0, _reserved: 0, _mantissa: ( 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff )) - - var result = Decimal() - var multiplier = Decimal(1) - - multiplier._mantissa.0 = 2 - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &multiplicand, &multiplier, .plain), "2 * max mantissa") - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &multiplier, &multiplicand, .plain), "max mantissa * 2") - - multiplier._exponent = 0x7f - XCTAssertEqual(.overflow, NSDecimalMultiply(&result, &multiplicand, &multiplier, .plain), "2e127 * max mantissa") - XCTAssertEqual(.overflow, NSDecimalMultiply(&result, &multiplier, &multiplicand, .plain), "max mantissa * 2e127") - } - - func test_NaNInput() { - var NaN = Decimal.nan - var one = Decimal(1) - var result = Decimal() - - XCTAssertNotEqual(.noError, NSDecimalAdd(&result, &NaN, &one, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN + 1") - XCTAssertNotEqual(.noError, NSDecimalAdd(&result, &one, &NaN, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "1 + NaN") - - XCTAssertNotEqual(.noError, NSDecimalSubtract(&result, &NaN, &one, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN - 1") - XCTAssertNotEqual(.noError, NSDecimalSubtract(&result, &one, &NaN, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "1 - NaN") - - XCTAssertNotEqual(.noError, NSDecimalMultiply(&result, &NaN, &one, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN * 1") - XCTAssertNotEqual(.noError, NSDecimalMultiply(&result, &one, &NaN, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "1 * NaN") - - XCTAssertNotEqual(.noError, NSDecimalDivide(&result, &NaN, &one, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN / 1") - XCTAssertNotEqual(.noError, NSDecimalDivide(&result, &one, &NaN, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "1 / NaN") - - XCTAssertNotEqual(.noError, NSDecimalPower(&result, &NaN, 0, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN ^ 0") - XCTAssertNotEqual(.noError, NSDecimalPower(&result, &NaN, 4, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN ^ 4") - XCTAssertNotEqual(.noError, NSDecimalPower(&result, &NaN, 5, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN ^ 5") - - XCTAssertNotEqual(.noError, NSDecimalMultiplyByPowerOf10(&result, &NaN, 0, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN e0") - XCTAssertNotEqual(.noError, NSDecimalMultiplyByPowerOf10(&result, &NaN, 4, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN e4") - XCTAssertNotEqual(.noError, NSDecimalMultiplyByPowerOf10(&result, &NaN, 5, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN e5") - - XCTAssertFalse(Double(truncating: NSDecimalNumber(decimal: Decimal(0))).isNaN) - XCTAssertTrue(Decimal(Double.leastNonzeroMagnitude).isNaN) - XCTAssertTrue(Decimal(Double.leastNormalMagnitude).isNaN) - XCTAssertTrue(Decimal(Double.greatestFiniteMagnitude).isNaN) - XCTAssertTrue(Decimal(Double("1e-129")!).isNaN) - XCTAssertTrue(Decimal(Double("0.1e-128")!).isNaN) - } - - func test_NegativeAndZeroMultiplication() { - var one = Decimal(1) - var zero = Decimal(0) - var negativeOne = Decimal(-1) - - var result = Decimal() - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &one, &one, .plain), "1 * 1") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&one, &result), "1 * 1") - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &one, &negativeOne, .plain), "1 * -1") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&negativeOne, &result), "1 * -1") - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &negativeOne, &one, .plain), "-1 * 1") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&negativeOne, &result), "-1 * 1") - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &negativeOne, &negativeOne, .plain), "-1 * -1") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&one, &result), "-1 * -1") - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &one, &zero, .plain), "1 * 0") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&zero, &result), "1 * 0") - XCTAssertEqual(0, result._isNegative, "1 * 0") - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &zero, &one, .plain), "0 * 1") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&zero, &result), "0 * 1") - XCTAssertEqual(0, result._isNegative, "0 * 1") - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &negativeOne, &zero, .plain), "-1 * 0") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&zero, &result), "-1 * 0") - XCTAssertEqual(0, result._isNegative, "-1 * 0") - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &zero, &negativeOne, .plain), "0 * -1") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&zero, &result), "0 * -1") - XCTAssertEqual(0, result._isNegative, "0 * -1") - } - - func test_Normalize() { - var one = Decimal(1) - var ten = Decimal(-10) - XCTAssertEqual(.noError, NSDecimalNormalize(&one, &ten, .plain)) - XCTAssertEqual(Decimal(1), one) - XCTAssertEqual(Decimal(-10), ten) - XCTAssertEqual(1, one._length) - XCTAssertEqual(1, ten._length) - one = Decimal(1) - ten = Decimal(10) - XCTAssertEqual(.noError, NSDecimalNormalize(&one, &ten, .plain)) - XCTAssertEqual(Decimal(1), one) - XCTAssertEqual(Decimal(10), ten) - XCTAssertEqual(1, one._length) - XCTAssertEqual(1, ten._length) - } - - func test_NSDecimal() { - var nan = Decimal.nan - XCTAssertTrue(NSDecimalIsNotANumber(&nan)) - var zero = Decimal() - XCTAssertFalse(NSDecimalIsNotANumber(&zero)) - var three = Decimal(3) - var guess = Decimal() - NSDecimalCopy(&guess, &three) - XCTAssertEqual(three, guess) - - var f = Decimal(_exponent: 0, _length: 2, _isNegative: 0, _isCompact: 0, _reserved: 0, _mantissa: (0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000)) - let before = f.description - XCTAssertEqual(0, f._isCompact) - NSDecimalCompact(&f) - XCTAssertEqual(1, f._isCompact) - let after = f.description - XCTAssertEqual(before, after) - } - - func test_RepeatingDivision() { - let repeatingNumerator = Decimal(16) - let repeatingDenominator = Decimal(9) - let repeating = repeatingNumerator / repeatingDenominator - - let numerator = Decimal(1010) - var result = numerator / repeating - - var expected = Decimal() - expected._exponent = -35; - expected._length = 8; - expected._isNegative = 0; - expected._isCompact = 1; - expected._reserved = 0; - expected._mantissa.0 = 51946; - expected._mantissa.1 = 3; - expected._mantissa.2 = 15549; - expected._mantissa.3 = 55864; - expected._mantissa.4 = 57984; - expected._mantissa.5 = 55436; - expected._mantissa.6 = 45186; - expected._mantissa.7 = 10941; - - XCTAssertEqual(.orderedSame, NSDecimalCompare(&expected, &result), "568.12500000000000000000000000000248554: \(expected.description) != \(result.description)"); - } - - func test_Round() { - var testCases = [ - // expected, start, scale, round - ( 0, 0.5, 0, Decimal.RoundingMode.down ), - ( 1, 0.5, 0, Decimal.RoundingMode.up ), - ( 2, 2.5, 0, Decimal.RoundingMode.bankers ), - ( 4, 3.5, 0, Decimal.RoundingMode.bankers ), - ( 5, 5.2, 0, Decimal.RoundingMode.plain ), - ( 4.5, 4.5, 1, Decimal.RoundingMode.down ), - ( 5.5, 5.5, 1, Decimal.RoundingMode.up ), - ( 6.5, 6.5, 1, Decimal.RoundingMode.plain ), - ( 7.5, 7.5, 1, Decimal.RoundingMode.bankers ), - - ( -1, -0.5, 0, Decimal.RoundingMode.down ), - ( -2, -2.5, 0, Decimal.RoundingMode.up ), - ( -5, -5.2, 0, Decimal.RoundingMode.plain ), - ( -4.5, -4.5, 1, Decimal.RoundingMode.down ), - ( -5.5, -5.5, 1, Decimal.RoundingMode.up ), - ( -6.5, -6.5, 1, Decimal.RoundingMode.plain ), - ( -7.5, -7.5, 1, Decimal.RoundingMode.bankers ), - ] - if #available(macOS 10.16, iOS 14, watchOS 7, tvOS 14, *) { - testCases += [ - ( -2, -2.5, 0, Decimal.RoundingMode.bankers ), - ( -4, -3.5, 0, Decimal.RoundingMode.bankers ), - ] - } - for testCase in testCases { - let (expected, start, scale, mode) = testCase - var num = Decimal(start) - var r = num - NSDecimalRound(&r, &num, scale, mode) - XCTAssertEqual(Decimal(expected), r) - let numnum = NSDecimalNumber(decimal:Decimal(start)) - let behavior = NSDecimalNumberHandler(roundingMode: mode, scale: Int16(scale), raiseOnExactness: false, raiseOnOverflow: true, raiseOnUnderflow: true, raiseOnDivideByZero: true) - let result = numnum.rounding(accordingToBehavior:behavior) - XCTAssertEqual(Double(expected), result.doubleValue) - } - } - - func test_ScanDecimal() { - let testCases = [ - // expected, value - ( 123.456e78, "123.456e78" ), - ( -123.456e78, "-123.456e78" ), - ( 123.456, " 123.456 " ), - ( 3.14159, " 3.14159e0" ), - ( 3.14159, " 3.14159e-0" ), - ( 0.314159, " 3.14159e-1" ), - ( 3.14159, " 3.14159e+0" ), - ( 31.4159, " 3.14159e+1" ), - ( 12.34, " 01234e-02"), - ] - for testCase in testCases { - let (expected, string) = testCase - let decimal = Decimal(string:string)! - let aboutOne = Decimal(expected) / decimal - let approximatelyRight = aboutOne >= Decimal(0.99999) && aboutOne <= Decimal(1.00001) - XCTAssertTrue(approximatelyRight, "\(expected) ~= \(decimal) : \(aboutOne) \(aboutOne >= Decimal(0.99999)) \(aboutOne <= Decimal(1.00001))" ) - } - guard let ones = Decimal(string:"111111111111111111111111111111111111111") else { - XCTFail("Unable to parse Decimal(string:'111111111111111111111111111111111111111')") - return - } - let num = ones / Decimal(9) - guard let answer = Decimal(string:"12345679012345679012345679012345679012.3") else { - XCTFail("Unable to parse Decimal(string:'12345679012345679012345679012345679012.3')") - return - } - XCTAssertEqual(answer,num,"\(ones) / 9 = \(answer) \(num)") - } - - func test_Significand() { - var x = -42 as Decimal - XCTAssertEqual(x.significand.sign, .plus) - var y = Decimal(sign: .plus, exponent: 0, significand: x) - XCTAssertEqual(y, -42) - y = Decimal(sign: .minus, exponent: 0, significand: x) - XCTAssertEqual(y, 42) - - x = 42 as Decimal - XCTAssertEqual(x.significand.sign, .plus) - y = Decimal(sign: .plus, exponent: 0, significand: x) - XCTAssertEqual(y, 42) - y = Decimal(sign: .minus, exponent: 0, significand: x) - XCTAssertEqual(y, -42) - - let a = Decimal.leastNonzeroMagnitude - XCTAssertEqual(Decimal(sign: .plus, exponent: -10, significand: a), 0) - XCTAssertEqual(Decimal(sign: .plus, exponent: .min, significand: a), 0) - let b = Decimal.greatestFiniteMagnitude - XCTAssertTrue(Decimal(sign: .plus, exponent: 10, significand: b).isNaN) - XCTAssertTrue(Decimal(sign: .plus, exponent: .max, significand: b).isNaN) - } - - func test_SimpleMultiplication() { - var multiplicand = Decimal() - multiplicand._isNegative = 0 - multiplicand._isCompact = 0 - multiplicand._length = 1 - multiplicand._exponent = 1 - - var multiplier = multiplicand - multiplier._exponent = 2 - - var expected = multiplicand - expected._isNegative = 0 - expected._isCompact = 0 - expected._exponent = 3 - expected._length = 1 - - var result = Decimal() - - for i in 1.. x) - - x = .nan - XCTAssertTrue(x.ulp.isNaN) - XCTAssertTrue(x.nextDown.isNaN) - XCTAssertTrue(x.nextUp.isNaN) - - x = .greatestFiniteMagnitude - XCTAssertEqual(x.ulp, Decimal(string: "1e127")!) - XCTAssertEqual(x.nextDown, x - Decimal(string: "1e127")!) - XCTAssertTrue(x.nextUp.isNaN) - - // '4' is an important value to test because the max supported - // significand of this type is not 10 ** 38 - 1 but rather 2 ** 128 - 1, - // for which reason '4.ulp' is not equal to '1.ulp' despite having the - // same decimal exponent. - x = 4 - XCTAssertEqual(x.ulp, Decimal(string: "1e-37")!) - XCTAssertEqual(x.nextDown, x - Decimal(string: "1e-37")!) - XCTAssertEqual(x.nextUp, x + Decimal(string: "1e-37")!) - XCTAssertEqual(x.nextDown.nextUp, x) - XCTAssertEqual(x.nextUp.nextDown, x) - XCTAssertNotEqual(x.nextDown, x) - XCTAssertNotEqual(x.nextUp, x) - - // For similar reasons, '3.40282366920938463463374607431768211455', - // which has the same significand as 'Decimal.greatestFiniteMagnitude', - // is an important value to test because the distance to the next - // representable value is more than 'ulp' and instead requires - // incrementing '_exponent'. - x = Decimal(string: "3.40282366920938463463374607431768211455")! - XCTAssertEqual(x.ulp, Decimal(string: "0.00000000000000000000000000000000000001")!) - XCTAssertEqual(x.nextUp, Decimal(string: "3.4028236692093846346337460743176821146")!) - x = Decimal(string: "3.4028236692093846346337460743176821146")! - XCTAssertEqual(x.ulp, Decimal(string: "0.0000000000000000000000000000000000001")!) - XCTAssertEqual(x.nextDown, Decimal(string: "3.40282366920938463463374607431768211455")!) - - x = 1 - XCTAssertEqual(x.ulp, Decimal(string: "1e-38")!) - XCTAssertEqual(x.nextDown, x - Decimal(string: "1e-38")!) - XCTAssertEqual(x.nextUp, x + Decimal(string: "1e-38")!) - XCTAssertEqual(x.nextDown.nextUp, x) - XCTAssertEqual(x.nextUp.nextDown, x) - XCTAssertNotEqual(x.nextDown, x) - XCTAssertNotEqual(x.nextUp, x) - - x = .leastNonzeroMagnitude - XCTAssertEqual(x.ulp, x) - XCTAssertEqual(x.nextDown, 0) - XCTAssertEqual(x.nextUp, x + x) - XCTAssertEqual(x.nextDown.nextUp, x) - XCTAssertEqual(x.nextUp.nextDown, x) - XCTAssertNotEqual(x.nextDown, x) - XCTAssertNotEqual(x.nextUp, x) - - x = 0 - XCTAssertEqual(x.ulp, Decimal(string: "1e-128")!) - XCTAssertEqual(x.nextDown, -Decimal(string: "1e-128")!) - XCTAssertEqual(x.nextUp, Decimal(string: "1e-128")!) - XCTAssertEqual(x.nextDown.nextUp, x) - XCTAssertEqual(x.nextUp.nextDown, x) - XCTAssertNotEqual(x.nextDown, x) - XCTAssertNotEqual(x.nextUp, x) - - x = -1 - XCTAssertEqual(x.ulp, Decimal(string: "1e-38")!) - XCTAssertEqual(x.nextDown, x - Decimal(string: "1e-38")!) - XCTAssertEqual(x.nextUp, x + Decimal(string: "1e-38")!) - XCTAssertEqual(x.nextDown.nextUp, x) - XCTAssertEqual(x.nextUp.nextDown, x) - XCTAssertNotEqual(x.nextDown, x) - XCTAssertNotEqual(x.nextUp, x) - } - - func test_unconditionallyBridgeFromObjectiveC() { - XCTAssertEqual(Decimal(), Decimal._unconditionallyBridgeFromObjectiveC(nil)) - } - - func test_parseDouble() throws { - XCTAssertEqual(Decimal(Double(0.0)), Decimal(Int.zero)) - XCTAssertEqual(Decimal(Double(-0.0)), Decimal(Int.zero)) - - // These values can only be represented as Decimal.nan - XCTAssertEqual(Decimal(Double.nan), Decimal.nan) - XCTAssertEqual(Decimal(Double.signalingNaN), Decimal.nan) - - // These values are out out range for Decimal - XCTAssertEqual(Decimal(-Double.leastNonzeroMagnitude), Decimal.nan) - XCTAssertEqual(Decimal(Double.leastNonzeroMagnitude), Decimal.nan) - XCTAssertEqual(Decimal(-Double.leastNormalMagnitude), Decimal.nan) - XCTAssertEqual(Decimal(Double.leastNormalMagnitude), Decimal.nan) - XCTAssertEqual(Decimal(-Double.greatestFiniteMagnitude), Decimal.nan) - XCTAssertEqual(Decimal(Double.greatestFiniteMagnitude), Decimal.nan) - - // SR-13837 - let testDoubles: [(Double, String)] = [ - (1.8446744073709550E18, "1844674407370954752"), - (1.8446744073709551E18, "1844674407370954752"), - (1.8446744073709552E18, "1844674407370955264"), - (1.8446744073709553E18, "1844674407370955264"), - (1.8446744073709554E18, "1844674407370955520"), - (1.8446744073709555E18, "1844674407370955520"), - - (1.8446744073709550E19, "18446744073709547520"), - (1.8446744073709551E19, "18446744073709552640"), - (1.8446744073709552E19, "18446744073709552640"), - (1.8446744073709553E19, "18446744073709552640"), - (1.8446744073709554E19, "18446744073709555200"), - (1.8446744073709555E19, "18446744073709555200"), - - (1.8446744073709550E20, "184467440737095526400"), - (1.8446744073709551E20, "184467440737095526400"), - (1.8446744073709552E20, "184467440737095526400"), - (1.8446744073709553E20, "184467440737095526400"), - (1.8446744073709554E20, "184467440737095552000"), - (1.8446744073709555E20, "184467440737095552000"), - ] - - for (d, s) in testDoubles { - XCTAssertEqual(Decimal(d), Decimal(string: s)) - XCTAssertEqual(Decimal(d).description, try XCTUnwrap(Decimal(string: s)).description) - } - } - - func test_initExactly() { - // This really requires some tests using a BinaryInteger of bitwidth > 128 to test failures. - let d1 = Decimal(exactly: UInt64.max) - XCTAssertNotNil(d1) - XCTAssertEqual(d1?.description, UInt64.max.description) - XCTAssertEqual(d1?._length, 4) - - let d2 = Decimal(exactly: Int64.min) - XCTAssertNotNil(d2) - XCTAssertEqual(d2?.description, Int64.min.description) - XCTAssertEqual(d2?._length, 4) - - let d3 = Decimal(exactly: Int64.max) - XCTAssertNotNil(d3) - XCTAssertEqual(d3?.description, Int64.max.description) - XCTAssertEqual(d3?._length, 4) - - let d4 = Decimal(exactly: Int32.min) - XCTAssertNotNil(d4) - XCTAssertEqual(d4?.description, Int32.min.description) - XCTAssertEqual(d4?._length, 2) - - let d5 = Decimal(exactly: Int32.max) - XCTAssertNotNil(d5) - XCTAssertEqual(d5?.description, Int32.max.description) - XCTAssertEqual(d5?._length, 2) - - let d6 = Decimal(exactly: 0) - XCTAssertNotNil(d6) - XCTAssertEqual(d6, Decimal.zero) - XCTAssertEqual(d6?.description, "0") - XCTAssertEqual(d6?._length, 0) - - let d7 = Decimal(exactly: 1) - XCTAssertNotNil(d7) - XCTAssertEqual(d7?.description, "1") - XCTAssertEqual(d7?._length, 1) - - let d8 = Decimal(exactly: -1) - XCTAssertNotNil(d8) - XCTAssertEqual(d8?.description, "-1") - XCTAssertEqual(d8?._length, 1) - } - -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestFileManager.swift b/Darwin/Foundation-swiftoverlay-Tests/TestFileManager.swift deleted file mode 100644 index 7733398651..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestFileManager.swift +++ /dev/null @@ -1,116 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation - -import XCTest - -class TestFileManager : XCTestCase { - func testReplaceItem() { - let fm = FileManager.default - - // Temporary directory - let dirPath = (NSTemporaryDirectory() as NSString).appendingPathComponent(NSUUID().uuidString) - try! fm.createDirectory(atPath: dirPath, withIntermediateDirectories: true, attributes: nil) - defer { try! FileManager.default.removeItem(atPath: dirPath) } - - let filePath = (dirPath as NSString).appendingPathComponent("temp_file") - try! "1".write(toFile: filePath, atomically: true, encoding: String.Encoding.utf8) - - let newItemPath = (dirPath as NSString).appendingPathComponent("temp_file_new") - try! "2".write(toFile: newItemPath, atomically: true, encoding: String.Encoding.utf8) - - let result = try! fm.replaceItemAt(URL(fileURLWithPath:filePath, isDirectory:false), withItemAt:URL(fileURLWithPath:newItemPath, isDirectory:false)) - XCTAssertEqual(result!.path, filePath) - - let fromDisk = try! String(contentsOf: URL(fileURLWithPath:filePath, isDirectory:false), encoding: String.Encoding.utf8) - XCTAssertEqual(fromDisk, "2") - - } - - func testReplaceItem_error() { - let fm = FileManager.default - - // Temporary directory - let dirPath = (NSTemporaryDirectory() as NSString).appendingPathComponent(NSUUID().uuidString) - try! fm.createDirectory(atPath: dirPath, withIntermediateDirectories: true, attributes: nil) - defer { try! FileManager.default.removeItem(atPath: dirPath) } - - let filePath = (dirPath as NSString).appendingPathComponent("temp_file") - try! "1".write(toFile: filePath, atomically: true, encoding: String.Encoding.utf8) - - let newItemPath = (dirPath as NSString).appendingPathComponent("temp_file_new") - // Don't write the file. - - var threw = false - do { - let _ = try fm.replaceItemAt(URL(fileURLWithPath:filePath, isDirectory:false), withItemAt:URL(fileURLWithPath:newItemPath, isDirectory:false)) - } catch { - threw = true - } - XCTAssertTrue(threw, "Should have thrown") - - } - - func testDirectoryEnumerator_error() { - let fm = FileManager.default - let nonexistentURL = URL(fileURLWithPath: "\(NSTemporaryDirectory())/nonexistent") - - var invoked = false - let e = fm.enumerator(at: nonexistentURL, includingPropertiesForKeys: []) { (url, err) in - invoked = true - XCTAssertEqual(nonexistentURL, url) - XCTAssertEqual((err as NSError).code, NSFileReadNoSuchFileError) - return true - } - - let url = e?.nextObject() - XCTAssertTrue(invoked) - XCTAssertTrue(url == nil) - - } - - func testDirectoryEnumerator_error_noHandler() { - let fm = FileManager.default - let nonexistentURL = URL(fileURLWithPath: "\(NSTemporaryDirectory())/nonexistent") - - let e = fm.enumerator(at: nonexistentURL, includingPropertiesForKeys: []) - let url = e?.nextObject() - XCTAssertTrue(url == nil) - - } - - func testDirectoryEnumerator_simple() { - let fm = FileManager.default - let dirPath = (NSTemporaryDirectory() as NSString).appendingPathComponent(NSUUID().uuidString) - try! fm.createDirectory(atPath: dirPath, withIntermediateDirectories: true, attributes: nil) - defer { try! FileManager.default.removeItem(atPath: dirPath) } - - let item1 = URL(fileURLWithPath: "\(dirPath)/1", isDirectory: false) - let item2 = URL(fileURLWithPath: "\(dirPath)/2", isDirectory: false) - - try! Data().write(to: item1) - try! Data().write(to: item2) - - let e = fm.enumerator(at: URL(fileURLWithPath: dirPath, isDirectory: true), includingPropertiesForKeys: []) - let result1 = e?.nextObject() - let result2 = e?.nextObject() - let result3 = e?.nextObject() - - // Avoid potential symlink discrepancy between the result and the original URL - XCTAssertEqual((result1! as! URL).lastPathComponent, item1.lastPathComponent) - XCTAssertEqual((result2! as! URL).lastPathComponent, item2.lastPathComponent) - XCTAssertTrue(result3 == nil) - - } - -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestIndexPath.swift b/Darwin/Foundation-swiftoverlay-Tests/TestIndexPath.swift deleted file mode 100644 index fc36977fda..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestIndexPath.swift +++ /dev/null @@ -1,737 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -class TestIndexPath: XCTestCase { - func testEmpty() { - let ip = IndexPath() - XCTAssertEqual(ip.count, 0) - } - - func testSingleIndex() { - let ip = IndexPath(index: 1) - XCTAssertEqual(ip.count, 1) - XCTAssertEqual(ip[0], 1) - - let highValueIp = IndexPath(index: .max) - XCTAssertEqual(highValueIp.count, 1) - XCTAssertEqual(highValueIp[0], .max) - - let lowValueIp = IndexPath(index: .min) - XCTAssertEqual(lowValueIp.count, 1) - XCTAssertEqual(lowValueIp[0], .min) - } - - func testTwoIndexes() { - let ip = IndexPath(indexes: [0, 1]) - XCTAssertEqual(ip.count, 2) - XCTAssertEqual(ip[0], 0) - XCTAssertEqual(ip[1], 1) - } - - func testManyIndexes() { - let ip = IndexPath(indexes: [0, 1, 2, 3, 4]) - XCTAssertEqual(ip.count, 5) - XCTAssertEqual(ip[0], 0) - XCTAssertEqual(ip[1], 1) - XCTAssertEqual(ip[2], 2) - XCTAssertEqual(ip[3], 3) - XCTAssertEqual(ip[4], 4) - } - - func testCreateFromSequence() { - let seq = repeatElement(5, count: 3) - let ip = IndexPath(indexes: seq) - XCTAssertEqual(ip.count, 3) - XCTAssertEqual(ip[0], 5) - XCTAssertEqual(ip[1], 5) - XCTAssertEqual(ip[2], 5) - } - - func testCreateFromLiteral() { - let ip: IndexPath = [1, 2, 3, 4] - XCTAssertEqual(ip.count, 4) - XCTAssertEqual(ip[0], 1) - XCTAssertEqual(ip[1], 2) - XCTAssertEqual(ip[2], 3) - XCTAssertEqual(ip[3], 4) - } - - func testDropLast() { - let ip: IndexPath = [1, 2, 3, 4] - let ip2 = ip.dropLast() - XCTAssertEqual(ip2.count, 3) - XCTAssertEqual(ip2[0], 1) - XCTAssertEqual(ip2[1], 2) - XCTAssertEqual(ip2[2], 3) - } - - func testDropLastFromEmpty() { - let ip: IndexPath = [] - let ip2 = ip.dropLast() - XCTAssertEqual(ip2.count, 0) - } - - func testDropLastFromSingle() { - let ip: IndexPath = [1] - let ip2 = ip.dropLast() - XCTAssertEqual(ip2.count, 0) - } - - func testDropLastFromPair() { - let ip: IndexPath = [1, 2] - let ip2 = ip.dropLast() - XCTAssertEqual(ip2.count, 1) - XCTAssertEqual(ip2[0], 1) - } - - func testDropLastFromTriple() { - let ip: IndexPath = [1, 2, 3] - let ip2 = ip.dropLast() - XCTAssertEqual(ip2.count, 2) - XCTAssertEqual(ip2[0], 1) - XCTAssertEqual(ip2[1], 2) - } - - func testStartEndIndex() { - let ip: IndexPath = [1, 2, 3, 4] - XCTAssertEqual(ip.startIndex, 0) - XCTAssertEqual(ip.endIndex, ip.count) - } - - func testIterator() { - let ip: IndexPath = [1, 2, 3, 4] - var iter = ip.makeIterator() - var sum = 0 - while let index = iter.next() { - sum += index - } - XCTAssertEqual(sum, 1 + 2 + 3 + 4) - } - - func testIndexing() { - let ip: IndexPath = [1, 2, 3, 4] - XCTAssertEqual(ip.index(before: 1), 0) - XCTAssertEqual(ip.index(before: 0), -1) // beyond range! - XCTAssertEqual(ip.index(after: 1), 2) - XCTAssertEqual(ip.index(after: 4), 5) // beyond range! - } - - func testCompare() { - let ip1: IndexPath = [1, 2] - let ip2: IndexPath = [3, 4] - let ip3: IndexPath = [5, 1] - let ip4: IndexPath = [1, 1, 1] - let ip5: IndexPath = [1, 1, 9] - - XCTAssertEqual(ip1.compare(ip1), ComparisonResult.orderedSame) - XCTAssertEqual(ip1 < ip1, false) - XCTAssertEqual(ip1 <= ip1, true) - XCTAssertEqual(ip1 == ip1, true) - XCTAssertEqual(ip1 >= ip1, true) - XCTAssertEqual(ip1 > ip1, false) - - XCTAssertEqual(ip1.compare(ip2), ComparisonResult.orderedAscending) - XCTAssertEqual(ip1 < ip2, true) - XCTAssertEqual(ip1 <= ip2, true) - XCTAssertEqual(ip1 == ip2, false) - XCTAssertEqual(ip1 >= ip2, false) - XCTAssertEqual(ip1 > ip2, false) - - XCTAssertEqual(ip1.compare(ip3), ComparisonResult.orderedAscending) - XCTAssertEqual(ip1 < ip3, true) - XCTAssertEqual(ip1 <= ip3, true) - XCTAssertEqual(ip1 == ip3, false) - XCTAssertEqual(ip1 >= ip3, false) - XCTAssertEqual(ip1 > ip3, false) - - XCTAssertEqual(ip1.compare(ip4), ComparisonResult.orderedDescending) - XCTAssertEqual(ip1 < ip4, false) - XCTAssertEqual(ip1 <= ip4, false) - XCTAssertEqual(ip1 == ip4, false) - XCTAssertEqual(ip1 >= ip4, true) - XCTAssertEqual(ip1 > ip4, true) - - XCTAssertEqual(ip1.compare(ip5), ComparisonResult.orderedDescending) - XCTAssertEqual(ip1 < ip5, false) - XCTAssertEqual(ip1 <= ip5, false) - XCTAssertEqual(ip1 == ip5, false) - XCTAssertEqual(ip1 >= ip5, true) - XCTAssertEqual(ip1 > ip5, true) - - XCTAssertEqual(ip2.compare(ip1), ComparisonResult.orderedDescending) - XCTAssertEqual(ip2 < ip1, false) - XCTAssertEqual(ip2 <= ip1, false) - XCTAssertEqual(ip2 == ip1, false) - XCTAssertEqual(ip2 >= ip1, true) - XCTAssertEqual(ip2 > ip1, true) - - XCTAssertEqual(ip2.compare(ip2), ComparisonResult.orderedSame) - XCTAssertEqual(ip2 < ip2, false) - XCTAssertEqual(ip2 <= ip2, true) - XCTAssertEqual(ip2 == ip2, true) - XCTAssertEqual(ip2 >= ip2, true) - XCTAssertEqual(ip2 > ip2, false) - - XCTAssertEqual(ip2.compare(ip3), ComparisonResult.orderedAscending) - XCTAssertEqual(ip2 < ip3, true) - XCTAssertEqual(ip2 <= ip3, true) - XCTAssertEqual(ip2 == ip3, false) - XCTAssertEqual(ip2 >= ip3, false) - XCTAssertEqual(ip2 > ip3, false) - - XCTAssertEqual(ip2.compare(ip4), ComparisonResult.orderedDescending) - XCTAssertEqual(ip2.compare(ip5), ComparisonResult.orderedDescending) - XCTAssertEqual(ip3.compare(ip1), ComparisonResult.orderedDescending) - XCTAssertEqual(ip3.compare(ip2), ComparisonResult.orderedDescending) - XCTAssertEqual(ip3.compare(ip3), ComparisonResult.orderedSame) - XCTAssertEqual(ip3.compare(ip4), ComparisonResult.orderedDescending) - XCTAssertEqual(ip3.compare(ip5), ComparisonResult.orderedDescending) - XCTAssertEqual(ip4.compare(ip1), ComparisonResult.orderedAscending) - XCTAssertEqual(ip4.compare(ip2), ComparisonResult.orderedAscending) - XCTAssertEqual(ip4.compare(ip3), ComparisonResult.orderedAscending) - XCTAssertEqual(ip4.compare(ip4), ComparisonResult.orderedSame) - XCTAssertEqual(ip4.compare(ip5), ComparisonResult.orderedAscending) - XCTAssertEqual(ip5.compare(ip1), ComparisonResult.orderedAscending) - XCTAssertEqual(ip5.compare(ip2), ComparisonResult.orderedAscending) - XCTAssertEqual(ip5.compare(ip3), ComparisonResult.orderedAscending) - XCTAssertEqual(ip5.compare(ip4), ComparisonResult.orderedDescending) - XCTAssertEqual(ip5.compare(ip5), ComparisonResult.orderedSame) - - let ip6: IndexPath = [1, 1] - XCTAssertEqual(ip6.compare(ip5), ComparisonResult.orderedAscending) - XCTAssertEqual(ip5.compare(ip6), ComparisonResult.orderedDescending) - } - - func testHashing() { - guard #available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) else { return } - let samples: [IndexPath] = [ - [], - [1], - [2], - [Int.max], - [1, 1], - [2, 1], - [1, 2], - [1, 1, 1], - [2, 1, 1], - [1, 2, 1], - [1, 1, 2], - [Int.max, Int.max, Int.max], - ] - checkHashable(samples, equalityOracle: { $0 == $1 }) - - // this should not cause an overflow crash - _ = IndexPath(indexes: [Int.max >> 8, 2, Int.max >> 36]).hashValue - } - - func testEquality() { - let ip1: IndexPath = [1, 1] - let ip2: IndexPath = [1, 1] - let ip3: IndexPath = [1, 1, 1] - let ip4: IndexPath = [] - let ip5: IndexPath = [1] - - XCTAssertTrue(ip1 == ip2) - XCTAssertFalse(ip1 == ip3) - XCTAssertFalse(ip1 == ip4) - XCTAssertFalse(ip4 == ip1) - XCTAssertFalse(ip5 == ip1) - XCTAssertFalse(ip5 == ip4) - XCTAssertTrue(ip4 == ip4) - XCTAssertTrue(ip5 == ip5) - } - - func testSubscripting() { - var ip1: IndexPath = [1] - var ip2: IndexPath = [1, 2] - var ip3: IndexPath = [1, 2, 3] - - XCTAssertEqual(ip1[0], 1) - - XCTAssertEqual(ip2[0], 1) - XCTAssertEqual(ip2[1], 2) - - XCTAssertEqual(ip3[0], 1) - XCTAssertEqual(ip3[1], 2) - XCTAssertEqual(ip3[2], 3) - - ip1[0] = 2 - XCTAssertEqual(ip1[0], 2) - - ip2[0] = 2 - ip2[1] = 3 - XCTAssertEqual(ip2[0], 2) - XCTAssertEqual(ip2[1], 3) - - ip3[0] = 2 - ip3[1] = 3 - ip3[2] = 4 - XCTAssertEqual(ip3[0], 2) - XCTAssertEqual(ip3[1], 3) - XCTAssertEqual(ip3[2], 4) - - let ip4 = ip3[0..<2] - XCTAssertEqual(ip4.count, 2) - XCTAssertEqual(ip4[0], 2) - XCTAssertEqual(ip4[1], 3) - } - - func testAppending() { - var ip : IndexPath = [1, 2, 3, 4] - let ip2 = IndexPath(indexes: [5, 6, 7]) - - ip.append(ip2) - - XCTAssertEqual(ip.count, 7) - XCTAssertEqual(ip[0], 1) - XCTAssertEqual(ip[6], 7) - - let ip3 = ip.appending(IndexPath(indexes: [8, 9])) - XCTAssertEqual(ip3.count, 9) - XCTAssertEqual(ip3[7], 8) - XCTAssertEqual(ip3[8], 9) - - let ip4 = ip3.appending([10, 11]) - XCTAssertEqual(ip4.count, 11) - XCTAssertEqual(ip4[9], 10) - XCTAssertEqual(ip4[10], 11) - - let ip5 = ip.appending(8) - XCTAssertEqual(ip5.count, 8) - XCTAssertEqual(ip5[7], 8) - } - - func testAppendEmpty() { - var ip: IndexPath = [] - ip.append(1) - - XCTAssertEqual(ip.count, 1) - XCTAssertEqual(ip[0], 1) - - ip.append(2) - XCTAssertEqual(ip.count, 2) - XCTAssertEqual(ip[0], 1) - XCTAssertEqual(ip[1], 2) - - ip.append(3) - XCTAssertEqual(ip.count, 3) - XCTAssertEqual(ip[0], 1) - XCTAssertEqual(ip[1], 2) - XCTAssertEqual(ip[2], 3) - - ip.append(4) - XCTAssertEqual(ip.count, 4) - XCTAssertEqual(ip[0], 1) - XCTAssertEqual(ip[1], 2) - XCTAssertEqual(ip[2], 3) - XCTAssertEqual(ip[3], 4) - } - - func testAppendEmptyIndexPath() { - var ip: IndexPath = [] - ip.append(IndexPath(indexes: [])) - - XCTAssertEqual(ip.count, 0) - } - - func testAppendManyIndexPath() { - var ip: IndexPath = [] - ip.append(IndexPath(indexes: [1, 2, 3])) - - XCTAssertEqual(ip.count, 3) - XCTAssertEqual(ip[0], 1) - XCTAssertEqual(ip[1], 2) - XCTAssertEqual(ip[2], 3) - } - - func testAppendEmptyIndexPathToSingle() { - var ip: IndexPath = [1] - ip.append(IndexPath(indexes: [])) - - XCTAssertEqual(ip.count, 1) - XCTAssertEqual(ip[0], 1) - } - - func testAppendSingleIndexPath() { - var ip: IndexPath = [] - ip.append(IndexPath(indexes: [1])) - - XCTAssertEqual(ip.count, 1) - XCTAssertEqual(ip[0], 1) - } - - func testAppendSingleIndexPathToSingle() { - var ip: IndexPath = [1] - ip.append(IndexPath(indexes: [1])) - - XCTAssertEqual(ip.count, 2) - XCTAssertEqual(ip[0], 1) - XCTAssertEqual(ip[1], 1) - } - - func testAppendPairIndexPath() { - var ip: IndexPath = [] - ip.append(IndexPath(indexes: [1, 2])) - - XCTAssertEqual(ip.count, 2) - XCTAssertEqual(ip[0], 1) - XCTAssertEqual(ip[1], 2) - } - - func testAppendManyIndexPathToEmpty() { - var ip: IndexPath = [] - ip.append(IndexPath(indexes: [1, 2, 3])) - - XCTAssertEqual(ip.count, 3) - XCTAssertEqual(ip[0], 1) - XCTAssertEqual(ip[1], 2) - XCTAssertEqual(ip[2], 3) - } - - func testAppendByOperator() { - let ip1: IndexPath = [] - let ip2: IndexPath = [] - - let ip3 = ip1 + ip2 - XCTAssertEqual(ip3.count, 0) - - let ip4: IndexPath = [1] - let ip5: IndexPath = [2] - - let ip6 = ip4 + ip5 - XCTAssertEqual(ip6.count, 2) - XCTAssertEqual(ip6[0], 1) - XCTAssertEqual(ip6[1], 2) - - var ip7: IndexPath = [] - ip7 += ip6 - XCTAssertEqual(ip7.count, 2) - XCTAssertEqual(ip7[0], 1) - XCTAssertEqual(ip7[1], 2) - } - - func testAppendArray() { - var ip: IndexPath = [1, 2, 3, 4] - let indexes = [5, 6, 7] - - ip.append(indexes) - - XCTAssertEqual(ip.count, 7) - XCTAssertEqual(ip[0], 1) - XCTAssertEqual(ip[6], 7) - } - - func testRanges() { - let ip1 = IndexPath(indexes: [1, 2, 3]) - let ip2 = IndexPath(indexes: [6, 7, 8]) - - // Replace the whole range - var mutateMe = ip1 - mutateMe[0..<3] = ip2 - XCTAssertEqual(mutateMe, ip2) - - // Insert at the beginning - mutateMe = ip1 - mutateMe[0..<0] = ip2 - XCTAssertEqual(mutateMe, IndexPath(indexes: [6, 7, 8, 1, 2, 3])) - - // Insert at the end - mutateMe = ip1 - mutateMe[3..<3] = ip2 - XCTAssertEqual(mutateMe, IndexPath(indexes: [1, 2, 3, 6, 7, 8])) - - // Insert in middle - mutateMe = ip1 - mutateMe[2..<2] = ip2 - XCTAssertEqual(mutateMe, IndexPath(indexes: [1, 2, 6, 7, 8, 3])) - } - - func testRangeFromEmpty() { - let ip1 = IndexPath() - let ip2 = ip1[0..<0] - XCTAssertEqual(ip2.count, 0) - } - - func testRangeFromSingle() { - let ip1 = IndexPath(indexes: [1]) - let ip2 = ip1[0..<0] - XCTAssertEqual(ip2.count, 0) - let ip3 = ip1[0..<1] - XCTAssertEqual(ip3.count, 1) - XCTAssertEqual(ip3[0], 1) - } - - func testRangeFromPair() { - let ip1 = IndexPath(indexes: [1, 2]) - let ip2 = ip1[0..<0] - XCTAssertEqual(ip2.count, 0) - let ip3 = ip1[0..<1] - XCTAssertEqual(ip3.count, 1) - XCTAssertEqual(ip3[0], 1) - let ip4 = ip1[1..<1] - XCTAssertEqual(ip4.count, 0) - let ip5 = ip1[0..<2] - XCTAssertEqual(ip5.count, 2) - XCTAssertEqual(ip5[0], 1) - XCTAssertEqual(ip5[1], 2) - let ip6 = ip1[1..<2] - XCTAssertEqual(ip6.count, 1) - XCTAssertEqual(ip6[0], 2) - let ip7 = ip1[2..<2] - XCTAssertEqual(ip7.count, 0) - } - - func testRangeFromMany() { - let ip1 = IndexPath(indexes: [1, 2, 3]) - let ip2 = ip1[0..<0] - XCTAssertEqual(ip2.count, 0) - let ip3 = ip1[0..<1] - XCTAssertEqual(ip3.count, 1) - let ip4 = ip1[0..<2] - XCTAssertEqual(ip4.count, 2) - let ip5 = ip1[0..<3] - XCTAssertEqual(ip5.count, 3) - } - - func testRangeReplacementSingle() { - var ip1 = IndexPath(indexes: [1]) - ip1[0..<1] = IndexPath(indexes: [2]) - XCTAssertEqual(ip1[0], 2) - - ip1[0..<1] = IndexPath(indexes: []) - XCTAssertEqual(ip1.count, 0) - } - - func testRangeReplacementPair() { - var ip1 = IndexPath(indexes: [1, 2]) - ip1[0..<1] = IndexPath(indexes: [2, 3]) - XCTAssertEqual(ip1.count, 3) - XCTAssertEqual(ip1[0], 2) - XCTAssertEqual(ip1[1], 3) - XCTAssertEqual(ip1[2], 2) - - ip1[0..<1] = IndexPath(indexes: []) - XCTAssertEqual(ip1.count, 2) - } - - func testMoreRanges() { - var ip = IndexPath(indexes: [1, 2, 3]) - let ip2 = IndexPath(indexes: [5, 6, 7, 8, 9, 10]) - - ip[1..<2] = ip2 - XCTAssertEqual(ip, IndexPath(indexes: [1, 5, 6, 7, 8, 9, 10, 3])) - } - - func testIteration() { - let ip = IndexPath(indexes: [1, 2, 3]) - - var count = 0 - for _ in ip { - count += 1 - } - - XCTAssertEqual(3, count) - } - - func testDescription() { - let ip1: IndexPath = [] - let ip2: IndexPath = [1] - let ip3: IndexPath = [1, 2] - let ip4: IndexPath = [1, 2, 3] - - XCTAssertEqual(ip1.description, "[]") - XCTAssertEqual(ip2.description, "[1]") - XCTAssertEqual(ip3.description, "[1, 2]") - XCTAssertEqual(ip4.description, "[1, 2, 3]") - - XCTAssertEqual(ip1.debugDescription, ip1.description) - XCTAssertEqual(ip2.debugDescription, ip2.description) - XCTAssertEqual(ip3.debugDescription, ip3.description) - XCTAssertEqual(ip4.debugDescription, ip4.description) - } - - func testBridgeToObjC() { - let ip1: IndexPath = [] - let ip2: IndexPath = [1] - let ip3: IndexPath = [1, 2] - let ip4: IndexPath = [1, 2, 3] - - let nsip1 = ip1._bridgeToObjectiveC() - let nsip2 = ip2._bridgeToObjectiveC() - let nsip3 = ip3._bridgeToObjectiveC() - let nsip4 = ip4._bridgeToObjectiveC() - - XCTAssertEqual(nsip1.length, 0) - XCTAssertEqual(nsip2.length, 1) - XCTAssertEqual(nsip3.length, 2) - XCTAssertEqual(nsip4.length, 3) - } - - func testForceBridgeFromObjC() { - let nsip1 = NSIndexPath() - let nsip2 = NSIndexPath(index: 1) - let nsip3 = [1, 2].withUnsafeBufferPointer { (buffer: UnsafeBufferPointer) -> NSIndexPath in - return NSIndexPath(indexes: buffer.baseAddress, length: buffer.count) - } - let nsip4 = [1, 2, 3].withUnsafeBufferPointer { (buffer: UnsafeBufferPointer) -> NSIndexPath in - return NSIndexPath(indexes: buffer.baseAddress, length: buffer.count) - } - - var ip1: IndexPath? = IndexPath() - IndexPath._forceBridgeFromObjectiveC(nsip1, result: &ip1) - XCTAssertNotNil(ip1) - XCTAssertEqual(ip1!.count, 0) - - var ip2: IndexPath? = IndexPath() - IndexPath._forceBridgeFromObjectiveC(nsip2, result: &ip2) - XCTAssertNotNil(ip2) - XCTAssertEqual(ip2!.count, 1) - XCTAssertEqual(ip2![0], 1) - - var ip3: IndexPath? = IndexPath() - IndexPath._forceBridgeFromObjectiveC(nsip3, result: &ip3) - XCTAssertNotNil(ip3) - XCTAssertEqual(ip3!.count, 2) - XCTAssertEqual(ip3![0], 1) - XCTAssertEqual(ip3![1], 2) - - var ip4: IndexPath? = IndexPath() - IndexPath._forceBridgeFromObjectiveC(nsip4, result: &ip4) - XCTAssertNotNil(ip4) - XCTAssertEqual(ip4!.count, 3) - XCTAssertEqual(ip4![0], 1) - XCTAssertEqual(ip4![1], 2) - XCTAssertEqual(ip4![2], 3) - } - - func testConditionalBridgeFromObjC() { - let nsip1 = NSIndexPath() - let nsip2 = NSIndexPath(index: 1) - let nsip3 = [1, 2].withUnsafeBufferPointer { (buffer: UnsafeBufferPointer) -> NSIndexPath in - return NSIndexPath(indexes: buffer.baseAddress, length: buffer.count) - } - let nsip4 = [1, 2, 3].withUnsafeBufferPointer { (buffer: UnsafeBufferPointer) -> NSIndexPath in - return NSIndexPath(indexes: buffer.baseAddress, length: buffer.count) - } - - var ip1: IndexPath? = IndexPath() - XCTAssertTrue(IndexPath._conditionallyBridgeFromObjectiveC(nsip1, result: &ip1)) - XCTAssertNotNil(ip1) - XCTAssertEqual(ip1!.count, 0) - - var ip2: IndexPath? = IndexPath() - XCTAssertTrue(IndexPath._conditionallyBridgeFromObjectiveC(nsip2, result: &ip2)) - XCTAssertNotNil(ip2) - XCTAssertEqual(ip2!.count, 1) - XCTAssertEqual(ip2![0], 1) - - var ip3: IndexPath? = IndexPath() - XCTAssertTrue(IndexPath._conditionallyBridgeFromObjectiveC(nsip3, result: &ip3)) - XCTAssertNotNil(ip3) - XCTAssertEqual(ip3!.count, 2) - XCTAssertEqual(ip3![0], 1) - XCTAssertEqual(ip3![1], 2) - - var ip4: IndexPath? = IndexPath() - XCTAssertTrue(IndexPath._conditionallyBridgeFromObjectiveC(nsip4, result: &ip4)) - XCTAssertNotNil(ip4) - XCTAssertEqual(ip4!.count, 3) - XCTAssertEqual(ip4![0], 1) - XCTAssertEqual(ip4![1], 2) - XCTAssertEqual(ip4![2], 3) - } - - func testUnconditionalBridgeFromObjC() { - let nsip1 = NSIndexPath() - let nsip2 = NSIndexPath(index: 1) - let nsip3 = [1, 2].withUnsafeBufferPointer { (buffer: UnsafeBufferPointer) -> NSIndexPath in - return NSIndexPath(indexes: buffer.baseAddress, length: buffer.count) - } - let nsip4 = [1, 2, 3].withUnsafeBufferPointer { (buffer: UnsafeBufferPointer) -> NSIndexPath in - return NSIndexPath(indexes: buffer.baseAddress, length: buffer.count) - } - - let ip1: IndexPath = IndexPath._unconditionallyBridgeFromObjectiveC(nsip1) - XCTAssertEqual(ip1.count, 0) - - var ip2: IndexPath = IndexPath._unconditionallyBridgeFromObjectiveC(nsip2) - XCTAssertEqual(ip2.count, 1) - XCTAssertEqual(ip2[0], 1) - - var ip3: IndexPath = IndexPath._unconditionallyBridgeFromObjectiveC(nsip3) - XCTAssertEqual(ip3.count, 2) - XCTAssertEqual(ip3[0], 1) - XCTAssertEqual(ip3[1], 2) - - var ip4: IndexPath = IndexPath._unconditionallyBridgeFromObjectiveC(nsip4) - XCTAssertEqual(ip4.count, 3) - XCTAssertEqual(ip4[0], 1) - XCTAssertEqual(ip4[1], 2) - XCTAssertEqual(ip4[2], 3) - } - - func testObjcBridgeType() { - XCTAssertTrue(IndexPath._getObjectiveCType() == NSIndexPath.self) - } - - func test_AnyHashableContainingIndexPath() { - let values: [IndexPath] = [ - IndexPath(indexes: [1, 2]), - IndexPath(indexes: [1, 2, 3]), - IndexPath(indexes: [1, 2, 3]), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(IndexPath.self, type(of: anyHashables[0].base)) - expectEqual(IndexPath.self, type(of: anyHashables[1].base)) - expectEqual(IndexPath.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableCreatedFromNSIndexPath() { - let values: [NSIndexPath] = [ - NSIndexPath(index: 1), - NSIndexPath(index: 2), - NSIndexPath(index: 2), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(IndexPath.self, type(of: anyHashables[0].base)) - expectEqual(IndexPath.self, type(of: anyHashables[1].base)) - expectEqual(IndexPath.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_unconditionallyBridgeFromObjectiveC() { - XCTAssertEqual(IndexPath(), IndexPath._unconditionallyBridgeFromObjectiveC(nil)) - } - - func test_slice_1ary() { - let indexPath: IndexPath = [0] - let res = indexPath.dropFirst() - XCTAssertEqual(0, res.count) - - let slice = indexPath[1..<1] - XCTAssertEqual(0, slice.count) - } - - func test_dropFirst() { - var pth = IndexPath(indexes:[1,2,3,4]) - while !pth.isEmpty { - // this should not crash - pth = pth.dropFirst() - } - } -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestIndexSet.swift b/Darwin/Foundation-swiftoverlay-Tests/TestIndexSet.swift deleted file mode 100644 index 0bc53d4a40..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestIndexSet.swift +++ /dev/null @@ -1,840 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -class TestIndexSet : XCTestCase { - - func testEnumeration() { - let someIndexes = IndexSet(integersIn: 3...4) - let first = someIndexes.startIndex - let last = someIndexes.endIndex - - XCTAssertNotEqual(first, last) - - var count = 0 - var firstValue = 0 - var secondValue = 0 - for v in someIndexes { - if count == 0 { firstValue = v } - if count == 1 { secondValue = v } - count += 1 - } - - XCTAssertEqual(2, count) - XCTAssertEqual(3, firstValue) - XCTAssertEqual(4, secondValue) - } - - func testSubsequence() { - var someIndexes = IndexSet(integersIn: 1..<3) - someIndexes.insert(integersIn: 10..<20) - - let intersectingRange = someIndexes.indexRange(in: 5..<21) - XCTAssertFalse(intersectingRange.isEmpty) - - let sub = someIndexes[intersectingRange] - var count = 0 - for i in sub { - if count == 0 { - XCTAssertEqual(10, i) - } - if count == 9 { - XCTAssertEqual(19, i) - } - count += 1 - } - XCTAssertEqual(count, 10) - } - - func testIndexRange() { - var someIndexes = IndexSet(integersIn: 1..<3) - someIndexes.insert(integersIn: 10..<20) - - var r : Range - - r = someIndexes.indexRange(in: 1..<3) - XCTAssertEqual(1, someIndexes[r.lowerBound]) - XCTAssertEqual(10, someIndexes[r.upperBound]) - - r = someIndexes.indexRange(in: 0..<0) - XCTAssertEqual(r.lowerBound, r.upperBound) - - r = someIndexes.indexRange(in: 100..<201) - XCTAssertEqual(r.lowerBound, r.upperBound) - XCTAssertTrue(r.isEmpty) - - r = someIndexes.indexRange(in: 0..<100) - XCTAssertEqual(r.lowerBound, someIndexes.startIndex) - XCTAssertEqual(r.upperBound, someIndexes.endIndex) - - r = someIndexes.indexRange(in: 1..<11) - XCTAssertEqual(1, someIndexes[r.lowerBound]) - XCTAssertEqual(11, someIndexes[r.upperBound]) - - let empty = IndexSet() - XCTAssertTrue(empty.indexRange(in: 1..<3).isEmpty) - } - - func testMutation() { - var someIndexes = IndexSet(integersIn: 1..<3) - someIndexes.insert(3) - someIndexes.insert(4) - someIndexes.insert(5) - - someIndexes.insert(10) - someIndexes.insert(11) - - XCTAssertEqual(someIndexes.count, 7) - - someIndexes.remove(11) - - XCTAssertEqual(someIndexes.count, 6) - - someIndexes.insert(integersIn: 100...101) - XCTAssertEqual(8, someIndexes.count) - XCTAssertEqual(2, someIndexes.count(in: 100...101)) - - someIndexes.remove(integersIn: 100...101) - XCTAssertEqual(6, someIndexes.count) - XCTAssertEqual(0, someIndexes.count(in: 100...101)) - - someIndexes.insert(integersIn: 200..<202) - XCTAssertEqual(8, someIndexes.count) - XCTAssertEqual(2, someIndexes.count(in: 200..<202)) - - someIndexes.remove(integersIn: 200..<202) - XCTAssertEqual(6, someIndexes.count) - XCTAssertEqual(0, someIndexes.count(in: 200..<202)) - } - - func testContainsAndIntersects() { - let someIndexes = IndexSet(integersIn: 1..<10) - - XCTAssertTrue(someIndexes.contains(integersIn: 1..<10)) - XCTAssertTrue(someIndexes.contains(integersIn: 1...9)) - XCTAssertTrue(someIndexes.contains(integersIn: 2..<10)) - XCTAssertTrue(someIndexes.contains(integersIn: 2...9)) - XCTAssertTrue(someIndexes.contains(integersIn: 1..<9)) - XCTAssertTrue(someIndexes.contains(integersIn: 1...8)) - - XCTAssertFalse(someIndexes.contains(integersIn: 0..<10)) - XCTAssertFalse(someIndexes.contains(integersIn: 0...9)) - XCTAssertFalse(someIndexes.contains(integersIn: 2..<11)) - XCTAssertFalse(someIndexes.contains(integersIn: 2...10)) - XCTAssertFalse(someIndexes.contains(integersIn: 0..<9)) - XCTAssertFalse(someIndexes.contains(integersIn: 0...8)) - - XCTAssertTrue(someIndexes.intersects(integersIn: 1..<10)) - XCTAssertTrue(someIndexes.intersects(integersIn: 1...9)) - XCTAssertTrue(someIndexes.intersects(integersIn: 2..<10)) - XCTAssertTrue(someIndexes.intersects(integersIn: 2...9)) - XCTAssertTrue(someIndexes.intersects(integersIn: 1..<9)) - XCTAssertTrue(someIndexes.intersects(integersIn: 1...8)) - - XCTAssertTrue(someIndexes.intersects(integersIn: 0..<10)) - XCTAssertTrue(someIndexes.intersects(integersIn: 0...9)) - XCTAssertTrue(someIndexes.intersects(integersIn: 2..<11)) - XCTAssertTrue(someIndexes.intersects(integersIn: 2...10)) - XCTAssertTrue(someIndexes.intersects(integersIn: 0..<9)) - XCTAssertTrue(someIndexes.intersects(integersIn: 0...8)) - - XCTAssertFalse(someIndexes.intersects(integersIn: 0..<0)) - XCTAssertFalse(someIndexes.intersects(integersIn: 10...12)) - XCTAssertFalse(someIndexes.intersects(integersIn: 10..<12)) - } - - func testIteration() { - var someIndexes = IndexSet(integersIn: 1..<5) - someIndexes.insert(integersIn: 8..<11) - someIndexes.insert(15) - - let start = someIndexes.startIndex - let end = someIndexes.endIndex - - // Count forwards - var i = start - var count = 0 - while i != end { - count += 1 - i = someIndexes.index(after: i) - } - XCTAssertEqual(8, count) - - // Count backwards - i = end - count = 0 - while i != start { - i = someIndexes.index(before: i) - count += 1 - } - XCTAssertEqual(8, count) - - // Count using a for loop - count = 0 - for _ in someIndexes { - count += 1 - } - XCTAssertEqual(8, count) - - // Go the other way - count = 0 - for _ in someIndexes.reversed() { - count += 1 - } - XCTAssertEqual(8, count) - } - - func testRangeIteration() { - var someIndexes = IndexSet(integersIn: 1..<5) - someIndexes.insert(integersIn: 8..<11) - someIndexes.insert(15) - - var count = 0 - for r in someIndexes.rangeView { - // print("\(r)") - count += 1 - if count == 3 { - XCTAssertEqual(r, 15..<16) - } - } - XCTAssertEqual(3, count) - - // Backwards - count = 0 - for r in someIndexes.rangeView.reversed() { - // print("\(r)") - count += 1 - if count == 3 { - XCTAssertEqual(r, 1..<5) - } - } - XCTAssertEqual(3, count) - } - - func testSubrangeIteration() { - func XCTAssertRanges(_ ranges: [Range], in view: IndexSet.RangeView) { - XCTAssertEqual(ranges.count, view.count) - - for i in 0 ..< min(ranges.count, view.count) { - XCTAssertEqual(ranges[i], view[i]) - } - } - - // Inclusive ranges for test: - // 2-4, 8-10, 15-19, 30-39, 60-79 - var indexes = IndexSet() - indexes.insert(integersIn: 2..<5) - indexes.insert(integersIn: 8...10) - indexes.insert(integersIn: 15..<20) - indexes.insert(integersIn: 30...39) - indexes.insert(integersIn: 60..<80) - - // Empty ranges should yield no results: - XCTAssertRanges([], in: indexes.rangeView(of: 0..<0)) - - // Ranges below contained indexes should yield no results: - XCTAssertRanges([], in: indexes.rangeView(of: 0...1)) - - // Ranges starting below first index but overlapping should yield a result: - XCTAssertRanges([2..<3], in: indexes.rangeView(of: 0...2)) - - // Ranges starting below first index but enveloping a range should yield a result: - XCTAssertRanges([2..<5], in: indexes.rangeView(of: 0...6)) - - // Ranges within subranges should yield a result: - XCTAssertRanges([2..<5], in: indexes.rangeView(of: 2...4)) - XCTAssertRanges([3..<5], in: indexes.rangeView(of: 3...4)) - XCTAssertRanges([3..<4], in: indexes.rangeView(of: 3..<4)) - - // Ranges starting within subranges and going over the end should yield a result: - XCTAssertRanges([3..<5], in: indexes.rangeView(of: 3...6)) - - // Ranges not matching any indexes should yield no results: - XCTAssertRanges([], in: indexes.rangeView(of: 5...6)) - XCTAssertRanges([], in: indexes.rangeView(of: 5..<8)) - - // Same as above -- overlapping with a range of indexes should slice it appropriately: - XCTAssertRanges([8..<9], in: indexes.rangeView(of: 6...8)) - XCTAssertRanges([8..<11], in: indexes.rangeView(of: 8...10)) - XCTAssertRanges([8..<11], in: indexes.rangeView(of: 8...13)) - - XCTAssertRanges([2..<5, 8..<10], in: indexes.rangeView(of: 0...9)) - XCTAssertRanges([2..<5, 8..<11], in: indexes.rangeView(of: 0...12)) - XCTAssertRanges([3..<5, 8..<11], in: indexes.rangeView(of: 3...14)) - - XCTAssertRanges([3..<5, 8..<11, 15..<18], in: indexes.rangeView(of: 3...17)) - XCTAssertRanges([3..<5, 8..<11, 15..<20], in: indexes.rangeView(of: 3...20)) - XCTAssertRanges([3..<5, 8..<11, 15..<20], in: indexes.rangeView(of: 3...21)) - - // Ranges inclusive of the end index should yield all of the contained ranges: - XCTAssertRanges([2..<5, 8..<11, 15..<20, 30..<40, 60..<80], in: indexes.rangeView(of: 0...80)) - XCTAssertRanges([2..<5, 8..<11, 15..<20, 30..<40, 60..<80], in: indexes.rangeView(of: 2..<80)) - XCTAssertRanges([2..<5, 8..<11, 15..<20, 30..<40, 60..<80], in: indexes.rangeView(of: 2...80)) - - // Ranges above the end index should yield no results: - XCTAssertRanges([], in: indexes.rangeView(of: 90..<90)) - XCTAssertRanges([], in: indexes.rangeView(of: 90...90)) - XCTAssertRanges([], in: indexes.rangeView(of: 90...100)) - } - - func testSlicing() { - var someIndexes = IndexSet(integersIn: 2..<5) - someIndexes.insert(integersIn: 8..<11) - someIndexes.insert(integersIn: 15..<20) - someIndexes.insert(integersIn: 30..<40) - someIndexes.insert(integersIn: 60..<80) - - var r : Range - - r = someIndexes.indexRange(in: 5..<25) - XCTAssertEqual(8, someIndexes[r.lowerBound]) - XCTAssertEqual(19, someIndexes[someIndexes.index(before: r.upperBound)]) - var count = 0 - for _ in someIndexes[r] { - count += 1 - } - - XCTAssertEqual(8, someIndexes.count(in: 5..<25)) - XCTAssertEqual(8, count) - - r = someIndexes.indexRange(in: 100...199) - XCTAssertTrue(r.isEmpty) - - let emptySlice = someIndexes[r] - XCTAssertEqual(0, emptySlice.count) - - let boundarySlice = someIndexes[someIndexes.indexRange(in: 2..<3)] - XCTAssertEqual(1, boundarySlice.count) - - let boundarySlice2 = someIndexes[someIndexes.indexRange(in: 79..<80)] - XCTAssertEqual(1, boundarySlice2.count) - - let largeSlice = someIndexes[someIndexes.indexRange(in: 0..<100000)] - XCTAssertEqual(someIndexes.count, largeSlice.count) - } - - func testEmptyIteration() { - var empty = IndexSet() - let start = empty.startIndex - let end = empty.endIndex - - XCTAssertEqual(start, end) - - var count = 0 - for _ in empty { - count += 1 - } - - XCTAssertEqual(count, 0) - - count = 0 - for _ in empty.rangeView { - count += 1 - } - - XCTAssertEqual(count, 0) - - empty.insert(5) - empty.remove(5) - - count = 0 - for _ in empty { - count += 1 - } - XCTAssertEqual(count, 0) - - count = 0 - for _ in empty.rangeView { - count += 1 - } - XCTAssertEqual(count, 0) - } - - func testSubsequences() { - var someIndexes = IndexSet(integersIn: 1..<5) - someIndexes.insert(integersIn: 8..<11) - someIndexes.insert(15) - - // Get a subsequence of this IndexSet - let range = someIndexes.indexRange(in: 4..<15) - let subSet = someIndexes[range] - - XCTAssertEqual(subSet.count, 4) - - // Iterate a subset - var count = 0 - for _ in subSet { - count += 1 - } - XCTAssertEqual(count, 4) - - // And in reverse - count = 0 - for _ in subSet.reversed() { - count += 1 - } - XCTAssertEqual(count, 4) - } - - func testFiltering() { - var someIndexes = IndexSet(integersIn: 1..<5) - someIndexes.insert(integersIn: 8..<11) - someIndexes.insert(15) - - // An array - let resultArray = someIndexes.filter { $0 % 2 == 0 } - XCTAssertEqual(resultArray.count, 4) - - let resultSet = someIndexes.filteredIndexSet { $0 % 2 == 0 } - XCTAssertEqual(resultSet.count, 4) - - let resultOutsideRange = someIndexes.filteredIndexSet(in: 20..<30, includeInteger: { _ in return true } ) - XCTAssertEqual(resultOutsideRange.count, 0) - - let resultInRange = someIndexes.filteredIndexSet(in: 0..<16, includeInteger: { _ in return true } ) - XCTAssertEqual(resultInRange.count, someIndexes.count) - } - - func testFilteringRanges() { - var someIndexes = IndexSet(integersIn: 1..<5) - someIndexes.insert(integersIn: 8..<11) - someIndexes.insert(15) - - let resultArray = someIndexes.rangeView.filter { $0.count > 1 } - XCTAssertEqual(resultArray.count, 2) - } - - func testShift() { - var someIndexes = IndexSet(integersIn: 1..<5) - someIndexes.insert(integersIn: 8..<11) - someIndexes.insert(15) - - let lastValue = someIndexes.last! - - someIndexes.shift(startingAt: 13, by: 1) - - // Count should not have changed - XCTAssertEqual(someIndexes.count, 8) - - // But the last value should have - XCTAssertEqual(lastValue + 1, someIndexes.last!) - - // Shift starting at something not in the set - someIndexes.shift(startingAt: 0, by: 1) - - // Count should not have changed, again - XCTAssertEqual(someIndexes.count, 8) - - // But the last value should have, again - XCTAssertEqual(lastValue + 2, someIndexes.last!) - } - - func testSymmetricDifference() { - var is1 : IndexSet - var is2 : IndexSet - var expected : IndexSet - - do { - is1 = IndexSet() - is1.insert(integersIn: 1..<3) - is1.insert(integersIn: 4..<11) - is1.insert(integersIn: 15..<21) - is1.insert(integersIn: 40..<51) - - is2 = IndexSet() - is2.insert(integersIn: 5..<18) - is2.insert(integersIn: 45..<61) - - expected = IndexSet() - expected.insert(integersIn: 1..<3) - expected.insert(4) - expected.insert(integersIn: 11..<15) - expected.insert(integersIn: 18..<21) - expected.insert(integersIn: 40..<45) - expected.insert(integersIn: 51..<61) - - XCTAssertEqual(expected, is1.symmetricDifference(is2)) - XCTAssertEqual(expected, is2.symmetricDifference(is1)) - } - - do { - is1 = IndexSet() - is1.insert(integersIn: 5..<18) - is1.insert(integersIn: 45..<61) - - is2 = IndexSet() - is2.insert(integersIn: 5..<18) - is2.insert(integersIn: 45..<61) - - expected = IndexSet() - XCTAssertEqual(expected, is1.symmetricDifference(is2)) - XCTAssertEqual(expected, is2.symmetricDifference(is1)) - } - - do { - is1 = IndexSet(integersIn: 1..<10) - is2 = IndexSet(integersIn: 20..<30) - - expected = IndexSet() - expected.insert(integersIn: 1..<10) - expected.insert(integersIn: 20..<30) - XCTAssertEqual(expected, is1.symmetricDifference(is2)) - XCTAssertEqual(expected, is2.symmetricDifference(is1)) - } - - do { - is1 = IndexSet(integersIn: 1..<10) - is2 = IndexSet(integersIn: 1..<11) - expected = IndexSet(integer: 10) - XCTAssertEqual(expected, is1.symmetricDifference(is2)) - XCTAssertEqual(expected, is2.symmetricDifference(is1)) - } - - do { - is1 = IndexSet(integer: 42) - is2 = IndexSet(integer: 42) - XCTAssertEqual(IndexSet(), is1.symmetricDifference(is2)) - XCTAssertEqual(IndexSet(), is2.symmetricDifference(is1)) - } - - do { - is1 = IndexSet(integer: 1) - is1.insert(3) - is1.insert(5) - is1.insert(7) - - is2 = IndexSet(integer: 0) - is2.insert(2) - is2.insert(4) - is2.insert(6) - - expected = IndexSet(integersIn: 0..<8) - XCTAssertEqual(expected, is1.symmetricDifference(is2)) - XCTAssertEqual(expected, is2.symmetricDifference(is1)) - } - - do { - is1 = IndexSet(integersIn: 0..<5) - is2 = IndexSet(integersIn: 3..<10) - - expected = IndexSet(integersIn: 0..<3) - expected.insert(integersIn: 5..<10) - - XCTAssertEqual(expected, is1.symmetricDifference(is2)) - XCTAssertEqual(expected, is2.symmetricDifference(is1)) - } - - do { - is1 = IndexSet([0, 2]) - is2 = IndexSet([0, 1, 2]) - XCTAssertEqual(IndexSet(integer: 1), is1.symmetricDifference(is2)) - } - } - - func testIntersection() { - var is1 : IndexSet - var is2 : IndexSet - var expected : IndexSet - - do { - is1 = IndexSet() - is1.insert(integersIn: 1..<3) - is1.insert(integersIn: 4..<11) - is1.insert(integersIn: 15..<21) - is1.insert(integersIn: 40..<51) - - is2 = IndexSet() - is2.insert(integersIn: 5..<18) - is2.insert(integersIn: 45..<61) - - expected = IndexSet() - expected.insert(integersIn: 5..<11) - expected.insert(integersIn: 15..<18) - expected.insert(integersIn: 45..<51) - - XCTAssertEqual(expected, is1.intersection(is2)) - XCTAssertEqual(expected, is2.intersection(is1)) - } - - do { - is1 = IndexSet() - is1.insert(integersIn: 5..<11) - is1.insert(integersIn: 20..<31) - - is2 = IndexSet() - is2.insert(integersIn: 11..<20) - is2.insert(integersIn: 31..<40) - - XCTAssertEqual(IndexSet(), is1.intersection(is2)) - XCTAssertEqual(IndexSet(), is2.intersection(is1)) - } - - do { - is1 = IndexSet(integer: 42) - is2 = IndexSet(integer: 42) - XCTAssertEqual(IndexSet(integer: 42), is1.intersection(is2)) - } - - do { - is1 = IndexSet(integer: 1) - is1.insert(3) - is1.insert(5) - is1.insert(7) - - is2 = IndexSet(integer: 0) - is2.insert(2) - is2.insert(4) - is2.insert(6) - - expected = IndexSet() - XCTAssertEqual(expected, is1.intersection(is2)) - XCTAssertEqual(expected, is2.intersection(is1)) - } - - do { - is1 = IndexSet(integersIn: 0..<5) - is2 = IndexSet(integersIn: 4..<10) - - expected = IndexSet(integer: 4) - - XCTAssertEqual(expected, is1.intersection(is2)) - XCTAssertEqual(expected, is2.intersection(is1)) - } - - do { - is1 = IndexSet([0, 2]) - is2 = IndexSet([0, 1, 2]) - XCTAssertEqual(is1, is1.intersection(is2)) - } - } - - func testUnion() { - var is1 : IndexSet - var is2 : IndexSet - var expected : IndexSet - - do { - is1 = IndexSet() - is1.insert(integersIn: 1..<3) - is1.insert(integersIn: 4..<11) - is1.insert(integersIn: 15..<21) - is1.insert(integersIn: 40..<51) - - is2 = IndexSet() - is2.insert(integersIn: 5..<18) - is2.insert(integersIn: 45..<61) - - expected = IndexSet() - expected.insert(integersIn: 1..<3) - expected.insert(integersIn: 4..<21) - expected.insert(integersIn: 40..<61) - - XCTAssertEqual(expected, is1.union(is2)) - XCTAssertEqual(expected, is2.union(is1)) - } - - do { - is1 = IndexSet() - is1.insert(integersIn: 5..<11) - is1.insert(integersIn: 20..<31) - - is2 = IndexSet() - is2.insert(integersIn: 11..<20) - is2.insert(integersIn: 31..<40) - - expected = IndexSet() - expected.insert(integersIn: 5..<11) - expected.insert(integersIn: 20..<31) - expected.insert(integersIn: 11..<20) - expected.insert(integersIn: 31..<40) - - XCTAssertEqual(expected, is1.union(is2)) - XCTAssertEqual(expected, is2.union(is1)) - } - - do { - is1 = IndexSet(integer: 42) - is2 = IndexSet(integer: 42) - - XCTAssertEqual(IndexSet(integer: 42), is1.union(is2)) - } - - do { - is1 = IndexSet() - is1.insert(integersIn: 5..<10) - is1.insert(integersIn: 15..<20) - - is2 = IndexSet() - is2.insert(integersIn: 1..<4) - is2.insert(integersIn: 15..<20) - - expected = IndexSet() - expected.insert(integersIn: 1..<4) - expected.insert(integersIn: 5..<10) - expected.insert(integersIn: 15..<20) - - XCTAssertEqual(expected, is1.union(is2)) - XCTAssertEqual(expected, is2.union(is1)) - } - - XCTAssertEqual(IndexSet(), IndexSet().union(IndexSet())) - - do { - is1 = IndexSet(integer: 1) - is1.insert(3) - is1.insert(5) - is1.insert(7) - - is2 = IndexSet(integer: 0) - is2.insert(2) - is2.insert(4) - is2.insert(6) - - expected = IndexSet() - XCTAssertEqual(expected, is1.intersection(is2)) - XCTAssertEqual(expected, is2.intersection(is1)) - } - - do { - is1 = IndexSet(integersIn: 0..<5) - is2 = IndexSet(integersIn: 3..<10) - - expected = IndexSet(integersIn: 0..<10) - - XCTAssertEqual(expected, is1.union(is2)) - XCTAssertEqual(expected, is2.union(is1)) - } - - do { - is1 = IndexSet() - is1.insert(2) - is1.insert(6) - is1.insert(21) - is1.insert(22) - - is2 = IndexSet() - is2.insert(8) - is2.insert(14) - is2.insert(21) - is2.insert(22) - is2.insert(24) - - expected = IndexSet() - expected.insert(2) - expected.insert(6) - expected.insert(21) - expected.insert(22) - expected.insert(8) - expected.insert(14) - expected.insert(21) - expected.insert(22) - expected.insert(24) - - XCTAssertEqual(expected, is1.union(is2)) - XCTAssertEqual(expected, is2.union(is1)) - } - } - - func test_findIndex() { - var i = IndexSet() - - // Verify nil result for empty sets - XCTAssertEqual(nil, i.first) - XCTAssertEqual(nil, i.last) - XCTAssertEqual(nil, i.integerGreaterThan(5)) - XCTAssertEqual(nil, i.integerLessThan(5)) - XCTAssertEqual(nil, i.integerGreaterThanOrEqualTo(5)) - XCTAssertEqual(nil, i.integerLessThanOrEqualTo(5)) - - i.insert(integersIn: 5..<10) - i.insert(integersIn: 15..<20) - - // Verify non-nil result - XCTAssertEqual(5, i.first) - XCTAssertEqual(19, i.last) - - XCTAssertEqual(nil, i.integerGreaterThan(19)) - XCTAssertEqual(5, i.integerGreaterThan(3)) - - XCTAssertEqual(nil, i.integerLessThan(5)) - XCTAssertEqual(5, i.integerLessThan(6)) - - XCTAssertEqual(nil, i.integerGreaterThanOrEqualTo(20)) - XCTAssertEqual(19, i.integerGreaterThanOrEqualTo(19)) - - XCTAssertEqual(nil, i.integerLessThanOrEqualTo(4)) - XCTAssertEqual(5, i.integerLessThanOrEqualTo(5)) - } - - // MARK: - - // MARK: Performance Testing - - func largeIndexSet() -> IndexSet { - var result = IndexSet() - - for i in 1..<10000 { - let start = i * 10 - let end = start + 9 - result.insert(integersIn: start.. Int { - let empty = UnsafeMutablePointer.allocate(capacity: 0) - defer { empty.deallocate() } - let length = snprintf(ptr: empty, 0, "%0.*g", DBL_DECIMAL_DIG, value) - return Int(length) - } - - // Duplicated to handle a special case - func localTestRoundTrip(of value: T) { - var payload: Data! = nil - do { - let encoder = JSONEncoder() - payload = try encoder.encode(value) - } catch { - XCTFail("Failed to encode \(T.self) to JSON: \(error)") - } - - do { - let decoder = JSONDecoder() - let decoded = try decoder.decode(T.self, from: payload) - - /// `snprintf`'s `%g`, which `JSONSerialization` uses internally for double values, does not respect - /// our precision requests in every case. This bug effects Darwin, FreeBSD, and Linux currently - /// causing this test (which uses the current time) to fail occasionally. - if formattedLength(of: (decoded as! Date).timeIntervalSinceReferenceDate) > DBL_DECIMAL_DIG + 2 { - let adjustedTimeIntervalSinceReferenceDate: (Date) -> Double = { date in - let adjustment = pow(10, Double(DBL_DECIMAL_DIG)) - return Double(floor(adjustment * date.timeIntervalSinceReferenceDate).rounded() / adjustment) - } - - let decodedAprox = adjustedTimeIntervalSinceReferenceDate(decoded as! Date) - let valueAprox = adjustedTimeIntervalSinceReferenceDate(value as! Date) - XCTAssertEqual(decodedAprox, valueAprox, "\(T.self) did not round-trip to an equal value after DBL_DECIMAL_DIG adjustment \(decodedAprox) != \(valueAprox).") - return - } - - XCTAssertEqual(decoded, value, "\(T.self) did not round-trip to an equal value. \((decoded as! Date).timeIntervalSinceReferenceDate) != \((value as! Date).timeIntervalSinceReferenceDate)") - } catch { - XCTFail("Failed to decode \(T.self) from JSON: \(error)") - } - } - - // Test the above `snprintf` edge case evaluation with a known triggering case - let knownBadDate = Date(timeIntervalSinceReferenceDate: 0.0021413276231263384) - localTestRoundTrip(of: knownBadDate) - - localTestRoundTrip(of: Date()) - - // Optional dates should encode the same way. - localTestRoundTrip(of: Optional(Date())) - } - - func testEncodingDateSecondsSince1970() { - // Cannot encode an arbitrary number of seconds since we've lost precision since 1970. - let seconds = 1000.0 - let expectedJSON = "1000".data(using: .utf8)! - - _testRoundTrip(of: Date(timeIntervalSince1970: seconds), - expectedJSON: expectedJSON, - dateEncodingStrategy: .secondsSince1970, - dateDecodingStrategy: .secondsSince1970) - - // Optional dates should encode the same way. - _testRoundTrip(of: Optional(Date(timeIntervalSince1970: seconds)), - expectedJSON: expectedJSON, - dateEncodingStrategy: .secondsSince1970, - dateDecodingStrategy: .secondsSince1970) - } - - func testEncodingDateMillisecondsSince1970() { - // Cannot encode an arbitrary number of seconds since we've lost precision since 1970. - let seconds = 1000.0 - let expectedJSON = "1000000".data(using: .utf8)! - - _testRoundTrip(of: Date(timeIntervalSince1970: seconds), - expectedJSON: expectedJSON, - dateEncodingStrategy: .millisecondsSince1970, - dateDecodingStrategy: .millisecondsSince1970) - - // Optional dates should encode the same way. - _testRoundTrip(of: Optional(Date(timeIntervalSince1970: seconds)), - expectedJSON: expectedJSON, - dateEncodingStrategy: .millisecondsSince1970, - dateDecodingStrategy: .millisecondsSince1970) - } - - func testEncodingDateISO8601() { - if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) { - let formatter = ISO8601DateFormatter() - formatter.formatOptions = .withInternetDateTime - - let timestamp = Date(timeIntervalSince1970: 1000) - let expectedJSON = "\"\(formatter.string(from: timestamp))\"".data(using: .utf8)! - - _testRoundTrip(of: timestamp, - expectedJSON: expectedJSON, - dateEncodingStrategy: .iso8601, - dateDecodingStrategy: .iso8601) - - - // Optional dates should encode the same way. - _testRoundTrip(of: Optional(timestamp), - expectedJSON: expectedJSON, - dateEncodingStrategy: .iso8601, - dateDecodingStrategy: .iso8601) - } - } - - func testEncodingDateFormatted() { - let formatter = DateFormatter() - formatter.dateStyle = .full - formatter.timeStyle = .full - - let timestamp = Date(timeIntervalSince1970: 1000) - let expectedJSON = "\"\(formatter.string(from: timestamp))\"".data(using: .utf8)! - - _testRoundTrip(of: timestamp, - expectedJSON: expectedJSON, - dateEncodingStrategy: .formatted(formatter), - dateDecodingStrategy: .formatted(formatter)) - - // Optional dates should encode the same way. - _testRoundTrip(of: Optional(timestamp), - expectedJSON: expectedJSON, - dateEncodingStrategy: .formatted(formatter), - dateDecodingStrategy: .formatted(formatter)) - } - - func testEncodingDateCustom() { - let timestamp = Date() - - // We'll encode a number instead of a date. - let encode = { (_ data: Date, _ encoder: Encoder) throws -> Void in - var container = encoder.singleValueContainer() - try container.encode(42) - } - let decode = { (_: Decoder) throws -> Date in return timestamp } - - let expectedJSON = "42".data(using: .utf8)! - _testRoundTrip(of: timestamp, - expectedJSON: expectedJSON, - dateEncodingStrategy: .custom(encode), - dateDecodingStrategy: .custom(decode)) - - // Optional dates should encode the same way. - _testRoundTrip(of: Optional(timestamp), - expectedJSON: expectedJSON, - dateEncodingStrategy: .custom(encode), - dateDecodingStrategy: .custom(decode)) - } - - func testEncodingDateCustomEmpty() { - let timestamp = Date() - - // Encoding nothing should encode an empty keyed container ({}). - let encode = { (_: Date, _: Encoder) throws -> Void in } - let decode = { (_: Decoder) throws -> Date in return timestamp } - - let expectedJSON = "{}".data(using: .utf8)! - _testRoundTrip(of: timestamp, - expectedJSON: expectedJSON, - dateEncodingStrategy: .custom(encode), - dateDecodingStrategy: .custom(decode)) - - // Optional dates should encode the same way. - _testRoundTrip(of: Optional(timestamp), - expectedJSON: expectedJSON, - dateEncodingStrategy: .custom(encode), - dateDecodingStrategy: .custom(decode)) - } - - // MARK: - Data Strategy Tests - func testEncodingData() { - let data = Data(bytes: [0xDE, 0xAD, 0xBE, 0xEF]) - - let expectedJSON = "[222,173,190,239]".data(using: .utf8)! - _testRoundTrip(of: data, - expectedJSON: expectedJSON, - dataEncodingStrategy: .deferredToData, - dataDecodingStrategy: .deferredToData) - - // Optional data should encode the same way. - _testRoundTrip(of: Optional(data), - expectedJSON: expectedJSON, - dataEncodingStrategy: .deferredToData, - dataDecodingStrategy: .deferredToData) - } - - func testEncodingDataBase64() { - let data = Data(bytes: [0xDE, 0xAD, 0xBE, 0xEF]) - - let expectedJSON = "\"3q2+7w==\"".data(using: .utf8)! - _testRoundTrip(of: data, expectedJSON: expectedJSON) - - // Optional data should encode the same way. - _testRoundTrip(of: Optional(data), expectedJSON: expectedJSON) - } - - func testEncodingDataCustom() { - // We'll encode a number instead of data. - let encode = { (_ data: Data, _ encoder: Encoder) throws -> Void in - var container = encoder.singleValueContainer() - try container.encode(42) - } - let decode = { (_: Decoder) throws -> Data in return Data() } - - let expectedJSON = "42".data(using: .utf8)! - _testRoundTrip(of: Data(), - expectedJSON: expectedJSON, - dataEncodingStrategy: .custom(encode), - dataDecodingStrategy: .custom(decode)) - - // Optional data should encode the same way. - _testRoundTrip(of: Optional(Data()), - expectedJSON: expectedJSON, - dataEncodingStrategy: .custom(encode), - dataDecodingStrategy: .custom(decode)) - } - - func testEncodingDataCustomEmpty() { - // Encoding nothing should encode an empty keyed container ({}). - let encode = { (_: Data, _: Encoder) throws -> Void in } - let decode = { (_: Decoder) throws -> Data in return Data() } - - let expectedJSON = "{}".data(using: .utf8)! - _testRoundTrip(of: Data(), - expectedJSON: expectedJSON, - dataEncodingStrategy: .custom(encode), - dataDecodingStrategy: .custom(decode)) - - // Optional Data should encode the same way. - _testRoundTrip(of: Optional(Data()), - expectedJSON: expectedJSON, - dataEncodingStrategy: .custom(encode), - dataDecodingStrategy: .custom(decode)) - } - - // MARK: - Non-Conforming Floating Point Strategy Tests - func testEncodingNonConformingFloats() { - _testEncodeFailure(of: Float.infinity) - _testEncodeFailure(of: Float.infinity) - _testEncodeFailure(of: -Float.infinity) - _testEncodeFailure(of: Float.nan) - - _testEncodeFailure(of: Double.infinity) - _testEncodeFailure(of: -Double.infinity) - _testEncodeFailure(of: Double.nan) - - // Optional Floats/Doubles should encode the same way. - _testEncodeFailure(of: Float.infinity) - _testEncodeFailure(of: -Float.infinity) - _testEncodeFailure(of: Float.nan) - - _testEncodeFailure(of: Double.infinity) - _testEncodeFailure(of: -Double.infinity) - _testEncodeFailure(of: Double.nan) - } - - func testEncodingNonConformingFloatStrings() { - let encodingStrategy: JSONEncoder.NonConformingFloatEncodingStrategy = .convertToString(positiveInfinity: "INF", negativeInfinity: "-INF", nan: "NaN") - let decodingStrategy: JSONDecoder.NonConformingFloatDecodingStrategy = .convertFromString(positiveInfinity: "INF", negativeInfinity: "-INF", nan: "NaN") - - _testRoundTrip(of: Float.infinity, - expectedJSON: "\"INF\"".data(using: .utf8)!, - nonConformingFloatEncodingStrategy: encodingStrategy, - nonConformingFloatDecodingStrategy: decodingStrategy) - _testRoundTrip(of: -Float.infinity, - expectedJSON: "\"-INF\"".data(using: .utf8)!, - nonConformingFloatEncodingStrategy: encodingStrategy, - nonConformingFloatDecodingStrategy: decodingStrategy) - - // Since Float.nan != Float.nan, we have to use a placeholder that'll encode NaN but actually round-trip. - _testRoundTrip(of: FloatNaNPlaceholder(), - expectedJSON: "\"NaN\"".data(using: .utf8)!, - nonConformingFloatEncodingStrategy: encodingStrategy, - nonConformingFloatDecodingStrategy: decodingStrategy) - - _testRoundTrip(of: Double.infinity, - expectedJSON: "\"INF\"".data(using: .utf8)!, - nonConformingFloatEncodingStrategy: encodingStrategy, - nonConformingFloatDecodingStrategy: decodingStrategy) - _testRoundTrip(of: -Double.infinity, - expectedJSON: "\"-INF\"".data(using: .utf8)!, - nonConformingFloatEncodingStrategy: encodingStrategy, - nonConformingFloatDecodingStrategy: decodingStrategy) - - // Since Double.nan != Double.nan, we have to use a placeholder that'll encode NaN but actually round-trip. - _testRoundTrip(of: DoubleNaNPlaceholder(), - expectedJSON: "\"NaN\"".data(using: .utf8)!, - nonConformingFloatEncodingStrategy: encodingStrategy, - nonConformingFloatDecodingStrategy: decodingStrategy) - - // Optional Floats and Doubles should encode the same way. - _testRoundTrip(of: Optional(Float.infinity), - expectedJSON: "\"INF\"".data(using: .utf8)!, - nonConformingFloatEncodingStrategy: encodingStrategy, - nonConformingFloatDecodingStrategy: decodingStrategy) - _testRoundTrip(of: Optional(-Float.infinity), - expectedJSON: "\"-INF\"".data(using: .utf8)!, - nonConformingFloatEncodingStrategy: encodingStrategy, - nonConformingFloatDecodingStrategy: decodingStrategy) - _testRoundTrip(of: Optional(Double.infinity), - expectedJSON: "\"INF\"".data(using: .utf8)!, - nonConformingFloatEncodingStrategy: encodingStrategy, - nonConformingFloatDecodingStrategy: decodingStrategy) - _testRoundTrip(of: Optional(-Double.infinity), - expectedJSON: "\"-INF\"".data(using: .utf8)!, - nonConformingFloatEncodingStrategy: encodingStrategy, - nonConformingFloatDecodingStrategy: decodingStrategy) - } - - // MARK: - Key Strategy Tests - private struct EncodeMe : Encodable { - var keyName: String - func encode(to coder: Encoder) throws { - var c = coder.container(keyedBy: _TestKey.self) - try c.encode("test", forKey: _TestKey(stringValue: keyName)!) - } - } - - func testEncodingKeyStrategySnake() { - let toSnakeCaseTests = [ - ("simpleOneTwo", "simple_one_two"), - ("myURL", "my_url"), - ("singleCharacterAtEndX", "single_character_at_end_x"), - ("thisIsAnXMLProperty", "this_is_an_xml_property"), - ("single", "single"), // no underscore - ("", ""), // don't die on empty string - ("a", "a"), // single character - ("aA", "a_a"), // two characters - ("version4Thing", "version4_thing"), // numerics - ("partCAPS", "part_caps"), // only insert underscore before first all caps - ("partCAPSLowerAGAIN", "part_caps_lower_again"), // switch back and forth caps. - ("manyWordsInThisThing", "many_words_in_this_thing"), // simple lowercase + underscore + more - ("asdfĆqer", "asdf_ćqer"), - ("already_snake_case", "already_snake_case"), - ("dataPoint22", "data_point22"), - ("dataPoint22Word", "data_point22_word"), - ("_oneTwoThree", "_one_two_three"), - ("oneTwoThree_", "one_two_three_"), - ("__oneTwoThree", "__one_two_three"), - ("oneTwoThree__", "one_two_three__"), - ("_oneTwoThree_", "_one_two_three_"), - ("__oneTwoThree", "__one_two_three"), - ("__oneTwoThree__", "__one_two_three__"), - ("_test", "_test"), - ("_test_", "_test_"), - ("__test", "__test"), - ("test__", "test__"), - ("m͉̟̹y̦̳G͍͚͎̳r̤͉̤͕ͅea̲͕t͇̥̼͖U͇̝̠R͙̻̥͓̣L̥̖͎͓̪̫ͅR̩͖̩eq͈͓u̞e̱s̙t̤̺ͅ", "m͉̟̹y̦̳_g͍͚͎̳r̤͉̤͕ͅea̲͕t͇̥̼͖_u͇̝̠r͙̻̥͓̣l̥̖͎͓̪̫ͅ_r̩͖̩eq͈͓u̞e̱s̙t̤̺ͅ"), // because Itai wanted to test this - ("🐧🐟", "🐧🐟") // fishy emoji example? - ] - - for test in toSnakeCaseTests { - let expected = "{\"\(test.1)\":\"test\"}" - let encoded = EncodeMe(keyName: test.0) - - let encoder = JSONEncoder() - encoder.keyEncodingStrategy = .convertToSnakeCase - let resultData = try! encoder.encode(encoded) - let resultString = String(bytes: resultData, encoding: .utf8) - - XCTAssertEqual(expected, resultString) - } - } - - func testEncodingKeyStrategyCustom() { - let expected = "{\"QQQhello\":\"test\"}" - let encoded = EncodeMe(keyName: "hello") - - let encoder = JSONEncoder() - let customKeyConversion = { (_ path : [CodingKey]) -> CodingKey in - let key = _TestKey(stringValue: "QQQ" + path.last!.stringValue)! - return key - } - encoder.keyEncodingStrategy = .custom(customKeyConversion) - let resultData = try! encoder.encode(encoded) - let resultString = String(bytes: resultData, encoding: .utf8) - - XCTAssertEqual(expected, resultString) - } - - func testEncodingDictionaryStringKeyConversionUntouched() { - let expected = "{\"leaveMeAlone\":\"test\"}" - let toEncode: [String: String] = ["leaveMeAlone": "test"] - - let encoder = JSONEncoder() - encoder.keyEncodingStrategy = .convertToSnakeCase - let resultData = try! encoder.encode(toEncode) - let resultString = String(bytes: resultData, encoding: .utf8) - - XCTAssertEqual(expected, resultString) - } - - private struct EncodeFailure : Encodable { - var someValue: Double - } - - private struct EncodeFailureNested : Encodable { - var nestedValue: EncodeFailure - } - - func testEncodingDictionaryFailureKeyPath() { - let toEncode: [String: EncodeFailure] = ["key": EncodeFailure(someValue: Double.nan)] - - let encoder = JSONEncoder() - encoder.keyEncodingStrategy = .convertToSnakeCase - do { - _ = try encoder.encode(toEncode) - } catch EncodingError.invalidValue(_, let context) { - XCTAssertEqual(2, context.codingPath.count) - XCTAssertEqual("key", context.codingPath[0].stringValue) - XCTAssertEqual("someValue", context.codingPath[1].stringValue) - } catch { - XCTFail("Unexpected error: \(String(describing: error))") - } - } - - func testEncodingDictionaryFailureKeyPathNested() { - let toEncode: [String: [String: EncodeFailureNested]] = ["key": ["sub_key": EncodeFailureNested(nestedValue: EncodeFailure(someValue: Double.nan))]] - - let encoder = JSONEncoder() - encoder.keyEncodingStrategy = .convertToSnakeCase - do { - _ = try encoder.encode(toEncode) - } catch EncodingError.invalidValue(_, let context) { - XCTAssertEqual(4, context.codingPath.count) - XCTAssertEqual("key", context.codingPath[0].stringValue) - XCTAssertEqual("sub_key", context.codingPath[1].stringValue) - XCTAssertEqual("nestedValue", context.codingPath[2].stringValue) - XCTAssertEqual("someValue", context.codingPath[3].stringValue) - } catch { - XCTFail("Unexpected error: \(String(describing: error))") - } - } - - private struct EncodeNested : Encodable { - let nestedValue: EncodeMe - } - - private struct EncodeNestedNested : Encodable { - let outerValue: EncodeNested - } - - func testEncodingKeyStrategyPath() { - // Make sure a more complex path shows up the way we want - // Make sure the path reflects keys in the Swift, not the resulting ones in the JSON - let expected = "{\"QQQouterValue\":{\"QQQnestedValue\":{\"QQQhelloWorld\":\"test\"}}}" - let encoded = EncodeNestedNested(outerValue: EncodeNested(nestedValue: EncodeMe(keyName: "helloWorld"))) - - let encoder = JSONEncoder() - var callCount = 0 - - let customKeyConversion = { (_ path : [CodingKey]) -> CodingKey in - // This should be called three times: - // 1. to convert 'outerValue' to something - // 2. to convert 'nestedValue' to something - // 3. to convert 'helloWorld' to something - callCount = callCount + 1 - - if path.count == 0 { - XCTFail("The path should always have at least one entry") - } else if path.count == 1 { - XCTAssertEqual(["outerValue"], path.map { $0.stringValue }) - } else if path.count == 2 { - XCTAssertEqual(["outerValue", "nestedValue"], path.map { $0.stringValue }) - } else if path.count == 3 { - XCTAssertEqual(["outerValue", "nestedValue", "helloWorld"], path.map { $0.stringValue }) - } else { - XCTFail("The path mysteriously had more entries") - } - - let key = _TestKey(stringValue: "QQQ" + path.last!.stringValue)! - return key - } - encoder.keyEncodingStrategy = .custom(customKeyConversion) - let resultData = try! encoder.encode(encoded) - let resultString = String(bytes: resultData, encoding: .utf8) - - XCTAssertEqual(expected, resultString) - XCTAssertEqual(3, callCount) - } - - private struct DecodeMe : Decodable { - let found: Bool - init(from coder: Decoder) throws { - let c = try coder.container(keyedBy: _TestKey.self) - // Get the key that we expect to be passed in (camel case) - let camelCaseKey = try c.decode(String.self, forKey: _TestKey(stringValue: "camelCaseKey")!) - - // Use the camel case key to decode from the JSON. The decoder should convert it to snake case to find it. - found = try c.decode(Bool.self, forKey: _TestKey(stringValue: camelCaseKey)!) - } - } - - func testDecodingKeyStrategyCamel() { - let fromSnakeCaseTests = [ - ("", ""), // don't die on empty string - ("a", "a"), // single character - ("ALLCAPS", "ALLCAPS"), // If no underscores, we leave the word as-is - ("ALL_CAPS", "allCaps"), // Conversion from screaming snake case - ("single", "single"), // do not capitalize anything with no underscore - ("snake_case", "snakeCase"), // capitalize a character - ("one_two_three", "oneTwoThree"), // more than one word - ("one_2_three", "one2Three"), // numerics - ("one2_three", "one2Three"), // numerics, part 2 - ("snake_Ćase", "snakeĆase"), // do not further modify a capitalized diacritic - ("snake_ćase", "snakeĆase"), // capitalize a diacritic - ("alreadyCamelCase", "alreadyCamelCase"), // do not modify already camel case - ("__this_and_that", "__thisAndThat"), - ("_this_and_that", "_thisAndThat"), - ("this__and__that", "thisAndThat"), - ("this_and_that__", "thisAndThat__"), - ("this_aNd_that", "thisAndThat"), - ("_one_two_three", "_oneTwoThree"), - ("one_two_three_", "oneTwoThree_"), - ("__one_two_three", "__oneTwoThree"), - ("one_two_three__", "oneTwoThree__"), - ("_one_two_three_", "_oneTwoThree_"), - ("__one_two_three", "__oneTwoThree"), - ("__one_two_three__", "__oneTwoThree__"), - ("_test", "_test"), - ("_test_", "_test_"), - ("__test", "__test"), - ("test__", "test__"), - ("_", "_"), - ("__", "__"), - ("___", "___"), - ("m͉̟̹y̦̳G͍͚͎̳r̤͉̤͕ͅea̲͕t͇̥̼͖U͇̝̠R͙̻̥͓̣L̥̖͎͓̪̫ͅR̩͖̩eq͈͓u̞e̱s̙t̤̺ͅ", "m͉̟̹y̦̳G͍͚͎̳r̤͉̤͕ͅea̲͕t͇̥̼͖U͇̝̠R͙̻̥͓̣L̥̖͎͓̪̫ͅR̩͖̩eq͈͓u̞e̱s̙t̤̺ͅ"), // because Itai wanted to test this - ("🐧_🐟", "🐧🐟") // fishy emoji example? - ] - - for test in fromSnakeCaseTests { - // This JSON contains the camel case key that the test object should decode with, then it uses the snake case key (test.0) as the actual key for the boolean value. - let input = "{\"camelCaseKey\":\"\(test.1)\",\"\(test.0)\":true}".data(using: .utf8)! - - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - - let result = try! decoder.decode(DecodeMe.self, from: input) - - XCTAssertTrue(result.found) - } - } - - private struct DecodeMe2 : Decodable { var hello: String } - - func testDecodingKeyStrategyCustom() { - let input = "{\"----hello\":\"test\"}".data(using: .utf8)! - let decoder = JSONDecoder() - let customKeyConversion = { (_ path: [CodingKey]) -> CodingKey in - // This converter removes the first 4 characters from the start of all string keys, if it has more than 4 characters - let string = path.last!.stringValue - guard string.count > 4 else { return path.last! } - let newString = String(string.dropFirst(4)) - return _TestKey(stringValue: newString)! - } - decoder.keyDecodingStrategy = .custom(customKeyConversion) - let result = try! decoder.decode(DecodeMe2.self, from: input) - - XCTAssertEqual("test", result.hello) - } - - func testDecodingDictionaryStringKeyConversionUntouched() { - let input = "{\"leave_me_alone\":\"test\"}".data(using: .utf8)! - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - let result = try! decoder.decode([String: String].self, from: input) - - XCTAssertEqual(["leave_me_alone": "test"], result) - } - - func testDecodingDictionaryFailureKeyPath() { - let input = "{\"leave_me_alone\":\"test\"}".data(using: .utf8)! - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - do { - _ = try decoder.decode([String: Int].self, from: input) - } catch DecodingError.typeMismatch(_, let context) { - XCTAssertEqual(1, context.codingPath.count) - XCTAssertEqual("leave_me_alone", context.codingPath[0].stringValue) - } catch { - XCTFail("Unexpected error: \(String(describing: error))") - } - } - - private struct DecodeFailure : Decodable { - var intValue: Int - } - - private struct DecodeFailureNested : Decodable { - var nestedValue: DecodeFailure - } - - func testDecodingDictionaryFailureKeyPathNested() { - let input = "{\"top_level\": {\"sub_level\": {\"nested_value\": {\"int_value\": \"not_an_int\"}}}}".data(using: .utf8)! - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - do { - _ = try decoder.decode([String: [String : DecodeFailureNested]].self, from: input) - } catch DecodingError.typeMismatch(_, let context) { - XCTAssertEqual(4, context.codingPath.count) - XCTAssertEqual("top_level", context.codingPath[0].stringValue) - XCTAssertEqual("sub_level", context.codingPath[1].stringValue) - XCTAssertEqual("nestedValue", context.codingPath[2].stringValue) - XCTAssertEqual("intValue", context.codingPath[3].stringValue) - } catch { - XCTFail("Unexpected error: \(String(describing: error))") - } - } - - private struct DecodeMe3 : Codable { - var thisIsCamelCase : String - } - - func testEncodingKeyStrategySnakeGenerated() { - // Test that this works with a struct that has automatically generated keys - let input = "{\"this_is_camel_case\":\"test\"}".data(using: .utf8)! - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - let result = try! decoder.decode(DecodeMe3.self, from: input) - - XCTAssertEqual("test", result.thisIsCamelCase) - } - - func testDecodingKeyStrategyCamelGenerated() { - let encoded = DecodeMe3(thisIsCamelCase: "test") - let encoder = JSONEncoder() - encoder.keyEncodingStrategy = .convertToSnakeCase - let resultData = try! encoder.encode(encoded) - let resultString = String(bytes: resultData, encoding: .utf8) - XCTAssertEqual("{\"this_is_camel_case\":\"test\"}", resultString) - } - - func testKeyStrategySnakeGeneratedAndCustom() { - // Test that this works with a struct that has automatically generated keys - struct DecodeMe4 : Codable { - var thisIsCamelCase : String - var thisIsCamelCaseToo : String - private enum CodingKeys : String, CodingKey { - case thisIsCamelCase = "fooBar" - case thisIsCamelCaseToo - } - } - - // Decoding - let input = "{\"foo_bar\":\"test\",\"this_is_camel_case_too\":\"test2\"}".data(using: .utf8)! - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - let decodingResult = try! decoder.decode(DecodeMe4.self, from: input) - - XCTAssertEqual("test", decodingResult.thisIsCamelCase) - XCTAssertEqual("test2", decodingResult.thisIsCamelCaseToo) - - // Encoding - let encoded = DecodeMe4(thisIsCamelCase: "test", thisIsCamelCaseToo: "test2") - let encoder = JSONEncoder() - encoder.keyEncodingStrategy = .convertToSnakeCase - let encodingResultData = try! encoder.encode(encoded) - let encodingResultString = String(bytes: encodingResultData, encoding: .utf8) - XCTAssertEqual("{\"foo_bar\":\"test\",\"this_is_camel_case_too\":\"test2\"}", encodingResultString) - } - - func testKeyStrategyDuplicateKeys() { - // This test is mostly to make sure we don't assert on duplicate keys - struct DecodeMe5 : Codable { - var oneTwo : String - var numberOfKeys : Int - - enum CodingKeys : String, CodingKey { - case oneTwo - case oneTwoThree - } - - init() { - oneTwo = "test" - numberOfKeys = 0 - } - - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - oneTwo = try container.decode(String.self, forKey: .oneTwo) - numberOfKeys = container.allKeys.count - } - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(oneTwo, forKey: .oneTwo) - try container.encode("test2", forKey: .oneTwoThree) - } - } - - let customKeyConversion = { (_ path: [CodingKey]) -> CodingKey in - // All keys are the same! - return _TestKey(stringValue: "oneTwo")! - } - - // Decoding - // This input has a dictionary with two keys, but only one will end up in the container - let input = "{\"unused key 1\":\"test1\",\"unused key 2\":\"test2\"}".data(using: .utf8)! - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .custom(customKeyConversion) - - let decodingResult = try! decoder.decode(DecodeMe5.self, from: input) - // There will be only one result for oneTwo (the second one in the json) - XCTAssertEqual(1, decodingResult.numberOfKeys) - - // Encoding - let encoded = DecodeMe5() - let encoder = JSONEncoder() - encoder.keyEncodingStrategy = .custom(customKeyConversion) - let decodingResultData = try! encoder.encode(encoded) - let decodingResultString = String(bytes: decodingResultData, encoding: .utf8) - - // There will be only one value in the result (the second one encoded) - XCTAssertEqual("{\"oneTwo\":\"test2\"}", decodingResultString) - } - - // MARK: - Encoder Features - func testNestedContainerCodingPaths() { - let encoder = JSONEncoder() - do { - let _ = try encoder.encode(NestedContainersTestType()) - } catch let error as NSError { - XCTFail("Caught error during encoding nested container types: \(error)") - } - } - - func testSuperEncoderCodingPaths() { - let encoder = JSONEncoder() - do { - let _ = try encoder.encode(NestedContainersTestType(testSuperEncoder: true)) - } catch let error as NSError { - XCTFail("Caught error during encoding nested container types: \(error)") - } - } - - func testInterceptDecimal() { - let expectedJSON = "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000".data(using: .utf8)! - - // Want to make sure we write out a JSON number, not the keyed encoding here. - // 1e127 is too big to fit natively in a Double, too, so want to make sure it's encoded as a Decimal. - let decimal = Decimal(sign: .plus, exponent: 127, significand: Decimal(1)) - _testRoundTrip(of: decimal, expectedJSON: expectedJSON) - - // Optional Decimals should encode the same way. - _testRoundTrip(of: Optional(decimal), expectedJSON: expectedJSON) - } - - func testInterceptURL() { - // Want to make sure JSONEncoder writes out single-value URLs, not the keyed encoding. - let expectedJSON = "\"http:\\/\\/swift.org\"".data(using: .utf8)! - let url = URL(string: "http://swift.org")! - _testRoundTrip(of: url, expectedJSON: expectedJSON) - - // Optional URLs should encode the same way. - _testRoundTrip(of: Optional(url), expectedJSON: expectedJSON) - } - - func testInterceptURLWithoutEscapingOption() { - if #available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) { - // Want to make sure JSONEncoder writes out single-value URLs, not the keyed encoding. - let expectedJSON = "\"http://swift.org\"".data(using: .utf8)! - let url = URL(string: "http://swift.org")! - _testRoundTrip(of: url, expectedJSON: expectedJSON, outputFormatting: [.withoutEscapingSlashes]) - - // Optional URLs should encode the same way. - _testRoundTrip(of: Optional(url), expectedJSON: expectedJSON, outputFormatting: [.withoutEscapingSlashes]) - } - } - - // MARK: - Type coercion - func testTypeCoercion() { - _testRoundTripTypeCoercionFailure(of: [false, true], as: [Int].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [Int8].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [Int16].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [Int32].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [Int64].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [UInt].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [UInt8].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [UInt16].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [UInt32].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [UInt64].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [Float].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [Double].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [Int], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [Int8], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [Int16], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [Int32], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [Int64], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [UInt], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [UInt8], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [UInt16], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [UInt32], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [UInt64], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0.0, 1.0] as [Float], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0.0, 1.0] as [Double], as: [Bool].self) - } - - func testDecodingConcreteTypeParameter() { - let encoder = JSONEncoder() - guard let json = try? encoder.encode(Employee.testValue) else { - XCTFail("Unable to encode Employee.") - return - } - - let decoder = JSONDecoder() - guard let decoded = try? decoder.decode(Employee.self as Person.Type, from: json) else { - XCTFail("Failed to decode Employee as Person from JSON.") - return - } - - expectEqual(type(of: decoded), Employee.self, "Expected decoded value to be of type Employee; got \(type(of: decoded)) instead.") - } - - // MARK: - Encoder State - // SR-6078 - func testEncoderStateThrowOnEncode() { - struct ReferencingEncoderWrapper : Encodable { - let value: T - init(_ value: T) { self.value = value } - - func encode(to encoder: Encoder) throws { - // This approximates a subclass calling into its superclass, where the superclass encodes a value that might throw. - // The key here is that getting the superEncoder creates a referencing encoder. - var container = encoder.unkeyedContainer() - let superEncoder = container.superEncoder() - - // Pushing a nested container on leaves the referencing encoder with multiple containers. - var nestedContainer = superEncoder.unkeyedContainer() - try nestedContainer.encode(value) - } - } - - // The structure that would be encoded here looks like - // - // [[[Float.infinity]]] - // - // The wrapper asks for an unkeyed container ([^]), gets a super encoder, and creates a nested container into that ([[^]]). - // We then encode an array into that ([[[^]]]), which happens to be a value that causes us to throw an error. - // - // The issue at hand reproduces when you have a referencing encoder (superEncoder() creates one) that has a container on the stack (unkeyedContainer() adds one) that encodes a value going through box_() (Array does that) that encodes something which throws (Float.infinity does that). - // When reproducing, this will cause a test failure via fatalError(). - _ = try? JSONEncoder().encode(ReferencingEncoderWrapper([Float.infinity])) - } - - func testEncoderStateThrowOnEncodeCustomDate() { - // This test is identical to testEncoderStateThrowOnEncode, except throwing via a custom Date closure. - struct ReferencingEncoderWrapper : Encodable { - let value: T - init(_ value: T) { self.value = value } - func encode(to encoder: Encoder) throws { - var container = encoder.unkeyedContainer() - let superEncoder = container.superEncoder() - var nestedContainer = superEncoder.unkeyedContainer() - try nestedContainer.encode(value) - } - } - - // The closure needs to push a container before throwing an error to trigger. - let encoder = JSONEncoder() - encoder.dateEncodingStrategy = .custom({ _, encoder in - let _ = encoder.unkeyedContainer() - enum CustomError : Error { case foo } - throw CustomError.foo - }) - - _ = try? encoder.encode(ReferencingEncoderWrapper(Date())) - } - - func testEncoderStateThrowOnEncodeCustomData() { - // This test is identical to testEncoderStateThrowOnEncode, except throwing via a custom Data closure. - struct ReferencingEncoderWrapper : Encodable { - let value: T - init(_ value: T) { self.value = value } - func encode(to encoder: Encoder) throws { - var container = encoder.unkeyedContainer() - let superEncoder = container.superEncoder() - var nestedContainer = superEncoder.unkeyedContainer() - try nestedContainer.encode(value) - } - } - - // The closure needs to push a container before throwing an error to trigger. - let encoder = JSONEncoder() - encoder.dataEncodingStrategy = .custom({ _, encoder in - let _ = encoder.unkeyedContainer() - enum CustomError : Error { case foo } - throw CustomError.foo - }) - - _ = try? encoder.encode(ReferencingEncoderWrapper(Data())) - } - - // MARK: - Decoder State - // SR-6048 - func testDecoderStateThrowOnDecode() { - // The container stack here starts as [[1,2,3]]. Attempting to decode as [String] matches the outer layer (Array), and begins decoding the array. - // Once Array decoding begins, 1 is pushed onto the container stack ([[1,2,3], 1]), and 1 is attempted to be decoded as String. This throws a .typeMismatch, but the container is not popped off the stack. - // When attempting to decode [Int], the container stack is still ([[1,2,3], 1]), and 1 fails to decode as [Int]. - let json = "[1,2,3]".data(using: .utf8)! - let _ = try! JSONDecoder().decode(EitherDecodable<[String], [Int]>.self, from: json) - } - - func testDecoderStateThrowOnDecodeCustomDate() { - // This test is identical to testDecoderStateThrowOnDecode, except we're going to fail because our closure throws an error, not because we hit a type mismatch. - let decoder = JSONDecoder() - decoder.dateDecodingStrategy = .custom({ decoder in - enum CustomError : Error { case foo } - throw CustomError.foo - }) - - let json = "1".data(using: .utf8)! - let _ = try! decoder.decode(EitherDecodable.self, from: json) - } - - func testDecoderStateThrowOnDecodeCustomData() { - // This test is identical to testDecoderStateThrowOnDecode, except we're going to fail because our closure throws an error, not because we hit a type mismatch. - let decoder = JSONDecoder() - decoder.dataDecodingStrategy = .custom({ decoder in - enum CustomError : Error { case foo } - throw CustomError.foo - }) - - let json = "1".data(using: .utf8)! - let _ = try! decoder.decode(EitherDecodable.self, from: json) - } - - // MARK: - Helper Functions - private var _jsonEmptyDictionary: Data { - return "{}".data(using: .utf8)! - } - - private func _testEncodeFailure(of value: T) { - do { - let _ = try JSONEncoder().encode(value) - XCTFail("Encode of top-level \(T.self) was expected to fail.") - } catch {} - } - - private func _testRoundTrip(of value: T, - expectedJSON json: Data? = nil, - outputFormatting: JSONEncoder.OutputFormatting = [], - dateEncodingStrategy: JSONEncoder.DateEncodingStrategy = .deferredToDate, - dateDecodingStrategy: JSONDecoder.DateDecodingStrategy = .deferredToDate, - dataEncodingStrategy: JSONEncoder.DataEncodingStrategy = .base64, - dataDecodingStrategy: JSONDecoder.DataDecodingStrategy = .base64, - keyEncodingStrategy: JSONEncoder.KeyEncodingStrategy = .useDefaultKeys, - keyDecodingStrategy: JSONDecoder.KeyDecodingStrategy = .useDefaultKeys, - nonConformingFloatEncodingStrategy: JSONEncoder.NonConformingFloatEncodingStrategy = .throw, - nonConformingFloatDecodingStrategy: JSONDecoder.NonConformingFloatDecodingStrategy = .throw) where T : Codable, T : Equatable { - var payload: Data! = nil - do { - let encoder = JSONEncoder() - encoder.outputFormatting = outputFormatting - encoder.dateEncodingStrategy = dateEncodingStrategy - encoder.dataEncodingStrategy = dataEncodingStrategy - encoder.nonConformingFloatEncodingStrategy = nonConformingFloatEncodingStrategy - encoder.keyEncodingStrategy = keyEncodingStrategy - payload = try encoder.encode(value) - } catch { - XCTFail("Failed to encode \(T.self) to JSON: \(error)") - } - - if let expectedJSON = json { - XCTAssertEqual(expectedJSON, payload, "Produced JSON not identical to expected JSON.") - } - - do { - let decoder = JSONDecoder() - decoder.dateDecodingStrategy = dateDecodingStrategy - decoder.dataDecodingStrategy = dataDecodingStrategy - decoder.nonConformingFloatDecodingStrategy = nonConformingFloatDecodingStrategy - decoder.keyDecodingStrategy = keyDecodingStrategy - let decoded = try decoder.decode(T.self, from: payload) - XCTAssertEqual(decoded, value, "\(T.self) did not round-trip to an equal value.") - } catch { - XCTFail("Failed to decode \(T.self) from JSON: \(error)") - } - } - - private func _testRoundTripTypeCoercionFailure(of value: T, as type: U.Type) where T : Codable, U : Codable { - do { - let data = try JSONEncoder().encode(value) - let _ = try JSONDecoder().decode(U.self, from: data) - XCTFail("Coercion from \(T.self) to \(U.self) was expected to fail.") - } catch {} - } -} - -// MARK: - Helper Global Functions -func expectEqualPaths(_ lhs: [CodingKey], _ rhs: [CodingKey], _ prefix: String) { - if lhs.count != rhs.count { - XCTFail("\(prefix) [CodingKey].count mismatch: \(lhs.count) != \(rhs.count)") - return - } - - for (key1, key2) in zip(lhs, rhs) { - switch (key1.intValue, key2.intValue) { - case (.none, .none): break - case (.some(let i1), .none): - XCTFail("\(prefix) CodingKey.intValue mismatch: \(type(of: key1))(\(i1)) != nil") - return - case (.none, .some(let i2)): - XCTFail("\(prefix) CodingKey.intValue mismatch: nil != \(type(of: key2))(\(i2))") - return - case (.some(let i1), .some(let i2)): - guard i1 == i2 else { - XCTFail("\(prefix) CodingKey.intValue mismatch: \(type(of: key1))(\(i1)) != \(type(of: key2))(\(i2))") - return - } - } - - XCTAssertEqual(key1.stringValue, key2.stringValue, "\(prefix) CodingKey.stringValue mismatch: \(type(of: key1))('\(key1.stringValue)') != \(type(of: key2))('\(key2.stringValue)')") - } -} - -// MARK: - Test Types -/* FIXME: Import from %S/Inputs/Coding/SharedTypes.swift somehow. */ - -// MARK: - Empty Types -fileprivate struct EmptyStruct : Codable, Equatable { - static func ==(_ lhs: EmptyStruct, _ rhs: EmptyStruct) -> Bool { - return true - } -} - -fileprivate class EmptyClass : Codable, Equatable { - static func ==(_ lhs: EmptyClass, _ rhs: EmptyClass) -> Bool { - return true - } -} - -// MARK: - Single-Value Types -/// A simple on-off switch type that encodes as a single Bool value. -fileprivate enum Switch : Codable { - case off - case on - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - switch try container.decode(Bool.self) { - case false: self = .off - case true: self = .on - } - } - - func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - switch self { - case .off: try container.encode(false) - case .on: try container.encode(true) - } - } -} - -/// A simple timestamp type that encodes as a single Double value. -fileprivate struct Timestamp : Codable, Equatable { - let value: Double - - init(_ value: Double) { - self.value = value - } - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - value = try container.decode(Double.self) - } - - func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(self.value) - } - - static func ==(_ lhs: Timestamp, _ rhs: Timestamp) -> Bool { - return lhs.value == rhs.value - } -} - -/// A simple referential counter type that encodes as a single Int value. -fileprivate final class Counter : Codable, Equatable { - var count: Int = 0 - - init() {} - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - count = try container.decode(Int.self) - } - - func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(self.count) - } - - static func ==(_ lhs: Counter, _ rhs: Counter) -> Bool { - return lhs === rhs || lhs.count == rhs.count - } -} - -// MARK: - Structured Types -/// A simple address type that encodes as a dictionary of values. -fileprivate struct Address : Codable, Equatable { - let street: String - let city: String - let state: String - let zipCode: Int - let country: String - - init(street: String, city: String, state: String, zipCode: Int, country: String) { - self.street = street - self.city = city - self.state = state - self.zipCode = zipCode - self.country = country - } - - static func ==(_ lhs: Address, _ rhs: Address) -> Bool { - return lhs.street == rhs.street && - lhs.city == rhs.city && - lhs.state == rhs.state && - lhs.zipCode == rhs.zipCode && - lhs.country == rhs.country - } - - static var testValue: Address { - return Address(street: "1 Infinite Loop", - city: "Cupertino", - state: "CA", - zipCode: 95014, - country: "United States") - } -} - -/// A simple person class that encodes as a dictionary of values. -fileprivate class Person : Codable, Equatable { - let name: String - let email: String - let website: URL? - - init(name: String, email: String, website: URL? = nil) { - self.name = name - self.email = email - self.website = website - } - - func isEqual(_ other: Person) -> Bool { - return self.name == other.name && - self.email == other.email && - self.website == other.website - } - - static func ==(_ lhs: Person, _ rhs: Person) -> Bool { - return lhs.isEqual(rhs) - } - - class var testValue: Person { - return Person(name: "Johnny Appleseed", email: "appleseed@apple.com") - } -} - -/// A class which shares its encoder and decoder with its superclass. -fileprivate class Employee : Person { - let id: Int - - init(name: String, email: String, website: URL? = nil, id: Int) { - self.id = id - super.init(name: name, email: email, website: website) - } - - enum CodingKeys : String, CodingKey { - case id - } - - required init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - id = try container.decode(Int.self, forKey: .id) - try super.init(from: decoder) - } - - override func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(id, forKey: .id) - try super.encode(to: encoder) - } - - override func isEqual(_ other: Person) -> Bool { - if let employee = other as? Employee { - guard self.id == employee.id else { return false } - } - - return super.isEqual(other) - } - - override class var testValue: Employee { - return Employee(name: "Johnny Appleseed", email: "appleseed@apple.com", id: 42) - } -} - -/// A simple company struct which encodes as a dictionary of nested values. -fileprivate struct Company : Codable, Equatable { - let address: Address - var employees: [Employee] - - init(address: Address, employees: [Employee]) { - self.address = address - self.employees = employees - } - - static func ==(_ lhs: Company, _ rhs: Company) -> Bool { - return lhs.address == rhs.address && lhs.employees == rhs.employees - } - - static var testValue: Company { - return Company(address: Address.testValue, employees: [Employee.testValue]) - } -} - -/// An enum type which decodes from Bool?. -fileprivate enum EnhancedBool : Codable { - case `true` - case `false` - case fileNotFound - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - if container.decodeNil() { - self = .fileNotFound - } else { - let value = try container.decode(Bool.self) - self = value ? .true : .false - } - } - - func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - switch self { - case .true: try container.encode(true) - case .false: try container.encode(false) - case .fileNotFound: try container.encodeNil() - } - } -} - -/// A type which encodes as an array directly through a single value container. -private struct Numbers : Codable, Equatable { - let values = [4, 8, 15, 16, 23, 42] - - init() {} - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - let decodedValues = try container.decode([Int].self) - guard decodedValues == values else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "The Numbers are wrong!")) - } - } - - func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(values) - } - - static func ==(_ lhs: Numbers, _ rhs: Numbers) -> Bool { - return lhs.values == rhs.values - } - - static var testValue: Numbers { - return Numbers() - } -} - -/// A type which encodes as a dictionary directly through a single value container. -fileprivate final class Mapping : Codable, Equatable { - let values: [String : URL] - - init(values: [String : URL]) { - self.values = values - } - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - values = try container.decode([String : URL].self) - } - - func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(values) - } - - static func ==(_ lhs: Mapping, _ rhs: Mapping) -> Bool { - return lhs === rhs || lhs.values == rhs.values - } - - static var testValue: Mapping { - return Mapping(values: ["Apple": URL(string: "http://apple.com")!, - "localhost": URL(string: "http://127.0.0.1")!]) - } -} - -private struct NestedContainersTestType : Encodable { - let testSuperEncoder: Bool - - init(testSuperEncoder: Bool = false) { - self.testSuperEncoder = testSuperEncoder - } - - enum TopLevelCodingKeys : Int, CodingKey { - case a - case b - case c - } - - enum IntermediateCodingKeys : Int, CodingKey { - case one - case two - } - - func encode(to encoder: Encoder) throws { - if self.testSuperEncoder { - var topLevelContainer = encoder.container(keyedBy: TopLevelCodingKeys.self) - expectEqualPaths(encoder.codingPath, [], "Top-level Encoder's codingPath changed.") - expectEqualPaths(topLevelContainer.codingPath, [], "New first-level keyed container has non-empty codingPath.") - - let superEncoder = topLevelContainer.superEncoder(forKey: .a) - expectEqualPaths(encoder.codingPath, [], "Top-level Encoder's codingPath changed.") - expectEqualPaths(topLevelContainer.codingPath, [], "First-level keyed container's codingPath changed.") - expectEqualPaths(superEncoder.codingPath, [TopLevelCodingKeys.a], "New superEncoder had unexpected codingPath.") - _testNestedContainers(in: superEncoder, baseCodingPath: [TopLevelCodingKeys.a]) - } else { - _testNestedContainers(in: encoder, baseCodingPath: []) - } - } - - func _testNestedContainers(in encoder: Encoder, baseCodingPath: [CodingKey]) { - expectEqualPaths(encoder.codingPath, baseCodingPath, "New encoder has non-empty codingPath.") - - // codingPath should not change upon fetching a non-nested container. - var firstLevelContainer = encoder.container(keyedBy: TopLevelCodingKeys.self) - expectEqualPaths(encoder.codingPath, baseCodingPath, "Top-level Encoder's codingPath changed.") - expectEqualPaths(firstLevelContainer.codingPath, baseCodingPath, "New first-level keyed container has non-empty codingPath.") - - // Nested Keyed Container - do { - // Nested container for key should have a new key pushed on. - var secondLevelContainer = firstLevelContainer.nestedContainer(keyedBy: IntermediateCodingKeys.self, forKey: .a) - expectEqualPaths(encoder.codingPath, baseCodingPath, "Top-level Encoder's codingPath changed.") - expectEqualPaths(firstLevelContainer.codingPath, baseCodingPath, "First-level keyed container's codingPath changed.") - expectEqualPaths(secondLevelContainer.codingPath, baseCodingPath + [TopLevelCodingKeys.a], "New second-level keyed container had unexpected codingPath.") - - // Inserting a keyed container should not change existing coding paths. - let thirdLevelContainerKeyed = secondLevelContainer.nestedContainer(keyedBy: IntermediateCodingKeys.self, forKey: .one) - expectEqualPaths(encoder.codingPath, baseCodingPath, "Top-level Encoder's codingPath changed.") - expectEqualPaths(firstLevelContainer.codingPath, baseCodingPath, "First-level keyed container's codingPath changed.") - expectEqualPaths(secondLevelContainer.codingPath, baseCodingPath + [TopLevelCodingKeys.a], "Second-level keyed container's codingPath changed.") - expectEqualPaths(thirdLevelContainerKeyed.codingPath, baseCodingPath + [TopLevelCodingKeys.a, IntermediateCodingKeys.one], "New third-level keyed container had unexpected codingPath.") - - // Inserting an unkeyed container should not change existing coding paths. - let thirdLevelContainerUnkeyed = secondLevelContainer.nestedUnkeyedContainer(forKey: .two) - expectEqualPaths(encoder.codingPath, baseCodingPath + [], "Top-level Encoder's codingPath changed.") - expectEqualPaths(firstLevelContainer.codingPath, baseCodingPath + [], "First-level keyed container's codingPath changed.") - expectEqualPaths(secondLevelContainer.codingPath, baseCodingPath + [TopLevelCodingKeys.a], "Second-level keyed container's codingPath changed.") - expectEqualPaths(thirdLevelContainerUnkeyed.codingPath, baseCodingPath + [TopLevelCodingKeys.a, IntermediateCodingKeys.two], "New third-level unkeyed container had unexpected codingPath.") - } - - // Nested Unkeyed Container - do { - // Nested container for key should have a new key pushed on. - var secondLevelContainer = firstLevelContainer.nestedUnkeyedContainer(forKey: .b) - expectEqualPaths(encoder.codingPath, baseCodingPath, "Top-level Encoder's codingPath changed.") - expectEqualPaths(firstLevelContainer.codingPath, baseCodingPath, "First-level keyed container's codingPath changed.") - expectEqualPaths(secondLevelContainer.codingPath, baseCodingPath + [TopLevelCodingKeys.b], "New second-level keyed container had unexpected codingPath.") - - // Appending a keyed container should not change existing coding paths. - let thirdLevelContainerKeyed = secondLevelContainer.nestedContainer(keyedBy: IntermediateCodingKeys.self) - expectEqualPaths(encoder.codingPath, baseCodingPath, "Top-level Encoder's codingPath changed.") - expectEqualPaths(firstLevelContainer.codingPath, baseCodingPath, "First-level keyed container's codingPath changed.") - expectEqualPaths(secondLevelContainer.codingPath, baseCodingPath + [TopLevelCodingKeys.b], "Second-level unkeyed container's codingPath changed.") - expectEqualPaths(thirdLevelContainerKeyed.codingPath, baseCodingPath + [TopLevelCodingKeys.b, _TestKey(index: 0)], "New third-level keyed container had unexpected codingPath.") - - // Appending an unkeyed container should not change existing coding paths. - let thirdLevelContainerUnkeyed = secondLevelContainer.nestedUnkeyedContainer() - expectEqualPaths(encoder.codingPath, baseCodingPath, "Top-level Encoder's codingPath changed.") - expectEqualPaths(firstLevelContainer.codingPath, baseCodingPath, "First-level keyed container's codingPath changed.") - expectEqualPaths(secondLevelContainer.codingPath, baseCodingPath + [TopLevelCodingKeys.b], "Second-level unkeyed container's codingPath changed.") - expectEqualPaths(thirdLevelContainerUnkeyed.codingPath, baseCodingPath + [TopLevelCodingKeys.b, _TestKey(index: 1)], "New third-level unkeyed container had unexpected codingPath.") - } - } -} - -// MARK: - Helper Types - -/// A key type which can take on any string or integer value. -/// This needs to mirror _JSONKey. -fileprivate struct _TestKey : CodingKey { - var stringValue: String - var intValue: Int? - - init?(stringValue: String) { - self.stringValue = stringValue - self.intValue = nil - } - - init?(intValue: Int) { - self.stringValue = "\(intValue)" - self.intValue = intValue - } - - init(index: Int) { - self.stringValue = "Index \(index)" - self.intValue = index - } -} - -fileprivate struct FloatNaNPlaceholder : Codable, Equatable { - init() {} - - func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(Float.nan) - } - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - let float = try container.decode(Float.self) - if !float.isNaN { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Couldn't decode NaN.")) - } - } - - static func ==(_ lhs: FloatNaNPlaceholder, _ rhs: FloatNaNPlaceholder) -> Bool { - return true - } -} - -fileprivate struct DoubleNaNPlaceholder : Codable, Equatable { - init() {} - - func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(Double.nan) - } - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - let double = try container.decode(Double.self) - if !double.isNaN { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Couldn't decode NaN.")) - } - } - - static func ==(_ lhs: DoubleNaNPlaceholder, _ rhs: DoubleNaNPlaceholder) -> Bool { - return true - } -} - -fileprivate enum EitherDecodable : Decodable { - case t(T) - case u(U) - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - do { - self = .t(try container.decode(T.self)) - } catch { - self = .u(try container.decode(U.self)) - } - } -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestLocale.swift b/Darwin/Foundation-swiftoverlay-Tests/TestLocale.swift deleted file mode 100644 index 6b8392f007..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestLocale.swift +++ /dev/null @@ -1,127 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -class TestLocale : XCTestCase { - - func test_bridgingAutoupdating() { - let tester = LocaleBridgingTester() - - do { - let loc = Locale.autoupdatingCurrent - let result = tester.verifyAutoupdating(loc) - XCTAssertTrue(result) - } - - do { - let loc = tester.autoupdatingCurrentLocale() - let result = tester.verifyAutoupdating(loc) - XCTAssertTrue(result) - } - } - - func test_equality() { - let autoupdating = Locale.autoupdatingCurrent - let autoupdating2 = Locale.autoupdatingCurrent - - XCTAssertEqual(autoupdating, autoupdating2) - - let current = Locale.current - - XCTAssertNotEqual(autoupdating, current) - } - - func test_localizedStringFunctions() { - let locale = Locale(identifier: "en") - - XCTAssertEqual("English", locale.localizedString(forIdentifier: "en")) - XCTAssertEqual("France", locale.localizedString(forRegionCode: "fr")) - XCTAssertEqual("Spanish", locale.localizedString(forLanguageCode: "es")) - XCTAssertEqual("Simplified Han", locale.localizedString(forScriptCode: "Hans")) - XCTAssertEqual("Computer", locale.localizedString(forVariantCode: "POSIX")) - XCTAssertEqual("Buddhist Calendar", locale.localizedString(for: .buddhist)) - XCTAssertEqual("US Dollar", locale.localizedString(forCurrencyCode: "USD")) - XCTAssertEqual("Phonebook Sort Order", locale.localizedString(forCollationIdentifier: "phonebook")) - // Need to find a good test case for collator identifier - // XCTAssertEqual("something", locale.localizedString(forCollatorIdentifier: "en")) - } - - func test_properties() { - let locale = Locale(identifier: "zh-Hant-HK") - - XCTAssertEqual("zh-Hant-HK", locale.identifier) - XCTAssertEqual("zh", locale.languageCode) - XCTAssertEqual("HK", locale.regionCode) - XCTAssertEqual("Hant", locale.scriptCode) - XCTAssertEqual("POSIX", Locale(identifier: "en_POSIX").variantCode) - XCTAssertTrue(locale.exemplarCharacterSet != nil) - // The calendar we get back from Locale has the locale set, but not the one we create with Calendar(identifier:). So we configure our comparison calendar first. - var c = Calendar(identifier: .gregorian) - c.locale = Locale(identifier: "en_US") - XCTAssertEqual(c, Locale(identifier: "en_US").calendar) - XCTAssertEqual("「", locale.quotationBeginDelimiter) - XCTAssertEqual("」", locale.quotationEndDelimiter) - XCTAssertEqual("『", locale.alternateQuotationBeginDelimiter) - XCTAssertEqual("』", locale.alternateQuotationEndDelimiter) - XCTAssertEqual("phonebook", Locale(identifier: "en_US@collation=phonebook").collationIdentifier) - XCTAssertEqual(".", locale.decimalSeparator) - - - XCTAssertEqual(".", locale.decimalSeparator) - XCTAssertEqual(",", locale.groupingSeparator) - if #available(macOS 10.11, *) { - XCTAssertEqual("HK$", locale.currencySymbol) - } - XCTAssertEqual("HKD", locale.currencyCode) - - XCTAssertTrue(Locale.availableIdentifiers.count > 0) - XCTAssertTrue(Locale.isoLanguageCodes.count > 0) - XCTAssertTrue(Locale.isoRegionCodes.count > 0) - XCTAssertTrue(Locale.isoCurrencyCodes.count > 0) - XCTAssertTrue(Locale.commonISOCurrencyCodes.count > 0) - - XCTAssertTrue(Locale.preferredLanguages.count > 0) - - // Need to find a good test case for collator identifier - // XCTAssertEqual("something", locale.collatorIdentifier) - } - - func test_AnyHashableContainingLocale() { - let values: [Locale] = [ - Locale(identifier: "en"), - Locale(identifier: "uk"), - Locale(identifier: "uk"), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(Locale.self, type(of: anyHashables[0].base)) - expectEqual(Locale.self, type(of: anyHashables[1].base)) - expectEqual(Locale.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableCreatedFromNSLocale() { - let values: [NSLocale] = [ - NSLocale(localeIdentifier: "en"), - NSLocale(localeIdentifier: "uk"), - NSLocale(localeIdentifier: "uk"), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(Locale.self, type(of: anyHashables[0].base)) - expectEqual(Locale.self, type(of: anyHashables[1].base)) - expectEqual(Locale.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestMeasurement.swift b/Darwin/Foundation-swiftoverlay-Tests/TestMeasurement.swift deleted file mode 100644 index dcc081601c..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestMeasurement.swift +++ /dev/null @@ -1,220 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -// We define our own units here so that we can have closer control over checking the behavior of just struct Measurement and not the rest of Foundation -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -class MyDimensionalUnit : Dimension { - class var unitA : MyDimensionalUnit { - return MyDimensionalUnit(symbol: "a", converter: UnitConverterLinear(coefficient: 1)) - } - class var unitKiloA : MyDimensionalUnit { - return MyDimensionalUnit(symbol: "ka", converter: UnitConverterLinear(coefficient: 1_000)) - } - class var unitMegaA : MyDimensionalUnit { - return MyDimensionalUnit(symbol: "Ma", converter: UnitConverterLinear(coefficient: 1_000_000)) - } - override class func baseUnit() -> Self { - return MyDimensionalUnit.unitA as! Self - } -} - -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -class CustomUnit : Unit { - override init(symbol: String) { - super.init(symbol: symbol) - } - - required init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - } - - public static let bugs = CustomUnit(symbol: "bug") - public static let features = CustomUnit(symbol: "feature") -} - -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -class TestMeasurement : XCTestCase { - - func testBasicConstruction() { - let m1 = Measurement(value: 3, unit: MyDimensionalUnit.unitA) - let m2 = Measurement(value: 3, unit: MyDimensionalUnit.unitA) - - let m3 = m1 + m2 - - XCTAssertEqual(6, m3.value) - XCTAssertEqual(m1, m2) - - let m10 = Measurement(value: 2, unit: CustomUnit.bugs) - let m11 = Measurement(value: 2, unit: CustomUnit.bugs) - let m12 = Measurement(value: 3, unit: CustomUnit.bugs) - - XCTAssertEqual(m10, m11) - XCTAssertNotEqual(m10, m12) - - // This test has 2 + 2 + 3 bugs - XCTAssertEqual((m10 + m11 + m12).value, 7) - } - - func testConversion() { - let m1 = Measurement(value: 1000, unit: MyDimensionalUnit.unitA) - let kiloM1 = Measurement(value: 1, unit: MyDimensionalUnit.unitKiloA) - - let result = m1.converted(to: MyDimensionalUnit.unitKiloA) - XCTAssertEqual(kiloM1, result) - - let sameResult = m1.converted(to: MyDimensionalUnit.unitA) - XCTAssertEqual(sameResult, m1) - - // This correctly fails to build - - // let m2 = Measurement(value: 1, unit: CustomUnit.bugs) - // m2.converted(to: MyDimensionalUnit.unitKiloA) - } - - func testOperators() { - // Which is bigger: 1 ka or 1 Ma? - let oneKiloA = Measurement(value: 1, unit: MyDimensionalUnit.unitKiloA) - let oneMegaA = Measurement(value: 1, unit: MyDimensionalUnit.unitMegaA) - - XCTAssertTrue(oneKiloA < oneMegaA) - XCTAssertFalse(oneKiloA > oneMegaA) - XCTAssertTrue(oneKiloA * 2000 > oneMegaA) - XCTAssertTrue(oneMegaA / 1_000_000 < oneKiloA) - XCTAssertTrue(2000 * oneKiloA > oneMegaA) - XCTAssertTrue(2 / oneMegaA > oneMegaA) - XCTAssertEqual(2 / (oneMegaA * 2), oneMegaA) - XCTAssertTrue(oneMegaA <= oneKiloA * 1000) - XCTAssertTrue(oneMegaA - oneKiloA <= oneKiloA * 1000) - XCTAssertTrue(oneMegaA >= oneKiloA * 1000) - XCTAssertTrue(oneMegaA >= ((oneKiloA * 1000) - oneKiloA)) - - // Dynamically different dimensions - XCTAssertEqual(Measurement(value: 1_001_000, unit: MyDimensionalUnit.unitA), oneMegaA + oneKiloA) - - var bugCount = Measurement(value: 1, unit: CustomUnit.bugs) - XCTAssertEqual(bugCount.value, 1) - bugCount = bugCount + Measurement(value: 4, unit: CustomUnit.bugs) - XCTAssertEqual(bugCount.value, 5) - } - - func testUnits() { - XCTAssertEqual(MyDimensionalUnit.unitA, MyDimensionalUnit.unitA) - XCTAssertTrue(MyDimensionalUnit.unitA == MyDimensionalUnit.unitA) - } - - func testMeasurementFormatter() { - let formatter = MeasurementFormatter() - let measurement = Measurement(value: 100, unit: UnitLength.kilometers) - let result = formatter.string(from: measurement) - - // Just make sure we get a result at all here - XCTAssertFalse(result.isEmpty) - } - - func testEquality() { - let fiveKM = Measurement(value: 5, unit: UnitLength.kilometers) - let fiveSeconds = Measurement(value: 5, unit: UnitDuration.seconds) - let fiveThousandM = Measurement(value: 5000, unit: UnitLength.meters) - - XCTAssertTrue(fiveKM == fiveThousandM) - XCTAssertEqual(fiveKM, fiveThousandM) - XCTAssertFalse(fiveKM == fiveSeconds) - } - - func testComparison() { - let fiveKM = Measurement(value: 5, unit: UnitLength.kilometers) - let fiveThousandM = Measurement(value: 5000, unit: UnitLength.meters) - let sixKM = Measurement(value: 6, unit: UnitLength.kilometers) - let sevenThousandM = Measurement(value: 7000, unit: UnitLength.meters) - - XCTAssertTrue(fiveKM < sixKM) - XCTAssertTrue(fiveKM < sevenThousandM) - XCTAssertTrue(fiveKM <= fiveThousandM) - } - - func testHashing() { - guard #available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) else { return } - let lengths: [[Measurement]] = [ - [ - Measurement(value: 5, unit: UnitLength.kilometers), - Measurement(value: 5000, unit: UnitLength.meters), - Measurement(value: 5000, unit: UnitLength.meters), - ], - [ - Measurement(value: 1, unit: UnitLength.kilometers), - Measurement(value: 1000, unit: UnitLength.meters), - ], - [ - Measurement(value: 1, unit: UnitLength.meters), - Measurement(value: 1000, unit: UnitLength.millimeters), - ], - ] - checkHashableGroups(lengths) - - let durations: [[Measurement]] = [ - [ - Measurement(value: 3600, unit: UnitDuration.seconds), - Measurement(value: 60, unit: UnitDuration.minutes), - Measurement(value: 1, unit: UnitDuration.hours), - ], - [ - Measurement(value: 1800, unit: UnitDuration.seconds), - Measurement(value: 30, unit: UnitDuration.minutes), - Measurement(value: 0.5, unit: UnitDuration.hours), - ] - ] - checkHashableGroups(durations) - - let custom: [Measurement] = [ - Measurement(value: 1, unit: CustomUnit.bugs), - Measurement(value: 2, unit: CustomUnit.bugs), - Measurement(value: 3, unit: CustomUnit.bugs), - Measurement(value: 4, unit: CustomUnit.bugs), - Measurement(value: 1, unit: CustomUnit.features), - Measurement(value: 2, unit: CustomUnit.features), - Measurement(value: 3, unit: CustomUnit.features), - Measurement(value: 4, unit: CustomUnit.features), - ] - checkHashable(custom, equalityOracle: { $0 == $1 }) - } - - func test_AnyHashableContainingMeasurement() { - let values: [Measurement] = [ - Measurement(value: 100, unit: UnitLength.meters), - Measurement(value: 100, unit: UnitLength.kilometers), - Measurement(value: 100, unit: UnitLength.kilometers), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(Measurement.self, type(of: anyHashables[0].base)) - expectEqual(Measurement.self, type(of: anyHashables[1].base)) - expectEqual(Measurement.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableCreatedFromNSMeasurement() { - let values: [NSMeasurement] = [ - NSMeasurement(doubleValue: 100, unit: UnitLength.meters), - NSMeasurement(doubleValue: 100, unit: UnitLength.kilometers), - NSMeasurement(doubleValue: 100, unit: UnitLength.kilometers), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(Measurement.self, type(of: anyHashables[0].base)) - expectEqual(Measurement.self, type(of: anyHashables[1].base)) - expectEqual(Measurement.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestNSRange.swift b/Darwin/Foundation-swiftoverlay-Tests/TestNSRange.swift deleted file mode 100644 index b586a00502..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestNSRange.swift +++ /dev/null @@ -1,142 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -class TestNSRange : XCTestCase { - func testEquality() { - let r1 = NSRange(location: 1, length: 10) - let r2 = NSRange(location: 1, length: 11) - let r3 = NSRange(location: 2, length: 10) - let r4 = NSRange(location: 1, length: 10) - let r5 = NSRange(location: NSNotFound, length: 0) - let r6 = NSRange(location: NSNotFound, length: 2) - - XCTAssertNotEqual(r1, r2) - XCTAssertNotEqual(r1, r3) - XCTAssertEqual(r1, r4) - XCTAssertNotEqual(r1, r5) - XCTAssertNotEqual(r5, r6) - } - - func testDescription() { - let r1 = NSRange(location: 0, length: 22) - let r2 = NSRange(location: 10, length: 22) - let r3 = NSRange(location: NSNotFound, length: 0) - let r4 = NSRange(location: NSNotFound, length: 22) - XCTAssertEqual("{0, 22}", r1.description) - XCTAssertEqual("{10, 22}", r2.description) - XCTAssertEqual("{\(NSNotFound), 0}", r3.description) - XCTAssertEqual("{\(NSNotFound), 22}", r4.description) - - XCTAssertEqual("{0, 22}", r1.debugDescription) - XCTAssertEqual("{10, 22}", r2.debugDescription) - XCTAssertEqual("{NSNotFound, 0}", r3.debugDescription) - XCTAssertEqual("{NSNotFound, 22}", r4.debugDescription) - } - - func testCreationFromString() { - let r1 = NSRange("") - XCTAssertNil(r1) - let r2 = NSRange("1") - XCTAssertNil(r2) - let r3 = NSRange("1 2") - XCTAssertEqual(NSRange(location: 1, length: 2), r3) - let r4 = NSRange("{1 8") - XCTAssertEqual(NSRange(location: 1, length: 8), r4) - let r5 = NSRange("1.8") - XCTAssertNil(r5) - let r6 = NSRange("1-9") - XCTAssertEqual(NSRange(location: 1, length: 9), r6) - let r7 = NSRange("{1,9}") - XCTAssertEqual(NSRange(location: 1, length: 9), r7) - let r8 = NSRange("{1,9}asdfasdf") - XCTAssertEqual(NSRange(location: 1, length: 9), r8) - let r9 = NSRange("{1,9}{2,7}") - XCTAssertEqual(NSRange(location: 1, length: 9), r9) - let r10 = NSRange("{1,9}") - XCTAssertEqual(NSRange(location: 1, length: 9), r10) - let r11 = NSRange("{1.0,9}") - XCTAssertEqual(NSRange(location: 1, length: 9), r11) - let r12 = NSRange("{1,9.0}") - XCTAssertEqual(NSRange(location: 1, length: 9), r12) - let r13 = NSRange("{1.2,9}") - XCTAssertNil(r13) - let r14 = NSRange("{1,9.8}") - XCTAssertNil(r14) - } - - func testHashing() { - let large = Int.max >> 2 - let samples: [NSRange] = [ - NSRange(location: 1, length: 1), - NSRange(location: 1, length: 2), - NSRange(location: 2, length: 1), - NSRange(location: 2, length: 2), - NSRange(location: large, length: large), - NSRange(location: 0, length: large), - NSRange(location: large, length: 0), - ] - checkHashable(samples, equalityOracle: { $0 == $1 }) - } - - func testBounding() { - let r1 = NSRange(location: 1000, length: 2222) - XCTAssertEqual(r1.location, r1.lowerBound) - XCTAssertEqual(r1.location + r1.length, r1.upperBound) - } - - func testContains() { - let r1 = NSRange(location: 1000, length: 2222) - XCTAssertFalse(r1.contains(3)) - XCTAssertTrue(r1.contains(1001)) - XCTAssertFalse(r1.contains(4000)) - } - - func testUnion() { - let r1 = NSRange(location: 10, length: 20) - let r2 = NSRange(location: 30, length: 5) - let union1 = r1.union(r2) - - XCTAssertEqual(Swift.min(r1.lowerBound, r2.lowerBound), union1.lowerBound) - XCTAssertEqual(Swift.max(r1.upperBound, r2.upperBound), union1.upperBound) - - let r3 = NSRange(location: 10, length: 20) - let r4 = NSRange(location: 11, length: 5) - let union2 = r3.union(r4) - - XCTAssertEqual(Swift.min(r3.lowerBound, r4.lowerBound), union2.lowerBound) - XCTAssertEqual(Swift.max(r3.upperBound, r4.upperBound), union2.upperBound) - - let r5 = NSRange(location: 10, length: 20) - let r6 = NSRange(location: 11, length: 29) - let union3 = r5.union(r6) - - XCTAssertEqual(Swift.min(r5.lowerBound, r6.upperBound), union3.lowerBound) - XCTAssertEqual(Swift.max(r5.upperBound, r6.upperBound), union3.upperBound) - } - - func testIntersection() { - let r1 = NSRange(location: 1, length: 7) - let r2 = NSRange(location: 2, length: 20) - let r3 = NSRange(location: 2, length: 2) - let r4 = NSRange(location: 10, length: 7) - - let intersection1 = r1.intersection(r2) - XCTAssertEqual(NSRange(location: 2, length: 6), intersection1) - let intersection2 = r1.intersection(r3) - XCTAssertEqual(NSRange(location: 2, length: 2), intersection2) - let intersection3 = r1.intersection(r4) - XCTAssertEqual(nil, intersection3) - } -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestNSString.swift b/Darwin/Foundation-swiftoverlay-Tests/TestNSString.swift deleted file mode 100644 index 2f76ef4848..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestNSString.swift +++ /dev/null @@ -1,50 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -class TestNSString : XCTestCase { - - func test_equalOverflow() { - let cyrillic = "чебурашка@ящик-с-апельсинами.рф" - let other = getNSStringEqualTestString() - print(NSStringBridgeTestEqual(cyrillic, other)) - } - - func test_smallString_BOM() { - let bom = "\u{FEFF}" // U+FEFF (ZERO WIDTH NO-BREAK SPACE) -// XCTAssertEqual(1, NSString(string: bom).length) -// XCTAssertEqual(4, NSString(string: "\(bom)abc").length) -// XCTAssertEqual(5, NSString(string: "\(bom)\(bom)abc").length) -// XCTAssertEqual(4, NSString(string: "a\(bom)bc").length) -// XCTAssertEqual(13, NSString(string: "\(bom)234567890123").length) -// XCTAssertEqual(14, NSString(string: "\(bom)2345678901234").length) - - XCTAssertEqual(1, (bom as NSString).length) - XCTAssertEqual(4, ("\(bom)abc" as NSString).length) - XCTAssertEqual(5, ("\(bom)\(bom)abc" as NSString).length) - XCTAssertEqual(4, ("a\(bom)bc" as NSString).length) - XCTAssertEqual(13, ("\(bom)234567890123" as NSString).length) - XCTAssertEqual(14, ("\(bom)2345678901234" as NSString).length) - - let string = "\(bom)abc" - let middleIndex = string.index(string.startIndex, offsetBy: 2) - string.enumerateSubstrings(in: middleIndex.. Foundation.Notification's equality relation isn't reflexive - let name = Notification.Name("name") - let a = NonHashableValueType(1) - let b = NonHashableValueType(2) - // Currently none of these values compare equal to themselves: - let values: [Notification] = [ - Notification(name: name, object: a, userInfo: nil), - Notification(name: name, object: b, userInfo: nil), - Notification(name: name, object: nil, userInfo: ["foo": a]), - Notification(name: name, object: nil, userInfo: ["foo": b]), - ] - #if true // What we have - for value in values { - XCTAssertNotEqual(value, value) - } - #else // What we want - checkHashable(values, equalityOracle: { $0 == $1 }) - #endif - } -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestPersonNameComponents.swift b/Darwin/Foundation-swiftoverlay-Tests/TestPersonNameComponents.swift deleted file mode 100644 index affcfa37ed..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestPersonNameComponents.swift +++ /dev/null @@ -1,96 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import CoreFoundation -import XCTest - -class TestPersonNameComponents : XCTestCase { - @available(macOS 10.11, iOS 9.0, *) - func makePersonNameComponents(givenName: String, familyName: String) -> PersonNameComponents { - var result = PersonNameComponents() - result.givenName = givenName - result.familyName = familyName - return result - } - - func test_Hashing() { - guard #available(macOS 10.13, iOS 11.0, *) else { - // PersonNameComponents was available in earlier versions, but its - // hashing did not match its definition for equality. - return - } - - let values: [[PersonNameComponents]] = [ - [ - makePersonNameComponents(givenName: "Kevin", familyName: "Frank"), - makePersonNameComponents(givenName: "Kevin", familyName: "Frank"), - ], - [ - makePersonNameComponents(givenName: "John", familyName: "Frank"), - makePersonNameComponents(givenName: "John", familyName: "Frank"), - ], - [ - makePersonNameComponents(givenName: "Kevin", familyName: "Appleseed"), - makePersonNameComponents(givenName: "Kevin", familyName: "Appleseed"), - ], - [ - makePersonNameComponents(givenName: "John", familyName: "Appleseed"), - makePersonNameComponents(givenName: "John", familyName: "Appleseed"), - ] - ] - checkHashableGroups( - values, - // FIXME: PersonNameComponents hashes aren't seeded. - allowIncompleteHashing: true) - } - - func test_AnyHashableContainingPersonNameComponents() { - if #available(macOS 10.11, iOS 9.0, *) { - let values: [PersonNameComponents] = [ - makePersonNameComponents(givenName: "Kevin", familyName: "Frank"), - makePersonNameComponents(givenName: "John", familyName: "Appleseed"), - makePersonNameComponents(givenName: "John", familyName: "Appleseed"), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(PersonNameComponents.self, type(of: anyHashables[0].base)) - expectEqual(PersonNameComponents.self, type(of: anyHashables[1].base)) - expectEqual(PersonNameComponents.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - } - - @available(macOS 10.11, iOS 9.0, *) - func makeNSPersonNameComponents(givenName: String, familyName: String) -> NSPersonNameComponents { - let result = NSPersonNameComponents() - result.givenName = givenName - result.familyName = familyName - return result - } - - func test_AnyHashableCreatedFromNSPersonNameComponents() { - if #available(macOS 10.11, iOS 9.0, *) { - let values: [NSPersonNameComponents] = [ - makeNSPersonNameComponents(givenName: "Kevin", familyName: "Frank"), - makeNSPersonNameComponents(givenName: "John", familyName: "Appleseed"), - makeNSPersonNameComponents(givenName: "John", familyName: "Appleseed"), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(PersonNameComponents.self, type(of: anyHashables[0].base)) - expectEqual(PersonNameComponents.self, type(of: anyHashables[1].base)) - expectEqual(PersonNameComponents.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - } -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestPlistEncoder.swift b/Darwin/Foundation-swiftoverlay-Tests/TestPlistEncoder.swift deleted file mode 100644 index 863745bcc8..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestPlistEncoder.swift +++ /dev/null @@ -1,857 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Swift -import Foundation -import XCTest - -// MARK: - Test Suite - -class TestPropertyListEncoder : XCTestCase { - // MARK: - Encoding Top-Level Empty Types - func testEncodingTopLevelEmptyStruct() { - let empty = EmptyStruct() - _testRoundTrip(of: empty, in: .binary, expectedPlist: _plistEmptyDictionaryBinary) - _testRoundTrip(of: empty, in: .xml, expectedPlist: _plistEmptyDictionaryXML) - } - - func testEncodingTopLevelEmptyClass() { - let empty = EmptyClass() - _testRoundTrip(of: empty, in: .binary, expectedPlist: _plistEmptyDictionaryBinary) - _testRoundTrip(of: empty, in: .xml, expectedPlist: _plistEmptyDictionaryXML) - } - - // MARK: - Encoding Top-Level Single-Value Types - func testEncodingTopLevelSingleValueEnum() { - let s1 = Switch.off - _testEncodeFailure(of: s1, in: .binary) - _testEncodeFailure(of: s1, in: .xml) - _testRoundTrip(of: TopLevelWrapper(s1), in: .binary) - _testRoundTrip(of: TopLevelWrapper(s1), in: .xml) - - let s2 = Switch.on - _testEncodeFailure(of: s2, in: .binary) - _testEncodeFailure(of: s2, in: .xml) - _testRoundTrip(of: TopLevelWrapper(s2), in: .binary) - _testRoundTrip(of: TopLevelWrapper(s2), in: .xml) - } - - func testEncodingTopLevelSingleValueStruct() { - let t = Timestamp(3141592653) - _testEncodeFailure(of: t, in: .binary) - _testEncodeFailure(of: t, in: .xml) - _testRoundTrip(of: TopLevelWrapper(t), in: .binary) - _testRoundTrip(of: TopLevelWrapper(t), in: .xml) - } - - func testEncodingTopLevelSingleValueClass() { - let c = Counter() - _testEncodeFailure(of: c, in: .binary) - _testEncodeFailure(of: c, in: .xml) - _testRoundTrip(of: TopLevelWrapper(c), in: .binary) - _testRoundTrip(of: TopLevelWrapper(c), in: .xml) - } - - // MARK: - Encoding Top-Level Structured Types - func testEncodingTopLevelStructuredStruct() { - // Address is a struct type with multiple fields. - let address = Address.testValue - _testRoundTrip(of: address, in: .binary) - _testRoundTrip(of: address, in: .xml) - } - - func testEncodingTopLevelStructuredClass() { - // Person is a class with multiple fields. - let person = Person.testValue - _testRoundTrip(of: person, in: .binary) - _testRoundTrip(of: person, in: .xml) - } - - func testEncodingTopLevelStructuredSingleStruct() { - // Numbers is a struct which encodes as an array through a single value container. - let numbers = Numbers.testValue - _testRoundTrip(of: numbers, in: .binary) - _testRoundTrip(of: numbers, in: .xml) - } - - func testEncodingTopLevelStructuredSingleClass() { - // Mapping is a class which encodes as a dictionary through a single value container. - let mapping = Mapping.testValue - _testRoundTrip(of: mapping, in: .binary) - _testRoundTrip(of: mapping, in: .xml) - } - - func testEncodingTopLevelDeepStructuredType() { - // Company is a type with fields which are Codable themselves. - let company = Company.testValue - _testRoundTrip(of: company, in: .binary) - _testRoundTrip(of: company, in: .xml) - } - - func testEncodingClassWhichSharesEncoderWithSuper() { - // Employee is a type which shares its encoder & decoder with its superclass, Person. - let employee = Employee.testValue - _testRoundTrip(of: employee, in: .binary) - _testRoundTrip(of: employee, in: .xml) - } - - func testEncodingTopLevelNullableType() { - // EnhancedBool is a type which encodes either as a Bool or as nil. - _testEncodeFailure(of: EnhancedBool.true, in: .binary) - _testEncodeFailure(of: EnhancedBool.true, in: .xml) - _testEncodeFailure(of: EnhancedBool.false, in: .binary) - _testEncodeFailure(of: EnhancedBool.false, in: .xml) - _testEncodeFailure(of: EnhancedBool.fileNotFound, in: .binary) - _testEncodeFailure(of: EnhancedBool.fileNotFound, in: .xml) - - _testRoundTrip(of: TopLevelWrapper(EnhancedBool.true), in: .binary) - _testRoundTrip(of: TopLevelWrapper(EnhancedBool.true), in: .xml) - _testRoundTrip(of: TopLevelWrapper(EnhancedBool.false), in: .binary) - _testRoundTrip(of: TopLevelWrapper(EnhancedBool.false), in: .xml) - _testRoundTrip(of: TopLevelWrapper(EnhancedBool.fileNotFound), in: .binary) - _testRoundTrip(of: TopLevelWrapper(EnhancedBool.fileNotFound), in: .xml) - } - - func testEncodingMultipleNestedContainersWithTheSameTopLevelKey() { - guard #available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) else { return } - - struct Model : Codable, Equatable { - let first: String - let second: String - - init(from coder: Decoder) throws { - let container = try coder.container(keyedBy: TopLevelCodingKeys.self) - - let firstNestedContainer = try container.nestedContainer(keyedBy: FirstNestedCodingKeys.self, forKey: .top) - self.first = try firstNestedContainer.decode(String.self, forKey: .first) - - let secondNestedContainer = try container.nestedContainer(keyedBy: SecondNestedCodingKeys.self, forKey: .top) - self.second = try secondNestedContainer.decode(String.self, forKey: .second) - } - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: TopLevelCodingKeys.self) - - var firstNestedContainer = container.nestedContainer(keyedBy: FirstNestedCodingKeys.self, forKey: .top) - try firstNestedContainer.encode(self.first, forKey: .first) - - var secondNestedContainer = container.nestedContainer(keyedBy: SecondNestedCodingKeys.self, forKey: .top) - try secondNestedContainer.encode(self.second, forKey: .second) - } - - init(first: String, second: String) { - self.first = first - self.second = second - } - - static var testValue: Model { - return Model(first: "Johnny Appleseed", - second: "appleseed@apple.com") - } - enum TopLevelCodingKeys : String, CodingKey { - case top - } - - enum FirstNestedCodingKeys : String, CodingKey { - case first - } - enum SecondNestedCodingKeys : String, CodingKey { - case second - } - } - - let model = Model.testValue - let expectedXML = "\n\n\n\n\ttop\n\t\n\t\tfirst\n\t\tJohnny Appleseed\n\t\tsecond\n\t\tappleseed@apple.com\n\t\n\n\n".data(using: .utf8)! - _testRoundTrip(of: model, in: .xml, expectedPlist: expectedXML) - } - - #if false // FIXME: XCTest doesn't support crash tests yet rdar://20195010&22387653 - func testEncodingConflictedTypeNestedContainersWithTheSameTopLevelKey() { - struct Model : Encodable, Equatable { - let first: String - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: TopLevelCodingKeys.self) - - var firstNestedContainer = container.nestedContainer(keyedBy: FirstNestedCodingKeys.self, forKey: .top) - try firstNestedContainer.encode(self.first, forKey: .first) - - // The following line would fail as it attempts to re-encode into already encoded container is invalid. This will always fail - var secondNestedContainer = container.nestedUnkeyedContainer(forKey: .top) - try secondNestedContainer.encode("second") - } - - init(first: String) { - self.first = first - } - - static var testValue: Model { - return Model(first: "Johnny Appleseed") - } - enum TopLevelCodingKeys : String, CodingKey { - case top - } - - enum FirstNestedCodingKeys : String, CodingKey { - case first - } - } - - let model = Model.testValue - // This following test would fail as it attempts to re-encode into already encoded container is invalid. This will always fail - expectCrashLater() - _testEncodeFailure(of: model, in: .xml) - } - #endif - - // MARK: - Encoder Features - func testNestedContainerCodingPaths() { - let encoder = JSONEncoder() - do { - let _ = try encoder.encode(NestedContainersTestType()) - } catch let error as NSError { - XCTFail("Caught error during encoding nested container types: \(error)") - } - } - - func testSuperEncoderCodingPaths() { - let encoder = JSONEncoder() - do { - let _ = try encoder.encode(NestedContainersTestType(testSuperEncoder: true)) - } catch let error as NSError { - XCTFail("Caught error during encoding nested container types: \(error)") - } - } - - func testEncodingTopLevelData() { - let data = try! JSONSerialization.data(withJSONObject: [], options: []) - _testRoundTrip(of: data, in: .binary, expectedPlist: try! PropertyListSerialization.data(fromPropertyList: data, format: .binary, options: 0)) - _testRoundTrip(of: data, in: .xml, expectedPlist: try! PropertyListSerialization.data(fromPropertyList: data, format: .xml, options: 0)) - } - - func testInterceptData() { - let data = try! JSONSerialization.data(withJSONObject: [], options: []) - let topLevel = TopLevelWrapper(data) - let plist = ["value": data] - _testRoundTrip(of: topLevel, in: .binary, expectedPlist: try! PropertyListSerialization.data(fromPropertyList: plist, format: .binary, options: 0)) - _testRoundTrip(of: topLevel, in: .xml, expectedPlist: try! PropertyListSerialization.data(fromPropertyList: plist, format: .xml, options: 0)) - } - - func testInterceptDate() { - let date = Date(timeIntervalSinceReferenceDate: 0) - let topLevel = TopLevelWrapper(date) - let plist = ["value": date] - _testRoundTrip(of: topLevel, in: .binary, expectedPlist: try! PropertyListSerialization.data(fromPropertyList: plist, format: .binary, options: 0)) - _testRoundTrip(of: topLevel, in: .xml, expectedPlist: try! PropertyListSerialization.data(fromPropertyList: plist, format: .xml, options: 0)) - } - - // MARK: - Type coercion - func testTypeCoercion() { - _testRoundTripTypeCoercionFailure(of: [false, true], as: [Int].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [Int8].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [Int16].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [Int32].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [Int64].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [UInt].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [UInt8].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [UInt16].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [UInt32].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [UInt64].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [Float].self) - _testRoundTripTypeCoercionFailure(of: [false, true], as: [Double].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [Int], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [Int8], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [Int16], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [Int32], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [Int64], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [UInt], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [UInt8], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [UInt16], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [UInt32], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0, 1] as [UInt64], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0.0, 1.0] as [Float], as: [Bool].self) - _testRoundTripTypeCoercionFailure(of: [0.0, 1.0] as [Double], as: [Bool].self) - } - - func testDecodingConcreteTypeParameter() { - let encoder = PropertyListEncoder() - guard let plist = try? encoder.encode(Employee.testValue) else { - XCTFail("Unable to encode Employee.") - return - } - - let decoder = PropertyListDecoder() - guard let decoded = try? decoder.decode(Employee.self as Person.Type, from: plist) else { - XCTFail("Failed to decode Employee as Person from plist.") - return - } - - expectEqual(type(of: decoded), Employee.self, "Expected decoded value to be of type Employee; got \(type(of: decoded)) instead.") - } - - // MARK: - Encoder State - // SR-6078 - func testEncoderStateThrowOnEncode() { - struct Wrapper : Encodable { - let value: T - init(_ value: T) { self.value = value } - - func encode(to encoder: Encoder) throws { - // This approximates a subclass calling into its superclass, where the superclass encodes a value that might throw. - // The key here is that getting the superEncoder creates a referencing encoder. - var container = encoder.unkeyedContainer() - let superEncoder = container.superEncoder() - - // Pushing a nested container on leaves the referencing encoder with multiple containers. - var nestedContainer = superEncoder.unkeyedContainer() - try nestedContainer.encode(value) - } - } - - struct Throwing : Encodable { - func encode(to encoder: Encoder) throws { - enum EncodingError : Error { case foo } - throw EncodingError.foo - } - } - - // The structure that would be encoded here looks like - // - // - // - // - // [throwing] - // - // - // - // - // The wrapper asks for an unkeyed container ([^]), gets a super encoder, and creates a nested container into that ([[^]]). - // We then encode an array into that ([[[^]]]), which happens to be a value that causes us to throw an error. - // - // The issue at hand reproduces when you have a referencing encoder (superEncoder() creates one) that has a container on the stack (unkeyedContainer() adds one) that encodes a value going through box_() (Array does that) that encodes something which throws (Throwing does that). - // When reproducing, this will cause a test failure via fatalError(). - _ = try? PropertyListEncoder().encode(Wrapper([Throwing()])) - } - - // MARK: - Encoder State - // SR-6048 - func testDecoderStateThrowOnDecode() { - let plist = try! PropertyListEncoder().encode([1,2,3]) - let _ = try! PropertyListDecoder().decode(EitherDecodable<[String], [Int]>.self, from: plist) - } - - // MARK: - Helper Functions - private var _plistEmptyDictionaryBinary: Data { - return Data(base64Encoded: "YnBsaXN0MDDQCAAAAAAAAAEBAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAJ")! - } - - private var _plistEmptyDictionaryXML: Data { - return "\n\n\n\n\n".data(using: .utf8)! - } - - private func _testEncodeFailure(of value: T, in format: PropertyListSerialization.PropertyListFormat) { - do { - let encoder = PropertyListEncoder() - encoder.outputFormat = format - let _ = try encoder.encode(value) - XCTFail("Encode of top-level \(T.self) was expected to fail.") - } catch {} - } - - private func _testRoundTrip(of value: T, in format: PropertyListSerialization.PropertyListFormat, expectedPlist plist: Data? = nil) where T : Codable, T : Equatable { - var payload: Data! = nil - do { - let encoder = PropertyListEncoder() - encoder.outputFormat = format - payload = try encoder.encode(value) - } catch { - XCTFail("Failed to encode \(T.self) to plist: \(error)") - } - - if let expectedPlist = plist { - XCTAssertEqual(expectedPlist, payload, "Produced plist not identical to expected plist.") - } - - do { - var decodedFormat: PropertyListSerialization.PropertyListFormat = .xml - let decoded = try PropertyListDecoder().decode(T.self, from: payload, format: &decodedFormat) - XCTAssertEqual(format, decodedFormat, "Encountered plist format differed from requested format.") - XCTAssertEqual(decoded, value, "\(T.self) did not round-trip to an equal value.") - } catch { - XCTFail("Failed to decode \(T.self) from plist: \(error)") - } - } - - private func _testRoundTripTypeCoercionFailure(of value: T, as type: U.Type) where T : Codable, U : Codable { - do { - let data = try PropertyListEncoder().encode(value) - let _ = try PropertyListDecoder().decode(U.self, from: data) - XCTFail("Coercion from \(T.self) to \(U.self) was expected to fail.") - } catch {} - } -} - -// MARK: - Helper Global Functions -func XCTAssertEqualPaths(_ lhs: [CodingKey], _ rhs: [CodingKey], _ prefix: String) { - if lhs.count != rhs.count { - XCTFail("\(prefix) [CodingKey].count mismatch: \(lhs.count) != \(rhs.count)") - return - } - - for (key1, key2) in zip(lhs, rhs) { - switch (key1.intValue, key2.intValue) { - case (.none, .none): break - case (.some(let i1), .none): - XCTFail("\(prefix) CodingKey.intValue mismatch: \(type(of: key1))(\(i1)) != nil") - return - case (.none, .some(let i2)): - XCTFail("\(prefix) CodingKey.intValue mismatch: nil != \(type(of: key2))(\(i2))") - return - case (.some(let i1), .some(let i2)): - guard i1 == i2 else { - XCTFail("\(prefix) CodingKey.intValue mismatch: \(type(of: key1))(\(i1)) != \(type(of: key2))(\(i2))") - return - } - - break - } - - XCTAssertEqual(key1.stringValue, key2.stringValue, "\(prefix) CodingKey.stringValue mismatch: \(type(of: key1))('\(key1.stringValue)') != \(type(of: key2))('\(key2.stringValue)')") - } -} - -// MARK: - Test Types -/* FIXME: Import from %S/Inputs/Coding/SharedTypes.swift somehow. */ - -// MARK: - Empty Types -fileprivate struct EmptyStruct : Codable, Equatable { - static func ==(_ lhs: EmptyStruct, _ rhs: EmptyStruct) -> Bool { - return true - } -} - -fileprivate class EmptyClass : Codable, Equatable { - static func ==(_ lhs: EmptyClass, _ rhs: EmptyClass) -> Bool { - return true - } -} - -// MARK: - Single-Value Types -/// A simple on-off switch type that encodes as a single Bool value. -fileprivate enum Switch : Codable { - case off - case on - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - switch try container.decode(Bool.self) { - case false: self = .off - case true: self = .on - } - } - - func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - switch self { - case .off: try container.encode(false) - case .on: try container.encode(true) - } - } -} - -/// A simple timestamp type that encodes as a single Double value. -fileprivate struct Timestamp : Codable, Equatable { - let value: Double - - init(_ value: Double) { - self.value = value - } - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - value = try container.decode(Double.self) - } - - func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(self.value) - } - - static func ==(_ lhs: Timestamp, _ rhs: Timestamp) -> Bool { - return lhs.value == rhs.value - } -} - -/// A simple referential counter type that encodes as a single Int value. -fileprivate final class Counter : Codable, Equatable { - var count: Int = 0 - - init() {} - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - count = try container.decode(Int.self) - } - - func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(self.count) - } - - static func ==(_ lhs: Counter, _ rhs: Counter) -> Bool { - return lhs === rhs || lhs.count == rhs.count - } -} - -// MARK: - Structured Types -/// A simple address type that encodes as a dictionary of values. -fileprivate struct Address : Codable, Equatable { - let street: String - let city: String - let state: String - let zipCode: Int - let country: String - - init(street: String, city: String, state: String, zipCode: Int, country: String) { - self.street = street - self.city = city - self.state = state - self.zipCode = zipCode - self.country = country - } - - static func ==(_ lhs: Address, _ rhs: Address) -> Bool { - return lhs.street == rhs.street && - lhs.city == rhs.city && - lhs.state == rhs.state && - lhs.zipCode == rhs.zipCode && - lhs.country == rhs.country - } - - static var testValue: Address { - return Address(street: "1 Infinite Loop", - city: "Cupertino", - state: "CA", - zipCode: 95014, - country: "United States") - } -} - -/// A simple person class that encodes as a dictionary of values. -fileprivate class Person : Codable, Equatable { - let name: String - let email: String - let website: URL? - - init(name: String, email: String, website: URL? = nil) { - self.name = name - self.email = email - self.website = website - } - - func isEqual(_ other: Person) -> Bool { - return self.name == other.name && - self.email == other.email && - self.website == other.website - } - - static func ==(_ lhs: Person, _ rhs: Person) -> Bool { - return lhs.isEqual(rhs) - } - - class var testValue: Person { - return Person(name: "Johnny Appleseed", email: "appleseed@apple.com") - } -} - -/// A class which shares its encoder and decoder with its superclass. -fileprivate class Employee : Person { - let id: Int - - init(name: String, email: String, website: URL? = nil, id: Int) { - self.id = id - super.init(name: name, email: email, website: website) - } - - enum CodingKeys : String, CodingKey { - case id - } - - required init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - id = try container.decode(Int.self, forKey: .id) - try super.init(from: decoder) - } - - override func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(id, forKey: .id) - try super.encode(to: encoder) - } - - override func isEqual(_ other: Person) -> Bool { - if let employee = other as? Employee { - guard self.id == employee.id else { return false } - } - - return super.isEqual(other) - } - - override class var testValue: Employee { - return Employee(name: "Johnny Appleseed", email: "appleseed@apple.com", id: 42) - } -} - -/// A simple company struct which encodes as a dictionary of nested values. -fileprivate struct Company : Codable, Equatable { - let address: Address - var employees: [Employee] - - init(address: Address, employees: [Employee]) { - self.address = address - self.employees = employees - } - - static func ==(_ lhs: Company, _ rhs: Company) -> Bool { - return lhs.address == rhs.address && lhs.employees == rhs.employees - } - - static var testValue: Company { - return Company(address: Address.testValue, employees: [Employee.testValue]) - } -} - -/// An enum type which decodes from Bool?. -fileprivate enum EnhancedBool : Codable { - case `true` - case `false` - case fileNotFound - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - if container.decodeNil() { - self = .fileNotFound - } else { - let value = try container.decode(Bool.self) - self = value ? .true : .false - } - } - - func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - switch self { - case .true: try container.encode(true) - case .false: try container.encode(false) - case .fileNotFound: try container.encodeNil() - } - } -} - -/// A type which encodes as an array directly through a single value container. -private struct Numbers : Codable, Equatable { - let values = [4, 8, 15, 16, 23, 42] - - init() {} - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - let decodedValues = try container.decode([Int].self) - guard decodedValues == values else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "The Numbers are wrong!")) - } - } - - func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(values) - } - - static func ==(_ lhs: Numbers, _ rhs: Numbers) -> Bool { - return lhs.values == rhs.values - } - - static var testValue: Numbers { - return Numbers() - } -} - -/// A type which encodes as a dictionary directly through a single value container. -fileprivate final class Mapping : Codable, Equatable { - let values: [String : URL] - - init(values: [String : URL]) { - self.values = values - } - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - values = try container.decode([String : URL].self) - } - - func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(values) - } - - static func ==(_ lhs: Mapping, _ rhs: Mapping) -> Bool { - return lhs === rhs || lhs.values == rhs.values - } - - static var testValue: Mapping { - return Mapping(values: ["Apple": URL(string: "http://apple.com")!, - "localhost": URL(string: "http://127.0.0.1")!]) - } -} - -private struct NestedContainersTestType : Encodable { - let testSuperEncoder: Bool - - init(testSuperEncoder: Bool = false) { - self.testSuperEncoder = testSuperEncoder - } - - enum TopLevelCodingKeys : Int, CodingKey { - case a - case b - case c - } - - enum IntermediateCodingKeys : Int, CodingKey { - case one - case two - } - - func encode(to encoder: Encoder) throws { - if self.testSuperEncoder { - var topLevelContainer = encoder.container(keyedBy: TopLevelCodingKeys.self) - XCTAssertEqualPaths(encoder.codingPath, [], "Top-level Encoder's codingPath changed.") - XCTAssertEqualPaths(topLevelContainer.codingPath, [], "New first-level keyed container has non-empty codingPath.") - - let superEncoder = topLevelContainer.superEncoder(forKey: .a) - XCTAssertEqualPaths(encoder.codingPath, [], "Top-level Encoder's codingPath changed.") - XCTAssertEqualPaths(topLevelContainer.codingPath, [], "First-level keyed container's codingPath changed.") - XCTAssertEqualPaths(superEncoder.codingPath, [TopLevelCodingKeys.a], "New superEncoder had unexpected codingPath.") - _testNestedContainers(in: superEncoder, baseCodingPath: [TopLevelCodingKeys.a]) - } else { - _testNestedContainers(in: encoder, baseCodingPath: []) - } - } - - func _testNestedContainers(in encoder: Encoder, baseCodingPath: [CodingKey]) { - XCTAssertEqualPaths(encoder.codingPath, baseCodingPath, "New encoder has non-empty codingPath.") - - // codingPath should not change upon fetching a non-nested container. - var firstLevelContainer = encoder.container(keyedBy: TopLevelCodingKeys.self) - XCTAssertEqualPaths(encoder.codingPath, baseCodingPath, "Top-level Encoder's codingPath changed.") - XCTAssertEqualPaths(firstLevelContainer.codingPath, baseCodingPath, "New first-level keyed container has non-empty codingPath.") - - // Nested Keyed Container - do { - // Nested container for key should have a new key pushed on. - var secondLevelContainer = firstLevelContainer.nestedContainer(keyedBy: IntermediateCodingKeys.self, forKey: .a) - XCTAssertEqualPaths(encoder.codingPath, baseCodingPath, "Top-level Encoder's codingPath changed.") - XCTAssertEqualPaths(firstLevelContainer.codingPath, baseCodingPath, "First-level keyed container's codingPath changed.") - XCTAssertEqualPaths(secondLevelContainer.codingPath, baseCodingPath + [TopLevelCodingKeys.a], "New second-level keyed container had unexpected codingPath.") - - // Inserting a keyed container should not change existing coding paths. - let thirdLevelContainerKeyed = secondLevelContainer.nestedContainer(keyedBy: IntermediateCodingKeys.self, forKey: .one) - XCTAssertEqualPaths(encoder.codingPath, baseCodingPath, "Top-level Encoder's codingPath changed.") - XCTAssertEqualPaths(firstLevelContainer.codingPath, baseCodingPath, "First-level keyed container's codingPath changed.") - XCTAssertEqualPaths(secondLevelContainer.codingPath, baseCodingPath + [TopLevelCodingKeys.a], "Second-level keyed container's codingPath changed.") - XCTAssertEqualPaths(thirdLevelContainerKeyed.codingPath, baseCodingPath + [TopLevelCodingKeys.a, IntermediateCodingKeys.one], "New third-level keyed container had unexpected codingPath.") - - // Inserting an unkeyed container should not change existing coding paths. - let thirdLevelContainerUnkeyed = secondLevelContainer.nestedUnkeyedContainer(forKey: .two) - XCTAssertEqualPaths(encoder.codingPath, baseCodingPath + [], "Top-level Encoder's codingPath changed.") - XCTAssertEqualPaths(firstLevelContainer.codingPath, baseCodingPath + [], "First-level keyed container's codingPath changed.") - XCTAssertEqualPaths(secondLevelContainer.codingPath, baseCodingPath + [TopLevelCodingKeys.a], "Second-level keyed container's codingPath changed.") - XCTAssertEqualPaths(thirdLevelContainerUnkeyed.codingPath, baseCodingPath + [TopLevelCodingKeys.a, IntermediateCodingKeys.two], "New third-level unkeyed container had unexpected codingPath.") - } - - // Nested Unkeyed Container - do { - // Nested container for key should have a new key pushed on. - var secondLevelContainer = firstLevelContainer.nestedUnkeyedContainer(forKey: .b) - XCTAssertEqualPaths(encoder.codingPath, baseCodingPath, "Top-level Encoder's codingPath changed.") - XCTAssertEqualPaths(firstLevelContainer.codingPath, baseCodingPath, "First-level keyed container's codingPath changed.") - XCTAssertEqualPaths(secondLevelContainer.codingPath, baseCodingPath + [TopLevelCodingKeys.b], "New second-level keyed container had unexpected codingPath.") - - // Appending a keyed container should not change existing coding paths. - let thirdLevelContainerKeyed = secondLevelContainer.nestedContainer(keyedBy: IntermediateCodingKeys.self) - XCTAssertEqualPaths(encoder.codingPath, baseCodingPath, "Top-level Encoder's codingPath changed.") - XCTAssertEqualPaths(firstLevelContainer.codingPath, baseCodingPath, "First-level keyed container's codingPath changed.") - XCTAssertEqualPaths(secondLevelContainer.codingPath, baseCodingPath + [TopLevelCodingKeys.b], "Second-level unkeyed container's codingPath changed.") - XCTAssertEqualPaths(thirdLevelContainerKeyed.codingPath, baseCodingPath + [TopLevelCodingKeys.b, _TestKey(index: 0)], "New third-level keyed container had unexpected codingPath.") - - // Appending an unkeyed container should not change existing coding paths. - let thirdLevelContainerUnkeyed = secondLevelContainer.nestedUnkeyedContainer() - XCTAssertEqualPaths(encoder.codingPath, baseCodingPath, "Top-level Encoder's codingPath changed.") - XCTAssertEqualPaths(firstLevelContainer.codingPath, baseCodingPath, "First-level keyed container's codingPath changed.") - XCTAssertEqualPaths(secondLevelContainer.codingPath, baseCodingPath + [TopLevelCodingKeys.b], "Second-level unkeyed container's codingPath changed.") - XCTAssertEqualPaths(thirdLevelContainerUnkeyed.codingPath, baseCodingPath + [TopLevelCodingKeys.b, _TestKey(index: 1)], "New third-level unkeyed container had unexpected codingPath.") - } - } -} - -// MARK: - Helper Types - -/// A key type which can take on any string or integer value. -/// This needs to mirror _PlistKey. -fileprivate struct _TestKey : CodingKey { - var stringValue: String - var intValue: Int? - - init?(stringValue: String) { - self.stringValue = stringValue - self.intValue = nil - } - - init?(intValue: Int) { - self.stringValue = "\(intValue)" - self.intValue = intValue - } - - init(index: Int) { - self.stringValue = "Index \(index)" - self.intValue = index - } -} - -/// Wraps a type T so that it can be encoded at the top level of a payload. -fileprivate struct TopLevelWrapper : Codable, Equatable where T : Codable, T : Equatable { - let value: T - - init(_ value: T) { - self.value = value - } - - static func ==(_ lhs: TopLevelWrapper, _ rhs: TopLevelWrapper) -> Bool { - return lhs.value == rhs.value - } -} - -fileprivate enum EitherDecodable : Decodable { - case t(T) - case u(U) - - init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - if let t = try? container.decode(T.self) { - self = .t(t) - } else if let u = try? container.decode(U.self) { - self = .u(u) - } else { - throw DecodingError.dataCorruptedError(in: container, debugDescription: "Data was neither \(T.self) nor \(U.self).") - } - } -} - diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestProgress.swift b/Darwin/Foundation-swiftoverlay-Tests/TestProgress.swift deleted file mode 100644 index e15421c6e1..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestProgress.swift +++ /dev/null @@ -1,62 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -class TestProgress : XCTestCase { - func testUserInfoConveniences() { - if #available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) { - let p = Progress(parent:nil, userInfo: nil) - - XCTAssertNil(p.userInfo[.throughputKey]) - XCTAssertNil(p.throughput) - p.throughput = 50 - XCTAssertEqual(p.throughput, 50) - XCTAssertNotNil(p.userInfo[.throughputKey]) - - XCTAssertNil(p.userInfo[.estimatedTimeRemainingKey]) - XCTAssertNil(p.estimatedTimeRemaining) - p.estimatedTimeRemaining = 100 - XCTAssertEqual(p.estimatedTimeRemaining, 100) - XCTAssertNotNil(p.userInfo[.estimatedTimeRemainingKey]) - - XCTAssertNil(p.userInfo[.fileTotalCountKey]) - XCTAssertNil(p.fileTotalCount) - p.fileTotalCount = 42 - XCTAssertEqual(p.fileTotalCount, 42) - XCTAssertNotNil(p.userInfo[.fileTotalCountKey]) - - XCTAssertNil(p.userInfo[.fileCompletedCountKey]) - XCTAssertNil(p.fileCompletedCount) - p.fileCompletedCount = 24 - XCTAssertEqual(p.fileCompletedCount, 24) - XCTAssertNotNil(p.userInfo[.fileCompletedCountKey]) - } - } - - func testPerformAsCurrent() { - if #available(macOS 10.11, iOS 8.0, *) { - // This test can be enabled once is in the SDK - /* - let p = Progress.discreteProgress(totalUnitCount: 10) - let r = p.performAsCurrent(withPendingUnitCount: 10) { - XCTAssertNotNil(Progress.current()) - return 42 - } - XCTAssertEqual(r, 42) - XCTAssertEqual(p.completedUnitCount, 10) - XCTAssertNil(Progress.current()) - */ - } - } -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestTimeZone.swift b/Darwin/Foundation-swiftoverlay-Tests/TestTimeZone.swift deleted file mode 100644 index 09b769710e..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestTimeZone.swift +++ /dev/null @@ -1,79 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -class TestTimeZone : XCTestCase { - - func test_timeZoneBasics() { - let tz = TimeZone(identifier: "America/Los_Angeles")! - - XCTAssertTrue(!tz.identifier.isEmpty) - } - - func test_bridgingAutoupdating() { - let tester = TimeZoneBridgingTester() - - do { - let tz = TimeZone.autoupdatingCurrent - let result = tester.verifyAutoupdating(tz) - XCTAssertTrue(result) - } - - // Round trip an autoupdating calendar - do { - let tz = tester.autoupdatingCurrentTimeZone() - let result = tester.verifyAutoupdating(tz) - XCTAssertTrue(result) - } - } - - func test_equality() { - let autoupdating = TimeZone.autoupdatingCurrent - let autoupdating2 = TimeZone.autoupdatingCurrent - - XCTAssertEqual(autoupdating, autoupdating2) - - let current = TimeZone.current - - XCTAssertNotEqual(autoupdating, current) - } - - func test_AnyHashableContainingTimeZone() { - let values: [TimeZone] = [ - TimeZone(identifier: "America/Los_Angeles")!, - TimeZone(identifier: "Europe/Kiev")!, - TimeZone(identifier: "Europe/Kiev")!, - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(TimeZone.self, type(of: anyHashables[0].base)) - expectEqual(TimeZone.self, type(of: anyHashables[1].base)) - expectEqual(TimeZone.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableCreatedFromNSTimeZone() { - let values: [NSTimeZone] = [ - NSTimeZone(name: "America/Los_Angeles")!, - NSTimeZone(name: "Europe/Kiev")!, - NSTimeZone(name: "Europe/Kiev")!, - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(TimeZone.self, type(of: anyHashables[0].base)) - expectEqual(TimeZone.self, type(of: anyHashables[1].base)) - expectEqual(TimeZone.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestURL.swift b/Darwin/Foundation-swiftoverlay-Tests/TestURL.swift deleted file mode 100644 index adcf128bc3..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestURL.swift +++ /dev/null @@ -1,410 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -class TestURL : XCTestCase { - - func testBasics() { - let url = URL(fileURLWithPath: NSTemporaryDirectory()) - - XCTAssertTrue(url.pathComponents.count > 0) - } - - func testProperties() { - let url = URL(fileURLWithPath: "/") - do { - let resourceValues = try url.resourceValues(forKeys: [.isVolumeKey, .nameKey]) - if let isVolume = resourceValues.isVolume { - XCTAssertTrue(isVolume) - } - XCTAssertNotNil(resourceValues.name) - } catch { - XCTAssertTrue(false, "Should not have thrown") - } - } - - func testSetProperties() { - // Create a temporary file - var file = URL(fileURLWithPath: NSTemporaryDirectory()) - let name = "my_great_file" + UUID().uuidString - file.appendPathComponent(name) - let data = Data(bytes: [1, 2, 3, 4, 5]) - do { - try data.write(to: file) - } catch { - XCTAssertTrue(false, "Unable to write data") - } - - // Modify an existing resource value - do { - var resourceValues = try file.resourceValues(forKeys: [.nameKey]) - XCTAssertNotNil(resourceValues.name) - XCTAssertEqual(resourceValues.name!, name) - - let newName = "goodbye cruel " + UUID().uuidString - resourceValues.name = newName - try file.setResourceValues(resourceValues) - } catch { - XCTAssertTrue(false, "Unable to set resources") - } - } - -#if os(macOS) - func testQuarantineProperties() { - // Test the quarantine stuff; it has special logic - if #available(macOS 10.11, iOS 9.0, *) { - // Create a temporary file - var file = URL(fileURLWithPath: NSTemporaryDirectory()) - let name = "my_great_file" + UUID().uuidString - file.appendPathComponent(name) - let data = Data(bytes: [1, 2, 3, 4, 5]) - do { - try data.write(to: file) - } catch { - XCTAssertTrue(false, "Unable to write data") - } - - // Set the quarantine info on a file - do { - var resourceValues = URLResourceValues() - resourceValues.quarantineProperties = ["LSQuarantineAgentName" : "TestURL"] - try file.setResourceValues(resourceValues) - } catch { - XCTAssertTrue(false, "Unable to set quarantine info") - } - - // Get the quarantine info back - do { - var resourceValues = try file.resourceValues(forKeys: [.quarantinePropertiesKey]) - XCTAssertEqual(resourceValues.quarantineProperties?["LSQuarantineAgentName"] as? String, "TestURL") - } catch { - XCTAssertTrue(false, "Unable to get quarantine info") - } - - // Clear the quarantine info - do { - var resourceValues = URLResourceValues() - resourceValues.quarantineProperties = nil // this effectively sets a flag - try file.setResourceValues(resourceValues) - - // Make sure that the resourceValues property returns nil - XCTAssertNil(resourceValues.quarantineProperties) - } catch { - XCTAssertTrue(false, "Unable to clear quarantine info") - } - - // Get the quarantine info back again - do { - var resourceValues = try file.resourceValues(forKeys: [.quarantinePropertiesKey]) - XCTAssertNil(resourceValues.quarantineProperties) - } catch { - XCTAssertTrue(false, "Unable to get quarantine info after clearing") - } - - } - } -#endif - - func testMoreSetProperties() { - // Create a temporary file - var file = URL(fileURLWithPath: NSTemporaryDirectory()) - let name = "my_great_file" + UUID().uuidString - file.appendPathComponent(name) - let data = Data(bytes: [1, 2, 3, 4, 5]) - do { - try data.write(to: file) - } catch { - XCTAssertTrue(false, "Unable to write data") - } - - do { - var resourceValues = try file.resourceValues(forKeys: [.labelNumberKey]) - XCTAssertNotNil(resourceValues.labelNumber) - - // set label number - resourceValues.labelNumber = 1 - try file.setResourceValues(resourceValues) - - // get label number - let _ = try file.resourceValues(forKeys: [.labelNumberKey]) - XCTAssertNotNil(resourceValues.labelNumber) - XCTAssertEqual(resourceValues.labelNumber!, 1) - } catch (let e as NSError) { - XCTAssertTrue(false, "Unable to load or set resources \(e)") - } catch { - XCTAssertTrue(false, "Unable to load or set resources (mysterious error)") - } - - // Construct values from scratch - do { - var resourceValues = URLResourceValues() - resourceValues.labelNumber = 2 - - try file.setResourceValues(resourceValues) - let resourceValues2 = try file.resourceValues(forKeys: [.labelNumberKey]) - XCTAssertNotNil(resourceValues2.labelNumber) - XCTAssertEqual(resourceValues2.labelNumber!, 2) - } catch (let e as NSError) { - XCTAssertTrue(false, "Unable to load or set resources \(e)") - } catch { - XCTAssertTrue(false, "Unable to load or set resources (mysterious error)") - } - - do { - try FileManager.default.removeItem(at: file) - } catch { - XCTAssertTrue(false, "Unable to remove file") - } - - } - - func testURLComponents() { - // Not meant to be a test of all URL components functionality, just some basic bridging stuff - let s = "http://www.apple.com/us/search/ipad?src=global%7Cnav" - var components = URLComponents(string: s)! - XCTAssertNotNil(components) - - XCTAssertNotNil(components.host) - XCTAssertEqual("www.apple.com", components.host) - - - if #available(macOS 10.11, iOS 9.0, *) { - let rangeOfHost = components.rangeOfHost! - XCTAssertNotNil(rangeOfHost) - XCTAssertEqual(s[rangeOfHost], "www.apple.com") - } - - if #available(macOS 10.10, iOS 8.0, *) { - let qi = components.queryItems! - XCTAssertNotNil(qi) - - XCTAssertEqual(1, qi.count) - let first = qi[0] - - XCTAssertEqual("src", first.name) - XCTAssertNotNil(first.value) - XCTAssertEqual("global|nav", first.value) - } - - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - components.percentEncodedQuery = "name1%E2%80%A2=value1%E2%80%A2&name2%E2%80%A2=value2%E2%80%A2" - var qi = components.queryItems! - XCTAssertNotNil(qi) - - XCTAssertEqual(2, qi.count) - - XCTAssertEqual("name1•", qi[0].name) - XCTAssertNotNil(qi[0].value) - XCTAssertEqual("value1•", qi[0].value) - - XCTAssertEqual("name2•", qi[1].name) - XCTAssertNotNil(qi[1].value) - XCTAssertEqual("value2•", qi[1].value) - - qi = components.percentEncodedQueryItems! - XCTAssertNotNil(qi) - - XCTAssertEqual(2, qi.count) - - XCTAssertEqual("name1%E2%80%A2", qi[0].name) - XCTAssertNotNil(qi[0].value) - XCTAssertEqual("value1%E2%80%A2", qi[0].value) - - XCTAssertEqual("name2%E2%80%A2", qi[1].name) - XCTAssertNotNil(qi[0].value) - XCTAssertEqual("value2%E2%80%A2", qi[1].value) - - qi[0].name = "%E2%80%A2name1" - qi[0].value = "%E2%80%A2value1" - qi[1].name = "%E2%80%A2name2" - qi[1].value = "%E2%80%A2value2" - - components.percentEncodedQueryItems = qi - - XCTAssertEqual("%E2%80%A2name1=%E2%80%A2value1&%E2%80%A2name2=%E2%80%A2value2", components.percentEncodedQuery) - } - } - - func testURLResourceValues() { - - let fileName = "temp_file" - var dir = URL(fileURLWithPath: NSTemporaryDirectory()) - dir.appendPathComponent(UUID().uuidString) - - try! FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true, attributes: nil) - - dir.appendPathComponent(fileName) - try! Data(bytes: [1,2,3,4]).write(to: dir) - - defer { - do { - try FileManager.default.removeItem(at: dir) - } catch { - // Oh well - } - } - - do { - let values = try dir.resourceValues(forKeys: [.nameKey, .isDirectoryKey]) - XCTAssertEqual(values.name, fileName) - XCTAssertFalse(values.isDirectory!) - XCTAssertEqual(nil, values.creationDate) // Didn't ask for this - } catch { - XCTAssertTrue(false, "Unable to get resource value") - } - - let originalDate : Date - do { - var values = try dir.resourceValues(forKeys: [.creationDateKey]) - XCTAssertNotEqual(nil, values.creationDate) - originalDate = values.creationDate! - } catch { - originalDate = Date() - XCTAssertTrue(false, "Unable to get creation date") - } - - let newDate = originalDate + 100 - - do { - var values = URLResourceValues() - values.creationDate = newDate - try dir.setResourceValues(values) - } catch { - XCTAssertTrue(false, "Unable to set resource value") - } - - do { - let values = try dir.resourceValues(forKeys: [.creationDateKey]) - XCTAssertEqual(newDate, values.creationDate) - } catch { - XCTAssertTrue(false, "Unable to get values") - } - } - - func test_AnyHashableContainingURL() { - let values: [URL] = [ - URL(string: "https://example.com/")!, - URL(string: "https://example.org/")!, - URL(string: "https://example.org/")!, - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(URL.self, type(of: anyHashables[0].base)) - expectEqual(URL.self, type(of: anyHashables[1].base)) - expectEqual(URL.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableCreatedFromNSURL() { - let values: [NSURL] = [ - NSURL(string: "https://example.com/")!, - NSURL(string: "https://example.org/")!, - NSURL(string: "https://example.org/")!, - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(URL.self, type(of: anyHashables[0].base)) - expectEqual(URL.self, type(of: anyHashables[1].base)) - expectEqual(URL.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableContainingURLComponents() { - let values: [URLComponents] = [ - URLComponents(string: "https://example.com/")!, - URLComponents(string: "https://example.org/")!, - URLComponents(string: "https://example.org/")!, - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(URLComponents.self, type(of: anyHashables[0].base)) - expectEqual(URLComponents.self, type(of: anyHashables[1].base)) - expectEqual(URLComponents.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableCreatedFromNSURLComponents() { - let values: [NSURLComponents] = [ - NSURLComponents(string: "https://example.com/")!, - NSURLComponents(string: "https://example.org/")!, - NSURLComponents(string: "https://example.org/")!, - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(URLComponents.self, type(of: anyHashables[0].base)) - expectEqual(URLComponents.self, type(of: anyHashables[1].base)) - expectEqual(URLComponents.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableContainingURLQueryItem() { - if #available(macOS 10.10, iOS 8.0, *) { - let values: [URLQueryItem] = [ - URLQueryItem(name: "foo", value: nil), - URLQueryItem(name: "bar", value: nil), - URLQueryItem(name: "bar", value: nil), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(URLQueryItem.self, type(of: anyHashables[0].base)) - expectEqual(URLQueryItem.self, type(of: anyHashables[1].base)) - expectEqual(URLQueryItem.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - } - - func test_AnyHashableCreatedFromNSURLQueryItem() { - if #available(macOS 10.10, iOS 8.0, *) { - let values: [NSURLQueryItem] = [ - NSURLQueryItem(name: "foo", value: nil), - NSURLQueryItem(name: "bar", value: nil), - NSURLQueryItem(name: "bar", value: nil), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(URLQueryItem.self, type(of: anyHashables[0].base)) - expectEqual(URLQueryItem.self, type(of: anyHashables[1].base)) - expectEqual(URLQueryItem.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - } - - func test_AnyHashableContainingURLRequest() { - let values: [URLRequest] = [ - URLRequest(url: URL(string: "https://example.com/")!), - URLRequest(url: URL(string: "https://example.org/")!), - URLRequest(url: URL(string: "https://example.org/")!), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(URLRequest.self, type(of: anyHashables[0].base)) - expectEqual(URLRequest.self, type(of: anyHashables[1].base)) - expectEqual(URLRequest.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableCreatedFromNSURLRequest() { - let values: [NSURLRequest] = [ - NSURLRequest(url: URL(string: "https://example.com/")!), - NSURLRequest(url: URL(string: "https://example.org/")!), - NSURLRequest(url: URL(string: "https://example.org/")!), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(URLRequest.self, type(of: anyHashables[0].base)) - expectEqual(URLRequest.self, type(of: anyHashables[1].base)) - expectEqual(URLRequest.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } -} diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestUUID.swift b/Darwin/Foundation-swiftoverlay-Tests/TestUUID.swift deleted file mode 100644 index df21929848..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestUUID.swift +++ /dev/null @@ -1,133 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -class TestUUID : XCTestCase { - func test_NS_Equality() { - let uuidA = NSUUID(uuidString: "E621E1F8-C36C-495A-93FC-0C247A3E6E5F") - let uuidB = NSUUID(uuidString: "e621e1f8-c36c-495a-93fc-0c247a3e6e5f") - let uuidC = NSUUID(uuidBytes: [0xe6,0x21,0xe1,0xf8,0xc3,0x6c,0x49,0x5a,0x93,0xfc,0x0c,0x24,0x7a,0x3e,0x6e,0x5f]) - let uuidD = NSUUID() - - XCTAssertEqual(uuidA, uuidB, "String case must not matter.") - XCTAssertEqual(uuidA, uuidC, "A UUID initialized with a string must be equal to the same UUID initialized with its UnsafePointer equivalent representation.") - XCTAssertNotEqual(uuidC, uuidD, "Two different UUIDs must not be equal.") - } - - func test_Equality() { - let uuidA = UUID(uuidString: "E621E1F8-C36C-495A-93FC-0C247A3E6E5F") - let uuidB = UUID(uuidString: "e621e1f8-c36c-495a-93fc-0c247a3e6e5f") - let uuidC = UUID(uuid: uuid_t(0xe6,0x21,0xe1,0xf8,0xc3,0x6c,0x49,0x5a,0x93,0xfc,0x0c,0x24,0x7a,0x3e,0x6e,0x5f)) - let uuidD = UUID() - - XCTAssertEqual(uuidA, uuidB, "String case must not matter.") - XCTAssertEqual(uuidA, uuidC, "A UUID initialized with a string must be equal to the same UUID initialized with its UnsafePointer equivalent representation.") - XCTAssertNotEqual(uuidC, uuidD, "Two different UUIDs must not be equal.") - } - - func test_NS_InvalidUUID() { - let uuid = NSUUID(uuidString: "Invalid UUID") - XCTAssertNil(uuid, "The convenience initializer `init?(uuidString string:)` must return nil for an invalid UUID string.") - } - - func test_InvalidUUID() { - let uuid = UUID(uuidString: "Invalid UUID") - XCTAssertNil(uuid, "The convenience initializer `init?(uuidString string:)` must return nil for an invalid UUID string.") - } - - func test_NS_uuidString() { - let uuid = NSUUID(uuidBytes: [0xe6,0x21,0xe1,0xf8,0xc3,0x6c,0x49,0x5a,0x93,0xfc,0x0c,0x24,0x7a,0x3e,0x6e,0x5f]) - XCTAssertEqual(uuid.uuidString, "E621E1F8-C36C-495A-93FC-0C247A3E6E5F") - } - - func test_uuidString() { - let uuid = UUID(uuid: uuid_t(0xe6,0x21,0xe1,0xf8,0xc3,0x6c,0x49,0x5a,0x93,0xfc,0x0c,0x24,0x7a,0x3e,0x6e,0x5f)) - XCTAssertEqual(uuid.uuidString, "E621E1F8-C36C-495A-93FC-0C247A3E6E5F") - } - - func test_description() { - let uuid = UUID() - XCTAssertEqual(uuid.description, uuid.uuidString, "The description must be the same as the uuidString.") - } - - func test_roundTrips() { - let ref = NSUUID() - let valFromRef = ref as UUID - var bytes: [UInt8] = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] - let valFromBytes = bytes.withUnsafeMutableBufferPointer { buffer -> UUID in - ref.getBytes(buffer.baseAddress!) - return UUID(uuid: UnsafeRawPointer(buffer.baseAddress!).load(as: uuid_t.self)) - } - let valFromStr = UUID(uuidString: ref.uuidString) - XCTAssertEqual(ref.uuidString, valFromRef.uuidString) - XCTAssertEqual(ref.uuidString, valFromBytes.uuidString) - XCTAssertNotNil(valFromStr) - XCTAssertEqual(ref.uuidString, valFromStr!.uuidString) - } - - func test_hash() { - guard #available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) else { return } - let values: [UUID] = [ - // This list takes a UUID and tweaks every byte while - // leaving the version/variant intact. - UUID(uuidString: "a53baa1c-b4f5-48db-9467-9786b76b256c")!, - UUID(uuidString: "a63baa1c-b4f5-48db-9467-9786b76b256c")!, - UUID(uuidString: "a53caa1c-b4f5-48db-9467-9786b76b256c")!, - UUID(uuidString: "a53bab1c-b4f5-48db-9467-9786b76b256c")!, - UUID(uuidString: "a53baa1d-b4f5-48db-9467-9786b76b256c")!, - UUID(uuidString: "a53baa1c-b5f5-48db-9467-9786b76b256c")!, - UUID(uuidString: "a53baa1c-b4f6-48db-9467-9786b76b256c")!, - UUID(uuidString: "a53baa1c-b4f5-49db-9467-9786b76b256c")!, - UUID(uuidString: "a53baa1c-b4f5-48dc-9467-9786b76b256c")!, - UUID(uuidString: "a53baa1c-b4f5-48db-9567-9786b76b256c")!, - UUID(uuidString: "a53baa1c-b4f5-48db-9468-9786b76b256c")!, - UUID(uuidString: "a53baa1c-b4f5-48db-9467-9886b76b256c")!, - UUID(uuidString: "a53baa1c-b4f5-48db-9467-9787b76b256c")!, - UUID(uuidString: "a53baa1c-b4f5-48db-9467-9786b86b256c")!, - UUID(uuidString: "a53baa1c-b4f5-48db-9467-9786b76c256c")!, - UUID(uuidString: "a53baa1c-b4f5-48db-9467-9786b76b266c")!, - UUID(uuidString: "a53baa1c-b4f5-48db-9467-9786b76b256d")!, - ] - checkHashable(values, equalityOracle: { $0 == $1 }) - } - - func test_AnyHashableContainingUUID() { - let values: [UUID] = [ - UUID(uuidString: "e621e1f8-c36c-495a-93fc-0c247a3e6e5f")!, - UUID(uuidString: "f81d4fae-7dec-11d0-a765-00a0c91e6bf6")!, - UUID(uuidString: "f81d4fae-7dec-11d0-a765-00a0c91e6bf6")!, - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(UUID.self, type(of: anyHashables[0].base)) - expectEqual(UUID.self, type(of: anyHashables[1].base)) - expectEqual(UUID.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableCreatedFromNSUUID() { - let values: [NSUUID] = [ - NSUUID(uuidString: "e621e1f8-c36c-495a-93fc-0c247a3e6e5f")!, - NSUUID(uuidString: "f81d4fae-7dec-11d0-a765-00a0c91e6bf6")!, - NSUUID(uuidString: "f81d4fae-7dec-11d0-a765-00a0c91e6bf6")!, - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(UUID.self, type(of: anyHashables[0].base)) - expectEqual(UUID.self, type(of: anyHashables[1].base)) - expectEqual(UUID.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } -} - diff --git a/Darwin/Foundation-swiftoverlay-Tests/TestUserInfo.swift b/Darwin/Foundation-swiftoverlay-Tests/TestUserInfo.swift deleted file mode 100644 index c1da9735e7..0000000000 --- a/Darwin/Foundation-swiftoverlay-Tests/TestUserInfo.swift +++ /dev/null @@ -1,170 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import Foundation -import XCTest - -struct SubStruct: Equatable { - var i: Int - var str: String - - static func ==(lhs: SubStruct, rhs: SubStruct) -> Bool { - return lhs.i == rhs.i && - lhs.str == rhs.str - } -} - -struct SomeStructure: Hashable { - var i: Int - var str: String - var sub: SubStruct - - static func ==(lhs: SomeStructure, rhs: SomeStructure) -> Bool { - return lhs.i == rhs.i && - lhs.str == rhs.str && - lhs.sub == rhs.sub - } - - // FIXME: we don't care about this, but Any only finds == on Hashables - func hash(into hasher: inout Hasher) { - hasher.combine(i) - hasher.combine(str) - hasher.combine(sub.i) - hasher.combine(sub.str) - } -} - -/* - Notification and potentially other structures require a representation of a - userInfo dictionary. The Objective-C counterparts are represented via - NSDictionary which can only store a hashable key (actually - NSObject *) and a value of AnyObject (actually NSObject *). However - it is desired in swift to store Any in the value. These structure expositions - in swift have an adapter that allows them to pass a specialized NSDictionary - subclass to the Objective-C layer that can round trip the stored Any types back - out into Swift. - - In this case NSNotification -> Notification bridging is suitable to verify that - behavior. -*/ - -class TestUserInfo : XCTestCase { - var posted: Notification? - - func validate(_ testStructure: SomeStructure, _ value: SomeStructure) { - XCTAssertEqual(testStructure.i, value.i) - XCTAssertEqual(testStructure.str, value.str) - XCTAssertEqual(testStructure.sub.i, value.sub.i) - XCTAssertEqual(testStructure.sub.str, value.sub.str) - } - - func test_userInfoPost() { - let userInfoKey = "userInfoKey" - let notifName = Notification.Name(rawValue: "TestSwiftNotification") - let testStructure = SomeStructure(i: 5, str: "10", sub: SubStruct(i: 6, str: "11")) - let info: [AnyHashable : Any] = [ - AnyHashable(userInfoKey) : testStructure - ] - let note = Notification(name: notifName, userInfo: info) - XCTAssertNotNil(note.userInfo) - let nc = NotificationCenter.default - nc.addObserver(self, selector: #selector(TestUserInfo.notification(_:)), name: notifName, object: nil) - nc.post(note) - XCTAssertNotNil(posted) - if let notification = posted { - let postedInfo = notification.userInfo - XCTAssertNotNil(postedInfo) - if let userInfo = postedInfo { - let postedValue = userInfo[AnyHashable(userInfoKey)] as? SomeStructure - XCTAssertNotNil(postedValue) - if let value = postedValue { - validate(testStructure, value) - } - } - } - } - - func test_equality() { - let userInfoKey = "userInfoKey" - let notifName = Notification.Name(rawValue: "TestSwiftNotification") - let testStructure = SomeStructure(i: 5, str: "10", sub: SubStruct(i: 6, str: "11")) - let testStructure2 = SomeStructure(i: 6, str: "10", sub: SubStruct(i: 6, str: "11")) - let info1: [AnyHashable : Any] = [ - AnyHashable(userInfoKey) : testStructure - ] - let info2: [AnyHashable : Any] = [ - AnyHashable(userInfoKey) : "this can convert" - ] - let info3: [AnyHashable : Any] = [ - AnyHashable(userInfoKey) : testStructure2 - ] - - let note1 = Notification(name: notifName, userInfo: info1) - let note2 = Notification(name: notifName, userInfo: info1) - XCTAssertEqual(note1, note2) - - let note3 = Notification(name: notifName, userInfo: info2) - let note4 = Notification(name: notifName, userInfo: info2) - XCTAssertEqual(note3, note4) - - let note5 = Notification(name: notifName, userInfo: info3) - XCTAssertNotEqual(note1, note5) - } - - @objc func notification(_ notif: Notification) { - posted = notif - } - - // MARK: - - func test_classForCoder() { - // confirm internal bridged impl types are not exposed to archival machinery - // we have to be circuitous here, as bridging makes it very difficult to confirm this - // - // Gated on the availability of NSKeyedArchiver.archivedData(withRootObject:). - if #available(macOS 10.11, iOS 9.0, tvOS 9.0, watchOS 2.0, *) { - let note = Notification(name: Notification.Name(rawValue: "TestSwiftNotification"), userInfo: [AnyHashable("key"):"value"]) - let archivedNote = NSKeyedArchiver.archivedData(withRootObject: note) - let noteAsPlist = try! PropertyListSerialization.propertyList(from: archivedNote, options: [], format: nil) - let plistAsData = try! PropertyListSerialization.data(fromPropertyList: noteAsPlist, format: .xml, options: 0) - let xml = NSString(data: plistAsData, encoding: String.Encoding.utf8.rawValue)! - XCTAssertEqual(xml.range(of: "_NSUserInfoDictionary").location, NSNotFound) - } - } - - func test_AnyHashableContainingNotification() { - let values: [Notification] = [ - Notification(name: Notification.Name(rawValue: "TestSwiftNotification")), - Notification(name: Notification.Name(rawValue: "TestOtherSwiftNotification")), - Notification(name: Notification.Name(rawValue: "TestOtherSwiftNotification")), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(Notification.self, type(of: anyHashables[0].base)) - expectEqual(Notification.self, type(of: anyHashables[1].base)) - expectEqual(Notification.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } - - func test_AnyHashableCreatedFromNSNotification() { - let values: [NSNotification] = [ - NSNotification(name: Notification.Name(rawValue: "TestSwiftNotification"), object: nil), - NSNotification(name: Notification.Name(rawValue: "TestOtherSwiftNotification"), object: nil), - NSNotification(name: Notification.Name(rawValue: "TestOtherSwiftNotification"), object: nil), - ] - let anyHashables = values.map(AnyHashable.init) - expectEqual(Notification.self, type(of: anyHashables[0].base)) - expectEqual(Notification.self, type(of: anyHashables[1].base)) - expectEqual(Notification.self, type(of: anyHashables[2].base)) - XCTAssertNotEqual(anyHashables[0], anyHashables[1]) - XCTAssertEqual(anyHashables[1], anyHashables[2]) - } -} diff --git a/Darwin/Foundation-swiftoverlay.xcodeproj/project.pbxproj b/Darwin/Foundation-swiftoverlay.xcodeproj/project.pbxproj deleted file mode 100644 index 8d491a5597..0000000000 --- a/Darwin/Foundation-swiftoverlay.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1003 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 15F987BD2475AB6E00451F92 /* Combine.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15F987BC2475AB6E00451F92 /* Combine.framework */; }; - 7D0AE23323886AE9001948BD /* magic-symbols-for-install-name.c in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE23223886AE9001948BD /* magic-symbols-for-install-name.c */; }; - 7D0AE23A23886B53001948BD /* BundleLookup.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE23423886B50001948BD /* BundleLookup.mm */; }; - 7D0AE23B23886B53001948BD /* Calendar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE23523886B50001948BD /* Calendar.swift */; }; - 7D0AE23C23886B53001948BD /* CharacterSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE23623886B51001948BD /* CharacterSet.swift */; }; - 7D0AE23E23886B53001948BD /* AffineTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE23823886B52001948BD /* AffineTransform.swift */; }; - 7D0AE23F23886B53001948BD /* Boxing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE23923886B53001948BD /* Boxing.swift */; }; - 7D0AE26F23886B83001948BD /* NSItemProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE24023886B65001948BD /* NSItemProvider.swift */; }; - 7D0AE27023886B83001948BD /* NSTextCheckingResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE24123886B66001948BD /* NSTextCheckingResult.swift */; }; - 7D0AE27123886B83001948BD /* NSDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE24223886B67001948BD /* NSDate.swift */; }; - 7D0AE27323886B83001948BD /* CombineTypealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE24423886B68001948BD /* CombineTypealiases.swift */; }; - 7D0AE27423886B83001948BD /* IndexPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE24523886B69001948BD /* IndexPath.swift */; }; - 7D0AE27523886B83001948BD /* NSError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE24623886B69001948BD /* NSError.swift */; }; - 7D0AE27623886B83001948BD /* Decimal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE24723886B6A001948BD /* Decimal.swift */; }; - 7D0AE27723886B83001948BD /* NSDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE24823886B6A001948BD /* NSDictionary.swift */; }; - 7D0AE27823886B83001948BD /* NSIndexSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE24923886B6B001948BD /* NSIndexSet.swift */; }; - 7D0AE27A23886B83001948BD /* NSArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE24B23886B6C001948BD /* NSArray.swift */; }; - 7D0AE27B23886B83001948BD /* DataThunks.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE24C23886B6D001948BD /* DataThunks.m */; }; - 7D0AE27C23886B84001948BD /* JSONEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE24D23886B6E001948BD /* JSONEncoder.swift */; }; - 7D0AE27E23886B84001948BD /* NSObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE24F23886B6F001948BD /* NSObject.swift */; }; - 7D0AE27F23886B84001948BD /* DataProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25023886B6F001948BD /* DataProtocol.swift */; }; - 7D0AE28023886B84001948BD /* NSGeometry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25123886B70001948BD /* NSGeometry.swift */; }; - 7D0AE28123886B84001948BD /* NSNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25223886B71001948BD /* NSNumber.swift */; }; - 7D0AE28223886B84001948BD /* NSPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25323886B72001948BD /* NSPredicate.swift */; }; - 7D0AE28323886B84001948BD /* NSSortDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25423886B72001948BD /* NSSortDescriptor.swift */; }; - 7D0AE28423886B84001948BD /* IndexSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25523886B73001948BD /* IndexSet.swift */; }; - 7D0AE28523886B84001948BD /* DateComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25623886B73001948BD /* DateComponents.swift */; }; - 7D0AE28623886B84001948BD /* NSCoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25723886B74001948BD /* NSCoder.swift */; }; - 7D0AE28723886B84001948BD /* NSExpression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25823886B75001948BD /* NSExpression.swift */; }; - 7D0AE28823886B84001948BD /* DateInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25923886B75001948BD /* DateInterval.swift */; }; - 7D0AE28923886B84001948BD /* NSSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25A23886B76001948BD /* NSSet.swift */; }; - 7D0AE28A23886B84001948BD /* NSString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25B23886B77001948BD /* NSString.swift */; }; - 7D0AE28B23886B84001948BD /* Measurement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25C23886B77001948BD /* Measurement.swift */; }; - 7D0AE28C23886B84001948BD /* DispatchData+DataProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25D23886B78001948BD /* DispatchData+DataProtocol.swift */; }; - 7D0AE28D23886B84001948BD /* ContiguousBytes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25E23886B79001948BD /* ContiguousBytes.swift */; }; - 7D0AE28E23886B84001948BD /* Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE25F23886B79001948BD /* Foundation.swift */; }; - 7D0AE28F23886B84001948BD /* FileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26023886B7A001948BD /* FileManager.swift */; }; - 7D0AE29023886B84001948BD /* NSStringAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26123886B7B001948BD /* NSStringAPI.swift */; }; - 7D0AE29123886B84001948BD /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26223886B7B001948BD /* Data.swift */; }; - 7D0AE29223886B84001948BD /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26323886B7C001948BD /* Date.swift */; }; - 7D0AE29323886B85001948BD /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26423886B7D001948BD /* Notification.swift */; }; - 7D0AE29423886B85001948BD /* NSFastEnumeration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26523886B7D001948BD /* NSFastEnumeration.swift */; }; - 7D0AE29523886B85001948BD /* Locale.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26623886B7E001948BD /* Locale.swift */; }; - 7D0AE29623886B85001948BD /* NSOrderedCollectionDifference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26723886B7E001948BD /* NSOrderedCollectionDifference.swift */; }; - 7D0AE29723886B85001948BD /* NSRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26823886B7F001948BD /* NSRange.swift */; }; - 7D0AE29823886B85001948BD /* NSStringEncodings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26923886B80001948BD /* NSStringEncodings.swift */; }; - 7D0AE29923886B85001948BD /* NSUndoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26A23886B80001948BD /* NSUndoManager.swift */; }; - 7D0AE29A23886B85001948BD /* NSURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26B23886B81001948BD /* NSURL.swift */; }; - 7D0AE29B23886B85001948BD /* Collections+DataProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26C23886B82001948BD /* Collections+DataProtocol.swift */; }; - 7D0AE29C23886B85001948BD /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26D23886B82001948BD /* Codable.swift */; }; - 7D0AE29D23886B85001948BD /* NSData+DataProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE26E23886B83001948BD /* NSData+DataProtocol.swift */; }; - 7D0AE2B423886B9F001948BD /* ReferenceConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE29E23886B91001948BD /* ReferenceConvertible.swift */; }; - 7D0AE2B523886B9F001948BD /* URLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE29F23886B92001948BD /* URLSession.swift */; }; - 7D0AE2B623886B9F001948BD /* Scanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2A023886B92001948BD /* Scanner.swift */; }; - 7D0AE2B723886B9F001948BD /* UUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2A123886B93001948BD /* UUID.swift */; }; - 7D0AE2B823886B9F001948BD /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2A223886B94001948BD /* String.swift */; }; - 7D0AE2B923886B9F001948BD /* Schedulers+OperationQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2A323886B94001948BD /* Schedulers+OperationQueue.swift */; }; - 7D0AE2BA23886B9F001948BD /* PersonNameComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2A423886B95001948BD /* PersonNameComponents.swift */; }; - 7D0AE2BB23886B9F001948BD /* Publishers+URLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2A523886B96001948BD /* Publishers+URLSession.swift */; }; - 7D0AE2BC23886B9F001948BD /* PlistEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2A623886B96001948BD /* PlistEncoder.swift */; }; - 7D0AE2BD23886B9F001948BD /* Publishers+NotificationCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2A723886B97001948BD /* Publishers+NotificationCenter.swift */; }; - 7D0AE2BE23886B9F001948BD /* Schedulers+RunLoop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2A823886B98001948BD /* Schedulers+RunLoop.swift */; }; - 7D0AE2BF23886B9F001948BD /* TimeZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2A923886B98001948BD /* TimeZone.swift */; }; - 7D0AE2C023886B9F001948BD /* Schedulers+Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2AA23886B99001948BD /* Schedulers+Date.swift */; }; - 7D0AE2C123886B9F001948BD /* URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2AB23886B9A001948BD /* URL.swift */; }; - 7D0AE2C223886BA0001948BD /* Pointers+DataProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2AC23886B9A001948BD /* Pointers+DataProtocol.swift */; }; - 7D0AE2C323886BA0001948BD /* Publishers+Locking.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2AD23886B9B001948BD /* Publishers+Locking.swift */; }; - 7D0AE2C423886BA0001948BD /* URLCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2AE23886B9C001948BD /* URLCache.swift */; }; - 7D0AE2C523886BA0001948BD /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2AF23886B9C001948BD /* URLRequest.swift */; }; - 7D0AE2C623886BA0001948BD /* URLComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2B023886B9D001948BD /* URLComponents.swift */; }; - 7D0AE2C723886BA0001948BD /* Publishers+Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2B123886B9D001948BD /* Publishers+Timer.swift */; }; - 7D0AE2C823886BA0001948BD /* Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2B223886B9E001948BD /* Progress.swift */; }; - 7D0AE2C923886BA0001948BD /* Publishers+KeyValueObserving.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE2B323886B9F001948BD /* Publishers+KeyValueObserving.swift */; }; - 7D0AE2CC23888DE0001948BD /* CheckClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AE23723886B52001948BD /* CheckClass.swift */; }; - 7D0AE2F12388A4E5001948BD /* magic-symbols-for-install-name.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D0AE2F02388A4E5001948BD /* magic-symbols-for-install-name.h */; }; - 7D2006D722F3D3DA008DF640 /* libswiftFoundation.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D20064D22F24524008DF640 /* libswiftFoundation.dylib */; }; - 7DA3867023C804740050CCB3 /* libswiftCoreFoundation.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DA3866323C804530050CCB3 /* libswiftCoreFoundation.dylib */; }; - 7DA3867623C804B60050CCB3 /* magic-symbols-for-install-name.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA3865823C803810050CCB3 /* magic-symbols-for-install-name.h */; }; - 7DA3867723C804BC0050CCB3 /* magic-symbols-for-install-name.c in Sources */ = {isa = PBXBuildFile; fileRef = 7DA3865723C803810050CCB3 /* magic-symbols-for-install-name.c */; }; - 7DA3867823C804BC0050CCB3 /* CoreFoundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DA3865923C803810050CCB3 /* CoreFoundation.swift */; }; - 7DA3867923C804C40050CCB3 /* CoreFoundationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DA3865D23C803810050CCB3 /* CoreFoundationTests.swift */; }; - 7DD9FCEE254A91F500E58DC4 /* NSValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DD9FCED254A91F500E58DC4 /* NSValue.swift */; }; - 7DFB966D23B174BB00D8DB10 /* TestPlistEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB966B23B174BA00D8DB10 /* TestPlistEncoder.swift */; }; - 7DFB966E23B174BB00D8DB10 /* TestUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB966C23B174BB00D8DB10 /* TestUUID.swift */; }; - 7DFB967223B174D200D8DB10 /* TestCalendar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB966F23B174D200D8DB10 /* TestCalendar.swift */; }; - 7DFB967323B174D200D8DB10 /* TestNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB967023B174D200D8DB10 /* TestNotification.swift */; }; - 7DFB967423B174D200D8DB10 /* TestLocale.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB967123B174D200D8DB10 /* TestLocale.swift */; }; - 7DFB967823B174E500D8DB10 /* TestIndexPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB967523B174E500D8DB10 /* TestIndexPath.swift */; }; - 7DFB967923B174E500D8DB10 /* TestNSRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB967623B174E500D8DB10 /* TestNSRange.swift */; }; - 7DFB967A23B174E500D8DB10 /* TestURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB967723B174E500D8DB10 /* TestURL.swift */; }; - 7DFB967E23B174FF00D8DB10 /* TestDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB967B23B174FF00D8DB10 /* TestDate.swift */; }; - 7DFB967F23B174FF00D8DB10 /* TestData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB967C23B174FF00D8DB10 /* TestData.swift */; }; - 7DFB968023B174FF00D8DB10 /* TestDateInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB967D23B174FF00D8DB10 /* TestDateInterval.swift */; }; - 7DFB968423B1751100D8DB10 /* TestDecimal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB968123B1751100D8DB10 /* TestDecimal.swift */; }; - 7DFB968523B1751100D8DB10 /* TestPersonNameComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB968223B1751100D8DB10 /* TestPersonNameComponents.swift */; }; - 7DFB968623B1751100D8DB10 /* TestFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB968323B1751100D8DB10 /* TestFileManager.swift */; }; - 7DFB968B23B1752300D8DB10 /* TestNSString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB968723B1752200D8DB10 /* TestNSString.swift */; }; - 7DFB968C23B1752300D8DB10 /* TestMeasurement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB968823B1752200D8DB10 /* TestMeasurement.swift */; }; - 7DFB968D23B1752300D8DB10 /* TestTimeZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB968923B1752200D8DB10 /* TestTimeZone.swift */; }; - 7DFB968E23B1752300D8DB10 /* TestUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB968A23B1752300D8DB10 /* TestUserInfo.swift */; }; - 7DFB969223B1753600D8DB10 /* TestAffineTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB968F23B1753500D8DB10 /* TestAffineTransform.swift */; }; - 7DFB969323B1753600D8DB10 /* TestCharacterSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB969023B1753600D8DB10 /* TestCharacterSet.swift */; }; - 7DFB969423B1753600D8DB10 /* TestJSONEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB969123B1753600D8DB10 /* TestJSONEncoder.swift */; }; - 7DFB969723B1754D00D8DB10 /* TestIndexSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB969523B1754D00D8DB10 /* TestIndexSet.swift */; }; - 7DFB969823B1754D00D8DB10 /* TestProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB969623B1754D00D8DB10 /* TestProgress.swift */; }; - 7DFB969A23B175A100D8DB10 /* CodableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB969923B175A100D8DB10 /* CodableTests.swift */; }; - 7DFB969D23B17E0C00D8DB10 /* FoundationBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB969C23B17E0C00D8DB10 /* FoundationBridge.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 7DFB96A023B180F300D8DB10 /* StdlibUnittest expectEqual Types.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB969F23B180F300D8DB10 /* StdlibUnittest expectEqual Types.swift */; }; - 7DFB96A323B187B400D8DB10 /* StdlibUnittest checkEquatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB96A123B187B300D8DB10 /* StdlibUnittest checkEquatable.swift */; }; - 7DFB96A423B187B400D8DB10 /* StdlibUnittest checkHashable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DFB96A223B187B300D8DB10 /* StdlibUnittest checkHashable.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 7D2006D422F3D3D1008DF640 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7D81A8D522E936E700739BB9 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7D20064C22F24524008DF640; - remoteInfo = Foundation; - }; - 7DA3867123C804740050CCB3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7D81A8D522E936E700739BB9 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7DA3866223C804530050CCB3; - remoteInfo = CoreFoundation; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 15F987BC2475AB6E00451F92 /* Combine.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Combine.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.16.Internal.sdk/System/Library/Frameworks/Combine.framework; sourceTree = DEVELOPER_DIR; }; - 7D0AE23223886AE9001948BD /* magic-symbols-for-install-name.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "magic-symbols-for-install-name.c"; sourceTree = ""; }; - 7D0AE23423886B50001948BD /* BundleLookup.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = BundleLookup.mm; sourceTree = ""; }; - 7D0AE23523886B50001948BD /* Calendar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Calendar.swift; sourceTree = ""; }; - 7D0AE23623886B51001948BD /* CharacterSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CharacterSet.swift; sourceTree = ""; }; - 7D0AE23723886B52001948BD /* CheckClass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckClass.swift; sourceTree = ""; }; - 7D0AE23823886B52001948BD /* AffineTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AffineTransform.swift; sourceTree = ""; }; - 7D0AE23923886B53001948BD /* Boxing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Boxing.swift; sourceTree = ""; }; - 7D0AE24023886B65001948BD /* NSItemProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSItemProvider.swift; sourceTree = ""; }; - 7D0AE24123886B66001948BD /* NSTextCheckingResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSTextCheckingResult.swift; sourceTree = ""; }; - 7D0AE24223886B67001948BD /* NSDate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSDate.swift; sourceTree = ""; }; - 7D0AE24423886B68001948BD /* CombineTypealiases.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CombineTypealiases.swift; sourceTree = ""; }; - 7D0AE24523886B69001948BD /* IndexPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IndexPath.swift; sourceTree = ""; }; - 7D0AE24623886B69001948BD /* NSError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSError.swift; sourceTree = ""; }; - 7D0AE24723886B6A001948BD /* Decimal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Decimal.swift; sourceTree = ""; }; - 7D0AE24823886B6A001948BD /* NSDictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSDictionary.swift; sourceTree = ""; }; - 7D0AE24923886B6B001948BD /* NSIndexSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSIndexSet.swift; sourceTree = ""; }; - 7D0AE24B23886B6C001948BD /* NSArray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSArray.swift; sourceTree = ""; }; - 7D0AE24C23886B6D001948BD /* DataThunks.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DataThunks.m; sourceTree = ""; }; - 7D0AE24D23886B6E001948BD /* JSONEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONEncoder.swift; sourceTree = ""; }; - 7D0AE24F23886B6F001948BD /* NSObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSObject.swift; sourceTree = ""; }; - 7D0AE25023886B6F001948BD /* DataProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataProtocol.swift; sourceTree = ""; }; - 7D0AE25123886B70001948BD /* NSGeometry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSGeometry.swift; sourceTree = ""; }; - 7D0AE25223886B71001948BD /* NSNumber.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSNumber.swift; sourceTree = ""; }; - 7D0AE25323886B72001948BD /* NSPredicate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSPredicate.swift; sourceTree = ""; }; - 7D0AE25423886B72001948BD /* NSSortDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSSortDescriptor.swift; sourceTree = ""; }; - 7D0AE25523886B73001948BD /* IndexSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IndexSet.swift; sourceTree = ""; }; - 7D0AE25623886B73001948BD /* DateComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateComponents.swift; sourceTree = ""; }; - 7D0AE25723886B74001948BD /* NSCoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSCoder.swift; sourceTree = ""; }; - 7D0AE25823886B75001948BD /* NSExpression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSExpression.swift; sourceTree = ""; }; - 7D0AE25923886B75001948BD /* DateInterval.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateInterval.swift; sourceTree = ""; }; - 7D0AE25A23886B76001948BD /* NSSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSSet.swift; sourceTree = ""; }; - 7D0AE25B23886B77001948BD /* NSString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSString.swift; sourceTree = ""; }; - 7D0AE25C23886B77001948BD /* Measurement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Measurement.swift; sourceTree = ""; }; - 7D0AE25D23886B78001948BD /* DispatchData+DataProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DispatchData+DataProtocol.swift"; sourceTree = ""; }; - 7D0AE25E23886B79001948BD /* ContiguousBytes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContiguousBytes.swift; sourceTree = ""; }; - 7D0AE25F23886B79001948BD /* Foundation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Foundation.swift; sourceTree = ""; }; - 7D0AE26023886B7A001948BD /* FileManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileManager.swift; sourceTree = ""; }; - 7D0AE26123886B7B001948BD /* NSStringAPI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSStringAPI.swift; sourceTree = ""; }; - 7D0AE26223886B7B001948BD /* Data.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Data.swift; sourceTree = ""; }; - 7D0AE26323886B7C001948BD /* Date.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Date.swift; sourceTree = ""; }; - 7D0AE26423886B7D001948BD /* Notification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = ""; }; - 7D0AE26523886B7D001948BD /* NSFastEnumeration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSFastEnumeration.swift; sourceTree = ""; }; - 7D0AE26623886B7E001948BD /* Locale.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Locale.swift; sourceTree = ""; }; - 7D0AE26723886B7E001948BD /* NSOrderedCollectionDifference.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSOrderedCollectionDifference.swift; sourceTree = ""; }; - 7D0AE26823886B7F001948BD /* NSRange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSRange.swift; sourceTree = ""; }; - 7D0AE26923886B80001948BD /* NSStringEncodings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSStringEncodings.swift; sourceTree = ""; }; - 7D0AE26A23886B80001948BD /* NSUndoManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSUndoManager.swift; sourceTree = ""; }; - 7D0AE26B23886B81001948BD /* NSURL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSURL.swift; sourceTree = ""; }; - 7D0AE26C23886B82001948BD /* Collections+DataProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Collections+DataProtocol.swift"; sourceTree = ""; }; - 7D0AE26D23886B82001948BD /* Codable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Codable.swift; sourceTree = ""; }; - 7D0AE26E23886B83001948BD /* NSData+DataProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSData+DataProtocol.swift"; sourceTree = ""; }; - 7D0AE29E23886B91001948BD /* ReferenceConvertible.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReferenceConvertible.swift; sourceTree = ""; }; - 7D0AE29F23886B92001948BD /* URLSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLSession.swift; sourceTree = ""; }; - 7D0AE2A023886B92001948BD /* Scanner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scanner.swift; sourceTree = ""; }; - 7D0AE2A123886B93001948BD /* UUID.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UUID.swift; sourceTree = ""; }; - 7D0AE2A223886B94001948BD /* String.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = String.swift; sourceTree = ""; }; - 7D0AE2A323886B94001948BD /* Schedulers+OperationQueue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Schedulers+OperationQueue.swift"; sourceTree = ""; }; - 7D0AE2A423886B95001948BD /* PersonNameComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PersonNameComponents.swift; sourceTree = ""; }; - 7D0AE2A523886B96001948BD /* Publishers+URLSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Publishers+URLSession.swift"; sourceTree = ""; }; - 7D0AE2A623886B96001948BD /* PlistEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlistEncoder.swift; sourceTree = ""; }; - 7D0AE2A723886B97001948BD /* Publishers+NotificationCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Publishers+NotificationCenter.swift"; sourceTree = ""; }; - 7D0AE2A823886B98001948BD /* Schedulers+RunLoop.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Schedulers+RunLoop.swift"; sourceTree = ""; }; - 7D0AE2A923886B98001948BD /* TimeZone.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TimeZone.swift; sourceTree = ""; }; - 7D0AE2AA23886B99001948BD /* Schedulers+Date.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Schedulers+Date.swift"; sourceTree = ""; }; - 7D0AE2AB23886B9A001948BD /* URL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URL.swift; sourceTree = ""; }; - 7D0AE2AC23886B9A001948BD /* Pointers+DataProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Pointers+DataProtocol.swift"; sourceTree = ""; }; - 7D0AE2AD23886B9B001948BD /* Publishers+Locking.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Publishers+Locking.swift"; sourceTree = ""; }; - 7D0AE2AE23886B9C001948BD /* URLCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLCache.swift; sourceTree = ""; }; - 7D0AE2AF23886B9C001948BD /* URLRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLRequest.swift; sourceTree = ""; }; - 7D0AE2B023886B9D001948BD /* URLComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLComponents.swift; sourceTree = ""; }; - 7D0AE2B123886B9D001948BD /* Publishers+Timer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Publishers+Timer.swift"; sourceTree = ""; }; - 7D0AE2B223886B9E001948BD /* Progress.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Progress.swift; sourceTree = ""; }; - 7D0AE2B323886B9F001948BD /* Publishers+KeyValueObserving.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Publishers+KeyValueObserving.swift"; sourceTree = ""; }; - 7D0AE2F02388A4E5001948BD /* magic-symbols-for-install-name.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "magic-symbols-for-install-name.h"; sourceTree = ""; }; - 7D20064D22F24524008DF640 /* libswiftFoundation.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libswiftFoundation.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; - 7D20065B22F251BE008DF640 /* Foundation.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Foundation.xcconfig; sourceTree = ""; }; - 7D2006C922F3D3AB008DF640 /* Foundation-swiftoverlay-Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Foundation-swiftoverlay-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - 7D2006CD22F3D3AB008DF640 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 7D8BD9D822FE956C004C00CC /* FoundationTests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = FoundationTests.xcconfig; sourceTree = ""; }; - 7DA3865723C803810050CCB3 /* magic-symbols-for-install-name.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "magic-symbols-for-install-name.c"; sourceTree = ""; }; - 7DA3865823C803810050CCB3 /* magic-symbols-for-install-name.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "magic-symbols-for-install-name.h"; sourceTree = ""; }; - 7DA3865923C803810050CCB3 /* CoreFoundation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreFoundation.swift; sourceTree = ""; }; - 7DA3865A23C803810050CCB3 /* CoreFoundation.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = CoreFoundation.xcconfig; sourceTree = ""; }; - 7DA3865C23C803810050CCB3 /* CoreFoundationTests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = CoreFoundationTests.xcconfig; sourceTree = ""; }; - 7DA3865D23C803810050CCB3 /* CoreFoundationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreFoundationTests.swift; sourceTree = ""; }; - 7DA3865E23C803810050CCB3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 7DA3866323C804530050CCB3 /* libswiftCoreFoundation.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libswiftCoreFoundation.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; - 7DA3866B23C804740050CCB3 /* CoreFoundation-swiftoverlay-Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "CoreFoundation-swiftoverlay-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - 7DA3867D23C807A80050CCB3 /* CoreFoundationOverlayShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CoreFoundationOverlayShims.h; sourceTree = ""; }; - 7DA3867E23C807C90050CCB3 /* CFHashingShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CFHashingShims.h; sourceTree = ""; }; - 7DA3867F23C807C90050CCB3 /* CFCharacterSetShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CFCharacterSetShims.h; sourceTree = ""; }; - 7DD9FCED254A91F500E58DC4 /* NSValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSValue.swift; sourceTree = ""; }; - 7DEBC66223AD7FFE00B40DAF /* FoundationOverlayShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FoundationOverlayShims.h; sourceTree = ""; }; - 7DEBC66323AD805000B40DAF /* FoundationShimSupport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FoundationShimSupport.h; sourceTree = ""; }; - 7DEBC67323AD80D800B40DAF /* NSDataShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSDataShims.h; sourceTree = ""; }; - 7DEBC67423AD80D800B40DAF /* NSErrorShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSErrorShims.h; sourceTree = ""; }; - 7DEBC67523AD80D800B40DAF /* NSIndexSetShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSIndexSetShims.h; sourceTree = ""; }; - 7DEBC67623AD80D800B40DAF /* NSUndoManagerShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSUndoManagerShims.h; sourceTree = ""; }; - 7DEBC67723AD80D800B40DAF /* NSCalendarShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSCalendarShims.h; sourceTree = ""; }; - 7DEBC67823AD80D800B40DAF /* NSDictionaryShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSDictionaryShims.h; sourceTree = ""; }; - 7DEBC67923AD80D800B40DAF /* NSCharacterSetShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSCharacterSetShims.h; sourceTree = ""; }; - 7DEBC67A23AD80D800B40DAF /* NSLocaleShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSLocaleShims.h; sourceTree = ""; }; - 7DEBC67B23AD80D900B40DAF /* NSKeyedArchiverShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSKeyedArchiverShims.h; sourceTree = ""; }; - 7DEBC67C23AD80D900B40DAF /* NSIndexPathShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSIndexPathShims.h; sourceTree = ""; }; - 7DEBC67D23AD80D900B40DAF /* NSTimeZoneShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSTimeZoneShims.h; sourceTree = ""; }; - 7DEBC67E23AD80D900B40DAF /* NSFileManagerShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSFileManagerShims.h; sourceTree = ""; }; - 7DEBC67F23AD80D900B40DAF /* NSCoderShims.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSCoderShims.h; sourceTree = ""; }; - 7DEBC68023AD80EA00B40DAF /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; - 7DF02CC022F4DF1A00C66A76 /* overlay-base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "overlay-base.xcconfig"; sourceTree = ""; }; - 7DF02CC422F4DF1A00C66A76 /* install-swiftmodules.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "install-swiftmodules.sh"; sourceTree = ""; }; - 7DFB966B23B174BA00D8DB10 /* TestPlistEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestPlistEncoder.swift; sourceTree = ""; }; - 7DFB966C23B174BB00D8DB10 /* TestUUID.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestUUID.swift; sourceTree = ""; }; - 7DFB966F23B174D200D8DB10 /* TestCalendar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestCalendar.swift; sourceTree = ""; }; - 7DFB967023B174D200D8DB10 /* TestNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNotification.swift; sourceTree = ""; }; - 7DFB967123B174D200D8DB10 /* TestLocale.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestLocale.swift; sourceTree = ""; }; - 7DFB967523B174E500D8DB10 /* TestIndexPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestIndexPath.swift; sourceTree = ""; }; - 7DFB967623B174E500D8DB10 /* TestNSRange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSRange.swift; sourceTree = ""; }; - 7DFB967723B174E500D8DB10 /* TestURL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestURL.swift; sourceTree = ""; }; - 7DFB967B23B174FF00D8DB10 /* TestDate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestDate.swift; sourceTree = ""; }; - 7DFB967C23B174FF00D8DB10 /* TestData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestData.swift; sourceTree = ""; }; - 7DFB967D23B174FF00D8DB10 /* TestDateInterval.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestDateInterval.swift; sourceTree = ""; }; - 7DFB968123B1751100D8DB10 /* TestDecimal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestDecimal.swift; sourceTree = ""; }; - 7DFB968223B1751100D8DB10 /* TestPersonNameComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestPersonNameComponents.swift; sourceTree = ""; }; - 7DFB968323B1751100D8DB10 /* TestFileManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestFileManager.swift; sourceTree = ""; }; - 7DFB968723B1752200D8DB10 /* TestNSString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSString.swift; sourceTree = ""; }; - 7DFB968823B1752200D8DB10 /* TestMeasurement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestMeasurement.swift; sourceTree = ""; }; - 7DFB968923B1752200D8DB10 /* TestTimeZone.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestTimeZone.swift; sourceTree = ""; }; - 7DFB968A23B1752300D8DB10 /* TestUserInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestUserInfo.swift; sourceTree = ""; }; - 7DFB968F23B1753500D8DB10 /* TestAffineTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestAffineTransform.swift; sourceTree = ""; }; - 7DFB969023B1753600D8DB10 /* TestCharacterSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestCharacterSet.swift; sourceTree = ""; }; - 7DFB969123B1753600D8DB10 /* TestJSONEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestJSONEncoder.swift; sourceTree = ""; }; - 7DFB969523B1754D00D8DB10 /* TestIndexSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestIndexSet.swift; sourceTree = ""; }; - 7DFB969623B1754D00D8DB10 /* TestProgress.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestProgress.swift; sourceTree = ""; }; - 7DFB969923B175A100D8DB10 /* CodableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CodableTests.swift; sourceTree = ""; }; - 7DFB969C23B17E0C00D8DB10 /* FoundationBridge.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FoundationBridge.m; sourceTree = ""; }; - 7DFB969E23B17E3400D8DB10 /* FoundationBridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FoundationBridge.h; sourceTree = ""; }; - 7DFB969F23B180F300D8DB10 /* StdlibUnittest expectEqual Types.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StdlibUnittest expectEqual Types.swift"; sourceTree = ""; }; - 7DFB96A123B187B300D8DB10 /* StdlibUnittest checkEquatable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "StdlibUnittest checkEquatable.swift"; sourceTree = ""; }; - 7DFB96A223B187B300D8DB10 /* StdlibUnittest checkHashable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "StdlibUnittest checkHashable.swift"; sourceTree = ""; }; - DD2756C4249814450079060F /* overlay-release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "overlay-release.xcconfig"; sourceTree = ""; }; - DD2756C5249814450079060F /* overlay-debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "overlay-debug.xcconfig"; sourceTree = ""; }; - DD8301FA24993C14008940B5 /* overlay-shared.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "overlay-shared.xcconfig"; sourceTree = ""; }; - DD8301FB24993D7C008940B5 /* overlay-tests-shared.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "overlay-tests-shared.xcconfig"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 7D20064B22F24524008DF640 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 15F987BD2475AB6E00451F92 /* Combine.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7D2006C622F3D3AB008DF640 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7D2006D722F3D3DA008DF640 /* libswiftFoundation.dylib in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7DA3866123C804530050CCB3 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7DA3866823C804740050CCB3 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7DA3867023C804740050CCB3 /* libswiftCoreFoundation.dylib in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 7D20064E22F24525008DF640 /* Foundation-swiftoverlay */ = { - isa = PBXGroup; - children = ( - 7D20065B22F251BE008DF640 /* Foundation.xcconfig */, - 7D0AE2F02388A4E5001948BD /* magic-symbols-for-install-name.h */, - 7D0AE23223886AE9001948BD /* magic-symbols-for-install-name.c */, - 7D0AE23823886B52001948BD /* AffineTransform.swift */, - 7D0AE23923886B53001948BD /* Boxing.swift */, - 7D0AE23423886B50001948BD /* BundleLookup.mm */, - 7D0AE23523886B50001948BD /* Calendar.swift */, - 7D0AE23623886B51001948BD /* CharacterSet.swift */, - 7D0AE23723886B52001948BD /* CheckClass.swift */, - 7D0AE26D23886B82001948BD /* Codable.swift */, - 7D0AE26C23886B82001948BD /* Collections+DataProtocol.swift */, - 7D0AE24423886B68001948BD /* CombineTypealiases.swift */, - 7D0AE25E23886B79001948BD /* ContiguousBytes.swift */, - 7D0AE26223886B7B001948BD /* Data.swift */, - 7D0AE25023886B6F001948BD /* DataProtocol.swift */, - 7D0AE24C23886B6D001948BD /* DataThunks.m */, - 7D0AE26323886B7C001948BD /* Date.swift */, - 7D0AE25623886B73001948BD /* DateComponents.swift */, - 7D0AE25923886B75001948BD /* DateInterval.swift */, - 7D0AE24723886B6A001948BD /* Decimal.swift */, - 7D0AE25D23886B78001948BD /* DispatchData+DataProtocol.swift */, - 7D0AE26023886B7A001948BD /* FileManager.swift */, - 7D0AE25F23886B79001948BD /* Foundation.swift */, - 7D0AE24523886B69001948BD /* IndexPath.swift */, - 7D0AE25523886B73001948BD /* IndexSet.swift */, - 7D0AE24D23886B6E001948BD /* JSONEncoder.swift */, - 7D0AE26623886B7E001948BD /* Locale.swift */, - 7D0AE25C23886B77001948BD /* Measurement.swift */, - 7D0AE26423886B7D001948BD /* Notification.swift */, - 7D0AE24B23886B6C001948BD /* NSArray.swift */, - 7D0AE25723886B74001948BD /* NSCoder.swift */, - 7D0AE26E23886B83001948BD /* NSData+DataProtocol.swift */, - 7D0AE24223886B67001948BD /* NSDate.swift */, - 7D0AE24823886B6A001948BD /* NSDictionary.swift */, - 7D0AE24623886B69001948BD /* NSError.swift */, - 7D0AE25823886B75001948BD /* NSExpression.swift */, - 7D0AE26523886B7D001948BD /* NSFastEnumeration.swift */, - 7D0AE25123886B70001948BD /* NSGeometry.swift */, - 7D0AE24923886B6B001948BD /* NSIndexSet.swift */, - 7D0AE24023886B65001948BD /* NSItemProvider.swift */, - 7D0AE25223886B71001948BD /* NSNumber.swift */, - 7D0AE24F23886B6F001948BD /* NSObject.swift */, - 7D0AE26723886B7E001948BD /* NSOrderedCollectionDifference.swift */, - 7D0AE25323886B72001948BD /* NSPredicate.swift */, - 7D0AE26823886B7F001948BD /* NSRange.swift */, - 7D0AE25A23886B76001948BD /* NSSet.swift */, - 7D0AE25423886B72001948BD /* NSSortDescriptor.swift */, - 7D0AE25B23886B77001948BD /* NSString.swift */, - 7D0AE26123886B7B001948BD /* NSStringAPI.swift */, - 7D0AE26923886B80001948BD /* NSStringEncodings.swift */, - 7D0AE24123886B66001948BD /* NSTextCheckingResult.swift */, - 7D0AE26A23886B80001948BD /* NSUndoManager.swift */, - 7D0AE26B23886B81001948BD /* NSURL.swift */, - 7DD9FCED254A91F500E58DC4 /* NSValue.swift */, - 7D0AE2A423886B95001948BD /* PersonNameComponents.swift */, - 7D0AE2A623886B96001948BD /* PlistEncoder.swift */, - 7D0AE2AC23886B9A001948BD /* Pointers+DataProtocol.swift */, - 7D0AE2B223886B9E001948BD /* Progress.swift */, - 7D0AE2B323886B9F001948BD /* Publishers+KeyValueObserving.swift */, - 7D0AE2AD23886B9B001948BD /* Publishers+Locking.swift */, - 7D0AE2A723886B97001948BD /* Publishers+NotificationCenter.swift */, - 7D0AE2B123886B9D001948BD /* Publishers+Timer.swift */, - 7D0AE2A523886B96001948BD /* Publishers+URLSession.swift */, - 7D0AE29E23886B91001948BD /* ReferenceConvertible.swift */, - 7D0AE2A023886B92001948BD /* Scanner.swift */, - 7D0AE2AA23886B99001948BD /* Schedulers+Date.swift */, - 7D0AE2A323886B94001948BD /* Schedulers+OperationQueue.swift */, - 7D0AE2A823886B98001948BD /* Schedulers+RunLoop.swift */, - 7D0AE2A223886B94001948BD /* String.swift */, - 7D0AE2A923886B98001948BD /* TimeZone.swift */, - 7D0AE2AB23886B9A001948BD /* URL.swift */, - 7D0AE2AE23886B9C001948BD /* URLCache.swift */, - 7D0AE2B023886B9D001948BD /* URLComponents.swift */, - 7D0AE2AF23886B9C001948BD /* URLRequest.swift */, - 7D0AE29F23886B92001948BD /* URLSession.swift */, - 7D0AE2A123886B93001948BD /* UUID.swift */, - ); - path = "Foundation-swiftoverlay"; - sourceTree = ""; - }; - 7D2006CA22F3D3AB008DF640 /* Foundation-swiftoverlay-Tests */ = { - isa = PBXGroup; - children = ( - 7D8BD9D822FE956C004C00CC /* FoundationTests.xcconfig */, - 7D2006CD22F3D3AB008DF640 /* Info.plist */, - 7DFB969E23B17E3400D8DB10 /* FoundationBridge.h */, - 7DFB969C23B17E0C00D8DB10 /* FoundationBridge.m */, - 7DFB969F23B180F300D8DB10 /* StdlibUnittest expectEqual Types.swift */, - 7DFB96A123B187B300D8DB10 /* StdlibUnittest checkEquatable.swift */, - 7DFB96A223B187B300D8DB10 /* StdlibUnittest checkHashable.swift */, - 7DFB969923B175A100D8DB10 /* CodableTests.swift */, - 7DFB968F23B1753500D8DB10 /* TestAffineTransform.swift */, - 7DFB966F23B174D200D8DB10 /* TestCalendar.swift */, - 7DFB969023B1753600D8DB10 /* TestCharacterSet.swift */, - 7DFB967C23B174FF00D8DB10 /* TestData.swift */, - 7DFB967B23B174FF00D8DB10 /* TestDate.swift */, - 7DFB967D23B174FF00D8DB10 /* TestDateInterval.swift */, - 7DFB968123B1751100D8DB10 /* TestDecimal.swift */, - 7DFB968323B1751100D8DB10 /* TestFileManager.swift */, - 7DFB967523B174E500D8DB10 /* TestIndexPath.swift */, - 7DFB969523B1754D00D8DB10 /* TestIndexSet.swift */, - 7DFB969123B1753600D8DB10 /* TestJSONEncoder.swift */, - 7DFB967123B174D200D8DB10 /* TestLocale.swift */, - 7DFB968823B1752200D8DB10 /* TestMeasurement.swift */, - 7DFB967023B174D200D8DB10 /* TestNotification.swift */, - 7DFB967623B174E500D8DB10 /* TestNSRange.swift */, - 7DFB968723B1752200D8DB10 /* TestNSString.swift */, - 7DFB968223B1751100D8DB10 /* TestPersonNameComponents.swift */, - 7DFB966B23B174BA00D8DB10 /* TestPlistEncoder.swift */, - 7DFB969623B1754D00D8DB10 /* TestProgress.swift */, - 7DFB968923B1752200D8DB10 /* TestTimeZone.swift */, - 7DFB967723B174E500D8DB10 /* TestURL.swift */, - 7DFB968A23B1752300D8DB10 /* TestUserInfo.swift */, - 7DFB966C23B174BB00D8DB10 /* TestUUID.swift */, - ); - path = "Foundation-swiftoverlay-Tests"; - sourceTree = ""; - }; - 7D2006D622F3D3DA008DF640 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 15F987BC2475AB6E00451F92 /* Combine.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 7D81A8D422E936E700739BB9 = { - isa = PBXGroup; - children = ( - 7DF02CBE22F4DF1A00C66A76 /* Config */, - 7DEBC66123AD7FD900B40DAF /* shims */, - 7DA3865623C803810050CCB3 /* CoreFoundation-swiftoverlay */, - 7DA3865B23C803810050CCB3 /* CoreFoundation-swiftoverlay-Tests */, - 7D20064E22F24525008DF640 /* Foundation-swiftoverlay */, - 7D2006CA22F3D3AB008DF640 /* Foundation-swiftoverlay-Tests */, - 7D81A8DE22E936E700739BB9 /* Products */, - 7D2006D622F3D3DA008DF640 /* Frameworks */, - ); - sourceTree = ""; - }; - 7D81A8DE22E936E700739BB9 /* Products */ = { - isa = PBXGroup; - children = ( - 7D20064D22F24524008DF640 /* libswiftFoundation.dylib */, - 7D2006C922F3D3AB008DF640 /* Foundation-swiftoverlay-Tests.xctest */, - 7DA3866323C804530050CCB3 /* libswiftCoreFoundation.dylib */, - 7DA3866B23C804740050CCB3 /* CoreFoundation-swiftoverlay-Tests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 7DA3865623C803810050CCB3 /* CoreFoundation-swiftoverlay */ = { - isa = PBXGroup; - children = ( - 7DA3865A23C803810050CCB3 /* CoreFoundation.xcconfig */, - 7DA3865823C803810050CCB3 /* magic-symbols-for-install-name.h */, - 7DA3865723C803810050CCB3 /* magic-symbols-for-install-name.c */, - 7DA3865923C803810050CCB3 /* CoreFoundation.swift */, - ); - path = "CoreFoundation-swiftoverlay"; - sourceTree = ""; - }; - 7DA3865B23C803810050CCB3 /* CoreFoundation-swiftoverlay-Tests */ = { - isa = PBXGroup; - children = ( - 7DA3865C23C803810050CCB3 /* CoreFoundationTests.xcconfig */, - 7DA3865D23C803810050CCB3 /* CoreFoundationTests.swift */, - 7DA3865E23C803810050CCB3 /* Info.plist */, - ); - path = "CoreFoundation-swiftoverlay-Tests"; - sourceTree = ""; - }; - 7DEBC66123AD7FD900B40DAF /* shims */ = { - isa = PBXGroup; - children = ( - 7DEBC68023AD80EA00B40DAF /* module.modulemap */, - 7DEBC66223AD7FFE00B40DAF /* FoundationOverlayShims.h */, - 7DEBC66323AD805000B40DAF /* FoundationShimSupport.h */, - 7DEBC67723AD80D800B40DAF /* NSCalendarShims.h */, - 7DEBC67923AD80D800B40DAF /* NSCharacterSetShims.h */, - 7DEBC67F23AD80D900B40DAF /* NSCoderShims.h */, - 7DEBC67323AD80D800B40DAF /* NSDataShims.h */, - 7DEBC67823AD80D800B40DAF /* NSDictionaryShims.h */, - 7DEBC67423AD80D800B40DAF /* NSErrorShims.h */, - 7DEBC67E23AD80D900B40DAF /* NSFileManagerShims.h */, - 7DEBC67C23AD80D900B40DAF /* NSIndexPathShims.h */, - 7DEBC67523AD80D800B40DAF /* NSIndexSetShims.h */, - 7DEBC67B23AD80D900B40DAF /* NSKeyedArchiverShims.h */, - 7DEBC67A23AD80D800B40DAF /* NSLocaleShims.h */, - 7DEBC67D23AD80D900B40DAF /* NSTimeZoneShims.h */, - 7DEBC67623AD80D800B40DAF /* NSUndoManagerShims.h */, - 7DA3867D23C807A80050CCB3 /* CoreFoundationOverlayShims.h */, - 7DA3867F23C807C90050CCB3 /* CFCharacterSetShims.h */, - 7DA3867E23C807C90050CCB3 /* CFHashingShims.h */, - ); - path = shims; - sourceTree = ""; - }; - 7DF02CBE22F4DF1A00C66A76 /* Config */ = { - isa = PBXGroup; - children = ( - 7DF02CC022F4DF1A00C66A76 /* overlay-base.xcconfig */, - DD2756C5249814450079060F /* overlay-debug.xcconfig */, - DD2756C4249814450079060F /* overlay-release.xcconfig */, - DD8301FA24993C14008940B5 /* overlay-shared.xcconfig */, - 7DF02CC422F4DF1A00C66A76 /* install-swiftmodules.sh */, - DD8301FB24993D7C008940B5 /* overlay-tests-shared.xcconfig */, - ); - path = Config; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 7D20064922F24524008DF640 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 7D0AE2F12388A4E5001948BD /* magic-symbols-for-install-name.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7DA3865F23C804530050CCB3 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 7DA3867623C804B60050CCB3 /* magic-symbols-for-install-name.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 7D20064C22F24524008DF640 /* Foundation-swiftoverlay */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7D20065522F24525008DF640 /* Build configuration list for PBXNativeTarget "Foundation-swiftoverlay" */; - buildPhases = ( - 7D20064922F24524008DF640 /* Headers */, - 7D20064A22F24524008DF640 /* Sources */, - 7D20064B22F24524008DF640 /* Frameworks */, - 7D20065C22F25325008DF640 /* Install Swift Module */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Foundation-swiftoverlay"; - productName = Foundation; - productReference = 7D20064D22F24524008DF640 /* libswiftFoundation.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; - 7D2006C822F3D3AB008DF640 /* Foundation-swiftoverlay-Tests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7D2006D322F3D3AB008DF640 /* Build configuration list for PBXNativeTarget "Foundation-swiftoverlay-Tests" */; - buildPhases = ( - 7D2006C522F3D3AB008DF640 /* Sources */, - 7D2006C622F3D3AB008DF640 /* Frameworks */, - 7D2006C722F3D3AB008DF640 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 7D2006D522F3D3D1008DF640 /* PBXTargetDependency */, - ); - name = "Foundation-swiftoverlay-Tests"; - productName = FoundationTests; - productReference = 7D2006C922F3D3AB008DF640 /* Foundation-swiftoverlay-Tests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 7DA3866223C804530050CCB3 /* CoreFoundation-swiftoverlay */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7DA3866423C804530050CCB3 /* Build configuration list for PBXNativeTarget "CoreFoundation-swiftoverlay" */; - buildPhases = ( - 7DA3865F23C804530050CCB3 /* Headers */, - 7DA3866023C804530050CCB3 /* Sources */, - 7DA3866123C804530050CCB3 /* Frameworks */, - 3631B4BB23CFDE7400D910A5 /* Install Swift Module */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "CoreFoundation-swiftoverlay"; - productName = CoreFoundation; - productReference = 7DA3866323C804530050CCB3 /* libswiftCoreFoundation.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; - 7DA3866A23C804740050CCB3 /* CoreFoundation-swiftoverlay-Tests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7DA3867323C804740050CCB3 /* Build configuration list for PBXNativeTarget "CoreFoundation-swiftoverlay-Tests" */; - buildPhases = ( - 7DA3866723C804740050CCB3 /* Sources */, - 7DA3866823C804740050CCB3 /* Frameworks */, - 7DA3866923C804740050CCB3 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 7DA3867223C804740050CCB3 /* PBXTargetDependency */, - ); - name = "CoreFoundation-swiftoverlay-Tests"; - productName = "CoreFoundation-swiftoverlay-Tests"; - productReference = 7DA3866B23C804740050CCB3 /* CoreFoundation-swiftoverlay-Tests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 7D81A8D522E936E700739BB9 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1200; - LastUpgradeCheck = 1220; - ORGANIZATIONNAME = Apple; - TargetAttributes = { - 7D20064C22F24524008DF640 = { - CreatedOnToolsVersion = 11.0; - LastSwiftMigration = 1100; - }; - 7D2006C822F3D3AB008DF640 = { - CreatedOnToolsVersion = 11.0; - LastSwiftMigration = 1140; - }; - 7DA3866223C804530050CCB3 = { - CreatedOnToolsVersion = 12.0; - }; - 7DA3866A23C804740050CCB3 = { - CreatedOnToolsVersion = 12.0; - }; - }; - }; - buildConfigurationList = 7D81A8D822E936E700739BB9 /* Build configuration list for PBXProject "Foundation-swiftoverlay" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 7D81A8D422E936E700739BB9; - productRefGroup = 7D81A8DE22E936E700739BB9 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 7D20064C22F24524008DF640 /* Foundation-swiftoverlay */, - 7D2006C822F3D3AB008DF640 /* Foundation-swiftoverlay-Tests */, - 7DA3866223C804530050CCB3 /* CoreFoundation-swiftoverlay */, - 7DA3866A23C804740050CCB3 /* CoreFoundation-swiftoverlay-Tests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 7D2006C722F3D3AB008DF640 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7DA3866923C804740050CCB3 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3631B4BB23CFDE7400D910A5 /* Install Swift Module */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Install Swift Module"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "exec \"${PROJECT_DIR}/Config/install-swiftmodules.sh\"\n"; - }; - 7D20065C22F25325008DF640 /* Install Swift Module */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 12; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Install Swift Module"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "exec \"${PROJECT_DIR}/Config/install-swiftmodules.sh\"\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 7D20064A22F24524008DF640 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7D0AE2B823886B9F001948BD /* String.swift in Sources */, - 7D0AE29A23886B85001948BD /* NSURL.swift in Sources */, - 7D0AE27F23886B84001948BD /* DataProtocol.swift in Sources */, - 7D0AE2C023886B9F001948BD /* Schedulers+Date.swift in Sources */, - 7D0AE2B523886B9F001948BD /* URLSession.swift in Sources */, - 7D0AE28523886B84001948BD /* DateComponents.swift in Sources */, - 7D0AE23323886AE9001948BD /* magic-symbols-for-install-name.c in Sources */, - 7D0AE2C923886BA0001948BD /* Publishers+KeyValueObserving.swift in Sources */, - 7DD9FCEE254A91F500E58DC4 /* NSValue.swift in Sources */, - 7D0AE27E23886B84001948BD /* NSObject.swift in Sources */, - 7D0AE2C823886BA0001948BD /* Progress.swift in Sources */, - 7D0AE23E23886B53001948BD /* AffineTransform.swift in Sources */, - 7D0AE28A23886B84001948BD /* NSString.swift in Sources */, - 7D0AE29923886B85001948BD /* NSUndoManager.swift in Sources */, - 7D0AE2C323886BA0001948BD /* Publishers+Locking.swift in Sources */, - 7D0AE27423886B83001948BD /* IndexPath.swift in Sources */, - 7D0AE29B23886B85001948BD /* Collections+DataProtocol.swift in Sources */, - 7D0AE2BF23886B9F001948BD /* TimeZone.swift in Sources */, - 7D0AE28423886B84001948BD /* IndexSet.swift in Sources */, - 7D0AE29423886B85001948BD /* NSFastEnumeration.swift in Sources */, - 7D0AE27023886B83001948BD /* NSTextCheckingResult.swift in Sources */, - 7D0AE27723886B83001948BD /* NSDictionary.swift in Sources */, - 7D0AE28E23886B84001948BD /* Foundation.swift in Sources */, - 7D0AE2C723886BA0001948BD /* Publishers+Timer.swift in Sources */, - 7D0AE26F23886B83001948BD /* NSItemProvider.swift in Sources */, - 7D0AE27A23886B83001948BD /* NSArray.swift in Sources */, - 7D0AE2BD23886B9F001948BD /* Publishers+NotificationCenter.swift in Sources */, - 7D0AE2BC23886B9F001948BD /* PlistEncoder.swift in Sources */, - 7D0AE29123886B84001948BD /* Data.swift in Sources */, - 7D0AE27323886B83001948BD /* CombineTypealiases.swift in Sources */, - 7D0AE28223886B84001948BD /* NSPredicate.swift in Sources */, - 7D0AE28323886B84001948BD /* NSSortDescriptor.swift in Sources */, - 7D0AE29C23886B85001948BD /* Codable.swift in Sources */, - 7D0AE29723886B85001948BD /* NSRange.swift in Sources */, - 7D0AE2B923886B9F001948BD /* Schedulers+OperationQueue.swift in Sources */, - 7D0AE27B23886B83001948BD /* DataThunks.m in Sources */, - 7D0AE2B623886B9F001948BD /* Scanner.swift in Sources */, - 7D0AE2B423886B9F001948BD /* ReferenceConvertible.swift in Sources */, - 7D0AE29523886B85001948BD /* Locale.swift in Sources */, - 7D0AE29623886B85001948BD /* NSOrderedCollectionDifference.swift in Sources */, - 7D0AE28823886B84001948BD /* DateInterval.swift in Sources */, - 7D0AE2C123886B9F001948BD /* URL.swift in Sources */, - 7D0AE2BB23886B9F001948BD /* Publishers+URLSession.swift in Sources */, - 7D0AE27C23886B84001948BD /* JSONEncoder.swift in Sources */, - 7D0AE27123886B83001948BD /* NSDate.swift in Sources */, - 7D0AE28F23886B84001948BD /* FileManager.swift in Sources */, - 7D0AE28723886B84001948BD /* NSExpression.swift in Sources */, - 7D0AE29D23886B85001948BD /* NSData+DataProtocol.swift in Sources */, - 7D0AE28623886B84001948BD /* NSCoder.swift in Sources */, - 7D0AE28C23886B84001948BD /* DispatchData+DataProtocol.swift in Sources */, - 7D0AE2B723886B9F001948BD /* UUID.swift in Sources */, - 7D0AE27623886B83001948BD /* Decimal.swift in Sources */, - 7D0AE2C423886BA0001948BD /* URLCache.swift in Sources */, - 7D0AE2C223886BA0001948BD /* Pointers+DataProtocol.swift in Sources */, - 7D0AE28023886B84001948BD /* NSGeometry.swift in Sources */, - 7D0AE27523886B83001948BD /* NSError.swift in Sources */, - 7D0AE28123886B84001948BD /* NSNumber.swift in Sources */, - 7D0AE28B23886B84001948BD /* Measurement.swift in Sources */, - 7D0AE29823886B85001948BD /* NSStringEncodings.swift in Sources */, - 7D0AE28D23886B84001948BD /* ContiguousBytes.swift in Sources */, - 7D0AE2CC23888DE0001948BD /* CheckClass.swift in Sources */, - 7D0AE27823886B83001948BD /* NSIndexSet.swift in Sources */, - 7D0AE2BA23886B9F001948BD /* PersonNameComponents.swift in Sources */, - 7D0AE23A23886B53001948BD /* BundleLookup.mm in Sources */, - 7D0AE23C23886B53001948BD /* CharacterSet.swift in Sources */, - 7D0AE2C623886BA0001948BD /* URLComponents.swift in Sources */, - 7D0AE29223886B84001948BD /* Date.swift in Sources */, - 7D0AE23F23886B53001948BD /* Boxing.swift in Sources */, - 7D0AE29323886B85001948BD /* Notification.swift in Sources */, - 7D0AE23B23886B53001948BD /* Calendar.swift in Sources */, - 7D0AE29023886B84001948BD /* NSStringAPI.swift in Sources */, - 7D0AE28923886B84001948BD /* NSSet.swift in Sources */, - 7D0AE2C523886BA0001948BD /* URLRequest.swift in Sources */, - 7D0AE2BE23886B9F001948BD /* Schedulers+RunLoop.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7D2006C522F3D3AB008DF640 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7DFB969423B1753600D8DB10 /* TestJSONEncoder.swift in Sources */, - 7DFB968423B1751100D8DB10 /* TestDecimal.swift in Sources */, - 7DFB966E23B174BB00D8DB10 /* TestUUID.swift in Sources */, - 7DFB967F23B174FF00D8DB10 /* TestData.swift in Sources */, - 7DFB968623B1751100D8DB10 /* TestFileManager.swift in Sources */, - 7DFB969723B1754D00D8DB10 /* TestIndexSet.swift in Sources */, - 7DFB967423B174D200D8DB10 /* TestLocale.swift in Sources */, - 7DFB968B23B1752300D8DB10 /* TestNSString.swift in Sources */, - 7DFB968D23B1752300D8DB10 /* TestTimeZone.swift in Sources */, - 7DFB96A423B187B400D8DB10 /* StdlibUnittest checkHashable.swift in Sources */, - 7DFB968E23B1752300D8DB10 /* TestUserInfo.swift in Sources */, - 7DFB969823B1754D00D8DB10 /* TestProgress.swift in Sources */, - 7DFB967923B174E500D8DB10 /* TestNSRange.swift in Sources */, - 7DFB967E23B174FF00D8DB10 /* TestDate.swift in Sources */, - 7DFB969323B1753600D8DB10 /* TestCharacterSet.swift in Sources */, - 7DFB969A23B175A100D8DB10 /* CodableTests.swift in Sources */, - 7DFB968C23B1752300D8DB10 /* TestMeasurement.swift in Sources */, - 7DFB967323B174D200D8DB10 /* TestNotification.swift in Sources */, - 7DFB969223B1753600D8DB10 /* TestAffineTransform.swift in Sources */, - 7DFB966D23B174BB00D8DB10 /* TestPlistEncoder.swift in Sources */, - 7DFB969D23B17E0C00D8DB10 /* FoundationBridge.m in Sources */, - 7DFB968023B174FF00D8DB10 /* TestDateInterval.swift in Sources */, - 7DFB96A023B180F300D8DB10 /* StdlibUnittest expectEqual Types.swift in Sources */, - 7DFB96A323B187B400D8DB10 /* StdlibUnittest checkEquatable.swift in Sources */, - 7DFB967223B174D200D8DB10 /* TestCalendar.swift in Sources */, - 7DFB967823B174E500D8DB10 /* TestIndexPath.swift in Sources */, - 7DFB967A23B174E500D8DB10 /* TestURL.swift in Sources */, - 7DFB968523B1751100D8DB10 /* TestPersonNameComponents.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7DA3866023C804530050CCB3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7DA3867723C804BC0050CCB3 /* magic-symbols-for-install-name.c in Sources */, - 7DA3867823C804BC0050CCB3 /* CoreFoundation.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7DA3866723C804740050CCB3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7DA3867923C804C40050CCB3 /* CoreFoundationTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 7D2006D522F3D3D1008DF640 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 7D20064C22F24524008DF640 /* Foundation-swiftoverlay */; - targetProxy = 7D2006D422F3D3D1008DF640 /* PBXContainerItemProxy */; - }; - 7DA3867223C804740050CCB3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 7DA3866223C804530050CCB3 /* CoreFoundation-swiftoverlay */; - targetProxy = 7DA3867123C804740050CCB3 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 7D20065322F24525008DF640 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7D20065B22F251BE008DF640 /* Foundation.xcconfig */; - buildSettings = { - }; - name = Debug; - }; - 7D20065422F24525008DF640 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7D20065B22F251BE008DF640 /* Foundation.xcconfig */; - buildSettings = { - }; - name = Release; - }; - 7D2006D122F3D3AB008DF640 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7D8BD9D822FE956C004C00CC /* FoundationTests.xcconfig */; - buildSettings = { - }; - name = Debug; - }; - 7D2006D222F3D3AB008DF640 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7D8BD9D822FE956C004C00CC /* FoundationTests.xcconfig */; - buildSettings = { - }; - name = Release; - }; - 7D81A8E422E936E700739BB9 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DD2756C5249814450079060F /* overlay-debug.xcconfig */; - buildSettings = { - }; - name = Debug; - }; - 7D81A8E522E936E700739BB9 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DD2756C4249814450079060F /* overlay-release.xcconfig */; - buildSettings = { - }; - name = Release; - }; - 7DA3866523C804530050CCB3 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7DA3865A23C803810050CCB3 /* CoreFoundation.xcconfig */; - buildSettings = { - }; - name = Debug; - }; - 7DA3866623C804530050CCB3 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7DA3865A23C803810050CCB3 /* CoreFoundation.xcconfig */; - buildSettings = { - }; - name = Release; - }; - 7DA3867423C804740050CCB3 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7DA3865C23C803810050CCB3 /* CoreFoundationTests.xcconfig */; - buildSettings = { - }; - name = Debug; - }; - 7DA3867523C804740050CCB3 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7DA3865C23C803810050CCB3 /* CoreFoundationTests.xcconfig */; - buildSettings = { - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 7D20065522F24525008DF640 /* Build configuration list for PBXNativeTarget "Foundation-swiftoverlay" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7D20065322F24525008DF640 /* Debug */, - 7D20065422F24525008DF640 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7D2006D322F3D3AB008DF640 /* Build configuration list for PBXNativeTarget "Foundation-swiftoverlay-Tests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7D2006D122F3D3AB008DF640 /* Debug */, - 7D2006D222F3D3AB008DF640 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7D81A8D822E936E700739BB9 /* Build configuration list for PBXProject "Foundation-swiftoverlay" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7D81A8E422E936E700739BB9 /* Debug */, - 7D81A8E522E936E700739BB9 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7DA3866423C804530050CCB3 /* Build configuration list for PBXNativeTarget "CoreFoundation-swiftoverlay" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7DA3866523C804530050CCB3 /* Debug */, - 7DA3866623C804530050CCB3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7DA3867323C804740050CCB3 /* Build configuration list for PBXNativeTarget "CoreFoundation-swiftoverlay-Tests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7DA3867423C804740050CCB3 /* Debug */, - 7DA3867523C804740050CCB3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 7D81A8D522E936E700739BB9 /* Project object */; -} diff --git a/Darwin/Foundation-swiftoverlay.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Darwin/Foundation-swiftoverlay.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a625..0000000000 --- a/Darwin/Foundation-swiftoverlay.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Darwin/Foundation-swiftoverlay.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Darwin/Foundation-swiftoverlay.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d..0000000000 --- a/Darwin/Foundation-swiftoverlay.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/Darwin/Foundation-swiftoverlay.xcodeproj/xcshareddata/xcschemes/CoreFoundation-swiftoverlay.xcscheme b/Darwin/Foundation-swiftoverlay.xcodeproj/xcshareddata/xcschemes/CoreFoundation-swiftoverlay.xcscheme deleted file mode 100644 index 4f0b56d791..0000000000 --- a/Darwin/Foundation-swiftoverlay.xcodeproj/xcshareddata/xcschemes/CoreFoundation-swiftoverlay.xcscheme +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Darwin/Foundation-swiftoverlay.xcodeproj/xcshareddata/xcschemes/Foundation-swiftoverlay.xcscheme b/Darwin/Foundation-swiftoverlay.xcodeproj/xcshareddata/xcschemes/Foundation-swiftoverlay.xcscheme deleted file mode 100644 index 663a283021..0000000000 --- a/Darwin/Foundation-swiftoverlay.xcodeproj/xcshareddata/xcschemes/Foundation-swiftoverlay.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Darwin/Foundation-swiftoverlay/AffineTransform.swift b/Darwin/Foundation-swiftoverlay/AffineTransform.swift deleted file mode 100644 index 20877ed0cb..0000000000 --- a/Darwin/Foundation-swiftoverlay/AffineTransform.swift +++ /dev/null @@ -1,362 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -#if os(macOS) - -private let ε: CGFloat = 2.22045e-16 - -public struct AffineTransform : ReferenceConvertible, Hashable, CustomStringConvertible { - public var m11, m12, m21, m22, tX, tY: CGFloat - - public typealias ReferenceType = NSAffineTransform - - /** - Creates an affine transformation. - */ - public init(m11: CGFloat, m12: CGFloat, m21: CGFloat, m22: CGFloat, tX: CGFloat, tY: CGFloat) { - self.m11 = m11 - self.m12 = m12 - self.m21 = m21 - self.m22 = m22 - self.tX = tX - self.tY = tY - } - - private init(reference: __shared NSAffineTransform) { - m11 = reference.transformStruct.m11 - m12 = reference.transformStruct.m12 - m21 = reference.transformStruct.m21 - m22 = reference.transformStruct.m22 - tX = reference.transformStruct.tX - tY = reference.transformStruct.tY - } - - private var reference: NSAffineTransform { - let ref = NSAffineTransform() - ref.transformStruct = NSAffineTransformStruct(m11: m11, m12: m12, m21: m21, m22: m22, tX: tX, tY: tY) - return ref - } - - /** - Creates an affine transformation matrix with identity values. - - seealso: identity - */ - public init() { - self.init(m11: CGFloat(1.0), m12: CGFloat(0.0), - m21: CGFloat(0.0), m22: CGFloat(1.0), - tX: CGFloat(0.0), tY: CGFloat(0.0)) - } - - /** - Creates an affine transformation matrix from translation values. - The matrix takes the following form: - - [ 1 0 0 ] - [ 0 1 0 ] - [ x y 1 ] - */ - public init(translationByX x: CGFloat, byY y: CGFloat) { - self.init(m11: CGFloat(1.0), m12: CGFloat(0.0), - m21: CGFloat(0.0), m22: CGFloat(1.0), - tX: x, tY: y) - } - - /** - Creates an affine transformation matrix from scaling values. - The matrix takes the following form: - - [ x 0 0 ] - [ 0 y 0 ] - [ 0 0 1 ] - */ - public init(scaleByX x: CGFloat, byY y: CGFloat) { - self.init(m11: x, m12: CGFloat(0.0), - m21: CGFloat(0.0), m22: y, - tX: CGFloat(0.0), tY: CGFloat(0.0)) - } - - /** - Creates an affine transformation matrix from scaling a single value. - The matrix takes the following form: - - [ f 0 0 ] - [ 0 f 0 ] - [ 0 0 1 ] - */ - public init(scale factor: CGFloat) { - self.init(scaleByX: factor, byY: factor) - } - - /** - Creates an affine transformation matrix from rotation value (angle in radians). - The matrix takes the following form: - - [ cos α sin α 0 ] - [ -sin α cos α 0 ] - [ 0 0 1 ] - */ - public init(rotationByRadians angle: CGFloat) { - let α = Double(angle) - - let sine = CGFloat(sin(α)) - let cosine = CGFloat(cos(α)) - - self.init(m11: cosine, m12: sine, m21: -sine, m22: cosine, tX: 0, tY: 0) - } - - /** - Creates an affine transformation matrix from a rotation value (angle in degrees). - The matrix takes the following form: - - [ cos α sin α 0 ] - [ -sin α cos α 0 ] - [ 0 0 1 ] - */ - public init(rotationByDegrees angle: CGFloat) { - let α = angle * .pi / 180.0 - self.init(rotationByRadians: α) - } - - /** - An identity affine transformation matrix - - [ 1 0 0 ] - [ 0 1 0 ] - [ 0 0 1 ] - */ - public static let identity = AffineTransform(m11: 1, m12: 0, m21: 0, m22: 1, tX: 0, tY: 0) - - // Translating - - public mutating func translate(x: CGFloat, y: CGFloat) { - tX += m11 * x + m21 * y - tY += m12 * x + m22 * y - } - - /** - Mutates an affine transformation matrix from a rotation value (angle α in degrees). - The matrix takes the following form: - - [ cos α sin α 0 ] - [ -sin α cos α 0 ] - [ 0 0 1 ] - */ - public mutating func rotate(byDegrees angle: CGFloat) { - let α = angle * .pi / 180.0 - return rotate(byRadians: α) - } - - /** - Mutates an affine transformation matrix from a rotation value (angle α in radians). - The matrix takes the following form: - - [ cos α sin α 0 ] - [ -sin α cos α 0 ] - [ 0 0 1 ] - */ - public mutating func rotate(byRadians angle: CGFloat) { - let t2 = self - let t1 = AffineTransform(rotationByRadians: angle) - - var t = AffineTransform.identity - - t.m11 = t1.m11 * t2.m11 + t1.m12 * t2.m21 - t.m12 = t1.m11 * t2.m12 + t1.m12 * t2.m22 - t.m21 = t1.m21 * t2.m11 + t1.m22 * t2.m21 - t.m22 = t1.m21 * t2.m12 + t1.m22 * t2.m22 - t.tX = t1.tX * t2.m11 + t1.tY * t2.m21 + t2.tX - t.tY = t1.tX * t2.m12 + t1.tY * t2.m22 + t2.tY - - self = t - } - - /** - Creates an affine transformation matrix by combining the receiver with `transformStruct`. - That is, it computes `T * M` and returns the result, where `T` is the receiver's and `M` is - the `transformStruct`'s affine transformation matrix. - The resulting matrix takes the following form: - - [ m11_T m12_T 0 ] [ m11_M m12_M 0 ] - T * M = [ m21_T m22_T 0 ] [ m21_M m22_M 0 ] - [ tX_T tY_T 1 ] [ tX_M tY_M 1 ] - - [ (m11_T*m11_M + m12_T*m21_M) (m11_T*m12_M + m12_T*m22_M) 0 ] - = [ (m21_T*m11_M + m22_T*m21_M) (m21_T*m12_M + m22_T*m22_M) 0 ] - [ (tX_T*m11_M + tY_T*m21_M + tX_M) (tX_T*m12_M + tY_T*m22_M + tY_M) 1 ] - */ - private func concatenated(_ other: AffineTransform) -> AffineTransform { - let (t, m) = (self, other) - - // this could be optimized with a vector version - return AffineTransform( - m11: (t.m11 * m.m11) + (t.m12 * m.m21), m12: (t.m11 * m.m12) + (t.m12 * m.m22), - m21: (t.m21 * m.m11) + (t.m22 * m.m21), m22: (t.m21 * m.m12) + (t.m22 * m.m22), - tX: (t.tX * m.m11) + (t.tY * m.m21) + m.tX, - tY: (t.tX * m.m12) + (t.tY * m.m22) + m.tY - ) - } - - // Scaling - public mutating func scale(_ scale: CGFloat) { - self.scale(x: scale, y: scale) - } - - public mutating func scale(x: CGFloat, y: CGFloat) { - m11 *= x - m12 *= x - m21 *= y - m22 *= y - } - - /** - Inverts the transformation matrix if possible. Matrices with a determinant that is less than - the smallest valid representation of a double value greater than zero are considered to be - invalid for representing as an inverse. If the input AffineTransform can potentially fall into - this case then the inverted() method is suggested to be used instead since that will return - an optional value that will be nil in the case that the matrix cannot be inverted. - - D = (m11 * m22) - (m12 * m21) - - D < ε the inverse is undefined and will be nil - */ - public mutating func invert() { - guard let inverse = inverted() else { - fatalError("Transform has no inverse") - } - self = inverse - } - - public func inverted() -> AffineTransform? { - let determinant = (m11 * m22) - (m12 * m21) - if abs(determinant) <= ε { - return nil - } - var inverse = AffineTransform() - inverse.m11 = m22 / determinant - inverse.m12 = -m12 / determinant - inverse.m21 = -m21 / determinant - inverse.m22 = m11 / determinant - inverse.tX = (m21 * tY - m22 * tX) / determinant - inverse.tY = (m12 * tX - m11 * tY) / determinant - return inverse - } - - // Transforming with transform - public mutating func append(_ transform: AffineTransform) { - self = concatenated(transform) - } - - public mutating func prepend(_ transform: AffineTransform) { - self = transform.concatenated(self) - } - - // Transforming points and sizes - public func transform(_ point: NSPoint) -> NSPoint { - var newPoint = NSPoint() - newPoint.x = (m11 * point.x) + (m21 * point.y) + tX - newPoint.y = (m12 * point.x) + (m22 * point.y) + tY - return newPoint - } - - public func transform(_ size: NSSize) -> NSSize { - var newSize = NSSize() - newSize.width = (m11 * size.width) + (m21 * size.height) - newSize.height = (m12 * size.width) + (m22 * size.height) - return newSize - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(m11) - hasher.combine(m12) - hasher.combine(m21) - hasher.combine(m22) - hasher.combine(tX) - hasher.combine(tY) - } - - public var description: String { - return "{m11:\(m11), m12:\(m12), m21:\(m21), m22:\(m22), tX:\(tX), tY:\(tY)}" - } - - public var debugDescription: String { - return description - } - - public static func ==(lhs: AffineTransform, rhs: AffineTransform) -> Bool { - return lhs.m11 == rhs.m11 && lhs.m12 == rhs.m12 && - lhs.m21 == rhs.m21 && lhs.m22 == rhs.m22 && - lhs.tX == rhs.tX && lhs.tY == rhs.tY - } - -} - -extension AffineTransform : _ObjectiveCBridgeable { - public static func _getObjectiveCType() -> Any.Type { - return NSAffineTransform.self - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSAffineTransform { - return self.reference - } - - public static func _forceBridgeFromObjectiveC(_ x: NSAffineTransform, result: inout AffineTransform?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge type") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSAffineTransform, result: inout AffineTransform?) -> Bool { - result = AffineTransform(reference: x) - return true // Can't fail - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ x: NSAffineTransform?) -> AffineTransform { - guard let src = x else { return AffineTransform.identity } - return AffineTransform(reference: src) - } -} - -extension NSAffineTransform : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as AffineTransform) - } -} - -extension AffineTransform : Codable { - public init(from decoder: Decoder) throws { - var container = try decoder.unkeyedContainer() - m11 = try container.decode(CGFloat.self) - m12 = try container.decode(CGFloat.self) - m21 = try container.decode(CGFloat.self) - m22 = try container.decode(CGFloat.self) - tX = try container.decode(CGFloat.self) - tY = try container.decode(CGFloat.self) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.unkeyedContainer() - try container.encode(self.m11) - try container.encode(self.m12) - try container.encode(self.m21) - try container.encode(self.m22) - try container.encode(self.tX) - try container.encode(self.tY) - } -} - -#endif diff --git a/Darwin/Foundation-swiftoverlay/Boxing.swift b/Darwin/Foundation-swiftoverlay/Boxing.swift deleted file mode 100644 index 06c220d6ed..0000000000 --- a/Darwin/Foundation-swiftoverlay/Boxing.swift +++ /dev/null @@ -1,64 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -/// A class type which acts as a handle (pointer-to-pointer) to a Foundation reference type which has only a mutable class (e.g., NSURLComponents). -/// -/// Note: This assumes that the result of calling copy() is mutable. The documentation says that classes which do not have a mutable/immutable distinction should just adopt NSCopying instead of NSMutableCopying. -internal final class _MutableHandle - where MutableType : NSCopying { - fileprivate var _pointer : MutableType - - init(reference : __shared MutableType) { - _pointer = reference.copy() as! MutableType - } - - init(adoptingReference reference: MutableType) { - _pointer = reference - } - - /// Apply a closure to the reference type. - func map(_ whatToDo : (MutableType) throws -> ReturnType) rethrows -> ReturnType { - return try whatToDo(_pointer) - } - - func _copiedReference() -> MutableType { - return _pointer.copy() as! MutableType - } - - func _uncopiedReference() -> MutableType { - return _pointer - } -} - -/// Describes common operations for Foundation struct types that are bridged to a mutable object (e.g. NSURLComponents). -internal protocol _MutableBoxing : ReferenceConvertible { - var _handle : _MutableHandle { get set } - - /// Apply a mutating closure to the reference type, regardless if it is mutable or immutable. - /// - /// This function performs the correct copy-on-write check for efficient mutation. - mutating func _applyMutation(_ whatToDo : (ReferenceType) -> ReturnType) -> ReturnType -} - -extension _MutableBoxing { - @inline(__always) - mutating func _applyMutation(_ whatToDo : (ReferenceType) -> ReturnType) -> ReturnType { - // Only create a new box if we are not uniquely referenced - if !isKnownUniquelyReferenced(&_handle) { - let ref = _handle._pointer - _handle = _MutableHandle(reference: ref) - } - return whatToDo(_handle._pointer) - } -} diff --git a/Darwin/Foundation-swiftoverlay/BundleLookup.mm b/Darwin/Foundation-swiftoverlay/BundleLookup.mm deleted file mode 100644 index 454b1c3a93..0000000000 --- a/Darwin/Foundation-swiftoverlay/BundleLookup.mm +++ /dev/null @@ -1,46 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import - -#include - -// This method is only used on "embedded" targets. It's not necessary on -// Mac or simulators. -#if TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR - -/// CoreFoundation SPI for finding the enclosing bundle. This is only -/// ever called on older OSes, so there's no worry of running into -/// trouble if the implementation is changed later on. -extern "C" CFURLRef _CFBundleCopyBundleURLForExecutableURL(CFURLRef url); - -@implementation NSBundle (SwiftAdditions) - -/// Given an executable path as a C string, look up the corresponding -/// NSBundle instance, if any. -+ (NSBundle *)_swift_bundleWithExecutablePath: (const char *)path { - NSString *nspath = [[NSFileManager defaultManager] - stringWithFileSystemRepresentation:path length:strlen(path)]; - NSURL *executableURL = [NSURL fileURLWithPath:nspath]; - NSURL *bundleURL = - (NSURL *)_CFBundleCopyBundleURLForExecutableURL((CFURLRef)executableURL); - if (!bundleURL) - return nil; - - NSBundle *bundle = [NSBundle bundleWithURL: bundleURL]; - [bundleURL release]; - return bundle; -} - -@end - -#endif diff --git a/Darwin/Foundation-swiftoverlay/Calendar.swift b/Darwin/Foundation-swiftoverlay/Calendar.swift deleted file mode 100644 index b70c8f9f0e..0000000000 --- a/Darwin/Foundation-swiftoverlay/Calendar.swift +++ /dev/null @@ -1,1164 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -@_implementationOnly import _FoundationOverlayShims - -/** - `Calendar` encapsulates information about systems of reckoning time in which the beginning, length, and divisions of a year are defined. It provides information about the calendar and support for calendrical computations such as determining the range of a given calendrical unit and adding units to a given absolute time. -*/ -public struct Calendar : Hashable, Equatable, ReferenceConvertible, _MutableBoxing { - public typealias ReferenceType = NSCalendar - - private var _autoupdating: Bool - internal var _handle: _MutableHandle - - /// Calendar supports many different kinds of calendars. Each is identified by an identifier here. - public enum Identifier { - /// The common calendar in Europe, the Western Hemisphere, and elsewhere. - case gregorian - - case buddhist - case chinese - case coptic - case ethiopicAmeteMihret - case ethiopicAmeteAlem - case hebrew - case iso8601 - case indian - case islamic - case islamicCivil - case japanese - case persian - case republicOfChina - - /// A simple tabular Islamic calendar using the astronomical/Thursday epoch of CE 622 July 15 - @available(macOS 10.10, iOS 8.0, *) - case islamicTabular - - /// The Islamic Umm al-Qura calendar used in Saudi Arabia. This is based on astronomical calculation, instead of tabular behavior. - @available(macOS 10.10, iOS 8.0, *) - case islamicUmmAlQura - - } - - /// An enumeration for the various components of a calendar date. - /// - /// Several `Calendar` APIs use either a single unit or a set of units as input to a search algorithm. - /// - /// - seealso: `DateComponents` - public enum Component { - case era - case year - case month - case day - case hour - case minute - case second - case weekday - case weekdayOrdinal - case quarter - case weekOfMonth - case weekOfYear - case yearForWeekOfYear - case nanosecond - case calendar - case timeZone - } - - /// Returns the user's current calendar. - /// - /// This calendar does not track changes that the user makes to their preferences. - public static var current : Calendar { - return Calendar(adoptingReference: __NSCalendarCurrent() as! NSCalendar, autoupdating: false) - } - - /// A Calendar that tracks changes to user's preferred calendar. - /// - /// If mutated, this calendar will no longer track the user's preferred calendar. - /// - /// - note: The autoupdating Calendar will only compare equal to another autoupdating Calendar. - public static var autoupdatingCurrent : Calendar { - return Calendar(adoptingReference: __NSCalendarAutoupdating() as! NSCalendar, autoupdating: true) - } - - // MARK: - - // MARK: init - - /// Returns a new Calendar. - /// - /// - parameter identifier: The kind of calendar to use. - public init(identifier: __shared Identifier) { - let result = __NSCalendarCreate(Calendar._toNSCalendarIdentifier(identifier)) - _handle = _MutableHandle(adoptingReference: result as! NSCalendar) - _autoupdating = false - } - - // MARK: - - // MARK: Bridging - - fileprivate init(reference : __shared NSCalendar) { - _handle = _MutableHandle(reference: reference) - if __NSCalendarIsAutoupdating(reference) { - _autoupdating = true - } else { - _autoupdating = false - } - } - - private init(adoptingReference reference: NSCalendar, autoupdating: Bool) { - _handle = _MutableHandle(adoptingReference: reference) - _autoupdating = autoupdating - } - - // MARK: - - // - - /// The identifier of the calendar. - public var identifier : Identifier { - return Calendar._fromNSCalendarIdentifier(_handle.map({ $0.calendarIdentifier })) - } - - /// The locale of the calendar. - public var locale : Locale? { - get { - return _handle.map { $0.locale } - } - set { - _applyMutation { $0.locale = newValue } - } - } - - /// The time zone of the calendar. - public var timeZone : TimeZone { - get { - return _handle.map { $0.timeZone } - } - set { - _applyMutation { $0.timeZone = newValue } - } - } - - /// The first weekday of the calendar. - public var firstWeekday : Int { - get { - return _handle.map { $0.firstWeekday } - } - set { - _applyMutation { $0.firstWeekday = newValue } - } - } - - /// The number of minimum days in the first week. - public var minimumDaysInFirstWeek : Int { - get { - return _handle.map { $0.minimumDaysInFirstWeek } - } - set { - _applyMutation { $0.minimumDaysInFirstWeek = newValue } - } - } - - /// A list of eras in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["BC", "AD"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var eraSymbols: [String] { - return _handle.map { $0.eraSymbols } - } - - /// A list of longer-named eras in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Before Christ", "Anno Domini"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var longEraSymbols: [String] { - return _handle.map { $0.longEraSymbols } - } - - /// A list of months in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var monthSymbols: [String] { - return _handle.map { $0.monthSymbols } - } - - /// A list of shorter-named months in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var shortMonthSymbols: [String] { - return _handle.map { $0.shortMonthSymbols } - } - - /// A list of very-shortly-named months in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var veryShortMonthSymbols: [String] { - return _handle.map { $0.veryShortMonthSymbols } - } - - /// A list of standalone months in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var standaloneMonthSymbols: [String] { - return _handle.map { $0.standaloneMonthSymbols } - } - - /// A list of shorter-named standalone months in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var shortStandaloneMonthSymbols: [String] { - return _handle.map { $0.shortStandaloneMonthSymbols } - } - - /// A list of very-shortly-named standalone months in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var veryShortStandaloneMonthSymbols: [String] { - return _handle.map { $0.veryShortStandaloneMonthSymbols } - } - - /// A list of weekdays in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var weekdaySymbols: [String] { - return _handle.map { $0.weekdaySymbols } - } - - /// A list of shorter-named weekdays in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var shortWeekdaySymbols: [String] { - return _handle.map { $0.shortWeekdaySymbols } - } - - /// A list of very-shortly-named weekdays in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["S", "M", "T", "W", "T", "F", "S"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var veryShortWeekdaySymbols: [String] { - return _handle.map { $0.veryShortWeekdaySymbols } - } - - /// A list of standalone weekday names in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var standaloneWeekdaySymbols: [String] { - return _handle.map { $0.standaloneWeekdaySymbols } - } - - /// A list of shorter-named standalone weekdays in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var shortStandaloneWeekdaySymbols: [String] { - return _handle.map { $0.shortStandaloneWeekdaySymbols } - } - - /// A list of very-shortly-named weekdays in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["S", "M", "T", "W", "T", "F", "S"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var veryShortStandaloneWeekdaySymbols: [String] { - return _handle.map { $0.veryShortStandaloneWeekdaySymbols } - } - - /// A list of quarter names in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var quarterSymbols: [String] { - return _handle.map { $0.quarterSymbols } - } - - /// A list of shorter-named quarters in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Q1", "Q2", "Q3", "Q4"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var shortQuarterSymbols: [String] { - return _handle.map { $0.shortQuarterSymbols } - } - - /// A list of standalone quarter names in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var standaloneQuarterSymbols: [String] { - return _handle.map { $0.standaloneQuarterSymbols } - } - - /// A list of shorter-named standalone quarters in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Q1", "Q2", "Q3", "Q4"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var shortStandaloneQuarterSymbols: [String] { - return _handle.map { $0.shortStandaloneQuarterSymbols } - } - - /// The symbol used to represent "AM", localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `"AM"`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var amSymbol: String { - return _handle.map { $0.amSymbol } - } - - /// The symbol used to represent "PM", localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `"PM"`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var pmSymbol: String { - return _handle.map { $0.pmSymbol } - } - - // MARK: - - // - - /// Returns the minimum range limits of the values that a given component can take on in the receiver. - /// - /// As an example, in the Gregorian calendar the minimum range of values for the Day component is 1-28. - /// - parameter component: A component to calculate a range for. - /// - returns: The range, or nil if it could not be calculated. - public func minimumRange(of component: Component) -> Range? { - return _handle.map { Range($0.minimumRange(of: Calendar._toCalendarUnit([component]))) } - } - - /// The maximum range limits of the values that a given component can take on in the receive - /// - /// As an example, in the Gregorian calendar the maximum range of values for the Day component is 1-31. - /// - parameter component: A component to calculate a range for. - /// - returns: The range, or nil if it could not be calculated. - public func maximumRange(of component: Component) -> Range? { - return _handle.map { Range($0.maximumRange(of: Calendar._toCalendarUnit([component]))) } - } - - - @available(*, unavailable, message: "use range(of:in:for:) instead") - public func range(of smaller: NSCalendar.Unit, in larger: NSCalendar.Unit, for date: Date) -> NSRange { - fatalError() - } - - /// Returns the range of absolute time values that a smaller calendar component (such as a day) can take on in a larger calendar component (such as a month) that includes a specified absolute time. - /// - /// You can use this method to calculate, for example, the range the `day` component can take on in the `month` in which `date` lies. - /// - parameter smaller: The smaller calendar component. - /// - parameter larger: The larger calendar component. - /// - parameter date: The absolute time for which the calculation is performed. - /// - returns: The range of absolute time values smaller can take on in larger at the time specified by date. Returns `nil` if larger is not logically bigger than smaller in the calendar, or the given combination of components does not make sense (or is a computation which is undefined). - public func range(of smaller: Component, in larger: Component, for date: Date) -> Range? { - return _handle.map { Range($0.range(of: Calendar._toCalendarUnit([smaller]), in: Calendar._toCalendarUnit([larger]), for: date)) } - } - - @available(*, unavailable, message: "use range(of:in:for:) instead") - public func range(of unit: NSCalendar.Unit, start datep: AutoreleasingUnsafeMutablePointer?, interval tip: UnsafeMutablePointer?, for date: Date) -> Bool { - fatalError() - } - - /// Returns, via two inout parameters, the starting time and duration of a given calendar component that contains a given date. - /// - /// - seealso: `range(of:for:)` - /// - seealso: `dateInterval(of:for:)` - /// - parameter component: A calendar component. - /// - parameter start: Upon return, the starting time of the calendar component that contains the date. - /// - parameter interval: Upon return, the duration of the calendar component that contains the date. - /// - parameter date: The specified date. - /// - returns: `true` if the starting time and duration of a component could be calculated, otherwise `false`. - public func dateInterval(of component: Component, start: inout Date, interval: inout TimeInterval, for date: Date) -> Bool { - var nsDate : NSDate? - var ti : TimeInterval = 0 - if _handle.map({ $0.range(of: Calendar._toCalendarUnit([component]), start: &nsDate, interval: &ti, for: date) }) { - start = nsDate! as Date - interval = ti - return true - } else { - return false - } - } - - /// Returns the starting time and duration of a given calendar component that contains a given date. - /// - /// - parameter component: A calendar component. - /// - parameter date: The specified date. - /// - returns: A new `DateInterval` if the starting time and duration of a component could be calculated, otherwise `nil`. - @available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) - public func dateInterval(of component: Component, for date: Date) -> DateInterval? { - var start : Date = Date(timeIntervalSinceReferenceDate: 0) - var interval : TimeInterval = 0 - if self.dateInterval(of: component, start: &start, interval: &interval, for: date) { - return DateInterval(start: start, duration: interval) - } else { - return nil - } - } - - /// Returns, for a given absolute time, the ordinal number of a smaller calendar component (such as a day) within a specified larger calendar component (such as a week). - /// - /// The ordinality is in most cases not the same as the decomposed value of the component. Typically return values are 1 and greater. For example, the time 00:45 is in the first hour of the day, and for components `hour` and `day` respectively, the result would be 1. An exception is the week-in-month calculation, which returns 0 for days before the first week in the month containing the date. - /// - /// - note: Some computations can take a relatively long time. - /// - parameter smaller: The smaller calendar component. - /// - parameter larger: The larger calendar component. - /// - parameter date: The absolute time for which the calculation is performed. - /// - returns: The ordinal number of smaller within larger at the time specified by date. Returns `nil` if larger is not logically bigger than smaller in the calendar, or the given combination of components does not make sense (or is a computation which is undefined). - public func ordinality(of smaller: Component, in larger: Component, for date: Date) -> Int? { - let result = _handle.map { $0.ordinality(of: Calendar._toCalendarUnit([smaller]), in: Calendar._toCalendarUnit([larger]), for: date) } - if result == NSNotFound { return nil } - return result - } - - // MARK: - - // - - @available(*, unavailable, message: "use dateComponents(_:from:) instead") - public func getEra(_ eraValuePointer: UnsafeMutablePointer?, year yearValuePointer: UnsafeMutablePointer?, month monthValuePointer: UnsafeMutablePointer?, day dayValuePointer: UnsafeMutablePointer?, from date: Date) { fatalError() } - - @available(*, unavailable, message: "use dateComponents(_:from:) instead") - public func getEra(_ eraValuePointer: UnsafeMutablePointer?, yearForWeekOfYear yearValuePointer: UnsafeMutablePointer?, weekOfYear weekValuePointer: UnsafeMutablePointer?, weekday weekdayValuePointer: UnsafeMutablePointer?, from date: Date) { fatalError() } - - @available(*, unavailable, message: "use dateComponents(_:from:) instead") - public func getHour(_ hourValuePointer: UnsafeMutablePointer?, minute minuteValuePointer: UnsafeMutablePointer?, second secondValuePointer: UnsafeMutablePointer?, nanosecond nanosecondValuePointer: UnsafeMutablePointer?, from date: Date) { fatalError() } - - // MARK: - - // - - - @available(*, unavailable, message: "use date(byAdding:to:wrappingComponents:) instead") - public func date(byAdding unit: NSCalendar.Unit, value: Int, to date: Date, options: NSCalendar.Options = []) -> Date? { fatalError() } - - /// Returns a new `Date` representing the date calculated by adding components to a given date. - /// - /// - parameter components: A set of values to add to the date. - /// - parameter date: The starting date. - /// - parameter wrappingComponents: If `true`, the component should be incremented and wrap around to zero/one on overflow, and should not cause higher components to be incremented. The default value is `false`. - /// - returns: A new date, or nil if a date could not be calculated with the given input. - public func date(byAdding components: DateComponents, to date: Date, wrappingComponents: Bool = false) -> Date? { - return _handle.map { $0.date(byAdding: components, to: date, options: wrappingComponents ? [.wrapComponents] : []) } - } - - - @available(*, unavailable, message: "use date(byAdding:to:wrappingComponents:) instead") - public func date(byAdding comps: DateComponents, to date: Date, options opts: NSCalendar.Options = []) -> Date? { fatalError() } - - /// Returns a new `Date` representing the date calculated by adding an amount of a specific component to a given date. - /// - /// - parameter component: A single component to add. - /// - parameter value: The value of the specified component to add. - /// - parameter date: The starting date. - /// - parameter wrappingComponents: If `true`, the component should be incremented and wrap around to zero/one on overflow, and should not cause higher components to be incremented. The default value is `false`. - /// - returns: A new date, or nil if a date could not be calculated with the given input. - @available(iOS 8.0, *) - public func date(byAdding component: Component, value: Int, to date: Date, wrappingComponents: Bool = false) -> Date? { - return _handle.map { $0.date(byAdding: Calendar._toCalendarUnit([component]), value: value, to: date, options: wrappingComponents ? [.wrapComponents] : []) } - } - - /// Returns a date created from the specified components. - /// - /// - parameter components: Used as input to the search algorithm for finding a corresponding date. - /// - returns: A new `Date`, or nil if a date could not be found which matches the components. - public func date(from components: DateComponents) -> Date? { - return _handle.map { $0.date(from: components) } - } - - @available(*, unavailable, renamed: "dateComponents(_:from:)") - public func components(_ unitFlags: NSCalendar.Unit, from date: Date) -> DateComponents { fatalError() } - - /// Returns all the date components of a date, using the calendar time zone. - /// - /// - note: If you want "date information in a given time zone" in order to display it, you should use `DateFormatter` to format the date. - /// - parameter date: The `Date` to use. - /// - returns: The date components of the specified date. - public func dateComponents(_ components: Set, from date: Date) -> DateComponents { - return _handle.map { $0.components(Calendar._toCalendarUnit(components), from: date) } - } - - - @available(*, unavailable, renamed: "dateComponents(in:from:)") - public func components(in timezone: TimeZone, from date: Date) -> DateComponents { fatalError() } - - /// Returns all the date components of a date, as if in a given time zone (instead of the `Calendar` time zone). - /// - /// The time zone overrides the time zone of the `Calendar` for the purposes of this calculation. - /// - note: If you want "date information in a given time zone" in order to display it, you should use `DateFormatter` to format the date. - /// - parameter timeZone: The `TimeZone` to use. - /// - parameter date: The `Date` to use. - /// - returns: All components, calculated using the `Calendar` and `TimeZone`. - @available(iOS 8.0, *) - public func dateComponents(in timeZone: TimeZone, from date: Date) -> DateComponents { - return _handle.map { $0.components(in: timeZone, from: date) } - } - - @available(*, unavailable, renamed: "dateComponents(_:from:to:)") - public func components(_ unitFlags: NSCalendar.Unit, from startingDate: Date, to resultDate: Date, options opts: NSCalendar.Options = []) -> DateComponents { fatalError() } - - /// Returns the difference between two dates. - /// - /// - parameter components: Which components to compare. - /// - parameter start: The starting date. - /// - parameter end: The ending date. - /// - returns: The result of calculating the difference from start to end. - public func dateComponents(_ components: Set, from start: Date, to end: Date) -> DateComponents { - return _handle.map { $0.components(Calendar._toCalendarUnit(components), from: start, to: end, options: []) } - } - - @available(*, unavailable, renamed: "dateComponents(_:from:to:)") - public func components(_ unitFlags: NSCalendar.Unit, from startingDateComp: DateComponents, to resultDateComp: DateComponents, options: NSCalendar.Options = []) -> DateComponents { fatalError() } - - /// Returns the difference between two dates specified as `DateComponents`. - /// - /// For components which are not specified in each `DateComponents`, but required to specify an absolute date, the base value of the component is assumed. For example, for an `DateComponents` with just a `year` and a `month` specified, a `day` of 1, and an `hour`, `minute`, `second`, and `nanosecond` of 0 are assumed. - /// Calendrical calculations with unspecified `year` or `year` value prior to the start of a calendar are not advised. - /// For each `DateComponents`, if its `timeZone` property is set, that time zone is used for it. If the `calendar` property is set, that is used rather than the receiving calendar, and if both the `calendar` and `timeZone` are set, the `timeZone` property value overrides the time zone of the `calendar` property. - /// - /// - parameter components: Which components to compare. - /// - parameter start: The starting date components. - /// - parameter end: The ending date components. - /// - returns: The result of calculating the difference from start to end. - @available(iOS 8.0, *) - public func dateComponents(_ components: Set, from start: DateComponents, to end: DateComponents) -> DateComponents { - return _handle.map { $0.components(Calendar._toCalendarUnit(components), from: start, to: end, options: []) } - } - - - /// Returns the value for one component of a date. - /// - /// - parameter component: The component to calculate. - /// - parameter date: The date to use. - /// - returns: The value for the component. - @available(iOS 8.0, *) - public func component(_ component: Component, from date: Date) -> Int { - return _handle.map { $0.component(Calendar._toCalendarUnit([component]), from: date) } - } - - - @available(*, unavailable, message: "Use date(from:) instead") - public func date(era: Int, year: Int, month: Int, day: Int, hour: Int, minute: Int, second: Int, nanosecond: Int) -> Date? { fatalError() } - - - @available(*, unavailable, message: "Use date(from:) instead") - public func date(era: Int, yearForWeekOfYear: Int, weekOfYear: Int, weekday: Int, hour: Int, minute: Int, second: Int, nanosecond: Int) -> Date? { fatalError() } - - - /// Returns the first moment of a given Date, as a Date. - /// - /// For example, pass in `Date()`, if you want the start of today. - /// If there were two midnights, it returns the first. If there was none, it returns the first moment that did exist. - /// - parameter date: The date to search. - /// - returns: The first moment of the given date. - @available(iOS 8.0, *) - public func startOfDay(for date: Date) -> Date { - return _handle.map { $0.startOfDay(for: date) } - } - - - @available(*, unavailable, renamed: "compare(_:to:toGranularity:)") - public func compare(_ date1: Date, to date2: Date, toUnitGranularity unit: NSCalendar.Unit) -> ComparisonResult { fatalError() } - - - /// Compares the given dates down to the given component, reporting them `orderedSame` if they are the same in the given component and all larger components, otherwise either `orderedAscending` or `orderedDescending`. - /// - /// - parameter date1: A date to compare. - /// - parameter date2: A date to compare. - /// - parameter: component: A granularity to compare. For example, pass `.hour` to check if two dates are in the same hour. - @available(iOS 8.0, *) - public func compare(_ date1: Date, to date2: Date, toGranularity component: Component) -> ComparisonResult { - return _handle.map { $0.compare(date1, to: date2, toUnitGranularity: Calendar._toCalendarUnit([component])) } - } - - - @available(*, unavailable, renamed: "isDate(_:equalTo:toGranularity:)") - public func isDate(_ date1: Date, equalTo date2: Date, toUnitGranularity unit: NSCalendar.Unit) -> Bool { fatalError() } - - /// Compares the given dates down to the given component, reporting them equal if they are the same in the given component and all larger components. - /// - /// - parameter date1: A date to compare. - /// - parameter date2: A date to compare. - /// - parameter component: A granularity to compare. For example, pass `.hour` to check if two dates are in the same hour. - /// - returns: `true` if the given date is within tomorrow. - @available(iOS 8.0, *) - public func isDate(_ date1: Date, equalTo date2: Date, toGranularity component: Component) -> Bool { - return _handle.map { $0.isDate(date1, equalTo: date2, toUnitGranularity: Calendar._toCalendarUnit([component])) } - } - - - /// Returns `true` if the given date is within the same day as another date, as defined by the calendar and calendar's locale. - /// - /// - parameter date1: A date to check for containment. - /// - parameter date2: A date to check for containment. - /// - returns: `true` if `date1` and `date2` are in the same day. - @available(iOS 8.0, *) - public func isDate(_ date1: Date, inSameDayAs date2: Date) -> Bool { - return _handle.map { $0.isDate(date1, inSameDayAs: date2) } - } - - - /// Returns `true` if the given date is within today, as defined by the calendar and calendar's locale. - /// - /// - parameter date: The specified date. - /// - returns: `true` if the given date is within today. - @available(iOS 8.0, *) - public func isDateInToday(_ date: Date) -> Bool { - return _handle.map { $0.isDateInToday(date) } - } - - - /// Returns `true` if the given date is within yesterday, as defined by the calendar and calendar's locale. - /// - /// - parameter date: The specified date. - /// - returns: `true` if the given date is within yesterday. - @available(iOS 8.0, *) - public func isDateInYesterday(_ date: Date) -> Bool { - return _handle.map { $0.isDateInYesterday(date) } - } - - - /// Returns `true` if the given date is within tomorrow, as defined by the calendar and calendar's locale. - /// - /// - parameter date: The specified date. - /// - returns: `true` if the given date is within tomorrow. - @available(iOS 8.0, *) - public func isDateInTomorrow(_ date: Date) -> Bool { - return _handle.map { $0.isDateInTomorrow(date) } - } - - - /// Returns `true` if the given date is within a weekend period, as defined by the calendar and calendar's locale. - /// - /// - parameter date: The specified date. - /// - returns: `true` if the given date is within a weekend. - @available(iOS 8.0, *) - public func isDateInWeekend(_ date: Date) -> Bool { - return _handle.map { $0.isDateInWeekend(date) } - } - - @available(*, unavailable, message: "use dateIntervalOfWeekend(containing:start:interval:) instead") - public func range(ofWeekendStart datep: AutoreleasingUnsafeMutablePointer?, interval tip: UnsafeMutablePointer?, containing date: Date) -> Bool { fatalError() } - - /// Find the range of the weekend around the given date, returned via two by-reference parameters. - /// - /// Note that a given entire day within a calendar is not necessarily all in a weekend or not; weekends can start in the middle of a day in some calendars and locales. - /// - seealso: `dateIntervalOfWeekend(containing:)` - /// - parameter date: The date at which to start the search. - /// - parameter start: When the result is `true`, set - /// - returns: `true` if a date range could be found, and `false` if the date is not in a weekend. - @available(iOS 8.0, *) - public func dateIntervalOfWeekend(containing date: Date, start: inout Date, interval: inout TimeInterval) -> Bool { - var nsDate : NSDate? - var ti : TimeInterval = 0 - if _handle.map({ $0.range(ofWeekendStart: &nsDate, interval: &ti, containing: date) }) { - start = nsDate! as Date - interval = ti - return true - } else { - return false - } - } - - /// Returns a `DateInterval` of the weekend contained by the given date, or nil if the date is not in a weekend. - /// - /// - parameter date: The date contained in the weekend. - /// - returns: A `DateInterval`, or nil if the date is not in a weekend. - @available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) - public func dateIntervalOfWeekend(containing date: Date) -> DateInterval? { - var nsDate : NSDate? - var ti : TimeInterval = 0 - if _handle.map({ $0.range(ofWeekendStart: &nsDate, interval: &ti, containing: date) }) { - return DateInterval(start: nsDate! as Date, duration: ti) - } else { - return nil - } - } - - - @available(*, unavailable, message: "use nextWeekend(startingAfter:start:interval:direction:) instead") - public func nextWeekendStart(_ datep: AutoreleasingUnsafeMutablePointer?, interval tip: UnsafeMutablePointer?, options: NSCalendar.Options = [], after date: Date) -> Bool { fatalError() } - - /// Returns the range of the next weekend via two inout parameters. The weekend starts strictly after the given date. - /// - /// If `direction` is `.backward`, then finds the previous weekend range strictly before the given date. - /// - /// Note that a given entire Day within a calendar is not necessarily all in a weekend or not; weekends can start in the middle of a day in some calendars and locales. - /// - parameter date: The date at which to begin the search. - /// - parameter direction: Which direction in time to search. The default value is `.forward`. - /// - returns: A `DateInterval`, or nil if the weekend could not be found. - @available(iOS 8.0, *) - public func nextWeekend(startingAfter date: Date, start: inout Date, interval: inout TimeInterval, direction: SearchDirection = .forward) -> Bool { - // The implementation actually overrides previousKeepSmaller and nextKeepSmaller with matchNext, always - but strict still trumps all. - var nsDate : NSDate? - var ti : TimeInterval = 0 - if _handle.map({ $0.nextWeekendStart(&nsDate, interval: &ti, options: direction == .backward ? [.searchBackwards] : [], after: date) }) { - start = nsDate! as Date - interval = ti - return true - } else { - return false - } - } - - /// Returns a `DateInterval` of the next weekend, which starts strictly after the given date. - /// - /// If `direction` is `.backward`, then finds the previous weekend range strictly before the given date. - /// - /// Note that a given entire Day within a calendar is not necessarily all in a weekend or not; weekends can start in the middle of a day in some calendars and locales. - /// - parameter date: The date at which to begin the search. - /// - parameter direction: Which direction in time to search. The default value is `.forward`. - /// - returns: A `DateInterval`, or nil if weekends do not exist in the specific calendar or locale. - @available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) - public func nextWeekend(startingAfter date: Date, direction: SearchDirection = .forward) -> DateInterval? { - // The implementation actually overrides previousKeepSmaller and nextKeepSmaller with matchNext, always - but strict still trumps all. - var nsDate : NSDate? - var ti : TimeInterval = 0 - if _handle.map({ $0.nextWeekendStart(&nsDate, interval: &ti, options: direction == .backward ? [.searchBackwards] : [], after: date) }) { - /// WARNING: searching backwards is totally broken! 26643365 - return DateInterval(start: nsDate! as Date, duration: ti) - } else { - return nil - } - } - - // MARK: - - // MARK: Searching - - /// The direction in time to search. - public enum SearchDirection { - /// Search for a date later in time than the start date. - case forward - - /// Search for a date earlier in time than the start date. - case backward - } - - /// Determines which result to use when a time is repeated on a day in a calendar (for example, during a daylight saving transition when the times between 2:00am and 3:00am may happen twice). - public enum RepeatedTimePolicy { - /// If there are two or more matching times (all the components are the same, including isLeapMonth) before the end of the next instance of the next higher component to the highest specified component, then the algorithm will return the first occurrence. - case first - - /// If there are two or more matching times (all the components are the same, including isLeapMonth) before the end of the next instance of the next higher component to the highest specified component, then the algorithm will return the last occurrence. - case last - } - - /// A hint to the search algorithm to control the method used for searching for dates. - public enum MatchingPolicy { - /// If there is no matching time before the end of the next instance of the next higher component to the highest specified component in the `DateComponents` argument, the algorithm will return the next existing time which exists. - /// - /// For example, during a daylight saving transition there may be no 2:37am. The result would then be 3:00am, if that does exist. - case nextTime - - /// If specified, and there is no matching time before the end of the next instance of the next higher component to the highest specified component in the `DateComponents` argument, the method will return the next existing value of the missing component and preserves the lower components' values (e.g., no 2:37am results in 3:37am, if that exists). - case nextTimePreservingSmallerComponents - - /// If there is no matching time before the end of the next instance of the next higher component to the highest specified component in the `DateComponents` argument, the algorithm will return the previous existing value of the missing component and preserves the lower components' values. - /// - /// For example, during a daylight saving transition there may be no 2:37am. The result would then be 1:37am, if that does exist. - case previousTimePreservingSmallerComponents - - /// If specified, the algorithm travels as far forward or backward as necessary looking for a match. - /// - /// For example, if searching for Feb 29 in the Gregorian calendar, the algorithm may choose March 1 instead (for example, if the year is not a leap year). If you wish to find the next Feb 29 without the algorithm adjusting the next higher component in the specified `DateComponents`, then use the `strict` option. - /// - note: There are ultimately implementation-defined limits in how far distant the search will go. - case strict - } - - @available(*, unavailable, message: "use nextWeekend(startingAfter:matching:matchingPolicy:repeatedTimePolicy:direction:using:) instead") - public func enumerateDates(startingAfter start: Date, matching comps: DateComponents, options opts: NSCalendar.Options = [], using block: (Date?, Bool, UnsafeMutablePointer) -> Swift.Void) { fatalError() } - - /// Computes the dates which match (or most closely match) a given set of components, and calls the closure once for each of them, until the enumeration is stopped. - /// - /// There will be at least one intervening date which does not match all the components (or the given date itself must not match) between the given date and any result. - /// - /// If `direction` is set to `.backward`, this method finds the previous match before the given date. The intent is that the same matches as for a `.forward` search will be found (that is, if you are enumerating forwards or backwards for each hour with minute "27", the seconds in the date you will get in forwards search would obviously be 00, and the same will be true in a backwards search in order to implement this rule. Similarly for DST backwards jumps which repeats times, you'll get the first match by default, where "first" is defined from the point of view of searching forwards. So, when searching backwards looking for a particular hour, with no minute and second specified, you don't get a minute and second of 59:59 for the matching hour (which would be the nominal first match within a given hour, given the other rules here, when searching backwards). - /// - /// If an exact match is not possible, and requested with the `strict` option, nil is passed to the closure and the enumeration ends. (Logically, since an exact match searches indefinitely into the future, if no match is found there's no point in continuing the enumeration.) - /// - /// Result dates have an integer number of seconds (as if 0 was specified for the nanoseconds property of the `DateComponents` matching parameter), unless a value was set in the nanoseconds property, in which case the result date will have that number of nanoseconds (or as close as possible with floating point numbers). - /// - /// The enumeration is stopped by setting `stop` to `true` in the closure and returning. It is not necessary to set `stop` to `false` to keep the enumeration going. - /// - parameter start: The `Date` at which to start the search. - /// - parameter components: The `DateComponents` to use as input to the search algorithm. - /// - parameter matchingPolicy: Determines the behavior of the search algorithm when the input produces an ambiguous result. - /// - parameter repeatedTimePolicy: Determines the behavior of the search algorithm when the input produces a time that occurs twice on a particular day. - /// - parameter direction: Which direction in time to search. The default value is `.forward`, which means later in time. - /// - parameter block: A closure that is called with search results. - @available(iOS 8.0, *) - public func enumerateDates(startingAfter start: Date, matching components: DateComponents, matchingPolicy: MatchingPolicy, repeatedTimePolicy: RepeatedTimePolicy = .first, direction: SearchDirection = .forward, using block: (_ result: Date?, _ exactMatch: Bool, _ stop: inout Bool) -> Void) { - _handle.map { - $0.enumerateDates(startingAfter: start, matching: components, options: Calendar._toCalendarOptions(matchingPolicy: matchingPolicy, repeatedTimePolicy: repeatedTimePolicy, direction: direction)) { (result, exactMatch, stop) in - var stopv = false - block(result, exactMatch, &stopv) - if stopv { - stop.pointee = true - } - } - } - } - - - @available(*, unavailable, message: "use nextDate(after:matching:matchingPolicy:repeatedTimePolicy:direction:) instead") - public func nextDate(after date: Date, matching comps: DateComponents, options: NSCalendar.Options = []) -> Date? { fatalError() } - - /// Computes the next date which matches (or most closely matches) a given set of components. - /// - /// The general semantics follow those of the `enumerateDates` function. - /// To compute a sequence of results, use the `enumerateDates` function, rather than looping and calling this method with the previous loop iteration's result. - /// - parameter date: The starting date. - /// - parameter components: The components to search for. - /// - parameter matchingPolicy: Specifies the technique the search algorithm uses to find results. Default value is `.nextTime`. - /// - parameter repeatedTimePolicy: Specifies the behavior when multiple matches are found. Default value is `.first`. - /// - parameter direction: Specifies the direction in time to search. Default is `.forward`. - /// - returns: A `Date` representing the result of the search, or `nil` if a result could not be found. - @available(iOS 8.0, *) - public func nextDate(after date: Date, matching components: DateComponents, matchingPolicy: MatchingPolicy, repeatedTimePolicy: RepeatedTimePolicy = .first, direction: SearchDirection = .forward) -> Date? { - return _handle.map { $0.nextDate(after: date, matching: components, options: Calendar._toCalendarOptions(matchingPolicy: matchingPolicy, repeatedTimePolicy: repeatedTimePolicy, direction: direction)) } - } - - @available(*, unavailable, message: "use nextDate(after:matching:matchingPolicy:repeatedTimePolicy:direction:) instead") - public func nextDate(after date: Date, matchingHour hourValue: Int, minute minuteValue: Int, second secondValue: Int, options: NSCalendar.Options = []) -> Date? { fatalError() } - - // MARK: - - // - - @available(*, unavailable, renamed: "date(bySetting:value:of:)") - public func date(bySettingUnit unit: NSCalendar.Unit, value v: Int, of date: Date, options opts: NSCalendar.Options = []) -> Date? { fatalError() } - - /// Returns a new `Date` representing the date calculated by setting a specific component to a given time, and trying to keep lower components the same. If the component already has that value, this may result in a date which is the same as the given date. - /// - /// Changing a component's value often will require higher or coupled components to change as well. For example, setting the Weekday to Thursday usually will require the Day component to change its value, and possibly the Month and Year as well. - /// If no such time exists, the next available time is returned (which could, for example, be in a different day, week, month, ... than the nominal target date). Setting a component to something which would be inconsistent forces other components to change; for example, setting the Weekday to Thursday probably shifts the Day and possibly Month and Year. - /// The exact behavior of this method is implementation-defined. For example, if changing the weekday to Thursday, does that move forward to the next, backward to the previous, or to the nearest Thursday? The algorithm will try to produce a result which is in the next-larger component to the one given (there's a table of this mapping at the top of this document). So for the "set to Thursday" example, find the Thursday in the Week in which the given date resides (which could be a forwards or backwards move, and not necessarily the nearest Thursday). For more control over the exact behavior, use `nextDate(after:matching:matchingPolicy:behavior:direction:)`. - @available(iOS 8.0, *) - public func date(bySetting component: Component, value: Int, of date: Date) -> Date? { - return _handle.map { $0.date(bySettingUnit: Calendar._toCalendarUnit([component]), value: value, of: date, options: []) } - } - - - @available(*, unavailable, message: "use date(bySettingHour:minute:second:of:matchingPolicy:repeatedTimePolicy:direction:) instead") - public func date(bySettingHour h: Int, minute m: Int, second s: Int, of date: Date, options opts: NSCalendar.Options = []) -> Date? { fatalError() } - - /// Returns a new `Date` representing the date calculated by setting hour, minute, and second to a given time on a specified `Date`. - /// - /// If no such time exists, the next available time is returned (which could, for example, be in a different day than the nominal target date). - /// The intent is to return a date on the same day as the original date argument. This may result in a date which is backward than the given date, of course. - /// - parameter hour: A specified hour. - /// - parameter minute: A specified minute. - /// - parameter second: A specified second. - /// - parameter date: The date to start calculation with. - /// - parameter matchingPolicy: Specifies the technique the search algorithm uses to find results. Default value is `.nextTime`. - /// - parameter repeatedTimePolicy: Specifies the behavior when multiple matches are found. Default value is `.first`. - /// - parameter direction: Specifies the direction in time to search. Default is `.forward`. - /// - returns: A `Date` representing the result of the search, or `nil` if a result could not be found. - @available(iOS 8.0, *) - public func date(bySettingHour hour: Int, minute: Int, second: Int, of date: Date, matchingPolicy: MatchingPolicy = .nextTime, repeatedTimePolicy: RepeatedTimePolicy = .first, direction: SearchDirection = .forward) -> Date? { - return _handle.map { $0.date(bySettingHour: hour, minute: minute, second: second, of: date, options: Calendar._toCalendarOptions(matchingPolicy: matchingPolicy, repeatedTimePolicy: repeatedTimePolicy, direction: direction)) } - } - - /// Determine if the `Date` has all of the specified `DateComponents`. - /// - /// It may be useful to test the return value of `nextDate(after:matching:matchingPolicy:behavior:direction:)` to find out if the components were obeyed or if the method had to fudge the result value due to missing time (for example, a daylight saving time transition). - /// - /// - returns: `true` if the date matches all of the components, otherwise `false`. - @available(iOS 8.0, *) - public func date(_ date: Date, matchesComponents components: DateComponents) -> Bool { - return _handle.map { $0.date(date, matchesComponents: components) } - } - - // MARK: - - - public func hash(into hasher: inout Hasher) { - // We need to make sure autoupdating calendars have the same hash - if _autoupdating { - hasher.combine(false) - } else { - hasher.combine(true) - hasher.combine(_handle.map { $0 }) - } - } - - // MARK: - - // MARK: Conversion Functions - - /// Turn our more-specific options into the big bucket option set of NSCalendar - private static func _toCalendarOptions(matchingPolicy: MatchingPolicy, repeatedTimePolicy: RepeatedTimePolicy, direction: SearchDirection) -> NSCalendar.Options { - var result : NSCalendar.Options = [] - - switch matchingPolicy { - case .nextTime: - result.insert(.matchNextTime) - case .nextTimePreservingSmallerComponents: - result.insert(.matchNextTimePreservingSmallerUnits) - case .previousTimePreservingSmallerComponents: - result.insert(.matchPreviousTimePreservingSmallerUnits) - case .strict: - result.insert(.matchStrictly) - } - - switch repeatedTimePolicy { - case .first: - result.insert(.matchFirst) - case .last: - result.insert(.matchLast) - } - - switch direction { - case .backward: - result.insert(.searchBackwards) - case .forward: - break - } - - return result - } - - internal static func _toCalendarUnit(_ units : Set) -> NSCalendar.Unit { - let unitMap : [Component : NSCalendar.Unit] = - [.era : .era, - .year : .year, - .month : .month, - .day : .day, - .hour : .hour, - .minute : .minute, - .second : .second, - .weekday : .weekday, - .weekdayOrdinal : .weekdayOrdinal, - .quarter : .quarter, - .weekOfMonth : .weekOfMonth, - .weekOfYear : .weekOfYear, - .yearForWeekOfYear : .yearForWeekOfYear, - .nanosecond : .nanosecond, - .calendar : .calendar, - .timeZone : .timeZone] - - var result = NSCalendar.Unit() - for u in units { - result.insert(unitMap[u]!) - } - return result - } - - internal static func _toNSCalendarIdentifier(_ identifier : Identifier) -> NSCalendar.Identifier { - if #available(macOS 10.10, iOS 8.0, *) { - let identifierMap : [Identifier : NSCalendar.Identifier] = - [.gregorian : .gregorian, - .buddhist : .buddhist, - .chinese : .chinese, - .coptic : .coptic, - .ethiopicAmeteMihret : .ethiopicAmeteMihret, - .ethiopicAmeteAlem : .ethiopicAmeteAlem, - .hebrew : .hebrew, - .iso8601 : .ISO8601, - .indian : .indian, - .islamic : .islamic, - .islamicCivil : .islamicCivil, - .japanese : .japanese, - .persian : .persian, - .republicOfChina : .republicOfChina, - .islamicTabular : .islamicTabular, - .islamicUmmAlQura : .islamicUmmAlQura] - return identifierMap[identifier]! - } else { - let identifierMap : [Identifier : NSCalendar.Identifier] = - [.gregorian : .gregorian, - .buddhist : .buddhist, - .chinese : .chinese, - .coptic : .coptic, - .ethiopicAmeteMihret : .ethiopicAmeteMihret, - .ethiopicAmeteAlem : .ethiopicAmeteAlem, - .hebrew : .hebrew, - .iso8601 : .ISO8601, - .indian : .indian, - .islamic : .islamic, - .islamicCivil : .islamicCivil, - .japanese : .japanese, - .persian : .persian, - .republicOfChina : .republicOfChina] - return identifierMap[identifier]! - } - } - - internal static func _fromNSCalendarIdentifier(_ identifier : NSCalendar.Identifier) -> Identifier { - if #available(macOS 10.10, iOS 8.0, *) { - let identifierMap : [NSCalendar.Identifier : Identifier] = - [.gregorian : .gregorian, - .buddhist : .buddhist, - .chinese : .chinese, - .coptic : .coptic, - .ethiopicAmeteMihret : .ethiopicAmeteMihret, - .ethiopicAmeteAlem : .ethiopicAmeteAlem, - .hebrew : .hebrew, - .ISO8601 : .iso8601, - .indian : .indian, - .islamic : .islamic, - .islamicCivil : .islamicCivil, - .japanese : .japanese, - .persian : .persian, - .republicOfChina : .republicOfChina, - .islamicTabular : .islamicTabular, - .islamicUmmAlQura : .islamicUmmAlQura] - return identifierMap[identifier]! - } else { - let identifierMap : [NSCalendar.Identifier : Identifier] = - [.gregorian : .gregorian, - .buddhist : .buddhist, - .chinese : .chinese, - .coptic : .coptic, - .ethiopicAmeteMihret : .ethiopicAmeteMihret, - .ethiopicAmeteAlem : .ethiopicAmeteAlem, - .hebrew : .hebrew, - .ISO8601 : .iso8601, - .indian : .indian, - .islamic : .islamic, - .islamicCivil : .islamicCivil, - .japanese : .japanese, - .persian : .persian, - .republicOfChina : .republicOfChina] - return identifierMap[identifier]! - } - } - - public static func ==(lhs: Calendar, rhs: Calendar) -> Bool { - if lhs._autoupdating || rhs._autoupdating { - return lhs._autoupdating == rhs._autoupdating - } else { - // NSCalendar's isEqual is broken (27019864) so we must implement this ourselves - return lhs.identifier == rhs.identifier && - lhs.locale == rhs.locale && - lhs.timeZone == rhs.timeZone && - lhs.firstWeekday == rhs.firstWeekday && - lhs.minimumDaysInFirstWeek == rhs.minimumDaysInFirstWeek - } - } - -} - -extension Calendar : CustomDebugStringConvertible, CustomStringConvertible, CustomReflectable { - private var _kindDescription : String { - if self == Calendar.autoupdatingCurrent { - return "autoupdatingCurrent" - } else if self == Calendar.current { - return "current" - } else { - return "fixed" - } - } - - public var description: String { - return "\(identifier) (\(_kindDescription))" - } - - public var debugDescription : String { - return "\(identifier) (\(_kindDescription))" - } - - public var customMirror : Mirror { - let c: [(label: String?, value: Any)] = [ - ("identifier", identifier), - ("kind", _kindDescription), - ("locale", locale as Any), - ("timeZone", timeZone), - ("firstWeekday", firstWeekday), - ("minimumDaysInFirstWeek", minimumDaysInFirstWeek), - ] - return Mirror(self, children: c, displayStyle: Mirror.DisplayStyle.struct) - } -} - -extension Calendar : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSCalendar { - return _handle._copiedReference() - } - - public static func _forceBridgeFromObjectiveC(_ input: NSCalendar, result: inout Calendar?) { - if !_conditionallyBridgeFromObjectiveC(input, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ input: NSCalendar, result: inout Calendar?) -> Bool { - result = Calendar(reference: input) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSCalendar?) -> Calendar { - var result: Calendar? - _forceBridgeFromObjectiveC(source!, result: &result) - return result! - } -} - -extension NSCalendar : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as Calendar) - } -} - -extension Calendar : Codable { - private enum CodingKeys : Int, CodingKey { - case identifier - case locale - case timeZone - case firstWeekday - case minimumDaysInFirstWeek - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let identifierString = try container.decode(String.self, forKey: .identifier) - let identifier = Calendar._fromNSCalendarIdentifier(NSCalendar.Identifier(rawValue: identifierString)) - self.init(identifier: identifier) - - self.locale = try container.decodeIfPresent(Locale.self, forKey: .locale) - self.timeZone = try container.decode(TimeZone.self, forKey: .timeZone) - self.firstWeekday = try container.decode(Int.self, forKey: .firstWeekday) - self.minimumDaysInFirstWeek = try container.decode(Int.self, forKey: .minimumDaysInFirstWeek) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - - let identifier = Calendar._toNSCalendarIdentifier(self.identifier).rawValue - try container.encode(identifier, forKey: .identifier) - try container.encode(self.locale, forKey: .locale) - try container.encode(self.timeZone, forKey: .timeZone) - try container.encode(self.firstWeekday, forKey: .firstWeekday) - try container.encode(self.minimumDaysInFirstWeek, forKey: .minimumDaysInFirstWeek) - } -} diff --git a/Darwin/Foundation-swiftoverlay/CharacterSet.swift b/Darwin/Foundation-swiftoverlay/CharacterSet.swift deleted file mode 100644 index fef0a8ffcd..0000000000 --- a/Darwin/Foundation-swiftoverlay/CharacterSet.swift +++ /dev/null @@ -1,829 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -import CoreFoundation -@_implementationOnly import _CoreFoundationOverlayShims -@_implementationOnly import _FoundationOverlayShims - -private func _utfRangeToCFRange(_ inRange : Range) -> CFRange { - return CFRange( - location: Int(inRange.lowerBound.value), - length: Int(inRange.upperBound.value - inRange.lowerBound.value)) -} - -private func _utfRangeToCFRange(_ inRange : ClosedRange) -> CFRange { - return CFRange( - location: Int(inRange.lowerBound.value), - length: Int(inRange.upperBound.value - inRange.lowerBound.value + 1)) -} - -// MARK: - - -// NOTE: older overlays called this class _CharacterSetStorage. -// The two must coexist without a conflicting ObjC class name, so it -// was renamed. The old name must not be used in the new runtime. -private final class __CharacterSetStorage : Hashable { - enum Backing { - case immutable(CFCharacterSet) - case mutable(CFMutableCharacterSet) - } - - var _backing: Backing - - @nonobjc - init(immutableReference r: CFCharacterSet) { - _backing = .immutable(r) - } - - @nonobjc - init(mutableReference r: CFMutableCharacterSet) { - _backing = .mutable(r) - } - - // MARK: - - - func hash(into hasher: inout Hasher) { - switch _backing { - case .immutable(let cs): - hasher.combine(CFHash(cs)) - case .mutable(let cs): - hasher.combine(CFHash(cs)) - } - } - - static func ==(lhs: __CharacterSetStorage, rhs: __CharacterSetStorage) -> Bool { - switch (lhs._backing, rhs._backing) { - case (.immutable(let cs1), .immutable(let cs2)): - return CFEqual(cs1, cs2) - case (.immutable(let cs1), .mutable(let cs2)): - return CFEqual(cs1, cs2) - case (.mutable(let cs1), .immutable(let cs2)): - return CFEqual(cs1, cs2) - case (.mutable(let cs1), .mutable(let cs2)): - return CFEqual(cs1, cs2) - } - } - - // MARK: - - - func mutableCopy() -> __CharacterSetStorage { - switch _backing { - case .immutable(let cs): - return __CharacterSetStorage(mutableReference: CFCharacterSetCreateMutableCopy(nil, cs)) - case .mutable(let cs): - return __CharacterSetStorage(mutableReference: CFCharacterSetCreateMutableCopy(nil, cs)) - } - } - - - // MARK: Immutable Functions - - var bitmapRepresentation: Data { - switch _backing { - case .immutable(let cs): - return CFCharacterSetCreateBitmapRepresentation(nil, cs) as Data - case .mutable(let cs): - return CFCharacterSetCreateBitmapRepresentation(nil, cs) as Data - } - } - - func hasMember(inPlane plane: UInt8) -> Bool { - switch _backing { - case .immutable(let cs): - return CFCharacterSetHasMemberInPlane(cs, CFIndex(plane)) - case .mutable(let cs): - return CFCharacterSetHasMemberInPlane(cs, CFIndex(plane)) - } - } - - // MARK: Mutable functions - - func insert(charactersIn range: Range) { - switch _backing { - case .immutable(let cs): - let r = CFCharacterSetCreateMutableCopy(nil, cs)! - CFCharacterSetAddCharactersInRange(r, _utfRangeToCFRange(range)) - _backing = .mutable(r) - case .mutable(let cs): - CFCharacterSetAddCharactersInRange(cs, _utfRangeToCFRange(range)) - } - } - - func insert(charactersIn range: ClosedRange) { - switch _backing { - case .immutable(let cs): - let r = CFCharacterSetCreateMutableCopy(nil, cs)! - CFCharacterSetAddCharactersInRange(r, _utfRangeToCFRange(range)) - _backing = .mutable(r) - case .mutable(let cs): - CFCharacterSetAddCharactersInRange(cs, _utfRangeToCFRange(range)) - } - } - - func remove(charactersIn range: Range) { - switch _backing { - case .immutable(let cs): - let r = CFCharacterSetCreateMutableCopy(nil, cs)! - CFCharacterSetRemoveCharactersInRange(r, _utfRangeToCFRange(range)) - _backing = .mutable(r) - case .mutable(let cs): - CFCharacterSetRemoveCharactersInRange(cs, _utfRangeToCFRange(range)) - } - } - - func remove(charactersIn range: ClosedRange) { - switch _backing { - case .immutable(let cs): - let r = CFCharacterSetCreateMutableCopy(nil, cs)! - CFCharacterSetRemoveCharactersInRange(r, _utfRangeToCFRange(range)) - _backing = .mutable(r) - case .mutable(let cs): - CFCharacterSetRemoveCharactersInRange(cs, _utfRangeToCFRange(range)) - } - } - - func insert(charactersIn string: String) { - switch _backing { - case .immutable(let cs): - let r = CFCharacterSetCreateMutableCopy(nil, cs)! - CFCharacterSetAddCharactersInString(r, string as CFString) - _backing = .mutable(r) - case .mutable(let cs): - CFCharacterSetAddCharactersInString(cs, string as CFString) - } - } - - func remove(charactersIn string: String) { - switch _backing { - case .immutable(let cs): - let r = CFCharacterSetCreateMutableCopy(nil, cs)! - CFCharacterSetRemoveCharactersInString(r, string as CFString) - _backing = .mutable(r) - case .mutable(let cs): - CFCharacterSetRemoveCharactersInString(cs, string as CFString) - } - } - - func invert() { - switch _backing { - case .immutable(let cs): - let r = CFCharacterSetCreateMutableCopy(nil, cs)! - CFCharacterSetInvert(r) - _backing = .mutable(r) - case .mutable(let cs): - CFCharacterSetInvert(cs) - } - } - - // ----- - // MARK: - - // MARK: SetAlgebra - - @discardableResult - func insert(_ character: Unicode.Scalar) -> (inserted: Bool, memberAfterInsert: Unicode.Scalar) { - insert(charactersIn: character...character) - // TODO: This should probably return the truth, but figuring it out requires two calls into NSCharacterSet - return (true, character) - } - - @discardableResult - func update(with character: Unicode.Scalar) -> Unicode.Scalar? { - insert(character) - // TODO: This should probably return the truth, but figuring it out requires two calls into NSCharacterSet - return character - } - - @discardableResult - func remove(_ character: Unicode.Scalar) -> Unicode.Scalar? { - // TODO: Add method to CFCharacterSet to do this in one call - let result : Unicode.Scalar? = contains(character) ? character : nil - remove(charactersIn: character...character) - return result - } - - func contains(_ member: Unicode.Scalar) -> Bool { - switch _backing { - case .immutable(let cs): - return CFCharacterSetIsLongCharacterMember(cs, member.value) - case .mutable(let cs): - return CFCharacterSetIsLongCharacterMember(cs, member.value) - } - } - - // MARK: - - // Why do these return CharacterSet instead of CharacterSetStorage? - // We want to keep the knowledge of if the returned value happened to contain a mutable or immutable CFCharacterSet as close to the creation of that instance as possible - - - // When the underlying collection does not have a method to return new CharacterSets with changes applied, so we will copy and apply here - private static func _apply(_ lhs : __CharacterSetStorage, _ rhs : __CharacterSetStorage, _ f : (CFMutableCharacterSet, CFCharacterSet) -> ()) -> CharacterSet { - let copyOfMe : CFMutableCharacterSet - switch lhs._backing { - case .immutable(let cs): - copyOfMe = CFCharacterSetCreateMutableCopy(nil, cs)! - case .mutable(let cs): - copyOfMe = CFCharacterSetCreateMutableCopy(nil, cs)! - } - - switch rhs._backing { - case .immutable(let cs): - f(copyOfMe, cs) - case .mutable(let cs): - f(copyOfMe, cs) - } - - return CharacterSet(_uncopiedStorage: __CharacterSetStorage(mutableReference: copyOfMe)) - } - - private func _applyMutation(_ other : __CharacterSetStorage, _ f : (CFMutableCharacterSet, CFCharacterSet) -> ()) { - switch _backing { - case .immutable(let cs): - let r = CFCharacterSetCreateMutableCopy(nil, cs)! - switch other._backing { - case .immutable(let otherCs): - f(r, otherCs) - case .mutable(let otherCs): - f(r, otherCs) - } - _backing = .mutable(r) - case .mutable(let cs): - switch other._backing { - case .immutable(let otherCs): - f(cs, otherCs) - case .mutable(let otherCs): - f(cs, otherCs) - } - } - - } - - var inverted: CharacterSet { - switch _backing { - case .immutable(let cs): - return CharacterSet(_uncopiedStorage: __CharacterSetStorage(immutableReference: CFCharacterSetCreateInvertedSet(nil, cs))) - case .mutable(let cs): - // Even if input is mutable, the result is immutable - return CharacterSet(_uncopiedStorage: __CharacterSetStorage(immutableReference: CFCharacterSetCreateInvertedSet(nil, cs))) - } - } - - func union(_ other: __CharacterSetStorage) -> CharacterSet { - return __CharacterSetStorage._apply(self, other, CFCharacterSetUnion) - } - - func formUnion(_ other: __CharacterSetStorage) { - _applyMutation(other, CFCharacterSetUnion) - } - - func intersection(_ other: __CharacterSetStorage) -> CharacterSet { - return __CharacterSetStorage._apply(self, other, CFCharacterSetIntersect) - } - - func formIntersection(_ other: __CharacterSetStorage) { - _applyMutation(other, CFCharacterSetIntersect) - } - - func subtracting(_ other: __CharacterSetStorage) -> CharacterSet { - return intersection(other.inverted._storage) - } - - func subtract(_ other: __CharacterSetStorage) { - _applyMutation(other.inverted._storage, CFCharacterSetIntersect) - } - - func symmetricDifference(_ other: __CharacterSetStorage) -> CharacterSet { - return union(other).subtracting(intersection(other)) - } - - func formSymmetricDifference(_ other: __CharacterSetStorage) { - // This feels like cheating - _backing = symmetricDifference(other)._storage._backing - } - - func isSuperset(of other: __CharacterSetStorage) -> Bool { - switch _backing { - case .immutable(let cs): - switch other._backing { - case .immutable(let otherCs): - return CFCharacterSetIsSupersetOfSet(cs, otherCs) - case .mutable(let otherCs): - return CFCharacterSetIsSupersetOfSet(cs, otherCs) - } - case .mutable(let cs): - switch other._backing { - case .immutable(let otherCs): - return CFCharacterSetIsSupersetOfSet(cs, otherCs) - case .mutable(let otherCs): - return CFCharacterSetIsSupersetOfSet(cs, otherCs) - } - } - } - - // MARK: - - - var description: String { - switch _backing { - case .immutable(let cs): - return CFCopyDescription(cs) as String - case .mutable(let cs): - return CFCopyDescription(cs) as String - } - } - - var debugDescription: String { - return description - } - - // MARK: - - - public func bridgedReference() -> NSCharacterSet { - switch _backing { - case .immutable(let cs): - return cs as NSCharacterSet - case .mutable(let cs): - return cs as NSCharacterSet - } - } -} - -// MARK: - - -/** - A `CharacterSet` represents a set of Unicode-compliant characters. Foundation types use `CharacterSet` to group characters together for searching operations, so that they can find any of a particular set of characters during a search. - - This type provides "copy-on-write" behavior, and is also bridged to the Objective-C `NSCharacterSet` class. -*/ -public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgebra { - public typealias ReferenceType = NSCharacterSet - - fileprivate var _storage: __CharacterSetStorage - - // MARK: Init methods - - /// Initialize an empty instance. - public init() { - // It's unlikely that we are creating an empty character set with no intention to mutate it - _storage = __CharacterSetStorage(mutableReference: CFCharacterSetCreateMutable(nil)) - } - - /// Initialize with a range of integers. - /// - /// It is the caller's responsibility to ensure that the values represent valid `Unicode.Scalar` values, if that is what is desired. - public init(charactersIn range: Range) { - _storage = __CharacterSetStorage(immutableReference: CFCharacterSetCreateWithCharactersInRange(nil, _utfRangeToCFRange(range))) - } - - /// Initialize with a closed range of integers. - /// - /// It is the caller's responsibility to ensure that the values represent valid `Unicode.Scalar` values, if that is what is desired. - public init(charactersIn range: ClosedRange) { - _storage = __CharacterSetStorage(immutableReference: CFCharacterSetCreateWithCharactersInRange(nil, _utfRangeToCFRange(range))) - } - - /// Initialize with the characters in the given string. - /// - /// - parameter string: The string content to inspect for characters. - public init(charactersIn string: __shared String) { - _storage = __CharacterSetStorage(immutableReference: CFCharacterSetCreateWithCharactersInString(nil, string as CFString)) - } - - /// Initialize with a bitmap representation. - /// - /// This method is useful for creating a character set object with data from a file or other external data source. - /// - parameter data: The bitmap representation. - public init(bitmapRepresentation data: __shared Data) { - _storage = __CharacterSetStorage(immutableReference: CFCharacterSetCreateWithBitmapRepresentation(nil, data as CFData)) - } - - /// Initialize with the contents of a file. - /// - /// Returns `nil` if there was an error reading the file. - /// - parameter file: The file to read. - public init?(contentsOfFile file: __shared String) { - do { - let data = try Data(contentsOf: URL(fileURLWithPath: file), options: .mappedIfSafe) - _storage = __CharacterSetStorage(immutableReference: CFCharacterSetCreateWithBitmapRepresentation(nil, data as CFData)) - } catch { - return nil - } - } - - private init(_bridged characterSet: __shared NSCharacterSet) { - _storage = __CharacterSetStorage(immutableReference: characterSet.copy() as! CFCharacterSet) - } - - private init(_uncopiedImmutableReference characterSet: CFCharacterSet) { - _storage = __CharacterSetStorage(immutableReference: characterSet) - } - - fileprivate init(_uncopiedStorage: __CharacterSetStorage) { - _storage = _uncopiedStorage - } - - private init(_builtIn: __shared CFCharacterSetPredefinedSet) { - _storage = __CharacterSetStorage(immutableReference: CFCharacterSetGetPredefined(_builtIn)) - } - - // MARK: Static functions - - /// Returns a character set containing the characters in Unicode General Category Cc and Cf. - public static var controlCharacters : CharacterSet { - return CharacterSet(_builtIn: .control) - } - - /// Returns a character set containing the characters in Unicode General Category Zs and `CHARACTER TABULATION (U+0009)`. - public static var whitespaces : CharacterSet { - return CharacterSet(_builtIn: .whitespace) - } - - /// Returns a character set containing characters in Unicode General Category Z*, `U+000A ~ U+000D`, and `U+0085`. - public static var whitespacesAndNewlines : CharacterSet { - return CharacterSet(_builtIn: .whitespaceAndNewline) - } - - /// Returns a character set containing the characters in the category of Decimal Numbers. - public static var decimalDigits : CharacterSet { - return CharacterSet(_builtIn: .decimalDigit) - } - - /// Returns a character set containing the characters in Unicode General Category L* & M*. - public static var letters : CharacterSet { - return CharacterSet(_builtIn: .letter) - } - - /// Returns a character set containing the characters in Unicode General Category Ll. - public static var lowercaseLetters : CharacterSet { - return CharacterSet(_builtIn: .lowercaseLetter) - } - - /// Returns a character set containing the characters in Unicode General Category Lu and Lt. - public static var uppercaseLetters : CharacterSet { - return CharacterSet(_builtIn: .uppercaseLetter) - } - - /// Returns a character set containing the characters in Unicode General Category M*. - public static var nonBaseCharacters : CharacterSet { - return CharacterSet(_builtIn: .nonBase) - } - - /// Returns a character set containing the characters in Unicode General Categories L*, M*, and N*. - public static var alphanumerics : CharacterSet { - return CharacterSet(_builtIn: .alphaNumeric) - } - - /// Returns a character set containing individual Unicode characters that can also be represented as composed character sequences (such as for letters with accents), by the definition of "standard decomposition" in version 3.2 of the Unicode character encoding standard. - public static var decomposables : CharacterSet { - return CharacterSet(_builtIn: .decomposable) - } - - /// Returns a character set containing values in the category of Non-Characters or that have not yet been defined in version 3.2 of the Unicode standard. - public static var illegalCharacters : CharacterSet { - return CharacterSet(_builtIn: .illegal) - } - - @available(*, unavailable, renamed: "punctuationCharacters") - public static var punctuation : CharacterSet { - return CharacterSet(_builtIn: .punctuation) - } - - /// Returns a character set containing the characters in Unicode General Category P*. - public static var punctuationCharacters : CharacterSet { - return CharacterSet(_builtIn: .punctuation) - } - - /// Returns a character set containing the characters in Unicode General Category Lt. - public static var capitalizedLetters : CharacterSet { - return CharacterSet(_builtIn: .capitalizedLetter) - } - - /// Returns a character set containing the characters in Unicode General Category S*. - public static var symbols : CharacterSet { - return CharacterSet(_builtIn: .symbol) - } - - /// Returns a character set containing the newline characters (`U+000A ~ U+000D`, `U+0085`, `U+2028`, and `U+2029`). - public static var newlines : CharacterSet { - return CharacterSet(_builtIn: .newline) - } - - // MARK: Static functions, from NSURL - - /// Returns the character set for characters allowed in a user URL subcomponent. - public static var urlUserAllowed : CharacterSet { - if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) { - return CharacterSet(_uncopiedImmutableReference: _CFURLComponentsGetURLUserAllowedCharacterSet() as NSCharacterSet) - } else { - return CharacterSet(_uncopiedImmutableReference: _NSURLComponentsGetURLUserAllowedCharacterSet() as! NSCharacterSet) - } - } - - /// Returns the character set for characters allowed in a password URL subcomponent. - public static var urlPasswordAllowed : CharacterSet { - if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) { - return CharacterSet(_uncopiedImmutableReference: _CFURLComponentsGetURLPasswordAllowedCharacterSet() as NSCharacterSet) - } else { - return CharacterSet(_uncopiedImmutableReference: _NSURLComponentsGetURLPasswordAllowedCharacterSet() as! NSCharacterSet) - } - } - - /// Returns the character set for characters allowed in a host URL subcomponent. - public static var urlHostAllowed : CharacterSet { - if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) { - return CharacterSet(_uncopiedImmutableReference: _CFURLComponentsGetURLHostAllowedCharacterSet() as NSCharacterSet) - } else { - return CharacterSet(_uncopiedImmutableReference: _NSURLComponentsGetURLHostAllowedCharacterSet() as! NSCharacterSet) - } - } - - /// Returns the character set for characters allowed in a path URL component. - public static var urlPathAllowed : CharacterSet { - if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) { - return CharacterSet(_uncopiedImmutableReference: _CFURLComponentsGetURLPathAllowedCharacterSet() as NSCharacterSet) - } else { - return CharacterSet(_uncopiedImmutableReference: _NSURLComponentsGetURLPathAllowedCharacterSet() as! NSCharacterSet) - } - } - - /// Returns the character set for characters allowed in a query URL component. - public static var urlQueryAllowed : CharacterSet { - if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) { - return CharacterSet(_uncopiedImmutableReference: _CFURLComponentsGetURLQueryAllowedCharacterSet() as NSCharacterSet) - } else { - return CharacterSet(_uncopiedImmutableReference: _NSURLComponentsGetURLQueryAllowedCharacterSet() as! NSCharacterSet) - } - } - - /// Returns the character set for characters allowed in a fragment URL component. - public static var urlFragmentAllowed : CharacterSet { - if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) { - return CharacterSet(_uncopiedImmutableReference: _CFURLComponentsGetURLFragmentAllowedCharacterSet() as NSCharacterSet) - } else { - return CharacterSet(_uncopiedImmutableReference: _NSURLComponentsGetURLFragmentAllowedCharacterSet() as! NSCharacterSet) - } - } - - // MARK: Immutable functions - - /// Returns a representation of the `CharacterSet` in binary format. - @nonobjc - public var bitmapRepresentation: Data { - return _storage.bitmapRepresentation - } - - /// Returns an inverted copy of the receiver. - @nonobjc - public var inverted : CharacterSet { - return _storage.inverted - } - - /// Returns true if the `CharacterSet` has a member in the specified plane. - /// - /// This method makes it easier to find the plane containing the members of the current character set. The Basic Multilingual Plane (BMP) is plane 0. - public func hasMember(inPlane plane: UInt8) -> Bool { - return _storage.hasMember(inPlane: plane) - } - - // MARK: Mutable functions - - /// Insert a range of integer values in the `CharacterSet`. - /// - /// It is the caller's responsibility to ensure that the values represent valid `Unicode.Scalar` values, if that is what is desired. - public mutating func insert(charactersIn range: Range) { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _storage.mutableCopy() - } - _storage.insert(charactersIn: range) - } - - /// Insert a closed range of integer values in the `CharacterSet`. - /// - /// It is the caller's responsibility to ensure that the values represent valid `Unicode.Scalar` values, if that is what is desired. - public mutating func insert(charactersIn range: ClosedRange) { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _storage.mutableCopy() - } - _storage.insert(charactersIn: range) - } - - /// Remove a range of integer values from the `CharacterSet`. - public mutating func remove(charactersIn range: Range) { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _storage.mutableCopy() - } - _storage.remove(charactersIn: range) - } - - /// Remove a closed range of integer values from the `CharacterSet`. - public mutating func remove(charactersIn range: ClosedRange) { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _storage.mutableCopy() - } - _storage.remove(charactersIn: range) - } - - /// Insert the values from the specified string into the `CharacterSet`. - public mutating func insert(charactersIn string: String) { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _storage.mutableCopy() - } - _storage.insert(charactersIn: string) - } - - /// Remove the values from the specified string from the `CharacterSet`. - public mutating func remove(charactersIn string: String) { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _storage.mutableCopy() - } - _storage.remove(charactersIn: string) - } - - /// Invert the contents of the `CharacterSet`. - public mutating func invert() { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _storage.mutableCopy() - } - _storage.invert() - } - - // ----- - // MARK: - - // MARK: SetAlgebra - - /// Insert a `Unicode.Scalar` representation of a character into the `CharacterSet`. - /// - /// `Unicode.Scalar` values are available on `Swift.String.UnicodeScalarView`. - @discardableResult - public mutating func insert(_ character: Unicode.Scalar) -> (inserted: Bool, memberAfterInsert: Unicode.Scalar) { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _storage.mutableCopy() - } - return _storage.insert(character) - } - - /// Insert a `Unicode.Scalar` representation of a character into the `CharacterSet`. - /// - /// `Unicode.Scalar` values are available on `Swift.String.UnicodeScalarView`. - @discardableResult - public mutating func update(with character: Unicode.Scalar) -> Unicode.Scalar? { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _storage.mutableCopy() - } - return _storage.update(with: character) - } - - - /// Remove a `Unicode.Scalar` representation of a character from the `CharacterSet`. - /// - /// `Unicode.Scalar` values are available on `Swift.String.UnicodeScalarView`. - @discardableResult - public mutating func remove(_ character: Unicode.Scalar) -> Unicode.Scalar? { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _storage.mutableCopy() - } - return _storage.remove(character) - } - - /// Test for membership of a particular `Unicode.Scalar` in the `CharacterSet`. - public func contains(_ member: Unicode.Scalar) -> Bool { - return _storage.contains(member) - } - - /// Returns a union of the `CharacterSet` with another `CharacterSet`. - public func union(_ other: CharacterSet) -> CharacterSet { - return _storage.union(other._storage) - } - - /// Sets the value to a union of the `CharacterSet` with another `CharacterSet`. - public mutating func formUnion(_ other: CharacterSet) { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _storage.mutableCopy() - } - _storage.formUnion(other._storage) - } - - /// Returns an intersection of the `CharacterSet` with another `CharacterSet`. - public func intersection(_ other: CharacterSet) -> CharacterSet { - return _storage.intersection(other._storage) - } - - /// Sets the value to an intersection of the `CharacterSet` with another `CharacterSet`. - public mutating func formIntersection(_ other: CharacterSet) { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _storage.mutableCopy() - } - _storage.formIntersection(other._storage) - } - - /// Returns a `CharacterSet` created by removing elements in `other` from `self`. - public func subtracting(_ other: CharacterSet) -> CharacterSet { - return _storage.subtracting(other._storage) - } - - /// Sets the value to a `CharacterSet` created by removing elements in `other` from `self`. - public mutating func subtract(_ other: CharacterSet) { - if !isKnownUniquelyReferenced(&_storage) { - _storage = _storage.mutableCopy() - } - _storage.subtract(other._storage) - } - - /// Returns an exclusive or of the `CharacterSet` with another `CharacterSet`. - public func symmetricDifference(_ other: CharacterSet) -> CharacterSet { - return _storage.symmetricDifference(other._storage) - } - - /// Sets the value to an exclusive or of the `CharacterSet` with another `CharacterSet`. - public mutating func formSymmetricDifference(_ other: CharacterSet) { - self = symmetricDifference(other) - } - - /// Returns true if `self` is a superset of `other`. - public func isSuperset(of other: CharacterSet) -> Bool { - return _storage.isSuperset(of: other._storage) - } - - // MARK: - - - public func hash(into hasher: inout Hasher) { - hasher.combine(_storage) - } - - /// Returns true if the two `CharacterSet`s are equal. - public static func ==(lhs : CharacterSet, rhs: CharacterSet) -> Bool { - return lhs._storage == rhs._storage - } -} - - -// MARK: Objective-C Bridging -extension CharacterSet : _ObjectiveCBridgeable { - public static func _getObjectiveCType() -> Any.Type { - return NSCharacterSet.self - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSCharacterSet { - return _storage.bridgedReference() - } - - public static func _forceBridgeFromObjectiveC(_ input: NSCharacterSet, result: inout CharacterSet?) { - result = CharacterSet(_bridged: input) - } - - public static func _conditionallyBridgeFromObjectiveC(_ input: NSCharacterSet, result: inout CharacterSet?) -> Bool { - result = CharacterSet(_bridged: input) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSCharacterSet?) -> CharacterSet { - guard let src = source else { return CharacterSet() } - return CharacterSet(_bridged: src) - } - -} - -extension CharacterSet : CustomStringConvertible, CustomDebugStringConvertible { - public var description: String { - return _storage.description - } - - public var debugDescription: String { - return _storage.debugDescription - } -} - -extension NSCharacterSet : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as CharacterSet) - } -} - -extension CharacterSet : Codable { - private enum CodingKeys : Int, CodingKey { - case bitmap - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let bitmap = try container.decode(Data.self, forKey: .bitmap) - self.init(bitmapRepresentation: bitmap) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(self.bitmapRepresentation, forKey: .bitmap) - } -} diff --git a/Darwin/Foundation-swiftoverlay/CheckClass.swift b/Darwin/Foundation-swiftoverlay/CheckClass.swift deleted file mode 100644 index 3889504eb6..0000000000 --- a/Darwin/Foundation-swiftoverlay/CheckClass.swift +++ /dev/null @@ -1,67 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -@_implementationOnly import _SwiftFoundationOverlayShims -import Dispatch - -private let _queue = DispatchQueue(label: "com.apple.SwiftFoundation._checkClassAndWarnForKeyedArchivingQueue") -private var _seenClasses: Set = [] -private func _isClassFirstSeen(_ theClass: AnyClass) -> Bool { - _queue.sync { - let id = ObjectIdentifier(theClass) - return _seenClasses.insert(id).inserted - } -} - -internal func _logRuntimeIssue(_ message: String) { - NSLog("%@", message) - _swift_reportToDebugger(0, message, nil) -} - -extension NSKeyedUnarchiver { - /// Checks if class `theClass` is good for archiving. - /// - /// If not, a runtime warning is printed. - /// - /// - Parameter operation: Specifies the archiving operation. Supported values - /// are 0 for archiving, and 1 for unarchiving. - /// - Returns: 0 if the given class is safe to archive, and non-zero if it - /// isn't. - @objc(_swift_checkClassAndWarnForKeyedArchiving:operation:) - internal class func __swift_checkClassAndWarnForKeyedArchiving( - _ theClass: AnyClass, - operation: CInt - ) -> CInt { - if _swift_isObjCTypeNameSerializable(theClass) { return 0 } - - if _isClassFirstSeen(theClass) { - let demangledName = String(reflecting: theClass) - let mangledName = NSStringFromClass(theClass) - - let op = (operation == 1 ? "unarchive" : "archive") - - let message = """ - Attempting to \(op) Swift class '\(demangledName)' with unstable runtime name '\(mangledName)'. - The runtime name for this class may change in the future, leading to non-decodable data. - - You can use the 'objc' attribute to ensure that the name will not change: - "@objc(\(mangledName))" - - If there are no existing archives containing this class, you should choose a unique, prefixed name instead: - "@objc(ABCMyModel)" - """ - _logRuntimeIssue(message) - } - return 1 - } -} diff --git a/Darwin/Foundation-swiftoverlay/Codable.swift b/Darwin/Foundation-swiftoverlay/Codable.swift deleted file mode 100644 index a8aeb59f7d..0000000000 --- a/Darwin/Foundation-swiftoverlay/Codable.swift +++ /dev/null @@ -1,80 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -// Errors -//===----------------------------------------------------------------------===// - -// Both of these error types bridge to NSError, and through the entry points they use, no further work is needed to make them localized. -extension EncodingError : LocalizedError {} -extension DecodingError : LocalizedError {} - -//===----------------------------------------------------------------------===// -// Error Utilities -//===----------------------------------------------------------------------===// - -extension DecodingError { - /// Returns a `.typeMismatch` error describing the expected type. - /// - /// - parameter path: The path of `CodingKey`s taken to decode a value of this type. - /// - parameter expectation: The type expected to be encountered. - /// - parameter reality: The value that was encountered instead of the expected type. - /// - returns: A `DecodingError` with the appropriate path and debug description. - internal static func _typeMismatch(at path: [CodingKey], expectation: Any.Type, reality: Any) -> DecodingError { - let description = "Expected to decode \(expectation) but found \(_typeDescription(of: reality)) instead." - return .typeMismatch(expectation, Context(codingPath: path, debugDescription: description)) - } - - /// Returns a description of the type of `value` appropriate for an error message. - /// - /// - parameter value: The value whose type to describe. - /// - returns: A string describing `value`. - /// - precondition: `value` is one of the types below. - private static func _typeDescription(of value: Any) -> String { - if value is NSNull { - return "a null value" - } else if value is NSNumber /* FIXME: If swift-corelibs-foundation isn't updated to use NSNumber, this check will be necessary: || value is Int || value is Double */ { - return "a number" - } else if value is String { - return "a string/data" - } else if value is [Any] { - return "an array" - } else if value is [String : Any] { - return "a dictionary" - } else { - return "\(type(of: value))" - } - } -} - -// Only support 64bit -#if !(os(iOS) && (arch(i386) || arch(arm))) - -import Combine - -//===----------------------------------------------------------------------===// -// Generic Decoding -//===----------------------------------------------------------------------===// - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension JSONEncoder: TopLevelEncoder { } - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension PropertyListEncoder: TopLevelEncoder { } - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension JSONDecoder: TopLevelDecoder { } - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension PropertyListDecoder: TopLevelDecoder { } - -#endif /* !(os(iOS) && (arch(i386) || arch(arm))) */ diff --git a/Darwin/Foundation-swiftoverlay/Collections+DataProtocol.swift b/Darwin/Foundation-swiftoverlay/Collections+DataProtocol.swift deleted file mode 100644 index 586f2a1694..0000000000 --- a/Darwin/Foundation-swiftoverlay/Collections+DataProtocol.swift +++ /dev/null @@ -1,61 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2018 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -//===--- DataProtocol -----------------------------------------------------===// - -extension Array: DataProtocol where Element == UInt8 { - public var regions: CollectionOfOne> { - return CollectionOfOne(self) - } -} - -extension ArraySlice: DataProtocol where Element == UInt8 { - public var regions: CollectionOfOne> { - return CollectionOfOne(self) - } -} - -extension ContiguousArray: DataProtocol where Element == UInt8 { - public var regions: CollectionOfOne> { - return CollectionOfOne(self) - } -} - -// FIXME: This currently crashes compilation in the Late Inliner. -// extension CollectionOfOne : DataProtocol where Element == UInt8 { -// public typealias Regions = CollectionOfOne -// -// public var regions: CollectionOfOne { -// return CollectionOfOne(Data(self)) -// } -// } - -extension EmptyCollection : DataProtocol where Element == UInt8 { - public var regions: EmptyCollection { - return EmptyCollection() - } -} - -extension Repeated: DataProtocol where Element == UInt8 { - public typealias Regions = Repeated - - public var regions: Repeated { - guard !self.isEmpty else { return repeatElement(Data(), count: 0) } - return repeatElement(Data(CollectionOfOne(self.first!)), count: self.count) - } -} - -//===--- MutableDataProtocol ----------------------------------------------===// - -extension Array: MutableDataProtocol where Element == UInt8 { } - -extension ContiguousArray: MutableDataProtocol where Element == UInt8 { } diff --git a/Darwin/Foundation-swiftoverlay/CombineTypealiases.swift b/Darwin/Foundation-swiftoverlay/CombineTypealiases.swift deleted file mode 100644 index 70df830c2c..0000000000 --- a/Darwin/Foundation-swiftoverlay/CombineTypealiases.swift +++ /dev/null @@ -1,23 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#if !(os(iOS) && (arch(i386) || arch(arm))) // Combine isn't on 32-bit iOS - -import Combine - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -public typealias Published = Combine.Published - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -public typealias ObservableObject = Combine.ObservableObject - -#endif /* !(os(iOS) && (arch(i386) || arch(arm))) */ diff --git a/Darwin/Foundation-swiftoverlay/ContiguousBytes.swift b/Darwin/Foundation-swiftoverlay/ContiguousBytes.swift deleted file mode 100644 index e8cda98f04..0000000000 --- a/Darwin/Foundation-swiftoverlay/ContiguousBytes.swift +++ /dev/null @@ -1,100 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2018 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -//===--- ContiguousBytes --------------------------------------------------===// - -/// Indicates that the conforming type is a contiguous collection of raw bytes -/// whose underlying storage is directly accessible by withUnsafeBytes. -public protocol ContiguousBytes { - /// Calls the given closure with the contents of underlying storage. - /// - /// - note: Calling `withUnsafeBytes` multiple times does not guarantee that - /// the same buffer pointer will be passed in every time. - /// - warning: The buffer argument to the body should not be stored or used - /// outside of the lifetime of the call to the closure. - func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R -} - -//===--- Collection Conformances ------------------------------------------===// - -// FIXME: When possible, expand conformance to `where Element : Trivial`. -extension Array : ContiguousBytes where Element == UInt8 { } - -// FIXME: When possible, expand conformance to `where Element : Trivial`. -extension ArraySlice : ContiguousBytes where Element == UInt8 { } - -// FIXME: When possible, expand conformance to `where Element : Trivial`. -extension ContiguousArray : ContiguousBytes where Element == UInt8 { } - -//===--- Pointer Conformances ---------------------------------------------===// - -extension UnsafeRawBufferPointer : ContiguousBytes { - @inlinable - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R { - return try body(self) - } -} - -extension UnsafeMutableRawBufferPointer : ContiguousBytes { - @inlinable - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R { - return try body(UnsafeRawBufferPointer(self)) - } -} - -// FIXME: When possible, expand conformance to `where Element : Trivial`. -extension UnsafeBufferPointer : ContiguousBytes where Element == UInt8 { - @inlinable - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R { - return try body(UnsafeRawBufferPointer(self)) - } -} - -// FIXME: When possible, expand conformance to `where Element : Trivial`. -extension UnsafeMutableBufferPointer : ContiguousBytes where Element == UInt8 { - @inlinable - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R { - return try body(UnsafeRawBufferPointer(self)) - } -} - -// FIXME: When possible, expand conformance to `where Element : Trivial`. -extension EmptyCollection : ContiguousBytes where Element == UInt8 { - @inlinable - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R { - return try body(UnsafeRawBufferPointer(start: nil, count: 0)) - } -} - -// FIXME: When possible, expand conformance to `where Element : Trivial`. -extension CollectionOfOne : ContiguousBytes where Element == UInt8 { - @inlinable - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R { - let element = self.first! - return try Swift.withUnsafeBytes(of: element) { - return try body($0) - } - } -} - -//===--- Conditional Conformances -----------------------------------------===// - -extension Slice : ContiguousBytes where Base : ContiguousBytes { - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> ResultType) rethrows -> ResultType { - let offset = base.distance(from: base.startIndex, to: self.startIndex) - return try base.withUnsafeBytes { ptr in - let slicePtr = ptr.baseAddress?.advanced(by: offset) - let sliceBuffer = UnsafeRawBufferPointer(start: slicePtr, count: self.count) - return try body(sliceBuffer) - } - } -} diff --git a/Darwin/Foundation-swiftoverlay/Data.swift b/Darwin/Foundation-swiftoverlay/Data.swift deleted file mode 100644 index 67570d3c0b..0000000000 --- a/Darwin/Foundation-swiftoverlay/Data.swift +++ /dev/null @@ -1,2853 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#if DEPLOYMENT_RUNTIME_SWIFT - -#if os(macOS) || os(iOS) -import Darwin -#elseif os(Linux) -import Glibc - -@inlinable // This is @inlinable as trivially computable. -private func malloc_good_size(_ size: Int) -> Int { - return size -} - -#endif - -import CoreFoundation - -internal func __NSDataInvokeDeallocatorUnmap(_ mem: UnsafeMutableRawPointer, _ length: Int) { - munmap(mem, length) -} - -internal func __NSDataInvokeDeallocatorFree(_ mem: UnsafeMutableRawPointer, _ length: Int) { - free(mem) -} - -internal func __NSDataIsCompact(_ data: NSData) -> Bool { - return data._isCompact() -} - -#else - -@_exported import Foundation // Clang module -@_implementationOnly import _FoundationOverlayShims -@_implementationOnly import _CoreFoundationOverlayShims - -internal func __NSDataIsCompact(_ data: NSData) -> Bool { - if #available(macOS 10.10, iOS 8.0, tvOS 9.0, watchOS 2.0, *) { - return data._isCompact() - } else { - var compact = true - let len = data.length - data.enumerateBytes { (_, byteRange, stop) in - if byteRange.length != len { - compact = false - } - stop.pointee = true - } - return compact - } -} - -#endif - -@_alwaysEmitIntoClient -internal func _withStackOrHeapBuffer(capacity: Int, _ body: (UnsafeMutableBufferPointer) -> Void) { - guard capacity > 0 else { - body(UnsafeMutableBufferPointer(start: nil, count: 0)) - return - } - typealias InlineBuffer = ( // 32 bytes - UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, - UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, - UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, - UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8 - ) - let inlineCount = MemoryLayout.size - if capacity <= inlineCount { - var buffer: InlineBuffer = ( - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0 - ) - withUnsafeMutableBytes(of: &buffer) { buffer in - assert(buffer.count == inlineCount) - let start = buffer.baseAddress!.assumingMemoryBound(to: UInt8.self) - body(UnsafeMutableBufferPointer(start: start, count: capacity)) - } - return - } - - let buffer = UnsafeMutableBufferPointer.allocate(capacity: capacity) - defer { buffer.deallocate() } - body(buffer) -} - -// Underlying storage representation for medium and large data. -// Inlinability strategy: methods from here should not inline into InlineSlice or LargeSlice unless trivial. -// NOTE: older overlays called this class _DataStorage. The two must -// coexist without a conflicting ObjC class name, so it was renamed. -// The old name must not be used in the new runtime. -@usableFromInline -internal final class __DataStorage { - @usableFromInline static let maxSize = Int.max >> 1 - @usableFromInline static let vmOpsThreshold = NSPageSize() * 4 - - @inlinable // This is @inlinable as trivially forwarding, and does not escape the _DataStorage boundary layer. - static func allocate(_ size: Int, _ clear: Bool) -> UnsafeMutableRawPointer? { - if clear { - return calloc(1, size) - } else { - return malloc(size) - } - } - - @usableFromInline // This is not @inlinable as it is a non-trivial, non-generic function. - static func move(_ dest_: UnsafeMutableRawPointer, _ source_: UnsafeRawPointer?, _ num_: Int) { - var dest = dest_ - var source = source_ - var num = num_ - if __DataStorage.vmOpsThreshold <= num && ((unsafeBitCast(source, to: Int.self) | Int(bitPattern: dest)) & (NSPageSize() - 1)) == 0 { - let pages = NSRoundDownToMultipleOfPageSize(num) - NSCopyMemoryPages(source!, dest, pages) - source = source!.advanced(by: pages) - dest = dest.advanced(by: pages) - num -= pages - } - if num > 0 { - memmove(dest, source!, num) - } - } - - @inlinable // This is @inlinable as trivially forwarding, and does not escape the _DataStorage boundary layer. - static func shouldAllocateCleared(_ size: Int) -> Bool { - return (size > (128 * 1024)) - } - - @usableFromInline var _bytes: UnsafeMutableRawPointer? - @usableFromInline var _length: Int - @usableFromInline var _capacity: Int - @usableFromInline var _offset: Int - @usableFromInline var _deallocator: ((UnsafeMutableRawPointer, Int) -> Void)? - @usableFromInline var _needToZero: Bool - - @inlinable // This is @inlinable as trivially computable. - var bytes: UnsafeRawPointer? { - return UnsafeRawPointer(_bytes)?.advanced(by: -_offset) - } - - @inlinable // This is @inlinable despite escaping the _DataStorage boundary layer because it is generic and trivially forwarding. - @discardableResult - func withUnsafeBytes(in range: Range, apply: (UnsafeRawBufferPointer) throws -> Result) rethrows -> Result { - return try apply(UnsafeRawBufferPointer(start: _bytes?.advanced(by: range.lowerBound - _offset), count: Swift.min(range.upperBound - range.lowerBound, _length))) - } - - @inlinable // This is @inlinable despite escaping the _DataStorage boundary layer because it is generic and trivially forwarding. - @discardableResult - func withUnsafeMutableBytes(in range: Range, apply: (UnsafeMutableRawBufferPointer) throws -> Result) rethrows -> Result { - return try apply(UnsafeMutableRawBufferPointer(start: _bytes!.advanced(by:range.lowerBound - _offset), count: Swift.min(range.upperBound - range.lowerBound, _length))) - } - - @inlinable // This is @inlinable as trivially computable. - var mutableBytes: UnsafeMutableRawPointer? { - return _bytes?.advanced(by: -_offset) - } - - @inlinable // This is @inlinable as trivially computable. - var capacity: Int { - return _capacity - } - - @inlinable // This is @inlinable as trivially computable. - var length: Int { - get { - return _length - } - set { - setLength(newValue) - } - } - - @inlinable // This is inlinable as trivially computable. - var isExternallyOwned: Bool { - // all __DataStorages will have some sort of capacity, because empty cases hit the .empty enum _Representation - // anything with 0 capacity means that we have not allocated this pointer and concequently mutation is not ours to make. - return _capacity == 0 - } - - @usableFromInline // This is not @inlinable as it is a non-trivial, non-generic function. - func ensureUniqueBufferReference(growingTo newLength: Int = 0, clear: Bool = false) { - guard isExternallyOwned || newLength > _capacity else { return } - - if newLength == 0 { - if isExternallyOwned { - let newCapacity = malloc_good_size(_length) - let newBytes = __DataStorage.allocate(newCapacity, false) - __DataStorage.move(newBytes!, _bytes!, _length) - _freeBytes() - _bytes = newBytes - _capacity = newCapacity - _needToZero = false - } - } else if isExternallyOwned { - let newCapacity = malloc_good_size(newLength) - let newBytes = __DataStorage.allocate(newCapacity, clear) - if let bytes = _bytes { - __DataStorage.move(newBytes!, bytes, _length) - } - _freeBytes() - _bytes = newBytes - _capacity = newCapacity - _length = newLength - _needToZero = true - } else { - let cap = _capacity - var additionalCapacity = (newLength >> (__DataStorage.vmOpsThreshold <= newLength ? 2 : 1)) - if Int.max - additionalCapacity < newLength { - additionalCapacity = 0 - } - var newCapacity = malloc_good_size(Swift.max(cap, newLength + additionalCapacity)) - let origLength = _length - var allocateCleared = clear && __DataStorage.shouldAllocateCleared(newCapacity) - var newBytes: UnsafeMutableRawPointer? = nil - if _bytes == nil { - newBytes = __DataStorage.allocate(newCapacity, allocateCleared) - if newBytes == nil { - /* Try again with minimum length */ - allocateCleared = clear && __DataStorage.shouldAllocateCleared(newLength) - newBytes = __DataStorage.allocate(newLength, allocateCleared) - } - } else { - let tryCalloc = (origLength == 0 || (newLength / origLength) >= 4) - if allocateCleared && tryCalloc { - newBytes = __DataStorage.allocate(newCapacity, true) - if let newBytes = newBytes { - __DataStorage.move(newBytes, _bytes!, origLength) - _freeBytes() - } - } - /* Where calloc/memmove/free fails, realloc might succeed */ - if newBytes == nil { - allocateCleared = false - if _deallocator != nil { - newBytes = __DataStorage.allocate(newCapacity, true) - if let newBytes = newBytes { - __DataStorage.move(newBytes, _bytes!, origLength) - _freeBytes() - } - } else { - newBytes = realloc(_bytes!, newCapacity) - } - } - /* Try again with minimum length */ - if newBytes == nil { - newCapacity = malloc_good_size(newLength) - allocateCleared = clear && __DataStorage.shouldAllocateCleared(newCapacity) - if allocateCleared && tryCalloc { - newBytes = __DataStorage.allocate(newCapacity, true) - if let newBytes = newBytes { - __DataStorage.move(newBytes, _bytes!, origLength) - _freeBytes() - } - } - if newBytes == nil { - allocateCleared = false - newBytes = realloc(_bytes!, newCapacity) - } - } - } - - if newBytes == nil { - /* Could not allocate bytes */ - // At this point if the allocation cannot occur the process is likely out of memory - // and Bad-Things™ are going to happen anyhow - fatalError("unable to allocate memory for length (\(newLength))") - } - - if origLength < newLength && clear && !allocateCleared { - memset(newBytes!.advanced(by: origLength), 0, newLength - origLength) - } - - /* _length set by caller */ - _bytes = newBytes - _capacity = newCapacity - /* Realloc/memset doesn't zero out the entire capacity, so we must be safe and clear next time we grow the length */ - _needToZero = !allocateCleared - } - } - - @inlinable // This is @inlinable as it does not escape the _DataStorage boundary layer. - func _freeBytes() { - if let bytes = _bytes { - if let dealloc = _deallocator { - dealloc(bytes, length) - } else { - free(bytes) - } - } - _deallocator = nil - } - - @inlinable // This is @inlinable despite escaping the _DataStorage boundary layer because it is trivially computed. - func enumerateBytes(in range: Range, _ block: (_ buffer: UnsafeBufferPointer, _ byteIndex: Data.Index, _ stop: inout Bool) -> Void) { - var stopv: Bool = false - block(UnsafeBufferPointer(start: _bytes?.advanced(by: range.lowerBound - _offset).assumingMemoryBound(to: UInt8.self), count: Swift.min(range.upperBound - range.lowerBound, _length)), 0, &stopv) - } - - @inlinable // This is @inlinable as it does not escape the _DataStorage boundary layer. - func setLength(_ length: Int) { - let origLength = _length - let newLength = length - if _capacity < newLength || _bytes == nil { - ensureUniqueBufferReference(growingTo: newLength, clear: true) - } else if origLength < newLength && _needToZero { - memset(_bytes! + origLength, 0, newLength - origLength) - } else if newLength < origLength { - _needToZero = true - } - _length = newLength - } - - @inlinable // This is @inlinable as it does not escape the _DataStorage boundary layer. - func append(_ bytes: UnsafeRawPointer, length: Int) { - precondition(length >= 0, "Length of appending bytes must not be negative") - let origLength = _length - let newLength = origLength + length - if _capacity < newLength || _bytes == nil { - ensureUniqueBufferReference(growingTo: newLength, clear: false) - } - _length = newLength - __DataStorage.move(_bytes!.advanced(by: origLength), bytes, length) - } - - @inlinable // This is @inlinable despite escaping the __DataStorage boundary layer because it is trivially computed. - func get(_ index: Int) -> UInt8 { - return _bytes!.advanced(by: index - _offset).assumingMemoryBound(to: UInt8.self).pointee - } - - @inlinable // This is @inlinable despite escaping the _DataStorage boundary layer because it is trivially computed. - func set(_ index: Int, to value: UInt8) { - ensureUniqueBufferReference() - _bytes!.advanced(by: index - _offset).assumingMemoryBound(to: UInt8.self).pointee = value - } - - @inlinable // This is @inlinable despite escaping the _DataStorage boundary layer because it is trivially computed. - func copyBytes(to pointer: UnsafeMutableRawPointer, from range: Range) { - let offsetPointer = UnsafeRawBufferPointer(start: _bytes?.advanced(by: range.lowerBound - _offset), count: Swift.min(range.upperBound - range.lowerBound, _length)) - UnsafeMutableRawBufferPointer(start: pointer, count: range.upperBound - range.lowerBound).copyMemory(from: offsetPointer) - } - - @usableFromInline // This is not @inlinable as it is a non-trivial, non-generic function. - func replaceBytes(in range_: NSRange, with replacementBytes: UnsafeRawPointer?, length replacementLength: Int) { - let range = NSRange(location: range_.location - _offset, length: range_.length) - let currentLength = _length - let resultingLength = currentLength - range.length + replacementLength - let shift = resultingLength - currentLength - let mutableBytes: UnsafeMutableRawPointer - if resultingLength > currentLength { - ensureUniqueBufferReference(growingTo: resultingLength) - _length = resultingLength - } else { - ensureUniqueBufferReference() - } - mutableBytes = _bytes! - /* shift the trailing bytes */ - let start = range.location - let length = range.length - if shift != 0 { - memmove(mutableBytes + start + replacementLength, mutableBytes + start + length, currentLength - start - length) - } - if replacementLength != 0 { - if let replacementBytes = replacementBytes { - memmove(mutableBytes + start, replacementBytes, replacementLength) - } else { - memset(mutableBytes + start, 0, replacementLength) - } - } - - if resultingLength < currentLength { - setLength(resultingLength) - } - } - - @usableFromInline // This is not @inlinable as it is a non-trivial, non-generic function. - func resetBytes(in range_: Range) { - let range = NSRange(location: range_.lowerBound - _offset, length: range_.upperBound - range_.lowerBound) - if range.length == 0 { return } - if _length < range.location + range.length { - let newLength = range.location + range.length - if _capacity <= newLength { - ensureUniqueBufferReference(growingTo: newLength, clear: false) - } - _length = newLength - } else { - ensureUniqueBufferReference() - } - memset(_bytes!.advanced(by: range.location), 0, range.length) - } - - @usableFromInline // This is not @inlinable as a non-trivial, non-convenience initializer. - init(length: Int) { - precondition(length < __DataStorage.maxSize) - var capacity = (length < 1024 * 1024 * 1024) ? length + (length >> 2) : length - if __DataStorage.vmOpsThreshold <= capacity { - capacity = NSRoundUpToMultipleOfPageSize(capacity) - } - - let clear = __DataStorage.shouldAllocateCleared(length) - _bytes = __DataStorage.allocate(capacity, clear)! - _capacity = capacity - _needToZero = !clear - _length = 0 - _offset = 0 - setLength(length) - } - - @usableFromInline // This is not @inlinable as a non-convience initializer. - init(capacity capacity_: Int = 0) { - var capacity = capacity_ - precondition(capacity < __DataStorage.maxSize) - if __DataStorage.vmOpsThreshold <= capacity { - capacity = NSRoundUpToMultipleOfPageSize(capacity) - } - _length = 0 - _bytes = __DataStorage.allocate(capacity, false)! - _capacity = capacity - _needToZero = true - _offset = 0 - } - - @usableFromInline // This is not @inlinable as a non-convience initializer. - init(bytes: UnsafeRawPointer?, length: Int) { - precondition(length < __DataStorage.maxSize) - _offset = 0 - if length == 0 { - _capacity = 0 - _length = 0 - _needToZero = false - _bytes = nil - } else if __DataStorage.vmOpsThreshold <= length { - _capacity = length - _length = length - _needToZero = true - _bytes = __DataStorage.allocate(length, false)! - __DataStorage.move(_bytes!, bytes, length) - } else { - var capacity = length - if __DataStorage.vmOpsThreshold <= capacity { - capacity = NSRoundUpToMultipleOfPageSize(capacity) - } - _length = length - _bytes = __DataStorage.allocate(capacity, false)! - _capacity = capacity - _needToZero = true - __DataStorage.move(_bytes!, bytes, length) - } - } - - @usableFromInline // This is not @inlinable as a non-convience initializer. - init(bytes: UnsafeMutableRawPointer?, length: Int, copy: Bool, deallocator: ((UnsafeMutableRawPointer, Int) -> Void)?, offset: Int) { - precondition(length < __DataStorage.maxSize) - _offset = offset - if length == 0 { - _capacity = 0 - _length = 0 - _needToZero = false - _bytes = nil - if let dealloc = deallocator, - let bytes_ = bytes { - dealloc(bytes_, length) - } - } else if !copy { - _capacity = length - _length = length - _needToZero = false - _bytes = bytes - _deallocator = deallocator - } else if __DataStorage.vmOpsThreshold <= length { - _capacity = length - _length = length - _needToZero = true - _bytes = __DataStorage.allocate(length, false)! - __DataStorage.move(_bytes!, bytes, length) - if let dealloc = deallocator { - dealloc(bytes!, length) - } - } else { - var capacity = length - if __DataStorage.vmOpsThreshold <= capacity { - capacity = NSRoundUpToMultipleOfPageSize(capacity) - } - _length = length - _bytes = __DataStorage.allocate(capacity, false)! - _capacity = capacity - _needToZero = true - __DataStorage.move(_bytes!, bytes, length) - if let dealloc = deallocator { - dealloc(bytes!, length) - } - } - } - - @usableFromInline // This is not @inlinable as a non-convience initializer. - init(immutableReference: NSData, offset: Int) { - _offset = offset - _bytes = UnsafeMutableRawPointer(mutating: immutableReference.bytes) - _capacity = 0 - _needToZero = false - _length = immutableReference.length - _deallocator = { _, _ in - _fixLifetime(immutableReference) - } - } - - @usableFromInline // This is not @inlinable as a non-convience initializer. - init(mutableReference: NSMutableData, offset: Int) { - _offset = offset - _bytes = mutableReference.mutableBytes - _capacity = 0 - _needToZero = false - _length = mutableReference.length - _deallocator = { _, _ in - _fixLifetime(mutableReference) - } - } - - @usableFromInline // This is not @inlinable as a non-convience initializer. - init(customReference: NSData, offset: Int) { - _offset = offset - _bytes = UnsafeMutableRawPointer(mutating: customReference.bytes) - _capacity = 0 - _needToZero = false - _length = customReference.length - _deallocator = { _, _ in - _fixLifetime(customReference) - } - } - - @usableFromInline // This is not @inlinable as a non-convience initializer. - init(customMutableReference: NSMutableData, offset: Int) { - _offset = offset - _bytes = customMutableReference.mutableBytes - _capacity = 0 - _needToZero = false - _length = customMutableReference.length - _deallocator = { _, _ in - _fixLifetime(customMutableReference) - } - } - - deinit { - _freeBytes() - } - - @inlinable // This is @inlinable despite escaping the __DataStorage boundary layer because it is trivially computed. - func mutableCopy(_ range: Range) -> __DataStorage { - return __DataStorage(bytes: _bytes?.advanced(by: range.lowerBound - _offset), length: range.upperBound - range.lowerBound, copy: true, deallocator: nil, offset: range.lowerBound) - } - - @inlinable // This is @inlinable despite escaping the _DataStorage boundary layer because it is generic and trivially computed. - func withInteriorPointerReference(_ range: Range, _ work: (NSData) throws -> T) rethrows -> T { - if range.isEmpty { - return try work(NSData()) // zero length data can be optimized as a singleton - } - return try work(NSData(bytesNoCopy: _bytes!.advanced(by: range.lowerBound - _offset), length: range.upperBound - range.lowerBound, freeWhenDone: false)) - } - - @inline(never) // This is not @inlinable to avoid emission of the private `__NSSwiftData` class name into clients. - @usableFromInline - func bridgedReference(_ range: Range) -> NSData { - if range.isEmpty { - return NSData() // zero length data can be optimized as a singleton - } - - return __NSSwiftData(backing: self, range: range) - } -} - -// NOTE: older overlays called this _NSSwiftData. The two must -// coexist, so it was renamed. The old name must not be used in the new -// runtime. -internal class __NSSwiftData : NSData { - var _backing: __DataStorage! - var _range: Range! - - convenience init(backing: __DataStorage, range: Range) { - self.init() - _backing = backing - _range = range - } - @objc override var length: Int { - return _range.upperBound - _range.lowerBound - } - - @objc override var bytes: UnsafeRawPointer { - // NSData's byte pointer methods are not annotated for nullability correctly - // (but assume non-null by the wrapping macro guards). This placeholder value - // is to work-around this bug. Any indirection to the underlying bytes of an NSData - // with a length of zero would have been a programmer error anyhow so the actual - // return value here is not needed to be an allocated value. This is specifically - // needed to live like this to be source compatible with Swift3. Beyond that point - // this API may be subject to correction. - guard let bytes = _backing.bytes else { - return UnsafeRawPointer(bitPattern: 0xBAD0)! - } - - return bytes.advanced(by: _range.lowerBound) - } - - @objc override func copy(with zone: NSZone? = nil) -> Any { - return self - } - - @objc override func mutableCopy(with zone: NSZone? = nil) -> Any { - return NSMutableData(bytes: bytes, length: length) - } - -#if !DEPLOYMENT_RUNTIME_SWIFT - @objc override - func _isCompact() -> Bool { - return true - } -#endif - -#if DEPLOYMENT_RUNTIME_SWIFT - override func _providesConcreteBacking() -> Bool { - return true - } -#else - @objc(_providesConcreteBacking) - func _providesConcreteBacking() -> Bool { - return true - } -#endif -} - -@frozen -public struct Data : ReferenceConvertible, Equatable, Hashable, RandomAccessCollection, MutableCollection, RangeReplaceableCollection, MutableDataProtocol, ContiguousBytes { - public typealias ReferenceType = NSData - - public typealias ReadingOptions = NSData.ReadingOptions - public typealias WritingOptions = NSData.WritingOptions - public typealias SearchOptions = NSData.SearchOptions - public typealias Base64EncodingOptions = NSData.Base64EncodingOptions - public typealias Base64DecodingOptions = NSData.Base64DecodingOptions - - public typealias Index = Int - public typealias Indices = Range - - // A small inline buffer of bytes suitable for stack-allocation of small data. - // Inlinability strategy: everything here should be inlined for direct operation on the stack wherever possible. - @usableFromInline - @frozen - internal struct InlineData { -#if arch(x86_64) || arch(arm64) || arch(s390x) || arch(powerpc64) || arch(powerpc64le) - @usableFromInline typealias Buffer = (UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, - UInt8, UInt8, UInt8, UInt8, UInt8, UInt8) //len //enum - @usableFromInline var bytes: Buffer -#elseif arch(i386) || arch(arm) - @usableFromInline typealias Buffer = (UInt8, UInt8, UInt8, UInt8, - UInt8, UInt8) //len //enum - @usableFromInline var bytes: Buffer -#endif - @usableFromInline var length: UInt8 - - @inlinable // This is @inlinable as trivially computable. - static func canStore(count: Int) -> Bool { - return count <= MemoryLayout.size - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ srcBuffer: UnsafeRawBufferPointer) { - self.init(count: srcBuffer.count) - if !srcBuffer.isEmpty { - Swift.withUnsafeMutableBytes(of: &bytes) { dstBuffer in - dstBuffer.baseAddress?.copyMemory(from: srcBuffer.baseAddress!, byteCount: srcBuffer.count) - } - } - } - - @inlinable // This is @inlinable as a trivial initializer. - init(count: Int = 0) { - assert(count <= MemoryLayout.size) -#if arch(x86_64) || arch(arm64) || arch(s390x) || arch(powerpc64) || arch(powerpc64le) - bytes = (UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0)) -#elseif arch(i386) || arch(arm) - bytes = (UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0)) -#endif - length = UInt8(count) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ slice: InlineSlice, count: Int) { - self.init(count: count) - Swift.withUnsafeMutableBytes(of: &bytes) { dstBuffer in - slice.withUnsafeBytes { srcBuffer in - dstBuffer.copyMemory(from: UnsafeRawBufferPointer(start: srcBuffer.baseAddress, count: count)) - } - } - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ slice: LargeSlice, count: Int) { - self.init(count: count) - Swift.withUnsafeMutableBytes(of: &bytes) { dstBuffer in - slice.withUnsafeBytes { srcBuffer in - dstBuffer.copyMemory(from: UnsafeRawBufferPointer(start: srcBuffer.baseAddress, count: count)) - } - } - } - - @inlinable // This is @inlinable as trivially computable. - var capacity: Int { - return MemoryLayout.size - } - - @inlinable // This is @inlinable as trivially computable. - var count: Int { - get { - return Int(length) - } - set(newValue) { - assert(newValue <= MemoryLayout.size) - length = UInt8(newValue) - } - } - - @inlinable // This is @inlinable as trivially computable. - var startIndex: Int { - return 0 - } - - @inlinable // This is @inlinable as trivially computable. - var endIndex: Int { - return count - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - func withUnsafeBytes(_ apply: (UnsafeRawBufferPointer) throws -> Result) rethrows -> Result { - let count = Int(length) - return try Swift.withUnsafeBytes(of: bytes) { (rawBuffer) throws -> Result in - return try apply(UnsafeRawBufferPointer(start: rawBuffer.baseAddress, count: count)) - } - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - mutating func withUnsafeMutableBytes(_ apply: (UnsafeMutableRawBufferPointer) throws -> Result) rethrows -> Result { - let count = Int(length) - return try Swift.withUnsafeMutableBytes(of: &bytes) { (rawBuffer) throws -> Result in - return try apply(UnsafeMutableRawBufferPointer(start: rawBuffer.baseAddress, count: count)) - } - } - - @inlinable // This is @inlinable as tribially computable. - mutating func append(byte: UInt8) { - let count = self.count - assert(count + 1 <= MemoryLayout.size) - Swift.withUnsafeMutableBytes(of: &bytes) { $0[count] = byte } - self.length += 1 - } - - @inlinable // This is @inlinable as trivially computable. - mutating func append(contentsOf buffer: UnsafeRawBufferPointer) { - guard !buffer.isEmpty else { return } - assert(count + buffer.count <= MemoryLayout.size) - let cnt = count - _ = Swift.withUnsafeMutableBytes(of: &bytes) { rawBuffer in - rawBuffer.baseAddress?.advanced(by: cnt).copyMemory(from: buffer.baseAddress!, byteCount: buffer.count) - } - - length += UInt8(buffer.count) - } - - @inlinable // This is @inlinable as trivially computable. - subscript(index: Index) -> UInt8 { - get { - assert(index <= MemoryLayout.size) - precondition(index < length, "index \(index) is out of bounds of 0..<\(length)") - return Swift.withUnsafeBytes(of: bytes) { rawBuffer -> UInt8 in - return rawBuffer[index] - } - } - set(newValue) { - assert(index <= MemoryLayout.size) - precondition(index < length, "index \(index) is out of bounds of 0..<\(length)") - Swift.withUnsafeMutableBytes(of: &bytes) { rawBuffer in - rawBuffer[index] = newValue - } - } - } - - @inlinable // This is @inlinable as trivially computable. - mutating func resetBytes(in range: Range) { - assert(range.lowerBound <= MemoryLayout.size) - assert(range.upperBound <= MemoryLayout.size) - precondition(range.lowerBound <= length, "index \(range.lowerBound) is out of bounds of 0..<\(length)") - if count < range.upperBound { - count = range.upperBound - } - - let _ = Swift.withUnsafeMutableBytes(of: &bytes) { rawBuffer in - memset(rawBuffer.baseAddress?.advanced(by: range.lowerBound), 0, range.upperBound - range.lowerBound) - } - } - - @usableFromInline // This is not @inlinable as it is a non-trivial, non-generic function. - mutating func replaceSubrange(_ subrange: Range, with replacementBytes: UnsafeRawPointer?, count replacementLength: Int) { - assert(subrange.lowerBound <= MemoryLayout.size) - assert(subrange.upperBound <= MemoryLayout.size) - assert(count - (subrange.upperBound - subrange.lowerBound) + replacementLength <= MemoryLayout.size) - precondition(subrange.lowerBound <= length, "index \(subrange.lowerBound) is out of bounds of 0..<\(length)") - precondition(subrange.upperBound <= length, "index \(subrange.upperBound) is out of bounds of 0..<\(length)") - let currentLength = count - let resultingLength = currentLength - (subrange.upperBound - subrange.lowerBound) + replacementLength - let shift = resultingLength - currentLength - Swift.withUnsafeMutableBytes(of: &bytes) { mutableBytes in - /* shift the trailing bytes */ - let start = subrange.lowerBound - let length = subrange.upperBound - subrange.lowerBound - if shift != 0 { - memmove(mutableBytes.baseAddress?.advanced(by: start + replacementLength), mutableBytes.baseAddress?.advanced(by: start + length), currentLength - start - length) - } - if replacementLength != 0 { - memmove(mutableBytes.baseAddress?.advanced(by: start), replacementBytes!, replacementLength) - } - } - count = resultingLength - } - - @inlinable // This is @inlinable as trivially computable. - func copyBytes(to pointer: UnsafeMutableRawPointer, from range: Range) { - precondition(startIndex <= range.lowerBound, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(startIndex <= range.upperBound, "index \(range.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(range.upperBound <= endIndex, "index \(range.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - - Swift.withUnsafeBytes(of: bytes) { - let cnt = Swift.min($0.count, range.upperBound - range.lowerBound) - guard cnt > 0 else { return } - pointer.copyMemory(from: $0.baseAddress!.advanced(by: range.lowerBound), byteCount: cnt) - } - } - - @inline(__always) // This should always be inlined into _Representation.hash(into:). - func hash(into hasher: inout Hasher) { - // **NOTE**: this uses `count` (an Int) and NOT `length` (a UInt8) - // Despite having the same value, they hash differently. InlineSlice and LargeSlice both use `count` (an Int); if you combine the same bytes but with `length` over `count`, you can get a different hash. - // - // This affects slices, which are InlineSlice and not InlineData: - // - // let d = Data([0xFF, 0xFF]) // InlineData - // let s = Data([0, 0xFF, 0xFF]).dropFirst() // InlineSlice - // assert(s == d) - // assert(s.hashValue == d.hashValue) - hasher.combine(count) - - Swift.withUnsafeBytes(of: bytes) { - // We have access to the full byte buffer here, but not all of it is meaningfully used (bytes past self.length may be garbage). - let bytes = UnsafeRawBufferPointer(start: $0.baseAddress, count: self.count) - hasher.combine(bytes: bytes) - } - } - } - -#if arch(x86_64) || arch(arm64) || arch(s390x) || arch(powerpc64) || arch(powerpc64le) - @usableFromInline internal typealias HalfInt = Int32 -#elseif arch(i386) || arch(arm) - @usableFromInline internal typealias HalfInt = Int16 -#endif - - // A buffer of bytes too large to fit in an InlineData, but still small enough to fit a storage pointer + range in two words. - // Inlinability strategy: everything here should be easily inlinable as large _DataStorage methods should not inline into here. - @usableFromInline - @frozen - internal struct InlineSlice { - // ***WARNING*** - // These ivars are specifically laid out so that they cause the enum _Representation to be 16 bytes on 64 bit platforms. This means we _MUST_ have the class type thing last - @usableFromInline var slice: Range - @usableFromInline var storage: __DataStorage - - @inlinable // This is @inlinable as trivially computable. - static func canStore(count: Int) -> Bool { - return count < HalfInt.max - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ buffer: UnsafeRawBufferPointer) { - assert(buffer.count < HalfInt.max) - self.init(__DataStorage(bytes: buffer.baseAddress, length: buffer.count), count: buffer.count) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(capacity: Int) { - assert(capacity < HalfInt.max) - self.init(__DataStorage(capacity: capacity), count: 0) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(count: Int) { - assert(count < HalfInt.max) - self.init(__DataStorage(length: count), count: count) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ inline: InlineData) { - assert(inline.count < HalfInt.max) - self.init(inline.withUnsafeBytes { return __DataStorage(bytes: $0.baseAddress, length: $0.count) }, count: inline.count) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ inline: InlineData, range: Range) { - assert(range.lowerBound < HalfInt.max) - assert(range.upperBound < HalfInt.max) - self.init(inline.withUnsafeBytes { return __DataStorage(bytes: $0.baseAddress, length: $0.count) }, range: range) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ large: LargeSlice) { - assert(large.range.lowerBound < HalfInt.max) - assert(large.range.upperBound < HalfInt.max) - self.init(large.storage, range: large.range) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ large: LargeSlice, range: Range) { - assert(range.lowerBound < HalfInt.max) - assert(range.upperBound < HalfInt.max) - self.init(large.storage, range: range) - } - - @inlinable // This is @inlinable as a trivial initializer. - init(_ storage: __DataStorage, count: Int) { - assert(count < HalfInt.max) - self.storage = storage - slice = 0..) { - assert(range.lowerBound < HalfInt.max) - assert(range.upperBound < HalfInt.max) - self.storage = storage - slice = HalfInt(range.lowerBound).. { - get { - return Int(slice.lowerBound)..(_ apply: (UnsafeRawBufferPointer) throws -> Result) rethrows -> Result { - return try storage.withUnsafeBytes(in: range, apply: apply) - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - mutating func withUnsafeMutableBytes(_ apply: (UnsafeMutableRawBufferPointer) throws -> Result) rethrows -> Result { - ensureUniqueReference() - return try storage.withUnsafeMutableBytes(in: range, apply: apply) - } - - @inlinable // This is @inlinable as reasonably small. - mutating func append(contentsOf buffer: UnsafeRawBufferPointer) { - assert(endIndex + buffer.count < HalfInt.max) - ensureUniqueReference() - storage.replaceBytes(in: NSRange(location: range.upperBound, length: storage.length - (range.upperBound - storage._offset)), with: buffer.baseAddress, length: buffer.count) - slice = slice.lowerBound.. UInt8 { - get { - assert(index < HalfInt.max) - precondition(startIndex <= index, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(index < endIndex, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - return storage.get(index) - } - set(newValue) { - assert(index < HalfInt.max) - precondition(startIndex <= index, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(index < endIndex, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - ensureUniqueReference() - storage.set(index, to: newValue) - } - } - - @inlinable // This is @inlinable as trivially forwarding. - func bridgedReference() -> NSData { - return storage.bridgedReference(self.range) - } - - @inlinable // This is @inlinable as reasonably small. - mutating func resetBytes(in range: Range) { - assert(range.lowerBound < HalfInt.max) - assert(range.upperBound < HalfInt.max) - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - ensureUniqueReference() - storage.resetBytes(in: range) - if slice.upperBound < range.upperBound { - slice = slice.lowerBound.., with bytes: UnsafeRawPointer?, count cnt: Int) { - precondition(startIndex <= subrange.lowerBound, "index \(subrange.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(subrange.lowerBound <= endIndex, "index \(subrange.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(startIndex <= subrange.upperBound, "index \(subrange.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(subrange.upperBound <= endIndex, "index \(subrange.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - - let nsRange = NSRange(location: subrange.lowerBound, length: subrange.upperBound - subrange.lowerBound) - ensureUniqueReference() - let upper = range.upperBound - storage.replaceBytes(in: nsRange, with: bytes, length: cnt) - let resultingUpper = upper - nsRange.length + cnt - slice = slice.lowerBound..) { - precondition(startIndex <= range.lowerBound, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(startIndex <= range.upperBound, "index \(range.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(range.upperBound <= endIndex, "index \(range.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - storage.copyBytes(to: pointer, from: range) - } - - @inline(__always) // This should always be inlined into _Representation.hash(into:). - func hash(into hasher: inout Hasher) { - hasher.combine(count) - - // At most, hash the first 80 bytes of this data. - let range = startIndex ..< Swift.min(startIndex + 80, endIndex) - storage.withUnsafeBytes(in: range) { - hasher.combine(bytes: $0) - } - } - } - - // A reference wrapper around a Range for when the range of a data buffer is too large to whole in a single word. - // Inlinability strategy: everything should be inlinable as trivial. - @usableFromInline - @_fixed_layout - internal final class RangeReference { - @usableFromInline var range: Range - - @inlinable @inline(__always) // This is @inlinable as trivially forwarding. - var lowerBound: Int { - return range.lowerBound - } - - @inlinable @inline(__always) // This is @inlinable as trivially forwarding. - var upperBound: Int { - return range.upperBound - } - - @inlinable @inline(__always) // This is @inlinable as trivially computable. - var count: Int { - return range.upperBound - range.lowerBound - } - - @inlinable @inline(__always) // This is @inlinable as a trivial initializer. - init(_ range: Range) { - self.range = range - } - } - - // A buffer of bytes whose range is too large to fit in a signle word. Used alongside a RangeReference to make it fit into _Representation's two-word size. - // Inlinability strategy: everything here should be easily inlinable as large _DataStorage methods should not inline into here. - @usableFromInline - @frozen - internal struct LargeSlice { - // ***WARNING*** - // These ivars are specifically laid out so that they cause the enum _Representation to be 16 bytes on 64 bit platforms. This means we _MUST_ have the class type thing last - @usableFromInline var slice: RangeReference - @usableFromInline var storage: __DataStorage - - @inlinable // This is @inlinable as a convenience initializer. - init(_ buffer: UnsafeRawBufferPointer) { - self.init(__DataStorage(bytes: buffer.baseAddress, length: buffer.count), count: buffer.count) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(capacity: Int) { - self.init(__DataStorage(capacity: capacity), count: 0) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(count: Int) { - self.init(__DataStorage(length: count), count: count) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ inline: InlineData) { - let storage = inline.withUnsafeBytes { return __DataStorage(bytes: $0.baseAddress, length: $0.count) } - self.init(storage, count: inline.count) - } - - @inlinable // This is @inlinable as a trivial initializer. - init(_ slice: InlineSlice) { - self.storage = slice.storage - self.slice = RangeReference(slice.range) - } - - @inlinable // This is @inlinable as a trivial initializer. - init(_ storage: __DataStorage, count: Int) { - self.storage = storage - self.slice = RangeReference(0.. { - return slice.range - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - func withUnsafeBytes(_ apply: (UnsafeRawBufferPointer) throws -> Result) rethrows -> Result { - return try storage.withUnsafeBytes(in: range, apply: apply) - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - mutating func withUnsafeMutableBytes(_ apply: (UnsafeMutableRawBufferPointer) throws -> Result) rethrows -> Result { - ensureUniqueReference() - return try storage.withUnsafeMutableBytes(in: range, apply: apply) - } - - @inlinable // This is @inlinable as reasonably small. - mutating func append(contentsOf buffer: UnsafeRawBufferPointer) { - ensureUniqueReference() - storage.replaceBytes(in: NSRange(location: range.upperBound, length: storage.length - (range.upperBound - storage._offset)), with: buffer.baseAddress, length: buffer.count) - slice.range = slice.range.lowerBound.. UInt8 { - get { - precondition(startIndex <= index, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(index < endIndex, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - return storage.get(index) - } - set(newValue) { - precondition(startIndex <= index, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(index < endIndex, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - ensureUniqueReference() - storage.set(index, to: newValue) - } - } - - @inlinable // This is @inlinable as trivially forwarding. - func bridgedReference() -> NSData { - return storage.bridgedReference(self.range) - } - - @inlinable // This is @inlinable as reasonably small. - mutating func resetBytes(in range: Range) { - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - ensureUniqueReference() - storage.resetBytes(in: range) - if slice.range.upperBound < range.upperBound { - slice.range = slice.range.lowerBound.., with bytes: UnsafeRawPointer?, count cnt: Int) { - precondition(startIndex <= subrange.lowerBound, "index \(subrange.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(subrange.lowerBound <= endIndex, "index \(subrange.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(startIndex <= subrange.upperBound, "index \(subrange.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(subrange.upperBound <= endIndex, "index \(subrange.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - - let nsRange = NSRange(location: subrange.lowerBound, length: subrange.upperBound - subrange.lowerBound) - ensureUniqueReference() - let upper = range.upperBound - storage.replaceBytes(in: nsRange, with: bytes, length: cnt) - let resultingUpper = upper - nsRange.length + cnt - slice.range = slice.range.lowerBound..) { - precondition(startIndex <= range.lowerBound, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(startIndex <= range.upperBound, "index \(range.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(range.upperBound <= endIndex, "index \(range.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - storage.copyBytes(to: pointer, from: range) - } - - @inline(__always) // This should always be inlined into _Representation.hash(into:). - func hash(into hasher: inout Hasher) { - hasher.combine(count) - - // Hash at most the first 80 bytes of this data. - let range = startIndex ..< Swift.min(startIndex + 80, endIndex) - storage.withUnsafeBytes(in: range) { - hasher.combine(bytes: $0) - } - } - } - - // The actual storage for Data's various representations. - // Inlinability strategy: almost everything should be inlinable as forwarding the underlying implementations. (Inlining can also help avoid retain-release traffic around pulling values out of enums.) - @usableFromInline - @frozen - internal enum _Representation { - case empty - case inline(InlineData) - case slice(InlineSlice) - case large(LargeSlice) - - @inlinable // This is @inlinable as a trivial initializer. - init(_ buffer: UnsafeRawBufferPointer) { - if buffer.isEmpty { - self = .empty - } else if InlineData.canStore(count: buffer.count) { - self = .inline(InlineData(buffer)) - } else if InlineSlice.canStore(count: buffer.count) { - self = .slice(InlineSlice(buffer)) - } else { - self = .large(LargeSlice(buffer)) - } - } - - @inlinable // This is @inlinable as a trivial initializer. - init(_ buffer: UnsafeRawBufferPointer, owner: AnyObject) { - if buffer.isEmpty { - self = .empty - } else if InlineData.canStore(count: buffer.count) { - self = .inline(InlineData(buffer)) - } else { - let count = buffer.count - let storage = __DataStorage(bytes: UnsafeMutableRawPointer(mutating: buffer.baseAddress), length: count, copy: false, deallocator: { _, _ in - _fixLifetime(owner) - }, offset: 0) - if InlineSlice.canStore(count: count) { - self = .slice(InlineSlice(storage, count: count)) - } else { - self = .large(LargeSlice(storage, count: count)) - } - } - } - - @inlinable // This is @inlinable as a trivial initializer. - init(capacity: Int) { - if capacity == 0 { - self = .empty - } else if InlineData.canStore(count: capacity) { - self = .inline(InlineData()) - } else if InlineSlice.canStore(count: capacity) { - self = .slice(InlineSlice(capacity: capacity)) - } else { - self = .large(LargeSlice(capacity: capacity)) - } - } - - @inlinable // This is @inlinable as a trivial initializer. - init(count: Int) { - if count == 0 { - self = .empty - } else if InlineData.canStore(count: count) { - self = .inline(InlineData(count: count)) - } else if InlineSlice.canStore(count: count) { - self = .slice(InlineSlice(count: count)) - } else { - self = .large(LargeSlice(count: count)) - } - } - - @inlinable // This is @inlinable as a trivial initializer. - init(_ storage: __DataStorage, count: Int) { - if count == 0 { - self = .empty - } else if InlineData.canStore(count: count) { - self = .inline(storage.withUnsafeBytes(in: 0.. 0 else { return } - switch self { - case .empty: - if InlineData.canStore(count: minimumCapacity) { - self = .inline(InlineData()) - } else if InlineSlice.canStore(count: minimumCapacity) { - self = .slice(InlineSlice(capacity: minimumCapacity)) - } else { - self = .large(LargeSlice(capacity: minimumCapacity)) - } - case .inline(let inline): - guard minimumCapacity > inline.capacity else { return } - // we know we are going to be heap promoted - if InlineSlice.canStore(count: minimumCapacity) { - var slice = InlineSlice(inline) - slice.reserveCapacity(minimumCapacity) - self = .slice(slice) - } else { - var slice = LargeSlice(inline) - slice.reserveCapacity(minimumCapacity) - self = .large(slice) - } - case .slice(var slice): - guard minimumCapacity > slice.capacity else { return } - if InlineSlice.canStore(count: minimumCapacity) { - self = .empty - slice.reserveCapacity(minimumCapacity) - self = .slice(slice) - } else { - var large = LargeSlice(slice) - large.reserveCapacity(minimumCapacity) - self = .large(large) - } - case .large(var slice): - guard minimumCapacity > slice.capacity else { return } - self = .empty - slice.reserveCapacity(minimumCapacity) - self = .large(slice) - } - } - - @inlinable // This is @inlinable as reasonably small. - var count: Int { - get { - switch self { - case .empty: return 0 - case .inline(let inline): return inline.count - case .slice(let slice): return slice.count - case .large(let slice): return slice.count - } - } - set(newValue) { - // HACK: The definition of this inline function takes an inout reference to self, giving the optimizer a unique referencing guarantee. - // This allows us to avoid excessive retain-release traffic around modifying enum values, and inlining the function then avoids the additional frame. - @inline(__always) - func apply(_ representation: inout _Representation, _ newValue: Int) -> _Representation? { - switch representation { - case .empty: - if newValue == 0 { - return nil - } else if InlineData.canStore(count: newValue) { - return .inline(InlineData(count: newValue)) - } else if InlineSlice.canStore(count: newValue) { - return .slice(InlineSlice(count: newValue)) - } else { - return .large(LargeSlice(count: newValue)) - } - case .inline(var inline): - if newValue == 0 { - return .empty - } else if InlineData.canStore(count: newValue) { - guard inline.count != newValue else { return nil } - inline.count = newValue - return .inline(inline) - } else if InlineSlice.canStore(count: newValue) { - var slice = InlineSlice(inline) - slice.count = newValue - return .slice(slice) - } else { - var slice = LargeSlice(inline) - slice.count = newValue - return .large(slice) - } - case .slice(var slice): - if newValue == 0 && slice.startIndex == 0 { - return .empty - } else if slice.startIndex == 0 && InlineData.canStore(count: newValue) { - return .inline(InlineData(slice, count: newValue)) - } else if InlineSlice.canStore(count: newValue + slice.startIndex) { - guard slice.count != newValue else { return nil } - representation = .empty // TODO: remove this when mgottesman lands optimizations - slice.count = newValue - return .slice(slice) - } else { - var newSlice = LargeSlice(slice) - newSlice.count = newValue - return .large(newSlice) - } - case .large(var slice): - if newValue == 0 && slice.startIndex == 0 { - return .empty - } else if slice.startIndex == 0 && InlineData.canStore(count: newValue) { - return .inline(InlineData(slice, count: newValue)) - } else { - guard slice.count != newValue else { return nil} - representation = .empty // TODO: remove this when mgottesman lands optimizations - slice.count = newValue - return .large(slice) - } - } - } - - if let rep = apply(&self, newValue) { - self = rep - } - } - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - func withUnsafeBytes(_ apply: (UnsafeRawBufferPointer) throws -> Result) rethrows -> Result { - switch self { - case .empty: - let empty = InlineData() - return try empty.withUnsafeBytes(apply) - case .inline(let inline): - return try inline.withUnsafeBytes(apply) - case .slice(let slice): - return try slice.withUnsafeBytes(apply) - case .large(let slice): - return try slice.withUnsafeBytes(apply) - } - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - mutating func withUnsafeMutableBytes(_ apply: (UnsafeMutableRawBufferPointer) throws -> Result) rethrows -> Result { - switch self { - case .empty: - var empty = InlineData() - return try empty.withUnsafeMutableBytes(apply) - case .inline(var inline): - defer { self = .inline(inline) } - return try inline.withUnsafeMutableBytes(apply) - case .slice(var slice): - self = .empty - defer { self = .slice(slice) } - return try slice.withUnsafeMutableBytes(apply) - case .large(var slice): - self = .empty - defer { self = .large(slice) } - return try slice.withUnsafeMutableBytes(apply) - } - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - func withInteriorPointerReference(_ work: (NSData) throws -> T) rethrows -> T { - switch self { - case .empty: - return try work(NSData()) - case .inline(let inline): - return try inline.withUnsafeBytes { - return try work(NSData(bytesNoCopy: UnsafeMutableRawPointer(mutating: $0.baseAddress ?? UnsafeRawPointer(bitPattern: 0xBAD0)!), length: $0.count, freeWhenDone: false)) - } - case .slice(let slice): - return try slice.storage.withInteriorPointerReference(slice.range, work) - case .large(let slice): - return try slice.storage.withInteriorPointerReference(slice.range, work) - } - } - - @usableFromInline // This is not @inlinable as it is a non-trivial, non-generic function. - func enumerateBytes(_ block: (_ buffer: UnsafeBufferPointer, _ byteIndex: Index, _ stop: inout Bool) -> Void) { - switch self { - case .empty: - var stop = false - block(UnsafeBufferPointer(start: nil, count: 0), 0, &stop) - case .inline(let inline): - inline.withUnsafeBytes { - var stop = false - block(UnsafeBufferPointer(start: $0.baseAddress?.assumingMemoryBound(to: UInt8.self), count: $0.count), 0, &stop) - } - case .slice(let slice): - slice.storage.enumerateBytes(in: slice.range, block) - case .large(let slice): - slice.storage.enumerateBytes(in: slice.range, block) - } - } - - @inlinable // This is @inlinable as reasonably small. - mutating func append(contentsOf buffer: UnsafeRawBufferPointer) { - switch self { - case .empty: - self = _Representation(buffer) - case .inline(var inline): - if InlineData.canStore(count: inline.count + buffer.count) { - inline.append(contentsOf: buffer) - self = .inline(inline) - } else if InlineSlice.canStore(count: inline.count + buffer.count) { - var newSlice = InlineSlice(inline) - newSlice.append(contentsOf: buffer) - self = .slice(newSlice) - } else { - var newSlice = LargeSlice(inline) - newSlice.append(contentsOf: buffer) - self = .large(newSlice) - } - case .slice(var slice): - if InlineSlice.canStore(count: slice.range.upperBound + buffer.count) { - self = .empty - defer { self = .slice(slice) } - slice.append(contentsOf: buffer) - } else { - self = .empty - var newSlice = LargeSlice(slice) - newSlice.append(contentsOf: buffer) - self = .large(newSlice) - } - case .large(var slice): - self = .empty - defer { self = .large(slice) } - slice.append(contentsOf: buffer) - } - } - - @inlinable // This is @inlinable as reasonably small. - mutating func resetBytes(in range: Range) { - switch self { - case .empty: - if range.upperBound == 0 { - self = .empty - } else if InlineData.canStore(count: range.upperBound) { - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - self = .inline(InlineData(count: range.upperBound)) - } else if InlineSlice.canStore(count: range.upperBound) { - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - self = .slice(InlineSlice(count: range.upperBound)) - } else { - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - self = .large(LargeSlice(count: range.upperBound)) - } - case .inline(var inline): - if inline.count < range.upperBound { - if InlineSlice.canStore(count: range.upperBound) { - var slice = InlineSlice(inline) - slice.resetBytes(in: range) - self = .slice(slice) - } else { - var slice = LargeSlice(inline) - slice.resetBytes(in: range) - self = .large(slice) - } - } else { - inline.resetBytes(in: range) - self = .inline(inline) - } - case .slice(var slice): - if InlineSlice.canStore(count: range.upperBound) { - self = .empty - slice.resetBytes(in: range) - self = .slice(slice) - } else { - self = .empty - var newSlice = LargeSlice(slice) - newSlice.resetBytes(in: range) - self = .large(newSlice) - } - case .large(var slice): - self = .empty - slice.resetBytes(in: range) - self = .large(slice) - } - } - - @usableFromInline // This is not @inlinable as it is a non-trivial, non-generic function. - mutating func replaceSubrange(_ subrange: Range, with bytes: UnsafeRawPointer?, count cnt: Int) { - switch self { - case .empty: - precondition(subrange.lowerBound == 0 && subrange.upperBound == 0, "range \(subrange) out of bounds of 0..<0") - if cnt == 0 { - return - } else if InlineData.canStore(count: cnt) { - self = .inline(InlineData(UnsafeRawBufferPointer(start: bytes, count: cnt))) - } else if InlineSlice.canStore(count: cnt) { - self = .slice(InlineSlice(UnsafeRawBufferPointer(start: bytes, count: cnt))) - } else { - self = .large(LargeSlice(UnsafeRawBufferPointer(start: bytes, count: cnt))) - } - case .inline(var inline): - let resultingCount = inline.count + cnt - (subrange.upperBound - subrange.lowerBound) - if resultingCount == 0 { - self = .empty - } else if InlineData.canStore(count: resultingCount) { - inline.replaceSubrange(subrange, with: bytes, count: cnt) - self = .inline(inline) - } else if InlineSlice.canStore(count: resultingCount) { - var slice = InlineSlice(inline) - slice.replaceSubrange(subrange, with: bytes, count: cnt) - self = .slice(slice) - } else { - var slice = LargeSlice(inline) - slice.replaceSubrange(subrange, with: bytes, count: cnt) - self = .large(slice) - } - case .slice(var slice): - let resultingUpper = slice.endIndex + cnt - (subrange.upperBound - subrange.lowerBound) - if slice.startIndex == 0 && resultingUpper == 0 { - self = .empty - } else if slice.startIndex == 0 && InlineData.canStore(count: resultingUpper) { - self = .empty - slice.replaceSubrange(subrange, with: bytes, count: cnt) - self = .inline(InlineData(slice, count: slice.count)) - } else if InlineSlice.canStore(count: resultingUpper) { - self = .empty - slice.replaceSubrange(subrange, with: bytes, count: cnt) - self = .slice(slice) - } else { - self = .empty - var newSlice = LargeSlice(slice) - newSlice.replaceSubrange(subrange, with: bytes, count: cnt) - self = .large(newSlice) - } - case .large(var slice): - let resultingUpper = slice.endIndex + cnt - (subrange.upperBound - subrange.lowerBound) - if slice.startIndex == 0 && resultingUpper == 0 { - self = .empty - } else if slice.startIndex == 0 && InlineData.canStore(count: resultingUpper) { - var inline = InlineData(count: resultingUpper) - inline.withUnsafeMutableBytes { inlineBuffer in - if cnt > 0 { - inlineBuffer.baseAddress?.advanced(by: subrange.lowerBound).copyMemory(from: bytes!, byteCount: cnt) - } - slice.withUnsafeBytes { buffer in - if subrange.lowerBound > 0 { - inlineBuffer.baseAddress?.copyMemory(from: buffer.baseAddress!, byteCount: subrange.lowerBound) - } - if subrange.upperBound < resultingUpper { - inlineBuffer.baseAddress?.advanced(by: subrange.upperBound).copyMemory(from: buffer.baseAddress!.advanced(by: subrange.upperBound), byteCount: resultingUpper - subrange.upperBound) - } - } - } - self = .inline(inline) - } else if InlineSlice.canStore(count: slice.startIndex) && InlineSlice.canStore(count: resultingUpper) { - self = .empty - var newSlice = InlineSlice(slice) - newSlice.replaceSubrange(subrange, with: bytes, count: cnt) - self = .slice(newSlice) - } else { - self = .empty - slice.replaceSubrange(subrange, with: bytes, count: cnt) - self = .large(slice) - } - } - } - - @inlinable // This is @inlinable as trivially forwarding. - subscript(index: Index) -> UInt8 { - get { - switch self { - case .empty: preconditionFailure("index \(index) out of range of 0") - case .inline(let inline): return inline[index] - case .slice(let slice): return slice[index] - case .large(let slice): return slice[index] - } - } - set(newValue) { - switch self { - case .empty: preconditionFailure("index \(index) out of range of 0") - case .inline(var inline): - inline[index] = newValue - self = .inline(inline) - case .slice(var slice): - self = .empty - slice[index] = newValue - self = .slice(slice) - case .large(var slice): - self = .empty - slice[index] = newValue - self = .large(slice) - } - } - } - - @inlinable // This is @inlinable as reasonably small. - subscript(bounds: Range) -> Data { - get { - switch self { - case .empty: - precondition(bounds.lowerBound == 0 && (bounds.upperBound - bounds.lowerBound) == 0, "Range \(bounds) out of bounds 0..<0") - return Data() - case .inline(let inline): - precondition(bounds.upperBound <= inline.count, "Range \(bounds) out of bounds 0..<\(inline.count)") - if bounds.lowerBound == 0 { - var newInline = inline - newInline.count = bounds.upperBound - return Data(representation: .inline(newInline)) - } else { - return Data(representation: .slice(InlineSlice(inline, range: bounds))) - } - case .slice(let slice): - precondition(slice.startIndex <= bounds.lowerBound, "Range \(bounds) out of bounds \(slice.range)") - precondition(bounds.lowerBound <= slice.endIndex, "Range \(bounds) out of bounds \(slice.range)") - precondition(slice.startIndex <= bounds.upperBound, "Range \(bounds) out of bounds \(slice.range)") - precondition(bounds.upperBound <= slice.endIndex, "Range \(bounds) out of bounds \(slice.range)") - if bounds.lowerBound == 0 && bounds.upperBound == 0 { - return Data() - } else if bounds.lowerBound == 0 && InlineData.canStore(count: bounds.count) { - return Data(representation: .inline(InlineData(slice, count: bounds.count))) - } else { - var newSlice = slice - newSlice.range = bounds - return Data(representation: .slice(newSlice)) - } - case .large(let slice): - precondition(slice.startIndex <= bounds.lowerBound, "Range \(bounds) out of bounds \(slice.range)") - precondition(bounds.lowerBound <= slice.endIndex, "Range \(bounds) out of bounds \(slice.range)") - precondition(slice.startIndex <= bounds.upperBound, "Range \(bounds) out of bounds \(slice.range)") - precondition(bounds.upperBound <= slice.endIndex, "Range \(bounds) out of bounds \(slice.range)") - if bounds.lowerBound == 0 && bounds.upperBound == 0 { - return Data() - } else if bounds.lowerBound == 0 && InlineData.canStore(count: bounds.upperBound) { - return Data(representation: .inline(InlineData(slice, count: bounds.upperBound))) - } else if InlineSlice.canStore(count: bounds.lowerBound) && InlineSlice.canStore(count: bounds.upperBound) { - return Data(representation: .slice(InlineSlice(slice, range: bounds))) - } else { - var newSlice = slice - newSlice.slice = RangeReference(bounds) - return Data(representation: .large(newSlice)) - } - } - } - } - - @inlinable // This is @inlinable as trivially forwarding. - var startIndex: Int { - switch self { - case .empty: return 0 - case .inline: return 0 - case .slice(let slice): return slice.startIndex - case .large(let slice): return slice.startIndex - } - } - - @inlinable // This is @inlinable as trivially forwarding. - var endIndex: Int { - switch self { - case .empty: return 0 - case .inline(let inline): return inline.count - case .slice(let slice): return slice.endIndex - case .large(let slice): return slice.endIndex - } - } - - @inlinable // This is @inlinable as trivially forwarding. - func bridgedReference() -> NSData { - switch self { - case .empty: return NSData() - case .inline(let inline): - return inline.withUnsafeBytes { - return NSData(bytes: $0.baseAddress, length: $0.count) - } - case .slice(let slice): - return slice.bridgedReference() - case .large(let slice): - return slice.bridgedReference() - } - } - - @inlinable // This is @inlinable as trivially forwarding. - func copyBytes(to pointer: UnsafeMutableRawPointer, from range: Range) { - switch self { - case .empty: - precondition(range.lowerBound == 0 && range.upperBound == 0, "Range \(range) out of bounds 0..<0") - return - case .inline(let inline): - inline.copyBytes(to: pointer, from: range) - case .slice(let slice): - slice.copyBytes(to: pointer, from: range) - case .large(let slice): - slice.copyBytes(to: pointer, from: range) - } - } - - @inline(__always) // This should always be inlined into Data.hash(into:). - func hash(into hasher: inout Hasher) { - switch self { - case .empty: - hasher.combine(0) - case .inline(let inline): - inline.hash(into: &hasher) - case .slice(let slice): - slice.hash(into: &hasher) - case .large(let large): - large.hash(into: &hasher) - } - } - } - - @usableFromInline internal var _representation: _Representation - - // A standard or custom deallocator for `Data`. - /// - /// When creating a `Data` with the no-copy initializer, you may specify a `Data.Deallocator` to customize the behavior of how the backing store is deallocated. - public enum Deallocator { - /// Use a virtual memory deallocator. -#if !DEPLOYMENT_RUNTIME_SWIFT - case virtualMemory -#endif - - /// Use `munmap`. - case unmap - - /// Use `free`. - case free - - /// Do nothing upon deallocation. - case none - - /// A custom deallocator. - case custom((UnsafeMutableRawPointer, Int) -> Void) - - @usableFromInline internal var _deallocator : ((UnsafeMutableRawPointer, Int) -> Void) { -#if DEPLOYMENT_RUNTIME_SWIFT - switch self { - case .unmap: - return { __NSDataInvokeDeallocatorUnmap($0, $1) } - case .free: - return { __NSDataInvokeDeallocatorFree($0, $1) } - case .none: - return { _, _ in } - case .custom(let b): - return b - } -#else - switch self { - case .virtualMemory: - return { NSDataDeallocatorVM($0, $1) } - case .unmap: - return { NSDataDeallocatorUnmap($0, $1) } - case .free: - return { NSDataDeallocatorFree($0, $1) } - case .none: - return { _, _ in } - case .custom(let b): - return b - } -#endif - } - } - - // MARK: - - // MARK: Init methods - - /// Initialize a `Data` with copied memory content. - /// - /// - parameter bytes: A pointer to the memory. It will be copied. - /// - parameter count: The number of bytes to copy. - @inlinable // This is @inlinable as a trivial initializer. - public init(bytes: UnsafeRawPointer, count: Int) { - _representation = _Representation(UnsafeRawBufferPointer(start: bytes, count: count)) - } - - /// Initialize a `Data` with copied memory content. - /// - /// - parameter buffer: A buffer pointer to copy. The size is calculated from `SourceType` and `buffer.count`. - @inlinable // This is @inlinable as a trivial, generic initializer. - public init(buffer: UnsafeBufferPointer) { - _representation = _Representation(UnsafeRawBufferPointer(buffer)) - } - - /// Initialize a `Data` with copied memory content. - /// - /// - parameter buffer: A buffer pointer to copy. The size is calculated from `SourceType` and `buffer.count`. - @inlinable // This is @inlinable as a trivial, generic initializer. - public init(buffer: UnsafeMutableBufferPointer) { - _representation = _Representation(UnsafeRawBufferPointer(buffer)) - } - - /// Initialize a `Data` with a repeating byte pattern - /// - /// - parameter repeatedValue: A byte to initialize the pattern - /// - parameter count: The number of bytes the data initially contains initialized to the repeatedValue - @inlinable // This is @inlinable as a convenience initializer. - public init(repeating repeatedValue: UInt8, count: Int) { - self.init(count: count) - withUnsafeMutableBytes { (buffer: UnsafeMutableRawBufferPointer) -> Void in - memset(buffer.baseAddress, Int32(repeatedValue), buffer.count) - } - } - - /// Initialize a `Data` with the specified size. - /// - /// This initializer doesn't necessarily allocate the requested memory right away. `Data` allocates additional memory as needed, so `capacity` simply establishes the initial capacity. When it does allocate the initial memory, though, it allocates the specified amount. - /// - /// This method sets the `count` of the data to 0. - /// - /// If the capacity specified in `capacity` is greater than four memory pages in size, this may round the amount of requested memory up to the nearest full page. - /// - /// - parameter capacity: The size of the data. - @inlinable // This is @inlinable as a trivial initializer. - public init(capacity: Int) { - _representation = _Representation(capacity: capacity) - } - - /// Initialize a `Data` with the specified count of zeroed bytes. - /// - /// - parameter count: The number of bytes the data initially contains. - @inlinable // This is @inlinable as a trivial initializer. - public init(count: Int) { - _representation = _Representation(count: count) - } - - /// Initialize an empty `Data`. - @inlinable // This is @inlinable as a trivial initializer. - public init() { - _representation = .empty - } - - - /// Initialize a `Data` without copying the bytes. - /// - /// If the result is mutated and is not a unique reference, then the `Data` will still follow copy-on-write semantics. In this case, the copy will use its own deallocator. Therefore, it is usually best to only use this initializer when you either enforce immutability with `let` or ensure that no other references to the underlying data are formed. - /// - parameter bytes: A pointer to the bytes. - /// - parameter count: The size of the bytes. - /// - parameter deallocator: Specifies the mechanism to free the indicated buffer, or `.none`. - @inlinable // This is @inlinable as a trivial initializer. - public init(bytesNoCopy bytes: UnsafeMutableRawPointer, count: Int, deallocator: Deallocator) { - let whichDeallocator = deallocator._deallocator - if count == 0 { - deallocator._deallocator(bytes, count) - _representation = .empty - } else { - _representation = _Representation(__DataStorage(bytes: bytes, length: count, copy: false, deallocator: whichDeallocator, offset: 0), count: count) - } - } - - /// Initialize a `Data` with the contents of a `URL`. - /// - /// - parameter url: The `URL` to read. - /// - parameter options: Options for the read operation. Default value is `[]`. - /// - throws: An error in the Cocoa domain, if `url` cannot be read. - @inlinable // This is @inlinable as a convenience initializer. - public init(contentsOf url: __shared URL, options: Data.ReadingOptions = []) throws { - let d = try NSData(contentsOf: url, options: ReadingOptions(rawValue: options.rawValue)) - self.init(referencing: d) - } - - /// Initialize a `Data` from a Base-64 encoded String using the given options. - /// - /// Returns nil when the input is not recognized as valid Base-64. - /// - parameter base64String: The string to parse. - /// - parameter options: Encoding options. Default value is `[]`. - @inlinable // This is @inlinable as a convenience initializer. - public init?(base64Encoded base64String: __shared String, options: Data.Base64DecodingOptions = []) { - if let d = NSData(base64Encoded: base64String, options: Base64DecodingOptions(rawValue: options.rawValue)) { - self.init(referencing: d) - } else { - return nil - } - } - - /// Initialize a `Data` from a Base-64, UTF-8 encoded `Data`. - /// - /// Returns nil when the input is not recognized as valid Base-64. - /// - /// - parameter base64Data: Base-64, UTF-8 encoded input data. - /// - parameter options: Decoding options. Default value is `[]`. - @inlinable // This is @inlinable as a convenience initializer. - public init?(base64Encoded base64Data: __shared Data, options: Data.Base64DecodingOptions = []) { - if let d = NSData(base64Encoded: base64Data, options: Base64DecodingOptions(rawValue: options.rawValue)) { - self.init(referencing: d) - } else { - return nil - } - } - - /// Initialize a `Data` by adopting a reference type. - /// - /// You can use this initializer to create a `struct Data` that wraps a `class NSData`. `struct Data` will use the `class NSData` for all operations. Other initializers (including casting using `as Data`) may choose to hold a reference or not, based on a what is the most efficient representation. - /// - /// If the resulting value is mutated, then `Data` will invoke the `mutableCopy()` function on the reference to copy the contents. You may customize the behavior of that function if you wish to return a specialized mutable subclass. - /// - /// - parameter reference: The instance of `NSData` that you wish to wrap. This instance will be copied by `struct Data`. - public init(referencing reference: __shared NSData) { - // This is not marked as inline because _providesConcreteBacking would need to be marked as usable from inline however that is a dynamic lookup in objc contexts. - let length = reference.length - if length == 0 { - _representation = .empty - } else { -#if DEPLOYMENT_RUNTIME_SWIFT - let providesConcreteBacking = reference._providesConcreteBacking() -#else - let providesConcreteBacking = (reference as AnyObject)._providesConcreteBacking?() ?? false -#endif - if providesConcreteBacking { - _representation = _Representation(__DataStorage(immutableReference: reference.copy() as! NSData, offset: 0), count: length) - } else { - _representation = _Representation(__DataStorage(customReference: reference.copy() as! NSData, offset: 0), count: length) - } - } - - } - - // slightly faster paths for common sequences - @inlinable // This is @inlinable as an important generic funnel point, despite being a non-trivial initializer. - public init(_ elements: S) where S.Element == UInt8 { - // If the sequence is already contiguous, access the underlying raw memory directly. - if let contiguous = elements as? ContiguousBytes { - _representation = contiguous.withUnsafeBytes { return _Representation($0) } - return - } - - // The sequence might still be able to provide direct access to typed memory. - // NOTE: It's safe to do this because we're already guarding on S's element as `UInt8`. This would not be safe on arbitrary sequences. - let representation = elements.withContiguousStorageIfAvailable { - _Representation(UnsafeRawBufferPointer($0)) - } - if let representation = representation { - _representation = representation - return - } - - // Copy as much as we can in one shot from the sequence. - let underestimatedCount = elements.underestimatedCount - _representation = _Representation(count: underestimatedCount) - var (iter, endIndex): (S.Iterator, Int) = _representation.withUnsafeMutableBytes { buffer in - let start = buffer.baseAddress!.assumingMemoryBound(to: UInt8.self) - let b = UnsafeMutableBufferPointer(start: start, count: buffer.count) - return elements._copyContents(initializing: b) - } - guard endIndex == _representation.count else { - // We can't trap here. We have to allow an underfilled buffer - // to emulate the previous implementation. - _representation.replaceSubrange(endIndex ..< _representation.endIndex, with: nil, count: 0) - return - } - - // Append the rest byte-wise, buffering through an InlineData. - var buffer = InlineData() - while let element = iter.next() { - buffer.append(byte: element) - if buffer.count == buffer.capacity { - buffer.withUnsafeBytes { _representation.append(contentsOf: $0) } - buffer.count = 0 - } - } - - // If we've still got bytes left in the buffer (i.e. the loop ended before we filled up the buffer and cleared it out), append them. - if buffer.count > 0 { - buffer.withUnsafeBytes { _representation.append(contentsOf: $0) } - buffer.count = 0 - } - } - - @available(swift, introduced: 4.2) - @available(swift, deprecated: 5, message: "use `init(_:)` instead") - public init(bytes elements: S) where S.Iterator.Element == UInt8 { - self.init(elements) - } - - @available(swift, obsoleted: 4.2) - public init(bytes: Array) { - self.init(bytes) - } - - @available(swift, obsoleted: 4.2) - public init(bytes: ArraySlice) { - self.init(bytes) - } - - @inlinable // This is @inlinable as a trivial initializer. - internal init(representation: _Representation) { - _representation = representation - } - - // ----------------------------------- - // MARK: - Properties and Functions - - @inlinable // This is @inlinable as trivially forwarding. - public mutating func reserveCapacity(_ minimumCapacity: Int) { - _representation.reserveCapacity(minimumCapacity) - } - - /// The number of bytes in the data. - @inlinable // This is @inlinable as trivially forwarding. - public var count: Int { - get { - return _representation.count - } - set(newValue) { - precondition(newValue >= 0, "count must not be negative") - _representation.count = newValue - } - } - - @inlinable // This is @inlinable as trivially computable. - public var regions: CollectionOfOne { - return CollectionOfOne(self) - } - - /// Access the bytes in the data. - /// - /// - warning: The byte pointer argument should not be stored and used outside of the lifetime of the call to the closure. - @available(swift, deprecated: 5, message: "use `withUnsafeBytes(_: (UnsafeRawBufferPointer) throws -> R) rethrows -> R` instead") - public func withUnsafeBytes(_ body: (UnsafePointer) throws -> ResultType) rethrows -> ResultType { - return try _representation.withUnsafeBytes { - return try body($0.baseAddress?.assumingMemoryBound(to: ContentType.self) ?? UnsafePointer(bitPattern: 0xBAD0)!) - } - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> ResultType) rethrows -> ResultType { - return try _representation.withUnsafeBytes(body) - } - - /// Mutate the bytes in the data. - /// - /// This function assumes that you are mutating the contents. - /// - warning: The byte pointer argument should not be stored and used outside of the lifetime of the call to the closure. - @available(swift, deprecated: 5, message: "use `withUnsafeMutableBytes(_: (UnsafeMutableRawBufferPointer) throws -> R) rethrows -> R` instead") - public mutating func withUnsafeMutableBytes(_ body: (UnsafeMutablePointer) throws -> ResultType) rethrows -> ResultType { - return try _representation.withUnsafeMutableBytes { - return try body($0.baseAddress?.assumingMemoryBound(to: ContentType.self) ?? UnsafeMutablePointer(bitPattern: 0xBAD0)!) - } - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - public mutating func withUnsafeMutableBytes(_ body: (UnsafeMutableRawBufferPointer) throws -> ResultType) rethrows -> ResultType { - return try _representation.withUnsafeMutableBytes(body) - } - - // MARK: - - // MARK: Copy Bytes - - /// Copy the contents of the data to a pointer. - /// - /// - parameter pointer: A pointer to the buffer you wish to copy the bytes into. - /// - parameter count: The number of bytes to copy. - /// - warning: This method does not verify that the contents at pointer have enough space to hold `count` bytes. - @inlinable // This is @inlinable as trivially forwarding. - public func copyBytes(to pointer: UnsafeMutablePointer, count: Int) { - precondition(count >= 0, "count of bytes to copy must not be negative") - if count == 0 { return } - _copyBytesHelper(to: UnsafeMutableRawPointer(pointer), from: startIndex..<(startIndex + count)) - } - - @inlinable // This is @inlinable as trivially forwarding. - internal func _copyBytesHelper(to pointer: UnsafeMutableRawPointer, from range: Range) { - if range.isEmpty { return } - _representation.copyBytes(to: pointer, from: range) - } - - /// Copy a subset of the contents of the data to a pointer. - /// - /// - parameter pointer: A pointer to the buffer you wish to copy the bytes into. - /// - parameter range: The range in the `Data` to copy. - /// - warning: This method does not verify that the contents at pointer have enough space to hold the required number of bytes. - @inlinable // This is @inlinable as trivially forwarding. - public func copyBytes(to pointer: UnsafeMutablePointer, from range: Range) { - _copyBytesHelper(to: pointer, from: range) - } - - // Copy the contents of the data into a buffer. - /// - /// This function copies the bytes in `range` from the data into the buffer. If the count of the `range` is greater than `MemoryLayout.stride * buffer.count` then the first N bytes will be copied into the buffer. - /// - precondition: The range must be within the bounds of the data. Otherwise `fatalError` is called. - /// - parameter buffer: A buffer to copy the data into. - /// - parameter range: A range in the data to copy into the buffer. If the range is empty, this function will return 0 without copying anything. If the range is nil, as much data as will fit into `buffer` is copied. - /// - returns: Number of bytes copied into the destination buffer. - @inlinable // This is @inlinable as generic and reasonably small. - public func copyBytes(to buffer: UnsafeMutableBufferPointer, from range: Range? = nil) -> Int { - let cnt = count - guard cnt > 0 else { return 0 } - - let copyRange : Range - if let r = range { - guard !r.isEmpty else { return 0 } - copyRange = r.lowerBound..<(r.lowerBound + Swift.min(buffer.count * MemoryLayout.stride, r.upperBound - r.lowerBound)) - } else { - copyRange = 0...stride, cnt) - } - - guard !copyRange.isEmpty else { return 0 } - - _copyBytesHelper(to: buffer.baseAddress!, from: copyRange) - return copyRange.upperBound - copyRange.lowerBound - } - - // MARK: - -#if !DEPLOYMENT_RUNTIME_SWIFT - private func _shouldUseNonAtomicWriteReimplementation(options: Data.WritingOptions = []) -> Bool { - - // Avoid a crash that happens on OS X 10.11.x and iOS 9.x or before when writing a bridged Data non-atomically with Foundation's standard write() implementation. - if !options.contains(.atomic) { - #if os(macOS) - return NSFoundationVersionNumber <= Double(NSFoundationVersionNumber10_11_Max) - #else - return NSFoundationVersionNumber <= Double(NSFoundationVersionNumber_iOS_9_x_Max) - #endif - } else { - return false - } - } -#endif - - /// Write the contents of the `Data` to a location. - /// - /// - parameter url: The location to write the data into. - /// - parameter options: Options for writing the data. Default value is `[]`. - /// - throws: An error in the Cocoa domain, if there is an error writing to the `URL`. - public func write(to url: URL, options: Data.WritingOptions = []) throws { - // this should not be marked as inline since in objc contexts we correct atomicity via _shouldUseNonAtomicWriteReimplementation - try _representation.withInteriorPointerReference { -#if DEPLOYMENT_RUNTIME_SWIFT - try $0.write(to: url, options: WritingOptions(rawValue: options.rawValue)) -#else - if _shouldUseNonAtomicWriteReimplementation(options: options) { - var error: NSError? = nil - guard __NSDataWriteToURL($0, url, options, &error) else { throw error! } - } else { - try $0.write(to: url, options: options) - } -#endif - } - } - - // MARK: - - - /// Find the given `Data` in the content of this `Data`. - /// - /// - parameter dataToFind: The data to be searched for. - /// - parameter options: Options for the search. Default value is `[]`. - /// - parameter range: The range of this data in which to perform the search. Default value is `nil`, which means the entire content of this data. - /// - returns: A `Range` specifying the location of the found data, or nil if a match could not be found. - /// - precondition: `range` must be in the bounds of the Data. - public func range(of dataToFind: Data, options: Data.SearchOptions = [], in range: Range? = nil) -> Range? { - let nsRange : NSRange - if let r = range { - nsRange = NSRange(location: r.lowerBound - startIndex, length: r.upperBound - r.lowerBound) - } else { - nsRange = NSRange(location: 0, length: count) - } - let result = _representation.withInteriorPointerReference { - $0.range(of: dataToFind, options: options, in: nsRange) - } - if result.location == NSNotFound { - return nil - } - return (result.location + startIndex)..<((result.location + startIndex) + result.length) - } - - /// Enumerate the contents of the data. - /// - /// In some cases, (for example, a `Data` backed by a `dispatch_data_t`, the bytes may be stored discontiguously. In those cases, this function invokes the closure for each contiguous region of bytes. - /// - parameter block: The closure to invoke for each region of data. You may stop the enumeration by setting the `stop` parameter to `true`. - @available(swift, deprecated: 5, message: "use `regions` or `for-in` instead") - public func enumerateBytes(_ block: (_ buffer: UnsafeBufferPointer, _ byteIndex: Index, _ stop: inout Bool) -> Void) { - _representation.enumerateBytes(block) - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - internal mutating func _append(_ buffer : UnsafeBufferPointer) { - if buffer.isEmpty { return } - _representation.append(contentsOf: UnsafeRawBufferPointer(buffer)) - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - public mutating func append(_ bytes: UnsafePointer, count: Int) { - if count == 0 { return } - _append(UnsafeBufferPointer(start: bytes, count: count)) - } - - public mutating func append(_ other: Data) { - guard !other.isEmpty else { return } - other.withUnsafeBytes { (buffer: UnsafeRawBufferPointer) in - _representation.append(contentsOf: buffer) - } - } - - /// Append a buffer of bytes to the data. - /// - /// - parameter buffer: The buffer of bytes to append. The size is calculated from `SourceType` and `buffer.count`. - @inlinable // This is @inlinable as a generic, trivially forwarding function. - public mutating func append(_ buffer : UnsafeBufferPointer) { - _append(buffer) - } - - @inlinable // This is @inlinable as trivially forwarding. - public mutating func append(contentsOf bytes: [UInt8]) { - bytes.withUnsafeBufferPointer { (buffer: UnsafeBufferPointer) -> Void in - _append(buffer) - } - } - - @inlinable // This is @inlinable as an important generic funnel point, despite being non-trivial. - public mutating func append(contentsOf elements: S) where S.Element == Element { - // If the sequence is already contiguous, access the underlying raw memory directly. - if let contiguous = elements as? ContiguousBytes { - contiguous.withUnsafeBytes { - _representation.append(contentsOf: $0) - } - - return - } - - // The sequence might still be able to provide direct access to typed memory. - // NOTE: It's safe to do this because we're already guarding on S's element as `UInt8`. This would not be safe on arbitrary sequences. - let appended: Void? = elements.withContiguousStorageIfAvailable { - _representation.append(contentsOf: UnsafeRawBufferPointer($0)) - } - guard appended == nil else { return } - - // The sequence is really not contiguous. - // Copy as much as we can in one shot. - let underestimatedCount = elements.underestimatedCount - let originalCount = _representation.count - resetBytes(in: self.endIndex ..< self.endIndex + underestimatedCount) - var (iter, copiedCount): (S.Iterator, Int) = _representation.withUnsafeMutableBytes { buffer in - assert(buffer.count == originalCount + underestimatedCount) - let start = buffer.baseAddress!.assumingMemoryBound(to: UInt8.self) + originalCount - let b = UnsafeMutableBufferPointer(start: start, count: buffer.count - originalCount) - return elements._copyContents(initializing: b) - } - guard copiedCount == underestimatedCount else { - // We can't trap here. We have to allow an underfilled buffer - // to emulate the previous implementation. - _representation.replaceSubrange(startIndex + originalCount + copiedCount ..< endIndex, with: nil, count: 0) - return - } - - // Append the rest byte-wise, buffering through an InlineData. - var buffer = InlineData() - while let element = iter.next() { - buffer.append(byte: element) - if buffer.count == buffer.capacity { - buffer.withUnsafeBytes { _representation.append(contentsOf: $0) } - buffer.count = 0 - } - } - - // If we've still got bytes left in the buffer (i.e. the loop ended before we filled up the buffer and cleared it out), append them. - if buffer.count > 0 { - buffer.withUnsafeBytes { _representation.append(contentsOf: $0) } - buffer.count = 0 - } - } - - // MARK: - - - /// Set a region of the data to `0`. - /// - /// If `range` exceeds the bounds of the data, then the data is resized to fit. - /// - parameter range: The range in the data to set to `0`. - @inlinable // This is @inlinable as trivially forwarding. - public mutating func resetBytes(in range: Range) { - // it is worth noting that the range here may be out of bounds of the Data itself (which triggers a growth) - precondition(range.lowerBound >= 0, "Ranges must not be negative bounds") - precondition(range.upperBound >= 0, "Ranges must not be negative bounds") - _representation.resetBytes(in: range) - } - - /// Replace a region of bytes in the data with new data. - /// - /// This will resize the data if required, to fit the entire contents of `data`. - /// - /// - precondition: The bounds of `subrange` must be valid indices of the collection. - /// - parameter subrange: The range in the data to replace. If `subrange.lowerBound == data.count && subrange.count == 0` then this operation is an append. - /// - parameter data: The replacement data. - @inlinable // This is @inlinable as trivially forwarding. - public mutating func replaceSubrange(_ subrange: Range, with data: Data) { - data.withUnsafeBytes { (buffer: UnsafeRawBufferPointer) in - _representation.replaceSubrange(subrange, with: buffer.baseAddress, count: buffer.count) - } - } - - /// Replace a region of bytes in the data with new bytes from a buffer. - /// - /// This will resize the data if required, to fit the entire contents of `buffer`. - /// - /// - precondition: The bounds of `subrange` must be valid indices of the collection. - /// - parameter subrange: The range in the data to replace. - /// - parameter buffer: The replacement bytes. - @inlinable // This is @inlinable as a generic, trivially forwarding function. - public mutating func replaceSubrange(_ subrange: Range, with buffer: UnsafeBufferPointer) { - guard !buffer.isEmpty else { return } - replaceSubrange(subrange, with: buffer.baseAddress!, count: buffer.count * MemoryLayout.stride) - } - - /// Replace a region of bytes in the data with new bytes from a collection. - /// - /// This will resize the data if required, to fit the entire contents of `newElements`. - /// - /// - precondition: The bounds of `subrange` must be valid indices of the collection. - /// - parameter subrange: The range in the data to replace. - /// - parameter newElements: The replacement bytes. - @inlinable // This is @inlinable as generic and reasonably small. - public mutating func replaceSubrange(_ subrange: Range, with newElements: ByteCollection) where ByteCollection.Iterator.Element == Data.Iterator.Element { - // If the collection is already contiguous, access the underlying raw memory directly. - if let contiguous = newElements as? ContiguousBytes { - contiguous.withUnsafeBytes { buffer in - _representation.replaceSubrange(subrange, with: buffer.baseAddress, count: buffer.count) - } - return - } - // The collection might still be able to provide direct access to typed memory. - // NOTE: It's safe to do this because we're already guarding on ByteCollection's element as `UInt8`. This would not be safe on arbitrary collections. - let replaced: Void? = newElements.withContiguousStorageIfAvailable { buffer in - _representation.replaceSubrange(subrange, with: buffer.baseAddress, count: buffer.count) - } - guard replaced == nil else { return } - - let totalCount = Int(newElements.count) - _withStackOrHeapBuffer(capacity: totalCount) { buffer in - var (iterator, index) = newElements._copyContents(initializing: buffer) - precondition(index == buffer.endIndex, "Collection has less elements than its count") - precondition(iterator.next() == nil, "Collection has more elements than its count") - _representation.replaceSubrange(subrange, with: buffer.baseAddress, count: totalCount) - } - } - - @inlinable // This is @inlinable as trivially forwarding. - public mutating func replaceSubrange(_ subrange: Range, with bytes: UnsafeRawPointer, count cnt: Int) { - _representation.replaceSubrange(subrange, with: bytes, count: cnt) - } - - /// Return a new copy of the data in a specified range. - /// - /// - parameter range: The range to copy. - public func subdata(in range: Range) -> Data { - if isEmpty || range.upperBound - range.lowerBound == 0 { - return Data() - } - let slice = self[range] - - return slice.withUnsafeBytes { (buffer: UnsafeRawBufferPointer) -> Data in - return Data(bytes: buffer.baseAddress!, count: buffer.count) - } - } - - // MARK: - - // - - /// Returns a Base-64 encoded string. - /// - /// - parameter options: The options to use for the encoding. Default value is `[]`. - /// - returns: The Base-64 encoded string. - @inlinable // This is @inlinable as trivially forwarding. - public func base64EncodedString(options: Data.Base64EncodingOptions = []) -> String { - return _representation.withInteriorPointerReference { - return $0.base64EncodedString(options: options) - } - } - - /// Returns a Base-64 encoded `Data`. - /// - /// - parameter options: The options to use for the encoding. Default value is `[]`. - /// - returns: The Base-64 encoded data. - @inlinable // This is @inlinable as trivially forwarding. - public func base64EncodedData(options: Data.Base64EncodingOptions = []) -> Data { - return _representation.withInteriorPointerReference { - return $0.base64EncodedData(options: options) - } - } - - // MARK: - - // - - /// The hash value for the data. - @inline(never) // This is not inlinable as emission into clients could cause cross-module inconsistencies if they are not all recompiled together. - public func hash(into hasher: inout Hasher) { - _representation.hash(into: &hasher) - } - - public func advanced(by amount: Int) -> Data { - let length = count - amount - precondition(length > 0) - return withUnsafeBytes { (ptr: UnsafeRawBufferPointer) -> Data in - return Data(bytes: ptr.baseAddress!.advanced(by: amount), count: length) - } - } - - // MARK: - - - // MARK: - - // MARK: Index and Subscript - - /// Sets or returns the byte at the specified index. - @inlinable // This is @inlinable as trivially forwarding. - public subscript(index: Index) -> UInt8 { - get { - return _representation[index] - } - set(newValue) { - _representation[index] = newValue - } - } - - @inlinable // This is @inlinable as trivially forwarding. - public subscript(bounds: Range) -> Data { - get { - return _representation[bounds] - } - set { - replaceSubrange(bounds, with: newValue) - } - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - public subscript(_ rangeExpression: R) -> Data - where R.Bound: FixedWidthInteger { - get { - let lower = R.Bound(startIndex) - let upper = R.Bound(endIndex) - let range = rangeExpression.relative(to: lower.. = start.. = start.. Index { - return i - 1 - } - - @inlinable // This is @inlinable as trivially computable. - public func index(after i: Index) -> Index { - return i + 1 - } - - @inlinable // This is @inlinable as trivially computable. - public var indices: Range { - get { - return startIndex..) -> (Iterator, UnsafeMutableBufferPointer.Index) { - guard !isEmpty else { return (makeIterator(), buffer.startIndex) } - let cnt = Swift.min(count, buffer.count) - - withUnsafeBytes { (bytes: UnsafeRawBufferPointer) in - _ = memcpy(UnsafeMutableRawPointer(buffer.baseAddress), bytes.baseAddress, cnt) - } - - return (Iterator(self, at: startIndex + cnt), buffer.index(buffer.startIndex, offsetBy: cnt)) - } - - /// An iterator over the contents of the data. - /// - /// The iterator will increment byte-by-byte. - @inlinable // This is @inlinable as trivially computable. - public func makeIterator() -> Data.Iterator { - return Iterator(self, at: startIndex) - } - - public struct Iterator : IteratorProtocol { - @usableFromInline - internal typealias Buffer = ( - UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, - UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, - UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, - UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8) - - @usableFromInline internal let _data: Data - @usableFromInline internal var _buffer: Buffer - @usableFromInline internal var _idx: Data.Index - @usableFromInline internal let _endIdx: Data.Index - - @usableFromInline // This is @usableFromInline as a non-trivial initializer. - internal init(_ data: Data, at loc: Data.Index) { - // The let vars prevent this from being marked as @inlinable - _data = data - _buffer = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) - _idx = loc - _endIdx = data.endIndex - - let bufferSize = MemoryLayout.size - Swift.withUnsafeMutableBytes(of: &_buffer) { - let ptr = $0.bindMemory(to: UInt8.self) - let bufferIdx = (loc - data.startIndex) % bufferSize - data.copyBytes(to: ptr, from: (loc - bufferIdx)..<(data.endIndex - (loc - bufferIdx) > bufferSize ? (loc - bufferIdx) + bufferSize : data.endIndex)) - } - } - - public mutating func next() -> UInt8? { - let idx = _idx - let bufferSize = MemoryLayout.size - - guard idx < _endIdx else { return nil } - _idx += 1 - - let bufferIdx = (idx - _data.startIndex) % bufferSize - - - if bufferIdx == 0 { - var buffer = _buffer - Swift.withUnsafeMutableBytes(of: &buffer) { - let ptr = $0.bindMemory(to: UInt8.self) - // populate the buffer - _data.copyBytes(to: ptr, from: idx..<(_endIdx - idx > bufferSize ? idx + bufferSize : _endIdx)) - } - _buffer = buffer - } - - return Swift.withUnsafeMutableBytes(of: &_buffer) { - let ptr = $0.bindMemory(to: UInt8.self) - return ptr[bufferIdx] - } - } - } - - // MARK: - - // - - @available(*, unavailable, renamed: "count") - public var length: Int { - get { fatalError() } - set { fatalError() } - } - - @available(*, unavailable, message: "use withUnsafeBytes instead") - public var bytes: UnsafeRawPointer { fatalError() } - - @available(*, unavailable, message: "use withUnsafeMutableBytes instead") - public var mutableBytes: UnsafeMutableRawPointer { fatalError() } - - /// Returns `true` if the two `Data` arguments are equal. - @inlinable // This is @inlinable as emission into clients is safe -- the concept of equality on Data will not change. - public static func ==(d1 : Data, d2 : Data) -> Bool { - let length1 = d1.count - if length1 != d2.count { - return false - } - if length1 > 0 { - return d1.withUnsafeBytes { (b1: UnsafeRawBufferPointer) in - return d2.withUnsafeBytes { (b2: UnsafeRawBufferPointer) in - return memcmp(b1.baseAddress!, b2.baseAddress!, b2.count) == 0 - } - } - } - return true - } -} - - -extension Data : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - /// A human-readable description for the data. - public var description: String { - return "\(self.count) bytes" - } - - /// A human-readable debug description for the data. - public var debugDescription: String { - return self.description - } - - public var customMirror: Mirror { - let nBytes = self.count - var children: [(label: String?, value: Any)] = [] - children.append((label: "count", value: nBytes)) - - self.withUnsafeBytes { (bytes : UnsafeRawBufferPointer) in - children.append((label: "pointer", value: bytes.baseAddress!)) - } - - // Minimal size data is output as an array - if nBytes < 64 { - children.append((label: "bytes", value: Array(self[startIndex..(_ buffer: UnsafeMutablePointerVoid, length: Int) { } - - @available(*, unavailable, renamed: "copyBytes(to:from:)") - public func getBytes(_ buffer: UnsafeMutablePointerVoid, range: NSRange) { } -} - -/// Provides bridging functionality for struct Data to class NSData and vice-versa. - -extension Data : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSData { - return _representation.bridgedReference() - } - - public static func _forceBridgeFromObjectiveC(_ input: NSData, result: inout Data?) { - // We must copy the input because it might be mutable; just like storing a value type in ObjC - result = Data(referencing: input) - } - - public static func _conditionallyBridgeFromObjectiveC(_ input: NSData, result: inout Data?) -> Bool { - // We must copy the input because it might be mutable; just like storing a value type in ObjC - result = Data(referencing: input) - return true - } - -// @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSData?) -> Data { - guard let src = source else { return Data() } - return Data(referencing: src) - } -} - -extension NSData : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(Data._unconditionallyBridgeFromObjectiveC(self)) - } -} - -extension Data : Codable { - public init(from decoder: Decoder) throws { - var container = try decoder.unkeyedContainer() - - // It's more efficient to pre-allocate the buffer if we can. - if let count = container.count { - self.init(count: count) - - // Loop only until count, not while !container.isAtEnd, in case count is underestimated (this is misbehavior) and we haven't allocated enough space. - // We don't want to write past the end of what we allocated. - for i in 0 ..< count { - let byte = try container.decode(UInt8.self) - self[i] = byte - } - } else { - self.init() - } - - while !container.isAtEnd { - var byte = try container.decode(UInt8.self) - self.append(&byte, count: 1) - } - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.unkeyedContainer() - try withUnsafeBytes { (buffer: UnsafeRawBufferPointer) in - try container.encode(contentsOf: buffer) - } - } -} diff --git a/Darwin/Foundation-swiftoverlay/DataProtocol.swift b/Darwin/Foundation-swiftoverlay/DataProtocol.swift deleted file mode 100644 index 75880eac1d..0000000000 --- a/Darwin/Foundation-swiftoverlay/DataProtocol.swift +++ /dev/null @@ -1,295 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2018 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#if os(macOS) || os(iOS) -import Darwin -#elseif os(Linux) -import Glibc -#endif - -//===--- DataProtocol -----------------------------------------------------===// - -public protocol DataProtocol : RandomAccessCollection where Element == UInt8, SubSequence : DataProtocol { - // FIXME: Remove in favor of opaque type on `regions`. - associatedtype Regions: BidirectionalCollection where Regions.Element : DataProtocol & ContiguousBytes, Regions.Element.SubSequence : ContiguousBytes - - /// A `BidirectionalCollection` of `DataProtocol` elements which compose a - /// discontiguous buffer of memory. Each region is a contiguous buffer of - /// bytes. - /// - /// The sum of the lengths of the associated regions must equal `self.count` - /// (such that iterating `regions` and iterating `self` produces the same - /// sequence of indices in the same number of index advancements). - var regions: Regions { get } - - /// Returns the first found range of the given data buffer. - /// - /// A default implementation is given in terms of `self.regions`. - func firstRange(of: D, in: R) -> Range? where R.Bound == Index - - /// Returns the last found range of the given data buffer. - /// - /// A default implementation is given in terms of `self.regions`. - func lastRange(of: D, in: R) -> Range? where R.Bound == Index - - /// Copies `count` bytes from the start of the buffer to the destination - /// buffer. - /// - /// A default implementation is given in terms of `copyBytes(to:from:)`. - @discardableResult - func copyBytes(to: UnsafeMutableRawBufferPointer, count: Int) -> Int - - /// Copies `count` bytes from the start of the buffer to the destination - /// buffer. - /// - /// A default implementation is given in terms of `copyBytes(to:from:)`. - @discardableResult - func copyBytes(to: UnsafeMutableBufferPointer, count: Int) -> Int - - /// Copies the bytes from the given range to the destination buffer. - /// - /// A default implementation is given in terms of `self.regions`. - @discardableResult - func copyBytes(to: UnsafeMutableRawBufferPointer, from: R) -> Int where R.Bound == Index - - /// Copies the bytes from the given range to the destination buffer. - /// - /// A default implementation is given in terms of `self.regions`. - @discardableResult - func copyBytes(to: UnsafeMutableBufferPointer, from: R) -> Int where R.Bound == Index -} - -//===--- MutableDataProtocol ----------------------------------------------===// - -public protocol MutableDataProtocol : DataProtocol, MutableCollection, RangeReplaceableCollection { - /// Replaces the contents of the buffer at the given range with zeroes. - /// - /// A default implementation is given in terms of - /// `replaceSubrange(_:with:)`. - mutating func resetBytes(in range: R) where R.Bound == Index -} - -//===--- DataProtocol Extensions ------------------------------------------===// - -extension DataProtocol { - public func firstRange(of data: D) -> Range? { - return self.firstRange(of: data, in: self.startIndex ..< self.endIndex) - } - - public func lastRange(of data: D) -> Range? { - return self.lastRange(of: data, in: self.startIndex ..< self.endIndex) - } - - @discardableResult - public func copyBytes(to ptr: UnsafeMutableRawBufferPointer) -> Int { - return copyBytes(to: ptr, from: self.startIndex ..< self.endIndex) - } - - @discardableResult - public func copyBytes(to ptr: UnsafeMutableBufferPointer) -> Int { - return copyBytes(to: ptr, from: self.startIndex ..< self.endIndex) - } - - @discardableResult - public func copyBytes(to ptr: UnsafeMutableRawBufferPointer, count: Int) -> Int { - return copyBytes(to: ptr, from: self.startIndex ..< self.index(self.startIndex, offsetBy: count)) - } - - @discardableResult - public func copyBytes(to ptr: UnsafeMutableBufferPointer, count: Int) -> Int { - return copyBytes(to: ptr, from: self.startIndex ..< self.index(self.startIndex, offsetBy: count)) - } - - @discardableResult - public func copyBytes(to ptr: UnsafeMutableRawBufferPointer, from range: R) -> Int where R.Bound == Index { - precondition(ptr.baseAddress != nil) - - let concreteRange = range.relative(to: self) - let slice = self[concreteRange] - - // The type isn't contiguous, so we need to copy one region at a time. - var offset = 0 - let rangeCount = distance(from: concreteRange.lowerBound, to: concreteRange.upperBound) - var amountToCopy = Swift.min(ptr.count, rangeCount) - for region in slice.regions { - guard amountToCopy > 0 else { - break - } - - region.withUnsafeBytes { buffer in - let offsetPtr = UnsafeMutableRawBufferPointer(rebasing: ptr[offset...]) - let buf = UnsafeRawBufferPointer(start: buffer.baseAddress, count: Swift.min(buffer.count, amountToCopy)) - offsetPtr.copyMemory(from: buf) - offset += buf.count - amountToCopy -= buf.count - } - } - - return offset - } - - @discardableResult - public func copyBytes(to ptr: UnsafeMutableBufferPointer, from range: R) -> Int where R.Bound == Index { - return self.copyBytes(to: UnsafeMutableRawBufferPointer(start: ptr.baseAddress, count: ptr.count * MemoryLayout.stride), from: range) - } - - private func matches(_ data: D, from index: Index) -> Bool { - var haystackIndex = index - var needleIndex = data.startIndex - - while true { - guard self[haystackIndex] == data[needleIndex] else { return false } - - haystackIndex = self.index(after: haystackIndex) - needleIndex = data.index(after: needleIndex) - if needleIndex == data.endIndex { - // i.e. needle is found. - return true - } else if haystackIndex == endIndex { - return false - } - } - } - - public func firstRange(of data: D, in range: R) -> Range? where R.Bound == Index { - let r = range.relative(to: self) - let length = data.count - - if length == 0 || length > distance(from: r.lowerBound, to: r.upperBound) { - return nil - } - - var position = r.lowerBound - while position < r.upperBound && distance(from: position, to: r.upperBound) >= length { - if matches(data, from: position) { - return position..(of data: D, in range: R) -> Range? where R.Bound == Index { - let r = range.relative(to: self) - let length = data.count - - if length == 0 || length > distance(from: r.lowerBound, to: r.upperBound) { - return nil - } - - var position = index(r.upperBound, offsetBy: -length) - while position >= r.lowerBound { - if matches(data, from: position) { - return position..(to ptr: UnsafeMutableBufferPointer, from range: R) where R.Bound == Index { - precondition(ptr.baseAddress != nil) - - let concreteRange = range.relative(to: self) - withUnsafeBytes { fullBuffer in - let adv = distance(from: startIndex, to: concreteRange.lowerBound) - let delta = distance(from: concreteRange.lowerBound, to: concreteRange.upperBound) - memcpy(ptr.baseAddress!, fullBuffer.baseAddress?.advanced(by: adv), delta) - } - } -} - -//===--- MutableDataProtocol Extensions -----------------------------------===// - -extension MutableDataProtocol { - public mutating func resetBytes(in range: R) where R.Bound == Index { - let r = range.relative(to: self) - let count = distance(from: r.lowerBound, to: r.upperBound) - replaceSubrange(r, with: repeatElement(UInt8(0), count: count)) - } -} - -//===--- DataProtocol Conditional Conformances ----------------------------===// - -extension Slice : DataProtocol where Base : DataProtocol { - public typealias Regions = [Base.Regions.Element.SubSequence] - - public var regions: [Base.Regions.Element.SubSequence] { - let sliceLowerBound = startIndex - let sliceUpperBound = endIndex - var regionUpperBound = base.startIndex - - return base.regions.compactMap { (region) -> Base.Regions.Element.SubSequence? in - let regionLowerBound = regionUpperBound - regionUpperBound = base.index(regionUpperBound, offsetBy: region.count) - - /* - [------ Region ------] - [--- Slice ---] => - - OR - - [------ Region ------] - <= [--- Slice ---] - */ - if sliceLowerBound >= regionLowerBound && sliceUpperBound <= regionUpperBound { - let regionRelativeSliceLowerBound = region.index(region.startIndex, offsetBy: base.distance(from: regionLowerBound, to: sliceLowerBound)) - let regionRelativeSliceUpperBound = region.index(region.startIndex, offsetBy: base.distance(from: regionLowerBound, to: sliceUpperBound)) - return region[regionRelativeSliceLowerBound.. - [------ Slice ------] - - OR - - <= [--- Region ---] - [------ Slice ------] - */ - if regionLowerBound >= sliceLowerBound && regionUpperBound <= sliceUpperBound { - return region[region.startIndex..= regionLowerBound && sliceLowerBound <= regionUpperBound { - let regionRelativeSliceLowerBound = region.index(region.startIndex, offsetBy: base.distance(from: regionLowerBound, to: sliceLowerBound)) - return region[regionRelativeSliceLowerBound..= sliceLowerBound && regionLowerBound <= sliceUpperBound { - let regionRelativeSliceUpperBound = region.index(region.startIndex, offsetBy: base.distance(from: regionLowerBound, to: sliceUpperBound)) - return region[region.startIndex.. -#import - -// Note: This came from SwiftShims/Visibility.h -#define SWIFT_RUNTIME_STDLIB_INTERNAL __attribute__ ((visibility("hidden"))) - -#if TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR -static int __NSFileProtectionClassForOptions(NSUInteger options) { - int result; - switch (options & NSDataWritingFileProtectionMask) { - case NSDataWritingFileProtectionComplete: // Class A - result = 1; - break; - case NSDataWritingFileProtectionCompleteUnlessOpen: // Class B - result = 2; - break; - case NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication: // Class C - result = 3; - break; - case NSDataWritingFileProtectionNone: // Class D - result = 4; - break; - default: - result = 0; - break; - } - return result; -} -#endif - -static int32_t _NSOpenFileDescriptor(const char *path, NSInteger flags, int protectionClass, NSInteger mode) { - int fd = -1; - if (protectionClass != 0) { - fd = open_dprotected_np(path, flags, protectionClass, 0, mode); - } else { - fd = open(path, flags, mode); - } - return fd; -} - -static NSInteger _NSWriteToFileDescriptor(int32_t fd, const void *buffer, NSUInteger length) { - size_t preferredChunkSize = (size_t)length; - size_t numBytesRemaining = (size_t)length; - while (numBytesRemaining > 0UL) { - size_t numBytesRequested = (preferredChunkSize < (1LL << 31)) ? preferredChunkSize : ((1LL << 31) - 1); - if (numBytesRequested > numBytesRemaining) numBytesRequested = numBytesRemaining; - ssize_t numBytesWritten; - do { - numBytesWritten = write(fd, buffer, numBytesRequested); - } while (numBytesWritten < 0L && errno == EINTR); - if (numBytesWritten < 0L) { - return -1; - } else if (numBytesWritten == 0L) { - break; - } else { - numBytesRemaining -= numBytesWritten; - if ((size_t)numBytesWritten < numBytesRequested) break; - buffer = (char *)buffer + numBytesWritten; - } - } - return length - numBytesRemaining; -} - -static NSError *_NSErrorWithFilePath(NSInteger code, id pathOrURL) { - NSString *key = [pathOrURL isKindOfClass:[NSURL self]] ? NSURLErrorKey : NSFilePathErrorKey; - return [NSError errorWithDomain:NSCocoaErrorDomain code:code userInfo:[NSDictionary dictionaryWithObjectsAndKeys:pathOrURL, key, nil]]; -} - -static NSError *_NSErrorWithFilePathAndErrno(NSInteger posixErrno, id pathOrURL, BOOL reading) { - NSInteger code; - if (reading) { - switch (posixErrno) { - case EFBIG: code = NSFileReadTooLargeError; break; - case ENOENT: code = NSFileReadNoSuchFileError; break; - case EPERM: // fallthrough - case EACCES: code = NSFileReadNoPermissionError; break; - case ENAMETOOLONG: code = NSFileReadInvalidFileNameError; break; - default: code = NSFileReadUnknownError; break; - } - } else { - switch (posixErrno) { - case ENOENT: code = NSFileNoSuchFileError; break; - case EPERM: // fallthrough - case EACCES: code = NSFileWriteNoPermissionError; break; - case ENAMETOOLONG: code = NSFileWriteInvalidFileNameError; break; -#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED - case EDQUOT: -#endif - case ENOSPC: code = NSFileWriteOutOfSpaceError; break; - case EROFS: code = NSFileWriteVolumeReadOnlyError; break; - case EEXIST: code = NSFileWriteFileExistsError; break; - default: code = NSFileWriteUnknownError; break; - } - } - - NSString *key = [pathOrURL isKindOfClass:[NSURL self]] ? NSURLErrorKey : NSFilePathErrorKey; - NSDictionary *userInfo = [[NSDictionary alloc] initWithObjectsAndKeys:pathOrURL, key, [NSError errorWithDomain:NSPOSIXErrorDomain code:posixErrno userInfo:nil], NSUnderlyingErrorKey, nil]; - NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain code:code userInfo:userInfo]; - [userInfo release]; - return error; -} - -SWIFT_RUNTIME_STDLIB_INTERNAL -BOOL __NSDataWriteToURL(NSData * _Nonnull data NS_RELEASES_ARGUMENT, NSURL * _Nonnull url NS_RELEASES_ARGUMENT, NSDataWritingOptions writingOptions, NSError **errorPtr) { - assert((writingOptions & NSDataWritingAtomic) == 0); - - NSString *path = url.path; - char cpath[1026]; - - if (![path getFileSystemRepresentation:cpath maxLength:1024]) { - if (errorPtr) *errorPtr = _NSErrorWithFilePath(NSFileWriteInvalidFileNameError, path); - return NO; - } - - int protectionClass = 0; -#if TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR - protectionClass = __NSFileProtectionClassForOptions(writingOptions); -#endif - - int flags = O_WRONLY|O_CREAT|O_TRUNC; - if (writingOptions & NSDataWritingWithoutOverwriting) { - flags |= O_EXCL; - } - int32_t fd = _NSOpenFileDescriptor(cpath, flags, protectionClass, 0666); - if (fd < 0) { - if (errorPtr) *errorPtr = _NSErrorWithFilePathAndErrno(errno, path, NO); - return NO; - } - - __block BOOL writingFailed = NO; - __block int32_t saveerr = 0; - NSUInteger dataLength = [data length]; - [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) { - NSUInteger length = byteRange.length; - BOOL success = NO; - if (length > 0) { - NSInteger writtenLength = _NSWriteToFileDescriptor(fd, bytes, length); - success = writtenLength > 0 && (NSUInteger)writtenLength == length; - } else { - success = YES; // Writing nothing always succeeds. - } - if (!success) { - saveerr = errno; - writingFailed = YES; - *stop = YES; - } - }]; - if (dataLength && !writingFailed) { - if (fsync(fd) < 0) { - writingFailed = YES; - saveerr = errno; - } - } - if (writingFailed) { - close(fd); - errno = (saveerr); - if (errorPtr) { - *errorPtr = _NSErrorWithFilePathAndErrno(errno, path, NO); - } - return NO; - } - close(fd); - return YES; -} diff --git a/Darwin/Foundation-swiftoverlay/Date.swift b/Darwin/Foundation-swiftoverlay/Date.swift deleted file mode 100644 index 7bd19b34dd..0000000000 --- a/Darwin/Foundation-swiftoverlay/Date.swift +++ /dev/null @@ -1,297 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -import CoreFoundation -@_implementationOnly import _CoreFoundationOverlayShims - -/** - `Date` represents a single point in time. - - A `Date` is independent of a particular calendar or time zone. To represent a `Date` to a user, you must interpret it in the context of a `Calendar`. -*/ -public struct Date : ReferenceConvertible, Comparable, Equatable, Sendable { - public typealias ReferenceType = NSDate - - fileprivate var _time : TimeInterval - - /// The number of seconds from 1 January 1970 to the reference date, 1 January 2001. - public static let timeIntervalBetween1970AndReferenceDate : TimeInterval = 978307200.0 - - /// The interval between 00:00:00 UTC on 1 January 2001 and the current date and time. - public static var timeIntervalSinceReferenceDate : TimeInterval { - return CFAbsoluteTimeGetCurrent() - } - - /// Returns a `Date` initialized to the current date and time. - public init() { - _time = CFAbsoluteTimeGetCurrent() - } - - /// Returns a `Date` initialized relative to the current date and time by a given number of seconds. - public init(timeIntervalSinceNow: TimeInterval) { - self.init(timeIntervalSinceReferenceDate: timeIntervalSinceNow + CFAbsoluteTimeGetCurrent()) - } - - /// Returns a `Date` initialized relative to 00:00:00 UTC on 1 January 1970 by a given number of seconds. - public init(timeIntervalSince1970: TimeInterval) { - self.init(timeIntervalSinceReferenceDate: timeIntervalSince1970 - Date.timeIntervalBetween1970AndReferenceDate) - } - - /** - Returns a `Date` initialized relative to another given date by a given number of seconds. - - - Parameter timeInterval: The number of seconds to add to `date`. A negative value means the receiver will be earlier than `date`. - - Parameter date: The reference date. - */ - public init(timeInterval: TimeInterval, since date: Date) { - self.init(timeIntervalSinceReferenceDate: date.timeIntervalSinceReferenceDate + timeInterval) - } - - /// Returns a `Date` initialized relative to 00:00:00 UTC on 1 January 2001 by a given number of seconds. - public init(timeIntervalSinceReferenceDate ti: TimeInterval) { - _time = ti - } - - /** - Returns the interval between the date object and 00:00:00 UTC on 1 January 2001. - - This property's value is negative if the date object is earlier than the system's absolute reference date (00:00:00 UTC on 1 January 2001). - */ - public var timeIntervalSinceReferenceDate: TimeInterval { - return _time - } - - /** - Returns the interval between the receiver and another given date. - - - Parameter another: The date with which to compare the receiver. - - - Returns: The interval between the receiver and the `another` parameter. If the receiver is earlier than `anotherDate`, the return value is negative. If `anotherDate` is `nil`, the results are undefined. - - - SeeAlso: `timeIntervalSince1970` - - SeeAlso: `timeIntervalSinceNow` - - SeeAlso: `timeIntervalSinceReferenceDate` - */ - public func timeIntervalSince(_ date: Date) -> TimeInterval { - return self.timeIntervalSinceReferenceDate - date.timeIntervalSinceReferenceDate - } - - /** - The time interval between the date and the current date and time. - - If the date is earlier than the current date and time, this property's value is negative. - - - SeeAlso: `timeIntervalSince(_:)` - - SeeAlso: `timeIntervalSince1970` - - SeeAlso: `timeIntervalSinceReferenceDate` - */ - public var timeIntervalSinceNow: TimeInterval { - return self.timeIntervalSinceReferenceDate - CFAbsoluteTimeGetCurrent() - } - - /** - The interval between the date object and 00:00:00 UTC on 1 January 1970. - - This property's value is negative if the date object is earlier than 00:00:00 UTC on 1 January 1970. - - - SeeAlso: `timeIntervalSince(_:)` - - SeeAlso: `timeIntervalSinceNow` - - SeeAlso: `timeIntervalSinceReferenceDate` - */ - public var timeIntervalSince1970: TimeInterval { - return self.timeIntervalSinceReferenceDate + Date.timeIntervalBetween1970AndReferenceDate - } - - /// Return a new `Date` by adding a `TimeInterval` to this `Date`. - /// - /// - parameter timeInterval: The value to add, in seconds. - /// - warning: This only adjusts an absolute value. If you wish to add calendrical concepts like hours, days, months then you must use a `Calendar`. That will take into account complexities like daylight saving time, months with different numbers of days, and more. - public func addingTimeInterval(_ timeInterval: TimeInterval) -> Date { - return self + timeInterval - } - - /// Add a `TimeInterval` to this `Date`. - /// - /// - parameter timeInterval: The value to add, in seconds. - /// - warning: This only adjusts an absolute value. If you wish to add calendrical concepts like hours, days, months then you must use a `Calendar`. That will take into account complexities like daylight saving time, months with different numbers of days, and more. - public mutating func addTimeInterval(_ timeInterval: TimeInterval) { - self += timeInterval - } - - /** - Creates and returns a Date value representing a date in the distant future. - - The distant future is in terms of centuries. - */ - public static let distantFuture = Date(timeIntervalSinceReferenceDate: 63113904000.0) - - /** - Creates and returns a Date value representing a date in the distant past. - - The distant past is in terms of centuries. - */ - public static let distantPast = Date(timeIntervalSinceReferenceDate: -63114076800.0) - - public func hash(into hasher: inout Hasher) { - hasher.combine(_time) - } - - /// Compare two `Date` values. - public func compare(_ other: Date) -> ComparisonResult { - if _time < other.timeIntervalSinceReferenceDate { - return .orderedAscending - } else if _time > other.timeIntervalSinceReferenceDate { - return .orderedDescending - } else { - return .orderedSame - } - } - - /// Returns true if the two `Date` values represent the same point in time. - public static func ==(lhs: Date, rhs: Date) -> Bool { - return lhs.timeIntervalSinceReferenceDate == rhs.timeIntervalSinceReferenceDate - } - - /// Returns true if the left hand `Date` is earlier in time than the right hand `Date`. - public static func <(lhs: Date, rhs: Date) -> Bool { - return lhs.timeIntervalSinceReferenceDate < rhs.timeIntervalSinceReferenceDate - } - - /// Returns true if the left hand `Date` is later in time than the right hand `Date`. - public static func >(lhs: Date, rhs: Date) -> Bool { - return lhs.timeIntervalSinceReferenceDate > rhs.timeIntervalSinceReferenceDate - } - - /// Returns a `Date` with a specified amount of time added to it. - public static func +(lhs: Date, rhs: TimeInterval) -> Date { - return Date(timeIntervalSinceReferenceDate: lhs.timeIntervalSinceReferenceDate + rhs) - } - - /// Returns a `Date` with a specified amount of time subtracted from it. - public static func -(lhs: Date, rhs: TimeInterval) -> Date { - return Date(timeIntervalSinceReferenceDate: lhs.timeIntervalSinceReferenceDate - rhs) - } - - /// Add a `TimeInterval` to a `Date`. - /// - /// - warning: This only adjusts an absolute value. If you wish to add calendrical concepts like hours, days, months then you must use a `Calendar`. That will take into account complexities like daylight saving time, months with different numbers of days, and more. - public static func +=(lhs: inout Date, rhs: TimeInterval) { - lhs = lhs + rhs - } - - /// Subtract a `TimeInterval` from a `Date`. - /// - /// - warning: This only adjusts an absolute value. If you wish to add calendrical concepts like hours, days, months then you must use a `Calendar`. That will take into account complexities like daylight saving time, months with different numbers of days, and more. - public static func -=(lhs: inout Date, rhs: TimeInterval) { - lhs = lhs - rhs - } - -} - -extension Date : CustomDebugStringConvertible, CustomStringConvertible, CustomReflectable { - /** - A string representation of the date object (read-only). - - The representation is useful for debugging only. - - There are a number of options to acquire a formatted string for a date including: date formatters (see - [NSDateFormatter](//apple_ref/occ/cl/NSDateFormatter) and [Data Formatting Guide](//apple_ref/doc/uid/10000029i)), and the `Date` function `description(locale:)`. - */ - public var description: String { - // Defer to NSDate for description - return NSDate(timeIntervalSinceReferenceDate: _time).description - } - - /** - Returns a string representation of the receiver using the given - locale. - - - Parameter locale: A `Locale`. If you pass `nil`, `Date` formats the date in the same way as the `description` property. - - - Returns: A string representation of the `Date`, using the given locale, or if the locale argument is `nil`, in the international format `YYYY-MM-DD HH:MM:SS ±HHMM`, where `±HHMM` represents the time zone offset in hours and minutes from UTC (for example, "`2001-03-24 10:45:32 +0600`"). - */ - public func description(with locale: Locale?) -> String { - return NSDate(timeIntervalSinceReferenceDate: _time).description(with: locale) - } - - public var debugDescription: String { - return description - } - - public var customMirror: Mirror { - let c: [(label: String?, value: Any)] = [ - ("timeIntervalSinceReferenceDate", timeIntervalSinceReferenceDate) - ] - return Mirror(self, children: c, displayStyle: Mirror.DisplayStyle.struct) - } -} - -extension Date : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSDate { - return NSDate(timeIntervalSinceReferenceDate: _time) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSDate, result: inout Date?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSDate, result: inout Date?) -> Bool { - result = Date(timeIntervalSinceReferenceDate: x.timeIntervalSinceReferenceDate) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSDate?) -> Date { - var result: Date? - _forceBridgeFromObjectiveC(source!, result: &result) - return result! - } -} - -extension NSDate : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as Date) - } -} - -extension Date : _CustomPlaygroundQuickLookable { - var summary: String { - let df = DateFormatter() - df.dateStyle = .medium - df.timeStyle = .short - return df.string(from: self) - } - - @available(*, deprecated, message: "Date.customPlaygroundQuickLook will be removed in a future Swift version") - public var customPlaygroundQuickLook: PlaygroundQuickLook { - return .text(summary) - } -} - -extension Date : Codable { - public init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - let timestamp = try container.decode(Double.self) - self.init(timeIntervalSinceReferenceDate: timestamp) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(self.timeIntervalSinceReferenceDate) - } -} diff --git a/Darwin/Foundation-swiftoverlay/DateComponents.swift b/Darwin/Foundation-swiftoverlay/DateComponents.swift deleted file mode 100644 index aef287d086..0000000000 --- a/Darwin/Foundation-swiftoverlay/DateComponents.swift +++ /dev/null @@ -1,429 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -/** - `DateComponents` encapsulates the components of a date in an extendable, structured manner. - - It is used to specify a date by providing the temporal components that make up a date and time in a particular calendar: hour, minutes, seconds, day, month, year, and so on. It can also be used to specify a duration of time, for example, 5 hours and 16 minutes. A `DateComponents` is not required to define all the component fields. - - When a new instance of `DateComponents` is created, the date components are set to `nil`. -*/ -public struct DateComponents : ReferenceConvertible, Hashable, Equatable, @unchecked Sendable, _MutableBoxing { - public typealias ReferenceType = NSDateComponents - - internal var _handle: _MutableHandle - - /// Initialize a `DateComponents`, optionally specifying values for its fields. - public init(calendar: Calendar? = nil, - timeZone: TimeZone? = nil, - era: Int? = nil, - year: Int? = nil, - month: Int? = nil, - day: Int? = nil, - hour: Int? = nil, - minute: Int? = nil, - second: Int? = nil, - nanosecond: Int? = nil, - weekday: Int? = nil, - weekdayOrdinal: Int? = nil, - quarter: Int? = nil, - weekOfMonth: Int? = nil, - weekOfYear: Int? = nil, - yearForWeekOfYear: Int? = nil) { - _handle = _MutableHandle(adoptingReference: NSDateComponents()) - if let _calendar = calendar { self.calendar = _calendar } - if let _timeZone = timeZone { self.timeZone = _timeZone } - if let _era = era { self.era = _era } - if let _year = year { self.year = _year } - if let _month = month { self.month = _month } - if let _day = day { self.day = _day } - if let _hour = hour { self.hour = _hour } - if let _minute = minute { self.minute = _minute } - if let _second = second { self.second = _second } - if let _nanosecond = nanosecond { self.nanosecond = _nanosecond } - if let _weekday = weekday { self.weekday = _weekday } - if let _weekdayOrdinal = weekdayOrdinal { self.weekdayOrdinal = _weekdayOrdinal } - if let _quarter = quarter { self.quarter = _quarter } - if let _weekOfMonth = weekOfMonth { self.weekOfMonth = _weekOfMonth } - if let _weekOfYear = weekOfYear { self.weekOfYear = _weekOfYear } - if let _yearForWeekOfYear = yearForWeekOfYear { self.yearForWeekOfYear = _yearForWeekOfYear } - } - - - // MARK: - Properties - - /// Translate from the NSDateComponentUndefined value into a proper Swift optional - private func _getter(_ x : Int) -> Int? { return x == NSDateComponentUndefined ? nil : x } - - /// Translate from the proper Swift optional value into an NSDateComponentUndefined - private static func _setter(_ x : Int?) -> Int { if let xx = x { return xx } else { return NSDateComponentUndefined } } - - /// The `Calendar` used to interpret the other values in this structure. - /// - /// - note: API which uses `DateComponents` may have different behavior if this value is `nil`. For example, assuming the current calendar or ignoring certain values. - public var calendar: Calendar? { - get { return _handle.map { $0.calendar } } - set { _applyMutation { $0.calendar = newValue } } - } - - /// A time zone. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var timeZone: TimeZone? { - get { return _handle.map { $0.timeZone } } - set { _applyMutation { $0.timeZone = newValue } } - } - - /// An era or count of eras. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var era: Int? { - get { return _handle.map { _getter($0.era) } } - set { _applyMutation { $0.era = DateComponents._setter(newValue) } } - } - - /// A year or count of years. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var year: Int? { - get { return _handle.map { _getter($0.year) } } - set { _applyMutation { $0.year = DateComponents._setter(newValue) } } - } - - /// A month or count of months. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var month: Int? { - get { return _handle.map { _getter($0.month) } } - set { _applyMutation { $0.month = DateComponents._setter(newValue) } } - } - - /// A day or count of days. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var day: Int? { - get { return _handle.map { _getter($0.day) } } - set { _applyMutation { $0.day = DateComponents._setter(newValue) } } - } - - /// An hour or count of hours. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var hour: Int? { - get { return _handle.map { _getter($0.hour) } } - set { _applyMutation { $0.hour = DateComponents._setter(newValue) } } - } - - /// A minute or count of minutes. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var minute: Int? { - get { return _handle.map { _getter($0.minute) } } - set { _applyMutation { $0.minute = DateComponents._setter(newValue) } } - } - - /// A second or count of seconds. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var second: Int? { - get { return _handle.map { _getter($0.second) } } - set { _applyMutation { $0.second = DateComponents._setter(newValue) } } - } - - /// A nanosecond or count of nanoseconds. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var nanosecond: Int? { - get { return _handle.map { _getter($0.nanosecond) } } - set { _applyMutation { $0.nanosecond = DateComponents._setter(newValue) } } - } - - /// A weekday or count of weekdays. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var weekday: Int? { - get { return _handle.map { _getter($0.weekday) } } - set { _applyMutation { $0.weekday = DateComponents._setter(newValue) } } - } - - /// A weekday ordinal or count of weekday ordinals. - /// Weekday ordinal units represent the position of the weekday within the next larger calendar unit, such as the month. For example, 2 is the weekday ordinal unit for the second Friday of the month./// - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var weekdayOrdinal: Int? { - get { return _handle.map { _getter($0.weekdayOrdinal) } } - set { _applyMutation { $0.weekdayOrdinal = DateComponents._setter(newValue) } } - } - - /// A quarter or count of quarters. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var quarter: Int? { - get { return _handle.map { _getter($0.quarter) } } - set { _applyMutation { $0.quarter = DateComponents._setter(newValue) } } - } - - /// A week of the month or a count of weeks of the month. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var weekOfMonth: Int? { - get { return _handle.map { _getter($0.weekOfMonth) } } - set { _applyMutation { $0.weekOfMonth = DateComponents._setter(newValue) } } - } - - /// A week of the year or count of the weeks of the year. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var weekOfYear: Int? { - get { return _handle.map { _getter($0.weekOfYear) } } - set { _applyMutation { $0.weekOfYear = DateComponents._setter(newValue) } } - } - - /// The ISO 8601 week-numbering year of the receiver. - /// - /// The Gregorian calendar defines a week to have 7 days, and a year to have 365 days, or 366 in a leap year. However, neither 365 or 366 divide evenly into a 7 day week, so it is often the case that the last week of a year ends on a day in the next year, and the first week of a year begins in the preceding year. To reconcile this, ISO 8601 defines a week-numbering year, consisting of either 52 or 53 full weeks (364 or 371 days), such that the first week of a year is designated to be the week containing the first Thursday of the year. - /// - /// You can use the yearForWeekOfYear property with the weekOfYear and weekday properties to get the date corresponding to a particular weekday of a given week of a year. For example, the 6th day of the 53rd week of the year 2005 (ISO 2005-W53-6) corresponds to Sat 1 January 2005 on the Gregorian calendar. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var yearForWeekOfYear: Int? { - get { return _handle.map { _getter($0.yearForWeekOfYear) } } - set { _applyMutation { $0.yearForWeekOfYear = DateComponents._setter(newValue) } } - } - - /// Set to true if these components represent a leap month. - public var isLeapMonth: Bool? { - get { return _handle.map { $0.isLeapMonth } } - set { - _applyMutation { - // Technically, the underlying class does not support setting isLeapMonth to nil, but it could - so we leave the API consistent. - if let b = newValue { - $0.isLeapMonth = b - } else { - $0.isLeapMonth = false - } - } - } - } - - /// Returns a `Date` calculated from the current components using the `calendar` property. - public var date: Date? { - return _handle.map { $0.date } - } - - // MARK: - Generic Setter/Getters - - /// Set the value of one of the properties, using an enumeration value instead of a property name. - /// - /// The calendar and timeZone and isLeapMonth properties cannot be set by this method. - @available(macOS 10.9, iOS 8.0, *) - public mutating func setValue(_ value: Int?, for component: Calendar.Component) { - _applyMutation { - $0.setValue(DateComponents._setter(value), forComponent: Calendar._toCalendarUnit([component])) - } - } - - /// Returns the value of one of the properties, using an enumeration value instead of a property name. - /// - /// The calendar and timeZone and isLeapMonth property values cannot be retrieved by this method. - @available(macOS 10.9, iOS 8.0, *) - public func value(for component: Calendar.Component) -> Int? { - return _handle.map { - $0.value(forComponent: Calendar._toCalendarUnit([component])) - } - } - - // MARK: - - - /// Returns true if the combination of properties which have been set in the receiver is a date which exists in the `calendar` property. - /// - /// This method is not appropriate for use on `DateComponents` values which are specifying relative quantities of calendar components. - /// - /// Except for some trivial cases (e.g., 'seconds' should be 0 - 59 in any calendar), this method is not necessarily cheap. - /// - /// If the time zone property is set in the `DateComponents`, it is used. - /// - /// The calendar property must be set, or the result is always `false`. - @available(macOS 10.9, iOS 8.0, *) - public var isValidDate: Bool { - return _handle.map { $0.isValidDate } - } - - /// Returns true if the combination of properties which have been set in the receiver is a date which exists in the specified `Calendar`. - /// - /// This method is not appropriate for use on `DateComponents` values which are specifying relative quantities of calendar components. - /// - /// Except for some trivial cases (e.g., 'seconds' should be 0 - 59 in any calendar), this method is not necessarily cheap. - /// - /// If the time zone property is set in the `DateComponents`, it is used. - @available(macOS 10.9, iOS 8.0, *) - public func isValidDate(in calendar: Calendar) -> Bool { - return _handle.map { $0.isValidDate(in: calendar) } - } - - // MARK: - - - public func hash(into hasher: inout Hasher) { - hasher.combine(_handle._uncopiedReference()) - } - - // MARK: - Bridging Helpers - - private init(reference: __shared NSDateComponents) { - _handle = _MutableHandle(reference: reference) - } - - public static func ==(lhs : DateComponents, rhs: DateComponents) -> Bool { - // Don't copy references here; no one should be storing anything - return lhs._handle._uncopiedReference().isEqual(rhs._handle._uncopiedReference()) - } - -} - -extension DateComponents : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - - public var description: String { - return self.customMirror.children.reduce("") { - $0.appending("\($1.label ?? ""): \($1.value) ") - } - } - - public var debugDescription: String { - return self.description - } - - public var customMirror: Mirror { - var c: [(label: String?, value: Any)] = [] - if let r = calendar { c.append((label: "calendar", value: r)) } - if let r = timeZone { c.append((label: "timeZone", value: r)) } - if let r = era { c.append((label: "era", value: r)) } - if let r = year { c.append((label: "year", value: r)) } - if let r = month { c.append((label: "month", value: r)) } - if let r = day { c.append((label: "day", value: r)) } - if let r = hour { c.append((label: "hour", value: r)) } - if let r = minute { c.append((label: "minute", value: r)) } - if let r = second { c.append((label: "second", value: r)) } - if let r = nanosecond { c.append((label: "nanosecond", value: r)) } - if let r = weekday { c.append((label: "weekday", value: r)) } - if let r = weekdayOrdinal { c.append((label: "weekdayOrdinal", value: r)) } - if let r = quarter { c.append((label: "quarter", value: r)) } - if let r = weekOfMonth { c.append((label: "weekOfMonth", value: r)) } - if let r = weekOfYear { c.append((label: "weekOfYear", value: r)) } - if let r = yearForWeekOfYear { c.append((label: "yearForWeekOfYear", value: r)) } - if let r = isLeapMonth { c.append((label: "isLeapMonth", value: r)) } - return Mirror(self, children: c, displayStyle: Mirror.DisplayStyle.struct) - } -} - -// MARK: - Bridging - -extension DateComponents : _ObjectiveCBridgeable { - public static func _getObjectiveCType() -> Any.Type { - return NSDateComponents.self - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSDateComponents { - return _handle._copiedReference() - } - - public static func _forceBridgeFromObjectiveC(_ dateComponents: NSDateComponents, result: inout DateComponents?) { - if !_conditionallyBridgeFromObjectiveC(dateComponents, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ dateComponents: NSDateComponents, result: inout DateComponents?) -> Bool { - result = DateComponents(reference: dateComponents) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSDateComponents?) -> DateComponents { - guard let src = source else { return DateComponents() } - return DateComponents(reference: src) - } -} - -extension NSDateComponents : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as DateComponents) - } -} - -extension DateComponents : Codable { - private enum CodingKeys : Int, CodingKey { - case calendar - case timeZone - case era - case year - case month - case day - case hour - case minute - case second - case nanosecond - case weekday - case weekdayOrdinal - case quarter - case weekOfMonth - case weekOfYear - case yearForWeekOfYear - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let calendar = try container.decodeIfPresent(Calendar.self, forKey: .calendar) - let timeZone = try container.decodeIfPresent(TimeZone.self, forKey: .timeZone) - let era = try container.decodeIfPresent(Int.self, forKey: .era) - let year = try container.decodeIfPresent(Int.self, forKey: .year) - let month = try container.decodeIfPresent(Int.self, forKey: .month) - let day = try container.decodeIfPresent(Int.self, forKey: .day) - let hour = try container.decodeIfPresent(Int.self, forKey: .hour) - let minute = try container.decodeIfPresent(Int.self, forKey: .minute) - let second = try container.decodeIfPresent(Int.self, forKey: .second) - let nanosecond = try container.decodeIfPresent(Int.self, forKey: .nanosecond) - - let weekday = try container.decodeIfPresent(Int.self, forKey: .weekday) - let weekdayOrdinal = try container.decodeIfPresent(Int.self, forKey: .weekdayOrdinal) - let quarter = try container.decodeIfPresent(Int.self, forKey: .quarter) - let weekOfMonth = try container.decodeIfPresent(Int.self, forKey: .weekOfMonth) - let weekOfYear = try container.decodeIfPresent(Int.self, forKey: .weekOfYear) - let yearForWeekOfYear = try container.decodeIfPresent(Int.self, forKey: .yearForWeekOfYear) - - self.init(calendar: calendar, - timeZone: timeZone, - era: era, - year: year, - month: month, - day: day, - hour: hour, - minute: minute, - second: second, - nanosecond: nanosecond, - weekday: weekday, - weekdayOrdinal: weekdayOrdinal, - quarter: quarter, - weekOfMonth: weekOfMonth, - weekOfYear: weekOfYear, - yearForWeekOfYear: yearForWeekOfYear) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(self.calendar, forKey: .calendar) - try container.encodeIfPresent(self.timeZone, forKey: .timeZone) - try container.encodeIfPresent(self.era, forKey: .era) - try container.encodeIfPresent(self.year, forKey: .year) - try container.encodeIfPresent(self.month, forKey: .month) - try container.encodeIfPresent(self.day, forKey: .day) - try container.encodeIfPresent(self.hour, forKey: .hour) - try container.encodeIfPresent(self.minute, forKey: .minute) - try container.encodeIfPresent(self.second, forKey: .second) - try container.encodeIfPresent(self.nanosecond, forKey: .nanosecond) - try container.encodeIfPresent(self.weekday, forKey: .weekday) - try container.encodeIfPresent(self.weekdayOrdinal, forKey: .weekdayOrdinal) - try container.encodeIfPresent(self.quarter, forKey: .quarter) - try container.encodeIfPresent(self.weekOfMonth, forKey: .weekOfMonth) - try container.encodeIfPresent(self.weekOfYear, forKey: .weekOfYear) - try container.encodeIfPresent(self.yearForWeekOfYear, forKey: .yearForWeekOfYear) - } -} diff --git a/Darwin/Foundation-swiftoverlay/DateInterval.swift b/Darwin/Foundation-swiftoverlay/DateInterval.swift deleted file mode 100644 index 840b10e5fc..0000000000 --- a/Darwin/Foundation-swiftoverlay/DateInterval.swift +++ /dev/null @@ -1,228 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -@_implementationOnly import _CoreFoundationOverlayShims - -/// DateInterval represents a closed date interval in the form of [startDate, endDate]. It is possible for the start and end dates to be the same with a duration of 0. DateInterval does not support reverse intervals i.e. intervals where the duration is less than 0 and the end date occurs earlier in time than the start date. -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -public struct DateInterval : ReferenceConvertible, Comparable, Hashable, Codable { - public typealias ReferenceType = NSDateInterval - - /// The start date. - public var start : Date - - /// The end date. - /// - /// - precondition: `end >= start` - public var end : Date { - get { - return start + duration - } - set { - precondition(newValue >= start, "Reverse intervals are not allowed") - duration = newValue.timeIntervalSinceReferenceDate - start.timeIntervalSinceReferenceDate - } - } - - /// The duration. - /// - /// - precondition: `duration >= 0` - public var duration : TimeInterval { - willSet { - precondition(newValue >= 0, "Negative durations are not allowed") - } - } - - /// Initializes a `DateInterval` with start and end dates set to the current date and the duration set to `0`. - public init() { - let d = Date() - start = d - duration = 0 - } - - /// Initialize a `DateInterval` with the specified start and end date. - /// - /// - precondition: `end >= start` - public init(start: Date, end: Date) { - precondition(end >= start, "Reverse intervals are not allowed") - self.start = start - duration = end.timeIntervalSince(start) - } - - /// Initialize a `DateInterval` with the specified start date and duration. - /// - /// - precondition: `duration >= 0` - public init(start: Date, duration: TimeInterval) { - precondition(duration >= 0, "Negative durations are not allowed") - self.start = start - self.duration = duration - } - - /** - Compare two DateIntervals. - - This method prioritizes ordering by start date. If the start dates are equal, then it will order by duration. - e.g. Given intervals a and b - ``` - a. |-----| - b. |-----| - ``` - - `a.compare(b)` would return `.OrderedAscending` because a's start date is earlier in time than b's start date. - - In the event that the start dates are equal, the compare method will attempt to order by duration. - e.g. Given intervals c and d - ``` - c. |-----| - d. |---| - ``` - `c.compare(d)` would result in `.OrderedDescending` because c is longer than d. - - If both the start dates and the durations are equal, then the intervals are considered equal and `.OrderedSame` is returned as the result. - */ - public func compare(_ dateInterval: DateInterval) -> ComparisonResult { - let result = start.compare(dateInterval.start) - if result == .orderedSame { - if self.duration < dateInterval.duration { return .orderedAscending } - if self.duration > dateInterval.duration { return .orderedDescending } - return .orderedSame - } - return result - } - - /// Returns `true` if `self` intersects the `dateInterval`. - public func intersects(_ dateInterval: DateInterval) -> Bool { - return contains(dateInterval.start) || contains(dateInterval.end) || dateInterval.contains(start) || dateInterval.contains(end) - } - - /// Returns a DateInterval that represents the interval where the given date interval and the current instance intersect. - /// - /// In the event that there is no intersection, the method returns nil. - public func intersection(with dateInterval: DateInterval) -> DateInterval? { - if !intersects(dateInterval) { - return nil - } - - if self == dateInterval { - return self - } - - let timeIntervalForSelfStart = start.timeIntervalSinceReferenceDate - let timeIntervalForSelfEnd = end.timeIntervalSinceReferenceDate - let timeIntervalForGivenStart = dateInterval.start.timeIntervalSinceReferenceDate - let timeIntervalForGivenEnd = dateInterval.end.timeIntervalSinceReferenceDate - - let resultStartDate : Date - if timeIntervalForGivenStart >= timeIntervalForSelfStart { - resultStartDate = dateInterval.start - } else { - // self starts after given - resultStartDate = start - } - - let resultEndDate : Date - if timeIntervalForGivenEnd >= timeIntervalForSelfEnd { - resultEndDate = end - } else { - // given ends before self - resultEndDate = dateInterval.end - } - - return DateInterval(start: resultStartDate, end: resultEndDate) - } - - /// Returns `true` if `self` contains `date`. - public func contains(_ date: Date) -> Bool { - let timeIntervalForGivenDate = date.timeIntervalSinceReferenceDate - let timeIntervalForSelfStart = start.timeIntervalSinceReferenceDate - let timeIntervalforSelfEnd = end.timeIntervalSinceReferenceDate - if (timeIntervalForGivenDate >= timeIntervalForSelfStart) && (timeIntervalForGivenDate <= timeIntervalforSelfEnd) { - return true - } - return false - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(start) - hasher.combine(duration) - } - - @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) - public static func ==(lhs: DateInterval, rhs: DateInterval) -> Bool { - return lhs.start == rhs.start && lhs.duration == rhs.duration - } - - @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) - public static func <(lhs: DateInterval, rhs: DateInterval) -> Bool { - return lhs.compare(rhs) == .orderedAscending - } -} - -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -extension DateInterval : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - public var description: String { - return "\(start) to \(end)" - } - - public var debugDescription: String { - return description - } - - public var customMirror: Mirror { - var c: [(label: String?, value: Any)] = [] - c.append((label: "start", value: start)) - c.append((label: "end", value: end)) - c.append((label: "duration", value: duration)) - return Mirror(self, children: c, displayStyle: Mirror.DisplayStyle.struct) - } -} - -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -extension DateInterval : _ObjectiveCBridgeable { - public static func _getObjectiveCType() -> Any.Type { - return NSDateInterval.self - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSDateInterval { - return NSDateInterval(start: start, duration: duration) - } - - public static func _forceBridgeFromObjectiveC(_ dateInterval: NSDateInterval, result: inout DateInterval?) { - if !_conditionallyBridgeFromObjectiveC(dateInterval, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ dateInterval : NSDateInterval, result: inout DateInterval?) -> Bool { - result = DateInterval(start: dateInterval.startDate, duration: dateInterval.duration) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSDateInterval?) -> DateInterval { - var result: DateInterval? - _forceBridgeFromObjectiveC(source!, result: &result) - return result! - } -} - -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -extension NSDateInterval : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as DateInterval) - } -} - diff --git a/Darwin/Foundation-swiftoverlay/Decimal.swift b/Darwin/Foundation-swiftoverlay/Decimal.swift deleted file mode 100644 index af7aed6ea3..0000000000 --- a/Darwin/Foundation-swiftoverlay/Decimal.swift +++ /dev/null @@ -1,756 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -@_implementationOnly import _CoreFoundationOverlayShims - -extension Decimal { - public typealias RoundingMode = NSDecimalNumber.RoundingMode - public typealias CalculationError = NSDecimalNumber.CalculationError -} - -public func pow(_ x: Decimal, _ y: Int) -> Decimal { - var x = x - var result = Decimal() - NSDecimalPower(&result, &x, y, .plain) - return result -} - -extension Decimal : Hashable, Comparable { - // (Used by `doubleValue`.) - private subscript(index: UInt32) -> UInt16 { - get { - switch index { - case 0: return _mantissa.0 - case 1: return _mantissa.1 - case 2: return _mantissa.2 - case 3: return _mantissa.3 - case 4: return _mantissa.4 - case 5: return _mantissa.5 - case 6: return _mantissa.6 - case 7: return _mantissa.7 - default: fatalError("Invalid index \(index) for _mantissa") - } - } - } - - // (Used by `NSDecimalNumber` and `hash(into:)`.) - internal var doubleValue: Double { - if _length == 0 { - return _isNegative == 1 ? Double.nan : 0 - } - - var d = 0.0 - for idx in (0.. Bool { - var lhsVal = lhs - var rhsVal = rhs - // Note: In swift-corelibs-foundation, a bitwise comparison is first - // performed using fileprivate members not accessible here. - return NSDecimalCompare(&lhsVal, &rhsVal) == .orderedSame - } - - public static func <(lhs: Decimal, rhs: Decimal) -> Bool { - var lhsVal = lhs - var rhsVal = rhs - return NSDecimalCompare(&lhsVal, &rhsVal) == .orderedAscending - } -} - -extension Decimal : CustomStringConvertible { - public init?(string: __shared String, locale: __shared Locale? = nil) { - let scan = Scanner(string: string) - var theDecimal = Decimal() - scan.locale = locale - if !scan.scanDecimal(&theDecimal) { - return nil - } - self = theDecimal - } - - // Note: In swift-corelibs-foundation, `NSDecimalString(_:_:)` is - // implemented in terms of `description`; here, it's the other way around. - public var description: String { - var value = self - return NSDecimalString(&value, nil) - } -} - -extension Decimal : Codable { - private enum CodingKeys : Int, CodingKey { - case exponent - case length - case isNegative - case isCompact - case mantissa - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let exponent = try container.decode(CInt.self, forKey: .exponent) - let length = try container.decode(CUnsignedInt.self, forKey: .length) - let isNegative = try container.decode(Bool.self, forKey: .isNegative) - let isCompact = try container.decode(Bool.self, forKey: .isCompact) - - var mantissaContainer = try container.nestedUnkeyedContainer(forKey: .mantissa) - var mantissa: (CUnsignedShort, CUnsignedShort, CUnsignedShort, CUnsignedShort, - CUnsignedShort, CUnsignedShort, CUnsignedShort, CUnsignedShort) = (0,0,0,0,0,0,0,0) - mantissa.0 = try mantissaContainer.decode(CUnsignedShort.self) - mantissa.1 = try mantissaContainer.decode(CUnsignedShort.self) - mantissa.2 = try mantissaContainer.decode(CUnsignedShort.self) - mantissa.3 = try mantissaContainer.decode(CUnsignedShort.self) - mantissa.4 = try mantissaContainer.decode(CUnsignedShort.self) - mantissa.5 = try mantissaContainer.decode(CUnsignedShort.self) - mantissa.6 = try mantissaContainer.decode(CUnsignedShort.self) - mantissa.7 = try mantissaContainer.decode(CUnsignedShort.self) - - self.init(_exponent: exponent, - _length: length, - _isNegative: CUnsignedInt(isNegative ? 1 : 0), - _isCompact: CUnsignedInt(isCompact ? 1 : 0), - _reserved: 0, - _mantissa: mantissa) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(_exponent, forKey: .exponent) - try container.encode(_length, forKey: .length) - try container.encode(_isNegative == 0 ? false : true, forKey: .isNegative) - try container.encode(_isCompact == 0 ? false : true, forKey: .isCompact) - - var mantissaContainer = container.nestedUnkeyedContainer(forKey: .mantissa) - try mantissaContainer.encode(_mantissa.0) - try mantissaContainer.encode(_mantissa.1) - try mantissaContainer.encode(_mantissa.2) - try mantissaContainer.encode(_mantissa.3) - try mantissaContainer.encode(_mantissa.4) - try mantissaContainer.encode(_mantissa.5) - try mantissaContainer.encode(_mantissa.6) - try mantissaContainer.encode(_mantissa.7) - } -} - -extension Decimal : ExpressibleByFloatLiteral { - public init(floatLiteral value: Double) { - self.init(value) - } -} - -extension Decimal : ExpressibleByIntegerLiteral { - public init(integerLiteral value: Int) { - self.init(value) - } -} - -extension Decimal : SignedNumeric { - public var magnitude: Decimal { - guard _length != 0 else { return self } - return Decimal( - _exponent: self._exponent, _length: self._length, - _isNegative: 0, _isCompact: self._isCompact, - _reserved: 0, _mantissa: self._mantissa) - } - - public init?(exactly source: T) { - let zero = 0 as T - - if source == zero { - self = Decimal.zero - return - } - - let negative: UInt32 = (T.isSigned && source < zero) ? 1 : 0 - var mantissa = source.magnitude - var exponent: Int32 = 0 - - let maxExponent = Int8.max - while mantissa.isMultiple(of: 10) && (exponent < maxExponent) { - exponent += 1 - mantissa /= 10 - } - - // If the mantissa still requires more than 128 bits of storage then it is too large. - if mantissa.bitWidth > 128 && (mantissa >> 128 != zero) { return nil } - - let mantissaParts: (UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16) - let loWord = UInt64(truncatingIfNeeded: mantissa) - var length = ((loWord.bitWidth - loWord.leadingZeroBitCount) + (UInt16.bitWidth - 1)) / UInt16.bitWidth - mantissaParts.0 = UInt16(truncatingIfNeeded: loWord >> 0) - mantissaParts.1 = UInt16(truncatingIfNeeded: loWord >> 16) - mantissaParts.2 = UInt16(truncatingIfNeeded: loWord >> 32) - mantissaParts.3 = UInt16(truncatingIfNeeded: loWord >> 48) - - let hiWord = mantissa.bitWidth > 64 ? UInt64(truncatingIfNeeded: mantissa >> 64) : 0 - if hiWord != 0 { - length = 4 + ((hiWord.bitWidth - hiWord.leadingZeroBitCount) + (UInt16.bitWidth - 1)) / UInt16.bitWidth - mantissaParts.4 = UInt16(truncatingIfNeeded: hiWord >> 0) - mantissaParts.5 = UInt16(truncatingIfNeeded: hiWord >> 16) - mantissaParts.6 = UInt16(truncatingIfNeeded: hiWord >> 32) - mantissaParts.7 = UInt16(truncatingIfNeeded: hiWord >> 48) - } else { - mantissaParts.4 = 0 - mantissaParts.5 = 0 - mantissaParts.6 = 0 - mantissaParts.7 = 0 - } - - self = Decimal(_exponent: exponent, _length: UInt32(length), _isNegative: negative, _isCompact: 1, _reserved: 0, _mantissa: mantissaParts) - } - - public static func +=(lhs: inout Decimal, rhs: Decimal) { - var rhs = rhs - _ = withUnsafeMutablePointer(to: &lhs) { - NSDecimalAdd($0, $0, &rhs, .plain) - } - } - - public static func -=(lhs: inout Decimal, rhs: Decimal) { - var rhs = rhs - _ = withUnsafeMutablePointer(to: &lhs) { - NSDecimalSubtract($0, $0, &rhs, .plain) - } - } - - public static func *=(lhs: inout Decimal, rhs: Decimal) { - var rhs = rhs - _ = withUnsafeMutablePointer(to: &lhs) { - NSDecimalMultiply($0, $0, &rhs, .plain) - } - } - - public static func /=(lhs: inout Decimal, rhs: Decimal) { - var rhs = rhs - _ = withUnsafeMutablePointer(to: &lhs) { - NSDecimalDivide($0, $0, &rhs, .plain) - } - } - - public static func +(lhs: Decimal, rhs: Decimal) -> Decimal { - var answer = lhs - answer += rhs - return answer - } - - public static func -(lhs: Decimal, rhs: Decimal) -> Decimal { - var answer = lhs - answer -= rhs - return answer - } - - public static func *(lhs: Decimal, rhs: Decimal) -> Decimal { - var answer = lhs - answer *= rhs - return answer - } - - public static func /(lhs: Decimal, rhs: Decimal) -> Decimal { - var answer = lhs - answer /= rhs - return answer - } - - public mutating func negate() { - guard _length != 0 else { return } - _isNegative = _isNegative == 0 ? 1 : 0 - } -} - -extension Decimal { - @available(swift, obsoleted: 4, message: "Please use arithmetic operators instead") - @_transparent - public mutating func add(_ other: Decimal) { - self += other - } - - @available(swift, obsoleted: 4, message: "Please use arithmetic operators instead") - @_transparent - public mutating func subtract(_ other: Decimal) { - self -= other - } - - @available(swift, obsoleted: 4, message: "Please use arithmetic operators instead") - @_transparent - public mutating func multiply(by other: Decimal) { - self *= other - } - - @available(swift, obsoleted: 4, message: "Please use arithmetic operators instead") - @_transparent - public mutating func divide(by other: Decimal) { - self /= other - } -} - -extension Decimal : Strideable { - public func distance(to other: Decimal) -> Decimal { - return other - self - } - - public func advanced(by n: Decimal) -> Decimal { - return self + n - } -} - -private extension Decimal { - // Creates a value with zero exponent. - // (Used by `_powersOfTenDividingUInt128Max`.) - init(_length: UInt32, _isCompact: UInt32, _mantissa: (UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16)) { - self.init(_exponent: 0, _length: _length, _isNegative: 0, _isCompact: _isCompact, - _reserved: 0, _mantissa: _mantissa) - } -} - -private let _powersOfTenDividingUInt128Max = [ -/* 10**00 dividing UInt128.max is deliberately omitted. */ -/* 10**01 */ Decimal(_length: 8, _isCompact: 1, _mantissa: (0x9999, 0x9999, 0x9999, 0x9999, 0x9999, 0x9999, 0x9999, 0x1999)), -/* 10**02 */ Decimal(_length: 8, _isCompact: 1, _mantissa: (0xf5c2, 0x5c28, 0xc28f, 0x28f5, 0x8f5c, 0xf5c2, 0x5c28, 0x028f)), -/* 10**03 */ Decimal(_length: 8, _isCompact: 1, _mantissa: (0x1893, 0x5604, 0x2d0e, 0x9db2, 0xa7ef, 0x4bc6, 0x8937, 0x0041)), -/* 10**04 */ Decimal(_length: 8, _isCompact: 1, _mantissa: (0x0275, 0x089a, 0x9e1b, 0x295e, 0x10cb, 0xbac7, 0x8db8, 0x0006)), -/* 10**05 */ Decimal(_length: 7, _isCompact: 1, _mantissa: (0x3372, 0x80dc, 0x0fcf, 0x8423, 0x1b47, 0xac47, 0xa7c5,0)), -/* 10**06 */ Decimal(_length: 7, _isCompact: 1, _mantissa: (0x3858, 0xf349, 0xb4c7, 0x8d36, 0xb5ed, 0xf7a0, 0x10c6,0)), -/* 10**07 */ Decimal(_length: 7, _isCompact: 1, _mantissa: (0xec08, 0x6520, 0x787a, 0xf485, 0xabca, 0x7f29, 0x01ad,0)), -/* 10**08 */ Decimal(_length: 7, _isCompact: 1, _mantissa: (0x4acd, 0x7083, 0xbf3f, 0x1873, 0xc461, 0xf31d, 0x002a,0)), -/* 10**09 */ Decimal(_length: 7, _isCompact: 1, _mantissa: (0x5447, 0x8b40, 0x2cb9, 0xb5a5, 0xfa09, 0x4b82, 0x0004,0)), -/* 10**10 */ Decimal(_length: 6, _isCompact: 1, _mantissa: (0xa207, 0x5ab9, 0xeadf, 0x5ef6, 0x7f67, 0x6df3,0,0)), -/* 10**11 */ Decimal(_length: 6, _isCompact: 1, _mantissa: (0xf69a, 0xef78, 0x4aaf, 0xbcb2, 0xbff0, 0x0afe,0,0)), -/* 10**12 */ Decimal(_length: 6, _isCompact: 1, _mantissa: (0x7f0f, 0x97f2, 0xa111, 0x12de, 0x7998, 0x0119,0,0)), -/* 10**13 */ Decimal(_length: 6, _isCompact: 0, _mantissa: (0x0cb4, 0xc265, 0x7681, 0x6849, 0x25c2, 0x001c,0,0)), -/* 10**14 */ Decimal(_length: 6, _isCompact: 1, _mantissa: (0x4e12, 0x603d, 0x2573, 0x70d4, 0xd093, 0x0002,0,0)), -/* 10**15 */ Decimal(_length: 5, _isCompact: 1, _mantissa: (0x87ce, 0x566c, 0x9d58, 0xbe7b, 0x480e,0,0,0)), -/* 10**16 */ Decimal(_length: 5, _isCompact: 1, _mantissa: (0xda61, 0x6f0a, 0xf622, 0xaca5, 0x0734,0,0,0)), -/* 10**17 */ Decimal(_length: 5, _isCompact: 1, _mantissa: (0x4909, 0xa4b4, 0x3236, 0x77aa, 0x00b8,0,0,0)), -/* 10**18 */ Decimal(_length: 5, _isCompact: 1, _mantissa: (0xa0e7, 0x43ab, 0xd1d2, 0x725d, 0x0012,0,0,0)), -/* 10**19 */ Decimal(_length: 5, _isCompact: 1, _mantissa: (0xc34a, 0x6d2a, 0x94fb, 0xd83c, 0x0001,0,0,0)), -/* 10**20 */ Decimal(_length: 4, _isCompact: 1, _mantissa: (0x46ba, 0x2484, 0x4219, 0x2f39,0,0,0,0)), -/* 10**21 */ Decimal(_length: 4, _isCompact: 1, _mantissa: (0xd3df, 0x83a6, 0xed02, 0x04b8,0,0,0,0)), -/* 10**22 */ Decimal(_length: 4, _isCompact: 1, _mantissa: (0x7b96, 0x405d, 0xe480, 0x0078,0,0,0,0)), -/* 10**23 */ Decimal(_length: 4, _isCompact: 1, _mantissa: (0x5928, 0xa009, 0x16d9, 0x000c,0,0,0,0)), -/* 10**24 */ Decimal(_length: 4, _isCompact: 1, _mantissa: (0x88ea, 0x299a, 0x357c, 0x0001,0,0,0,0)), -/* 10**25 */ Decimal(_length: 3, _isCompact: 1, _mantissa: (0xda7d, 0xd0f5, 0x1ef2,0,0,0,0,0)), -/* 10**26 */ Decimal(_length: 3, _isCompact: 1, _mantissa: (0x95d9, 0x4818, 0x0318,0,0,0,0,0)), -/* 10**27 */ Decimal(_length: 3, _isCompact: 0, _mantissa: (0xdbc8, 0x3a68, 0x004f,0,0,0,0,0)), -/* 10**28 */ Decimal(_length: 3, _isCompact: 1, _mantissa: (0xaf94, 0xec3d, 0x0007,0,0,0,0,0)), -/* 10**29 */ Decimal(_length: 2, _isCompact: 1, _mantissa: (0xf7f5, 0xcad2,0,0,0,0,0,0)), -/* 10**30 */ Decimal(_length: 2, _isCompact: 1, _mantissa: (0x4bfe, 0x1448,0,0,0,0,0,0)), -/* 10**31 */ Decimal(_length: 2, _isCompact: 1, _mantissa: (0x3acc, 0x0207,0,0,0,0,0,0)), -/* 10**32 */ Decimal(_length: 2, _isCompact: 1, _mantissa: (0xec47, 0x0033,0,0,0,0,0,0)), -/* 10**33 */ Decimal(_length: 2, _isCompact: 1, _mantissa: (0x313a, 0x0005,0,0,0,0,0,0)), -/* 10**34 */ Decimal(_length: 1, _isCompact: 1, _mantissa: (0x84ec,0,0,0,0,0,0,0)), -/* 10**35 */ Decimal(_length: 1, _isCompact: 1, _mantissa: (0x0d4a,0,0,0,0,0,0,0)), -/* 10**36 */ Decimal(_length: 1, _isCompact: 0, _mantissa: (0x0154,0,0,0,0,0,0,0)), -/* 10**37 */ Decimal(_length: 1, _isCompact: 1, _mantissa: (0x0022,0,0,0,0,0,0,0)), -/* 10**38 */ Decimal(_length: 1, _isCompact: 1, _mantissa: (0x0003,0,0,0,0,0,0,0)) -] - -// The methods in this extension exist to match the protocol requirements of -// FloatingPoint, even if we can't conform directly. -// -// If it becomes clear that conformance is truly impossible, we can deprecate -// some of the methods (e.g. `isEqual(to:)` in favor of operators). -extension Decimal { - public static let greatestFiniteMagnitude = Decimal( - _exponent: 127, - _length: 8, - _isNegative: 0, - _isCompact: 1, - _reserved: 0, - _mantissa: (0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff) - ) - - public static let leastNormalMagnitude = Decimal( - _exponent: -128, - _length: 1, - _isNegative: 0, - _isCompact: 1, - _reserved: 0, - _mantissa: (0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000) - ) - - public static let leastNonzeroMagnitude = leastNormalMagnitude - - @available(*, deprecated, message: "Use '-Decimal.greatestFiniteMagnitude' for least finite value or '0' for least finite magnitude") - public static let leastFiniteMagnitude = -greatestFiniteMagnitude - - public static let pi = Decimal( - _exponent: -38, - _length: 8, - _isNegative: 0, - _isCompact: 1, - _reserved: 0, - _mantissa: (0x6623, 0x7d57, 0x16e7, 0xad0d, 0xaf52, 0x4641, 0xdfa7, 0xec58) - ) - - @available(*, unavailable, message: "Decimal does not fully adopt FloatingPoint.") - public static var infinity: Decimal { fatalError("Decimal does not fully adopt FloatingPoint") } - - @available(*, unavailable, message: "Decimal does not fully adopt FloatingPoint.") - public static var signalingNaN: Decimal { fatalError("Decimal does not fully adopt FloatingPoint") } - - public static var quietNaN: Decimal { - return Decimal( - _exponent: 0, _length: 0, _isNegative: 1, _isCompact: 0, - _reserved: 0, _mantissa: (0, 0, 0, 0, 0, 0, 0, 0)) - } - - public static var nan: Decimal { quietNaN } - - public static var radix: Int { 10 } - - public init(_ value: UInt8) { - self.init(UInt64(value)) - } - - public init(_ value: Int8) { - self.init(Int64(value)) - } - - public init(_ value: UInt16) { - self.init(UInt64(value)) - } - - public init(_ value: Int16) { - self.init(Int64(value)) - } - - public init(_ value: UInt32) { - self.init(UInt64(value)) - } - - public init(_ value: Int32) { - self.init(Int64(value)) - } - - public init(_ value: UInt64) { - self = Decimal() - if value == 0 { - return - } - - var compactValue = value - var exponent: Int32 = 0 - while compactValue % 10 == 0 { - compactValue /= 10 - exponent += 1 - } - _isCompact = 1 - _exponent = exponent - - let wordCount = ((UInt64.bitWidth - compactValue.leadingZeroBitCount) + (UInt16.bitWidth - 1)) / UInt16.bitWidth - _length = UInt32(wordCount) - _mantissa.0 = UInt16(truncatingIfNeeded: compactValue >> 0) - _mantissa.1 = UInt16(truncatingIfNeeded: compactValue >> 16) - _mantissa.2 = UInt16(truncatingIfNeeded: compactValue >> 32) - _mantissa.3 = UInt16(truncatingIfNeeded: compactValue >> 48) - } - - public init(_ value: Int64) { - self.init(value.magnitude) - if value < 0 { - _isNegative = 1 - } - } - - public init(_ value: UInt) { - self.init(UInt64(value)) - } - - public init(_ value: Int) { - self.init(Int64(value)) - } - - public init(_ value: Double) { - precondition(!value.isInfinite, "Decimal does not fully adopt FloatingPoint") - if value.isNaN { - self = Decimal.nan - } else if value == 0.0 { - self = Decimal() - } else { - self = Decimal() - let negative = value < 0 - var val = negative ? -1 * value : value - var exponent: Int8 = 0 - - // Try to get val as close to UInt64.max whilst adjusting the exponent - // to reduce the number of digits after the decimal point. - while val < Double(UInt64.max - 1) { - guard exponent > Int8.min else { - self = Decimal.nan - return - } - val *= 10.0 - exponent -= 1 - } - while Double(UInt64.max) <= val { - guard exponent < Int8.max else { - self = Decimal.nan - return - } - val /= 10.0 - exponent += 1 - } - - var mantissa: UInt64 - let maxMantissa = Double(UInt64.max).nextDown - if val > maxMantissa { - // UInt64(Double(UInt64.max)) gives an overflow error; this is the largest - // mantissa that can be set. - mantissa = UInt64(maxMantissa) - } else { - mantissa = UInt64(val) - } - - var i: UInt32 = 0 - // This is a bit ugly but it is the closest approximation of the C - // initializer that can be expressed here. - while mantissa != 0 && i < 8 /* NSDecimalMaxSize */ { - switch i { - case 0: - _mantissa.0 = UInt16(truncatingIfNeeded: mantissa) - case 1: - _mantissa.1 = UInt16(truncatingIfNeeded: mantissa) - case 2: - _mantissa.2 = UInt16(truncatingIfNeeded: mantissa) - case 3: - _mantissa.3 = UInt16(truncatingIfNeeded: mantissa) - case 4: - _mantissa.4 = UInt16(truncatingIfNeeded: mantissa) - case 5: - _mantissa.5 = UInt16(truncatingIfNeeded: mantissa) - case 6: - _mantissa.6 = UInt16(truncatingIfNeeded: mantissa) - case 7: - _mantissa.7 = UInt16(truncatingIfNeeded: mantissa) - default: - fatalError("initialization overflow") - } - mantissa = mantissa >> 16 - i += 1 - } - _length = i - _isNegative = negative ? 1 : 0 - _isCompact = 0 - _exponent = Int32(exponent) - NSDecimalCompact(&self) - } - } - - public init(sign: FloatingPointSign, exponent: Int, significand: Decimal) { - self = significand - let error = withUnsafeMutablePointer(to: &self) { - NSDecimalMultiplyByPowerOf10($0, $0, Int16(clamping: exponent), .plain) - } - if error == .underflow { self = 0 } - // We don't need to check for overflow because `Decimal` cannot represent infinity. - if sign == .minus { negate() } - } - - public init(signOf: Decimal, magnitudeOf magnitude: Decimal) { - self.init( - _exponent: magnitude._exponent, - _length: magnitude._length, - _isNegative: signOf._isNegative, - _isCompact: magnitude._isCompact, - _reserved: 0, - _mantissa: magnitude._mantissa) - } - - public var exponent: Int { - return Int(_exponent) - } - - public var significand: Decimal { - return Decimal( - _exponent: 0, _length: _length, _isNegative: 0, _isCompact: _isCompact, - _reserved: 0, _mantissa: _mantissa) - } - - public var sign: FloatingPointSign { - return _isNegative == 0 ? FloatingPointSign.plus : FloatingPointSign.minus - } - - public var ulp: Decimal { - guard isFinite else { return .nan } - - let exponent: Int32 - if isZero { - exponent = .min - } else { - let significand_ = significand - let shift = - _powersOfTenDividingUInt128Max.firstIndex { significand_ > $0 } - ?? _powersOfTenDividingUInt128Max.count - exponent = _exponent &- Int32(shift) - } - - return Decimal( - _exponent: max(exponent, -128), _length: 1, _isNegative: 0, _isCompact: 1, - _reserved: 0, _mantissa: (0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000)) - } - - public var nextUp: Decimal { - if _isNegative == 1 { - if _exponent > -128 - && (_mantissa.0, _mantissa.1, _mantissa.2, _mantissa.3) == (0x999a, 0x9999, 0x9999, 0x9999) - && (_mantissa.4, _mantissa.5, _mantissa.6, _mantissa.7) == (0x9999, 0x9999, 0x9999, 0x1999) { - return Decimal( - _exponent: _exponent &- 1, _length: 8, _isNegative: 1, _isCompact: 1, - _reserved: 0, _mantissa: (0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) - } - } else { - if _exponent < 127 - && (_mantissa.0, _mantissa.1, _mantissa.2, _mantissa.3) == (0xffff, 0xffff, 0xffff, 0xffff) - && (_mantissa.4, _mantissa.5, _mantissa.6, _mantissa.7) == (0xffff, 0xffff, 0xffff, 0xffff) { - return Decimal( - _exponent: _exponent &+ 1, _length: 8, _isNegative: 0, _isCompact: 1, - _reserved: 0, _mantissa: (0x999a, 0x9999, 0x9999, 0x9999, 0x9999, 0x9999, 0x9999, 0x1999)) - } - } - return self + ulp - } - - public var nextDown: Decimal { - return -(-self).nextUp - } - - /// The IEEE 754 "class" of this type. - public var floatingPointClass: FloatingPointClassification { - if _length == 0 && _isNegative == 1 { - return .quietNaN - } else if _length == 0 { - return .positiveZero - } - // NSDecimal does not really represent normal and subnormal in the same - // manner as the IEEE standard, for now we can probably claim normal for - // any nonzero, non-NaN values. - if _isNegative == 1 { - return .negativeNormal - } else { - return .positiveNormal - } - } - - public var isCanonical: Bool { true } - - /// `true` if `self` is negative, `false` otherwise. - public var isSignMinus: Bool { _isNegative != 0 } - - /// `true` if `self` is +0.0 or -0.0, `false` otherwise. - public var isZero: Bool { _length == 0 && _isNegative == 0 } - - /// `true` if `self` is subnormal, `false` otherwise. - public var isSubnormal: Bool { false } - - /// `true` if `self` is normal (not zero, subnormal, infinity, or NaN), - /// `false` otherwise. - public var isNormal: Bool { !isZero && !isInfinite && !isNaN } - - /// `true` if `self` is zero, subnormal, or normal (not infinity or NaN), - /// `false` otherwise. - public var isFinite: Bool { !isNaN } - - /// `true` if `self` is infinity, `false` otherwise. - public var isInfinite: Bool { false } - - /// `true` if `self` is NaN, `false` otherwise. - public var isNaN: Bool { _length == 0 && _isNegative == 1 } - - /// `true` if `self` is a signaling NaN, `false` otherwise. - public var isSignaling: Bool { false } - - /// `true` if `self` is a signaling NaN, `false` otherwise. - public var isSignalingNaN: Bool { false } - - public func isEqual(to other: Decimal) -> Bool { - var lhs = self - var rhs = other - return NSDecimalCompare(&lhs, &rhs) == .orderedSame - } - - public func isLess(than other: Decimal) -> Bool { - var lhs = self - var rhs = other - return NSDecimalCompare(&lhs, &rhs) == .orderedAscending - } - - public func isLessThanOrEqualTo(_ other: Decimal) -> Bool { - var lhs = self - var rhs = other - let order = NSDecimalCompare(&lhs, &rhs) - return order == .orderedAscending || order == .orderedSame - } - - public func isTotallyOrdered(belowOrEqualTo other: Decimal) -> Bool { - // Note: Decimal does not have -0 or infinities to worry about - if self.isNaN { - return false - } - if self < other { - return true - } - if other < self { - return false - } - // Fall through to == behavior - return true - } - - @available(*, unavailable, message: "Decimal does not fully adopt FloatingPoint.") - public mutating func formTruncatingRemainder(dividingBy other: Decimal) { fatalError("Decimal does not fully adopt FloatingPoint") } -} - -extension Decimal : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSDecimalNumber { - return NSDecimalNumber(decimal: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSDecimalNumber, result: inout Decimal?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ input: NSDecimalNumber, result: inout Decimal?) -> Bool { - result = input.decimalValue - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSDecimalNumber?) -> Decimal { - guard let src = source else { return Decimal(_exponent: 0, _length: 0, _isNegative: 0, _isCompact: 0, _reserved: 0, _mantissa: (0, 0, 0, 0, 0, 0, 0, 0)) } - return src.decimalValue - } -} diff --git a/Darwin/Foundation-swiftoverlay/DispatchData+DataProtocol.swift b/Darwin/Foundation-swiftoverlay/DispatchData+DataProtocol.swift deleted file mode 100644 index 448e9f313b..0000000000 --- a/Darwin/Foundation-swiftoverlay/DispatchData+DataProtocol.swift +++ /dev/null @@ -1,56 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2018 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - - -import Dispatch - -extension DispatchData : DataProtocol { - public struct Region : DataProtocol, ContiguousBytes { - internal let bytes: UnsafeBufferPointer - internal let index: DispatchData.Index - internal let owner: DispatchData - internal init(bytes: UnsafeBufferPointer, index: DispatchData.Index, owner: DispatchData) { - self.bytes = bytes - self.index = index - self.owner = owner - } - - public var regions: CollectionOfOne { - return CollectionOfOne(self) - } - - public subscript(position: DispatchData.Index) -> UInt8 { - precondition(index <= position && position <= index + bytes.count) - return bytes[position - index] - } - - public var startIndex: DispatchData.Index { - return index - } - - public var endIndex: DispatchData.Index { - return index + bytes.count - } - - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> ResultType) rethrows -> ResultType { - return try body(UnsafeRawBufferPointer(bytes)) - } - } - - public var regions: [Region] { - var regions = [Region]() - enumerateBytes { (bytes, index, stop) in - regions.append(Region(bytes: bytes, index: index, owner: self)) - } - return regions - } -} diff --git a/Darwin/Foundation-swiftoverlay/FileManager.swift b/Darwin/Foundation-swiftoverlay/FileManager.swift deleted file mode 100644 index 98ff584ba7..0000000000 --- a/Darwin/Foundation-swiftoverlay/FileManager.swift +++ /dev/null @@ -1,56 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -@_implementationOnly import _FoundationOverlayShims - -extension FileManager { - /* - renamed syntax should be: - public func replaceItem(at originalItemURL: URL, withItemAt newItemURL: URL, backupItemName: String? = nil, options : FileManager.ItemReplacementOptions = []) throws -> URL? - */ - - @available(*, deprecated, renamed:"replaceItemAt(_:withItemAt:backupItemName:options:)") - public func replaceItemAtURL(originalItemURL: NSURL, withItemAtURL newItemURL: NSURL, backupItemName: String? = nil, options: FileManager.ItemReplacementOptions = []) throws -> NSURL? { - var error: NSError? = nil - guard let result = __NSFileManagerReplaceItemAtURL(self, originalItemURL as URL, newItemURL as URL, backupItemName, options, &error) else { throw error! } - return result as NSURL - } - - @available(swift, obsoleted: 4) - @available(macOS 10.6, iOS 4.0, *) - public func replaceItemAt(_ originalItemURL: URL, withItemAt newItemURL: URL, backupItemName: String? = nil, options: FileManager.ItemReplacementOptions = []) throws -> NSURL? { - var error: NSError? - guard let result = __NSFileManagerReplaceItemAtURL(self, originalItemURL, newItemURL , backupItemName, options, &error) else { throw error! } - return result as NSURL - } - - @available(swift, introduced: 4) - @available(macOS 10.6, iOS 4.0, *) - public func replaceItemAt(_ originalItemURL: URL, withItemAt newItemURL: URL, backupItemName: String? = nil, options: FileManager.ItemReplacementOptions = []) throws -> URL? { - var error: NSError? - guard let result = __NSFileManagerReplaceItemAtURL(self, originalItemURL, newItemURL , backupItemName, options, &error) else { throw error! } - return result - } - - @available(macOS 10.6, iOS 4.0, *) - @nonobjc - public func enumerator(at url: URL, includingPropertiesForKeys keys: [URLResourceKey]?, options mask: FileManager.DirectoryEnumerationOptions = [], errorHandler handler: ((URL, Error) -> Bool)? = nil) -> FileManager.DirectoryEnumerator? { - return __NSFileManagerEnumeratorAtURL(self, url, keys, mask, { (url, error) in - var errorResult = true - if let h = handler { - errorResult = h(url, error) - } - return errorResult - }) - } -} diff --git a/Darwin/Foundation-swiftoverlay/Foundation.swift b/Darwin/Foundation-swiftoverlay/Foundation.swift deleted file mode 100644 index aad480e502..0000000000 --- a/Darwin/Foundation-swiftoverlay/Foundation.swift +++ /dev/null @@ -1,245 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -import CoreFoundation -import CoreGraphics - -//===----------------------------------------------------------------------===// -// NSObject -//===----------------------------------------------------------------------===// - -// These conformances should be located in the `ObjectiveC` module, but they can't -// be placed there because string bridging is not available there. -extension NSObject : CustomStringConvertible {} -extension NSObject : CustomDebugStringConvertible {} - -public let NSNotFound: Int = .max - -//===----------------------------------------------------------------------===// -// NSLocalizedString -//===----------------------------------------------------------------------===// - -/// Returns the localized version of a string. -/// -/// - parameter key: An identifying value used to reference a localized string. -/// Don't use the empty string as a key. Values keyed by the empty string will -/// not be localized. -/// - parameter tableName: The name of the table containing the localized string -/// identified by `key`. This is the prefix of the strings file—a file with -/// the `.strings` extension—containing the localized values. If `tableName` -/// is `nil` or the empty string, the `Localizable` table is used. -/// - parameter bundle: The bundle containing the table's strings file. The main -/// bundle is used by default. -/// - parameter value: A user-visible string to return when the localized string -/// for `key` cannot be found in the table. If `value` is the empty string, -/// `key` would be returned instead. -/// - parameter comment: A note to the translator describing the context where -/// the localized string is presented to the user. -/// -/// - returns: A localized version of the string designated by `key` in the -/// table identified by `tableName`. If the localized string for `key` cannot -/// be found within the table, `value` is returned. However, `key` is returned -/// instead when `value` is the empty string. -/// -/// Export Localizations with Xcode -/// ------------------------------- -/// -/// Xcode can read through a project's code to find invocations of -/// `NSLocalizedString(_:tableName:bundle:value:comment:)` and automatically -/// generate the appropriate strings files for the project's base localization. -/// -/// In Xcode, open the project file and, in the `Edit` menu, select -/// `Export for Localization`. This will generate an XLIFF bundle containing -/// strings files derived from your code along with other localizable assets. -/// `xcodebuild` can also be used to generate the localization bundle from the -/// command line with the `exportLocalizations` option. -/// -/// xcodebuild -exportLocalizations -project .xcodeproj \ -/// -localizationPath -/// -/// These bundles can be sent to translators for localization, and then -/// reimported into your Xcode project. In Xcode, open the project file. In the -/// `Edit` menu, select `Import Localizations...`, and select the XLIFF -/// folder to import. You can also use `xcodebuild` to import localizations with -/// the `importLocalizations` option. -/// -/// xcodebuild -importLocalizations -project .xcodeproj \ -/// -localizationPath -/// -/// Choose Meaningful Keys -/// ---------------------- -/// -/// Words can often have multiple different meanings depending on the context -/// in which they're used. For example, the word "Book" can be used as a noun—a -/// printed literary work—and it can be used as a verb—the action of making a -/// reservation. Words with different meanings which share the same spelling are -/// heteronyms. -/// -/// Different languages often have different heteronyms. "Book" in English is -/// one such heteronym, but that's not so in French, where the noun translates -/// to "Livre", and the verb translates to "Réserver". For this reason, it's -/// important make sure that each use of the same phrase is translated -/// appropriately for its context by assigning unique keys to each phrase and -/// adding a description comment describing how that phrase is used. -/// -/// NSLocalizedString("book-tag-title", value: "Book", comment: """ -/// noun: A label attached to literary items in the library. -/// """) -/// -/// NSLocalizedString("book-button-title", value: "Book", comment: """ -/// verb: Title of the button that makes a reservation. -/// """) -/// -/// Use Only String Literals -/// ------------------------ -/// -/// String literal values must be used with `key`, `tableName`, `value`, and -/// `comment`. -/// -/// Xcode does not evaluate interpolated strings and string variables when -/// generating strings files from code. Attempting to localize a string using -/// those language features will cause Xcode to export something that resembles -/// the original code expression instead of its expected value at runtime. -/// Translators would then translate that exported value—leaving -/// international users with a localized string containing code. -/// -/// // Translators will see "1 + 1 = (1 + 1)". -/// // International users will see a localization "1 + 1 = (1 + 1)". -/// let localizedString = NSLocalizedString("string-interpolation", -/// value: "1 + 1 = \(1 + 1)" -/// comment: "A math equation.") -/// -/// To dynamically insert values within localized strings, set `value` to a -/// format string, and use `String.localizedStringWithFormat(_:_:)` to insert -/// those values. -/// -/// // Translators will see "1 + 1 = %d" (they know what "%d" means). -/// // International users will see a localization of "1 + 1 = 2". -/// let format = NSLocalizedString("string-literal", -/// value: "1 + 1 = %d", -/// comment: "A math equation.") -/// let localizedString = String.localizedStringWithFormat(format, (1 + 1)) -/// -/// Multiline string literals are technically supported, but will result in -/// unexpected behavior during internationalization. A newline will be inserted -/// before and after the body of text within the string, and translators will -/// likely preserve those in their internationalizations. -/// -/// To preserve some of the aesthetics of having newlines in the string mirrored -/// in their code representation, string literal concatenation with the `+` -/// operator can be used. -/// -/// NSLocalizedString("multiline-string-literal", -/// value: """ -/// This multiline string literal won't work as expected. -/// An extra newline is added to the beginning and end of the string. -/// """, -/// comment: "The description of a sample of code.") -/// -/// NSLocalizedString("string-literal-contatenation", -/// value: "This string literal concatenated with" -/// + "this other string literal works just fine.", -/// comment: "The description of a sample of code.") -/// -/// Since comments aren't localized, multiline string literals can be safely -/// used with `comment`. -/// -/// Work with Manually Managed Strings -/// ---------------------------------- -/// -/// If having Xcode generate strings files from code isn't desired behavior, -/// call `Bundle.localizedString(forKey:value:table:)` instead. -/// -/// let greeting = Bundle.localizedString(forKey: "program-greeting", -/// value: "Hello, World!", -/// table: "Localization") -/// -/// However, this requires the manual creation and management of that table's -/// strings file. -/// -/// /* Localization.strings */ -/// -/// /* A friendly greeting to the user when the program starts. */ -/// "program-greeting" = "Hello, World!"; -/// -/// - note: Although `NSLocalizedString(_:tableName:bundle:value:comment:)` -/// and `Bundle.localizedString(forKey:value:table:)` can be used in a project -/// at the same time, data from manually managed strings files will be -/// overwritten by Xcode when their table is also used to look up localized -/// strings with `NSLocalizedString(_:tableName:bundle:value:comment:)`. -public -func NSLocalizedString(_ key: String, - tableName: String? = nil, - bundle: Bundle = Bundle.main, - value: String = "", - comment: String) -> String { - return bundle.localizedString(forKey: key, value:value, table:tableName) -} - -//===----------------------------------------------------------------------===// -// NSLog -//===----------------------------------------------------------------------===// - -public func NSLog(_ format: String, _ args: CVarArg...) { - withVaList(args) { NSLogv(format, $0) } -} - -//===----------------------------------------------------------------------===// -// AnyHashable -//===----------------------------------------------------------------------===// - -extension AnyHashable : _ObjectiveCBridgeable { - public func _bridgeToObjectiveC() -> NSObject { - // This is unprincipled, but pretty much any object we'll encounter in - // Swift is NSObject-conforming enough to have -hash and -isEqual:. - return unsafeBitCast(base as AnyObject, to: NSObject.self) - } - - public static func _forceBridgeFromObjectiveC( - _ x: NSObject, - result: inout AnyHashable? - ) { - result = AnyHashable(x) - } - - public static func _conditionallyBridgeFromObjectiveC( - _ x: NSObject, - result: inout AnyHashable? - ) -> Bool { - self._forceBridgeFromObjectiveC(x, result: &result) - return result != nil - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC( - _ source: NSObject? - ) -> AnyHashable { - // `nil` has historically been used as a stand-in for an empty - // string; map it to an empty string. - if _slowPath(source == nil) { return AnyHashable(String()) } - return AnyHashable(source!) - } -} - -//===----------------------------------------------------------------------===// -// CVarArg for bridged types -//===----------------------------------------------------------------------===// - -extension CVarArg where Self: _ObjectiveCBridgeable { - /// Default implementation for bridgeable types. - public var _cVarArgEncoding: [Int] { - let object = self._bridgeToObjectiveC() - _autorelease(object) - return _encodeBitsAsWords(object) - } -} diff --git a/Darwin/Foundation-swiftoverlay/Foundation.xcconfig b/Darwin/Foundation-swiftoverlay/Foundation.xcconfig deleted file mode 100644 index 2c46f84279..0000000000 --- a/Darwin/Foundation-swiftoverlay/Foundation.xcconfig +++ /dev/null @@ -1,32 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#include "../Config/overlay-shared.xcconfig" - -PRODUCT_NAME = Foundation -SWIFT_VERSION = 5.0 -OTHER_LDFLAGS = $(inherited) -framework Foundation - -// Shims are helper declarations that are only needed to compile the -// implementation of this overlay. They are defined in a headers-only module -// in the project folder that isn't installed anywhere. -SWIFT_INCLUDE_PATHS = $(inherited) shims - -// Aggravating special case: we need to add shims to the system header search -// path, so that NSUInteger gets imported as Int, not UInt. The shims originally -// shipped in the SDK, so they were written to depend on this. (c.f. rdar://17473606) -SYSTEM_HEADER_SEARCH_PATHS = $(inherited) shims - -// Use 0.0.0 as the version number for development builds. -CURRENT_PROJECT_VERSION = 0.0.0 -DYLIB_CURRENT_VERSION = $(CURRENT_PROJECT_VERSION) -MODULE_VERSION = $(CURRENT_PROJECT_VERSION) diff --git a/Darwin/Foundation-swiftoverlay/IndexPath.swift b/Darwin/Foundation-swiftoverlay/IndexPath.swift deleted file mode 100644 index d3e1869eff..0000000000 --- a/Darwin/Foundation-swiftoverlay/IndexPath.swift +++ /dev/null @@ -1,767 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -@_implementationOnly import _FoundationOverlayShims - -/** - `IndexPath` represents the path to a specific node in a tree of nested array collections. - - Each index in an index path represents the index into an array of children from one node in the tree to another, deeper, node. - */ -public struct IndexPath : ReferenceConvertible, Equatable, Hashable, MutableCollection, RandomAccessCollection, Comparable, ExpressibleByArrayLiteral { - public typealias ReferenceType = NSIndexPath - public typealias Element = Int - public typealias Index = Array.Index - public typealias Indices = DefaultIndices - - fileprivate enum Storage : ExpressibleByArrayLiteral { - typealias Element = Int - case empty - case single(Int) - case pair(Int, Int) - case array([Int]) - - init(arrayLiteral elements: Int...) { - self.init(elements) - } - - init(_ elements: [Int]) { - switch elements.count { - case 0: - self = .empty - case 1: - self = .single(elements[0]) - case 2: - self = .pair(elements[0], elements[1]) - default: - self = .array(elements) - } - } - - func dropLast() -> Storage { - switch self { - case .empty: - return .empty - case .single(_): - return .empty - case .pair(let first, _): - return .single(first) - case .array(let indexes): - switch indexes.count { - case 3: - return .pair(indexes[0], indexes[1]) - default: - return .array(Array(indexes.dropLast())) - } - } - } - - mutating func append(_ other: Int) { - switch self { - case .empty: - self = .single(other) - case .single(let first): - self = .pair(first, other) - case .pair(let first, let second): - self = .array([first, second, other]) - case .array(let indexes): - self = .array(indexes + [other]) - } - } - - mutating func append(contentsOf other: Storage) { - switch self { - case .empty: - switch other { - case .empty: - // DO NOTHING - break - case .single(let rhsIndex): - self = .single(rhsIndex) - case .pair(let rhsFirst, let rhsSecond): - self = .pair(rhsFirst, rhsSecond) - case .array(let rhsIndexes): - self = .array(rhsIndexes) - } - case .single(let lhsIndex): - switch other { - case .empty: - // DO NOTHING - break - case .single(let rhsIndex): - self = .pair(lhsIndex, rhsIndex) - case .pair(let rhsFirst, let rhsSecond): - self = .array([lhsIndex, rhsFirst, rhsSecond]) - case .array(let rhsIndexes): - self = .array([lhsIndex] + rhsIndexes) - } - case .pair(let lhsFirst, let lhsSecond): - switch other { - case .empty: - // DO NOTHING - break - case .single(let rhsIndex): - self = .array([lhsFirst, lhsSecond, rhsIndex]) - case .pair(let rhsFirst, let rhsSecond): - self = .array([lhsFirst, lhsSecond, rhsFirst, rhsSecond]) - case .array(let rhsIndexes): - self = .array([lhsFirst, lhsSecond] + rhsIndexes) - } - case .array(let lhsIndexes): - switch other { - case .empty: - // DO NOTHING - break - case .single(let rhsIndex): - self = .array(lhsIndexes + [rhsIndex]) - case .pair(let rhsFirst, let rhsSecond): - self = .array(lhsIndexes + [rhsFirst, rhsSecond]) - case .array(let rhsIndexes): - self = .array(lhsIndexes + rhsIndexes) - } - } - } - - mutating func append(contentsOf other: __owned [Int]) { - switch self { - case .empty: - switch other.count { - case 0: - // DO NOTHING - break - case 1: - self = .single(other[0]) - case 2: - self = .pair(other[0], other[1]) - default: - self = .array(other) - } - case .single(let first): - switch other.count { - case 0: - // DO NOTHING - break - case 1: - self = .pair(first, other[0]) - default: - self = .array([first] + other) - } - case .pair(let first, let second): - switch other.count { - case 0: - // DO NOTHING - break - default: - self = .array([first, second] + other) - } - case .array(let indexes): - self = .array(indexes + other) - } - } - - subscript(_ index: Int) -> Int { - get { - switch self { - case .empty: - fatalError("Index \(index) out of bounds of count 0") - case .single(let first): - precondition(index == 0, "Index \(index) out of bounds of count 1") - return first - case .pair(let first, let second): - precondition(index >= 0 && index < 2, "Index \(index) out of bounds of count 2") - return index == 0 ? first : second - case .array(let indexes): - return indexes[index] - } - } - set { - switch self { - case .empty: - fatalError("Index \(index) out of bounds of count 0") - case .single(_): - precondition(index == 0, "Index \(index) out of bounds of count 1") - self = .single(newValue) - case .pair(let first, let second): - precondition(index >= 0 && index < 2, "Index \(index) out of bounds of count 2") - if index == 0 { - self = .pair(newValue, second) - } else { - self = .pair(first, newValue) - } - case .array(let indexes_): - var indexes = indexes_ - indexes[index] = newValue - self = .array(indexes) - } - } - } - - subscript(range: Range) -> Storage { - get { - switch self { - case .empty: - switch (range.lowerBound, range.upperBound) { - case (0, 0): - return .empty - default: - fatalError("Range \(range) is out of bounds of count 0") - } - case .single(let index): - switch (range.lowerBound, range.upperBound) { - case (0, 0), - (1, 1): - return .empty - case (0, 1): - return .single(index) - default: - fatalError("Range \(range) is out of bounds of count 1") - } - case .pair(let first, let second): - switch (range.lowerBound, range.upperBound) { - case (0, 0), - (1, 1), - (2, 2): - return .empty - case (0, 1): - return .single(first) - case (1, 2): - return .single(second) - case (0, 2): - return self - default: - fatalError("Range \(range) is out of bounds of count 2") - } - case .array(let indexes): - let slice = indexes[range] - switch slice.count { - case 0: - return .empty - case 1: - return .single(slice.first!) - case 2: - return .pair(slice.first!, slice.last!) - default: - return .array(Array(slice)) - } - } - } - set { - switch self { - case .empty: - precondition(range.lowerBound == 0 && range.upperBound == 0, "Range \(range) is out of bounds of count 0") - self = newValue - case .single(let index): - switch (range.lowerBound, range.upperBound, newValue) { - case (0, 0, .empty), - (1, 1, .empty): - break - case (0, 0, .single(let other)): - self = .pair(other, index) - case (0, 0, .pair(let first, let second)): - self = .array([first, second, index]) - case (0, 0, .array(let other)): - self = .array(other + [index]) - case (0, 1, .empty), - (0, 1, .single), - (0, 1, .pair), - (0, 1, .array): - self = newValue - case (1, 1, .single(let other)): - self = .pair(index, other) - case (1, 1, .pair(let first, let second)): - self = .array([index, first, second]) - case (1, 1, .array(let other)): - self = .array([index] + other) - default: - fatalError("Range \(range) is out of bounds of count 1") - } - case .pair(let first, let second): - switch (range.lowerBound, range.upperBound) { - case (0, 0): - switch newValue { - case .empty: - break - case .single(let other): - self = .array([other, first, second]) - case .pair(let otherFirst, let otherSecond): - self = .array([otherFirst, otherSecond, first, second]) - case .array(let other): - self = .array(other + [first, second]) - } - case (0, 1): - switch newValue { - case .empty: - self = .single(second) - case .single(let other): - self = .pair(other, second) - case .pair(let otherFirst, let otherSecond): - self = .array([otherFirst, otherSecond, second]) - case .array(let other): - self = .array(other + [second]) - } - case (0, 2): - self = newValue - case (1, 2): - switch newValue { - case .empty: - self = .single(first) - case .single(let other): - self = .pair(first, other) - case .pair(let otherFirst, let otherSecond): - self = .array([first, otherFirst, otherSecond]) - case .array(let other): - self = .array([first] + other) - } - case (2, 2): - switch newValue { - case .empty: - break - case .single(let other): - self = .array([first, second, other]) - case .pair(let otherFirst, let otherSecond): - self = .array([first, second, otherFirst, otherSecond]) - case .array(let other): - self = .array([first, second] + other) - } - default: - fatalError("Range \(range) is out of bounds of count 2") - } - case .array(let indexes): - var newIndexes = indexes - newIndexes.removeSubrange(range) - switch newValue { - case .empty: - break - case .single(let index): - newIndexes.insert(index, at: range.lowerBound) - case .pair(let first, let second): - newIndexes.insert(first, at: range.lowerBound) - newIndexes.insert(second, at: range.lowerBound + 1) - case .array(let other): - newIndexes.insert(contentsOf: other, at: range.lowerBound) - } - self = Storage(newIndexes) - } - } - } - - var count: Int { - switch self { - case .empty: - return 0 - case .single: - return 1 - case .pair: - return 2 - case .array(let indexes): - return indexes.count - } - } - - var startIndex: Int { - return 0 - } - - var endIndex: Int { - return count - } - - var allValues: [Int] { - switch self { - case .empty: return [] - case .single(let index): return [index] - case .pair(let first, let second): return [first, second] - case .array(let indexes): return indexes - } - } - - func index(before i: Int) -> Int { - return i - 1 - } - - func index(after i: Int) -> Int { - return i + 1 - } - - var description: String { - switch self { - case .empty: - return "[]" - case .single(let index): - return "[\(index)]" - case .pair(let first, let second): - return "[\(first), \(second)]" - case .array(let indexes): - return indexes.description - } - } - - func withUnsafeBufferPointer(_ body: (UnsafeBufferPointer) throws -> R) rethrows -> R { - switch self { - case .empty: - return try body(UnsafeBufferPointer(start: nil, count: 0)) - case .single(let index_): - var index = index_ - return try withUnsafePointer(to: &index) { (start) throws -> R in - return try body(UnsafeBufferPointer(start: start, count: 1)) - } - case .pair(let first, let second): - var pair = (first, second) - return try withUnsafeBytes(of: &pair) { (rawBuffer: UnsafeRawBufferPointer) throws -> R in - return try body(UnsafeBufferPointer(start: rawBuffer.baseAddress?.assumingMemoryBound(to: Int.self), count: 2)) - } - case .array(let indexes): - return try indexes.withUnsafeBufferPointer(body) - } - } - - var debugDescription: String { return description } - - static func +(lhs: Storage, rhs: Storage) -> Storage { - var res = lhs - res.append(contentsOf: rhs) - return res - } - - static func +(lhs: Storage, rhs: [Int]) -> Storage { - var res = lhs - res.append(contentsOf: rhs) - return res - } - - static func ==(lhs: Storage, rhs: Storage) -> Bool { - switch (lhs, rhs) { - case (.empty, .empty): - return true - case (.single(let lhsIndex), .single(let rhsIndex)): - return lhsIndex == rhsIndex - case (.pair(let lhsFirst, let lhsSecond), .pair(let rhsFirst, let rhsSecond)): - return lhsFirst == rhsFirst && lhsSecond == rhsSecond - case (.array(let lhsIndexes), .array(let rhsIndexes)): - return lhsIndexes == rhsIndexes - default: - return false - } - } - } - - fileprivate var _indexes : Storage - - /// Initialize an empty index path. - public init() { - _indexes = [] - } - - /// Initialize with a sequence of integers. - public init(indexes: ElementSequence) - where ElementSequence.Iterator.Element == Element { - _indexes = Storage(indexes.map { $0 }) - } - - /// Initialize with an array literal. - public init(arrayLiteral indexes: Element...) { - _indexes = Storage(indexes) - } - - /// Initialize with an array of elements. - public init(indexes: Array) { - _indexes = Storage(indexes) - } - - fileprivate init(storage: Storage) { - _indexes = storage - } - - /// Initialize with a single element. - public init(index: Element) { - _indexes = [index] - } - - /// Return a new `IndexPath` containing all but the last element. - public func dropLast() -> IndexPath { - return IndexPath(storage: _indexes.dropLast()) - } - - /// Append an `IndexPath` to `self`. - public mutating func append(_ other: IndexPath) { - _indexes.append(contentsOf: other._indexes) - } - - /// Append a single element to `self`. - public mutating func append(_ other: Element) { - _indexes.append(other) - } - - /// Append an array of elements to `self`. - public mutating func append(_ other: Array) { - _indexes.append(contentsOf: other) - } - - /// Return a new `IndexPath` containing the elements in self and the elements in `other`. - public func appending(_ other: Element) -> IndexPath { - var result = _indexes - result.append(other) - return IndexPath(storage: result) - } - - /// Return a new `IndexPath` containing the elements in self and the elements in `other`. - public func appending(_ other: IndexPath) -> IndexPath { - return IndexPath(storage: _indexes + other._indexes) - } - - /// Return a new `IndexPath` containing the elements in self and the elements in `other`. - public func appending(_ other: Array) -> IndexPath { - return IndexPath(storage: _indexes + other) - } - - public subscript(index: Index) -> Element { - get { - return _indexes[index] - } - set { - _indexes[index] = newValue - } - } - - public subscript(range: Range) -> IndexPath { - get { - return IndexPath(storage: _indexes[range]) - } - set { - _indexes[range] = newValue._indexes - } - } - - public func makeIterator() -> IndexingIterator { - return IndexingIterator(_elements: self) - } - - public var count: Int { - return _indexes.count - } - - public var startIndex: Index { - return _indexes.startIndex - } - - public var endIndex: Index { - return _indexes.endIndex - } - - public func index(before i: Index) -> Index { - return _indexes.index(before: i) - } - - public func index(after i: Index) -> Index { - return _indexes.index(after: i) - } - - /// Sorting an array of `IndexPath` using this comparison results in an array representing nodes in depth-first traversal order. - public func compare(_ other: IndexPath) -> ComparisonResult { - let thisLength = count - let otherLength = other.count - let length = Swift.min(thisLength, otherLength) - for idx in 0.. otherValue { - return .orderedDescending - } - } - if thisLength > otherLength { - return .orderedDescending - } else if thisLength < otherLength { - return .orderedAscending - } - return .orderedSame - } - - public func hash(into hasher: inout Hasher) { - // Note: We compare all indices in ==, so for proper hashing, we must - // also feed them all to the hasher. - // - // To ensure we have unique hash encodings in nested hashing contexts, - // we combine the count of indices as well as the indices themselves. - // (This matches what Array does.) - switch _indexes { - case .empty: - hasher.combine(0) - case let .single(index): - hasher.combine(1) - hasher.combine(index) - case let .pair(first, second): - hasher.combine(2) - hasher.combine(first) - hasher.combine(second) - case let .array(indexes): - hasher.combine(indexes.count) - for index in indexes { - hasher.combine(index) - } - } - } - - // MARK: - Bridging Helpers - - fileprivate init(nsIndexPath: __shared ReferenceType) { - let count = nsIndexPath.length - switch count { - case 0: - _indexes = [] - case 1: - _indexes = .single(nsIndexPath.index(atPosition: 0)) - case 2: - _indexes = .pair(nsIndexPath.index(atPosition: 0), nsIndexPath.index(atPosition: 1)) - default: - let indexes = Array(unsafeUninitializedCapacity: count) { buffer, initializedCount in - nsIndexPath.getIndexes(buffer.baseAddress!, range: NSRange(location: 0, length: count)) - initializedCount = count - } - _indexes = .array(indexes) - } - } - - fileprivate func makeReference() -> ReferenceType { - switch _indexes { - case .empty: - return ReferenceType() - case .single(let index): - return ReferenceType(index: index) - case .pair(let first, let second): - return _NSIndexPathCreateFromIndexes(first, second) as! ReferenceType - default: - return _indexes.withUnsafeBufferPointer { - return ReferenceType(indexes: $0.baseAddress, length: $0.count) - } - } - } - - public static func ==(lhs: IndexPath, rhs: IndexPath) -> Bool { - return lhs._indexes == rhs._indexes - } - - public static func +(lhs: IndexPath, rhs: IndexPath) -> IndexPath { - return lhs.appending(rhs) - } - - public static func +=(lhs: inout IndexPath, rhs: IndexPath) { - lhs.append(rhs) - } - - public static func <(lhs: IndexPath, rhs: IndexPath) -> Bool { - return lhs.compare(rhs) == ComparisonResult.orderedAscending - } - - public static func <=(lhs: IndexPath, rhs: IndexPath) -> Bool { - let order = lhs.compare(rhs) - return order == ComparisonResult.orderedAscending || order == ComparisonResult.orderedSame - } - - public static func >(lhs: IndexPath, rhs: IndexPath) -> Bool { - return lhs.compare(rhs) == ComparisonResult.orderedDescending - } - - public static func >=(lhs: IndexPath, rhs: IndexPath) -> Bool { - let order = lhs.compare(rhs) - return order == ComparisonResult.orderedDescending || order == ComparisonResult.orderedSame - } -} - -extension IndexPath : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - public var description: String { - return _indexes.description - } - - public var debugDescription: String { - return _indexes.debugDescription - } - - public var customMirror: Mirror { - return Mirror(self, unlabeledChildren: self, displayStyle: .collection) - } -} - -extension IndexPath : _ObjectiveCBridgeable { - public static func _getObjectiveCType() -> Any.Type { - return NSIndexPath.self - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSIndexPath { - return makeReference() - } - - public static func _forceBridgeFromObjectiveC(_ x: NSIndexPath, result: inout IndexPath?) { - result = IndexPath(nsIndexPath: x) - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSIndexPath, result: inout IndexPath?) -> Bool { - result = IndexPath(nsIndexPath: x) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSIndexPath?) -> IndexPath { - guard let src = source else { return IndexPath() } - return IndexPath(nsIndexPath: src) - } -} - -extension NSIndexPath : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as IndexPath) - } -} - -extension IndexPath : Codable { - private enum CodingKeys : Int, CodingKey { - case indexes - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - var indexesContainer = try container.nestedUnkeyedContainer(forKey: .indexes) - - var indexes = [Int]() - if let count = indexesContainer.count { - indexes.reserveCapacity(count) - } - - while !indexesContainer.isAtEnd { - let index = try indexesContainer.decode(Int.self) - indexes.append(index) - } - - self.init(indexes: indexes) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - var indexesContainer = container.nestedUnkeyedContainer(forKey: .indexes) - switch self._indexes { - case .empty: - break - case .single(let index): - try indexesContainer.encode(index) - case .pair(let first, let second): - try indexesContainer.encode(first) - try indexesContainer.encode(second) - case .array(let indexes): - try indexesContainer.encode(contentsOf: indexes) - } - } -} diff --git a/Darwin/Foundation-swiftoverlay/IndexSet.swift b/Darwin/Foundation-swiftoverlay/IndexSet.swift deleted file mode 100644 index daf68cec1e..0000000000 --- a/Darwin/Foundation-swiftoverlay/IndexSet.swift +++ /dev/null @@ -1,899 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -@_implementationOnly import _FoundationOverlayShims - -extension IndexSet.Index { - public static func ==(lhs: IndexSet.Index, rhs: IndexSet.Index) -> Bool { - return lhs.value == rhs.value - } - - public static func <(lhs: IndexSet.Index, rhs: IndexSet.Index) -> Bool { - return lhs.value < rhs.value - } - - public static func <=(lhs: IndexSet.Index, rhs: IndexSet.Index) -> Bool { - return lhs.value <= rhs.value - } - - public static func >(lhs: IndexSet.Index, rhs: IndexSet.Index) -> Bool { - return lhs.value > rhs.value - } - - public static func >=(lhs: IndexSet.Index, rhs: IndexSet.Index) -> Bool { - return lhs.value >= rhs.value - } -} - -extension IndexSet.RangeView { - public static func ==(lhs: IndexSet.RangeView, rhs: IndexSet.RangeView) -> Bool { - return lhs.startIndex == rhs.startIndex && lhs.endIndex == rhs.endIndex && lhs.indexSet == rhs.indexSet - } -} - -/// Manages a `Set` of integer values, which are commonly used as an index type in Cocoa API. -/// -/// The range of valid integer values is 0..?) { - if let r = range { - let otherIndexes = IndexSet(integersIn: r) - self.indexSet = indexSet.intersection(otherIndexes) - } else { - self.indexSet = indexSet - } - - self.startIndex = 0 - self.endIndex = self.indexSet._rangeCount - } - - public func makeIterator() -> IndexingIterator { - return IndexingIterator(_elements: self) - } - - public subscript(index : Index) -> Range { - let indexSetRange = indexSet._range(at: index) - return indexSetRange.lowerBound..) -> Slice { - return Slice(base: self, bounds: bounds) - } - - public func index(after i: Index) -> Index { - return i + 1 - } - - public func index(before i: Index) -> Index { - return i - 1 - } - - } - - /// The mechanism for accessing the integers stored in an IndexSet. - public struct Index : CustomStringConvertible, Comparable { - fileprivate var value: IndexSet.Element - fileprivate var extent: Range - fileprivate var rangeIndex: Int - fileprivate let rangeCount: Int - - fileprivate init(value: Int, extent: Range, rangeIndex: Int, rangeCount: Int) { - self.value = value - self.extent = extent - self.rangeCount = rangeCount - self.rangeIndex = rangeIndex - } - - public var description: String { - return "index \(value) in a range of \(extent) [range #\(rangeIndex + 1)/\(rangeCount)]" - } - } - - public typealias ReferenceType = NSIndexSet - public typealias Element = Int - - private var _handle: _MutablePairHandle - - /// Initialize an `IndexSet` with a range of integers. - public init(integersIn range: Range) { - _handle = _MutablePairHandle(NSIndexSet(indexesIn: _toNSRange(range)), copying: false) - } - - /// Initialize an `IndexSet` with a range of integers. - public init(integersIn range: R) where R.Bound == Element { - self.init(integersIn: range.relative(to: 0.. IndexingIterator { - return IndexingIterator(_elements: self) - } - - /// Returns a `Range`-based view of the entire contents of `self`. - /// - /// - seealso: rangeView(of:) - public var rangeView: RangeView { - return RangeView(indexSet: self, intersecting: nil) - } - - /// Returns a `Range`-based view of `self`. - /// - /// - parameter range: A subrange of `self` to view. - public func rangeView(of range : Range) -> RangeView { - return RangeView(indexSet: self, intersecting: range) - } - - /// Returns a `Range`-based view of `self`. - /// - /// - parameter range: A subrange of `self` to view. - public func rangeView(of range : R) -> RangeView where R.Bound == Element { - return self.rangeView(of: range.relative(to: 0.. RangeView.Index? { - let result = _handle.map { - __NSIndexSetIndexOfRangeContainingIndex($0, integer) - } - if result == NSNotFound { - return nil - } else { - return Int(result) - } - } - - private func _range(at index: RangeView.Index) -> Range { - return _handle.map { - var location: Int = 0 - var length: Int = 0 - __NSIndexSetRangeAtIndex($0, index, &location, &length) - return Int(location).. 0 { - // If this winds up being NSNotFound, that's ok because then endIndex is also NSNotFound, and empty collections have startIndex == endIndex - let extent = _range(at: 0) - return Index(value: extent.lowerBound, extent: extent, rangeIndex: 0, rangeCount: _rangeCount) - } else { - return Index(value: 0, extent: 0..<0, rangeIndex: -1, rangeCount: rangeCount) - } - } - - public var endIndex: Index { - let rangeCount = _rangeCount - let rangeIndex = rangeCount - 1 - let extent: Range - let value: Int - if rangeCount > 0 { - extent = _range(at: rangeCount - 1) - value = extent.upperBound // "1 past the end" position is the last range, 1 + the end of that range's extent - } else { - extent = 0..<0 - value = 0 - } - - return Index(value: value, extent: extent, rangeIndex: rangeIndex, rangeCount: rangeCount) - } - - public subscript(index : Index) -> Element { - return index.value - } - - public subscript(bounds: Range) -> Slice { - return Slice(base: self, bounds: bounds) - } - - // We adopt the default implementation of subscript(range: Range) from MutableCollection - - private func _toOptional(_ x : Int) -> Int? { - if x == NSNotFound { return nil } else { return x } - } - - /// Returns the first integer in `self`, or nil if `self` is empty. - public var first: Element? { - return _handle.map { _toOptional($0.firstIndex) } - } - - /// Returns the last integer in `self`, or nil if `self` is empty. - public var last: Element? { - return _handle.map { _toOptional($0.lastIndex) } - } - - /// Returns an integer contained in `self` which is greater than `integer`, or `nil` if a result could not be found. - public func integerGreaterThan(_ integer: Element) -> Element? { - return _handle.map { _toOptional($0.indexGreaterThanIndex(integer)) } - } - - /// Returns an integer contained in `self` which is less than `integer`, or `nil` if a result could not be found. - public func integerLessThan(_ integer: Element) -> Element? { - return _handle.map { _toOptional($0.indexLessThanIndex(integer)) } - } - - /// Returns an integer contained in `self` which is greater than or equal to `integer`, or `nil` if a result could not be found. - public func integerGreaterThanOrEqualTo(_ integer: Element) -> Element? { - return _handle.map { _toOptional($0.indexGreaterThanOrEqual(to: integer)) } - } - - /// Returns an integer contained in `self` which is less than or equal to `integer`, or `nil` if a result could not be found. - public func integerLessThanOrEqualTo(_ integer: Element) -> Element? { - return _handle.map { _toOptional($0.indexLessThanOrEqual(to: integer)) } - } - - /// Return a `Range` which can be used to subscript the index set. - /// - /// The resulting range is the range of the intersection of the integers in `range` with the index set. The resulting range will be `isEmpty` if the intersection is empty. - /// - /// - parameter range: The range of integers to include. - public func indexRange(in range: Range) -> Range { - guard !range.isEmpty, let first = first, let last = last else { - let i = _index(ofInteger: 0) - return i.. last || (range.upperBound - 1) < first { - let i = _index(ofInteger: 0) - return i..` which can be used to subscript the index set. - /// - /// The resulting range is the range of the intersection of the integers in `range` with the index set. - /// - /// - parameter range: The range of integers to include. - public func indexRange(in range: R) -> Range where R.Bound == Element { - return self.indexRange(in: range.relative(to: 0..) -> Int { - return _handle.map { $0.countOfIndexes(in: _toNSRange(range)) } - } - - /// Returns the count of integers in `self` that intersect `range`. - public func count(in range: R) -> Int where R.Bound == Element { - return self.count(in: range.relative(to: 0.. Bool { - return _handle.map { $0.contains(integer) } - } - - /// Returns `true` if `self` contains all of the integers in `range`. - public func contains(integersIn range: Range) -> Bool { - return _handle.map { $0.contains(in: _toNSRange(range)) } - } - - /// Returns `true` if `self` contains all of the integers in `range`. - public func contains(integersIn range: R) -> Bool where R.Bound == Element { - return self.contains(integersIn: range.relative(to: 0.. Bool { - return _handle.map { $0.contains(indexSet) } - } - - /// Returns `true` if `self` intersects any of the integers in `range`. - public func intersects(integersIn range: Range) -> Bool { - return _handle.map { $0.intersects(in: _toNSRange(range)) } - } - - /// Returns `true` if `self` intersects any of the integers in `range`. - public func intersects(integersIn range: R) -> Bool where R.Bound == Element { - return self.intersects(integersIn: range.relative(to: 0.. Index { - if i.value + 1 == i.extent.upperBound { - // Move to the next range - if i.rangeIndex + 1 == i.rangeCount { - // We have no more to go; return a 'past the end' index - return Index(value: i.value + 1, extent: i.extent, rangeIndex: i.rangeIndex, rangeCount: i.rangeCount) - } else { - let rangeIndex = i.rangeIndex + 1 - let rangeCount = i.rangeCount - let extent = _range(at: rangeIndex) - let value = extent.lowerBound - return Index(value: value, extent: extent, rangeIndex: rangeIndex, rangeCount: rangeCount) - } - } else { - // Move to the next value in this range - return Index(value: i.value + 1, extent: i.extent, rangeIndex: i.rangeIndex, rangeCount: i.rangeCount) - } - } - - public func formIndex(after i: inout Index) { - if i.value + 1 == i.extent.upperBound { - // Move to the next range - if i.rangeIndex + 1 == i.rangeCount { - // We have no more to go; return a 'past the end' index - i.value += 1 - } else { - i.rangeIndex += 1 - i.extent = _range(at: i.rangeIndex) - i.value = i.extent.lowerBound - } - } else { - // Move to the next value in this range - i.value += 1 - } - } - - public func index(before i: Index) -> Index { - if i.value == i.extent.lowerBound { - // Move to the next range - if i.rangeIndex == 0 { - // We have no more to go - return Index(value: i.value, extent: i.extent, rangeIndex: i.rangeIndex, rangeCount: i.rangeCount) - } else { - let rangeIndex = i.rangeIndex - 1 - let rangeCount = i.rangeCount - let extent = _range(at: rangeIndex) - let value = extent.upperBound - 1 - return Index(value: value, extent: extent, rangeIndex: rangeIndex, rangeCount: rangeCount) - } - } else { - // Move to the previous value in this range - return Index(value: i.value - 1, extent: i.extent, rangeIndex: i.rangeIndex, rangeCount: i.rangeCount) - } - } - - public func formIndex(before i: inout Index) { - if i.value == i.extent.lowerBound { - // Move to the next range - if i.rangeIndex == 0 { - // We have no more to go - } else { - i.rangeIndex -= 1 - i.extent = _range(at: i.rangeIndex) - i.value = i.extent.upperBound - 1 - } - } else { - // Move to the previous value in this range - i.value -= 1 - } - } - - private func _index(ofInteger integer: Element) -> Index { - let rangeCount = _rangeCount - let value = integer - if let rangeIndex = _indexOfRange(containing: integer) { - let extent = _range(at: rangeIndex) - let rangeIndex = rangeIndex - return Index(value: value, extent: extent, rangeIndex: rangeIndex, rangeCount: rangeCount) - } else { - let extent = 0..<0 - let rangeIndex = 0 - return Index(value: value, extent: extent, rangeIndex: rangeIndex, rangeCount: rangeCount) - } - } - - // MARK: - - // MARK: SetAlgebra - - /// Union the `IndexSet` with `other`. - public mutating func formUnion(_ other: IndexSet) { - self = self.union(other) - } - - /// Union the `IndexSet` with `other`. - public func union(_ other: IndexSet) -> IndexSet { - var result: IndexSet - var dense: IndexSet - - // Prepare to make a copy of the more sparse IndexSet to prefer copy over repeated inserts - if self.rangeView.count > other.rangeView.count { - result = self - dense = other - } else { - result = other - dense = self - } - - // Insert each range from the less sparse IndexSet - dense.rangeView.forEach { - result.insert(integersIn: $0) - } - - return result - } - - /// Exclusive or the `IndexSet` with `other`. - public func symmetricDifference(_ other: IndexSet) -> IndexSet { - var result = IndexSet() - var boundaryIterator = IndexSetBoundaryIterator(self, other) - var flag = false - var start = 0 - - while let i = boundaryIterator.next() { - if !flag { - // Start a range if one set contains but not the other. - if self.contains(i) != other.contains(i) { - flag = true - start = i - } - } else { - // End a range if both sets contain or both sets do not contain. - if self.contains(i) == other.contains(i) { - flag = false - result.insert(integersIn: start.. IndexSet { - var result = IndexSet() - var boundaryIterator = IndexSetBoundaryIterator(self, other) - var flag = false - var start = 0 - - while let i = boundaryIterator.next() { - if !flag { - // If both sets contain then start a range. - if self.contains(i) && other.contains(i) { - flag = true - start = i - } - } else { - // If both sets do not contain then end a range. - if !self.contains(i) || !other.contains(i) { - flag = false - result.insert(integersIn: start.. (inserted: Bool, memberAfterInsert: Element) { - _applyMutation { $0.add(integer) } - // TODO: figure out how to return the truth here - return (true, integer) - } - - /// Insert an integer into the `IndexSet`. - @discardableResult - public mutating func update(with integer: Element) -> Element? { - _applyMutation { $0.add(integer) } - // TODO: figure out how to return the truth here - return integer - } - - - /// Remove an integer from the `IndexSet`. - @discardableResult - public mutating func remove(_ integer: Element) -> Element? { - // TODO: Add method to NSIndexSet to do this in one call - let result : Element? = contains(integer) ? integer : nil - _applyMutation { $0.remove(integer) } - return result - } - - // MARK: - - - /// Remove all values from the `IndexSet`. - public mutating func removeAll() { - _applyMutation { $0.removeAllIndexes() } - } - - /// Insert a range of integers into the `IndexSet`. - public mutating func insert(integersIn range: Range) { - _applyMutation { $0.add(in: _toNSRange(range)) } - } - - /// Insert a range of integers into the `IndexSet`. - public mutating func insert(integersIn range: R) where R.Bound == Element { - self.insert(integersIn: range.relative(to: 0..) { - _applyMutation { $0.remove(in: _toNSRange(range)) } - } - - /// Remove a range of integers from the `IndexSet`. - public mutating func remove(integersIn range: ClosedRange) { - self.remove(integersIn: Range(range)) - } - - /// Returns `true` if self contains no values. - public var isEmpty : Bool { - return self.count == 0 - } - - /// Returns an IndexSet filtered according to the result of `includeInteger`. - /// - /// - parameter range: A range of integers. For each integer in the range that intersects the integers in the IndexSet, then the `includeInteger` predicate will be invoked. - /// - parameter includeInteger: The predicate which decides if an integer will be included in the result or not. - public func filteredIndexSet(in range : Range, includeInteger: (Element) throws -> Bool) rethrows -> IndexSet { - let r : NSRange = _toNSRange(range) - return try _handle.map { - var error: Error? - let result = $0.indexes(in: r, options: [], passingTest: { (i, stop) -> Bool in - do { - let include = try includeInteger(i) - return include - } catch let e { - error = e - stop.pointee = true - return false - } - }) - if let e = error { - throw e - } else { - return result - } - } - } - - /// Returns an IndexSet filtered according to the result of `includeInteger`. - /// - /// - parameter range: A range of integers. For each integer in the range that intersects the integers in the IndexSet, then the `includeInteger` predicate will be invoked. - /// - parameter includeInteger: The predicate which decides if an integer will be included in the result or not. - public func filteredIndexSet(in range : ClosedRange, includeInteger: (Element) throws -> Bool) rethrows -> IndexSet { - return try self.filteredIndexSet(in: Range(range), includeInteger: includeInteger) - } - - /// Returns an IndexSet filtered according to the result of `includeInteger`. - /// - /// - parameter includeInteger: The predicate which decides if an integer will be included in the result or not. - public func filteredIndexSet(includeInteger: (Element) throws -> Bool) rethrows -> IndexSet { - return try self.filteredIndexSet(in: 0..(_ whatToDo : (NSMutableIndexSet) throws -> ReturnType) rethrows -> ReturnType { - // This check is done twice because: Value kept live for too long causing uniqueness check to fail - var unique = true - switch _handle._pointer { - case .Default(_): - break - case .Mutable(_): - unique = isKnownUniquelyReferenced(&_handle) - } - - switch _handle._pointer { - case .Default(let i): - // We need to become mutable; by creating a new box we also become unique - let copy = i.mutableCopy() as! NSMutableIndexSet - // Be sure to set the _handle before calling out; otherwise references to the struct in the closure may be looking at the old _handle - _handle = _MutablePairHandle(copy, copying: false) - let result = try whatToDo(copy) - return result - case .Mutable(let m): - // Only create a new box if we are not uniquely referenced - if !unique { - let copy = m.mutableCopy() as! NSMutableIndexSet - _handle = _MutablePairHandle(copy, copying: false) - let result = try whatToDo(copy) - return result - } else { - return try whatToDo(m) - } - } - } - - // MARK: - Bridging Support - - private var reference: NSIndexSet { - return _handle.reference - } - - private init(reference: __shared NSIndexSet) { - _handle = _MutablePairHandle(reference) - } -} - -extension IndexSet : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - public var description: String { - return "\(count) indexes" - } - - public var debugDescription: String { - return "\(count) indexes" - } - - public var customMirror: Mirror { - var c: [(label: String?, value: Any)] = [] - c.append((label: "ranges", value: Array(rangeView))) - return Mirror(self, children: c, displayStyle: Mirror.DisplayStyle.struct) - } -} - -/// Iterate two index sets on the boundaries of their ranges. This is where all of the interesting stuff happens for exclusive or, intersect, etc. -private struct IndexSetBoundaryIterator : IteratorProtocol { - typealias Element = IndexSet.Element - - private var i1: IndexSet.RangeView.Iterator - private var i2: IndexSet.RangeView.Iterator - private var i1Range: Range? - private var i2Range: Range? - private var i1UsedLower: Bool - private var i2UsedLower: Bool - - init(_ is1: IndexSet, _ is2: IndexSet) { - i1 = is1.rangeView.makeIterator() - i2 = is2.rangeView.makeIterator() - - i1Range = i1.next() - i2Range = i2.next() - - // A sort of cheap iterator on [i1Range.lowerBound, i1Range.upperBound] - i1UsedLower = false - i2UsedLower = false - } - - mutating func next() -> Element? { - if i1Range == nil && i2Range == nil { - return nil - } - - let nextIn1: Element - if let r = i1Range { - nextIn1 = i1UsedLower ? r.upperBound : r.lowerBound - } else { - nextIn1 = Int.max - } - - let nextIn2: Element - if let r = i2Range { - nextIn2 = i2UsedLower ? r.upperBound : r.lowerBound - } else { - nextIn2 = Int.max - } - - var result: Element - if nextIn1 <= nextIn2 { - // 1 has the next element, or they are the same. - result = nextIn1 - if i1UsedLower { i1Range = i1.next() } - // We need to iterate both the value from is1 and is2 in the == case. - if result == nextIn2 { - if i2UsedLower { i2Range = i2.next() } - i2UsedLower = !i2UsedLower - } - i1UsedLower = !i1UsedLower - } else { - // 2 has the next element - result = nextIn2 - if i2UsedLower { i2Range = i2.next() } - i2UsedLower = !i2UsedLower - } - - return result - } -} - -extension IndexSet { - public static func ==(lhs: IndexSet, rhs: IndexSet) -> Bool { - return lhs._handle.map { $0.isEqual(to: rhs) } - } -} - -private func _toNSRange(_ r: Range) -> NSRange { - return NSRange(location: r.lowerBound, length: r.upperBound - r.lowerBound) -} - -extension IndexSet : _ObjectiveCBridgeable { - public static func _getObjectiveCType() -> Any.Type { - return NSIndexSet.self - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSIndexSet { - return reference - } - - public static func _forceBridgeFromObjectiveC(_ x: NSIndexSet, result: inout IndexSet?) { - result = IndexSet(reference: x) - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSIndexSet, result: inout IndexSet?) -> Bool { - result = IndexSet(reference: x) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSIndexSet?) -> IndexSet { - guard let src = source else { return IndexSet() } - return IndexSet(reference: src) - } - -} - -extension NSIndexSet : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as IndexSet) - } -} - -// MARK: Protocol - -// TODO: This protocol should be replaced with a native Swift object like the other Foundation bridged types. However, NSIndexSet does not have an abstract zero-storage base class like NSCharacterSet, NSData, and NSAttributedString. Therefore the same trick of laying it out with Swift ref counting does not work.and -/// Holds either the immutable or mutable version of a Foundation type. -/// -/// In many cases, the immutable type has optimizations which make it preferred when we know we do not need mutation. -private enum _MutablePair { - case Default(ImmutableType) - case Mutable(MutableType) -} - -/// A class type which acts as a handle (pointer-to-pointer) to a Foundation reference type which has both an immutable and mutable class (e.g., NSData, NSMutableData). -/// -/// a.k.a. Box -private final class _MutablePairHandle - where ImmutableType : NSMutableCopying, MutableType : NSMutableCopying { - var _pointer: _MutablePair - - /// Initialize with an immutable reference instance. - /// - /// - parameter immutable: The thing to stash. - /// - parameter copying: Should be true unless you just created the instance (or called copy) and want to transfer ownership to this handle. - init(_ immutable: ImmutableType, copying: Bool = true) { - if copying { - self._pointer = _MutablePair.Default(immutable.copy() as! ImmutableType) - } else { - self._pointer = _MutablePair.Default(immutable) - } - } - - /// Initialize with a mutable reference instance. - /// - /// - parameter mutable: The thing to stash. - /// - parameter copying: Should be true unless you just created the instance (or called copy) and want to transfer ownership to this handle. - init(_ mutable: MutableType, copying: Bool = true) { - if copying { - self._pointer = _MutablePair.Mutable(mutable.mutableCopy() as! MutableType) - } else { - self._pointer = _MutablePair.Mutable(mutable) - } - } - - /// Apply a closure to the reference type, regardless if it is mutable or immutable. - @inline(__always) - func map(_ whatToDo: (ImmutableType) throws -> ReturnType) rethrows -> ReturnType { - switch _pointer { - case .Default(let i): - return try whatToDo(i) - case .Mutable(let m): - // TODO: It should be possible to reflect the constraint that MutableType is a subtype of ImmutableType in the generics for the class, but I haven't figured out how yet. For now, cheat and unsafe bit cast. - return try whatToDo(unsafeDowncast(m, to: ImmutableType.self)) - } - } - - var reference: ImmutableType { - switch _pointer { - case .Default(let i): - return i - case .Mutable(let m): - // TODO: It should be possible to reflect the constraint that MutableType is a subtype of ImmutableType in the generics for the class, but I haven't figured out how yet. For now, cheat and unsafe bit cast. - return unsafeDowncast(m, to: ImmutableType.self) - } - } -} - -extension IndexSet : Codable { - private enum CodingKeys : Int, CodingKey { - case indexes - } - - private enum RangeCodingKeys : Int, CodingKey { - case location - case length - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - var indexesContainer = try container.nestedUnkeyedContainer(forKey: .indexes) - self.init() - - while !indexesContainer.isAtEnd { - let rangeContainer = try indexesContainer.nestedContainer(keyedBy: RangeCodingKeys.self) - let startIndex = try rangeContainer.decode(Int.self, forKey: .location) - let count = try rangeContainer.decode(Int.self, forKey: .length) - self.insert(integersIn: startIndex ..< (startIndex + count)) - } - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - var indexesContainer = container.nestedUnkeyedContainer(forKey: .indexes) - - for range in self.rangeView { - var rangeContainer = indexesContainer.nestedContainer(keyedBy: RangeCodingKeys.self) - try rangeContainer.encode(range.startIndex, forKey: .location) - try rangeContainer.encode(range.count, forKey: .length) - } - } -} diff --git a/Darwin/Foundation-swiftoverlay/JSONEncoder.swift b/Darwin/Foundation-swiftoverlay/JSONEncoder.swift deleted file mode 100644 index bc35bb73b3..0000000000 --- a/Darwin/Foundation-swiftoverlay/JSONEncoder.swift +++ /dev/null @@ -1,2583 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -/// A marker protocol used to determine whether a value is a `String`-keyed `Dictionary` -/// containing `Encodable` values (in which case it should be exempt from key conversion strategies). -/// -/// NOTE: The architecture and environment check is due to a bug in the current (2018-08-08) Swift 4.2 -/// runtime when running on i386 simulator. The issue is tracked in https://bugs.swift.org/browse/SR-8276 -/// Making the protocol `internal` instead of `private` works around this issue. -/// Once SR-8276 is fixed, this check can be removed and the protocol always be made private. -#if arch(i386) || arch(arm) -internal protocol _JSONStringDictionaryEncodableMarker { } -#else -private protocol _JSONStringDictionaryEncodableMarker { } -#endif - -extension Dictionary : _JSONStringDictionaryEncodableMarker where Key == String, Value: Encodable { } - -/// A marker protocol used to determine whether a value is a `String`-keyed `Dictionary` -/// containing `Decodable` values (in which case it should be exempt from key conversion strategies). -/// -/// The marker protocol also provides access to the type of the `Decodable` values, -/// which is needed for the implementation of the key conversion strategy exemption. -/// -/// NOTE: Please see comment above regarding SR-8276 -#if arch(i386) || arch(arm) -internal protocol _JSONStringDictionaryDecodableMarker { - static var elementType: Decodable.Type { get } -} -#else -private protocol _JSONStringDictionaryDecodableMarker { - static var elementType: Decodable.Type { get } -} -#endif - -extension Dictionary : _JSONStringDictionaryDecodableMarker where Key == String, Value: Decodable { - static var elementType: Decodable.Type { return Value.self } -} - -//===----------------------------------------------------------------------===// -// JSON Encoder -//===----------------------------------------------------------------------===// - -/// `JSONEncoder` facilitates the encoding of `Encodable` values into JSON. -// NOTE: older overlays had Foundation.JSONEncoder as the ObjC name. -// The two must coexist, so it was renamed. The old name must not be -// used in the new runtime. _TtC10Foundation13__JSONEncoder is the -// mangled name for Foundation.__JSONEncoder. -@_objcRuntimeName(_TtC10Foundation13__JSONEncoder) -open class JSONEncoder { - // MARK: Options - - /// The formatting of the output JSON data. - public struct OutputFormatting : OptionSet { - /// The format's default value. - public let rawValue: UInt - - /// Creates an OutputFormatting value with the given raw value. - public init(rawValue: UInt) { - self.rawValue = rawValue - } - - /// Produce human-readable JSON with indented output. - public static let prettyPrinted = OutputFormatting(rawValue: 1 << 0) - - /// Produce JSON with dictionary keys sorted in lexicographic order. - @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) - public static let sortedKeys = OutputFormatting(rawValue: 1 << 1) - - /// By default slashes get escaped ("/" → "\/", "http://apple.com/" → "http:\/\/apple.com\/") - /// for security reasons, allowing outputted JSON to be safely embedded within HTML/XML. - /// In contexts where this escaping is unnecessary, the JSON is known to not be embedded, - /// or is intended only for display, this option avoids this escaping. - @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) - public static let withoutEscapingSlashes = OutputFormatting(rawValue: 1 << 3) - } - - /// The strategy to use for encoding `Date` values. - public enum DateEncodingStrategy { - /// Defer to `Date` for choosing an encoding. This is the default strategy. - case deferredToDate - - /// Encode the `Date` as a UNIX timestamp (as a JSON number). - case secondsSince1970 - - /// Encode the `Date` as UNIX millisecond timestamp (as a JSON number). - case millisecondsSince1970 - - /// Encode the `Date` as an ISO-8601-formatted string (in RFC 3339 format). - @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) - case iso8601 - - /// Encode the `Date` as a string formatted by the given formatter. - case formatted(DateFormatter) - - /// Encode the `Date` as a custom value encoded by the given closure. - /// - /// If the closure fails to encode a value into the given encoder, the encoder will encode an empty automatic container in its place. - case custom((Date, Encoder) throws -> Void) - } - - /// The strategy to use for encoding `Data` values. - public enum DataEncodingStrategy { - /// Defer to `Data` for choosing an encoding. - case deferredToData - - /// Encoded the `Data` as a Base64-encoded string. This is the default strategy. - case base64 - - /// Encode the `Data` as a custom value encoded by the given closure. - /// - /// If the closure fails to encode a value into the given encoder, the encoder will encode an empty automatic container in its place. - case custom((Data, Encoder) throws -> Void) - } - - /// The strategy to use for non-JSON-conforming floating-point values (IEEE 754 infinity and NaN). - public enum NonConformingFloatEncodingStrategy { - /// Throw upon encountering non-conforming values. This is the default strategy. - case `throw` - - /// Encode the values using the given representation strings. - case convertToString(positiveInfinity: String, negativeInfinity: String, nan: String) - } - - /// The strategy to use for automatically changing the value of keys before encoding. - public enum KeyEncodingStrategy { - /// Use the keys specified by each type. This is the default strategy. - case useDefaultKeys - - /// Convert from "camelCaseKeys" to "snake_case_keys" before writing a key to JSON payload. - /// - /// Capital characters are determined by testing membership in `CharacterSet.uppercaseLetters` and `CharacterSet.lowercaseLetters` (Unicode General Categories Lu and Lt). - /// The conversion to lower case uses `Locale.system`, also known as the ICU "root" locale. This means the result is consistent regardless of the current user's locale and language preferences. - /// - /// Converting from camel case to snake case: - /// 1. Splits words at the boundary of lower-case to upper-case - /// 2. Inserts `_` between words - /// 3. Lowercases the entire string - /// 4. Preserves starting and ending `_`. - /// - /// For example, `oneTwoThree` becomes `one_two_three`. `_oneTwoThree_` becomes `_one_two_three_`. - /// - /// - Note: Using a key encoding strategy has a nominal performance cost, as each string key has to be converted. - case convertToSnakeCase - - /// Provide a custom conversion to the key in the encoded JSON from the keys specified by the encoded types. - /// The full path to the current encoding position is provided for context (in case you need to locate this key within the payload). The returned key is used in place of the last component in the coding path before encoding. - /// If the result of the conversion is a duplicate key, then only one value will be present in the result. - case custom((_ codingPath: [CodingKey]) -> CodingKey) - - fileprivate static func _convertToSnakeCase(_ stringKey: String) -> String { - guard !stringKey.isEmpty else { return stringKey } - - var words : [Range] = [] - // The general idea of this algorithm is to split words on transition from lower to upper case, then on transition of >1 upper case characters to lowercase - // - // myProperty -> my_property - // myURLProperty -> my_url_property - // - // We assume, per Swift naming conventions, that the first character of the key is lowercase. - var wordStart = stringKey.startIndex - var searchRange = stringKey.index(after: wordStart)..1 capital letters. Turn those into a word, stopping at the capital before the lower case character. - let beforeLowerIndex = stringKey.index(before: lowerCaseRange.lowerBound) - words.append(upperCaseRange.lowerBound..(_ value: T) throws -> Data { - let encoder = __JSONEncoder(options: self.options) - - guard let topLevel = try encoder.box_(value) else { - throw EncodingError.invalidValue(value, - EncodingError.Context(codingPath: [], debugDescription: "Top-level \(T.self) did not encode any values.")) - } - - let writingOptions = JSONSerialization.WritingOptions(rawValue: self.outputFormatting.rawValue).union(.fragmentsAllowed) - do { - return try JSONSerialization.data(withJSONObject: topLevel, options: writingOptions) - } catch { - throw EncodingError.invalidValue(value, - EncodingError.Context(codingPath: [], debugDescription: "Unable to encode the given top-level value to JSON.", underlyingError: error)) - } - } -} - -// MARK: - __JSONEncoder - -// NOTE: older overlays called this class _JSONEncoder. -// The two must coexist without a conflicting ObjC class name, so it -// was renamed. The old name must not be used in the new runtime. -private class __JSONEncoder : Encoder { - // MARK: Properties - - /// The encoder's storage. - var storage: _JSONEncodingStorage - - /// Options set on the top-level encoder. - let options: JSONEncoder._Options - - /// The path to the current point in encoding. - public var codingPath: [CodingKey] - - /// Contextual user-provided information for use during encoding. - public var userInfo: [CodingUserInfoKey : Any] { - return self.options.userInfo - } - - // MARK: - Initialization - - /// Initializes `self` with the given top-level encoder options. - init(options: JSONEncoder._Options, codingPath: [CodingKey] = []) { - self.options = options - self.storage = _JSONEncodingStorage() - self.codingPath = codingPath - } - - /// Returns whether a new element can be encoded at this coding path. - /// - /// `true` if an element has not yet been encoded at this coding path; `false` otherwise. - var canEncodeNewValue: Bool { - // Every time a new value gets encoded, the key it's encoded for is pushed onto the coding path (even if it's a nil key from an unkeyed container). - // At the same time, every time a container is requested, a new value gets pushed onto the storage stack. - // If there are more values on the storage stack than on the coding path, it means the value is requesting more than one container, which violates the precondition. - // - // This means that anytime something that can request a new container goes onto the stack, we MUST push a key onto the coding path. - // Things which will not request containers do not need to have the coding path extended for them (but it doesn't matter if it is, because they will not reach here). - return self.storage.count == self.codingPath.count - } - - // MARK: - Encoder Methods - public func container(keyedBy: Key.Type) -> KeyedEncodingContainer { - // If an existing keyed container was already requested, return that one. - let topContainer: NSMutableDictionary - if self.canEncodeNewValue { - // We haven't yet pushed a container at this level; do so here. - topContainer = self.storage.pushKeyedContainer() - } else { - guard let container = self.storage.containers.last as? NSMutableDictionary else { - preconditionFailure("Attempt to push new keyed encoding container when already previously encoded at this path.") - } - - topContainer = container - } - - let container = _JSONKeyedEncodingContainer(referencing: self, codingPath: self.codingPath, wrapping: topContainer) - return KeyedEncodingContainer(container) - } - - public func unkeyedContainer() -> UnkeyedEncodingContainer { - // If an existing unkeyed container was already requested, return that one. - let topContainer: NSMutableArray - if self.canEncodeNewValue { - // We haven't yet pushed a container at this level; do so here. - topContainer = self.storage.pushUnkeyedContainer() - } else { - guard let container = self.storage.containers.last as? NSMutableArray else { - preconditionFailure("Attempt to push new unkeyed encoding container when already previously encoded at this path.") - } - - topContainer = container - } - - return _JSONUnkeyedEncodingContainer(referencing: self, codingPath: self.codingPath, wrapping: topContainer) - } - - public func singleValueContainer() -> SingleValueEncodingContainer { - return self - } -} - -// MARK: - Encoding Storage and Containers - -private struct _JSONEncodingStorage { - // MARK: Properties - - /// The container stack. - /// Elements may be any one of the JSON types (NSNull, NSNumber, NSString, NSArray, NSDictionary). - private(set) var containers: [NSObject] = [] - - // MARK: - Initialization - - /// Initializes `self` with no containers. - init() {} - - // MARK: - Modifying the Stack - - var count: Int { - return self.containers.count - } - - mutating func pushKeyedContainer() -> NSMutableDictionary { - let dictionary = NSMutableDictionary() - self.containers.append(dictionary) - return dictionary - } - - mutating func pushUnkeyedContainer() -> NSMutableArray { - let array = NSMutableArray() - self.containers.append(array) - return array - } - - mutating func push(container: __owned NSObject) { - self.containers.append(container) - } - - mutating func popContainer() -> NSObject { - precondition(!self.containers.isEmpty, "Empty container stack.") - return self.containers.popLast()! - } -} - -// MARK: - Encoding Containers - -private struct _JSONKeyedEncodingContainer : KeyedEncodingContainerProtocol { - typealias Key = K - - // MARK: Properties - - /// A reference to the encoder we're writing to. - private let encoder: __JSONEncoder - - /// A reference to the container we're writing to. - private let container: NSMutableDictionary - - /// The path of coding keys taken to get to this point in encoding. - private(set) public var codingPath: [CodingKey] - - // MARK: - Initialization - - /// Initializes `self` with the given references. - init(referencing encoder: __JSONEncoder, codingPath: [CodingKey], wrapping container: NSMutableDictionary) { - self.encoder = encoder - self.codingPath = codingPath - self.container = container - } - - // MARK: - Coding Path Operations - - private func _converted(_ key: CodingKey) -> CodingKey { - switch encoder.options.keyEncodingStrategy { - case .useDefaultKeys: - return key - case .convertToSnakeCase: - let newKeyString = JSONEncoder.KeyEncodingStrategy._convertToSnakeCase(key.stringValue) - return _JSONKey(stringValue: newKeyString, intValue: key.intValue) - case .custom(let converter): - return converter(codingPath + [key]) - } - } - - // MARK: - KeyedEncodingContainerProtocol Methods - - public mutating func encodeNil(forKey key: Key) throws { - self.container[_converted(key).stringValue] = NSNull() - } - public mutating func encode(_ value: Bool, forKey key: Key) throws { - self.container[_converted(key).stringValue] = self.encoder.box(value) - } - public mutating func encode(_ value: Int, forKey key: Key) throws { - self.container[_converted(key).stringValue] = self.encoder.box(value) - } - public mutating func encode(_ value: Int8, forKey key: Key) throws { - self.container[_converted(key).stringValue] = self.encoder.box(value) - } - public mutating func encode(_ value: Int16, forKey key: Key) throws { - self.container[_converted(key).stringValue] = self.encoder.box(value) - } - public mutating func encode(_ value: Int32, forKey key: Key) throws { - self.container[_converted(key).stringValue] = self.encoder.box(value) - } - public mutating func encode(_ value: Int64, forKey key: Key) throws { - self.container[_converted(key).stringValue] = self.encoder.box(value) - } - public mutating func encode(_ value: UInt, forKey key: Key) throws { - self.container[_converted(key).stringValue] = self.encoder.box(value) - } - public mutating func encode(_ value: UInt8, forKey key: Key) throws { - self.container[_converted(key).stringValue] = self.encoder.box(value) - } - public mutating func encode(_ value: UInt16, forKey key: Key) throws { - self.container[_converted(key).stringValue] = self.encoder.box(value) - } - public mutating func encode(_ value: UInt32, forKey key: Key) throws { - self.container[_converted(key).stringValue] = self.encoder.box(value) - } - public mutating func encode(_ value: UInt64, forKey key: Key) throws { - self.container[_converted(key).stringValue] = self.encoder.box(value) - } - public mutating func encode(_ value: String, forKey key: Key) throws { - self.container[_converted(key).stringValue] = self.encoder.box(value) - } - - public mutating func encode(_ value: Float, forKey key: Key) throws { - // Since the float may be invalid and throw, the coding path needs to contain this key. - self.encoder.codingPath.append(key) - defer { self.encoder.codingPath.removeLast() } - self.container[_converted(key).stringValue] = try self.encoder.box(value) - } - - public mutating func encode(_ value: Double, forKey key: Key) throws { - // Since the double may be invalid and throw, the coding path needs to contain this key. - self.encoder.codingPath.append(key) - defer { self.encoder.codingPath.removeLast() } - self.container[_converted(key).stringValue] = try self.encoder.box(value) - } - - public mutating func encode(_ value: T, forKey key: Key) throws { - self.encoder.codingPath.append(key) - defer { self.encoder.codingPath.removeLast() } - self.container[_converted(key).stringValue] = try self.encoder.box(value) - } - - public mutating func nestedContainer(keyedBy keyType: NestedKey.Type, forKey key: Key) -> KeyedEncodingContainer { - let containerKey = _converted(key).stringValue - let dictionary: NSMutableDictionary - if let existingContainer = self.container[containerKey] { - precondition( - existingContainer is NSMutableDictionary, - "Attempt to re-encode into nested KeyedEncodingContainer<\(Key.self)> for key \"\(containerKey)\" is invalid: non-keyed container already encoded for this key" - ) - dictionary = existingContainer as! NSMutableDictionary - } else { - dictionary = NSMutableDictionary() - self.container[containerKey] = dictionary - } - - self.codingPath.append(key) - defer { self.codingPath.removeLast() } - - let container = _JSONKeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: dictionary) - return KeyedEncodingContainer(container) - } - - public mutating func nestedUnkeyedContainer(forKey key: Key) -> UnkeyedEncodingContainer { - let containerKey = _converted(key).stringValue - let array: NSMutableArray - if let existingContainer = self.container[containerKey] { - precondition( - existingContainer is NSMutableArray, - "Attempt to re-encode into nested UnkeyedEncodingContainer for key \"\(containerKey)\" is invalid: keyed container/single value already encoded for this key" - ) - array = existingContainer as! NSMutableArray - } else { - array = NSMutableArray() - self.container[containerKey] = array - } - - self.codingPath.append(key) - defer { self.codingPath.removeLast() } - return _JSONUnkeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: array) - } - - public mutating func superEncoder() -> Encoder { - return __JSONReferencingEncoder(referencing: self.encoder, key: _JSONKey.super, convertedKey: _converted(_JSONKey.super), wrapping: self.container) - } - - public mutating func superEncoder(forKey key: Key) -> Encoder { - return __JSONReferencingEncoder(referencing: self.encoder, key: key, convertedKey: _converted(key), wrapping: self.container) - } -} - -private struct _JSONUnkeyedEncodingContainer : UnkeyedEncodingContainer { - // MARK: Properties - - /// A reference to the encoder we're writing to. - private let encoder: __JSONEncoder - - /// A reference to the container we're writing to. - private let container: NSMutableArray - - /// The path of coding keys taken to get to this point in encoding. - private(set) public var codingPath: [CodingKey] - - /// The number of elements encoded into the container. - public var count: Int { - return self.container.count - } - - // MARK: - Initialization - - /// Initializes `self` with the given references. - init(referencing encoder: __JSONEncoder, codingPath: [CodingKey], wrapping container: NSMutableArray) { - self.encoder = encoder - self.codingPath = codingPath - self.container = container - } - - // MARK: - UnkeyedEncodingContainer Methods - - public mutating func encodeNil() throws { self.container.add(NSNull()) } - public mutating func encode(_ value: Bool) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int8) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int16) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int32) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int64) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt8) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt16) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt32) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt64) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: String) throws { self.container.add(self.encoder.box(value)) } - - public mutating func encode(_ value: Float) throws { - // Since the float may be invalid and throw, the coding path needs to contain this key. - self.encoder.codingPath.append(_JSONKey(index: self.count)) - defer { self.encoder.codingPath.removeLast() } - self.container.add(try self.encoder.box(value)) - } - - public mutating func encode(_ value: Double) throws { - // Since the double may be invalid and throw, the coding path needs to contain this key. - self.encoder.codingPath.append(_JSONKey(index: self.count)) - defer { self.encoder.codingPath.removeLast() } - self.container.add(try self.encoder.box(value)) - } - - public mutating func encode(_ value: T) throws { - self.encoder.codingPath.append(_JSONKey(index: self.count)) - defer { self.encoder.codingPath.removeLast() } - self.container.add(try self.encoder.box(value)) - } - - public mutating func nestedContainer(keyedBy keyType: NestedKey.Type) -> KeyedEncodingContainer { - self.codingPath.append(_JSONKey(index: self.count)) - defer { self.codingPath.removeLast() } - - let dictionary = NSMutableDictionary() - self.container.add(dictionary) - - let container = _JSONKeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: dictionary) - return KeyedEncodingContainer(container) - } - - public mutating func nestedUnkeyedContainer() -> UnkeyedEncodingContainer { - self.codingPath.append(_JSONKey(index: self.count)) - defer { self.codingPath.removeLast() } - - let array = NSMutableArray() - self.container.add(array) - return _JSONUnkeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: array) - } - - public mutating func superEncoder() -> Encoder { - return __JSONReferencingEncoder(referencing: self.encoder, at: self.container.count, wrapping: self.container) - } -} - -extension __JSONEncoder : SingleValueEncodingContainer { - // MARK: - SingleValueEncodingContainer Methods - - private func assertCanEncodeNewValue() { - precondition(self.canEncodeNewValue, "Attempt to encode value through single value container when previously value already encoded.") - } - - public func encodeNil() throws { - assertCanEncodeNewValue() - self.storage.push(container: NSNull()) - } - - public func encode(_ value: Bool) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int8) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int16) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int32) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int64) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt8) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt16) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt32) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt64) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: String) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Float) throws { - assertCanEncodeNewValue() - try self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Double) throws { - assertCanEncodeNewValue() - try self.storage.push(container: self.box(value)) - } - - public func encode(_ value: T) throws { - assertCanEncodeNewValue() - try self.storage.push(container: self.box(value)) - } -} - -// MARK: - Concrete Value Representations - -private extension __JSONEncoder { - /// Returns the given value boxed in a container appropriate for pushing onto the container stack. - func box(_ value: Bool) -> NSObject { return NSNumber(value: value) } - func box(_ value: Int) -> NSObject { return NSNumber(value: value) } - func box(_ value: Int8) -> NSObject { return NSNumber(value: value) } - func box(_ value: Int16) -> NSObject { return NSNumber(value: value) } - func box(_ value: Int32) -> NSObject { return NSNumber(value: value) } - func box(_ value: Int64) -> NSObject { return NSNumber(value: value) } - func box(_ value: UInt) -> NSObject { return NSNumber(value: value) } - func box(_ value: UInt8) -> NSObject { return NSNumber(value: value) } - func box(_ value: UInt16) -> NSObject { return NSNumber(value: value) } - func box(_ value: UInt32) -> NSObject { return NSNumber(value: value) } - func box(_ value: UInt64) -> NSObject { return NSNumber(value: value) } - func box(_ value: String) -> NSObject { return NSString(string: value) } - - func box(_ float: Float) throws -> NSObject { - guard !float.isInfinite && !float.isNaN else { - guard case let .convertToString(positiveInfinity: posInfString, - negativeInfinity: negInfString, - nan: nanString) = self.options.nonConformingFloatEncodingStrategy else { - throw EncodingError._invalidFloatingPointValue(float, at: codingPath) - } - - if float == Float.infinity { - return NSString(string: posInfString) - } else if float == -Float.infinity { - return NSString(string: negInfString) - } else { - return NSString(string: nanString) - } - } - - return NSNumber(value: float) - } - - func box(_ double: Double) throws -> NSObject { - guard !double.isInfinite && !double.isNaN else { - guard case let .convertToString(positiveInfinity: posInfString, - negativeInfinity: negInfString, - nan: nanString) = self.options.nonConformingFloatEncodingStrategy else { - throw EncodingError._invalidFloatingPointValue(double, at: codingPath) - } - - if double == Double.infinity { - return NSString(string: posInfString) - } else if double == -Double.infinity { - return NSString(string: negInfString) - } else { - return NSString(string: nanString) - } - } - - return NSNumber(value: double) - } - - func box(_ date: Date) throws -> NSObject { - switch self.options.dateEncodingStrategy { - case .deferredToDate: - // Must be called with a surrounding with(pushedKey:) call. - // Dates encode as single-value objects; this can't both throw and push a container, so no need to catch the error. - try date.encode(to: self) - return self.storage.popContainer() - - case .secondsSince1970: - return NSNumber(value: date.timeIntervalSince1970) - - case .millisecondsSince1970: - return NSNumber(value: 1000.0 * date.timeIntervalSince1970) - - case .iso8601: - if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) { - return NSString(string: _iso8601Formatter.string(from: date)) - } else { - fatalError("ISO8601DateFormatter is unavailable on this platform.") - } - - case .formatted(let formatter): - return NSString(string: formatter.string(from: date)) - - case .custom(let closure): - let depth = self.storage.count - do { - try closure(date, self) - } catch { - // If the value pushed a container before throwing, pop it back off to restore state. - if self.storage.count > depth { - let _ = self.storage.popContainer() - } - - throw error - } - - guard self.storage.count > depth else { - // The closure didn't encode anything. Return the default keyed container. - return NSDictionary() - } - - // We can pop because the closure encoded something. - return self.storage.popContainer() - } - } - - func box(_ data: Data) throws -> NSObject { - switch self.options.dataEncodingStrategy { - case .deferredToData: - // Must be called with a surrounding with(pushedKey:) call. - let depth = self.storage.count - do { - try data.encode(to: self) - } catch { - // If the value pushed a container before throwing, pop it back off to restore state. - // This shouldn't be possible for Data (which encodes as an array of bytes), but it can't hurt to catch a failure. - if self.storage.count > depth { - let _ = self.storage.popContainer() - } - - throw error - } - - return self.storage.popContainer() - - case .base64: - return NSString(string: data.base64EncodedString()) - - case .custom(let closure): - let depth = self.storage.count - do { - try closure(data, self) - } catch { - // If the value pushed a container before throwing, pop it back off to restore state. - if self.storage.count > depth { - let _ = self.storage.popContainer() - } - - throw error - } - - guard self.storage.count > depth else { - // The closure didn't encode anything. Return the default keyed container. - return NSDictionary() - } - - // We can pop because the closure encoded something. - return self.storage.popContainer() - } - } - - func box(_ dict: [String : Encodable]) throws -> NSObject? { - let depth = self.storage.count - let result = self.storage.pushKeyedContainer() - do { - for (key, value) in dict { - self.codingPath.append(_JSONKey(stringValue: key, intValue: nil)) - defer { self.codingPath.removeLast() } - result[key] = try box(value) - } - } catch { - // If the value pushed a container before throwing, pop it back off to restore state. - if self.storage.count > depth { - let _ = self.storage.popContainer() - } - - throw error - } - - // The top container should be a new container. - guard self.storage.count > depth else { - return nil - } - - return self.storage.popContainer() - } - - func box(_ value: Encodable) throws -> NSObject { - return try self.box_(value) ?? NSDictionary() - } - - // This method is called "box_" instead of "box" to disambiguate it from the overloads. Because the return type here is different from all of the "box" overloads (and is more general), any "box" calls in here would call back into "box" recursively instead of calling the appropriate overload, which is not what we want. - func box_(_ value: Encodable) throws -> NSObject? { - // Disambiguation between variable and function is required due to - // issue tracked at: https://bugs.swift.org/browse/SR-1846 - let type = Swift.type(of: value) - if type == Date.self || type == NSDate.self { - // Respect Date encoding strategy - return try self.box((value as! Date)) - } else if type == Data.self || type == NSData.self { - // Respect Data encoding strategy - return try self.box((value as! Data)) - } else if type == URL.self || type == NSURL.self { - // Encode URLs as single strings. - return self.box((value as! URL).absoluteString) - } else if type == Decimal.self || type == NSDecimalNumber.self { - // JSONSerialization can natively handle NSDecimalNumber. - return (value as! NSDecimalNumber) - } else if value is _JSONStringDictionaryEncodableMarker { - return try self.box(value as! [String : Encodable]) - } - - // The value should request a container from the __JSONEncoder. - let depth = self.storage.count - do { - try value.encode(to: self) - } catch { - // If the value pushed a container before throwing, pop it back off to restore state. - if self.storage.count > depth { - let _ = self.storage.popContainer() - } - - throw error - } - - // The top container should be a new container. - guard self.storage.count > depth else { - return nil - } - - return self.storage.popContainer() - } -} - -// MARK: - __JSONReferencingEncoder - -/// __JSONReferencingEncoder is a special subclass of __JSONEncoder which has its own storage, but references the contents of a different encoder. -/// It's used in superEncoder(), which returns a new encoder for encoding a superclass -- the lifetime of the encoder should not escape the scope it's created in, but it doesn't necessarily know when it's done being used (to write to the original container). -// NOTE: older overlays called this class _JSONReferencingEncoder. -// The two must coexist without a conflicting ObjC class name, so it -// was renamed. The old name must not be used in the new runtime. -private class __JSONReferencingEncoder : __JSONEncoder { - // MARK: Reference types. - - /// The type of container we're referencing. - private enum Reference { - /// Referencing a specific index in an array container. - case array(NSMutableArray, Int) - - /// Referencing a specific key in a dictionary container. - case dictionary(NSMutableDictionary, String) - } - - // MARK: - Properties - - /// The encoder we're referencing. - let encoder: __JSONEncoder - - /// The container reference itself. - private let reference: Reference - - // MARK: - Initialization - - /// Initializes `self` by referencing the given array container in the given encoder. - init(referencing encoder: __JSONEncoder, at index: Int, wrapping array: NSMutableArray) { - self.encoder = encoder - self.reference = .array(array, index) - super.init(options: encoder.options, codingPath: encoder.codingPath) - - self.codingPath.append(_JSONKey(index: index)) - } - - /// Initializes `self` by referencing the given dictionary container in the given encoder. - init(referencing encoder: __JSONEncoder, key: CodingKey, convertedKey: __shared CodingKey, wrapping dictionary: NSMutableDictionary) { - self.encoder = encoder - self.reference = .dictionary(dictionary, convertedKey.stringValue) - super.init(options: encoder.options, codingPath: encoder.codingPath) - - self.codingPath.append(key) - } - - // MARK: - Coding Path Operations - - override var canEncodeNewValue: Bool { - // With a regular encoder, the storage and coding path grow together. - // A referencing encoder, however, inherits its parents coding path, as well as the key it was created for. - // We have to take this into account. - return self.storage.count == self.codingPath.count - self.encoder.codingPath.count - 1 - } - - // MARK: - Deinitialization - - // Finalizes `self` by writing the contents of our storage to the referenced encoder's storage. - deinit { - let value: Any - switch self.storage.count { - case 0: value = NSDictionary() - case 1: value = self.storage.popContainer() - default: fatalError("Referencing encoder deallocated with multiple containers on stack.") - } - - switch self.reference { - case .array(let array, let index): - array.insert(value, at: index) - - case .dictionary(let dictionary, let key): - dictionary[NSString(string: key)] = value - } - } -} - -//===----------------------------------------------------------------------===// -// JSON Decoder -//===----------------------------------------------------------------------===// - -/// `JSONDecoder` facilitates the decoding of JSON into semantic `Decodable` types. -// NOTE: older overlays had Foundation.JSONDecoder as the ObjC name. -// The two must coexist, so it was renamed. The old name must not be -// used in the new runtime. _TtC10Foundation13__JSONDecoder is the -// mangled name for Foundation.__JSONDecoder. -@_objcRuntimeName(_TtC10Foundation13__JSONDecoder) -open class JSONDecoder { - // MARK: Options - - /// The strategy to use for decoding `Date` values. - public enum DateDecodingStrategy { - /// Defer to `Date` for decoding. This is the default strategy. - case deferredToDate - - /// Decode the `Date` as a UNIX timestamp from a JSON number. - case secondsSince1970 - - /// Decode the `Date` as UNIX millisecond timestamp from a JSON number. - case millisecondsSince1970 - - /// Decode the `Date` as an ISO-8601-formatted string (in RFC 3339 format). - @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) - case iso8601 - - /// Decode the `Date` as a string parsed by the given formatter. - case formatted(DateFormatter) - - /// Decode the `Date` as a custom value decoded by the given closure. - case custom((_ decoder: Decoder) throws -> Date) - } - - /// The strategy to use for decoding `Data` values. - public enum DataDecodingStrategy { - /// Defer to `Data` for decoding. - case deferredToData - - /// Decode the `Data` from a Base64-encoded string. This is the default strategy. - case base64 - - /// Decode the `Data` as a custom value decoded by the given closure. - case custom((_ decoder: Decoder) throws -> Data) - } - - /// The strategy to use for non-JSON-conforming floating-point values (IEEE 754 infinity and NaN). - public enum NonConformingFloatDecodingStrategy { - /// Throw upon encountering non-conforming values. This is the default strategy. - case `throw` - - /// Decode the values from the given representation strings. - case convertFromString(positiveInfinity: String, negativeInfinity: String, nan: String) - } - - /// The strategy to use for automatically changing the value of keys before decoding. - public enum KeyDecodingStrategy { - /// Use the keys specified by each type. This is the default strategy. - case useDefaultKeys - - /// Convert from "snake_case_keys" to "camelCaseKeys" before attempting to match a key with the one specified by each type. - /// - /// The conversion to upper case uses `Locale.system`, also known as the ICU "root" locale. This means the result is consistent regardless of the current user's locale and language preferences. - /// - /// Converting from snake case to camel case: - /// 1. Capitalizes the word starting after each `_` - /// 2. Removes all `_` - /// 3. Preserves starting and ending `_` (as these are often used to indicate private variables or other metadata). - /// For example, `one_two_three` becomes `oneTwoThree`. `_one_two_three_` becomes `_oneTwoThree_`. - /// - /// - Note: Using a key decoding strategy has a nominal performance cost, as each string key has to be inspected for the `_` character. - case convertFromSnakeCase - - /// Provide a custom conversion from the key in the encoded JSON to the keys specified by the decoded types. - /// The full path to the current decoding position is provided for context (in case you need to locate this key within the payload). The returned key is used in place of the last component in the coding path before decoding. - /// If the result of the conversion is a duplicate key, then only one value will be present in the container for the type to decode from. - case custom((_ codingPath: [CodingKey]) -> CodingKey) - - fileprivate static func _convertFromSnakeCase(_ stringKey: String) -> String { - guard !stringKey.isEmpty else { return stringKey } - - // Find the first non-underscore character - guard let firstNonUnderscore = stringKey.firstIndex(where: { $0 != "_" }) else { - // Reached the end without finding an _ - return stringKey - } - - // Find the last non-underscore character - var lastNonUnderscore = stringKey.index(before: stringKey.endIndex) - while lastNonUnderscore > firstNonUnderscore && stringKey[lastNonUnderscore] == "_" { - stringKey.formIndex(before: &lastNonUnderscore) - } - - let keyRange = firstNonUnderscore...lastNonUnderscore - let leadingUnderscoreRange = stringKey.startIndex..(_ type: T.Type, from data: Data) throws -> T { - let topLevel: Any - do { - topLevel = try JSONSerialization.jsonObject(with: data, options: .fragmentsAllowed) - } catch { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: error)) - } - - let decoder = __JSONDecoder(referencing: topLevel, options: self.options) - guard let value = try decoder.unbox(topLevel, as: type) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: [], debugDescription: "The given data did not contain a top-level value.")) - } - - return value - } -} - -// MARK: - __JSONDecoder - -// NOTE: older overlays called this class _JSONDecoder. The two must -// coexist without a conflicting ObjC class name, so it was renamed. -// The old name must not be used in the new runtime. -private class __JSONDecoder : Decoder { - // MARK: Properties - - /// The decoder's storage. - var storage: _JSONDecodingStorage - - /// Options set on the top-level decoder. - let options: JSONDecoder._Options - - /// The path to the current point in encoding. - fileprivate(set) public var codingPath: [CodingKey] - - /// Contextual user-provided information for use during encoding. - public var userInfo: [CodingUserInfoKey : Any] { - return self.options.userInfo - } - - // MARK: - Initialization - - /// Initializes `self` with the given top-level container and options. - init(referencing container: Any, at codingPath: [CodingKey] = [], options: JSONDecoder._Options) { - self.storage = _JSONDecodingStorage() - self.storage.push(container: container) - self.codingPath = codingPath - self.options = options - } - - // MARK: - Decoder Methods - - public func container(keyedBy type: Key.Type) throws -> KeyedDecodingContainer { - guard !(self.storage.topContainer is NSNull) else { - throw DecodingError.valueNotFound(KeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get keyed decoding container -- found null value instead.")) - } - - guard let topContainer = self.storage.topContainer as? [String : Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: self.storage.topContainer) - } - - let container = _JSONKeyedDecodingContainer(referencing: self, wrapping: topContainer) - return KeyedDecodingContainer(container) - } - - public func unkeyedContainer() throws -> UnkeyedDecodingContainer { - guard !(self.storage.topContainer is NSNull) else { - throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get unkeyed decoding container -- found null value instead.")) - } - - guard let topContainer = self.storage.topContainer as? [Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: self.storage.topContainer) - } - - return _JSONUnkeyedDecodingContainer(referencing: self, wrapping: topContainer) - } - - public func singleValueContainer() throws -> SingleValueDecodingContainer { - return self - } -} - -// MARK: - Decoding Storage - -private struct _JSONDecodingStorage { - // MARK: Properties - - /// The container stack. - /// Elements may be any one of the JSON types (NSNull, NSNumber, String, Array, [String : Any]). - private(set) var containers: [Any] = [] - - // MARK: - Initialization - - /// Initializes `self` with no containers. - init() {} - - // MARK: - Modifying the Stack - - var count: Int { - return self.containers.count - } - - var topContainer: Any { - precondition(!self.containers.isEmpty, "Empty container stack.") - return self.containers.last! - } - - mutating func push(container: __owned Any) { - self.containers.append(container) - } - - mutating func popContainer() { - precondition(!self.containers.isEmpty, "Empty container stack.") - self.containers.removeLast() - } -} - -// MARK: Decoding Containers - -private struct _JSONKeyedDecodingContainer : KeyedDecodingContainerProtocol { - typealias Key = K - - // MARK: Properties - - /// A reference to the decoder we're reading from. - private let decoder: __JSONDecoder - - /// A reference to the container we're reading from. - private let container: [String : Any] - - /// The path of coding keys taken to get to this point in decoding. - private(set) public var codingPath: [CodingKey] - - // MARK: - Initialization - - /// Initializes `self` by referencing the given decoder and container. - init(referencing decoder: __JSONDecoder, wrapping container: [String : Any]) { - self.decoder = decoder - switch decoder.options.keyDecodingStrategy { - case .useDefaultKeys: - self.container = container - case .convertFromSnakeCase: - // Convert the snake case keys in the container to camel case. - // If we hit a duplicate key after conversion, then we'll use the first one we saw. Effectively an undefined behavior with JSON dictionaries. - self.container = Dictionary(container.map { - key, value in (JSONDecoder.KeyDecodingStrategy._convertFromSnakeCase(key), value) - }, uniquingKeysWith: { (first, _) in first }) - case .custom(let converter): - self.container = Dictionary(container.map { - key, value in (converter(decoder.codingPath + [_JSONKey(stringValue: key, intValue: nil)]).stringValue, value) - }, uniquingKeysWith: { (first, _) in first }) - } - self.codingPath = decoder.codingPath - } - - // MARK: - KeyedDecodingContainerProtocol Methods - - public var allKeys: [Key] { - return self.container.keys.compactMap { Key(stringValue: $0) } - } - - public func contains(_ key: Key) -> Bool { - return self.container[key.stringValue] != nil - } - - private func _errorDescription(of key: CodingKey) -> String { - switch decoder.options.keyDecodingStrategy { - case .convertFromSnakeCase: - // In this case we can attempt to recover the original value by reversing the transform - let original = key.stringValue - let converted = JSONEncoder.KeyEncodingStrategy._convertToSnakeCase(original) - let roundtrip = JSONDecoder.KeyDecodingStrategy._convertFromSnakeCase(converted) - if converted == original { - return "\(key) (\"\(original)\")" - } else if roundtrip == original { - return "\(key) (\"\(original)\"), converted to \(converted)" - } else { - return "\(key) (\"\(original)\"), with divergent representation \(roundtrip), converted to \(converted)" - } - default: - // Otherwise, just report the converted string - return "\(key) (\"\(key.stringValue)\")" - } - } - - public func decodeNil(forKey key: Key) throws -> Bool { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - return entry is NSNull - } - - public func decode(_ type: Bool.Type, forKey key: Key) throws -> Bool { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Bool.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int.Type, forKey key: Key) throws -> Int { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int8.Type, forKey key: Key) throws -> Int8 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int8.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int16.Type, forKey key: Key) throws -> Int16 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int16.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int32.Type, forKey key: Key) throws -> Int32 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int32.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int64.Type, forKey key: Key) throws -> Int64 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int64.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt.Type, forKey key: Key) throws -> UInt { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt8.Type, forKey key: Key) throws -> UInt8 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt8.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt16.Type, forKey key: Key) throws -> UInt16 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt16.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt32.Type, forKey key: Key) throws -> UInt32 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt32.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt64.Type, forKey key: Key) throws -> UInt64 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt64.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Float.Type, forKey key: Key) throws -> Float { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Float.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Double.Type, forKey key: Key) throws -> Double { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Double.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: String.Type, forKey key: Key) throws -> String { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: String.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: T.Type, forKey key: Key) throws -> T { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(_errorDescription(of: key)).")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: type) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func nestedContainer(keyedBy type: NestedKey.Type, forKey key: Key) throws -> KeyedDecodingContainer { - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get \(KeyedDecodingContainer.self) -- no value found for key \(_errorDescription(of: key))")) - } - - guard let dictionary = value as? [String : Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: value) - } - - let container = _JSONKeyedDecodingContainer(referencing: self.decoder, wrapping: dictionary) - return KeyedDecodingContainer(container) - } - - public func nestedUnkeyedContainer(forKey key: Key) throws -> UnkeyedDecodingContainer { - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get UnkeyedDecodingContainer -- no value found for key \(_errorDescription(of: key))")) - } - - guard let array = value as? [Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: value) - } - - return _JSONUnkeyedDecodingContainer(referencing: self.decoder, wrapping: array) - } - - private func _superDecoder(forKey key: __owned CodingKey) throws -> Decoder { - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - let value: Any = self.container[key.stringValue] ?? NSNull() - return __JSONDecoder(referencing: value, at: self.decoder.codingPath, options: self.decoder.options) - } - - public func superDecoder() throws -> Decoder { - return try _superDecoder(forKey: _JSONKey.super) - } - - public func superDecoder(forKey key: Key) throws -> Decoder { - return try _superDecoder(forKey: key) - } -} - -private struct _JSONUnkeyedDecodingContainer : UnkeyedDecodingContainer { - // MARK: Properties - - /// A reference to the decoder we're reading from. - private let decoder: __JSONDecoder - - /// A reference to the container we're reading from. - private let container: [Any] - - /// The path of coding keys taken to get to this point in decoding. - private(set) public var codingPath: [CodingKey] - - /// The index of the element we're about to decode. - private(set) public var currentIndex: Int - - // MARK: - Initialization - - /// Initializes `self` by referencing the given decoder and container. - init(referencing decoder: __JSONDecoder, wrapping container: [Any]) { - self.decoder = decoder - self.container = container - self.codingPath = decoder.codingPath - self.currentIndex = 0 - } - - // MARK: - UnkeyedDecodingContainer Methods - - public var count: Int? { - return self.container.count - } - - public var isAtEnd: Bool { - return self.currentIndex >= self.count! - } - - public mutating func decodeNil() throws -> Bool { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(Any?.self, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - if self.container[self.currentIndex] is NSNull { - self.currentIndex += 1 - return true - } else { - return false - } - } - - public mutating func decode(_ type: Bool.Type) throws -> Bool { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Bool.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int.Type) throws -> Int { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int8.Type) throws -> Int8 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int8.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int16.Type) throws -> Int16 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int16.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int32.Type) throws -> Int32 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int32.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int64.Type) throws -> Int64 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int64.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt.Type) throws -> UInt { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt8.Type) throws -> UInt8 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt8.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt16.Type) throws -> UInt16 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt16.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt32.Type) throws -> UInt32 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt32.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt64.Type) throws -> UInt64 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt64.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Float.Type) throws -> Float { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Float.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Double.Type) throws -> Double { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Double.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: String.Type) throws -> String { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: String.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: T.Type) throws -> T { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: type) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_JSONKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func nestedContainer(keyedBy type: NestedKey.Type) throws -> KeyedDecodingContainer { - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(KeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get nested keyed container -- unkeyed container is at end.")) - } - - let value = self.container[self.currentIndex] - guard !(value is NSNull) else { - throw DecodingError.valueNotFound(KeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get keyed decoding container -- found null value instead.")) - } - - guard let dictionary = value as? [String : Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: value) - } - - self.currentIndex += 1 - let container = _JSONKeyedDecodingContainer(referencing: self.decoder, wrapping: dictionary) - return KeyedDecodingContainer(container) - } - - public mutating func nestedUnkeyedContainer() throws -> UnkeyedDecodingContainer { - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get nested keyed container -- unkeyed container is at end.")) - } - - let value = self.container[self.currentIndex] - guard !(value is NSNull) else { - throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get keyed decoding container -- found null value instead.")) - } - - guard let array = value as? [Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: value) - } - - self.currentIndex += 1 - return _JSONUnkeyedDecodingContainer(referencing: self.decoder, wrapping: array) - } - - public mutating func superDecoder() throws -> Decoder { - self.decoder.codingPath.append(_JSONKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(Decoder.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get superDecoder() -- unkeyed container is at end.")) - } - - let value = self.container[self.currentIndex] - self.currentIndex += 1 - return __JSONDecoder(referencing: value, at: self.decoder.codingPath, options: self.decoder.options) - } -} - -extension __JSONDecoder : SingleValueDecodingContainer { - // MARK: SingleValueDecodingContainer Methods - - private func expectNonNull(_ type: T.Type) throws { - guard !self.decodeNil() else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "Expected \(type) but found null value instead.")) - } - } - - public func decodeNil() -> Bool { - return self.storage.topContainer is NSNull - } - - public func decode(_ type: Bool.Type) throws -> Bool { - try expectNonNull(Bool.self) - return try self.unbox(self.storage.topContainer, as: Bool.self)! - } - - public func decode(_ type: Int.Type) throws -> Int { - try expectNonNull(Int.self) - return try self.unbox(self.storage.topContainer, as: Int.self)! - } - - public func decode(_ type: Int8.Type) throws -> Int8 { - try expectNonNull(Int8.self) - return try self.unbox(self.storage.topContainer, as: Int8.self)! - } - - public func decode(_ type: Int16.Type) throws -> Int16 { - try expectNonNull(Int16.self) - return try self.unbox(self.storage.topContainer, as: Int16.self)! - } - - public func decode(_ type: Int32.Type) throws -> Int32 { - try expectNonNull(Int32.self) - return try self.unbox(self.storage.topContainer, as: Int32.self)! - } - - public func decode(_ type: Int64.Type) throws -> Int64 { - try expectNonNull(Int64.self) - return try self.unbox(self.storage.topContainer, as: Int64.self)! - } - - public func decode(_ type: UInt.Type) throws -> UInt { - try expectNonNull(UInt.self) - return try self.unbox(self.storage.topContainer, as: UInt.self)! - } - - public func decode(_ type: UInt8.Type) throws -> UInt8 { - try expectNonNull(UInt8.self) - return try self.unbox(self.storage.topContainer, as: UInt8.self)! - } - - public func decode(_ type: UInt16.Type) throws -> UInt16 { - try expectNonNull(UInt16.self) - return try self.unbox(self.storage.topContainer, as: UInt16.self)! - } - - public func decode(_ type: UInt32.Type) throws -> UInt32 { - try expectNonNull(UInt32.self) - return try self.unbox(self.storage.topContainer, as: UInt32.self)! - } - - public func decode(_ type: UInt64.Type) throws -> UInt64 { - try expectNonNull(UInt64.self) - return try self.unbox(self.storage.topContainer, as: UInt64.self)! - } - - public func decode(_ type: Float.Type) throws -> Float { - try expectNonNull(Float.self) - return try self.unbox(self.storage.topContainer, as: Float.self)! - } - - public func decode(_ type: Double.Type) throws -> Double { - try expectNonNull(Double.self) - return try self.unbox(self.storage.topContainer, as: Double.self)! - } - - public func decode(_ type: String.Type) throws -> String { - try expectNonNull(String.self) - return try self.unbox(self.storage.topContainer, as: String.self)! - } - - public func decode(_ type: T.Type) throws -> T { - try expectNonNull(type) - return try self.unbox(self.storage.topContainer, as: type)! - } -} - -// MARK: - Concrete Value Representations - -private extension __JSONDecoder { - /// Returns the given value unboxed from a container. - func unbox(_ value: Any, as type: Bool.Type) throws -> Bool? { - guard !(value is NSNull) else { return nil } - - if let number = value as? NSNumber { - // TODO: Add a flag to coerce non-boolean numbers into Bools? - if number === kCFBooleanTrue as NSNumber { - return true - } else if number === kCFBooleanFalse as NSNumber { - return false - } - - /* FIXME: If swift-corelibs-foundation doesn't change to use NSNumber, this code path will need to be included and tested: - } else if let bool = value as? Bool { - return bool - */ - - } - - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - func unbox(_ value: Any, as type: Int.Type) throws -> Int? { - guard !(value is NSNull) else { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int = number.intValue - guard NSNumber(value: int) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed JSON number <\(number)> does not fit in \(type).")) - } - - return int - } - - func unbox(_ value: Any, as type: Int8.Type) throws -> Int8? { - guard !(value is NSNull) else { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int8 = number.int8Value - guard NSNumber(value: int8) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed JSON number <\(number)> does not fit in \(type).")) - } - - return int8 - } - - func unbox(_ value: Any, as type: Int16.Type) throws -> Int16? { - guard !(value is NSNull) else { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int16 = number.int16Value - guard NSNumber(value: int16) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed JSON number <\(number)> does not fit in \(type).")) - } - - return int16 - } - - func unbox(_ value: Any, as type: Int32.Type) throws -> Int32? { - guard !(value is NSNull) else { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int32 = number.int32Value - guard NSNumber(value: int32) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed JSON number <\(number)> does not fit in \(type).")) - } - - return int32 - } - - func unbox(_ value: Any, as type: Int64.Type) throws -> Int64? { - guard !(value is NSNull) else { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int64 = number.int64Value - guard NSNumber(value: int64) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed JSON number <\(number)> does not fit in \(type).")) - } - - return int64 - } - - func unbox(_ value: Any, as type: UInt.Type) throws -> UInt? { - guard !(value is NSNull) else { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint = number.uintValue - guard NSNumber(value: uint) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed JSON number <\(number)> does not fit in \(type).")) - } - - return uint - } - - func unbox(_ value: Any, as type: UInt8.Type) throws -> UInt8? { - guard !(value is NSNull) else { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint8 = number.uint8Value - guard NSNumber(value: uint8) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed JSON number <\(number)> does not fit in \(type).")) - } - - return uint8 - } - - func unbox(_ value: Any, as type: UInt16.Type) throws -> UInt16? { - guard !(value is NSNull) else { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint16 = number.uint16Value - guard NSNumber(value: uint16) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed JSON number <\(number)> does not fit in \(type).")) - } - - return uint16 - } - - func unbox(_ value: Any, as type: UInt32.Type) throws -> UInt32? { - guard !(value is NSNull) else { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint32 = number.uint32Value - guard NSNumber(value: uint32) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed JSON number <\(number)> does not fit in \(type).")) - } - - return uint32 - } - - func unbox(_ value: Any, as type: UInt64.Type) throws -> UInt64? { - guard !(value is NSNull) else { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint64 = number.uint64Value - guard NSNumber(value: uint64) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed JSON number <\(number)> does not fit in \(type).")) - } - - return uint64 - } - - func unbox(_ value: Any, as type: Float.Type) throws -> Float? { - guard !(value is NSNull) else { return nil } - - if let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse { - // We are willing to return a Float by losing precision: - // * If the original value was integral, - // * and the integral value was > Float.greatestFiniteMagnitude, we will fail - // * and the integral value was <= Float.greatestFiniteMagnitude, we are willing to lose precision past 2^24 - // * If it was a Float, you will get back the precise value - // * If it was a Double or Decimal, you will get back the nearest approximation if it will fit - let double = number.doubleValue - guard abs(double) <= Double(Float.greatestFiniteMagnitude) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed JSON number \(number) does not fit in \(type).")) - } - - return Float(double) - - /* FIXME: If swift-corelibs-foundation doesn't change to use NSNumber, this code path will need to be included and tested: - } else if let double = value as? Double { - if abs(double) <= Double(Float.max) { - return Float(double) - } - - overflow = true - } else if let int = value as? Int { - if let float = Float(exactly: int) { - return float - } - - overflow = true - */ - - } else if let string = value as? String, - case .convertFromString(let posInfString, let negInfString, let nanString) = self.options.nonConformingFloatDecodingStrategy { - if string == posInfString { - return Float.infinity - } else if string == negInfString { - return -Float.infinity - } else if string == nanString { - return Float.nan - } - } - - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - func unbox(_ value: Any, as type: Double.Type) throws -> Double? { - guard !(value is NSNull) else { return nil } - - if let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse { - // We are always willing to return the number as a Double: - // * If the original value was integral, it is guaranteed to fit in a Double; we are willing to lose precision past 2^53 if you encoded a UInt64 but requested a Double - // * If it was a Float or Double, you will get back the precise value - // * If it was Decimal, you will get back the nearest approximation - return number.doubleValue - - /* FIXME: If swift-corelibs-foundation doesn't change to use NSNumber, this code path will need to be included and tested: - } else if let double = value as? Double { - return double - } else if let int = value as? Int { - if let double = Double(exactly: int) { - return double - } - - overflow = true - */ - - } else if let string = value as? String, - case .convertFromString(let posInfString, let negInfString, let nanString) = self.options.nonConformingFloatDecodingStrategy { - if string == posInfString { - return Double.infinity - } else if string == negInfString { - return -Double.infinity - } else if string == nanString { - return Double.nan - } - } - - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - func unbox(_ value: Any, as type: String.Type) throws -> String? { - guard !(value is NSNull) else { return nil } - - guard let string = value as? String else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - return string - } - - func unbox(_ value: Any, as type: Date.Type) throws -> Date? { - guard !(value is NSNull) else { return nil } - - switch self.options.dateDecodingStrategy { - case .deferredToDate: - self.storage.push(container: value) - defer { self.storage.popContainer() } - return try Date(from: self) - - case .secondsSince1970: - let double = try self.unbox(value, as: Double.self)! - return Date(timeIntervalSince1970: double) - - case .millisecondsSince1970: - let double = try self.unbox(value, as: Double.self)! - return Date(timeIntervalSince1970: double / 1000.0) - - case .iso8601: - if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) { - let string = try self.unbox(value, as: String.self)! - guard let date = _iso8601Formatter.date(from: string) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Expected date string to be ISO8601-formatted.")) - } - - return date - } else { - fatalError("ISO8601DateFormatter is unavailable on this platform.") - } - - case .formatted(let formatter): - let string = try self.unbox(value, as: String.self)! - guard let date = formatter.date(from: string) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Date string does not match format expected by formatter.")) - } - - return date - - case .custom(let closure): - self.storage.push(container: value) - defer { self.storage.popContainer() } - return try closure(self) - } - } - - func unbox(_ value: Any, as type: Data.Type) throws -> Data? { - guard !(value is NSNull) else { return nil } - - switch self.options.dataDecodingStrategy { - case .deferredToData: - self.storage.push(container: value) - defer { self.storage.popContainer() } - return try Data(from: self) - - case .base64: - guard let string = value as? String else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - guard let data = Data(base64Encoded: string) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Encountered Data is not valid Base64.")) - } - - return data - - case .custom(let closure): - self.storage.push(container: value) - defer { self.storage.popContainer() } - return try closure(self) - } - } - - func unbox(_ value: Any, as type: Decimal.Type) throws -> Decimal? { - guard !(value is NSNull) else { return nil } - - // Attempt to bridge from NSDecimalNumber. - if let decimal = value as? Decimal { - return decimal - } else { - let doubleValue = try self.unbox(value, as: Double.self)! - return Decimal(doubleValue) - } - } - - func unbox(_ value: Any, as type: _JSONStringDictionaryDecodableMarker.Type) throws -> T? { - guard !(value is NSNull) else { return nil } - - var result = [String : Any]() - guard let dict = value as? NSDictionary else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - let elementType = type.elementType - for (key, value) in dict { - let key = key as! String - self.codingPath.append(_JSONKey(stringValue: key, intValue: nil)) - defer { self.codingPath.removeLast() } - - result[key] = try unbox_(value, as: elementType) - } - - return result as? T - } - - func unbox(_ value: Any, as type: T.Type) throws -> T? { - return try unbox_(value, as: type) as? T - } - - func unbox_(_ value: Any, as type: Decodable.Type) throws -> Any? { - if type == Date.self || type == NSDate.self { - return try self.unbox(value, as: Date.self) - } else if type == Data.self || type == NSData.self { - return try self.unbox(value, as: Data.self) - } else if type == URL.self || type == NSURL.self { - guard let urlString = try self.unbox(value, as: String.self) else { - return nil - } - - guard let url = URL(string: urlString) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Invalid URL string.")) - } - return url - } else if type == Decimal.self || type == NSDecimalNumber.self { - return try self.unbox(value, as: Decimal.self) - } else if let stringKeyedDictType = type as? _JSONStringDictionaryDecodableMarker.Type { - return try self.unbox(value, as: stringKeyedDictType) - } else { - self.storage.push(container: value) - defer { self.storage.popContainer() } - return try type.init(from: self) - } - } -} - -//===----------------------------------------------------------------------===// -// Shared Key Types -//===----------------------------------------------------------------------===// - -private struct _JSONKey : CodingKey { - public var stringValue: String - public var intValue: Int? - - public init?(stringValue: String) { - self.stringValue = stringValue - self.intValue = nil - } - - public init?(intValue: Int) { - self.stringValue = "\(intValue)" - self.intValue = intValue - } - - public init(stringValue: String, intValue: Int?) { - self.stringValue = stringValue - self.intValue = intValue - } - - init(index: Int) { - self.stringValue = "Index \(index)" - self.intValue = index - } - - static let `super` = _JSONKey(stringValue: "super")! -} - -//===----------------------------------------------------------------------===// -// Shared ISO8601 Date Formatter -//===----------------------------------------------------------------------===// - -// NOTE: This value is implicitly lazy and _must_ be lazy. We're compiled against the latest SDK (w/ ISO8601DateFormatter), but linked against whichever Foundation the user has. ISO8601DateFormatter might not exist, so we better not hit this code path on an older OS. -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -private var _iso8601Formatter: ISO8601DateFormatter = { - let formatter = ISO8601DateFormatter() - formatter.formatOptions = .withInternetDateTime - return formatter -}() - -//===----------------------------------------------------------------------===// -// Error Utilities -//===----------------------------------------------------------------------===// - -extension EncodingError { - /// Returns a `.invalidValue` error describing the given invalid floating-point value. - /// - /// - /// - parameter value: The value that was invalid to encode. - /// - parameter path: The path of `CodingKey`s taken to encode this value. - /// - returns: An `EncodingError` with the appropriate path and debug description. - fileprivate static func _invalidFloatingPointValue(_ value: T, at codingPath: [CodingKey]) -> EncodingError { - let valueDescription: String - if value == T.infinity { - valueDescription = "\(T.self).infinity" - } else if value == -T.infinity { - valueDescription = "-\(T.self).infinity" - } else { - valueDescription = "\(T.self).nan" - } - - let debugDescription = "Unable to encode \(valueDescription) directly in JSON. Use JSONEncoder.NonConformingFloatEncodingStrategy.convertToString to specify how the value should be encoded." - return .invalidValue(value, EncodingError.Context(codingPath: codingPath, debugDescription: debugDescription)) - } -} diff --git a/Darwin/Foundation-swiftoverlay/Locale.swift b/Darwin/Foundation-swiftoverlay/Locale.swift deleted file mode 100644 index 510df500b3..0000000000 --- a/Darwin/Foundation-swiftoverlay/Locale.swift +++ /dev/null @@ -1,501 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -@_implementationOnly import _FoundationOverlayShims - -/** - `Locale` encapsulates information about linguistic, cultural, and technological conventions and standards. Examples of information encapsulated by a locale include the symbol used for the decimal separator in numbers and the way dates are formatted. - - Locales are typically used to provide, format, and interpret information about and according to the user's customs and preferences. They are frequently used in conjunction with formatters. Although you can use many locales, you usually use the one associated with the current user. -*/ -public struct Locale : Hashable, Equatable, ReferenceConvertible { - public typealias ReferenceType = NSLocale - - public typealias LanguageDirection = NSLocale.LanguageDirection - - fileprivate var _wrapped : NSLocale - private var _autoupdating : Bool - - /// Returns a locale which tracks the user's current preferences. - /// - /// If mutated, this Locale will no longer track the user's preferences. - /// - /// - note: The autoupdating Locale will only compare equal to another autoupdating Locale. - public static var autoupdatingCurrent : Locale { - return Locale(adoptingReference: __NSLocaleAutoupdating() as! NSLocale, autoupdating: true) - } - - /// Returns the user's current locale. - public static var current : Locale { - return Locale(adoptingReference: __NSLocaleCurrent() as! NSLocale, autoupdating: false) - } - - @available(*, unavailable, message: "Consider using the user's locale or nil instead, depending on use case") - public static var system : Locale { fatalError() } - - // MARK: - - // - - /// Return a locale with the specified identifier. - public init(identifier: String) { - _wrapped = NSLocale(localeIdentifier: identifier) - _autoupdating = false - } - - fileprivate init(reference: __shared NSLocale) { - _wrapped = reference.copy() as! NSLocale - if __NSLocaleIsAutoupdating(reference) { - _autoupdating = true - } else { - _autoupdating = false - } - } - - private init(adoptingReference reference: NSLocale, autoupdating: Bool) { - _wrapped = reference - _autoupdating = autoupdating - } - - // MARK: - - // - - /// Returns a localized string for a specified identifier. - /// - /// For example, in the "en" locale, the result for `"es"` is `"Spanish"`. - public func localizedString(forIdentifier identifier: String) -> String? { - return _wrapped.displayName(forKey: .identifier, value: identifier) - } - - /// Returns a localized string for a specified language code. - /// - /// For example, in the "en" locale, the result for `"es"` is `"Spanish"`. - public func localizedString(forLanguageCode languageCode: String) -> String? { - return _wrapped.displayName(forKey: .languageCode, value: languageCode) - } - - /// Returns a localized string for a specified region code. - /// - /// For example, in the "en" locale, the result for `"fr"` is `"France"`. - public func localizedString(forRegionCode regionCode: String) -> String? { - return _wrapped.displayName(forKey: .countryCode, value: regionCode) - } - - /// Returns a localized string for a specified script code. - /// - /// For example, in the "en" locale, the result for `"Hans"` is `"Simplified Han"`. - public func localizedString(forScriptCode scriptCode: String) -> String? { - return _wrapped.displayName(forKey: .scriptCode, value: scriptCode) - } - - /// Returns a localized string for a specified variant code. - /// - /// For example, in the "en" locale, the result for `"POSIX"` is `"Computer"`. - public func localizedString(forVariantCode variantCode: String) -> String? { - return _wrapped.displayName(forKey: .variantCode, value: variantCode) - } - - /// Returns a localized string for a specified `Calendar.Identifier`. - /// - /// For example, in the "en" locale, the result for `.buddhist` is `"Buddhist Calendar"`. - public func localizedString(for calendarIdentifier: Calendar.Identifier) -> String? { - // NSLocale doesn't export a constant for this - let result = CFLocaleCopyDisplayNameForPropertyValue(unsafeBitCast(_wrapped, to: CFLocale.self), .calendarIdentifier, Calendar._toNSCalendarIdentifier(calendarIdentifier).rawValue as CFString) as String? - return result - } - - /// Returns a localized string for a specified ISO 4217 currency code. - /// - /// For example, in the "en" locale, the result for `"USD"` is `"US Dollar"`. - /// - seealso: `Locale.isoCurrencyCodes` - public func localizedString(forCurrencyCode currencyCode: String) -> String? { - return _wrapped.displayName(forKey: .currencyCode, value: currencyCode) - } - - /// Returns a localized string for a specified ICU collation identifier. - /// - /// For example, in the "en" locale, the result for `"phonebook"` is `"Phonebook Sort Order"`. - public func localizedString(forCollationIdentifier collationIdentifier: String) -> String? { - return _wrapped.displayName(forKey: .collationIdentifier, value: collationIdentifier) - } - - /// Returns a localized string for a specified ICU collator identifier. - public func localizedString(forCollatorIdentifier collatorIdentifier: String) -> String? { - return _wrapped.displayName(forKey: .collatorIdentifier, value: collatorIdentifier) - } - - // MARK: - - // - - /// Returns the identifier of the locale. - public var identifier: String { - return _wrapped.localeIdentifier - } - - /// Returns the language code of the locale, or nil if has none. - /// - /// For example, for the locale "zh-Hant-HK", returns "zh". - public var languageCode: String? { - return _wrapped.object(forKey: .languageCode) as? String - } - - /// Returns the region code of the locale, or nil if it has none. - /// - /// For example, for the locale "zh-Hant-HK", returns "HK". - public var regionCode: String? { - // n.b. this is called countryCode in ObjC - if let result = _wrapped.object(forKey: .countryCode) as? String { - if result.isEmpty { - return nil - } else { - return result - } - } else { - return nil - } - } - - /// Returns the script code of the locale, or nil if has none. - /// - /// For example, for the locale "zh-Hant-HK", returns "Hant". - public var scriptCode: String? { - return _wrapped.object(forKey: .scriptCode) as? String - } - - /// Returns the variant code for the locale, or nil if it has none. - /// - /// For example, for the locale "en_POSIX", returns "POSIX". - public var variantCode: String? { - if let result = _wrapped.object(forKey: .variantCode) as? String { - if result.isEmpty { - return nil - } else { - return result - } - } else { - return nil - } - } - - /// Returns the exemplar character set for the locale, or nil if has none. - public var exemplarCharacterSet: CharacterSet? { - return _wrapped.object(forKey: .exemplarCharacterSet) as? CharacterSet - } - - /// Returns the calendar for the locale, or the Gregorian calendar as a fallback. - public var calendar: Calendar { - // NSLocale should not return nil here - if let result = _wrapped.object(forKey: .calendar) as? Calendar { - return result - } else { - return Calendar(identifier: .gregorian) - } - } - - /// Returns the collation identifier for the locale, or nil if it has none. - /// - /// For example, for the locale "en_US@collation=phonebook", returns "phonebook". - public var collationIdentifier: String? { - return _wrapped.object(forKey: .collationIdentifier) as? String - } - - /// Returns true if the locale uses the metric system. - /// - /// -seealso: MeasurementFormatter - public var usesMetricSystem: Bool { - // NSLocale should not return nil here, but just in case - if let result = (_wrapped.object(forKey: .usesMetricSystem) as? NSNumber)?.boolValue { - return result - } else { - return false - } - } - - /// Returns the decimal separator of the locale. - /// - /// For example, for "en_US", returns ".". - public var decimalSeparator: String? { - return _wrapped.object(forKey: .decimalSeparator) as? String - } - - /// Returns the grouping separator of the locale. - /// - /// For example, for "en_US", returns ",". - public var groupingSeparator: String? { - return _wrapped.object(forKey: .groupingSeparator) as? String - } - - /// Returns the currency symbol of the locale. - /// - /// For example, for "zh-Hant-HK", returns "HK$". - public var currencySymbol: String? { - return _wrapped.object(forKey: .currencySymbol) as? String - } - - /// Returns the currency code of the locale. - /// - /// For example, for "zh-Hant-HK", returns "HKD". - public var currencyCode: String? { - return _wrapped.object(forKey: .currencyCode) as? String - } - - /// Returns the collator identifier of the locale. - public var collatorIdentifier: String? { - return _wrapped.object(forKey: .collatorIdentifier) as? String - } - - /// Returns the quotation begin delimiter of the locale. - /// - /// For example, returns `“` for "en_US", and `「` for "zh-Hant-HK". - public var quotationBeginDelimiter: String? { - return _wrapped.object(forKey: .quotationBeginDelimiterKey) as? String - } - - /// Returns the quotation end delimiter of the locale. - /// - /// For example, returns `”` for "en_US", and `」` for "zh-Hant-HK". - public var quotationEndDelimiter: String? { - return _wrapped.object(forKey: .quotationEndDelimiterKey) as? String - } - - /// Returns the alternate quotation begin delimiter of the locale. - /// - /// For example, returns `‘` for "en_US", and `『` for "zh-Hant-HK". - public var alternateQuotationBeginDelimiter: String? { - return _wrapped.object(forKey: .alternateQuotationBeginDelimiterKey) as? String - } - - /// Returns the alternate quotation end delimiter of the locale. - /// - /// For example, returns `’` for "en_US", and `』` for "zh-Hant-HK". - public var alternateQuotationEndDelimiter: String? { - return _wrapped.object(forKey: .alternateQuotationEndDelimiterKey) as? String - } - - // MARK: - - // - - /// Returns a list of available `Locale` identifiers. - public static var availableIdentifiers: [String] { - return NSLocale.availableLocaleIdentifiers - } - - /// Returns a list of available `Locale` language codes. - public static var isoLanguageCodes: [String] { - return NSLocale.isoLanguageCodes - } - - /// Returns a list of available `Locale` region codes. - public static var isoRegionCodes: [String] { - // This was renamed from Obj-C - return NSLocale.isoCountryCodes - } - - /// Returns a list of available `Locale` currency codes. - public static var isoCurrencyCodes: [String] { - return NSLocale.isoCurrencyCodes - } - - /// Returns a list of common `Locale` currency codes. - public static var commonISOCurrencyCodes: [String] { - return NSLocale.commonISOCurrencyCodes - } - - /// Returns a list of the user's preferred languages. - /// - /// - note: `Bundle` is responsible for determining the language that your application will run in, based on the result of this API and combined with the languages your application supports. - /// - seealso: `Bundle.preferredLocalizations(from:)` - /// - seealso: `Bundle.preferredLocalizations(from:forPreferences:)` - public static var preferredLanguages: [String] { - return NSLocale.preferredLanguages - } - - /// Returns a dictionary that splits an identifier into its component pieces. - public static func components(fromIdentifier string: String) -> [String : String] { - return NSLocale.components(fromLocaleIdentifier: string) - } - - /// Constructs an identifier from a dictionary of components. - public static func identifier(fromComponents components: [String : String]) -> String { - return NSLocale.localeIdentifier(fromComponents: components) - } - - /// Returns a canonical identifier from the given string. - public static func canonicalIdentifier(from string: String) -> String { - return NSLocale.canonicalLocaleIdentifier(from: string) - } - - /// Returns a canonical language identifier from the given string. - public static func canonicalLanguageIdentifier(from string: String) -> String { - return NSLocale.canonicalLanguageIdentifier(from: string) - } - - /// Returns the `Locale` identifier from a given Windows locale code, or nil if it could not be converted. - public static func identifier(fromWindowsLocaleCode code: Int) -> String? { - return NSLocale.localeIdentifier(fromWindowsLocaleCode: UInt32(code)) - } - - /// Returns the Windows locale code from a given identifier, or nil if it could not be converted. - public static func windowsLocaleCode(fromIdentifier identifier: String) -> Int? { - let result = NSLocale.windowsLocaleCode(fromLocaleIdentifier: identifier) - if result == 0 { - return nil - } else { - return Int(result) - } - } - - /// Returns the character direction for a specified language code. - public static func characterDirection(forLanguage isoLangCode: String) -> Locale.LanguageDirection { - return NSLocale.characterDirection(forLanguage: isoLangCode) - } - - /// Returns the line direction for a specified language code. - public static func lineDirection(forLanguage isoLangCode: String) -> Locale.LanguageDirection { - return NSLocale.lineDirection(forLanguage: isoLangCode) - } - - // MARK: - - - @available(*, unavailable, renamed: "init(identifier:)") - public init(localeIdentifier: String) { fatalError() } - - @available(*, unavailable, renamed: "identifier") - public var localeIdentifier: String { fatalError() } - - @available(*, unavailable, renamed: "localizedString(forIdentifier:)") - public func localizedString(forLocaleIdentifier localeIdentifier: String) -> String { fatalError() } - - @available(*, unavailable, renamed: "availableIdentifiers") - public static var availableLocaleIdentifiers: [String] { fatalError() } - - @available(*, unavailable, renamed: "components(fromIdentifier:)") - public static func components(fromLocaleIdentifier string: String) -> [String : String] { fatalError() } - - @available(*, unavailable, renamed: "identifier(fromComponents:)") - public static func localeIdentifier(fromComponents dict: [String : String]) -> String { fatalError() } - - @available(*, unavailable, renamed: "canonicalIdentifier(from:)") - public static func canonicalLocaleIdentifier(from string: String) -> String { fatalError() } - - @available(*, unavailable, renamed: "identifier(fromWindowsLocaleCode:)") - public static func localeIdentifier(fromWindowsLocaleCode lcid: UInt32) -> String? { fatalError() } - - @available(*, unavailable, renamed: "windowsLocaleCode(fromIdentifier:)") - public static func windowsLocaleCode(fromLocaleIdentifier localeIdentifier: String) -> UInt32 { fatalError() } - - @available(*, unavailable, message: "use regionCode instead") - public var countryCode: String { fatalError() } - - @available(*, unavailable, message: "use localizedString(forRegionCode:) instead") - public func localizedString(forCountryCode countryCode: String) -> String { fatalError() } - - @available(*, unavailable, renamed: "isoRegionCodes") - public static var isoCountryCodes: [String] { fatalError() } - - // MARK: - - // - - public func hash(into hasher: inout Hasher) { - if _autoupdating { - hasher.combine(false) - } else { - hasher.combine(true) - hasher.combine(_wrapped) - } - } - - public static func ==(lhs: Locale, rhs: Locale) -> Bool { - if lhs._autoupdating || rhs._autoupdating { - return lhs._autoupdating == rhs._autoupdating - } else { - return lhs._wrapped.isEqual(rhs._wrapped) - } - } -} - -extension Locale : CustomDebugStringConvertible, CustomStringConvertible, CustomReflectable { - private var _kindDescription : String { - if self == Locale.autoupdatingCurrent { - return "autoupdatingCurrent" - } else if self == Locale.current { - return "current" - } else { - return "fixed" - } - } - - public var customMirror : Mirror { - var c: [(label: String?, value: Any)] = [] - c.append((label: "identifier", value: identifier)) - c.append((label: "kind", value: _kindDescription)) - return Mirror(self, children: c, displayStyle: Mirror.DisplayStyle.struct) - } - - public var description: String { - return "\(identifier) (\(_kindDescription))" - } - - public var debugDescription : String { - return "\(identifier) (\(_kindDescription))" - } -} - -extension Locale : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSLocale { - return _wrapped - } - - public static func _forceBridgeFromObjectiveC(_ input: NSLocale, result: inout Locale?) { - if !_conditionallyBridgeFromObjectiveC(input, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ input: NSLocale, result: inout Locale?) -> Bool { - result = Locale(reference: input) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSLocale?) -> Locale { - var result: Locale? - _forceBridgeFromObjectiveC(source!, result: &result) - return result! - } -} - -extension NSLocale : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as Locale) - } -} - -extension Locale : Codable { - private enum CodingKeys : Int, CodingKey { - case identifier - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let identifier = try container.decode(String.self, forKey: .identifier) - self.init(identifier: identifier) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(self.identifier, forKey: .identifier) - } -} diff --git a/Darwin/Foundation-swiftoverlay/Measurement.swift b/Darwin/Foundation-swiftoverlay/Measurement.swift deleted file mode 100644 index d502904b90..0000000000 --- a/Darwin/Foundation-swiftoverlay/Measurement.swift +++ /dev/null @@ -1,358 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#if DEPLOYMENT_RUNTIME_SWIFT -import CoreFoundation -#else -@_exported import Foundation // Clang module -@_implementationOnly import _CoreFoundationOverlayShims -#endif - -/// A `Measurement` is a model type that holds a `Double` value associated with a `Unit`. -/// -/// Measurements support a large set of operators, including `+`, `-`, `*`, `/`, and a full set of comparison operators. -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -public struct Measurement : ReferenceConvertible, Comparable, Equatable { - public typealias ReferenceType = NSMeasurement - - /// The unit component of the `Measurement`. - public let unit: UnitType - - /// The value component of the `Measurement`. - public var value: Double - - /// Create a `Measurement` given a specified value and unit. - public init(value: Double, unit: UnitType) { - self.value = value - self.unit = unit - } - - public func hash(into hasher: inout Hasher) { - // Warning: The canonicalization performed here needs to be kept in - // perfect sync with the definition of == below. The floating point - // values that are compared there must match exactly with the values fed - // to the hasher here, or hashing would break. - if let dimension = unit as? Dimension { - // We don't need to feed the base unit to the hasher here; all - // dimensional measurements of the same type share the same unit. - hasher.combine(dimension.converter.baseUnitValue(fromValue: value)) - } else { - hasher.combine(unit) - hasher.combine(value) - } - } -} - -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -extension Measurement : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - public var description: String { - return "\(value) \(unit.symbol)" - } - - public var debugDescription: String { - return "\(value) \(unit.symbol)" - } - - public var customMirror: Mirror { - var c: [(label: String?, value: Any)] = [] - c.append((label: "value", value: value)) - c.append((label: "unit", value: unit.symbol)) - return Mirror(self, children: c, displayStyle: Mirror.DisplayStyle.struct) - } -} - - -/// When a `Measurement` contains a `Dimension` unit, it gains the ability to convert between the kinds of units in that dimension. -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -extension Measurement where UnitType : Dimension { - /// Returns a new measurement created by converting to the specified unit. - /// - /// - parameter otherUnit: A unit of the same `Dimension`. - /// - returns: A converted measurement. - public func converted(to otherUnit: UnitType) -> Measurement { - if unit.isEqual(otherUnit) { - return Measurement(value: value, unit: otherUnit) - } else { - let valueInTermsOfBase = unit.converter.baseUnitValue(fromValue: value) - if otherUnit.isEqual(type(of: unit).baseUnit()) { - return Measurement(value: valueInTermsOfBase, unit: otherUnit) - } else { - let otherValueFromTermsOfBase = otherUnit.converter.value(fromBaseUnitValue: valueInTermsOfBase) - return Measurement(value: otherValueFromTermsOfBase, unit: otherUnit) - } - } - } - - /// Converts the measurement to the specified unit. - /// - /// - parameter otherUnit: A unit of the same `Dimension`. - public mutating func convert(to otherUnit: UnitType) { - self = converted(to: otherUnit) - } - - /// Add two measurements of the same Dimension. - /// - /// If the `unit` of the `lhs` and `rhs` are `isEqual`, then this returns the result of adding the `value` of each `Measurement`. If they are not equal, then this will convert both to the base unit of the `Dimension` and return the result as a `Measurement` of that base unit. - /// - returns: The result of adding the two measurements. - public static func +(lhs: Measurement, rhs: Measurement) -> Measurement { - if lhs.unit.isEqual(rhs.unit) { - return Measurement(value: lhs.value + rhs.value, unit: lhs.unit) - } else { - let lhsValueInTermsOfBase = lhs.unit.converter.baseUnitValue(fromValue: lhs.value) - let rhsValueInTermsOfBase = rhs.unit.converter.baseUnitValue(fromValue: rhs.value) - return Measurement(value: lhsValueInTermsOfBase + rhsValueInTermsOfBase, unit: type(of: lhs.unit).baseUnit()) - } - } - - /// Subtract two measurements of the same Dimension. - /// - /// If the `unit` of the `lhs` and `rhs` are `==`, then this returns the result of subtracting the `value` of each `Measurement`. If they are not equal, then this will convert both to the base unit of the `Dimension` and return the result as a `Measurement` of that base unit. - /// - returns: The result of adding the two measurements. - public static func -(lhs: Measurement, rhs: Measurement) -> Measurement { - if lhs.unit == rhs.unit { - return Measurement(value: lhs.value - rhs.value, unit: lhs.unit) - } else { - let lhsValueInTermsOfBase = lhs.unit.converter.baseUnitValue(fromValue: lhs.value) - let rhsValueInTermsOfBase = rhs.unit.converter.baseUnitValue(fromValue: rhs.value) - return Measurement(value: lhsValueInTermsOfBase - rhsValueInTermsOfBase, unit: type(of: lhs.unit).baseUnit()) - } - } -} - -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -extension Measurement { - /// Add two measurements of the same Unit. - /// - precondition: The `unit` of `lhs` and `rhs` must be `isEqual`. - /// - returns: A measurement of value `lhs.value + rhs.value` and unit `lhs.unit`. - public static func +(lhs: Measurement, rhs: Measurement) -> Measurement { - if lhs.unit.isEqual(rhs.unit) { - return Measurement(value: lhs.value + rhs.value, unit: lhs.unit) - } else { - fatalError("Attempt to add measurements with non-equal units") - } - } - - /// Subtract two measurements of the same Unit. - /// - precondition: The `unit` of `lhs` and `rhs` must be `isEqual`. - /// - returns: A measurement of value `lhs.value - rhs.value` and unit `lhs.unit`. - public static func -(lhs: Measurement, rhs: Measurement) -> Measurement { - if lhs.unit.isEqual(rhs.unit) { - return Measurement(value: lhs.value - rhs.value, unit: lhs.unit) - } else { - fatalError("Attempt to subtract measurements with non-equal units") - } - } - - /// Multiply a measurement by a scalar value. - /// - returns: A measurement of value `lhs.value * rhs` with the same unit as `lhs`. - public static func *(lhs: Measurement, rhs: Double) -> Measurement { - return Measurement(value: lhs.value * rhs, unit: lhs.unit) - } - - /// Multiply a scalar value by a measurement. - /// - returns: A measurement of value `lhs * rhs.value` with the same unit as `rhs`. - public static func *(lhs: Double, rhs: Measurement) -> Measurement { - return Measurement(value: lhs * rhs.value, unit: rhs.unit) - } - - /// Divide a measurement by a scalar value. - /// - returns: A measurement of value `lhs.value / rhs` with the same unit as `lhs`. - public static func /(lhs: Measurement, rhs: Double) -> Measurement { - return Measurement(value: lhs.value / rhs, unit: lhs.unit) - } - - /// Divide a scalar value by a measurement. - /// - returns: A measurement of value `lhs / rhs.value` with the same unit as `rhs`. - public static func /(lhs: Double, rhs: Measurement) -> Measurement { - return Measurement(value: lhs / rhs.value, unit: rhs.unit) - } - - /// Compare two measurements of the same `Dimension`. - /// - /// If `lhs.unit == rhs.unit`, returns `lhs.value == rhs.value`. Otherwise, converts `rhs` to the same unit as `lhs` and then compares the resulting values. - /// - returns: `true` if the measurements are equal. - public static func ==(lhs: Measurement, rhs: Measurement) -> Bool { - // Warning: This defines an equivalence relation that needs to be kept - // in perfect sync with the hash(into:) definition above. The floating - // point values that are fed to the hasher there must match exactly with - // the values compared here, or hashing would break. - if lhs.unit == rhs.unit { - return lhs.value == rhs.value - } else { - if let lhsDimensionalUnit = lhs.unit as? Dimension, - let rhsDimensionalUnit = rhs.unit as? Dimension { - if type(of: lhsDimensionalUnit).baseUnit() == type(of: rhsDimensionalUnit).baseUnit() { - let lhsValueInTermsOfBase = lhsDimensionalUnit.converter.baseUnitValue(fromValue: lhs.value) - let rhsValueInTermsOfBase = rhsDimensionalUnit.converter.baseUnitValue(fromValue: rhs.value) - return lhsValueInTermsOfBase == rhsValueInTermsOfBase - } - } - return false - } - } - - /// Compare two measurements of the same `Unit`. - /// - returns: `true` if the measurements can be compared and the `lhs` is less than the `rhs` converted value. - public static func <(lhs: Measurement, rhs: Measurement) -> Bool { - if lhs.unit == rhs.unit { - return lhs.value < rhs.value - } else { - if let lhsDimensionalUnit = lhs.unit as? Dimension, - let rhsDimensionalUnit = rhs.unit as? Dimension { - if type(of: lhsDimensionalUnit).baseUnit() == type(of: rhsDimensionalUnit).baseUnit() { - let lhsValueInTermsOfBase = lhsDimensionalUnit.converter.baseUnitValue(fromValue: lhs.value) - let rhsValueInTermsOfBase = rhsDimensionalUnit.converter.baseUnitValue(fromValue: rhs.value) - return lhsValueInTermsOfBase < rhsValueInTermsOfBase - } - } - fatalError("Attempt to compare measurements with non-equal dimensions") - } - } -} - -// Implementation note: similar to NSArray, NSDictionary, etc., NSMeasurement's import as an ObjC generic type is suppressed by the importer. Eventually we will need a more general purpose mechanism to correctly import generic types. - -// FIXME: Remove @usableFromInline from MeasurementBridgeType once -// rdar://problem/44662501 is fixed. (The Radar basically just says "look -// through typealiases and inherited protocols when printing extensions".) - -#if DEPLOYMENT_RUNTIME_SWIFT -@usableFromInline -internal typealias MeasurementBridgeType = _ObjectTypeBridgeable -#else -@usableFromInline -internal typealias MeasurementBridgeType = _ObjectiveCBridgeable -#endif - -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -extension Measurement : MeasurementBridgeType { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSMeasurement { - return NSMeasurement(doubleValue: value, unit: unit) - } - - public static func _forceBridgeFromObjectiveC(_ source: NSMeasurement, result: inout Measurement?) { - result = Measurement(value: source.doubleValue, unit: source.unit as! UnitType) - } - - public static func _conditionallyBridgeFromObjectiveC(_ source: NSMeasurement, result: inout Measurement?) -> Bool { - if let u = source.unit as? UnitType { - result = Measurement(value: source.doubleValue, unit: u) - return true - } else { - return false - } - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSMeasurement?) -> Measurement { - let u = source!.unit as! UnitType - return Measurement(value: source!.doubleValue, unit: u) - } -} - -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -extension NSMeasurement : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { -#if DEPLOYMENT_RUNTIME_SWIFT - return AnyHashable(Measurement._unconditionallyBridgeFromObjectiveC(self)) -#else - return AnyHashable(self as Measurement) -#endif - } -} - -// This workaround is required for the time being, because Swift doesn't support covariance for Measurement (26607639) -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -extension MeasurementFormatter { - public func string(from measurement: Measurement) -> String { - if let result = string(for: measurement) { - return result - } else { - return "" - } - } -} - -// @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -// extension Unit : Codable { -// public convenience init(from decoder: Decoder) throws { -// let container = try decoder.singleValueContainer() -// let symbol = try container.decode(String.self) -// self.init(symbol: symbol) -// } - -// public func encode(to encoder: Encoder) throws { -// var container = encoder.singleValueContainer() -// try container.encode(self.symbol) -// } -// } - -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -extension Measurement : Codable { - private enum CodingKeys : Int, CodingKey { - case value - case unit - } - - private enum UnitCodingKeys : Int, CodingKey { - case symbol - case converter - } - - private enum LinearConverterCodingKeys : Int, CodingKey { - case coefficient - case constant - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let value = try container.decode(Double.self, forKey: .value) - - let unitContainer = try container.nestedContainer(keyedBy: UnitCodingKeys.self, forKey: .unit) - let symbol = try unitContainer.decode(String.self, forKey: .symbol) - - let unit: UnitType - if UnitType.self is Dimension.Type { - let converterContainer = try unitContainer.nestedContainer(keyedBy: LinearConverterCodingKeys.self, forKey: .converter) - let coefficient = try converterContainer.decode(Double.self, forKey: .coefficient) - let constant = try converterContainer.decode(Double.self, forKey: .constant) - let unitMetaType = (UnitType.self as! Dimension.Type) - unit = (unitMetaType.init(symbol: symbol, converter: UnitConverterLinear(coefficient: coefficient, constant: constant)) as! UnitType) - } else { - unit = UnitType(symbol: symbol) - } - - self.init(value: value, unit: unit) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(self.value, forKey: .value) - - var unitContainer = container.nestedContainer(keyedBy: UnitCodingKeys.self, forKey: .unit) - try unitContainer.encode(self.unit.symbol, forKey: .symbol) - - if UnitType.self is Dimension.Type { - guard type(of: (self.unit as! Dimension).converter) is UnitConverterLinear.Type else { - preconditionFailure("Cannot encode a Measurement whose UnitType has a non-linear unit converter.") - } - - let converter = (self.unit as! Dimension).converter as! UnitConverterLinear - var converterContainer = unitContainer.nestedContainer(keyedBy: LinearConverterCodingKeys.self, forKey: .converter) - try converterContainer.encode(converter.coefficient, forKey: .coefficient) - try converterContainer.encode(converter.constant, forKey: .constant) - } - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSArray.swift b/Darwin/Foundation-swiftoverlay/NSArray.swift deleted file mode 100644 index 65b1ea2c6f..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSArray.swift +++ /dev/null @@ -1,166 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -//===----------------------------------------------------------------------===// -// Arrays -//===----------------------------------------------------------------------===// - -extension NSArray : ExpressibleByArrayLiteral { - /// Create an instance initialized with `elements`. - public required convenience init(arrayLiteral elements: Any...) { - // Let bridging take care of it. - self.init(array: elements) - } -} - -extension Array : _ObjectiveCBridgeable { - - /// Private initializer used for bridging. - /// - /// The provided `NSArray` will be copied to ensure that the copy can - /// not be mutated by other code. - internal init(_cocoaArray: __shared NSArray) { - assert(_isBridgedVerbatimToObjectiveC(Element.self), - "Array can be backed by NSArray only when the element type can be bridged verbatim to Objective-C") - // FIXME: We would like to call CFArrayCreateCopy() to avoid doing an - // objc_msgSend() for instances of CoreFoundation types. We can't do that - // today because CFArrayCreateCopy() copies array contents unconditionally, - // resulting in O(n) copies even for immutable arrays. - // - // CFArrayCreateCopy() is >10x slower than - // -[NSArray copyWithZone:] - // - // The bug is fixed in: OS X 10.11.0, iOS 9.0, all versions of tvOS - // and watchOS. - self = Array(_immutableCocoaArray: _cocoaArray.copy() as AnyObject) - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSArray { - return unsafeBitCast(self._bridgeToObjectiveCImpl(), to: NSArray.self) - } - - public static func _forceBridgeFromObjectiveC( - _ source: NSArray, - result: inout Array? - ) { - // If we have the appropriate native storage already, just adopt it. - if let native = - Array._bridgeFromObjectiveCAdoptingNativeStorageOf(source) { - result = native - return - } - - if _fastPath(_isBridgedVerbatimToObjectiveC(Element.self)) { - // Forced down-cast (possible deferred type-checking) - result = Array(_cocoaArray: source) - return - } - - result = _arrayForceCast([AnyObject](_cocoaArray: source)) - } - - public static func _conditionallyBridgeFromObjectiveC( - _ source: NSArray, - result: inout Array? - ) -> Bool { - // Construct the result array by conditionally bridging each element. - let anyObjectArr = [AnyObject](_cocoaArray: source) - - result = _arrayConditionalCast(anyObjectArr) - return result != nil - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC( - _ source: NSArray? - ) -> Array { - // `nil` has historically been used as a stand-in for an empty - // array; map it to an empty array instead of failing. - if _slowPath(source == nil) { return Array() } - - // If we have the appropriate native storage already, just adopt it. - if let native = - Array._bridgeFromObjectiveCAdoptingNativeStorageOf(source!) { - return native - } - - if _fastPath(_isBridgedVerbatimToObjectiveC(Element.self)) { - // Forced down-cast (possible deferred type-checking) - return Array(_cocoaArray: source!) - } - - return _arrayForceCast([AnyObject](_cocoaArray: source!)) - } -} - -extension NSArray : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as! Array) - } -} - -extension NSArray : Sequence { - /// Return an *iterator* over the elements of this *sequence*. - /// - /// - Complexity: O(1). - final public func makeIterator() -> NSFastEnumerationIterator { - return NSFastEnumerationIterator(self) - } -} - -/* TODO: API review -extension NSArray : Swift.Collection { - final public var startIndex: Int { - return 0 - } - - final public var endIndex: Int { - return count - } -} - */ - -extension NSArray { - // Overlay: - (instancetype)initWithObjects:(id)firstObj, ... - public convenience init(objects elements: Any...) { - self.init(array: elements) - } -} - -extension NSArray { - /// Initializes a newly allocated array by placing in it the objects - /// contained in a given array. - /// - /// - Returns: An array initialized to contain the objects in - /// `anArray``. The returned object might be different than the - /// original receiver. - /// - /// Discussion: After an immutable array has been initialized in - /// this way, it cannot be modified. - @nonobjc - public convenience init(array anArray: __shared NSArray) { - self.init(array: anArray as Array) - } -} - -extension NSArray : CustomReflectable { - public var customMirror: Mirror { - return Mirror(reflecting: self as [AnyObject]) - } -} - -extension Array: CVarArg {} diff --git a/Darwin/Foundation-swiftoverlay/NSCoder.swift b/Darwin/Foundation-swiftoverlay/NSCoder.swift deleted file mode 100644 index 4426952edb..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSCoder.swift +++ /dev/null @@ -1,231 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -@_implementationOnly import _FoundationOverlayShims - -//===----------------------------------------------------------------------===// -// NSCoder -//===----------------------------------------------------------------------===// - -@available(macOS 10.11, iOS 9.0, *) -internal func resolveError(_ error: NSError?) throws { - if let error = error, error.code != NSCoderValueNotFoundError { - throw error - } -} - -extension NSCoder { - @available(*, unavailable, renamed: "decodeObject(of:forKey:)") - public func decodeObjectOfClass( - _ cls: DecodedObjectType.Type, forKey key: String - ) -> DecodedObjectType? - where DecodedObjectType : NSCoding, DecodedObjectType : NSObject { - fatalError("This API has been renamed") - } - - public func decodeObject( - of cls: DecodedObjectType.Type, forKey key: String - ) -> DecodedObjectType? - where DecodedObjectType : NSCoding, DecodedObjectType : NSObject { - let result = __NSCoderDecodeObjectOfClassForKey(self, cls, key, nil) - return result as? DecodedObjectType - } - - @available(*, unavailable, renamed: "decodeObject(of:forKey:)") - @nonobjc - public func decodeObjectOfClasses(_ classes: NSSet?, forKey key: String) -> AnyObject? { - fatalError("This API has been renamed") - } - - @nonobjc - public func decodeObject(of classes: [AnyClass]?, forKey key: String) -> Any? { - var classesAsNSObjects: NSSet? - if let theClasses = classes { - classesAsNSObjects = NSSet(array: theClasses.map { $0 as AnyObject }) - } - return __NSCoderDecodeObjectOfClassesForKey(self, classesAsNSObjects, key, nil).map { $0 } - } - - @nonobjc - @available(macOS 10.11, iOS 9.0, *) - public func decodeTopLevelObject() throws -> Any? { - var error: NSError? - let result = __NSCoderDecodeObject(self, &error) - try resolveError(error) - return result.map { $0 } - } - - @available(*, unavailable, renamed: "decodeTopLevelObject(forKey:)") - public func decodeTopLevelObjectForKey(_ key: String) throws -> AnyObject? { - fatalError("This API has been renamed") - } - - @nonobjc - @available(swift, obsoleted: 4) - @available(macOS 10.11, iOS 9.0, *) - public func decodeTopLevelObject(forKey key: String) throws -> AnyObject? { - var error: NSError? - let result = __NSCoderDecodeObjectForKey(self, key, &error) - try resolveError(error) - return result as AnyObject? - } - - @nonobjc - @available(swift, introduced: 4) - @available(macOS 10.11, iOS 9.0, *) - public func decodeTopLevelObject(forKey key: String) throws -> Any? { - var error: NSError? - let result = __NSCoderDecodeObjectForKey(self, key, &error) - try resolveError(error) - return result - } - - @available(*, unavailable, renamed: "decodeTopLevelObject(of:forKey:)") - public func decodeTopLevelObjectOfClass( - _ cls: DecodedObjectType.Type, forKey key: String - ) throws -> DecodedObjectType? - where DecodedObjectType : NSCoding, DecodedObjectType : NSObject { - fatalError("This API has been renamed") - } - - @available(macOS 10.11, iOS 9.0, *) - public func decodeTopLevelObject( - of cls: DecodedObjectType.Type, forKey key: String - ) throws -> DecodedObjectType? - where DecodedObjectType : NSCoding, DecodedObjectType : NSObject { - var error: NSError? - let result = __NSCoderDecodeObjectOfClassForKey(self, cls, key, &error) - try resolveError(error) - return result as? DecodedObjectType - } - - @nonobjc - @available(*, unavailable, renamed: "decodeTopLevelObject(of:forKey:)") - public func decodeTopLevelObjectOfClasses(_ classes: NSSet?, forKey key: String) throws -> AnyObject? { - fatalError("This API has been renamed") - } - - @nonobjc - @available(macOS 10.11, iOS 9.0, *) - public func decodeTopLevelObject(of classes: [AnyClass]?, forKey key: String) throws -> Any? { - var error: NSError? - var classesAsNSObjects: NSSet? - if let theClasses = classes { - classesAsNSObjects = NSSet(array: theClasses.map { $0 as AnyObject }) - } - let result = __NSCoderDecodeObjectOfClassesForKey(self, classesAsNSObjects, key, &error) - try resolveError(error) - return result.map { $0 } - } -} - -//===----------------------------------------------------------------------===// -// NSKeyedArchiver -//===----------------------------------------------------------------------===// - -extension NSKeyedArchiver { - @nonobjc - @available(macOS 10.11, iOS 9.0, *) - public func encodeEncodable(_ value: T, forKey key: String) throws { - let plistEncoder = PropertyListEncoder() - let plist = try plistEncoder.encodeToTopLevelContainer(value) - self.encode(plist, forKey: key) - } -} - -//===----------------------------------------------------------------------===// -// NSKeyedUnarchiver -//===----------------------------------------------------------------------===// - -extension NSKeyedUnarchiver { - @nonobjc - @available(swift, obsoleted: 4) - @available(macOS 10.11, iOS 9.0, *) - public class func unarchiveTopLevelObjectWithData(_ data: NSData) throws -> AnyObject? { - var error: NSError? - let result = __NSKeyedUnarchiverUnarchiveObject(self, data, &error) - try resolveError(error) - return result as AnyObject? - } - - @nonobjc - @available(swift, introduced: 4) - @available(macOS 10.11, iOS 9.0, *) - public class func unarchiveTopLevelObjectWithData(_ data: Data) throws -> Any? { - var error: NSError? - let result = __NSKeyedUnarchiverUnarchiveObject(self, data as NSData, &error) - try resolveError(error) - return result - } - - @nonobjc - @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) - public static func unarchivedObject(ofClass cls: DecodedObjectType.Type, from data: Data) throws -> DecodedObjectType? where DecodedObjectType : NSCoding, DecodedObjectType : NSObject { - var error: NSError? - let result = __NSKeyedUnarchiverSecureUnarchiveObjectOfClass(cls as AnyClass, data, &error) - if let error = error { throw error } - return result as? DecodedObjectType - } - - @nonobjc - @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) - public static func unarchivedObject(ofClasses classes: [AnyClass], from data: Data) throws -> Any? { - var error: NSError? - let classesAsNSObjects = NSSet(array: classes.map { $0 as AnyObject }) - let result = __NSKeyedUnarchiverSecureUnarchiveObjectOfClasses(classesAsNSObjects, data, &error) - if let error = error { throw error } - return result - } - - @nonobjc - private static let __plistClasses: [AnyClass] = [ - NSArray.self, - NSData.self, - NSDate.self, - NSDictionary.self, - NSNumber.self, - NSString.self - ] - - @nonobjc - @available(macOS 10.11, iOS 9.0, *) - public func decodeDecodable(_ type: T.Type, forKey key: String) -> T? { - guard let value = self.decodeObject(of: NSKeyedUnarchiver.__plistClasses, forKey: key) else { - return nil - } - - let plistDecoder = PropertyListDecoder() - do { - return try plistDecoder.decode(T.self, fromTopLevel: value) - } catch { - self.failWithError(error) - return nil - } - } - - @nonobjc - @available(macOS 10.11, iOS 9.0, *) - public func decodeTopLevelDecodable(_ type: T.Type, forKey key: String) throws -> T? { - guard let value = try self.decodeTopLevelObject(of: NSKeyedUnarchiver.__plistClasses, forKey: key) else { - return nil - } - - let plistDecoder = PropertyListDecoder() - do { - return try plistDecoder.decode(T.self, fromTopLevel: value) - } catch { - self.failWithError(error) - throw error; - } - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSData+DataProtocol.swift b/Darwin/Foundation-swiftoverlay/NSData+DataProtocol.swift deleted file mode 100644 index 5c6a9b56be..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSData+DataProtocol.swift +++ /dev/null @@ -1,56 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2018 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - - -extension NSData : DataProtocol { - - @nonobjc - public var startIndex: Int { return 0 } - - @nonobjc - public var endIndex: Int { return length } - - @nonobjc - public func lastRange(of data: D, in r: R) -> Range? where D : DataProtocol, R : RangeExpression, NSData.Index == R.Bound { - return Range(range(of: Data(data), options: .backwards, in: NSRange(r))) - } - - @nonobjc - public func firstRange(of data: D, in r: R) -> Range? where D : DataProtocol, R : RangeExpression, NSData.Index == R.Bound { - return Range(range(of: Data(data), in: NSRange(r))) - } - - @nonobjc - public var regions: [Data] { - var datas = [Data]() - enumerateBytes { (ptr, range, stop) in - datas.append(Data(bytesNoCopy: UnsafeMutableRawPointer(mutating: ptr), count: range.length, deallocator: .custom({ (ptr: UnsafeMutableRawPointer, count: Int) -> Void in - withExtendedLifetime(self) { } - }))) - } - return datas - } - - @nonobjc - public subscript(position: Int) -> UInt8 { - var byte = UInt8(0) - var offset = position - enumerateBytes { (ptr, range, stop) in - offset -= range.lowerBound - if range.contains(position) { - byte = ptr.load(fromByteOffset: offset, as: UInt8.self) - stop.pointee = true - } - } - return byte - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSDate.swift b/Darwin/Foundation-swiftoverlay/NSDate.swift deleted file mode 100644 index 0cdbc9df7b..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSDate.swift +++ /dev/null @@ -1,28 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -extension NSDate : _CustomPlaygroundQuickLookable { - @nonobjc - var summary: String { - let df = DateFormatter() - df.dateStyle = .medium - df.timeStyle = .short - return df.string(from: self as Date) - } - - @available(*, deprecated, message: "NSDate.customPlaygroundQuickLook will be removed in a future Swift version") - public var customPlaygroundQuickLook: PlaygroundQuickLook { - return .text(summary) - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSDictionary.swift b/Darwin/Foundation-swiftoverlay/NSDictionary.swift deleted file mode 100644 index 0bc2693b06..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSDictionary.swift +++ /dev/null @@ -1,465 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -@_implementationOnly import _FoundationOverlayShims - -// We don't check for NSCopying here for performance reasons. We would -// just crash anyway, and NSMutableDictionary will still do that when -// it tries to call -copyWithZone: and it's not there -private func duckCastToNSCopying(_ x: Any) -> NSCopying { - return _unsafeReferenceCast(x as AnyObject, to: NSCopying.self) -} - -//===----------------------------------------------------------------------===// -// Dictionaries -//===----------------------------------------------------------------------===// - -extension NSDictionary : ExpressibleByDictionaryLiteral { - public required convenience init( - dictionaryLiteral elements: (Any, Any)... - ) { - - self.init( - objects: elements.map { $0.1 as AnyObject }, - forKeys: elements.map { duckCastToNSCopying($0.0) }, - count: elements.count) - } -} - -extension Dictionary { - /// Private initializer used for bridging. - /// - /// The provided `NSDictionary` will be copied to ensure that the copy can - /// not be mutated by other code. - private init(_cocoaDictionary: __shared NSDictionary) { - assert( - _isBridgedVerbatimToObjectiveC(Key.self) && - _isBridgedVerbatimToObjectiveC(Value.self), - "Dictionary can be backed by NSDictionary storage only when both key and value are bridged verbatim to Objective-C") - // FIXME: We would like to call CFDictionaryCreateCopy() to avoid doing an - // objc_msgSend() for instances of CoreFoundation types. We can't do that - // today because CFDictionaryCreateCopy() copies dictionary contents - // unconditionally, resulting in O(n) copies even for immutable dictionaries. - // - // CFDictionaryCreateCopy() does not call copyWithZone: - // - // The bug is fixed in: OS X 10.11.0, iOS 9.0, all versions of tvOS - // and watchOS. - self = Dictionary( - _immutableCocoaDictionary: _cocoaDictionary.copy(with: nil) as AnyObject) - } -} - -// Dictionary is conditionally bridged to NSDictionary -extension Dictionary : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSDictionary { - return unsafeBitCast(_bridgeToObjectiveCImpl(), - to: NSDictionary.self) - } - - /*** - Precondition: `buffer` points to a region of memory bound to `AnyObject`, - with a capacity large enough to fit at least `index`+1 elements of type `T` - - _bridgeInitialize rebinds the `index`th `T` of `buffer` to `T`, - and initializes it to `value` - - Note: *not* the `index`th element of `buffer`, since T and AnyObject may be - different sizes. e.g. if T is String (2 words) then given a buffer like so: - - [object:AnyObject, object:AnyObject, uninitialized, uninitialized] - - `_bridgeInitialize(1, of: buffer, to: buffer[1] as! T)` will leave it as: - - [object:AnyObject, object:AnyObject, string:String] - - and `_bridgeInitialize(0, of: buffer, to: buffer[0] as! T)` will then leave: - - [string:String, string:String] - - Doing this in reverse order as shown above is required if T and AnyObject are - different sizes. Here's what we get if instead of 1, 0 we did 0, 1: - - [object:AnyObject, object:AnyObject, uninitialized, uninitialized] - [string:String, uninitialized, uninitialized] - - - Note: if you have retained any of the objects in `buffer`, you must release - them separately, _bridgeInitialize will overwrite them without releasing them - */ - @inline(__always) - private static func _bridgeInitialize(index:Int, - of buffer: UnsafePointer, to value: T) { - let typedBase = UnsafeMutableRawPointer(mutating: - buffer).assumingMemoryBound(to: T.self) - let rawTarget = UnsafeMutableRawPointer(mutating: typedBase + index) - rawTarget.initializeMemory(as: T.self, repeating: value, count: 1) - } - - @inline(__always) - private static func _verbatimForceBridge( - _ buffer: UnsafeMutablePointer, - count: Int, - to: T.Type - ) { - //doesn't have to iterate in reverse because sizeof(T) == sizeof(AnyObject) - for i in 0..( - _ buffer: UnsafeMutablePointer, - count: Int, - to type: T.Type - ) -> Int { - var numUninitialized = count - while numUninitialized > 0 { - guard let bridged = buffer[numUninitialized - 1] as? T else { - return numUninitialized - } - numUninitialized -= 1 - _bridgeInitialize(index: numUninitialized, of: buffer, to: bridged) - } - return numUninitialized - } - - @inline(__always) - private static func _nonVerbatimForceBridge( - _ buffer: UnsafeMutablePointer, - count: Int, - to: T.Type - ) { - for i in (0..( - _ buffer: UnsafeMutablePointer, - count: Int, - to: T.Type - ) -> Int { - var numUninitialized = count - while numUninitialized > 0 { - guard let bridged = Swift._conditionallyBridgeFromObjectiveC( - buffer[numUninitialized - 1], T.self) - else { - return numUninitialized - } - numUninitialized -= 1 - _bridgeInitialize(index: numUninitialized, of: buffer, to: bridged) - } - return numUninitialized - } - - @inline(__always) - private static func _forceBridge( - _ buffer: UnsafeMutablePointer, - count: Int, - to: T.Type - ) { - if _isBridgedVerbatimToObjectiveC(T.self) { - _verbatimForceBridge(buffer, count: count, to: T.self) - } else { - _nonVerbatimForceBridge(buffer, count: count, to: T.self) - } - } - - @inline(__always) - private static func _conditionallyBridge( - _ buffer: UnsafeMutablePointer, - count: Int, - to: T.Type - ) -> Bool { - let numUninitialized:Int - if _isBridgedVerbatimToObjectiveC(T.self) { - numUninitialized = _verbatimBridge(buffer, count: count, to: T.self) - } else { - numUninitialized = _nonVerbatimBridge(buffer, count: count, to: T.self) - } - if numUninitialized == 0 { - return true - } - let numInitialized = count - numUninitialized - (UnsafeMutableRawPointer(mutating: buffer).assumingMemoryBound(to: - T.self) + numUninitialized).deinitialize(count: numInitialized) - return false - } - - @_specialize(where Key == String, Value == Any) - public static func _forceBridgeFromObjectiveC( - _ d: NSDictionary, - result: inout Dictionary? - ) { - if let native = [Key : Value]._bridgeFromObjectiveCAdoptingNativeStorageOf( - d as AnyObject) { - result = native - return - } - - if _isBridgedVerbatimToObjectiveC(Key.self) && - _isBridgedVerbatimToObjectiveC(Value.self) { - //Lazily type-checked on access - result = [Key : Value](_cocoaDictionary: d) - return - } - - let keyStride = MemoryLayout.stride - let valueStride = MemoryLayout.stride - let objectStride = MemoryLayout.stride - - //If Key or Value are smaller than AnyObject, a Dictionary with N elements - //doesn't have large enough backing stores to hold the objects to be bridged - //For now we just handle that case the slow way. - if keyStride < objectStride || valueStride < objectStride { - var builder = _DictionaryBuilder(count: d.count) - d.enumerateKeysAndObjects({ (anyKey: Any, anyValue: Any, _) in - builder.add( - key: anyKey as! Key, - value: anyValue as! Value) - }) - result = builder.take() - } else { - defer { _fixLifetime(d) } - - let numElems = d.count - - // String and NSString have different concepts of equality, so - // string-keyed NSDictionaries may generate key collisions when bridged - // over to Swift. See rdar://problem/35995647 - let handleDuplicates = (Key.self == String.self) - - result = Dictionary(_unsafeUninitializedCapacity: numElems, - allowingDuplicates: handleDuplicates) { keys, vals in - - let objectKeys = UnsafeMutableRawPointer(mutating: - keys.baseAddress!).assumingMemoryBound(to: AnyObject.self) - let objectVals = UnsafeMutableRawPointer(mutating: - vals.baseAddress!).assumingMemoryBound(to: AnyObject.self) - - //This initializes the first N AnyObjects of the Dictionary buffers. - //Any unused buffer space is left uninitialized - //This is fixed up in-place as we bridge elements, by _bridgeInitialize - __NSDictionaryGetObjects(d, objectVals, objectKeys, numElems) - - _forceBridge(objectKeys, count: numElems, to: Key.self) - _forceBridge(objectVals, count: numElems, to: Value.self) - - return numElems - } - } - } - - @_specialize(where Key == String, Value == Any) - public static func _conditionallyBridgeFromObjectiveC( - _ x: NSDictionary, - result: inout Dictionary? - ) -> Bool { - - if let native = [Key : Value]._bridgeFromObjectiveCAdoptingNativeStorageOf( - x as AnyObject) { - result = native - return true - } - - let keyStride = MemoryLayout.stride - let valueStride = MemoryLayout.stride - let objectStride = MemoryLayout.stride - - //If Key or Value are smaller than AnyObject, a Dictionary with N elements - //doesn't have large enough backing stores to hold the objects to be bridged - //For now we just handle that case the slow way. - if keyStride < objectStride || valueStride < objectStride { - result = x as [NSObject : AnyObject] as? Dictionary - return result != nil - } - - defer { _fixLifetime(x) } - - let numElems = x.count - var success = true - - // String and NSString have different concepts of equality, so - // string-keyed NSDictionaries may generate key collisions when bridged - // over to Swift. See rdar://problem/35995647 - let handleDuplicates = (Key.self == String.self) - - let tmpResult = Dictionary(_unsafeUninitializedCapacity: numElems, - allowingDuplicates: handleDuplicates) { keys, vals in - - let objectKeys = UnsafeMutableRawPointer(mutating: - keys.baseAddress!).assumingMemoryBound(to: AnyObject.self) - let objectVals = UnsafeMutableRawPointer(mutating: - vals.baseAddress!).assumingMemoryBound(to: AnyObject.self) - - //This initializes the first N AnyObjects of the Dictionary buffers. - //Any unused buffer space is left uninitialized - //This is fixed up in-place as we bridge elements, by _bridgeInitialize - __NSDictionaryGetObjects(x, objectVals, objectKeys, numElems) - - success = _conditionallyBridge(objectKeys, count: numElems, to: Key.self) - if success { - success = _conditionallyBridge(objectVals, - count: numElems, to: Value.self) - if !success { - (UnsafeMutableRawPointer(mutating: objectKeys).assumingMemoryBound(to: - Key.self)).deinitialize(count: numElems) - } - } - return success ? numElems : 0 - } - - result = success ? tmpResult : nil - return success - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC( - _ d: NSDictionary? - ) -> Dictionary { - // `nil` has historically been used as a stand-in for an empty - // dictionary; map it to an empty dictionary. - if _slowPath(d == nil) { return Dictionary() } - - var result: Dictionary? = nil - _forceBridgeFromObjectiveC(d!, result: &result) - return result! - } -} - -extension NSDictionary : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as! Dictionary) - } -} - -extension NSDictionary : Sequence { - // FIXME: A class because we can't pass a struct with class fields through an - // [objc] interface without prematurely destroying the references. - // NOTE: older runtimes had - // _TtCE10FoundationCSo12NSDictionary8Iterator as the ObjC name. The - // two must coexist, so it was renamed. The old name must not be used - // in the new runtime. - @_objcRuntimeName(_TtCE10FoundationCSo12NSDictionary9_Iterator) - final public class Iterator : IteratorProtocol { - var _fastIterator: NSFastEnumerationIterator - var _dictionary: NSDictionary { - return _fastIterator.enumerable as! NSDictionary - } - - public func next() -> (key: Any, value: Any)? { - if let key = _fastIterator.next() { - // Deliberately avoid the subscript operator in case the dictionary - // contains non-copyable keys. This is rare since NSMutableDictionary - // requires them, but we don't want to paint ourselves into a corner. - return (key: key, value: _dictionary.object(forKey: key)!) - } - return nil - } - - internal init(_ _dict: __shared NSDictionary) { - _fastIterator = NSFastEnumerationIterator(_dict) - } - } - - // Bridging subscript. - @objc - public subscript(key: Any) -> Any? { - @objc(__swift_objectForKeyedSubscript:) - get { - // Deliberately avoid the subscript operator in case the dictionary - // contains non-copyable keys. This is rare since NSMutableDictionary - // requires them, but we don't want to paint ourselves into a corner. - return self.object(forKey: key) - } - } - - /// Return an *iterator* over the elements of this *sequence*. - /// - /// - Complexity: O(1). - public func makeIterator() -> Iterator { - return Iterator(self) - } -} - -extension NSMutableDictionary { - // Bridging subscript. - @objc override public subscript(key: Any) -> Any? { - @objc(__swift_objectForKeyedSubscript:) - get { - return self.object(forKey: key) - } - @objc(__swift_setObject:forKeyedSubscript:) - set { - let copyingKey = duckCastToNSCopying(key) - if let newValue = newValue { - self.setObject(newValue, forKey: copyingKey) - } else { - self.removeObject(forKey: copyingKey) - } - } - } -} - -extension NSDictionary { - /// Initializes a newly allocated dictionary and adds to it objects from - /// another given dictionary. - /// - /// - Returns: An initialized dictionary--which might be different - /// than the original receiver--containing the keys and values - /// found in `otherDictionary`. - @objc(__swiftInitWithDictionary_NSDictionary:) - public convenience init(dictionary otherDictionary: __shared NSDictionary) { - // FIXME(performance)(compiler limitation): we actually want to do just - // `self = otherDictionary.copy()`, but Swift does not have factory - // initializers right now. - let numElems = otherDictionary.count - let stride = MemoryLayout.stride - let alignment = MemoryLayout.alignment - let singleSize = stride * numElems - let totalSize = singleSize * 2 - assert(stride == MemoryLayout.stride) - assert(alignment == MemoryLayout.alignment) - - // Allocate a buffer containing both the keys and values. - let buffer = UnsafeMutableRawPointer.allocate( - byteCount: totalSize, alignment: alignment) - defer { - buffer.deallocate() - _fixLifetime(otherDictionary) - } - - let valueBuffer = buffer.bindMemory(to: AnyObject.self, capacity: numElems) - let buffer2 = buffer + singleSize - - __NSDictionaryGetObjects(otherDictionary, buffer, buffer2, numElems) - - let keyBufferCopying = buffer2.assumingMemoryBound(to: NSCopying.self) - self.init(objects: valueBuffer, forKeys: keyBufferCopying, count: numElems) - } -} - -extension NSDictionary : CustomReflectable { - public var customMirror: Mirror { - return Mirror(reflecting: self as [NSObject : AnyObject]) - } -} - -extension Dictionary: CVarArg {} diff --git a/Darwin/Foundation-swiftoverlay/NSError.swift b/Darwin/Foundation-swiftoverlay/NSError.swift deleted file mode 100644 index 474da8b8ac..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSError.swift +++ /dev/null @@ -1,3330 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -import CoreFoundation -import Darwin -@_implementationOnly import _FoundationOverlayShims - -//===----------------------------------------------------------------------===// -// NSError (as an out parameter). -//===----------------------------------------------------------------------===// - -public typealias NSErrorPointer = AutoreleasingUnsafeMutablePointer? - -// Note: NSErrorPointer becomes ErrorPointer in Swift 3. -public typealias ErrorPointer = NSErrorPointer - -// An error value to use when an Objective-C API indicates error -// but produces a nil error object. -// This is 'internal' rather than 'private' for no other reason but to make the -// type print more nicely. It's not part of the ABI, so if type printing of -// private things improves we can change it. -internal enum _GenericObjCError : Error { - case nilError -} -// A cached instance of the above in order to save on the conversion to Error. -private let _nilObjCError: Error = _GenericObjCError.nilError - -public // COMPILER_INTRINSIC -func _convertNSErrorToError(_ error: NSError?) -> Error { - if let error = error { - return error - } - return _nilObjCError -} - -public // COMPILER_INTRINSIC -func _convertErrorToNSError(_ error: Error) -> NSError { - return unsafeDowncast(_bridgeErrorToNSError(error), to: NSError.self) -} - -/// Describes an error that provides localized messages describing why -/// an error occurred and provides more information about the error. -public protocol LocalizedError : Error { - /// A localized message describing what error occurred. - var errorDescription: String? { get } - - /// A localized message describing the reason for the failure. - var failureReason: String? { get } - - /// A localized message describing how one might recover from the failure. - var recoverySuggestion: String? { get } - - /// A localized message providing "help" text if the user requests help. - var helpAnchor: String? { get } -} - -public extension LocalizedError { - var errorDescription: String? { return nil } - var failureReason: String? { return nil } - var recoverySuggestion: String? { return nil } - var helpAnchor: String? { return nil } -} - -/// Class that implements the informal protocol -/// NSErrorRecoveryAttempting, which is used by NSError when it -/// attempts recovery from an error. -// NOTE: older overlays called this class _NSErrorRecoveryAttempter. -// The two must coexist without a conflicting ObjC class name, so it -// was renamed. The old name must not be used in the new runtime. -class __NSErrorRecoveryAttempter { - @objc(attemptRecoveryFromError:optionIndex:delegate:didRecoverSelector:contextInfo:) - func attemptRecovery(fromError nsError: NSError, - optionIndex recoveryOptionIndex: Int, - delegate: AnyObject?, - didRecoverSelector: Selector, - contextInfo: UnsafeMutableRawPointer?) { - let error = nsError as Error as! RecoverableError - error.attemptRecovery(optionIndex: recoveryOptionIndex) { success in - __NSErrorPerformRecoverySelector(delegate, didRecoverSelector, success, contextInfo) - } - } - - @objc(attemptRecoveryFromError:optionIndex:) - func attemptRecovery(fromError nsError: NSError, - optionIndex recoveryOptionIndex: Int) -> Bool { - let error = nsError as Error as! RecoverableError - return error.attemptRecovery(optionIndex: recoveryOptionIndex) - } -} - -/// Describes an error that may be recoverable by presenting several -/// potential recovery options to the user. -public protocol RecoverableError : Error { - /// Provides a set of possible recovery options to present to the user. - var recoveryOptions: [String] { get } - - /// Attempt to recover from this error when the user selected the - /// option at the given index. This routine must call handler and - /// indicate whether recovery was successful (or not). - /// - /// This entry point is used for recovery of errors handled at a - /// "document" granularity, that do not affect the entire - /// application. - func attemptRecovery(optionIndex recoveryOptionIndex: Int, - resultHandler handler: @escaping (_ recovered: Bool) -> Void) - - /// Attempt to recover from this error when the user selected the - /// option at the given index. Returns true to indicate - /// successful recovery, and false otherwise. - /// - /// This entry point is used for recovery of errors handled at - /// the "application" granularity, where nothing else in the - /// application can proceed until the attempted error recovery - /// completes. - func attemptRecovery(optionIndex recoveryOptionIndex: Int) -> Bool -} - -public extension RecoverableError { - /// Default implementation that uses the application-model recovery - /// mechanism (``attemptRecovery(optionIndex:)``) to implement - /// document-modal recovery. - func attemptRecovery(optionIndex recoveryOptionIndex: Int, - resultHandler handler: @escaping (_ recovered: Bool) -> Void) { - handler(attemptRecovery(optionIndex: recoveryOptionIndex)) - } -} - -/// Describes an error type that specifically provides a domain, code, -/// and user-info dictionary. -public protocol CustomNSError : Error { - /// The domain of the error. - static var errorDomain: String { get } - - /// The error code within the given domain. - var errorCode: Int { get } - - /// The user-info dictionary. - var errorUserInfo: [String : Any] { get } -} - -public extension CustomNSError { - /// Default domain of the error. - static var errorDomain: String { - return String(reflecting: self) - } - - /// The error code within the given domain. - var errorCode: Int { - return _getDefaultErrorCode(self) - } - - /// The default user-info dictionary. - var errorUserInfo: [String : Any] { - return [:] - } -} - -/// Convert an arbitrary binary integer to an Int, reinterpreting signed -/// -> unsigned if needed but trapping if the result is otherwise not -/// expressible. -func unsafeBinaryIntegerToInt(_ value: T) -> Int { - if T.isSigned { - return numericCast(value) - } - - let uintValue: UInt = numericCast(value) - return Int(bitPattern: uintValue) -} - -/// Convert from an Int to an arbitrary binary integer, reinterpreting signed -> -/// unsigned if needed but trapping if the result is otherwise not expressible. -func unsafeBinaryIntegerFromInt(_ value: Int) -> T { - if T.isSigned { - return numericCast(value) - } - - let uintValue = UInt(bitPattern: value) - return numericCast(uintValue) -} - -extension CustomNSError - where Self: RawRepresentable, Self.RawValue: FixedWidthInteger { - // The error code of Error with integral raw values is the raw value. - public var errorCode: Int { - return unsafeBinaryIntegerToInt(self.rawValue) - } -} - -public extension Error where Self : CustomNSError { - /// Default implementation for customized NSErrors. - var _domain: String { return Self.errorDomain } - - /// Default implementation for customized NSErrors. - var _code: Int { return self.errorCode } -} - -public extension Error where Self: CustomNSError, Self: RawRepresentable, - Self.RawValue: FixedWidthInteger { - /// Default implementation for customized NSErrors. - var _code: Int { return self.errorCode } -} - -public extension Error { - /// Retrieve the localized description for this error. - var localizedDescription: String { - return (self as NSError).localizedDescription - } -} - -internal let _errorDomainUserInfoProviderQueue = DispatchQueue( - label: "SwiftFoundation._errorDomainUserInfoProviderQueue") - -/// Retrieve the default userInfo dictionary for a given error. -public func _getErrorDefaultUserInfo(_ error: T) - -> AnyObject? { - let hasUserInfoValueProvider: Bool - - // If the OS supports user info value providers, use those - // to lazily populate the user-info dictionary for this domain. - if #available(macOS 10.11, iOS 9.0, tvOS 9.0, watchOS 2.0, *) { - // Note: the Cocoa error domain specifically excluded from - // user-info value providers. - let domain = error._domain - if domain != NSCocoaErrorDomain { - _errorDomainUserInfoProviderQueue.sync { - if NSError.userInfoValueProvider(forDomain: domain) != nil { return } - NSError.setUserInfoValueProvider(forDomain: domain) { (error, key) in - - switch key { - case NSLocalizedDescriptionKey: - return (error as? LocalizedError)?.errorDescription - - case NSLocalizedFailureReasonErrorKey: - return (error as? LocalizedError)?.failureReason - - case NSLocalizedRecoverySuggestionErrorKey: - return (error as? LocalizedError)?.recoverySuggestion - - case NSHelpAnchorErrorKey: - return (error as? LocalizedError)?.helpAnchor - - case NSLocalizedRecoveryOptionsErrorKey: - return (error as? RecoverableError)?.recoveryOptions - - case NSRecoveryAttempterErrorKey: - if error is RecoverableError { - return __NSErrorRecoveryAttempter() - } - return nil - - default: - return nil - } - } - } - assert(NSError.userInfoValueProvider(forDomain: domain) != nil) - - hasUserInfoValueProvider = true - } else { - hasUserInfoValueProvider = false - } - } else { - hasUserInfoValueProvider = false - } - - // Populate the user-info dictionary - var result: [String : Any] - - // Initialize with custom user-info. - if let customNSError = error as? CustomNSError { - result = customNSError.errorUserInfo - } else { - result = [:] - } - - // Handle localized errors. If we registered a user-info value - // provider, these will computed lazily. - if !hasUserInfoValueProvider, - let localizedError = error as? LocalizedError { - if let description = localizedError.errorDescription { - result[NSLocalizedDescriptionKey] = description - } - - if let reason = localizedError.failureReason { - result[NSLocalizedFailureReasonErrorKey] = reason - } - - if let suggestion = localizedError.recoverySuggestion { - result[NSLocalizedRecoverySuggestionErrorKey] = suggestion - } - - if let helpAnchor = localizedError.helpAnchor { - result[NSHelpAnchorErrorKey] = helpAnchor - } - } - - // Handle recoverable errors. If we registered a user-info value - // provider, these will computed lazily. - if !hasUserInfoValueProvider, - let recoverableError = error as? RecoverableError { - result[NSLocalizedRecoveryOptionsErrorKey] = - recoverableError.recoveryOptions - result[NSRecoveryAttempterErrorKey] = __NSErrorRecoveryAttempter() - } - - return result as AnyObject -} - -// NSError and CFError conform to the standard Error protocol. Compiler -// magic allows this to be done as a "toll-free" conversion when an NSError -// or CFError is used as an Error existential. - -extension NSError : Error { - @nonobjc - public var _domain: String { return domain } - - @nonobjc - public var _code: Int { return code } - - @nonobjc - public var _userInfo: AnyObject? { return userInfo as NSDictionary } - - /// The "embedded" NSError is itself. - @nonobjc - public func _getEmbeddedNSError() -> AnyObject? { - return self - } -} - -extension CFError : Error { - public var _domain: String { - return CFErrorGetDomain(self) as String - } - - public var _code: Int { - return CFErrorGetCode(self) - } - - public var _userInfo: AnyObject? { - return CFErrorCopyUserInfo(self) as AnyObject - } - - /// The "embedded" NSError is itself. - public func _getEmbeddedNSError() -> AnyObject? { - return self - } -} - -/// An internal protocol to represent Swift error enums that map to standard -/// Cocoa NSError domains. -public protocol _ObjectiveCBridgeableError : Error { - /// Produce a value of the error type corresponding to the given NSError, - /// or return nil if it cannot be bridged. - init?(_bridgedNSError: __shared NSError) -} - -/// A hook for the runtime to use _ObjectiveCBridgeableError in order to -/// attempt an "errorTypeValue as? SomeError" cast. -/// -/// If the bridge succeeds, the bridged value is written to the uninitialized -/// memory pointed to by 'out', and true is returned. Otherwise, 'out' is -/// left uninitialized, and false is returned. -public func _bridgeNSErrorToError< - T : _ObjectiveCBridgeableError ->(_ error: NSError, out: UnsafeMutablePointer) -> Bool { - if let bridged = T(_bridgedNSError: error) { - out.initialize(to: bridged) - return true - } else { - return false - } -} - -/// Describes a raw representable type that is bridged to a particular -/// NSError domain. -/// -/// This protocol is used primarily to generate the conformance to -/// _ObjectiveCBridgeableError for such an enum defined in Swift. -public protocol _BridgedNSError : - _ObjectiveCBridgeableError, RawRepresentable, Hashable - where Self.RawValue: FixedWidthInteger { - /// The NSError domain to which this type is bridged. - static var _nsErrorDomain: String { get } -} - -extension _BridgedNSError { - public var _domain: String { return Self._nsErrorDomain } -} - -extension _BridgedNSError where Self.RawValue: FixedWidthInteger { - public var _code: Int { return Int(rawValue) } - - public init?(_bridgedNSError: __shared NSError) { - if _bridgedNSError.domain != Self._nsErrorDomain { - return nil - } - - self.init(rawValue: RawValue(_bridgedNSError.code)) - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(_code) - } -} - -/// Describes a bridged error that stores the underlying NSError, so -/// it can be queried. -public protocol _BridgedStoredNSError : - _ObjectiveCBridgeableError, CustomNSError, Hashable { - /// The type of an error code. - associatedtype Code: _ErrorCodeProtocol, RawRepresentable - where Code.RawValue: FixedWidthInteger - - //// Retrieves the embedded NSError. - var _nsError: NSError { get } - - /// Create a new instance of the error type with the given embedded - /// NSError. - /// - /// The \c error must have the appropriate domain for this error - /// type. - init(_nsError error: NSError) -} - -/// Various helper implementations for _BridgedStoredNSError -extension _BridgedStoredNSError { - public var code: Code { - return Code(rawValue: unsafeBinaryIntegerFromInt(_nsError.code))! - } - - /// Initialize an error within this domain with the given ``code`` - /// and ``userInfo``. - public init(_ code: Code, userInfo: [String : Any] = [:]) { - self.init(_nsError: NSError(domain: Self.errorDomain, - code: unsafeBinaryIntegerToInt(code.rawValue), - userInfo: userInfo)) - } - - /// The user-info dictionary for an error that was bridged from - /// NSError. - public var userInfo: [String : Any] { return errorUserInfo } -} - -/// Implementation of _ObjectiveCBridgeableError for all _BridgedStoredNSErrors. -extension _BridgedStoredNSError { - /// Default implementation of ``init(_bridgedNSError:)`` to provide - /// bridging from NSError. - public init?(_bridgedNSError error: NSError) { - if error.domain != Self.errorDomain { - return nil - } - - self.init(_nsError: error) - } -} - -/// Implementation of CustomNSError for all _BridgedStoredNSErrors. -public extension _BridgedStoredNSError { - // FIXME: Would prefer to have a clear "extract an NSError - // directly" operation. - - // Synthesized by the compiler. - // static var errorDomain: String - - var errorCode: Int { return _nsError.code } - - var errorUserInfo: [String : Any] { - var result: [String : Any] = [:] - for (key, value) in _nsError.userInfo { - result[key] = value - } - return result - } -} - -/// Implementation of Hashable for all _BridgedStoredNSErrors. -extension _BridgedStoredNSError { - public func hash(into hasher: inout Hasher) { - hasher.combine(_nsError) - } - - @_alwaysEmitIntoClient public var hashValue: Int { - return _nsError.hashValue - } -} - -/// Describes the code of an error. -public protocol _ErrorCodeProtocol : Equatable { - /// The corresponding error code. - associatedtype _ErrorType: _BridgedStoredNSError where _ErrorType.Code == Self -} - -extension _ErrorCodeProtocol { - /// Allow one to match an error code against an arbitrary error. - public static func ~=(match: Self, error: Error) -> Bool { - guard let specificError = error as? Self._ErrorType else { return false } - - return match == specificError.code - } -} - -extension _BridgedStoredNSError { - /// Retrieve the embedded NSError from a bridged, stored NSError. - public func _getEmbeddedNSError() -> AnyObject? { - return _nsError - } - - public static func == (lhs: Self, rhs: Self) -> Bool { - return lhs._nsError.isEqual(rhs._nsError) - } -} - -extension _SwiftNewtypeWrapper where Self.RawValue == Error { - @inlinable // FIXME(sil-serialize-all) - public func _bridgeToObjectiveC() -> NSError { - return rawValue as NSError - } - - @inlinable // FIXME(sil-serialize-all) - public static func _forceBridgeFromObjectiveC( - _ source: NSError, - result: inout Self? - ) { - result = Self(rawValue: source) - } - - @inlinable // FIXME(sil-serialize-all) - public static func _conditionallyBridgeFromObjectiveC( - _ source: NSError, - result: inout Self? - ) -> Bool { - result = Self(rawValue: source) - return result != nil - } - - @inlinable // FIXME(sil-serialize-all) - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC( - _ source: NSError? - ) -> Self { - return Self(rawValue: _convertNSErrorToError(source))! - } -} - - -@available(*, unavailable, renamed: "CocoaError") -public typealias NSCocoaError = CocoaError - -/// Describes errors within the Cocoa error domain. -public struct CocoaError : _BridgedStoredNSError { - public let _nsError: NSError - - public init(_nsError error: NSError) { - precondition(error.domain == NSCocoaErrorDomain) - self._nsError = error - } - - public static var errorDomain: String { return NSCocoaErrorDomain } - - public var hashValue: Int { - return _nsError.hashValue - } - - /// The error code itself. - public struct Code : RawRepresentable, Hashable, _ErrorCodeProtocol { - public typealias _ErrorType = CocoaError - - public let rawValue: Int - - public init(rawValue: Int) { - self.rawValue = rawValue - } - } -} - -public extension CocoaError { - private var _nsUserInfo: [AnyHashable : Any] { - return (self as NSError).userInfo - } - - /// The file path associated with the error, if any. - var filePath: String? { - return _nsUserInfo[NSFilePathErrorKey as NSString] as? String - } - - /// The string encoding associated with this error, if any. - var stringEncoding: String.Encoding? { - return (_nsUserInfo[NSStringEncodingErrorKey as NSString] as? NSNumber) - .map { String.Encoding(rawValue: $0.uintValue) } - } - - /// The underlying error behind this error, if any. - var underlying: Error? { - return _nsUserInfo[NSUnderlyingErrorKey as NSString] as? Error - } - - /// The URL associated with this error, if any. - var url: URL? { - return _nsUserInfo[NSURLErrorKey as NSString] as? URL - } -} - -extension CocoaError { - public static func error(_ code: CocoaError.Code, userInfo: [AnyHashable : Any]? = nil, url: URL? = nil) -> Error { - var info: [String : Any] = userInfo as? [String : Any] ?? [:] - if let url = url { - info[NSURLErrorKey] = url - } - return NSError(domain: NSCocoaErrorDomain, code: code.rawValue, userInfo: info) - } -} - -extension CocoaError.Code { - public static var fileNoSuchFile: CocoaError.Code { - return CocoaError.Code(rawValue: 4) - } - public static var fileLocking: CocoaError.Code { - return CocoaError.Code(rawValue: 255) - } - public static var fileReadUnknown: CocoaError.Code { - return CocoaError.Code(rawValue: 256) - } - public static var fileReadNoPermission: CocoaError.Code { - return CocoaError.Code(rawValue: 257) - } - public static var fileReadInvalidFileName: CocoaError.Code { - return CocoaError.Code(rawValue: 258) - } - public static var fileReadCorruptFile: CocoaError.Code { - return CocoaError.Code(rawValue: 259) - } - public static var fileReadNoSuchFile: CocoaError.Code { - return CocoaError.Code(rawValue: 260) - } - public static var fileReadInapplicableStringEncoding: CocoaError.Code { - return CocoaError.Code(rawValue: 261) - } - public static var fileReadUnsupportedScheme: CocoaError.Code { - return CocoaError.Code(rawValue: 262) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var fileReadTooLarge: CocoaError.Code { - return CocoaError.Code(rawValue: 263) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var fileReadUnknownStringEncoding: CocoaError.Code { - return CocoaError.Code(rawValue: 264) - } - - public static var fileWriteUnknown: CocoaError.Code { - return CocoaError.Code(rawValue: 512) - } - public static var fileWriteNoPermission: CocoaError.Code { - return CocoaError.Code(rawValue: 513) - } - public static var fileWriteInvalidFileName: CocoaError.Code { - return CocoaError.Code(rawValue: 514) - } - - @available(macOS, introduced: 10.7) @available(iOS, introduced: 5.0) - public static var fileWriteFileExists: CocoaError.Code { - return CocoaError.Code(rawValue: 516) - } - - public static var fileWriteInapplicableStringEncoding: CocoaError.Code { - return CocoaError.Code(rawValue: 517) - } - public static var fileWriteUnsupportedScheme: CocoaError.Code { - return CocoaError.Code(rawValue: 518) - } - public static var fileWriteOutOfSpace: CocoaError.Code { - return CocoaError.Code(rawValue: 640) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - public static var fileWriteVolumeReadOnly: CocoaError.Code { - return CocoaError.Code(rawValue: 642) - } - - @available(macOS, introduced: 10.11) @available(iOS, unavailable) - public static var fileManagerUnmountUnknown: CocoaError.Code { - return CocoaError.Code(rawValue: 768) - } - - @available(macOS, introduced: 10.11) @available(iOS, unavailable) - public static var fileManagerUnmountBusy: CocoaError.Code { - return CocoaError.Code(rawValue: 769) - } - - public static var keyValueValidation: CocoaError.Code { - return CocoaError.Code(rawValue: 1024) - } - public static var formatting: CocoaError.Code { - return CocoaError.Code(rawValue: 2048) - } - public static var userCancelled: CocoaError.Code { - return CocoaError.Code(rawValue: 3072) - } - - @available(macOS, introduced: 10.8) @available(iOS, introduced: 6.0) - public static var featureUnsupported: CocoaError.Code { - return CocoaError.Code(rawValue: 3328) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var executableNotLoadable: CocoaError.Code { - return CocoaError.Code(rawValue: 3584) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var executableArchitectureMismatch: CocoaError.Code { - return CocoaError.Code(rawValue: 3585) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var executableRuntimeMismatch: CocoaError.Code { - return CocoaError.Code(rawValue: 3586) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var executableLoad: CocoaError.Code { - return CocoaError.Code(rawValue: 3587) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var executableLink: CocoaError.Code { - return CocoaError.Code(rawValue: 3588) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - public static var propertyListReadCorrupt: CocoaError.Code { - return CocoaError.Code(rawValue: 3840) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - public static var propertyListReadUnknownVersion: CocoaError.Code { - return CocoaError.Code(rawValue: 3841) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - public static var propertyListReadStream: CocoaError.Code { - return CocoaError.Code(rawValue: 3842) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - public static var propertyListWriteStream: CocoaError.Code { - return CocoaError.Code(rawValue: 3851) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var propertyListWriteInvalid: CocoaError.Code { - return CocoaError.Code(rawValue: 3852) - } - - @available(macOS, introduced: 10.8) @available(iOS, introduced: 6.0) - public static var xpcConnectionInterrupted: CocoaError.Code { - return CocoaError.Code(rawValue: 4097) - } - - @available(macOS, introduced: 10.8) @available(iOS, introduced: 6.0) - public static var xpcConnectionInvalid: CocoaError.Code { - return CocoaError.Code(rawValue: 4099) - } - - @available(macOS, introduced: 10.8) @available(iOS, introduced: 6.0) - public static var xpcConnectionReplyInvalid: CocoaError.Code { - return CocoaError.Code(rawValue: 4101) - } - - @available(macOS, introduced: 10.9) @available(iOS, introduced: 7.0) - public static var ubiquitousFileUnavailable: CocoaError.Code { - return CocoaError.Code(rawValue: 4353) - } - - @available(macOS, introduced: 10.9) @available(iOS, introduced: 7.0) - public static var ubiquitousFileNotUploadedDueToQuota: CocoaError.Code { - return CocoaError.Code(rawValue: 4354) - } - - @available(macOS, introduced: 10.9) @available(iOS, introduced: 7.0) - public static var ubiquitousFileUbiquityServerNotAvailable: CocoaError.Code { - return CocoaError.Code(rawValue: 4355) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var userActivityHandoffFailed: CocoaError.Code { - return CocoaError.Code(rawValue: 4608) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var userActivityConnectionUnavailable: CocoaError.Code { - return CocoaError.Code(rawValue: 4609) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var userActivityRemoteApplicationTimedOut: CocoaError.Code { - return CocoaError.Code(rawValue: 4610) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var userActivityHandoffUserInfoTooLarge: CocoaError.Code { - return CocoaError.Code(rawValue: 4611) - } - - @available(macOS, introduced: 10.11) @available(iOS, introduced: 9.0) - public static var coderReadCorrupt: CocoaError.Code { - return CocoaError.Code(rawValue: 4864) - } - - @available(macOS, introduced: 10.11) @available(iOS, introduced: 9.0) - public static var coderValueNotFound: CocoaError.Code { - return CocoaError.Code(rawValue: 4865) - } - - public static var coderInvalidValue: CocoaError.Code { - return CocoaError.Code(rawValue: 4866) - } -} - -extension CocoaError.Code { - @available(*, deprecated, renamed: "fileNoSuchFile") - public static var fileNoSuchFileError: CocoaError.Code { - return CocoaError.Code(rawValue: 4) - } - @available(*, deprecated, renamed: "fileLocking") - public static var fileLockingError: CocoaError.Code { - return CocoaError.Code(rawValue: 255) - } - @available(*, deprecated, renamed: "fileReadUnknown") - public static var fileReadUnknownError: CocoaError.Code { - return CocoaError.Code(rawValue: 256) - } - @available(*, deprecated, renamed: "fileReadNoPermission") - public static var fileReadNoPermissionError: CocoaError.Code { - return CocoaError.Code(rawValue: 257) - } - @available(*, deprecated, renamed: "fileReadInvalidFileName") - public static var fileReadInvalidFileNameError: CocoaError.Code { - return CocoaError.Code(rawValue: 258) - } - @available(*, deprecated, renamed: "fileReadCorruptFile") - public static var fileReadCorruptFileError: CocoaError.Code { - return CocoaError.Code(rawValue: 259) - } - @available(*, deprecated, renamed: "fileReadNoSuchFile") - public static var fileReadNoSuchFileError: CocoaError.Code { - return CocoaError.Code(rawValue: 260) - } - @available(*, deprecated, renamed: "fileReadInapplicableStringEncoding") - public static var fileReadInapplicableStringEncodingError: CocoaError.Code { - return CocoaError.Code(rawValue: 261) - } - @available(*, deprecated, renamed: "fileReadUnsupportedScheme") - public static var fileReadUnsupportedSchemeError: CocoaError.Code { - return CocoaError.Code(rawValue: 262) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - @available(*, deprecated, renamed: "fileReadTooLarge") - public static var fileReadTooLargeError: CocoaError.Code { - return CocoaError.Code(rawValue: 263) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - @available(*, deprecated, renamed: "fileReadUnknownStringEncoding") - public static var fileReadUnknownStringEncodingError: CocoaError.Code { - return CocoaError.Code(rawValue: 264) - } - - @available(*, deprecated, renamed: "fileWriteUnknown") - public static var fileWriteUnknownError: CocoaError.Code { - return CocoaError.Code(rawValue: 512) - } - - @available(*, deprecated, renamed: "fileWriteNoPermission") - public static var fileWriteNoPermissionError: CocoaError.Code { - return CocoaError.Code(rawValue: 513) - } - - @available(*, deprecated, renamed: "fileWriteInvalidFileName") - public static var fileWriteInvalidFileNameError: CocoaError.Code { - return CocoaError.Code(rawValue: 514) - } - - @available(macOS, introduced: 10.7) @available(iOS, introduced: 5.0) - @available(*, deprecated, renamed: "fileWriteFileExists") - public static var fileWriteFileExistsError: CocoaError.Code { - return CocoaError.Code(rawValue: 516) - } - - @available(*, deprecated, renamed: "fileWriteInapplicableStringEncoding") - public static var fileWriteInapplicableStringEncodingError: CocoaError.Code { - return CocoaError.Code(rawValue: 517) - } - - @available(*, deprecated, renamed: "fileWriteUnsupportedScheme") - public static var fileWriteUnsupportedSchemeError: CocoaError.Code { - return CocoaError.Code(rawValue: 518) - } - - @available(*, deprecated, renamed: "fileWriteOutOfSpace") - public static var fileWriteOutOfSpaceError: CocoaError.Code { - return CocoaError.Code(rawValue: 640) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - @available(*, deprecated, renamed: "fileWriteVolumeReadOnly") - public static var fileWriteVolumeReadOnlyError: CocoaError.Code { - return CocoaError.Code(rawValue: 642) - } - - @available(macOS, introduced: 10.11) @available(iOS, unavailable) - @available(*, deprecated, renamed: "fileManagerUnmountUnknown") - public static var fileManagerUnmountUnknownError: CocoaError.Code { - return CocoaError.Code(rawValue: 768) - } - - @available(macOS, introduced: 10.11) @available(iOS, unavailable) - @available(*, deprecated, renamed: "fileManagerUnmountBusy") - public static var fileManagerUnmountBusyError: CocoaError.Code { - return CocoaError.Code(rawValue: 769) - } - - @available(*, deprecated, renamed: "keyValueValidation") - public static var keyValueValidationError: CocoaError.Code { - return CocoaError.Code(rawValue: 1024) - } - - @available(*, deprecated, renamed: "formatting") - public static var formattingError: CocoaError.Code { - return CocoaError.Code(rawValue: 2048) - } - - @available(*, deprecated, renamed: "userCancelled") - public static var userCancelledError: CocoaError.Code { - return CocoaError.Code(rawValue: 3072) - } - - @available(macOS, introduced: 10.8) @available(iOS, introduced: 6.0) - @available(*, deprecated, renamed: "featureUnsupported") - public static var featureUnsupportedError: CocoaError.Code { - return CocoaError.Code(rawValue: 3328) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - @available(*, deprecated, renamed: "executableNotLoadable") - public static var executableNotLoadableError: CocoaError.Code { - return CocoaError.Code(rawValue: 3584) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - @available(*, deprecated, renamed: "executableArchitectureMismatch") - public static var executableArchitectureMismatchError: CocoaError.Code { - return CocoaError.Code(rawValue: 3585) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - @available(*, deprecated, renamed: "executableRuntimeMismatch") - public static var executableRuntimeMismatchError: CocoaError.Code { - return CocoaError.Code(rawValue: 3586) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - @available(*, deprecated, renamed: "executableLoad") - public static var executableLoadError: CocoaError.Code { - return CocoaError.Code(rawValue: 3587) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - @available(*, deprecated, renamed: "executableLink") - public static var executableLinkError: CocoaError.Code { - return CocoaError.Code(rawValue: 3588) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - @available(*, deprecated, renamed: "propertyListReadCorrupt") - public static var propertyListReadCorruptError: CocoaError.Code { - return CocoaError.Code(rawValue: 3840) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - @available(*, deprecated, renamed: "propertyListReadUnknownVersion") - public static var propertyListReadUnknownVersionError: CocoaError.Code { - return CocoaError.Code(rawValue: 3841) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - @available(*, deprecated, renamed: "propertyListReadStream") - public static var propertyListReadStreamError: CocoaError.Code { - return CocoaError.Code(rawValue: 3842) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - @available(*, deprecated, renamed: "propertyListWriteStream") - public static var propertyListWriteStreamError: CocoaError.Code { - return CocoaError.Code(rawValue: 3851) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - @available(*, deprecated, renamed: "propertyListWriteInvalid") - public static var propertyListWriteInvalidError: CocoaError.Code { - return CocoaError.Code(rawValue: 3852) - } - - @available(macOS, introduced: 10.9) @available(iOS, introduced: 7.0) - @available(*, deprecated, renamed: "ubiquitousFileUnavailable") - public static var ubiquitousFileUnavailableError: CocoaError.Code { - return CocoaError.Code(rawValue: 4353) - } - - @available(macOS, introduced: 10.9) @available(iOS, introduced: 7.0) - @available(*, deprecated, renamed: "ubiquitousFileNotUploadedDueToQuota") - public static var ubiquitousFileNotUploadedDueToQuotaError: CocoaError.Code { - return CocoaError.Code(rawValue: 4354) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - @available(*, deprecated, renamed: "userActivityHandoffFailed") - public static var userActivityHandoffFailedError: CocoaError.Code { - return CocoaError.Code(rawValue: 4608) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - @available(*, deprecated, renamed: "userActivityConnectionUnavailable") - public static var userActivityConnectionUnavailableError: CocoaError.Code { - return CocoaError.Code(rawValue: 4609) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - @available(*, deprecated, renamed: "userActivityRemoteApplicationTimedOut") - public static var userActivityRemoteApplicationTimedOutError: CocoaError.Code { - return CocoaError.Code(rawValue: 4610) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - @available(*, deprecated, renamed: "userActivityHandoffUserInfoTooLarge") - public static var userActivityHandoffUserInfoTooLargeError: CocoaError.Code { - return CocoaError.Code(rawValue: 4611) - } - - @available(macOS, introduced: 10.11) @available(iOS, introduced: 9.0) - @available(*, deprecated, renamed: "coderReadCorrupt") - public static var coderReadCorruptError: CocoaError.Code { - return CocoaError.Code(rawValue: 4864) - } - - @available(macOS, introduced: 10.11) @available(iOS, introduced: 9.0) - @available(*, deprecated, renamed: "coderValueNotFound") - public static var coderValueNotFoundError: CocoaError.Code { - return CocoaError.Code(rawValue: 4865) - } -} - -extension CocoaError { - public static var fileNoSuchFile: CocoaError.Code { - return CocoaError.Code(rawValue: 4) - } - public static var fileLocking: CocoaError.Code { - return CocoaError.Code(rawValue: 255) - } - public static var fileReadUnknown: CocoaError.Code { - return CocoaError.Code(rawValue: 256) - } - public static var fileReadNoPermission: CocoaError.Code { - return CocoaError.Code(rawValue: 257) - } - public static var fileReadInvalidFileName: CocoaError.Code { - return CocoaError.Code(rawValue: 258) - } - public static var fileReadCorruptFile: CocoaError.Code { - return CocoaError.Code(rawValue: 259) - } - public static var fileReadNoSuchFile: CocoaError.Code { - return CocoaError.Code(rawValue: 260) - } - public static var fileReadInapplicableStringEncoding: CocoaError.Code { - return CocoaError.Code(rawValue: 261) - } - public static var fileReadUnsupportedScheme: CocoaError.Code { - return CocoaError.Code(rawValue: 262) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var fileReadTooLarge: CocoaError.Code { - return CocoaError.Code(rawValue: 263) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var fileReadUnknownStringEncoding: CocoaError.Code { - return CocoaError.Code(rawValue: 264) - } - - public static var fileWriteUnknown: CocoaError.Code { - return CocoaError.Code(rawValue: 512) - } - public static var fileWriteNoPermission: CocoaError.Code { - return CocoaError.Code(rawValue: 513) - } - public static var fileWriteInvalidFileName: CocoaError.Code { - return CocoaError.Code(rawValue: 514) - } - - @available(macOS, introduced: 10.7) @available(iOS, introduced: 5.0) - public static var fileWriteFileExists: CocoaError.Code { - return CocoaError.Code(rawValue: 516) - } - - public static var fileWriteInapplicableStringEncoding: CocoaError.Code { - return CocoaError.Code(rawValue: 517) - } - public static var fileWriteUnsupportedScheme: CocoaError.Code { - return CocoaError.Code(rawValue: 518) - } - public static var fileWriteOutOfSpace: CocoaError.Code { - return CocoaError.Code(rawValue: 640) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - public static var fileWriteVolumeReadOnly: CocoaError.Code { - return CocoaError.Code(rawValue: 642) - } - - @available(macOS, introduced: 10.11) @available(iOS, unavailable) - public static var fileManagerUnmountUnknown: CocoaError.Code { - return CocoaError.Code(rawValue: 768) - } - - @available(macOS, introduced: 10.11) @available(iOS, unavailable) - public static var fileManagerUnmountBusy: CocoaError.Code { - return CocoaError.Code(rawValue: 769) - } - - public static var keyValueValidation: CocoaError.Code { - return CocoaError.Code(rawValue: 1024) - } - public static var formatting: CocoaError.Code { - return CocoaError.Code(rawValue: 2048) - } - public static var userCancelled: CocoaError.Code { - return CocoaError.Code(rawValue: 3072) - } - - @available(macOS, introduced: 10.8) @available(iOS, introduced: 6.0) - public static var featureUnsupported: CocoaError.Code { - return CocoaError.Code(rawValue: 3328) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var executableNotLoadable: CocoaError.Code { - return CocoaError.Code(rawValue: 3584) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var executableArchitectureMismatch: CocoaError.Code { - return CocoaError.Code(rawValue: 3585) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var executableRuntimeMismatch: CocoaError.Code { - return CocoaError.Code(rawValue: 3586) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var executableLoad: CocoaError.Code { - return CocoaError.Code(rawValue: 3587) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var executableLink: CocoaError.Code { - return CocoaError.Code(rawValue: 3588) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - public static var propertyListReadCorrupt: CocoaError.Code { - return CocoaError.Code(rawValue: 3840) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - public static var propertyListReadUnknownVersion: CocoaError.Code { - return CocoaError.Code(rawValue: 3841) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - public static var propertyListReadStream: CocoaError.Code { - return CocoaError.Code(rawValue: 3842) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - public static var propertyListWriteStream: CocoaError.Code { - return CocoaError.Code(rawValue: 3851) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var propertyListWriteInvalid: CocoaError.Code { - return CocoaError.Code(rawValue: 3852) - } - - @available(macOS, introduced: 10.8) @available(iOS, introduced: 6.0) - public static var xpcConnectionInterrupted: CocoaError.Code { - return CocoaError.Code(rawValue: 4097) - } - - @available(macOS, introduced: 10.8) @available(iOS, introduced: 6.0) - public static var xpcConnectionInvalid: CocoaError.Code { - return CocoaError.Code(rawValue: 4099) - } - - @available(macOS, introduced: 10.8) @available(iOS, introduced: 6.0) - public static var xpcConnectionReplyInvalid: CocoaError.Code { - return CocoaError.Code(rawValue: 4101) - } - - @available(macOS, introduced: 10.9) @available(iOS, introduced: 7.0) - public static var ubiquitousFileUnavailable: CocoaError.Code { - return CocoaError.Code(rawValue: 4353) - } - - @available(macOS, introduced: 10.9) @available(iOS, introduced: 7.0) - public static var ubiquitousFileNotUploadedDueToQuota: CocoaError.Code { - return CocoaError.Code(rawValue: 4354) - } - - @available(macOS, introduced: 10.9) @available(iOS, introduced: 7.0) - public static var ubiquitousFileUbiquityServerNotAvailable: CocoaError.Code { - return CocoaError.Code(rawValue: 4355) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var userActivityHandoffFailed: CocoaError.Code { - return CocoaError.Code(rawValue: 4608) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var userActivityConnectionUnavailable: CocoaError.Code { - return CocoaError.Code(rawValue: 4609) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var userActivityRemoteApplicationTimedOut: CocoaError.Code { - return CocoaError.Code(rawValue: 4610) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var userActivityHandoffUserInfoTooLarge: CocoaError.Code { - return CocoaError.Code(rawValue: 4611) - } - - @available(macOS, introduced: 10.11) @available(iOS, introduced: 9.0) - public static var coderReadCorrupt: CocoaError.Code { - return CocoaError.Code(rawValue: 4864) - } - - @available(macOS, introduced: 10.11) @available(iOS, introduced: 9.0) - public static var coderValueNotFound: CocoaError.Code { - return CocoaError.Code(rawValue: 4865) - } - - public static var coderInvalidValue: CocoaError.Code { - return CocoaError.Code(rawValue: 4866) - } -} - -extension CocoaError { - @available(*, deprecated, renamed: "fileNoSuchFile") - public static var fileNoSuchFileError: CocoaError.Code { - return CocoaError.Code(rawValue: 4) - } - @available(*, deprecated, renamed: "fileLocking") - public static var fileLockingError: CocoaError.Code { - return CocoaError.Code(rawValue: 255) - } - @available(*, deprecated, renamed: "fileReadUnknown") - public static var fileReadUnknownError: CocoaError.Code { - return CocoaError.Code(rawValue: 256) - } - @available(*, deprecated, renamed: "fileReadNoPermission") - public static var fileReadNoPermissionError: CocoaError.Code { - return CocoaError.Code(rawValue: 257) - } - @available(*, deprecated, renamed: "fileReadInvalidFileName") - public static var fileReadInvalidFileNameError: CocoaError.Code { - return CocoaError.Code(rawValue: 258) - } - @available(*, deprecated, renamed: "fileReadCorruptFile") - public static var fileReadCorruptFileError: CocoaError.Code { - return CocoaError.Code(rawValue: 259) - } - @available(*, deprecated, renamed: "fileReadNoSuchFile") - public static var fileReadNoSuchFileError: CocoaError.Code { - return CocoaError.Code(rawValue: 260) - } - @available(*, deprecated, renamed: "fileReadInapplicableStringEncoding") - public static var fileReadInapplicableStringEncodingError: CocoaError.Code { - return CocoaError.Code(rawValue: 261) - } - @available(*, deprecated, renamed: "fileReadUnsupportedScheme") - public static var fileReadUnsupportedSchemeError: CocoaError.Code { - return CocoaError.Code(rawValue: 262) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - @available(*, deprecated, renamed: "fileReadTooLarge") - public static var fileReadTooLargeError: CocoaError.Code { - return CocoaError.Code(rawValue: 263) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - @available(*, deprecated, renamed: "fileReadUnknownStringEncoding") - public static var fileReadUnknownStringEncodingError: CocoaError.Code { - return CocoaError.Code(rawValue: 264) - } - - @available(*, deprecated, renamed: "fileWriteUnknown") - public static var fileWriteUnknownError: CocoaError.Code { - return CocoaError.Code(rawValue: 512) - } - - @available(*, deprecated, renamed: "fileWriteNoPermission") - public static var fileWriteNoPermissionError: CocoaError.Code { - return CocoaError.Code(rawValue: 513) - } - - @available(*, deprecated, renamed: "fileWriteInvalidFileName") - public static var fileWriteInvalidFileNameError: CocoaError.Code { - return CocoaError.Code(rawValue: 514) - } - - @available(macOS, introduced: 10.7) @available(iOS, introduced: 5.0) - @available(*, deprecated, renamed: "fileWriteFileExists") - public static var fileWriteFileExistsError: CocoaError.Code { - return CocoaError.Code(rawValue: 516) - } - - @available(*, deprecated, renamed: "fileWriteInapplicableStringEncoding") - public static var fileWriteInapplicableStringEncodingError: CocoaError.Code { - return CocoaError.Code(rawValue: 517) - } - - @available(*, deprecated, renamed: "fileWriteUnsupportedScheme") - public static var fileWriteUnsupportedSchemeError: CocoaError.Code { - return CocoaError.Code(rawValue: 518) - } - - @available(*, deprecated, renamed: "fileWriteOutOfSpace") - public static var fileWriteOutOfSpaceError: CocoaError.Code { - return CocoaError.Code(rawValue: 640) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - @available(*, deprecated, renamed: "fileWriteVolumeReadOnly") - public static var fileWriteVolumeReadOnlyError: CocoaError.Code { - return CocoaError.Code(rawValue: 642) - } - - @available(macOS, introduced: 10.11) @available(iOS, unavailable) - @available(*, deprecated, renamed: "fileManagerUnmountUnknown") - public static var fileManagerUnmountUnknownError: CocoaError.Code { - return CocoaError.Code(rawValue: 768) - } - - @available(macOS, introduced: 10.11) @available(iOS, unavailable) - @available(*, deprecated, renamed: "fileManagerUnmountBusy") - public static var fileManagerUnmountBusyError: CocoaError.Code { - return CocoaError.Code(rawValue: 769) - } - - @available(*, deprecated, renamed: "keyValueValidation") - public static var keyValueValidationError: CocoaError.Code { - return CocoaError.Code(rawValue: 1024) - } - - @available(*, deprecated, renamed: "formatting") - public static var formattingError: CocoaError.Code { - return CocoaError.Code(rawValue: 2048) - } - - @available(*, deprecated, renamed: "userCancelled") - public static var userCancelledError: CocoaError.Code { - return CocoaError.Code(rawValue: 3072) - } - - @available(macOS, introduced: 10.8) @available(iOS, introduced: 6.0) - @available(*, deprecated, renamed: "featureUnsupported") - public static var featureUnsupportedError: CocoaError.Code { - return CocoaError.Code(rawValue: 3328) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - @available(*, deprecated, renamed: "executableNotLoadable") - public static var executableNotLoadableError: CocoaError.Code { - return CocoaError.Code(rawValue: 3584) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - @available(*, deprecated, renamed: "executableArchitectureMismatch") - public static var executableArchitectureMismatchError: CocoaError.Code { - return CocoaError.Code(rawValue: 3585) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - @available(*, deprecated, renamed: "executableRuntimeMismatch") - public static var executableRuntimeMismatchError: CocoaError.Code { - return CocoaError.Code(rawValue: 3586) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - @available(*, deprecated, renamed: "executableLoad") - public static var executableLoadError: CocoaError.Code { - return CocoaError.Code(rawValue: 3587) - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - @available(*, deprecated, renamed: "executableLink") - public static var executableLinkError: CocoaError.Code { - return CocoaError.Code(rawValue: 3588) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - @available(*, deprecated, renamed: "propertyListReadCorrupt") - public static var propertyListReadCorruptError: CocoaError.Code { - return CocoaError.Code(rawValue: 3840) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - @available(*, deprecated, renamed: "propertyListReadUnknownVersion") - public static var propertyListReadUnknownVersionError: CocoaError.Code { - return CocoaError.Code(rawValue: 3841) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - @available(*, deprecated, renamed: "propertyListReadStream") - public static var propertyListReadStreamError: CocoaError.Code { - return CocoaError.Code(rawValue: 3842) - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - @available(*, deprecated, renamed: "propertyListWriteStream") - public static var propertyListWriteStreamError: CocoaError.Code { - return CocoaError.Code(rawValue: 3851) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - @available(*, deprecated, renamed: "propertyListWriteInvalid") - public static var propertyListWriteInvalidError: CocoaError.Code { - return CocoaError.Code(rawValue: 3852) - } - - @available(macOS, introduced: 10.9) @available(iOS, introduced: 7.0) - @available(*, deprecated, renamed: "ubiquitousFileUnavailable") - public static var ubiquitousFileUnavailableError: CocoaError.Code { - return CocoaError.Code(rawValue: 4353) - } - - @available(macOS, introduced: 10.9) @available(iOS, introduced: 7.0) - @available(*, deprecated, renamed: "ubiquitousFileNotUploadedDueToQuota") - public static var ubiquitousFileNotUploadedDueToQuotaError: CocoaError.Code { - return CocoaError.Code(rawValue: 4354) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - @available(*, deprecated, renamed: "userActivityHandoffFailed") - public static var userActivityHandoffFailedError: CocoaError.Code { - return CocoaError.Code(rawValue: 4608) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - @available(*, deprecated, renamed: "userActivityConnectionUnavailable") - public static var userActivityConnectionUnavailableError: CocoaError.Code { - return CocoaError.Code(rawValue: 4609) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - @available(*, deprecated, renamed: "userActivityRemoteApplicationTimedOut") - public static var userActivityRemoteApplicationTimedOutError: CocoaError.Code { - return CocoaError.Code(rawValue: 4610) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - @available(*, deprecated, renamed: "userActivityHandoffUserInfoTooLarge") - public static var userActivityHandoffUserInfoTooLargeError: CocoaError.Code { - return CocoaError.Code(rawValue: 4611) - } - - @available(macOS, introduced: 10.11) @available(iOS, introduced: 9.0) - @available(*, deprecated, renamed: "coderReadCorrupt") - public static var coderReadCorruptError: CocoaError.Code { - return CocoaError.Code(rawValue: 4864) - } - - @available(macOS, introduced: 10.11) @available(iOS, introduced: 9.0) - @available(*, deprecated, renamed: "coderValueNotFound") - public static var coderValueNotFoundError: CocoaError.Code { - return CocoaError.Code(rawValue: 4865) - } -} - -extension CocoaError { - @available(macOS, introduced: 10.11) @available(iOS, introduced: 9.0) - public var isCoderError: Bool { - return code.rawValue >= 4864 && code.rawValue <= 4991 - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public var isExecutableError: Bool { - return code.rawValue >= 3584 && code.rawValue <= 3839 - } - - public var isFileError: Bool { - return code.rawValue >= 0 && code.rawValue <= 1023 - } - - public var isFormattingError: Bool { - return code.rawValue >= 2048 && code.rawValue <= 2559 - } - - @available(macOS, introduced: 10.6) @available(iOS, introduced: 4.0) - public var isPropertyListError: Bool { - return code.rawValue >= 3840 && code.rawValue <= 4095 - } - - @available(macOS, introduced: 10.9) @available(iOS, introduced: 7.0) - public var isUbiquitousFileError: Bool { - return code.rawValue >= 4352 && code.rawValue <= 4607 - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public var isUserActivityError: Bool { - return code.rawValue >= 4608 && code.rawValue <= 4863 - } - - public var isValidationError: Bool { - return code.rawValue >= 1024 && code.rawValue <= 2047 - } - - @available(macOS, introduced: 10.8) @available(iOS, introduced: 6.0) - public var isXPCConnectionError: Bool { - return code.rawValue >= 4096 && code.rawValue <= 4224 - } -} - -extension CocoaError.Code { - @available(*, unavailable, renamed: "fileNoSuchFile") - public static var FileNoSuchFileError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileLocking") - public static var FileLockingError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileReadUnknown") - public static var FileReadUnknownError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileReadNoPermission") - public static var FileReadNoPermissionError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileReadInvalidFileName") - public static var FileReadInvalidFileNameError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileReadCorruptFile") - public static var FileReadCorruptFileError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileReadNoSuchFile") - public static var FileReadNoSuchFileError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileReadInapplicableStringEncoding") - public static var FileReadInapplicableStringEncodingError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileReadUnsupportedScheme") - public static var FileReadUnsupportedSchemeError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileReadTooLarge") - public static var FileReadTooLargeError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileReadUnknownStringEncoding") - public static var FileReadUnknownStringEncodingError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileWriteUnknown") - public static var FileWriteUnknownError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileWriteNoPermission") - public static var FileWriteNoPermissionError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileWriteInvalidFileName") - public static var FileWriteInvalidFileNameError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileWriteFileExists") - public static var FileWriteFileExistsError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileWriteInapplicableStringEncoding") - public static var FileWriteInapplicableStringEncodingError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileWriteUnsupportedScheme") - public static var FileWriteUnsupportedSchemeError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileWriteOutOfSpace") - public static var FileWriteOutOfSpaceError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileWriteVolumeReadOnly") - public static var FileWriteVolumeReadOnlyError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileManagerUnmountUnknown") - public static var FileManagerUnmountUnknownError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileManagerUnmountBusy") - public static var FileManagerUnmountBusyError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "keyValueValidation") - public static var KeyValueValidationError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "formatting") - public static var FormattingError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "userCancelled") - public static var UserCancelledError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "featureUnsupported") - public static var FeatureUnsupportedError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "executableNotLoadable") - public static var ExecutableNotLoadableError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "executableArchitectureMismatch") - public static var ExecutableArchitectureMismatchError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "executableRuntimeMismatch") - public static var ExecutableRuntimeMismatchError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "executableLoad") - public static var ExecutableLoadError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "executableLink") - public static var ExecutableLinkError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "propertyListReadCorrupt") - public static var PropertyListReadCorruptError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "propertyListReadUnknownVersion") - public static var PropertyListReadUnknownVersionError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "propertyListReadStream") - public static var PropertyListReadStreamError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "propertyListWriteStream") - public static var PropertyListWriteStreamError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "propertyListWriteInvalid") - public static var PropertyListWriteInvalidError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "xpcConnectionInterrupted") - public static var XPCConnectionInterrupted: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "xpcConnectionInvalid") - public static var XPCConnectionInvalid: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "xpcConnectionReplyInvalid") - public static var XPCConnectionReplyInvalid: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "ubiquitousFileUnavailable") - public static var UbiquitousFileUnavailableError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "ubiquitousFileNotUploadedDueToQuota") - public static var UbiquitousFileNotUploadedDueToQuotaError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "ubiquitousFileUbiquityServerNotAvailable") - public static var UbiquitousFileUbiquityServerNotAvailable: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "userActivityHandoffFailed") - public static var UserActivityHandoffFailedError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "userActivityConnectionUnavailable") - public static var UserActivityConnectionUnavailableError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "userActivityRemoteApplicationTimedOut") - public static var UserActivityRemoteApplicationTimedOutError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "userActivityHandoffUserInfoTooLarge") - public static var UserActivityHandoffUserInfoTooLargeError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "coderReadCorrupt") - public static var CoderReadCorruptError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "coderValueNotFound") - public static var CoderValueNotFoundError: CocoaError.Code { - fatalError("unavailable accessor can't be called") - } -} - -/// Describes errors in the URL error domain. -public struct URLError : _BridgedStoredNSError { - public let _nsError: NSError - - public init(_nsError error: NSError) { - precondition(error.domain == NSURLErrorDomain) - self._nsError = error - } - - public static var errorDomain: String { return NSURLErrorDomain } - - public var hashValue: Int { - return _nsError.hashValue - } - - /// The error code itself. - public struct Code : RawRepresentable, Hashable, _ErrorCodeProtocol { - public typealias _ErrorType = URLError - - public let rawValue: Int - - public init(rawValue: Int) { - self.rawValue = rawValue - } - } -} - -extension URLError.Code { - public static var unknown: URLError.Code { - return URLError.Code(rawValue: -1) - } - public static var cancelled: URLError.Code { - return URLError.Code(rawValue: -999) - } - public static var badURL: URLError.Code { - return URLError.Code(rawValue: -1000) - } - public static var timedOut: URLError.Code { - return URLError.Code(rawValue: -1001) - } - public static var unsupportedURL: URLError.Code { - return URLError.Code(rawValue: -1002) - } - public static var cannotFindHost: URLError.Code { - return URLError.Code(rawValue: -1003) - } - public static var cannotConnectToHost: URLError.Code { - return URLError.Code(rawValue: -1004) - } - public static var networkConnectionLost: URLError.Code { - return URLError.Code(rawValue: -1005) - } - public static var dnsLookupFailed: URLError.Code { - return URLError.Code(rawValue: -1006) - } - public static var httpTooManyRedirects: URLError.Code { - return URLError.Code(rawValue: -1007) - } - public static var resourceUnavailable: URLError.Code { - return URLError.Code(rawValue: -1008) - } - public static var notConnectedToInternet: URLError.Code { - return URLError.Code(rawValue: -1009) - } - public static var redirectToNonExistentLocation: URLError.Code { - return URLError.Code(rawValue: -1010) - } - public static var badServerResponse: URLError.Code { - return URLError.Code(rawValue: -1011) - } - public static var userCancelledAuthentication: URLError.Code { - return URLError.Code(rawValue: -1012) - } - public static var userAuthenticationRequired: URLError.Code { - return URLError.Code(rawValue: -1013) - } - public static var zeroByteResource: URLError.Code { - return URLError.Code(rawValue: -1014) - } - public static var cannotDecodeRawData: URLError.Code { - return URLError.Code(rawValue: -1015) - } - public static var cannotDecodeContentData: URLError.Code { - return URLError.Code(rawValue: -1016) - } - public static var cannotParseResponse: URLError.Code { - return URLError.Code(rawValue: -1017) - } - @available(macOS, introduced: 10.11) @available(iOS, introduced: 9.0) - public static var appTransportSecurityRequiresSecureConnection: URLError.Code { - return URLError.Code(rawValue: -1022) - } - public static var fileDoesNotExist: URLError.Code { - return URLError.Code(rawValue: -1100) - } - public static var fileIsDirectory: URLError.Code { - return URLError.Code(rawValue: -1101) - } - public static var noPermissionsToReadFile: URLError.Code { - return URLError.Code(rawValue: -1102) - } - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var dataLengthExceedsMaximum: URLError.Code { - return URLError.Code(rawValue: -1103) - } - public static var secureConnectionFailed: URLError.Code { - return URLError.Code(rawValue: -1200) - } - public static var serverCertificateHasBadDate: URLError.Code { - return URLError.Code(rawValue: -1201) - } - public static var serverCertificateUntrusted: URLError.Code { - return URLError.Code(rawValue: -1202) - } - public static var serverCertificateHasUnknownRoot: URLError.Code { - return URLError.Code(rawValue: -1203) - } - public static var serverCertificateNotYetValid: URLError.Code { - return URLError.Code(rawValue: -1204) - } - public static var clientCertificateRejected: URLError.Code { - return URLError.Code(rawValue: -1205) - } - public static var clientCertificateRequired: URLError.Code { - return URLError.Code(rawValue: -1206) - } - public static var cannotLoadFromNetwork: URLError.Code { - return URLError.Code(rawValue: -2000) - } - public static var cannotCreateFile: URLError.Code { - return URLError.Code(rawValue: -3000) - } - public static var cannotOpenFile: URLError.Code { - return URLError.Code(rawValue: -3001) - } - public static var cannotCloseFile: URLError.Code { - return URLError.Code(rawValue: -3002) - } - public static var cannotWriteToFile: URLError.Code { - return URLError.Code(rawValue: -3003) - } - public static var cannotRemoveFile: URLError.Code { - return URLError.Code(rawValue: -3004) - } - public static var cannotMoveFile: URLError.Code { - return URLError.Code(rawValue: -3005) - } - public static var downloadDecodingFailedMidStream: URLError.Code { - return URLError.Code(rawValue: -3006) - } - public static var downloadDecodingFailedToComplete: URLError.Code { - return URLError.Code(rawValue: -3007) - } - - @available(macOS, introduced: 10.7) @available(iOS, introduced: 3.0) - public static var internationalRoamingOff: URLError.Code { - return URLError.Code(rawValue: -1018) - } - - @available(macOS, introduced: 10.7) @available(iOS, introduced: 3.0) - public static var callIsActive: URLError.Code { - return URLError.Code(rawValue: -1019) - } - - @available(macOS, introduced: 10.7) @available(iOS, introduced: 3.0) - public static var dataNotAllowed: URLError.Code { - return URLError.Code(rawValue: -1020) - } - - @available(macOS, introduced: 10.7) @available(iOS, introduced: 3.0) - public static var requestBodyStreamExhausted: URLError.Code { - return URLError.Code(rawValue: -1021) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var backgroundSessionRequiresSharedContainer: URLError.Code { - return URLError.Code(rawValue: -995) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var backgroundSessionInUseByAnotherProcess: URLError.Code { - return URLError.Code(rawValue: -996) - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var backgroundSessionWasDisconnected: URLError.Code { - return URLError.Code(rawValue: -997) - } -} - -extension URLError { - /// Reasons used by URLError to indicate why a background URLSessionTask was cancelled. - @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) - public enum BackgroundTaskCancelledReason : Int { - case userForceQuitApplication - case backgroundUpdatesDisabled - case insufficientSystemResources - } -} - -extension URLError { - /// Reasons used by URLError to indicate that a URLSessionTask failed because of unsatisfiable network constraints. - @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) - public enum NetworkUnavailableReason : Int { - case cellular - case expensive - case constrained - } -} - -extension URLError { - private var _nsUserInfo: [AnyHashable : Any] { - return (self as NSError).userInfo - } - - /// The URL which caused a load to fail. - public var failingURL: URL? { - return _nsUserInfo[NSURLErrorFailingURLErrorKey as NSString] as? URL - } - - /// The string for the URL which caused a load to fail. - public var failureURLString: String? { - return _nsUserInfo[NSURLErrorFailingURLStringErrorKey as NSString] as? String - } - - /// The state of a failed SSL handshake. - public var failureURLPeerTrust: SecTrust? { - if let secTrust = _nsUserInfo[NSURLErrorFailingURLPeerTrustErrorKey as NSString] { - return (secTrust as! SecTrust) - } - - return nil - } - - /// The reason why a background URLSessionTask was cancelled. - @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) - public var backgroundTaskCancelledReason: BackgroundTaskCancelledReason? { - return (_nsUserInfo[NSURLErrorBackgroundTaskCancelledReasonKey] as? Int).flatMap(BackgroundTaskCancelledReason.init(rawValue:)) - } - - /// The reason why the network is unavailable when the task failed due to unsatisfiable network constraints. - @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) - public var networkUnavailableReason: NetworkUnavailableReason? { - return (_nsUserInfo[NSURLErrorNetworkUnavailableReasonKey] as? Int).flatMap(NetworkUnavailableReason.init(rawValue:)) - } - - /// An opaque data blob to resume a failed download task. - @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) - public var downloadTaskResumeData: Data? { - return _nsUserInfo[NSURLSessionDownloadTaskResumeData] as? Data - } -} - -extension URLError { - public static var unknown: URLError.Code { - return .unknown - } - - public static var cancelled: URLError.Code { - return .cancelled - } - - public static var badURL: URLError.Code { - return .badURL - } - - public static var timedOut: URLError.Code { - return .timedOut - } - - public static var unsupportedURL: URLError.Code { - return .unsupportedURL - } - - public static var cannotFindHost: URLError.Code { - return .cannotFindHost - } - - public static var cannotConnectToHost: URLError.Code { - return .cannotConnectToHost - } - - public static var networkConnectionLost: URLError.Code { - return .networkConnectionLost - } - - public static var dnsLookupFailed: URLError.Code { - return .dnsLookupFailed - } - - public static var httpTooManyRedirects: URLError.Code { - return .httpTooManyRedirects - } - - public static var resourceUnavailable: URLError.Code { - return .resourceUnavailable - } - - public static var notConnectedToInternet: URLError.Code { - return .notConnectedToInternet - } - - public static var redirectToNonExistentLocation: URLError.Code { - return .redirectToNonExistentLocation - } - - public static var badServerResponse: URLError.Code { - return .badServerResponse - } - - public static var userCancelledAuthentication: URLError.Code { - return .userCancelledAuthentication - } - - public static var userAuthenticationRequired: URLError.Code { - return .userAuthenticationRequired - } - - public static var zeroByteResource: URLError.Code { - return .zeroByteResource - } - - public static var cannotDecodeRawData: URLError.Code { - return .cannotDecodeRawData - } - - public static var cannotDecodeContentData: URLError.Code { - return .cannotDecodeContentData - } - - public static var cannotParseResponse: URLError.Code { - return .cannotParseResponse - } - - @available(macOS, introduced: 10.11) @available(iOS, introduced: 9.0) - public static var appTransportSecurityRequiresSecureConnection: URLError.Code { - return .appTransportSecurityRequiresSecureConnection - } - - public static var fileDoesNotExist: URLError.Code { - return .fileDoesNotExist - } - - public static var fileIsDirectory: URLError.Code { - return .fileIsDirectory - } - - public static var noPermissionsToReadFile: URLError.Code { - return .noPermissionsToReadFile - } - - @available(macOS, introduced: 10.5) @available(iOS, introduced: 2.0) - public static var dataLengthExceedsMaximum: URLError.Code { - return .dataLengthExceedsMaximum - } - - public static var secureConnectionFailed: URLError.Code { - return .secureConnectionFailed - } - - public static var serverCertificateHasBadDate: URLError.Code { - return .serverCertificateHasBadDate - } - - public static var serverCertificateUntrusted: URLError.Code { - return .serverCertificateUntrusted - } - - public static var serverCertificateHasUnknownRoot: URLError.Code { - return .serverCertificateHasUnknownRoot - } - - public static var serverCertificateNotYetValid: URLError.Code { - return .serverCertificateNotYetValid - } - - public static var clientCertificateRejected: URLError.Code { - return .clientCertificateRejected - } - - public static var clientCertificateRequired: URLError.Code { - return .clientCertificateRequired - } - - public static var cannotLoadFromNetwork: URLError.Code { - return .cannotLoadFromNetwork - } - - public static var cannotCreateFile: URLError.Code { - return .cannotCreateFile - } - - public static var cannotOpenFile: URLError.Code { - return .cannotOpenFile - } - - public static var cannotCloseFile: URLError.Code { - return .cannotCloseFile - } - - public static var cannotWriteToFile: URLError.Code { - return .cannotWriteToFile - } - - public static var cannotRemoveFile: URLError.Code { - return .cannotRemoveFile - } - - public static var cannotMoveFile: URLError.Code { - return .cannotMoveFile - } - - public static var downloadDecodingFailedMidStream: URLError.Code { - return .downloadDecodingFailedMidStream - } - - public static var downloadDecodingFailedToComplete: URLError.Code { - return .downloadDecodingFailedToComplete - } - - @available(macOS, introduced: 10.7) @available(iOS, introduced: 3.0) - public static var internationalRoamingOff: URLError.Code { - return .internationalRoamingOff - } - - @available(macOS, introduced: 10.7) @available(iOS, introduced: 3.0) - public static var callIsActive: URLError.Code { - return .callIsActive - } - - @available(macOS, introduced: 10.7) @available(iOS, introduced: 3.0) - public static var dataNotAllowed: URLError.Code { - return .dataNotAllowed - } - - @available(macOS, introduced: 10.7) @available(iOS, introduced: 3.0) - public static var requestBodyStreamExhausted: URLError.Code { - return .requestBodyStreamExhausted - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var backgroundSessionRequiresSharedContainer: Code { - return .backgroundSessionRequiresSharedContainer - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var backgroundSessionInUseByAnotherProcess: Code { - return .backgroundSessionInUseByAnotherProcess - } - - @available(macOS, introduced: 10.10) @available(iOS, introduced: 8.0) - public static var backgroundSessionWasDisconnected: Code { - return .backgroundSessionWasDisconnected - } -} - -extension URLError { - @available(*, unavailable, renamed: "unknown") - public static var Unknown: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "cancelled") - public static var Cancelled: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "badURL") - public static var BadURL: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "timedOut") - public static var TimedOut: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "unsupportedURL") - public static var UnsupportedURL: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "cannotFindHost") - public static var CannotFindHost: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "cannotConnectToHost") - public static var CannotConnectToHost: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "networkConnectionLost") - public static var NetworkConnectionLost: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "dnsLookupFailed") - public static var DNSLookupFailed: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "httpTooManyRedirects") - public static var HTTPTooManyRedirects: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "resourceUnavailable") - public static var ResourceUnavailable: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "notConnectedToInternet") - public static var NotConnectedToInternet: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "redirectToNonExistentLocation") - public static var RedirectToNonExistentLocation: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "badServerResponse") - public static var BadServerResponse: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "userCancelledAuthentication") - public static var UserCancelledAuthentication: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "userAuthenticationRequired") - public static var UserAuthenticationRequired: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "zeroByteResource") - public static var ZeroByteResource: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "cannotDecodeRawData") - public static var CannotDecodeRawData: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "cannotDecodeContentData") - public static var CannotDecodeContentData: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "cannotParseResponse") - public static var CannotParseResponse: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "appTransportSecurityRequiresSecureConnection") - public static var AppTransportSecurityRequiresSecureConnection: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileDoesNotExist") - public static var FileDoesNotExist: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "fileIsDirectory") - public static var FileIsDirectory: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "noPermissionsToReadFile") - public static var NoPermissionsToReadFile: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "dataLengthExceedsMaximum") - public static var DataLengthExceedsMaximum: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "secureConnectionFailed") - public static var SecureConnectionFailed: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "serverCertificateHasBadDate") - public static var ServerCertificateHasBadDate: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "serverCertificateUntrusted") - public static var ServerCertificateUntrusted: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "serverCertificateHasUnknownRoot") - public static var ServerCertificateHasUnknownRoot: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "serverCertificateNotYetValid") - public static var ServerCertificateNotYetValid: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "clientCertificateRejected") - public static var ClientCertificateRejected: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "clientCertificateRequired") - public static var ClientCertificateRequired: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "cannotLoadFromNetwork") - public static var CannotLoadFromNetwork: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "cannotCreateFile") - public static var CannotCreateFile: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "cannotOpenFile") - public static var CannotOpenFile: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "cannotCloseFile") - public static var CannotCloseFile: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "cannotWriteToFile") - public static var CannotWriteToFile: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "cannotRemoveFile") - public static var CannotRemoveFile: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "cannotMoveFile") - public static var CannotMoveFile: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "downloadDecodingFailedMidStream") - public static var DownloadDecodingFailedMidStream: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "downloadDecodingFailedToComplete") - public static var DownloadDecodingFailedToComplete: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "internationalRoamingOff") - public static var InternationalRoamingOff: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "callIsActive") - public static var CallIsActive: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "dataNotAllowed") - public static var DataNotAllowed: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "requestBodyStreamExhausted") - public static var RequestBodyStreamExhausted: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "backgroundSessionRequiresSharedContainer") - public static var BackgroundSessionRequiresSharedContainer: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "backgroundSessionInUseByAnotherProcess") - public static var BackgroundSessionInUseByAnotherProcess: URLError.Code { - fatalError("unavailable accessor can't be called") - } - - @available(*, unavailable, renamed: "backgroundSessionWasDisconnected") - public static var BackgroundSessionWasDisconnected: URLError.Code { - fatalError("unavailable accessor can't be called") - } -} - -/// Describes an error in the POSIX error domain. -public struct POSIXError : _BridgedStoredNSError { - public let _nsError: NSError - - public init(_nsError error: NSError) { - precondition(error.domain == NSPOSIXErrorDomain) - self._nsError = error - } - - public static var errorDomain: String { return NSPOSIXErrorDomain } - - public var hashValue: Int { - return _nsError.hashValue - } - - public typealias Code = POSIXErrorCode -} - -extension POSIXErrorCode : _ErrorCodeProtocol { - public typealias _ErrorType = POSIXError -} - -extension POSIXError { - public static var EPERM: POSIXErrorCode { - return .EPERM - } - - /// No such file or directory. - public static var ENOENT: POSIXErrorCode { - return .ENOENT - } - - /// No such process. - public static var ESRCH: POSIXErrorCode { - return .ESRCH - } - - /// Interrupted system call. - public static var EINTR: POSIXErrorCode { - return .EINTR - } - - /// Input/output error. - public static var EIO: POSIXErrorCode { - return .EIO - } - - /// Device not configured. - public static var ENXIO: POSIXErrorCode { - return .ENXIO - } - - /// Argument list too long. - public static var E2BIG: POSIXErrorCode { - return .E2BIG - } - - /// Exec format error. - public static var ENOEXEC: POSIXErrorCode { - return .ENOEXEC - } - - /// Bad file descriptor. - public static var EBADF: POSIXErrorCode { - return .EBADF - } - - /// No child processes. - public static var ECHILD: POSIXErrorCode { - return .ECHILD - } - - /// Resource deadlock avoided. - public static var EDEADLK: POSIXErrorCode { - return .EDEADLK - } - - /// Cannot allocate memory. - public static var ENOMEM: POSIXErrorCode { - return .ENOMEM - } - - /// Permission denied. - public static var EACCES: POSIXErrorCode { - return .EACCES - } - - /// Bad address. - public static var EFAULT: POSIXErrorCode { - return .EFAULT - } - - /// Block device required. - public static var ENOTBLK: POSIXErrorCode { - return .ENOTBLK - } - /// Device / Resource busy. - public static var EBUSY: POSIXErrorCode { - return .EBUSY - } - /// File exists. - public static var EEXIST: POSIXErrorCode { - return .EEXIST - } - /// Cross-device link. - public static var EXDEV: POSIXErrorCode { - return .EXDEV - } - /// Operation not supported by device. - public static var ENODEV: POSIXErrorCode { - return .ENODEV - } - /// Not a directory. - public static var ENOTDIR: POSIXErrorCode { - return .ENOTDIR - } - /// Is a directory. - public static var EISDIR: POSIXErrorCode { - return .EISDIR - } - /// Invalid argument. - public static var EINVAL: POSIXErrorCode { - return .EINVAL - } - /// Too many open files in system. - public static var ENFILE: POSIXErrorCode { - return .ENFILE - } - /// Too many open files. - public static var EMFILE: POSIXErrorCode { - return .EMFILE - } - /// Inappropriate ioctl for device. - public static var ENOTTY: POSIXErrorCode { - return .ENOTTY - } - /// Text file busy. - public static var ETXTBSY: POSIXErrorCode { - return .ETXTBSY - } - /// File too large. - public static var EFBIG: POSIXErrorCode { - return .EFBIG - } - /// No space left on device. - public static var ENOSPC: POSIXErrorCode { - return .ENOSPC - } - /// Illegal seek. - public static var ESPIPE: POSIXErrorCode { - return .ESPIPE - } - /// Read-only file system. - public static var EROFS: POSIXErrorCode { - return .EROFS - } - /// Too many links. - public static var EMLINK: POSIXErrorCode { - return .EMLINK - } - /// Broken pipe. - public static var EPIPE: POSIXErrorCode { - return .EPIPE - } - -/// math software. - /// Numerical argument out of domain. - public static var EDOM: POSIXErrorCode { - return .EDOM - } - /// Result too large. - public static var ERANGE: POSIXErrorCode { - return .ERANGE - } - -/// non-blocking and interrupt i/o. - /// Resource temporarily unavailable. - public static var EAGAIN: POSIXErrorCode { - return .EAGAIN - } - /// Operation would block. - public static var EWOULDBLOCK: POSIXErrorCode { - return .EWOULDBLOCK - } - /// Operation now in progress. - public static var EINPROGRESS: POSIXErrorCode { - return .EINPROGRESS - } - /// Operation already in progress. - public static var EALREADY: POSIXErrorCode { - return .EALREADY - } - -/// ipc/network software -- argument errors. - /// Socket operation on non-socket. - public static var ENOTSOCK: POSIXErrorCode { - return .ENOTSOCK - } - /// Destination address required. - public static var EDESTADDRREQ: POSIXErrorCode { - return .EDESTADDRREQ - } - /// Message too long. - public static var EMSGSIZE: POSIXErrorCode { - return .EMSGSIZE - } - /// Protocol wrong type for socket. - public static var EPROTOTYPE: POSIXErrorCode { - return .EPROTOTYPE - } - /// Protocol not available. - public static var ENOPROTOOPT: POSIXErrorCode { - return .ENOPROTOOPT - } - /// Protocol not supported. - public static var EPROTONOSUPPORT: POSIXErrorCode { - return .EPROTONOSUPPORT - } - /// Socket type not supported. - public static var ESOCKTNOSUPPORT: POSIXErrorCode { - return .ESOCKTNOSUPPORT - } - /// Operation not supported. - public static var ENOTSUP: POSIXErrorCode { - return .ENOTSUP - } - /// Protocol family not supported. - public static var EPFNOSUPPORT: POSIXErrorCode { - return .EPFNOSUPPORT - } - /// Address family not supported by protocol family. - public static var EAFNOSUPPORT: POSIXErrorCode { - return .EAFNOSUPPORT - } - - /// Address already in use. - public static var EADDRINUSE: POSIXErrorCode { - return .EADDRINUSE - } - /// Can't assign requested address. - public static var EADDRNOTAVAIL: POSIXErrorCode { - return .EADDRNOTAVAIL - } - -/// ipc/network software -- operational errors - /// Network is down. - public static var ENETDOWN: POSIXErrorCode { - return .ENETDOWN - } - /// Network is unreachable. - public static var ENETUNREACH: POSIXErrorCode { - return .ENETUNREACH - } - /// Network dropped connection on reset. - public static var ENETRESET: POSIXErrorCode { - return .ENETRESET - } - /// Software caused connection abort. - public static var ECONNABORTED: POSIXErrorCode { - return .ECONNABORTED - } - /// Connection reset by peer. - public static var ECONNRESET: POSIXErrorCode { - return .ECONNRESET - } - /// No buffer space available. - public static var ENOBUFS: POSIXErrorCode { - return .ENOBUFS - } - /// Socket is already connected. - public static var EISCONN: POSIXErrorCode { - return .EISCONN - } - /// Socket is not connected. - public static var ENOTCONN: POSIXErrorCode { - return .ENOTCONN - } - /// Can't send after socket shutdown. - public static var ESHUTDOWN: POSIXErrorCode { - return .ESHUTDOWN - } - /// Too many references: can't splice. - public static var ETOOMANYREFS: POSIXErrorCode { - return .ETOOMANYREFS - } - /// Operation timed out. - public static var ETIMEDOUT: POSIXErrorCode { - return .ETIMEDOUT - } - /// Connection refused. - public static var ECONNREFUSED: POSIXErrorCode { - return .ECONNREFUSED - } - - /// Too many levels of symbolic links. - public static var ELOOP: POSIXErrorCode { - return .ELOOP - } - /// File name too long. - public static var ENAMETOOLONG: POSIXErrorCode { - return .ENAMETOOLONG - } - - /// Host is down. - public static var EHOSTDOWN: POSIXErrorCode { - return .EHOSTDOWN - } - /// No route to host. - public static var EHOSTUNREACH: POSIXErrorCode { - return .EHOSTUNREACH - } - /// Directory not empty. - public static var ENOTEMPTY: POSIXErrorCode { - return .ENOTEMPTY - } - -/// quotas & mush. - /// Too many processes. - public static var EPROCLIM: POSIXErrorCode { - return .EPROCLIM - } - /// Too many users. - public static var EUSERS: POSIXErrorCode { - return .EUSERS - } - /// Disc quota exceeded. - public static var EDQUOT: POSIXErrorCode { - return .EDQUOT - } - -/// Network File System. - /// Stale NFS file handle. - public static var ESTALE: POSIXErrorCode { - return .ESTALE - } - /// Too many levels of remote in path. - public static var EREMOTE: POSIXErrorCode { - return .EREMOTE - } - /// RPC struct is bad. - public static var EBADRPC: POSIXErrorCode { - return .EBADRPC - } - /// RPC version wrong. - public static var ERPCMISMATCH: POSIXErrorCode { - return .ERPCMISMATCH - } - /// RPC prog. not avail. - public static var EPROGUNAVAIL: POSIXErrorCode { - return .EPROGUNAVAIL - } - /// Program version wrong. - public static var EPROGMISMATCH: POSIXErrorCode { - return .EPROGMISMATCH - } - /// Bad procedure for program. - public static var EPROCUNAVAIL: POSIXErrorCode { - return .EPROCUNAVAIL - } - - /// No locks available. - public static var ENOLCK: POSIXErrorCode { - return .ENOLCK - } - /// Function not implemented. - public static var ENOSYS: POSIXErrorCode { - return .ENOSYS - } - - /// Inappropriate file type or format. - public static var EFTYPE: POSIXErrorCode { - return .EFTYPE - } - /// Authentication error. - public static var EAUTH: POSIXErrorCode { - return .EAUTH - } - /// Need authenticator. - public static var ENEEDAUTH: POSIXErrorCode { - return .ENEEDAUTH - } - -/// Intelligent device errors. - /// Device power is off. - public static var EPWROFF: POSIXErrorCode { - return .EPWROFF - } - /// Device error, e.g. paper out. - public static var EDEVERR: POSIXErrorCode { - return .EDEVERR - } - - /// Value too large to be stored in data type. - public static var EOVERFLOW: POSIXErrorCode { - return .EOVERFLOW - } - -/// Program loading errors. - /// Bad executable. - public static var EBADEXEC: POSIXErrorCode { - return .EBADEXEC - } - /// Bad CPU type in executable. - public static var EBADARCH: POSIXErrorCode { - return .EBADARCH - } - /// Shared library version mismatch. - public static var ESHLIBVERS: POSIXErrorCode { - return .ESHLIBVERS - } - /// Malformed Macho file. - public static var EBADMACHO: POSIXErrorCode { - return .EBADMACHO - } - - /// Operation canceled. - public static var ECANCELED: POSIXErrorCode { - return .ECANCELED - } - - /// Identifier removed. - public static var EIDRM: POSIXErrorCode { - return .EIDRM - } - /// No message of desired type. - public static var ENOMSG: POSIXErrorCode { - return .ENOMSG - } - /// Illegal byte sequence. - public static var EILSEQ: POSIXErrorCode { - return .EILSEQ - } - /// Attribute not found. - public static var ENOATTR: POSIXErrorCode { - return .ENOATTR - } - - /// Bad message. - public static var EBADMSG: POSIXErrorCode { - return .EBADMSG - } - /// Reserved. - public static var EMULTIHOP: POSIXErrorCode { - return .EMULTIHOP - } - /// No message available on STREAM. - public static var ENODATA: POSIXErrorCode { - return .ENODATA - } - /// Reserved. - public static var ENOLINK: POSIXErrorCode { - return .ENOLINK - } - /// No STREAM resources. - public static var ENOSR: POSIXErrorCode { - return .ENOSR - } - /// Not a STREAM. - public static var ENOSTR: POSIXErrorCode { - return .ENOSTR - } - /// Protocol error. - public static var EPROTO: POSIXErrorCode { - return .EPROTO - } - /// STREAM ioctl timeout. - public static var ETIME: POSIXErrorCode { - return .ETIME - } - - /// No such policy registered. - public static var ENOPOLICY: POSIXErrorCode { - return .ENOPOLICY - } - - /// State not recoverable. - public static var ENOTRECOVERABLE: POSIXErrorCode { - return .ENOTRECOVERABLE - } - /// Previous owner died. - public static var EOWNERDEAD: POSIXErrorCode { - return .EOWNERDEAD - } - - /// Interface output queue is full. - public static var EQFULL: POSIXErrorCode { - return .EQFULL - } -} - -/// Describes an error in the Mach error domain. -public struct MachError : _BridgedStoredNSError { - public let _nsError: NSError - - public init(_nsError error: NSError) { - precondition(error.domain == NSMachErrorDomain) - self._nsError = error - } - - public static var errorDomain: String { return NSMachErrorDomain } - - public var hashValue: Int { - return _nsError.hashValue - } - - public typealias Code = MachErrorCode -} - -extension MachErrorCode : _ErrorCodeProtocol { - public typealias _ErrorType = MachError -} - -extension MachError { - public static var success: MachError.Code { - return .success - } - - /// Specified address is not currently valid. - public static var invalidAddress: MachError.Code { - return .invalidAddress - } - - /// Specified memory is valid, but does not permit the required - /// forms of access. - public static var protectionFailure: MachError.Code { - return .protectionFailure - } - - /// The address range specified is already in use, or no address - /// range of the size specified could be found. - public static var noSpace: MachError.Code { - return .noSpace - } - - /// The function requested was not applicable to this type of - /// argument, or an argument is invalid. - public static var invalidArgument: MachError.Code { - return .invalidArgument - } - - /// The function could not be performed. A catch-all. - public static var failure: MachError.Code { - return .failure - } - - /// A system resource could not be allocated to fulfill this - /// request. This failure may not be permanent. - public static var resourceShortage: MachError.Code { - return .resourceShortage - } - - /// The task in question does not hold receive rights for the port - /// argument. - public static var notReceiver: MachError.Code { - return .notReceiver - } - - /// Bogus access restriction. - public static var noAccess: MachError.Code { - return .noAccess - } - - /// During a page fault, the target address refers to a memory - /// object that has been destroyed. This failure is permanent. - public static var memoryFailure: MachError.Code { - return .memoryFailure - } - - /// During a page fault, the memory object indicated that the data - /// could not be returned. This failure may be temporary; future - /// attempts to access this same data may succeed, as defined by the - /// memory object. - public static var memoryError: MachError.Code { - return .memoryError - } - - /// The receive right is already a member of the portset. - public static var alreadyInSet: MachError.Code { - return .alreadyInSet - } - - /// The receive right is not a member of a port set. - public static var notInSet: MachError.Code { - return .notInSet - } - - /// The name already denotes a right in the task. - public static var nameExists: MachError.Code { - return .nameExists - } - - /// The operation was aborted. Ipc code will catch this and reflect - /// it as a message error. - public static var aborted: MachError.Code { - return .aborted - } - - /// The name doesn't denote a right in the task. - public static var invalidName: MachError.Code { - return .invalidName - } - - /// Target task isn't an active task. - public static var invalidTask: MachError.Code { - return .invalidTask - } - - /// The name denotes a right, but not an appropriate right. - public static var invalidRight: MachError.Code { - return .invalidRight - } - - /// A blatant range error. - public static var invalidValue: MachError.Code { - return .invalidValue - } - - /// Operation would overflow limit on user-references. - public static var userReferencesOverflow: MachError.Code { - return .userReferencesOverflow - } - - /// The supplied (port) capability is improper. - public static var invalidCapability: MachError.Code { - return .invalidCapability - } - - /// The task already has send or receive rights for the port under - /// another name. - public static var rightExists: MachError.Code { - return .rightExists - } - - /// Target host isn't actually a host. - public static var invalidHost: MachError.Code { - return .invalidHost - } - - /// An attempt was made to supply "precious" data for memory that is - /// already present in a memory object. - public static var memoryPresent: MachError.Code { - return .memoryPresent - } - - /// A page was requested of a memory manager via - /// memory_object_data_request for an object using a - /// MEMORY_OBJECT_COPY_CALL strategy, with the VM_PROT_WANTS_COPY - /// flag being used to specify that the page desired is for a copy - /// of the object, and the memory manager has detected the page was - /// pushed into a copy of the object while the kernel was walking - /// the shadow chain from the copy to the object. This error code is - /// delivered via memory_object_data_error and is handled by the - /// kernel (it forces the kernel to restart the fault). It will not - /// be seen by users. - public static var memoryDataMoved: MachError.Code { - return .memoryDataMoved - } - - /// A strategic copy was attempted of an object upon which a quicker - /// copy is now possible. The caller should retry the copy using - /// vm_object_copy_quickly. This error code is seen only by the - /// kernel. - public static var memoryRestartCopy: MachError.Code { - return .memoryRestartCopy - } - - /// An argument applied to assert processor set privilege was not a - /// processor set control port. - public static var invalidProcessorSet: MachError.Code { - return .invalidProcessorSet - } - - /// The specified scheduling attributes exceed the thread's limits. - public static var policyLimit: MachError.Code { - return .policyLimit - } - - /// The specified scheduling policy is not currently enabled for the - /// processor set. - public static var invalidPolicy: MachError.Code { - return .invalidPolicy - } - - /// The external memory manager failed to initialize the memory object. - public static var invalidObject: MachError.Code { - return .invalidObject - } - - /// A thread is attempting to wait for an event for which there is - /// already a waiting thread. - public static var alreadyWaiting: MachError.Code { - return .alreadyWaiting - } - - /// An attempt was made to destroy the default processor set. - public static var defaultSet: MachError.Code { - return .defaultSet - } - - /// An attempt was made to fetch an exception port that is - /// protected, or to abort a thread while processing a protected - /// exception. - public static var exceptionProtected: MachError.Code { - return .exceptionProtected - } - - /// A ledger was required but not supplied. - public static var invalidLedger: MachError.Code { - return .invalidLedger - } - - /// The port was not a memory cache control port. - public static var invalidMemoryControl: MachError.Code { - return .invalidMemoryControl - } - - /// An argument supplied to assert security privilege was not a host - /// security port. - public static var invalidSecurity: MachError.Code { - return .invalidSecurity - } - - /// thread_depress_abort was called on a thread which was not - /// currently depressed. - public static var notDepressed: MachError.Code { - return .notDepressed - } - - /// Object has been terminated and is no longer available. - public static var terminated: MachError.Code { - return .terminated - } - - /// Lock set has been destroyed and is no longer available. - public static var lockSetDestroyed: MachError.Code { - return .lockSetDestroyed - } - - /// The thread holding the lock terminated before releasing the lock. - public static var lockUnstable: MachError.Code { - return .lockUnstable - } - - /// The lock is already owned by another thread. - public static var lockOwned: MachError.Code { - return .lockOwned - } - - /// The lock is already owned by the calling thread. - public static var lockOwnedSelf: MachError.Code { - return .lockOwnedSelf - } - - /// Semaphore has been destroyed and is no longer available. - public static var semaphoreDestroyed: MachError.Code { - return .semaphoreDestroyed - } - - /// Return from RPC indicating the target server was terminated - /// before it successfully replied. - public static var rpcServerTerminated: MachError.Code { - return .rpcServerTerminated - } - - /// Terminate an orphaned activation. - public static var rpcTerminateOrphan: MachError.Code { - return .rpcTerminateOrphan - } - - /// Allow an orphaned activation to continue executing. - public static var rpcContinueOrphan: MachError.Code { - return .rpcContinueOrphan - } - - /// Empty thread activation (No thread linked to it). - public static var notSupported: MachError.Code { - return .notSupported - } - - /// Remote node down or inaccessible. - public static var nodeDown: MachError.Code { - return .nodeDown - } - - /// A signalled thread was not actually waiting. - public static var notWaiting: MachError.Code { - return .notWaiting - } - - /// Some thread-oriented operation (semaphore_wait) timed out. - public static var operationTimedOut: MachError.Code { - return .operationTimedOut - } - - /// During a page fault, indicates that the page was rejected as a - /// result of a signature check. - public static var codesignError: MachError.Code { - return .codesignError - } - - /// The requested property cannot be changed at this time. - public static var policyStatic: MachError.Code { - return .policyStatic - } -} - -public struct ErrorUserInfoKey : RawRepresentable, _SwiftNewtypeWrapper, Equatable, Hashable, _ObjectiveCBridgeable { - public typealias _ObjectiveCType = NSString - public init(rawValue: String) { self.rawValue = rawValue } - public var rawValue: String -} - -public extension ErrorUserInfoKey { - @available(*, deprecated, renamed: "NSUnderlyingErrorKey") - static let underlyingErrorKey = ErrorUserInfoKey(rawValue: NSUnderlyingErrorKey) - - @available(*, deprecated, renamed: "NSLocalizedDescriptionKey") - static let localizedDescriptionKey = ErrorUserInfoKey(rawValue: NSLocalizedDescriptionKey) - - @available(*, deprecated, renamed: "NSLocalizedFailureReasonErrorKey") - static let localizedFailureReasonErrorKey = ErrorUserInfoKey(rawValue: NSLocalizedFailureReasonErrorKey) - - @available(*, deprecated, renamed: "NSLocalizedRecoverySuggestionErrorKey") - static let localizedRecoverySuggestionErrorKey = ErrorUserInfoKey(rawValue: NSLocalizedRecoverySuggestionErrorKey) - - @available(*, deprecated, renamed: "NSLocalizedRecoveryOptionsErrorKey") - static let localizedRecoveryOptionsErrorKey = ErrorUserInfoKey(rawValue: NSLocalizedRecoveryOptionsErrorKey) - - @available(*, deprecated, renamed: "NSRecoveryAttempterErrorKey") - static let recoveryAttempterErrorKey = ErrorUserInfoKey(rawValue: NSRecoveryAttempterErrorKey) - - @available(*, deprecated, renamed: "NSHelpAnchorErrorKey") - static let helpAnchorErrorKey = ErrorUserInfoKey(rawValue: NSHelpAnchorErrorKey) - - @available(*, deprecated, renamed: "NSStringEncodingErrorKey") - static let stringEncodingErrorKey = ErrorUserInfoKey(rawValue: NSStringEncodingErrorKey) - - @available(*, deprecated, renamed: "NSURLErrorKey") - static let NSURLErrorKey = ErrorUserInfoKey(rawValue: Foundation.NSURLErrorKey) - - @available(*, deprecated, renamed: "NSFilePathErrorKey") - static let filePathErrorKey = ErrorUserInfoKey(rawValue: NSFilePathErrorKey) -} diff --git a/Darwin/Foundation-swiftoverlay/NSExpression.swift b/Darwin/Foundation-swiftoverlay/NSExpression.swift deleted file mode 100644 index d0a0f77463..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSExpression.swift +++ /dev/null @@ -1,28 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -extension NSExpression { - // + (NSExpression *) expressionWithFormat:(NSString *)expressionFormat, ...; - public - convenience init(format expressionFormat: __shared String, _ args: CVarArg...) { - let va_args = getVaList(args) - self.init(format: expressionFormat, arguments: va_args) - } -} - -extension NSExpression { - public convenience init(forKeyPath keyPath: KeyPath) { - self.init(forKeyPath: _bridgeKeyPathToString(keyPath)) - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSFastEnumeration.swift b/Darwin/Foundation-swiftoverlay/NSFastEnumeration.swift deleted file mode 100644 index 1955a8a798..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSFastEnumeration.swift +++ /dev/null @@ -1,96 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -/// A dummy value to be used as the target for `mutationsPtr` in fast enumeration implementations. -private var _fastEnumerationMutationsTarget: CUnsignedLong = 0 -/// A dummy pointer to be used as `mutationsPtr` in fast enumeration implementations. -private let _fastEnumerationMutationsPtr = UnsafeMutablePointer(&_fastEnumerationMutationsTarget) - -//===----------------------------------------------------------------------===// -// Fast enumeration -//===----------------------------------------------------------------------===// -public struct NSFastEnumerationIterator : IteratorProtocol { - var enumerable: NSFastEnumeration - var objects: (Unmanaged?, Unmanaged?, Unmanaged?, Unmanaged?, Unmanaged?, Unmanaged?, Unmanaged?, Unmanaged?, Unmanaged?, Unmanaged?, Unmanaged?, Unmanaged?, Unmanaged?, Unmanaged?, Unmanaged?, Unmanaged?) = (nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) - var state = NSFastEnumerationState(state: 0, itemsPtr: nil, mutationsPtr: _fastEnumerationMutationsPtr, extra: (0, 0, 0, 0, 0)) - var index = 0 - var count = 0 - var useObjectsBuffer = false - - public init(_ enumerable: NSFastEnumeration) { - self.enumerable = enumerable - } - - public mutating func next() -> Any? { - if index + 1 > count { - index = 0 - // ensure NO ivars of self are actually captured - let enumeratedObject = enumerable - var localState = state - var localObjects = objects - - (count, useObjectsBuffer) = withUnsafeMutablePointer(to: &localObjects) { - let buffer = AutoreleasingUnsafeMutablePointer($0) - return withUnsafeMutablePointer(to: &localState) { (statePtr: UnsafeMutablePointer) -> (Int, Bool) in - let result = enumeratedObject.countByEnumerating(with: statePtr, objects: buffer, count: 16) - if statePtr.pointee.itemsPtr == buffer { - // Most cocoa classes will emit their own inner pointer buffers instead of traversing this path. Notable exceptions include NSDictionary and NSSet - return (result, true) - } else { - // this is the common case for things like NSArray - return (result, false) - } - } - } - - state = localState // restore the state value - objects = localObjects // copy the object pointers back to the self storage - - if count == 0 { return nil } - } - defer { index += 1 } - if !useObjectsBuffer { - return state.itemsPtr![index] - } else { - switch index { - case 0: return objects.0!.takeUnretainedValue() - case 1: return objects.1!.takeUnretainedValue() - case 2: return objects.2!.takeUnretainedValue() - case 3: return objects.3!.takeUnretainedValue() - case 4: return objects.4!.takeUnretainedValue() - case 5: return objects.5!.takeUnretainedValue() - case 6: return objects.6!.takeUnretainedValue() - case 7: return objects.7!.takeUnretainedValue() - case 8: return objects.8!.takeUnretainedValue() - case 9: return objects.9!.takeUnretainedValue() - case 10: return objects.10!.takeUnretainedValue() - case 11: return objects.11!.takeUnretainedValue() - case 12: return objects.12!.takeUnretainedValue() - case 13: return objects.13!.takeUnretainedValue() - case 14: return objects.14!.takeUnretainedValue() - case 15: return objects.15!.takeUnretainedValue() - default: fatalError("Access beyond storage buffer") - } - } - } -} - -extension NSEnumerator : Sequence { - /// Return an *iterator* over the *enumerator*. - /// - /// - Complexity: O(1). - public func makeIterator() -> NSFastEnumerationIterator { - return NSFastEnumerationIterator(self) - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSGeometry.swift b/Darwin/Foundation-swiftoverlay/NSGeometry.swift deleted file mode 100644 index 622fb87e25..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSGeometry.swift +++ /dev/null @@ -1,37 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -import CoreGraphics - - -#if os(macOS) - -//===----------------------------------------------------------------------===// -// NSRectEdge -//===----------------------------------------------------------------------===// - -extension NSRectEdge { - @inlinable - public init(rectEdge: CGRectEdge) { - self = NSRectEdge(rawValue: UInt(rectEdge.rawValue))! - } -} - -extension CGRectEdge { - @inlinable - public init(rectEdge: NSRectEdge) { - self = CGRectEdge(rawValue: UInt32(rectEdge.rawValue))! - } -} - -#endif diff --git a/Darwin/Foundation-swiftoverlay/NSIndexSet.swift b/Darwin/Foundation-swiftoverlay/NSIndexSet.swift deleted file mode 100644 index 2bf4595d7a..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSIndexSet.swift +++ /dev/null @@ -1,51 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -// TODO: Evaluate deprecating with a message in favor of IndexSet. -public struct NSIndexSetIterator : IteratorProtocol { - public typealias Element = Int - - internal let _set: NSIndexSet - internal var _first: Bool = true - internal var _current: Int? - - internal init(set: NSIndexSet) { - self._set = set - self._current = nil - } - - public mutating func next() -> Int? { - if _first { - _current = _set.firstIndex - _first = false - } else if let c = _current { - _current = _set.indexGreaterThanIndex(c) - } else { - // current is already nil - } - if _current == NSNotFound { - _current = nil - } - return _current - } -} - -extension NSIndexSet : Sequence { - /// Return an *iterator* over the elements of this *sequence*. - /// - /// - Complexity: O(1). - public func makeIterator() -> NSIndexSetIterator { - return NSIndexSetIterator(set: self) - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSItemProvider.swift b/Darwin/Foundation-swiftoverlay/NSItemProvider.swift deleted file mode 100644 index f3d8911fd5..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSItemProvider.swift +++ /dev/null @@ -1,56 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -@available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) -extension NSItemProvider { - - @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) - public func registerObject< - T : _ObjectiveCBridgeable - > ( - ofClass: T.Type, - visibility: NSItemProviderRepresentationVisibility, - loadHandler: @escaping ((T?, Error?) -> Void) -> Progress? - ) where T._ObjectiveCType : NSItemProviderWriting { - self.registerObject( - ofClass: T._ObjectiveCType.self, visibility: visibility) { - completionHandler in loadHandler { - // Using `x as! T._ObjectiveCType?` triggers an assertion in the - // compiler, hence the explicit call to `_bridgeToObjectiveC`. - (x, error) in completionHandler(x?._bridgeToObjectiveC(), error) - } - } - } - - @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) - public func canLoadObject< - T : _ObjectiveCBridgeable - >(ofClass: T.Type) -> Bool - where T._ObjectiveCType : NSItemProviderReading { - return self.canLoadObject(ofClass: T._ObjectiveCType.self) - } - - @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) - public func loadObject< - T : _ObjectiveCBridgeable - >( - ofClass: T.Type, - completionHandler: @escaping (T?, Error?) -> Void - ) -> Progress where T._ObjectiveCType : NSItemProviderReading { - return self.loadObject(ofClass: T._ObjectiveCType.self) { - x, error in completionHandler(x as! T?, error) - } - } - -} diff --git a/Darwin/Foundation-swiftoverlay/NSNumber.swift b/Darwin/Foundation-swiftoverlay/NSNumber.swift deleted file mode 100644 index d6a3379dd6..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSNumber.swift +++ /dev/null @@ -1,700 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -import CoreGraphics - -extension Int8 : _ObjectiveCBridgeable { - @available(swift, deprecated: 4, renamed: "init(truncating:)") - public init(_ number: __shared NSNumber) { - self = number.int8Value - } - - public init(truncating number: __shared NSNumber) { - self = number.int8Value - } - - public init?(exactly number: __shared NSNumber) { - let value = number.int8Value - guard NSNumber(value: value) == number else { return nil } - self = value - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNumber { - return NSNumber(value: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNumber, result: inout Int8?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout Int8?) -> Bool { - guard let value = Int8(exactly: x) else { return false } - result = value - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Int8 { - var result: Int8? - guard let src = source else { return Int8(0) } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return Int8(0) } - return result! - } -} - -extension UInt8 : _ObjectiveCBridgeable { - @available(swift, deprecated: 4, renamed: "init(truncating:)") - public init(_ number: __shared NSNumber) { - self = number.uint8Value - } - - public init(truncating number: __shared NSNumber) { - self = number.uint8Value - } - - public init?(exactly number: __shared NSNumber) { - let value = number.uint8Value - guard NSNumber(value: value) == number else { return nil } - self = value - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNumber { - return NSNumber(value: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNumber, result: inout UInt8?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout UInt8?) -> Bool { - guard let value = UInt8(exactly: x) else { return false } - result = value - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> UInt8 { - var result: UInt8? - guard let src = source else { return UInt8(0) } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return UInt8(0) } - return result! - } -} - -extension Int16 : _ObjectiveCBridgeable { - @available(swift, deprecated: 4, renamed: "init(truncating:)") - public init(_ number: __shared NSNumber) { - self = number.int16Value - } - - public init(truncating number: __shared NSNumber) { - self = number.int16Value - } - - public init?(exactly number: __shared NSNumber) { - let value = number.int16Value - guard NSNumber(value: value) == number else { return nil } - self = value - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNumber { - return NSNumber(value: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNumber, result: inout Int16?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout Int16?) -> Bool { - guard let value = Int16(exactly: x) else { return false } - result = value - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Int16 { - var result: Int16? - guard let src = source else { return Int16(0) } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return Int16(0) } - return result! - } -} - -extension UInt16 : _ObjectiveCBridgeable { - @available(swift, deprecated: 4, renamed: "init(truncating:)") - public init(_ number: __shared NSNumber) { - self = number.uint16Value - } - - public init(truncating number: __shared NSNumber) { - self = number.uint16Value - } - - public init?(exactly number: __shared NSNumber) { - let value = number.uint16Value - guard NSNumber(value: value) == number else { return nil } - self = value - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNumber { - return NSNumber(value: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNumber, result: inout UInt16?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout UInt16?) -> Bool { - guard let value = UInt16(exactly: x) else { return false } - result = value - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> UInt16 { - var result: UInt16? - guard let src = source else { return UInt16(0) } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return UInt16(0) } - return result! - } -} - -extension Int32 : _ObjectiveCBridgeable { - @available(swift, deprecated: 4, renamed: "init(truncating:)") - public init(_ number: __shared NSNumber) { - self = number.int32Value - } - - public init(truncating number: __shared NSNumber) { - self = number.int32Value - } - - public init?(exactly number: __shared NSNumber) { - let value = number.int32Value - guard NSNumber(value: value) == number else { return nil } - self = value - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNumber { - return NSNumber(value: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNumber, result: inout Int32?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout Int32?) -> Bool { - guard let value = Int32(exactly: x) else { return false } - result = value - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Int32 { - var result: Int32? - guard let src = source else { return Int32(0) } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return Int32(0) } - return result! - } -} - -extension UInt32 : _ObjectiveCBridgeable { - @available(swift, deprecated: 4, renamed: "init(truncating:)") - public init(_ number: __shared NSNumber) { - self = number.uint32Value - } - - public init(truncating number: __shared NSNumber) { - self = number.uint32Value - } - - public init?(exactly number: __shared NSNumber) { - let value = number.uint32Value - guard NSNumber(value: value) == number else { return nil } - self = value - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNumber { - return NSNumber(value: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNumber, result: inout UInt32?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout UInt32?) -> Bool { - guard let value = UInt32(exactly: x) else { return false } - result = value - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> UInt32 { - var result: UInt32? - guard let src = source else { return UInt32(0) } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return UInt32(0) } - return result! - } -} - -extension Int64 : _ObjectiveCBridgeable { - @available(swift, deprecated: 4, renamed: "init(truncating:)") - public init(_ number: __shared NSNumber) { - self = number.int64Value - } - - public init(truncating number: __shared NSNumber) { - self = number.int64Value - } - - public init?(exactly number: __shared NSNumber) { - let value = number.int64Value - guard NSNumber(value: value) == number else { return nil } - self = value - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNumber { - return NSNumber(value: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNumber, result: inout Int64?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout Int64?) -> Bool { - guard let value = Int64(exactly: x) else { return false } - result = value - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Int64 { - var result: Int64? - guard let src = source else { return Int64(0) } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return Int64(0) } - return result! - } -} - -extension UInt64 : _ObjectiveCBridgeable { - @available(swift, deprecated: 4, renamed: "init(truncating:)") - public init(_ number: __shared NSNumber) { - self = number.uint64Value - } - - public init(truncating number: __shared NSNumber) { - self = number.uint64Value - } - - public init?(exactly number: __shared NSNumber) { - let value = number.uint64Value - guard NSNumber(value: value) == number else { return nil } - self = value - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNumber { - return NSNumber(value: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNumber, result: inout UInt64?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout UInt64?) -> Bool { - guard let value = UInt64(exactly: x) else { return false } - result = value - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> UInt64 { - var result: UInt64? - guard let src = source else { return UInt64(0) } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return UInt64(0) } - return result! - } -} - -extension Int : _ObjectiveCBridgeable { - @available(swift, deprecated: 4, renamed: "init(truncating:)") - public init(_ number: __shared NSNumber) { - self = number.intValue - } - - public init(truncating number: __shared NSNumber) { - self = number.intValue - } - - public init?(exactly number: __shared NSNumber) { - let value = number.intValue - guard NSNumber(value: value) == number else { return nil } - self = value - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNumber { - return NSNumber(value: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNumber, result: inout Int?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout Int?) -> Bool { - guard let value = Int(exactly: x) else { return false } - result = value - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Int { - var result: Int? - guard let src = source else { return Int(0) } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return Int(0) } - return result! - } -} - -extension UInt : _ObjectiveCBridgeable { - @available(swift, deprecated: 4, renamed: "init(truncating:)") - public init(_ number: __shared NSNumber) { - self = number.uintValue - } - - public init(truncating number: __shared NSNumber) { - self = number.uintValue - } - - public init?(exactly number: __shared NSNumber) { - let value = number.uintValue - guard NSNumber(value: value) == number else { return nil } - self = value - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNumber { - return NSNumber(value: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNumber, result: inout UInt?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout UInt?) -> Bool { - guard let value = UInt(exactly: x) else { return false } - result = value - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> UInt { - var result: UInt? - guard let src = source else { return UInt(0) } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return UInt(0) } - return result! - } -} - -extension Float : _ObjectiveCBridgeable { - @available(swift, deprecated: 4, renamed: "init(truncating:)") - public init(_ number: __shared NSNumber) { - self = number.floatValue - } - - public init(truncating number: __shared NSNumber) { - self = number.floatValue - } - - public init?(exactly number: __shared NSNumber) { - let type = number.objCType.pointee - if type == 0x49 || type == 0x4c || type == 0x51 { - guard let result = Float(exactly: number.uint64Value) else { return nil } - self = result - } else if type == 0x69 || type == 0x6c || type == 0x71 { - guard let result = Float(exactly: number.int64Value) else { return nil } - self = result - } else { - guard let result = Float(exactly: number.doubleValue) else { return nil } - self = result - } - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNumber { - return NSNumber(value: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNumber, result: inout Float?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout Float?) -> Bool { - if x.floatValue.isNaN { - result = x.floatValue - return true - } - result = Float(exactly: x) - return result != nil - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Float { - var result: Float? - guard let src = source else { return Float(0) } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return Float(0) } - return result! - } -} - -extension Double : _ObjectiveCBridgeable { - @available(swift, deprecated: 4, renamed: "init(truncating:)") - public init(_ number: __shared NSNumber) { - self = number.doubleValue - } - - public init(truncating number: __shared NSNumber) { - self = number.doubleValue - } - - public init?(exactly number: __shared NSNumber) { - let type = number.objCType.pointee - if type == 0x51 { - guard let result = Double(exactly: number.uint64Value) else { return nil } - self = result - } else if type == 0x71 { - guard let result = Double(exactly: number.int64Value) else { return nil } - self = result - } else { - // All other integer types and single-precision floating points will - // fit in a `Double` without truncation. - guard let result = Double(exactly: number.doubleValue) else { return nil } - self = result - } - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNumber { - return NSNumber(value: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNumber, result: inout Double?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout Double?) -> Bool { - if x.doubleValue.isNaN { - result = x.doubleValue - return true - } - result = Double(exactly: x) - return result != nil - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Double { - var result: Double? - guard let src = source else { return Double(0) } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return Double(0) } - return result! - } -} - -extension Bool : _ObjectiveCBridgeable { - @available(swift, deprecated: 4, renamed: "init(truncating:)") - public init(_ number: __shared NSNumber) { - self = number.boolValue - } - - public init(truncating number: __shared NSNumber) { - self = number.boolValue - } - - public init?(exactly number: __shared NSNumber) { - if number === kCFBooleanTrue as NSNumber || NSNumber(value: 1) == number { - self = true - } else if number === kCFBooleanFalse as NSNumber || NSNumber(value: 0) == number { - self = false - } else { - return nil - } - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNumber { - return NSNumber(value: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNumber, result: inout Bool?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout Bool?) -> Bool { - if x === kCFBooleanTrue as NSNumber || NSNumber(value: 1) == x { - result = true - return true - } else if x === kCFBooleanFalse as NSNumber || NSNumber(value: 0) == x { - result = false - return true - } - - return false - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Bool { - var result: Bool? - guard let src = source else { return false } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return false } - return result! - } -} - -extension CGFloat : _ObjectiveCBridgeable { - @available(swift, deprecated: 4, renamed: "init(truncating:)") - public init(_ number: __shared NSNumber) { - self.init(CGFloat.NativeType(truncating: number)) - } - - public init(truncating number: __shared NSNumber) { - self.init(CGFloat.NativeType(truncating: number)) - } - - public init?(exactly number: __shared NSNumber) { - var nativeValue: CGFloat.NativeType? = 0 - guard CGFloat.NativeType._conditionallyBridgeFromObjectiveC(number, result: &nativeValue) else { return nil } - self.init(nativeValue!) - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNumber { - return NSNumber(value: self.native) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNumber, result: inout CGFloat?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout CGFloat?) -> Bool { - var nativeValue: CGFloat.NativeType? = 0 - guard CGFloat.NativeType._conditionallyBridgeFromObjectiveC(x, result: &nativeValue) else { return false } - result = CGFloat(nativeValue!) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> CGFloat { - var result: CGFloat? - guard let src = source else { return CGFloat(0) } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return CGFloat(0) } - return result! - } -} - -// Literal support for NSNumber -extension NSNumber : ExpressibleByFloatLiteral, ExpressibleByIntegerLiteral, ExpressibleByBooleanLiteral { - /// Create an instance initialized to `value`. - @nonobjc - public required convenience init(integerLiteral value: Int) { - self.init(value: value) - } - - /// Create an instance initialized to `value`. - @nonobjc - public required convenience init(floatLiteral value: Double) { - self.init(value: value) - } - - /// Create an instance initialized to `value`. - @nonobjc - public required convenience init(booleanLiteral value: Bool) { - self.init(value: value) - } -} - -extension NSNumber : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to prevent infinite recursion trying to bridge - // AnyHashable to NSObject. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - // The custom AnyHashable representation here is used when checking for - // equality during bridging NSDictionary to Dictionary (or looking up - // values in a Dictionary bridged to NSDictionary). - // - // When we've got NSNumber values as keys that we want to compare - // through an AnyHashable box, we want to compare values through the - // largest box size we've got available to us (i.e. upcast numbers). - // This happens to resemble the representation that NSNumber uses - // internally: (long long | unsigned long long | double). - // - // This allows us to compare things like - // - // ([Int : Any] as [AnyHashable : Any]) vs. [NSNumber : Any] - // - // because Int can be upcast to Int64 and compared with the number's - // Int64 value. - // - // If NSNumber adds 128-bit representations, this will need to be - // updated to use those. - if let nsDecimalNumber: NSDecimalNumber = self as? NSDecimalNumber { - return AnyHashable(nsDecimalNumber.decimalValue) - } else if self === kCFBooleanTrue as NSNumber { - return AnyHashable(true) - } else if self === kCFBooleanFalse as NSNumber { - return AnyHashable(false) - } else if NSNumber(value: int64Value) == self { - return AnyHashable(int64Value) - } else if NSNumber(value: uint64Value) == self { - return AnyHashable(uint64Value) - } else if NSNumber(value: doubleValue) == self { - return AnyHashable(doubleValue) - } else { - return nil - } - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSObject.swift b/Darwin/Foundation-swiftoverlay/NSObject.swift deleted file mode 100644 index e6ad5306bc..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSObject.swift +++ /dev/null @@ -1,313 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2017 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -import ObjectiveC -@_implementationOnly import _FoundationOverlayShims - -// This exists to allow for dynamic dispatch on KVO methods added to NSObject. -// Extending NSObject with these methods would disallow overrides. -public protocol _KeyValueCodingAndObserving {} -extension NSObject : _KeyValueCodingAndObserving {} - -public struct NSKeyValueObservedChange { - public typealias Kind = NSKeyValueChange - public let kind: Kind - ///newValue and oldValue will only be non-nil if .new/.old is passed to `observe()`. In general, get the most up to date value by accessing it directly on the observed object instead. - public let newValue: Value? - public let oldValue: Value? - ///indexes will be nil unless the observed KeyPath refers to an ordered to-many property - public let indexes: IndexSet? - ///'isPrior' will be true if this change observation is being sent before the change happens, due to .prior being passed to `observe()` - public let isPrior:Bool -} - -///Conforming to NSKeyValueObservingCustomization is not required to use Key-Value Observing. Provide an implementation of these functions if you need to disable auto-notifying for a key, or add dependent keys -public protocol NSKeyValueObservingCustomization : NSObjectProtocol { - static func keyPathsAffectingValue(for key: AnyKeyPath) -> Set - static func automaticallyNotifiesObservers(for key: AnyKeyPath) -> Bool -} - -private extension NSObject { - - @objc class func __old_unswizzled_automaticallyNotifiesObservers(forKey key: String?) -> Bool { - fatalError("Should never be reached") - } - - @objc class func __old_unswizzled_keyPathsForValuesAffectingValue(forKey key: String?) -> Set { - fatalError("Should never be reached") - } - -} - -// NOTE: older overlays called this _KVOKeyPathBridgeMachinery. The two -// must coexist, so it was renamed. The old name must not be used in the -// new runtime. -@objc private class __KVOKeyPathBridgeMachinery : NSObject { - @nonobjc static let swizzler: () = { - /* - Move all our methods into place. We want the following: - __KVOKeyPathBridgeMachinery's automaticallyNotifiesObserversForKey:, and keyPathsForValuesAffectingValueForKey: methods replaces NSObject's versions of them - NSObject's automaticallyNotifiesObserversForKey:, and keyPathsForValuesAffectingValueForKey: methods replace NSObject's __old_unswizzled_* methods - NSObject's _old_unswizzled_* methods replace __KVOKeyPathBridgeMachinery's methods, and are never invoked - */ - threeWaySwizzle(#selector(NSObject.keyPathsForValuesAffectingValue(forKey:)), with: #selector(NSObject.__old_unswizzled_keyPathsForValuesAffectingValue(forKey:))) - threeWaySwizzle(#selector(NSObject.automaticallyNotifiesObservers(forKey:)), with: #selector(NSObject.__old_unswizzled_automaticallyNotifiesObservers(forKey:))) - }() - - /// Performs a 3-way swizzle between `NSObject` and `__KVOKeyPathBridgeMachinery`. - /// - /// The end result of this swizzle is the following: - /// * `NSObject.selector` contains the IMP from `__KVOKeyPathBridgeMachinery.selector` - /// * `NSObject.unswizzledSelector` contains the IMP from the original `NSObject.selector`. - /// * __KVOKeyPathBridgeMachinery.selector` contains the (useless) IMP from `NSObject.unswizzledSelector`. - /// - /// This swizzle is done in a manner that modifies `NSObject.selector` last, in order to ensure thread safety - /// (by the time `NSObject.selector` is swizzled, `NSObject.unswizzledSelector` will contain the original IMP) - @nonobjc private static func threeWaySwizzle(_ selector: Selector, with unswizzledSelector: Selector) { - let rootClass: AnyClass = NSObject.self - let bridgeClass: AnyClass = __KVOKeyPathBridgeMachinery.self - - // Swap bridge.selector <-> NSObject.unswizzledSelector - let unswizzledMethod = class_getClassMethod(rootClass, unswizzledSelector)! - let bridgeMethod = class_getClassMethod(bridgeClass, selector)! - method_exchangeImplementations(unswizzledMethod, bridgeMethod) - - // Swap NSObject.selector <-> NSObject.unswizzledSelector - // NSObject.unswizzledSelector at this point contains the bridge IMP - let rootMethod = class_getClassMethod(rootClass, selector)! - method_exchangeImplementations(rootMethod, unswizzledMethod) - } - - private class BridgeKey : NSObject, NSCopying { - let value: String - - init(_ value: String) { - self.value = value - } - - func copy(with zone: NSZone? = nil) -> Any { - return self - } - - override func isEqual(_ object: Any?) -> Bool { - return value == (object as? BridgeKey)?.value - } - - override var hash: Int { - var hasher = Hasher() - hasher.combine(ObjectIdentifier(BridgeKey.self)) - hasher.combine(value) - return hasher.finalize() - } - } - - /// Temporarily maps a `String` to an `AnyKeyPath` that can be retrieved with `_bridgeKeyPath(_:)`. - /// - /// This uses a per-thread storage so key paths on other threads don't interfere. - @nonobjc static func _withBridgeableKeyPath(from keyPathString: String, to keyPath: AnyKeyPath, block: () -> Void) { - _ = __KVOKeyPathBridgeMachinery.swizzler - let key = BridgeKey(keyPathString) - let oldValue = Thread.current.threadDictionary[key] - Thread.current.threadDictionary[key] = keyPath - defer { Thread.current.threadDictionary[key] = oldValue } - block() - } - - @nonobjc static func _bridgeKeyPath(_ keyPath:String?) -> AnyKeyPath? { - guard let keyPath = keyPath else { return nil } - return Thread.current.threadDictionary[BridgeKey(keyPath)] as? AnyKeyPath - } - - @objc override class func automaticallyNotifiesObservers(forKey key: String) -> Bool { - //This is swizzled so that it's -[NSObject automaticallyNotifiesObserversForKey:] - if let customizingSelf = self as? NSKeyValueObservingCustomization.Type, let path = __KVOKeyPathBridgeMachinery._bridgeKeyPath(key) { - return customizingSelf.automaticallyNotifiesObservers(for: path) - } else { - return self.__old_unswizzled_automaticallyNotifiesObservers(forKey: key) //swizzled to be NSObject's original implementation - } - } - - @objc override class func keyPathsForValuesAffectingValue(forKey key: String?) -> Set { - //This is swizzled so that it's -[NSObject keyPathsForValuesAffectingValueForKey:] - if let customizingSelf = self as? NSKeyValueObservingCustomization.Type, let path = __KVOKeyPathBridgeMachinery._bridgeKeyPath(key!) { - let resultSet = customizingSelf.keyPathsAffectingValue(for: path) - return Set(resultSet.lazy.map { - guard let str = $0._kvcKeyPathString else { fatalError("Could not extract a String from KeyPath \($0)") } - return str - }) - } else { - return self.__old_unswizzled_keyPathsForValuesAffectingValue(forKey: key) //swizzled to be NSObject's original implementation - } - } -} - -func _bridgeKeyPathToString(_ keyPath:AnyKeyPath) -> String { - guard let keyPathString = keyPath._kvcKeyPathString else { fatalError("Could not extract a String from KeyPath \(keyPath)") } - return keyPathString -} - -// NOTE: older overlays called this NSKeyValueObservation. We now use -// that name in the source code, but add an underscore to the runtime -// name to avoid conflicts when both are loaded into the same process. -@objc(_NSKeyValueObservation) -public class NSKeyValueObservation : NSObject { - // We use a private helper class as the actual observer. This lets us attach the helper as an associated object - // to the object we're observing, thus ensuring the helper will still be alive whenever a KVO change notification - // is broadcast, even on a background thread. - // - // For the associated object, we use the Helper instance itself as its own key. This guarantees key uniqueness. - private class Helper : NSObject { - @nonobjc weak var object : NSObject? - @nonobjc let path: String - @nonobjc let callback : (NSObject, NSKeyValueObservedChange) -> Void - - // workaround for Erroneous (?) error when using bridging in the Foundation overlay - // specifically, overriding observeValue(forKeyPath:of:change:context:) complains that it's not Obj-C-compatible - @nonobjc static let swizzler: () = { - let cls = NSClassFromString("_NSKVOCompatibility") as? _NSKVOCompatibilityShim.Type - cls?._noteProcessHasUsedKVOSwiftOverlay() - - let bridgeClass: AnyClass = Helper.self - let observeSel = #selector(NSObject.observeValue(forKeyPath:of:change:context:)) - let swapSel = #selector(Helper._swizzle_me_observeValue(forKeyPath:of:change:context:)) - let swapObserveMethod = class_getInstanceMethod(bridgeClass, swapSel)! - class_addMethod(bridgeClass, observeSel, method_getImplementation(swapObserveMethod), method_getTypeEncoding(swapObserveMethod)) - }() - - @nonobjc init(object: NSObject, keyPath: AnyKeyPath, options: NSKeyValueObservingOptions, callback: @escaping (NSObject, NSKeyValueObservedChange) -> Void) { - _ = Helper.swizzler - let path = _bridgeKeyPathToString(keyPath) - self.object = object - self.path = path - self.callback = callback - super.init() - objc_setAssociatedObject(object, associationKey(), self, .OBJC_ASSOCIATION_RETAIN) - __KVOKeyPathBridgeMachinery._withBridgeableKeyPath(from: path, to: keyPath) { - object.addObserver(self, forKeyPath: path, options: options, context: nil) - } - } - - @nonobjc func invalidate() { - guard let object = self.object else { return } - object.removeObserver(self, forKeyPath: path, context: nil) - objc_setAssociatedObject(object, associationKey(), nil, .OBJC_ASSOCIATION_ASSIGN) - self.object = nil - } - - @nonobjc private func associationKey() -> UnsafeRawPointer { - return UnsafeRawPointer(Unmanaged.passUnretained(self).toOpaque()) - } - - @objc private func _swizzle_me_observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSString : Any]?, context: UnsafeMutableRawPointer?) { - guard let object = object as? NSObject, object === self.object, let change = change else { return } - let rawKind:UInt = change[NSKeyValueChangeKey.kindKey.rawValue as NSString] as! UInt - let kind = NSKeyValueChange(rawValue: rawKind)! - let notification = NSKeyValueObservedChange(kind: kind, - newValue: change[NSKeyValueChangeKey.newKey.rawValue as NSString], - oldValue: change[NSKeyValueChangeKey.oldKey.rawValue as NSString], - indexes: change[NSKeyValueChangeKey.indexesKey.rawValue as NSString] as! IndexSet?, - isPrior: change[NSKeyValueChangeKey.notificationIsPriorKey.rawValue as NSString] as? Bool ?? false) - callback(object, notification) - } - } - - @nonobjc private let helper: Helper - - fileprivate init(object: NSObject, keyPath: AnyKeyPath, options: NSKeyValueObservingOptions, callback: @escaping (NSObject, NSKeyValueObservedChange) -> Void) { - helper = Helper(object: object, keyPath: keyPath, options: options, callback: callback) - } - - ///invalidate() will be called automatically when an NSKeyValueObservation is deinited - @objc public func invalidate() { - helper.invalidate() - } - - deinit { - invalidate() - } -} - -// Used for type-erase Optional type -private protocol _OptionalForKVO { - static func _castForKVO(_ value: Any) -> Any? -} - -extension Optional: _OptionalForKVO { - static func _castForKVO(_ value: Any) -> Any? { - return value as? Wrapped - } -} - -extension _KeyValueCodingAndObserving { - - ///when the returned NSKeyValueObservation is deinited or invalidated, it will stop observing - public func observe( - _ keyPath: KeyPath, - options: NSKeyValueObservingOptions = [], - changeHandler: @escaping (Self, NSKeyValueObservedChange) -> Void) - -> NSKeyValueObservation { - return NSKeyValueObservation(object: self as! NSObject, keyPath: keyPath, options: options) { (obj, change) in - - let converter = { (changeValue: Any?) -> Value? in - if let optionalType = Value.self as? _OptionalForKVO.Type { - // Special logic for keyPath having a optional target value. When the keyPath referencing a nil value, the newValue/oldValue should be in the form .some(nil) instead of .none - // Solve https://bugs.swift.org/browse/SR-6066 - - // NSNull is used by KVO to signal that the keyPath value is nil. - // If Value == Optional.self, We will get nil instead of .some(nil) when casting Optional() directly. - // To fix this behavior, we will eliminate NSNull first, then cast the transformed value. - - if let unwrapped = changeValue { - // We use _castForKVO to cast first. - // If Value != Optional.self, the NSNull value will be eliminated. - let nullEliminatedValue = optionalType._castForKVO(unwrapped) as Any - let transformedOptional: Any? = nullEliminatedValue - return transformedOptional as? Value - } - } - return changeValue as? Value - } - - let notification = NSKeyValueObservedChange(kind: change.kind, - newValue: converter(change.newValue), - oldValue: converter(change.oldValue), - indexes: change.indexes, - isPrior: change.isPrior) - changeHandler(obj as! Self, notification) - } - } - - public func willChangeValue(for keyPath: __owned KeyPath) { - (self as! NSObject).willChangeValue(forKey: _bridgeKeyPathToString(keyPath)) - } - - public func willChange(_ changeKind: NSKeyValueChange, valuesAt indexes: IndexSet, for keyPath: __owned KeyPath) { - (self as! NSObject).willChange(changeKind, valuesAt: indexes, forKey: _bridgeKeyPathToString(keyPath)) - } - - public func willChangeValue(for keyPath: __owned KeyPath, withSetMutation mutation: NSKeyValueSetMutationKind, using set: Set) -> Void { - (self as! NSObject).willChangeValue(forKey: _bridgeKeyPathToString(keyPath), withSetMutation: mutation, using: set) - } - - public func didChangeValue(for keyPath: __owned KeyPath) { - (self as! NSObject).didChangeValue(forKey: _bridgeKeyPathToString(keyPath)) - } - - public func didChange(_ changeKind: NSKeyValueChange, valuesAt indexes: IndexSet, for keyPath: __owned KeyPath) { - (self as! NSObject).didChange(changeKind, valuesAt: indexes, forKey: _bridgeKeyPathToString(keyPath)) - } - - public func didChangeValue(for keyPath: __owned KeyPath, withSetMutation mutation: NSKeyValueSetMutationKind, using set: Set) -> Void { - (self as! NSObject).didChangeValue(forKey: _bridgeKeyPathToString(keyPath), withSetMutation: mutation, using: set) - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSOrderedCollectionDifference.swift b/Darwin/Foundation-swiftoverlay/NSOrderedCollectionDifference.swift deleted file mode 100644 index 7258cbe82e..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSOrderedCollectionDifference.swift +++ /dev/null @@ -1,106 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -// CollectionDifference.Change is conditionally bridged to NSOrderedCollectionChange -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) -extension CollectionDifference.Change : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSOrderedCollectionChange { - switch self { - case .insert(offset: let o, element: let e, associatedWith: let a): - return NSOrderedCollectionChange(object: e, type: .insert, index: o, associatedIndex: a ?? NSNotFound) - case .remove(offset: let o, element: let e, associatedWith: let a): - return NSOrderedCollectionChange(object: e, type: .remove, index: o, associatedIndex: a ?? NSNotFound) - } - } - - public static func _forceBridgeFromObjectiveC(_ input: NSOrderedCollectionChange, result: inout CollectionDifference.Change?) { - let _ = input.object as! ChangeElement - - if !_conditionallyBridgeFromObjectiveC(input, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC( - _ x: NSOrderedCollectionChange, result: inout CollectionDifference.Change? - ) -> Bool { - guard let element = x.object as? ChangeElement else { return false } - - let a: Int? - if x.associatedIndex == NSNotFound { - a = nil - } else { - a = x.associatedIndex - } - - switch x.changeType { - case .insert: - result = .insert(offset: x.index, element: element, associatedWith: a) - case .remove: - result = .remove(offset: x.index, element: element, associatedWith: a) - default: - return false - } - - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ s: NSOrderedCollectionChange?) -> CollectionDifference.Change { - var result: CollectionDifference.Change? = nil - CollectionDifference.Change._forceBridgeFromObjectiveC(s!, result: &result) - return result! - } -} - -// CollectionDifference is conditionally bridged to NSOrderedCollectionDifference -@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) -extension CollectionDifference : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSOrderedCollectionDifference { - return NSOrderedCollectionDifference(changes: self.map({ $0 as NSOrderedCollectionChange })) - } - - public static func _forceBridgeFromObjectiveC(_ input: NSOrderedCollectionDifference, result: inout CollectionDifference?) { - if !_conditionallyBridgeFromObjectiveC(input, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - private static func _formDifference( - from input: NSOrderedCollectionDifference, - _ changeConverter: (Any) -> CollectionDifference.Change? - ) -> CollectionDifference? { - var changes = Array() - let iteratorSeq = IteratorSequence(NSFastEnumerationIterator(input)) - for objc_change in iteratorSeq { - guard let swift_change = changeConverter(objc_change) else { return nil } - changes.append(swift_change) - } - return CollectionDifference(changes) - } - - public static func _conditionallyBridgeFromObjectiveC( - _ input: NSOrderedCollectionDifference, result: inout CollectionDifference? - ) -> Bool { - result = _formDifference(from: input) { $0 as? Change } - return result != nil - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ s: NSOrderedCollectionDifference?) -> CollectionDifference { - return _formDifference(from: s!) { ($0 as! Change) }! - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSPredicate.swift b/Darwin/Foundation-swiftoverlay/NSPredicate.swift deleted file mode 100644 index e08926f839..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSPredicate.swift +++ /dev/null @@ -1,22 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -extension NSPredicate { - // + (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat, ...; - public - convenience init(format predicateFormat: __shared String, _ args: CVarArg...) { - let va_args = getVaList(args) - self.init(format: predicateFormat, arguments: va_args) - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSRange.swift b/Darwin/Foundation-swiftoverlay/NSRange.swift deleted file mode 100644 index 97c6236d48..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSRange.swift +++ /dev/null @@ -1,249 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -extension NSRange : Hashable { - public func hash(into hasher: inout Hasher) { - hasher.combine(location) - hasher.combine(length) - } - - public static func==(lhs: NSRange, rhs: NSRange) -> Bool { - return lhs.location == rhs.location && lhs.length == rhs.length - } -} - -extension NSRange : CustomStringConvertible, CustomDebugStringConvertible { - public var description: String { return "{\(location), \(length)}" } - public var debugDescription: String { - guard location != NSNotFound else { - return "{NSNotFound, \(length)}" - } - return "{\(location), \(length)}" - } -} - -extension NSRange { - public init?(_ string: __shared String) { - var savedLocation = 0 - if string.isEmpty { - // fail early if the string is empty - return nil - } - let scanner = Scanner(string: string) - let digitSet = CharacterSet.decimalDigits - let _ = scanner.scanUpToCharacters(from: digitSet, into: nil) - if scanner.isAtEnd { - // fail early if there are no decimal digits - return nil - } - var location = 0 - savedLocation = scanner.scanLocation - guard scanner.scanInt(&location) else { - return nil - } - if scanner.isAtEnd { - // return early if there are no more characters after the first int in the string - return nil - } - if scanner.scanString(".", into: nil) { - scanner.scanLocation = savedLocation - var double = 0.0 - guard scanner.scanDouble(&double) else { - return nil - } - guard let integral = Int(exactly: double) else { - return nil - } - location = integral - } - - let _ = scanner.scanUpToCharacters(from: digitSet, into: nil) - if scanner.isAtEnd { - // return early if there are no integer characters after the first int in the string - return nil - } - var length = 0 - savedLocation = scanner.scanLocation - guard scanner.scanInt(&length) else { - return nil - } - - if !scanner.isAtEnd { - if scanner.scanString(".", into: nil) { - scanner.scanLocation = savedLocation - var double = 0.0 - guard scanner.scanDouble(&double) else { - return nil - } - guard let integral = Int(exactly: double) else { - return nil - } - length = integral - } - } - - - self.init(location: location, length: length) - } -} - -extension NSRange { - public var lowerBound: Int { return location } - - public var upperBound: Int { return location + length } - - public func contains(_ index: Int) -> Bool { return (!(index < location) && (index - location) < length) } - - public mutating func formUnion(_ other: NSRange) { - self = union(other) - } - - public func union(_ other: NSRange) -> NSRange { - let max1 = location + length - let max2 = other.location + other.length - let maxend = (max1 < max2) ? max2 : max1 - let minloc = location < other.location ? location : other.location - return NSRange(location: minloc, length: maxend - minloc) - } - - public func intersection(_ other: NSRange) -> NSRange? { - let max1 = location + length - let max2 = other.location + other.length - let minend = (max1 < max2) ? max1 : max2 - if other.location <= location && location < max2 { - return NSRange(location: location, length: minend - location) - } else if location <= other.location && other.location < max1 { - return NSRange(location: other.location, length: minend - other.location); - } - return nil - } -} - - -//===----------------------------------------------------------------------===// -// Ranges -//===----------------------------------------------------------------------===// - -extension NSRange { - public init(_ region: R) - where R.Bound: FixedWidthInteger { - let r = region.relative(to: 0..(_ region: R, in target: S) - where R.Bound == S.Index { - let r = region.relative(to: target) - self.init(target._toUTF16Offsets(r)) - } - - @available(swift, deprecated: 4, renamed: "Range.init(_:)") - public func toRange() -> Range? { - if location == NSNotFound { return nil } - return location..<(location+length) - } -} - -extension Range where Bound: BinaryInteger { - public init?(_ range: NSRange) { - guard range.location != NSNotFound else { return nil } - self.init(uncheckedBounds: (numericCast(range.lowerBound), numericCast(range.upperBound))) - } -} - -// This additional overload will mean Range.init(_:) defaults to Range when -// no additional type context is provided: -extension Range where Bound == Int { - public init?(_ range: NSRange) { - guard range.location != NSNotFound else { return nil } - self.init(uncheckedBounds: (range.lowerBound, range.upperBound)) - } -} - -extension Range where Bound == String.Index { - private init?( - _ range: NSRange, _genericIn string: __shared S - ) { - // Corresponding stdlib version - guard #available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) else { - fatalError() - } - let u = string.utf16 - guard range.location != NSNotFound, - let start = u.index( - u.startIndex, offsetBy: range.location, limitedBy: u.endIndex), - let end = u.index( - start, offsetBy: range.length, limitedBy: u.endIndex), - let lowerBound = String.Index(start, within: string), - let upperBound = String.Index(end, within: string) - else { return nil } - - self = lowerBound..(_ range: NSRange, in string: __shared S) { - self.init(range, _genericIn: string) - } -} - -extension NSRange : CustomReflectable { - public var customMirror: Mirror { - return Mirror(self, children: ["location": location, "length": length]) - } -} - -extension NSRange : _CustomPlaygroundQuickLookable { - @available(*, deprecated, message: "NSRange.customPlaygroundQuickLook will be removed in a future Swift version") - public var customPlaygroundQuickLook: PlaygroundQuickLook { - return .range(Int64(location), Int64(length)) - } -} - -extension NSRange : Codable { - public init(from decoder: Decoder) throws { - var container = try decoder.unkeyedContainer() - let location = try container.decode(Int.self) - let length = try container.decode(Int.self) - self.init(location: location, length: length) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.unkeyedContainer() - try container.encode(self.location) - try container.encode(self.length) - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSSet.swift b/Darwin/Foundation-swiftoverlay/NSSet.swift deleted file mode 100644 index dbe08e4098..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSSet.swift +++ /dev/null @@ -1,195 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -extension Set { - /// Private initializer used for bridging. - /// - /// The provided `NSSet` will be copied to ensure that the copy can - /// not be mutated by other code. - private init(_cocoaSet: __shared NSSet) { - assert(_isBridgedVerbatimToObjectiveC(Element.self), - "Set can be backed by NSSet _variantStorage only when the member type can be bridged verbatim to Objective-C") - // FIXME: We would like to call CFSetCreateCopy() to avoid doing an - // objc_msgSend() for instances of CoreFoundation types. We can't do that - // today because CFSetCreateCopy() copies dictionary contents - // unconditionally, resulting in O(n) copies even for immutable dictionaries. - // - // CFSetCreateCopy() does not call copyWithZone: - // - // The bug is fixed in: OS X 10.11.0, iOS 9.0, all versions of tvOS - // and watchOS. - self = Set(_immutableCocoaSet: _cocoaSet.copy(with: nil) as AnyObject) - } -} - -extension NSSet : Sequence { - /// Return an *iterator* over the elements of this *sequence*. - /// - /// - Complexity: O(1). - public func makeIterator() -> NSFastEnumerationIterator { - return NSFastEnumerationIterator(self) - } -} - -extension NSOrderedSet : Sequence { - /// Return an *iterator* over the elements of this *sequence*. - /// - /// - Complexity: O(1). - public func makeIterator() -> NSFastEnumerationIterator { - return NSFastEnumerationIterator(self) - } -} - -// Set is conditionally bridged to NSSet -extension Set : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSSet { - return unsafeBitCast(_bridgeToObjectiveCImpl(), to: NSSet.self) - } - - public static func _forceBridgeFromObjectiveC(_ s: NSSet, result: inout Set?) { - if let native = - Set._bridgeFromObjectiveCAdoptingNativeStorageOf(s as AnyObject) { - - result = native - return - } - - if _isBridgedVerbatimToObjectiveC(Element.self) { - result = Set(_cocoaSet: s) - return - } - - if Element.self == String.self { - // String and NSString have different concepts of equality, so - // string-keyed NSSets may generate key collisions when bridged over to - // Swift. See rdar://problem/35995647 - var set = Set(minimumCapacity: s.count) - s.enumerateObjects({ (anyMember: Any, _) in - // FIXME: Log a warning if `member` is already in the set. - set.insert(anyMember as! Element) - }) - result = set - return - } - - // `Set` where `Element` is a value type may not be backed by - // an NSSet. - var builder = _SetBuilder(count: s.count) - s.enumerateObjects({ (anyMember: Any, _) in - builder.add(member: anyMember as! Element) - }) - result = builder.take() - } - - public static func _conditionallyBridgeFromObjectiveC( - _ x: NSSet, result: inout Set? - ) -> Bool { - let anySet = x as Set - if _isBridgedVerbatimToObjectiveC(Element.self) { - result = Swift._setDownCastConditional(anySet) - return result != nil - } - - result = anySet as? Set - return result != nil - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ s: NSSet?) -> Set { - // `nil` has historically been used as a stand-in for an empty - // set; map it to an empty set. - if _slowPath(s == nil) { return Set() } - - var result: Set? = nil - Set._forceBridgeFromObjectiveC(s!, result: &result) - return result! - } -} - -extension NSSet : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as! Set) - } -} - -extension NSOrderedSet { - // - (instancetype)initWithObjects:(id)firstObj, ... - public convenience init(objects elements: Any...) { - self.init(array: elements) - } -} - -extension NSSet { - // - (instancetype)initWithObjects:(id)firstObj, ... - public convenience init(objects elements: Any...) { - self.init(array: elements) - } -} - -extension NSSet : ExpressibleByArrayLiteral { - public required convenience init(arrayLiteral elements: Any...) { - self.init(array: elements) - } -} - -extension NSOrderedSet : ExpressibleByArrayLiteral { - public required convenience init(arrayLiteral elements: Any...) { - self.init(array: elements) - } -} - -extension NSSet { - /// Initializes a newly allocated set and adds to it objects from - /// another given set. - /// - /// - Returns: An initialized objects set containing the objects from - /// `set`. The returned set might be different than the original - /// receiver. - @nonobjc - public convenience init(set anSet: __shared NSSet) { - // FIXME(performance)(compiler limitation): we actually want to do just - // `self = anSet.copy()`, but Swift does not have factory - // initializers right now. - let numElems = anSet.count - let stride = MemoryLayout>.stride - let alignment = MemoryLayout>.alignment - let bufferSize = stride * numElems - assert(stride == MemoryLayout.stride) - assert(alignment == MemoryLayout.alignment) - - let rawBuffer = UnsafeMutableRawPointer.allocate( - byteCount: bufferSize, alignment: alignment) - defer { - rawBuffer.deallocate() - _fixLifetime(anSet) - } - let valueBuffer = rawBuffer.bindMemory( - to: Optional.self, capacity: numElems) - - CFSetGetValues(anSet, valueBuffer) - let valueBufferForInit = rawBuffer.assumingMemoryBound(to: AnyObject.self) - self.init(objects: valueBufferForInit, count: numElems) - } -} - -extension NSSet : CustomReflectable { - public var customMirror: Mirror { - return Mirror(reflecting: self as Set) - } -} - -extension Set: CVarArg {} diff --git a/Darwin/Foundation-swiftoverlay/NSSortDescriptor.swift b/Darwin/Foundation-swiftoverlay/NSSortDescriptor.swift deleted file mode 100644 index 93b81ee2fa..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSSortDescriptor.swift +++ /dev/null @@ -1,32 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2017 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -import ObjectiveC - -extension NSSortDescriptor { - public convenience init(keyPath: KeyPath, ascending: Bool) { - self.init(key: _bridgeKeyPathToString(keyPath), ascending: ascending) - objc_setAssociatedObject(self, UnsafeRawPointer(&associationKey), keyPath, .OBJC_ASSOCIATION_RETAIN) - } - - public convenience init(keyPath: KeyPath, ascending: Bool, comparator cmptr: @escaping Foundation.Comparator) { - self.init(key: _bridgeKeyPathToString(keyPath), ascending: ascending, comparator: cmptr) - objc_setAssociatedObject(self, UnsafeRawPointer(&associationKey), keyPath, .OBJC_ASSOCIATION_RETAIN) - } - - public var keyPath: AnyKeyPath? { - return objc_getAssociatedObject(self, UnsafeRawPointer(&associationKey)) as? AnyKeyPath - } -} - -private var associationKey: ()? diff --git a/Darwin/Foundation-swiftoverlay/NSString.swift b/Darwin/Foundation-swiftoverlay/NSString.swift deleted file mode 100644 index c8bffd0353..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSString.swift +++ /dev/null @@ -1,109 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -//===----------------------------------------------------------------------===// -// Strings -//===----------------------------------------------------------------------===// - -extension NSString : ExpressibleByStringLiteral { - /// Create an instance initialized to `value`. - public required convenience init(stringLiteral value: StaticString) { - var immutableResult: NSString - if value.hasPointerRepresentation { - immutableResult = NSString( - bytesNoCopy: UnsafeMutableRawPointer(mutating: value.utf8Start), - length: Int(value.utf8CodeUnitCount), - encoding: value.isASCII ? String.Encoding.ascii.rawValue : String.Encoding.utf8.rawValue, - freeWhenDone: false)! - } else { - var uintValue = value.unicodeScalar - immutableResult = NSString( - bytes: &uintValue, - length: 4, - encoding: String.Encoding.utf32.rawValue)! - } - self.init(string: immutableResult as String) - } -} - -extension NSString : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to prevent infinite recursion trying to bridge - // AnyHashable to NSObject. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - // Consistently use Swift equality and hashing semantics for all strings. - return AnyHashable(self as String) - } -} - -extension NSString { - public convenience init(format: __shared NSString, _ args: CVarArg...) { - // We can't use withVaList because 'self' cannot be captured by a closure - // before it has been initialized. - let va_args = getVaList(args) - self.init(format: format as String, arguments: va_args) - } - - public convenience init( - format: __shared NSString, locale: Locale?, _ args: CVarArg... - ) { - // We can't use withVaList because 'self' cannot be captured by a closure - // before it has been initialized. - let va_args = getVaList(args) - self.init(format: format as String, locale: locale, arguments: va_args) - } - - public class func localizedStringWithFormat( - _ format: NSString, _ args: CVarArg... - ) -> Self { - return withVaList(args) { - self.init(format: format as String, locale: Locale.current, arguments: $0) - } - } - - public func appendingFormat(_ format: NSString, _ args: CVarArg...) - -> NSString { - return withVaList(args) { - self.appending(NSString(format: format as String, arguments: $0) as String) as NSString - } - } -} - -extension NSMutableString { - public func appendFormat(_ format: NSString, _ args: CVarArg...) { - return withVaList(args) { - self.append(NSString(format: format as String, arguments: $0) as String) - } - } -} - -extension NSString { - /// Returns an `NSString` object initialized by copying the characters - /// from another given string. - /// - /// - Returns: An `NSString` object initialized by copying the - /// characters from `aString`. The returned object may be different - /// from the original receiver. - @nonobjc - public convenience init(string aString: __shared NSString) { - self.init(string: aString as String) - } -} - -extension NSString : _CustomPlaygroundQuickLookable { - @available(*, deprecated, message: "NSString.customPlaygroundQuickLook will be removed in a future Swift version") - public var customPlaygroundQuickLook: PlaygroundQuickLook { - return .text(self as String) - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSStringAPI.swift b/Darwin/Foundation-swiftoverlay/NSStringAPI.swift deleted file mode 100644 index a5e6457f22..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSStringAPI.swift +++ /dev/null @@ -1,2215 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// -// -// Exposing the API of NSString on Swift's String -// -//===----------------------------------------------------------------------===// - -// Important Note -// ============== -// -// This file is shared between two projects: -// -// 1. https://github.com/apple/swift/tree/main/stdlib/public/Darwin/Foundation -// 2. https://github.com/apple/swift-corelibs-foundation/tree/main/Foundation -// -// If you change this file, you must update it in both places. - -#if !DEPLOYMENT_RUNTIME_SWIFT -@_exported import Foundation // Clang module -#endif - -// Open Issues -// =========== -// -// Property Lists need to be properly bridged -// - -func _toNSArray(_ a: [T], f: (T) -> U) -> NSArray { - let result = NSMutableArray(capacity: a.count) - for s in a { - result.add(f(s)) - } - return result -} - -#if !DEPLOYMENT_RUNTIME_SWIFT -// We only need this for UnsafeMutablePointer, but there's not currently a way -// to write that constraint. -extension Optional { - /// Invokes `body` with `nil` if `self` is `nil`; otherwise, passes the - /// address of `object` to `body`. - /// - /// This is intended for use with Foundation APIs that return an Objective-C - /// type via out-parameter where it is important to be able to *ignore* that - /// parameter by passing `nil`. (For some APIs, this may allow the - /// implementation to avoid some work.) - /// - /// In most cases it would be simpler to just write this code inline, but if - /// `body` is complicated than that results in unnecessarily repeated code. - internal func _withNilOrAddress( - of object: inout NSType?, - _ body: - (AutoreleasingUnsafeMutablePointer?) -> ResultType - ) -> ResultType { - return self == nil ? body(nil) : body(&object) - } -} -#endif - -/// From a non-`nil` `UnsafePointer` to a null-terminated string -/// with possibly-transient lifetime, create a null-terminated array of 'C' char. -/// Returns `nil` if passed a null pointer. -internal func _persistCString(_ p: UnsafePointer?) -> [CChar]? { - guard let cString = p else { - return nil - } - let bytesToCopy = UTF8._nullCodeUnitOffset(in: cString) + 1 // +1 for the terminating NUL - let result = [CChar](unsafeUninitializedCapacity: bytesToCopy) { buffer, initializedCount in - buffer.baseAddress!.initialize(from: cString, count: bytesToCopy) - initializedCount = bytesToCopy - } - return result -} - -extension String { - //===--- Class Methods --------------------------------------------------===// - //===--------------------------------------------------------------------===// - - // @property (class) const NSStringEncoding *availableStringEncodings; - - /// An array of the encodings that strings support in the application's - /// environment. - public static var availableStringEncodings: [Encoding] { - var result = [Encoding]() - var p = NSString.availableStringEncodings - while p.pointee != 0 { - result.append(Encoding(rawValue: p.pointee)) - p += 1 - } - return result - } - - // @property (class) NSStringEncoding defaultCStringEncoding; - - /// The C-string encoding assumed for any method accepting a C string as an - /// argument. - public static var defaultCStringEncoding: Encoding { - return Encoding(rawValue: NSString.defaultCStringEncoding) - } - - // + (NSString *)localizedNameOfStringEncoding:(NSStringEncoding)encoding - - /// Returns a human-readable string giving the name of the specified encoding. - /// - /// - Parameter encoding: A string encoding. For possible values, see - /// `String.Encoding`. - /// - Returns: A human-readable string giving the name of `encoding` in the - /// current locale. - public static func localizedName( - of encoding: Encoding - ) -> String { - return NSString.localizedName(of: encoding.rawValue) - } - - // + (instancetype)localizedStringWithFormat:(NSString *)format, ... - - /// Returns a string created by using a given format string as a - /// template into which the remaining argument values are substituted - /// according to the user's default locale. - public static func localizedStringWithFormat( - _ format: String, _ arguments: CVarArg... - ) -> String { - return String(format: format, locale: Locale.current, - arguments: arguments) - } - - //===--------------------------------------------------------------------===// - // NSString factory functions that have a corresponding constructor - // are omitted. - // - // + (instancetype)string - // - // + (instancetype) - // stringWithCharacters:(const unichar *)chars length:(NSUInteger)length - // - // + (instancetype)stringWithFormat:(NSString *)format, ... - // - // + (instancetype) - // stringWithContentsOfFile:(NSString *)path - // encoding:(NSStringEncoding)enc - // error:(NSError **)error - // - // + (instancetype) - // stringWithContentsOfFile:(NSString *)path - // usedEncoding:(NSStringEncoding *)enc - // error:(NSError **)error - // - // + (instancetype) - // stringWithContentsOfURL:(NSURL *)url - // encoding:(NSStringEncoding)enc - // error:(NSError **)error - // - // + (instancetype) - // stringWithContentsOfURL:(NSURL *)url - // usedEncoding:(NSStringEncoding *)enc - // error:(NSError **)error - // - // + (instancetype) - // stringWithCString:(const char *)cString - // encoding:(NSStringEncoding)enc - //===--------------------------------------------------------------------===// - - //===--- Adds nothing for String beyond what String(s) does -------------===// - // + (instancetype)stringWithString:(NSString *)aString - //===--------------------------------------------------------------------===// - - // + (instancetype)stringWithUTF8String:(const char *)bytes - - /// Creates a string by copying the data from a given - /// C array of UTF8-encoded bytes. - public init?(utf8String bytes: UnsafePointer) { - if let str = String(validatingUTF8: bytes) { - self = str - return - } - if let ns = NSString(utf8String: bytes) { - self = String._unconditionallyBridgeFromObjectiveC(ns) - } else { - return nil - } - } -} - -extension String { - //===--- Already provided by String's core ------------------------------===// - // - (instancetype)init - - //===--- Initializers that can fail -------------------------------------===// - // - (instancetype) - // initWithBytes:(const void *)bytes - // length:(NSUInteger)length - // encoding:(NSStringEncoding)encoding - - /// Creates a new string equivalent to the given bytes interpreted in the - /// specified encoding. - /// - /// - Parameters: - /// - bytes: A sequence of bytes to interpret using `encoding`. - /// - encoding: The encoding to use to interpret `bytes`. - public init?(bytes: __shared S, encoding: Encoding) - where S.Iterator.Element == UInt8 { - if encoding == .utf8 { - if let str = bytes.withContiguousStorageIfAvailable({ String._tryFromUTF8($0) }) { - guard let str else { - return nil - } - self = str - } else { - let byteArray = Array(bytes) - guard let str = byteArray.withUnsafeBufferPointer({ String._tryFromUTF8($0) }) else { - return nil - } - self = str - } - return - } - - let byteArray = Array(bytes) - if let ns = NSString( - bytes: byteArray, length: byteArray.count, encoding: encoding.rawValue) { - self = String._unconditionallyBridgeFromObjectiveC(ns) - } else { - return nil - } - } - - // - (instancetype) - // initWithBytesNoCopy:(void *)bytes - // length:(NSUInteger)length - // encoding:(NSStringEncoding)encoding - // freeWhenDone:(BOOL)flag - - /// Creates a new string that contains the specified number of bytes from the - /// given buffer, interpreted in the specified encoding, and optionally - /// frees the buffer. - /// - /// - Warning: This initializer is not memory-safe! - public init?( - bytesNoCopy bytes: UnsafeMutableRawPointer, length: Int, - encoding: Encoding, freeWhenDone flag: Bool - ) { - if let ns = NSString( - bytesNoCopy: bytes, length: length, encoding: encoding.rawValue, - freeWhenDone: flag) { - - self = String._unconditionallyBridgeFromObjectiveC(ns) - } else { - return nil - } - } - - - // - (instancetype) - // initWithCharacters:(const unichar *)characters - // length:(NSUInteger)length - - /// Creates a new string that contains the specified number of characters - /// from the given C array of Unicode characters. - public init( - utf16CodeUnits: UnsafePointer, - count: Int - ) { - self = String._unconditionallyBridgeFromObjectiveC(NSString(characters: utf16CodeUnits, length: count)) - } - - // - (instancetype) - // initWithCharactersNoCopy:(unichar *)characters - // length:(NSUInteger)length - // freeWhenDone:(BOOL)flag - - /// Creates a new string that contains the specified number of characters - /// from the given C array of UTF-16 code units. - public init( - utf16CodeUnitsNoCopy: UnsafePointer, - count: Int, - freeWhenDone flag: Bool - ) { - self = String._unconditionallyBridgeFromObjectiveC(NSString( - charactersNoCopy: UnsafeMutablePointer(mutating: utf16CodeUnitsNoCopy), - length: count, - freeWhenDone: flag)) - } - - //===--- Initializers that can fail -------------------------------------===// - - // - (instancetype) - // initWithContentsOfFile:(NSString *)path - // encoding:(NSStringEncoding)enc - // error:(NSError **)error - // - - /// Produces a string created by reading data from the file at a - /// given path interpreted using a given encoding. - public init( - contentsOfFile path: __shared String, - encoding enc: Encoding - ) throws { - let ns = try NSString(contentsOfFile: path, encoding: enc.rawValue) - self = String._unconditionallyBridgeFromObjectiveC(ns) - } - - // - (instancetype) - // initWithContentsOfFile:(NSString *)path - // usedEncoding:(NSStringEncoding *)enc - // error:(NSError **)error - - /// Produces a string created by reading data from the file at - /// a given path and returns by reference the encoding used to - /// interpret the file. - public init( - contentsOfFile path: __shared String, - usedEncoding: inout Encoding - ) throws { - var enc: UInt = 0 - let ns = try NSString(contentsOfFile: path, usedEncoding: &enc) - usedEncoding = Encoding(rawValue: enc) - self = String._unconditionallyBridgeFromObjectiveC(ns) - } - - public init( - contentsOfFile path: __shared String - ) throws { - let ns = try NSString(contentsOfFile: path, usedEncoding: nil) - self = String._unconditionallyBridgeFromObjectiveC(ns) - } - - // - (instancetype) - // initWithContentsOfURL:(NSURL *)url - // encoding:(NSStringEncoding)enc - // error:(NSError**)error - - /// Produces a string created by reading data from a given URL - /// interpreted using a given encoding. Errors are written into the - /// inout `error` argument. - public init( - contentsOf url: __shared URL, - encoding enc: Encoding - ) throws { - let ns = try NSString(contentsOf: url, encoding: enc.rawValue) - self = String._unconditionallyBridgeFromObjectiveC(ns) - } - - // - (instancetype) - // initWithContentsOfURL:(NSURL *)url - // usedEncoding:(NSStringEncoding *)enc - // error:(NSError **)error - - /// Produces a string created by reading data from a given URL - /// and returns by reference the encoding used to interpret the - /// data. Errors are written into the inout `error` argument. - public init( - contentsOf url: __shared URL, - usedEncoding: inout Encoding - ) throws { - var enc: UInt = 0 - let ns = try NSString(contentsOf: url, usedEncoding: &enc) - usedEncoding = Encoding(rawValue: enc) - self = String._unconditionallyBridgeFromObjectiveC(ns) - } - - public init( - contentsOf url: __shared URL - ) throws { - let ns = try NSString(contentsOf: url, usedEncoding: nil) - self = String._unconditionallyBridgeFromObjectiveC(ns) - } - - // - (instancetype) - // initWithCString:(const char *)nullTerminatedCString - // encoding:(NSStringEncoding)encoding - - /// Produces a string containing the bytes in a given C array, - /// interpreted according to a given encoding. - public init?( - cString: UnsafePointer, - encoding enc: Encoding - ) { - if enc == .utf8, let str = String(validatingUTF8: cString) { - self = str - return - } - if let ns = NSString(cString: cString, encoding: enc.rawValue) { - self = String._unconditionallyBridgeFromObjectiveC(ns) - } else { - return nil - } - } - - // FIXME: handle optional locale with default arguments - - // - (instancetype) - // initWithData:(NSData *)data - // encoding:(NSStringEncoding)encoding - - /// Returns a `String` initialized by converting given `data` into - /// Unicode characters using a given `encoding`. - public init?(data: __shared Data, encoding: Encoding) { - if encoding == .utf8, - let str = data.withUnsafeBytes({ - String._tryFromUTF8($0.bindMemory(to: UInt8.self)) - }) { - self = str - return - } - - guard let s = NSString(data: data, encoding: encoding.rawValue) else { return nil } - self = String._unconditionallyBridgeFromObjectiveC(s) - } - - // - (instancetype)initWithFormat:(NSString *)format, ... - - /// Returns a `String` object initialized by using a given - /// format string as a template into which the remaining argument - /// values are substituted. - public init(format: __shared String, _ arguments: CVarArg...) { - self = String(format: format, arguments: arguments) - } - - // - (instancetype) - // initWithFormat:(NSString *)format - // arguments:(va_list)argList - - /// Returns a `String` object initialized by using a given - /// format string as a template into which the remaining argument - /// values are substituted according to the user's default locale. - public init(format: __shared String, arguments: __shared [CVarArg]) { - self = String(format: format, locale: nil, arguments: arguments) - } - - // - (instancetype)initWithFormat:(NSString *)format locale:(id)locale, ... - - /// Returns a `String` object initialized by using a given - /// format string as a template into which the remaining argument - /// values are substituted according to given locale information. - public init(format: __shared String, locale: __shared Locale?, _ args: CVarArg...) { - self = String(format: format, locale: locale, arguments: args) - } - - // - (instancetype) - // initWithFormat:(NSString *)format - // locale:(id)locale - // arguments:(va_list)argList - - /// Returns a `String` object initialized by using a given - /// format string as a template into which the remaining argument - /// values are substituted according to given locale information. - public init(format: __shared String, locale: __shared Locale?, arguments: __shared [CVarArg]) { -#if DEPLOYMENT_RUNTIME_SWIFT - self = withVaList(arguments) { - String._unconditionallyBridgeFromObjectiveC( - NSString(format: format, locale: locale?._bridgeToObjectiveC(), arguments: $0) - ) - } -#else - self = withVaList(arguments) { - NSString(format: format, locale: locale, arguments: $0) as String - } -#endif - } - -} - -extension StringProtocol where Index == String.Index { - //===--- Bridging Helpers -----------------------------------------------===// - //===--------------------------------------------------------------------===// - - /// The corresponding `NSString` - a convenience for bridging code. - // FIXME(strings): There is probably a better way to bridge Self to NSString - var _ns: NSString { - return self._ephemeralString._bridgeToObjectiveC() - } - - /// Return an `Index` corresponding to the given offset in our UTF-16 - /// representation. - func _toIndex(_ utf16Index: Int) -> Index { - return self._toUTF16Index(utf16Index) - } - - /// Return the UTF-16 code unit offset corresponding to an Index - func _toOffset(_ idx: String.Index) -> Int { - return self._toUTF16Offset(idx) - } - - @inlinable - internal func _toRelativeNSRange(_ r: Range) -> NSRange { - return NSRange(self._toUTF16Offsets(r)) - } - - /// Return a `Range` corresponding to the given `NSRange` of - /// our UTF-16 representation. - func _toRange(_ r: NSRange) -> Range { - return self._toUTF16Indices(Range(r)!) - } - - /// Return a `Range?` corresponding to the given `NSRange` of - /// our UTF-16 representation. - func _optionalRange(_ r: NSRange) -> Range? { - if r.location == NSNotFound { - return nil - } - return _toRange(r) - } - - /// Invoke `body` on an `Int` buffer. If `index` was converted from - /// non-`nil`, convert the buffer to an `Index` and write it into the - /// memory referred to by `index` - func _withOptionalOutParameter( - _ index: UnsafeMutablePointer?, - _ body: (UnsafeMutablePointer?) -> Result - ) -> Result { - var utf16Index: Int = 0 - let result = (index != nil ? body(&utf16Index) : body(nil)) - index?.pointee = _toIndex(utf16Index) - return result - } - - /// Invoke `body` on an `NSRange` buffer. If `range` was converted - /// from non-`nil`, convert the buffer to a `Range` and write - /// it into the memory referred to by `range` - func _withOptionalOutParameter( - _ range: UnsafeMutablePointer>?, - _ body: (UnsafeMutablePointer?) -> Result - ) -> Result { - var nsRange = NSRange(location: 0, length: 0) - let result = (range != nil ? body(&nsRange) : body(nil)) - range?.pointee = self._toRange(nsRange) - return result - } - - //===--- Instance Methods/Properties-------------------------------------===// - //===--------------------------------------------------------------------===// - - //===--- Omitted by agreement during API review 5/20/2014 ---------------===// - // @property BOOL boolValue; - - // - (BOOL)canBeConvertedToEncoding:(NSStringEncoding)encoding - - /// Returns a Boolean value that indicates whether the string can be - /// converted to the specified encoding without loss of information. - /// - /// - Parameter encoding: A string encoding. - /// - Returns: `true` if the string can be encoded in `encoding` without loss - /// of information; otherwise, `false`. - public func canBeConverted(to encoding: String.Encoding) -> Bool { - return _ns.canBeConverted(to: encoding.rawValue) - } - - // @property NSString* capitalizedString - - /// A copy of the string with each word changed to its corresponding - /// capitalized spelling. - /// - /// This property performs the canonical (non-localized) mapping. It is - /// suitable for programming operations that require stable results not - /// depending on the current locale. - /// - /// A capitalized string is a string with the first character in each word - /// changed to its corresponding uppercase value, and all remaining - /// characters set to their corresponding lowercase values. A "word" is any - /// sequence of characters delimited by spaces, tabs, or line terminators. - /// Some common word delimiting punctuation isn't considered, so this - /// property may not generally produce the desired results for multiword - /// strings. See the `getLineStart(_:end:contentsEnd:for:)` method for - /// additional information. - /// - /// Case transformations aren’t guaranteed to be symmetrical or to produce - /// strings of the same lengths as the originals. - public var capitalized: String { - return _ns.capitalized - } - - // @property (readonly, copy) NSString *localizedCapitalizedString NS_AVAILABLE(10_11, 9_0); - - /// A capitalized representation of the string that is produced - /// using the current locale. - @available(macOS 10.11, iOS 9.0, *) - public var localizedCapitalized: String { - return _ns.localizedCapitalized - } - - // - (NSString *)capitalizedStringWithLocale:(Locale *)locale - - /// Returns a capitalized representation of the string - /// using the specified locale. - public func capitalized(with locale: Locale?) -> String { - return _ns.capitalized(with: locale) - } - - // - (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString - - /// Returns the result of invoking `compare:options:` with - /// `NSCaseInsensitiveSearch` as the only option. - public func caseInsensitiveCompare< - T : StringProtocol - >(_ aString: T) -> ComparisonResult { - return _ns.caseInsensitiveCompare(aString._ephemeralString) - } - - //===--- Omitted by agreement during API review 5/20/2014 ---------------===// - // - (unichar)characterAtIndex:(NSUInteger)index - // - // We have a different meaning for "Character" in Swift, and we are - // trying not to expose error-prone UTF-16 integer indexes - - // - (NSString *) - // commonPrefixWithString:(NSString *)aString - // options:(StringCompareOptions)mask - - /// Returns a string containing characters this string and the - /// given string have in common, starting from the beginning of each - /// up to the first characters that aren't equivalent. - public func commonPrefix< - T : StringProtocol - >(with aString: T, options: String.CompareOptions = []) -> String { - return _ns.commonPrefix(with: aString._ephemeralString, options: options) - } - - // - (NSComparisonResult) - // compare:(NSString *)aString - // - // - (NSComparisonResult) - // compare:(NSString *)aString options:(StringCompareOptions)mask - // - // - (NSComparisonResult) - // compare:(NSString *)aString options:(StringCompareOptions)mask - // range:(NSRange)range - // - // - (NSComparisonResult) - // compare:(NSString *)aString options:(StringCompareOptions)mask - // range:(NSRange)range locale:(id)locale - - /// Compares the string using the specified options and - /// returns the lexical ordering for the range. - public func compare( - _ aString: T, - options mask: String.CompareOptions = [], - range: Range? = nil, - locale: Locale? = nil - ) -> ComparisonResult { - // According to Ali Ozer, there may be some real advantage to - // dispatching to the minimal selector for the supplied options. - // So let's do that; the switch should compile away anyhow. - let aString = aString._ephemeralString - return locale != nil ? _ns.compare( - aString, - options: mask, - range: _toRelativeNSRange( - range ?? startIndex..? = nil, - caseSensitive: Bool, - matchesInto outputArray: UnsafeMutablePointer<[String]>? = nil, - filterTypes: [String]? = nil - ) -> Int { -#if DEPLOYMENT_RUNTIME_SWIFT - var outputNamePlaceholder: String? - var outputArrayPlaceholder = [String]() - let res = self._ns.completePath( - into: &outputNamePlaceholder, - caseSensitive: caseSensitive, - matchesInto: &outputArrayPlaceholder, - filterTypes: filterTypes - ) - if let n = outputNamePlaceholder { - outputName?.pointee = n - } else { - outputName?.pointee = "" - } - outputArray?.pointee = outputArrayPlaceholder - return res -#else // DEPLOYMENT_RUNTIME_SWIFT - var nsMatches: NSArray? - var nsOutputName: NSString? - - let result: Int = outputName._withNilOrAddress(of: &nsOutputName) { - outputName in outputArray._withNilOrAddress(of: &nsMatches) { - outputArray in - // FIXME: completePath(...) is incorrectly annotated as requiring - // non-optional output parameters. rdar://problem/25494184 - let outputNonOptionalName = unsafeBitCast( - outputName, to: AutoreleasingUnsafeMutablePointer.self) - let outputNonOptionalArray = unsafeBitCast( - outputArray, to: AutoreleasingUnsafeMutablePointer.self) - return self._ns.completePath( - into: outputNonOptionalName, - caseSensitive: caseSensitive, - matchesInto: outputNonOptionalArray, - filterTypes: filterTypes - ) - } - } - - if let matches = nsMatches { - // Since this function is effectively a bridge thunk, use the - // bridge thunk semantics for the NSArray conversion - outputArray?.pointee = matches as! [String] - } - - if let n = nsOutputName { - outputName?.pointee = n as String - } - return result -#endif // DEPLOYMENT_RUNTIME_SWIFT - } - - // - (NSArray *) - // componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator - - /// Returns an array containing substrings from the string - /// that have been divided by characters in the given set. - public func components(separatedBy separator: CharacterSet) -> [String] { - return _ns.components(separatedBy: separator) - } - - // - (NSArray *)componentsSeparatedByString:(NSString *)separator - - /// Returns an array containing substrings from the string that have been - /// divided by the given separator. - /// - /// The substrings in the resulting array appear in the same order as the - /// original string. Adjacent occurrences of the separator string produce - /// empty strings in the result. Similarly, if the string begins or ends - /// with the separator, the first or last substring, respectively, is empty. - /// The following example shows this behavior: - /// - /// let list1 = "Karin, Carrie, David" - /// let items1 = list1.components(separatedBy: ", ") - /// // ["Karin", "Carrie", "David"] - /// - /// // Beginning with the separator: - /// let list2 = ", Norman, Stanley, Fletcher" - /// let items2 = list2.components(separatedBy: ", ") - /// // ["", "Norman", "Stanley", "Fletcher" - /// - /// If the list has no separators, the array contains only the original - /// string itself. - /// - /// let name = "Karin" - /// let list = name.components(separatedBy: ", ") - /// // ["Karin"] - /// - /// - Parameter separator: The separator string. - /// - Returns: An array containing substrings that have been divided from the - /// string using `separator`. - // FIXME(strings): now when String conforms to Collection, this can be - // replaced by split(separator:maxSplits:omittingEmptySubsequences:) - public func components< - T : StringProtocol - >(separatedBy separator: T) -> [String] { - return _ns.components(separatedBy: separator._ephemeralString) - } - - // - (const char *)cStringUsingEncoding:(NSStringEncoding)encoding - - /// Returns a representation of the string as a C string - /// using a given encoding. - public func cString(using encoding: String.Encoding) -> [CChar]? { - return withExtendedLifetime(_ns) { - (s: NSString) -> [CChar]? in - _persistCString(s.cString(using: encoding.rawValue)) - } - } - - // - (NSData *)dataUsingEncoding:(NSStringEncoding)encoding - // - // - (NSData *) - // dataUsingEncoding:(NSStringEncoding)encoding - // allowLossyConversion:(BOOL)flag - - /// Returns a `Data` containing a representation of - /// the `String` encoded using a given encoding. - public func data( - using encoding: String.Encoding, - allowLossyConversion: Bool = false - ) -> Data? { - switch encoding { - case .utf8: - return Data(self.utf8) - default: - return _ns.data( - using: encoding.rawValue, - allowLossyConversion: allowLossyConversion) - } - } - - // @property NSString* decomposedStringWithCanonicalMapping; - - /// A string created by normalizing the string's contents using Form D. - public var decomposedStringWithCanonicalMapping: String { - return _ns.decomposedStringWithCanonicalMapping - } - - // @property NSString* decomposedStringWithCompatibilityMapping; - - /// A string created by normalizing the string's contents using Form KD. - public var decomposedStringWithCompatibilityMapping: String { - return _ns.decomposedStringWithCompatibilityMapping - } - - //===--- Importing Foundation should not affect String printing ---------===// - // Therefore, we're not exposing this: - // - // @property NSString* description - - - //===--- Omitted for consistency with API review results 5/20/2014 -----===// - // @property double doubleValue; - - // - (void) - // enumerateLinesUsing:(void (^)(NSString *line, BOOL *stop))block - - /// Enumerates all the lines in a string. - public func enumerateLines( - invoking body: @escaping (_ line: String, _ stop: inout Bool) -> Void - ) { - _ns.enumerateLines { - (line: String, stop: UnsafeMutablePointer) - in - var stop_ = false - body(line, &stop_) - if stop_ { - stop.pointee = true - } - } - } - - // @property NSStringEncoding fastestEncoding; - - /// The fastest encoding to which the string can be converted without loss - /// of information. - public var fastestEncoding: String.Encoding { - return String.Encoding(rawValue: _ns.fastestEncoding) - } - - // - (BOOL) - // getCString:(char *)buffer - // maxLength:(NSUInteger)maxBufferCount - // encoding:(NSStringEncoding)encoding - - /// Converts the `String`'s content to a given encoding and - /// stores them in a buffer. - /// - Note: will store a maximum of `min(buffer.count, maxLength)` bytes. - public func getCString( - _ buffer: inout [CChar], maxLength: Int, encoding: String.Encoding - ) -> Bool { - return _ns.getCString(&buffer, - maxLength: Swift.min(buffer.count, maxLength), - encoding: encoding.rawValue) - } - - // - (NSUInteger)hash - - /// An unsigned integer that can be used as a hash table address. - public var hash: Int { - return _ns.hash - } - - // - (NSUInteger)lengthOfBytesUsingEncoding:(NSStringEncoding)enc - - /// Returns the number of bytes required to store the - /// `String` in a given encoding. - public func lengthOfBytes(using encoding: String.Encoding) -> Int { - return _ns.lengthOfBytes(using: encoding.rawValue) - } - - // - (NSComparisonResult)localizedCaseInsensitiveCompare:(NSString *)aString - - /// Compares the string and the given string using a case-insensitive, - /// localized, comparison. - public - func localizedCaseInsensitiveCompare< - T : StringProtocol - >(_ aString: T) -> ComparisonResult { - return _ns.localizedCaseInsensitiveCompare(aString._ephemeralString) - } - - // - (NSComparisonResult)localizedCompare:(NSString *)aString - - /// Compares the string and the given string using a localized comparison. - public func localizedCompare< - T : StringProtocol - >(_ aString: T) -> ComparisonResult { - return _ns.localizedCompare(aString._ephemeralString) - } - - /// Compares the string and the given string as sorted by the Finder. - public func localizedStandardCompare< - T : StringProtocol - >(_ string: T) -> ComparisonResult { - return _ns.localizedStandardCompare(string._ephemeralString) - } - - //===--- Omitted for consistency with API review results 5/20/2014 ------===// - // @property long long longLongValue - - // @property (readonly, copy) NSString *localizedLowercase NS_AVAILABLE(10_11, 9_0); - - /// A lowercase version of the string that is produced using the current - /// locale. - @available(macOS 10.11, iOS 9.0, *) - public var localizedLowercase: String { - return _ns.localizedLowercase - } - - // - (NSString *)lowercaseStringWithLocale:(Locale *)locale - - /// Returns a version of the string with all letters - /// converted to lowercase, taking into account the specified - /// locale. - public func lowercased(with locale: Locale?) -> String { - return _ns.lowercased(with: locale) - } - - // - (NSUInteger)maximumLengthOfBytesUsingEncoding:(NSStringEncoding)enc - - /// Returns the maximum number of bytes needed to store the - /// `String` in a given encoding. - public - func maximumLengthOfBytes(using encoding: String.Encoding) -> Int { - return _ns.maximumLengthOfBytes(using: encoding.rawValue) - } - - // @property NSString* precomposedStringWithCanonicalMapping; - - /// A string created by normalizing the string's contents using Form C. - public var precomposedStringWithCanonicalMapping: String { - return _ns.precomposedStringWithCanonicalMapping - } - - // @property NSString * precomposedStringWithCompatibilityMapping; - - /// A string created by normalizing the string's contents using Form KC. - public var precomposedStringWithCompatibilityMapping: String { - return _ns.precomposedStringWithCompatibilityMapping - } - -#if !DEPLOYMENT_RUNTIME_SWIFT - // - (id)propertyList - - /// Parses the `String` as a text representation of a - /// property list, returning an NSString, NSData, NSArray, or - /// NSDictionary object, according to the topmost element. - public func propertyList() -> Any { - return _ns.propertyList() - } - - // - (NSDictionary *)propertyListFromStringsFileFormat - - /// Returns a dictionary object initialized with the keys and - /// values found in the `String`. - public func propertyListFromStringsFileFormat() -> [String : String] { - return _ns.propertyListFromStringsFileFormat() as! [String : String]? ?? [:] - } -#endif - - // - (BOOL)localizedStandardContainsString:(NSString *)str NS_AVAILABLE(10_11, 9_0); - - /// Returns a Boolean value indicating whether the string contains the given - /// string, taking the current locale into account. - /// - /// This is the most appropriate method for doing user-level string searches, - /// similar to how searches are done generally in the system. The search is - /// locale-aware, case and diacritic insensitive. The exact list of search - /// options applied may change over time. - @available(macOS 10.11, iOS 9.0, *) - public func localizedStandardContains< - T : StringProtocol - >(_ string: T) -> Bool { - return _ns.localizedStandardContains(string._ephemeralString) - } - - // @property NSStringEncoding smallestEncoding; - - /// The smallest encoding to which the string can be converted without - /// loss of information. - public var smallestEncoding: String.Encoding { - return String.Encoding(rawValue: _ns.smallestEncoding) - } - - // - (NSString *) - // stringByAddingPercentEncodingWithAllowedCharacters: - // (NSCharacterSet *)allowedCharacters - - /// Returns a new string created by replacing all characters in the string - /// not in the specified set with percent encoded characters. - public func addingPercentEncoding( - withAllowedCharacters allowedCharacters: CharacterSet - ) -> String? { - // FIXME: the documentation states that this method can return nil if the - // transformation is not possible, without going into further details. The - // implementation can only return nil if malloc() returns nil, so in - // practice this is not possible. Still, to be consistent with - // documentation, we declare the method as returning an optional String. - // - // Docs for -[NSString - // stringByAddingPercentEncodingWithAllowedCharacters] don't precisely - // describe when return value is nil - return _ns.addingPercentEncoding(withAllowedCharacters: - allowedCharacters - ) - } - - // - (NSString *)stringByAppendingFormat:(NSString *)format, ... - - /// Returns a string created by appending a string constructed from a given - /// format string and the following arguments. - public func appendingFormat< - T : StringProtocol - >( - _ format: T, _ arguments: CVarArg... - ) -> String { - return _ns.appending( - String(format: format._ephemeralString, arguments: arguments)) - } - - // - (NSString *)stringByAppendingString:(NSString *)aString - - /// Returns a new string created by appending the given string. - // FIXME(strings): shouldn't it be deprecated in favor of `+`? - public func appending< - T : StringProtocol - >(_ aString: T) -> String { - return _ns.appending(aString._ephemeralString) - } - - /// Returns a string with the given character folding options - /// applied. - public func folding( - options: String.CompareOptions = [], locale: Locale? - ) -> String { - return _ns.folding(options: options, locale: locale) - } - - // - (NSString *)stringByPaddingToLength:(NSUInteger)newLength - // withString:(NSString *)padString - // startingAtIndex:(NSUInteger)padIndex - - /// Returns a new string formed from the `String` by either - /// removing characters from the end, or by appending as many - /// occurrences as necessary of a given pad string. - public func padding< - T : StringProtocol - >( - toLength newLength: Int, - withPad padString: T, - startingAt padIndex: Int - ) -> String { - return _ns.padding( - toLength: newLength, - withPad: padString._ephemeralString, - startingAt: padIndex) - } - - // @property NSString* stringByRemovingPercentEncoding; - - /// A new string made from the string by replacing all percent encoded - /// sequences with the matching UTF-8 characters. - public var removingPercentEncoding: String? { - return _ns.removingPercentEncoding - } - - // - (NSString *) - // stringByReplacingCharactersInRange:(NSRange)range - // withString:(NSString *)replacement - - /// Returns a new string in which the characters in a - /// specified range of the `String` are replaced by a given string. - public func replacingCharacters< - T : StringProtocol, R : RangeExpression - >(in range: R, with replacement: T) -> String where R.Bound == Index { - return _ns.replacingCharacters( - in: _toRelativeNSRange(range.relative(to: self)), - with: replacement._ephemeralString) - } - - // - (NSString *) - // stringByReplacingOccurrencesOfString:(NSString *)target - // withString:(NSString *)replacement - // - // - (NSString *) - // stringByReplacingOccurrencesOfString:(NSString *)target - // withString:(NSString *)replacement - // options:(StringCompareOptions)options - // range:(NSRange)searchRange - - /// Returns a new string in which all occurrences of a target - /// string in a specified range of the string are replaced by - /// another given string. - public func replacingOccurrences< - Target : StringProtocol, - Replacement : StringProtocol - >( - of target: Target, - with replacement: Replacement, - options: String.CompareOptions = [], - range searchRange: Range? = nil - ) -> String { - let target = target._ephemeralString - let replacement = replacement._ephemeralString - return (searchRange != nil) || (!options.isEmpty) - ? _ns.replacingOccurrences( - of: target, - with: replacement, - options: options, - range: _toRelativeNSRange( - searchRange ?? startIndex.. String? { - return _ns.replacingPercentEscapes(using: encoding.rawValue) - } -#endif - - // - (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set - - /// Returns a new string made by removing from both ends of - /// the `String` characters contained in a given character set. - public func trimmingCharacters(in set: CharacterSet) -> String { - return _ns.trimmingCharacters(in: set) - } - - // @property (readonly, copy) NSString *localizedUppercaseString NS_AVAILABLE(10_11, 9_0); - - /// An uppercase version of the string that is produced using the current - /// locale. - @available(macOS 10.11, iOS 9.0, *) - public var localizedUppercase: String { - return _ns.localizedUppercase - } - - // - (NSString *)uppercaseStringWithLocale:(Locale *)locale - - /// Returns a version of the string with all letters - /// converted to uppercase, taking into account the specified - /// locale. - public func uppercased(with locale: Locale?) -> String { - return _ns.uppercased(with: locale) - } - - //===--- Omitted due to redundancy with "utf8" property -----------------===// - // - (const char *)UTF8String - - // - (BOOL) - // writeToFile:(NSString *)path - // atomically:(BOOL)useAuxiliaryFile - // encoding:(NSStringEncoding)enc - // error:(NSError **)error - - /// Writes the contents of the `String` to a file at a given - /// path using a given encoding. - public func write< - T : StringProtocol - >( - toFile path: T, atomically useAuxiliaryFile: Bool, - encoding enc: String.Encoding - ) throws { - try _ns.write( - toFile: path._ephemeralString, - atomically: useAuxiliaryFile, - encoding: enc.rawValue) - } - - // - (BOOL) - // writeToURL:(NSURL *)url - // atomically:(BOOL)useAuxiliaryFile - // encoding:(NSStringEncoding)enc - // error:(NSError **)error - - /// Writes the contents of the `String` to the URL specified - /// by url using the specified encoding. - public func write( - to url: URL, atomically useAuxiliaryFile: Bool, - encoding enc: String.Encoding - ) throws { - try _ns.write( - to: url, atomically: useAuxiliaryFile, encoding: enc.rawValue) - } - - // - (nullable NSString *)stringByApplyingTransform:(NSString *)transform reverse:(BOOL)reverse NS_AVAILABLE(10_11, 9_0); - -#if !DEPLOYMENT_RUNTIME_SWIFT - /// Perform string transliteration. - @available(macOS 10.11, iOS 9.0, *) - public func applyingTransform( - _ transform: StringTransform, reverse: Bool - ) -> String? { - return _ns.applyingTransform(transform, reverse: reverse) - } - - // - (void) - // enumerateLinguisticTagsInRange:(NSRange)range - // scheme:(NSString *)tagScheme - // options:(LinguisticTaggerOptions)opts - // orthography:(Orthography *)orthography - // usingBlock:( - // void (^)( - // NSString *tag, NSRange tokenRange, - // NSRange sentenceRange, BOOL *stop) - // )block - - /// Performs linguistic analysis on the specified string by - /// enumerating the specific range of the string, providing the - /// Block with the located tags. - public func enumerateLinguisticTags< - T : StringProtocol, R : RangeExpression - >( - in range: R, - scheme tagScheme: T, - options opts: NSLinguisticTagger.Options = [], - orthography: NSOrthography? = nil, - invoking body: - (String, Range, Range, inout Bool) -> Void - ) where R.Bound == Index { - let range = range.relative(to: self) - _ns.enumerateLinguisticTags( - in: _toRelativeNSRange(range), - scheme: NSLinguisticTagScheme(rawValue: tagScheme._ephemeralString), - options: opts, - orthography: orthography - ) { - var stop_ = false - body($0!.rawValue, self._toRange($1), self._toRange($2), &stop_) - if stop_ { - $3.pointee = true - } - } - } -#endif - - // - (void) - // enumerateSubstringsInRange:(NSRange)range - // options:(NSStringEnumerationOptions)opts - // usingBlock:( - // void (^)( - // NSString *substring, - // NSRange substringRange, - // NSRange enclosingRange, - // BOOL *stop) - // )block - - /// Enumerates the substrings of the specified type in the specified range of - /// the string. - /// - /// Mutation of a string value while enumerating its substrings is not - /// supported. If you need to mutate a string from within `body`, convert - /// your string to an `NSMutableString` instance and then call the - /// `enumerateSubstrings(in:options:using:)` method. - /// - /// - Parameters: - /// - range: The range within the string to enumerate substrings. - /// - opts: Options specifying types of substrings and enumeration styles. - /// If `opts` is omitted or empty, `body` is called a single time with - /// the range of the string specified by `range`. - /// - body: The closure executed for each substring in the enumeration. The - /// closure takes four arguments: - /// - The enumerated substring. If `substringNotRequired` is included in - /// `opts`, this parameter is `nil` for every execution of the - /// closure. - /// - The range of the enumerated substring in the string that - /// `enumerate(in:options:_:)` was called on. - /// - The range that includes the substring as well as any separator or - /// filler characters that follow. For instance, for lines, - /// `enclosingRange` contains the line terminators. The enclosing - /// range for the first string enumerated also contains any characters - /// that occur before the string. Consecutive enclosing ranges are - /// guaranteed not to overlap, and every single character in the - /// enumerated range is included in one and only one enclosing range. - /// - An `inout` Boolean value that the closure can use to stop the - /// enumeration by setting `stop = true`. - public func enumerateSubstrings< - R : RangeExpression - >( - in range: R, - options opts: String.EnumerationOptions = [], - _ body: @escaping ( - _ substring: String?, _ substringRange: Range, - _ enclosingRange: Range, inout Bool - ) -> Void - ) where R.Bound == Index { - _ns.enumerateSubstrings( - in: _toRelativeNSRange(range.relative(to: self)), options: opts) { - var stop_ = false - - body($0, - self._toRange($1), - self._toRange($2), - &stop_) - - if stop_ { - UnsafeMutablePointer($3).pointee = true - } - } - } - - //===--- Omitted for consistency with API review results 5/20/2014 ------===// - // @property float floatValue; - - // - (BOOL) - // getBytes:(void *)buffer - // maxLength:(NSUInteger)maxBufferCount - // usedLength:(NSUInteger*)usedBufferCount - // encoding:(NSStringEncoding)encoding - // options:(StringEncodingConversionOptions)options - // range:(NSRange)range - // remainingRange:(NSRangePointer)leftover - - /// Writes the given `range` of characters into `buffer` in a given - /// `encoding`, without any allocations. Does not NULL-terminate. - /// - /// - Parameter buffer: A buffer into which to store the bytes from - /// the receiver. The returned bytes are not NUL-terminated. - /// - /// - Parameter maxBufferCount: The maximum number of bytes to write - /// to buffer. - /// - /// - Parameter usedBufferCount: The number of bytes used from - /// buffer. Pass `nil` if you do not need this value. - /// - /// - Parameter encoding: The encoding to use for the returned bytes. - /// - /// - Parameter options: A mask to specify options to use for - /// converting the receiver's contents to `encoding` (if conversion - /// is necessary). - /// - /// - Parameter range: The range of characters in the receiver to get. - /// - /// - Parameter leftover: The remaining range. Pass `nil` If you do - /// not need this value. - /// - /// - Returns: `true` if some characters were converted, `false` otherwise. - /// - /// - Note: Conversion stops when the buffer fills or when the - /// conversion isn't possible due to the chosen encoding. - /// - /// - Note: will get a maximum of `min(buffer.count, maxLength)` bytes. - public func getBytes< - R : RangeExpression - >( - _ buffer: inout [UInt8], - maxLength maxBufferCount: Int, - usedLength usedBufferCount: UnsafeMutablePointer, - encoding: String.Encoding, - options: String.EncodingConversionOptions = [], - range: R, - remaining leftover: UnsafeMutablePointer> - ) -> Bool where R.Bound == Index { - return _withOptionalOutParameter(leftover) { - self._ns.getBytes( - &buffer, - maxLength: Swift.min(buffer.count, maxBufferCount), - usedLength: usedBufferCount, - encoding: encoding.rawValue, - options: options, - range: _toRelativeNSRange(range.relative(to: self)), - remaining: $0) - } - } - - // - (void) - // getLineStart:(NSUInteger *)startIndex - // end:(NSUInteger *)lineEndIndex - // contentsEnd:(NSUInteger *)contentsEndIndex - // forRange:(NSRange)aRange - - /// Returns by reference the beginning of the first line and - /// the end of the last line touched by the given range. - public func getLineStart< - R : RangeExpression - >( - _ start: UnsafeMutablePointer, - end: UnsafeMutablePointer, - contentsEnd: UnsafeMutablePointer, - for range: R - ) where R.Bound == Index { - _withOptionalOutParameter(start) { - start in self._withOptionalOutParameter(end) { - end in self._withOptionalOutParameter(contentsEnd) { - contentsEnd in self._ns.getLineStart( - start, end: end, - contentsEnd: contentsEnd, - for: _toRelativeNSRange(range.relative(to: self))) - } - } - } - } - - // - (void) - // getParagraphStart:(NSUInteger *)startIndex - // end:(NSUInteger *)endIndex - // contentsEnd:(NSUInteger *)contentsEndIndex - // forRange:(NSRange)aRange - - /// Returns by reference the beginning of the first paragraph - /// and the end of the last paragraph touched by the given range. - public func getParagraphStart< - R : RangeExpression - >( - _ start: UnsafeMutablePointer, - end: UnsafeMutablePointer, - contentsEnd: UnsafeMutablePointer, - for range: R - ) where R.Bound == Index { - _withOptionalOutParameter(start) { - start in self._withOptionalOutParameter(end) { - end in self._withOptionalOutParameter(contentsEnd) { - contentsEnd in self._ns.getParagraphStart( - start, end: end, - contentsEnd: contentsEnd, - for: _toRelativeNSRange(range.relative(to: self))) - } - } - } - } - - //===--- Already provided by core Swift ---------------------------------===// - // - (instancetype)initWithString:(NSString *)aString - - //===--- Initializers that can fail dropped for factory functions -------===// - // - (instancetype)initWithUTF8String:(const char *)bytes - - //===--- Omitted for consistency with API review results 5/20/2014 ------===// - // @property NSInteger integerValue; - // @property Int intValue; - - //===--- Omitted by apparent agreement during API review 5/20/2014 ------===// - // @property BOOL absolutePath; - // - (BOOL)isEqualToString:(NSString *)aString - - // - (NSRange)lineRangeForRange:(NSRange)aRange - - /// Returns the range of characters representing the line or lines - /// containing a given range. - public func lineRange< - R : RangeExpression - >(for aRange: R) -> Range where R.Bound == Index { - return _toRange(_ns.lineRange( - for: _toRelativeNSRange(aRange.relative(to: self)))) - } - -#if !DEPLOYMENT_RUNTIME_SWIFT - // - (NSArray *) - // linguisticTagsInRange:(NSRange)range - // scheme:(NSString *)tagScheme - // options:(LinguisticTaggerOptions)opts - // orthography:(Orthography *)orthography - // tokenRanges:(NSArray**)tokenRanges - - /// Returns an array of linguistic tags for the specified - /// range and requested tags within the receiving string. - public func linguisticTags< - T : StringProtocol, R : RangeExpression - >( - in range: R, - scheme tagScheme: T, - options opts: NSLinguisticTagger.Options = [], - orthography: NSOrthography? = nil, - tokenRanges: UnsafeMutablePointer<[Range]>? = nil // FIXME:Can this be nil? - ) -> [String] where R.Bound == Index { - var nsTokenRanges: NSArray? - let result = tokenRanges._withNilOrAddress(of: &nsTokenRanges) { - self._ns.linguisticTags( - in: _toRelativeNSRange(range.relative(to: self)), - scheme: NSLinguisticTagScheme(rawValue: tagScheme._ephemeralString), - options: opts, - orthography: orthography, - tokenRanges: $0) as NSArray - } - - if let nsTokenRanges = nsTokenRanges { - tokenRanges?.pointee = (nsTokenRanges as [AnyObject]).map { - self._toRange($0.rangeValue) - } - } - - return result as! [String] - } - - // - (NSRange)paragraphRangeForRange:(NSRange)aRange - - /// Returns the range of characters representing the - /// paragraph or paragraphs containing a given range. - public func paragraphRange< - R : RangeExpression - >(for aRange: R) -> Range where R.Bound == Index { - return _toRange( - _ns.paragraphRange(for: _toRelativeNSRange(aRange.relative(to: self)))) - } -#endif - - // - (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)aSet - // - // - (NSRange) - // rangeOfCharacterFromSet:(NSCharacterSet *)aSet - // options:(StringCompareOptions)mask - // - // - (NSRange) - // rangeOfCharacterFromSet:(NSCharacterSet *)aSet - // options:(StringCompareOptions)mask - // range:(NSRange)aRange - - /// Finds and returns the range in the `String` of the first - /// character from a given character set found in a given range with - /// given options. - public func rangeOfCharacter( - from aSet: CharacterSet, - options mask: String.CompareOptions = [], - range aRange: Range? = nil - ) -> Range? { - return _optionalRange( - _ns.rangeOfCharacter( - from: aSet, - options: mask, - range: _toRelativeNSRange( - aRange ?? startIndex.. Range { - return _toRange( - _ns.rangeOfComposedCharacterSequence(at: _toOffset(anIndex))) - } - - // - (NSRange)rangeOfComposedCharacterSequencesForRange:(NSRange)range - - /// Returns the range in the string of the composed character - /// sequences for a given range. - public func rangeOfComposedCharacterSequences< - R : RangeExpression - >( - for range: R - ) -> Range where R.Bound == Index { - // Theoretically, this will be the identity function. In practice - // I think users will be able to observe differences in the input - // and output ranges due (if nothing else) to locale changes - return _toRange( - _ns.rangeOfComposedCharacterSequences( - for: _toRelativeNSRange(range.relative(to: self)))) - } - - // - (NSRange)rangeOfString:(NSString *)aString - // - // - (NSRange) - // rangeOfString:(NSString *)aString options:(StringCompareOptions)mask - // - // - (NSRange) - // rangeOfString:(NSString *)aString - // options:(StringCompareOptions)mask - // range:(NSRange)aRange - // - // - (NSRange) - // rangeOfString:(NSString *)aString - // options:(StringCompareOptions)mask - // range:(NSRange)searchRange - // locale:(Locale *)locale - - /// Finds and returns the range of the first occurrence of a - /// given string within a given range of the `String`, subject to - /// given options, using the specified locale, if any. - public func range< - T : StringProtocol - >( - of aString: T, - options mask: String.CompareOptions = [], - range searchRange: Range? = nil, - locale: Locale? = nil - ) -> Range? { - let aString = aString._ephemeralString - return _optionalRange( - locale != nil ? _ns.range( - of: aString, - options: mask, - range: _toRelativeNSRange( - searchRange ?? startIndex..(of string: T) -> Range? { - return _optionalRange( - _ns.localizedStandardRange(of: string._ephemeralString)) - } - -#if !DEPLOYMENT_RUNTIME_SWIFT - // - (NSString *) - // stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding - - /// Returns a representation of the `String` using a given - /// encoding to determine the percent escapes necessary to convert - /// the `String` into a legal URL string. - @available(swift, deprecated: 3.0, obsoleted: 4.0, - message: "Use addingPercentEncoding(withAllowedCharacters:) instead, which always uses the recommended UTF-8 encoding, and which encodes for a specific URL component or subcomponent since each URL component or subcomponent has different rules for what characters are valid.") - public func addingPercentEscapes( - using encoding: String.Encoding - ) -> String? { - return _ns.addingPercentEscapes(using: encoding.rawValue) - } -#endif - - //===--- From the 10.10 release notes; not in public documentation ------===// - // No need to make these unavailable on earlier OSes, since they can - // forward trivially to rangeOfString. - - /// Returns `true` if `other` is non-empty and contained within `self` by - /// case-sensitive, non-literal search. Otherwise, returns `false`. - /// - /// Equivalent to `self.range(of: other) != nil` - public func contains(_ other: T) -> Bool { - let r = self.range(of: other) != nil - if #available(macOS 10.10, iOS 8.0, *) { - assert(r == _ns.contains(other._ephemeralString)) - } - return r - } - - /// Returns a Boolean value indicating whether the given string is non-empty - /// and contained within this string by case-insensitive, non-literal - /// search, taking into account the current locale. - /// - /// Locale-independent case-insensitive operation, and other needs, can be - /// achieved by calling `range(of:options:range:locale:)`. - /// - /// Equivalent to: - /// - /// range(of: other, options: .caseInsensitiveSearch, - /// locale: Locale.current) != nil - public func localizedCaseInsensitiveContains< - T : StringProtocol - >(_ other: T) -> Bool { - let r = self.range( - of: other, options: .caseInsensitive, locale: Locale.current - ) != nil - if #available(macOS 10.10, iOS 8.0, *) { - assert(r == - _ns.localizedCaseInsensitiveContains(other._ephemeralString)) - } - return r - } -} - -// Deprecated slicing -extension StringProtocol where Index == String.Index { - // - (NSString *)substringFromIndex:(NSUInteger)anIndex - - /// Returns a new string containing the characters of the - /// `String` from the one at a given index to the end. - @available(swift, deprecated: 4.0, - message: "Please use String slicing subscript with a 'partial range from' operator.") - public func substring(from index: Index) -> String { - return _ns.substring(from: _toOffset(index)) - } - - // - (NSString *)substringToIndex:(NSUInteger)anIndex - - /// Returns a new string containing the characters of the - /// `String` up to, but not including, the one at a given index. - @available(swift, deprecated: 4.0, - message: "Please use String slicing subscript with a 'partial range upto' operator.") - public func substring(to index: Index) -> String { - return _ns.substring(to: _toOffset(index)) - } - - // - (NSString *)substringWithRange:(NSRange)aRange - - /// Returns a string object containing the characters of the - /// `String` that lie within a given range. - @available(swift, deprecated: 4.0, - message: "Please use String slicing subscript.") - public func substring(with aRange: Range) -> String { - return _ns.substring(with: _toRelativeNSRange(aRange)) - } -} - -extension StringProtocol { - // - (const char *)fileSystemRepresentation - - /// Returns a file system-specific representation of the `String`. - @available(*, unavailable, message: "Use getFileSystemRepresentation on URL instead.") - public var fileSystemRepresentation: [CChar] { - fatalError("unavailable function can't be called") - } - - // - (BOOL) - // getFileSystemRepresentation:(char *)buffer - // maxLength:(NSUInteger)maxLength - - /// Interprets the `String` as a system-independent path and - /// fills a buffer with a C-string in a format and encoding suitable - /// for use with file-system calls. - /// - Note: will store a maximum of `min(buffer.count, maxLength)` bytes. - @available(*, unavailable, message: "Use getFileSystemRepresentation on URL instead.") - public func getFileSystemRepresentation( - _ buffer: inout [CChar], maxLength: Int) -> Bool { - fatalError("unavailable function can't be called") - } - - //===--- Kept for consistency with API review results 5/20/2014 ---------===// - // We decided to keep pathWithComponents, so keeping this too - // @property NSString lastPathComponent; - - /// Returns the last path component of the `String`. - @available(*, unavailable, message: "Use lastPathComponent on URL instead.") - public var lastPathComponent: String { - fatalError("unavailable function can't be called") - } - - //===--- Renamed by agreement during API review 5/20/2014 ---------------===// - // @property NSUInteger length; - - /// Returns the number of Unicode characters in the `String`. - @available(*, unavailable, - message: "Take the count of a UTF-16 view instead, i.e. str.utf16.count") - public var utf16Count: Int { - fatalError("unavailable function can't be called") - } - - // @property NSArray* pathComponents - - /// Returns an array of NSString objects containing, in - /// order, each path component of the `String`. - @available(*, unavailable, message: "Use pathComponents on URL instead.") - public var pathComponents: [String] { - fatalError("unavailable function can't be called") - } - - // @property NSString* pathExtension; - - /// Interprets the `String` as a path and returns the - /// `String`'s extension, if any. - @available(*, unavailable, message: "Use pathExtension on URL instead.") - public var pathExtension: String { - fatalError("unavailable function can't be called") - } - - // @property NSString *stringByAbbreviatingWithTildeInPath; - - /// Returns a new string that replaces the current home - /// directory portion of the current path with a tilde (`~`) - /// character. - @available(*, unavailable, message: "Use abbreviatingWithTildeInPath on NSString instead.") - public var abbreviatingWithTildeInPath: String { - fatalError("unavailable function can't be called") - } - - // - (NSString *)stringByAppendingPathComponent:(NSString *)aString - - /// Returns a new string made by appending to the `String` a given string. - @available(*, unavailable, message: "Use appendingPathComponent on URL instead.") - public func appendingPathComponent(_ aString: String) -> String { - fatalError("unavailable function can't be called") - } - - // - (NSString *)stringByAppendingPathExtension:(NSString *)ext - - /// Returns a new string made by appending to the `String` an - /// extension separator followed by a given extension. - @available(*, unavailable, message: "Use appendingPathExtension on URL instead.") - public func appendingPathExtension(_ ext: String) -> String? { - fatalError("unavailable function can't be called") - } - - // @property NSString* stringByDeletingLastPathComponent; - - /// Returns a new string made by deleting the last path - /// component from the `String`, along with any final path - /// separator. - @available(*, unavailable, message: "Use deletingLastPathComponent on URL instead.") - public var deletingLastPathComponent: String { - fatalError("unavailable function can't be called") - } - - // @property NSString* stringByDeletingPathExtension; - - /// Returns a new string made by deleting the extension (if - /// any, and only the last) from the `String`. - @available(*, unavailable, message: "Use deletingPathExtension on URL instead.") - public var deletingPathExtension: String { - fatalError("unavailable function can't be called") - } - - // @property NSString* stringByExpandingTildeInPath; - - /// Returns a new string made by expanding the initial - /// component of the `String` to its full path value. - @available(*, unavailable, message: "Use expandingTildeInPath on NSString instead.") - public var expandingTildeInPath: String { - fatalError("unavailable function can't be called") - } - - // - (NSString *) - // stringByFoldingWithOptions:(StringCompareOptions)options - // locale:(Locale *)locale - - @available(*, unavailable, renamed: "folding(options:locale:)") - public func folding( - _ options: String.CompareOptions = [], locale: Locale? - ) -> String { - fatalError("unavailable function can't be called") - } - - // @property NSString* stringByResolvingSymlinksInPath; - - /// Returns a new string made from the `String` by resolving - /// all symbolic links and standardizing path. - @available(*, unavailable, message: "Use resolvingSymlinksInPath on URL instead.") - public var resolvingSymlinksInPath: String { - fatalError("unavailable property") - } - - // @property NSString* stringByStandardizingPath; - - /// Returns a new string made by removing extraneous path - /// components from the `String`. - @available(*, unavailable, message: "Use standardizingPath on URL instead.") - public var standardizingPath: String { - fatalError("unavailable function can't be called") - } - - // - (NSArray *)stringsByAppendingPaths:(NSArray *)paths - - /// Returns an array of strings made by separately appending - /// to the `String` each string in a given array. - @available(*, unavailable, message: "Map over paths with appendingPathComponent instead.") - public func strings(byAppendingPaths paths: [String]) -> [String] { - fatalError("unavailable function can't be called") - } - -} - -// Pre-Swift-3 method names -extension String { - @available(*, unavailable, renamed: "localizedName(of:)") - public static func localizedNameOfStringEncoding( - _ encoding: String.Encoding - ) -> String { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, message: "Use fileURL(withPathComponents:) on URL instead.") - public static func pathWithComponents(_ components: [String]) -> String { - fatalError("unavailable function can't be called") - } - - // + (NSString *)pathWithComponents:(NSArray *)components - - /// Returns a string built from the strings in a given array - /// by concatenating them with a path separator between each pair. - @available(*, unavailable, message: "Use fileURL(withPathComponents:) on URL instead.") - public static func path(withComponents components: [String]) -> String { - fatalError("unavailable function can't be called") - } -} - -extension StringProtocol { - - @available(*, unavailable, renamed: "canBeConverted(to:)") - public func canBeConvertedToEncoding(_ encoding: String.Encoding) -> Bool { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "capitalizedString(with:)") - public func capitalizedStringWith(_ locale: Locale?) -> String { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "commonPrefix(with:options:)") - public func commonPrefixWith( - _ aString: String, options: String.CompareOptions) -> String { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "completePath(into:outputName:caseSensitive:matchesInto:filterTypes:)") - public func completePathInto( - _ outputName: UnsafeMutablePointer? = nil, - caseSensitive: Bool, - matchesInto matchesIntoArray: UnsafeMutablePointer<[String]>? = nil, - filterTypes: [String]? = nil - ) -> Int { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "components(separatedBy:)") - public func componentsSeparatedByCharactersIn( - _ separator: CharacterSet - ) -> [String] { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "components(separatedBy:)") - public func componentsSeparatedBy(_ separator: String) -> [String] { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "cString(usingEncoding:)") - public func cStringUsingEncoding(_ encoding: String.Encoding) -> [CChar]? { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "data(usingEncoding:allowLossyConversion:)") - public func dataUsingEncoding( - _ encoding: String.Encoding, - allowLossyConversion: Bool = false - ) -> Data? { - fatalError("unavailable function can't be called") - } - -#if !DEPLOYMENT_RUNTIME_SWIFT - @available(*, unavailable, renamed: "enumerateLinguisticTags(in:scheme:options:orthography:_:)") - public func enumerateLinguisticTagsIn( - _ range: Range, - scheme tagScheme: String, - options opts: NSLinguisticTagger.Options, - orthography: NSOrthography?, - _ body: - (String, Range, Range, inout Bool) -> Void - ) { - fatalError("unavailable function can't be called") - } -#endif - - @available(*, unavailable, renamed: "enumerateSubstrings(in:options:_:)") - public func enumerateSubstringsIn( - _ range: Range, - options opts: String.EnumerationOptions = [], - _ body: ( - _ substring: String?, _ substringRange: Range, - _ enclosingRange: Range, inout Bool - ) -> Void - ) { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "getBytes(_:maxLength:usedLength:encoding:options:range:remaining:)") - public func getBytes( - _ buffer: inout [UInt8], - maxLength maxBufferCount: Int, - usedLength usedBufferCount: UnsafeMutablePointer, - encoding: String.Encoding, - options: String.EncodingConversionOptions = [], - range: Range, - remainingRange leftover: UnsafeMutablePointer> - ) -> Bool { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "getLineStart(_:end:contentsEnd:for:)") - public func getLineStart( - _ start: UnsafeMutablePointer, - end: UnsafeMutablePointer, - contentsEnd: UnsafeMutablePointer, - forRange: Range - ) { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "getParagraphStart(_:end:contentsEnd:for:)") - public func getParagraphStart( - _ start: UnsafeMutablePointer, - end: UnsafeMutablePointer, - contentsEnd: UnsafeMutablePointer, - forRange: Range - ) { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "lengthOfBytes(using:)") - public func lengthOfBytesUsingEncoding(_ encoding: String.Encoding) -> Int { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "lineRange(for:)") - public func lineRangeFor(_ aRange: Range) -> Range { - fatalError("unavailable function can't be called") - } - -#if !DEPLOYMENT_RUNTIME_SWIFT - @available(*, unavailable, renamed: "linguisticTags(in:scheme:options:orthography:tokenRanges:)") - public func linguisticTagsIn( - _ range: Range, - scheme tagScheme: String, - options opts: NSLinguisticTagger.Options = [], - orthography: NSOrthography? = nil, - tokenRanges: UnsafeMutablePointer<[Range]>? = nil - ) -> [String] { - fatalError("unavailable function can't be called") - } -#endif - - @available(*, unavailable, renamed: "lowercased(with:)") - public func lowercaseStringWith(_ locale: Locale?) -> String { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "maximumLengthOfBytes(using:)") - public - func maximumLengthOfBytesUsingEncoding(_ encoding: String.Encoding) -> Int { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "paragraphRange(for:)") - public func paragraphRangeFor(_ aRange: Range) -> Range { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "rangeOfCharacter(from:options:range:)") - public func rangeOfCharacterFrom( - _ aSet: CharacterSet, - options mask: String.CompareOptions = [], - range aRange: Range? = nil - ) -> Range? { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "rangeOfComposedCharacterSequence(at:)") - public - func rangeOfComposedCharacterSequenceAt(_ anIndex: Index) -> Range { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "rangeOfComposedCharacterSequences(for:)") - public func rangeOfComposedCharacterSequencesFor( - _ range: Range - ) -> Range { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "range(of:options:range:locale:)") - public func rangeOf( - _ aString: String, - options mask: String.CompareOptions = [], - range searchRange: Range? = nil, - locale: Locale? = nil - ) -> Range? { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "localizedStandardRange(of:)") - public func localizedStandardRangeOf(_ string: String) -> Range? { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "addingPercentEncoding(withAllowedCharacters:)") - public func addingPercentEncodingWithAllowedCharacters( - _ allowedCharacters: CharacterSet - ) -> String? { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "addingPercentEscapes(using:)") - public func addingPercentEscapesUsingEncoding( - _ encoding: String.Encoding - ) -> String? { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "appendingFormat") - public func stringByAppendingFormat( - _ format: String, _ arguments: CVarArg... - ) -> String { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "padding(toLength:with:startingAt:)") - public func byPaddingToLength( - _ newLength: Int, withString padString: String, startingAt padIndex: Int - ) -> String { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "replacingCharacters(in:with:)") - public func replacingCharactersIn( - _ range: Range, withString replacement: String - ) -> String { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "replacingOccurrences(of:with:options:range:)") - public func replacingOccurrencesOf( - _ target: String, - withString replacement: String, - options: String.CompareOptions = [], - range searchRange: Range? = nil - ) -> String { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "replacingPercentEscapes(usingEncoding:)") - public func replacingPercentEscapesUsingEncoding( - _ encoding: String.Encoding - ) -> String? { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "trimmingCharacters(in:)") - public func byTrimmingCharactersIn(_ set: CharacterSet) -> String { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "strings(byAppendingPaths:)") - public func stringsByAppendingPaths(_ paths: [String]) -> [String] { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "substring(from:)") - public func substringFrom(_ index: Index) -> String { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "substring(to:)") - public func substringTo(_ index: Index) -> String { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "substring(with:)") - public func substringWith(_ aRange: Range) -> String { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "uppercased(with:)") - public func uppercaseStringWith(_ locale: Locale?) -> String { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "write(toFile:atomically:encoding:)") - public func writeToFile( - _ path: String, atomically useAuxiliaryFile:Bool, - encoding enc: String.Encoding - ) throws { - fatalError("unavailable function can't be called") - } - - @available(*, unavailable, renamed: "write(to:atomically:encoding:)") - public func writeToURL( - _ url: URL, atomically useAuxiliaryFile: Bool, - encoding enc: String.Encoding - ) throws { - fatalError("unavailable function can't be called") - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSStringEncodings.swift b/Darwin/Foundation-swiftoverlay/NSStringEncodings.swift deleted file mode 100644 index 1eaa7c0f8c..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSStringEncodings.swift +++ /dev/null @@ -1,183 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// FIXME: one day this will be bridged from CoreFoundation and we -// should drop it here. (need support -// for CF bridging) -public var kCFStringEncodingASCII: CFStringEncoding { return 0x0600 } - -extension String { - public struct Encoding : RawRepresentable { - public var rawValue: UInt - public init(rawValue: UInt) { self.rawValue = rawValue } - - public static let ascii = Encoding(rawValue: 1) - public static let nextstep = Encoding(rawValue: 2) - public static let japaneseEUC = Encoding(rawValue: 3) - public static let utf8 = Encoding(rawValue: 4) - public static let isoLatin1 = Encoding(rawValue: 5) - public static let symbol = Encoding(rawValue: 6) - public static let nonLossyASCII = Encoding(rawValue: 7) - public static let shiftJIS = Encoding(rawValue: 8) - public static let isoLatin2 = Encoding(rawValue: 9) - public static let unicode = Encoding(rawValue: 10) - public static let windowsCP1251 = Encoding(rawValue: 11) - public static let windowsCP1252 = Encoding(rawValue: 12) - public static let windowsCP1253 = Encoding(rawValue: 13) - public static let windowsCP1254 = Encoding(rawValue: 14) - public static let windowsCP1250 = Encoding(rawValue: 15) - public static let iso2022JP = Encoding(rawValue: 21) - public static let macOSRoman = Encoding(rawValue: 30) - public static let utf16 = Encoding.unicode - public static let utf16BigEndian = Encoding(rawValue: 0x90000100) - public static let utf16LittleEndian = Encoding(rawValue: 0x94000100) - public static let utf32 = Encoding(rawValue: 0x8c000100) - public static let utf32BigEndian = Encoding(rawValue: 0x98000100) - public static let utf32LittleEndian = Encoding(rawValue: 0x9c000100) - } - - public typealias EncodingConversionOptions = NSString.EncodingConversionOptions - public typealias EnumerationOptions = NSString.EnumerationOptions - public typealias CompareOptions = NSString.CompareOptions -} - -extension String.Encoding : Hashable { - public var hashValue: Int { - // Note: This is effectively the same hashValue definition that - // RawRepresentable provides on its own. We only need to keep this to - // ensure ABI compatibility with 5.0. - return rawValue.hashValue - } - - @_alwaysEmitIntoClient // Introduced in 5.1 - public func hash(into hasher: inout Hasher) { - // Note: `hash(only:)` is only defined here because we also define - // `hashValue`. - // - // In 5.0, `hash(into:)` was resolved to RawRepresentable's functionally - // equivalent definition; we added this definition in 5.1 to make it - // clear this `hash(into:)` isn't synthesized by the compiler. - // (Otherwise someone may be tempted to define it, possibly breaking the - // hash encoding and thus the ABI. RawRepresentable's definition is - // inlinable.) - hasher.combine(rawValue) - } - - public static func ==(lhs: String.Encoding, rhs: String.Encoding) -> Bool { - // Note: This is effectively the same == definition that - // RawRepresentable provides on its own. We only need to keep this to - // ensure ABI compatibility with 5.0. - return lhs.rawValue == rhs.rawValue - } -} - -extension String.Encoding : CustomStringConvertible { - public var description: String { - return String.localizedName(of: self) - } -} - -@available(*, unavailable, renamed: "String.Encoding") -public typealias NSStringEncoding = UInt - -@available(*, unavailable, renamed: "String.Encoding.ascii") -public var NSASCIIStringEncoding: String.Encoding { - return String.Encoding.ascii -} -@available(*, unavailable, renamed: "String.Encoding.nextstep") -public var NSNEXTSTEPStringEncoding: String.Encoding { - return String.Encoding.nextstep -} -@available(*, unavailable, renamed: "String.Encoding.japaneseEUC") -public var NSJapaneseEUCStringEncoding: String.Encoding { - return String.Encoding.japaneseEUC -} -@available(*, unavailable, renamed: "String.Encoding.utf8") -public var NSUTF8StringEncoding: String.Encoding { - return String.Encoding.utf8 -} -@available(*, unavailable, renamed: "String.Encoding.isoLatin1") -public var NSISOLatin1StringEncoding: String.Encoding { - return String.Encoding.isoLatin1 -} -@available(*, unavailable, renamed: "String.Encoding.symbol") -public var NSSymbolStringEncoding: String.Encoding { - return String.Encoding.symbol -} -@available(*, unavailable, renamed: "String.Encoding.nonLossyASCII") -public var NSNonLossyASCIIStringEncoding: String.Encoding { - return String.Encoding.nonLossyASCII -} -@available(*, unavailable, renamed: "String.Encoding.shiftJIS") -public var NSShiftJISStringEncoding: String.Encoding { - return String.Encoding.shiftJIS -} -@available(*, unavailable, renamed: "String.Encoding.isoLatin2") -public var NSISOLatin2StringEncoding: String.Encoding { - return String.Encoding.isoLatin2 -} -@available(*, unavailable, renamed: "String.Encoding.unicode") -public var NSUnicodeStringEncoding: String.Encoding { - return String.Encoding.unicode -} -@available(*, unavailable, renamed: "String.Encoding.windowsCP1251") -public var NSWindowsCP1251StringEncoding: String.Encoding { - return String.Encoding.windowsCP1251 -} -@available(*, unavailable, renamed: "String.Encoding.windowsCP1252") -public var NSWindowsCP1252StringEncoding: String.Encoding { - return String.Encoding.windowsCP1252 -} -@available(*, unavailable, renamed: "String.Encoding.windowsCP1253") -public var NSWindowsCP1253StringEncoding: String.Encoding { - return String.Encoding.windowsCP1253 -} -@available(*, unavailable, renamed: "String.Encoding.windowsCP1254") -public var NSWindowsCP1254StringEncoding: String.Encoding { - return String.Encoding.windowsCP1254 -} -@available(*, unavailable, renamed: "String.Encoding.windowsCP1250") -public var NSWindowsCP1250StringEncoding: String.Encoding { - return String.Encoding.windowsCP1250 -} -@available(*, unavailable, renamed: "String.Encoding.iso2022JP") -public var NSISO2022JPStringEncoding: String.Encoding { - return String.Encoding.iso2022JP -} -@available(*, unavailable, renamed: "String.Encoding.macOSRoman") -public var NSMacOSRomanStringEncoding: String.Encoding { - return String.Encoding.macOSRoman -} -@available(*, unavailable, renamed: "String.Encoding.utf16") -public var NSUTF16StringEncoding: String.Encoding { - return String.Encoding.utf16 -} -@available(*, unavailable, renamed: "String.Encoding.utf16BigEndian") -public var NSUTF16BigEndianStringEncoding: String.Encoding { - return String.Encoding.utf16BigEndian -} -@available(*, unavailable, renamed: "String.Encoding.utf16LittleEndian") -public var NSUTF16LittleEndianStringEncoding: String.Encoding { - return String.Encoding.utf16LittleEndian -} -@available(*, unavailable, renamed: "String.Encoding.utf32") -public var NSUTF32StringEncoding: String.Encoding { - return String.Encoding.utf32 -} -@available(*, unavailable, renamed: "String.Encoding.utf32BigEndian") -public var NSUTF32BigEndianStringEncoding: String.Encoding { - return String.Encoding.utf32BigEndian -} -@available(*, unavailable, renamed: "String.Encoding.utf32LittleEndian") -public var NSUTF32LittleEndianStringEncoding: String.Encoding { - return String.Encoding.utf32LittleEndian -} diff --git a/Darwin/Foundation-swiftoverlay/NSTextCheckingResult.swift b/Darwin/Foundation-swiftoverlay/NSTextCheckingResult.swift deleted file mode 100644 index 5087366b69..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSTextCheckingResult.swift +++ /dev/null @@ -1,31 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -//===----------------------------------------------------------------------===// -// TextChecking -//===----------------------------------------------------------------------===// - -extension NSTextCheckingResult.CheckingType { - public static var allSystemTypes : NSTextCheckingResult.CheckingType { - return NSTextCheckingResult.CheckingType(rawValue: 0xffffffff) - } - - public static var allCustomTypes : NSTextCheckingResult.CheckingType { - return NSTextCheckingResult.CheckingType(rawValue: 0xffffffff << 32) - } - - public static var allTypes : NSTextCheckingResult.CheckingType { - return NSTextCheckingResult.CheckingType(rawValue: UInt64.max) - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSURL.swift b/Darwin/Foundation-swiftoverlay/NSURL.swift deleted file mode 100644 index 25bb971a2e..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSURL.swift +++ /dev/null @@ -1,21 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -extension NSURL : _CustomPlaygroundQuickLookable { - @available(*, deprecated, message: "NSURL.customPlaygroundQuickLook will be removed in a future Swift version") - public var customPlaygroundQuickLook: PlaygroundQuickLook { - guard let str = absoluteString else { return .text("Unknown URL") } - return .url(str) - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSUndoManager.swift b/Darwin/Foundation-swiftoverlay/NSUndoManager.swift deleted file mode 100644 index 7431d77f8d..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSUndoManager.swift +++ /dev/null @@ -1,28 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -@_implementationOnly import _FoundationOverlayShims - -extension UndoManager { - @available(*, unavailable, renamed: "registerUndo(withTarget:handler:)") - public func registerUndoWithTarget(_ target: TargetType, handler: (TargetType) -> Void) { - fatalError("This API has been renamed") - } - - @available(macOS 10.11, iOS 9.0, *) - public func registerUndo(withTarget target: TargetType, handler: @escaping (TargetType) -> Void) { - __NSUndoManagerRegisterWithTargetHandler( self, target) { internalTarget in - handler(internalTarget as! TargetType) - } - } -} diff --git a/Darwin/Foundation-swiftoverlay/NSValue.swift b/Darwin/Foundation-swiftoverlay/NSValue.swift deleted file mode 100644 index b979822ac6..0000000000 --- a/Darwin/Foundation-swiftoverlay/NSValue.swift +++ /dev/null @@ -1,352 +0,0 @@ -//===--- NSValue.swift - Bridging things in NSValue -----------*- swift -*-===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import CoreGraphics - - -extension NSRange: _ObjectiveCBridgeable { - public func _bridgeToObjectiveC() -> NSValue { - var myself = self - return NSValue(bytes: &myself, objCType: _getObjCTypeEncoding(NSRange.self)) - } - - public static func _forceBridgeFromObjectiveC(_ source: NSValue, - result: inout NSRange?) { - precondition(strcmp(source.objCType, - _getObjCTypeEncoding(NSRange.self)) == 0, - "NSValue does not contain the right type to bridge to NSRange") - result = NSRange() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - source.getValue(&result!, size: MemoryLayout.size) - } else { - source.getValue(&result!) - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ source: NSValue, - result: inout NSRange?) - -> Bool { - if strcmp(source.objCType, _getObjCTypeEncoding(NSRange.self)) != 0 { - result = nil - return false - } - result = NSRange() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - source.getValue(&result!, size: MemoryLayout.size) - } else { - source.getValue(&result!) - } - return true - } - - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSValue?) - -> NSRange { - let unwrappedSource = source! - precondition(strcmp(unwrappedSource.objCType, - _getObjCTypeEncoding(NSRange.self)) == 0, - "NSValue does not contain the right type to bridge to NSRange") - var result = NSRange() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - unwrappedSource.getValue(&result, size: MemoryLayout.size) - } else { - unwrappedSource.getValue(&result) - } - return result - } -} - - -extension CGRect: _ObjectiveCBridgeable { - public func _bridgeToObjectiveC() -> NSValue { - var myself = self - return NSValue(bytes: &myself, objCType: _getObjCTypeEncoding(CGRect.self)) - } - - public static func _forceBridgeFromObjectiveC(_ source: NSValue, - result: inout CGRect?) { - precondition(strcmp(source.objCType, - _getObjCTypeEncoding(CGRect.self)) == 0, - "NSValue does not contain the right type to bridge to CGRect") - result = CGRect() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - source.getValue(&result!, size: MemoryLayout.size) - } else { - source.getValue(&result!) - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ source: NSValue, - result: inout CGRect?) - -> Bool { - if strcmp(source.objCType, _getObjCTypeEncoding(CGRect.self)) != 0 { - result = nil - return false - } - result = CGRect() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - source.getValue(&result!, size: MemoryLayout.size) - } else { - source.getValue(&result!) - } - return true - } - - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSValue?) - -> CGRect { - let unwrappedSource = source! - precondition(strcmp(unwrappedSource.objCType, - _getObjCTypeEncoding(CGRect.self)) == 0, - "NSValue does not contain the right type to bridge to CGRect") - var result = CGRect() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - unwrappedSource.getValue(&result, size: MemoryLayout.size) - } else { - unwrappedSource.getValue(&result) - } - return result - } -} - - -extension CGPoint: _ObjectiveCBridgeable { - public func _bridgeToObjectiveC() -> NSValue { - var myself = self - return NSValue(bytes: &myself, objCType: _getObjCTypeEncoding(CGPoint.self)) - } - - public static func _forceBridgeFromObjectiveC(_ source: NSValue, - result: inout CGPoint?) { - precondition(strcmp(source.objCType, - _getObjCTypeEncoding(CGPoint.self)) == 0, - "NSValue does not contain the right type to bridge to CGPoint") - result = CGPoint() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - source.getValue(&result!, size: MemoryLayout.size) - } else { - source.getValue(&result!) - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ source: NSValue, - result: inout CGPoint?) - -> Bool { - if strcmp(source.objCType, _getObjCTypeEncoding(CGPoint.self)) != 0 { - result = nil - return false - } - result = CGPoint() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - source.getValue(&result!, size: MemoryLayout.size) - } else { - source.getValue(&result!) - } - return true - } - - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSValue?) - -> CGPoint { - let unwrappedSource = source! - precondition(strcmp(unwrappedSource.objCType, - _getObjCTypeEncoding(CGPoint.self)) == 0, - "NSValue does not contain the right type to bridge to CGPoint") - var result = CGPoint() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - unwrappedSource.getValue(&result, size: MemoryLayout.size) - } else { - unwrappedSource.getValue(&result) - } - return result - } -} - - -extension CGVector: _ObjectiveCBridgeable { - public func _bridgeToObjectiveC() -> NSValue { - var myself = self - return NSValue(bytes: &myself, objCType: _getObjCTypeEncoding(CGVector.self)) - } - - public static func _forceBridgeFromObjectiveC(_ source: NSValue, - result: inout CGVector?) { - precondition(strcmp(source.objCType, - _getObjCTypeEncoding(CGVector.self)) == 0, - "NSValue does not contain the right type to bridge to CGVector") - result = CGVector() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - source.getValue(&result!, size: MemoryLayout.size) - } else { - source.getValue(&result!) - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ source: NSValue, - result: inout CGVector?) - -> Bool { - if strcmp(source.objCType, _getObjCTypeEncoding(CGVector.self)) != 0 { - result = nil - return false - } - result = CGVector() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - source.getValue(&result!, size: MemoryLayout.size) - } else { - source.getValue(&result!) - } - return true - } - - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSValue?) - -> CGVector { - let unwrappedSource = source! - precondition(strcmp(unwrappedSource.objCType, - _getObjCTypeEncoding(CGVector.self)) == 0, - "NSValue does not contain the right type to bridge to CGVector") - var result = CGVector() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - unwrappedSource.getValue(&result, size: MemoryLayout.size) - } else { - unwrappedSource.getValue(&result) - } - return result - } -} - - -extension CGSize: _ObjectiveCBridgeable { - public func _bridgeToObjectiveC() -> NSValue { - var myself = self - return NSValue(bytes: &myself, objCType: _getObjCTypeEncoding(CGSize.self)) - } - - public static func _forceBridgeFromObjectiveC(_ source: NSValue, - result: inout CGSize?) { - precondition(strcmp(source.objCType, - _getObjCTypeEncoding(CGSize.self)) == 0, - "NSValue does not contain the right type to bridge to CGSize") - result = CGSize() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - source.getValue(&result!, size: MemoryLayout.size) - } else { - source.getValue(&result!) - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ source: NSValue, - result: inout CGSize?) - -> Bool { - if strcmp(source.objCType, _getObjCTypeEncoding(CGSize.self)) != 0 { - result = nil - return false - } - result = CGSize() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - source.getValue(&result!, size: MemoryLayout.size) - } else { - source.getValue(&result!) - } - return true - } - - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSValue?) - -> CGSize { - let unwrappedSource = source! - precondition(strcmp(unwrappedSource.objCType, - _getObjCTypeEncoding(CGSize.self)) == 0, - "NSValue does not contain the right type to bridge to CGSize") - var result = CGSize() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - unwrappedSource.getValue(&result, size: MemoryLayout.size) - } else { - unwrappedSource.getValue(&result) - } - return result - } -} - - -extension CGAffineTransform: _ObjectiveCBridgeable { - public func _bridgeToObjectiveC() -> NSValue { - var myself = self - return NSValue(bytes: &myself, objCType: _getObjCTypeEncoding(CGAffineTransform.self)) - } - - public static func _forceBridgeFromObjectiveC(_ source: NSValue, - result: inout CGAffineTransform?) { - precondition(strcmp(source.objCType, - _getObjCTypeEncoding(CGAffineTransform.self)) == 0, - "NSValue does not contain the right type to bridge to CGAffineTransform") - result = CGAffineTransform() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - source.getValue(&result!, size: MemoryLayout.size) - } else { - source.getValue(&result!) - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ source: NSValue, - result: inout CGAffineTransform?) - -> Bool { - if strcmp(source.objCType, _getObjCTypeEncoding(CGAffineTransform.self)) != 0 { - result = nil - return false - } - result = CGAffineTransform() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - source.getValue(&result!, size: MemoryLayout.size) - } else { - source.getValue(&result!) - } - return true - } - - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSValue?) - -> CGAffineTransform { - let unwrappedSource = source! - precondition(strcmp(unwrappedSource.objCType, - _getObjCTypeEncoding(CGAffineTransform.self)) == 0, - "NSValue does not contain the right type to bridge to CGAffineTransform") - var result = CGAffineTransform() - if #available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) { - unwrappedSource.getValue(&result, size: MemoryLayout.size) - } else { - unwrappedSource.getValue(&result) - } - return result - } -} - - -extension NSValue { - @available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - public func value(of type: StoredType.Type) -> StoredType? { - if StoredType.self is AnyObject.Type { - let encoding = String(cString: objCType) - // some subclasses of NSValue can return @ and the default initialized variant returns ^v for encoding - guard encoding == "^v" || encoding == "@" else { - return nil - } - return nonretainedObjectValue as? StoredType - } else if _isPOD(StoredType.self) { - var storedSize = 0 - var storedAlignment = 0 - NSGetSizeAndAlignment(objCType, &storedSize, &storedAlignment) - guard MemoryLayout.size == storedSize && MemoryLayout.alignment == storedAlignment else { - return nil - } - let allocated = UnsafeMutablePointer.allocate(capacity: 1) - defer { allocated.deallocate() } - getValue(allocated, size: storedSize) - return allocated.pointee - } - return nil - } -} diff --git a/Darwin/Foundation-swiftoverlay/Notification.swift b/Darwin/Foundation-swiftoverlay/Notification.swift deleted file mode 100644 index 5aeff54f9f..0000000000 --- a/Darwin/Foundation-swiftoverlay/Notification.swift +++ /dev/null @@ -1,166 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - - -/** - `Notification` encapsulates information broadcast to observers via a `NotificationCenter`. -*/ -public struct Notification : ReferenceConvertible, Equatable, Hashable { - public typealias ReferenceType = NSNotification - - /// A tag identifying the notification. - public var name: Name - - /// An object that the poster wishes to send to observers. - /// - /// Typically this is the object that posted the notification. - public var object: Any? - - /// Storage for values or objects related to this notification. - public var userInfo: [AnyHashable : Any]? - - /// Initialize a new `Notification`. - /// - /// The default value for `userInfo` is nil. - public init(name: Name, object: Any? = nil, userInfo: [AnyHashable : Any]? = nil) { - self.name = name - self.object = object - self.userInfo = userInfo - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(name) - - // FIXME: We should feed `object` to the hasher, too. However, this - // cannot be safely done if its value happens not to be Hashable. - - // FIXME: == compares `userInfo` by bridging it to NSDictionary, so its - // contents should be fully hashed here. However, to prevent stability - // issues with userInfo dictionaries that include non-Hashable values, - // we only feed the keys to the hasher here. - // - // FIXME: This makes for weak hashes. We really should hash everything - // that's compared in ==. - // - // The algorithm below is the same as the one used by Dictionary. - var commutativeKeyHash = 0 - if let userInfo = userInfo { - for (k, _) in userInfo { - var nestedHasher = hasher - nestedHasher.combine(k) - commutativeKeyHash ^= nestedHasher.finalize() - } - } - hasher.combine(commutativeKeyHash) - } - - public var description: String { - return "name = \(name.rawValue), object = \(String(describing: object)), userInfo = \(String(describing: userInfo))" - } - - public var debugDescription: String { - return description - } - - // FIXME: Handle directly via API Notes - public typealias Name = NSNotification.Name - - /// Compare two notifications for equality. - public static func ==(lhs: Notification, rhs: Notification) -> Bool { - if lhs.name.rawValue != rhs.name.rawValue { - return false - } - if let lhsObj = lhs.object { - if let rhsObj = rhs.object { - // FIXME: Converting an arbitrary value to AnyObject won't use a - // stable address when the value needs to be boxed. Therefore, - // this comparison makes == non-reflexive, violating Equatable - // requirements. (rdar://problem/49797185) - if lhsObj as AnyObject !== rhsObj as AnyObject { - return false - } - } else { - return false - } - } else if rhs.object != nil { - return false - } - if lhs.userInfo != nil { - if rhs.userInfo != nil { - // user info must be compared in the object form since the userInfo in swift is not comparable - - // FIXME: This violates reflexivity when userInfo contains any - // non-Hashable values, for the same reason as described above. - return lhs._bridgeToObjectiveC() == rhs._bridgeToObjectiveC() - } else { - return false - } - } else if rhs.userInfo != nil { - return false - } - return true - } -} - -extension Notification: CustomReflectable { - public var customMirror: Mirror { - var children: [(label: String?, value: Any)] = [] - children.append((label: "name", value: self.name.rawValue)) - if let o = self.object { - children.append((label: "object", value: o)) - } - if let u = self.userInfo { - children.append((label: "userInfo", value: u)) - } - let m = Mirror(self, children:children, displayStyle: Mirror.DisplayStyle.class) - return m - } -} - -extension Notification : _ObjectiveCBridgeable { - public static func _getObjectiveCType() -> Any.Type { - return NSNotification.self - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSNotification { - return NSNotification(name: name, object: object, userInfo: userInfo) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSNotification, result: inout Notification?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge type") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSNotification, result: inout Notification?) -> Bool { - result = Notification(name: x.name, object: x.object, userInfo: x.userInfo) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNotification?) -> Notification { - guard let src = source else { return Notification(name: Notification.Name("")) } - return Notification(name: src.name, object: src.object, userInfo: src.userInfo) - } -} - -extension NSNotification : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as Notification) - } -} - diff --git a/Darwin/Foundation-swiftoverlay/PersonNameComponents.swift b/Darwin/Foundation-swiftoverlay/PersonNameComponents.swift deleted file mode 100644 index 51c46febba..0000000000 --- a/Darwin/Foundation-swiftoverlay/PersonNameComponents.swift +++ /dev/null @@ -1,181 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -@available(macOS 10.11, iOS 9.0, *) -public struct PersonNameComponents : ReferenceConvertible, Hashable, Equatable, _MutableBoxing { - public typealias ReferenceType = NSPersonNameComponents - internal var _handle: _MutableHandle - - public init() { - _handle = _MutableHandle(adoptingReference: NSPersonNameComponents()) - } - - private init(reference: __shared NSPersonNameComponents) { - _handle = _MutableHandle(reference: reference) - } - - /* The below examples all assume the full name Dr. Johnathan Maple Appleseed Esq., nickname "Johnny" */ - - /* Pre-nominal letters denoting title, salutation, or honorific, e.g. Dr., Mr. */ - public var namePrefix: String? { - get { return _handle.map { $0.namePrefix } } - set { _applyMutation { $0.namePrefix = newValue } } - } - - /* Name bestowed upon an individual by one's parents, e.g. Johnathan */ - public var givenName: String? { - get { return _handle.map { $0.givenName } } - set { _applyMutation { $0.givenName = newValue } } - } - - /* Secondary given name chosen to differentiate those with the same first name, e.g. Maple */ - public var middleName: String? { - get { return _handle.map { $0.middleName } } - set { _applyMutation { $0.middleName = newValue } } - } - - /* Name passed from one generation to another to indicate lineage, e.g. Appleseed */ - public var familyName: String? { - get { return _handle.map { $0.familyName } } - set { _applyMutation { $0.familyName = newValue } } - } - - /* Post-nominal letters denoting degree, accreditation, or other honor, e.g. Esq., Jr., Ph.D. */ - public var nameSuffix: String? { - get { return _handle.map { $0.nameSuffix } } - set { _applyMutation { $0.nameSuffix = newValue } } - } - - /* Name substituted for the purposes of familiarity, e.g. "Johnny"*/ - public var nickname: String? { - get { return _handle.map { $0.nickname } } - set { _applyMutation { $0.nickname = newValue } } - } - - /* Each element of the phoneticRepresentation should correspond to an element of the original PersonNameComponents instance. - The phoneticRepresentation of the phoneticRepresentation object itself will be ignored. nil by default, must be instantiated. - */ - public var phoneticRepresentation: PersonNameComponents? { - get { return _handle.map { $0.phoneticRepresentation } } - set { _applyMutation { $0.phoneticRepresentation = newValue } } - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(_handle._uncopiedReference()) - } - - @available(macOS 10.11, iOS 9.0, *) - public static func ==(lhs : PersonNameComponents, rhs: PersonNameComponents) -> Bool { - // Don't copy references here; no one should be storing anything - return lhs._handle._uncopiedReference().isEqual(rhs._handle._uncopiedReference()) - } -} - -@available(macOS 10.11, iOS 9.0, *) -extension PersonNameComponents : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - public var description: String { - return self.customMirror.children.reduce("") { - $0.appending("\($1.label ?? ""): \($1.value) ") - } - } - - public var debugDescription: String { - return self.description - } - - public var customMirror: Mirror { - var c: [(label: String?, value: Any)] = [] - if let r = namePrefix { c.append((label: "namePrefix", value: r)) } - if let r = givenName { c.append((label: "givenName", value: r)) } - if let r = middleName { c.append((label: "middleName", value: r)) } - if let r = familyName { c.append((label: "familyName", value: r)) } - if let r = nameSuffix { c.append((label: "nameSuffix", value: r)) } - if let r = nickname { c.append((label: "nickname", value: r)) } - if let r = phoneticRepresentation { c.append((label: "phoneticRepresentation", value: r)) } - return Mirror(self, children: c, displayStyle: Mirror.DisplayStyle.struct) - } -} - -@available(macOS 10.11, iOS 9.0, *) -extension PersonNameComponents : _ObjectiveCBridgeable { - public static func _getObjectiveCType() -> Any.Type { - return NSPersonNameComponents.self - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSPersonNameComponents { - return _handle._copiedReference() - } - - public static func _forceBridgeFromObjectiveC(_ personNameComponents: NSPersonNameComponents, result: inout PersonNameComponents?) { - if !_conditionallyBridgeFromObjectiveC(personNameComponents, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ personNameComponents: NSPersonNameComponents, result: inout PersonNameComponents?) -> Bool { - result = PersonNameComponents(reference: personNameComponents) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSPersonNameComponents?) -> PersonNameComponents { - var result: PersonNameComponents? - _forceBridgeFromObjectiveC(source!, result: &result) - return result! - } -} - -@available(macOS 10.11, iOS 9.0, *) -extension NSPersonNameComponents : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as PersonNameComponents) - } -} - -@available(macOS 10.11, iOS 9.0, *) -extension PersonNameComponents : Codable { - private enum CodingKeys : Int, CodingKey { - case namePrefix - case givenName - case middleName - case familyName - case nameSuffix - case nickname - } - - public init(from decoder: Decoder) throws { - self.init() - - let container = try decoder.container(keyedBy: CodingKeys.self) - self.namePrefix = try container.decodeIfPresent(String.self, forKey: .namePrefix) - self.givenName = try container.decodeIfPresent(String.self, forKey: .givenName) - self.middleName = try container.decodeIfPresent(String.self, forKey: .middleName) - self.familyName = try container.decodeIfPresent(String.self, forKey: .familyName) - self.nameSuffix = try container.decodeIfPresent(String.self, forKey: .nameSuffix) - self.nickname = try container.decodeIfPresent(String.self, forKey: .nickname) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - if let np = self.namePrefix { try container.encode(np, forKey: .namePrefix) } - if let gn = self.givenName { try container.encode(gn, forKey: .givenName) } - if let mn = self.middleName { try container.encode(mn, forKey: .middleName) } - if let fn = self.familyName { try container.encode(fn, forKey: .familyName) } - if let ns = self.nameSuffix { try container.encode(ns, forKey: .nameSuffix) } - if let nn = self.nickname { try container.encode(nn, forKey: .nickname) } - } -} diff --git a/Darwin/Foundation-swiftoverlay/PlistEncoder.swift b/Darwin/Foundation-swiftoverlay/PlistEncoder.swift deleted file mode 100644 index 6c2061e6b1..0000000000 --- a/Darwin/Foundation-swiftoverlay/PlistEncoder.swift +++ /dev/null @@ -1,1851 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -// Plist Encoder -//===----------------------------------------------------------------------===// - -/// `PropertyListEncoder` facilitates the encoding of `Encodable` values into property lists. -// NOTE: older overlays had Foundation.PropertyListEncoder as the ObjC -// name. The two must coexist, so it was renamed. The old name must not -// be used in the new runtime. _TtC10Foundation20_PropertyListEncoder -// is the mangled name for Foundation._PropertyListEncoder. -@_objcRuntimeName(_TtC10Foundation20_PropertyListEncoder) -open class PropertyListEncoder { - - // MARK: - Options - - /// The output format to write the property list data in. Defaults to `.binary`. - open var outputFormat: PropertyListSerialization.PropertyListFormat = .binary - - /// Contextual user-provided information for use during encoding. - open var userInfo: [CodingUserInfoKey : Any] = [:] - - /// Options set on the top-level encoder to pass down the encoding hierarchy. - fileprivate struct _Options { - let outputFormat: PropertyListSerialization.PropertyListFormat - let userInfo: [CodingUserInfoKey : Any] - } - - /// The options set on the top-level encoder. - fileprivate var options: _Options { - return _Options(outputFormat: outputFormat, userInfo: userInfo) - } - - // MARK: - Constructing a Property List Encoder - - /// Initializes `self` with default strategies. - public init() {} - - // MARK: - Encoding Values - - /// Encodes the given top-level value and returns its property list representation. - /// - /// - parameter value: The value to encode. - /// - returns: A new `Data` value containing the encoded property list data. - /// - throws: `EncodingError.invalidValue` if a non-conforming floating-point value is encountered during encoding, and the encoding strategy is `.throw`. - /// - throws: An error if any value throws an error during encoding. - open func encode(_ value: Value) throws -> Data { - let topLevel = try encodeToTopLevelContainer(value) - if topLevel is NSNumber { - throw EncodingError.invalidValue(value, - EncodingError.Context(codingPath: [], - debugDescription: "Top-level \(Value.self) encoded as number property list fragment.")) - } else if topLevel is NSString { - throw EncodingError.invalidValue(value, - EncodingError.Context(codingPath: [], - debugDescription: "Top-level \(Value.self) encoded as string property list fragment.")) - } else if topLevel is NSDate { - throw EncodingError.invalidValue(value, - EncodingError.Context(codingPath: [], - debugDescription: "Top-level \(Value.self) encoded as date property list fragment.")) - } - - do { - return try PropertyListSerialization.data(fromPropertyList: topLevel, format: self.outputFormat, options: 0) - } catch { - throw EncodingError.invalidValue(value, - EncodingError.Context(codingPath: [], debugDescription: "Unable to encode the given top-level value as a property list", underlyingError: error)) - } - } - - /// Encodes the given top-level value and returns its plist-type representation. - /// - /// - parameter value: The value to encode. - /// - returns: A new top-level array or dictionary representing the value. - /// - throws: `EncodingError.invalidValue` if a non-conforming floating-point value is encountered during encoding, and the encoding strategy is `.throw`. - /// - throws: An error if any value throws an error during encoding. - internal func encodeToTopLevelContainer(_ value: Value) throws -> Any { - let encoder = __PlistEncoder(options: self.options) - guard let topLevel = try encoder.box_(value) else { - throw EncodingError.invalidValue(value, - EncodingError.Context(codingPath: [], - debugDescription: "Top-level \(Value.self) did not encode any values.")) - } - - return topLevel - } -} - -// MARK: - __PlistEncoder - -// NOTE: older overlays called this class _PlistEncoder. The two must -// coexist without a conflicting ObjC class name, so it was renamed. -// The old name must not be used in the new runtime. -fileprivate class __PlistEncoder : Encoder { - // MARK: Properties - - /// The encoder's storage. - fileprivate var storage: _PlistEncodingStorage - - /// Options set on the top-level encoder. - fileprivate let options: PropertyListEncoder._Options - - /// The path to the current point in encoding. - fileprivate(set) public var codingPath: [CodingKey] - - /// Contextual user-provided information for use during encoding. - public var userInfo: [CodingUserInfoKey : Any] { - return self.options.userInfo - } - - // MARK: - Initialization - - /// Initializes `self` with the given top-level encoder options. - fileprivate init(options: PropertyListEncoder._Options, codingPath: [CodingKey] = []) { - self.options = options - self.storage = _PlistEncodingStorage() - self.codingPath = codingPath - } - - /// Returns whether a new element can be encoded at this coding path. - /// - /// `true` if an element has not yet been encoded at this coding path; `false` otherwise. - fileprivate var canEncodeNewValue: Bool { - // Every time a new value gets encoded, the key it's encoded for is pushed onto the coding path (even if it's a nil key from an unkeyed container). - // At the same time, every time a container is requested, a new value gets pushed onto the storage stack. - // If there are more values on the storage stack than on the coding path, it means the value is requesting more than one container, which violates the precondition. - // - // This means that anytime something that can request a new container goes onto the stack, we MUST push a key onto the coding path. - // Things which will not request containers do not need to have the coding path extended for them (but it doesn't matter if it is, because they will not reach here). - return self.storage.count == self.codingPath.count - } - - // MARK: - Encoder Methods - public func container(keyedBy: Key.Type) -> KeyedEncodingContainer { - // If an existing keyed container was already requested, return that one. - let topContainer: NSMutableDictionary - if self.canEncodeNewValue { - // We haven't yet pushed a container at this level; do so here. - topContainer = self.storage.pushKeyedContainer() - } else { - guard let container = self.storage.containers.last as? NSMutableDictionary else { - preconditionFailure("Attempt to push new keyed encoding container when already previously encoded at this path.") - } - - topContainer = container - } - - let container = _PlistKeyedEncodingContainer(referencing: self, codingPath: self.codingPath, wrapping: topContainer) - return KeyedEncodingContainer(container) - } - - public func unkeyedContainer() -> UnkeyedEncodingContainer { - // If an existing unkeyed container was already requested, return that one. - let topContainer: NSMutableArray - if self.canEncodeNewValue { - // We haven't yet pushed a container at this level; do so here. - topContainer = self.storage.pushUnkeyedContainer() - } else { - guard let container = self.storage.containers.last as? NSMutableArray else { - preconditionFailure("Attempt to push new unkeyed encoding container when already previously encoded at this path.") - } - - topContainer = container - } - - return _PlistUnkeyedEncodingContainer(referencing: self, codingPath: self.codingPath, wrapping: topContainer) - } - - public func singleValueContainer() -> SingleValueEncodingContainer { - return self - } -} - -// MARK: - Encoding Storage and Containers - -fileprivate struct _PlistEncodingStorage { - // MARK: Properties - - /// The container stack. - /// Elements may be any one of the plist types (NSNumber, NSString, NSDate, NSArray, NSDictionary). - private(set) fileprivate var containers: [NSObject] = [] - - // MARK: - Initialization - - /// Initializes `self` with no containers. - fileprivate init() {} - - // MARK: - Modifying the Stack - - fileprivate var count: Int { - return self.containers.count - } - - fileprivate mutating func pushKeyedContainer() -> NSMutableDictionary { - let dictionary = NSMutableDictionary() - self.containers.append(dictionary) - return dictionary - } - - fileprivate mutating func pushUnkeyedContainer() -> NSMutableArray { - let array = NSMutableArray() - self.containers.append(array) - return array - } - - fileprivate mutating func push(container: __owned NSObject) { - self.containers.append(container) - } - - fileprivate mutating func popContainer() -> NSObject { - precondition(!self.containers.isEmpty, "Empty container stack.") - return self.containers.popLast()! - } -} - -// MARK: - Encoding Containers - -fileprivate struct _PlistKeyedEncodingContainer : KeyedEncodingContainerProtocol { - typealias Key = K - - // MARK: Properties - - /// A reference to the encoder we're writing to. - private let encoder: __PlistEncoder - - /// A reference to the container we're writing to. - private let container: NSMutableDictionary - - /// The path of coding keys taken to get to this point in encoding. - private(set) public var codingPath: [CodingKey] - - // MARK: - Initialization - - /// Initializes `self` with the given references. - fileprivate init(referencing encoder: __PlistEncoder, codingPath: [CodingKey], wrapping container: NSMutableDictionary) { - self.encoder = encoder - self.codingPath = codingPath - self.container = container - } - - // MARK: - KeyedEncodingContainerProtocol Methods - - public mutating func encodeNil(forKey key: Key) throws { self.container[key.stringValue] = _plistNullNSString } - public mutating func encode(_ value: Bool, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: Int, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: Int8, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: Int16, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: Int32, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: Int64, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: UInt, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: UInt8, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: UInt16, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: UInt32, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: UInt64, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: String, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: Float, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: Double, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - - public mutating func encode(_ value: T, forKey key: Key) throws { - self.encoder.codingPath.append(key) - defer { self.encoder.codingPath.removeLast() } - self.container[key.stringValue] = try self.encoder.box(value) - } - - public mutating func nestedContainer(keyedBy keyType: NestedKey.Type, forKey key: Key) -> KeyedEncodingContainer { - let containerKey = key.stringValue - let dictionary: NSMutableDictionary - if let existingContainer = self.container[containerKey] { - precondition( - existingContainer is NSMutableDictionary, - "Attempt to re-encode into nested KeyedEncodingContainer<\(Key.self)> for key \"\(containerKey)\" is invalid: non-keyed container already encoded for this key" - ) - dictionary = existingContainer as! NSMutableDictionary - } else { - dictionary = NSMutableDictionary() - self.container[containerKey] = dictionary - } - - self.codingPath.append(key) - defer { self.codingPath.removeLast() } - - let container = _PlistKeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: dictionary) - return KeyedEncodingContainer(container) - } - - public mutating func nestedUnkeyedContainer(forKey key: Key) -> UnkeyedEncodingContainer { - let containerKey = key.stringValue - let array: NSMutableArray - if let existingContainer = self.container[containerKey] { - precondition( - existingContainer is NSMutableArray, - "Attempt to re-encode into nested UnkeyedEncodingContainer for key \"\(containerKey)\" is invalid: keyed container/single value already encoded for this key" - ) - array = existingContainer as! NSMutableArray - } else { - array = NSMutableArray() - self.container[containerKey] = array - } - - self.codingPath.append(key) - defer { self.codingPath.removeLast() } - return _PlistUnkeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: array) - } - - public mutating func superEncoder() -> Encoder { - return __PlistReferencingEncoder(referencing: self.encoder, at: _PlistKey.super, wrapping: self.container) - } - - public mutating func superEncoder(forKey key: Key) -> Encoder { - return __PlistReferencingEncoder(referencing: self.encoder, at: key, wrapping: self.container) - } -} - -fileprivate struct _PlistUnkeyedEncodingContainer : UnkeyedEncodingContainer { - // MARK: Properties - - /// A reference to the encoder we're writing to. - private let encoder: __PlistEncoder - - /// A reference to the container we're writing to. - private let container: NSMutableArray - - /// The path of coding keys taken to get to this point in encoding. - private(set) public var codingPath: [CodingKey] - - /// The number of elements encoded into the container. - public var count: Int { - return self.container.count - } - - // MARK: - Initialization - - /// Initializes `self` with the given references. - fileprivate init(referencing encoder: __PlistEncoder, codingPath: [CodingKey], wrapping container: NSMutableArray) { - self.encoder = encoder - self.codingPath = codingPath - self.container = container - } - - // MARK: - UnkeyedEncodingContainer Methods - - public mutating func encodeNil() throws { self.container.add(_plistNullNSString) } - public mutating func encode(_ value: Bool) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int8) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int16) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int32) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int64) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt8) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt16) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt32) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt64) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Float) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Double) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: String) throws { self.container.add(self.encoder.box(value)) } - - public mutating func encode(_ value: T) throws { - self.encoder.codingPath.append(_PlistKey(index: self.count)) - defer { self.encoder.codingPath.removeLast() } - self.container.add(try self.encoder.box(value)) - } - - public mutating func nestedContainer(keyedBy keyType: NestedKey.Type) -> KeyedEncodingContainer { - self.codingPath.append(_PlistKey(index: self.count)) - defer { self.codingPath.removeLast() } - - let dictionary = NSMutableDictionary() - self.container.add(dictionary) - - let container = _PlistKeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: dictionary) - return KeyedEncodingContainer(container) - } - - public mutating func nestedUnkeyedContainer() -> UnkeyedEncodingContainer { - self.codingPath.append(_PlistKey(index: self.count)) - defer { self.codingPath.removeLast() } - - let array = NSMutableArray() - self.container.add(array) - return _PlistUnkeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: array) - } - - public mutating func superEncoder() -> Encoder { - return __PlistReferencingEncoder(referencing: self.encoder, at: self.container.count, wrapping: self.container) - } -} - -extension __PlistEncoder : SingleValueEncodingContainer { - // MARK: - SingleValueEncodingContainer Methods - - private func assertCanEncodeNewValue() { - precondition(self.canEncodeNewValue, "Attempt to encode value through single value container when previously value already encoded.") - } - - public func encodeNil() throws { - assertCanEncodeNewValue() - self.storage.push(container: _plistNullNSString) - } - - public func encode(_ value: Bool) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int8) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int16) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int32) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int64) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt8) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt16) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt32) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt64) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: String) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Float) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Double) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: T) throws { - assertCanEncodeNewValue() - try self.storage.push(container: self.box(value)) - } -} - -// MARK: - Concrete Value Representations - -extension __PlistEncoder { - - /// Returns the given value boxed in a container appropriate for pushing onto the container stack. - fileprivate func box(_ value: Bool) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: Int) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: Int8) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: Int16) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: Int32) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: Int64) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: UInt) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: UInt8) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: UInt16) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: UInt32) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: UInt64) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: Float) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: Double) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: String) -> NSObject { return NSString(string: value) } - - fileprivate func box(_ value: T) throws -> NSObject { - return try self.box_(value) ?? NSDictionary() - } - - fileprivate func box_(_ value: T) throws -> NSObject? { - if T.self == Date.self || T.self == NSDate.self { - // PropertyListSerialization handles NSDate directly. - return (value as! NSDate) - } else if T.self == Data.self || T.self == NSData.self { - // PropertyListSerialization handles NSData directly. - return (value as! NSData) - } - - // The value should request a container from the __PlistEncoder. - let depth = self.storage.count - do { - try value.encode(to: self) - } catch let error { - // If the value pushed a container before throwing, pop it back off to restore state. - if self.storage.count > depth { - let _ = self.storage.popContainer() - } - - throw error - } - - // The top container should be a new container. - guard self.storage.count > depth else { - return nil - } - - return self.storage.popContainer() - } -} - -// MARK: - __PlistReferencingEncoder - -/// __PlistReferencingEncoder is a special subclass of __PlistEncoder which has its own storage, but references the contents of a different encoder. -/// It's used in superEncoder(), which returns a new encoder for encoding a superclass -- the lifetime of the encoder should not escape the scope it's created in, but it doesn't necessarily know when it's done being used (to write to the original container). -// NOTE: older overlays called this class _PlistReferencingEncoder. -// The two must coexist without a conflicting ObjC class name, so it -// was renamed. The old name must not be used in the new runtime. -fileprivate class __PlistReferencingEncoder : __PlistEncoder { - // MARK: Reference types. - - /// The type of container we're referencing. - private enum Reference { - /// Referencing a specific index in an array container. - case array(NSMutableArray, Int) - - /// Referencing a specific key in a dictionary container. - case dictionary(NSMutableDictionary, String) - } - - // MARK: - Properties - - /// The encoder we're referencing. - private let encoder: __PlistEncoder - - /// The container reference itself. - private let reference: Reference - - // MARK: - Initialization - - /// Initializes `self` by referencing the given array container in the given encoder. - fileprivate init(referencing encoder: __PlistEncoder, at index: Int, wrapping array: NSMutableArray) { - self.encoder = encoder - self.reference = .array(array, index) - super.init(options: encoder.options, codingPath: encoder.codingPath) - - self.codingPath.append(_PlistKey(index: index)) - } - - /// Initializes `self` by referencing the given dictionary container in the given encoder. - fileprivate init(referencing encoder: __PlistEncoder, at key: CodingKey, wrapping dictionary: NSMutableDictionary) { - self.encoder = encoder - self.reference = .dictionary(dictionary, key.stringValue) - super.init(options: encoder.options, codingPath: encoder.codingPath) - - self.codingPath.append(key) - } - - // MARK: - Coding Path Operations - - fileprivate override var canEncodeNewValue: Bool { - // With a regular encoder, the storage and coding path grow together. - // A referencing encoder, however, inherits its parents coding path, as well as the key it was created for. - // We have to take this into account. - return self.storage.count == self.codingPath.count - self.encoder.codingPath.count - 1 - } - - // MARK: - Deinitialization - - // Finalizes `self` by writing the contents of our storage to the referenced encoder's storage. - deinit { - let value: Any - switch self.storage.count { - case 0: value = NSDictionary() - case 1: value = self.storage.popContainer() - default: fatalError("Referencing encoder deallocated with multiple containers on stack.") - } - - switch self.reference { - case .array(let array, let index): - array.insert(value, at: index) - - case .dictionary(let dictionary, let key): - dictionary[NSString(string: key)] = value - } - } -} - -//===----------------------------------------------------------------------===// -// Plist Decoder -//===----------------------------------------------------------------------===// - -/// `PropertyListDecoder` facilitates the decoding of property list values into semantic `Decodable` types. -// NOTE: older overlays had Foundation.PropertyListDecoder as the ObjC -// name. The two must coexist, so it was renamed. The old name must not -// be used in the new runtime. _TtC10Foundation20_PropertyListDecoder -// is the mangled name for Foundation._PropertyListDecoder. -@_objcRuntimeName(_TtC10Foundation20_PropertyListDecoder) -open class PropertyListDecoder { - // MARK: Options - - /// Contextual user-provided information for use during decoding. - open var userInfo: [CodingUserInfoKey : Any] = [:] - - /// Options set on the top-level encoder to pass down the decoding hierarchy. - fileprivate struct _Options { - let userInfo: [CodingUserInfoKey : Any] - } - - /// The options set on the top-level decoder. - fileprivate var options: _Options { - return _Options(userInfo: userInfo) - } - - // MARK: - Constructing a Property List Decoder - - /// Initializes `self` with default strategies. - public init() {} - - // MARK: - Decoding Values - - /// Decodes a top-level value of the given type from the given property list representation. - /// - /// - parameter type: The type of the value to decode. - /// - parameter data: The data to decode from. - /// - returns: A value of the requested type. - /// - throws: `DecodingError.dataCorrupted` if values requested from the payload are corrupted, or if the given data is not a valid property list. - /// - throws: An error if any value throws an error during decoding. - open func decode(_ type: T.Type, from data: Data) throws -> T { - var format: PropertyListSerialization.PropertyListFormat = .binary - return try decode(type, from: data, format: &format) - } - - /// Decodes a top-level value of the given type from the given property list representation. - /// - /// - parameter type: The type of the value to decode. - /// - parameter data: The data to decode from. - /// - parameter format: The parsed property list format. - /// - returns: A value of the requested type along with the detected format of the property list. - /// - throws: `DecodingError.dataCorrupted` if values requested from the payload are corrupted, or if the given data is not a valid property list. - /// - throws: An error if any value throws an error during decoding. - open func decode(_ type: T.Type, from data: Data, format: inout PropertyListSerialization.PropertyListFormat) throws -> T { - let topLevel: Any - do { - topLevel = try PropertyListSerialization.propertyList(from: data, options: [], format: &format) - } catch { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: [], debugDescription: "The given data was not a valid property list.", underlyingError: error)) - } - - return try decode(type, fromTopLevel: topLevel) - } - - /// Decodes a top-level value of the given type from the given property list container (top-level array or dictionary). - /// - /// - parameter type: The type of the value to decode. - /// - parameter container: The top-level plist container. - /// - returns: A value of the requested type. - /// - throws: `DecodingError.dataCorrupted` if values requested from the payload are corrupted, or if the given data is not a valid property list. - /// - throws: An error if any value throws an error during decoding. - internal func decode(_ type: T.Type, fromTopLevel container: Any) throws -> T { - let decoder = __PlistDecoder(referencing: container, options: self.options) - guard let value = try decoder.unbox(container, as: type) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: [], debugDescription: "The given data did not contain a top-level value.")) - } - - return value - } -} - -// MARK: - __PlistDecoder - -// NOTE: older overlays called this class _PlistDecoder. The two must -// coexist without a conflicting ObjC class name, so it was renamed. -// The old name must not be used in the new runtime. -fileprivate class __PlistDecoder : Decoder { - // MARK: Properties - - /// The decoder's storage. - fileprivate var storage: _PlistDecodingStorage - - /// Options set on the top-level decoder. - fileprivate let options: PropertyListDecoder._Options - - /// The path to the current point in encoding. - fileprivate(set) public var codingPath: [CodingKey] - - /// Contextual user-provided information for use during encoding. - public var userInfo: [CodingUserInfoKey : Any] { - return self.options.userInfo - } - - // MARK: - Initialization - - /// Initializes `self` with the given top-level container and options. - fileprivate init(referencing container: Any, at codingPath: [CodingKey] = [], options: PropertyListDecoder._Options) { - self.storage = _PlistDecodingStorage() - self.storage.push(container: container) - self.codingPath = codingPath - self.options = options - } - - // MARK: - Decoder Methods - - public func container(keyedBy type: Key.Type) throws -> KeyedDecodingContainer { - guard !(self.storage.topContainer is NSNull) else { - throw DecodingError.valueNotFound(KeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get keyed decoding container -- found null value instead.")) - } - - guard let topContainer = self.storage.topContainer as? [String : Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: self.storage.topContainer) - } - - let container = _PlistKeyedDecodingContainer(referencing: self, wrapping: topContainer) - return KeyedDecodingContainer(container) - } - - public func unkeyedContainer() throws -> UnkeyedDecodingContainer { - guard !(self.storage.topContainer is NSNull) else { - throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get unkeyed decoding container -- found null value instead.")) - } - - guard let topContainer = self.storage.topContainer as? [Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: self.storage.topContainer) - } - - return _PlistUnkeyedDecodingContainer(referencing: self, wrapping: topContainer) - } - - public func singleValueContainer() throws -> SingleValueDecodingContainer { - return self - } -} - -// MARK: - Decoding Storage - -fileprivate struct _PlistDecodingStorage { - // MARK: Properties - - /// The container stack. - /// Elements may be any one of the plist types (NSNumber, Date, String, Array, [String : Any]). - private(set) fileprivate var containers: [Any] = [] - - // MARK: - Initialization - - /// Initializes `self` with no containers. - fileprivate init() {} - - // MARK: - Modifying the Stack - - fileprivate var count: Int { - return self.containers.count - } - - fileprivate var topContainer: Any { - precondition(!self.containers.isEmpty, "Empty container stack.") - return self.containers.last! - } - - fileprivate mutating func push(container: __owned Any) { - self.containers.append(container) - } - - fileprivate mutating func popContainer() { - precondition(!self.containers.isEmpty, "Empty container stack.") - self.containers.removeLast() - } -} - -// MARK: Decoding Containers - -fileprivate struct _PlistKeyedDecodingContainer : KeyedDecodingContainerProtocol { - typealias Key = K - - // MARK: Properties - - /// A reference to the decoder we're reading from. - private let decoder: __PlistDecoder - - /// A reference to the container we're reading from. - private let container: [String : Any] - - /// The path of coding keys taken to get to this point in decoding. - private(set) public var codingPath: [CodingKey] - - // MARK: - Initialization - - /// Initializes `self` by referencing the given decoder and container. - fileprivate init(referencing decoder: __PlistDecoder, wrapping container: [String : Any]) { - self.decoder = decoder - self.container = container - self.codingPath = decoder.codingPath - } - - // MARK: - KeyedDecodingContainerProtocol Methods - - public var allKeys: [Key] { - return self.container.keys.compactMap { Key(stringValue: $0) } - } - - public func contains(_ key: Key) -> Bool { - return self.container[key.stringValue] != nil - } - - public func decodeNil(forKey key: Key) throws -> Bool { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - guard let value = entry as? String else { - return false - } - - return value == _plistNull - } - - public func decode(_ type: Bool.Type, forKey key: Key) throws -> Bool { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Bool.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int.Type, forKey key: Key) throws -> Int { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int8.Type, forKey key: Key) throws -> Int8 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int8.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int16.Type, forKey key: Key) throws -> Int16 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int16.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int32.Type, forKey key: Key) throws -> Int32 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int32.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int64.Type, forKey key: Key) throws -> Int64 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int64.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt.Type, forKey key: Key) throws -> UInt { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt8.Type, forKey key: Key) throws -> UInt8 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt8.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt16.Type, forKey key: Key) throws -> UInt16 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt16.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt32.Type, forKey key: Key) throws -> UInt32 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt32.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt64.Type, forKey key: Key) throws -> UInt64 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt64.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Float.Type, forKey key: Key) throws -> Float { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - guard let value = try self.decoder.unbox(entry, as: Float.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Double.Type, forKey key: Key) throws -> Double { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Double.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: String.Type, forKey key: Key) throws -> String { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: String.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: T.Type, forKey key: Key) throws -> T { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: type) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func nestedContainer(keyedBy type: NestedKey.Type, forKey key: Key) throws -> KeyedDecodingContainer { - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = self.container[key.stringValue] else { - throw DecodingError.valueNotFound(KeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get nested keyed container -- no value found for key \"\(key.stringValue)\"")) - } - - guard let dictionary = value as? [String : Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: value) - } - - let container = _PlistKeyedDecodingContainer(referencing: self.decoder, wrapping: dictionary) - return KeyedDecodingContainer(container) - } - - public func nestedUnkeyedContainer(forKey key: Key) throws -> UnkeyedDecodingContainer { - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = self.container[key.stringValue] else { - throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get nested unkeyed container -- no value found for key \"\(key.stringValue)\"")) - } - - guard let array = value as? [Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: value) - } - - return _PlistUnkeyedDecodingContainer(referencing: self.decoder, wrapping: array) - } - - private func _superDecoder(forKey key: __owned CodingKey) throws -> Decoder { - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - let value: Any = self.container[key.stringValue] ?? NSNull() - return __PlistDecoder(referencing: value, at: self.decoder.codingPath, options: self.decoder.options) - } - - public func superDecoder() throws -> Decoder { - return try _superDecoder(forKey: _PlistKey.super) - } - - public func superDecoder(forKey key: Key) throws -> Decoder { - return try _superDecoder(forKey: key) - } -} - -fileprivate struct _PlistUnkeyedDecodingContainer : UnkeyedDecodingContainer { - // MARK: Properties - - /// A reference to the decoder we're reading from. - private let decoder: __PlistDecoder - - /// A reference to the container we're reading from. - private let container: [Any] - - /// The path of coding keys taken to get to this point in decoding. - private(set) public var codingPath: [CodingKey] - - /// The index of the element we're about to decode. - private(set) public var currentIndex: Int - - // MARK: - Initialization - - /// Initializes `self` by referencing the given decoder and container. - fileprivate init(referencing decoder: __PlistDecoder, wrapping container: [Any]) { - self.decoder = decoder - self.container = container - self.codingPath = decoder.codingPath - self.currentIndex = 0 - } - - // MARK: - UnkeyedDecodingContainer Methods - - public var count: Int? { - return self.container.count - } - - public var isAtEnd: Bool { - return self.currentIndex >= self.count! - } - - public mutating func decodeNil() throws -> Bool { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(Any?.self, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - if self.container[self.currentIndex] is NSNull { - self.currentIndex += 1 - return true - } else { - return false - } - } - - public mutating func decode(_ type: Bool.Type) throws -> Bool { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Bool.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int.Type) throws -> Int { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int8.Type) throws -> Int8 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int8.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int16.Type) throws -> Int16 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int16.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int32.Type) throws -> Int32 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int32.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int64.Type) throws -> Int64 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int64.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt.Type) throws -> UInt { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt8.Type) throws -> UInt8 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt8.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt16.Type) throws -> UInt16 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt16.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt32.Type) throws -> UInt32 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt32.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt64.Type) throws -> UInt64 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt64.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Float.Type) throws -> Float { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Float.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Double.Type) throws -> Double { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Double.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: String.Type) throws -> String { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: String.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: T.Type) throws -> T { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: type) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func nestedContainer(keyedBy type: NestedKey.Type) throws -> KeyedDecodingContainer { - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(KeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get nested keyed container -- unkeyed container is at end.")) - } - - let value = self.container[self.currentIndex] - guard !(value is NSNull) else { - throw DecodingError.valueNotFound(KeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get keyed decoding container -- found null value instead.")) - } - - guard let dictionary = value as? [String : Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: value) - } - - self.currentIndex += 1 - let container = _PlistKeyedDecodingContainer(referencing: self.decoder, wrapping: dictionary) - return KeyedDecodingContainer(container) - } - - public mutating func nestedUnkeyedContainer() throws -> UnkeyedDecodingContainer { - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get nested unkeyed container -- unkeyed container is at end.")) - } - - let value = self.container[self.currentIndex] - guard !(value is NSNull) else { - throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get keyed decoding container -- found null value instead.")) - } - - guard let array = value as? [Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: value) - } - - self.currentIndex += 1 - return _PlistUnkeyedDecodingContainer(referencing: self.decoder, wrapping: array) - } - - public mutating func superDecoder() throws -> Decoder { - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(Decoder.self, DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get superDecoder() -- unkeyed container is at end.")) - } - - let value = self.container[self.currentIndex] - self.currentIndex += 1 - return __PlistDecoder(referencing: value, at: self.decoder.codingPath, options: self.decoder.options) - } -} - -extension __PlistDecoder : SingleValueDecodingContainer { - // MARK: SingleValueDecodingContainer Methods - - private func expectNonNull(_ type: T.Type) throws { - guard !self.decodeNil() else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "Expected \(type) but found null value instead.")) - } - } - - public func decodeNil() -> Bool { - guard let string = self.storage.topContainer as? String else { - return false - } - - return string == _plistNull - } - - public func decode(_ type: Bool.Type) throws -> Bool { - try expectNonNull(Bool.self) - return try self.unbox(self.storage.topContainer, as: Bool.self)! - } - - public func decode(_ type: Int.Type) throws -> Int { - try expectNonNull(Int.self) - return try self.unbox(self.storage.topContainer, as: Int.self)! - } - - public func decode(_ type: Int8.Type) throws -> Int8 { - try expectNonNull(Int8.self) - return try self.unbox(self.storage.topContainer, as: Int8.self)! - } - - public func decode(_ type: Int16.Type) throws -> Int16 { - try expectNonNull(Int16.self) - return try self.unbox(self.storage.topContainer, as: Int16.self)! - } - - public func decode(_ type: Int32.Type) throws -> Int32 { - try expectNonNull(Int32.self) - return try self.unbox(self.storage.topContainer, as: Int32.self)! - } - - public func decode(_ type: Int64.Type) throws -> Int64 { - try expectNonNull(Int64.self) - return try self.unbox(self.storage.topContainer, as: Int64.self)! - } - - public func decode(_ type: UInt.Type) throws -> UInt { - try expectNonNull(UInt.self) - return try self.unbox(self.storage.topContainer, as: UInt.self)! - } - - public func decode(_ type: UInt8.Type) throws -> UInt8 { - try expectNonNull(UInt8.self) - return try self.unbox(self.storage.topContainer, as: UInt8.self)! - } - - public func decode(_ type: UInt16.Type) throws -> UInt16 { - try expectNonNull(UInt16.self) - return try self.unbox(self.storage.topContainer, as: UInt16.self)! - } - - public func decode(_ type: UInt32.Type) throws -> UInt32 { - try expectNonNull(UInt32.self) - return try self.unbox(self.storage.topContainer, as: UInt32.self)! - } - - public func decode(_ type: UInt64.Type) throws -> UInt64 { - try expectNonNull(UInt64.self) - return try self.unbox(self.storage.topContainer, as: UInt64.self)! - } - - public func decode(_ type: Float.Type) throws -> Float { - try expectNonNull(Float.self) - return try self.unbox(self.storage.topContainer, as: Float.self)! - } - - public func decode(_ type: Double.Type) throws -> Double { - try expectNonNull(Double.self) - return try self.unbox(self.storage.topContainer, as: Double.self)! - } - - public func decode(_ type: String.Type) throws -> String { - try expectNonNull(String.self) - return try self.unbox(self.storage.topContainer, as: String.self)! - } - - public func decode(_ type: T.Type) throws -> T { - try expectNonNull(type) - return try self.unbox(self.storage.topContainer, as: type)! - } -} - -// MARK: - Concrete Value Representations - -extension __PlistDecoder { - /// Returns the given value unboxed from a container. - fileprivate func unbox(_ value: Any, as type: Bool.Type) throws -> Bool? { - if let string = value as? String, string == _plistNull { return nil } - - if let number = value as? NSNumber { - // TODO: Add a flag to coerce non-boolean numbers into Bools? - if number === kCFBooleanTrue as NSNumber { - return true - } else if number === kCFBooleanFalse as NSNumber { - return false - } - - /* FIXME: If swift-corelibs-foundation doesn't change to use NSNumber, this code path will need to be included and tested: - } else if let bool = value as? Bool { - return bool - */ - - } - - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - fileprivate func unbox(_ value: Any, as type: Int.Type) throws -> Int? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int = number.intValue - guard NSNumber(value: int) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return int - } - - fileprivate func unbox(_ value: Any, as type: Int8.Type) throws -> Int8? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int8 = number.int8Value - guard NSNumber(value: int8) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return int8 - } - - fileprivate func unbox(_ value: Any, as type: Int16.Type) throws -> Int16? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int16 = number.int16Value - guard NSNumber(value: int16) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return int16 - } - - fileprivate func unbox(_ value: Any, as type: Int32.Type) throws -> Int32? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int32 = number.int32Value - guard NSNumber(value: int32) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return int32 - } - - fileprivate func unbox(_ value: Any, as type: Int64.Type) throws -> Int64? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int64 = number.int64Value - guard NSNumber(value: int64) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return int64 - } - - fileprivate func unbox(_ value: Any, as type: UInt.Type) throws -> UInt? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint = number.uintValue - guard NSNumber(value: uint) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return uint - } - - fileprivate func unbox(_ value: Any, as type: UInt8.Type) throws -> UInt8? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint8 = number.uint8Value - guard NSNumber(value: uint8) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return uint8 - } - - fileprivate func unbox(_ value: Any, as type: UInt16.Type) throws -> UInt16? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint16 = number.uint16Value - guard NSNumber(value: uint16) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return uint16 - } - - fileprivate func unbox(_ value: Any, as type: UInt32.Type) throws -> UInt32? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint32 = number.uint32Value - guard NSNumber(value: uint32) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return uint32 - } - - fileprivate func unbox(_ value: Any, as type: UInt64.Type) throws -> UInt64? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint64 = number.uint64Value - guard NSNumber(value: uint64) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return uint64 - } - - fileprivate func unbox(_ value: Any, as type: Float.Type) throws -> Float? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let float = number.floatValue - guard NSNumber(value: float) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return float - } - - fileprivate func unbox(_ value: Any, as type: Double.Type) throws -> Double? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let double = number.doubleValue - guard NSNumber(value: double) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return double - } - - fileprivate func unbox(_ value: Any, as type: String.Type) throws -> String? { - guard let string = value as? String else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - return string == _plistNull ? nil : string - } - - fileprivate func unbox(_ value: Any, as type: Date.Type) throws -> Date? { - if let string = value as? String, string == _plistNull { return nil } - - guard let date = value as? Date else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - return date - } - - fileprivate func unbox(_ value: Any, as type: Data.Type) throws -> Data? { - if let string = value as? String, string == _plistNull { return nil } - - guard let data = value as? Data else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - return data - } - - fileprivate func unbox(_ value: Any, as type: T.Type) throws -> T? { - if type == Date.self || type == NSDate.self { - return try self.unbox(value, as: Date.self) as? T - } else if type == Data.self || type == NSData.self { - return try self.unbox(value, as: Data.self) as? T - } else { - self.storage.push(container: value) - defer { self.storage.popContainer() } - return try type.init(from: self) - } - } -} - -//===----------------------------------------------------------------------===// -// Shared Plist Null Representation -//===----------------------------------------------------------------------===// - -// Since plists do not support null values by default, we will encode them as "$null". -fileprivate let _plistNull = "$null" -fileprivate let _plistNullNSString = NSString(string: _plistNull) - -//===----------------------------------------------------------------------===// -// Shared Key Types -//===----------------------------------------------------------------------===// - -fileprivate struct _PlistKey : CodingKey { - public var stringValue: String - public var intValue: Int? - - public init?(stringValue: String) { - self.stringValue = stringValue - self.intValue = nil - } - - public init?(intValue: Int) { - self.stringValue = "\(intValue)" - self.intValue = intValue - } - - fileprivate init(index: Int) { - self.stringValue = "Index \(index)" - self.intValue = index - } - - fileprivate static let `super` = _PlistKey(stringValue: "super")! -} diff --git a/Darwin/Foundation-swiftoverlay/Pointers+DataProtocol.swift b/Darwin/Foundation-swiftoverlay/Pointers+DataProtocol.swift deleted file mode 100644 index 77acc243fe..0000000000 --- a/Darwin/Foundation-swiftoverlay/Pointers+DataProtocol.swift +++ /dev/null @@ -1,24 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2018 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - - -extension UnsafeRawBufferPointer : DataProtocol { - public var regions: CollectionOfOne { - return CollectionOfOne(self) - } -} - -extension UnsafeBufferPointer : DataProtocol where Element == UInt8 { - public var regions: CollectionOfOne> { - return CollectionOfOne(self) - } -} diff --git a/Darwin/Foundation-swiftoverlay/Progress.swift b/Darwin/Foundation-swiftoverlay/Progress.swift deleted file mode 100644 index 9d5e8b84e7..0000000000 --- a/Darwin/Foundation-swiftoverlay/Progress.swift +++ /dev/null @@ -1,85 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -extension Progress { - @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) - public var estimatedTimeRemaining: TimeInterval? { - get { - guard let v = self.__estimatedTimeRemaining else { return nil } - return v.doubleValue - } - set { - guard let nv = newValue else { - self.__estimatedTimeRemaining = nil - return - } - let v = NSNumber(value: nv) - self.__estimatedTimeRemaining = v - } - } - - @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) - public var throughput: Int? { - get { - guard let v = self.__throughput else { return nil } - return v.intValue - } - set { - guard let nv = newValue else { - self.__throughput = nil - return - } - let v = NSNumber(value: nv) - self.__throughput = v - } - } - - @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) - public var fileTotalCount: Int? { - get { - guard let v = self.__fileTotalCount else { return nil } - return v.intValue - } - set { - guard let nv = newValue else { - self.__fileTotalCount = nil - return - } - let v = NSNumber(value: nv) - self.__fileTotalCount = v - } - } - - @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) - public var fileCompletedCount: Int? { - get { - guard let v = self.__fileCompletedCount else { return nil } - return v.intValue - } - set { - guard let nv = newValue else { - self.__fileCompletedCount = nil - return - } - let v = NSNumber(value: nv) - self.__fileCompletedCount = v - } - } - - public func performAsCurrent(withPendingUnitCount unitCount: Int64, using work: () throws -> ReturnType) rethrows -> ReturnType { - becomeCurrent(withPendingUnitCount: unitCount) - defer { resignCurrent() } - return try work() - } -} diff --git a/Darwin/Foundation-swiftoverlay/Publishers+KeyValueObserving.swift b/Darwin/Foundation-swiftoverlay/Publishers+KeyValueObserving.swift deleted file mode 100644 index f8cad17b46..0000000000 --- a/Darwin/Foundation-swiftoverlay/Publishers+KeyValueObserving.swift +++ /dev/null @@ -1,210 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// Only support 64bit -#if !(os(iOS) && (arch(i386) || arch(arm))) - -@_exported import Foundation // Clang module -import Combine - -// The following protocol is so that we can reference `Self` in the Publisher -// below. This is based on a trick used in the the standard library's -// implementation of `NSObject.observe(key path)` -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -public protocol _KeyValueCodingAndObservingPublishing {} - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension NSObject: _KeyValueCodingAndObservingPublishing {} - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension _KeyValueCodingAndObservingPublishing where Self: NSObject { - /// Publish values when the value identified by a KVO-compliant keypath changes. - /// - /// - Parameters: - /// - keyPath: The keypath of the property to publish. - /// - options: Key-value observing options. - /// - Returns: A publisher that emits elements each time the property’s value changes. - public func publisher(for keyPath: KeyPath, - options: NSKeyValueObservingOptions = [.initial, .new]) - -> NSObject.KeyValueObservingPublisher { - return NSObject.KeyValueObservingPublisher(object: self, keyPath: keyPath, options: options) - } -} - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension NSObject.KeyValueObservingPublisher { - /// Returns a publisher that emits values when a KVO-compliant property changes. - /// - /// - Returns: A key-value observing publisher. - public func didChange() - -> Publishers.Map, Void> { - return map { _ in () } - } -} - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension NSObject { - /// A publisher that emits events when the value of a KVO-compliant property changes. - public struct KeyValueObservingPublisher : Equatable { - public let object: Subject - public let keyPath: KeyPath - public let options: NSKeyValueObservingOptions - - public init( - object: Subject, - keyPath: KeyPath, - options: NSKeyValueObservingOptions - ) { - self.object = object - self.keyPath = keyPath - self.options = options - } - - public static func == ( - lhs: KeyValueObservingPublisher, - rhs: KeyValueObservingPublisher - ) -> Bool { - return lhs.object === rhs.object - && lhs.keyPath == rhs.keyPath - && lhs.options == rhs.options - } - } -} - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension NSObject.KeyValueObservingPublisher: Publisher { - public typealias Output = Value - public typealias Failure = Never - - public func receive(subscriber: S) where S.Input == Output, S.Failure == Failure { - let s = NSObject.KVOSubscription(object, keyPath, options, subscriber) - subscriber.receive(subscription: s) - } -} - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension NSObject { - private final class KVOSubscription: Subscription, CustomStringConvertible, CustomReflectable, CustomPlaygroundDisplayConvertible { - private var observation: NSKeyValueObservation? // GuardedBy(lock) - private var demand: Subscribers.Demand // GuardedBy(lock) - - // for configurations that care about '.initial' we need to 'cache' the value to account for backpressure, along with whom to send it to - // - // TODO: in the future we might want to consider interjecting a temporary publisher that does this, so that all KVO subscriptions don't incur the cost. - private var receivedInitial: Bool // GuardedBy(lock) - private var last: Value? // GuardedBy(lock) - private var subscriber: AnySubscriber? // GuardedBy(lock) - - private let lock = Lock() - - // This lock can only be held for the duration of downstream callouts - private let downstreamLock = RecursiveLock() - - var description: String { return "KVOSubscription" } - var customMirror: Mirror { - lock.lock() - defer { lock.unlock() } - return Mirror(self, children: [ - "observation": observation as Any, - "demand": demand - ]) - } - var playgroundDescription: Any { return description } - - init( - _ object: Subject, - _ keyPath: KeyPath, - _ options: NSKeyValueObservingOptions, - _ subscriber: S) - where - S.Input == Value, - S.Failure == Never - { - demand = .max(0) - receivedInitial = false - self.subscriber = AnySubscriber(subscriber) - - observation = object.observe( - keyPath, - options: options - ) { [weak self] obj, _ in - guard let self = self else { - return - } - let value = obj[keyPath: keyPath] - self.lock.lock() - if self.demand > 0, let sub = self.subscriber { - self.demand -= 1 - self.lock.unlock() - - self.downstreamLock.lock() - let additional = sub.receive(value) - self.downstreamLock.unlock() - - self.lock.lock() - self.demand += additional - self.lock.unlock() - } else { - // Drop the value, unless we've asked for .initial, and this - // is the first value. - if self.receivedInitial == false && options.contains(.initial) { - self.last = value - self.receivedInitial = true - } - self.lock.unlock() - } - } - } - - deinit { - lock.cleanupLock() - downstreamLock.cleanupLock() - } - - func request(_ d: Subscribers.Demand) { - lock.lock() - demand += d - if demand > 0, let v = last, let sub = subscriber { - demand -= 1 - last = nil - lock.unlock() - - downstreamLock.lock() - let additional = sub.receive(v) - downstreamLock.unlock() - - lock.lock() - demand += additional - } else { - demand -= 1 - last = nil - } - lock.unlock() - } - - func cancel() { - lock.lock() - guard let o = observation else { - lock.unlock() - return - } - lock.unlock() - - observation = nil - subscriber = nil - last = nil - o.invalidate() - } - } -} - -#endif /* !(os(iOS) && (arch(i386) || arch(arm))) */ diff --git a/Darwin/Foundation-swiftoverlay/Publishers+Locking.swift b/Darwin/Foundation-swiftoverlay/Publishers+Locking.swift deleted file mode 100644 index 0bf6831e36..0000000000 --- a/Darwin/Foundation-swiftoverlay/Publishers+Locking.swift +++ /dev/null @@ -1,117 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// Only support 64bit -#if !(os(iOS) && (arch(i386) || arch(arm))) - -import Darwin - -@available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) -extension UnsafeMutablePointer where Pointee == os_unfair_lock_s { - internal init() { - let l = UnsafeMutablePointer.allocate(capacity: 1) - l.initialize(to: os_unfair_lock()) - self = l - } - - internal func cleanupLock() { - deinitialize(count: 1) - deallocate() - } - - internal func lock() { - os_unfair_lock_lock(self) - } - - internal func tryLock() -> Bool { - let result = os_unfair_lock_trylock(self) - return result - } - - internal func unlock() { - os_unfair_lock_unlock(self) - } -} - -@available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) -typealias Lock = os_unfair_lock_t - -#if canImport(DarwinPrivate) - -@_implementationOnly import DarwinPrivate - -@available(macOS 10.14, iOS 12.0, tvOS 12.0, watchOS 5.0, *) -extension UnsafeMutablePointer where Pointee == os_unfair_recursive_lock_s { - internal init() { - let l = UnsafeMutablePointer.allocate(capacity: 1) - l.initialize(to: os_unfair_recursive_lock_s()) - self = l - } - - internal func cleanupLock() { - deinitialize(count: 1) - deallocate() - } - - internal func lock() { - os_unfair_recursive_lock_lock(self) - } - - internal func tryLock() -> Bool { - let result = os_unfair_recursive_lock_trylock(self) - return result - } - - internal func unlock() { - os_unfair_recursive_lock_unlock(self) - } -} - -@available(macOS 10.14, iOS 12.0, tvOS 12.0, watchOS 5.0, *) -typealias RecursiveLock = os_unfair_recursive_lock_t - -#else - -// Kept in overlay since some builds may not have `DarwinPrivate` but we should have the availability the same -@available(macOS 10.14, iOS 12.0, tvOS 12.0, watchOS 5.0, *) -internal struct RecursiveLock { - private let lockPtr: UnsafeMutablePointer - - internal init() { - lockPtr = UnsafeMutablePointer.allocate(capacity: 1) - var attr = pthread_mutexattr_t() - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) - pthread_mutex_init(lockPtr, &attr) - } - - internal func cleanupLock() { - pthread_mutex_destroy(lockPtr) - lockPtr.deinitialize(count: 1) - lockPtr.deallocate() - } - - internal func lock() { - pthread_mutex_lock(lockPtr) - } - - internal func tryLock() -> Bool { - return pthread_mutex_trylock(lockPtr) == 0 - } - - internal func unlock() { - pthread_mutex_unlock(lockPtr) - } -} - -#endif - -#endif /* !(os(iOS) && (arch(i386) || arch(arm))) */ diff --git a/Darwin/Foundation-swiftoverlay/Publishers+NotificationCenter.swift b/Darwin/Foundation-swiftoverlay/Publishers+NotificationCenter.swift deleted file mode 100644 index a649ed6218..0000000000 --- a/Darwin/Foundation-swiftoverlay/Publishers+NotificationCenter.swift +++ /dev/null @@ -1,183 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// Only support 64bit -#if !(os(iOS) && (arch(i386) || arch(arm))) - -@_exported import Foundation // Clang module -import Combine - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension NotificationCenter { - /// Returns a publisher that emits events when broadcasting notifications. - /// - /// - Parameters: - /// - name: The name of the notification to publish. - /// - object: The object posting the named notfication. If `nil`, the publisher emits elements for any object producing a notification with the given name. - /// - Returns: A publisher that emits events when broadcasting notifications. - public func publisher( - for name: Notification.Name, - object: AnyObject? = nil - ) -> NotificationCenter.Publisher { - return NotificationCenter.Publisher(center: self, name: name, object: object) - } -} - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension NotificationCenter { - /// A publisher that emits elements when broadcasting notifications. - public struct Publisher: Combine.Publisher { - public typealias Output = Notification - public typealias Failure = Never - - /// The notification center this publisher uses as a source. - public let center: NotificationCenter - /// The name of notifications published by this publisher. - public let name: Notification.Name - /// The object posting the named notfication. - public let object: AnyObject? - - /// Creates a publisher that emits events when broadcasting notifications. - /// - /// - Parameters: - /// - center: The notification center to publish notifications for. - /// - name: The name of the notification to publish. - /// - object: The object posting the named notfication. If `nil`, the publisher emits elements for any object producing a notification with the given name. - public init(center: NotificationCenter, name: Notification.Name, object: AnyObject? = nil) { - self.center = center - self.name = name - self.object = object - } - - public func receive(subscriber: S) where S.Input == Output, S.Failure == Failure { - subscriber.receive(subscription: Notification.Subscription(center, name, object, subscriber)) - } - } -} - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension NotificationCenter.Publisher: Equatable { - public static func == ( - lhs: NotificationCenter.Publisher, - rhs: NotificationCenter.Publisher - ) -> Bool { - return lhs.center === rhs.center - && lhs.name == rhs.name - && lhs.object === rhs.object - } -} - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension Notification { - fileprivate final class Subscription: Combine.Subscription, CustomStringConvertible, CustomReflectable, CustomPlaygroundDisplayConvertible - where - S.Input == Notification - { - private let lock = Lock() - - // This lock can only be held for the duration of downstream callouts - private let downstreamLock = RecursiveLock() - - private var demand: Subscribers.Demand // GuardedBy(lock) - - private var center: NotificationCenter? // GuardedBy(lock) - private let name: Notification.Name // Stored only for debug info - private var object: AnyObject? // Stored only for debug info - private var observation: AnyObject? // GuardedBy(lock) - - var description: String { return "NotificationCenter Observer" } - var customMirror: Mirror { - lock.lock() - defer { lock.unlock() } - return Mirror(self, children: [ - "center": center as Any, - "name": name as Any, - "object": object as Any, - "demand": demand - ]) - } - var playgroundDescription: Any { return description } - - init(_ center: NotificationCenter, - _ name: Notification.Name, - _ object: AnyObject?, - _ next: S) - { - self.demand = .max(0) - self.center = center - self.name = name - self.object = object - - self.observation = center.addObserver( - forName: name, - object: object, - queue: nil - ) { [weak self] note in - guard let self = self else { return } - - self.lock.lock() - guard self.observation != nil else { - self.lock.unlock() - return - } - - let demand = self.demand - if demand > 0 { - self.demand -= 1 - } - self.lock.unlock() - - if demand > 0 { - self.downstreamLock.lock() - let additionalDemand = next.receive(note) - self.downstreamLock.unlock() - - if additionalDemand > 0 { - self.lock.lock() - self.demand += additionalDemand - self.lock.unlock() - } - } else { - // Drop it on the floor - } - } - } - - deinit { - lock.cleanupLock() - downstreamLock.cleanupLock() - } - - func request(_ d: Subscribers.Demand) { - lock.lock() - demand += d - lock.unlock() - } - - func cancel() { - lock.lock() - guard let center = self.center, - let observation = self.observation else { - lock.unlock() - return - } - self.center = nil - self.observation = nil - self.object = nil - lock.unlock() - - center.removeObserver(observation) - } - } -} - -#endif /* !(os(iOS) && (arch(i386) || arch(arm))) */ diff --git a/Darwin/Foundation-swiftoverlay/Publishers+Timer.swift b/Darwin/Foundation-swiftoverlay/Publishers+Timer.swift deleted file mode 100644 index 81383e51cd..0000000000 --- a/Darwin/Foundation-swiftoverlay/Publishers+Timer.swift +++ /dev/null @@ -1,328 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// Only support 64bit -#if !(os(iOS) && (arch(i386) || arch(arm))) - -@_exported import Foundation // Clang module -import Combine - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension Timer { - /// Returns a publisher that repeatedly emits the current date on the given interval. - /// - /// - Parameters: - /// - interval: The time interval on which to publish events. For example, a value of `0.5` publishes an event approximately every half-second. - /// - tolerance: The allowed timing variance when emitting events. Defaults to `nil`, which allows any variance. - /// - runLoop: The run loop on which the timer runs. - /// - mode: The run loop mode in which to run the timer. - /// - options: Scheduler options passed to the timer. Defaults to `nil`. - /// - Returns: A publisher that repeatedly emits the current date on the given interval. - public static func publish( - every interval: TimeInterval, - tolerance: TimeInterval? = nil, - on runLoop: RunLoop, - in mode: RunLoop.Mode, - options: RunLoop.SchedulerOptions? = nil) - -> TimerPublisher - { - return TimerPublisher(interval: interval, runLoop: runLoop, mode: mode, options: options) - } - - /// A publisher that repeatedly emits the current date on a given interval. - public final class TimerPublisher: ConnectablePublisher { - public typealias Output = Date - public typealias Failure = Never - - public let interval: TimeInterval - public let tolerance: TimeInterval? - public let runLoop: RunLoop - public let mode: RunLoop.Mode - public let options: RunLoop.SchedulerOptions? - - private lazy var routingSubscription: RoutingSubscription = { - return RoutingSubscription(parent: self) - }() - - // Stores if a `.connect()` happened before subscription, internally readable for tests - internal var isConnected: Bool { - return routingSubscription.isConnected - } - - /// Creates a publisher that repeatedly emits the current date on the given interval. - /// - /// - Parameters: - /// - interval: The interval on which to publish events. - /// - tolerance: The allowed timing variance when emitting events. Defaults to `nil`, which allows any variance. - /// - runLoop: The run loop on which the timer runs. - /// - mode: The run loop mode in which to run the timer. - /// - options: Scheduler options passed to the timer. Defaults to `nil`. - public init(interval: TimeInterval, tolerance: TimeInterval? = nil, runLoop: RunLoop, mode: RunLoop.Mode, options: RunLoop.SchedulerOptions? = nil) { - self.interval = interval - self.tolerance = tolerance - self.runLoop = runLoop - self.mode = mode - self.options = options - } - - /// Adapter subscription to allow `Timer` to multiplex to multiple subscribers - /// the values produced by a single `TimerPublisher.Inner` - private class RoutingSubscription: Subscription, Subscriber, CustomStringConvertible, CustomReflectable, CustomPlaygroundDisplayConvertible { - typealias Input = Date - typealias Failure = Never - - private typealias ErasedSubscriber = AnySubscriber - - private let lock: Lock - - // Inner is IUP due to init requirements - private var inner: Inner! - private var subscribers: [ErasedSubscriber] = [] - - private var _lockedIsConnected = false - var isConnected: Bool { - get { - lock.lock() - defer { lock.unlock() } - return _lockedIsConnected - } - - set { - lock.lock() - let oldValue = _lockedIsConnected - _lockedIsConnected = newValue - - // Inner will always be non-nil - let inner = self.inner! - lock.unlock() - - guard newValue, !oldValue else { - return - } - inner.enqueue() - } - } - - var description: String { return "Timer" } - var customMirror: Mirror { return inner.customMirror } - var playgroundDescription: Any { return description } - var combineIdentifier: CombineIdentifier { return inner.combineIdentifier } - - init(parent: TimerPublisher) { - self.lock = Lock() - self.inner = Inner(parent, self) - } - - deinit { - lock.cleanupLock() - } - - func addSubscriber(_ sub: S) - where - S.Failure == Failure, - S.Input == Output - { - lock.lock() - subscribers.append(AnySubscriber(sub)) - lock.unlock() - - sub.receive(subscription: self) - } - - func receive(subscription: Subscription) { - lock.lock() - let subscribers = self.subscribers - lock.unlock() - - for sub in subscribers { - sub.receive(subscription: subscription) - } - } - - func receive(_ value: Input) -> Subscribers.Demand { - var resultingDemand: Subscribers.Demand = .max(0) - lock.lock() - let subscribers = self.subscribers - let isConnected = _lockedIsConnected - lock.unlock() - - guard isConnected else { return .none } - - for sub in subscribers { - resultingDemand += sub.receive(value) - } - return resultingDemand - } - - func receive(completion: Subscribers.Completion) { - lock.lock() - let subscribers = self.subscribers - lock.unlock() - - for sub in subscribers { - sub.receive(completion: completion) - } - } - - func request(_ demand: Subscribers.Demand) { - lock.lock() - // Inner will always be non-nil - let inner = self.inner! - lock.unlock() - - inner.request(demand) - } - - func cancel() { - lock.lock() - // Inner will always be non-nil - let inner = self.inner! - _lockedIsConnected = false - self.subscribers = [] - lock.unlock() - - inner.cancel() - } - } - - public func receive(subscriber: S) where Failure == S.Failure, Output == S.Input { - routingSubscription.addSubscriber(subscriber) - } - - public func connect() -> Cancellable { - routingSubscription.isConnected = true - return routingSubscription - } - - private typealias Parent = TimerPublisher - private final class Inner: NSObject, Subscription, CustomReflectable, CustomPlaygroundDisplayConvertible - where - Downstream.Input == Date, - Downstream.Failure == Never - { - private lazy var timer: Timer? = { - let t = Timer( - timeInterval: parent?.interval ?? 0, - target: self, - selector: #selector(timerFired), - userInfo: nil, - repeats: true - ) - - t.tolerance = parent?.tolerance ?? 0 - - return t - }() - - private let lock: Lock - private var downstream: Downstream? - private var parent: Parent? - private var started: Bool - private var demand: Subscribers.Demand - - override var description: String { return "Timer" } - var customMirror: Mirror { - lock.lock() - defer { lock.unlock() } - return Mirror(self, children: [ - "downstream": downstream as Any, - "interval": parent?.interval as Any, - "tolerance": parent?.tolerance as Any - ]) - } - var playgroundDescription: Any { return description } - - init(_ parent: Parent, _ downstream: Downstream) { - self.lock = Lock() - self.parent = parent - self.downstream = downstream - self.started = false - self.demand = .max(0) - super.init() - } - - deinit { - lock.cleanupLock() - } - - func enqueue() { - lock.lock() - guard let t = timer, let parent = self.parent, !started else { - lock.unlock() - return - } - - started = true - lock.unlock() - - parent.runLoop.add(t, forMode: parent.mode) - } - - func cancel() { - lock.lock() - guard let t = timer else { - lock.unlock() - return - } - - // clear out all optionals - downstream = nil - parent = nil - started = false - demand = .max(0) - timer = nil - lock.unlock() - - // cancel the timer - t.invalidate() - } - - func request(_ n: Subscribers.Demand) { - lock.lock() - defer { lock.unlock() } - guard parent != nil else { - return - } - demand += n - } - - @objc - func timerFired(arg: Any) { - lock.lock() - guard let ds = downstream, parent != nil else { - lock.unlock() - return - } - - // This publisher drops events on the floor when there is no space in the subscriber - guard demand > 0 else { - lock.unlock() - return - } - - demand -= 1 - lock.unlock() - - let extra = ds.receive(Date()) - guard extra > 0 else { - return - } - - lock.lock() - demand += extra - lock.unlock() - } - } - } -} - -#endif /* !(os(iOS) && (arch(i386) || arch(arm))) */ diff --git a/Darwin/Foundation-swiftoverlay/Publishers+URLSession.swift b/Darwin/Foundation-swiftoverlay/Publishers+URLSession.swift deleted file mode 100644 index 9fbeb4b91b..0000000000 --- a/Darwin/Foundation-swiftoverlay/Publishers+URLSession.swift +++ /dev/null @@ -1,175 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// Only support 64bit -#if !(os(iOS) && (arch(i386) || arch(arm))) - -@_exported import Foundation // Clang module -import Combine - -// MARK: Data Tasks - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension URLSession { - /// Returns a publisher that wraps a URL session data task for a given URL. - /// - /// The publisher publishes data when the task completes, or terminates if the task fails with an error. - /// - Parameter url: The URL for which to create a data task. - /// - Returns: A publisher that wraps a data task for the URL. - public func dataTaskPublisher( - for url: URL) - -> DataTaskPublisher - { - let request = URLRequest(url: url) - return DataTaskPublisher(request: request, session: self) - } - - /// Returns a publisher that wraps a URL session data task for a given URL request. - /// - /// The publisher publishes data when the task completes, or terminates if the task fails with an error. - /// - Parameter request: The URL request for which to create a data task. - /// - Returns: A publisher that wraps a data task for the URL request. - public func dataTaskPublisher( - for request: URLRequest) - -> DataTaskPublisher - { - return DataTaskPublisher(request: request, session: self) - } - - public struct DataTaskPublisher: Publisher { - public typealias Output = (data: Data, response: URLResponse) - public typealias Failure = URLError - - public let request: URLRequest - public let session: URLSession - - public init(request: URLRequest, session: URLSession) { - self.request = request - self.session = session - } - - public func receive(subscriber: S) where Failure == S.Failure, Output == S.Input { - subscriber.receive(subscription: Inner(self, subscriber)) - } - - private typealias Parent = DataTaskPublisher - private final class Inner: Subscription, CustomStringConvertible, CustomReflectable, CustomPlaygroundDisplayConvertible - where - Downstream.Input == Parent.Output, - Downstream.Failure == Parent.Failure - { - typealias Input = Downstream.Input - typealias Failure = Downstream.Failure - - private let lock: Lock - private var parent: Parent? // GuardedBy(lock) - private var downstream: Downstream? // GuardedBy(lock) - private var demand: Subscribers.Demand // GuardedBy(lock) - private var task: URLSessionDataTask! // GuardedBy(lock) - - var description: String { return "DataTaskPublisher" } - var customMirror: Mirror { - lock.lock() - defer { lock.unlock() } - return Mirror(self, children: [ - "task": task as Any, - "downstream": downstream as Any, - "parent": parent as Any, - "demand": demand, - ]) - } - var playgroundDescription: Any { return description } - - init(_ parent: Parent, _ downstream: Downstream) { - self.lock = Lock() - self.parent = parent - self.downstream = downstream - self.demand = .max(0) - } - - deinit { - lock.cleanupLock() - } - - // MARK: - Upward Signals - func request(_ d: Subscribers.Demand) { - precondition(d > 0, "Invalid request of zero demand") - - lock.lock() - guard let p = parent else { - // We've already been cancelled so bail - lock.unlock() - return - } - - // Avoid issues around `self` before init by setting up only once here - if self.task == nil { - let task = p.session.dataTask( - with: p.request, - completionHandler: handleResponse(data:response:error:) - ) - self.task = task - } - - self.demand += d - let task = self.task! - lock.unlock() - - task.resume() - } - - private func handleResponse(data: Data?, response: URLResponse?, error: Error?) { - lock.lock() - guard demand > 0, - parent != nil, - let ds = downstream - else { - lock.unlock() - return - } - - parent = nil - downstream = nil - - // We clear demand since this is a single shot shape - demand = .max(0) - task = nil - lock.unlock() - - if let response = response, error == nil { - _ = ds.receive((data ?? Data(), response)) - ds.receive(completion: .finished) - } else { - let urlError = error as? URLError ?? URLError(.unknown) - ds.receive(completion: .failure(urlError)) - } - } - - func cancel() { - lock.lock() - guard parent != nil else { - lock.unlock() - return - } - parent = nil - downstream = nil - demand = .max(0) - let task = self.task - self.task = nil - lock.unlock() - task?.cancel() - } - } - } -} - -#endif /* !(os(iOS) && (arch(i386) || arch(arm))) */ diff --git a/Darwin/Foundation-swiftoverlay/ReferenceConvertible.swift b/Darwin/Foundation-swiftoverlay/ReferenceConvertible.swift deleted file mode 100644 index 82705bb070..0000000000 --- a/Darwin/Foundation-swiftoverlay/ReferenceConvertible.swift +++ /dev/null @@ -1,20 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -/// Decorates types which are backed by a Foundation reference type. -/// -/// All `ReferenceConvertible` types are hashable, equatable, and provide description functions. -public protocol ReferenceConvertible : _ObjectiveCBridgeable, CustomStringConvertible, CustomDebugStringConvertible, Hashable { - associatedtype ReferenceType : NSObject, NSCopying -} diff --git a/Darwin/Foundation-swiftoverlay/Scanner.swift b/Darwin/Foundation-swiftoverlay/Scanner.swift deleted file mode 100644 index 1a30a55844..0000000000 --- a/Darwin/Foundation-swiftoverlay/Scanner.swift +++ /dev/null @@ -1,217 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2019 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -extension CharacterSet { - fileprivate func contains(_ character: Character) -> Bool { - return character.unicodeScalars.allSatisfy(self.contains(_:)) - } -} - -// ----- - -@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) -extension Scanner { - public enum NumberRepresentation { - case decimal // See the %d, %f and %F format conversions. - case hexadecimal // See the %x, %X, %a and %A format conversions. For integers, a leading 0x or 0X is optional; for floating-point numbers, it is required. - } - - public var currentIndex: String.Index { - get { - let string = self.string - var index = string._toUTF16Index(scanLocation) - - var delta = 0 - while index != string.endIndex && index.samePosition(in: string) == nil { - delta += 1 - index = string._toUTF16Index(scanLocation + delta) - } - - return index - } - set { scanLocation = string._toUTF16Offset(newValue) } - } - - fileprivate func _scan - (representation: NumberRepresentation, - scanDecimal: (UnsafeMutablePointer?) -> Bool, - scanHexadecimal: (UnsafeMutablePointer?) -> Bool) -> Integer? { - var value: Integer = .max - - switch representation { - case .decimal: guard scanDecimal(&value) else { return nil } - case .hexadecimal: guard scanHexadecimal(&value) else { return nil } - } - - return value - } - - fileprivate func _scan - (representation: NumberRepresentation, - scanDecimal: (UnsafeMutablePointer?) -> Bool, - scanHexadecimal: (UnsafeMutablePointer?) -> Bool) -> FloatingPoint? { - var value: FloatingPoint = .greatestFiniteMagnitude - - switch representation { - case .decimal: guard scanDecimal(&value) else { return nil } - case .hexadecimal: guard scanHexadecimal(&value) else { return nil } - } - - return value - } - - fileprivate func _scan - (representation: NumberRepresentation, - scanDecimal: (UnsafeMutablePointer?) -> Bool, - overflowingScanHexadecimal: (UnsafeMutablePointer?) -> Bool) -> Integer? { - return _scan(representation: representation, scanDecimal: scanDecimal, scanHexadecimal: { (pointer) -> Bool in - var unsignedValue: OverflowingHexadecimalInteger = .max - guard overflowingScanHexadecimal(&unsignedValue) else { return false } - if unsignedValue <= Integer.max { - pointer?.pointee = Integer(unsignedValue) - } - return true - }) - } - - public func scanInt(representation: NumberRepresentation = .decimal) -> Int? { -#if arch(x86_64) || arch(arm64) || arch(s390x) || arch(powerpc64) || arch(powerpc64le) - if let value = scanInt64(representation: representation) { - return Int(value) - } -#elseif arch(i386) || arch(arm) - if let value = scanInt32(representation: representation) { - return Int(value) - } -#else - #error("This architecture isn't known. Add it to the 32-bit or 64-bit line; if the machine word isn't either of those, you need to implement appropriate scanning and handle the potential overflow here.") -#endif - return nil - } - - public func scanInt32(representation: NumberRepresentation = .decimal) -> Int32? { - return _scan(representation: representation, scanDecimal: self.scanInt32(_:), overflowingScanHexadecimal: self.scanHexInt32(_:)) - } - - public func scanInt64(representation: NumberRepresentation = .decimal) -> Int64? { - return _scan(representation: representation, scanDecimal: self.scanInt64(_:), overflowingScanHexadecimal: self.scanHexInt64(_:)) - } - - public func scanUInt64(representation: NumberRepresentation = .decimal) -> UInt64? { - return _scan(representation: representation, scanDecimal: self.scanUnsignedLongLong(_:), scanHexadecimal: self.scanHexInt64(_:)) - } - - public func scanFloat(representation: NumberRepresentation = .decimal) -> Float? { - return _scan(representation: representation, scanDecimal: self.scanFloat(_:), scanHexadecimal: self.scanHexFloat(_:)) - } - - public func scanDouble(representation: NumberRepresentation = .decimal) -> Double? { - return _scan(representation: representation, scanDecimal: self.scanDouble(_:), scanHexadecimal: self.scanHexDouble(_:)) - } - - public func scanDecimal() -> Decimal? { - var value: Decimal = 0 - guard scanDecimal(&value) else { return nil } - return value - } - - - fileprivate var _currentIndexAfterSkipping: String.Index { - guard let skips = charactersToBeSkipped else { return currentIndex } - - let index = string[currentIndex...].firstIndex(where: { !skips.contains($0) }) - return index ?? string.endIndex - } - - public func scanString(_ searchString: String) -> String? { - let currentIndex = _currentIndexAfterSkipping - - guard let substringEnd = string.index(currentIndex, offsetBy: searchString.count, limitedBy: string.endIndex) else { return nil } - - if string.compare(searchString, options: self.caseSensitive ? [] : .caseInsensitive, range: currentIndex ..< substringEnd, locale: self.locale as? Locale) == .orderedSame { - let it = string[currentIndex ..< substringEnd] - self.currentIndex = substringEnd - return String(it) - } else { - return nil - } - } - - public func scanCharacters(from set: CharacterSet) -> String? { - let currentIndex = _currentIndexAfterSkipping - - let substringEnd = string[currentIndex...].firstIndex(where: { !set.contains($0) }) ?? string.endIndex - guard currentIndex != substringEnd else { return nil } - - let substring = string[currentIndex ..< substringEnd] - self.currentIndex = substringEnd - return String(substring) - } - - public func scanUpToString(_ substring: String) -> String? { - guard !substring.isEmpty else { return nil } - let string = self.string - let startIndex = _currentIndexAfterSkipping - - var beginningOfNewString = string.endIndex - var currentSearchIndex = startIndex - - repeat { - guard let range = string.range(of: substring, options: self.caseSensitive ? [] : .caseInsensitive, range: currentSearchIndex ..< string.endIndex, locale: self.locale as? Locale) else { - // If the string isn't found at all, it means it's not in the string. Just take everything to the end. - beginningOfNewString = string.endIndex - break - } - - // range(of:…) can return partial grapheme ranges when dealing with emoji. - // Make sure we take a range only if it doesn't split a grapheme in the string. - if let maybeBeginning = range.lowerBound.samePosition(in: string), - range.upperBound.samePosition(in: string) != nil { - beginningOfNewString = maybeBeginning - break - } - - // If we got here, we need to search again starting from just after the location we found. - currentSearchIndex = range.upperBound - } while beginningOfNewString == string.endIndex && currentSearchIndex < string.endIndex - - guard startIndex != beginningOfNewString else { return nil } - - let foundSubstring = string[startIndex ..< beginningOfNewString] - self.currentIndex = beginningOfNewString - return String(foundSubstring) - } - - public func scanUpToCharacters(from set: CharacterSet) -> String? { - let currentIndex = _currentIndexAfterSkipping - let string = self.string - - let firstCharacterInSet = string[currentIndex...].firstIndex(where: { set.contains($0) }) ?? string.endIndex - guard currentIndex != firstCharacterInSet else { return nil } - self.currentIndex = firstCharacterInSet - return String(string[currentIndex ..< firstCharacterInSet]) - } - - public func scanCharacter() -> Character? { - let currentIndex = _currentIndexAfterSkipping - - let string = self.string - - guard currentIndex != string.endIndex else { return nil } - - let character = string[currentIndex] - self.currentIndex = string.index(after: currentIndex) - return character - } -} diff --git a/Darwin/Foundation-swiftoverlay/Schedulers+Date.swift b/Darwin/Foundation-swiftoverlay/Schedulers+Date.swift deleted file mode 100644 index 8605475981..0000000000 --- a/Darwin/Foundation-swiftoverlay/Schedulers+Date.swift +++ /dev/null @@ -1,33 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// Only support 64bit -#if !(os(iOS) && (arch(i386) || arch(arm))) - -@_exported import Foundation // Clang module -import Combine - -// Date cannot conform to Strideable per rdar://35158274 -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - extension Date /* : Strideable */ { - public typealias Stride = TimeInterval - - public func distance(to other: Date) -> TimeInterval { - return other.timeIntervalSinceReferenceDate - self.timeIntervalSinceReferenceDate - } - - public func advanced(by n: TimeInterval) -> Date { - return self + n - } -} - -#endif /* !(os(iOS) && (arch(i386) || arch(arm))) */ diff --git a/Darwin/Foundation-swiftoverlay/Schedulers+OperationQueue.swift b/Darwin/Foundation-swiftoverlay/Schedulers+OperationQueue.swift deleted file mode 100644 index df451d57a5..0000000000 --- a/Darwin/Foundation-swiftoverlay/Schedulers+OperationQueue.swift +++ /dev/null @@ -1,214 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// Only support 64bit -#if !(os(iOS) && (arch(i386) || arch(arm))) - -@_exported import Foundation // Clang module -import Combine - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension OperationQueue: Scheduler { - /// The scheduler time type used by the operation queue. - public struct SchedulerTimeType: Strideable, Codable, Hashable { - /// The date represented by this type. - public var date: Date - - /// Initializes a operation queue scheduler time with the given date. - /// - /// - Parameter date: The date to represent. - public init(_ date: Date) { - self.date = date - } - - /// Returns the distance to another operation queue scheduler time. - /// - /// - Parameter other: Another operation queue time. - /// - Returns: The time interval between this time and the provided time. - public func distance(to other: OperationQueue.SchedulerTimeType) -> OperationQueue.SchedulerTimeType.Stride { - return OperationQueue.SchedulerTimeType.Stride(floatLiteral: date.distance(to: other.date)) - } - - /// Returns a operation queue scheduler time calculated by advancing this instance’s time by the given interval. - /// - /// - Parameter n: A time interval to advance. - /// - Returns: A operation queue time advanced by the given interval from this instance’s time. - public func advanced(by n: OperationQueue.SchedulerTimeType.Stride) -> OperationQueue.SchedulerTimeType { - return OperationQueue.SchedulerTimeType(date.advanced(by: n.timeInterval)) - } - - /// The interval by which operation queue times advance. - public struct Stride: ExpressibleByFloatLiteral, Comparable, SignedNumeric, Codable, SchedulerTimeIntervalConvertible { - public typealias FloatLiteralType = TimeInterval - public typealias IntegerLiteralType = TimeInterval - public typealias Magnitude = TimeInterval - - /// The value of this time interval in seconds. - public var magnitude: TimeInterval - - /// The value of this time interval in seconds. - public var timeInterval: TimeInterval { - return magnitude - } - - public init(integerLiteral value: TimeInterval) { - magnitude = value - } - - public init(floatLiteral value: TimeInterval) { - magnitude = value - } - - public init(_ timeInterval: TimeInterval) { - magnitude = timeInterval - } - - public init?(exactly source: T) where T: BinaryInteger { - if let d = TimeInterval(exactly: source) { - magnitude = d - } else { - return nil - } - } - - // --- - - public static func < (lhs: Stride, rhs: Stride) -> Bool { - return lhs.magnitude < rhs.magnitude - } - - // --- - - public static func * (lhs: Stride, rhs: Stride) -> Stride { - return Stride(lhs.timeInterval * rhs.timeInterval) - } - - public static func + (lhs: Stride, rhs: Stride) -> Stride { - return Stride(lhs.magnitude + rhs.magnitude) - } - - public static func - (lhs: Stride, rhs: Stride) -> Stride { - return Stride(lhs.magnitude - rhs.magnitude) - } - - // --- - - public static func *= (lhs: inout Stride, rhs: Stride) { - let result = lhs * rhs - lhs = result - } - - public static func += (lhs: inout Stride, rhs: Stride) { - let result = lhs + rhs - lhs = result - } - - public static func -= (lhs: inout Stride, rhs: Stride) { - let result = lhs - rhs - lhs = result - } - - // --- - - public static func seconds(_ s: Int) -> Stride { - return Stride(Double(s)) - } - - public static func seconds(_ s: Double) -> Stride { - return Stride(s) - } - - public static func milliseconds(_ ms: Int) -> Stride { - return Stride(Double(ms) / 1_000.0) - } - - public static func microseconds(_ us: Int) -> Stride { - return Stride(Double(us) / 1_000_000.0) - } - - public static func nanoseconds(_ ns: Int) -> Stride { - return Stride(Double(ns) / 1_000_000_000.0) - } - } - } - - /// Options that affect the operation of the operation queue scheduler. - public struct SchedulerOptions { } - - private final class DelayReadyOperation: Operation, Cancellable { - static var readySchedulingQueue: DispatchQueue = { - return DispatchQueue(label: "DelayReadyOperation") - }() - - var action: (() -> Void)? - var readyFromAfter: Bool - - init(_ action: @escaping() -> Void, after: OperationQueue.SchedulerTimeType) { - self.action = action - readyFromAfter = false - super.init() - let deadline = DispatchTime.now() + after.date.timeIntervalSinceNow - DelayReadyOperation.readySchedulingQueue.asyncAfter(deadline: deadline) { [weak self] in - self?.becomeReady() - } - } - - override func main() { - action!() - action = nil - } - - func becomeReady() { - willChangeValue(for: \.isReady) - readyFromAfter = true - didChangeValue(for: \.isReady) - } - - override var isReady: Bool { - return super.isReady && readyFromAfter - } - } - - public func schedule(options: OperationQueue.SchedulerOptions?, - _ action: @escaping () -> Void) { - let op = BlockOperation(block: action) - addOperation(op) - } - - public func schedule(after date: OperationQueue.SchedulerTimeType, - tolerance: OperationQueue.SchedulerTimeType.Stride, - options: OperationQueue.SchedulerOptions?, - _ action: @escaping () -> Void) { - let op = DelayReadyOperation(action, after: date) - addOperation(op) - } - - public func schedule(after date: OperationQueue.SchedulerTimeType, - interval: OperationQueue.SchedulerTimeType.Stride, - tolerance: OperationQueue.SchedulerTimeType.Stride, - options: OperationQueue.SchedulerOptions?, - _ action: @escaping () -> Void) -> Cancellable { - let op = DelayReadyOperation(action, after: date.advanced(by: interval)) - addOperation(op) - return AnyCancellable(op) - } - - public var now: OperationQueue.SchedulerTimeType { - return OperationQueue.SchedulerTimeType(Date()) - } - - public var minimumTolerance: OperationQueue.SchedulerTimeType.Stride { - return OperationQueue.SchedulerTimeType.Stride(0.0) - } -} - -#endif /* !(os(iOS) && (arch(i386) || arch(arm))) */ diff --git a/Darwin/Foundation-swiftoverlay/Schedulers+RunLoop.swift b/Darwin/Foundation-swiftoverlay/Schedulers+RunLoop.swift deleted file mode 100644 index b0fe6de149..0000000000 --- a/Darwin/Foundation-swiftoverlay/Schedulers+RunLoop.swift +++ /dev/null @@ -1,199 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// Only support 64bit -#if !(os(iOS) && (arch(i386) || arch(arm))) - -@_exported import Foundation // Clang module -import Combine - -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -extension RunLoop: Scheduler { - /// The scheduler time type used by the run loop. - public struct SchedulerTimeType: Strideable, Codable, Hashable { - /// The date represented by this type. - public var date: Date - - /// Initializes a run loop scheduler time with the given date. - /// - /// - Parameter date: The date to represent. - public init(_ date: Date) { - self.date = date - } - - /// Returns the distance to another run loop scheduler time. - /// - /// - Parameter other: Another dispatch queue time. - /// - Returns: The time interval between this time and the provided time. - public func distance(to other: RunLoop.SchedulerTimeType) -> SchedulerTimeType.Stride { - return Stride(floatLiteral: date.distance(to: other.date)) - } - - /// Returns a run loop scheduler time calculated by advancing this instance’s time by the given interval. - /// - /// - Parameter n: A time interval to advance. - /// - Returns: A dispatch queue time advanced by the given interval from this instance’s time. - public func advanced(by n: SchedulerTimeType.Stride) -> RunLoop.SchedulerTimeType { - return SchedulerTimeType(date.advanced(by: n.timeInterval)) - } - - /// The interval by which run loop times advance. - public struct Stride: ExpressibleByFloatLiteral, Comparable, SignedNumeric, Codable, SchedulerTimeIntervalConvertible { - public typealias FloatLiteralType = TimeInterval - public typealias IntegerLiteralType = TimeInterval - public typealias Magnitude = TimeInterval - - /// The value of this time interval in seconds. - public var magnitude: TimeInterval - - /// The value of this time interval in seconds. - public var timeInterval: TimeInterval { - return magnitude - } - - public init(integerLiteral value: TimeInterval) { - magnitude = value - } - - public init(floatLiteral value: TimeInterval) { - magnitude = value - } - - public init(_ timeInterval: TimeInterval) { - magnitude = timeInterval - } - - public init?(exactly source: T) where T: BinaryInteger { - if let d = TimeInterval(exactly: source) { - magnitude = d - } else { - return nil - } - } - - // --- - - public static func < (lhs: Stride, rhs: Stride) -> Bool { - return lhs.magnitude < rhs.magnitude - } - - // --- - - public static func * (lhs: Stride, rhs: Stride) -> Stride { - return Stride(lhs.timeInterval * rhs.timeInterval) - } - - public static func + (lhs: Stride, rhs: Stride) -> Stride { - return Stride(lhs.magnitude + rhs.magnitude) - } - - public static func - (lhs: Stride, rhs: Stride) -> Stride { - return Stride(lhs.magnitude - rhs.magnitude) - } - - // --- - - public static func *= (lhs: inout Stride, rhs: Stride) { - let result = lhs * rhs - lhs = result - } - - public static func += (lhs: inout Stride, rhs: Stride) { - let result = lhs + rhs - lhs = result - } - - public static func -= (lhs: inout Stride, rhs: Stride) { - let result = lhs - rhs - lhs = result - } - - // --- - - public static func seconds(_ s: Int) -> Stride { - return Stride(Double(s)) - } - - public static func seconds(_ s: Double) -> Stride { - return Stride(s) - } - - public static func milliseconds(_ ms: Int) -> Stride { - return Stride(Double(ms) / 1_000.0) - } - - public static func microseconds(_ us: Int) -> Stride { - return Stride(Double(us) / 1_000_000.0) - } - - public static func nanoseconds(_ ns: Int) -> Stride { - return Stride(Double(ns) / 1_000_000_000.0) - } - } - } - - /// Options that affect the operation of the run loop scheduler. - public struct SchedulerOptions { } - - public func schedule(options: SchedulerOptions?, - _ action: @escaping () -> Void) { - self.perform(action) - } - - public func schedule(after date: SchedulerTimeType, - tolerance: SchedulerTimeType.Stride, - options: SchedulerOptions?, - _ action: @escaping () -> Void) { - let ti = date.date.timeIntervalSince(Date()) - self.perform(#selector(self.runLoopScheduled), with: _CombineRunLoopAction(action), afterDelay: ti) - } - - public func schedule(after date: SchedulerTimeType, - interval: SchedulerTimeType.Stride, - tolerance: SchedulerTimeType.Stride, - options: SchedulerOptions?, - _ action: @escaping () -> Void) -> Cancellable { - let timer = Timer(fire: date.date, interval: interval.timeInterval, repeats: true) { _ in - action() - } - - timer.tolerance = tolerance.timeInterval - self.add(timer, forMode: .default) - - return AnyCancellable(timer.invalidate) - } - - public var now: SchedulerTimeType { - return SchedulerTimeType(Date()) - } - - public var minimumTolerance: SchedulerTimeType.Stride { - return 0.0 - } - - @objc - fileprivate func runLoopScheduled(action: _CombineRunLoopAction) { - action.action() - } -} - -@objc -@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -private class _CombineRunLoopAction: NSObject { - let action: () -> Void - - init(_ action: @escaping () -> Void) { - self.action = action - } -} - -#endif /* !(os(iOS) && (arch(i386) || arch(arm))) */ diff --git a/Darwin/Foundation-swiftoverlay/String.swift b/Darwin/Foundation-swiftoverlay/String.swift deleted file mode 100644 index 7893e3d281..0000000000 --- a/Darwin/Foundation-swiftoverlay/String.swift +++ /dev/null @@ -1,124 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -@_spi(Foundation) import Swift - -//===----------------------------------------------------------------------===// -// New Strings -//===----------------------------------------------------------------------===// - -// -// Conversion from NSString to Swift's native representation -// - -extension String { - public init(_ cocoaString: NSString) { - self = String(_cocoaString: cocoaString) - } -} - -extension String : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSString { - // This method should not do anything extra except calling into the - // implementation inside core. (These two entry points should be - // equivalent.) - return unsafeBitCast(_bridgeToObjectiveCImpl(), to: NSString.self) - } - - public static func _forceBridgeFromObjectiveC( - _ x: NSString, - result: inout String? - ) { - result = String(x) - } - - public static func _conditionallyBridgeFromObjectiveC( - _ x: NSString, - result: inout String? - ) -> Bool { - self._forceBridgeFromObjectiveC(x, result: &result) - return result != nil - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC( - _ source: NSString? - ) -> String { - // `nil` has historically been used as a stand-in for an empty - // string; map it to an empty string. - if _slowPath(source == nil) { return String() } - return String(source!) - } -} - -extension Substring : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSString { - return String(self)._bridgeToObjectiveC() - } - - public static func _forceBridgeFromObjectiveC( - _ x: NSString, - result: inout Substring? - ) { - let s = String(x) - result = s[...] - } - - public static func _conditionallyBridgeFromObjectiveC( - _ x: NSString, - result: inout Substring? - ) -> Bool { - self._forceBridgeFromObjectiveC(x, result: &result) - return result != nil - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC( - _ source: NSString? - ) -> Substring { - // `nil` has historically been used as a stand-in for an empty - // string; map it to an empty substring. - if _slowPath(source == nil) { return Substring() } - let s = String(source!) - return s[...] - } -} - -extension String: CVarArg {} - -/* - This is on NSObject so that the stdlib can call it in StringBridge.swift - without having to synthesize a receiver (e.g. lookup a class or allocate) - - In the future (once the Foundation overlay can know about SmallString), we - should move the caller of this method up into the overlay and avoid this - indirection. - */ -private extension NSObject { - // The ObjC selector has to start with "new" to get ARC to not autorelease - @_effects(releasenone) - @objc(newTaggedNSStringWithASCIIBytes_:length_:) - func createTaggedString(bytes: UnsafePointer, - count: Int) -> AnyObject? { - //TODO: update this to use _CFStringCreateTaggedPointerString once we can - return CFStringCreateWithBytes( - kCFAllocatorSystemDefault, - bytes, - count, - CFStringBuiltInEncodings.UTF8.rawValue, - false - ) as NSString as NSString? //just "as AnyObject" inserts unwanted bridging - } -} diff --git a/Darwin/Foundation-swiftoverlay/TimeZone.swift b/Darwin/Foundation-swiftoverlay/TimeZone.swift deleted file mode 100644 index c5c2438995..0000000000 --- a/Darwin/Foundation-swiftoverlay/TimeZone.swift +++ /dev/null @@ -1,303 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -@_implementationOnly import _FoundationOverlayShims - -/** - `TimeZone` defines the behavior of a time zone. Time zone values represent geopolitical regions. Consequently, these values have names for these regions. Time zone values also represent a temporal offset, either plus or minus, from Greenwich Mean Time (GMT) and an abbreviation (such as PST for Pacific Standard Time). - - `TimeZone` provides two static functions to get time zone values: `current` and `autoupdatingCurrent`. The `autoupdatingCurrent` time zone automatically tracks updates made by the user. - - Note that time zone database entries such as "America/Los_Angeles" are IDs, not names. An example of a time zone name is "Pacific Daylight Time". Although many `TimeZone` functions include the word "name", they refer to IDs. - - Cocoa does not provide any API to change the time zone of the computer, or of other applications. - */ -public struct TimeZone : Hashable, Equatable, ReferenceConvertible { - public typealias ReferenceType = NSTimeZone - - private var _wrapped : NSTimeZone - private var _autoupdating : Bool - - /// The time zone currently used by the system. - public static var current : TimeZone { - return TimeZone(adoptingReference: __NSTimeZoneCurrent() as! NSTimeZone, autoupdating: false) - } - - /// The time zone currently used by the system, automatically updating to the user's current preference. - /// - /// If this time zone is mutated, then it no longer tracks the system time zone. - /// - /// The autoupdating time zone only compares equal to itself. - public static var autoupdatingCurrent : TimeZone { - return TimeZone(adoptingReference: __NSTimeZoneAutoupdating() as! NSTimeZone, autoupdating: true) - } - - // MARK: - - // - - /// Returns a time zone initialized with a given identifier. - /// - /// An example identifier is "America/Los_Angeles". - /// - /// If `identifier` is an unknown identifier, then returns `nil`. - public init?(identifier: __shared String) { - if let r = NSTimeZone(name: identifier) { - _wrapped = r - _autoupdating = false - } else { - return nil - } - } - - @available(*, unavailable, renamed: "init(secondsFromGMT:)") - public init(forSecondsFromGMT seconds: Int) { fatalError() } - - /// Returns a time zone initialized with a specific number of seconds from GMT. - /// - /// Time zones created with this never have daylight savings and the offset is constant no matter the date. The identifier and abbreviation do NOT follow the POSIX convention (of minutes-west). - /// - /// - parameter seconds: The number of seconds from GMT. - /// - returns: A time zone, or `nil` if a valid time zone could not be created from `seconds`. - public init?(secondsFromGMT seconds: Int) { - if let r = NSTimeZone(forSecondsFromGMT: seconds) as NSTimeZone? { - _wrapped = r - _autoupdating = false - } else { - return nil - } - } - - /// Returns a time zone identified by a given abbreviation. - /// - /// In general, you are discouraged from using abbreviations except for unique instances such as "GMT". Time Zone abbreviations are not standardized and so a given abbreviation may have multiple meanings--for example, "EST" refers to Eastern Time in both the United States and Australia - /// - /// - parameter abbreviation: The abbreviation for the time zone. - /// - returns: A time zone identified by abbreviation determined by resolving the abbreviation to an identifier using the abbreviation dictionary and then returning the time zone for that identifier. Returns `nil` if there is no match for abbreviation. - public init?(abbreviation: __shared String) { - if let r = NSTimeZone(abbreviation: abbreviation) { - _wrapped = r - _autoupdating = false - } else { - return nil - } - } - - private init(reference: NSTimeZone) { - if __NSTimeZoneIsAutoupdating(reference) { - // we can't copy this or we lose its auto-ness (27048257) - // fortunately it's immutable - _autoupdating = true - _wrapped = reference - } else { - _autoupdating = false - _wrapped = reference.copy() as! NSTimeZone - } - } - - private init(adoptingReference reference: NSTimeZone, autoupdating: Bool) { - // this path is only used for types we do not need to copy (we are adopting the ref) - _wrapped = reference - _autoupdating = autoupdating - } - - // MARK: - - // - - @available(*, unavailable, renamed: "identifier") - public var name: String { fatalError() } - - /// The geopolitical region identifier that identifies the time zone. - public var identifier: String { - return _wrapped.name - } - - @available(*, unavailable, message: "use the identifier instead") - public var data: Data { fatalError() } - - /// The current difference in seconds between the time zone and Greenwich Mean Time. - /// - /// - parameter date: The date to use for the calculation. The default value is the current date. - public func secondsFromGMT(for date: Date = Date()) -> Int { - return _wrapped.secondsFromGMT(for: date) - } - - /// Returns the abbreviation for the time zone at a given date. - /// - /// Note that the abbreviation may be different at different dates. For example, during daylight saving time the US/Eastern time zone has an abbreviation of "EDT." At other times, its abbreviation is "EST." - /// - parameter date: The date to use for the calculation. The default value is the current date. - public func abbreviation(for date: Date = Date()) -> String? { - return _wrapped.abbreviation(for: date) - } - - /// Returns a Boolean value that indicates whether the receiver uses daylight saving time at a given date. - /// - /// - parameter date: The date to use for the calculation. The default value is the current date. - public func isDaylightSavingTime(for date: Date = Date()) -> Bool { - return _wrapped.isDaylightSavingTime(for: date) - } - - /// Returns the daylight saving time offset for a given date. - /// - /// - parameter date: The date to use for the calculation. The default value is the current date. - public func daylightSavingTimeOffset(for date: Date = Date()) -> TimeInterval { - return _wrapped.daylightSavingTimeOffset(for: date) - } - - /// Returns the next daylight saving time transition after a given date. - /// - /// - parameter date: A date. - /// - returns: The next daylight saving time transition after `date`. Depending on the time zone, this function may return a change of the time zone's offset from GMT. Returns `nil` if the time zone of the receiver does not observe daylight savings time as of `date`. - public func nextDaylightSavingTimeTransition(after date: Date) -> Date? { - return _wrapped.nextDaylightSavingTimeTransition(after: date) - } - - /// Returns an array of strings listing the identifier of all the time zones known to the system. - public static var knownTimeZoneIdentifiers : [String] { - return NSTimeZone.knownTimeZoneNames - } - - /// Returns the mapping of abbreviations to time zone identifiers. - public static var abbreviationDictionary : [String : String] { - get { - return NSTimeZone.abbreviationDictionary - } - set { - NSTimeZone.abbreviationDictionary = newValue - } - } - - /// Returns the time zone data version. - public static var timeZoneDataVersion : String { - return NSTimeZone.timeZoneDataVersion - } - - /// Returns the date of the next (after the current instant) daylight saving time transition for the time zone. Depending on the time zone, the value of this property may represent a change of the time zone's offset from GMT. Returns `nil` if the time zone does not currently observe daylight saving time. - public var nextDaylightSavingTimeTransition: Date? { - return _wrapped.nextDaylightSavingTimeTransition - } - - @available(*, unavailable, renamed: "localizedName(for:locale:)") - public func localizedName(_ style: NSTimeZone.NameStyle, locale: Locale?) -> String? { fatalError() } - - /// Returns the name of the receiver localized for a given locale. - public func localizedName(for style: NSTimeZone.NameStyle, locale: Locale?) -> String? { - return _wrapped.localizedName(style, locale: locale) - } - - // MARK: - - - public func hash(into hasher: inout Hasher) { - if _autoupdating { - hasher.combine(false) - } else { - hasher.combine(true) - hasher.combine(_wrapped) - } - } - - public static func ==(lhs: TimeZone, rhs: TimeZone) -> Bool { - if lhs._autoupdating || rhs._autoupdating { - return lhs._autoupdating == rhs._autoupdating - } else { - return lhs._wrapped.isEqual(rhs._wrapped) - } - } -} - -extension TimeZone : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - private var _kindDescription : String { - if self == TimeZone.autoupdatingCurrent { - return "autoupdatingCurrent" - } else if self == TimeZone.current { - return "current" - } else { - return "fixed" - } - } - - public var customMirror : Mirror { - let c: [(label: String?, value: Any)] = [ - ("identifier", identifier), - ("kind", _kindDescription), - ("abbreviation", abbreviation() as Any), - ("secondsFromGMT", secondsFromGMT()), - ("isDaylightSavingTime", isDaylightSavingTime()), - ] - return Mirror(self, children: c, displayStyle: Mirror.DisplayStyle.struct) - } - - public var description: String { - return "\(identifier) (\(_kindDescription))" - } - - public var debugDescription : String { - return "\(identifier) (\(_kindDescription))" - } -} - -extension TimeZone : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSTimeZone { - // _wrapped is immutable - return _wrapped - } - - public static func _forceBridgeFromObjectiveC(_ input: NSTimeZone, result: inout TimeZone?) { - if !_conditionallyBridgeFromObjectiveC(input, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ input: NSTimeZone, result: inout TimeZone?) -> Bool { - result = TimeZone(reference: input) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSTimeZone?) -> TimeZone { - var result: TimeZone? - _forceBridgeFromObjectiveC(source!, result: &result) - return result! - } -} - -extension NSTimeZone : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as TimeZone) - } -} - -extension TimeZone : Codable { - private enum CodingKeys : Int, CodingKey { - case identifier - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let identifier = try container.decode(String.self, forKey: .identifier) - - guard let timeZone = TimeZone(identifier: identifier) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, - debugDescription: "Invalid TimeZone identifier.")) - } - - self = timeZone - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(self.identifier, forKey: .identifier) - } -} diff --git a/Darwin/Foundation-swiftoverlay/URL.swift b/Darwin/Foundation-swiftoverlay/URL.swift deleted file mode 100644 index 891d77f4e9..0000000000 --- a/Darwin/Foundation-swiftoverlay/URL.swift +++ /dev/null @@ -1,1240 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -/** - URLs to file system resources support the properties defined below. Note that not all property values will exist for all file system URLs. For example, if a file is located on a volume that does not support creation dates, it is valid to request the creation date property, but the returned value will be nil, and no error will be generated. - - Only the fields requested by the keys you pass into the `URL` function to receive this value will be populated. The others will return `nil` regardless of the underlying property on the file system. - - As a convenience, volume resource values can be requested from any file system URL. The value returned will reflect the property value for the volume on which the resource is located. -*/ -public struct URLResourceValues { - fileprivate var _values: [URLResourceKey: Any] - fileprivate var _keys: Set - - public init() { - _values = [:] - _keys = [] - } - - fileprivate init(keys: Set, values: [URLResourceKey: Any]) { - _values = values - _keys = keys - } - - private func contains(_ key: URLResourceKey) -> Bool { - return _keys.contains(key) - } - - private func _get(_ key : URLResourceKey) -> T? { - return _values[key] as? T - } - private func _get(_ key : URLResourceKey) -> Bool? { - return (_values[key] as? NSNumber)?.boolValue - } - private func _get(_ key: URLResourceKey) -> Int? { - return (_values[key] as? NSNumber)?.intValue - } - - private mutating func _set(_ key : URLResourceKey, newValue : __owned Any?) { - _keys.insert(key) - _values[key] = newValue - } - private mutating func _set(_ key : URLResourceKey, newValue : String?) { - _keys.insert(key) - _values[key] = newValue as NSString? - } - private mutating func _set(_ key : URLResourceKey, newValue : [String]?) { - _keys.insert(key) - _values[key] = newValue as NSObject? - } - private mutating func _set(_ key : URLResourceKey, newValue : Date?) { - _keys.insert(key) - _values[key] = newValue as NSDate? - } - private mutating func _set(_ key : URLResourceKey, newValue : URL?) { - _keys.insert(key) - _values[key] = newValue as NSURL? - } - private mutating func _set(_ key : URLResourceKey, newValue : Bool?) { - _keys.insert(key) - if let value = newValue { - _values[key] = NSNumber(value: value) - } else { - _values[key] = nil - } - } - private mutating func _set(_ key : URLResourceKey, newValue : Int?) { - _keys.insert(key) - if let value = newValue { - _values[key] = NSNumber(value: value) - } else { - _values[key] = nil - } - } - - /// A loosely-typed dictionary containing all keys and values. - /// - /// If you have set temporary keys or non-standard keys, you can find them in here. - public var allValues : [URLResourceKey : Any] { - return _values - } - - /// The resource name provided by the file system. - public var name: String? { - get { return _get(.nameKey) } - set { _set(.nameKey, newValue: newValue) } - } - - /// Localized or extension-hidden name as displayed to users. - public var localizedName: String? { return _get(.localizedNameKey) } - - /// True for regular files. - public var isRegularFile: Bool? { return _get(.isRegularFileKey) } - - /// True for directories. - public var isDirectory: Bool? { return _get(.isDirectoryKey) } - - /// True for symlinks. - public var isSymbolicLink: Bool? { return _get(.isSymbolicLinkKey) } - - /// True for the root directory of a volume. - public var isVolume: Bool? { return _get(.isVolumeKey) } - - /// True for packaged directories. - /// - /// - note: You can only set or clear this property on directories; if you try to set this property on non-directory objects, the property is ignored. If the directory is a package for some other reason (extension type, etc), setting this property to false will have no effect. - public var isPackage: Bool? { - get { return _get(.isPackageKey) } - set { _set(.isPackageKey, newValue: newValue) } - } - - /// True if resource is an application. - @available(macOS 10.11, iOS 9.0, *) - public var isApplication: Bool? { return _get(.isApplicationKey) } - -#if os(macOS) - /// True if the resource is scriptable. Only applies to applications. - @available(macOS 10.11, *) - public var applicationIsScriptable: Bool? { return _get(.applicationIsScriptableKey) } -#endif - - /// True for system-immutable resources. - public var isSystemImmutable: Bool? { return _get(.isSystemImmutableKey) } - - /// True for user-immutable resources - public var isUserImmutable: Bool? { - get { return _get(.isUserImmutableKey) } - set { _set(.isUserImmutableKey, newValue: newValue) } - } - - /// True for resources normally not displayed to users. - /// - /// - note: If the resource is a hidden because its name starts with a period, setting this property to false will not change the property. - public var isHidden: Bool? { - get { return _get(.isHiddenKey) } - set { _set(.isHiddenKey, newValue: newValue) } - } - - /// True for resources whose filename extension is removed from the localized name property. - public var hasHiddenExtension: Bool? { - get { return _get(.hasHiddenExtensionKey) } - set { _set(.hasHiddenExtensionKey, newValue: newValue) } - } - - /// The date the resource was created. - public var creationDate: Date? { - get { return _get(.creationDateKey) } - set { _set(.creationDateKey, newValue: newValue) } - } - - /// The date the resource was last accessed. - public var contentAccessDate: Date? { - get { return _get(.contentAccessDateKey) } - set { _set(.contentAccessDateKey, newValue: newValue) } - } - - /// The time the resource content was last modified. - public var contentModificationDate: Date? { - get { return _get(.contentModificationDateKey) } - set { _set(.contentModificationDateKey, newValue: newValue) } - } - - /// The time the resource's attributes were last modified. - public var attributeModificationDate: Date? { return _get(.attributeModificationDateKey) } - - /// Number of hard links to the resource. - public var linkCount: Int? { return _get(.linkCountKey) } - - /// The resource's parent directory, if any. - public var parentDirectory: URL? { return _get(.parentDirectoryURLKey) } - - /// URL of the volume on which the resource is stored. - public var volume: URL? { return _get(.volumeURLKey) } - - /// Uniform type identifier (UTI) for the resource. - public var typeIdentifier: String? { return _get(.typeIdentifierKey) } - - /// User-visible type or "kind" description. - public var localizedTypeDescription: String? { return _get(.localizedTypeDescriptionKey) } - - /// The label number assigned to the resource. - public var labelNumber: Int? { - get { return _get(.labelNumberKey) } - set { _set(.labelNumberKey, newValue: newValue) } - } - - - /// The user-visible label text. - public var localizedLabel: String? { - get { return _get(.localizedLabelKey) } - } - - /// An identifier which can be used to compare two file system objects for equality using `isEqual`. - /// - /// Two object identifiers are equal if they have the same file system path or if the paths are linked to same inode on the same file system. This identifier is not persistent across system restarts. - public var fileResourceIdentifier: (NSCopying & NSCoding & NSSecureCoding & NSObjectProtocol)? { return _get(.fileResourceIdentifierKey) } - - /// An identifier that can be used to identify the volume the file system object is on. - /// - /// Other objects on the same volume will have the same volume identifier and can be compared using for equality using `isEqual`. This identifier is not persistent across system restarts. - public var volumeIdentifier: (NSCopying & NSCoding & NSSecureCoding & NSObjectProtocol)? { return _get(.volumeIdentifierKey) } - - /// The optimal block size when reading or writing this file's data, or nil if not available. - public var preferredIOBlockSize: Int? { return _get(.preferredIOBlockSizeKey) } - - /// True if this process (as determined by EUID) can read the resource. - public var isReadable: Bool? { return _get(.isReadableKey) } - - /// True if this process (as determined by EUID) can write to the resource. - public var isWritable: Bool? { return _get(.isWritableKey) } - - /// True if this process (as determined by EUID) can execute a file resource or search a directory resource. - public var isExecutable: Bool? { return _get(.isExecutableKey) } - - /// The file system object's security information encapsulated in a FileSecurity object. - public var fileSecurity: NSFileSecurity? { - get { return _get(.fileSecurityKey) } - set { _set(.fileSecurityKey, newValue: newValue) } - } - - /// True if resource should be excluded from backups, false otherwise. - /// - /// This property is only useful for excluding cache and other application support files which are not needed in a backup. Some operations commonly made to user documents will cause this property to be reset to false and so this property should not be used on user documents. - public var isExcludedFromBackup: Bool? { - get { return _get(.isExcludedFromBackupKey) } - set { _set(.isExcludedFromBackupKey, newValue: newValue) } - } - -#if os(macOS) - /// The array of Tag names. - public var tagNames: [String]? { return _get(.tagNamesKey) } -#endif - /// The URL's path as a file system path. - public var path: String? { return _get(.pathKey) } - - /// The URL's path as a canonical absolute file system path. - @available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) - public var canonicalPath: String? { return _get(.canonicalPathKey) } - - /// True if this URL is a file system trigger directory. Traversing or opening a file system trigger will cause an attempt to mount a file system on the trigger directory. - public var isMountTrigger: Bool? { return _get(.isMountTriggerKey) } - - /// An opaque generation identifier which can be compared using `==` to determine if the data in a document has been modified. - /// - /// For URLs which refer to the same file inode, the generation identifier will change when the data in the file's data fork is changed (changes to extended attributes or other file system metadata do not change the generation identifier). For URLs which refer to the same directory inode, the generation identifier will change when direct children of that directory are added, removed or renamed (changes to the data of the direct children of that directory will not change the generation identifier). The generation identifier is persistent across system restarts. The generation identifier is tied to a specific document on a specific volume and is not transferred when the document is copied to another volume. This property is not supported by all volumes. - @available(macOS 10.10, iOS 8.0, *) - public var generationIdentifier: (NSCopying & NSCoding & NSSecureCoding & NSObjectProtocol)? { return _get(.generationIdentifierKey) } - - /// The document identifier -- a value assigned by the kernel to a document (which can be either a file or directory) and is used to identify the document regardless of where it gets moved on a volume. - /// - /// The document identifier survives "safe save" operations; i.e it is sticky to the path it was assigned to (`replaceItem(at:,withItemAt:,backupItemName:,options:,resultingItem:) throws` is the preferred safe-save API). The document identifier is persistent across system restarts. The document identifier is not transferred when the file is copied. Document identifiers are only unique within a single volume. This property is not supported by all volumes. - @available(macOS 10.10, iOS 8.0, *) - public var documentIdentifier: Int? { return _get(.documentIdentifierKey) } - - /// The date the resource was created, or renamed into or within its parent directory. Note that inconsistent behavior may be observed when this attribute is requested on hard-linked items. This property is not supported by all volumes. - @available(macOS 10.10, iOS 8.0, *) - public var addedToDirectoryDate: Date? { return _get(.addedToDirectoryDateKey) } - -#if os(macOS) - /// The quarantine properties as defined in LSQuarantine.h. To remove quarantine information from a file, pass `nil` as the value when setting this property. - @available(macOS 10.10, *) - public var quarantineProperties: [String : Any]? { - get { - let value = _values[.quarantinePropertiesKey] - // If a caller has caused us to stash NSNull in the dictionary (via set), make sure to return nil instead of NSNull - if value is NSNull { - return nil - } else { - return value as? [String : Any] - } - } - set { - // Use NSNull for nil, a special case for deleting quarantine - // properties - _set(.quarantinePropertiesKey, newValue: newValue ?? NSNull()) - } - } -#endif - - /// Returns the file system object type. - public var fileResourceType: URLFileResourceType? { return _get(.fileResourceTypeKey) } - - /// The user-visible volume format. - public var volumeLocalizedFormatDescription : String? { return _get(.volumeLocalizedFormatDescriptionKey) } - - /// Total volume capacity in bytes. - public var volumeTotalCapacity : Int? { return _get(.volumeTotalCapacityKey) } - - /// Total free space in bytes. - public var volumeAvailableCapacity : Int? { return _get(.volumeAvailableCapacityKey) } - -#if os(macOS) || os(iOS) - /// Total available capacity in bytes for "Important" resources, including space expected to be cleared by purging non-essential and cached resources. "Important" means something that the user or application clearly expects to be present on the local system, but is ultimately replaceable. This would include items that the user has explicitly requested via the UI, and resources that an application requires in order to provide functionality. - /// Examples: A video that the user has explicitly requested to watch but has not yet finished watching or an audio file that the user has requested to download. - /// This value should not be used in determining if there is room for an irreplaceable resource. In the case of irreplaceable resources, always attempt to save the resource regardless of available capacity and handle failure as gracefully as possible. - @available(macOS 10.13, iOS 11.0, *) @available(tvOS, unavailable) @available(watchOS, unavailable) - public var volumeAvailableCapacityForImportantUsage: Int64? { return _get(.volumeAvailableCapacityForImportantUsageKey) } - - /// Total available capacity in bytes for "Opportunistic" resources, including space expected to be cleared by purging non-essential and cached resources. "Opportunistic" means something that the user is likely to want but does not expect to be present on the local system, but is ultimately non-essential and replaceable. This would include items that will be created or downloaded without an explicit request from the user on the current device. - /// Examples: A background download of a newly available episode of a TV series that a user has been recently watching, a piece of content explicitly requested on another device, and a new document saved to a network server by the current user from another device. - @available(macOS 10.13, iOS 11.0, *) @available(tvOS, unavailable) @available(watchOS, unavailable) - public var volumeAvailableCapacityForOpportunisticUsage: Int64? { return _get(.volumeAvailableCapacityForOpportunisticUsageKey) } -#endif - - /// Total number of resources on the volume. - public var volumeResourceCount : Int? { return _get(.volumeResourceCountKey) } - - /// true if the volume format supports persistent object identifiers and can look up file system objects by their IDs. - public var volumeSupportsPersistentIDs : Bool? { return _get(.volumeSupportsPersistentIDsKey) } - - /// true if the volume format supports symbolic links. - public var volumeSupportsSymbolicLinks : Bool? { return _get(.volumeSupportsSymbolicLinksKey) } - - /// true if the volume format supports hard links. - public var volumeSupportsHardLinks : Bool? { return _get(.volumeSupportsHardLinksKey) } - - /// true if the volume format supports a journal used to speed recovery in case of unplanned restart (such as a power outage or crash). This does not necessarily mean the volume is actively using a journal. - public var volumeSupportsJournaling : Bool? { return _get(.volumeSupportsJournalingKey) } - - /// true if the volume is currently using a journal for speedy recovery after an unplanned restart. - public var volumeIsJournaling : Bool? { return _get(.volumeIsJournalingKey) } - - /// true if the volume format supports sparse files, that is, files which can have 'holes' that have never been written to, and thus do not consume space on disk. A sparse file may have an allocated size on disk that is less than its logical length. - public var volumeSupportsSparseFiles : Bool? { return _get(.volumeSupportsSparseFilesKey) } - - /// For security reasons, parts of a file (runs) that have never been written to must appear to contain zeroes. true if the volume keeps track of allocated but unwritten runs of a file so that it can substitute zeroes without actually writing zeroes to the media. - public var volumeSupportsZeroRuns : Bool? { return _get(.volumeSupportsZeroRunsKey) } - - /// true if the volume format treats upper and lower case characters in file and directory names as different. Otherwise an upper case character is equivalent to a lower case character, and you can't have two names that differ solely in the case of the characters. - public var volumeSupportsCaseSensitiveNames : Bool? { return _get(.volumeSupportsCaseSensitiveNamesKey) } - - /// true if the volume format preserves the case of file and directory names. Otherwise the volume may change the case of some characters (typically making them all upper or all lower case). - public var volumeSupportsCasePreservedNames : Bool? { return _get(.volumeSupportsCasePreservedNamesKey) } - - /// true if the volume supports reliable storage of times for the root directory. - public var volumeSupportsRootDirectoryDates : Bool? { return _get(.volumeSupportsRootDirectoryDatesKey) } - - /// true if the volume supports returning volume size values (`volumeTotalCapacity` and `volumeAvailableCapacity`). - public var volumeSupportsVolumeSizes : Bool? { return _get(.volumeSupportsVolumeSizesKey) } - - /// true if the volume can be renamed. - public var volumeSupportsRenaming : Bool? { return _get(.volumeSupportsRenamingKey) } - - /// true if the volume implements whole-file flock(2) style advisory locks, and the O_EXLOCK and O_SHLOCK flags of the open(2) call. - public var volumeSupportsAdvisoryFileLocking : Bool? { return _get(.volumeSupportsAdvisoryFileLockingKey) } - - /// true if the volume implements extended security (ACLs). - public var volumeSupportsExtendedSecurity : Bool? { return _get(.volumeSupportsExtendedSecurityKey) } - - /// true if the volume should be visible via the GUI (i.e., appear on the Desktop as a separate volume). - public var volumeIsBrowsable : Bool? { return _get(.volumeIsBrowsableKey) } - - /// The largest file size (in bytes) supported by this file system, or nil if this cannot be determined. - public var volumeMaximumFileSize : Int? { return _get(.volumeMaximumFileSizeKey) } - - /// true if the volume's media is ejectable from the drive mechanism under software control. - public var volumeIsEjectable : Bool? { return _get(.volumeIsEjectableKey) } - - /// true if the volume's media is removable from the drive mechanism. - public var volumeIsRemovable : Bool? { return _get(.volumeIsRemovableKey) } - - /// true if the volume's device is connected to an internal bus, false if connected to an external bus, or nil if not available. - public var volumeIsInternal : Bool? { return _get(.volumeIsInternalKey) } - - /// true if the volume is automounted. Note: do not mistake this with the functionality provided by kCFURLVolumeSupportsBrowsingKey. - public var volumeIsAutomounted : Bool? { return _get(.volumeIsAutomountedKey) } - - /// true if the volume is stored on a local device. - public var volumeIsLocal : Bool? { return _get(.volumeIsLocalKey) } - - /// true if the volume is read-only. - public var volumeIsReadOnly : Bool? { return _get(.volumeIsReadOnlyKey) } - - /// The volume's creation date, or nil if this cannot be determined. - public var volumeCreationDate : Date? { return _get(.volumeCreationDateKey) } - - /// The `URL` needed to remount a network volume, or nil if not available. - public var volumeURLForRemounting : URL? { return _get(.volumeURLForRemountingKey) } - - /// The volume's persistent `UUID` as a string, or nil if a persistent `UUID` is not available for the volume. - public var volumeUUIDString : String? { return _get(.volumeUUIDStringKey) } - - /// The name of the volume - public var volumeName : String? { - get { return _get(.volumeNameKey) } - set { _set(.volumeNameKey, newValue: newValue) } - } - - /// The user-presentable name of the volume - public var volumeLocalizedName : String? { return _get(.volumeLocalizedNameKey) } - - /// true if the volume is encrypted. - @available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) - public var volumeIsEncrypted : Bool? { return _get(.volumeIsEncryptedKey) } - - /// true if the volume is the root filesystem. - @available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) - public var volumeIsRootFileSystem : Bool? { return _get(.volumeIsRootFileSystemKey) } - - /// true if the volume supports transparent decompression of compressed files using decmpfs. - @available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) - public var volumeSupportsCompression : Bool? { return _get(.volumeSupportsCompressionKey) } - - /// true if the volume supports clonefile(2). - @available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) - public var volumeSupportsFileCloning : Bool? { return _get(.volumeSupportsFileCloningKey) } - - /// true if the volume supports renamex_np(2)'s RENAME_SWAP option. - @available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) - public var volumeSupportsSwapRenaming : Bool? { return _get(.volumeSupportsSwapRenamingKey) } - - /// true if the volume supports renamex_np(2)'s RENAME_EXCL option. - @available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) - public var volumeSupportsExclusiveRenaming : Bool? { return _get(.volumeSupportsExclusiveRenamingKey) } - - /// true if the volume supports making files immutable with isUserImmutable or isSystemImmutable. - @available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) - public var volumeSupportsImmutableFiles : Bool? { return _get(.volumeSupportsImmutableFilesKey) } - - /// true if the volume supports setting POSIX access permissions with fileSecurity. - @available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) - public var volumeSupportsAccessPermissions : Bool? { return _get(.volumeSupportsAccessPermissionsKey) } - - /// true if this item is synced to the cloud, false if it is only a local file. - public var isUbiquitousItem : Bool? { return _get(.isUbiquitousItemKey) } - - /// true if this item has conflicts outstanding. - public var ubiquitousItemHasUnresolvedConflicts : Bool? { return _get(.ubiquitousItemHasUnresolvedConflictsKey) } - - /// true if data is being downloaded for this item. - public var ubiquitousItemIsDownloading : Bool? { return _get(.ubiquitousItemIsDownloadingKey) } - - /// true if there is data present in the cloud for this item. - public var ubiquitousItemIsUploaded : Bool? { return _get(.ubiquitousItemIsUploadedKey) } - - /// true if data is being uploaded for this item. - public var ubiquitousItemIsUploading : Bool? { return _get(.ubiquitousItemIsUploadingKey) } - - /// returns the download status of this item. - public var ubiquitousItemDownloadingStatus : URLUbiquitousItemDownloadingStatus? { return _get(.ubiquitousItemDownloadingStatusKey) } - - /// returns the error when downloading the item from iCloud failed, see the NSUbiquitousFile section in FoundationErrors.h - public var ubiquitousItemDownloadingError : NSError? { return _get(.ubiquitousItemDownloadingErrorKey) } - - /// returns the error when uploading the item to iCloud failed, see the NSUbiquitousFile section in FoundationErrors.h - public var ubiquitousItemUploadingError : NSError? { return _get(.ubiquitousItemUploadingErrorKey) } - - /// returns whether a download of this item has already been requested with an API like `startDownloadingUbiquitousItem(at:) throws`. - @available(macOS 10.10, iOS 8.0, *) - public var ubiquitousItemDownloadRequested : Bool? { return _get(.ubiquitousItemDownloadRequestedKey) } - - /// returns the name of this item's container as displayed to users. - @available(macOS 10.10, iOS 8.0, *) - public var ubiquitousItemContainerDisplayName : String? { return _get(.ubiquitousItemContainerDisplayNameKey) } - -#if os(macOS) || os(iOS) - // true if ubiquitous item is shared. - @available(macOS 10.13, iOS 11.0, *) @available(tvOS, unavailable) @available(watchOS, unavailable) - public var ubiquitousItemIsShared: Bool? { return _get(.ubiquitousItemIsSharedKey) } - - // The current user's role for this shared item, or nil if not shared - @available(macOS 10.13, iOS 11.0, *) @available(tvOS, unavailable) @available(watchOS, unavailable) - public var ubiquitousSharedItemCurrentUserRole: URLUbiquitousSharedItemRole? { return _get(.ubiquitousSharedItemCurrentUserRoleKey) } - - // The permissions for the current user, or nil if not shared. - @available(macOS 10.13, iOS 11.0, *) @available(tvOS, unavailable) @available(watchOS, unavailable) - public var ubiquitousSharedItemCurrentUserPermissions: URLUbiquitousSharedItemPermissions? { return _get(.ubiquitousSharedItemCurrentUserPermissionsKey) } - - // The name components for the owner, or nil if not shared. - @available(macOS 10.13, iOS 11.0, *) @available(tvOS, unavailable) @available(watchOS, unavailable) - public var ubiquitousSharedItemOwnerNameComponents: PersonNameComponents? { return _get(.ubiquitousSharedItemOwnerNameComponentsKey) } - - // The name components for the most recent editor, or nil if not shared. - @available(macOS 10.13, iOS 11.0, *) @available(tvOS, unavailable) @available(watchOS, unavailable) - public var ubiquitousSharedItemMostRecentEditorNameComponents: PersonNameComponents? { return _get(.ubiquitousSharedItemMostRecentEditorNameComponentsKey) } -#endif - -#if !os(macOS) - /// The protection level for this file - @available(iOS 9.0, *) - public var fileProtection : URLFileProtection? { return _get(.fileProtectionKey) } -#endif - - /// Total file size in bytes - /// - /// - note: Only applicable to regular files. - public var fileSize : Int? { return _get(.fileSizeKey) } - - /// Total size allocated on disk for the file in bytes (number of blocks times block size) - /// - /// - note: Only applicable to regular files. - public var fileAllocatedSize : Int? { return _get(.fileAllocatedSizeKey) } - - /// Total displayable size of the file in bytes (this may include space used by metadata), or nil if not available. - /// - /// - note: Only applicable to regular files. - public var totalFileSize : Int? { return _get(.totalFileSizeKey) } - - /// Total allocated size of the file in bytes (this may include space used by metadata), or nil if not available. This can be less than the value returned by `totalFileSize` if the resource is compressed. - /// - /// - note: Only applicable to regular files. - public var totalFileAllocatedSize : Int? { return _get(.totalFileAllocatedSizeKey) } - - /// true if the resource is a Finder alias file or a symlink, false otherwise - /// - /// - note: Only applicable to regular files. - public var isAliasFile : Bool? { return _get(.isAliasFileKey) } - -} - -/** - A URL is a type that can potentially contain the location of a resource on a remote server, the path of a local file on disk, or even an arbitrary piece of encoded data. - - You can construct URLs and access their parts. For URLs that represent local files, you can also manipulate properties of those files directly, such as changing the file's last modification date. Finally, you can pass URLs to other APIs to retrieve the contents of those URLs. For example, you can use the URLSession classes to access the contents of remote resources, as described in URL Session Programming Guide. - - URLs are the preferred way to refer to local files. Most objects that read data from or write data to a file have methods that accept a URL instead of a pathname as the file reference. For example, you can get the contents of a local file URL as `String` by calling `func init(contentsOf:encoding) throws`, or as a `Data` by calling `func init(contentsOf:options) throws`. -*/ -public struct URL : ReferenceConvertible, Equatable { - public typealias ReferenceType = NSURL - private var _url: NSURL - - public typealias BookmarkResolutionOptions = NSURL.BookmarkResolutionOptions - public typealias BookmarkCreationOptions = NSURL.BookmarkCreationOptions - - /// Initialize with string. - /// - /// Returns `nil` if a `URL` cannot be formed with the string (for example, if the string contains characters that are illegal in a URL, or is an empty string). - public init?(string: __shared String) { - guard !string.isEmpty, let inner = NSURL(string: string) else { return nil } - _url = URL._converted(from: inner) - } - - /// Initialize with string, relative to another URL. - /// - /// Returns `nil` if a `URL` cannot be formed with the string (for example, if the string contains characters that are illegal in a URL, or is an empty string). - public init?(string: __shared String, relativeTo url: __shared URL?) { - guard !string.isEmpty, let inner = NSURL(string: string, relativeTo: url) else { return nil } - _url = URL._converted(from: inner) - } - - /// Initializes a newly created file URL referencing the local file or directory at path, relative to a base URL. - /// - /// If an empty string is used for the path, then the path is assumed to be ".". - /// - note: This function avoids an extra file system access to check if the file URL is a directory. You should use it if you know the answer already. - @available(macOS 10.11, iOS 9.0, *) - public init(fileURLWithPath path: __shared String, isDirectory: Bool, relativeTo base: __shared URL?) { - _url = URL._converted(from: NSURL(fileURLWithPath: path.isEmpty ? "." : path, isDirectory: isDirectory, relativeTo: base)) - } - - /// Initializes a newly created file URL referencing the local file or directory at path, relative to a base URL. - /// - /// If an empty string is used for the path, then the path is assumed to be ".". - @available(macOS 10.11, iOS 9.0, *) - public init(fileURLWithPath path: __shared String, relativeTo base: __shared URL?) { - _url = URL._converted(from: NSURL(fileURLWithPath: path.isEmpty ? "." : path, relativeTo: base)) - } - - /// Initializes a newly created file URL referencing the local file or directory at path. - /// - /// If an empty string is used for the path, then the path is assumed to be ".". - /// - note: This function avoids an extra file system access to check if the file URL is a directory. You should use it if you know the answer already. - public init(fileURLWithPath path: __shared String, isDirectory: Bool) { - _url = URL._converted(from: NSURL(fileURLWithPath: path.isEmpty ? "." : path, isDirectory: isDirectory)) - } - - /// Initializes a newly created file URL referencing the local file or directory at path. - /// - /// If an empty string is used for the path, then the path is assumed to be ".". - public init(fileURLWithPath path: __shared String) { - _url = URL._converted(from: NSURL(fileURLWithPath: path.isEmpty ? "." : path)) - } - - /// Initializes a newly created URL using the contents of the given data, relative to a base URL. - /// - /// If the data representation is not a legal URL string as ASCII bytes, the URL object may not behave as expected. If the URL cannot be formed then this will return nil. - @available(macOS 10.11, iOS 9.0, *) - public init?(dataRepresentation: __shared Data, relativeTo url: __shared URL?, isAbsolute: Bool = false) { - guard !dataRepresentation.isEmpty else { return nil } - - if isAbsolute { - _url = URL._converted(from: NSURL(absoluteURLWithDataRepresentation: dataRepresentation, relativeTo: url)) - } else { - _url = URL._converted(from: NSURL(dataRepresentation: dataRepresentation, relativeTo: url)) - } - } - - /// Initializes a URL that refers to a location specified by resolving bookmark data. - @available(swift, obsoleted: 4.2) - public init?(resolvingBookmarkData data: __shared Data, options: BookmarkResolutionOptions = [], relativeTo url: __shared URL? = nil, bookmarkDataIsStale: inout Bool) throws { - var stale : ObjCBool = false - _url = URL._converted(from: try NSURL(resolvingBookmarkData: data, options: options, relativeTo: url, bookmarkDataIsStale: &stale)) - bookmarkDataIsStale = stale.boolValue - } - - /// Initializes a URL that refers to a location specified by resolving bookmark data. - @available(swift, introduced: 4.2) - public init(resolvingBookmarkData data: __shared Data, options: BookmarkResolutionOptions = [], relativeTo url: __shared URL? = nil, bookmarkDataIsStale: inout Bool) throws { - var stale : ObjCBool = false - _url = URL._converted(from: try NSURL(resolvingBookmarkData: data, options: options, relativeTo: url, bookmarkDataIsStale: &stale)) - bookmarkDataIsStale = stale.boolValue - } - - /// Creates and initializes an NSURL that refers to the location specified by resolving the alias file at url. If the url argument does not refer to an alias file as defined by the NSURLIsAliasFileKey property, the NSURL returned is the same as url argument. This method fails and returns nil if the url argument is unreachable, or if the original file or directory could not be located or is not reachable, or if the original file or directory is on a volume that could not be located or mounted. The URLBookmarkResolutionWithSecurityScope option is not supported by this method. - @available(macOS 10.10, iOS 8.0, *) - public init(resolvingAliasFileAt url: __shared URL, options: BookmarkResolutionOptions = []) throws { - self.init(reference: try NSURL(resolvingAliasFileAt: url, options: options)) - } - - /// Initializes a newly created URL referencing the local file or directory at the file system representation of the path. File system representation is a null-terminated C string with canonical UTF-8 encoding. - public init(fileURLWithFileSystemRepresentation path: UnsafePointer, isDirectory: Bool, relativeTo baseURL: __shared URL?) { - _url = URL._converted(from: NSURL(fileURLWithFileSystemRepresentation: path, isDirectory: isDirectory, relativeTo: baseURL)) - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(_url) - } - - // MARK: - - - /// Returns the data representation of the URL's relativeString. - /// - /// If the URL was initialized with `init?(dataRepresentation:relativeTo:isAbsolute:)`, the data representation returned are the same bytes as those used at initialization; otherwise, the data representation returned are the bytes of the `relativeString` encoded with UTF8 string encoding. - @available(macOS 10.11, iOS 9.0, *) - public var dataRepresentation: Data { - return _url.dataRepresentation - } - - // MARK: - - - // Future implementation note: - // NSURL (really CFURL, which provides its implementation) has quite a few quirks in its processing of some more esoteric (and some not so esoteric) strings. We would like to move much of this over to the more modern NSURLComponents, but binary compat concerns have made this difficult. - // Hopefully soon, we can replace some of the below delegation to NSURL with delegation to NSURLComponents instead. It cannot be done piecemeal, because otherwise we will get inconsistent results from the API. - - /// Returns the absolute string for the URL. - public var absoluteString: String { - if let string = _url.absoluteString { - return string - } else { - // This should never fail for non-file reference URLs - return "" - } - } - - /// The relative portion of a URL. - /// - /// If `baseURL` is nil, or if the receiver is itself absolute, this is the same as `absoluteString`. - public var relativeString: String { - return _url.relativeString - } - - /// Returns the base URL. - /// - /// If the URL is itself absolute, then this value is nil. - public var baseURL: URL? { - return _url.baseURL - } - - /// Returns the absolute URL. - /// - /// If the URL is itself absolute, this will return self. - public var absoluteURL: URL { - if let url = _url.absoluteURL { - return url - } else { - // This should never fail for non-file reference URLs - return self - } - } - - // MARK: - - - /// Returns the scheme of the URL. - public var scheme: String? { - return _url.scheme - } - - /// Returns true if the scheme is `file:`. - public var isFileURL: Bool { - return _url.isFileURL - } - - // This thing was never really part of the URL specs - @available(*, unavailable, message: "Use `path`, `query`, and `fragment` instead") - public var resourceSpecifier: String { - fatalError() - } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the host component of the URL; otherwise it returns nil. - /// - /// - note: This function will resolve against the base `URL`. - public var host: String? { - return _url.host - } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the port component of the URL; otherwise it returns nil. - /// - /// - note: This function will resolve against the base `URL`. - public var port: Int? { - return _url.port?.intValue - } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the user component of the URL; otherwise it returns nil. - /// - /// - note: This function will resolve against the base `URL`. - public var user: String? { - return _url.user - } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the password component of the URL; otherwise it returns nil. - /// - /// - note: This function will resolve against the base `URL`. - public var password: String? { - return _url.password - } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the path component of the URL; otherwise it returns an empty string. - /// - /// If the URL contains a parameter string, it is appended to the path with a `;`. - /// - note: This function will resolve against the base `URL`. - /// - returns: The path, or an empty string if the URL has an empty path. - public var path: String { - if let parameterString = _url.parameterString { - if let path = _url.path { - return path + ";" + parameterString - } else { - return ";" + parameterString - } - } else if let path = _url.path { - return path - } else { - return "" - } - } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the relative path of the URL; otherwise it returns nil. - /// - /// This is the same as path if baseURL is nil. - /// If the URL contains a parameter string, it is appended to the path with a `;`. - /// - /// - note: This function will resolve against the base `URL`. - /// - returns: The relative path, or an empty string if the URL has an empty path. - public var relativePath: String { - if let parameterString = _url.parameterString { - if let path = _url.relativePath { - return path + ";" + parameterString - } else { - return ";" + parameterString - } - } else if let path = _url.relativePath { - return path - } else { - return "" - } - } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the fragment component of the URL; otherwise it returns nil. - /// - /// - note: This function will resolve against the base `URL`. - public var fragment: String? { - return _url.fragment - } - - @available(*, unavailable, message: "use the 'path' property") - public var parameterString: String? { - fatalError() - } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the query of the URL; otherwise it returns nil. - /// - /// - note: This function will resolve against the base `URL`. - public var query: String? { - return _url.query - } - - /// Returns true if the URL path represents a directory. - @available(macOS 10.11, iOS 9.0, *) - public var hasDirectoryPath: Bool { - return _url.hasDirectoryPath - } - - /// Passes the URL's path in file system representation to `block`. - /// - /// File system representation is a null-terminated C string with canonical UTF-8 encoding. - /// - note: The pointer is not valid outside the context of the block. - @available(macOS 10.9, iOS 7.0, *) - public func withUnsafeFileSystemRepresentation(_ block: (UnsafePointer?) throws -> ResultType) rethrows -> ResultType { - return try block(_url.fileSystemRepresentation) - } - - // MARK: - - // MARK: Path manipulation - - /// Returns the path components of the URL, or an empty array if the path is an empty string. - public var pathComponents: [String] { - // In accordance with our above change to never return a nil path, here we return an empty array. - return _url.pathComponents ?? [] - } - - /// Returns the last path component of the URL, or an empty string if the path is an empty string. - public var lastPathComponent: String { - return _url.lastPathComponent ?? "" - } - - /// Returns the path extension of the URL, or an empty string if the path is an empty string. - public var pathExtension: String { - return _url.pathExtension ?? "" - } - - /// Returns a URL constructed by appending the given path component to self. - /// - /// - parameter pathComponent: The path component to add. - /// - parameter isDirectory: If `true`, then a trailing `/` is added to the resulting path. - public func appendingPathComponent(_ pathComponent: String, isDirectory: Bool) -> URL { - if let result = _url.appendingPathComponent(pathComponent, isDirectory: isDirectory) { - return result - } else { - // Now we need to do something more expensive - if var c = URLComponents(url: self, resolvingAgainstBaseURL: true) { - let path = (c.path as NSString).appendingPathComponent(pathComponent) - c.path = isDirectory ? path + "/" : path - - if let result = c.url { - return result - } else { - // Couldn't get url from components - // Ultimate fallback: - return self - } - } else { - return self - } - } - } - - /// Returns a URL constructed by appending the given path component to self. - /// - /// - note: This function performs a file system operation to determine if the path component is a directory. If so, it will append a trailing `/`. If you know in advance that the path component is a directory or not, then use `func appendingPathComponent(_:isDirectory:)`. - /// - parameter pathComponent: The path component to add. - public func appendingPathComponent(_ pathComponent: String) -> URL { - if let result = _url.appendingPathComponent(pathComponent) { - return result - } else { - // Now we need to do something more expensive - if var c = URLComponents(url: self, resolvingAgainstBaseURL: true) { - c.path = (c.path as NSString).appendingPathComponent(pathComponent) - - if let result = c.url { - return result - } else { - // Couldn't get url from components - // Ultimate fallback: - return self - } - } else { - // Ultimate fallback: - return self - } - } - } - - /// Returns a URL constructed by removing the last path component of self. - /// - /// This function may either remove a path component or append `/..`. - /// - /// If the URL has an empty path (e.g., `http://www.example.com`), then this function will return the URL unchanged. - public func deletingLastPathComponent() -> URL { - // This is a slight behavior change from NSURL, but better than returning "http://www.example.com../". - guard !path.isEmpty, let result = _url.deletingLastPathComponent.map({ URL(reference: $0 as NSURL) }) else { return self } - return result - } - - /// Returns a URL constructed by appending the given path extension to self. - /// - /// If the URL has an empty path (e.g., `http://www.example.com`), then this function will return the URL unchanged. - /// - /// Certain special characters (for example, Unicode Right-To-Left marks) cannot be used as path extensions. If any of those are contained in `pathExtension`, the function will return the URL unchanged. - /// - parameter pathExtension: The extension to append. - public func appendingPathExtension(_ pathExtension: String) -> URL { - guard !path.isEmpty, let result = _url.appendingPathExtension(pathExtension) else { return self } - return result - } - - /// Returns a URL constructed by removing any path extension. - /// - /// If the URL has an empty path (e.g., `http://www.example.com`), then this function will return the URL unchanged. - public func deletingPathExtension() -> URL { - guard !path.isEmpty, let result = _url.deletingPathExtension.map({ URL(reference: $0 as NSURL) }) else { return self } - return result - } - - /// Appends a path component to the URL. - /// - /// - parameter pathComponent: The path component to add. - /// - parameter isDirectory: Use `true` if the resulting path is a directory. - public mutating func appendPathComponent(_ pathComponent: String, isDirectory: Bool) { - self = appendingPathComponent(pathComponent, isDirectory: isDirectory) - } - - /// Appends a path component to the URL. - /// - /// - note: This function performs a file system operation to determine if the path component is a directory. If so, it will append a trailing `/`. If you know in advance that the path component is a directory or not, then use `func appendingPathComponent(_:isDirectory:)`. - /// - parameter pathComponent: The path component to add. - public mutating func appendPathComponent(_ pathComponent: String) { - self = appendingPathComponent(pathComponent) - } - - /// Appends the given path extension to self. - /// - /// If the URL has an empty path (e.g., `http://www.example.com`), then this function will do nothing. - /// Certain special characters (for example, Unicode Right-To-Left marks) cannot be used as path extensions. If any of those are contained in `pathExtension`, the function will return the URL unchanged. - /// - parameter pathExtension: The extension to append. - public mutating func appendPathExtension(_ pathExtension: String) { - self = appendingPathExtension(pathExtension) - } - - /// Returns a URL constructed by removing the last path component of self. - /// - /// This function may either remove a path component or append `/..`. - /// - /// If the URL has an empty path (e.g., `http://www.example.com`), then this function will do nothing. - public mutating func deleteLastPathComponent() { - self = deletingLastPathComponent() - } - - - /// Returns a URL constructed by removing any path extension. - /// - /// If the URL has an empty path (e.g., `http://www.example.com`), then this function will do nothing. - public mutating func deletePathExtension() { - self = deletingPathExtension() - } - - /// Returns a `URL` with any instances of ".." or "." removed from its path. - public var standardized : URL { - // The NSURL API can only return nil in case of file reference URL, which we should not be - guard let result = _url.standardized.map({ URL(reference: $0 as NSURL) }) else { return self } - return result - } - - /// Standardizes the path of a file URL. - /// - /// If the `isFileURL` is false, this method does nothing. - public mutating func standardize() { - self = self.standardized - } - - /// Standardizes the path of a file URL. - /// - /// If the `isFileURL` is false, this method returns `self`. - public var standardizedFileURL : URL { - // NSURL should not return nil here unless this is a file reference URL, which should be impossible - guard let result = _url.standardizingPath.map({ URL(reference: $0 as NSURL) }) else { return self } - return result - } - - /// Resolves any symlinks in the path of a file URL. - /// - /// If the `isFileURL` is false, this method returns `self`. - public func resolvingSymlinksInPath() -> URL { - // NSURL should not return nil here unless this is a file reference URL, which should be impossible - guard let result = _url.resolvingSymlinksInPath.map({ URL(reference: $0 as NSURL) }) else { return self } - return result - } - - /// Resolves any symlinks in the path of a file URL. - /// - /// If the `isFileURL` is false, this method does nothing. - public mutating func resolveSymlinksInPath() { - self = self.resolvingSymlinksInPath() - } - - // MARK: - Reachability - - /// Returns whether the URL's resource exists and is reachable. - /// - /// This method synchronously checks if the resource's backing store is reachable. Checking reachability is appropriate when making decisions that do not require other immediate operations on the resource, e.g. periodic maintenance of UI state that depends on the existence of a specific document. When performing operations such as opening a file or copying resource properties, it is more efficient to simply try the operation and handle failures. This method is currently applicable only to URLs for file system resources. For other URL types, `false` is returned. - public func checkResourceIsReachable() throws -> Bool { - var error : NSError? - let result = _url.checkResourceIsReachableAndReturnError(&error) - if let e = error { - throw e - } else { - return result - } - } - - /// Returns whether the promised item URL's resource exists and is reachable. - /// - /// This method synchronously checks if the resource's backing store is reachable. Checking reachability is appropriate when making decisions that do not require other immediate operations on the resource, e.g. periodic maintenance of UI state that depends on the existence of a specific document. When performing operations such as opening a file or copying resource properties, it is more efficient to simply try the operation and handle failures. This method is currently applicable only to URLs for file system resources. For other URL types, `false` is returned. - @available(macOS 10.10, iOS 8.0, *) - public func checkPromisedItemIsReachable() throws -> Bool { - var error : NSError? - let result = _url.checkPromisedItemIsReachableAndReturnError(&error) - if let e = error { - throw e - } else { - return result - } - } - - // MARK: - Resource Values - - /// Sets the resource value identified by a given resource key. - /// - /// This method writes the new resource values out to the backing store. Attempts to set a read-only resource property or to set a resource property not supported by the resource are ignored and are not considered errors. This method is currently applicable only to URLs for file system resources. - /// - /// `URLResourceValues` keeps track of which of its properties have been set. Those values are the ones used by this function to determine which properties to write. - public mutating func setResourceValues(_ values: URLResourceValues) throws { - try _url.setResourceValues(values._values) - } - - /// Return a collection of resource values identified by the given resource keys. - /// - /// This method first checks if the URL object already caches the resource value. If so, it returns the cached resource value to the caller. If not, then this method synchronously obtains the resource value from the backing store, adds the resource value to the URL object's cache, and returns the resource value to the caller. The type of the resource value varies by resource property (see resource key definitions). If this method does not throw and the resulting value in the `URLResourceValues` is populated with nil, it means the resource property is not available for the specified resource and no errors occurred when determining the resource property was not available. This method is currently applicable only to URLs for file system resources. - /// - /// When this function is used from the main thread, resource values cached by the URL (except those added as temporary properties) are removed the next time the main thread's run loop runs. `func removeCachedResourceValue(forKey:)` and `func removeAllCachedResourceValues()` also may be used to remove cached resource values. - /// - /// Only the values for the keys specified in `keys` will be populated. - public func resourceValues(forKeys keys: Set) throws -> URLResourceValues { - return URLResourceValues(keys: keys, values: try _url.resourceValues(forKeys: Array(keys))) - } - - /// Sets a temporary resource value on the URL object. - /// - /// Temporary resource values are for client use. Temporary resource values exist only in memory and are never written to the resource's backing store. Once set, a temporary resource value can be copied from the URL object with `func resourceValues(forKeys:)`. The values are stored in the loosely-typed `allValues` dictionary property. - /// - /// To remove a temporary resource value from the URL object, use `func removeCachedResourceValue(forKey:)`. Care should be taken to ensure the key that identifies a temporary resource value is unique and does not conflict with system defined keys (using reverse domain name notation in your temporary resource value keys is recommended). This method is currently applicable only to URLs for file system resources. - public mutating func setTemporaryResourceValue(_ value : Any, forKey key: URLResourceKey) { - _url.setTemporaryResourceValue(value, forKey: key) - } - - /// Removes all cached resource values and all temporary resource values from the URL object. - /// - /// This method is currently applicable only to URLs for file system resources. - public mutating func removeAllCachedResourceValues() { - _url.removeAllCachedResourceValues() - } - - /// Removes the cached resource value identified by a given resource value key from the URL object. - /// - /// Removing a cached resource value may remove other cached resource values because some resource values are cached as a set of values, and because some resource values depend on other resource values (temporary resource values have no dependencies). This method is currently applicable only to URLs for file system resources. - public mutating func removeCachedResourceValue(forKey key: URLResourceKey) { - _url.removeCachedResourceValue(forKey: key) - } - - /// Get resource values from URLs of 'promised' items. - /// - /// A promised item is not guaranteed to have its contents in the file system until you use `FileCoordinator` to perform a coordinated read on its URL, which causes the contents to be downloaded or otherwise generated. Promised item URLs are returned by various APIs, including currently: - /// NSMetadataQueryUbiquitousDataScope - /// NSMetadataQueryUbiquitousDocumentsScope - /// A `FilePresenter` presenting the contents of the directory located by -URLForUbiquitousContainerIdentifier: or a subdirectory thereof - /// - /// The following methods behave identically to their similarly named methods above (`func resourceValues(forKeys:)`, etc.), except that they allow you to get resource values and check for presence regardless of whether the promised item's contents currently exist at the URL. You must use these APIs instead of the normal URL resource value APIs if and only if any of the following are true: - /// You are using a URL that you know came directly from one of the above APIs - /// You are inside the accessor block of a coordinated read or write that used NSFileCoordinatorReadingImmediatelyAvailableMetadataOnly, NSFileCoordinatorWritingForDeleting, NSFileCoordinatorWritingForMoving, or NSFileCoordinatorWritingContentIndependentMetadataOnly - /// - /// Most of the URL resource value keys will work with these APIs. However, there are some that are tied to the item's contents that will not work, such as `contentAccessDateKey` or `generationIdentifierKey`. If one of these keys is used, the method will return a `URLResourceValues` value, but the value for that property will be nil. - @available(macOS 10.10, iOS 8.0, *) - public func promisedItemResourceValues(forKeys keys: Set) throws -> URLResourceValues { - return URLResourceValues(keys: keys, values: try _url.promisedItemResourceValues(forKeys: Array(keys))) - } - - @available(*, unavailable, message: "Use struct URLResourceValues and URL.setResourceValues(_:) instead") - public func setResourceValue(_ value: AnyObject?, forKey key: URLResourceKey) throws { - fatalError() - } - - @available(*, unavailable, message: "Use struct URLResourceValues and URL.setResourceValues(_:) instead") - public func setResourceValues(_ keyedValues: [URLResourceKey : AnyObject]) throws { - fatalError() - } - - @available(*, unavailable, message: "Use struct URLResourceValues and URL.setResourceValues(_:) instead") - public func getResourceValue(_ value: AutoreleasingUnsafeMutablePointer, forKey key: URLResourceKey) throws { - fatalError() - } - - // MARK: - Bookmarks and Alias Files - - /// Returns bookmark data for the URL, created with specified options and resource values. - public func bookmarkData(options: BookmarkCreationOptions = [], includingResourceValuesForKeys keys: Set? = nil, relativeTo url: URL? = nil) throws -> Data { - let result = try _url.bookmarkData(options: options, includingResourceValuesForKeys: keys.flatMap { Array($0) }, relativeTo: url) - return result - } - - /// Returns the resource values for properties identified by a specified array of keys contained in specified bookmark data. If the result dictionary does not contain a resource value for one or more of the requested resource keys, it means those resource properties are not available in the bookmark data. - public static func resourceValues(forKeys keys: Set, fromBookmarkData data: Data) -> URLResourceValues? { - return NSURL.resourceValues(forKeys: Array(keys), fromBookmarkData: data).map { URLResourceValues(keys: keys, values: $0) } - } - - /// Creates an alias file on disk at a specified location with specified bookmark data. bookmarkData must have been created with the URLBookmarkCreationSuitableForBookmarkFile option. bookmarkFileURL must either refer to an existing file (which will be overwritten), or to location in an existing directory. - public static func writeBookmarkData(_ data : Data, to url: URL) throws { - // Options are unused - try NSURL.writeBookmarkData(data, to: url, options: 0) - } - - /// Initializes and returns bookmark data derived from an alias file pointed to by a specified URL. If bookmarkFileURL refers to an alias file created prior to OS X v10.6 that contains Alias Manager information but no bookmark data, this method synthesizes bookmark data for the file. - public static func bookmarkData(withContentsOf url: URL) throws -> Data { - let result = try NSURL.bookmarkData(withContentsOf: url) - return result - } - - /// Given an NSURL created by resolving a bookmark data created with security scope, make the resource referenced by the url accessible to the process. When access to this resource is no longer needed the client must call stopAccessingSecurityScopedResource. Each call to startAccessingSecurityScopedResource must be balanced with a call to stopAccessingSecurityScopedResource (Note: this is not reference counted). - @available(macOS 10.7, iOS 8.0, *) - public func startAccessingSecurityScopedResource() -> Bool { - return _url.startAccessingSecurityScopedResource() - } - - /// Revokes the access granted to the url by a prior successful call to startAccessingSecurityScopedResource. - @available(macOS 10.7, iOS 8.0, *) - public func stopAccessingSecurityScopedResource() { - _url.stopAccessingSecurityScopedResource() - } - - // MARK: - Bridging Support - - /// We must not store an NSURL without running it through this function. This makes sure that we do not hold a file reference URL, which changes the nullability of many NSURL functions. - private static func _converted(from url: NSURL) -> NSURL { - // Future readers: file reference URL here is not the same as playgrounds "file reference" - if url.isFileReferenceURL() { - // Convert to a file path URL, or use an invalid scheme - return (url.filePathURL ?? URL(string: "com-apple-unresolvable-file-reference-url:")!) as NSURL - } else { - return url - } - } - - private init(reference: __shared NSURL) { - _url = URL._converted(from: reference).copy() as! NSURL - } - - private var reference: NSURL { - return _url - } - - public static func ==(lhs: URL, rhs: URL) -> Bool { - return lhs.reference.isEqual(rhs.reference) - } -} - -extension URL : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSURL { - return _url - } - - public static func _forceBridgeFromObjectiveC(_ source: NSURL, result: inout URL?) { - if !_conditionallyBridgeFromObjectiveC(source, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ source: NSURL, result: inout URL?) -> Bool { - result = URL(reference: source) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSURL?) -> URL { - var result: URL? - _forceBridgeFromObjectiveC(source!, result: &result) - return result! - } -} - -extension URL : CustomStringConvertible, CustomDebugStringConvertible { - public var description: String { - return _url.description - } - - public var debugDescription: String { - return _url.debugDescription - } -} - -extension NSURL : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as URL) - } -} - -extension URL : _CustomPlaygroundQuickLookable { - @available(*, deprecated, message: "URL.customPlaygroundQuickLook will be removed in a future Swift version") - public var customPlaygroundQuickLook: PlaygroundQuickLook { - return .url(absoluteString) - } -} - -extension URL : Codable { - private enum CodingKeys : Int, CodingKey { - case base - case relative - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let relative = try container.decode(String.self, forKey: .relative) - let base = try container.decodeIfPresent(URL.self, forKey: .base) - - guard let url = URL(string: relative, relativeTo: base) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, - debugDescription: "Invalid URL string.")) - } - - self = url - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(self.relativeString, forKey: .relative) - if let base = self.baseURL { - try container.encode(base, forKey: .base) - } - } -} - -//===----------------------------------------------------------------------===// -// File references, for playgrounds. -//===----------------------------------------------------------------------===// - -extension URL : _ExpressibleByFileReferenceLiteral { - public init(fileReferenceLiteralResourceName name: String) { - self = Bundle.main.url(forResource: name, withExtension: nil)! - } -} - -public typealias _FileReferenceLiteralType = URL diff --git a/Darwin/Foundation-swiftoverlay/URLCache.swift b/Darwin/Foundation-swiftoverlay/URLCache.swift deleted file mode 100644 index cbe7293cba..0000000000 --- a/Darwin/Foundation-swiftoverlay/URLCache.swift +++ /dev/null @@ -1,20 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -extension URLCache { - @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) - public convenience init(memoryCapacity: Int, diskCapacity: Int, directory: URL? = nil) { - self.init(__memoryCapacity: memoryCapacity, diskCapacity: diskCapacity, directoryURL: directory) - } -} diff --git a/Darwin/Foundation-swiftoverlay/URLComponents.swift b/Darwin/Foundation-swiftoverlay/URLComponents.swift deleted file mode 100644 index d3994c3fbd..0000000000 --- a/Darwin/Foundation-swiftoverlay/URLComponents.swift +++ /dev/null @@ -1,517 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -/// A structure designed to parse URLs based on RFC 3986 and to construct URLs from their constituent parts. -/// -/// Its behavior differs subtly from the `URL` struct, which conforms to older RFCs. However, you can easily obtain a `URL` based on the contents of a `URLComponents` or vice versa. -public struct URLComponents : ReferenceConvertible, Hashable, Equatable, _MutableBoxing { - public typealias ReferenceType = NSURLComponents - - internal var _handle: _MutableHandle - - /// Initialize with all components undefined. - public init() { - _handle = _MutableHandle(adoptingReference: NSURLComponents()) - } - - /// Initialize with the components of a URL. - /// - /// If resolvingAgainstBaseURL is `true` and url is a relative URL, the components of url.absoluteURL are used. If the url string from the URL is malformed, nil is returned. - public init?(url: __shared URL, resolvingAgainstBaseURL resolve: Bool) { - guard let result = NSURLComponents(url: url, resolvingAgainstBaseURL: resolve) else { return nil } - _handle = _MutableHandle(adoptingReference: result) - } - - /// Initialize with a URL string. - /// - /// If the URLString is malformed, nil is returned. - public init?(string: __shared String) { - guard let result = NSURLComponents(string: string) else { return nil } - _handle = _MutableHandle(adoptingReference: result) - } - - /// Returns a URL created from the NSURLComponents. - /// - /// If the NSURLComponents has an authority component (user, password, host or port) and a path component, then the path must either begin with "/" or be an empty string. If the NSURLComponents does not have an authority component (user, password, host or port) and has a path component, the path component must not start with "//". If those requirements are not met, nil is returned. - public var url: URL? { - return _handle.map { $0.url } - } - - // Returns a URL created from the NSURLComponents relative to a base URL. - /// - /// If the NSURLComponents has an authority component (user, password, host or port) and a path component, then the path must either begin with "/" or be an empty string. If the NSURLComponents does not have an authority component (user, password, host or port) and has a path component, the path component must not start with "//". If those requirements are not met, nil is returned. - public func url(relativeTo base: URL?) -> URL? { - return _handle.map { $0.url(relativeTo: base) } - } - - // Returns a URL string created from the NSURLComponents. If the NSURLComponents has an authority component (user, password, host or port) and a path component, then the path must either begin with "/" or be an empty string. If the NSURLComponents does not have an authority component (user, password, host or port) and has a path component, the path component must not start with "//". If those requirements are not met, nil is returned. - @available(macOS 10.10, iOS 8.0, *) - public var string: String? { - return _handle.map { $0.string } - } - - /// The scheme subcomponent of the URL. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - /// Attempting to set the scheme with an invalid scheme string will cause an exception. - public var scheme: String? { - get { return _handle.map { $0.scheme } } - set { _applyMutation { $0.scheme = newValue } } - } - - /// The user subcomponent of the URL. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - /// - /// Warning: IETF STD 66 (rfc3986) says the use of the format "user:password" in the userinfo subcomponent of a URI is deprecated because passing authentication information in clear text has proven to be a security risk. However, there are cases where this practice is still needed, and so the user and password components and methods are provided. - public var user: String? { - get { return _handle.map { $0.user } } - set { _applyMutation { $0.user = newValue } } - } - - /// The password subcomponent of the URL. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - /// - /// Warning: IETF STD 66 (rfc3986) says the use of the format "user:password" in the userinfo subcomponent of a URI is deprecated because passing authentication information in clear text has proven to be a security risk. However, there are cases where this practice is still needed, and so the user and password components and methods are provided. - public var password: String? { - get { return _handle.map { $0.password } } - set { _applyMutation { $0.password = newValue } } - } - - /// The host subcomponent. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - public var host: String? { - get { return _handle.map { $0.host } } - set { _applyMutation { $0.host = newValue } } - } - - /// The port subcomponent. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - /// Attempting to set a negative port number will cause a fatal error. - public var port: Int? { - get { return _handle.map { $0.port?.intValue } } - set { _applyMutation { $0.port = newValue != nil ? newValue as NSNumber? : nil as NSNumber?} } - } - - /// The path subcomponent. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - public var path: String { - get { - guard let result = _handle.map({ $0.path }) else { return "" } - return result - } - set { - _applyMutation { $0.path = newValue } - } - } - - /// The query subcomponent. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - public var query: String? { - get { return _handle.map { $0.query } } - set { _applyMutation { $0.query = newValue } } - } - - /// The fragment subcomponent. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - public var fragment: String? { - get { return _handle.map { $0.fragment } } - set { _applyMutation { $0.fragment = newValue } } - } - - - /// The user subcomponent, percent-encoded. - /// - /// The getter for this property retains any percent encoding this component may have. Setting this properties assumes the component string is already correctly percent encoded. Attempting to set an incorrectly percent encoded string will cause a `fatalError`. Although ';' is a legal path character, it is recommended that it be percent-encoded for best compatibility with `URL` (`String.addingPercentEncoding(withAllowedCharacters:)` will percent-encode any ';' characters if you pass `CharacterSet.urlUserAllowed`). - public var percentEncodedUser: String? { - get { return _handle.map { $0.percentEncodedUser } } - set { _applyMutation { $0.percentEncodedUser = newValue } } - } - - /// The password subcomponent, percent-encoded. - /// - /// The getter for this property retains any percent encoding this component may have. Setting this properties assumes the component string is already correctly percent encoded. Attempting to set an incorrectly percent encoded string will cause a `fatalError`. Although ';' is a legal path character, it is recommended that it be percent-encoded for best compatibility with `URL` (`String.addingPercentEncoding(withAllowedCharacters:)` will percent-encode any ';' characters if you pass `CharacterSet.urlPasswordAllowed`). - public var percentEncodedPassword: String? { - get { return _handle.map { $0.percentEncodedPassword } } - set { _applyMutation { $0.percentEncodedPassword = newValue } } - } - - /// The host subcomponent, percent-encoded. - /// - /// The getter for this property retains any percent encoding this component may have. Setting this properties assumes the component string is already correctly percent encoded. Attempting to set an incorrectly percent encoded string will cause a `fatalError`. Although ';' is a legal path character, it is recommended that it be percent-encoded for best compatibility with `URL` (`String.addingPercentEncoding(withAllowedCharacters:)` will percent-encode any ';' characters if you pass `CharacterSet.urlHostAllowed`). - public var percentEncodedHost: String? { - get { return _handle.map { $0.percentEncodedHost } } - set { _applyMutation { $0.percentEncodedHost = newValue } } - } - - /// The path subcomponent, percent-encoded. - /// - /// The getter for this property retains any percent encoding this component may have. Setting this properties assumes the component string is already correctly percent encoded. Attempting to set an incorrectly percent encoded string will cause a `fatalError`. Although ';' is a legal path character, it is recommended that it be percent-encoded for best compatibility with `URL` (`String.addingPercentEncoding(withAllowedCharacters:)` will percent-encode any ';' characters if you pass `CharacterSet.urlPathAllowed`). - public var percentEncodedPath: String { - get { - guard let result = _handle.map({ $0.percentEncodedPath }) else { return "" } - return result - } - set { - _applyMutation { $0.percentEncodedPath = newValue } - } - } - - /// The query subcomponent, percent-encoded. - /// - /// The getter for this property retains any percent encoding this component may have. Setting this properties assumes the component string is already correctly percent encoded. Attempting to set an incorrectly percent encoded string will cause a `fatalError`. Although ';' is a legal path character, it is recommended that it be percent-encoded for best compatibility with `URL` (`String.addingPercentEncoding(withAllowedCharacters:)` will percent-encode any ';' characters if you pass `CharacterSet.urlQueryAllowed`). - public var percentEncodedQuery: String? { - get { return _handle.map { $0.percentEncodedQuery } } - set { _applyMutation { $0.percentEncodedQuery = newValue } } - } - - /// The fragment subcomponent, percent-encoded. - /// - /// The getter for this property retains any percent encoding this component may have. Setting this properties assumes the component string is already correctly percent encoded. Attempting to set an incorrectly percent encoded string will cause a `fatalError`. Although ';' is a legal path character, it is recommended that it be percent-encoded for best compatibility with `URL` (`String.addingPercentEncoding(withAllowedCharacters:)` will percent-encode any ';' characters if you pass `CharacterSet.urlFragmentAllowed`). - public var percentEncodedFragment: String? { - get { return _handle.map { $0.percentEncodedFragment } } - set { _applyMutation { $0.percentEncodedFragment = newValue } } - } - - @available(macOS 10.11, iOS 9.0, *) - private func _toStringRange(_ r : NSRange) -> Range? { - guard let s = self.string else { return nil } - return Range(r, in: s) - } - - /// Returns the character range of the scheme in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - @available(macOS 10.11, iOS 9.0, *) - public var rangeOfScheme: Range? { - return _toStringRange(_handle.map { $0.rangeOfScheme }) - } - - /// Returns the character range of the user in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - @available(macOS 10.11, iOS 9.0, *) - public var rangeOfUser: Range? { - return _toStringRange(_handle.map { $0.rangeOfUser }) - } - - /// Returns the character range of the password in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - @available(macOS 10.11, iOS 9.0, *) - public var rangeOfPassword: Range? { - return _toStringRange(_handle.map { $0.rangeOfPassword }) - } - - /// Returns the character range of the host in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - @available(macOS 10.11, iOS 9.0, *) - public var rangeOfHost: Range? { - return _toStringRange(_handle.map { $0.rangeOfHost }) - } - - /// Returns the character range of the port in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - @available(macOS 10.11, iOS 9.0, *) - public var rangeOfPort: Range? { - return _toStringRange(_handle.map { $0.rangeOfPort }) - } - - /// Returns the character range of the path in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - @available(macOS 10.11, iOS 9.0, *) - public var rangeOfPath: Range? { - return _toStringRange(_handle.map { $0.rangeOfPath }) - } - - /// Returns the character range of the query in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - @available(macOS 10.11, iOS 9.0, *) - public var rangeOfQuery: Range? { - return _toStringRange(_handle.map { $0.rangeOfQuery }) - } - - /// Returns the character range of the fragment in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - @available(macOS 10.11, iOS 9.0, *) - public var rangeOfFragment: Range? { - return _toStringRange(_handle.map { $0.rangeOfFragment }) - } - - /// Returns an array of query items for this `URLComponents`, in the order in which they appear in the original query string. - /// - /// Each `URLQueryItem` represents a single key-value pair, - /// - /// Note that a name may appear more than once in a single query string, so the name values are not guaranteed to be unique. If the `URLComponents` has an empty query component, returns an empty array. If the `URLComponents` has no query component, returns nil. - /// - /// The setter combines an array containing any number of `URLQueryItem`s, each of which represents a single key-value pair, into a query string and sets the `URLComponents` query property. Passing an empty array sets the query component of the `URLComponents` to an empty string. Passing nil removes the query component of the `URLComponents`. - /// - /// - note: If a name-value pair in a query is empty (i.e. the query string starts with '&', ends with '&', or has "&&" within it), you get a `URLQueryItem` with a zero-length name and a nil value. If a query's name-value pair has nothing before the equals sign, you get a zero-length name. If a query's name-value pair has nothing after the equals sign, you get a zero-length value. If a query's name-value pair has no equals sign, the query name-value pair string is the name and you get a nil value. - @available(macOS 10.10, iOS 8.0, *) - public var queryItems: [URLQueryItem]? { - get { return _handle.map { $0.queryItems } } - set { _applyMutation { $0.queryItems = newValue } } - } - - /// Returns an array of query items for this `URLComponents`, in the order in which they appear in the original query string. Any percent-encoding in a query item name or value is retained - /// - /// The setter combines an array containing any number of `URLQueryItem`s, each of which represents a single key-value pair, into a query string and sets the `URLComponents` query property. This property assumes the query item names and values are already correctly percent-encoded, and that the query item names do not contain the query item delimiter characters '&' and '='. Attempting to set an incorrectly percent-encoded query item or a query item name with the query item delimiter characters '&' and '=' will cause a `fatalError`. - @available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) - public var percentEncodedQueryItems: [URLQueryItem]? { - get { return _handle.map { $0.percentEncodedQueryItems } } - set { _applyMutation { $0.percentEncodedQueryItems = newValue } } - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(_handle._uncopiedReference()) - } - - // MARK: - Bridging - - fileprivate init(reference: __shared NSURLComponents) { - _handle = _MutableHandle(reference: reference) - } - - public static func ==(lhs: URLComponents, rhs: URLComponents) -> Bool { - // Don't copy references here; no one should be storing anything - return lhs._handle._uncopiedReference().isEqual(rhs._handle._uncopiedReference()) - } -} - -extension URLComponents : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - - public var description: String { - if let u = url { - return u.description - } else { - return self.customMirror.children.reduce("") { - $0.appending("\($1.label ?? ""): \($1.value) ") - } - } - } - - public var debugDescription: String { - return self.description - } - - public var customMirror: Mirror { - var c: [(label: String?, value: Any)] = [] - - if let s = self.scheme { c.append((label: "scheme", value: s)) } - if let u = self.user { c.append((label: "user", value: u)) } - if let pw = self.password { c.append((label: "password", value: pw)) } - if let h = self.host { c.append((label: "host", value: h)) } - if let p = self.port { c.append((label: "port", value: p)) } - - c.append((label: "path", value: self.path)) - if #available(macOS 10.10, iOS 8.0, *) { - if let qi = self.queryItems { c.append((label: "queryItems", value: qi)) } - } - if let f = self.fragment { c.append((label: "fragment", value: f)) } - let m = Mirror(self, children: c, displayStyle: Mirror.DisplayStyle.struct) - return m - } -} - -extension URLComponents : _ObjectiveCBridgeable { - public static func _getObjectiveCType() -> Any.Type { - return NSURLComponents.self - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSURLComponents { - return _handle._copiedReference() - } - - public static func _forceBridgeFromObjectiveC(_ x: NSURLComponents, result: inout URLComponents?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSURLComponents, result: inout URLComponents?) -> Bool { - result = URLComponents(reference: x) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSURLComponents?) -> URLComponents { - guard let src = source else { return URLComponents() } - return URLComponents(reference: src) - } -} - -extension NSURLComponents : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as URLComponents) - } -} - - -/// A single name-value pair, for use with `URLComponents`. -@available(macOS 10.10, iOS 8.0, *) -public struct URLQueryItem : ReferenceConvertible, Hashable, Equatable { - public typealias ReferenceType = NSURLQueryItem - - fileprivate var _queryItem : NSURLQueryItem - - public init(name: __shared String, value: __shared String?) { - _queryItem = NSURLQueryItem(name: name, value: value) - } - - fileprivate init(reference: __shared NSURLQueryItem) { _queryItem = reference.copy() as! NSURLQueryItem } - fileprivate var reference : NSURLQueryItem { return _queryItem } - - public var name : String { - get { return _queryItem.name } - set { _queryItem = NSURLQueryItem(name: newValue, value: value) } - } - - public var value : String? { - get { return _queryItem.value } - set { _queryItem = NSURLQueryItem(name: name, value: newValue) } - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(_queryItem) - } - - @available(macOS 10.10, iOS 8.0, *) - public static func ==(lhs: URLQueryItem, rhs: URLQueryItem) -> Bool { - return lhs._queryItem.isEqual(rhs as NSURLQueryItem) - } -} - -@available(macOS 10.10, iOS 8.0, *) -extension URLQueryItem : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - - public var description: String { - if let v = value { - return "\(name)=\(v)" - } else { - return name - } - } - - public var debugDescription: String { - return self.description - } - - public var customMirror: Mirror { - let c: [(label: String?, value: Any)] = [ - ("name", name), - ("value", value as Any), - ] - return Mirror(self, children: c, displayStyle: Mirror.DisplayStyle.struct) - } -} - -@available(macOS 10.10, iOS 8.0, *) -extension URLQueryItem : _ObjectiveCBridgeable { - public static func _getObjectiveCType() -> Any.Type { - return NSURLQueryItem.self - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSURLQueryItem { - return _queryItem - } - - public static func _forceBridgeFromObjectiveC(_ x: NSURLQueryItem, result: inout URLQueryItem?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSURLQueryItem, result: inout URLQueryItem?) -> Bool { - result = URLQueryItem(reference: x) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSURLQueryItem?) -> URLQueryItem { - var result: URLQueryItem? - _forceBridgeFromObjectiveC(source!, result: &result) - return result! - } -} - -@available(macOS 10.10, iOS 8.0, *) -extension NSURLQueryItem : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as URLQueryItem) - } -} - -extension URLComponents : Codable { - private enum CodingKeys : Int, CodingKey { - case scheme - case user - case password - case host - case port - case path - case query - case fragment - } - - public init(from decoder: Decoder) throws { - self.init() - - let container = try decoder.container(keyedBy: CodingKeys.self) - self.scheme = try container.decodeIfPresent(String.self, forKey: .scheme) - self.user = try container.decodeIfPresent(String.self, forKey: .user) - self.password = try container.decodeIfPresent(String.self, forKey: .password) - self.host = try container.decodeIfPresent(String.self, forKey: .host) - self.port = try container.decodeIfPresent(Int.self, forKey: .port) - self.path = try container.decode(String.self, forKey: .path) - self.query = try container.decodeIfPresent(String.self, forKey: .query) - self.fragment = try container.decodeIfPresent(String.self, forKey: .fragment) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(self.scheme, forKey: .scheme) - try container.encodeIfPresent(self.user, forKey: .user) - try container.encodeIfPresent(self.password, forKey: .password) - try container.encodeIfPresent(self.host, forKey: .host) - try container.encodeIfPresent(self.port, forKey: .port) - try container.encode(self.path, forKey: .path) - try container.encodeIfPresent(self.query, forKey: .query) - try container.encodeIfPresent(self.fragment, forKey: .fragment) - } -} diff --git a/Darwin/Foundation-swiftoverlay/URLRequest.swift b/Darwin/Foundation-swiftoverlay/URLRequest.swift deleted file mode 100644 index d8bd1ce0ad..0000000000 --- a/Darwin/Foundation-swiftoverlay/URLRequest.swift +++ /dev/null @@ -1,328 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -@available(*, deprecated, message: "Please use the struct type URLRequest") -public typealias MutableURLRequest = NSMutableURLRequest - -public struct URLRequest : ReferenceConvertible, Equatable, Hashable { - public typealias ReferenceType = NSURLRequest - public typealias CachePolicy = NSURLRequest.CachePolicy - public typealias NetworkServiceType = NSURLRequest.NetworkServiceType - - /* - NSURLRequest has a fragile ivar layout that prevents the swift subclass approach here, so instead we keep an always mutable copy - */ - internal var _handle: _MutableHandle - - internal mutating func _applyMutation(_ whatToDo : (NSMutableURLRequest) -> ReturnType) -> ReturnType { - if !isKnownUniquelyReferenced(&_handle) { - let ref = _handle._uncopiedReference() - _handle = _MutableHandle(reference: ref) - } - return whatToDo(_handle._uncopiedReference()) - } - - /// Creates and initializes a URLRequest with the given URL and cache policy. - /// - parameter: url The URL for the request. - /// - parameter: cachePolicy The cache policy for the request. Defaults to `.useProtocolCachePolicy` - /// - parameter: timeoutInterval The timeout interval for the request. See the commentary for the `timeoutInterval` for more information on timeout intervals. Defaults to 60.0 - public init(url: URL, cachePolicy: CachePolicy = .useProtocolCachePolicy, timeoutInterval: TimeInterval = 60.0) { - _handle = _MutableHandle(adoptingReference: NSMutableURLRequest(url: url, cachePolicy: cachePolicy, timeoutInterval: timeoutInterval)) - } - - private init(_bridged request: __shared NSURLRequest) { - _handle = _MutableHandle(reference: request.mutableCopy() as! NSMutableURLRequest) - } - - /// The URL of the receiver. - public var url: URL? { - get { - return _handle.map { $0.url } - } - set { - _applyMutation { $0.url = newValue } - } - } - - /// The cache policy of the receiver. - public var cachePolicy: CachePolicy { - get { - return _handle.map { $0.cachePolicy } - } - set { - _applyMutation { $0.cachePolicy = newValue } - } - } - - /// Returns the timeout interval of the receiver. - /// - discussion: The timeout interval specifies the limit on the idle - /// interval allotted to a request in the process of loading. The "idle - /// interval" is defined as the period of time that has passed since the - /// last instance of load activity occurred for a request that is in the - /// process of loading. Hence, when an instance of load activity occurs - /// (e.g. bytes are received from the network for a request), the idle - /// interval for a request is reset to 0. If the idle interval ever - /// becomes greater than or equal to the timeout interval, the request - /// is considered to have timed out. This timeout interval is measured - /// in seconds. - public var timeoutInterval: TimeInterval { - get { - return _handle.map { $0.timeoutInterval } - } - set { - _applyMutation { $0.timeoutInterval = newValue } - } - } - - /// The main document URL associated with this load. - /// - discussion: This URL is used for the cookie "same domain as main - /// document" policy. - public var mainDocumentURL: URL? { - get { - return _handle.map { $0.mainDocumentURL } - } - set { - _applyMutation { $0.mainDocumentURL = newValue } - } - } - - /// The URLRequest.NetworkServiceType associated with this request. - /// - discussion: This will return URLRequest.NetworkServiceType.default for requests that have - /// not explicitly set a networkServiceType - @available(macOS 10.7, iOS 4.0, *) - public var networkServiceType: NetworkServiceType { - get { - return _handle.map { $0.networkServiceType } - } - set { - _applyMutation { $0.networkServiceType = newValue } - } - } - - /// `true` if the receiver is allowed to use the built in cellular radios to - /// satisfy the request, `false` otherwise. - @available(macOS 10.8, iOS 6.0, *) - public var allowsCellularAccess: Bool { - get { - return _handle.map { $0.allowsCellularAccess } - } - set { - _applyMutation { $0.allowsCellularAccess = newValue } - } - } - - /// `true` if the receiver is allowed to use an interface marked as expensive to - /// satify the request, `false` otherwise. - @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) - public var allowsExpensiveNetworkAccess: Bool { - get { - return _handle.map { $0.allowsExpensiveNetworkAccess } - } - set { - _applyMutation { $0.allowsExpensiveNetworkAccess = newValue } - } - } - - /// `true` if the receiver is allowed to use an interface marked as constrained to - /// satify the request, `false` otherwise. - @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) - public var allowsConstrainedNetworkAccess: Bool { - get { - return _handle.map { $0.allowsConstrainedNetworkAccess } - } - set { - _applyMutation { $0.allowsConstrainedNetworkAccess = newValue } - } - } - - /// The HTTP request method of the receiver. - public var httpMethod: String? { - get { - return _handle.map { $0.httpMethod } - } - set { - _applyMutation { - if let value = newValue { - $0.httpMethod = value - } else { - $0.httpMethod = "GET" - } - } - } - } - - /// A dictionary containing all the HTTP header fields of the - /// receiver. - public var allHTTPHeaderFields: [String : String]? { - get { - return _handle.map { $0.allHTTPHeaderFields } - } - set { - _applyMutation { $0.allHTTPHeaderFields = newValue } - } - } - - /// The value which corresponds to the given header - /// field. Note that, in keeping with the HTTP RFC, HTTP header field - /// names are case-insensitive. - /// - parameter: field the header field name to use for the lookup (case-insensitive). - public func value(forHTTPHeaderField field: String) -> String? { - return _handle.map { $0.value(forHTTPHeaderField: field) } - } - - /// If a value was previously set for the given header - /// field, that value is replaced with the given value. Note that, in - /// keeping with the HTTP RFC, HTTP header field names are - /// case-insensitive. - public mutating func setValue(_ value: String?, forHTTPHeaderField field: String) { - _applyMutation { - $0.setValue(value, forHTTPHeaderField: field) - } - } - - /// This method provides a way to add values to header - /// fields incrementally. If a value was previously set for the given - /// header field, the given value is appended to the previously-existing - /// value. The appropriate field delimiter, a comma in the case of HTTP, - /// is added by the implementation, and should not be added to the given - /// value by the caller. Note that, in keeping with the HTTP RFC, HTTP - /// header field names are case-insensitive. - public mutating func addValue(_ value: String, forHTTPHeaderField field: String) { - _applyMutation { - $0.addValue(value, forHTTPHeaderField: field) - } - } - - /// This data is sent as the message body of the request, as - /// in done in an HTTP POST request. - public var httpBody: Data? { - get { - return _handle.map { $0.httpBody } - } - set { - _applyMutation { $0.httpBody = newValue } - } - } - - /// The stream is returned for examination only; it is - /// not safe for the caller to manipulate the stream in any way. Also - /// note that the HTTPBodyStream and HTTPBody are mutually exclusive - only - /// one can be set on a given request. Also note that the body stream is - /// preserved across copies, but is LOST when the request is coded via the - /// NSCoding protocol - public var httpBodyStream: InputStream? { - get { - return _handle.map { $0.httpBodyStream } - } - set { - _applyMutation { $0.httpBodyStream = newValue } - } - } - - /// `true` if cookies will be sent with and set for this request; otherwise `false`. - public var httpShouldHandleCookies: Bool { - get { - return _handle.map { $0.httpShouldHandleCookies } - } - set { - _applyMutation { $0.httpShouldHandleCookies = newValue } - } - } - - /// `true` if the receiver should transmit before the previous response - /// is received. `false` if the receiver should wait for the previous response - /// before transmitting. - @available(macOS 10.7, iOS 4.0, *) - public var httpShouldUsePipelining: Bool { - get { - return _handle.map { $0.httpShouldUsePipelining } - } - set { - _applyMutation { $0.httpShouldUsePipelining = newValue } - } - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(_handle._uncopiedReference()) - } - - public static func ==(lhs: URLRequest, rhs: URLRequest) -> Bool { - return lhs._handle._uncopiedReference().isEqual(rhs._handle._uncopiedReference()) - } -} - -extension URLRequest : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - - public var description: String { - return url?.description ?? "url: nil" - } - - public var debugDescription: String { - return self.description - } - - public var customMirror: Mirror { - let c: [(label: String?, value: Any)] = [ - ("url", url as Any), - ("cachePolicy", cachePolicy.rawValue), - ("timeoutInterval", timeoutInterval), - ("mainDocumentURL", mainDocumentURL as Any), - ("networkServiceType", networkServiceType), - ("allowsCellularAccess", allowsCellularAccess), - ("httpMethod", httpMethod as Any), - ("allHTTPHeaderFields", allHTTPHeaderFields as Any), - ("httpBody", httpBody as Any), - ("httpBodyStream", httpBodyStream as Any), - ("httpShouldHandleCookies", httpShouldHandleCookies), - ("httpShouldUsePipelining", httpShouldUsePipelining), - ] - return Mirror(self, children: c, displayStyle: Mirror.DisplayStyle.struct) - } -} - -extension URLRequest : _ObjectiveCBridgeable { - public static func _getObjectiveCType() -> Any.Type { - return NSURLRequest.self - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSURLRequest { - return _handle._copiedReference() - } - - public static func _forceBridgeFromObjectiveC(_ input: NSURLRequest, result: inout URLRequest?) { - result = URLRequest(_bridged: input) - } - - public static func _conditionallyBridgeFromObjectiveC(_ input: NSURLRequest, result: inout URLRequest?) -> Bool { - result = URLRequest(_bridged: input) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSURLRequest?) -> URLRequest { - var result: URLRequest? - _forceBridgeFromObjectiveC(source!, result: &result) - return result! - } -} - -extension NSURLRequest : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as URLRequest) - } -} - diff --git a/Darwin/Foundation-swiftoverlay/URLSession.swift b/Darwin/Foundation-swiftoverlay/URLSession.swift deleted file mode 100644 index f1f5516b14..0000000000 --- a/Darwin/Foundation-swiftoverlay/URLSession.swift +++ /dev/null @@ -1,69 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module - -@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) -extension URLSessionWebSocketTask { - public enum Message { - case data(Data) - case string(String) - } - - public func send(_ message: Message, completionHandler: @escaping (Error?) -> Void) { - switch message { - case .data(let data): - __send(__NSURLSessionWebSocketMessage(data: data), completionHandler: completionHandler) - case .string(let string): - __send(__NSURLSessionWebSocketMessage(string: string), completionHandler: completionHandler) - } - } - - public func receive(completionHandler: @escaping (Result) -> Void) { - __receiveMessage { message, error in - switch (message, error) { - case (.some(let message), nil): - switch message.type { - case .data: - completionHandler(.success(.data(message.data!))) - case .string: - completionHandler(.success(.string(message.string!))) - @unknown default: - break - } - case (nil, .some(let error)): - completionHandler(.failure(error)) - case (_, _): - fatalError("Only one of message or error should be nil") - } - } - } -} - -@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) -extension URLSessionTaskTransactionMetrics { - public var localPort: Int? { - return __localPort as? Int - } - - public var remotePort: Int? { - return __remotePort as? Int - } - - public var negotiatedTLSProtocolVersion: tls_protocol_version_t? { - return (__negotiatedTLSProtocolVersion as? UInt16).flatMap(tls_protocol_version_t.init(rawValue:)) - } - - public var negotiatedTLSCipherSuite: tls_ciphersuite_t? { - return (__negotiatedTLSCipherSuite as? UInt16).flatMap(tls_ciphersuite_t.init(rawValue:)) - } -} diff --git a/Darwin/Foundation-swiftoverlay/UUID.swift b/Darwin/Foundation-swiftoverlay/UUID.swift deleted file mode 100644 index d89dbb3b4c..0000000000 --- a/Darwin/Foundation-swiftoverlay/UUID.swift +++ /dev/null @@ -1,172 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_exported import Foundation // Clang module -import Darwin.uuid -@_implementationOnly import _CoreFoundationOverlayShims - -/// Represents UUID strings, which can be used to uniquely identify types, interfaces, and other items. -@available(macOS 10.8, iOS 6.0, *) -public struct UUID : ReferenceConvertible, Hashable, Equatable, CustomStringConvertible { - public typealias ReferenceType = NSUUID - - public private(set) var uuid: uuid_t = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - - /* Create a new UUID with RFC 4122 version 4 random bytes */ - public init() { - withUnsafeMutablePointer(to: &uuid) { - $0.withMemoryRebound(to: UInt8.self, capacity: 16) { - uuid_generate_random($0) - } - } - } - - private init(reference: __shared NSUUID) { - var bytes: uuid_t = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - withUnsafeMutablePointer(to: &bytes) { - $0.withMemoryRebound(to: UInt8.self, capacity: 16) { - reference.getBytes($0) - } - } - uuid = bytes - } - - /// Create a UUID from a string such as "E621E1F8-C36C-495A-93FC-0C247A3E6E5F". - /// - /// Returns nil for invalid strings. - public init?(uuidString string: __shared String) { - let res = withUnsafeMutablePointer(to: &uuid) { - $0.withMemoryRebound(to: UInt8.self, capacity: 16) { - return uuid_parse(string, $0) - } - } - if res != 0 { - return nil - } - } - - /// Create a UUID from a `uuid_t`. - public init(uuid: uuid_t) { - self.uuid = uuid - } - - /// Returns a string created from the UUID, such as "E621E1F8-C36C-495A-93FC-0C247A3E6E5F" - public var uuidString: String { - var bytes: uuid_string_t = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - return withUnsafePointer(to: uuid) { - $0.withMemoryRebound(to: UInt8.self, capacity: 16) { val in - withUnsafeMutablePointer(to: &bytes) { - $0.withMemoryRebound(to: Int8.self, capacity: 37) { str in - uuid_unparse(val, str) - return String(cString: UnsafePointer(str), encoding: .utf8)! - } - } - } - } - } - - public func hash(into hasher: inout Hasher) { - withUnsafeBytes(of: uuid) { buffer in - hasher.combine(bytes: buffer) - } - } - - public var description: String { - return uuidString - } - - public var debugDescription: String { - return description - } - - // MARK: - Bridging Support - - private var reference: NSUUID { - return withUnsafePointer(to: uuid) { - $0.withMemoryRebound(to: UInt8.self, capacity: 16) { - return NSUUID(uuidBytes: $0) - } - } - } - - public static func ==(lhs: UUID, rhs: UUID) -> Bool { - return withUnsafeBytes(of: rhs.uuid) { (rhsPtr) -> Bool in - return withUnsafeBytes(of: lhs.uuid) { (lhsPtr) -> Bool in - let lhsFirstChunk = lhsPtr.load(fromByteOffset: 0, as: UInt64.self) - let lhsSecondChunk = lhsPtr.load(fromByteOffset: MemoryLayout.size, as: UInt64.self) - let rhsFirstChunk = rhsPtr.load(fromByteOffset: 0, as: UInt64.self) - let rhsSecondChunk = rhsPtr.load(fromByteOffset: MemoryLayout.size, as: UInt64.self) - return ((lhsFirstChunk ^ rhsFirstChunk) | (lhsSecondChunk ^ rhsSecondChunk)) == 0 - } - } - } -} - -extension UUID : CustomReflectable { - public var customMirror: Mirror { - let c : [(label: String?, value: Any)] = [] - let m = Mirror(self, children:c, displayStyle: Mirror.DisplayStyle.struct) - return m - } -} - -extension UUID : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSUUID { - return reference - } - - public static func _forceBridgeFromObjectiveC(_ x: NSUUID, result: inout UUID?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(_ObjectiveCType.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ input: NSUUID, result: inout UUID?) -> Bool { - result = UUID(reference: input) - return true - } - - @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSUUID?) -> UUID { - var result: UUID? - _forceBridgeFromObjectiveC(source!, result: &result) - return result! - } -} - -extension NSUUID : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(self as UUID) - } -} - -extension UUID : Codable { - public init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - let uuidString = try container.decode(String.self) - - guard let uuid = UUID(uuidString: uuidString) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, - debugDescription: "Attempted to decode UUID from invalid UUID string.")) - } - - self = uuid - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(self.uuidString) - } -} diff --git a/Darwin/Foundation-swiftoverlay/magic-symbols-for-install-name.c b/Darwin/Foundation-swiftoverlay/magic-symbols-for-install-name.c deleted file mode 100644 index 8c549713a8..0000000000 --- a/Darwin/Foundation-swiftoverlay/magic-symbols-for-install-name.c +++ /dev/null @@ -1,13 +0,0 @@ -//===--- magic-symbols-for-install-name.c - Magic linker directive symbols ===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#include "magic-symbols-for-install-name.h" diff --git a/Darwin/Foundation-swiftoverlay/magic-symbols-for-install-name.h b/Darwin/Foundation-swiftoverlay/magic-symbols-for-install-name.h deleted file mode 100644 index b79359db68..0000000000 --- a/Darwin/Foundation-swiftoverlay/magic-symbols-for-install-name.h +++ /dev/null @@ -1,100 +0,0 @@ -//===--- magic-symbols-for-install-name.h - Magic linker directive symbols ===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// -// -// A file containing magic symbols that instruct the linker to use a -// different install name when targeting older OSes. This file gets -// compiled into all of the libraries that are embedded for backward -// deployment. -// -//===----------------------------------------------------------------------===// - -#if defined(__APPLE__) && defined(__MACH__) - -#include -#include - -#ifndef SWIFT_TARGET_LIBRARY_NAME -#error Please define SWIFT_TARGET_LIBRARY_NAME -#endif - -#define SWIFT_RUNTIME_EXPORT __attribute__((__visibility__("default"))) - -#define RPATH_INSTALL_NAME_DIRECTIVE_IMPL2(name, major, minor) \ - SWIFT_RUNTIME_EXPORT const char install_name_ ## major ## _ ## minor \ - __asm("$ld$install_name$os" #major "." #minor "$@rpath/lib" #name ".dylib"); \ - const char install_name_ ## major ## _ ## minor = 0; - -#define RPATH_INSTALL_NAME_DIRECTIVE_IMPL(name, major, minor) \ - RPATH_INSTALL_NAME_DIRECTIVE_IMPL2(name, major, minor) - -#define RPATH_INSTALL_NAME_DIRECTIVE(major, minor) \ - RPATH_INSTALL_NAME_DIRECTIVE_IMPL(SWIFT_TARGET_LIBRARY_NAME, major, minor) - - -// Check iOS last, because TARGET_OS_IPHONE includes both watchOS and macCatalyst. -#if TARGET_OS_OSX - RPATH_INSTALL_NAME_DIRECTIVE(10, 9) - RPATH_INSTALL_NAME_DIRECTIVE(10, 10) - RPATH_INSTALL_NAME_DIRECTIVE(10, 11) - RPATH_INSTALL_NAME_DIRECTIVE(10, 12) - RPATH_INSTALL_NAME_DIRECTIVE(10, 13) - RPATH_INSTALL_NAME_DIRECTIVE(10, 14) -#elif TARGET_OS_MACCATALYST - // Note: This only applies to zippered overlays. - RPATH_INSTALL_NAME_DIRECTIVE(10, 9) - RPATH_INSTALL_NAME_DIRECTIVE(10, 10) - RPATH_INSTALL_NAME_DIRECTIVE(10, 11) - RPATH_INSTALL_NAME_DIRECTIVE(10, 12) - RPATH_INSTALL_NAME_DIRECTIVE(10, 13) - RPATH_INSTALL_NAME_DIRECTIVE(10, 14) -#elif TARGET_OS_WATCH - RPATH_INSTALL_NAME_DIRECTIVE( 2, 0) - RPATH_INSTALL_NAME_DIRECTIVE( 2, 1) - RPATH_INSTALL_NAME_DIRECTIVE( 2, 2) - RPATH_INSTALL_NAME_DIRECTIVE( 3, 0) - RPATH_INSTALL_NAME_DIRECTIVE( 3, 1) - RPATH_INSTALL_NAME_DIRECTIVE( 3, 2) - RPATH_INSTALL_NAME_DIRECTIVE( 4, 0) - RPATH_INSTALL_NAME_DIRECTIVE( 4, 1) - RPATH_INSTALL_NAME_DIRECTIVE( 4, 2) - RPATH_INSTALL_NAME_DIRECTIVE( 4, 3) - RPATH_INSTALL_NAME_DIRECTIVE( 5, 0) - RPATH_INSTALL_NAME_DIRECTIVE( 5, 1) -#elif TARGET_OS_IPHONE - RPATH_INSTALL_NAME_DIRECTIVE( 7, 0) - RPATH_INSTALL_NAME_DIRECTIVE( 7, 1) - RPATH_INSTALL_NAME_DIRECTIVE( 8, 0) - RPATH_INSTALL_NAME_DIRECTIVE( 8, 1) - RPATH_INSTALL_NAME_DIRECTIVE( 8, 2) - RPATH_INSTALL_NAME_DIRECTIVE( 8, 3) - RPATH_INSTALL_NAME_DIRECTIVE( 8, 4) - RPATH_INSTALL_NAME_DIRECTIVE( 9, 0) - RPATH_INSTALL_NAME_DIRECTIVE( 9, 1) - RPATH_INSTALL_NAME_DIRECTIVE( 9, 2) - RPATH_INSTALL_NAME_DIRECTIVE( 9, 3) - RPATH_INSTALL_NAME_DIRECTIVE(10, 0) - RPATH_INSTALL_NAME_DIRECTIVE(10, 1) - RPATH_INSTALL_NAME_DIRECTIVE(10, 2) - RPATH_INSTALL_NAME_DIRECTIVE(10, 3) - RPATH_INSTALL_NAME_DIRECTIVE(11, 0) - RPATH_INSTALL_NAME_DIRECTIVE(11, 1) - RPATH_INSTALL_NAME_DIRECTIVE(11, 2) - RPATH_INSTALL_NAME_DIRECTIVE(11, 3) - RPATH_INSTALL_NAME_DIRECTIVE(11, 4) - RPATH_INSTALL_NAME_DIRECTIVE(12, 0) - RPATH_INSTALL_NAME_DIRECTIVE(12, 1) - -#else - #error Unknown target. -#endif - -#endif // defined(__APPLE__) && defined(__MACH__) diff --git a/Darwin/shims/CFCharacterSetShims.h b/Darwin/shims/CFCharacterSetShims.h deleted file mode 100644 index ec6d6a8792..0000000000 --- a/Darwin/shims/CFCharacterSetShims.h +++ /dev/null @@ -1,26 +0,0 @@ -//===--- CFCharacterSetShims.h - Declarations for CF hashing functions ----===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -CF_IMPLICIT_BRIDGING_ENABLED -CF_EXTERN_C_BEGIN -_Pragma("clang assume_nonnull begin") - -CF_EXPORT CFCharacterSetRef _CFURLComponentsGetURLUserAllowedCharacterSet() API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0)); -CF_EXPORT CFCharacterSetRef _CFURLComponentsGetURLPasswordAllowedCharacterSet() API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0)); -CF_EXPORT CFCharacterSetRef _CFURLComponentsGetURLHostAllowedCharacterSet() API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0)); -CF_EXPORT CFCharacterSetRef _CFURLComponentsGetURLPathAllowedCharacterSet() API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0)); -CF_EXPORT CFCharacterSetRef _CFURLComponentsGetURLQueryAllowedCharacterSet() API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0)); -CF_EXPORT CFCharacterSetRef _CFURLComponentsGetURLFragmentAllowedCharacterSet() API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0)); - -_Pragma("clang assume_nonnull end") -CF_EXTERN_C_END -CF_IMPLICIT_BRIDGING_DISABLED diff --git a/Darwin/shims/CFHashingShims.h b/Darwin/shims/CFHashingShims.h deleted file mode 100644 index c1761f1b72..0000000000 --- a/Darwin/shims/CFHashingShims.h +++ /dev/null @@ -1,41 +0,0 @@ -//===--- CFHashingShims.h - Declarations for CF hashing functions ---------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -CF_IMPLICIT_BRIDGING_ENABLED -CF_EXTERN_C_BEGIN -_Pragma("clang assume_nonnull begin") - - -#define _CF_HASHFACTOR 2654435761U - -CF_INLINE CFHashCode __CFHashInt(long i) { - return ((i > 0) ? (CFHashCode)(i) : (CFHashCode)(-i)) * _CF_HASHFACTOR; -} - -CF_INLINE CFHashCode __CFHashDouble(double d) { - double dInt; - if (d < 0) d = -d; - dInt = floor(d+0.5); - CFHashCode integralHash = _CF_HASHFACTOR * (CFHashCode)fmod(dInt, (double)ULONG_MAX); - return (CFHashCode)(integralHash + (CFHashCode)((d - dInt) * ULONG_MAX)); -} - -CF_EXPORT CFHashCode CFHashBytes(uint8_t *_Nullable bytes, CFIndex len); - - -CF_INLINE CFHashCode __CFHashBytes(uint8_t *_Nullable bytes, CFIndex len) { - return CFHashBytes(bytes, len); -} - -_Pragma("clang assume_nonnull end") -CF_EXTERN_C_END -CF_IMPLICIT_BRIDGING_DISABLED diff --git a/Darwin/shims/CoreFoundationOverlayShims.h b/Darwin/shims/CoreFoundationOverlayShims.h deleted file mode 100644 index cddc127cd7..0000000000 --- a/Darwin/shims/CoreFoundationOverlayShims.h +++ /dev/null @@ -1,21 +0,0 @@ -//===------------------------------------------------------------*- C++ -*-===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import - -/// - Note: This file is intended to be used solely for the Foundation and CoreFoundation overlays in swift -/// any and all other uses are not supported. The Foundation team reserves the right to alter the contract, -/// calling convention, availability or any other facet of facilities offered in this file. If you use -/// anything from here and your app breaks, expect any bug to be marked as "behaves correctly". - -#import "CFCharacterSetShims.h" -#import "CFHashingShims.h" diff --git a/Darwin/shims/FoundationOverlayShims.h b/Darwin/shims/FoundationOverlayShims.h deleted file mode 100644 index c1ddd1ce41..0000000000 --- a/Darwin/shims/FoundationOverlayShims.h +++ /dev/null @@ -1,82 +0,0 @@ -//===------------------------------------------------------------*- C++ -*-===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import -#import -#import -#import -#import -#import -#import -#import - -#import "FoundationShimSupport.h" -#import "NSCalendarShims.h" -#import "NSCharacterSetShims.h" -#import "NSCoderShims.h" -#import "NSDataShims.h" -#import "NSDictionaryShims.h" -#import "NSErrorShims.h" -#import "NSFileManagerShims.h" -#import "NSIndexPathShims.h" -#import "NSIndexSetShims.h" -#import "NSKeyedArchiverShims.h" -#import "NSLocaleShims.h" -#import "NSTimeZoneShims.h" -#import "NSUndoManagerShims.h" - -typedef struct { - void *_Nonnull memory; - size_t capacity; - bool onStack; -} _ConditionalAllocationBuffer; - -static inline bool _resizeConditionalAllocationBuffer(_ConditionalAllocationBuffer *_Nonnull buffer, size_t amt) { - size_t amount = malloc_good_size(amt); - if (amount <= buffer->capacity) { return true; } - void *newMemory; - if (buffer->onStack) { - newMemory = malloc(amount); - if (newMemory == NULL) { return false; } - memcpy(newMemory, buffer->memory, buffer->capacity); - buffer->onStack = false; - } else { - newMemory = realloc(buffer->memory, amount); - if (newMemory == NULL) { return false; } - } - if (newMemory == NULL) { return false; } - buffer->memory = newMemory; - buffer->capacity = amount; - return true; -} - -static inline bool _withStackOrHeapBuffer(size_t amount, void (__attribute__((noescape)) ^ _Nonnull applier)(_ConditionalAllocationBuffer *_Nonnull)) { - _ConditionalAllocationBuffer buffer; - buffer.capacity = malloc_good_size(amount); - buffer.onStack = (pthread_main_np() != 0 ? buffer.capacity < 2048 : buffer.capacity < 512); - buffer.memory = buffer.onStack ? alloca(buffer.capacity) : malloc(buffer.capacity); - if (buffer.memory == NULL) { return false; } - applier(&buffer); - if (!buffer.onStack) { - free(buffer.memory); - } - return true; -} - -@protocol _NSKVOCompatibilityShim -+ (void)_noteProcessHasUsedKVOSwiftOverlay; -@end - - -// Exported by libswiftCore: -extern bool _swift_isObjCTypeNameSerializable(Class theClass); -extern void _swift_reportToDebugger(uintptr_t flags, const char *message, void *details); diff --git a/Darwin/shims/FoundationShimSupport.h b/Darwin/shims/FoundationShimSupport.h deleted file mode 100644 index 108793e867..0000000000 --- a/Darwin/shims/FoundationShimSupport.h +++ /dev/null @@ -1,33 +0,0 @@ -//===--- FoundationShimSupport.h - Helper macros for Foundation overlay ---===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import - -#ifndef NS_NON_BRIDGED -#define NS_NON_BRIDGED(type) NSObject * -#endif - -#ifndef NS_BEGIN_DECLS - -#define NS_BEGIN_DECLS \ - __BEGIN_DECLS \ - NS_ASSUME_NONNULL_BEGIN - -#endif - -#ifndef NS_END_DECLS - -#define NS_END_DECLS \ - NS_ASSUME_NONNULL_END \ - __END_DECLS - -#endif diff --git a/Darwin/shims/NSCalendarShims.h b/Darwin/shims/NSCalendarShims.h deleted file mode 100644 index 802fb3b58d..0000000000 --- a/Darwin/shims/NSCalendarShims.h +++ /dev/null @@ -1,40 +0,0 @@ -//===--- NSCalendarShims.h - Foundation declarations for Calendar overlay -===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import "FoundationShimSupport.h" - -NS_BEGIN_DECLS - -NS_INLINE BOOL __NSCalendarIsAutoupdating(NS_NON_BRIDGED(NSCalendar *) calendar) { - static dispatch_once_t onceToken; - static Class autoCalendarClass; - static Class olderAutoCalendarClass; // Pre 10.12/10.0 - dispatch_once(&onceToken, ^{ - autoCalendarClass = (Class)objc_lookUpClass("_NSAutoCalendar"); - olderAutoCalendarClass = (Class)objc_lookUpClass("NSAutoCalendar"); - }); - return (autoCalendarClass && [calendar isKindOfClass:autoCalendarClass]) || (olderAutoCalendarClass && [calendar isKindOfClass:olderAutoCalendarClass]); -} - -NS_INLINE NS_RETURNS_RETAINED NS_NON_BRIDGED(NSCalendar *) __NSCalendarCreate(NSCalendarIdentifier identifier) { - return [[NSCalendar alloc] initWithCalendarIdentifier:identifier]; -} - -NS_INLINE NS_RETURNS_RETAINED NS_NON_BRIDGED(NSCalendar *) __NSCalendarAutoupdating() { - return [NSCalendar autoupdatingCurrentCalendar]; -} - -NS_INLINE NS_RETURNS_RETAINED NS_NON_BRIDGED(NSCalendar *) __NSCalendarCurrent() { - return [NSCalendar currentCalendar]; -} - -NS_END_DECLS diff --git a/Darwin/shims/NSCharacterSetShims.h b/Darwin/shims/NSCharacterSetShims.h deleted file mode 100644 index f38fbccf2a..0000000000 --- a/Darwin/shims/NSCharacterSetShims.h +++ /dev/null @@ -1,41 +0,0 @@ -//===--- NSCharacterSetShims.h - Foundation decl. for CharacterSet overlay ===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import "FoundationShimSupport.h" - -NS_BEGIN_DECLS - -NS_INLINE NS_RETURNS_RETAINED NS_NON_BRIDGED(NSCharacterSet *) _NSURLComponentsGetURLUserAllowedCharacterSet(void) { - return NSCharacterSet.URLUserAllowedCharacterSet; -} - -NS_INLINE NS_RETURNS_RETAINED NS_NON_BRIDGED(NSCharacterSet *) _NSURLComponentsGetURLPasswordAllowedCharacterSet(void) { - return NSCharacterSet.URLPasswordAllowedCharacterSet; -} - -NS_INLINE NS_RETURNS_RETAINED NS_NON_BRIDGED(NSCharacterSet *) _NSURLComponentsGetURLHostAllowedCharacterSet(void) { - return NSCharacterSet.URLHostAllowedCharacterSet; -} - -NS_INLINE NS_RETURNS_RETAINED NS_NON_BRIDGED(NSCharacterSet *) _NSURLComponentsGetURLPathAllowedCharacterSet(void) { - return NSCharacterSet.URLPathAllowedCharacterSet; -} - -NS_INLINE NS_RETURNS_RETAINED NS_NON_BRIDGED(NSCharacterSet *) _NSURLComponentsGetURLQueryAllowedCharacterSet(void) { - return NSCharacterSet.URLQueryAllowedCharacterSet; -} - -NS_INLINE NS_RETURNS_RETAINED NS_NON_BRIDGED(NSCharacterSet *) _NSURLComponentsGetURLFragmentAllowedCharacterSet(void) { - return NSCharacterSet.URLFragmentAllowedCharacterSet; -} - -NS_END_DECLS diff --git a/Darwin/shims/NSCoderShims.h b/Darwin/shims/NSCoderShims.h deleted file mode 100644 index 6cb7c91935..0000000000 --- a/Darwin/shims/NSCoderShims.h +++ /dev/null @@ -1,49 +0,0 @@ -//===--- NSCoderShims.h - Foundation declarations for NSCoder overlay -----===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import "FoundationShimSupport.h" - -NS_BEGIN_DECLS - -NS_INLINE NS_RETURNS_RETAINED _Nullable id __NSCoderDecodeObject(NSCoder *self_, NSError **_Nullable error) { - if (error) { - return [self_ decodeTopLevelObjectAndReturnError:error]; - } else { - return [self_ decodeObject]; - } -} - -NS_INLINE NS_RETURNS_RETAINED _Nullable id __NSCoderDecodeObjectForKey(NSCoder *self_, NSString *key, NSError **_Nullable error) { - if (error) { - return [self_ decodeTopLevelObjectForKey:key error:error]; - } else { - return [self_ decodeObjectForKey:key]; - } -} - -NS_INLINE NS_RETURNS_RETAINED _Nullable id __NSCoderDecodeObjectOfClassForKey(NSCoder *self_, Class cls, NSString *key, NSError **_Nullable error) { - if (error) { - return [self_ decodeTopLevelObjectOfClass:cls forKey:key error:error]; - } else { - return [self_ decodeObjectOfClass:cls forKey:key]; - } -} - -NS_INLINE NS_RETURNS_RETAINED _Nullable id __NSCoderDecodeObjectOfClassesForKey(NSCoder *self_, NS_NON_BRIDGED(NSSet *)_Nullable classes, NSString *key, NSError **_Nullable error) { - if (error) { - return [self_ decodeTopLevelObjectOfClasses:(NSSet *)classes forKey:key error:error]; - } else { - return [self_ decodeObjectOfClasses:(NSSet *)classes forKey:key]; - } -} - -NS_END_DECLS diff --git a/Darwin/shims/NSDataShims.h b/Darwin/shims/NSDataShims.h deleted file mode 100644 index 770c7d8cc9..0000000000 --- a/Darwin/shims/NSDataShims.h +++ /dev/null @@ -1,29 +0,0 @@ -//===--- NSDataShims.h - Foundation declarations for Data overlay ---------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import "FoundationShimSupport.h" - -NS_BEGIN_DECLS - -typedef void (^NSDataDeallocator)(void * _Null_unspecified, NSUInteger); -FOUNDATION_EXPORT const NSDataDeallocator NSDataDeallocatorVM; -FOUNDATION_EXPORT const NSDataDeallocator NSDataDeallocatorUnmap; -FOUNDATION_EXPORT const NSDataDeallocator NSDataDeallocatorFree; -FOUNDATION_EXPORT const NSDataDeallocator NSDataDeallocatorNone; - -@interface NSData (FoundationSPI) -- (BOOL)_isCompact API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)); -@end - -BOOL __NSDataWriteToURL(NS_NON_BRIDGED(NSData *) _Nonnull data NS_RELEASES_ARGUMENT, NSURL * _Nonnull url NS_RELEASES_ARGUMENT, NSDataWritingOptions writingOptions, NSError **errorPtr); - -NS_END_DECLS diff --git a/Darwin/shims/NSDictionaryShims.h b/Darwin/shims/NSDictionaryShims.h deleted file mode 100644 index 31055e9c76..0000000000 --- a/Darwin/shims/NSDictionaryShims.h +++ /dev/null @@ -1,21 +0,0 @@ -//===--- NSDictionaryShims.h - Foundation decl. for Dictionary overlay ----===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import "FoundationShimSupport.h" - -NS_BEGIN_DECLS - -NS_INLINE void __NSDictionaryGetObjects(NS_NON_BRIDGED(NSDictionary *)nsDictionary, void *_Nullable objects, void *_Nullable keys, NSUInteger count) { - [(NSDictionary *)nsDictionary getObjects:(__unsafe_unretained id _Nonnull *)(void *)objects andKeys:(__unsafe_unretained id _Nonnull *)(void *)keys count:count]; -} - -NS_END_DECLS diff --git a/Darwin/shims/NSErrorShims.h b/Darwin/shims/NSErrorShims.h deleted file mode 100644 index 4a9547b019..0000000000 --- a/Darwin/shims/NSErrorShims.h +++ /dev/null @@ -1,23 +0,0 @@ -//===--- NSErrorShims.h - Foundation declarations for NSError overlay -----===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import "FoundationShimSupport.h" - -NS_BEGIN_DECLS - -NS_INLINE void __NSErrorPerformRecoverySelector(_Nullable id delegate, SEL selector, BOOL success, void *_Nullable contextInfo) { - void (*msg)(_Nullable id, SEL, BOOL, void* _Nullable) = - (void(*)(_Nullable id, SEL, BOOL, void* _Nullable))objc_msgSend; - msg(delegate, selector, success, contextInfo); -} - -NS_END_DECLS diff --git a/Darwin/shims/NSFileManagerShims.h b/Darwin/shims/NSFileManagerShims.h deleted file mode 100644 index 1828e39ac8..0000000000 --- a/Darwin/shims/NSFileManagerShims.h +++ /dev/null @@ -1,34 +0,0 @@ -//===--- NSFileManagerShims.h - Foundation decl. for FileManager overlay --===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import "FoundationShimSupport.h" - -NS_BEGIN_DECLS - -NS_INLINE NS_RETURNS_RETAINED NSURL *_Nullable __NSFileManagerReplaceItemAtURL(NSFileManager *self_, NSURL *originalItemURL, NSURL *newItemURL, NSString *_Nullable backupItemName, NSFileManagerItemReplacementOptions options, NSError **_Nullable error) { - NSURL *result = nil; - BOOL success = [self_ replaceItemAtURL:originalItemURL withItemAtURL:newItemURL backupItemName:backupItemName options:options resultingItemURL:&result error:error]; - return success ? result : nil; -} - -NS_INLINE NS_RETURNS_RETAINED NSDirectoryEnumerator *_Nullable __NSFileManagerEnumeratorAtURL(NSFileManager *self_, NSURL *url, NSArray *_Nullable keys, NSDirectoryEnumerationOptions options, BOOL (^errorHandler)(NSURL *url, NSError *error) ) { - return [self_ enumeratorAtURL:url includingPropertiesForKeys:keys options:options errorHandler:^(NSURL *url, NSError *error) { - NSURL *realURL = url ?: error.userInfo[NSURLErrorKey]; - if (!realURL) { - NSString *path = error.userInfo[NSFilePathErrorKey]; - realURL = [NSURL fileURLWithPath:path]; - } - return errorHandler(realURL, error); - }]; -} - -NS_END_DECLS diff --git a/Darwin/shims/NSIndexPathShims.h b/Darwin/shims/NSIndexPathShims.h deleted file mode 100644 index 4e60d806be..0000000000 --- a/Darwin/shims/NSIndexPathShims.h +++ /dev/null @@ -1,22 +0,0 @@ -//===--- NSIndexPathShims.h - Found. decl. for IndexPath overl. -*- C++ -*-===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import "FoundationShimSupport.h" - -NS_BEGIN_DECLS - -NS_INLINE NS_NON_BRIDGED(NSIndexPath *)_NSIndexPathCreateFromIndexes(NSUInteger idx1, NSUInteger idx2) NS_RETURNS_RETAINED { - NSUInteger indexes[] = {idx1, idx2}; - return [[NSIndexPath alloc] initWithIndexes:&indexes[0] length:2]; -} - -NS_END_DECLS diff --git a/Darwin/shims/NSIndexSetShims.h b/Darwin/shims/NSIndexSetShims.h deleted file mode 100644 index 09abe89c14..0000000000 --- a/Darwin/shims/NSIndexSetShims.h +++ /dev/null @@ -1,37 +0,0 @@ -//===--- NSIndexSetShims.h - Foundation declarations for IndexSet overlay -===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import "FoundationShimSupport.h" - -NS_BEGIN_DECLS - -@interface NSIndexSet (NSRanges) -- (NSUInteger)rangeCount; -- (NSRange)rangeAtIndex:(NSUInteger)rangeIndex; -- (NSUInteger)_indexOfRangeContainingIndex:(NSUInteger)value; -@end - -NS_INLINE NSUInteger __NSIndexSetRangeCount(NS_NON_BRIDGED(NSIndexSet *)self_) { - return [(NSIndexSet *)self_ rangeCount]; -} - -NS_INLINE void __NSIndexSetRangeAtIndex(NS_NON_BRIDGED(NSIndexSet *)self_, NSUInteger rangeIndex, NSUInteger *location, NSUInteger *length) { - NSRange result = [(NSIndexSet *)self_ rangeAtIndex:rangeIndex]; - *location = result.location; - *length = result.length; -} - -NS_INLINE NSUInteger __NSIndexSetIndexOfRangeContainingIndex(NS_NON_BRIDGED(NSIndexSet *)self_, NSUInteger index) { - return [(NSIndexSet *)self_ _indexOfRangeContainingIndex:index]; -} - -NS_END_DECLS diff --git a/Darwin/shims/NSKeyedArchiverShims.h b/Darwin/shims/NSKeyedArchiverShims.h deleted file mode 100644 index 6205c72d22..0000000000 --- a/Darwin/shims/NSKeyedArchiverShims.h +++ /dev/null @@ -1,33 +0,0 @@ -//===--- NSKeyedArchiverShims.h - Found. decl. for NSKeyedArchiver overlay ===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import "FoundationShimSupport.h" - -NS_BEGIN_DECLS - -NS_INLINE NS_RETURNS_RETAINED _Nullable id __NSKeyedUnarchiverUnarchiveObject(id Self_, NS_NON_BRIDGED(NSData *)data, NSError **_Nullable error) { - if (error) { - return [Self_ unarchiveTopLevelObjectWithData:(NSData *)data error:error]; - } else { - return [Self_ unarchiveObjectWithData:(NSData *)data]; - } -} - -NS_INLINE NS_RETURNS_RETAINED id _Nullable __NSKeyedUnarchiverSecureUnarchiveObjectOfClass(Class cls, NSData *data, NSError * _Nullable * _Nullable error) { - return [NSKeyedUnarchiver unarchivedObjectOfClass:cls fromData:data error:error]; -} - -NS_INLINE NS_RETURNS_RETAINED id _Nullable __NSKeyedUnarchiverSecureUnarchiveObjectOfClasses(NS_NON_BRIDGED(NSSet *) classes, NSData *data, NSError * _Nullable * _Nullable error) { - return [NSKeyedUnarchiver unarchivedObjectOfClasses:classes fromData:data error:error]; -} - -NS_END_DECLS diff --git a/Darwin/shims/NSLocaleShims.h b/Darwin/shims/NSLocaleShims.h deleted file mode 100644 index a0f5e5b7df..0000000000 --- a/Darwin/shims/NSLocaleShims.h +++ /dev/null @@ -1,34 +0,0 @@ -//===--- NSLocaleShims.h - Foundation declarations for Locale overlay -----===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import "FoundationShimSupport.h" - -NS_BEGIN_DECLS - -NS_INLINE BOOL __NSLocaleIsAutoupdating(NS_NON_BRIDGED(NSLocale *)locale) { - static dispatch_once_t onceToken; - static Class autoLocaleClass; - dispatch_once(&onceToken, ^{ - autoLocaleClass = (Class)objc_lookUpClass("NSAutoLocale"); - }); - return [locale isKindOfClass:autoLocaleClass]; -} - -NS_INLINE NS_RETURNS_RETAINED NS_NON_BRIDGED(NSLocale *)__NSLocaleCurrent() { - return [NSLocale currentLocale]; -} - -NS_INLINE NS_RETURNS_RETAINED NS_NON_BRIDGED(NSLocale *)__NSLocaleAutoupdating() { - return [NSLocale autoupdatingCurrentLocale]; -} - -NS_END_DECLS diff --git a/Darwin/shims/NSTimeZoneShims.h b/Darwin/shims/NSTimeZoneShims.h deleted file mode 100644 index e68d92d605..0000000000 --- a/Darwin/shims/NSTimeZoneShims.h +++ /dev/null @@ -1,34 +0,0 @@ -//===--- NSTimeZoneShims.h - Foundation declarations for TimeZone overlay -===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import "FoundationShimSupport.h" - -NS_BEGIN_DECLS - -NS_INLINE NS_RETURNS_RETAINED NS_NON_BRIDGED(NSTimeZone *)__NSTimeZoneAutoupdating() { - return [NSTimeZone localTimeZone]; -} - -NS_INLINE NS_RETURNS_RETAINED NS_NON_BRIDGED(NSTimeZone *)__NSTimeZoneCurrent() { - return [NSTimeZone systemTimeZone]; -} - -NS_INLINE BOOL __NSTimeZoneIsAutoupdating(NS_NON_BRIDGED(NSTimeZone *)timeZone) { - static dispatch_once_t onceToken; - static Class autoTimeZoneClass; - dispatch_once(&onceToken, ^{ - autoTimeZoneClass = (Class)objc_lookUpClass("__NSLocalTimeZone"); - }); - return [timeZone isKindOfClass:autoTimeZoneClass]; -} - -NS_END_DECLS diff --git a/Darwin/shims/NSUndoManagerShims.h b/Darwin/shims/NSUndoManagerShims.h deleted file mode 100644 index 5d4c706196..0000000000 --- a/Darwin/shims/NSUndoManagerShims.h +++ /dev/null @@ -1,21 +0,0 @@ -//===--- NSUndoManagerShims.h - Foundation decl. for NSUndoManager overlay ===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#import "FoundationShimSupport.h" - -NS_BEGIN_DECLS - -NS_INLINE void __NSUndoManagerRegisterWithTargetHandler(NSUndoManager * self_, id target, void (^handler)(id)) { - [self_ registerUndoWithTarget:target handler:handler]; -} - -NS_END_DECLS diff --git a/Darwin/shims/module.modulemap b/Darwin/shims/module.modulemap deleted file mode 100644 index a63fb7025b..0000000000 --- a/Darwin/shims/module.modulemap +++ /dev/null @@ -1,19 +0,0 @@ -//===------------------------------------------------------------*- C++ -*-===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -module _FoundationOverlayShims { - header "FoundationOverlayShims.h" -} - -module _CoreFoundationOverlayShims { - header "CoreFoundationOverlayShims.h" -} From bf6c5e3c9c0f7902f6005560603d6b2b241d981b Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Fri, 2 Feb 2024 17:08:49 -0800 Subject: [PATCH 008/198] Builds with re-exported FoundationEssentials --- Package.swift | 1 + Sources/Foundation/ContiguousBytes.swift | 100 - Sources/Foundation/Data.swift | 2870 +---------------- Sources/Foundation/DataProtocol.swift | 295 -- .../DispatchData+DataProtocol.swift | 2 + Sources/Foundation/FileManager.swift | 6 +- Sources/Foundation/NSArray.swift | 2 +- Sources/Foundation/NSCharacterSet.swift | 2 +- Sources/Foundation/NSData.swift | 6 +- Sources/Foundation/NSDictionary.swift | 4 +- Sources/Foundation/NSError.swift | 10 +- Sources/Foundation/NSString.swift | 23 +- .../Foundation/Pointers+DataProtocol.swift | 24 - Sources/Foundation/ProcessInfo.swift | 3 +- Sources/Foundation/StringEncodings.swift | 3 +- 15 files changed, 50 insertions(+), 3301 deletions(-) delete mode 100644 Sources/Foundation/ContiguousBytes.swift delete mode 100644 Sources/Foundation/DataProtocol.swift delete mode 100644 Sources/Foundation/Pointers+DataProtocol.swift diff --git a/Package.swift b/Package.swift index 9681581531..bcf87638fd 100644 --- a/Package.swift +++ b/Package.swift @@ -37,6 +37,7 @@ let buildSettings: [CSetting] = [ let package = Package( name: "swift-corelibs-foundation", + platforms: [.macOS("13.3"), .iOS("16.4"), .tvOS("16.4"), .watchOS("9.4")], products: [ .library(name: "Foundation", targets: ["Foundation"]), .executable(name: "plutil", targets: ["plutil"]) diff --git a/Sources/Foundation/ContiguousBytes.swift b/Sources/Foundation/ContiguousBytes.swift deleted file mode 100644 index 0d1f69b00d..0000000000 --- a/Sources/Foundation/ContiguousBytes.swift +++ /dev/null @@ -1,100 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2018 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -//===--- ContiguousBytes --------------------------------------------------===// - -/// Indicates that the conforming type is a contiguous collection of raw bytes -/// whose underlying storage is directly accessible by withUnsafeBytes. -public protocol ContiguousBytes { - /// Calls the given closure with the contents of underlying storage. - /// - /// - note: Calling `withUnsafeBytes` multiple times does not guarantee that - /// the same buffer pointer will be passed in every time. - /// - warning: The buffer argument to the body should not be stored or used - /// outside of the lifetime of the call to the closure. - func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R -} - -//===--- Collection Conformances ------------------------------------------===// - -// FIXME: When possible, expand conformance to `where Element : Trivial`. -extension Array : ContiguousBytes where Element == UInt8 { } - -// FIXME: When possible, expand conformance to `where Element : Trivial`. -extension ArraySlice : ContiguousBytes where Element == UInt8 { } - -// FIXME: When possible, expand conformance to `where Element : Trivial`. -extension ContiguousArray : ContiguousBytes where Element == UInt8 { } - -//===--- Pointer Conformances ---------------------------------------------===// - -extension UnsafeRawBufferPointer : ContiguousBytes { - @inlinable - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R { - return try body(self) - } -} - -extension UnsafeMutableRawBufferPointer : ContiguousBytes { - @inlinable - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R { - return try body(UnsafeRawBufferPointer(self)) - } -} - -// FIXME: When possible, expand conformance to `where Element : Trivial`. -extension UnsafeBufferPointer : ContiguousBytes where Element == UInt8 { - @inlinable - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R { - return try body(UnsafeRawBufferPointer(self)) - } -} - -// FIXME: When possible, expand conformance to `where Element : Trivial`. -extension UnsafeMutableBufferPointer : ContiguousBytes where Element == UInt8 { - @inlinable - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R { - return try body(UnsafeRawBufferPointer(self)) - } -} - -// FIXME: When possible, expand conformance to `where Element : Trivial`. -extension EmptyCollection : ContiguousBytes where Element == UInt8 { - @inlinable - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R { - return try body(UnsafeRawBufferPointer(start: nil, count: 0)) - } -} - -// FIXME: When possible, expand conformance to `where Element : Trivial`. -extension CollectionOfOne : ContiguousBytes where Element == UInt8 { - @inlinable - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R { - let element = self.first! - return try Swift.withUnsafeBytes(of: element) { - return try body($0) - } - } -} - -//===--- Conditional Conformances -----------------------------------------===// - -extension Slice : ContiguousBytes where Base : ContiguousBytes { - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> ResultType) rethrows -> ResultType { - let offset = base.distance(from: base.startIndex, to: self.startIndex) - return try base.withUnsafeBytes { ptr in - let slicePtr = ptr.baseAddress?.advanced(by: offset) - let sliceBuffer = UnsafeRawBufferPointer(start: slicePtr, count: self.count) - return try body(sliceBuffer) - } - } -} diff --git a/Sources/Foundation/Data.swift b/Sources/Foundation/Data.swift index 00865bae7e..eade2bcbbd 100644 --- a/Sources/Foundation/Data.swift +++ b/Sources/Foundation/Data.swift @@ -10,2820 +10,6 @@ // //===----------------------------------------------------------------------===// -#if DEPLOYMENT_RUNTIME_SWIFT - -#if os(Windows) -@usableFromInline let calloc = ucrt.calloc -@usableFromInline let malloc = ucrt.malloc -@usableFromInline let free = ucrt.free -@usableFromInline let memset = ucrt.memset -@usableFromInline let memcpy = ucrt.memcpy -@usableFromInline let memcmp = ucrt.memcmp -#endif - -#if canImport(Glibc) -@usableFromInline let calloc = Glibc.calloc -@usableFromInline let malloc = Glibc.malloc -@usableFromInline let free = Glibc.free -@usableFromInline let memset = Glibc.memset -@usableFromInline let memcpy = Glibc.memcpy -@usableFromInline let memcmp = Glibc.memcmp -#elseif canImport(WASILibc) -@usableFromInline let calloc = WASILibc.calloc -@usableFromInline let malloc = WASILibc.malloc -@usableFromInline let free = WASILibc.free -@usableFromInline let memset = WASILibc.memset -@usableFromInline let memcpy = WASILibc.memcpy -@usableFromInline let memcmp = WASILibc.memcmp -#endif - -#if !canImport(Darwin) -@inlinable // This is @inlinable as trivially computable. -internal func malloc_good_size(_ size: Int) -> Int { - return size -} -#endif - -@_implementationOnly import CoreFoundation - -#if canImport(Glibc) -import Glibc -#elseif canImport(WASILibc) -import WASILibc -#endif - -internal func __NSDataInvokeDeallocatorUnmap(_ mem: UnsafeMutableRawPointer, _ length: Int) { -#if os(Windows) - UnmapViewOfFile(mem) -#else - munmap(mem, length) -#endif -} - -internal func __NSDataInvokeDeallocatorFree(_ mem: UnsafeMutableRawPointer, _ length: Int) { - free(mem) -} - -internal func __NSDataIsCompact(_ data: NSData) -> Bool { - return data._isCompact() -} - -#else - -@_exported import Foundation // Clang module -import _SwiftFoundationOverlayShims -import _SwiftCoreFoundationOverlayShims - -internal func __NSDataIsCompact(_ data: NSData) -> Bool { - if #available(macOS 10.10, iOS 8.0, tvOS 9.0, watchOS 2.0, *) { - return data._isCompact() - } else { - var compact = true - let len = data.length - data.enumerateBytes { (_, byteRange, stop) in - if byteRange.length != len { - compact = false - } - stop.pointee = true - } - return compact - } -} - -#endif - -@usableFromInline @discardableResult -internal func __withStackOrHeapBuffer(_ size: Int, _ block: (UnsafeMutableRawPointer, Int, Bool) -> Void) -> Bool { - return _withStackOrHeapBufferWithResultInArguments(size, block) -} - -// Underlying storage representation for medium and large data. -// Inlinability strategy: methods from here should not inline into InlineSlice or LargeSlice unless trivial. -// NOTE: older overlays called this class _DataStorage. The two must -// coexist without a conflicting ObjC class name, so it was renamed. -// The old name must not be used in the new runtime. -@usableFromInline -internal final class __DataStorage { - @usableFromInline static let maxSize = Int.max >> 1 - @usableFromInline static let vmOpsThreshold = NSPageSize() * 4 - - @inlinable // This is @inlinable as trivially forwarding, and does not escape the _DataStorage boundary layer. - static func allocate(_ size: Int, _ clear: Bool) -> UnsafeMutableRawPointer? { - if clear { - return calloc(1, size) - } else { - return malloc(size) - } - } - - @usableFromInline // This is not @inlinable as it is a non-trivial, non-generic function. - static func move(_ dest_: UnsafeMutableRawPointer, _ source_: UnsafeRawPointer?, _ num_: Int) { - var dest = dest_ - var source = source_ - var num = num_ - if __DataStorage.vmOpsThreshold <= num && ((unsafeBitCast(source, to: Int.self) | Int(bitPattern: dest)) & (NSPageSize() - 1)) == 0 { - let pages = NSRoundDownToMultipleOfPageSize(num) - NSCopyMemoryPages(source!, dest, pages) - source = source!.advanced(by: pages) - dest = dest.advanced(by: pages) - num -= pages - } - if num > 0 { - memmove(dest, source!, num) - } - } - - @inlinable // This is @inlinable as trivially forwarding, and does not escape the _DataStorage boundary layer. - static func shouldAllocateCleared(_ size: Int) -> Bool { - return (size > (128 * 1024)) - } - - @usableFromInline var _bytes: UnsafeMutableRawPointer? - @usableFromInline var _length: Int - @usableFromInline var _capacity: Int - @usableFromInline var _needToZero: Bool - @usableFromInline var _deallocator: ((UnsafeMutableRawPointer, Int) -> Void)? - @usableFromInline var _offset: Int - - @inlinable // This is @inlinable as trivially computable. - var bytes: UnsafeRawPointer? { - return UnsafeRawPointer(_bytes)?.advanced(by: -_offset) - } - - @inlinable // This is @inlinable despite escaping the _DataStorage boundary layer because it is generic and trivially forwarding. - @discardableResult - func withUnsafeBytes(in range: Range, apply: (UnsafeRawBufferPointer) throws -> Result) rethrows -> Result { - return try apply(UnsafeRawBufferPointer(start: _bytes?.advanced(by: range.lowerBound - _offset), count: Swift.min(range.upperBound - range.lowerBound, _length))) - } - - @inlinable // This is @inlinable despite escaping the _DataStorage boundary layer because it is generic and trivially forwarding. - @discardableResult - func withUnsafeMutableBytes(in range: Range, apply: (UnsafeMutableRawBufferPointer) throws -> Result) rethrows -> Result { - return try apply(UnsafeMutableRawBufferPointer(start: _bytes!.advanced(by:range.lowerBound - _offset), count: Swift.min(range.upperBound - range.lowerBound, _length))) - } - - @inlinable // This is @inlinable as trivially computable. - var mutableBytes: UnsafeMutableRawPointer? { - return _bytes?.advanced(by: -_offset) - } - - @inlinable // This is @inlinable as trivially computable. - var capacity: Int { - return _capacity - } - - @inlinable // This is @inlinable as trivially computable. - var length: Int { - get { - return _length - } - set { - setLength(newValue) - } - } - - @inlinable // This is inlinable as trivially computable. - var isExternallyOwned: Bool { - // all __DataStorages will have some sort of capacity, because empty cases hit the .empty enum _Representation - // anything with 0 capacity means that we have not allocated this pointer and consequently mutation is not ours to make. - return _capacity == 0 - } - - @usableFromInline // This is not @inlinable as it is a non-trivial, non-generic function. - func ensureUniqueBufferReference(growingTo newLength: Int = 0, clear: Bool = false) { - guard isExternallyOwned || newLength > _capacity else { return } - - if newLength == 0 { - if isExternallyOwned { - let newCapacity = malloc_good_size(_length) - let newBytes = __DataStorage.allocate(newCapacity, false) - __DataStorage.move(newBytes!, _bytes!, _length) - _freeBytes() - _bytes = newBytes - _capacity = newCapacity - _needToZero = false - } - } else if isExternallyOwned { - let newCapacity = malloc_good_size(newLength) - let newBytes = __DataStorage.allocate(newCapacity, clear) - if let bytes = _bytes { - __DataStorage.move(newBytes!, bytes, _length) - } - _freeBytes() - _bytes = newBytes - _capacity = newCapacity - _length = newLength - _needToZero = true - } else { - let cap = _capacity - var additionalCapacity = (newLength >> (__DataStorage.vmOpsThreshold <= newLength ? 2 : 1)) - if Int.max - additionalCapacity < newLength { - additionalCapacity = 0 - } - var newCapacity = malloc_good_size(Swift.max(cap, newLength + additionalCapacity)) - let origLength = _length - var allocateCleared = clear && __DataStorage.shouldAllocateCleared(newCapacity) - var newBytes: UnsafeMutableRawPointer? = nil - if _bytes == nil { - newBytes = __DataStorage.allocate(newCapacity, allocateCleared) - if newBytes == nil { - /* Try again with minimum length */ - allocateCleared = clear && __DataStorage.shouldAllocateCleared(newLength) - newBytes = __DataStorage.allocate(newLength, allocateCleared) - } - } else { - let tryCalloc = (origLength == 0 || (newLength / origLength) >= 4) - if allocateCleared && tryCalloc { - newBytes = __DataStorage.allocate(newCapacity, true) - if let newBytes = newBytes { - __DataStorage.move(newBytes, _bytes!, origLength) - _freeBytes() - } - } - /* Where calloc/memmove/free fails, realloc might succeed */ - if newBytes == nil { - allocateCleared = false - if _deallocator != nil { - newBytes = __DataStorage.allocate(newCapacity, true) - if let newBytes = newBytes { - __DataStorage.move(newBytes, _bytes!, origLength) - _freeBytes() - } - } else { - newBytes = realloc(_bytes!, newCapacity) - } - } - /* Try again with minimum length */ - if newBytes == nil { - newCapacity = malloc_good_size(newLength) - allocateCleared = clear && __DataStorage.shouldAllocateCleared(newCapacity) - if allocateCleared && tryCalloc { - newBytes = __DataStorage.allocate(newCapacity, true) - if let newBytes = newBytes { - __DataStorage.move(newBytes, _bytes!, origLength) - _freeBytes() - } - } - if newBytes == nil { - allocateCleared = false - newBytes = realloc(_bytes!, newCapacity) - } - } - } - - if newBytes == nil { - /* Could not allocate bytes */ - // At this point if the allocation cannot occur the process is likely out of memory - // and Bad-Things™ are going to happen anyhow - fatalError("unable to allocate memory for length (\(newLength))") - } - - if origLength < newLength && clear && !allocateCleared { - memset(newBytes!.advanced(by: origLength), 0, newLength - origLength) - } - - /* _length set by caller */ - _bytes = newBytes - _capacity = newCapacity - /* Realloc/memset doesn't zero out the entire capacity, so we must be safe and clear next time we grow the length */ - _needToZero = !allocateCleared - } - } - - @inlinable // This is @inlinable as it does not escape the _DataStorage boundary layer. - func _freeBytes() { - if let bytes = _bytes { - if let dealloc = _deallocator { - dealloc(bytes, length) - } else { - free(bytes) - } - } - _deallocator = nil - } - - @inlinable // This is @inlinable despite escaping the _DataStorage boundary layer because it is trivially computed. - func enumerateBytes(in range: Range, _ block: (_ buffer: UnsafeBufferPointer, _ byteIndex: Data.Index, _ stop: inout Bool) -> Void) { - var stopv: Bool = false - block(UnsafeBufferPointer(start: _bytes?.advanced(by: range.lowerBound - _offset).assumingMemoryBound(to: UInt8.self), count: Swift.min(range.upperBound - range.lowerBound, _length)), 0, &stopv) - } - - @inlinable // This is @inlinable as it does not escape the _DataStorage boundary layer. - func setLength(_ length: Int) { - let origLength = _length - let newLength = length - if _capacity < newLength || _bytes == nil { - ensureUniqueBufferReference(growingTo: newLength, clear: true) - } else if origLength < newLength && _needToZero { - memset(_bytes! + origLength, 0, newLength - origLength) - } else if newLength < origLength { - _needToZero = true - } - _length = newLength - } - - @inlinable // This is @inlinable as it does not escape the _DataStorage boundary layer. - func append(_ bytes: UnsafeRawPointer, length: Int) { - precondition(length >= 0, "Length of appending bytes must not be negative") - let origLength = _length - let newLength = origLength + length - if _capacity < newLength || _bytes == nil { - ensureUniqueBufferReference(growingTo: newLength, clear: false) - } - _length = newLength - __DataStorage.move(_bytes!.advanced(by: origLength), bytes, length) - } - - @inlinable // This is @inlinable despite escaping the __DataStorage boundary layer because it is trivially computed. - func get(_ index: Int) -> UInt8 { - return _bytes!.advanced(by: index - _offset).assumingMemoryBound(to: UInt8.self).pointee - } - - @inlinable // This is @inlinable despite escaping the _DataStorage boundary layer because it is trivially computed. - func set(_ index: Int, to value: UInt8) { - ensureUniqueBufferReference() - _bytes!.advanced(by: index - _offset).assumingMemoryBound(to: UInt8.self).pointee = value - } - - @inlinable // This is @inlinable despite escaping the _DataStorage boundary layer because it is trivially computed. - func copyBytes(to pointer: UnsafeMutableRawPointer, from range: Range) { - let offsetPointer = UnsafeRawBufferPointer(start: _bytes?.advanced(by: range.lowerBound - _offset), count: Swift.min(range.upperBound - range.lowerBound, _length)) - UnsafeMutableRawBufferPointer(start: pointer, count: range.upperBound - range.lowerBound).copyMemory(from: offsetPointer) - } - - @usableFromInline // This is not @inlinable as it is a non-trivial, non-generic function. - func replaceBytes(in range_: NSRange, with replacementBytes: UnsafeRawPointer?, length replacementLength: Int) { - let range = NSRange(location: range_.location - _offset, length: range_.length) - let currentLength = _length - let resultingLength = currentLength - range.length + replacementLength - let shift = resultingLength - currentLength - let mutableBytes: UnsafeMutableRawPointer - if resultingLength > currentLength { - ensureUniqueBufferReference(growingTo: resultingLength) - _length = resultingLength - } else { - ensureUniqueBufferReference() - } - mutableBytes = _bytes! - /* shift the trailing bytes */ - let start = range.location - let length = range.length - if shift != 0 { - memmove(mutableBytes + start + replacementLength, mutableBytes + start + length, currentLength - start - length) - } - if replacementLength != 0 { - if let replacementBytes = replacementBytes { - memmove(mutableBytes + start, replacementBytes, replacementLength) - } else { - memset(mutableBytes + start, 0, replacementLength) - } - } - - if resultingLength < currentLength { - setLength(resultingLength) - } - } - - @usableFromInline // This is not @inlinable as it is a non-trivial, non-generic function. - func resetBytes(in range_: Range) { - let range = NSRange(location: range_.lowerBound - _offset, length: range_.upperBound - range_.lowerBound) - if range.length == 0 { return } - if _length < range.location + range.length { - let newLength = range.location + range.length - if _capacity <= newLength { - ensureUniqueBufferReference(growingTo: newLength, clear: false) - } - _length = newLength - } else { - ensureUniqueBufferReference() - } - memset(_bytes!.advanced(by: range.location), 0, range.length) - } - - @usableFromInline // This is not @inlinable as a non-trivial, non-convenience initializer. - init(length: Int) { - precondition(length < __DataStorage.maxSize) - var capacity = (length < 1024 * 1024 * 1024) ? length + (length >> 2) : length - if __DataStorage.vmOpsThreshold <= capacity { - capacity = NSRoundUpToMultipleOfPageSize(capacity) - } - - let clear = __DataStorage.shouldAllocateCleared(length) - _bytes = __DataStorage.allocate(capacity, clear)! - _capacity = capacity - _needToZero = !clear - _length = 0 - _offset = 0 - setLength(length) - } - - @usableFromInline // This is not @inlinable as a non-convenience initializer. - init(capacity capacity_: Int = 0) { - var capacity = capacity_ - precondition(capacity < __DataStorage.maxSize) - if __DataStorage.vmOpsThreshold <= capacity { - capacity = NSRoundUpToMultipleOfPageSize(capacity) - } - _length = 0 - _bytes = __DataStorage.allocate(capacity, false)! - _capacity = capacity - _needToZero = true - _offset = 0 - } - - @usableFromInline // This is not @inlinable as a non-convenience initializer. - init(bytes: UnsafeRawPointer?, length: Int) { - precondition(length < __DataStorage.maxSize) - _offset = 0 - if length == 0 { - _capacity = 0 - _length = 0 - _needToZero = false - _bytes = nil - } else if __DataStorage.vmOpsThreshold <= length { - _capacity = length - _length = length - _needToZero = true - _bytes = __DataStorage.allocate(length, false)! - __DataStorage.move(_bytes!, bytes, length) - } else { - var capacity = length - if __DataStorage.vmOpsThreshold <= capacity { - capacity = NSRoundUpToMultipleOfPageSize(capacity) - } - _length = length - _bytes = __DataStorage.allocate(capacity, false)! - _capacity = capacity - _needToZero = true - __DataStorage.move(_bytes!, bytes, length) - } - } - - @usableFromInline // This is not @inlinable as a non-convenience initializer. - init(bytes: UnsafeMutableRawPointer?, length: Int, copy: Bool, deallocator: ((UnsafeMutableRawPointer, Int) -> Void)?, offset: Int) { - precondition(length < __DataStorage.maxSize) - _offset = offset - if length == 0 { - _capacity = 0 - _length = 0 - _needToZero = false - _bytes = nil - if let dealloc = deallocator, - let bytes_ = bytes { - dealloc(bytes_, length) - } - } else if !copy { - _capacity = length - _length = length - _needToZero = false - _bytes = bytes - _deallocator = deallocator - } else if __DataStorage.vmOpsThreshold <= length { - _capacity = length - _length = length - _needToZero = true - _bytes = __DataStorage.allocate(length, false)! - __DataStorage.move(_bytes!, bytes, length) - if let dealloc = deallocator { - dealloc(bytes!, length) - } - } else { - var capacity = length - if __DataStorage.vmOpsThreshold <= capacity { - capacity = NSRoundUpToMultipleOfPageSize(capacity) - } - _length = length - _bytes = __DataStorage.allocate(capacity, false)! - _capacity = capacity - _needToZero = true - __DataStorage.move(_bytes!, bytes, length) - if let dealloc = deallocator { - dealloc(bytes!, length) - } - } - } - - @usableFromInline // This is not @inlinable as a non-convenience initializer. - init(immutableReference: NSData, offset: Int) { - _offset = offset - _bytes = UnsafeMutableRawPointer(mutating: immutableReference.bytes) - _capacity = 0 - _needToZero = false - _length = immutableReference.length - _deallocator = { _, _ in - _fixLifetime(immutableReference) - } - } - - @usableFromInline // This is not @inlinable as a non-convenience initializer. - init(mutableReference: NSMutableData, offset: Int) { - _offset = offset - _bytes = mutableReference.mutableBytes - _capacity = 0 - _needToZero = false - _length = mutableReference.length - _deallocator = { _, _ in - _fixLifetime(mutableReference) - } - } - - @usableFromInline // This is not @inlinable as a non-convenience initializer. - init(customReference: NSData, offset: Int) { - _offset = offset - _bytes = UnsafeMutableRawPointer(mutating: customReference.bytes) - _capacity = 0 - _needToZero = false - _length = customReference.length - _deallocator = { _, _ in - _fixLifetime(customReference) - } - } - - @usableFromInline // This is not @inlinable as a non-convenience initializer. - init(customMutableReference: NSMutableData, offset: Int) { - _offset = offset - _bytes = customMutableReference.mutableBytes - _capacity = 0 - _needToZero = false - _length = customMutableReference.length - _deallocator = { _, _ in - _fixLifetime(customMutableReference) - } - } - - deinit { - _freeBytes() - } - - @inlinable // This is @inlinable despite escaping the __DataStorage boundary layer because it is trivially computed. - func mutableCopy(_ range: Range) -> __DataStorage { - return __DataStorage(bytes: _bytes?.advanced(by: range.lowerBound - _offset), length: range.upperBound - range.lowerBound, copy: true, deallocator: nil, offset: range.lowerBound) - } - - @inlinable // This is @inlinable despite escaping the _DataStorage boundary layer because it is generic and trivially computed. - func withInteriorPointerReference(_ range: Range, _ work: (NSData) throws -> T) rethrows -> T { - if range.isEmpty { - return try work(NSData()) // zero length data can be optimized as a singleton - } - return try work(NSData(bytesNoCopy: _bytes!.advanced(by: range.lowerBound - _offset), length: range.upperBound - range.lowerBound, freeWhenDone: false)) - } - - @inline(never) // This is not @inlinable to avoid emission of the private `__NSSwiftData` class name into clients. - @usableFromInline - func bridgedReference(_ range: Range) -> NSData { - if range.isEmpty { - return NSData() // zero length data can be optimized as a singleton - } - - return __NSSwiftData(backing: self, range: range) - } -} - -// NOTE: older overlays called this _NSSwiftData. The two must -// coexist, so it was renamed. The old name must not be used in the new -// runtime. -internal class __NSSwiftData : NSData { - var _backing: __DataStorage! - var _range: Range! - - override var classForCoder: AnyClass { - return NSData.self - } - - override init() { - fatalError() - } - - private init(_correctly: Void) { - super.init() - } - - convenience init(backing: __DataStorage, range: Range) { - self.init(_correctly: ()) - _backing = backing - _range = range - } - - public required init?(coder aDecoder: NSCoder) { - fatalError("This should have been encoded as NSData.") - } - - override func encode(with aCoder: NSCoder) { - // This should encode this object just like NSData does, and .classForCoder should do the rest. - super.encode(with: aCoder) - } - - override var length: Int { - return _range.upperBound - _range.lowerBound - } - - override var bytes: UnsafeRawPointer { - // NSData's byte pointer methods are not annotated for nullability correctly - // (but assume non-null by the wrapping macro guards). This placeholder value - // is to work-around this bug. Any indirection to the underlying bytes of an NSData - // with a length of zero would have been a programmer error anyhow so the actual - // return value here is not needed to be an allocated value. This is specifically - // needed to live like this to be source compatible with Swift3. Beyond that point - // this API may be subject to correction. - guard let bytes = _backing.bytes else { - return UnsafeRawPointer(bitPattern: 0xBAD0)! - } - - return bytes.advanced(by: _range.lowerBound) - } - - override func copy(with zone: NSZone? = nil) -> Any { - return self - } - - override func mutableCopy(with zone: NSZone? = nil) -> Any { - return NSMutableData(bytes: bytes, length: length) - } - -#if !DEPLOYMENT_RUNTIME_SWIFT - @objc override - func _isCompact() -> Bool { - return true - } -#endif - -#if DEPLOYMENT_RUNTIME_SWIFT - override func _providesConcreteBacking() -> Bool { - return true - } -#else - @objc(_providesConcreteBacking) - func _providesConcreteBacking() -> Bool { - return true - } -#endif -} - -@frozen -public struct Data : ReferenceConvertible, Equatable, Hashable, RandomAccessCollection, MutableCollection, RangeReplaceableCollection, MutableDataProtocol, ContiguousBytes, @unchecked Sendable { - public typealias ReferenceType = NSData - - public typealias ReadingOptions = NSData.ReadingOptions - public typealias WritingOptions = NSData.WritingOptions - public typealias SearchOptions = NSData.SearchOptions - public typealias Base64EncodingOptions = NSData.Base64EncodingOptions - public typealias Base64DecodingOptions = NSData.Base64DecodingOptions - - public typealias Index = Int - public typealias Indices = Range - - // A small inline buffer of bytes suitable for stack-allocation of small data. - // Inlinability strategy: everything here should be inlined for direct operation on the stack wherever possible. - @usableFromInline - @frozen - internal struct InlineData { -#if arch(x86_64) || arch(arm64) || arch(s390x) || arch(powerpc64) || arch(powerpc64le) - @usableFromInline typealias Buffer = (UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, - UInt8, UInt8, UInt8, UInt8, UInt8, UInt8) //len //enum - @usableFromInline var bytes: Buffer -#elseif arch(i386) || arch(arm) || arch(wasm32) - @usableFromInline typealias Buffer = (UInt8, UInt8, UInt8, UInt8, - UInt8, UInt8) //len //enum - @usableFromInline var bytes: Buffer -#else - #error("This architecture isn't known. Add it to the 32-bit or 64-bit line.") -#endif - @usableFromInline var length: UInt8 - - @inlinable // This is @inlinable as trivially computable. - static func canStore(count: Int) -> Bool { - return count <= MemoryLayout.size - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ srcBuffer: UnsafeRawBufferPointer) { - self.init(count: srcBuffer.count) - if srcBuffer.count > 0 { - Swift.withUnsafeMutableBytes(of: &bytes) { dstBuffer in - dstBuffer.baseAddress?.copyMemory(from: srcBuffer.baseAddress!, byteCount: srcBuffer.count) - } - } - } - - @inlinable // This is @inlinable as a trivial initializer. - init(count: Int = 0) { - assert(count <= MemoryLayout.size) -#if arch(x86_64) || arch(arm64) || arch(s390x) || arch(powerpc64) || arch(powerpc64le) - bytes = (UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0)) -#elseif arch(i386) || arch(arm) || arch(wasm32) - bytes = (UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0), UInt8(0)) -#else - #error("This architecture isn't known. Add it to the 32-bit or 64-bit line.") -#endif - length = UInt8(count) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ slice: InlineSlice, count: Int) { - self.init(count: count) - Swift.withUnsafeMutableBytes(of: &bytes) { dstBuffer in - slice.withUnsafeBytes { srcBuffer in - dstBuffer.copyMemory(from: UnsafeRawBufferPointer(start: srcBuffer.baseAddress, count: count)) - } - } - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ slice: LargeSlice, count: Int) { - self.init(count: count) - Swift.withUnsafeMutableBytes(of: &bytes) { dstBuffer in - slice.withUnsafeBytes { srcBuffer in - dstBuffer.copyMemory(from: UnsafeRawBufferPointer(start: srcBuffer.baseAddress, count: count)) - } - } - } - - @inlinable // This is @inlinable as trivially computable. - var capacity: Int { - return MemoryLayout.size - } - - @inlinable // This is @inlinable as trivially computable. - var count: Int { - get { - return Int(length) - } - set(newValue) { - assert(newValue <= MemoryLayout.size) - length = UInt8(newValue) - } - } - - @inlinable // This is @inlinable as trivially computable. - var startIndex: Int { - return 0 - } - - @inlinable // This is @inlinable as trivially computable. - var endIndex: Int { - return count - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - func withUnsafeBytes(_ apply: (UnsafeRawBufferPointer) throws -> Result) rethrows -> Result { - let count = Int(length) - return try Swift.withUnsafeBytes(of: bytes) { (rawBuffer) throws -> Result in - return try apply(UnsafeRawBufferPointer(start: rawBuffer.baseAddress, count: count)) - } - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - mutating func withUnsafeMutableBytes(_ apply: (UnsafeMutableRawBufferPointer) throws -> Result) rethrows -> Result { - let count = Int(length) - return try Swift.withUnsafeMutableBytes(of: &bytes) { (rawBuffer) throws -> Result in - return try apply(UnsafeMutableRawBufferPointer(start: rawBuffer.baseAddress, count: count)) - } - } - - @inlinable // This is @inlinable as trivially computable. - mutating func append(byte: UInt8) { - let count = self.count - assert(count + 1 <= MemoryLayout.size) - Swift.withUnsafeMutableBytes(of: &bytes) { $0[count] = byte } - self.length += 1 - } - - @inlinable // This is @inlinable as trivially computable. - mutating func append(contentsOf buffer: UnsafeRawBufferPointer) { - guard buffer.count > 0 else { return } - assert(count + buffer.count <= MemoryLayout.size) - let cnt = count - _ = Swift.withUnsafeMutableBytes(of: &bytes) { rawBuffer in - rawBuffer.baseAddress?.advanced(by: cnt).copyMemory(from: buffer.baseAddress!, byteCount: buffer.count) - } - - length += UInt8(buffer.count) - } - - @inlinable // This is @inlinable as trivially computable. - subscript(index: Index) -> UInt8 { - get { - assert(index <= MemoryLayout.size) - precondition(index < length, "index \(index) is out of bounds of 0..<\(length)") - return Swift.withUnsafeBytes(of: bytes) { rawBuffer -> UInt8 in - return rawBuffer[index] - } - } - set(newValue) { - assert(index <= MemoryLayout.size) - precondition(index < length, "index \(index) is out of bounds of 0..<\(length)") - Swift.withUnsafeMutableBytes(of: &bytes) { rawBuffer in - rawBuffer[index] = newValue - } - } - } - - @inlinable // This is @inlinable as trivially computable. - mutating func resetBytes(in range: Range) { - assert(range.lowerBound <= MemoryLayout.size) - assert(range.upperBound <= MemoryLayout.size) - precondition(range.lowerBound <= length, "index \(range.lowerBound) is out of bounds of 0..<\(length)") - if count < range.upperBound { - count = range.upperBound - } - - let _ = Swift.withUnsafeMutableBytes(of: &bytes) { rawBuffer in - memset(rawBuffer.baseAddress!.advanced(by: range.lowerBound), 0, range.upperBound - range.lowerBound) - } - } - - @usableFromInline // This is not @inlinable as it is a non-trivial, non-generic function. - mutating func replaceSubrange(_ subrange: Range, with replacementBytes: UnsafeRawPointer?, count replacementLength: Int) { - assert(subrange.lowerBound <= MemoryLayout.size) - assert(subrange.upperBound <= MemoryLayout.size) - assert(count - (subrange.upperBound - subrange.lowerBound) + replacementLength <= MemoryLayout.size) - precondition(subrange.lowerBound <= length, "index \(subrange.lowerBound) is out of bounds of 0..<\(length)") - precondition(subrange.upperBound <= length, "index \(subrange.upperBound) is out of bounds of 0..<\(length)") - let currentLength = count - let resultingLength = currentLength - (subrange.upperBound - subrange.lowerBound) + replacementLength - let shift = resultingLength - currentLength - Swift.withUnsafeMutableBytes(of: &bytes) { mutableBytes in - /* shift the trailing bytes */ - let start = subrange.lowerBound - let length = subrange.upperBound - subrange.lowerBound - if shift != 0 { - memmove(mutableBytes.baseAddress!.advanced(by: start + replacementLength), mutableBytes.baseAddress!.advanced(by: start + length), currentLength - start - length) - } - if replacementLength != 0 { - memmove(mutableBytes.baseAddress!.advanced(by: start), replacementBytes!, replacementLength) - } - } - count = resultingLength - } - - @inlinable // This is @inlinable as trivially computable. - func copyBytes(to pointer: UnsafeMutableRawPointer, from range: Range) { - precondition(startIndex <= range.lowerBound, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(startIndex <= range.upperBound, "index \(range.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(range.upperBound <= endIndex, "index \(range.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - - Swift.withUnsafeBytes(of: bytes) { - let cnt = Swift.min($0.count, range.upperBound - range.lowerBound) - guard cnt > 0 else { return } - pointer.copyMemory(from: $0.baseAddress!.advanced(by: range.lowerBound), byteCount: cnt) - } - } - - @inline(__always) // This should always be inlined into _Representation.hash(into:). - func hash(into hasher: inout Hasher) { - // **NOTE**: this uses `count` (an Int) and NOT `length` (a UInt8) - // Despite having the same value, they hash differently. InlineSlice and LargeSlice both use `count` (an Int); if you combine the same bytes but with `length` over `count`, you can get a different hash. - // - // This affects slices, which are InlineSlice and not InlineData: - // - // let d = Data([0xFF, 0xFF]) // InlineData - // let s = Data([0, 0xFF, 0xFF]).dropFirst() // InlineSlice - // assert(s == d) - // assert(s.hashValue == d.hashValue) - hasher.combine(count) - - Swift.withUnsafeBytes(of: bytes) { - // We have access to the full byte buffer here, but not all of it is meaningfully used (bytes past self.length may be garbage). - let bytes = UnsafeRawBufferPointer(start: $0.baseAddress, count: self.count) - hasher.combine(bytes: bytes) - } - } - } - -#if arch(x86_64) || arch(arm64) || arch(s390x) || arch(powerpc64) || arch(powerpc64le) - @usableFromInline internal typealias HalfInt = Int32 -#elseif arch(i386) || arch(arm) || arch(wasm32) - @usableFromInline internal typealias HalfInt = Int16 -#else - #error("This architecture isn't known. Add it to the 32-bit or 64-bit line.") -#endif - - // A buffer of bytes too large to fit in an InlineData, but still small enough to fit a storage pointer + range in two words. - // Inlinability strategy: everything here should be easily inlinable as large _DataStorage methods should not inline into here. - @usableFromInline - @frozen - internal struct InlineSlice { - // ***WARNING*** - // These ivars are specifically laid out so that they cause the enum _Representation to be 16 bytes on 64 bit platforms. This means we _MUST_ have the class type thing last - @usableFromInline var slice: Range - @usableFromInline var storage: __DataStorage - - @inlinable // This is @inlinable as trivially computable. - static func canStore(count: Int) -> Bool { - return count < HalfInt.max - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ buffer: UnsafeRawBufferPointer) { - assert(buffer.count < HalfInt.max) - self.init(__DataStorage(bytes: buffer.baseAddress, length: buffer.count), count: buffer.count) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(capacity: Int) { - assert(capacity < HalfInt.max) - self.init(__DataStorage(capacity: capacity), count: 0) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(count: Int) { - assert(count < HalfInt.max) - self.init(__DataStorage(length: count), count: count) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ inline: InlineData) { - assert(inline.count < HalfInt.max) - self.init(inline.withUnsafeBytes { return __DataStorage(bytes: $0.baseAddress, length: $0.count) }, count: inline.count) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ inline: InlineData, range: Range) { - assert(range.lowerBound < HalfInt.max) - assert(range.upperBound < HalfInt.max) - self.init(inline.withUnsafeBytes { return __DataStorage(bytes: $0.baseAddress, length: $0.count) }, range: range) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ large: LargeSlice) { - assert(large.range.lowerBound < HalfInt.max) - assert(large.range.upperBound < HalfInt.max) - self.init(large.storage, range: large.range) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ large: LargeSlice, range: Range) { - assert(range.lowerBound < HalfInt.max) - assert(range.upperBound < HalfInt.max) - self.init(large.storage, range: range) - } - - @inlinable // This is @inlinable as a trivial initializer. - init(_ storage: __DataStorage, count: Int) { - assert(count < HalfInt.max) - self.storage = storage - slice = 0..) { - assert(range.lowerBound < HalfInt.max) - assert(range.upperBound < HalfInt.max) - self.storage = storage - slice = HalfInt(range.lowerBound).. { - get { - return Int(slice.lowerBound)..(_ apply: (UnsafeRawBufferPointer) throws -> Result) rethrows -> Result { - return try storage.withUnsafeBytes(in: range, apply: apply) - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - mutating func withUnsafeMutableBytes(_ apply: (UnsafeMutableRawBufferPointer) throws -> Result) rethrows -> Result { - ensureUniqueReference() - return try storage.withUnsafeMutableBytes(in: range, apply: apply) - } - - @inlinable // This is @inlinable as reasonably small. - mutating func append(contentsOf buffer: UnsafeRawBufferPointer) { - assert(endIndex + buffer.count < HalfInt.max) - ensureUniqueReference() - storage.replaceBytes(in: NSRange(location: range.upperBound, length: storage.length - (range.upperBound - storage._offset)), with: buffer.baseAddress, length: buffer.count) - slice = slice.lowerBound.. UInt8 { - get { - assert(index < HalfInt.max) - precondition(startIndex <= index, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(index < endIndex, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - return storage.get(index) - } - set(newValue) { - assert(index < HalfInt.max) - precondition(startIndex <= index, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(index < endIndex, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - ensureUniqueReference() - storage.set(index, to: newValue) - } - } - - @inlinable // This is @inlinable as trivially forwarding. - func bridgedReference() -> NSData { - return storage.bridgedReference(self.range) - } - - @inlinable // This is @inlinable as reasonably small. - mutating func resetBytes(in range: Range) { - assert(range.lowerBound < HalfInt.max) - assert(range.upperBound < HalfInt.max) - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - ensureUniqueReference() - storage.resetBytes(in: range) - if slice.upperBound < range.upperBound { - slice = slice.lowerBound.., with bytes: UnsafeRawPointer?, count cnt: Int) { - precondition(startIndex <= subrange.lowerBound, "index \(subrange.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(subrange.lowerBound <= endIndex, "index \(subrange.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(startIndex <= subrange.upperBound, "index \(subrange.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(subrange.upperBound <= endIndex, "index \(subrange.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - - let nsRange = NSRange(location: subrange.lowerBound, length: subrange.upperBound - subrange.lowerBound) - ensureUniqueReference() - let upper = range.upperBound - storage.replaceBytes(in: nsRange, with: bytes, length: cnt) - let resultingUpper = upper - nsRange.length + cnt - slice = slice.lowerBound..) { - precondition(startIndex <= range.lowerBound, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(startIndex <= range.upperBound, "index \(range.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(range.upperBound <= endIndex, "index \(range.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - storage.copyBytes(to: pointer, from: range) - } - - @inline(__always) // This should always be inlined into _Representation.hash(into:). - func hash(into hasher: inout Hasher) { - hasher.combine(count) - - // At most, hash the first 80 bytes of this data. - let range = startIndex ..< Swift.min(startIndex + 80, endIndex) - storage.withUnsafeBytes(in: range) { - hasher.combine(bytes: $0) - } - } - } - - // A reference wrapper around a Range for when the range of a data buffer is too large to whole in a single word. - // Inlinability strategy: everything should be inlinable as trivial. - @usableFromInline - internal final class RangeReference { - @usableFromInline var range: Range - - @inlinable @inline(__always) // This is @inlinable as trivially forwarding. - var lowerBound: Int { - return range.lowerBound - } - - @inlinable @inline(__always) // This is @inlinable as trivially forwarding. - var upperBound: Int { - return range.upperBound - } - - @inlinable @inline(__always) // This is @inlinable as trivially computable. - var count: Int { - return range.upperBound - range.lowerBound - } - - @inlinable @inline(__always) // This is @inlinable as a trivial initializer. - init(_ range: Range) { - self.range = range - } - } - - // A buffer of bytes whose range is too large to fit in a signle word. Used alongside a RangeReference to make it fit into _Representation's two-word size. - // Inlinability strategy: everything here should be easily inlinable as large _DataStorage methods should not inline into here. - @usableFromInline - @frozen - internal struct LargeSlice { - // ***WARNING*** - // These ivars are specifically laid out so that they cause the enum _Representation to be 16 bytes on 64 bit platforms. This means we _MUST_ have the class type thing last - @usableFromInline var slice: RangeReference - @usableFromInline var storage: __DataStorage - - @inlinable // This is @inlinable as a convenience initializer. - init(_ buffer: UnsafeRawBufferPointer) { - self.init(__DataStorage(bytes: buffer.baseAddress, length: buffer.count), count: buffer.count) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(capacity: Int) { - self.init(__DataStorage(capacity: capacity), count: 0) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(count: Int) { - self.init(__DataStorage(length: count), count: count) - } - - @inlinable // This is @inlinable as a convenience initializer. - init(_ inline: InlineData) { - let storage = inline.withUnsafeBytes { return __DataStorage(bytes: $0.baseAddress, length: $0.count) } - self.init(storage, count: inline.count) - } - - @inlinable // This is @inlinable as a trivial initializer. - init(_ slice: InlineSlice) { - self.storage = slice.storage - self.slice = RangeReference(slice.range) - } - - @inlinable // This is @inlinable as a trivial initializer. - init(_ storage: __DataStorage, count: Int) { - self.storage = storage - self.slice = RangeReference(0.. { - return slice.range - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - func withUnsafeBytes(_ apply: (UnsafeRawBufferPointer) throws -> Result) rethrows -> Result { - return try storage.withUnsafeBytes(in: range, apply: apply) - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - mutating func withUnsafeMutableBytes(_ apply: (UnsafeMutableRawBufferPointer) throws -> Result) rethrows -> Result { - ensureUniqueReference() - return try storage.withUnsafeMutableBytes(in: range, apply: apply) - } - - @inlinable // This is @inlinable as reasonably small. - mutating func append(contentsOf buffer: UnsafeRawBufferPointer) { - ensureUniqueReference() - storage.replaceBytes(in: NSRange(location: range.upperBound, length: storage.length - (range.upperBound - storage._offset)), with: buffer.baseAddress, length: buffer.count) - slice.range = slice.range.lowerBound.. UInt8 { - get { - precondition(startIndex <= index, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(index < endIndex, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - return storage.get(index) - } - set(newValue) { - precondition(startIndex <= index, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(index < endIndex, "index \(index) is out of bounds of \(startIndex)..<\(endIndex)") - ensureUniqueReference() - storage.set(index, to: newValue) - } - } - - @inlinable // This is @inlinable as trivially forwarding. - func bridgedReference() -> NSData { - return storage.bridgedReference(self.range) - } - - @inlinable // This is @inlinable as reasonably small. - mutating func resetBytes(in range: Range) { - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - ensureUniqueReference() - storage.resetBytes(in: range) - if slice.range.upperBound < range.upperBound { - slice.range = slice.range.lowerBound.., with bytes: UnsafeRawPointer?, count cnt: Int) { - precondition(startIndex <= subrange.lowerBound, "index \(subrange.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(subrange.lowerBound <= endIndex, "index \(subrange.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(startIndex <= subrange.upperBound, "index \(subrange.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(subrange.upperBound <= endIndex, "index \(subrange.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - - let nsRange = NSRange(location: subrange.lowerBound, length: subrange.upperBound - subrange.lowerBound) - ensureUniqueReference() - let upper = range.upperBound - storage.replaceBytes(in: nsRange, with: bytes, length: cnt) - let resultingUpper = upper - nsRange.length + cnt - slice.range = slice.range.lowerBound..) { - precondition(startIndex <= range.lowerBound, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(startIndex <= range.upperBound, "index \(range.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - precondition(range.upperBound <= endIndex, "index \(range.upperBound) is out of bounds of \(startIndex)..<\(endIndex)") - storage.copyBytes(to: pointer, from: range) - } - - @inline(__always) // This should always be inlined into _Representation.hash(into:). - func hash(into hasher: inout Hasher) { - hasher.combine(count) - - // Hash at most the first 80 bytes of this data. - let range = startIndex ..< Swift.min(startIndex + 80, endIndex) - storage.withUnsafeBytes(in: range) { - hasher.combine(bytes: $0) - } - } - } - - // The actual storage for Data's various representations. - // Inlinability strategy: almost everything should be inlinable as forwarding the underlying implementations. (Inlining can also help avoid retain-release traffic around pulling values out of enums.) - @usableFromInline - @frozen - internal enum _Representation { - case empty - case inline(InlineData) - case slice(InlineSlice) - case large(LargeSlice) - - @inlinable // This is @inlinable as a trivial initializer. - init(_ buffer: UnsafeRawBufferPointer) { - if buffer.count == 0 { - self = .empty - } else if InlineData.canStore(count: buffer.count) { - self = .inline(InlineData(buffer)) - } else if InlineSlice.canStore(count: buffer.count) { - self = .slice(InlineSlice(buffer)) - } else { - self = .large(LargeSlice(buffer)) - } - } - - @inlinable // This is @inlinable as a trivial initializer. - init(_ buffer: UnsafeRawBufferPointer, owner: AnyObject) { - if buffer.count == 0 { - self = .empty - } else if InlineData.canStore(count: buffer.count) { - self = .inline(InlineData(buffer)) - } else { - let count = buffer.count - let storage = __DataStorage(bytes: UnsafeMutableRawPointer(mutating: buffer.baseAddress), length: count, copy: false, deallocator: { _, _ in - _fixLifetime(owner) - }, offset: 0) - if InlineSlice.canStore(count: count) { - self = .slice(InlineSlice(storage, count: count)) - } else { - self = .large(LargeSlice(storage, count: count)) - } - } - } - - @inlinable // This is @inlinable as a trivial initializer. - init(capacity: Int) { - if capacity == 0 { - self = .empty - } else if InlineData.canStore(count: capacity) { - self = .inline(InlineData()) - } else if InlineSlice.canStore(count: capacity) { - self = .slice(InlineSlice(capacity: capacity)) - } else { - self = .large(LargeSlice(capacity: capacity)) - } - } - - @inlinable // This is @inlinable as a trivial initializer. - init(count: Int) { - if count == 0 { - self = .empty - } else if InlineData.canStore(count: count) { - self = .inline(InlineData(count: count)) - } else if InlineSlice.canStore(count: count) { - self = .slice(InlineSlice(count: count)) - } else { - self = .large(LargeSlice(count: count)) - } - } - - @inlinable // This is @inlinable as a trivial initializer. - init(_ storage: __DataStorage, count: Int) { - if count == 0 { - self = .empty - } else if InlineData.canStore(count: count) { - self = .inline(storage.withUnsafeBytes(in: 0.. 0 else { return } - switch self { - case .empty: - if InlineData.canStore(count: minimumCapacity) { - self = .inline(InlineData()) - } else if InlineSlice.canStore(count: minimumCapacity) { - self = .slice(InlineSlice(capacity: minimumCapacity)) - } else { - self = .large(LargeSlice(capacity: minimumCapacity)) - } - case .inline(let inline): - guard minimumCapacity > inline.capacity else { return } - // we know we are going to be heap promoted - if InlineSlice.canStore(count: minimumCapacity) { - var slice = InlineSlice(inline) - slice.reserveCapacity(minimumCapacity) - self = .slice(slice) - } else { - var slice = LargeSlice(inline) - slice.reserveCapacity(minimumCapacity) - self = .large(slice) - } - case .slice(var slice): - guard minimumCapacity > slice.capacity else { return } - if InlineSlice.canStore(count: minimumCapacity) { - self = .empty - slice.reserveCapacity(minimumCapacity) - self = .slice(slice) - } else { - var large = LargeSlice(slice) - large.reserveCapacity(minimumCapacity) - self = .large(large) - } - case .large(var slice): - guard minimumCapacity > slice.capacity else { return } - self = .empty - slice.reserveCapacity(minimumCapacity) - self = .large(slice) - } - } - - @inlinable // This is @inlinable as reasonably small. - var count: Int { - get { - switch self { - case .empty: return 0 - case .inline(let inline): return inline.count - case .slice(let slice): return slice.count - case .large(let slice): return slice.count - } - } - set(newValue) { - // HACK: The definition of this inline function takes an inout reference to self, giving the optimizer a unique referencing guarantee. - // This allows us to avoid excessive retain-release traffic around modifying enum values, and inlining the function then avoids the additional frame. - @inline(__always) - func apply(_ representation: inout _Representation, _ newValue: Int) -> _Representation? { - switch representation { - case .empty: - if newValue == 0 { - return nil - } else if InlineData.canStore(count: newValue) { - return .inline(InlineData(count: newValue)) - } else if InlineSlice.canStore(count: newValue) { - return .slice(InlineSlice(count: newValue)) - } else { - return .large(LargeSlice(count: newValue)) - } - case .inline(var inline): - if newValue == 0 { - return .empty - } else if InlineData.canStore(count: newValue) { - guard inline.count != newValue else { return nil } - inline.count = newValue - return .inline(inline) - } else if InlineSlice.canStore(count: newValue) { - var slice = InlineSlice(inline) - slice.count = newValue - return .slice(slice) - } else { - var slice = LargeSlice(inline) - slice.count = newValue - return .large(slice) - } - case .slice(var slice): - if newValue == 0 && slice.startIndex == 0 { - return .empty - } else if slice.startIndex == 0 && InlineData.canStore(count: newValue) { - return .inline(InlineData(slice, count: newValue)) - } else if InlineSlice.canStore(count: newValue + slice.startIndex) { - guard slice.count != newValue else { return nil } - representation = .empty // TODO: remove this when mgottesman lands optimizations - slice.count = newValue - return .slice(slice) - } else { - var newSlice = LargeSlice(slice) - newSlice.count = newValue - return .large(newSlice) - } - case .large(var slice): - if newValue == 0 && slice.startIndex == 0 { - return .empty - } else if slice.startIndex == 0 && InlineData.canStore(count: newValue) { - return .inline(InlineData(slice, count: newValue)) - } else { - guard slice.count != newValue else { return nil} - representation = .empty // TODO: remove this when mgottesman lands optimizations - slice.count = newValue - return .large(slice) - } - } - } - - if let rep = apply(&self, newValue) { - self = rep - } - } - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - func withUnsafeBytes(_ apply: (UnsafeRawBufferPointer) throws -> Result) rethrows -> Result { - switch self { - case .empty: - let empty = InlineData() - return try empty.withUnsafeBytes(apply) - case .inline(let inline): - return try inline.withUnsafeBytes(apply) - case .slice(let slice): - return try slice.withUnsafeBytes(apply) - case .large(let slice): - return try slice.withUnsafeBytes(apply) - } - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - mutating func withUnsafeMutableBytes(_ apply: (UnsafeMutableRawBufferPointer) throws -> Result) rethrows -> Result { - switch self { - case .empty: - var empty = InlineData() - return try empty.withUnsafeMutableBytes(apply) - case .inline(var inline): - defer { self = .inline(inline) } - return try inline.withUnsafeMutableBytes(apply) - case .slice(var slice): - self = .empty - defer { self = .slice(slice) } - return try slice.withUnsafeMutableBytes(apply) - case .large(var slice): - self = .empty - defer { self = .large(slice) } - return try slice.withUnsafeMutableBytes(apply) - } - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - func withInteriorPointerReference(_ work: (NSData) throws -> T) rethrows -> T { - switch self { - case .empty: - return try work(NSData()) - case .inline(let inline): - return try inline.withUnsafeBytes { - return try work(NSData(bytesNoCopy: UnsafeMutableRawPointer(mutating: $0.baseAddress ?? UnsafeRawPointer(bitPattern: 0xBAD0)!), length: $0.count, freeWhenDone: false)) - } - case .slice(let slice): - return try slice.storage.withInteriorPointerReference(slice.range, work) - case .large(let slice): - return try slice.storage.withInteriorPointerReference(slice.range, work) - } - } - - @usableFromInline // This is not @inlinable as it is a non-trivial, non-generic function. - func enumerateBytes(_ block: (_ buffer: UnsafeBufferPointer, _ byteIndex: Index, _ stop: inout Bool) -> Void) { - switch self { - case .empty: - var stop = false - block(UnsafeBufferPointer(start: nil, count: 0), 0, &stop) - case .inline(let inline): - inline.withUnsafeBytes { - var stop = false - block(UnsafeBufferPointer(start: $0.baseAddress?.assumingMemoryBound(to: UInt8.self), count: $0.count), 0, &stop) - } - case .slice(let slice): - slice.storage.enumerateBytes(in: slice.range, block) - case .large(let slice): - slice.storage.enumerateBytes(in: slice.range, block) - } - } - - @inlinable // This is @inlinable as reasonably small. - mutating func append(contentsOf buffer: UnsafeRawBufferPointer) { - switch self { - case .empty: - self = _Representation(buffer) - case .inline(var inline): - if InlineData.canStore(count: inline.count + buffer.count) { - inline.append(contentsOf: buffer) - self = .inline(inline) - } else if InlineSlice.canStore(count: inline.count + buffer.count) { - var newSlice = InlineSlice(inline) - newSlice.append(contentsOf: buffer) - self = .slice(newSlice) - } else { - var newSlice = LargeSlice(inline) - newSlice.append(contentsOf: buffer) - self = .large(newSlice) - } - case .slice(var slice): - if InlineSlice.canStore(count: slice.range.upperBound + buffer.count) { - self = .empty - defer { self = .slice(slice) } - slice.append(contentsOf: buffer) - } else { - self = .empty - var newSlice = LargeSlice(slice) - newSlice.append(contentsOf: buffer) - self = .large(newSlice) - } - case .large(var slice): - self = .empty - defer { self = .large(slice) } - slice.append(contentsOf: buffer) - } - } - - @inlinable // This is @inlinable as reasonably small. - mutating func resetBytes(in range: Range) { - switch self { - case .empty: - if range.upperBound == 0 { - self = .empty - } else if InlineData.canStore(count: range.upperBound) { - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - self = .inline(InlineData(count: range.upperBound)) - } else if InlineSlice.canStore(count: range.upperBound) { - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - self = .slice(InlineSlice(count: range.upperBound)) - } else { - precondition(range.lowerBound <= endIndex, "index \(range.lowerBound) is out of bounds of \(startIndex)..<\(endIndex)") - self = .large(LargeSlice(count: range.upperBound)) - } - case .inline(var inline): - if inline.count < range.upperBound { - if InlineSlice.canStore(count: range.upperBound) { - var slice = InlineSlice(inline) - slice.resetBytes(in: range) - self = .slice(slice) - } else { - var slice = LargeSlice(inline) - slice.resetBytes(in: range) - self = .large(slice) - } - } else { - inline.resetBytes(in: range) - self = .inline(inline) - } - case .slice(var slice): - if InlineSlice.canStore(count: range.upperBound) { - self = .empty - slice.resetBytes(in: range) - self = .slice(slice) - } else { - self = .empty - var newSlice = LargeSlice(slice) - newSlice.resetBytes(in: range) - self = .large(newSlice) - } - case .large(var slice): - self = .empty - slice.resetBytes(in: range) - self = .large(slice) - } - } - - @usableFromInline // This is not @inlinable as it is a non-trivial, non-generic function. - mutating func replaceSubrange(_ subrange: Range, with bytes: UnsafeRawPointer?, count cnt: Int) { - switch self { - case .empty: - precondition(subrange.lowerBound == 0 && subrange.upperBound == 0, "range \(subrange) out of bounds of 0..<0") - if cnt == 0 { - return - } else if InlineData.canStore(count: cnt) { - self = .inline(InlineData(UnsafeRawBufferPointer(start: bytes, count: cnt))) - } else if InlineSlice.canStore(count: cnt) { - self = .slice(InlineSlice(UnsafeRawBufferPointer(start: bytes, count: cnt))) - } else { - self = .large(LargeSlice(UnsafeRawBufferPointer(start: bytes, count: cnt))) - } - case .inline(var inline): - let resultingCount = inline.count + cnt - (subrange.upperBound - subrange.lowerBound) - if resultingCount == 0 { - self = .empty - } else if InlineData.canStore(count: resultingCount) { - inline.replaceSubrange(subrange, with: bytes, count: cnt) - self = .inline(inline) - } else if InlineSlice.canStore(count: resultingCount) { - var slice = InlineSlice(inline) - slice.replaceSubrange(subrange, with: bytes, count: cnt) - self = .slice(slice) - } else { - var slice = LargeSlice(inline) - slice.replaceSubrange(subrange, with: bytes, count: cnt) - self = .large(slice) - } - case .slice(var slice): - let resultingUpper = slice.endIndex + cnt - (subrange.upperBound - subrange.lowerBound) - if slice.startIndex == 0 && resultingUpper == 0 { - self = .empty - } else if slice.startIndex == 0 && InlineData.canStore(count: resultingUpper) { - self = .empty - slice.replaceSubrange(subrange, with: bytes, count: cnt) - self = .inline(InlineData(slice, count: slice.count)) - } else if InlineSlice.canStore(count: resultingUpper) { - self = .empty - slice.replaceSubrange(subrange, with: bytes, count: cnt) - self = .slice(slice) - } else { - self = .empty - var newSlice = LargeSlice(slice) - newSlice.replaceSubrange(subrange, with: bytes, count: cnt) - self = .large(newSlice) - } - case .large(var slice): - let resultingUpper = slice.endIndex + cnt - (subrange.upperBound - subrange.lowerBound) - if slice.startIndex == 0 && resultingUpper == 0 { - self = .empty - } else if slice.startIndex == 0 && InlineData.canStore(count: resultingUpper) { - var inline = InlineData(count: resultingUpper) - inline.withUnsafeMutableBytes { inlineBuffer in - if cnt > 0 { - inlineBuffer.baseAddress?.advanced(by: subrange.lowerBound).copyMemory(from: bytes!, byteCount: cnt) - } - slice.withUnsafeBytes { buffer in - if subrange.lowerBound > 0 { - inlineBuffer.baseAddress?.copyMemory(from: buffer.baseAddress!, byteCount: subrange.lowerBound) - } - if subrange.upperBound < resultingUpper { - inlineBuffer.baseAddress?.advanced(by: subrange.upperBound).copyMemory(from: buffer.baseAddress!.advanced(by: subrange.upperBound), byteCount: resultingUpper - subrange.upperBound) - } - } - } - self = .inline(inline) - } else if InlineSlice.canStore(count: slice.startIndex) && InlineSlice.canStore(count: resultingUpper) { - self = .empty - var newSlice = InlineSlice(slice) - newSlice.replaceSubrange(subrange, with: bytes, count: cnt) - self = .slice(newSlice) - } else { - self = .empty - slice.replaceSubrange(subrange, with: bytes, count: cnt) - self = .large(slice) - } - } - } - - @inlinable // This is @inlinable as trivially forwarding. - subscript(index: Index) -> UInt8 { - get { - switch self { - case .empty: preconditionFailure("index \(index) out of range of 0") - case .inline(let inline): return inline[index] - case .slice(let slice): return slice[index] - case .large(let slice): return slice[index] - } - } - set(newValue) { - switch self { - case .empty: preconditionFailure("index \(index) out of range of 0") - case .inline(var inline): - inline[index] = newValue - self = .inline(inline) - case .slice(var slice): - self = .empty - slice[index] = newValue - self = .slice(slice) - case .large(var slice): - self = .empty - slice[index] = newValue - self = .large(slice) - } - } - } - - @inlinable // This is @inlinable as reasonably small. - subscript(bounds: Range) -> Data { - get { - switch self { - case .empty: - precondition(bounds.lowerBound == 0 && (bounds.upperBound - bounds.lowerBound) == 0, "Range \(bounds) out of bounds 0..<0") - return Data() - case .inline(let inline): - precondition(bounds.upperBound <= inline.count, "Range \(bounds) out of bounds 0..<\(inline.count)") - if bounds.lowerBound == 0 { - var newInline = inline - newInline.count = bounds.upperBound - return Data(representation: .inline(newInline)) - } else { - return Data(representation: .slice(InlineSlice(inline, range: bounds))) - } - case .slice(let slice): - precondition(slice.startIndex <= bounds.lowerBound, "Range \(bounds) out of bounds \(slice.range)") - precondition(bounds.lowerBound <= slice.endIndex, "Range \(bounds) out of bounds \(slice.range)") - precondition(slice.startIndex <= bounds.upperBound, "Range \(bounds) out of bounds \(slice.range)") - precondition(bounds.upperBound <= slice.endIndex, "Range \(bounds) out of bounds \(slice.range)") - if bounds.lowerBound == 0 && bounds.upperBound == 0 { - return Data() - } else if bounds.lowerBound == 0 && InlineData.canStore(count: bounds.count) { - return Data(representation: .inline(InlineData(slice, count: bounds.count))) - } else { - var newSlice = slice - newSlice.range = bounds - return Data(representation: .slice(newSlice)) - } - case .large(let slice): - precondition(slice.startIndex <= bounds.lowerBound, "Range \(bounds) out of bounds \(slice.range)") - precondition(bounds.lowerBound <= slice.endIndex, "Range \(bounds) out of bounds \(slice.range)") - precondition(slice.startIndex <= bounds.upperBound, "Range \(bounds) out of bounds \(slice.range)") - precondition(bounds.upperBound <= slice.endIndex, "Range \(bounds) out of bounds \(slice.range)") - if bounds.lowerBound == 0 && bounds.upperBound == 0 { - return Data() - } else if bounds.lowerBound == 0 && InlineData.canStore(count: bounds.upperBound) { - return Data(representation: .inline(InlineData(slice, count: bounds.upperBound))) - } else if InlineSlice.canStore(count: bounds.lowerBound) && InlineSlice.canStore(count: bounds.upperBound) { - return Data(representation: .slice(InlineSlice(slice, range: bounds))) - } else { - var newSlice = slice - newSlice.slice = RangeReference(bounds) - return Data(representation: .large(newSlice)) - } - } - } - } - - @inlinable // This is @inlinable as trivially forwarding. - var startIndex: Int { - switch self { - case .empty: return 0 - case .inline: return 0 - case .slice(let slice): return slice.startIndex - case .large(let slice): return slice.startIndex - } - } - - @inlinable // This is @inlinable as trivially forwarding. - var endIndex: Int { - switch self { - case .empty: return 0 - case .inline(let inline): return inline.count - case .slice(let slice): return slice.endIndex - case .large(let slice): return slice.endIndex - } - } - - @inlinable // This is @inlinable as trivially forwarding. - func bridgedReference() -> NSData { - switch self { - case .empty: return NSData() - case .inline(let inline): - return inline.withUnsafeBytes { - return NSData(bytes: $0.baseAddress, length: $0.count) - } - case .slice(let slice): - return slice.bridgedReference() - case .large(let slice): - return slice.bridgedReference() - } - } - - @inlinable // This is @inlinable as trivially forwarding. - func copyBytes(to pointer: UnsafeMutableRawPointer, from range: Range) { - switch self { - case .empty: - precondition(range.lowerBound == 0 && range.upperBound == 0, "Range \(range) out of bounds 0..<0") - return - case .inline(let inline): - inline.copyBytes(to: pointer, from: range) - case .slice(let slice): - slice.copyBytes(to: pointer, from: range) - case .large(let slice): - slice.copyBytes(to: pointer, from: range) - } - } - - @inline(__always) // This should always be inlined into Data.hash(into:). - func hash(into hasher: inout Hasher) { - switch self { - case .empty: - hasher.combine(0) - case .inline(let inline): - inline.hash(into: &hasher) - case .slice(let slice): - slice.hash(into: &hasher) - case .large(let large): - large.hash(into: &hasher) - } - } - } - - @usableFromInline internal var _representation: _Representation - - // A standard or custom deallocator for `Data`. - /// - /// When creating a `Data` with the no-copy initializer, you may specify a `Data.Deallocator` to customize the behavior of how the backing store is deallocated. - public enum Deallocator { - /// Use a virtual memory deallocator. -#if !DEPLOYMENT_RUNTIME_SWIFT - case virtualMemory -#endif - - /// Use `munmap`. - case unmap - - /// Use `free`. - case free - - /// Do nothing upon deallocation. - case none - - /// A custom deallocator. - case custom((UnsafeMutableRawPointer, Int) -> Void) - - @usableFromInline internal var _deallocator : ((UnsafeMutableRawPointer, Int) -> Void) { -#if DEPLOYMENT_RUNTIME_SWIFT - switch self { - case .unmap: - return { __NSDataInvokeDeallocatorUnmap($0, $1) } - case .free: - return { __NSDataInvokeDeallocatorFree($0, $1) } - case .none: - return { _, _ in } - case .custom(let b): - return b - } -#else - switch self { - case .virtualMemory: - return { NSDataDeallocatorVM($0, $1) } - case .unmap: - return { NSDataDeallocatorUnmap($0, $1) } - case .free: - return { NSDataDeallocatorFree($0, $1) } - case .none: - return { _, _ in } - case .custom(let b): - return b - } -#endif - } - } - - // MARK: - - // MARK: Init methods - - /// Initialize a `Data` with copied memory content. - /// - /// - parameter bytes: A pointer to the memory. It will be copied. - /// - parameter count: The number of bytes to copy. - @inlinable // This is @inlinable as a trivial initializer. - public init(bytes: UnsafeRawPointer, count: Int) { - _representation = _Representation(UnsafeRawBufferPointer(start: bytes, count: count)) - } - - /// Initialize a `Data` with copied memory content. - /// - /// - parameter buffer: A buffer pointer to copy. The size is calculated from `SourceType` and `buffer.count`. - @inlinable // This is @inlinable as a trivial, generic initializer. - public init(buffer: UnsafeBufferPointer) { - _representation = _Representation(UnsafeRawBufferPointer(buffer)) - } - - /// Initialize a `Data` with copied memory content. - /// - /// - parameter buffer: A buffer pointer to copy. The size is calculated from `SourceType` and `buffer.count`. - @inlinable // This is @inlinable as a trivial, generic initializer. - public init(buffer: UnsafeMutableBufferPointer) { - _representation = _Representation(UnsafeRawBufferPointer(buffer)) - } - - /// Initialize a `Data` with a repeating byte pattern - /// - /// - parameter repeatedValue: A byte to initialize the pattern - /// - parameter count: The number of bytes the data initially contains initialized to the repeatedValue - @inlinable // This is @inlinable as a convenience initializer. - public init(repeating repeatedValue: UInt8, count: Int) { - self.init(count: count) - if count > 0 { - withUnsafeMutableBytes { (buffer: UnsafeMutableRawBufferPointer) -> Void in - memset(buffer.baseAddress!, Int32(repeatedValue), buffer.count) - } - } - } - - /// Initialize a `Data` with the specified size. - /// - /// This initializer doesn't necessarily allocate the requested memory right away. `Data` allocates additional memory as needed, so `capacity` simply establishes the initial capacity. When it does allocate the initial memory, though, it allocates the specified amount. - /// - /// This method sets the `count` of the data to 0. - /// - /// If the capacity specified in `capacity` is greater than four memory pages in size, this may round the amount of requested memory up to the nearest full page. - /// - /// - parameter capacity: The size of the data. - @inlinable // This is @inlinable as a trivial initializer. - public init(capacity: Int) { - _representation = _Representation(capacity: capacity) - } - - /// Initialize a `Data` with the specified count of zeroed bytes. - /// - /// - parameter count: The number of bytes the data initially contains. - @inlinable // This is @inlinable as a trivial initializer. - public init(count: Int) { - _representation = _Representation(count: count) - } - - /// Initialize an empty `Data`. - @inlinable // This is @inlinable as a trivial initializer. - public init() { - _representation = .empty - } - - - /// Initialize a `Data` without copying the bytes. - /// - /// If the result is mutated and is not a unique reference, then the `Data` will still follow copy-on-write semantics. In this case, the copy will use its own deallocator. Therefore, it is usually best to only use this initializer when you either enforce immutability with `let` or ensure that no other references to the underlying data are formed. - /// - parameter bytes: A pointer to the bytes. - /// - parameter count: The size of the bytes. - /// - parameter deallocator: Specifies the mechanism to free the indicated buffer, or `.none`. - @inlinable // This is @inlinable as a trivial initializer. - public init(bytesNoCopy bytes: UnsafeMutableRawPointer, count: Int, deallocator: Deallocator) { - let whichDeallocator = deallocator._deallocator - if count == 0 { - deallocator._deallocator(bytes, count) - _representation = .empty - } else { - _representation = _Representation(__DataStorage(bytes: bytes, length: count, copy: false, deallocator: whichDeallocator, offset: 0), count: count) - } - } - -#if !os(WASI) - /// Initialize a `Data` with the contents of a `URL`. - /// - /// - parameter url: The `URL` to read. - /// - parameter options: Options for the read operation. Default value is `[]`. - /// - throws: An error in the Cocoa domain, if `url` cannot be read. - @inlinable // This is @inlinable as a convenience initializer. - public init(contentsOf url: __shared URL, options: Data.ReadingOptions = []) throws { - let d = try NSData(contentsOf: url, options: ReadingOptions(rawValue: options.rawValue)) - self = withExtendedLifetime(d) { - return Data(bytes: d.bytes, count: d.length) - } - } -#endif - - /// Initialize a `Data` from a Base-64 encoded String using the given options. - /// - /// Returns nil when the input is not recognized as valid Base-64. - /// - parameter base64String: The string to parse. - /// - parameter options: Encoding options. Default value is `[]`. - @inlinable // This is @inlinable as a convenience initializer. - public init?(base64Encoded base64String: __shared String, options: Data.Base64DecodingOptions = []) { - if let d = NSData(base64Encoded: base64String, options: Base64DecodingOptions(rawValue: options.rawValue)) { - self = withExtendedLifetime(d) { - Data(bytes: d.bytes, count: d.length) - } - } else { - return nil - } - } - - /// Initialize a `Data` from a Base-64, UTF-8 encoded `Data`. - /// - /// Returns nil when the input is not recognized as valid Base-64. - /// - /// - parameter base64Data: Base-64, UTF-8 encoded input data. - /// - parameter options: Decoding options. Default value is `[]`. - @inlinable // This is @inlinable as a convenience initializer. - public init?(base64Encoded base64Data: __shared Data, options: Data.Base64DecodingOptions = []) { - if let d = NSData(base64Encoded: base64Data, options: Base64DecodingOptions(rawValue: options.rawValue)) { - self = withExtendedLifetime(d) { - Data(bytes: d.bytes, count: d.length) - } - } else { - return nil - } - } - - /// Initialize a `Data` by adopting a reference type. - /// - /// You can use this initializer to create a `struct Data` that wraps a `class NSData`. `struct Data` will use the `class NSData` for all operations. Other initializers (including casting using `as Data`) may choose to hold a reference or not, based on a what is the most efficient representation. - /// - /// If the resulting value is mutated, then `Data` will invoke the `mutableCopy()` function on the reference to copy the contents. You may customize the behavior of that function if you wish to return a specialized mutable subclass. - /// - /// - parameter reference: The instance of `NSData` that you wish to wrap. This instance will be copied by `struct Data`. - public init(referencing reference: __shared NSData) { - // This is not marked as inline because _providesConcreteBacking would need to be marked as usable from inline however that is a dynamic lookup in objc contexts. - let length = reference.length - if length == 0 { - _representation = .empty - } else { -#if DEPLOYMENT_RUNTIME_SWIFT - let providesConcreteBacking = reference._providesConcreteBacking() -#else - let providesConcreteBacking = (reference as AnyObject)._providesConcreteBacking?() ?? false -#endif - if providesConcreteBacking { - _representation = _Representation(__DataStorage(immutableReference: reference.copy() as! NSData, offset: 0), count: length) - } else { - _representation = _Representation(__DataStorage(customReference: reference.copy() as! NSData, offset: 0), count: length) - } - } - - } - - // slightly faster paths for common sequences - @inlinable // This is @inlinable as an important generic funnel point, despite being a non-trivial initializer. - public init(_ elements: S) where S.Element == UInt8 { - // If the sequence is already contiguous, access the underlying raw memory directly. - if let contiguous = elements as? ContiguousBytes { - _representation = contiguous.withUnsafeBytes { return _Representation($0) } - return - } - - // The sequence might still be able to provide direct access to typed memory. - // NOTE: It's safe to do this because we're already guarding on S's element as `UInt8`. This would not be safe on arbitrary sequences. - let representation = elements.withContiguousStorageIfAvailable { - return _Representation(UnsafeRawBufferPointer($0)) - } - - if let representation = representation { - _representation = representation - } else { - // Dummy assignment so we can capture below. - _representation = _Representation(capacity: 0) - - // Copy as much as we can in one shot from the sequence. - let underestimatedCount = Swift.max(elements.underestimatedCount, 1) - __withStackOrHeapBuffer(underestimatedCount) { (memory, capacity, isOnStack) in - // In order to copy from the sequence, we have to bind the buffer to UInt8. - // This is safe since we'll copy out of this buffer as raw memory later. - let base = memory.bindMemory(to: UInt8.self, capacity: capacity) - var (iter, endIndex) = elements._copyContents(initializing: UnsafeMutableBufferPointer(start: base, count: capacity)) - - // Copy the contents of buffer... - _representation = _Representation(UnsafeRawBufferPointer(start: base, count: endIndex)) - - // ... and append the rest byte-wise, buffering through an InlineData. - var buffer = InlineData() - while let element = iter.next() { - buffer.append(byte: element) - if buffer.count == buffer.capacity { - buffer.withUnsafeBytes { _representation.append(contentsOf: $0) } - buffer.count = 0 - } - } - - // If we've still got bytes left in the buffer (i.e. the loop ended before we filled up the buffer and cleared it out), append them. - if buffer.count > 0 { - buffer.withUnsafeBytes { _representation.append(contentsOf: $0) } - buffer.count = 0 - } - } - } - } - - @available(swift, introduced: 4.2) - @available(swift, deprecated: 5, renamed: "init(_:)") - public init(bytes elements: S) where S.Iterator.Element == UInt8 { - self.init(elements) - } - - @available(swift, obsoleted: 4.2) - public init(bytes: Array) { - self.init(bytes) - } - - @available(swift, obsoleted: 4.2) - public init(bytes: ArraySlice) { - self.init(bytes) - } - - @inlinable // This is @inlinable as a trivial initializer. - internal init(representation: _Representation) { - _representation = representation - } - - // ----------------------------------- - // MARK: - Properties and Functions - - @inlinable // This is @inlinable as trivially forwarding. - public mutating func reserveCapacity(_ minimumCapacity: Int) { - _representation.reserveCapacity(minimumCapacity) - } - - /// The number of bytes in the data. - @inlinable // This is @inlinable as trivially forwarding. - public var count: Int { - get { - return _representation.count - } - set(newValue) { - precondition(newValue >= 0, "count must not be negative") - _representation.count = newValue - } - } - - @inlinable // This is @inlinable as trivially computable. - public var regions: CollectionOfOne { - return CollectionOfOne(self) - } - - /// Access the bytes in the data. - /// - /// - warning: The byte pointer argument should not be stored and used outside of the lifetime of the call to the closure. - @available(swift, deprecated: 5, message: "use `withUnsafeBytes(_: (UnsafeRawBufferPointer) throws -> R) rethrows -> R` instead") - public func withUnsafeBytes(_ body: (UnsafePointer) throws -> ResultType) rethrows -> ResultType { - return try _representation.withUnsafeBytes { - return try body($0.baseAddress?.assumingMemoryBound(to: ContentType.self) ?? UnsafePointer(bitPattern: 0xBAD0)!) - } - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> ResultType) rethrows -> ResultType { - return try _representation.withUnsafeBytes(body) - } - - /// Mutate the bytes in the data. - /// - /// This function assumes that you are mutating the contents. - /// - warning: The byte pointer argument should not be stored and used outside of the lifetime of the call to the closure. - @available(swift, deprecated: 5, message: "use `withUnsafeMutableBytes(_: (UnsafeMutableRawBufferPointer) throws -> R) rethrows -> R` instead") - public mutating func withUnsafeMutableBytes(_ body: (UnsafeMutablePointer) throws -> ResultType) rethrows -> ResultType { - return try _representation.withUnsafeMutableBytes { - return try body($0.baseAddress?.assumingMemoryBound(to: ContentType.self) ?? UnsafeMutablePointer(bitPattern: 0xBAD0)!) - } - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - public mutating func withUnsafeMutableBytes(_ body: (UnsafeMutableRawBufferPointer) throws -> ResultType) rethrows -> ResultType { - return try _representation.withUnsafeMutableBytes(body) - } - - // MARK: - - // MARK: Copy Bytes - - /// Copy the contents of the data to a pointer. - /// - /// - parameter pointer: A pointer to the buffer you wish to copy the bytes into. - /// - parameter count: The number of bytes to copy. - /// - warning: This method does not verify that the contents at pointer have enough space to hold `count` bytes. - @inlinable // This is @inlinable as trivially forwarding. - public func copyBytes(to pointer: UnsafeMutablePointer, count: Int) { - precondition(count >= 0, "count of bytes to copy must not be negative") - if count == 0 { return } - _copyBytesHelper(to: UnsafeMutableRawPointer(pointer), from: startIndex..<(startIndex + count)) - } - - @inlinable // This is @inlinable as trivially forwarding. - internal func _copyBytesHelper(to pointer: UnsafeMutableRawPointer, from range: Range) { - if range.isEmpty { return } - _representation.copyBytes(to: pointer, from: range) - } - - /// Copy a subset of the contents of the data to a pointer. - /// - /// - parameter pointer: A pointer to the buffer you wish to copy the bytes into. - /// - parameter range: The range in the `Data` to copy. - /// - warning: This method does not verify that the contents at pointer have enough space to hold the required number of bytes. - @inlinable // This is @inlinable as trivially forwarding. - public func copyBytes(to pointer: UnsafeMutablePointer, from range: Range) { - _copyBytesHelper(to: pointer, from: range) - } - - // Copy the contents of the data into a buffer. - /// - /// This function copies the bytes in `range` from the data into the buffer. If the count of the `range` is greater than `MemoryLayout.stride * buffer.count` then the first N bytes will be copied into the buffer. - /// - precondition: The range must be within the bounds of the data. Otherwise `fatalError` is called. - /// - parameter buffer: A buffer to copy the data into. - /// - parameter range: A range in the data to copy into the buffer. If the range is empty, this function will return 0 without copying anything. If the range is nil, as much data as will fit into `buffer` is copied. - /// - returns: Number of bytes copied into the destination buffer. - @inlinable // This is @inlinable as generic and reasonably small. - public func copyBytes(to buffer: UnsafeMutableBufferPointer, from range: Range? = nil) -> Int { - let cnt = count - guard cnt > 0 else { return 0 } - - let copyRange : Range - if let r = range { - guard !r.isEmpty else { return 0 } - copyRange = r.lowerBound..<(r.lowerBound + Swift.min(buffer.count * MemoryLayout.stride, r.upperBound - r.lowerBound)) - } else { - copyRange = 0...stride, cnt) - } - - guard !copyRange.isEmpty else { return 0 } - - _copyBytesHelper(to: buffer.baseAddress!, from: copyRange) - return copyRange.upperBound - copyRange.lowerBound - } - - // MARK: - -#if !DEPLOYMENT_RUNTIME_SWIFT - private func _shouldUseNonAtomicWriteReimplementation(options: Data.WritingOptions = []) -> Bool { - - // Avoid a crash that happens on OS X 10.11.x and iOS 9.x or before when writing a bridged Data non-atomically with Foundation's standard write() implementation. - if !options.contains(.atomic) { - #if os(macOS) - return NSFoundationVersionNumber <= Double(NSFoundationVersionNumber10_11_Max) - #else - return NSFoundationVersionNumber <= Double(NSFoundationVersionNumber_iOS_9_x_Max) - #endif - } else { - return false - } - } -#endif - -#if !os(WASI) - /// Write the contents of the `Data` to a location. - /// - /// - parameter url: The location to write the data into. - /// - parameter options: Options for writing the data. Default value is `[]`. - /// - throws: An error in the Cocoa domain, if there is an error writing to the `URL`. - public func write(to url: URL, options: Data.WritingOptions = []) throws { - // this should not be marked as inline since in objc contexts we correct atomicity via _shouldUseNonAtomicWriteReimplementation - try _representation.withInteriorPointerReference { -#if DEPLOYMENT_RUNTIME_SWIFT - try $0.write(to: url, options: WritingOptions(rawValue: options.rawValue)) -#else - if _shouldUseNonAtomicWriteReimplementation(options: options) { - var error: NSError? = nil - guard __NSDataWriteToURL($0, url, options, &error) else { throw error! } - } else { - try $0.write(to: url, options: options) - } -#endif - } - } -#endif - - // MARK: - - - /// Find the given `Data` in the content of this `Data`. - /// - /// - parameter dataToFind: The data to be searched for. - /// - parameter options: Options for the search. Default value is `[]`. - /// - parameter range: The range of this data in which to perform the search. Default value is `nil`, which means the entire content of this data. - /// - returns: A `Range` specifying the location of the found data, or nil if a match could not be found. - /// - precondition: `range` must be in the bounds of the Data. - public func range(of dataToFind: Data, options: Data.SearchOptions = [], in range: Range? = nil) -> Range? { - let nsRange : NSRange - if let r = range { - nsRange = NSRange(location: r.lowerBound - startIndex, length: r.upperBound - r.lowerBound) - } else { - nsRange = NSRange(location: 0, length: count) - } - let result = _representation.withInteriorPointerReference { - $0.range(of: dataToFind, options: options, in: nsRange) - } - if result.location == NSNotFound { - return nil - } - return (result.location + startIndex)..<((result.location + startIndex) + result.length) - } - - /// Enumerate the contents of the data. - /// - /// In some cases, (for example, a `Data` backed by a `dispatch_data_t`, the bytes may be stored discontiguously. In those cases, this function invokes the closure for each contiguous region of bytes. - /// - parameter block: The closure to invoke for each region of data. You may stop the enumeration by setting the `stop` parameter to `true`. - @available(swift, deprecated: 5, message: "use `regions` or `for-in` instead") - public func enumerateBytes(_ block: (_ buffer: UnsafeBufferPointer, _ byteIndex: Index, _ stop: inout Bool) -> Void) { - _representation.enumerateBytes(block) - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - internal mutating func _append(_ buffer : UnsafeBufferPointer) { - if buffer.isEmpty { return } - _representation.append(contentsOf: UnsafeRawBufferPointer(buffer)) - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - public mutating func append(_ bytes: UnsafePointer, count: Int) { - if count == 0 { return } - _append(UnsafeBufferPointer(start: bytes, count: count)) - } - - public mutating func append(_ other: Data) { - guard other.count > 0 else { return } - other.withUnsafeBytes { (buffer: UnsafeRawBufferPointer) in - _representation.append(contentsOf: buffer) - } - } - - /// Append a buffer of bytes to the data. - /// - /// - parameter buffer: The buffer of bytes to append. The size is calculated from `SourceType` and `buffer.count`. - @inlinable // This is @inlinable as a generic, trivially forwarding function. - public mutating func append(_ buffer : UnsafeBufferPointer) { - _append(buffer) - } - - @inlinable // This is @inlinable as trivially forwarding. - public mutating func append(contentsOf bytes: [UInt8]) { - bytes.withUnsafeBufferPointer { (buffer: UnsafeBufferPointer) -> Void in - _append(buffer) - } - } - - @inlinable // This is @inlinable as an important generic funnel point, despite being non-trivial. - public mutating func append(contentsOf elements: S) where S.Element == Element { - // If the sequence is already contiguous, access the underlying raw memory directly. - if let contiguous = elements as? ContiguousBytes { - contiguous.withUnsafeBytes { - _representation.append(contentsOf: $0) - } - - return - } - - // The sequence might still be able to provide direct access to typed memory. - // NOTE: It's safe to do this because we're already guarding on S's element as `UInt8`. This would not be safe on arbitrary sequences. - var appended = false - elements.withContiguousStorageIfAvailable { - _representation.append(contentsOf: UnsafeRawBufferPointer($0)) - appended = true - } - - guard !appended else { return } - - // The sequence is really not contiguous. - // Copy as much as we can in one shot. - let underestimatedCount = Swift.max(elements.underestimatedCount, 1) - __withStackOrHeapBuffer(underestimatedCount) { (memory, capacity, isOnStack) in - // In order to copy from the sequence, we have to bind the temporary buffer to `UInt8`. - // This is safe since we're the only owners of the buffer and we copy out as raw memory below anyway. - let base = memory.bindMemory(to: UInt8.self, capacity: capacity) - var (iter, endIndex) = elements._copyContents(initializing: UnsafeMutableBufferPointer(start: base, count: capacity)) - - // Copy the contents of the buffer... - _representation.append(contentsOf: UnsafeRawBufferPointer(start: base, count: endIndex)) - - // ... and append the rest byte-wise, buffering through an InlineData. - var buffer = InlineData() - while let element = iter.next() { - buffer.append(byte: element) - if buffer.count == buffer.capacity { - buffer.withUnsafeBytes { _representation.append(contentsOf: $0) } - buffer.count = 0 - } - } - - // If we've still got bytes left in the buffer (i.e. the loop ended before we filled up the buffer and cleared it out), append them. - if buffer.count > 0 { - buffer.withUnsafeBytes { _representation.append(contentsOf: $0) } - buffer.count = 0 - } - } - } - - // MARK: - - - /// Set a region of the data to `0`. - /// - /// If `range` exceeds the bounds of the data, then the data is resized to fit. - /// - parameter range: The range in the data to set to `0`. - @inlinable // This is @inlinable as trivially forwarding. - public mutating func resetBytes(in range: Range) { - // it is worth noting that the range here may be out of bounds of the Data itself (which triggers a growth) - precondition(range.lowerBound >= 0, "Ranges must not be negative bounds") - precondition(range.upperBound >= 0, "Ranges must not be negative bounds") - _representation.resetBytes(in: range) - } - - /// Replace a region of bytes in the data with new data. - /// - /// This will resize the data if required, to fit the entire contents of `data`. - /// - /// - precondition: The bounds of `subrange` must be valid indices of the collection. - /// - parameter subrange: The range in the data to replace. If `subrange.lowerBound == data.count && subrange.count == 0` then this operation is an append. - /// - parameter data: The replacement data. - @inlinable // This is @inlinable as trivially forwarding. - public mutating func replaceSubrange(_ subrange: Range, with data: Data) { - data.withUnsafeBytes { (buffer: UnsafeRawBufferPointer) in - _representation.replaceSubrange(subrange, with: buffer.baseAddress, count: buffer.count) - } - } - - /// Replace a region of bytes in the data with new bytes from a buffer. - /// - /// This will resize the data if required, to fit the entire contents of `buffer`. - /// - /// - precondition: The bounds of `subrange` must be valid indices of the collection. - /// - parameter subrange: The range in the data to replace. - /// - parameter buffer: The replacement bytes. - @inlinable // This is @inlinable as a generic, trivially forwarding function. - public mutating func replaceSubrange(_ subrange: Range, with buffer: UnsafeBufferPointer) { - guard !buffer.isEmpty else { return } - replaceSubrange(subrange, with: buffer.baseAddress!, count: buffer.count * MemoryLayout.stride) - } - - /// Replace a region of bytes in the data with new bytes from a collection. - /// - /// This will resize the data if required, to fit the entire contents of `newElements`. - /// - /// - precondition: The bounds of `subrange` must be valid indices of the collection. - /// - parameter subrange: The range in the data to replace. - /// - parameter newElements: The replacement bytes. - @inlinable // This is @inlinable as generic and reasonably small. - public mutating func replaceSubrange(_ subrange: Range, with newElements: ByteCollection) where ByteCollection.Iterator.Element == Data.Iterator.Element { - let totalCount = Int(newElements.count) - __withStackOrHeapBuffer(totalCount) { (memory, capacity, isOnStack) in - let buffer = UnsafeMutableBufferPointer(start: memory.assumingMemoryBound(to: UInt8.self), count: totalCount) - var (iterator, index) = newElements._copyContents(initializing: buffer) - while let byte = iterator.next() { - buffer[index] = byte - index = buffer.index(after: index) - } - replaceSubrange(subrange, with: memory, count: totalCount) - } - } - - @inlinable // This is @inlinable as trivially forwarding. - public mutating func replaceSubrange(_ subrange: Range, with bytes: UnsafeRawPointer, count cnt: Int) { - _representation.replaceSubrange(subrange, with: bytes, count: cnt) - } - - /// Return a new copy of the data in a specified range. - /// - /// - parameter range: The range to copy. - public func subdata(in range: Range) -> Data { - if isEmpty || range.upperBound - range.lowerBound == 0 { - return Data() - } - let slice = self[range] - - return slice.withUnsafeBytes { (buffer: UnsafeRawBufferPointer) -> Data in - return Data(bytes: buffer.baseAddress!, count: buffer.count) - } - } - - // MARK: - - // - - /// Returns a Base-64 encoded string. - /// - /// - parameter options: The options to use for the encoding. Default value is `[]`. - /// - returns: The Base-64 encoded string. - public func base64EncodedString(options: Data.Base64EncodingOptions = []) -> String { - let dataLength = self.count - if dataLength == 0 { return "" } - - let capacity = NSData.estimateBase64Size(length: dataLength) - let ptr = UnsafeMutableRawPointer.allocate(byteCount: capacity, alignment: 4) - defer { ptr.deallocate() } - let buffer = UnsafeMutableRawBufferPointer(start: ptr, count: capacity) - let length = self.withUnsafeBytes { inputBuffer in - NSData.base64EncodeBytes(inputBuffer, options: options, buffer: buffer) - } - - return String(decoding: UnsafeRawBufferPointer(start: ptr, count: length), as: Unicode.UTF8.self) - } - - /// Returns a Base-64 encoded `Data`. - /// - /// - parameter options: The options to use for the encoding. Default value is `[]`. - /// - returns: The Base-64 encoded data. - public func base64EncodedData(options: Data.Base64EncodingOptions = []) -> Data { - let dataLength = self.count - if dataLength == 0 { return Data() } - - let capacity = NSData.estimateBase64Size(length: dataLength) - let ptr = UnsafeMutableRawPointer.allocate(byteCount: capacity, alignment: 4) - let outputBuffer = UnsafeMutableRawBufferPointer(start: ptr, count: capacity) - - let length = self.withUnsafeBytes { inputBuffer in - NSData.base64EncodeBytes(inputBuffer, options: options, buffer: outputBuffer) - } - return Data(bytesNoCopy: ptr, count: length, deallocator: .custom({ (ptr, length) in - ptr.deallocate() - })) - } - - // MARK: - - // - - /// The hash value for the data. - @inline(never) // This is not inlinable as emission into clients could cause cross-module inconsistencies if they are not all recompiled together. - public func hash(into hasher: inout Hasher) { - _representation.hash(into: &hasher) - } - - public func advanced(by amount: Int) -> Data { - let length = count - amount - precondition(length > 0) - return withUnsafeBytes { (ptr: UnsafeRawBufferPointer) -> Data in - return Data(bytes: ptr.baseAddress!.advanced(by: amount), count: length) - } - } - - // MARK: - - - // MARK: - - // MARK: Index and Subscript - - /// Sets or returns the byte at the specified index. - @inlinable // This is @inlinable as trivially forwarding. - public subscript(index: Index) -> UInt8 { - get { - return _representation[index] - } - set(newValue) { - _representation[index] = newValue - } - } - - @inlinable // This is @inlinable as trivially forwarding. - public subscript(bounds: Range) -> Data { - get { - return _representation[bounds] - } - set { - replaceSubrange(bounds, with: newValue) - } - } - - @inlinable // This is @inlinable as a generic, trivially forwarding function. - public subscript(_ rangeExpression: R) -> Data - where R.Bound: FixedWidthInteger { - get { - let lower = R.Bound(startIndex) - let upper = R.Bound(endIndex) - let range = rangeExpression.relative(to: lower.. = start.. = start.. Index { - return i - 1 - } - - @inlinable // This is @inlinable as trivially computable. - public func index(after i: Index) -> Index { - return i + 1 - } - - @inlinable // This is @inlinable as trivially computable. - public var indices: Range { - get { - return startIndex..) -> (Iterator, UnsafeMutableBufferPointer.Index) { - guard !isEmpty else { return (makeIterator(), buffer.startIndex) } - let cnt = Swift.min(count, buffer.count) - if cnt > 0 { - withUnsafeBytes { (bytes: UnsafeRawBufferPointer) in - _ = memcpy(UnsafeMutableRawPointer(buffer.baseAddress!), bytes.baseAddress!, cnt) - } - } - - return (Iterator(self, at: startIndex + cnt), buffer.index(buffer.startIndex, offsetBy: cnt)) - } - - /// An iterator over the contents of the data. - /// - /// The iterator will increment byte-by-byte. - @inlinable // This is @inlinable as trivially computable. - public func makeIterator() -> Data.Iterator { - return Iterator(self, at: startIndex) - } - - public struct Iterator : IteratorProtocol { - @usableFromInline - internal typealias Buffer = ( - UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, - UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, - UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, - UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8) - - @usableFromInline internal let _data: Data - @usableFromInline internal var _buffer: Buffer - @usableFromInline internal var _idx: Data.Index - @usableFromInline internal let _endIdx: Data.Index - - @usableFromInline // This is @usableFromInline as a non-trivial initializer. - internal init(_ data: Data, at loc: Data.Index) { - // The let vars prevent this from being marked as @inlinable - _data = data - _buffer = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) - _idx = loc - _endIdx = data.endIndex - - let bufferSize = MemoryLayout.size - Swift.withUnsafeMutableBytes(of: &_buffer) { - let ptr = $0.bindMemory(to: UInt8.self) - let bufferIdx = (loc - data.startIndex) % bufferSize - data.copyBytes(to: ptr, from: (loc - bufferIdx)..<(data.endIndex - (loc - bufferIdx) > bufferSize ? (loc - bufferIdx) + bufferSize : data.endIndex)) - } - } - - public mutating func next() -> UInt8? { - let idx = _idx - let bufferSize = MemoryLayout.size - - guard idx < _endIdx else { return nil } - _idx += 1 - - let bufferIdx = (idx - _data.startIndex) % bufferSize - - - if bufferIdx == 0 { - var buffer = _buffer - Swift.withUnsafeMutableBytes(of: &buffer) { - let ptr = $0.bindMemory(to: UInt8.self) - // populate the buffer - _data.copyBytes(to: ptr, from: idx..<(_endIdx - idx > bufferSize ? idx + bufferSize : _endIdx)) - } - _buffer = buffer - } - - return Swift.withUnsafeMutableBytes(of: &_buffer) { - let ptr = $0.bindMemory(to: UInt8.self) - return ptr[bufferIdx] - } - } - } - - // MARK: - - // - - @available(*, unavailable, renamed: "count") - public var length: Int { - get { fatalError() } - set { fatalError() } - } - - @available(*, unavailable, message: "use withUnsafeBytes instead") - public var bytes: UnsafeRawPointer { fatalError() } - - @available(*, unavailable, message: "use withUnsafeMutableBytes instead") - public var mutableBytes: UnsafeMutableRawPointer { fatalError() } - - /// Returns `true` if the two `Data` arguments are equal. - @inlinable // This is @inlinable as emission into clients is safe -- the concept of equality on Data will not change. - public static func ==(d1 : Data, d2 : Data) -> Bool { - let length1 = d1.count - if length1 != d2.count { - return false - } - if length1 > 0 { - return d1.withUnsafeBytes { (b1: UnsafeRawBufferPointer) in - return d2.withUnsafeBytes { (b2: UnsafeRawBufferPointer) in - return memcmp(b1.baseAddress!, b2.baseAddress!, b2.count) == 0 - } - } - } - return true - } -} - - -extension Data : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - /// A human-readable description for the data. - public var description: String { - return "\(self.count) bytes" - } - - /// A human-readable debug description for the data. - public var debugDescription: String { - return self.description - } - - public var customMirror: Mirror { - let nBytes = self.count - var children: [(label: String?, value: Any)] = [] - children.append((label: "count", value: nBytes)) - - self.withUnsafeBytes { (bytes : UnsafeRawBufferPointer) in - children.append((label: "pointer", value: bytes.baseAddress!)) - } - - // Minimal size data is output as an array - if nBytes < 64 { - children.append((label: "bytes", value: Array(self[startIndex..(_ buffer: UnsafeMutablePointerVoid, length: Int) { } @@ -2832,29 +18,41 @@ extension Data { public func getBytes(_ buffer: UnsafeMutablePointerVoid, range: NSRange) { } } -/// Provides bridging functionality for struct Data to class NSData and vice-versa. +extension Data { + // Temporary until SwiftFoundation supports this + public init(contentsOf url: URL, options: ReadingOptions = []) throws { + self = try .init(contentsOf: url.path, options: options) + } + + public func write(to url: URL, options: WritingOptions = []) throws { + try write(to: url.path, options: options) + } +} -extension Data : _ObjectiveCBridgeable { +// TODO: Allow bridging via protocol +extension Data /*: _ObjectiveCBridgeable */ { @_semantics("convertToObjectiveC") public func _bridgeToObjectiveC() -> NSData { - return _representation.bridgedReference() + return self.withUnsafeBytes { + NSData(bytes: $0.baseAddress, length: $0.count) + } } public static func _forceBridgeFromObjectiveC(_ input: NSData, result: inout Data?) { // We must copy the input because it might be mutable; just like storing a value type in ObjC - result = Data(referencing: input) + result = Data(input) } public static func _conditionallyBridgeFromObjectiveC(_ input: NSData, result: inout Data?) -> Bool { // We must copy the input because it might be mutable; just like storing a value type in ObjC - result = Data(referencing: input) + result = Data(input) return true } // @_effects(readonly) public static func _unconditionallyBridgeFromObjectiveC(_ source: NSData?) -> Data { guard let src = source else { return Data() } - return Data(referencing: src) + return Data(src) } } @@ -2865,35 +63,3 @@ extension NSData : _HasCustomAnyHashableRepresentation { return AnyHashable(Data._unconditionallyBridgeFromObjectiveC(self)) } } - -extension Data : Codable { - public init(from decoder: Decoder) throws { - var container = try decoder.unkeyedContainer() - - // It's more efficient to pre-allocate the buffer if we can. - if let count = container.count { - self.init(count: count) - - // Loop only until count, not while !container.isAtEnd, in case count is underestimated (this is misbehavior) and we haven't allocated enough space. - // We don't want to write past the end of what we allocated. - for i in 0 ..< count { - let byte = try container.decode(UInt8.self) - self[i] = byte - } - } else { - self.init() - } - - while !container.isAtEnd { - var byte = try container.decode(UInt8.self) - self.append(&byte, count: 1) - } - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.unkeyedContainer() - try withUnsafeBytes { (buffer: UnsafeRawBufferPointer) in - try container.encode(contentsOf: buffer) - } - } -} diff --git a/Sources/Foundation/DataProtocol.swift b/Sources/Foundation/DataProtocol.swift deleted file mode 100644 index fc5cd130be..0000000000 --- a/Sources/Foundation/DataProtocol.swift +++ /dev/null @@ -1,295 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2018 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -//===--- DataProtocol -----------------------------------------------------===// - -public protocol DataProtocol : RandomAccessCollection where Element == UInt8, SubSequence : DataProtocol { - // FIXME: Remove in favor of opaque type on `regions`. - associatedtype Regions: BidirectionalCollection where Regions.Element : DataProtocol & ContiguousBytes, Regions.Element.SubSequence : ContiguousBytes - - /// A `BidirectionalCollection` of `DataProtocol` elements which compose a - /// discontiguous buffer of memory. Each region is a contiguous buffer of - /// bytes. - /// - /// The sum of the lengths of the associated regions must equal `self.count` - /// (such that iterating `regions` and iterating `self` produces the same - /// sequence of indices in the same number of index advancements). - var regions: Regions { get } - - /// Returns the first found range of the given data buffer. - /// - /// A default implementation is given in terms of `self.regions`. - func firstRange(of: D, in: R) -> Range? where R.Bound == Index - - /// Returns the last found range of the given data buffer. - /// - /// A default implementation is given in terms of `self.regions`. - func lastRange(of: D, in: R) -> Range? where R.Bound == Index - - /// Copies `count` bytes from the start of the buffer to the destination - /// buffer. - /// - /// A default implementation is given in terms of `copyBytes(to:from:)`. - @discardableResult - func copyBytes(to: UnsafeMutableRawBufferPointer, count: Int) -> Int - - /// Copies `count` bytes from the start of the buffer to the destination - /// buffer. - /// - /// A default implementation is given in terms of `copyBytes(to:from:)`. - @discardableResult - func copyBytes(to: UnsafeMutableBufferPointer, count: Int) -> Int - - /// Copies the bytes from the given range to the destination buffer. - /// - /// A default implementation is given in terms of `self.regions`. - @discardableResult - func copyBytes(to: UnsafeMutableRawBufferPointer, from: R) -> Int where R.Bound == Index - - /// Copies the bytes from the given range to the destination buffer. - /// - /// A default implementation is given in terms of `self.regions`. - @discardableResult - func copyBytes(to: UnsafeMutableBufferPointer, from: R) -> Int where R.Bound == Index -} - -//===--- MutableDataProtocol ----------------------------------------------===// - -public protocol MutableDataProtocol : DataProtocol, MutableCollection, RangeReplaceableCollection { - /// Replaces the contents of the buffer at the given range with zeroes. - /// - /// A default implementation is given in terms of - /// `replaceSubrange(_:with:)`. - mutating func resetBytes(in range: R) where R.Bound == Index -} - -//===--- DataProtocol Extensions ------------------------------------------===// - -extension DataProtocol { - public func firstRange(of data: D) -> Range? { - return self.firstRange(of: data, in: self.startIndex ..< self.endIndex) - } - - public func lastRange(of data: D) -> Range? { - return self.lastRange(of: data, in: self.startIndex ..< self.endIndex) - } - - @discardableResult - public func copyBytes(to ptr: UnsafeMutableRawBufferPointer) -> Int { - return copyBytes(to: ptr, from: self.startIndex ..< self.endIndex) - } - - @discardableResult - public func copyBytes(to ptr: UnsafeMutableBufferPointer) -> Int { - return copyBytes(to: ptr, from: self.startIndex ..< self.endIndex) - } - - @discardableResult - public func copyBytes(to ptr: UnsafeMutableRawBufferPointer, count: Int) -> Int { - return copyBytes(to: ptr, from: self.startIndex ..< self.index(self.startIndex, offsetBy: count)) - } - - @discardableResult - public func copyBytes(to ptr: UnsafeMutableBufferPointer, count: Int) -> Int { - return copyBytes(to: ptr, from: self.startIndex ..< self.index(self.startIndex, offsetBy: count)) - } - - @discardableResult - public func copyBytes(to ptr: UnsafeMutableRawBufferPointer, from range: R) -> Int where R.Bound == Index { - precondition(ptr.baseAddress != nil) - - let concreteRange = range.relative(to: self) - let slice = self[concreteRange] - - // The type isn't contiguous, so we need to copy one region at a time. - var offset = 0 - let rangeCount = distance(from: concreteRange.lowerBound, to: concreteRange.upperBound) - var amountToCopy = Swift.min(ptr.count, rangeCount) - for region in slice.regions { - guard amountToCopy > 0 else { - break - } - - region.withUnsafeBytes { buffer in - let offsetPtr = UnsafeMutableRawBufferPointer(rebasing: ptr[offset...]) - let buf = UnsafeRawBufferPointer(start: buffer.baseAddress, count: Swift.min(buffer.count, amountToCopy)) - offsetPtr.copyMemory(from: buf) - offset += buf.count - amountToCopy -= buf.count - } - } - - return offset - } - - @discardableResult - public func copyBytes(to ptr: UnsafeMutableBufferPointer, from range: R) -> Int where R.Bound == Index { - return self.copyBytes(to: UnsafeMutableRawBufferPointer(start: ptr.baseAddress, count: ptr.count * MemoryLayout.stride), from: range) - } - - private func matches(_ data: D, from index: Index) -> Bool { - var haystackIndex = index - var needleIndex = data.startIndex - - while true { - guard self[haystackIndex] == data[needleIndex] else { return false } - - haystackIndex = self.index(after: haystackIndex) - needleIndex = data.index(after: needleIndex) - if needleIndex == data.endIndex { - // i.e. needle is found. - return true - } else if haystackIndex == endIndex { - return false - } - } - } - - public func firstRange(of data: D, in range: R) -> Range? where R.Bound == Index { - guard !data.isEmpty else { - return nil - } - let r = range.relative(to: self) - let length = data.count - - if length == 0 || length > distance(from: r.lowerBound, to: r.upperBound) { - return nil - } - - var position = r.lowerBound - while position < r.upperBound && distance(from: position, to: r.upperBound) >= length { - if matches(data, from: position) { - return position..(of data: D, in range: R) -> Range? where R.Bound == Index { - guard !data.isEmpty else { - return nil - } - let r = range.relative(to: self) - let length = data.count - - if length == 0 || length > distance(from: r.lowerBound, to: r.upperBound) { - return nil - } - - var position = index(r.upperBound, offsetBy: -length) - while position >= r.lowerBound { - if matches(data, from: position) { - return position..(to ptr: UnsafeMutableBufferPointer, from range: R) where R.Bound == Index { - precondition(ptr.baseAddress != nil) - - let concreteRange = range.relative(to: self) - withUnsafeBytes { fullBuffer in - let adv = distance(from: startIndex, to: concreteRange.lowerBound) - let delta = distance(from: concreteRange.lowerBound, to: concreteRange.upperBound) - memcpy(ptr.baseAddress!, fullBuffer.baseAddress!.advanced(by: adv), delta) - } - } -} - -//===--- MutableDataProtocol Extensions -----------------------------------===// - -extension MutableDataProtocol { - public mutating func resetBytes(in range: R) where R.Bound == Index { - let r = range.relative(to: self) - let count = distance(from: r.lowerBound, to: r.upperBound) - replaceSubrange(r, with: repeatElement(UInt8(0), count: count)) - } -} - -//===--- DataProtocol Conditional Conformances ----------------------------===// - -extension Slice : DataProtocol where Base : DataProtocol { - public typealias Regions = [Base.Regions.Element.SubSequence] - - public var regions: [Base.Regions.Element.SubSequence] { - let sliceLowerBound = startIndex - let sliceUpperBound = endIndex - var regionUpperBound = base.startIndex - - return base.regions.compactMap { (region) -> Base.Regions.Element.SubSequence? in - let regionLowerBound = regionUpperBound - regionUpperBound = base.index(regionUpperBound, offsetBy: region.count) - - /* - [------ Region ------] - [--- Slice ---] => - - OR - - [------ Region ------] - <= [--- Slice ---] - */ - if sliceLowerBound >= regionLowerBound && sliceUpperBound <= regionUpperBound { - let regionRelativeSliceLowerBound = region.index(region.startIndex, offsetBy: base.distance(from: regionLowerBound, to: sliceLowerBound)) - let regionRelativeSliceUpperBound = region.index(region.startIndex, offsetBy: base.distance(from: regionLowerBound, to: sliceUpperBound)) - return region[regionRelativeSliceLowerBound.. - [------ Slice ------] - - OR - - <= [--- Region ---] - [------ Slice ------] - */ - if regionLowerBound >= sliceLowerBound && regionUpperBound <= sliceUpperBound { - return region[region.startIndex..= regionLowerBound && sliceLowerBound <= regionUpperBound { - let regionRelativeSliceLowerBound = region.index(region.startIndex, offsetBy: base.distance(from: regionLowerBound, to: sliceLowerBound)) - return region[regionRelativeSliceLowerBound..= sliceLowerBound && regionLowerBound <= sliceUpperBound { - let regionRelativeSliceUpperBound = region.index(region.startIndex, offsetBy: base.distance(from: regionLowerBound, to: sliceUpperBound)) - return region[region.startIndex.. internal let index: DispatchData.Index diff --git a/Sources/Foundation/FileManager.swift b/Sources/Foundation/FileManager.swift index 1aa3038a01..20f0893516 100644 --- a/Sources/Foundation/FileManager.swift +++ b/Sources/Foundation/FileManager.swift @@ -961,7 +961,7 @@ open class FileManager : NSObject { isDirectory.boolValue { for language in _preferredLanguages { let stringsFile = dotLocalized.appendingPathComponent(language).appendingPathExtension("strings") - if let data = try? Data(contentsOf: stringsFile), + if let data = try? Data(contentsOf: stringsFile.path), let plist = (try? PropertyListSerialization.propertyList(from: data, format: nil)) as? NSDictionary { let localizedName = (plist[nameWithoutExtension] as? NSString)?._swiftObject @@ -1023,13 +1023,13 @@ open class FileManager : NSObject { /* These methods are provided here for compatibility. The corresponding methods on NSData which return NSErrors should be regarded as the primary method of creating a file from an NSData or retrieving the contents of a file as an NSData. */ open func contents(atPath path: String) -> Data? { - return try? Data(contentsOf: URL(fileURLWithPath: path)) + return try? Data(contentsOf: path) } @discardableResult open func createFile(atPath path: String, contents data: Data?, attributes attr: [FileAttributeKey : Any]? = nil) -> Bool { do { - try (data ?? Data()).write(to: URL(fileURLWithPath: path), options: .atomic) + try (data ?? Data()).write(to: path, options: .atomic) if let attr = attr { try self.setAttributes(attr, ofItemAtPath: path) } diff --git a/Sources/Foundation/NSArray.swift b/Sources/Foundation/NSArray.swift index 096c090b51..a6db8e67be 100644 --- a/Sources/Foundation/NSArray.swift +++ b/Sources/Foundation/NSArray.swift @@ -458,7 +458,7 @@ open class NSArray : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCo open func write(to url: URL, atomically: Bool) -> Bool { do { let pListData = try PropertyListSerialization.data(fromPropertyList: self, format: .xml, options: 0) - try pListData.write(to: url, options: atomically ? .atomic : []) + try pListData.write(to: url.path, options: atomically ? .atomic : []) return true } catch { return false diff --git a/Sources/Foundation/NSCharacterSet.swift b/Sources/Foundation/NSCharacterSet.swift index 0148771bbe..0c4e9934b1 100644 --- a/Sources/Foundation/NSCharacterSet.swift +++ b/Sources/Foundation/NSCharacterSet.swift @@ -187,7 +187,7 @@ open class NSCharacterSet : NSObject, NSCopying, NSMutableCopying, NSSecureCodin #if !os(WASI) public convenience init?(contentsOfFile fName: String) { do { - let data = try Data(contentsOf: URL(fileURLWithPath: fName)) + let data = try Data(contentsOf: fName) self.init(bitmapRepresentation: data) } catch { return nil diff --git a/Sources/Foundation/NSData.swift b/Sources/Foundation/NSData.swift index ed9e7f0529..603390533a 100644 --- a/Sources/Foundation/NSData.swift +++ b/Sources/Foundation/NSData.swift @@ -579,7 +579,7 @@ open class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding { return Data() } if range.location == 0 && range.length == self.length { - return Data(referencing: self) + return Data(self) } let p = self.bytes.advanced(by: range.location).bindMemory(to: UInt8.self, capacity: range.length) return Data(bytes: p, count: range.length) @@ -944,7 +944,7 @@ open class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding { // MARK: - extension NSData : _SwiftBridgeable { typealias SwiftType = Data - internal var _swiftObject: SwiftType { return Data(referencing: self) } + internal var _swiftObject: SwiftType { return Data(self) } } extension Data : _NSBridgeable { @@ -958,7 +958,7 @@ extension CFData : _NSBridgeable, _SwiftBridgeable { typealias NSType = NSData typealias SwiftType = Data internal var _nsObject: NSType { return unsafeBitCast(self, to: NSType.self) } - internal var _swiftObject: SwiftType { return Data(referencing: self._nsObject) } + internal var _swiftObject: SwiftType { return Data(self._nsObject) } } // MARK: - diff --git a/Sources/Foundation/NSDictionary.swift b/Sources/Foundation/NSDictionary.swift index c1d118088a..f30426e660 100644 --- a/Sources/Foundation/NSDictionary.swift +++ b/Sources/Foundation/NSDictionary.swift @@ -82,7 +82,7 @@ open class NSDictionary : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, @available(*, deprecated) public convenience init?(contentsOf url: URL) { do { - guard let plistDoc = try? Data(contentsOf: url) else { return nil } + guard let plistDoc = try? Data(contentsOf: url.path) else { return nil } let plistDict = try PropertyListSerialization.propertyList(from: plistDoc, options: [], format: nil) as? Dictionary guard let plistDictionary = plistDict else { return nil } self.init(dictionary: plistDictionary) @@ -509,7 +509,7 @@ open class NSDictionary : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, open func write(to url: URL, atomically: Bool) -> Bool { do { let pListData = try PropertyListSerialization.data(fromPropertyList: self, format: .xml, options: 0) - try pListData.write(to: url, options: atomically ? .atomic : []) + try pListData.write(to: url.path, options: atomically ? .atomic : []) return true } catch { return false diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index 9ea349e113..1ce1deeda0 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -976,11 +976,19 @@ extension URLError { public static var backgroundSessionWasDisconnected: URLError.Code { return .backgroundSessionWasDisconnected } } +extension POSIXErrorCode : _ErrorCodeProtocol { + public typealias _ErrorType = POSIXError +} + /// Describes an error in the POSIX error domain. extension POSIXError : _BridgedStoredNSError { + public var _nsError: NSError { + NSError(domain: NSPOSIXErrorDomain, code: Int(code.rawValue)) + } + public init(_nsError error: NSError) { precondition(error.domain == NSPOSIXErrorDomain) - self.code = error.code + self = POSIXError(POSIXErrorCode(rawValue: Int32(error.code))!) } public static var _nsErrorDomain: String { return NSPOSIXErrorDomain } diff --git a/Sources/Foundation/NSString.swift b/Sources/Foundation/NSString.swift index d81b20b571..867fc83340 100644 --- a/Sources/Foundation/NSString.swift +++ b/Sources/Foundation/NSString.swift @@ -91,27 +91,15 @@ extension NSString { } extension NSString { - public struct CompareOptions : OptionSet { - public let rawValue : UInt - public init(rawValue: UInt) { self.rawValue = rawValue } - - public static let caseInsensitive = CompareOptions(rawValue: 1) - public static let literal = CompareOptions(rawValue: 2) - public static let backwards = CompareOptions(rawValue: 4) - public static let anchored = CompareOptions(rawValue: 8) - public static let numeric = CompareOptions(rawValue: 64) - public static let diacriticInsensitive = CompareOptions(rawValue: 128) - public static let widthInsensitive = CompareOptions(rawValue: 256) - public static let forcedOrdering = CompareOptions(rawValue: 512) - public static let regularExpression = CompareOptions(rawValue: 1024) - + public typealias CompareOptions = String.CompareOptions +} + +extension NSString.CompareOptions { internal func _cfValue(_ fixLiteral: Bool = false) -> CFStringCompareFlags { return contains(.literal) || !fixLiteral ? CFStringCompareFlags(rawValue: rawValue) : CFStringCompareFlags(rawValue: rawValue).union(.compareNonliteral) } - } } - public struct StringTransform: Equatable, Hashable, RawRepresentable { typealias RawType = String @@ -1275,7 +1263,8 @@ extension NSString { internal func _writeTo(_ url: URL, _ useAuxiliaryFile: Bool, _ enc: UInt) throws { var data = Data() try _getExternalRepresentation(&data, url, enc) - try data.write(to: url, options: useAuxiliaryFile ? .atomic : []) + // TODO: Use URL version when that is ready + try data.write(to: url.path, options: useAuxiliaryFile ? .atomic : []) } open func write(to url: URL, atomically useAuxiliaryFile: Bool, encoding enc: UInt) throws { diff --git a/Sources/Foundation/Pointers+DataProtocol.swift b/Sources/Foundation/Pointers+DataProtocol.swift deleted file mode 100644 index 059fe87e19..0000000000 --- a/Sources/Foundation/Pointers+DataProtocol.swift +++ /dev/null @@ -1,24 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2018 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - - -extension UnsafeRawBufferPointer : DataProtocol { - public var regions: CollectionOfOne { - return CollectionOfOne(self) - } -} - -extension UnsafeBufferPointer : DataProtocol where Element == UInt8 { - public var regions: CollectionOfOne> { - return CollectionOfOne(self) - } -} diff --git a/Sources/Foundation/ProcessInfo.swift b/Sources/Foundation/ProcessInfo.swift index dcbf6e1eca..891799c658 100644 --- a/Sources/Foundation/ProcessInfo.swift +++ b/Sources/Foundation/ProcessInfo.swift @@ -313,7 +313,8 @@ open class ProcessInfo: NSObject { private static let cpuSetPath = "/sys/fs/cgroup/cpuset/cpuset.cpus" private static func firstLineOfFile(path: String) throws -> Substring { - let data = try Data(contentsOf: URL(fileURLWithPath: path)) + // TODO: Replace with URL version once that is available in FoundationEssentials + let data = try Data(contentsOf: path) if let string = String(data: data, encoding: .utf8), let line = string.split(separator: "\n").first { return line } else { diff --git a/Sources/Foundation/StringEncodings.swift b/Sources/Foundation/StringEncodings.swift index 6f9d882ac3..534f3e696b 100644 --- a/Sources/Foundation/StringEncodings.swift +++ b/Sources/Foundation/StringEncodings.swift @@ -30,7 +30,8 @@ extension String.Encoding { guard let value = encoding?.rawValue else { return nil } - rawValue = value + + self.init(rawValue: value) } } From f1c0d8a4cc4ae3a74d2182d5838f4211fe40ed77 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Fri, 2 Feb 2024 17:13:59 -0800 Subject: [PATCH 009/198] Remove a lot of old build stuff to focus on package --- .../project.pbxproj | 956 ---- .../xcschemes/xdgTestHelper.xcscheme | 114 - DarwinCompatibilityTests/DarwinShims.swift | 75 - DarwinCompatibilityTests/Info.plist | 22 - DarwinCompatibilityTests/TestsToSkip.txt | 82 - DarwinCompatibilityTests/xcode-build.sh | 13 - Foundation.xcodeproj/project.pbxproj | 4493 ---------------- .../xcschemes/CFURLSessionInterface.xcscheme | 76 - .../xcschemes/CFXMLInterface.xcscheme | 67 - .../xcschemes/CoreFoundation.xcscheme | 76 - .../xcschemes/GenerateTestFixtures.xcscheme | 78 - .../xcschemes/SwiftFoundation.xcscheme | 99 - .../SwiftFoundationNetworking.xcscheme | 76 - .../xcschemes/SwiftFoundationXML.xcscheme | 67 - .../xcschemes/TestFoundation.xcscheme | 159 - .../xcshareddata/xcschemes/plutil.xcscheme | 101 - .../xcschemes/xdgTestHelper.xcscheme | 78 - .../contents.xcworkspacedata | 10 - .../xcshareddata/Foundation.xcscmblueprint | 30 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - bin/test | 5 - .../usr/local/include/sys/random.h | 44 - .../usr/local/include/unicode/alphaindex.h | 762 --- .../usr/local/include/unicode/appendable.h | 236 - .../usr/local/include/unicode/basictz.h | 218 - .../usr/local/include/unicode/brkiter.h | 681 --- .../usr/local/include/unicode/bytestream.h | 272 - .../usr/local/include/unicode/bytestrie.h | 522 -- .../local/include/unicode/bytestriebuilder.h | 184 - .../usr/local/include/unicode/calendar.h | 2543 --------- .../usr/local/include/unicode/caniter.h | 212 - .../usr/local/include/unicode/casemap.h | 494 -- .../usr/local/include/unicode/char16ptr.h | 310 -- .../usr/local/include/unicode/chariter.h | 730 --- .../usr/local/include/unicode/choicfmt.h | 598 --- .../usr/local/include/unicode/coleitr.h | 409 -- .../usr/local/include/unicode/coll.h | 1276 ----- .../include/unicode/compactdecimalformat.h | 193 - .../usr/local/include/unicode/curramt.h | 134 - .../usr/local/include/unicode/currpinf.h | 272 - .../usr/local/include/unicode/currunit.h | 145 - .../usr/local/include/unicode/datefmt.h | 959 ---- .../usr/local/include/unicode/dbbi.h | 44 - .../usr/local/include/unicode/dcfmtsym.h | 601 --- .../usr/local/include/unicode/decimfmt.h | 2244 -------- .../usr/local/include/unicode/docmain.h | 232 - .../usr/local/include/unicode/dtfmtsym.h | 1033 ---- .../usr/local/include/unicode/dtintrv.h | 162 - .../usr/local/include/unicode/dtitvfmt.h | 1207 ----- .../usr/local/include/unicode/dtitvinf.h | 521 -- .../usr/local/include/unicode/dtptngen.h | 593 -- .../usr/local/include/unicode/dtrule.h | 254 - .../usr/local/include/unicode/edits.h | 528 -- .../usr/local/include/unicode/enumset.h | 69 - .../usr/local/include/unicode/errorcode.h | 141 - .../usr/local/include/unicode/fieldpos.h | 296 - .../usr/local/include/unicode/filteredbrk.h | 147 - .../usr/local/include/unicode/fmtable.h | 757 --- .../usr/local/include/unicode/format.h | 309 -- .../local/include/unicode/formattedvalue.h | 319 -- .../usr/local/include/unicode/fpositer.h | 123 - .../usr/local/include/unicode/gender.h | 120 - .../usr/local/include/unicode/gregocal.h | 781 --- .../usr/local/include/unicode/icudataver.h | 43 - .../usr/local/include/unicode/icuplug.h | 388 -- .../usr/local/include/unicode/idna.h | 327 -- .../usr/local/include/unicode/listformatter.h | 303 -- .../usr/local/include/unicode/localebuilder.h | 294 - .../usr/local/include/unicode/localpointer.h | 607 --- .../usr/local/include/unicode/locdspnm.h | 209 - .../usr/local/include/unicode/locid.h | 1183 ---- .../usr/local/include/unicode/measfmt.h | 482 -- .../usr/local/include/unicode/measunit.h | 3169 ----------- .../usr/local/include/unicode/measure.h | 163 - .../local/include/unicode/messagepattern.h | 947 ---- .../include/unicode/module.private.modulemap | 90 - .../usr/local/include/unicode/msgfmt.h | 1117 ---- .../usr/local/include/unicode/normalizer2.h | 776 --- .../usr/local/include/unicode/normlzr.h | 811 --- .../usr/local/include/unicode/nounit.h | 111 - .../local/include/unicode/numberformatter.h | 2667 --------- .../include/unicode/numberrangeformatter.h | 909 ---- .../usr/local/include/unicode/numfmt.h | 1271 ----- .../usr/local/include/unicode/numsys.h | 216 - .../usr/local/include/unicode/parseerr.h | 94 - .../usr/local/include/unicode/parsepos.h | 234 - .../usr/local/include/unicode/platform.h | 855 --- .../usr/local/include/unicode/plurfmt.h | 607 --- .../usr/local/include/unicode/plurrule.h | 539 -- .../usr/local/include/unicode/ptypes.h | 130 - .../usr/local/include/unicode/putil.h | 183 - .../usr/local/include/unicode/rbbi.h | 731 --- .../usr/local/include/unicode/rbnf.h | 1141 ---- .../usr/local/include/unicode/rbtz.h | 366 -- .../usr/local/include/unicode/regex.h | 1882 ------- .../usr/local/include/unicode/region.h | 226 - .../usr/local/include/unicode/reldatefmt.h | 748 --- .../usr/local/include/unicode/rep.h | 265 - .../usr/local/include/unicode/resbund.h | 495 -- .../usr/local/include/unicode/schriter.h | 192 - .../unicode/scientificnumberformatter.h | 219 - .../usr/local/include/unicode/search.h | 579 -- .../usr/local/include/unicode/selfmt.h | 371 -- .../local/include/unicode/simpleformatter.h | 338 -- .../usr/local/include/unicode/simpletz.h | 934 ---- .../usr/local/include/unicode/smpdtfmt.h | 1680 ------ .../usr/local/include/unicode/sortkey.h | 342 -- .../usr/local/include/unicode/std_string.h | 37 - .../usr/local/include/unicode/strenum.h | 280 - .../usr/local/include/unicode/stringoptions.h | 190 - .../usr/local/include/unicode/stringpiece.h | 226 - .../local/include/unicode/stringtriebuilder.h | 423 -- .../usr/local/include/unicode/stsearch.h | 508 -- .../usr/local/include/unicode/symtable.h | 116 - .../usr/local/include/unicode/tblcoll.h | 879 --- .../usr/local/include/unicode/timezone.h | 978 ---- .../usr/local/include/unicode/tmunit.h | 139 - .../usr/local/include/unicode/tmutamt.h | 172 - .../usr/local/include/unicode/tmutfmt.h | 250 - .../usr/local/include/unicode/translit.h | 1593 ------ .../usr/local/include/unicode/tzfmt.h | 1099 ---- .../usr/local/include/unicode/tznames.h | 416 -- .../usr/local/include/unicode/tzrule.h | 832 --- .../usr/local/include/unicode/tztrans.h | 199 - .../usr/local/include/unicode/ualoc.h | 305 -- .../local/include/unicode/uameasureformat.h | 684 --- .../local/include/unicode/uatimeunitformat.h | 377 -- .../usr/local/include/unicode/ubidi.h | 2360 -------- .../local/include/unicode/ubiditransform.h | 323 -- .../usr/local/include/unicode/ubrk.h | 661 --- .../usr/local/include/unicode/ucal.h | 1637 ------ .../usr/local/include/unicode/ucasemap.h | 385 -- .../usr/local/include/unicode/ucat.h | 160 - .../usr/local/include/unicode/uchar.h | 4044 -------------- .../usr/local/include/unicode/ucharstrie.h | 580 -- .../local/include/unicode/ucharstriebuilder.h | 189 - .../usr/local/include/unicode/uchriter.h | 390 -- .../usr/local/include/unicode/uclean.h | 262 - .../usr/local/include/unicode/ucnv.h | 2042 ------- .../usr/local/include/unicode/ucnv_cb.h | 164 - .../usr/local/include/unicode/ucnv_err.h | 465 -- .../usr/local/include/unicode/ucnvsel.h | 189 - .../usr/local/include/unicode/ucol.h | 1498 ------ .../usr/local/include/unicode/ucoleitr.h | 325 -- .../usr/local/include/unicode/uconfig.h | 456 -- .../usr/local/include/unicode/ucpmap.h | 162 - .../usr/local/include/unicode/ucptrie.h | 646 --- .../usr/local/include/unicode/ucsdet.h | 422 -- .../usr/local/include/unicode/ucurr.h | 445 -- .../usr/local/include/unicode/udat.h | 1691 ------ .../usr/local/include/unicode/udata.h | 437 -- .../include/unicode/udateintervalformat.h | 366 -- .../usr/local/include/unicode/udatintv.h | 146 - .../usr/local/include/unicode/udatpg.h | 698 --- .../local/include/unicode/udisplaycontext.h | 204 - .../usr/local/include/unicode/uenum.h | 208 - .../usr/local/include/unicode/ufieldpositer.h | 121 - .../usr/local/include/unicode/uformattable.h | 288 - .../local/include/unicode/uformattedvalue.h | 440 -- .../usr/local/include/unicode/ugender.h | 84 - .../usr/local/include/unicode/uidna.h | 772 --- .../usr/local/include/unicode/uiter.h | 709 --- .../usr/local/include/unicode/uldnames.h | 304 -- .../local/include/unicode/ulistformatter.h | 257 - .../usr/local/include/unicode/uloc.h | 1273 ----- .../usr/local/include/unicode/ulocdata.h | 296 - .../usr/local/include/unicode/umachine.h | 413 -- .../usr/local/include/unicode/umisc.h | 62 - .../usr/local/include/unicode/umsg.h | 625 --- .../local/include/unicode/umutablecptrie.h | 241 - .../usr/local/include/unicode/unifilt.h | 124 - .../usr/local/include/unicode/unifunct.h | 129 - .../usr/local/include/unicode/unimatch.h | 167 - .../usr/local/include/unicode/unirepl.h | 101 - .../usr/local/include/unicode/uniset.h | 1742 ------ .../usr/local/include/unicode/unistr.h | 4757 ----------------- .../usr/local/include/unicode/unorm.h | 472 -- .../usr/local/include/unicode/unorm2.h | 603 --- .../usr/local/include/unicode/unum.h | 1493 ------ .../local/include/unicode/unumberformatter.h | 713 --- .../usr/local/include/unicode/unumsys.h | 173 - .../usr/local/include/unicode/uobject.h | 324 -- .../usr/local/include/unicode/uplrule.h | 82 - .../usr/local/include/unicode/upluralrules.h | 224 - .../usr/local/include/unicode/urbtok.h | 270 - .../usr/local/include/unicode/uregex.h | 1614 ------ .../usr/local/include/unicode/uregion.h | 252 - .../usr/local/include/unicode/ureldatefmt.h | 517 -- .../usr/local/include/unicode/urename.h | 1910 ------- .../usr/local/include/unicode/urep.h | 157 - .../usr/local/include/unicode/ures.h | 908 ---- .../usr/local/include/unicode/uscript.h | 699 --- .../usr/local/include/unicode/usearch.h | 890 --- .../usr/local/include/unicode/uset.h | 1134 ---- .../usr/local/include/unicode/usetiter.h | 322 -- .../usr/local/include/unicode/ushape.h | 476 -- .../usr/local/include/unicode/uspoof.h | 1592 ------ .../usr/local/include/unicode/usprep.h | 271 - .../usr/local/include/unicode/ustdio.h | 1018 ---- .../usr/local/include/unicode/ustream.h | 65 - .../usr/local/include/unicode/ustring.h | 1721 ------ .../usr/local/include/unicode/ustringtrie.h | 97 - .../usr/local/include/unicode/utext.h | 1613 ------ .../usr/local/include/unicode/utf.h | 225 - .../usr/local/include/unicode/utf16.h | 733 --- .../usr/local/include/unicode/utf32.h | 25 - .../usr/local/include/unicode/utf8.h | 880 --- .../usr/local/include/unicode/utf_old.h | 1204 ----- .../usr/local/include/unicode/utmscale.h | 490 -- .../usr/local/include/unicode/utrace.h | 379 -- .../usr/local/include/unicode/utrans.h | 658 --- .../usr/local/include/unicode/utypes.h | 730 --- .../usr/local/include/unicode/uvernum.h | 198 - .../usr/local/include/unicode/uversion.h | 201 - .../usr/local/include/unicode/vtzone.h | 459 -- build-android | 141 - build.py | 601 --- cmake/modules/CMakeLists.txt | 7 - cmake/modules/FoundationConfig.cmake.in | 4 - cmake/modules/SwiftSupport.cmake | 97 - cmake/modules/XCTest.cmake | 100 - cmake/modules/XCTestAddTests.cmake | 90 - configure | 208 - lib/__init__.py | 19 - lib/config.py | 96 - lib/path.py | 47 - lib/phases.py | 449 -- lib/pkg_config.py | 65 - lib/product.py | 236 - lib/script.py | 274 - lib/target.py | 455 -- lib/workspace.py | 59 - xcode-build.sh | 53 - 234 files changed, 130558 deletions(-) delete mode 100644 DarwinCompatibilityTests.xcodeproj/project.pbxproj delete mode 100644 DarwinCompatibilityTests.xcodeproj/xcshareddata/xcschemes/xdgTestHelper.xcscheme delete mode 100644 DarwinCompatibilityTests/DarwinShims.swift delete mode 100644 DarwinCompatibilityTests/Info.plist delete mode 100644 DarwinCompatibilityTests/TestsToSkip.txt delete mode 100755 DarwinCompatibilityTests/xcode-build.sh delete mode 100644 Foundation.xcodeproj/project.pbxproj delete mode 100644 Foundation.xcodeproj/xcshareddata/xcschemes/CFURLSessionInterface.xcscheme delete mode 100644 Foundation.xcodeproj/xcshareddata/xcschemes/CFXMLInterface.xcscheme delete mode 100644 Foundation.xcodeproj/xcshareddata/xcschemes/CoreFoundation.xcscheme delete mode 100644 Foundation.xcodeproj/xcshareddata/xcschemes/GenerateTestFixtures.xcscheme delete mode 100644 Foundation.xcodeproj/xcshareddata/xcschemes/SwiftFoundation.xcscheme delete mode 100644 Foundation.xcodeproj/xcshareddata/xcschemes/SwiftFoundationNetworking.xcscheme delete mode 100644 Foundation.xcodeproj/xcshareddata/xcschemes/SwiftFoundationXML.xcscheme delete mode 100644 Foundation.xcodeproj/xcshareddata/xcschemes/TestFoundation.xcscheme delete mode 100644 Foundation.xcodeproj/xcshareddata/xcschemes/plutil.xcscheme delete mode 100644 Foundation.xcodeproj/xcshareddata/xcschemes/xdgTestHelper.xcscheme delete mode 100644 Foundation.xcworkspace/contents.xcworkspacedata delete mode 100644 Foundation.xcworkspace/xcshareddata/Foundation.xcscmblueprint delete mode 100644 Foundation.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 Foundation.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100755 bin/test delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/sys/random.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/alphaindex.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/appendable.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/basictz.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/brkiter.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/bytestream.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/bytestrie.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/bytestriebuilder.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/calendar.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/caniter.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/casemap.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/char16ptr.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/chariter.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/choicfmt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/coleitr.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/coll.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/compactdecimalformat.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/curramt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/currpinf.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/currunit.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/datefmt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dbbi.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dcfmtsym.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/decimfmt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/docmain.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtfmtsym.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtintrv.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtitvfmt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtitvinf.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtptngen.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtrule.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/edits.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/enumset.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/errorcode.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/fieldpos.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/filteredbrk.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/fmtable.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/format.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/formattedvalue.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/fpositer.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/gender.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/gregocal.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/icudataver.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/icuplug.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/idna.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/listformatter.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/localebuilder.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/localpointer.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/locdspnm.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/locid.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/measfmt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/measunit.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/measure.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/messagepattern.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/module.private.modulemap delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/msgfmt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/normalizer2.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/normlzr.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/nounit.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numberformatter.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numberrangeformatter.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numfmt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numsys.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/parseerr.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/parsepos.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/platform.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/plurfmt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/plurrule.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ptypes.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/putil.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rbbi.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rbnf.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rbtz.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/regex.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/region.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/reldatefmt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rep.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/resbund.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/schriter.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/scientificnumberformatter.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/search.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/selfmt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/simpleformatter.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/simpletz.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/smpdtfmt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/sortkey.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/std_string.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/strenum.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/stringoptions.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/stringpiece.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/stringtriebuilder.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/stsearch.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/symtable.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tblcoll.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/timezone.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tmunit.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tmutamt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tmutfmt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/translit.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tzfmt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tznames.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tzrule.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tztrans.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ualoc.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uameasureformat.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uatimeunitformat.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ubidi.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ubiditransform.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ubrk.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucal.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucasemap.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucat.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uchar.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucharstrie.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucharstriebuilder.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uchriter.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uclean.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnv.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnv_cb.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnv_err.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnvsel.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucol.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucoleitr.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uconfig.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucpmap.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucptrie.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucsdet.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucurr.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udat.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udata.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udateintervalformat.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udatintv.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udatpg.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udisplaycontext.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uenum.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ufieldpositer.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uformattable.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uformattedvalue.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ugender.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uidna.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uiter.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uldnames.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ulistformatter.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uloc.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ulocdata.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umachine.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umisc.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umsg.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umutablecptrie.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unifilt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unifunct.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unimatch.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unirepl.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uniset.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unistr.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unorm.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unorm2.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unum.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unumberformatter.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unumsys.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uobject.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uplrule.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/upluralrules.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/urbtok.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uregex.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uregion.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ureldatefmt.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/urename.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/urep.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ures.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uscript.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/usearch.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uset.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/usetiter.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ushape.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uspoof.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/usprep.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustdio.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustream.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustring.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustringtrie.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utext.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf16.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf32.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf8.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf_old.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utmscale.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utrace.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utrans.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utypes.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uvernum.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uversion.h delete mode 100644 bootstrap/x86_64-apple-darwin/usr/local/include/unicode/vtzone.h delete mode 100755 build-android delete mode 100755 build.py delete mode 100644 cmake/modules/CMakeLists.txt delete mode 100644 cmake/modules/FoundationConfig.cmake.in delete mode 100644 cmake/modules/SwiftSupport.cmake delete mode 100644 cmake/modules/XCTest.cmake delete mode 100644 cmake/modules/XCTestAddTests.cmake delete mode 100755 configure delete mode 100644 lib/__init__.py delete mode 100644 lib/config.py delete mode 100644 lib/path.py delete mode 100644 lib/phases.py delete mode 100644 lib/pkg_config.py delete mode 100644 lib/product.py delete mode 100644 lib/script.py delete mode 100644 lib/target.py delete mode 100644 lib/workspace.py delete mode 100755 xcode-build.sh diff --git a/DarwinCompatibilityTests.xcodeproj/project.pbxproj b/DarwinCompatibilityTests.xcodeproj/project.pbxproj deleted file mode 100644 index f0f45ed704..0000000000 --- a/DarwinCompatibilityTests.xcodeproj/project.pbxproj +++ /dev/null @@ -1,956 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 48; - objects = { - -/* Begin PBXBuildFile section */ - 659FB6E02405E65D00F5F63F /* TestBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 659FB6DF2405E65D00F5F63F /* TestBridging.swift */; }; - ABB1293726D47D9E00401E6C /* TestUnitInformationStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABB1293626D47D9E00401E6C /* TestUnitInformationStorage.swift */; }; - B91161AF242A385A00BD2907 /* TestDataURLProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B91161AE242A385A00BD2907 /* TestDataURLProtocol.swift */; }; - B917D32420B0DB9700728EE0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B917D32320B0DB9700728EE0 /* Foundation.framework */; }; - B94B07402401847C00B244E8 /* FTPServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B073C2401847C00B244E8 /* FTPServer.swift */; }; - B94B07412401847C00B244E8 /* HTTPServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B073D2401847C00B244E8 /* HTTPServer.swift */; }; - B94B07422401847C00B244E8 /* Imports.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B073E2401847C00B244E8 /* Imports.swift */; }; - B94B07432401847C00B244E8 /* FixtureValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B073F2401847C00B244E8 /* FixtureValues.swift */; }; - B94B07A62401849A00B244E8 /* TestUnitConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07442401849300B244E8 /* TestUnitConverter.swift */; }; - B94B07A72401849A00B244E8 /* TestRunLoop.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07452401849300B244E8 /* TestRunLoop.swift */; }; - B94B07A82401849A00B244E8 /* TestDateInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07462401849300B244E8 /* TestDateInterval.swift */; }; - B94B07A92401849A00B244E8 /* TestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07472401849300B244E8 /* TestBundle.swift */; }; - B94B07AA2401849A00B244E8 /* TestURLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07482401849300B244E8 /* TestURLRequest.swift */; }; - B94B07AB2401849A00B244E8 /* TestProcess.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07492401849300B244E8 /* TestProcess.swift */; }; - B94B07AC2401849A00B244E8 /* TestIndexSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B074A2401849300B244E8 /* TestIndexSet.swift */; }; - B94B07AD2401849A00B244E8 /* TestDateComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B074B2401849300B244E8 /* TestDateComponents.swift */; }; - B94B07AE2401849A00B244E8 /* TestNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B074C2401849300B244E8 /* TestNotification.swift */; }; - B94B07AF2401849A00B244E8 /* TestFileHandle.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B074D2401849300B244E8 /* TestFileHandle.swift */; }; - B94B07B02401849A00B244E8 /* TestTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B074E2401849400B244E8 /* TestTimer.swift */; }; - B94B07B12401849A00B244E8 /* TestURLCredentialStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B074F2401849400B244E8 /* TestURLCredentialStorage.swift */; }; - B94B07B22401849A00B244E8 /* TestPipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07502401849400B244E8 /* TestPipe.swift */; }; - B94B07B32401849A00B244E8 /* TestFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07512401849400B244E8 /* TestFileManager.swift */; }; - B94B07B42401849A00B244E8 /* TestNSGeometry.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07522401849400B244E8 /* TestNSGeometry.swift */; }; - B94B07B52401849A00B244E8 /* TestProcessInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07532401849400B244E8 /* TestProcessInfo.swift */; }; - B94B07B62401849A00B244E8 /* TestHTTPURLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07542401849400B244E8 /* TestHTTPURLResponse.swift */; }; - B94B07B72401849A00B244E8 /* TestNSCalendar.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07552401849400B244E8 /* TestNSCalendar.swift */; }; - B94B07B82401849A00B244E8 /* TestLengthFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07562401849400B244E8 /* TestLengthFormatter.swift */; }; - B94B07B92401849A00B244E8 /* TestURLCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07572401849400B244E8 /* TestURLCache.swift */; }; - B94B07BA2401849A00B244E8 /* TestNSValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07582401849400B244E8 /* TestNSValue.swift */; }; - B94B07BB2401849A00B244E8 /* TestCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07592401849400B244E8 /* TestCodable.swift */; }; - B94B07BC2401849A00B244E8 /* TestURLComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B075A2401849400B244E8 /* TestURLComponents.swift */; }; - B94B07BD2401849A00B244E8 /* TestMassFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B075B2401849400B244E8 /* TestMassFormatter.swift */; }; - B94B07BE2401849A00B244E8 /* TestNSSortDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B075C2401849400B244E8 /* TestNSSortDescriptor.swift */; }; - B94B07BF2401849A00B244E8 /* TestJSONSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B075D2401849400B244E8 /* TestJSONSerialization.swift */; }; - B94B07C02401849A00B244E8 /* TestMeasurement.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B075E2401849500B244E8 /* TestMeasurement.swift */; }; - B94B07C12401849A00B244E8 /* TestURLProtectionSpace.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B075F2401849500B244E8 /* TestURLProtectionSpace.swift */; }; - B94B07C22401849A00B244E8 /* TestProgressFraction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07602401849500B244E8 /* TestProgressFraction.swift */; }; - B94B07C32401849A00B244E8 /* TestPropertyListSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07612401849500B244E8 /* TestPropertyListSerialization.swift */; }; - B94B07C42401849A00B244E8 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07622401849500B244E8 /* Utilities.swift */; }; - B94B07C52401849A00B244E8 /* TestNotificationQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07632401849500B244E8 /* TestNotificationQueue.swift */; }; - B94B07C62401849A00B244E8 /* TestNSDateComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07642401849500B244E8 /* TestNSDateComponents.swift */; }; - B94B07C72401849A00B244E8 /* TestNSError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07652401849500B244E8 /* TestNSError.swift */; }; - B94B07C82401849B00B244E8 /* TestNSKeyedUnarchiver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07662401849500B244E8 /* TestNSKeyedUnarchiver.swift */; }; - B94B07C92401849B00B244E8 /* TestIndexPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07672401849500B244E8 /* TestIndexPath.swift */; }; - B94B07CA2401849B00B244E8 /* TestHTTPCookieStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07682401849500B244E8 /* TestHTTPCookieStorage.swift */; }; - B94B07CB2401849B00B244E8 /* TestNSOrderedSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07692401849500B244E8 /* TestNSOrderedSet.swift */; }; - B94B07CC2401849B00B244E8 /* TestNSNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B076A2401849500B244E8 /* TestNSNumber.swift */; }; - B94B07CD2401849B00B244E8 /* TestNotificationCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B076B2401849600B244E8 /* TestNotificationCenter.swift */; }; - B94B07CE2401849B00B244E8 /* TestNSAttributedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B076C2401849600B244E8 /* TestNSAttributedString.swift */; }; - B94B07CF2401849B00B244E8 /* TestURLProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B076D2401849600B244E8 /* TestURLProtocol.swift */; }; - B94B07D02401849B00B244E8 /* TestScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B076E2401849600B244E8 /* TestScanner.swift */; }; - B94B07D12401849B00B244E8 /* TestXMLParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B076F2401849600B244E8 /* TestXMLParser.swift */; }; - B94B07D22401849B00B244E8 /* TestNSUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07702401849600B244E8 /* TestNSUUID.swift */; }; - B94B07D32401849B00B244E8 /* TestThread.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07712401849600B244E8 /* TestThread.swift */; }; - B94B07D42401849B00B244E8 /* TestNSLocale.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07722401849600B244E8 /* TestNSLocale.swift */; }; - B94B07D52401849B00B244E8 /* TestNSString.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07732401849600B244E8 /* TestNSString.swift */; }; - B94B07D62401849B00B244E8 /* TestUserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07742401849600B244E8 /* TestUserDefaults.swift */; }; - B94B07D72401849B00B244E8 /* TestNSTextCheckingResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07752401849600B244E8 /* TestNSTextCheckingResult.swift */; }; - B94B07D82401849B00B244E8 /* TestNSNumberBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07762401849600B244E8 /* TestNSNumberBridging.swift */; }; - B94B07D92401849B00B244E8 /* TestOperationQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07772401849600B244E8 /* TestOperationQueue.swift */; }; - B94B07DA2401849B00B244E8 /* TestJSONEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07782401849700B244E8 /* TestJSONEncoder.swift */; }; - B94B07DB2401849B00B244E8 /* TestNSKeyedArchiver.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07792401849700B244E8 /* TestNSKeyedArchiver.swift */; }; - B94B07DC2401849B00B244E8 /* TestUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B077A2401849700B244E8 /* TestUtils.swift */; }; - B94B07DD2401849B00B244E8 /* TestUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B077B2401849700B244E8 /* TestUUID.swift */; }; - B94B07DE2401849B00B244E8 /* TestXMLDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B077C2401849700B244E8 /* TestXMLDocument.swift */; }; - B94B07DF2401849B00B244E8 /* TestNSCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B077D2401849700B244E8 /* TestNSCache.swift */; }; - B94B07E02401849B00B244E8 /* TestPersonNameComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B077E2401849700B244E8 /* TestPersonNameComponents.swift */; }; - B94B07E12401849B00B244E8 /* TestDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B077F2401849700B244E8 /* TestDate.swift */; }; - B94B07E22401849B00B244E8 /* TestPropertyListEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07802401849700B244E8 /* TestPropertyListEncoder.swift */; }; - B94B07E32401849B00B244E8 /* TestHTTPCookie.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07812401849700B244E8 /* TestHTTPCookie.swift */; }; - B94B07E42401849B00B244E8 /* TestAffineTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07822401849700B244E8 /* TestAffineTransform.swift */; }; - B94B07E52401849B00B244E8 /* TestNSNull.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07832401849700B244E8 /* TestNSNull.swift */; }; - B94B07E62401849B00B244E8 /* TestUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07842401849700B244E8 /* TestUnit.swift */; }; - B94B07E72401849B00B244E8 /* TestISO8601DateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07852401849700B244E8 /* TestISO8601DateFormatter.swift */; }; - B94B07E82401849B00B244E8 /* TestNSDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07862401849800B244E8 /* TestNSDictionary.swift */; }; - B94B07E92401849B00B244E8 /* TestNSRegularExpression.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07872401849800B244E8 /* TestNSRegularExpression.swift */; }; - B94B07EA2401849B00B244E8 /* TestDateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07882401849800B244E8 /* TestDateFormatter.swift */; }; - B94B07EB2401849B00B244E8 /* TestURLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07892401849800B244E8 /* TestURLResponse.swift */; }; - B94B07EC2401849B00B244E8 /* TestNSURLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B078A2401849800B244E8 /* TestNSURLRequest.swift */; }; - B94B07ED2401849B00B244E8 /* TestNSLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B078B2401849800B244E8 /* TestNSLock.swift */; }; - B94B07EE2401849B00B244E8 /* TestUnitVolume.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B078C2401849800B244E8 /* TestUnitVolume.swift */; }; - B94B07EF2401849B00B244E8 /* TestByteCountFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B078D2401849800B244E8 /* TestByteCountFormatter.swift */; }; - B94B07F02401849B00B244E8 /* TestURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B078E2401849800B244E8 /* TestURL.swift */; }; - B94B07F12401849B00B244E8 /* TestCachedURLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B078F2401849800B244E8 /* TestCachedURLResponse.swift */; }; - B94B07F22401849B00B244E8 /* TestDecimal.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07902401849800B244E8 /* TestDecimal.swift */; }; - B94B07F32401849B00B244E8 /* TestStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07912401849800B244E8 /* TestStream.swift */; }; - B94B07F42401849B00B244E8 /* TestNSData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07922401849800B244E8 /* TestNSData.swift */; }; - B94B07F52401849B00B244E8 /* TestNSRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07932401849900B244E8 /* TestNSRange.swift */; }; - B94B07F62401849B00B244E8 /* TestObjCRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07942401849900B244E8 /* TestObjCRuntime.swift */; }; - B94B07F72401849B00B244E8 /* TestSocketPort.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07952401849900B244E8 /* TestSocketPort.swift */; }; - B94B07F82401849B00B244E8 /* TestHost.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07962401849900B244E8 /* TestHost.swift */; }; - B94B07F92401849B00B244E8 /* TestNSSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07972401849900B244E8 /* TestNSSet.swift */; }; - B94B07FA2401849B00B244E8 /* TestDimension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07982401849900B244E8 /* TestDimension.swift */; }; - B94B07FB2401849B00B244E8 /* TestEnergyFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07992401849900B244E8 /* TestEnergyFormatter.swift */; }; - B94B07FC2401849B00B244E8 /* TestTimeZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B079A2401849900B244E8 /* TestTimeZone.swift */; }; - B94B07FD2401849B00B244E8 /* TestNSPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B079B2401849900B244E8 /* TestNSPredicate.swift */; }; - B94B07FE2401849B00B244E8 /* TestCharacterSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B079C2401849900B244E8 /* TestCharacterSet.swift */; }; - B94B07FF2401849B00B244E8 /* TestNSCompoundPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B079D2401849A00B244E8 /* TestNSCompoundPredicate.swift */; }; - B94B08002401849B00B244E8 /* TestCalendar.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B079E2401849A00B244E8 /* TestCalendar.swift */; }; - B94B08012401849B00B244E8 /* TestURLSessionFTP.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B079F2401849A00B244E8 /* TestURLSessionFTP.swift */; }; - B94B08022401849B00B244E8 /* TestNumberFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07A02401849A00B244E8 /* TestNumberFormatter.swift */; }; - B94B08032401849B00B244E8 /* TestDateIntervalFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07A12401849A00B244E8 /* TestDateIntervalFormatter.swift */; }; - B94B08042401849B00B244E8 /* TestNSArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07A22401849A00B244E8 /* TestNSArray.swift */; }; - B94B08052401849B00B244E8 /* TestProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07A32401849A00B244E8 /* TestProgress.swift */; }; - B94B08062401849B00B244E8 /* TestURLCredential.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07A42401849A00B244E8 /* TestURLCredential.swift */; }; - B94B08072401849B00B244E8 /* TestURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B07A52401849A00B244E8 /* TestURLSession.swift */; }; - B94B081E240184D000B244E8 /* NSKeyedUnarchiver-ComplexTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = B94B0808240184CE00B244E8 /* NSKeyedUnarchiver-ComplexTest.plist */; }; - B94B081F240184D000B244E8 /* NSKeyedUnarchiver-OrderedSetTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = B94B0809240184CF00B244E8 /* NSKeyedUnarchiver-OrderedSetTest.plist */; }; - B94B0820240184D000B244E8 /* NSString-UTF16-LE-data.txt in Resources */ = {isa = PBXBuildFile; fileRef = B94B080A240184CF00B244E8 /* NSString-UTF16-LE-data.txt */; }; - B94B0821240184D000B244E8 /* NSStringTestData.txt in Resources */ = {isa = PBXBuildFile; fileRef = B94B080B240184CF00B244E8 /* NSStringTestData.txt */; }; - B94B0822240184D000B244E8 /* NSURLTestData.plist in Resources */ = {isa = PBXBuildFile; fileRef = B94B080C240184CF00B244E8 /* NSURLTestData.plist */; }; - B94B0823240184D000B244E8 /* NSKeyedUnarchiver-URLTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = B94B080D240184CF00B244E8 /* NSKeyedUnarchiver-URLTest.plist */; }; - B94B0824240184D000B244E8 /* Test.plist in Resources */ = {isa = PBXBuildFile; fileRef = B94B080E240184CF00B244E8 /* Test.plist */; }; - B94B0825240184D000B244E8 /* NSKeyedUnarchiver-ArrayTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = B94B080F240184CF00B244E8 /* NSKeyedUnarchiver-ArrayTest.plist */; }; - B94B0826240184D000B244E8 /* NSKeyedUnarchiver-NotificationTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = B94B0810240184CF00B244E8 /* NSKeyedUnarchiver-NotificationTest.plist */; }; - B94B0827240184D000B244E8 /* NSString-UTF32-LE-data.txt in Resources */ = {isa = PBXBuildFile; fileRef = B94B0811240184CF00B244E8 /* NSString-UTF32-LE-data.txt */; }; - B94B0828240184D000B244E8 /* TestFileWithZeros.txt in Resources */ = {isa = PBXBuildFile; fileRef = B94B0812240184CF00B244E8 /* TestFileWithZeros.txt */; }; - B94B0829240184D000B244E8 /* NSXMLDocumentTestData.xml in Resources */ = {isa = PBXBuildFile; fileRef = B94B0813240184CF00B244E8 /* NSXMLDocumentTestData.xml */; }; - B94B082A240184D000B244E8 /* NSXMLDTDTestData.xml in Resources */ = {isa = PBXBuildFile; fileRef = B94B0814240184CF00B244E8 /* NSXMLDTDTestData.xml */; }; - B94B082B240184D000B244E8 /* NSKeyedUnarchiver-EdgeInsetsTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = B94B0815240184D000B244E8 /* NSKeyedUnarchiver-EdgeInsetsTest.plist */; }; - B94B082C240184D000B244E8 /* NSKeyedUnarchiver-UUIDTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = B94B0816240184D000B244E8 /* NSKeyedUnarchiver-UUIDTest.plist */; }; - B94B082D240184D000B244E8 /* PropertyList-1.0.dtd in Resources */ = {isa = PBXBuildFile; fileRef = B94B0817240184D000B244E8 /* PropertyList-1.0.dtd */; }; - B94B082E240184D000B244E8 /* NSKeyedUnarchiver-RangeTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = B94B0818240184D000B244E8 /* NSKeyedUnarchiver-RangeTest.plist */; }; - B94B082F240184D000B244E8 /* NSKeyedUnarchiver-RectTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = B94B0819240184D000B244E8 /* NSKeyedUnarchiver-RectTest.plist */; }; - B94B0830240184D000B244E8 /* NSKeyedUnarchiver-ConcreteValueTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = B94B081A240184D000B244E8 /* NSKeyedUnarchiver-ConcreteValueTest.plist */; }; - B94B0831240184D000B244E8 /* NSString-ISO-8859-1-data.txt in Resources */ = {isa = PBXBuildFile; fileRef = B94B081B240184D000B244E8 /* NSString-ISO-8859-1-data.txt */; }; - B94B0832240184D000B244E8 /* NSString-UTF16-BE-data.txt in Resources */ = {isa = PBXBuildFile; fileRef = B94B081C240184D000B244E8 /* NSString-UTF16-BE-data.txt */; }; - B94B0833240184D000B244E8 /* NSString-UTF32-BE-data.txt in Resources */ = {isa = PBXBuildFile; fileRef = B94B081D240184D000B244E8 /* NSString-UTF32-BE-data.txt */; }; - B94B08352401854E00B244E8 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B08342401854E00B244E8 /* main.swift */; }; - B94B0837240185FF00B244E8 /* DarwinShims.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B0836240185FF00B244E8 /* DarwinShims.swift */; }; - B9ED84FD23641F7000A58AF2 /* DarwinShims.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9F3269E1FC714DD003C3599 /* DarwinShims.swift */; }; - B9F137A120B998D0000B7577 /* xdgTestHelper in CopyFiles */ = {isa = PBXBuildFile; fileRef = B917D31C20B0DB8B00728EE0 /* xdgTestHelper */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - B9F4492A2483FA1E00B30F02 /* TestNSURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9F449292483FA1E00B30F02 /* TestNSURL.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - B9F1379E20B9984F000B7577 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = B9C89EB91F6BF47D00087AF4 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B917D31B20B0DB8B00728EE0; - remoteInfo = xdgTestHelper; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - B917D31A20B0DB8B00728EE0 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; - B9F137A020B998C0000B7577 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 6; - files = ( - B9F137A120B998D0000B7577 /* xdgTestHelper in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 659FB6DF2405E65D00F5F63F /* TestBridging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TestBridging.swift; path = Tests/Foundation/Tests/TestBridging.swift; sourceTree = ""; }; - ABB1293626D47D9E00401E6C /* TestUnitInformationStorage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TestUnitInformationStorage.swift; path = Tests/Foundation/Tests/TestUnitInformationStorage.swift; sourceTree = ""; }; - B91161AE242A385A00BD2907 /* TestDataURLProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestDataURLProtocol.swift; path = Tests/Foundation/Tests/TestDataURLProtocol.swift; sourceTree = ""; }; - B917D31C20B0DB8B00728EE0 /* xdgTestHelper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = xdgTestHelper; sourceTree = BUILT_PRODUCTS_DIR; }; - B917D32320B0DB9700728EE0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - B94B073C2401847C00B244E8 /* FTPServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = FTPServer.swift; path = Tests/Foundation/FTPServer.swift; sourceTree = ""; }; - B94B073D2401847C00B244E8 /* HTTPServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HTTPServer.swift; path = Tests/Foundation/HTTPServer.swift; sourceTree = ""; }; - B94B073E2401847C00B244E8 /* Imports.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Imports.swift; path = Tests/Foundation/Imports.swift; sourceTree = ""; }; - B94B073F2401847C00B244E8 /* FixtureValues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = FixtureValues.swift; path = Tests/Foundation/FixtureValues.swift; sourceTree = ""; }; - B94B07442401849300B244E8 /* TestUnitConverter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestUnitConverter.swift; path = Tests/Foundation/Tests/TestUnitConverter.swift; sourceTree = ""; }; - B94B07452401849300B244E8 /* TestRunLoop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestRunLoop.swift; path = Tests/Foundation/Tests/TestRunLoop.swift; sourceTree = ""; }; - B94B07462401849300B244E8 /* TestDateInterval.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestDateInterval.swift; path = Tests/Foundation/Tests/TestDateInterval.swift; sourceTree = ""; }; - B94B07472401849300B244E8 /* TestBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestBundle.swift; path = Tests/Foundation/Tests/TestBundle.swift; sourceTree = ""; }; - B94B07482401849300B244E8 /* TestURLRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestURLRequest.swift; path = Tests/Foundation/Tests/TestURLRequest.swift; sourceTree = ""; }; - B94B07492401849300B244E8 /* TestProcess.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestProcess.swift; path = Tests/Foundation/Tests/TestProcess.swift; sourceTree = ""; }; - B94B074A2401849300B244E8 /* TestIndexSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestIndexSet.swift; path = Tests/Foundation/Tests/TestIndexSet.swift; sourceTree = ""; }; - B94B074B2401849300B244E8 /* TestDateComponents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestDateComponents.swift; path = Tests/Foundation/Tests/TestDateComponents.swift; sourceTree = ""; }; - B94B074C2401849300B244E8 /* TestNotification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNotification.swift; path = Tests/Foundation/Tests/TestNotification.swift; sourceTree = ""; }; - B94B074D2401849300B244E8 /* TestFileHandle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestFileHandle.swift; path = Tests/Foundation/Tests/TestFileHandle.swift; sourceTree = ""; }; - B94B074E2401849400B244E8 /* TestTimer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestTimer.swift; path = Tests/Foundation/Tests/TestTimer.swift; sourceTree = ""; }; - B94B074F2401849400B244E8 /* TestURLCredentialStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestURLCredentialStorage.swift; path = Tests/Foundation/Tests/TestURLCredentialStorage.swift; sourceTree = ""; }; - B94B07502401849400B244E8 /* TestPipe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestPipe.swift; path = Tests/Foundation/Tests/TestPipe.swift; sourceTree = ""; }; - B94B07512401849400B244E8 /* TestFileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestFileManager.swift; path = Tests/Foundation/Tests/TestFileManager.swift; sourceTree = ""; }; - B94B07522401849400B244E8 /* TestNSGeometry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSGeometry.swift; path = Tests/Foundation/Tests/TestNSGeometry.swift; sourceTree = ""; }; - B94B07532401849400B244E8 /* TestProcessInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestProcessInfo.swift; path = Tests/Foundation/Tests/TestProcessInfo.swift; sourceTree = ""; }; - B94B07542401849400B244E8 /* TestHTTPURLResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestHTTPURLResponse.swift; path = Tests/Foundation/Tests/TestHTTPURLResponse.swift; sourceTree = ""; }; - B94B07552401849400B244E8 /* TestNSCalendar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSCalendar.swift; path = Tests/Foundation/Tests/TestNSCalendar.swift; sourceTree = ""; }; - B94B07562401849400B244E8 /* TestLengthFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestLengthFormatter.swift; path = Tests/Foundation/Tests/TestLengthFormatter.swift; sourceTree = ""; }; - B94B07572401849400B244E8 /* TestURLCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestURLCache.swift; path = Tests/Foundation/Tests/TestURLCache.swift; sourceTree = ""; }; - B94B07582401849400B244E8 /* TestNSValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSValue.swift; path = Tests/Foundation/Tests/TestNSValue.swift; sourceTree = ""; }; - B94B07592401849400B244E8 /* TestCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestCodable.swift; path = Tests/Foundation/Tests/TestCodable.swift; sourceTree = ""; }; - B94B075A2401849400B244E8 /* TestURLComponents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestURLComponents.swift; path = Tests/Foundation/Tests/TestURLComponents.swift; sourceTree = ""; }; - B94B075B2401849400B244E8 /* TestMassFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestMassFormatter.swift; path = Tests/Foundation/Tests/TestMassFormatter.swift; sourceTree = ""; }; - B94B075C2401849400B244E8 /* TestNSSortDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSSortDescriptor.swift; path = Tests/Foundation/Tests/TestNSSortDescriptor.swift; sourceTree = ""; }; - B94B075D2401849400B244E8 /* TestJSONSerialization.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestJSONSerialization.swift; path = Tests/Foundation/Tests/TestJSONSerialization.swift; sourceTree = ""; }; - B94B075E2401849500B244E8 /* TestMeasurement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestMeasurement.swift; path = Tests/Foundation/Tests/TestMeasurement.swift; sourceTree = ""; }; - B94B075F2401849500B244E8 /* TestURLProtectionSpace.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestURLProtectionSpace.swift; path = Tests/Foundation/Tests/TestURLProtectionSpace.swift; sourceTree = ""; }; - B94B07602401849500B244E8 /* TestProgressFraction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestProgressFraction.swift; path = Tests/Foundation/Tests/TestProgressFraction.swift; sourceTree = ""; }; - B94B07612401849500B244E8 /* TestPropertyListSerialization.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestPropertyListSerialization.swift; path = Tests/Foundation/Tests/TestPropertyListSerialization.swift; sourceTree = ""; }; - B94B07622401849500B244E8 /* Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Utilities.swift; path = Tests/Foundation/Utilities.swift; sourceTree = ""; }; - B94B07632401849500B244E8 /* TestNotificationQueue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNotificationQueue.swift; path = Tests/Foundation/Tests/TestNotificationQueue.swift; sourceTree = ""; }; - B94B07642401849500B244E8 /* TestNSDateComponents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSDateComponents.swift; path = Tests/Foundation/Tests/TestNSDateComponents.swift; sourceTree = ""; }; - B94B07652401849500B244E8 /* TestNSError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSError.swift; path = Tests/Foundation/Tests/TestNSError.swift; sourceTree = ""; }; - B94B07662401849500B244E8 /* TestNSKeyedUnarchiver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSKeyedUnarchiver.swift; path = Tests/Foundation/Tests/TestNSKeyedUnarchiver.swift; sourceTree = ""; }; - B94B07672401849500B244E8 /* TestIndexPath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestIndexPath.swift; path = Tests/Foundation/Tests/TestIndexPath.swift; sourceTree = ""; }; - B94B07682401849500B244E8 /* TestHTTPCookieStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestHTTPCookieStorage.swift; path = Tests/Foundation/Tests/TestHTTPCookieStorage.swift; sourceTree = ""; }; - B94B07692401849500B244E8 /* TestNSOrderedSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSOrderedSet.swift; path = Tests/Foundation/Tests/TestNSOrderedSet.swift; sourceTree = ""; }; - B94B076A2401849500B244E8 /* TestNSNumber.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSNumber.swift; path = Tests/Foundation/Tests/TestNSNumber.swift; sourceTree = ""; }; - B94B076B2401849600B244E8 /* TestNotificationCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNotificationCenter.swift; path = Tests/Foundation/Tests/TestNotificationCenter.swift; sourceTree = ""; }; - B94B076C2401849600B244E8 /* TestNSAttributedString.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSAttributedString.swift; path = Tests/Foundation/Tests/TestNSAttributedString.swift; sourceTree = ""; }; - B94B076D2401849600B244E8 /* TestURLProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestURLProtocol.swift; path = Tests/Foundation/Tests/TestURLProtocol.swift; sourceTree = ""; }; - B94B076E2401849600B244E8 /* TestScanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestScanner.swift; path = Tests/Foundation/Tests/TestScanner.swift; sourceTree = ""; }; - B94B076F2401849600B244E8 /* TestXMLParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestXMLParser.swift; path = Tests/Foundation/Tests/TestXMLParser.swift; sourceTree = ""; }; - B94B07702401849600B244E8 /* TestNSUUID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSUUID.swift; path = Tests/Foundation/Tests/TestNSUUID.swift; sourceTree = ""; }; - B94B07712401849600B244E8 /* TestThread.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestThread.swift; path = Tests/Foundation/Tests/TestThread.swift; sourceTree = ""; }; - B94B07722401849600B244E8 /* TestNSLocale.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSLocale.swift; path = Tests/Foundation/Tests/TestNSLocale.swift; sourceTree = ""; }; - B94B07732401849600B244E8 /* TestNSString.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSString.swift; path = Tests/Foundation/Tests/TestNSString.swift; sourceTree = ""; }; - B94B07742401849600B244E8 /* TestUserDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestUserDefaults.swift; path = Tests/Foundation/Tests/TestUserDefaults.swift; sourceTree = ""; }; - B94B07752401849600B244E8 /* TestNSTextCheckingResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSTextCheckingResult.swift; path = Tests/Foundation/Tests/TestNSTextCheckingResult.swift; sourceTree = ""; }; - B94B07762401849600B244E8 /* TestNSNumberBridging.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSNumberBridging.swift; path = Tests/Foundation/Tests/TestNSNumberBridging.swift; sourceTree = ""; }; - B94B07772401849600B244E8 /* TestOperationQueue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestOperationQueue.swift; path = Tests/Foundation/Tests/TestOperationQueue.swift; sourceTree = ""; }; - B94B07782401849700B244E8 /* TestJSONEncoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestJSONEncoder.swift; path = Tests/Foundation/Tests/TestJSONEncoder.swift; sourceTree = ""; }; - B94B07792401849700B244E8 /* TestNSKeyedArchiver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSKeyedArchiver.swift; path = Tests/Foundation/Tests/TestNSKeyedArchiver.swift; sourceTree = ""; }; - B94B077A2401849700B244E8 /* TestUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestUtils.swift; path = Tests/Foundation/Tests/TestUtils.swift; sourceTree = ""; }; - B94B077B2401849700B244E8 /* TestUUID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestUUID.swift; path = Tests/Foundation/Tests/TestUUID.swift; sourceTree = ""; }; - B94B077C2401849700B244E8 /* TestXMLDocument.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestXMLDocument.swift; path = Tests/Foundation/Tests/TestXMLDocument.swift; sourceTree = ""; }; - B94B077D2401849700B244E8 /* TestNSCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSCache.swift; path = Tests/Foundation/Tests/TestNSCache.swift; sourceTree = ""; }; - B94B077E2401849700B244E8 /* TestPersonNameComponents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestPersonNameComponents.swift; path = Tests/Foundation/Tests/TestPersonNameComponents.swift; sourceTree = ""; }; - B94B077F2401849700B244E8 /* TestDate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestDate.swift; path = Tests/Foundation/Tests/TestDate.swift; sourceTree = ""; }; - B94B07802401849700B244E8 /* TestPropertyListEncoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestPropertyListEncoder.swift; path = Tests/Foundation/Tests/TestPropertyListEncoder.swift; sourceTree = ""; }; - B94B07812401849700B244E8 /* TestHTTPCookie.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestHTTPCookie.swift; path = Tests/Foundation/Tests/TestHTTPCookie.swift; sourceTree = ""; }; - B94B07822401849700B244E8 /* TestAffineTransform.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestAffineTransform.swift; path = Tests/Foundation/Tests/TestAffineTransform.swift; sourceTree = ""; }; - B94B07832401849700B244E8 /* TestNSNull.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSNull.swift; path = Tests/Foundation/Tests/TestNSNull.swift; sourceTree = ""; }; - B94B07842401849700B244E8 /* TestUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestUnit.swift; path = Tests/Foundation/Tests/TestUnit.swift; sourceTree = ""; }; - B94B07852401849700B244E8 /* TestISO8601DateFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestISO8601DateFormatter.swift; path = Tests/Foundation/Tests/TestISO8601DateFormatter.swift; sourceTree = ""; }; - B94B07862401849800B244E8 /* TestNSDictionary.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSDictionary.swift; path = Tests/Foundation/Tests/TestNSDictionary.swift; sourceTree = ""; }; - B94B07872401849800B244E8 /* TestNSRegularExpression.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSRegularExpression.swift; path = Tests/Foundation/Tests/TestNSRegularExpression.swift; sourceTree = ""; }; - B94B07882401849800B244E8 /* TestDateFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestDateFormatter.swift; path = Tests/Foundation/Tests/TestDateFormatter.swift; sourceTree = ""; }; - B94B07892401849800B244E8 /* TestURLResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestURLResponse.swift; path = Tests/Foundation/Tests/TestURLResponse.swift; sourceTree = ""; }; - B94B078A2401849800B244E8 /* TestNSURLRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSURLRequest.swift; path = Tests/Foundation/Tests/TestNSURLRequest.swift; sourceTree = ""; }; - B94B078B2401849800B244E8 /* TestNSLock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSLock.swift; path = Tests/Foundation/Tests/TestNSLock.swift; sourceTree = ""; }; - B94B078C2401849800B244E8 /* TestUnitVolume.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestUnitVolume.swift; path = Tests/Foundation/Tests/TestUnitVolume.swift; sourceTree = ""; }; - B94B078D2401849800B244E8 /* TestByteCountFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestByteCountFormatter.swift; path = Tests/Foundation/Tests/TestByteCountFormatter.swift; sourceTree = ""; }; - B94B078E2401849800B244E8 /* TestURL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestURL.swift; path = Tests/Foundation/Tests/TestURL.swift; sourceTree = ""; }; - B94B078F2401849800B244E8 /* TestCachedURLResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestCachedURLResponse.swift; path = Tests/Foundation/Tests/TestCachedURLResponse.swift; sourceTree = ""; }; - B94B07902401849800B244E8 /* TestDecimal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestDecimal.swift; path = Tests/Foundation/Tests/TestDecimal.swift; sourceTree = ""; }; - B94B07912401849800B244E8 /* TestStream.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestStream.swift; path = Tests/Foundation/Tests/TestStream.swift; sourceTree = ""; }; - B94B07922401849800B244E8 /* TestNSData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSData.swift; path = Tests/Foundation/Tests/TestNSData.swift; sourceTree = ""; }; - B94B07932401849900B244E8 /* TestNSRange.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSRange.swift; path = Tests/Foundation/Tests/TestNSRange.swift; sourceTree = ""; }; - B94B07942401849900B244E8 /* TestObjCRuntime.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestObjCRuntime.swift; path = Tests/Foundation/Tests/TestObjCRuntime.swift; sourceTree = ""; }; - B94B07952401849900B244E8 /* TestSocketPort.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestSocketPort.swift; path = Tests/Foundation/Tests/TestSocketPort.swift; sourceTree = ""; }; - B94B07962401849900B244E8 /* TestHost.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestHost.swift; path = Tests/Foundation/Tests/TestHost.swift; sourceTree = ""; }; - B94B07972401849900B244E8 /* TestNSSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSSet.swift; path = Tests/Foundation/Tests/TestNSSet.swift; sourceTree = ""; }; - B94B07982401849900B244E8 /* TestDimension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestDimension.swift; path = Tests/Foundation/Tests/TestDimension.swift; sourceTree = ""; }; - B94B07992401849900B244E8 /* TestEnergyFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestEnergyFormatter.swift; path = Tests/Foundation/Tests/TestEnergyFormatter.swift; sourceTree = ""; }; - B94B079A2401849900B244E8 /* TestTimeZone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestTimeZone.swift; path = Tests/Foundation/Tests/TestTimeZone.swift; sourceTree = ""; }; - B94B079B2401849900B244E8 /* TestNSPredicate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSPredicate.swift; path = Tests/Foundation/Tests/TestNSPredicate.swift; sourceTree = ""; }; - B94B079C2401849900B244E8 /* TestCharacterSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestCharacterSet.swift; path = Tests/Foundation/Tests/TestCharacterSet.swift; sourceTree = ""; }; - B94B079D2401849A00B244E8 /* TestNSCompoundPredicate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSCompoundPredicate.swift; path = Tests/Foundation/Tests/TestNSCompoundPredicate.swift; sourceTree = ""; }; - B94B079E2401849A00B244E8 /* TestCalendar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestCalendar.swift; path = Tests/Foundation/Tests/TestCalendar.swift; sourceTree = ""; }; - B94B079F2401849A00B244E8 /* TestURLSessionFTP.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestURLSessionFTP.swift; path = Tests/Foundation/Tests/TestURLSessionFTP.swift; sourceTree = ""; }; - B94B07A02401849A00B244E8 /* TestNumberFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNumberFormatter.swift; path = Tests/Foundation/Tests/TestNumberFormatter.swift; sourceTree = ""; }; - B94B07A12401849A00B244E8 /* TestDateIntervalFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestDateIntervalFormatter.swift; path = Tests/Foundation/Tests/TestDateIntervalFormatter.swift; sourceTree = ""; }; - B94B07A22401849A00B244E8 /* TestNSArray.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSArray.swift; path = Tests/Foundation/Tests/TestNSArray.swift; sourceTree = ""; }; - B94B07A32401849A00B244E8 /* TestProgress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestProgress.swift; path = Tests/Foundation/Tests/TestProgress.swift; sourceTree = ""; }; - B94B07A42401849A00B244E8 /* TestURLCredential.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestURLCredential.swift; path = Tests/Foundation/Tests/TestURLCredential.swift; sourceTree = ""; }; - B94B07A52401849A00B244E8 /* TestURLSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestURLSession.swift; path = Tests/Foundation/Tests/TestURLSession.swift; sourceTree = ""; }; - B94B0808240184CE00B244E8 /* NSKeyedUnarchiver-ComplexTest.plist */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; name = "NSKeyedUnarchiver-ComplexTest.plist"; path = "Tests/Foundation/Resources/NSKeyedUnarchiver-ComplexTest.plist"; sourceTree = ""; }; - B94B0809240184CF00B244E8 /* NSKeyedUnarchiver-OrderedSetTest.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "NSKeyedUnarchiver-OrderedSetTest.plist"; path = "Tests/Foundation/Resources/NSKeyedUnarchiver-OrderedSetTest.plist"; sourceTree = ""; }; - B94B080A240184CF00B244E8 /* NSString-UTF16-LE-data.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "NSString-UTF16-LE-data.txt"; path = "Tests/Foundation/Resources/NSString-UTF16-LE-data.txt"; sourceTree = ""; }; - B94B080B240184CF00B244E8 /* NSStringTestData.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = NSStringTestData.txt; path = Tests/Foundation/Resources/NSStringTestData.txt; sourceTree = ""; }; - B94B080C240184CF00B244E8 /* NSURLTestData.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = NSURLTestData.plist; path = Tests/Foundation/Resources/NSURLTestData.plist; sourceTree = ""; }; - B94B080D240184CF00B244E8 /* NSKeyedUnarchiver-URLTest.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "NSKeyedUnarchiver-URLTest.plist"; path = "Tests/Foundation/Resources/NSKeyedUnarchiver-URLTest.plist"; sourceTree = ""; }; - B94B080E240184CF00B244E8 /* Test.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Test.plist; path = Tests/Foundation/Resources/Test.plist; sourceTree = ""; }; - B94B080F240184CF00B244E8 /* NSKeyedUnarchiver-ArrayTest.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "NSKeyedUnarchiver-ArrayTest.plist"; path = "Tests/Foundation/Resources/NSKeyedUnarchiver-ArrayTest.plist"; sourceTree = ""; }; - B94B0810240184CF00B244E8 /* NSKeyedUnarchiver-NotificationTest.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "NSKeyedUnarchiver-NotificationTest.plist"; path = "Tests/Foundation/Resources/NSKeyedUnarchiver-NotificationTest.plist"; sourceTree = ""; }; - B94B0811240184CF00B244E8 /* NSString-UTF32-LE-data.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "NSString-UTF32-LE-data.txt"; path = "Tests/Foundation/Resources/NSString-UTF32-LE-data.txt"; sourceTree = ""; }; - B94B0812240184CF00B244E8 /* TestFileWithZeros.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = TestFileWithZeros.txt; path = Tests/Foundation/Resources/TestFileWithZeros.txt; sourceTree = ""; }; - B94B0813240184CF00B244E8 /* NSXMLDocumentTestData.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = NSXMLDocumentTestData.xml; path = Tests/Foundation/Resources/NSXMLDocumentTestData.xml; sourceTree = ""; }; - B94B0814240184CF00B244E8 /* NSXMLDTDTestData.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = NSXMLDTDTestData.xml; path = Tests/Foundation/Resources/NSXMLDTDTestData.xml; sourceTree = ""; }; - B94B0815240184D000B244E8 /* NSKeyedUnarchiver-EdgeInsetsTest.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "NSKeyedUnarchiver-EdgeInsetsTest.plist"; path = "Tests/Foundation/Resources/NSKeyedUnarchiver-EdgeInsetsTest.plist"; sourceTree = ""; }; - B94B0816240184D000B244E8 /* NSKeyedUnarchiver-UUIDTest.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "NSKeyedUnarchiver-UUIDTest.plist"; path = "Tests/Foundation/Resources/NSKeyedUnarchiver-UUIDTest.plist"; sourceTree = ""; }; - B94B0817240184D000B244E8 /* PropertyList-1.0.dtd */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = "PropertyList-1.0.dtd"; path = "Tests/Foundation/Resources/PropertyList-1.0.dtd"; sourceTree = ""; }; - B94B0818240184D000B244E8 /* NSKeyedUnarchiver-RangeTest.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "NSKeyedUnarchiver-RangeTest.plist"; path = "Tests/Foundation/Resources/NSKeyedUnarchiver-RangeTest.plist"; sourceTree = ""; }; - B94B0819240184D000B244E8 /* NSKeyedUnarchiver-RectTest.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "NSKeyedUnarchiver-RectTest.plist"; path = "Tests/Foundation/Resources/NSKeyedUnarchiver-RectTest.plist"; sourceTree = ""; }; - B94B081A240184D000B244E8 /* NSKeyedUnarchiver-ConcreteValueTest.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "NSKeyedUnarchiver-ConcreteValueTest.plist"; path = "Tests/Foundation/Resources/NSKeyedUnarchiver-ConcreteValueTest.plist"; sourceTree = ""; }; - B94B081B240184D000B244E8 /* NSString-ISO-8859-1-data.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "NSString-ISO-8859-1-data.txt"; path = "Tests/Foundation/Resources/NSString-ISO-8859-1-data.txt"; sourceTree = ""; }; - B94B081C240184D000B244E8 /* NSString-UTF16-BE-data.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "NSString-UTF16-BE-data.txt"; path = "Tests/Foundation/Resources/NSString-UTF16-BE-data.txt"; sourceTree = ""; }; - B94B081D240184D000B244E8 /* NSString-UTF32-BE-data.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "NSString-UTF32-BE-data.txt"; path = "Tests/Foundation/Resources/NSString-UTF32-BE-data.txt"; sourceTree = ""; }; - B94B08342401854E00B244E8 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = main.swift; path = Tests/Tools/XDGTestHelper/main.swift; sourceTree = ""; }; - B94B0836240185FF00B244E8 /* DarwinShims.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = DarwinShims.swift; path = DarwinCompatibilityTests/DarwinShims.swift; sourceTree = ""; }; - B99EAE6E23602FFA00C8FB46 /* TestsToSkip.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TestsToSkip.txt; sourceTree = ""; }; - B99EAE6F23602FFA00C8FB46 /* xcode-build.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "xcode-build.sh"; sourceTree = ""; }; - B9C89ED11F6BF67C00087AF4 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/MacOSX.platform/Developer/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - B9C89ED71F6BF77E00087AF4 /* DarwinCompatibilityTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DarwinCompatibilityTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - B9C89EDB1F6BF77E00087AF4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B9C89EDF1F6BF79000087AF4 /* TestFoundation */ = {isa = PBXFileReference; lastKnownFileType = folder; name = TestFoundation; path = ../TestFoundation; sourceTree = ""; }; - B9F3269E1FC714DD003C3599 /* DarwinShims.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DarwinShims.swift; sourceTree = ""; }; - B9F449292483FA1E00B30F02 /* TestNSURL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestNSURL.swift; path = Tests/Foundation/Tests/TestNSURL.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - B917D31920B0DB8B00728EE0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B917D32420B0DB9700728EE0 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B9C89ED41F6BF77E00087AF4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - B917D31D20B0DB8B00728EE0 /* xdgTestHelper */ = { - isa = PBXGroup; - children = ( - ); - path = xdgTestHelper; - sourceTree = ""; - }; - B9C89EB81F6BF47D00087AF4 = { - isa = PBXGroup; - children = ( - ABB1293626D47D9E00401E6C /* TestUnitInformationStorage.swift */, - B9F449292483FA1E00B30F02 /* TestNSURL.swift */, - B91161AE242A385A00BD2907 /* TestDataURLProtocol.swift */, - B94B08342401854E00B244E8 /* main.swift */, - B94B07822401849700B244E8 /* TestAffineTransform.swift */, - 659FB6DF2405E65D00F5F63F /* TestBridging.swift */, - B94B07472401849300B244E8 /* TestBundle.swift */, - B94B078D2401849800B244E8 /* TestByteCountFormatter.swift */, - B94B078F2401849800B244E8 /* TestCachedURLResponse.swift */, - B94B079E2401849A00B244E8 /* TestCalendar.swift */, - B94B079C2401849900B244E8 /* TestCharacterSet.swift */, - B94B07592401849400B244E8 /* TestCodable.swift */, - B94B077F2401849700B244E8 /* TestDate.swift */, - B94B074B2401849300B244E8 /* TestDateComponents.swift */, - B94B07882401849800B244E8 /* TestDateFormatter.swift */, - B94B07462401849300B244E8 /* TestDateInterval.swift */, - B94B07A12401849A00B244E8 /* TestDateIntervalFormatter.swift */, - B94B07902401849800B244E8 /* TestDecimal.swift */, - B94B07982401849900B244E8 /* TestDimension.swift */, - B94B07992401849900B244E8 /* TestEnergyFormatter.swift */, - B94B074D2401849300B244E8 /* TestFileHandle.swift */, - B94B07512401849400B244E8 /* TestFileManager.swift */, - B94B07962401849900B244E8 /* TestHost.swift */, - B94B07812401849700B244E8 /* TestHTTPCookie.swift */, - B94B07682401849500B244E8 /* TestHTTPCookieStorage.swift */, - B94B07542401849400B244E8 /* TestHTTPURLResponse.swift */, - B94B07672401849500B244E8 /* TestIndexPath.swift */, - B94B074A2401849300B244E8 /* TestIndexSet.swift */, - B94B07852401849700B244E8 /* TestISO8601DateFormatter.swift */, - B94B07782401849700B244E8 /* TestJSONEncoder.swift */, - B94B075D2401849400B244E8 /* TestJSONSerialization.swift */, - B94B07562401849400B244E8 /* TestLengthFormatter.swift */, - B94B075B2401849400B244E8 /* TestMassFormatter.swift */, - B94B075E2401849500B244E8 /* TestMeasurement.swift */, - B94B074C2401849300B244E8 /* TestNotification.swift */, - B94B076B2401849600B244E8 /* TestNotificationCenter.swift */, - B94B07632401849500B244E8 /* TestNotificationQueue.swift */, - B94B07A22401849A00B244E8 /* TestNSArray.swift */, - B94B076C2401849600B244E8 /* TestNSAttributedString.swift */, - B94B077D2401849700B244E8 /* TestNSCache.swift */, - B94B07552401849400B244E8 /* TestNSCalendar.swift */, - B94B079D2401849A00B244E8 /* TestNSCompoundPredicate.swift */, - B94B07922401849800B244E8 /* TestNSData.swift */, - B94B07642401849500B244E8 /* TestNSDateComponents.swift */, - B94B07862401849800B244E8 /* TestNSDictionary.swift */, - B94B07652401849500B244E8 /* TestNSError.swift */, - B94B07522401849400B244E8 /* TestNSGeometry.swift */, - B94B07792401849700B244E8 /* TestNSKeyedArchiver.swift */, - B94B07662401849500B244E8 /* TestNSKeyedUnarchiver.swift */, - B94B07722401849600B244E8 /* TestNSLocale.swift */, - B94B078B2401849800B244E8 /* TestNSLock.swift */, - B94B07832401849700B244E8 /* TestNSNull.swift */, - B94B076A2401849500B244E8 /* TestNSNumber.swift */, - B94B07762401849600B244E8 /* TestNSNumberBridging.swift */, - B94B07692401849500B244E8 /* TestNSOrderedSet.swift */, - B94B079B2401849900B244E8 /* TestNSPredicate.swift */, - B94B07932401849900B244E8 /* TestNSRange.swift */, - B94B07872401849800B244E8 /* TestNSRegularExpression.swift */, - B94B07972401849900B244E8 /* TestNSSet.swift */, - B94B075C2401849400B244E8 /* TestNSSortDescriptor.swift */, - B94B07732401849600B244E8 /* TestNSString.swift */, - B94B07752401849600B244E8 /* TestNSTextCheckingResult.swift */, - B94B078A2401849800B244E8 /* TestNSURLRequest.swift */, - B94B07702401849600B244E8 /* TestNSUUID.swift */, - B94B07582401849400B244E8 /* TestNSValue.swift */, - B94B07A02401849A00B244E8 /* TestNumberFormatter.swift */, - B94B07942401849900B244E8 /* TestObjCRuntime.swift */, - B94B07772401849600B244E8 /* TestOperationQueue.swift */, - B94B077E2401849700B244E8 /* TestPersonNameComponents.swift */, - B94B07502401849400B244E8 /* TestPipe.swift */, - B94B07492401849300B244E8 /* TestProcess.swift */, - B94B07532401849400B244E8 /* TestProcessInfo.swift */, - B94B07A32401849A00B244E8 /* TestProgress.swift */, - B94B07602401849500B244E8 /* TestProgressFraction.swift */, - B94B07802401849700B244E8 /* TestPropertyListEncoder.swift */, - B94B07612401849500B244E8 /* TestPropertyListSerialization.swift */, - B94B07452401849300B244E8 /* TestRunLoop.swift */, - B94B076E2401849600B244E8 /* TestScanner.swift */, - B94B07952401849900B244E8 /* TestSocketPort.swift */, - B94B07912401849800B244E8 /* TestStream.swift */, - B94B07712401849600B244E8 /* TestThread.swift */, - B94B074E2401849400B244E8 /* TestTimer.swift */, - B94B079A2401849900B244E8 /* TestTimeZone.swift */, - B94B07842401849700B244E8 /* TestUnit.swift */, - B94B07442401849300B244E8 /* TestUnitConverter.swift */, - B94B078C2401849800B244E8 /* TestUnitVolume.swift */, - B94B078E2401849800B244E8 /* TestURL.swift */, - B94B07572401849400B244E8 /* TestURLCache.swift */, - B94B075A2401849400B244E8 /* TestURLComponents.swift */, - B94B07A42401849A00B244E8 /* TestURLCredential.swift */, - B94B074F2401849400B244E8 /* TestURLCredentialStorage.swift */, - B94B075F2401849500B244E8 /* TestURLProtectionSpace.swift */, - B94B076D2401849600B244E8 /* TestURLProtocol.swift */, - B94B07482401849300B244E8 /* TestURLRequest.swift */, - B94B07892401849800B244E8 /* TestURLResponse.swift */, - B94B07A52401849A00B244E8 /* TestURLSession.swift */, - B94B079F2401849A00B244E8 /* TestURLSessionFTP.swift */, - B94B07742401849600B244E8 /* TestUserDefaults.swift */, - B94B077A2401849700B244E8 /* TestUtils.swift */, - B94B077B2401849700B244E8 /* TestUUID.swift */, - B94B077C2401849700B244E8 /* TestXMLDocument.swift */, - B94B076F2401849600B244E8 /* TestXMLParser.swift */, - B94B0836240185FF00B244E8 /* DarwinShims.swift */, - B94B073F2401847C00B244E8 /* FixtureValues.swift */, - B94B073C2401847C00B244E8 /* FTPServer.swift */, - B94B073D2401847C00B244E8 /* HTTPServer.swift */, - B94B07622401849500B244E8 /* Utilities.swift */, - B94B073E2401847C00B244E8 /* Imports.swift */, - B94B080F240184CF00B244E8 /* NSKeyedUnarchiver-ArrayTest.plist */, - B94B0808240184CE00B244E8 /* NSKeyedUnarchiver-ComplexTest.plist */, - B94B081A240184D000B244E8 /* NSKeyedUnarchiver-ConcreteValueTest.plist */, - B94B0815240184D000B244E8 /* NSKeyedUnarchiver-EdgeInsetsTest.plist */, - B94B0810240184CF00B244E8 /* NSKeyedUnarchiver-NotificationTest.plist */, - B94B0809240184CF00B244E8 /* NSKeyedUnarchiver-OrderedSetTest.plist */, - B94B0818240184D000B244E8 /* NSKeyedUnarchiver-RangeTest.plist */, - B94B0819240184D000B244E8 /* NSKeyedUnarchiver-RectTest.plist */, - B94B080D240184CF00B244E8 /* NSKeyedUnarchiver-URLTest.plist */, - B94B0816240184D000B244E8 /* NSKeyedUnarchiver-UUIDTest.plist */, - B94B081B240184D000B244E8 /* NSString-ISO-8859-1-data.txt */, - B94B081C240184D000B244E8 /* NSString-UTF16-BE-data.txt */, - B94B080A240184CF00B244E8 /* NSString-UTF16-LE-data.txt */, - B94B081D240184D000B244E8 /* NSString-UTF32-BE-data.txt */, - B94B0811240184CF00B244E8 /* NSString-UTF32-LE-data.txt */, - B94B080B240184CF00B244E8 /* NSStringTestData.txt */, - B94B080C240184CF00B244E8 /* NSURLTestData.plist */, - B94B0813240184CF00B244E8 /* NSXMLDocumentTestData.xml */, - B94B0814240184CF00B244E8 /* NSXMLDTDTestData.xml */, - B94B0817240184D000B244E8 /* PropertyList-1.0.dtd */, - B94B080E240184CF00B244E8 /* Test.plist */, - B94B0812240184CF00B244E8 /* TestFileWithZeros.txt */, - B9C89ED81F6BF77E00087AF4 /* DarwinCompatibilityTests */, - B917D31D20B0DB8B00728EE0 /* xdgTestHelper */, - B9C89EC21F6BF47D00087AF4 /* Products */, - B9C89ED01F6BF67C00087AF4 /* Frameworks */, - ); - sourceTree = ""; - }; - B9C89EC21F6BF47D00087AF4 /* Products */ = { - isa = PBXGroup; - children = ( - B9C89ED71F6BF77E00087AF4 /* DarwinCompatibilityTests.xctest */, - B917D31C20B0DB8B00728EE0 /* xdgTestHelper */, - ); - name = Products; - sourceTree = ""; - }; - B9C89ED01F6BF67C00087AF4 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B917D32320B0DB9700728EE0 /* Foundation.framework */, - B9C89ED11F6BF67C00087AF4 /* XCTest.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - B9C89ED81F6BF77E00087AF4 /* DarwinCompatibilityTests */ = { - isa = PBXGroup; - children = ( - B99EAE6F23602FFA00C8FB46 /* xcode-build.sh */, - B99EAE6E23602FFA00C8FB46 /* TestsToSkip.txt */, - B9F3269E1FC714DD003C3599 /* DarwinShims.swift */, - B9C89EDF1F6BF79000087AF4 /* TestFoundation */, - B9C89EDB1F6BF77E00087AF4 /* Info.plist */, - ); - path = DarwinCompatibilityTests; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - B917D31B20B0DB8B00728EE0 /* xdgTestHelper */ = { - isa = PBXNativeTarget; - buildConfigurationList = B917D32220B0DB8B00728EE0 /* Build configuration list for PBXNativeTarget "xdgTestHelper" */; - buildPhases = ( - B917D31820B0DB8B00728EE0 /* Sources */, - B917D31920B0DB8B00728EE0 /* Frameworks */, - B917D31A20B0DB8B00728EE0 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = xdgTestHelper; - productName = xdgTestHelper; - productReference = B917D31C20B0DB8B00728EE0 /* xdgTestHelper */; - productType = "com.apple.product-type.tool"; - }; - B9C89ED61F6BF77E00087AF4 /* DarwinCompatibilityTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = B9C89EDC1F6BF77E00087AF4 /* Build configuration list for PBXNativeTarget "DarwinCompatibilityTests" */; - buildPhases = ( - B9C89ED31F6BF77E00087AF4 /* Sources */, - B9C89ED41F6BF77E00087AF4 /* Frameworks */, - B9C89ED51F6BF77E00087AF4 /* Resources */, - B9F137A020B998C0000B7577 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - B9F1379F20B9984F000B7577 /* PBXTargetDependency */, - ); - name = DarwinCompatibilityTests; - productName = DarwinCompatibilityTests; - productReference = B9C89ED71F6BF77E00087AF4 /* DarwinCompatibilityTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - B9C89EB91F6BF47D00087AF4 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0930; - LastUpgradeCheck = 0900; - ORGANIZATIONNAME = Apple; - TargetAttributes = { - B917D31B20B0DB8B00728EE0 = { - CreatedOnToolsVersion = 9.3.1; - ProvisioningStyle = Automatic; - }; - B9C89ED61F6BF77E00087AF4 = { - CreatedOnToolsVersion = 9.0; - ProvisioningStyle = Automatic; - }; - }; - }; - buildConfigurationList = B9C89EBC1F6BF47D00087AF4 /* Build configuration list for PBXProject "DarwinCompatibilityTests" */; - compatibilityVersion = "Xcode 8.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = B9C89EB81F6BF47D00087AF4; - productRefGroup = B9C89EC21F6BF47D00087AF4 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - B9C89ED61F6BF77E00087AF4 /* DarwinCompatibilityTests */, - B917D31B20B0DB8B00728EE0 /* xdgTestHelper */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - B9C89ED51F6BF77E00087AF4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B94B081E240184D000B244E8 /* NSKeyedUnarchiver-ComplexTest.plist in Resources */, - B94B081F240184D000B244E8 /* NSKeyedUnarchiver-OrderedSetTest.plist in Resources */, - B94B0820240184D000B244E8 /* NSString-UTF16-LE-data.txt in Resources */, - B94B0821240184D000B244E8 /* NSStringTestData.txt in Resources */, - B94B0822240184D000B244E8 /* NSURLTestData.plist in Resources */, - B94B0823240184D000B244E8 /* NSKeyedUnarchiver-URLTest.plist in Resources */, - B94B0824240184D000B244E8 /* Test.plist in Resources */, - B94B0825240184D000B244E8 /* NSKeyedUnarchiver-ArrayTest.plist in Resources */, - B94B0826240184D000B244E8 /* NSKeyedUnarchiver-NotificationTest.plist in Resources */, - B94B0827240184D000B244E8 /* NSString-UTF32-LE-data.txt in Resources */, - B94B0828240184D000B244E8 /* TestFileWithZeros.txt in Resources */, - B94B0829240184D000B244E8 /* NSXMLDocumentTestData.xml in Resources */, - B94B082A240184D000B244E8 /* NSXMLDTDTestData.xml in Resources */, - B94B082B240184D000B244E8 /* NSKeyedUnarchiver-EdgeInsetsTest.plist in Resources */, - B94B082C240184D000B244E8 /* NSKeyedUnarchiver-UUIDTest.plist in Resources */, - B94B082D240184D000B244E8 /* PropertyList-1.0.dtd in Resources */, - B94B082E240184D000B244E8 /* NSKeyedUnarchiver-RangeTest.plist in Resources */, - B94B082F240184D000B244E8 /* NSKeyedUnarchiver-RectTest.plist in Resources */, - B94B0830240184D000B244E8 /* NSKeyedUnarchiver-ConcreteValueTest.plist in Resources */, - B94B0831240184D000B244E8 /* NSString-ISO-8859-1-data.txt in Resources */, - B94B0832240184D000B244E8 /* NSString-UTF16-BE-data.txt in Resources */, - B94B0833240184D000B244E8 /* NSString-UTF32-BE-data.txt in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - B917D31820B0DB8B00728EE0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B94B08352401854E00B244E8 /* main.swift in Sources */, - B9ED84FD23641F7000A58AF2 /* DarwinShims.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B9C89ED31F6BF77E00087AF4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B91161AF242A385A00BD2907 /* TestDataURLProtocol.swift in Sources */, - B94B07A62401849A00B244E8 /* TestUnitConverter.swift in Sources */, - B94B07A72401849A00B244E8 /* TestRunLoop.swift in Sources */, - B94B07A82401849A00B244E8 /* TestDateInterval.swift in Sources */, - B94B07A92401849A00B244E8 /* TestBundle.swift in Sources */, - B94B07AA2401849A00B244E8 /* TestURLRequest.swift in Sources */, - B94B07AB2401849A00B244E8 /* TestProcess.swift in Sources */, - B94B07AC2401849A00B244E8 /* TestIndexSet.swift in Sources */, - B94B07AD2401849A00B244E8 /* TestDateComponents.swift in Sources */, - B94B07AE2401849A00B244E8 /* TestNotification.swift in Sources */, - B94B07AF2401849A00B244E8 /* TestFileHandle.swift in Sources */, - B94B07B02401849A00B244E8 /* TestTimer.swift in Sources */, - B94B07B12401849A00B244E8 /* TestURLCredentialStorage.swift in Sources */, - B94B07B22401849A00B244E8 /* TestPipe.swift in Sources */, - B94B07B32401849A00B244E8 /* TestFileManager.swift in Sources */, - B94B07B42401849A00B244E8 /* TestNSGeometry.swift in Sources */, - B94B07B52401849A00B244E8 /* TestProcessInfo.swift in Sources */, - B94B07B62401849A00B244E8 /* TestHTTPURLResponse.swift in Sources */, - B94B07B72401849A00B244E8 /* TestNSCalendar.swift in Sources */, - B94B07B82401849A00B244E8 /* TestLengthFormatter.swift in Sources */, - B94B07B92401849A00B244E8 /* TestURLCache.swift in Sources */, - B94B07BA2401849A00B244E8 /* TestNSValue.swift in Sources */, - B94B07BB2401849A00B244E8 /* TestCodable.swift in Sources */, - B94B07BC2401849A00B244E8 /* TestURLComponents.swift in Sources */, - B94B07BD2401849A00B244E8 /* TestMassFormatter.swift in Sources */, - B94B07BE2401849A00B244E8 /* TestNSSortDescriptor.swift in Sources */, - B94B07BF2401849A00B244E8 /* TestJSONSerialization.swift in Sources */, - B94B07C02401849A00B244E8 /* TestMeasurement.swift in Sources */, - B94B07C12401849A00B244E8 /* TestURLProtectionSpace.swift in Sources */, - B94B07C22401849A00B244E8 /* TestProgressFraction.swift in Sources */, - B94B07C32401849A00B244E8 /* TestPropertyListSerialization.swift in Sources */, - B94B07C52401849A00B244E8 /* TestNotificationQueue.swift in Sources */, - B94B07C62401849A00B244E8 /* TestNSDateComponents.swift in Sources */, - B94B07C72401849A00B244E8 /* TestNSError.swift in Sources */, - B94B07C82401849B00B244E8 /* TestNSKeyedUnarchiver.swift in Sources */, - B94B07C92401849B00B244E8 /* TestIndexPath.swift in Sources */, - B94B07CA2401849B00B244E8 /* TestHTTPCookieStorage.swift in Sources */, - B94B07CB2401849B00B244E8 /* TestNSOrderedSet.swift in Sources */, - B94B07CC2401849B00B244E8 /* TestNSNumber.swift in Sources */, - B94B07CD2401849B00B244E8 /* TestNotificationCenter.swift in Sources */, - B94B07CE2401849B00B244E8 /* TestNSAttributedString.swift in Sources */, - B94B07CF2401849B00B244E8 /* TestURLProtocol.swift in Sources */, - B94B07D02401849B00B244E8 /* TestScanner.swift in Sources */, - B94B07D12401849B00B244E8 /* TestXMLParser.swift in Sources */, - 659FB6E02405E65D00F5F63F /* TestBridging.swift in Sources */, - B94B07D22401849B00B244E8 /* TestNSUUID.swift in Sources */, - B94B07D32401849B00B244E8 /* TestThread.swift in Sources */, - B94B07D42401849B00B244E8 /* TestNSLocale.swift in Sources */, - B94B07D52401849B00B244E8 /* TestNSString.swift in Sources */, - B94B07D62401849B00B244E8 /* TestUserDefaults.swift in Sources */, - B94B07D72401849B00B244E8 /* TestNSTextCheckingResult.swift in Sources */, - B94B07D82401849B00B244E8 /* TestNSNumberBridging.swift in Sources */, - B9F4492A2483FA1E00B30F02 /* TestNSURL.swift in Sources */, - B94B07D92401849B00B244E8 /* TestOperationQueue.swift in Sources */, - B94B07DA2401849B00B244E8 /* TestJSONEncoder.swift in Sources */, - B94B07DB2401849B00B244E8 /* TestNSKeyedArchiver.swift in Sources */, - B94B07DC2401849B00B244E8 /* TestUtils.swift in Sources */, - B94B07DD2401849B00B244E8 /* TestUUID.swift in Sources */, - B94B07DE2401849B00B244E8 /* TestXMLDocument.swift in Sources */, - B94B07DF2401849B00B244E8 /* TestNSCache.swift in Sources */, - B94B07E02401849B00B244E8 /* TestPersonNameComponents.swift in Sources */, - B94B07E12401849B00B244E8 /* TestDate.swift in Sources */, - B94B07E22401849B00B244E8 /* TestPropertyListEncoder.swift in Sources */, - B94B07E32401849B00B244E8 /* TestHTTPCookie.swift in Sources */, - B94B07E42401849B00B244E8 /* TestAffineTransform.swift in Sources */, - B94B07E52401849B00B244E8 /* TestNSNull.swift in Sources */, - B94B07E62401849B00B244E8 /* TestUnit.swift in Sources */, - B94B07E72401849B00B244E8 /* TestISO8601DateFormatter.swift in Sources */, - B94B07E82401849B00B244E8 /* TestNSDictionary.swift in Sources */, - B94B07E92401849B00B244E8 /* TestNSRegularExpression.swift in Sources */, - B94B07EA2401849B00B244E8 /* TestDateFormatter.swift in Sources */, - B94B07EB2401849B00B244E8 /* TestURLResponse.swift in Sources */, - B94B07EC2401849B00B244E8 /* TestNSURLRequest.swift in Sources */, - B94B07ED2401849B00B244E8 /* TestNSLock.swift in Sources */, - B94B07EE2401849B00B244E8 /* TestUnitVolume.swift in Sources */, - B94B07EF2401849B00B244E8 /* TestByteCountFormatter.swift in Sources */, - B94B07F02401849B00B244E8 /* TestURL.swift in Sources */, - B94B07F12401849B00B244E8 /* TestCachedURLResponse.swift in Sources */, - ABB1293726D47D9E00401E6C /* TestUnitInformationStorage.swift in Sources */, - B94B07F22401849B00B244E8 /* TestDecimal.swift in Sources */, - B94B07F32401849B00B244E8 /* TestStream.swift in Sources */, - B94B07F42401849B00B244E8 /* TestNSData.swift in Sources */, - B94B07F52401849B00B244E8 /* TestNSRange.swift in Sources */, - B94B07F62401849B00B244E8 /* TestObjCRuntime.swift in Sources */, - B94B07F72401849B00B244E8 /* TestSocketPort.swift in Sources */, - B94B07F82401849B00B244E8 /* TestHost.swift in Sources */, - B94B07F92401849B00B244E8 /* TestNSSet.swift in Sources */, - B94B07FA2401849B00B244E8 /* TestDimension.swift in Sources */, - B94B07FB2401849B00B244E8 /* TestEnergyFormatter.swift in Sources */, - B94B07FC2401849B00B244E8 /* TestTimeZone.swift in Sources */, - B94B07FD2401849B00B244E8 /* TestNSPredicate.swift in Sources */, - B94B07FE2401849B00B244E8 /* TestCharacterSet.swift in Sources */, - B94B07FF2401849B00B244E8 /* TestNSCompoundPredicate.swift in Sources */, - B94B08002401849B00B244E8 /* TestCalendar.swift in Sources */, - B94B08012401849B00B244E8 /* TestURLSessionFTP.swift in Sources */, - B94B08022401849B00B244E8 /* TestNumberFormatter.swift in Sources */, - B94B08032401849B00B244E8 /* TestDateIntervalFormatter.swift in Sources */, - B94B08042401849B00B244E8 /* TestNSArray.swift in Sources */, - B94B08052401849B00B244E8 /* TestProgress.swift in Sources */, - B94B08062401849B00B244E8 /* TestURLCredential.swift in Sources */, - B94B08072401849B00B244E8 /* TestURLSession.swift in Sources */, - B94B0837240185FF00B244E8 /* DarwinShims.swift in Sources */, - B94B07402401847C00B244E8 /* FTPServer.swift in Sources */, - B94B07412401847C00B244E8 /* HTTPServer.swift in Sources */, - B94B07422401847C00B244E8 /* Imports.swift in Sources */, - B94B07432401847C00B244E8 /* FixtureValues.swift in Sources */, - B94B07C42401849A00B244E8 /* Utilities.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - B9F1379F20B9984F000B7577 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = B917D31B20B0DB8B00728EE0 /* xdgTestHelper */; - targetProxy = B9F1379E20B9984F000B7577 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - B917D32020B0DB8B00728EE0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CODE_SIGN_STYLE = Automatic; - MACOSX_DEPLOYMENT_TARGET = 10.15.7; - OTHER_SWIFT_FLAGS = "-DDEPLOYMENT_RUNTIME_OBJC -DDARWIN_COMPATIBILITY_TESTS"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - B917D32120B0DB8B00728EE0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CODE_SIGN_STYLE = Automatic; - MACOSX_DEPLOYMENT_TARGET = 10.15.7; - OTHER_SWIFT_FLAGS = "-DDEPLOYMENT_RUNTIME_OBJC -DDARWIN_COMPATIBILITY_TESTS"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - B9C89EC61F6BF47D00087AF4 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15.7; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - B9C89EC71F6BF47D00087AF4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15.7; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - }; - name = Release; - }; - B9C89EDD1F6BF77E00087AF4 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = DarwinCompatibilityTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.15.7; - "OTHER_SWIFT_FLAGS[arch=*]" = "-DDEPLOYMENT_RUNTIME_OBJC -DDARWIN_COMPATIBILITY_TESTS"; - PRODUCT_BUNDLE_IDENTIFIER = org.swift.DarwinCompatibilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - B9C89EDE1F6BF77E00087AF4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = DarwinCompatibilityTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.15.7; - "OTHER_SWIFT_FLAGS[arch=*]" = "-DDEPLOYMENT_RUNTIME_OBJC -DDARWIN_COMPATIBILITY_TESTS"; - PRODUCT_BUNDLE_IDENTIFIER = org.swift.DarwinCompatibilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - B917D32220B0DB8B00728EE0 /* Build configuration list for PBXNativeTarget "xdgTestHelper" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B917D32020B0DB8B00728EE0 /* Debug */, - B917D32120B0DB8B00728EE0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - B9C89EBC1F6BF47D00087AF4 /* Build configuration list for PBXProject "DarwinCompatibilityTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B9C89EC61F6BF47D00087AF4 /* Debug */, - B9C89EC71F6BF47D00087AF4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - B9C89EDC1F6BF77E00087AF4 /* Build configuration list for PBXNativeTarget "DarwinCompatibilityTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B9C89EDD1F6BF77E00087AF4 /* Debug */, - B9C89EDE1F6BF77E00087AF4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = B9C89EB91F6BF47D00087AF4 /* Project object */; -} diff --git a/DarwinCompatibilityTests.xcodeproj/xcshareddata/xcschemes/xdgTestHelper.xcscheme b/DarwinCompatibilityTests.xcodeproj/xcshareddata/xcschemes/xdgTestHelper.xcscheme deleted file mode 100644 index 6c866f64d4..0000000000 --- a/DarwinCompatibilityTests.xcodeproj/xcshareddata/xcschemes/xdgTestHelper.xcscheme +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DarwinCompatibilityTests/DarwinShims.swift b/DarwinCompatibilityTests/DarwinShims.swift deleted file mode 100644 index 8ea2bd0042..0000000000 --- a/DarwinCompatibilityTests/DarwinShims.swift +++ /dev/null @@ -1,75 +0,0 @@ -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// - -// These shims are used solely by the DarwinCompatibilityTests Xcode project to -// allow the TestFoundation tests to compile and run against Darwin's native -// Foundation. -// It contains wrappers for methods (some experimental) added in -// swift-corelibs-foundation which do not exist in Foundation, and other small -// differences. - -import Foundation - - -public typealias unichar = UInt16 - -extension unichar { - public init(unicodeScalarLiteral scalar: UnicodeScalar) { - self.init(scalar.value) - } -} - -extension NSURL { - func checkResourceIsReachable() throws -> Bool { - var error: NSError? - if checkResourceIsReachableAndReturnError(&error) { - return true - } else { - if let e = error { - throw e - } - } - return false - } -} - -extension Thread { - class var mainThread: Thread { - return Thread.main - } -} - -extension JSONSerialization { - class func writeJSONObject(_ obj: Any, toStream stream: OutputStream, options opt: WritingOptions) throws -> Int { - var error: NSError? - let ret = writeJSONObject(obj, to: stream, options: opt, error: &error) - guard ret != 0 else { - throw error! - } - return ret - } -} - -extension NSIndexSet { - func _bridgeToSwift() -> NSIndexSet { - return self - } -} - -extension CharacterSet { - func _bridgeToSwift() -> CharacterSet { - return self - } -} - -extension NSCharacterSet { - func _bridgeToSwift() -> CharacterSet { - return self as CharacterSet - } -} diff --git a/DarwinCompatibilityTests/Info.plist b/DarwinCompatibilityTests/Info.plist deleted file mode 100644 index 6c40a6cd0c..0000000000 --- a/DarwinCompatibilityTests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/DarwinCompatibilityTests/TestsToSkip.txt b/DarwinCompatibilityTests/TestsToSkip.txt deleted file mode 100644 index b425717935..0000000000 --- a/DarwinCompatibilityTests/TestsToSkip.txt +++ /dev/null @@ -1,82 +0,0 @@ -TestBridging -TestByteCountFormatter -TestCachedURLResponse/test_equalCheckingData -TestCachedURLResponse/test_equalCheckingResponse -TestCachedURLResponse/test_equalCheckingStoragePolicy -TestCachedURLResponse/test_hash -TestDataURLProtocol/test_invalidURIs -TestDateFormatter/test_dateStyleMedium -TestDateFormatter/test_expectedTimeZone -TestDateIntervalFormatter/testDecodingFixtures -TestDecimal/test_NSDecimalNumberValues -TestDecimal/test_multiplyingByPowerOf10 -TestFileManager -TestHTTPCookie -TestHTTPCookieStorage/test_removeCookies -TestHTTPURLResponse/test_suggestedFilename_4 -TestISO8601DateFormatter/test_loadingFixtures -TestIndexPath/testLoadedValuesMatch -TestIndexSet/testLoadedValuesMatch -TestJSONSerialization -TestLengthFormatter -TestMeasurement/testLoadedValuesMatch -TestNSArray -TestNSAttributedString/test_unarchivingFixtures -TestNSCache -TestNSData/test_description -TestNSData/test_edgeDebugDescription -TestNSData/test_edgeNoCopyDescription -TestNSData/test_emptyDescription -TestNSData/test_longDebugDescription -TestNSData/test_longDescription -TestNSDateComponents/test_hash -TestNSDictionary/test_copying -TestNSDictionary/test_mutableCopying -TestNSGeometry -TestNSKeyedArchiver -TestNSMutableAttributedString -TestNSNumber -TestNSNumberBridging/testNSNumberBridgeFromDouble -TestNSNumberBridging/testNSNumberBridgeFromFloat -TestNSOrderedSet/test_enumerationUsingBlock -TestNSOrderedSet/test_loadedValuesMatch -TestNSRegularExpression -TestNSSet -TestNSString/test_FromContentsOfURLUsedEncodingUTF16BE -TestNSString/test_FromContentsOfURLUsedEncodingUTF16LE -TestNSString/test_FromContentsOfURLUsedEncodingUTF32BE -TestNSString/test_FromContentsOfURLUsedEncodingUTF32LE -TestNSTextCheckingResult/test_loadedVauesMatch -TestNSURLRequest/test_hash -TestNotificationQueue -TestNumberFormatter/test_settingFormat -TestObjCRuntime -TestProcess/test_currentDirectory -TestProcess/test_plutil -TestProcessInfo/test_globallyUniqueString -TestScanner/testHexFloatingPoint -TestSocketPort/testSendingOneMessageRemoteToLocal -TestURLCache/testNoMemoryUsageIfDisabled -TestURLCache/testRemovingAll -TestURLCache/testRemovingOne -TestURLCache/testRemovingSince -TestURLCache/testShrinkingDiskCapacityEvictsItems -TestURLCache/testShrinkingMemoryCapacityEvictsItems -TestURLCache/testStoragePolicy -TestURLCache/testStoringTwiceOnlyHasOneEntry -TestURLCredentialStorage/test_storageStartsEmpty -TestURLCredentialStorage/test_storageWillSendNotificationWhenAddingDifferentDefaultCredential -TestURLCredentialStorage/test_storageWillSendNotificationWhenAddingExistingCredentialToDifferentSpace -TestURLCredentialStorage/test_storageWillSendNotificationWhenAddingNewCredential -TestURLCredentialStorage/test_storageWillSendNotificationWhenAddingNewDefaultCredential -TestURLCredentialStorage/test_storageWillSendNotificationWhenRemovingDefaultNotification -TestURLCredentialStorage/test_storageWillSendNotificationWhenRemovingExistingCredential -TestURLProtocol/test_customProtocolResponseWithDelegate -TestURLProtocol/test_customProtocolSetDataInResponseWithDelegate -TestURLResponse -TestURLSession -TestURLSessionFTP -TestUnit -TestUserDefaults/test_setValue_NSURL -TestXMLDocument -TestXMLParser diff --git a/DarwinCompatibilityTests/xcode-build.sh b/DarwinCompatibilityTests/xcode-build.sh deleted file mode 100755 index 02935101bb..0000000000 --- a/DarwinCompatibilityTests/xcode-build.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -DERIVED_DATA=dct-xcode-test-build -if [ "$1" == "--clean" ]; then - rm -rf "${DERIVED_DATA}" - shift -fi - -if [ "$1" != "" ]; then - xcodebuild -derivedDataPath $DERIVED_DATA -project DarwinCompatibilityTests.xcodeproj -scheme xdgTestHelper "-only-testing:DarwinCompatibilityTests/$1" test -else - xcodebuild -derivedDataPath $DERIVED_DATA -project DarwinCompatibilityTests.xcodeproj -scheme xdgTestHelper `sed 's/^/-skip-testing:DarwinCompatibilityTests\//g' DarwinCompatibilityTests/TestsToSkip.txt` test -fi diff --git a/Foundation.xcodeproj/project.pbxproj b/Foundation.xcodeproj/project.pbxproj deleted file mode 100644 index baaa84e7ed..0000000000 --- a/Foundation.xcodeproj/project.pbxproj +++ /dev/null @@ -1,4493 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 0383A1751D2E558A0052E5D1 /* TestStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0383A1741D2E558A0052E5D1 /* TestStream.swift */; }; - 03B6F5841F15F339004F25AF /* TestURLProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03B6F5831F15F339004F25AF /* TestURLProtocol.swift */; }; - 151023B426C3336F009371F3 /* CFPropertyList_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 151023B326C3336F009371F3 /* CFPropertyList_Internal.h */; }; - 1513A8432044893F00539722 /* FileManager+XDG.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1513A8422044893F00539722 /* FileManager+XDG.swift */; }; - 1520469B1D8AEABE00D02E36 /* HTTPServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1520469A1D8AEABE00D02E36 /* HTTPServer.swift */; }; - 1539391422A07007006DFF4F /* TestCachedURLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1539391322A07007006DFF4F /* TestCachedURLResponse.swift */; }; - 153CC8352215E00200BFE8F3 /* ScannerAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 153CC8322214C3D100BFE8F3 /* ScannerAPI.swift */; }; - 153E951120111DC500F250BE /* CFKnownLocations.h in Headers */ = {isa = PBXBuildFile; fileRef = 153E950F20111DC500F250BE /* CFKnownLocations.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 153E951220111DC500F250BE /* CFKnownLocations.c in Sources */ = {isa = PBXBuildFile; fileRef = 153E951020111DC500F250BE /* CFKnownLocations.c */; }; - 15496CF1212CAEBA00450F5A /* CFAttributedStringPriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 15496CF0212CAEBA00450F5A /* CFAttributedStringPriv.h */; }; - 15500FB722EA24D10088F082 /* CFXMLInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B40F9EC1C124F45000E72E3 /* CFXMLInterface.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1550106D22EA25280088F082 /* module.map in Headers */ = {isa = PBXBuildFile; fileRef = 1550106B22EA25140088F082 /* module.map */; settings = {ATTRIBUTES = (Public, ); }; }; - 1550107322EA266B0088F082 /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B40F9F31C12524C000E72E3 /* libxml2.dylib */; }; - 1550110D22EA268E0088F082 /* SwiftFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B5D885D1BBC938800234F36 /* SwiftFoundation.framework */; }; - 1550110E22EA26CA0088F082 /* XMLDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B891BD15DFF00C49C64 /* XMLDocument.swift */; }; - 1550110F22EA26CA0088F082 /* XMLDTD.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B8A1BD15DFF00C49C64 /* XMLDTD.swift */; }; - 1550111022EA26CA0088F082 /* XMLDTDNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B8B1BD15DFF00C49C64 /* XMLDTDNode.swift */; }; - 1550111122EA26CA0088F082 /* XMLElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B8C1BD15DFF00C49C64 /* XMLElement.swift */; }; - 1550111222EA26CA0088F082 /* XMLNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B8D1BD15DFF00C49C64 /* XMLNode.swift */; }; - 1550111322EA26CA0088F082 /* XMLParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B8F1BD15DFF00C49C64 /* XMLParser.swift */; }; - 1550111722EA43E00088F082 /* SwiftFoundationXML.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1550110922EA266B0088F082 /* SwiftFoundationXML.framework */; }; - 1550111822EA43E00088F082 /* SwiftFoundationXML.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1550110922EA266B0088F082 /* SwiftFoundationXML.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 1550111B22EA43E20088F082 /* SwiftFoundationNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15B8043A228F376000B30FF6 /* SwiftFoundationNetworking.framework */; }; - 1550111C22EA43E20088F082 /* SwiftFoundationNetworking.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 15B8043A228F376000B30FF6 /* SwiftFoundationNetworking.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 1550111D22EA473B0088F082 /* SwiftFoundationXML.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1550110922EA266B0088F082 /* SwiftFoundationXML.framework */; }; - 155B77AC22E63D2D00D901DE /* TestURLCredentialStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 155B77AB22E63D2D00D901DE /* TestURLCredentialStorage.swift */; }; - 155D3BBC22401D1100B0D38E /* FixtureValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 155D3BBB22401D1100B0D38E /* FixtureValues.swift */; }; - 1569BFA12187D04C009518FA /* CFCalendar_Enumerate.c in Sources */ = {isa = PBXBuildFile; fileRef = 1569BF9F2187D003009518FA /* CFCalendar_Enumerate.c */; }; - 1569BFA22187D04F009518FA /* CFCalendar_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1569BF9D2187CFFF009518FA /* CFCalendar_Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1569BFA52187D0E0009518FA /* CFDateInterval.c in Sources */ = {isa = PBXBuildFile; fileRef = 1569BFA32187D0E0009518FA /* CFDateInterval.c */; }; - 1569BFA62187D0E0009518FA /* CFDateInterval.h in Headers */ = {isa = PBXBuildFile; fileRef = 1569BFA42187D0E0009518FA /* CFDateInterval.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1569BFAD2187D529009518FA /* CFDateComponents.c in Sources */ = {isa = PBXBuildFile; fileRef = 1569BFAB2187D529009518FA /* CFDateComponents.c */; }; - 1569BFAE2187D529009518FA /* CFDateComponents.h in Headers */ = {isa = PBXBuildFile; fileRef = 1569BFAC2187D529009518FA /* CFDateComponents.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 156C846E224069A100607D44 /* Fixtures in Resources */ = {isa = PBXBuildFile; fileRef = 156C846D224069A000607D44 /* Fixtures */; }; - 1578DA09212B4061003C9516 /* CFRuntime_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1578DA08212B4060003C9516 /* CFRuntime_Internal.h */; }; - 1578DA0D212B4070003C9516 /* CFMachPort_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1578DA0A212B406F003C9516 /* CFMachPort_Internal.h */; }; - 1578DA0E212B4070003C9516 /* CFMachPort_Lifetime.c in Sources */ = {isa = PBXBuildFile; fileRef = 1578DA0B212B406F003C9516 /* CFMachPort_Lifetime.c */; }; - 1578DA0F212B4070003C9516 /* CFMachPort_Lifetime.h in Headers */ = {isa = PBXBuildFile; fileRef = 1578DA0C212B406F003C9516 /* CFMachPort_Lifetime.h */; }; - 1578DA11212B407B003C9516 /* CFString_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1578DA10212B407B003C9516 /* CFString_Internal.h */; }; - 1578DA13212B4C35003C9516 /* CFOverflow.h in Headers */ = {isa = PBXBuildFile; fileRef = 1578DA12212B4C35003C9516 /* CFOverflow.h */; }; - 1578DA15212B6F33003C9516 /* CFCollections_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1578DA14212B6F33003C9516 /* CFCollections_Internal.h */; }; - 1581706322B1A29100348861 /* TestURLCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1581706222B1A29100348861 /* TestURLCache.swift */; }; - 158B66A32450D72E00892EFB /* CFNumber_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 158B66A22450D72E00892EFB /* CFNumber_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 158B66A62450F0C400892EFB /* CFBundle_SplitFileName.c in Sources */ = {isa = PBXBuildFile; fileRef = 158B66A42450F0C300892EFB /* CFBundle_SplitFileName.c */; }; - 158B66A72450F0C400892EFB /* CFBundle_SplitFileName.h in Headers */ = {isa = PBXBuildFile; fileRef = 158B66A52450F0C400892EFB /* CFBundle_SplitFileName.h */; }; - 158BCCAA2220A12600750239 /* TestDateIntervalFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 158BCCA92220A12600750239 /* TestDateIntervalFormatter.swift */; }; - 158BCCAD2220A18F00750239 /* CFDateIntervalFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 158BCCAB2220A18F00750239 /* CFDateIntervalFormatter.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 158BCCAE2220A18F00750239 /* CFDateIntervalFormatter.c in Sources */ = {isa = PBXBuildFile; fileRef = 158BCCAC2220A18F00750239 /* CFDateIntervalFormatter.c */; }; - 159870BE228F73F800ADE509 /* SwiftFoundationNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15B8043A228F376000B30FF6 /* SwiftFoundationNetworking.framework */; }; - 159884921DCC877700E3314C /* TestHTTPCookieStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 159884911DCC877700E3314C /* TestHTTPCookieStorage.swift */; }; - 15A619DC245A2895003C8C62 /* libCFXMLInterface.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1550106A22EA24D10088F082 /* libCFXMLInterface.a */; }; - 15A619E0245A298C003C8C62 /* CFXMLInterface.c in Sources */ = {isa = PBXBuildFile; fileRef = 15A619DF245A298C003C8C62 /* CFXMLInterface.c */; }; - 15B80388228F376000B30FF6 /* libcurl.4.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B1FD9E01D6D178E0080E83C /* libcurl.4.dylib */; }; - 15B8039E228F376000B30FF6 /* URLProtectionSpace.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B821BD15DFF00C49C64 /* URLProtectionSpace.swift */; }; - 15B803B4228F376000B30FF6 /* URLCredential.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B7F1BD15DFF00C49C64 /* URLCredential.swift */; }; - 15B803CF228F376000B30FF6 /* URLAuthenticationChallenge.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B7D1BD15DFF00C49C64 /* URLAuthenticationChallenge.swift */; }; - 15B803E6228F376000B30FF6 /* NSURLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B841BD15DFF00C49C64 /* NSURLRequest.swift */; }; - 15B80414228F376000B30FF6 /* URLProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B831BD15DFF00C49C64 /* URLProtocol.swift */; }; - 15B80430228F376000B30FF6 /* HTTPCookieStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B611BD15DFF00C49C64 /* HTTPCookieStorage.swift */; }; - 15B8043B228F385F00B30FF6 /* HTTPCookie.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B601BD15DFF00C49C64 /* HTTPCookie.swift */; }; - 15B8043C228F387400B30FF6 /* URLCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B7E1BD15DFF00C49C64 /* URLCache.swift */; }; - 15B8043D228F38A600B30FF6 /* URLCredentialStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B801BD15DFF00C49C64 /* URLCredentialStorage.swift */; }; - 15B8043E228F38C000B30FF6 /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9BEA31CF380E8009DBD6C /* URLRequest.swift */; }; - 15B8043F228F38C700B30FF6 /* URLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B851BD15DFF00C49C64 /* URLResponse.swift */; }; - 15BB952A250988C50071BD20 /* CFAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15BB9529250988C50071BD20 /* CFAccess.swift */; }; - 15CA750A24F8336A007DF6C1 /* NSCFTypeShims.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15CA750924F8336A007DF6C1 /* NSCFTypeShims.swift */; }; - 15E72A5426C470AE0035CAF8 /* CFListFormatter.c in Sources */ = {isa = PBXBuildFile; fileRef = 15E72A5226C470AE0035CAF8 /* CFListFormatter.c */; }; - 15E72A5526C470AE0035CAF8 /* CFListFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 15E72A5326C470AE0035CAF8 /* CFListFormatter.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 15E72A5826C472630035CAF8 /* CFRelativeDateTimeFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 15E72A5626C472620035CAF8 /* CFRelativeDateTimeFormatter.h */; }; - 15E72A5926C472630035CAF8 /* CFRelativeDateTimeFormatter.c in Sources */ = {isa = PBXBuildFile; fileRef = 15E72A5726C472630035CAF8 /* CFRelativeDateTimeFormatter.c */; }; - 15F10CDC218909BF00D88114 /* TestNSCalendar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15F10CDB218909BF00D88114 /* TestNSCalendar.swift */; }; - 15FCF4E323021C020095E52E /* TestSocketPort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15FCF4E223021C020095E52E /* TestSocketPort.swift */; }; - 15FF004B229348F2004AD205 /* CFURLSessionInterface.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B1FD9C11D6D160F0080E83C /* CFURLSessionInterface.c */; }; - 15FF00CB22934A3C004AD205 /* CFURLSessionInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B1FD9C21D6D160F0080E83C /* CFURLSessionInterface.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 15FF00CC22934AD7004AD205 /* libCFURLSessionInterface.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 15FF00CA229348F2004AD205 /* libCFURLSessionInterface.a */; }; - 15FF00CE22934B78004AD205 /* module.map in Headers */ = {isa = PBXBuildFile; fileRef = 15FF00CD22934B49004AD205 /* module.map */; settings = {ATTRIBUTES = (Public, ); }; }; - 231503DB1D8AEE5D0061694D /* TestDecimal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 231503DA1D8AEE5D0061694D /* TestDecimal.swift */; }; - 294E3C1D1CC5E19300E4F44C /* TestNSAttributedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294E3C1C1CC5E19300E4F44C /* TestNSAttributedString.swift */; }; - 2EBE67A51C77BF0E006583D5 /* TestDateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EBE67A31C77BF05006583D5 /* TestDateFormatter.swift */; }; - 316577C425214A8400492943 /* URLSessionTaskMetrics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 316577C325214A8400492943 /* URLSessionTaskMetrics.swift */; }; - 3E55A2331F52463B00082000 /* TestUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E55A2321F52463B00082000 /* TestUnit.swift */; }; - 3EA9D6701EF0532D00B362D6 /* TestJSONEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA9D66F1EF0532D00B362D6 /* TestJSONEncoder.swift */; }; - 3EDCE50C1EF04D8100C2EC04 /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EDCE5051EF04D8100C2EC04 /* Codable.swift */; }; - 3EDCE5101EF04D8100C2EC04 /* JSONEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EDCE5091EF04D8100C2EC04 /* JSONEncoder.swift */; }; - 4704393226BDFF34000D213E /* TestAttributedStringPerformance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4704392E26BDFF33000D213E /* TestAttributedStringPerformance.swift */; }; - 4704393326BDFF34000D213E /* TestAttributedStringCOW.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4704392F26BDFF33000D213E /* TestAttributedStringCOW.swift */; }; - 4704393426BDFF34000D213E /* TestAttributedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4704393026BDFF33000D213E /* TestAttributedString.swift */; }; - 4704393526BDFF34000D213E /* TestAttributedStringSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4704393126BDFF34000D213E /* TestAttributedStringSupport.swift */; }; - 474E124D26BCD6D00016C28A /* AttributedString+Locking.swift in Sources */ = {isa = PBXBuildFile; fileRef = 474E124C26BCD6D00016C28A /* AttributedString+Locking.swift */; }; - 476E415226BDAA150043E21E /* Morphology.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476E415126BDAA150043E21E /* Morphology.swift */; }; - 4778104C26BC9F810071E8A1 /* FoundationAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4778104526BC9F810071E8A1 /* FoundationAttributes.swift */; }; - 4778104E26BC9F810071E8A1 /* AttributedStringRunCoalescing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4778104726BC9F810071E8A1 /* AttributedStringRunCoalescing.swift */; }; - 4778104F26BC9F810071E8A1 /* AttributedStringAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4778104826BC9F810071E8A1 /* AttributedStringAttribute.swift */; }; - 4778105026BC9F810071E8A1 /* AttributedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4778104926BC9F810071E8A1 /* AttributedString.swift */; }; - 4778105126BC9F810071E8A1 /* Conversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4778104A26BC9F810071E8A1 /* Conversion.swift */; }; - 4778105226BC9F810071E8A1 /* AttributedStringCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4778104B26BC9F810071E8A1 /* AttributedStringCodable.swift */; }; - 49D55FA125E84FE5007BD3B3 /* JSONSerialization+Parser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D55FA025E84FE5007BD3B3 /* JSONSerialization+Parser.swift */; }; - 528776141BF2629700CB0090 /* FoundationErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522C253A1BF16E1600804FC6 /* FoundationErrors.swift */; }; - 528776191BF27D9500CB0090 /* Test.plist in Resources */ = {isa = PBXBuildFile; fileRef = 528776181BF27D9500CB0090 /* Test.plist */; }; - 555683BD1C1250E70041D4C6 /* TestUserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 555683BC1C1250E70041D4C6 /* TestUserDefaults.swift */; }; - 559451EC1F706BFA002807FB /* CFXMLPreferencesDomain.c in Sources */ = {isa = PBXBuildFile; fileRef = 559451EA1F706BF5002807FB /* CFXMLPreferencesDomain.c */; }; - 5A6AC80C28E7BC8F00A22FA7 /* WebSocketURLProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A6AC80A28E7652D00A22FA7 /* WebSocketURLProtocol.swift */; }; - 5B0163BB1D024EB7003CCD96 /* DateComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0163BA1D024EB7003CCD96 /* DateComponents.swift */; }; - 5B13B3251C582D4700651CE2 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA66F6381BF1619600136161 /* main.swift */; }; - 5B13B3261C582D4C00651CE2 /* TestAffineTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = C93559281C12C49F009FD6A9 /* TestAffineTransform.swift */; }; - 5B13B3271C582D4C00651CE2 /* TestNSArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA66F63C1BF1619600136161 /* TestNSArray.swift */; }; - 5B13B3281C582D4C00651CE2 /* TestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E203B8C1C1303BB003B2576 /* TestBundle.swift */; }; - 5B13B3291C582D4C00651CE2 /* TestCalendar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52829AD61C160D64003BC4EF /* TestCalendar.swift */; }; - 5B13B32A1C582D4C00651CE2 /* TestCharacterSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC1D8BC1BF3ADFE009D3973 /* TestCharacterSet.swift */; }; - 5B13B32B1C582D4C00651CE2 /* TestNSData.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCDBB8321C1768AC00313299 /* TestNSData.swift */; }; - 5B13B32C1C582D4C00651CE2 /* TestDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22B9C1E01C165D7A00DECFF9 /* TestDate.swift */; }; - 5B13B32D1C582D4C00651CE2 /* TestNSDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA66F63D1BF1619600136161 /* TestNSDictionary.swift */; }; - 5B13B32F1C582D4C00651CE2 /* TestNSGeometry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D28DE61C13AE9000494606 /* TestNSGeometry.swift */; }; - 5B13B3301C582D4C00651CE2 /* TestHTTPCookie.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848A30571C137B3500C83206 /* TestHTTPCookie.swift */; }; - 5B13B3311C582D4C00651CE2 /* TestIndexPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE109261C17CCBF007367B5 /* TestIndexPath.swift */; }; - 5B13B3321C582D4C00651CE2 /* TestIndexSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA66F63E1BF1619600136161 /* TestIndexSet.swift */; }; - 5B13B3331C582D4C00651CE2 /* TestJSONSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EB6A15C1C188FC40037DCB8 /* TestJSONSerialization.swift */; }; - 5B13B3341C582D4C00651CE2 /* TestNSKeyedArchiver.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3A597F11C33C68E00295652 /* TestNSKeyedArchiver.swift */; }; - 5B13B3351C582D4C00651CE2 /* TestNSKeyedUnarchiver.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3A597EF1C33A9E500295652 /* TestNSKeyedUnarchiver.swift */; }; - 5B13B3361C582D4C00651CE2 /* TestNSLocale.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61A395F91C2484490029B337 /* TestNSLocale.swift */; }; - 5B13B3371C582D4C00651CE2 /* TestNotificationCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61F8AE7C1C180FC600FB62F0 /* TestNotificationCenter.swift */; }; - 5B13B3381C582D4C00651CE2 /* TestNotificationQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EF673AB1C28B527006212A3 /* TestNotificationQueue.swift */; }; - 5B13B3391C582D4C00651CE2 /* TestNSNull.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6F17921C48631C00935030 /* TestNSNull.swift */; }; - 5B13B33A1C582D4C00651CE2 /* TestNSNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA66F63F1BF1619600136161 /* TestNSNumber.swift */; }; - 5B13B33B1C582D4C00651CE2 /* TestNumberFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6F17931C48631C00935030 /* TestNumberFormatter.swift */; }; - 5B13B33C1C582D4C00651CE2 /* TestNSOrderedSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D834F9931C31C4060023812A /* TestNSOrderedSet.swift */; }; - 5B13B33D1C582D4C00651CE2 /* TestPipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DC1D07F1C12EEEF00B5948A /* TestPipe.swift */; }; - 5B13B33E1C582D4C00651CE2 /* TestProcessInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 400E22641C1A4E58007C5933 /* TestProcessInfo.swift */; }; - 5B13B33F1C582D4C00651CE2 /* TestPropertyListSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA66F6401BF1619600136161 /* TestPropertyListSerialization.swift */; }; - 5B13B3401C582D4C00651CE2 /* TestNSRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = E876A73D1C1180E000F279EC /* TestNSRange.swift */; }; - 5B13B3411C582D4C00651CE2 /* TestNSRegularExpression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0C6C211C1E07E600705A0E /* TestNSRegularExpression.swift */; }; - 5B13B3421C582D4C00651CE2 /* TestRunLoop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61E0117B1C1B554D000037DD /* TestRunLoop.swift */; }; - 5B13B3431C582D4C00651CE2 /* TestScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844DC3321C17584F005611F9 /* TestScanner.swift */; }; - 5B13B3441C582D4C00651CE2 /* TestNSSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA66F6411BF1619600136161 /* TestNSSet.swift */; }; - 5B13B3451C582D4C00651CE2 /* TestNSString.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA66F6421BF1619600136161 /* TestNSString.swift */; }; - 5B13B3461C582D4C00651CE2 /* TestProcess.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6F17941C48631C00935030 /* TestProcess.swift */; }; - 5B13B3481C582D4C00651CE2 /* TestTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61D6C9EE1C1DFE9500DEF583 /* TestTimer.swift */; }; - 5B13B3491C582D4C00651CE2 /* TestTimeZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BA558D1C16F90900F48C54 /* TestTimeZone.swift */; }; - 5B13B34A1C582D4C00651CE2 /* TestURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA66F6431BF1619600136161 /* TestURL.swift */; }; - 5B13B34B1C582D4C00651CE2 /* TestNSURLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83712C8D1C1684900049AD49 /* TestNSURLRequest.swift */; }; - 5B13B34C1C582D4C00651CE2 /* TestURLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A7D6FBA1C16439400957E2E /* TestURLResponse.swift */; }; - 5B13B34D1C582D4C00651CE2 /* TestNSUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2A9D75B1C15C08B00993803 /* TestNSUUID.swift */; }; - 5B13B34E1C582D4C00651CE2 /* TestXMLDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6F17951C48631C00935030 /* TestXMLDocument.swift */; }; - 5B13B34F1C582D4C00651CE2 /* TestXMLParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B40F9F11C125187000E72E3 /* TestXMLParser.swift */; }; - 5B13B3501C582D4C00651CE2 /* TestUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6F17961C48631C00935030 /* TestUtils.swift */; }; - 5B13B3511C582D4C00651CE2 /* TestByteCountFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5A34B551C18C85D00FD972B /* TestByteCountFormatter.swift */; }; - 5B13B3521C582D4C00651CE2 /* TestNSValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3047AEB1C38BC3300295652 /* TestNSValue.swift */; }; - 5B1FD9C51D6D16150080E83C /* CFURLSessionInterface.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B1FD9C11D6D160F0080E83C /* CFURLSessionInterface.c */; }; - 5B1FD9E11D6D178E0080E83C /* libcurl.4.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B1FD9E01D6D178E0080E83C /* libcurl.4.dylib */; }; - 5B1FD9E31D6D17B80080E83C /* TestURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B1FD9E21D6D17B80080E83C /* TestURLSession.swift */; }; - 5B23AB891CE62D4D000DB898 /* ReferenceConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B23AB881CE62D4D000DB898 /* ReferenceConvertible.swift */; }; - 5B23AB8B1CE62F9B000DB898 /* PersonNameComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B23AB8A1CE62F9B000DB898 /* PersonNameComponents.swift */; }; - 5B23AB8D1CE63228000DB898 /* URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B23AB8C1CE63228000DB898 /* URL.swift */; }; - 5B2A98CD1D021886008A0B75 /* NSCFCharacterSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B2A98CC1D021886008A0B75 /* NSCFCharacterSet.swift */; }; - 5B2B59821C24D00500271109 /* CFStream.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89031BBC9BC300234F36 /* CFStream.c */; }; - 5B2B59831C24D00C00271109 /* CFSocketStream.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89871BBDB1B400234F36 /* CFSocketStream.c */; }; - 5B2B59841C24D01100271109 /* CFConcreteStreams.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89831BBDB13800234F36 /* CFConcreteStreams.c */; }; - 5B4092101D1B304C0022B067 /* StringEncodings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B40920F1D1B304C0022B067 /* StringEncodings.swift */; }; - 5B4092121D1B30B40022B067 /* ExtraStringAPIs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B4092111D1B30B40022B067 /* ExtraStringAPIs.swift */; }; - 5B40F9F01C125011000E72E3 /* CFXMLInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B40F9EC1C124F45000E72E3 /* CFXMLInterface.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B40F9F41C12524C000E72E3 /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B40F9F31C12524C000E72E3 /* libxml2.dylib */; }; - 5B424C761D0B6E5B007B39C8 /* IndexPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B424C751D0B6E5B007B39C8 /* IndexPath.swift */; }; - 5B5BFEAC1E6CC0C200AC8D9E /* NSCFBoolean.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5BFEAB1E6CC0C200AC8D9E /* NSCFBoolean.swift */; }; - 5B5C5EF01CE61FA4001346BD /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5C5EEF1CE61FA4001346BD /* Date.swift */; }; - 5B5D89761BBDADD300234F36 /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B5D89751BBDADD300234F36 /* libicucore.dylib */; }; - 5B5D89781BBDADDB00234F36 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B5D89771BBDADDB00234F36 /* libz.dylib */; }; - 5B6228BB1C179041009587FE /* CFRunArray.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B6228BA1C179041009587FE /* CFRunArray.c */; }; - 5B6228BD1C179049009587FE /* CFRunArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B6228BC1C179049009587FE /* CFRunArray.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B6228BF1C179052009587FE /* CFAttributedString.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B6228BE1C179052009587FE /* CFAttributedString.c */; }; - 5B6228C11C17905B009587FE /* CFAttributedString.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B6228C01C17905B009587FE /* CFAttributedString.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B6E11A71DA451E7009B48A3 /* CFLocale_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B6E11A61DA451E7009B48A3 /* CFLocale_Private.h */; }; - 5B6E11A91DA45EB5009B48A3 /* CFDateFormatter_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B6E11A81DA45EB5009B48A3 /* CFDateFormatter_Private.h */; }; - 5B78185B1D6CB5D2004A01F2 /* CGFloat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B7818591D6CB5CD004A01F2 /* CGFloat.swift */; }; - 5B7C8A721BEA7FCE00C5B690 /* CFBase.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D895D1BBDABBF00234F36 /* CFBase.c */; }; - 5B7C8A731BEA7FCE00C5B690 /* CFFileUtilities.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89851BBDB18D00234F36 /* CFFileUtilities.c */; }; - 5B7C8A741BEA7FCE00C5B690 /* CFPlatform.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D897B1BBDAE0800234F36 /* CFPlatform.c */; }; - 5B7C8A751BEA7FCE00C5B690 /* CFRuntime.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88C31BBC981C00234F36 /* CFRuntime.c */; }; - 5B7C8A761BEA7FCE00C5B690 /* CFSortFunctions.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D897D1BBDAEE600234F36 /* CFSortFunctions.c */; }; - 5B7C8A771BEA7FCE00C5B690 /* CFSystemDirectories.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89731BBDAD9900234F36 /* CFSystemDirectories.c */; }; - 5B7C8A781BEA7FCE00C5B690 /* CFUtilities.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89601BBDABF400234F36 /* CFUtilities.c */; }; - 5B7C8A791BEA7FCE00C5B690 /* CFUUID.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89541BBDAA0100234F36 /* CFUUID.c */; }; - 5B7C8A7A1BEA7FCE00C5B690 /* CFArray.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88781BBC956C00234F36 /* CFArray.c */; }; - 5B7C8A7B1BEA7FCE00C5B690 /* CFBag.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89161BBC9C5500234F36 /* CFBag.c */; }; - 5B7C8A7C1BEA7FCE00C5B690 /* CFBasicHash.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89581BBDAAC600234F36 /* CFBasicHash.c */; }; - 5B7C8A7D1BEA7FCE00C5B690 /* CFBinaryHeap.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89641BBDAC3E00234F36 /* CFBinaryHeap.c */; }; - 5B7C8A7E1BEA7FCE00C5B690 /* CFBitVector.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89681BBDACB800234F36 /* CFBitVector.c */; }; - 5B7C8A7F1BEA7FCE00C5B690 /* CFData.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88871BBC962500234F36 /* CFData.c */; }; - 5B7C8A801BEA7FCE00C5B690 /* CFDictionary.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D888D1BBC964D00234F36 /* CFDictionary.c */; }; - 5B7C8A811BEA7FCE00C5B690 /* CFSet.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88C91BBC984900234F36 /* CFSet.c */; }; - 5B7C8A821BEA7FCE00C5B690 /* CFStorage.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89701BBDAD4F00234F36 /* CFStorage.c */; }; - 5B7C8A831BEA7FCE00C5B690 /* CFTree.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89801BBDAF0300234F36 /* CFTree.c */; }; - 5B7C8A841BEA7FDB00C5B690 /* CFError.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88A41BBC970D00234F36 /* CFError.c */; }; - 5B7C8A851BEA7FDB00C5B690 /* CFCalendar.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D896D1BBDAD2000234F36 /* CFCalendar.c */; }; - 5B7C8A861BEA7FDB00C5B690 /* CFDateFormatter.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D890B1BBC9BEF00234F36 /* CFDateFormatter.c */; }; - 5B7C8A871BEA7FDB00C5B690 /* CFLocale.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88AC1BBC974700234F36 /* CFLocale.c */; }; - 5B7C8A881BEA7FDB00C5B690 /* CFLocaleIdentifier.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88AD1BBC974700234F36 /* CFLocaleIdentifier.c */; }; - 5B7C8A891BEA7FDB00C5B690 /* CFNumberFormatter.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89121BBC9C3400234F36 /* CFNumberFormatter.c */; }; - 5B7C8A8A1BEA7FDB00C5B690 /* CFLocaleKeys.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89A91BBDC11100234F36 /* CFLocaleKeys.c */; }; - 5B7C8A8B1BEA7FE200C5B690 /* CFBigNumber.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D891E1BBDA65F00234F36 /* CFBigNumber.c */; }; - 5B7C8A8C1BEA7FE200C5B690 /* CFDate.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88B91BBC97D100234F36 /* CFDate.c */; }; - 5B7C8A8D1BEA7FE200C5B690 /* CFNumber.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88D41BBC9AC500234F36 /* CFNumber.c */; }; - 5B7C8A8E1BEA7FE200C5B690 /* CFTimeZone.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88BF1BBC980100234F36 /* CFTimeZone.c */; }; - 5B7C8A8F1BEA7FEC00C5B690 /* CFBinaryPList.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89891BBDB1EF00234F36 /* CFBinaryPList.c */; }; - 5B7C8A901BEA7FEC00C5B690 /* CFOldStylePList.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D898F1BBDBFB100234F36 /* CFOldStylePList.c */; }; - 5B7C8A911BEA7FEC00C5B690 /* CFPropertyList.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88FB1BBC9B9500234F36 /* CFPropertyList.c */; }; - 5B7C8A961BEA7FF900C5B690 /* CFBundle_Binary.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88EE1BBC9B5C00234F36 /* CFBundle_Binary.c */; }; - 5B7C8A971BEA7FF900C5B690 /* CFBundle_Grok.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88ED1BBC9B5C00234F36 /* CFBundle_Grok.c */; }; - 5B7C8A981BEA7FF900C5B690 /* CFBundle_InfoPlist.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88EB1BBC9B5C00234F36 /* CFBundle_InfoPlist.c */; }; - 5B7C8A991BEA7FF900C5B690 /* CFBundle_Locale.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D896B1BBDACE400234F36 /* CFBundle_Locale.c */; }; - 5B7C8A9A1BEA7FF900C5B690 /* CFBundle_Resources.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88EA1BBC9B5C00234F36 /* CFBundle_Resources.c */; }; - 5B7C8A9B1BEA7FF900C5B690 /* CFBundle_Strings.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88EC1BBC9B5C00234F36 /* CFBundle_Strings.c */; }; - 5B7C8A9C1BEA7FF900C5B690 /* CFBundle.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88E91BBC9B5C00234F36 /* CFBundle.c */; }; - 5B7C8AA01BEA7FF900C5B690 /* CFPlugIn.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89481BBDA9EE00234F36 /* CFPlugIn.c */; }; - 5B7C8AA11BEA800400C5B690 /* CFApplicationPreferences.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D886A1BBC948300234F36 /* CFApplicationPreferences.c */; }; - 5B7C8AA21BEA800400C5B690 /* CFPreferences.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D898B1BBDBF6500234F36 /* CFPreferences.c */; }; - 5B7C8AAA1BEA800D00C5B690 /* CFBurstTrie.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89351BBDA76300234F36 /* CFBurstTrie.c */; }; - 5B7C8AAB1BEA800D00C5B690 /* CFCharacterSet.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88921BBC969400234F36 /* CFCharacterSet.c */; }; - 5B7C8AAC1BEA800D00C5B690 /* CFString.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D887D1BBC960100234F36 /* CFString.c */; }; - 5B7C8AAD1BEA800D00C5B690 /* CFStringEncodings.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D887F1BBC960100234F36 /* CFStringEncodings.c */; }; - 5B7C8AAE1BEA800D00C5B690 /* CFStringScanner.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89A71BBDC09700234F36 /* CFStringScanner.c */; }; - 5B7C8AAF1BEA800D00C5B690 /* CFStringUtilities.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88801BBC960100234F36 /* CFStringUtilities.c */; }; - 5B7C8AB01BEA801700C5B690 /* CFBuiltinConverters.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D898D1BBDBF8C00234F36 /* CFBuiltinConverters.c */; }; - 5B7C8AB11BEA801700C5B690 /* CFICUConverters.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D899F1BBDC01E00234F36 /* CFICUConverters.c */; }; - 5B7C8AB21BEA801700C5B690 /* CFPlatformConverters.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89A31BBDC04100234F36 /* CFPlatformConverters.c */; }; - 5B7C8AB31BEA801700C5B690 /* CFStringEncodingConverter.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89261BBDA6DD00234F36 /* CFStringEncodingConverter.c */; }; - 5B7C8AB41BEA801700C5B690 /* CFStringEncodingDatabase.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89A51BBDC06800234F36 /* CFStringEncodingDatabase.c */; }; - 5B7C8AB51BEA801700C5B690 /* CFUniChar.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D892C1BBDA71100234F36 /* CFUniChar.c */; }; - 5B7C8AB61BEA801700C5B690 /* CFUnicodeDecomposition.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D893E1BBDA9A400234F36 /* CFUnicodeDecomposition.c */; }; - 5B7C8AB71BEA801700C5B690 /* CFUnicodePrecomposition.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89401BBDA9A400234F36 /* CFUnicodePrecomposition.c */; }; - 5B7C8AB81BEA802100C5B690 /* CFURLComponents_URIParser.c in Sources */ = {isa = PBXBuildFile; fileRef = EA313DFD1BE7F2E90060A403 /* CFURLComponents_URIParser.c */; }; - 5B7C8AB91BEA802100C5B690 /* CFURLComponents.c in Sources */ = {isa = PBXBuildFile; fileRef = EA313DFE1BE7F2E90060A403 /* CFURLComponents.c */; }; - 5B7C8ABA1BEA802100C5B690 /* CFURL.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88981BBC96C300234F36 /* CFURL.c */; }; - 5B7C8ABB1BEA802100C5B690 /* CFURLAccess.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D889E1BBC96D400234F36 /* CFURLAccess.c */; }; - 5B7C8ABC1BEA805C00C5B690 /* CFAvailability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88741BBC954000234F36 /* CFAvailability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ABD1BEA806100C5B690 /* CFBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88721BBC952A00234F36 /* CFBase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ABE1BEA807A00C5B690 /* CFByteOrder.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89191BBDA4EE00234F36 /* CFByteOrder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ABF1BEA807A00C5B690 /* CFUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D895F1BBDABF400234F36 /* CFUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AC01BEA807A00C5B690 /* CFUUID.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89531BBDAA0100234F36 /* CFUUID.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AC21BEA80FC00C5B690 /* CFArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88771BBC956C00234F36 /* CFArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AC31BEA80FC00C5B690 /* CFBag.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89151BBC9C5500234F36 /* CFBag.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AC41BEA80FC00C5B690 /* CFBinaryHeap.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89631BBDAC3E00234F36 /* CFBinaryHeap.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AC51BEA80FC00C5B690 /* CFBitVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89671BBDACB800234F36 /* CFBitVector.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AC61BEA80FC00C5B690 /* CFData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88861BBC962500234F36 /* CFData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AC71BEA80FC00C5B690 /* CFDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D888C1BBC964D00234F36 /* CFDictionary.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AC81BEA80FC00C5B690 /* CFSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88C81BBC984900234F36 /* CFSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AC91BEA80FC00C5B690 /* CFTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D897F1BBDAF0300234F36 /* CFTree.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ACA1BEA80FC00C5B690 /* CFError.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88A51BBC970D00234F36 /* CFError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ACB1BEA80FC00C5B690 /* CFCalendar.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D891B1BBDA50800234F36 /* CFCalendar.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ACC1BEA80FC00C5B690 /* CFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89091BBC9BEF00234F36 /* CFDateFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ACD1BEA80FC00C5B690 /* CFLocale.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88AB1BBC974700234F36 /* CFLocale.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ACE1BEA80FC00C5B690 /* CFNumberFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89111BBC9C3400234F36 /* CFNumberFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ACF1BEA80FC00C5B690 /* CFDate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88B81BBC97D100234F36 /* CFDate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AD01BEA80FC00C5B690 /* CFNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88D31BBC9AC500234F36 /* CFNumber.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AD11BEA80FC00C5B690 /* CFTimeZone.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88BE1BBC980100234F36 /* CFTimeZone.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AD21BEA80FC00C5B690 /* CFPropertyList.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88FA1BBC9B9500234F36 /* CFPropertyList.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AD51BEA80FC00C5B690 /* CFBundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88E51BBC9B5C00234F36 /* CFBundle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AD61BEA80FC00C5B690 /* CFPlugIn.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89451BBDA9EE00234F36 /* CFPlugIn.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AD71BEA80FC00C5B690 /* CFPlugInCOM.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89461BBDA9EE00234F36 /* CFPlugInCOM.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AD81BEA80FC00C5B690 /* CFPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D886C1BBC94C400234F36 /* CFPreferences.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AD91BEA80FC00C5B690 /* CFMachPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88CF1BBC9AAC00234F36 /* CFMachPort.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ADA1BEA80FC00C5B690 /* CFMessagePort.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88DB1BBC9AEC00234F36 /* CFMessagePort.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ADB1BEA80FC00C5B690 /* CFRunLoop.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88D71BBC9AD800234F36 /* CFRunLoop.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ADC1BEA80FC00C5B690 /* CFSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88DF1BBC9B0300234F36 /* CFSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ADD1BEA80FC00C5B690 /* CFStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88FF1BBC9BC300234F36 /* CFStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ADE1BEA80FC00C5B690 /* CFCharacterSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88901BBC969400234F36 /* CFCharacterSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8ADF1BEA80FC00C5B690 /* CFString.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D887C1BBC960100234F36 /* CFString.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AE01BEA80FC00C5B690 /* CFStringEncodingExt.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D890F1BBC9C1B00234F36 /* CFStringEncodingExt.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AE11BEA80FC00C5B690 /* CFURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88971BBC96C300234F36 /* CFURL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AE21BEA80FC00C5B690 /* CFURLAccess.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D889D1BBC96D400234F36 /* CFURLAccess.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7C8AE31BEA81AC00C5B690 /* CFLogUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88BC1BBC97E400234F36 /* CFLogUtilities.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AE41BEA81AC00C5B690 /* CFPriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88CC1BBC986300234F36 /* CFPriv.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AE51BEA81AC00C5B690 /* ForFoundationOnly.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88C61BBC983600234F36 /* ForFoundationOnly.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AE61BEA81AC00C5B690 /* ForSwiftFoundationOnly.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BF7AEC21BCD568D008F214A /* ForSwiftFoundationOnly.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AE71BEA81AC00C5B690 /* CFBasicHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89571BBDAAC600234F36 /* CFBasicHash.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AE81BEA81AC00C5B690 /* CFStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D896F1BBDAD4F00234F36 /* CFStorage.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AE91BEA81AC00C5B690 /* CFLocaleInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88AE1BBC974700234F36 /* CFLocaleInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AEA1BEA81AC00C5B690 /* CFICULogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BDC3F191BCC440100ED97BB /* CFICULogging.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AEB1BEA81AC00C5B690 /* CFBigNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D891D1BBDA65F00234F36 /* CFBigNumber.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AED1BEA81AC00C5B690 /* CFBundle_BinaryTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88E71BBC9B5C00234F36 /* CFBundle_BinaryTypes.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AEE1BEA81AC00C5B690 /* CFBundle_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88E81BBC9B5C00234F36 /* CFBundle_Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AEF1BEA81AC00C5B690 /* CFBundlePriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88E61BBC9B5C00234F36 /* CFBundlePriv.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AF01BEA81AC00C5B690 /* CFPlugIn_Factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89471BBDA9EE00234F36 /* CFPlugIn_Factory.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AF11BEA81AC00C5B690 /* CFStreamAbstract.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89021BBC9BC300234F36 /* CFStreamAbstract.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AF21BEA81AC00C5B690 /* CFStreamInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89011BBC9BC300234F36 /* CFStreamInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AF31BEA81AC00C5B690 /* CFStreamPriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89001BBC9BC300234F36 /* CFStreamPriv.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AF41BEA81AC00C5B690 /* CFCharacterSetPriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88911BBC969400234F36 /* CFCharacterSetPriv.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AF51BEA81AC00C5B690 /* CFStringDefaultEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D887E1BBC960100234F36 /* CFStringDefaultEncoding.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AF61BEA81AC00C5B690 /* CFStringEncodingConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89241BBDA6DD00234F36 /* CFStringEncodingConverter.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AF71BEA81AC00C5B690 /* CFStringEncodingConverterExt.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89221BBDA6C000234F36 /* CFStringEncodingConverterExt.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AF81BEA81AC00C5B690 /* CFStringEncodingConverterPriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89251BBDA6DD00234F36 /* CFStringEncodingConverterPriv.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AF91BEA81AC00C5B690 /* CFStringEncodingDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89301BBDA73600234F36 /* CFStringEncodingDatabase.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AFA1BEA81AC00C5B690 /* CFUniChar.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D892A1BBDA71100234F36 /* CFUniChar.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AFB1BEA81AC00C5B690 /* CFUniCharPriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D892B1BBDA71100234F36 /* CFUniCharPriv.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AFC1BEA81AC00C5B690 /* CFUnicodeDecomposition.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D893D1BBDA9A400234F36 /* CFUnicodeDecomposition.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AFD1BEA81AC00C5B690 /* CFUnicodePrecomposition.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D893F1BBDA9A400234F36 /* CFUnicodePrecomposition.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AFE1BEA81AC00C5B690 /* CFURLComponents.h in Headers */ = {isa = PBXBuildFile; fileRef = EA313DFF1BE7F2E90060A403 /* CFURLComponents.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8AFF1BEA81AC00C5B690 /* CFURLPriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D889F1BBC96D400234F36 /* CFURLPriv.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8B001BEA82ED00C5B690 /* CFRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88C21BBC981C00234F36 /* CFRuntime.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8B011BEA82F800C5B690 /* CFError_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D88A61BBC970D00234F36 /* CFError_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8B021BEA830200C5B690 /* CFBurstTrie.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89341BBDA76300234F36 /* CFBurstTrie.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B7C8B031BEA86A900C5B690 /* libCoreFoundation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B7C8A6E1BEA7F8F00C5B690 /* libCoreFoundation.a */; }; - 5B8BA1621D0B773A00938C27 /* IndexSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8BA1611D0B773A00938C27 /* IndexSet.swift */; }; - 5B94E8821C430DE70055C035 /* NSStringAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B94E8811C430DE70055C035 /* NSStringAPI.swift */; }; - 5BA0106E1DF212B300E56898 /* NSPlatform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA0106D1DF212B300E56898 /* NSPlatform.swift */; }; - 5BA9BEA61CF3D747009DBD6C /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9BEA51CF3D747009DBD6C /* Data.swift */; }; - 5BA9BEA81CF3E7E7009DBD6C /* CharacterSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9BEA71CF3E7E7009DBD6C /* CharacterSet.swift */; }; - 5BA9BEBD1CF4F3B8009DBD6C /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9BEBC1CF4F3B8009DBD6C /* Notification.swift */; }; - 5BB2C75F1ED9F96200B7BDBD /* CFUserNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D89391BBDA7AB00234F36 /* CFUserNotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5BB5256C1BEC057200E63BE3 /* module.map in Headers */ = {isa = PBXBuildFile; fileRef = 5BDC3F721BCC60EF00ED97BB /* module.map */; settings = {ATTRIBUTES = (Public, ); }; }; - 5BC1B9A421F2757F00524D8C /* ContiguousBytes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC1B9A321F2757F00524D8C /* ContiguousBytes.swift */; }; - 5BC1B9A621F2759C00524D8C /* DataProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC1B9A521F2759C00524D8C /* DataProtocol.swift */; }; - 5BC1B9A821F275B000524D8C /* Collections+DataProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC1B9A721F275B000524D8C /* Collections+DataProtocol.swift */; }; - 5BC1B9AA21F275C400524D8C /* DispatchData+DataProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC1B9A921F275C400524D8C /* DispatchData+DataProtocol.swift */; }; - 5BC1B9AC21F275D500524D8C /* NSData+DataProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC1B9AB21F275D500524D8C /* NSData+DataProtocol.swift */; }; - 5BC1B9AE21F275E900524D8C /* Pointers+DataProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC1B9AD21F275E900524D8C /* Pointers+DataProtocol.swift */; }; - 5BC2C00F1C07833200CC214E /* CFStringTransform.c in Sources */ = {isa = PBXBuildFile; fileRef = 5BC2C00D1C07832E00CC214E /* CFStringTransform.c */; }; - 5BC46D541D05D6D900005853 /* DateInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC46D531D05D6D900005853 /* DateInterval.swift */; }; - 5BCCA8D91CE6697F0059B963 /* URLComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BCCA8D81CE6697F0059B963 /* URLComponents.swift */; }; - 5BCD03821D3EE35C00E3FF9B /* TimeZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BCD03811D3EE35C00E3FF9B /* TimeZone.swift */; }; - 5BD31D201D5CE8C400563814 /* Bridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD31D1F1D5CE8C400563814 /* Bridging.swift */; }; - 5BD31D221D5CEBA800563814 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD31D211D5CEBA800563814 /* String.swift */; }; - 5BD31D241D5CECC400563814 /* Array.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD31D231D5CECC400563814 /* Array.swift */; }; - 5BD31D3F1D5D19D600563814 /* Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD31D3E1D5D19D600563814 /* Dictionary.swift */; }; - 5BD31D411D5D1BC300563814 /* Set.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD31D401D5D1BC300563814 /* Set.swift */; }; - 5BD70FB21D3D4CDC003B9BF8 /* Locale.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD70FB11D3D4CDC003B9BF8 /* Locale.swift */; }; - 5BD70FB41D3D4F8B003B9BF8 /* Calendar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD70FB31D3D4F8B003B9BF8 /* Calendar.swift */; }; - 5BDC3FCA1BCF176100ED97BB /* NSCFArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3FC91BCF176100ED97BB /* NSCFArray.swift */; }; - 5BDC3FCC1BCF177E00ED97BB /* NSCFString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3FCB1BCF177E00ED97BB /* NSCFString.swift */; }; - 5BDC3FCE1BCF17D300ED97BB /* NSCFDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3FCD1BCF17D300ED97BB /* NSCFDictionary.swift */; }; - 5BDC3FD01BCF17E600ED97BB /* NSCFSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3FCF1BCF17E600ED97BB /* NSCFSet.swift */; }; - 5BDC406C1BD6D89300ED97BB /* SwiftFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B5D885D1BBC938800234F36 /* SwiftFoundation.framework */; }; - 5BDC406E1BD6D8C400ED97BB /* SwiftFoundation.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5B5D885D1BBC938800234F36 /* SwiftFoundation.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 5BDF62901C1A550800A89075 /* CFRegularExpression.c in Sources */ = {isa = PBXBuildFile; fileRef = 5BDF628E1C1A550800A89075 /* CFRegularExpression.c */; }; - 5BDF62911C1A550800A89075 /* CFRegularExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BDF628F1C1A550800A89075 /* CFRegularExpression.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5BECBA361D1CACC500B39B1F /* MeasurementFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B628EDE1D1C995C00CA9570 /* MeasurementFormatter.swift */; }; - 5BECBA381D1CAD7000B39B1F /* Measurement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BECBA371D1CAD7000B39B1F /* Measurement.swift */; }; - 5BECBA3A1D1CAE9A00B39B1F /* NSMeasurement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BECBA391D1CAE9A00B39B1F /* NSMeasurement.swift */; }; - 5BECBA3C1D1CAF8800B39B1F /* Unit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BECBA3B1D1CAF8800B39B1F /* Unit.swift */; }; - 5BF7AE831BCD50CD008F214A /* NSArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F2E1BCC5DCB00ED97BB /* NSArray.swift */; }; - 5BF7AEA41BCD51F9008F214A /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F2F1BCC5DCB00ED97BB /* Bundle.swift */; }; - 5BF7AEA51BCD51F9008F214A /* NSCalendar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F301BCC5DCB00ED97BB /* NSCalendar.swift */; }; - 5BF7AEA61BCD51F9008F214A /* NSCharacterSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F311BCC5DCB00ED97BB /* NSCharacterSet.swift */; }; - 5BF7AEA71BCD51F9008F214A /* NSCoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F321BCC5DCB00ED97BB /* NSCoder.swift */; }; - 5BF7AEA81BCD51F9008F214A /* NSData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F331BCC5DCB00ED97BB /* NSData.swift */; }; - 5BF7AEA91BCD51F9008F214A /* NSDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F341BCC5DCB00ED97BB /* NSDate.swift */; }; - 5BF7AEAA1BCD51F9008F214A /* DateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F351BCC5DCB00ED97BB /* DateFormatter.swift */; }; - 5BF7AEAB1BCD51F9008F214A /* NSDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F361BCC5DCB00ED97BB /* NSDictionary.swift */; }; - 5BF7AEAC1BCD51F9008F214A /* NSEnumerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F371BCC5DCB00ED97BB /* NSEnumerator.swift */; }; - 5BF7AEAD1BCD51F9008F214A /* NSError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F381BCC5DCB00ED97BB /* NSError.swift */; }; - 5BF7AEAE1BCD51F9008F214A /* Formatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F391BCC5DCB00ED97BB /* Formatter.swift */; }; - 5BF7AEAF1BCD51F9008F214A /* Host.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F3A1BCC5DCB00ED97BB /* Host.swift */; }; - 5BF7AEB01BCD51F9008F214A /* NSLocale.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F3B1BCC5DCB00ED97BB /* NSLocale.swift */; }; - 5BF7AEB11BCD51F9008F214A /* NSLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F3C1BCC5DCB00ED97BB /* NSLock.swift */; }; - 5BF7AEB21BCD51F9008F214A /* NSNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F3D1BCC5DCB00ED97BB /* NSNumber.swift */; }; - 5BF7AEB31BCD51F9008F214A /* NSObjCRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F3E1BCC5DCB00ED97BB /* NSObjCRuntime.swift */; }; - 5BF7AEB41BCD51F9008F214A /* NSObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F3F1BCC5DCB00ED97BB /* NSObject.swift */; }; - 5BF7AEB51BCD51F9008F214A /* NSPathUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F401BCC5DCB00ED97BB /* NSPathUtilities.swift */; }; - 5BF7AEB61BCD51F9008F214A /* ProcessInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F411BCC5DCB00ED97BB /* ProcessInfo.swift */; }; - 5BF7AEB71BCD51F9008F214A /* PropertyListSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F421BCC5DCB00ED97BB /* PropertyListSerialization.swift */; }; - 5BF7AEB81BCD51F9008F214A /* NSRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F431BCC5DCB00ED97BB /* NSRange.swift */; }; - 5BF7AEB91BCD51F9008F214A /* NSSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F441BCC5DCB00ED97BB /* NSSet.swift */; }; - 5BF7AEBA1BCD51F9008F214A /* NSString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F451BCC5DCB00ED97BB /* NSString.swift */; }; - 5BF7AEBB1BCD51F9008F214A /* NSSwiftRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F461BCC5DCB00ED97BB /* NSSwiftRuntime.swift */; }; - 5BF7AEBC1BCD51F9008F214A /* Thread.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F471BCC5DCB00ED97BB /* Thread.swift */; }; - 5BF7AEBE1BCD51F9008F214A /* NSTimeZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F491BCC5DCB00ED97BB /* NSTimeZone.swift */; }; - 5BF7AEBF1BCD51F9008F214A /* NSURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F4A1BCC5DCB00ED97BB /* NSURL.swift */; }; - 5BF7AEC01BCD51F9008F214A /* NSUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F4B1BCC5DCB00ED97BB /* NSUUID.swift */; }; - 5BF7AEC11BCD51F9008F214A /* NSValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F4C1BCC5DCB00ED97BB /* NSValue.swift */; }; - 5BF9B7F31FABBDB900EE1A7C /* CFPropertyList_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BF9B7F11FABBDB000EE1A7C /* CFPropertyList_Private.h */; }; - 5BF9B7FE1FABD5DA00EE1A7C /* CFBundle_DebugStrings.c in Sources */ = {isa = PBXBuildFile; fileRef = 5BF9B7F51FABD5D400EE1A7C /* CFBundle_DebugStrings.c */; }; - 5BF9B7FF1FABD5DA00EE1A7C /* CFBundle_Executable.c in Sources */ = {isa = PBXBuildFile; fileRef = 5BF9B7F81FABD5D500EE1A7C /* CFBundle_Executable.c */; }; - 5BF9B8001FABD5DA00EE1A7C /* CFBundle_Main.c in Sources */ = {isa = PBXBuildFile; fileRef = 5BF9B7F41FABD5D300EE1A7C /* CFBundle_Main.c */; }; - 5BF9B8011FABD5DA00EE1A7C /* CFBundle_ResourceFork.c in Sources */ = {isa = PBXBuildFile; fileRef = 5BF9B7F61FABD5D400EE1A7C /* CFBundle_ResourceFork.c */; }; - 5BF9B8021FABD5DA00EE1A7C /* CFBundle_Tables.c in Sources */ = {isa = PBXBuildFile; fileRef = 5BF9B7F71FABD5D400EE1A7C /* CFBundle_Tables.c */; }; - 5D0E1BDB237A1FE800C35C5A /* TestUnitVolume.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D0E1BDA237A1FE800C35C5A /* TestUnitVolume.swift */; }; - 5FE52C951D147D1C00F7D270 /* TestNSTextCheckingResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FE52C941D147D1C00F7D270 /* TestNSTextCheckingResult.swift */; }; - 616068F3225DE5C2004FCC54 /* FTPServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 616068F2225DE5C2004FCC54 /* FTPServer.swift */; }; - 616068F5225DE606004FCC54 /* TestURLSessionFTP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 616068F4225DE606004FCC54 /* TestURLSessionFTP.swift */; }; - 61E0117D1C1B5590000037DD /* RunLoop.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B761BD15DFF00C49C64 /* RunLoop.swift */; }; - 61E0117E1C1B55B9000037DD /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F481BCC5DCB00ED97BB /* Timer.swift */; }; - 61E0117F1C1B5990000037DD /* CFRunLoop.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88D81BBC9AD800234F36 /* CFRunLoop.c */; }; - 61E011811C1B5998000037DD /* CFMessagePort.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88DC1BBC9AEC00234F36 /* CFMessagePort.c */; }; - 61E011821C1B599A000037DD /* CFMachPort.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88D01BBC9AAC00234F36 /* CFMachPort.c */; }; - 63DCE9D21EAA430100E9CB02 /* ISO8601DateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63DCE9D11EAA430100E9CB02 /* ISO8601DateFormatter.swift */; }; - 63DCE9D41EAA432400E9CB02 /* TestISO8601DateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63DCE9D31EAA432400E9CB02 /* TestISO8601DateFormatter.swift */; }; - 659FB6DE2405E5E300F5F63F /* TestBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 659FB6DD2405E5E200F5F63F /* TestBridging.swift */; }; - 684C79011F62B611005BD73E /* TestNSNumberBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 684C79001F62B611005BD73E /* TestNSNumberBridging.swift */; }; - 6EB768281D18C12C00D4B719 /* UUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EB768271D18C12C00D4B719 /* UUID.swift */; }; - 7900433B1CACD33E00ECCBF1 /* TestNSCompoundPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790043391CACD33E00ECCBF1 /* TestNSCompoundPredicate.swift */; }; - 7900433C1CACD33E00ECCBF1 /* TestNSPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7900433A1CACD33E00ECCBF1 /* TestNSPredicate.swift */; }; - 7D0DE86E211883F500540061 /* TestDateComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0DE86C211883F500540061 /* TestDateComponents.swift */; }; - 7D0DE86F211883F500540061 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D0DE86D211883F500540061 /* Utilities.swift */; }; - 7D8BD737225EADB80057CF37 /* TestDateInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D8BD736225EADB80057CF37 /* TestDateInterval.swift */; }; - 7D8BD739225ED1480057CF37 /* TestMeasurement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D8BD738225ED1480057CF37 /* TestMeasurement.swift */; }; - 90E645DF1E4C89A400D0D47C /* TestNSCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90E645DE1E4C89A400D0D47C /* TestNSCache.swift */; }; - 91B668A32252B3C5001487A1 /* FileManager+POSIX.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B668A22252B3C5001487A1 /* FileManager+POSIX.swift */; }; - 91B668A52252B3E7001487A1 /* FileManager+Win32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91B668A42252B3E7001487A1 /* FileManager+Win32.swift */; }; - 9F0DD3521ECD73D000F68030 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F0041781ECD5962004138BD /* main.swift */; }; - 9F0DD3571ECD783500F68030 /* SwiftFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B5D885D1BBC938800234F36 /* SwiftFoundation.framework */; }; - A058C2021E529CF100B07AA1 /* TestMassFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A058C2011E529CF100B07AA1 /* TestMassFormatter.swift */; }; - AA9E0E0B21FA6C5600963F4C /* PropertyListEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA9E0E0A21FA6C5600963F4C /* PropertyListEncoder.swift */; }; - AA9E0E0D21FA6E0700963F4C /* TestPropertyListEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA9E0E0C21FA6E0700963F4C /* TestPropertyListEncoder.swift */; }; - ABB1293526D4736B00401E6C /* TestUnitInformationStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABB1293426D4736B00401E6C /* TestUnitInformationStorage.swift */; }; - B907F36B20BB07A700013CBE /* NSString-ISO-8859-1-data.txt in Resources */ = {isa = PBXBuildFile; fileRef = B907F36A20BB07A700013CBE /* NSString-ISO-8859-1-data.txt */; }; - B90C57BB1EEEEA5A005208AE /* TestFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525AECEB1BF2C96400D15BB0 /* TestFileManager.swift */; }; - B90C57BC1EEEEA5A005208AE /* TestThread.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E5835F31C20C9B500C81317 /* TestThread.swift */; }; - B910957A1EEF237800A71930 /* NSString-UTF16-LE-data.txt in Resources */ = {isa = PBXBuildFile; fileRef = B91095781EEF237800A71930 /* NSString-UTF16-LE-data.txt */; }; - B910957B1EEF237800A71930 /* NSString-UTF16-BE-data.txt in Resources */ = {isa = PBXBuildFile; fileRef = B91095791EEF237800A71930 /* NSString-UTF16-BE-data.txt */; }; - B91161AA2429860900BD2907 /* DataURLProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B91161A82429857D00BD2907 /* DataURLProtocol.swift */; }; - B91161AD242A363900BD2907 /* TestDataURLProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B91161AB242A350D00BD2907 /* TestDataURLProtocol.swift */; }; - B933A79E1F3055F700FE6846 /* NSString-UTF32-BE-data.txt in Resources */ = {isa = PBXBuildFile; fileRef = B933A79C1F3055F600FE6846 /* NSString-UTF32-BE-data.txt */; }; - B933A79F1F3055F700FE6846 /* NSString-UTF32-LE-data.txt in Resources */ = {isa = PBXBuildFile; fileRef = B933A79D1F3055F600FE6846 /* NSString-UTF32-LE-data.txt */; }; - B940492D223B146800FB4384 /* TestProgressFraction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B940492C223B146800FB4384 /* TestProgressFraction.swift */; }; - B94B063C23FDE2BD00B244E8 /* SwiftFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B5D885D1BBC938800234F36 /* SwiftFoundation.framework */; }; - B951B5EC1F4E2A2000D8B332 /* TestNSLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = B951B5EB1F4E2A2000D8B332 /* TestNSLock.swift */; }; - B95FC97622B84B0A005DEA0A /* TestNSSortDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 152EF3932283457B001E1269 /* TestNSSortDescriptor.swift */; }; - B96C10F625BA1EFD00985A32 /* NSURLComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96C10F525BA1EFD00985A32 /* NSURLComponents.swift */; }; - B96C110025BA20A600985A32 /* NSURLQueryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96C10FF25BA20A600985A32 /* NSURLQueryItem.swift */; }; - B96C110A25BA215800985A32 /* URLResourceKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96C110925BA215800985A32 /* URLResourceKey.swift */; }; - B96C112525BA2CE700985A32 /* URLQueryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96C112425BA2CE700985A32 /* URLQueryItem.swift */; }; - B96C113725BA376D00985A32 /* NSDateComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96C113625BA376D00985A32 /* NSDateComponents.swift */; }; - B98303EA25F2131D001F959E /* JSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B98303E925F2131D001F959E /* JSONDecoder.swift */; }; - B98303F425F21389001F959E /* CMakeLists.txt in Resources */ = {isa = PBXBuildFile; fileRef = B98303F325F21389001F959E /* CMakeLists.txt */; }; - B983E32C23F0C69600D9C402 /* Docs in Resources */ = {isa = PBXBuildFile; fileRef = B983E32B23F0C69600D9C402 /* Docs */; }; - B983E32E23F0C6E200D9C402 /* CONTRIBUTING.md in Resources */ = {isa = PBXBuildFile; fileRef = B983E32D23F0C6E200D9C402 /* CONTRIBUTING.md */; }; - B98E33DD2136AA740044EBE9 /* TestFileWithZeros.txt in Resources */ = {isa = PBXBuildFile; fileRef = B98E33DC2136AA740044EBE9 /* TestFileWithZeros.txt */; }; - B99EAE72236044C900C8FB46 /* SwiftXCTest.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = B95FC97222AF0050005DEA0A /* SwiftXCTest.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - B9C0E89620C31AB60064C68C /* CFInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5D888A1BBC963C00234F36 /* CFInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B9D9733F23D19D3900AB249C /* TestDimension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9D9733E23D19D3900AB249C /* TestDimension.swift */; }; - B9D9734123D19E2E00AB249C /* TestNSDateComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9D9734023D19E2E00AB249C /* TestNSDateComponents.swift */; }; - B9D9734323D19FD100AB249C /* TestURLComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9D9734223D19FD100AB249C /* TestURLComponents.swift */; }; - B9D9734523D1A36E00AB249C /* TestHTTPURLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9D9734423D1A36E00AB249C /* TestHTTPURLResponse.swift */; }; - B9F4492D2483FFD700B30F02 /* TestNSURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9F4492B2483FFBF00B30F02 /* TestNSURL.swift */; }; - BB3D7558208A1E500085CFDC /* Imports.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3D7557208A1E500085CFDC /* Imports.swift */; }; - BD8042161E09857800487EB8 /* TestLengthFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD8042151E09857800487EB8 /* TestLengthFormatter.swift */; }; - BDBB65901E256BFA001A7286 /* TestEnergyFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDBB658F1E256BFA001A7286 /* TestEnergyFormatter.swift */; }; - BDFDF0A71DFF5B3E00C04CC5 /* TestPersonNameComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDFDF0A61DFF5B3E00C04CC5 /* TestPersonNameComponents.swift */; }; - BF85E9D81FBDCC2000A79793 /* TestHost.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF85E9D71FBDCC2000A79793 /* TestHost.swift */; }; - BF8E65311DC3B3CB005AB5C3 /* TestNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF8E65301DC3B3CB005AB5C3 /* TestNotification.swift */; }; - C7DE1FCC21EEE67200174F35 /* TestUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7DE1FCB21EEE67200174F35 /* TestUUID.swift */; }; - CC5249C01D341D23007CB54D /* TestUnitConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC5249BF1D341D23007CB54D /* TestUnitConverter.swift */; }; - CD1C7F7D1E303B47008E331C /* TestNSError.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD1C7F7C1E303B47008E331C /* TestNSError.swift */; }; - CE19A88C1C23AA2300B4CB6A /* NSStringTestData.txt in Resources */ = {isa = PBXBuildFile; fileRef = CE19A88B1C23AA2300B4CB6A /* NSStringTestData.txt */; }; - D31302011C30CEA900295652 /* NSConcreteValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D31302001C30CEA900295652 /* NSConcreteValue.swift */; }; - D370696E1C394FBF00295652 /* NSKeyedUnarchiver-RangeTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = D370696D1C394FBF00295652 /* NSKeyedUnarchiver-RangeTest.plist */; }; - D39A14011C2D6E0A00295652 /* NSKeyedUnarchiver.swift in Sources */ = {isa = PBXBuildFile; fileRef = D39A14001C2D6E0A00295652 /* NSKeyedUnarchiver.swift */; }; - D3A597F41C34142600295652 /* NSKeyedUnarchiver-NotificationTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3A597F31C34142600295652 /* NSKeyedUnarchiver-NotificationTest.plist */; }; - D3A597F71C3415CC00295652 /* NSKeyedUnarchiver-ArrayTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3A597F51C3415CC00295652 /* NSKeyedUnarchiver-ArrayTest.plist */; }; - D3A597F81C3415CC00295652 /* NSKeyedUnarchiver-URLTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3A597F61C3415CC00295652 /* NSKeyedUnarchiver-URLTest.plist */; }; - D3A597FA1C3415F000295652 /* NSKeyedUnarchiver-UUIDTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3A597F91C3415F000295652 /* NSKeyedUnarchiver-UUIDTest.plist */; }; - D3A597FC1C3417EA00295652 /* NSKeyedUnarchiver-ComplexTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3A597FB1C3417EA00295652 /* NSKeyedUnarchiver-ComplexTest.plist */; }; - D3A598001C341E9100295652 /* NSKeyedUnarchiver-ConcreteValueTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3A597FF1C341E9100295652 /* NSKeyedUnarchiver-ConcreteValueTest.plist */; }; - D3A598041C349E6A00295652 /* NSKeyedUnarchiver-OrderedSetTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3A598021C349E6A00295652 /* NSKeyedUnarchiver-OrderedSetTest.plist */; }; - D3BCEB9E1C2EDED800295652 /* NSLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3BCEB9D1C2EDED800295652 /* NSLog.swift */; }; - D3BCEBA01C2F6DDB00295652 /* NSKeyedCoderOldStyleArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3BCEB9F1C2F6DDB00295652 /* NSKeyedCoderOldStyleArray.swift */; }; - D3E8D6D11C367AB600295652 /* NSSpecialValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3E8D6D01C367AB600295652 /* NSSpecialValue.swift */; }; - D3E8D6D31C36982700295652 /* NSKeyedUnarchiver-EdgeInsetsTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3E8D6D21C36982700295652 /* NSKeyedUnarchiver-EdgeInsetsTest.plist */; }; - D3E8D6D51C36AC0C00295652 /* NSKeyedUnarchiver-RectTest.plist in Resources */ = {isa = PBXBuildFile; fileRef = D3E8D6D41C36AC0C00295652 /* NSKeyedUnarchiver-RectTest.plist */; }; - D4FE895B1D703D1100DA7986 /* TestURLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4FE895A1D703D1100DA7986 /* TestURLRequest.swift */; }; - D51239DF1CD9DA0800D433EE /* CFSocket.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88E01BBC9B0300234F36 /* CFSocket.c */; }; - D512D17C1CD883F00032E6A5 /* TestFileHandle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D512D17B1CD883F00032E6A5 /* TestFileHandle.swift */; }; - D5C40F331CDA1D460005690C /* TestOperationQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5C40F321CDA1D460005690C /* TestOperationQueue.swift */; }; - DAA79BD920D42C07004AF044 /* TestURLProtectionSpace.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA79BD820D42C07004AF044 /* TestURLProtectionSpace.swift */; }; - DCA8120B1F046D13000D0C86 /* TestCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA8120A1F046D13000D0C86 /* TestCodable.swift */; }; - E1A03F361C4828650023AF4D /* PropertyList-1.0.dtd in Resources */ = {isa = PBXBuildFile; fileRef = E1A03F351C4828650023AF4D /* PropertyList-1.0.dtd */; }; - E1A03F381C482C730023AF4D /* NSXMLDTDTestData.xml in Resources */ = {isa = PBXBuildFile; fileRef = E1A03F371C482C730023AF4D /* NSXMLDTDTestData.xml */; }; - E1A3726F1C31EBFB0023AF4D /* NSXMLDocumentTestData.xml in Resources */ = {isa = PBXBuildFile; fileRef = E1A3726E1C31EBFB0023AF4D /* NSXMLDocumentTestData.xml */; }; - EA01AAEC1DA839C4008F4E07 /* TestProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA01AAEB1DA839C4008F4E07 /* TestProgress.swift */; }; - EA0812691DA71C8A00651B70 /* ProgressFraction.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0812681DA71C8A00651B70 /* ProgressFraction.swift */; }; - EA418C261D57257D005EAD0D /* NSKeyedArchiverHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA418C251D57257D005EAD0D /* NSKeyedArchiverHelpers.swift */; }; - EA54A6FB1DB16D53009E0809 /* TestObjCRuntime.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA54A6FA1DB16D53009E0809 /* TestObjCRuntime.swift */; }; - EA66F6361BEED03E00136161 /* TargetConditionals.h in Headers */ = {isa = PBXBuildFile; fileRef = EA66F6351BEED03E00136161 /* TargetConditionals.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA66F6481BF1619600136161 /* NSURLTestData.plist in Resources */ = {isa = PBXBuildFile; fileRef = EA66F63B1BF1619600136161 /* NSURLTestData.plist */; }; - EA66F6671BF2F2F100136161 /* CoreFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = EA66F6651BF2F2E800136161 /* CoreFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA66F6761BF56CDE00136161 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA66F6691BF55D4B00136161 /* main.swift */; }; - EA66F6771BF56D4C00136161 /* SwiftFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B5D885D1BBC938800234F36 /* SwiftFoundation.framework */; }; - EAB57B721BD1C7A5004AC5C5 /* PortMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAB57B711BD1C7A5004AC5C5 /* PortMessage.swift */; }; - EADE0B4E1BD09E0800C49C64 /* AffineTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B4D1BD09E0800C49C64 /* AffineTransform.swift */; }; - EADE0B501BD09E3100C49C64 /* NSAttributedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B4F1BD09E3100C49C64 /* NSAttributedString.swift */; }; - EADE0B521BD09F2F00C49C64 /* ByteCountFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B511BD09F2F00C49C64 /* ByteCountFormatter.swift */; }; - EADE0B921BD15DFF00C49C64 /* NSCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B541BD15DFF00C49C64 /* NSCache.swift */; }; - EADE0B931BD15DFF00C49C64 /* NSComparisonPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B551BD15DFF00C49C64 /* NSComparisonPredicate.swift */; }; - EADE0B941BD15DFF00C49C64 /* NSCompoundPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B561BD15DFF00C49C64 /* NSCompoundPredicate.swift */; }; - EADE0B951BD15DFF00C49C64 /* DateComponentsFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B571BD15DFF00C49C64 /* DateComponentsFormatter.swift */; }; - EADE0B961BD15DFF00C49C64 /* DateIntervalFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B581BD15DFF00C49C64 /* DateIntervalFormatter.swift */; }; - EADE0B971BD15DFF00C49C64 /* Decimal.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B591BD15DFF00C49C64 /* Decimal.swift */; }; - EADE0B981BD15DFF00C49C64 /* NSDecimalNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B5A1BD15DFF00C49C64 /* NSDecimalNumber.swift */; }; - EADE0B991BD15DFF00C49C64 /* EnergyFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B5B1BD15DFF00C49C64 /* EnergyFormatter.swift */; }; - EADE0B9A1BD15DFF00C49C64 /* NSExpression.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B5C1BD15DFF00C49C64 /* NSExpression.swift */; }; - EADE0B9B1BD15DFF00C49C64 /* FileHandle.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B5D1BD15DFF00C49C64 /* FileHandle.swift */; }; - EADE0B9C1BD15DFF00C49C64 /* FileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B5E1BD15DFF00C49C64 /* FileManager.swift */; }; - EADE0B9D1BD15DFF00C49C64 /* NSGeometry.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B5F1BD15DFF00C49C64 /* NSGeometry.swift */; }; - EADE0BA01BD15DFF00C49C64 /* NSIndexPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B621BD15DFF00C49C64 /* NSIndexPath.swift */; }; - EADE0BA11BD15DFF00C49C64 /* NSIndexSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B631BD15DFF00C49C64 /* NSIndexSet.swift */; }; - EADE0BA21BD15E0000C49C64 /* JSONSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B641BD15DFF00C49C64 /* JSONSerialization.swift */; }; - EADE0BA31BD15E0000C49C64 /* NSKeyedArchiver.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B651BD15DFF00C49C64 /* NSKeyedArchiver.swift */; }; - EADE0BA41BD15E0000C49C64 /* LengthFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B661BD15DFF00C49C64 /* LengthFormatter.swift */; }; - EADE0BA61BD15E0000C49C64 /* MassFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B681BD15DFF00C49C64 /* MassFormatter.swift */; }; - EADE0BA71BD15E0000C49C64 /* NSNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B691BD15DFF00C49C64 /* NSNotification.swift */; }; - EADE0BA81BD15E0000C49C64 /* NotificationQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B6A1BD15DFF00C49C64 /* NotificationQueue.swift */; }; - EADE0BA91BD15E0000C49C64 /* NSNull.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B6B1BD15DFF00C49C64 /* NSNull.swift */; }; - EADE0BAA1BD15E0000C49C64 /* NumberFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B6C1BD15DFF00C49C64 /* NumberFormatter.swift */; }; - EADE0BAB1BD15E0000C49C64 /* Operation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B6D1BD15DFF00C49C64 /* Operation.swift */; }; - EADE0BAC1BD15E0000C49C64 /* NSOrderedSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B6E1BD15DFF00C49C64 /* NSOrderedSet.swift */; }; - EADE0BAE1BD15E0000C49C64 /* NSPersonNameComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B701BD15DFF00C49C64 /* NSPersonNameComponents.swift */; }; - EADE0BAF1BD15E0000C49C64 /* PersonNameComponentsFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B711BD15DFF00C49C64 /* PersonNameComponentsFormatter.swift */; }; - EADE0BB01BD15E0000C49C64 /* Port.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B721BD15DFF00C49C64 /* Port.swift */; }; - EADE0BB11BD15E0000C49C64 /* NSPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B731BD15DFF00C49C64 /* NSPredicate.swift */; }; - EADE0BB21BD15E0000C49C64 /* Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B741BD15DFF00C49C64 /* Progress.swift */; }; - EADE0BB31BD15E0000C49C64 /* NSRegularExpression.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B751BD15DFF00C49C64 /* NSRegularExpression.swift */; }; - EADE0BB51BD15E0000C49C64 /* Scanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B771BD15DFF00C49C64 /* Scanner.swift */; }; - EADE0BB61BD15E0000C49C64 /* NSSortDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B781BD15DFF00C49C64 /* NSSortDescriptor.swift */; }; - EADE0BB71BD15E0000C49C64 /* Stream.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B791BD15DFF00C49C64 /* Stream.swift */; }; - EADE0BB81BD15E0000C49C64 /* Process.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B7A1BD15DFF00C49C64 /* Process.swift */; }; - EADE0BB91BD15E0000C49C64 /* NSTextCheckingResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B7B1BD15DFF00C49C64 /* NSTextCheckingResult.swift */; }; - EADE0BBF1BD15E0000C49C64 /* NSURLError.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B811BD15DFF00C49C64 /* NSURLError.swift */; }; - EADE0BC51BD15E0000C49C64 /* UserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADE0B871BD15DFF00C49C64 /* UserDefaults.swift */; }; - F023072623F0B4890023DBEC /* Headers in Resources */ = {isa = PBXBuildFile; fileRef = F023072523F0B4890023DBEC /* Headers */; }; - F023073023F0B6E20023DBEC /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023072E23F0B6E20023DBEC /* Configuration.swift */; }; - F023073123F0B6E20023DBEC /* BodySource.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023072F23F0B6E20023DBEC /* BodySource.swift */; }; - F023073423F0B6F10023DBEC /* FTPURLProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023073323F0B6F10023DBEC /* FTPURLProtocol.swift */; }; - F023073823F0B6FE0023DBEC /* HTTPMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023073623F0B6FE0023DBEC /* HTTPMessage.swift */; }; - F023073923F0B6FE0023DBEC /* HTTPURLProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023073723F0B6FE0023DBEC /* HTTPURLProtocol.swift */; }; - F023073E23F0B7100023DBEC /* MultiHandle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023073B23F0B70F0023DBEC /* MultiHandle.swift */; }; - F023073F23F0B7100023DBEC /* EasyHandle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023073C23F0B70F0023DBEC /* EasyHandle.swift */; }; - F023074023F0B7100023DBEC /* libcurlHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023073D23F0B70F0023DBEC /* libcurlHelpers.swift */; }; - F023075C23F0B7AD0023DBEC /* NativeProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023075323F0B7AC0023DBEC /* NativeProtocol.swift */; }; - F023075D23F0B7AD0023DBEC /* TaskRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023075423F0B7AC0023DBEC /* TaskRegistry.swift */; }; - F023075E23F0B7AD0023DBEC /* NetworkingSpecific.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023075523F0B7AC0023DBEC /* NetworkingSpecific.swift */; }; - F023075F23F0B7AD0023DBEC /* URLSessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023075623F0B7AC0023DBEC /* URLSessionDelegate.swift */; }; - F023076023F0B7AD0023DBEC /* TransferState.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023075723F0B7AC0023DBEC /* TransferState.swift */; }; - F023076123F0B7AD0023DBEC /* URLSessionConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023075823F0B7AC0023DBEC /* URLSessionConfiguration.swift */; }; - F023076223F0B7AD0023DBEC /* URLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023075923F0B7AD0023DBEC /* URLSession.swift */; }; - F023076323F0B7AD0023DBEC /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023075A23F0B7AD0023DBEC /* Message.swift */; }; - F023076423F0B7AD0023DBEC /* URLSessionTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023075B23F0B7AD0023DBEC /* URLSessionTask.swift */; }; - F023076623F0B7F90023DBEC /* Boxing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B23AB861CE62D17000DB898 /* Boxing.swift */; }; - F023076823F0B8740023DBEC /* Boxing.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023076723F0B8730023DBEC /* Boxing.swift */; }; - F023077F23F0BC090023DBEC /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023076D23F0BB1E0023DBEC /* Utilities.swift */; }; - F023078023F0BC170023DBEC /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023076C23F0BB1E0023DBEC /* main.swift */; }; - F023078223F0BC2E0023DBEC /* FixtureValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = F023078123F0BC2E0023DBEC /* FixtureValues.swift */; }; - F03A43181D4877DD00A7791E /* CFAsmMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = F03A43161D48778200A7791E /* CFAsmMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F085A1302283C5B700F909F9 /* CFLocking.h in Headers */ = {isa = PBXBuildFile; fileRef = F085A12E2283C50A00F909F9 /* CFLocking.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F9E0BB371CA70B8000F7FF3C /* TestURLCredential.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E0BB361CA70B8000F7FF3C /* TestURLCredential.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 1550111922EA43E00088F082 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1550106E22EA266B0088F082; - remoteInfo = SwiftFoundationXML; - }; - 1550111F22EA473B0088F082 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1550106E22EA266B0088F082; - remoteInfo = SwiftFoundationXML; - }; - 159870BF228F741000ADE509 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 15B80384228F376000B30FF6; - remoteInfo = SwiftFoundationNetworking; - }; - 15A619DD245A2895003C8C62 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 15500FA722EA24D10088F082; - remoteInfo = CFXMLInterface; - }; - 15B80386228F376000B30FF6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5B7C8A6D1BEA7F8F00C5B690; - remoteInfo = CoreFoundation; - }; - 15B80445228F39B200B30FF6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5B5D885C1BBC938800234F36; - remoteInfo = SwiftFoundation; - }; - 15F14D3922EB9F80001598B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5B5D885C1BBC938800234F36; - remoteInfo = SwiftFoundation; - }; - 15FF00CF22934C39004AD205 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 15FF0006229348F2004AD205; - remoteInfo = CFURLSessionInterface; - }; - 15FF00D122935004004AD205 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5B7C8A6D1BEA7F8F00C5B690; - remoteInfo = CoreFoundation; - }; - AE2FC5941CFEFC70008F7981 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5B5D885C1BBC938800234F36; - remoteInfo = SwiftFoundation; - }; - B90FD22F20C2FF420087EF44 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9F0DD33E1ECD734200F68030; - remoteInfo = xdgTestHelper; - }; - B90FD23120C2FF840087EF44 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5B5D885C1BBC938800234F36; - remoteInfo = SwiftFoundation; - }; - B94B063A23FDE0AA00B244E8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5B5D885C1BBC938800234F36; - remoteInfo = SwiftFoundation; - }; - B98F173F229AF5AF00F2B002 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EA66F66E1BF56CCB00136161; - remoteInfo = plutil; - }; - B98F1741229AF5F900F2B002 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5B5D885C1BBC938800234F36; - remoteInfo = SwiftFoundation; - }; - EA993CE21BEACD8E000969A2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5B7C8A6D1BEA7F8F00C5B690; - remoteInfo = CoreFoundation; - }; - F023078323F0BDF40023DBEC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5B7C8A6D1BEA7F8F00C5B690; - remoteInfo = CoreFoundation; - }; - F023078523F0BE070023DBEC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5B7C8A6D1BEA7F8F00C5B690; - remoteInfo = CoreFoundation; - }; - F023078723F0BE240023DBEC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 15B80384228F376000B30FF6; - remoteInfo = SwiftFoundationNetworking; - }; - F023078923F0BE330023DBEC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5B5D88541BBC938800234F36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F023077723F0BBF10023DBEC; - remoteInfo = GenerateTestFixtures; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 1550107A22EA266B0088F082 /* Framework Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = Headers; - dstSubfolderSpec = 1; - files = ( - ); - name = "Framework Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; - 1550112122EA473B0088F082 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - 15B80390228F376000B30FF6 /* Framework Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = Headers; - dstSubfolderSpec = 1; - files = ( - ); - name = "Framework Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; - 5BDC3F6F1BCC608700ED97BB /* Framework Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = Headers; - dstSubfolderSpec = 1; - files = ( - ); - name = "Framework Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; - 5BDC406D1BD6D8B300ED97BB /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - B99EAE72236044C900C8FB46 /* SwiftXCTest.framework in CopyFiles */, - 5BDC406E1BD6D8C400ED97BB /* SwiftFoundation.framework in CopyFiles */, - 1550111822EA43E00088F082 /* SwiftFoundationXML.framework in CopyFiles */, - 1550111C22EA43E20088F082 /* SwiftFoundationNetworking.framework in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EA66F66D1BF56CCB00136161 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; - F023077623F0BBF10023DBEC /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 0383A1741D2E558A0052E5D1 /* TestStream.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestStream.swift; sourceTree = ""; }; - 03B6F5831F15F339004F25AF /* TestURLProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestURLProtocol.swift; sourceTree = ""; }; - 151023B326C3336F009371F3 /* CFPropertyList_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFPropertyList_Internal.h; sourceTree = ""; }; - 1513A8422044893F00539722 /* FileManager+XDG.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FileManager+XDG.swift"; sourceTree = ""; }; - 1520469A1D8AEABE00D02E36 /* HTTPServer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPServer.swift; sourceTree = ""; }; - 152EF3932283457B001E1269 /* TestNSSortDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSSortDescriptor.swift; sourceTree = ""; }; - 1539391322A07007006DFF4F /* TestCachedURLResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestCachedURLResponse.swift; sourceTree = ""; }; - 153CC8322214C3D100BFE8F3 /* ScannerAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScannerAPI.swift; sourceTree = ""; }; - 153E950F20111DC500F250BE /* CFKnownLocations.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CFKnownLocations.h; sourceTree = ""; }; - 153E951020111DC500F250BE /* CFKnownLocations.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = CFKnownLocations.c; sourceTree = ""; }; - 15496CF0212CAEBA00450F5A /* CFAttributedStringPriv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFAttributedStringPriv.h; sourceTree = ""; }; - 1550106A22EA24D10088F082 /* libCFXMLInterface.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCFXMLInterface.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 1550106B22EA25140088F082 /* module.map */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; name = module.map; path = CoreFoundation/Parsing.subproj/module.map; sourceTree = SOURCE_ROOT; }; - 1550106C22EA25140088F082 /* module.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; name = module.modulemap; path = CoreFoundation/Parsing.subproj/module.modulemap; sourceTree = SOURCE_ROOT; }; - 1550110922EA266B0088F082 /* SwiftFoundationXML.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftFoundationXML.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 155B77AB22E63D2D00D901DE /* TestURLCredentialStorage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestURLCredentialStorage.swift; sourceTree = ""; }; - 155D3BBB22401D1100B0D38E /* FixtureValues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixtureValues.swift; sourceTree = ""; }; - 1569BF9D2187CFFF009518FA /* CFCalendar_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFCalendar_Internal.h; sourceTree = ""; }; - 1569BF9F2187D003009518FA /* CFCalendar_Enumerate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFCalendar_Enumerate.c; sourceTree = ""; }; - 1569BFA32187D0E0009518FA /* CFDateInterval.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFDateInterval.c; sourceTree = ""; }; - 1569BFA42187D0E0009518FA /* CFDateInterval.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFDateInterval.h; sourceTree = ""; }; - 1569BFAB2187D529009518FA /* CFDateComponents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFDateComponents.c; sourceTree = ""; }; - 1569BFAC2187D529009518FA /* CFDateComponents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFDateComponents.h; sourceTree = ""; }; - 156C846D224069A000607D44 /* Fixtures */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Fixtures; path = Tests/Foundation/Resources/Fixtures; sourceTree = SOURCE_ROOT; }; - 1578DA08212B4060003C9516 /* CFRuntime_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFRuntime_Internal.h; sourceTree = ""; }; - 1578DA0A212B406F003C9516 /* CFMachPort_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFMachPort_Internal.h; sourceTree = ""; }; - 1578DA0B212B406F003C9516 /* CFMachPort_Lifetime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFMachPort_Lifetime.c; sourceTree = ""; }; - 1578DA0C212B406F003C9516 /* CFMachPort_Lifetime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFMachPort_Lifetime.h; sourceTree = ""; }; - 1578DA10212B407B003C9516 /* CFString_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFString_Internal.h; sourceTree = ""; }; - 1578DA12212B4C35003C9516 /* CFOverflow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFOverflow.h; sourceTree = ""; }; - 1578DA14212B6F33003C9516 /* CFCollections_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFCollections_Internal.h; sourceTree = ""; }; - 1581706222B1A29100348861 /* TestURLCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestURLCache.swift; sourceTree = ""; }; - 158B66A22450D72E00892EFB /* CFNumber_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFNumber_Private.h; sourceTree = ""; }; - 158B66A42450F0C300892EFB /* CFBundle_SplitFileName.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBundle_SplitFileName.c; sourceTree = ""; }; - 158B66A52450F0C400892EFB /* CFBundle_SplitFileName.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFBundle_SplitFileName.h; sourceTree = ""; }; - 158BCCA92220A12600750239 /* TestDateIntervalFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestDateIntervalFormatter.swift; sourceTree = ""; }; - 158BCCAB2220A18F00750239 /* CFDateIntervalFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFDateIntervalFormatter.h; sourceTree = ""; }; - 158BCCAC2220A18F00750239 /* CFDateIntervalFormatter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFDateIntervalFormatter.c; sourceTree = ""; }; - 159884911DCC877700E3314C /* TestHTTPCookieStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHTTPCookieStorage.swift; sourceTree = ""; }; - 15A619DF245A298C003C8C62 /* CFXMLInterface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFXMLInterface.c; sourceTree = ""; }; - 15B8043A228F376000B30FF6 /* SwiftFoundationNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftFoundationNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 15BB9529250988C50071BD20 /* CFAccess.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CFAccess.swift; sourceTree = ""; }; - 15CA750924F8336A007DF6C1 /* NSCFTypeShims.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSCFTypeShims.swift; sourceTree = ""; }; - 15E72A5226C470AE0035CAF8 /* CFListFormatter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFListFormatter.c; sourceTree = ""; }; - 15E72A5326C470AE0035CAF8 /* CFListFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFListFormatter.h; sourceTree = ""; }; - 15E72A5626C472620035CAF8 /* CFRelativeDateTimeFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFRelativeDateTimeFormatter.h; sourceTree = ""; }; - 15E72A5726C472630035CAF8 /* CFRelativeDateTimeFormatter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFRelativeDateTimeFormatter.c; sourceTree = ""; }; - 15F10CDB218909BF00D88114 /* TestNSCalendar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestNSCalendar.swift; sourceTree = ""; }; - 15FCF4E223021C020095E52E /* TestSocketPort.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestSocketPort.swift; sourceTree = ""; }; - 15FF00CA229348F2004AD205 /* libCFURLSessionInterface.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCFURLSessionInterface.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 15FF00CD22934B49004AD205 /* module.map */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; name = module.map; path = CoreFoundation/URL.subproj/module.map; sourceTree = SOURCE_ROOT; }; - 22B9C1E01C165D7A00DECFF9 /* TestDate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestDate.swift; sourceTree = ""; }; - 231503DA1D8AEE5D0061694D /* TestDecimal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestDecimal.swift; sourceTree = ""; }; - 294E3C1C1CC5E19300E4F44C /* TestNSAttributedString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSAttributedString.swift; sourceTree = ""; }; - 2EBE67A31C77BF05006583D5 /* TestDateFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestDateFormatter.swift; sourceTree = ""; }; - 316577C325214A8400492943 /* URLSessionTaskMetrics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = URLSessionTaskMetrics.swift; path = URLSession/URLSessionTaskMetrics.swift; sourceTree = ""; }; - 3E55A2321F52463B00082000 /* TestUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestUnit.swift; sourceTree = ""; }; - 3EA9D66F1EF0532D00B362D6 /* TestJSONEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestJSONEncoder.swift; sourceTree = ""; }; - 3EDCE5051EF04D8100C2EC04 /* Codable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Codable.swift; sourceTree = ""; }; - 3EDCE5091EF04D8100C2EC04 /* JSONEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONEncoder.swift; sourceTree = ""; }; - 400E22641C1A4E58007C5933 /* TestProcessInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestProcessInfo.swift; sourceTree = ""; }; - 4704392E26BDFF33000D213E /* TestAttributedStringPerformance.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestAttributedStringPerformance.swift; sourceTree = ""; }; - 4704392F26BDFF33000D213E /* TestAttributedStringCOW.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestAttributedStringCOW.swift; sourceTree = ""; }; - 4704393026BDFF33000D213E /* TestAttributedString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestAttributedString.swift; sourceTree = ""; }; - 4704393126BDFF34000D213E /* TestAttributedStringSupport.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestAttributedStringSupport.swift; sourceTree = ""; }; - 474E124C26BCD6D00016C28A /* AttributedString+Locking.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AttributedString+Locking.swift"; sourceTree = ""; }; - 476E415126BDAA150043E21E /* Morphology.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Morphology.swift; sourceTree = ""; }; - 4778104526BC9F810071E8A1 /* FoundationAttributes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FoundationAttributes.swift; sourceTree = ""; }; - 4778104726BC9F810071E8A1 /* AttributedStringRunCoalescing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttributedStringRunCoalescing.swift; sourceTree = ""; }; - 4778104826BC9F810071E8A1 /* AttributedStringAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttributedStringAttribute.swift; sourceTree = ""; }; - 4778104926BC9F810071E8A1 /* AttributedString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttributedString.swift; sourceTree = ""; }; - 4778104A26BC9F810071E8A1 /* Conversion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Conversion.swift; sourceTree = ""; }; - 4778104B26BC9F810071E8A1 /* AttributedStringCodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttributedStringCodable.swift; sourceTree = ""; }; - 49D55FA025E84FE5007BD3B3 /* JSONSerialization+Parser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "JSONSerialization+Parser.swift"; sourceTree = ""; }; - 4AE109261C17CCBF007367B5 /* TestIndexPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestIndexPath.swift; sourceTree = ""; }; - 4DC1D07F1C12EEEF00B5948A /* TestPipe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestPipe.swift; sourceTree = ""; }; - 522C253A1BF16E1600804FC6 /* FoundationErrors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FoundationErrors.swift; sourceTree = ""; }; - 525AECEB1BF2C96400D15BB0 /* TestFileManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestFileManager.swift; sourceTree = ""; }; - 52829AD61C160D64003BC4EF /* TestCalendar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestCalendar.swift; sourceTree = ""; }; - 528776181BF27D9500CB0090 /* Test.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Test.plist; sourceTree = ""; }; - 555683BC1C1250E70041D4C6 /* TestUserDefaults.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestUserDefaults.swift; sourceTree = ""; usesTabs = 1; }; - 559451EA1F706BF5002807FB /* CFXMLPreferencesDomain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFXMLPreferencesDomain.c; sourceTree = ""; }; - 5A6AC80A28E7652D00A22FA7 /* WebSocketURLProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = WebSocketURLProtocol.swift; path = URLSession/WebSocket/WebSocketURLProtocol.swift; sourceTree = ""; }; - 5B0163BA1D024EB7003CCD96 /* DateComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateComponents.swift; sourceTree = ""; }; - 5B0C6C211C1E07E600705A0E /* TestNSRegularExpression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSRegularExpression.swift; sourceTree = ""; }; - 5B1FD9C11D6D160F0080E83C /* CFURLSessionInterface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFURLSessionInterface.c; sourceTree = ""; }; - 5B1FD9C21D6D160F0080E83C /* CFURLSessionInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFURLSessionInterface.h; sourceTree = ""; }; - 5B1FD9E01D6D178E0080E83C /* libcurl.4.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcurl.4.dylib; path = usr/lib/libcurl.4.dylib; sourceTree = SDKROOT; }; - 5B1FD9E21D6D17B80080E83C /* TestURLSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestURLSession.swift; sourceTree = ""; }; - 5B23AB861CE62D17000DB898 /* Boxing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Boxing.swift; sourceTree = ""; }; - 5B23AB881CE62D4D000DB898 /* ReferenceConvertible.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReferenceConvertible.swift; sourceTree = ""; }; - 5B23AB8A1CE62F9B000DB898 /* PersonNameComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PersonNameComponents.swift; sourceTree = ""; }; - 5B23AB8C1CE63228000DB898 /* URL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URL.swift; sourceTree = ""; }; - 5B2A98CC1D021886008A0B75 /* NSCFCharacterSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSCFCharacterSet.swift; sourceTree = ""; }; - 5B40920F1D1B304C0022B067 /* StringEncodings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringEncodings.swift; sourceTree = ""; }; - 5B4092111D1B30B40022B067 /* ExtraStringAPIs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExtraStringAPIs.swift; sourceTree = ""; }; - 5B40F9EC1C124F45000E72E3 /* CFXMLInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFXMLInterface.h; sourceTree = ""; }; - 5B40F9F11C125187000E72E3 /* TestXMLParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestXMLParser.swift; sourceTree = ""; }; - 5B40F9F31C12524C000E72E3 /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; }; - 5B424C751D0B6E5B007B39C8 /* IndexPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IndexPath.swift; sourceTree = ""; }; - 5B5BFEAB1E6CC0C200AC8D9E /* NSCFBoolean.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSCFBoolean.swift; sourceTree = ""; }; - 5B5C5EEF1CE61FA4001346BD /* Date.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Date.swift; sourceTree = ""; }; - 5B5D885D1BBC938800234F36 /* SwiftFoundation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5B5D886A1BBC948300234F36 /* CFApplicationPreferences.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFApplicationPreferences.c; sourceTree = ""; }; - 5B5D886C1BBC94C400234F36 /* CFPreferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFPreferences.h; sourceTree = ""; }; - 5B5D88721BBC952A00234F36 /* CFBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFBase.h; sourceTree = ""; }; - 5B5D88741BBC954000234F36 /* CFAvailability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFAvailability.h; sourceTree = ""; }; - 5B5D88771BBC956C00234F36 /* CFArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFArray.h; sourceTree = ""; }; - 5B5D88781BBC956C00234F36 /* CFArray.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFArray.c; sourceTree = ""; }; - 5B5D887C1BBC960100234F36 /* CFString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFString.h; sourceTree = ""; }; - 5B5D887D1BBC960100234F36 /* CFString.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFString.c; sourceTree = ""; tabWidth = 8; }; - 5B5D887E1BBC960100234F36 /* CFStringDefaultEncoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFStringDefaultEncoding.h; sourceTree = ""; }; - 5B5D887F1BBC960100234F36 /* CFStringEncodings.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFStringEncodings.c; sourceTree = ""; }; - 5B5D88801BBC960100234F36 /* CFStringUtilities.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFStringUtilities.c; sourceTree = ""; }; - 5B5D88861BBC962500234F36 /* CFData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFData.h; sourceTree = ""; }; - 5B5D88871BBC962500234F36 /* CFData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFData.c; sourceTree = ""; }; - 5B5D888A1BBC963C00234F36 /* CFInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFInternal.h; sourceTree = ""; }; - 5B5D888C1BBC964D00234F36 /* CFDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFDictionary.h; sourceTree = ""; }; - 5B5D888D1BBC964D00234F36 /* CFDictionary.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFDictionary.c; sourceTree = ""; }; - 5B5D88901BBC969400234F36 /* CFCharacterSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFCharacterSet.h; sourceTree = ""; }; - 5B5D88911BBC969400234F36 /* CFCharacterSetPriv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFCharacterSetPriv.h; sourceTree = ""; }; - 5B5D88921BBC969400234F36 /* CFCharacterSet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFCharacterSet.c; sourceTree = ""; }; - 5B5D88971BBC96C300234F36 /* CFURL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFURL.h; sourceTree = ""; }; - 5B5D88981BBC96C300234F36 /* CFURL.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFURL.c; sourceTree = ""; }; - 5B5D88991BBC96C300234F36 /* CFURL.inc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFURL.inc.h; sourceTree = ""; }; - 5B5D889D1BBC96D400234F36 /* CFURLAccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFURLAccess.h; sourceTree = ""; }; - 5B5D889E1BBC96D400234F36 /* CFURLAccess.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFURLAccess.c; sourceTree = ""; }; - 5B5D889F1BBC96D400234F36 /* CFURLPriv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFURLPriv.h; sourceTree = ""; }; - 5B5D88A41BBC970D00234F36 /* CFError.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFError.c; sourceTree = ""; }; - 5B5D88A51BBC970D00234F36 /* CFError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFError.h; sourceTree = ""; }; - 5B5D88A61BBC970D00234F36 /* CFError_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFError_Private.h; sourceTree = ""; }; - 5B5D88AB1BBC974700234F36 /* CFLocale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFLocale.h; sourceTree = ""; }; - 5B5D88AC1BBC974700234F36 /* CFLocale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFLocale.c; sourceTree = ""; }; - 5B5D88AD1BBC974700234F36 /* CFLocaleIdentifier.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFLocaleIdentifier.c; sourceTree = ""; }; - 5B5D88AE1BBC974700234F36 /* CFLocaleInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFLocaleInternal.h; sourceTree = ""; }; - 5B5D88B51BBC978900234F36 /* CoreFoundation_Prefix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreFoundation_Prefix.h; sourceTree = ""; }; - 5B5D88B81BBC97D100234F36 /* CFDate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFDate.h; sourceTree = ""; }; - 5B5D88B91BBC97D100234F36 /* CFDate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFDate.c; sourceTree = ""; }; - 5B5D88BC1BBC97E400234F36 /* CFLogUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFLogUtilities.h; sourceTree = ""; }; - 5B5D88BE1BBC980100234F36 /* CFTimeZone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFTimeZone.h; sourceTree = ""; }; - 5B5D88BF1BBC980100234F36 /* CFTimeZone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFTimeZone.c; sourceTree = ""; }; - 5B5D88C21BBC981C00234F36 /* CFRuntime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFRuntime.h; sourceTree = ""; }; - 5B5D88C31BBC981C00234F36 /* CFRuntime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFRuntime.c; sourceTree = ""; }; - 5B5D88C61BBC983600234F36 /* ForFoundationOnly.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ForFoundationOnly.h; sourceTree = ""; }; - 5B5D88C81BBC984900234F36 /* CFSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFSet.h; sourceTree = ""; }; - 5B5D88C91BBC984900234F36 /* CFSet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFSet.c; sourceTree = ""; }; - 5B5D88CC1BBC986300234F36 /* CFPriv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFPriv.h; sourceTree = ""; }; - 5B5D88CF1BBC9AAC00234F36 /* CFMachPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFMachPort.h; sourceTree = ""; }; - 5B5D88D01BBC9AAC00234F36 /* CFMachPort.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFMachPort.c; sourceTree = ""; }; - 5B5D88D31BBC9AC500234F36 /* CFNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFNumber.h; sourceTree = ""; }; - 5B5D88D41BBC9AC500234F36 /* CFNumber.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFNumber.c; sourceTree = ""; }; - 5B5D88D71BBC9AD800234F36 /* CFRunLoop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFRunLoop.h; sourceTree = ""; }; - 5B5D88D81BBC9AD800234F36 /* CFRunLoop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFRunLoop.c; sourceTree = ""; }; - 5B5D88DB1BBC9AEC00234F36 /* CFMessagePort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFMessagePort.h; sourceTree = ""; }; - 5B5D88DC1BBC9AEC00234F36 /* CFMessagePort.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFMessagePort.c; sourceTree = ""; }; - 5B5D88DF1BBC9B0300234F36 /* CFSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFSocket.h; sourceTree = ""; }; - 5B5D88E01BBC9B0300234F36 /* CFSocket.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFSocket.c; sourceTree = ""; }; - 5B5D88E51BBC9B5C00234F36 /* CFBundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFBundle.h; sourceTree = ""; }; - 5B5D88E61BBC9B5C00234F36 /* CFBundlePriv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFBundlePriv.h; sourceTree = ""; }; - 5B5D88E71BBC9B5C00234F36 /* CFBundle_BinaryTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFBundle_BinaryTypes.h; sourceTree = ""; }; - 5B5D88E81BBC9B5C00234F36 /* CFBundle_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFBundle_Internal.h; sourceTree = ""; }; - 5B5D88E91BBC9B5C00234F36 /* CFBundle.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBundle.c; sourceTree = ""; }; - 5B5D88EA1BBC9B5C00234F36 /* CFBundle_Resources.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBundle_Resources.c; sourceTree = ""; }; - 5B5D88EB1BBC9B5C00234F36 /* CFBundle_InfoPlist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBundle_InfoPlist.c; sourceTree = ""; }; - 5B5D88EC1BBC9B5C00234F36 /* CFBundle_Strings.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBundle_Strings.c; sourceTree = ""; }; - 5B5D88ED1BBC9B5C00234F36 /* CFBundle_Grok.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBundle_Grok.c; sourceTree = ""; }; - 5B5D88EE1BBC9B5C00234F36 /* CFBundle_Binary.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBundle_Binary.c; sourceTree = ""; }; - 5B5D88FA1BBC9B9500234F36 /* CFPropertyList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFPropertyList.h; sourceTree = ""; }; - 5B5D88FB1BBC9B9500234F36 /* CFPropertyList.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFPropertyList.c; sourceTree = ""; }; - 5B5D88FF1BBC9BC300234F36 /* CFStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFStream.h; sourceTree = ""; }; - 5B5D89001BBC9BC300234F36 /* CFStreamPriv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFStreamPriv.h; sourceTree = ""; }; - 5B5D89011BBC9BC300234F36 /* CFStreamInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFStreamInternal.h; sourceTree = ""; }; - 5B5D89021BBC9BC300234F36 /* CFStreamAbstract.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFStreamAbstract.h; sourceTree = ""; }; - 5B5D89031BBC9BC300234F36 /* CFStream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFStream.c; sourceTree = ""; }; - 5B5D89091BBC9BEF00234F36 /* CFDateFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFDateFormatter.h; sourceTree = ""; }; - 5B5D890B1BBC9BEF00234F36 /* CFDateFormatter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFDateFormatter.c; sourceTree = ""; }; - 5B5D890F1BBC9C1B00234F36 /* CFStringEncodingExt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFStringEncodingExt.h; sourceTree = ""; }; - 5B5D89111BBC9C3400234F36 /* CFNumberFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFNumberFormatter.h; sourceTree = ""; }; - 5B5D89121BBC9C3400234F36 /* CFNumberFormatter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFNumberFormatter.c; sourceTree = ""; }; - 5B5D89151BBC9C5500234F36 /* CFBag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFBag.h; sourceTree = ""; }; - 5B5D89161BBC9C5500234F36 /* CFBag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBag.c; sourceTree = ""; }; - 5B5D89191BBDA4EE00234F36 /* CFByteOrder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFByteOrder.h; sourceTree = ""; }; - 5B5D891B1BBDA50800234F36 /* CFCalendar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFCalendar.h; sourceTree = ""; }; - 5B5D891D1BBDA65F00234F36 /* CFBigNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFBigNumber.h; sourceTree = ""; }; - 5B5D891E1BBDA65F00234F36 /* CFBigNumber.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBigNumber.c; sourceTree = ""; }; - 5B5D89221BBDA6C000234F36 /* CFStringEncodingConverterExt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFStringEncodingConverterExt.h; sourceTree = ""; }; - 5B5D89241BBDA6DD00234F36 /* CFStringEncodingConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFStringEncodingConverter.h; sourceTree = ""; }; - 5B5D89251BBDA6DD00234F36 /* CFStringEncodingConverterPriv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFStringEncodingConverterPriv.h; sourceTree = ""; }; - 5B5D89261BBDA6DD00234F36 /* CFStringEncodingConverter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFStringEncodingConverter.c; sourceTree = ""; }; - 5B5D892A1BBDA71100234F36 /* CFUniChar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFUniChar.h; sourceTree = ""; }; - 5B5D892B1BBDA71100234F36 /* CFUniCharPriv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFUniCharPriv.h; sourceTree = ""; }; - 5B5D892C1BBDA71100234F36 /* CFUniChar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFUniChar.c; sourceTree = ""; }; - 5B5D89301BBDA73600234F36 /* CFStringEncodingDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFStringEncodingDatabase.h; sourceTree = ""; }; - 5B5D89321BBDA74B00234F36 /* CFICUConverters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFICUConverters.h; sourceTree = ""; }; - 5B5D89341BBDA76300234F36 /* CFBurstTrie.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFBurstTrie.h; sourceTree = ""; }; - 5B5D89351BBDA76300234F36 /* CFBurstTrie.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBurstTrie.c; sourceTree = ""; }; - 5B5D89391BBDA7AB00234F36 /* CFUserNotification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFUserNotification.h; sourceTree = ""; }; - 5B5D893A1BBDA7AB00234F36 /* CFUserNotification.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFUserNotification.c; sourceTree = ""; }; - 5B5D893D1BBDA9A400234F36 /* CFUnicodeDecomposition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFUnicodeDecomposition.h; sourceTree = ""; }; - 5B5D893E1BBDA9A400234F36 /* CFUnicodeDecomposition.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFUnicodeDecomposition.c; sourceTree = ""; }; - 5B5D893F1BBDA9A400234F36 /* CFUnicodePrecomposition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFUnicodePrecomposition.h; sourceTree = ""; }; - 5B5D89401BBDA9A400234F36 /* CFUnicodePrecomposition.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFUnicodePrecomposition.c; sourceTree = ""; }; - 5B5D89451BBDA9EE00234F36 /* CFPlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFPlugIn.h; sourceTree = ""; }; - 5B5D89461BBDA9EE00234F36 /* CFPlugInCOM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFPlugInCOM.h; sourceTree = ""; }; - 5B5D89471BBDA9EE00234F36 /* CFPlugIn_Factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFPlugIn_Factory.h; sourceTree = ""; }; - 5B5D89481BBDA9EE00234F36 /* CFPlugIn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFPlugIn.c; sourceTree = ""; }; - 5B5D89531BBDAA0100234F36 /* CFUUID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFUUID.h; sourceTree = ""; }; - 5B5D89541BBDAA0100234F36 /* CFUUID.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFUUID.c; sourceTree = ""; }; - 5B5D89571BBDAAC600234F36 /* CFBasicHash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFBasicHash.h; sourceTree = ""; }; - 5B5D89581BBDAAC600234F36 /* CFBasicHash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBasicHash.c; sourceTree = ""; }; - 5B5D895B1BBDAB7E00234F36 /* CoreFoundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreFoundation.h; sourceTree = ""; }; - 5B5D895D1BBDABBF00234F36 /* CFBase.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBase.c; sourceTree = ""; }; - 5B5D895F1BBDABF400234F36 /* CFUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFUtilities.h; sourceTree = ""; }; - 5B5D89601BBDABF400234F36 /* CFUtilities.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFUtilities.c; sourceTree = ""; }; - 5B5D89631BBDAC3E00234F36 /* CFBinaryHeap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFBinaryHeap.h; sourceTree = ""; }; - 5B5D89641BBDAC3E00234F36 /* CFBinaryHeap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBinaryHeap.c; sourceTree = ""; }; - 5B5D89671BBDACB800234F36 /* CFBitVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFBitVector.h; sourceTree = ""; }; - 5B5D89681BBDACB800234F36 /* CFBitVector.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBitVector.c; sourceTree = ""; }; - 5B5D896B1BBDACE400234F36 /* CFBundle_Locale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBundle_Locale.c; sourceTree = ""; }; - 5B5D896D1BBDAD2000234F36 /* CFCalendar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFCalendar.c; sourceTree = ""; }; - 5B5D896F1BBDAD4F00234F36 /* CFStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFStorage.h; sourceTree = ""; }; - 5B5D89701BBDAD4F00234F36 /* CFStorage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFStorage.c; sourceTree = ""; }; - 5B5D89731BBDAD9900234F36 /* CFSystemDirectories.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFSystemDirectories.c; sourceTree = ""; }; - 5B5D89751BBDADD300234F36 /* libicucore.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libicucore.dylib; path = usr/lib/libicucore.dylib; sourceTree = SDKROOT; }; - 5B5D89771BBDADDB00234F36 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; - 5B5D89791BBDADDF00234F36 /* libobjc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libobjc.dylib; path = usr/lib/libobjc.dylib; sourceTree = SDKROOT; }; - 5B5D897B1BBDAE0800234F36 /* CFPlatform.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFPlatform.c; sourceTree = ""; }; - 5B5D897D1BBDAEE600234F36 /* CFSortFunctions.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFSortFunctions.c; sourceTree = ""; }; - 5B5D897F1BBDAF0300234F36 /* CFTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFTree.h; sourceTree = ""; }; - 5B5D89801BBDAF0300234F36 /* CFTree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFTree.c; sourceTree = ""; }; - 5B5D89831BBDB13800234F36 /* CFConcreteStreams.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFConcreteStreams.c; sourceTree = ""; }; - 5B5D89851BBDB18D00234F36 /* CFFileUtilities.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFFileUtilities.c; sourceTree = ""; }; - 5B5D89871BBDB1B400234F36 /* CFSocketStream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFSocketStream.c; sourceTree = ""; }; - 5B5D89891BBDB1EF00234F36 /* CFBinaryPList.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBinaryPList.c; sourceTree = ""; tabWidth = 8; }; - 5B5D898B1BBDBF6500234F36 /* CFPreferences.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFPreferences.c; sourceTree = ""; }; - 5B5D898D1BBDBF8C00234F36 /* CFBuiltinConverters.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBuiltinConverters.c; sourceTree = ""; }; - 5B5D898F1BBDBFB100234F36 /* CFOldStylePList.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFOldStylePList.c; sourceTree = ""; }; - 5B5D899F1BBDC01E00234F36 /* CFICUConverters.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFICUConverters.c; sourceTree = ""; }; - 5B5D89A31BBDC04100234F36 /* CFPlatformConverters.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFPlatformConverters.c; sourceTree = ""; }; - 5B5D89A51BBDC06800234F36 /* CFStringEncodingDatabase.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFStringEncodingDatabase.c; sourceTree = ""; }; - 5B5D89A71BBDC09700234F36 /* CFStringScanner.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFStringScanner.c; sourceTree = ""; }; - 5B5D89A91BBDC11100234F36 /* CFLocaleKeys.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFLocaleKeys.c; sourceTree = ""; }; - 5B6228BA1C179041009587FE /* CFRunArray.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFRunArray.c; sourceTree = ""; }; - 5B6228BC1C179049009587FE /* CFRunArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFRunArray.h; sourceTree = ""; }; - 5B6228BE1C179052009587FE /* CFAttributedString.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFAttributedString.c; sourceTree = ""; }; - 5B6228C01C17905B009587FE /* CFAttributedString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFAttributedString.h; sourceTree = ""; }; - 5B628EDE1D1C995C00CA9570 /* MeasurementFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeasurementFormatter.swift; sourceTree = ""; }; - 5B6E11A61DA451E7009B48A3 /* CFLocale_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFLocale_Private.h; sourceTree = ""; }; - 5B6E11A81DA45EB5009B48A3 /* CFDateFormatter_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFDateFormatter_Private.h; sourceTree = ""; }; - 5B6F17921C48631C00935030 /* TestNSNull.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSNull.swift; sourceTree = ""; }; - 5B6F17931C48631C00935030 /* TestNumberFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNumberFormatter.swift; sourceTree = ""; }; - 5B6F17941C48631C00935030 /* TestProcess.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = TestProcess.swift; sourceTree = ""; }; - 5B6F17951C48631C00935030 /* TestXMLDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestXMLDocument.swift; sourceTree = ""; }; - 5B6F17961C48631C00935030 /* TestUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestUtils.swift; sourceTree = ""; }; - 5B7818591D6CB5CD004A01F2 /* CGFloat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CGFloat.swift; sourceTree = ""; }; - 5B7C8A6E1BEA7F8F00C5B690 /* libCoreFoundation.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCoreFoundation.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 5B8BA1611D0B773A00938C27 /* IndexSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IndexSet.swift; sourceTree = ""; }; - 5B94E8811C430DE70055C035 /* NSStringAPI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSStringAPI.swift; sourceTree = ""; }; - 5BA0106D1DF212B300E56898 /* NSPlatform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSPlatform.swift; sourceTree = ""; }; - 5BA9BEA31CF380E8009DBD6C /* URLRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLRequest.swift; sourceTree = ""; }; - 5BA9BEA51CF3D747009DBD6C /* Data.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Data.swift; sourceTree = ""; }; - 5BA9BEA71CF3E7E7009DBD6C /* CharacterSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CharacterSet.swift; sourceTree = ""; }; - 5BA9BEBC1CF4F3B8009DBD6C /* Notification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = ""; }; - 5BC1B9A321F2757F00524D8C /* ContiguousBytes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContiguousBytes.swift; sourceTree = ""; }; - 5BC1B9A521F2759C00524D8C /* DataProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataProtocol.swift; sourceTree = ""; }; - 5BC1B9A721F275B000524D8C /* Collections+DataProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collections+DataProtocol.swift"; sourceTree = ""; }; - 5BC1B9A921F275C400524D8C /* DispatchData+DataProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DispatchData+DataProtocol.swift"; sourceTree = ""; }; - 5BC1B9AB21F275D500524D8C /* NSData+DataProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSData+DataProtocol.swift"; sourceTree = ""; }; - 5BC1B9AD21F275E900524D8C /* Pointers+DataProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Pointers+DataProtocol.swift"; sourceTree = ""; }; - 5BC1D8BC1BF3ADFE009D3973 /* TestCharacterSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestCharacterSet.swift; sourceTree = ""; }; - 5BC2C00D1C07832E00CC214E /* CFStringTransform.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFStringTransform.c; sourceTree = ""; }; - 5BC46D531D05D6D900005853 /* DateInterval.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateInterval.swift; sourceTree = ""; }; - 5BCCA8D81CE6697F0059B963 /* URLComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLComponents.swift; sourceTree = ""; }; - 5BCD03811D3EE35C00E3FF9B /* TimeZone.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TimeZone.swift; sourceTree = ""; }; - 5BD31D1F1D5CE8C400563814 /* Bridging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bridging.swift; sourceTree = ""; }; - 5BD31D211D5CEBA800563814 /* String.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = String.swift; sourceTree = ""; }; - 5BD31D231D5CECC400563814 /* Array.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Array.swift; sourceTree = ""; }; - 5BD31D3E1D5D19D600563814 /* Dictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Dictionary.swift; sourceTree = ""; }; - 5BD31D401D5D1BC300563814 /* Set.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Set.swift; sourceTree = ""; }; - 5BD70FB11D3D4CDC003B9BF8 /* Locale.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Locale.swift; sourceTree = ""; }; - 5BD70FB31D3D4F8B003B9BF8 /* Calendar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Calendar.swift; sourceTree = ""; }; - 5BDC3F191BCC440100ED97BB /* CFICULogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFICULogging.h; sourceTree = ""; }; - 5BDC3F1C1BCC447900ED97BB /* CFStringLocalizedFormattingInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFStringLocalizedFormattingInternal.h; sourceTree = ""; }; - 5BDC3F2E1BCC5DCB00ED97BB /* NSArray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSArray.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F2F1BCC5DCB00ED97BB /* Bundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Bundle.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F301BCC5DCB00ED97BB /* NSCalendar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSCalendar.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F311BCC5DCB00ED97BB /* NSCharacterSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSCharacterSet.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F321BCC5DCB00ED97BB /* NSCoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSCoder.swift; sourceTree = ""; }; - 5BDC3F331BCC5DCB00ED97BB /* NSData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSData.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F341BCC5DCB00ED97BB /* NSDate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSDate.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F351BCC5DCB00ED97BB /* DateFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = DateFormatter.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F361BCC5DCB00ED97BB /* NSDictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSDictionary.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F371BCC5DCB00ED97BB /* NSEnumerator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSEnumerator.swift; sourceTree = ""; }; - 5BDC3F381BCC5DCB00ED97BB /* NSError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSError.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F391BCC5DCB00ED97BB /* Formatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Formatter.swift; sourceTree = ""; }; - 5BDC3F3A1BCC5DCB00ED97BB /* Host.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Host.swift; sourceTree = ""; }; - 5BDC3F3B1BCC5DCB00ED97BB /* NSLocale.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSLocale.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F3C1BCC5DCB00ED97BB /* NSLock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSLock.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F3D1BCC5DCB00ED97BB /* NSNumber.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSNumber.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F3E1BCC5DCB00ED97BB /* NSObjCRuntime.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSObjCRuntime.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F3F1BCC5DCB00ED97BB /* NSObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSObject.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F401BCC5DCB00ED97BB /* NSPathUtilities.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSPathUtilities.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F411BCC5DCB00ED97BB /* ProcessInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ProcessInfo.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F421BCC5DCB00ED97BB /* PropertyListSerialization.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = PropertyListSerialization.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F431BCC5DCB00ED97BB /* NSRange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSRange.swift; sourceTree = ""; }; - 5BDC3F441BCC5DCB00ED97BB /* NSSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSSet.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F451BCC5DCB00ED97BB /* NSString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSString.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3F461BCC5DCB00ED97BB /* NSSwiftRuntime.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSSwiftRuntime.swift; sourceTree = ""; }; - 5BDC3F471BCC5DCB00ED97BB /* Thread.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Thread.swift; sourceTree = ""; }; - 5BDC3F481BCC5DCB00ED97BB /* Timer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Timer.swift; sourceTree = ""; }; - 5BDC3F491BCC5DCB00ED97BB /* NSTimeZone.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSTimeZone.swift; sourceTree = ""; }; - 5BDC3F4A1BCC5DCB00ED97BB /* NSURL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSURL.swift; sourceTree = ""; }; - 5BDC3F4B1BCC5DCB00ED97BB /* NSUUID.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSUUID.swift; sourceTree = ""; }; - 5BDC3F4C1BCC5DCB00ED97BB /* NSValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSValue.swift; sourceTree = ""; }; - 5BDC3F721BCC60EF00ED97BB /* module.map */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.map; sourceTree = ""; }; - 5BDC3FC91BCF176100ED97BB /* NSCFArray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSCFArray.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3FCB1BCF177E00ED97BB /* NSCFString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSCFString.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3FCD1BCF17D300ED97BB /* NSCFDictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSCFDictionary.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BDC3FCF1BCF17E600ED97BB /* NSCFSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSCFSet.swift; sourceTree = ""; }; - 5BDC405C1BD6D83B00ED97BB /* TestFoundation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestFoundation.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 5BDF628E1C1A550800A89075 /* CFRegularExpression.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFRegularExpression.c; sourceTree = ""; }; - 5BDF628F1C1A550800A89075 /* CFRegularExpression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFRegularExpression.h; sourceTree = ""; }; - 5BECBA371D1CAD7000B39B1F /* Measurement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Measurement.swift; sourceTree = ""; }; - 5BECBA391D1CAE9A00B39B1F /* NSMeasurement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSMeasurement.swift; sourceTree = ""; }; - 5BECBA3B1D1CAF8800B39B1F /* Unit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Unit.swift; sourceTree = ""; }; - 5BF7AEC21BCD568D008F214A /* ForSwiftFoundationOnly.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ForSwiftFoundationOnly.h; sourceTree = ""; }; - 5BF9B7F11FABBDB000EE1A7C /* CFPropertyList_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFPropertyList_Private.h; sourceTree = ""; }; - 5BF9B7F41FABD5D300EE1A7C /* CFBundle_Main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBundle_Main.c; sourceTree = ""; }; - 5BF9B7F51FABD5D400EE1A7C /* CFBundle_DebugStrings.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBundle_DebugStrings.c; sourceTree = ""; }; - 5BF9B7F61FABD5D400EE1A7C /* CFBundle_ResourceFork.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBundle_ResourceFork.c; sourceTree = ""; }; - 5BF9B7F71FABD5D400EE1A7C /* CFBundle_Tables.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBundle_Tables.c; sourceTree = ""; }; - 5BF9B7F81FABD5D500EE1A7C /* CFBundle_Executable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFBundle_Executable.c; sourceTree = ""; }; - 5D0E1BDA237A1FE800C35C5A /* TestUnitVolume.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestUnitVolume.swift; sourceTree = ""; }; - 5E5835F31C20C9B500C81317 /* TestThread.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestThread.swift; sourceTree = ""; }; - 5EB6A15C1C188FC40037DCB8 /* TestJSONSerialization.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestJSONSerialization.swift; sourceTree = ""; }; - 5EF673AB1C28B527006212A3 /* TestNotificationQueue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNotificationQueue.swift; sourceTree = ""; }; - 5FE52C941D147D1C00F7D270 /* TestNSTextCheckingResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSTextCheckingResult.swift; sourceTree = ""; }; - 616068F2225DE5C2004FCC54 /* FTPServer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FTPServer.swift; sourceTree = ""; }; - 616068F4225DE606004FCC54 /* TestURLSessionFTP.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestURLSessionFTP.swift; sourceTree = ""; }; - 61A395F91C2484490029B337 /* TestNSLocale.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSLocale.swift; sourceTree = ""; }; - 61D6C9EE1C1DFE9500DEF583 /* TestTimer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestTimer.swift; sourceTree = ""; }; - 61E0117B1C1B554D000037DD /* TestRunLoop.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestRunLoop.swift; sourceTree = ""; }; - 61F8AE7C1C180FC600FB62F0 /* TestNotificationCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNotificationCenter.swift; sourceTree = ""; }; - 63DCE9D11EAA430100E9CB02 /* ISO8601DateFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ISO8601DateFormatter.swift; sourceTree = ""; }; - 63DCE9D31EAA432400E9CB02 /* TestISO8601DateFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestISO8601DateFormatter.swift; sourceTree = ""; }; - 659FB6DD2405E5E200F5F63F /* TestBridging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestBridging.swift; sourceTree = ""; }; - 684C79001F62B611005BD73E /* TestNSNumberBridging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSNumberBridging.swift; sourceTree = ""; }; - 6E203B8C1C1303BB003B2576 /* TestBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestBundle.swift; sourceTree = ""; }; - 6EB768271D18C12C00D4B719 /* UUID.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UUID.swift; sourceTree = ""; }; - 790043391CACD33E00ECCBF1 /* TestNSCompoundPredicate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSCompoundPredicate.swift; sourceTree = ""; }; - 7900433A1CACD33E00ECCBF1 /* TestNSPredicate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSPredicate.swift; sourceTree = ""; }; - 7A7D6FBA1C16439400957E2E /* TestURLResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestURLResponse.swift; sourceTree = ""; }; - 7D0DE86C211883F500540061 /* TestDateComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestDateComponents.swift; sourceTree = ""; }; - 7D0DE86D211883F500540061 /* Utilities.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Utilities.swift; sourceTree = ""; }; - 7D8BD736225EADB80057CF37 /* TestDateInterval.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestDateInterval.swift; sourceTree = ""; }; - 7D8BD738225ED1480057CF37 /* TestMeasurement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestMeasurement.swift; sourceTree = ""; }; - 83712C8D1C1684900049AD49 /* TestNSURLRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSURLRequest.swift; sourceTree = ""; }; - 844DC3321C17584F005611F9 /* TestScanner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestScanner.swift; sourceTree = ""; }; - 848A30571C137B3500C83206 /* TestHTTPCookie.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TestHTTPCookie.swift; path = Tests/Foundation/Tests/TestHTTPCookie.swift; sourceTree = SOURCE_ROOT; }; - 84BA558D1C16F90900F48C54 /* TestTimeZone.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestTimeZone.swift; sourceTree = ""; }; - 88D28DE61C13AE9000494606 /* TestNSGeometry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSGeometry.swift; sourceTree = ""; }; - 90E645DE1E4C89A400D0D47C /* TestNSCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSCache.swift; sourceTree = ""; }; - 91B668A22252B3C5001487A1 /* FileManager+POSIX.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FileManager+POSIX.swift"; sourceTree = ""; }; - 91B668A42252B3E7001487A1 /* FileManager+Win32.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FileManager+Win32.swift"; sourceTree = ""; }; - 9F0041781ECD5962004138BD /* main.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; - 9F0DD33F1ECD734200F68030 /* xdgTestHelper.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = xdgTestHelper.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 9F0DD34F1ECD737B00F68030 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9F4ADBB61ECD445E001F0B3D /* SymbolAliases */ = {isa = PBXFileReference; lastKnownFileType = text; path = SymbolAliases; sourceTree = ""; }; - A058C2011E529CF100B07AA1 /* TestMassFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestMassFormatter.swift; sourceTree = ""; }; - A5A34B551C18C85D00FD972B /* TestByteCountFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestByteCountFormatter.swift; sourceTree = ""; }; - AA9E0E0A21FA6C5600963F4C /* PropertyListEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PropertyListEncoder.swift; sourceTree = ""; }; - AA9E0E0C21FA6E0700963F4C /* TestPropertyListEncoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestPropertyListEncoder.swift; sourceTree = ""; }; - ABB1293426D4736B00401E6C /* TestUnitInformationStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestUnitInformationStorage.swift; sourceTree = ""; }; - B167A6641ED7303F0040B09A /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - B907F36A20BB07A700013CBE /* NSString-ISO-8859-1-data.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "NSString-ISO-8859-1-data.txt"; sourceTree = ""; }; - B91095781EEF237800A71930 /* NSString-UTF16-LE-data.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "NSString-UTF16-LE-data.txt"; sourceTree = ""; }; - B91095791EEF237800A71930 /* NSString-UTF16-BE-data.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "NSString-UTF16-BE-data.txt"; sourceTree = ""; }; - B91161A82429857D00BD2907 /* DataURLProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataURLProtocol.swift; sourceTree = ""; }; - B91161AB242A350D00BD2907 /* TestDataURLProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestDataURLProtocol.swift; sourceTree = ""; }; - B933A79C1F3055F600FE6846 /* NSString-UTF32-BE-data.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "NSString-UTF32-BE-data.txt"; sourceTree = ""; }; - B933A79D1F3055F600FE6846 /* NSString-UTF32-LE-data.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "NSString-UTF32-LE-data.txt"; sourceTree = ""; }; - B940492C223B146800FB4384 /* TestProgressFraction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestProgressFraction.swift; sourceTree = ""; }; - B951B5EB1F4E2A2000D8B332 /* TestNSLock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestNSLock.swift; sourceTree = ""; }; - B95FC97222AF0050005DEA0A /* SwiftXCTest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftXCTest.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B95FC97422AF051B005DEA0A /* xcode-build.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "xcode-build.sh"; sourceTree = ""; }; - B96C10F525BA1EFD00985A32 /* NSURLComponents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSURLComponents.swift; sourceTree = ""; }; - B96C10FF25BA20A600985A32 /* NSURLQueryItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSURLQueryItem.swift; sourceTree = ""; }; - B96C110925BA215800985A32 /* URLResourceKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLResourceKey.swift; sourceTree = ""; }; - B96C112425BA2CE700985A32 /* URLQueryItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLQueryItem.swift; sourceTree = ""; }; - B96C113625BA376D00985A32 /* NSDateComponents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSDateComponents.swift; sourceTree = ""; }; - B98303E925F2131D001F959E /* JSONDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONDecoder.swift; sourceTree = ""; }; - B98303F325F21389001F959E /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; - B983E32B23F0C69600D9C402 /* Docs */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Docs; sourceTree = ""; }; - B983E32D23F0C6E200D9C402 /* CONTRIBUTING.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = CONTRIBUTING.md; sourceTree = ""; }; - B98E33DC2136AA740044EBE9 /* TestFileWithZeros.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TestFileWithZeros.txt; sourceTree = ""; }; - B9D9733E23D19D3900AB249C /* TestDimension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestDimension.swift; sourceTree = ""; }; - B9D9734023D19E2E00AB249C /* TestNSDateComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSDateComponents.swift; sourceTree = ""; }; - B9D9734223D19FD100AB249C /* TestURLComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestURLComponents.swift; sourceTree = ""; }; - B9D9734423D1A36E00AB249C /* TestHTTPURLResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestHTTPURLResponse.swift; sourceTree = ""; }; - B9F4492B2483FFBF00B30F02 /* TestNSURL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSURL.swift; sourceTree = ""; }; - BB3D7557208A1E500085CFDC /* Imports.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Imports.swift; sourceTree = ""; }; - BD8042151E09857800487EB8 /* TestLengthFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestLengthFormatter.swift; sourceTree = ""; }; - BDBB658F1E256BFA001A7286 /* TestEnergyFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestEnergyFormatter.swift; sourceTree = ""; }; - BDFDF0A61DFF5B3E00C04CC5 /* TestPersonNameComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestPersonNameComponents.swift; sourceTree = ""; }; - BF85E9D71FBDCC2000A79793 /* TestHost.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHost.swift; sourceTree = ""; }; - BF8E65301DC3B3CB005AB5C3 /* TestNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNotification.swift; sourceTree = ""; }; - C2A9D75B1C15C08B00993803 /* TestNSUUID.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSUUID.swift; sourceTree = ""; }; - C7DE1FCB21EEE67200174F35 /* TestUUID.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestUUID.swift; sourceTree = ""; }; - C93559281C12C49F009FD6A9 /* TestAffineTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestAffineTransform.swift; sourceTree = ""; }; - CC5249BF1D341D23007CB54D /* TestUnitConverter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestUnitConverter.swift; sourceTree = ""; }; - CD1C7F7C1E303B47008E331C /* TestNSError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSError.swift; sourceTree = ""; }; - CE19A88B1C23AA2300B4CB6A /* NSStringTestData.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NSStringTestData.txt; sourceTree = ""; }; - D3047AEB1C38BC3300295652 /* TestNSValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSValue.swift; sourceTree = ""; }; - D31302001C30CEA900295652 /* NSConcreteValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSConcreteValue.swift; sourceTree = ""; }; - D370696D1C394FBF00295652 /* NSKeyedUnarchiver-RangeTest.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "NSKeyedUnarchiver-RangeTest.plist"; sourceTree = ""; }; - D39A14001C2D6E0A00295652 /* NSKeyedUnarchiver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSKeyedUnarchiver.swift; sourceTree = ""; }; - D3A597EF1C33A9E500295652 /* TestNSKeyedUnarchiver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSKeyedUnarchiver.swift; sourceTree = ""; }; - D3A597F11C33C68E00295652 /* TestNSKeyedArchiver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSKeyedArchiver.swift; sourceTree = ""; }; - D3A597F31C34142600295652 /* NSKeyedUnarchiver-NotificationTest.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "NSKeyedUnarchiver-NotificationTest.plist"; sourceTree = ""; }; - D3A597F51C3415CC00295652 /* NSKeyedUnarchiver-ArrayTest.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "NSKeyedUnarchiver-ArrayTest.plist"; sourceTree = ""; }; - D3A597F61C3415CC00295652 /* NSKeyedUnarchiver-URLTest.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "NSKeyedUnarchiver-URLTest.plist"; sourceTree = ""; }; - D3A597F91C3415F000295652 /* NSKeyedUnarchiver-UUIDTest.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "NSKeyedUnarchiver-UUIDTest.plist"; sourceTree = ""; }; - D3A597FB1C3417EA00295652 /* NSKeyedUnarchiver-ComplexTest.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.bplist; path = "NSKeyedUnarchiver-ComplexTest.plist"; sourceTree = ""; }; - D3A597FF1C341E9100295652 /* NSKeyedUnarchiver-ConcreteValueTest.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "NSKeyedUnarchiver-ConcreteValueTest.plist"; sourceTree = ""; }; - D3A598021C349E6A00295652 /* NSKeyedUnarchiver-OrderedSetTest.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "NSKeyedUnarchiver-OrderedSetTest.plist"; sourceTree = ""; }; - D3BCEB9D1C2EDED800295652 /* NSLog.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSLog.swift; sourceTree = ""; }; - D3BCEB9F1C2F6DDB00295652 /* NSKeyedCoderOldStyleArray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSKeyedCoderOldStyleArray.swift; sourceTree = ""; }; - D3E8D6D01C367AB600295652 /* NSSpecialValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSSpecialValue.swift; sourceTree = ""; }; - D3E8D6D21C36982700295652 /* NSKeyedUnarchiver-EdgeInsetsTest.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "NSKeyedUnarchiver-EdgeInsetsTest.plist"; sourceTree = ""; }; - D3E8D6D41C36AC0C00295652 /* NSKeyedUnarchiver-RectTest.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "NSKeyedUnarchiver-RectTest.plist"; sourceTree = ""; }; - D4FE895A1D703D1100DA7986 /* TestURLRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestURLRequest.swift; sourceTree = ""; }; - D512D17B1CD883F00032E6A5 /* TestFileHandle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestFileHandle.swift; sourceTree = ""; }; - D5C40F321CDA1D460005690C /* TestOperationQueue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestOperationQueue.swift; sourceTree = ""; }; - D834F9931C31C4060023812A /* TestNSOrderedSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSOrderedSet.swift; sourceTree = ""; }; - DAA79BD820D42C07004AF044 /* TestURLProtectionSpace.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestURLProtectionSpace.swift; sourceTree = ""; }; - DCA8120A1F046D13000D0C86 /* TestCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCodable.swift; sourceTree = ""; }; - DCDBB8321C1768AC00313299 /* TestNSData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSData.swift; sourceTree = ""; }; - E1A03F351C4828650023AF4D /* PropertyList-1.0.dtd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "PropertyList-1.0.dtd"; sourceTree = ""; }; - E1A03F371C482C730023AF4D /* NSXMLDTDTestData.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = NSXMLDTDTestData.xml; sourceTree = ""; }; - E1A3726E1C31EBFB0023AF4D /* NSXMLDocumentTestData.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = NSXMLDocumentTestData.xml; sourceTree = ""; }; - E876A73D1C1180E000F279EC /* TestNSRange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSRange.swift; sourceTree = ""; }; - EA01AAEB1DA839C4008F4E07 /* TestProgress.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestProgress.swift; sourceTree = ""; }; - EA0812681DA71C8A00651B70 /* ProgressFraction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProgressFraction.swift; sourceTree = ""; }; - EA313DFC1BE7F2E90060A403 /* CFURLComponents_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFURLComponents_Internal.h; sourceTree = ""; }; - EA313DFD1BE7F2E90060A403 /* CFURLComponents_URIParser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFURLComponents_URIParser.c; sourceTree = ""; }; - EA313DFE1BE7F2E90060A403 /* CFURLComponents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFURLComponents.c; sourceTree = ""; }; - EA313DFF1BE7F2E90060A403 /* CFURLComponents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFURLComponents.h; sourceTree = ""; }; - EA418C251D57257D005EAD0D /* NSKeyedArchiverHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSKeyedArchiverHelpers.swift; sourceTree = ""; }; - EA54A6FA1DB16D53009E0809 /* TestObjCRuntime.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestObjCRuntime.swift; sourceTree = ""; }; - EA66F6351BEED03E00136161 /* TargetConditionals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TargetConditionals.h; path = CoreFoundation/Base.subproj/SwiftRuntime/TargetConditionals.h; sourceTree = SOURCE_ROOT; }; - EA66F6381BF1619600136161 /* main.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; - EA66F63B1BF1619600136161 /* NSURLTestData.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = NSURLTestData.plist; sourceTree = ""; }; - EA66F63C1BF1619600136161 /* TestNSArray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSArray.swift; sourceTree = ""; }; - EA66F63D1BF1619600136161 /* TestNSDictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSDictionary.swift; sourceTree = ""; }; - EA66F63E1BF1619600136161 /* TestIndexSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestIndexSet.swift; sourceTree = ""; }; - EA66F63F1BF1619600136161 /* TestNSNumber.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSNumber.swift; sourceTree = ""; }; - EA66F6401BF1619600136161 /* TestPropertyListSerialization.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestPropertyListSerialization.swift; sourceTree = ""; }; - EA66F6411BF1619600136161 /* TestNSSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSSet.swift; sourceTree = ""; }; - EA66F6421BF1619600136161 /* TestNSString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSString.swift; sourceTree = ""; }; - EA66F6431BF1619600136161 /* TestURL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestURL.swift; sourceTree = ""; }; - EA66F65E1BF2DF4C00136161 /* uuid.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = uuid.c; sourceTree = ""; }; - EA66F65F1BF2DF4C00136161 /* uuid.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = uuid.h; sourceTree = ""; }; - EA66F6601BF2DF7700136161 /* Block_private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Block_private.h; sourceTree = ""; }; - EA66F6611BF2DF7700136161 /* Block.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Block.h; sourceTree = ""; }; - EA66F6621BF2DF7700136161 /* data.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = data.c; sourceTree = ""; }; - EA66F6631BF2DF7700136161 /* runtime.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = runtime.c; sourceTree = ""; }; - EA66F6651BF2F2E800136161 /* CoreFoundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CoreFoundation.h; path = CoreFoundation/Base.subproj/SwiftRuntime/CoreFoundation.h; sourceTree = SOURCE_ROOT; }; - EA66F6691BF55D4B00136161 /* main.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; - EA66F66F1BF56CCB00136161 /* plutil */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = plutil; sourceTree = BUILT_PRODUCTS_DIR; }; - EA66F6791BF9401E00136161 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - EAB57B711BD1C7A5004AC5C5 /* PortMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PortMessage.swift; sourceTree = ""; }; - EADE0B4D1BD09E0800C49C64 /* AffineTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AffineTransform.swift; sourceTree = ""; }; - EADE0B4F1BD09E3100C49C64 /* NSAttributedString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSAttributedString.swift; sourceTree = ""; }; - EADE0B511BD09F2F00C49C64 /* ByteCountFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ByteCountFormatter.swift; sourceTree = ""; }; - EADE0B531BD15DFF00C49C64 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - EADE0B541BD15DFF00C49C64 /* NSCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSCache.swift; sourceTree = ""; }; - EADE0B551BD15DFF00C49C64 /* NSComparisonPredicate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSComparisonPredicate.swift; sourceTree = ""; }; - EADE0B561BD15DFF00C49C64 /* NSCompoundPredicate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSCompoundPredicate.swift; sourceTree = ""; }; - EADE0B571BD15DFF00C49C64 /* DateComponentsFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateComponentsFormatter.swift; sourceTree = ""; }; - EADE0B581BD15DFF00C49C64 /* DateIntervalFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateIntervalFormatter.swift; sourceTree = ""; }; - EADE0B591BD15DFF00C49C64 /* Decimal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Decimal.swift; sourceTree = ""; }; - EADE0B5A1BD15DFF00C49C64 /* NSDecimalNumber.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSDecimalNumber.swift; sourceTree = ""; }; - EADE0B5B1BD15DFF00C49C64 /* EnergyFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnergyFormatter.swift; sourceTree = ""; }; - EADE0B5C1BD15DFF00C49C64 /* NSExpression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSExpression.swift; sourceTree = ""; }; - EADE0B5D1BD15DFF00C49C64 /* FileHandle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileHandle.swift; sourceTree = ""; }; - EADE0B5E1BD15DFF00C49C64 /* FileManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileManager.swift; sourceTree = ""; }; - EADE0B5F1BD15DFF00C49C64 /* NSGeometry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSGeometry.swift; sourceTree = ""; }; - EADE0B601BD15DFF00C49C64 /* HTTPCookie.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPCookie.swift; sourceTree = ""; }; - EADE0B611BD15DFF00C49C64 /* HTTPCookieStorage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPCookieStorage.swift; sourceTree = ""; }; - EADE0B621BD15DFF00C49C64 /* NSIndexPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSIndexPath.swift; sourceTree = ""; }; - EADE0B631BD15DFF00C49C64 /* NSIndexSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSIndexSet.swift; sourceTree = ""; }; - EADE0B641BD15DFF00C49C64 /* JSONSerialization.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONSerialization.swift; sourceTree = ""; }; - EADE0B651BD15DFF00C49C64 /* NSKeyedArchiver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSKeyedArchiver.swift; sourceTree = ""; }; - EADE0B661BD15DFF00C49C64 /* LengthFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LengthFormatter.swift; sourceTree = ""; }; - EADE0B681BD15DFF00C49C64 /* MassFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MassFormatter.swift; sourceTree = ""; }; - EADE0B691BD15DFF00C49C64 /* NSNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSNotification.swift; sourceTree = ""; }; - EADE0B6A1BD15DFF00C49C64 /* NotificationQueue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationQueue.swift; sourceTree = ""; }; - EADE0B6B1BD15DFF00C49C64 /* NSNull.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSNull.swift; sourceTree = ""; }; - EADE0B6C1BD15DFF00C49C64 /* NumberFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NumberFormatter.swift; sourceTree = ""; }; - EADE0B6D1BD15DFF00C49C64 /* Operation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Operation.swift; sourceTree = ""; }; - EADE0B6E1BD15DFF00C49C64 /* NSOrderedSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = NSOrderedSet.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - EADE0B701BD15DFF00C49C64 /* NSPersonNameComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSPersonNameComponents.swift; sourceTree = ""; }; - EADE0B711BD15DFF00C49C64 /* PersonNameComponentsFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PersonNameComponentsFormatter.swift; sourceTree = ""; }; - EADE0B721BD15DFF00C49C64 /* Port.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Port.swift; sourceTree = ""; }; - EADE0B731BD15DFF00C49C64 /* NSPredicate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSPredicate.swift; sourceTree = ""; }; - EADE0B741BD15DFF00C49C64 /* Progress.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Progress.swift; sourceTree = ""; }; - EADE0B751BD15DFF00C49C64 /* NSRegularExpression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSRegularExpression.swift; sourceTree = ""; }; - EADE0B761BD15DFF00C49C64 /* RunLoop.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RunLoop.swift; sourceTree = ""; }; - EADE0B771BD15DFF00C49C64 /* Scanner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scanner.swift; sourceTree = ""; }; - EADE0B781BD15DFF00C49C64 /* NSSortDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSSortDescriptor.swift; sourceTree = ""; }; - EADE0B791BD15DFF00C49C64 /* Stream.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Stream.swift; sourceTree = ""; }; - EADE0B7A1BD15DFF00C49C64 /* Process.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Process.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - EADE0B7B1BD15DFF00C49C64 /* NSTextCheckingResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSTextCheckingResult.swift; sourceTree = ""; }; - EADE0B7D1BD15DFF00C49C64 /* URLAuthenticationChallenge.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLAuthenticationChallenge.swift; sourceTree = ""; }; - EADE0B7E1BD15DFF00C49C64 /* URLCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLCache.swift; sourceTree = ""; }; - EADE0B7F1BD15DFF00C49C64 /* URLCredential.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLCredential.swift; sourceTree = ""; }; - EADE0B801BD15DFF00C49C64 /* URLCredentialStorage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLCredentialStorage.swift; sourceTree = ""; }; - EADE0B811BD15DFF00C49C64 /* NSURLError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSURLError.swift; sourceTree = ""; }; - EADE0B821BD15DFF00C49C64 /* URLProtectionSpace.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLProtectionSpace.swift; sourceTree = ""; }; - EADE0B831BD15DFF00C49C64 /* URLProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLProtocol.swift; sourceTree = ""; }; - EADE0B841BD15DFF00C49C64 /* NSURLRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSURLRequest.swift; sourceTree = ""; }; - EADE0B851BD15DFF00C49C64 /* URLResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLResponse.swift; sourceTree = ""; }; - EADE0B871BD15DFF00C49C64 /* UserDefaults.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaults.swift; sourceTree = ""; }; - EADE0B891BD15DFF00C49C64 /* XMLDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XMLDocument.swift; sourceTree = ""; }; - EADE0B8A1BD15DFF00C49C64 /* XMLDTD.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XMLDTD.swift; sourceTree = ""; }; - EADE0B8B1BD15DFF00C49C64 /* XMLDTDNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XMLDTDNode.swift; sourceTree = ""; }; - EADE0B8C1BD15DFF00C49C64 /* XMLElement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XMLElement.swift; sourceTree = ""; }; - EADE0B8D1BD15DFF00C49C64 /* XMLNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XMLNode.swift; sourceTree = ""; }; - EADE0B8F1BD15DFF00C49C64 /* XMLParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XMLParser.swift; sourceTree = ""; }; - F023071B23F0A2D60023DBEC /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F023072123F0A62F0023DBEC /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F023072523F0B4890023DBEC /* Headers */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Headers; path = Sources/Foundation/Headers; sourceTree = SOURCE_ROOT; }; - F023072E23F0B6E20023DBEC /* Configuration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = URLSession/Configuration.swift; sourceTree = ""; }; - F023072F23F0B6E20023DBEC /* BodySource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BodySource.swift; path = URLSession/BodySource.swift; sourceTree = ""; }; - F023073323F0B6F10023DBEC /* FTPURLProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FTPURLProtocol.swift; path = URLSession/FTP/FTPURLProtocol.swift; sourceTree = ""; }; - F023073623F0B6FE0023DBEC /* HTTPMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HTTPMessage.swift; path = URLSession/HTTP/HTTPMessage.swift; sourceTree = ""; }; - F023073723F0B6FE0023DBEC /* HTTPURLProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HTTPURLProtocol.swift; path = URLSession/HTTP/HTTPURLProtocol.swift; sourceTree = ""; }; - F023073B23F0B70F0023DBEC /* MultiHandle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MultiHandle.swift; path = URLSession/libcurl/MultiHandle.swift; sourceTree = ""; }; - F023073C23F0B70F0023DBEC /* EasyHandle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = EasyHandle.swift; path = URLSession/libcurl/EasyHandle.swift; sourceTree = ""; }; - F023073D23F0B70F0023DBEC /* libcurlHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = libcurlHelpers.swift; path = URLSession/libcurl/libcurlHelpers.swift; sourceTree = ""; }; - F023075323F0B7AC0023DBEC /* NativeProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NativeProtocol.swift; path = URLSession/NativeProtocol.swift; sourceTree = ""; }; - F023075423F0B7AC0023DBEC /* TaskRegistry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TaskRegistry.swift; path = URLSession/TaskRegistry.swift; sourceTree = ""; }; - F023075523F0B7AC0023DBEC /* NetworkingSpecific.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NetworkingSpecific.swift; path = URLSession/NetworkingSpecific.swift; sourceTree = ""; }; - F023075623F0B7AC0023DBEC /* URLSessionDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = URLSessionDelegate.swift; path = URLSession/URLSessionDelegate.swift; sourceTree = ""; }; - F023075723F0B7AC0023DBEC /* TransferState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TransferState.swift; path = URLSession/TransferState.swift; sourceTree = ""; }; - F023075823F0B7AC0023DBEC /* URLSessionConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = URLSessionConfiguration.swift; path = URLSession/URLSessionConfiguration.swift; sourceTree = ""; }; - F023075923F0B7AD0023DBEC /* URLSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = URLSession.swift; path = URLSession/URLSession.swift; sourceTree = ""; }; - F023075A23F0B7AD0023DBEC /* Message.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Message.swift; path = URLSession/Message.swift; sourceTree = ""; }; - F023075B23F0B7AD0023DBEC /* URLSessionTask.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = URLSessionTask.swift; path = URLSession/URLSessionTask.swift; sourceTree = ""; }; - F023076723F0B8730023DBEC /* Boxing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Boxing.swift; path = Sources/Foundation/Boxing.swift; sourceTree = SOURCE_ROOT; }; - F023076C23F0BB1E0023DBEC /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; - F023076D23F0BB1E0023DBEC /* Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utilities.swift; sourceTree = ""; }; - F023077823F0BBF10023DBEC /* GenerateTestFixtures */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = GenerateTestFixtures; sourceTree = BUILT_PRODUCTS_DIR; }; - F023077A23F0BBF10023DBEC /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; - F023078123F0BC2E0023DBEC /* FixtureValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FixtureValues.swift; path = Tests/Foundation/FixtureValues.swift; sourceTree = SOURCE_ROOT; }; - F03A43161D48778200A7791E /* CFAsmMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFAsmMacros.h; sourceTree = ""; }; - F085A12E2283C50A00F909F9 /* CFLocking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFLocking.h; sourceTree = ""; }; - F9E0BB361CA70B8000F7FF3C /* TestURLCredential.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestURLCredential.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 1550106622EA24D10088F082 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1550107122EA266B0088F082 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1550110D22EA268E0088F082 /* SwiftFoundation.framework in Frameworks */, - 1550107322EA266B0088F082 /* libxml2.dylib in Frameworks */, - 15A619DC245A2895003C8C62 /* libCFXMLInterface.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 15B80387228F376000B30FF6 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 15FF00CC22934AD7004AD205 /* libCFURLSessionInterface.a in Frameworks */, - 15B80388228F376000B30FF6 /* libcurl.4.dylib in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 15FF0064229348F2004AD205 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B5D88591BBC938800234F36 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B1FD9E11D6D178E0080E83C /* libcurl.4.dylib in Frameworks */, - 5B40F9F41C12524C000E72E3 /* libxml2.dylib in Frameworks */, - 5B7C8B031BEA86A900C5B690 /* libCoreFoundation.a in Frameworks */, - 5B5D89781BBDADDB00234F36 /* libz.dylib in Frameworks */, - 5B5D89761BBDADD300234F36 /* libicucore.dylib in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B7C8A6B1BEA7F8F00C5B690 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BDC40591BD6D83B00ED97BB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1550111722EA43E00088F082 /* SwiftFoundationXML.framework in Frameworks */, - 5BDC406C1BD6D89300ED97BB /* SwiftFoundation.framework in Frameworks */, - 1550111B22EA43E20088F082 /* SwiftFoundationNetworking.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9F0DD33C1ECD734200F68030 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 159870BE228F73F800ADE509 /* SwiftFoundationNetworking.framework in Frameworks */, - 1550111D22EA473B0088F082 /* SwiftFoundationXML.framework in Frameworks */, - 9F0DD3571ECD783500F68030 /* SwiftFoundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EA66F66C1BF56CCB00136161 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - EA66F6771BF56D4C00136161 /* SwiftFoundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F023077523F0BBF10023DBEC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B94B063C23FDE2BD00B244E8 /* SwiftFoundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 4778103D26BC9E320071E8A1 /* AttributedString */ = { - isa = PBXGroup; - children = ( - 4778104926BC9F810071E8A1 /* AttributedString.swift */, - 4778104826BC9F810071E8A1 /* AttributedStringAttribute.swift */, - 4778104B26BC9F810071E8A1 /* AttributedStringCodable.swift */, - 4778104726BC9F810071E8A1 /* AttributedStringRunCoalescing.swift */, - 4778104A26BC9F810071E8A1 /* Conversion.swift */, - 4778104526BC9F810071E8A1 /* FoundationAttributes.swift */, - 474E124C26BCD6D00016C28A /* AttributedString+Locking.swift */, - ); - path = AttributedString; - sourceTree = ""; - }; - 5A6AC80728E7649D00A22FA7 /* WebSocket */ = { - isa = PBXGroup; - children = ( - 5A6AC80A28E7652D00A22FA7 /* WebSocketURLProtocol.swift */, - ); - name = WebSocket; - sourceTree = ""; - }; - 5B5D88531BBC938800234F36 = { - isa = PBXGroup; - children = ( - F023071323F09A270023DBEC /* Sources */, - F023070F23F097520023DBEC /* Tests */, - B983E32B23F0C69600D9C402 /* Docs */, - B95FC97422AF051B005DEA0A /* xcode-build.sh */, - B983E32D23F0C6E200D9C402 /* CONTRIBUTING.md */, - B167A6641ED7303F0040B09A /* README.md */, - EAB57B681BD1A255004AC5C5 /* CoreFoundation */, - F023077923F0BBF10023DBEC /* GenerateTestFixtures */, - 5B5D89AB1BBDCD0B00234F36 /* Frameworks */, - 5B5D885E1BBC938800234F36 /* Products */, - B95FC97222AF0050005DEA0A /* SwiftXCTest.framework */, - ); - indentWidth = 4; - sourceTree = ""; - tabWidth = 4; - usesTabs = 0; - }; - 5B5D885E1BBC938800234F36 /* Products */ = { - isa = PBXGroup; - children = ( - 5B5D885D1BBC938800234F36 /* SwiftFoundation.framework */, - 5BDC405C1BD6D83B00ED97BB /* TestFoundation.app */, - 5B7C8A6E1BEA7F8F00C5B690 /* libCoreFoundation.a */, - EA66F66F1BF56CCB00136161 /* plutil */, - 9F0DD33F1ECD734200F68030 /* xdgTestHelper.app */, - 15B8043A228F376000B30FF6 /* SwiftFoundationNetworking.framework */, - 15FF00CA229348F2004AD205 /* libCFURLSessionInterface.a */, - 1550106A22EA24D10088F082 /* libCFXMLInterface.a */, - 1550110922EA266B0088F082 /* SwiftFoundationXML.framework */, - F023077823F0BBF10023DBEC /* GenerateTestFixtures */, - ); - name = Products; - sourceTree = ""; - }; - 5B5D88691BBC946400234F36 /* Preferences */ = { - isa = PBXGroup; - children = ( - 5B5D886A1BBC948300234F36 /* CFApplicationPreferences.c */, - 559451EA1F706BF5002807FB /* CFXMLPreferencesDomain.c */, - 5B5D898B1BBDBF6500234F36 /* CFPreferences.c */, - 5B5D886C1BBC94C400234F36 /* CFPreferences.h */, - ); - name = Preferences; - path = CoreFoundation/Preferences.subproj; - sourceTree = ""; - }; - 5B5D88711BBC951A00234F36 /* Base */ = { - isa = PBXGroup; - children = ( - F085A12E2283C50A00F909F9 /* CFLocking.h */, - 1578DA12212B4C35003C9516 /* CFOverflow.h */, - F03A43161D48778200A7791E /* CFAsmMacros.h */, - 5BDC3F721BCC60EF00ED97BB /* module.map */, - 5B5D88741BBC954000234F36 /* CFAvailability.h */, - 5B5D895D1BBDABBF00234F36 /* CFBase.c */, - 5B5D88721BBC952A00234F36 /* CFBase.h */, - 5B5D89191BBDA4EE00234F36 /* CFByteOrder.h */, - 5B5D89851BBDB18D00234F36 /* CFFileUtilities.c */, - 5B5D888A1BBC963C00234F36 /* CFInternal.h */, - 5B5D88BC1BBC97E400234F36 /* CFLogUtilities.h */, - 5B5D897B1BBDAE0800234F36 /* CFPlatform.c */, - 5B5D88CC1BBC986300234F36 /* CFPriv.h */, - 5B5D88C31BBC981C00234F36 /* CFRuntime.c */, - 5B5D88C21BBC981C00234F36 /* CFRuntime.h */, - 1578DA08212B4060003C9516 /* CFRuntime_Internal.h */, - 5B5D897D1BBDAEE600234F36 /* CFSortFunctions.c */, - 5B5D89731BBDAD9900234F36 /* CFSystemDirectories.c */, - 5B5D89601BBDABF400234F36 /* CFUtilities.c */, - 5B5D895F1BBDABF400234F36 /* CFUtilities.h */, - 5B5D89541BBDAA0100234F36 /* CFUUID.c */, - 5B5D89531BBDAA0100234F36 /* CFUUID.h */, - 153E950F20111DC500F250BE /* CFKnownLocations.h */, - 153E951020111DC500F250BE /* CFKnownLocations.c */, - 5B5D88B51BBC978900234F36 /* CoreFoundation_Prefix.h */, - 5B5D895B1BBDAB7E00234F36 /* CoreFoundation.h */, - 5B5D88C61BBC983600234F36 /* ForFoundationOnly.h */, - 5BF7AEC21BCD568D008F214A /* ForSwiftFoundationOnly.h */, - 9F4ADBB61ECD445E001F0B3D /* SymbolAliases */, - EA66F6321BEECC7400136161 /* SwiftRuntime */, - ); - name = Base; - path = CoreFoundation/Base.subproj; - sourceTree = ""; - }; - 5B5D88761BBC955900234F36 /* Collections */ = { - isa = PBXGroup; - children = ( - 1578DA14212B6F33003C9516 /* CFCollections_Internal.h */, - 5B5D88781BBC956C00234F36 /* CFArray.c */, - 5B5D88771BBC956C00234F36 /* CFArray.h */, - 5B5D89161BBC9C5500234F36 /* CFBag.c */, - 5B5D89151BBC9C5500234F36 /* CFBag.h */, - 5B5D89581BBDAAC600234F36 /* CFBasicHash.c */, - 5B5D89571BBDAAC600234F36 /* CFBasicHash.h */, - 5B5D89641BBDAC3E00234F36 /* CFBinaryHeap.c */, - 5B5D89631BBDAC3E00234F36 /* CFBinaryHeap.h */, - 5B5D89681BBDACB800234F36 /* CFBitVector.c */, - 5B5D89671BBDACB800234F36 /* CFBitVector.h */, - 5B5D88871BBC962500234F36 /* CFData.c */, - 5B5D88861BBC962500234F36 /* CFData.h */, - 5B5D888D1BBC964D00234F36 /* CFDictionary.c */, - 5B5D888C1BBC964D00234F36 /* CFDictionary.h */, - 5B5D88C91BBC984900234F36 /* CFSet.c */, - 5B5D88C81BBC984900234F36 /* CFSet.h */, - 5B5D89701BBDAD4F00234F36 /* CFStorage.c */, - 5B5D896F1BBDAD4F00234F36 /* CFStorage.h */, - 5B5D89801BBDAF0300234F36 /* CFTree.c */, - 5B5D897F1BBDAF0300234F36 /* CFTree.h */, - ); - name = Collections; - path = CoreFoundation/Collections.subproj; - sourceTree = ""; - }; - 5B5D887B1BBC95F100234F36 /* String */ = { - isa = PBXGroup; - children = ( - 5B5D89351BBDA76300234F36 /* CFBurstTrie.c */, - 5B5D89341BBDA76300234F36 /* CFBurstTrie.h */, - 5B5D88921BBC969400234F36 /* CFCharacterSet.c */, - 5B5D88901BBC969400234F36 /* CFCharacterSet.h */, - 5B5D88911BBC969400234F36 /* CFCharacterSetPriv.h */, - 5B5D887D1BBC960100234F36 /* CFString.c */, - 5B5D887C1BBC960100234F36 /* CFString.h */, - 1578DA10212B407B003C9516 /* CFString_Internal.h */, - 5B5D887E1BBC960100234F36 /* CFStringDefaultEncoding.h */, - 5B5D890F1BBC9C1B00234F36 /* CFStringEncodingExt.h */, - 5B5D887F1BBC960100234F36 /* CFStringEncodings.c */, - 5B5D89A71BBDC09700234F36 /* CFStringScanner.c */, - 5B5D88801BBC960100234F36 /* CFStringUtilities.c */, - 5BDC3F1C1BCC447900ED97BB /* CFStringLocalizedFormattingInternal.h */, - 5BC2C00D1C07832E00CC214E /* CFStringTransform.c */, - 5BDF628E1C1A550800A89075 /* CFRegularExpression.c */, - 5BDF628F1C1A550800A89075 /* CFRegularExpression.h */, - 5B6228BC1C179049009587FE /* CFRunArray.h */, - 5B6228BA1C179041009587FE /* CFRunArray.c */, - 5B6228C01C17905B009587FE /* CFAttributedString.h */, - 15496CF0212CAEBA00450F5A /* CFAttributedStringPriv.h */, - 5B6228BE1C179052009587FE /* CFAttributedString.c */, - ); - name = String; - path = CoreFoundation/String.subproj; - sourceTree = ""; - }; - 5B5D88961BBC96B600234F36 /* URL */ = { - isa = PBXGroup; - children = ( - 15FF00CD22934B49004AD205 /* module.map */, - EA313DFC1BE7F2E90060A403 /* CFURLComponents_Internal.h */, - EA313DFD1BE7F2E90060A403 /* CFURLComponents_URIParser.c */, - EA313DFE1BE7F2E90060A403 /* CFURLComponents.c */, - EA313DFF1BE7F2E90060A403 /* CFURLComponents.h */, - 5B5D88981BBC96C300234F36 /* CFURL.c */, - 5B5D88971BBC96C300234F36 /* CFURL.h */, - 5B5D88991BBC96C300234F36 /* CFURL.inc.h */, - 5B5D889E1BBC96D400234F36 /* CFURLAccess.c */, - 5B5D889D1BBC96D400234F36 /* CFURLAccess.h */, - 5B5D889F1BBC96D400234F36 /* CFURLPriv.h */, - 5B1FD9C11D6D160F0080E83C /* CFURLSessionInterface.c */, - 5B1FD9C21D6D160F0080E83C /* CFURLSessionInterface.h */, - ); - name = URL; - path = CoreFoundation/URL.subproj; - sourceTree = ""; - }; - 5B5D88A31BBC96FD00234F36 /* Error */ = { - isa = PBXGroup; - children = ( - 5B5D88A61BBC970D00234F36 /* CFError_Private.h */, - 5B5D88A41BBC970D00234F36 /* CFError.c */, - 5B5D88A51BBC970D00234F36 /* CFError.h */, - ); - name = Error; - path = CoreFoundation/Error.subproj; - sourceTree = ""; - }; - 5B5D88AA1BBC972A00234F36 /* Locale */ = { - isa = PBXGroup; - children = ( - 5B5D896D1BBDAD2000234F36 /* CFCalendar.c */, - 1569BF9F2187D003009518FA /* CFCalendar_Enumerate.c */, - 5B5D891B1BBDA50800234F36 /* CFCalendar.h */, - 1569BF9D2187CFFF009518FA /* CFCalendar_Internal.h */, - 1569BFA32187D0E0009518FA /* CFDateInterval.c */, - 1569BFA42187D0E0009518FA /* CFDateInterval.h */, - 1569BFAB2187D529009518FA /* CFDateComponents.c */, - 1569BFAC2187D529009518FA /* CFDateComponents.h */, - 5B5D890B1BBC9BEF00234F36 /* CFDateFormatter.c */, - 5B5D89091BBC9BEF00234F36 /* CFDateFormatter.h */, - 158BCCAC2220A18F00750239 /* CFDateIntervalFormatter.c */, - 158BCCAB2220A18F00750239 /* CFDateIntervalFormatter.h */, - 5B6E11A81DA45EB5009B48A3 /* CFDateFormatter_Private.h */, - 15E72A5226C470AE0035CAF8 /* CFListFormatter.c */, - 15E72A5326C470AE0035CAF8 /* CFListFormatter.h */, - 5B5D88AC1BBC974700234F36 /* CFLocale.c */, - 5B5D88AB1BBC974700234F36 /* CFLocale.h */, - 5B5D88AD1BBC974700234F36 /* CFLocaleIdentifier.c */, - 5B5D88AE1BBC974700234F36 /* CFLocaleInternal.h */, - 5B5D89121BBC9C3400234F36 /* CFNumberFormatter.c */, - 5B5D89111BBC9C3400234F36 /* CFNumberFormatter.h */, - 5B5D89A91BBDC11100234F36 /* CFLocaleKeys.c */, - 5BDC3F191BCC440100ED97BB /* CFICULogging.h */, - 5B6E11A61DA451E7009B48A3 /* CFLocale_Private.h */, - 15E72A5726C472630035CAF8 /* CFRelativeDateTimeFormatter.c */, - 15E72A5626C472620035CAF8 /* CFRelativeDateTimeFormatter.h */, - ); - name = Locale; - path = CoreFoundation/Locale.subproj; - sourceTree = ""; - }; - 5B5D88B71BBC97C000234F36 /* NumberDate */ = { - isa = PBXGroup; - children = ( - 5B5D891E1BBDA65F00234F36 /* CFBigNumber.c */, - 5B5D891D1BBDA65F00234F36 /* CFBigNumber.h */, - 5B5D88B91BBC97D100234F36 /* CFDate.c */, - 5B5D88B81BBC97D100234F36 /* CFDate.h */, - 5B5D88D41BBC9AC500234F36 /* CFNumber.c */, - 5B5D88D31BBC9AC500234F36 /* CFNumber.h */, - 158B66A22450D72E00892EFB /* CFNumber_Private.h */, - 5B5D88BF1BBC980100234F36 /* CFTimeZone.c */, - 5B5D88BE1BBC980100234F36 /* CFTimeZone.h */, - ); - name = NumberDate; - path = CoreFoundation/NumberDate.subproj; - sourceTree = ""; - }; - 5B5D88CE1BBC987A00234F36 /* RunLoop */ = { - isa = PBXGroup; - children = ( - 5B5D88D01BBC9AAC00234F36 /* CFMachPort.c */, - 5B5D88CF1BBC9AAC00234F36 /* CFMachPort.h */, - 1578DA0A212B406F003C9516 /* CFMachPort_Internal.h */, - 1578DA0B212B406F003C9516 /* CFMachPort_Lifetime.c */, - 1578DA0C212B406F003C9516 /* CFMachPort_Lifetime.h */, - 5B5D88DC1BBC9AEC00234F36 /* CFMessagePort.c */, - 5B5D88DB1BBC9AEC00234F36 /* CFMessagePort.h */, - 5B5D88D81BBC9AD800234F36 /* CFRunLoop.c */, - 5B5D88D71BBC9AD800234F36 /* CFRunLoop.h */, - 5B5D88E01BBC9B0300234F36 /* CFSocket.c */, - 5B5D88DF1BBC9B0300234F36 /* CFSocket.h */, - ); - name = RunLoop; - path = CoreFoundation/RunLoop.subproj; - sourceTree = ""; - }; - 5B5D88E41BBC9B2D00234F36 /* PlugIn */ = { - isa = PBXGroup; - children = ( - 5B5D88EE1BBC9B5C00234F36 /* CFBundle_Binary.c */, - 5B5D88E71BBC9B5C00234F36 /* CFBundle_BinaryTypes.h */, - 5B5D88ED1BBC9B5C00234F36 /* CFBundle_Grok.c */, - 5B5D88EB1BBC9B5C00234F36 /* CFBundle_InfoPlist.c */, - 5B5D88E81BBC9B5C00234F36 /* CFBundle_Internal.h */, - 5B5D896B1BBDACE400234F36 /* CFBundle_Locale.c */, - 5B5D88EA1BBC9B5C00234F36 /* CFBundle_Resources.c */, - 5B5D88EC1BBC9B5C00234F36 /* CFBundle_Strings.c */, - 5B5D88E91BBC9B5C00234F36 /* CFBundle.c */, - 5B5D88E51BBC9B5C00234F36 /* CFBundle.h */, - 5B5D88E61BBC9B5C00234F36 /* CFBundlePriv.h */, - 5B5D89471BBDA9EE00234F36 /* CFPlugIn_Factory.h */, - 5B5D89481BBDA9EE00234F36 /* CFPlugIn.c */, - 5B5D89451BBDA9EE00234F36 /* CFPlugIn.h */, - 5B5D89461BBDA9EE00234F36 /* CFPlugInCOM.h */, - 5BF9B7F51FABD5D400EE1A7C /* CFBundle_DebugStrings.c */, - 5BF9B7F81FABD5D500EE1A7C /* CFBundle_Executable.c */, - 5BF9B7F41FABD5D300EE1A7C /* CFBundle_Main.c */, - 5BF9B7F61FABD5D400EE1A7C /* CFBundle_ResourceFork.c */, - 5BF9B7F71FABD5D400EE1A7C /* CFBundle_Tables.c */, - 158B66A52450F0C400892EFB /* CFBundle_SplitFileName.h */, - 158B66A42450F0C300892EFB /* CFBundle_SplitFileName.c */, - ); - name = PlugIn; - path = CoreFoundation/PlugIn.subproj; - sourceTree = ""; - }; - 5B5D88F91BBC9B8100234F36 /* Parsing */ = { - isa = PBXGroup; - children = ( - 1550106B22EA25140088F082 /* module.map */, - 1550106C22EA25140088F082 /* module.modulemap */, - 5B5D89891BBDB1EF00234F36 /* CFBinaryPList.c */, - 5B5D898F1BBDBFB100234F36 /* CFOldStylePList.c */, - 5B5D88FB1BBC9B9500234F36 /* CFPropertyList.c */, - 5B5D88FA1BBC9B9500234F36 /* CFPropertyList.h */, - 5BF9B7F11FABBDB000EE1A7C /* CFPropertyList_Private.h */, - 151023B326C3336F009371F3 /* CFPropertyList_Internal.h */, - 5B40F9EC1C124F45000E72E3 /* CFXMLInterface.h */, - 15A619DF245A298C003C8C62 /* CFXMLInterface.c */, - ); - name = Parsing; - path = CoreFoundation/Parsing.subproj; - sourceTree = ""; - }; - 5B5D88FE1BBC9BB400234F36 /* Stream */ = { - isa = PBXGroup; - children = ( - 5B5D89831BBDB13800234F36 /* CFConcreteStreams.c */, - 5B5D89871BBDB1B400234F36 /* CFSocketStream.c */, - 5B5D89031BBC9BC300234F36 /* CFStream.c */, - 5B5D88FF1BBC9BC300234F36 /* CFStream.h */, - 5B5D89021BBC9BC300234F36 /* CFStreamAbstract.h */, - 5B5D89011BBC9BC300234F36 /* CFStreamInternal.h */, - 5B5D89001BBC9BC300234F36 /* CFStreamPriv.h */, - ); - name = Stream; - path = CoreFoundation/Stream.subproj; - sourceTree = ""; - }; - 5B5D89211BBDA6AC00234F36 /* StringEncodings */ = { - isa = PBXGroup; - children = ( - 5B5D898D1BBDBF8C00234F36 /* CFBuiltinConverters.c */, - 5B5D899F1BBDC01E00234F36 /* CFICUConverters.c */, - 5B5D89321BBDA74B00234F36 /* CFICUConverters.h */, - 5B5D89A31BBDC04100234F36 /* CFPlatformConverters.c */, - 5B5D89261BBDA6DD00234F36 /* CFStringEncodingConverter.c */, - 5B5D89241BBDA6DD00234F36 /* CFStringEncodingConverter.h */, - 5B5D89221BBDA6C000234F36 /* CFStringEncodingConverterExt.h */, - 5B5D89251BBDA6DD00234F36 /* CFStringEncodingConverterPriv.h */, - 5B5D89A51BBDC06800234F36 /* CFStringEncodingDatabase.c */, - 5B5D89301BBDA73600234F36 /* CFStringEncodingDatabase.h */, - 5B5D892C1BBDA71100234F36 /* CFUniChar.c */, - 5B5D892A1BBDA71100234F36 /* CFUniChar.h */, - 5B5D892B1BBDA71100234F36 /* CFUniCharPriv.h */, - 5B5D893E1BBDA9A400234F36 /* CFUnicodeDecomposition.c */, - 5B5D893D1BBDA9A400234F36 /* CFUnicodeDecomposition.h */, - 5B5D89401BBDA9A400234F36 /* CFUnicodePrecomposition.c */, - 5B5D893F1BBDA9A400234F36 /* CFUnicodePrecomposition.h */, - ); - name = StringEncodings; - path = CoreFoundation/StringEncodings.subproj; - sourceTree = ""; - }; - 5B5D89381BBDA79500234F36 /* AppServices */ = { - isa = PBXGroup; - children = ( - 5B5D89391BBDA7AB00234F36 /* CFUserNotification.h */, - 5B5D893A1BBDA7AB00234F36 /* CFUserNotification.c */, - ); - name = AppServices; - path = CoreFoundation/AppServices.subproj; - sourceTree = ""; - }; - 5B5D89AB1BBDCD0B00234F36 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 5B1FD9E01D6D178E0080E83C /* libcurl.4.dylib */, - 5B40F9F31C12524C000E72E3 /* libxml2.dylib */, - 5B5D89751BBDADD300234F36 /* libicucore.dylib */, - 5B5D89791BBDADDF00234F36 /* libobjc.dylib */, - 5B5D89771BBDADDB00234F36 /* libz.dylib */, - ); - name = Frameworks; - sourceTree = ""; - }; - EA66F6321BEECC7400136161 /* SwiftRuntime */ = { - isa = PBXGroup; - children = ( - EA66F6651BF2F2E800136161 /* CoreFoundation.h */, - EA66F6351BEED03E00136161 /* TargetConditionals.h */, - ); - name = SwiftRuntime; - path = Linux; - sourceTree = ""; - }; - EAB57B681BD1A255004AC5C5 /* CoreFoundation */ = { - isa = PBXGroup; - children = ( - 5B5D89381BBDA79500234F36 /* AppServices */, - 5B5D88711BBC951A00234F36 /* Base */, - 5B5D88761BBC955900234F36 /* Collections */, - 5B5D88A31BBC96FD00234F36 /* Error */, - 5B5D88AA1BBC972A00234F36 /* Locale */, - 5B5D88B71BBC97C000234F36 /* NumberDate */, - 5B5D88F91BBC9B8100234F36 /* Parsing */, - 5B5D88E41BBC9B2D00234F36 /* PlugIn */, - 5B5D88691BBC946400234F36 /* Preferences */, - 5B5D88CE1BBC987A00234F36 /* RunLoop */, - 5B5D88FE1BBC9BB400234F36 /* Stream */, - 5B5D887B1BBC95F100234F36 /* String */, - 5B5D89211BBDA6AC00234F36 /* StringEncodings */, - 5B5D88961BBC96B600234F36 /* URL */, - ); - name = CoreFoundation; - sourceTree = ""; - }; - F023070F23F097520023DBEC /* Tests */ = { - isa = PBXGroup; - children = ( - F023071423F09A430023DBEC /* Tools */, - F023071023F0976B0023DBEC /* Foundation */, - ); - path = Tests; - sourceTree = ""; - }; - F023071023F0976B0023DBEC /* Foundation */ = { - isa = PBXGroup; - children = ( - 155D3BBB22401D1100B0D38E /* FixtureValues.swift */, - 616068F2225DE5C2004FCC54 /* FTPServer.swift */, - 1520469A1D8AEABE00D02E36 /* HTTPServer.swift */, - EA66F6381BF1619600136161 /* main.swift */, - BB3D7557208A1E500085CFDC /* Imports.swift */, - 7D0DE86D211883F500540061 /* Utilities.swift */, - F023071223F098540023DBEC /* Resources */, - F023071123F0977C0023DBEC /* Tests */, - ); - path = Foundation; - sourceTree = ""; - }; - F023071123F0977C0023DBEC /* Tests */ = { - isa = PBXGroup; - children = ( - C93559281C12C49F009FD6A9 /* TestAffineTransform.swift */, - 4704393026BDFF33000D213E /* TestAttributedString.swift */, - 4704392F26BDFF33000D213E /* TestAttributedStringCOW.swift */, - 4704392E26BDFF33000D213E /* TestAttributedStringPerformance.swift */, - 4704393126BDFF34000D213E /* TestAttributedStringSupport.swift */, - 659FB6DD2405E5E200F5F63F /* TestBridging.swift */, - 6E203B8C1C1303BB003B2576 /* TestBundle.swift */, - A5A34B551C18C85D00FD972B /* TestByteCountFormatter.swift */, - 1539391322A07007006DFF4F /* TestCachedURLResponse.swift */, - 52829AD61C160D64003BC4EF /* TestCalendar.swift */, - 5BC1D8BC1BF3ADFE009D3973 /* TestCharacterSet.swift */, - DCA8120A1F046D13000D0C86 /* TestCodable.swift */, - B91161AB242A350D00BD2907 /* TestDataURLProtocol.swift */, - 22B9C1E01C165D7A00DECFF9 /* TestDate.swift */, - 7D0DE86C211883F500540061 /* TestDateComponents.swift */, - 2EBE67A31C77BF05006583D5 /* TestDateFormatter.swift */, - 7D8BD736225EADB80057CF37 /* TestDateInterval.swift */, - 158BCCA92220A12600750239 /* TestDateIntervalFormatter.swift */, - 231503DA1D8AEE5D0061694D /* TestDecimal.swift */, - B9D9733E23D19D3900AB249C /* TestDimension.swift */, - BDBB658F1E256BFA001A7286 /* TestEnergyFormatter.swift */, - D512D17B1CD883F00032E6A5 /* TestFileHandle.swift */, - 525AECEB1BF2C96400D15BB0 /* TestFileManager.swift */, - BF85E9D71FBDCC2000A79793 /* TestHost.swift */, - 848A30571C137B3500C83206 /* TestHTTPCookie.swift */, - 159884911DCC877700E3314C /* TestHTTPCookieStorage.swift */, - B9D9734423D1A36E00AB249C /* TestHTTPURLResponse.swift */, - 4AE109261C17CCBF007367B5 /* TestIndexPath.swift */, - EA66F63E1BF1619600136161 /* TestIndexSet.swift */, - 63DCE9D31EAA432400E9CB02 /* TestISO8601DateFormatter.swift */, - 3EA9D66F1EF0532D00B362D6 /* TestJSONEncoder.swift */, - 5EB6A15C1C188FC40037DCB8 /* TestJSONSerialization.swift */, - BD8042151E09857800487EB8 /* TestLengthFormatter.swift */, - A058C2011E529CF100B07AA1 /* TestMassFormatter.swift */, - 7D8BD738225ED1480057CF37 /* TestMeasurement.swift */, - BF8E65301DC3B3CB005AB5C3 /* TestNotification.swift */, - 61F8AE7C1C180FC600FB62F0 /* TestNotificationCenter.swift */, - 5EF673AB1C28B527006212A3 /* TestNotificationQueue.swift */, - EA66F63C1BF1619600136161 /* TestNSArray.swift */, - 294E3C1C1CC5E19300E4F44C /* TestNSAttributedString.swift */, - 90E645DE1E4C89A400D0D47C /* TestNSCache.swift */, - 15F10CDB218909BF00D88114 /* TestNSCalendar.swift */, - 790043391CACD33E00ECCBF1 /* TestNSCompoundPredicate.swift */, - DCDBB8321C1768AC00313299 /* TestNSData.swift */, - B9D9734023D19E2E00AB249C /* TestNSDateComponents.swift */, - EA66F63D1BF1619600136161 /* TestNSDictionary.swift */, - CD1C7F7C1E303B47008E331C /* TestNSError.swift */, - 88D28DE61C13AE9000494606 /* TestNSGeometry.swift */, - D3A597F11C33C68E00295652 /* TestNSKeyedArchiver.swift */, - D3A597EF1C33A9E500295652 /* TestNSKeyedUnarchiver.swift */, - 61A395F91C2484490029B337 /* TestNSLocale.swift */, - B951B5EB1F4E2A2000D8B332 /* TestNSLock.swift */, - 5B6F17921C48631C00935030 /* TestNSNull.swift */, - EA66F63F1BF1619600136161 /* TestNSNumber.swift */, - 684C79001F62B611005BD73E /* TestNSNumberBridging.swift */, - D834F9931C31C4060023812A /* TestNSOrderedSet.swift */, - 7900433A1CACD33E00ECCBF1 /* TestNSPredicate.swift */, - E876A73D1C1180E000F279EC /* TestNSRange.swift */, - 5B0C6C211C1E07E600705A0E /* TestNSRegularExpression.swift */, - EA66F6411BF1619600136161 /* TestNSSet.swift */, - 152EF3932283457B001E1269 /* TestNSSortDescriptor.swift */, - EA66F6421BF1619600136161 /* TestNSString.swift */, - 5FE52C941D147D1C00F7D270 /* TestNSTextCheckingResult.swift */, - B9F4492B2483FFBF00B30F02 /* TestNSURL.swift */, - 83712C8D1C1684900049AD49 /* TestNSURLRequest.swift */, - C2A9D75B1C15C08B00993803 /* TestNSUUID.swift */, - D3047AEB1C38BC3300295652 /* TestNSValue.swift */, - 5B6F17931C48631C00935030 /* TestNumberFormatter.swift */, - EA54A6FA1DB16D53009E0809 /* TestObjCRuntime.swift */, - D5C40F321CDA1D460005690C /* TestOperationQueue.swift */, - BDFDF0A61DFF5B3E00C04CC5 /* TestPersonNameComponents.swift */, - 4DC1D07F1C12EEEF00B5948A /* TestPipe.swift */, - 5B6F17941C48631C00935030 /* TestProcess.swift */, - 400E22641C1A4E58007C5933 /* TestProcessInfo.swift */, - EA01AAEB1DA839C4008F4E07 /* TestProgress.swift */, - B940492C223B146800FB4384 /* TestProgressFraction.swift */, - AA9E0E0C21FA6E0700963F4C /* TestPropertyListEncoder.swift */, - EA66F6401BF1619600136161 /* TestPropertyListSerialization.swift */, - 61E0117B1C1B554D000037DD /* TestRunLoop.swift */, - 844DC3321C17584F005611F9 /* TestScanner.swift */, - 15FCF4E223021C020095E52E /* TestSocketPort.swift */, - 0383A1741D2E558A0052E5D1 /* TestStream.swift */, - 5E5835F31C20C9B500C81317 /* TestThread.swift */, - 61D6C9EE1C1DFE9500DEF583 /* TestTimer.swift */, - 84BA558D1C16F90900F48C54 /* TestTimeZone.swift */, - 3E55A2321F52463B00082000 /* TestUnit.swift */, - CC5249BF1D341D23007CB54D /* TestUnitConverter.swift */, - ABB1293426D4736B00401E6C /* TestUnitInformationStorage.swift */, - 5D0E1BDA237A1FE800C35C5A /* TestUnitVolume.swift */, - EA66F6431BF1619600136161 /* TestURL.swift */, - 1581706222B1A29100348861 /* TestURLCache.swift */, - B9D9734223D19FD100AB249C /* TestURLComponents.swift */, - F9E0BB361CA70B8000F7FF3C /* TestURLCredential.swift */, - 155B77AB22E63D2D00D901DE /* TestURLCredentialStorage.swift */, - DAA79BD820D42C07004AF044 /* TestURLProtectionSpace.swift */, - 03B6F5831F15F339004F25AF /* TestURLProtocol.swift */, - D4FE895A1D703D1100DA7986 /* TestURLRequest.swift */, - 7A7D6FBA1C16439400957E2E /* TestURLResponse.swift */, - 5B1FD9E21D6D17B80080E83C /* TestURLSession.swift */, - 616068F4225DE606004FCC54 /* TestURLSessionFTP.swift */, - 555683BC1C1250E70041D4C6 /* TestUserDefaults.swift */, - 5B6F17961C48631C00935030 /* TestUtils.swift */, - C7DE1FCB21EEE67200174F35 /* TestUUID.swift */, - 5B6F17951C48631C00935030 /* TestXMLDocument.swift */, - 5B40F9F11C125187000E72E3 /* TestXMLParser.swift */, - ); - path = Tests; - sourceTree = ""; - }; - F023071223F098540023DBEC /* Resources */ = { - isa = PBXGroup; - children = ( - 156C846D224069A000607D44 /* Fixtures */, - B98E33DC2136AA740044EBE9 /* TestFileWithZeros.txt */, - D370696D1C394FBF00295652 /* NSKeyedUnarchiver-RangeTest.plist */, - D3E8D6D41C36AC0C00295652 /* NSKeyedUnarchiver-RectTest.plist */, - D3E8D6D21C36982700295652 /* NSKeyedUnarchiver-EdgeInsetsTest.plist */, - D3A598021C349E6A00295652 /* NSKeyedUnarchiver-OrderedSetTest.plist */, - D3A597FF1C341E9100295652 /* NSKeyedUnarchiver-ConcreteValueTest.plist */, - D3A597FB1C3417EA00295652 /* NSKeyedUnarchiver-ComplexTest.plist */, - D3A597F91C3415F000295652 /* NSKeyedUnarchiver-UUIDTest.plist */, - D3A597F51C3415CC00295652 /* NSKeyedUnarchiver-ArrayTest.plist */, - D3A597F61C3415CC00295652 /* NSKeyedUnarchiver-URLTest.plist */, - D3A597F31C34142600295652 /* NSKeyedUnarchiver-NotificationTest.plist */, - EA66F6791BF9401E00136161 /* Info.plist */, - CE19A88B1C23AA2300B4CB6A /* NSStringTestData.txt */, - B91095781EEF237800A71930 /* NSString-UTF16-LE-data.txt */, - B91095791EEF237800A71930 /* NSString-UTF16-BE-data.txt */, - B933A79C1F3055F600FE6846 /* NSString-UTF32-BE-data.txt */, - B933A79D1F3055F600FE6846 /* NSString-UTF32-LE-data.txt */, - B907F36A20BB07A700013CBE /* NSString-ISO-8859-1-data.txt */, - 528776181BF27D9500CB0090 /* Test.plist */, - EA66F63B1BF1619600136161 /* NSURLTestData.plist */, - E1A3726E1C31EBFB0023AF4D /* NSXMLDocumentTestData.xml */, - E1A03F351C4828650023AF4D /* PropertyList-1.0.dtd */, - E1A03F371C482C730023AF4D /* NSXMLDTDTestData.xml */, - ); - path = Resources; - sourceTree = ""; - }; - F023071323F09A270023DBEC /* Sources */ = { - isa = PBXGroup; - children = ( - F023071823F09F100023DBEC /* BlocksRuntime */, - F023072323F0A6E50023DBEC /* Foundation */, - F023071D23F0A32B0023DBEC /* FoundationNetworking */, - F023071923F0A0AE0023DBEC /* FoundationXML */, - F023076923F0B9600023DBEC /* Tools */, - F023071723F09E480023DBEC /* UUID */, - ); - path = Sources; - sourceTree = ""; - }; - F023071423F09A430023DBEC /* Tools */ = { - isa = PBXGroup; - children = ( - F023076B23F0BA4B0023DBEC /* GenerateTestFixtures */, - F023071523F09A4A0023DBEC /* XDGTestHelper */, - ); - path = Tools; - sourceTree = ""; - }; - F023071523F09A4A0023DBEC /* XDGTestHelper */ = { - isa = PBXGroup; - children = ( - F023071623F09A580023DBEC /* Resources */, - 9F0041781ECD5962004138BD /* main.swift */, - ); - path = XDGTestHelper; - sourceTree = ""; - }; - F023071623F09A580023DBEC /* Resources */ = { - isa = PBXGroup; - children = ( - 9F0DD34F1ECD737B00F68030 /* Info.plist */, - ); - path = Resources; - sourceTree = ""; - }; - F023071723F09E480023DBEC /* UUID */ = { - isa = PBXGroup; - children = ( - EA66F65E1BF2DF4C00136161 /* uuid.c */, - EA66F65F1BF2DF4C00136161 /* uuid.h */, - ); - path = UUID; - sourceTree = ""; - }; - F023071823F09F100023DBEC /* BlocksRuntime */ = { - isa = PBXGroup; - children = ( - EA66F6601BF2DF7700136161 /* Block_private.h */, - EA66F6611BF2DF7700136161 /* Block.h */, - EA66F6621BF2DF7700136161 /* data.c */, - EA66F6631BF2DF7700136161 /* runtime.c */, - ); - path = BlocksRuntime; - sourceTree = ""; - }; - F023071923F0A0AE0023DBEC /* FoundationXML */ = { - isa = PBXGroup; - children = ( - F023071A23F0A1530023DBEC /* Resources */, - EADE0B891BD15DFF00C49C64 /* XMLDocument.swift */, - EADE0B8A1BD15DFF00C49C64 /* XMLDTD.swift */, - EADE0B8B1BD15DFF00C49C64 /* XMLDTDNode.swift */, - EADE0B8C1BD15DFF00C49C64 /* XMLElement.swift */, - EADE0B8D1BD15DFF00C49C64 /* XMLNode.swift */, - 15BB9529250988C50071BD20 /* CFAccess.swift */, - EADE0B8F1BD15DFF00C49C64 /* XMLParser.swift */, - ); - path = FoundationXML; - sourceTree = ""; - }; - F023071A23F0A1530023DBEC /* Resources */ = { - isa = PBXGroup; - children = ( - F023071B23F0A2D60023DBEC /* Info.plist */, - ); - path = Resources; - sourceTree = ""; - }; - F023071D23F0A32B0023DBEC /* FoundationNetworking */ = { - isa = PBXGroup; - children = ( - F023076723F0B8730023DBEC /* Boxing.swift */, - F023072D23F0B6D70023DBEC /* URLSession */, - F023072023F0A5CD0023DBEC /* Resources */, - EADE0B601BD15DFF00C49C64 /* HTTPCookie.swift */, - EADE0B611BD15DFF00C49C64 /* HTTPCookieStorage.swift */, - EADE0B841BD15DFF00C49C64 /* NSURLRequest.swift */, - EADE0B7D1BD15DFF00C49C64 /* URLAuthenticationChallenge.swift */, - EADE0B7E1BD15DFF00C49C64 /* URLCache.swift */, - EADE0B7F1BD15DFF00C49C64 /* URLCredential.swift */, - EADE0B801BD15DFF00C49C64 /* URLCredentialStorage.swift */, - EADE0B821BD15DFF00C49C64 /* URLProtectionSpace.swift */, - EADE0B831BD15DFF00C49C64 /* URLProtocol.swift */, - 5BA9BEA31CF380E8009DBD6C /* URLRequest.swift */, - EADE0B851BD15DFF00C49C64 /* URLResponse.swift */, - ); - path = FoundationNetworking; - sourceTree = ""; - }; - F023072023F0A5CD0023DBEC /* Resources */ = { - isa = PBXGroup; - children = ( - F023072123F0A62F0023DBEC /* Info.plist */, - ); - path = Resources; - sourceTree = ""; - }; - F023072323F0A6E50023DBEC /* Foundation */ = { - isa = PBXGroup; - children = ( - B98303F325F21389001F959E /* CMakeLists.txt */, - F023072523F0B4890023DBEC /* Headers */, - F023072423F0B4140023DBEC /* Resources */, - 4778103D26BC9E320071E8A1 /* AttributedString */, - EADE0B4D1BD09E0800C49C64 /* AffineTransform.swift */, - 5BD31D231D5CECC400563814 /* Array.swift */, - 5B23AB861CE62D17000DB898 /* Boxing.swift */, - 5BD31D1F1D5CE8C400563814 /* Bridging.swift */, - 5BDC3F2F1BCC5DCB00ED97BB /* Bundle.swift */, - EADE0B511BD09F2F00C49C64 /* ByteCountFormatter.swift */, - 5BD70FB31D3D4F8B003B9BF8 /* Calendar.swift */, - 5B7818591D6CB5CD004A01F2 /* CGFloat.swift */, - 5BA9BEA71CF3E7E7009DBD6C /* CharacterSet.swift */, - 3EDCE5051EF04D8100C2EC04 /* Codable.swift */, - 5BC1B9A721F275B000524D8C /* Collections+DataProtocol.swift */, - 5BC1B9A321F2757F00524D8C /* ContiguousBytes.swift */, - 5BA9BEA51CF3D747009DBD6C /* Data.swift */, - 5BC1B9A521F2759C00524D8C /* DataProtocol.swift */, - 5B5C5EEF1CE61FA4001346BD /* Date.swift */, - 5B0163BA1D024EB7003CCD96 /* DateComponents.swift */, - EADE0B571BD15DFF00C49C64 /* DateComponentsFormatter.swift */, - 5BDC3F351BCC5DCB00ED97BB /* DateFormatter.swift */, - 5BC46D531D05D6D900005853 /* DateInterval.swift */, - EADE0B581BD15DFF00C49C64 /* DateIntervalFormatter.swift */, - EADE0B591BD15DFF00C49C64 /* Decimal.swift */, - 5BD31D3E1D5D19D600563814 /* Dictionary.swift */, - 5BC1B9A921F275C400524D8C /* DispatchData+DataProtocol.swift */, - EADE0B5B1BD15DFF00C49C64 /* EnergyFormatter.swift */, - 5B4092111D1B30B40022B067 /* ExtraStringAPIs.swift */, - EADE0B5D1BD15DFF00C49C64 /* FileHandle.swift */, - EADE0B5E1BD15DFF00C49C64 /* FileManager.swift */, - 91B668A22252B3C5001487A1 /* FileManager+POSIX.swift */, - 91B668A42252B3E7001487A1 /* FileManager+Win32.swift */, - 1513A8422044893F00539722 /* FileManager+XDG.swift */, - 5BDC3F391BCC5DCB00ED97BB /* Formatter.swift */, - 522C253A1BF16E1600804FC6 /* FoundationErrors.swift */, - 5BDC3F3A1BCC5DCB00ED97BB /* Host.swift */, - 5B424C751D0B6E5B007B39C8 /* IndexPath.swift */, - 5B8BA1611D0B773A00938C27 /* IndexSet.swift */, - 63DCE9D11EAA430100E9CB02 /* ISO8601DateFormatter.swift */, - B98303E925F2131D001F959E /* JSONDecoder.swift */, - 3EDCE5091EF04D8100C2EC04 /* JSONEncoder.swift */, - EADE0B641BD15DFF00C49C64 /* JSONSerialization.swift */, - 49D55FA025E84FE5007BD3B3 /* JSONSerialization+Parser.swift */, - EADE0B661BD15DFF00C49C64 /* LengthFormatter.swift */, - 5BD70FB11D3D4CDC003B9BF8 /* Locale.swift */, - EADE0B681BD15DFF00C49C64 /* MassFormatter.swift */, - 5BECBA371D1CAD7000B39B1F /* Measurement.swift */, - 5B628EDE1D1C995C00CA9570 /* MeasurementFormatter.swift */, - 5BA9BEBC1CF4F3B8009DBD6C /* Notification.swift */, - EADE0B6A1BD15DFF00C49C64 /* NotificationQueue.swift */, - 5BDC3F2E1BCC5DCB00ED97BB /* NSArray.swift */, - EADE0B4F1BD09E3100C49C64 /* NSAttributedString.swift */, - EADE0B541BD15DFF00C49C64 /* NSCache.swift */, - 5BDC3F301BCC5DCB00ED97BB /* NSCalendar.swift */, - 5BDC3FC91BCF176100ED97BB /* NSCFArray.swift */, - 5B5BFEAB1E6CC0C200AC8D9E /* NSCFBoolean.swift */, - 5B2A98CC1D021886008A0B75 /* NSCFCharacterSet.swift */, - 5BDC3FCD1BCF17D300ED97BB /* NSCFDictionary.swift */, - 5BDC3FCF1BCF17E600ED97BB /* NSCFSet.swift */, - 5BDC3FCB1BCF177E00ED97BB /* NSCFString.swift */, - 5BDC3F311BCC5DCB00ED97BB /* NSCharacterSet.swift */, - 5BDC3F321BCC5DCB00ED97BB /* NSCoder.swift */, - EADE0B551BD15DFF00C49C64 /* NSComparisonPredicate.swift */, - EADE0B561BD15DFF00C49C64 /* NSCompoundPredicate.swift */, - D31302001C30CEA900295652 /* NSConcreteValue.swift */, - 5BC1B9AB21F275D500524D8C /* NSData+DataProtocol.swift */, - 5BDC3F331BCC5DCB00ED97BB /* NSData.swift */, - 5BDC3F341BCC5DCB00ED97BB /* NSDate.swift */, - B96C113625BA376D00985A32 /* NSDateComponents.swift */, - EADE0B5A1BD15DFF00C49C64 /* NSDecimalNumber.swift */, - 5BDC3F361BCC5DCB00ED97BB /* NSDictionary.swift */, - 5BDC3F371BCC5DCB00ED97BB /* NSEnumerator.swift */, - 5BDC3F381BCC5DCB00ED97BB /* NSError.swift */, - EADE0B5C1BD15DFF00C49C64 /* NSExpression.swift */, - EADE0B5F1BD15DFF00C49C64 /* NSGeometry.swift */, - EADE0B621BD15DFF00C49C64 /* NSIndexPath.swift */, - EADE0B631BD15DFF00C49C64 /* NSIndexSet.swift */, - EADE0B651BD15DFF00C49C64 /* NSKeyedArchiver.swift */, - EA418C251D57257D005EAD0D /* NSKeyedArchiverHelpers.swift */, - D3BCEB9F1C2F6DDB00295652 /* NSKeyedCoderOldStyleArray.swift */, - D39A14001C2D6E0A00295652 /* NSKeyedUnarchiver.swift */, - 5BDC3F3B1BCC5DCB00ED97BB /* NSLocale.swift */, - 15CA750924F8336A007DF6C1 /* NSCFTypeShims.swift */, - 5BDC3F3C1BCC5DCB00ED97BB /* NSLock.swift */, - D3BCEB9D1C2EDED800295652 /* NSLog.swift */, - 5BECBA391D1CAE9A00B39B1F /* NSMeasurement.swift */, - EADE0B691BD15DFF00C49C64 /* NSNotification.swift */, - EADE0B6B1BD15DFF00C49C64 /* NSNull.swift */, - 5BDC3F3D1BCC5DCB00ED97BB /* NSNumber.swift */, - 5BDC3F3E1BCC5DCB00ED97BB /* NSObjCRuntime.swift */, - 5BDC3F3F1BCC5DCB00ED97BB /* NSObject.swift */, - EADE0B6E1BD15DFF00C49C64 /* NSOrderedSet.swift */, - 5BDC3F401BCC5DCB00ED97BB /* NSPathUtilities.swift */, - EADE0B701BD15DFF00C49C64 /* NSPersonNameComponents.swift */, - 5BA0106D1DF212B300E56898 /* NSPlatform.swift */, - EADE0B731BD15DFF00C49C64 /* NSPredicate.swift */, - 5BDC3F431BCC5DCB00ED97BB /* NSRange.swift */, - EADE0B751BD15DFF00C49C64 /* NSRegularExpression.swift */, - 5BDC3F441BCC5DCB00ED97BB /* NSSet.swift */, - EADE0B781BD15DFF00C49C64 /* NSSortDescriptor.swift */, - D3E8D6D01C367AB600295652 /* NSSpecialValue.swift */, - 5BDC3F451BCC5DCB00ED97BB /* NSString.swift */, - 5B94E8811C430DE70055C035 /* NSStringAPI.swift */, - 5BDC3F461BCC5DCB00ED97BB /* NSSwiftRuntime.swift */, - EADE0B7B1BD15DFF00C49C64 /* NSTextCheckingResult.swift */, - 5BDC3F491BCC5DCB00ED97BB /* NSTimeZone.swift */, - 5BDC3F4A1BCC5DCB00ED97BB /* NSURL.swift */, - B96C10F525BA1EFD00985A32 /* NSURLComponents.swift */, - B96C10FF25BA20A600985A32 /* NSURLQueryItem.swift */, - EADE0B811BD15DFF00C49C64 /* NSURLError.swift */, - 5BDC3F4B1BCC5DCB00ED97BB /* NSUUID.swift */, - 5BDC3F4C1BCC5DCB00ED97BB /* NSValue.swift */, - EADE0B6C1BD15DFF00C49C64 /* NumberFormatter.swift */, - EADE0B6D1BD15DFF00C49C64 /* Operation.swift */, - 5B23AB8A1CE62F9B000DB898 /* PersonNameComponents.swift */, - EADE0B711BD15DFF00C49C64 /* PersonNameComponentsFormatter.swift */, - 5BC1B9AD21F275E900524D8C /* Pointers+DataProtocol.swift */, - EADE0B721BD15DFF00C49C64 /* Port.swift */, - EAB57B711BD1C7A5004AC5C5 /* PortMessage.swift */, - EADE0B7A1BD15DFF00C49C64 /* Process.swift */, - 5BDC3F411BCC5DCB00ED97BB /* ProcessInfo.swift */, - EADE0B741BD15DFF00C49C64 /* Progress.swift */, - EA0812681DA71C8A00651B70 /* ProgressFraction.swift */, - AA9E0E0A21FA6C5600963F4C /* PropertyListEncoder.swift */, - 5BDC3F421BCC5DCB00ED97BB /* PropertyListSerialization.swift */, - 5B23AB881CE62D4D000DB898 /* ReferenceConvertible.swift */, - EADE0B761BD15DFF00C49C64 /* RunLoop.swift */, - EADE0B771BD15DFF00C49C64 /* Scanner.swift */, - 153CC8322214C3D100BFE8F3 /* ScannerAPI.swift */, - 5BD31D401D5D1BC300563814 /* Set.swift */, - EADE0B791BD15DFF00C49C64 /* Stream.swift */, - 5BD31D211D5CEBA800563814 /* String.swift */, - 5B40920F1D1B304C0022B067 /* StringEncodings.swift */, - 5BDC3F471BCC5DCB00ED97BB /* Thread.swift */, - 5BDC3F481BCC5DCB00ED97BB /* Timer.swift */, - 5BCD03811D3EE35C00E3FF9B /* TimeZone.swift */, - 5BECBA3B1D1CAF8800B39B1F /* Unit.swift */, - 5B23AB8C1CE63228000DB898 /* URL.swift */, - 5BCCA8D81CE6697F0059B963 /* URLComponents.swift */, - B96C112425BA2CE700985A32 /* URLQueryItem.swift */, - B96C110925BA215800985A32 /* URLResourceKey.swift */, - EADE0B871BD15DFF00C49C64 /* UserDefaults.swift */, - 6EB768271D18C12C00D4B719 /* UUID.swift */, - 476E415126BDAA150043E21E /* Morphology.swift */, - ); - path = Foundation; - sourceTree = ""; - }; - F023072423F0B4140023DBEC /* Resources */ = { - isa = PBXGroup; - children = ( - EADE0B531BD15DFF00C49C64 /* Info.plist */, - ); - path = Resources; - sourceTree = ""; - }; - F023072D23F0B6D70023DBEC /* URLSession */ = { - isa = PBXGroup; - children = ( - 5A6AC80728E7649D00A22FA7 /* WebSocket */, - F023073A23F0B7060023DBEC /* libcurl */, - F023073523F0B6F60023DBEC /* HTTP */, - F023073223F0B6E90023DBEC /* FTP */, - F023072F23F0B6E20023DBEC /* BodySource.swift */, - F023072E23F0B6E20023DBEC /* Configuration.swift */, - B91161A82429857D00BD2907 /* DataURLProtocol.swift */, - F023075A23F0B7AD0023DBEC /* Message.swift */, - F023075323F0B7AC0023DBEC /* NativeProtocol.swift */, - F023075523F0B7AC0023DBEC /* NetworkingSpecific.swift */, - F023075423F0B7AC0023DBEC /* TaskRegistry.swift */, - F023075723F0B7AC0023DBEC /* TransferState.swift */, - F023075923F0B7AD0023DBEC /* URLSession.swift */, - F023075823F0B7AC0023DBEC /* URLSessionConfiguration.swift */, - F023075623F0B7AC0023DBEC /* URLSessionDelegate.swift */, - F023075B23F0B7AD0023DBEC /* URLSessionTask.swift */, - 316577C325214A8400492943 /* URLSessionTaskMetrics.swift */, - ); - name = URLSession; - sourceTree = ""; - }; - F023073223F0B6E90023DBEC /* FTP */ = { - isa = PBXGroup; - children = ( - F023073323F0B6F10023DBEC /* FTPURLProtocol.swift */, - ); - name = FTP; - sourceTree = ""; - }; - F023073523F0B6F60023DBEC /* HTTP */ = { - isa = PBXGroup; - children = ( - F023073623F0B6FE0023DBEC /* HTTPMessage.swift */, - F023073723F0B6FE0023DBEC /* HTTPURLProtocol.swift */, - ); - name = HTTP; - sourceTree = ""; - }; - F023073A23F0B7060023DBEC /* libcurl */ = { - isa = PBXGroup; - children = ( - F023073C23F0B70F0023DBEC /* EasyHandle.swift */, - F023073D23F0B70F0023DBEC /* libcurlHelpers.swift */, - F023073B23F0B70F0023DBEC /* MultiHandle.swift */, - ); - name = libcurl; - sourceTree = ""; - }; - F023076923F0B9600023DBEC /* Tools */ = { - isa = PBXGroup; - children = ( - F023076A23F0B9730023DBEC /* plutil */, - ); - path = Tools; - sourceTree = ""; - }; - F023076A23F0B9730023DBEC /* plutil */ = { - isa = PBXGroup; - children = ( - EA66F6691BF55D4B00136161 /* main.swift */, - ); - path = plutil; - sourceTree = ""; - }; - F023076B23F0BA4B0023DBEC /* GenerateTestFixtures */ = { - isa = PBXGroup; - children = ( - F023078123F0BC2E0023DBEC /* FixtureValues.swift */, - F023076C23F0BB1E0023DBEC /* main.swift */, - F023076D23F0BB1E0023DBEC /* Utilities.swift */, - ); - path = GenerateTestFixtures; - sourceTree = ""; - }; - F023077923F0BBF10023DBEC /* GenerateTestFixtures */ = { - isa = PBXGroup; - children = ( - F023077A23F0BBF10023DBEC /* main.swift */, - ); - path = GenerateTestFixtures; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 15500FA822EA24D10088F082 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 1550106D22EA25280088F082 /* module.map in Headers */, - 15500FB722EA24D10088F082 /* CFXMLInterface.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1550107722EA266B0088F082 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 15B8038D228F376000B30FF6 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 15FF0065229348F2004AD205 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 15FF00CE22934B78004AD205 /* module.map in Headers */, - 15FF00CB22934A3C004AD205 /* CFURLSessionInterface.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B5D885A1BBC938800234F36 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B7C8A6C1BEA7F8F00C5B690 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 5BB5256C1BEC057200E63BE3 /* module.map in Headers */, - 5B7C8AC81BEA80FC00C5B690 /* CFSet.h in Headers */, - 5B7C8ADC1BEA80FC00C5B690 /* CFSocket.h in Headers */, - 5B7C8ACC1BEA80FC00C5B690 /* CFDateFormatter.h in Headers */, - 1578DA09212B4061003C9516 /* CFRuntime_Internal.h in Headers */, - 5B7C8AD11BEA80FC00C5B690 /* CFTimeZone.h in Headers */, - 5B7C8AC31BEA80FC00C5B690 /* CFBag.h in Headers */, - 5B7C8AE01BEA80FC00C5B690 /* CFStringEncodingExt.h in Headers */, - 5B7C8AE11BEA80FC00C5B690 /* CFURL.h in Headers */, - 1578DA0D212B4070003C9516 /* CFMachPort_Internal.h in Headers */, - 1569BFA22187D04F009518FA /* CFCalendar_Internal.h in Headers */, - 5B7C8ABF1BEA807A00C5B690 /* CFUtilities.h in Headers */, - 5B7C8ADD1BEA80FC00C5B690 /* CFStream.h in Headers */, - 5B40F9F01C125011000E72E3 /* CFXMLInterface.h in Headers */, - 158BCCAD2220A18F00750239 /* CFDateIntervalFormatter.h in Headers */, - 5B7C8AD71BEA80FC00C5B690 /* CFPlugInCOM.h in Headers */, - 5B7C8AFA1BEA81AC00C5B690 /* CFUniChar.h in Headers */, - 5B7C8AC91BEA80FC00C5B690 /* CFTree.h in Headers */, - 5B7C8ADA1BEA80FC00C5B690 /* CFMessagePort.h in Headers */, - 5B7C8ACF1BEA80FC00C5B690 /* CFDate.h in Headers */, - 5B7C8AC51BEA80FC00C5B690 /* CFBitVector.h in Headers */, - 151023B426C3336F009371F3 /* CFPropertyList_Internal.h in Headers */, - 5B7C8AEA1BEA81AC00C5B690 /* CFICULogging.h in Headers */, - 5B7C8AF61BEA81AC00C5B690 /* CFStringEncodingConverter.h in Headers */, - 15E72A5526C470AE0035CAF8 /* CFListFormatter.h in Headers */, - 5B7C8ADE1BEA80FC00C5B690 /* CFCharacterSet.h in Headers */, - 5B7C8ACB1BEA80FC00C5B690 /* CFCalendar.h in Headers */, - 5B7C8AF81BEA81AC00C5B690 /* CFStringEncodingConverterPriv.h in Headers */, - 5B7C8AC71BEA80FC00C5B690 /* CFDictionary.h in Headers */, - 15E72A5826C472630035CAF8 /* CFRelativeDateTimeFormatter.h in Headers */, - 5B7C8ADF1BEA80FC00C5B690 /* CFString.h in Headers */, - 5B7C8ABD1BEA806100C5B690 /* CFBase.h in Headers */, - 5B7C8AED1BEA81AC00C5B690 /* CFBundle_BinaryTypes.h in Headers */, - 5B7C8ACD1BEA80FC00C5B690 /* CFLocale.h in Headers */, - 5B7C8AE81BEA81AC00C5B690 /* CFStorage.h in Headers */, - 5B7C8B021BEA830200C5B690 /* CFBurstTrie.h in Headers */, - 5B7C8AD61BEA80FC00C5B690 /* CFPlugIn.h in Headers */, - 5B7C8AD81BEA80FC00C5B690 /* CFPreferences.h in Headers */, - 15496CF1212CAEBA00450F5A /* CFAttributedStringPriv.h in Headers */, - 5B7C8AF11BEA81AC00C5B690 /* CFStreamAbstract.h in Headers */, - 153E951120111DC500F250BE /* CFKnownLocations.h in Headers */, - 5B7C8AFE1BEA81AC00C5B690 /* CFURLComponents.h in Headers */, - 1578DA11212B407B003C9516 /* CFString_Internal.h in Headers */, - 5B7C8ABC1BEA805C00C5B690 /* CFAvailability.h in Headers */, - 5B6E11A91DA45EB5009B48A3 /* CFDateFormatter_Private.h in Headers */, - 5B7C8AF51BEA81AC00C5B690 /* CFStringDefaultEncoding.h in Headers */, - 5B7C8AD21BEA80FC00C5B690 /* CFPropertyList.h in Headers */, - 5B7C8AE51BEA81AC00C5B690 /* ForFoundationOnly.h in Headers */, - 5B7C8AD51BEA80FC00C5B690 /* CFBundle.h in Headers */, - 5B6228C11C17905B009587FE /* CFAttributedString.h in Headers */, - 5B7C8AE21BEA80FC00C5B690 /* CFURLAccess.h in Headers */, - F03A43181D4877DD00A7791E /* CFAsmMacros.h in Headers */, - 5B7C8ACA1BEA80FC00C5B690 /* CFError.h in Headers */, - 1578DA0F212B4070003C9516 /* CFMachPort_Lifetime.h in Headers */, - 5B7C8AE91BEA81AC00C5B690 /* CFLocaleInternal.h in Headers */, - 5B7C8AE61BEA81AC00C5B690 /* ForSwiftFoundationOnly.h in Headers */, - 5B7C8AC61BEA80FC00C5B690 /* CFData.h in Headers */, - 5B7C8AC01BEA807A00C5B690 /* CFUUID.h in Headers */, - 5B7C8AC21BEA80FC00C5B690 /* CFArray.h in Headers */, - 1578DA15212B6F33003C9516 /* CFCollections_Internal.h in Headers */, - 5B7C8AFD1BEA81AC00C5B690 /* CFUnicodePrecomposition.h in Headers */, - 5B7C8ADB1BEA80FC00C5B690 /* CFRunLoop.h in Headers */, - 5B7C8AFC1BEA81AC00C5B690 /* CFUnicodeDecomposition.h in Headers */, - 5B7C8AF41BEA81AC00C5B690 /* CFCharacterSetPriv.h in Headers */, - 5BB2C75F1ED9F96200B7BDBD /* CFUserNotification.h in Headers */, - 5B7C8AEF1BEA81AC00C5B690 /* CFBundlePriv.h in Headers */, - 5B7C8B011BEA82F800C5B690 /* CFError_Private.h in Headers */, - 5B7C8AF31BEA81AC00C5B690 /* CFStreamPriv.h in Headers */, - 5B7C8AF21BEA81AC00C5B690 /* CFStreamInternal.h in Headers */, - 1569BFA62187D0E0009518FA /* CFDateInterval.h in Headers */, - 5B7C8AEB1BEA81AC00C5B690 /* CFBigNumber.h in Headers */, - 5B6E11A71DA451E7009B48A3 /* CFLocale_Private.h in Headers */, - EA66F6671BF2F2F100136161 /* CoreFoundation.h in Headers */, - 5B7C8AFF1BEA81AC00C5B690 /* CFURLPriv.h in Headers */, - 5B7C8AEE1BEA81AC00C5B690 /* CFBundle_Internal.h in Headers */, - 5B7C8AF01BEA81AC00C5B690 /* CFPlugIn_Factory.h in Headers */, - 5B7C8AE41BEA81AC00C5B690 /* CFPriv.h in Headers */, - 158B66A32450D72E00892EFB /* CFNumber_Private.h in Headers */, - 5B7C8AD91BEA80FC00C5B690 /* CFMachPort.h in Headers */, - 5B7C8AE71BEA81AC00C5B690 /* CFBasicHash.h in Headers */, - 5B7C8AC41BEA80FC00C5B690 /* CFBinaryHeap.h in Headers */, - 5B7C8AFB1BEA81AC00C5B690 /* CFUniCharPriv.h in Headers */, - 5BDF62911C1A550800A89075 /* CFRegularExpression.h in Headers */, - 5B7C8AF91BEA81AC00C5B690 /* CFStringEncodingDatabase.h in Headers */, - EA66F6361BEED03E00136161 /* TargetConditionals.h in Headers */, - 1569BFAE2187D529009518FA /* CFDateComponents.h in Headers */, - F085A1302283C5B700F909F9 /* CFLocking.h in Headers */, - 5B7C8B001BEA82ED00C5B690 /* CFRuntime.h in Headers */, - 5BF9B7F31FABBDB900EE1A7C /* CFPropertyList_Private.h in Headers */, - 5B7C8ABE1BEA807A00C5B690 /* CFByteOrder.h in Headers */, - 5B7C8AF71BEA81AC00C5B690 /* CFStringEncodingConverterExt.h in Headers */, - 5B7C8AE31BEA81AC00C5B690 /* CFLogUtilities.h in Headers */, - B9C0E89620C31AB60064C68C /* CFInternal.h in Headers */, - 5B7C8AD01BEA80FC00C5B690 /* CFNumber.h in Headers */, - 5B6228BD1C179049009587FE /* CFRunArray.h in Headers */, - 5B7C8ACE1BEA80FC00C5B690 /* CFNumberFormatter.h in Headers */, - 1578DA13212B4C35003C9516 /* CFOverflow.h in Headers */, - 158B66A72450F0C400892EFB /* CFBundle_SplitFileName.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 15500FA722EA24D10088F082 /* CFXMLInterface */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1550106722EA24D10088F082 /* Build configuration list for PBXNativeTarget "CFXMLInterface" */; - buildPhases = ( - 15500FA822EA24D10088F082 /* Headers */, - 1550100922EA24D10088F082 /* Sources */, - 1550106622EA24D10088F082 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - F023078623F0BE070023DBEC /* PBXTargetDependency */, - ); - name = CFXMLInterface; - productName = CoreFoundation; - productReference = 1550106A22EA24D10088F082 /* libCFXMLInterface.a */; - productType = "com.apple.product-type.library.static"; - }; - 1550106E22EA266B0088F082 /* SwiftFoundationXML */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1550110622EA266B0088F082 /* Build configuration list for PBXNativeTarget "SwiftFoundationXML" */; - buildPhases = ( - 1550107122EA266B0088F082 /* Frameworks */, - 1550107722EA266B0088F082 /* Headers */, - 1550107922EA266B0088F082 /* Resources */, - 1550107A22EA266B0088F082 /* Framework Headers */, - 1550107B22EA266B0088F082 /* Sources */, - ); - buildRules = ( - ); - dependencies = ( - F023078423F0BDF40023DBEC /* PBXTargetDependency */, - 15F14D3A22EB9F80001598B5 /* PBXTargetDependency */, - 15A619DE245A2895003C8C62 /* PBXTargetDependency */, - ); - name = SwiftFoundationXML; - productName = CoreFoundation; - productReference = 1550110922EA266B0088F082 /* SwiftFoundationXML.framework */; - productType = "com.apple.product-type.framework"; - }; - 15B80384228F376000B30FF6 /* SwiftFoundationNetworking */ = { - isa = PBXNativeTarget; - buildConfigurationList = 15B80437228F376000B30FF6 /* Build configuration list for PBXNativeTarget "SwiftFoundationNetworking" */; - buildPhases = ( - 15B80387228F376000B30FF6 /* Frameworks */, - 15B8038D228F376000B30FF6 /* Headers */, - 15B8038F228F376000B30FF6 /* Resources */, - 15B80390228F376000B30FF6 /* Framework Headers */, - 15B80391228F376000B30FF6 /* Sources */, - ); - buildRules = ( - ); - dependencies = ( - 15B80385228F376000B30FF6 /* PBXTargetDependency */, - 15FF00D022934C39004AD205 /* PBXTargetDependency */, - 15B80446228F39B200B30FF6 /* PBXTargetDependency */, - ); - name = SwiftFoundationNetworking; - productName = CoreFoundation; - productReference = 15B8043A228F376000B30FF6 /* SwiftFoundationNetworking.framework */; - productType = "com.apple.product-type.framework"; - }; - 15FF0006229348F2004AD205 /* CFURLSessionInterface */ = { - isa = PBXNativeTarget; - buildConfigurationList = 15FF00C7229348F2004AD205 /* Build configuration list for PBXNativeTarget "CFURLSessionInterface" */; - buildPhases = ( - 15FF0065229348F2004AD205 /* Headers */, - 15FF0007229348F2004AD205 /* Sources */, - 15FF0064229348F2004AD205 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 15FF00D222935004004AD205 /* PBXTargetDependency */, - ); - name = CFURLSessionInterface; - productName = CoreFoundation; - productReference = 15FF00CA229348F2004AD205 /* libCFURLSessionInterface.a */; - productType = "com.apple.product-type.library.static"; - }; - 5B5D885C1BBC938800234F36 /* SwiftFoundation */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5B5D88651BBC938800234F36 /* Build configuration list for PBXNativeTarget "SwiftFoundation" */; - buildPhases = ( - 5B5D88591BBC938800234F36 /* Frameworks */, - 5B5D885A1BBC938800234F36 /* Headers */, - 5B5D885B1BBC938800234F36 /* Resources */, - 5BDC3F6F1BCC608700ED97BB /* Framework Headers */, - 5B5D88581BBC938800234F36 /* Sources */, - ); - buildRules = ( - ); - dependencies = ( - EA993CE31BEACD8E000969A2 /* PBXTargetDependency */, - ); - name = SwiftFoundation; - productName = CoreFoundation; - productReference = 5B5D885D1BBC938800234F36 /* SwiftFoundation.framework */; - productType = "com.apple.product-type.framework"; - }; - 5B7C8A6D1BEA7F8F00C5B690 /* CoreFoundation */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5B7C8A711BEA7F8F00C5B690 /* Build configuration list for PBXNativeTarget "CoreFoundation" */; - buildPhases = ( - 5B7C8A6C1BEA7F8F00C5B690 /* Headers */, - 5B7C8A6A1BEA7F8F00C5B690 /* Sources */, - 5B7C8A6B1BEA7F8F00C5B690 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = CoreFoundation; - productName = CoreFoundation; - productReference = 5B7C8A6E1BEA7F8F00C5B690 /* libCoreFoundation.a */; - productType = "com.apple.product-type.library.static"; - }; - 5BDC405B1BD6D83B00ED97BB /* TestFoundation */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5BDC405F1BD6D83B00ED97BB /* Build configuration list for PBXNativeTarget "TestFoundation" */; - buildPhases = ( - 5BDC40581BD6D83B00ED97BB /* Sources */, - 5BDC40591BD6D83B00ED97BB /* Frameworks */, - 5BDC405A1BD6D83B00ED97BB /* Resources */, - 5BDC406D1BD6D8B300ED97BB /* CopyFiles */, - B90FD23320C303200087EF44 /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - F023078A23F0BE330023DBEC /* PBXTargetDependency */, - B98F1740229AF5AF00F2B002 /* PBXTargetDependency */, - B90FD23020C2FF420087EF44 /* PBXTargetDependency */, - AE2FC5951CFEFC70008F7981 /* PBXTargetDependency */, - F023078823F0BE240023DBEC /* PBXTargetDependency */, - 1550111A22EA43E00088F082 /* PBXTargetDependency */, - ); - name = TestFoundation; - productName = TestFoundation; - productReference = 5BDC405C1BD6D83B00ED97BB /* TestFoundation.app */; - productType = "com.apple.product-type.bundle"; - }; - 9F0DD33E1ECD734200F68030 /* xdgTestHelper */ = { - isa = PBXNativeTarget; - buildConfigurationList = 9F0DD34B1ECD734200F68030 /* Build configuration list for PBXNativeTarget "xdgTestHelper" */; - buildPhases = ( - 9F0DD33B1ECD734200F68030 /* Sources */, - 9F0DD33C1ECD734200F68030 /* Frameworks */, - 9F0DD33D1ECD734200F68030 /* Resources */, - 1550112122EA473B0088F082 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - B90FD23220C2FF840087EF44 /* PBXTargetDependency */, - 159870C0228F741000ADE509 /* PBXTargetDependency */, - 1550112022EA473B0088F082 /* PBXTargetDependency */, - ); - name = xdgTestHelper; - productName = xdgTestHelper; - productReference = 9F0DD33F1ECD734200F68030 /* xdgTestHelper.app */; - productType = "com.apple.product-type.application"; - }; - EA66F66E1BF56CCB00136161 /* plutil */ = { - isa = PBXNativeTarget; - buildConfigurationList = EA66F6751BF56CCB00136161 /* Build configuration list for PBXNativeTarget "plutil" */; - buildPhases = ( - EA66F66B1BF56CCB00136161 /* Sources */, - EA66F66C1BF56CCB00136161 /* Frameworks */, - EA66F66D1BF56CCB00136161 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - B98F1742229AF5F900F2B002 /* PBXTargetDependency */, - ); - name = plutil; - productName = plutil; - productReference = EA66F66F1BF56CCB00136161 /* plutil */; - productType = "com.apple.product-type.tool"; - }; - F023077723F0BBF10023DBEC /* GenerateTestFixtures */ = { - isa = PBXNativeTarget; - buildConfigurationList = F023077C23F0BBF10023DBEC /* Build configuration list for PBXNativeTarget "GenerateTestFixtures" */; - buildPhases = ( - F023077423F0BBF10023DBEC /* Sources */, - F023077523F0BBF10023DBEC /* Frameworks */, - F023077623F0BBF10023DBEC /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - B94B063B23FDE0AA00B244E8 /* PBXTargetDependency */, - ); - name = GenerateTestFixtures; - productName = GenerateTestFixtures; - productReference = F023077823F0BBF10023DBEC /* GenerateTestFixtures */; - productType = "com.apple.product-type.tool"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 5B5D88541BBC938800234F36 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1130; - LastUpgradeCheck = 1130; - ORGANIZATIONNAME = Swift; - TargetAttributes = { - 5B5D885C1BBC938800234F36 = { - CreatedOnToolsVersion = 7.1; - LastSwiftMigration = 1000; - LastSwiftUpdateCheck = 0800; - ProvisioningStyle = Manual; - }; - 5B7C8A6D1BEA7F8F00C5B690 = { - CreatedOnToolsVersion = 7.2; - LastSwiftMigration = 1410; - ProvisioningStyle = Manual; - }; - 5BDC405B1BD6D83B00ED97BB = { - CreatedOnToolsVersion = 7.1; - LastSwiftMigration = 0800; - LastSwiftUpdateCheck = 0800; - ProvisioningStyle = Manual; - }; - 9F0DD33E1ECD734200F68030 = { - CreatedOnToolsVersion = 8.3.2; - ProvisioningStyle = Automatic; - }; - EA66F66E1BF56CCB00136161 = { - CreatedOnToolsVersion = 7.1; - LastSwiftMigration = 0800; - LastSwiftUpdateCheck = 0800; - ProvisioningStyle = Manual; - }; - F023077723F0BBF10023DBEC = { - CreatedOnToolsVersion = 11.3.1; - }; - }; - }; - buildConfigurationList = 5B5D88571BBC938800234F36 /* Build configuration list for PBXProject "Foundation" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 5B5D88531BBC938800234F36; - productRefGroup = 5B5D885E1BBC938800234F36 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 5B7C8A6D1BEA7F8F00C5B690 /* CoreFoundation */, - 15FF0006229348F2004AD205 /* CFURLSessionInterface */, - 15500FA722EA24D10088F082 /* CFXMLInterface */, - 5B5D885C1BBC938800234F36 /* SwiftFoundation */, - 15B80384228F376000B30FF6 /* SwiftFoundationNetworking */, - 1550106E22EA266B0088F082 /* SwiftFoundationXML */, - EA66F66E1BF56CCB00136161 /* plutil */, - F023077723F0BBF10023DBEC /* GenerateTestFixtures */, - 9F0DD33E1ECD734200F68030 /* xdgTestHelper */, - 5BDC405B1BD6D83B00ED97BB /* TestFoundation */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 1550107922EA266B0088F082 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 15B8038F228F376000B30FF6 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B5D885B1BBC938800234F36 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B98303F425F21389001F959E /* CMakeLists.txt in Resources */, - F023072623F0B4890023DBEC /* Headers in Resources */, - B983E32C23F0C69600D9C402 /* Docs in Resources */, - B983E32E23F0C6E200D9C402 /* CONTRIBUTING.md in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BDC405A1BD6D83B00ED97BB /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B98E33DD2136AA740044EBE9 /* TestFileWithZeros.txt in Resources */, - B933A79E1F3055F700FE6846 /* NSString-UTF32-BE-data.txt in Resources */, - B933A79F1F3055F700FE6846 /* NSString-UTF32-LE-data.txt in Resources */, - D3A597F41C34142600295652 /* NSKeyedUnarchiver-NotificationTest.plist in Resources */, - 528776191BF27D9500CB0090 /* Test.plist in Resources */, - EA66F6481BF1619600136161 /* NSURLTestData.plist in Resources */, - D3A597FA1C3415F000295652 /* NSKeyedUnarchiver-UUIDTest.plist in Resources */, - B910957B1EEF237800A71930 /* NSString-UTF16-BE-data.txt in Resources */, - D3A598001C341E9100295652 /* NSKeyedUnarchiver-ConcreteValueTest.plist in Resources */, - D3A597FC1C3417EA00295652 /* NSKeyedUnarchiver-ComplexTest.plist in Resources */, - B910957A1EEF237800A71930 /* NSString-UTF16-LE-data.txt in Resources */, - D3E8D6D51C36AC0C00295652 /* NSKeyedUnarchiver-RectTest.plist in Resources */, - D3A597F81C3415CC00295652 /* NSKeyedUnarchiver-URLTest.plist in Resources */, - 156C846E224069A100607D44 /* Fixtures in Resources */, - D3E8D6D31C36982700295652 /* NSKeyedUnarchiver-EdgeInsetsTest.plist in Resources */, - B907F36B20BB07A700013CBE /* NSString-ISO-8859-1-data.txt in Resources */, - D370696E1C394FBF00295652 /* NSKeyedUnarchiver-RangeTest.plist in Resources */, - D3A597F71C3415CC00295652 /* NSKeyedUnarchiver-ArrayTest.plist in Resources */, - CE19A88C1C23AA2300B4CB6A /* NSStringTestData.txt in Resources */, - E1A03F361C4828650023AF4D /* PropertyList-1.0.dtd in Resources */, - E1A3726F1C31EBFB0023AF4D /* NSXMLDocumentTestData.xml in Resources */, - E1A03F381C482C730023AF4D /* NSXMLDTDTestData.xml in Resources */, - D3A598041C349E6A00295652 /* NSKeyedUnarchiver-OrderedSetTest.plist in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9F0DD33D1ECD734200F68030 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - B90FD23320C303200087EF44 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "cp ${BUILT_PRODUCTS_DIR}/xdgTestHelper.app/Contents/MacOS/xdgTestHelper ${BUILT_PRODUCTS_DIR}/TestFoundation.app/Contents/MacOS/\ncp ${BUILT_PRODUCTS_DIR}/plutil ${BUILT_PRODUCTS_DIR}/TestFoundation.app/Contents/MacOS/\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 1550100922EA24D10088F082 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 15A619E0245A298C003C8C62 /* CFXMLInterface.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1550107B22EA266B0088F082 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1550110E22EA26CA0088F082 /* XMLDocument.swift in Sources */, - 1550110F22EA26CA0088F082 /* XMLDTD.swift in Sources */, - 15BB952A250988C50071BD20 /* CFAccess.swift in Sources */, - 1550111022EA26CA0088F082 /* XMLDTDNode.swift in Sources */, - 1550111122EA26CA0088F082 /* XMLElement.swift in Sources */, - 1550111222EA26CA0088F082 /* XMLNode.swift in Sources */, - 1550111322EA26CA0088F082 /* XMLParser.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 15B80391228F376000B30FF6 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B91161AA2429860900BD2907 /* DataURLProtocol.swift in Sources */, - 5A6AC80C28E7BC8F00A22FA7 /* WebSocketURLProtocol.swift in Sources */, - F023073823F0B6FE0023DBEC /* HTTPMessage.swift in Sources */, - 15B8043D228F38A600B30FF6 /* URLCredentialStorage.swift in Sources */, - F023074023F0B7100023DBEC /* libcurlHelpers.swift in Sources */, - 15B8043E228F38C000B30FF6 /* URLRequest.swift in Sources */, - F023075C23F0B7AD0023DBEC /* NativeProtocol.swift in Sources */, - F023073F23F0B7100023DBEC /* EasyHandle.swift in Sources */, - 15B8039E228F376000B30FF6 /* URLProtectionSpace.swift in Sources */, - F023076123F0B7AD0023DBEC /* URLSessionConfiguration.swift in Sources */, - F023076223F0B7AD0023DBEC /* URLSession.swift in Sources */, - 15B803B4228F376000B30FF6 /* URLCredential.swift in Sources */, - F023075D23F0B7AD0023DBEC /* TaskRegistry.swift in Sources */, - 15B803CF228F376000B30FF6 /* URLAuthenticationChallenge.swift in Sources */, - F023076823F0B8740023DBEC /* Boxing.swift in Sources */, - F023073123F0B6E20023DBEC /* BodySource.swift in Sources */, - F023075E23F0B7AD0023DBEC /* NetworkingSpecific.swift in Sources */, - 316577C425214A8400492943 /* URLSessionTaskMetrics.swift in Sources */, - F023073423F0B6F10023DBEC /* FTPURLProtocol.swift in Sources */, - F023073E23F0B7100023DBEC /* MultiHandle.swift in Sources */, - 15B803E6228F376000B30FF6 /* NSURLRequest.swift in Sources */, - F023076423F0B7AD0023DBEC /* URLSessionTask.swift in Sources */, - F023075F23F0B7AD0023DBEC /* URLSessionDelegate.swift in Sources */, - F023073023F0B6E20023DBEC /* Configuration.swift in Sources */, - 15B8043C228F387400B30FF6 /* URLCache.swift in Sources */, - F023073923F0B6FE0023DBEC /* HTTPURLProtocol.swift in Sources */, - F023076323F0B7AD0023DBEC /* Message.swift in Sources */, - 15B8043F228F38C700B30FF6 /* URLResponse.swift in Sources */, - F023076023F0B7AD0023DBEC /* TransferState.swift in Sources */, - 15B80414228F376000B30FF6 /* URLProtocol.swift in Sources */, - 15B8043B228F385F00B30FF6 /* HTTPCookie.swift in Sources */, - 15B80430228F376000B30FF6 /* HTTPCookieStorage.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 15FF0007229348F2004AD205 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 15FF004B229348F2004AD205 /* CFURLSessionInterface.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B5D88581BBC938800234F36 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 63DCE9D21EAA430100E9CB02 /* ISO8601DateFormatter.swift in Sources */, - 5BC1B9A621F2759C00524D8C /* DataProtocol.swift in Sources */, - 5BF7AE831BCD50CD008F214A /* NSArray.swift in Sources */, - EADE0B991BD15DFF00C49C64 /* EnergyFormatter.swift in Sources */, - EADE0BBF1BD15E0000C49C64 /* NSURLError.swift in Sources */, - EADE0BAF1BD15E0000C49C64 /* PersonNameComponentsFormatter.swift in Sources */, - EADE0B941BD15DFF00C49C64 /* NSCompoundPredicate.swift in Sources */, - 4778105026BC9F810071E8A1 /* AttributedString.swift in Sources */, - 528776141BF2629700CB0090 /* FoundationErrors.swift in Sources */, - 5B23AB8D1CE63228000DB898 /* URL.swift in Sources */, - EADE0BA91BD15E0000C49C64 /* NSNull.swift in Sources */, - 5BF7AEAC1BCD51F9008F214A /* NSEnumerator.swift in Sources */, - 5BA9BEA81CF3E7E7009DBD6C /* CharacterSet.swift in Sources */, - 5BC1B9AA21F275C400524D8C /* DispatchData+DataProtocol.swift in Sources */, - 61E0117E1C1B55B9000037DD /* Timer.swift in Sources */, - 5BDC3FD01BCF17E600ED97BB /* NSCFSet.swift in Sources */, - EADE0B931BD15DFF00C49C64 /* NSComparisonPredicate.swift in Sources */, - EADE0B921BD15DFF00C49C64 /* NSCache.swift in Sources */, - EADE0BAB1BD15E0000C49C64 /* Operation.swift in Sources */, - 5BECBA3C1D1CAF8800B39B1F /* Unit.swift in Sources */, - 5B2A98CD1D021886008A0B75 /* NSCFCharacterSet.swift in Sources */, - EADE0B9A1BD15DFF00C49C64 /* NSExpression.swift in Sources */, - EADE0BB01BD15E0000C49C64 /* Port.swift in Sources */, - EADE0BB91BD15E0000C49C64 /* NSTextCheckingResult.swift in Sources */, - EA0812691DA71C8A00651B70 /* ProgressFraction.swift in Sources */, - 49D55FA125E84FE5007BD3B3 /* JSONSerialization+Parser.swift in Sources */, - 5BC1B9A821F275B000524D8C /* Collections+DataProtocol.swift in Sources */, - 5BF7AEBE1BCD51F9008F214A /* NSTimeZone.swift in Sources */, - 4778105226BC9F810071E8A1 /* AttributedStringCodable.swift in Sources */, - EADE0B951BD15DFF00C49C64 /* DateComponentsFormatter.swift in Sources */, - 5BC1B9AE21F275E900524D8C /* Pointers+DataProtocol.swift in Sources */, - B96C10F625BA1EFD00985A32 /* NSURLComponents.swift in Sources */, - EADE0BA21BD15E0000C49C64 /* JSONSerialization.swift in Sources */, - 5BF7AEBA1BCD51F9008F214A /* NSString.swift in Sources */, - 5BF7AEB81BCD51F9008F214A /* NSRange.swift in Sources */, - EADE0B501BD09E3100C49C64 /* NSAttributedString.swift in Sources */, - 5BF7AEBB1BCD51F9008F214A /* NSSwiftRuntime.swift in Sources */, - 5B5C5EF01CE61FA4001346BD /* Date.swift in Sources */, - EADE0B9B1BD15DFF00C49C64 /* FileHandle.swift in Sources */, - EADE0BB11BD15E0000C49C64 /* NSPredicate.swift in Sources */, - 5BF7AEC01BCD51F9008F214A /* NSUUID.swift in Sources */, - 5BF7AEB01BCD51F9008F214A /* NSLocale.swift in Sources */, - EADE0BA31BD15E0000C49C64 /* NSKeyedArchiver.swift in Sources */, - 5BF7AEAD1BCD51F9008F214A /* NSError.swift in Sources */, - EADE0BB61BD15E0000C49C64 /* NSSortDescriptor.swift in Sources */, - 5BF7AEA41BCD51F9008F214A /* Bundle.swift in Sources */, - 5B23AB891CE62D4D000DB898 /* ReferenceConvertible.swift in Sources */, - 153CC8352215E00200BFE8F3 /* ScannerAPI.swift in Sources */, - D3E8D6D11C367AB600295652 /* NSSpecialValue.swift in Sources */, - EAB57B721BD1C7A5004AC5C5 /* PortMessage.swift in Sources */, - 91B668A32252B3C5001487A1 /* FileManager+POSIX.swift in Sources */, - 5BD31D201D5CE8C400563814 /* Bridging.swift in Sources */, - 3EDCE50C1EF04D8100C2EC04 /* Codable.swift in Sources */, - EADE0BA11BD15DFF00C49C64 /* NSIndexSet.swift in Sources */, - 5BF7AEA91BCD51F9008F214A /* NSDate.swift in Sources */, - 5BF7AEC11BCD51F9008F214A /* NSValue.swift in Sources */, - 5BF7AEAE1BCD51F9008F214A /* Formatter.swift in Sources */, - EADE0B9C1BD15DFF00C49C64 /* FileManager.swift in Sources */, - 5BF7AEA61BCD51F9008F214A /* NSCharacterSet.swift in Sources */, - AA9E0E0B21FA6C5600963F4C /* PropertyListEncoder.swift in Sources */, - 5BD70FB41D3D4F8B003B9BF8 /* Calendar.swift in Sources */, - 5BA9BEBD1CF4F3B8009DBD6C /* Notification.swift in Sources */, - 5BD70FB21D3D4CDC003B9BF8 /* Locale.swift in Sources */, - EADE0BB71BD15E0000C49C64 /* Stream.swift in Sources */, - 5BF7AEBF1BCD51F9008F214A /* NSURL.swift in Sources */, - 5BD31D411D5D1BC300563814 /* Set.swift in Sources */, - 5BD31D241D5CECC400563814 /* Array.swift in Sources */, - 5BF7AEBC1BCD51F9008F214A /* Thread.swift in Sources */, - 3EDCE5101EF04D8100C2EC04 /* JSONEncoder.swift in Sources */, - D31302011C30CEA900295652 /* NSConcreteValue.swift in Sources */, - 5BF7AEA81BCD51F9008F214A /* NSData.swift in Sources */, - 5B424C761D0B6E5B007B39C8 /* IndexPath.swift in Sources */, - EADE0BB51BD15E0000C49C64 /* Scanner.swift in Sources */, - EADE0BA01BD15DFF00C49C64 /* NSIndexPath.swift in Sources */, - 5BF7AEB51BCD51F9008F214A /* NSPathUtilities.swift in Sources */, - B96C113725BA376D00985A32 /* NSDateComponents.swift in Sources */, - EADE0B9D1BD15DFF00C49C64 /* NSGeometry.swift in Sources */, - 5BF7AEAA1BCD51F9008F214A /* DateFormatter.swift in Sources */, - 5BECBA361D1CACC500B39B1F /* MeasurementFormatter.swift in Sources */, - F023076623F0B7F90023DBEC /* Boxing.swift in Sources */, - 5BF7AEB61BCD51F9008F214A /* ProcessInfo.swift in Sources */, - EADE0BB31BD15E0000C49C64 /* NSRegularExpression.swift in Sources */, - EADE0BA41BD15E0000C49C64 /* LengthFormatter.swift in Sources */, - 5BDC3FCA1BCF176100ED97BB /* NSCFArray.swift in Sources */, - EADE0BB21BD15E0000C49C64 /* Progress.swift in Sources */, - EADE0B961BD15DFF00C49C64 /* DateIntervalFormatter.swift in Sources */, - 5B5BFEAC1E6CC0C200AC8D9E /* NSCFBoolean.swift in Sources */, - 6EB768281D18C12C00D4B719 /* UUID.swift in Sources */, - 5BF7AEA51BCD51F9008F214A /* NSCalendar.swift in Sources */, - EADE0BB81BD15E0000C49C64 /* Process.swift in Sources */, - 5BF7AEB31BCD51F9008F214A /* NSObjCRuntime.swift in Sources */, - 5BD31D3F1D5D19D600563814 /* Dictionary.swift in Sources */, - 5B94E8821C430DE70055C035 /* NSStringAPI.swift in Sources */, - 5B0163BB1D024EB7003CCD96 /* DateComponents.swift in Sources */, - 5BF7AEAB1BCD51F9008F214A /* NSDictionary.swift in Sources */, - EADE0BAA1BD15E0000C49C64 /* NumberFormatter.swift in Sources */, - D39A14011C2D6E0A00295652 /* NSKeyedUnarchiver.swift in Sources */, - 5B4092101D1B304C0022B067 /* StringEncodings.swift in Sources */, - 5BECBA381D1CAD7000B39B1F /* Measurement.swift in Sources */, - 5BF7AEAF1BCD51F9008F214A /* Host.swift in Sources */, - EADE0B4E1BD09E0800C49C64 /* AffineTransform.swift in Sources */, - 5BDC3FCE1BCF17D300ED97BB /* NSCFDictionary.swift in Sources */, - 476E415226BDAA150043E21E /* Morphology.swift in Sources */, - EADE0BA81BD15E0000C49C64 /* NotificationQueue.swift in Sources */, - EA418C261D57257D005EAD0D /* NSKeyedArchiverHelpers.swift in Sources */, - EADE0B981BD15DFF00C49C64 /* NSDecimalNumber.swift in Sources */, - 5BA9BEA61CF3D747009DBD6C /* Data.swift in Sources */, - 5BD31D221D5CEBA800563814 /* String.swift in Sources */, - 5BF7AEA71BCD51F9008F214A /* NSCoder.swift in Sources */, - D3BCEBA01C2F6DDB00295652 /* NSKeyedCoderOldStyleArray.swift in Sources */, - 5B8BA1621D0B773A00938C27 /* IndexSet.swift in Sources */, - EADE0BA71BD15E0000C49C64 /* NSNotification.swift in Sources */, - 4778104E26BC9F810071E8A1 /* AttributedStringRunCoalescing.swift in Sources */, - B96C110A25BA215800985A32 /* URLResourceKey.swift in Sources */, - 5BF7AEB41BCD51F9008F214A /* NSObject.swift in Sources */, - EADE0B521BD09F2F00C49C64 /* ByteCountFormatter.swift in Sources */, - 5BA0106E1DF212B300E56898 /* NSPlatform.swift in Sources */, - D3BCEB9E1C2EDED800295652 /* NSLog.swift in Sources */, - 15CA750A24F8336A007DF6C1 /* NSCFTypeShims.swift in Sources */, - 61E0117D1C1B5590000037DD /* RunLoop.swift in Sources */, - B96C110025BA20A600985A32 /* NSURLQueryItem.swift in Sources */, - 5B23AB8B1CE62F9B000DB898 /* PersonNameComponents.swift in Sources */, - EADE0BA61BD15E0000C49C64 /* MassFormatter.swift in Sources */, - 5BECBA3A1D1CAE9A00B39B1F /* NSMeasurement.swift in Sources */, - 5BF7AEB21BCD51F9008F214A /* NSNumber.swift in Sources */, - 1513A8432044893F00539722 /* FileManager+XDG.swift in Sources */, - 4778105126BC9F810071E8A1 /* Conversion.swift in Sources */, - 91B668A52252B3E7001487A1 /* FileManager+Win32.swift in Sources */, - 4778104F26BC9F810071E8A1 /* AttributedStringAttribute.swift in Sources */, - 5BCD03821D3EE35C00E3FF9B /* TimeZone.swift in Sources */, - 4778104C26BC9F810071E8A1 /* FoundationAttributes.swift in Sources */, - B96C112525BA2CE700985A32 /* URLQueryItem.swift in Sources */, - 5BC1B9AC21F275D500524D8C /* NSData+DataProtocol.swift in Sources */, - 5B4092121D1B30B40022B067 /* ExtraStringAPIs.swift in Sources */, - 5BC46D541D05D6D900005853 /* DateInterval.swift in Sources */, - EADE0BC51BD15E0000C49C64 /* UserDefaults.swift in Sources */, - 5BF7AEB11BCD51F9008F214A /* NSLock.swift in Sources */, - 5BF7AEB91BCD51F9008F214A /* NSSet.swift in Sources */, - 5BCCA8D91CE6697F0059B963 /* URLComponents.swift in Sources */, - B98303EA25F2131D001F959E /* JSONDecoder.swift in Sources */, - 5BDC3FCC1BCF177E00ED97BB /* NSCFString.swift in Sources */, - EADE0BAC1BD15E0000C49C64 /* NSOrderedSet.swift in Sources */, - 474E124D26BCD6D00016C28A /* AttributedString+Locking.swift in Sources */, - 5BC1B9A421F2757F00524D8C /* ContiguousBytes.swift in Sources */, - EADE0B971BD15DFF00C49C64 /* Decimal.swift in Sources */, - 5B78185B1D6CB5D2004A01F2 /* CGFloat.swift in Sources */, - 5BF7AEB71BCD51F9008F214A /* PropertyListSerialization.swift in Sources */, - EADE0BAE1BD15E0000C49C64 /* NSPersonNameComponents.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B7C8A6A1BEA7F8F00C5B690 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B7C8A871BEA7FDB00C5B690 /* CFLocale.c in Sources */, - 5BDF62901C1A550800A89075 /* CFRegularExpression.c in Sources */, - 5B7C8AB71BEA801700C5B690 /* CFUnicodePrecomposition.c in Sources */, - 5BF9B7FE1FABD5DA00EE1A7C /* CFBundle_DebugStrings.c in Sources */, - 5B7C8A721BEA7FCE00C5B690 /* CFBase.c in Sources */, - 5B7C8AB81BEA802100C5B690 /* CFURLComponents_URIParser.c in Sources */, - 5B7C8A8E1BEA7FE200C5B690 /* CFTimeZone.c in Sources */, - 5B7C8A791BEA7FCE00C5B690 /* CFUUID.c in Sources */, - 5B7C8A7F1BEA7FCE00C5B690 /* CFData.c in Sources */, - 5B7C8A9C1BEA7FF900C5B690 /* CFBundle.c in Sources */, - 1578DA0E212B4070003C9516 /* CFMachPort_Lifetime.c in Sources */, - 5BF9B8001FABD5DA00EE1A7C /* CFBundle_Main.c in Sources */, - 5B7C8AB51BEA801700C5B690 /* CFUniChar.c in Sources */, - 158BCCAE2220A18F00750239 /* CFDateIntervalFormatter.c in Sources */, - 61E011811C1B5998000037DD /* CFMessagePort.c in Sources */, - 5B7C8AB61BEA801700C5B690 /* CFUnicodeDecomposition.c in Sources */, - 5B7C8A881BEA7FDB00C5B690 /* CFLocaleIdentifier.c in Sources */, - 5B7C8AB01BEA801700C5B690 /* CFBuiltinConverters.c in Sources */, - 5B7C8A761BEA7FCE00C5B690 /* CFSortFunctions.c in Sources */, - 5B2B59831C24D00C00271109 /* CFSocketStream.c in Sources */, - 5B7C8AA11BEA800400C5B690 /* CFApplicationPreferences.c in Sources */, - 5B2B59821C24D00500271109 /* CFStream.c in Sources */, - 5B7C8A8B1BEA7FE200C5B690 /* CFBigNumber.c in Sources */, - 5B7C8A7D1BEA7FCE00C5B690 /* CFBinaryHeap.c in Sources */, - 5B7C8A7E1BEA7FCE00C5B690 /* CFBitVector.c in Sources */, - 559451EC1F706BFA002807FB /* CFXMLPreferencesDomain.c in Sources */, - 5BF9B8011FABD5DA00EE1A7C /* CFBundle_ResourceFork.c in Sources */, - 5B7C8A8F1BEA7FEC00C5B690 /* CFBinaryPList.c in Sources */, - 5B7C8A911BEA7FEC00C5B690 /* CFPropertyList.c in Sources */, - 5B7C8AB41BEA801700C5B690 /* CFStringEncodingDatabase.c in Sources */, - 5B7C8A831BEA7FCE00C5B690 /* CFTree.c in Sources */, - 5B7C8A981BEA7FF900C5B690 /* CFBundle_InfoPlist.c in Sources */, - 5B7C8A961BEA7FF900C5B690 /* CFBundle_Binary.c in Sources */, - 5B7C8AAC1BEA800D00C5B690 /* CFString.c in Sources */, - 5B7C8A821BEA7FCE00C5B690 /* CFStorage.c in Sources */, - 153E951220111DC500F250BE /* CFKnownLocations.c in Sources */, - 5B7C8AAF1BEA800D00C5B690 /* CFStringUtilities.c in Sources */, - 1569BFAD2187D529009518FA /* CFDateComponents.c in Sources */, - 5B7C8A891BEA7FDB00C5B690 /* CFNumberFormatter.c in Sources */, - 15E72A5426C470AE0035CAF8 /* CFListFormatter.c in Sources */, - 5B7C8A8C1BEA7FE200C5B690 /* CFDate.c in Sources */, - 5B7C8A751BEA7FCE00C5B690 /* CFRuntime.c in Sources */, - 5B7C8A7C1BEA7FCE00C5B690 /* CFBasicHash.c in Sources */, - 61E011821C1B599A000037DD /* CFMachPort.c in Sources */, - 5B7C8AAA1BEA800D00C5B690 /* CFBurstTrie.c in Sources */, - D51239DF1CD9DA0800D433EE /* CFSocket.c in Sources */, - 5B7C8A801BEA7FCE00C5B690 /* CFDictionary.c in Sources */, - 5BC2C00F1C07833200CC214E /* CFStringTransform.c in Sources */, - 158B66A62450F0C400892EFB /* CFBundle_SplitFileName.c in Sources */, - 15E72A5926C472630035CAF8 /* CFRelativeDateTimeFormatter.c in Sources */, - 5B7C8AAE1BEA800D00C5B690 /* CFStringScanner.c in Sources */, - 5B7C8A771BEA7FCE00C5B690 /* CFSystemDirectories.c in Sources */, - 5B7C8AAD1BEA800D00C5B690 /* CFStringEncodings.c in Sources */, - 5B7C8AB21BEA801700C5B690 /* CFPlatformConverters.c in Sources */, - 5B7C8AB91BEA802100C5B690 /* CFURLComponents.c in Sources */, - 1569BFA12187D04C009518FA /* CFCalendar_Enumerate.c in Sources */, - 5B7C8A861BEA7FDB00C5B690 /* CFDateFormatter.c in Sources */, - 5B7C8AAB1BEA800D00C5B690 /* CFCharacterSet.c in Sources */, - 5B7C8A7A1BEA7FCE00C5B690 /* CFArray.c in Sources */, - 5B7C8ABA1BEA802100C5B690 /* CFURL.c in Sources */, - 5BF9B7FF1FABD5DA00EE1A7C /* CFBundle_Executable.c in Sources */, - 5B7C8A731BEA7FCE00C5B690 /* CFFileUtilities.c in Sources */, - 5B7C8A971BEA7FF900C5B690 /* CFBundle_Grok.c in Sources */, - 5B7C8ABB1BEA802100C5B690 /* CFURLAccess.c in Sources */, - 5B1FD9C51D6D16150080E83C /* CFURLSessionInterface.c in Sources */, - 5B6228BB1C179041009587FE /* CFRunArray.c in Sources */, - 5B7C8A901BEA7FEC00C5B690 /* CFOldStylePList.c in Sources */, - 61E0117F1C1B5990000037DD /* CFRunLoop.c in Sources */, - 5B7C8A7B1BEA7FCE00C5B690 /* CFBag.c in Sources */, - 5B7C8AA21BEA800400C5B690 /* CFPreferences.c in Sources */, - 5B7C8A811BEA7FCE00C5B690 /* CFSet.c in Sources */, - 5BF9B8021FABD5DA00EE1A7C /* CFBundle_Tables.c in Sources */, - 5B7C8A8A1BEA7FDB00C5B690 /* CFLocaleKeys.c in Sources */, - 5B7C8A9B1BEA7FF900C5B690 /* CFBundle_Strings.c in Sources */, - 5B2B59841C24D01100271109 /* CFConcreteStreams.c in Sources */, - 5B7C8A851BEA7FDB00C5B690 /* CFCalendar.c in Sources */, - 5B7C8AB11BEA801700C5B690 /* CFICUConverters.c in Sources */, - 1569BFA52187D0E0009518FA /* CFDateInterval.c in Sources */, - 5B7C8A841BEA7FDB00C5B690 /* CFError.c in Sources */, - 5B7C8A8D1BEA7FE200C5B690 /* CFNumber.c in Sources */, - 5B7C8A991BEA7FF900C5B690 /* CFBundle_Locale.c in Sources */, - 5B7C8A741BEA7FCE00C5B690 /* CFPlatform.c in Sources */, - 5B7C8A781BEA7FCE00C5B690 /* CFUtilities.c in Sources */, - 5B7C8AB31BEA801700C5B690 /* CFStringEncodingConverter.c in Sources */, - 5B6228BF1C179052009587FE /* CFAttributedString.c in Sources */, - 5B7C8A9A1BEA7FF900C5B690 /* CFBundle_Resources.c in Sources */, - 5B7C8AA01BEA7FF900C5B690 /* CFPlugIn.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BDC40581BD6D83B00ED97BB /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B9F4492D2483FFD700B30F02 /* TestNSURL.swift in Sources */, - B91161AD242A363900BD2907 /* TestDataURLProtocol.swift in Sources */, - B95FC97622B84B0A005DEA0A /* TestNSSortDescriptor.swift in Sources */, - B940492D223B146800FB4384 /* TestProgressFraction.swift in Sources */, - 159884921DCC877700E3314C /* TestHTTPCookieStorage.swift in Sources */, - 5FE52C951D147D1C00F7D270 /* TestNSTextCheckingResult.swift in Sources */, - 5B13B3451C582D4C00651CE2 /* TestNSString.swift in Sources */, - 1520469B1D8AEABE00D02E36 /* HTTPServer.swift in Sources */, - 4704393326BDFF34000D213E /* TestAttributedStringCOW.swift in Sources */, - B90C57BC1EEEEA5A005208AE /* TestThread.swift in Sources */, - B90C57BB1EEEEA5A005208AE /* TestFileManager.swift in Sources */, - A058C2021E529CF100B07AA1 /* TestMassFormatter.swift in Sources */, - 15FCF4E323021C020095E52E /* TestSocketPort.swift in Sources */, - 5B13B3381C582D4C00651CE2 /* TestNotificationQueue.swift in Sources */, - CC5249C01D341D23007CB54D /* TestUnitConverter.swift in Sources */, - 5B13B3331C582D4C00651CE2 /* TestJSONSerialization.swift in Sources */, - 5B13B33C1C582D4C00651CE2 /* TestNSOrderedSet.swift in Sources */, - 90E645DF1E4C89A400D0D47C /* TestNSCache.swift in Sources */, - 5B13B34A1C582D4C00651CE2 /* TestURL.swift in Sources */, - EA54A6FB1DB16D53009E0809 /* TestObjCRuntime.swift in Sources */, - BB3D7558208A1E500085CFDC /* Imports.swift in Sources */, - 5B13B34D1C582D4C00651CE2 /* TestNSUUID.swift in Sources */, - 15F10CDC218909BF00D88114 /* TestNSCalendar.swift in Sources */, - 5B13B3281C582D4C00651CE2 /* TestBundle.swift in Sources */, - 5B13B32A1C582D4C00651CE2 /* TestCharacterSet.swift in Sources */, - BF8E65311DC3B3CB005AB5C3 /* TestNotification.swift in Sources */, - 63DCE9D41EAA432400E9CB02 /* TestISO8601DateFormatter.swift in Sources */, - B9D9734123D19E2E00AB249C /* TestNSDateComponents.swift in Sources */, - EA01AAEC1DA839C4008F4E07 /* TestProgress.swift in Sources */, - 03B6F5841F15F339004F25AF /* TestURLProtocol.swift in Sources */, - 5B13B3411C582D4C00651CE2 /* TestNSRegularExpression.swift in Sources */, - 5B13B3491C582D4C00651CE2 /* TestTimeZone.swift in Sources */, - 5B13B34B1C582D4C00651CE2 /* TestNSURLRequest.swift in Sources */, - 5B13B33E1C582D4C00651CE2 /* TestProcessInfo.swift in Sources */, - 5B13B33F1C582D4C00651CE2 /* TestPropertyListSerialization.swift in Sources */, - 5B13B32C1C582D4C00651CE2 /* TestDate.swift in Sources */, - C7DE1FCC21EEE67200174F35 /* TestUUID.swift in Sources */, - 231503DB1D8AEE5D0061694D /* TestDecimal.swift in Sources */, - 7900433C1CACD33E00ECCBF1 /* TestNSPredicate.swift in Sources */, - 5B13B33B1C582D4C00651CE2 /* TestNumberFormatter.swift in Sources */, - 5B13B3301C582D4C00651CE2 /* TestHTTPCookie.swift in Sources */, - B9D9734523D1A36E00AB249C /* TestHTTPURLResponse.swift in Sources */, - 5B13B3361C582D4C00651CE2 /* TestNSLocale.swift in Sources */, - B9D9734323D19FD100AB249C /* TestURLComponents.swift in Sources */, - 5B13B3391C582D4C00651CE2 /* TestNSNull.swift in Sources */, - BD8042161E09857800487EB8 /* TestLengthFormatter.swift in Sources */, - 659FB6DE2405E5E300F5F63F /* TestBridging.swift in Sources */, - 5B13B3421C582D4C00651CE2 /* TestRunLoop.swift in Sources */, - 155D3BBC22401D1100B0D38E /* FixtureValues.swift in Sources */, - 5B13B34E1C582D4C00651CE2 /* TestXMLDocument.swift in Sources */, - 5B13B32B1C582D4C00651CE2 /* TestNSData.swift in Sources */, - 5B13B34C1C582D4C00651CE2 /* TestURLResponse.swift in Sources */, - 4704393526BDFF34000D213E /* TestAttributedStringSupport.swift in Sources */, - AA9E0E0D21FA6E0700963F4C /* TestPropertyListEncoder.swift in Sources */, - 0383A1751D2E558A0052E5D1 /* TestStream.swift in Sources */, - 5B13B3481C582D4C00651CE2 /* TestTimer.swift in Sources */, - 5B13B32D1C582D4C00651CE2 /* TestNSDictionary.swift in Sources */, - 5B13B3261C582D4C00651CE2 /* TestAffineTransform.swift in Sources */, - 2EBE67A51C77BF0E006583D5 /* TestDateFormatter.swift in Sources */, - 5B13B3291C582D4C00651CE2 /* TestCalendar.swift in Sources */, - 158BCCAA2220A12600750239 /* TestDateIntervalFormatter.swift in Sources */, - 7D8BD737225EADB80057CF37 /* TestDateInterval.swift in Sources */, - 5B13B34F1C582D4C00651CE2 /* TestXMLParser.swift in Sources */, - BF85E9D81FBDCC2000A79793 /* TestHost.swift in Sources */, - D5C40F331CDA1D460005690C /* TestOperationQueue.swift in Sources */, - 616068F3225DE5C2004FCC54 /* FTPServer.swift in Sources */, - BDBB65901E256BFA001A7286 /* TestEnergyFormatter.swift in Sources */, - 5B13B32F1C582D4C00651CE2 /* TestNSGeometry.swift in Sources */, - 7D0DE86E211883F500540061 /* TestDateComponents.swift in Sources */, - 5B13B3351C582D4C00651CE2 /* TestNSKeyedUnarchiver.swift in Sources */, - 5B13B33D1C582D4C00651CE2 /* TestPipe.swift in Sources */, - ABB1293526D4736B00401E6C /* TestUnitInformationStorage.swift in Sources */, - F9E0BB371CA70B8000F7FF3C /* TestURLCredential.swift in Sources */, - 5B13B3341C582D4C00651CE2 /* TestNSKeyedArchiver.swift in Sources */, - 5B13B3441C582D4C00651CE2 /* TestNSSet.swift in Sources */, - 3E55A2331F52463B00082000 /* TestUnit.swift in Sources */, - 5B13B3321C582D4C00651CE2 /* TestIndexSet.swift in Sources */, - 5B13B3511C582D4C00651CE2 /* TestByteCountFormatter.swift in Sources */, - BDFDF0A71DFF5B3E00C04CC5 /* TestPersonNameComponents.swift in Sources */, - 5B13B3501C582D4C00651CE2 /* TestUtils.swift in Sources */, - 7D8BD739225ED1480057CF37 /* TestMeasurement.swift in Sources */, - CD1C7F7D1E303B47008E331C /* TestNSError.swift in Sources */, - 294E3C1D1CC5E19300E4F44C /* TestNSAttributedString.swift in Sources */, - 1539391422A07007006DFF4F /* TestCachedURLResponse.swift in Sources */, - 5B13B3431C582D4C00651CE2 /* TestScanner.swift in Sources */, - 5B13B3401C582D4C00651CE2 /* TestNSRange.swift in Sources */, - 5B13B3371C582D4C00651CE2 /* TestNotificationCenter.swift in Sources */, - 5B13B3251C582D4700651CE2 /* main.swift in Sources */, - 5B1FD9E31D6D17B80080E83C /* TestURLSession.swift in Sources */, - 4704393226BDFF34000D213E /* TestAttributedStringPerformance.swift in Sources */, - 3EA9D6701EF0532D00B362D6 /* TestJSONEncoder.swift in Sources */, - D512D17C1CD883F00032E6A5 /* TestFileHandle.swift in Sources */, - D4FE895B1D703D1100DA7986 /* TestURLRequest.swift in Sources */, - 684C79011F62B611005BD73E /* TestNSNumberBridging.swift in Sources */, - DAA79BD920D42C07004AF044 /* TestURLProtectionSpace.swift in Sources */, - 5D0E1BDB237A1FE800C35C5A /* TestUnitVolume.swift in Sources */, - 616068F5225DE606004FCC54 /* TestURLSessionFTP.swift in Sources */, - 155B77AC22E63D2D00D901DE /* TestURLCredentialStorage.swift in Sources */, - B951B5EC1F4E2A2000D8B332 /* TestNSLock.swift in Sources */, - 5B13B33A1C582D4C00651CE2 /* TestNSNumber.swift in Sources */, - 4704393426BDFF34000D213E /* TestAttributedString.swift in Sources */, - 5B13B3521C582D4C00651CE2 /* TestNSValue.swift in Sources */, - 7D0DE86F211883F500540061 /* Utilities.swift in Sources */, - 5B13B3311C582D4C00651CE2 /* TestIndexPath.swift in Sources */, - 5B13B3271C582D4C00651CE2 /* TestNSArray.swift in Sources */, - 5B13B3461C582D4C00651CE2 /* TestProcess.swift in Sources */, - 555683BD1C1250E70041D4C6 /* TestUserDefaults.swift in Sources */, - DCA8120B1F046D13000D0C86 /* TestCodable.swift in Sources */, - 7900433B1CACD33E00ECCBF1 /* TestNSCompoundPredicate.swift in Sources */, - 1581706322B1A29100348861 /* TestURLCache.swift in Sources */, - B9D9733F23D19D3900AB249C /* TestDimension.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9F0DD33B1ECD734200F68030 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9F0DD3521ECD73D000F68030 /* main.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EA66F66B1BF56CCB00136161 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EA66F6761BF56CDE00136161 /* main.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F023077423F0BBF10023DBEC /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F023078223F0BC2E0023DBEC /* FixtureValues.swift in Sources */, - F023078023F0BC170023DBEC /* main.swift in Sources */, - F023077F23F0BC090023DBEC /* Utilities.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 1550111A22EA43E00088F082 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1550106E22EA266B0088F082 /* SwiftFoundationXML */; - targetProxy = 1550111922EA43E00088F082 /* PBXContainerItemProxy */; - }; - 1550112022EA473B0088F082 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1550106E22EA266B0088F082 /* SwiftFoundationXML */; - targetProxy = 1550111F22EA473B0088F082 /* PBXContainerItemProxy */; - }; - 159870C0228F741000ADE509 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 15B80384228F376000B30FF6 /* SwiftFoundationNetworking */; - targetProxy = 159870BF228F741000ADE509 /* PBXContainerItemProxy */; - }; - 15A619DE245A2895003C8C62 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 15500FA722EA24D10088F082 /* CFXMLInterface */; - targetProxy = 15A619DD245A2895003C8C62 /* PBXContainerItemProxy */; - }; - 15B80385228F376000B30FF6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5B7C8A6D1BEA7F8F00C5B690 /* CoreFoundation */; - targetProxy = 15B80386228F376000B30FF6 /* PBXContainerItemProxy */; - }; - 15B80446228F39B200B30FF6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5B5D885C1BBC938800234F36 /* SwiftFoundation */; - targetProxy = 15B80445228F39B200B30FF6 /* PBXContainerItemProxy */; - }; - 15F14D3A22EB9F80001598B5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5B5D885C1BBC938800234F36 /* SwiftFoundation */; - targetProxy = 15F14D3922EB9F80001598B5 /* PBXContainerItemProxy */; - }; - 15FF00D022934C39004AD205 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 15FF0006229348F2004AD205 /* CFURLSessionInterface */; - targetProxy = 15FF00CF22934C39004AD205 /* PBXContainerItemProxy */; - }; - 15FF00D222935004004AD205 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5B7C8A6D1BEA7F8F00C5B690 /* CoreFoundation */; - targetProxy = 15FF00D122935004004AD205 /* PBXContainerItemProxy */; - }; - AE2FC5951CFEFC70008F7981 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5B5D885C1BBC938800234F36 /* SwiftFoundation */; - targetProxy = AE2FC5941CFEFC70008F7981 /* PBXContainerItemProxy */; - }; - B90FD23020C2FF420087EF44 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 9F0DD33E1ECD734200F68030 /* xdgTestHelper */; - targetProxy = B90FD22F20C2FF420087EF44 /* PBXContainerItemProxy */; - }; - B90FD23220C2FF840087EF44 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5B5D885C1BBC938800234F36 /* SwiftFoundation */; - targetProxy = B90FD23120C2FF840087EF44 /* PBXContainerItemProxy */; - }; - B94B063B23FDE0AA00B244E8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5B5D885C1BBC938800234F36 /* SwiftFoundation */; - targetProxy = B94B063A23FDE0AA00B244E8 /* PBXContainerItemProxy */; - }; - B98F1740229AF5AF00F2B002 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = EA66F66E1BF56CCB00136161 /* plutil */; - targetProxy = B98F173F229AF5AF00F2B002 /* PBXContainerItemProxy */; - }; - B98F1742229AF5F900F2B002 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5B5D885C1BBC938800234F36 /* SwiftFoundation */; - targetProxy = B98F1741229AF5F900F2B002 /* PBXContainerItemProxy */; - }; - EA993CE31BEACD8E000969A2 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5B7C8A6D1BEA7F8F00C5B690 /* CoreFoundation */; - targetProxy = EA993CE21BEACD8E000969A2 /* PBXContainerItemProxy */; - }; - F023078423F0BDF40023DBEC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5B7C8A6D1BEA7F8F00C5B690 /* CoreFoundation */; - targetProxy = F023078323F0BDF40023DBEC /* PBXContainerItemProxy */; - }; - F023078623F0BE070023DBEC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5B7C8A6D1BEA7F8F00C5B690 /* CoreFoundation */; - targetProxy = F023078523F0BE070023DBEC /* PBXContainerItemProxy */; - }; - F023078823F0BE240023DBEC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 15B80384228F376000B30FF6 /* SwiftFoundationNetworking */; - targetProxy = F023078723F0BE240023DBEC /* PBXContainerItemProxy */; - }; - F023078A23F0BE330023DBEC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = F023077723F0BBF10023DBEC /* GenerateTestFixtures */; - targetProxy = F023078923F0BE330023DBEC /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 1550106822EA24D10088F082 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = CoreFoundation/Base.subproj/CoreFoundation_Prefix.h; - HEADER_SEARCH_PATHS = /usr/include/libxml2; - OTHER_CFLAGS = ( - "-DCF_BUILDING_CF", - "-DDEPLOYMENT_RUNTIME_SWIFT", - "-DDEPLOYMENT_ENABLE_LIBDISPATCH", - "-I$(SRCROOT)/bootstrap/common/usr/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/include", - "-I$(SRCROOT)/bootstrap/common/usr/local/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/local/include", - "-g3", - "-fconstant-cfstrings", - "-fexceptions", - "-Wno-shorten-64-to-32", - "-Wno-deprecated-declarations", - "-Wno-unreachable-code", - "-Wno-conditional-uninitialized", - "-Wno-unused-variable", - "-Wno-int-conversion", - "-Wno-unused-function", - "-DHAVE_STRUCT_TIMESPEC", - "-DCF_CHARACTERSET_UNICODE_DATA_L=\\\\\"CoreFoundation/CharacterSets/CFUnicodeData-L.mapping\\\\\"", - "-DCF_CHARACTERSET_UNICODE_DATA_B=\\\\\"CoreFoundation/CharacterSets/CFUnicodeData-B.mapping\\\\\"", - "-DCF_CHARACTERSET_UNICHAR_DB=\\\\\"CoreFoundation/CharacterSets/CFUniCharPropertyDatabase.data\\\\\"", - "-DCF_CHARACTERSET_BITMAP=\\\\\"CoreFoundation/CharacterSets/CFCharacterSetBitmaps.bitmap\\\\\"", - "-Wno-format-security", - ); - PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include/CFXMLInterface; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/CFXMLInterface; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 1550106922EA24D10088F082 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = CoreFoundation/Base.subproj/CoreFoundation_Prefix.h; - HEADER_SEARCH_PATHS = /usr/include/libxml2; - OTHER_CFLAGS = ( - "-DCF_BUILDING_CF", - "-DDEPLOYMENT_RUNTIME_SWIFT", - "-DDEPLOYMENT_ENABLE_LIBDISPATCH", - "-I$(SRCROOT)/bootstrap/common/usr/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/include", - "-I$(SRCROOT)/bootstrap/common/usr/local/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/local/include", - "-g3", - "-fconstant-cfstrings", - "-fexceptions", - "-Wno-shorten-64-to-32", - "-Wno-deprecated-declarations", - "-Wno-unreachable-code", - "-Wno-conditional-uninitialized", - "-Wno-unused-variable", - "-Wno-int-conversion", - "-Wno-unused-function", - "-DHAVE_STRUCT_TIMESPEC", - "-DCF_CHARACTERSET_UNICODE_DATA_L=\\\\\"CoreFoundation/CharacterSets/CFUnicodeData-L.mapping\\\\\"", - "-DCF_CHARACTERSET_UNICODE_DATA_B=\\\\\"CoreFoundation/CharacterSets/CFUnicodeData-B.mapping\\\\\"", - "-DCF_CHARACTERSET_UNICHAR_DB=\\\\\"CoreFoundation/CharacterSets/CFUniCharPropertyDatabase.data\\\\\"", - "-DCF_CHARACTERSET_BITMAP=\\\\\"CoreFoundation/CharacterSets/CFCharacterSetBitmaps.bitmap\\\\\"", - "-Wno-format-security", - ); - PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include/CFXMLInterface; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/CFXMLInterface; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 1550110722EA266B0088F082 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_MODULES_AUTOLINK = NO; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 150; - DYLIB_CURRENT_VERSION = 1303; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = CoreFoundation/Base.subproj/CoreFoundation_Prefix.h; - HEADER_SEARCH_PATHS = ( - "$(CONFIGURATION_BUILD_DIR)/usr/local/include", - /usr/include/libxml2, - ); - INFOPLIST_FILE = Sources/FoundationXML/Resources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - OTHER_CFLAGS = ( - "-DCF_BUILDING_CF", - "-DDEPLOYMENT_RUNTIME_SWIFT", - "-DDEPLOYMENT_ENABLE_LIBDISPATCH", - "-DHAVE_STRUCT_TIMESPEC", - "-I$(SRCROOT)/bootstrap/common/usr/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/include", - "-I$(SRCROOT)/bootstrap/common/usr/local/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/local/include", - "-g3", - "-fconstant-cfstrings", - "-fexceptions", - "-Wno-shorten-64-to-32", - "-Wno-deprecated-declarations", - "-Wno-unreachable-code", - "-Wno-conditional-uninitialized", - "-Wno-unused-variable", - "-Wno-int-conversion", - "-Wno-unused-function", - ); - OTHER_SWIFT_FLAGS = "-DDEPLOYMENT_ENABLE_LIBDISPATCH -DDEPLOYMENT_RUNTIME_SWIFT"; - PRODUCT_BUNDLE_IDENTIFIER = org.swift.Foundation.XML; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OBJC_INTERFACE_HEADER_NAME = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 1550110822EA266B0088F082 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_MODULES_AUTOLINK = NO; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 150; - DYLIB_CURRENT_VERSION = 1303; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = CoreFoundation/Base.subproj/CoreFoundation_Prefix.h; - HEADER_SEARCH_PATHS = ( - "$(CONFIGURATION_BUILD_DIR)/usr/local/include", - /usr/include/libxml2, - ); - INFOPLIST_FILE = Sources/FoundationXML/Resources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - OTHER_CFLAGS = ( - "-DCF_BUILDING_CF", - "-DDEPLOYMENT_RUNTIME_SWIFT", - "-DDEPLOYMENT_ENABLE_LIBDISPATCH", - "-DHAVE_STRUCT_TIMESPEC", - "-I$(SRCROOT)/bootstrap/common/usr/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/include", - "-I$(SRCROOT)/bootstrap/common/usr/local/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/local/include", - "-g3", - "-fconstant-cfstrings", - "-fexceptions", - "-Wno-shorten-64-to-32", - "-Wno-deprecated-declarations", - "-Wno-unreachable-code", - "-Wno-conditional-uninitialized", - "-Wno-unused-variable", - "-Wno-int-conversion", - "-Wno-unused-function", - ); - OTHER_SWIFT_FLAGS = "-DDEPLOYMENT_ENABLE_LIBDISPATCH -DDEPLOYMENT_RUNTIME_SWIFT"; - PRODUCT_BUNDLE_IDENTIFIER = org.swift.Foundation.XML; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OBJC_INTERFACE_HEADER_NAME = ""; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 15B80438228F376000B30FF6 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_MODULES_AUTOLINK = NO; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 150; - DYLIB_CURRENT_VERSION = 1303; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = CoreFoundation/Base.subproj/CoreFoundation_Prefix.h; - HEADER_SEARCH_PATHS = ( - "$(CONFIGURATION_BUILD_DIR)/usr/local/include", - /usr/include/libxml2, - ); - INFOPLIST_FILE = Sources/FoundationNetworking/Resources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - OTHER_CFLAGS = ( - "-isysroot", - "$(BUILT_PRODUCTS_DIR)", - "-DCF_BUILDING_CF", - "-DDEPLOYMENT_RUNTIME_SWIFT", - "-DDEPLOYMENT_ENABLE_LIBDISPATCH", - "-DHAVE_STRUCT_TIMESPEC", - "-I$(SRCROOT)/bootstrap/common/usr/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/include", - "-I$(SRCROOT)/bootstrap/common/usr/local/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/local/include", - "-g3", - "-fconstant-cfstrings", - "-fexceptions", - "-Wno-shorten-64-to-32", - "-Wno-deprecated-declarations", - "-Wno-unreachable-code", - "-Wno-conditional-uninitialized", - "-Wno-unused-variable", - "-Wno-int-conversion", - "-Wno-unused-function", - ); - OTHER_LDFLAGS = "-twolevel_namespace"; - OTHER_SWIFT_FLAGS = "-DDEPLOYMENT_ENABLE_LIBDISPATCH -DDEPLOYMENT_RUNTIME_SWIFT"; - PRODUCT_BUNDLE_IDENTIFIER = org.swift.Foundation.Networking; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "NS_BUILDING_FOUNDATION_NETWORKING $(inherited)"; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OBJC_INTERFACE_HEADER_NAME = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 15B80439228F376000B30FF6 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_MODULES_AUTOLINK = NO; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 150; - DYLIB_CURRENT_VERSION = 1303; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = CoreFoundation/Base.subproj/CoreFoundation_Prefix.h; - HEADER_SEARCH_PATHS = ( - "$(CONFIGURATION_BUILD_DIR)/usr/local/include", - /usr/include/libxml2, - ); - INFOPLIST_FILE = Sources/FoundationNetworking/Resources/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - OTHER_CFLAGS = ( - "-isysroot", - "$(BUILT_PRODUCTS_DIR)", - "-DCF_BUILDING_CF", - "-DDEPLOYMENT_RUNTIME_SWIFT", - "-DDEPLOYMENT_ENABLE_LIBDISPATCH", - "-DHAVE_STRUCT_TIMESPEC", - "-I$(SRCROOT)/bootstrap/common/usr/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/include", - "-I$(SRCROOT)/bootstrap/common/usr/local/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/local/include", - "-g3", - "-fconstant-cfstrings", - "-fexceptions", - "-Wno-shorten-64-to-32", - "-Wno-deprecated-declarations", - "-Wno-unreachable-code", - "-Wno-conditional-uninitialized", - "-Wno-unused-variable", - "-Wno-int-conversion", - "-Wno-unused-function", - ); - OTHER_LDFLAGS = "-twolevel_namespace"; - OTHER_SWIFT_FLAGS = "-DDEPLOYMENT_ENABLE_LIBDISPATCH -DDEPLOYMENT_RUNTIME_SWIFT"; - PRODUCT_BUNDLE_IDENTIFIER = org.swift.Foundation.Networking; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "NS_BUILDING_FOUNDATION_NETWORKING $(inherited)"; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OBJC_INTERFACE_HEADER_NAME = ""; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 15FF00C8229348F2004AD205 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = CoreFoundation/Base.subproj/CoreFoundation_Prefix.h; - HEADER_SEARCH_PATHS = /usr/include/libxml2; - OTHER_CFLAGS = ( - "-DCF_BUILDING_CF", - "-DDEPLOYMENT_RUNTIME_SWIFT", - "-DDEPLOYMENT_ENABLE_LIBDISPATCH", - "-I$(SRCROOT)/bootstrap/common/usr/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/include", - "-I$(SRCROOT)/bootstrap/common/usr/local/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/local/include", - "-g3", - "-fconstant-cfstrings", - "-fexceptions", - "-Wno-shorten-64-to-32", - "-Wno-deprecated-declarations", - "-Wno-unreachable-code", - "-Wno-conditional-uninitialized", - "-Wno-unused-variable", - "-Wno-int-conversion", - "-Wno-unused-function", - "-DHAVE_STRUCT_TIMESPEC", - "-DCF_CHARACTERSET_UNICODE_DATA_L=\\\\\"CoreFoundation/CharacterSets/CFUnicodeData-L.mapping\\\\\"", - "-DCF_CHARACTERSET_UNICODE_DATA_B=\\\\\"CoreFoundation/CharacterSets/CFUnicodeData-B.mapping\\\\\"", - "-DCF_CHARACTERSET_UNICHAR_DB=\\\\\"CoreFoundation/CharacterSets/CFUniCharPropertyDatabase.data\\\\\"", - "-DCF_CHARACTERSET_BITMAP=\\\\\"CoreFoundation/CharacterSets/CFCharacterSetBitmaps.bitmap\\\\\"", - "-Wno-format-security", - ); - PRIVATE_HEADERS_FOLDER_PATH = "/usr/local/include/$(PRODUCT_NAME)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "/usr/local/include/$(PRODUCT_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 15FF00C9229348F2004AD205 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = CoreFoundation/Base.subproj/CoreFoundation_Prefix.h; - HEADER_SEARCH_PATHS = /usr/include/libxml2; - OTHER_CFLAGS = ( - "-DCF_BUILDING_CF", - "-DDEPLOYMENT_RUNTIME_SWIFT", - "-DDEPLOYMENT_ENABLE_LIBDISPATCH", - "-I$(SRCROOT)/bootstrap/common/usr/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/include", - "-I$(SRCROOT)/bootstrap/common/usr/local/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/local/include", - "-g3", - "-fconstant-cfstrings", - "-fexceptions", - "-Wno-shorten-64-to-32", - "-Wno-deprecated-declarations", - "-Wno-unreachable-code", - "-Wno-conditional-uninitialized", - "-Wno-unused-variable", - "-Wno-int-conversion", - "-Wno-unused-function", - "-DHAVE_STRUCT_TIMESPEC", - "-DCF_CHARACTERSET_UNICODE_DATA_L=\\\\\"CoreFoundation/CharacterSets/CFUnicodeData-L.mapping\\\\\"", - "-DCF_CHARACTERSET_UNICODE_DATA_B=\\\\\"CoreFoundation/CharacterSets/CFUnicodeData-B.mapping\\\\\"", - "-DCF_CHARACTERSET_UNICHAR_DB=\\\\\"CoreFoundation/CharacterSets/CFUniCharPropertyDatabase.data\\\\\"", - "-DCF_CHARACTERSET_BITMAP=\\\\\"CoreFoundation/CharacterSets/CFCharacterSetBitmaps.bitmap\\\\\"", - "-Wno-format-security", - ); - PRIVATE_HEADERS_FOLDER_PATH = "/usr/local/include/$(PRODUCT_NAME)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = "/usr/local/include/$(PRODUCT_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 5B5D88631BBC938800234F36 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_LINK_OBJC_RUNTIME = NO; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = ""; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; - MACOSX_DEPLOYMENT_TARGET = 10.12; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "FOUNDATION_XCTEST NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT DEBUG"; - SWIFT_FORCE_DYNAMIC_LINK_STDLIB = YES; - SWIFT_FORCE_STATIC_LINK_STDLIB = NO; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 5B5D88641BBC938800234F36 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_LINK_OBJC_RUNTIME = NO; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = ""; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; - MACOSX_DEPLOYMENT_TARGET = 10.12; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_FORCE_DYNAMIC_LINK_STDLIB = YES; - SWIFT_FORCE_STATIC_LINK_STDLIB = NO; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 5B5D88661BBC938800234F36 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_MODULES_AUTOLINK = NO; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 150; - DYLIB_CURRENT_VERSION = 1303; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = CoreFoundation/Base.subproj/CoreFoundation_Prefix.h; - HEADER_SEARCH_PATHS = ( - "$(CONFIGURATION_BUILD_DIR)/usr/local/include", - /usr/include/libxml2, - ); - INFOPLIST_FILE = Sources/Foundation/Resources/Info.plist; - INIT_ROUTINE = "___CFInitialize"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - OTHER_CFLAGS = ( - "-DCF_BUILDING_CF", - "-DDEPLOYMENT_RUNTIME_SWIFT", - "-DDEPLOYMENT_ENABLE_LIBDISPATCH", - "-DHAVE_STRUCT_TIMESPEC", - "-I$(SRCROOT)/bootstrap/common/usr/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/include", - "-I$(SRCROOT)/bootstrap/common/usr/local/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/local/include", - "-g3", - "-fconstant-cfstrings", - "-fexceptions", - "-Wno-shorten-64-to-32", - "-Wno-deprecated-declarations", - "-Wno-unreachable-code", - "-Wno-conditional-uninitialized", - "-Wno-unused-variable", - "-Wno-int-conversion", - "-Wno-unused-function", - ); - OTHER_LDFLAGS = ( - "-twolevel_namespace", - "-Wl,-alias_list,CoreFoundation/Base.subproj/SymbolAliases", - "-sectcreate", - __UNICODE, - __csbitmaps, - CoreFoundation/CharacterSets/CFCharacterSetBitmaps.bitmap, - "-sectcreate", - __UNICODE, - __properties, - CoreFoundation/CharacterSets/CFUniCharPropertyDatabase.data, - "-sectcreate", - __UNICODE, - __data, - "CoreFoundation/CharacterSets/CFUnicodeData-L.mapping", - "-segprot", - __UNICODE, - r, - r, - ); - OTHER_SWIFT_FLAGS = "-DDEPLOYMENT_ENABLE_LIBDISPATCH -DDEPLOYMENT_RUNTIME_SWIFT"; - PRODUCT_BUNDLE_IDENTIFIER = org.swift.Foundation; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OBJC_INTERFACE_HEADER_NAME = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 5B5D88671BBC938800234F36 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_MODULES_AUTOLINK = NO; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 150; - DYLIB_CURRENT_VERSION = 1303; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = CoreFoundation/Base.subproj/CoreFoundation_Prefix.h; - HEADER_SEARCH_PATHS = ( - "$(CONFIGURATION_BUILD_DIR)/usr/local/include", - /usr/include/libxml2, - ); - INFOPLIST_FILE = Sources/Foundation/Resources/Info.plist; - INIT_ROUTINE = "___CFInitialize"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - OTHER_CFLAGS = ( - "-DCF_BUILDING_CF", - "-DDEPLOYMENT_RUNTIME_SWIFT", - "-DDEPLOYMENT_ENABLE_LIBDISPATCH", - "-DHAVE_STRUCT_TIMESPEC", - "-I$(SRCROOT)/bootstrap/common/usr/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/include", - "-I$(SRCROOT)/bootstrap/common/usr/local/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/local/include", - "-g3", - "-fconstant-cfstrings", - "-fexceptions", - "-Wno-shorten-64-to-32", - "-Wno-deprecated-declarations", - "-Wno-unreachable-code", - "-Wno-conditional-uninitialized", - "-Wno-unused-variable", - "-Wno-int-conversion", - "-Wno-unused-function", - ); - OTHER_LDFLAGS = ( - "-twolevel_namespace", - "-Wl,-alias_list,CoreFoundation/Base.subproj/SymbolAliases", - "-Wl,-all_load", - "-sectcreate", - __UNICODE, - __csbitmaps, - CoreFoundation/CharacterSets/CFCharacterSetBitmaps.bitmap, - "-sectcreate", - __UNICODE, - __properties, - CoreFoundation/CharacterSets/CFUniCharPropertyDatabase.data, - "-sectcreate", - __UNICODE, - __data, - "CoreFoundation/CharacterSets/CFUnicodeData-L.mapping", - "-segprot", - __UNICODE, - r, - r, - ); - OTHER_SWIFT_FLAGS = "-DDEPLOYMENT_ENABLE_LIBDISPATCH -DDEPLOYMENT_RUNTIME_SWIFT"; - PRODUCT_BUNDLE_IDENTIFIER = org.swift.Foundation; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OBJC_INTERFACE_HEADER_NAME = ""; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 5B7C8A6F1BEA7F8F00C5B690 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_FLOAT_CONVERSION = YES_ERROR; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = CoreFoundation/Base.subproj/CoreFoundation_Prefix.h; - HEADER_SEARCH_PATHS = /usr/include/libxml2; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/../Frameworks", - ); - OTHER_CFLAGS = ( - "-DCF_BUILDING_CF", - "-DDEPLOYMENT_RUNTIME_SWIFT", - "-DDEPLOYMENT_ENABLE_LIBDISPATCH", - "-I$(SRCROOT)/bootstrap/common/usr/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/include", - "-I$(SRCROOT)/bootstrap/common/usr/local/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/local/include", - "-g3", - "-fconstant-cfstrings", - "-fexceptions", - "-Wno-shorten-64-to-32", - "-Wno-deprecated-declarations", - "-Wno-unreachable-code", - "-Wno-conditional-uninitialized", - "-Wno-unused-variable", - "-Wno-int-conversion", - "-Wno-unused-function", - "-DHAVE_STRUCT_TIMESPEC", - "-DCF_CHARACTERSET_UNICODE_DATA_L=\\\\\"CoreFoundation/CharacterSets/CFUnicodeData-L.mapping\\\\\"", - "-DCF_CHARACTERSET_UNICODE_DATA_B=\\\\\"CoreFoundation/CharacterSets/CFUnicodeData-B.mapping\\\\\"", - "-DCF_CHARACTERSET_UNICHAR_DB=\\\\\"CoreFoundation/CharacterSets/CFUniCharPropertyDatabase.data\\\\\"", - "-DCF_CHARACTERSET_BITMAP=\\\\\"CoreFoundation/CharacterSets/CFCharacterSetBitmaps.bitmap\\\\\"", - "-Wno-format-security", - ); - PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include/CoreFoundation; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/CoreFoundation; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 5B7C8A701BEA7F8F00C5B690 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_FLOAT_CONVERSION = YES_ERROR; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = CoreFoundation/Base.subproj/CoreFoundation_Prefix.h; - HEADER_SEARCH_PATHS = /usr/include/libxml2; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/../Frameworks", - ); - OTHER_CFLAGS = ( - "-DCF_BUILDING_CF", - "-DDEPLOYMENT_RUNTIME_SWIFT", - "-DDEPLOYMENT_ENABLE_LIBDISPATCH", - "-I$(SRCROOT)/bootstrap/common/usr/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/include", - "-I$(SRCROOT)/bootstrap/common/usr/local/include", - "-I$(SRCROOT)/bootstrap/x86_64-apple-darwin/usr/local/include", - "-g3", - "-fconstant-cfstrings", - "-fexceptions", - "-Wno-shorten-64-to-32", - "-Wno-deprecated-declarations", - "-Wno-unreachable-code", - "-Wno-conditional-uninitialized", - "-Wno-unused-variable", - "-Wno-int-conversion", - "-Wno-unused-function", - "-DHAVE_STRUCT_TIMESPEC", - "-DCF_CHARACTERSET_UNICODE_DATA_L=\\\\\"CoreFoundation/CharacterSets/CFUnicodeData-L.mapping\\\\\"", - "-DCF_CHARACTERSET_UNICODE_DATA_B=\\\\\"CoreFoundation/CharacterSets/CFUnicodeData-B.mapping\\\\\"", - "-DCF_CHARACTERSET_UNICHAR_DB=\\\\\"CoreFoundation/CharacterSets/CFUniCharPropertyDatabase.data\\\\\"", - "-DCF_CHARACTERSET_BITMAP=\\\\\"CoreFoundation/CharacterSets/CFCharacterSetBitmaps.bitmap\\\\\"", - "-Wno-format-security", - ); - PRIVATE_HEADERS_FOLDER_PATH = /usr/local/include/CoreFoundation; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/CoreFoundation; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 5BDC40601BD6D83B00ED97BB /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ""; - HEADER_SEARCH_PATHS = ( - "$(CONFIGURATION_BUILD_DIR)/usr/local/include", - /usr/include/libxml2, - ); - INFOPLIST_FILE = Tests/Foundation/Resources/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/../Frameworks", - ); - LIBRARY_SEARCH_PATHS = "$(inherited)"; - MACH_O_TYPE = mh_execute; - OTHER_SWIFT_FLAGS = "-DDEPLOYMENT_ENABLE_LIBDISPATCH -DDEPLOYMENT_RUNTIME_SWIFT"; - PRODUCT_BUNDLE_IDENTIFIER = org.swift.TestFoundation; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - 5BDC40611BD6D83B00ED97BB /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ""; - HEADER_SEARCH_PATHS = ( - "$(CONFIGURATION_BUILD_DIR)/usr/local/include", - /usr/include/libxml2, - ); - INFOPLIST_FILE = Tests/Foundation/Resources/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/../Frameworks", - ); - LIBRARY_SEARCH_PATHS = "$(inherited)"; - MACH_O_TYPE = mh_execute; - OTHER_SWIFT_FLAGS = "-DDEPLOYMENT_ENABLE_LIBDISPATCH -DDEPLOYMENT_RUNTIME_SWIFT"; - PRODUCT_BUNDLE_IDENTIFIER = org.swift.TestFoundation; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_VERSION = 5.0; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; - 9F0DD34C1ECD734200F68030 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CODE_SIGN_IDENTITY = ""; - COMBINE_HIDPI_IMAGES = YES; - HEADER_SEARCH_PATHS = ( - "$(CONFIGURATION_BUILD_DIR)/usr/local/include", - /usr/include/libxml2, - ); - INFOPLIST_FILE = Tests/Tools/XDGTestHelper/Resources/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../../..", - "@loader_path/../../..", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.12; - PRODUCT_BUNDLE_IDENTIFIER = org.swift.xdgTestHelper; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 9F0DD34D1ECD734200F68030 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CODE_SIGN_IDENTITY = ""; - COMBINE_HIDPI_IMAGES = YES; - HEADER_SEARCH_PATHS = ( - "$(CONFIGURATION_BUILD_DIR)/usr/local/include", - /usr/include/libxml2, - ); - INFOPLIST_FILE = Tests/Tools/XDGTestHelper/Resources/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../../..", - "@loader_path/../../..", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.12; - PRODUCT_BUNDLE_IDENTIFIER = org.swift.xdgTestHelper; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - EA66F6731BF56CCB00136161 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - HEADER_SEARCH_PATHS = ""; - LD_RUNPATH_SEARCH_PATHS = ( - "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx", - "@executable_path", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - EA66F6741BF56CCB00136161 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - HEADER_SEARCH_PATHS = ""; - LD_RUNPATH_SEARCH_PATHS = ( - "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx", - "@executable_path", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - F023077D23F0BBF10023DBEC /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - GCC_C_LANGUAGE_STANDARD = gnu11; - HEADER_SEARCH_PATHS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.14; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG NS_GENERATE_FIXTURES_FROM_SWIFT_CORELIBS_FOUNDATION_ON_DARWIN"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - F023077E23F0BBF10023DBEC /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_STYLE = Automatic; - GCC_C_LANGUAGE_STANDARD = gnu11; - HEADER_SEARCH_PATHS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.14; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = NS_GENERATE_FIXTURES_FROM_SWIFT_CORELIBS_FOUNDATION_ON_DARWIN; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1550106722EA24D10088F082 /* Build configuration list for PBXNativeTarget "CFXMLInterface" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1550106822EA24D10088F082 /* Debug */, - 1550106922EA24D10088F082 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1550110622EA266B0088F082 /* Build configuration list for PBXNativeTarget "SwiftFoundationXML" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1550110722EA266B0088F082 /* Debug */, - 1550110822EA266B0088F082 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 15B80437228F376000B30FF6 /* Build configuration list for PBXNativeTarget "SwiftFoundationNetworking" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 15B80438228F376000B30FF6 /* Debug */, - 15B80439228F376000B30FF6 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 15FF00C7229348F2004AD205 /* Build configuration list for PBXNativeTarget "CFURLSessionInterface" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 15FF00C8229348F2004AD205 /* Debug */, - 15FF00C9229348F2004AD205 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5B5D88571BBC938800234F36 /* Build configuration list for PBXProject "Foundation" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5B5D88631BBC938800234F36 /* Debug */, - 5B5D88641BBC938800234F36 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5B5D88651BBC938800234F36 /* Build configuration list for PBXNativeTarget "SwiftFoundation" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5B5D88661BBC938800234F36 /* Debug */, - 5B5D88671BBC938800234F36 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5B7C8A711BEA7F8F00C5B690 /* Build configuration list for PBXNativeTarget "CoreFoundation" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5B7C8A6F1BEA7F8F00C5B690 /* Debug */, - 5B7C8A701BEA7F8F00C5B690 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5BDC405F1BD6D83B00ED97BB /* Build configuration list for PBXNativeTarget "TestFoundation" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5BDC40601BD6D83B00ED97BB /* Debug */, - 5BDC40611BD6D83B00ED97BB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 9F0DD34B1ECD734200F68030 /* Build configuration list for PBXNativeTarget "xdgTestHelper" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9F0DD34C1ECD734200F68030 /* Debug */, - 9F0DD34D1ECD734200F68030 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - EA66F6751BF56CCB00136161 /* Build configuration list for PBXNativeTarget "plutil" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - EA66F6731BF56CCB00136161 /* Debug */, - EA66F6741BF56CCB00136161 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - F023077C23F0BBF10023DBEC /* Build configuration list for PBXNativeTarget "GenerateTestFixtures" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F023077D23F0BBF10023DBEC /* Debug */, - F023077E23F0BBF10023DBEC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 5B5D88541BBC938800234F36 /* Project object */; -} diff --git a/Foundation.xcodeproj/xcshareddata/xcschemes/CFURLSessionInterface.xcscheme b/Foundation.xcodeproj/xcshareddata/xcschemes/CFURLSessionInterface.xcscheme deleted file mode 100644 index d497397069..0000000000 --- a/Foundation.xcodeproj/xcshareddata/xcschemes/CFURLSessionInterface.xcscheme +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Foundation.xcodeproj/xcshareddata/xcschemes/CFXMLInterface.xcscheme b/Foundation.xcodeproj/xcshareddata/xcschemes/CFXMLInterface.xcscheme deleted file mode 100644 index ffe4883056..0000000000 --- a/Foundation.xcodeproj/xcshareddata/xcschemes/CFXMLInterface.xcscheme +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Foundation.xcodeproj/xcshareddata/xcschemes/CoreFoundation.xcscheme b/Foundation.xcodeproj/xcshareddata/xcschemes/CoreFoundation.xcscheme deleted file mode 100644 index 344dae5083..0000000000 --- a/Foundation.xcodeproj/xcshareddata/xcschemes/CoreFoundation.xcscheme +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Foundation.xcodeproj/xcshareddata/xcschemes/GenerateTestFixtures.xcscheme b/Foundation.xcodeproj/xcshareddata/xcschemes/GenerateTestFixtures.xcscheme deleted file mode 100644 index 4349bf10de..0000000000 --- a/Foundation.xcodeproj/xcshareddata/xcschemes/GenerateTestFixtures.xcscheme +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Foundation.xcodeproj/xcshareddata/xcschemes/SwiftFoundation.xcscheme b/Foundation.xcodeproj/xcshareddata/xcschemes/SwiftFoundation.xcscheme deleted file mode 100644 index 7f944f123e..0000000000 --- a/Foundation.xcodeproj/xcshareddata/xcschemes/SwiftFoundation.xcscheme +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Foundation.xcodeproj/xcshareddata/xcschemes/SwiftFoundationNetworking.xcscheme b/Foundation.xcodeproj/xcshareddata/xcschemes/SwiftFoundationNetworking.xcscheme deleted file mode 100644 index f33976e6ea..0000000000 --- a/Foundation.xcodeproj/xcshareddata/xcschemes/SwiftFoundationNetworking.xcscheme +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Foundation.xcodeproj/xcshareddata/xcschemes/SwiftFoundationXML.xcscheme b/Foundation.xcodeproj/xcshareddata/xcschemes/SwiftFoundationXML.xcscheme deleted file mode 100644 index aba4dba0c0..0000000000 --- a/Foundation.xcodeproj/xcshareddata/xcschemes/SwiftFoundationXML.xcscheme +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Foundation.xcodeproj/xcshareddata/xcschemes/TestFoundation.xcscheme b/Foundation.xcodeproj/xcshareddata/xcschemes/TestFoundation.xcscheme deleted file mode 100644 index eab0f24e3f..0000000000 --- a/Foundation.xcodeproj/xcshareddata/xcschemes/TestFoundation.xcscheme +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Foundation.xcodeproj/xcshareddata/xcschemes/plutil.xcscheme b/Foundation.xcodeproj/xcshareddata/xcschemes/plutil.xcscheme deleted file mode 100644 index 8d2bffa843..0000000000 --- a/Foundation.xcodeproj/xcshareddata/xcschemes/plutil.xcscheme +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Foundation.xcodeproj/xcshareddata/xcschemes/xdgTestHelper.xcscheme b/Foundation.xcodeproj/xcshareddata/xcschemes/xdgTestHelper.xcscheme deleted file mode 100644 index 36246db569..0000000000 --- a/Foundation.xcodeproj/xcshareddata/xcschemes/xdgTestHelper.xcscheme +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Foundation.xcworkspace/contents.xcworkspacedata b/Foundation.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 624e8cba09..0000000000 --- a/Foundation.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/Foundation.xcworkspace/xcshareddata/Foundation.xcscmblueprint b/Foundation.xcworkspace/xcshareddata/Foundation.xcscmblueprint deleted file mode 100644 index ad8ed65fae..0000000000 --- a/Foundation.xcworkspace/xcshareddata/Foundation.xcscmblueprint +++ /dev/null @@ -1,30 +0,0 @@ -{ - "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "972770BA195CEE1F69E2331A99D177E57A3BAB6E", - "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { - - }, - "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { - "B149FC0F8DC8D91345007BE1CCBE6BA80D904376" : 0, - "972770BA195CEE1F69E2331A99D177E57A3BAB6E" : 0 - }, - "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "FACB591C-AC03-4130-9483-C58CC76060A4", - "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { - "B149FC0F8DC8D91345007BE1CCBE6BA80D904376" : "swift-corelibs-xctest\/", - "972770BA195CEE1F69E2331A99D177E57A3BAB6E" : "swift-corelibs-foundation\/" - }, - "DVTSourceControlWorkspaceBlueprintNameKey" : "Foundation", - "DVTSourceControlWorkspaceBlueprintVersion" : 204, - "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "Foundation.xcworkspace", - "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ - { - "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "github.com:apple\/swift-corelibs-foundation.git", - "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", - "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "972770BA195CEE1F69E2331A99D177E57A3BAB6E" - }, - { - "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "github.com:apple\/swift-corelibs-xctest.git", - "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", - "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "B149FC0F8DC8D91345007BE1CCBE6BA80D904376" - } - ] -} \ No newline at end of file diff --git a/Foundation.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Foundation.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d..0000000000 --- a/Foundation.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/Foundation.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Foundation.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index 08de0be8d3..0000000000 --- a/Foundation.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded - - - diff --git a/bin/test b/bin/test deleted file mode 100755 index 6c6300eef5..0000000000 --- a/bin/test +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env sh -git pr $1 -ninja reconfigure -ninja test -LD_LIBRARY_PATH=../build/Ninja-ReleaseAssert/foundation-linux-x86_64/Foundation/:..//build/Ninja-ReleaseAssert/xctest-linux-x86_64 ../build/Ninja-ReleaseAssert/foundation-linux-x86_64/TestFoundation/TestFoundation \ No newline at end of file diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/sys/random.h b/bootstrap/x86_64-apple-darwin/usr/local/include/sys/random.h deleted file mode 100644 index 9b77c2585e..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/sys/random.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 1999, 2000-2005 Apple Computer, Inc. All rights reserved. - * - * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ - * - * This file contains Original Code and/or Modifications of Original Code - * as defined in and that are subject to the Apple Public Source License - * Version 2.0 (the 'License'). You may not use this file except in - * compliance with the License. The rights granted to you under the License - * may not be used to create, or enable the creation or redistribution of, - * unlawful or unlicensed copies of an Apple operating system, or to - * circumvent, violate, or enable the circumvention or violation of, any - * terms of an Apple operating system software license agreement. - * - * Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this file. - * - * The Original Code and all software distributed under the License are - * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER - * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. - * Please see the License for the specific language governing rights and - * limitations under the License. - * - * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ - */ - -#ifndef __SYS_RANDOM_H__ -#define __SYS_RANDOM_H__ - -#include -#include - -#ifdef __APPLE_API_UNSTABLE -__BEGIN_DECLS -void read_random(void* buffer, u_int numBytes); -void read_frandom(void* buffer, u_int numBytes); -int write_random(void* buffer, u_int numBytes); -__END_DECLS -#endif /* __APPLE_API_UNSTABLE */ - -#endif /* __SYS_RANDOM_H__ */ - diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/alphaindex.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/alphaindex.h deleted file mode 100644 index 5f49b309f7..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/alphaindex.h +++ /dev/null @@ -1,762 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2011-2014 International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -*/ - -#ifndef INDEXCHARS_H -#define INDEXCHARS_H - -#include "unicode/utypes.h" -#include "unicode/uobject.h" -#include "unicode/locid.h" -#include "unicode/unistr.h" - -#if !UCONFIG_NO_COLLATION - -/** - * \file - * \brief C++ API: Index Characters - */ - -U_CDECL_BEGIN - -/** - * Constants for Alphabetic Index Label Types. - * The form of these enum constants anticipates having a plain C API - * for Alphabetic Indexes that will also use them. - * @stable ICU 4.8 - */ -typedef enum UAlphabeticIndexLabelType { - /** - * Normal Label, typically the starting letter of the names - * in the bucket with this label. - * @stable ICU 4.8 - */ - U_ALPHAINDEX_NORMAL = 0, - - /** - * Undeflow Label. The bucket with this label contains names - * in scripts that sort before any of the bucket labels in this index. - * @stable ICU 4.8 - */ - U_ALPHAINDEX_UNDERFLOW = 1, - - /** - * Inflow Label. The bucket with this label contains names - * in scripts that sort between two of the bucket labels in this index. - * Inflow labels are created when an index contains normal labels for - * multiple scripts, and skips other scripts that sort between some of the - * included scripts. - * @stable ICU 4.8 - */ - U_ALPHAINDEX_INFLOW = 2, - - /** - * Overflow Label. Te bucket with this label contains names in scripts - * that sort after all of the bucket labels in this index. - * @stable ICU 4.8 - */ - U_ALPHAINDEX_OVERFLOW = 3 -} UAlphabeticIndexLabelType; - - -struct UHashtable; -U_CDECL_END - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -// Forward Declarations - -class BucketList; -class Collator; -class RuleBasedCollator; -class StringEnumeration; -class UnicodeSet; -class UVector; - -/** - * AlphabeticIndex supports the creation of a UI index appropriate for a given language. - * It can support either direct use, or use with a client that doesn't support localized collation. - * The following is an example of what an index might look like in a UI: - * - *
- *  ... A B C D E F G H I J K L M N O P Q R S T U V W X Y Z  ...
- *
- *  A
- *     Addison
- *     Albertson
- *     Azensky
- *  B
- *     Baker
- *  ...
- * 
- * - * The class can generate a list of labels for use as a UI "index", that is, a list of - * clickable characters (or character sequences) that allow the user to see a segment - * (bucket) of a larger "target" list. That is, each label corresponds to a bucket in - * the target list, where everything in the bucket is greater than or equal to the character - * (according to the locale's collation). Strings can be added to the index; - * they will be in sorted order in the right bucket. - *

- * The class also supports having buckets for strings before the first (underflow), - * after the last (overflow), and between scripts (inflow). For example, if the index - * is constructed with labels for Russian and English, Greek characters would fall - * into an inflow bucket between the other two scripts. - *

- * The AlphabeticIndex class is not intended for public subclassing. - * - *

Note: If you expect to have a lot of ASCII or Latin characters - * as well as characters from the user's language, - * then it is a good idea to call addLabels(Locale::getEnglish(), status).

- * - *

Direct Use

- *

The following shows an example of building an index directly. - * The "show..." methods below are just to illustrate usage. - * - *

- * // Create a simple index.  "Item" is assumed to be an application
- * // defined type that the application's UI and other processing knows about,
- * //  and that has a name.
- *
- * UErrorCode status = U_ZERO_ERROR;
- * AlphabeticIndex index = new AlphabeticIndex(desiredLocale, status);
- * index->addLabels(additionalLocale, status);
- * for (Item *item in some source of Items ) {
- *     index->addRecord(item->name(), item, status);
- * }
- * ...
- * // Show index at top. We could skip or gray out empty buckets
- *
- * while (index->nextBucket(status)) {
- *     if (showAll || index->getBucketRecordCount() != 0) {
- *         showLabelAtTop(UI, index->getBucketLabel());
- *     }
- * }
- *  ...
- * // Show the buckets with their contents, skipping empty buckets
- *
- * index->resetBucketIterator(status);
- * while (index->nextBucket(status)) {
- *    if (index->getBucketRecordCount() != 0) {
- *        showLabelInList(UI, index->getBucketLabel());
- *        while (index->nextRecord(status)) {
- *            showIndexedItem(UI, static_cast(index->getRecordData()))
- * 
- * - * The caller can build different UIs using this class. - * For example, an index character could be omitted or grayed-out - * if its bucket is empty. Small buckets could also be combined based on size, such as: - * - *
- * ... A-F G-N O-Z ...
- * 
- * - *

Client Support

- *

Callers can also use the AlphabeticIndex::ImmutableIndex, or the AlphabeticIndex itself, - * to support sorting on a client that doesn't support AlphabeticIndex functionality. - * - *

The ImmutableIndex is both immutable and thread-safe. - * The corresponding AlphabeticIndex methods are not thread-safe because - * they "lazily" build the index buckets. - *

    - *
  • ImmutableIndex.getBucket(index) provides random access to all - * buckets and their labels and label types. - *
  • The AlphabeticIndex bucket iterator or ImmutableIndex.getBucket(0..getBucketCount-1) - * can be used to get a list of the labels, - * such as "...", "A", "B",..., and send that list to the client. - *
  • When the client has a new name, it sends that name to the server. - * The server needs to call the following methods, - * and communicate the bucketIndex and collationKey back to the client. - * - *
    - * int32_t bucketIndex = index.getBucketIndex(name, status);
    - * const UnicodeString &label = immutableIndex.getBucket(bucketIndex)->getLabel();  // optional
    - * int32_t skLength = collator.getSortKey(name, sk, skCapacity);
    - * 
    - * - *
  • The client would put the name (and associated information) into its bucket for bucketIndex. The sort key sk is a - * sequence of bytes that can be compared with a binary compare, and produce the right localized result.
  • - *
- * - * @stable ICU 4.8 - */ -class U_I18N_API AlphabeticIndex: public UObject { -public: - /** - * An index "bucket" with a label string and type. - * It is referenced by getBucketIndex(), - * and returned by ImmutableIndex.getBucket(). - * - * The Bucket class is not intended for public subclassing. - * @stable ICU 51 - */ - class U_I18N_API Bucket : public UObject { - public: - /** - * Destructor. - * @stable ICU 51 - */ - virtual ~Bucket(); - - /** - * Returns the label string. - * - * @return the label string for the bucket - * @stable ICU 51 - */ - const UnicodeString &getLabel() const { return label_; } - /** - * Returns whether this bucket is a normal, underflow, overflow, or inflow bucket. - * - * @return the bucket label type - * @stable ICU 51 - */ - UAlphabeticIndexLabelType getLabelType() const { return labelType_; } - - private: - friend class AlphabeticIndex; - friend class BucketList; - - UnicodeString label_; - UnicodeString lowerBoundary_; - UAlphabeticIndexLabelType labelType_; - Bucket *displayBucket_; - int32_t displayIndex_; - UVector *records_; // Records are owned by the inputList_ vector. - - Bucket(const UnicodeString &label, // Parameter strings are copied. - const UnicodeString &lowerBoundary, - UAlphabeticIndexLabelType type); - }; - - /** - * Immutable, thread-safe version of AlphabeticIndex. - * This class provides thread-safe methods for bucketing, - * and random access to buckets and their properties, - * but does not offer adding records to the index. - * - * The ImmutableIndex class is not intended for public subclassing. - * - * @stable ICU 51 - */ - class U_I18N_API ImmutableIndex : public UObject { - public: - /** - * Destructor. - * @stable ICU 51 - */ - virtual ~ImmutableIndex(); - - /** - * Returns the number of index buckets and labels, including underflow/inflow/overflow. - * - * @return the number of index buckets - * @stable ICU 51 - */ - int32_t getBucketCount() const; - - /** - * Finds the index bucket for the given name and returns the number of that bucket. - * Use getBucket() to get the bucket's properties. - * - * @param name the string to be sorted into an index bucket - * @param errorCode Error code, will be set with the reason if the - * operation fails. - * @return the bucket number for the name - * @stable ICU 51 - */ - int32_t getBucketIndex(const UnicodeString &name, UErrorCode &errorCode) const; - - /** - * Returns the index-th bucket. Returns NULL if the index is out of range. - * - * @param index bucket number - * @return the index-th bucket - * @stable ICU 51 - */ - const Bucket *getBucket(int32_t index) const; - - private: - friend class AlphabeticIndex; - - ImmutableIndex(BucketList *bucketList, Collator *collatorPrimaryOnly) - : buckets_(bucketList), collatorPrimaryOnly_(collatorPrimaryOnly) {} - - BucketList *buckets_; - Collator *collatorPrimaryOnly_; - }; - - /** - * Construct an AlphabeticIndex object for the specified locale. If the locale's - * data does not include index characters, a set of them will be - * synthesized based on the locale's exemplar characters. The locale - * determines the sorting order for both the index characters and the - * user item names appearing under each Index character. - * - * @param locale the desired locale. - * @param status Error code, will be set with the reason if the construction - * of the AlphabeticIndex object fails. - * @stable ICU 4.8 - */ - AlphabeticIndex(const Locale &locale, UErrorCode &status); - - /** - * Construct an AlphabeticIndex that uses a specific collator. - * - * The index will be created with no labels; the addLabels() function must be called - * after creation to add the desired labels to the index. - * - * The index adopts the collator, and is responsible for deleting it. - * The caller should make no further use of the collator after creating the index. - * - * @param collator The collator to use to order the contents of this index. - * @param status Error code, will be set with the reason if the - * operation fails. - * @stable ICU 51 - */ - AlphabeticIndex(RuleBasedCollator *collator, UErrorCode &status); - - /** - * Add Labels to this Index. The labels are additions to those - * that are already in the index; they do not replace the existing - * ones. - * @param additions The additional characters to add to the index, such as A-Z. - * @param status Error code, will be set with the reason if the - * operation fails. - * @return this, for chaining - * @stable ICU 4.8 - */ - virtual AlphabeticIndex &addLabels(const UnicodeSet &additions, UErrorCode &status); - - /** - * Add the index characters from a Locale to the index. The labels - * are added to those that are already in the index; they do not replace the - * existing index characters. The collation order for this index is not - * changed; it remains that of the locale that was originally specified - * when creating this Index. - * - * @param locale The locale whose index characters are to be added. - * @param status Error code, will be set with the reason if the - * operation fails. - * @return this, for chaining - * @stable ICU 4.8 - */ - virtual AlphabeticIndex &addLabels(const Locale &locale, UErrorCode &status); - - /** - * Destructor - * @stable ICU 4.8 - */ - virtual ~AlphabeticIndex(); - - /** - * Builds an immutable, thread-safe version of this instance, without data records. - * - * @return an immutable index instance - * @stable ICU 51 - */ - ImmutableIndex *buildImmutableIndex(UErrorCode &errorCode); - - /** - * Get the Collator that establishes the ordering of the items in this index. - * Ownership of the collator remains with the AlphabeticIndex instance. - * - * The returned collator is a reference to the internal collator used by this - * index. It may be safely used to compare the names of items or to get - * sort keys for names. However if any settings need to be changed, - * or other non-const methods called, a cloned copy must be made first. - * - * @return The collator - * @stable ICU 4.8 - */ - virtual const RuleBasedCollator &getCollator() const; - - - /** - * Get the default label used for abbreviated buckets *between* other index characters. - * For example, consider the labels when Latin (X Y Z) and Greek (Α Β Γ) are used: - * - * X Y Z ... Α Β Γ. - * - * @return inflow label - * @stable ICU 4.8 - */ - virtual const UnicodeString &getInflowLabel() const; - - /** - * Set the default label used for abbreviated buckets between other index characters. - * An inflow label will be automatically inserted if two otherwise-adjacent label characters - * are from different scripts, e.g. Latin and Cyrillic, and a third script, e.g. Greek, - * sorts between the two. The default inflow character is an ellipsis (...) - * - * @param inflowLabel the new Inflow label. - * @param status Error code, will be set with the reason if the operation fails. - * @return this - * @stable ICU 4.8 - */ - virtual AlphabeticIndex &setInflowLabel(const UnicodeString &inflowLabel, UErrorCode &status); - - - /** - * Get the special label used for items that sort after the last normal label, - * and that would not otherwise have an appropriate label. - * - * @return the overflow label - * @stable ICU 4.8 - */ - virtual const UnicodeString &getOverflowLabel() const; - - - /** - * Set the label used for items that sort after the last normal label, - * and that would not otherwise have an appropriate label. - * - * @param overflowLabel the new overflow label. - * @param status Error code, will be set with the reason if the operation fails. - * @return this - * @stable ICU 4.8 - */ - virtual AlphabeticIndex &setOverflowLabel(const UnicodeString &overflowLabel, UErrorCode &status); - - /** - * Get the special label used for items that sort before the first normal label, - * and that would not otherwise have an appropriate label. - * - * @return underflow label - * @stable ICU 4.8 - */ - virtual const UnicodeString &getUnderflowLabel() const; - - /** - * Set the label used for items that sort before the first normal label, - * and that would not otherwise have an appropriate label. - * - * @param underflowLabel the new underflow label. - * @param status Error code, will be set with the reason if the operation fails. - * @return this - * @stable ICU 4.8 - */ - virtual AlphabeticIndex &setUnderflowLabel(const UnicodeString &underflowLabel, UErrorCode &status); - - - /** - * Get the limit on the number of labels permitted in the index. - * The number does not include over, under and inflow labels. - * - * @return maxLabelCount maximum number of labels. - * @stable ICU 4.8 - */ - virtual int32_t getMaxLabelCount() const; - - /** - * Set a limit on the number of labels permitted in the index. - * The number does not include over, under and inflow labels. - * Currently, if the number is exceeded, then every - * nth item is removed to bring the count down. - * A more sophisticated mechanism may be available in the future. - * - * @param maxLabelCount the maximum number of labels. - * @param status error code - * @return This, for chaining - * @stable ICU 4.8 - */ - virtual AlphabeticIndex &setMaxLabelCount(int32_t maxLabelCount, UErrorCode &status); - - - /** - * Add a record to the index. Each record will be associated with an index Bucket - * based on the record's name. The list of records for each bucket will be sorted - * based on the collation ordering of the names in the index's locale. - * Records with duplicate names are permitted; they will be kept in the order - * that they were added. - * - * @param name The display name for the Record. The Record will be placed in - * a bucket based on this name. - * @param data An optional pointer to user data associated with this - * item. When iterating the contents of a bucket, both the - * data pointer the name will be available for each Record. - * @param status Error code, will be set with the reason if the operation fails. - * @return This, for chaining. - * @stable ICU 4.8 - */ - virtual AlphabeticIndex &addRecord(const UnicodeString &name, const void *data, UErrorCode &status); - - /** - * Remove all Records from the Index. The set of Buckets, which define the headings under - * which records are classified, is not altered. - * - * @param status Error code, will be set with the reason if the operation fails. - * @return This, for chaining. - * @stable ICU 4.8 - */ - virtual AlphabeticIndex &clearRecords(UErrorCode &status); - - - /** Get the number of labels in this index. - * Note: may trigger lazy index construction. - * - * @param status Error code, will be set with the reason if the operation fails. - * @return The number of labels in this index, including any under, over or - * in-flow labels. - * @stable ICU 4.8 - */ - virtual int32_t getBucketCount(UErrorCode &status); - - - /** Get the total number of Records in this index, that is, the number - * of pairs added. - * - * @param status Error code, will be set with the reason if the operation fails. - * @return The number of records in this index, that is, the total number - * of (name, data) items added with addRecord(). - * @stable ICU 4.8 - */ - virtual int32_t getRecordCount(UErrorCode &status); - - - - /** - * Given the name of a record, return the zero-based index of the Bucket - * in which the item should appear. The name need not be in the index. - * A Record will not be added to the index by this function. - * Bucket numbers are zero-based, in Bucket iteration order. - * - * @param itemName The name whose bucket position in the index is to be determined. - * @param status Error code, will be set with the reason if the operation fails. - * @return The bucket number for this name. - * @stable ICU 4.8 - * - */ - virtual int32_t getBucketIndex(const UnicodeString &itemName, UErrorCode &status); - - - /** - * Get the zero based index of the current Bucket from an iteration - * over the Buckets of this index. Return -1 if no iteration is in process. - * @return the index of the current Bucket - * @stable ICU 4.8 - */ - virtual int32_t getBucketIndex() const; - - - /** - * Advance the iteration over the Buckets of this index. Return FALSE if - * there are no more Buckets. - * - * @param status Error code, will be set with the reason if the operation fails. - * U_ENUM_OUT_OF_SYNC_ERROR will be reported if the index is modified while - * an enumeration of its contents are in process. - * - * @return TRUE if success, FALSE if at end of iteration - * @stable ICU 4.8 - */ - virtual UBool nextBucket(UErrorCode &status); - - /** - * Return the name of the Label of the current bucket from an iteration over the buckets. - * If the iteration is before the first Bucket (nextBucket() has not been called), - * or after the last, return an empty string. - * - * @return the bucket label. - * @stable ICU 4.8 - */ - virtual const UnicodeString &getBucketLabel() const; - - /** - * Return the type of the label for the current Bucket (selected by the - * iteration over Buckets.) - * - * @return the label type. - * @stable ICU 4.8 - */ - virtual UAlphabeticIndexLabelType getBucketLabelType() const; - - /** - * Get the number of Records in the current Bucket. - * If the current bucket iteration position is before the first label or after the - * last, return 0. - * - * @return the number of Records. - * @stable ICU 4.8 - */ - virtual int32_t getBucketRecordCount() const; - - - /** - * Reset the Bucket iteration for this index. The next call to nextBucket() - * will restart the iteration at the first label. - * - * @param status Error code, will be set with the reason if the operation fails. - * @return this, for chaining. - * @stable ICU 4.8 - */ - virtual AlphabeticIndex &resetBucketIterator(UErrorCode &status); - - /** - * Advance to the next record in the current Bucket. - * When nextBucket() is called, Record iteration is reset to just before the - * first Record in the new Bucket. - * - * @param status Error code, will be set with the reason if the operation fails. - * U_ENUM_OUT_OF_SYNC_ERROR will be reported if the index is modified while - * an enumeration of its contents are in process. - * @return TRUE if successful, FALSE when the iteration advances past the last item. - * @stable ICU 4.8 - */ - virtual UBool nextRecord(UErrorCode &status); - - /** - * Get the name of the current Record. - * Return an empty string if the Record iteration position is before first - * or after the last. - * - * @return The name of the current index item. - * @stable ICU 4.8 - */ - virtual const UnicodeString &getRecordName() const; - - - /** - * Return the data pointer of the Record currently being iterated over. - * Return NULL if the current iteration position before the first item in this Bucket, - * or after the last. - * - * @return The current Record's data pointer. - * @stable ICU 4.8 - */ - virtual const void *getRecordData() const; - - - /** - * Reset the Record iterator position to before the first Record in the current Bucket. - * - * @return This, for chaining. - * @stable ICU 4.8 - */ - virtual AlphabeticIndex &resetRecordIterator(); - -private: - /** - * No Copy constructor. - * @internal - */ - AlphabeticIndex(const AlphabeticIndex &other); - - /** - * No assignment. - */ - AlphabeticIndex &operator =(const AlphabeticIndex & /*other*/) { return *this;} - - /** - * No Equality operators. - * @internal - */ - virtual UBool operator==(const AlphabeticIndex& other) const; - - /** - * Inequality operator. - * @internal - */ - virtual UBool operator!=(const AlphabeticIndex& other) const; - - // Common initialization, for use from all constructors. - void init(const Locale *locale, UErrorCode &status); - - /** - * This method is called to get the index exemplars. Normally these come from the locale directly, - * but if they aren't available, we have to synthesize them. - */ - void addIndexExemplars(const Locale &locale, UErrorCode &status); - /** - * Add Chinese index characters from the tailoring. - */ - UBool addChineseIndexCharacters(UErrorCode &errorCode); - - UVector *firstStringsInScript(UErrorCode &status); - - static UnicodeString separated(const UnicodeString &item); - - /** - * Determine the best labels to use. - * This is based on the exemplars, but we also process to make sure that they are unique, - * and sort differently, and that the overall list is small enough. - */ - void initLabels(UVector &indexCharacters, UErrorCode &errorCode) const; - BucketList *createBucketList(UErrorCode &errorCode) const; - void initBuckets(UErrorCode &errorCode); - void clearBuckets(); - void internalResetBucketIterator(); - -public: - - // The Record is declared public only to allow access from - // implementation code written in plain C. - // It is not intended for public use. - -#ifndef U_HIDE_INTERNAL_API - /** - * A (name, data) pair, to be sorted by name into one of the index buckets. - * The user data is not used by the index implementation. - * \cond - * @internal - */ - struct Record: public UMemory { - const UnicodeString name_; - const void *data_; - Record(const UnicodeString &name, const void *data); - ~Record(); - }; - /** \endcond */ -#endif /* U_HIDE_INTERNAL_API */ - -private: - - /** - * Holds all user records before they are distributed into buckets. - * Type of contents is (Record *) - * @internal - */ - UVector *inputList_; - - int32_t labelsIterIndex_; // Index of next item to return. - int32_t itemsIterIndex_; - Bucket *currentBucket_; // While an iteration of the index in underway, - // point to the bucket for the current label. - // NULL when no iteration underway. - - int32_t maxLabelCount_; // Limit on # of labels permitted in the index. - - UnicodeSet *initialLabels_; // Initial (unprocessed) set of Labels. Union - // of those explicitly set by the user plus - // those from locales. Raw values, before - // crunching into bucket labels. - - UVector *firstCharsInScripts_; // The first character from each script, - // in collation order. - - RuleBasedCollator *collator_; - RuleBasedCollator *collatorPrimaryOnly_; - - // Lazy evaluated: null means that we have not built yet. - BucketList *buckets_; - - UnicodeString inflowLabel_; - UnicodeString overflowLabel_; - UnicodeString underflowLabel_; - UnicodeString overflowComparisonString_; - - UnicodeString emptyString_; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // !UCONFIG_NO_COLLATION -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/appendable.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/appendable.h deleted file mode 100644 index e6f7276bb8..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/appendable.h +++ /dev/null @@ -1,236 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2011-2012, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* file name: appendable.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2010dec07 -* created by: Markus W. Scherer -*/ - -#ifndef __APPENDABLE_H__ -#define __APPENDABLE_H__ - -/** - * \file - * \brief C++ API: Appendable class: Sink for Unicode code points and 16-bit code units (char16_ts). - */ - -#include "unicode/utypes.h" -#include "unicode/uobject.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class UnicodeString; - -/** - * Base class for objects to which Unicode characters and strings can be appended. - * Combines elements of Java Appendable and ICU4C ByteSink. - * - * This class can be used in APIs where it does not matter whether the actual destination is - * a UnicodeString, a char16_t[] array, a UnicodeSet, or any other object - * that receives and processes characters and/or strings. - * - * Implementation classes must implement at least appendCodeUnit(char16_t). - * The base class provides default implementations for the other methods. - * - * The methods do not take UErrorCode parameters. - * If an error occurs (e.g., out-of-memory), - * in addition to returning FALSE from failing operations, - * the implementation must prevent unexpected behavior (e.g., crashes) - * from further calls and should make the error condition available separately - * (e.g., store a UErrorCode, make/keep a UnicodeString bogus). - * @stable ICU 4.8 - */ -class U_COMMON_API Appendable : public UObject { -public: - /** - * Destructor. - * @stable ICU 4.8 - */ - ~Appendable(); - - /** - * Appends a 16-bit code unit. - * @param c code unit - * @return TRUE if the operation succeeded - * @stable ICU 4.8 - */ - virtual UBool appendCodeUnit(char16_t c) = 0; - - /** - * Appends a code point. - * The default implementation calls appendCodeUnit(char16_t) once or twice. - * @param c code point 0..0x10ffff - * @return TRUE if the operation succeeded - * @stable ICU 4.8 - */ - virtual UBool appendCodePoint(UChar32 c); - - /** - * Appends a string. - * The default implementation calls appendCodeUnit(char16_t) for each code unit. - * @param s string, must not be NULL if length!=0 - * @param length string length, or -1 if NUL-terminated - * @return TRUE if the operation succeeded - * @stable ICU 4.8 - */ - virtual UBool appendString(const char16_t *s, int32_t length); - - /** - * Tells the object that the caller is going to append roughly - * appendCapacity char16_ts. A subclass might use this to pre-allocate - * a larger buffer if necessary. - * The default implementation does nothing. (It always returns TRUE.) - * @param appendCapacity estimated number of char16_ts that will be appended - * @return TRUE if the operation succeeded - * @stable ICU 4.8 - */ - virtual UBool reserveAppendCapacity(int32_t appendCapacity); - - /** - * Returns a writable buffer for appending and writes the buffer's capacity to - * *resultCapacity. Guarantees *resultCapacity>=minCapacity. - * May return a pointer to the caller-owned scratch buffer which must have - * scratchCapacity>=minCapacity. - * The returned buffer is only valid until the next operation - * on this Appendable. - * - * After writing at most *resultCapacity char16_ts, call appendString() with the - * pointer returned from this function and the number of char16_ts written. - * Many appendString() implementations will avoid copying char16_ts if this function - * returned an internal buffer. - * - * Partial usage example: - * \code - * int32_t capacity; - * char16_t* buffer = app.getAppendBuffer(..., &capacity); - * ... Write n char16_ts into buffer, with n <= capacity. - * app.appendString(buffer, n); - * \endcode - * In many implementations, that call to append will avoid copying char16_ts. - * - * If the Appendable allocates or reallocates an internal buffer, it should use - * the desiredCapacityHint if appropriate. - * If a caller cannot provide a reasonable guess at the desired capacity, - * it should pass desiredCapacityHint=0. - * - * If a non-scratch buffer is returned, the caller may only pass - * a prefix to it to appendString(). - * That is, it is not correct to pass an interior pointer to appendString(). - * - * The default implementation always returns the scratch buffer. - * - * @param minCapacity required minimum capacity of the returned buffer; - * must be non-negative - * @param desiredCapacityHint desired capacity of the returned buffer; - * must be non-negative - * @param scratch default caller-owned buffer - * @param scratchCapacity capacity of the scratch buffer - * @param resultCapacity pointer to an integer which will be set to the - * capacity of the returned buffer - * @return a buffer with *resultCapacity>=minCapacity - * @stable ICU 4.8 - */ - virtual char16_t *getAppendBuffer(int32_t minCapacity, - int32_t desiredCapacityHint, - char16_t *scratch, int32_t scratchCapacity, - int32_t *resultCapacity); -}; - -/** - * An Appendable implementation which writes to a UnicodeString. - * - * This class is not intended for public subclassing. - * @stable ICU 4.8 - */ -class U_COMMON_API UnicodeStringAppendable : public Appendable { -public: - /** - * Aliases the UnicodeString (keeps its reference) for writing. - * @param s The UnicodeString to which this Appendable will write. - * @stable ICU 4.8 - */ - explicit UnicodeStringAppendable(UnicodeString &s) : str(s) {} - - /** - * Destructor. - * @stable ICU 4.8 - */ - ~UnicodeStringAppendable(); - - /** - * Appends a 16-bit code unit to the string. - * @param c code unit - * @return TRUE if the operation succeeded - * @stable ICU 4.8 - */ - virtual UBool appendCodeUnit(char16_t c); - - /** - * Appends a code point to the string. - * @param c code point 0..0x10ffff - * @return TRUE if the operation succeeded - * @stable ICU 4.8 - */ - virtual UBool appendCodePoint(UChar32 c); - - /** - * Appends a string to the UnicodeString. - * @param s string, must not be NULL if length!=0 - * @param length string length, or -1 if NUL-terminated - * @return TRUE if the operation succeeded - * @stable ICU 4.8 - */ - virtual UBool appendString(const char16_t *s, int32_t length); - - /** - * Tells the UnicodeString that the caller is going to append roughly - * appendCapacity char16_ts. - * @param appendCapacity estimated number of char16_ts that will be appended - * @return TRUE if the operation succeeded - * @stable ICU 4.8 - */ - virtual UBool reserveAppendCapacity(int32_t appendCapacity); - - /** - * Returns a writable buffer for appending and writes the buffer's capacity to - * *resultCapacity. Guarantees *resultCapacity>=minCapacity. - * May return a pointer to the caller-owned scratch buffer which must have - * scratchCapacity>=minCapacity. - * The returned buffer is only valid until the next write operation - * on the UnicodeString. - * - * For details see Appendable::getAppendBuffer(). - * - * @param minCapacity required minimum capacity of the returned buffer; - * must be non-negative - * @param desiredCapacityHint desired capacity of the returned buffer; - * must be non-negative - * @param scratch default caller-owned buffer - * @param scratchCapacity capacity of the scratch buffer - * @param resultCapacity pointer to an integer which will be set to the - * capacity of the returned buffer - * @return a buffer with *resultCapacity>=minCapacity - * @stable ICU 4.8 - */ - virtual char16_t *getAppendBuffer(int32_t minCapacity, - int32_t desiredCapacityHint, - char16_t *scratch, int32_t scratchCapacity, - int32_t *resultCapacity); - -private: - UnicodeString &str; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // __APPENDABLE_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/basictz.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/basictz.h deleted file mode 100644 index 3beb2ed1ba..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/basictz.h +++ /dev/null @@ -1,218 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2007-2013, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************************* -*/ -#ifndef BASICTZ_H -#define BASICTZ_H - -/** - * \file - * \brief C++ API: ICU TimeZone base class - */ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/timezone.h" -#include "unicode/tzrule.h" -#include "unicode/tztrans.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -// forward declarations -class UVector; - -/** - * BasicTimeZone is an abstract class extending TimeZone. - * This class provides some additional methods to access time zone transitions and rules. - * All ICU TimeZone concrete subclasses extend this class. - * @stable ICU 3.8 - */ -class U_I18N_API BasicTimeZone: public TimeZone { -public: - /** - * Destructor. - * @stable ICU 3.8 - */ - virtual ~BasicTimeZone(); - - /** - * Gets the first time zone transition after the base time. - * @param base The base time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives the first transition after the base time. - * @return TRUE if the transition is found. - * @stable ICU 3.8 - */ - virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const = 0; - - /** - * Gets the most recent time zone transition before the base time. - * @param base The base time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives the most recent transition before the base time. - * @return TRUE if the transition is found. - * @stable ICU 3.8 - */ - virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const = 0; - - /** - * Checks if the time zone has equivalent transitions in the time range. - * This method returns true when all of transition times, from/to standard - * offsets and DST savings used by this time zone match the other in the - * time range. - * @param tz The BasicTimeZone object to be compared with. - * @param start The start time of the evaluated time range (inclusive) - * @param end The end time of the evaluated time range (inclusive) - * @param ignoreDstAmount - * When true, any transitions with only daylight saving amount - * changes will be ignored, except either of them is zero. - * For example, a transition from rawoffset 3:00/dstsavings 1:00 - * to rawoffset 2:00/dstsavings 2:00 is excluded from the comparison, - * but a transtion from rawoffset 2:00/dstsavings 1:00 to - * rawoffset 3:00/dstsavings 0:00 is included. - * @param ec Output param to filled in with a success or an error. - * @return true if the other time zone has the equivalent transitions in the - * time range. - * @stable ICU 3.8 - */ - virtual UBool hasEquivalentTransitions(const BasicTimeZone& tz, UDate start, UDate end, - UBool ignoreDstAmount, UErrorCode& ec) const; - - /** - * Returns the number of TimeZoneRules which represents time transitions, - * for this time zone, that is, all TimeZoneRules for this time zone except - * InitialTimeZoneRule. The return value range is 0 or any positive value. - * @param status Receives error status code. - * @return The number of TimeZoneRules representing time transitions. - * @stable ICU 3.8 - */ - virtual int32_t countTransitionRules(UErrorCode& status) const = 0; - - /** - * Gets the InitialTimeZoneRule and the set of TimeZoneRule - * which represent time transitions for this time zone. On successful return, - * the argument initial points to non-NULL InitialTimeZoneRule and - * the array trsrules is filled with 0 or multiple TimeZoneRule - * instances up to the size specified by trscount. The results are referencing the - * rule instance held by this time zone instance. Therefore, after this time zone - * is destructed, they are no longer available. - * @param initial Receives the initial timezone rule - * @param trsrules Receives the timezone transition rules - * @param trscount On input, specify the size of the array 'transitions' receiving - * the timezone transition rules. On output, actual number of - * rules filled in the array will be set. - * @param status Receives error status code. - * @stable ICU 3.8 - */ - virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial, - const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const = 0; - - /** - * Gets the set of time zone rules valid at the specified time. Some known external time zone - * implementations are not capable to handle historic time zone rule changes. Also some - * implementations can only handle certain type of rule definitions. - * If this time zone does not use any daylight saving time within about 1 year from the specified - * time, only the InitialTimeZone is returned. Otherwise, the rule for standard - * time and daylight saving time transitions are returned in addition to the - * InitialTimeZoneRule. The standard and daylight saving time transition rules are - * represented by AnnualTimeZoneRule with DateTimeRule::DOW for its date - * rule and DateTimeRule::WALL_TIME for its time rule. Because daylight saving time - * rule is changing time to time in many time zones and also mapping a transition time rule to - * different type is lossy transformation, the set of rules returned by this method may be valid - * for short period of time. - * The time zone rule objects returned by this method is owned by the caller, so the caller is - * responsible for deleting them after use. - * @param date The date used for extracting time zone rules. - * @param initial Receives the InitialTimeZone, always not NULL. - * @param std Receives the AnnualTimeZoneRule for standard time transitions. - * When this time time zone does not observe daylight saving times around the - * specified date, NULL is set. - * @param dst Receives the AnnualTimeZoneRule for daylight saving time - * transitions. When this time zone does not observer daylight saving times - * around the specified date, NULL is set. - * @param status Receives error status code. - * @stable ICU 3.8 - */ - virtual void getSimpleRulesNear(UDate date, InitialTimeZoneRule*& initial, - AnnualTimeZoneRule*& std, AnnualTimeZoneRule*& dst, UErrorCode& status) const; - - -#ifndef U_HIDE_INTERNAL_API - /** - * The time type option bit flags used by getOffsetFromLocal - * @internal - */ - enum { - kStandard = 0x01, - kDaylight = 0x03, - kFormer = 0x04, - kLatter = 0x0C - }; -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Get time zone offsets from local wall time. - * @internal - */ - virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, - int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const; - -protected: - -#ifndef U_HIDE_INTERNAL_API - /** - * The time type option bit masks used by getOffsetFromLocal - * @internal - */ - enum { - kStdDstMask = kDaylight, - kFormerLatterMask = kLatter - }; -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Default constructor. - * @stable ICU 3.8 - */ - BasicTimeZone(); - - /** - * Construct a timezone with a given ID. - * @param id a system time zone ID - * @stable ICU 3.8 - */ - BasicTimeZone(const UnicodeString &id); - - /** - * Copy constructor. - * @param source the object to be copied. - * @stable ICU 3.8 - */ - BasicTimeZone(const BasicTimeZone& source); - - /** - * Gets the set of TimeZoneRule instances applicable to the specified time and after. - * @param start The start date used for extracting time zone rules - * @param initial Receives the InitialTimeZone, always not NULL - * @param transitionRules Receives the transition rules, could be NULL - * @param status Receives error status code - */ - void getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial, UVector*& transitionRules, - UErrorCode& status) const; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // BASICTZ_H - -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/brkiter.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/brkiter.h deleted file mode 100644 index 42a0fbfa1d..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/brkiter.h +++ /dev/null @@ -1,681 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 1997-2016, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************** -* -* File brkiter.h -* -* Modification History: -* -* Date Name Description -* 02/18/97 aliu Added typedef for TextCount. Made DONE const. -* 05/07/97 aliu Fixed DLL declaration. -* 07/09/97 jfitz Renamed BreakIterator and interface synced with JDK -* 08/11/98 helena Sync-up JDK1.2. -* 01/13/2000 helena Added UErrorCode parameter to createXXXInstance methods. -******************************************************************************** -*/ - -#ifndef BRKITER_H -#define BRKITER_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Break Iterator. - */ - -#if UCONFIG_NO_BREAK_ITERATION - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/* - * Allow the declaration of APIs with pointers to BreakIterator - * even when break iteration is removed from the build. - */ -class BreakIterator; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#else - -#include "unicode/uobject.h" -#include "unicode/unistr.h" -#include "unicode/chariter.h" -#include "unicode/locid.h" -#include "unicode/ubrk.h" -#include "unicode/strenum.h" -#include "unicode/utext.h" -#include "unicode/umisc.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * The BreakIterator class implements methods for finding the location - * of boundaries in text. BreakIterator is an abstract base class. - * Instances of BreakIterator maintain a current position and scan over - * text returning the index of characters where boundaries occur. - *

- * Line boundary analysis determines where a text string can be broken - * when line-wrapping. The mechanism correctly handles punctuation and - * hyphenated words. - *

- * Sentence boundary analysis allows selection with correct - * interpretation of periods within numbers and abbreviations, and - * trailing punctuation marks such as quotation marks and parentheses. - *

- * Word boundary analysis is used by search and replace functions, as - * well as within text editing applications that allow the user to - * select words with a double click. Word selection provides correct - * interpretation of punctuation marks within and following - * words. Characters that are not part of a word, such as symbols or - * punctuation marks, have word-breaks on both sides. - *

- * Character boundary analysis allows users to interact with - * characters as they expect to, for example, when moving the cursor - * through a text string. Character boundary analysis provides correct - * navigation of through character strings, regardless of how the - * character is stored. For example, an accented character might be - * stored as a base character and a diacritical mark. What users - * consider to be a character can differ between languages. - *

- * The text boundary positions are found according to the rules - * described in Unicode Standard Annex #29, Text Boundaries, and - * Unicode Standard Annex #14, Line Breaking Properties. These - * are available at http://www.unicode.org/reports/tr14/ and - * http://www.unicode.org/reports/tr29/. - *

- * In addition to the C++ API defined in this header file, a - * plain C API with equivalent functionality is defined in the - * file ubrk.h - *

- * Code snippets illustrating the use of the Break Iterator APIs - * are available in the ICU User Guide, - * http://icu-project.org/userguide/boundaryAnalysis.html - * and in the sample program icu/source/samples/break/break.cpp - * - */ -class U_COMMON_API BreakIterator : public UObject { -public: - /** - * destructor - * @stable ICU 2.0 - */ - virtual ~BreakIterator(); - - /** - * Return true if another object is semantically equal to this - * one. The other object should be an instance of the same subclass of - * BreakIterator. Objects of different subclasses are considered - * unequal. - *

- * Return true if this BreakIterator is at the same position in the - * same text, and is the same class and type (word, line, etc.) of - * BreakIterator, as the argument. Text is considered the same if - * it contains the same characters, it need not be the same - * object, and styles are not considered. - * @stable ICU 2.0 - */ - virtual UBool operator==(const BreakIterator&) const = 0; - - /** - * Returns the complement of the result of operator== - * @param rhs The BreakIterator to be compared for inequality - * @return the complement of the result of operator== - * @stable ICU 2.0 - */ - UBool operator!=(const BreakIterator& rhs) const { return !operator==(rhs); } - - /** - * Return a polymorphic copy of this object. This is an abstract - * method which subclasses implement. - * @stable ICU 2.0 - */ - virtual BreakIterator* clone(void) const = 0; - - /** - * Return a polymorphic class ID for this object. Different subclasses - * will return distinct unequal values. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const = 0; - - /** - * Return a CharacterIterator over the text being analyzed. - * @stable ICU 2.0 - */ - virtual CharacterIterator& getText(void) const = 0; - - - /** - * Get a UText for the text being analyzed. - * The returned UText is a shallow clone of the UText used internally - * by the break iterator implementation. It can safely be used to - * access the text without impacting any break iterator operations, - * but the underlying text itself must not be altered. - * - * @param fillIn A UText to be filled in. If NULL, a new UText will be - * allocated to hold the result. - * @param status receives any error codes. - * @return The current UText for this break iterator. If an input - * UText was provided, it will always be returned. - * @stable ICU 3.4 - */ - virtual UText *getUText(UText *fillIn, UErrorCode &status) const = 0; - - /** - * Change the text over which this operates. The text boundary is - * reset to the start. - * - * The BreakIterator will retain a reference to the supplied string. - * The caller must not modify or delete the text while the BreakIterator - * retains the reference. - * - * @param text The UnicodeString used to change the text. - * @stable ICU 2.0 - */ - virtual void setText(const UnicodeString &text) = 0; - - /** - * Reset the break iterator to operate over the text represented by - * the UText. The iterator position is reset to the start. - * - * This function makes a shallow clone of the supplied UText. This means - * that the caller is free to immediately close or otherwise reuse the - * Utext that was passed as a parameter, but that the underlying text itself - * must not be altered while being referenced by the break iterator. - * - * All index positions returned by break iterator functions are - * native indices from the UText. For example, when breaking UTF-8 - * encoded text, the break positions returned by next(), previous(), etc. - * will be UTF-8 string indices, not UTF-16 positions. - * - * @param text The UText used to change the text. - * @param status receives any error codes. - * @stable ICU 3.4 - */ - virtual void setText(UText *text, UErrorCode &status) = 0; - - /** - * Change the text over which this operates. The text boundary is - * reset to the start. - * Note that setText(UText *) provides similar functionality to this function, - * and is more efficient. - * @param it The CharacterIterator used to change the text. - * @stable ICU 2.0 - */ - virtual void adoptText(CharacterIterator* it) = 0; - - enum { - /** - * DONE is returned by previous() and next() after all valid - * boundaries have been returned. - * @stable ICU 2.0 - */ - DONE = (int32_t)-1 - }; - - /** - * Sets the current iteration position to the beginning of the text, position zero. - * @return The offset of the beginning of the text, zero. - * @stable ICU 2.0 - */ - virtual int32_t first(void) = 0; - - /** - * Set the iterator position to the index immediately BEYOND the last character in the text being scanned. - * @return The index immediately BEYOND the last character in the text being scanned. - * @stable ICU 2.0 - */ - virtual int32_t last(void) = 0; - - /** - * Set the iterator position to the boundary preceding the current boundary. - * @return The character index of the previous text boundary or DONE if all - * boundaries have been returned. - * @stable ICU 2.0 - */ - virtual int32_t previous(void) = 0; - - /** - * Advance the iterator to the boundary following the current boundary. - * @return The character index of the next text boundary or DONE if all - * boundaries have been returned. - * @stable ICU 2.0 - */ - virtual int32_t next(void) = 0; - - /** - * Return character index of the current iterator position within the text. - * @return The boundary most recently returned. - * @stable ICU 2.0 - */ - virtual int32_t current(void) const = 0; - - /** - * Advance the iterator to the first boundary following the specified offset. - * The value returned is always greater than the offset or - * the value BreakIterator.DONE - * @param offset the offset to begin scanning. - * @return The first boundary after the specified offset. - * @stable ICU 2.0 - */ - virtual int32_t following(int32_t offset) = 0; - - /** - * Set the iterator position to the first boundary preceding the specified offset. - * The value returned is always smaller than the offset or - * the value BreakIterator.DONE - * @param offset the offset to begin scanning. - * @return The first boundary before the specified offset. - * @stable ICU 2.0 - */ - virtual int32_t preceding(int32_t offset) = 0; - - /** - * Return true if the specified position is a boundary position. - * As a side effect, the current position of the iterator is set - * to the first boundary position at or following the specified offset. - * @param offset the offset to check. - * @return True if "offset" is a boundary position. - * @stable ICU 2.0 - */ - virtual UBool isBoundary(int32_t offset) = 0; - - /** - * Set the iterator position to the nth boundary from the current boundary - * @param n the number of boundaries to move by. A value of 0 - * does nothing. Negative values move to previous boundaries - * and positive values move to later boundaries. - * @return The new iterator position, or - * DONE if there are fewer than |n| boundaries in the specified direction. - * @stable ICU 2.0 - */ - virtual int32_t next(int32_t n) = 0; - - /** - * For RuleBasedBreakIterators, return the status tag from the break rule - * that determined the boundary at the current iteration position. - *

- * For break iterator types that do not support a rule status, - * a default value of 0 is returned. - *

- * @return the status from the break rule that determined the boundary at - * the current iteration position. - * @see RuleBaseBreakIterator::getRuleStatus() - * @see UWordBreak - * @stable ICU 52 - */ - virtual int32_t getRuleStatus() const; - - /** - * For RuleBasedBreakIterators, get the status (tag) values from the break rule(s) - * that determined the boundary at the current iteration position. - *

- * For break iterator types that do not support rule status, - * no values are returned. - *

- * The returned status value(s) are stored into an array provided by the caller. - * The values are stored in sorted (ascending) order. - * If the capacity of the output array is insufficient to hold the data, - * the output will be truncated to the available length, and a - * U_BUFFER_OVERFLOW_ERROR will be signaled. - *

- * @see RuleBaseBreakIterator::getRuleStatusVec - * - * @param fillInVec an array to be filled in with the status values. - * @param capacity the length of the supplied vector. A length of zero causes - * the function to return the number of status values, in the - * normal way, without attempting to store any values. - * @param status receives error codes. - * @return The number of rule status values from rules that determined - * the boundary at the current iteration position. - * In the event of a U_BUFFER_OVERFLOW_ERROR, the return value - * is the total number of status values that were available, - * not the reduced number that were actually returned. - * @see getRuleStatus - * @stable ICU 52 - */ - virtual int32_t getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status); - - /** - * Create BreakIterator for word-breaks using the given locale. - * Returns an instance of a BreakIterator implementing word breaks. - * WordBreak is useful for word selection (ex. double click) - * @param where the locale. - * @param status the error code - * @return A BreakIterator for word-breaks. The UErrorCode& status - * parameter is used to return status information to the user. - * To check whether the construction succeeded or not, you should check - * the value of U_SUCCESS(err). If you wish more detailed information, you - * can check for informational error results which still indicate success. - * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For - * example, 'de_CH' was requested, but nothing was found there, so 'de' was - * used. U_USING_DEFAULT_WARNING indicates that the default locale data was - * used; neither the requested locale nor any of its fall back locales - * could be found. - * The caller owns the returned object and is responsible for deleting it. - * @stable ICU 2.0 - */ - static BreakIterator* U_EXPORT2 - createWordInstance(const Locale& where, UErrorCode& status); - - /** - * Create BreakIterator for line-breaks using specified locale. - * Returns an instance of a BreakIterator implementing line breaks. Line - * breaks are logically possible line breaks, actual line breaks are - * usually determined based on display width. - * LineBreak is useful for word wrapping text. - * @param where the locale. - * @param status The error code. - * @return A BreakIterator for line-breaks. The UErrorCode& status - * parameter is used to return status information to the user. - * To check whether the construction succeeded or not, you should check - * the value of U_SUCCESS(err). If you wish more detailed information, you - * can check for informational error results which still indicate success. - * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For - * example, 'de_CH' was requested, but nothing was found there, so 'de' was - * used. U_USING_DEFAULT_WARNING indicates that the default locale data was - * used; neither the requested locale nor any of its fall back locales - * could be found. - * The caller owns the returned object and is responsible for deleting it. - * @stable ICU 2.0 - */ - static BreakIterator* U_EXPORT2 - createLineInstance(const Locale& where, UErrorCode& status); - - /** - * Create BreakIterator for character-breaks using specified locale - * Returns an instance of a BreakIterator implementing character breaks. - * Character breaks are boundaries of combining character sequences. - * @param where the locale. - * @param status The error code. - * @return A BreakIterator for character-breaks. The UErrorCode& status - * parameter is used to return status information to the user. - * To check whether the construction succeeded or not, you should check - * the value of U_SUCCESS(err). If you wish more detailed information, you - * can check for informational error results which still indicate success. - * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For - * example, 'de_CH' was requested, but nothing was found there, so 'de' was - * used. U_USING_DEFAULT_WARNING indicates that the default locale data was - * used; neither the requested locale nor any of its fall back locales - * could be found. - * The caller owns the returned object and is responsible for deleting it. - * @stable ICU 2.0 - */ - static BreakIterator* U_EXPORT2 - createCharacterInstance(const Locale& where, UErrorCode& status); - - /** - * Create BreakIterator for sentence-breaks using specified locale - * Returns an instance of a BreakIterator implementing sentence breaks. - * @param where the locale. - * @param status The error code. - * @return A BreakIterator for sentence-breaks. The UErrorCode& status - * parameter is used to return status information to the user. - * To check whether the construction succeeded or not, you should check - * the value of U_SUCCESS(err). If you wish more detailed information, you - * can check for informational error results which still indicate success. - * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For - * example, 'de_CH' was requested, but nothing was found there, so 'de' was - * used. U_USING_DEFAULT_WARNING indicates that the default locale data was - * used; neither the requested locale nor any of its fall back locales - * could be found. - * The caller owns the returned object and is responsible for deleting it. - * @stable ICU 2.0 - */ - static BreakIterator* U_EXPORT2 - createSentenceInstance(const Locale& where, UErrorCode& status); - -#ifndef U_HIDE_DEPRECATED_API - /** - * Create BreakIterator for title-casing breaks using the specified locale - * Returns an instance of a BreakIterator implementing title breaks. - * The iterator returned locates title boundaries as described for - * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration, - * please use a word boundary iterator. See {@link #createWordInstance }. - * - * @param where the locale. - * @param status The error code. - * @return A BreakIterator for title-breaks. The UErrorCode& status - * parameter is used to return status information to the user. - * To check whether the construction succeeded or not, you should check - * the value of U_SUCCESS(err). If you wish more detailed information, you - * can check for informational error results which still indicate success. - * U_USING_FALLBACK_WARNING indicates that a fall back locale was used. For - * example, 'de_CH' was requested, but nothing was found there, so 'de' was - * used. U_USING_DEFAULT_WARNING indicates that the default locale data was - * used; neither the requested locale nor any of its fall back locales - * could be found. - * The caller owns the returned object and is responsible for deleting it. - * @deprecated ICU 64 Use createWordInstance instead. - */ - static BreakIterator* U_EXPORT2 - createTitleInstance(const Locale& where, UErrorCode& status); -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Get the set of Locales for which TextBoundaries are installed. - *

Note: this will not return locales added through the register - * call. To see the registered locales too, use the getAvailableLocales - * function that returns a StringEnumeration object

- * @param count the output parameter of number of elements in the locale list - * @return available locales - * @stable ICU 2.0 - */ - static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); - - /** - * Get name of the object for the desired Locale, in the desired language. - * @param objectLocale must be from getAvailableLocales. - * @param displayLocale specifies the desired locale for output. - * @param name the fill-in parameter of the return value - * Uses best match. - * @return user-displayable name - * @stable ICU 2.0 - */ - static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale, - const Locale& displayLocale, - UnicodeString& name); - - /** - * Get name of the object for the desired Locale, in the language of the - * default locale. - * @param objectLocale must be from getMatchingLocales - * @param name the fill-in parameter of the return value - * @return user-displayable name - * @stable ICU 2.0 - */ - static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale, - UnicodeString& name); - - /** - * Deprecated functionality. Use clone() instead. - * - * Thread safe client-buffer-based cloning operation - * Do NOT call delete on a safeclone, since 'new' is not used to create it. - * @param stackBuffer user allocated space for the new clone. If NULL new memory will be allocated. - * If buffer is not large enough, new memory will be allocated. - * @param BufferSize reference to size of allocated space. - * If BufferSize == 0, a sufficient size for use in cloning will - * be returned ('pre-flighting') - * If BufferSize is not enough for a stack-based safe clone, - * new memory will be allocated. - * @param status to indicate whether the operation went on smoothly or there were errors - * An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used if any allocations were - * necessary. - * @return pointer to the new clone - * - * @deprecated ICU 52. Use clone() instead. - */ - virtual BreakIterator * createBufferClone(void *stackBuffer, - int32_t &BufferSize, - UErrorCode &status) = 0; - -#ifndef U_HIDE_DEPRECATED_API - - /** - * Determine whether the BreakIterator was created in user memory by - * createBufferClone(), and thus should not be deleted. Such objects - * must be closed by an explicit call to the destructor (not delete). - * @deprecated ICU 52. Always delete the BreakIterator. - */ - inline UBool isBufferClone(void); - -#endif /* U_HIDE_DEPRECATED_API */ - -#if !UCONFIG_NO_SERVICE - /** - * Register a new break iterator of the indicated kind, to use in the given locale. - * The break iterator will be adopted. Clones of the iterator will be returned - * if a request for a break iterator of the given kind matches or falls back to - * this locale. - * Because ICU may choose to cache BreakIterators internally, this must - * be called at application startup, prior to any calls to - * BreakIterator::createXXXInstance to avoid undefined behavior. - * @param toAdopt the BreakIterator instance to be adopted - * @param locale the Locale for which this instance is to be registered - * @param kind the type of iterator for which this instance is to be registered - * @param status the in/out status code, no special meanings are assigned - * @return a registry key that can be used to unregister this instance - * @stable ICU 2.4 - */ - static URegistryKey U_EXPORT2 registerInstance(BreakIterator* toAdopt, - const Locale& locale, - UBreakIteratorType kind, - UErrorCode& status); - - /** - * Unregister a previously-registered BreakIterator using the key returned from the - * register call. Key becomes invalid after a successful call and should not be used again. - * The BreakIterator corresponding to the key will be deleted. - * Because ICU may choose to cache BreakIterators internally, this should - * be called during application shutdown, after all calls to - * BreakIterator::createXXXInstance to avoid undefined behavior. - * @param key the registry key returned by a previous call to registerInstance - * @param status the in/out status code, no special meanings are assigned - * @return TRUE if the iterator for the key was successfully unregistered - * @stable ICU 2.4 - */ - static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status); - - /** - * Return a StringEnumeration over the locales available at the time of the call, - * including registered locales. - * @return a StringEnumeration over the locales available at the time of the call - * @stable ICU 2.4 - */ - static StringEnumeration* U_EXPORT2 getAvailableLocales(void); -#endif - - /** - * Returns the locale for this break iterator. Two flavors are available: valid and - * actual locale. - * @stable ICU 2.8 - */ - Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const; - -#ifndef U_HIDE_INTERNAL_API - /** Get the locale for this break iterator object. You can choose between valid and actual locale. - * @param type type of the locale we're looking for (valid or actual) - * @param status error code for the operation - * @return the locale - * @internal - */ - const char *getLocaleID(ULocDataLocaleType type, UErrorCode& status) const; -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Set the subject text string upon which the break iterator is operating - * without changing any other aspect of the matching state. - * The new and previous text strings must have the same content. - * - * This function is intended for use in environments where ICU is operating on - * strings that may move around in memory. It provides a mechanism for notifying - * ICU that the string has been relocated, and providing a new UText to access the - * string in its new position. - * - * Note that the break iterator implementation never copies the underlying text - * of a string being processed, but always operates directly on the original text - * provided by the user. Refreshing simply drops the references to the old text - * and replaces them with references to the new. - * - * Caution: this function is normally used only by very specialized, - * system-level code. One example use case is with garbage collection that moves - * the text in memory. - * - * @param input The new (moved) text string. - * @param status Receives errors detected by this function. - * @return *this - * - * @stable ICU 49 - */ - virtual BreakIterator &refreshInputText(UText *input, UErrorCode &status) = 0; - -#ifndef U_HIDE_INTERNAL_API - /** - * Set the ULineWordOptions for this break iterator. - * @param lineWordOpts The ULineWordOptions to set. - * @internal Apple only - */ - void setLineWordOpts(ULineWordOptions lineWordOpts); -#endif /* U_HIDE_INTERNAL_API */ - - private: - static BreakIterator* buildInstance(const Locale& loc, const char *type, UErrorCode& status); - static BreakIterator* createInstance(const Locale& loc, int32_t kind, UErrorCode& status); - static BreakIterator* makeInstance(const Locale& loc, int32_t kind, UErrorCode& status); - - friend class ICUBreakIteratorFactory; - friend class ICUBreakIteratorService; - -protected: - // Do not enclose protected default/copy constructors with #ifndef U_HIDE_INTERNAL_API - // or else the compiler will create a public ones. - /** @internal */ - BreakIterator(); - /** @internal */ - BreakIterator (const BreakIterator &other); -#ifndef U_HIDE_INTERNAL_API - /** @internal */ - BreakIterator (const Locale& valid, const Locale &actual); - /** @internal. Assignment Operator, used by RuleBasedBreakIterator. */ - BreakIterator &operator = (const BreakIterator &other); -#endif /* U_HIDE_INTERNAL_API */ - ULineWordOptions fLineWordOpts; - -private: - - /** @internal (private) */ - char actualLocale[ULOC_FULLNAME_CAPACITY]; - char validLocale[ULOC_FULLNAME_CAPACITY]; -}; - -inline void BreakIterator::setLineWordOpts(ULineWordOptions lineWordOpts) -{ - fLineWordOpts = lineWordOpts; -} - -#ifndef U_HIDE_DEPRECATED_API - -inline UBool BreakIterator::isBufferClone() -{ - return FALSE; -} - -#endif /* U_HIDE_DEPRECATED_API */ - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ - -#endif // BRKITER_H -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/bytestream.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/bytestream.h deleted file mode 100644 index b12e64d736..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/bytestream.h +++ /dev/null @@ -1,272 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -// Copyright (C) 2009-2012, International Business Machines -// Corporation and others. All Rights Reserved. -// -// Copyright 2007 Google Inc. All Rights Reserved. -// Author: sanjay@google.com (Sanjay Ghemawat) -// -// Abstract interface that consumes a sequence of bytes (ByteSink). -// -// Used so that we can write a single piece of code that can operate -// on a variety of output string types. -// -// Various implementations of this interface are provided: -// ByteSink: -// CheckedArrayByteSink Write to a flat array, with bounds checking -// StringByteSink Write to an STL string - -// This code is a contribution of Google code, and the style used here is -// a compromise between the original Google code and the ICU coding guidelines. -// For example, data types are ICU-ified (size_t,int->int32_t), -// and API comments doxygen-ified, but function names and behavior are -// as in the original, if possible. -// Assertion-style error handling, not available in ICU, was changed to -// parameter "pinning" similar to UnicodeString. -// -// In addition, this is only a partial port of the original Google code, -// limited to what was needed so far. The (nearly) complete original code -// is in the ICU svn repository at icuhtml/trunk/design/strings/contrib -// (see ICU ticket 6765, r25517). - -#ifndef __BYTESTREAM_H__ -#define __BYTESTREAM_H__ - -/** - * \file - * \brief C++ API: Interface for writing bytes, and implementation classes. - */ - -#include "unicode/utypes.h" -#include "unicode/uobject.h" -#include "unicode/std_string.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * A ByteSink can be filled with bytes. - * @stable ICU 4.2 - */ -class U_COMMON_API ByteSink : public UMemory { -public: - /** - * Default constructor. - * @stable ICU 4.2 - */ - ByteSink() { } - /** - * Virtual destructor. - * @stable ICU 4.2 - */ - virtual ~ByteSink(); - - /** - * Append "bytes[0,n-1]" to this. - * @param bytes the pointer to the bytes - * @param n the number of bytes; must be non-negative - * @stable ICU 4.2 - */ - virtual void Append(const char* bytes, int32_t n) = 0; - - /** - * Returns a writable buffer for appending and writes the buffer's capacity to - * *result_capacity. Guarantees *result_capacity>=min_capacity. - * May return a pointer to the caller-owned scratch buffer which must have - * scratch_capacity>=min_capacity. - * The returned buffer is only valid until the next operation - * on this ByteSink. - * - * After writing at most *result_capacity bytes, call Append() with the - * pointer returned from this function and the number of bytes written. - * Many Append() implementations will avoid copying bytes if this function - * returned an internal buffer. - * - * Partial usage example: - * int32_t capacity; - * char* buffer = sink->GetAppendBuffer(..., &capacity); - * ... Write n bytes into buffer, with n <= capacity. - * sink->Append(buffer, n); - * In many implementations, that call to Append will avoid copying bytes. - * - * If the ByteSink allocates or reallocates an internal buffer, it should use - * the desired_capacity_hint if appropriate. - * If a caller cannot provide a reasonable guess at the desired capacity, - * it should pass desired_capacity_hint=0. - * - * If a non-scratch buffer is returned, the caller may only pass - * a prefix to it to Append(). - * That is, it is not correct to pass an interior pointer to Append(). - * - * The default implementation always returns the scratch buffer. - * - * @param min_capacity required minimum capacity of the returned buffer; - * must be non-negative - * @param desired_capacity_hint desired capacity of the returned buffer; - * must be non-negative - * @param scratch default caller-owned buffer - * @param scratch_capacity capacity of the scratch buffer - * @param result_capacity pointer to an integer which will be set to the - * capacity of the returned buffer - * @return a buffer with *result_capacity>=min_capacity - * @stable ICU 4.2 - */ - virtual char* GetAppendBuffer(int32_t min_capacity, - int32_t desired_capacity_hint, - char* scratch, int32_t scratch_capacity, - int32_t* result_capacity); - - /** - * Flush internal buffers. - * Some byte sinks use internal buffers or provide buffering - * and require calling Flush() at the end of the stream. - * The ByteSink should be ready for further Append() calls after Flush(). - * The default implementation of Flush() does nothing. - * @stable ICU 4.2 - */ - virtual void Flush(); - -private: - ByteSink(const ByteSink &) = delete; - ByteSink &operator=(const ByteSink &) = delete; -}; - -// ------------------------------------------------------------- -// Some standard implementations - -/** - * Implementation of ByteSink that writes to a flat byte array, - * with bounds-checking: - * This sink will not write more than capacity bytes to outbuf. - * If more than capacity bytes are Append()ed, then excess bytes are ignored, - * and Overflowed() will return true. - * Overflow does not cause a runtime error. - * @stable ICU 4.2 - */ -class U_COMMON_API CheckedArrayByteSink : public ByteSink { -public: - /** - * Constructs a ByteSink that will write to outbuf[0..capacity-1]. - * @param outbuf buffer to write to - * @param capacity size of the buffer - * @stable ICU 4.2 - */ - CheckedArrayByteSink(char* outbuf, int32_t capacity); - /** - * Destructor. - * @stable ICU 4.2 - */ - virtual ~CheckedArrayByteSink(); - /** - * Returns the sink to its original state, without modifying the buffer. - * Useful for reusing both the buffer and the sink for multiple streams. - * Resets the state to NumberOfBytesWritten()=NumberOfBytesAppended()=0 - * and Overflowed()=FALSE. - * @return *this - * @stable ICU 4.6 - */ - virtual CheckedArrayByteSink& Reset(); - /** - * Append "bytes[0,n-1]" to this. - * @param bytes the pointer to the bytes - * @param n the number of bytes; must be non-negative - * @stable ICU 4.2 - */ - virtual void Append(const char* bytes, int32_t n); - /** - * Returns a writable buffer for appending and writes the buffer's capacity to - * *result_capacity. For details see the base class documentation. - * @param min_capacity required minimum capacity of the returned buffer; - * must be non-negative - * @param desired_capacity_hint desired capacity of the returned buffer; - * must be non-negative - * @param scratch default caller-owned buffer - * @param scratch_capacity capacity of the scratch buffer - * @param result_capacity pointer to an integer which will be set to the - * capacity of the returned buffer - * @return a buffer with *result_capacity>=min_capacity - * @stable ICU 4.2 - */ - virtual char* GetAppendBuffer(int32_t min_capacity, - int32_t desired_capacity_hint, - char* scratch, int32_t scratch_capacity, - int32_t* result_capacity); - /** - * Returns the number of bytes actually written to the sink. - * @return number of bytes written to the buffer - * @stable ICU 4.2 - */ - int32_t NumberOfBytesWritten() const { return size_; } - /** - * Returns true if any bytes were discarded, i.e., if there was an - * attempt to write more than 'capacity' bytes. - * @return TRUE if more than 'capacity' bytes were Append()ed - * @stable ICU 4.2 - */ - UBool Overflowed() const { return overflowed_; } - /** - * Returns the number of bytes appended to the sink. - * If Overflowed() then NumberOfBytesAppended()>NumberOfBytesWritten() - * else they return the same number. - * @return number of bytes written to the buffer - * @stable ICU 4.6 - */ - int32_t NumberOfBytesAppended() const { return appended_; } -private: - char* outbuf_; - const int32_t capacity_; - int32_t size_; - int32_t appended_; - UBool overflowed_; - - CheckedArrayByteSink() = delete; - CheckedArrayByteSink(const CheckedArrayByteSink &) = delete; - CheckedArrayByteSink &operator=(const CheckedArrayByteSink &) = delete; -}; - -/** - * Implementation of ByteSink that writes to a "string". - * The StringClass is usually instantiated with a std::string. - * @stable ICU 4.2 - */ -template -class StringByteSink : public ByteSink { - public: - /** - * Constructs a ByteSink that will append bytes to the dest string. - * @param dest pointer to string object to append to - * @stable ICU 4.2 - */ - StringByteSink(StringClass* dest) : dest_(dest) { } - /** - * Constructs a ByteSink that reserves append capacity and will append bytes to the dest string. - * - * @param dest pointer to string object to append to - * @param initialAppendCapacity capacity beyond dest->length() to be reserve()d - * @stable ICU 60 - */ - StringByteSink(StringClass* dest, int32_t initialAppendCapacity) : dest_(dest) { - if (initialAppendCapacity > 0 && - (uint32_t)initialAppendCapacity > (dest->capacity() - dest->length())) { - dest->reserve(dest->length() + initialAppendCapacity); - } - } - /** - * Append "bytes[0,n-1]" to this. - * @param data the pointer to the bytes - * @param n the number of bytes; must be non-negative - * @stable ICU 4.2 - */ - virtual void Append(const char* data, int32_t n) { dest_->append(data, n); } - private: - StringClass* dest_; - - StringByteSink() = delete; - StringByteSink(const StringByteSink &) = delete; - StringByteSink &operator=(const StringByteSink &) = delete; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // __BYTESTREAM_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/bytestrie.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/bytestrie.h deleted file mode 100644 index 56b41b6fa8..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/bytestrie.h +++ /dev/null @@ -1,522 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2010-2012, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* file name: bytestrie.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2010sep25 -* created by: Markus W. Scherer -*/ - -#ifndef __BYTESTRIE_H__ -#define __BYTESTRIE_H__ - -/** - * \file - * \brief C++ API: Trie for mapping byte sequences to integer values. - */ - -#include "unicode/utypes.h" -#include "unicode/stringpiece.h" -#include "unicode/uobject.h" -#include "unicode/ustringtrie.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class ByteSink; -class BytesTrieBuilder; -class CharString; -class UVector32; - -/** - * Light-weight, non-const reader class for a BytesTrie. - * Traverses a byte-serialized data structure with minimal state, - * for mapping byte sequences to non-negative integer values. - * - * This class owns the serialized trie data only if it was constructed by - * the builder's build() method. - * The public constructor and the copy constructor only alias the data (only copy the pointer). - * There is no assignment operator. - * - * This class is not intended for public subclassing. - * @stable ICU 4.8 - */ -class U_COMMON_API BytesTrie : public UMemory { -public: - /** - * Constructs a BytesTrie reader instance. - * - * The trieBytes must contain a copy of a byte sequence from the BytesTrieBuilder, - * starting with the first byte of that sequence. - * The BytesTrie object will not read more bytes than - * the BytesTrieBuilder generated in the corresponding build() call. - * - * The array is not copied/cloned and must not be modified while - * the BytesTrie object is in use. - * - * @param trieBytes The byte array that contains the serialized trie. - * @stable ICU 4.8 - */ - BytesTrie(const void *trieBytes) - : ownedArray_(NULL), bytes_(static_cast(trieBytes)), - pos_(bytes_), remainingMatchLength_(-1) {} - - /** - * Destructor. - * @stable ICU 4.8 - */ - ~BytesTrie(); - - /** - * Copy constructor, copies the other trie reader object and its state, - * but not the byte array which will be shared. (Shallow copy.) - * @param other Another BytesTrie object. - * @stable ICU 4.8 - */ - BytesTrie(const BytesTrie &other) - : ownedArray_(NULL), bytes_(other.bytes_), - pos_(other.pos_), remainingMatchLength_(other.remainingMatchLength_) {} - - /** - * Resets this trie to its initial state. - * @return *this - * @stable ICU 4.8 - */ - BytesTrie &reset() { - pos_=bytes_; - remainingMatchLength_=-1; - return *this; - } - - /** - * BytesTrie state object, for saving a trie's current state - * and resetting the trie back to this state later. - * @stable ICU 4.8 - */ - class State : public UMemory { - public: - /** - * Constructs an empty State. - * @stable ICU 4.8 - */ - State() { bytes=NULL; } - private: - friend class BytesTrie; - - const uint8_t *bytes; - const uint8_t *pos; - int32_t remainingMatchLength; - }; - - /** - * Saves the state of this trie. - * @param state The State object to hold the trie's state. - * @return *this - * @see resetToState - * @stable ICU 4.8 - */ - const BytesTrie &saveState(State &state) const { - state.bytes=bytes_; - state.pos=pos_; - state.remainingMatchLength=remainingMatchLength_; - return *this; - } - - /** - * Resets this trie to the saved state. - * If the state object contains no state, or the state of a different trie, - * then this trie remains unchanged. - * @param state The State object which holds a saved trie state. - * @return *this - * @see saveState - * @see reset - * @stable ICU 4.8 - */ - BytesTrie &resetToState(const State &state) { - if(bytes_==state.bytes && bytes_!=NULL) { - pos_=state.pos; - remainingMatchLength_=state.remainingMatchLength; - } - return *this; - } - - /** - * Determines whether the byte sequence so far matches, whether it has a value, - * and whether another input byte can continue a matching byte sequence. - * @return The match/value Result. - * @stable ICU 4.8 - */ - UStringTrieResult current() const; - - /** - * Traverses the trie from the initial state for this input byte. - * Equivalent to reset().next(inByte). - * @param inByte Input byte value. Values -0x100..-1 are treated like 0..0xff. - * Values below -0x100 and above 0xff will never match. - * @return The match/value Result. - * @stable ICU 4.8 - */ - inline UStringTrieResult first(int32_t inByte) { - remainingMatchLength_=-1; - if(inByte<0) { - inByte+=0x100; - } - return nextImpl(bytes_, inByte); - } - - /** - * Traverses the trie from the current state for this input byte. - * @param inByte Input byte value. Values -0x100..-1 are treated like 0..0xff. - * Values below -0x100 and above 0xff will never match. - * @return The match/value Result. - * @stable ICU 4.8 - */ - UStringTrieResult next(int32_t inByte); - - /** - * Traverses the trie from the current state for this byte sequence. - * Equivalent to - * \code - * Result result=current(); - * for(each c in s) - * if(!USTRINGTRIE_HAS_NEXT(result)) return USTRINGTRIE_NO_MATCH; - * result=next(c); - * return result; - * \endcode - * @param s A string or byte sequence. Can be NULL if length is 0. - * @param length The length of the byte sequence. Can be -1 if NUL-terminated. - * @return The match/value Result. - * @stable ICU 4.8 - */ - UStringTrieResult next(const char *s, int32_t length); - - /** - * Returns a matching byte sequence's value if called immediately after - * current()/first()/next() returned USTRINGTRIE_INTERMEDIATE_VALUE or USTRINGTRIE_FINAL_VALUE. - * getValue() can be called multiple times. - * - * Do not call getValue() after USTRINGTRIE_NO_MATCH or USTRINGTRIE_NO_VALUE! - * @return The value for the byte sequence so far. - * @stable ICU 4.8 - */ - inline int32_t getValue() const { - const uint8_t *pos=pos_; - int32_t leadByte=*pos++; - // U_ASSERT(leadByte>=kMinValueLead); - return readValue(pos, leadByte>>1); - } - - /** - * Determines whether all byte sequences reachable from the current state - * map to the same value. - * @param uniqueValue Receives the unique value, if this function returns TRUE. - * (output-only) - * @return TRUE if all byte sequences reachable from the current state - * map to the same value. - * @stable ICU 4.8 - */ - inline UBool hasUniqueValue(int32_t &uniqueValue) const { - const uint8_t *pos=pos_; - // Skip the rest of a pending linear-match node. - return pos!=NULL && findUniqueValue(pos+remainingMatchLength_+1, FALSE, uniqueValue); - } - - /** - * Finds each byte which continues the byte sequence from the current state. - * That is, each byte b for which it would be next(b)!=USTRINGTRIE_NO_MATCH now. - * @param out Each next byte is appended to this object. - * (Only uses the out.Append(s, length) method.) - * @return the number of bytes which continue the byte sequence from here - * @stable ICU 4.8 - */ - int32_t getNextBytes(ByteSink &out) const; - - /** - * Iterator for all of the (byte sequence, value) pairs in a BytesTrie. - * @stable ICU 4.8 - */ - class U_COMMON_API Iterator : public UMemory { - public: - /** - * Iterates from the root of a byte-serialized BytesTrie. - * @param trieBytes The trie bytes. - * @param maxStringLength If 0, the iterator returns full strings/byte sequences. - * Otherwise, the iterator returns strings with this maximum length. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @stable ICU 4.8 - */ - Iterator(const void *trieBytes, int32_t maxStringLength, UErrorCode &errorCode); - - /** - * Iterates from the current state of the specified BytesTrie. - * @param trie The trie whose state will be copied for iteration. - * @param maxStringLength If 0, the iterator returns full strings/byte sequences. - * Otherwise, the iterator returns strings with this maximum length. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @stable ICU 4.8 - */ - Iterator(const BytesTrie &trie, int32_t maxStringLength, UErrorCode &errorCode); - - /** - * Destructor. - * @stable ICU 4.8 - */ - ~Iterator(); - - /** - * Resets this iterator to its initial state. - * @return *this - * @stable ICU 4.8 - */ - Iterator &reset(); - - /** - * @return TRUE if there are more elements. - * @stable ICU 4.8 - */ - UBool hasNext() const; - - /** - * Finds the next (byte sequence, value) pair if there is one. - * - * If the byte sequence is truncated to the maximum length and does not - * have a real value, then the value is set to -1. - * In this case, this "not a real value" is indistinguishable from - * a real value of -1. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return TRUE if there is another element. - * @stable ICU 4.8 - */ - UBool next(UErrorCode &errorCode); - - /** - * @return The NUL-terminated byte sequence for the last successful next(). - * @stable ICU 4.8 - */ - StringPiece getString() const; - /** - * @return The value for the last successful next(). - * @stable ICU 4.8 - */ - int32_t getValue() const { return value_; } - - private: - UBool truncateAndStop(); - - const uint8_t *branchNext(const uint8_t *pos, int32_t length, UErrorCode &errorCode); - - const uint8_t *bytes_; - const uint8_t *pos_; - const uint8_t *initialPos_; - int32_t remainingMatchLength_; - int32_t initialRemainingMatchLength_; - - CharString *str_; - int32_t maxLength_; - int32_t value_; - - // The stack stores pairs of integers for backtracking to another - // outbound edge of a branch node. - // The first integer is an offset from bytes_. - // The second integer has the str_->length() from before the node in bits 15..0, - // and the remaining branch length in bits 24..16. (Bits 31..25 are unused.) - // (We could store the remaining branch length minus 1 in bits 23..16 and not use bits 31..24, - // but the code looks more confusing that way.) - UVector32 *stack_; - }; - -private: - friend class BytesTrieBuilder; - - /** - * Constructs a BytesTrie reader instance. - * Unlike the public constructor which just aliases an array, - * this constructor adopts the builder's array. - * This constructor is only called by the builder. - */ - BytesTrie(void *adoptBytes, const void *trieBytes) - : ownedArray_(static_cast(adoptBytes)), - bytes_(static_cast(trieBytes)), - pos_(bytes_), remainingMatchLength_(-1) {} - - // No assignment operator. - BytesTrie &operator=(const BytesTrie &other); - - inline void stop() { - pos_=NULL; - } - - // Reads a compact 32-bit integer. - // pos is already after the leadByte, and the lead byte is already shifted right by 1. - static int32_t readValue(const uint8_t *pos, int32_t leadByte); - static inline const uint8_t *skipValue(const uint8_t *pos, int32_t leadByte) { - // U_ASSERT(leadByte>=kMinValueLead); - if(leadByte>=(kMinTwoByteValueLead<<1)) { - if(leadByte<(kMinThreeByteValueLead<<1)) { - ++pos; - } else if(leadByte<(kFourByteValueLead<<1)) { - pos+=2; - } else { - pos+=3+((leadByte>>1)&1); - } - } - return pos; - } - static inline const uint8_t *skipValue(const uint8_t *pos) { - int32_t leadByte=*pos++; - return skipValue(pos, leadByte); - } - - // Reads a jump delta and jumps. - static const uint8_t *jumpByDelta(const uint8_t *pos); - - static inline const uint8_t *skipDelta(const uint8_t *pos) { - int32_t delta=*pos++; - if(delta>=kMinTwoByteDeltaLead) { - if(delta>8)+1; // 0x6c - static const int32_t kFourByteValueLead=0x7e; - - // A little more than Unicode code points. (0x11ffff) - static const int32_t kMaxThreeByteValue=((kFourByteValueLead-kMinThreeByteValueLead)<<16)-1; - - static const int32_t kFiveByteValueLead=0x7f; - - // Compact delta integers. - static const int32_t kMaxOneByteDelta=0xbf; - static const int32_t kMinTwoByteDeltaLead=kMaxOneByteDelta+1; // 0xc0 - static const int32_t kMinThreeByteDeltaLead=0xf0; - static const int32_t kFourByteDeltaLead=0xfe; - static const int32_t kFiveByteDeltaLead=0xff; - - static const int32_t kMaxTwoByteDelta=((kMinThreeByteDeltaLead-kMinTwoByteDeltaLead)<<8)-1; // 0x2fff - static const int32_t kMaxThreeByteDelta=((kFourByteDeltaLead-kMinThreeByteDeltaLead)<<16)-1; // 0xdffff - - uint8_t *ownedArray_; - - // Fixed value referencing the BytesTrie bytes. - const uint8_t *bytes_; - - // Iterator variables. - - // Pointer to next trie byte to read. NULL if no more matches. - const uint8_t *pos_; - // Remaining length of a linear-match node, minus 1. Negative if not in such a node. - int32_t remainingMatchLength_; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // __BYTESTRIE_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/bytestriebuilder.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/bytestriebuilder.h deleted file mode 100644 index 652ba55fbf..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/bytestriebuilder.h +++ /dev/null @@ -1,184 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2010-2016, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* file name: bytestriebuilder.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2010sep25 -* created by: Markus W. Scherer -*/ - -/** - * \file - * \brief C++ API: Builder for icu::BytesTrie - */ - -#ifndef __BYTESTRIEBUILDER_H__ -#define __BYTESTRIEBUILDER_H__ - -#include "unicode/utypes.h" -#include "unicode/bytestrie.h" -#include "unicode/stringpiece.h" -#include "unicode/stringtriebuilder.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class BytesTrieElement; -class CharString; -/** - * Builder class for BytesTrie. - * - * This class is not intended for public subclassing. - * @stable ICU 4.8 - */ -class U_COMMON_API BytesTrieBuilder : public StringTrieBuilder { -public: - /** - * Constructs an empty builder. - * @param errorCode Standard ICU error code. - * @stable ICU 4.8 - */ - BytesTrieBuilder(UErrorCode &errorCode); - - /** - * Destructor. - * @stable ICU 4.8 - */ - virtual ~BytesTrieBuilder(); - - /** - * Adds a (byte sequence, value) pair. - * The byte sequence must be unique. - * The bytes will be copied; the builder does not keep - * a reference to the input StringPiece or its data(). - * @param s The input byte sequence. - * @param value The value associated with this byte sequence. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return *this - * @stable ICU 4.8 - */ - BytesTrieBuilder &add(StringPiece s, int32_t value, UErrorCode &errorCode); - - /** - * Builds a BytesTrie for the add()ed data. - * Once built, no further data can be add()ed until clear() is called. - * - * A BytesTrie cannot be empty. At least one (byte sequence, value) pair - * must have been add()ed. - * - * This method passes ownership of the builder's internal result array to the new trie object. - * Another call to any build() variant will re-serialize the trie. - * After clear() has been called, a new array will be used as well. - * @param buildOption Build option, see UStringTrieBuildOption. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return A new BytesTrie for the add()ed data. - * @stable ICU 4.8 - */ - BytesTrie *build(UStringTrieBuildOption buildOption, UErrorCode &errorCode); - - /** - * Builds a BytesTrie for the add()ed data and byte-serializes it. - * Once built, no further data can be add()ed until clear() is called. - * - * A BytesTrie cannot be empty. At least one (byte sequence, value) pair - * must have been add()ed. - * - * Multiple calls to buildStringPiece() return StringPieces referring to the - * builder's same byte array, without rebuilding. - * If buildStringPiece() is called after build(), the trie will be - * re-serialized into a new array. - * If build() is called after buildStringPiece(), the trie object will become - * the owner of the previously returned array. - * After clear() has been called, a new array will be used as well. - * @param buildOption Build option, see UStringTrieBuildOption. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return A StringPiece which refers to the byte-serialized BytesTrie for the add()ed data. - * @stable ICU 4.8 - */ - StringPiece buildStringPiece(UStringTrieBuildOption buildOption, UErrorCode &errorCode); - - /** - * Removes all (byte sequence, value) pairs. - * New data can then be add()ed and a new trie can be built. - * @return *this - * @stable ICU 4.8 - */ - BytesTrieBuilder &clear(); - -private: - BytesTrieBuilder(const BytesTrieBuilder &other); // no copy constructor - BytesTrieBuilder &operator=(const BytesTrieBuilder &other); // no assignment operator - - void buildBytes(UStringTrieBuildOption buildOption, UErrorCode &errorCode); - - virtual int32_t getElementStringLength(int32_t i) const; - virtual char16_t getElementUnit(int32_t i, int32_t byteIndex) const; - virtual int32_t getElementValue(int32_t i) const; - - virtual int32_t getLimitOfLinearMatch(int32_t first, int32_t last, int32_t byteIndex) const; - - virtual int32_t countElementUnits(int32_t start, int32_t limit, int32_t byteIndex) const; - virtual int32_t skipElementsBySomeUnits(int32_t i, int32_t byteIndex, int32_t count) const; - virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t byteIndex, char16_t byte) const; - - virtual UBool matchNodesCanHaveValues() const { return FALSE; } - - virtual int32_t getMaxBranchLinearSubNodeLength() const { return BytesTrie::kMaxBranchLinearSubNodeLength; } - virtual int32_t getMinLinearMatch() const { return BytesTrie::kMinLinearMatch; } - virtual int32_t getMaxLinearMatchLength() const { return BytesTrie::kMaxLinearMatchLength; } - - /** - * @internal (private) - */ - class BTLinearMatchNode : public LinearMatchNode { - public: - BTLinearMatchNode(const char *units, int32_t len, Node *nextNode); - virtual UBool operator==(const Node &other) const; - virtual void write(StringTrieBuilder &builder); - private: - const char *s; - }; - - virtual Node *createLinearMatchNode(int32_t i, int32_t byteIndex, int32_t length, - Node *nextNode) const; - - UBool ensureCapacity(int32_t length); - virtual int32_t write(int32_t byte); - int32_t write(const char *b, int32_t length); - virtual int32_t writeElementUnits(int32_t i, int32_t byteIndex, int32_t length); - virtual int32_t writeValueAndFinal(int32_t i, UBool isFinal); - virtual int32_t writeValueAndType(UBool hasValue, int32_t value, int32_t node); - virtual int32_t writeDeltaTo(int32_t jumpTarget); - - CharString *strings; // Pointer not object so we need not #include internal charstr.h. - BytesTrieElement *elements; - int32_t elementsCapacity; - int32_t elementsLength; - - // Byte serialization of the trie. - // Grows from the back: bytesLength measures from the end of the buffer! - char *bytes; - int32_t bytesCapacity; - int32_t bytesLength; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // __BYTESTRIEBUILDER_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/calendar.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/calendar.h deleted file mode 100644 index c22328d8ef..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/calendar.h +++ /dev/null @@ -1,2543 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 1997-2014, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************** -* -* File CALENDAR.H -* -* Modification History: -* -* Date Name Description -* 04/22/97 aliu Expanded and corrected comments and other header -* contents. -* 05/01/97 aliu Made equals(), before(), after() arguments const. -* 05/20/97 aliu Replaced fAreFieldsSet with fAreFieldsInSync and -* fAreAllFieldsSet. -* 07/27/98 stephen Sync up with JDK 1.2 -* 11/15/99 weiv added YEAR_WOY and DOW_LOCAL -* to EDateFields -* 8/19/2002 srl Removed Javaisms -* 11/07/2003 srl Update, clean up documentation. -******************************************************************************** -*/ - -#ifndef CALENDAR_H -#define CALENDAR_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Calendar object - */ -#if !UCONFIG_NO_FORMATTING - -#include "unicode/uobject.h" -#include "unicode/locid.h" -#include "unicode/timezone.h" -#include "unicode/ucal.h" -#include "unicode/umisc.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class ICUServiceFactory; - -/** - * @internal - */ -typedef int32_t UFieldResolutionTable[12][8]; - -class BasicTimeZone; -/** - * `Calendar` is an abstract base class for converting between - * a `UDate` object and a set of integer fields such as - * `YEAR`, `MONTH`, `DAY`, `HOUR`, and so on. - * (A `UDate` object represents a specific instant in - * time with millisecond precision. See UDate - * for information about the `UDate` class.) - * - * Subclasses of `Calendar` interpret a `UDate` - * according to the rules of a specific calendar system. - * The most commonly used subclass of `Calendar` is - * `GregorianCalendar`. Other subclasses could represent - * the various types of lunar calendars in use in many parts of the world. - * - * **NOTE**: (ICU 2.6) The subclass interface should be considered unstable - - * it WILL change. - * - * Like other locale-sensitive classes, `Calendar` provides a - * static method, `createInstance`, for getting a generally useful - * object of this type. `Calendar`'s `createInstance` method - * returns the appropriate `Calendar` subclass whose - * time fields have been initialized with the current date and time: - * - * Calendar *rightNow = Calendar::createInstance(errCode); - * - * A `Calendar` object can produce all the time field values - * needed to implement the date-time formatting for a particular language - * and calendar style (for example, Japanese-Gregorian, Japanese-Traditional). - * - * When computing a `UDate` from time fields, some special circumstances - * may arise: there may be insufficient information to compute the - * `UDate` (such as only year and month but no day in the month), - * there may be inconsistent information (such as "Tuesday, July 15, 1996" - * -- July 15, 1996 is actually a Monday), or the input time might be ambiguous - * because of time zone transition. - * - * **Insufficient information.** The calendar will use default - * information to specify the missing fields. This may vary by calendar; for - * the Gregorian calendar, the default for a field is the same as that of the - * start of the epoch: i.e., YEAR = 1970, MONTH = JANUARY, DATE = 1, etc. - * - * **Inconsistent information.** If fields conflict, the calendar - * will give preference to fields set more recently. For example, when - * determining the day, the calendar will look for one of the following - * combinations of fields. The most recent combination, as determined by the - * most recently set single field, will be used. - * - * MONTH + DAY_OF_MONTH - * MONTH + WEEK_OF_MONTH + DAY_OF_WEEK - * MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK - * DAY_OF_YEAR - * DAY_OF_WEEK + WEEK_OF_YEAR - * - * For the time of day: - * - * HOUR_OF_DAY - * AM_PM + HOUR - * - * **Ambiguous Wall Clock Time.** When time offset from UTC has - * changed, it produces an ambiguous time slot around the transition. For example, - * many US locations observe daylight saving time. On the date switching to daylight - * saving time in US, wall clock time jumps from 12:59 AM (standard) to 2:00 AM - * (daylight). Therefore, wall clock time from 1:00 AM to 1:59 AM do not exist on - * the date. When the input wall time fall into this missing time slot, the ICU - * Calendar resolves the time using the UTC offset before the transition by default. - * In this example, 1:30 AM is interpreted as 1:30 AM standard time (non-exist), - * so the final result will be 2:30 AM daylight time. - * - * On the date switching back to standard time, wall clock time is moved back one - * hour at 2:00 AM. So wall clock time from 1:00 AM to 1:59 AM occur twice. In this - * case, the ICU Calendar resolves the time using the UTC offset after the transition - * by default. For example, 1:30 AM on the date is resolved as 1:30 AM standard time. - * - * Ambiguous wall clock time resolution behaviors can be customized by Calendar APIs - * {@link #setRepeatedWallTimeOption} and {@link #setSkippedWallTimeOption}. - * These methods are available in ICU 49 or later versions. - * - * **Note:** for some non-Gregorian calendars, different - * fields may be necessary for complete disambiguation. For example, a full - * specification of the historical Arabic astronomical calendar requires year, - * month, day-of-month *and* day-of-week in some cases. - * - * **Note:** There are certain possible ambiguities in - * interpretation of certain singular times, which are resolved in the - * following ways: - * - * 1. 24:00:00 "belongs" to the following day. That is, - * 23:59 on Dec 31, 1969 < 24:00 on Jan 1, 1970 < 24:01:00 on Jan 1, 1970 - * 2. Although historically not precise, midnight also belongs to "am", - * and noon belongs to "pm", so on the same day, - * 12:00 am (midnight) < 12:01 am, and 12:00 pm (noon) < 12:01 pm - * - * The date or time format strings are not part of the definition of a - * calendar, as those must be modifiable or overridable by the user at - * runtime. Use `DateFormat` to format dates. - * - * `Calendar` provides an API for field "rolling", where fields - * can be incremented or decremented, but wrap around. For example, rolling the - * month up in the date December 12, **1996** results in - * January 12, **1996**. - * - * `Calendar` also provides a date arithmetic function for - * adding the specified (signed) amount of time to a particular time field. - * For example, subtracting 5 days from the date `September 12, 1996` - * results in `September 7, 1996`. - * - * ***Supported range*** - * - * The allowable range of `Calendar` has been narrowed. `GregorianCalendar` used - * to attempt to support the range of dates with millisecond values from - * `Long.MIN_VALUE` to `Long.MAX_VALUE`. The new `Calendar` protocol specifies the - * maximum range of supportable dates as those having Julian day numbers - * of `-0x7F000000` to `+0x7F000000`. This corresponds to years from ~5,800,000 BCE - * to ~5,800,000 CE. Programmers should use the protected constants in `Calendar` to - * specify an extremely early or extremely late date. - * - *

- * The Japanese calendar uses a combination of era name and year number. - * When an emperor of Japan abdicates and a new emperor ascends the throne, - * a new era is declared and year number is reset to 1. Even if the date of - * abdication is scheduled ahead of time, the new era name might not be - * announced until just before the date. In such case, ICU4C may include - * a start date of future era without actual era name, but not enabled - * by default. ICU4C users who want to test the behavior of the future era - * can enable the tentative era by: - *

    - *
  • Environment variable ICU_ENABLE_TENTATIVE_ERA=true.
  • - *
- * - * @stable ICU 2.0 - */ -class U_I18N_API Calendar : public UObject { -public: - - /** - * Field IDs for date and time. Used to specify date/time fields. ERA is calendar - * specific. Example ranges given are for illustration only; see specific Calendar - * subclasses for actual ranges. - * @deprecated ICU 2.6. Use C enum UCalendarDateFields defined in ucal.h - */ - enum EDateFields { -#ifndef U_HIDE_DEPRECATED_API -/* - * ERA may be defined on other platforms. To avoid any potential problems undefined it here. - */ -#ifdef ERA -#undef ERA -#endif - ERA, // Example: 0..1 - YEAR, // Example: 1..big number - MONTH, // Example: 0..11 - WEEK_OF_YEAR, // Example: 1..53 - WEEK_OF_MONTH, // Example: 1..4 - DATE, // Example: 1..31 - DAY_OF_YEAR, // Example: 1..365 - DAY_OF_WEEK, // Example: 1..7 - DAY_OF_WEEK_IN_MONTH, // Example: 1..4, may be specified as -1 - AM_PM, // Example: 0..1 - HOUR, // Example: 0..11 - HOUR_OF_DAY, // Example: 0..23 - MINUTE, // Example: 0..59 - SECOND, // Example: 0..59 - MILLISECOND, // Example: 0..999 - ZONE_OFFSET, // Example: -12*U_MILLIS_PER_HOUR..12*U_MILLIS_PER_HOUR - DST_OFFSET, // Example: 0 or U_MILLIS_PER_HOUR - YEAR_WOY, // 'Y' Example: 1..big number - Year of Week of Year - DOW_LOCAL, // 'e' Example: 1..7 - Day of Week / Localized - - EXTENDED_YEAR, - JULIAN_DAY, - MILLISECONDS_IN_DAY, - IS_LEAP_MONTH, - - FIELD_COUNT = UCAL_FIELD_COUNT // See ucal.h for other fields. -#endif /* U_HIDE_DEPRECATED_API */ - }; - -#ifndef U_HIDE_DEPRECATED_API - /** - * Useful constant for days of week. Note: Calendar day-of-week is 1-based. Clients - * who create locale resources for the field of first-day-of-week should be aware of - * this. For instance, in US locale, first-day-of-week is set to 1, i.e., SUNDAY. - * @deprecated ICU 2.6. Use C enum UCalendarDaysOfWeek defined in ucal.h - */ - enum EDaysOfWeek { - SUNDAY = 1, - MONDAY, - TUESDAY, - WEDNESDAY, - THURSDAY, - FRIDAY, - SATURDAY - }; - - /** - * Useful constants for month. Note: Calendar month is 0-based. - * @deprecated ICU 2.6. Use C enum UCalendarMonths defined in ucal.h - */ - enum EMonths { - JANUARY, - FEBRUARY, - MARCH, - APRIL, - MAY, - JUNE, - JULY, - AUGUST, - SEPTEMBER, - OCTOBER, - NOVEMBER, - DECEMBER, - UNDECIMBER - }; - - /** - * Useful constants for hour in 12-hour clock. Used in GregorianCalendar. - * @deprecated ICU 2.6. Use C enum UCalendarAMPMs defined in ucal.h - */ - enum EAmpm { - AM, - PM - }; -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * destructor - * @stable ICU 2.0 - */ - virtual ~Calendar(); - - /** - * Create and return a polymorphic copy of this calendar. - * - * @return a polymorphic copy of this calendar. - * @stable ICU 2.0 - */ - virtual Calendar* clone(void) const = 0; - - /** - * Creates a Calendar using the default timezone and locale. Clients are responsible - * for deleting the object returned. - * - * @param success Indicates the success/failure of Calendar creation. Filled in - * with U_ZERO_ERROR if created successfully, set to a failure result - * otherwise. U_MISSING_RESOURCE_ERROR will be returned if the resource data - * requests a calendar type which has not been installed. - * @return A Calendar if created successfully. NULL otherwise. - * @stable ICU 2.0 - */ - static Calendar* U_EXPORT2 createInstance(UErrorCode& success); - - /** - * Creates a Calendar using the given timezone and the default locale. - * The Calendar takes ownership of zoneToAdopt; the - * client must not delete it. - * - * @param zoneToAdopt The given timezone to be adopted. - * @param success Indicates the success/failure of Calendar creation. Filled in - * with U_ZERO_ERROR if created successfully, set to a failure result - * otherwise. - * @return A Calendar if created successfully. NULL otherwise. - * @stable ICU 2.0 - */ - static Calendar* U_EXPORT2 createInstance(TimeZone* zoneToAdopt, UErrorCode& success); - - /** - * Creates a Calendar using the given timezone and the default locale. The TimeZone - * is _not_ adopted; the client is still responsible for deleting it. - * - * @param zone The timezone. - * @param success Indicates the success/failure of Calendar creation. Filled in - * with U_ZERO_ERROR if created successfully, set to a failure result - * otherwise. - * @return A Calendar if created successfully. NULL otherwise. - * @stable ICU 2.0 - */ - static Calendar* U_EXPORT2 createInstance(const TimeZone& zone, UErrorCode& success); - - /** - * Creates a Calendar using the default timezone and the given locale. - * - * @param aLocale The given locale. - * @param success Indicates the success/failure of Calendar creation. Filled in - * with U_ZERO_ERROR if created successfully, set to a failure result - * otherwise. - * @return A Calendar if created successfully. NULL otherwise. - * @stable ICU 2.0 - */ - static Calendar* U_EXPORT2 createInstance(const Locale& aLocale, UErrorCode& success); - - /** - * Creates a Calendar using the given timezone and given locale. - * The Calendar takes ownership of zoneToAdopt; the - * client must not delete it. - * - * @param zoneToAdopt The given timezone to be adopted. - * @param aLocale The given locale. - * @param success Indicates the success/failure of Calendar creation. Filled in - * with U_ZERO_ERROR if created successfully, set to a failure result - * otherwise. - * @return A Calendar if created successfully. NULL otherwise. - * @stable ICU 2.0 - */ - static Calendar* U_EXPORT2 createInstance(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success); - - /** - * Gets a Calendar using the given timezone and given locale. The TimeZone - * is _not_ adopted; the client is still responsible for deleting it. - * - * @param zone The given timezone. - * @param aLocale The given locale. - * @param success Indicates the success/failure of Calendar creation. Filled in - * with U_ZERO_ERROR if created successfully, set to a failure result - * otherwise. - * @return A Calendar if created successfully. NULL otherwise. - * @stable ICU 2.0 - */ - static Calendar* U_EXPORT2 createInstance(const TimeZone& zone, const Locale& aLocale, UErrorCode& success); - - /** - * Returns a list of the locales for which Calendars are installed. - * - * @param count Number of locales returned. - * @return An array of Locale objects representing the set of locales for which - * Calendars are installed. The system retains ownership of this list; - * the caller must NOT delete it. Does not include user-registered Calendars. - * @stable ICU 2.0 - */ - static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); - - - /** - * Given a key and a locale, returns an array of string values in a preferred - * order that would make a difference. These are all and only those values where - * the open (creation) of the service with the locale formed from the input locale - * plus input keyword and that value has different behavior than creation with the - * input locale alone. - * @param key one of the keys supported by this service. For now, only - * "calendar" is supported. - * @param locale the locale - * @param commonlyUsed if set to true it will return only commonly used values - * with the given locale in preferred order. Otherwise, - * it will return all the available values for the locale. - * @param status ICU Error Code - * @return a string enumeration over keyword values for the given key and the locale. - * @stable ICU 4.2 - */ - static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* key, - const Locale& locale, UBool commonlyUsed, UErrorCode& status); - - /** - * Returns the current UTC (GMT) time measured in milliseconds since 0:00:00 on 1/1/70 - * (derived from the system time). - * - * @return The current UTC time in milliseconds. - * @stable ICU 2.0 - */ - static UDate U_EXPORT2 getNow(void); - - /** - * Gets this Calendar's time as milliseconds. May involve recalculation of time due - * to previous calls to set time field values. The time specified is non-local UTC - * (GMT) time. Although this method is const, this object may actually be changed - * (semantically const). - * - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - * @return The current time in UTC (GMT) time, or zero if the operation - * failed. - * @stable ICU 2.0 - */ - inline UDate getTime(UErrorCode& status) const { return getTimeInMillis(status); } - - /** - * Sets this Calendar's current time with the given UDate. The time specified should - * be in non-local UTC (GMT) time. - * - * @param date The given UDate in UTC (GMT) time. - * @param status Output param set to success/failure code on exit. If any value - * set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - * @stable ICU 2.0 - */ - inline void setTime(UDate date, UErrorCode& status) { setTimeInMillis(date, status); } - - /** - * Compares the equality of two Calendar objects. Objects of different subclasses - * are considered unequal. This comparison is very exacting; two Calendar objects - * must be in exactly the same state to be considered equal. To compare based on the - * represented time, use equals() instead. - * - * @param that The Calendar object to be compared with. - * @return True if the given Calendar is the same as this Calendar; false - * otherwise. - * @stable ICU 2.0 - */ - virtual UBool operator==(const Calendar& that) const; - - /** - * Compares the inequality of two Calendar objects. - * - * @param that The Calendar object to be compared with. - * @return True if the given Calendar is not the same as this Calendar; false - * otherwise. - * @stable ICU 2.0 - */ - UBool operator!=(const Calendar& that) const {return !operator==(that);} - - /** - * Returns TRUE if the given Calendar object is equivalent to this - * one. An equivalent Calendar will behave exactly as this one - * does, but it may be set to a different time. By contrast, for - * the operator==() method to return TRUE, the other Calendar must - * be set to the same time. - * - * @param other the Calendar to be compared with this Calendar - * @stable ICU 2.4 - */ - virtual UBool isEquivalentTo(const Calendar& other) const; - - /** - * Compares the Calendar time, whereas Calendar::operator== compares the equality of - * Calendar objects. - * - * @param when The Calendar to be compared with this Calendar. Although this is a - * const parameter, the object may be modified physically - * (semantically const). - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - * @return True if the current time of this Calendar is equal to the time of - * Calendar when; false otherwise. - * @stable ICU 2.0 - */ - UBool equals(const Calendar& when, UErrorCode& status) const; - - /** - * Returns true if this Calendar's current time is before "when"'s current time. - * - * @param when The Calendar to be compared with this Calendar. Although this is a - * const parameter, the object may be modified physically - * (semantically const). - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - * @return True if the current time of this Calendar is before the time of - * Calendar when; false otherwise. - * @stable ICU 2.0 - */ - UBool before(const Calendar& when, UErrorCode& status) const; - - /** - * Returns true if this Calendar's current time is after "when"'s current time. - * - * @param when The Calendar to be compared with this Calendar. Although this is a - * const parameter, the object may be modified physically - * (semantically const). - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - * @return True if the current time of this Calendar is after the time of - * Calendar when; false otherwise. - * @stable ICU 2.0 - */ - UBool after(const Calendar& when, UErrorCode& status) const; - - /** - * UDate Arithmetic function. Adds the specified (signed) amount of time to the given - * time field, based on the calendar's rules. For example, to subtract 5 days from - * the current time of the calendar, call add(Calendar::DATE, -5). When adding on - * the month or Calendar::MONTH field, other fields like date might conflict and - * need to be changed. For instance, adding 1 month on the date 01/31/96 will result - * in 02/29/96. - * Adding a positive value always means moving forward in time, so for the Gregorian calendar, - * starting with 100 BC and adding +1 to year results in 99 BC (even though this actually reduces - * the numeric value of the field itself). - * - * @param field Specifies which date field to modify. - * @param amount The amount of time to be added to the field, in the natural unit - * for that field (e.g., days for the day fields, hours for the hour - * field.) - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - * @deprecated ICU 2.6. use add(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead. - */ - virtual void add(EDateFields field, int32_t amount, UErrorCode& status); - - /** - * UDate Arithmetic function. Adds the specified (signed) amount of time to the given - * time field, based on the calendar's rules. For example, to subtract 5 days from - * the current time of the calendar, call add(Calendar::DATE, -5). When adding on - * the month or Calendar::MONTH field, other fields like date might conflict and - * need to be changed. For instance, adding 1 month on the date 01/31/96 will result - * in 02/29/96. - * Adding a positive value always means moving forward in time, so for the Gregorian calendar, - * starting with 100 BC and adding +1 to year results in 99 BC (even though this actually reduces - * the numeric value of the field itself). - * - * @param field Specifies which date field to modify. - * @param amount The amount of time to be added to the field, in the natural unit - * for that field (e.g., days for the day fields, hours for the hour - * field.) - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - * @stable ICU 2.6. - */ - virtual void add(UCalendarDateFields field, int32_t amount, UErrorCode& status); - -#ifndef U_HIDE_DEPRECATED_API - /** - * Time Field Rolling function. Rolls (up/down) a single unit of time on the given - * time field. For example, to roll the current date up by one day, call - * roll(Calendar::DATE, true). When rolling on the year or Calendar::YEAR field, it - * will roll the year value in the range between getMinimum(Calendar::YEAR) and the - * value returned by getMaximum(Calendar::YEAR). When rolling on the month or - * Calendar::MONTH field, other fields like date might conflict and, need to be - * changed. For instance, rolling the month up on the date 01/31/96 will result in - * 02/29/96. Rolling up always means rolling forward in time (unless the limit of the - * field is reached, in which case it may pin or wrap), so for Gregorian calendar, - * starting with 100 BC and rolling the year up results in 99 BC. - * When eras have a definite beginning and end (as in the Chinese calendar, or as in - * most eras in the Japanese calendar) then rolling the year past either limit of the - * era will cause the year to wrap around. When eras only have a limit at one end, - * then attempting to roll the year past that limit will result in pinning the year - * at that limit. Note that for most calendars in which era 0 years move forward in - * time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to - * result in negative years for era 0 (that is the only way to represent years before - * the calendar epoch). - * When rolling on the hour-in-day or Calendar::HOUR_OF_DAY field, it will roll the - * hour value in the range between 0 and 23, which is zero-based. - *

- * NOTE: Do not use this method -- use roll(EDateFields, int, UErrorCode&) instead. - * - * @param field The time field. - * @param up Indicates if the value of the specified time field is to be rolled - * up or rolled down. Use true if rolling up, false otherwise. - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - * @deprecated ICU 2.6. Use roll(UCalendarDateFields field, UBool up, UErrorCode& status) instead. - */ - inline void roll(EDateFields field, UBool up, UErrorCode& status); -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Time Field Rolling function. Rolls (up/down) a single unit of time on the given - * time field. For example, to roll the current date up by one day, call - * roll(Calendar::DATE, true). When rolling on the year or Calendar::YEAR field, it - * will roll the year value in the range between getMinimum(Calendar::YEAR) and the - * value returned by getMaximum(Calendar::YEAR). When rolling on the month or - * Calendar::MONTH field, other fields like date might conflict and, need to be - * changed. For instance, rolling the month up on the date 01/31/96 will result in - * 02/29/96. Rolling up always means rolling forward in time (unless the limit of the - * field is reached, in which case it may pin or wrap), so for Gregorian calendar, - * starting with 100 BC and rolling the year up results in 99 BC. - * When eras have a definite beginning and end (as in the Chinese calendar, or as in - * most eras in the Japanese calendar) then rolling the year past either limit of the - * era will cause the year to wrap around. When eras only have a limit at one end, - * then attempting to roll the year past that limit will result in pinning the year - * at that limit. Note that for most calendars in which era 0 years move forward in - * time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to - * result in negative years for era 0 (that is the only way to represent years before - * the calendar epoch). - * When rolling on the hour-in-day or Calendar::HOUR_OF_DAY field, it will roll the - * hour value in the range between 0 and 23, which is zero-based. - *

- * NOTE: Do not use this method -- use roll(UCalendarDateFields, int, UErrorCode&) instead. - * - * @param field The time field. - * @param up Indicates if the value of the specified time field is to be rolled - * up or rolled down. Use true if rolling up, false otherwise. - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - * @stable ICU 2.6. - */ - inline void roll(UCalendarDateFields field, UBool up, UErrorCode& status); - - /** - * Time Field Rolling function. Rolls by the given amount on the given - * time field. For example, to roll the current date up by one day, call - * roll(Calendar::DATE, +1, status). When rolling on the month or - * Calendar::MONTH field, other fields like date might conflict and, need to be - * changed. For instance, rolling the month up on the date 01/31/96 will result in - * 02/29/96. Rolling by a positive value always means rolling forward in time (unless - * the limit of the field is reached, in which case it may pin or wrap), so for - * Gregorian calendar, starting with 100 BC and rolling the year by + 1 results in 99 BC. - * When eras have a definite beginning and end (as in the Chinese calendar, or as in - * most eras in the Japanese calendar) then rolling the year past either limit of the - * era will cause the year to wrap around. When eras only have a limit at one end, - * then attempting to roll the year past that limit will result in pinning the year - * at that limit. Note that for most calendars in which era 0 years move forward in - * time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to - * result in negative years for era 0 (that is the only way to represent years before - * the calendar epoch). - * When rolling on the hour-in-day or Calendar::HOUR_OF_DAY field, it will roll the - * hour value in the range between 0 and 23, which is zero-based. - *

- * The only difference between roll() and add() is that roll() does not change - * the value of more significant fields when it reaches the minimum or maximum - * of its range, whereas add() does. - * - * @param field The time field. - * @param amount Indicates amount to roll. - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid, this will be set to - * an error status. - * @deprecated ICU 2.6. Use roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead. - */ - virtual void roll(EDateFields field, int32_t amount, UErrorCode& status); - - /** - * Time Field Rolling function. Rolls by the given amount on the given - * time field. For example, to roll the current date up by one day, call - * roll(Calendar::DATE, +1, status). When rolling on the month or - * Calendar::MONTH field, other fields like date might conflict and, need to be - * changed. For instance, rolling the month up on the date 01/31/96 will result in - * 02/29/96. Rolling by a positive value always means rolling forward in time (unless - * the limit of the field is reached, in which case it may pin or wrap), so for - * Gregorian calendar, starting with 100 BC and rolling the year by + 1 results in 99 BC. - * When eras have a definite beginning and end (as in the Chinese calendar, or as in - * most eras in the Japanese calendar) then rolling the year past either limit of the - * era will cause the year to wrap around. When eras only have a limit at one end, - * then attempting to roll the year past that limit will result in pinning the year - * at that limit. Note that for most calendars in which era 0 years move forward in - * time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to - * result in negative years for era 0 (that is the only way to represent years before - * the calendar epoch). - * When rolling on the hour-in-day or Calendar::HOUR_OF_DAY field, it will roll the - * hour value in the range between 0 and 23, which is zero-based. - *

- * The only difference between roll() and add() is that roll() does not change - * the value of more significant fields when it reaches the minimum or maximum - * of its range, whereas add() does. - * - * @param field The time field. - * @param amount Indicates amount to roll. - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid, this will be set to - * an error status. - * @stable ICU 2.6. - */ - virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status); - - /** - * Return the difference between the given time and the time this - * calendar object is set to. If this calendar is set - * before the given time, the returned value will be - * positive. If this calendar is set after the given - * time, the returned value will be negative. The - * field parameter specifies the units of the return - * value. For example, if fieldDifference(when, - * Calendar::MONTH) returns 3, then this calendar is set to - * 3 months before when, and possibly some addition - * time less than one month. - * - *

As a side effect of this call, this calendar is advanced - * toward when by the given amount. That is, calling - * this method has the side effect of calling add(field, - * n), where n is the return value. - * - *

Usage: To use this method, call it first with the largest - * field of interest, then with progressively smaller fields. For - * example: - * - *

-     * int y = cal->fieldDifference(when, Calendar::YEAR, err);
-     * int m = cal->fieldDifference(when, Calendar::MONTH, err);
-     * int d = cal->fieldDifference(when, Calendar::DATE, err);
- * - * computes the difference between cal and - * when in years, months, and days. - * - *

Note: fieldDifference() is - * asymmetrical. That is, in the following code: - * - *

-     * cal->setTime(date1, err);
-     * int m1 = cal->fieldDifference(date2, Calendar::MONTH, err);
-     * int d1 = cal->fieldDifference(date2, Calendar::DATE, err);
-     * cal->setTime(date2, err);
-     * int m2 = cal->fieldDifference(date1, Calendar::MONTH, err);
-     * int d2 = cal->fieldDifference(date1, Calendar::DATE, err);
- * - * one might expect that m1 == -m2 && d1 == -d2. - * However, this is not generally the case, because of - * irregularities in the underlying calendar system (e.g., the - * Gregorian calendar has a varying number of days per month). - * - * @param when the date to compare this calendar's time to - * @param field the field in which to compute the result - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid, this will be set to - * an error status. - * @return the difference, either positive or negative, between - * this calendar's time and when, in terms of - * field. - * @deprecated ICU 2.6. Use fieldDifference(UDate when, UCalendarDateFields field, UErrorCode& status). - */ - virtual int32_t fieldDifference(UDate when, EDateFields field, UErrorCode& status); - - /** - * Return the difference between the given time and the time this - * calendar object is set to. If this calendar is set - * before the given time, the returned value will be - * positive. If this calendar is set after the given - * time, the returned value will be negative. The - * field parameter specifies the units of the return - * value. For example, if fieldDifference(when, - * Calendar::MONTH) returns 3, then this calendar is set to - * 3 months before when, and possibly some addition - * time less than one month. - * - *

As a side effect of this call, this calendar is advanced - * toward when by the given amount. That is, calling - * this method has the side effect of calling add(field, - * n), where n is the return value. - * - *

Usage: To use this method, call it first with the largest - * field of interest, then with progressively smaller fields. For - * example: - * - *

-     * int y = cal->fieldDifference(when, Calendar::YEAR, err);
-     * int m = cal->fieldDifference(when, Calendar::MONTH, err);
-     * int d = cal->fieldDifference(when, Calendar::DATE, err);
- * - * computes the difference between cal and - * when in years, months, and days. - * - *

Note: fieldDifference() is - * asymmetrical. That is, in the following code: - * - *

-     * cal->setTime(date1, err);
-     * int m1 = cal->fieldDifference(date2, Calendar::MONTH, err);
-     * int d1 = cal->fieldDifference(date2, Calendar::DATE, err);
-     * cal->setTime(date2, err);
-     * int m2 = cal->fieldDifference(date1, Calendar::MONTH, err);
-     * int d2 = cal->fieldDifference(date1, Calendar::DATE, err);
- * - * one might expect that m1 == -m2 && d1 == -d2. - * However, this is not generally the case, because of - * irregularities in the underlying calendar system (e.g., the - * Gregorian calendar has a varying number of days per month). - * - * @param when the date to compare this calendar's time to - * @param field the field in which to compute the result - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid, this will be set to - * an error status. - * @return the difference, either positive or negative, between - * this calendar's time and when, in terms of - * field. - * @stable ICU 2.6. - */ - virtual int32_t fieldDifference(UDate when, UCalendarDateFields field, UErrorCode& status); - - /** - * Sets the calendar's time zone to be the one passed in. The Calendar takes ownership - * of the TimeZone; the caller is no longer responsible for deleting it. If the - * given time zone is NULL, this function has no effect. - * - * @param value The given time zone. - * @stable ICU 2.0 - */ - void adoptTimeZone(TimeZone* value); - - /** - * Sets the calendar's time zone to be the same as the one passed in. The TimeZone - * passed in is _not_ adopted; the client is still responsible for deleting it. - * - * @param zone The given time zone. - * @stable ICU 2.0 - */ - void setTimeZone(const TimeZone& zone); - - /** - * Returns a reference to the time zone owned by this calendar. The returned reference - * is only valid until clients make another call to adoptTimeZone or setTimeZone, - * or this Calendar is destroyed. - * - * @return The time zone object associated with this calendar. - * @stable ICU 2.0 - */ - const TimeZone& getTimeZone(void) const; - - /** - * Returns the time zone owned by this calendar. The caller owns the returned object - * and must delete it when done. After this call, the new time zone associated - * with this Calendar is the default TimeZone as returned by TimeZone::createDefault(). - * - * @return The time zone object which was associated with this calendar. - * @stable ICU 2.0 - */ - TimeZone* orphanTimeZone(void); - - /** - * Queries if the current date for this Calendar is in Daylight Savings Time. - * - * @param status Fill-in parameter which receives the status of this operation. - * @return True if the current date for this Calendar is in Daylight Savings Time, - * false, otherwise. - * @stable ICU 2.0 - */ - virtual UBool inDaylightTime(UErrorCode& status) const = 0; - - /** - * Specifies whether or not date/time interpretation is to be lenient. With lenient - * interpretation, a date such as "February 942, 1996" will be treated as being - * equivalent to the 941st day after February 1, 1996. With strict interpretation, - * such dates will cause an error when computing time from the time field values - * representing the dates. - * - * @param lenient True specifies date/time interpretation to be lenient. - * - * @see DateFormat#setLenient - * @stable ICU 2.0 - */ - void setLenient(UBool lenient); - - /** - * Tells whether date/time interpretation is to be lenient. - * - * @return True tells that date/time interpretation is to be lenient. - * @stable ICU 2.0 - */ - UBool isLenient(void) const; - - /** - * Sets the behavior for handling wall time repeating multiple times - * at negative time zone offset transitions. For example, 1:30 AM on - * November 6, 2011 in US Eastern time (America/New_York) occurs twice; - * 1:30 AM EDT, then 1:30 AM EST one hour later. When UCAL_WALLTIME_FIRST - * is used, the wall time 1:30AM in this example will be interpreted as 1:30 AM EDT - * (first occurrence). When UCAL_WALLTIME_LAST is used, it will be - * interpreted as 1:30 AM EST (last occurrence). The default value is - * UCAL_WALLTIME_LAST. - *

- * Note:When UCAL_WALLTIME_NEXT_VALID is not a valid - * option for this. When the argument is neither UCAL_WALLTIME_FIRST - * nor UCAL_WALLTIME_LAST, this method has no effect and will keep - * the current setting. - * - * @param option the behavior for handling repeating wall time, either - * UCAL_WALLTIME_FIRST or UCAL_WALLTIME_LAST. - * @see #getRepeatedWallTimeOption - * @stable ICU 49 - */ - void setRepeatedWallTimeOption(UCalendarWallTimeOption option); - - /** - * Gets the behavior for handling wall time repeating multiple times - * at negative time zone offset transitions. - * - * @return the behavior for handling repeating wall time, either - * UCAL_WALLTIME_FIRST or UCAL_WALLTIME_LAST. - * @see #setRepeatedWallTimeOption - * @stable ICU 49 - */ - UCalendarWallTimeOption getRepeatedWallTimeOption(void) const; - - /** - * Sets the behavior for handling skipped wall time at positive time zone offset - * transitions. For example, 2:30 AM on March 13, 2011 in US Eastern time (America/New_York) - * does not exist because the wall time jump from 1:59 AM EST to 3:00 AM EDT. When - * UCAL_WALLTIME_FIRST is used, 2:30 AM is interpreted as 30 minutes before 3:00 AM - * EDT, therefore, it will be resolved as 1:30 AM EST. When UCAL_WALLTIME_LAST - * is used, 2:30 AM is interpreted as 31 minutes after 1:59 AM EST, therefore, it will be - * resolved as 3:30 AM EDT. When UCAL_WALLTIME_NEXT_VALID is used, 2:30 AM will - * be resolved as next valid wall time, that is 3:00 AM EDT. The default value is - * UCAL_WALLTIME_LAST. - *

- * Note:This option is effective only when this calendar is lenient. - * When the calendar is strict, such non-existing wall time will cause an error. - * - * @param option the behavior for handling skipped wall time at positive time zone - * offset transitions, one of UCAL_WALLTIME_FIRST, UCAL_WALLTIME_LAST and - * UCAL_WALLTIME_NEXT_VALID. - * @see #getSkippedWallTimeOption - * - * @stable ICU 49 - */ - void setSkippedWallTimeOption(UCalendarWallTimeOption option); - - /** - * Gets the behavior for handling skipped wall time at positive time zone offset - * transitions. - * - * @return the behavior for handling skipped wall time, one of - * UCAL_WALLTIME_FIRST, UCAL_WALLTIME_LAST - * and UCAL_WALLTIME_NEXT_VALID. - * @see #setSkippedWallTimeOption - * @stable ICU 49 - */ - UCalendarWallTimeOption getSkippedWallTimeOption(void) const; - -#ifndef U_HIDE_DEPRECATED_API - /** - * Sets what the first day of the week is; e.g., Sunday in US, Monday in France. - * - * @param value The given first day of the week. - * @deprecated ICU 2.6. Use setFirstDayOfWeek(UCalendarDaysOfWeek value) instead. - */ - void setFirstDayOfWeek(EDaysOfWeek value); -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Sets what the first day of the week is; e.g., Sunday in US, Monday in France. - * - * @param value The given first day of the week. - * @stable ICU 2.6. - */ - void setFirstDayOfWeek(UCalendarDaysOfWeek value); - -#ifndef U_HIDE_DEPRECATED_API - /** - * Gets what the first day of the week is; e.g., Sunday in US, Monday in France. - * - * @return The first day of the week. - * @deprecated ICU 2.6 use the overload with error code - */ - EDaysOfWeek getFirstDayOfWeek(void) const; -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Gets what the first day of the week is; e.g., Sunday in US, Monday in France. - * - * @param status error code - * @return The first day of the week. - * @stable ICU 2.6 - */ - UCalendarDaysOfWeek getFirstDayOfWeek(UErrorCode &status) const; - - /** - * Sets what the minimal days required in the first week of the year are; For - * example, if the first week is defined as one that contains the first day of the - * first month of a year, call the method with value 1. If it must be a full week, - * use value 7. - * - * @param value The given minimal days required in the first week of the year. - * @stable ICU 2.0 - */ - void setMinimalDaysInFirstWeek(uint8_t value); - - /** - * Gets what the minimal days required in the first week of the year are; e.g., if - * the first week is defined as one that contains the first day of the first month - * of a year, getMinimalDaysInFirstWeek returns 1. If the minimal days required must - * be a full week, getMinimalDaysInFirstWeek returns 7. - * - * @return The minimal days required in the first week of the year. - * @stable ICU 2.0 - */ - uint8_t getMinimalDaysInFirstWeek(void) const; - - /** - * Gets the minimum value for the given time field. e.g., for Gregorian - * DAY_OF_MONTH, 1. - * - * @param field The given time field. - * @return The minimum value for the given time field. - * @deprecated ICU 2.6. Use getMinimum(UCalendarDateFields field) instead. - */ - virtual int32_t getMinimum(EDateFields field) const; - - /** - * Gets the minimum value for the given time field. e.g., for Gregorian - * DAY_OF_MONTH, 1. - * - * @param field The given time field. - * @return The minimum value for the given time field. - * @stable ICU 2.6. - */ - virtual int32_t getMinimum(UCalendarDateFields field) const; - - /** - * Gets the maximum value for the given time field. e.g. for Gregorian DAY_OF_MONTH, - * 31. - * - * @param field The given time field. - * @return The maximum value for the given time field. - * @deprecated ICU 2.6. Use getMaximum(UCalendarDateFields field) instead. - */ - virtual int32_t getMaximum(EDateFields field) const; - - /** - * Gets the maximum value for the given time field. e.g. for Gregorian DAY_OF_MONTH, - * 31. - * - * @param field The given time field. - * @return The maximum value for the given time field. - * @stable ICU 2.6. - */ - virtual int32_t getMaximum(UCalendarDateFields field) const; - - /** - * Gets the highest minimum value for the given field if varies. Otherwise same as - * getMinimum(). For Gregorian, no difference. - * - * @param field The given time field. - * @return The highest minimum value for the given time field. - * @deprecated ICU 2.6. Use getGreatestMinimum(UCalendarDateFields field) instead. - */ - virtual int32_t getGreatestMinimum(EDateFields field) const; - - /** - * Gets the highest minimum value for the given field if varies. Otherwise same as - * getMinimum(). For Gregorian, no difference. - * - * @param field The given time field. - * @return The highest minimum value for the given time field. - * @stable ICU 2.6. - */ - virtual int32_t getGreatestMinimum(UCalendarDateFields field) const; - - /** - * Gets the lowest maximum value for the given field if varies. Otherwise same as - * getMaximum(). e.g., for Gregorian DAY_OF_MONTH, 28. - * - * @param field The given time field. - * @return The lowest maximum value for the given time field. - * @deprecated ICU 2.6. Use getLeastMaximum(UCalendarDateFields field) instead. - */ - virtual int32_t getLeastMaximum(EDateFields field) const; - - /** - * Gets the lowest maximum value for the given field if varies. Otherwise same as - * getMaximum(). e.g., for Gregorian DAY_OF_MONTH, 28. - * - * @param field The given time field. - * @return The lowest maximum value for the given time field. - * @stable ICU 2.6. - */ - virtual int32_t getLeastMaximum(UCalendarDateFields field) const; - -#ifndef U_HIDE_DEPRECATED_API - /** - * Return the minimum value that this field could have, given the current date. - * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum(). - * - * The version of this function on Calendar uses an iterative algorithm to determine the - * actual minimum value for the field. There is almost always a more efficient way to - * accomplish this (in most cases, you can simply return getMinimum()). GregorianCalendar - * overrides this function with a more efficient implementation. - * - * @param field the field to determine the minimum of - * @param status Fill-in parameter which receives the status of this operation. - * @return the minimum of the given field for the current date of this Calendar - * @deprecated ICU 2.6. Use getActualMinimum(UCalendarDateFields field, UErrorCode& status) instead. - */ - int32_t getActualMinimum(EDateFields field, UErrorCode& status) const; -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Return the minimum value that this field could have, given the current date. - * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum(). - * - * The version of this function on Calendar uses an iterative algorithm to determine the - * actual minimum value for the field. There is almost always a more efficient way to - * accomplish this (in most cases, you can simply return getMinimum()). GregorianCalendar - * overrides this function with a more efficient implementation. - * - * @param field the field to determine the minimum of - * @param status Fill-in parameter which receives the status of this operation. - * @return the minimum of the given field for the current date of this Calendar - * @stable ICU 2.6. - */ - virtual int32_t getActualMinimum(UCalendarDateFields field, UErrorCode& status) const; - -#ifndef U_HIDE_DEPRECATED_API - /** - * Return the maximum value that this field could have, given the current date. - * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual - * maximum would be 28; for "Feb 3, 1996" it s 29. Similarly for a Hebrew calendar, - * for some years the actual maximum for MONTH is 12, and for others 13. - * - * The version of this function on Calendar uses an iterative algorithm to determine the - * actual maximum value for the field. There is almost always a more efficient way to - * accomplish this (in most cases, you can simply return getMaximum()). GregorianCalendar - * overrides this function with a more efficient implementation. - * - * @param field the field to determine the maximum of - * @param status Fill-in parameter which receives the status of this operation. - * @return the maximum of the given field for the current date of this Calendar - * @deprecated ICU 2.6. Use getActualMaximum(UCalendarDateFields field, UErrorCode& status) instead. - */ - int32_t getActualMaximum(EDateFields field, UErrorCode& status) const; -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Return the maximum value that this field could have, given the current date. - * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual - * maximum would be 28; for "Feb 3, 1996" it s 29. Similarly for a Hebrew calendar, - * for some years the actual maximum for MONTH is 12, and for others 13. - * - * The version of this function on Calendar uses an iterative algorithm to determine the - * actual maximum value for the field. There is almost always a more efficient way to - * accomplish this (in most cases, you can simply return getMaximum()). GregorianCalendar - * overrides this function with a more efficient implementation. - * - * @param field the field to determine the maximum of - * @param status Fill-in parameter which receives the status of this operation. - * @return the maximum of the given field for the current date of this Calendar - * @stable ICU 2.6. - */ - virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const; - -#ifndef U_HIDE_DEPRECATED_API - /** - * Gets the value for a given time field. Recalculate the current time field values - * if the time value has been changed by a call to setTime(). Return zero for unset - * fields if any fields have been explicitly set by a call to set(). To force a - * recomputation of all fields regardless of the previous state, call complete(). - * This method is semantically const, but may alter the object in memory. - * - * @param field The given time field. - * @param status Fill-in parameter which receives the status of the operation. - * @return The value for the given time field, or zero if the field is unset, - * and set() has been called for any other field. - * @deprecated ICU 2.6. Use get(UCalendarDateFields field, UErrorCode& status) instead. - */ - int32_t get(EDateFields field, UErrorCode& status) const; -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Gets the value for a given time field. Recalculate the current time field values - * if the time value has been changed by a call to setTime(). Return zero for unset - * fields if any fields have been explicitly set by a call to set(). To force a - * recomputation of all fields regardless of the previous state, call complete(). - * This method is semantically const, but may alter the object in memory. - * - * @param field The given time field. - * @param status Fill-in parameter which receives the status of the operation. - * @return The value for the given time field, or zero if the field is unset, - * and set() has been called for any other field. - * @stable ICU 2.6. - */ - int32_t get(UCalendarDateFields field, UErrorCode& status) const; - -#ifndef U_HIDE_DEPRECATED_API - /** - * Determines if the given time field has a value set. This can affect in the - * resolving of time in Calendar. Unset fields have a value of zero, by definition. - * - * @param field The given time field. - * @return True if the given time field has a value set; false otherwise. - * @deprecated ICU 2.6. Use isSet(UCalendarDateFields field) instead. - */ - UBool isSet(EDateFields field) const; -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Determines if the given time field has a value set. This can affect in the - * resolving of time in Calendar. Unset fields have a value of zero, by definition. - * - * @param field The given time field. - * @return True if the given time field has a value set; false otherwise. - * @stable ICU 2.6. - */ - UBool isSet(UCalendarDateFields field) const; - -#ifndef U_HIDE_DEPRECATED_API - /** - * Sets the given time field with the given value. - * - * @param field The given time field. - * @param value The value to be set for the given time field. - * @deprecated ICU 2.6. Use set(UCalendarDateFields field, int32_t value) instead. - */ - void set(EDateFields field, int32_t value); -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Sets the given time field with the given value. - * - * @param field The given time field. - * @param value The value to be set for the given time field. - * @stable ICU 2.6. - */ - void set(UCalendarDateFields field, int32_t value); - - /** - * Sets the values for the fields YEAR, MONTH, and DATE. Other field values are - * retained; call clear() first if this is not desired. - * - * @param year The value used to set the YEAR time field. - * @param month The value used to set the MONTH time field. Month value is 0-based. - * e.g., 0 for January. - * @param date The value used to set the DATE time field. - * @stable ICU 2.0 - */ - void set(int32_t year, int32_t month, int32_t date); - - /** - * Sets the values for the fields YEAR, MONTH, DATE, HOUR_OF_DAY, and MINUTE. Other - * field values are retained; call clear() first if this is not desired. - * - * @param year The value used to set the YEAR time field. - * @param month The value used to set the MONTH time field. Month value is - * 0-based. E.g., 0 for January. - * @param date The value used to set the DATE time field. - * @param hour The value used to set the HOUR_OF_DAY time field. - * @param minute The value used to set the MINUTE time field. - * @stable ICU 2.0 - */ - void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute); - - /** - * Sets the values for the fields YEAR, MONTH, DATE, HOUR_OF_DAY, MINUTE, and SECOND. - * Other field values are retained; call clear() first if this is not desired. - * - * @param year The value used to set the YEAR time field. - * @param month The value used to set the MONTH time field. Month value is - * 0-based. E.g., 0 for January. - * @param date The value used to set the DATE time field. - * @param hour The value used to set the HOUR_OF_DAY time field. - * @param minute The value used to set the MINUTE time field. - * @param second The value used to set the SECOND time field. - * @stable ICU 2.0 - */ - void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second); - - /** - * Clears the values of all the time fields, making them both unset and assigning - * them a value of zero (except for era in some cases, see below). The field values - * will be determined during the next resolving of time into time fields. - * - * This effectively results in the following: - * 1. Gregorian-like calendars (gregorian, iso8601, japanese, buddhist, roc) are set - * to a UDate value of 0, corresponding to the epoch date of gregorian - * January 1, 1970 CE at UTC 00:00:00. - * 2. Other calendars are set to the beginning of the first day of the first month of - * the current era. Note that for the chinese and dangi calendars, the era - * corresponds to the current 60-year stem-branch cycle, so there is a new era - * every 60 years. The current era began on gregorian February 2, 1984. - * @stable ICU 2.0 - */ - void clear(void); - -#ifndef U_HIDE_DEPRECATED_API - /** - * Clears the value in the given time field, both making it unset and assigning it a - * value of zero. This field value will be determined during the next resolving of - * time into time fields. - * - * @param field The time field to be cleared. - * @deprecated ICU 2.6. Use clear(UCalendarDateFields field) instead. - */ - void clear(EDateFields field); -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Clears the value in the given time field, both making it unset and assigning it a - * value of zero. This field value will be determined during the next resolving of - * time into time fields. - * - * @param field The time field to be cleared. - * @stable ICU 2.6. - */ - void clear(UCalendarDateFields field); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual method. This method is to - * implement a simple version of RTTI, since not all C++ compilers support genuine - * RTTI. Polymorphic operator==() and clone() methods call this method. - *

- * Concrete subclasses of Calendar must implement getDynamicClassID() and also a - * static method and data member: - * - * static UClassID getStaticClassID() { return (UClassID)&fgClassID; } - * static char fgClassID; - * - * @return The class ID for this object. All objects of a given class have the - * same class ID. Objects of other classes have different class IDs. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const = 0; - - /** - * Returns the calendar type name string for this Calendar object. - * The returned string is the legacy ICU calendar attribute value, - * for example, "gregorian" or "japanese". - * - * See type="old type name" for the calendar attribute of locale IDs - * at http://www.unicode.org/reports/tr35/#Key_Type_Definitions - * - * Sample code for getting the LDML/BCP 47 calendar key value: - * \code - * const char *calType = cal->getType(); - * if (0 == strcmp(calType, "unknown")) { - * // deal with unknown calendar type - * } else { - * string localeID("root@calendar="); - * localeID.append(calType); - * char langTag[100]; - * UErrorCode errorCode = U_ZERO_ERROR; - * int32_t length = uloc_toLanguageTag(localeID.c_str(), langTag, (int32_t)sizeof(langTag), TRUE, &errorCode); - * if (U_FAILURE(errorCode)) { - * // deal with errors & overflow - * } - * string lang(langTag, length); - * size_t caPos = lang.find("-ca-"); - * lang.erase(0, caPos + 4); - * // lang now contains the LDML calendar type - * } - * \endcode - * - * @return legacy calendar type name string - * @stable ICU 49 - */ - virtual const char * getType() const = 0; - - /** - * Returns whether the given day of the week is a weekday, a weekend day, - * or a day that transitions from one to the other, for the locale and - * calendar system associated with this Calendar (the locale's region is - * often the most determinant factor). If a transition occurs at midnight, - * then the days before and after the transition will have the - * type UCAL_WEEKDAY or UCAL_WEEKEND. If a transition occurs at a time - * other than midnight, then the day of the transition will have - * the type UCAL_WEEKEND_ONSET or UCAL_WEEKEND_CEASE. In this case, the - * method getWeekendTransition() will return the point of - * transition. - * @param dayOfWeek The day of the week whose type is desired (UCAL_SUNDAY..UCAL_SATURDAY). - * @param status The error code for the operation. - * @return The UCalendarWeekdayType for the day of the week. - * @stable ICU 4.4 - */ - virtual UCalendarWeekdayType getDayOfWeekType(UCalendarDaysOfWeek dayOfWeek, UErrorCode &status) const; - - /** - * Returns the time during the day at which the weekend begins or ends in - * this calendar system. If getDayOfWeekType() returns UCAL_WEEKEND_ONSET - * for the specified dayOfWeek, return the time at which the weekend begins. - * If getDayOfWeekType() returns UCAL_WEEKEND_CEASE for the specified dayOfWeek, - * return the time at which the weekend ends. If getDayOfWeekType() returns - * some other UCalendarWeekdayType for the specified dayOfWeek, is it an error condition - * (U_ILLEGAL_ARGUMENT_ERROR). - * @param dayOfWeek The day of the week for which the weekend transition time is - * desired (UCAL_SUNDAY..UCAL_SATURDAY). - * @param status The error code for the operation. - * @return The milliseconds after midnight at which the weekend begins or ends. - * @stable ICU 4.4 - */ - virtual int32_t getWeekendTransition(UCalendarDaysOfWeek dayOfWeek, UErrorCode &status) const; - - /** - * Returns TRUE if the given UDate is in the weekend in - * this calendar system. - * @param date The UDate in question. - * @param status The error code for the operation. - * @return TRUE if the given UDate is in the weekend in - * this calendar system, FALSE otherwise. - * @stable ICU 4.4 - */ - virtual UBool isWeekend(UDate date, UErrorCode &status) const; - - /** - * Returns TRUE if this Calendar's current date-time is in the weekend in - * this calendar system. - * @return TRUE if this Calendar's current date-time is in the weekend in - * this calendar system, FALSE otherwise. - * @stable ICU 4.4 - */ - virtual UBool isWeekend(void) const; - -protected: - - /** - * Constructs a Calendar with the default time zone as returned by - * TimeZone::createInstance(), and the default locale. - * - * @param success Indicates the status of Calendar object construction. Returns - * U_ZERO_ERROR if constructed successfully. - * @stable ICU 2.0 - */ - Calendar(UErrorCode& success); - - /** - * Copy constructor - * - * @param source Calendar object to be copied from - * @stable ICU 2.0 - */ - Calendar(const Calendar& source); - - /** - * Default assignment operator - * - * @param right Calendar object to be copied - * @stable ICU 2.0 - */ - Calendar& operator=(const Calendar& right); - - /** - * Constructs a Calendar with the given time zone and locale. Clients are no longer - * responsible for deleting the given time zone object after it's adopted. - * - * @param zone The given time zone. - * @param aLocale The given locale. - * @param success Indicates the status of Calendar object construction. Returns - * U_ZERO_ERROR if constructed successfully. - * @stable ICU 2.0 - */ - Calendar(TimeZone* zone, const Locale& aLocale, UErrorCode& success); - - /** - * Constructs a Calendar with the given time zone and locale. - * - * @param zone The given time zone. - * @param aLocale The given locale. - * @param success Indicates the status of Calendar object construction. Returns - * U_ZERO_ERROR if constructed successfully. - * @stable ICU 2.0 - */ - Calendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success); - - /** - * Converts Calendar's time field values to GMT as milliseconds. - * - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - * @stable ICU 2.0 - */ - virtual void computeTime(UErrorCode& status); - - /** - * Converts GMT as milliseconds to time field values. This allows you to sync up the - * time field values with a new time that is set for the calendar. This method - * does NOT recompute the time first; to recompute the time, then the fields, use - * the method complete(). - * - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - * @stable ICU 2.0 - */ - virtual void computeFields(UErrorCode& status); - - /** - * Gets this Calendar's current time as a long. - * - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - * @return the current time as UTC milliseconds from the epoch. - * @stable ICU 2.0 - */ - double getTimeInMillis(UErrorCode& status) const; - - /** - * Sets this Calendar's current time from the given long value. - * @param millis the new time in UTC milliseconds from the epoch. - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - * @stable ICU 2.0 - */ - void setTimeInMillis( double millis, UErrorCode& status ); - - /** - * Recomputes the current time from currently set fields, and then fills in any - * unset fields in the time field list. - * - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - * @stable ICU 2.0 - */ - void complete(UErrorCode& status); - -#ifndef U_HIDE_DEPRECATED_API - /** - * Gets the value for a given time field. Subclasses can use this function to get - * field values without forcing recomputation of time. - * - * @param field The given time field. - * @return The value for the given time field. - * @deprecated ICU 2.6. Use internalGet(UCalendarDateFields field) instead. - */ - inline int32_t internalGet(EDateFields field) const {return fFields[field];} -#endif /* U_HIDE_DEPRECATED_API */ - -#ifndef U_HIDE_INTERNAL_API - /** - * Gets the value for a given time field. Subclasses can use this function to get - * field values without forcing recomputation of time. If the field's stamp is UNSET, - * the defaultValue is used. - * - * @param field The given time field. - * @param defaultValue a default value used if the field is unset. - * @return The value for the given time field. - * @internal - */ - inline int32_t internalGet(UCalendarDateFields field, int32_t defaultValue) const {return fStamp[field]>kUnset ? fFields[field] : defaultValue;} - - /** - * Gets the value for a given time field. Subclasses can use this function to get - * field values without forcing recomputation of time. - * - * @param field The given time field. - * @return The value for the given time field. - * @internal - */ - inline int32_t internalGet(UCalendarDateFields field) const {return fFields[field];} -#endif /* U_HIDE_INTERNAL_API */ - -#ifndef U_HIDE_DEPRECATED_API - /** - * Sets the value for a given time field. This is a fast internal method for - * subclasses. It does not affect the areFieldsInSync, isTimeSet, or areAllFieldsSet - * flags. - * - * @param field The given time field. - * @param value The value for the given time field. - * @deprecated ICU 2.6. Use internalSet(UCalendarDateFields field, int32_t value) instead. - */ - void internalSet(EDateFields field, int32_t value); -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Sets the value for a given time field. This is a fast internal method for - * subclasses. It does not affect the areFieldsInSync, isTimeSet, or areAllFieldsSet - * flags. - * - * @param field The given time field. - * @param value The value for the given time field. - * @stable ICU 2.6. - */ - inline void internalSet(UCalendarDateFields field, int32_t value); - - /** - * Prepare this calendar for computing the actual minimum or maximum. - * This method modifies this calendar's fields; it is called on a - * temporary calendar. - * @internal - */ - virtual void prepareGetActual(UCalendarDateFields field, UBool isMinimum, UErrorCode &status); - - /** - * Limit enums. Not in sync with UCalendarLimitType (refers to internal fields). - * @internal - */ - enum ELimitType { -#ifndef U_HIDE_INTERNAL_API - UCAL_LIMIT_MINIMUM = 0, - UCAL_LIMIT_GREATEST_MINIMUM, - UCAL_LIMIT_LEAST_MAXIMUM, - UCAL_LIMIT_MAXIMUM, - UCAL_LIMIT_COUNT -#endif /* U_HIDE_INTERNAL_API */ - }; - - /** - * Subclass API for defining limits of different types. - * Subclasses must implement this method to return limits for the - * following fields: - * - *

UCAL_ERA
-     * UCAL_YEAR
-     * UCAL_MONTH
-     * UCAL_WEEK_OF_YEAR
-     * UCAL_WEEK_OF_MONTH
-     * UCAL_DATE (DAY_OF_MONTH on Java)
-     * UCAL_DAY_OF_YEAR
-     * UCAL_DAY_OF_WEEK_IN_MONTH
-     * UCAL_YEAR_WOY
-     * UCAL_EXTENDED_YEAR
- * - * @param field one of the above field numbers - * @param limitType one of MINIMUM, GREATEST_MINIMUM, - * LEAST_MAXIMUM, or MAXIMUM - * @internal - */ - virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const = 0; - - /** - * Return a limit for a field. - * @param field the field, from 0..UCAL_MAX_FIELD - * @param limitType the type specifier for the limit - * @see #ELimitType - * @internal - */ - virtual int32_t getLimit(UCalendarDateFields field, ELimitType limitType) const; - - - /** - * Return the Julian day number of day before the first day of the - * given month in the given extended year. Subclasses should override - * this method to implement their calendar system. - * @param eyear the extended year - * @param month the zero-based month, or 0 if useMonth is false - * @param useMonth if false, compute the day before the first day of - * the given year, otherwise, compute the day before the first day of - * the given month - * @return the Julian day number of the day before the first - * day of the given month and year - * @internal - */ - virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, - UBool useMonth) const = 0; - - /** - * Return the number of days in the given month of the given extended - * year of this calendar system. Subclasses should override this - * method if they can provide a more correct or more efficient - * implementation than the default implementation in Calendar. - * @internal - */ - virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const ; - - /** - * Return the number of days in the given extended year of this - * calendar system. Subclasses should override this method if they can - * provide a more correct or more efficient implementation than the - * default implementation in Calendar. - * @stable ICU 2.0 - */ - virtual int32_t handleGetYearLength(int32_t eyear) const; - - - /** - * Return the extended year defined by the current fields. This will - * use the UCAL_EXTENDED_YEAR field or the UCAL_YEAR and supra-year fields (such - * as UCAL_ERA) specific to the calendar system, depending on which set of - * fields is newer. - * @return the extended year - * @internal - */ - virtual int32_t handleGetExtendedYear() = 0; - - /** - * Subclasses may override this. This method calls - * handleGetMonthLength() to obtain the calendar-specific month - * length. - * @param bestField which field to use to calculate the date - * @return julian day specified by calendar fields. - * @internal - */ - virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField); - - /** - * Subclasses must override this to convert from week fields - * (YEAR_WOY and WEEK_OF_YEAR) to an extended year in the case - * where YEAR, EXTENDED_YEAR are not set. - * The Calendar implementation assumes yearWoy is in extended gregorian form - * @return the extended year, UCAL_EXTENDED_YEAR - * @internal - */ - virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy); - - /** - * Validate a single field of this calendar. Subclasses should - * override this method to validate any calendar-specific fields. - * Generic fields can be handled by `Calendar::validateField()`. - * @internal - */ - virtual void validateField(UCalendarDateFields field, UErrorCode &status); - -#ifndef U_HIDE_INTERNAL_API - /** - * Compute the Julian day from fields. Will determine whether to use - * the JULIAN_DAY field directly, or other fields. - * @return the julian day - * @internal - */ - int32_t computeJulianDay(); - - /** - * Compute the milliseconds in the day from the fields. This is a - * value from 0 to 23:59:59.999 inclusive, unless fields are out of - * range, in which case it can be an arbitrary value. This value - * reflects local zone wall time. - * @internal - */ - double computeMillisInDay(); - - /** - * This method can assume EXTENDED_YEAR has been set. - * @param millis milliseconds of the date fields - * @param millisInDay milliseconds of the time fields; may be out - * or range. - * @param ec Output param set to failure code on function return - * when this function fails. - * @internal - */ - int32_t computeZoneOffset(double millis, double millisInDay, UErrorCode &ec); - - - /** - * Determine the best stamp in a range. - * @param start first enum to look at - * @param end last enum to look at - * @param bestSoFar stamp prior to function call - * @return the stamp value of the best stamp - * @internal - */ - int32_t newestStamp(UCalendarDateFields start, UCalendarDateFields end, int32_t bestSoFar) const; - - /** - * Values for field resolution tables - * @see #resolveFields - * @internal - */ - enum { - /** Marker for end of resolve set (row or group). */ - kResolveSTOP = -1, - /** Value to be bitwised "ORed" against resolve table field values for remapping. Example: (UCAL_DATE | kResolveRemap) in 1st column will cause 'UCAL_DATE' to be returned, but will not examine the value of UCAL_DATE. */ - kResolveRemap = 32 - }; - - /** - * Precedence table for Dates - * @see #resolveFields - * @internal - */ - static const UFieldResolutionTable kDatePrecedence[]; - - /** - * Precedence table for Year - * @see #resolveFields - * @internal - */ - static const UFieldResolutionTable kYearPrecedence[]; - - /** - * Precedence table for Day of Week - * @see #resolveFields - * @internal - */ - static const UFieldResolutionTable kDOWPrecedence[]; - - /** - * Given a precedence table, return the newest field combination in - * the table, or UCAL_FIELD_COUNT if none is found. - * - *

The precedence table is a 3-dimensional array of integers. It - * may be thought of as an array of groups. Each group is an array of - * lines. Each line is an array of field numbers. Within a line, if - * all fields are set, then the time stamp of the line is taken to be - * the stamp of the most recently set field. If any field of a line is - * unset, then the line fails to match. Within a group, the line with - * the newest time stamp is selected. The first field of the line is - * returned to indicate which line matched. - * - *

In some cases, it may be desirable to map a line to field that - * whose stamp is NOT examined. For example, if the best field is - * DAY_OF_WEEK then the DAY_OF_WEEK_IN_MONTH algorithm may be used. In - * order to do this, insert the value kResolveRemap | F at - * the start of the line, where F is the desired return - * field value. This field will NOT be examined; it only determines - * the return value if the other fields in the line are the newest. - * - *

If all lines of a group contain at least one unset field, then no - * line will match, and the group as a whole will fail to match. In - * that case, the next group will be processed. If all groups fail to - * match, then UCAL_FIELD_COUNT is returned. - * @internal - */ - UCalendarDateFields resolveFields(const UFieldResolutionTable *precedenceTable); -#endif /* U_HIDE_INTERNAL_API */ - - - /** - * @internal - */ - virtual const UFieldResolutionTable* getFieldResolutionTable() const; - -#ifndef U_HIDE_INTERNAL_API - /** - * Return the field that is newer, either defaultField, or - * alternateField. If neither is newer or neither is set, return defaultField. - * @internal - */ - UCalendarDateFields newerField(UCalendarDateFields defaultField, UCalendarDateFields alternateField) const; -#endif /* U_HIDE_INTERNAL_API */ - - -private: - /** - * Helper function for calculating limits by trial and error - * @param field The field being investigated - * @param startValue starting (least max) value of field - * @param endValue ending (greatest max) value of field - * @param status return type - * @internal - */ - int32_t getActualHelper(UCalendarDateFields field, int32_t startValue, int32_t endValue, UErrorCode &status) const; - - -protected: - /** - * The flag which indicates if the current time is set in the calendar. - * @stable ICU 2.0 - */ - UBool fIsTimeSet; - - /** - * True if the fields are in sync with the currently set time of this Calendar. - * If false, then the next attempt to get the value of a field will - * force a recomputation of all fields from the current value of the time - * field. - *

- * This should really be named areFieldsInSync, but the old name is retained - * for backward compatibility. - * @stable ICU 2.0 - */ - UBool fAreFieldsSet; - - /** - * True if all of the fields have been set. This is initially false, and set to - * true by computeFields(). - * @stable ICU 2.0 - */ - UBool fAreAllFieldsSet; - - /** - * True if all fields have been virtually set, but have not yet been - * computed. This occurs only in setTimeInMillis(). A calendar set - * to this state will compute all fields from the time if it becomes - * necessary, but otherwise will delay such computation. - * @stable ICU 3.0 - */ - UBool fAreFieldsVirtuallySet; - - /** - * Get the current time without recomputing. - * - * @return the current time without recomputing. - * @stable ICU 2.0 - */ - UDate internalGetTime(void) const { return fTime; } - - /** - * Set the current time without affecting flags or fields. - * - * @param time The time to be set - * @return the current time without recomputing. - * @stable ICU 2.0 - */ - void internalSetTime(UDate time) { fTime = time; } - - /** - * The time fields containing values into which the millis is computed. - * @stable ICU 2.0 - */ - int32_t fFields[UCAL_FIELD_COUNT]; - - /** - * The flags which tell if a specified time field for the calendar is set. - * @deprecated ICU 2.8 use (fStamp[n]!=kUnset) - */ - UBool fIsSet[UCAL_FIELD_COUNT]; - - /** Special values of stamp[] - * @stable ICU 2.0 - */ - enum { - kUnset = 0, - kInternallySet, - kMinimumUserStamp - }; - - /** - * Pseudo-time-stamps which specify when each field was set. There - * are two special values, UNSET and INTERNALLY_SET. Values from - * MINIMUM_USER_SET to Integer.MAX_VALUE are legal user set values. - * @stable ICU 2.0 - */ - int32_t fStamp[UCAL_FIELD_COUNT]; - - /** - * Subclasses may override this method to compute several fields - * specific to each calendar system. These are: - * - *

  • ERA - *
  • YEAR - *
  • MONTH - *
  • DAY_OF_MONTH - *
  • DAY_OF_YEAR - *
  • EXTENDED_YEAR
- * - * Subclasses can refer to the DAY_OF_WEEK and DOW_LOCAL fields, which - * will be set when this method is called. Subclasses can also call - * the getGregorianXxx() methods to obtain Gregorian calendar - * equivalents for the given Julian day. - * - *

In addition, subclasses should compute any subclass-specific - * fields, that is, fields from BASE_FIELD_COUNT to - * getFieldCount() - 1. - * - *

The default implementation in Calendar implements - * a pure proleptic Gregorian calendar. - * @internal - */ - virtual void handleComputeFields(int32_t julianDay, UErrorCode &status); - -#ifndef U_HIDE_INTERNAL_API - /** - * Return the extended year on the Gregorian calendar as computed by - * computeGregorianFields(). - * @internal - */ - int32_t getGregorianYear() const { - return fGregorianYear; - } - - /** - * Return the month (0-based) on the Gregorian calendar as computed by - * computeGregorianFields(). - * @internal - */ - int32_t getGregorianMonth() const { - return fGregorianMonth; - } - - /** - * Return the day of year (1-based) on the Gregorian calendar as - * computed by computeGregorianFields(). - * @internal - */ - int32_t getGregorianDayOfYear() const { - return fGregorianDayOfYear; - } - - /** - * Return the day of month (1-based) on the Gregorian calendar as - * computed by computeGregorianFields(). - * @internal - */ - int32_t getGregorianDayOfMonth() const { - return fGregorianDayOfMonth; - } -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Called by computeJulianDay. Returns the default month (0-based) for the year, - * taking year and era into account. Defaults to 0 for Gregorian, which doesn't care. - * @param eyear The extended year - * @internal - */ - virtual int32_t getDefaultMonthInYear(int32_t eyear) ; - - - /** - * Called by computeJulianDay. Returns the default day (1-based) for the month, - * taking currently-set year and era into account. Defaults to 1 for Gregorian. - * @param eyear the extended year - * @param month the month in the year - * @internal - */ - virtual int32_t getDefaultDayInMonth(int32_t eyear, int32_t month); - - //------------------------------------------------------------------------- - // Protected utility methods for use by subclasses. These are very handy - // for implementing add, roll, and computeFields. - //------------------------------------------------------------------------- - - /** - * Adjust the specified field so that it is within - * the allowable range for the date to which this calendar is set. - * For example, in a Gregorian calendar pinning the {@link #UCalendarDateFields DAY_OF_MONTH} - * field for a calendar set to April 31 would cause it to be set - * to April 30. - *

- * Subclassing: - *
- * This utility method is intended for use by subclasses that need to implement - * their own overrides of {@link #roll roll} and {@link #add add}. - *

- * Note: - * pinField is implemented in terms of - * {@link #getActualMinimum getActualMinimum} - * and {@link #getActualMaximum getActualMaximum}. If either of those methods uses - * a slow, iterative algorithm for a particular field, it would be - * unwise to attempt to call pinField for that field. If you - * really do need to do so, you should override this method to do - * something more efficient for that field. - *

- * @param field The calendar field whose value should be pinned. - * @param status Output param set to failure code on function return - * when this function fails. - * - * @see #getActualMinimum - * @see #getActualMaximum - * @stable ICU 2.0 - */ - virtual void pinField(UCalendarDateFields field, UErrorCode& status); - - /** - * Return the week number of a day, within a period. This may be the week number in - * a year or the week number in a month. Usually this will be a value >= 1, but if - * some initial days of the period are excluded from week 1, because - * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} is > 1, then - * the week number will be zero for those - * initial days. This method requires the day number and day of week for some - * known date in the period in order to determine the day of week - * on the desired day. - *

- * Subclassing: - *
- * This method is intended for use by subclasses in implementing their - * {@link #computeTime computeTime} and/or {@link #computeFields computeFields} methods. - * It is often useful in {@link #getActualMinimum getActualMinimum} and - * {@link #getActualMaximum getActualMaximum} as well. - *

- * This variant is handy for computing the week number of some other - * day of a period (often the first or last day of the period) when its day - * of the week is not known but the day number and day of week for some other - * day in the period (e.g. the current date) is known. - *

- * @param desiredDay The {@link #UCalendarDateFields DAY_OF_YEAR} or - * {@link #UCalendarDateFields DAY_OF_MONTH} whose week number is desired. - * Should be 1 for the first day of the period. - * - * @param dayOfPeriod The {@link #UCalendarDateFields DAY_OF_YEAR} - * or {@link #UCalendarDateFields DAY_OF_MONTH} for a day in the period whose - * {@link #UCalendarDateFields DAY_OF_WEEK} is specified by the - * knownDayOfWeek parameter. - * Should be 1 for first day of period. - * - * @param dayOfWeek The {@link #UCalendarDateFields DAY_OF_WEEK} for the day - * corresponding to the knownDayOfPeriod parameter. - * 1-based with 1=Sunday. - * - * @return The week number (one-based), or zero if the day falls before - * the first week because - * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} - * is more than one. - * - * @stable ICU 2.8 - */ - int32_t weekNumber(int32_t desiredDay, int32_t dayOfPeriod, int32_t dayOfWeek); - - -#ifndef U_HIDE_INTERNAL_API - /** - * Return the week number of a day, within a period. This may be the week number in - * a year, or the week number in a month. Usually this will be a value >= 1, but if - * some initial days of the period are excluded from week 1, because - * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} is > 1, - * then the week number will be zero for those - * initial days. This method requires the day of week for the given date in order to - * determine the result. - *

- * Subclassing: - *
- * This method is intended for use by subclasses in implementing their - * {@link #computeTime computeTime} and/or {@link #computeFields computeFields} methods. - * It is often useful in {@link #getActualMinimum getActualMinimum} and - * {@link #getActualMaximum getActualMaximum} as well. - *

- * @param dayOfPeriod The {@link #UCalendarDateFields DAY_OF_YEAR} or - * {@link #UCalendarDateFields DAY_OF_MONTH} whose week number is desired. - * Should be 1 for the first day of the period. - * - * @param dayOfWeek The {@link #UCalendarDateFields DAY_OF_WEEK} for the day - * corresponding to the dayOfPeriod parameter. - * 1-based with 1=Sunday. - * - * @return The week number (one-based), or zero if the day falls before - * the first week because - * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} - * is more than one. - * @internal - */ - inline int32_t weekNumber(int32_t dayOfPeriod, int32_t dayOfWeek); - - /** - * returns the local DOW, valid range 0..6 - * @internal - */ - int32_t getLocalDOW(); -#endif /* U_HIDE_INTERNAL_API */ - -private: - - /** - * The next available value for fStamp[] - */ - int32_t fNextStamp;// = MINIMUM_USER_STAMP; - - /** - * Recalculates the time stamp array (fStamp). - * Resets fNextStamp to lowest next stamp value. - */ - void recalculateStamp(); - - /** - * The current time set for the calendar. - */ - UDate fTime; - - /** - * @see #setLenient - */ - UBool fLenient; - - /** - * Time zone affects the time calculation done by Calendar. Calendar subclasses use - * the time zone data to produce the local time. Always set; never NULL. - */ - TimeZone* fZone; - - /** - * Option for repeated wall time - * @see #setRepeatedWallTimeOption - */ - UCalendarWallTimeOption fRepeatedWallTime; - - /** - * Option for skipped wall time - * @see #setSkippedWallTimeOption - */ - UCalendarWallTimeOption fSkippedWallTime; - - /** - * Both firstDayOfWeek and minimalDaysInFirstWeek are locale-dependent. They are - * used to figure out the week count for a specific date for a given locale. These - * must be set when a Calendar is constructed. For example, in US locale, - * firstDayOfWeek is SUNDAY; minimalDaysInFirstWeek is 1. They are used to figure - * out the week count for a specific date for a given locale. These must be set when - * a Calendar is constructed. - */ - UCalendarDaysOfWeek fFirstDayOfWeek; - uint8_t fMinimalDaysInFirstWeek; - UCalendarDaysOfWeek fWeekendOnset; - int32_t fWeekendOnsetMillis; - UCalendarDaysOfWeek fWeekendCease; - int32_t fWeekendCeaseMillis; - - /** - * Sets firstDayOfWeek and minimalDaysInFirstWeek. Called at Calendar construction - * time. - * - * @param desiredLocale The given locale. - * @param type The calendar type identifier, e.g: gregorian, buddhist, etc. - * @param success Indicates the status of setting the week count data from - * the resource for the given locale. Returns U_ZERO_ERROR if - * constructed successfully. - */ - void setWeekData(const Locale& desiredLocale, const char *type, UErrorCode& success); - - /** - * Recompute the time and update the status fields isTimeSet - * and areFieldsSet. Callers should check isTimeSet and only - * call this method if isTimeSet is false. - * - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid or restricted by - * leniency, this will be set to an error status. - */ - void updateTime(UErrorCode& status); - - /** - * The Gregorian year, as computed by computeGregorianFields() and - * returned by getGregorianYear(). - * @see #computeGregorianFields - */ - int32_t fGregorianYear; - - /** - * The Gregorian month, as computed by computeGregorianFields() and - * returned by getGregorianMonth(). - * @see #computeGregorianFields - */ - int32_t fGregorianMonth; - - /** - * The Gregorian day of the year, as computed by - * computeGregorianFields() and returned by getGregorianDayOfYear(). - * @see #computeGregorianFields - */ - int32_t fGregorianDayOfYear; - - /** - * The Gregorian day of the month, as computed by - * computeGregorianFields() and returned by getGregorianDayOfMonth(). - * @see #computeGregorianFields - */ - int32_t fGregorianDayOfMonth; - - /* calculations */ - - /** - * Compute the Gregorian calendar year, month, and day of month from - * the given Julian day. These values are not stored in fields, but in - * member variables gregorianXxx. Also compute the DAY_OF_WEEK and - * DOW_LOCAL fields. - */ - void computeGregorianAndDOWFields(int32_t julianDay, UErrorCode &ec); - -protected: - - /** - * Compute the Gregorian calendar year, month, and day of month from the - * Julian day. These values are not stored in fields, but in member - * variables gregorianXxx. They are used for time zone computations and by - * subclasses that are Gregorian derivatives. Subclasses may call this - * method to perform a Gregorian calendar millis->fields computation. - */ - void computeGregorianFields(int32_t julianDay, UErrorCode &ec); - -private: - - /** - * Compute the fields WEEK_OF_YEAR, YEAR_WOY, WEEK_OF_MONTH, - * DAY_OF_WEEK_IN_MONTH, and DOW_LOCAL from EXTENDED_YEAR, YEAR, - * DAY_OF_WEEK, and DAY_OF_YEAR. The latter fields are computed by the - * subclass based on the calendar system. - * - *

The YEAR_WOY field is computed simplistically. It is equal to YEAR - * most of the time, but at the year boundary it may be adjusted to YEAR-1 - * or YEAR+1 to reflect the overlap of a week into an adjacent year. In - * this case, a simple increment or decrement is performed on YEAR, even - * though this may yield an invalid YEAR value. For instance, if the YEAR - * is part of a calendar system with an N-year cycle field CYCLE, then - * incrementing the YEAR may involve incrementing CYCLE and setting YEAR - * back to 0 or 1. This is not handled by this code, and in fact cannot be - * simply handled without having subclasses define an entire parallel set of - * fields for fields larger than or equal to a year. This additional - * complexity is not warranted, since the intention of the YEAR_WOY field is - * to support ISO 8601 notation, so it will typically be used with a - * proleptic Gregorian calendar, which has no field larger than a year. - */ - void computeWeekFields(UErrorCode &ec); - - - /** - * Ensure that each field is within its valid range by calling {@link - * #validateField(int, int&)} on each field that has been set. This method - * should only be called if this calendar is not lenient. - * @see #isLenient - * @see #validateField(int, int&) - * @internal - */ - void validateFields(UErrorCode &status); - - /** - * Validate a single field of this calendar given its minimum and - * maximum allowed value. If the field is out of range, - * U_ILLEGAL_ARGUMENT_ERROR will be set. Subclasses may - * use this method in their implementation of {@link - * #validateField(int, int&)}. - * @internal - */ - void validateField(UCalendarDateFields field, int32_t min, int32_t max, UErrorCode& status); - - protected: -#ifndef U_HIDE_INTERNAL_API - /** - * Convert a quasi Julian date to the day of the week. The Julian date used here is - * not a true Julian date, since it is measured from midnight, not noon. Return - * value is one-based. - * - * @param julian The given Julian date number. - * @return Day number from 1..7 (SUN..SAT). - * @internal - */ - static uint8_t julianDayToDayOfWeek(double julian); -#endif /* U_HIDE_INTERNAL_API */ - - private: - char validLocale[ULOC_FULLNAME_CAPACITY]; - char actualLocale[ULOC_FULLNAME_CAPACITY]; - - public: -#if !UCONFIG_NO_SERVICE - /** - * INTERNAL FOR 2.6 -- Registration. - */ - -#ifndef U_HIDE_INTERNAL_API - /** - * Return a StringEnumeration over the locales available at the time of the call, - * including registered locales. - * @return a StringEnumeration over the locales available at the time of the call - * @internal - */ - static StringEnumeration* getAvailableLocales(void); - - /** - * Register a new Calendar factory. The factory will be adopted. - * INTERNAL in 2.6 - * - * Because ICU may choose to cache Calendars internally, this must - * be called at application startup, prior to any calls to - * Calendar::createInstance to avoid undefined behavior. - * - * @param toAdopt the factory instance to be adopted - * @param status the in/out status code, no special meanings are assigned - * @return a registry key that can be used to unregister this factory - * @internal - */ - static URegistryKey registerFactory(ICUServiceFactory* toAdopt, UErrorCode& status); - - /** - * Unregister a previously-registered CalendarFactory using the key returned from the - * register call. Key becomes invalid after a successful call and should not be used again. - * The CalendarFactory corresponding to the key will be deleted. - * INTERNAL in 2.6 - * - * Because ICU may choose to cache Calendars internally, this should - * be called during application shutdown, after all calls to - * Calendar::createInstance to avoid undefined behavior. - * - * @param key the registry key returned by a previous call to registerFactory - * @param status the in/out status code, no special meanings are assigned - * @return TRUE if the factory for the key was successfully unregistered - * @internal - */ - static UBool unregister(URegistryKey key, UErrorCode& status); -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Multiple Calendar Implementation - * @internal - */ - friend class CalendarFactory; - - /** - * Multiple Calendar Implementation - * @internal - */ - friend class CalendarService; - - /** - * Multiple Calendar Implementation - * @internal - */ - friend class DefaultCalendarFactory; -#endif /* !UCONFIG_NO_SERVICE */ - - /** - * @return TRUE if this calendar has a default century (i.e. 03 -> 2003) - * @internal - */ - virtual UBool haveDefaultCentury() const = 0; - - /** - * @return the start of the default century, as a UDate - * @internal - */ - virtual UDate defaultCenturyStart() const = 0; - /** - * @return the beginning year of the default century, as a year - * @internal - */ - virtual int32_t defaultCenturyStartYear() const = 0; - - /** Get the locale for this calendar object. You can choose between valid and actual locale. - * @param type type of the locale we're looking for (valid or actual) - * @param status error code for the operation - * @return the locale - * @stable ICU 2.8 - */ - Locale getLocale(ULocDataLocaleType type, UErrorCode &status) const; - - /** - * @return The related Gregorian year; will be obtained by modifying the value - * obtained by get from UCAL_EXTENDED_YEAR field - * @internal - */ - virtual int32_t getRelatedYear(UErrorCode &status) const; - - /** - * @param year The related Gregorian year to set; will be modified as necessary then - * set in UCAL_EXTENDED_YEAR field - * @internal - */ - virtual void setRelatedYear(int32_t year); - -#ifndef U_HIDE_INTERNAL_API - /** Get the locale for this calendar object. You can choose between valid and actual locale. - * @param type type of the locale we're looking for (valid or actual) - * @param status error code for the operation - * @return the locale - * @internal - */ - const char* getLocaleID(ULocDataLocaleType type, UErrorCode &status) const; -#endif /* U_HIDE_INTERNAL_API */ - -private: - /** - * Cast TimeZone used by this object to BasicTimeZone, or NULL if the TimeZone - * is not an instance of BasicTimeZone. - */ - BasicTimeZone* getBasicTimeZone() const; - - /** - * Find the previous zone transition near the given time. - * @param base The base time, inclusive - * @param transitionTime Receives the result time - * @param status The error status - * @return TRUE if a transition is found. - */ - UBool getImmediatePreviousZoneTransition(UDate base, UDate *transitionTime, UErrorCode& status) const; - -public: -#ifndef U_HIDE_INTERNAL_API - /** - * Creates a new Calendar from a Locale for the cache. - * This method does not set the time or timezone in returned calendar. - * @param locale the locale. - * @param status any error returned here. - * @return the new Calendar object with no time or timezone set. - * @internal For ICU use only. - */ - static Calendar * U_EXPORT2 makeInstance( - const Locale &locale, UErrorCode &status); - - /** - * Get the calendar type for given locale. - * @param locale the locale - * @param typeBuffer calendar type returned here - * @param typeBufferSize The size of typeBuffer in bytes. If the type - * can't fit in the buffer, this method sets status to - * U_BUFFER_OVERFLOW_ERROR - * @param status error, if any, returned here. - * @internal For ICU use only. - */ - static void U_EXPORT2 getCalendarTypeFromLocale( - const Locale &locale, - char *typeBuffer, - int32_t typeBufferSize, - UErrorCode &status); -#endif /* U_HIDE_INTERNAL_API */ -}; - -// ------------------------------------- - -inline Calendar* -Calendar::createInstance(TimeZone* zone, UErrorCode& errorCode) -{ - // since the Locale isn't specified, use the default locale - return createInstance(zone, Locale::getDefault(), errorCode); -} - -// ------------------------------------- - -inline void -Calendar::roll(UCalendarDateFields field, UBool up, UErrorCode& status) -{ - roll(field, (int32_t)(up ? +1 : -1), status); -} - -#ifndef U_HIDE_DEPRECATED_API -inline void -Calendar::roll(EDateFields field, UBool up, UErrorCode& status) -{ - roll((UCalendarDateFields) field, up, status); -} -#endif /* U_HIDE_DEPRECATED_API */ - - -// ------------------------------------- - -/** - * Fast method for subclasses. The caller must maintain fUserSetDSTOffset and - * fUserSetZoneOffset, as well as the isSet[] array. - */ - -inline void -Calendar::internalSet(UCalendarDateFields field, int32_t value) -{ - fFields[field] = value; - fStamp[field] = kInternallySet; - fIsSet[field] = TRUE; // Remove later -} - - -#ifndef U_HIDE_INTERNAL_API -inline int32_t Calendar::weekNumber(int32_t dayOfPeriod, int32_t dayOfWeek) -{ - return weekNumber(dayOfPeriod, dayOfPeriod, dayOfWeek); -} -#endif /* U_HIDE_INTERNAL_API */ - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _CALENDAR diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/caniter.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/caniter.h deleted file mode 100644 index fe222515a3..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/caniter.h +++ /dev/null @@ -1,212 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * Copyright (C) 1996-2014, International Business Machines Corporation and - * others. All Rights Reserved. - ******************************************************************************* - */ - -#ifndef CANITER_H -#define CANITER_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_NORMALIZATION - -#include "unicode/uobject.h" -#include "unicode/unistr.h" - -/** - * \file - * \brief C++ API: Canonical Iterator - */ - -/** Should permutation skip characters with combining class zero - * Should be either TRUE or FALSE. This is a compile time option - * @stable ICU 2.4 - */ -#ifndef CANITER_SKIP_ZEROES -#define CANITER_SKIP_ZEROES TRUE -#endif - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class Hashtable; -class Normalizer2; -class Normalizer2Impl; - -/** - * This class allows one to iterate through all the strings that are canonically equivalent to a given - * string. For example, here are some sample results: -Results for: {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA} -1: \\u0041\\u030A\\u0064\\u0307\\u0327 - = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA} -2: \\u0041\\u030A\\u0064\\u0327\\u0307 - = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE} -3: \\u0041\\u030A\\u1E0B\\u0327 - = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA} -4: \\u0041\\u030A\\u1E11\\u0307 - = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE} -5: \\u00C5\\u0064\\u0307\\u0327 - = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA} -6: \\u00C5\\u0064\\u0327\\u0307 - = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE} -7: \\u00C5\\u1E0B\\u0327 - = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA} -8: \\u00C5\\u1E11\\u0307 - = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE} -9: \\u212B\\u0064\\u0307\\u0327 - = {ANGSTROM SIGN}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA} -10: \\u212B\\u0064\\u0327\\u0307 - = {ANGSTROM SIGN}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE} -11: \\u212B\\u1E0B\\u0327 - = {ANGSTROM SIGN}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA} -12: \\u212B\\u1E11\\u0307 - = {ANGSTROM SIGN}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE} - *
Note: the code is intended for use with small strings, and is not suitable for larger ones, - * since it has not been optimized for that situation. - * Note, CanonicalIterator is not intended to be subclassed. - * @author M. Davis - * @author C++ port by V. Weinstein - * @stable ICU 2.4 - */ -class U_COMMON_API CanonicalIterator U_FINAL : public UObject { -public: - /** - * Construct a CanonicalIterator object - * @param source string to get results for - * @param status Fill-in parameter which receives the status of this operation. - * @stable ICU 2.4 - */ - CanonicalIterator(const UnicodeString &source, UErrorCode &status); - - /** Destructor - * Cleans pieces - * @stable ICU 2.4 - */ - virtual ~CanonicalIterator(); - - /** - * Gets the NFD form of the current source we are iterating over. - * @return gets the source: NOTE: it is the NFD form of source - * @stable ICU 2.4 - */ - UnicodeString getSource(); - - /** - * Resets the iterator so that one can start again from the beginning. - * @stable ICU 2.4 - */ - void reset(); - - /** - * Get the next canonically equivalent string. - *
Warning: The strings are not guaranteed to be in any particular order. - * @return the next string that is canonically equivalent. A bogus string is returned when - * the iteration is done. - * @stable ICU 2.4 - */ - UnicodeString next(); - - /** - * Set a new source for this iterator. Allows object reuse. - * @param newSource the source string to iterate against. This allows the same iterator to be used - * while changing the source string, saving object creation. - * @param status Fill-in parameter which receives the status of this operation. - * @stable ICU 2.4 - */ - void setSource(const UnicodeString &newSource, UErrorCode &status); - -#ifndef U_HIDE_INTERNAL_API - /** - * Dumb recursive implementation of permutation. - * TODO: optimize - * @param source the string to find permutations for - * @param skipZeros determine if skip zeros - * @param result the results in a set. - * @param status Fill-in parameter which receives the status of this operation. - * @internal - */ - static void U_EXPORT2 permute(UnicodeString &source, UBool skipZeros, Hashtable *result, UErrorCode &status); -#endif /* U_HIDE_INTERNAL_API */ - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.2 - */ - virtual UClassID getDynamicClassID() const; - -private: - // ===================== PRIVATES ============================== - // private default constructor - CanonicalIterator(); - - - /** - * Copy constructor. Private for now. - * @internal (private) - */ - CanonicalIterator(const CanonicalIterator& other); - - /** - * Assignment operator. Private for now. - * @internal (private) - */ - CanonicalIterator& operator=(const CanonicalIterator& other); - - // fields - UnicodeString source; - UBool done; - - // 2 dimensional array holds the pieces of the string with - // their different canonically equivalent representations - UnicodeString **pieces; - int32_t pieces_length; - int32_t *pieces_lengths; - - // current is used in iterating to combine pieces - int32_t *current; - int32_t current_length; - - // transient fields - UnicodeString buffer; - - const Normalizer2 &nfd; - const Normalizer2Impl &nfcImpl; - - // we have a segment, in NFD. Find all the strings that are canonically equivalent to it. - UnicodeString *getEquivalents(const UnicodeString &segment, int32_t &result_len, UErrorCode &status); //private String[] getEquivalents(String segment) - - //Set getEquivalents2(String segment); - Hashtable *getEquivalents2(Hashtable *fillinResult, const char16_t *segment, int32_t segLen, UErrorCode &status); - //Hashtable *getEquivalents2(const UnicodeString &segment, int32_t segLen, UErrorCode &status); - - /** - * See if the decomposition of cp2 is at segment starting at segmentPos - * (with canonical rearrangment!) - * If so, take the remainder, and return the equivalents - */ - //Set extract(int comp, String segment, int segmentPos, StringBuffer buffer); - Hashtable *extract(Hashtable *fillinResult, UChar32 comp, const char16_t *segment, int32_t segLen, int32_t segmentPos, UErrorCode &status); - //Hashtable *extract(UChar32 comp, const UnicodeString &segment, int32_t segLen, int32_t segmentPos, UErrorCode &status); - - void cleanPieces(); - -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_NORMALIZATION */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/casemap.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/casemap.h deleted file mode 100644 index e5ec8e8dae..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/casemap.h +++ /dev/null @@ -1,494 +0,0 @@ -// © 2017 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html - -// casemap.h -// created: 2017jan12 Markus W. Scherer - -#ifndef __CASEMAP_H__ -#define __CASEMAP_H__ - -#include "unicode/utypes.h" -#include "unicode/stringpiece.h" -#include "unicode/uobject.h" - -/** - * \file - * \brief C++ API: Low-level C++ case mapping functions. - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class BreakIterator; -class ByteSink; -class Edits; - -/** - * Low-level C++ case mapping functions. - * - * @stable ICU 59 - */ -class U_COMMON_API CaseMap U_FINAL : public UMemory { -public: - /** - * Lowercases a UTF-16 string and optionally records edits. - * Casing is locale-dependent and context-sensitive. - * The result may be longer or shorter than the original. - * The source string and the destination buffer must not overlap. - * - * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. - * @param src The original string. - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. - * @param dest A buffer for the result string. The result will be NUL-terminated if - * the buffer is large enough. - * The contents is undefined in case of failure. - * @param destCapacity The size of the buffer (number of char16_ts). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param edits Records edits for index mapping, working with styled text, - * and getting only changes (if any). - * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first unless - * options includes U_EDITS_NO_RESET. edits can be NULL. - * @param errorCode Reference to an in/out error code value - * which must not indicate a failure before the function call. - * @return The length of the result string, if successful. - * When the result would be longer than destCapacity, - * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. - * - * @see u_strToLower - * @stable ICU 59 - */ - static int32_t toLower( - const char *locale, uint32_t options, - const char16_t *src, int32_t srcLength, - char16_t *dest, int32_t destCapacity, Edits *edits, - UErrorCode &errorCode); - - /** - * Uppercases a UTF-16 string and optionally records edits. - * Casing is locale-dependent and context-sensitive. - * The result may be longer or shorter than the original. - * The source string and the destination buffer must not overlap. - * - * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. - * @param src The original string. - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. - * @param dest A buffer for the result string. The result will be NUL-terminated if - * the buffer is large enough. - * The contents is undefined in case of failure. - * @param destCapacity The size of the buffer (number of char16_ts). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param edits Records edits for index mapping, working with styled text, - * and getting only changes (if any). - * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first unless - * options includes U_EDITS_NO_RESET. edits can be NULL. - * @param errorCode Reference to an in/out error code value - * which must not indicate a failure before the function call. - * @return The length of the result string, if successful. - * When the result would be longer than destCapacity, - * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. - * - * @see u_strToUpper - * @stable ICU 59 - */ - static int32_t toUpper( - const char *locale, uint32_t options, - const char16_t *src, int32_t srcLength, - char16_t *dest, int32_t destCapacity, Edits *edits, - UErrorCode &errorCode); - -#if !UCONFIG_NO_BREAK_ITERATION - - /** - * Titlecases a UTF-16 string and optionally records edits. - * Casing is locale-dependent and context-sensitive. - * The result may be longer or shorter than the original. - * The source string and the destination buffer must not overlap. - * - * Titlecasing uses a break iterator to find the first characters of words - * that are to be titlecased. It titlecases those characters and lowercases - * all others. (This can be modified with options bits.) - * - * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT, U_EDITS_NO_RESET, - * U_TITLECASE_NO_LOWERCASE, - * U_TITLECASE_NO_BREAK_ADJUSTMENT, U_TITLECASE_ADJUST_TO_CASED, - * U_TITLECASE_WHOLE_STRING, U_TITLECASE_SENTENCES. - * @param iter A break iterator to find the first characters of words that are to be titlecased. - * It is set to the source string (setText()) - * and used one or more times for iteration (first() and next()). - * If NULL, then a word break iterator for the locale is used - * (or something equivalent). - * @param src The original string. - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. - * @param dest A buffer for the result string. The result will be NUL-terminated if - * the buffer is large enough. - * The contents is undefined in case of failure. - * @param destCapacity The size of the buffer (number of char16_ts). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param edits Records edits for index mapping, working with styled text, - * and getting only changes (if any). - * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first unless - * options includes U_EDITS_NO_RESET. edits can be NULL. - * @param errorCode Reference to an in/out error code value - * which must not indicate a failure before the function call. - * @return The length of the result string, if successful. - * When the result would be longer than destCapacity, - * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. - * - * @see u_strToTitle - * @see ucasemap_toTitle - * @stable ICU 59 - */ - static int32_t toTitle( - const char *locale, uint32_t options, BreakIterator *iter, - const char16_t *src, int32_t srcLength, - char16_t *dest, int32_t destCapacity, Edits *edits, - UErrorCode &errorCode); - -#endif // UCONFIG_NO_BREAK_ITERATION - - /** - * Case-folds a UTF-16 string and optionally records edits. - * - * Case folding is locale-independent and not context-sensitive, - * but there is an option for whether to include or exclude mappings for dotted I - * and dotless i that are marked with 'T' in CaseFolding.txt. - * - * The result may be longer or shorter than the original. - * The source string and the destination buffer must not overlap. - * - * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT, U_EDITS_NO_RESET, - * U_FOLD_CASE_DEFAULT, U_FOLD_CASE_EXCLUDE_SPECIAL_I. - * @param src The original string. - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. - * @param dest A buffer for the result string. The result will be NUL-terminated if - * the buffer is large enough. - * The contents is undefined in case of failure. - * @param destCapacity The size of the buffer (number of char16_ts). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param edits Records edits for index mapping, working with styled text, - * and getting only changes (if any). - * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first unless - * options includes U_EDITS_NO_RESET. edits can be NULL. - * @param errorCode Reference to an in/out error code value - * which must not indicate a failure before the function call. - * @return The length of the result string, if successful. - * When the result would be longer than destCapacity, - * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. - * - * @see u_strFoldCase - * @stable ICU 59 - */ - static int32_t fold( - uint32_t options, - const char16_t *src, int32_t srcLength, - char16_t *dest, int32_t destCapacity, Edits *edits, - UErrorCode &errorCode); - - /** - * Lowercases a UTF-8 string and optionally records edits. - * Casing is locale-dependent and context-sensitive. - * The result may be longer or shorter than the original. - * - * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. - * @param src The original string. - * @param sink A ByteSink to which the result string is written. - * sink.Flush() is called at the end. - * @param edits Records edits for index mapping, working with styled text, - * and getting only changes (if any). - * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first unless - * options includes U_EDITS_NO_RESET. edits can be NULL. - * @param errorCode Reference to an in/out error code value - * which must not indicate a failure before the function call. - * - * @see ucasemap_utf8ToLower - * @stable ICU 60 - */ - static void utf8ToLower( - const char *locale, uint32_t options, - StringPiece src, ByteSink &sink, Edits *edits, - UErrorCode &errorCode); - - /** - * Uppercases a UTF-8 string and optionally records edits. - * Casing is locale-dependent and context-sensitive. - * The result may be longer or shorter than the original. - * - * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. - * @param src The original string. - * @param sink A ByteSink to which the result string is written. - * sink.Flush() is called at the end. - * @param edits Records edits for index mapping, working with styled text, - * and getting only changes (if any). - * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first unless - * options includes U_EDITS_NO_RESET. edits can be NULL. - * @param errorCode Reference to an in/out error code value - * which must not indicate a failure before the function call. - * - * @see ucasemap_utf8ToUpper - * @stable ICU 60 - */ - static void utf8ToUpper( - const char *locale, uint32_t options, - StringPiece src, ByteSink &sink, Edits *edits, - UErrorCode &errorCode); - -#if !UCONFIG_NO_BREAK_ITERATION - - /** - * Titlecases a UTF-8 string and optionally records edits. - * Casing is locale-dependent and context-sensitive. - * The result may be longer or shorter than the original. - * - * Titlecasing uses a break iterator to find the first characters of words - * that are to be titlecased. It titlecases those characters and lowercases - * all others. (This can be modified with options bits.) - * - * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT, U_EDITS_NO_RESET, - * U_TITLECASE_NO_LOWERCASE, - * U_TITLECASE_NO_BREAK_ADJUSTMENT, U_TITLECASE_ADJUST_TO_CASED, - * U_TITLECASE_WHOLE_STRING, U_TITLECASE_SENTENCES. - * @param iter A break iterator to find the first characters of words that are to be titlecased. - * It is set to the source string (setUText()) - * and used one or more times for iteration (first() and next()). - * If NULL, then a word break iterator for the locale is used - * (or something equivalent). - * @param src The original string. - * @param sink A ByteSink to which the result string is written. - * sink.Flush() is called at the end. - * @param edits Records edits for index mapping, working with styled text, - * and getting only changes (if any). - * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first unless - * options includes U_EDITS_NO_RESET. edits can be NULL. - * @param errorCode Reference to an in/out error code value - * which must not indicate a failure before the function call. - * - * @see ucasemap_utf8ToTitle - * @stable ICU 60 - */ - static void utf8ToTitle( - const char *locale, uint32_t options, BreakIterator *iter, - StringPiece src, ByteSink &sink, Edits *edits, - UErrorCode &errorCode); - -#endif // UCONFIG_NO_BREAK_ITERATION - - /** - * Case-folds a UTF-8 string and optionally records edits. - * - * Case folding is locale-independent and not context-sensitive, - * but there is an option for whether to include or exclude mappings for dotted I - * and dotless i that are marked with 'T' in CaseFolding.txt. - * - * The result may be longer or shorter than the original. - * - * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. - * @param src The original string. - * @param sink A ByteSink to which the result string is written. - * sink.Flush() is called at the end. - * @param edits Records edits for index mapping, working with styled text, - * and getting only changes (if any). - * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first unless - * options includes U_EDITS_NO_RESET. edits can be NULL. - * @param errorCode Reference to an in/out error code value - * which must not indicate a failure before the function call. - * - * @see ucasemap_utf8FoldCase - * @stable ICU 60 - */ - static void utf8Fold( - uint32_t options, - StringPiece src, ByteSink &sink, Edits *edits, - UErrorCode &errorCode); - - /** - * Lowercases a UTF-8 string and optionally records edits. - * Casing is locale-dependent and context-sensitive. - * The result may be longer or shorter than the original. - * The source string and the destination buffer must not overlap. - * - * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. - * @param src The original string. - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. - * @param dest A buffer for the result string. The result will be NUL-terminated if - * the buffer is large enough. - * The contents is undefined in case of failure. - * @param destCapacity The size of the buffer (number of bytes). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param edits Records edits for index mapping, working with styled text, - * and getting only changes (if any). - * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first unless - * options includes U_EDITS_NO_RESET. edits can be NULL. - * @param errorCode Reference to an in/out error code value - * which must not indicate a failure before the function call. - * @return The length of the result string, if successful. - * When the result would be longer than destCapacity, - * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. - * - * @see ucasemap_utf8ToLower - * @stable ICU 59 - */ - static int32_t utf8ToLower( - const char *locale, uint32_t options, - const char *src, int32_t srcLength, - char *dest, int32_t destCapacity, Edits *edits, - UErrorCode &errorCode); - - /** - * Uppercases a UTF-8 string and optionally records edits. - * Casing is locale-dependent and context-sensitive. - * The result may be longer or shorter than the original. - * The source string and the destination buffer must not overlap. - * - * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. - * @param src The original string. - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. - * @param dest A buffer for the result string. The result will be NUL-terminated if - * the buffer is large enough. - * The contents is undefined in case of failure. - * @param destCapacity The size of the buffer (number of bytes). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param edits Records edits for index mapping, working with styled text, - * and getting only changes (if any). - * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first unless - * options includes U_EDITS_NO_RESET. edits can be NULL. - * @param errorCode Reference to an in/out error code value - * which must not indicate a failure before the function call. - * @return The length of the result string, if successful. - * When the result would be longer than destCapacity, - * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. - * - * @see ucasemap_utf8ToUpper - * @stable ICU 59 - */ - static int32_t utf8ToUpper( - const char *locale, uint32_t options, - const char *src, int32_t srcLength, - char *dest, int32_t destCapacity, Edits *edits, - UErrorCode &errorCode); - -#if !UCONFIG_NO_BREAK_ITERATION - - /** - * Titlecases a UTF-8 string and optionally records edits. - * Casing is locale-dependent and context-sensitive. - * The result may be longer or shorter than the original. - * The source string and the destination buffer must not overlap. - * - * Titlecasing uses a break iterator to find the first characters of words - * that are to be titlecased. It titlecases those characters and lowercases - * all others. (This can be modified with options bits.) - * - * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT, U_EDITS_NO_RESET, - * U_TITLECASE_NO_LOWERCASE, - * U_TITLECASE_NO_BREAK_ADJUSTMENT, U_TITLECASE_ADJUST_TO_CASED, - * U_TITLECASE_WHOLE_STRING, U_TITLECASE_SENTENCES. - * @param iter A break iterator to find the first characters of words that are to be titlecased. - * It is set to the source string (setUText()) - * and used one or more times for iteration (first() and next()). - * If NULL, then a word break iterator for the locale is used - * (or something equivalent). - * @param src The original string. - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. - * @param dest A buffer for the result string. The result will be NUL-terminated if - * the buffer is large enough. - * The contents is undefined in case of failure. - * @param destCapacity The size of the buffer (number of bytes). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param edits Records edits for index mapping, working with styled text, - * and getting only changes (if any). - * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first unless - * options includes U_EDITS_NO_RESET. edits can be NULL. - * @param errorCode Reference to an in/out error code value - * which must not indicate a failure before the function call. - * @return The length of the result string, if successful. - * When the result would be longer than destCapacity, - * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. - * - * @see ucasemap_utf8ToTitle - * @stable ICU 59 - */ - static int32_t utf8ToTitle( - const char *locale, uint32_t options, BreakIterator *iter, - const char *src, int32_t srcLength, - char *dest, int32_t destCapacity, Edits *edits, - UErrorCode &errorCode); - -#endif // UCONFIG_NO_BREAK_ITERATION - - /** - * Case-folds a UTF-8 string and optionally records edits. - * - * Case folding is locale-independent and not context-sensitive, - * but there is an option for whether to include or exclude mappings for dotted I - * and dotless i that are marked with 'T' in CaseFolding.txt. - * - * The result may be longer or shorter than the original. - * The source string and the destination buffer must not overlap. - * - * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT, U_EDITS_NO_RESET, - * U_FOLD_CASE_DEFAULT, U_FOLD_CASE_EXCLUDE_SPECIAL_I. - * @param src The original string. - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. - * @param dest A buffer for the result string. The result will be NUL-terminated if - * the buffer is large enough. - * The contents is undefined in case of failure. - * @param destCapacity The size of the buffer (number of bytes). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param edits Records edits for index mapping, working with styled text, - * and getting only changes (if any). - * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first unless - * options includes U_EDITS_NO_RESET. edits can be NULL. - * @param errorCode Reference to an in/out error code value - * which must not indicate a failure before the function call. - * @return The length of the result string, if successful. - * When the result would be longer than destCapacity, - * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. - * - * @see ucasemap_utf8FoldCase - * @stable ICU 59 - */ - static int32_t utf8Fold( - uint32_t options, - const char *src, int32_t srcLength, - char *dest, int32_t destCapacity, Edits *edits, - UErrorCode &errorCode); - -private: - CaseMap() = delete; - CaseMap(const CaseMap &other) = delete; - CaseMap &operator=(const CaseMap &other) = delete; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // __CASEMAP_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/char16ptr.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/char16ptr.h deleted file mode 100644 index d58029f7f0..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/char16ptr.h +++ /dev/null @@ -1,310 +0,0 @@ -// © 2017 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html - -// char16ptr.h -// created: 2017feb28 Markus W. Scherer - -#ifndef __CHAR16PTR_H__ -#define __CHAR16PTR_H__ - -#include -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: char16_t pointer wrappers with - * implicit conversion from bit-compatible raw pointer types. - * Also conversion functions from char16_t * to UChar * and OldUChar *. - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * \def U_ALIASING_BARRIER - * Barrier for pointer anti-aliasing optimizations even across function boundaries. - * @internal - */ -#ifdef U_ALIASING_BARRIER - // Use the predefined value. -#elif (defined(__clang__) || defined(__GNUC__)) && U_PLATFORM != U_PF_BROWSER_NATIVE_CLIENT -# define U_ALIASING_BARRIER(ptr) asm volatile("" : : "rm"(ptr) : "memory") -#elif defined(U_IN_DOXYGEN) -# define U_ALIASING_BARRIER(ptr) -#endif - -/** - * char16_t * wrapper with implicit conversion from distinct but bit-compatible pointer types. - * @stable ICU 59 - */ -class U_COMMON_API Char16Ptr U_FINAL { -public: - /** - * Copies the pointer. - * @param p pointer - * @stable ICU 59 - */ - inline Char16Ptr(char16_t *p); -#if !U_CHAR16_IS_TYPEDEF - /** - * Converts the pointer to char16_t *. - * @param p pointer to be converted - * @stable ICU 59 - */ - inline Char16Ptr(uint16_t *p); -#endif -#if U_SIZEOF_WCHAR_T==2 || defined(U_IN_DOXYGEN) - /** - * Converts the pointer to char16_t *. - * (Only defined if U_SIZEOF_WCHAR_T==2.) - * @param p pointer to be converted - * @stable ICU 59 - */ - inline Char16Ptr(wchar_t *p); -#endif - /** - * nullptr constructor. - * @param p nullptr - * @stable ICU 59 - */ - inline Char16Ptr(std::nullptr_t p); - /** - * Destructor. - * @stable ICU 59 - */ - inline ~Char16Ptr(); - - /** - * Pointer access. - * @return the wrapped pointer - * @stable ICU 59 - */ - inline char16_t *get() const; - /** - * char16_t pointer access via type conversion (e.g., static_cast). - * @return the wrapped pointer - * @stable ICU 59 - */ - inline operator char16_t *() const { return get(); } - -private: - Char16Ptr() = delete; - -#ifdef U_ALIASING_BARRIER - template static char16_t *cast(T *t) { - U_ALIASING_BARRIER(t); - return reinterpret_cast(t); - } - - char16_t *p_; -#else - union { - char16_t *cp; - uint16_t *up; - wchar_t *wp; - } u_; -#endif -}; - -/// \cond -#ifdef U_ALIASING_BARRIER - -Char16Ptr::Char16Ptr(char16_t *p) : p_(p) {} -#if !U_CHAR16_IS_TYPEDEF -Char16Ptr::Char16Ptr(uint16_t *p) : p_(cast(p)) {} -#endif -#if U_SIZEOF_WCHAR_T==2 -Char16Ptr::Char16Ptr(wchar_t *p) : p_(cast(p)) {} -#endif -Char16Ptr::Char16Ptr(std::nullptr_t p) : p_(p) {} -Char16Ptr::~Char16Ptr() { - U_ALIASING_BARRIER(p_); -} - -char16_t *Char16Ptr::get() const { return p_; } - -#else - -Char16Ptr::Char16Ptr(char16_t *p) { u_.cp = p; } -#if !U_CHAR16_IS_TYPEDEF -Char16Ptr::Char16Ptr(uint16_t *p) { u_.up = p; } -#endif -#if U_SIZEOF_WCHAR_T==2 -Char16Ptr::Char16Ptr(wchar_t *p) { u_.wp = p; } -#endif -Char16Ptr::Char16Ptr(std::nullptr_t p) { u_.cp = p; } -Char16Ptr::~Char16Ptr() {} - -char16_t *Char16Ptr::get() const { return u_.cp; } - -#endif -/// \endcond - -/** - * const char16_t * wrapper with implicit conversion from distinct but bit-compatible pointer types. - * @stable ICU 59 - */ -class U_COMMON_API ConstChar16Ptr U_FINAL { -public: - /** - * Copies the pointer. - * @param p pointer - * @stable ICU 59 - */ - inline ConstChar16Ptr(const char16_t *p); -#if !U_CHAR16_IS_TYPEDEF - /** - * Converts the pointer to char16_t *. - * @param p pointer to be converted - * @stable ICU 59 - */ - inline ConstChar16Ptr(const uint16_t *p); -#endif -#if U_SIZEOF_WCHAR_T==2 || defined(U_IN_DOXYGEN) - /** - * Converts the pointer to char16_t *. - * (Only defined if U_SIZEOF_WCHAR_T==2.) - * @param p pointer to be converted - * @stable ICU 59 - */ - inline ConstChar16Ptr(const wchar_t *p); -#endif - /** - * nullptr constructor. - * @param p nullptr - * @stable ICU 59 - */ - inline ConstChar16Ptr(const std::nullptr_t p); - - /** - * Destructor. - * @stable ICU 59 - */ - inline ~ConstChar16Ptr(); - - /** - * Pointer access. - * @return the wrapped pointer - * @stable ICU 59 - */ - inline const char16_t *get() const; - /** - * char16_t pointer access via type conversion (e.g., static_cast). - * @return the wrapped pointer - * @stable ICU 59 - */ - inline operator const char16_t *() const { return get(); } - -private: - ConstChar16Ptr() = delete; - -#ifdef U_ALIASING_BARRIER - template static const char16_t *cast(const T *t) { - U_ALIASING_BARRIER(t); - return reinterpret_cast(t); - } - - const char16_t *p_; -#else - union { - const char16_t *cp; - const uint16_t *up; - const wchar_t *wp; - } u_; -#endif -}; - -/// \cond -#ifdef U_ALIASING_BARRIER - -ConstChar16Ptr::ConstChar16Ptr(const char16_t *p) : p_(p) {} -#if !U_CHAR16_IS_TYPEDEF -ConstChar16Ptr::ConstChar16Ptr(const uint16_t *p) : p_(cast(p)) {} -#endif -#if U_SIZEOF_WCHAR_T==2 -ConstChar16Ptr::ConstChar16Ptr(const wchar_t *p) : p_(cast(p)) {} -#endif -ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t p) : p_(p) {} -ConstChar16Ptr::~ConstChar16Ptr() { - U_ALIASING_BARRIER(p_); -} - -const char16_t *ConstChar16Ptr::get() const { return p_; } - -#else - -ConstChar16Ptr::ConstChar16Ptr(const char16_t *p) { u_.cp = p; } -#if !U_CHAR16_IS_TYPEDEF -ConstChar16Ptr::ConstChar16Ptr(const uint16_t *p) { u_.up = p; } -#endif -#if U_SIZEOF_WCHAR_T==2 -ConstChar16Ptr::ConstChar16Ptr(const wchar_t *p) { u_.wp = p; } -#endif -ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t p) { u_.cp = p; } -ConstChar16Ptr::~ConstChar16Ptr() {} - -const char16_t *ConstChar16Ptr::get() const { return u_.cp; } - -#endif -/// \endcond - -/** - * Converts from const char16_t * to const UChar *. - * Includes an aliasing barrier if available. - * @param p pointer - * @return p as const UChar * - * @stable ICU 59 - */ -inline const UChar *toUCharPtr(const char16_t *p) { -#ifdef U_ALIASING_BARRIER - U_ALIASING_BARRIER(p); -#endif - return reinterpret_cast(p); -} - -/** - * Converts from char16_t * to UChar *. - * Includes an aliasing barrier if available. - * @param p pointer - * @return p as UChar * - * @stable ICU 59 - */ -inline UChar *toUCharPtr(char16_t *p) { -#ifdef U_ALIASING_BARRIER - U_ALIASING_BARRIER(p); -#endif - return reinterpret_cast(p); -} - -/** - * Converts from const char16_t * to const OldUChar *. - * Includes an aliasing barrier if available. - * @param p pointer - * @return p as const OldUChar * - * @stable ICU 59 - */ -inline const OldUChar *toOldUCharPtr(const char16_t *p) { -#ifdef U_ALIASING_BARRIER - U_ALIASING_BARRIER(p); -#endif - return reinterpret_cast(p); -} - -/** - * Converts from char16_t * to OldUChar *. - * Includes an aliasing barrier if available. - * @param p pointer - * @return p as OldUChar * - * @stable ICU 59 - */ -inline OldUChar *toOldUCharPtr(char16_t *p) { -#ifdef U_ALIASING_BARRIER - U_ALIASING_BARRIER(p); -#endif - return reinterpret_cast(p); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // __CHAR16PTR_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/chariter.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/chariter.h deleted file mode 100644 index 218398bf38..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/chariter.h +++ /dev/null @@ -1,730 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************** -* -* Copyright (C) 1997-2011, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************** -*/ - -#ifndef CHARITER_H -#define CHARITER_H - -#include "unicode/utypes.h" -#include "unicode/uobject.h" -#include "unicode/unistr.h" -/** - * \file - * \brief C++ API: Character Iterator - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN -/** - * Abstract class that defines an API for forward-only iteration - * on text objects. - * This is a minimal interface for iteration without random access - * or backwards iteration. It is especially useful for wrapping - * streams with converters into an object for collation or - * normalization. - * - *

Characters can be accessed in two ways: as code units or as - * code points. - * Unicode code points are 21-bit integers and are the scalar values - * of Unicode characters. ICU uses the type UChar32 for them. - * Unicode code units are the storage units of a given - * Unicode/UCS Transformation Format (a character encoding scheme). - * With UTF-16, all code points can be represented with either one - * or two code units ("surrogates"). - * String storage is typically based on code units, while properties - * of characters are typically determined using code point values. - * Some processes may be designed to work with sequences of code units, - * or it may be known that all characters that are important to an - * algorithm can be represented with single code units. - * Other processes will need to use the code point access functions.

- * - *

ForwardCharacterIterator provides nextPostInc() to access - * a code unit and advance an internal position into the text object, - * similar to a return text[position++].
- * It provides next32PostInc() to access a code point and advance an internal - * position.

- * - *

next32PostInc() assumes that the current position is that of - * the beginning of a code point, i.e., of its first code unit. - * After next32PostInc(), this will be true again. - * In general, access to code units and code points in the same - * iteration loop should not be mixed. In UTF-16, if the current position - * is on a second code unit (Low Surrogate), then only that code unit - * is returned even by next32PostInc().

- * - *

For iteration with either function, there are two ways to - * check for the end of the iteration. When there are no more - * characters in the text object: - *

    - *
  • The hasNext() function returns FALSE.
  • - *
  • nextPostInc() and next32PostInc() return DONE - * when one attempts to read beyond the end of the text object.
  • - *
- * - * Example: - * \code - * void function1(ForwardCharacterIterator &it) { - * UChar32 c; - * while(it.hasNext()) { - * c=it.next32PostInc(); - * // use c - * } - * } - * - * void function1(ForwardCharacterIterator &it) { - * char16_t c; - * while((c=it.nextPostInc())!=ForwardCharacterIterator::DONE) { - * // use c - * } - * } - * \endcode - *

- * - * @stable ICU 2.0 - */ -class U_COMMON_API ForwardCharacterIterator : public UObject { -public: - /** - * Value returned by most of ForwardCharacterIterator's functions - * when the iterator has reached the limits of its iteration. - * @stable ICU 2.0 - */ - enum { DONE = 0xffff }; - - /** - * Destructor. - * @stable ICU 2.0 - */ - virtual ~ForwardCharacterIterator(); - - /** - * Returns true when both iterators refer to the same - * character in the same character-storage object. - * @param that The ForwardCharacterIterator to be compared for equality - * @return true when both iterators refer to the same - * character in the same character-storage object - * @stable ICU 2.0 - */ - virtual UBool operator==(const ForwardCharacterIterator& that) const = 0; - - /** - * Returns true when the iterators refer to different - * text-storage objects, or to different characters in the - * same text-storage object. - * @param that The ForwardCharacterIterator to be compared for inequality - * @return true when the iterators refer to different - * text-storage objects, or to different characters in the - * same text-storage object - * @stable ICU 2.0 - */ - inline UBool operator!=(const ForwardCharacterIterator& that) const; - - /** - * Generates a hash code for this iterator. - * @return the hash code. - * @stable ICU 2.0 - */ - virtual int32_t hashCode(void) const = 0; - - /** - * Returns a UClassID for this ForwardCharacterIterator ("poor man's - * RTTI").

Despite the fact that this function is public, - * DO NOT CONSIDER IT PART OF CHARACTERITERATOR'S API! - * @return a UClassID for this ForwardCharacterIterator - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const = 0; - - /** - * Gets the current code unit for returning and advances to the next code unit - * in the iteration range - * (toward endIndex()). If there are - * no more code units to return, returns DONE. - * @return the current code unit. - * @stable ICU 2.0 - */ - virtual char16_t nextPostInc(void) = 0; - - /** - * Gets the current code point for returning and advances to the next code point - * in the iteration range - * (toward endIndex()). If there are - * no more code points to return, returns DONE. - * @return the current code point. - * @stable ICU 2.0 - */ - virtual UChar32 next32PostInc(void) = 0; - - /** - * Returns FALSE if there are no more code units or code points - * at or after the current position in the iteration range. - * This is used with nextPostInc() or next32PostInc() in forward - * iteration. - * @returns FALSE if there are no more code units or code points - * at or after the current position in the iteration range. - * @stable ICU 2.0 - */ - virtual UBool hasNext() = 0; - -protected: - /** Default constructor to be overridden in the implementing class. @stable ICU 2.0*/ - ForwardCharacterIterator(); - - /** Copy constructor to be overridden in the implementing class. @stable ICU 2.0*/ - ForwardCharacterIterator(const ForwardCharacterIterator &other); - - /** - * Assignment operator to be overridden in the implementing class. - * @stable ICU 2.0 - */ - ForwardCharacterIterator &operator=(const ForwardCharacterIterator&) { return *this; } -}; - -/** - * Abstract class that defines an API for iteration - * on text objects. - * This is an interface for forward and backward iteration - * and random access into a text object. - * - *

The API provides backward compatibility to the Java and older ICU - * CharacterIterator classes but extends them significantly: - *

    - *
  1. CharacterIterator is now a subclass of ForwardCharacterIterator.
  2. - *
  3. While the old API functions provided forward iteration with - * "pre-increment" semantics, the new one also provides functions - * with "post-increment" semantics. They are more efficient and should - * be the preferred iterator functions for new implementations. - * The backward iteration always had "pre-decrement" semantics, which - * are efficient.
  4. - *
  5. Just like ForwardCharacterIterator, it provides access to - * both code units and code points. Code point access versions are available - * for the old and the new iteration semantics.
  6. - *
  7. There are new functions for setting and moving the current position - * without returning a character, for efficiency.
  8. - *
- * - * See ForwardCharacterIterator for examples for using the new forward iteration - * functions. For backward iteration, there is also a hasPrevious() function - * that can be used analogously to hasNext(). - * The old functions work as before and are shown below.

- * - *

Examples for some of the new functions:

- * - * Forward iteration with hasNext(): - * \code - * void forward1(CharacterIterator &it) { - * UChar32 c; - * for(it.setToStart(); it.hasNext();) { - * c=it.next32PostInc(); - * // use c - * } - * } - * \endcode - * Forward iteration more similar to loops with the old forward iteration, - * showing a way to convert simple for() loops: - * \code - * void forward2(CharacterIterator &it) { - * char16_t c; - * for(c=it.firstPostInc(); c!=CharacterIterator::DONE; c=it.nextPostInc()) { - * // use c - * } - * } - * \endcode - * Backward iteration with setToEnd() and hasPrevious(): - * \code - * void backward1(CharacterIterator &it) { - * UChar32 c; - * for(it.setToEnd(); it.hasPrevious();) { - * c=it.previous32(); - * // use c - * } - * } - * \endcode - * Backward iteration with a more traditional for() loop: - * \code - * void backward2(CharacterIterator &it) { - * char16_t c; - * for(c=it.last(); c!=CharacterIterator::DONE; c=it.previous()) { - * // use c - * } - * } - * \endcode - * - * Example for random access: - * \code - * void random(CharacterIterator &it) { - * // set to the third code point from the beginning - * it.move32(3, CharacterIterator::kStart); - * // get a code point from here without moving the position - * UChar32 c=it.current32(); - * // get the position - * int32_t pos=it.getIndex(); - * // get the previous code unit - * char16_t u=it.previous(); - * // move back one more code unit - * it.move(-1, CharacterIterator::kCurrent); - * // set the position back to where it was - * // and read the same code point c and move beyond it - * it.setIndex(pos); - * if(c!=it.next32PostInc()) { - * exit(1); // CharacterIterator inconsistent - * } - * } - * \endcode - * - *

Examples, especially for the old API:

- * - * Function processing characters, in this example simple output - *
- * \code
- *  void processChar( char16_t c )
- *  {
- *      cout << " " << c;
- *  }
- * \endcode
- * 
- * Traverse the text from start to finish - *
 
- * \code
- *  void traverseForward(CharacterIterator& iter)
- *  {
- *      for(char16_t c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) {
- *          processChar(c);
- *      }
- *  }
- * \endcode
- * 
- * Traverse the text backwards, from end to start - *
- * \code
- *  void traverseBackward(CharacterIterator& iter)
- *  {
- *      for(char16_t c = iter.last(); c != CharacterIterator.DONE; c = iter.previous()) {
- *          processChar(c);
- *      }
- *  }
- * \endcode
- * 
- * Traverse both forward and backward from a given position in the text. - * Calls to notBoundary() in this example represents some additional stopping criteria. - *
- * \code
- * void traverseOut(CharacterIterator& iter, int32_t pos)
- * {
- *      char16_t c;
- *      for (c = iter.setIndex(pos);
- *      c != CharacterIterator.DONE && (Unicode::isLetter(c) || Unicode::isDigit(c));
- *          c = iter.next()) {}
- *      int32_t end = iter.getIndex();
- *      for (c = iter.setIndex(pos);
- *          c != CharacterIterator.DONE && (Unicode::isLetter(c) || Unicode::isDigit(c));
- *          c = iter.previous()) {}
- *      int32_t start = iter.getIndex() + 1;
- *  
- *      cout << "start: " << start << " end: " << end << endl;
- *      for (c = iter.setIndex(start); iter.getIndex() < end; c = iter.next() ) {
- *          processChar(c);
- *     }
- *  }
- * \endcode
- * 
- * Creating a StringCharacterIterator and calling the test functions - *
- * \code
- *  void CharacterIterator_Example( void )
- *   {
- *       cout << endl << "===== CharacterIterator_Example: =====" << endl;
- *       UnicodeString text("Ein kleiner Satz.");
- *       StringCharacterIterator iterator(text);
- *       cout << "----- traverseForward: -----------" << endl;
- *       traverseForward( iterator );
- *       cout << endl << endl << "----- traverseBackward: ----------" << endl;
- *       traverseBackward( iterator );
- *       cout << endl << endl << "----- traverseOut: ---------------" << endl;
- *       traverseOut( iterator, 7 );
- *       cout << endl << endl << "-----" << endl;
- *   }
- * \endcode
- * 
- * - * @stable ICU 2.0 - */ -class U_COMMON_API CharacterIterator : public ForwardCharacterIterator { -public: - /** - * Origin enumeration for the move() and move32() functions. - * @stable ICU 2.0 - */ - enum EOrigin { kStart, kCurrent, kEnd }; - - /** - * Destructor. - * @stable ICU 2.0 - */ - virtual ~CharacterIterator(); - - /** - * Returns a pointer to a new CharacterIterator of the same - * concrete class as this one, and referring to the same - * character in the same text-storage object as this one. The - * caller is responsible for deleting the new clone. - * @return a pointer to a new CharacterIterator - * @stable ICU 2.0 - */ - virtual CharacterIterator* clone(void) const = 0; - - /** - * Sets the iterator to refer to the first code unit in its - * iteration range, and returns that code unit. - * This can be used to begin an iteration with next(). - * @return the first code unit in its iteration range. - * @stable ICU 2.0 - */ - virtual char16_t first(void) = 0; - - /** - * Sets the iterator to refer to the first code unit in its - * iteration range, returns that code unit, and moves the position - * to the second code unit. This is an alternative to setToStart() - * for forward iteration with nextPostInc(). - * @return the first code unit in its iteration range. - * @stable ICU 2.0 - */ - virtual char16_t firstPostInc(void); - - /** - * Sets the iterator to refer to the first code point in its - * iteration range, and returns that code unit, - * This can be used to begin an iteration with next32(). - * Note that an iteration with next32PostInc(), beginning with, - * e.g., setToStart() or firstPostInc(), is more efficient. - * @return the first code point in its iteration range. - * @stable ICU 2.0 - */ - virtual UChar32 first32(void) = 0; - - /** - * Sets the iterator to refer to the first code point in its - * iteration range, returns that code point, and moves the position - * to the second code point. This is an alternative to setToStart() - * for forward iteration with next32PostInc(). - * @return the first code point in its iteration range. - * @stable ICU 2.0 - */ - virtual UChar32 first32PostInc(void); - - /** - * Sets the iterator to refer to the first code unit or code point in its - * iteration range. This can be used to begin a forward - * iteration with nextPostInc() or next32PostInc(). - * @return the start position of the iteration range - * @stable ICU 2.0 - */ - inline int32_t setToStart(); - - /** - * Sets the iterator to refer to the last code unit in its - * iteration range, and returns that code unit. - * This can be used to begin an iteration with previous(). - * @return the last code unit. - * @stable ICU 2.0 - */ - virtual char16_t last(void) = 0; - - /** - * Sets the iterator to refer to the last code point in its - * iteration range, and returns that code unit. - * This can be used to begin an iteration with previous32(). - * @return the last code point. - * @stable ICU 2.0 - */ - virtual UChar32 last32(void) = 0; - - /** - * Sets the iterator to the end of its iteration range, just behind - * the last code unit or code point. This can be used to begin a backward - * iteration with previous() or previous32(). - * @return the end position of the iteration range - * @stable ICU 2.0 - */ - inline int32_t setToEnd(); - - /** - * Sets the iterator to refer to the "position"-th code unit - * in the text-storage object the iterator refers to, and - * returns that code unit. - * @param position the "position"-th code unit in the text-storage object - * @return the "position"-th code unit. - * @stable ICU 2.0 - */ - virtual char16_t setIndex(int32_t position) = 0; - - /** - * Sets the iterator to refer to the beginning of the code point - * that contains the "position"-th code unit - * in the text-storage object the iterator refers to, and - * returns that code point. - * The current position is adjusted to the beginning of the code point - * (its first code unit). - * @param position the "position"-th code unit in the text-storage object - * @return the "position"-th code point. - * @stable ICU 2.0 - */ - virtual UChar32 setIndex32(int32_t position) = 0; - - /** - * Returns the code unit the iterator currently refers to. - * @return the current code unit. - * @stable ICU 2.0 - */ - virtual char16_t current(void) const = 0; - - /** - * Returns the code point the iterator currently refers to. - * @return the current code point. - * @stable ICU 2.0 - */ - virtual UChar32 current32(void) const = 0; - - /** - * Advances to the next code unit in the iteration range - * (toward endIndex()), and returns that code unit. If there are - * no more code units to return, returns DONE. - * @return the next code unit. - * @stable ICU 2.0 - */ - virtual char16_t next(void) = 0; - - /** - * Advances to the next code point in the iteration range - * (toward endIndex()), and returns that code point. If there are - * no more code points to return, returns DONE. - * Note that iteration with "pre-increment" semantics is less - * efficient than iteration with "post-increment" semantics - * that is provided by next32PostInc(). - * @return the next code point. - * @stable ICU 2.0 - */ - virtual UChar32 next32(void) = 0; - - /** - * Advances to the previous code unit in the iteration range - * (toward startIndex()), and returns that code unit. If there are - * no more code units to return, returns DONE. - * @return the previous code unit. - * @stable ICU 2.0 - */ - virtual char16_t previous(void) = 0; - - /** - * Advances to the previous code point in the iteration range - * (toward startIndex()), and returns that code point. If there are - * no more code points to return, returns DONE. - * @return the previous code point. - * @stable ICU 2.0 - */ - virtual UChar32 previous32(void) = 0; - - /** - * Returns FALSE if there are no more code units or code points - * before the current position in the iteration range. - * This is used with previous() or previous32() in backward - * iteration. - * @return FALSE if there are no more code units or code points - * before the current position in the iteration range, return TRUE otherwise. - * @stable ICU 2.0 - */ - virtual UBool hasPrevious() = 0; - - /** - * Returns the numeric index in the underlying text-storage - * object of the character returned by first(). Since it's - * possible to create an iterator that iterates across only - * part of a text-storage object, this number isn't - * necessarily 0. - * @returns the numeric index in the underlying text-storage - * object of the character returned by first(). - * @stable ICU 2.0 - */ - inline int32_t startIndex(void) const; - - /** - * Returns the numeric index in the underlying text-storage - * object of the position immediately BEYOND the character - * returned by last(). - * @return the numeric index in the underlying text-storage - * object of the position immediately BEYOND the character - * returned by last(). - * @stable ICU 2.0 - */ - inline int32_t endIndex(void) const; - - /** - * Returns the numeric index in the underlying text-storage - * object of the character the iterator currently refers to - * (i.e., the character returned by current()). - * @return the numeric index in the text-storage object of - * the character the iterator currently refers to - * @stable ICU 2.0 - */ - inline int32_t getIndex(void) const; - - /** - * Returns the length of the entire text in the underlying - * text-storage object. - * @return the length of the entire text in the text-storage object - * @stable ICU 2.0 - */ - inline int32_t getLength() const; - - /** - * Moves the current position relative to the start or end of the - * iteration range, or relative to the current position itself. - * The movement is expressed in numbers of code units forward - * or backward by specifying a positive or negative delta. - * @param delta the position relative to origin. A positive delta means forward; - * a negative delta means backward. - * @param origin Origin enumeration {kStart, kCurrent, kEnd} - * @return the new position - * @stable ICU 2.0 - */ - virtual int32_t move(int32_t delta, EOrigin origin) = 0; - - /** - * Moves the current position relative to the start or end of the - * iteration range, or relative to the current position itself. - * The movement is expressed in numbers of code points forward - * or backward by specifying a positive or negative delta. - * @param delta the position relative to origin. A positive delta means forward; - * a negative delta means backward. - * @param origin Origin enumeration {kStart, kCurrent, kEnd} - * @return the new position - * @stable ICU 2.0 - */ -#ifdef move32 - // One of the system headers right now is sometimes defining a conflicting macro we don't use -#undef move32 -#endif - virtual int32_t move32(int32_t delta, EOrigin origin) = 0; - - /** - * Copies the text under iteration into the UnicodeString - * referred to by "result". - * @param result Receives a copy of the text under iteration. - * @stable ICU 2.0 - */ - virtual void getText(UnicodeString& result) = 0; - -protected: - /** - * Empty constructor. - * @stable ICU 2.0 - */ - CharacterIterator(); - - /** - * Constructor, just setting the length field in this base class. - * @stable ICU 2.0 - */ - CharacterIterator(int32_t length); - - /** - * Constructor, just setting the length and position fields in this base class. - * @stable ICU 2.0 - */ - CharacterIterator(int32_t length, int32_t position); - - /** - * Constructor, just setting the length, start, end, and position fields in this base class. - * @stable ICU 2.0 - */ - CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position); - - /** - * Copy constructor. - * - * @param that The CharacterIterator to be copied - * @stable ICU 2.0 - */ - CharacterIterator(const CharacterIterator &that); - - /** - * Assignment operator. Sets this CharacterIterator to have the same behavior, - * as the one passed in. - * @param that The CharacterIterator passed in. - * @return the newly set CharacterIterator. - * @stable ICU 2.0 - */ - CharacterIterator &operator=(const CharacterIterator &that); - - /** - * Base class text length field. - * Necessary this for correct getText() and hashCode(). - * @stable ICU 2.0 - */ - int32_t textLength; - - /** - * Base class field for the current position. - * @stable ICU 2.0 - */ - int32_t pos; - - /** - * Base class field for the start of the iteration range. - * @stable ICU 2.0 - */ - int32_t begin; - - /** - * Base class field for the end of the iteration range. - * @stable ICU 2.0 - */ - int32_t end; -}; - -inline UBool -ForwardCharacterIterator::operator!=(const ForwardCharacterIterator& that) const { - return !operator==(that); -} - -inline int32_t -CharacterIterator::setToStart() { - return move(0, kStart); -} - -inline int32_t -CharacterIterator::setToEnd() { - return move(0, kEnd); -} - -inline int32_t -CharacterIterator::startIndex(void) const { - return begin; -} - -inline int32_t -CharacterIterator::endIndex(void) const { - return end; -} - -inline int32_t -CharacterIterator::getIndex(void) const { - return pos; -} - -inline int32_t -CharacterIterator::getLength(void) const { - return textLength; -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/choicfmt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/choicfmt.h deleted file mode 100644 index 7e7d2618dd..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/choicfmt.h +++ /dev/null @@ -1,598 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 1997-2013, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************** -* -* File CHOICFMT.H -* -* Modification History: -* -* Date Name Description -* 02/19/97 aliu Converted from java. -* 03/20/97 helena Finished first cut of implementation and got rid -* of nextDouble/previousDouble and replaced with -* boolean array. -* 4/10/97 aliu Clean up. Modified to work on AIX. -* 8/6/97 nos Removed overloaded constructor, member var 'buffer'. -* 07/22/98 stephen Removed operator!= (implemented in Format) -******************************************************************************** -*/ - -#ifndef CHOICFMT_H -#define CHOICFMT_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Choice Format. - */ - -#if !UCONFIG_NO_FORMATTING -#ifndef U_HIDE_DEPRECATED_API - -#include "unicode/fieldpos.h" -#include "unicode/format.h" -#include "unicode/messagepattern.h" -#include "unicode/numfmt.h" -#include "unicode/unistr.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class MessageFormat; - -/** - * ChoiceFormat converts between ranges of numeric values and strings for those ranges. - * The strings must conform to the MessageFormat pattern syntax. - * - *

ChoiceFormat is probably not what you need. - * Please use MessageFormat - * with plural arguments for proper plural selection, - * and select arguments for simple selection among a fixed set of choices!

- * - *

A ChoiceFormat splits - * the real number line \htmlonly-∞ to - * +∞\endhtmlonly into two - * or more contiguous ranges. Each range is mapped to a - * string.

- * - *

ChoiceFormat was originally intended - * for displaying grammatically correct - * plurals such as "There is one file." vs. "There are 2 files." - * However, plural rules for many languages - * are too complex for the capabilities of ChoiceFormat, - * and its requirement of specifying the precise rules for each message - * is unmanageable for translators.

- * - *

There are two methods of defining a ChoiceFormat; both - * are equivalent. The first is by using a string pattern. This is the - * preferred method in most cases. The second method is through direct - * specification of the arrays that logically make up the - * ChoiceFormat.

- * - *

Note: Typically, choice formatting is done (if done at all) via MessageFormat - * with a choice argument type, - * rather than using a stand-alone ChoiceFormat.

- * - *
Patterns and Their Interpretation
- * - *

The pattern string defines the range boundaries and the strings for each number range. - * Syntax: - *

- * choiceStyle = number separator message ('|' number separator message)*
- * number = normal_number | ['-'] \htmlonly∞\endhtmlonly (U+221E, infinity)
- * normal_number = double value (unlocalized ASCII string)
- * separator = less_than | less_than_or_equal
- * less_than = '<'
- * less_than_or_equal = '#' | \htmlonly≤\endhtmlonly (U+2264)
- * message: see {@link MessageFormat}
- * 
- * Pattern_White_Space between syntax elements is ignored, except - * around each range's sub-message.

- * - *

Each numeric sub-range extends from the current range's number - * to the next range's number. - * The number itself is included in its range if a less_than_or_equal sign is used, - * and excluded from its range (and instead included in the previous range) - * if a less_than sign is used.

- * - *

When a ChoiceFormat is constructed from - * arrays of numbers, closure flags and strings, - * they are interpreted just like - * the sequence of (number separator string) in an equivalent pattern string. - * closure[i]==TRUE corresponds to a less_than separator sign. - * The equivalent pattern string will be constructed automatically.

- * - *

During formatting, a number is mapped to the first range - * where the number is not greater than the range's upper limit. - * That range's message string is returned. A NaN maps to the very first range.

- * - *

During parsing, a range is selected for the longest match of - * any range's message. That range's number is returned, ignoring the separator/closure. - * Only a simple string match is performed, without parsing of arguments that - * might be specified in the message strings.

- * - *

Note that the first range's number is ignored in formatting - * but may be returned from parsing.

- * - *
Examples
- * - *

Here is an example of two arrays that map the number - * 1..7 to the English day of the week abbreviations - * Sun..Sat. No closures array is given; this is the same as - * specifying all closures to be FALSE.

- * - *
    {1,2,3,4,5,6,7},
- *     {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"}
- * - *

Here is an example that maps the ranges [-Inf, 1), [1, 1], and (1, - * +Inf] to three strings. That is, the number line is split into three - * ranges: x < 1.0, x = 1.0, and x > 1.0. - * (The round parentheses in the notation above indicate an exclusive boundary, - * like the turned bracket in European notation: [-Inf, 1) == [-Inf, 1[ )

- * - *
    {0, 1, 1},
- *     {FALSE, FALSE, TRUE},
- *     {"no files", "one file", "many files"}
- * - *

Here is an example that shows formatting and parsing:

- * - * \code - * #include - * #include - * #include - * - * int main(int argc, char *argv[]) { - * double limits[] = {1,2,3,4,5,6,7}; - * UnicodeString monthNames[] = { - * "Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; - * ChoiceFormat fmt(limits, monthNames, 7); - * UnicodeString str; - * char buf[256]; - * for (double x = 1.0; x <= 8.0; x += 1.0) { - * fmt.format(x, str); - * str.extract(0, str.length(), buf, 256, ""); - * str.truncate(0); - * cout << x << " -> " - * << buf << endl; - * } - * cout << endl; - * return 0; - * } - * \endcode - * - *

User subclasses are not supported. While clients may write - * subclasses, such code will not necessarily work and will not be - * guaranteed to work stably from release to release. - * - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ -class U_I18N_API ChoiceFormat: public NumberFormat { -public: - /** - * Constructs a new ChoiceFormat from the pattern string. - * - * @param pattern Pattern used to construct object. - * @param status Output param to receive success code. If the - * pattern cannot be parsed, set to failure code. - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - ChoiceFormat(const UnicodeString& pattern, - UErrorCode& status); - - - /** - * Constructs a new ChoiceFormat with the given limits and message strings. - * All closure flags default to FALSE, - * equivalent to less_than_or_equal separators. - * - * Copies the limits and formats instead of adopting them. - * - * @param limits Array of limit values. - * @param formats Array of formats. - * @param count Size of 'limits' and 'formats' arrays. - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - ChoiceFormat(const double* limits, - const UnicodeString* formats, - int32_t count ); - - /** - * Constructs a new ChoiceFormat with the given limits, closure flags and message strings. - * - * Copies the limits and formats instead of adopting them. - * - * @param limits Array of limit values - * @param closures Array of booleans specifying whether each - * element of 'limits' is open or closed. If FALSE, then the - * corresponding limit number is a member of its range. - * If TRUE, then the limit number belongs to the previous range it. - * @param formats Array of formats - * @param count Size of 'limits', 'closures', and 'formats' arrays - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - ChoiceFormat(const double* limits, - const UBool* closures, - const UnicodeString* formats, - int32_t count); - - /** - * Copy constructor. - * - * @param that ChoiceFormat object to be copied from - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - ChoiceFormat(const ChoiceFormat& that); - - /** - * Assignment operator. - * - * @param that ChoiceFormat object to be copied - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - const ChoiceFormat& operator=(const ChoiceFormat& that); - - /** - * Destructor. - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - virtual ~ChoiceFormat(); - - /** - * Clones this Format object. The caller owns the - * result and must delete it when done. - * - * @return a copy of this object - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - virtual Format* clone(void) const; - - /** - * Returns true if the given Format objects are semantically equal. - * Objects of different subclasses are considered unequal. - * - * @param other ChoiceFormat object to be compared - * @return true if other is the same as this. - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - virtual UBool operator==(const Format& other) const; - - /** - * Sets the pattern. - * @param pattern The pattern to be applied. - * @param status Output param set to success/failure code on - * exit. If the pattern is invalid, this will be - * set to a failure result. - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - virtual void applyPattern(const UnicodeString& pattern, - UErrorCode& status); - - /** - * Sets the pattern. - * @param pattern The pattern to be applied. - * @param parseError Struct to receive information on position - * of error if an error is encountered - * @param status Output param set to success/failure code on - * exit. If the pattern is invalid, this will be - * set to a failure result. - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - virtual void applyPattern(const UnicodeString& pattern, - UParseError& parseError, - UErrorCode& status); - /** - * Gets the pattern. - * - * @param pattern Output param which will receive the pattern - * Previous contents are deleted. - * @return A reference to 'pattern' - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - virtual UnicodeString& toPattern(UnicodeString &pattern) const; - - /** - * Sets the choices to be used in formatting. - * For details see the constructor with the same parameter list. - * - * @param limitsToCopy Contains the top value that you want - * parsed with that format,and should be in - * ascending sorted order. When formatting X, - * the choice will be the i, where limit[i] - * <= X < limit[i+1]. - * @param formatsToCopy The format strings you want to use for each limit. - * @param count The size of the above arrays. - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - virtual void setChoices(const double* limitsToCopy, - const UnicodeString* formatsToCopy, - int32_t count ); - - /** - * Sets the choices to be used in formatting. - * For details see the constructor with the same parameter list. - * - * @param limits Array of limits - * @param closures Array of limit booleans - * @param formats Array of format string - * @param count The size of the above arrays - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - virtual void setChoices(const double* limits, - const UBool* closures, - const UnicodeString* formats, - int32_t count); - - /** - * Returns NULL and 0. - * Before ICU 4.8, this used to return the choice limits array. - * - * @param count Will be set to 0. - * @return NULL - * @deprecated ICU 4.8 Use the MessagePattern class to analyze a ChoiceFormat pattern. - */ - virtual const double* getLimits(int32_t& count) const; - - /** - * Returns NULL and 0. - * Before ICU 4.8, this used to return the limit booleans array. - * - * @param count Will be set to 0. - * @return NULL - * @deprecated ICU 4.8 Use the MessagePattern class to analyze a ChoiceFormat pattern. - */ - virtual const UBool* getClosures(int32_t& count) const; - - /** - * Returns NULL and 0. - * Before ICU 4.8, this used to return the array of choice strings. - * - * @param count Will be set to 0. - * @return NULL - * @deprecated ICU 4.8 Use the MessagePattern class to analyze a ChoiceFormat pattern. - */ - virtual const UnicodeString* getFormats(int32_t& count) const; - - - using NumberFormat::format; - - /** - * Formats a double number using this object's choices. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @return Reference to 'appendTo' parameter. - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - virtual UnicodeString& format(double number, - UnicodeString& appendTo, - FieldPosition& pos) const; - /** - * Formats an int32_t number using this object's choices. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @return Reference to 'appendTo' parameter. - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - virtual UnicodeString& format(int32_t number, - UnicodeString& appendTo, - FieldPosition& pos) const; - - /** - * Formats an int64_t number using this object's choices. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @return Reference to 'appendTo' parameter. - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - virtual UnicodeString& format(int64_t number, - UnicodeString& appendTo, - FieldPosition& pos) const; - - /** - * Formats an array of objects using this object's choices. - * - * @param objs The array of objects to be formatted. - * @param cnt The size of objs. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param success Output param set to success/failure code on - * exit. - * @return Reference to 'appendTo' parameter. - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - virtual UnicodeString& format(const Formattable* objs, - int32_t cnt, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& success) const; - - using NumberFormat::parse; - - /** - * Looks for the longest match of any message string on the input text and, - * if there is a match, sets the result object to the corresponding range's number. - * - * If no string matches, then the parsePosition is unchanged. - * - * @param text The text to be parsed. - * @param result Formattable to be set to the parse result. - * If parse fails, return contents are undefined. - * @param parsePosition The position to start parsing at on input. - * On output, moved to after the last successfully - * parse character. On parse failure, does not change. - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - virtual void parse(const UnicodeString& text, - Formattable& result, - ParsePosition& parsePosition) const; - - /** - * Returns a unique class ID POLYMORPHICALLY. Part of ICU's "poor man's RTTI". - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - virtual UClassID getDynamicClassID(void) const; - - /** - * Returns the class ID for this class. This is useful only for - * comparing to a return value from getDynamicClassID(). For example: - *

-     * .       Base* polymorphic_pointer = createPolymorphicObject();
-     * .       if (polymorphic_pointer->getDynamicClassID() ==
-     * .           Derived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments. - */ - static UClassID U_EXPORT2 getStaticClassID(void); - -private: - /** - * Converts a double value to a string. - * @param value the double number to be converted. - * @param string the result string. - * @return the converted string. - */ - static UnicodeString& dtos(double value, UnicodeString& string); - - ChoiceFormat(); // default constructor not implemented - - /** - * Construct a new ChoiceFormat with the limits and the corresponding formats - * based on the pattern. - * - * @param newPattern Pattern used to construct object. - * @param parseError Struct to receive information on position - * of error if an error is encountered. - * @param status Output param to receive success code. If the - * pattern cannot be parsed, set to failure code. - */ - ChoiceFormat(const UnicodeString& newPattern, - UParseError& parseError, - UErrorCode& status); - - friend class MessageFormat; - - virtual void setChoices(const double* limits, - const UBool* closures, - const UnicodeString* formats, - int32_t count, - UErrorCode &errorCode); - - /** - * Finds the ChoiceFormat sub-message for the given number. - * @param pattern A MessagePattern. - * @param partIndex the index of the first ChoiceFormat argument style part. - * @param number a number to be mapped to one of the ChoiceFormat argument's intervals - * @return the sub-message start part index. - */ - static int32_t findSubMessage(const MessagePattern &pattern, int32_t partIndex, double number); - - static double parseArgument( - const MessagePattern &pattern, int32_t partIndex, - const UnicodeString &source, ParsePosition &pos); - - /** - * Matches the pattern string from the end of the partIndex to - * the beginning of the limitPartIndex, - * including all syntax except SKIP_SYNTAX, - * against the source string starting at sourceOffset. - * If they match, returns the length of the source string match. - * Otherwise returns -1. - */ - static int32_t matchStringUntilLimitPart( - const MessagePattern &pattern, int32_t partIndex, int32_t limitPartIndex, - const UnicodeString &source, int32_t sourceOffset); - - /** - * Some of the ChoiceFormat constructors do not have a UErrorCode paramater. - * We need _some_ way to provide one for the MessagePattern constructor. - * Alternatively, the MessagePattern could be a pointer field, but that is - * not nice either. - */ - UErrorCode constructorErrorCode; - - /** - * The MessagePattern which contains the parsed structure of the pattern string. - * - * Starting with ICU 4.8, the MessagePattern contains a sequence of - * numeric/selector/message parts corresponding to the parsed pattern. - * For details see the MessagePattern class API docs. - */ - MessagePattern msgPattern; - - /** - * Docs & fields from before ICU 4.8, before MessagePattern was used. - * Commented out, and left only for explanation of semantics. - * -------- - * Each ChoiceFormat divides the range -Inf..+Inf into fCount - * intervals. The intervals are: - * - * 0: fChoiceLimits[0]..fChoiceLimits[1] - * 1: fChoiceLimits[1]..fChoiceLimits[2] - * ... - * fCount-2: fChoiceLimits[fCount-2]..fChoiceLimits[fCount-1] - * fCount-1: fChoiceLimits[fCount-1]..+Inf - * - * Interval 0 is special; during formatting (mapping numbers to - * strings), it also contains all numbers less than - * fChoiceLimits[0], as well as NaN values. - * - * Interval i maps to and from string fChoiceFormats[i]. When - * parsing (mapping strings to numbers), then intervals map to - * their lower limit, that is, interval i maps to fChoiceLimit[i]. - * - * The intervals may be closed, half open, or open. This affects - * formatting but does not affect parsing. Interval i is affected - * by fClosures[i] and fClosures[i+1]. If fClosures[i] - * is FALSE, then the value fChoiceLimits[i] is in interval i. - * That is, intervals i and i are: - * - * i-1: ... x < fChoiceLimits[i] - * i: fChoiceLimits[i] <= x ... - * - * If fClosures[i] is TRUE, then the value fChoiceLimits[i] is - * in interval i-1. That is, intervals i-1 and i are: - * - * i-1: ... x <= fChoiceLimits[i] - * i: fChoiceLimits[i] < x ... - * - * Because of the nature of interval 0, fClosures[0] has no - * effect. - */ - // double* fChoiceLimits; - // UBool* fClosures; - // UnicodeString* fChoiceFormats; - // int32_t fCount; -}; - - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // U_HIDE_DEPRECATED_API -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // CHOICFMT_H -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/coleitr.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/coleitr.h deleted file mode 100644 index 91efb9b2b1..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/coleitr.h +++ /dev/null @@ -1,409 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ****************************************************************************** - * Copyright (C) 1997-2014, International Business Machines - * Corporation and others. All Rights Reserved. - ****************************************************************************** - */ - -/** - * \file - * \brief C++ API: Collation Element Iterator. - */ - -/** -* File coleitr.h -* -* Created by: Helena Shih -* -* Modification History: -* -* Date Name Description -* -* 8/18/97 helena Added internal API documentation. -* 08/03/98 erm Synched with 1.2 version CollationElementIterator.java -* 12/10/99 aliu Ported Thai collation support from Java. -* 01/25/01 swquek Modified into a C++ wrapper calling C APIs (ucoliter.h) -* 02/19/01 swquek Removed CollationElementsIterator() since it is -* private constructor and no calls are made to it -* 2012-2014 markus Rewritten in C++ again. -*/ - -#ifndef COLEITR_H -#define COLEITR_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_COLLATION - -#include "unicode/unistr.h" -#include "unicode/uobject.h" - -struct UCollationElements; -struct UHashtable; - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -struct CollationData; - -class CharacterIterator; -class CollationIterator; -class RuleBasedCollator; -class UCollationPCE; -class UVector32; - -/** -* The CollationElementIterator class is used as an iterator to walk through -* each character of an international string. Use the iterator to return the -* ordering priority of the positioned character. The ordering priority of a -* character, which we refer to as a key, defines how a character is collated in -* the given collation object. -* For example, consider the following in Slovak and in traditional Spanish collation: -*
-*        "ca" -> the first key is key('c') and second key is key('a').
-*        "cha" -> the first key is key('ch') and second key is key('a').
-* And in German phonebook collation, -*
 \htmlonly       "æb"-> the first key is key('a'), the second key is key('e'), and
-*        the third key is key('b'). \endhtmlonly 
-* The key of a character, is an integer composed of primary order(short), -* secondary order(char), and tertiary order(char). Java strictly defines the -* size and signedness of its primitive data types. Therefore, the static -* functions primaryOrder(), secondaryOrder(), and tertiaryOrder() return -* int32_t to ensure the correctness of the key value. -*

Example of the iterator usage: (without error checking) -*

-* \code
-*   void CollationElementIterator_Example()
-*   {
-*       UnicodeString str = "This is a test";
-*       UErrorCode success = U_ZERO_ERROR;
-*       RuleBasedCollator* rbc =
-*           (RuleBasedCollator*) RuleBasedCollator::createInstance(success);
-*       CollationElementIterator* c =
-*           rbc->createCollationElementIterator( str );
-*       int32_t order = c->next(success);
-*       c->reset();
-*       order = c->previous(success);
-*       delete c;
-*       delete rbc;
-*   }
-* \endcode
-* 
-*

-* The method next() returns the collation order of the next character based on -* the comparison level of the collator. The method previous() returns the -* collation order of the previous character based on the comparison level of -* the collator. The Collation Element Iterator moves only in one direction -* between calls to reset(), setOffset(), or setText(). That is, next() -* and previous() can not be inter-used. Whenever previous() is to be called after -* next() or vice versa, reset(), setOffset() or setText() has to be called first -* to reset the status, shifting pointers to either the end or the start of -* the string (reset() or setText()), or the specified position (setOffset()). -* Hence at the next call of next() or previous(), the first or last collation order, -* or collation order at the spefcifieid position will be returned. If a change of -* direction is done without one of these calls, the result is undefined. -*

-* The result of a forward iterate (next()) and reversed result of the backward -* iterate (previous()) on the same string are equivalent, if collation orders -* with the value 0 are ignored. -* Character based on the comparison level of the collator. A collation order -* consists of primary order, secondary order and tertiary order. The data -* type of the collation order is int32_t. -* -* Note, CollationElementIterator should not be subclassed. -* @see Collator -* @see RuleBasedCollator -* @version 1.8 Jan 16 2001 -*/ -class U_I18N_API CollationElementIterator U_FINAL : public UObject { -public: - - // CollationElementIterator public data member ------------------------------ - - enum { - /** - * NULLORDER indicates that an error has occured while processing - * @stable ICU 2.0 - */ - NULLORDER = (int32_t)0xffffffff - }; - - // CollationElementIterator public constructor/destructor ------------------- - - /** - * Copy constructor. - * - * @param other the object to be copied from - * @stable ICU 2.0 - */ - CollationElementIterator(const CollationElementIterator& other); - - /** - * Destructor - * @stable ICU 2.0 - */ - virtual ~CollationElementIterator(); - - // CollationElementIterator public methods ---------------------------------- - - /** - * Returns true if "other" is the same as "this" - * - * @param other the object to be compared - * @return true if "other" is the same as "this" - * @stable ICU 2.0 - */ - UBool operator==(const CollationElementIterator& other) const; - - /** - * Returns true if "other" is not the same as "this". - * - * @param other the object to be compared - * @return true if "other" is not the same as "this" - * @stable ICU 2.0 - */ - UBool operator!=(const CollationElementIterator& other) const; - - /** - * Resets the cursor to the beginning of the string. - * @stable ICU 2.0 - */ - void reset(void); - - /** - * Gets the ordering priority of the next character in the string. - * @param status the error code status. - * @return the next character's ordering. otherwise returns NULLORDER if an - * error has occured or if the end of string has been reached - * @stable ICU 2.0 - */ - int32_t next(UErrorCode& status); - - /** - * Get the ordering priority of the previous collation element in the string. - * @param status the error code status. - * @return the previous element's ordering. otherwise returns NULLORDER if an - * error has occured or if the start of string has been reached - * @stable ICU 2.0 - */ - int32_t previous(UErrorCode& status); - - /** - * Gets the primary order of a collation order. - * @param order the collation order - * @return the primary order of a collation order. - * @stable ICU 2.0 - */ - static inline int32_t primaryOrder(int32_t order); - - /** - * Gets the secondary order of a collation order. - * @param order the collation order - * @return the secondary order of a collation order. - * @stable ICU 2.0 - */ - static inline int32_t secondaryOrder(int32_t order); - - /** - * Gets the tertiary order of a collation order. - * @param order the collation order - * @return the tertiary order of a collation order. - * @stable ICU 2.0 - */ - static inline int32_t tertiaryOrder(int32_t order); - - /** - * Return the maximum length of any expansion sequences that end with the - * specified comparison order. - * @param order a collation order returned by previous or next. - * @return maximum size of the expansion sequences ending with the collation - * element or 1 if collation element does not occur at the end of any - * expansion sequence - * @stable ICU 2.0 - */ - int32_t getMaxExpansion(int32_t order) const; - - /** - * Gets the comparison order in the desired strength. Ignore the other - * differences. - * @param order The order value - * @stable ICU 2.0 - */ - int32_t strengthOrder(int32_t order) const; - - /** - * Sets the source string. - * @param str the source string. - * @param status the error code status. - * @stable ICU 2.0 - */ - void setText(const UnicodeString& str, UErrorCode& status); - - /** - * Sets the source string. - * @param str the source character iterator. - * @param status the error code status. - * @stable ICU 2.0 - */ - void setText(CharacterIterator& str, UErrorCode& status); - - /** - * Checks if a comparison order is ignorable. - * @param order the collation order. - * @return TRUE if a character is ignorable, FALSE otherwise. - * @stable ICU 2.0 - */ - static inline UBool isIgnorable(int32_t order); - - /** - * Gets the offset of the currently processed character in the source string. - * @return the offset of the character. - * @stable ICU 2.0 - */ - int32_t getOffset(void) const; - - /** - * Sets the offset of the currently processed character in the source string. - * @param newOffset the new offset. - * @param status the error code status. - * @return the offset of the character. - * @stable ICU 2.0 - */ - void setOffset(int32_t newOffset, UErrorCode& status); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.2 - */ - virtual UClassID getDynamicClassID() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - -#ifndef U_HIDE_INTERNAL_API - /** @internal */ - static inline CollationElementIterator *fromUCollationElements(UCollationElements *uc) { - return reinterpret_cast(uc); - } - /** @internal */ - static inline const CollationElementIterator *fromUCollationElements(const UCollationElements *uc) { - return reinterpret_cast(uc); - } - /** @internal */ - inline UCollationElements *toUCollationElements() { - return reinterpret_cast(this); - } - /** @internal */ - inline const UCollationElements *toUCollationElements() const { - return reinterpret_cast(this); - } -#endif // U_HIDE_INTERNAL_API - -private: - friend class RuleBasedCollator; - friend class UCollationPCE; - - /** - * CollationElementIterator constructor. This takes the source string and the - * collation object. The cursor will walk thru the source string based on the - * predefined collation rules. If the source string is empty, NULLORDER will - * be returned on the calls to next(). - * @param sourceText the source string. - * @param order the collation object. - * @param status the error code status. - */ - CollationElementIterator(const UnicodeString& sourceText, - const RuleBasedCollator* order, UErrorCode& status); - // Note: The constructors should take settings & tailoring, not a collator, - // to avoid circular dependencies. - // However, for operator==() we would need to be able to compare tailoring data for equality - // without making CollationData or CollationTailoring depend on TailoredSet. - // (See the implementation of RuleBasedCollator::operator==().) - // That might require creating an intermediate class that would be used - // by both CollationElementIterator and RuleBasedCollator - // but only contain the part of RBC== related to data and rules. - - /** - * CollationElementIterator constructor. This takes the source string and the - * collation object. The cursor will walk thru the source string based on the - * predefined collation rules. If the source string is empty, NULLORDER will - * be returned on the calls to next(). - * @param sourceText the source string. - * @param order the collation object. - * @param status the error code status. - */ - CollationElementIterator(const CharacterIterator& sourceText, - const RuleBasedCollator* order, UErrorCode& status); - - /** - * Assignment operator - * - * @param other the object to be copied - */ - const CollationElementIterator& - operator=(const CollationElementIterator& other); - - CollationElementIterator(); // default constructor not implemented - - /** Normalizes dir_=1 (just after setOffset()) to dir_=0 (just after reset()). */ - inline int8_t normalizeDir() const { return dir_ == 1 ? 0 : dir_; } - - static UHashtable *computeMaxExpansions(const CollationData *data, UErrorCode &errorCode); - - static int32_t getMaxExpansion(const UHashtable *maxExpansions, int32_t order); - - // CollationElementIterator private data members ---------------------------- - - CollationIterator *iter_; // owned - const RuleBasedCollator *rbc_; // aliased - uint32_t otherHalf_; - /** - * <0: backwards; 0: just after reset() (previous() begins from end); - * 1: just after setOffset(); >1: forward - */ - int8_t dir_; - /** - * Stores offsets from expansions and from unsafe-backwards iteration, - * so that getOffset() returns intermediate offsets for the CEs - * that are consistent with forward iteration. - */ - UVector32 *offsets_; - - UnicodeString string_; -}; - -// CollationElementIterator inline method definitions -------------------------- - -inline int32_t CollationElementIterator::primaryOrder(int32_t order) -{ - return (order >> 16) & 0xffff; -} - -inline int32_t CollationElementIterator::secondaryOrder(int32_t order) -{ - return (order >> 8) & 0xff; -} - -inline int32_t CollationElementIterator::tertiaryOrder(int32_t order) -{ - return order & 0xff; -} - -inline UBool CollationElementIterator::isIgnorable(int32_t order) -{ - return (order & 0xffff0000) == 0; -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_COLLATION */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/coll.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/coll.h deleted file mode 100644 index 76663c4c33..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/coll.h +++ /dev/null @@ -1,1276 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* Copyright (C) 1996-2016, International Business Machines -* Corporation and others. All Rights Reserved. -****************************************************************************** -*/ - -/** - * \file - * \brief C++ API: Collation Service. - */ - -/** -* File coll.h -* -* Created by: Helena Shih -* -* Modification History: -* -* Date Name Description -* 02/5/97 aliu Modified createDefault to load collation data from -* binary files when possible. Added related methods -* createCollationFromFile, chopLocale, createPathName. -* 02/11/97 aliu Added members addToCache, findInCache, and fgCache. -* 02/12/97 aliu Modified to create objects from RuleBasedCollator cache. -* Moved cache out of Collation class. -* 02/13/97 aliu Moved several methods out of this class and into -* RuleBasedCollator, with modifications. Modified -* createDefault() to call new RuleBasedCollator(Locale&) -* constructor. General clean up and documentation. -* 02/20/97 helena Added clone, operator==, operator!=, operator=, copy -* constructor and getDynamicClassID. -* 03/25/97 helena Updated with platform independent data types. -* 05/06/97 helena Added memory allocation error detection. -* 06/20/97 helena Java class name change. -* 09/03/97 helena Added createCollationKeyValues(). -* 02/10/98 damiba Added compare() with length as parameter. -* 04/23/99 stephen Removed EDecompositionMode, merged with -* Normalizer::EMode. -* 11/02/99 helena Collator performance enhancements. Eliminates the -* UnicodeString construction and special case for NO_OP. -* 11/23/99 srl More performance enhancements. Inlining of -* critical accessors. -* 05/15/00 helena Added version information API. -* 01/29/01 synwee Modified into a C++ wrapper which calls C apis -* (ucol.h). -* 2012-2014 markus Rewritten in C++ again. -*/ - -#ifndef COLL_H -#define COLL_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_COLLATION - -#include "unicode/uobject.h" -#include "unicode/ucol.h" -#include "unicode/unorm.h" -#include "unicode/locid.h" -#include "unicode/uniset.h" -#include "unicode/umisc.h" -#include "unicode/uiter.h" -#include "unicode/stringpiece.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class StringEnumeration; - -#if !UCONFIG_NO_SERVICE -/** - * @stable ICU 2.6 - */ -class CollatorFactory; -#endif - -/** -* @stable ICU 2.0 -*/ -class CollationKey; - -/** -* The Collator class performs locale-sensitive string -* comparison.
-* You use this class to build searching and sorting routines for natural -* language text. -*

-* Collator is an abstract base class. Subclasses implement -* specific collation strategies. One subclass, -* RuleBasedCollator, is currently provided and is applicable -* to a wide set of languages. Other subclasses may be created to handle more -* specialized needs. -*

-* Like other locale-sensitive classes, you can use the static factory method, -* createInstance, to obtain the appropriate -* Collator object for a given locale. You will only need to -* look at the subclasses of Collator if you need to -* understand the details of a particular collation strategy or if you need to -* modify that strategy. -*

-* The following example shows how to compare two strings using the -* Collator for the default locale. -* \htmlonly

\endhtmlonly -*
-* \code
-* // Compare two strings in the default locale
-* UErrorCode success = U_ZERO_ERROR;
-* Collator* myCollator = Collator::createInstance(success);
-* if (myCollator->compare("abc", "ABC") < 0)
-*   cout << "abc is less than ABC" << endl;
-* else
-*   cout << "abc is greater than or equal to ABC" << endl;
-* \endcode
-* 
-* \htmlonly
\endhtmlonly -*

-* You can set a Collator's strength attribute to -* determine the level of difference considered significant in comparisons. -* Five strengths are provided: PRIMARY, SECONDARY, -* TERTIARY, QUATERNARY and IDENTICAL. -* The exact assignment of strengths to language features is locale dependent. -* For example, in Czech, "e" and "f" are considered primary differences, -* while "e" and "\u00EA" are secondary differences, "e" and "E" are tertiary -* differences and "e" and "e" are identical. The following shows how both case -* and accents could be ignored for US English. -* \htmlonly

\endhtmlonly -*
-* \code
-* //Get the Collator for US English and set its strength to PRIMARY
-* UErrorCode success = U_ZERO_ERROR;
-* Collator* usCollator = Collator::createInstance(Locale::getUS(), success);
-* usCollator->setStrength(Collator::PRIMARY);
-* if (usCollator->compare("abc", "ABC") == 0)
-*     cout << "'abc' and 'ABC' strings are equivalent with strength PRIMARY" << endl;
-* \endcode
-* 
-* \htmlonly
\endhtmlonly -* -* The getSortKey methods -* convert a string to a series of bytes that can be compared bitwise against -* other sort keys using strcmp(). Sort keys are written as -* zero-terminated byte strings. -* -* Another set of APIs returns a CollationKey object that wraps -* the sort key bytes instead of returning the bytes themselves. -*

-*

-* Note: Collators with different Locale, -* and CollationStrength settings will return different sort -* orders for the same set of strings. Locales have specific collation rules, -* and the way in which secondary and tertiary differences are taken into -* account, for example, will result in a different sorting order for same -* strings. -*

-* @see RuleBasedCollator -* @see CollationKey -* @see CollationElementIterator -* @see Locale -* @see Normalizer2 -* @version 2.0 11/15/01 -*/ - -class U_I18N_API Collator : public UObject { -public: - - // Collator public enums ----------------------------------------------- - - /** - * Base letter represents a primary difference. Set comparison level to - * PRIMARY to ignore secondary and tertiary differences.
- * Use this to set the strength of a Collator object.
- * Example of primary difference, "abc" < "abd" - * - * Diacritical differences on the same base letter represent a secondary - * difference. Set comparison level to SECONDARY to ignore tertiary - * differences. Use this to set the strength of a Collator object.
- * Example of secondary difference, "ä" >> "a". - * - * Uppercase and lowercase versions of the same character represents a - * tertiary difference. Set comparison level to TERTIARY to include all - * comparison differences. Use this to set the strength of a Collator - * object.
- * Example of tertiary difference, "abc" <<< "ABC". - * - * Two characters are considered "identical" when they have the same unicode - * spellings.
- * For example, "ä" == "ä". - * - * UCollationStrength is also used to determine the strength of sort keys - * generated from Collator objects. - * @stable ICU 2.0 - */ - enum ECollationStrength - { - PRIMARY = UCOL_PRIMARY, // 0 - SECONDARY = UCOL_SECONDARY, // 1 - TERTIARY = UCOL_TERTIARY, // 2 - QUATERNARY = UCOL_QUATERNARY, // 3 - IDENTICAL = UCOL_IDENTICAL // 15 - }; - - - // Cannot use #ifndef U_HIDE_DEPRECATED_API for the following, it is - // used by virtual methods that cannot have that conditional. - /** - * LESS is returned if source string is compared to be less than target - * string in the compare() method. - * EQUAL is returned if source string is compared to be equal to target - * string in the compare() method. - * GREATER is returned if source string is compared to be greater than - * target string in the compare() method. - * @see Collator#compare - * @deprecated ICU 2.6. Use C enum UCollationResult defined in ucol.h - */ - enum EComparisonResult - { - LESS = UCOL_LESS, // -1 - EQUAL = UCOL_EQUAL, // 0 - GREATER = UCOL_GREATER // 1 - }; - - // Collator public destructor ----------------------------------------- - - /** - * Destructor - * @stable ICU 2.0 - */ - virtual ~Collator(); - - // Collator public methods -------------------------------------------- - - /** - * Returns TRUE if "other" is the same as "this". - * - * The base class implementation returns TRUE if "other" has the same type/class as "this": - * `typeid(*this) == typeid(other)`. - * - * Subclass implementations should do something like the following: - * - * if (this == &other) { return TRUE; } - * if (!Collator::operator==(other)) { return FALSE; } // not the same class - * - * const MyCollator &o = (const MyCollator&)other; - * (compare this vs. o's subclass fields) - * - * @param other Collator object to be compared - * @return TRUE if other is the same as this. - * @stable ICU 2.0 - */ - virtual UBool operator==(const Collator& other) const; - - /** - * Returns true if "other" is not the same as "this". - * Calls ! operator==(const Collator&) const which works for all subclasses. - * @param other Collator object to be compared - * @return TRUE if other is not the same as this. - * @stable ICU 2.0 - */ - virtual UBool operator!=(const Collator& other) const; - - /** - * Makes a copy of this object. - * @return a copy of this object, owned by the caller - * @stable ICU 2.0 - */ - virtual Collator* clone(void) const = 0; - - /** - * Creates the Collator object for the current default locale. - * The default locale is determined by Locale::getDefault. - * The UErrorCode& err parameter is used to return status information to the user. - * To check whether the construction succeeded or not, you should check the - * value of U_SUCCESS(err). If you wish more detailed information, you can - * check for informational error results which still indicate success. - * U_USING_FALLBACK_ERROR indicates that a fall back locale was used. For - * example, 'de_CH' was requested, but nothing was found there, so 'de' was - * used. U_USING_DEFAULT_ERROR indicates that the default locale data was - * used; neither the requested locale nor any of its fall back locales - * could be found. - * The caller owns the returned object and is responsible for deleting it. - * - * @param err the error code status. - * @return the collation object of the default locale.(for example, en_US) - * @see Locale#getDefault - * @stable ICU 2.0 - */ - static Collator* U_EXPORT2 createInstance(UErrorCode& err); - - /** - * Gets the collation object for the desired locale. The - * resource of the desired locale will be loaded. - * - * Locale::getRoot() is the base collation table and all other languages are - * built on top of it with additional language-specific modifications. - * - * For some languages, multiple collation types are available; - * for example, "de@collation=phonebook". - * Starting with ICU 54, collation attributes can be specified via locale keywords as well, - * in the old locale extension syntax ("el@colCaseFirst=upper") - * or in language tag syntax ("el-u-kf-upper"). - * See User Guide: Collation API. - * - * The UErrorCode& err parameter is used to return status information to the user. - * To check whether the construction succeeded or not, you should check - * the value of U_SUCCESS(err). If you wish more detailed information, you - * can check for informational error results which still indicate success. - * U_USING_FALLBACK_ERROR indicates that a fall back locale was used. For - * example, 'de_CH' was requested, but nothing was found there, so 'de' was - * used. U_USING_DEFAULT_ERROR indicates that the default locale data was - * used; neither the requested locale nor any of its fall back locales - * could be found. - * - * The caller owns the returned object and is responsible for deleting it. - * @param loc The locale ID for which to open a collator. - * @param err the error code status. - * @return the created table-based collation object based on the desired - * locale. - * @see Locale - * @see ResourceLoader - * @stable ICU 2.2 - */ - static Collator* U_EXPORT2 createInstance(const Locale& loc, UErrorCode& err); - - /** - * The comparison function compares the character data stored in two - * different strings. Returns information about whether a string is less - * than, greater than or equal to another string. - * @param source the source string to be compared with. - * @param target the string that is to be compared with the source string. - * @return Returns a byte value. GREATER if source is greater - * than target; EQUAL if source is equal to target; LESS if source is less - * than target - * @deprecated ICU 2.6 use the overload with UErrorCode & - */ - virtual EComparisonResult compare(const UnicodeString& source, - const UnicodeString& target) const; - - /** - * The comparison function compares the character data stored in two - * different strings. Returns information about whether a string is less - * than, greater than or equal to another string. - * @param source the source string to be compared with. - * @param target the string that is to be compared with the source string. - * @param status possible error code - * @return Returns an enum value. UCOL_GREATER if source is greater - * than target; UCOL_EQUAL if source is equal to target; UCOL_LESS if source is less - * than target - * @stable ICU 2.6 - */ - virtual UCollationResult compare(const UnicodeString& source, - const UnicodeString& target, - UErrorCode &status) const = 0; - - /** - * Does the same thing as compare but limits the comparison to a specified - * length - * @param source the source string to be compared with. - * @param target the string that is to be compared with the source string. - * @param length the length the comparison is limited to - * @return Returns a byte value. GREATER if source (up to the specified - * length) is greater than target; EQUAL if source (up to specified - * length) is equal to target; LESS if source (up to the specified - * length) is less than target. - * @deprecated ICU 2.6 use the overload with UErrorCode & - */ - virtual EComparisonResult compare(const UnicodeString& source, - const UnicodeString& target, - int32_t length) const; - - /** - * Does the same thing as compare but limits the comparison to a specified - * length - * @param source the source string to be compared with. - * @param target the string that is to be compared with the source string. - * @param length the length the comparison is limited to - * @param status possible error code - * @return Returns an enum value. UCOL_GREATER if source (up to the specified - * length) is greater than target; UCOL_EQUAL if source (up to specified - * length) is equal to target; UCOL_LESS if source (up to the specified - * length) is less than target. - * @stable ICU 2.6 - */ - virtual UCollationResult compare(const UnicodeString& source, - const UnicodeString& target, - int32_t length, - UErrorCode &status) const = 0; - - /** - * The comparison function compares the character data stored in two - * different string arrays. Returns information about whether a string array - * is less than, greater than or equal to another string array. - *

Example of use: - *

-     * .       char16_t ABC[] = {0x41, 0x42, 0x43, 0};  // = "ABC"
-     * .       char16_t abc[] = {0x61, 0x62, 0x63, 0};  // = "abc"
-     * .       UErrorCode status = U_ZERO_ERROR;
-     * .       Collator *myCollation =
-     * .                         Collator::createInstance(Locale::getUS(), status);
-     * .       if (U_FAILURE(status)) return;
-     * .       myCollation->setStrength(Collator::PRIMARY);
-     * .       // result would be Collator::EQUAL ("abc" == "ABC")
-     * .       // (no primary difference between "abc" and "ABC")
-     * .       Collator::EComparisonResult result =
-     * .                             myCollation->compare(abc, 3, ABC, 3);
-     * .       myCollation->setStrength(Collator::TERTIARY);
-     * .       // result would be Collator::LESS ("abc" <<< "ABC")
-     * .       // (with tertiary difference between "abc" and "ABC")
-     * .       result = myCollation->compare(abc, 3, ABC, 3);
-     * 
- * @param source the source string array to be compared with. - * @param sourceLength the length of the source string array. If this value - * is equal to -1, the string array is null-terminated. - * @param target the string that is to be compared with the source string. - * @param targetLength the length of the target string array. If this value - * is equal to -1, the string array is null-terminated. - * @return Returns a byte value. GREATER if source is greater than target; - * EQUAL if source is equal to target; LESS if source is less than - * target - * @deprecated ICU 2.6 use the overload with UErrorCode & - */ - virtual EComparisonResult compare(const char16_t* source, int32_t sourceLength, - const char16_t* target, int32_t targetLength) - const; - - /** - * The comparison function compares the character data stored in two - * different string arrays. Returns information about whether a string array - * is less than, greater than or equal to another string array. - * @param source the source string array to be compared with. - * @param sourceLength the length of the source string array. If this value - * is equal to -1, the string array is null-terminated. - * @param target the string that is to be compared with the source string. - * @param targetLength the length of the target string array. If this value - * is equal to -1, the string array is null-terminated. - * @param status possible error code - * @return Returns an enum value. UCOL_GREATER if source is greater - * than target; UCOL_EQUAL if source is equal to target; UCOL_LESS if source is less - * than target - * @stable ICU 2.6 - */ - virtual UCollationResult compare(const char16_t* source, int32_t sourceLength, - const char16_t* target, int32_t targetLength, - UErrorCode &status) const = 0; - - /** - * Compares two strings using the Collator. - * Returns whether the first one compares less than/equal to/greater than - * the second one. - * This version takes UCharIterator input. - * @param sIter the first ("source") string iterator - * @param tIter the second ("target") string iterator - * @param status ICU status - * @return UCOL_LESS, UCOL_EQUAL or UCOL_GREATER - * @stable ICU 4.2 - */ - virtual UCollationResult compare(UCharIterator &sIter, - UCharIterator &tIter, - UErrorCode &status) const; - - /** - * Compares two UTF-8 strings using the Collator. - * Returns whether the first one compares less than/equal to/greater than - * the second one. - * This version takes UTF-8 input. - * Note that a StringPiece can be implicitly constructed - * from a std::string or a NUL-terminated const char * string. - * @param source the first UTF-8 string - * @param target the second UTF-8 string - * @param status ICU status - * @return UCOL_LESS, UCOL_EQUAL or UCOL_GREATER - * @stable ICU 4.2 - */ - virtual UCollationResult compareUTF8(const StringPiece &source, - const StringPiece &target, - UErrorCode &status) const; - - /** - * Transforms the string into a series of characters that can be compared - * with CollationKey::compareTo. It is not possible to restore the original - * string from the chars in the sort key. - *

Use CollationKey::equals or CollationKey::compare to compare the - * generated sort keys. - * If the source string is null, a null collation key will be returned. - * - * Note that sort keys are often less efficient than simply doing comparison. - * For more details, see the ICU User Guide. - * - * @param source the source string to be transformed into a sort key. - * @param key the collation key to be filled in - * @param status the error code status. - * @return the collation key of the string based on the collation rules. - * @see CollationKey#compare - * @stable ICU 2.0 - */ - virtual CollationKey& getCollationKey(const UnicodeString& source, - CollationKey& key, - UErrorCode& status) const = 0; - - /** - * Transforms the string into a series of characters that can be compared - * with CollationKey::compareTo. It is not possible to restore the original - * string from the chars in the sort key. - *

Use CollationKey::equals or CollationKey::compare to compare the - * generated sort keys. - *

If the source string is null, a null collation key will be returned. - * - * Note that sort keys are often less efficient than simply doing comparison. - * For more details, see the ICU User Guide. - * - * @param source the source string to be transformed into a sort key. - * @param sourceLength length of the collation key - * @param key the collation key to be filled in - * @param status the error code status. - * @return the collation key of the string based on the collation rules. - * @see CollationKey#compare - * @stable ICU 2.0 - */ - virtual CollationKey& getCollationKey(const char16_t*source, - int32_t sourceLength, - CollationKey& key, - UErrorCode& status) const = 0; - /** - * Generates the hash code for the collation object - * @stable ICU 2.0 - */ - virtual int32_t hashCode(void) const = 0; - - /** - * Gets the locale of the Collator - * - * @param type can be either requested, valid or actual locale. For more - * information see the definition of ULocDataLocaleType in - * uloc.h - * @param status the error code status. - * @return locale where the collation data lives. If the collator - * was instantiated from rules, locale is empty. - * @deprecated ICU 2.8 This API is under consideration for revision - * in ICU 3.0. - */ - virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const = 0; - - /** - * Convenience method for comparing two strings based on the collation rules. - * @param source the source string to be compared with. - * @param target the target string to be compared with. - * @return true if the first string is greater than the second one, - * according to the collation rules. false, otherwise. - * @see Collator#compare - * @stable ICU 2.0 - */ - UBool greater(const UnicodeString& source, const UnicodeString& target) - const; - - /** - * Convenience method for comparing two strings based on the collation rules. - * @param source the source string to be compared with. - * @param target the target string to be compared with. - * @return true if the first string is greater than or equal to the second - * one, according to the collation rules. false, otherwise. - * @see Collator#compare - * @stable ICU 2.0 - */ - UBool greaterOrEqual(const UnicodeString& source, - const UnicodeString& target) const; - - /** - * Convenience method for comparing two strings based on the collation rules. - * @param source the source string to be compared with. - * @param target the target string to be compared with. - * @return true if the strings are equal according to the collation rules. - * false, otherwise. - * @see Collator#compare - * @stable ICU 2.0 - */ - UBool equals(const UnicodeString& source, const UnicodeString& target) const; - - /** - * Determines the minimum strength that will be used in comparison or - * transformation. - *

E.g. with strength == SECONDARY, the tertiary difference is ignored - *

E.g. with strength == PRIMARY, the secondary and tertiary difference - * are ignored. - * @return the current comparison level. - * @see Collator#setStrength - * @deprecated ICU 2.6 Use getAttribute(UCOL_STRENGTH...) instead - */ - virtual ECollationStrength getStrength(void) const; - - /** - * Sets the minimum strength to be used in comparison or transformation. - *

Example of use: - *

-     *  \code
-     *  UErrorCode status = U_ZERO_ERROR;
-     *  Collator*myCollation = Collator::createInstance(Locale::getUS(), status);
-     *  if (U_FAILURE(status)) return;
-     *  myCollation->setStrength(Collator::PRIMARY);
-     *  // result will be "abc" == "ABC"
-     *  // tertiary differences will be ignored
-     *  Collator::ComparisonResult result = myCollation->compare("abc", "ABC");
-     * \endcode
-     * 
- * @see Collator#getStrength - * @param newStrength the new comparison level. - * @deprecated ICU 2.6 Use setAttribute(UCOL_STRENGTH...) instead - */ - virtual void setStrength(ECollationStrength newStrength); - - /** - * Retrieves the reordering codes for this collator. - * @param dest The array to fill with the script ordering. - * @param destCapacity The length of dest. If it is 0, then dest may be NULL and the function - * will only return the length of the result without writing any codes (pre-flighting). - * @param status A reference to an error code value, which must not indicate - * a failure before the function call. - * @return The length of the script ordering array. - * @see ucol_setReorderCodes - * @see Collator#getEquivalentReorderCodes - * @see Collator#setReorderCodes - * @see UScriptCode - * @see UColReorderCode - * @stable ICU 4.8 - */ - virtual int32_t getReorderCodes(int32_t *dest, - int32_t destCapacity, - UErrorCode& status) const; - - /** - * Sets the ordering of scripts for this collator. - * - *

The reordering codes are a combination of script codes and reorder codes. - * @param reorderCodes An array of script codes in the new order. This can be NULL if the - * length is also set to 0. An empty array will clear any reordering codes on the collator. - * @param reorderCodesLength The length of reorderCodes. - * @param status error code - * @see ucol_setReorderCodes - * @see Collator#getReorderCodes - * @see Collator#getEquivalentReorderCodes - * @see UScriptCode - * @see UColReorderCode - * @stable ICU 4.8 - */ - virtual void setReorderCodes(const int32_t* reorderCodes, - int32_t reorderCodesLength, - UErrorCode& status) ; - - /** - * Retrieves the reorder codes that are grouped with the given reorder code. Some reorder - * codes will be grouped and must reorder together. - * Beginning with ICU 55, scripts only reorder together if they are primary-equal, - * for example Hiragana and Katakana. - * - * @param reorderCode The reorder code to determine equivalence for. - * @param dest The array to fill with the script equivalence reordering codes. - * @param destCapacity The length of dest. If it is 0, then dest may be NULL and the - * function will only return the length of the result without writing any codes (pre-flighting). - * @param status A reference to an error code value, which must not indicate - * a failure before the function call. - * @return The length of the of the reordering code equivalence array. - * @see ucol_setReorderCodes - * @see Collator#getReorderCodes - * @see Collator#setReorderCodes - * @see UScriptCode - * @see UColReorderCode - * @stable ICU 4.8 - */ - static int32_t U_EXPORT2 getEquivalentReorderCodes(int32_t reorderCode, - int32_t* dest, - int32_t destCapacity, - UErrorCode& status); - - /** - * Get name of the object for the desired Locale, in the desired language - * @param objectLocale must be from getAvailableLocales - * @param displayLocale specifies the desired locale for output - * @param name the fill-in parameter of the return value - * @return display-able name of the object for the object locale in the - * desired language - * @stable ICU 2.0 - */ - static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale, - const Locale& displayLocale, - UnicodeString& name); - - /** - * Get name of the object for the desired Locale, in the language of the - * default locale. - * @param objectLocale must be from getAvailableLocales - * @param name the fill-in parameter of the return value - * @return name of the object for the desired locale in the default language - * @stable ICU 2.0 - */ - static UnicodeString& U_EXPORT2 getDisplayName(const Locale& objectLocale, - UnicodeString& name); - - /** - * Get the set of Locales for which Collations are installed. - * - *

Note this does not include locales supported by registered collators. - * If collators might have been registered, use the overload of getAvailableLocales - * that returns a StringEnumeration.

- * - * @param count the output parameter of number of elements in the locale list - * @return the list of available locales for which collations are installed - * @stable ICU 2.0 - */ - static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); - - /** - * Return a StringEnumeration over the locales available at the time of the call, - * including registered locales. If a severe error occurs (such as out of memory - * condition) this will return null. If there is no locale data, an empty enumeration - * will be returned. - * @return a StringEnumeration over the locales available at the time of the call - * @stable ICU 2.6 - */ - static StringEnumeration* U_EXPORT2 getAvailableLocales(void); - - /** - * Create a string enumerator of all possible keywords that are relevant to - * collation. At this point, the only recognized keyword for this - * service is "collation". - * @param status input-output error code - * @return a string enumeration over locale strings. The caller is - * responsible for closing the result. - * @stable ICU 3.0 - */ - static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status); - - /** - * Given a keyword, create a string enumeration of all values - * for that keyword that are currently in use. - * @param keyword a particular keyword as enumerated by - * ucol_getKeywords. If any other keyword is passed in, status is set - * to U_ILLEGAL_ARGUMENT_ERROR. - * @param status input-output error code - * @return a string enumeration over collation keyword values, or NULL - * upon error. The caller is responsible for deleting the result. - * @stable ICU 3.0 - */ - static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status); - - /** - * Given a key and a locale, returns an array of string values in a preferred - * order that would make a difference. These are all and only those values where - * the open (creation) of the service with the locale formed from the input locale - * plus input keyword and that value has different behavior than creation with the - * input locale alone. - * @param keyword one of the keys supported by this service. For now, only - * "collation" is supported. - * @param locale the locale - * @param commonlyUsed if set to true it will return only commonly used values - * with the given locale in preferred order. Otherwise, - * it will return all the available values for the locale. - * @param status ICU status - * @return a string enumeration over keyword values for the given key and the locale. - * @stable ICU 4.2 - */ - static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* keyword, const Locale& locale, - UBool commonlyUsed, UErrorCode& status); - - /** - * Return the functionally equivalent locale for the given - * requested locale, with respect to given keyword, for the - * collation service. If two locales return the same result, then - * collators instantiated for these locales will behave - * equivalently. The converse is not always true; two collators - * may in fact be equivalent, but return different results, due to - * internal details. The return result has no other meaning than - * that stated above, and implies nothing as to the relationship - * between the two locales. This is intended for use by - * applications who wish to cache collators, or otherwise reuse - * collators when possible. The functional equivalent may change - * over time. For more information, please see the - * Locales and Services section of the ICU User Guide. - * @param keyword a particular keyword as enumerated by - * ucol_getKeywords. - * @param locale the requested locale - * @param isAvailable reference to a fillin parameter that - * indicates whether the requested locale was 'available' to the - * collation service. A locale is defined as 'available' if it - * physically exists within the collation locale data. - * @param status reference to input-output error code - * @return the functionally equivalent collation locale, or the root - * locale upon error. - * @stable ICU 3.0 - */ - static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale, - UBool& isAvailable, UErrorCode& status); - -#if !UCONFIG_NO_SERVICE - /** - * Register a new Collator. The collator will be adopted. - * Because ICU may choose to cache collators internally, this must be - * called at application startup, prior to any calls to - * Collator::createInstance to avoid undefined behavior. - * @param toAdopt the Collator instance to be adopted - * @param locale the locale with which the collator will be associated - * @param status the in/out status code, no special meanings are assigned - * @return a registry key that can be used to unregister this collator - * @stable ICU 2.6 - */ - static URegistryKey U_EXPORT2 registerInstance(Collator* toAdopt, const Locale& locale, UErrorCode& status); - - /** - * Register a new CollatorFactory. The factory will be adopted. - * Because ICU may choose to cache collators internally, this must be - * called at application startup, prior to any calls to - * Collator::createInstance to avoid undefined behavior. - * @param toAdopt the CollatorFactory instance to be adopted - * @param status the in/out status code, no special meanings are assigned - * @return a registry key that can be used to unregister this collator - * @stable ICU 2.6 - */ - static URegistryKey U_EXPORT2 registerFactory(CollatorFactory* toAdopt, UErrorCode& status); - - /** - * Unregister a previously-registered Collator or CollatorFactory - * using the key returned from the register call. Key becomes - * invalid after a successful call and should not be used again. - * The object corresponding to the key will be deleted. - * Because ICU may choose to cache collators internally, this should - * be called during application shutdown, after all calls to - * Collator::createInstance to avoid undefined behavior. - * @param key the registry key returned by a previous call to registerInstance - * @param status the in/out status code, no special meanings are assigned - * @return TRUE if the collator for the key was successfully unregistered - * @stable ICU 2.6 - */ - static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status); -#endif /* UCONFIG_NO_SERVICE */ - - /** - * Gets the version information for a Collator. - * @param info the version # information, the result will be filled in - * @stable ICU 2.0 - */ - virtual void getVersion(UVersionInfo info) const = 0; - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual method. - * This method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * @return The class ID for this object. All objects of a given class have - * the same class ID. Objects of other classes have different class - * IDs. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const = 0; - - /** - * Universal attribute setter - * @param attr attribute type - * @param value attribute value - * @param status to indicate whether the operation went on smoothly or - * there were errors - * @stable ICU 2.2 - */ - virtual void setAttribute(UColAttribute attr, UColAttributeValue value, - UErrorCode &status) = 0; - - /** - * Universal attribute getter - * @param attr attribute type - * @param status to indicate whether the operation went on smoothly or - * there were errors - * @return attribute value - * @stable ICU 2.2 - */ - virtual UColAttributeValue getAttribute(UColAttribute attr, - UErrorCode &status) const = 0; - - /** - * Sets the variable top to the top of the specified reordering group. - * The variable top determines the highest-sorting character - * which is affected by UCOL_ALTERNATE_HANDLING. - * If that attribute is set to UCOL_NON_IGNORABLE, then the variable top has no effect. - * - * The base class implementation sets U_UNSUPPORTED_ERROR. - * @param group one of UCOL_REORDER_CODE_SPACE, UCOL_REORDER_CODE_PUNCTUATION, - * UCOL_REORDER_CODE_SYMBOL, UCOL_REORDER_CODE_CURRENCY; - * or UCOL_REORDER_CODE_DEFAULT to restore the default max variable group - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return *this - * @see getMaxVariable - * @stable ICU 53 - */ - virtual Collator &setMaxVariable(UColReorderCode group, UErrorCode &errorCode); - - /** - * Returns the maximum reordering group whose characters are affected by UCOL_ALTERNATE_HANDLING. - * - * The base class implementation returns UCOL_REORDER_CODE_PUNCTUATION. - * @return the maximum variable reordering group. - * @see setMaxVariable - * @stable ICU 53 - */ - virtual UColReorderCode getMaxVariable() const; - - /** - * Sets the variable top to the primary weight of the specified string. - * - * Beginning with ICU 53, the variable top is pinned to - * the top of one of the supported reordering groups, - * and it must not be beyond the last of those groups. - * See setMaxVariable(). - * @param varTop one or more (if contraction) char16_ts to which the variable top should be set - * @param len length of variable top string. If -1 it is considered to be zero terminated. - * @param status error code. If error code is set, the return value is undefined. Errors set by this function are:
- * U_CE_NOT_FOUND_ERROR if more than one character was passed and there is no such contraction
- * U_ILLEGAL_ARGUMENT_ERROR if the variable top is beyond - * the last reordering group supported by setMaxVariable() - * @return variable top primary weight - * @deprecated ICU 53 Call setMaxVariable() instead. - */ - virtual uint32_t setVariableTop(const char16_t *varTop, int32_t len, UErrorCode &status) = 0; - - /** - * Sets the variable top to the primary weight of the specified string. - * - * Beginning with ICU 53, the variable top is pinned to - * the top of one of the supported reordering groups, - * and it must not be beyond the last of those groups. - * See setMaxVariable(). - * @param varTop a UnicodeString size 1 or more (if contraction) of char16_ts to which the variable top should be set - * @param status error code. If error code is set, the return value is undefined. Errors set by this function are:
- * U_CE_NOT_FOUND_ERROR if more than one character was passed and there is no such contraction
- * U_ILLEGAL_ARGUMENT_ERROR if the variable top is beyond - * the last reordering group supported by setMaxVariable() - * @return variable top primary weight - * @deprecated ICU 53 Call setMaxVariable() instead. - */ - virtual uint32_t setVariableTop(const UnicodeString &varTop, UErrorCode &status) = 0; - - /** - * Sets the variable top to the specified primary weight. - * - * Beginning with ICU 53, the variable top is pinned to - * the top of one of the supported reordering groups, - * and it must not be beyond the last of those groups. - * See setMaxVariable(). - * @param varTop primary weight, as returned by setVariableTop or ucol_getVariableTop - * @param status error code - * @deprecated ICU 53 Call setMaxVariable() instead. - */ - virtual void setVariableTop(uint32_t varTop, UErrorCode &status) = 0; - - /** - * Gets the variable top value of a Collator. - * @param status error code (not changed by function). If error code is set, the return value is undefined. - * @return the variable top primary weight - * @see getMaxVariable - * @stable ICU 2.0 - */ - virtual uint32_t getVariableTop(UErrorCode &status) const = 0; - - /** - * Get a UnicodeSet that contains all the characters and sequences - * tailored in this collator. - * @param status error code of the operation - * @return a pointer to a UnicodeSet object containing all the - * code points and sequences that may sort differently than - * in the root collator. The object must be disposed of by using delete - * @stable ICU 2.4 - */ - virtual UnicodeSet *getTailoredSet(UErrorCode &status) const; - - /** - * Same as clone(). - * The base class implementation simply calls clone(). - * @return a copy of this object, owned by the caller - * @see clone() - * @deprecated ICU 50 no need to have two methods for cloning - */ - virtual Collator* safeClone(void) const; - - /** - * Get the sort key as an array of bytes from a UnicodeString. - * Sort key byte arrays are zero-terminated and can be compared using - * strcmp(). - * - * Note that sort keys are often less efficient than simply doing comparison. - * For more details, see the ICU User Guide. - * - * @param source string to be processed. - * @param result buffer to store result in. If NULL, number of bytes needed - * will be returned. - * @param resultLength length of the result buffer. If if not enough the - * buffer will be filled to capacity. - * @return Number of bytes needed for storing the sort key - * @stable ICU 2.2 - */ - virtual int32_t getSortKey(const UnicodeString& source, - uint8_t* result, - int32_t resultLength) const = 0; - - /** - * Get the sort key as an array of bytes from a char16_t buffer. - * Sort key byte arrays are zero-terminated and can be compared using - * strcmp(). - * - * Note that sort keys are often less efficient than simply doing comparison. - * For more details, see the ICU User Guide. - * - * @param source string to be processed. - * @param sourceLength length of string to be processed. - * If -1, the string is 0 terminated and length will be decided by the - * function. - * @param result buffer to store result in. If NULL, number of bytes needed - * will be returned. - * @param resultLength length of the result buffer. If if not enough the - * buffer will be filled to capacity. - * @return Number of bytes needed for storing the sort key - * @stable ICU 2.2 - */ - virtual int32_t getSortKey(const char16_t*source, int32_t sourceLength, - uint8_t*result, int32_t resultLength) const = 0; - - /** - * Produce a bound for a given sortkey and a number of levels. - * Return value is always the number of bytes needed, regardless of - * whether the result buffer was big enough or even valid.
- * Resulting bounds can be used to produce a range of strings that are - * between upper and lower bounds. For example, if bounds are produced - * for a sortkey of string "smith", strings between upper and lower - * bounds with one level would include "Smith", "SMITH", "sMiTh".
- * There are two upper bounds that can be produced. If UCOL_BOUND_UPPER - * is produced, strings matched would be as above. However, if bound - * produced using UCOL_BOUND_UPPER_LONG is used, the above example will - * also match "Smithsonian" and similar.
- * For more on usage, see example in cintltst/capitst.c in procedure - * TestBounds. - * Sort keys may be compared using strcmp. - * @param source The source sortkey. - * @param sourceLength The length of source, or -1 if null-terminated. - * (If an unmodified sortkey is passed, it is always null - * terminated). - * @param boundType Type of bound required. It can be UCOL_BOUND_LOWER, which - * produces a lower inclusive bound, UCOL_BOUND_UPPER, that - * produces upper bound that matches strings of the same length - * or UCOL_BOUND_UPPER_LONG that matches strings that have the - * same starting substring as the source string. - * @param noOfLevels Number of levels required in the resulting bound (for most - * uses, the recommended value is 1). See users guide for - * explanation on number of levels a sortkey can have. - * @param result A pointer to a buffer to receive the resulting sortkey. - * @param resultLength The maximum size of result. - * @param status Used for returning error code if something went wrong. If the - * number of levels requested is higher than the number of levels - * in the source key, a warning (U_SORT_KEY_TOO_SHORT_WARNING) is - * issued. - * @return The size needed to fully store the bound. - * @see ucol_keyHashCode - * @stable ICU 2.1 - */ - static int32_t U_EXPORT2 getBound(const uint8_t *source, - int32_t sourceLength, - UColBoundMode boundType, - uint32_t noOfLevels, - uint8_t *result, - int32_t resultLength, - UErrorCode &status); - - -protected: - - // Collator protected constructors ------------------------------------- - - /** - * Default constructor. - * Constructor is different from the old default Collator constructor. - * The task for determing the default collation strength and normalization - * mode is left to the child class. - * @stable ICU 2.0 - */ - Collator(); - -#ifndef U_HIDE_DEPRECATED_API - /** - * Constructor. - * Empty constructor, does not handle the arguments. - * This constructor is done for backward compatibility with 1.7 and 1.8. - * The task for handling the argument collation strength and normalization - * mode is left to the child class. - * @param collationStrength collation strength - * @param decompositionMode - * @deprecated ICU 2.4. Subclasses should use the default constructor - * instead and handle the strength and normalization mode themselves. - */ - Collator(UCollationStrength collationStrength, - UNormalizationMode decompositionMode); -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Copy constructor. - * @param other Collator object to be copied from - * @stable ICU 2.0 - */ - Collator(const Collator& other); - -public: - /** - * Used internally by registration to define the requested and valid locales. - * @param requestedLocale the requested locale - * @param validLocale the valid locale - * @param actualLocale the actual locale - * @internal - */ - virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale); - - /** Get the short definition string for a collator. This internal API harvests the collator's - * locale and the attribute set and produces a string that can be used for opening - * a collator with the same attributes using the ucol_openFromShortString API. - * This string will be normalized. - * The structure and the syntax of the string is defined in the "Naming collators" - * section of the users guide: - * http://userguide.icu-project.org/collation/concepts#TOC-Collator-naming-scheme - * This function supports preflighting. - * - * This is internal, and intended to be used with delegate converters. - * - * @param locale a locale that will appear as a collators locale in the resulting - * short string definition. If NULL, the locale will be harvested - * from the collator. - * @param buffer space to hold the resulting string - * @param capacity capacity of the buffer - * @param status for returning errors. All the preflighting errors are featured - * @return length of the resulting string - * @see ucol_openFromShortString - * @see ucol_normalizeShortDefinitionString - * @see ucol_getShortDefinitionString - * @internal - */ - virtual int32_t internalGetShortDefinitionString(const char *locale, - char *buffer, - int32_t capacity, - UErrorCode &status) const; - - /** - * Implements ucol_strcollUTF8(). - * @internal - */ - virtual UCollationResult internalCompareUTF8( - const char *left, int32_t leftLength, - const char *right, int32_t rightLength, - UErrorCode &errorCode) const; - - /** - * Implements ucol_nextSortKeyPart(). - * @internal - */ - virtual int32_t - internalNextSortKeyPart( - UCharIterator *iter, uint32_t state[2], - uint8_t *dest, int32_t count, UErrorCode &errorCode) const; - -#ifndef U_HIDE_INTERNAL_API - /** @internal */ - static inline Collator *fromUCollator(UCollator *uc) { - return reinterpret_cast(uc); - } - /** @internal */ - static inline const Collator *fromUCollator(const UCollator *uc) { - return reinterpret_cast(uc); - } - /** @internal */ - inline UCollator *toUCollator() { - return reinterpret_cast(this); - } - /** @internal */ - inline const UCollator *toUCollator() const { - return reinterpret_cast(this); - } -#endif // U_HIDE_INTERNAL_API - -private: - /** - * Assignment operator. Private for now. - */ - Collator& operator=(const Collator& other); - - friend class CFactory; - friend class SimpleCFactory; - friend class ICUCollatorFactory; - friend class ICUCollatorService; - static Collator* makeInstance(const Locale& desiredLocale, - UErrorCode& status); -}; - -#if !UCONFIG_NO_SERVICE -/** - * A factory, used with registerFactory, the creates multiple collators and provides - * display names for them. A factory supports some number of locales-- these are the - * locales for which it can create collators. The factory can be visible, in which - * case the supported locales will be enumerated by getAvailableLocales, or invisible, - * in which they are not. Invisible locales are still supported, they are just not - * listed by getAvailableLocales. - *

- * If standard locale display names are sufficient, Collator instances can - * be registered using registerInstance instead.

- *

- * Note: if the collators are to be used from C APIs, they must be instances - * of RuleBasedCollator.

- * - * @stable ICU 2.6 - */ -class U_I18N_API CollatorFactory : public UObject { -public: - - /** - * Destructor - * @stable ICU 3.0 - */ - virtual ~CollatorFactory(); - - /** - * Return true if this factory is visible. Default is true. - * If not visible, the locales supported by this factory will not - * be listed by getAvailableLocales. - * @return true if the factory is visible. - * @stable ICU 2.6 - */ - virtual UBool visible(void) const; - - /** - * Return a collator for the provided locale. If the locale - * is not supported, return NULL. - * @param loc the locale identifying the collator to be created. - * @return a new collator if the locale is supported, otherwise NULL. - * @stable ICU 2.6 - */ - virtual Collator* createCollator(const Locale& loc) = 0; - - /** - * Return the name of the collator for the objectLocale, localized for the displayLocale. - * If objectLocale is not supported, or the factory is not visible, set the result string - * to bogus. - * @param objectLocale the locale identifying the collator - * @param displayLocale the locale for which the display name of the collator should be localized - * @param result an output parameter for the display name, set to bogus if not supported. - * @return the display name - * @stable ICU 2.6 - */ - virtual UnicodeString& getDisplayName(const Locale& objectLocale, - const Locale& displayLocale, - UnicodeString& result); - - /** - * Return an array of all the locale names directly supported by this factory. - * The number of names is returned in count. This array is owned by the factory. - * Its contents must never change. - * @param count output parameter for the number of locales supported by the factory - * @param status the in/out error code - * @return a pointer to an array of count UnicodeStrings. - * @stable ICU 2.6 - */ - virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) = 0; -}; -#endif /* UCONFIG_NO_SERVICE */ - -// Collator inline methods ----------------------------------------------- - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_COLLATION */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/compactdecimalformat.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/compactdecimalformat.h deleted file mode 100644 index a91bd57005..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/compactdecimalformat.h +++ /dev/null @@ -1,193 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 2012-2016, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************** -* -* File COMPACTDECIMALFORMAT.H -******************************************************************************** -*/ - -#ifndef __COMPACT_DECIMAL_FORMAT_H__ -#define __COMPACT_DECIMAL_FORMAT_H__ - -#include "unicode/utypes.h" -/** - * \file - * \brief C++ API: Compatibility APIs for compact decimal number formatting. - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/decimfmt.h" - -struct UHashtable; - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class PluralRules; - -/** - * **IMPORTANT:** New users are strongly encouraged to see if - * numberformatter.h fits their use case. Although not deprecated, this header - * is provided for backwards compatibility only. - * - * ----------------------------------------------------------------------------- - * - * The CompactDecimalFormat produces abbreviated numbers, suitable for display in - * environments will limited real estate. For example, 'Hits: 1.2B' instead of - * 'Hits: 1,200,000,000'. The format will be appropriate for the given language, - * such as "1,2 Mrd." for German. - * - * For numbers under 1000 trillion (under 10^15, such as 123,456,789,012,345), - * the result will be short for supported languages. However, the result may - * sometimes exceed 7 characters, such as when there are combining marks or thin - * characters. In such cases, the visual width in fonts should still be short. - * - * By default, there are 3 significant digits. After creation, if more than - * three significant digits are set (with setMaximumSignificantDigits), or if a - * fixed number of digits are set (with setMaximumIntegerDigits or - * setMaximumFractionDigits), then result may be wider. - * - * At this time, parsing is not supported, and will produce a U_UNSUPPORTED_ERROR. - * Resetting the pattern prefixes or suffixes is not supported; the method calls - * are ignored. - * - * @stable ICU 51 - */ -class U_I18N_API CompactDecimalFormat : public DecimalFormat { -public: - - /** - * Returns a compact decimal instance for specified locale. - * - * **NOTE:** New users are strongly encouraged to use - * `number::NumberFormatter` instead of NumberFormat. - * @param inLocale the given locale. - * @param style whether to use short or long style. - * @param status error code returned here. - * @stable ICU 51 - */ - static CompactDecimalFormat* U_EXPORT2 createInstance( - const Locale& inLocale, UNumberCompactStyle style, UErrorCode& status); - - /** - * Copy constructor. - * - * @param source the DecimalFormat object to be copied from. - * @stable ICU 51 - */ - CompactDecimalFormat(const CompactDecimalFormat& source); - - /** - * Destructor. - * @stable ICU 51 - */ - ~CompactDecimalFormat() U_OVERRIDE; - - /** - * Assignment operator. - * - * @param rhs the DecimalFormat object to be copied. - * @stable ICU 51 - */ - CompactDecimalFormat& operator=(const CompactDecimalFormat& rhs); - - /** - * Clone this Format object polymorphically. The caller owns the - * result and should delete it when done. - * - * @return a polymorphic copy of this CompactDecimalFormat. - * @stable ICU 51 - */ - Format* clone() const U_OVERRIDE; - - using DecimalFormat::format; - - /** - * CompactDecimalFormat does not support parsing. This implementation - * does nothing. - * @param text Unused. - * @param result Does not change. - * @param parsePosition Does not change. - * @see Formattable - * @stable ICU 51 - */ - void parse(const UnicodeString& text, Formattable& result, - ParsePosition& parsePosition) const U_OVERRIDE; - - /** - * CompactDecimalFormat does not support parsing. This implementation - * sets status to U_UNSUPPORTED_ERROR - * - * @param text Unused. - * @param result Does not change. - * @param status Always set to U_UNSUPPORTED_ERROR. - * @stable ICU 51 - */ - void parse(const UnicodeString& text, Formattable& result, UErrorCode& status) const U_OVERRIDE; - -#ifndef U_HIDE_INTERNAL_API - /** - * Parses text from the given string as a currency amount. Unlike - * the parse() method, this method will attempt to parse a generic - * currency name, searching for a match of this object's locale's - * currency display names, or for a 3-letter ISO currency code. - * This method will fail if this format is not a currency format, - * that is, if it does not contain the currency pattern symbol - * (U+00A4) in its prefix or suffix. This implementation always returns - * NULL. - * - * @param text the string to parse - * @param pos input-output position; on input, the position within text - * to match; must have 0 <= pos.getIndex() < text.length(); - * on output, the position after the last matched character. - * If the parse fails, the position in unchanged upon output. - * @return if parse succeeds, a pointer to a newly-created CurrencyAmount - * object (owned by the caller) containing information about - * the parsed currency; if parse fails, this is NULL. - * @internal - */ - CurrencyAmount* parseCurrency(const UnicodeString& text, ParsePosition& pos) const U_OVERRIDE; -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Return the class ID for this class. This is useful only for - * comparing to a return value from getDynamicClassID(). For example: - *
-     * .      Base* polymorphic_pointer = createPolymorphicObject();
-     * .      if (polymorphic_pointer->getDynamicClassID() ==
-     * .          Derived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 51 - */ - static UClassID U_EXPORT2 getStaticClassID(); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. - * This method is to implement a simple version of RTTI, since not all - * C++ compilers support genuine RTTI. Polymorphic operator==() and - * clone() methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 51 - */ - UClassID getDynamicClassID() const U_OVERRIDE; - - private: - CompactDecimalFormat(const Locale& inLocale, UNumberCompactStyle style, UErrorCode& status); -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // __COMPACT_DECIMAL_FORMAT_H__ -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/curramt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/curramt.h deleted file mode 100644 index ad91df7b41..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/curramt.h +++ /dev/null @@ -1,134 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (c) 2004-2006, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* Author: Alan Liu -* Created: April 26, 2004 -* Since: ICU 3.0 -********************************************************************** -*/ -#ifndef __CURRENCYAMOUNT_H__ -#define __CURRENCYAMOUNT_H__ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/measure.h" -#include "unicode/currunit.h" - -/** - * \file - * \brief C++ API: Currency Amount Object. - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * - * A currency together with a numeric amount, such as 200 USD. - * - * @author Alan Liu - * @stable ICU 3.0 - */ -class U_I18N_API CurrencyAmount: public Measure { - public: - /** - * Construct an object with the given numeric amount and the given - * ISO currency code. - * @param amount a numeric object; amount.isNumeric() must be TRUE - * @param isoCode the 3-letter ISO 4217 currency code; must not be - * NULL and must have length 3 - * @param ec input-output error code. If the amount or the isoCode - * is invalid, then this will be set to a failing value. - * @stable ICU 3.0 - */ - CurrencyAmount(const Formattable& amount, ConstChar16Ptr isoCode, - UErrorCode &ec); - - /** - * Construct an object with the given numeric amount and the given - * ISO currency code. - * @param amount the amount of the given currency - * @param isoCode the 3-letter ISO 4217 currency code; must not be - * NULL and must have length 3 - * @param ec input-output error code. If the isoCode is invalid, - * then this will be set to a failing value. - * @stable ICU 3.0 - */ - CurrencyAmount(double amount, ConstChar16Ptr isoCode, - UErrorCode &ec); - - /** - * Copy constructor - * @stable ICU 3.0 - */ - CurrencyAmount(const CurrencyAmount& other); - - /** - * Assignment operator - * @stable ICU 3.0 - */ - CurrencyAmount& operator=(const CurrencyAmount& other); - - /** - * Return a polymorphic clone of this object. The result will - * have the same class as returned by getDynamicClassID(). - * @stable ICU 3.0 - */ - virtual UObject* clone() const; - - /** - * Destructor - * @stable ICU 3.0 - */ - virtual ~CurrencyAmount(); - - /** - * Returns a unique class ID for this object POLYMORPHICALLY. - * This method implements a simple form of RTTI used by ICU. - * @return The class ID for this object. All objects of a given - * class have the same class ID. Objects of other classes have - * different class IDs. - * @stable ICU 3.0 - */ - virtual UClassID getDynamicClassID() const; - - /** - * Returns the class ID for this class. This is used to compare to - * the return value of getDynamicClassID(). - * @return The class ID for all objects of this class. - * @stable ICU 3.0 - */ - static UClassID U_EXPORT2 getStaticClassID(); - - /** - * Return the currency unit object of this object. - * @stable ICU 3.0 - */ - inline const CurrencyUnit& getCurrency() const; - - /** - * Return the ISO currency code of this object. - * @stable ICU 3.0 - */ - inline const char16_t* getISOCurrency() const; -}; - -inline const CurrencyUnit& CurrencyAmount::getCurrency() const { - return (const CurrencyUnit&) getUnit(); -} - -inline const char16_t* CurrencyAmount::getISOCurrency() const { - return getCurrency().getISOCurrency(); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // !UCONFIG_NO_FORMATTING -#endif // __CURRENCYAMOUNT_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/currpinf.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/currpinf.h deleted file mode 100644 index fc9cb02ace..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/currpinf.h +++ /dev/null @@ -1,272 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * Copyright (C) 2009-2015, International Business Machines Corporation and * - * others. All Rights Reserved. * - ******************************************************************************* - */ -#ifndef CURRPINF_H -#define CURRPINF_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Currency Plural Information used by Decimal Format - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/unistr.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class Locale; -class PluralRules; -class Hashtable; - -/** - * This class represents the information needed by - * DecimalFormat to format currency plural, - * such as "3.00 US dollars" or "1.00 US dollar". - * DecimalFormat creates for itself an instance of - * CurrencyPluralInfo from its locale data. - * If you need to change any of these symbols, you can get the - * CurrencyPluralInfo object from your - * DecimalFormat and modify it. - * - * Following are the information needed for currency plural format and parse: - * locale information, - * plural rule of the locale, - * currency plural pattern of the locale. - * - * @stable ICU 4.2 - */ -class U_I18N_API CurrencyPluralInfo : public UObject { -public: - - /** - * Create a CurrencyPluralInfo object for the default locale. - * @param status output param set to success/failure code on exit - * @stable ICU 4.2 - */ - CurrencyPluralInfo(UErrorCode& status); - - /** - * Create a CurrencyPluralInfo object for the given locale. - * @param locale the locale - * @param status output param set to success/failure code on exit - * @stable ICU 4.2 - */ - CurrencyPluralInfo(const Locale& locale, UErrorCode& status); - - /** - * Copy constructor - * - * @stable ICU 4.2 - */ - CurrencyPluralInfo(const CurrencyPluralInfo& info); - - - /** - * Assignment operator - * - * @stable ICU 4.2 - */ - CurrencyPluralInfo& operator=(const CurrencyPluralInfo& info); - - - /** - * Destructor - * - * @stable ICU 4.2 - */ - virtual ~CurrencyPluralInfo(); - - - /** - * Equal operator. - * - * @stable ICU 4.2 - */ - UBool operator==(const CurrencyPluralInfo& info) const; - - - /** - * Not equal operator - * - * @stable ICU 4.2 - */ - UBool operator!=(const CurrencyPluralInfo& info) const; - - - /** - * Clone - * - * @stable ICU 4.2 - */ - CurrencyPluralInfo* clone() const; - - - /** - * Gets plural rules of this locale, used for currency plural format - * - * @return plural rule - * @stable ICU 4.2 - */ - const PluralRules* getPluralRules() const; - - /** - * Given a plural count, gets currency plural pattern of this locale, - * used for currency plural format - * - * @param pluralCount currency plural count - * @param result output param to receive the pattern - * @return a currency plural pattern based on plural count - * @stable ICU 4.2 - */ - UnicodeString& getCurrencyPluralPattern(const UnicodeString& pluralCount, - UnicodeString& result) const; - - /** - * Get locale - * - * @return locale - * @stable ICU 4.2 - */ - const Locale& getLocale() const; - - /** - * Set plural rules. - * The plural rule is set when CurrencyPluralInfo - * instance is created. - * You can call this method to reset plural rules only if you want - * to modify the default plural rule of the locale. - * - * @param ruleDescription new plural rule description - * @param status output param set to success/failure code on exit - * @stable ICU 4.2 - */ - void setPluralRules(const UnicodeString& ruleDescription, - UErrorCode& status); - - /** - * Set currency plural pattern. - * The currency plural pattern is set when CurrencyPluralInfo - * instance is created. - * You can call this method to reset currency plural pattern only if - * you want to modify the default currency plural pattern of the locale. - * - * @param pluralCount the plural count for which the currency pattern will - * be overridden. - * @param pattern the new currency plural pattern - * @param status output param set to success/failure code on exit - * @stable ICU 4.2 - */ - void setCurrencyPluralPattern(const UnicodeString& pluralCount, - const UnicodeString& pattern, - UErrorCode& status); - - /** - * Set locale - * - * @param loc the new locale to set - * @param status output param set to success/failure code on exit - * @stable ICU 4.2 - */ - void setLocale(const Locale& loc, UErrorCode& status); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 4.2 - */ - virtual UClassID getDynamicClassID() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 4.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - -private: - friend class DecimalFormat; - friend class DecimalFormatImpl; - - void initialize(const Locale& loc, UErrorCode& status); - - void setupCurrencyPluralPattern(const Locale& loc, UErrorCode& status); - - /* - * delete hash table - * - * @param hTable hash table to be deleted - */ - void deleteHash(Hashtable* hTable); - - - /* - * initialize hash table - * - * @param status output param set to success/failure code on exit - * @return hash table initialized - */ - Hashtable* initHash(UErrorCode& status); - - - - /** - * copy hash table - * - * @param source the source to copy from - * @param target the target to copy to - * @param status error code - */ - void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status); - - //-------------------- private data member --------------------- - // map from plural count to currency plural pattern, for example - // a plural pattern defined in "CurrencyUnitPatterns" is - // "one{{0} {1}}", in which "one" is a plural count - // and "{0} {1}" is a currency plural pattern". - // The currency plural pattern saved in this mapping is the pattern - // defined in "CurrencyUnitPattern" by replacing - // {0} with the number format pattern, - // and {1} with 3 currency sign. - Hashtable* fPluralCountToCurrencyUnitPattern; - - /* - * The plural rule is used to format currency plural name, - * for example: "3.00 US Dollars". - * If there are 3 currency signs in the currency pattern, - * the 3 currency signs will be replaced by currency plural name. - */ - PluralRules* fPluralRules; - - // locale - Locale* fLocale; - -private: - /** - * An internal status variable used to indicate that the object is in an 'invalid' state. - * Used by copy constructor, the assignment operator and the clone method. - */ - UErrorCode fInternalStatus; -}; - - -inline UBool -CurrencyPluralInfo::operator!=(const CurrencyPluralInfo& info) const { - return !operator==(info); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _CURRPINFO -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/currunit.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/currunit.h deleted file mode 100644 index 46d15d6a3b..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/currunit.h +++ /dev/null @@ -1,145 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (c) 2004-2014, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* Author: Alan Liu -* Created: April 26, 2004 -* Since: ICU 3.0 -********************************************************************** -*/ -#ifndef __CURRENCYUNIT_H__ -#define __CURRENCYUNIT_H__ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/measunit.h" - -/** - * \file - * \brief C++ API: Currency Unit Information. - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * A unit of currency, such as USD (U.S. dollars) or JPY (Japanese - * yen). This class is a thin wrapper over a char16_t string that - * subclasses MeasureUnit, for use with Measure and MeasureFormat. - * - * @author Alan Liu - * @stable ICU 3.0 - */ -class U_I18N_API CurrencyUnit: public MeasureUnit { - public: - /** - * Default constructor. Initializes currency code to "XXX" (no currency). - * @stable ICU 60 - */ - CurrencyUnit(); - - /** - * Construct an object with the given ISO currency code. - * - * @param isoCode the 3-letter ISO 4217 currency code; must have - * length 3 and need not be NUL-terminated. If NULL, the currency - * is initialized to the unknown currency XXX. - * @param ec input-output error code. If the isoCode is invalid, - * then this will be set to a failing value. - * @stable ICU 3.0 - */ - CurrencyUnit(ConstChar16Ptr isoCode, UErrorCode &ec); - -#ifndef U_HIDE_DRAFT_API - /** - * Construct an object with the given ISO currency code. - * - * @param isoCode the 3-letter ISO 4217 currency code; must have - * length 3. If invalid, the currency is initialized to XXX. - * @param ec input-output error code. If the isoCode is invalid, - * then this will be set to a failing value. - * @draft ICU 64 - */ - CurrencyUnit(StringPiece isoCode, UErrorCode &ec); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Copy constructor - * @stable ICU 3.0 - */ - CurrencyUnit(const CurrencyUnit& other); - - /** - * Copy constructor from MeasureUnit. This constructor allows you to - * restore a CurrencyUnit that was sliced to MeasureUnit. - * - * @param measureUnit The MeasureUnit to copy from. - * @param ec Set to a failing value if the MeasureUnit is not a currency. - * @stable ICU 60 - */ - CurrencyUnit(const MeasureUnit& measureUnit, UErrorCode &ec); - - /** - * Assignment operator - * @stable ICU 3.0 - */ - CurrencyUnit& operator=(const CurrencyUnit& other); - - /** - * Return a polymorphic clone of this object. The result will - * have the same class as returned by getDynamicClassID(). - * @stable ICU 3.0 - */ - virtual UObject* clone() const; - - /** - * Destructor - * @stable ICU 3.0 - */ - virtual ~CurrencyUnit(); - - /** - * Returns a unique class ID for this object POLYMORPHICALLY. - * This method implements a simple form of RTTI used by ICU. - * @return The class ID for this object. All objects of a given - * class have the same class ID. Objects of other classes have - * different class IDs. - * @stable ICU 3.0 - */ - virtual UClassID getDynamicClassID() const; - - /** - * Returns the class ID for this class. This is used to compare to - * the return value of getDynamicClassID(). - * @return The class ID for all objects of this class. - * @stable ICU 3.0 - */ - static UClassID U_EXPORT2 getStaticClassID(); - - /** - * Return the ISO currency code of this object. - * @stable ICU 3.0 - */ - inline const char16_t* getISOCurrency() const; - - private: - /** - * The ISO 4217 code of this object. - */ - char16_t isoCode[4]; -}; - -inline const char16_t* CurrencyUnit::getISOCurrency() const { - return isoCode; -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // !UCONFIG_NO_FORMATTING -#endif // __CURRENCYUNIT_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/datefmt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/datefmt.h deleted file mode 100644 index 50e47b092d..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/datefmt.h +++ /dev/null @@ -1,959 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************** - * Copyright (C) 1997-2016, International Business Machines - * Corporation and others. All Rights Reserved. - ******************************************************************************** - * - * File DATEFMT.H - * - * Modification History: - * - * Date Name Description - * 02/19/97 aliu Converted from java. - * 04/01/97 aliu Added support for centuries. - * 07/23/98 stephen JDK 1.2 sync - * 11/15/99 weiv Added support for week of year/day of week formatting - ******************************************************************************** - */ - -#ifndef DATEFMT_H -#define DATEFMT_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/udat.h" -#include "unicode/calendar.h" -#include "unicode/numfmt.h" -#include "unicode/format.h" -#include "unicode/locid.h" -#include "unicode/enumset.h" -#include "unicode/udisplaycontext.h" - -/** - * \file - * \brief C++ API: Abstract class for converting dates. - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class TimeZone; -class DateTimePatternGenerator; - -/** - * \cond - * Export an explicit template instantiation. (See digitlst.h, datefmt.h, and others.) - * (When building DLLs for Windows this is required.) - */ -#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN && !defined(U_IN_DOXYGEN) -template class U_I18N_API EnumSet; -#endif -/** \endcond */ - -/** - * DateFormat is an abstract class for a family of classes that convert dates and - * times from their internal representations to textual form and back again in a - * language-independent manner. Converting from the internal representation (milliseconds - * since midnight, January 1, 1970) to text is known as "formatting," and converting - * from text to millis is known as "parsing." We currently define only one concrete - * subclass of DateFormat: SimpleDateFormat, which can handle pretty much all normal - * date formatting and parsing actions. - *

- * DateFormat helps you to format and parse dates for any locale. Your code can - * be completely independent of the locale conventions for months, days of the - * week, or even the calendar format: lunar vs. solar. - *

- * To format a date for the current Locale, use one of the static factory - * methods: - *

- * \code
- *      DateFormat* dfmt = DateFormat::createDateInstance();
- *      UDate myDate = Calendar::getNow();
- *      UnicodeString myString;
- *      myString = dfmt->format( myDate, myString );
- * \endcode
- * 
- * If you are formatting multiple numbers, it is more efficient to get the - * format and use it multiple times so that the system doesn't have to fetch the - * information about the local language and country conventions multiple times. - *
- * \code
- *      DateFormat* df = DateFormat::createDateInstance();
- *      UnicodeString myString;
- *      UDate myDateArr[] = { 0.0, 100000000.0, 2000000000.0 }; // test values
- *      for (int32_t i = 0; i < 3; ++i) {
- *          myString.remove();
- *          cout << df->format( myDateArr[i], myString ) << endl;
- *      }
- * \endcode
- * 
- * To get specific fields of a date, you can use UFieldPosition to - * get specific fields. - *
- * \code
- *      DateFormat* dfmt = DateFormat::createDateInstance();
- *      FieldPosition pos(DateFormat::YEAR_FIELD);
- *      UnicodeString myString;
- *      myString = dfmt->format( myDate, myString );
- *      cout << myString << endl;
- *      cout << pos.getBeginIndex() << "," << pos. getEndIndex() << endl;
- * \endcode
- * 
- * To format a date for a different Locale, specify it in the call to - * createDateInstance(). - *
- * \code
- *       DateFormat* df =
- *           DateFormat::createDateInstance( DateFormat::SHORT, Locale::getFrance());
- * \endcode
- * 
- * You can use a DateFormat to parse also. - *
- * \code
- *       UErrorCode status = U_ZERO_ERROR;
- *       UDate myDate = df->parse(myString, status);
- * \endcode
- * 
- * Use createDateInstance() to produce the normal date format for that country. - * There are other static factory methods available. Use createTimeInstance() - * to produce the normal time format for that country. Use createDateTimeInstance() - * to produce a DateFormat that formats both date and time. You can pass in - * different options to these factory methods to control the length of the - * result; from SHORT to MEDIUM to LONG to FULL. The exact result depends on the - * locale, but generally: - *
    - *
  • SHORT is completely numeric, such as 12/13/52 or 3:30pm - *
  • MEDIUM is longer, such as Jan 12, 1952 - *
  • LONG is longer, such as January 12, 1952 or 3:30:32pm - *
  • FULL is pretty completely specified, such as - * Tuesday, April 12, 1952 AD or 3:30:42pm PST. - *
- * You can also set the time zone on the format if you wish. If you want even - * more control over the format or parsing, (or want to give your users more - * control), you can try casting the DateFormat you get from the factory methods - * to a SimpleDateFormat. This will work for the majority of countries; just - * remember to chck getDynamicClassID() before carrying out the cast. - *

- * You can also use forms of the parse and format methods with ParsePosition and - * FieldPosition to allow you to - *

    - *
  • Progressively parse through pieces of a string. - *
  • Align any particular field, or find out where it is for selection - * on the screen. - *
- * - *

User subclasses are not supported. While clients may write - * subclasses, such code will not necessarily work and will not be - * guaranteed to work stably from release to release. - */ -class U_I18N_API DateFormat : public Format { -public: - - /** - * Constants for various style patterns. These reflect the order of items in - * the DateTimePatterns resource. There are 4 time patterns, 4 date patterns, - * the default date-time pattern, and 4 date-time patterns. Each block of 4 values - * in the resource occurs in the order full, long, medium, short. - * @stable ICU 2.4 - */ - enum EStyle - { - kNone = -1, - - kFull = 0, - kLong = 1, - kMedium = 2, - kShort = 3, - - kDateOffset = kShort + 1, - // kFull + kDateOffset = 4 - // kLong + kDateOffset = 5 - // kMedium + kDateOffset = 6 - // kShort + kDateOffset = 7 - - kDateTime = 8, - // Default DateTime - - kDateTimeOffset = kDateTime + 1, - // kFull + kDateTimeOffset = 9 - // kLong + kDateTimeOffset = 10 - // kMedium + kDateTimeOffset = 11 - // kShort + kDateTimeOffset = 12 - - // relative dates - kRelative = (1 << 7), - - kFullRelative = (kFull | kRelative), - - kLongRelative = kLong | kRelative, - - kMediumRelative = kMedium | kRelative, - - kShortRelative = kShort | kRelative, - - - kDefault = kMedium, - - - - /** - * These constants are provided for backwards compatibility only. - * Please use the C++ style constants defined above. - */ - FULL = kFull, - LONG = kLong, - MEDIUM = kMedium, - SHORT = kShort, - DEFAULT = kDefault, - DATE_OFFSET = kDateOffset, - NONE = kNone, - DATE_TIME = kDateTime - }; - - /** - * Destructor. - * @stable ICU 2.0 - */ - virtual ~DateFormat(); - - /** - * Equality operator. Returns true if the two formats have the same behavior. - * @stable ICU 2.0 - */ - virtual UBool operator==(const Format&) const; - - - using Format::format; - - /** - * Format an object to produce a string. This method handles Formattable - * objects with a UDate type. If a the Formattable object type is not a Date, - * then it returns a failing UErrorCode. - * - * @param obj The object to format. Must be a Date. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - virtual UnicodeString& format(const Formattable& obj, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& status) const; - - /** - * Format an object to produce a string. This method handles Formattable - * objects with a UDate type. If a the Formattable object type is not a Date, - * then it returns a failing UErrorCode. - * - * @param obj The object to format. Must be a Date. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. Field values - * are defined in UDateFormatField. Can be NULL. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - virtual UnicodeString& format(const Formattable& obj, - UnicodeString& appendTo, - FieldPositionIterator* posIter, - UErrorCode& status) const; - /** - * Formats a date into a date/time string. This is an abstract method which - * concrete subclasses must implement. - *

- * On input, the FieldPosition parameter may have its "field" member filled with - * an enum value specifying a field. On output, the FieldPosition will be filled - * in with the text offsets for that field. - *

For example, given a time text - * "1996.07.10 AD at 15:08:56 PDT", if the given fieldPosition.field is - * UDAT_YEAR_FIELD, the offsets fieldPosition.beginIndex and - * statfieldPositionus.getEndIndex will be set to 0 and 4, respectively. - *

Notice - * that if the same time field appears more than once in a pattern, the status will - * be set for the first occurence of that time field. For instance, - * formatting a UDate to the time string "1 PM PDT (Pacific Daylight Time)" - * using the pattern "h a z (zzzz)" and the alignment field - * DateFormat::TIMEZONE_FIELD, the offsets fieldPosition.beginIndex and - * fieldPosition.getEndIndex will be set to 5 and 8, respectively, for the first - * occurence of the timezone pattern character 'z'. - * - * @param cal Calendar set to the date and time to be formatted - * into a date/time string. When the calendar type is - * different from the internal calendar held by this - * DateFormat instance, the date and the time zone will - * be inherited from the input calendar, but other calendar - * field values will be calculated by the internal calendar. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param fieldPosition On input: an alignment field, if desired (see examples above) - * On output: the offsets of the alignment field (see examples above) - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.1 - */ - virtual UnicodeString& format( Calendar& cal, - UnicodeString& appendTo, - FieldPosition& fieldPosition) const = 0; - - /** - * Formats a date into a date/time string. Subclasses should implement this method. - * - * @param cal Calendar set to the date and time to be formatted - * into a date/time string. When the calendar type is - * different from the internal calendar held by this - * DateFormat instance, the date and the time zone will - * be inherited from the input calendar, but other calendar - * field values will be calculated by the internal calendar. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. Field values - * are defined in UDateFormatField. Can be NULL. - * @param status error status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - virtual UnicodeString& format(Calendar& cal, - UnicodeString& appendTo, - FieldPositionIterator* posIter, - UErrorCode& status) const; - /** - * Formats a UDate into a date/time string. - *

- * On input, the FieldPosition parameter may have its "field" member filled with - * an enum value specifying a field. On output, the FieldPosition will be filled - * in with the text offsets for that field. - *

For example, given a time text - * "1996.07.10 AD at 15:08:56 PDT", if the given fieldPosition.field is - * UDAT_YEAR_FIELD, the offsets fieldPosition.beginIndex and - * statfieldPositionus.getEndIndex will be set to 0 and 4, respectively. - *

Notice - * that if the same time field appears more than once in a pattern, the status will - * be set for the first occurence of that time field. For instance, - * formatting a UDate to the time string "1 PM PDT (Pacific Daylight Time)" - * using the pattern "h a z (zzzz)" and the alignment field - * DateFormat::TIMEZONE_FIELD, the offsets fieldPosition.beginIndex and - * fieldPosition.getEndIndex will be set to 5 and 8, respectively, for the first - * occurence of the timezone pattern character 'z'. - * - * @param date UDate to be formatted into a date/time string. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param fieldPosition On input: an alignment field, if desired (see examples above) - * On output: the offsets of the alignment field (see examples above) - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - UnicodeString& format( UDate date, - UnicodeString& appendTo, - FieldPosition& fieldPosition) const; - - /** - * Formats a UDate into a date/time string. - * - * @param date UDate to be formatted into a date/time string. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. Field values - * are defined in UDateFormatField. Can be NULL. - * @param status error status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - UnicodeString& format(UDate date, - UnicodeString& appendTo, - FieldPositionIterator* posIter, - UErrorCode& status) const; - /** - * Formats a UDate into a date/time string. If there is a problem, you won't - * know, using this method. Use the overloaded format() method which takes a - * FieldPosition& to detect formatting problems. - * - * @param date The UDate value to be formatted into a string. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - UnicodeString& format(UDate date, UnicodeString& appendTo) const; - - /** - * Parse a date/time string. For example, a time text "07/10/96 4:5 PM, PDT" - * will be parsed into a UDate that is equivalent to Date(837039928046). - * Parsing begins at the beginning of the string and proceeds as far as - * possible. Assuming no parse errors were encountered, this function - * doesn't return any information about how much of the string was consumed - * by the parsing. If you need that information, use the version of - * parse() that takes a ParsePosition. - *

- * By default, parsing is lenient: If the input is not in the form used by - * this object's format method but can still be parsed as a date, then the - * parse succeeds. Clients may insist on strict adherence to the format by - * calling setLenient(false). - * @see DateFormat::setLenient(boolean) - *

- * Note that the normal date formats associated with some calendars - such - * as the Chinese lunar calendar - do not specify enough fields to enable - * dates to be parsed unambiguously. In the case of the Chinese lunar - * calendar, while the year within the current 60-year cycle is specified, - * the number of such cycles since the start date of the calendar (in the - * ERA field of the Calendar object) is not normally part of the format, - * and parsing may assume the wrong era. For cases such as this it is - * recommended that clients parse using the method - * parse(const UnicodeString&, Calendar& cal, ParsePosition&) - * with the Calendar passed in set to the current date, or to a date - * within the era/cycle that should be assumed if absent in the format. - * - * @param text The date/time string to be parsed into a UDate value. - * @param status Output param to be set to success/failure code. If - * 'text' cannot be parsed, it will be set to a failure - * code. - * @return The parsed UDate value, if successful. - * @stable ICU 2.0 - */ - virtual UDate parse( const UnicodeString& text, - UErrorCode& status) const; - - /** - * Parse a date/time string beginning at the given parse position. For - * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date - * that is equivalent to Date(837039928046). - *

- * By default, parsing is lenient: If the input is not in the form used by - * this object's format method but can still be parsed as a date, then the - * parse succeeds. Clients may insist on strict adherence to the format by - * calling setLenient(false). - * @see DateFormat::setLenient(boolean) - * - * @param text The date/time string to be parsed. - * @param cal A Calendar set on input to the date and time to be used for - * missing values in the date/time string being parsed, and set - * on output to the parsed date/time. When the calendar type is - * different from the internal calendar held by this DateFormat - * instance, the internal calendar will be cloned to a work - * calendar set to the same milliseconds and time zone as the - * cal parameter, field values will be parsed based on the work - * calendar, then the result (milliseconds and time zone) will - * be set in this calendar. - * @param pos On input, the position at which to start parsing; on - * output, the position at which parsing terminated, or the - * start position if the parse failed. - * @stable ICU 2.1 - */ - virtual void parse( const UnicodeString& text, - Calendar& cal, - ParsePosition& pos) const = 0; - - /** - * Parse a date/time string beginning at the given parse position. For - * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date - * that is equivalent to Date(837039928046). - *

- * By default, parsing is lenient: If the input is not in the form used by - * this object's format method but can still be parsed as a date, then the - * parse succeeds. Clients may insist on strict adherence to the format by - * calling setLenient(false). - * @see DateFormat::setLenient(boolean) - *

- * Note that the normal date formats associated with some calendars - such - * as the Chinese lunar calendar - do not specify enough fields to enable - * dates to be parsed unambiguously. In the case of the Chinese lunar - * calendar, while the year within the current 60-year cycle is specified, - * the number of such cycles since the start date of the calendar (in the - * ERA field of the Calendar object) is not normally part of the format, - * and parsing may assume the wrong era. For cases such as this it is - * recommended that clients parse using the method - * parse(const UnicodeString&, Calendar& cal, ParsePosition&) - * with the Calendar passed in set to the current date, or to a date - * within the era/cycle that should be assumed if absent in the format. - * - * @param text The date/time string to be parsed into a UDate value. - * @param pos On input, the position at which to start parsing; on - * output, the position at which parsing terminated, or the - * start position if the parse failed. - * @return A valid UDate if the input could be parsed. - * @stable ICU 2.0 - */ - UDate parse( const UnicodeString& text, - ParsePosition& pos) const; - - /** - * Parse a string to produce an object. This methods handles parsing of - * date/time strings into Formattable objects with UDate types. - *

- * Before calling, set parse_pos.index to the offset you want to start - * parsing at in the source. After calling, parse_pos.index is the end of - * the text you parsed. If error occurs, index is unchanged. - *

- * When parsing, leading whitespace is discarded (with a successful parse), - * while trailing whitespace is left as is. - *

- * See Format::parseObject() for more. - * - * @param source The string to be parsed into an object. - * @param result Formattable to be set to the parse result. - * If parse fails, return contents are undefined. - * @param parse_pos The position to start parsing at. Upon return - * this param is set to the position after the - * last character successfully parsed. If the - * source is not parsed successfully, this param - * will remain unchanged. - * @stable ICU 2.0 - */ - virtual void parseObject(const UnicodeString& source, - Formattable& result, - ParsePosition& parse_pos) const; - - /** - * Create a default date/time formatter that uses the SHORT style for both - * the date and the time. - * - * @return A date/time formatter which the caller owns. - * @stable ICU 2.0 - */ - static DateFormat* U_EXPORT2 createInstance(void); - - /** - * Creates a time formatter with the given formatting style for the given - * locale. - * - * @param style The given formatting style. For example, - * SHORT for "h:mm a" in the US locale. Relative - * time styles are not currently supported. - * @param aLocale The given locale. - * @return A time formatter which the caller owns. - * @stable ICU 2.0 - */ - static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault, - const Locale& aLocale = Locale::getDefault()); - - /** - * Creates a date formatter with the given formatting style for the given - * const locale. - * - * @param style The given formatting style. For example, SHORT for "M/d/yy" in the - * US locale. As currently implemented, relative date formatting only - * affects a limited range of calendar days before or after the - * current date, based on the CLDR <field type="day">/<relative> data: - * For example, in English, "Yesterday", "Today", and "Tomorrow". - * Outside of this range, dates are formatted using the corresponding - * non-relative style. - * @param aLocale The given locale. - * @return A date formatter which the caller owns. - * @stable ICU 2.0 - */ - static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault, - const Locale& aLocale = Locale::getDefault()); - - /** - * Creates a date/time formatter with the given formatting styles for the - * given locale. - * - * @param dateStyle The given formatting style for the date portion of the result. - * For example, SHORT for "M/d/yy" in the US locale. As currently - * implemented, relative date formatting only affects a limited range - * of calendar days before or after the current date, based on the - * CLDR <field type="day">/<relative> data: For example, in English, - * "Yesterday", "Today", and "Tomorrow". Outside of this range, dates - * are formatted using the corresponding non-relative style. - * @param timeStyle The given formatting style for the time portion of the result. - * For example, SHORT for "h:mm a" in the US locale. Relative - * time styles are not currently supported. - * @param aLocale The given locale. - * @return A date/time formatter which the caller owns. - * @stable ICU 2.0 - */ - static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault, - EStyle timeStyle = kDefault, - const Locale& aLocale = Locale::getDefault()); - -#ifndef U_HIDE_INTERNAL_API - /** - * Returns the best pattern given a skeleton and locale. - * @param locale the locale - * @param skeleton the skeleton - * @param status ICU error returned here - * @return the best pattern. - * @internal For ICU use only. - */ - static UnicodeString getBestPattern( - const Locale &locale, - const UnicodeString &skeleton, - UErrorCode &status); -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Creates a date/time formatter for the given skeleton and - * default locale. - * - * @param skeleton The skeleton e.g "yMMMMd." Fields in the skeleton can - * be in any order, and this method uses the locale to - * map the skeleton to a pattern that includes locale - * specific separators with the fields in the appropriate - * order for that locale. - * @param status Any error returned here. - * @return A date/time formatter which the caller owns. - * @stable ICU 55 - */ - static DateFormat* U_EXPORT2 createInstanceForSkeleton( - const UnicodeString& skeleton, - UErrorCode &status); - - /** - * Creates a date/time formatter for the given skeleton and locale. - * - * @param skeleton The skeleton e.g "yMMMMd." Fields in the skeleton can - * be in any order, and this method uses the locale to - * map the skeleton to a pattern that includes locale - * specific separators with the fields in the appropriate - * order for that locale. - * @param locale The given locale. - * @param status Any error returned here. - * @return A date/time formatter which the caller owns. - * @stable ICU 55 - */ - static DateFormat* U_EXPORT2 createInstanceForSkeleton( - const UnicodeString& skeleton, - const Locale &locale, - UErrorCode &status); - - /** - * Creates a date/time formatter for the given skeleton and locale. - * - * @param calendarToAdopt the calendar returned DateFormat is to use. - * @param skeleton The skeleton e.g "yMMMMd." Fields in the skeleton can - * be in any order, and this method uses the locale to - * map the skeleton to a pattern that includes locale - * specific separators with the fields in the appropriate - * order for that locale. - * @param locale The given locale. - * @param status Any error returned here. - * @return A date/time formatter which the caller owns. - * @stable ICU 55 - */ - static DateFormat* U_EXPORT2 createInstanceForSkeleton( - Calendar *calendarToAdopt, - const UnicodeString& skeleton, - const Locale &locale, - UErrorCode &status); - - - /** - * Gets the set of locales for which DateFormats are installed. - * @param count Filled in with the number of locales in the list that is returned. - * @return the set of locales for which DateFormats are installed. The caller - * does NOT own this list and must not delete it. - * @stable ICU 2.0 - */ - static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); - - /** - * Returns whether both date/time parsing in the encapsulated Calendar object and DateFormat whitespace & - * numeric processing is lenient. - * @stable ICU 2.0 - */ - virtual UBool isLenient(void) const; - - /** - * Specifies whether date/time parsing is to be lenient. With - * lenient parsing, the parser may use heuristics to interpret inputs that - * do not precisely match this object's format. Without lenient parsing, - * inputs must match this object's format more closely. - * - * Note: ICU 53 introduced finer grained control of leniency (and added - * new control points) making the preferred method a combination of - * setCalendarLenient() & setBooleanAttribute() calls. - * This method supports prior functionality but may not support all - * future leniency control & behavior of DateFormat. For control of pre 53 leniency, - * Calendar and DateFormat whitespace & numeric tolerance, this method is safe to - * use. However, mixing leniency control via this method and modification of the - * newer attributes via setBooleanAttribute() may produce undesirable - * results. - * - * @param lenient True specifies date/time interpretation to be lenient. - * @see Calendar::setLenient - * @stable ICU 2.0 - */ - virtual void setLenient(UBool lenient); - - - /** - * Returns whether date/time parsing in the encapsulated Calendar object processing is lenient. - * @stable ICU 53 - */ - virtual UBool isCalendarLenient(void) const; - - - /** - * Specifies whether encapsulated Calendar date/time parsing is to be lenient. With - * lenient parsing, the parser may use heuristics to interpret inputs that - * do not precisely match this object's format. Without lenient parsing, - * inputs must match this object's format more closely. - * @param lenient when true, parsing is lenient - * @see com.ibm.icu.util.Calendar#setLenient - * @stable ICU 53 - */ - virtual void setCalendarLenient(UBool lenient); - - - /** - * Gets the calendar associated with this date/time formatter. - * The calendar is owned by the formatter and must not be modified. - * Also, the calendar does not reflect the results of a parse operation. - * To parse to a calendar, use {@link #parse(const UnicodeString&, Calendar& cal, ParsePosition&) const parse(const UnicodeString&, Calendar& cal, ParsePosition&)} - * @return the calendar associated with this date/time formatter. - * @stable ICU 2.0 - */ - virtual const Calendar* getCalendar(void) const; - - /** - * Set the calendar to be used by this date format. Initially, the default - * calendar for the specified or default locale is used. The caller should - * not delete the Calendar object after it is adopted by this call. - * Adopting a new calendar will change to the default symbols. - * - * @param calendarToAdopt Calendar object to be adopted. - * @stable ICU 2.0 - */ - virtual void adoptCalendar(Calendar* calendarToAdopt); - - /** - * Set the calendar to be used by this date format. Initially, the default - * calendar for the specified or default locale is used. - * - * @param newCalendar Calendar object to be set. - * @stable ICU 2.0 - */ - virtual void setCalendar(const Calendar& newCalendar); - - - /** - * Gets the number formatter which this date/time formatter uses to format - * and parse the numeric portions of the pattern. - * @return the number formatter which this date/time formatter uses. - * @stable ICU 2.0 - */ - virtual const NumberFormat* getNumberFormat(void) const; - - /** - * Allows you to set the number formatter. The caller should - * not delete the NumberFormat object after it is adopted by this call. - * @param formatToAdopt NumberFormat object to be adopted. - * @stable ICU 2.0 - */ - virtual void adoptNumberFormat(NumberFormat* formatToAdopt); - - /** - * Allows you to set the number formatter. - * @param newNumberFormat NumberFormat object to be set. - * @stable ICU 2.0 - */ - virtual void setNumberFormat(const NumberFormat& newNumberFormat); - - /** - * Returns a reference to the TimeZone used by this DateFormat's calendar. - * @return the time zone associated with the calendar of DateFormat. - * @stable ICU 2.0 - */ - virtual const TimeZone& getTimeZone(void) const; - - /** - * Sets the time zone for the calendar of this DateFormat object. The caller - * no longer owns the TimeZone object and should not delete it after this call. - * @param zoneToAdopt the TimeZone to be adopted. - * @stable ICU 2.0 - */ - virtual void adoptTimeZone(TimeZone* zoneToAdopt); - - /** - * Sets the time zone for the calendar of this DateFormat object. - * @param zone the new time zone. - * @stable ICU 2.0 - */ - virtual void setTimeZone(const TimeZone& zone); - - /** - * Set a particular UDisplayContext value in the formatter, such as - * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. - * @param value The UDisplayContext value to set. - * @param status Input/output status. If at entry this indicates a failure - * status, the function will do nothing; otherwise this will be - * updated with any new status from the function. - * @stable ICU 53 - */ - virtual void setContext(UDisplayContext value, UErrorCode& status); - - /** - * Get the formatter's UDisplayContext value for the specified UDisplayContextType, - * such as UDISPCTX_TYPE_CAPITALIZATION. - * @param type The UDisplayContextType whose value to return - * @param status Input/output status. If at entry this indicates a failure - * status, the function will do nothing; otherwise this will be - * updated with any new status from the function. - * @return The UDisplayContextValue for the specified type. - * @stable ICU 53 - */ - virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const; - - /** - * Sets an boolean attribute on this DateFormat. - * May return U_UNSUPPORTED_ERROR if this instance does not support - * the specified attribute. - * @param attr the attribute to set - * @param newvalue new value - * @param status the error type - * @return *this - for chaining (example: format.setAttribute(...).setAttribute(...) ) - * @stable ICU 53 - */ - - virtual DateFormat& U_EXPORT2 setBooleanAttribute(UDateFormatBooleanAttribute attr, - UBool newvalue, - UErrorCode &status); - - /** - * Returns a boolean from this DateFormat - * May return U_UNSUPPORTED_ERROR if this instance does not support - * the specified attribute. - * @param attr the attribute to set - * @param status the error type - * @return the attribute value. Undefined if there is an error. - * @stable ICU 53 - */ - virtual UBool U_EXPORT2 getBooleanAttribute(UDateFormatBooleanAttribute attr, UErrorCode &status) const; - -protected: - /** - * Default constructor. Creates a DateFormat with no Calendar or NumberFormat - * associated with it. This constructor depends on the subclasses to fill in - * the calendar and numberFormat fields. - * @stable ICU 2.0 - */ - DateFormat(); - - /** - * Copy constructor. - * @stable ICU 2.0 - */ - DateFormat(const DateFormat&); - - /** - * Default assignment operator. - * @stable ICU 2.0 - */ - DateFormat& operator=(const DateFormat&); - - /** - * The calendar that DateFormat uses to produce the time field values needed - * to implement date/time formatting. Subclasses should generally initialize - * this to the default calendar for the locale associated with this DateFormat. - * @stable ICU 2.4 - */ - Calendar* fCalendar; - - /** - * The number formatter that DateFormat uses to format numbers in dates and - * times. Subclasses should generally initialize this to the default number - * format for the locale associated with this DateFormat. - * @stable ICU 2.4 - */ - NumberFormat* fNumberFormat; - - -private: - - /** - * Gets the date/time formatter with the given formatting styles for the - * given locale. - * @param dateStyle the given date formatting style. - * @param timeStyle the given time formatting style. - * @param inLocale the given locale. - * @return a date/time formatter, or 0 on failure. - */ - static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale& inLocale); - - - /** - * enum set of active boolean attributes for this instance - */ - EnumSet fBoolFlags; - - - UDisplayContext fCapitalizationContext; - friend class DateFmtKeyByStyle; - -public: -#ifndef U_HIDE_OBSOLETE_API - /** - * Field selector for FieldPosition for DateFormat fields. - * @obsolete ICU 3.4 use UDateFormatField instead, since this API will be - * removed in that release - */ - enum EField - { - // Obsolete; use UDateFormatField instead - kEraField = UDAT_ERA_FIELD, - kYearField = UDAT_YEAR_FIELD, - kMonthField = UDAT_MONTH_FIELD, - kDateField = UDAT_DATE_FIELD, - kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD, - kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD, - kMinuteField = UDAT_MINUTE_FIELD, - kSecondField = UDAT_SECOND_FIELD, - kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD, - kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD, - kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD, - kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD, - kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD, - kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD, - kAmPmField = UDAT_AM_PM_FIELD, - kHour1Field = UDAT_HOUR1_FIELD, - kHour0Field = UDAT_HOUR0_FIELD, - kTimezoneField = UDAT_TIMEZONE_FIELD, - kYearWOYField = UDAT_YEAR_WOY_FIELD, - kDOWLocalField = UDAT_DOW_LOCAL_FIELD, - kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD, - kJulianDayField = UDAT_JULIAN_DAY_FIELD, - kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD, - - // Obsolete; use UDateFormatField instead - ERA_FIELD = UDAT_ERA_FIELD, - YEAR_FIELD = UDAT_YEAR_FIELD, - MONTH_FIELD = UDAT_MONTH_FIELD, - DATE_FIELD = UDAT_DATE_FIELD, - HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD, - HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD, - MINUTE_FIELD = UDAT_MINUTE_FIELD, - SECOND_FIELD = UDAT_SECOND_FIELD, - MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD, - DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD, - DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD, - DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD, - WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD, - WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD, - AM_PM_FIELD = UDAT_AM_PM_FIELD, - HOUR1_FIELD = UDAT_HOUR1_FIELD, - HOUR0_FIELD = UDAT_HOUR0_FIELD, - TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD - }; -#endif /* U_HIDE_OBSOLETE_API */ -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _DATEFMT -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dbbi.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dbbi.h deleted file mode 100644 index 6f598febe6..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dbbi.h +++ /dev/null @@ -1,44 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1999-2006,2013 IBM Corp. All rights reserved. -********************************************************************** -* Date Name Description -* 12/1/99 rgillam Complete port from Java. -* 01/13/2000 helena Added UErrorCode to ctors. -********************************************************************** -*/ - -#ifndef DBBI_H -#define DBBI_H - -#include "unicode/rbbi.h" - -#if !UCONFIG_NO_BREAK_ITERATION - -/** - * \file - * \brief C++ API: Dictionary Based Break Iterator - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -#ifndef U_HIDE_DEPRECATED_API -/** - * An obsolete subclass of RuleBasedBreakIterator. Handling of dictionary- - * based break iteration has been folded into the base class. This class - * is deprecated as of ICU 3.6. - * @deprecated ICU 3.6 - */ -typedef RuleBasedBreakIterator DictionaryBasedBreakIterator; - -#endif /* U_HIDE_DEPRECATED_API */ - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dcfmtsym.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dcfmtsym.h deleted file mode 100644 index c2207e7b2e..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dcfmtsym.h +++ /dev/null @@ -1,601 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 1997-2016, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************** -* -* File DCFMTSYM.H -* -* Modification History: -* -* Date Name Description -* 02/19/97 aliu Converted from java. -* 03/18/97 clhuang Updated per C++ implementation. -* 03/27/97 helena Updated to pass the simple test after code review. -* 08/26/97 aliu Added currency/intl currency symbol support. -* 07/22/98 stephen Changed to match C++ style -* currencySymbol -> fCurrencySymbol -* Constants changed from CAPS to kCaps -* 06/24/99 helena Integrated Alan's NF enhancements and Java2 bug fixes -* 09/22/00 grhoten Marked deprecation tags with a pointer to replacement -* functions. -******************************************************************************** -*/ - -#ifndef DCFMTSYM_H -#define DCFMTSYM_H - -#include "unicode/utypes.h" -#include "unicode/uchar.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/uobject.h" -#include "unicode/locid.h" -#include "unicode/numsys.h" -#include "unicode/unum.h" -#include "unicode/unistr.h" - -/** - * \file - * \brief C++ API: Symbols for formatting numbers. - */ - - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * This class represents the set of symbols needed by DecimalFormat - * to format numbers. DecimalFormat creates for itself an instance of - * DecimalFormatSymbols from its locale data. If you need to change any - * of these symbols, you can get the DecimalFormatSymbols object from - * your DecimalFormat and modify it. - *

- * Here are the special characters used in the parts of the - * subpattern, with notes on their usage. - *

- * \code
- *        Symbol   Meaning
- *          0      a digit
- *          #      a digit, zero shows as absent
- *          .      placeholder for decimal separator
- *          ,      placeholder for grouping separator.
- *          ;      separates formats.
- *          -      default negative prefix.
- *          %      divide by 100 and show as percentage
- *          X      any other characters can be used in the prefix or suffix
- *          '      used to quote special characters in a prefix or suffix.
- * \endcode
- *  
- * [Notes] - *

- * If there is no explicit negative subpattern, - is prefixed to the - * positive form. That is, "0.00" alone is equivalent to "0.00;-0.00". - *

- * The grouping separator is commonly used for thousands, but in some - * countries for ten-thousands. The interval is a constant number of - * digits between the grouping characters, such as 100,000,000 or 1,0000,0000. - * If you supply a pattern with multiple grouping characters, the interval - * between the last one and the end of the integer is the one that is - * used. So "#,##,###,####" == "######,####" == "##,####,####". - */ -class U_I18N_API DecimalFormatSymbols : public UObject { -public: - /** - * Constants for specifying a number format symbol. - * @stable ICU 2.0 - */ - enum ENumberFormatSymbol { - /** The decimal separator */ - kDecimalSeparatorSymbol, - /** The grouping separator */ - kGroupingSeparatorSymbol, - /** The pattern separator */ - kPatternSeparatorSymbol, - /** The percent sign */ - kPercentSymbol, - /** Zero*/ - kZeroDigitSymbol, - /** Character representing a digit in the pattern */ - kDigitSymbol, - /** The minus sign */ - kMinusSignSymbol, - /** The plus sign */ - kPlusSignSymbol, - /** The currency symbol */ - kCurrencySymbol, - /** The international currency symbol */ - kIntlCurrencySymbol, - /** The monetary separator */ - kMonetarySeparatorSymbol, - /** The exponential symbol */ - kExponentialSymbol, - /** Per mill symbol - replaces kPermillSymbol */ - kPerMillSymbol, - /** Escape padding character */ - kPadEscapeSymbol, - /** Infinity symbol */ - kInfinitySymbol, - /** Nan symbol */ - kNaNSymbol, - /** Significant digit symbol - * @stable ICU 3.0 */ - kSignificantDigitSymbol, - /** The monetary grouping separator - * @stable ICU 3.6 - */ - kMonetaryGroupingSeparatorSymbol, - /** One - * @stable ICU 4.6 - */ - kOneDigitSymbol, - /** Two - * @stable ICU 4.6 - */ - kTwoDigitSymbol, - /** Three - * @stable ICU 4.6 - */ - kThreeDigitSymbol, - /** Four - * @stable ICU 4.6 - */ - kFourDigitSymbol, - /** Five - * @stable ICU 4.6 - */ - kFiveDigitSymbol, - /** Six - * @stable ICU 4.6 - */ - kSixDigitSymbol, - /** Seven - * @stable ICU 4.6 - */ - kSevenDigitSymbol, - /** Eight - * @stable ICU 4.6 - */ - kEightDigitSymbol, - /** Nine - * @stable ICU 4.6 - */ - kNineDigitSymbol, - /** Multiplication sign. - * @stable ICU 54 - */ - kExponentMultiplicationSymbol, - /** count symbol constants */ - kFormatSymbolCount = kNineDigitSymbol + 2 - }; - - /** - * Create a DecimalFormatSymbols object for the given locale. - * - * @param locale The locale to get symbols for. - * @param status Input/output parameter, set to success or - * failure code upon return. - * @stable ICU 2.0 - */ - DecimalFormatSymbols(const Locale& locale, UErrorCode& status); - - /** - * Creates a DecimalFormatSymbols instance for the given locale with digits and symbols - * corresponding to the given NumberingSystem. - * - * This constructor behaves equivalently to the normal constructor called with a locale having a - * "numbers=xxxx" keyword specifying the numbering system by name. - * - * In this constructor, the NumberingSystem argument will be used even if the locale has its own - * "numbers=xxxx" keyword. - * - * @param locale The locale to get symbols for. - * @param ns The numbering system. - * @param status Input/output parameter, set to success or - * failure code upon return. - * @stable ICU 60 - */ - DecimalFormatSymbols(const Locale& locale, const NumberingSystem& ns, UErrorCode& status); - - /** - * Create a DecimalFormatSymbols object for the default locale. - * This constructor will not fail. If the resource file data is - * not available, it will use hard-coded last-resort data and - * set status to U_USING_FALLBACK_ERROR. - * - * @param status Input/output parameter, set to success or - * failure code upon return. - * @stable ICU 2.0 - */ - DecimalFormatSymbols(UErrorCode& status); - - /** - * Creates a DecimalFormatSymbols object with last-resort data. - * Intended for callers who cache the symbols data and - * set all symbols on the resulting object. - * - * The last-resort symbols are similar to those for the root data, - * except that the grouping separators are empty, - * the NaN symbol is U+FFFD rather than "NaN", - * and the CurrencySpacing patterns are empty. - * - * @param status Input/output parameter, set to success or - * failure code upon return. - * @return last-resort symbols - * @stable ICU 52 - */ - static DecimalFormatSymbols* createWithLastResortData(UErrorCode& status); - - /** - * Copy constructor. - * @stable ICU 2.0 - */ - DecimalFormatSymbols(const DecimalFormatSymbols&); - - /** - * Assignment operator. - * @stable ICU 2.0 - */ - DecimalFormatSymbols& operator=(const DecimalFormatSymbols&); - - /** - * Destructor. - * @stable ICU 2.0 - */ - virtual ~DecimalFormatSymbols(); - - /** - * Return true if another object is semantically equal to this one. - * - * @param other the object to be compared with. - * @return true if another object is semantically equal to this one. - * @stable ICU 2.0 - */ - UBool operator==(const DecimalFormatSymbols& other) const; - - /** - * Return true if another object is semantically unequal to this one. - * - * @param other the object to be compared with. - * @return true if another object is semantically unequal to this one. - * @stable ICU 2.0 - */ - UBool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); } - - /** - * Get one of the format symbols by its enum constant. - * Each symbol is stored as a string so that graphemes - * (characters with modifier letters) can be used. - * - * @param symbol Constant to indicate a number format symbol. - * @return the format symbols by the param 'symbol' - * @stable ICU 2.0 - */ - inline UnicodeString getSymbol(ENumberFormatSymbol symbol) const; - - /** - * Set one of the format symbols by its enum constant. - * Each symbol is stored as a string so that graphemes - * (characters with modifier letters) can be used. - * - * @param symbol Constant to indicate a number format symbol. - * @param value value of the format symbol - * @param propogateDigits If false, setting the zero digit will not automatically set 1-9. - * The default behavior is to automatically set 1-9 if zero is being set and the value - * it is being set to corresponds to a known Unicode zero digit. - * @stable ICU 2.0 - */ - void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits); - - /** - * Returns the locale for which this object was constructed. - * @stable ICU 2.6 - */ - inline Locale getLocale() const; - - /** - * Returns the locale for this object. Two flavors are available: - * valid and actual locale. - * @stable ICU 2.8 - */ - Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const; - - /** - * Get pattern string for 'CurrencySpacing' that can be applied to - * currency format. - * This API gets the CurrencySpacing data from ResourceBundle. The pattern can - * be empty if there is no data from current locale and its parent locales. - * - * @param type : UNUM_CURRENCY_MATCH, UNUM_CURRENCY_SURROUNDING_MATCH or UNUM_CURRENCY_INSERT. - * @param beforeCurrency : true if the pattern is for before currency symbol. - * false if the pattern is for after currency symbol. - * @param status: Input/output parameter, set to success or - * failure code upon return. - * @return pattern string for currencyMatch, surroundingMatch or spaceInsert. - * Return empty string if there is no data for this locale and its parent - * locales. - * @stable ICU 4.8 - */ - const UnicodeString& getPatternForCurrencySpacing(UCurrencySpacing type, - UBool beforeCurrency, - UErrorCode& status) const; - /** - * Set pattern string for 'CurrencySpacing' that can be applied to - * currency format. - * - * @param type : UNUM_CURRENCY_MATCH, UNUM_CURRENCY_SURROUNDING_MATCH or UNUM_CURRENCY_INSERT. - * @param beforeCurrency : true if the pattern is for before currency symbol. - * false if the pattern is for after currency symbol. - * @param pattern : pattern string to override current setting. - * @stable ICU 4.8 - */ - void setPatternForCurrencySpacing(UCurrencySpacing type, - UBool beforeCurrency, - const UnicodeString& pattern); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.2 - */ - virtual UClassID getDynamicClassID() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - -private: - DecimalFormatSymbols(); - - /** - * Initializes the symbols from the LocaleElements resource bundle. - * Note: The organization of LocaleElements badly needs to be - * cleaned up. - * - * @param locale The locale to get symbols for. - * @param success Input/output parameter, set to success or - * failure code upon return. - * @param useLastResortData determine if use last resort data - * @param ns The NumberingSystem to use; otherwise, fall - * back to the locale. - */ - void initialize(const Locale& locale, UErrorCode& success, - UBool useLastResortData = FALSE, const NumberingSystem* ns = nullptr); - - /** - * Initialize the symbols with default values. - */ - void initialize(); - - void setCurrencyForSymbols(); - -public: - -#ifndef U_HIDE_INTERNAL_API - /** - * @internal For ICU use only - */ - inline UBool isCustomCurrencySymbol() const { - return fIsCustomCurrencySymbol; - } - - /** - * @internal For ICU use only - */ - inline UBool isCustomIntlCurrencySymbol() const { - return fIsCustomIntlCurrencySymbol; - } - - /** - * @internal For ICU use only - */ - inline UChar32 getCodePointZero() const { - return fCodePointZero; - } -#endif /* U_HIDE_INTERNAL_API */ - - /** - * _Internal_ function - more efficient version of getSymbol, - * returning a const reference to one of the symbol strings. - * The returned reference becomes invalid when the symbol is changed - * or when the DecimalFormatSymbols are destroyed. - * Note: moved \#ifndef U_HIDE_INTERNAL_API after this, since this is needed for inline in DecimalFormat - * - * This is not currently stable API, but if you think it should be stable, - * post a comment on the following ticket and the ICU team will take a look: - * http://bugs.icu-project.org/trac/ticket/13580 - * - * @param symbol Constant to indicate a number format symbol. - * @return the format symbol by the param 'symbol' - * @internal - */ - inline const UnicodeString& getConstSymbol(ENumberFormatSymbol symbol) const; - -#ifndef U_HIDE_INTERNAL_API - /** - * Returns the const UnicodeString reference, like getConstSymbol, - * corresponding to the digit with the given value. This is equivalent - * to accessing the symbol from getConstSymbol with the corresponding - * key, such as kZeroDigitSymbol or kOneDigitSymbol. - * - * This is not currently stable API, but if you think it should be stable, - * post a comment on the following ticket and the ICU team will take a look: - * http://bugs.icu-project.org/trac/ticket/13580 - * - * @param digit The digit, an integer between 0 and 9 inclusive. - * If outside the range 0 to 9, the zero digit is returned. - * @return the format symbol for the given digit. - * @internal This API is currently for ICU use only. - */ - inline const UnicodeString& getConstDigitSymbol(int32_t digit) const; - - /** - * Returns that pattern stored in currecy info. Internal API for use by NumberFormat API. - * @internal - */ - inline const char16_t* getCurrencyPattern(void) const; - - /** - * Returns the name of the numbering system used for this object. - * @internal - */ - inline const char* getNSName() const; - -#endif /* U_HIDE_INTERNAL_API */ - -private: - /** - * Private symbol strings. - * They are either loaded from a resource bundle or otherwise owned. - * setSymbol() clones the symbol string. - * Readonly aliases can only come from a resource bundle, so that we can always - * use fastCopyFrom() with them. - * - * If DecimalFormatSymbols becomes subclassable and the status of fSymbols changes - * from private to protected, - * or when fSymbols can be set any other way that allows them to be readonly aliases - * to non-resource bundle strings, - * then regular UnicodeString copies must be used instead of fastCopyFrom(). - * - * @internal - */ - UnicodeString fSymbols[kFormatSymbolCount]; - - /** - * Non-symbol variable for getConstSymbol(). Always empty. - * @internal - */ - UnicodeString fNoSymbol; - - /** - * Dealing with code points is faster than dealing with strings when formatting. Because of - * this, we maintain a value containing the zero code point that is used whenever digitStrings - * represents a sequence of ten code points in order. - * - *

If the value stored here is positive, it means that the code point stored in this value - * corresponds to the digitStrings array, and codePointZero can be used instead of the - * digitStrings array for the purposes of efficient formatting; if -1, then digitStrings does - * *not* contain a sequence of code points, and it must be used directly. - * - *

It is assumed that codePointZero always shadows the value in digitStrings. codePointZero - * should never be set directly; rather, it should be updated only when digitStrings mutates. - * That is, the flow of information is digitStrings -> codePointZero, not the other way. - */ - UChar32 fCodePointZero; - - Locale locale; - - char actualLocale[ULOC_FULLNAME_CAPACITY]; - char validLocale[ULOC_FULLNAME_CAPACITY]; - const char16_t* currPattern; - - UnicodeString currencySpcBeforeSym[UNUM_CURRENCY_SPACING_COUNT]; - UnicodeString currencySpcAfterSym[UNUM_CURRENCY_SPACING_COUNT]; - UBool fIsCustomCurrencySymbol; - UBool fIsCustomIntlCurrencySymbol; - char fNSName[9]; // Apple rdar://51672521 -}; - -// ------------------------------------- - -inline UnicodeString -DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const { - const UnicodeString *strPtr; - if(symbol < kFormatSymbolCount) { - strPtr = &fSymbols[symbol]; - } else { - strPtr = &fNoSymbol; - } - return *strPtr; -} - -// See comments above for this function. Not hidden with #ifdef U_HIDE_INTERNAL_API -inline const UnicodeString & -DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol symbol) const { - const UnicodeString *strPtr; - if(symbol < kFormatSymbolCount) { - strPtr = &fSymbols[symbol]; - } else { - strPtr = &fNoSymbol; - } - return *strPtr; -} - -#ifndef U_HIDE_INTERNAL_API -inline const UnicodeString& DecimalFormatSymbols::getConstDigitSymbol(int32_t digit) const { - if (digit < 0 || digit > 9) { - digit = 0; - } - if (digit == 0) { - return fSymbols[kZeroDigitSymbol]; - } - ENumberFormatSymbol key = static_cast(kOneDigitSymbol + digit - 1); - return fSymbols[key]; -} -#endif /* U_HIDE_INTERNAL_API */ - -// ------------------------------------- - -inline void -DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits = TRUE) { - if (symbol == kCurrencySymbol) { - fIsCustomCurrencySymbol = TRUE; - } - else if (symbol == kIntlCurrencySymbol) { - fIsCustomIntlCurrencySymbol = TRUE; - } - if(symbol= kOneDigitSymbol && symbol <= kNineDigitSymbol) { - fCodePointZero = -1; - } -} - -// ------------------------------------- - -inline Locale -DecimalFormatSymbols::getLocale() const { - return locale; -} - -#ifndef U_HIDE_INTERNAL_API -inline const char16_t* -DecimalFormatSymbols::getCurrencyPattern() const { - return currPattern; -} - -inline const char* -DecimalFormatSymbols::getNSName() const { - return fNSName; -} -#endif /* U_HIDE_INTERNAL_API */ - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _DCFMTSYM -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/decimfmt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/decimfmt.h deleted file mode 100644 index 6e6a7ff001..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/decimfmt.h +++ /dev/null @@ -1,2244 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 1997-2016, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************** -* -* File DECIMFMT.H -* -* Modification History: -* -* Date Name Description -* 02/19/97 aliu Converted from java. -* 03/20/97 clhuang Updated per C++ implementation. -* 04/03/97 aliu Rewrote parsing and formatting completely, and -* cleaned up and debugged. Actually works now. -* 04/17/97 aliu Changed DigitCount to int per code review. -* 07/10/97 helena Made ParsePosition a class and get rid of the function -* hiding problems. -* 09/09/97 aliu Ported over support for exponential formats. -* 07/20/98 stephen Changed documentation -* 01/30/13 emmons Added Scaling methods -******************************************************************************** -*/ - -#ifndef DECIMFMT_H -#define DECIMFMT_H - -#include "unicode/utypes.h" -/** - * \file - * \brief C++ API: Compatibility APIs for decimal formatting. - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/dcfmtsym.h" -#include "unicode/numfmt.h" -#include "unicode/locid.h" -#include "unicode/fpositer.h" -#include "unicode/stringpiece.h" -#include "unicode/curramt.h" -#include "unicode/enumset.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class CurrencyPluralInfo; -class CompactDecimalFormat; - -namespace number { -class LocalizedNumberFormatter; -class FormattedNumber; -namespace impl { -class DecimalQuantity; -struct DecimalFormatFields; -} -} - -namespace numparse { -namespace impl { -class NumberParserImpl; -} -} - -/** - * **IMPORTANT:** New users are strongly encouraged to see if - * numberformatter.h fits their use case. Although not deprecated, this header - * is provided for backwards compatibility only. - * - * DecimalFormat is a concrete subclass of NumberFormat that formats decimal - * numbers. It has a variety of features designed to make it possible to parse - * and format numbers in any locale, including support for Western, Arabic, or - * Indic digits. It also supports different flavors of numbers, including - * integers ("123"), fixed-point numbers ("123.4"), scientific notation - * ("1.23E4"), percentages ("12%"), and currency amounts ("$123", "USD123", - * "123 US dollars"). All of these flavors can be easily localized. - * - * To obtain a NumberFormat for a specific locale (including the default - * locale) call one of NumberFormat's factory methods such as - * createInstance(). Do not call the DecimalFormat constructors directly, unless - * you know what you are doing, since the NumberFormat factory methods may - * return subclasses other than DecimalFormat. - * - * **Example Usage** - * - * \code - * // Normally we would have a GUI with a menu for this - * int32_t locCount; - * const Locale* locales = NumberFormat::getAvailableLocales(locCount); - * - * double myNumber = -1234.56; - * UErrorCode success = U_ZERO_ERROR; - * NumberFormat* form; - * - * // Print out a number with the localized number, currency and percent - * // format for each locale. - * UnicodeString countryName; - * UnicodeString displayName; - * UnicodeString str; - * UnicodeString pattern; - * Formattable fmtable; - * for (int32_t j = 0; j < 3; ++j) { - * cout << endl << "FORMAT " << j << endl; - * for (int32_t i = 0; i < locCount; ++i) { - * if (locales[i].getCountry(countryName).size() == 0) { - * // skip language-only - * continue; - * } - * switch (j) { - * case 0: - * form = NumberFormat::createInstance(locales[i], success ); break; - * case 1: - * form = NumberFormat::createCurrencyInstance(locales[i], success ); break; - * default: - * form = NumberFormat::createPercentInstance(locales[i], success ); break; - * } - * if (form) { - * str.remove(); - * pattern = ((DecimalFormat*)form)->toPattern(pattern); - * cout << locales[i].getDisplayName(displayName) << ": " << pattern; - * cout << " -> " << form->format(myNumber,str) << endl; - * form->parse(form->format(myNumber,str), fmtable, success); - * delete form; - * } - * } - * } - * \endcode - * - * **Another example use createInstance(style)** - * - * \code - * // Print out a number using the localized number, currency, - * // percent, scientific, integer, iso currency, and plural currency - * // format for each locale - * Locale* locale = new Locale("en", "US"); - * double myNumber = 1234.56; - * UErrorCode success = U_ZERO_ERROR; - * UnicodeString str; - * Formattable fmtable; - * for (int j=NumberFormat::kNumberStyle; - * j<=NumberFormat::kPluralCurrencyStyle; - * ++j) { - * NumberFormat* form = NumberFormat::createInstance(locale, j, success); - * str.remove(); - * cout << "format result " << form->format(myNumber, str) << endl; - * format->parse(form->format(myNumber, str), fmtable, success); - * delete form; - * } - * \endcode - * - * - *

Patterns - * - *

A DecimalFormat consists of a pattern and a set of - * symbols. The pattern may be set directly using - * applyPattern(), or indirectly using other API methods which - * manipulate aspects of the pattern, such as the minimum number of integer - * digits. The symbols are stored in a DecimalFormatSymbols - * object. When using the NumberFormat factory methods, the - * pattern and symbols are read from ICU's locale data. - * - *

Special Pattern Characters - * - *

Many characters in a pattern are taken literally; they are matched during - * parsing and output unchanged during formatting. Special characters, on the - * other hand, stand for other characters, strings, or classes of characters. - * For example, the '#' character is replaced by a localized digit. Often the - * replacement character is the same as the pattern character; in the U.S. locale, - * the ',' grouping character is replaced by ','. However, the replacement is - * still happening, and if the symbols are modified, the grouping character - * changes. Some special characters affect the behavior of the formatter by - * their presence; for example, if the percent character is seen, then the - * value is multiplied by 100 before being displayed. - * - *

To insert a special character in a pattern as a literal, that is, without - * any special meaning, the character must be quoted. There are some exceptions to - * this which are noted below. - * - *

The characters listed here are used in non-localized patterns. Localized - * patterns use the corresponding characters taken from this formatter's - * DecimalFormatSymbols object instead, and these characters lose - * their special status. Two exceptions are the currency sign and quote, which - * are not localized. - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
Symbol - * Location - * Localized? - * Meaning - *
0 - * Number - * Yes - * Digit - *
1-9 - * Number - * Yes - * '1' through '9' indicate rounding. - *
\htmlonly@\endhtmlonly - * Number - * No - * Significant digit - *
# - * Number - * Yes - * Digit, zero shows as absent - *
. - * Number - * Yes - * Decimal separator or monetary decimal separator - *
- - * Number - * Yes - * Minus sign - *
, - * Number - * Yes - * Grouping separator - *
E - * Number - * Yes - * Separates mantissa and exponent in scientific notation. - * Need not be quoted in prefix or suffix. - *
+ - * Exponent - * Yes - * Prefix positive exponents with localized plus sign. - * Need not be quoted in prefix or suffix. - *
; - * Subpattern boundary - * Yes - * Separates positive and negative subpatterns - *
\% - * Prefix or suffix - * Yes - * Multiply by 100 and show as percentage - *
\\u2030 - * Prefix or suffix - * Yes - * Multiply by 1000 and show as per mille - *
\htmlonly¤\endhtmlonly (\\u00A4) - * Prefix or suffix - * No - * Currency sign, replaced by currency symbol. If - * doubled, replaced by international currency symbol. - * If tripled, replaced by currency plural names, for example, - * "US dollar" or "US dollars" for America. - * If present in a pattern, the monetary decimal separator - * is used instead of the decimal separator. - *
' - * Prefix or suffix - * No - * Used to quote special characters in a prefix or suffix, - * for example, "'#'#" formats 123 to - * "#123". To create a single quote - * itself, use two in a row: "# o''clock". - *
* - * Prefix or suffix boundary - * Yes - * Pad escape, precedes pad character - *
- * - *

A DecimalFormat pattern contains a positive and negative - * subpattern, for example, "#,##0.00;(#,##0.00)". Each subpattern has a - * prefix, a numeric part, and a suffix. If there is no explicit negative - * subpattern, the negative subpattern is the localized minus sign prefixed to the - * positive subpattern. That is, "0.00" alone is equivalent to "0.00;-0.00". If there - * is an explicit negative subpattern, it serves only to specify the negative - * prefix and suffix; the number of digits, minimal digits, and other - * characteristics are ignored in the negative subpattern. That means that - * "#,##0.0#;(#)" has precisely the same result as "#,##0.0#;(#,##0.0#)". - * - *

The prefixes, suffixes, and various symbols used for infinity, digits, - * thousands separators, decimal separators, etc. may be set to arbitrary - * values, and they will appear properly during formatting. However, care must - * be taken that the symbols and strings do not conflict, or parsing will be - * unreliable. For example, either the positive and negative prefixes or the - * suffixes must be distinct for parse() to be able - * to distinguish positive from negative values. Another example is that the - * decimal separator and thousands separator should be distinct characters, or - * parsing will be impossible. - * - *

The grouping separator is a character that separates clusters of - * integer digits to make large numbers more legible. It commonly used for - * thousands, but in some locales it separates ten-thousands. The grouping - * size is the number of digits between the grouping separators, such as 3 - * for "100,000,000" or 4 for "1 0000 0000". There are actually two different - * grouping sizes: One used for the least significant integer digits, the - * primary grouping size, and one used for all others, the - * secondary grouping size. In most locales these are the same, but - * sometimes they are different. For example, if the primary grouping interval - * is 3, and the secondary is 2, then this corresponds to the pattern - * "#,##,##0", and the number 123456789 is formatted as "12,34,56,789". If a - * pattern contains multiple grouping separators, the interval between the last - * one and the end of the integer defines the primary grouping size, and the - * interval between the last two defines the secondary grouping size. All others - * are ignored, so "#,##,###,####" == "###,###,####" == "##,#,###,####". - * - *

Illegal patterns, such as "#.#.#" or "#.###,###", will cause - * DecimalFormat to set a failing UErrorCode. - * - *

Pattern BNF - * - *

- * pattern    := subpattern (';' subpattern)?
- * subpattern := prefix? number exponent? suffix?
- * number     := (integer ('.' fraction)?) | sigDigits
- * prefix     := '\\u0000'..'\\uFFFD' - specialCharacters
- * suffix     := '\\u0000'..'\\uFFFD' - specialCharacters
- * integer    := '#'* '0'* '0'
- * fraction   := '0'* '#'*
- * sigDigits  := '#'* '@' '@'* '#'*
- * exponent   := 'E' '+'? '0'* '0'
- * padSpec    := '*' padChar
- * padChar    := '\\u0000'..'\\uFFFD' - quote
- *  
- * Notation:
- *   X*       0 or more instances of X
- *   X?       0 or 1 instances of X
- *   X|Y      either X or Y
- *   C..D     any character from C up to D, inclusive
- *   S-T      characters in S, except those in T
- * 
- * The first subpattern is for positive numbers. The second (optional) - * subpattern is for negative numbers. - * - *

Not indicated in the BNF syntax above: - * - *

  • The grouping separator ',' can occur inside the integer and - * sigDigits elements, between any two pattern characters of that - * element, as long as the integer or sigDigits element is not - * followed by the exponent element. - * - *
  • Two grouping intervals are recognized: That between the - * decimal point and the first grouping symbol, and that - * between the first and second grouping symbols. These - * intervals are identical in most locales, but in some - * locales they differ. For example, the pattern - * "#,##,###" formats the number 123456789 as - * "12,34,56,789".
  • - * - *
  • The pad specifier padSpec may appear before the prefix, - * after the prefix, before the suffix, after the suffix, or not at all. - * - *
  • In place of '0', the digits '1' through '9' may be used to - * indicate a rounding increment. - *
- * - *

Parsing - * - *

DecimalFormat parses all Unicode characters that represent - * decimal digits, as defined by u_charDigitValue(). In addition, - * DecimalFormat also recognizes as digits the ten consecutive - * characters starting with the localized zero digit defined in the - * DecimalFormatSymbols object. During formatting, the - * DecimalFormatSymbols-based digits are output. - * - *

During parsing, grouping separators are ignored. - * - *

For currency parsing, the formatter is able to parse every currency - * style formats no matter which style the formatter is constructed with. - * For example, a formatter instance gotten from - * NumberFormat.getInstance(ULocale, NumberFormat.CURRENCYSTYLE) can parse - * formats such as "USD1.00" and "3.00 US dollars". - * - *

If parse(UnicodeString&,Formattable&,ParsePosition&) - * fails to parse a string, it leaves the parse position unchanged. - * The convenience method parse(UnicodeString&,Formattable&,UErrorCode&) - * indicates parse failure by setting a failing - * UErrorCode. - * - *

Formatting - * - *

Formatting is guided by several parameters, all of which can be - * specified either using a pattern or using the API. The following - * description applies to formats that do not use scientific - * notation or significant digits. - * - *

  • If the number of actual integer digits exceeds the - * maximum integer digits, then only the least significant - * digits are shown. For example, 1997 is formatted as "97" if the - * maximum integer digits is set to 2. - * - *
  • If the number of actual integer digits is less than the - * minimum integer digits, then leading zeros are added. For - * example, 1997 is formatted as "01997" if the minimum integer digits - * is set to 5. - * - *
  • If the number of actual fraction digits exceeds the maximum - * fraction digits, then rounding is performed to the - * maximum fraction digits. For example, 0.125 is formatted as "0.12" - * if the maximum fraction digits is 2. This behavior can be changed - * by specifying a rounding increment and/or a rounding mode. - * - *
  • If the number of actual fraction digits is less than the - * minimum fraction digits, then trailing zeros are added. - * For example, 0.125 is formatted as "0.1250" if the minimum fraction - * digits is set to 4. - * - *
  • Trailing fractional zeros are not displayed if they occur - * j positions after the decimal, where j is less - * than the maximum fraction digits. For example, 0.10004 is - * formatted as "0.1" if the maximum fraction digits is four or less. - *
- * - *

Special Values - * - *

NaN is represented as a single character, typically - * \\uFFFD. This character is determined by the - * DecimalFormatSymbols object. This is the only value for which - * the prefixes and suffixes are not used. - * - *

Infinity is represented as a single character, typically - * \\u221E, with the positive or negative prefixes and suffixes - * applied. The infinity character is determined by the - * DecimalFormatSymbols object. - * - * Scientific Notation - * - *

Numbers in scientific notation are expressed as the product of a mantissa - * and a power of ten, for example, 1234 can be expressed as 1.234 x 103. The - * mantissa is typically in the half-open interval [1.0, 10.0) or sometimes [0.0, 1.0), - * but it need not be. DecimalFormat supports arbitrary mantissas. - * DecimalFormat can be instructed to use scientific - * notation through the API or through the pattern. In a pattern, the exponent - * character immediately followed by one or more digit characters indicates - * scientific notation. Example: "0.###E0" formats the number 1234 as - * "1.234E3". - * - *

    - *
  • The number of digit characters after the exponent character gives the - * minimum exponent digit count. There is no maximum. Negative exponents are - * formatted using the localized minus sign, not the prefix and suffix - * from the pattern. This allows patterns such as "0.###E0 m/s". To prefix - * positive exponents with a localized plus sign, specify '+' between the - * exponent and the digits: "0.###E+0" will produce formats "1E+1", "1E+0", - * "1E-1", etc. (In localized patterns, use the localized plus sign rather than - * '+'.) - * - *
  • The minimum number of integer digits is achieved by adjusting the - * exponent. Example: 0.00123 formatted with "00.###E0" yields "12.3E-4". This - * only happens if there is no maximum number of integer digits. If there is a - * maximum, then the minimum number of integer digits is fixed at one. - * - *
  • The maximum number of integer digits, if present, specifies the exponent - * grouping. The most common use of this is to generate engineering - * notation, in which the exponent is a multiple of three, e.g., - * "##0.###E0". The number 12345 is formatted using "##0.####E0" as "12.345E3". - * - *
  • When using scientific notation, the formatter controls the - * digit counts using significant digits logic. The maximum number of - * significant digits limits the total number of integer and fraction - * digits that will be shown in the mantissa; it does not affect - * parsing. For example, 12345 formatted with "##0.##E0" is "12.3E3". - * See the section on significant digits for more details. - * - *
  • The number of significant digits shown is determined as - * follows: If areSignificantDigitsUsed() returns false, then the - * minimum number of significant digits shown is one, and the maximum - * number of significant digits shown is the sum of the minimum - * integer and maximum fraction digits, and is - * unaffected by the maximum integer digits. If this sum is zero, - * then all significant digits are shown. If - * areSignificantDigitsUsed() returns true, then the significant digit - * counts are specified by getMinimumSignificantDigits() and - * getMaximumSignificantDigits(). In this case, the number of - * integer digits is fixed at one, and there is no exponent grouping. - * - *
  • Exponential patterns may not contain grouping separators. - *
- * - * Significant Digits - * - * DecimalFormat has two ways of controlling how many - * digits are shows: (a) significant digits counts, or (b) integer and - * fraction digit counts. Integer and fraction digit counts are - * described above. When a formatter is using significant digits - * counts, the number of integer and fraction digits is not specified - * directly, and the formatter settings for these counts are ignored. - * Instead, the formatter uses however many integer and fraction - * digits are required to display the specified number of significant - * digits. Examples: - * - * - * - * - * - * - * - *
Pattern - * Minimum significant digits - * Maximum significant digits - * Number - * Output of format() - *
\@\@\@ - * 3 - * 3 - * 12345 - * 12300 - *
\@\@\@ - * 3 - * 3 - * 0.12345 - * 0.123 - *
\@\@## - * 2 - * 4 - * 3.14159 - * 3.142 - *
\@\@## - * 2 - * 4 - * 1.23004 - * 1.23 - *
- * - *
    - *
  • Significant digit counts may be expressed using patterns that - * specify a minimum and maximum number of significant digits. These - * are indicated by the '@' and '#' - * characters. The minimum number of significant digits is the number - * of '@' characters. The maximum number of significant - * digits is the number of '@' characters plus the number - * of '#' characters following on the right. For - * example, the pattern "@@@" indicates exactly 3 - * significant digits. The pattern "@##" indicates from - * 1 to 3 significant digits. Trailing zero digits to the right of - * the decimal separator are suppressed after the minimum number of - * significant digits have been shown. For example, the pattern - * "@##" formats the number 0.1203 as - * "0.12". - * - *
  • If a pattern uses significant digits, it may not contain a - * decimal separator, nor the '0' pattern character. - * Patterns such as "@00" or "@.###" are - * disallowed. - * - *
  • Any number of '#' characters may be prepended to - * the left of the leftmost '@' character. These have no - * effect on the minimum and maximum significant digits counts, but - * may be used to position grouping separators. For example, - * "#,#@#" indicates a minimum of one significant digits, - * a maximum of two significant digits, and a grouping size of three. - * - *
  • In order to enable significant digits formatting, use a pattern - * containing the '@' pattern character. Alternatively, - * call setSignificantDigitsUsed(TRUE). - * - *
  • In order to disable significant digits formatting, use a - * pattern that does not contain the '@' pattern - * character. Alternatively, call setSignificantDigitsUsed(FALSE). - * - *
  • The number of significant digits has no effect on parsing. - * - *
  • Significant digits may be used together with exponential notation. Such - * patterns are equivalent to a normal exponential pattern with a minimum and - * maximum integer digit count of one, a minimum fraction digit count of - * getMinimumSignificantDigits() - 1, and a maximum fraction digit - * count of getMaximumSignificantDigits() - 1. For example, the - * pattern "@@###E0" is equivalent to "0.0###E0". - * - *
  • If significant digits are in use, then the integer and fraction - * digit counts, as set via the API, are ignored. If significant - * digits are not in use, then the significant digit counts, as set via - * the API, are ignored. - * - *
- * - *

Padding - * - *

DecimalFormat supports padding the result of - * format() to a specific width. Padding may be specified either - * through the API or through the pattern syntax. In a pattern the pad escape - * character, followed by a single pad character, causes padding to be parsed - * and formatted. The pad escape character is '*' in unlocalized patterns, and - * can be localized using DecimalFormatSymbols::setSymbol() with a - * DecimalFormatSymbols::kPadEscapeSymbol - * selector. For example, "$*x#,##0.00" formats 123 to - * "$xx123.00", and 1234 to "$1,234.00". - * - *

    - *
  • When padding is in effect, the width of the positive subpattern, - * including prefix and suffix, determines the format width. For example, in - * the pattern "* #0 o''clock", the format width is 10. - * - *
  • The width is counted in 16-bit code units (char16_ts). - * - *
  • Some parameters which usually do not matter have meaning when padding is - * used, because the pattern width is significant with padding. In the pattern - * "* ##,##,#,##0.##", the format width is 14. The initial characters "##,##," - * do not affect the grouping size or maximum integer digits, but they do affect - * the format width. - * - *
  • Padding may be inserted at one of four locations: before the prefix, - * after the prefix, before the suffix, or after the suffix. If padding is - * specified in any other location, applyPattern() - * sets a failing UErrorCode. If there is no prefix, - * before the prefix and after the prefix are equivalent, likewise for the - * suffix. - * - *
  • When specified in a pattern, the 32-bit code point immediately - * following the pad escape is the pad character. This may be any character, - * including a special pattern character. That is, the pad escape - * escapes the following character. If there is no character after - * the pad escape, then the pattern is illegal. - * - *
- * - *

Rounding - * - *

DecimalFormat supports rounding to a specific increment. For - * example, 1230 rounded to the nearest 50 is 1250. 1.234 rounded to the - * nearest 0.65 is 1.3. The rounding increment may be specified through the API - * or in a pattern. To specify a rounding increment in a pattern, include the - * increment in the pattern itself. "#,#50" specifies a rounding increment of - * 50. "#,##0.05" specifies a rounding increment of 0.05. - * - *

In the absence of an explicit rounding increment numbers are - * rounded to their formatted width. - * - *

    - *
  • Rounding only affects the string produced by formatting. It does - * not affect parsing or change any numerical values. - * - *
  • A rounding mode determines how values are rounded; see - * DecimalFormat::ERoundingMode. The default rounding mode is - * DecimalFormat::kRoundHalfEven. The rounding mode can only be set - * through the API; it can not be set with a pattern. - * - *
  • Some locales use rounding in their currency formats to reflect the - * smallest currency denomination. - * - *
  • In a pattern, digits '1' through '9' specify rounding, but otherwise - * behave identically to digit '0'. - *
- * - *

Synchronization - * - *

DecimalFormat objects are not synchronized. Multiple - * threads should not access one formatter concurrently. - * - *

Subclassing - * - *

User subclasses are not supported. While clients may write - * subclasses, such code will not necessarily work and will not be - * guaranteed to work stably from release to release. - */ -class U_I18N_API DecimalFormat : public NumberFormat { - public: - /** - * Pad position. - * @stable ICU 2.4 - */ - enum EPadPosition { - kPadBeforePrefix, kPadAfterPrefix, kPadBeforeSuffix, kPadAfterSuffix - }; - - /** - * Create a DecimalFormat using the default pattern and symbols - * for the default locale. This is a convenient way to obtain a - * DecimalFormat when internationalization is not the main concern. - *

- * To obtain standard formats for a given locale, use the factory methods - * on NumberFormat such as createInstance. These factories will - * return the most appropriate sub-class of NumberFormat for a given - * locale. - *

- * NOTE: New users are strongly encouraged to use - * #icu::number::NumberFormatter instead of DecimalFormat. - * @param status Output param set to success/failure code. If the - * pattern is invalid this will be set to a failure code. - * @stable ICU 2.0 - */ - DecimalFormat(UErrorCode& status); - - /** - * Create a DecimalFormat from the given pattern and the symbols - * for the default locale. This is a convenient way to obtain a - * DecimalFormat when internationalization is not the main concern. - *

- * To obtain standard formats for a given locale, use the factory methods - * on NumberFormat such as createInstance. These factories will - * return the most appropriate sub-class of NumberFormat for a given - * locale. - *

- * NOTE: New users are strongly encouraged to use - * #icu::number::NumberFormatter instead of DecimalFormat. - * @param pattern A non-localized pattern string. - * @param status Output param set to success/failure code. If the - * pattern is invalid this will be set to a failure code. - * @stable ICU 2.0 - */ - DecimalFormat(const UnicodeString& pattern, UErrorCode& status); - - /** - * Create a DecimalFormat from the given pattern and symbols. - * Use this constructor when you need to completely customize the - * behavior of the format. - *

- * To obtain standard formats for a given - * locale, use the factory methods on NumberFormat such as - * createInstance or createCurrencyInstance. If you need only minor adjustments - * to a standard format, you can modify the format returned by - * a NumberFormat factory method. - *

- * NOTE: New users are strongly encouraged to use - * #icu::number::NumberFormatter instead of DecimalFormat. - * - * @param pattern a non-localized pattern string - * @param symbolsToAdopt the set of symbols to be used. The caller should not - * delete this object after making this call. - * @param status Output param set to success/failure code. If the - * pattern is invalid this will be set to a failure code. - * @stable ICU 2.0 - */ - DecimalFormat(const UnicodeString& pattern, DecimalFormatSymbols* symbolsToAdopt, UErrorCode& status); - -#ifndef U_HIDE_INTERNAL_API - - /** - * This API is for ICU use only. - * Create a DecimalFormat from the given pattern, symbols, and style. - * - * @param pattern a non-localized pattern string - * @param symbolsToAdopt the set of symbols to be used. The caller should not - * delete this object after making this call. - * @param style style of decimal format - * @param status Output param set to success/failure code. If the - * pattern is invalid this will be set to a failure code. - * @internal - */ - DecimalFormat(const UnicodeString& pattern, DecimalFormatSymbols* symbolsToAdopt, - UNumberFormatStyle style, UErrorCode& status); - -#if UCONFIG_HAVE_PARSEALLINPUT - - /** - * @internal - */ - void setParseAllInput(UNumberFormatAttributeValue value); - -#endif - -#endif /* U_HIDE_INTERNAL_API */ - - private: - - /** - * Internal constructor for DecimalFormat; sets up internal fields. All public constructors should - * call this constructor. - */ - DecimalFormat(const DecimalFormatSymbols* symbolsToAdopt, UErrorCode& status); - - public: - - /** - * Set an integer attribute on this DecimalFormat. - * May return U_UNSUPPORTED_ERROR if this instance does not support - * the specified attribute. - * @param attr the attribute to set - * @param newValue new value - * @param status the error type - * @return *this - for chaining (example: format.setAttribute(...).setAttribute(...) ) - * @stable ICU 51 - */ - virtual DecimalFormat& setAttribute(UNumberFormatAttribute attr, int32_t newValue, UErrorCode& status); - - /** - * Get an integer - * May return U_UNSUPPORTED_ERROR if this instance does not support - * the specified attribute. - * @param attr the attribute to set - * @param status the error type - * @return the attribute value. Undefined if there is an error. - * @stable ICU 51 - */ - virtual int32_t getAttribute(UNumberFormatAttribute attr, UErrorCode& status) const; - - - /** - * Set whether or not grouping will be used in this format. - * @param newValue True, grouping will be used in this format. - * @see getGroupingUsed - * @stable ICU 53 - */ - void setGroupingUsed(UBool newValue) U_OVERRIDE; - - /** - * Sets whether or not numbers should be parsed as integers only. - * @param value set True, this format will parse numbers as integers - * only. - * @see isParseIntegerOnly - * @stable ICU 53 - */ - void setParseIntegerOnly(UBool value) U_OVERRIDE; - - /** - * Sets whether lenient parsing should be enabled (it is off by default). - * - * @param enable \c TRUE if lenient parsing should be used, - * \c FALSE otherwise. - * @stable ICU 4.8 - */ - void setLenient(UBool enable) U_OVERRIDE; - - /** - * Create a DecimalFormat from the given pattern and symbols. - * Use this constructor when you need to completely customize the - * behavior of the format. - *

- * To obtain standard formats for a given - * locale, use the factory methods on NumberFormat such as - * createInstance or createCurrencyInstance. If you need only minor adjustments - * to a standard format, you can modify the format returned by - * a NumberFormat factory method. - *

- * NOTE: New users are strongly encouraged to use - * #icu::number::NumberFormatter instead of DecimalFormat. - * - * @param pattern a non-localized pattern string - * @param symbolsToAdopt the set of symbols to be used. The caller should not - * delete this object after making this call. - * @param parseError Output param to receive errors occurred during parsing - * @param status Output param set to success/failure code. If the - * pattern is invalid this will be set to a failure code. - * @stable ICU 2.0 - */ - DecimalFormat(const UnicodeString& pattern, DecimalFormatSymbols* symbolsToAdopt, - UParseError& parseError, UErrorCode& status); - - /** - * Create a DecimalFormat from the given pattern and symbols. - * Use this constructor when you need to completely customize the - * behavior of the format. - *

- * To obtain standard formats for a given - * locale, use the factory methods on NumberFormat such as - * createInstance or createCurrencyInstance. If you need only minor adjustments - * to a standard format, you can modify the format returned by - * a NumberFormat factory method. - *

- * NOTE: New users are strongly encouraged to use - * #icu::number::NumberFormatter instead of DecimalFormat. - * - * @param pattern a non-localized pattern string - * @param symbols the set of symbols to be used - * @param status Output param set to success/failure code. If the - * pattern is invalid this will be set to a failure code. - * @stable ICU 2.0 - */ - DecimalFormat(const UnicodeString& pattern, const DecimalFormatSymbols& symbols, UErrorCode& status); - - /** - * Copy constructor. - * - * @param source the DecimalFormat object to be copied from. - * @stable ICU 2.0 - */ - DecimalFormat(const DecimalFormat& source); - - /** - * Assignment operator. - * - * @param rhs the DecimalFormat object to be copied. - * @stable ICU 2.0 - */ - DecimalFormat& operator=(const DecimalFormat& rhs); - - /** - * Destructor. - * @stable ICU 2.0 - */ - ~DecimalFormat() U_OVERRIDE; - - /** - * Clone this Format object polymorphically. The caller owns the - * result and should delete it when done. - * - * @return a polymorphic copy of this DecimalFormat. - * @stable ICU 2.0 - */ - Format* clone(void) const U_OVERRIDE; - - /** - * Return true if the given Format objects are semantically equal. - * Objects of different subclasses are considered unequal. - * - * @param other the object to be compared with. - * @return true if the given Format objects are semantically equal. - * @stable ICU 2.0 - */ - UBool operator==(const Format& other) const U_OVERRIDE; - - - using NumberFormat::format; - - /** - * Format a double or long number using base-10 representation. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - UnicodeString& format(double number, UnicodeString& appendTo, FieldPosition& pos) const U_OVERRIDE; - -#ifndef U_HIDE_INTERNAL_API - /** - * Format a double or long number using base-10 representation. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status - * @return Reference to 'appendTo' parameter. - * @internal - */ - UnicodeString& format(double number, UnicodeString& appendTo, FieldPosition& pos, - UErrorCode& status) const U_OVERRIDE; -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Format a double or long number using base-10 representation. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. - * Can be NULL. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - UnicodeString& format(double number, UnicodeString& appendTo, FieldPositionIterator* posIter, - UErrorCode& status) const U_OVERRIDE; - - /** - * Format a long number using base-10 representation. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - UnicodeString& format(int32_t number, UnicodeString& appendTo, FieldPosition& pos) const U_OVERRIDE; - -#ifndef U_HIDE_INTERNAL_API - /** - * Format a long number using base-10 representation. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @internal - */ - UnicodeString& format(int32_t number, UnicodeString& appendTo, FieldPosition& pos, - UErrorCode& status) const U_OVERRIDE; -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Format a long number using base-10 representation. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. - * Can be NULL. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - UnicodeString& format(int32_t number, UnicodeString& appendTo, FieldPositionIterator* posIter, - UErrorCode& status) const U_OVERRIDE; - - /** - * Format an int64 number using base-10 representation. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.8 - */ - UnicodeString& format(int64_t number, UnicodeString& appendTo, FieldPosition& pos) const U_OVERRIDE; - -#ifndef U_HIDE_INTERNAL_API - /** - * Format an int64 number using base-10 representation. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @internal - */ - UnicodeString& format(int64_t number, UnicodeString& appendTo, FieldPosition& pos, - UErrorCode& status) const U_OVERRIDE; -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Format an int64 number using base-10 representation. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. - * Can be NULL. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - UnicodeString& format(int64_t number, UnicodeString& appendTo, FieldPositionIterator* posIter, - UErrorCode& status) const U_OVERRIDE; - - /** - * Format a decimal number. - * The syntax of the unformatted number is a "numeric string" - * as defined in the Decimal Arithmetic Specification, available at - * http://speleotrove.com/decimal - * - * @param number The unformatted number, as a string. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. - * Can be NULL. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - UnicodeString& format(StringPiece number, UnicodeString& appendTo, FieldPositionIterator* posIter, - UErrorCode& status) const U_OVERRIDE; - -#ifndef U_HIDE_INTERNAL_API - - /** - * Format a decimal number. - * The number is a DecimalQuantity wrapper onto a floating point decimal number. - * The default implementation in NumberFormat converts the decimal number - * to a double and formats that. - * - * @param number The number, a DecimalQuantity format Decimal Floating Point. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @internal - */ - UnicodeString& format(const number::impl::DecimalQuantity& number, UnicodeString& appendTo, - FieldPositionIterator* posIter, UErrorCode& status) const U_OVERRIDE; - - /** - * Format a decimal number. - * The number is a DecimalQuantity wrapper onto a floating point decimal number. - * The default implementation in NumberFormat converts the decimal number - * to a double and formats that. - * - * @param number The number, a DecimalQuantity format Decimal Floating Point. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @internal - */ - UnicodeString& format(const number::impl::DecimalQuantity& number, UnicodeString& appendTo, - FieldPosition& pos, UErrorCode& status) const U_OVERRIDE; - -#endif // U_HIDE_INTERNAL_API - - using NumberFormat::parse; - - /** - * Parse the given string using this object's choices. The method - * does string comparisons to try to find an optimal match. - * If no object can be parsed, index is unchanged, and NULL is - * returned. The result is returned as the most parsimonious - * type of Formattable that will accommodate all of the - * necessary precision. For example, if the result is exactly 12, - * it will be returned as a long. However, if it is 1.5, it will - * be returned as a double. - * - * @param text The text to be parsed. - * @param result Formattable to be set to the parse result. - * If parse fails, return contents are undefined. - * @param parsePosition The position to start parsing at on input. - * On output, moved to after the last successfully - * parse character. On parse failure, does not change. - * @see Formattable - * @stable ICU 2.0 - */ - void parse(const UnicodeString& text, Formattable& result, - ParsePosition& parsePosition) const U_OVERRIDE; - - /** - * Parses text from the given string as a currency amount. Unlike - * the parse() method, this method will attempt to parse a generic - * currency name, searching for a match of this object's locale's - * currency display names, or for a 3-letter ISO currency code. - * This method will fail if this format is not a currency format, - * that is, if it does not contain the currency pattern symbol - * (U+00A4) in its prefix or suffix. - * - * @param text the string to parse - * @param pos input-output position; on input, the position within text - * to match; must have 0 <= pos.getIndex() < text.length(); - * on output, the position after the last matched character. - * If the parse fails, the position in unchanged upon output. - * @return if parse succeeds, a pointer to a newly-created CurrencyAmount - * object (owned by the caller) containing information about - * the parsed currency; if parse fails, this is NULL. - * @stable ICU 49 - */ - CurrencyAmount* parseCurrency(const UnicodeString& text, ParsePosition& pos) const U_OVERRIDE; - - /** - * Returns the decimal format symbols, which is generally not changed - * by the programmer or user. - * @return desired DecimalFormatSymbols - * @see DecimalFormatSymbols - * @stable ICU 2.0 - */ - virtual const DecimalFormatSymbols* getDecimalFormatSymbols(void) const; - - /** - * Sets the decimal format symbols, which is generally not changed - * by the programmer or user. - * @param symbolsToAdopt DecimalFormatSymbols to be adopted. - * @stable ICU 2.0 - */ - virtual void adoptDecimalFormatSymbols(DecimalFormatSymbols* symbolsToAdopt); - - /** - * Sets the decimal format symbols, which is generally not changed - * by the programmer or user. - * @param symbols DecimalFormatSymbols. - * @stable ICU 2.0 - */ - virtual void setDecimalFormatSymbols(const DecimalFormatSymbols& symbols); - - - /** - * Returns the currency plural format information, - * which is generally not changed by the programmer or user. - * @return desired CurrencyPluralInfo - * @stable ICU 4.2 - */ - virtual const CurrencyPluralInfo* getCurrencyPluralInfo(void) const; - - /** - * Sets the currency plural format information, - * which is generally not changed by the programmer or user. - * @param toAdopt CurrencyPluralInfo to be adopted. - * @stable ICU 4.2 - */ - virtual void adoptCurrencyPluralInfo(CurrencyPluralInfo* toAdopt); - - /** - * Sets the currency plural format information, - * which is generally not changed by the programmer or user. - * @param info Currency Plural Info. - * @stable ICU 4.2 - */ - virtual void setCurrencyPluralInfo(const CurrencyPluralInfo& info); - - - /** - * Get the positive prefix. - * - * @param result Output param which will receive the positive prefix. - * @return A reference to 'result'. - * Examples: +123, $123, sFr123 - * @stable ICU 2.0 - */ - UnicodeString& getPositivePrefix(UnicodeString& result) const; - - /** - * Set the positive prefix. - * - * @param newValue the new value of the the positive prefix to be set. - * Examples: +123, $123, sFr123 - * @stable ICU 2.0 - */ - virtual void setPositivePrefix(const UnicodeString& newValue); - - /** - * Get the negative prefix. - * - * @param result Output param which will receive the negative prefix. - * @return A reference to 'result'. - * Examples: -123, ($123) (with negative suffix), sFr-123 - * @stable ICU 2.0 - */ - UnicodeString& getNegativePrefix(UnicodeString& result) const; - - /** - * Set the negative prefix. - * - * @param newValue the new value of the the negative prefix to be set. - * Examples: -123, ($123) (with negative suffix), sFr-123 - * @stable ICU 2.0 - */ - virtual void setNegativePrefix(const UnicodeString& newValue); - - /** - * Get the positive suffix. - * - * @param result Output param which will receive the positive suffix. - * @return A reference to 'result'. - * Example: 123% - * @stable ICU 2.0 - */ - UnicodeString& getPositiveSuffix(UnicodeString& result) const; - - /** - * Set the positive suffix. - * - * @param newValue the new value of the positive suffix to be set. - * Example: 123% - * @stable ICU 2.0 - */ - virtual void setPositiveSuffix(const UnicodeString& newValue); - - /** - * Get the negative suffix. - * - * @param result Output param which will receive the negative suffix. - * @return A reference to 'result'. - * Examples: -123%, ($123) (with positive suffixes) - * @stable ICU 2.0 - */ - UnicodeString& getNegativeSuffix(UnicodeString& result) const; - - /** - * Set the negative suffix. - * - * @param newValue the new value of the negative suffix to be set. - * Examples: 123% - * @stable ICU 2.0 - */ - virtual void setNegativeSuffix(const UnicodeString& newValue); - -#ifndef U_HIDE_DRAFT_API - /** - * Whether to show the plus sign on positive (non-negative) numbers; for example, "+12" - * - * For more control over sign display, use NumberFormatter. - * - * @return Whether the sign is shown on positive numbers and zero. - * @draft ICU 64 - */ - UBool isSignAlwaysShown() const; - - /** - * Set whether to show the plus sign on positive (non-negative) numbers; for example, "+12". - * - * For more control over sign display, use NumberFormatter. - * - * @param value true to always show a sign; false to hide the sign on positive numbers and zero. - * @draft ICU 64 - */ - void setSignAlwaysShown(UBool value); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Get the multiplier for use in percent, permill, etc. - * For a percentage, set the suffixes to have "%" and the multiplier to be 100. - * (For Arabic, use arabic percent symbol). - * For a permill, set the suffixes to have "\\u2031" and the multiplier to be 1000. - * - * The number may also be multiplied by a power of ten; see getMultiplierScale(). - * - * @return the multiplier for use in percent, permill, etc. - * Examples: with 100, 1.23 -> "123", and "123" -> 1.23 - * @stable ICU 2.0 - */ - int32_t getMultiplier(void) const; - - /** - * Set the multiplier for use in percent, permill, etc. - * For a percentage, set the suffixes to have "%" and the multiplier to be 100. - * (For Arabic, use arabic percent symbol). - * For a permill, set the suffixes to have "\\u2031" and the multiplier to be 1000. - * - * This method only supports integer multipliers. To multiply by a non-integer, pair this - * method with setMultiplierScale(). - * - * @param newValue the new value of the multiplier for use in percent, permill, etc. - * Examples: with 100, 1.23 -> "123", and "123" -> 1.23 - * @stable ICU 2.0 - */ - virtual void setMultiplier(int32_t newValue); - -#ifndef U_HIDE_DRAFT_API - /** - * Gets the power of ten by which number should be multiplied before formatting, which - * can be combined with setMultiplier() to multiply by any arbitrary decimal value. - * - * A multiplier scale of 2 corresponds to multiplication by 100, and a multiplier scale - * of -2 corresponds to multiplication by 0.01. - * - * This method is analogous to UNUM_SCALE in getAttribute. - * - * @return the current value of the power-of-ten multiplier. - * @draft ICU 62 - */ - int32_t getMultiplierScale(void) const; - - /** - * Sets a power of ten by which number should be multiplied before formatting, which - * can be combined with setMultiplier() to multiply by any arbitrary decimal value. - * - * A multiplier scale of 2 corresponds to multiplication by 100, and a multiplier scale - * of -2 corresponds to multiplication by 0.01. - * - * For example, to multiply numbers by 0.5 before formatting, you can do: - * - *

-     * df.setMultiplier(5);
-     * df.setMultiplierScale(-1);
-     * 
- * - * This method is analogous to UNUM_SCALE in setAttribute. - * - * @param newValue the new value of the power-of-ten multiplier. - * @draft ICU 62 - */ - void setMultiplierScale(int32_t newValue); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Get the rounding increment. - * @return A positive rounding increment, or 0.0 if a custom rounding - * increment is not in effect. - * @see #setRoundingIncrement - * @see #getRoundingMode - * @see #setRoundingMode - * @stable ICU 2.0 - */ - virtual double getRoundingIncrement(void) const; - - /** - * Set the rounding increment. In the absence of a rounding increment, - * numbers will be rounded to the number of digits displayed. - * @param newValue A positive rounding increment, or 0.0 to - * use the default rounding increment. - * Negative increments are equivalent to 0.0. - * @see #getRoundingIncrement - * @see #getRoundingMode - * @see #setRoundingMode - * @stable ICU 2.0 - */ - virtual void setRoundingIncrement(double newValue); - - /** - * Get the rounding mode. - * @return A rounding mode - * @see #setRoundingIncrement - * @see #getRoundingIncrement - * @see #setRoundingMode - * @stable ICU 2.0 - */ - virtual ERoundingMode getRoundingMode(void) const U_OVERRIDE; - - /** - * Set the rounding mode. - * @param roundingMode A rounding mode - * @see #setRoundingIncrement - * @see #getRoundingIncrement - * @see #getRoundingMode - * @stable ICU 2.0 - */ - virtual void setRoundingMode(ERoundingMode roundingMode) U_OVERRIDE; - - /** - * Get the width to which the output of format() is padded. - * The width is counted in 16-bit code units. - * @return the format width, or zero if no padding is in effect - * @see #setFormatWidth - * @see #getPadCharacterString - * @see #setPadCharacter - * @see #getPadPosition - * @see #setPadPosition - * @stable ICU 2.0 - */ - virtual int32_t getFormatWidth(void) const; - - /** - * Set the width to which the output of format() is padded. - * The width is counted in 16-bit code units. - * This method also controls whether padding is enabled. - * @param width the width to which to pad the result of - * format(), or zero to disable padding. A negative - * width is equivalent to 0. - * @see #getFormatWidth - * @see #getPadCharacterString - * @see #setPadCharacter - * @see #getPadPosition - * @see #setPadPosition - * @stable ICU 2.0 - */ - virtual void setFormatWidth(int32_t width); - - /** - * Get the pad character used to pad to the format width. The - * default is ' '. - * @return a string containing the pad character. This will always - * have a length of one 32-bit code point. - * @see #setFormatWidth - * @see #getFormatWidth - * @see #setPadCharacter - * @see #getPadPosition - * @see #setPadPosition - * @stable ICU 2.0 - */ - virtual UnicodeString getPadCharacterString() const; - - /** - * Set the character used to pad to the format width. If padding - * is not enabled, then this will take effect if padding is later - * enabled. - * @param padChar a string containing the pad character. If the string - * has length 0, then the pad character is set to ' '. Otherwise - * padChar.char32At(0) will be used as the pad character. - * @see #setFormatWidth - * @see #getFormatWidth - * @see #getPadCharacterString - * @see #getPadPosition - * @see #setPadPosition - * @stable ICU 2.0 - */ - virtual void setPadCharacter(const UnicodeString& padChar); - - /** - * Get the position at which padding will take place. This is the location - * at which padding will be inserted if the result of format() - * is shorter than the format width. - * @return the pad position, one of kPadBeforePrefix, - * kPadAfterPrefix, kPadBeforeSuffix, or - * kPadAfterSuffix. - * @see #setFormatWidth - * @see #getFormatWidth - * @see #setPadCharacter - * @see #getPadCharacterString - * @see #setPadPosition - * @see #EPadPosition - * @stable ICU 2.0 - */ - virtual EPadPosition getPadPosition(void) const; - - /** - * Set the position at which padding will take place. This is the location - * at which padding will be inserted if the result of format() - * is shorter than the format width. This has no effect unless padding is - * enabled. - * @param padPos the pad position, one of kPadBeforePrefix, - * kPadAfterPrefix, kPadBeforeSuffix, or - * kPadAfterSuffix. - * @see #setFormatWidth - * @see #getFormatWidth - * @see #setPadCharacter - * @see #getPadCharacterString - * @see #getPadPosition - * @see #EPadPosition - * @stable ICU 2.0 - */ - virtual void setPadPosition(EPadPosition padPos); - - /** - * Return whether or not scientific notation is used. - * @return TRUE if this object formats and parses scientific notation - * @see #setScientificNotation - * @see #getMinimumExponentDigits - * @see #setMinimumExponentDigits - * @see #isExponentSignAlwaysShown - * @see #setExponentSignAlwaysShown - * @stable ICU 2.0 - */ - virtual UBool isScientificNotation(void) const; - - /** - * Set whether or not scientific notation is used. When scientific notation - * is used, the effective maximum number of integer digits is <= 8. If the - * maximum number of integer digits is set to more than 8, the effective - * maximum will be 1. This allows this call to generate a 'default' scientific - * number format without additional changes. - * @param useScientific TRUE if this object formats and parses scientific - * notation - * @see #isScientificNotation - * @see #getMinimumExponentDigits - * @see #setMinimumExponentDigits - * @see #isExponentSignAlwaysShown - * @see #setExponentSignAlwaysShown - * @stable ICU 2.0 - */ - virtual void setScientificNotation(UBool useScientific); - - /** - * Return the minimum exponent digits that will be shown. - * @return the minimum exponent digits that will be shown - * @see #setScientificNotation - * @see #isScientificNotation - * @see #setMinimumExponentDigits - * @see #isExponentSignAlwaysShown - * @see #setExponentSignAlwaysShown - * @stable ICU 2.0 - */ - virtual int8_t getMinimumExponentDigits(void) const; - - /** - * Set the minimum exponent digits that will be shown. This has no - * effect unless scientific notation is in use. - * @param minExpDig a value >= 1 indicating the fewest exponent digits - * that will be shown. Values less than 1 will be treated as 1. - * @see #setScientificNotation - * @see #isScientificNotation - * @see #getMinimumExponentDigits - * @see #isExponentSignAlwaysShown - * @see #setExponentSignAlwaysShown - * @stable ICU 2.0 - */ - virtual void setMinimumExponentDigits(int8_t minExpDig); - - /** - * Return whether the exponent sign is always shown. - * @return TRUE if the exponent is always prefixed with either the - * localized minus sign or the localized plus sign, false if only negative - * exponents are prefixed with the localized minus sign. - * @see #setScientificNotation - * @see #isScientificNotation - * @see #setMinimumExponentDigits - * @see #getMinimumExponentDigits - * @see #setExponentSignAlwaysShown - * @stable ICU 2.0 - */ - virtual UBool isExponentSignAlwaysShown(void) const; - - /** - * Set whether the exponent sign is always shown. This has no effect - * unless scientific notation is in use. - * @param expSignAlways TRUE if the exponent is always prefixed with either - * the localized minus sign or the localized plus sign, false if only - * negative exponents are prefixed with the localized minus sign. - * @see #setScientificNotation - * @see #isScientificNotation - * @see #setMinimumExponentDigits - * @see #getMinimumExponentDigits - * @see #isExponentSignAlwaysShown - * @stable ICU 2.0 - */ - virtual void setExponentSignAlwaysShown(UBool expSignAlways); - - /** - * Return the grouping size. Grouping size is the number of digits between - * grouping separators in the integer portion of a number. For example, - * in the number "123,456.78", the grouping size is 3. - * - * @return the grouping size. - * @see setGroupingSize - * @see NumberFormat::isGroupingUsed - * @see DecimalFormatSymbols::getGroupingSeparator - * @stable ICU 2.0 - */ - int32_t getGroupingSize(void) const; - - /** - * Set the grouping size. Grouping size is the number of digits between - * grouping separators in the integer portion of a number. For example, - * in the number "123,456.78", the grouping size is 3. - * - * @param newValue the new value of the grouping size. - * @see getGroupingSize - * @see NumberFormat::setGroupingUsed - * @see DecimalFormatSymbols::setGroupingSeparator - * @stable ICU 2.0 - */ - virtual void setGroupingSize(int32_t newValue); - - /** - * Return the secondary grouping size. In some locales one - * grouping interval is used for the least significant integer - * digits (the primary grouping size), and another is used for all - * others (the secondary grouping size). A formatter supporting a - * secondary grouping size will return a positive integer unequal - * to the primary grouping size returned by - * getGroupingSize(). For example, if the primary - * grouping size is 4, and the secondary grouping size is 2, then - * the number 123456789 formats as "1,23,45,6789", and the pattern - * appears as "#,##,###0". - * @return the secondary grouping size, or a value less than - * one if there is none - * @see setSecondaryGroupingSize - * @see NumberFormat::isGroupingUsed - * @see DecimalFormatSymbols::getGroupingSeparator - * @stable ICU 2.4 - */ - int32_t getSecondaryGroupingSize(void) const; - - /** - * Set the secondary grouping size. If set to a value less than 1, - * then secondary grouping is turned off, and the primary grouping - * size is used for all intervals, not just the least significant. - * - * @param newValue the new value of the secondary grouping size. - * @see getSecondaryGroupingSize - * @see NumberFormat#setGroupingUsed - * @see DecimalFormatSymbols::setGroupingSeparator - * @stable ICU 2.4 - */ - virtual void setSecondaryGroupingSize(int32_t newValue); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns the minimum number of grouping digits. - * Grouping separators are output if there are at least this many - * digits to the left of the first (rightmost) grouping separator, - * that is, there are at least (minimum grouping + grouping size) integer digits. - * (Subject to isGroupingUsed().) - * - * For example, if this value is 2, and the grouping size is 3, then - * 9999 -> "9999" and 10000 -> "10,000" - * - * The default value for this attribute is 0. - * A value of 1, 0, or lower, means that the use of grouping separators - * only depends on the grouping size (and on isGroupingUsed()). - * - * NOTE: The CLDR data is used in NumberFormatter but not in DecimalFormat. - * This is for backwards compatibility reasons. - * - * For more control over grouping strategies, use NumberFormatter. - * - * @see setMinimumGroupingDigits - * @see getGroupingSize - * @draft ICU 64 - */ - int32_t getMinimumGroupingDigits() const; - - /** - * Sets the minimum grouping digits. Setting to a value less than or - * equal to 1 turns off minimum grouping digits. - * - * For more control over grouping strategies, use NumberFormatter. - * - * @param newValue the new value of minimum grouping digits. - * @see getMinimumGroupingDigits - * @draft ICU 64 - */ - void setMinimumGroupingDigits(int32_t newValue); -#endif /* U_HIDE_DRAFT_API */ - - - /** - * Allows you to get the behavior of the decimal separator with integers. - * (The decimal separator will always appear with decimals.) - * - * @return TRUE if the decimal separator always appear with decimals. - * Example: Decimal ON: 12345 -> 12345.; OFF: 12345 -> 12345 - * @stable ICU 2.0 - */ - UBool isDecimalSeparatorAlwaysShown(void) const; - - /** - * Allows you to set the behavior of the decimal separator with integers. - * (The decimal separator will always appear with decimals.) - * - * @param newValue set TRUE if the decimal separator will always appear with decimals. - * Example: Decimal ON: 12345 -> 12345.; OFF: 12345 -> 12345 - * @stable ICU 2.0 - */ - virtual void setDecimalSeparatorAlwaysShown(UBool newValue); - - /** - * Allows you to get the parse behavior of the pattern decimal mark. - * - * @return TRUE if input must contain a match to decimal mark in pattern - * @stable ICU 54 - */ - UBool isDecimalPatternMatchRequired(void) const; - - /** - * Allows you to set the parse behavior of the pattern decimal mark. - * - * if TRUE, the input must have a decimal mark if one was specified in the pattern. When - * FALSE the decimal mark may be omitted from the input. - * - * @param newValue set TRUE if input must contain a match to decimal mark in pattern - * @stable ICU 54 - */ - virtual void setDecimalPatternMatchRequired(UBool newValue); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns whether to ignore exponents when parsing. - * - * @return Whether to ignore exponents when parsing. - * @see #setParseNoExponent - * @draft ICU 64 - */ - UBool isParseNoExponent() const; - - /** - * Specifies whether to stop parsing when an exponent separator is encountered. For - * example, parses "123E4" to 123 (with parse position 3) instead of 1230000 (with parse position - * 5). - * - * @param value true to prevent exponents from being parsed; false to allow them to be parsed. - * @draft ICU 64 - */ - void setParseNoExponent(UBool value); - - /** - * Returns whether parsing is sensitive to case (lowercase/uppercase). - * - * @return Whether parsing is case-sensitive. - * @see #setParseCaseSensitive - * @draft ICU 64 - */ - UBool isParseCaseSensitive() const; - - /** - * Whether to pay attention to case when parsing; default is to ignore case (perform - * case-folding). For example, "A" == "a" in case-insensitive but not case-sensitive mode. - * - * Currency symbols are never case-folded. For example, "us$1.00" will not parse in case-insensitive - * mode, even though "US$1.00" parses. - * - * @param value true to enable case-sensitive parsing (the default); false to force - * case-sensitive parsing behavior. - * @draft ICU 64 - */ - void setParseCaseSensitive(UBool value); - - /** - * Returns whether truncation of high-order integer digits should result in an error. - * By default, setMaximumIntegerDigits truncates high-order digits silently. - * - * @return Whether an error code is set if high-order digits are truncated. - * @see setFormatFailIfMoreThanMaxDigits - * @draft ICU 64 - */ - UBool isFormatFailIfMoreThanMaxDigits() const; - - /** - * Sets whether truncation of high-order integer digits should result in an error. - * By default, setMaximumIntegerDigits truncates high-order digits silently. - * - * @param value Whether to set an error code if high-order digits are truncated. - * @draft ICU 64 - */ - void setFormatFailIfMoreThanMaxDigits(UBool value); -#endif /* U_HIDE_DRAFT_API */ - - - /** - * Synthesizes a pattern string that represents the current state - * of this Format object. - * - * @param result Output param which will receive the pattern. - * Previous contents are deleted. - * @return A reference to 'result'. - * @see applyPattern - * @stable ICU 2.0 - */ - virtual UnicodeString& toPattern(UnicodeString& result) const; - - /** - * Synthesizes a localized pattern string that represents the current - * state of this Format object. - * - * @param result Output param which will receive the localized pattern. - * Previous contents are deleted. - * @return A reference to 'result'. - * @see applyPattern - * @stable ICU 2.0 - */ - virtual UnicodeString& toLocalizedPattern(UnicodeString& result) const; - - /** - * Apply the given pattern to this Format object. A pattern is a - * short-hand specification for the various formatting properties. - * These properties can also be changed individually through the - * various setter methods. - *

- * There is no limit to integer digits are set - * by this routine, since that is the typical end-user desire; - * use setMaximumInteger if you want to set a real value. - * For negative numbers, use a second pattern, separated by a semicolon - *

-     * .      Example "#,#00.0#" -> 1,234.56
-     * 
- * This means a minimum of 2 integer digits, 1 fraction digit, and - * a maximum of 2 fraction digits. - *
-     * .      Example: "#,#00.0#;(#,#00.0#)" for negatives in parantheses.
-     * 
- * In negative patterns, the minimum and maximum counts are ignored; - * these are presumed to be set in the positive pattern. - * - * @param pattern The pattern to be applied. - * @param parseError Struct to recieve information on position - * of error if an error is encountered - * @param status Output param set to success/failure code on - * exit. If the pattern is invalid, this will be - * set to a failure result. - * @stable ICU 2.0 - */ - virtual void applyPattern(const UnicodeString& pattern, UParseError& parseError, UErrorCode& status); - - /** - * Sets the pattern. - * @param pattern The pattern to be applied. - * @param status Output param set to success/failure code on - * exit. If the pattern is invalid, this will be - * set to a failure result. - * @stable ICU 2.0 - */ - virtual void applyPattern(const UnicodeString& pattern, UErrorCode& status); - - /** - * Apply the given pattern to this Format object. The pattern - * is assumed to be in a localized notation. A pattern is a - * short-hand specification for the various formatting properties. - * These properties can also be changed individually through the - * various setter methods. - *

- * There is no limit to integer digits are set - * by this routine, since that is the typical end-user desire; - * use setMaximumInteger if you want to set a real value. - * For negative numbers, use a second pattern, separated by a semicolon - *

-     * .      Example "#,#00.0#" -> 1,234.56
-     * 
- * This means a minimum of 2 integer digits, 1 fraction digit, and - * a maximum of 2 fraction digits. - * - * Example: "#,#00.0#;(#,#00.0#)" for negatives in parantheses. - * - * In negative patterns, the minimum and maximum counts are ignored; - * these are presumed to be set in the positive pattern. - * - * @param pattern The localized pattern to be applied. - * @param parseError Struct to recieve information on position - * of error if an error is encountered - * @param status Output param set to success/failure code on - * exit. If the pattern is invalid, this will be - * set to a failure result. - * @stable ICU 2.0 - */ - virtual void applyLocalizedPattern(const UnicodeString& pattern, UParseError& parseError, - UErrorCode& status); - - /** - * Apply the given pattern to this Format object. - * - * @param pattern The localized pattern to be applied. - * @param status Output param set to success/failure code on - * exit. If the pattern is invalid, this will be - * set to a failure result. - * @stable ICU 2.0 - */ - virtual void applyLocalizedPattern(const UnicodeString& pattern, UErrorCode& status); - - - /** - * Sets the maximum number of digits allowed in the integer portion of a - * number. This override limits the integer digit count to 309. - * - * @param newValue the new value of the maximum number of digits - * allowed in the integer portion of a number. - * @see NumberFormat#setMaximumIntegerDigits - * @stable ICU 2.0 - */ - void setMaximumIntegerDigits(int32_t newValue) U_OVERRIDE; - - /** - * Sets the minimum number of digits allowed in the integer portion of a - * number. This override limits the integer digit count to 309. - * - * @param newValue the new value of the minimum number of digits - * allowed in the integer portion of a number. - * @see NumberFormat#setMinimumIntegerDigits - * @stable ICU 2.0 - */ - void setMinimumIntegerDigits(int32_t newValue) U_OVERRIDE; - - /** - * Sets the maximum number of digits allowed in the fraction portion of a - * number. This override limits the fraction digit count to 340. - * - * @param newValue the new value of the maximum number of digits - * allowed in the fraction portion of a number. - * @see NumberFormat#setMaximumFractionDigits - * @stable ICU 2.0 - */ - void setMaximumFractionDigits(int32_t newValue) U_OVERRIDE; - - /** - * Sets the minimum number of digits allowed in the fraction portion of a - * number. This override limits the fraction digit count to 340. - * - * @param newValue the new value of the minimum number of digits - * allowed in the fraction portion of a number. - * @see NumberFormat#setMinimumFractionDigits - * @stable ICU 2.0 - */ - void setMinimumFractionDigits(int32_t newValue) U_OVERRIDE; - - /** - * Returns the minimum number of significant digits that will be - * displayed. This value has no effect unless areSignificantDigitsUsed() - * returns true. - * @return the fewest significant digits that will be shown - * @stable ICU 3.0 - */ - int32_t getMinimumSignificantDigits() const; - - /** - * Returns the maximum number of significant digits that will be - * displayed. This value has no effect unless areSignificantDigitsUsed() - * returns true. - * @return the most significant digits that will be shown - * @stable ICU 3.0 - */ - int32_t getMaximumSignificantDigits() const; - - /** - * Sets the minimum number of significant digits that will be - * displayed. If min is less than one then it is set - * to one. If the maximum significant digits count is less than - * min, then it is set to min. - * This function also enables the use of significant digits - * by this formatter - areSignificantDigitsUsed() will return TRUE. - * @see #areSignificantDigitsUsed - * @param min the fewest significant digits to be shown - * @stable ICU 3.0 - */ - void setMinimumSignificantDigits(int32_t min); - - /** - * Sets the maximum number of significant digits that will be - * displayed. If max is less than one then it is set - * to one. If the minimum significant digits count is greater - * than max, then it is set to max. - * This function also enables the use of significant digits - * by this formatter - areSignificantDigitsUsed() will return TRUE. - * @see #areSignificantDigitsUsed - * @param max the most significant digits to be shown - * @stable ICU 3.0 - */ - void setMaximumSignificantDigits(int32_t max); - - /** - * Returns true if significant digits are in use, or false if - * integer and fraction digit counts are in use. - * @return true if significant digits are in use - * @stable ICU 3.0 - */ - UBool areSignificantDigitsUsed() const; - - /** - * Sets whether significant digits are in use, or integer and - * fraction digit counts are in use. - * @param useSignificantDigits true to use significant digits, or - * false to use integer and fraction digit counts - * @stable ICU 3.0 - */ - void setSignificantDigitsUsed(UBool useSignificantDigits); - - /** - * Group-set several settings used for numbers in date formats. - * Avoids calls to touch for each separate setting. - * Equivalent to: - * setGroupingUsed(FALSE); - * setDecimalSeparatorAlwaysShown(FALSE); - * setParseIntegerOnly(TRUE); - * setMinimumFractionDigits(0); - * @internal - */ - void setDateSettings(void) U_OVERRIDE; - - /** - * Sets the currency used to display currency - * amounts. This takes effect immediately, if this format is a - * currency format. If this format is not a currency format, then - * the currency is used if and when this object becomes a - * currency format through the application of a new pattern. - * @param theCurrency a 3-letter ISO code indicating new currency - * to use. It need not be null-terminated. May be the empty - * string or NULL to indicate no currency. - * @param ec input-output error code - * @stable ICU 3.0 - */ - void setCurrency(const char16_t* theCurrency, UErrorCode& ec) U_OVERRIDE; - - /** - * Sets the currency used to display currency amounts. See - * setCurrency(const char16_t*, UErrorCode&). - * @deprecated ICU 3.0. Use setCurrency(const char16_t*, UErrorCode&). - */ - virtual void setCurrency(const char16_t* theCurrency); - - /** - * Sets the `Currency Usage` object used to display currency. - * This takes effect immediately, if this format is a - * currency format. - * @param newUsage new currency usage object to use. - * @param ec input-output error code - * @stable ICU 54 - */ - void setCurrencyUsage(UCurrencyUsage newUsage, UErrorCode* ec); - - /** - * Returns the `Currency Usage` object used to display currency - * @stable ICU 54 - */ - UCurrencyUsage getCurrencyUsage() const; - -#ifndef U_HIDE_INTERNAL_API - - /** - * Format a number and save it into the given DecimalQuantity. - * Internal, not intended for public use. - * @internal - */ - void formatToDecimalQuantity(double number, number::impl::DecimalQuantity& output, - UErrorCode& status) const; - - /** - * Get a DecimalQuantity corresponding to a formattable as it would be - * formatted by this DecimalFormat. - * Internal, not intended for public use. - * @internal - */ - void formatToDecimalQuantity(const Formattable& number, number::impl::DecimalQuantity& output, - UErrorCode& status) const; - -#endif /* U_HIDE_INTERNAL_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Converts this DecimalFormat to a (Localized)NumberFormatter. Starting - * in ICU 60, NumberFormatter is the recommended way to format numbers. - * You can use the returned LocalizedNumberFormatter to format numbers and - * get a FormattedNumber, which contains a string as well as additional - * annotations about the formatted value. - * - * If a memory allocation failure occurs, the return value of this method - * might be null. If you are concerned about correct recovery from - * out-of-memory situations, use this pattern: - * - *
-     * FormattedNumber result;
-     * if (auto* ptr = df->toNumberFormatter(status)) {
-     *     result = ptr->formatDouble(123, status);
-     * }
-     * 
- * - * If you are not concerned about out-of-memory situations, or if your - * environment throws exceptions when memory allocation failure occurs, - * you can chain the methods, like this: - * - *
-     * FormattedNumber result = df
-     *     ->toNumberFormatter(status)
-     *     ->formatDouble(123, status);
-     * 
- * - * NOTE: The returned LocalizedNumberFormatter is owned by this DecimalFormat. - * If a non-const method is called on the DecimalFormat, or if the DecimalFormat - * is deleted, the object becomes invalid. If you plan to keep the return value - * beyond the lifetime of the DecimalFormat, copy it to a local variable: - * - *
-     * LocalizedNumberFormatter lnf;
-     * if (auto* ptr = df->toNumberFormatter(status)) {
-     *     lnf = *ptr;
-     * }
-     * 
- * - * @param status Set on failure, like U_MEMORY_ALLOCATION_ERROR. - * @return A pointer to an internal object, or nullptr on failure. - * Do not delete the return value! - * @draft ICU 64 - */ - const number::LocalizedNumberFormatter* toNumberFormatter(UErrorCode& status) const; -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DEPRECATED_API - /** - * Deprecated: Like {@link #toNumberFormatter(UErrorCode&) const}, - * but does not take an error code. - * - * The new signature should be used in case an error occurs while returning the - * LocalizedNumberFormatter. - * - * This old signature will be removed in ICU 65. - * - * @return A reference to an internal object. - * @deprecated ICU 64 - */ - const number::LocalizedNumberFormatter& toNumberFormatter() const; -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Return the class ID for this class. This is useful only for - * comparing to a return value from getDynamicClassID(). For example: - *
-     * .      Base* polymorphic_pointer = createPolymorphicObject();
-     * .      if (polymorphic_pointer->getDynamicClassID() ==
-     * .          Derived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. - * This method is to implement a simple version of RTTI, since not all - * C++ compilers support genuine RTTI. Polymorphic operator==() and - * clone() methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 2.0 - */ - UClassID getDynamicClassID(void) const U_OVERRIDE; - -#ifndef U_HIDE_INTERNAL_API - - /** - * Set whether DecimalFormatSymbols copy in toNumberFormatter - * is deep (clone) or shallow (pointer copy). Apple - * @internal - */ - void setDFSShallowCopy(UBool shallow); - -#endif /* U_HIDE_INTERNAL_API */ - -private: - - /** Rebuilds the formatter object from the property bag. */ - void touch(UErrorCode& status); - - /** Rebuilds the formatter object, ignoring any error code. */ - void touchNoError(); - - /** - * Updates the property bag with settings from the given pattern. - * - * @param pattern The pattern string to parse. - * @param ignoreRounding Whether to leave out rounding information (minFrac, maxFrac, and rounding - * increment) when parsing the pattern. This may be desirable if a custom rounding mode, such - * as CurrencyUsage, is to be used instead. One of {@link - * PatternStringParser#IGNORE_ROUNDING_ALWAYS}, {@link PatternStringParser#IGNORE_ROUNDING_IF_CURRENCY}, - * or {@link PatternStringParser#IGNORE_ROUNDING_NEVER}. - * @see PatternAndPropertyUtils#parseToExistingProperties - */ - void setPropertiesFromPattern(const UnicodeString& pattern, int32_t ignoreRounding, - UErrorCode& status); - - const numparse::impl::NumberParserImpl* getParser(UErrorCode& status) const; - - const numparse::impl::NumberParserImpl* getCurrencyParser(UErrorCode& status) const; - - static void fieldPositionHelper(const number::FormattedNumber& formatted, FieldPosition& fieldPosition, - int32_t offset, UErrorCode& status); - - static void fieldPositionIteratorHelper(const number::FormattedNumber& formatted, - FieldPositionIterator* fpi, int32_t offset, UErrorCode& status); - - void setupFastFormat(); - - bool fastFormatDouble(double input, UnicodeString& output) const; - - bool fastFormatInt64(int64_t input, UnicodeString& output) const; - - void doFastFormatInt32(int32_t input, bool isNegative, UnicodeString& output) const; - - //=====================================================================================// - // INSTANCE FIELDS // - //=====================================================================================// - - - // One instance field for the implementation, keep all fields inside of an implementation - // class defined in number_mapper.h - number::impl::DecimalFormatFields* fields = nullptr; - - // Allow child class CompactDecimalFormat to access fProperties: - friend class CompactDecimalFormat; - - // Allow MeasureFormat to use fieldPositionHelper: - friend class MeasureFormat; - -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _DECIMFMT -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/docmain.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/docmain.h deleted file mode 100644 index 1e959cb359..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/docmain.h +++ /dev/null @@ -1,232 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/******************************************************************** - * COPYRIGHT: - * Copyright (c) 1997-2012, International Business Machines Corporation and - * others. All Rights Reserved. - * - * FILE NAME: DOCMAIN.h - * - * Date Name Description - * 12/11/2000 Ram Creation. - */ - -/** - * \file - * \brief (Non API- contains Doxygen definitions) - * - * This file contains documentation for Doxygen and doesnot have - * any significance with respect to C or C++ API - */ - -/*! \mainpage - * - * \section API API Reference Usage - * - *

C++ Programmers:

- *

Use Class Hierarchy or Alphabetical List - * or Compound List - * to find the class you are interested in. For example, to find BreakIterator, - * you can go to the Alphabetical List, then click on - * "BreakIterator". Once you are at the class, you will find an inheritance - * chart, a list of the public members, a detailed description of the class, - * then detailed member descriptions.

- * - *

C Programmers:

- *

Use Module List or File Members - * to find a list of all the functions and constants. - * For example, to find BreakIterator functions you would click on - * File List, - * then find "ubrk.h" and click on it. You will find descriptions of Defines, - * Typedefs, Enumerations, and Functions, with detailed descriptions below. - * If you want to find a specific function, such as ubrk_next(), then click - * first on File Members, then use your browser - * Find dialog to search for "ubrk_next()".

- * - * - *

API References for Previous Releases

- *

The API References for each release of ICU are also available as - * a zip file from the ICU - * download page.

- * - *
- * - *

Architecture (User's Guide)

- * - * - *
- *\htmlonly

Module List

\endhtmlonly - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
Module NameCC++
Basic Types and Constantsutypes.hutypes.h
Strings and Character Iterationustring.h, utf8.h, utf16.h, UText, UCharIteratoricu::UnicodeString, icu::CharacterIterator, icu::Appendable, icu::StringPiece,icu::ByteSink
Unicode Character
Properties and Names
uchar.h, uscript.hC API
Sets of Unicode Code Points and Stringsuset.hicu::UnicodeSet
Maps from Unicode Code Points to Integer Valuesucptrie.h, umutablecptrie.hC API
Maps from Strings to Integer Values(no C API)icu::BytesTrie, icu::UCharsTrie
Codepage Conversionucnv.h, ucnvsel.hbC API
Codepage Detectionucsdet.hC API
Unicode Text Compressionucnv.h
(encoding name "SCSU" or "BOCU-1")
C API
Locales uloc.hicu::Locale, icu::LocaleBuilder
Resource Bundlesures.hicu::ResourceBundle
Normalizationunorm2.hicu::Normalizer2
Calendarsucal.hicu::Calendar
Date and Time Formattingudat.hicu::DateFormat
Message Formattingumsg.hicu::MessageFormat
Number Formatting
(includes currency and unit formatting)
unumberformatter.h, unum.hicu::number::NumberFormatter (ICU 60+) or icu::NumberFormat (older versions)
Number Range Formatting
(includes currency and unit ranges)
(no C API)icu::number::NumberRangeFormatter
Number Spellout
(Rule Based Number Formatting)
unum.h
(use UNUM_SPELLOUT)
icu::RuleBasedNumberFormat
Text Transformation
(Transliteration)
utrans.hicu::Transliterator
Bidirectional Algorithmubidi.h, ubiditransform.hC API
Arabic Shapingushape.hC API
Collationucol.hicu::Collator
String Searchingusearch.hicu::StringSearch
Index Characters/
Bucketing for Sorted Lists
(no C API)icu::AlphabeticIndex
Text Boundary Analysis
(Break Iteration)
ubrk.hicu::BreakIterator
Regular Expressionsuregex.hicu::RegexPattern, icu::RegexMatcher
StringPrepusprep.hC API
International Domain Names in Applications:
- * UTS #46 in C/C++, IDNA2003 only via C API
uidna.hidna.h
Identifier Spoofing & Confusabilityuspoof.hC API
Universal Time Scaleutmscale.hC API
Paragraph Layout / Complex Text Layoutplayout.hicu::ParagraphLayout
ICU I/Oustdio.hustream.h
- * This main page is generated from docmain.h - */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtfmtsym.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtfmtsym.h deleted file mode 100644 index c2c12dab0d..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtfmtsym.h +++ /dev/null @@ -1,1033 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 1997-2016, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************** -* -* File DTFMTSYM.H -* -* Modification History: -* -* Date Name Description -* 02/19/97 aliu Converted from java. -* 07/21/98 stephen Added getZoneIndex() -* Changed to match C++ conventions -******************************************************************************** -*/ - -#ifndef DTFMTSYM_H -#define DTFMTSYM_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/calendar.h" -#include "unicode/strenum.h" -#include "unicode/uobject.h" -#include "unicode/locid.h" -#include "unicode/udat.h" -#include "unicode/ures.h" - -/** - * \file - * \brief C++ API: Symbols for formatting dates. - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/* forward declaration */ -class SimpleDateFormat; -class Hashtable; - -/** - * DateFormatSymbols is a public class for encapsulating localizable date-time - * formatting data -- including timezone data. DateFormatSymbols is used by - * DateFormat and SimpleDateFormat. - *

- * Rather than first creating a DateFormatSymbols to get a date-time formatter - * by using a SimpleDateFormat constructor, clients are encouraged to create a - * date-time formatter using the getTimeInstance(), getDateInstance(), or - * getDateTimeInstance() method in DateFormat. Each of these methods can return a - * date/time formatter initialized with a default format pattern along with the - * date-time formatting data for a given or default locale. After a formatter is - * created, clients may modify the format pattern using the setPattern function - * as so desired. For more information on using these formatter factory - * functions, see DateFormat. - *

- * If clients decide to create a date-time formatter with a particular format - * pattern and locale, they can do so with new SimpleDateFormat(aPattern, - * new DateFormatSymbols(aLocale)). This will load the appropriate date-time - * formatting data from the locale. - *

- * DateFormatSymbols objects are clonable. When clients obtain a - * DateFormatSymbols object, they can feel free to modify the date-time - * formatting data as necessary. For instance, clients can - * replace the localized date-time format pattern characters with the ones that - * they feel easy to remember. Or they can change the representative cities - * originally picked by default to using their favorite ones. - *

- * DateFormatSymbols are not expected to be subclassed. Data for a calendar is - * loaded out of resource bundles. The 'type' parameter indicates the type of - * calendar, for example, "gregorian" or "japanese". If the type is not gregorian - * (or NULL, or an empty string) then the type is appended to the resource name, - * for example, 'Eras_japanese' instead of 'Eras'. If the resource 'Eras_japanese' did - * not exist (even in root), then this class will fall back to just 'Eras', that is, - * Gregorian data. Therefore, the calendar implementor MUST ensure that the root - * locale at least contains any resources that are to be particularized for the - * calendar type. - */ -class U_I18N_API DateFormatSymbols U_FINAL : public UObject { -public: - /** - * Construct a DateFormatSymbols object by loading format data from - * resources for the default locale, in the default calendar (Gregorian). - *

- * NOTE: This constructor will never fail; if it cannot get resource - * data for the default locale, it will return a last-resort object - * based on hard-coded strings. - * - * @param status Status code. Failure - * results if the resources for the default cannot be - * found or cannot be loaded - * @stable ICU 2.0 - */ - DateFormatSymbols(UErrorCode& status); - - /** - * Construct a DateFormatSymbols object by loading format data from - * resources for the given locale, in the default calendar (Gregorian). - * - * @param locale Locale to load format data from. - * @param status Status code. Failure - * results if the resources for the locale cannot be - * found or cannot be loaded - * @stable ICU 2.0 - */ - DateFormatSymbols(const Locale& locale, - UErrorCode& status); - -#ifndef U_HIDE_INTERNAL_API - /** - * Construct a DateFormatSymbols object by loading format data from - * resources for the default locale, in the default calendar (Gregorian). - *

- * NOTE: This constructor will never fail; if it cannot get resource - * data for the default locale, it will return a last-resort object - * based on hard-coded strings. - * - * @param type Type of calendar (as returned by Calendar::getType). - * Will be used to access the correct set of strings. - * (NULL or empty string defaults to "gregorian".) - * @param status Status code. Failure - * results if the resources for the default cannot be - * found or cannot be loaded - * @internal - */ - DateFormatSymbols(const char *type, UErrorCode& status); - - /** - * Construct a DateFormatSymbols object by loading format data from - * resources for the given locale, in the default calendar (Gregorian). - * - * @param locale Locale to load format data from. - * @param type Type of calendar (as returned by Calendar::getType). - * Will be used to access the correct set of strings. - * (NULL or empty string defaults to "gregorian".) - * @param status Status code. Failure - * results if the resources for the locale cannot be - * found or cannot be loaded - * @internal - */ - DateFormatSymbols(const Locale& locale, - const char *type, - UErrorCode& status); -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Copy constructor. - * @stable ICU 2.0 - */ - DateFormatSymbols(const DateFormatSymbols&); - - /** - * Assignment operator. - * @stable ICU 2.0 - */ - DateFormatSymbols& operator=(const DateFormatSymbols&); - - /** - * Destructor. This is nonvirtual because this class is not designed to be - * subclassed. - * @stable ICU 2.0 - */ - virtual ~DateFormatSymbols(); - - /** - * Return true if another object is semantically equal to this one. - * - * @param other the DateFormatSymbols object to be compared with. - * @return true if other is semantically equal to this. - * @stable ICU 2.0 - */ - UBool operator==(const DateFormatSymbols& other) const; - - /** - * Return true if another object is semantically unequal to this one. - * - * @param other the DateFormatSymbols object to be compared with. - * @return true if other is semantically unequal to this. - * @stable ICU 2.0 - */ - UBool operator!=(const DateFormatSymbols& other) const { return !operator==(other); } - - /** - * Gets abbreviated era strings. For example: "AD" and "BC". - * - * @param count Filled in with length of the array. - * @return the era strings. - * @stable ICU 2.0 - */ - const UnicodeString* getEras(int32_t& count) const; - - /** - * Sets abbreviated era strings. For example: "AD" and "BC". - * @param eras Array of era strings (DateFormatSymbols retains ownership.) - * @param count Filled in with length of the array. - * @stable ICU 2.0 - */ - void setEras(const UnicodeString* eras, int32_t count); - - /** - * Gets era name strings. For example: "Anno Domini" and "Before Christ". - * - * @param count Filled in with length of the array. - * @return the era name strings. - * @stable ICU 3.4 - */ - const UnicodeString* getEraNames(int32_t& count) const; - - /** - * Sets era name strings. For example: "Anno Domini" and "Before Christ". - * @param eraNames Array of era name strings (DateFormatSymbols retains ownership.) - * @param count Filled in with length of the array. - * @stable ICU 3.6 - */ - void setEraNames(const UnicodeString* eraNames, int32_t count); - - /** - * Gets narrow era strings. For example: "A" and "B". - * - * @param count Filled in with length of the array. - * @return the narrow era strings. - * @stable ICU 4.2 - */ - const UnicodeString* getNarrowEras(int32_t& count) const; - - /** - * Sets narrow era strings. For example: "A" and "B". - * @param narrowEras Array of narrow era strings (DateFormatSymbols retains ownership.) - * @param count Filled in with length of the array. - * @stable ICU 4.2 - */ - void setNarrowEras(const UnicodeString* narrowEras, int32_t count); - - /** - * Gets month strings. For example: "January", "February", etc. - * @param count Filled in with length of the array. - * @return the month strings. (DateFormatSymbols retains ownership.) - * @stable ICU 2.0 - */ - const UnicodeString* getMonths(int32_t& count) const; - - /** - * Sets month strings. For example: "January", "February", etc. - * - * @param months the new month strings. (not adopted; caller retains ownership) - * @param count Filled in with length of the array. - * @stable ICU 2.0 - */ - void setMonths(const UnicodeString* months, int32_t count); - - /** - * Gets short month strings. For example: "Jan", "Feb", etc. - * - * @param count Filled in with length of the array. - * @return the short month strings. (DateFormatSymbols retains ownership.) - * @stable ICU 2.0 - */ - const UnicodeString* getShortMonths(int32_t& count) const; - - /** - * Sets short month strings. For example: "Jan", "Feb", etc. - * @param count Filled in with length of the array. - * @param shortMonths the new short month strings. (not adopted; caller retains ownership) - * @stable ICU 2.0 - */ - void setShortMonths(const UnicodeString* shortMonths, int32_t count); - - /** - * Selector for date formatting context - * @stable ICU 3.6 - */ - enum DtContextType { - FORMAT, - STANDALONE, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal DtContextType value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - DT_CONTEXT_COUNT -#endif // U_HIDE_DEPRECATED_API - }; - - /** - * Selector for date formatting width - * @stable ICU 3.6 - */ - enum DtWidthType { - ABBREVIATED, - WIDE, - NARROW, - /** - * Short width is currently only supported for weekday names. - * @stable ICU 51 - */ - SHORT, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal DtWidthType value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - DT_WIDTH_COUNT = 4 -#endif // U_HIDE_DEPRECATED_API - }; - - /** - * Gets month strings by width and context. For example: "January", "February", etc. - * @param count Filled in with length of the array. - * @param context The formatting context, either FORMAT or STANDALONE - * @param width The width of returned strings, either WIDE, ABBREVIATED, or NARROW. - * @return the month strings. (DateFormatSymbols retains ownership.) - * @stable ICU 3.4 - */ - const UnicodeString* getMonths(int32_t& count, DtContextType context, DtWidthType width) const; - - /** - * Sets month strings by width and context. For example: "January", "February", etc. - * - * @param months The new month strings. (not adopted; caller retains ownership) - * @param count Filled in with length of the array. - * @param context The formatting context, either FORMAT or STANDALONE - * @param width The width of returned strings, either WIDE, ABBREVIATED, or NARROW. - * @stable ICU 3.6 - */ - void setMonths(const UnicodeString* months, int32_t count, DtContextType context, DtWidthType width); - - /** - * Gets wide weekday strings. For example: "Sunday", "Monday", etc. - * @param count Filled in with length of the array. - * @return the weekday strings. (DateFormatSymbols retains ownership.) - * @stable ICU 2.0 - */ - const UnicodeString* getWeekdays(int32_t& count) const; - - - /** - * Sets wide weekday strings. For example: "Sunday", "Monday", etc. - * @param weekdays the new weekday strings. (not adopted; caller retains ownership) - * @param count Filled in with length of the array. - * @stable ICU 2.0 - */ - void setWeekdays(const UnicodeString* weekdays, int32_t count); - - /** - * Gets abbreviated weekday strings. For example: "Sun", "Mon", etc. (Note: The method name is - * misleading; it does not get the CLDR-style "short" weekday strings, e.g. "Su", "Mo", etc.) - * @param count Filled in with length of the array. - * @return the abbreviated weekday strings. (DateFormatSymbols retains ownership.) - * @stable ICU 2.0 - */ - const UnicodeString* getShortWeekdays(int32_t& count) const; - - /** - * Sets abbreviated weekday strings. For example: "Sun", "Mon", etc. (Note: The method name is - * misleading; it does not set the CLDR-style "short" weekday strings, e.g. "Su", "Mo", etc.) - * @param abbrevWeekdays the new abbreviated weekday strings. (not adopted; caller retains ownership) - * @param count Filled in with length of the array. - * @stable ICU 2.0 - */ - void setShortWeekdays(const UnicodeString* abbrevWeekdays, int32_t count); - - /** - * Gets weekday strings by width and context. For example: "Sunday", "Monday", etc. - * @param count Filled in with length of the array. - * @param context The formatting context, either FORMAT or STANDALONE - * @param width The width of returned strings, either WIDE, ABBREVIATED, SHORT, or NARROW - * @return the month strings. (DateFormatSymbols retains ownership.) - * @stable ICU 3.4 - */ - const UnicodeString* getWeekdays(int32_t& count, DtContextType context, DtWidthType width) const; - - /** - * Sets weekday strings by width and context. For example: "Sunday", "Monday", etc. - * @param weekdays The new weekday strings. (not adopted; caller retains ownership) - * @param count Filled in with length of the array. - * @param context The formatting context, either FORMAT or STANDALONE - * @param width The width of returned strings, either WIDE, ABBREVIATED, SHORT, or NARROW - * @stable ICU 3.6 - */ - void setWeekdays(const UnicodeString* weekdays, int32_t count, DtContextType context, DtWidthType width); - - /** - * Gets quarter strings by width and context. For example: "1st Quarter", "2nd Quarter", etc. - * @param count Filled in with length of the array. - * @param context The formatting context, either FORMAT or STANDALONE - * @param width The width of returned strings, either WIDE or ABBREVIATED. There - * are no NARROW quarters. - * @return the quarter strings. (DateFormatSymbols retains ownership.) - * @stable ICU 3.6 - */ - const UnicodeString* getQuarters(int32_t& count, DtContextType context, DtWidthType width) const; - - /** - * Sets quarter strings by width and context. For example: "1st Quarter", "2nd Quarter", etc. - * - * @param quarters The new quarter strings. (not adopted; caller retains ownership) - * @param count Filled in with length of the array. - * @param context The formatting context, either FORMAT or STANDALONE - * @param width The width of returned strings, either WIDE or ABBREVIATED. There - * are no NARROW quarters. - * @stable ICU 3.6 - */ - void setQuarters(const UnicodeString* quarters, int32_t count, DtContextType context, DtWidthType width); - - /** - * Gets AM/PM strings. For example: "AM" and "PM". - * @param count Filled in with length of the array. - * @return the weekday strings. (DateFormatSymbols retains ownership.) - * @stable ICU 2.0 - */ - const UnicodeString* getAmPmStrings(int32_t& count) const; - - /** - * Sets ampm strings. For example: "AM" and "PM". - * @param ampms the new ampm strings. (not adopted; caller retains ownership) - * @param count Filled in with length of the array. - * @stable ICU 2.0 - */ - void setAmPmStrings(const UnicodeString* ampms, int32_t count); - -#ifndef U_HIDE_INTERNAL_API - /** - * This default time separator is used for formatting when the locale - * doesn't specify any time separator, and always recognized when parsing. - * @internal - */ - static const char16_t DEFAULT_TIME_SEPARATOR = 0x003a; // ':' - - /** - * This alternate time separator is always recognized when parsing. - * @internal - */ - static const char16_t ALTERNATE_TIME_SEPARATOR = 0x002e; // '.' - - /** - * Gets the time separator string. For example: ":". - * @param result Output param which will receive the time separator string. - * @return A reference to 'result'. - * @internal - */ - UnicodeString& getTimeSeparatorString(UnicodeString& result) const; - - /** - * Sets the time separator string. For example: ":". - * @param newTimeSeparator the new time separator string. - * @internal - */ - void setTimeSeparatorString(const UnicodeString& newTimeSeparator); -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Gets cyclic year name strings if the calendar has them, by width and context. - * For example: "jia-zi", "yi-chou", etc. - * @param count Filled in with length of the array. - * @param context The usage context: FORMAT, STANDALONE. - * @param width The requested name width: WIDE, ABBREVIATED, NARROW. - * @return The year name strings (DateFormatSymbols retains ownership), - * or null if they are not available for this calendar. - * @stable ICU 54 - */ - const UnicodeString* getYearNames(int32_t& count, - DtContextType context, DtWidthType width) const; - - /** - * Sets cyclic year name strings by width and context. For example: "jia-zi", "yi-chou", etc. - * - * @param yearNames The new cyclic year name strings (not adopted; caller retains ownership). - * @param count The length of the array. - * @param context The usage context: FORMAT, STANDALONE (currently only FORMAT is supported). - * @param width The name width: WIDE, ABBREVIATED, NARROW (currently only ABBREVIATED is supported). - * @stable ICU 54 - */ - void setYearNames(const UnicodeString* yearNames, int32_t count, - DtContextType context, DtWidthType width); - - /** - * Gets calendar zodiac name strings if the calendar has them, by width and context. - * For example: "Rat", "Ox", "Tiger", etc. - * @param count Filled in with length of the array. - * @param context The usage context: FORMAT, STANDALONE. - * @param width The requested name width: WIDE, ABBREVIATED, NARROW. - * @return The zodiac name strings (DateFormatSymbols retains ownership), - * or null if they are not available for this calendar. - * @stable ICU 54 - */ - const UnicodeString* getZodiacNames(int32_t& count, - DtContextType context, DtWidthType width) const; - - /** - * Sets calendar zodiac name strings by width and context. For example: "Rat", "Ox", "Tiger", etc. - * - * @param zodiacNames The new zodiac name strings (not adopted; caller retains ownership). - * @param count The length of the array. - * @param context The usage context: FORMAT, STANDALONE (currently only FORMAT is supported). - * @param width The name width: WIDE, ABBREVIATED, NARROW (currently only ABBREVIATED is supported). - * @stable ICU 54 - */ - void setZodiacNames(const UnicodeString* zodiacNames, int32_t count, - DtContextType context, DtWidthType width); - -#ifndef U_HIDE_INTERNAL_API - /** - * Somewhat temporary constants for leap month pattern types, adequate for supporting - * just leap month patterns as needed for Chinese lunar calendar. - * Eventually we will add full support for different month pattern types (needed for - * other calendars such as Hindu) at which point this approach will be replaced by a - * more complete approach. - * @internal - */ - enum EMonthPatternType - { - kLeapMonthPatternFormatWide, - kLeapMonthPatternFormatAbbrev, - kLeapMonthPatternFormatNarrow, - kLeapMonthPatternStandaloneWide, - kLeapMonthPatternStandaloneAbbrev, - kLeapMonthPatternStandaloneNarrow, - kLeapMonthPatternNumeric, - kMonthPatternsCount - }; - - /** - * Somewhat temporary function for getting complete set of leap month patterns for all - * contexts & widths, indexed by EMonthPatternType values. Returns NULL if calendar - * does not have leap month patterns. Note, there is currently no setter for this. - * Eventually we will add full support for different month pattern types (needed for - * other calendars such as Hindu) at which point this approach will be replaced by a - * more complete approach. - * @param count Filled in with length of the array (may be 0). - * @return The leap month patterns (DateFormatSymbols retains ownership). - * May be NULL if there are no leap month patterns for this calendar. - * @internal - */ - const UnicodeString* getLeapMonthPatterns(int32_t& count) const; - -#endif /* U_HIDE_INTERNAL_API */ - -#ifndef U_HIDE_DEPRECATED_API - /** - * Gets timezone strings. These strings are stored in a 2-dimensional array. - * @param rowCount Output param to receive number of rows. - * @param columnCount Output param to receive number of columns. - * @return The timezone strings as a 2-d array. (DateFormatSymbols retains ownership.) - * @deprecated ICU 3.6 - */ - const UnicodeString** getZoneStrings(int32_t& rowCount, int32_t& columnCount) const; -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Sets timezone strings. These strings are stored in a 2-dimensional array. - *

Note: SimpleDateFormat no longer use the zone strings stored in - * a DateFormatSymbols. Therefore, the time zone strings set by this mthod - * have no effects in an instance of SimpleDateFormat for formatting time - * zones. - * @param strings The timezone strings as a 2-d array to be copied. (not adopted; caller retains ownership) - * @param rowCount The number of rows (count of first index). - * @param columnCount The number of columns (count of second index). - * @stable ICU 2.0 - */ - void setZoneStrings(const UnicodeString* const* strings, int32_t rowCount, int32_t columnCount); - - /** - * Get the non-localized date-time pattern characters. - * @return the non-localized date-time pattern characters - * @stable ICU 2.0 - */ - static const char16_t * U_EXPORT2 getPatternUChars(void); - - /** - * Gets localized date-time pattern characters. For example: 'u', 't', etc. - *

- * Note: ICU no longer provides localized date-time pattern characters for a locale - * starting ICU 3.8. This method returns the non-localized date-time pattern - * characters unless user defined localized data is set by setLocalPatternChars. - * @param result Output param which will receive the localized date-time pattern characters. - * @return A reference to 'result'. - * @stable ICU 2.0 - */ - UnicodeString& getLocalPatternChars(UnicodeString& result) const; - - /** - * Sets localized date-time pattern characters. For example: 'u', 't', etc. - * @param newLocalPatternChars the new localized date-time - * pattern characters. - * @stable ICU 2.0 - */ - void setLocalPatternChars(const UnicodeString& newLocalPatternChars); - - /** - * Returns the locale for this object. Two flavors are available: - * valid and actual locale. - * @stable ICU 2.8 - */ - Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const; - - /* The following type and kCapContextUsageTypeCount cannot be #ifndef U_HIDE_INTERNAL_API, - they are needed for .h file declarations. */ - /** - * Constants for capitalization context usage types. - * @internal - */ - enum ECapitalizationContextUsageType - { -#ifndef U_HIDE_INTERNAL_API - kCapContextUsageOther = 0, - kCapContextUsageMonthFormat, /* except narrow */ - kCapContextUsageMonthStandalone, /* except narrow */ - kCapContextUsageMonthNarrow, - kCapContextUsageDayFormat, /* except narrow */ - kCapContextUsageDayStandalone, /* except narrow */ - kCapContextUsageDayNarrow, - kCapContextUsageEraWide, - kCapContextUsageEraAbbrev, - kCapContextUsageEraNarrow, - kCapContextUsageZoneLong, - kCapContextUsageZoneShort, - kCapContextUsageMetazoneLong, - kCapContextUsageMetazoneShort, -#endif /* U_HIDE_INTERNAL_API */ - kCapContextUsageTypeCount = 14 - }; - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.2 - */ - virtual UClassID getDynamicClassID() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - -private: - - friend class SimpleDateFormat; - friend class DateFormatSymbolsSingleSetter; // see udat.cpp - - /** - * Abbreviated era strings. For example: "AD" and "BC". - */ - UnicodeString* fEras; - int32_t fErasCount; - - /** - * Era name strings. For example: "Anno Domini" and "Before Christ". - */ - UnicodeString* fEraNames; - int32_t fEraNamesCount; - - /** - * Narrow era strings. For example: "A" and "B". - */ - UnicodeString* fNarrowEras; - int32_t fNarrowErasCount; - - /** - * Month strings. For example: "January", "February", etc. - */ - UnicodeString* fMonths; - int32_t fMonthsCount; - - /** - * Short month strings. For example: "Jan", "Feb", etc. - */ - UnicodeString* fShortMonths; - int32_t fShortMonthsCount; - - /** - * Narrow month strings. For example: "J", "F", etc. - */ - UnicodeString* fNarrowMonths; - int32_t fNarrowMonthsCount; - - /** - * Standalone Month strings. For example: "January", "February", etc. - */ - UnicodeString* fStandaloneMonths; - int32_t fStandaloneMonthsCount; - - /** - * Standalone Short month strings. For example: "Jan", "Feb", etc. - */ - UnicodeString* fStandaloneShortMonths; - int32_t fStandaloneShortMonthsCount; - - /** - * Standalone Narrow month strings. For example: "J", "F", etc. - */ - UnicodeString* fStandaloneNarrowMonths; - int32_t fStandaloneNarrowMonthsCount; - - /** - * CLDR-style format wide weekday strings. For example: "Sunday", "Monday", etc. - */ - UnicodeString* fWeekdays; - int32_t fWeekdaysCount; - - /** - * CLDR-style format abbreviated (not short) weekday strings. For example: "Sun", "Mon", etc. - */ - UnicodeString* fShortWeekdays; - int32_t fShortWeekdaysCount; - - /** - * CLDR-style format short weekday strings. For example: "Su", "Mo", etc. - */ - UnicodeString* fShorterWeekdays; - int32_t fShorterWeekdaysCount; - - /** - * CLDR-style format narrow weekday strings. For example: "S", "M", etc. - */ - UnicodeString* fNarrowWeekdays; - int32_t fNarrowWeekdaysCount; - - /** - * CLDR-style standalone wide weekday strings. For example: "Sunday", "Monday", etc. - */ - UnicodeString* fStandaloneWeekdays; - int32_t fStandaloneWeekdaysCount; - - /** - * CLDR-style standalone abbreviated (not short) weekday strings. For example: "Sun", "Mon", etc. - */ - UnicodeString* fStandaloneShortWeekdays; - int32_t fStandaloneShortWeekdaysCount; - - /** - * CLDR-style standalone short weekday strings. For example: "Su", "Mo", etc. - */ - UnicodeString* fStandaloneShorterWeekdays; - int32_t fStandaloneShorterWeekdaysCount; - - /** - * Standalone Narrow weekday strings. For example: "Sun", "Mon", etc. - */ - UnicodeString* fStandaloneNarrowWeekdays; - int32_t fStandaloneNarrowWeekdaysCount; - - /** - * Ampm strings. For example: "AM" and "PM". - */ - UnicodeString* fAmPms; - int32_t fAmPmsCount; - - /** - * Narrow Ampm strings. For example: "a" and "p". - */ - UnicodeString* fNarrowAmPms; - int32_t fNarrowAmPmsCount; - - /** - * Time separator string. For example: ":". - */ - UnicodeString fTimeSeparator; - - /** - * Quarter strings. For example: "1st quarter", "2nd quarter", etc. - */ - UnicodeString *fQuarters; - int32_t fQuartersCount; - - /** - * Short quarters. For example: "Q1", "Q2", etc. - */ - UnicodeString *fShortQuarters; - int32_t fShortQuartersCount; - - /** - * Standalone quarter strings. For example: "1st quarter", "2nd quarter", etc. - */ - UnicodeString *fStandaloneQuarters; - int32_t fStandaloneQuartersCount; - - /** - * Standalone short quarter strings. For example: "Q1", "Q2", etc. - */ - UnicodeString *fStandaloneShortQuarters; - int32_t fStandaloneShortQuartersCount; - - /** - * All leap month patterns, for example "{0}bis". - */ - UnicodeString *fLeapMonthPatterns; - int32_t fLeapMonthPatternsCount; - - /** - * Cyclic year names, for example: "jia-zi", "yi-chou", ... "gui-hai"; - * currently we only have data for format/abbreviated. - * For the others, just get from format/abbreviated, ignore set. - */ - UnicodeString *fShortYearNames; - int32_t fShortYearNamesCount; - - /** - * Cyclic zodiac names, for example "Rat", "Ox", "Tiger", etc.; - * currently we only have data for format/abbreviated. - * For the others, just get from format/abbreviated, ignore set. - */ - UnicodeString *fShortZodiacNames; - int32_t fShortZodiacNamesCount; - - /** - * Localized names of time zones in this locale. This is a - * two-dimensional array of strings of size n by m, - * where m is at least 5 and up to 7. Each of the n rows is an - * entry containing the localized names for a single TimeZone. - * - * Each such row contains (with i ranging from 0..n-1): - * - * zoneStrings[i][0] - time zone ID - * example: America/Los_Angeles - * zoneStrings[i][1] - long name of zone in standard time - * example: Pacific Standard Time - * zoneStrings[i][2] - short name of zone in standard time - * example: PST - * zoneStrings[i][3] - long name of zone in daylight savings time - * example: Pacific Daylight Time - * zoneStrings[i][4] - short name of zone in daylight savings time - * example: PDT - * zoneStrings[i][5] - location name of zone - * example: United States (Los Angeles) - * zoneStrings[i][6] - long generic name of zone - * example: Pacific Time - * zoneStrings[i][7] - short generic of zone - * example: PT - * - * The zone ID is not localized; it corresponds to the ID - * value associated with a system time zone object. All other entries - * are localized names. If a zone does not implement daylight savings - * time, the daylight savings time names are ignored. - * - * Note:CLDR 1.5 introduced metazone and its historical mappings. - * This simple two-dimensional array is no longer sufficient to represent - * localized names and its historic changes. Since ICU 3.8.1, localized - * zone names extracted from ICU locale data is stored in a ZoneStringFormat - * instance. But we still need to support the old way of customizing - * localized zone names, so we keep this field for the purpose. - */ - UnicodeString **fZoneStrings; // Zone string array set by setZoneStrings - UnicodeString **fLocaleZoneStrings; // Zone string array created by the locale - int32_t fZoneStringsRowCount; - int32_t fZoneStringsColCount; - - Locale fZSFLocale; // Locale used for getting ZoneStringFormat - - /** - * Localized date-time pattern characters. For example: use 'u' as 'y'. - */ - UnicodeString fLocalPatternChars; - - /** - * Capitalization transforms. For each usage type, the first array element indicates - * whether to titlecase for uiListOrMenu context, the second indicates whether to - * titlecase for stand-alone context. - */ - UBool fCapitalization[kCapContextUsageTypeCount][2]; - - /** - * Abbreviated (== short) day period strings. - */ - UnicodeString *fAbbreviatedDayPeriods; - int32_t fAbbreviatedDayPeriodsCount; - - /** - * Wide day period strings. - */ - UnicodeString *fWideDayPeriods; - int32_t fWideDayPeriodsCount; - - /** - * Narrow day period strings. - */ - UnicodeString *fNarrowDayPeriods; - int32_t fNarrowDayPeriodsCount; - - /** - * Stand-alone abbreviated (== short) day period strings. - */ - UnicodeString *fStandaloneAbbreviatedDayPeriods; - int32_t fStandaloneAbbreviatedDayPeriodsCount; - - /** - * Stand-alone wide day period strings. - */ - UnicodeString *fStandaloneWideDayPeriods; - int32_t fStandaloneWideDayPeriodsCount; - - /** - * Stand-alone narrow day period strings. - */ - UnicodeString *fStandaloneNarrowDayPeriods; - int32_t fStandaloneNarrowDayPeriodsCount; - -private: - /** valid/actual locale information - * these are always ICU locales, so the length should not be a problem - */ - char validLocale[ULOC_FULLNAME_CAPACITY]; - char actualLocale[ULOC_FULLNAME_CAPACITY]; - - DateFormatSymbols(); // default constructor not implemented - - /** - * Called by the constructors to actually load data from the resources - * - * @param locale The locale to get symbols for. - * @param type Calendar Type (as from Calendar::getType()) - * @param status Input/output parameter, set to success or - * failure code upon return. - * @param useLastResortData determine if use last resort data - */ - void initializeData(const Locale& locale, const char *type, UErrorCode& status, UBool useLastResortData = FALSE); - - /** - * Copy or alias an array in another object, as appropriate. - * - * @param dstArray the copy destination array. - * @param dstCount fill in with the lenth of 'dstArray'. - * @param srcArray the source array to be copied. - * @param srcCount the length of items to be copied from the 'srcArray'. - */ - static void assignArray(UnicodeString*& dstArray, - int32_t& dstCount, - const UnicodeString* srcArray, - int32_t srcCount); - - /** - * Return true if the given arrays' contents are equal, or if the arrays are - * identical (pointers are equal). - * - * @param array1 one array to be compared with. - * @param array2 another array to be compared with. - * @param count the length of items to be copied. - * @return true if the given arrays' contents are equal, or if the arrays are - * identical (pointers are equal). - */ - static UBool arrayCompare(const UnicodeString* array1, - const UnicodeString* array2, - int32_t count); - - /** - * Create a copy, in fZoneStrings, of the given zone strings array. The - * member variables fZoneStringsRowCount and fZoneStringsColCount should be - * set already by the caller. - */ - void createZoneStrings(const UnicodeString *const * otherStrings); - - /** - * Delete all the storage owned by this object. - */ - void dispose(void); - - /** - * Copy all of the other's data to this. - * @param other the object to be copied. - */ - void copyData(const DateFormatSymbols& other); - - /** - * Create zone strings array by locale if not yet available - */ - void initZoneStringsArray(void); - - /** - * Delete just the zone strings. - */ - void disposeZoneStrings(void); - - /** - * Returns the date format field index of the pattern character c, - * or UDAT_FIELD_COUNT if c is not a pattern character. - */ - static UDateFormatField U_EXPORT2 getPatternCharIndex(char16_t c); - - /** - * Returns TRUE if f (with its pattern character repeated count times) is a numeric field. - */ - static UBool U_EXPORT2 isNumericField(UDateFormatField f, int32_t count); - - /** - * Returns TRUE if c (repeated count times) is the pattern character for a numeric field. - */ - static UBool U_EXPORT2 isNumericPatternChar(char16_t c, int32_t count); -public: -#ifndef U_HIDE_INTERNAL_API - /** - * Gets a DateFormatSymbols by locale. - * Unlike the constructors which always use gregorian calendar, this - * method uses the calendar in the locale. If the locale contains no - * explicit calendar, this method uses the default calendar for that - * locale. - * @param locale the locale. - * @param status error returned here. - * @return the new DateFormatSymbols which the caller owns. - * @internal For ICU use only. - */ - static DateFormatSymbols * U_EXPORT2 createForLocale( - const Locale &locale, UErrorCode &status); - - /** - * Apple addition - * Get whether to capitalize based on usage. - * @param usage the usage. - * @param context 0 for menu, 1 for standalone - * @return TRUE to capitalize, FALSE otherwise - * @internal For ICU use only. - */ - UBool capitalizeForUsage(ECapitalizationContextUsageType usage, int32_t context) const; -#endif /* U_HIDE_INTERNAL_API */ -}; - -inline UBool -DateFormatSymbols::capitalizeForUsage(DateFormatSymbols::ECapitalizationContextUsageType usage, int32_t context) const -{ - return fCapitalization[usage][context]; -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _DTFMTSYM -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtintrv.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtintrv.h deleted file mode 100644 index cc6b988f68..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtintrv.h +++ /dev/null @@ -1,162 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2008-2009, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************************* -* -* File DTINTRV.H -* -******************************************************************************* -*/ - -#ifndef __DTINTRV_H__ -#define __DTINTRV_H__ - -#include "unicode/utypes.h" -#include "unicode/uobject.h" - -/** - * \file - * \brief C++ API: Date Interval data type - */ - - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - - -/** - * This class represents a date interval. - * It is a pair of UDate representing from UDate 1 to UDate 2. - * @stable ICU 4.0 -**/ -class U_COMMON_API DateInterval : public UObject { -public: - - /** - * Construct a DateInterval given a from date and a to date. - * @param fromDate The from date in date interval. - * @param toDate The to date in date interval. - * @stable ICU 4.0 - */ - DateInterval(UDate fromDate, UDate toDate); - - /** - * destructor - * @stable ICU 4.0 - */ - virtual ~DateInterval(); - - /** - * Get the from date. - * @return the from date in dateInterval. - * @stable ICU 4.0 - */ - inline UDate getFromDate() const; - - /** - * Get the to date. - * @return the to date in dateInterval. - * @stable ICU 4.0 - */ - inline UDate getToDate() const; - - - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *

-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       derived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 4.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 4.0 - */ - virtual UClassID getDynamicClassID(void) const; - - - /** - * Copy constructor. - * @stable ICU 4.0 - */ - DateInterval(const DateInterval& other); - - /** - * Default assignment operator - * @stable ICU 4.0 - */ - DateInterval& operator=(const DateInterval&); - - /** - * Equality operator. - * @return TRUE if the two DateIntervals are the same - * @stable ICU 4.0 - */ - virtual UBool operator==(const DateInterval& other) const; - - /** - * Non-equality operator - * @return TRUE if the two DateIntervals are not the same - * @stable ICU 4.0 - */ - inline UBool operator!=(const DateInterval& other) const; - - - /** - * clone this object. - * The caller owns the result and should delete it when done. - * @return a cloned DateInterval - * @stable ICU 4.0 - */ - virtual DateInterval* clone() const; - -private: - /** - * Default constructor, not implemented. - */ - DateInterval(); - - UDate fromDate; - UDate toDate; - -} ;// end class DateInterval - - -inline UDate -DateInterval::getFromDate() const { - return fromDate; -} - - -inline UDate -DateInterval::getToDate() const { - return toDate; -} - - -inline UBool -DateInterval::operator!=(const DateInterval& other) const { - return ( !operator==(other) ); -} - - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtitvfmt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtitvfmt.h deleted file mode 100644 index 46c3985bfc..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtitvfmt.h +++ /dev/null @@ -1,1207 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/******************************************************************************** -* Copyright (C) 2008-2016, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************************* -* -* File DTITVFMT.H -* -******************************************************************************* -*/ - -#ifndef __DTITVFMT_H__ -#define __DTITVFMT_H__ - - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Format and parse date interval in a language-independent manner. - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/ucal.h" -#include "unicode/smpdtfmt.h" -#include "unicode/dtintrv.h" -#include "unicode/dtitvinf.h" -#include "unicode/dtptngen.h" -#include "unicode/formattedvalue.h" -#include "unicode/udisplaycontext.h" -// Apple-specific -#include "unicode/udateintervalformat.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - - -class FormattedDateIntervalData; -class DateIntervalFormat; - -#ifndef U_HIDE_DRAFT_API -/** - * An immutable class containing the result of a date interval formatting operation. - * - * Instances of this class are immutable and thread-safe. - * - * When calling nextPosition(): - * The fields are returned from left to right. The special field category - * UFIELD_CATEGORY_DATE_INTERVAL_SPAN is used to indicate which datetime - * primitives came from which arguments: 0 means fromCalendar, and 1 means - * toCalendar. The span category will always occur before the - * corresponding fields in UFIELD_CATEGORY_DATE - * in the nextPosition() iterator. - * - * Not intended for public subclassing. - * - * @draft ICU 64 - */ -class U_I18N_API FormattedDateInterval : public UMemory, public FormattedValue { - public: - /** - * Default constructor; makes an empty FormattedDateInterval. - * @draft ICU 64 - */ - FormattedDateInterval() : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {} - - /** - * Move constructor: Leaves the source FormattedDateInterval in an undefined state. - * @draft ICU 64 - */ - FormattedDateInterval(FormattedDateInterval&& src) U_NOEXCEPT; - - /** - * Destruct an instance of FormattedDateInterval. - * @draft ICU 64 - */ - virtual ~FormattedDateInterval() U_OVERRIDE; - - /** Copying not supported; use move constructor instead. */ - FormattedDateInterval(const FormattedDateInterval&) = delete; - - /** Copying not supported; use move assignment instead. */ - FormattedDateInterval& operator=(const FormattedDateInterval&) = delete; - - /** - * Move assignment: Leaves the source FormattedDateInterval in an undefined state. - * @draft ICU 64 - */ - FormattedDateInterval& operator=(FormattedDateInterval&& src) U_NOEXCEPT; - - /** @copydoc FormattedValue::toString() */ - UnicodeString toString(UErrorCode& status) const U_OVERRIDE; - - /** @copydoc FormattedValue::toTempString() */ - UnicodeString toTempString(UErrorCode& status) const U_OVERRIDE; - - /** @copydoc FormattedValue::appendTo() */ - Appendable &appendTo(Appendable& appendable, UErrorCode& status) const U_OVERRIDE; - - /** @copydoc FormattedValue::nextPosition() */ - UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const U_OVERRIDE; - - private: - FormattedDateIntervalData *fData; - UErrorCode fErrorCode; - explicit FormattedDateInterval(FormattedDateIntervalData *results) - : fData(results), fErrorCode(U_ZERO_ERROR) {} - explicit FormattedDateInterval(UErrorCode errorCode) - : fData(nullptr), fErrorCode(errorCode) {} - friend class DateIntervalFormat; -}; -#endif /* U_HIDE_DRAFT_API */ - - -/** - * DateIntervalFormat is a class for formatting and parsing date - * intervals in a language-independent manner. - * Only formatting is supported, parsing is not supported. - * - *

- * Date interval means from one date to another date, - * for example, from "Jan 11, 2008" to "Jan 18, 2008". - * We introduced class DateInterval to represent it. - * DateInterval is a pair of UDate, which is - * the standard milliseconds since 24:00 GMT, Jan 1, 1970. - * - *

- * DateIntervalFormat formats a DateInterval into - * text as compactly as possible. - * For example, the date interval format from "Jan 11, 2008" to "Jan 18,. 2008" - * is "Jan 11-18, 2008" for English. - * And it parses text into DateInterval, - * although initially, parsing is not supported. - * - *

- * There is no structural information in date time patterns. - * For any punctuations and string literals inside a date time pattern, - * we do not know whether it is just a separator, or a prefix, or a suffix. - * Without such information, so, it is difficult to generate a sub-pattern - * (or super-pattern) by algorithm. - * So, formatting a DateInterval is pattern-driven. It is very - * similar to formatting in SimpleDateFormat. - * We introduce class DateIntervalInfo to save date interval - * patterns, similar to date time pattern in SimpleDateFormat. - * - *

- * Logically, the interval patterns are mappings - * from (skeleton, the_largest_different_calendar_field) - * to (date_interval_pattern). - * - *

- * A skeleton - *

    - *
  1. - * only keeps the field pattern letter and ignores all other parts - * in a pattern, such as space, punctuations, and string literals. - *
  2. - *
  3. - * hides the order of fields. - *
  4. - *
  5. - * might hide a field's pattern letter length. - *
  6. - *
- * - * For those non-digit calendar fields, the pattern letter length is - * important, such as MMM, MMMM, and MMMMM; EEE and EEEE, - * and the field's pattern letter length is honored. - * - * For the digit calendar fields, such as M or MM, d or dd, yy or yyyy, - * the field pattern length is ignored and the best match, which is defined - * in date time patterns, will be returned without honor the field pattern - * letter length in skeleton. - * - *

- * The calendar fields we support for interval formatting are: - * year, month, date, day-of-week, am-pm, hour, hour-of-day, minute, and second - * (though we do not currently have specific intervalFormat date for skeletons - * with seconds). - * Those calendar fields can be defined in the following order: - * year > month > date > hour (in day) > minute > second - * - * The largest different calendar fields between 2 calendars is the - * first different calendar field in above order. - * - * For example: the largest different calendar fields between "Jan 10, 2007" - * and "Feb 20, 2008" is year. - * - *

- * For other calendar fields, the compact interval formatting is not - * supported. And the interval format will be fall back to fall-back - * patterns, which is mostly "{date0} - {date1}". - * - *

- * There is a set of pre-defined static skeleton strings. - * There are pre-defined interval patterns for those pre-defined skeletons - * in locales' resource files. - * For example, for a skeleton UDAT_YEAR_ABBR_MONTH_DAY, which is "yMMMd", - * in en_US, if the largest different calendar field between date1 and date2 - * is "year", the date interval pattern is "MMM d, yyyy - MMM d, yyyy", - * such as "Jan 10, 2007 - Jan 10, 2008". - * If the largest different calendar field between date1 and date2 is "month", - * the date interval pattern is "MMM d - MMM d, yyyy", - * such as "Jan 10 - Feb 10, 2007". - * If the largest different calendar field between date1 and date2 is "day", - * the date interval pattern is "MMM d-d, yyyy", such as "Jan 10-20, 2007". - * - * For date skeleton, the interval patterns when year, or month, or date is - * different are defined in resource files. - * For time skeleton, the interval patterns when am/pm, or hour, or minute is - * different are defined in resource files. - * - *

- * If a skeleton is not found in a locale's DateIntervalInfo, which means - * the interval patterns for the skeleton is not defined in resource file, - * the interval pattern will falls back to the interval "fallback" pattern - * defined in resource file. - * If the interval "fallback" pattern is not defined, the default fall-back - * is "{date0} - {data1}". - * - *

- * For the combination of date and time, - * The rule to generate interval patterns are: - *

    - *
  1. - * when the year, month, or day differs, falls back to fall-back - * interval pattern, which mostly is the concatenate the two original - * expressions with a separator between, - * For example, interval pattern from "Jan 10, 2007 10:10 am" - * to "Jan 11, 2007 10:10am" is - * "Jan 10, 2007 10:10 am - Jan 11, 2007 10:10am" - *
  2. - *
  3. - * otherwise, present the date followed by the range expression - * for the time. - * For example, interval pattern from "Jan 10, 2007 10:10 am" - * to "Jan 10, 2007 11:10am" is "Jan 10, 2007 10:10 am - 11:10am" - *
  4. - *
- * - * - *

- * If two dates are the same, the interval pattern is the single date pattern. - * For example, interval pattern from "Jan 10, 2007" to "Jan 10, 2007" is - * "Jan 10, 2007". - * - * Or if the presenting fields between 2 dates have the exact same values, - * the interval pattern is the single date pattern. - * For example, if user only requests year and month, - * the interval pattern from "Jan 10, 2007" to "Jan 20, 2007" is "Jan 2007". - * - *

- * DateIntervalFormat needs the following information for correct - * formatting: time zone, calendar type, pattern, date format symbols, - * and date interval patterns. - * It can be instantiated in 2 ways: - *

    - *
  1. - * create an instance using default or given locale plus given skeleton. - * Users are encouraged to created date interval formatter this way and - * to use the pre-defined skeleton macros, such as - * UDAT_YEAR_NUM_MONTH, which consists the calendar fields and - * the format style. - *
  2. - *
  3. - * create an instance using default or given locale plus given skeleton - * plus a given DateIntervalInfo. - * This factory method is for powerful users who want to provide their own - * interval patterns. - * Locale provides the timezone, calendar, and format symbols information. - * Local plus skeleton provides full pattern information. - * DateIntervalInfo provides the date interval patterns. - *
  4. - *
- * - *

- * For the calendar field pattern letter, such as G, y, M, d, a, h, H, m, s etc. - * DateIntervalFormat uses the same syntax as that of - * DateTime format. - * - *

- * Code Sample: general usage - *

- * \code
- *   // the date interval object which the DateIntervalFormat formats on
- *   // and parses into
- *   DateInterval*  dtInterval = new DateInterval(1000*3600*24, 1000*3600*24*2);
- *   UErrorCode status = U_ZERO_ERROR;
- *   DateIntervalFormat* dtIntervalFmt = DateIntervalFormat::createInstance(
- *                           UDAT_YEAR_MONTH_DAY,
- *                           Locale("en", "GB", ""), status);
- *   UnicodeUnicodeString dateIntervalString;
- *   FieldPosition pos = 0;
- *   // formatting
- *   dtIntervalFmt->format(dtInterval, dateIntervalUnicodeString, pos, status);
- *   delete dtIntervalFmt;
- * \endcode
- * 
- */ -class U_I18N_API DateIntervalFormat : public Format { -public: - - /** - * Construct a DateIntervalFormat from skeleton and the default locale. - * - * This is a convenient override of - * createInstance(const UnicodeString& skeleton, const Locale& locale, - * UErrorCode&) - * with the value of locale as default locale. - * - * @param skeleton the skeleton on which interval format based. - * @param status output param set to success/failure code on exit - * @return a date time interval formatter which the caller owns. - * @stable ICU 4.0 - */ - static DateIntervalFormat* U_EXPORT2 createInstance( - const UnicodeString& skeleton, - UErrorCode& status); - - /** - * Construct a DateIntervalFormat from skeleton and a given locale. - *

- * In this factory method, - * the date interval pattern information is load from resource files. - * Users are encouraged to created date interval formatter this way and - * to use the pre-defined skeleton macros. - * - *

- * There are pre-defined skeletons (defined in udate.h) having predefined - * interval patterns in resource files. - * Users are encouraged to use those macros. - * For example: - * DateIntervalFormat::createInstance(UDAT_MONTH_DAY, status) - * - * The given Locale provides the interval patterns. - * For example, for en_GB, if skeleton is UDAT_YEAR_ABBR_MONTH_WEEKDAY_DAY, - * which is "yMMMEEEd", - * the interval patterns defined in resource file to above skeleton are: - * "EEE, d MMM, yyyy - EEE, d MMM, yyyy" for year differs, - * "EEE, d MMM - EEE, d MMM, yyyy" for month differs, - * "EEE, d - EEE, d MMM, yyyy" for day differs, - * @param skeleton the skeleton on which the interval format is based. - * @param locale the given locale - * @param status output param set to success/failure code on exit - * @return a date time interval formatter which the caller owns. - * @stable ICU 4.0 - *

- *

Sample code

- * \snippet samples/dtitvfmtsample/dtitvfmtsample.cpp dtitvfmtPreDefined1 - * \snippet samples/dtitvfmtsample/dtitvfmtsample.cpp dtitvfmtPreDefined - *

- */ - - static DateIntervalFormat* U_EXPORT2 createInstance( - const UnicodeString& skeleton, - const Locale& locale, - UErrorCode& status); - - /** - * Construct a DateIntervalFormat from skeleton - * DateIntervalInfo, and default locale. - * - * This is a convenient override of - * createInstance(const UnicodeString& skeleton, const Locale& locale, - * const DateIntervalInfo& dtitvinf, UErrorCode&) - * with the locale value as default locale. - * - * @param skeleton the skeleton on which interval format based. - * @param dtitvinf the DateIntervalInfo object. - * @param status output param set to success/failure code on exit - * @return a date time interval formatter which the caller owns. - * @stable ICU 4.0 - */ - static DateIntervalFormat* U_EXPORT2 createInstance( - const UnicodeString& skeleton, - const DateIntervalInfo& dtitvinf, - UErrorCode& status); - - /** - * Construct a DateIntervalFormat from skeleton - * a DateIntervalInfo, and the given locale. - * - *

- * In this factory method, user provides its own date interval pattern - * information, instead of using those pre-defined data in resource file. - * This factory method is for powerful users who want to provide their own - * interval patterns. - *

- * There are pre-defined skeletons (defined in udate.h) having predefined - * interval patterns in resource files. - * Users are encouraged to use those macros. - * For example: - * DateIntervalFormat::createInstance(UDAT_MONTH_DAY, status) - * - * The DateIntervalInfo provides the interval patterns. - * and the DateIntervalInfo ownership remains to the caller. - * - * User are encouraged to set default interval pattern in DateIntervalInfo - * as well, if they want to set other interval patterns ( instead of - * reading the interval patterns from resource files). - * When the corresponding interval pattern for a largest calendar different - * field is not found ( if user not set it ), interval format fallback to - * the default interval pattern. - * If user does not provide default interval pattern, it fallback to - * "{date0} - {date1}" - * - * @param skeleton the skeleton on which interval format based. - * @param locale the given locale - * @param dtitvinf the DateIntervalInfo object. - * @param status output param set to success/failure code on exit - * @return a date time interval formatter which the caller owns. - * @stable ICU 4.0 - *

- *

Sample code

- * \snippet samples/dtitvfmtsample/dtitvfmtsample.cpp dtitvfmtPreDefined1 - * \snippet samples/dtitvfmtsample/dtitvfmtsample.cpp dtitvfmtCustomized - *

- */ - static DateIntervalFormat* U_EXPORT2 createInstance( - const UnicodeString& skeleton, - const Locale& locale, - const DateIntervalInfo& dtitvinf, - UErrorCode& status); - - /** - * Destructor. - * @stable ICU 4.0 - */ - virtual ~DateIntervalFormat(); - - /** - * Clone this Format object polymorphically. The caller owns the result and - * should delete it when done. - * @return A copy of the object. - * @stable ICU 4.0 - */ - virtual Format* clone(void) const; - - /** - * Return true if the given Format objects are semantically equal. Objects - * of different subclasses are considered unequal. - * @param other the object to be compared with. - * @return true if the given Format objects are semantically equal. - * @stable ICU 4.0 - */ - virtual UBool operator==(const Format& other) const; - - /** - * Return true if the given Format objects are not semantically equal. - * Objects of different subclasses are considered unequal. - * @param other the object to be compared with. - * @return true if the given Format objects are not semantically equal. - * @stable ICU 4.0 - */ - UBool operator!=(const Format& other) const; - - - using Format::format; - - /** - * Format an object to produce a string. This method handles Formattable - * objects with a DateInterval type. - * If a the Formattable object type is not a DateInterval, - * then it returns a failing UErrorCode. - * - * @param obj The object to format. - * Must be a DateInterval. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param fieldPosition On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * There may be multiple instances of a given field type - * in an interval format; in this case the fieldPosition - * offsets refer to the first instance. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.0 - */ - virtual UnicodeString& format(const Formattable& obj, - UnicodeString& appendTo, - FieldPosition& fieldPosition, - UErrorCode& status) const ; - - - - /** - * Format a DateInterval to produce a string. - * - * @param dtInterval DateInterval to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param fieldPosition On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * There may be multiple instances of a given field type - * in an interval format; in this case the fieldPosition - * offsets refer to the first instance. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.0 - */ - UnicodeString& format(const DateInterval* dtInterval, - UnicodeString& appendTo, - FieldPosition& fieldPosition, - UErrorCode& status) const ; - -#ifndef U_HIDE_DRAFT_API - /** - * Format a DateInterval to produce a FormattedDateInterval. - * - * The FormattedDateInterval exposes field information about the formatted string. - * - * @param dtInterval DateInterval to be formatted. - * @param status Set if an error occurs. - * @return A FormattedDateInterval containing the format result. - * @draft ICU 64 - */ - FormattedDateInterval formatToValue( - const DateInterval& dtInterval, - UErrorCode& status) const; -#endif /* U_HIDE_DRAFT_API */ - - /** - * Format 2 Calendars to produce a string. - * - * Note: "fromCalendar" and "toCalendar" are not const, - * since calendar is not const in SimpleDateFormat::format(Calendar&), - * - * @param fromCalendar calendar set to the from date in date interval - * to be formatted into date interval string - * @param toCalendar calendar set to the to date in date interval - * to be formatted into date interval string - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param fieldPosition On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * There may be multiple instances of a given field type - * in an interval format; in this case the fieldPosition - * offsets refer to the first instance. - * @param status Output param filled with success/failure status. - * Caller needs to make sure it is SUCCESS - * at the function entrance - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.0 - */ - UnicodeString& format(Calendar& fromCalendar, - Calendar& toCalendar, - UnicodeString& appendTo, - FieldPosition& fieldPosition, - UErrorCode& status) const ; - -#ifndef U_HIDE_DRAFT_API - /** - * Format 2 Calendars to produce a FormattedDateInterval. - * - * The FormattedDateInterval exposes field information about the formatted string. - * - * Note: "fromCalendar" and "toCalendar" are not const, - * since calendar is not const in SimpleDateFormat::format(Calendar&), - * - * @param fromCalendar calendar set to the from date in date interval - * to be formatted into date interval string - * @param toCalendar calendar set to the to date in date interval - * to be formatted into date interval string - * @param status Set if an error occurs. - * @return A FormattedDateInterval containing the format result. - * @draft ICU 64 - */ - FormattedDateInterval formatToValue( - Calendar& fromCalendar, - Calendar& toCalendar, - UErrorCode& status) const; -#endif /* U_HIDE_DRAFT_API */ - - /** - * Date interval parsing is not supported. Please do not use. - *

- * This method should handle parsing of - * date time interval strings into Formattable objects with - * DateInterval type, which is a pair of UDate. - *

- * Before calling, set parse_pos.index to the offset you want to start - * parsing at in the source. After calling, parse_pos.index is the end of - * the text you parsed. If error occurs, index is unchanged. - *

- * When parsing, leading whitespace is discarded (with a successful parse), - * while trailing whitespace is left as is. - *

- * See Format::parseObject() for more. - * - * @param source The string to be parsed into an object. - * @param result Formattable to be set to the parse result. - * If parse fails, return contents are undefined. - * @param parse_pos The position to start parsing at. Since no parsing - * is supported, upon return this param is unchanged. - * @return A newly created Formattable* object, or NULL - * on failure. The caller owns this and should - * delete it when done. - * @internal ICU 4.0 - */ - virtual void parseObject(const UnicodeString& source, - Formattable& result, - ParsePosition& parse_pos) const; - - - /** - * Gets the date time interval patterns. - * @return the date time interval patterns associated with - * this date interval formatter. - * @stable ICU 4.0 - */ - const DateIntervalInfo* getDateIntervalInfo(void) const; - - - /** - * Set the date time interval patterns. - * @param newIntervalPatterns the given interval patterns to copy. - * @param status output param set to success/failure code on exit - * @stable ICU 4.0 - */ - void setDateIntervalInfo(const DateIntervalInfo& newIntervalPatterns, - UErrorCode& status); - - - /** - * Gets the date formatter. The DateIntervalFormat instance continues to own - * the returned DateFormatter object, and will use and possibly modify it - * during format operations. In a multi-threaded environment, the returned - * DateFormat can only be used if it is certain that no other threads are - * concurrently using this DateIntervalFormatter, even for nominally const - * functions. - * - * @return the date formatter associated with this date interval formatter. - * @stable ICU 4.0 - */ - const DateFormat* getDateFormat(void) const; - - /** - * Returns a reference to the TimeZone used by this DateIntervalFormat's calendar. - * @return the time zone associated with the calendar of DateIntervalFormat. - * @stable ICU 4.8 - */ - virtual const TimeZone& getTimeZone(void) const; - - /** - * Sets the time zone for the calendar used by this DateIntervalFormat object. The - * caller no longer owns the TimeZone object and should not delete it after this call. - * @param zoneToAdopt the TimeZone to be adopted. - * @stable ICU 4.8 - */ - virtual void adoptTimeZone(TimeZone* zoneToAdopt); - - /** - * Sets the time zone for the calendar used by this DateIntervalFormat object. - * @param zone the new time zone. - * @stable ICU 4.8 - */ - virtual void setTimeZone(const TimeZone& zone); - - /** - * Change attributes for the DateIntervalFormat object. - * @param attr - * The attribute to change. - * @param value - * The new value for the attribute. - * @param status - * A UErrorCode to receive any errors. - * @internal - */ - virtual void setAttribute(UDateIntervalFormatAttribute attr, - UDateIntervalFormatAttributeValue value, - UErrorCode &status); - - /** - * Set a particular UDisplayContext value in the formatter, such as - * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. This causes the formatted - * result to be capitalized appropriately for the context in which - * it is intended to be used, considering both the locale and the - * type of field at the beginning of the formatted result. - * @param value The UDisplayContext value to set. - * @param status Input/output status. If at entry this indicates a failure - * status, the function will do nothing; otherwise this will be - * updated with any new status from the function. - * @draft ICU 65 - */ - virtual void setContext(UDisplayContext value, UErrorCode& status); - - /** - * Get the formatter's UDisplayContext value for the specified UDisplayContextType, - * such as UDISPCTX_TYPE_CAPITALIZATION. - * @param type The UDisplayContextType whose value to return - * @param status Input/output status. If at entry this indicates a failure - * status, the function will do nothing; otherwise this will be - * updated with any new status from the function. - * @return The UDisplayContextValue for the specified type. - * @draft ICU 65 - */ - virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const; - - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *

-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 4.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 4.0 - */ - virtual UClassID getDynamicClassID(void) const; - -protected: - - /** - * Copy constructor. - * @stable ICU 4.0 - */ - DateIntervalFormat(const DateIntervalFormat&); - - /** - * Assignment operator. - * @stable ICU 4.0 - */ - DateIntervalFormat& operator=(const DateIntervalFormat&); - -private: - - /* - * This is for ICU internal use only. Please do not use. - * Save the interval pattern information. - * Interval pattern consists of 2 single date patterns and the separator. - * For example, interval pattern "MMM d - MMM d, yyyy" consists - * a single date pattern "MMM d", another single date pattern "MMM d, yyyy", - * and a separator "-". - * The pattern is divided into 2 parts. For above example, - * the first part is "MMM d - ", and the second part is "MMM d, yyyy". - * Also, the first date appears in an interval pattern could be - * the earlier date or the later date. - * And such information is saved in the interval pattern as well. - */ - struct PatternInfo { - UnicodeString firstPart; - UnicodeString secondPart; - /** - * Whether the first date in interval pattern is later date or not. - * Fallback format set the default ordering. - * And for a particular interval pattern, the order can be - * overriden by prefixing the interval pattern with "latestFirst:" or - * "earliestFirst:" - * For example, given 2 date, Jan 10, 2007 to Feb 10, 2007. - * if the fallback format is "{0} - {1}", - * and the pattern is "d MMM - d MMM yyyy", the interval format is - * "10 Jan - 10 Feb, 2007". - * If the pattern is "latestFirst:d MMM - d MMM yyyy", - * the interval format is "10 Feb - 10 Jan, 2007" - */ - UBool laterDateFirst; - }; - - - /** - * default constructor - * @internal (private) - */ - DateIntervalFormat(); - - /** - * Construct a DateIntervalFormat from DateFormat, - * a DateIntervalInfo, and skeleton. - * DateFormat provides the timezone, calendar, - * full pattern, and date format symbols information. - * It should be a SimpleDateFormat object which - * has a pattern in it. - * the DateIntervalInfo provides the interval patterns. - * - * Note: the DateIntervalFormat takes ownership of both - * DateFormat and DateIntervalInfo objects. - * Caller should not delete them. - * - * @param locale the locale of this date interval formatter. - * @param dtItvInfo the DateIntervalInfo object to be adopted. - * @param skeleton the skeleton of the date formatter - * @param status output param set to success/failure code on exit - */ - DateIntervalFormat(const Locale& locale, DateIntervalInfo* dtItvInfo, - const UnicodeString* skeleton, UErrorCode& status); - - - /** - * Construct a DateIntervalFormat from DateFormat - * and a DateIntervalInfo. - * - * It is a wrapper of the constructor. - * - * @param locale the locale of this date interval formatter. - * @param dtitvinf the DateIntervalInfo object to be adopted. - * @param skeleton the skeleton of this formatter. - * @param status Output param set to success/failure code. - * @return a date time interval formatter which the caller owns. - */ - static DateIntervalFormat* U_EXPORT2 create(const Locale& locale, - DateIntervalInfo* dtitvinf, - const UnicodeString* skeleton, - UErrorCode& status); - - /** - * Below are for generating interval patterns local to the formatter - */ - - /** Like fallbackFormat, but only formats the range part of the fallback. */ - void fallbackFormatRange( - Calendar& fromCalendar, - Calendar& toCalendar, - UnicodeString& appendTo, - int8_t& firstIndex, - FieldPositionHandler& fphandler, - UErrorCode& status) const; - - /** - * Format 2 Calendars using fall-back interval pattern - * - * The full pattern used in this fall-back format is the - * full pattern of the date formatter. - * - * gFormatterMutex must already be locked when calling this function. - * - * @param fromCalendar calendar set to the from date in date interval - * to be formatted into date interval string - * @param toCalendar calendar set to the to date in date interval - * to be formatted into date interval string - * @param fromToOnSameDay TRUE iff from and to dates are on the same day - * (any difference is in ampm/hours or below) - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param firstIndex See formatImpl for more information. - * @param fphandler See formatImpl for more information. - * @param status output param set to success/failure code on exit - * @return Reference to 'appendTo' parameter. - * @internal (private) - */ - UnicodeString& fallbackFormat(Calendar& fromCalendar, - Calendar& toCalendar, - UBool fromToOnSameDay, - UnicodeString& appendTo, - int8_t& firstIndex, - FieldPositionHandler& fphandler, - UErrorCode& status) const; - - - - /** - * Initialize interval patterns locale to this formatter - * - * This code is a bit complicated since - * 1. the interval patterns saved in resource bundle files are interval - * patterns based on date or time only. - * It does not have interval patterns based on both date and time. - * Interval patterns on both date and time are algorithm generated. - * - * For example, it has interval patterns on skeleton "dMy" and "hm", - * but it does not have interval patterns on skeleton "dMyhm". - * - * The rule to generate interval patterns for both date and time skeleton are - * 1) when the year, month, or day differs, concatenate the two original - * expressions with a separator between, - * For example, interval pattern from "Jan 10, 2007 10:10 am" - * to "Jan 11, 2007 10:10am" is - * "Jan 10, 2007 10:10 am - Jan 11, 2007 10:10am" - * - * 2) otherwise, present the date followed by the range expression - * for the time. - * For example, interval pattern from "Jan 10, 2007 10:10 am" - * to "Jan 10, 2007 11:10am" is - * "Jan 10, 2007 10:10 am - 11:10am" - * - * 2. even a pattern does not request a certain calendar field, - * the interval pattern needs to include such field if such fields are - * different between 2 dates. - * For example, a pattern/skeleton is "hm", but the interval pattern - * includes year, month, and date when year, month, and date differs. - * - * - * @param status output param set to success/failure code on exit - */ - void initializePattern(UErrorCode& status); - - - - /** - * Set fall back interval pattern given a calendar field, - * a skeleton, and a date time pattern generator. - * @param field the largest different calendar field - * @param skeleton a skeleton - * @param status output param set to success/failure code on exit - */ - void setFallbackPattern(UCalendarDateFields field, - const UnicodeString& skeleton, - UErrorCode& status); - - - - /** - * get separated date and time skeleton from a combined skeleton. - * - * The difference between date skeleton and normalizedDateSkeleton are: - * 1. both 'y' and 'd' are appeared only once in normalizeDateSkeleton - * 2. 'E' and 'EE' are normalized into 'EEE' - * 3. 'MM' is normalized into 'M' - * - ** the difference between time skeleton and normalizedTimeSkeleton are: - * 1. both 'H' and 'h' are normalized as 'h' in normalized time skeleton, - * 2. 'a' is omitted in normalized time skeleton. - * 3. there is only one appearance for 'h', 'm','v', 'z' in normalized time - * skeleton - * - * - * @param skeleton given combined skeleton. - * @param date Output parameter for date only skeleton. - * @param normalizedDate Output parameter for normalized date only - * - * @param time Output parameter for time only skeleton. - * @param normalizedTime Output parameter for normalized time only - * skeleton. - * - */ - static void U_EXPORT2 getDateTimeSkeleton(const UnicodeString& skeleton, - UnicodeString& date, - UnicodeString& normalizedDate, - UnicodeString& time, - UnicodeString& normalizedTime); - - - - /** - * Generate date or time interval pattern from resource, - * and set them into the interval pattern locale to this formatter. - * - * It needs to handle the following: - * 1. need to adjust field width. - * For example, the interval patterns saved in DateIntervalInfo - * includes "dMMMy", but not "dMMMMy". - * Need to get interval patterns for dMMMMy from dMMMy. - * Another example, the interval patterns saved in DateIntervalInfo - * includes "hmv", but not "hmz". - * Need to get interval patterns for "hmz' from 'hmv' - * - * 2. there might be no pattern for 'y' differ for skeleton "Md", - * in order to get interval patterns for 'y' differ, - * need to look for it from skeleton 'yMd' - * - * @param dateSkeleton normalized date skeleton - * @param timeSkeleton normalized time skeleton - * @return whether the resource is found for the skeleton. - * TRUE if interval pattern found for the skeleton, - * FALSE otherwise. - */ - UBool setSeparateDateTimePtn(const UnicodeString& dateSkeleton, - const UnicodeString& timeSkeleton); - - - - - /** - * Generate interval pattern from existing resource - * - * It not only save the interval patterns, - * but also return the extended skeleton and its best match skeleton. - * - * @param field largest different calendar field - * @param skeleton skeleton - * @param bestSkeleton the best match skeleton which has interval pattern - * defined in resource - * @param differenceInfo the difference between skeleton and best skeleton - * 0 means the best matched skeleton is the same as input skeleton - * 1 means the fields are the same, but field width are different - * 2 means the only difference between fields are v/z, - * -1 means there are other fields difference - * - * @param extendedSkeleton extended skeleton - * @param extendedBestSkeleton extended best match skeleton - * @return whether the interval pattern is found - * through extending skeleton or not. - * TRUE if interval pattern is found by - * extending skeleton, FALSE otherwise. - */ - UBool setIntervalPattern(UCalendarDateFields field, - const UnicodeString* skeleton, - const UnicodeString* bestSkeleton, - int8_t differenceInfo, - UnicodeString* extendedSkeleton = NULL, - UnicodeString* extendedBestSkeleton = NULL); - - /** - * Adjust field width in best match interval pattern to match - * the field width in input skeleton. - * - * TODO (xji) make a general solution - * The adjusting rule can be: - * 1. always adjust - * 2. never adjust - * 3. default adjust, which means adjust according to the following rules - * 3.1 always adjust string, such as MMM and MMMM - * 3.2 never adjust between string and numeric, such as MM and MMM - * 3.3 always adjust year - * 3.4 do not adjust 'd', 'h', or 'm' if h presents - * 3.5 do not adjust 'M' if it is numeric(?) - * - * Since date interval format is well-formed format, - * date and time skeletons are normalized previously, - * till this stage, the adjust here is only "adjust strings, such as MMM - * and MMMM, EEE and EEEE. - * - * @param inputSkeleton the input skeleton - * @param bestMatchSkeleton the best match skeleton - * @param bestMatchIntervalPattern the best match interval pattern - * @param differenceInfo the difference between 2 skeletons - * 1 means only field width differs - * 2 means v/z exchange - * @param adjustedIntervalPattern adjusted interval pattern - */ - static void U_EXPORT2 adjustFieldWidth( - const UnicodeString& inputSkeleton, - const UnicodeString& bestMatchSkeleton, - const UnicodeString& bestMatchIntervalPattern, - int8_t differenceInfo, - UnicodeString& adjustedIntervalPattern); - - /** - * Concat a single date pattern with a time interval pattern, - * set it into the intervalPatterns, while field is time field. - * This is used to handle time interval patterns on skeleton with - * both time and date. Present the date followed by - * the range expression for the time. - * @param format date and time format - * @param datePattern date pattern - * @param field time calendar field: AM_PM, HOUR, MINUTE - * @param status output param set to success/failure code on exit - */ - void concatSingleDate2TimeInterval(UnicodeString& format, - const UnicodeString& datePattern, - UCalendarDateFields field, - UErrorCode& status); - - /** - * check whether a calendar field present in a skeleton. - * @param field calendar field need to check - * @param skeleton given skeleton on which to check the calendar field - * @return true if field present in a skeleton. - */ - static UBool U_EXPORT2 fieldExistsInSkeleton(UCalendarDateFields field, - const UnicodeString& skeleton); - - - /** - * Split interval patterns into 2 part. - * @param intervalPattern interval pattern - * @return the index in interval pattern which split the pattern into 2 part - */ - static int32_t U_EXPORT2 splitPatternInto2Part(const UnicodeString& intervalPattern); - - - /** - * Break interval patterns as 2 part and save them into pattern info. - * @param field calendar field - * @param intervalPattern interval pattern - */ - void setIntervalPattern(UCalendarDateFields field, - const UnicodeString& intervalPattern); - - - /** - * Break interval patterns as 2 part and save them into pattern info. - * @param field calendar field - * @param intervalPattern interval pattern - * @param laterDateFirst whether later date appear first in interval pattern - */ - void setIntervalPattern(UCalendarDateFields field, - const UnicodeString& intervalPattern, - UBool laterDateFirst); - - - /** - * Set pattern information. - * - * @param field calendar field - * @param firstPart the first part in interval pattern - * @param secondPart the second part in interval pattern - * @param laterDateFirst whether the first date in intervalPattern - * is earlier date or later date - */ - void setPatternInfo(UCalendarDateFields field, - const UnicodeString* firstPart, - const UnicodeString* secondPart, - UBool laterDateFirst); - - /** - * Format 2 Calendars to produce a string. - * Implementation of the similar public format function. - * Must be called with gFormatterMutex already locked. - * - * Note: "fromCalendar" and "toCalendar" are not const, - * since calendar is not const in SimpleDateFormat::format(Calendar&), - * - * @param fromCalendar calendar set to the from date in date interval - * to be formatted into date interval string - * @param toCalendar calendar set to the to date in date interval - * to be formatted into date interval string - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param firstIndex 0 if the first output date is fromCalendar; - * 1 if it corresponds to toCalendar; - * -1 if there is only one date printed. - * @param fphandler Handler for field position information. - * The fields will be from the UDateFormatField enum. - * @param status Output param filled with success/failure status. - * Caller needs to make sure it is SUCCESS - * at the function entrance - * @return Reference to 'appendTo' parameter. - * @internal (private) - */ - UnicodeString& formatImpl(Calendar& fromCalendar, - Calendar& toCalendar, - UnicodeString& appendTo, - int8_t& firstIndex, - FieldPositionHandler& fphandler, - UErrorCode& status) const ; - - /** Version of formatImpl for DateInterval. */ - UnicodeString& formatIntervalImpl(const DateInterval& dtInterval, - UnicodeString& appendTo, - int8_t& firstIndex, - FieldPositionHandler& fphandler, - UErrorCode& status) const; - - - // from calendar field to pattern letter - static const char16_t fgCalendarFieldToPatternLetter[]; - - - /** - * The interval patterns for this locale. - */ - DateIntervalInfo* fInfo; - - /** - * The DateFormat object used to format single pattern - */ - SimpleDateFormat* fDateFormat; - - /** - * The 2 calendars with the from and to date. - * could re-use the calendar in fDateFormat, - * but keeping 2 calendars make it clear and clean. - */ - Calendar* fFromCalendar; - Calendar* fToCalendar; - - Locale fLocale; - - /** - * Following are interval information relevant (locale) to this formatter. - */ - UnicodeString fSkeleton; - PatternInfo fIntervalPatterns[DateIntervalInfo::kIPI_MAX_INDEX]; - - /** - * Patterns for fallback formatting. - */ - UnicodeString* fDatePattern; - UnicodeString* fTimePattern; - UnicodeString* fDateTimeFormat; - - /** - * Atttributes - */ - int32_t fMinimizeType; - - UDisplayContext fCapitalizationContext; -}; - -inline UBool -DateIntervalFormat::operator!=(const Format& other) const { - return !operator==(other); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _DTITVFMT_H__ -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtitvinf.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtitvinf.h deleted file mode 100644 index 0e8f534b73..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtitvinf.h +++ /dev/null @@ -1,521 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * Copyright (C) 2008-2016, International Business Machines Corporation and - * others. All Rights Reserved. - ******************************************************************************* - * - * File DTITVINF.H - * - ******************************************************************************* - */ - -#ifndef __DTITVINF_H__ -#define __DTITVINF_H__ - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Date/Time interval patterns for formatting date/time interval - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/udat.h" -#include "unicode/locid.h" -#include "unicode/ucal.h" -#include "unicode/dtptngen.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * DateIntervalInfo is a public class for encapsulating localizable - * date time interval patterns. It is used by DateIntervalFormat. - * - *

- * For most users, ordinary use of DateIntervalFormat does not need to create - * DateIntervalInfo object directly. - * DateIntervalFormat will take care of it when creating a date interval - * formatter when user pass in skeleton and locale. - * - *

- * For power users, who want to create their own date interval patterns, - * or want to re-set date interval patterns, they could do so by - * directly creating DateIntervalInfo and manupulating it. - * - *

- * Logically, the interval patterns are mappings - * from (skeleton, the_largest_different_calendar_field) - * to (date_interval_pattern). - * - *

- * A skeleton - *

    - *
  1. - * only keeps the field pattern letter and ignores all other parts - * in a pattern, such as space, punctuations, and string literals. - *
  2. - * hides the order of fields. - *
  3. - * might hide a field's pattern letter length. - * - * For those non-digit calendar fields, the pattern letter length is - * important, such as MMM, MMMM, and MMMMM; EEE and EEEE, - * and the field's pattern letter length is honored. - * - * For the digit calendar fields, such as M or MM, d or dd, yy or yyyy, - * the field pattern length is ignored and the best match, which is defined - * in date time patterns, will be returned without honor the field pattern - * letter length in skeleton. - *
- * - *

- * The calendar fields we support for interval formatting are: - * year, month, date, day-of-week, am-pm, hour, hour-of-day, and minute. - * Those calendar fields can be defined in the following order: - * year > month > date > am-pm > hour > minute - * - * The largest different calendar fields between 2 calendars is the - * first different calendar field in above order. - * - * For example: the largest different calendar fields between "Jan 10, 2007" - * and "Feb 20, 2008" is year. - * - *

- * There is a set of pre-defined static skeleton strings. - * There are pre-defined interval patterns for those pre-defined skeletons - * in locales' resource files. - * For example, for a skeleton UDAT_YEAR_ABBR_MONTH_DAY, which is "yMMMd", - * in en_US, if the largest different calendar field between date1 and date2 - * is "year", the date interval pattern is "MMM d, yyyy - MMM d, yyyy", - * such as "Jan 10, 2007 - Jan 10, 2008". - * If the largest different calendar field between date1 and date2 is "month", - * the date interval pattern is "MMM d - MMM d, yyyy", - * such as "Jan 10 - Feb 10, 2007". - * If the largest different calendar field between date1 and date2 is "day", - * the date interval pattern is "MMM d-d, yyyy", such as "Jan 10-20, 2007". - * - * For date skeleton, the interval patterns when year, or month, or date is - * different are defined in resource files. - * For time skeleton, the interval patterns when am/pm, or hour, or minute is - * different are defined in resource files. - * - * - *

- * There are 2 dates in interval pattern. For most locales, the first date - * in an interval pattern is the earlier date. There might be a locale in which - * the first date in an interval pattern is the later date. - * We use fallback format for the default order for the locale. - * For example, if the fallback format is "{0} - {1}", it means - * the first date in the interval pattern for this locale is earlier date. - * If the fallback format is "{1} - {0}", it means the first date is the - * later date. - * For a particular interval pattern, the default order can be overriden - * by prefixing "latestFirst:" or "earliestFirst:" to the interval pattern. - * For example, if the fallback format is "{0}-{1}", - * but for skeleton "yMMMd", the interval pattern when day is different is - * "latestFirst:d-d MMM yy", it means by default, the first date in interval - * pattern is the earlier date. But for skeleton "yMMMd", when day is different, - * the first date in "d-d MMM yy" is the later date. - * - *

- * The recommended way to create a DateIntervalFormat object is to pass in - * the locale. - * By using a Locale parameter, the DateIntervalFormat object is - * initialized with the pre-defined interval patterns for a given or - * default locale. - *

- * Users can also create DateIntervalFormat object - * by supplying their own interval patterns. - * It provides flexibility for power users. - * - *

- * After a DateIntervalInfo object is created, clients may modify - * the interval patterns using setIntervalPattern function as so desired. - * Currently, users can only set interval patterns when the following - * calendar fields are different: ERA, YEAR, MONTH, DATE, DAY_OF_MONTH, - * DAY_OF_WEEK, AM_PM, HOUR, HOUR_OF_DAY, and MINUTE. - * Interval patterns when other calendar fields are different is not supported. - *

- * DateIntervalInfo objects are cloneable. - * When clients obtain a DateIntervalInfo object, - * they can feel free to modify it as necessary. - *

- * DateIntervalInfo are not expected to be subclassed. - * Data for a calendar is loaded out of resource bundles. - * Through ICU 4.4, date interval patterns are only supported in the Gregorian - * calendar; non-Gregorian calendars are supported from ICU 4.4.1. - * @stable ICU 4.0 -**/ -class U_I18N_API DateIntervalInfo U_FINAL : public UObject { -public: - /** - * Default constructor. - * It does not initialize any interval patterns except - * that it initialize default fall-back pattern as "{0} - {1}", - * which can be reset by setFallbackIntervalPattern(). - * It should be followed by setFallbackIntervalPattern() and - * setIntervalPattern(), - * and is recommended to be used only for power users who - * wants to create their own interval patterns and use them to create - * date interval formatter. - * @param status output param set to success/failure code on exit - * @internal ICU 4.0 - */ - DateIntervalInfo(UErrorCode& status); - - - /** - * Construct DateIntervalInfo for the given locale, - * @param locale the interval patterns are loaded from the appropriate calendar - * data (specified calendar or default calendar) in this locale. - * @param status output param set to success/failure code on exit - * @stable ICU 4.0 - */ - DateIntervalInfo(const Locale& locale, UErrorCode& status); - - - /** - * Copy constructor. - * @stable ICU 4.0 - */ - DateIntervalInfo(const DateIntervalInfo&); - - /** - * Assignment operator - * @stable ICU 4.0 - */ - DateIntervalInfo& operator=(const DateIntervalInfo&); - - /** - * Clone this object polymorphically. - * The caller owns the result and should delete it when done. - * @return a copy of the object - * @stable ICU 4.0 - */ - virtual DateIntervalInfo* clone(void) const; - - /** - * Destructor. - * It is virtual to be safe, but it is not designed to be subclassed. - * @stable ICU 4.0 - */ - virtual ~DateIntervalInfo(); - - - /** - * Return true if another object is semantically equal to this one. - * - * @param other the DateIntervalInfo object to be compared with. - * @return true if other is semantically equal to this. - * @stable ICU 4.0 - */ - virtual UBool operator==(const DateIntervalInfo& other) const; - - /** - * Return true if another object is semantically unequal to this one. - * - * @param other the DateIntervalInfo object to be compared with. - * @return true if other is semantically unequal to this. - * @stable ICU 4.0 - */ - UBool operator!=(const DateIntervalInfo& other) const; - - - - /** - * Provides a way for client to build interval patterns. - * User could construct DateIntervalInfo by providing a list of skeletons - * and their patterns. - *

- * For example: - *

-     * UErrorCode status = U_ZERO_ERROR;
-     * DateIntervalInfo dIntervalInfo = new DateIntervalInfo();
-     * dIntervalInfo->setFallbackIntervalPattern("{0} ~ {1}");
-     * dIntervalInfo->setIntervalPattern("yMd", UCAL_YEAR, "'from' yyyy-M-d 'to' yyyy-M-d", status);
-     * dIntervalInfo->setIntervalPattern("yMMMd", UCAL_MONTH, "'from' yyyy MMM d 'to' MMM d", status);
-     * dIntervalInfo->setIntervalPattern("yMMMd", UCAL_DAY, "yyyy MMM d-d", status, status);
-     * 
- * - * Restriction: - * Currently, users can only set interval patterns when the following - * calendar fields are different: ERA, YEAR, MONTH, DATE, DAY_OF_MONTH, - * DAY_OF_WEEK, AM_PM, HOUR, HOUR_OF_DAY, and MINUTE. - * Interval patterns when other calendar fields are different are - * not supported. - * - * @param skeleton the skeleton on which interval pattern based - * @param lrgDiffCalUnit the largest different calendar unit. - * @param intervalPattern the interval pattern on the largest different - * calendar unit. - * For example, if lrgDiffCalUnit is - * "year", the interval pattern for en_US when year - * is different could be "'from' yyyy 'to' yyyy". - * @param status output param set to success/failure code on exit - * @stable ICU 4.0 - */ - void setIntervalPattern(const UnicodeString& skeleton, - UCalendarDateFields lrgDiffCalUnit, - const UnicodeString& intervalPattern, - UErrorCode& status); - - /** - * Get the interval pattern given skeleton and - * the largest different calendar field. - * @param skeleton the skeleton - * @param field the largest different calendar field - * @param result output param to receive the pattern - * @param status output param set to success/failure code on exit - * @return a reference to 'result' - * @stable ICU 4.0 - */ - UnicodeString& getIntervalPattern(const UnicodeString& skeleton, - UCalendarDateFields field, - UnicodeString& result, - UErrorCode& status) const; - - /** - * Get the fallback interval pattern. - * @param result output param to receive the pattern - * @return a reference to 'result' - * @stable ICU 4.0 - */ - UnicodeString& getFallbackIntervalPattern(UnicodeString& result) const; - - - /** - * Re-set the fallback interval pattern. - * - * In construction, default fallback pattern is set as "{0} - {1}". - * And constructor taking locale as parameter will set the - * fallback pattern as what defined in the locale resource file. - * - * This method provides a way for user to replace the fallback pattern. - * - * @param fallbackPattern fall-back interval pattern. - * @param status output param set to success/failure code on exit - * @stable ICU 4.0 - */ - void setFallbackIntervalPattern(const UnicodeString& fallbackPattern, - UErrorCode& status); - - - /** Get default order -- whether the first date in pattern is later date - or not. - * return default date ordering in interval pattern. TRUE if the first date - * in pattern is later date, FALSE otherwise. - * @stable ICU 4.0 - */ - UBool getDefaultOrder() const; - - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 4.0 - */ - virtual UClassID getDynamicClassID() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 4.0 - */ - static UClassID U_EXPORT2 getStaticClassID(); - - -private: - /** - * DateIntervalFormat will need access to - * getBestSkeleton(), parseSkeleton(), enum IntervalPatternIndex, - * and calendarFieldToPatternIndex(). - * - * Instead of making above public, - * make DateIntervalFormat a friend of DateIntervalInfo. - */ - friend class DateIntervalFormat; - - /** - * Internal struct used to load resource bundle data. - */ - struct DateIntervalSink; - - /** - * Following is for saving the interval patterns. - * We only support interval patterns on - * ERA, YEAR, MONTH, DAY, AM_PM, HOUR, and MINUTE - */ - enum IntervalPatternIndex - { - kIPI_ERA, - kIPI_YEAR, - kIPI_MONTH, - kIPI_DATE, - kIPI_AM_PM, - kIPI_HOUR, - kIPI_MINUTE, - kIPI_SECOND, - kIPI_MAX_INDEX - }; -public: -#ifndef U_HIDE_INTERNAL_API - /** - * Max index for stored interval patterns - * @internal ICU 4.4 - */ - enum { - kMaxIntervalPatternIndex = kIPI_MAX_INDEX - }; -#endif /* U_HIDE_INTERNAL_API */ -private: - - - /** - * Initialize the DateIntervalInfo from locale - * @param locale the given locale. - * @param status output param set to success/failure code on exit - */ - void initializeData(const Locale& locale, UErrorCode& status); - - - /* Set Interval pattern. - * - * It sets interval pattern into the hash map. - * - * @param skeleton skeleton on which the interval pattern based - * @param lrgDiffCalUnit the largest different calendar unit. - * @param intervalPattern the interval pattern on the largest different - * calendar unit. - * @param status output param set to success/failure code on exit - */ - void setIntervalPatternInternally(const UnicodeString& skeleton, - UCalendarDateFields lrgDiffCalUnit, - const UnicodeString& intervalPattern, - UErrorCode& status); - - - /**given an input skeleton, get the best match skeleton - * which has pre-defined interval pattern in resource file. - * Also return the difference between the input skeleton - * and the best match skeleton. - * - * TODO (xji): set field weight or - * isolate the funtionality in DateTimePatternGenerator - * @param skeleton input skeleton - * @param bestMatchDistanceInfo the difference between input skeleton - * and best match skeleton. - * 0, if there is exact match for input skeleton - * 1, if there is only field width difference between - * the best match and the input skeleton - * 2, the only field difference is 'v' and 'z' - * -1, if there is calendar field difference between - * the best match and the input skeleton - * @return best match skeleton - */ - const UnicodeString* getBestSkeleton(const UnicodeString& skeleton, - int8_t& bestMatchDistanceInfo) const; - - - /** - * Parse skeleton, save each field's width. - * It is used for looking for best match skeleton, - * and adjust pattern field width. - * @param skeleton skeleton to be parsed - * @param skeletonFieldWidth parsed skeleton field width - */ - static void U_EXPORT2 parseSkeleton(const UnicodeString& skeleton, - int32_t* skeletonFieldWidth); - - - /** - * Check whether one field width is numeric while the other is string. - * - * TODO (xji): make it general - * - * @param fieldWidth one field width - * @param anotherFieldWidth another field width - * @param patternLetter pattern letter char - * @return true if one field width is numeric and the other is string, - * false otherwise. - */ - static UBool U_EXPORT2 stringNumeric(int32_t fieldWidth, - int32_t anotherFieldWidth, - char patternLetter); - - - /** - * Convert calendar field to the interval pattern index in - * hash table. - * - * Since we only support the following calendar fields: - * ERA, YEAR, MONTH, DATE, DAY_OF_MONTH, DAY_OF_WEEK, - * AM_PM, HOUR, HOUR_OF_DAY, and MINUTE, - * We reserve only 4 interval patterns for a skeleton. - * - * @param field calendar field - * @param status output param set to success/failure code on exit - * @return interval pattern index in hash table - */ - static IntervalPatternIndex U_EXPORT2 calendarFieldToIntervalIndex( - UCalendarDateFields field, - UErrorCode& status); - - - /** - * delete hash table (of type fIntervalPatterns). - * - * @param hTable hash table to be deleted - */ - void deleteHash(Hashtable* hTable); - - - /** - * initialize hash table (of type fIntervalPatterns). - * - * @param status output param set to success/failure code on exit - * @return hash table initialized - */ - Hashtable* initHash(UErrorCode& status); - - - - /** - * copy hash table (of type fIntervalPatterns). - * - * @param source the source to copy from - * @param target the target to copy to - * @param status output param set to success/failure code on exit - */ - void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status); - - - // data members - // fallback interval pattern - UnicodeString fFallbackIntervalPattern; - // default order - UBool fFirstDateInPtnIsLaterDate; - - // HashMap - // HashMap( skeleton, pattern[largest_different_field] ) - Hashtable* fIntervalPatterns; - -};// end class DateIntervalInfo - - -inline UBool -DateIntervalInfo::operator!=(const DateIntervalInfo& other) const { - return !operator==(other); -} - - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif - -#endif - diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtptngen.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtptngen.h deleted file mode 100644 index 0803fc0830..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtptngen.h +++ /dev/null @@ -1,593 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2007-2016, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************************* -* -* File DTPTNGEN.H -* -******************************************************************************* -*/ - -#ifndef __DTPTNGEN_H__ -#define __DTPTNGEN_H__ - -#include "unicode/datefmt.h" -#include "unicode/locid.h" -#include "unicode/udat.h" -#include "unicode/udatpg.h" -#include "unicode/unistr.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * \file - * \brief C++ API: Date/Time Pattern Generator - */ - - -class CharString; -class Hashtable; -class FormatParser; -class DateTimeMatcher; -class DistanceInfo; -class PatternMap; -class PtnSkeleton; -class SharedDateTimePatternGenerator; - -/** - * This class provides flexible generation of date format patterns, like "yy-MM-dd". - * The user can build up the generator by adding successive patterns. Once that - * is done, a query can be made using a "skeleton", which is a pattern which just - * includes the desired fields and lengths. The generator will return the "best fit" - * pattern corresponding to that skeleton. - *

The main method people will use is getBestPattern(String skeleton), - * since normally this class is pre-built with data from a particular locale. - * However, generators can be built directly from other data as well. - *

Issue: may be useful to also have a function that returns the list of - * fields in a pattern, in order, since we have that internally. - * That would be useful for getting the UI order of field elements. - * @stable ICU 3.8 -**/ -class U_I18N_API DateTimePatternGenerator : public UObject { -public: - /** - * Construct a flexible generator according to default locale. - * @param status Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @stable ICU 3.8 - */ - static DateTimePatternGenerator* U_EXPORT2 createInstance(UErrorCode& status); - - /** - * Construct a flexible generator according to data for a given locale. - * @param uLocale - * @param status Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @stable ICU 3.8 - */ - static DateTimePatternGenerator* U_EXPORT2 createInstance(const Locale& uLocale, UErrorCode& status, UBool skipICUData = FALSE); - -#ifndef U_HIDE_INTERNAL_API - - /** - * For ICU use only - * - * @internal - */ - static DateTimePatternGenerator* U_EXPORT2 internalMakeInstance(const Locale& uLocale, UErrorCode& status); - -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Create an empty generator, to be constructed with addPattern(...) etc. - * @param status Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @stable ICU 3.8 - */ - static DateTimePatternGenerator* U_EXPORT2 createEmptyInstance(UErrorCode& status); - - /** - * Destructor. - * @stable ICU 3.8 - */ - virtual ~DateTimePatternGenerator(); - - /** - * Clone DateTimePatternGenerator object. Clients are responsible for - * deleting the DateTimePatternGenerator object cloned. - * @stable ICU 3.8 - */ - DateTimePatternGenerator* clone() const; - - /** - * Return true if another object is semantically equal to this one. - * - * @param other the DateTimePatternGenerator object to be compared with. - * @return true if other is semantically equal to this. - * @stable ICU 3.8 - */ - UBool operator==(const DateTimePatternGenerator& other) const; - - /** - * Return true if another object is semantically unequal to this one. - * - * @param other the DateTimePatternGenerator object to be compared with. - * @return true if other is semantically unequal to this. - * @stable ICU 3.8 - */ - UBool operator!=(const DateTimePatternGenerator& other) const; - - /** - * Utility to return a unique skeleton from a given pattern. For example, - * both "MMM-dd" and "dd/MMM" produce the skeleton "MMMdd". - * - * @param pattern Input pattern, such as "dd/MMM" - * @param status Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @return skeleton such as "MMMdd" - * @stable ICU 56 - */ - static UnicodeString staticGetSkeleton(const UnicodeString& pattern, UErrorCode& status); - - /** - * Utility to return a unique skeleton from a given pattern. For example, - * both "MMM-dd" and "dd/MMM" produce the skeleton "MMMdd". - * getSkeleton() works exactly like staticGetSkeleton(). - * Use staticGetSkeleton() instead of getSkeleton(). - * - * @param pattern Input pattern, such as "dd/MMM" - * @param status Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @return skeleton such as "MMMdd" - * @stable ICU 3.8 - */ - UnicodeString getSkeleton(const UnicodeString& pattern, UErrorCode& status); /* { - The function is commented out because it is a stable API calling a draft API. - After staticGetSkeleton becomes stable, staticGetSkeleton can be used and - these comments and the definition of getSkeleton in dtptngen.cpp should be removed. - return staticGetSkeleton(pattern, status); - }*/ - - /** - * Utility to return a unique base skeleton from a given pattern. This is - * the same as the skeleton, except that differences in length are minimized - * so as to only preserve the difference between string and numeric form. So - * for example, both "MMM-dd" and "d/MMM" produce the skeleton "MMMd" - * (notice the single d). - * - * @param pattern Input pattern, such as "dd/MMM" - * @param status Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @return base skeleton, such as "MMMd" - * @stable ICU 56 - */ - static UnicodeString staticGetBaseSkeleton(const UnicodeString& pattern, UErrorCode& status); - - /** - * Utility to return a unique base skeleton from a given pattern. This is - * the same as the skeleton, except that differences in length are minimized - * so as to only preserve the difference between string and numeric form. So - * for example, both "MMM-dd" and "d/MMM" produce the skeleton "MMMd" - * (notice the single d). - * getBaseSkeleton() works exactly like staticGetBaseSkeleton(). - * Use staticGetBaseSkeleton() instead of getBaseSkeleton(). - * - * @param pattern Input pattern, such as "dd/MMM" - * @param status Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @return base skeleton, such as "MMMd" - * @stable ICU 3.8 - */ - UnicodeString getBaseSkeleton(const UnicodeString& pattern, UErrorCode& status); /* { - The function is commented out because it is a stable API calling a draft API. - After staticGetBaseSkeleton becomes stable, staticGetBaseSkeleton can be used and - these comments and the definition of getBaseSkeleton in dtptngen.cpp should be removed. - return staticGetBaseSkeleton(pattern, status); - }*/ - - /** - * Adds a pattern to the generator. If the pattern has the same skeleton as - * an existing pattern, and the override parameter is set, then the previous - * value is overriden. Otherwise, the previous value is retained. In either - * case, the conflicting status is set and previous vale is stored in - * conflicting pattern. - *

- * Note that single-field patterns (like "MMM") are automatically added, and - * don't need to be added explicitly! - * - * @param pattern Input pattern, such as "dd/MMM" - * @param override When existing values are to be overridden use true, - * otherwise use false. - * @param conflictingPattern Previous pattern with the same skeleton. - * @param status Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @return conflicting status. The value could be UDATPG_NO_CONFLICT, - * UDATPG_BASE_CONFLICT or UDATPG_CONFLICT. - * @stable ICU 3.8 - *

- *

Sample code

- * \snippet samples/dtptngsample/dtptngsample.cpp getBestPatternExample1 - * \snippet samples/dtptngsample/dtptngsample.cpp addPatternExample - *

- */ - UDateTimePatternConflict addPattern(const UnicodeString& pattern, - UBool override, - UnicodeString& conflictingPattern, - UErrorCode& status); - - /** - * An AppendItem format is a pattern used to append a field if there is no - * good match. For example, suppose that the input skeleton is "GyyyyMMMd", - * and there is no matching pattern internally, but there is a pattern - * matching "yyyyMMMd", say "d-MM-yyyy". Then that pattern is used, plus the - * G. The way these two are conjoined is by using the AppendItemFormat for G - * (era). So if that value is, say "{0}, {1}" then the final resulting - * pattern is "d-MM-yyyy, G". - *

- * There are actually three available variables: {0} is the pattern so far, - * {1} is the element we are adding, and {2} is the name of the element. - *

- * This reflects the way that the CLDR data is organized. - * - * @param field such as UDATPG_ERA_FIELD. - * @param value pattern, such as "{0}, {1}" - * @stable ICU 3.8 - */ - void setAppendItemFormat(UDateTimePatternField field, const UnicodeString& value); - - /** - * Getter corresponding to setAppendItemFormat. Values below 0 or at or - * above UDATPG_FIELD_COUNT are illegal arguments. - * - * @param field such as UDATPG_ERA_FIELD. - * @return append pattern for field - * @stable ICU 3.8 - */ - const UnicodeString& getAppendItemFormat(UDateTimePatternField field) const; - - /** - * Sets the names of field, eg "era" in English for ERA. These are only - * used if the corresponding AppendItemFormat is used, and if it contains a - * {2} variable. - *

- * This reflects the way that the CLDR data is organized. - * - * @param field such as UDATPG_ERA_FIELD. - * @param value name of the field - * @stable ICU 3.8 - */ - void setAppendItemName(UDateTimePatternField field, const UnicodeString& value); - - /** - * Getter corresponding to setAppendItemNames. Values below 0 or at or above - * UDATPG_FIELD_COUNT are illegal arguments. Note: The more general method - * for getting date/time field display names is getFieldDisplayName. - * - * @param field such as UDATPG_ERA_FIELD. - * @return name for field - * @see getFieldDisplayName - * @stable ICU 3.8 - */ - const UnicodeString& getAppendItemName(UDateTimePatternField field) const; - - /** - * The general interface to get a display name for a particular date/time field, - * in one of several possible display widths. - * - * @param field The desired UDateTimePatternField, such as UDATPG_ERA_FIELD. - * @param width The desired UDateTimePGDisplayWidth, such as UDATPG_ABBREVIATED. - * @return. The display name for field - * @stable ICU 61 - */ - UnicodeString getFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width) const; - - /** - * The DateTimeFormat is a message format pattern used to compose date and - * time patterns. The default pattern in the root locale is "{1} {0}", where - * {1} will be replaced by the date pattern and {0} will be replaced by the - * time pattern; however, other locales may specify patterns such as - * "{1}, {0}" or "{1} 'at' {0}", etc. - *

- * This is used when the input skeleton contains both date and time fields, - * but there is not a close match among the added patterns. For example, - * suppose that this object was created by adding "dd-MMM" and "hh:mm", and - * its datetimeFormat is the default "{1} {0}". Then if the input skeleton - * is "MMMdhmm", there is not an exact match, so the input skeleton is - * broken up into two components "MMMd" and "hmm". There are close matches - * for those two skeletons, so the result is put together with this pattern, - * resulting in "d-MMM h:mm". - * - * @param dateTimeFormat - * message format pattern, here {1} will be replaced by the date - * pattern and {0} will be replaced by the time pattern. - * @stable ICU 3.8 - */ - void setDateTimeFormat(const UnicodeString& dateTimeFormat); - - /** - * Getter corresponding to setDateTimeFormat. - * @return DateTimeFormat. - * @stable ICU 3.8 - */ - const UnicodeString& getDateTimeFormat() const; - - /** - * Return the best pattern matching the input skeleton. It is guaranteed to - * have all of the fields in the skeleton. - * - * @param skeleton - * The skeleton is a pattern containing only the variable fields. - * For example, "MMMdd" and "mmhh" are skeletons. - * @param status Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @return bestPattern - * The best pattern found from the given skeleton. - * @stable ICU 3.8 - *

- *

Sample code

- * \snippet samples/dtptngsample/dtptngsample.cpp getBestPatternExample1 - * \snippet samples/dtptngsample/dtptngsample.cpp getBestPatternExample - *

- */ - UnicodeString getBestPattern(const UnicodeString& skeleton, UErrorCode& status); - - - /** - * Return the best pattern matching the input skeleton. It is guaranteed to - * have all of the fields in the skeleton. - * - * @param skeleton - * The skeleton is a pattern containing only the variable fields. - * For example, "MMMdd" and "mmhh" are skeletons. - * @param options - * Options for forcing the length of specified fields in the - * returned pattern to match those in the skeleton (when this - * would not happen otherwise). For default behavior, use - * UDATPG_MATCH_NO_OPTIONS. - * @param status - * Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @return bestPattern - * The best pattern found from the given skeleton. - * @stable ICU 4.4 - */ - UnicodeString getBestPattern(const UnicodeString& skeleton, - UDateTimePatternMatchOptions options, - UErrorCode& status); - - - /** - * Adjusts the field types (width and subtype) of a pattern to match what is - * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a - * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be - * "dd-MMMM hh:mm". This is used internally to get the best match for the - * input skeleton, but can also be used externally. - * - * @param pattern Input pattern - * @param skeleton - * The skeleton is a pattern containing only the variable fields. - * For example, "MMMdd" and "mmhh" are skeletons. - * @param status Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @return pattern adjusted to match the skeleton fields widths and subtypes. - * @stable ICU 3.8 - *

- *

Sample code

- * \snippet samples/dtptngsample/dtptngsample.cpp getBestPatternExample1 - * \snippet samples/dtptngsample/dtptngsample.cpp replaceFieldTypesExample - *

- */ - UnicodeString replaceFieldTypes(const UnicodeString& pattern, - const UnicodeString& skeleton, - UErrorCode& status); - - /** - * Adjusts the field types (width and subtype) of a pattern to match what is - * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a - * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be - * "dd-MMMM hh:mm". This is used internally to get the best match for the - * input skeleton, but can also be used externally. - * - * @param pattern Input pattern - * @param skeleton - * The skeleton is a pattern containing only the variable fields. - * For example, "MMMdd" and "mmhh" are skeletons. - * @param options - * Options controlling whether the length of specified fields in the - * pattern are adjusted to match those in the skeleton (when this - * would not happen otherwise). For default behavior, use - * UDATPG_MATCH_NO_OPTIONS. - * @param status - * Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @return pattern adjusted to match the skeleton fields widths and subtypes. - * @stable ICU 4.4 - */ - UnicodeString replaceFieldTypes(const UnicodeString& pattern, - const UnicodeString& skeleton, - UDateTimePatternMatchOptions options, - UErrorCode& status); - - /** - * Return a list of all the skeletons (in canonical form) from this class. - * - * Call getPatternForSkeleton() to get the corresponding pattern. - * - * @param status Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @return StringEnumeration with the skeletons. - * The caller must delete the object. - * @stable ICU 3.8 - */ - StringEnumeration* getSkeletons(UErrorCode& status) const; - - /** - * Get the pattern corresponding to a given skeleton. - * @param skeleton - * @return pattern corresponding to a given skeleton. - * @stable ICU 3.8 - */ - const UnicodeString& getPatternForSkeleton(const UnicodeString& skeleton) const; - - /** - * Return a list of all the base skeletons (in canonical form) from this class. - * - * @param status Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @return a StringEnumeration with the base skeletons. - * The caller must delete the object. - * @stable ICU 3.8 - */ - StringEnumeration* getBaseSkeletons(UErrorCode& status) const; - -#ifndef U_HIDE_INTERNAL_API - /** - * Return a list of redundant patterns are those which if removed, make no - * difference in the resulting getBestPattern values. This method returns a - * list of them, to help check the consistency of the patterns used to build - * this generator. - * - * @param status Output param set to success/failure code on exit, - * which must not indicate a failure before the function call. - * @return a StringEnumeration with the redundant pattern. - * The caller must delete the object. - * @internal ICU 3.8 - */ - StringEnumeration* getRedundants(UErrorCode& status); -#endif /* U_HIDE_INTERNAL_API */ - - /** - * The decimal value is used in formatting fractions of seconds. If the - * skeleton contains fractional seconds, then this is used with the - * fractional seconds. For example, suppose that the input pattern is - * "hhmmssSSSS", and the best matching pattern internally is "H:mm:ss", and - * the decimal string is ",". Then the resulting pattern is modified to be - * "H:mm:ss,SSSS" - * - * @param decimal - * @stable ICU 3.8 - */ - void setDecimal(const UnicodeString& decimal); - - /** - * Getter corresponding to setDecimal. - * @return UnicodeString corresponding to the decimal point - * @stable ICU 3.8 - */ - const UnicodeString& getDecimal() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 3.8 - */ - virtual UClassID getDynamicClassID() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 3.8 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - -private: - /** - * Constructor. - */ - DateTimePatternGenerator(UErrorCode & status); - - /** - * Constructor. - */ - DateTimePatternGenerator(const Locale& locale, UErrorCode & status, UBool skipICUData = FALSE); - - /** - * Copy constructor. - * @param other DateTimePatternGenerator to copy - */ - DateTimePatternGenerator(const DateTimePatternGenerator& other); - - /** - * Default assignment operator. - * @param other DateTimePatternGenerator to copy - */ - DateTimePatternGenerator& operator=(const DateTimePatternGenerator& other); - - // TODO(ticket:13619): re-enable when UDATPG_NARROW no longer in draft mode. - // static const int32_t UDATPG_WIDTH_COUNT = UDATPG_NARROW + 1; - - Locale pLocale; // pattern locale - FormatParser *fp; - DateTimeMatcher* dtMatcher; - DistanceInfo *distanceInfo; - PatternMap *patternMap; - UnicodeString appendItemFormats[UDATPG_FIELD_COUNT]; - // TODO(ticket:13619): [3] -> UDATPG_WIDTH_COUNT - UnicodeString fieldDisplayNames[UDATPG_FIELD_COUNT][3]; - UnicodeString dateTimeFormat; - UnicodeString decimal; - DateTimeMatcher *skipMatcher; - Hashtable *fAvailableFormatKeyHash; - UnicodeString emptyString; - char16_t fDefaultHourFormatChar; - - int32_t fAllowedHourFormats[7]; // Actually an array of AllowedHourFormat enum type, ending with UNKNOWN. - - // Internal error code used for recording/reporting errors that occur during methods that do not - // have a UErrorCode parameter. For example: the Copy Constructor, or the ::clone() method. - // When this is set to an error the object is in an invalid state. - UErrorCode internalErrorCode; - - /* internal flags masks for adjustFieldTypes etc. */ - enum { - kDTPGNoFlags = 0, - kDTPGFixFractionalSeconds = 1, - kDTPGSkeletonUsesCapJ = 2 - // with #13183, no longer need flags for b, B - }; - - void initData(const Locale &locale, UErrorCode &status, UBool skipICUData = FALSE); - void addCanonicalItems(UErrorCode &status); - void addICUPatterns(const Locale& locale, UErrorCode& status); - void hackTimes(const UnicodeString& hackPattern, UErrorCode& status); - void getCalendarTypeToUse(const Locale& locale, CharString& destination, UErrorCode& err); - void consumeShortTimePattern(const UnicodeString& shortTimePattern, UErrorCode& status); - void addCLDRData(const Locale& locale, UErrorCode& status); - UDateTimePatternConflict addPatternWithSkeleton(const UnicodeString& pattern, const UnicodeString * skeletonToUse, UBool override, UnicodeString& conflictingPattern, UErrorCode& status); - void initHashtable(UErrorCode& status); - void setDateTimeFromCalendar(const Locale& locale, UErrorCode& status); - void setDecimalSymbols(const Locale& locale, UErrorCode& status); - UDateTimePatternField getAppendFormatNumber(const char* field) const; -#ifndef U_HIDE_DRAFT_API - // The following three have to be U_HIDE_DRAFT_API (though private) because UDateTimePGDisplayWidth is - UDateTimePatternField getFieldAndWidthIndices(const char* key, UDateTimePGDisplayWidth* widthP) const; - void setFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width, const UnicodeString& value); - UnicodeString& getMutableFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width); -#endif // U_HIDE_DRAFT_API - void getAppendName(UDateTimePatternField field, UnicodeString& value); - UnicodeString mapSkeletonMetacharacters(const UnicodeString& patternForm, int32_t* flags, UDateTimePatternMatchOptions options, UErrorCode& status); - int32_t getCanonicalIndex(const UnicodeString& field); - const UnicodeString* getBestRaw(DateTimeMatcher& source, int32_t includeMask, DistanceInfo* missingFields, UErrorCode& status, const PtnSkeleton** specifiedSkeletonPtr = 0); - UnicodeString adjustFieldTypes(const UnicodeString& pattern, const PtnSkeleton* specifiedSkeleton, int32_t flags, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS); - UnicodeString getBestAppending(int32_t missingFields, int32_t flags, UErrorCode& status, UDateTimePatternMatchOptions options = UDATPG_MATCH_NO_OPTIONS); - int32_t getTopBitNumber(int32_t foundMask) const; - void setAvailableFormat(const UnicodeString &key, UErrorCode& status); - UBool isAvailableFormatSet(const UnicodeString &key) const; - void copyHashtable(Hashtable *other, UErrorCode &status); - UBool isCanonicalItem(const UnicodeString& item) const; - static void U_CALLCONV loadAllowedHourFormatsData(UErrorCode &status); - void getAllowedHourFormats(const Locale &locale, UErrorCode &status); - - struct AppendItemFormatsSink; - struct AppendItemNamesSink; - struct AvailableFormatsSink; -} ;// end class DateTimePatternGenerator - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtrule.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtrule.h deleted file mode 100644 index 3a1f5d6040..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/dtrule.h +++ /dev/null @@ -1,254 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2007-2008, International Business Machines Corporation and * -* others. All Rights Reserved. * -******************************************************************************* -*/ -#ifndef DTRULE_H -#define DTRULE_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Rule for specifying date and time in an year - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/uobject.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN -/** - * DateTimeRule is a class representing a time in a year by - * a rule specified by month, day of month, day of week and - * time in the day. - * - * @stable ICU 3.8 - */ -class U_I18N_API DateTimeRule : public UObject { -public: - - /** - * Date rule type constants. - * @stable ICU 3.8 - */ - enum DateRuleType { - DOM = 0, /**< The exact day of month, - for example, March 11. */ - DOW, /**< The Nth occurence of the day of week, - for example, 2nd Sunday in March. */ - DOW_GEQ_DOM, /**< The first occurence of the day of week on or after the day of monnth, - for example, first Sunday on or after March 8. */ - DOW_LEQ_DOM /**< The last occurence of the day of week on or before the day of month, - for example, first Sunday on or before March 14. */ - }; - - /** - * Time rule type constants. - * @stable ICU 3.8 - */ - enum TimeRuleType { - WALL_TIME = 0, /**< The local wall clock time */ - STANDARD_TIME, /**< The local standard time */ - UTC_TIME /**< The UTC time */ - }; - - /** - * Constructs a DateTimeRule by the day of month and - * the time rule. The date rule type for an instance created by - * this constructor is DOM. - * - * @param month The rule month, for example, Calendar::JANUARY - * @param dayOfMonth The day of month, 1-based. - * @param millisInDay The milliseconds in the rule date. - * @param timeType The time type, WALL_TIME or STANDARD_TIME - * or UTC_TIME. - * @stable ICU 3.8 - */ - DateTimeRule(int32_t month, int32_t dayOfMonth, - int32_t millisInDay, TimeRuleType timeType); - - /** - * Constructs a DateTimeRule by the day of week and its oridinal - * number and the time rule. The date rule type for an instance created - * by this constructor is DOW. - * - * @param month The rule month, for example, Calendar::JANUARY. - * @param weekInMonth The ordinal number of the day of week. Negative number - * may be used for specifying a rule date counted from the - * end of the rule month. - * @param dayOfWeek The day of week, for example, Calendar::SUNDAY. - * @param millisInDay The milliseconds in the rule date. - * @param timeType The time type, WALL_TIME or STANDARD_TIME - * or UTC_TIME. - * @stable ICU 3.8 - */ - DateTimeRule(int32_t month, int32_t weekInMonth, int32_t dayOfWeek, - int32_t millisInDay, TimeRuleType timeType); - - /** - * Constructs a DateTimeRule by the first/last day of week - * on or after/before the day of month and the time rule. The date rule - * type for an instance created by this constructor is either - * DOM_GEQ_DOM or DOM_LEQ_DOM. - * - * @param month The rule month, for example, Calendar::JANUARY - * @param dayOfMonth The day of month, 1-based. - * @param dayOfWeek The day of week, for example, Calendar::SUNDAY. - * @param after true if the rule date is on or after the day of month. - * @param millisInDay The milliseconds in the rule date. - * @param timeType The time type, WALL_TIME or STANDARD_TIME - * or UTC_TIME. - * @stable ICU 3.8 - */ - DateTimeRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, UBool after, - int32_t millisInDay, TimeRuleType timeType); - - /** - * Copy constructor. - * @param source The DateTimeRule object to be copied. - * @stable ICU 3.8 - */ - DateTimeRule(const DateTimeRule& source); - - /** - * Destructor. - * @stable ICU 3.8 - */ - ~DateTimeRule(); - - /** - * Clone this DateTimeRule object polymorphically. The caller owns the result and - * should delete it when done. - * @return A copy of the object. - * @stable ICU 3.8 - */ - DateTimeRule* clone(void) const; - - /** - * Assignment operator. - * @param right The object to be copied. - * @stable ICU 3.8 - */ - DateTimeRule& operator=(const DateTimeRule& right); - - /** - * Return true if the given DateTimeRule objects are semantically equal. Objects - * of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given DateTimeRule objects are semantically equal. - * @stable ICU 3.8 - */ - UBool operator==(const DateTimeRule& that) const; - - /** - * Return true if the given DateTimeRule objects are semantically unequal. Objects - * of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given DateTimeRule objects are semantically unequal. - * @stable ICU 3.8 - */ - UBool operator!=(const DateTimeRule& that) const; - - /** - * Gets the date rule type, such as DOM - * @return The date rule type. - * @stable ICU 3.8 - */ - DateRuleType getDateRuleType(void) const; - - /** - * Gets the time rule type - * @return The time rule type, either WALL_TIME or STANDARD_TIME - * or UTC_TIME. - * @stable ICU 3.8 - */ - TimeRuleType getTimeRuleType(void) const; - - /** - * Gets the rule month. - * @return The rule month. - * @stable ICU 3.8 - */ - int32_t getRuleMonth(void) const; - - /** - * Gets the rule day of month. When the date rule type - * is DOW, the value is always 0. - * @return The rule day of month - * @stable ICU 3.8 - */ - int32_t getRuleDayOfMonth(void) const; - - /** - * Gets the rule day of week. When the date rule type - * is DOM, the value is always 0. - * @return The rule day of week. - * @stable ICU 3.8 - */ - int32_t getRuleDayOfWeek(void) const; - - /** - * Gets the ordinal number of the occurence of the day of week - * in the month. When the date rule type is not DOW, - * the value is always 0. - * @return The rule day of week ordinal number in the month. - * @stable ICU 3.8 - */ - int32_t getRuleWeekInMonth(void) const; - - /** - * Gets the rule time in the rule day. - * @return The time in the rule day in milliseconds. - * @stable ICU 3.8 - */ - int32_t getRuleMillisInDay(void) const; - -private: - int32_t fMonth; - int32_t fDayOfMonth; - int32_t fDayOfWeek; - int32_t fWeekInMonth; - int32_t fMillisInDay; - DateRuleType fDateRuleType; - TimeRuleType fTimeRuleType; - -public: - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *

-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 3.8 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 3.8 - */ - virtual UClassID getDynamicClassID(void) const; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // DTRULE_H -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/edits.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/edits.h deleted file mode 100644 index 14ee94db28..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/edits.h +++ /dev/null @@ -1,528 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html - -// edits.h -// created: 2016dec30 Markus W. Scherer - -#ifndef __EDITS_H__ -#define __EDITS_H__ - -#include "unicode/utypes.h" -#include "unicode/uobject.h" - -/** - * \file - * \brief C++ API: C++ class Edits for low-level string transformations on styled text. - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class UnicodeString; - -/** - * Records lengths of string edits but not replacement text. Supports replacements, insertions, deletions - * in linear progression. Does not support moving/reordering of text. - * - * There are two types of edits: change edits and no-change edits. Add edits to - * instances of this class using {@link #addReplace(int32_t, int32_t)} (for change edits) and - * {@link #addUnchanged(int32_t)} (for no-change edits). Change edits are retained with full granularity, - * whereas adjacent no-change edits are always merged together. In no-change edits, there is a one-to-one - * mapping between code points in the source and destination strings. - * - * After all edits have been added, instances of this class should be considered immutable, and an - * {@link Edits::Iterator} can be used for queries. - * - * There are four flavors of Edits::Iterator: - * - *
    - *
  • {@link #getFineIterator()} retains full granularity of change edits. - *
  • {@link #getFineChangesIterator()} retains full granularity of change edits, and when calling - * next() on the iterator, skips over no-change edits (unchanged regions). - *
  • {@link #getCoarseIterator()} treats adjacent change edits as a single edit. (Adjacent no-change - * edits are automatically merged during the construction phase.) - *
  • {@link #getCoarseChangesIterator()} treats adjacent change edits as a single edit, and when - * calling next() on the iterator, skips over no-change edits (unchanged regions). - *
- * - * For example, consider the string "abcßDeF", which case-folds to "abcssdef". This string has the - * following fine edits: - *
    - *
  • abc ⇨ abc (no-change) - *
  • ß ⇨ ss (change) - *
  • D ⇨ d (change) - *
  • e ⇨ e (no-change) - *
  • F ⇨ f (change) - *
- * and the following coarse edits (note how adjacent change edits get merged together): - *
    - *
  • abc ⇨ abc (no-change) - *
  • ßD ⇨ ssd (change) - *
  • e ⇨ e (no-change) - *
  • F ⇨ f (change) - *
- * - * The "fine changes" and "coarse changes" iterators will step through only the change edits when their - * `Edits::Iterator::next()` methods are called. They are identical to the non-change iterators when - * their `Edits::Iterator::findSourceIndex()` or `Edits::Iterator::findDestinationIndex()` - * methods are used to walk through the string. - * - * For examples of how to use this class, see the test `TestCaseMapEditsIteratorDocs` in - * UCharacterCaseTest.java. - * - * An Edits object tracks a separate UErrorCode, but ICU string transformation functions - * (e.g., case mapping functions) merge any such errors into their API's UErrorCode. - * - * @stable ICU 59 - */ -class U_COMMON_API Edits U_FINAL : public UMemory { -public: - /** - * Constructs an empty object. - * @stable ICU 59 - */ - Edits() : - array(stackArray), capacity(STACK_CAPACITY), length(0), delta(0), numChanges(0), - errorCode_(U_ZERO_ERROR) {} - /** - * Copy constructor. - * @param other source edits - * @stable ICU 60 - */ - Edits(const Edits &other) : - array(stackArray), capacity(STACK_CAPACITY), length(other.length), - delta(other.delta), numChanges(other.numChanges), - errorCode_(other.errorCode_) { - copyArray(other); - } - /** - * Move constructor, might leave src empty. - * This object will have the same contents that the source object had. - * @param src source edits - * @stable ICU 60 - */ - Edits(Edits &&src) U_NOEXCEPT : - array(stackArray), capacity(STACK_CAPACITY), length(src.length), - delta(src.delta), numChanges(src.numChanges), - errorCode_(src.errorCode_) { - moveArray(src); - } - - /** - * Destructor. - * @stable ICU 59 - */ - ~Edits(); - - /** - * Assignment operator. - * @param other source edits - * @return *this - * @stable ICU 60 - */ - Edits &operator=(const Edits &other); - - /** - * Move assignment operator, might leave src empty. - * This object will have the same contents that the source object had. - * The behavior is undefined if *this and src are the same object. - * @param src source edits - * @return *this - * @stable ICU 60 - */ - Edits &operator=(Edits &&src) U_NOEXCEPT; - - /** - * Resets the data but may not release memory. - * @stable ICU 59 - */ - void reset() U_NOEXCEPT; - - /** - * Adds a no-change edit: a record for an unchanged segment of text. - * Normally called from inside ICU string transformation functions, not user code. - * @stable ICU 59 - */ - void addUnchanged(int32_t unchangedLength); - /** - * Adds a change edit: a record for a text replacement/insertion/deletion. - * Normally called from inside ICU string transformation functions, not user code. - * @stable ICU 59 - */ - void addReplace(int32_t oldLength, int32_t newLength); - /** - * Sets the UErrorCode if an error occurred while recording edits. - * Preserves older error codes in the outErrorCode. - * Normally called from inside ICU string transformation functions, not user code. - * @param outErrorCode Set to an error code if it does not contain one already - * and an error occurred while recording edits. - * Otherwise unchanged. - * @return TRUE if U_FAILURE(outErrorCode) - * @stable ICU 59 - */ - UBool copyErrorTo(UErrorCode &outErrorCode); - - /** - * How much longer is the new text compared with the old text? - * @return new length minus old length - * @stable ICU 59 - */ - int32_t lengthDelta() const { return delta; } - /** - * @return TRUE if there are any change edits - * @stable ICU 59 - */ - UBool hasChanges() const { return numChanges != 0; } - - /** - * @return the number of change edits - * @stable ICU 60 - */ - int32_t numberOfChanges() const { return numChanges; } - - /** - * Access to the list of edits. - * - * At any moment in time, an instance of this class points to a single edit: a "window" into a span - * of the source string and the corresponding span of the destination string. The source string span - * starts at {@link #sourceIndex()} and runs for {@link #oldLength()} chars; the destination string - * span starts at {@link #destinationIndex()} and runs for {@link #newLength()} chars. - * - * The iterator can be moved between edits using the `next()`, `findSourceIndex(int32_t, UErrorCode &)`, - * and `findDestinationIndex(int32_t, UErrorCode &)` methods. - * Calling any of these methods mutates the iterator to make it point to the corresponding edit. - * - * For more information, see the documentation for {@link Edits}. - * - * @see getCoarseIterator - * @see getFineIterator - * @stable ICU 59 - */ - struct U_COMMON_API Iterator U_FINAL : public UMemory { - /** - * Default constructor, empty iterator. - * @stable ICU 60 - */ - Iterator() : - array(nullptr), index(0), length(0), - remaining(0), onlyChanges_(FALSE), coarse(FALSE), - dir(0), changed(FALSE), oldLength_(0), newLength_(0), - srcIndex(0), replIndex(0), destIndex(0) {} - /** - * Copy constructor. - * @stable ICU 59 - */ - Iterator(const Iterator &other) = default; - /** - * Assignment operator. - * @stable ICU 59 - */ - Iterator &operator=(const Iterator &other) = default; - - /** - * Advances the iterator to the next edit. - * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, - * or else the function returns immediately. Check for U_FAILURE() - * on output or use with function chaining. (See User Guide for details.) - * @return TRUE if there is another edit - * @stable ICU 59 - */ - UBool next(UErrorCode &errorCode) { return next(onlyChanges_, errorCode); } - - /** - * Moves the iterator to the edit that contains the source index. - * The source index may be found in a no-change edit - * even if normal iteration would skip no-change edits. - * Normal iteration can continue from a found edit. - * - * The iterator state before this search logically does not matter. - * (It may affect the performance of the search.) - * - * The iterator state after this search is undefined - * if the source index is out of bounds for the source string. - * - * @param i source index - * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, - * or else the function returns immediately. Check for U_FAILURE() - * on output or use with function chaining. (See User Guide for details.) - * @return TRUE if the edit for the source index was found - * @stable ICU 59 - */ - UBool findSourceIndex(int32_t i, UErrorCode &errorCode) { - return findIndex(i, TRUE, errorCode) == 0; - } - - /** - * Moves the iterator to the edit that contains the destination index. - * The destination index may be found in a no-change edit - * even if normal iteration would skip no-change edits. - * Normal iteration can continue from a found edit. - * - * The iterator state before this search logically does not matter. - * (It may affect the performance of the search.) - * - * The iterator state after this search is undefined - * if the source index is out of bounds for the source string. - * - * @param i destination index - * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, - * or else the function returns immediately. Check for U_FAILURE() - * on output or use with function chaining. (See User Guide for details.) - * @return TRUE if the edit for the destination index was found - * @stable ICU 60 - */ - UBool findDestinationIndex(int32_t i, UErrorCode &errorCode) { - return findIndex(i, FALSE, errorCode) == 0; - } - - /** - * Computes the destination index corresponding to the given source index. - * If the source index is inside a change edit (not at its start), - * then the destination index at the end of that edit is returned, - * since there is no information about index mapping inside a change edit. - * - * (This means that indexes to the start and middle of an edit, - * for example around a grapheme cluster, are mapped to indexes - * encompassing the entire edit. - * The alternative, mapping an interior index to the start, - * would map such an interval to an empty one.) - * - * This operation will usually but not always modify this object. - * The iterator state after this search is undefined. - * - * @param i source index - * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, - * or else the function returns immediately. Check for U_FAILURE() - * on output or use with function chaining. (See User Guide for details.) - * @return destination index; undefined if i is not 0..string length - * @stable ICU 60 - */ - int32_t destinationIndexFromSourceIndex(int32_t i, UErrorCode &errorCode); - - /** - * Computes the source index corresponding to the given destination index. - * If the destination index is inside a change edit (not at its start), - * then the source index at the end of that edit is returned, - * since there is no information about index mapping inside a change edit. - * - * (This means that indexes to the start and middle of an edit, - * for example around a grapheme cluster, are mapped to indexes - * encompassing the entire edit. - * The alternative, mapping an interior index to the start, - * would map such an interval to an empty one.) - * - * This operation will usually but not always modify this object. - * The iterator state after this search is undefined. - * - * @param i destination index - * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, - * or else the function returns immediately. Check for U_FAILURE() - * on output or use with function chaining. (See User Guide for details.) - * @return source index; undefined if i is not 0..string length - * @stable ICU 60 - */ - int32_t sourceIndexFromDestinationIndex(int32_t i, UErrorCode &errorCode); - - /** - * Returns whether the edit currently represented by the iterator is a change edit. - * - * @return TRUE if this edit replaces oldLength() units with newLength() different ones. - * FALSE if oldLength units remain unchanged. - * @stable ICU 59 - */ - UBool hasChange() const { return changed; } - - /** - * The length of the current span in the source string, which starts at {@link #sourceIndex}. - * - * @return the number of units in the original string which are replaced or remain unchanged. - * @stable ICU 59 - */ - int32_t oldLength() const { return oldLength_; } - - /** - * The length of the current span in the destination string, which starts at - * {@link #destinationIndex}, or in the replacement string, which starts at - * {@link #replacementIndex}. - * - * @return the number of units in the modified string, if hasChange() is TRUE. - * Same as oldLength if hasChange() is FALSE. - * @stable ICU 59 - */ - int32_t newLength() const { return newLength_; } - - /** - * The start index of the current span in the source string; the span has length - * {@link #oldLength}. - * - * @return the current index into the source string - * @stable ICU 59 - */ - int32_t sourceIndex() const { return srcIndex; } - - /** - * The start index of the current span in the replacement string; the span has length - * {@link #newLength}. Well-defined only if the current edit is a change edit. - * - * The *replacement string* is the concatenation of all substrings of the destination - * string corresponding to change edits. - * - * This method is intended to be used together with operations that write only replacement - * characters (e.g. operations specifying the \ref U_OMIT_UNCHANGED_TEXT option). - * The source string can then be modified in-place. - * - * @return the current index into the replacement-characters-only string, - * not counting unchanged spans - * @stable ICU 59 - */ - int32_t replacementIndex() const { - // TODO: Throw an exception if we aren't in a change edit? - return replIndex; - } - - /** - * The start index of the current span in the destination string; the span has length - * {@link #newLength}. - * - * @return the current index into the full destination string - * @stable ICU 59 - */ - int32_t destinationIndex() const { return destIndex; } - -#ifndef U_HIDE_INTERNAL_API - /** - * A string representation of the current edit represented by the iterator for debugging. You - * should not depend on the contents of the return string. - * @internal - */ - UnicodeString& toString(UnicodeString& appendTo) const; -#endif // U_HIDE_INTERNAL_API - - private: - friend class Edits; - - Iterator(const uint16_t *a, int32_t len, UBool oc, UBool crs); - - int32_t readLength(int32_t head); - void updateNextIndexes(); - void updatePreviousIndexes(); - UBool noNext(); - UBool next(UBool onlyChanges, UErrorCode &errorCode); - UBool previous(UErrorCode &errorCode); - /** @return -1: error or i<0; 0: found; 1: i>=string length */ - int32_t findIndex(int32_t i, UBool findSource, UErrorCode &errorCode); - - const uint16_t *array; - int32_t index, length; - // 0 if we are not within compressed equal-length changes. - // Otherwise the number of remaining changes, including the current one. - int32_t remaining; - UBool onlyChanges_, coarse; - - int8_t dir; // iteration direction: back(<0), initial(0), forward(>0) - UBool changed; - int32_t oldLength_, newLength_; - int32_t srcIndex, replIndex, destIndex; - }; - - /** - * Returns an Iterator for coarse-grained change edits - * (adjacent change edits are treated as one). - * Can be used to perform simple string updates. - * Skips no-change edits. - * @return an Iterator that merges adjacent changes. - * @stable ICU 59 - */ - Iterator getCoarseChangesIterator() const { - return Iterator(array, length, TRUE, TRUE); - } - - /** - * Returns an Iterator for coarse-grained change and no-change edits - * (adjacent change edits are treated as one). - * Can be used to perform simple string updates. - * Adjacent change edits are treated as one edit. - * @return an Iterator that merges adjacent changes. - * @stable ICU 59 - */ - Iterator getCoarseIterator() const { - return Iterator(array, length, FALSE, TRUE); - } - - /** - * Returns an Iterator for fine-grained change edits - * (full granularity of change edits is retained). - * Can be used for modifying styled text. - * Skips no-change edits. - * @return an Iterator that separates adjacent changes. - * @stable ICU 59 - */ - Iterator getFineChangesIterator() const { - return Iterator(array, length, TRUE, FALSE); - } - - /** - * Returns an Iterator for fine-grained change and no-change edits - * (full granularity of change edits is retained). - * Can be used for modifying styled text. - * @return an Iterator that separates adjacent changes. - * @stable ICU 59 - */ - Iterator getFineIterator() const { - return Iterator(array, length, FALSE, FALSE); - } - - /** - * Merges the two input Edits and appends the result to this object. - * - * Consider two string transformations (for example, normalization and case mapping) - * where each records Edits in addition to writing an output string.
- * Edits ab reflect how substrings of input string a - * map to substrings of intermediate string b.
- * Edits bc reflect how substrings of intermediate string b - * map to substrings of output string c.
- * This function merges ab and bc such that the additional edits - * recorded in this object reflect how substrings of input string a - * map to substrings of output string c. - * - * If unrelated Edits are passed in where the output string of the first - * has a different length than the input string of the second, - * then a U_ILLEGAL_ARGUMENT_ERROR is reported. - * - * @param ab reflects how substrings of input string a - * map to substrings of intermediate string b. - * @param bc reflects how substrings of intermediate string b - * map to substrings of output string c. - * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, - * or else the function returns immediately. Check for U_FAILURE() - * on output or use with function chaining. (See User Guide for details.) - * @return *this, with the merged edits appended - * @stable ICU 60 - */ - Edits &mergeAndAppend(const Edits &ab, const Edits &bc, UErrorCode &errorCode); - -private: - void releaseArray() U_NOEXCEPT; - Edits ©Array(const Edits &other); - Edits &moveArray(Edits &src) U_NOEXCEPT; - - void setLastUnit(int32_t last) { array[length - 1] = (uint16_t)last; } - int32_t lastUnit() const { return length > 0 ? array[length - 1] : 0xffff; } - - void append(int32_t r); - UBool growArray(); - - static const int32_t STACK_CAPACITY = 100; - uint16_t *array; - int32_t capacity; - int32_t length; - int32_t delta; - int32_t numChanges; - UErrorCode errorCode_; - uint16_t stackArray[STACK_CAPACITY]; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // __EDITS_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/enumset.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/enumset.h deleted file mode 100644 index bde8c455c0..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/enumset.h +++ /dev/null @@ -1,69 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 2012,2014 International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -*/ - -/** - * \file - * \brief C++: internal template EnumSet<> - */ - -#ifndef ENUMSET_H -#define ENUMSET_H - -#include "unicode/utypes.h" - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/* Can't use #ifndef U_HIDE_INTERNAL_API for the entire EnumSet class, needed in .h file declarations */ -/** - * enum bitset for boolean fields. Similar to Java EnumSet<>. - * Needs to range check. Used for private instance variables. - * @internal - * \cond - */ -template -class EnumSet { -public: - inline EnumSet() : fBools(0) {} - inline EnumSet(const EnumSet& other) : fBools(other.fBools) {} - inline ~EnumSet() {} -#ifndef U_HIDE_INTERNAL_API - inline void clear() { fBools=0; } - inline void add(T toAdd) { set(toAdd, 1); } - inline void remove(T toRemove) { set(toRemove, 0); } - inline int32_t contains(T toCheck) const { return get(toCheck); } - inline void set(T toSet, int32_t v) { fBools=(fBools&(~flag(toSet)))|(v?(flag(toSet)):0); } - inline int32_t get(T toCheck) const { return (fBools & flag(toCheck))?1:0; } - inline UBool isValidEnum(T toCheck) const { return (toCheck>=minValue&&toCheck& operator=(const EnumSet& other) { - fBools = other.fBools; - return *this; - } - - inline uint32_t getAll() const { - return fBools; - } -#endif /* U_HIDE_INTERNAL_API */ - -private: - inline uint32_t flag(T toCheck) const { return (1<<(toCheck-minValue)); } -private: - uint32_t fBools; -}; - -/** \endcond */ - -U_NAMESPACE_END - -#endif /* U_SHOW_CPLUSPLUS_API */ -#endif /* ENUMSET_H */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/errorcode.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/errorcode.h deleted file mode 100644 index f0113d966d..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/errorcode.h +++ /dev/null @@ -1,141 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2009-2011, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: errorcode.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2009mar10 -* created by: Markus W. Scherer -*/ - -#ifndef __ERRORCODE_H__ -#define __ERRORCODE_H__ - -/** - * \file - * \brief C++ API: ErrorCode class intended to make it easier to use - * ICU C and C++ APIs from C++ user code. - */ - -#include "unicode/utypes.h" -#include "unicode/uobject.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * Wrapper class for UErrorCode, with conversion operators for direct use - * in ICU C and C++ APIs. - * Intended to be used as a base class, where a subclass overrides - * the handleFailure() function so that it throws an exception, - * does an assert(), logs an error, etc. - * This is not an abstract base class. This class can be used and instantiated - * by itself, although it will be more useful when subclassed. - * - * Features: - * - The constructor initializes the internal UErrorCode to U_ZERO_ERROR, - * removing one common source of errors. - * - Same use in C APIs taking a UErrorCode * (pointer) - * and C++ taking UErrorCode & (reference) via conversion operators. - * - Possible automatic checking for success when it goes out of scope. - * - * Note: For automatic checking for success in the destructor, a subclass - * must implement such logic in its own destructor because the base class - * destructor cannot call a subclass function (like handleFailure()). - * The ErrorCode base class destructor does nothing. - * - * Note also: While it is possible for a destructor to throw an exception, - * it is generally unsafe to do so. This means that in a subclass the destructor - * and the handleFailure() function may need to take different actions. - * - * Sample code: - * \code - * class IcuErrorCode: public icu::ErrorCode { - * public: - * virtual ~IcuErrorCode() { // should be defined in .cpp as "key function" - * // Safe because our handleFailure() does not throw exceptions. - * if(isFailure()) { handleFailure(); } - * } - * protected: - * virtual void handleFailure() const { - * log_failure(u_errorName(errorCode)); - * exit(errorCode); - * } - * }; - * IcuErrorCode error_code; - * UConverter *cnv = ucnv_open("Shift-JIS", error_code); - * length = ucnv_fromUChars(dest, capacity, src, length, error_code); - * ucnv_close(cnv); - * // IcuErrorCode destructor checks for success. - * \endcode - * - * @stable ICU 4.2 - */ -class U_COMMON_API ErrorCode: public UMemory { -public: - /** - * Default constructor. Initializes its UErrorCode to U_ZERO_ERROR. - * @stable ICU 4.2 - */ - ErrorCode() : errorCode(U_ZERO_ERROR) {} - /** Destructor, does nothing. See class documentation for details. @stable ICU 4.2 */ - virtual ~ErrorCode(); - /** Conversion operator, returns a reference. @stable ICU 4.2 */ - operator UErrorCode & () { return errorCode; } - /** Conversion operator, returns a pointer. @stable ICU 4.2 */ - operator UErrorCode * () { return &errorCode; } - /** Tests for U_SUCCESS(). @stable ICU 4.2 */ - UBool isSuccess() const { return U_SUCCESS(errorCode); } - /** Tests for U_FAILURE(). @stable ICU 4.2 */ - UBool isFailure() const { return U_FAILURE(errorCode); } - /** Returns the UErrorCode value. @stable ICU 4.2 */ - UErrorCode get() const { return errorCode; } - /** Sets the UErrorCode value. @stable ICU 4.2 */ - void set(UErrorCode value) { errorCode=value; } - /** Returns the UErrorCode value and resets it to U_ZERO_ERROR. @stable ICU 4.2 */ - UErrorCode reset(); - /** - * Asserts isSuccess(). - * In other words, this method checks for a failure code, - * and the base class handles it like this: - * \code - * if(isFailure()) { handleFailure(); } - * \endcode - * @stable ICU 4.4 - */ - void assertSuccess() const; - /** - * Return a string for the UErrorCode value. - * The string will be the same as the name of the error code constant - * in the UErrorCode enum. - * @stable ICU 4.4 - */ - const char* errorName() const; - -protected: - /** - * Internal UErrorCode, accessible to subclasses. - * @stable ICU 4.2 - */ - UErrorCode errorCode; - /** - * Called by assertSuccess() if isFailure() is true. - * A subclass should override this function to deal with a failure code: - * Throw an exception, log an error, terminate the program, or similar. - * @stable ICU 4.2 - */ - virtual void handleFailure() const {} -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // __ERRORCODE_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/fieldpos.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/fieldpos.h deleted file mode 100644 index 139873c318..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/fieldpos.h +++ /dev/null @@ -1,296 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************** - * Copyright (C) 1997-2006, International Business Machines - * Corporation and others. All Rights Reserved. - ******************************************************************************** - * - * File FIELDPOS.H - * - * Modification History: - * - * Date Name Description - * 02/25/97 aliu Converted from java. - * 03/17/97 clhuang Updated per Format implementation. - * 07/17/98 stephen Added default/copy ctors, and operators =, ==, != - ******************************************************************************** - */ - -// ***************************************************************************** -// This file was generated from the java source file FieldPosition.java -// ***************************************************************************** - -#ifndef FIELDPOS_H -#define FIELDPOS_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: FieldPosition identifies the fields in a formatted output. - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/uobject.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * FieldPosition is a simple class used by Format - * and its subclasses to identify fields in formatted output. Fields are - * identified by constants, whose names typically end with _FIELD, - * defined in the various subclasses of Format. See - * ERA_FIELD and its friends in DateFormat for - * an example. - * - *

- * FieldPosition keeps track of the position of the - * field within the formatted output with two indices: the index - * of the first character of the field and the index of the last - * character of the field. - * - *

- * One version of the format method in the various - * Format classes requires a FieldPosition - * object as an argument. You use this format method - * to perform partial formatting or to get information about the - * formatted output (such as the position of a field). - * - * The FieldPosition class is not intended for public subclassing. - * - *

- * Below is an example of using FieldPosition to aid - * alignment of an array of formatted floating-point numbers on - * their decimal points: - *

- * \code
- *       double doubleNum[] = {123456789.0, -12345678.9, 1234567.89, -123456.789,
- *                  12345.6789, -1234.56789, 123.456789, -12.3456789, 1.23456789};
- *       int dNumSize = (int)(sizeof(doubleNum)/sizeof(double));
- *       
- *       UErrorCode status = U_ZERO_ERROR;
- *       DecimalFormat* fmt = (DecimalFormat*) NumberFormat::createInstance(status);
- *       fmt->setDecimalSeparatorAlwaysShown(true);
- *       
- *       const int tempLen = 20;
- *       char temp[tempLen];
- *       
- *       for (int i=0; iformat(doubleNum[i], buf, pos), fmtText);
- *           for (int j=0; j
- * 

- * The code will generate the following output: - *

- * \code
- *           123,456,789.000
- *           -12,345,678.900
- *             1,234,567.880
- *              -123,456.789
- *                12,345.678
- *                -1,234.567
- *                   123.456
- *                   -12.345
- *                     1.234
- *  \endcode
- * 
- */ -class U_I18N_API FieldPosition : public UObject { -public: - /** - * DONT_CARE may be specified as the field to indicate that the - * caller doesn't need to specify a field. - * @stable ICU 2.0 - */ - enum { DONT_CARE = -1 }; - - /** - * Creates a FieldPosition object with a non-specified field. - * @stable ICU 2.0 - */ - FieldPosition() - : UObject(), fField(DONT_CARE), fBeginIndex(0), fEndIndex(0) {} - - /** - * Creates a FieldPosition object for the given field. Fields are - * identified by constants, whose names typically end with _FIELD, - * in the various subclasses of Format. - * - * @see NumberFormat#INTEGER_FIELD - * @see NumberFormat#FRACTION_FIELD - * @see DateFormat#YEAR_FIELD - * @see DateFormat#MONTH_FIELD - * @stable ICU 2.0 - */ - FieldPosition(int32_t field) - : UObject(), fField(field), fBeginIndex(0), fEndIndex(0) {} - - /** - * Copy constructor - * @param copy the object to be copied from. - * @stable ICU 2.0 - */ - FieldPosition(const FieldPosition& copy) - : UObject(copy), fField(copy.fField), fBeginIndex(copy.fBeginIndex), fEndIndex(copy.fEndIndex) {} - - /** - * Destructor - * @stable ICU 2.0 - */ - virtual ~FieldPosition(); - - /** - * Assignment operator - * @param copy the object to be copied from. - * @stable ICU 2.0 - */ - FieldPosition& operator=(const FieldPosition& copy); - - /** - * Equality operator. - * @param that the object to be compared with. - * @return TRUE if the two field positions are equal, FALSE otherwise. - * @stable ICU 2.0 - */ - UBool operator==(const FieldPosition& that) const; - - /** - * Equality operator. - * @param that the object to be compared with. - * @return TRUE if the two field positions are not equal, FALSE otherwise. - * @stable ICU 2.0 - */ - UBool operator!=(const FieldPosition& that) const; - - /** - * Clone this object. - * Clones can be used concurrently in multiple threads. - * If an error occurs, then NULL is returned. - * The caller must delete the clone. - * - * @return a clone of this object - * - * @see getDynamicClassID - * @stable ICU 2.8 - */ - FieldPosition *clone() const; - - /** - * Retrieve the field identifier. - * @return the field identifier. - * @stable ICU 2.0 - */ - int32_t getField(void) const { return fField; } - - /** - * Retrieve the index of the first character in the requested field. - * @return the index of the first character in the requested field. - * @stable ICU 2.0 - */ - int32_t getBeginIndex(void) const { return fBeginIndex; } - - /** - * Retrieve the index of the character following the last character in the - * requested field. - * @return the index of the character following the last character in the - * requested field. - * @stable ICU 2.0 - */ - int32_t getEndIndex(void) const { return fEndIndex; } - - /** - * Set the field. - * @param f the new value of the field. - * @stable ICU 2.0 - */ - void setField(int32_t f) { fField = f; } - - /** - * Set the begin index. For use by subclasses of Format. - * @param bi the new value of the begin index - * @stable ICU 2.0 - */ - void setBeginIndex(int32_t bi) { fBeginIndex = bi; } - - /** - * Set the end index. For use by subclasses of Format. - * @param ei the new value of the end index - * @stable ICU 2.0 - */ - void setEndIndex(int32_t ei) { fEndIndex = ei; } - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.2 - */ - virtual UClassID getDynamicClassID() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - -private: - /** - * Input: Desired field to determine start and end offsets for. - * The meaning depends on the subclass of Format. - */ - int32_t fField; - - /** - * Output: Start offset of field in text. - * If the field does not occur in the text, 0 is returned. - */ - int32_t fBeginIndex; - - /** - * Output: End offset of field in text. - * If the field does not occur in the text, 0 is returned. - */ - int32_t fEndIndex; -}; - -inline FieldPosition& -FieldPosition::operator=(const FieldPosition& copy) -{ - fField = copy.fField; - fEndIndex = copy.fEndIndex; - fBeginIndex = copy.fBeginIndex; - return *this; -} - -inline UBool -FieldPosition::operator==(const FieldPosition& copy) const -{ - return (fField == copy.fField && - fEndIndex == copy.fEndIndex && - fBeginIndex == copy.fBeginIndex); -} - -inline UBool -FieldPosition::operator!=(const FieldPosition& copy) const -{ - return !operator==(copy); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _FIELDPOS -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/filteredbrk.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/filteredbrk.h deleted file mode 100644 index b057b75b6a..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/filteredbrk.h +++ /dev/null @@ -1,147 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 1997-2015, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************** -*/ - -#ifndef FILTEREDBRK_H -#define FILTEREDBRK_H - -#include "unicode/utypes.h" -#include "unicode/brkiter.h" - -#if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILTERED_BREAK_ITERATION - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * \file - * \brief C++ API: FilteredBreakIteratorBuilder - */ - -/** - * The BreakIteratorFilter is used to modify the behavior of a BreakIterator - * by constructing a new BreakIterator which suppresses certain segment boundaries. - * See http://www.unicode.org/reports/tr35/tr35-general.html#Segmentation_Exceptions . - * For example, a typical English Sentence Break Iterator would break on the space - * in the string "Mr. Smith" (resulting in two segments), - * but with "Mr." as an exception, a filtered break iterator - * would consider the string "Mr. Smith" to be a single segment. - * - * @stable ICU 56 - */ -class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { - public: - /** - * destructor. - * @stable ICU 56 - */ - virtual ~FilteredBreakIteratorBuilder(); - - /** - * Construct a FilteredBreakIteratorBuilder based on rules in a locale. - * The rules are taken from CLDR exception data for the locale, - * see http://www.unicode.org/reports/tr35/tr35-general.html#Segmentation_Exceptions - * This is the equivalent of calling createInstance(UErrorCode&) - * and then repeatedly calling addNoBreakAfter(...) with the contents - * of the CLDR exception data. - * @param where the locale. - * @param status The error code. - * @return the new builder - * @stable ICU 56 - */ - static FilteredBreakIteratorBuilder *createInstance(const Locale& where, UErrorCode& status); - -#ifndef U_HIDE_DEPRECATED_API - /** - * This function has been deprecated in favor of createEmptyInstance, which has - * identical behavior. - * @param status The error code. - * @return the new builder - * @deprecated ICU 60 use createEmptyInstance instead - * @see createEmptyInstance() - */ - static FilteredBreakIteratorBuilder *createInstance(UErrorCode &status); -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Construct an empty FilteredBreakIteratorBuilder. - * In this state, it will not suppress any segment boundaries. - * @param status The error code. - * @return the new builder - * @stable ICU 60 - */ - static FilteredBreakIteratorBuilder *createEmptyInstance(UErrorCode &status); - - /** - * Suppress a certain string from being the end of a segment. - * For example, suppressing "Mr.", then segments ending in "Mr." will not be returned - * by the iterator. - * @param string the string to suppress, such as "Mr." - * @param status error code - * @return returns TRUE if the string was not present and now added, - * FALSE if the call was a no-op because the string was already being suppressed. - * @stable ICU 56 - */ - virtual UBool suppressBreakAfter(const UnicodeString& string, UErrorCode& status) = 0; - - /** - * Stop suppressing a certain string from being the end of the segment. - * This function does not create any new segment boundaries, but only serves to un-do - * the effect of earlier calls to suppressBreakAfter, or to un-do the effect of - * locale data which may be suppressing certain strings. - * @param string the exception to remove - * @param status error code - * @return returns TRUE if the string was present and now removed, - * FALSE if the call was a no-op because the string was not being suppressed. - * @stable ICU 56 - */ - virtual UBool unsuppressBreakAfter(const UnicodeString& string, UErrorCode& status) = 0; - - /** - * This function has been deprecated in favor of wrapIteratorWithFilter() - * The behavior is identical. - * @param adoptBreakIterator the break iterator to adopt - * @param status error code - * @return the new BreakIterator, owned by the caller. - * @deprecated ICU 60 use wrapIteratorWithFilter() instead - * @see wrapBreakIteratorWithFilter() - */ - virtual BreakIterator *build(BreakIterator* adoptBreakIterator, UErrorCode& status) = 0; - - /** - * Wrap (adopt) an existing break iterator in a new filtered instance. - * The resulting BreakIterator is owned by the caller. - * The BreakIteratorFilter may be destroyed before the BreakIterator is destroyed. - * Note that the adoptBreakIterator is adopted by the new BreakIterator - * and should no longer be used by the caller. - * The FilteredBreakIteratorBuilder may be reused. - * This function is an alias for build() - * @param adoptBreakIterator the break iterator to adopt - * @param status error code - * @return the new BreakIterator, owned by the caller. - * @stable ICU 60 - */ - inline BreakIterator *wrapIteratorWithFilter(BreakIterator* adoptBreakIterator, UErrorCode& status) { - return build(adoptBreakIterator, status); - } - - protected: - /** - * For subclass use - * @stable ICU 56 - */ - FilteredBreakIteratorBuilder(); -}; - - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // #if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILTERED_BREAK_ITERATION - -#endif // #ifndef FILTEREDBRK_H diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/fmtable.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/fmtable.h deleted file mode 100644 index e825cb693c..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/fmtable.h +++ /dev/null @@ -1,757 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 1997-2014, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************** -* -* File FMTABLE.H -* -* Modification History: -* -* Date Name Description -* 02/29/97 aliu Creation. -******************************************************************************** -*/ -#ifndef FMTABLE_H -#define FMTABLE_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Formattable is a thin wrapper for primitive types used for formatting and parsing - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/unistr.h" -#include "unicode/stringpiece.h" -#include "unicode/uformattable.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class CharString; -namespace number { -namespace impl { -class DecimalQuantity; -} -} - -/** - * Formattable objects can be passed to the Format class or - * its subclasses for formatting. Formattable is a thin wrapper - * class which interconverts between the primitive numeric types - * (double, long, etc.) as well as UDate and UnicodeString. - * - *

Internally, a Formattable object is a union of primitive types. - * As such, it can only store one flavor of data at a time. To - * determine what flavor of data it contains, use the getType method. - * - *

As of ICU 3.0, Formattable may also wrap a UObject pointer, - * which it owns. This allows an instance of any ICU class to be - * encapsulated in a Formattable. For legacy reasons and for - * efficiency, primitive numeric types are still stored directly - * within a Formattable. - * - *

The Formattable class is not suitable for subclassing. - * - *

See UFormattable for a C wrapper. - */ -class U_I18N_API Formattable : public UObject { -public: - /** - * This enum is only used to let callers distinguish between - * the Formattable(UDate) constructor and the Formattable(double) - * constructor; the compiler cannot distinguish the signatures, - * since UDate is currently typedefed to be either double or long. - * If UDate is changed later to be a bonafide class - * or struct, then we no longer need this enum. - * @stable ICU 2.4 - */ - enum ISDATE { kIsDate }; - - /** - * Default constructor - * @stable ICU 2.4 - */ - Formattable(); // Type kLong, value 0 - - /** - * Creates a Formattable object with a UDate instance. - * @param d the UDate instance. - * @param flag the flag to indicate this is a date. Always set it to kIsDate - * @stable ICU 2.0 - */ - Formattable(UDate d, ISDATE flag); - - /** - * Creates a Formattable object with a double number. - * @param d the double number. - * @stable ICU 2.0 - */ - Formattable(double d); - - /** - * Creates a Formattable object with a long number. - * @param l the long number. - * @stable ICU 2.0 - */ - Formattable(int32_t l); - - /** - * Creates a Formattable object with an int64_t number - * @param ll the int64_t number. - * @stable ICU 2.8 - */ - Formattable(int64_t ll); - -#if !UCONFIG_NO_CONVERSION - /** - * Creates a Formattable object with a char string pointer. - * Assumes that the char string is null terminated. - * @param strToCopy the char string. - * @stable ICU 2.0 - */ - Formattable(const char* strToCopy); -#endif - - /** - * Creates a Formattable object of an appropriate numeric type from a - * a decimal number in string form. The Formattable will retain the - * full precision of the input in decimal format, even when it exceeds - * what can be represented by a double or int64_t. - * - * @param number the unformatted (not localized) string representation - * of the Decimal number. - * @param status the error code. Possible errors include U_INVALID_FORMAT_ERROR - * if the format of the string does not conform to that of a - * decimal number. - * @stable ICU 4.4 - */ - Formattable(StringPiece number, UErrorCode &status); - - /** - * Creates a Formattable object with a UnicodeString object to copy from. - * @param strToCopy the UnicodeString string. - * @stable ICU 2.0 - */ - Formattable(const UnicodeString& strToCopy); - - /** - * Creates a Formattable object with a UnicodeString object to adopt from. - * @param strToAdopt the UnicodeString string. - * @stable ICU 2.0 - */ - Formattable(UnicodeString* strToAdopt); - - /** - * Creates a Formattable object with an array of Formattable objects. - * @param arrayToCopy the Formattable object array. - * @param count the array count. - * @stable ICU 2.0 - */ - Formattable(const Formattable* arrayToCopy, int32_t count); - - /** - * Creates a Formattable object that adopts the given UObject. - * @param objectToAdopt the UObject to set this object to - * @stable ICU 3.0 - */ - Formattable(UObject* objectToAdopt); - - /** - * Copy constructor. - * @stable ICU 2.0 - */ - Formattable(const Formattable&); - - /** - * Assignment operator. - * @param rhs The Formattable object to copy into this object. - * @stable ICU 2.0 - */ - Formattable& operator=(const Formattable &rhs); - - /** - * Equality comparison. - * @param other the object to be compared with. - * @return TRUE if other are equal to this, FALSE otherwise. - * @stable ICU 2.0 - */ - UBool operator==(const Formattable &other) const; - - /** - * Equality operator. - * @param other the object to be compared with. - * @return TRUE if other are unequal to this, FALSE otherwise. - * @stable ICU 2.0 - */ - UBool operator!=(const Formattable& other) const - { return !operator==(other); } - - /** - * Destructor. - * @stable ICU 2.0 - */ - virtual ~Formattable(); - - /** - * Clone this object. - * Clones can be used concurrently in multiple threads. - * If an error occurs, then NULL is returned. - * The caller must delete the clone. - * - * @return a clone of this object - * - * @see getDynamicClassID - * @stable ICU 2.8 - */ - Formattable *clone() const; - - /** - * Selector for flavor of data type contained within a - * Formattable object. Formattable is a union of several - * different types, and at any time contains exactly one type. - * @stable ICU 2.4 - */ - enum Type { - /** - * Selector indicating a UDate value. Use getDate to retrieve - * the value. - * @stable ICU 2.4 - */ - kDate, - - /** - * Selector indicating a double value. Use getDouble to - * retrieve the value. - * @stable ICU 2.4 - */ - kDouble, - - /** - * Selector indicating a 32-bit integer value. Use getLong to - * retrieve the value. - * @stable ICU 2.4 - */ - kLong, - - /** - * Selector indicating a UnicodeString value. Use getString - * to retrieve the value. - * @stable ICU 2.4 - */ - kString, - - /** - * Selector indicating an array of Formattables. Use getArray - * to retrieve the value. - * @stable ICU 2.4 - */ - kArray, - - /** - * Selector indicating a 64-bit integer value. Use getInt64 - * to retrieve the value. - * @stable ICU 2.8 - */ - kInt64, - - /** - * Selector indicating a UObject value. Use getObject to - * retrieve the value. - * @stable ICU 3.0 - */ - kObject - }; - - /** - * Gets the data type of this Formattable object. - * @return the data type of this Formattable object. - * @stable ICU 2.0 - */ - Type getType(void) const; - - /** - * Returns TRUE if the data type of this Formattable object - * is kDouble, kLong, or kInt64 - * @return TRUE if this is a pure numeric object - * @stable ICU 3.0 - */ - UBool isNumeric() const; - - /** - * Gets the double value of this object. If this object is not of type - * kDouble then the result is undefined. - * @return the double value of this object. - * @stable ICU 2.0 - */ - double getDouble(void) const { return fValue.fDouble; } - - /** - * Gets the double value of this object. If this object is of type - * long, int64 or Decimal Number then a conversion is peformed, with - * possible loss of precision. If the type is kObject and the - * object is a Measure, then the result of - * getNumber().getDouble(status) is returned. If this object is - * neither a numeric type nor a Measure, then 0 is returned and - * the status is set to U_INVALID_FORMAT_ERROR. - * @param status the error code - * @return the double value of this object. - * @stable ICU 3.0 - */ - double getDouble(UErrorCode& status) const; - - /** - * Gets the long value of this object. If this object is not of type - * kLong then the result is undefined. - * @return the long value of this object. - * @stable ICU 2.0 - */ - int32_t getLong(void) const { return (int32_t)fValue.fInt64; } - - /** - * Gets the long value of this object. If the magnitude is too - * large to fit in a long, then the maximum or minimum long value, - * as appropriate, is returned and the status is set to - * U_INVALID_FORMAT_ERROR. If this object is of type kInt64 and - * it fits within a long, then no precision is lost. If it is of - * type kDouble, then a conversion is peformed, with - * truncation of any fractional part. If the type is kObject and - * the object is a Measure, then the result of - * getNumber().getLong(status) is returned. If this object is - * neither a numeric type nor a Measure, then 0 is returned and - * the status is set to U_INVALID_FORMAT_ERROR. - * @param status the error code - * @return the long value of this object. - * @stable ICU 3.0 - */ - int32_t getLong(UErrorCode& status) const; - - /** - * Gets the int64 value of this object. If this object is not of type - * kInt64 then the result is undefined. - * @return the int64 value of this object. - * @stable ICU 2.8 - */ - int64_t getInt64(void) const { return fValue.fInt64; } - - /** - * Gets the int64 value of this object. If this object is of a numeric - * type and the magnitude is too large to fit in an int64, then - * the maximum or minimum int64 value, as appropriate, is returned - * and the status is set to U_INVALID_FORMAT_ERROR. If the - * magnitude fits in an int64, then a casting conversion is - * peformed, with truncation of any fractional part. If the type - * is kObject and the object is a Measure, then the result of - * getNumber().getDouble(status) is returned. If this object is - * neither a numeric type nor a Measure, then 0 is returned and - * the status is set to U_INVALID_FORMAT_ERROR. - * @param status the error code - * @return the int64 value of this object. - * @stable ICU 3.0 - */ - int64_t getInt64(UErrorCode& status) const; - - /** - * Gets the Date value of this object. If this object is not of type - * kDate then the result is undefined. - * @return the Date value of this object. - * @stable ICU 2.0 - */ - UDate getDate() const { return fValue.fDate; } - - /** - * Gets the Date value of this object. If the type is not a date, - * status is set to U_INVALID_FORMAT_ERROR and the return value is - * undefined. - * @param status the error code. - * @return the Date value of this object. - * @stable ICU 3.0 - */ - UDate getDate(UErrorCode& status) const; - - /** - * Gets the string value of this object. If this object is not of type - * kString then the result is undefined. - * @param result Output param to receive the Date value of this object. - * @return A reference to 'result'. - * @stable ICU 2.0 - */ - UnicodeString& getString(UnicodeString& result) const - { result=*fValue.fString; return result; } - - /** - * Gets the string value of this object. If the type is not a - * string, status is set to U_INVALID_FORMAT_ERROR and a bogus - * string is returned. - * @param result Output param to receive the Date value of this object. - * @param status the error code. - * @return A reference to 'result'. - * @stable ICU 3.0 - */ - UnicodeString& getString(UnicodeString& result, UErrorCode& status) const; - - /** - * Gets a const reference to the string value of this object. If - * this object is not of type kString then the result is - * undefined. - * @return a const reference to the string value of this object. - * @stable ICU 2.0 - */ - inline const UnicodeString& getString(void) const; - - /** - * Gets a const reference to the string value of this object. If - * the type is not a string, status is set to - * U_INVALID_FORMAT_ERROR and the result is a bogus string. - * @param status the error code. - * @return a const reference to the string value of this object. - * @stable ICU 3.0 - */ - const UnicodeString& getString(UErrorCode& status) const; - - /** - * Gets a reference to the string value of this object. If this - * object is not of type kString then the result is undefined. - * @return a reference to the string value of this object. - * @stable ICU 2.0 - */ - inline UnicodeString& getString(void); - - /** - * Gets a reference to the string value of this object. If the - * type is not a string, status is set to U_INVALID_FORMAT_ERROR - * and the result is a bogus string. - * @param status the error code. - * @return a reference to the string value of this object. - * @stable ICU 3.0 - */ - UnicodeString& getString(UErrorCode& status); - - /** - * Gets the array value and count of this object. If this object - * is not of type kArray then the result is undefined. - * @param count fill-in with the count of this object. - * @return the array value of this object. - * @stable ICU 2.0 - */ - const Formattable* getArray(int32_t& count) const - { count=fValue.fArrayAndCount.fCount; return fValue.fArrayAndCount.fArray; } - - /** - * Gets the array value and count of this object. If the type is - * not an array, status is set to U_INVALID_FORMAT_ERROR, count is - * set to 0, and the result is NULL. - * @param count fill-in with the count of this object. - * @param status the error code. - * @return the array value of this object. - * @stable ICU 3.0 - */ - const Formattable* getArray(int32_t& count, UErrorCode& status) const; - - /** - * Accesses the specified element in the array value of this - * Formattable object. If this object is not of type kArray then - * the result is undefined. - * @param index the specified index. - * @return the accessed element in the array. - * @stable ICU 2.0 - */ - Formattable& operator[](int32_t index) { return fValue.fArrayAndCount.fArray[index]; } - - /** - * Returns a pointer to the UObject contained within this - * formattable, or NULL if this object does not contain a UObject. - * @return a UObject pointer, or NULL - * @stable ICU 3.0 - */ - const UObject* getObject() const; - - /** - * Returns a numeric string representation of the number contained within this - * formattable, or NULL if this object does not contain numeric type. - * For values obtained by parsing, the returned decimal number retains - * the full precision and range of the original input, unconstrained by - * the limits of a double floating point or a 64 bit int. - * - * This function is not thread safe, and therfore is not declared const, - * even though it is logically const. - * - * Possible errors include U_MEMORY_ALLOCATION_ERROR, and - * U_INVALID_STATE if the formattable object has not been set to - * a numeric type. - * - * @param status the error code. - * @return the unformatted string representation of a number. - * @stable ICU 4.4 - */ - StringPiece getDecimalNumber(UErrorCode &status); - - /** - * Sets the double value of this object and changes the type to - * kDouble. - * @param d the new double value to be set. - * @stable ICU 2.0 - */ - void setDouble(double d); - - /** - * Sets the long value of this object and changes the type to - * kLong. - * @param l the new long value to be set. - * @stable ICU 2.0 - */ - void setLong(int32_t l); - - /** - * Sets the int64 value of this object and changes the type to - * kInt64. - * @param ll the new int64 value to be set. - * @stable ICU 2.8 - */ - void setInt64(int64_t ll); - - /** - * Sets the Date value of this object and changes the type to - * kDate. - * @param d the new Date value to be set. - * @stable ICU 2.0 - */ - void setDate(UDate d); - - /** - * Sets the string value of this object and changes the type to - * kString. - * @param stringToCopy the new string value to be set. - * @stable ICU 2.0 - */ - void setString(const UnicodeString& stringToCopy); - - /** - * Sets the array value and count of this object and changes the - * type to kArray. - * @param array the array value. - * @param count the number of array elements to be copied. - * @stable ICU 2.0 - */ - void setArray(const Formattable* array, int32_t count); - - /** - * Sets and adopts the string value and count of this object and - * changes the type to kArray. - * @param stringToAdopt the new string value to be adopted. - * @stable ICU 2.0 - */ - void adoptString(UnicodeString* stringToAdopt); - - /** - * Sets and adopts the array value and count of this object and - * changes the type to kArray. - * @stable ICU 2.0 - */ - void adoptArray(Formattable* array, int32_t count); - - /** - * Sets and adopts the UObject value of this object and changes - * the type to kObject. After this call, the caller must not - * delete the given object. - * @param objectToAdopt the UObject value to be adopted - * @stable ICU 3.0 - */ - void adoptObject(UObject* objectToAdopt); - - /** - * Sets the the numeric value from a decimal number string, and changes - * the type to to a numeric type appropriate for the number. - * The syntax of the number is a "numeric string" - * as defined in the Decimal Arithmetic Specification, available at - * http://speleotrove.com/decimal - * The full precision and range of the input number will be retained, - * even when it exceeds what can be represented by a double or an int64. - * - * @param numberString a string representation of the unformatted decimal number. - * @param status the error code. Set to U_INVALID_FORMAT_ERROR if the - * incoming string is not a valid decimal number. - * @stable ICU 4.4 - */ - void setDecimalNumber(StringPiece numberString, - UErrorCode &status); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.2 - */ - virtual UClassID getDynamicClassID() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - - /** - * Convert the UFormattable to a Formattable. Internally, this is a reinterpret_cast. - * @param fmt a valid UFormattable - * @return the UFormattable as a Formattable object pointer. This is an alias to the original - * UFormattable, and so is only valid while the original argument remains in scope. - * @stable ICU 52 - */ - static inline Formattable *fromUFormattable(UFormattable *fmt); - - /** - * Convert the const UFormattable to a const Formattable. Internally, this is a reinterpret_cast. - * @param fmt a valid UFormattable - * @return the UFormattable as a Formattable object pointer. This is an alias to the original - * UFormattable, and so is only valid while the original argument remains in scope. - * @stable ICU 52 - */ - static inline const Formattable *fromUFormattable(const UFormattable *fmt); - - /** - * Convert this object pointer to a UFormattable. - * @return this object as a UFormattable pointer. This is an alias to this object, - * and so is only valid while this object remains in scope. - * @stable ICU 52 - */ - inline UFormattable *toUFormattable(); - - /** - * Convert this object pointer to a UFormattable. - * @return this object as a UFormattable pointer. This is an alias to this object, - * and so is only valid while this object remains in scope. - * @stable ICU 52 - */ - inline const UFormattable *toUFormattable() const; - -#ifndef U_HIDE_DEPRECATED_API - /** - * Deprecated variant of getLong(UErrorCode&). - * @param status the error code - * @return the long value of this object. - * @deprecated ICU 3.0 use getLong(UErrorCode&) instead - */ - inline int32_t getLong(UErrorCode* status) const; -#endif /* U_HIDE_DEPRECATED_API */ - -#ifndef U_HIDE_INTERNAL_API - /** - * Internal function, do not use. - * TODO: figure out how to make this be non-public. - * NumberFormat::format(Formattable, ... - * needs to get at the DecimalQuantity, if it exists, for - * big decimal formatting. - * @internal - */ - number::impl::DecimalQuantity *getDecimalQuantity() const { return fDecimalQuantity;} - - /** - * Export the value of this Formattable to a DecimalQuantity. - * @internal - */ - void populateDecimalQuantity(number::impl::DecimalQuantity& output, UErrorCode& status) const; - - /** - * Adopt, and set value from, a DecimalQuantity - * Internal Function, do not use. - * @param dq the DecimalQuantity to be adopted - * @internal - */ - void adoptDecimalQuantity(number::impl::DecimalQuantity *dq); - - /** - * Internal function to return the CharString pointer. - * @param status error code - * @return pointer to the CharString - may become invalid if the object is modified - * @internal - */ - CharString *internalGetCharString(UErrorCode &status); - -#endif /* U_HIDE_INTERNAL_API */ - -private: - /** - * Cleans up the memory for unwanted values. For example, the adopted - * string or array objects. - */ - void dispose(void); - - /** - * Common initialization, for use by constructors. - */ - void init(); - - UnicodeString* getBogus() const; - - union { - UObject* fObject; - UnicodeString* fString; - double fDouble; - int64_t fInt64; - UDate fDate; - struct { - Formattable* fArray; - int32_t fCount; - } fArrayAndCount; - } fValue; - - CharString *fDecimalStr; - - number::impl::DecimalQuantity *fDecimalQuantity; - - Type fType; - UnicodeString fBogus; // Bogus string when it's needed. -}; - -inline UDate Formattable::getDate(UErrorCode& status) const { - if (fType != kDate) { - if (U_SUCCESS(status)) { - status = U_INVALID_FORMAT_ERROR; - } - return 0; - } - return fValue.fDate; -} - -inline const UnicodeString& Formattable::getString(void) const { - return *fValue.fString; -} - -inline UnicodeString& Formattable::getString(void) { - return *fValue.fString; -} - -#ifndef U_HIDE_DEPRECATED_API -inline int32_t Formattable::getLong(UErrorCode* status) const { - return getLong(*status); -} -#endif /* U_HIDE_DEPRECATED_API */ - -inline UFormattable* Formattable::toUFormattable() { - return reinterpret_cast(this); -} - -inline const UFormattable* Formattable::toUFormattable() const { - return reinterpret_cast(this); -} - -inline Formattable* Formattable::fromUFormattable(UFormattable *fmt) { - return reinterpret_cast(fmt); -} - -inline const Formattable* Formattable::fromUFormattable(const UFormattable *fmt) { - return reinterpret_cast(fmt); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif //_FMTABLE -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/format.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/format.h deleted file mode 100644 index 67fa5d9689..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/format.h +++ /dev/null @@ -1,309 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 1997-2011, International Business Machines Corporation and others. -* All Rights Reserved. -******************************************************************************** -* -* File FORMAT.H -* -* Modification History: -* -* Date Name Description -* 02/19/97 aliu Converted from java. -* 03/17/97 clhuang Updated per C++ implementation. -* 03/27/97 helena Updated to pass the simple test after code review. -******************************************************************************** -*/ -// ***************************************************************************** -// This file was generated from the java source file Format.java -// ***************************************************************************** - -#ifndef FORMAT_H -#define FORMAT_H - - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Base class for all formats. - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/unistr.h" -#include "unicode/fmtable.h" -#include "unicode/fieldpos.h" -#include "unicode/fpositer.h" -#include "unicode/parsepos.h" -#include "unicode/parseerr.h" -#include "unicode/locid.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * Base class for all formats. This is an abstract base class which - * specifies the protocol for classes which convert other objects or - * values, such as numeric values and dates, and their string - * representations. In some cases these representations may be - * localized or contain localized characters or strings. For example, - * a numeric formatter such as DecimalFormat may convert a numeric - * value such as 12345 to the string "$12,345". It may also parse - * the string back into a numeric value. A date and time formatter - * like SimpleDateFormat may represent a specific date, encoded - * numerically, as a string such as "Wednesday, February 26, 1997 AD". - *

- * Many of the concrete subclasses of Format employ the notion of - * a pattern. A pattern is a string representation of the rules which - * govern the interconversion between values and strings. For example, - * a DecimalFormat object may be associated with the pattern - * "$#,##0.00;($#,##0.00)", which is a common US English format for - * currency values, yielding strings such as "$1,234.45" for 1234.45, - * and "($987.65)" for 987.6543. The specific syntax of a pattern - * is defined by each subclass. - *

- * Even though many subclasses use patterns, the notion of a pattern - * is not inherent to Format classes in general, and is not part of - * the explicit base class protocol. - *

- * Two complex formatting classes bear mentioning. These are - * MessageFormat and ChoiceFormat. ChoiceFormat is a subclass of - * NumberFormat which allows the user to format different number ranges - * as strings. For instance, 0 may be represented as "no files", 1 as - * "one file", and any number greater than 1 as "many files". - * MessageFormat is a formatter which utilizes other Format objects to - * format a string containing with multiple values. For instance, - * A MessageFormat object might produce the string "There are no files - * on the disk MyDisk on February 27, 1997." given the arguments 0, - * "MyDisk", and the date value of 2/27/97. See the ChoiceFormat - * and MessageFormat headers for further information. - *

- * If formatting is unsuccessful, a failing UErrorCode is returned when - * the Format cannot format the type of object, otherwise if there is - * something illformed about the the Unicode replacement character - * 0xFFFD is returned. - *

- * If there is no match when parsing, a parse failure UErrorCode is - * retured for methods which take no ParsePosition. For the method - * that takes a ParsePosition, the index parameter is left unchanged. - *

- * User subclasses are not supported. While clients may write - * subclasses, such code will not necessarily work and will not be - * guaranteed to work stably from release to release. - */ -class U_I18N_API Format : public UObject { -public: - - /** Destructor - * @stable ICU 2.4 - */ - virtual ~Format(); - - /** - * Return true if the given Format objects are semantically equal. - * Objects of different subclasses are considered unequal. - * @param other the object to be compared with. - * @return Return true if the given Format objects are semantically equal. - * Objects of different subclasses are considered unequal. - * @stable ICU 2.0 - */ - virtual UBool operator==(const Format& other) const = 0; - - /** - * Return true if the given Format objects are not semantically - * equal. - * @param other the object to be compared with. - * @return Return true if the given Format objects are not semantically. - * @stable ICU 2.0 - */ - UBool operator!=(const Format& other) const { return !operator==(other); } - - /** - * Clone this object polymorphically. The caller is responsible - * for deleting the result when done. - * @return A copy of the object - * @stable ICU 2.0 - */ - virtual Format* clone() const = 0; - - /** - * Formats an object to produce a string. - * - * @param obj The object to format. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param status Output parameter filled in with success or failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - UnicodeString& format(const Formattable& obj, - UnicodeString& appendTo, - UErrorCode& status) const; - - /** - * Format an object to produce a string. This is a pure virtual method which - * subclasses must implement. This method allows polymorphic formatting - * of Formattable objects. If a subclass of Format receives a Formattable - * object type it doesn't handle (e.g., if a numeric Formattable is passed - * to a DateFormat object) then it returns a failing UErrorCode. - * - * @param obj The object to format. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - virtual UnicodeString& format(const Formattable& obj, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& status) const = 0; - /** - * Format an object to produce a string. Subclasses should override this - * method. This method allows polymorphic formatting of Formattable objects. - * If a subclass of Format receives a Formattable object type it doesn't - * handle (e.g., if a numeric Formattable is passed to a DateFormat object) - * then it returns a failing UErrorCode. - * - * @param obj The object to format. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - virtual UnicodeString& format(const Formattable& obj, - UnicodeString& appendTo, - FieldPositionIterator* posIter, - UErrorCode& status) const; - - /** - * Parse a string to produce an object. This is a pure virtual - * method which subclasses must implement. This method allows - * polymorphic parsing of strings into Formattable objects. - *

- * Before calling, set parse_pos.index to the offset you want to - * start parsing at in the source. After calling, parse_pos.index - * is the end of the text you parsed. If error occurs, index is - * unchanged. - *

- * When parsing, leading whitespace is discarded (with successful - * parse), while trailing whitespace is left as is. - *

- * Example: - *

- * Parsing "_12_xy" (where _ represents a space) for a number, - * with index == 0 will result in the number 12, with - * parse_pos.index updated to 3 (just before the second space). - * Parsing a second time will result in a failing UErrorCode since - * "xy" is not a number, and leave index at 3. - *

- * Subclasses will typically supply specific parse methods that - * return different types of values. Since methods can't overload - * on return types, these will typically be named "parse", while - * this polymorphic method will always be called parseObject. Any - * parse method that does not take a parse_pos should set status - * to an error value when no text in the required format is at the - * start position. - * - * @param source The string to be parsed into an object. - * @param result Formattable to be set to the parse result. - * If parse fails, return contents are undefined. - * @param parse_pos The position to start parsing at. Upon return - * this param is set to the position after the - * last character successfully parsed. If the - * source is not parsed successfully, this param - * will remain unchanged. - * @stable ICU 2.0 - */ - virtual void parseObject(const UnicodeString& source, - Formattable& result, - ParsePosition& parse_pos) const = 0; - - /** - * Parses a string to produce an object. This is a convenience method - * which calls the pure virtual parseObject() method, and returns a - * failure UErrorCode if the ParsePosition indicates failure. - * - * @param source The string to be parsed into an object. - * @param result Formattable to be set to the parse result. - * If parse fails, return contents are undefined. - * @param status Output param to be filled with success/failure - * result code. - * @stable ICU 2.0 - */ - void parseObject(const UnicodeString& source, - Formattable& result, - UErrorCode& status) const; - - /** Get the locale for this format object. You can choose between valid and actual locale. - * @param type type of the locale we're looking for (valid or actual) - * @param status error code for the operation - * @return the locale - * @stable ICU 2.8 - */ - Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const; - -#ifndef U_HIDE_INTERNAL_API - /** Get the locale for this format object. You can choose between valid and actual locale. - * @param type type of the locale we're looking for (valid or actual) - * @param status error code for the operation - * @return the locale - * @internal - */ - const char* getLocaleID(ULocDataLocaleType type, UErrorCode &status) const; -#endif /* U_HIDE_INTERNAL_API */ - - protected: - /** @stable ICU 2.8 */ - void setLocaleIDs(const char* valid, const char* actual); - -protected: - /** - * Default constructor for subclass use only. Does nothing. - * @stable ICU 2.0 - */ - Format(); - - /** - * @stable ICU 2.0 - */ - Format(const Format&); // Does nothing; for subclasses only - - /** - * @stable ICU 2.0 - */ - Format& operator=(const Format&); // Does nothing; for subclasses - - - /** - * Simple function for initializing a UParseError from a UnicodeString. - * - * @param pattern The pattern to copy into the parseError - * @param pos The position in pattern where the error occured - * @param parseError The UParseError object to fill in - * @stable ICU 2.4 - */ - static void syntaxError(const UnicodeString& pattern, - int32_t pos, - UParseError& parseError); - - private: - char actualLocale[ULOC_FULLNAME_CAPACITY]; - char validLocale[ULOC_FULLNAME_CAPACITY]; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _FORMAT -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/formattedvalue.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/formattedvalue.h deleted file mode 100644 index 733bc1b2af..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/formattedvalue.h +++ /dev/null @@ -1,319 +0,0 @@ -// © 2018 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html - -#ifndef __FORMATTEDVALUE_H__ -#define __FORMATTEDVALUE_H__ - -#include "unicode/utypes.h" -#if !UCONFIG_NO_FORMATTING -#ifndef U_HIDE_DRAFT_API - -#include "unicode/appendable.h" -#include "unicode/fpositer.h" -#include "unicode/unistr.h" -#include "unicode/uformattedvalue.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * \file - * \brief C++ API: Abstract operations for localized strings. - * - * This file contains declarations for classes that deal with formatted strings. A number - * of APIs throughout ICU use these classes for expressing their localized output. - */ - - -/** - * Represents a span of a string containing a given field. - * - * This class differs from FieldPosition in the following ways: - * - * 1. It has information on the field category. - * 2. It allows you to set constraints to use when iterating over field positions. - * 3. It is used for the newer FormattedValue APIs. - * - * This class is not intended for public subclassing. - * - * @draft ICU 64 - */ -class U_I18N_API ConstrainedFieldPosition : public UMemory { - public: - - /** - * Initializes a ConstrainedFieldPosition. - * - * By default, the ConstrainedFieldPosition has no iteration constraints. - * - * @draft ICU 64 - */ - ConstrainedFieldPosition(); - - /** @draft ICU 64 */ - ~ConstrainedFieldPosition(); - - /** - * Resets this ConstrainedFieldPosition to its initial state, as if it were newly created: - * - * - Removes any constraints that may have been set on the instance. - * - Resets the iteration position. - * - * @draft ICU 64 - */ - void reset(); - - /** - * Sets a constraint on the field category. - * - * When this instance of ConstrainedFieldPosition is passed to FormattedValue#nextPosition, - * positions are skipped unless they have the given category. - * - * Any previously set constraints are cleared. - * - * For example, to loop over only the number-related fields: - * - * ConstrainedFieldPosition cfpos; - * cfpos.constrainCategory(UFIELDCATEGORY_NUMBER_FORMAT); - * while (fmtval.nextPosition(cfpos, status)) { - * // handle the number-related field position - * } - * - * Changing the constraint while in the middle of iterating over a FormattedValue - * does not generally have well-defined behavior. - * - * @param category The field category to fix when iterating. - * @draft ICU 64 - */ - void constrainCategory(int32_t category); - - /** - * Sets a constraint on the category and field. - * - * When this instance of ConstrainedFieldPosition is passed to FormattedValue#nextPosition, - * positions are skipped unless they have the given category and field. - * - * Any previously set constraints are cleared. - * - * For example, to loop over all grouping separators: - * - * ConstrainedFieldPosition cfpos; - * cfpos.constrainField(UFIELDCATEGORY_NUMBER_FORMAT, UNUM_GROUPING_SEPARATOR_FIELD); - * while (fmtval.nextPosition(cfpos, status)) { - * // handle the grouping separator position - * } - * - * Changing the constraint while in the middle of iterating over a FormattedValue - * does not generally have well-defined behavior. - * - * @param category The field category to fix when iterating. - * @param field The field to fix when iterating. - * @draft ICU 64 - */ - void constrainField(int32_t category, int32_t field); - - /** - * Gets the field category for the current position. - * - * The return value is well-defined only after - * FormattedValue#nextPosition returns TRUE. - * - * @return The field category saved in the instance. - * @draft ICU 64 - */ - inline int32_t getCategory() const { - return fCategory; - } - - /** - * Gets the field for the current position. - * - * The return value is well-defined only after - * FormattedValue#nextPosition returns TRUE. - * - * @return The field saved in the instance. - * @draft ICU 64 - */ - inline int32_t getField() const { - return fField; - } - - /** - * Gets the INCLUSIVE start index for the current position. - * - * The return value is well-defined only after FormattedValue#nextPosition returns TRUE. - * - * @return The start index saved in the instance. - * @draft ICU 64 - */ - inline int32_t getStart() const { - return fStart; - } - - /** - * Gets the EXCLUSIVE end index stored for the current position. - * - * The return value is well-defined only after FormattedValue#nextPosition returns TRUE. - * - * @return The end index saved in the instance. - * @draft ICU 64 - */ - inline int32_t getLimit() const { - return fLimit; - } - - //////////////////////////////////////////////////////////////////// - //// The following methods are for FormattedValue implementers; //// - //// most users can ignore them. //// - //////////////////////////////////////////////////////////////////// - - /** - * Gets an int64 that FormattedValue implementations may use for storage. - * - * The initial value is zero. - * - * Users of FormattedValue should not need to call this method. - * - * @return The current iteration context from {@link #setInt64IterationContext}. - * @draft ICU 64 - */ - inline int64_t getInt64IterationContext() const { - return fContext; - } - - /** - * Sets an int64 that FormattedValue implementations may use for storage. - * - * Intended to be used by FormattedValue implementations. - * - * @param context The new iteration context. - * @draft ICU 64 - */ - void setInt64IterationContext(int64_t context); - - /** - * Determines whether a given field should be included given the - * constraints. - * - * Intended to be used by FormattedValue implementations. - * - * @param category The category to test. - * @param field The field to test. - * @draft ICU 64 - */ - UBool matchesField(int32_t category, int32_t field) const; - - /** - * Sets new values for the primary public getters. - * - * Intended to be used by FormattedValue implementations. - * - * It is up to the implementation to ensure that the user-requested - * constraints are satisfied. This method does not check! - * - * @param category The new field category. - * @param field The new field. - * @param start The new inclusive start index. - * @param limit The new exclusive end index. - * @draft ICU 64 - */ - void setState( - int32_t category, - int32_t field, - int32_t start, - int32_t limit); - - private: - int64_t fContext = 0LL; - int32_t fField = 0; - int32_t fStart = 0; - int32_t fLimit = 0; - int32_t fCategory = UFIELD_CATEGORY_UNDEFINED; - int8_t fConstraint = 0; -}; - - -/** - * An abstract formatted value: a string with associated field attributes. - * Many formatters format to classes implementing FormattedValue. - * - * @draft ICU 64 - */ -class U_I18N_API FormattedValue /* not : public UObject because this is an interface/mixin class */ { - public: - /** @draft ICU 64 */ - virtual ~FormattedValue(); - - /** - * Returns the formatted string as a self-contained UnicodeString. - * - * If you need the string within the current scope only, consider #toTempString. - * - * @param status Set if an error occurs. - * @return a UnicodeString containing the formatted string. - * - * @draft ICU 64 - */ - virtual UnicodeString toString(UErrorCode& status) const = 0; - - /** - * Returns the formatted string as a read-only alias to memory owned by the FormattedValue. - * - * The return value is valid only as long as this FormattedValue is present and unchanged in - * memory. If you need the string outside the current scope, consider #toString. - * - * The buffer returned by calling UnicodeString#getBuffer() on the return value is - * guaranteed to be NUL-terminated. - * - * @param status Set if an error occurs. - * @return a temporary UnicodeString containing the formatted string. - * - * @draft ICU 64 - */ - virtual UnicodeString toTempString(UErrorCode& status) const = 0; - - /** - * Appends the formatted string to an Appendable. - * - * @param appendable - * The Appendable to which to append the string output. - * @param status Set if an error occurs. - * @return The same Appendable, for chaining. - * - * @draft ICU 64 - * @see Appendable - */ - virtual Appendable& appendTo(Appendable& appendable, UErrorCode& status) const = 0; - - /** - * Iterates over field positions in the FormattedValue. This lets you determine the position - * of specific types of substrings, like a month or a decimal separator. - * - * To loop over all field positions: - * - * ConstrainedFieldPosition cfpos; - * while (fmtval.nextPosition(cfpos, status)) { - * // handle the field position; get information from cfpos - * } - * - * @param cfpos - * The object used for iteration state. This can provide constraints to iterate over - * only one specific category or field; - * see ConstrainedFieldPosition#constrainCategory - * and ConstrainedFieldPosition#constrainField. - * @param status Set if an error occurs. - * @return TRUE if a new occurrence of the field was found; - * FALSE otherwise or if an error was set. - * - * @draft ICU 64 - */ - virtual UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const = 0; -}; - - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* U_HIDE_DRAFT_API */ -#endif /* #if !UCONFIG_NO_FORMATTING */ -#endif // __FORMATTEDVALUE_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/fpositer.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/fpositer.h deleted file mode 100644 index 5be78b007d..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/fpositer.h +++ /dev/null @@ -1,123 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 2010-2012, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************** -* -* File attiter.h -* -* Modification History: -* -* Date Name Description -* 12/15/2009 dougfelt Created -******************************************************************************** -*/ - -#ifndef FPOSITER_H -#define FPOSITER_H - -#include "unicode/utypes.h" -#include "unicode/uobject.h" - -/** - * \file - * \brief C++ API: FieldPosition Iterator. - */ - -#if UCONFIG_NO_FORMATTING - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/* - * Allow the declaration of APIs with pointers to FieldPositionIterator - * even when formatting is removed from the build. - */ -class FieldPositionIterator; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#else - -#include "unicode/fieldpos.h" -#include "unicode/umisc.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class UVector32; - -/** - * FieldPositionIterator returns the field ids and their start/limit positions generated - * by a call to Format::format. See Format, NumberFormat, DecimalFormat. - * @stable ICU 4.4 - */ -class U_I18N_API FieldPositionIterator : public UObject { -public: - /** - * Destructor. - * @stable ICU 4.4 - */ - ~FieldPositionIterator(); - - /** - * Constructs a new, empty iterator. - * @stable ICU 4.4 - */ - FieldPositionIterator(void); - - /** - * Copy constructor. If the copy failed for some reason, the new iterator will - * be empty. - * @stable ICU 4.4 - */ - FieldPositionIterator(const FieldPositionIterator&); - - /** - * Return true if another object is semantically equal to this - * one. - *

- * Return true if this FieldPositionIterator is at the same position in an - * equal array of run values. - * @stable ICU 4.4 - */ - UBool operator==(const FieldPositionIterator&) const; - - /** - * Returns the complement of the result of operator== - * @param rhs The FieldPositionIterator to be compared for inequality - * @return the complement of the result of operator== - * @stable ICU 4.4 - */ - UBool operator!=(const FieldPositionIterator& rhs) const { return !operator==(rhs); } - - /** - * If the current position is valid, updates the FieldPosition values, advances the iterator, - * and returns TRUE, otherwise returns FALSE. - * @stable ICU 4.4 - */ - UBool next(FieldPosition& fp); - -private: - /** - * Sets the data used by the iterator, and resets the position. - * Returns U_ILLEGAL_ARGUMENT_ERROR in status if the data is not valid - * (length is not a multiple of 3, or start >= limit for any run). - */ - void setData(UVector32 *adopt, UErrorCode& status); - - friend class FieldPositionIteratorHandler; - - UVector32 *data; - int32_t pos; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // FPOSITER_H diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/gender.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/gender.h deleted file mode 100644 index dd103fbd54..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/gender.h +++ /dev/null @@ -1,120 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2008-2013, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************************* -* -* -* File GENDER.H -* -* Modification History:* -* Date Name Description -* -******************************************************************************** -*/ - -#ifndef _GENDER -#define _GENDER - -/** - * \file - * \brief C++ API: GenderInfo computes the gender of a list. - */ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/locid.h" -#include "unicode/ugender.h" -#include "unicode/uobject.h" - -class GenderInfoTest; - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** \internal Forward Declaration */ -void U_CALLCONV GenderInfo_initCache(UErrorCode &status); - -/** - * GenderInfo computes the gender of a list as a whole given the gender of - * each element. - * @stable ICU 50 - */ -class U_I18N_API GenderInfo : public UObject { -public: - - /** - * Provides access to the predefined GenderInfo object for a given - * locale. - * - * @param locale The locale for which a GenderInfo object is - * returned. - * @param status Output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @return The predefined GenderInfo object pointer for - * this locale. The returned object is immutable, so it is - * declared as const. Caller does not own the returned - * pointer, so it must not attempt to free it. - * @stable ICU 50 - */ - static const GenderInfo* U_EXPORT2 getInstance(const Locale& locale, UErrorCode& status); - - /** - * Determines the gender of a list as a whole given the gender of each - * of the elements. - * - * @param genders the gender of each element in the list. - * @param length the length of gender array. - * @param status Output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @return the gender of the whole list. - * @stable ICU 50 - */ - UGender getListGender(const UGender* genders, int32_t length, UErrorCode& status) const; - - /** - * Destructor. - * - * @stable ICU 50 - */ - virtual ~GenderInfo(); - -private: - int32_t _style; - - /** - * Copy constructor. One object per locale invariant. Clients - * must never copy GenderInfo objects. - */ - GenderInfo(const GenderInfo& other); - - /** - * Assignment operator. Not applicable to immutable objects. - */ - GenderInfo& operator=(const GenderInfo&); - - GenderInfo(); - - static const GenderInfo* getNeutralInstance(); - - static const GenderInfo* getMixedNeutralInstance(); - - static const GenderInfo* getMaleTaintsInstance(); - - static const GenderInfo* loadInstance(const Locale& locale, UErrorCode& status); - - friend class ::GenderInfoTest; - friend void U_CALLCONV GenderInfo_initCache(UErrorCode &status); -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _GENDER -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/gregocal.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/gregocal.h deleted file mode 100644 index 4ae5562536..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/gregocal.h +++ /dev/null @@ -1,781 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -* Copyright (C) 1997-2013, International Business Machines Corporation and others. -* All Rights Reserved. -******************************************************************************** -* -* File GREGOCAL.H -* -* Modification History: -* -* Date Name Description -* 04/22/97 aliu Overhauled header. -* 07/28/98 stephen Sync with JDK 1.2 -* 09/04/98 stephen Re-sync with JDK 8/31 putback -* 09/14/98 stephen Changed type of kOneDay, kOneWeek to double. -* Fixed bug in roll() -* 10/15/99 aliu Fixed j31, incorrect WEEK_OF_YEAR computation. -* Added documentation of WEEK_OF_YEAR computation. -* 10/15/99 aliu Fixed j32, cannot set date to Feb 29 2000 AD. -* {JDK bug 4210209 4209272} -* 11/07/2003 srl Update, clean up documentation. -******************************************************************************** -*/ - -#ifndef GREGOCAL_H -#define GREGOCAL_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/calendar.h" - -/** - * \file - * \brief C++ API: Concrete class which provides the standard calendar. - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * Concrete class which provides the standard calendar used by most of the world. - *

- * The standard (Gregorian) calendar has 2 eras, BC and AD. - *

- * This implementation handles a single discontinuity, which corresponds by default to - * the date the Gregorian calendar was originally instituted (October 15, 1582). Not all - * countries adopted the Gregorian calendar then, so this cutover date may be changed by - * the caller. - *

- * Prior to the institution of the Gregorian Calendar, New Year's Day was March 25. To - * avoid confusion, this Calendar always uses January 1. A manual adjustment may be made - * if desired for dates that are prior to the Gregorian changeover and which fall - * between January 1 and March 24. - * - *

Values calculated for the WEEK_OF_YEAR field range from 1 to - * 53. Week 1 for a year is the first week that contains at least - * getMinimalDaysInFirstWeek() days from that year. It thus - * depends on the values of getMinimalDaysInFirstWeek(), - * getFirstDayOfWeek(), and the day of the week of January 1. - * Weeks between week 1 of one year and week 1 of the following year are - * numbered sequentially from 2 to 52 or 53 (as needed). - * - *

For example, January 1, 1998 was a Thursday. If - * getFirstDayOfWeek() is MONDAY and - * getMinimalDaysInFirstWeek() is 4 (these are the values - * reflecting ISO 8601 and many national standards), then week 1 of 1998 starts - * on December 29, 1997, and ends on January 4, 1998. If, however, - * getFirstDayOfWeek() is SUNDAY, then week 1 of 1998 - * starts on January 4, 1998, and ends on January 10, 1998; the first three days - * of 1998 then are part of week 53 of 1997. - * - *

Example for using GregorianCalendar: - *

- * \code
- *     // get the supported ids for GMT-08:00 (Pacific Standard Time)
- *     UErrorCode success = U_ZERO_ERROR;
- *     const StringEnumeration *ids = TimeZone::createEnumeration(-8 * 60 * 60 * 1000);
- *     // if no ids were returned, something is wrong. get out.
- *     if (ids == 0 || ids->count(success) == 0) {
- *         return;
- *     }
- *
- *     // begin output
- *     cout << "Current Time" << endl;
- *
- *     // create a Pacific Standard Time time zone
- *     SimpleTimeZone* pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids->unext(NULL, success)));
- *
- *     // set up rules for daylight savings time
- *     pdt->setStartRule(UCAL_MARCH, 1, UCAL_SUNDAY, 2 * 60 * 60 * 1000);
- *     pdt->setEndRule(UCAL_NOVEMBER, 2, UCAL_SUNDAY, 2 * 60 * 60 * 1000);
- *
- *     // create a GregorianCalendar with the Pacific Daylight time zone
- *     // and the current date and time
- *     Calendar* calendar = new GregorianCalendar( pdt, success );
- *
- *     // print out a bunch of interesting things
- *     cout << "ERA: " << calendar->get( UCAL_ERA, success ) << endl;
- *     cout << "YEAR: " << calendar->get( UCAL_YEAR, success ) << endl;
- *     cout << "MONTH: " << calendar->get( UCAL_MONTH, success ) << endl;
- *     cout << "WEEK_OF_YEAR: " << calendar->get( UCAL_WEEK_OF_YEAR, success ) << endl;
- *     cout << "WEEK_OF_MONTH: " << calendar->get( UCAL_WEEK_OF_MONTH, success ) << endl;
- *     cout << "DATE: " << calendar->get( UCAL_DATE, success ) << endl;
- *     cout << "DAY_OF_MONTH: " << calendar->get( UCAL_DAY_OF_MONTH, success ) << endl;
- *     cout << "DAY_OF_YEAR: " << calendar->get( UCAL_DAY_OF_YEAR, success ) << endl;
- *     cout << "DAY_OF_WEEK: " << calendar->get( UCAL_DAY_OF_WEEK, success ) << endl;
- *     cout << "DAY_OF_WEEK_IN_MONTH: " << calendar->get( UCAL_DAY_OF_WEEK_IN_MONTH, success ) << endl;
- *     cout << "AM_PM: " << calendar->get( UCAL_AM_PM, success ) << endl;
- *     cout << "HOUR: " << calendar->get( UCAL_HOUR, success ) << endl;
- *     cout << "HOUR_OF_DAY: " << calendar->get( UCAL_HOUR_OF_DAY, success ) << endl;
- *     cout << "MINUTE: " << calendar->get( UCAL_MINUTE, success ) << endl;
- *     cout << "SECOND: " << calendar->get( UCAL_SECOND, success ) << endl;
- *     cout << "MILLISECOND: " << calendar->get( UCAL_MILLISECOND, success ) << endl;
- *     cout << "ZONE_OFFSET: " << (calendar->get( UCAL_ZONE_OFFSET, success )/(60*60*1000)) << endl;
- *     cout << "DST_OFFSET: " << (calendar->get( UCAL_DST_OFFSET, success )/(60*60*1000)) << endl;
- *
- *     cout << "Current Time, with hour reset to 3" << endl;
- *     calendar->clear(UCAL_HOUR_OF_DAY); // so doesn't override
- *     calendar->set(UCAL_HOUR, 3);
- *     cout << "ERA: " << calendar->get( UCAL_ERA, success ) << endl;
- *     cout << "YEAR: " << calendar->get( UCAL_YEAR, success ) << endl;
- *     cout << "MONTH: " << calendar->get( UCAL_MONTH, success ) << endl;
- *     cout << "WEEK_OF_YEAR: " << calendar->get( UCAL_WEEK_OF_YEAR, success ) << endl;
- *     cout << "WEEK_OF_MONTH: " << calendar->get( UCAL_WEEK_OF_MONTH, success ) << endl;
- *     cout << "DATE: " << calendar->get( UCAL_DATE, success ) << endl;
- *     cout << "DAY_OF_MONTH: " << calendar->get( UCAL_DAY_OF_MONTH, success ) << endl;
- *     cout << "DAY_OF_YEAR: " << calendar->get( UCAL_DAY_OF_YEAR, success ) << endl;
- *     cout << "DAY_OF_WEEK: " << calendar->get( UCAL_DAY_OF_WEEK, success ) << endl;
- *     cout << "DAY_OF_WEEK_IN_MONTH: " << calendar->get( UCAL_DAY_OF_WEEK_IN_MONTH, success ) << endl;
- *     cout << "AM_PM: " << calendar->get( UCAL_AM_PM, success ) << endl;
- *     cout << "HOUR: " << calendar->get( UCAL_HOUR, success ) << endl;
- *     cout << "HOUR_OF_DAY: " << calendar->get( UCAL_HOUR_OF_DAY, success ) << endl;
- *     cout << "MINUTE: " << calendar->get( UCAL_MINUTE, success ) << endl;
- *     cout << "SECOND: " << calendar->get( UCAL_SECOND, success ) << endl;
- *     cout << "MILLISECOND: " << calendar->get( UCAL_MILLISECOND, success ) << endl;
- *     cout << "ZONE_OFFSET: " << (calendar->get( UCAL_ZONE_OFFSET, success )/(60*60*1000)) << endl; // in hours
- *     cout << "DST_OFFSET: " << (calendar->get( UCAL_DST_OFFSET, success )/(60*60*1000)) << endl; // in hours
- *
- *     if (U_FAILURE(success)) {
- *         cout << "An error occured. success=" << u_errorName(success) << endl;
- *     }
- *
- *     delete ids;
- *     delete calendar; // also deletes pdt
- * \endcode
- * 
- * @stable ICU 2.0 - */ -class U_I18N_API GregorianCalendar: public Calendar { -public: - - /** - * Useful constants for GregorianCalendar and TimeZone. - * @stable ICU 2.0 - */ - enum EEras { - BC, - AD - }; - - /** - * Constructs a default GregorianCalendar using the current time in the default time - * zone with the default locale. - * - * @param success Indicates the status of GregorianCalendar object construction. - * Returns U_ZERO_ERROR if constructed successfully. - * @stable ICU 2.0 - */ - GregorianCalendar(UErrorCode& success); - - /** - * Constructs a GregorianCalendar based on the current time in the given time zone - * with the default locale. Clients are no longer responsible for deleting the given - * time zone object after it's adopted. - * - * @param zoneToAdopt The given timezone. - * @param success Indicates the status of GregorianCalendar object construction. - * Returns U_ZERO_ERROR if constructed successfully. - * @stable ICU 2.0 - */ - GregorianCalendar(TimeZone* zoneToAdopt, UErrorCode& success); - - /** - * Constructs a GregorianCalendar based on the current time in the given time zone - * with the default locale. - * - * @param zone The given timezone. - * @param success Indicates the status of GregorianCalendar object construction. - * Returns U_ZERO_ERROR if constructed successfully. - * @stable ICU 2.0 - */ - GregorianCalendar(const TimeZone& zone, UErrorCode& success); - - /** - * Constructs a GregorianCalendar based on the current time in the default time zone - * with the given locale. - * - * @param aLocale The given locale. - * @param success Indicates the status of GregorianCalendar object construction. - * Returns U_ZERO_ERROR if constructed successfully. - * @stable ICU 2.0 - */ - GregorianCalendar(const Locale& aLocale, UErrorCode& success); - - /** - * Constructs a GregorianCalendar based on the current time in the given time zone - * with the given locale. Clients are no longer responsible for deleting the given - * time zone object after it's adopted. - * - * @param zoneToAdopt The given timezone. - * @param aLocale The given locale. - * @param success Indicates the status of GregorianCalendar object construction. - * Returns U_ZERO_ERROR if constructed successfully. - * @stable ICU 2.0 - */ - GregorianCalendar(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success); - - /** - * Constructs a GregorianCalendar based on the current time in the given time zone - * with the given locale. - * - * @param zone The given timezone. - * @param aLocale The given locale. - * @param success Indicates the status of GregorianCalendar object construction. - * Returns U_ZERO_ERROR if constructed successfully. - * @stable ICU 2.0 - */ - GregorianCalendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success); - - /** - * Constructs a GregorianCalendar with the given AD date set in the default time - * zone with the default locale. - * - * @param year The value used to set the YEAR time field in the calendar. - * @param month The value used to set the MONTH time field in the calendar. Month - * value is 0-based. e.g., 0 for January. - * @param date The value used to set the DATE time field in the calendar. - * @param success Indicates the status of GregorianCalendar object construction. - * Returns U_ZERO_ERROR if constructed successfully. - * @stable ICU 2.0 - */ - GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode& success); - - /** - * Constructs a GregorianCalendar with the given AD date and time set for the - * default time zone with the default locale. - * - * @param year The value used to set the YEAR time field in the calendar. - * @param month The value used to set the MONTH time field in the calendar. Month - * value is 0-based. e.g., 0 for January. - * @param date The value used to set the DATE time field in the calendar. - * @param hour The value used to set the HOUR_OF_DAY time field in the calendar. - * @param minute The value used to set the MINUTE time field in the calendar. - * @param success Indicates the status of GregorianCalendar object construction. - * Returns U_ZERO_ERROR if constructed successfully. - * @stable ICU 2.0 - */ - GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode& success); - - /** - * Constructs a GregorianCalendar with the given AD date and time set for the - * default time zone with the default locale. - * - * @param year The value used to set the YEAR time field in the calendar. - * @param month The value used to set the MONTH time field in the calendar. Month - * value is 0-based. e.g., 0 for January. - * @param date The value used to set the DATE time field in the calendar. - * @param hour The value used to set the HOUR_OF_DAY time field in the calendar. - * @param minute The value used to set the MINUTE time field in the calendar. - * @param second The value used to set the SECOND time field in the calendar. - * @param success Indicates the status of GregorianCalendar object construction. - * Returns U_ZERO_ERROR if constructed successfully. - * @stable ICU 2.0 - */ - GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode& success); - - /** - * Destructor - * @stable ICU 2.0 - */ - virtual ~GregorianCalendar(); - - /** - * Copy constructor - * @param source the object to be copied. - * @stable ICU 2.0 - */ - GregorianCalendar(const GregorianCalendar& source); - - /** - * Default assignment operator - * @param right the object to be copied. - * @stable ICU 2.0 - */ - GregorianCalendar& operator=(const GregorianCalendar& right); - - /** - * Create and return a polymorphic copy of this calendar. - * @return return a polymorphic copy of this calendar. - * @stable ICU 2.0 - */ - virtual Calendar* clone(void) const; - - /** - * Sets the GregorianCalendar change date. This is the point when the switch from - * Julian dates to Gregorian dates occurred. Default is 00:00:00 local time, October - * 15, 1582. Previous to this time and date will be Julian dates. - * - * @param date The given Gregorian cutover date. - * @param success Output param set to success/failure code on exit. - * @stable ICU 2.0 - */ - void setGregorianChange(UDate date, UErrorCode& success); - - /** - * Gets the Gregorian Calendar change date. This is the point when the switch from - * Julian dates to Gregorian dates occurred. Default is 00:00:00 local time, October - * 15, 1582. Previous to this time and date will be Julian dates. - * - * @return The Gregorian cutover time for this calendar. - * @stable ICU 2.0 - */ - UDate getGregorianChange(void) const; - - /** - * Return true if the given year is a leap year. Determination of whether a year is - * a leap year is actually very complicated. We do something crude and mostly - * correct here, but for a real determination you need a lot of contextual - * information. For example, in Sweden, the change from Julian to Gregorian happened - * in a complex way resulting in missed leap years and double leap years between - * 1700 and 1753. Another example is that after the start of the Julian calendar in - * 45 B.C., the leap years did not regularize until 8 A.D. This method ignores these - * quirks, and pays attention only to the Julian onset date and the Gregorian - * cutover (which can be changed). - * - * @param year The given year. - * @return True if the given year is a leap year; false otherwise. - * @stable ICU 2.0 - */ - UBool isLeapYear(int32_t year) const; - - /** - * Returns TRUE if the given Calendar object is equivalent to this - * one. Calendar override. - * - * @param other the Calendar to be compared with this Calendar - * @stable ICU 2.4 - */ - virtual UBool isEquivalentTo(const Calendar& other) const; - - /** - * (Overrides Calendar) Rolls up or down by the given amount in the specified field. - * For more information, see the documentation for Calendar::roll(). - * - * @param field The time field. - * @param amount Indicates amount to roll. - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid, this will be set to - * an error status. - * @deprecated ICU 2.6. Use roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead. - */ - virtual void roll(EDateFields field, int32_t amount, UErrorCode& status); - - /** - * (Overrides Calendar) Rolls up or down by the given amount in the specified field. - * For more information, see the documentation for Calendar::roll(). - * - * @param field The time field. - * @param amount Indicates amount to roll. - * @param status Output param set to success/failure code on exit. If any value - * previously set in the time field is invalid, this will be set to - * an error status. - * @stable ICU 2.6. - */ - virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status); - -#ifndef U_HIDE_DEPRECATED_API - /** - * Return the minimum value that this field could have, given the current date. - * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum(). - * @param field the time field. - * @return the minimum value that this field could have, given the current date. - * @deprecated ICU 2.6. Use getActualMinimum(UCalendarDateFields field) instead. - */ - int32_t getActualMinimum(EDateFields field) const; - - /** - * Return the minimum value that this field could have, given the current date. - * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum(). - * @param field the time field. - * @param status - * @return the minimum value that this field could have, given the current date. - * @deprecated ICU 2.6. Use getActualMinimum(UCalendarDateFields field) instead. (Added to ICU 3.0 for signature consistency) - */ - int32_t getActualMinimum(EDateFields field, UErrorCode& status) const; -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Return the minimum value that this field could have, given the current date. - * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum(). - * @param field the time field. - * @param status error result. - * @return the minimum value that this field could have, given the current date. - * @stable ICU 3.0 - */ - int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const; - -#ifndef U_HIDE_DEPRECATED_API - /** - * Return the maximum value that this field could have, given the current date. - * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual - * maximum would be 28; for "Feb 3, 1996" it s 29. Similarly for a Hebrew calendar, - * for some years the actual maximum for MONTH is 12, and for others 13. - * @param field the time field. - * @return the maximum value that this field could have, given the current date. - * @deprecated ICU 2.6. Use getActualMaximum(UCalendarDateFields field) instead. - */ - int32_t getActualMaximum(EDateFields field) const; -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Return the maximum value that this field could have, given the current date. - * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual - * maximum would be 28; for "Feb 3, 1996" it s 29. Similarly for a Hebrew calendar, - * for some years the actual maximum for MONTH is 12, and for others 13. - * @param field the time field. - * @param status returns any errors that may result from this function call. - * @return the maximum value that this field could have, given the current date. - * @stable ICU 2.6 - */ - virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const; - - /** - * (Overrides Calendar) Return true if the current date for this Calendar is in - * Daylight Savings Time. Recognizes DST_OFFSET, if it is set. - * - * @param status Fill-in parameter which receives the status of this operation. - * @return True if the current date for this Calendar is in Daylight Savings Time, - * false, otherwise. - * @stable ICU 2.0 - */ - virtual UBool inDaylightTime(UErrorCode& status) const; - -public: - - /** - * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual - * override. This method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() methods call - * this method. - * - * @return The class ID for this object. All objects of a given class have the - * same class ID. Objects of other classes have different class IDs. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const; - - /** - * Return the class ID for this class. This is useful only for comparing to a return - * value from getDynamicClassID(). For example: - * - * Base* polymorphic_pointer = createPolymorphicObject(); - * if (polymorphic_pointer->getDynamicClassID() == - * Derived::getStaticClassID()) ... - * - * @return The class ID for all objects of this class. - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns the calendar type name string for this Calendar object. - * The returned string is the legacy ICU calendar attribute value, - * for example, "gregorian" or "japanese". - * - * For more details see the Calendar::getType() documentation. - * - * @return legacy calendar type name string - * @stable ICU 49 - */ - virtual const char * getType() const; - - private: - GregorianCalendar(); // default constructor not implemented - - protected: - /** - * Return the ERA. We need a special method for this because the - * default ERA is AD, but a zero (unset) ERA is BC. - * @return the ERA. - * @internal - */ - virtual int32_t internalGetEra() const; - - /** - * Return the Julian day number of day before the first day of the - * given month in the given extended year. Subclasses should override - * this method to implement their calendar system. - * @param eyear the extended year - * @param month the zero-based month, or 0 if useMonth is false - * @param useMonth if false, compute the day before the first day of - * the given year, otherwise, compute the day before the first day of - * the given month - * @return the Julian day number of the day before the first - * day of the given month and year - * @internal - */ - virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, - UBool useMonth) const; - - /** - * Subclasses may override this. This method calls - * handleGetMonthLength() to obtain the calendar-specific month - * length. - * @param bestField which field to use to calculate the date - * @return julian day specified by calendar fields. - * @internal - */ - virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) ; - - /** - * Return the number of days in the given month of the given extended - * year of this calendar system. Subclasses should override this - * method if they can provide a more correct or more efficient - * implementation than the default implementation in Calendar. - * @internal - */ - virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const; - - /** - * Return the number of days in the given extended year of this - * calendar system. Subclasses should override this method if they can - * provide a more correct or more efficient implementation than the - * default implementation in Calendar. - * @stable ICU 2.0 - */ - virtual int32_t handleGetYearLength(int32_t eyear) const; - - /** - * return the length of the given month. - * @param month the given month. - * @return the length of the given month. - * @internal - */ - virtual int32_t monthLength(int32_t month) const; - - /** - * return the length of the month according to the given year. - * @param month the given month. - * @param year the given year. - * @return the length of the month - * @internal - */ - virtual int32_t monthLength(int32_t month, int32_t year) const; - -#ifndef U_HIDE_INTERNAL_API - /** - * return the length of the given year. - * @param year the given year. - * @return the length of the given year. - * @internal - */ - int32_t yearLength(int32_t year) const; - - /** - * return the length of the year field. - * @return the length of the year field - * @internal - */ - int32_t yearLength(void) const; - - /** - * After adjustments such as add(MONTH), add(YEAR), we don't want the - * month to jump around. E.g., we don't want Jan 31 + 1 month to go to Mar - * 3, we want it to go to Feb 28. Adjustments which might run into this - * problem call this method to retain the proper month. - * @internal - */ - void pinDayOfMonth(void); -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Return the day number with respect to the epoch. January 1, 1970 (Gregorian) - * is day zero. - * @param status Fill-in parameter which receives the status of this operation. - * @return the day number with respect to the epoch. - * @internal - */ - virtual UDate getEpochDay(UErrorCode& status); - - /** - * Subclass API for defining limits of different types. - * Subclasses must implement this method to return limits for the - * following fields: - * - *
UCAL_ERA
-     * UCAL_YEAR
-     * UCAL_MONTH
-     * UCAL_WEEK_OF_YEAR
-     * UCAL_WEEK_OF_MONTH
-     * UCAL_DATE (DAY_OF_MONTH on Java)
-     * UCAL_DAY_OF_YEAR
-     * UCAL_DAY_OF_WEEK_IN_MONTH
-     * UCAL_YEAR_WOY
-     * UCAL_EXTENDED_YEAR
- * - * @param field one of the above field numbers - * @param limitType one of MINIMUM, GREATEST_MINIMUM, - * LEAST_MAXIMUM, or MAXIMUM - * @internal - */ - virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const; - - /** - * Return the extended year defined by the current fields. This will - * use the UCAL_EXTENDED_YEAR field or the UCAL_YEAR and supra-year fields (such - * as UCAL_ERA) specific to the calendar system, depending on which set of - * fields is newer. - * @return the extended year - * @internal - */ - virtual int32_t handleGetExtendedYear(); - - /** - * Subclasses may override this to convert from week fields - * (YEAR_WOY and WEEK_OF_YEAR) to an extended year in the case - * where YEAR, EXTENDED_YEAR are not set. - * The Gregorian implementation assumes a yearWoy in gregorian format, according to the current era. - * @return the extended year, UCAL_EXTENDED_YEAR - * @internal - */ - virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy); - - - /** - * Subclasses may override this method to compute several fields - * specific to each calendar system. These are: - * - *
  • ERA - *
  • YEAR - *
  • MONTH - *
  • DAY_OF_MONTH - *
  • DAY_OF_YEAR - *
  • EXTENDED_YEAR
- * - *

The GregorianCalendar implementation implements - * a calendar with the specified Julian/Gregorian cutover date. - * @internal - */ - virtual void handleComputeFields(int32_t julianDay, UErrorCode &status); - - private: - /** - * Compute the julian day number of the given year. - * @param isGregorian if true, using Gregorian calendar, otherwise using Julian calendar - * @param year the given year. - * @param isLeap true if the year is a leap year. - * @return - */ - static double computeJulianDayOfYear(UBool isGregorian, int32_t year, - UBool& isLeap); - - /** - * Validates the values of the set time fields. True if they're all valid. - * @return True if the set time fields are all valid. - */ - UBool validateFields(void) const; - - /** - * Validates the value of the given time field. True if it's valid. - */ - UBool boundsCheck(int32_t value, UCalendarDateFields field) const; - - /** - * Return the pseudo-time-stamp for two fields, given their - * individual pseudo-time-stamps. If either of the fields - * is unset, then the aggregate is unset. Otherwise, the - * aggregate is the later of the two stamps. - * @param stamp_a One given field. - * @param stamp_b Another given field. - * @return the pseudo-time-stamp for two fields - */ - int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b); - - /** - * The point at which the Gregorian calendar rules are used, measured in - * milliseconds from the standard epoch. Default is October 15, 1582 - * (Gregorian) 00:00:00 UTC, that is, October 4, 1582 (Julian) is followed - * by October 15, 1582 (Gregorian). This corresponds to Julian day number - * 2299161. This is measured from the standard epoch, not in Julian Days. - */ - UDate fGregorianCutover; - - /** - * Julian day number of the Gregorian cutover - */ - int32_t fCutoverJulianDay; - - /** - * Midnight, local time (using this Calendar's TimeZone) at or before the - * gregorianCutover. This is a pure date value with no time of day or - * timezone component. - */ - UDate fNormalizedGregorianCutover;// = gregorianCutover; - - /** - * The year of the gregorianCutover, with 0 representing - * 1 BC, -1 representing 2 BC, etc. - */ - int32_t fGregorianCutoverYear;// = 1582; - - /** - * The year of the gregorianCutover, with 0 representing - * 1 BC, -1 representing 2 BC, etc. - */ - int32_t fGregorianCutoverJulianDay;// = 2299161; - - /** - * Converts time as milliseconds to Julian date. The Julian date used here is not a - * true Julian date, since it is measured from midnight, not noon. - * - * @param millis The given milliseconds. - * @return The Julian date number. - */ - static double millisToJulianDay(UDate millis); - - /** - * Converts Julian date to time as milliseconds. The Julian date used here is not a - * true Julian date, since it is measured from midnight, not noon. - * - * @param julian The given Julian date number. - * @return Time as milliseconds. - */ - static UDate julianDayToMillis(double julian); - - /** - * Used by handleComputeJulianDay() and handleComputeMonthStart(). - * Temporary field indicating whether the calendar is currently Gregorian as opposed to Julian. - */ - UBool fIsGregorian; - - /** - * Used by handleComputeJulianDay() and handleComputeMonthStart(). - * Temporary field indicating that the sense of the gregorian cutover should be inverted - * to handle certain calculations on and around the cutover date. - */ - UBool fInvertGregorian; - - - public: // internal implementation - - /** - * @return TRUE if this calendar has the notion of a default century - * @internal - */ - virtual UBool haveDefaultCentury() const; - - /** - * @return the start of the default century - * @internal - */ - virtual UDate defaultCenturyStart() const; - - /** - * @return the beginning year of the default century - * @internal - */ - virtual int32_t defaultCenturyStartYear() const; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _GREGOCAL -//eof - diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/icudataver.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/icudataver.h deleted file mode 100644 index 1cb202e3d4..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/icudataver.h +++ /dev/null @@ -1,43 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 2009-2013, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -*/ - - -/** - * \file - * \brief C API: access to ICU Data Version number - */ - -#ifndef __ICU_DATA_VER_H__ -#define __ICU_DATA_VER_H__ - -#include "unicode/utypes.h" - -/** - * @stable ICU 49 - */ -#define U_ICU_VERSION_BUNDLE "icuver" - -/** - * @stable ICU 49 - */ -#define U_ICU_DATA_KEY "DataVersion" - -/** - * Retrieves the data version from icuver and stores it in dataVersionFillin. - * - * @param dataVersionFillin icuver data version information to be filled in if not-null - * @param status stores the error code from the calls to resource bundle - * - * @stable ICU 49 - */ -U_STABLE void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status); - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/icuplug.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/icuplug.h deleted file mode 100644 index 2e57b149e1..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/icuplug.h +++ /dev/null @@ -1,388 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 2009-2015, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* -* FILE NAME : icuplug.h -* -* Date Name Description -* 10/29/2009 sl New. -****************************************************************************** -*/ - -/** - * \file - * \brief C API: ICU Plugin API - * - *

C API: ICU Plugin API

- * - *

C API allowing run-time loadable modules that extend or modify ICU functionality.

- * - *

Loading and Configuration

- * - *

At ICU startup time, the environment variable "ICU_PLUGINS" will be - * queried for a directory name. If it is not set, the preprocessor symbol - * "DEFAULT_ICU_PLUGINS" will be checked for a default value.

- * - *

Within the above-named directory, the file "icuplugins##.txt" will be - * opened, if present, where ## is the major+minor number of the currently - * running ICU (such as, 44 for ICU 4.4, thus icuplugins44.txt)

- * - *

The configuration file has this format:

- * - *
    - *
  • Hash (#) begins a comment line
  • - * - *
  • Non-comment lines have two or three components: - * LIBRARYNAME ENTRYPOINT [ CONFIGURATION .. ]
  • - * - *
  • Tabs or spaces separate the three items.
  • - * - *
  • LIBRARYNAME is the name of a shared library, either a short name if - * it is on the loader path, or a full pathname.
  • - * - *
  • ENTRYPOINT is the short (undecorated) symbol name of the plugin's - * entrypoint, as above.
  • - * - *
  • CONFIGURATION is the entire rest of the line . It's passed as-is to - * the plugin.
  • - *
- * - *

An example configuration file is, in its entirety:

- * - * \code - * # this is icuplugins44.txt - * testplug.dll myPlugin hello=world - * \endcode - *

Plugins are categorized as "high" or "low" level. Low level are those - * which must be run BEFORE high level plugins, and before any operations - * which cause ICU to be 'initialized'. If a plugin is low level but - * causes ICU to allocate memory or become initialized, that plugin is said - * to cause a 'level change'.

- * - *

At load time, ICU first queries all plugins to determine their level, - * then loads all 'low' plugins first, and then loads all 'high' plugins. - * Plugins are otherwise loaded in the order listed in the configuration file.

- * - *

Implementing a Plugin

- * \code - * U_CAPI UPlugTokenReturn U_EXPORT2 - * myPlugin (UPlugData *plug, UPlugReason reason, UErrorCode *status) { - * if(reason==UPLUG_REASON_QUERY) { - * uplug_setPlugName(plug, "Simple Plugin"); - * uplug_setPlugLevel(plug, UPLUG_LEVEL_HIGH); - * } else if(reason==UPLUG_REASON_LOAD) { - * ... Set up some ICU things here.... - * } else if(reason==UPLUG_REASON_UNLOAD) { - * ... unload, clean up ... - * } - * return UPLUG_TOKEN; - * } - * \endcode - * - *

The UPlugData* is an opaque pointer to the plugin-specific data, and is - * used in all other API calls.

- * - *

The API contract is:

- *
  1. The plugin MUST always return UPLUG_TOKEN as a return value- to - * indicate that it is a valid plugin.
  2. - * - *
  3. When the 'reason' parameter is set to UPLUG_REASON_QUERY, the - * plugin MUST call uplug_setPlugLevel() to indicate whether it is a high - * level or low level plugin.
  4. - * - *
  5. When the 'reason' parameter is UPLUG_REASON_QUERY, the plugin - * SHOULD call uplug_setPlugName to indicate a human readable plugin name.
- * - * - * \internal ICU 4.4 Technology Preview - */ - - -#ifndef ICUPLUG_H -#define ICUPLUG_H - -#include "unicode/utypes.h" - - -#if UCONFIG_ENABLE_PLUGINS || defined(U_IN_DOXYGEN) - - - -/* === Basic types === */ - -#ifndef U_HIDE_INTERNAL_API -/** - * @{ - * Opaque structure passed to/from a plugin. - * use the APIs to access it. - * @internal ICU 4.4 Technology Preview - */ - -struct UPlugData; -typedef struct UPlugData UPlugData; - -/** @} */ - -/** - * Random Token to identify a valid ICU plugin. Plugins must return this - * from the entrypoint. - * @internal ICU 4.4 Technology Preview - */ -#define UPLUG_TOKEN 0x54762486 - -/** - * Max width of names, symbols, and configuration strings - * @internal ICU 4.4 Technology Preview - */ -#define UPLUG_NAME_MAX 100 - - -/** - * Return value from a plugin entrypoint. - * Must always be set to UPLUG_TOKEN - * @see UPLUG_TOKEN - * @internal ICU 4.4 Technology Preview - */ -typedef uint32_t UPlugTokenReturn; - -/** - * Reason code for the entrypoint's call - * @internal ICU 4.4 Technology Preview - */ -typedef enum { - UPLUG_REASON_QUERY = 0, /**< The plugin is being queried for info. **/ - UPLUG_REASON_LOAD = 1, /**< The plugin is being loaded. **/ - UPLUG_REASON_UNLOAD = 2, /**< The plugin is being unloaded. **/ - /** - * Number of known reasons. - * @internal The numeric value may change over time, see ICU ticket #12420. - */ - UPLUG_REASON_COUNT -} UPlugReason; - - -/** - * Level of plugin loading - * INITIAL: UNKNOWN - * QUERY: INVALID -> { LOW | HIGH } - * ERR -> INVALID - * @internal ICU 4.4 Technology Preview - */ -typedef enum { - UPLUG_LEVEL_INVALID = 0, /**< The plugin is invalid, hasn't called uplug_setLevel, or can't load. **/ - UPLUG_LEVEL_UNKNOWN = 1, /**< The plugin is waiting to be installed. **/ - UPLUG_LEVEL_LOW = 2, /**< The plugin must be called before u_init completes **/ - UPLUG_LEVEL_HIGH = 3, /**< The plugin can run at any time. **/ - /** - * Number of known levels. - * @internal The numeric value may change over time, see ICU ticket #12420. - */ - UPLUG_LEVEL_COUNT -} UPlugLevel; - -/** - * Entrypoint for an ICU plugin. - * @param plug the UPlugData handle. - * @param status the plugin's extended status code. - * @return A valid plugin must return UPLUG_TOKEN - * @internal ICU 4.4 Technology Preview - */ -typedef UPlugTokenReturn (U_EXPORT2 UPlugEntrypoint) ( - UPlugData *plug, - UPlugReason reason, - UErrorCode *status); - -/* === Needed for Implementing === */ - -/** - * Request that this plugin not be unloaded at cleanup time. - * This is appropriate for plugins which cannot be cleaned up. - * @see u_cleanup() - * @param plug plugin - * @param dontUnload set true if this plugin can't be unloaded - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL void U_EXPORT2 -uplug_setPlugNoUnload(UPlugData *plug, UBool dontUnload); - -/** - * Set the level of this plugin. - * @param plug plugin data handle - * @param level the level of this plugin - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL void U_EXPORT2 -uplug_setPlugLevel(UPlugData *plug, UPlugLevel level); - -/** - * Get the level of this plugin. - * @param plug plugin data handle - * @return the level of this plugin - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL UPlugLevel U_EXPORT2 -uplug_getPlugLevel(UPlugData *plug); - -/** - * Get the lowest level of plug which can currently load. - * For example, if UPLUG_LEVEL_LOW is returned, then low level plugins may load - * if UPLUG_LEVEL_HIGH is returned, then only high level plugins may load. - * @return the lowest level of plug which can currently load - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL UPlugLevel U_EXPORT2 -uplug_getCurrentLevel(void); - - -/** - * Get plug load status - * @return The error code of this plugin's load attempt. - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL UErrorCode U_EXPORT2 -uplug_getPlugLoadStatus(UPlugData *plug); - -/** - * Set the human-readable name of this plugin. - * @param plug plugin data handle - * @param name the name of this plugin. The first UPLUG_NAME_MAX characters willi be copied into a new buffer. - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL void U_EXPORT2 -uplug_setPlugName(UPlugData *plug, const char *name); - -/** - * Get the human-readable name of this plugin. - * @param plug plugin data handle - * @return the name of this plugin - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL const char * U_EXPORT2 -uplug_getPlugName(UPlugData *plug); - -/** - * Return the symbol name for this plugin, if known. - * @param plug plugin data handle - * @return the symbol name, or NULL - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL const char * U_EXPORT2 -uplug_getSymbolName(UPlugData *plug); - -/** - * Return the library name for this plugin, if known. - * @param plug plugin data handle - * @param status error code - * @return the library name, or NULL - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL const char * U_EXPORT2 -uplug_getLibraryName(UPlugData *plug, UErrorCode *status); - -/** - * Return the library used for this plugin, if known. - * Plugins could use this to load data out of their - * @param plug plugin data handle - * @return the library, or NULL - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL void * U_EXPORT2 -uplug_getLibrary(UPlugData *plug); - -/** - * Return the plugin-specific context data. - * @param plug plugin data handle - * @return the context, or NULL if not set - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL void * U_EXPORT2 -uplug_getContext(UPlugData *plug); - -/** - * Set the plugin-specific context data. - * @param plug plugin data handle - * @param context new context to set - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL void U_EXPORT2 -uplug_setContext(UPlugData *plug, void *context); - - -/** - * Get the configuration string, if available. - * The string is in the platform default codepage. - * @param plug plugin data handle - * @return configuration string, or else null. - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL const char * U_EXPORT2 -uplug_getConfiguration(UPlugData *plug); - -/** - * Return all currently installed plugins, from newest to oldest - * Usage Example: - * \code - * UPlugData *plug = NULL; - * while(plug=uplug_nextPlug(plug)) { - * ... do something with 'plug' ... - * } - * \endcode - * Not thread safe- do not call while plugs are added or removed. - * @param prior pass in 'NULL' to get the first (most recent) plug, - * otherwise pass the value returned on a prior call to uplug_nextPlug - * @return the next oldest plugin, or NULL if no more. - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL UPlugData* U_EXPORT2 -uplug_nextPlug(UPlugData *prior); - -/** - * Inject a plugin as if it were loaded from a library. - * This is useful for testing plugins. - * Note that it will have a 'NULL' library pointer associated - * with it, and therefore no llibrary will be closed at cleanup time. - * Low level plugins may not be able to load, as ordering can't be enforced. - * @param entrypoint entrypoint to install - * @param config user specified configuration string, if available, or NULL. - * @param status error result - * @return the new UPlugData associated with this plugin, or NULL if error. - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL UPlugData* U_EXPORT2 -uplug_loadPlugFromEntrypoint(UPlugEntrypoint *entrypoint, const char *config, UErrorCode *status); - - -/** - * Inject a plugin from a library, as if the information came from a config file. - * Low level plugins may not be able to load, and ordering can't be enforced. - * @param libName DLL name to load - * @param sym symbol of plugin (UPlugEntrypoint function) - * @param config configuration string, or NULL - * @param status error result - * @return the new UPlugData associated with this plugin, or NULL if error. - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL UPlugData* U_EXPORT2 -uplug_loadPlugFromLibrary(const char *libName, const char *sym, const char *config, UErrorCode *status); - -/** - * Remove a plugin. - * Will request the plugin to be unloaded, and close the library if needed - * @param plug plugin handle to close - * @param status error result - * @internal ICU 4.4 Technology Preview - */ -U_INTERNAL void U_EXPORT2 -uplug_removePlug(UPlugData *plug, UErrorCode *status); -#endif /* U_HIDE_INTERNAL_API */ - -#endif /* UCONFIG_ENABLE_PLUGINS */ - -#endif /* _ICUPLUG */ - diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/idna.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/idna.h deleted file mode 100644 index 208368cc63..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/idna.h +++ /dev/null @@ -1,327 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2010-2012, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* file name: idna.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2010mar05 -* created by: Markus W. Scherer -*/ - -#ifndef __IDNA_H__ -#define __IDNA_H__ - -/** - * \file - * \brief C++ API: Internationalizing Domain Names in Applications (IDNA) - */ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_IDNA - -#include "unicode/bytestream.h" -#include "unicode/stringpiece.h" -#include "unicode/uidna.h" -#include "unicode/unistr.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class IDNAInfo; - -/** - * Abstract base class for IDNA processing. - * See http://www.unicode.org/reports/tr46/ - * and http://www.ietf.org/rfc/rfc3490.txt - * - * The IDNA class is not intended for public subclassing. - * - * This C++ API currently only implements UTS #46. - * The uidna.h C API implements both UTS #46 (functions using UIDNA service object) - * and IDNA2003 (functions that do not use a service object). - * @stable ICU 4.6 - */ -class U_COMMON_API IDNA : public UObject { -public: - /** - * Destructor. - * @stable ICU 4.6 - */ - ~IDNA(); - - /** - * Returns an IDNA instance which implements UTS #46. - * Returns an unmodifiable instance, owned by the caller. - * Cache it for multiple operations, and delete it when done. - * The instance is thread-safe, that is, it can be used concurrently. - * - * UTS #46 defines Unicode IDNA Compatibility Processing, - * updated to the latest version of Unicode and compatible with both - * IDNA2003 and IDNA2008. - * - * The worker functions use transitional processing, including deviation mappings, - * unless UIDNA_NONTRANSITIONAL_TO_ASCII or UIDNA_NONTRANSITIONAL_TO_UNICODE - * is used in which case the deviation characters are passed through without change. - * - * Disallowed characters are mapped to U+FFFD. - * - * For available options see the uidna.h header. - * Operations with the UTS #46 instance do not support the - * UIDNA_ALLOW_UNASSIGNED option. - * - * By default, the UTS #46 implementation allows all ASCII characters (as valid or mapped). - * When the UIDNA_USE_STD3_RULES option is used, ASCII characters other than - * letters, digits, hyphen (LDH) and dot/full stop are disallowed and mapped to U+FFFD. - * - * @param options Bit set to modify the processing and error checking. - * See option bit set values in uidna.h. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the UTS #46 IDNA instance, if successful - * @stable ICU 4.6 - */ - static IDNA * - createUTS46Instance(uint32_t options, UErrorCode &errorCode); - - /** - * Converts a single domain name label into its ASCII form for DNS lookup. - * If any processing step fails, then info.hasErrors() will be TRUE and - * the result might not be an ASCII string. - * The label might be modified according to the types of errors. - * Labels with severe errors will be left in (or turned into) their Unicode form. - * - * The UErrorCode indicates an error only in exceptional cases, - * such as a U_MEMORY_ALLOCATION_ERROR. - * - * @param label Input domain name label - * @param dest Destination string object - * @param info Output container of IDNA processing details. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return dest - * @stable ICU 4.6 - */ - virtual UnicodeString & - labelToASCII(const UnicodeString &label, UnicodeString &dest, - IDNAInfo &info, UErrorCode &errorCode) const = 0; - - /** - * Converts a single domain name label into its Unicode form for human-readable display. - * If any processing step fails, then info.hasErrors() will be TRUE. - * The label might be modified according to the types of errors. - * - * The UErrorCode indicates an error only in exceptional cases, - * such as a U_MEMORY_ALLOCATION_ERROR. - * - * @param label Input domain name label - * @param dest Destination string object - * @param info Output container of IDNA processing details. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return dest - * @stable ICU 4.6 - */ - virtual UnicodeString & - labelToUnicode(const UnicodeString &label, UnicodeString &dest, - IDNAInfo &info, UErrorCode &errorCode) const = 0; - - /** - * Converts a whole domain name into its ASCII form for DNS lookup. - * If any processing step fails, then info.hasErrors() will be TRUE and - * the result might not be an ASCII string. - * The domain name might be modified according to the types of errors. - * Labels with severe errors will be left in (or turned into) their Unicode form. - * - * The UErrorCode indicates an error only in exceptional cases, - * such as a U_MEMORY_ALLOCATION_ERROR. - * - * @param name Input domain name - * @param dest Destination string object - * @param info Output container of IDNA processing details. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return dest - * @stable ICU 4.6 - */ - virtual UnicodeString & - nameToASCII(const UnicodeString &name, UnicodeString &dest, - IDNAInfo &info, UErrorCode &errorCode) const = 0; - - /** - * Converts a whole domain name into its Unicode form for human-readable display. - * If any processing step fails, then info.hasErrors() will be TRUE. - * The domain name might be modified according to the types of errors. - * - * The UErrorCode indicates an error only in exceptional cases, - * such as a U_MEMORY_ALLOCATION_ERROR. - * - * @param name Input domain name - * @param dest Destination string object - * @param info Output container of IDNA processing details. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return dest - * @stable ICU 4.6 - */ - virtual UnicodeString & - nameToUnicode(const UnicodeString &name, UnicodeString &dest, - IDNAInfo &info, UErrorCode &errorCode) const = 0; - - // UTF-8 versions of the processing methods ---------------------------- *** - - /** - * Converts a single domain name label into its ASCII form for DNS lookup. - * UTF-8 version of labelToASCII(), same behavior. - * - * @param label Input domain name label - * @param dest Destination byte sink; Flush()ed if successful - * @param info Output container of IDNA processing details. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return dest - * @stable ICU 4.6 - */ - virtual void - labelToASCII_UTF8(StringPiece label, ByteSink &dest, - IDNAInfo &info, UErrorCode &errorCode) const; - - /** - * Converts a single domain name label into its Unicode form for human-readable display. - * UTF-8 version of labelToUnicode(), same behavior. - * - * @param label Input domain name label - * @param dest Destination byte sink; Flush()ed if successful - * @param info Output container of IDNA processing details. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return dest - * @stable ICU 4.6 - */ - virtual void - labelToUnicodeUTF8(StringPiece label, ByteSink &dest, - IDNAInfo &info, UErrorCode &errorCode) const; - - /** - * Converts a whole domain name into its ASCII form for DNS lookup. - * UTF-8 version of nameToASCII(), same behavior. - * - * @param name Input domain name - * @param dest Destination byte sink; Flush()ed if successful - * @param info Output container of IDNA processing details. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return dest - * @stable ICU 4.6 - */ - virtual void - nameToASCII_UTF8(StringPiece name, ByteSink &dest, - IDNAInfo &info, UErrorCode &errorCode) const; - - /** - * Converts a whole domain name into its Unicode form for human-readable display. - * UTF-8 version of nameToUnicode(), same behavior. - * - * @param name Input domain name - * @param dest Destination byte sink; Flush()ed if successful - * @param info Output container of IDNA processing details. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return dest - * @stable ICU 4.6 - */ - virtual void - nameToUnicodeUTF8(StringPiece name, ByteSink &dest, - IDNAInfo &info, UErrorCode &errorCode) const; -}; - -class UTS46; - -/** - * Output container for IDNA processing errors. - * The IDNAInfo class is not suitable for subclassing. - * @stable ICU 4.6 - */ -class U_COMMON_API IDNAInfo : public UMemory { -public: - /** - * Constructor for stack allocation. - * @stable ICU 4.6 - */ - IDNAInfo() : errors(0), labelErrors(0), isTransDiff(FALSE), isBiDi(FALSE), isOkBiDi(TRUE) {} - /** - * Were there IDNA processing errors? - * @return TRUE if there were processing errors - * @stable ICU 4.6 - */ - UBool hasErrors() const { return errors!=0; } - /** - * Returns a bit set indicating IDNA processing errors. - * See UIDNA_ERROR_... constants in uidna.h. - * @return bit set of processing errors - * @stable ICU 4.6 - */ - uint32_t getErrors() const { return errors; } - /** - * Returns TRUE if transitional and nontransitional processing produce different results. - * This is the case when the input label or domain name contains - * one or more deviation characters outside a Punycode label (see UTS #46). - *
    - *
  • With nontransitional processing, such characters are - * copied to the destination string. - *
  • With transitional processing, such characters are - * mapped (sharp s/sigma) or removed (joiner/nonjoiner). - *
- * @return TRUE if transitional and nontransitional processing produce different results - * @stable ICU 4.6 - */ - UBool isTransitionalDifferent() const { return isTransDiff; } - -private: - friend class UTS46; - - IDNAInfo(const IDNAInfo &other); // no copying - IDNAInfo &operator=(const IDNAInfo &other); // no copying - - void reset() { - errors=labelErrors=0; - isTransDiff=FALSE; - isBiDi=FALSE; - isOkBiDi=TRUE; - } - - uint32_t errors, labelErrors; - UBool isTransDiff; - UBool isBiDi; - UBool isOkBiDi; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // UCONFIG_NO_IDNA -#endif // __IDNA_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/listformatter.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/listformatter.h deleted file mode 100644 index 0cb39e7cc8..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/listformatter.h +++ /dev/null @@ -1,303 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2012-2016, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: listformatter.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 20120426 -* created by: Umesh P. Nair -*/ - -#ifndef __LISTFORMATTER_H__ -#define __LISTFORMATTER_H__ - -#include "unicode/utypes.h" - -#include "unicode/unistr.h" -#include "unicode/locid.h" -#include "unicode/formattedvalue.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class FieldPositionIterator; -class FieldPositionHandler; -class FormattedListData; -class ListFormatter; - -/** @internal */ -class Hashtable; - -/** @internal */ -struct ListFormatInternal; - -/* The following can't be #ifndef U_HIDE_INTERNAL_API, needed for other .h file declarations */ -/** - * @internal - * \cond - */ -struct ListFormatData : public UMemory { - UnicodeString twoPattern; - UnicodeString startPattern; - UnicodeString middlePattern; - UnicodeString endPattern; - - ListFormatData(const UnicodeString& two, const UnicodeString& start, const UnicodeString& middle, const UnicodeString& end) : - twoPattern(two), startPattern(start), middlePattern(middle), endPattern(end) {} -}; -/** \endcond */ - - -/** - * \file - * \brief C++ API: API for formatting a list. - */ - - -#if !UCONFIG_NO_FORMATTING -#ifndef U_HIDE_DRAFT_API -/** - * An immutable class containing the result of a list formatting operation. - * - * Instances of this class are immutable and thread-safe. - * - * When calling nextPosition(): - * The fields are returned from start to end. The special field category - * UFIELD_CATEGORY_LIST_SPAN is used to indicate which argument - * was inserted at the given position. The span category will - * always occur before the corresponding instance of UFIELD_CATEGORY_LIST - * in the nextPosition() iterator. - * - * Not intended for public subclassing. - * - * @draft ICU 64 - */ -class U_I18N_API FormattedList : public UMemory, public FormattedValue { - public: - /** - * Default constructor; makes an empty FormattedList. - * @draft ICU 64 - */ - FormattedList() : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {} - - /** - * Move constructor: Leaves the source FormattedList in an undefined state. - * @draft ICU 64 - */ - FormattedList(FormattedList&& src) U_NOEXCEPT; - - /** - * Destruct an instance of FormattedList. - * @draft ICU 64 - */ - virtual ~FormattedList() U_OVERRIDE; - - /** Copying not supported; use move constructor instead. */ - FormattedList(const FormattedList&) = delete; - - /** Copying not supported; use move assignment instead. */ - FormattedList& operator=(const FormattedList&) = delete; - - /** - * Move assignment: Leaves the source FormattedList in an undefined state. - * @draft ICU 64 - */ - FormattedList& operator=(FormattedList&& src) U_NOEXCEPT; - - /** @copydoc FormattedValue::toString() */ - UnicodeString toString(UErrorCode& status) const U_OVERRIDE; - - /** @copydoc FormattedValue::toTempString() */ - UnicodeString toTempString(UErrorCode& status) const U_OVERRIDE; - - /** @copydoc FormattedValue::appendTo() */ - Appendable &appendTo(Appendable& appendable, UErrorCode& status) const U_OVERRIDE; - - /** @copydoc FormattedValue::nextPosition() */ - UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const U_OVERRIDE; - - private: - FormattedListData *fData; - UErrorCode fErrorCode; - explicit FormattedList(FormattedListData *results) - : fData(results), fErrorCode(U_ZERO_ERROR) {} - explicit FormattedList(UErrorCode errorCode) - : fData(nullptr), fErrorCode(errorCode) {} - friend class ListFormatter; -}; -#endif /* U_HIDE_DRAFT_API */ -#endif // !UCONFIG_NO_FORMATTING - - -/** - * An immutable class for formatting a list, using data from CLDR (or supplied - * separately). - * - * Example: Input data ["Alice", "Bob", "Charlie", "Delta"] will be formatted - * as "Alice, Bob, Charlie and Delta" in English. - * - * The ListFormatter class is not intended for public subclassing. - * @stable ICU 50 - */ -class U_I18N_API ListFormatter : public UObject{ - - public: - - /** - * Copy constructor. - * @stable ICU 52 - */ - ListFormatter(const ListFormatter&); - - /** - * Assignment operator. - * @stable ICU 52 - */ - ListFormatter& operator=(const ListFormatter& other); - - /** - * Creates a ListFormatter appropriate for the default locale. - * - * @param errorCode ICU error code, set if no data available for default locale. - * @return Pointer to a ListFormatter object for the default locale, - * created from internal data derived from CLDR data. - * @stable ICU 50 - */ - static ListFormatter* createInstance(UErrorCode& errorCode); - - /** - * Creates a ListFormatter appropriate for a locale. - * - * @param locale The locale. - * @param errorCode ICU error code, set if no data available for the given locale. - * @return A ListFormatter object created from internal data derived from - * CLDR data. - * @stable ICU 50 - */ - static ListFormatter* createInstance(const Locale& locale, UErrorCode& errorCode); - -#ifndef U_HIDE_INTERNAL_API - /** - * Creates a ListFormatter appropriate for a locale and style. - * - * @param locale The locale. - * @param style the style, either "standard", "or", "unit", "unit-narrow", or "unit-short" - * @param errorCode ICU error code, set if no data available for the given locale. - * @return A ListFormatter object created from internal data derived from - * CLDR data. - * @internal - */ - static ListFormatter* createInstance(const Locale& locale, const char* style, UErrorCode& errorCode); -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Destructor. - * - * @stable ICU 50 - */ - virtual ~ListFormatter(); - - - /** - * Formats a list of strings. - * - * @param items An array of strings to be combined and formatted. - * @param n_items Length of the array items. - * @param appendTo The string to which the result should be appended to. - * @param errorCode ICU error code, set if there is an error. - * @return Formatted string combining the elements of items, appended to appendTo. - * @stable ICU 50 - */ - UnicodeString& format(const UnicodeString items[], int32_t n_items, - UnicodeString& appendTo, UErrorCode& errorCode) const; - -#ifndef U_HIDE_DRAFT_API - /** - * Format a list of strings. - * - * @param items An array of strings to be combined and formatted. - * @param n_items Length of the array items. - * @param appendTo The string to which the formatted result will be - * appended. - * @param posIter On return, can be used to iterate over positions of - * fields generated by this format call. Field values are - * defined in UListFormatterField. Can be NULL. - * @param errorCode ICU error code returned here. - * @return Formatted string combining the elements of items, - * appended to appendTo. - * @draft ICU 63 - */ - UnicodeString& format(const UnicodeString items[], int32_t n_items, - UnicodeString & appendTo, FieldPositionIterator* posIter, - UErrorCode& errorCode) const; -#endif /* U_HIDE_DRAFT_API */ - -#if !UCONFIG_NO_FORMATTING -#ifndef U_HIDE_DRAFT_API - /** - * Formats a list of strings to a FormattedList, which exposes field - * position information. The FormattedList contains more information than - * a FieldPositionIterator. - * - * @param items An array of strings to be combined and formatted. - * @param n_items Length of the array items. - * @param errorCode ICU error code returned here. - * @return A FormattedList containing field information. - * @draft ICU 64 - */ - FormattedList formatStringsToValue( - const UnicodeString items[], - int32_t n_items, - UErrorCode& errorCode) const; -#endif /* U_HIDE_DRAFT_API */ -#endif // !UCONFIG_NO_FORMATTING - -#ifndef U_HIDE_INTERNAL_API - /** - @internal for MeasureFormat - */ - UnicodeString& format( - const UnicodeString items[], - int32_t n_items, - UnicodeString& appendTo, - int32_t index, - int32_t &offset, - UErrorCode& errorCode) const; - /** - * @internal constructor made public for testing. - */ - ListFormatter(const ListFormatData &data, UErrorCode &errorCode); - /** - * @internal constructor made public for testing. - */ - ListFormatter(const ListFormatInternal* listFormatterInternal); -#endif /* U_HIDE_INTERNAL_API */ - - private: - static void initializeHash(UErrorCode& errorCode); - static const ListFormatInternal* getListFormatInternal(const Locale& locale, const char *style, UErrorCode& errorCode); - struct ListPatternsSink; - static ListFormatInternal* loadListFormatInternal(const Locale& locale, const char* style, UErrorCode& errorCode); - - UnicodeString& format_( - const UnicodeString items[], int32_t n_items, UnicodeString& appendTo, - int32_t index, int32_t &offset, FieldPositionHandler* handler, UErrorCode& errorCode) const; - - ListFormatter(); - - ListFormatInternal* owned; - const ListFormatInternal* data; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // __LISTFORMATTER_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/localebuilder.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/localebuilder.h deleted file mode 100644 index 03b9eca5c5..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/localebuilder.h +++ /dev/null @@ -1,294 +0,0 @@ -// © 2018 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html#License -#ifndef __LOCALEBUILDER_H__ -#define __LOCALEBUILDER_H__ - -#include "unicode/locid.h" -#include "unicode/stringpiece.h" -#include "unicode/uobject.h" -#include "unicode/utypes.h" - - -#ifndef U_HIDE_DRAFT_API -/** - * \file - * \brief C++ API: Builder API for Locale - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN -class CharString; - -/** - * LocaleBuilder is used to build instances of Locale - * from values configured by the setters. Unlike the Locale - * constructors, the LocaleBuilder checks if a value configured by a - * setter satisfies the syntax requirements defined by the Locale - * class. A Locale object created by a LocaleBuilder is - * well-formed and can be transformed to a well-formed IETF BCP 47 language tag - * without losing information. - * - *

The following example shows how to create a Locale object - * with the LocaleBuilder. - *

- *
- *     UErrorCode status = U_ZERO_ERROR;
- *     Locale aLocale = LocaleBuilder()
- *                          .setLanguage("sr")
- *                          .setScript("Latn")
- *                          .setRegion("RS")
- *                          .build(status);
- *     if (U_SUCCESS(status)) {
- *       // ...
- *     }
- * 
- *
- * - *

LocaleBuilders can be reused; clear() resets all - * fields to their default values. - * - *

LocaleBuilder tracks errors in an internal UErrorCode. For all setters, - * except setLanguageTag and setLocale, LocaleBuilder will return immediately - * if the internal UErrorCode is in error state. - * To reset internal state and error code, call clear method. - * The setLanguageTag and setLocale method will first clear the internal - * UErrorCode, then track the error of the validation of the input parameter - * into the internal UErrorCode. - * - * @draft ICU 64 - */ -class U_COMMON_API LocaleBuilder : public UObject { -public: - /** - * Constructs an empty LocaleBuilder. The default value of all - * fields, extensions, and private use information is the - * empty string. - * - * @draft ICU 64 - */ - LocaleBuilder(); - - /** - * Destructor - * @draft ICU 64 - */ - virtual ~LocaleBuilder(); - - /** - * Resets the LocaleBuilder to match the provided - * locale. Existing state is discarded. - * - *

All fields of the locale must be well-formed. - *

This method clears the internal UErrorCode. - * - * @param locale the locale - * @return This builder. - * - * @draft ICU 64 - */ - LocaleBuilder& setLocale(const Locale& locale); - - /** - * Resets the LocaleBuilder to match the provided - * [Unicode Locale Identifier](http://www.unicode.org/reports/tr35/tr35.html#unicode_locale_id) . - * Discards the existing state. the empty string cause the builder to be - * reset, like {@link #clear}. Grandfathered tags are converted to their - * canonical form before being processed. Otherwise, the language - * tag must be well-formed, or else the build() method will later - * report an U_ILLEGAL_ARGUMENT_ERROR. - * - *

This method clears the internal UErrorCode. - * - * @param tag the language tag, defined as - * [unicode_locale_id](http://www.unicode.org/reports/tr35/tr35.html#unicode_locale_id). - * @return This builder. - * @draft ICU 64 - */ - LocaleBuilder& setLanguageTag(StringPiece tag); - - /** - * Sets the language. If language is the empty string, the - * language in this LocaleBuilder is removed. Otherwise, the - * language must be well-formed, or else the build() method will - * later report an U_ILLEGAL_ARGUMENT_ERROR. - * - *

The syntax of language value is defined as - * [unicode_language_subtag](http://www.unicode.org/reports/tr35/tr35.html#unicode_language_subtag). - * - * @param language the language - * @return This builder. - * @draft ICU 64 - */ - LocaleBuilder& setLanguage(StringPiece language); - - /** - * Sets the script. If script is the empty string, the script in - * this LocaleBuilder is removed. - * Otherwise, the script must be well-formed, or else the build() - * method will later report an U_ILLEGAL_ARGUMENT_ERROR. - * - *

The script value is a four-letter script code as - * [unicode_script_subtag](http://www.unicode.org/reports/tr35/tr35.html#unicode_script_subtag) - * defined by ISO 15924 - * - * @param script the script - * @return This builder. - * @draft ICU 64 - */ - LocaleBuilder& setScript(StringPiece script); - - /** - * Sets the region. If region is the empty string, the region in this - * LocaleBuilder is removed. Otherwise, the region - * must be well-formed, or else the build() method will later report an - * U_ILLEGAL_ARGUMENT_ERROR. - * - *

The region value is defined by - * [unicode_region_subtag](http://www.unicode.org/reports/tr35/tr35.html#unicode_region_subtag) - * as a two-letter ISO 3166 code or a three-digit UN M.49 area code. - * - *

The region value in the Locale created by the - * LocaleBuilder is always normalized to upper case. - * - * @param region the region - * @return This builder. - * @draft ICU 64 - */ - LocaleBuilder& setRegion(StringPiece region); - - /** - * Sets the variant. If variant is the empty string, the variant in this - * LocaleBuilder is removed. Otherwise, the variant - * must be well-formed, or else the build() method will later report an - * U_ILLEGAL_ARGUMENT_ERROR. - * - *

Note: This method checks if variant - * satisfies the - * [unicode_variant_subtag](http://www.unicode.org/reports/tr35/tr35.html#unicode_variant_subtag) - * syntax requirements, and normalizes the value to lowercase letters. However, - * the Locale class does not impose any syntactic - * restriction on variant. To set an ill-formed variant, use a Locale constructor. - * If there are multiple unicode_variant_subtag, the caller must concatenate - * them with '-' as separator (ex: "foobar-fibar"). - * - * @param variant the variant - * @return This builder. - * @draft ICU 64 - */ - LocaleBuilder& setVariant(StringPiece variant); - - /** - * Sets the extension for the given key. If the value is the empty string, - * the extension is removed. Otherwise, the key and - * value must be well-formed, or else the build() method will - * later report an U_ILLEGAL_ARGUMENT_ERROR. - * - *

Note: The key ('u') is used for the Unicode locale extension. - * Setting a value for this key replaces any existing Unicode locale key/type - * pairs with those defined in the extension. - * - *

Note: The key ('x') is used for the private use code. To be - * well-formed, the value for this key needs only to have subtags of one to - * eight alphanumeric characters, not two to eight as in the general case. - * - * @param key the extension key - * @param value the extension value - * @return This builder. - * @draft ICU 64 - */ - LocaleBuilder& setExtension(char key, StringPiece value); - - /** - * Sets the Unicode locale keyword type for the given key. If the type - * StringPiece is constructed with a nullptr, the keyword is removed. - * If the type is the empty string, the keyword is set without type subtags. - * Otherwise, the key and type must be well-formed, or else the build() - * method will later report an U_ILLEGAL_ARGUMENT_ERROR. - * - *

Keys and types are converted to lower case. - * - *

Note:Setting the 'u' extension via {@link #setExtension} - * replaces all Unicode locale keywords with those defined in the - * extension. - * - * @param key the Unicode locale key - * @param type the Unicode locale type - * @return This builder. - * @draft ICU 64 - */ - LocaleBuilder& setUnicodeLocaleKeyword( - StringPiece key, StringPiece type); - - /** - * Adds a unicode locale attribute, if not already present, otherwise - * has no effect. The attribute must not be empty string and must be - * well-formed or U_ILLEGAL_ARGUMENT_ERROR will be set to status - * during the build() call. - * - * @param attribute the attribute - * @return This builder. - * @draft ICU 64 - */ - LocaleBuilder& addUnicodeLocaleAttribute(StringPiece attribute); - - /** - * Removes a unicode locale attribute, if present, otherwise has no - * effect. The attribute must not be empty string and must be well-formed - * or U_ILLEGAL_ARGUMENT_ERROR will be set to status during the build() call. - * - *

Attribute comparison for removal is case-insensitive. - * - * @param attribute the attribute - * @return This builder. - * @draft ICU 64 - */ - LocaleBuilder& removeUnicodeLocaleAttribute(StringPiece attribute); - - /** - * Resets the builder to its initial, empty state. - *

This method clears the internal UErrorCode. - * - * @return this builder - * @draft ICU 64 - */ - LocaleBuilder& clear(); - - /** - * Resets the extensions to their initial, empty state. - * Language, script, region and variant are unchanged. - * - * @return this builder - * @draft ICU 64 - */ - LocaleBuilder& clearExtensions(); - - /** - * Returns an instance of Locale created from the fields set - * on this builder. - * If any set methods or during the build() call require memory allocation - * but fail U_MEMORY_ALLOCATION_ERROR will be set to status. - * If any of the fields set by the setters are not well-formed, the status - * will be set to U_ILLEGAL_ARGUMENT_ERROR. The state of the builder will - * not change after the build() call and the caller is free to keep using - * the same builder to build more locales. - * - * @return a new Locale - * @draft ICU 64 - */ - Locale build(UErrorCode& status); - -private: - UErrorCode status_; - char language_[9]; - char script_[5]; - char region_[4]; - CharString *variant_; // Pointer not object so we need not #include internal charstr.h. - icu::Locale *extensions_; // Pointer not object. Storage for all other fields. - -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // U_HIDE_DRAFT_API -#endif // __LOCALEBUILDER_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/localpointer.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/localpointer.h deleted file mode 100644 index e011688b1a..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/localpointer.h +++ /dev/null @@ -1,607 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2009-2016, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: localpointer.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2009nov13 -* created by: Markus W. Scherer -*/ - -#ifndef __LOCALPOINTER_H__ -#define __LOCALPOINTER_H__ - -/** - * \file - * \brief C++ API: "Smart pointers" for use with and in ICU4C C++ code. - * - * These classes are inspired by - * - std::auto_ptr - * - boost::scoped_ptr & boost::scoped_array - * - Taligent Safe Pointers (TOnlyPointerTo) - * - * but none of those provide for all of the goals for ICU smart pointers: - * - Smart pointer owns the object and releases it when it goes out of scope. - * - No transfer of ownership via copy/assignment to reduce misuse. Simpler & more robust. - * - ICU-compatible: No exceptions. - * - Need to be able to orphan/release the pointer and its ownership. - * - Need variants for normal C++ object pointers, C++ arrays, and ICU C service objects. - * - * For details see http://site.icu-project.org/design/cpp/scoped_ptr - */ - -#include "unicode/utypes.h" - -#if U_SHOW_CPLUSPLUS_API - -#include - -U_NAMESPACE_BEGIN - -/** - * "Smart pointer" base class; do not use directly: use LocalPointer etc. - * - * Base class for smart pointer classes that do not throw exceptions. - * - * Do not use this base class directly, since it does not delete its pointer. - * A subclass must implement methods that delete the pointer: - * Destructor and adoptInstead(). - * - * There is no operator T *() provided because the programmer must decide - * whether to use getAlias() (without transfer of ownership) or orphan() - * (with transfer of ownership and NULLing of the pointer). - * - * @see LocalPointer - * @see LocalArray - * @see U_DEFINE_LOCAL_OPEN_POINTER - * @stable ICU 4.4 - */ -template -class LocalPointerBase { -public: - // No heap allocation. Use only on the stack. - static void* U_EXPORT2 operator new(size_t) = delete; - static void* U_EXPORT2 operator new[](size_t) = delete; -#if U_HAVE_PLACEMENT_NEW - static void* U_EXPORT2 operator new(size_t, void*) = delete; -#endif - - /** - * Constructor takes ownership. - * @param p simple pointer to an object that is adopted - * @stable ICU 4.4 - */ - explicit LocalPointerBase(T *p=NULL) : ptr(p) {} - /** - * Destructor deletes the object it owns. - * Subclass must override: Base class does nothing. - * @stable ICU 4.4 - */ - ~LocalPointerBase() { /* delete ptr; */ } - /** - * NULL check. - * @return TRUE if ==NULL - * @stable ICU 4.4 - */ - UBool isNull() const { return ptr==NULL; } - /** - * NULL check. - * @return TRUE if !=NULL - * @stable ICU 4.4 - */ - UBool isValid() const { return ptr!=NULL; } - /** - * Comparison with a simple pointer, so that existing code - * with ==NULL need not be changed. - * @param other simple pointer for comparison - * @return true if this pointer value equals other - * @stable ICU 4.4 - */ - bool operator==(const T *other) const { return ptr==other; } - /** - * Comparison with a simple pointer, so that existing code - * with !=NULL need not be changed. - * @param other simple pointer for comparison - * @return true if this pointer value differs from other - * @stable ICU 4.4 - */ - bool operator!=(const T *other) const { return ptr!=other; } - /** - * Access without ownership change. - * @return the pointer value - * @stable ICU 4.4 - */ - T *getAlias() const { return ptr; } - /** - * Access without ownership change. - * @return the pointer value as a reference - * @stable ICU 4.4 - */ - T &operator*() const { return *ptr; } - /** - * Access without ownership change. - * @return the pointer value - * @stable ICU 4.4 - */ - T *operator->() const { return ptr; } - /** - * Gives up ownership; the internal pointer becomes NULL. - * @return the pointer value; - * caller becomes responsible for deleting the object - * @stable ICU 4.4 - */ - T *orphan() { - T *p=ptr; - ptr=NULL; - return p; - } - /** - * Deletes the object it owns, - * and adopts (takes ownership of) the one passed in. - * Subclass must override: Base class does not delete the object. - * @param p simple pointer to an object that is adopted - * @stable ICU 4.4 - */ - void adoptInstead(T *p) { - // delete ptr; - ptr=p; - } -protected: - /** - * Actual pointer. - * @internal - */ - T *ptr; -private: - // No comparison operators with other LocalPointerBases. - bool operator==(const LocalPointerBase &other); - bool operator!=(const LocalPointerBase &other); - // No ownership sharing: No copy constructor, no assignment operator. - LocalPointerBase(const LocalPointerBase &other); - void operator=(const LocalPointerBase &other); -}; - -/** - * "Smart pointer" class, deletes objects via the standard C++ delete operator. - * For most methods see the LocalPointerBase base class. - * - * Usage example: - * \code - * LocalPointer s(new UnicodeString((UChar32)0x50005)); - * int32_t length=s->length(); // 2 - * char16_t lead=s->charAt(0); // 0xd900 - * if(some condition) { return; } // no need to explicitly delete the pointer - * s.adoptInstead(new UnicodeString((char16_t)0xfffc)); - * length=s->length(); // 1 - * // no need to explicitly delete the pointer - * \endcode - * - * @see LocalPointerBase - * @stable ICU 4.4 - */ -template -class LocalPointer : public LocalPointerBase { -public: - using LocalPointerBase::operator*; - using LocalPointerBase::operator->; - /** - * Constructor takes ownership. - * @param p simple pointer to an object that is adopted - * @stable ICU 4.4 - */ - explicit LocalPointer(T *p=NULL) : LocalPointerBase(p) {} - /** - * Constructor takes ownership and reports an error if NULL. - * - * This constructor is intended to be used with other-class constructors - * that may report a failure UErrorCode, - * so that callers need to check only for U_FAILURE(errorCode) - * and not also separately for isNull(). - * - * @param p simple pointer to an object that is adopted - * @param errorCode in/out UErrorCode, set to U_MEMORY_ALLOCATION_ERROR - * if p==NULL and no other failure code had been set - * @stable ICU 55 - */ - LocalPointer(T *p, UErrorCode &errorCode) : LocalPointerBase(p) { - if(p==NULL && U_SUCCESS(errorCode)) { - errorCode=U_MEMORY_ALLOCATION_ERROR; - } - } - /** - * Move constructor, leaves src with isNull(). - * @param src source smart pointer - * @stable ICU 56 - */ - LocalPointer(LocalPointer &&src) U_NOEXCEPT : LocalPointerBase(src.ptr) { - src.ptr=NULL; - } - -#ifndef U_HIDE_DRAFT_API - /** - * Constructs a LocalPointer from a C++11 std::unique_ptr. - * The LocalPointer steals the object owned by the std::unique_ptr. - * - * This constructor works via move semantics. If your std::unique_ptr is - * in a local variable, you must use std::move. - * - * @param p The std::unique_ptr from which the pointer will be stolen. - * @draft ICU 64 - */ - explicit LocalPointer(std::unique_ptr &&p) - : LocalPointerBase(p.release()) {} -#endif /* U_HIDE_DRAFT_API */ - - /** - * Destructor deletes the object it owns. - * @stable ICU 4.4 - */ - ~LocalPointer() { - delete LocalPointerBase::ptr; - } - /** - * Move assignment operator, leaves src with isNull(). - * The behavior is undefined if *this and src are the same object. - * @param src source smart pointer - * @return *this - * @stable ICU 56 - */ - LocalPointer &operator=(LocalPointer &&src) U_NOEXCEPT { - delete LocalPointerBase::ptr; - LocalPointerBase::ptr=src.ptr; - src.ptr=NULL; - return *this; - } - -#ifndef U_HIDE_DRAFT_API - /** - * Move-assign from an std::unique_ptr to this LocalPointer. - * Steals the pointer from the std::unique_ptr. - * - * @param p The std::unique_ptr from which the pointer will be stolen. - * @return *this - * @draft ICU 64 - */ - LocalPointer &operator=(std::unique_ptr &&p) U_NOEXCEPT { - adoptInstead(p.release()); - return *this; - } -#endif /* U_HIDE_DRAFT_API */ - - /** - * Swap pointers. - * @param other other smart pointer - * @stable ICU 56 - */ - void swap(LocalPointer &other) U_NOEXCEPT { - T *temp=LocalPointerBase::ptr; - LocalPointerBase::ptr=other.ptr; - other.ptr=temp; - } - /** - * Non-member LocalPointer swap function. - * @param p1 will get p2's pointer - * @param p2 will get p1's pointer - * @stable ICU 56 - */ - friend inline void swap(LocalPointer &p1, LocalPointer &p2) U_NOEXCEPT { - p1.swap(p2); - } - /** - * Deletes the object it owns, - * and adopts (takes ownership of) the one passed in. - * @param p simple pointer to an object that is adopted - * @stable ICU 4.4 - */ - void adoptInstead(T *p) { - delete LocalPointerBase::ptr; - LocalPointerBase::ptr=p; - } - /** - * Deletes the object it owns, - * and adopts (takes ownership of) the one passed in. - * - * If U_FAILURE(errorCode), then the current object is retained and the new one deleted. - * - * If U_SUCCESS(errorCode) but the input pointer is NULL, - * then U_MEMORY_ALLOCATION_ERROR is set, - * the current object is deleted, and NULL is set. - * - * @param p simple pointer to an object that is adopted - * @param errorCode in/out UErrorCode, set to U_MEMORY_ALLOCATION_ERROR - * if p==NULL and no other failure code had been set - * @stable ICU 55 - */ - void adoptInsteadAndCheckErrorCode(T *p, UErrorCode &errorCode) { - if(U_SUCCESS(errorCode)) { - delete LocalPointerBase::ptr; - LocalPointerBase::ptr=p; - if(p==NULL) { - errorCode=U_MEMORY_ALLOCATION_ERROR; - } - } else { - delete p; - } - } - -#ifndef U_HIDE_DRAFT_API - /** - * Conversion operator to a C++11 std::unique_ptr. - * Disowns the object and gives it to the returned std::unique_ptr. - * - * This operator works via move semantics. If your LocalPointer is - * in a local variable, you must use std::move. - * - * @return An std::unique_ptr owning the pointer previously owned by this - * icu::LocalPointer. - * @draft ICU 64 - */ - operator std::unique_ptr () && { - return std::unique_ptr(LocalPointerBase::orphan()); - } -#endif /* U_HIDE_DRAFT_API */ -}; - -/** - * "Smart pointer" class, deletes objects via the C++ array delete[] operator. - * For most methods see the LocalPointerBase base class. - * Adds operator[] for array item access. - * - * Usage example: - * \code - * LocalArray a(new UnicodeString[2]); - * a[0].append((char16_t)0x61); - * if(some condition) { return; } // no need to explicitly delete the array - * a.adoptInstead(new UnicodeString[4]); - * a[3].append((char16_t)0x62).append((char16_t)0x63).reverse(); - * // no need to explicitly delete the array - * \endcode - * - * @see LocalPointerBase - * @stable ICU 4.4 - */ -template -class LocalArray : public LocalPointerBase { -public: - using LocalPointerBase::operator*; - using LocalPointerBase::operator->; - /** - * Constructor takes ownership. - * @param p simple pointer to an array of T objects that is adopted - * @stable ICU 4.4 - */ - explicit LocalArray(T *p=NULL) : LocalPointerBase(p) {} - /** - * Constructor takes ownership and reports an error if NULL. - * - * This constructor is intended to be used with other-class constructors - * that may report a failure UErrorCode, - * so that callers need to check only for U_FAILURE(errorCode) - * and not also separately for isNull(). - * - * @param p simple pointer to an array of T objects that is adopted - * @param errorCode in/out UErrorCode, set to U_MEMORY_ALLOCATION_ERROR - * if p==NULL and no other failure code had been set - * @stable ICU 56 - */ - LocalArray(T *p, UErrorCode &errorCode) : LocalPointerBase(p) { - if(p==NULL && U_SUCCESS(errorCode)) { - errorCode=U_MEMORY_ALLOCATION_ERROR; - } - } - /** - * Move constructor, leaves src with isNull(). - * @param src source smart pointer - * @stable ICU 56 - */ - LocalArray(LocalArray &&src) U_NOEXCEPT : LocalPointerBase(src.ptr) { - src.ptr=NULL; - } - -#ifndef U_HIDE_DRAFT_API - /** - * Constructs a LocalArray from a C++11 std::unique_ptr of an array type. - * The LocalPointer steals the array owned by the std::unique_ptr. - * - * This constructor works via move semantics. If your std::unique_ptr is - * in a local variable, you must use std::move. - * - * @param p The std::unique_ptr from which the array will be stolen. - * @draft ICU 64 - */ - explicit LocalArray(std::unique_ptr &&p) - : LocalPointerBase(p.release()) {} -#endif /* U_HIDE_DRAFT_API */ - - /** - * Destructor deletes the array it owns. - * @stable ICU 4.4 - */ - ~LocalArray() { - delete[] LocalPointerBase::ptr; - } - /** - * Move assignment operator, leaves src with isNull(). - * The behavior is undefined if *this and src are the same object. - * @param src source smart pointer - * @return *this - * @stable ICU 56 - */ - LocalArray &operator=(LocalArray &&src) U_NOEXCEPT { - delete[] LocalPointerBase::ptr; - LocalPointerBase::ptr=src.ptr; - src.ptr=NULL; - return *this; - } - -#ifndef U_HIDE_DRAFT_API - /** - * Move-assign from an std::unique_ptr to this LocalPointer. - * Steals the array from the std::unique_ptr. - * - * @param p The std::unique_ptr from which the array will be stolen. - * @return *this - * @draft ICU 64 - */ - LocalArray &operator=(std::unique_ptr &&p) U_NOEXCEPT { - adoptInstead(p.release()); - return *this; - } -#endif /* U_HIDE_DRAFT_API */ - - /** - * Swap pointers. - * @param other other smart pointer - * @stable ICU 56 - */ - void swap(LocalArray &other) U_NOEXCEPT { - T *temp=LocalPointerBase::ptr; - LocalPointerBase::ptr=other.ptr; - other.ptr=temp; - } - /** - * Non-member LocalArray swap function. - * @param p1 will get p2's pointer - * @param p2 will get p1's pointer - * @stable ICU 56 - */ - friend inline void swap(LocalArray &p1, LocalArray &p2) U_NOEXCEPT { - p1.swap(p2); - } - /** - * Deletes the array it owns, - * and adopts (takes ownership of) the one passed in. - * @param p simple pointer to an array of T objects that is adopted - * @stable ICU 4.4 - */ - void adoptInstead(T *p) { - delete[] LocalPointerBase::ptr; - LocalPointerBase::ptr=p; - } - /** - * Deletes the array it owns, - * and adopts (takes ownership of) the one passed in. - * - * If U_FAILURE(errorCode), then the current array is retained and the new one deleted. - * - * If U_SUCCESS(errorCode) but the input pointer is NULL, - * then U_MEMORY_ALLOCATION_ERROR is set, - * the current array is deleted, and NULL is set. - * - * @param p simple pointer to an array of T objects that is adopted - * @param errorCode in/out UErrorCode, set to U_MEMORY_ALLOCATION_ERROR - * if p==NULL and no other failure code had been set - * @stable ICU 56 - */ - void adoptInsteadAndCheckErrorCode(T *p, UErrorCode &errorCode) { - if(U_SUCCESS(errorCode)) { - delete[] LocalPointerBase::ptr; - LocalPointerBase::ptr=p; - if(p==NULL) { - errorCode=U_MEMORY_ALLOCATION_ERROR; - } - } else { - delete[] p; - } - } - /** - * Array item access (writable). - * No index bounds check. - * @param i array index - * @return reference to the array item - * @stable ICU 4.4 - */ - T &operator[](ptrdiff_t i) const { return LocalPointerBase::ptr[i]; } - -#ifndef U_HIDE_DRAFT_API - /** - * Conversion operator to a C++11 std::unique_ptr. - * Disowns the object and gives it to the returned std::unique_ptr. - * - * This operator works via move semantics. If your LocalPointer is - * in a local variable, you must use std::move. - * - * @return An std::unique_ptr owning the pointer previously owned by this - * icu::LocalPointer. - * @draft ICU 64 - */ - operator std::unique_ptr () && { - return std::unique_ptr(LocalPointerBase::orphan()); - } -#endif /* U_HIDE_DRAFT_API */ -}; - -/** - * \def U_DEFINE_LOCAL_OPEN_POINTER - * "Smart pointer" definition macro, deletes objects via the closeFunction. - * Defines a subclass of LocalPointerBase which works just - * like LocalPointer except that this subclass will use the closeFunction - * rather than the C++ delete operator. - * - * Usage example: - * \code - * LocalUCaseMapPointer csm(ucasemap_open(localeID, options, &errorCode)); - * utf8OutLength=ucasemap_utf8ToLower(csm.getAlias(), - * utf8Out, (int32_t)sizeof(utf8Out), - * utf8In, utf8InLength, &errorCode); - * if(U_FAILURE(errorCode)) { return; } // no need to explicitly delete the UCaseMap - * \endcode - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -#define U_DEFINE_LOCAL_OPEN_POINTER(LocalPointerClassName, Type, closeFunction) \ - class LocalPointerClassName : public LocalPointerBase { \ - public: \ - using LocalPointerBase::operator*; \ - using LocalPointerBase::operator->; \ - explicit LocalPointerClassName(Type *p=NULL) : LocalPointerBase(p) {} \ - LocalPointerClassName(LocalPointerClassName &&src) U_NOEXCEPT \ - : LocalPointerBase(src.ptr) { \ - src.ptr=NULL; \ - } \ - /* TODO: Be agnostic of the deleter function signature from the user-provided std::unique_ptr? */ \ - explicit LocalPointerClassName(std::unique_ptr &&p) \ - : LocalPointerBase(p.release()) {} \ - ~LocalPointerClassName() { if (ptr != NULL) { closeFunction(ptr); } } \ - LocalPointerClassName &operator=(LocalPointerClassName &&src) U_NOEXCEPT { \ - if (ptr != NULL) { closeFunction(ptr); } \ - LocalPointerBase::ptr=src.ptr; \ - src.ptr=NULL; \ - return *this; \ - } \ - /* TODO: Be agnostic of the deleter function signature from the user-provided std::unique_ptr? */ \ - LocalPointerClassName &operator=(std::unique_ptr &&p) { \ - adoptInstead(p.release()); \ - return *this; \ - } \ - void swap(LocalPointerClassName &other) U_NOEXCEPT { \ - Type *temp=LocalPointerBase::ptr; \ - LocalPointerBase::ptr=other.ptr; \ - other.ptr=temp; \ - } \ - friend inline void swap(LocalPointerClassName &p1, LocalPointerClassName &p2) U_NOEXCEPT { \ - p1.swap(p2); \ - } \ - void adoptInstead(Type *p) { \ - if (ptr != NULL) { closeFunction(ptr); } \ - ptr=p; \ - } \ - operator std::unique_ptr () && { \ - return std::unique_ptr(LocalPointerBase::orphan(), closeFunction); \ - } \ - } - -U_NAMESPACE_END - -#endif /* U_SHOW_CPLUSPLUS_API */ -#endif /* __LOCALPOINTER_H__ */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/locdspnm.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/locdspnm.h deleted file mode 100644 index 0ec415d5ea..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/locdspnm.h +++ /dev/null @@ -1,209 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* Copyright (C) 2010-2016, International Business Machines Corporation and -* others. All Rights Reserved. -****************************************************************************** -*/ - -#ifndef LOCDSPNM_H -#define LOCDSPNM_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Provides display names of Locale and its components. - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/locid.h" -#include "unicode/strenum.h" -#include "unicode/uscript.h" -#include "unicode/uldnames.h" -#include "unicode/udisplaycontext.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * Returns display names of Locales and components of Locales. For - * more information on language, script, region, variant, key, and - * values, see Locale. - * @stable ICU 4.4 - */ -class U_COMMON_API LocaleDisplayNames : public UObject { -public: - /** - * Destructor. - * @stable ICU 4.4 - */ - virtual ~LocaleDisplayNames(); - - /** - * Convenience overload of - * {@link #createInstance(const Locale& locale, UDialectHandling dialectHandling)} - * that specifies STANDARD dialect handling. - * @param locale the display locale - * @return a LocaleDisplayNames instance - * @stable ICU 4.4 - */ - inline static LocaleDisplayNames* U_EXPORT2 createInstance(const Locale& locale); - - /** - * Returns an instance of LocaleDisplayNames that returns names - * formatted for the provided locale, using the provided - * dialectHandling. - * - * @param locale the display locale - * @param dialectHandling how to select names for locales - * @return a LocaleDisplayNames instance - * @stable ICU 4.4 - */ - static LocaleDisplayNames* U_EXPORT2 createInstance(const Locale& locale, - UDialectHandling dialectHandling); - - /** - * Returns an instance of LocaleDisplayNames that returns names formatted - * for the provided locale, using the provided UDisplayContext settings. - * - * @param locale the display locale - * @param contexts List of one or more context settings (e.g. for dialect - * handling, capitalization, etc. - * @param length Number of items in the contexts list - * @return a LocaleDisplayNames instance - * @stable ICU 51 - */ - static LocaleDisplayNames* U_EXPORT2 createInstance(const Locale& locale, - UDisplayContext *contexts, int32_t length); - - // getters for state - /** - * Returns the locale used to determine the display names. This is - * not necessarily the same locale passed to {@link #createInstance}. - * @return the display locale - * @stable ICU 4.4 - */ - virtual const Locale& getLocale() const = 0; - - /** - * Returns the dialect handling used in the display names. - * @return the dialect handling enum - * @stable ICU 4.4 - */ - virtual UDialectHandling getDialectHandling() const = 0; - - /** - * Returns the UDisplayContext value for the specified UDisplayContextType. - * @param type the UDisplayContextType whose value to return - * @return the UDisplayContext for the specified type. - * @stable ICU 51 - */ - virtual UDisplayContext getContext(UDisplayContextType type) const = 0; - - // names for entire locales - /** - * Returns the display name of the provided locale. - * @param locale the locale whose display name to return - * @param result receives the locale's display name - * @return the display name of the provided locale - * @stable ICU 4.4 - */ - virtual UnicodeString& localeDisplayName(const Locale& locale, - UnicodeString& result) const = 0; - - /** - * Returns the display name of the provided locale id. - * @param localeId the id of the locale whose display name to return - * @param result receives the locale's display name - * @return the display name of the provided locale - * @stable ICU 4.4 - */ - virtual UnicodeString& localeDisplayName(const char* localeId, - UnicodeString& result) const = 0; - - // names for components of a locale id - /** - * Returns the display name of the provided language code. - * @param lang the language code - * @param result receives the language code's display name - * @return the display name of the provided language code - * @stable ICU 4.4 - */ - virtual UnicodeString& languageDisplayName(const char* lang, - UnicodeString& result) const = 0; - - /** - * Returns the display name of the provided script code. - * @param script the script code - * @param result receives the script code's display name - * @return the display name of the provided script code - * @stable ICU 4.4 - */ - virtual UnicodeString& scriptDisplayName(const char* script, - UnicodeString& result) const = 0; - - /** - * Returns the display name of the provided script code. - * @param scriptCode the script code number - * @param result receives the script code's display name - * @return the display name of the provided script code - * @stable ICU 4.4 - */ - virtual UnicodeString& scriptDisplayName(UScriptCode scriptCode, - UnicodeString& result) const = 0; - - /** - * Returns the display name of the provided region code. - * @param region the region code - * @param result receives the region code's display name - * @return the display name of the provided region code - * @stable ICU 4.4 - */ - virtual UnicodeString& regionDisplayName(const char* region, - UnicodeString& result) const = 0; - - /** - * Returns the display name of the provided variant. - * @param variant the variant string - * @param result receives the variant's display name - * @return the display name of the provided variant - * @stable ICU 4.4 - */ - virtual UnicodeString& variantDisplayName(const char* variant, - UnicodeString& result) const = 0; - - /** - * Returns the display name of the provided locale key. - * @param key the locale key name - * @param result receives the locale key's display name - * @return the display name of the provided locale key - * @stable ICU 4.4 - */ - virtual UnicodeString& keyDisplayName(const char* key, - UnicodeString& result) const = 0; - - /** - * Returns the display name of the provided value (used with the provided key). - * @param key the locale key name - * @param value the locale key's value - * @param result receives the value's display name - * @return the display name of the provided value - * @stable ICU 4.4 - */ - virtual UnicodeString& keyValueDisplayName(const char* key, const char* value, - UnicodeString& result) const = 0; -}; - -inline LocaleDisplayNames* LocaleDisplayNames::createInstance(const Locale& locale) { - return LocaleDisplayNames::createInstance(locale, ULDN_STANDARD_NAMES); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/locid.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/locid.h deleted file mode 100644 index f25c212e80..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/locid.h +++ /dev/null @@ -1,1183 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1996-2015, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* -* File locid.h -* -* Created by: Helena Shih -* -* Modification History: -* -* Date Name Description -* 02/11/97 aliu Changed gLocPath to fgLocPath and added methods to -* get and set it. -* 04/02/97 aliu Made operator!= inline; fixed return value of getName(). -* 04/15/97 aliu Cleanup for AIX/Win32. -* 04/24/97 aliu Numerous changes per code review. -* 08/18/98 stephen Added tokenizeString(),changed getDisplayName() -* 09/08/98 stephen Moved definition of kEmptyString for Mac Port -* 11/09/99 weiv Added const char * getName() const; -* 04/12/00 srl removing unicodestring api's and cached hash code -* 08/10/01 grhoten Change the static Locales to accessor functions -****************************************************************************** -*/ - -#ifndef LOCID_H -#define LOCID_H - -#include "unicode/bytestream.h" -#include "unicode/localpointer.h" -#include "unicode/strenum.h" -#include "unicode/stringpiece.h" -#include "unicode/utypes.h" -#include "unicode/uobject.h" -#include "unicode/putil.h" -#include "unicode/uloc.h" - -/** - * \file - * \brief C++ API: Locale ID object. - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -// Forward Declarations -void U_CALLCONV locale_available_init(); /**< @internal */ - -class StringEnumeration; -class UnicodeString; - -/** - * A Locale object represents a specific geographical, political, - * or cultural region. An operation that requires a Locale to perform - * its task is called locale-sensitive and uses the Locale - * to tailor information for the user. For example, displaying a number - * is a locale-sensitive operation--the number should be formatted - * according to the customs/conventions of the user's native country, - * region, or culture. - * - * The Locale class is not suitable for subclassing. - * - *

- * You can create a Locale object using the constructor in - * this class: - * \htmlonly

\endhtmlonly - *
- *       Locale( const   char*  language,
- *               const   char*  country,
- *               const   char*  variant);
- * 
- * \htmlonly
\endhtmlonly - * The first argument to the constructors is a valid ISO - * Language Code. These codes are the lower-case two-letter - * codes as defined by ISO-639. - * You can find a full list of these codes at: - *
- * http://www.loc.gov/standards/iso639-2/ - * - *

- * The second argument to the constructors is a valid ISO Country - * Code. These codes are the upper-case two-letter codes - * as defined by ISO-3166. - * You can find a full list of these codes at a number of sites, such as: - *
- * http://www.iso.org/iso/en/prods-services/iso3166ma/index.html - * - *

- * The third constructor requires a third argument--the Variant. - * The Variant codes are vendor and browser-specific. - * For example, use REVISED for a language's revised script orthography, and POSIX for POSIX. - * Where there are two variants, separate them with an underscore, and - * put the most important one first. For - * example, a Traditional Spanish collation might be referenced, with - * "ES", "ES", "Traditional_POSIX". - * - *

- * Because a Locale object is just an identifier for a region, - * no validity check is performed when you construct a Locale. - * If you want to see whether particular resources are available for the - * Locale you construct, you must query those resources. For - * example, ask the NumberFormat for the locales it supports - * using its getAvailableLocales method. - *
Note: When you ask for a resource for a particular - * locale, you get back the best available match, not necessarily - * precisely what you asked for. For more information, look at - * ResourceBundle. - * - *

- * The Locale class provides a number of convenient constants - * that you can use to create Locale objects for commonly used - * locales. For example, the following refers to a Locale object - * for the United States: - * \htmlonly

\endhtmlonly - *
- *       Locale::getUS()
- * 
- * \htmlonly
\endhtmlonly - * - *

- * Once you've created a Locale you can query it for information about - * itself. Use getCountry to get the ISO Country Code and - * getLanguage to get the ISO Language Code. You can - * use getDisplayCountry to get the - * name of the country suitable for displaying to the user. Similarly, - * you can use getDisplayLanguage to get the name of - * the language suitable for displaying to the user. Interestingly, - * the getDisplayXXX methods are themselves locale-sensitive - * and have two versions: one that uses the default locale and one - * that takes a locale as an argument and displays the name or country in - * a language appropriate to that locale. - * - *

- * ICU provides a number of classes that perform locale-sensitive - * operations. For example, the NumberFormat class formats - * numbers, currency, or percentages in a locale-sensitive manner. Classes - * such as NumberFormat have a number of convenience methods - * for creating a default object of that type. For example, the - * NumberFormat class provides these three convenience methods - * for creating a default NumberFormat object: - * \htmlonly

\endhtmlonly - *
- *     UErrorCode success = U_ZERO_ERROR;
- *     Locale myLocale;
- *     NumberFormat *nf;
- *
- *     nf = NumberFormat::createInstance( success );          delete nf;
- *     nf = NumberFormat::createCurrencyInstance( success );  delete nf;
- *     nf = NumberFormat::createPercentInstance( success );   delete nf;
- * 
- * \htmlonly
\endhtmlonly - * Each of these methods has two variants; one with an explicit locale - * and one without; the latter using the default locale. - * \htmlonly
\endhtmlonly - *
- *     nf = NumberFormat::createInstance( myLocale, success );          delete nf;
- *     nf = NumberFormat::createCurrencyInstance( myLocale, success );  delete nf;
- *     nf = NumberFormat::createPercentInstance( myLocale, success );   delete nf;
- * 
- * \htmlonly
\endhtmlonly - * A Locale is the mechanism for identifying the kind of object - * (NumberFormat) that you would like to get. The locale is - * just a mechanism for identifying objects, - * not a container for the objects themselves. - * - *

- * Each class that performs locale-sensitive operations allows you - * to get all the available objects of that type. You can sift - * through these objects by language, country, or variant, - * and use the display names to present a menu to the user. - * For example, you can create a menu of all the collation objects - * suitable for a given language. Such classes implement these - * three class methods: - * \htmlonly

\endhtmlonly - *
- *       static Locale* getAvailableLocales(int32_t& numLocales)
- *       static UnicodeString& getDisplayName(const Locale&  objectLocale,
- *                                            const Locale&  displayLocale,
- *                                            UnicodeString& displayName)
- *       static UnicodeString& getDisplayName(const Locale&  objectLocale,
- *                                            UnicodeString& displayName)
- * 
- * \htmlonly
\endhtmlonly - * - * @stable ICU 2.0 - * @see ResourceBundle - */ -class U_COMMON_API Locale : public UObject { -public: - /** Useful constant for the Root locale. @stable ICU 4.4 */ - static const Locale &U_EXPORT2 getRoot(void); - /** Useful constant for this language. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getEnglish(void); - /** Useful constant for this language. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getFrench(void); - /** Useful constant for this language. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getGerman(void); - /** Useful constant for this language. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getItalian(void); - /** Useful constant for this language. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getJapanese(void); - /** Useful constant for this language. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getKorean(void); - /** Useful constant for this language. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getChinese(void); - /** Useful constant for this language. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getSimplifiedChinese(void); - /** Useful constant for this language. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getTraditionalChinese(void); - - /** Useful constant for this country/region. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getFrance(void); - /** Useful constant for this country/region. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getGermany(void); - /** Useful constant for this country/region. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getItaly(void); - /** Useful constant for this country/region. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getJapan(void); - /** Useful constant for this country/region. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getKorea(void); - /** Useful constant for this country/region. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getChina(void); - /** Useful constant for this country/region. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getPRC(void); - /** Useful constant for this country/region. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getTaiwan(void); - /** Useful constant for this country/region. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getUK(void); - /** Useful constant for this country/region. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getUS(void); - /** Useful constant for this country/region. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getCanada(void); - /** Useful constant for this country/region. @stable ICU 2.0 */ - static const Locale &U_EXPORT2 getCanadaFrench(void); - - - /** - * Construct a default locale object, a Locale for the default locale ID. - * - * @see getDefault - * @see uloc_getDefault - * @stable ICU 2.0 - */ - Locale(); - - /** - * Construct a locale from language, country, variant. - * If an error occurs, then the constructed object will be "bogus" - * (isBogus() will return TRUE). - * - * @param language Lowercase two-letter or three-letter ISO-639 code. - * This parameter can instead be an ICU style C locale (e.g. "en_US"), - * but the other parameters must not be used. - * This parameter can be NULL; if so, - * the locale is initialized to match the current default locale. - * (This is the same as using the default constructor.) - * Please note: The Java Locale class does NOT accept the form - * 'new Locale("en_US")' but only 'new Locale("en","US")' - * - * @param country Uppercase two-letter ISO-3166 code. (optional) - * @param variant Uppercase vendor and browser specific code. See class - * description. (optional) - * @param keywordsAndValues A string consisting of keyword/values pairs, such as - * "collation=phonebook;currency=euro" - * - * @see getDefault - * @see uloc_getDefault - * @stable ICU 2.0 - */ - Locale( const char * language, - const char * country = 0, - const char * variant = 0, - const char * keywordsAndValues = 0); - - /** - * Initializes a Locale object from another Locale object. - * - * @param other The Locale object being copied in. - * @stable ICU 2.0 - */ - Locale(const Locale& other); - -#ifndef U_HIDE_DRAFT_API - /** - * Move constructor; might leave source in bogus state. - * This locale will have the same contents that the source locale had. - * - * @param other The Locale object being moved in. - * @draft ICU 63 - */ - Locale(Locale&& other) U_NOEXCEPT; -#endif // U_HIDE_DRAFT_API - - /** - * Destructor - * @stable ICU 2.0 - */ - virtual ~Locale() ; - - /** - * Replaces the entire contents of *this with the specified value. - * - * @param other The Locale object being copied in. - * @return *this - * @stable ICU 2.0 - */ - Locale& operator=(const Locale& other); - -#ifndef U_HIDE_DRAFT_API - /** - * Move assignment operator; might leave source in bogus state. - * This locale will have the same contents that the source locale had. - * The behavior is undefined if *this and the source are the same object. - * - * @param other The Locale object being moved in. - * @return *this - * @draft ICU 63 - */ - Locale& operator=(Locale&& other) U_NOEXCEPT; -#endif // U_HIDE_DRAFT_API - - /** - * Checks if two locale keys are the same. - * - * @param other The locale key object to be compared with this. - * @return True if the two locale keys are the same, false otherwise. - * @stable ICU 2.0 - */ - UBool operator==(const Locale& other) const; - - /** - * Checks if two locale keys are not the same. - * - * @param other The locale key object to be compared with this. - * @return True if the two locale keys are not the same, false - * otherwise. - * @stable ICU 2.0 - */ - inline UBool operator!=(const Locale& other) const; - - /** - * Clone this object. - * Clones can be used concurrently in multiple threads. - * If an error occurs, then NULL is returned. - * The caller must delete the clone. - * - * @return a clone of this object - * - * @see getDynamicClassID - * @stable ICU 2.8 - */ - Locale *clone() const; - -#ifndef U_HIDE_SYSTEM_API - /** - * Common methods of getting the current default Locale. Used for the - * presentation: menus, dialogs, etc. Generally set once when your applet or - * application is initialized, then never reset. (If you do reset the - * default locale, you probably want to reload your GUI, so that the change - * is reflected in your interface.) - * - * More advanced programs will allow users to use different locales for - * different fields, e.g. in a spreadsheet. - * - * Note that the initial setting will match the host system. - * @return a reference to the Locale object for the default locale ID - * @system - * @stable ICU 2.0 - */ - static const Locale& U_EXPORT2 getDefault(void); - - /** - * Sets the default. Normally set once at the beginning of a process, - * then never reset. - * setDefault() only changes ICU's default locale ID, not - * the default locale ID of the runtime environment. - * - * @param newLocale Locale to set to. If NULL, set to the value obtained - * from the runtime environment. - * @param success The error code. - * @system - * @stable ICU 2.0 - */ - static void U_EXPORT2 setDefault(const Locale& newLocale, - UErrorCode& success); -#endif /* U_HIDE_SYSTEM_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns a Locale for the specified BCP47 language tag string. - * If the specified language tag contains any ill-formed subtags, - * the first such subtag and all following subtags are ignored. - *

- * This implements the 'Language-Tag' production of BCP47, and so - * supports grandfathered (regular and irregular) as well as private - * use language tags. Private use tags are represented as 'x-whatever', - * and grandfathered tags are converted to their canonical replacements - * where they exist. Note that a few grandfathered tags have no modern - * replacement, these will be converted using the fallback described in - * the first paragraph, so some information might be lost. - * @param tag the input BCP47 language tag. - * @param status error information if creating the Locale failed. - * @return the Locale for the specified BCP47 language tag. - * @draft ICU 63 - */ - static Locale U_EXPORT2 forLanguageTag(StringPiece tag, UErrorCode& status); - - /** - * Returns a well-formed language tag for this Locale. - *

- * Note: Any locale fields which do not satisfy the BCP47 syntax - * requirement will be silently omitted from the result. - * - * If this function fails, partial output may have been written to the sink. - * - * @param sink the output sink receiving the BCP47 language - * tag for this Locale. - * @param status error information if creating the language tag failed. - * @draft ICU 63 - */ - void toLanguageTag(ByteSink& sink, UErrorCode& status) const; - - /** - * Returns a well-formed language tag for this Locale. - *

- * Note: Any locale fields which do not satisfy the BCP47 syntax - * requirement will be silently omitted from the result. - * - * @param status error information if creating the language tag failed. - * @return the BCP47 language tag for this Locale. - * @draft ICU 63 - */ - template - inline StringClass toLanguageTag(UErrorCode& status) const; -#endif // U_HIDE_DRAFT_API - - /** - * Creates a locale which has had minimal canonicalization - * as per uloc_getName(). - * @param name The name to create from. If name is null, - * the default Locale is used. - * @return new locale object - * @stable ICU 2.0 - * @see uloc_getName - */ - static Locale U_EXPORT2 createFromName(const char *name); - - /** - * Creates a locale from the given string after canonicalizing - * the string by calling uloc_canonicalize(). - * @param name the locale ID to create from. Must not be NULL. - * @return a new locale object corresponding to the given name - * @stable ICU 3.0 - * @see uloc_canonicalize - */ - static Locale U_EXPORT2 createCanonical(const char* name); - - /** - * Returns the locale's ISO-639 language code. - * @return An alias to the code - * @stable ICU 2.0 - */ - inline const char * getLanguage( ) const; - - /** - * Returns the locale's ISO-15924 abbreviation script code. - * @return An alias to the code - * @see uscript_getShortName - * @see uscript_getCode - * @stable ICU 2.8 - */ - inline const char * getScript( ) const; - - /** - * Returns the locale's ISO-3166 country code. - * @return An alias to the code - * @stable ICU 2.0 - */ - inline const char * getCountry( ) const; - - /** - * Returns the locale's variant code. - * @return An alias to the code - * @stable ICU 2.0 - */ - inline const char * getVariant( ) const; - - /** - * Returns the programmatic name of the entire locale, with the language, - * country and variant separated by underbars. If a field is missing, up - * to two leading underbars will occur. Example: "en", "de_DE", "en_US_WIN", - * "de__POSIX", "fr__MAC", "__MAC", "_MT", "_FR_EURO" - * @return A pointer to "name". - * @stable ICU 2.0 - */ - inline const char * getName() const; - - /** - * Returns the programmatic name of the entire locale as getName() would return, - * but without keywords. - * @return A pointer to "name". - * @see getName - * @stable ICU 2.8 - */ - const char * getBaseName() const; - -#ifndef U_HIDE_DRAFT_API - /** - * Add the likely subtags for this Locale, per the algorithm described - * in the following CLDR technical report: - * - * http://www.unicode.org/reports/tr35/#Likely_Subtags - * - * If this Locale is already in the maximal form, or not valid, or there is - * no data available for maximization, the Locale will be unchanged. - * - * For example, "und-Zzzz" cannot be maximized, since there is no - * reasonable maximization. - * - * Examples: - * - * "en" maximizes to "en_Latn_US" - * - * "de" maximizes to "de_Latn_US" - * - * "sr" maximizes to "sr_Cyrl_RS" - * - * "sh" maximizes to "sr_Latn_RS" (Note this will not reverse.) - * - * "zh_Hani" maximizes to "zh_Hans_CN" (Note this will not reverse.) - * - * @param status error information if maximizing this Locale failed. - * If this Locale is not well-formed, the error code is - * U_ILLEGAL_ARGUMENT_ERROR. - * @draft ICU 63 - */ - void addLikelySubtags(UErrorCode& status); - - /** - * Minimize the subtags for this Locale, per the algorithm described - * in the following CLDR technical report: - * - * http://www.unicode.org/reports/tr35/#Likely_Subtags - * - * If this Locale is already in the minimal form, or not valid, or there is - * no data available for minimization, the Locale will be unchanged. - * - * Since the minimization algorithm relies on proper maximization, see the - * comments for addLikelySubtags for reasons why there might not be any - * data. - * - * Examples: - * - * "en_Latn_US" minimizes to "en" - * - * "de_Latn_US" minimizes to "de" - * - * "sr_Cyrl_RS" minimizes to "sr" - * - * "zh_Hant_TW" minimizes to "zh_TW" (The region is preferred to the - * script, and minimizing to "zh" would imply "zh_Hans_CN".) - * - * @param status error information if maximizing this Locale failed. - * If this Locale is not well-formed, the error code is - * U_ILLEGAL_ARGUMENT_ERROR. - * @draft ICU 63 - */ - void minimizeSubtags(UErrorCode& status); -#endif // U_HIDE_DRAFT_API - - /** - * Gets the list of keywords for the specified locale. - * - * @param status the status code - * @return pointer to StringEnumeration class, or NULL if there are no keywords. - * Client must dispose of it by calling delete. - * @see getKeywords - * @stable ICU 2.8 - */ - StringEnumeration * createKeywords(UErrorCode &status) const; - -#ifndef U_HIDE_DRAFT_API - - /** - * Gets the list of Unicode keywords for the specified locale. - * - * @param status the status code - * @return pointer to StringEnumeration class, or NULL if there are no keywords. - * Client must dispose of it by calling delete. - * @see getUnicodeKeywords - * @draft ICU 63 - */ - StringEnumeration * createUnicodeKeywords(UErrorCode &status) const; - - /** - * Gets the set of keywords for this Locale. - * - * A wrapper to call createKeywords() and write the resulting - * keywords as standard strings (or compatible objects) into any kind of - * container that can be written to by an STL style output iterator. - * - * @param iterator an STL style output iterator to write the keywords to. - * @param status error information if creating set of keywords failed. - * @draft ICU 63 - */ - template - inline void getKeywords(OutputIterator iterator, UErrorCode& status) const; - - /** - * Gets the set of Unicode keywords for this Locale. - * - * A wrapper to call createUnicodeKeywords() and write the resulting - * keywords as standard strings (or compatible objects) into any kind of - * container that can be written to by an STL style output iterator. - * - * @param iterator an STL style output iterator to write the keywords to. - * @param status error information if creating set of keywords failed. - * @draft ICU 63 - */ - template - inline void getUnicodeKeywords(OutputIterator iterator, UErrorCode& status) const; - -#endif // U_HIDE_DRAFT_API - - /** - * Gets the value for a keyword. - * - * This uses legacy keyword=value pairs, like "collation=phonebook". - * - * ICU4C doesn't do automatic conversion between legacy and Unicode - * keywords and values in getters and setters (as opposed to ICU4J). - * - * @param keywordName name of the keyword for which we want the value. Case insensitive. - * @param buffer The buffer to receive the keyword value. - * @param bufferCapacity The capacity of receiving buffer - * @param status Returns any error information while performing this operation. - * @return the length of the keyword value - * - * @stable ICU 2.8 - */ - int32_t getKeywordValue(const char* keywordName, char *buffer, int32_t bufferCapacity, UErrorCode &status) const; - -#ifndef U_HIDE_DRAFT_API - /** - * Gets the value for a keyword. - * - * This uses legacy keyword=value pairs, like "collation=phonebook". - * - * ICU4C doesn't do automatic conversion between legacy and Unicode - * keywords and values in getters and setters (as opposed to ICU4J). - * - * @param keywordName name of the keyword for which we want the value. - * @param sink the sink to receive the keyword value. - * @param status error information if getting the value failed. - * @draft ICU 63 - */ - void getKeywordValue(StringPiece keywordName, ByteSink& sink, UErrorCode& status) const; - - /** - * Gets the value for a keyword. - * - * This uses legacy keyword=value pairs, like "collation=phonebook". - * - * ICU4C doesn't do automatic conversion between legacy and Unicode - * keywords and values in getters and setters (as opposed to ICU4J). - * - * @param keywordName name of the keyword for which we want the value. - * @param status error information if getting the value failed. - * @return the keyword value. - * @draft ICU 63 - */ - template - inline StringClass getKeywordValue(StringPiece keywordName, UErrorCode& status) const; - - /** - * Gets the Unicode value for a Unicode keyword. - * - * This uses Unicode key-value pairs, like "co-phonebk". - * - * ICU4C doesn't do automatic conversion between legacy and Unicode - * keywords and values in getters and setters (as opposed to ICU4J). - * - * @param keywordName name of the keyword for which we want the value. - * @param sink the sink to receive the keyword value. - * @param status error information if getting the value failed. - * @draft ICU 63 - */ - void getUnicodeKeywordValue(StringPiece keywordName, ByteSink& sink, UErrorCode& status) const; - - /** - * Gets the Unicode value for a Unicode keyword. - * - * This uses Unicode key-value pairs, like "co-phonebk". - * - * ICU4C doesn't do automatic conversion between legacy and Unicode - * keywords and values in getters and setters (as opposed to ICU4J). - * - * @param keywordName name of the keyword for which we want the value. - * @param status error information if getting the value failed. - * @return the keyword value. - * @draft ICU 63 - */ - template - inline StringClass getUnicodeKeywordValue(StringPiece keywordName, UErrorCode& status) const; -#endif // U_HIDE_DRAFT_API - - /** - * Sets or removes the value for a keyword. - * - * For removing all keywords, use getBaseName(), - * and construct a new Locale if it differs from getName(). - * - * This uses legacy keyword=value pairs, like "collation=phonebook". - * - * ICU4C doesn't do automatic conversion between legacy and Unicode - * keywords and values in getters and setters (as opposed to ICU4J). - * - * @param keywordName name of the keyword to be set. Case insensitive. - * @param keywordValue value of the keyword to be set. If 0-length or - * NULL, will result in the keyword being removed. No error is given if - * that keyword does not exist. - * @param status Returns any error information while performing this operation. - * - * @stable ICU 49 - */ - void setKeywordValue(const char* keywordName, const char* keywordValue, UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Sets or removes the value for a keyword. - * - * For removing all keywords, use getBaseName(), - * and construct a new Locale if it differs from getName(). - * - * This uses legacy keyword=value pairs, like "collation=phonebook". - * - * ICU4C doesn't do automatic conversion between legacy and Unicode - * keywords and values in getters and setters (as opposed to ICU4J). - * - * @param keywordName name of the keyword to be set. - * @param keywordValue value of the keyword to be set. If 0-length or - * NULL, will result in the keyword being removed. No error is given if - * that keyword does not exist. - * @param status Returns any error information while performing this operation. - * @draft ICU 63 - */ - void setKeywordValue(StringPiece keywordName, StringPiece keywordValue, UErrorCode& status); - - /** - * Sets or removes the Unicode value for a Unicode keyword. - * - * For removing all keywords, use getBaseName(), - * and construct a new Locale if it differs from getName(). - * - * This uses Unicode key-value pairs, like "co-phonebk". - * - * ICU4C doesn't do automatic conversion between legacy and Unicode - * keywords and values in getters and setters (as opposed to ICU4J). - * - * @param keywordName name of the keyword to be set. - * @param keywordValue value of the keyword to be set. If 0-length or - * NULL, will result in the keyword being removed. No error is given if - * that keyword does not exist. - * @param status Returns any error information while performing this operation. - * @draft ICU 63 - */ - void setUnicodeKeywordValue(StringPiece keywordName, StringPiece keywordValue, UErrorCode& status); -#endif // U_HIDE_DRAFT_API - - /** - * returns the locale's three-letter language code, as specified - * in ISO draft standard ISO-639-2. - * @return An alias to the code, or an empty string - * @stable ICU 2.0 - */ - const char * getISO3Language() const; - - /** - * Fills in "name" with the locale's three-letter ISO-3166 country code. - * @return An alias to the code, or an empty string - * @stable ICU 2.0 - */ - const char * getISO3Country() const; - - /** - * Returns the Windows LCID value corresponding to this locale. - * This value is stored in the resource data for the locale as a one-to-four-digit - * hexadecimal number. If the resource is missing, in the wrong format, or - * there is no Windows LCID value that corresponds to this locale, returns 0. - * @stable ICU 2.0 - */ - uint32_t getLCID(void) const; - - /** - * Returns whether this locale's script is written right-to-left. - * If there is no script subtag, then the likely script is used, see uloc_addLikelySubtags(). - * If no likely script is known, then FALSE is returned. - * - * A script is right-to-left according to the CLDR script metadata - * which corresponds to whether the script's letters have Bidi_Class=R or AL. - * - * Returns TRUE for "ar" and "en-Hebr", FALSE for "zh" and "fa-Cyrl". - * - * @return TRUE if the locale's script is written right-to-left - * @stable ICU 54 - */ - UBool isRightToLeft() const; - - /** - * Fills in "dispLang" with the name of this locale's language in a format suitable for - * user display in the default locale. For example, if the locale's language code is - * "fr" and the default locale's language code is "en", this function would set - * dispLang to "French". - * @param dispLang Receives the language's display name. - * @return A reference to "dispLang". - * @stable ICU 2.0 - */ - UnicodeString& getDisplayLanguage(UnicodeString& dispLang) const; - - /** - * Fills in "dispLang" with the name of this locale's language in a format suitable for - * user display in the locale specified by "displayLocale". For example, if the locale's - * language code is "en" and displayLocale's language code is "fr", this function would set - * dispLang to "Anglais". - * @param displayLocale Specifies the locale to be used to display the name. In other words, - * if the locale's language code is "en", passing Locale::getFrench() for - * displayLocale would result in "Anglais", while passing Locale::getGerman() - * for displayLocale would result in "Englisch". - * @param dispLang Receives the language's display name. - * @return A reference to "dispLang". - * @stable ICU 2.0 - */ - UnicodeString& getDisplayLanguage( const Locale& displayLocale, - UnicodeString& dispLang) const; - - /** - * Fills in "dispScript" with the name of this locale's script in a format suitable - * for user display in the default locale. For example, if the locale's script code - * is "LATN" and the default locale's language code is "en", this function would set - * dispScript to "Latin". - * @param dispScript Receives the scripts's display name. - * @return A reference to "dispScript". - * @stable ICU 2.8 - */ - UnicodeString& getDisplayScript( UnicodeString& dispScript) const; - - /** - * Fills in "dispScript" with the name of this locale's country in a format suitable - * for user display in the locale specified by "displayLocale". For example, if the locale's - * script code is "LATN" and displayLocale's language code is "en", this function would set - * dispScript to "Latin". - * @param displayLocale Specifies the locale to be used to display the name. In other - * words, if the locale's script code is "LATN", passing - * Locale::getFrench() for displayLocale would result in "", while - * passing Locale::getGerman() for displayLocale would result in - * "". - * @param dispScript Receives the scripts's display name. - * @return A reference to "dispScript". - * @stable ICU 2.8 - */ - UnicodeString& getDisplayScript( const Locale& displayLocale, - UnicodeString& dispScript) const; - - /** - * Fills in "dispCountry" with the name of this locale's country in a format suitable - * for user display in the default locale. For example, if the locale's country code - * is "FR" and the default locale's language code is "en", this function would set - * dispCountry to "France". - * @param dispCountry Receives the country's display name. - * @return A reference to "dispCountry". - * @stable ICU 2.0 - */ - UnicodeString& getDisplayCountry( UnicodeString& dispCountry) const; - - /** - * Fills in "dispCountry" with the name of this locale's country in a format suitable - * for user display in the locale specified by "displayLocale". For example, if the locale's - * country code is "US" and displayLocale's language code is "fr", this function would set - * dispCountry to "États-Unis". - * @param displayLocale Specifies the locale to be used to display the name. In other - * words, if the locale's country code is "US", passing - * Locale::getFrench() for displayLocale would result in "États-Unis", while - * passing Locale::getGerman() for displayLocale would result in - * "Vereinigte Staaten". - * @param dispCountry Receives the country's display name. - * @return A reference to "dispCountry". - * @stable ICU 2.0 - */ - UnicodeString& getDisplayCountry( const Locale& displayLocale, - UnicodeString& dispCountry) const; - - /** - * Fills in "dispVar" with the name of this locale's variant code in a format suitable - * for user display in the default locale. - * @param dispVar Receives the variant's name. - * @return A reference to "dispVar". - * @stable ICU 2.0 - */ - UnicodeString& getDisplayVariant( UnicodeString& dispVar) const; - - /** - * Fills in "dispVar" with the name of this locale's variant code in a format - * suitable for user display in the locale specified by "displayLocale". - * @param displayLocale Specifies the locale to be used to display the name. - * @param dispVar Receives the variant's display name. - * @return A reference to "dispVar". - * @stable ICU 2.0 - */ - UnicodeString& getDisplayVariant( const Locale& displayLocale, - UnicodeString& dispVar) const; - - /** - * Fills in "name" with the name of this locale in a format suitable for user display - * in the default locale. This function uses getDisplayLanguage(), getDisplayCountry(), - * and getDisplayVariant() to do its work, and outputs the display name in the format - * "language (country[,variant])". For example, if the default locale is en_US, then - * fr_FR's display name would be "French (France)", and es_MX_Traditional's display name - * would be "Spanish (Mexico,Traditional)". - * @param name Receives the locale's display name. - * @return A reference to "name". - * @stable ICU 2.0 - */ - UnicodeString& getDisplayName( UnicodeString& name) const; - - /** - * Fills in "name" with the name of this locale in a format suitable for user display - * in the locale specified by "displayLocale". This function uses getDisplayLanguage(), - * getDisplayCountry(), and getDisplayVariant() to do its work, and outputs the display - * name in the format "language (country[,variant])". For example, if displayLocale is - * fr_FR, then en_US's display name would be "Anglais (États-Unis)", and no_NO_NY's - * display name would be "norvégien (Norvège,NY)". - * @param displayLocale Specifies the locale to be used to display the name. - * @param name Receives the locale's display name. - * @return A reference to "name". - * @stable ICU 2.0 - */ - UnicodeString& getDisplayName( const Locale& displayLocale, - UnicodeString& name) const; - - /** - * Generates a hash code for the locale. - * @stable ICU 2.0 - */ - int32_t hashCode(void) const; - - /** - * Sets the locale to bogus - * A bogus locale represents a non-existing locale associated - * with services that can be instantiated from non-locale data - * in addition to locale (for example, collation can be - * instantiated from a locale and from a rule set). - * @stable ICU 2.1 - */ - void setToBogus(); - - /** - * Gets the bogus state. Locale object can be bogus if it doesn't exist - * @return FALSE if it is a real locale, TRUE if it is a bogus locale - * @stable ICU 2.1 - */ - inline UBool isBogus(void) const; - - /** - * Returns a list of all installed locales. - * @param count Receives the number of locales in the list. - * @return A pointer to an array of Locale objects. This array is the list - * of all locales with installed resource files. The called does NOT - * get ownership of this list, and must NOT delete it. - * @stable ICU 2.0 - */ - static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); - - /** - * Gets a list of all available 2-letter country codes defined in ISO 3166. This is a - * pointer to an array of pointers to arrays of char. All of these pointers are - * owned by ICU-- do not delete them, and do not write through them. The array is - * terminated with a null pointer. - * @return a list of all available country codes - * @stable ICU 2.0 - */ - static const char* const* U_EXPORT2 getISOCountries(); - - /** - * Gets a list of all available language codes defined in ISO 639. This is a pointer - * to an array of pointers to arrays of char. All of these pointers are owned - * by ICU-- do not delete them, and do not write through them. The array is - * terminated with a null pointer. - * @return a list of all available language codes - * @stable ICU 2.0 - */ - static const char* const* U_EXPORT2 getISOLanguages(); - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.2 - */ - virtual UClassID getDynamicClassID() const; - -protected: /* only protected for testing purposes. DO NOT USE. */ -#ifndef U_HIDE_INTERNAL_API - /** - * Set this from a single POSIX style locale string. - * @internal - */ - void setFromPOSIXID(const char *posixID); -#endif /* U_HIDE_INTERNAL_API */ - -private: - /** - * Initialize the locale object with a new name. - * Was deprecated - used in implementation - moved internal - * - * @param cLocaleID The new locale name. - * @param canonicalize whether to call uloc_canonicalize on cLocaleID - */ - Locale& init(const char* cLocaleID, UBool canonicalize); - - /* - * Internal constructor to allow construction of a locale object with - * NO side effects. (Default constructor tries to get - * the default locale.) - */ - enum ELocaleType { - eBOGUS - }; - Locale(ELocaleType); - - /** - * Initialize the locale cache for commonly used locales - */ - static Locale *getLocaleCache(void); - - char language[ULOC_LANG_CAPACITY]; - char script[ULOC_SCRIPT_CAPACITY]; - char country[ULOC_COUNTRY_CAPACITY]; - int32_t variantBegin; - char* fullName; - char fullNameBuffer[ULOC_FULLNAME_CAPACITY]; - // name without keywords - char* baseName; - void initBaseName(UErrorCode& status); - - UBool fIsBogus; - - static const Locale &getLocale(int locid); - - /** - * A friend to allow the default locale to be set by either the C or C++ API. - * @internal (private) - */ - friend Locale *locale_set_default_internal(const char *, UErrorCode& status); - - /** - * @internal (private) - */ - friend void U_CALLCONV locale_available_init(); -}; - -inline UBool -Locale::operator!=(const Locale& other) const -{ - return !operator==(other); -} - -#ifndef U_HIDE_DRAFT_API -template inline StringClass -Locale::toLanguageTag(UErrorCode& status) const -{ - StringClass result; - StringByteSink sink(&result); - toLanguageTag(sink, status); - return result; -} -#endif // U_HIDE_DRAFT_API - -inline const char * -Locale::getCountry() const -{ - return country; -} - -inline const char * -Locale::getLanguage() const -{ - return language; -} - -inline const char * -Locale::getScript() const -{ - return script; -} - -inline const char * -Locale::getVariant() const -{ - return &baseName[variantBegin]; -} - -inline const char * -Locale::getName() const -{ - return fullName; -} - -#ifndef U_HIDE_DRAFT_API - -template inline void -Locale::getKeywords(OutputIterator iterator, UErrorCode& status) const -{ - LocalPointer keys(createKeywords(status)); - if (U_FAILURE(status)) { - return; - } - for (;;) { - int32_t resultLength; - const char* buffer = keys->next(&resultLength, status); - if (U_FAILURE(status) || buffer == nullptr) { - return; - } - *iterator++ = StringClass(buffer, resultLength); - } -} - -template inline void -Locale::getUnicodeKeywords(OutputIterator iterator, UErrorCode& status) const -{ - LocalPointer keys(createUnicodeKeywords(status)); - if (U_FAILURE(status)) { - return; - } - for (;;) { - int32_t resultLength; - const char* buffer = keys->next(&resultLength, status); - if (U_FAILURE(status) || buffer == nullptr) { - return; - } - *iterator++ = StringClass(buffer, resultLength); - } -} - -template inline StringClass -Locale::getKeywordValue(StringPiece keywordName, UErrorCode& status) const -{ - StringClass result; - StringByteSink sink(&result); - getKeywordValue(keywordName, sink, status); - return result; -} - -template inline StringClass -Locale::getUnicodeKeywordValue(StringPiece keywordName, UErrorCode& status) const -{ - StringClass result; - StringByteSink sink(&result); - getUnicodeKeywordValue(keywordName, sink, status); - return result; -} - -#endif // U_HIDE_DRAFT_API - -inline UBool -Locale::isBogus(void) const { - return fIsBogus; -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/measfmt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/measfmt.h deleted file mode 100644 index e5bdab2789..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/measfmt.h +++ /dev/null @@ -1,482 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (c) 2004-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* Author: Alan Liu -* Created: April 20, 2004 -* Since: ICU 3.0 -********************************************************************** -*/ -#ifndef MEASUREFORMAT_H -#define MEASUREFORMAT_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/format.h" -#include "unicode/udat.h" -// Apple specific: -#include "unicode/uameasureformat.h" - -/** - * \file - * \brief C++ API: Compatibility APIs for measure formatting. - */ - -/** - * Constants for various widths. - * There are 4 widths: Wide, Short, Narrow, Numeric. - * For example, for English, when formatting "3 hours" - * Wide is "3 hours"; short is "3 hrs"; narrow is "3h"; - * formatting "3 hours 17 minutes" as numeric give "3:17" - * @stable ICU 53 - */ -enum UMeasureFormatWidth { - - // Wide, short, and narrow must be first and in this order. - /** - * Spell out measure units. - * @stable ICU 53 - */ - UMEASFMT_WIDTH_WIDE, - - /** - * Abbreviate measure units. - * @stable ICU 53 - */ - UMEASFMT_WIDTH_SHORT, - - /** - * Use symbols for measure units when possible. - * @stable ICU 53 - */ - UMEASFMT_WIDTH_NARROW, - - /** - * Completely omit measure units when possible. For example, format - * '5 hours, 37 minutes' as '5:37' - * @stable ICU 53 - */ - UMEASFMT_WIDTH_NUMERIC, - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UMeasureFormatWidth value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UMEASFMT_WIDTH_COUNT = 4 -#endif // U_HIDE_DEPRECATED_API -#ifndef U_HIDE_INTERNAL_API - , - /** - * Apple-specific - * Shorter, between SHORT and NARROW (SHORT without space in unit pattern) - * @draft ICU 57 - */ - UMEASFMT_WIDTH_SHORTER = 8 -#endif /* U_HIDE_INTERNAL_API */ -}; -/** @stable ICU 53 */ -typedef enum UMeasureFormatWidth UMeasureFormatWidth; - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class Measure; -class MeasureUnit; -class NumberFormat; -class PluralRules; -class MeasureFormatCacheData; -class SharedNumberFormat; -class SharedPluralRules; -class QuantityFormatter; -class SimpleFormatter; -class ListFormatter; -class DateFormat; -class FieldPositionHandler; - -/** - *

IMPORTANT: New users are strongly encouraged to see if - * numberformatter.h fits their use case. Although not deprecated, this header - * is provided for backwards compatibility only. - * - * @see Format - * @author Alan Liu - * @stable ICU 3.0 - */ -class U_I18N_API MeasureFormat : public Format { - public: - using Format::parseObject; - using Format::format; - - /** - * Constructor. - *

- * NOTE: New users are strongly encouraged to use - * {@link icu::number::NumberFormatter} instead of NumberFormat. - * @stable ICU 53 - */ - MeasureFormat( - const Locale &locale, UMeasureFormatWidth width, UErrorCode &status); - - /** - * Constructor. - *

- * NOTE: New users are strongly encouraged to use - * {@link icu::number::NumberFormatter} instead of NumberFormat. - * @stable ICU 53 - */ - MeasureFormat( - const Locale &locale, - UMeasureFormatWidth width, - NumberFormat *nfToAdopt, - UErrorCode &status); - - /** - * Copy constructor. - * @stable ICU 3.0 - */ - MeasureFormat(const MeasureFormat &other); - - /** - * Assignment operator. - * @stable ICU 3.0 - */ - MeasureFormat &operator=(const MeasureFormat &rhs); - - /** - * Destructor. - * @stable ICU 3.0 - */ - virtual ~MeasureFormat(); - - /** - * Return true if given Format objects are semantically equal. - * @stable ICU 53 - */ - virtual UBool operator==(const Format &other) const; - - /** - * Clones this object polymorphically. - * @stable ICU 53 - */ - virtual Format *clone() const; - - /** - * Formats object to produce a string. - * @stable ICU 53 - */ - virtual UnicodeString &format( - const Formattable &obj, - UnicodeString &appendTo, - FieldPosition &pos, - UErrorCode &status) const; - - /** - * Parse a string to produce an object. This implementation sets - * status to U_UNSUPPORTED_ERROR. - * - * @draft ICU 53 - */ - virtual void parseObject( - const UnicodeString &source, - Formattable &reslt, - ParsePosition &pos) const; - - /** - * Formats measure objects to produce a string. An example of such a - * formatted string is 3 meters, 3.5 centimeters. Measure objects appear - * in the formatted string in the same order they appear in the "measures" - * array. The NumberFormat of this object is used only to format the amount - * of the very last measure. The other amounts are formatted with zero - * decimal places while rounding toward zero. - * @param measures array of measure objects. - * @param measureCount the number of measure objects. - * @param appendTo formatted string appended here. - * @param pos the field position. - * @param status the error. - * @return appendTo reference - * - * @stable ICU 53 - */ - UnicodeString &formatMeasures( - const Measure *measures, - int32_t measureCount, - UnicodeString &appendTo, - FieldPosition &pos, - UErrorCode &status) const; - -#ifndef U_HIDE_INTERNAL_API - /** - * Apple-specific for now. - * Like formatMeasures above, but with a - * FieldPositionIterator* instead of a FieldPosition& - * - * @param measures Array of measure objects. - * @param measureCount the number of measure objects. - * @param appendTo Formatted string appended here. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. Field - * values are defined in UAMeasureUnit. - * @param status The error. - * @return appendTo reference - * - * @internal. - */ - UnicodeString &formatMeasures( - const Measure *measures, - int32_t measureCount, - UnicodeString &appendTo, - FieldPositionIterator* posIter, - UErrorCode &status) const; - - /** - * Apple-specific for now - * @internal. - */ - UMeasureFormatWidth getWidth(void) const; - -#endif /* U_HIDE_INTERNAL_API */ - - - /** - * Formats a single measure per unit. An example of such a - * formatted string is 3.5 meters per second. - * @param measure The measure object. In above example, 3.5 meters. - * @param perUnit The per unit. In above example, it is - * `*%MeasureUnit::createSecond(status)`. - * @param appendTo formatted string appended here. - * @param pos the field position. - * @param status the error. - * @return appendTo reference - * - * @stable ICU 55 - */ - UnicodeString &formatMeasurePerUnit( - const Measure &measure, - const MeasureUnit &perUnit, - UnicodeString &appendTo, - FieldPosition &pos, - UErrorCode &status) const; - - /** - * Gets the display name of the specified {@link MeasureUnit} corresponding to the current - * locale and format width. - * @param unit The unit for which to get a display name. - * @param status the error. - * @return The display name in the locale and width specified in - * the MeasureFormat constructor, or null if there is no display name available - * for the specified unit. - * - * @stable ICU 58 - */ - UnicodeString getUnitDisplayName(const MeasureUnit& unit, UErrorCode &status) const; - - - /** - * Return a formatter for CurrencyAmount objects in the given - * locale. - *

- * NOTE: New users are strongly encouraged to use - * {@link icu::number::NumberFormatter} instead of NumberFormat. - * @param locale desired locale - * @param ec input-output error code - * @return a formatter object, or NULL upon error - * @stable ICU 3.0 - */ - static MeasureFormat* U_EXPORT2 createCurrencyFormat(const Locale& locale, - UErrorCode& ec); - - /** - * Return a formatter for CurrencyAmount objects in the default - * locale. - *

- * NOTE: New users are strongly encouraged to use - * {@link icu::number::NumberFormatter} instead of NumberFormat. - * @param ec input-output error code - * @return a formatter object, or NULL upon error - * @stable ICU 3.0 - */ - static MeasureFormat* U_EXPORT2 createCurrencyFormat(UErrorCode& ec); - - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *

-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 53 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 53 - */ - virtual UClassID getDynamicClassID(void) const; - - protected: - /** - * Default constructor. - * @stable ICU 3.0 - */ - MeasureFormat(); - -#ifndef U_HIDE_INTERNAL_API - - /** - * ICU use only. - * Initialize or change MeasureFormat class from subclass. - * @internal. - */ - void initMeasureFormat( - const Locale &locale, - UMeasureFormatWidth width, - NumberFormat *nfToAdopt, - UErrorCode &status); - /** - * ICU use only. - * Allows subclass to change locale. Note that this method also changes - * the NumberFormat object. Returns TRUE if locale changed; FALSE if no - * change was made. - * @internal. - */ - UBool setMeasureFormatLocale(const Locale &locale, UErrorCode &status); - - public: - // Apple-only, temporarily public for Apple use - /** - * ICU use only. - * Let subclass change NumberFormat. - * @internal Apple - */ - void adoptNumberFormat(NumberFormat *nfToAdopt, UErrorCode &status); - - /** - * Gets the display name for a unit. - * @param unit The unit whose display name to get. - * @param result Receives the name result, if any (if none, - * length will be 0) - * @return Reference to result - * - * @internal Apple - */ - UnicodeString &getUnitName( - const MeasureUnit* unit, - UnicodeString &result ) const; - - /** - * Gets the display name for a set of units. - * @param units Array of units whose display name to get. - * @param unitCount The count of units - * @param listStyle The list style used for combining the unit names. - * @param result Receives the name result, if any (if none, - * length will be 0) - * @return Reference to result - * - * @internal Apple - */ - UnicodeString &getMultipleUnitNames( - const MeasureUnit** units, - int32_t unitCount, - UAMeasureNameListStyle listStyle, - UnicodeString &result ) const; - - protected: - /** - * ICU use only. - * @internal. - */ - const NumberFormat &getNumberFormatInternal() const; - - /** - * ICU use only. - * Always returns the short form currency formatter. - * @internal. - */ - const NumberFormat& getCurrencyFormatInternal() const; - - /** - * ICU use only. - * @internal. - */ - const PluralRules &getPluralRules() const; - - /** - * ICU use only. - * @internal. - */ - Locale getLocale(UErrorCode &status) const; - - /** - * ICU use only. - * @internal. - */ - const char *getLocaleID(UErrorCode &status) const; - -#endif /* U_HIDE_INTERNAL_API */ - - private: - const MeasureFormatCacheData *cache; - const SharedNumberFormat *numberFormat; - const SharedPluralRules *pluralRules; - UMeasureFormatWidth fWidth; - UBool stripPatternSpaces; - - // Declared outside of MeasureFormatSharedData because ListFormatter - // objects are relatively cheap to copy; therefore, they don't need to be - // shared across instances. - ListFormatter *listFormatter; - ListFormatter *listFormatterStd; // standard list style, option for display names; Apple specific - - UnicodeString &formatMeasure( - const Measure &measure, - const NumberFormat &nf, - UnicodeString &appendTo, - FieldPosition &pos, - UErrorCode &status) const; - - UnicodeString &formatMeasuresSlowTrack( - const Measure *measures, - int32_t measureCount, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& status) const; - - UnicodeString &formatNumeric( - const Formattable *hms, // always length 3: [0] is hour; [1] is - // minute; [2] is second. - int32_t bitMap, // 1=hour set, 2=minute set, 4=second set - UnicodeString &appendTo, - FieldPositionHandler& handler, - UErrorCode &status) const; - - UnicodeString &formatNumeric( - UDate date, - const DateFormat &dateFmt, - UDateFormatField smallestField, - const Formattable &smallestAmount, - UnicodeString &appendTo, - FieldPositionHandler& handler, - UErrorCode &status) const; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // #if !UCONFIG_NO_FORMATTING -#endif // #ifndef MEASUREFORMAT_H diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/measunit.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/measunit.h deleted file mode 100644 index 1fd8df7e79..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/measunit.h +++ /dev/null @@ -1,3169 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (c) 2004-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* Author: Alan Liu -* Created: April 26, 2004 -* Since: ICU 3.0 -********************************************************************** -*/ -#ifndef __MEASUREUNIT_H__ -#define __MEASUREUNIT_H__ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/unistr.h" - -/** - * \file - * \brief C++ API: A unit for measuring a quantity. - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class StringEnumeration; - -/** - * A unit such as length, mass, volume, currency, etc. A unit is - * coupled with a numeric amount to produce a Measure. - * - * @author Alan Liu - * @stable ICU 3.0 - */ -class U_I18N_API MeasureUnit: public UObject { - public: - - /** - * Default constructor. - * Populates the instance with the base dimensionless unit. - * @stable ICU 3.0 - */ - MeasureUnit(); - - /** - * Copy constructor. - * @stable ICU 3.0 - */ - MeasureUnit(const MeasureUnit &other); - - /** - * Assignment operator. - * @stable ICU 3.0 - */ - MeasureUnit &operator=(const MeasureUnit &other); - - /** - * Returns a polymorphic clone of this object. The result will - * have the same class as returned by getDynamicClassID(). - * @stable ICU 3.0 - */ - virtual UObject* clone() const; - - /** - * Destructor - * @stable ICU 3.0 - */ - virtual ~MeasureUnit(); - - /** - * Equality operator. Return true if this object is equal - * to the given object. - * @stable ICU 3.0 - */ - virtual UBool operator==(const UObject& other) const; - - /** - * Inequality operator. Return true if this object is not equal - * to the given object. - * @stable ICU 53 - */ - UBool operator!=(const UObject& other) const { - return !(*this == other); - } - - /** - * Get the type. - * @stable ICU 53 - */ - const char *getType() const; - - /** - * Get the sub type. - * @stable ICU 53 - */ - const char *getSubtype() const; - - /** - * getAvailable gets all of the available units. - * If there are too many units to fit into destCapacity then the - * error code is set to U_BUFFER_OVERFLOW_ERROR. - * - * @param destArray destination buffer. - * @param destCapacity number of MeasureUnit instances available at dest. - * @param errorCode ICU error code. - * @return number of available units. - * @stable ICU 53 - */ - static int32_t getAvailable( - MeasureUnit *destArray, - int32_t destCapacity, - UErrorCode &errorCode); - - /** - * getAvailable gets all of the available units for a specific type. - * If there are too many units to fit into destCapacity then the - * error code is set to U_BUFFER_OVERFLOW_ERROR. - * - * @param type the type - * @param destArray destination buffer. - * @param destCapacity number of MeasureUnit instances available at dest. - * @param errorCode ICU error code. - * @return number of available units for type. - * @stable ICU 53 - */ - static int32_t getAvailable( - const char *type, - MeasureUnit *destArray, - int32_t destCapacity, - UErrorCode &errorCode); - - /** - * getAvailableTypes gets all of the available types. Caller owns the - * returned StringEnumeration and must delete it when finished using it. - * - * @param errorCode ICU error code. - * @return the types. - * @stable ICU 53 - */ - static StringEnumeration* getAvailableTypes(UErrorCode &errorCode); - - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *
-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       Derived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 53 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 53 - */ - virtual UClassID getDynamicClassID(void) const; - -#ifndef U_HIDE_INTERNAL_API - /** - * ICU use only. - * Returns associated array index for this measure unit. Only valid for - * non-currency measure units. - * @internal - */ - int32_t getIndex() const; - - /** - * ICU use only. - * Returns maximum value from getIndex plus 1. - * @internal - */ - static int32_t getIndexCount(); - - /** - * ICU use only. - * @return the unit.getIndex() of the unit which has this unit.getType() and unit.getSubtype(), - * or a negative value if there is no such unit - * @internal - */ - static int32_t internalGetIndexForTypeAndSubtype(const char *type, const char *subtype); - - /** - * ICU use only. - * @internal - */ - static MeasureUnit resolveUnitPerUnit( - const MeasureUnit &unit, const MeasureUnit &perUnit, bool* isResolved); -#endif /* U_HIDE_INTERNAL_API */ - -// All code between the "Start generated createXXX methods" comment and -// the "End generated createXXX methods" comment is auto generated code -// and must not be edited manually. For instructions on how to correctly -// update this code, refer to: -// http://site.icu-project.org/design/formatting/measureformat/updating-measure-unit -// -// Start generated createXXX methods - - /** - * Returns by pointer, unit of acceleration: g-force. - * Caller owns returned value and must free it. - * Also see {@link #getGForce()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createGForce(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of acceleration: g-force. - * Also see {@link #createGForce()}. - * @draft ICU 64 - */ - static MeasureUnit getGForce(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of acceleration: meter-per-second-squared. - * Caller owns returned value and must free it. - * Also see {@link #getMeterPerSecondSquared()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMeterPerSecondSquared(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of acceleration: meter-per-second-squared. - * Also see {@link #createMeterPerSecondSquared()}. - * @draft ICU 64 - */ - static MeasureUnit getMeterPerSecondSquared(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of angle: arc-minute. - * Caller owns returned value and must free it. - * Also see {@link #getArcMinute()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createArcMinute(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of angle: arc-minute. - * Also see {@link #createArcMinute()}. - * @draft ICU 64 - */ - static MeasureUnit getArcMinute(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of angle: arc-second. - * Caller owns returned value and must free it. - * Also see {@link #getArcSecond()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createArcSecond(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of angle: arc-second. - * Also see {@link #createArcSecond()}. - * @draft ICU 64 - */ - static MeasureUnit getArcSecond(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of angle: degree. - * Caller owns returned value and must free it. - * Also see {@link #getDegree()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createDegree(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of angle: degree. - * Also see {@link #createDegree()}. - * @draft ICU 64 - */ - static MeasureUnit getDegree(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of angle: radian. - * Caller owns returned value and must free it. - * Also see {@link #getRadian()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createRadian(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of angle: radian. - * Also see {@link #createRadian()}. - * @draft ICU 64 - */ - static MeasureUnit getRadian(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of angle: revolution. - * Caller owns returned value and must free it. - * Also see {@link #getRevolutionAngle()}. - * @param status ICU error code. - * @stable ICU 56 - */ - static MeasureUnit *createRevolutionAngle(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of angle: revolution. - * Also see {@link #createRevolutionAngle()}. - * @draft ICU 64 - */ - static MeasureUnit getRevolutionAngle(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of area: acre. - * Caller owns returned value and must free it. - * Also see {@link #getAcre()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createAcre(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of area: acre. - * Also see {@link #createAcre()}. - * @draft ICU 64 - */ - static MeasureUnit getAcre(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of area: dunam. - * Caller owns returned value and must free it. - * Also see {@link #getDunam()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createDunam(UErrorCode &status); - - /** - * Returns by value, unit of area: dunam. - * Also see {@link #createDunam()}. - * @draft ICU 64 - */ - static MeasureUnit getDunam(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of area: hectare. - * Caller owns returned value and must free it. - * Also see {@link #getHectare()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createHectare(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of area: hectare. - * Also see {@link #createHectare()}. - * @draft ICU 64 - */ - static MeasureUnit getHectare(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of area: square-centimeter. - * Caller owns returned value and must free it. - * Also see {@link #getSquareCentimeter()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createSquareCentimeter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of area: square-centimeter. - * Also see {@link #createSquareCentimeter()}. - * @draft ICU 64 - */ - static MeasureUnit getSquareCentimeter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of area: square-foot. - * Caller owns returned value and must free it. - * Also see {@link #getSquareFoot()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createSquareFoot(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of area: square-foot. - * Also see {@link #createSquareFoot()}. - * @draft ICU 64 - */ - static MeasureUnit getSquareFoot(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of area: square-inch. - * Caller owns returned value and must free it. - * Also see {@link #getSquareInch()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createSquareInch(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of area: square-inch. - * Also see {@link #createSquareInch()}. - * @draft ICU 64 - */ - static MeasureUnit getSquareInch(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of area: square-kilometer. - * Caller owns returned value and must free it. - * Also see {@link #getSquareKilometer()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createSquareKilometer(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of area: square-kilometer. - * Also see {@link #createSquareKilometer()}. - * @draft ICU 64 - */ - static MeasureUnit getSquareKilometer(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of area: square-meter. - * Caller owns returned value and must free it. - * Also see {@link #getSquareMeter()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createSquareMeter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of area: square-meter. - * Also see {@link #createSquareMeter()}. - * @draft ICU 64 - */ - static MeasureUnit getSquareMeter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of area: square-mile. - * Caller owns returned value and must free it. - * Also see {@link #getSquareMile()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createSquareMile(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of area: square-mile. - * Also see {@link #createSquareMile()}. - * @draft ICU 64 - */ - static MeasureUnit getSquareMile(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of area: square-yard. - * Caller owns returned value and must free it. - * Also see {@link #getSquareYard()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createSquareYard(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of area: square-yard. - * Also see {@link #createSquareYard()}. - * @draft ICU 64 - */ - static MeasureUnit getSquareYard(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of concentr: karat. - * Caller owns returned value and must free it. - * Also see {@link #getKarat()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createKarat(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of concentr: karat. - * Also see {@link #createKarat()}. - * @draft ICU 64 - */ - static MeasureUnit getKarat(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of concentr: milligram-per-deciliter. - * Caller owns returned value and must free it. - * Also see {@link #getMilligramPerDeciliter()}. - * @param status ICU error code. - * @stable ICU 57 - */ - static MeasureUnit *createMilligramPerDeciliter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of concentr: milligram-per-deciliter. - * Also see {@link #createMilligramPerDeciliter()}. - * @draft ICU 64 - */ - static MeasureUnit getMilligramPerDeciliter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of concentr: millimole-per-liter. - * Caller owns returned value and must free it. - * Also see {@link #getMillimolePerLiter()}. - * @param status ICU error code. - * @stable ICU 57 - */ - static MeasureUnit *createMillimolePerLiter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of concentr: millimole-per-liter. - * Also see {@link #createMillimolePerLiter()}. - * @draft ICU 64 - */ - static MeasureUnit getMillimolePerLiter(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of concentr: mole. - * Caller owns returned value and must free it. - * Also see {@link #getMole()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createMole(UErrorCode &status); - - /** - * Returns by value, unit of concentr: mole. - * Also see {@link #createMole()}. - * @draft ICU 64 - */ - static MeasureUnit getMole(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of concentr: part-per-million. - * Caller owns returned value and must free it. - * Also see {@link #getPartPerMillion()}. - * @param status ICU error code. - * @stable ICU 57 - */ - static MeasureUnit *createPartPerMillion(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of concentr: part-per-million. - * Also see {@link #createPartPerMillion()}. - * @draft ICU 64 - */ - static MeasureUnit getPartPerMillion(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of concentr: percent. - * Caller owns returned value and must free it. - * Also see {@link #getPercent()}. - * @param status ICU error code. - * @draft ICU 63 - */ - static MeasureUnit *createPercent(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of concentr: percent. - * Also see {@link #createPercent()}. - * @draft ICU 64 - */ - static MeasureUnit getPercent(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of concentr: permille. - * Caller owns returned value and must free it. - * Also see {@link #getPermille()}. - * @param status ICU error code. - * @draft ICU 63 - */ - static MeasureUnit *createPermille(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of concentr: permille. - * Also see {@link #createPermille()}. - * @draft ICU 64 - */ - static MeasureUnit getPermille(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of concentr: permyriad. - * Caller owns returned value and must free it. - * Also see {@link #getPermyriad()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createPermyriad(UErrorCode &status); - - /** - * Returns by value, unit of concentr: permyriad. - * Also see {@link #createPermyriad()}. - * @draft ICU 64 - */ - static MeasureUnit getPermyriad(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of consumption: liter-per-100kilometers. - * Caller owns returned value and must free it. - * Also see {@link #getLiterPer100Kilometers()}. - * @param status ICU error code. - * @stable ICU 56 - */ - static MeasureUnit *createLiterPer100Kilometers(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of consumption: liter-per-100kilometers. - * Also see {@link #createLiterPer100Kilometers()}. - * @draft ICU 64 - */ - static MeasureUnit getLiterPer100Kilometers(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of consumption: liter-per-kilometer. - * Caller owns returned value and must free it. - * Also see {@link #getLiterPerKilometer()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createLiterPerKilometer(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of consumption: liter-per-kilometer. - * Also see {@link #createLiterPerKilometer()}. - * @draft ICU 64 - */ - static MeasureUnit getLiterPerKilometer(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of consumption: mile-per-gallon. - * Caller owns returned value and must free it. - * Also see {@link #getMilePerGallon()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMilePerGallon(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of consumption: mile-per-gallon. - * Also see {@link #createMilePerGallon()}. - * @draft ICU 64 - */ - static MeasureUnit getMilePerGallon(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of consumption: mile-per-gallon-imperial. - * Caller owns returned value and must free it. - * Also see {@link #getMilePerGallonImperial()}. - * @param status ICU error code. - * @stable ICU 57 - */ - static MeasureUnit *createMilePerGallonImperial(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of consumption: mile-per-gallon-imperial. - * Also see {@link #createMilePerGallonImperial()}. - * @draft ICU 64 - */ - static MeasureUnit getMilePerGallonImperial(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of digital: bit. - * Caller owns returned value and must free it. - * Also see {@link #getBit()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createBit(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of digital: bit. - * Also see {@link #createBit()}. - * @draft ICU 64 - */ - static MeasureUnit getBit(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of digital: byte. - * Caller owns returned value and must free it. - * Also see {@link #getByte()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createByte(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of digital: byte. - * Also see {@link #createByte()}. - * @draft ICU 64 - */ - static MeasureUnit getByte(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of digital: gigabit. - * Caller owns returned value and must free it. - * Also see {@link #getGigabit()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createGigabit(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of digital: gigabit. - * Also see {@link #createGigabit()}. - * @draft ICU 64 - */ - static MeasureUnit getGigabit(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of digital: gigabyte. - * Caller owns returned value and must free it. - * Also see {@link #getGigabyte()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createGigabyte(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of digital: gigabyte. - * Also see {@link #createGigabyte()}. - * @draft ICU 64 - */ - static MeasureUnit getGigabyte(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of digital: kilobit. - * Caller owns returned value and must free it. - * Also see {@link #getKilobit()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createKilobit(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of digital: kilobit. - * Also see {@link #createKilobit()}. - * @draft ICU 64 - */ - static MeasureUnit getKilobit(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of digital: kilobyte. - * Caller owns returned value and must free it. - * Also see {@link #getKilobyte()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createKilobyte(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of digital: kilobyte. - * Also see {@link #createKilobyte()}. - * @draft ICU 64 - */ - static MeasureUnit getKilobyte(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of digital: megabit. - * Caller owns returned value and must free it. - * Also see {@link #getMegabit()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMegabit(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of digital: megabit. - * Also see {@link #createMegabit()}. - * @draft ICU 64 - */ - static MeasureUnit getMegabit(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of digital: megabyte. - * Caller owns returned value and must free it. - * Also see {@link #getMegabyte()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMegabyte(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of digital: megabyte. - * Also see {@link #createMegabyte()}. - * @draft ICU 64 - */ - static MeasureUnit getMegabyte(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of digital: petabyte. - * Caller owns returned value and must free it. - * Also see {@link #getPetabyte()}. - * @param status ICU error code. - * @draft ICU 63 - */ - static MeasureUnit *createPetabyte(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of digital: petabyte. - * Also see {@link #createPetabyte()}. - * @draft ICU 64 - */ - static MeasureUnit getPetabyte(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of digital: terabit. - * Caller owns returned value and must free it. - * Also see {@link #getTerabit()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createTerabit(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of digital: terabit. - * Also see {@link #createTerabit()}. - * @draft ICU 64 - */ - static MeasureUnit getTerabit(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of digital: terabyte. - * Caller owns returned value and must free it. - * Also see {@link #getTerabyte()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createTerabyte(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of digital: terabyte. - * Also see {@link #createTerabyte()}. - * @draft ICU 64 - */ - static MeasureUnit getTerabyte(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of duration: century. - * Caller owns returned value and must free it. - * Also see {@link #getCentury()}. - * @param status ICU error code. - * @stable ICU 56 - */ - static MeasureUnit *createCentury(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: century. - * Also see {@link #createCentury()}. - * @draft ICU 64 - */ - static MeasureUnit getCentury(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of duration: day. - * Caller owns returned value and must free it. - * Also see {@link #getDay()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createDay(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: day. - * Also see {@link #createDay()}. - * @draft ICU 64 - */ - static MeasureUnit getDay(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of duration: day-person. - * Caller owns returned value and must free it. - * Also see {@link #getDayPerson()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createDayPerson(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: day-person. - * Also see {@link #createDayPerson()}. - * @draft ICU 64 - */ - static MeasureUnit getDayPerson(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of duration: hour. - * Caller owns returned value and must free it. - * Also see {@link #getHour()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createHour(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: hour. - * Also see {@link #createHour()}. - * @draft ICU 64 - */ - static MeasureUnit getHour(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of duration: microsecond. - * Caller owns returned value and must free it. - * Also see {@link #getMicrosecond()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMicrosecond(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: microsecond. - * Also see {@link #createMicrosecond()}. - * @draft ICU 64 - */ - static MeasureUnit getMicrosecond(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of duration: millisecond. - * Caller owns returned value and must free it. - * Also see {@link #getMillisecond()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createMillisecond(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: millisecond. - * Also see {@link #createMillisecond()}. - * @draft ICU 64 - */ - static MeasureUnit getMillisecond(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of duration: minute. - * Caller owns returned value and must free it. - * Also see {@link #getMinute()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createMinute(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: minute. - * Also see {@link #createMinute()}. - * @draft ICU 64 - */ - static MeasureUnit getMinute(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of duration: month. - * Caller owns returned value and must free it. - * Also see {@link #getMonth()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createMonth(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: month. - * Also see {@link #createMonth()}. - * @draft ICU 64 - */ - static MeasureUnit getMonth(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of duration: month-person. - * Caller owns returned value and must free it. - * Also see {@link #getMonthPerson()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createMonthPerson(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: month-person. - * Also see {@link #createMonthPerson()}. - * @draft ICU 64 - */ - static MeasureUnit getMonthPerson(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of duration: nanosecond. - * Caller owns returned value and must free it. - * Also see {@link #getNanosecond()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createNanosecond(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: nanosecond. - * Also see {@link #createNanosecond()}. - * @draft ICU 64 - */ - static MeasureUnit getNanosecond(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of duration: second. - * Caller owns returned value and must free it. - * Also see {@link #getSecond()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createSecond(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: second. - * Also see {@link #createSecond()}. - * @draft ICU 64 - */ - static MeasureUnit getSecond(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of duration: week. - * Caller owns returned value and must free it. - * Also see {@link #getWeek()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createWeek(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: week. - * Also see {@link #createWeek()}. - * @draft ICU 64 - */ - static MeasureUnit getWeek(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of duration: week-person. - * Caller owns returned value and must free it. - * Also see {@link #getWeekPerson()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createWeekPerson(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: week-person. - * Also see {@link #createWeekPerson()}. - * @draft ICU 64 - */ - static MeasureUnit getWeekPerson(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of duration: year. - * Caller owns returned value and must free it. - * Also see {@link #getYear()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createYear(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: year. - * Also see {@link #createYear()}. - * @draft ICU 64 - */ - static MeasureUnit getYear(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of duration: year-person. - * Caller owns returned value and must free it. - * Also see {@link #getYearPerson()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createYearPerson(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of duration: year-person. - * Also see {@link #createYearPerson()}. - * @draft ICU 64 - */ - static MeasureUnit getYearPerson(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of electric: ampere. - * Caller owns returned value and must free it. - * Also see {@link #getAmpere()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createAmpere(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of electric: ampere. - * Also see {@link #createAmpere()}. - * @draft ICU 64 - */ - static MeasureUnit getAmpere(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of electric: milliampere. - * Caller owns returned value and must free it. - * Also see {@link #getMilliampere()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMilliampere(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of electric: milliampere. - * Also see {@link #createMilliampere()}. - * @draft ICU 64 - */ - static MeasureUnit getMilliampere(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of electric: ohm. - * Caller owns returned value and must free it. - * Also see {@link #getOhm()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createOhm(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of electric: ohm. - * Also see {@link #createOhm()}. - * @draft ICU 64 - */ - static MeasureUnit getOhm(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of electric: volt. - * Caller owns returned value and must free it. - * Also see {@link #getVolt()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createVolt(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of electric: volt. - * Also see {@link #createVolt()}. - * @draft ICU 64 - */ - static MeasureUnit getVolt(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of energy: british-thermal-unit. - * Caller owns returned value and must free it. - * Also see {@link #getBritishThermalUnit()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createBritishThermalUnit(UErrorCode &status); - - /** - * Returns by value, unit of energy: british-thermal-unit. - * Also see {@link #createBritishThermalUnit()}. - * @draft ICU 64 - */ - static MeasureUnit getBritishThermalUnit(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of energy: calorie. - * Caller owns returned value and must free it. - * Also see {@link #getCalorie()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createCalorie(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of energy: calorie. - * Also see {@link #createCalorie()}. - * @draft ICU 64 - */ - static MeasureUnit getCalorie(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of energy: electronvolt. - * Caller owns returned value and must free it. - * Also see {@link #getElectronvolt()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createElectronvolt(UErrorCode &status); - - /** - * Returns by value, unit of energy: electronvolt. - * Also see {@link #createElectronvolt()}. - * @draft ICU 64 - */ - static MeasureUnit getElectronvolt(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of energy: foodcalorie. - * Caller owns returned value and must free it. - * Also see {@link #getFoodcalorie()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createFoodcalorie(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of energy: foodcalorie. - * Also see {@link #createFoodcalorie()}. - * @draft ICU 64 - */ - static MeasureUnit getFoodcalorie(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of energy: joule. - * Caller owns returned value and must free it. - * Also see {@link #getJoule()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createJoule(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of energy: joule. - * Also see {@link #createJoule()}. - * @draft ICU 64 - */ - static MeasureUnit getJoule(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of energy: kilocalorie. - * Caller owns returned value and must free it. - * Also see {@link #getKilocalorie()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createKilocalorie(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of energy: kilocalorie. - * Also see {@link #createKilocalorie()}. - * @draft ICU 64 - */ - static MeasureUnit getKilocalorie(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of energy: kilojoule. - * Caller owns returned value and must free it. - * Also see {@link #getKilojoule()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createKilojoule(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of energy: kilojoule. - * Also see {@link #createKilojoule()}. - * @draft ICU 64 - */ - static MeasureUnit getKilojoule(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of energy: kilowatt-hour. - * Caller owns returned value and must free it. - * Also see {@link #getKilowattHour()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createKilowattHour(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of energy: kilowatt-hour. - * Also see {@link #createKilowattHour()}. - * @draft ICU 64 - */ - static MeasureUnit getKilowattHour(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of force: newton. - * Caller owns returned value and must free it. - * Also see {@link #getNewton()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createNewton(UErrorCode &status); - - /** - * Returns by value, unit of force: newton. - * Also see {@link #createNewton()}. - * @draft ICU 64 - */ - static MeasureUnit getNewton(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of force: pound-force. - * Caller owns returned value and must free it. - * Also see {@link #getPoundForce()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createPoundForce(UErrorCode &status); - - /** - * Returns by value, unit of force: pound-force. - * Also see {@link #createPoundForce()}. - * @draft ICU 64 - */ - static MeasureUnit getPoundForce(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of frequency: gigahertz. - * Caller owns returned value and must free it. - * Also see {@link #getGigahertz()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createGigahertz(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of frequency: gigahertz. - * Also see {@link #createGigahertz()}. - * @draft ICU 64 - */ - static MeasureUnit getGigahertz(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of frequency: hertz. - * Caller owns returned value and must free it. - * Also see {@link #getHertz()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createHertz(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of frequency: hertz. - * Also see {@link #createHertz()}. - * @draft ICU 64 - */ - static MeasureUnit getHertz(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of frequency: kilohertz. - * Caller owns returned value and must free it. - * Also see {@link #getKilohertz()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createKilohertz(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of frequency: kilohertz. - * Also see {@link #createKilohertz()}. - * @draft ICU 64 - */ - static MeasureUnit getKilohertz(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of frequency: megahertz. - * Caller owns returned value and must free it. - * Also see {@link #getMegahertz()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMegahertz(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of frequency: megahertz. - * Also see {@link #createMegahertz()}. - * @draft ICU 64 - */ - static MeasureUnit getMegahertz(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: astronomical-unit. - * Caller owns returned value and must free it. - * Also see {@link #getAstronomicalUnit()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createAstronomicalUnit(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: astronomical-unit. - * Also see {@link #createAstronomicalUnit()}. - * @draft ICU 64 - */ - static MeasureUnit getAstronomicalUnit(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: centimeter. - * Caller owns returned value and must free it. - * Also see {@link #getCentimeter()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createCentimeter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: centimeter. - * Also see {@link #createCentimeter()}. - * @draft ICU 64 - */ - static MeasureUnit getCentimeter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: decimeter. - * Caller owns returned value and must free it. - * Also see {@link #getDecimeter()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createDecimeter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: decimeter. - * Also see {@link #createDecimeter()}. - * @draft ICU 64 - */ - static MeasureUnit getDecimeter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: fathom. - * Caller owns returned value and must free it. - * Also see {@link #getFathom()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createFathom(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: fathom. - * Also see {@link #createFathom()}. - * @draft ICU 64 - */ - static MeasureUnit getFathom(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: foot. - * Caller owns returned value and must free it. - * Also see {@link #getFoot()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createFoot(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: foot. - * Also see {@link #createFoot()}. - * @draft ICU 64 - */ - static MeasureUnit getFoot(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: furlong. - * Caller owns returned value and must free it. - * Also see {@link #getFurlong()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createFurlong(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: furlong. - * Also see {@link #createFurlong()}. - * @draft ICU 64 - */ - static MeasureUnit getFurlong(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: inch. - * Caller owns returned value and must free it. - * Also see {@link #getInch()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createInch(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: inch. - * Also see {@link #createInch()}. - * @draft ICU 64 - */ - static MeasureUnit getInch(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: kilometer. - * Caller owns returned value and must free it. - * Also see {@link #getKilometer()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createKilometer(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: kilometer. - * Also see {@link #createKilometer()}. - * @draft ICU 64 - */ - static MeasureUnit getKilometer(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: light-year. - * Caller owns returned value and must free it. - * Also see {@link #getLightYear()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createLightYear(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: light-year. - * Also see {@link #createLightYear()}. - * @draft ICU 64 - */ - static MeasureUnit getLightYear(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: meter. - * Caller owns returned value and must free it. - * Also see {@link #getMeter()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createMeter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: meter. - * Also see {@link #createMeter()}. - * @draft ICU 64 - */ - static MeasureUnit getMeter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: micrometer. - * Caller owns returned value and must free it. - * Also see {@link #getMicrometer()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMicrometer(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: micrometer. - * Also see {@link #createMicrometer()}. - * @draft ICU 64 - */ - static MeasureUnit getMicrometer(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: mile. - * Caller owns returned value and must free it. - * Also see {@link #getMile()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createMile(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: mile. - * Also see {@link #createMile()}. - * @draft ICU 64 - */ - static MeasureUnit getMile(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: mile-scandinavian. - * Caller owns returned value and must free it. - * Also see {@link #getMileScandinavian()}. - * @param status ICU error code. - * @stable ICU 56 - */ - static MeasureUnit *createMileScandinavian(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: mile-scandinavian. - * Also see {@link #createMileScandinavian()}. - * @draft ICU 64 - */ - static MeasureUnit getMileScandinavian(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: millimeter. - * Caller owns returned value and must free it. - * Also see {@link #getMillimeter()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createMillimeter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: millimeter. - * Also see {@link #createMillimeter()}. - * @draft ICU 64 - */ - static MeasureUnit getMillimeter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: nanometer. - * Caller owns returned value and must free it. - * Also see {@link #getNanometer()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createNanometer(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: nanometer. - * Also see {@link #createNanometer()}. - * @draft ICU 64 - */ - static MeasureUnit getNanometer(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: nautical-mile. - * Caller owns returned value and must free it. - * Also see {@link #getNauticalMile()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createNauticalMile(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: nautical-mile. - * Also see {@link #createNauticalMile()}. - * @draft ICU 64 - */ - static MeasureUnit getNauticalMile(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: parsec. - * Caller owns returned value and must free it. - * Also see {@link #getParsec()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createParsec(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: parsec. - * Also see {@link #createParsec()}. - * @draft ICU 64 - */ - static MeasureUnit getParsec(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: picometer. - * Caller owns returned value and must free it. - * Also see {@link #getPicometer()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createPicometer(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: picometer. - * Also see {@link #createPicometer()}. - * @draft ICU 64 - */ - static MeasureUnit getPicometer(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: point. - * Caller owns returned value and must free it. - * Also see {@link #getPoint()}. - * @param status ICU error code. - * @stable ICU 59 - */ - static MeasureUnit *createPoint(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: point. - * Also see {@link #createPoint()}. - * @draft ICU 64 - */ - static MeasureUnit getPoint(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of length: solar-radius. - * Caller owns returned value and must free it. - * Also see {@link #getSolarRadius()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createSolarRadius(UErrorCode &status); - - /** - * Returns by value, unit of length: solar-radius. - * Also see {@link #createSolarRadius()}. - * @draft ICU 64 - */ - static MeasureUnit getSolarRadius(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of length: yard. - * Caller owns returned value and must free it. - * Also see {@link #getYard()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createYard(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of length: yard. - * Also see {@link #createYard()}. - * @draft ICU 64 - */ - static MeasureUnit getYard(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of light: lux. - * Caller owns returned value and must free it. - * Also see {@link #getLux()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createLux(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of light: lux. - * Also see {@link #createLux()}. - * @draft ICU 64 - */ - static MeasureUnit getLux(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of light: solar-luminosity. - * Caller owns returned value and must free it. - * Also see {@link #getSolarLuminosity()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createSolarLuminosity(UErrorCode &status); - - /** - * Returns by value, unit of light: solar-luminosity. - * Also see {@link #createSolarLuminosity()}. - * @draft ICU 64 - */ - static MeasureUnit getSolarLuminosity(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of mass: carat. - * Caller owns returned value and must free it. - * Also see {@link #getCarat()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createCarat(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of mass: carat. - * Also see {@link #createCarat()}. - * @draft ICU 64 - */ - static MeasureUnit getCarat(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of mass: dalton. - * Caller owns returned value and must free it. - * Also see {@link #getDalton()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createDalton(UErrorCode &status); - - /** - * Returns by value, unit of mass: dalton. - * Also see {@link #createDalton()}. - * @draft ICU 64 - */ - static MeasureUnit getDalton(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of mass: earth-mass. - * Caller owns returned value and must free it. - * Also see {@link #getEarthMass()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createEarthMass(UErrorCode &status); - - /** - * Returns by value, unit of mass: earth-mass. - * Also see {@link #createEarthMass()}. - * @draft ICU 64 - */ - static MeasureUnit getEarthMass(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of mass: gram. - * Caller owns returned value and must free it. - * Also see {@link #getGram()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createGram(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of mass: gram. - * Also see {@link #createGram()}. - * @draft ICU 64 - */ - static MeasureUnit getGram(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of mass: kilogram. - * Caller owns returned value and must free it. - * Also see {@link #getKilogram()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createKilogram(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of mass: kilogram. - * Also see {@link #createKilogram()}. - * @draft ICU 64 - */ - static MeasureUnit getKilogram(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of mass: metric-ton. - * Caller owns returned value and must free it. - * Also see {@link #getMetricTon()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMetricTon(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of mass: metric-ton. - * Also see {@link #createMetricTon()}. - * @draft ICU 64 - */ - static MeasureUnit getMetricTon(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of mass: microgram. - * Caller owns returned value and must free it. - * Also see {@link #getMicrogram()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMicrogram(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of mass: microgram. - * Also see {@link #createMicrogram()}. - * @draft ICU 64 - */ - static MeasureUnit getMicrogram(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of mass: milligram. - * Caller owns returned value and must free it. - * Also see {@link #getMilligram()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMilligram(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of mass: milligram. - * Also see {@link #createMilligram()}. - * @draft ICU 64 - */ - static MeasureUnit getMilligram(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of mass: ounce. - * Caller owns returned value and must free it. - * Also see {@link #getOunce()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createOunce(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of mass: ounce. - * Also see {@link #createOunce()}. - * @draft ICU 64 - */ - static MeasureUnit getOunce(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of mass: ounce-troy. - * Caller owns returned value and must free it. - * Also see {@link #getOunceTroy()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createOunceTroy(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of mass: ounce-troy. - * Also see {@link #createOunceTroy()}. - * @draft ICU 64 - */ - static MeasureUnit getOunceTroy(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of mass: pound. - * Caller owns returned value and must free it. - * Also see {@link #getPound()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createPound(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of mass: pound. - * Also see {@link #createPound()}. - * @draft ICU 64 - */ - static MeasureUnit getPound(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of mass: solar-mass. - * Caller owns returned value and must free it. - * Also see {@link #getSolarMass()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createSolarMass(UErrorCode &status); - - /** - * Returns by value, unit of mass: solar-mass. - * Also see {@link #createSolarMass()}. - * @draft ICU 64 - */ - static MeasureUnit getSolarMass(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of mass: stone. - * Caller owns returned value and must free it. - * Also see {@link #getStone()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createStone(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of mass: stone. - * Also see {@link #createStone()}. - * @draft ICU 64 - */ - static MeasureUnit getStone(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of mass: ton. - * Caller owns returned value and must free it. - * Also see {@link #getTon()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createTon(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of mass: ton. - * Also see {@link #createTon()}. - * @draft ICU 64 - */ - static MeasureUnit getTon(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of power: gigawatt. - * Caller owns returned value and must free it. - * Also see {@link #getGigawatt()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createGigawatt(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of power: gigawatt. - * Also see {@link #createGigawatt()}. - * @draft ICU 64 - */ - static MeasureUnit getGigawatt(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of power: horsepower. - * Caller owns returned value and must free it. - * Also see {@link #getHorsepower()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createHorsepower(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of power: horsepower. - * Also see {@link #createHorsepower()}. - * @draft ICU 64 - */ - static MeasureUnit getHorsepower(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of power: kilowatt. - * Caller owns returned value and must free it. - * Also see {@link #getKilowatt()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createKilowatt(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of power: kilowatt. - * Also see {@link #createKilowatt()}. - * @draft ICU 64 - */ - static MeasureUnit getKilowatt(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of power: megawatt. - * Caller owns returned value and must free it. - * Also see {@link #getMegawatt()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMegawatt(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of power: megawatt. - * Also see {@link #createMegawatt()}. - * @draft ICU 64 - */ - static MeasureUnit getMegawatt(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of power: milliwatt. - * Caller owns returned value and must free it. - * Also see {@link #getMilliwatt()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMilliwatt(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of power: milliwatt. - * Also see {@link #createMilliwatt()}. - * @draft ICU 64 - */ - static MeasureUnit getMilliwatt(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of power: watt. - * Caller owns returned value and must free it. - * Also see {@link #getWatt()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createWatt(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of power: watt. - * Also see {@link #createWatt()}. - * @draft ICU 64 - */ - static MeasureUnit getWatt(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of pressure: atmosphere. - * Caller owns returned value and must free it. - * Also see {@link #getAtmosphere()}. - * @param status ICU error code. - * @draft ICU 63 - */ - static MeasureUnit *createAtmosphere(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of pressure: atmosphere. - * Also see {@link #createAtmosphere()}. - * @draft ICU 64 - */ - static MeasureUnit getAtmosphere(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of pressure: hectopascal. - * Caller owns returned value and must free it. - * Also see {@link #getHectopascal()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createHectopascal(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of pressure: hectopascal. - * Also see {@link #createHectopascal()}. - * @draft ICU 64 - */ - static MeasureUnit getHectopascal(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of pressure: inch-hg. - * Caller owns returned value and must free it. - * Also see {@link #getInchHg()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createInchHg(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of pressure: inch-hg. - * Also see {@link #createInchHg()}. - * @draft ICU 64 - */ - static MeasureUnit getInchHg(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of pressure: kilopascal. - * Caller owns returned value and must free it. - * Also see {@link #getKilopascal()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createKilopascal(UErrorCode &status); - - /** - * Returns by value, unit of pressure: kilopascal. - * Also see {@link #createKilopascal()}. - * @draft ICU 64 - */ - static MeasureUnit getKilopascal(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of pressure: megapascal. - * Caller owns returned value and must free it. - * Also see {@link #getMegapascal()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createMegapascal(UErrorCode &status); - - /** - * Returns by value, unit of pressure: megapascal. - * Also see {@link #createMegapascal()}. - * @draft ICU 64 - */ - static MeasureUnit getMegapascal(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of pressure: millibar. - * Caller owns returned value and must free it. - * Also see {@link #getMillibar()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createMillibar(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of pressure: millibar. - * Also see {@link #createMillibar()}. - * @draft ICU 64 - */ - static MeasureUnit getMillibar(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of pressure: millimeter-of-mercury. - * Caller owns returned value and must free it. - * Also see {@link #getMillimeterOfMercury()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMillimeterOfMercury(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of pressure: millimeter-of-mercury. - * Also see {@link #createMillimeterOfMercury()}. - * @draft ICU 64 - */ - static MeasureUnit getMillimeterOfMercury(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of pressure: pound-per-square-inch. - * Caller owns returned value and must free it. - * Also see {@link #getPoundPerSquareInch()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createPoundPerSquareInch(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of pressure: pound-per-square-inch. - * Also see {@link #createPoundPerSquareInch()}. - * @draft ICU 64 - */ - static MeasureUnit getPoundPerSquareInch(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of speed: kilometer-per-hour. - * Caller owns returned value and must free it. - * Also see {@link #getKilometerPerHour()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createKilometerPerHour(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of speed: kilometer-per-hour. - * Also see {@link #createKilometerPerHour()}. - * @draft ICU 64 - */ - static MeasureUnit getKilometerPerHour(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of speed: knot. - * Caller owns returned value and must free it. - * Also see {@link #getKnot()}. - * @param status ICU error code. - * @stable ICU 56 - */ - static MeasureUnit *createKnot(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of speed: knot. - * Also see {@link #createKnot()}. - * @draft ICU 64 - */ - static MeasureUnit getKnot(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of speed: meter-per-second. - * Caller owns returned value and must free it. - * Also see {@link #getMeterPerSecond()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createMeterPerSecond(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of speed: meter-per-second. - * Also see {@link #createMeterPerSecond()}. - * @draft ICU 64 - */ - static MeasureUnit getMeterPerSecond(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of speed: mile-per-hour. - * Caller owns returned value and must free it. - * Also see {@link #getMilePerHour()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createMilePerHour(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of speed: mile-per-hour. - * Also see {@link #createMilePerHour()}. - * @draft ICU 64 - */ - static MeasureUnit getMilePerHour(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of temperature: celsius. - * Caller owns returned value and must free it. - * Also see {@link #getCelsius()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createCelsius(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of temperature: celsius. - * Also see {@link #createCelsius()}. - * @draft ICU 64 - */ - static MeasureUnit getCelsius(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of temperature: fahrenheit. - * Caller owns returned value and must free it. - * Also see {@link #getFahrenheit()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createFahrenheit(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of temperature: fahrenheit. - * Also see {@link #createFahrenheit()}. - * @draft ICU 64 - */ - static MeasureUnit getFahrenheit(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of temperature: generic. - * Caller owns returned value and must free it. - * Also see {@link #getGenericTemperature()}. - * @param status ICU error code. - * @stable ICU 56 - */ - static MeasureUnit *createGenericTemperature(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of temperature: generic. - * Also see {@link #createGenericTemperature()}. - * @draft ICU 64 - */ - static MeasureUnit getGenericTemperature(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of temperature: kelvin. - * Caller owns returned value and must free it. - * Also see {@link #getKelvin()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createKelvin(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of temperature: kelvin. - * Also see {@link #createKelvin()}. - * @draft ICU 64 - */ - static MeasureUnit getKelvin(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of torque: newton-meter. - * Caller owns returned value and must free it. - * Also see {@link #getNewtonMeter()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createNewtonMeter(UErrorCode &status); - - /** - * Returns by value, unit of torque: newton-meter. - * Also see {@link #createNewtonMeter()}. - * @draft ICU 64 - */ - static MeasureUnit getNewtonMeter(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of torque: pound-foot. - * Caller owns returned value and must free it. - * Also see {@link #getPoundFoot()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createPoundFoot(UErrorCode &status); - - /** - * Returns by value, unit of torque: pound-foot. - * Also see {@link #createPoundFoot()}. - * @draft ICU 64 - */ - static MeasureUnit getPoundFoot(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: acre-foot. - * Caller owns returned value and must free it. - * Also see {@link #getAcreFoot()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createAcreFoot(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: acre-foot. - * Also see {@link #createAcreFoot()}. - * @draft ICU 64 - */ - static MeasureUnit getAcreFoot(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of volume: barrel. - * Caller owns returned value and must free it. - * Also see {@link #getBarrel()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createBarrel(UErrorCode &status); - - /** - * Returns by value, unit of volume: barrel. - * Also see {@link #createBarrel()}. - * @draft ICU 64 - */ - static MeasureUnit getBarrel(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: bushel. - * Caller owns returned value and must free it. - * Also see {@link #getBushel()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createBushel(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: bushel. - * Also see {@link #createBushel()}. - * @draft ICU 64 - */ - static MeasureUnit getBushel(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: centiliter. - * Caller owns returned value and must free it. - * Also see {@link #getCentiliter()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createCentiliter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: centiliter. - * Also see {@link #createCentiliter()}. - * @draft ICU 64 - */ - static MeasureUnit getCentiliter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: cubic-centimeter. - * Caller owns returned value and must free it. - * Also see {@link #getCubicCentimeter()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createCubicCentimeter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: cubic-centimeter. - * Also see {@link #createCubicCentimeter()}. - * @draft ICU 64 - */ - static MeasureUnit getCubicCentimeter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: cubic-foot. - * Caller owns returned value and must free it. - * Also see {@link #getCubicFoot()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createCubicFoot(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: cubic-foot. - * Also see {@link #createCubicFoot()}. - * @draft ICU 64 - */ - static MeasureUnit getCubicFoot(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: cubic-inch. - * Caller owns returned value and must free it. - * Also see {@link #getCubicInch()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createCubicInch(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: cubic-inch. - * Also see {@link #createCubicInch()}. - * @draft ICU 64 - */ - static MeasureUnit getCubicInch(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: cubic-kilometer. - * Caller owns returned value and must free it. - * Also see {@link #getCubicKilometer()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createCubicKilometer(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: cubic-kilometer. - * Also see {@link #createCubicKilometer()}. - * @draft ICU 64 - */ - static MeasureUnit getCubicKilometer(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: cubic-meter. - * Caller owns returned value and must free it. - * Also see {@link #getCubicMeter()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createCubicMeter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: cubic-meter. - * Also see {@link #createCubicMeter()}. - * @draft ICU 64 - */ - static MeasureUnit getCubicMeter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: cubic-mile. - * Caller owns returned value and must free it. - * Also see {@link #getCubicMile()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createCubicMile(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: cubic-mile. - * Also see {@link #createCubicMile()}. - * @draft ICU 64 - */ - static MeasureUnit getCubicMile(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: cubic-yard. - * Caller owns returned value and must free it. - * Also see {@link #getCubicYard()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createCubicYard(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: cubic-yard. - * Also see {@link #createCubicYard()}. - * @draft ICU 64 - */ - static MeasureUnit getCubicYard(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: cup. - * Caller owns returned value and must free it. - * Also see {@link #getCup()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createCup(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: cup. - * Also see {@link #createCup()}. - * @draft ICU 64 - */ - static MeasureUnit getCup(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: cup-metric. - * Caller owns returned value and must free it. - * Also see {@link #getCupMetric()}. - * @param status ICU error code. - * @stable ICU 56 - */ - static MeasureUnit *createCupMetric(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: cup-metric. - * Also see {@link #createCupMetric()}. - * @draft ICU 64 - */ - static MeasureUnit getCupMetric(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: deciliter. - * Caller owns returned value and must free it. - * Also see {@link #getDeciliter()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createDeciliter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: deciliter. - * Also see {@link #createDeciliter()}. - * @draft ICU 64 - */ - static MeasureUnit getDeciliter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: fluid-ounce. - * Caller owns returned value and must free it. - * Also see {@link #getFluidOunce()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createFluidOunce(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: fluid-ounce. - * Also see {@link #createFluidOunce()}. - * @draft ICU 64 - */ - static MeasureUnit getFluidOunce(); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by pointer, unit of volume: fluid-ounce-imperial. - * Caller owns returned value and must free it. - * Also see {@link #getFluidOunceImperial()}. - * @param status ICU error code. - * @draft ICU 64 - */ - static MeasureUnit *createFluidOunceImperial(UErrorCode &status); - - /** - * Returns by value, unit of volume: fluid-ounce-imperial. - * Also see {@link #createFluidOunceImperial()}. - * @draft ICU 64 - */ - static MeasureUnit getFluidOunceImperial(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: gallon. - * Caller owns returned value and must free it. - * Also see {@link #getGallon()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createGallon(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: gallon. - * Also see {@link #createGallon()}. - * @draft ICU 64 - */ - static MeasureUnit getGallon(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: gallon-imperial. - * Caller owns returned value and must free it. - * Also see {@link #getGallonImperial()}. - * @param status ICU error code. - * @stable ICU 57 - */ - static MeasureUnit *createGallonImperial(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: gallon-imperial. - * Also see {@link #createGallonImperial()}. - * @draft ICU 64 - */ - static MeasureUnit getGallonImperial(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: hectoliter. - * Caller owns returned value and must free it. - * Also see {@link #getHectoliter()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createHectoliter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: hectoliter. - * Also see {@link #createHectoliter()}. - * @draft ICU 64 - */ - static MeasureUnit getHectoliter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: liter. - * Caller owns returned value and must free it. - * Also see {@link #getLiter()}. - * @param status ICU error code. - * @stable ICU 53 - */ - static MeasureUnit *createLiter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: liter. - * Also see {@link #createLiter()}. - * @draft ICU 64 - */ - static MeasureUnit getLiter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: megaliter. - * Caller owns returned value and must free it. - * Also see {@link #getMegaliter()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMegaliter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: megaliter. - * Also see {@link #createMegaliter()}. - * @draft ICU 64 - */ - static MeasureUnit getMegaliter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: milliliter. - * Caller owns returned value and must free it. - * Also see {@link #getMilliliter()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createMilliliter(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: milliliter. - * Also see {@link #createMilliliter()}. - * @draft ICU 64 - */ - static MeasureUnit getMilliliter(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: pint. - * Caller owns returned value and must free it. - * Also see {@link #getPint()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createPint(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: pint. - * Also see {@link #createPint()}. - * @draft ICU 64 - */ - static MeasureUnit getPint(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: pint-metric. - * Caller owns returned value and must free it. - * Also see {@link #getPintMetric()}. - * @param status ICU error code. - * @stable ICU 56 - */ - static MeasureUnit *createPintMetric(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: pint-metric. - * Also see {@link #createPintMetric()}. - * @draft ICU 64 - */ - static MeasureUnit getPintMetric(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: quart. - * Caller owns returned value and must free it. - * Also see {@link #getQuart()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createQuart(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: quart. - * Also see {@link #createQuart()}. - * @draft ICU 64 - */ - static MeasureUnit getQuart(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: tablespoon. - * Caller owns returned value and must free it. - * Also see {@link #getTablespoon()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createTablespoon(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: tablespoon. - * Also see {@link #createTablespoon()}. - * @draft ICU 64 - */ - static MeasureUnit getTablespoon(); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Returns by pointer, unit of volume: teaspoon. - * Caller owns returned value and must free it. - * Also see {@link #getTeaspoon()}. - * @param status ICU error code. - * @stable ICU 54 - */ - static MeasureUnit *createTeaspoon(UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API - /** - * Returns by value, unit of volume: teaspoon. - * Also see {@link #createTeaspoon()}. - * @draft ICU 64 - */ - static MeasureUnit getTeaspoon(); -#endif /* U_HIDE_DRAFT_API */ - - -// End generated createXXX methods - - protected: - -#ifndef U_HIDE_INTERNAL_API - /** - * For ICU use only. - * @internal - */ - void initTime(const char *timeId); - - /** - * For ICU use only. - * @internal - */ - void initCurrency(const char *isoCurrency); - - /** - * For ICU use only. - * @internal - */ - void initNoUnit(const char *subtype); - -#endif /* U_HIDE_INTERNAL_API */ - -private: - int32_t fTypeId; - int32_t fSubTypeId; - char fCurrency[4]; - - MeasureUnit(int32_t typeId, int32_t subTypeId) : fTypeId(typeId), fSubTypeId(subTypeId) { - fCurrency[0] = 0; - } - void setTo(int32_t typeId, int32_t subTypeId); - int32_t getOffset() const; - static MeasureUnit *create(int typeId, int subTypeId, UErrorCode &status); -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // !UNCONFIG_NO_FORMATTING -#endif // __MEASUREUNIT_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/measure.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/measure.h deleted file mode 100644 index a5a82f26b9..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/measure.h +++ /dev/null @@ -1,163 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (c) 2004-2015, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* Author: Alan Liu -* Created: April 26, 2004 -* Since: ICU 3.0 -********************************************************************** -*/ -#ifndef __MEASURE_H__ -#define __MEASURE_H__ - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: MeasureUnit object. - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/fmtable.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class MeasureUnit; - -/** - * An amount of a specified unit, consisting of a number and a Unit. - * For example, a length measure consists of a number and a length - * unit, such as feet or meters. - * - *

Measure objects are formatted by MeasureFormat. - * - *

Measure objects are immutable. - * - * @author Alan Liu - * @stable ICU 3.0 - */ -class U_I18N_API Measure: public UObject { - public: - /** - * Construct an object with the given numeric amount and the given - * unit. After this call, the caller must not delete the given - * unit object. - * @param number a numeric object; amount.isNumeric() must be TRUE - * @param adoptedUnit the unit object, which must not be NULL - * @param ec input-output error code. If the amount or the unit - * is invalid, then this will be set to a failing value. - * @stable ICU 3.0 - */ - Measure(const Formattable& number, MeasureUnit* adoptedUnit, - UErrorCode& ec); - - /** - * Copy constructor - * @stable ICU 3.0 - */ - Measure(const Measure& other); - - /** - * Assignment operator - * @stable ICU 3.0 - */ - Measure& operator=(const Measure& other); - - /** - * Return a polymorphic clone of this object. The result will - * have the same class as returned by getDynamicClassID(). - * @stable ICU 3.0 - */ - virtual UObject* clone() const; - - /** - * Destructor - * @stable ICU 3.0 - */ - virtual ~Measure(); - - /** - * Equality operator. Return true if this object is equal - * to the given object. - * @stable ICU 3.0 - */ - UBool operator==(const UObject& other) const; - - /** - * Return a reference to the numeric value of this object. The - * numeric value may be of any numeric type supported by - * Formattable. - * @stable ICU 3.0 - */ - inline const Formattable& getNumber() const; - - /** - * Return a reference to the unit of this object. - * @stable ICU 3.0 - */ - inline const MeasureUnit& getUnit() const; - - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *

-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 53 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 53 - */ - virtual UClassID getDynamicClassID(void) const; - - protected: - /** - * Default constructor. - * @stable ICU 3.0 - */ - Measure(); - - private: - /** - * The numeric value of this object, e.g. 2.54 or 100. - */ - Formattable number; - - /** - * The unit of this object, e.g., "millimeter" or "JPY". This is - * owned by this object. - */ - MeasureUnit* unit; -}; - -inline const Formattable& Measure::getNumber() const { - return number; -} - -inline const MeasureUnit& Measure::getUnit() const { - return *unit; -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // !UCONFIG_NO_FORMATTING -#endif // __MEASURE_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/messagepattern.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/messagepattern.h deleted file mode 100644 index 396f96e3bb..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/messagepattern.h +++ /dev/null @@ -1,947 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2011-2013, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* file name: messagepattern.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2011mar14 -* created by: Markus W. Scherer -*/ - -#ifndef __MESSAGEPATTERN_H__ -#define __MESSAGEPATTERN_H__ - -/** - * \file - * \brief C++ API: MessagePattern class: Parses and represents ICU MessageFormat patterns. - */ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/parseerr.h" -#include "unicode/unistr.h" - -/** - * Mode for when an apostrophe starts quoted literal text for MessageFormat output. - * The default is DOUBLE_OPTIONAL unless overridden via uconfig.h - * (UCONFIG_MSGPAT_DEFAULT_APOSTROPHE_MODE). - *

- * A pair of adjacent apostrophes always results in a single apostrophe in the output, - * even when the pair is between two single, text-quoting apostrophes. - *

- * The following table shows examples of desired MessageFormat.format() output - * with the pattern strings that yield that output. - *

- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
Desired outputDOUBLE_OPTIONALDOUBLE_REQUIRED
I see {many}I see '{many}'(same)
I said {'Wow!'}I said '{''Wow!''}'(same)
I don't knowI don't know OR
I don''t know
I don''t know
- * @stable ICU 4.8 - * @see UCONFIG_MSGPAT_DEFAULT_APOSTROPHE_MODE - */ -enum UMessagePatternApostropheMode { - /** - * A literal apostrophe is represented by - * either a single or a double apostrophe pattern character. - * Within a MessageFormat pattern, a single apostrophe only starts quoted literal text - * if it immediately precedes a curly brace {}, - * or a pipe symbol | if inside a choice format, - * or a pound symbol # if inside a plural format. - *

- * This is the default behavior starting with ICU 4.8. - * @stable ICU 4.8 - */ - UMSGPAT_APOS_DOUBLE_OPTIONAL, - /** - * A literal apostrophe must be represented by - * a double apostrophe pattern character. - * A single apostrophe always starts quoted literal text. - *

- * This is the behavior of ICU 4.6 and earlier, and of the JDK. - * @stable ICU 4.8 - */ - UMSGPAT_APOS_DOUBLE_REQUIRED -}; -/** - * @stable ICU 4.8 - */ -typedef enum UMessagePatternApostropheMode UMessagePatternApostropheMode; - -/** - * MessagePattern::Part type constants. - * @stable ICU 4.8 - */ -enum UMessagePatternPartType { - /** - * Start of a message pattern (main or nested). - * The length is 0 for the top-level message - * and for a choice argument sub-message, otherwise 1 for the '{'. - * The value indicates the nesting level, starting with 0 for the main message. - *

- * There is always a later MSG_LIMIT part. - * @stable ICU 4.8 - */ - UMSGPAT_PART_TYPE_MSG_START, - /** - * End of a message pattern (main or nested). - * The length is 0 for the top-level message and - * the last sub-message of a choice argument, - * otherwise 1 for the '}' or (in a choice argument style) the '|'. - * The value indicates the nesting level, starting with 0 for the main message. - * @stable ICU 4.8 - */ - UMSGPAT_PART_TYPE_MSG_LIMIT, - /** - * Indicates a substring of the pattern string which is to be skipped when formatting. - * For example, an apostrophe that begins or ends quoted text - * would be indicated with such a part. - * The value is undefined and currently always 0. - * @stable ICU 4.8 - */ - UMSGPAT_PART_TYPE_SKIP_SYNTAX, - /** - * Indicates that a syntax character needs to be inserted for auto-quoting. - * The length is 0. - * The value is the character code of the insertion character. (U+0027=APOSTROPHE) - * @stable ICU 4.8 - */ - UMSGPAT_PART_TYPE_INSERT_CHAR, - /** - * Indicates a syntactic (non-escaped) # symbol in a plural variant. - * When formatting, replace this part's substring with the - * (value-offset) for the plural argument value. - * The value is undefined and currently always 0. - * @stable ICU 4.8 - */ - UMSGPAT_PART_TYPE_REPLACE_NUMBER, - /** - * Start of an argument. - * The length is 1 for the '{'. - * The value is the ordinal value of the ArgType. Use getArgType(). - *

- * This part is followed by either an ARG_NUMBER or ARG_NAME, - * followed by optional argument sub-parts (see UMessagePatternArgType constants) - * and finally an ARG_LIMIT part. - * @stable ICU 4.8 - */ - UMSGPAT_PART_TYPE_ARG_START, - /** - * End of an argument. - * The length is 1 for the '}'. - * The value is the ordinal value of the ArgType. Use getArgType(). - * @stable ICU 4.8 - */ - UMSGPAT_PART_TYPE_ARG_LIMIT, - /** - * The argument number, provided by the value. - * @stable ICU 4.8 - */ - UMSGPAT_PART_TYPE_ARG_NUMBER, - /** - * The argument name. - * The value is undefined and currently always 0. - * @stable ICU 4.8 - */ - UMSGPAT_PART_TYPE_ARG_NAME, - /** - * The argument type. - * The value is undefined and currently always 0. - * @stable ICU 4.8 - */ - UMSGPAT_PART_TYPE_ARG_TYPE, - /** - * The argument style text. - * The value is undefined and currently always 0. - * @stable ICU 4.8 - */ - UMSGPAT_PART_TYPE_ARG_STYLE, - /** - * A selector substring in a "complex" argument style. - * The value is undefined and currently always 0. - * @stable ICU 4.8 - */ - UMSGPAT_PART_TYPE_ARG_SELECTOR, - /** - * An integer value, for example the offset or an explicit selector value - * in a PluralFormat style. - * The part value is the integer value. - * @stable ICU 4.8 - */ - UMSGPAT_PART_TYPE_ARG_INT, - /** - * A numeric value, for example the offset or an explicit selector value - * in a PluralFormat style. - * The part value is an index into an internal array of numeric values; - * use getNumericValue(). - * @stable ICU 4.8 - */ - UMSGPAT_PART_TYPE_ARG_DOUBLE -}; -/** - * @stable ICU 4.8 - */ -typedef enum UMessagePatternPartType UMessagePatternPartType; - -/** - * Argument type constants. - * Returned by Part.getArgType() for ARG_START and ARG_LIMIT parts. - * - * Messages nested inside an argument are each delimited by MSG_START and MSG_LIMIT, - * with a nesting level one greater than the surrounding message. - * @stable ICU 4.8 - */ -enum UMessagePatternArgType { - /** - * The argument has no specified type. - * @stable ICU 4.8 - */ - UMSGPAT_ARG_TYPE_NONE, - /** - * The argument has a "simple" type which is provided by the ARG_TYPE part. - * An ARG_STYLE part might follow that. - * @stable ICU 4.8 - */ - UMSGPAT_ARG_TYPE_SIMPLE, - /** - * The argument is a ChoiceFormat with one or more - * ((ARG_INT | ARG_DOUBLE), ARG_SELECTOR, message) tuples. - * @stable ICU 4.8 - */ - UMSGPAT_ARG_TYPE_CHOICE, - /** - * The argument is a cardinal-number PluralFormat with an optional ARG_INT or ARG_DOUBLE offset - * (e.g., offset:1) - * and one or more (ARG_SELECTOR [explicit-value] message) tuples. - * If the selector has an explicit value (e.g., =2), then - * that value is provided by the ARG_INT or ARG_DOUBLE part preceding the message. - * Otherwise the message immediately follows the ARG_SELECTOR. - * @stable ICU 4.8 - */ - UMSGPAT_ARG_TYPE_PLURAL, - /** - * The argument is a SelectFormat with one or more (ARG_SELECTOR, message) pairs. - * @stable ICU 4.8 - */ - UMSGPAT_ARG_TYPE_SELECT, - /** - * The argument is an ordinal-number PluralFormat - * with the same style parts sequence and semantics as UMSGPAT_ARG_TYPE_PLURAL. - * @stable ICU 50 - */ - UMSGPAT_ARG_TYPE_SELECTORDINAL -}; -/** - * @stable ICU 4.8 - */ -typedef enum UMessagePatternArgType UMessagePatternArgType; - -/** - * \def UMSGPAT_ARG_TYPE_HAS_PLURAL_STYLE - * Returns TRUE if the argument type has a plural style part sequence and semantics, - * for example UMSGPAT_ARG_TYPE_PLURAL and UMSGPAT_ARG_TYPE_SELECTORDINAL. - * @stable ICU 50 - */ -#define UMSGPAT_ARG_TYPE_HAS_PLURAL_STYLE(argType) \ - ((argType)==UMSGPAT_ARG_TYPE_PLURAL || (argType)==UMSGPAT_ARG_TYPE_SELECTORDINAL) - -enum { - /** - * Return value from MessagePattern.validateArgumentName() for when - * the string is a valid "pattern identifier" but not a number. - * @stable ICU 4.8 - */ - UMSGPAT_ARG_NAME_NOT_NUMBER=-1, - - /** - * Return value from MessagePattern.validateArgumentName() for when - * the string is invalid. - * It might not be a valid "pattern identifier", - * or it have only ASCII digits but there is a leading zero or the number is too large. - * @stable ICU 4.8 - */ - UMSGPAT_ARG_NAME_NOT_VALID=-2 -}; - -/** - * Special value that is returned by getNumericValue(Part) when no - * numeric value is defined for a part. - * @see MessagePattern.getNumericValue() - * @stable ICU 4.8 - */ -#define UMSGPAT_NO_NUMERIC_VALUE ((double)(-123456789)) - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class MessagePatternDoubleList; -class MessagePatternPartsList; - -/** - * Parses and represents ICU MessageFormat patterns. - * Also handles patterns for ChoiceFormat, PluralFormat and SelectFormat. - * Used in the implementations of those classes as well as in tools - * for message validation, translation and format conversion. - *

- * The parser handles all syntax relevant for identifying message arguments. - * This includes "complex" arguments whose style strings contain - * nested MessageFormat pattern substrings. - * For "simple" arguments (with no nested MessageFormat pattern substrings), - * the argument style is not parsed any further. - *

- * The parser handles named and numbered message arguments and allows both in one message. - *

- * Once a pattern has been parsed successfully, iterate through the parsed data - * with countParts(), getPart() and related methods. - *

- * The data logically represents a parse tree, but is stored and accessed - * as a list of "parts" for fast and simple parsing and to minimize object allocations. - * Arguments and nested messages are best handled via recursion. - * For every _START "part", MessagePattern.getLimitPartIndex() efficiently returns - * the index of the corresponding _LIMIT "part". - *

- * List of "parts": - *

- * message = MSG_START (SKIP_SYNTAX | INSERT_CHAR | REPLACE_NUMBER | argument)* MSG_LIMIT
- * argument = noneArg | simpleArg | complexArg
- * complexArg = choiceArg | pluralArg | selectArg
- *
- * noneArg = ARG_START.NONE (ARG_NAME | ARG_NUMBER) ARG_LIMIT.NONE
- * simpleArg = ARG_START.SIMPLE (ARG_NAME | ARG_NUMBER) ARG_TYPE [ARG_STYLE] ARG_LIMIT.SIMPLE
- * choiceArg = ARG_START.CHOICE (ARG_NAME | ARG_NUMBER) choiceStyle ARG_LIMIT.CHOICE
- * pluralArg = ARG_START.PLURAL (ARG_NAME | ARG_NUMBER) pluralStyle ARG_LIMIT.PLURAL
- * selectArg = ARG_START.SELECT (ARG_NAME | ARG_NUMBER) selectStyle ARG_LIMIT.SELECT
- *
- * choiceStyle = ((ARG_INT | ARG_DOUBLE) ARG_SELECTOR message)+
- * pluralStyle = [ARG_INT | ARG_DOUBLE] (ARG_SELECTOR [ARG_INT | ARG_DOUBLE] message)+
- * selectStyle = (ARG_SELECTOR message)+
- * 
- *
    - *
  • Literal output text is not represented directly by "parts" but accessed - * between parts of a message, from one part's getLimit() to the next part's getIndex(). - *
  • ARG_START.CHOICE stands for an ARG_START Part with ArgType CHOICE. - *
  • In the choiceStyle, the ARG_SELECTOR has the '<', the '#' or - * the less-than-or-equal-to sign (U+2264). - *
  • In the pluralStyle, the first, optional numeric Part has the "offset:" value. - * The optional numeric Part between each (ARG_SELECTOR, message) pair - * is the value of an explicit-number selector like "=2", - * otherwise the selector is a non-numeric identifier. - *
  • The REPLACE_NUMBER Part can occur only in an immediate sub-message of the pluralStyle. - *
- *

- * This class is not intended for public subclassing. - * - * @stable ICU 4.8 - */ -class U_COMMON_API MessagePattern : public UObject { -public: - /** - * Constructs an empty MessagePattern with default UMessagePatternApostropheMode. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @stable ICU 4.8 - */ - MessagePattern(UErrorCode &errorCode); - - /** - * Constructs an empty MessagePattern. - * @param mode Explicit UMessagePatternApostropheMode. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @stable ICU 4.8 - */ - MessagePattern(UMessagePatternApostropheMode mode, UErrorCode &errorCode); - - /** - * Constructs a MessagePattern with default UMessagePatternApostropheMode and - * parses the MessageFormat pattern string. - * @param pattern a MessageFormat pattern string - * @param parseError Struct to receive information on the position - * of an error within the pattern. - * Can be NULL. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * TODO: turn @throws into UErrorCode specifics? - * @throws IllegalArgumentException for syntax errors in the pattern string - * @throws IndexOutOfBoundsException if certain limits are exceeded - * (e.g., argument number too high, argument name too long, etc.) - * @throws NumberFormatException if a number could not be parsed - * @stable ICU 4.8 - */ - MessagePattern(const UnicodeString &pattern, UParseError *parseError, UErrorCode &errorCode); - - /** - * Copy constructor. - * @param other Object to copy. - * @stable ICU 4.8 - */ - MessagePattern(const MessagePattern &other); - - /** - * Assignment operator. - * @param other Object to copy. - * @return *this=other - * @stable ICU 4.8 - */ - MessagePattern &operator=(const MessagePattern &other); - - /** - * Destructor. - * @stable ICU 4.8 - */ - virtual ~MessagePattern(); - - /** - * Parses a MessageFormat pattern string. - * @param pattern a MessageFormat pattern string - * @param parseError Struct to receive information on the position - * of an error within the pattern. - * Can be NULL. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return *this - * @throws IllegalArgumentException for syntax errors in the pattern string - * @throws IndexOutOfBoundsException if certain limits are exceeded - * (e.g., argument number too high, argument name too long, etc.) - * @throws NumberFormatException if a number could not be parsed - * @stable ICU 4.8 - */ - MessagePattern &parse(const UnicodeString &pattern, - UParseError *parseError, UErrorCode &errorCode); - - /** - * Parses a ChoiceFormat pattern string. - * @param pattern a ChoiceFormat pattern string - * @param parseError Struct to receive information on the position - * of an error within the pattern. - * Can be NULL. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return *this - * @throws IllegalArgumentException for syntax errors in the pattern string - * @throws IndexOutOfBoundsException if certain limits are exceeded - * (e.g., argument number too high, argument name too long, etc.) - * @throws NumberFormatException if a number could not be parsed - * @stable ICU 4.8 - */ - MessagePattern &parseChoiceStyle(const UnicodeString &pattern, - UParseError *parseError, UErrorCode &errorCode); - - /** - * Parses a PluralFormat pattern string. - * @param pattern a PluralFormat pattern string - * @param parseError Struct to receive information on the position - * of an error within the pattern. - * Can be NULL. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return *this - * @throws IllegalArgumentException for syntax errors in the pattern string - * @throws IndexOutOfBoundsException if certain limits are exceeded - * (e.g., argument number too high, argument name too long, etc.) - * @throws NumberFormatException if a number could not be parsed - * @stable ICU 4.8 - */ - MessagePattern &parsePluralStyle(const UnicodeString &pattern, - UParseError *parseError, UErrorCode &errorCode); - - /** - * Parses a SelectFormat pattern string. - * @param pattern a SelectFormat pattern string - * @param parseError Struct to receive information on the position - * of an error within the pattern. - * Can be NULL. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return *this - * @throws IllegalArgumentException for syntax errors in the pattern string - * @throws IndexOutOfBoundsException if certain limits are exceeded - * (e.g., argument number too high, argument name too long, etc.) - * @throws NumberFormatException if a number could not be parsed - * @stable ICU 4.8 - */ - MessagePattern &parseSelectStyle(const UnicodeString &pattern, - UParseError *parseError, UErrorCode &errorCode); - - /** - * Clears this MessagePattern. - * countParts() will return 0. - * @stable ICU 4.8 - */ - void clear(); - - /** - * Clears this MessagePattern and sets the UMessagePatternApostropheMode. - * countParts() will return 0. - * @param mode The new UMessagePatternApostropheMode. - * @stable ICU 4.8 - */ - void clearPatternAndSetApostropheMode(UMessagePatternApostropheMode mode) { - clear(); - aposMode=mode; - } - - /** - * @param other another object to compare with. - * @return TRUE if this object is equivalent to the other one. - * @stable ICU 4.8 - */ - UBool operator==(const MessagePattern &other) const; - - /** - * @param other another object to compare with. - * @return FALSE if this object is equivalent to the other one. - * @stable ICU 4.8 - */ - inline UBool operator!=(const MessagePattern &other) const { - return !operator==(other); - } - - /** - * @return A hash code for this object. - * @stable ICU 4.8 - */ - int32_t hashCode() const; - - /** - * @return this instance's UMessagePatternApostropheMode. - * @stable ICU 4.8 - */ - UMessagePatternApostropheMode getApostropheMode() const { - return aposMode; - } - - // Java has package-private jdkAposMode() here. - // In C++, this is declared in the MessageImpl class. - - /** - * @return the parsed pattern string (null if none was parsed). - * @stable ICU 4.8 - */ - const UnicodeString &getPatternString() const { - return msg; - } - - /** - * Does the parsed pattern have named arguments like {first_name}? - * @return TRUE if the parsed pattern has at least one named argument. - * @stable ICU 4.8 - */ - UBool hasNamedArguments() const { - return hasArgNames; - } - - /** - * Does the parsed pattern have numbered arguments like {2}? - * @return TRUE if the parsed pattern has at least one numbered argument. - * @stable ICU 4.8 - */ - UBool hasNumberedArguments() const { - return hasArgNumbers; - } - - /** - * Validates and parses an argument name or argument number string. - * An argument name must be a "pattern identifier", that is, it must contain - * no Unicode Pattern_Syntax or Pattern_White_Space characters. - * If it only contains ASCII digits, then it must be a small integer with no leading zero. - * @param name Input string. - * @return >=0 if the name is a valid number, - * ARG_NAME_NOT_NUMBER (-1) if it is a "pattern identifier" but not all ASCII digits, - * ARG_NAME_NOT_VALID (-2) if it is neither. - * @stable ICU 4.8 - */ - static int32_t validateArgumentName(const UnicodeString &name); - - /** - * Returns a version of the parsed pattern string where each ASCII apostrophe - * is doubled (escaped) if it is not already, and if it is not interpreted as quoting syntax. - *

- * For example, this turns "I don't '{know}' {gender,select,female{h''er}other{h'im}}." - * into "I don''t '{know}' {gender,select,female{h''er}other{h''im}}." - * @return the deep-auto-quoted version of the parsed pattern string. - * @see MessageFormat.autoQuoteApostrophe() - * @stable ICU 4.8 - */ - UnicodeString autoQuoteApostropheDeep() const; - - class Part; - - /** - * Returns the number of "parts" created by parsing the pattern string. - * Returns 0 if no pattern has been parsed or clear() was called. - * @return the number of pattern parts. - * @stable ICU 4.8 - */ - int32_t countParts() const { - return partsLength; - } - - /** - * Gets the i-th pattern "part". - * @param i The index of the Part data. (0..countParts()-1) - * @return the i-th pattern "part". - * @stable ICU 4.8 - */ - const Part &getPart(int32_t i) const { - return parts[i]; - } - - /** - * Returns the UMessagePatternPartType of the i-th pattern "part". - * Convenience method for getPart(i).getType(). - * @param i The index of the Part data. (0..countParts()-1) - * @return The UMessagePatternPartType of the i-th Part. - * @stable ICU 4.8 - */ - UMessagePatternPartType getPartType(int32_t i) const { - return getPart(i).type; - } - - /** - * Returns the pattern index of the specified pattern "part". - * Convenience method for getPart(partIndex).getIndex(). - * @param partIndex The index of the Part data. (0..countParts()-1) - * @return The pattern index of this Part. - * @stable ICU 4.8 - */ - int32_t getPatternIndex(int32_t partIndex) const { - return getPart(partIndex).index; - } - - /** - * Returns the substring of the pattern string indicated by the Part. - * Convenience method for getPatternString().substring(part.getIndex(), part.getLimit()). - * @param part a part of this MessagePattern. - * @return the substring associated with part. - * @stable ICU 4.8 - */ - UnicodeString getSubstring(const Part &part) const { - return msg.tempSubString(part.index, part.length); - } - - /** - * Compares the part's substring with the input string s. - * @param part a part of this MessagePattern. - * @param s a string. - * @return TRUE if getSubstring(part).equals(s). - * @stable ICU 4.8 - */ - UBool partSubstringMatches(const Part &part, const UnicodeString &s) const { - return 0==msg.compare(part.index, part.length, s); - } - - /** - * Returns the numeric value associated with an ARG_INT or ARG_DOUBLE. - * @param part a part of this MessagePattern. - * @return the part's numeric value, or UMSGPAT_NO_NUMERIC_VALUE if this is not a numeric part. - * @stable ICU 4.8 - */ - double getNumericValue(const Part &part) const; - - /** - * Returns the "offset:" value of a PluralFormat argument, or 0 if none is specified. - * @param pluralStart the index of the first PluralFormat argument style part. (0..countParts()-1) - * @return the "offset:" value. - * @stable ICU 4.8 - */ - double getPluralOffset(int32_t pluralStart) const; - - /** - * Returns the index of the ARG|MSG_LIMIT part corresponding to the ARG|MSG_START at start. - * @param start The index of some Part data (0..countParts()-1); - * this Part should be of Type ARG_START or MSG_START. - * @return The first i>start where getPart(i).getType()==ARG|MSG_LIMIT at the same nesting level, - * or start itself if getPartType(msgStart)!=ARG|MSG_START. - * @stable ICU 4.8 - */ - int32_t getLimitPartIndex(int32_t start) const { - int32_t limit=getPart(start).limitPartIndex; - if(limit parts=new ArrayList(); - MessagePatternPartsList *partsList; - Part *parts; - int32_t partsLength; - // ArrayList numericValues; - MessagePatternDoubleList *numericValuesList; - double *numericValues; - int32_t numericValuesLength; - UBool hasArgNames; - UBool hasArgNumbers; - UBool needsAutoQuoting; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // !UCONFIG_NO_FORMATTING - -#endif // __MESSAGEPATTERN_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/module.private.modulemap b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/module.private.modulemap deleted file mode 100644 index 3a445b39c2..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/module.private.modulemap +++ /dev/null @@ -1,90 +0,0 @@ -module ICU_Private [extern_c] [system] { - header "icudataver.h" - header "icuplug.h" - header "localpointer.h" - header "parseerr.h" - header "platform.h" - header "ptypes.h" - header "putil.h" - header "ualoc.h" - header "uameasureformat.h" - header "uatimeunitformat.h" - header "ubidi.h" - header "ubiditransform.h" - header "ubrk.h" - header "ucal.h" - header "ucasemap.h" - header "ucat.h" - header "uchar.h" - header "uclean.h" - header "ucnv.h" - header "ucnv_cb.h" - header "ucnv_err.h" - header "ucnvsel.h" - header "ucol.h" - header "ucoleitr.h" - header "uconfig.h" - header "ucpmap.h" - header "ucptrie.h" - header "ucsdet.h" - header "ucurr.h" - header "udat.h" - header "udata.h" - header "udateintervalformat.h" - header "udatintv.h" - header "udatpg.h" - header "udisplaycontext.h" - header "uenum.h" - header "ufieldpositer.h" - header "uformattable.h" - header "uformattedvalue.h" - header "ugender.h" - header "uidna.h" - header "uiter.h" - header "uldnames.h" - header "ulistformatter.h" - header "uloc.h" - header "ulocdata.h" - header "umachine.h" - header "umisc.h" - header "umsg.h" - header "umutablecptrie.h" - header "unorm.h" - header "unorm2.h" - header "unum.h" - header "unumberformatter.h" - header "unumsys.h" - header "uplrule.h" - header "upluralrules.h" - header "urbtok.h" - header "uregex.h" - header "uregion.h" - header "ureldatefmt.h" - header "urename.h" - header "urep.h" - header "ures.h" - header "uscript.h" - header "usearch.h" - header "uset.h" - header "ushape.h" - header "uspoof.h" - header "usprep.h" - header "ustdio.h" - header "ustring.h" - header "ustringtrie.h" - header "utext.h" - header "utf.h" - header "utf16.h" - header "utf8.h" - header "utf_old.h" - header "utmscale.h" - header "utrace.h" - header "utrans.h" - header "utypes.h" - header "uvernum.h" - header "uversion.h" - - link "icucore" - - export * -} diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/msgfmt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/msgfmt.h deleted file mode 100644 index 382a317b0e..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/msgfmt.h +++ /dev/null @@ -1,1117 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -* Copyright (C) 2007-2013, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************************** -* -* File MSGFMT.H -* -* Modification History: -* -* Date Name Description -* 02/19/97 aliu Converted from java. -* 03/20/97 helena Finished first cut of implementation. -* 07/22/98 stephen Removed operator!= (defined in Format) -* 08/19/2002 srl Removing Javaisms -*******************************************************************************/ - -#ifndef MSGFMT_H -#define MSGFMT_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Formats messages in a language-neutral way. - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/format.h" -#include "unicode/locid.h" -#include "unicode/messagepattern.h" -#include "unicode/parseerr.h" -#include "unicode/plurfmt.h" -#include "unicode/plurrule.h" - -U_CDECL_BEGIN -// Forward declaration. -struct UHashtable; -typedef struct UHashtable UHashtable; /**< @internal */ -U_CDECL_END - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class AppendableWrapper; -class DateFormat; -class NumberFormat; - -/** - *

MessageFormat prepares strings for display to users, - * with optional arguments (variables/placeholders). - * The arguments can occur in any order, which is necessary for translation - * into languages with different grammars. - * - *

A MessageFormat is constructed from a pattern string - * with arguments in {curly braces} which will be replaced by formatted values. - * - *

MessageFormat differs from the other Format - * classes in that you create a MessageFormat object with one - * of its constructors (not with a createInstance style factory - * method). Factory methods aren't necessary because MessageFormat - * itself doesn't implement locale-specific behavior. Any locale-specific - * behavior is defined by the pattern that you provide and the - * subformats used for inserted arguments. - * - *

Arguments can be named (using identifiers) or numbered (using small ASCII-digit integers). - * Some of the API methods work only with argument numbers and throw an exception - * if the pattern has named arguments (see {@link #usesNamedArguments()}). - * - *

An argument might not specify any format type. In this case, - * a numeric value is formatted with a default (for the locale) NumberFormat, - * and a date/time value is formatted with a default (for the locale) DateFormat. - * - *

An argument might specify a "simple" type for which the specified - * Format object is created, cached and used. - * - *

An argument might have a "complex" type with nested MessageFormat sub-patterns. - * During formatting, one of these sub-messages is selected according to the argument value - * and recursively formatted. - * - *

After construction, a custom Format object can be set for - * a top-level argument, overriding the default formatting and parsing behavior - * for that argument. - * However, custom formatting can be achieved more simply by writing - * a typeless argument in the pattern string - * and supplying it with a preformatted string value. - * - *

When formatting, MessageFormat takes a collection of argument values - * and writes an output string. - * The argument values may be passed as an array - * (when the pattern contains only numbered arguments) - * or as an array of names and and an array of arguments (which works for both named - * and numbered arguments). - * - *

Each argument is matched with one of the input values by array index or argument name - * and formatted according to its pattern specification - * (or using a custom Format object if one was set). - * A numbered pattern argument is matched with an argument name that contains that number - * as an ASCII-decimal-digit string (without leading zero). - * - *

Patterns and Their Interpretation

- * - * MessageFormat uses patterns of the following form: - *
- * message = messageText (argument messageText)*
- * argument = noneArg | simpleArg | complexArg
- * complexArg = choiceArg | pluralArg | selectArg | selectordinalArg
- *
- * noneArg = '{' argNameOrNumber '}'
- * simpleArg = '{' argNameOrNumber ',' argType [',' argStyle] '}'
- * choiceArg = '{' argNameOrNumber ',' "choice" ',' choiceStyle '}'
- * pluralArg = '{' argNameOrNumber ',' "plural" ',' pluralStyle '}'
- * selectArg = '{' argNameOrNumber ',' "select" ',' selectStyle '}'
- * selectordinalArg = '{' argNameOrNumber ',' "selectordinal" ',' pluralStyle '}'
- *
- * choiceStyle: see {@link ChoiceFormat}
- * pluralStyle: see {@link PluralFormat}
- * selectStyle: see {@link SelectFormat}
- *
- * argNameOrNumber = argName | argNumber
- * argName = [^[[:Pattern_Syntax:][:Pattern_White_Space:]]]+
- * argNumber = '0' | ('1'..'9' ('0'..'9')*)
- *
- * argType = "number" | "date" | "time" | "spellout" | "ordinal" | "duration"
- * argStyle = "short" | "medium" | "long" | "full" | "integer" | "currency" | "percent" | argStyleText | "::" argSkeletonText
- * 
- * - *
    - *
  • messageText can contain quoted literal strings including syntax characters. - * A quoted literal string begins with an ASCII apostrophe and a syntax character - * (usually a {curly brace}) and continues until the next single apostrophe. - * A double ASCII apostrohpe inside or outside of a quoted string represents - * one literal apostrophe. - *
  • Quotable syntax characters are the {curly braces} in all messageText parts, - * plus the '#' sign in a messageText immediately inside a pluralStyle, - * and the '|' symbol in a messageText immediately inside a choiceStyle. - *
  • See also {@link #UMessagePatternApostropheMode} - *
  • In argStyleText, every single ASCII apostrophe begins and ends quoted literal text, - * and unquoted {curly braces} must occur in matched pairs. - *
- * - *

Recommendation: Use the real apostrophe (single quote) character - * \htmlonly’\endhtmlonly (U+2019) for - * human-readable text, and use the ASCII apostrophe ' (U+0027) - * only in program syntax, like quoting in MessageFormat. - * See the annotations for U+0027 Apostrophe in The Unicode Standard. - * - *

The choice argument type is deprecated. - * Use plural arguments for proper plural selection, - * and select arguments for simple selection among a fixed set of choices. - * - *

The argType and argStyle values are used to create - * a Format instance for the format element. The following - * table shows how the values map to Format instances. Combinations not - * shown in the table are illegal. Any argStyleText must - * be a valid pattern string for the Format subclass used. - * - *

- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
argType - * argStyle - * resulting Format object - *
(none) - * null - *
number - * (none) - * NumberFormat.createInstance(getLocale(), status) - *
integer - * NumberFormat.createInstance(getLocale(), kNumberStyle, status) - *
currency - * NumberFormat.createCurrencyInstance(getLocale(), status) - *
percent - * NumberFormat.createPercentInstance(getLocale(), status) - *
argStyleText - * new DecimalFormat(argStyleText, new DecimalFormatSymbols(getLocale(), status), status) - *
argSkeletonText - * NumberFormatter::forSkeleton(argSkeletonText, status).locale(getLocale()).toFormat(status) - *
date - * (none) - * DateFormat.createDateInstance(kDefault, getLocale(), status) - *
short - * DateFormat.createDateInstance(kShort, getLocale(), status) - *
medium - * DateFormat.createDateInstance(kDefault, getLocale(), status) - *
long - * DateFormat.createDateInstance(kLong, getLocale(), status) - *
full - * DateFormat.createDateInstance(kFull, getLocale(), status) - *
argStyleText - * new SimpleDateFormat(argStyleText, getLocale(), status) - *
argSkeletonText - * DateFormat::createInstanceForSkeleton(argSkeletonText, getLocale(), status) - *
time - * (none) - * DateFormat.createTimeInstance(kDefault, getLocale(), status) - *
short - * DateFormat.createTimeInstance(kShort, getLocale(), status) - *
medium - * DateFormat.createTimeInstance(kDefault, getLocale(), status) - *
long - * DateFormat.createTimeInstance(kLong, getLocale(), status) - *
full - * DateFormat.createTimeInstance(kFull, getLocale(), status) - *
argStyleText - * new SimpleDateFormat(argStyleText, getLocale(), status) - *
spellout - * argStyleText (optional) - * new RuleBasedNumberFormat(URBNF_SPELLOUT, getLocale(), status) - *
    .setDefaultRuleset(argStyleText, status);
- *
ordinal - * argStyleText (optional) - * new RuleBasedNumberFormat(URBNF_ORDINAL, getLocale(), status) - *
    .setDefaultRuleset(argStyleText, status);
- *
duration - * argStyleText (optional) - * new RuleBasedNumberFormat(URBNF_DURATION, getLocale(), status) - *
    .setDefaultRuleset(argStyleText, status);
- *
- *

- * - *

Argument formatting

- * - *

Arguments are formatted according to their type, using the default - * ICU formatters for those types, unless otherwise specified.

- * - *

There are also several ways to control the formatting.

- * - *

We recommend you use default styles, predefined style values, skeletons, - * or preformatted values, but not pattern strings or custom format objects.

- * - *

For more details, see the - * ICU User Guide.

- * - *

Usage Information

- * - *

Here are some examples of usage: - * Example 1: - * - *

- * \code
- *     UErrorCode success = U_ZERO_ERROR;
- *     GregorianCalendar cal(success);
- *     Formattable arguments[] = {
- *         7L,
- *         Formattable( (Date) cal.getTime(success), Formattable::kIsDate),
- *         "a disturbance in the Force"
- *     };
- *
- *     UnicodeString result;
- *     MessageFormat::format(
- *          "At {1,time,::jmm} on {1,date,::dMMMM}, there was {2} on planet {0,number}.",
- *          arguments, 3, result, success );
- *
- *     cout << "result: " << result << endl;
- *     //: At 4:34 PM on March 23, there was a disturbance
- *     //             in the Force on planet 7.
- * \endcode
- * 
- * - * Typically, the message format will come from resources, and the - * arguments will be dynamically set at runtime. - * - *

Example 2: - * - *

- *  \code
- *     success = U_ZERO_ERROR;
- *     Formattable testArgs[] = {3L, "MyDisk"};
- *
- *     MessageFormat form(
- *         "The disk \"{1}\" contains {0} file(s).", success );
- *
- *     UnicodeString string;
- *     FieldPosition fpos = 0;
- *     cout << "format: " << form.format(testArgs, 2, string, fpos, success ) << endl;
- *
- *     // output, with different testArgs:
- *     // output: The disk "MyDisk" contains 0 file(s).
- *     // output: The disk "MyDisk" contains 1 file(s).
- *     // output: The disk "MyDisk" contains 1,273 file(s).
- *  \endcode
- *  
- * - * - *

For messages that include plural forms, you can use a plural argument: - *

- * \code
- *  success = U_ZERO_ERROR;
- *  MessageFormat msgFmt(
- *       "{num_files, plural, "
- *       "=0{There are no files on disk \"{disk_name}\".}"
- *       "=1{There is one file on disk \"{disk_name}\".}"
- *       "other{There are # files on disk \"{disk_name}\".}}",
- *      Locale("en"),
- *      success);
- *  FieldPosition fpos = 0;
- *  Formattable testArgs[] = {0L, "MyDisk"};
- *  UnicodeString testArgsNames[] = {"num_files", "disk_name"};
- *  UnicodeString result;
- *  cout << msgFmt.format(testArgs, testArgsNames, 2, result, fpos, 0, success);
- *  testArgs[0] = 3L;
- *  cout << msgFmt.format(testArgs, testArgsNames, 2, result, fpos, 0, success);
- * \endcode
- * output:
- * There are no files on disk "MyDisk".
- * There are 3 files on "MyDisk".
- * 
- * See {@link PluralFormat} and {@link PluralRules} for details. - * - *

Synchronization

- * - *

MessageFormats are not synchronized. - * It is recommended to create separate format instances for each thread. - * If multiple threads access a format concurrently, it must be synchronized - * externally. - * - * @stable ICU 2.0 - */ -class U_I18N_API MessageFormat : public Format { -public: -#ifndef U_HIDE_OBSOLETE_API - /** - * Enum type for kMaxFormat. - * @obsolete ICU 3.0. The 10-argument limit was removed as of ICU 2.6, - * rendering this enum type obsolete. - */ - enum EFormatNumber { - /** - * The maximum number of arguments. - * @obsolete ICU 3.0. The 10-argument limit was removed as of ICU 2.6, - * rendering this constant obsolete. - */ - kMaxFormat = 10 - }; -#endif /* U_HIDE_OBSOLETE_API */ - - /** - * Constructs a new MessageFormat using the given pattern and the - * default locale. - * - * @param pattern Pattern used to construct object. - * @param status Input/output error code. If the - * pattern cannot be parsed, set to failure code. - * @stable ICU 2.0 - */ - MessageFormat(const UnicodeString& pattern, - UErrorCode &status); - - /** - * Constructs a new MessageFormat using the given pattern and locale. - * @param pattern Pattern used to construct object. - * @param newLocale The locale to use for formatting dates and numbers. - * @param status Input/output error code. If the - * pattern cannot be parsed, set to failure code. - * @stable ICU 2.0 - */ - MessageFormat(const UnicodeString& pattern, - const Locale& newLocale, - UErrorCode& status); - /** - * Constructs a new MessageFormat using the given pattern and locale. - * @param pattern Pattern used to construct object. - * @param newLocale The locale to use for formatting dates and numbers. - * @param parseError Struct to receive information on the position - * of an error within the pattern. - * @param status Input/output error code. If the - * pattern cannot be parsed, set to failure code. - * @stable ICU 2.0 - */ - MessageFormat(const UnicodeString& pattern, - const Locale& newLocale, - UParseError& parseError, - UErrorCode& status); - /** - * Constructs a new MessageFormat from an existing one. - * @stable ICU 2.0 - */ - MessageFormat(const MessageFormat&); - - /** - * Assignment operator. - * @stable ICU 2.0 - */ - const MessageFormat& operator=(const MessageFormat&); - - /** - * Destructor. - * @stable ICU 2.0 - */ - virtual ~MessageFormat(); - - /** - * Clones this Format object polymorphically. The caller owns the - * result and should delete it when done. - * @stable ICU 2.0 - */ - virtual Format* clone(void) const; - - /** - * Returns true if the given Format objects are semantically equal. - * Objects of different subclasses are considered unequal. - * @param other the object to be compared with. - * @return true if the given Format objects are semantically equal. - * @stable ICU 2.0 - */ - virtual UBool operator==(const Format& other) const; - - /** - * Sets the locale to be used for creating argument Format objects. - * @param theLocale the new locale value to be set. - * @stable ICU 2.0 - */ - virtual void setLocale(const Locale& theLocale); - - /** - * Gets the locale used for creating argument Format objects. - * format information. - * @return the locale of the object. - * @stable ICU 2.0 - */ - virtual const Locale& getLocale(void) const; - - /** - * Applies the given pattern string to this message format. - * - * @param pattern The pattern to be applied. - * @param status Input/output error code. If the - * pattern cannot be parsed, set to failure code. - * @stable ICU 2.0 - */ - virtual void applyPattern(const UnicodeString& pattern, - UErrorCode& status); - /** - * Applies the given pattern string to this message format. - * - * @param pattern The pattern to be applied. - * @param parseError Struct to receive information on the position - * of an error within the pattern. - * @param status Input/output error code. If the - * pattern cannot be parsed, set to failure code. - * @stable ICU 2.0 - */ - virtual void applyPattern(const UnicodeString& pattern, - UParseError& parseError, - UErrorCode& status); - - /** - * Sets the UMessagePatternApostropheMode and the pattern used by this message format. - * Parses the pattern and caches Format objects for simple argument types. - * Patterns and their interpretation are specified in the - * class description. - *

- * This method is best used only once on a given object to avoid confusion about the mode, - * and after constructing the object with an empty pattern string to minimize overhead. - * - * @param pattern The pattern to be applied. - * @param aposMode The new apostrophe mode. - * @param parseError Struct to receive information on the position - * of an error within the pattern. - * Can be NULL. - * @param status Input/output error code. If the - * pattern cannot be parsed, set to failure code. - * @stable ICU 4.8 - */ - virtual void applyPattern(const UnicodeString& pattern, - UMessagePatternApostropheMode aposMode, - UParseError* parseError, - UErrorCode& status); - - /** - * @return this instance's UMessagePatternApostropheMode. - * @stable ICU 4.8 - */ - UMessagePatternApostropheMode getApostropheMode() const { - return msgPattern.getApostropheMode(); - } - - /** - * Returns a pattern that can be used to recreate this object. - * - * @param appendTo Output parameter to receive the pattern. - * Result is appended to existing contents. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - virtual UnicodeString& toPattern(UnicodeString& appendTo) const; - - /** - * Sets subformats. - * See the class description about format numbering. - * The caller should not delete the Format objects after this call. - * The array formatsToAdopt is not itself adopted. Its - * ownership is retained by the caller. If the call fails because - * memory cannot be allocated, then the formats will be deleted - * by this method, and this object will remain unchanged. - * - *

If this format uses named arguments, the new formats are discarded - * and this format remains unchanged. - * - * @stable ICU 2.0 - * @param formatsToAdopt the format to be adopted. - * @param count the size of the array. - */ - virtual void adoptFormats(Format** formatsToAdopt, int32_t count); - - /** - * Sets subformats. - * See the class description about format numbering. - * Each item in the array is cloned into the internal array. - * If the call fails because memory cannot be allocated, then this - * object will remain unchanged. - * - *

If this format uses named arguments, the new formats are discarded - * and this format remains unchanged. - * - * @stable ICU 2.0 - * @param newFormats the new format to be set. - * @param cnt the size of the array. - */ - virtual void setFormats(const Format** newFormats, int32_t cnt); - - - /** - * Sets one subformat. - * See the class description about format numbering. - * The caller should not delete the Format object after this call. - * If the number is over the number of formats already set, - * the item will be deleted and ignored. - * - *

If this format uses named arguments, the new format is discarded - * and this format remains unchanged. - * - * @stable ICU 2.0 - * @param formatNumber index of the subformat. - * @param formatToAdopt the format to be adopted. - */ - virtual void adoptFormat(int32_t formatNumber, Format* formatToAdopt); - - /** - * Sets one subformat. - * See the class description about format numbering. - * If the number is over the number of formats already set, - * the item will be ignored. - * @param formatNumber index of the subformat. - * @param format the format to be set. - * @stable ICU 2.0 - */ - virtual void setFormat(int32_t formatNumber, const Format& format); - - /** - * Gets format names. This function returns formatNames in StringEnumerations - * which can be used with getFormat() and setFormat() to export formattable - * array from current MessageFormat to another. It is the caller's responsibility - * to delete the returned formatNames. - * @param status output param set to success/failure code. - * @stable ICU 4.0 - */ - virtual StringEnumeration* getFormatNames(UErrorCode& status); - - /** - * Gets subformat pointer for given format name. - * This function supports both named and numbered - * arguments. If numbered, the formatName is the - * corresponding UnicodeStrings (e.g. "0", "1", "2"...). - * The returned Format object should not be deleted by the caller, - * nor should the ponter of other object . The pointer and its - * contents remain valid only until the next call to any method - * of this class is made with this object. - * @param formatName the name or number specifying a format - * @param status output param set to success/failure code. - * @stable ICU 4.0 - */ - virtual Format* getFormat(const UnicodeString& formatName, UErrorCode& status); - - /** - * Sets one subformat for given format name. - * See the class description about format name. - * This function supports both named and numbered - * arguments-- if numbered, the formatName is the - * corresponding UnicodeStrings (e.g. "0", "1", "2"...). - * If there is no matched formatName or wrong type, - * the item will be ignored. - * @param formatName Name of the subformat. - * @param format the format to be set. - * @param status output param set to success/failure code. - * @stable ICU 4.0 - */ - virtual void setFormat(const UnicodeString& formatName, const Format& format, UErrorCode& status); - - /** - * Sets one subformat for given format name. - * See the class description about format name. - * This function supports both named and numbered - * arguments-- if numbered, the formatName is the - * corresponding UnicodeStrings (e.g. "0", "1", "2"...). - * If there is no matched formatName or wrong type, - * the item will be ignored. - * The caller should not delete the Format object after this call. - * @param formatName Name of the subformat. - * @param formatToAdopt Format to be adopted. - * @param status output param set to success/failure code. - * @stable ICU 4.0 - */ - virtual void adoptFormat(const UnicodeString& formatName, Format* formatToAdopt, UErrorCode& status); - - /** - * Gets an array of subformats of this object. The returned array - * should not be deleted by the caller, nor should the pointers - * within the array. The array and its contents remain valid only - * until the next call to this format. See the class description - * about format numbering. - * - * @param count output parameter to receive the size of the array - * @return an array of count Format* objects, or NULL if out of - * memory. Any or all of the array elements may be NULL. - * @stable ICU 2.0 - */ - virtual const Format** getFormats(int32_t& count) const; - - - using Format::format; - - /** - * Formats the given array of arguments into a user-readable string. - * Does not take ownership of the Formattable* array or its contents. - * - *

If this format uses named arguments, appendTo is unchanged and - * status is set to U_ILLEGAL_ARGUMENT_ERROR. - * - * @param source An array of objects to be formatted. - * @param count The number of elements of 'source'. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param ignore Not used; inherited from base class API. - * @param status Input/output error code. If the - * pattern cannot be parsed, set to failure code. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - UnicodeString& format(const Formattable* source, - int32_t count, - UnicodeString& appendTo, - FieldPosition& ignore, - UErrorCode& status) const; - - /** - * Formats the given array of arguments into a user-readable string - * using the given pattern. - * - *

If this format uses named arguments, appendTo is unchanged and - * status is set to U_ILLEGAL_ARGUMENT_ERROR. - * - * @param pattern The pattern. - * @param arguments An array of objects to be formatted. - * @param count The number of elements of 'source'. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param status Input/output error code. If the - * pattern cannot be parsed, set to failure code. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - static UnicodeString& format(const UnicodeString& pattern, - const Formattable* arguments, - int32_t count, - UnicodeString& appendTo, - UErrorCode& status); - - /** - * Formats the given array of arguments into a user-readable - * string. The array must be stored within a single Formattable - * object of type kArray. If the Formattable object type is not of - * type kArray, then returns a failing UErrorCode. - * - *

If this format uses named arguments, appendTo is unchanged and - * status is set to U_ILLEGAL_ARGUMENT_ERROR. - * - * @param obj A Formattable of type kArray containing - * arguments to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status Input/output error code. If the - * pattern cannot be parsed, set to failure code. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - virtual UnicodeString& format(const Formattable& obj, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& status) const; - - /** - * Formats the given array of arguments into a user-defined argument name - * array. This function supports both named and numbered - * arguments-- if numbered, the formatName is the - * corresponding UnicodeStrings (e.g. "0", "1", "2"...). - * - * @param argumentNames argument name array - * @param arguments An array of objects to be formatted. - * @param count The number of elements of 'argumentNames' and - * arguments. The number of argumentNames and arguments - * must be the same. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param status Input/output error code. If the - * pattern cannot be parsed, set to failure code. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.0 - */ - UnicodeString& format(const UnicodeString* argumentNames, - const Formattable* arguments, - int32_t count, - UnicodeString& appendTo, - UErrorCode& status) const; - /** - * Parses the given string into an array of output arguments. - * - * @param source String to be parsed. - * @param pos On input, starting position for parse. On output, - * final position after parse. Unchanged if parse - * fails. - * @param count Output parameter to receive the number of arguments - * parsed. - * @return an array of parsed arguments. The caller owns both - * the array and its contents. - * @stable ICU 2.0 - */ - virtual Formattable* parse(const UnicodeString& source, - ParsePosition& pos, - int32_t& count) const; - - /** - * Parses the given string into an array of output arguments. - * - *

If this format uses named arguments, status is set to - * U_ARGUMENT_TYPE_MISMATCH. - * - * @param source String to be parsed. - * @param count Output param to receive size of returned array. - * @param status Input/output error code. If the - * pattern cannot be parsed, set to failure code. - * @return an array of parsed arguments. The caller owns both - * the array and its contents. Returns NULL if status is not U_ZERO_ERROR. - * - * @stable ICU 2.0 - */ - virtual Formattable* parse(const UnicodeString& source, - int32_t& count, - UErrorCode& status) const; - - /** - * Parses the given string into an array of output arguments - * stored within a single Formattable of type kArray. - * - * @param source The string to be parsed into an object. - * @param result Formattable to be set to the parse result. - * If parse fails, return contents are undefined. - * @param pos On input, starting position for parse. On output, - * final position after parse. Unchanged if parse - * fails. - * @stable ICU 2.0 - */ - virtual void parseObject(const UnicodeString& source, - Formattable& result, - ParsePosition& pos) const; - - /** - * Convert an 'apostrophe-friendly' pattern into a standard - * pattern. Standard patterns treat all apostrophes as - * quotes, which is problematic in some languages, e.g. - * French, where apostrophe is commonly used. This utility - * assumes that only an unpaired apostrophe immediately before - * a brace is a true quote. Other unpaired apostrophes are paired, - * and the resulting standard pattern string is returned. - * - *

Note it is not guaranteed that the returned pattern - * is indeed a valid pattern. The only effect is to convert - * between patterns having different quoting semantics. - * - * @param pattern the 'apostrophe-friendly' patttern to convert - * @param status Input/output error code. If the pattern - * cannot be parsed, the failure code is set. - * @return the standard equivalent of the original pattern - * @stable ICU 3.4 - */ - static UnicodeString autoQuoteApostrophe(const UnicodeString& pattern, - UErrorCode& status); - - - /** - * Returns true if this MessageFormat uses named arguments, - * and false otherwise. See class description. - * - * @return true if named arguments are used. - * @stable ICU 4.0 - */ - UBool usesNamedArguments() const; - - -#ifndef U_HIDE_INTERNAL_API - /** - * This API is for ICU internal use only. - * Please do not use it. - * - * Returns argument types count in the parsed pattern. - * Used to distinguish pattern "{0} d" and "d". - * - * @return The number of formattable types in the pattern - * @internal - */ - int32_t getArgTypeCount() const; -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. - * This method is to implement a simple version of RTTI, since not all - * C++ compilers support genuine RTTI. Polymorphic operator==() and - * clone() methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const; - - /** - * Return the class ID for this class. This is useful only for - * comparing to a return value from getDynamicClassID(). For example: - *

-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .      Derived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - -#ifndef U_HIDE_INTERNAL_API - /** - * Compares two Format objects. This is used for constructing the hash - * tables. - * - * @param left pointer to a Format object. Must not be NULL. - * @param right pointer to a Format object. Must not be NULL. - * - * @return whether the two objects are the same - * @internal - */ - static UBool equalFormats(const void* left, const void* right); -#endif /* U_HIDE_INTERNAL_API */ - -private: - - Locale fLocale; - MessagePattern msgPattern; - Format** formatAliases; // see getFormats - int32_t formatAliasesCapacity; - - MessageFormat(); // default constructor not implemented - - /** - * This provider helps defer instantiation of a PluralRules object - * until we actually need to select a keyword. - * For example, if the number matches an explicit-value selector like "=1" - * we do not need any PluralRules. - */ - class U_I18N_API PluralSelectorProvider : public PluralFormat::PluralSelector { - public: - PluralSelectorProvider(const MessageFormat &mf, UPluralType type); - virtual ~PluralSelectorProvider(); - virtual UnicodeString select(void *ctx, double number, UErrorCode& ec) const; - - void reset(); - private: - const MessageFormat &msgFormat; - PluralRules* rules; - UPluralType type; - }; - - /** - * A MessageFormat formats an array of arguments. Each argument - * has an expected type, based on the pattern. For example, if - * the pattern contains the subformat "{3,number,integer}", then - * we expect argument 3 to have type Formattable::kLong. This - * array needs to grow dynamically if the MessageFormat is - * modified. - */ - Formattable::Type* argTypes; - int32_t argTypeCount; - int32_t argTypeCapacity; - - /** - * TRUE if there are different argTypes for the same argument. - * This only matters when the MessageFormat is used in the plain C (umsg_xxx) API - * where the pattern argTypes determine how the va_arg list is read. - */ - UBool hasArgTypeConflicts; - - // Variable-size array management - UBool allocateArgTypes(int32_t capacity, UErrorCode& status); - - /** - * Default Format objects used when no format is specified and a - * numeric or date argument is formatted. These are volatile - * cache objects maintained only for performance. They do not - * participate in operator=(), copy constructor(), nor - * operator==(). - */ - NumberFormat* defaultNumberFormat; - DateFormat* defaultDateFormat; - - UHashtable* cachedFormatters; - UHashtable* customFormatArgStarts; - - PluralSelectorProvider pluralProvider; - PluralSelectorProvider ordinalProvider; - - /** - * Method to retrieve default formats (or NULL on failure). - * These are semantically const, but may modify *this. - */ - const NumberFormat* getDefaultNumberFormat(UErrorCode&) const; - const DateFormat* getDefaultDateFormat(UErrorCode&) const; - - /** - * Finds the word s, in the keyword list and returns the located index. - * @param s the keyword to be searched for. - * @param list the list of keywords to be searched with. - * @return the index of the list which matches the keyword s. - */ - static int32_t findKeyword( const UnicodeString& s, - const char16_t * const *list); - - /** - * Thin wrapper around the format(... AppendableWrapper ...) variant. - * Wraps the destination UnicodeString into an AppendableWrapper and - * supplies default values for some other parameters. - */ - UnicodeString& format(const Formattable* arguments, - const UnicodeString *argumentNames, - int32_t cnt, - UnicodeString& appendTo, - FieldPosition* pos, - UErrorCode& status) const; - - /** - * Formats the arguments and writes the result into the - * AppendableWrapper, updates the field position. - * - * @param msgStart Index to msgPattern part to start formatting from. - * @param plNumber NULL except when formatting a plural argument sub-message - * where a '#' is replaced by the format string for this number. - * @param arguments The formattable objects array. (Must not be NULL.) - * @param argumentNames NULL if numbered values are used. Otherwise the same - * length as "arguments", and each entry is the name of the - * corresponding argument in "arguments". - * @param cnt The length of arguments (and of argumentNames if that is not NULL). - * @param appendTo Output parameter to receive the result. - * The result string is appended to existing contents. - * @param pos Field position status. - * @param success The error code status. - */ - void format(int32_t msgStart, - const void *plNumber, - const Formattable* arguments, - const UnicodeString *argumentNames, - int32_t cnt, - AppendableWrapper& appendTo, - FieldPosition* pos, - UErrorCode& success) const; - - UnicodeString getArgName(int32_t partIndex); - - void setArgStartFormat(int32_t argStart, Format* formatter, UErrorCode& status); - - void setCustomArgStartFormat(int32_t argStart, Format* formatter, UErrorCode& status); - - int32_t nextTopLevelArgStart(int32_t partIndex) const; - - UBool argNameMatches(int32_t partIndex, const UnicodeString& argName, int32_t argNumber); - - void cacheExplicitFormats(UErrorCode& status); - - int32_t skipLeadingSpaces(UnicodeString& style); - - Format* createAppropriateFormat(UnicodeString& type, - UnicodeString& style, - Formattable::Type& formattableType, - UParseError& parseError, - UErrorCode& ec); - - const Formattable* getArgFromListByName(const Formattable* arguments, - const UnicodeString *argumentNames, - int32_t cnt, UnicodeString& name) const; - - Formattable* parse(int32_t msgStart, - const UnicodeString& source, - ParsePosition& pos, - int32_t& count, - UErrorCode& ec) const; - - FieldPosition* updateMetaData(AppendableWrapper& dest, int32_t prevLength, - FieldPosition* fp, const Formattable* argId) const; - - /** - * Finds the "other" sub-message. - * @param partIndex the index of the first PluralFormat argument style part. - * @return the "other" sub-message start part index. - */ - int32_t findOtherSubMessage(int32_t partIndex) const; - - /** - * Returns the ARG_START index of the first occurrence of the plural number in a sub-message. - * Returns -1 if it is a REPLACE_NUMBER. - * Returns 0 if there is neither. - */ - int32_t findFirstPluralNumberArg(int32_t msgStart, const UnicodeString &argName) const; - - Format* getCachedFormatter(int32_t argumentNumber) const; - - UnicodeString getLiteralStringUntilNextArgument(int32_t from) const; - - void copyObjects(const MessageFormat& that, UErrorCode& ec); - - void formatComplexSubMessage(int32_t msgStart, - const void *plNumber, - const Formattable* arguments, - const UnicodeString *argumentNames, - int32_t cnt, - AppendableWrapper& appendTo, - UErrorCode& success) const; - - /** - * Convenience method that ought to be in NumberFormat - */ - NumberFormat* createIntegerFormat(const Locale& locale, UErrorCode& status) const; - - /** - * Returns array of argument types in the parsed pattern - * for use in C API. Only for the use of umsg_vformat(). Not - * for public consumption. - * @param listCount Output parameter to receive the size of array - * @return The array of formattable types in the pattern - */ - const Formattable::Type* getArgTypeList(int32_t& listCount) const { - listCount = argTypeCount; - return argTypes; - } - - /** - * Resets the internal MessagePattern, and other associated caches. - */ - void resetPattern(); - - /** - * A DummyFormatter that we use solely to store a NULL value. UHash does - * not support storing NULL values. - */ - class U_I18N_API DummyFormat : public Format { - public: - virtual UBool operator==(const Format&) const; - virtual Format* clone() const; - virtual UnicodeString& format(const Formattable& obj, - UnicodeString& appendTo, - UErrorCode& status) const; - virtual UnicodeString& format(const Formattable&, - UnicodeString& appendTo, - FieldPosition&, - UErrorCode& status) const; - virtual UnicodeString& format(const Formattable& obj, - UnicodeString& appendTo, - FieldPositionIterator* posIter, - UErrorCode& status) const; - virtual void parseObject(const UnicodeString&, - Formattable&, - ParsePosition&) const; - }; - - friend class MessageFormatAdapter; // getFormatTypeList() access -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _MSGFMT -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/normalizer2.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/normalizer2.h deleted file mode 100644 index 0581f6bba1..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/normalizer2.h +++ /dev/null @@ -1,776 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2009-2013, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: normalizer2.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2009nov22 -* created by: Markus W. Scherer -*/ - -#ifndef __NORMALIZER2_H__ -#define __NORMALIZER2_H__ - -/** - * \file - * \brief C++ API: New API for Unicode Normalization. - */ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_NORMALIZATION - -#include "unicode/stringpiece.h" -#include "unicode/uniset.h" -#include "unicode/unistr.h" -#include "unicode/unorm2.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class ByteSink; - -/** - * Unicode normalization functionality for standard Unicode normalization or - * for using custom mapping tables. - * All instances of this class are unmodifiable/immutable. - * Instances returned by getInstance() are singletons that must not be deleted by the caller. - * The Normalizer2 class is not intended for public subclassing. - * - * The primary functions are to produce a normalized string and to detect whether - * a string is already normalized. - * The most commonly used normalization forms are those defined in - * http://www.unicode.org/unicode/reports/tr15/ - * However, this API supports additional normalization forms for specialized purposes. - * For example, NFKC_Casefold is provided via getInstance("nfkc_cf", COMPOSE) - * and can be used in implementations of UTS #46. - * - * Not only are the standard compose and decompose modes supplied, - * but additional modes are provided as documented in the Mode enum. - * - * Some of the functions in this class identify normalization boundaries. - * At a normalization boundary, the portions of the string - * before it and starting from it do not interact and can be handled independently. - * - * The spanQuickCheckYes() stops at a normalization boundary. - * When the goal is a normalized string, then the text before the boundary - * can be copied, and the remainder can be processed with normalizeSecondAndAppend(). - * - * The hasBoundaryBefore(), hasBoundaryAfter() and isInert() functions test whether - * a character is guaranteed to be at a normalization boundary, - * regardless of context. - * This is used for moving from one normalization boundary to the next - * or preceding boundary, and for performing iterative normalization. - * - * Iterative normalization is useful when only a small portion of a - * longer string needs to be processed. - * For example, in ICU, iterative normalization is used by the NormalizationTransliterator - * (to avoid replacing already-normalized text) and ucol_nextSortKeyPart() - * (to process only the substring for which sort key bytes are computed). - * - * The set of normalization boundaries returned by these functions may not be - * complete: There may be more boundaries that could be returned. - * Different functions may return different boundaries. - * @stable ICU 4.4 - */ -class U_COMMON_API Normalizer2 : public UObject { -public: - /** - * Destructor. - * @stable ICU 4.4 - */ - ~Normalizer2(); - - /** - * Returns a Normalizer2 instance for Unicode NFC normalization. - * Same as getInstance(NULL, "nfc", UNORM2_COMPOSE, errorCode). - * Returns an unmodifiable singleton instance. Do not delete it. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the requested Normalizer2, if successful - * @stable ICU 49 - */ - static const Normalizer2 * - getNFCInstance(UErrorCode &errorCode); - - /** - * Returns a Normalizer2 instance for Unicode NFD normalization. - * Same as getInstance(NULL, "nfc", UNORM2_DECOMPOSE, errorCode). - * Returns an unmodifiable singleton instance. Do not delete it. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the requested Normalizer2, if successful - * @stable ICU 49 - */ - static const Normalizer2 * - getNFDInstance(UErrorCode &errorCode); - - /** - * Returns a Normalizer2 instance for Unicode NFKC normalization. - * Same as getInstance(NULL, "nfkc", UNORM2_COMPOSE, errorCode). - * Returns an unmodifiable singleton instance. Do not delete it. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the requested Normalizer2, if successful - * @stable ICU 49 - */ - static const Normalizer2 * - getNFKCInstance(UErrorCode &errorCode); - - /** - * Returns a Normalizer2 instance for Unicode NFKD normalization. - * Same as getInstance(NULL, "nfkc", UNORM2_DECOMPOSE, errorCode). - * Returns an unmodifiable singleton instance. Do not delete it. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the requested Normalizer2, if successful - * @stable ICU 49 - */ - static const Normalizer2 * - getNFKDInstance(UErrorCode &errorCode); - - /** - * Returns a Normalizer2 instance for Unicode NFKC_Casefold normalization. - * Same as getInstance(NULL, "nfkc_cf", UNORM2_COMPOSE, errorCode). - * Returns an unmodifiable singleton instance. Do not delete it. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the requested Normalizer2, if successful - * @stable ICU 49 - */ - static const Normalizer2 * - getNFKCCasefoldInstance(UErrorCode &errorCode); - - /** - * Returns a Normalizer2 instance which uses the specified data file - * (packageName/name similar to ucnv_openPackage() and ures_open()/ResourceBundle) - * and which composes or decomposes text according to the specified mode. - * Returns an unmodifiable singleton instance. Do not delete it. - * - * Use packageName=NULL for data files that are part of ICU's own data. - * Use name="nfc" and UNORM2_COMPOSE/UNORM2_DECOMPOSE for Unicode standard NFC/NFD. - * Use name="nfkc" and UNORM2_COMPOSE/UNORM2_DECOMPOSE for Unicode standard NFKC/NFKD. - * Use name="nfkc_cf" and UNORM2_COMPOSE for Unicode standard NFKC_CF=NFKC_Casefold. - * - * @param packageName NULL for ICU built-in data, otherwise application data package name - * @param name "nfc" or "nfkc" or "nfkc_cf" or name of custom data file - * @param mode normalization mode (compose or decompose etc.) - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the requested Normalizer2, if successful - * @stable ICU 4.4 - */ - static const Normalizer2 * - getInstance(const char *packageName, - const char *name, - UNormalization2Mode mode, - UErrorCode &errorCode); - - /** - * Returns the normalized form of the source string. - * @param src source string - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return normalized src - * @stable ICU 4.4 - */ - UnicodeString - normalize(const UnicodeString &src, UErrorCode &errorCode) const { - UnicodeString result; - normalize(src, result, errorCode); - return result; - } - /** - * Writes the normalized form of the source string to the destination string - * (replacing its contents) and returns the destination string. - * The source and destination strings must be different objects. - * @param src source string - * @param dest destination string; its contents is replaced with normalized src - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return dest - * @stable ICU 4.4 - */ - virtual UnicodeString & - normalize(const UnicodeString &src, - UnicodeString &dest, - UErrorCode &errorCode) const = 0; - - /** - * Normalizes a UTF-8 string and optionally records how source substrings - * relate to changed and unchanged result substrings. - * - * Currently implemented completely only for "compose" modes, - * such as for NFC, NFKC, and NFKC_Casefold - * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS). - * Otherwise currently converts to & from UTF-16 and does not support edits. - * - * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. - * @param src Source UTF-8 string. - * @param sink A ByteSink to which the normalized UTF-8 result string is written. - * sink.Flush() is called at the end. - * @param edits Records edits for index mapping, working with styled text, - * and getting only changes (if any). - * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first unless - * options includes U_EDITS_NO_RESET. edits can be nullptr. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @stable ICU 60 - */ - virtual void - normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink, - Edits *edits, UErrorCode &errorCode) const; - - /** - * Appends the normalized form of the second string to the first string - * (merging them at the boundary) and returns the first string. - * The result is normalized if the first string was normalized. - * The first and second strings must be different objects. - * @param first string, should be normalized - * @param second string, will be normalized - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return first - * @stable ICU 4.4 - */ - virtual UnicodeString & - normalizeSecondAndAppend(UnicodeString &first, - const UnicodeString &second, - UErrorCode &errorCode) const = 0; - /** - * Appends the second string to the first string - * (merging them at the boundary) and returns the first string. - * The result is normalized if both the strings were normalized. - * The first and second strings must be different objects. - * @param first string, should be normalized - * @param second string, should be normalized - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return first - * @stable ICU 4.4 - */ - virtual UnicodeString & - append(UnicodeString &first, - const UnicodeString &second, - UErrorCode &errorCode) const = 0; - - /** - * Gets the decomposition mapping of c. - * Roughly equivalent to normalizing the String form of c - * on a UNORM2_DECOMPOSE Normalizer2 instance, but much faster, and except that this function - * returns FALSE and does not write a string - * if c does not have a decomposition mapping in this instance's data. - * This function is independent of the mode of the Normalizer2. - * @param c code point - * @param decomposition String object which will be set to c's - * decomposition mapping, if there is one. - * @return TRUE if c has a decomposition, otherwise FALSE - * @stable ICU 4.6 - */ - virtual UBool - getDecomposition(UChar32 c, UnicodeString &decomposition) const = 0; - - /** - * Gets the raw decomposition mapping of c. - * - * This is similar to the getDecomposition() method but returns the - * raw decomposition mapping as specified in UnicodeData.txt or - * (for custom data) in the mapping files processed by the gennorm2 tool. - * By contrast, getDecomposition() returns the processed, - * recursively-decomposed version of this mapping. - * - * When used on a standard NFKC Normalizer2 instance, - * getRawDecomposition() returns the Unicode Decomposition_Mapping (dm) property. - * - * When used on a standard NFC Normalizer2 instance, - * it returns the Decomposition_Mapping only if the Decomposition_Type (dt) is Canonical (Can); - * in this case, the result contains either one or two code points (=1..4 char16_ts). - * - * This function is independent of the mode of the Normalizer2. - * The default implementation returns FALSE. - * @param c code point - * @param decomposition String object which will be set to c's - * raw decomposition mapping, if there is one. - * @return TRUE if c has a decomposition, otherwise FALSE - * @stable ICU 49 - */ - virtual UBool - getRawDecomposition(UChar32 c, UnicodeString &decomposition) const; - - /** - * Performs pairwise composition of a & b and returns the composite if there is one. - * - * Returns a composite code point c only if c has a two-way mapping to a+b. - * In standard Unicode normalization, this means that - * c has a canonical decomposition to a+b - * and c does not have the Full_Composition_Exclusion property. - * - * This function is independent of the mode of the Normalizer2. - * The default implementation returns a negative value. - * @param a A (normalization starter) code point. - * @param b Another code point. - * @return The non-negative composite code point if there is one; otherwise a negative value. - * @stable ICU 49 - */ - virtual UChar32 - composePair(UChar32 a, UChar32 b) const; - - /** - * Gets the combining class of c. - * The default implementation returns 0 - * but all standard implementations return the Unicode Canonical_Combining_Class value. - * @param c code point - * @return c's combining class - * @stable ICU 49 - */ - virtual uint8_t - getCombiningClass(UChar32 c) const; - - /** - * Tests if the string is normalized. - * Internally, in cases where the quickCheck() method would return "maybe" - * (which is only possible for the two COMPOSE modes) this method - * resolves to "yes" or "no" to provide a definitive result, - * at the cost of doing more work in those cases. - * @param s input string - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return TRUE if s is normalized - * @stable ICU 4.4 - */ - virtual UBool - isNormalized(const UnicodeString &s, UErrorCode &errorCode) const = 0; - /** - * Tests if the UTF-8 string is normalized. - * Internally, in cases where the quickCheck() method would return "maybe" - * (which is only possible for the two COMPOSE modes) this method - * resolves to "yes" or "no" to provide a definitive result, - * at the cost of doing more work in those cases. - * - * This works for all normalization modes, - * but it is currently optimized for UTF-8 only for "compose" modes, - * such as for NFC, NFKC, and NFKC_Casefold - * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS). - * For other modes it currently converts to UTF-16 and calls isNormalized(). - * - * @param s UTF-8 input string - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return TRUE if s is normalized - * @stable ICU 60 - */ - virtual UBool - isNormalizedUTF8(StringPiece s, UErrorCode &errorCode) const; - - - /** - * Tests if the string is normalized. - * For the two COMPOSE modes, the result could be "maybe" in cases that - * would take a little more work to resolve definitively. - * Use spanQuickCheckYes() and normalizeSecondAndAppend() for a faster - * combination of quick check + normalization, to avoid - * re-checking the "yes" prefix. - * @param s input string - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return UNormalizationCheckResult - * @stable ICU 4.4 - */ - virtual UNormalizationCheckResult - quickCheck(const UnicodeString &s, UErrorCode &errorCode) const = 0; - - /** - * Returns the end of the normalized substring of the input string. - * In other words, with end=spanQuickCheckYes(s, ec); - * the substring UnicodeString(s, 0, end) - * will pass the quick check with a "yes" result. - * - * The returned end index is usually one or more characters before the - * "no" or "maybe" character: The end index is at a normalization boundary. - * (See the class documentation for more about normalization boundaries.) - * - * When the goal is a normalized string and most input strings are expected - * to be normalized already, then call this method, - * and if it returns a prefix shorter than the input string, - * copy that prefix and use normalizeSecondAndAppend() for the remainder. - * @param s input string - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return "yes" span end index - * @stable ICU 4.4 - */ - virtual int32_t - spanQuickCheckYes(const UnicodeString &s, UErrorCode &errorCode) const = 0; - - /** - * Tests if the character always has a normalization boundary before it, - * regardless of context. - * If true, then the character does not normalization-interact with - * preceding characters. - * In other words, a string containing this character can be normalized - * by processing portions before this character and starting from this - * character independently. - * This is used for iterative normalization. See the class documentation for details. - * @param c character to test - * @return TRUE if c has a normalization boundary before it - * @stable ICU 4.4 - */ - virtual UBool hasBoundaryBefore(UChar32 c) const = 0; - - /** - * Tests if the character always has a normalization boundary after it, - * regardless of context. - * If true, then the character does not normalization-interact with - * following characters. - * In other words, a string containing this character can be normalized - * by processing portions up to this character and after this - * character independently. - * This is used for iterative normalization. See the class documentation for details. - * Note that this operation may be significantly slower than hasBoundaryBefore(). - * @param c character to test - * @return TRUE if c has a normalization boundary after it - * @stable ICU 4.4 - */ - virtual UBool hasBoundaryAfter(UChar32 c) const = 0; - - /** - * Tests if the character is normalization-inert. - * If true, then the character does not change, nor normalization-interact with - * preceding or following characters. - * In other words, a string containing this character can be normalized - * by processing portions before this character and after this - * character independently. - * This is used for iterative normalization. See the class documentation for details. - * Note that this operation may be significantly slower than hasBoundaryBefore(). - * @param c character to test - * @return TRUE if c is normalization-inert - * @stable ICU 4.4 - */ - virtual UBool isInert(UChar32 c) const = 0; -}; - -/** - * Normalization filtered by a UnicodeSet. - * Normalizes portions of the text contained in the filter set and leaves - * portions not contained in the filter set unchanged. - * Filtering is done via UnicodeSet::span(..., USET_SPAN_SIMPLE). - * Not-in-the-filter text is treated as "is normalized" and "quick check yes". - * This class implements all of (and only) the Normalizer2 API. - * An instance of this class is unmodifiable/immutable but is constructed and - * must be destructed by the owner. - * @stable ICU 4.4 - */ -class U_COMMON_API FilteredNormalizer2 : public Normalizer2 { -public: - /** - * Constructs a filtered normalizer wrapping any Normalizer2 instance - * and a filter set. - * Both are aliased and must not be modified or deleted while this object - * is used. - * The filter set should be frozen; otherwise the performance will suffer greatly. - * @param n2 wrapped Normalizer2 instance - * @param filterSet UnicodeSet which determines the characters to be normalized - * @stable ICU 4.4 - */ - FilteredNormalizer2(const Normalizer2 &n2, const UnicodeSet &filterSet) : - norm2(n2), set(filterSet) {} - - /** - * Destructor. - * @stable ICU 4.4 - */ - ~FilteredNormalizer2(); - - /** - * Writes the normalized form of the source string to the destination string - * (replacing its contents) and returns the destination string. - * The source and destination strings must be different objects. - * @param src source string - * @param dest destination string; its contents is replaced with normalized src - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return dest - * @stable ICU 4.4 - */ - virtual UnicodeString & - normalize(const UnicodeString &src, - UnicodeString &dest, - UErrorCode &errorCode) const U_OVERRIDE; - - /** - * Normalizes a UTF-8 string and optionally records how source substrings - * relate to changed and unchanged result substrings. - * - * Currently implemented completely only for "compose" modes, - * such as for NFC, NFKC, and NFKC_Casefold - * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS). - * Otherwise currently converts to & from UTF-16 and does not support edits. - * - * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. - * @param src Source UTF-8 string. - * @param sink A ByteSink to which the normalized UTF-8 result string is written. - * sink.Flush() is called at the end. - * @param edits Records edits for index mapping, working with styled text, - * and getting only changes (if any). - * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first unless - * options includes U_EDITS_NO_RESET. edits can be nullptr. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @stable ICU 60 - */ - virtual void - normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink, - Edits *edits, UErrorCode &errorCode) const U_OVERRIDE; - - /** - * Appends the normalized form of the second string to the first string - * (merging them at the boundary) and returns the first string. - * The result is normalized if the first string was normalized. - * The first and second strings must be different objects. - * @param first string, should be normalized - * @param second string, will be normalized - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return first - * @stable ICU 4.4 - */ - virtual UnicodeString & - normalizeSecondAndAppend(UnicodeString &first, - const UnicodeString &second, - UErrorCode &errorCode) const U_OVERRIDE; - /** - * Appends the second string to the first string - * (merging them at the boundary) and returns the first string. - * The result is normalized if both the strings were normalized. - * The first and second strings must be different objects. - * @param first string, should be normalized - * @param second string, should be normalized - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return first - * @stable ICU 4.4 - */ - virtual UnicodeString & - append(UnicodeString &first, - const UnicodeString &second, - UErrorCode &errorCode) const U_OVERRIDE; - - /** - * Gets the decomposition mapping of c. - * For details see the base class documentation. - * - * This function is independent of the mode of the Normalizer2. - * @param c code point - * @param decomposition String object which will be set to c's - * decomposition mapping, if there is one. - * @return TRUE if c has a decomposition, otherwise FALSE - * @stable ICU 4.6 - */ - virtual UBool - getDecomposition(UChar32 c, UnicodeString &decomposition) const U_OVERRIDE; - - /** - * Gets the raw decomposition mapping of c. - * For details see the base class documentation. - * - * This function is independent of the mode of the Normalizer2. - * @param c code point - * @param decomposition String object which will be set to c's - * raw decomposition mapping, if there is one. - * @return TRUE if c has a decomposition, otherwise FALSE - * @stable ICU 49 - */ - virtual UBool - getRawDecomposition(UChar32 c, UnicodeString &decomposition) const U_OVERRIDE; - - /** - * Performs pairwise composition of a & b and returns the composite if there is one. - * For details see the base class documentation. - * - * This function is independent of the mode of the Normalizer2. - * @param a A (normalization starter) code point. - * @param b Another code point. - * @return The non-negative composite code point if there is one; otherwise a negative value. - * @stable ICU 49 - */ - virtual UChar32 - composePair(UChar32 a, UChar32 b) const U_OVERRIDE; - - /** - * Gets the combining class of c. - * The default implementation returns 0 - * but all standard implementations return the Unicode Canonical_Combining_Class value. - * @param c code point - * @return c's combining class - * @stable ICU 49 - */ - virtual uint8_t - getCombiningClass(UChar32 c) const U_OVERRIDE; - - /** - * Tests if the string is normalized. - * For details see the Normalizer2 base class documentation. - * @param s input string - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return TRUE if s is normalized - * @stable ICU 4.4 - */ - virtual UBool - isNormalized(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE; - /** - * Tests if the UTF-8 string is normalized. - * Internally, in cases where the quickCheck() method would return "maybe" - * (which is only possible for the two COMPOSE modes) this method - * resolves to "yes" or "no" to provide a definitive result, - * at the cost of doing more work in those cases. - * - * This works for all normalization modes, - * but it is currently optimized for UTF-8 only for "compose" modes, - * such as for NFC, NFKC, and NFKC_Casefold - * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS). - * For other modes it currently converts to UTF-16 and calls isNormalized(). - * - * @param s UTF-8 input string - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return TRUE if s is normalized - * @stable ICU 60 - */ - virtual UBool - isNormalizedUTF8(StringPiece s, UErrorCode &errorCode) const U_OVERRIDE; - /** - * Tests if the string is normalized. - * For details see the Normalizer2 base class documentation. - * @param s input string - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return UNormalizationCheckResult - * @stable ICU 4.4 - */ - virtual UNormalizationCheckResult - quickCheck(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE; - /** - * Returns the end of the normalized substring of the input string. - * For details see the Normalizer2 base class documentation. - * @param s input string - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return "yes" span end index - * @stable ICU 4.4 - */ - virtual int32_t - spanQuickCheckYes(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE; - - /** - * Tests if the character always has a normalization boundary before it, - * regardless of context. - * For details see the Normalizer2 base class documentation. - * @param c character to test - * @return TRUE if c has a normalization boundary before it - * @stable ICU 4.4 - */ - virtual UBool hasBoundaryBefore(UChar32 c) const U_OVERRIDE; - - /** - * Tests if the character always has a normalization boundary after it, - * regardless of context. - * For details see the Normalizer2 base class documentation. - * @param c character to test - * @return TRUE if c has a normalization boundary after it - * @stable ICU 4.4 - */ - virtual UBool hasBoundaryAfter(UChar32 c) const U_OVERRIDE; - - /** - * Tests if the character is normalization-inert. - * For details see the Normalizer2 base class documentation. - * @param c character to test - * @return TRUE if c is normalization-inert - * @stable ICU 4.4 - */ - virtual UBool isInert(UChar32 c) const U_OVERRIDE; -private: - UnicodeString & - normalize(const UnicodeString &src, - UnicodeString &dest, - USetSpanCondition spanCondition, - UErrorCode &errorCode) const; - - void - normalizeUTF8(uint32_t options, const char *src, int32_t length, - ByteSink &sink, Edits *edits, - USetSpanCondition spanCondition, - UErrorCode &errorCode) const; - - UnicodeString & - normalizeSecondAndAppend(UnicodeString &first, - const UnicodeString &second, - UBool doNormalize, - UErrorCode &errorCode) const; - - const Normalizer2 &norm2; - const UnicodeSet &set; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // !UCONFIG_NO_NORMALIZATION -#endif // __NORMALIZER2_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/normlzr.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/normlzr.h deleted file mode 100644 index eceb6e6b9d..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/normlzr.h +++ /dev/null @@ -1,811 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************** - * COPYRIGHT: - * Copyright (c) 1996-2015, International Business Machines Corporation and - * others. All Rights Reserved. - ******************************************************************** - */ - -#ifndef NORMLZR_H -#define NORMLZR_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Unicode Normalization - */ - -#if !UCONFIG_NO_NORMALIZATION - -#include "unicode/chariter.h" -#include "unicode/normalizer2.h" -#include "unicode/unistr.h" -#include "unicode/unorm.h" -#include "unicode/uobject.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN -/** - * Old Unicode normalization API. - * - * This API has been replaced by the Normalizer2 class and is only available - * for backward compatibility. This class simply delegates to the Normalizer2 class. - * There is one exception: The new API does not provide a replacement for Normalizer::compare(). - * - * The Normalizer class supports the standard normalization forms described in - * - * Unicode Standard Annex #15: Unicode Normalization Forms. - * - * The Normalizer class consists of two parts: - * - static functions that normalize strings or test if strings are normalized - * - a Normalizer object is an iterator that takes any kind of text and - * provides iteration over its normalized form - * - * The Normalizer class is not suitable for subclassing. - * - * For basic information about normalization forms and details about the C API - * please see the documentation in unorm.h. - * - * The iterator API with the Normalizer constructors and the non-static functions - * use a CharacterIterator as input. It is possible to pass a string which - * is then internally wrapped in a CharacterIterator. - * The input text is not normalized all at once, but incrementally where needed - * (providing efficient random access). - * This allows to pass in a large text but spend only a small amount of time - * normalizing a small part of that text. - * However, if the entire text is normalized, then the iterator will be - * slower than normalizing the entire text at once and iterating over the result. - * A possible use of the Normalizer iterator is also to report an index into the - * original text that is close to where the normalized characters come from. - * - * Important: The iterator API was cleaned up significantly for ICU 2.0. - * The earlier implementation reported the getIndex() inconsistently, - * and previous() could not be used after setIndex(), next(), first(), and current(). - * - * Normalizer allows to start normalizing from anywhere in the input text by - * calling setIndexOnly(), first(), or last(). - * Without calling any of these, the iterator will start at the beginning of the text. - * - * At any time, next() returns the next normalized code point (UChar32), - * with post-increment semantics (like CharacterIterator::next32PostInc()). - * previous() returns the previous normalized code point (UChar32), - * with pre-decrement semantics (like CharacterIterator::previous32()). - * - * current() returns the current code point - * (respectively the one at the newly set index) without moving - * the getIndex(). Note that if the text at the current position - * needs to be normalized, then these functions will do that. - * (This is why current() is not const.) - * It is more efficient to call setIndexOnly() instead, which does not - * normalize. - * - * getIndex() always refers to the position in the input text where the normalized - * code points are returned from. It does not always change with each returned - * code point. - * The code point that is returned from any of the functions - * corresponds to text at or after getIndex(), according to the - * function's iteration semantics (post-increment or pre-decrement). - * - * next() returns a code point from at or after the getIndex() - * from before the next() call. After the next() call, the getIndex() - * might have moved to where the next code point will be returned from - * (from a next() or current() call). - * This is semantically equivalent to array access with array[index++] - * (post-increment semantics). - * - * previous() returns a code point from at or after the getIndex() - * from after the previous() call. - * This is semantically equivalent to array access with array[--index] - * (pre-decrement semantics). - * - * Internally, the Normalizer iterator normalizes a small piece of text - * starting at the getIndex() and ending at a following "safe" index. - * The normalized results is stored in an internal string buffer, and - * the code points are iterated from there. - * With multiple iteration calls, this is repeated until the next piece - * of text needs to be normalized, and the getIndex() needs to be moved. - * - * The following "safe" index, the internal buffer, and the secondary - * iteration index into that buffer are not exposed on the API. - * This also means that it is currently not practical to return to - * a particular, arbitrary position in the text because one would need to - * know, and be able to set, in addition to the getIndex(), at least also the - * current index into the internal buffer. - * It is currently only possible to observe when getIndex() changes - * (with careful consideration of the iteration semantics), - * at which time the internal index will be 0. - * For example, if getIndex() is different after next() than before it, - * then the internal index is 0 and one can return to this getIndex() - * later with setIndexOnly(). - * - * Note: While the setIndex() and getIndex() refer to indices in the - * underlying Unicode input text, the next() and previous() methods - * iterate through characters in the normalized output. - * This means that there is not necessarily a one-to-one correspondence - * between characters returned by next() and previous() and the indices - * passed to and returned from setIndex() and getIndex(). - * It is for this reason that Normalizer does not implement the CharacterIterator interface. - * - * @author Laura Werner, Mark Davis, Markus Scherer - * @stable ICU 2.0 - */ -class U_COMMON_API Normalizer : public UObject { -public: -#ifndef U_HIDE_DEPRECATED_API - /** - * If DONE is returned from an iteration function that returns a code point, - * then there are no more normalization results available. - * @deprecated ICU 56 Use Normalizer2 instead. - */ - enum { - DONE=0xffff - }; - - // Constructors - - /** - * Creates a new Normalizer object for iterating over the - * normalized form of a given string. - *

- * @param str The string to be normalized. The normalization - * will start at the beginning of the string. - * - * @param mode The normalization mode. - * @deprecated ICU 56 Use Normalizer2 instead. - */ - Normalizer(const UnicodeString& str, UNormalizationMode mode); - - /** - * Creates a new Normalizer object for iterating over the - * normalized form of a given string. - *

- * @param str The string to be normalized. The normalization - * will start at the beginning of the string. - * - * @param length Length of the string, or -1 if NUL-terminated. - * @param mode The normalization mode. - * @deprecated ICU 56 Use Normalizer2 instead. - */ - Normalizer(ConstChar16Ptr str, int32_t length, UNormalizationMode mode); - - /** - * Creates a new Normalizer object for iterating over the - * normalized form of the given text. - *

- * @param iter The input text to be normalized. The normalization - * will start at the beginning of the string. - * - * @param mode The normalization mode. - * @deprecated ICU 56 Use Normalizer2 instead. - */ - Normalizer(const CharacterIterator& iter, UNormalizationMode mode); -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Copy constructor. - * @param copy The object to be copied. - * @deprecated ICU 56 Use Normalizer2 instead. - */ - Normalizer(const Normalizer& copy); - - /** - * Destructor - * @deprecated ICU 56 Use Normalizer2 instead. - */ - virtual ~Normalizer(); - - - //------------------------------------------------------------------------- - // Static utility methods - //------------------------------------------------------------------------- - -#ifndef U_HIDE_DEPRECATED_API - /** - * Normalizes a UnicodeString according to the specified normalization mode. - * This is a wrapper for unorm_normalize(), using UnicodeString's. - * - * The options parameter specifies which optional - * Normalizer features are to be enabled for this operation. - * - * @param source the input string to be normalized. - * @param mode the normalization mode - * @param options the optional features to be enabled (0 for no options) - * @param result The normalized string (on output). - * @param status The error code. - * @deprecated ICU 56 Use Normalizer2 instead. - */ - static void U_EXPORT2 normalize(const UnicodeString& source, - UNormalizationMode mode, int32_t options, - UnicodeString& result, - UErrorCode &status); - - /** - * Compose a UnicodeString. - * This is equivalent to normalize() with mode UNORM_NFC or UNORM_NFKC. - * This is a wrapper for unorm_normalize(), using UnicodeString's. - * - * The options parameter specifies which optional - * Normalizer features are to be enabled for this operation. - * - * @param source the string to be composed. - * @param compat Perform compatibility decomposition before composition. - * If this argument is FALSE, only canonical - * decomposition will be performed. - * @param options the optional features to be enabled (0 for no options) - * @param result The composed string (on output). - * @param status The error code. - * @deprecated ICU 56 Use Normalizer2 instead. - */ - static void U_EXPORT2 compose(const UnicodeString& source, - UBool compat, int32_t options, - UnicodeString& result, - UErrorCode &status); - - /** - * Static method to decompose a UnicodeString. - * This is equivalent to normalize() with mode UNORM_NFD or UNORM_NFKD. - * This is a wrapper for unorm_normalize(), using UnicodeString's. - * - * The options parameter specifies which optional - * Normalizer features are to be enabled for this operation. - * - * @param source the string to be decomposed. - * @param compat Perform compatibility decomposition. - * If this argument is FALSE, only canonical - * decomposition will be performed. - * @param options the optional features to be enabled (0 for no options) - * @param result The decomposed string (on output). - * @param status The error code. - * @deprecated ICU 56 Use Normalizer2 instead. - */ - static void U_EXPORT2 decompose(const UnicodeString& source, - UBool compat, int32_t options, - UnicodeString& result, - UErrorCode &status); - - /** - * Performing quick check on a string, to quickly determine if the string is - * in a particular normalization format. - * This is a wrapper for unorm_quickCheck(), using a UnicodeString. - * - * Three types of result can be returned UNORM_YES, UNORM_NO or - * UNORM_MAYBE. Result UNORM_YES indicates that the argument - * string is in the desired normalized format, UNORM_NO determines that - * argument string is not in the desired normalized format. A - * UNORM_MAYBE result indicates that a more thorough check is required, - * the user may have to put the string in its normalized form and compare the - * results. - * @param source string for determining if it is in a normalized format - * @param mode normalization format - * @param status A reference to a UErrorCode to receive any errors - * @return UNORM_YES, UNORM_NO or UNORM_MAYBE - * - * @see isNormalized - * @deprecated ICU 56 Use Normalizer2 instead. - */ - static inline UNormalizationCheckResult - quickCheck(const UnicodeString &source, UNormalizationMode mode, UErrorCode &status); - - /** - * Performing quick check on a string; same as the other version of quickCheck - * but takes an extra options parameter like most normalization functions. - * - * @param source string for determining if it is in a normalized format - * @param mode normalization format - * @param options the optional features to be enabled (0 for no options) - * @param status A reference to a UErrorCode to receive any errors - * @return UNORM_YES, UNORM_NO or UNORM_MAYBE - * - * @see isNormalized - * @deprecated ICU 56 Use Normalizer2 instead. - */ - static UNormalizationCheckResult - quickCheck(const UnicodeString &source, UNormalizationMode mode, int32_t options, UErrorCode &status); - - /** - * Test if a string is in a given normalization form. - * This is semantically equivalent to source.equals(normalize(source, mode)) . - * - * Unlike unorm_quickCheck(), this function returns a definitive result, - * never a "maybe". - * For NFD, NFKD, and FCD, both functions work exactly the same. - * For NFC and NFKC where quickCheck may return "maybe", this function will - * perform further tests to arrive at a TRUE/FALSE result. - * - * @param src String that is to be tested if it is in a normalization format. - * @param mode Which normalization form to test for. - * @param errorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return Boolean value indicating whether the source string is in the - * "mode" normalization form. - * - * @see quickCheck - * @deprecated ICU 56 Use Normalizer2 instead. - */ - static inline UBool - isNormalized(const UnicodeString &src, UNormalizationMode mode, UErrorCode &errorCode); - - /** - * Test if a string is in a given normalization form; same as the other version of isNormalized - * but takes an extra options parameter like most normalization functions. - * - * @param src String that is to be tested if it is in a normalization format. - * @param mode Which normalization form to test for. - * @param options the optional features to be enabled (0 for no options) - * @param errorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return Boolean value indicating whether the source string is in the - * "mode" normalization form. - * - * @see quickCheck - * @deprecated ICU 56 Use Normalizer2 instead. - */ - static UBool - isNormalized(const UnicodeString &src, UNormalizationMode mode, int32_t options, UErrorCode &errorCode); - - /** - * Concatenate normalized strings, making sure that the result is normalized as well. - * - * If both the left and the right strings are in - * the normalization form according to "mode/options", - * then the result will be - * - * \code - * dest=normalize(left+right, mode, options) - * \endcode - * - * For details see unorm_concatenate in unorm.h. - * - * @param left Left source string. - * @param right Right source string. - * @param result The output string. - * @param mode The normalization mode. - * @param options A bit set of normalization options. - * @param errorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return result - * - * @see unorm_concatenate - * @see normalize - * @see unorm_next - * @see unorm_previous - * - * @deprecated ICU 56 Use Normalizer2 instead. - */ - static UnicodeString & - U_EXPORT2 concatenate(const UnicodeString &left, const UnicodeString &right, - UnicodeString &result, - UNormalizationMode mode, int32_t options, - UErrorCode &errorCode); -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Compare two strings for canonical equivalence. - * Further options include case-insensitive comparison and - * code point order (as opposed to code unit order). - * - * Canonical equivalence between two strings is defined as their normalized - * forms (NFD or NFC) being identical. - * This function compares strings incrementally instead of normalizing - * (and optionally case-folding) both strings entirely, - * improving performance significantly. - * - * Bulk normalization is only necessary if the strings do not fulfill the FCD - * conditions. Only in this case, and only if the strings are relatively long, - * is memory allocated temporarily. - * For FCD strings and short non-FCD strings there is no memory allocation. - * - * Semantically, this is equivalent to - * strcmp[CodePointOrder](NFD(foldCase(s1)), NFD(foldCase(s2))) - * where code point order and foldCase are all optional. - * - * UAX 21 2.5 Caseless Matching specifies that for a canonical caseless match - * the case folding must be performed first, then the normalization. - * - * @param s1 First source string. - * @param s2 Second source string. - * - * @param options A bit set of options: - * - U_FOLD_CASE_DEFAULT or 0 is used for default options: - * Case-sensitive comparison in code unit order, and the input strings - * are quick-checked for FCD. - * - * - UNORM_INPUT_IS_FCD - * Set if the caller knows that both s1 and s2 fulfill the FCD conditions. - * If not set, the function will quickCheck for FCD - * and normalize if necessary. - * - * - U_COMPARE_CODE_POINT_ORDER - * Set to choose code point order instead of code unit order - * (see u_strCompare for details). - * - * - U_COMPARE_IGNORE_CASE - * Set to compare strings case-insensitively using case folding, - * instead of case-sensitively. - * If set, then the following case folding options are used. - * - * - Options as used with case-insensitive comparisons, currently: - * - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I - * (see u_strCaseCompare for details) - * - * - regular normalization options shifted left by UNORM_COMPARE_NORM_OPTIONS_SHIFT - * - * @param errorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return <0 or 0 or >0 as usual for string comparisons - * - * @see unorm_compare - * @see normalize - * @see UNORM_FCD - * @see u_strCompare - * @see u_strCaseCompare - * - * @stable ICU 2.2 - */ - static inline int32_t - compare(const UnicodeString &s1, const UnicodeString &s2, - uint32_t options, - UErrorCode &errorCode); - -#ifndef U_HIDE_DEPRECATED_API - //------------------------------------------------------------------------- - // Iteration API - //------------------------------------------------------------------------- - - /** - * Return the current character in the normalized text. - * current() may need to normalize some text at getIndex(). - * The getIndex() is not changed. - * - * @return the current normalized code point - * @deprecated ICU 56 Use Normalizer2 instead. - */ - UChar32 current(void); - - /** - * Return the first character in the normalized text. - * This is equivalent to setIndexOnly(startIndex()) followed by next(). - * (Post-increment semantics.) - * - * @return the first normalized code point - * @deprecated ICU 56 Use Normalizer2 instead. - */ - UChar32 first(void); - - /** - * Return the last character in the normalized text. - * This is equivalent to setIndexOnly(endIndex()) followed by previous(). - * (Pre-decrement semantics.) - * - * @return the last normalized code point - * @deprecated ICU 56 Use Normalizer2 instead. - */ - UChar32 last(void); - - /** - * Return the next character in the normalized text. - * (Post-increment semantics.) - * If the end of the text has already been reached, DONE is returned. - * The DONE value could be confused with a U+FFFF non-character code point - * in the text. If this is possible, you can test getIndex()startIndex() || first()!=DONE). (Calling first() will change - * the iterator state!) - * - * The C API unorm_previous() is more efficient and does not have this ambiguity. - * - * @return the previous normalized code point - * @deprecated ICU 56 Use Normalizer2 instead. - */ - UChar32 previous(void); - - /** - * Set the iteration position in the input text that is being normalized, - * without any immediate normalization. - * After setIndexOnly(), getIndex() will return the same index that is - * specified here. - * - * @param index the desired index in the input text. - * @deprecated ICU 56 Use Normalizer2 instead. - */ - void setIndexOnly(int32_t index); - - /** - * Reset the index to the beginning of the text. - * This is equivalent to setIndexOnly(startIndex)). - * @deprecated ICU 56 Use Normalizer2 instead. - */ - void reset(void); - - /** - * Retrieve the current iteration position in the input text that is - * being normalized. - * - * A following call to next() will return a normalized code point from - * the input text at or after this index. - * - * After a call to previous(), getIndex() will point at or before the - * position in the input text where the normalized code point - * was returned from with previous(). - * - * @return the current index in the input text - * @deprecated ICU 56 Use Normalizer2 instead. - */ - int32_t getIndex(void) const; - - /** - * Retrieve the index of the start of the input text. This is the begin index - * of the CharacterIterator or the start (i.e. index 0) of the string - * over which this Normalizer is iterating. - * - * @return the smallest index in the input text where the Normalizer operates - * @deprecated ICU 56 Use Normalizer2 instead. - */ - int32_t startIndex(void) const; - - /** - * Retrieve the index of the end of the input text. This is the end index - * of the CharacterIterator or the length of the string - * over which this Normalizer is iterating. - * This end index is exclusive, i.e., the Normalizer operates only on characters - * before this index. - * - * @return the first index in the input text where the Normalizer does not operate - * @deprecated ICU 56 Use Normalizer2 instead. - */ - int32_t endIndex(void) const; - - /** - * Returns TRUE when both iterators refer to the same character in the same - * input text. - * - * @param that a Normalizer object to compare this one to - * @return comparison result - * @deprecated ICU 56 Use Normalizer2 instead. - */ - UBool operator==(const Normalizer& that) const; - - /** - * Returns FALSE when both iterators refer to the same character in the same - * input text. - * - * @param that a Normalizer object to compare this one to - * @return comparison result - * @deprecated ICU 56 Use Normalizer2 instead. - */ - inline UBool operator!=(const Normalizer& that) const; - - /** - * Returns a pointer to a new Normalizer that is a clone of this one. - * The caller is responsible for deleting the new clone. - * @return a pointer to a new Normalizer - * @deprecated ICU 56 Use Normalizer2 instead. - */ - Normalizer* clone(void) const; - - /** - * Generates a hash code for this iterator. - * - * @return the hash code - * @deprecated ICU 56 Use Normalizer2 instead. - */ - int32_t hashCode(void) const; - - //------------------------------------------------------------------------- - // Property access methods - //------------------------------------------------------------------------- - - /** - * Set the normalization mode for this object. - *

- * Note:If the normalization mode is changed while iterating - * over a string, calls to {@link #next() } and {@link #previous() } may - * return previously buffers characters in the old normalization mode - * until the iteration is able to re-sync at the next base character. - * It is safest to call {@link #setIndexOnly }, {@link #reset() }, - * {@link #setText }, {@link #first() }, - * {@link #last() }, etc. after calling setMode. - *

- * @param newMode the new mode for this Normalizer. - * @see #getUMode - * @deprecated ICU 56 Use Normalizer2 instead. - */ - void setMode(UNormalizationMode newMode); - - /** - * Return the normalization mode for this object. - * - * This is an unusual name because there used to be a getMode() that - * returned a different type. - * - * @return the mode for this Normalizer - * @see #setMode - * @deprecated ICU 56 Use Normalizer2 instead. - */ - UNormalizationMode getUMode(void) const; - - /** - * Set options that affect this Normalizer's operation. - * Options do not change the basic composition or decomposition operation - * that is being performed, but they control whether - * certain optional portions of the operation are done. - * Currently the only available option is obsolete. - * - * It is possible to specify multiple options that are all turned on or off. - * - * @param option the option(s) whose value is/are to be set. - * @param value the new setting for the option. Use TRUE to - * turn the option(s) on and FALSE to turn it/them off. - * - * @see #getOption - * @deprecated ICU 56 Use Normalizer2 instead. - */ - void setOption(int32_t option, - UBool value); - - /** - * Determine whether an option is turned on or off. - * If multiple options are specified, then the result is TRUE if any - * of them are set. - *

- * @param option the option(s) that are to be checked - * @return TRUE if any of the option(s) are set - * @see #setOption - * @deprecated ICU 56 Use Normalizer2 instead. - */ - UBool getOption(int32_t option) const; - - /** - * Set the input text over which this Normalizer will iterate. - * The iteration position is set to the beginning. - * - * @param newText a string that replaces the current input text - * @param status a UErrorCode - * @deprecated ICU 56 Use Normalizer2 instead. - */ - void setText(const UnicodeString& newText, - UErrorCode &status); - - /** - * Set the input text over which this Normalizer will iterate. - * The iteration position is set to the beginning. - * - * @param newText a CharacterIterator object that replaces the current input text - * @param status a UErrorCode - * @deprecated ICU 56 Use Normalizer2 instead. - */ - void setText(const CharacterIterator& newText, - UErrorCode &status); - - /** - * Set the input text over which this Normalizer will iterate. - * The iteration position is set to the beginning. - * - * @param newText a string that replaces the current input text - * @param length the length of the string, or -1 if NUL-terminated - * @param status a UErrorCode - * @deprecated ICU 56 Use Normalizer2 instead. - */ - void setText(ConstChar16Ptr newText, - int32_t length, - UErrorCode &status); - /** - * Copies the input text into the UnicodeString argument. - * - * @param result Receives a copy of the text under iteration. - * @deprecated ICU 56 Use Normalizer2 instead. - */ - void getText(UnicodeString& result); - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * @returns a UClassID for this class. - * @deprecated ICU 56 Use Normalizer2 instead. - */ - static UClassID U_EXPORT2 getStaticClassID(); -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * @return a UClassID for the actual class. - * @deprecated ICU 56 Use Normalizer2 instead. - */ - virtual UClassID getDynamicClassID() const; - -private: - //------------------------------------------------------------------------- - // Private functions - //------------------------------------------------------------------------- - - Normalizer(); // default constructor not implemented - Normalizer &operator=(const Normalizer &that); // assignment operator not implemented - - // Private utility methods for iteration - // For documentation, see the source code - UBool nextNormalize(); - UBool previousNormalize(); - - void init(); - void clearBuffer(void); - - //------------------------------------------------------------------------- - // Private data - //------------------------------------------------------------------------- - - FilteredNormalizer2*fFilteredNorm2; // owned if not NULL - const Normalizer2 *fNorm2; // not owned; may be equal to fFilteredNorm2 - UNormalizationMode fUMode; // deprecated - int32_t fOptions; - - // The input text and our position in it - CharacterIterator *text; - - // The normalization buffer is the result of normalization - // of the source in [currentIndex..nextIndex[ . - int32_t currentIndex, nextIndex; - - // A buffer for holding intermediate results - UnicodeString buffer; - int32_t bufferPos; -}; - -//------------------------------------------------------------------------- -// Inline implementations -//------------------------------------------------------------------------- - -#ifndef U_HIDE_DEPRECATED_API -inline UBool -Normalizer::operator!= (const Normalizer& other) const -{ return ! operator==(other); } - -inline UNormalizationCheckResult -Normalizer::quickCheck(const UnicodeString& source, - UNormalizationMode mode, - UErrorCode &status) { - return quickCheck(source, mode, 0, status); -} - -inline UBool -Normalizer::isNormalized(const UnicodeString& source, - UNormalizationMode mode, - UErrorCode &status) { - return isNormalized(source, mode, 0, status); -} -#endif /* U_HIDE_DEPRECATED_API */ - -inline int32_t -Normalizer::compare(const UnicodeString &s1, const UnicodeString &s2, - uint32_t options, - UErrorCode &errorCode) { - // all argument checking is done in unorm_compare - return unorm_compare(toUCharPtr(s1.getBuffer()), s1.length(), - toUCharPtr(s2.getBuffer()), s2.length(), - options, - &errorCode); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_NORMALIZATION */ - -#endif // NORMLZR_H diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/nounit.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/nounit.h deleted file mode 100644 index 879849b16b..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/nounit.h +++ /dev/null @@ -1,111 +0,0 @@ -// © 2017 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * Copyright (C) 2009-2017, International Business Machines Corporation, * - * Google, and others. All Rights Reserved. * - ******************************************************************************* - */ - -#ifndef __NOUNIT_H__ -#define __NOUNIT_H__ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING -#ifndef U_HIDE_DRAFT_API - -#include "unicode/measunit.h" - -/** - * \file - * \brief C++ API: units for percent and permille - */ - -U_NAMESPACE_BEGIN - -/** - * Dimensionless unit for percent and permille. - * @see NumberFormatter - * @draft ICU 60 - */ -class U_I18N_API NoUnit: public MeasureUnit { -public: - /** - * Returns an instance for the base unit (dimensionless and no scaling). - * - * @return a NoUnit instance - * @draft ICU 60 - */ - static NoUnit U_EXPORT2 base(); - - /** - * Returns an instance for percent, or 1/100 of a base unit. - * - * @return a NoUnit instance - * @draft ICU 60 - */ - static NoUnit U_EXPORT2 percent(); - - /** - * Returns an instance for permille, or 1/1000 of a base unit. - * - * @return a NoUnit instance - * @draft ICU 60 - */ - static NoUnit U_EXPORT2 permille(); - - /** - * Copy operator. - * @draft ICU 60 - */ - NoUnit(const NoUnit& other); - - /** - * Destructor. - * @draft ICU 60 - */ - virtual ~NoUnit(); - - /** - * Return a polymorphic clone of this object. The result will - * have the same class as returned by getDynamicClassID(). - * @draft ICU 60 - */ - virtual UObject* clone() const; - - /** - * Returns a unique class ID for this object POLYMORPHICALLY. - * This method implements a simple form of RTTI used by ICU. - * @return The class ID for this object. All objects of a given - * class have the same class ID. Objects of other classes have - * different class IDs. - * @draft ICU 60 - */ - virtual UClassID getDynamicClassID() const; - - /** - * Returns the class ID for this class. This is used to compare to - * the return value of getDynamicClassID(). - * @return The class ID for all objects of this class. - * @draft ICU 60 - */ - static UClassID U_EXPORT2 getStaticClassID(); - -private: - /** - * Constructor - * @internal (private) - */ - NoUnit(const char* subtype); - -}; - -U_NAMESPACE_END - -#endif /* U_HIDE_DRAFT_API */ -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // __NOUNIT_H__ -//eof -// diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numberformatter.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numberformatter.h deleted file mode 100644 index 56c3a5a9d8..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numberformatter.h +++ /dev/null @@ -1,2667 +0,0 @@ -// © 2017 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING -#ifndef __NUMBERFORMATTER_H__ -#define __NUMBERFORMATTER_H__ - -#include "unicode/appendable.h" -#include "unicode/dcfmtsym.h" -#include "unicode/currunit.h" -#include "unicode/fieldpos.h" -#include "unicode/formattedvalue.h" -#include "unicode/fpositer.h" -#include "unicode/measunit.h" -#include "unicode/nounit.h" -#include "unicode/parseerr.h" -#include "unicode/plurrule.h" -#include "unicode/ucurr.h" -#include "unicode/unum.h" -#include "unicode/unumberformatter.h" -#include "unicode/uobject.h" - -#ifndef U_HIDE_DRAFT_API - -/** - * \file - * \brief C++ API: Library for localized number formatting introduced in ICU 60. - * - * This library was introduced in ICU 60 to simplify the process of formatting localized number strings. - * Basic usage examples: - * - *

- * // Most basic usage:
- * NumberFormatter::withLocale(...).format(123).toString();  // 1,234 in en-US
- *
- * // Custom notation, unit, and rounding precision:
- * NumberFormatter::with()
- *     .notation(Notation::compactShort())
- *     .unit(CurrencyUnit("EUR", status))
- *     .precision(Precision::maxDigits(2))
- *     .locale(...)
- *     .format(1234)
- *     .toString();  // €1.2K in en-US
- *
- * // Create a formatter in a singleton by value for use later:
- * static const LocalizedNumberFormatter formatter = NumberFormatter::withLocale(...)
- *     .unit(NoUnit::percent())
- *     .precision(Precision::fixedFraction(3));
- * formatter.format(5.9831).toString();  // 5.983% in en-US
- *
- * // Create a "template" in a singleton unique_ptr but without setting a locale until the call site:
- * std::unique_ptr template = NumberFormatter::with()
- *     .sign(UNumberSignDisplay::UNUM_SIGN_ALWAYS)
- *     .unit(MeasureUnit::getMeter())
- *     .unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME)
- *     .clone();
- * template->locale(...).format(1234).toString();  // +1,234 meters in en-US
- * 
- * - *

- * This API offers more features than DecimalFormat and is geared toward new users of ICU. - * - *

- * NumberFormatter instances (i.e., LocalizedNumberFormatter and UnlocalizedNumberFormatter) - * are immutable and thread safe. This means that invoking a configuration method has no - * effect on the receiving instance; you must store and use the new number formatter instance it returns instead. - * - *

- * UnlocalizedNumberFormatter formatter = UnlocalizedNumberFormatter::with().notation(Notation::scientific());
- * formatter.precision(Precision.maxFraction(2)); // does nothing!
- * formatter.locale(Locale.getEnglish()).format(9.8765).toString(); // prints "9.8765E0", not "9.88E0"
- * 
- * - *

- * This API is based on the fluent design pattern popularized by libraries such as Google's Guava. For - * extensive details on the design of this API, read the design doc. - * - * @author Shane Carr - */ - -U_NAMESPACE_BEGIN - -// Forward declarations: -class IFixedDecimal; -class FieldPositionIteratorHandler; - -namespace numparse { -namespace impl { - -// Forward declarations: -class NumberParserImpl; -class MultiplierParseHandler; - -} -} - -namespace number { // icu::number - -// Forward declarations: -class UnlocalizedNumberFormatter; -class LocalizedNumberFormatter; -class FormattedNumber; -class Notation; -class ScientificNotation; -class Precision; -class FractionPrecision; -class CurrencyPrecision; -class IncrementPrecision; -class IntegerWidth; - -namespace impl { - -// can't be #ifndef U_HIDE_INTERNAL_API; referenced throughout this file in public classes -/** - * Datatype for minimum/maximum fraction digits. Must be able to hold kMaxIntFracSig. - * - * @internal - */ -typedef int16_t digits_t; - -// can't be #ifndef U_HIDE_INTERNAL_API; needed for struct initialization -/** - * Use a default threshold of 3. This means that the third time .format() is called, the data structures get built - * using the "safe" code path. The first two calls to .format() will trigger the unsafe code path. - * - * @internal - */ -static constexpr int32_t kInternalDefaultThreshold = 3; - -// Forward declarations: -class Padder; -struct MacroProps; -struct MicroProps; -class DecimalQuantity; -class UFormattedNumberData; -class NumberFormatterImpl; -struct ParsedPatternInfo; -class ScientificModifier; -class MultiplierProducer; -class RoundingImpl; -class ScientificHandler; -class Modifier; -class NumberStringBuilder; -class AffixPatternProvider; -class NumberPropertyMapper; -struct DecimalFormatProperties; -class MultiplierFormatHandler; -class CurrencySymbols; -class GeneratorHelpers; -class DecNum; -class NumberRangeFormatterImpl; -struct RangeMacroProps; -struct UFormattedNumberImpl; - -/** - * Used for NumberRangeFormatter and implemented in numrange_fluent.cpp. - * Declared here so it can be friended. - * - * @internal - */ -void touchRangeLocales(impl::RangeMacroProps& macros); - -} // namespace impl - -/** - * Extra name reserved in case it is needed in the future. - * - * @draft ICU 63 - */ -typedef Notation CompactNotation; - -/** - * Extra name reserved in case it is needed in the future. - * - * @draft ICU 63 - */ -typedef Notation SimpleNotation; - -/** - * A class that defines the notation style to be used when formatting numbers in NumberFormatter. - * - * @draft ICU 60 - */ -class U_I18N_API Notation : public UMemory { - public: - /** - * Print the number using scientific notation (also known as scientific form, standard index form, or standard form - * in the UK). The format for scientific notation varies by locale; for example, many Western locales display the - * number in the form "#E0", where the number is displayed with one digit before the decimal separator, zero or more - * digits after the decimal separator, and the corresponding power of 10 displayed after the "E". - * - *

- * Example outputs in en-US when printing 8.765E4 through 8.765E-3: - * - *

-     * 8.765E4
-     * 8.765E3
-     * 8.765E2
-     * 8.765E1
-     * 8.765E0
-     * 8.765E-1
-     * 8.765E-2
-     * 8.765E-3
-     * 0E0
-     * 
- * - * @return A ScientificNotation for chaining or passing to the NumberFormatter notation() setter. - * @draft ICU 60 - */ - static ScientificNotation scientific(); - - /** - * Print the number using engineering notation, a variant of scientific notation in which the exponent must be - * divisible by 3. - * - *

- * Example outputs in en-US when printing 8.765E4 through 8.765E-3: - * - *

-     * 87.65E3
-     * 8.765E3
-     * 876.5E0
-     * 87.65E0
-     * 8.765E0
-     * 876.5E-3
-     * 87.65E-3
-     * 8.765E-3
-     * 0E0
-     * 
- * - * @return A ScientificNotation for chaining or passing to the NumberFormatter notation() setter. - * @draft ICU 60 - */ - static ScientificNotation engineering(); - - /** - * Print the number using short-form compact notation. - * - *

- * Compact notation, defined in Unicode Technical Standard #35 Part 3 Section 2.4.1, prints numbers with - * localized prefixes or suffixes corresponding to different powers of ten. Compact notation is similar to - * engineering notation in how it scales numbers. - * - *

- * Compact notation is ideal for displaying large numbers (over ~1000) to humans while at the same time minimizing - * screen real estate. - * - *

- * In short form, the powers of ten are abbreviated. In en-US, the abbreviations are "K" for thousands, "M" - * for millions, "B" for billions, and "T" for trillions. Example outputs in en-US when printing 8.765E7 - * through 8.765E0: - * - *

-     * 88M
-     * 8.8M
-     * 876K
-     * 88K
-     * 8.8K
-     * 876
-     * 88
-     * 8.8
-     * 
- * - *

- * When compact notation is specified without an explicit rounding precision, numbers are rounded off to the closest - * integer after scaling the number by the corresponding power of 10, but with a digit shown after the decimal - * separator if there is only one digit before the decimal separator. The default compact notation rounding precision - * is equivalent to: - * - *

-     * Precision::integer().withMinDigits(2)
-     * 
- * - * @return A CompactNotation for passing to the NumberFormatter notation() setter. - * @draft ICU 60 - */ - static CompactNotation compactShort(); - - /** - * Print the number using long-form compact notation. For more information on compact notation, see - * {@link #compactShort}. - * - *

- * In long form, the powers of ten are spelled out fully. Example outputs in en-US when printing 8.765E7 - * through 8.765E0: - * - *

-     * 88 million
-     * 8.8 million
-     * 876 thousand
-     * 88 thousand
-     * 8.8 thousand
-     * 876
-     * 88
-     * 8.8
-     * 
- * - * @return A CompactNotation for passing to the NumberFormatter notation() setter. - * @draft ICU 60 - */ - static CompactNotation compactLong(); - - /** - * Print the number using simple notation without any scaling by powers of ten. This is the default behavior. - * - *

- * Since this is the default behavior, this method needs to be called only when it is necessary to override a - * previous setting. - * - *

- * Example outputs in en-US when printing 8.765E7 through 8.765E0: - * - *

-     * 87,650,000
-     * 8,765,000
-     * 876,500
-     * 87,650
-     * 8,765
-     * 876.5
-     * 87.65
-     * 8.765
-     * 
- * - * @return A SimpleNotation for passing to the NumberFormatter notation() setter. - * @draft ICU 60 - */ - static SimpleNotation simple(); - - private: - enum NotationType { - NTN_SCIENTIFIC, NTN_COMPACT, NTN_SIMPLE, NTN_ERROR - } fType; - - union NotationUnion { - // For NTN_SCIENTIFIC - /** @internal */ - struct ScientificSettings { - /** @internal */ - int8_t fEngineeringInterval; - /** @internal */ - bool fRequireMinInt; - /** @internal */ - impl::digits_t fMinExponentDigits; - /** @internal */ - UNumberSignDisplay fExponentSignDisplay; - } scientific; - - // For NTN_COMPACT - UNumberCompactStyle compactStyle; - - // For NTN_ERROR - UErrorCode errorCode; - } fUnion; - - typedef NotationUnion::ScientificSettings ScientificSettings; - - Notation(const NotationType &type, const NotationUnion &union_) : fType(type), fUnion(union_) {} - - Notation(UErrorCode errorCode) : fType(NTN_ERROR) { - fUnion.errorCode = errorCode; - } - - Notation() : fType(NTN_SIMPLE), fUnion() {} - - UBool copyErrorTo(UErrorCode &status) const { - if (fType == NTN_ERROR) { - status = fUnion.errorCode; - return TRUE; - } - return FALSE; - } - - // To allow MacroProps to initialize empty instances: - friend struct impl::MacroProps; - friend class ScientificNotation; - - // To allow implementation to access internal types: - friend class impl::NumberFormatterImpl; - friend class impl::ScientificModifier; - friend class impl::ScientificHandler; - - // To allow access to the skeleton generation code: - friend class impl::GeneratorHelpers; -}; - -/** - * A class that defines the scientific notation style to be used when formatting numbers in NumberFormatter. - * - *

- * To create a ScientificNotation, use one of the factory methods in {@link Notation}. - * - * @draft ICU 60 - */ -class U_I18N_API ScientificNotation : public Notation { - public: - /** - * Sets the minimum number of digits to show in the exponent of scientific notation, padding with zeros if - * necessary. Useful for fixed-width display. - * - *

- * For example, with minExponentDigits=2, the number 123 will be printed as "1.23E02" in en-US instead of - * the default "1.23E2". - * - * @param minExponentDigits - * The minimum number of digits to show in the exponent. - * @return A ScientificNotation, for chaining. - * @draft ICU 60 - */ - ScientificNotation withMinExponentDigits(int32_t minExponentDigits) const; - - /** - * Sets whether to show the sign on positive and negative exponents in scientific notation. The default is AUTO, - * showing the minus sign but not the plus sign. - * - *

- * For example, with exponentSignDisplay=ALWAYS, the number 123 will be printed as "1.23E+2" in en-US - * instead of the default "1.23E2". - * - * @param exponentSignDisplay - * The strategy for displaying the sign in the exponent. - * @return A ScientificNotation, for chaining. - * @draft ICU 60 - */ - ScientificNotation withExponentSignDisplay(UNumberSignDisplay exponentSignDisplay) const; - - private: - // Inherit constructor - using Notation::Notation; - - // Raw constructor for NumberPropertyMapper - ScientificNotation(int8_t fEngineeringInterval, bool fRequireMinInt, impl::digits_t fMinExponentDigits, - UNumberSignDisplay fExponentSignDisplay); - - friend class Notation; - - // So that NumberPropertyMapper can create instances - friend class impl::NumberPropertyMapper; -}; - -/** - * Extra name reserved in case it is needed in the future. - * - * @draft ICU 63 - */ -typedef Precision SignificantDigitsPrecision; - -/** - * A class that defines the rounding precision to be used when formatting numbers in NumberFormatter. - * - *

- * To create a Precision, use one of the factory methods. - * - * @draft ICU 60 - */ -class U_I18N_API Precision : public UMemory { - - public: - /** - * Show all available digits to full precision. - * - *

- * NOTE: When formatting a double, this method, along with {@link #minFraction} and - * {@link #minSignificantDigits}, will trigger complex algorithm similar to Dragon4 to determine the - * low-order digits and the number of digits to display based on the value of the double. - * If the number of fraction places or significant digits can be bounded, consider using {@link #maxFraction} - * or {@link #maxSignificantDigits} instead to maximize performance. - * For more information, read the following blog post. - * - *

- * http://www.serpentine.com/blog/2011/06/29/here-be-dragons-advances-in-problems-you-didnt-even-know-you-had/ - * - * @return A Precision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 60 - */ - static Precision unlimited(); - - /** - * Show numbers rounded if necessary to the nearest integer. - * - * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 60 - */ - static FractionPrecision integer(); - - /** - * Show numbers rounded if necessary to a certain number of fraction places (numerals after the decimal separator). - * Additionally, pad with zeros to ensure that this number of places are always shown. - * - *

- * Example output with minMaxFractionPlaces = 3: - * - *

- * 87,650.000
- * 8,765.000
- * 876.500
- * 87.650
- * 8.765
- * 0.876
- * 0.088
- * 0.009
- * 0.000 (zero) - * - *

- * This method is equivalent to {@link #minMaxFraction} with both arguments equal. - * - * @param minMaxFractionPlaces - * The minimum and maximum number of numerals to display after the decimal separator (rounding if too - * long or padding with zeros if too short). - * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 60 - */ - static FractionPrecision fixedFraction(int32_t minMaxFractionPlaces); - - /** - * Always show at least a certain number of fraction places after the decimal separator, padding with zeros if - * necessary. Do not perform rounding (display numbers to their full precision). - * - *

- * NOTE: If you are formatting doubles, see the performance note in {@link #unlimited}. - * - * @param minFractionPlaces - * The minimum number of numerals to display after the decimal separator (padding with zeros if - * necessary). - * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 60 - */ - static FractionPrecision minFraction(int32_t minFractionPlaces); - - /** - * Show numbers rounded if necessary to a certain number of fraction places (numerals after the decimal separator). - * Unlike the other fraction rounding strategies, this strategy does not pad zeros to the end of the - * number. - * - * @param maxFractionPlaces - * The maximum number of numerals to display after the decimal mark (rounding if necessary). - * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 60 - */ - static FractionPrecision maxFraction(int32_t maxFractionPlaces); - - /** - * Show numbers rounded if necessary to a certain number of fraction places (numerals after the decimal separator); - * in addition, always show at least a certain number of places after the decimal separator, padding with zeros if - * necessary. - * - * @param minFractionPlaces - * The minimum number of numerals to display after the decimal separator (padding with zeros if - * necessary). - * @param maxFractionPlaces - * The maximum number of numerals to display after the decimal separator (rounding if necessary). - * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 60 - */ - static FractionPrecision minMaxFraction(int32_t minFractionPlaces, int32_t maxFractionPlaces); - - /** - * Show numbers rounded if necessary to a certain number of significant digits or significant figures. Additionally, - * pad with zeros to ensure that this number of significant digits/figures are always shown. - * - *

- * This method is equivalent to {@link #minMaxSignificantDigits} with both arguments equal. - * - * @param minMaxSignificantDigits - * The minimum and maximum number of significant digits to display (rounding if too long or padding with - * zeros if too short). - * @return A precision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 62 - */ - static SignificantDigitsPrecision fixedSignificantDigits(int32_t minMaxSignificantDigits); - - /** - * Always show at least a certain number of significant digits/figures, padding with zeros if necessary. Do not - * perform rounding (display numbers to their full precision). - * - *

- * NOTE: If you are formatting doubles, see the performance note in {@link #unlimited}. - * - * @param minSignificantDigits - * The minimum number of significant digits to display (padding with zeros if too short). - * @return A precision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 62 - */ - static SignificantDigitsPrecision minSignificantDigits(int32_t minSignificantDigits); - - /** - * Show numbers rounded if necessary to a certain number of significant digits/figures. - * - * @param maxSignificantDigits - * The maximum number of significant digits to display (rounding if too long). - * @return A precision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 62 - */ - static SignificantDigitsPrecision maxSignificantDigits(int32_t maxSignificantDigits); - - /** - * Show numbers rounded if necessary to a certain number of significant digits/figures; in addition, always show at - * least a certain number of significant digits, padding with zeros if necessary. - * - * @param minSignificantDigits - * The minimum number of significant digits to display (padding with zeros if necessary). - * @param maxSignificantDigits - * The maximum number of significant digits to display (rounding if necessary). - * @return A precision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 62 - */ - static SignificantDigitsPrecision minMaxSignificantDigits(int32_t minSignificantDigits, - int32_t maxSignificantDigits); - - /** - * Show numbers rounded if necessary to the closest multiple of a certain rounding increment. For example, if the - * rounding increment is 0.5, then round 1.2 to 1 and round 1.3 to 1.5. - * - *

- * In order to ensure that numbers are padded to the appropriate number of fraction places, call - * withMinFraction() on the return value of this method. - * For example, to round to the nearest 0.5 and always display 2 numerals after the - * decimal separator (to display 1.2 as "1.00" and 1.3 as "1.50"), you can run: - * - *

-     * Precision::increment(0.5).withMinFraction(2)
-     * 
- * - * @param roundingIncrement - * The increment to which to round numbers. - * @return A precision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 60 - */ - static IncrementPrecision increment(double roundingIncrement); - - /** - * Show numbers rounded and padded according to the rules for the currency unit. The most common - * rounding precision settings for currencies include Precision::fixedFraction(2), - * Precision::integer(), and Precision::increment(0.05) for cash transactions - * ("nickel rounding"). - * - *

- * The exact rounding details will be resolved at runtime based on the currency unit specified in the - * NumberFormatter chain. To round according to the rules for one currency while displaying the symbol for another - * currency, the withCurrency() method can be called on the return value of this method. - * - * @param currencyUsage - * Either STANDARD (for digital transactions) or CASH (for transactions where the rounding increment may - * be limited by the available denominations of cash or coins). - * @return A CurrencyPrecision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 60 - */ - static CurrencyPrecision currency(UCurrencyUsage currencyUsage); - - private: - enum PrecisionType { - RND_BOGUS, - RND_NONE, - RND_FRACTION, - RND_SIGNIFICANT, - RND_FRACTION_SIGNIFICANT, - - // Used for strange increments like 3.14. - RND_INCREMENT, - - // Used for increments with 1 as the only digit. This is different than fraction - // rounding because it supports having additional trailing zeros. For example, this - // class is used to round with the increment 0.010. - RND_INCREMENT_ONE, - - // Used for increments with 5 as the only digit (nickel rounding). - RND_INCREMENT_FIVE, - - RND_CURRENCY, - RND_INCREMENT_SIGNIFICANT, // Apple addition rdar://52538227 - RND_ERROR - } fType; - - union PrecisionUnion { - /** @internal */ - struct FractionSignificantSettings { - // For RND_FRACTION, RND_SIGNIFICANT, and RND_FRACTION_SIGNIFICANT - /** @internal */ - impl::digits_t fMinFrac; - /** @internal */ - impl::digits_t fMaxFrac; - /** @internal */ - impl::digits_t fMinSig; - /** @internal */ - impl::digits_t fMaxSig; - } fracSig; - /** @internal */ - struct IncrementSettings { - // For RND_INCREMENT, RND_INCREMENT_ONE, and RND_INCREMENT_FIVE - /** @internal */ - double fIncrement; - /** @internal */ - impl::digits_t fMinFrac; - /** @internal */ - impl::digits_t fMaxFrac; - } increment; - /** @internal */ - struct IncrementSignificantSettings { // Apple addition rdar://52538227 - // For // Apple addition rdar://52538227 - /** @internal */ - double fIncrement; - /** @internal */ - impl::digits_t fMinSig; - /** @internal */ - impl::digits_t fMaxSig; - } incrSig; - UCurrencyUsage currencyUsage; // For RND_CURRENCY - UErrorCode errorCode; // For RND_ERROR - } fUnion; - - typedef PrecisionUnion::FractionSignificantSettings FractionSignificantSettings; - typedef PrecisionUnion::IncrementSettings IncrementSettings; - typedef PrecisionUnion::IncrementSignificantSettings IncrementSignificantSettings; - - /** The Precision encapsulates the RoundingMode when used within the implementation. */ - UNumberFormatRoundingMode fRoundingMode; - - Precision(const PrecisionType& type, const PrecisionUnion& union_, - UNumberFormatRoundingMode roundingMode) - : fType(type), fUnion(union_), fRoundingMode(roundingMode) {} - - Precision(UErrorCode errorCode) : fType(RND_ERROR) { - fUnion.errorCode = errorCode; - } - - Precision() : fType(RND_BOGUS) {} - - bool isBogus() const { - return fType == RND_BOGUS; - } - - UBool copyErrorTo(UErrorCode &status) const { - if (fType == RND_ERROR) { - status = fUnion.errorCode; - return TRUE; - } - return FALSE; - } - - // On the parent type so that this method can be called internally on Precision instances. - Precision withCurrency(const CurrencyUnit ¤cy, UErrorCode &status) const; - - static FractionPrecision constructFraction(int32_t minFrac, int32_t maxFrac); - - static Precision constructSignificant(int32_t minSig, int32_t maxSig); - - static Precision constructIncrementSignificant(double increment, int32_t minSig, int32_t maxSig); // Apple - - static Precision - constructFractionSignificant(const FractionPrecision &base, int32_t minSig, int32_t maxSig); - - static IncrementPrecision constructIncrement(double increment, int32_t minFrac); - - static CurrencyPrecision constructCurrency(UCurrencyUsage usage); - - static Precision constructPassThrough(); - - // To allow MacroProps/MicroProps to initialize bogus instances: - friend struct impl::MacroProps; - friend struct impl::MicroProps; - - // To allow NumberFormatterImpl to access isBogus() and other internal methods: - friend class impl::NumberFormatterImpl; - - // To allow NumberPropertyMapper to create instances from DecimalFormatProperties: - friend class impl::NumberPropertyMapper; - - // To allow access to the main implementation class: - friend class impl::RoundingImpl; - - // To allow child classes to call private methods: - friend class FractionPrecision; - friend class CurrencyPrecision; - friend class IncrementPrecision; - - // To allow access to the skeleton generation code: - friend class impl::GeneratorHelpers; -}; - -/** - * A class that defines a rounding precision based on a number of fraction places and optionally significant digits to be - * used when formatting numbers in NumberFormatter. - * - *

- * To create a FractionPrecision, use one of the factory methods on Precision. - * - * @draft ICU 60 - */ -class U_I18N_API FractionPrecision : public Precision { - public: - /** - * Ensure that no less than this number of significant digits are retained when rounding according to fraction - * rules. - * - *

- * For example, with integer rounding, the number 3.141 becomes "3". However, with minimum figures set to 2, 3.141 - * becomes "3.1" instead. - * - *

- * This setting does not affect the number of trailing zeros. For example, 3.01 would print as "3", not "3.0". - * - * @param minSignificantDigits - * The number of significant figures to guarantee. - * @return A precision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 60 - */ - Precision withMinDigits(int32_t minSignificantDigits) const; - - /** - * Ensure that no more than this number of significant digits are retained when rounding according to fraction - * rules. - * - *

- * For example, with integer rounding, the number 123.4 becomes "123". However, with maximum figures set to 2, 123.4 - * becomes "120" instead. - * - *

- * This setting does not affect the number of trailing zeros. For example, with fixed fraction of 2, 123.4 would - * become "120.00". - * - * @param maxSignificantDigits - * Round the number to no more than this number of significant figures. - * @return A precision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 60 - */ - Precision withMaxDigits(int32_t maxSignificantDigits) const; - - private: - // Inherit constructor - using Precision::Precision; - - // To allow parent class to call this class's constructor: - friend class Precision; -}; - -/** - * A class that defines a rounding precision parameterized by a currency to be used when formatting numbers in - * NumberFormatter. - * - *

- * To create a CurrencyPrecision, use one of the factory methods on Precision. - * - * @draft ICU 60 - */ -class U_I18N_API CurrencyPrecision : public Precision { - public: - /** - * Associates a currency with this rounding precision. - * - *

- * Calling this method is not required, because the currency specified in unit() - * is automatically applied to currency rounding precisions. However, - * this method enables you to override that automatic association. - * - *

- * This method also enables numbers to be formatted using currency rounding rules without explicitly using a - * currency format. - * - * @param currency - * The currency to associate with this rounding precision. - * @return A precision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 60 - */ - Precision withCurrency(const CurrencyUnit ¤cy) const; - - private: - // Inherit constructor - using Precision::Precision; - - // To allow parent class to call this class's constructor: - friend class Precision; -}; - -/** - * A class that defines a rounding precision parameterized by a rounding increment to be used when formatting numbers in - * NumberFormatter. - * - *

- * To create an IncrementPrecision, use one of the factory methods on Precision. - * - * @draft ICU 60 - */ -class U_I18N_API IncrementPrecision : public Precision { - public: - /** - * Specifies the minimum number of fraction digits to render after the decimal separator, padding with zeros if - * necessary. By default, no trailing zeros are added. - * - *

- * For example, if the rounding increment is 0.5 and minFrac is 2, then the resulting strings include "0.00", - * "0.50", "1.00", and "1.50". - * - *

- * Note: In ICU4J, this functionality is accomplished via the scale of the BigDecimal rounding increment. - * - * @param minFrac The minimum number of digits after the decimal separator. - * @return A precision for chaining or passing to the NumberFormatter precision() setter. - * @draft ICU 60 - */ - Precision withMinFraction(int32_t minFrac) const; - - private: - // Inherit constructor - using Precision::Precision; - - // To allow parent class to call this class's constructor: - friend class Precision; -}; - -/** - * A class that defines the strategy for padding and truncating integers before the decimal separator. - * - *

- * To create an IntegerWidth, use one of the factory methods. - * - * @draft ICU 60 - * @see NumberFormatter - */ -class U_I18N_API IntegerWidth : public UMemory { - public: - /** - * Pad numbers at the beginning with zeros to guarantee a certain number of numerals before the decimal separator. - * - *

- * For example, with minInt=3, the number 55 will get printed as "055". - * - * @param minInt - * The minimum number of places before the decimal separator. - * @return An IntegerWidth for chaining or passing to the NumberFormatter integerWidth() setter. - * @draft ICU 60 - */ - static IntegerWidth zeroFillTo(int32_t minInt); - - /** - * Truncate numbers exceeding a certain number of numerals before the decimal separator. - * - * For example, with maxInt=3, the number 1234 will get printed as "234". - * - * @param maxInt - * The maximum number of places before the decimal separator. maxInt == -1 means no - * truncation. - * @return An IntegerWidth for passing to the NumberFormatter integerWidth() setter. - * @draft ICU 60 - */ - IntegerWidth truncateAt(int32_t maxInt); - - private: - union { - struct { - impl::digits_t fMinInt; - impl::digits_t fMaxInt; - bool fFormatFailIfMoreThanMaxDigits; - } minMaxInt; - UErrorCode errorCode; - } fUnion; - bool fHasError = false; - - IntegerWidth(impl::digits_t minInt, impl::digits_t maxInt, bool formatFailIfMoreThanMaxDigits); - - IntegerWidth(UErrorCode errorCode) { // NOLINT - fUnion.errorCode = errorCode; - fHasError = true; - } - - IntegerWidth() { // NOLINT - fUnion.minMaxInt.fMinInt = -1; - } - - /** Returns the default instance. */ - static IntegerWidth standard() { - return IntegerWidth::zeroFillTo(1); - } - - bool isBogus() const { - return !fHasError && fUnion.minMaxInt.fMinInt == -1; - } - - UBool copyErrorTo(UErrorCode &status) const { - if (fHasError) { - status = fUnion.errorCode; - return TRUE; - } - return FALSE; - } - - void apply(impl::DecimalQuantity &quantity, UErrorCode &status) const; - - bool operator==(const IntegerWidth& other) const; - - // To allow MacroProps/MicroProps to initialize empty instances: - friend struct impl::MacroProps; - friend struct impl::MicroProps; - - // To allow NumberFormatterImpl to access isBogus() and perform other operations: - friend class impl::NumberFormatterImpl; - - // So that NumberPropertyMapper can create instances - friend class impl::NumberPropertyMapper; - - // To allow access to the skeleton generation code: - friend class impl::GeneratorHelpers; -}; - -/** - * A class that defines a quantity by which a number should be multiplied when formatting. - * - *

- * To create a Scale, use one of the factory methods. - * - * @draft ICU 62 - */ -class U_I18N_API Scale : public UMemory { - public: - /** - * Do not change the value of numbers when formatting or parsing. - * - * @return A Scale to prevent any multiplication. - * @draft ICU 62 - */ - static Scale none(); - - /** - * Multiply numbers by a power of ten before formatting. Useful for combining with a percent unit: - * - *

-     * NumberFormatter::with().unit(NoUnit::percent()).multiplier(Scale::powerOfTen(2))
-     * 
- * - * @return A Scale for passing to the setter in NumberFormatter. - * @draft ICU 62 - */ - static Scale powerOfTen(int32_t power); - - /** - * Multiply numbers by an arbitrary value before formatting. Useful for unit conversions. - * - * This method takes a string in a decimal number format with syntax - * as defined in the Decimal Arithmetic Specification, available at - * http://speleotrove.com/decimal - * - * Also see the version of this method that takes a double. - * - * @return A Scale for passing to the setter in NumberFormatter. - * @draft ICU 62 - */ - static Scale byDecimal(StringPiece multiplicand); - - /** - * Multiply numbers by an arbitrary value before formatting. Useful for unit conversions. - * - * This method takes a double; also see the version of this method that takes an exact decimal. - * - * @return A Scale for passing to the setter in NumberFormatter. - * @draft ICU 62 - */ - static Scale byDouble(double multiplicand); - - /** - * Multiply a number by both a power of ten and by an arbitrary double value. - * - * @return A Scale for passing to the setter in NumberFormatter. - * @draft ICU 62 - */ - static Scale byDoubleAndPowerOfTen(double multiplicand, int32_t power); - - // We need a custom destructor for the DecNum, which means we need to declare - // the copy/move constructor/assignment quartet. - - /** @draft ICU 62 */ - Scale(const Scale& other); - - /** @draft ICU 62 */ - Scale& operator=(const Scale& other); - - /** @draft ICU 62 */ - Scale(Scale&& src) U_NOEXCEPT; - - /** @draft ICU 62 */ - Scale& operator=(Scale&& src) U_NOEXCEPT; - - /** @draft ICU 62 */ - ~Scale(); - -#ifndef U_HIDE_INTERNAL_API - /** @internal */ - Scale(int32_t magnitude, impl::DecNum* arbitraryToAdopt); -#endif /* U_HIDE_INTERNAL_API */ - - private: - int32_t fMagnitude; - impl::DecNum* fArbitrary; - UErrorCode fError; - - Scale(UErrorCode error) : fMagnitude(0), fArbitrary(nullptr), fError(error) {} - - Scale() : fMagnitude(0), fArbitrary(nullptr), fError(U_ZERO_ERROR) {} - - bool isValid() const { - return fMagnitude != 0 || fArbitrary != nullptr; - } - - UBool copyErrorTo(UErrorCode &status) const { - if (fError != U_ZERO_ERROR) { - status = fError; - return TRUE; - } - return FALSE; - } - - void applyTo(impl::DecimalQuantity& quantity) const; - - void applyReciprocalTo(impl::DecimalQuantity& quantity) const; - - // To allow MacroProps/MicroProps to initialize empty instances: - friend struct impl::MacroProps; - friend struct impl::MicroProps; - - // To allow NumberFormatterImpl to access isBogus() and perform other operations: - friend class impl::NumberFormatterImpl; - - // To allow the helper class MultiplierFormatHandler access to private fields: - friend class impl::MultiplierFormatHandler; - - // To allow access to the skeleton generation code: - friend class impl::GeneratorHelpers; - - // To allow access to parsing code: - friend class ::icu::numparse::impl::NumberParserImpl; - friend class ::icu::numparse::impl::MultiplierParseHandler; -}; - -namespace impl { - -// Do not enclose entire SymbolsWrapper with #ifndef U_HIDE_INTERNAL_API, needed for a protected field -/** @internal */ -class U_I18N_API SymbolsWrapper : public UMemory { - public: - /** @internal */ - SymbolsWrapper() : fType(SYMPTR_NONE), fPtr{nullptr} {} - - /** @internal */ - SymbolsWrapper(const SymbolsWrapper &other); - - /** @internal */ - SymbolsWrapper &operator=(const SymbolsWrapper &other); - - /** @internal */ - SymbolsWrapper(SymbolsWrapper&& src) U_NOEXCEPT; - - /** @internal */ - SymbolsWrapper &operator=(SymbolsWrapper&& src) U_NOEXCEPT; - - /** @internal */ - ~SymbolsWrapper(); - -#ifndef U_HIDE_INTERNAL_API - - /** - * Set whether DecimalFormatSymbols copy is deep (clone) - * or shallow (pointer copy). Apple - * @internal - */ - void setDFSShallowCopy(UBool shallow); - - /** - * The provided object is copied, but we do not adopt it. - * @internal - */ - void setTo(const DecimalFormatSymbols &dfs); - - /** - * Adopt the provided object. - * @internal - */ - void setTo(const NumberingSystem *ns); - - /** - * Whether the object is currently holding a DecimalFormatSymbols. - * @internal - */ - bool isDecimalFormatSymbols() const; - - /** - * Whether the object is currently holding a NumberingSystem. - * @internal - */ - bool isNumberingSystem() const; - - /** - * Get the DecimalFormatSymbols pointer. No ownership change. - * @internal - */ - const DecimalFormatSymbols *getDecimalFormatSymbols() const; - - /** - * Get the NumberingSystem pointer. No ownership change. - * @internal - */ - const NumberingSystem *getNumberingSystem() const; - -#endif // U_HIDE_INTERNAL_API - - /** @internal */ - UBool copyErrorTo(UErrorCode &status) const { - if ((fType == SYMPTR_DFS || fType == SYMPTR_DFS_SHALLOWCOPY) && fPtr.dfs == nullptr) { - status = U_MEMORY_ALLOCATION_ERROR; - return TRUE; - } else if (fType == SYMPTR_NS && fPtr.ns == nullptr) { - status = U_MEMORY_ALLOCATION_ERROR; - return TRUE; - } - return FALSE; - } - - private: - enum SymbolsPointerType { - SYMPTR_NONE, SYMPTR_DFS, SYMPTR_NS, SYMPTR_DFS_SHALLOWCOPY // Apple add SHALLOWCOPY - } fType; - - union { - const DecimalFormatSymbols *dfs; - const NumberingSystem *ns; - } fPtr; - - void doCopyFrom(const SymbolsWrapper &other); - - void doMoveFrom(SymbolsWrapper&& src); - - void doCleanup(); -}; - -// Do not enclose entire Grouper with #ifndef U_HIDE_INTERNAL_API, needed for a protected field -/** @internal */ -class U_I18N_API Grouper : public UMemory { - public: -#ifndef U_HIDE_INTERNAL_API - /** @internal */ - static Grouper forStrategy(UNumberGroupingStrategy grouping); - - /** - * Resolve the values in Properties to a Grouper object. - * @internal - */ - static Grouper forProperties(const DecimalFormatProperties& properties); - - // Future: static Grouper forProperties(DecimalFormatProperties& properties); - - /** @internal */ - Grouper(int16_t grouping1, int16_t grouping2, int16_t minGrouping, UNumberGroupingStrategy strategy) - : fGrouping1(grouping1), - fGrouping2(grouping2), - fMinGrouping(minGrouping), - fStrategy(strategy) {} -#endif // U_HIDE_INTERNAL_API - - /** @internal */ - int16_t getPrimary() const; - - /** @internal */ - int16_t getSecondary() const; - - private: - /** - * The grouping sizes, with the following special values: - *
    - *
  • -1 = no grouping - *
  • -2 = needs locale data - *
  • -4 = fall back to Western grouping if not in locale - *
- */ - int16_t fGrouping1; - int16_t fGrouping2; - - /** - * The minimum grouping size, with the following special values: - *
    - *
  • -2 = needs locale data - *
  • -3 = no less than 2 - *
- */ - int16_t fMinGrouping; - - /** - * The UNumberGroupingStrategy that was used to create this Grouper, or UNUM_GROUPING_COUNT if this - * was not created from a UNumberGroupingStrategy. - */ - UNumberGroupingStrategy fStrategy; - - Grouper() : fGrouping1(-3) {} - - bool isBogus() const { - return fGrouping1 == -3; - } - - /** NON-CONST: mutates the current instance. */ - void setLocaleData(const impl::ParsedPatternInfo &patternInfo, const Locale& locale); - - bool groupAtPosition(int32_t position, const impl::DecimalQuantity &value) const; - - // To allow MacroProps/MicroProps to initialize empty instances: - friend struct MacroProps; - friend struct MicroProps; - - // To allow NumberFormatterImpl to access isBogus() and perform other operations: - friend class NumberFormatterImpl; - - // To allow NumberParserImpl to perform setLocaleData(): - friend class ::icu::numparse::impl::NumberParserImpl; - - // To allow access to the skeleton generation code: - friend class impl::GeneratorHelpers; -}; - -// Do not enclose entire Padder with #ifndef U_HIDE_INTERNAL_API, needed for a protected field -/** @internal */ -class U_I18N_API Padder : public UMemory { - public: -#ifndef U_HIDE_INTERNAL_API - /** @internal */ - static Padder none(); - - /** @internal */ - static Padder codePoints(UChar32 cp, int32_t targetWidth, UNumberFormatPadPosition position); -#endif // U_HIDE_INTERNAL_API - - /** @internal */ - static Padder forProperties(const DecimalFormatProperties& properties); - - private: - UChar32 fWidth; // -3 = error; -2 = bogus; -1 = no padding - union { - struct { - int32_t fCp; - UNumberFormatPadPosition fPosition; - } padding; - UErrorCode errorCode; - } fUnion; - - Padder(UChar32 cp, int32_t width, UNumberFormatPadPosition position); - - Padder(int32_t width); - - Padder(UErrorCode errorCode) : fWidth(-3) { // NOLINT - fUnion.errorCode = errorCode; - } - - Padder() : fWidth(-2) {} // NOLINT - - bool isBogus() const { - return fWidth == -2; - } - - UBool copyErrorTo(UErrorCode &status) const { - if (fWidth == -3) { - status = fUnion.errorCode; - return TRUE; - } - return FALSE; - } - - bool isValid() const { - return fWidth > 0; - } - - int32_t padAndApply(const impl::Modifier &mod1, const impl::Modifier &mod2, - impl::NumberStringBuilder &string, int32_t leftIndex, int32_t rightIndex, - UErrorCode &status) const; - - // To allow MacroProps/MicroProps to initialize empty instances: - friend struct MacroProps; - friend struct MicroProps; - - // To allow NumberFormatterImpl to access isBogus() and perform other operations: - friend class impl::NumberFormatterImpl; - - // To allow access to the skeleton generation code: - friend class impl::GeneratorHelpers; -}; - -// Do not enclose entire MacroProps with #ifndef U_HIDE_INTERNAL_API, needed for a protected field -/** @internal */ -struct U_I18N_API MacroProps : public UMemory { - /** @internal */ - Notation notation; - - /** @internal */ - MeasureUnit unit; // = NoUnit::base(); - - /** @internal */ - MeasureUnit perUnit; // = NoUnit::base(); - - /** @internal */ - Precision precision; // = Precision(); (bogus) - - /** @internal */ - UNumberFormatRoundingMode roundingMode = UNUM_ROUND_HALFEVEN; - - /** @internal */ - Grouper grouper; // = Grouper(); (bogus) - - /** @internal */ - Padder padder; // = Padder(); (bogus) - - /** @internal */ - IntegerWidth integerWidth; // = IntegerWidth(); (bogus) - - /** @internal */ - SymbolsWrapper symbols; - - // UNUM_XYZ_COUNT denotes null (bogus) values. - - /** @internal */ - UNumberUnitWidth unitWidth = UNUM_UNIT_WIDTH_COUNT; - - /** @internal */ - UNumberSignDisplay sign = UNUM_SIGN_COUNT; - - /** @internal */ - UNumberDecimalSeparatorDisplay decimal = UNUM_DECIMAL_SEPARATOR_COUNT; - - /** @internal */ - Scale scale; // = Scale(); (benign value) - - /** @internal */ - const AffixPatternProvider* affixProvider = nullptr; // no ownership - - /** @internal */ - const PluralRules* rules = nullptr; // no ownership - - /** @internal */ - const CurrencySymbols* currencySymbols = nullptr; // no ownership - - /** @internal */ - int32_t threshold = kInternalDefaultThreshold; - - /** @internal Apple addition for */ - bool adjustDoublePrecision = false; - - /** @internal */ - Locale locale; - - // NOTE: Uses default copy and move constructors. - - /** - * Check all members for errors. - * @internal - */ - bool copyErrorTo(UErrorCode &status) const { - return notation.copyErrorTo(status) || precision.copyErrorTo(status) || - padder.copyErrorTo(status) || integerWidth.copyErrorTo(status) || - symbols.copyErrorTo(status) || scale.copyErrorTo(status); - } -}; - -} // namespace impl - -/** - * An abstract base class for specifying settings related to number formatting. This class is implemented by - * {@link UnlocalizedNumberFormatter} and {@link LocalizedNumberFormatter}. This class is not intended for - * public subclassing. - */ -template -class U_I18N_API NumberFormatterSettings { - public: - /** - * Specifies the notation style (simple, scientific, or compact) for rendering numbers. - * - *
    - *
  • Simple notation: "12,300" - *
  • Scientific notation: "1.23E4" - *
  • Compact notation: "12K" - *
- * - *

- * All notation styles will be properly localized with locale data, and all notation styles are compatible with - * units, rounding precisions, and other number formatter settings. - * - *

- * Pass this method the return value of a {@link Notation} factory method. For example: - * - *

-     * NumberFormatter::with().notation(Notation::compactShort())
-     * 
- * - * The default is to use simple notation. - * - * @param notation - * The notation strategy to use. - * @return The fluent chain. - * @see Notation - * @draft ICU 60 - */ - Derived notation(const Notation ¬ation) const &; - - /** - * Overload of notation() for use on an rvalue reference. - * - * @param notation - * The notation strategy to use. - * @return The fluent chain. - * @see #notation - * @draft ICU 62 - */ - Derived notation(const Notation ¬ation) &&; - - /** - * Specifies the unit (unit of measure, currency, or percent) to associate with rendered numbers. - * - *
    - *
  • Unit of measure: "12.3 meters" - *
  • Currency: "$12.30" - *
  • Percent: "12.3%" - *
- * - * All units will be properly localized with locale data, and all units are compatible with notation styles, - * rounding precisions, and other number formatter settings. - * - * Pass this method any instance of {@link MeasureUnit}. For units of measure: - * - *
-     * NumberFormatter::with().unit(MeasureUnit::getMeter())
-     * 
- * - * Currency: - * - *
-     * NumberFormatter::with().unit(CurrencyUnit(u"USD", status))
-     * 
- * - * Percent: - * - *
-     * NumberFormatter::with().unit(NoUnit.percent())
-     * 
- * - * See {@link #perUnit} for information on how to format strings like "5 meters per second". - * - * The default is to render without units (equivalent to NoUnit.base()). - * - * @param unit - * The unit to render. - * @return The fluent chain. - * @see MeasureUnit - * @see Currency - * @see NoUnit - * @see #perUnit - * @draft ICU 60 - */ - Derived unit(const icu::MeasureUnit &unit) const &; - - /** - * Overload of unit() for use on an rvalue reference. - * - * @param unit - * The unit to render. - * @return The fluent chain. - * @see #unit - * @draft ICU 62 - */ - Derived unit(const icu::MeasureUnit &unit) &&; - - /** - * Like unit(), but takes ownership of a pointer. Convenient for use with the MeasureFormat factory - * methods that return pointers that need ownership. - * - * Note: consider using the MeasureFormat factory methods that return by value. - * - * @param unit - * The unit to render. - * @return The fluent chain. - * @see #unit - * @see MeasureUnit - * @draft ICU 60 - */ - Derived adoptUnit(icu::MeasureUnit *unit) const &; - - /** - * Overload of adoptUnit() for use on an rvalue reference. - * - * @param unit - * The unit to render. - * @return The fluent chain. - * @see #adoptUnit - * @draft ICU 62 - */ - Derived adoptUnit(icu::MeasureUnit *unit) &&; - - /** - * Sets a unit to be used in the denominator. For example, to format "3 m/s", pass METER to the unit and SECOND to - * the perUnit. - * - * Pass this method any instance of {@link MeasureUnit}. Example: - * - *
-     * NumberFormatter::with()
-     *      .unit(MeasureUnit::getMeter())
-     *      .perUnit(MeasureUnit::getSecond())
-     * 
- * - * The default is not to display any unit in the denominator. - * - * If a per-unit is specified without a primary unit via {@link #unit}, the behavior is undefined. - * - * @param perUnit - * The unit to render in the denominator. - * @return The fluent chain - * @see #unit - * @draft ICU 61 - */ - Derived perUnit(const icu::MeasureUnit &perUnit) const &; - - /** - * Overload of perUnit() for use on an rvalue reference. - * - * @param perUnit - * The unit to render in the denominator. - * @return The fluent chain. - * @see #perUnit - * @draft ICU 62 - */ - Derived perUnit(const icu::MeasureUnit &perUnit) &&; - - /** - * Like perUnit(), but takes ownership of a pointer. Convenient for use with the MeasureFormat factory - * methods that return pointers that need ownership. - * - * Note: consider using the MeasureFormat factory methods that return by value. - * - * @param perUnit - * The unit to render in the denominator. - * @return The fluent chain. - * @see #perUnit - * @see MeasureUnit - * @draft ICU 61 - */ - Derived adoptPerUnit(icu::MeasureUnit *perUnit) const &; - - /** - * Overload of adoptPerUnit() for use on an rvalue reference. - * - * @param perUnit - * The unit to render in the denominator. - * @return The fluent chain. - * @see #adoptPerUnit - * @draft ICU 62 - */ - Derived adoptPerUnit(icu::MeasureUnit *perUnit) &&; - - /** - * Specifies the rounding precision to use when formatting numbers. - * - *
    - *
  • Round to 3 decimal places: "3.142" - *
  • Round to 3 significant figures: "3.14" - *
  • Round to the closest nickel: "3.15" - *
  • Do not perform rounding: "3.1415926..." - *
- * - *

- * Pass this method the return value of one of the factory methods on {@link Precision}. For example: - * - *

-     * NumberFormatter::with().precision(Precision::fixedFraction(2))
-     * 
- * - *

- * In most cases, the default rounding strategy is to round to 6 fraction places; i.e., - * Precision.maxFraction(6). The exceptions are if compact notation is being used, then the compact - * notation rounding strategy is used (see {@link Notation#compactShort} for details), or if the unit is a currency, - * then standard currency rounding is used, which varies from currency to currency (see {@link Precision#currency} for - * details). - * - * @param precision - * The rounding precision to use. - * @return The fluent chain. - * @see Precision - * @draft ICU 62 - */ - Derived precision(const Precision& precision) const &; - - /** - * Overload of precision() for use on an rvalue reference. - * - * @param precision - * The rounding precision to use. - * @return The fluent chain. - * @see #precision - * @draft ICU 62 - */ - Derived precision(const Precision& precision) &&; - - /** - * Specifies how to determine the direction to round a number when it has more digits than fit in the - * desired precision. When formatting 1.235: - * - *

    - *
  • Ceiling rounding mode with integer precision: "2" - *
  • Half-down rounding mode with 2 fixed fraction digits: "1.23" - *
  • Half-up rounding mode with 2 fixed fraction digits: "1.24" - *
- * - * The default is HALF_EVEN. For more information on rounding mode, see the ICU userguide here: - * - * http://userguide.icu-project.org/formatparse/numbers/rounding-modes - * - * @param roundingMode The rounding mode to use. - * @return The fluent chain. - * @draft ICU 62 - */ - Derived roundingMode(UNumberFormatRoundingMode roundingMode) const &; - - /** - * Overload of roundingMode() for use on an rvalue reference. - * - * @param roundingMode The rounding mode to use. - * @return The fluent chain. - * @see #roundingMode - * @draft ICU 62 - */ - Derived roundingMode(UNumberFormatRoundingMode roundingMode) &&; - - /** - * Specifies the grouping strategy to use when formatting numbers. - * - *
    - *
  • Default grouping: "12,300" and "1,230" - *
  • Grouping with at least 2 digits: "12,300" and "1230" - *
  • No grouping: "12300" and "1230" - *
- * - *

- * The exact grouping widths will be chosen based on the locale. - * - *

- * Pass this method an element from the {@link UNumberGroupingStrategy} enum. For example: - * - *

-     * NumberFormatter::with().grouping(UNUM_GROUPING_MIN2)
-     * 
- * - * The default is to perform grouping according to locale data; most locales, but not all locales, - * enable it by default. - * - * @param strategy - * The grouping strategy to use. - * @return The fluent chain. - * @draft ICU 61 - */ - Derived grouping(UNumberGroupingStrategy strategy) const &; - - /** - * Overload of grouping() for use on an rvalue reference. - * - * @param strategy - * The grouping strategy to use. - * @return The fluent chain. - * @see #grouping - * @draft ICU 62 - */ - Derived grouping(UNumberGroupingStrategy strategy) &&; - - /** - * Specifies the minimum and maximum number of digits to render before the decimal mark. - * - *
    - *
  • Zero minimum integer digits: ".08" - *
  • One minimum integer digit: "0.08" - *
  • Two minimum integer digits: "00.08" - *
- * - *

- * Pass this method the return value of {@link IntegerWidth#zeroFillTo}. For example: - * - *

-     * NumberFormatter::with().integerWidth(IntegerWidth::zeroFillTo(2))
-     * 
- * - * The default is to have one minimum integer digit. - * - * @param style - * The integer width to use. - * @return The fluent chain. - * @see IntegerWidth - * @draft ICU 60 - */ - Derived integerWidth(const IntegerWidth &style) const &; - - /** - * Overload of integerWidth() for use on an rvalue reference. - * - * @param style - * The integer width to use. - * @return The fluent chain. - * @see #integerWidth - * @draft ICU 62 - */ - Derived integerWidth(const IntegerWidth &style) &&; - - /** - * Specifies the symbols (decimal separator, grouping separator, percent sign, numerals, etc.) to use when rendering - * numbers. - * - *
    - *
  • en_US symbols: "12,345.67" - *
  • fr_FR symbols: "12 345,67" - *
  • de_CH symbols: "12’345.67" - *
  • my_MY symbols: "၁၂,၃၄၅.၆၇" - *
- * - *

- * Pass this method an instance of {@link DecimalFormatSymbols}. For example: - * - *

-     * NumberFormatter::with().symbols(DecimalFormatSymbols(Locale("de_CH"), status))
-     * 
- * - *

- * Note: DecimalFormatSymbols automatically chooses the best numbering system based on the locale. - * In the examples above, the first three are using the Latin numbering system, and the fourth is using the Myanmar - * numbering system. - * - *

- * Note: The instance of DecimalFormatSymbols will be copied: changes made to the symbols object - * after passing it into the fluent chain will not be seen. - * - *

- * Note: Calling this method will override any previously specified DecimalFormatSymbols - * or NumberingSystem. - * - *

- * The default is to choose the symbols based on the locale specified in the fluent chain. - * - * @param symbols - * The DecimalFormatSymbols to use. - * @return The fluent chain. - * @see DecimalFormatSymbols - * @draft ICU 60 - */ - Derived symbols(const DecimalFormatSymbols &symbols) const &; - - /** - * Overload of symbols() for use on an rvalue reference. - * - * @param symbols - * The DecimalFormatSymbols to use. - * @return The fluent chain. - * @see #symbols - * @draft ICU 62 - */ - Derived symbols(const DecimalFormatSymbols &symbols) &&; - - /** - * Specifies that the given numbering system should be used when fetching symbols. - * - *

    - *
  • Latin numbering system: "12,345" - *
  • Myanmar numbering system: "၁၂,၃၄၅" - *
  • Math Sans Bold numbering system: "𝟭𝟮,𝟯𝟰𝟱" - *
- * - *

- * Pass this method an instance of {@link NumberingSystem}. For example, to force the locale to always use the Latin - * alphabet numbering system (ASCII digits): - * - *

-     * NumberFormatter::with().adoptSymbols(NumberingSystem::createInstanceByName("latn", status))
-     * 
- * - *

- * Note: Calling this method will override any previously specified DecimalFormatSymbols - * or NumberingSystem. - * - *

- * The default is to choose the best numbering system for the locale. - * - *

- * This method takes ownership of a pointer in order to work nicely with the NumberingSystem factory methods. - * - * @param symbols - * The NumberingSystem to use. - * @return The fluent chain. - * @see NumberingSystem - * @draft ICU 60 - */ - Derived adoptSymbols(NumberingSystem *symbols) const &; - - /** - * Overload of adoptSymbols() for use on an rvalue reference. - * - * @param symbols - * The NumberingSystem to use. - * @return The fluent chain. - * @see #adoptSymbols - * @draft ICU 62 - */ - Derived adoptSymbols(NumberingSystem *symbols) &&; - - /** - * Sets the width of the unit (measure unit or currency). Most common values: - * - *

    - *
  • Short: "$12.00", "12 m" - *
  • ISO Code: "USD 12.00" - *
  • Full name: "12.00 US dollars", "12 meters" - *
- * - *

- * Pass an element from the {@link UNumberUnitWidth} enum to this setter. For example: - * - *

-     * NumberFormatter::with().unitWidth(UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME)
-     * 
- * - *

- * The default is the SHORT width. - * - * @param width - * The width to use when rendering numbers. - * @return The fluent chain - * @see UNumberUnitWidth - * @draft ICU 60 - */ - Derived unitWidth(UNumberUnitWidth width) const &; - - /** - * Overload of unitWidth() for use on an rvalue reference. - * - * @param width - * The width to use when rendering numbers. - * @return The fluent chain. - * @see #unitWidth - * @draft ICU 62 - */ - Derived unitWidth(UNumberUnitWidth width) &&; - - /** - * Sets the plus/minus sign display strategy. Most common values: - * - *

    - *
  • Auto: "123", "-123" - *
  • Always: "+123", "-123" - *
  • Accounting: "$123", "($123)" - *
- * - *

- * Pass an element from the {@link UNumberSignDisplay} enum to this setter. For example: - * - *

-     * NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ALWAYS)
-     * 
- * - *

- * The default is AUTO sign display. - * - * @param style - * The sign display strategy to use when rendering numbers. - * @return The fluent chain - * @see UNumberSignDisplay - * @draft ICU 60 - */ - Derived sign(UNumberSignDisplay style) const &; - - /** - * Overload of sign() for use on an rvalue reference. - * - * @param style - * The sign display strategy to use when rendering numbers. - * @return The fluent chain. - * @see #sign - * @draft ICU 62 - */ - Derived sign(UNumberSignDisplay style) &&; - - /** - * Sets the decimal separator display strategy. This affects integer numbers with no fraction part. Most common - * values: - * - *

    - *
  • Auto: "1" - *
  • Always: "1." - *
- * - *

- * Pass an element from the {@link UNumberDecimalSeparatorDisplay} enum to this setter. For example: - * - *

-     * NumberFormatter::with().decimal(UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_ALWAYS)
-     * 
- * - *

- * The default is AUTO decimal separator display. - * - * @param style - * The decimal separator display strategy to use when rendering numbers. - * @return The fluent chain - * @see UNumberDecimalSeparatorDisplay - * @draft ICU 60 - */ - Derived decimal(UNumberDecimalSeparatorDisplay style) const &; - - /** - * Overload of decimal() for use on an rvalue reference. - * - * @param style - * The decimal separator display strategy to use when rendering numbers. - * @return The fluent chain. - * @see #decimal - * @draft ICU 62 - */ - Derived decimal(UNumberDecimalSeparatorDisplay style) &&; - - /** - * Sets a scale (multiplier) to be used to scale the number by an arbitrary amount before formatting. - * Most common values: - * - *

    - *
  • Multiply by 100: useful for percentages. - *
  • Multiply by an arbitrary value: useful for unit conversions. - *
- * - *

- * Pass an element from a {@link Scale} factory method to this setter. For example: - * - *

-     * NumberFormatter::with().scale(Scale::powerOfTen(2))
-     * 
- * - *

- * The default is to not apply any multiplier. - * - * @param scale - * The scale to apply when rendering numbers. - * @return The fluent chain - * @draft ICU 62 - */ - Derived scale(const Scale &scale) const &; - - /** - * Overload of scale() for use on an rvalue reference. - * - * @param scale - * The scale to apply when rendering numbers. - * @return The fluent chain. - * @see #scale - * @draft ICU 62 - */ - Derived scale(const Scale &scale) &&; - -#ifndef U_HIDE_INTERNAL_API - - /** - * Set the padding strategy. May be added in the future; see #13338. - * - * @internal ICU 60: This API is ICU internal only. - */ - Derived padding(const impl::Padder &padder) const &; - - /** @internal */ - Derived padding(const impl::Padder &padder) &&; - - /** - * Internal fluent setter to support a custom regulation threshold. A threshold of 1 causes the data structures to - * be built right away. A threshold of 0 prevents the data structures from being built. - * - * @internal ICU 60: This API is ICU internal only. - */ - Derived threshold(int32_t threshold) const &; - - /** @internal */ - Derived threshold(int32_t threshold) &&; - - /** - * Internal fluent setter to overwrite the entire macros object. - * - * @internal ICU 60: This API is ICU internal only. - */ - Derived macros(const impl::MacroProps& macros) const &; - - /** @internal */ - Derived macros(const impl::MacroProps& macros) &&; - - /** @internal */ - Derived macros(impl::MacroProps&& macros) const &; - - /** @internal */ - Derived macros(impl::MacroProps&& macros) &&; - -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Creates a skeleton string representation of this number formatter. A skeleton string is a - * locale-agnostic serialized form of a number formatter. - * - * Not all options are capable of being represented in the skeleton string; for example, a - * DecimalFormatSymbols object. If any such option is encountered, the error code is set to - * U_UNSUPPORTED_ERROR. - * - * The returned skeleton is in normalized form, such that two number formatters with equivalent - * behavior should produce the same skeleton. - * - * @return A number skeleton string with behavior corresponding to this number formatter. - * @draft ICU 62 - */ - UnicodeString toSkeleton(UErrorCode& status) const; - - /** - * Returns the current (Un)LocalizedNumberFormatter as a LocalPointer - * wrapping a heap-allocated copy of the current object. - * - * This is equivalent to new-ing the move constructor with a value object - * as the argument. - * - * @return A wrapped (Un)LocalizedNumberFormatter pointer, or a wrapped - * nullptr on failure. - * @draft ICU 64 - */ - LocalPointer clone() const &; - - /** - * Overload of clone for use on an rvalue reference. - * - * @return A wrapped (Un)LocalizedNumberFormatter pointer, or a wrapped - * nullptr on failure. - * @draft ICU 64 - */ - LocalPointer clone() &&; - - /** - * Sets the UErrorCode if an error occurred in the fluent chain. - * Preserves older error codes in the outErrorCode. - * @return TRUE if U_FAILURE(outErrorCode) - * @draft ICU 60 - */ - UBool copyErrorTo(UErrorCode &outErrorCode) const { - if (U_FAILURE(outErrorCode)) { - // Do not overwrite the older error code - return TRUE; - } - fMacros.copyErrorTo(outErrorCode); - return U_FAILURE(outErrorCode); - } - - // NOTE: Uses default copy and move constructors. - - private: - impl::MacroProps fMacros; - - // Don't construct me directly! Use (Un)LocalizedNumberFormatter. - NumberFormatterSettings() = default; - - friend class LocalizedNumberFormatter; - friend class UnlocalizedNumberFormatter; - - // Give NumberRangeFormatter access to the MacroProps - friend void impl::touchRangeLocales(impl::RangeMacroProps& macros); - friend class impl::NumberRangeFormatterImpl; -}; - -/** - * A NumberFormatter that does not yet have a locale. In order to format numbers, a locale must be specified. - * - * Instances of this class are immutable and thread-safe. - * - * @see NumberFormatter - * @draft ICU 60 - */ -class U_I18N_API UnlocalizedNumberFormatter - : public NumberFormatterSettings, public UMemory { - - public: - /** - * Associate the given locale with the number formatter. The locale is used for picking the appropriate symbols, - * formats, and other data for number display. - * - * @param locale - * The locale to use when loading data for number formatting. - * @return The fluent chain. - * @draft ICU 60 - */ - LocalizedNumberFormatter locale(const icu::Locale &locale) const &; - - /** - * Overload of locale() for use on an rvalue reference. - * - * @param locale - * The locale to use when loading data for number formatting. - * @return The fluent chain. - * @see #locale - * @draft ICU 62 - */ - LocalizedNumberFormatter locale(const icu::Locale &locale) &&; - - /** - * Default constructor: puts the formatter into a valid but undefined state. - * - * @draft ICU 62 - */ - UnlocalizedNumberFormatter() = default; - - /** - * Returns a copy of this UnlocalizedNumberFormatter. - * @draft ICU 60 - */ - UnlocalizedNumberFormatter(const UnlocalizedNumberFormatter &other); - - /** - * Move constructor: - * The source UnlocalizedNumberFormatter will be left in a valid but undefined state. - * @draft ICU 62 - */ - UnlocalizedNumberFormatter(UnlocalizedNumberFormatter&& src) U_NOEXCEPT; - - /** - * Copy assignment operator. - * @draft ICU 62 - */ - UnlocalizedNumberFormatter& operator=(const UnlocalizedNumberFormatter& other); - - /** - * Move assignment operator: - * The source UnlocalizedNumberFormatter will be left in a valid but undefined state. - * @draft ICU 62 - */ - UnlocalizedNumberFormatter& operator=(UnlocalizedNumberFormatter&& src) U_NOEXCEPT; - - private: - explicit UnlocalizedNumberFormatter(const NumberFormatterSettings& other); - - explicit UnlocalizedNumberFormatter( - NumberFormatterSettings&& src) U_NOEXCEPT; - - // To give the fluent setters access to this class's constructor: - friend class NumberFormatterSettings; - - // To give NumberFormatter::with() access to this class's constructor: - friend class NumberFormatter; -}; - -/** - * A NumberFormatter that has a locale associated with it; this means .format() methods are available. - * - * Instances of this class are immutable and thread-safe. - * - * @see NumberFormatter - * @draft ICU 60 - */ -class U_I18N_API LocalizedNumberFormatter - : public NumberFormatterSettings, public UMemory { - public: - /** - * Format the given integer number to a string using the settings specified in the NumberFormatter fluent - * setting chain. - * - * @param value - * The number to format. - * @param status - * Set to an ErrorCode if one occurred in the setter chain or during formatting. - * @return A FormattedNumber object; call .toString() to get the string. - * @draft ICU 60 - */ - FormattedNumber formatInt(int64_t value, UErrorCode &status) const; - - /** - * Format the given float or double to a string using the settings specified in the NumberFormatter fluent setting - * chain. - * - * @param value - * The number to format. - * @param status - * Set to an ErrorCode if one occurred in the setter chain or during formatting. - * @return A FormattedNumber object; call .toString() to get the string. - * @draft ICU 60 - */ - FormattedNumber formatDouble(double value, UErrorCode &status) const; - - /** - * Format the given decimal number to a string using the settings - * specified in the NumberFormatter fluent setting chain. - * The syntax of the unformatted number is a "numeric string" - * as defined in the Decimal Arithmetic Specification, available at - * http://speleotrove.com/decimal - * - * @param value - * The number to format. - * @param status - * Set to an ErrorCode if one occurred in the setter chain or during formatting. - * @return A FormattedNumber object; call .toString() to get the string. - * @draft ICU 60 - */ - FormattedNumber formatDecimal(StringPiece value, UErrorCode& status) const; - -#ifndef U_HIDE_INTERNAL_API - - /** - * Set whether DecimalFormatSymbols copy is deep (clone) - * or shallow (pointer copy). Apple - * @internal - */ - void setDFSShallowCopy(UBool shallow); - - /** Internal method. - * @internal - */ - FormattedNumber formatDecimalQuantity(const impl::DecimalQuantity& dq, UErrorCode& status) const; - - /** Internal method for DecimalFormat compatibility. - * @internal - */ - void getAffixImpl(bool isPrefix, bool isNegative, UnicodeString& result, UErrorCode& status) const; - - /** - * Internal method for testing. - * @internal - */ - const impl::NumberFormatterImpl* getCompiled() const; - - /** - * Internal method for testing. - * @internal - */ - int32_t getCallCount() const; - -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Creates a representation of this LocalizedNumberFormat as an icu::Format, enabling the use - * of this number formatter with APIs that need an object of that type, such as MessageFormat. - * - * This API is not intended to be used other than for enabling API compatibility. The formatDouble, - * formatInt, and formatDecimal methods should normally be used when formatting numbers, not the Format - * object returned by this method. - * - * The caller owns the returned object and must delete it when finished. - * - * @return A Format wrapping this LocalizedNumberFormatter. - * @draft ICU 62 - */ - Format* toFormat(UErrorCode& status) const; - - /** - * Default constructor: puts the formatter into a valid but undefined state. - * - * @draft ICU 62 - */ - LocalizedNumberFormatter() = default; - - /** - * Returns a copy of this LocalizedNumberFormatter. - * @draft ICU 60 - */ - LocalizedNumberFormatter(const LocalizedNumberFormatter &other); - - /** - * Move constructor: - * The source LocalizedNumberFormatter will be left in a valid but undefined state. - * @draft ICU 62 - */ - LocalizedNumberFormatter(LocalizedNumberFormatter&& src) U_NOEXCEPT; - - /** - * Copy assignment operator. - * @draft ICU 62 - */ - LocalizedNumberFormatter& operator=(const LocalizedNumberFormatter& other); - - /** - * Move assignment operator: - * The source LocalizedNumberFormatter will be left in a valid but undefined state. - * @draft ICU 62 - */ - LocalizedNumberFormatter& operator=(LocalizedNumberFormatter&& src) U_NOEXCEPT; - -#ifndef U_HIDE_INTERNAL_API - - /** - * This is the core entrypoint to the number formatting pipeline. It performs self-regulation: a static code path - * for the first few calls, and compiling a more efficient data structure if called repeatedly. - * - *

- * This function is very hot, being called in every call to the number formatting pipeline. - * - * @param results - * The results object. This method will mutate it to save the results. - * @param status - * @internal - */ - void formatImpl(impl::UFormattedNumberData *results, UErrorCode &status) const; - -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Destruct this LocalizedNumberFormatter, cleaning up any memory it might own. - * @draft ICU 60 - */ - ~LocalizedNumberFormatter(); - - private: - // Note: fCompiled can't be a LocalPointer because impl::NumberFormatterImpl is defined in an internal - // header, and LocalPointer needs the full class definition in order to delete the instance. - const impl::NumberFormatterImpl* fCompiled {nullptr}; - char fUnsafeCallCount[8] {}; // internally cast to u_atomic_int32_t - - explicit LocalizedNumberFormatter(const NumberFormatterSettings& other); - - explicit LocalizedNumberFormatter(NumberFormatterSettings&& src) U_NOEXCEPT; - - LocalizedNumberFormatter(const impl::MacroProps ¯os, const Locale &locale); - - LocalizedNumberFormatter(impl::MacroProps &¯os, const Locale &locale); - - void clear(); - - void lnfMoveHelper(LocalizedNumberFormatter&& src); - - /** - * @return true if the compiled formatter is available. - */ - bool computeCompiled(UErrorCode& status) const; - - // To give the fluent setters access to this class's constructor: - friend class NumberFormatterSettings; - friend class NumberFormatterSettings; - - // To give UnlocalizedNumberFormatter::locale() access to this class's constructor: - friend class UnlocalizedNumberFormatter; -}; - -/** - * The result of a number formatting operation. This class allows the result to be exported in several data types, - * including a UnicodeString and a FieldPositionIterator. - * - * Instances of this class are immutable and thread-safe. - * - * @draft ICU 60 - */ -class U_I18N_API FormattedNumber : public UMemory, public FormattedValue { - public: - - /** - * Default constructor; makes an empty FormattedNumber. - * @draft ICU 64 - */ - FormattedNumber() - : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {} - - /** - * Move constructor: Leaves the source FormattedNumber in an undefined state. - * @draft ICU 62 - */ - FormattedNumber(FormattedNumber&& src) U_NOEXCEPT; - - /** - * Destruct an instance of FormattedNumber. - * @draft ICU 60 - */ - virtual ~FormattedNumber() U_OVERRIDE; - - /** Copying not supported; use move constructor instead. */ - FormattedNumber(const FormattedNumber&) = delete; - - /** Copying not supported; use move assignment instead. */ - FormattedNumber& operator=(const FormattedNumber&) = delete; - - /** - * Move assignment: Leaves the source FormattedNumber in an undefined state. - * @draft ICU 62 - */ - FormattedNumber& operator=(FormattedNumber&& src) U_NOEXCEPT; - - // Copybrief: this method is older than the parent method - /** - * @copybrief FormattedValue::toString() - * - * For more information, see FormattedValue::toString() - * - * @draft ICU 62 - */ - UnicodeString toString(UErrorCode& status) const U_OVERRIDE; - - // Copydoc: this method is new in ICU 64 - /** @copydoc FormattedValue::toTempString() */ - UnicodeString toTempString(UErrorCode& status) const U_OVERRIDE; - - // Copybrief: this method is older than the parent method - /** - * @copybrief FormattedValue::appendTo() - * - * For more information, see FormattedValue::appendTo() - * - * @draft ICU 62 - */ - Appendable &appendTo(Appendable& appendable, UErrorCode& status) const U_OVERRIDE; - - // Copydoc: this method is new in ICU 64 - /** @copydoc FormattedValue::nextPosition() */ - UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const U_OVERRIDE; - - /** - * Determines the start (inclusive) and end (exclusive) indices of the next occurrence of the given - * field in the output string. This allows you to determine the locations of, for example, - * the integer part, fraction part, or symbols. - * - * This is a simpler but less powerful alternative to {@link #nextPosition}. - * - * If a field occurs just once, calling this method will find that occurrence and return it. If a - * field occurs multiple times, this method may be called repeatedly with the following pattern: - * - *

-     * FieldPosition fpos(UNUM_GROUPING_SEPARATOR_FIELD);
-     * while (formattedNumber.nextFieldPosition(fpos, status)) {
-     *   // do something with fpos.
-     * }
-     * 
- * - * This method is useful if you know which field to query. If you want all available field position - * information, use {@link #nextPosition} or {@link #getAllFieldPositions}. - * - * @param fieldPosition - * Input+output variable. On input, the "field" property determines which field to look - * up, and the "beginIndex" and "endIndex" properties determine where to begin the search. - * On output, the "beginIndex" is set to the beginning of the first occurrence of the - * field with either begin or end indices after the input indices; "endIndex" is set to - * the end of that occurrence of the field (exclusive index). If a field position is not - * found, the method returns FALSE and the FieldPosition may or may not be changed. - * @param status - * Set if an error occurs while populating the FieldPosition. - * @return TRUE if a new occurrence of the field was found; FALSE otherwise. - * @draft ICU 62 - * @see UNumberFormatFields - */ - UBool nextFieldPosition(FieldPosition& fieldPosition, UErrorCode& status) const; - - /** - * Export the formatted number to a FieldPositionIterator. This allows you to determine which characters in - * the output string correspond to which fields, such as the integer part, fraction part, and sign. - * - * This is an alternative to the more powerful #nextPosition() API. - * - * If information on only one field is needed, use #nextPosition() or #nextFieldPosition() instead. - * - * @param iterator - * The FieldPositionIterator to populate with all of the fields present in the formatted number. - * @param status - * Set if an error occurs while populating the FieldPositionIterator. - * @draft ICU 62 - * @see UNumberFormatFields - */ - void getAllFieldPositions(FieldPositionIterator &iterator, UErrorCode &status) const; - -#ifndef U_HIDE_INTERNAL_API - - /** - * Gets the raw DecimalQuantity for plural rule selection. - * @internal - */ - void getDecimalQuantity(impl::DecimalQuantity& output, UErrorCode& status) const; - - /** - * Populates the mutable builder type FieldPositionIteratorHandler. - * @internal - */ - void getAllFieldPositionsImpl(FieldPositionIteratorHandler& fpih, UErrorCode& status) const; - -#endif /* U_HIDE_INTERNAL_API */ - - private: - // Can't use LocalPointer because UFormattedNumberData is forward-declared - const impl::UFormattedNumberData *fData; - - // Error code for the terminal methods - UErrorCode fErrorCode; - - /** - * Internal constructor from data type. Adopts the data pointer. - * @internal - */ - explicit FormattedNumber(impl::UFormattedNumberData *results) - : fData(results), fErrorCode(U_ZERO_ERROR) {} - - explicit FormattedNumber(UErrorCode errorCode) - : fData(nullptr), fErrorCode(errorCode) {} - - // To give LocalizedNumberFormatter format methods access to this class's constructor: - friend class LocalizedNumberFormatter; - - // To give C API access to internals - friend struct impl::UFormattedNumberImpl; -}; - -/** - * See the main description in numberformatter.h for documentation and examples. - * - * @draft ICU 60 - */ -class U_I18N_API NumberFormatter final { - public: - /** - * Call this method at the beginning of a NumberFormatter fluent chain in which the locale is not currently known at - * the call site. - * - * @return An {@link UnlocalizedNumberFormatter}, to be used for chaining. - * @draft ICU 60 - */ - static UnlocalizedNumberFormatter with(); - - /** - * Call this method at the beginning of a NumberFormatter fluent chain in which the locale is known at the call - * site. - * - * @param locale - * The locale from which to load formats and symbols for number formatting. - * @return A {@link LocalizedNumberFormatter}, to be used for chaining. - * @draft ICU 60 - */ - static LocalizedNumberFormatter withLocale(const Locale &locale); - - /** - * Call this method at the beginning of a NumberFormatter fluent chain to create an instance based - * on a given number skeleton string. - * - * It is possible for an error to occur while parsing. See the overload of this method if you are - * interested in the location of a possible parse error. - * - * @param skeleton - * The skeleton string off of which to base this NumberFormatter. - * @param status - * Set to U_NUMBER_SKELETON_SYNTAX_ERROR if the skeleton was invalid. - * @return An UnlocalizedNumberFormatter, to be used for chaining. - * @draft ICU 62 - */ - static UnlocalizedNumberFormatter forSkeleton(const UnicodeString& skeleton, UErrorCode& status); - - /** - * Call this method at the beginning of a NumberFormatter fluent chain to create an instance based - * on a given number skeleton string. - * - * If an error occurs while parsing the skeleton string, the offset into the skeleton string at - * which the error occurred will be saved into the UParseError, if provided. - * - * @param skeleton - * The skeleton string off of which to base this NumberFormatter. - * @param perror - * A parse error struct populated if an error occurs when parsing. - * If no error occurs, perror.offset will be set to -1. - * @param status - * Set to U_NUMBER_SKELETON_SYNTAX_ERROR if the skeleton was invalid. - * @return An UnlocalizedNumberFormatter, to be used for chaining. - * @draft ICU 64 - */ - static UnlocalizedNumberFormatter forSkeleton(const UnicodeString& skeleton, - UParseError& perror, UErrorCode& status); - - /** - * Use factory methods instead of the constructor to create a NumberFormatter. - */ - NumberFormatter() = delete; -}; - -} // namespace number -U_NAMESPACE_END - -#endif // U_HIDE_DRAFT_API - -#endif // __NUMBERFORMATTER_H__ - -#endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numberrangeformatter.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numberrangeformatter.h deleted file mode 100644 index 35b95d88af..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numberrangeformatter.h +++ /dev/null @@ -1,909 +0,0 @@ -// © 2018 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html - -#if !UCONFIG_NO_FORMATTING -#ifndef __NUMBERRANGEFORMATTER_H__ -#define __NUMBERRANGEFORMATTER_H__ - -#include -#include "unicode/appendable.h" -#include "unicode/fieldpos.h" -#include "unicode/formattedvalue.h" -#include "unicode/fpositer.h" -#include "unicode/numberformatter.h" - -#ifndef U_HIDE_DRAFT_API - -/** - * \file - * \brief C++ API: Library for localized formatting of number, currency, and unit ranges. - * - * The main entrypoint to the formatting of ranges of numbers, including currencies and other units of measurement. - *

- * Usage example: - *

- *

- * NumberRangeFormatter::with()
- *     .identityFallback(UNUM_IDENTITY_FALLBACK_APPROXIMATELY_OR_SINGLE_VALUE)
- *     .numberFormatterFirst(NumberFormatter::with().adoptUnit(MeasureUnit::createMeter()))
- *     .numberFormatterSecond(NumberFormatter::with().adoptUnit(MeasureUnit::createKilometer()))
- *     .locale("en-GB")
- *     .formatRange(750, 1.2, status)
- *     .toString(status);
- * // => "750 m - 1.2 km"
- * 
- *

- * Like NumberFormatter, NumberRangeFormatter instances (i.e., LocalizedNumberRangeFormatter - * and UnlocalizedNumberRangeFormatter) are immutable and thread-safe. This API is based on the - * fluent design pattern popularized by libraries such as Google's Guava. - * - * @author Shane Carr - */ - - -/** - * Defines how to merge fields that are identical across the range sign. - * - * @draft ICU 63 - */ -typedef enum UNumberRangeCollapse { - /** - * Use locale data and heuristics to determine how much of the string to collapse. Could end up collapsing none, - * some, or all repeated pieces in a locale-sensitive way. - * - * The heuristics used for this option are subject to change over time. - * - * @draft ICU 63 - */ - UNUM_RANGE_COLLAPSE_AUTO, - - /** - * Do not collapse any part of the number. Example: "3.2 thousand kilograms – 5.3 thousand kilograms" - * - * @draft ICU 63 - */ - UNUM_RANGE_COLLAPSE_NONE, - - /** - * Collapse the unit part of the number, but not the notation, if present. Example: "3.2 thousand – 5.3 thousand - * kilograms" - * - * @draft ICU 63 - */ - UNUM_RANGE_COLLAPSE_UNIT, - - /** - * Collapse any field that is equal across the range sign. May introduce ambiguity on the magnitude of the - * number. Example: "3.2 – 5.3 thousand kilograms" - * - * @draft ICU 63 - */ - UNUM_RANGE_COLLAPSE_ALL -} UNumberRangeCollapse; - -/** - * Defines the behavior when the two numbers in the range are identical after rounding. To programmatically detect - * when the identity fallback is used, compare the lower and upper BigDecimals via FormattedNumber. - * - * @draft ICU 63 - * @see NumberRangeFormatter - */ -typedef enum UNumberRangeIdentityFallback { - /** - * Show the number as a single value rather than a range. Example: "$5" - * - * @draft ICU 63 - */ - UNUM_IDENTITY_FALLBACK_SINGLE_VALUE, - - /** - * Show the number using a locale-sensitive approximation pattern. If the numbers were the same before rounding, - * show the single value. Example: "~$5" or "$5" - * - * @draft ICU 63 - */ - UNUM_IDENTITY_FALLBACK_APPROXIMATELY_OR_SINGLE_VALUE, - - /** - * Show the number using a locale-sensitive approximation pattern. Use the range pattern always, even if the - * inputs are the same. Example: "~$5" - * - * @draft ICU 63 - */ - UNUM_IDENTITY_FALLBACK_APPROXIMATELY, - - /** - * Show the number as the range of two equal values. Use the range pattern always, even if the inputs are the - * same. Example (with RangeCollapse.NONE): "$5 – $5" - * - * @draft ICU 63 - */ - UNUM_IDENTITY_FALLBACK_RANGE -} UNumberRangeIdentityFallback; - -/** - * Used in the result class FormattedNumberRange to indicate to the user whether the numbers formatted in the range - * were equal or not, and whether or not the identity fallback was applied. - * - * @draft ICU 63 - * @see NumberRangeFormatter - */ -typedef enum UNumberRangeIdentityResult { - /** - * Used to indicate that the two numbers in the range were equal, even before any rounding rules were applied. - * - * @draft ICU 63 - * @see NumberRangeFormatter - */ - UNUM_IDENTITY_RESULT_EQUAL_BEFORE_ROUNDING, - - /** - * Used to indicate that the two numbers in the range were equal, but only after rounding rules were applied. - * - * @draft ICU 63 - * @see NumberRangeFormatter - */ - UNUM_IDENTITY_RESULT_EQUAL_AFTER_ROUNDING, - - /** - * Used to indicate that the two numbers in the range were not equal, even after rounding rules were applied. - * - * @draft ICU 63 - * @see NumberRangeFormatter - */ - UNUM_IDENTITY_RESULT_NOT_EQUAL, - -#ifndef U_HIDE_INTERNAL_API - /** - * The number of entries in this enum. - * @internal - */ - UNUM_IDENTITY_RESULT_COUNT -#endif - -} UNumberRangeIdentityResult; - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -namespace number { // icu::number - -// Forward declarations: -class UnlocalizedNumberRangeFormatter; -class LocalizedNumberRangeFormatter; -class FormattedNumberRange; - -namespace impl { - -// Forward declarations: -struct RangeMacroProps; -class DecimalQuantity; -class UFormattedNumberRangeData; -class NumberRangeFormatterImpl; - -} // namespace impl - -/** - * \cond - * Export an explicit template instantiation. See datefmt.h - * (When building DLLs for Windows this is required.) - */ -#if U_PLATFORM == U_PF_WINDOWS && !defined(U_IN_DOXYGEN) -} // namespace icu::number -U_NAMESPACE_END - -template struct U_I18N_API std::atomic< U_NAMESPACE_QUALIFIER number::impl::NumberRangeFormatterImpl*>; - -U_NAMESPACE_BEGIN -namespace number { // icu::number -#endif -/** \endcond */ - -// Other helper classes would go here, but there are none. - -namespace impl { // icu::number::impl - -// Do not enclose entire MacroProps with #ifndef U_HIDE_INTERNAL_API, needed for a protected field -/** @internal */ -struct U_I18N_API RangeMacroProps : public UMemory { - /** @internal */ - UnlocalizedNumberFormatter formatter1; // = NumberFormatter::with(); - - /** @internal */ - UnlocalizedNumberFormatter formatter2; // = NumberFormatter::with(); - - /** @internal */ - bool singleFormatter = true; - - /** @internal */ - UNumberRangeCollapse collapse = UNUM_RANGE_COLLAPSE_AUTO; - - /** @internal */ - UNumberRangeIdentityFallback identityFallback = UNUM_IDENTITY_FALLBACK_APPROXIMATELY; - - /** @internal */ - Locale locale; - - // NOTE: Uses default copy and move constructors. - - /** - * Check all members for errors. - * @internal - */ - bool copyErrorTo(UErrorCode &status) const { - return formatter1.copyErrorTo(status) || formatter2.copyErrorTo(status); - } -}; - -} // namespace impl - -/** - * An abstract base class for specifying settings related to number formatting. This class is implemented by - * {@link UnlocalizedNumberRangeFormatter} and {@link LocalizedNumberRangeFormatter}. This class is not intended for - * public subclassing. - */ -template -class U_I18N_API NumberRangeFormatterSettings { - public: - /** - * Sets the NumberFormatter instance to use for the numbers in the range. The same formatter is applied to both - * sides of the range. - *

- * The NumberFormatter instances must not have a locale applied yet; the locale specified on the - * NumberRangeFormatter will be used. - * - * @param formatter - * The formatter to use for both numbers in the range. - * @return The fluent chain. - * @draft ICU 63 - */ - Derived numberFormatterBoth(const UnlocalizedNumberFormatter &formatter) const &; - - /** - * Overload of numberFormatterBoth() for use on an rvalue reference. - * - * @param formatter - * The formatter to use for both numbers in the range. - * @return The fluent chain. - * @see #numberFormatterBoth - * @draft ICU 63 - */ - Derived numberFormatterBoth(const UnlocalizedNumberFormatter &formatter) &&; - - /** - * Overload of numberFormatterBoth() for use on an rvalue reference. - * - * @param formatter - * The formatter to use for both numbers in the range. - * @return The fluent chain. - * @see #numberFormatterBoth - * @draft ICU 63 - */ - Derived numberFormatterBoth(UnlocalizedNumberFormatter &&formatter) const &; - - /** - * Overload of numberFormatterBoth() for use on an rvalue reference. - * - * @param formatter - * The formatter to use for both numbers in the range. - * @return The fluent chain. - * @see #numberFormatterBoth - * @draft ICU 63 - */ - Derived numberFormatterBoth(UnlocalizedNumberFormatter &&formatter) &&; - - /** - * Sets the NumberFormatter instance to use for the first number in the range. - *

- * The NumberFormatter instances must not have a locale applied yet; the locale specified on the - * NumberRangeFormatter will be used. - * - * @param formatterFirst - * The formatter to use for the first number in the range. - * @return The fluent chain. - * @draft ICU 63 - */ - Derived numberFormatterFirst(const UnlocalizedNumberFormatter &formatterFirst) const &; - - /** - * Overload of numberFormatterFirst() for use on an rvalue reference. - * - * @param formatterFirst - * The formatter to use for the first number in the range. - * @return The fluent chain. - * @see #numberFormatterFirst - * @draft ICU 63 - */ - Derived numberFormatterFirst(const UnlocalizedNumberFormatter &formatterFirst) &&; - - /** - * Overload of numberFormatterFirst() for use on an rvalue reference. - * - * @param formatterFirst - * The formatter to use for the first number in the range. - * @return The fluent chain. - * @see #numberFormatterFirst - * @draft ICU 63 - */ - Derived numberFormatterFirst(UnlocalizedNumberFormatter &&formatterFirst) const &; - - /** - * Overload of numberFormatterFirst() for use on an rvalue reference. - * - * @param formatterFirst - * The formatter to use for the first number in the range. - * @return The fluent chain. - * @see #numberFormatterFirst - * @draft ICU 63 - */ - Derived numberFormatterFirst(UnlocalizedNumberFormatter &&formatterFirst) &&; - - /** - * Sets the NumberFormatter instance to use for the second number in the range. - *

- * The NumberFormatter instances must not have a locale applied yet; the locale specified on the - * NumberRangeFormatter will be used. - * - * @param formatterSecond - * The formatter to use for the second number in the range. - * @return The fluent chain. - * @draft ICU 63 - */ - Derived numberFormatterSecond(const UnlocalizedNumberFormatter &formatterSecond) const &; - - /** - * Overload of numberFormatterSecond() for use on an rvalue reference. - * - * @param formatterSecond - * The formatter to use for the second number in the range. - * @return The fluent chain. - * @see #numberFormatterSecond - * @draft ICU 63 - */ - Derived numberFormatterSecond(const UnlocalizedNumberFormatter &formatterSecond) &&; - - /** - * Overload of numberFormatterSecond() for use on an rvalue reference. - * - * @param formatterSecond - * The formatter to use for the second number in the range. - * @return The fluent chain. - * @see #numberFormatterSecond - * @draft ICU 63 - */ - Derived numberFormatterSecond(UnlocalizedNumberFormatter &&formatterSecond) const &; - - /** - * Overload of numberFormatterSecond() for use on an rvalue reference. - * - * @param formatterSecond - * The formatter to use for the second number in the range. - * @return The fluent chain. - * @see #numberFormatterSecond - * @draft ICU 63 - */ - Derived numberFormatterSecond(UnlocalizedNumberFormatter &&formatterSecond) &&; - - /** - * Sets the aggressiveness of "collapsing" fields across the range separator. Possible values: - *

- *

    - *
  • ALL: "3-5K miles"
  • - *
  • UNIT: "3K - 5K miles"
  • - *
  • NONE: "3K miles - 5K miles"
  • - *
  • AUTO: usually UNIT or NONE, depending on the locale and formatter settings
  • - *
- *

- * The default value is AUTO. - * - * @param collapse - * The collapsing strategy to use for this range. - * @return The fluent chain. - * @draft ICU 63 - */ - Derived collapse(UNumberRangeCollapse collapse) const &; - - /** - * Overload of collapse() for use on an rvalue reference. - * - * @param collapse - * The collapsing strategy to use for this range. - * @return The fluent chain. - * @see #collapse - * @draft ICU 63 - */ - Derived collapse(UNumberRangeCollapse collapse) &&; - - /** - * Sets the behavior when the two sides of the range are the same. This could happen if the same two numbers are - * passed to the formatRange function, or if different numbers are passed to the function but they become the same - * after rounding rules are applied. Possible values: - *

- *

    - *
  • SINGLE_VALUE: "5 miles"
  • - *
  • APPROXIMATELY_OR_SINGLE_VALUE: "~5 miles" or "5 miles", depending on whether the number was the same before - * rounding was applied
  • - *
  • APPROXIMATELY: "~5 miles"
  • - *
  • RANGE: "5-5 miles" (with collapse=UNIT)
  • - *
- *

- * The default value is APPROXIMATELY. - * - * @param identityFallback - * The strategy to use when formatting two numbers that end up being the same. - * @return The fluent chain. - * @draft ICU 63 - */ - Derived identityFallback(UNumberRangeIdentityFallback identityFallback) const &; - - /** - * Overload of identityFallback() for use on an rvalue reference. - * - * @param identityFallback - * The strategy to use when formatting two numbers that end up being the same. - * @return The fluent chain. - * @see #identityFallback - * @draft ICU 63 - */ - Derived identityFallback(UNumberRangeIdentityFallback identityFallback) &&; - - /** - * Returns the current (Un)LocalizedNumberRangeFormatter as a LocalPointer - * wrapping a heap-allocated copy of the current object. - * - * This is equivalent to new-ing the move constructor with a value object - * as the argument. - * - * @return A wrapped (Un)LocalizedNumberRangeFormatter pointer, or a wrapped - * nullptr on failure. - * @draft ICU 64 - */ - LocalPointer clone() const &; - - /** - * Overload of clone for use on an rvalue reference. - * - * @return A wrapped (Un)LocalizedNumberRangeFormatter pointer, or a wrapped - * nullptr on failure. - * @draft ICU 64 - */ - LocalPointer clone() &&; - - /** - * Sets the UErrorCode if an error occurred in the fluent chain. - * Preserves older error codes in the outErrorCode. - * @return TRUE if U_FAILURE(outErrorCode) - * @draft ICU 63 - */ - UBool copyErrorTo(UErrorCode &outErrorCode) const { - if (U_FAILURE(outErrorCode)) { - // Do not overwrite the older error code - return TRUE; - } - fMacros.copyErrorTo(outErrorCode); - return U_FAILURE(outErrorCode); - } - - // NOTE: Uses default copy and move constructors. - - private: - impl::RangeMacroProps fMacros; - - // Don't construct me directly! Use (Un)LocalizedNumberFormatter. - NumberRangeFormatterSettings() = default; - - friend class LocalizedNumberRangeFormatter; - friend class UnlocalizedNumberRangeFormatter; -}; - -/** - * A NumberRangeFormatter that does not yet have a locale. In order to format, a locale must be specified. - * - * Instances of this class are immutable and thread-safe. - * - * @see NumberRangeFormatter - * @draft ICU 63 - */ -class U_I18N_API UnlocalizedNumberRangeFormatter - : public NumberRangeFormatterSettings, public UMemory { - - public: - /** - * Associate the given locale with the number range formatter. The locale is used for picking the - * appropriate symbols, formats, and other data for number display. - * - * @param locale - * The locale to use when loading data for number formatting. - * @return The fluent chain. - * @draft ICU 63 - */ - LocalizedNumberRangeFormatter locale(const icu::Locale &locale) const &; - - /** - * Overload of locale() for use on an rvalue reference. - * - * @param locale - * The locale to use when loading data for number formatting. - * @return The fluent chain. - * @see #locale - * @draft ICU 63 - */ - LocalizedNumberRangeFormatter locale(const icu::Locale &locale) &&; - - /** - * Default constructor: puts the formatter into a valid but undefined state. - * - * @draft ICU 63 - */ - UnlocalizedNumberRangeFormatter() = default; - - /** - * Returns a copy of this UnlocalizedNumberRangeFormatter. - * @draft ICU 63 - */ - UnlocalizedNumberRangeFormatter(const UnlocalizedNumberRangeFormatter &other); - - /** - * Move constructor: - * The source UnlocalizedNumberRangeFormatter will be left in a valid but undefined state. - * @draft ICU 63 - */ - UnlocalizedNumberRangeFormatter(UnlocalizedNumberRangeFormatter&& src) U_NOEXCEPT; - - /** - * Copy assignment operator. - * @draft ICU 63 - */ - UnlocalizedNumberRangeFormatter& operator=(const UnlocalizedNumberRangeFormatter& other); - - /** - * Move assignment operator: - * The source UnlocalizedNumberRangeFormatter will be left in a valid but undefined state. - * @draft ICU 63 - */ - UnlocalizedNumberRangeFormatter& operator=(UnlocalizedNumberRangeFormatter&& src) U_NOEXCEPT; - - private: - explicit UnlocalizedNumberRangeFormatter( - const NumberRangeFormatterSettings& other); - - explicit UnlocalizedNumberRangeFormatter( - NumberRangeFormatterSettings&& src) U_NOEXCEPT; - - // To give the fluent setters access to this class's constructor: - friend class NumberRangeFormatterSettings; - - // To give NumberRangeFormatter::with() access to this class's constructor: - friend class NumberRangeFormatter; -}; - -/** - * A NumberRangeFormatter that has a locale associated with it; this means .formatRange() methods are available. - * - * Instances of this class are immutable and thread-safe. - * - * @see NumberFormatter - * @draft ICU 63 - */ -class U_I18N_API LocalizedNumberRangeFormatter - : public NumberRangeFormatterSettings, public UMemory { - public: - /** - * Format the given Formattables to a string using the settings specified in the NumberRangeFormatter fluent setting - * chain. - * - * @param first - * The first number in the range, usually to the left in LTR locales. - * @param second - * The second number in the range, usually to the right in LTR locales. - * @param status - * Set if an error occurs while formatting. - * @return A FormattedNumberRange object; call .toString() to get the string. - * @draft ICU 63 - */ - FormattedNumberRange formatFormattableRange( - const Formattable& first, const Formattable& second, UErrorCode& status) const; - - /** - * Default constructor: puts the formatter into a valid but undefined state. - * - * @draft ICU 63 - */ - LocalizedNumberRangeFormatter() = default; - - /** - * Returns a copy of this LocalizedNumberRangeFormatter. - * @draft ICU 63 - */ - LocalizedNumberRangeFormatter(const LocalizedNumberRangeFormatter &other); - - /** - * Move constructor: - * The source LocalizedNumberRangeFormatter will be left in a valid but undefined state. - * @draft ICU 63 - */ - LocalizedNumberRangeFormatter(LocalizedNumberRangeFormatter&& src) U_NOEXCEPT; - - /** - * Copy assignment operator. - * @draft ICU 63 - */ - LocalizedNumberRangeFormatter& operator=(const LocalizedNumberRangeFormatter& other); - - /** - * Move assignment operator: - * The source LocalizedNumberRangeFormatter will be left in a valid but undefined state. - * @draft ICU 63 - */ - LocalizedNumberRangeFormatter& operator=(LocalizedNumberRangeFormatter&& src) U_NOEXCEPT; - -#ifndef U_HIDE_INTERNAL_API - - /** - * @param results - * The results object. This method will mutate it to save the results. - * @param equalBeforeRounding - * Whether the number was equal before copying it into a DecimalQuantity. - * Used for determining the identity fallback behavior. - * @param status - * Set if an error occurs while formatting. - * @internal - */ - void formatImpl(impl::UFormattedNumberRangeData& results, bool equalBeforeRounding, - UErrorCode& status) const; - -#endif - - /** - * Destruct this LocalizedNumberRangeFormatter, cleaning up any memory it might own. - * @draft ICU 63 - */ - ~LocalizedNumberRangeFormatter(); - - private: - std::atomic fAtomicFormatter = {}; - - const impl::NumberRangeFormatterImpl* getFormatter(UErrorCode& stauts) const; - - explicit LocalizedNumberRangeFormatter( - const NumberRangeFormatterSettings& other); - - explicit LocalizedNumberRangeFormatter( - NumberRangeFormatterSettings&& src) U_NOEXCEPT; - - LocalizedNumberRangeFormatter(const impl::RangeMacroProps ¯os, const Locale &locale); - - LocalizedNumberRangeFormatter(impl::RangeMacroProps &¯os, const Locale &locale); - - void clear(); - - // To give the fluent setters access to this class's constructor: - friend class NumberRangeFormatterSettings; - friend class NumberRangeFormatterSettings; - - // To give UnlocalizedNumberRangeFormatter::locale() access to this class's constructor: - friend class UnlocalizedNumberRangeFormatter; -}; - -/** - * The result of a number range formatting operation. This class allows the result to be exported in several data types, - * including a UnicodeString and a FieldPositionIterator. - * - * Instances of this class are immutable and thread-safe. - * - * @draft ICU 63 - */ -class U_I18N_API FormattedNumberRange : public UMemory, public FormattedValue { - public: - // Copybrief: this method is older than the parent method - /** - * @copybrief FormattedValue::toString() - * - * For more information, see FormattedValue::toString() - * - * @draft ICU 63 - */ - UnicodeString toString(UErrorCode& status) const U_OVERRIDE; - - // Copydoc: this method is new in ICU 64 - /** @copydoc FormattedValue::toTempString() */ - UnicodeString toTempString(UErrorCode& status) const U_OVERRIDE; - - // Copybrief: this method is older than the parent method - /** - * @copybrief FormattedValue::appendTo() - * - * For more information, see FormattedValue::appendTo() - * - * @draft ICU 63 - */ - Appendable &appendTo(Appendable &appendable, UErrorCode& status) const U_OVERRIDE; - - // Copydoc: this method is new in ICU 64 - /** @copydoc FormattedValue::nextPosition() */ - UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const U_OVERRIDE; - - /** - * Determines the start (inclusive) and end (exclusive) indices of the next occurrence of the given - * field in the output string. This allows you to determine the locations of, for example, - * the integer part, fraction part, or symbols. - * - * If both sides of the range have the same field, the field will occur twice, once before the - * range separator and once after the range separator, if applicable. - * - * If a field occurs just once, calling this method will find that occurrence and return it. If a - * field occurs multiple times, this method may be called repeatedly with the following pattern: - * - *

-     * FieldPosition fpos(UNUM_INTEGER_FIELD);
-     * while (formattedNumberRange.nextFieldPosition(fpos, status)) {
-     *   // do something with fpos.
-     * }
-     * 
- * - * This method is useful if you know which field to query. If you want all available field position - * information, use #getAllFieldPositions(). - * - * @param fieldPosition - * Input+output variable. See {@link FormattedNumber#nextFieldPosition}. - * @param status - * Set if an error occurs while populating the FieldPosition. - * @return TRUE if a new occurrence of the field was found; FALSE otherwise. - * @draft ICU 63 - * @see UNumberFormatFields - */ - UBool nextFieldPosition(FieldPosition& fieldPosition, UErrorCode& status) const; - - /** - * Export the formatted number range to a FieldPositionIterator. This allows you to determine which characters in - * the output string correspond to which fields, such as the integer part, fraction part, and sign. - * - * If information on only one field is needed, use #nextFieldPosition() instead. - * - * @param iterator - * The FieldPositionIterator to populate with all of the fields present in the formatted number. - * @param status - * Set if an error occurs while populating the FieldPositionIterator. - * @draft ICU 63 - * @see UNumberFormatFields - */ - void getAllFieldPositions(FieldPositionIterator &iterator, UErrorCode &status) const; - - /** - * Export the first formatted number as a decimal number. This endpoint - * is useful for obtaining the exact number being printed after scaling - * and rounding have been applied by the number range formatting pipeline. - * - * The syntax of the unformatted number is a "numeric string" - * as defined in the Decimal Arithmetic Specification, available at - * http://speleotrove.com/decimal - * - * @return A decimal representation of the first formatted number. - * @draft ICU 63 - * @see NumberRangeFormatter - * @see #getSecondDecimal - */ - UnicodeString getFirstDecimal(UErrorCode& status) const; - - /** - * Export the second formatted number as a decimal number. This endpoint - * is useful for obtaining the exact number being printed after scaling - * and rounding have been applied by the number range formatting pipeline. - * - * The syntax of the unformatted number is a "numeric string" - * as defined in the Decimal Arithmetic Specification, available at - * http://speleotrove.com/decimal - * - * @return A decimal representation of the second formatted number. - * @draft ICU 63 - * @see NumberRangeFormatter - * @see #getFirstDecimal - */ - UnicodeString getSecondDecimal(UErrorCode& status) const; - - /** - * Returns whether the pair of numbers was successfully formatted as a range or whether an identity fallback was - * used. For example, if the first and second number were the same either before or after rounding occurred, an - * identity fallback was used. - * - * @return An indication the resulting identity situation in the formatted number range. - * @draft ICU 63 - * @see UNumberRangeIdentityFallback - */ - UNumberRangeIdentityResult getIdentityResult(UErrorCode& status) const; - - /** - * Copying not supported; use move constructor instead. - */ - FormattedNumberRange(const FormattedNumberRange&) = delete; - - /** - * Copying not supported; use move assignment instead. - */ - FormattedNumberRange& operator=(const FormattedNumberRange&) = delete; - - /** - * Move constructor: - * Leaves the source FormattedNumberRange in an undefined state. - * @draft ICU 63 - */ - FormattedNumberRange(FormattedNumberRange&& src) U_NOEXCEPT; - - /** - * Move assignment: - * Leaves the source FormattedNumberRange in an undefined state. - * @draft ICU 63 - */ - FormattedNumberRange& operator=(FormattedNumberRange&& src) U_NOEXCEPT; - - /** - * Destruct an instance of FormattedNumberRange, cleaning up any memory it might own. - * @draft ICU 63 - */ - ~FormattedNumberRange(); - - private: - // Can't use LocalPointer because UFormattedNumberRangeData is forward-declared - const impl::UFormattedNumberRangeData *fData; - - // Error code for the terminal methods - UErrorCode fErrorCode; - - /** - * Internal constructor from data type. Adopts the data pointer. - * @internal - */ - explicit FormattedNumberRange(impl::UFormattedNumberRangeData *results) - : fData(results), fErrorCode(U_ZERO_ERROR) {} - - explicit FormattedNumberRange(UErrorCode errorCode) - : fData(nullptr), fErrorCode(errorCode) {} - - void getAllFieldPositionsImpl(FieldPositionIteratorHandler& fpih, UErrorCode& status) const; - - // To give LocalizedNumberRangeFormatter format methods access to this class's constructor: - friend class LocalizedNumberRangeFormatter; -}; - -/** - * See the main description in numberrangeformatter.h for documentation and examples. - * - * @draft ICU 63 - */ -class U_I18N_API NumberRangeFormatter final { - public: - /** - * Call this method at the beginning of a NumberRangeFormatter fluent chain in which the locale is not currently - * known at the call site. - * - * @return An {@link UnlocalizedNumberRangeFormatter}, to be used for chaining. - * @draft ICU 63 - */ - static UnlocalizedNumberRangeFormatter with(); - - /** - * Call this method at the beginning of a NumberRangeFormatter fluent chain in which the locale is known at the call - * site. - * - * @param locale - * The locale from which to load formats and symbols for number range formatting. - * @return A {@link LocalizedNumberRangeFormatter}, to be used for chaining. - * @draft ICU 63 - */ - static LocalizedNumberRangeFormatter withLocale(const Locale &locale); - - /** - * Use factory methods instead of the constructor to create a NumberFormatter. - */ - NumberRangeFormatter() = delete; -}; - -} // namespace number -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // U_HIDE_DRAFT_API - -#endif // __NUMBERRANGEFORMATTER_H__ - -#endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numfmt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numfmt.h deleted file mode 100644 index cf188eef99..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numfmt.h +++ /dev/null @@ -1,1271 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 1997-2016, International Business Machines Corporation and others. -* All Rights Reserved. -******************************************************************************** -* -* File NUMFMT.H -* -* Modification History: -* -* Date Name Description -* 02/19/97 aliu Converted from java. -* 03/18/97 clhuang Updated per C++ implementation. -* 04/17/97 aliu Changed DigitCount to int per code review. -* 07/20/98 stephen JDK 1.2 sync up. Added scientific support. -* Changed naming conventions to match C++ guidelines -* Derecated Java style constants (eg, INTEGER_FIELD) -******************************************************************************** -*/ - -#ifndef NUMFMT_H -#define NUMFMT_H - - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Compatibility APIs for number formatting. - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/unistr.h" -#include "unicode/format.h" -#include "unicode/unum.h" // UNumberFormatStyle -#include "unicode/locid.h" -#include "unicode/stringpiece.h" -#include "unicode/curramt.h" -#include "unicode/udisplaycontext.h" - -class NumberFormatTest; - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class SharedNumberFormat; - -#if !UCONFIG_NO_SERVICE -class NumberFormatFactory; -class StringEnumeration; -#endif - -/** - *

IMPORTANT: New users are strongly encouraged to see if - * numberformatter.h fits their use case. Although not deprecated, this header - * is provided for backwards compatibility only. - * - * Abstract base class for all number formats. Provides interface for - * formatting and parsing a number. Also provides methods for - * determining which locales have number formats, and what their names - * are. - * - * \headerfile unicode/numfmt.h "unicode/numfmt.h" - *

- * NumberFormat helps you to format and parse numbers for any locale. - * Your code can be completely independent of the locale conventions - * for decimal points, thousands-separators, or even the particular - * decimal digits used, or whether the number format is even decimal. - *

- * To format a number for the current Locale, use one of the static - * factory methods: - * \code - * #include - * #include "unicode/numfmt.h" - * #include "unicode/unistr.h" - * #include "unicode/ustream.h" - * using namespace std; - * - * int main() { - * double myNumber = 7.0; - * UnicodeString myString; - * UErrorCode success = U_ZERO_ERROR; - * NumberFormat* nf = NumberFormat::createInstance(success); - * nf->format(myNumber, myString); - * cout << " Example 1: " << myString << endl; - * } - * \endcode - * Note that there are additional factory methods within subclasses of - * NumberFormat. - *

- * If you are formatting multiple numbers, it is more efficient to get - * the format and use it multiple times so that the system doesn't - * have to fetch the information about the local language and country - * conventions multiple times. - * \code - * UnicodeString myString; - * UErrorCode success = U_ZERO_ERROR; - * NumberFormat *nf = NumberFormat::createInstance( success ); - * for (int32_t number: {123, 3333, -1234567}) { - * nf->format(number, myString); - * myString += "; "; - * } - * cout << " Example 2: " << myString << endl; - * \endcode - * To format a number for a different Locale, specify it in the - * call to \c createInstance(). - * \code - * nf = NumberFormat::createInstance(Locale::getFrench(), success); - * \endcode - * You can use a \c NumberFormat to parse also. - * \code - * UErrorCode success; - * Formattable result(-999); // initialized with error code - * nf->parse(myString, result, success); - * \endcode - * Use \c createInstance() to get the normal number format for a \c Locale. - * There are other static factory methods available. Use \c createCurrencyInstance() - * to get the currency number format for that country. Use \c createPercentInstance() - * to get a format for displaying percentages. With this format, a - * fraction from 0.53 is displayed as 53%. - *

- * The type of number formatting can be specified by passing a 'style' parameter to \c createInstance(). - * For example, use\n - * \c createInstance(locale, UNUM_DECIMAL, errorCode) to get the normal number format,\n - * \c createInstance(locale, UNUM_PERCENT, errorCode) to get a format for displaying percentage,\n - * \c createInstance(locale, UNUM_SCIENTIFIC, errorCode) to get a format for displaying scientific number,\n - * \c createInstance(locale, UNUM_CURRENCY, errorCode) to get the currency number format, - * in which the currency is represented by its symbol, for example, "$3.00".\n - * \c createInstance(locale, UNUM_CURRENCY_ISO, errorCode) to get the currency number format, - * in which the currency is represented by its ISO code, for example "USD3.00".\n - * \c createInstance(locale, UNUM_CURRENCY_PLURAL, errorCode) to get the currency number format, - * in which the currency is represented by its full name in plural format, - * for example, "3.00 US dollars" or "1.00 US dollar". - *

- * You can also control the display of numbers with such methods as - * \c getMinimumFractionDigits(). If you want even more control over the - * format or parsing, or want to give your users more control, you can - * try dynamic_casting the \c NumberFormat you get from the factory methods to a - * \c DecimalFormat. This will work for the vast majority of - * countries; just remember to test for NULL in case you - * encounter an unusual one. - *

- * You can also use forms of the parse and format methods with - * \c ParsePosition and \c FieldPosition to allow you to: - *

    - *
  • (a) progressively parse through pieces of a string. - *
  • (b) align the decimal point and other areas. - *
- * For example, you can align numbers in two ways. - *

- * If you are using a monospaced font with spacing for alignment, you - * can pass the \c FieldPosition in your format call, with field = - * \c UNUM_INTEGER_FIELD. On output, \c getEndIndex will be set to the offset - * between the last character of the integer and the decimal. Add - * (desiredSpaceCount - getEndIndex) spaces at the front of the - * string. - *

- * If you are using proportional fonts, instead of padding with - * spaces, measure the width of the string in pixels from the start to - * getEndIndex. Then move the pen by (desiredPixelWidth - - * widthToAlignmentPoint) before drawing the text. It also works - * where there is no decimal, but possibly additional characters at - * the end, e.g. with parentheses in negative numbers: "(12)" for -12. - *

- * User subclasses are not supported. While clients may write - * subclasses, such code will not necessarily work and will not be - * guaranteed to work stably from release to release. - * - * @stable ICU 2.0 - */ -class U_I18N_API NumberFormat : public Format { -public: - /** - * Rounding mode. - * - *

- * For more detail on rounding modes, see: - * http://userguide.icu-project.org/formatparse/numbers/rounding-modes - * - * @stable ICU 2.4 - */ - enum ERoundingMode { - kRoundCeiling, /**< Round towards positive infinity */ - kRoundFloor, /**< Round towards negative infinity */ - kRoundDown, /**< Round towards zero */ - kRoundUp, /**< Round away from zero */ - kRoundHalfEven, /**< Round towards the nearest integer, or - towards the nearest even integer if equidistant */ - kRoundHalfDown, /**< Round towards the nearest integer, or - towards zero if equidistant */ - kRoundHalfUp, /**< Round towards the nearest integer, or - away from zero if equidistant */ - /** - * Return U_FORMAT_INEXACT_ERROR if number does not format exactly. - * @stable ICU 4.8 - */ - kRoundUnnecessary - }; - - /** - * Alignment Field constants used to construct a FieldPosition object. - * Signifies that the position of the integer part or fraction part of - * a formatted number should be returned. - * - * Note: as of ICU 4.4, the values in this enum have been extended to - * support identification of all number format fields, not just those - * pertaining to alignment. - * - * These constants are provided for backwards compatibility only. - * Please use the C style constants defined in the header file unum.h. - * - * @see FieldPosition - * @stable ICU 2.0 - */ - enum EAlignmentFields { - /** @stable ICU 2.0 */ - kIntegerField = UNUM_INTEGER_FIELD, - /** @stable ICU 2.0 */ - kFractionField = UNUM_FRACTION_FIELD, - /** @stable ICU 2.0 */ - kDecimalSeparatorField = UNUM_DECIMAL_SEPARATOR_FIELD, - /** @stable ICU 2.0 */ - kExponentSymbolField = UNUM_EXPONENT_SYMBOL_FIELD, - /** @stable ICU 2.0 */ - kExponentSignField = UNUM_EXPONENT_SIGN_FIELD, - /** @stable ICU 2.0 */ - kExponentField = UNUM_EXPONENT_FIELD, - /** @stable ICU 2.0 */ - kGroupingSeparatorField = UNUM_GROUPING_SEPARATOR_FIELD, - /** @stable ICU 2.0 */ - kCurrencyField = UNUM_CURRENCY_FIELD, - /** @stable ICU 2.0 */ - kPercentField = UNUM_PERCENT_FIELD, - /** @stable ICU 2.0 */ - kPermillField = UNUM_PERMILL_FIELD, - /** @stable ICU 2.0 */ - kSignField = UNUM_SIGN_FIELD, -#ifndef U_HIDE_DRAFT_API - /** @draft ICU 64 */ - kMeasureUnitField = UNUM_MEASURE_UNIT_FIELD, - /** @draft ICU 64 */ - kCompactField = UNUM_COMPACT_FIELD, -#endif // U_HIDE_DRAFT_API - - /** - * These constants are provided for backwards compatibility only. - * Please use the constants defined in the header file unum.h. - */ - /** @stable ICU 2.0 */ - INTEGER_FIELD = UNUM_INTEGER_FIELD, - /** @stable ICU 2.0 */ - FRACTION_FIELD = UNUM_FRACTION_FIELD - }; - - /** - * Destructor. - * @stable ICU 2.0 - */ - virtual ~NumberFormat(); - - /** - * Return true if the given Format objects are semantically equal. - * Objects of different subclasses are considered unequal. - * @return true if the given Format objects are semantically equal. - * @stable ICU 2.0 - */ - virtual UBool operator==(const Format& other) const; - - - using Format::format; - - /** - * Format an object to produce a string. This method handles - * Formattable objects with numeric types. If the Formattable - * object type is not a numeric type, then it returns a failing - * UErrorCode. - * - * @param obj The object to format. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - virtual UnicodeString& format(const Formattable& obj, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& status) const; - - /** - * Format an object to produce a string. This method handles - * Formattable objects with numeric types. If the Formattable - * object type is not a numeric type, then it returns a failing - * UErrorCode. - * - * @param obj The object to format. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. Can be - * NULL. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - virtual UnicodeString& format(const Formattable& obj, - UnicodeString& appendTo, - FieldPositionIterator* posIter, - UErrorCode& status) const; - - /** - * Parse a string to produce an object. This methods handles - * parsing of numeric strings into Formattable objects with numeric - * types. - *

- * Before calling, set parse_pos.index to the offset you want to - * start parsing at in the source. After calling, parse_pos.index - * indicates the position after the successfully parsed text. If - * an error occurs, parse_pos.index is unchanged. - *

- * When parsing, leading whitespace is discarded (with successful - * parse), while trailing whitespace is left as is. - *

- * See Format::parseObject() for more. - * - * @param source The string to be parsed into an object. - * @param result Formattable to be set to the parse result. - * If parse fails, return contents are undefined. - * @param parse_pos The position to start parsing at. Upon return - * this param is set to the position after the - * last character successfully parsed. If the - * source is not parsed successfully, this param - * will remain unchanged. - * @return A newly created Formattable* object, or NULL - * on failure. The caller owns this and should - * delete it when done. - * @stable ICU 2.0 - */ - virtual void parseObject(const UnicodeString& source, - Formattable& result, - ParsePosition& parse_pos) const; - - /** - * Format a double number. These methods call the NumberFormat - * pure virtual format() methods with the default FieldPosition. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - UnicodeString& format( double number, - UnicodeString& appendTo) const; - - /** - * Format a long number. These methods call the NumberFormat - * pure virtual format() methods with the default FieldPosition. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - UnicodeString& format( int32_t number, - UnicodeString& appendTo) const; - - /** - * Format an int64 number. These methods call the NumberFormat - * pure virtual format() methods with the default FieldPosition. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.8 - */ - UnicodeString& format( int64_t number, - UnicodeString& appendTo) const; - - /** - * Format a double number. Concrete subclasses must implement - * these pure virtual methods. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - virtual UnicodeString& format(double number, - UnicodeString& appendTo, - FieldPosition& pos) const = 0; - /** - * Format a double number. By default, the parent function simply - * calls the base class and does not return an error status. - * Therefore, the status may be ignored in some subclasses. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status error status - * @return Reference to 'appendTo' parameter. - * @internal - */ - virtual UnicodeString& format(double number, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode &status) const; - /** - * Format a double number. Subclasses must implement - * this method. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. - * Can be NULL. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - virtual UnicodeString& format(double number, - UnicodeString& appendTo, - FieldPositionIterator* posIter, - UErrorCode& status) const; - /** - * Format a long number. Concrete subclasses must implement - * these pure virtual methods. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.0 - */ - virtual UnicodeString& format(int32_t number, - UnicodeString& appendTo, - FieldPosition& pos) const = 0; - - /** - * Format a long number. Concrete subclasses may override - * this function to provide status return. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status the output status. - * @return Reference to 'appendTo' parameter. - * @internal - */ - virtual UnicodeString& format(int32_t number, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode &status) const; - - /** - * Format an int32 number. Subclasses must implement - * this method. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. - * Can be NULL. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - virtual UnicodeString& format(int32_t number, - UnicodeString& appendTo, - FieldPositionIterator* posIter, - UErrorCode& status) const; - /** - * Format an int64 number. (Not abstract to retain compatibility - * with earlier releases, however subclasses should override this - * method as it just delegates to format(int32_t number...); - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.8 - */ - virtual UnicodeString& format(int64_t number, - UnicodeString& appendTo, - FieldPosition& pos) const; - - /** - * Format an int64 number. (Not abstract to retain compatibility - * with earlier releases, however subclasses should override this - * method as it just delegates to format(int32_t number...); - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @internal - */ - virtual UnicodeString& format(int64_t number, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& status) const; - /** - * Format an int64 number. Subclasses must implement - * this method. - * - * @param number The value to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. - * Can be NULL. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - virtual UnicodeString& format(int64_t number, - UnicodeString& appendTo, - FieldPositionIterator* posIter, - UErrorCode& status) const; - - /** - * Format a decimal number. Subclasses must implement - * this method. The syntax of the unformatted number is a "numeric string" - * as defined in the Decimal Arithmetic Specification, available at - * http://speleotrove.com/decimal - * - * @param number The unformatted number, as a string, to be formatted. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. - * Can be NULL. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - virtual UnicodeString& format(StringPiece number, - UnicodeString& appendTo, - FieldPositionIterator* posIter, - UErrorCode& status) const; - -// Can't use #ifndef U_HIDE_INTERNAL_API because these are virtual methods - - /** - * Format a decimal number. - * The number is a DecimalQuantity wrapper onto a floating point decimal number. - * The default implementation in NumberFormat converts the decimal number - * to a double and formats that. Subclasses of NumberFormat that want - * to specifically handle big decimal numbers must override this method. - * class DecimalFormat does so. - * - * @param number The number, a DecimalQuantity format Decimal Floating Point. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @internal - */ - virtual UnicodeString& format(const number::impl::DecimalQuantity &number, - UnicodeString& appendTo, - FieldPositionIterator* posIter, - UErrorCode& status) const; - - /** - * Format a decimal number. - * The number is a DecimalQuantity wrapper onto a floating point decimal number. - * The default implementation in NumberFormat converts the decimal number - * to a double and formats that. Subclasses of NumberFormat that want - * to specifically handle big decimal numbers must override this method. - * class DecimalFormat does so. - * - * @param number The number, a DecimalQuantity format Decimal Floating Point. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @internal - */ - virtual UnicodeString& format(const number::impl::DecimalQuantity &number, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& status) const; - - /** - * Return a long if possible (e.g. within range LONG_MAX, - * LONG_MAX], and with no decimals), otherwise a double. If - * IntegerOnly is set, will stop at a decimal point (or equivalent; - * e.g. for rational numbers "1 2/3", will stop after the 1). - *

- * If no object can be parsed, index is unchanged, and NULL is - * returned. - *

- * This is a pure virtual which concrete subclasses must implement. - * - * @param text The text to be parsed. - * @param result Formattable to be set to the parse result. - * If parse fails, return contents are undefined. - * @param parsePosition The position to start parsing at on input. - * On output, moved to after the last successfully - * parse character. On parse failure, does not change. - * @stable ICU 2.0 - */ - virtual void parse(const UnicodeString& text, - Formattable& result, - ParsePosition& parsePosition) const = 0; - - /** - * Parse a string as a numeric value, and return a Formattable - * numeric object. This method parses integers only if IntegerOnly - * is set. - * - * @param text The text to be parsed. - * @param result Formattable to be set to the parse result. - * If parse fails, return contents are undefined. - * @param status Output parameter set to a failure error code - * when a failure occurs. - * @see NumberFormat::isParseIntegerOnly - * @stable ICU 2.0 - */ - virtual void parse(const UnicodeString& text, - Formattable& result, - UErrorCode& status) const; - - /** - * Parses text from the given string as a currency amount. Unlike - * the parse() method, this method will attempt to parse a generic - * currency name, searching for a match of this object's locale's - * currency display names, or for a 3-letter ISO currency code. - * This method will fail if this format is not a currency format, - * that is, if it does not contain the currency pattern symbol - * (U+00A4) in its prefix or suffix. - * - * @param text the string to parse - * @param pos input-output position; on input, the position within text - * to match; must have 0 <= pos.getIndex() < text.length(); - * on output, the position after the last matched character. - * If the parse fails, the position in unchanged upon output. - * @return if parse succeeds, a pointer to a newly-created CurrencyAmount - * object (owned by the caller) containing information about - * the parsed currency; if parse fails, this is NULL. - * @stable ICU 49 - */ - virtual CurrencyAmount* parseCurrency(const UnicodeString& text, - ParsePosition& pos) const; - - /** - * Return true if this format will parse numbers as integers - * only. For example in the English locale, with ParseIntegerOnly - * true, the string "1234." would be parsed as the integer value - * 1234 and parsing would stop at the "." character. Of course, - * the exact format accepted by the parse operation is locale - * dependant and determined by sub-classes of NumberFormat. - * @return true if this format will parse numbers as integers - * only. - * @stable ICU 2.0 - */ - UBool isParseIntegerOnly(void) const; - - /** - * Sets whether or not numbers should be parsed as integers only. - * @param value set True, this format will parse numbers as integers - * only. - * @see isParseIntegerOnly - * @stable ICU 2.0 - */ - virtual void setParseIntegerOnly(UBool value); - - /** - * Sets whether lenient parsing should be enabled (it is off by default). - * - * @param enable \c TRUE if lenient parsing should be used, - * \c FALSE otherwise. - * @stable ICU 4.8 - */ - virtual void setLenient(UBool enable); - - /** - * Returns whether lenient parsing is enabled (it is off by default). - * - * @return \c TRUE if lenient parsing is enabled, - * \c FALSE otherwise. - * @see #setLenient - * @stable ICU 4.8 - */ - virtual UBool isLenient(void) const; - - /** - * Create a default style NumberFormat for the current default locale. - * The default formatting style is locale dependent. - *

- * NOTE: New users are strongly encouraged to use - * {@link icu::number::NumberFormatter} instead of NumberFormat. - * @stable ICU 2.0 - */ - static NumberFormat* U_EXPORT2 createInstance(UErrorCode&); - - /** - * Create a default style NumberFormat for the specified locale. - * The default formatting style is locale dependent. - * @param inLocale the given locale. - *

- * NOTE: New users are strongly encouraged to use - * {@link icu::number::NumberFormatter} instead of NumberFormat. - * @stable ICU 2.0 - */ - static NumberFormat* U_EXPORT2 createInstance(const Locale& inLocale, - UErrorCode&); - - /** - * Create a specific style NumberFormat for the specified locale. - *

- * NOTE: New users are strongly encouraged to use - * {@link icu::number::NumberFormatter} instead of NumberFormat. - * @param desiredLocale the given locale. - * @param style the given style. - * @param errorCode Output param filled with success/failure status. - * @return A new NumberFormat instance. - * @stable ICU 4.8 - */ - static NumberFormat* U_EXPORT2 createInstance(const Locale& desiredLocale, - UNumberFormatStyle style, - UErrorCode& errorCode); - -#ifndef U_HIDE_INTERNAL_API - - /** - * ICU use only. - * Creates NumberFormat instance without using the cache. - * @internal - */ - static NumberFormat* internalCreateInstance( - const Locale& desiredLocale, - UNumberFormatStyle style, - UErrorCode& errorCode); - - /** - * ICU use only. - * Returns handle to the shared, cached NumberFormat instance for given - * locale. On success, caller must call removeRef() on returned value - * once it is done with the shared instance. - * @internal - */ - static const SharedNumberFormat* U_EXPORT2 createSharedInstance( - const Locale& inLocale, UNumberFormatStyle style, UErrorCode& status); - -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Returns a currency format for the current default locale. - *

- * NOTE: New users are strongly encouraged to use - * {@link icu::number::NumberFormatter} instead of NumberFormat. - * @stable ICU 2.0 - */ - static NumberFormat* U_EXPORT2 createCurrencyInstance(UErrorCode&); - - /** - * Returns a currency format for the specified locale. - *

- * NOTE: New users are strongly encouraged to use - * {@link icu::number::NumberFormatter} instead of NumberFormat. - * @param inLocale the given locale. - * @stable ICU 2.0 - */ - static NumberFormat* U_EXPORT2 createCurrencyInstance(const Locale& inLocale, - UErrorCode&); - - /** - * Returns a percentage format for the current default locale. - *

- * NOTE: New users are strongly encouraged to use - * {@link icu::number::NumberFormatter} instead of NumberFormat. - * @stable ICU 2.0 - */ - static NumberFormat* U_EXPORT2 createPercentInstance(UErrorCode&); - - /** - * Returns a percentage format for the specified locale. - *

- * NOTE: New users are strongly encouraged to use - * {@link icu::number::NumberFormatter} instead of NumberFormat. - * @param inLocale the given locale. - * @stable ICU 2.0 - */ - static NumberFormat* U_EXPORT2 createPercentInstance(const Locale& inLocale, - UErrorCode&); - - /** - * Returns a scientific format for the current default locale. - *

- * NOTE: New users are strongly encouraged to use - * {@link icu::number::NumberFormatter} instead of NumberFormat. - * @stable ICU 2.0 - */ - static NumberFormat* U_EXPORT2 createScientificInstance(UErrorCode&); - - /** - * Returns a scientific format for the specified locale. - *

- * NOTE: New users are strongly encouraged to use - * {@link icu::number::NumberFormatter} instead of NumberFormat. - * @param inLocale the given locale. - * @stable ICU 2.0 - */ - static NumberFormat* U_EXPORT2 createScientificInstance(const Locale& inLocale, - UErrorCode&); - - /** - * Get the set of Locales for which NumberFormats are installed. - * @param count Output param to receive the size of the locales - * @stable ICU 2.0 - */ - static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); - -#if !UCONFIG_NO_SERVICE - /** - * Register a new NumberFormatFactory. The factory will be adopted. - * Because ICU may choose to cache NumberFormat objects internally, - * this must be called at application startup, prior to any calls to - * NumberFormat::createInstance to avoid undefined behavior. - * @param toAdopt the NumberFormatFactory instance to be adopted - * @param status the in/out status code, no special meanings are assigned - * @return a registry key that can be used to unregister this factory - * @stable ICU 2.6 - */ - static URegistryKey U_EXPORT2 registerFactory(NumberFormatFactory* toAdopt, UErrorCode& status); - - /** - * Unregister a previously-registered NumberFormatFactory using the key returned from the - * register call. Key becomes invalid after a successful call and should not be used again. - * The NumberFormatFactory corresponding to the key will be deleted. - * Because ICU may choose to cache NumberFormat objects internally, - * this should be called during application shutdown, after all calls to - * NumberFormat::createInstance to avoid undefined behavior. - * @param key the registry key returned by a previous call to registerFactory - * @param status the in/out status code, no special meanings are assigned - * @return TRUE if the factory for the key was successfully unregistered - * @stable ICU 2.6 - */ - static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status); - - /** - * Return a StringEnumeration over the locales available at the time of the call, - * including registered locales. - * @return a StringEnumeration over the locales available at the time of the call - * @stable ICU 2.6 - */ - static StringEnumeration* U_EXPORT2 getAvailableLocales(void); -#endif /* UCONFIG_NO_SERVICE */ - - /** - * Returns true if grouping is used in this format. For example, - * in the English locale, with grouping on, the number 1234567 - * might be formatted as "1,234,567". The grouping separator as - * well as the size of each group is locale dependent and is - * determined by sub-classes of NumberFormat. - * @see setGroupingUsed - * @stable ICU 2.0 - */ - UBool isGroupingUsed(void) const; - - /** - * Set whether or not grouping will be used in this format. - * @param newValue True, grouping will be used in this format. - * @see getGroupingUsed - * @stable ICU 2.0 - */ - virtual void setGroupingUsed(UBool newValue); - - /** - * Returns the maximum number of digits allowed in the integer portion of a - * number. - * @return the maximum number of digits allowed in the integer portion of a - * number. - * @see setMaximumIntegerDigits - * @stable ICU 2.0 - */ - int32_t getMaximumIntegerDigits(void) const; - - /** - * Sets the maximum number of digits allowed in the integer portion of a - * number. maximumIntegerDigits must be >= minimumIntegerDigits. If the - * new value for maximumIntegerDigits is less than the current value - * of minimumIntegerDigits, then minimumIntegerDigits will also be set to - * the new value. - * - * @param newValue the new value for the maximum number of digits - * allowed in the integer portion of a number. - * @see getMaximumIntegerDigits - * @stable ICU 2.0 - */ - virtual void setMaximumIntegerDigits(int32_t newValue); - - /** - * Returns the minimum number of digits allowed in the integer portion of a - * number. - * @return the minimum number of digits allowed in the integer portion of a - * number. - * @see setMinimumIntegerDigits - * @stable ICU 2.0 - */ - int32_t getMinimumIntegerDigits(void) const; - - /** - * Sets the minimum number of digits allowed in the integer portion of a - * number. minimumIntegerDigits must be <= maximumIntegerDigits. If the - * new value for minimumIntegerDigits exceeds the current value - * of maximumIntegerDigits, then maximumIntegerDigits will also be set to - * the new value. - * @param newValue the new value to be set. - * @see getMinimumIntegerDigits - * @stable ICU 2.0 - */ - virtual void setMinimumIntegerDigits(int32_t newValue); - - /** - * Returns the maximum number of digits allowed in the fraction portion of a - * number. - * @return the maximum number of digits allowed in the fraction portion of a - * number. - * @see setMaximumFractionDigits - * @stable ICU 2.0 - */ - int32_t getMaximumFractionDigits(void) const; - - /** - * Sets the maximum number of digits allowed in the fraction portion of a - * number. maximumFractionDigits must be >= minimumFractionDigits. If the - * new value for maximumFractionDigits is less than the current value - * of minimumFractionDigits, then minimumFractionDigits will also be set to - * the new value. - * @param newValue the new value to be set. - * @see getMaximumFractionDigits - * @stable ICU 2.0 - */ - virtual void setMaximumFractionDigits(int32_t newValue); - - /** - * Returns the minimum number of digits allowed in the fraction portion of a - * number. - * @return the minimum number of digits allowed in the fraction portion of a - * number. - * @see setMinimumFractionDigits - * @stable ICU 2.0 - */ - int32_t getMinimumFractionDigits(void) const; - - /** - * Sets the minimum number of digits allowed in the fraction portion of a - * number. minimumFractionDigits must be <= maximumFractionDigits. If the - * new value for minimumFractionDigits exceeds the current value - * of maximumFractionDigits, then maximumIntegerDigits will also be set to - * the new value - * @param newValue the new value to be set. - * @see getMinimumFractionDigits - * @stable ICU 2.0 - */ - virtual void setMinimumFractionDigits(int32_t newValue); - - /** - * Sets the currency used to display currency - * amounts. This takes effect immediately, if this format is a - * currency format. If this format is not a currency format, then - * the currency is used if and when this object becomes a - * currency format. - * @param theCurrency a 3-letter ISO code indicating new currency - * to use. It need not be null-terminated. May be the empty - * string or NULL to indicate no currency. - * @param ec input-output error code - * @stable ICU 3.0 - */ - virtual void setCurrency(const char16_t* theCurrency, UErrorCode& ec); - - /** - * Gets the currency used to display currency - * amounts. This may be an empty string for some subclasses. - * @return a 3-letter null-terminated ISO code indicating - * the currency in use, or a pointer to the empty string. - * @stable ICU 2.6 - */ - const char16_t* getCurrency() const; - - /** - * Set a particular UDisplayContext value in the formatter, such as - * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. - * @param value The UDisplayContext value to set. - * @param status Input/output status. If at entry this indicates a failure - * status, the function will do nothing; otherwise this will be - * updated with any new status from the function. - * @stable ICU 53 - */ - virtual void setContext(UDisplayContext value, UErrorCode& status); - - /** - * Get the formatter's UDisplayContext value for the specified UDisplayContextType, - * such as UDISPCTX_TYPE_CAPITALIZATION. - * @param type The UDisplayContextType whose value to return - * @param status Input/output status. If at entry this indicates a failure - * status, the function will do nothing; otherwise this will be - * updated with any new status from the function. - * @return The UDisplayContextValue for the specified type. - * @stable ICU 53 - */ - virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const; - - /** - * Get the rounding mode. This will always return NumberFormat::ERoundingMode::kRoundUnnecessary - * if the subclass does not support rounding. - * @return A rounding mode - * @stable ICU 60 - */ - virtual ERoundingMode getRoundingMode(void) const; - - /** - * Set the rounding mode. If a subclass does not support rounding, this will do nothing. - * @param roundingMode A rounding mode - * @stable ICU 60 - */ - virtual void setRoundingMode(ERoundingMode roundingMode); - - /** - * Group-set several settings used for numbers in date formats. - * Equivalent to: - * setGroupingUsed(FALSE); - * setParseIntegerOnly(TRUE); - * setMinimumFractionDigits(0); - * @internal - */ - virtual void setDateSettings(void); - -public: - - /** - * Return the class ID for this class. This is useful for - * comparing to a return value from getDynamicClassID(). Note that, - * because NumberFormat is an abstract base class, no fully constructed object - * will have the class ID returned by NumberFormat::getStaticClassID(). - * @return The class ID for all objects of this class. - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. - * This method is to implement a simple version of RTTI, since not all - * C++ compilers support genuine RTTI. Polymorphic operator==() and - * clone() methods call this method. - *

- * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const = 0; - -protected: - - /** - * Default constructor for subclass use only. - * @stable ICU 2.0 - */ - NumberFormat(); - - /** - * Copy constructor. - * @stable ICU 2.0 - */ - NumberFormat(const NumberFormat&); - - /** - * Assignment operator. - * @stable ICU 2.0 - */ - NumberFormat& operator=(const NumberFormat&); - - /** - * Returns the currency in effect for this formatter. Subclasses - * should override this method as needed. Unlike getCurrency(), - * this method should never return "". - * @result output parameter for null-terminated result, which must - * have a capacity of at least 4 - * @internal - */ - virtual void getEffectiveCurrency(char16_t* result, UErrorCode& ec) const; - -#ifndef U_HIDE_INTERNAL_API - /** - * Creates the specified number format style of the desired locale. - * If mustBeDecimalFormat is TRUE, then the returned pointer is - * either a DecimalFormat or it is NULL. - * @internal - */ - static NumberFormat* makeInstance(const Locale& desiredLocale, - UNumberFormatStyle style, - UBool mustBeDecimalFormat, - UErrorCode& errorCode); -#endif /* U_HIDE_INTERNAL_API */ - -private: - - static UBool isStyleSupported(UNumberFormatStyle style); - - /** - * Creates the specified decimal format style of the desired locale. - * @param desiredLocale the given locale. - * @param style the given style. - * @param errorCode Output param filled with success/failure status. - * @return A new NumberFormat instance. - */ - static NumberFormat* makeInstance(const Locale& desiredLocale, - UNumberFormatStyle style, - UErrorCode& errorCode); - - UBool fGroupingUsed; - int32_t fMaxIntegerDigits; - int32_t fMinIntegerDigits; - int32_t fMaxFractionDigits; - int32_t fMinFractionDigits; - - protected: - /** \internal */ - static const int32_t gDefaultMaxIntegerDigits; - /** \internal */ - static const int32_t gDefaultMinIntegerDigits; - - private: - UBool fParseIntegerOnly; - UBool fLenient; // TRUE => lenient parse is enabled - - // ISO currency code - char16_t fCurrency[4]; - - UDisplayContext fCapitalizationContext; - - friend class ICUNumberFormatFactory; // access to makeInstance - friend class ICUNumberFormatService; - friend class ::NumberFormatTest; // access to isStyleSupported() -}; - -#if !UCONFIG_NO_SERVICE -/** - * A NumberFormatFactory is used to register new number formats. The factory - * should be able to create any of the predefined formats for each locale it - * supports. When registered, the locales it supports extend or override the - * locale already supported by ICU. - * - * @stable ICU 2.6 - */ -class U_I18N_API NumberFormatFactory : public UObject { -public: - - /** - * Destructor - * @stable ICU 3.0 - */ - virtual ~NumberFormatFactory(); - - /** - * Return true if this factory will be visible. Default is true. - * If not visible, the locales supported by this factory will not - * be listed by getAvailableLocales. - * @stable ICU 2.6 - */ - virtual UBool visible(void) const = 0; - - /** - * Return the locale names directly supported by this factory. The number of names - * is returned in count; - * @stable ICU 2.6 - */ - virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const = 0; - - /** - * Return a number format of the appropriate type. If the locale - * is not supported, return null. If the locale is supported, but - * the type is not provided by this service, return null. Otherwise - * return an appropriate instance of NumberFormat. - * @stable ICU 2.6 - */ - virtual NumberFormat* createFormat(const Locale& loc, UNumberFormatStyle formatType) = 0; -}; - -/** - * A NumberFormatFactory that supports a single locale. It can be visible or invisible. - * @stable ICU 2.6 - */ -class U_I18N_API SimpleNumberFormatFactory : public NumberFormatFactory { -protected: - /** - * True if the locale supported by this factory is visible. - * @stable ICU 2.6 - */ - const UBool _visible; - - /** - * The locale supported by this factory, as a UnicodeString. - * @stable ICU 2.6 - */ - UnicodeString _id; - -public: - /** - * @stable ICU 2.6 - */ - SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE); - - /** - * @stable ICU 3.0 - */ - virtual ~SimpleNumberFormatFactory(); - - /** - * @stable ICU 2.6 - */ - virtual UBool visible(void) const; - - /** - * @stable ICU 2.6 - */ - virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const; -}; -#endif /* #if !UCONFIG_NO_SERVICE */ - -// ------------------------------------- - -inline UBool -NumberFormat::isParseIntegerOnly() const -{ - return fParseIntegerOnly; -} - -inline UBool -NumberFormat::isLenient() const -{ - return fLenient; -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _NUMFMT -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numsys.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numsys.h deleted file mode 100644 index fc74fce797..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/numsys.h +++ /dev/null @@ -1,216 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2010-2014, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************************* -* -* -* File NUMSYS.H -* -* Modification History:* -* Date Name Description -* -******************************************************************************** -*/ - -#ifndef NUMSYS -#define NUMSYS - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: NumberingSystem object - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/format.h" -#include "unicode/uobject.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -// can't be #ifndef U_HIDE_INTERNAL_API; needed for char[] field size -/** - * Size of a numbering system name. - * @internal - */ -constexpr const size_t kInternalNumSysNameCapacity = 8; - -/** - * Defines numbering systems. A numbering system describes the scheme by which - * numbers are to be presented to the end user. In its simplest form, a numbering - * system describes the set of digit characters that are to be used to display - * numbers, such as Western digits, Thai digits, Arabic-Indic digits, etc., in a - * positional numbering system with a specified radix (typically 10). - * More complicated numbering systems are algorithmic in nature, and require use - * of an RBNF formatter ( rule based number formatter ), in order to calculate - * the characters to be displayed for a given number. Examples of algorithmic - * numbering systems include Roman numerals, Chinese numerals, and Hebrew numerals. - * Formatting rules for many commonly used numbering systems are included in - * the ICU package, based on the numbering system rules defined in CLDR. - * Alternate numbering systems can be specified to a locale by using the - * numbers locale keyword. - */ - -class U_I18N_API NumberingSystem : public UObject { -public: - - /** - * Default Constructor. - * - * @stable ICU 4.2 - */ - NumberingSystem(); - - /** - * Copy constructor. - * @stable ICU 4.2 - */ - NumberingSystem(const NumberingSystem& other); - - /** - * Destructor. - * @stable ICU 4.2 - */ - virtual ~NumberingSystem(); - - /** - * Create the default numbering system associated with the specified locale. - * @param inLocale The given locale. - * @param status ICU status - * @stable ICU 4.2 - */ - static NumberingSystem* U_EXPORT2 createInstance(const Locale & inLocale, UErrorCode& status); - - /** - * Create the default numbering system associated with the default locale. - * @stable ICU 4.2 - */ - static NumberingSystem* U_EXPORT2 createInstance(UErrorCode& status); - - /** - * Create a numbering system using the specified radix, type, and description. - * @param radix The radix (base) for this numbering system. - * @param isAlgorithmic TRUE if the numbering system is algorithmic rather than numeric. - * @param description The string representing the set of digits used in a numeric system, or the name of the RBNF - * ruleset to be used in an algorithmic system. - * @param status ICU status - * @stable ICU 4.2 - */ - static NumberingSystem* U_EXPORT2 createInstance(int32_t radix, UBool isAlgorithmic, const UnicodeString& description, UErrorCode& status ); - - /** - * Return a StringEnumeration over all the names of numbering systems known to ICU. - * The numbering system names will be in alphabetical (invariant) order. - * - * The returned StringEnumeration is owned by the caller, who must delete it when - * finished with it. - * - * @stable ICU 4.2 - */ - static StringEnumeration * U_EXPORT2 getAvailableNames(UErrorCode& status); - - /** - * Create a numbering system from one of the predefined numbering systems specified - * by CLDR and known to ICU, such as "latn", "arabext", or "hanidec"; the full list - * is returned by unumsys_openAvailableNames. Note that some of the names listed at - * http://unicode.org/repos/cldr/tags/latest/common/bcp47/number.xml - e.g. - * default, native, traditional, finance - do not identify specific numbering systems, - * but rather key values that may only be used as part of a locale, which in turn - * defines how they are mapped to a specific numbering system such as "latn" or "hant". - * - * @param name The name of the numbering system. - * @param status ICU status; set to U_UNSUPPORTED_ERROR if numbering system not found. - * @return The NumberingSystem instance, or nullptr if not found. - * @stable ICU 4.2 - */ - static NumberingSystem* U_EXPORT2 createInstanceByName(const char* name, UErrorCode& status); - - - /** - * Returns the radix of this numbering system. Simple positional numbering systems - * typically have radix 10, but might have a radix of e.g. 16 for hexadecimal. The - * radix is less well-defined for non-positional algorithmic systems. - * @stable ICU 4.2 - */ - int32_t getRadix() const; - - /** - * Returns the name of this numbering system if it was created using one of the predefined names - * known to ICU. Otherwise, returns NULL. - * The predefined names are identical to the numbering system names as defined by - * the BCP47 definition in Unicode CLDR. - * See also, http://www.unicode.org/repos/cldr/tags/latest/common/bcp47/number.xml - * @stable ICU 4.6 - */ - const char * getName() const; - - /** - * Returns the description string of this numbering system. For simple - * positional systems this is the ordered string of digits (with length matching - * the radix), e.g. "\u3007\u4E00\u4E8C\u4E09\u56DB\u4E94\u516D\u4E03\u516B\u4E5D" - * for "hanidec"; it would be "0123456789ABCDEF" for hexadecimal. For - * algorithmic systems this is the name of the RBNF ruleset used for formatting, - * e.g. "zh/SpelloutRules/%spellout-cardinal" for "hans" or "%greek-upper" for - * "grek". - * @stable ICU 4.2 - */ - virtual UnicodeString getDescription() const; - - - - /** - * Returns TRUE if the given numbering system is algorithmic - * - * @return TRUE if the numbering system is algorithmic. - * Otherwise, return FALSE. - * @stable ICU 4.2 - */ - UBool isAlgorithmic() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 4.2 - * - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 4.2 - */ - virtual UClassID getDynamicClassID() const; - - -private: - UnicodeString desc; - int32_t radix; - UBool algorithmic; - char name[kInternalNumSysNameCapacity+1]; - - void setRadix(int32_t radix); - - void setAlgorithmic(UBool algorithmic); - - void setDesc(const UnicodeString &desc); - - void setName(const char* name); - - static UBool isValidDigitString(const UnicodeString &str); - - UBool hasContiguousDecimalDigits() const; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _NUMSYS -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/parseerr.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/parseerr.h deleted file mode 100644 index c23cc273b8..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/parseerr.h +++ /dev/null @@ -1,94 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1999-2005, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* Date Name Description -* 03/14/00 aliu Creation. -* 06/27/00 aliu Change from C++ class to C struct -********************************************************************** -*/ -#ifndef PARSEERR_H -#define PARSEERR_H - -#include "unicode/utypes.h" - - -/** - * \file - * \brief C API: Parse Error Information - */ -/** - * The capacity of the context strings in UParseError. - * @stable ICU 2.0 - */ -enum { U_PARSE_CONTEXT_LEN = 16 }; - -/** - * A UParseError struct is used to returned detailed information about - * parsing errors. It is used by ICU parsing engines that parse long - * rules, patterns, or programs, where the text being parsed is long - * enough that more information than a UErrorCode is needed to - * localize the error. - * - *

The line, offset, and context fields are optional; parsing - * engines may choose not to use to use them. - * - *

The preContext and postContext strings include some part of the - * context surrounding the error. If the source text is "let for=7" - * and "for" is the error (e.g., because it is a reserved word), then - * some examples of what a parser might produce are the following: - * - *

- * preContext   postContext
- * ""           ""            The parser does not support context
- * "let "       "=7"          Pre- and post-context only
- * "let "       "for=7"       Pre- and post-context and error text
- * ""           "for"         Error text only
- * 
- * - *

Examples of engines which use UParseError (or may use it in the - * future) are Transliterator, RuleBasedBreakIterator, and - * RegexPattern. - * - * @stable ICU 2.0 - */ -typedef struct UParseError { - - /** - * The line on which the error occurred. If the parser uses this - * field, it sets it to the line number of the source text line on - * which the error appears, which will be a value >= 1. If the - * parse does not support line numbers, the value will be <= 0. - * @stable ICU 2.0 - */ - int32_t line; - - /** - * The character offset to the error. If the line field is >= 1, - * then this is the offset from the start of the line. Otherwise, - * this is the offset from the start of the text. If the parser - * does not support this field, it will have a value < 0. - * @stable ICU 2.0 - */ - int32_t offset; - - /** - * Textual context before the error. Null-terminated. The empty - * string if not supported by parser. - * @stable ICU 2.0 - */ - UChar preContext[U_PARSE_CONTEXT_LEN]; - - /** - * The error itself and/or textual context after the error. - * Null-terminated. The empty string if not supported by parser. - * @stable ICU 2.0 - */ - UChar postContext[U_PARSE_CONTEXT_LEN]; - -} UParseError; - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/parsepos.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/parsepos.h deleted file mode 100644 index e3d7d778ac..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/parsepos.h +++ /dev/null @@ -1,234 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -* Copyright (C) 1997-2005, International Business Machines Corporation and others. All Rights Reserved. -******************************************************************************* -* -* File PARSEPOS.H -* -* Modification History: -* -* Date Name Description -* 07/09/97 helena Converted from java. -* 07/17/98 stephen Added errorIndex support. -* 05/11/99 stephen Cleaned up. -******************************************************************************* -*/ - -#ifndef PARSEPOS_H -#define PARSEPOS_H - -#include "unicode/utypes.h" -#include "unicode/uobject.h" - - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * \file - * \brief C++ API: Canonical Iterator - */ -/** - * ParsePosition is a simple class used by Format - * and its subclasses to keep track of the current position during parsing. - * The parseObject method in the various Format - * classes requires a ParsePosition object as an argument. - * - *

- * By design, as you parse through a string with different formats, - * you can use the same ParsePosition, since the index parameter - * records the current position. - * - * The ParsePosition class is not suitable for subclassing. - * - * @version 1.3 10/30/97 - * @author Mark Davis, Helena Shih - * @see java.text.Format - */ - -class U_COMMON_API ParsePosition : public UObject { -public: - /** - * Default constructor, the index starts with 0 as default. - * @stable ICU 2.0 - */ - ParsePosition() - : UObject(), - index(0), - errorIndex(-1) - {} - - /** - * Create a new ParsePosition with the given initial index. - * @param newIndex the new text offset. - * @stable ICU 2.0 - */ - ParsePosition(int32_t newIndex) - : UObject(), - index(newIndex), - errorIndex(-1) - {} - - /** - * Copy constructor - * @param copy the object to be copied from. - * @stable ICU 2.0 - */ - ParsePosition(const ParsePosition& copy) - : UObject(copy), - index(copy.index), - errorIndex(copy.errorIndex) - {} - - /** - * Destructor - * @stable ICU 2.0 - */ - virtual ~ParsePosition(); - - /** - * Assignment operator - * @stable ICU 2.0 - */ - inline ParsePosition& operator=(const ParsePosition& copy); - - /** - * Equality operator. - * @return TRUE if the two parse positions are equal, FALSE otherwise. - * @stable ICU 2.0 - */ - inline UBool operator==(const ParsePosition& that) const; - - /** - * Equality operator. - * @return TRUE if the two parse positions are not equal, FALSE otherwise. - * @stable ICU 2.0 - */ - inline UBool operator!=(const ParsePosition& that) const; - - /** - * Clone this object. - * Clones can be used concurrently in multiple threads. - * If an error occurs, then NULL is returned. - * The caller must delete the clone. - * - * @return a clone of this object - * - * @see getDynamicClassID - * @stable ICU 2.8 - */ - ParsePosition *clone() const; - - /** - * Retrieve the current parse position. On input to a parse method, this - * is the index of the character at which parsing will begin; on output, it - * is the index of the character following the last character parsed. - * @return the current index. - * @stable ICU 2.0 - */ - inline int32_t getIndex(void) const; - - /** - * Set the current parse position. - * @param index the new index. - * @stable ICU 2.0 - */ - inline void setIndex(int32_t index); - - /** - * Set the index at which a parse error occurred. Formatters - * should set this before returning an error code from their - * parseObject method. The default value is -1 if this is not - * set. - * @stable ICU 2.0 - */ - inline void setErrorIndex(int32_t ei); - - /** - * Retrieve the index at which an error occurred, or -1 if the - * error index has not been set. - * @stable ICU 2.0 - */ - inline int32_t getErrorIndex(void) const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.2 - */ - virtual UClassID getDynamicClassID() const; - -private: - /** - * Input: the place you start parsing. - *
Output: position where the parse stopped. - * This is designed to be used serially, - * with each call setting index up for the next one. - */ - int32_t index; - - /** - * The index at which a parse error occurred. - */ - int32_t errorIndex; - -}; - -inline ParsePosition& -ParsePosition::operator=(const ParsePosition& copy) -{ - index = copy.index; - errorIndex = copy.errorIndex; - return *this; -} - -inline UBool -ParsePosition::operator==(const ParsePosition& copy) const -{ - if(index != copy.index || errorIndex != copy.errorIndex) - return FALSE; - else - return TRUE; -} - -inline UBool -ParsePosition::operator!=(const ParsePosition& copy) const -{ - return !operator==(copy); -} - -inline int32_t -ParsePosition::getIndex() const -{ - return index; -} - -inline void -ParsePosition::setIndex(int32_t offset) -{ - this->index = offset; -} - -inline int32_t -ParsePosition::getErrorIndex() const -{ - return errorIndex; -} - -inline void -ParsePosition::setErrorIndex(int32_t ei) -{ - this->errorIndex = ei; -} -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/platform.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/platform.h deleted file mode 100644 index a3623f5da6..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/platform.h +++ /dev/null @@ -1,855 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1997-2016, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* -* FILE NAME : platform.h -* -* Date Name Description -* 05/13/98 nos Creation (content moved here from ptypes.h). -* 03/02/99 stephen Added AS400 support. -* 03/30/99 stephen Added Linux support. -* 04/13/99 stephen Reworked for autoconf. -****************************************************************************** -*/ - -#ifndef _PLATFORM_H -#define _PLATFORM_H - -#include "unicode/uconfig.h" -#include "unicode/uvernum.h" - -/** - * \file - * \brief Basic types for the platform. - * - * This file used to be generated by autoconf/configure. - * Starting with ICU 49, platform.h is a normal source file, - * to simplify cross-compiling and working with non-autoconf/make build systems. - * - * When a value in this file does not work on a platform, then please - * try to derive it from the U_PLATFORM value - * (for which we might need a new value constant in rare cases) - * and/or from other macros that are predefined by the compiler - * or defined in standard (POSIX or platform or compiler) headers. - * - * As a temporary workaround, you can add an explicit \#define for some macros - * before it is first tested, or add an equivalent -D macro definition - * to the compiler's command line. - * - * Note: Some compilers provide ways to show the predefined macros. - * For example, with gcc you can compile an empty .c file and have the compiler - * print the predefined macros with - * \code - * gcc -E -dM -x c /dev/null | sort - * \endcode - * (You can provide an actual empty .c file rather than /dev/null. - * -x c++ is for C++.) - */ - -/** - * Define some things so that they can be documented. - * @internal - */ -#ifdef U_IN_DOXYGEN -/* - * Problem: "platform.h:335: warning: documentation for unknown define U_HAVE_STD_STRING found." means that U_HAVE_STD_STRING is not documented. - * Solution: #define any defines for non @internal API here, so that they are visible in the docs. If you just set PREDEFINED in Doxyfile.in, they won't be documented. - */ - -/* None for now. */ -#endif - -/** - * \def U_PLATFORM - * The U_PLATFORM macro defines the platform we're on. - * - * We used to define one different, value-less macro per platform. - * That made it hard to know the set of relevant platforms and macros, - * and hard to deal with variants of platforms. - * - * Starting with ICU 49, we define platforms as numeric macros, - * with ranges of values for related platforms and their variants. - * The U_PLATFORM macro is set to one of these values. - * - * Historical note from the Solaris Wikipedia article: - * AT&T and Sun collaborated on a project to merge the most popular Unix variants - * on the market at that time: BSD, System V, and Xenix. - * This became Unix System V Release 4 (SVR4). - * - * @internal - */ - -/** Unknown platform. @internal */ -#define U_PF_UNKNOWN 0 -/** Windows @internal */ -#define U_PF_WINDOWS 1000 -/** MinGW. Windows, calls to Win32 API, but using GNU gcc and binutils. @internal */ -#define U_PF_MINGW 1800 -/** - * Cygwin. Windows, calls to cygwin1.dll for Posix functions, - * using MSVC or GNU gcc and binutils. - * @internal - */ -#define U_PF_CYGWIN 1900 -/* Reserve 2000 for U_PF_UNIX? */ -/** HP-UX is based on UNIX System V. @internal */ -#define U_PF_HPUX 2100 -/** Solaris is a Unix operating system based on SVR4. @internal */ -#define U_PF_SOLARIS 2600 -/** BSD is a UNIX operating system derivative. @internal */ -#define U_PF_BSD 3000 -/** AIX is based on UNIX System V Releases and 4.3 BSD. @internal */ -#define U_PF_AIX 3100 -/** IRIX is based on UNIX System V with BSD extensions. @internal */ -#define U_PF_IRIX 3200 -/** - * Darwin is a POSIX-compliant operating system, composed of code developed by Apple, - * as well as code derived from NeXTSTEP, BSD, and other projects, - * built around the Mach kernel. - * Darwin forms the core set of components upon which Mac OS X, Apple TV, and iOS are based. - * (Original description modified from WikiPedia.) - * @internal - */ -#define U_PF_DARWIN 3500 -/** iPhone OS (iOS) is a derivative of Mac OS X. @internal */ -#define U_PF_IPHONE 3550 -/** QNX is a commercial Unix-like real-time operating system related to BSD. @internal */ -#define U_PF_QNX 3700 -/** Linux is a Unix-like operating system. @internal */ -#define U_PF_LINUX 4000 -/** - * Native Client is pretty close to Linux. - * See https://developer.chrome.com/native-client and - * http://www.chromium.org/nativeclient - * @internal - */ -#define U_PF_BROWSER_NATIVE_CLIENT 4020 -/** Android is based on Linux. @internal */ -#define U_PF_ANDROID 4050 -/** Fuchsia is a POSIX-ish platform. @internal */ -#define U_PF_FUCHSIA 4100 -/* Maximum value for Linux-based platform is 4499 */ -/** z/OS is the successor to OS/390 which was the successor to MVS. @internal */ -#define U_PF_OS390 9000 -/** "IBM i" is the current name of what used to be i5/OS and earlier OS/400. @internal */ -#define U_PF_OS400 9400 - -#ifdef U_PLATFORM - /* Use the predefined value. */ -#elif defined(__MINGW32__) -# define U_PLATFORM U_PF_MINGW -#elif defined(__CYGWIN__) -# define U_PLATFORM U_PF_CYGWIN -#elif defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) -# define U_PLATFORM U_PF_WINDOWS -#elif defined(__ANDROID__) -# define U_PLATFORM U_PF_ANDROID - /* Android wchar_t support depends on the API level. */ -# include -#elif defined(__pnacl__) || defined(__native_client__) -# define U_PLATFORM U_PF_BROWSER_NATIVE_CLIENT -#elif defined(__Fuchsia__) -# define U_PLATFORM U_PF_FUCHSIA -#elif defined(linux) || defined(__linux__) || defined(__linux) -# define U_PLATFORM U_PF_LINUX -#elif defined(__APPLE__) && defined(__MACH__) -# include -# if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE /* variant of TARGET_OS_MAC */ -# define U_PLATFORM U_PF_IPHONE -# else -# define U_PLATFORM U_PF_DARWIN -# endif -#elif defined(BSD) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__MirBSD__) -# if defined(__FreeBSD__) -# include -# endif -# define U_PLATFORM U_PF_BSD -#elif defined(sun) || defined(__sun) - /* Check defined(__SVR4) || defined(__svr4__) to distinguish Solaris from SunOS? */ -# define U_PLATFORM U_PF_SOLARIS -# if defined(__GNUC__) - /* Solaris/GCC needs this header file to get the proper endianness. Normally, this - * header file is included with stddef.h but on Solairs/GCC, the GCC version of stddef.h - * is included which does not include this header file. - */ -# include -# endif -#elif defined(_AIX) || defined(__TOS_AIX__) -# define U_PLATFORM U_PF_AIX -#elif defined(_hpux) || defined(hpux) || defined(__hpux) -# define U_PLATFORM U_PF_HPUX -#elif defined(sgi) || defined(__sgi) -# define U_PLATFORM U_PF_IRIX -#elif defined(__QNX__) || defined(__QNXNTO__) -# define U_PLATFORM U_PF_QNX -#elif defined(__TOS_MVS__) -# define U_PLATFORM U_PF_OS390 -#elif defined(__OS400__) || defined(__TOS_OS400__) -# define U_PLATFORM U_PF_OS400 -#else -# define U_PLATFORM U_PF_UNKNOWN -#endif - -/** - * \def CYGWINMSVC - * Defined if this is Windows with Cygwin, but using MSVC rather than gcc. - * Otherwise undefined. - * @internal - */ -/* Commented out because this is already set in mh-cygwin-msvc -#if U_PLATFORM == U_PF_CYGWIN && defined(_MSC_VER) -# define CYGWINMSVC -#endif -*/ -#ifdef U_IN_DOXYGEN -# define CYGWINMSVC -#endif - -/** - * \def U_PLATFORM_USES_ONLY_WIN32_API - * Defines whether the platform uses only the Win32 API. - * Set to 1 for Windows/MSVC and MinGW but not Cygwin. - * @internal - */ -#ifdef U_PLATFORM_USES_ONLY_WIN32_API - /* Use the predefined value. */ -#elif (U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_MINGW) || defined(CYGWINMSVC) -# define U_PLATFORM_USES_ONLY_WIN32_API 1 -#else - /* Cygwin implements POSIX. */ -# define U_PLATFORM_USES_ONLY_WIN32_API 0 -#endif - -/** - * \def U_PLATFORM_HAS_WIN32_API - * Defines whether the Win32 API is available on the platform. - * Set to 1 for Windows/MSVC, MinGW and Cygwin. - * @internal - */ -#ifdef U_PLATFORM_HAS_WIN32_API - /* Use the predefined value. */ -#elif U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN -# define U_PLATFORM_HAS_WIN32_API 1 -#else -# define U_PLATFORM_HAS_WIN32_API 0 -#endif - -/** - * \def U_PLATFORM_HAS_WINUWP_API - * Defines whether target is intended for Universal Windows Platform API - * Set to 1 for Windows10 Release Solution Configuration - * @internal - */ -#ifdef U_PLATFORM_HAS_WINUWP_API - /* Use the predefined value. */ -#else -# define U_PLATFORM_HAS_WINUWP_API 0 -#endif - -/** - * \def U_PLATFORM_IMPLEMENTS_POSIX - * Defines whether the platform implements (most of) the POSIX API. - * Set to 1 for Cygwin and most other platforms. - * @internal - */ -#ifdef U_PLATFORM_IMPLEMENTS_POSIX - /* Use the predefined value. */ -#elif U_PLATFORM_USES_ONLY_WIN32_API -# define U_PLATFORM_IMPLEMENTS_POSIX 0 -#else -# define U_PLATFORM_IMPLEMENTS_POSIX 1 -#endif - -/** - * \def U_PLATFORM_IS_LINUX_BASED - * Defines whether the platform is Linux or one of its derivatives. - * @internal - */ -#ifdef U_PLATFORM_IS_LINUX_BASED - /* Use the predefined value. */ -#elif U_PF_LINUX <= U_PLATFORM && U_PLATFORM <= 4499 -# define U_PLATFORM_IS_LINUX_BASED 1 -#else -# define U_PLATFORM_IS_LINUX_BASED 0 -#endif - -/** - * \def U_PLATFORM_IS_DARWIN_BASED - * Defines whether the platform is Darwin or one of its derivatives. - * @internal - */ -#ifdef U_PLATFORM_IS_DARWIN_BASED - /* Use the predefined value. */ -#elif U_PF_DARWIN <= U_PLATFORM && U_PLATFORM <= U_PF_IPHONE -# define U_PLATFORM_IS_DARWIN_BASED 1 -#else -# define U_PLATFORM_IS_DARWIN_BASED 0 -#endif - -/** - * \def U_HAVE_STDINT_H - * Defines whether stdint.h is available. It is a C99 standard header. - * We used to include inttypes.h which includes stdint.h but we usually do not need - * the additional definitions from inttypes.h. - * @internal - */ -#ifdef U_HAVE_STDINT_H - /* Use the predefined value. */ -#elif U_PLATFORM_USES_ONLY_WIN32_API -# if defined(__BORLANDC__) || U_PLATFORM == U_PF_MINGW || (defined(_MSC_VER) && _MSC_VER>=1600) - /* Windows Visual Studio 9 and below do not have stdint.h & inttypes.h, but VS 2010 adds them. */ -# define U_HAVE_STDINT_H 1 -# else -# define U_HAVE_STDINT_H 0 -# endif -#elif U_PLATFORM == U_PF_SOLARIS - /* Solaris has inttypes.h but not stdint.h. */ -# define U_HAVE_STDINT_H 0 -#elif U_PLATFORM == U_PF_AIX && !defined(_AIX51) && defined(_POWER) - /* PPC AIX <= 4.3 has inttypes.h but not stdint.h. */ -# define U_HAVE_STDINT_H 0 -#else -# define U_HAVE_STDINT_H 1 -#endif - -/** - * \def U_HAVE_INTTYPES_H - * Defines whether inttypes.h is available. It is a C99 standard header. - * We include inttypes.h where it is available but stdint.h is not. - * @internal - */ -#ifdef U_HAVE_INTTYPES_H - /* Use the predefined value. */ -#elif U_PLATFORM == U_PF_SOLARIS - /* Solaris has inttypes.h but not stdint.h. */ -# define U_HAVE_INTTYPES_H 1 -#elif U_PLATFORM == U_PF_AIX && !defined(_AIX51) && defined(_POWER) - /* PPC AIX <= 4.3 has inttypes.h but not stdint.h. */ -# define U_HAVE_INTTYPES_H 1 -#else - /* Most platforms have both inttypes.h and stdint.h, or neither. */ -# define U_HAVE_INTTYPES_H U_HAVE_STDINT_H -#endif - -/*===========================================================================*/ -/** @{ Compiler and environment features */ -/*===========================================================================*/ - -/** - * \def U_GCC_MAJOR_MINOR - * Indicates whether the compiler is gcc (test for != 0), - * and if so, contains its major (times 100) and minor version numbers. - * If the compiler is not gcc, then U_GCC_MAJOR_MINOR == 0. - * - * For example, for testing for whether we have gcc, and whether it's 4.6 or higher, - * use "#if U_GCC_MAJOR_MINOR >= 406". - * @internal - */ -#ifdef __GNUC__ -# define U_GCC_MAJOR_MINOR (__GNUC__ * 100 + __GNUC_MINOR__) -#else -# define U_GCC_MAJOR_MINOR 0 -#endif - -/** - * \def U_IS_BIG_ENDIAN - * Determines the endianness of the platform. - * @internal - */ -#ifdef U_IS_BIG_ENDIAN - /* Use the predefined value. */ -#elif defined(BYTE_ORDER) && defined(BIG_ENDIAN) -# define U_IS_BIG_ENDIAN (BYTE_ORDER == BIG_ENDIAN) -#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) - /* gcc */ -# define U_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) -#elif defined(__BIG_ENDIAN__) || defined(_BIG_ENDIAN) -# define U_IS_BIG_ENDIAN 1 -#elif defined(__LITTLE_ENDIAN__) || defined(_LITTLE_ENDIAN) -# define U_IS_BIG_ENDIAN 0 -#elif U_PLATFORM == U_PF_OS390 || U_PLATFORM == U_PF_OS400 || defined(__s390__) || defined(__s390x__) - /* These platforms do not appear to predefine any endianness macros. */ -# define U_IS_BIG_ENDIAN 1 -#elif defined(_PA_RISC1_0) || defined(_PA_RISC1_1) || defined(_PA_RISC2_0) - /* HPPA do not appear to predefine any endianness macros. */ -# define U_IS_BIG_ENDIAN 1 -#elif defined(sparc) || defined(__sparc) || defined(__sparc__) - /* Some sparc based systems (e.g. Linux) do not predefine any endianness macros. */ -# define U_IS_BIG_ENDIAN 1 -#else -# define U_IS_BIG_ENDIAN 0 -#endif - -/** - * \def U_HAVE_PLACEMENT_NEW - * Determines whether to override placement new and delete for STL. - * @stable ICU 2.6 - */ -#ifdef U_HAVE_PLACEMENT_NEW - /* Use the predefined value. */ -#elif defined(__BORLANDC__) -# define U_HAVE_PLACEMENT_NEW 0 -#else -# define U_HAVE_PLACEMENT_NEW 1 -#endif - -/** - * \def U_HAVE_DEBUG_LOCATION_NEW - * Define this to define the MFC debug version of the operator new. - * - * @stable ICU 3.4 - */ -#ifdef U_HAVE_DEBUG_LOCATION_NEW - /* Use the predefined value. */ -#elif defined(_MSC_VER) -# define U_HAVE_DEBUG_LOCATION_NEW 1 -#else -# define U_HAVE_DEBUG_LOCATION_NEW 0 -#endif - -/* Compatibility with compilers other than clang: http://clang.llvm.org/docs/LanguageExtensions.html */ -#ifndef __has_attribute -# define __has_attribute(x) 0 -#endif -#ifndef __has_cpp_attribute -# define __has_cpp_attribute(x) 0 -#endif -#ifndef __has_declspec_attribute -# define __has_declspec_attribute(x) 0 -#endif -#ifndef __has_builtin -# define __has_builtin(x) 0 -#endif -#ifndef __has_feature -# define __has_feature(x) 0 -#endif -#ifndef __has_extension -# define __has_extension(x) 0 -#endif -#ifndef __has_warning -# define __has_warning(x) 0 -#endif - -/** - * \def U_MALLOC_ATTR - * Attribute to mark functions as malloc-like - * @internal - */ -#if defined(__GNUC__) && __GNUC__>=3 -# define U_MALLOC_ATTR __attribute__ ((__malloc__)) -#else -# define U_MALLOC_ATTR -#endif - -/** - * \def U_ALLOC_SIZE_ATTR - * Attribute to specify the size of the allocated buffer for malloc-like functions - * @internal - */ -#if (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) || __has_attribute(alloc_size) -# define U_ALLOC_SIZE_ATTR(X) __attribute__ ((alloc_size(X))) -# define U_ALLOC_SIZE_ATTR2(X,Y) __attribute__ ((alloc_size(X,Y))) -#else -# define U_ALLOC_SIZE_ATTR(X) -# define U_ALLOC_SIZE_ATTR2(X,Y) -#endif - -/** - * \def U_CPLUSPLUS_VERSION - * 0 if no C++; 1, 11, 14, ... if C++. - * Support for specific features cannot always be determined by the C++ version alone. - * @internal - */ -#ifdef U_CPLUSPLUS_VERSION -# if U_CPLUSPLUS_VERSION != 0 && !defined(__cplusplus) -# undef U_CPLUSPLUS_VERSION -# define U_CPLUSPLUS_VERSION 0 -# endif - /* Otherwise use the predefined value. */ -#elif !defined(__cplusplus) -# define U_CPLUSPLUS_VERSION 0 -#elif __cplusplus >= 201402L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L) -# define U_CPLUSPLUS_VERSION 14 -#elif __cplusplus >= 201103L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201103L) -# define U_CPLUSPLUS_VERSION 11 -#else - // C++98 or C++03 -# define U_CPLUSPLUS_VERSION 1 -#endif - -#if (U_PLATFORM == U_PF_AIX || U_PLATFORM == U_PF_OS390) && defined(__cplusplus) &&(U_CPLUSPLUS_VERSION < 11) -// add in std::nullptr_t -namespace std { - typedef decltype(nullptr) nullptr_t; -}; -#endif - -/** - * \def U_NOEXCEPT - * "noexcept" if supported, otherwise empty. - * Some code, especially STL containers, uses move semantics of objects only - * if the move constructor and the move operator are declared as not throwing exceptions. - * @internal - */ -#ifdef U_NOEXCEPT - /* Use the predefined value. */ -#else -# define U_NOEXCEPT noexcept -#endif - -/** - * \def U_FALLTHROUGH - * Annotate intentional fall-through between switch labels. - * http://clang.llvm.org/docs/AttributeReference.html#fallthrough-clang-fallthrough - * @internal - */ -#ifndef __cplusplus - // Not for C. -#elif defined(U_FALLTHROUGH) - // Use the predefined value. -#elif defined(__clang__) - // Test for compiler vs. feature separately. - // Other compilers might choke on the feature test. -# if __has_cpp_attribute(clang::fallthrough) || \ - (__has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")) -# define U_FALLTHROUGH [[clang::fallthrough]] -# endif -#elif defined(__GNUC__) && (__GNUC__ >= 7) -# define U_FALLTHROUGH __attribute__((fallthrough)) -#endif - -#ifndef U_FALLTHROUGH -# define U_FALLTHROUGH -#endif - -/** @} */ - -/*===========================================================================*/ -/** @{ Character data types */ -/*===========================================================================*/ - -/** - * U_CHARSET_FAMILY is equal to this value when the platform is an ASCII based platform. - * @stable ICU 2.0 - */ -#define U_ASCII_FAMILY 0 - -/** - * U_CHARSET_FAMILY is equal to this value when the platform is an EBCDIC based platform. - * @stable ICU 2.0 - */ -#define U_EBCDIC_FAMILY 1 - -/** - * \def U_CHARSET_FAMILY - * - *

These definitions allow to specify the encoding of text - * in the char data type as defined by the platform and the compiler. - * It is enough to determine the code point values of "invariant characters", - * which are the ones shared by all encodings that are in use - * on a given platform.

- * - *

Those "invariant characters" should be all the uppercase and lowercase - * latin letters, the digits, the space, and "basic punctuation". - * Also, '\\n', '\\r', '\\t' should be available.

- * - *

The list of "invariant characters" is:
- * \code - * A-Z a-z 0-9 SPACE " % & ' ( ) * + , - . / : ; < = > ? _ - * \endcode - *
- * (52 letters + 10 numbers + 20 punc/sym/space = 82 total)

- * - *

This matches the IBM Syntactic Character Set (CS 640).

- * - *

In other words, all the graphic characters in 7-bit ASCII should - * be safely accessible except the following:

- * - * \code - * '\' - * '[' - * ']' - * '{' - * '}' - * '^' - * '~' - * '!' - * '#' - * '|' - * '$' - * '@' - * '`' - * \endcode - * @stable ICU 2.0 - */ -#ifdef U_CHARSET_FAMILY - /* Use the predefined value. */ -#elif U_PLATFORM == U_PF_OS390 && (!defined(__CHARSET_LIB) || !__CHARSET_LIB) -# define U_CHARSET_FAMILY U_EBCDIC_FAMILY -#elif U_PLATFORM == U_PF_OS400 && !defined(__UTF32__) -# define U_CHARSET_FAMILY U_EBCDIC_FAMILY -#else -# define U_CHARSET_FAMILY U_ASCII_FAMILY -#endif - -/** - * \def U_CHARSET_IS_UTF8 - * - * Hardcode the default charset to UTF-8. - * - * If this is set to 1, then - * - ICU will assume that all non-invariant char*, StringPiece, std::string etc. - * contain UTF-8 text, regardless of what the system API uses - * - some ICU code will use fast functions like u_strFromUTF8() - * rather than the more general and more heavy-weight conversion API (ucnv.h) - * - ucnv_getDefaultName() always returns "UTF-8" - * - ucnv_setDefaultName() is disabled and will not change the default charset - * - static builds of ICU are smaller - * - more functionality is available with the UCONFIG_NO_CONVERSION build-time - * configuration option (see unicode/uconfig.h) - * - the UCONFIG_NO_CONVERSION build option in uconfig.h is more usable - * - * @stable ICU 4.2 - * @see UCONFIG_NO_CONVERSION - */ -#ifdef U_CHARSET_IS_UTF8 - /* Use the predefined value. */ -#elif U_PLATFORM_IS_LINUX_BASED || U_PLATFORM_IS_DARWIN_BASED -# define U_CHARSET_IS_UTF8 1 -#else -# define U_CHARSET_IS_UTF8 0 -#endif - -/** @} */ - -/*===========================================================================*/ -/** @{ Information about wchar support */ -/*===========================================================================*/ - -/** - * \def U_HAVE_WCHAR_H - * Indicates whether is available (1) or not (0). Set to 1 by default. - * - * @stable ICU 2.0 - */ -#ifdef U_HAVE_WCHAR_H - /* Use the predefined value. */ -#elif U_PLATFORM == U_PF_ANDROID && __ANDROID_API__ < 9 - /* - * Android before Gingerbread (Android 2.3, API level 9) did not support wchar_t. - * The type and header existed, but the library functions did not work as expected. - * The size of wchar_t was 1 but L"xyz" string literals had 32-bit units anyway. - */ -# define U_HAVE_WCHAR_H 0 -#else -# define U_HAVE_WCHAR_H 1 -#endif - -/** - * \def U_SIZEOF_WCHAR_T - * U_SIZEOF_WCHAR_T==sizeof(wchar_t) - * - * @stable ICU 2.0 - */ -#ifdef U_SIZEOF_WCHAR_T - /* Use the predefined value. */ -#elif (U_PLATFORM == U_PF_ANDROID && __ANDROID_API__ < 9) - /* - * Classic Mac OS and Mac OS X before 10.3 (Panther) did not support wchar_t or wstring. - * Newer Mac OS X has size 4. - */ -# define U_SIZEOF_WCHAR_T 1 -#elif U_PLATFORM_HAS_WIN32_API || U_PLATFORM == U_PF_CYGWIN -# define U_SIZEOF_WCHAR_T 2 -#elif U_PLATFORM == U_PF_AIX - /* - * AIX 6.1 information, section "Wide character data representation": - * "... the wchar_t datatype is 32-bit in the 64-bit environment and - * 16-bit in the 32-bit environment." - * and - * "All locales use Unicode for their wide character code values (process code), - * except the IBM-eucTW codeset." - */ -# ifdef __64BIT__ -# define U_SIZEOF_WCHAR_T 4 -# else -# define U_SIZEOF_WCHAR_T 2 -# endif -#elif U_PLATFORM == U_PF_OS390 - /* - * z/OS V1R11 information center, section "LP64 | ILP32": - * "In 31-bit mode, the size of long and pointers is 4 bytes and the size of wchar_t is 2 bytes. - * Under LP64, the size of long and pointer is 8 bytes and the size of wchar_t is 4 bytes." - */ -# ifdef _LP64 -# define U_SIZEOF_WCHAR_T 4 -# else -# define U_SIZEOF_WCHAR_T 2 -# endif -#elif U_PLATFORM == U_PF_OS400 -# if defined(__UTF32__) - /* - * LOCALETYPE(*LOCALEUTF) is specified. - * Wide-character strings are in UTF-32, - * narrow-character strings are in UTF-8. - */ -# define U_SIZEOF_WCHAR_T 4 -# elif defined(__UCS2__) - /* - * LOCALETYPE(*LOCALEUCS2) is specified. - * Wide-character strings are in UCS-2, - * narrow-character strings are in EBCDIC. - */ -# define U_SIZEOF_WCHAR_T 2 -#else - /* - * LOCALETYPE(*CLD) or LOCALETYPE(*LOCALE) is specified. - * Wide-character strings are in 16-bit EBCDIC, - * narrow-character strings are in EBCDIC. - */ -# define U_SIZEOF_WCHAR_T 2 -# endif -#else -# define U_SIZEOF_WCHAR_T 4 -#endif - -#ifndef U_HAVE_WCSCPY -#define U_HAVE_WCSCPY U_HAVE_WCHAR_H -#endif - -/** @} */ - -/** - * \def U_HAVE_CHAR16_T - * Defines whether the char16_t type is available for UTF-16 - * and u"abc" UTF-16 string literals are supported. - * This is a new standard type and standard string literal syntax in C++0x - * but has been available in some compilers before. - * @internal - */ -#ifdef U_HAVE_CHAR16_T - /* Use the predefined value. */ -#else - /* - * Notes: - * Visual Studio 2010 (_MSC_VER==1600) defines char16_t as a typedef - * and does not support u"abc" string literals. - * Visual Studio 2015 (_MSC_VER>=1900) and above adds support for - * both char16_t and u"abc" string literals. - * gcc 4.4 defines the __CHAR16_TYPE__ macro to a usable type but - * does not support u"abc" string literals. - * C++11 and C11 require support for UTF-16 literals - * TODO: Fix for plain C. Doesn't work on Mac. - */ -# if U_CPLUSPLUS_VERSION >= 11 || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) -# define U_HAVE_CHAR16_T 1 -# else -# define U_HAVE_CHAR16_T 0 -# endif -#endif - -/** - * @{ - * \def U_DECLARE_UTF16 - * Do not use this macro because it is not defined on all platforms. - * Use the UNICODE_STRING or U_STRING_DECL macros instead. - * @internal - */ -#ifdef U_DECLARE_UTF16 - /* Use the predefined value. */ -#elif U_HAVE_CHAR16_T \ - || (defined(__xlC__) && defined(__IBM_UTF_LITERAL) && U_SIZEOF_WCHAR_T != 2) \ - || (defined(__HP_aCC) && __HP_aCC >= 035000) \ - || (defined(__HP_cc) && __HP_cc >= 111106) \ - || (defined(U_IN_DOXYGEN)) -# define U_DECLARE_UTF16(string) u ## string -#elif U_SIZEOF_WCHAR_T == 2 \ - && (U_CHARSET_FAMILY == 0 || (U_PF_OS390 <= U_PLATFORM && U_PLATFORM <= U_PF_OS400 && defined(__UCS2__))) -# define U_DECLARE_UTF16(string) L ## string -#else - /* Leave U_DECLARE_UTF16 undefined. See unistr.h. */ -#endif - -/** @} */ - -/*===========================================================================*/ -/** @{ Symbol import-export control */ -/*===========================================================================*/ - -#ifdef U_EXPORT - /* Use the predefined value. */ -#elif defined(U_STATIC_IMPLEMENTATION) -# define U_EXPORT -#elif defined(_MSC_VER) || (__has_declspec_attribute(dllexport) && __has_declspec_attribute(dllimport)) -# define U_EXPORT __declspec(dllexport) -#elif defined(__GNUC__) -# define U_EXPORT __attribute__((visibility("default"))) -#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \ - || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) -# define U_EXPORT __global -/*#elif defined(__HP_aCC) || defined(__HP_cc) -# define U_EXPORT __declspec(dllexport)*/ -#else -# define U_EXPORT -#endif - -/* U_CALLCONV is releated to U_EXPORT2 */ -#ifdef U_EXPORT2 - /* Use the predefined value. */ -#elif defined(_MSC_VER) -# define U_EXPORT2 __cdecl -#else -# define U_EXPORT2 -#endif - -#ifdef U_IMPORT - /* Use the predefined value. */ -#elif defined(_MSC_VER) || (__has_declspec_attribute(dllexport) && __has_declspec_attribute(dllimport)) - /* Windows needs to export/import data. */ -# define U_IMPORT __declspec(dllimport) -#else -# define U_IMPORT -#endif - -/** - * \def U_CALLCONV - * Similar to U_CDECL_BEGIN/U_CDECL_END, this qualifier is necessary - * in callback function typedefs to make sure that the calling convention - * is compatible. - * - * This is only used for non-ICU-API functions. - * When a function is a public ICU API, - * you must use the U_CAPI and U_EXPORT2 qualifiers. - * - * Please note, you need to use U_CALLCONV after the *. - * - * NO : "static const char U_CALLCONV *func( . . . )" - * YES: "static const char* U_CALLCONV func( . . . )" - * - * @stable ICU 2.0 - */ -#if U_PLATFORM == U_PF_OS390 && defined(__cplusplus) -# define U_CALLCONV __cdecl -#else -# define U_CALLCONV U_EXPORT2 -#endif - -/** - * \def U_CALLCONV_FPTR - * Similar to U_CALLCONV, but only used on function pointers. - * @internal - */ -#if U_PLATFORM == U_PF_OS390 && defined(__cplusplus) -# define U_CALLCONV_FPTR U_CALLCONV -#else -# define U_CALLCONV_FPTR -#endif -/* @} */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/plurfmt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/plurfmt.h deleted file mode 100644 index 566c57cbe9..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/plurfmt.h +++ /dev/null @@ -1,607 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2007-2014, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************************* -* - -* File PLURFMT.H -******************************************************************************** -*/ - -#ifndef PLURFMT -#define PLURFMT - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: PluralFormat object - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/messagepattern.h" -#include "unicode/numfmt.h" -#include "unicode/plurrule.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class Hashtable; -class NFRule; - -/** - *

- * PluralFormat supports the creation of internationalized - * messages with plural inflection. It is based on plural - * selection, i.e. the caller specifies messages for each - * plural case that can appear in the user's language and the - * PluralFormat selects the appropriate message based on - * the number. - *

- *

The Problem of Plural Forms in Internationalized Messages

- *

- * Different languages have different ways to inflect - * plurals. Creating internationalized messages that include plural - * forms is only feasible when the framework is able to handle plural - * forms of all languages correctly. ChoiceFormat - * doesn't handle this well, because it attaches a number interval to - * each message and selects the message whose interval contains a - * given number. This can only handle a finite number of - * intervals. But in some languages, like Polish, one plural case - * applies to infinitely many intervals (e.g., the plural case applies to - * numbers ending with 2, 3, or 4 except those ending with 12, 13, or - * 14). Thus ChoiceFormat is not adequate. - *

- * PluralFormat deals with this by breaking the problem - * into two parts: - *

    - *
  • It uses PluralRules that can define more complex - * conditions for a plural case than just a single interval. These plural - * rules define both what plural cases exist in a language, and to - * which numbers these cases apply. - *
  • It provides predefined plural rules for many languages. Thus, the programmer - * need not worry about the plural cases of a language and - * does not have to define the plural cases; they can simply - * use the predefined keywords. The whole plural formatting of messages can - * be done using localized patterns from resource bundles. For predefined plural - * rules, see the CLDR Language Plural Rules page at - * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html - *
- *

- *

Usage of PluralFormat

- *

Note: Typically, plural formatting is done via MessageFormat - * with a plural argument type, - * rather than using a stand-alone PluralFormat. - *

- * This discussion assumes that you use PluralFormat with - * a predefined set of plural rules. You can create one using one of - * the constructors that takes a locale object. To - * specify the message pattern, you can either pass it to the - * constructor or set it explicitly using the - * applyPattern() method. The format() - * method takes a number object and selects the message of the - * matching plural case. This message will be returned. - *

- *
Patterns and Their Interpretation
- *

- * The pattern text defines the message output for each plural case of the - * specified locale. Syntax: - *

- * pluralStyle = [offsetValue] (selector '{' message '}')+
- * offsetValue = "offset:" number
- * selector = explicitValue | keyword
- * explicitValue = '=' number  // adjacent, no white space in between
- * keyword = [^[[:Pattern_Syntax:][:Pattern_White_Space:]]]+
- * message: see {@link MessageFormat}
- * 
- * Pattern_White_Space between syntax elements is ignored, except - * between the {curly braces} and their sub-message, - * and between the '=' and the number of an explicitValue. - * - *

- * There are 6 predefined casekeyword in CLDR/ICU - 'zero', 'one', 'two', 'few', 'many' and - * 'other'. You always have to define a message text for the default plural case - * other which is contained in every rule set. - * If you do not specify a message text for a particular plural case, the - * message text of the plural case other gets assigned to this - * plural case. - *

- * When formatting, the input number is first matched against the explicitValue clauses. - * If there is no exact-number match, then a keyword is selected by calling - * the PluralRules with the input number minus the offset. - * (The offset defaults to 0 if it is omitted from the pattern string.) - * If there is no clause with that keyword, then the "other" clauses is returned. - *

- * An unquoted pound sign (#) in the selected sub-message - * itself (i.e., outside of arguments nested in the sub-message) - * is replaced by the input number minus the offset. - * The number-minus-offset value is formatted using a - * NumberFormat for the PluralFormat's locale. If you - * need special number formatting, you have to use a MessageFormat - * and explicitly specify a NumberFormat argument. - * Note: That argument is formatting without subtracting the offset! - * If you need a custom format and have a non-zero offset, then you need to pass the - * number-minus-offset value as a separate parameter. - *

- * For a usage example, see the {@link MessageFormat} class documentation. - * - *

Defining Custom Plural Rules

- *

If you need to use PluralFormat with custom rules, you can - * create a PluralRules object and pass it to - * PluralFormat's constructor. If you also specify a locale in this - * constructor, this locale will be used to format the number in the message - * texts. - *

- * For more information about PluralRules, see - * {@link PluralRules}. - *

- * - * ported from Java - * @stable ICU 4.0 - */ - -class U_I18N_API PluralFormat : public Format { -public: - - /** - * Creates a new cardinal-number PluralFormat for the default locale. - * This locale will be used to get the set of plural rules and for standard - * number formatting. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @stable ICU 4.0 - */ - PluralFormat(UErrorCode& status); - - /** - * Creates a new cardinal-number PluralFormat for a given locale. - * @param locale the PluralFormat will be configured with - * rules for this locale. This locale will also be used for - * standard number formatting. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @stable ICU 4.0 - */ - PluralFormat(const Locale& locale, UErrorCode& status); - - /** - * Creates a new PluralFormat for a given set of rules. - * The standard number formatting will be done using the default locale. - * @param rules defines the behavior of the PluralFormat - * object. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @stable ICU 4.0 - */ - PluralFormat(const PluralRules& rules, UErrorCode& status); - - /** - * Creates a new PluralFormat for a given set of rules. - * The standard number formatting will be done using the given locale. - * @param locale the default number formatting will be done using this - * locale. - * @param rules defines the behavior of the PluralFormat - * object. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @stable ICU 4.0 - *

- *

Sample code

- * \snippet samples/plurfmtsample/plurfmtsample.cpp PluralFormatExample1 - * \snippet samples/plurfmtsample/plurfmtsample.cpp PluralFormatExample - *

- */ - PluralFormat(const Locale& locale, const PluralRules& rules, UErrorCode& status); - - /** - * Creates a new PluralFormat for the plural type. - * The standard number formatting will be done using the given locale. - * @param locale the default number formatting will be done using this - * locale. - * @param type The plural type (e.g., cardinal or ordinal). - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @stable ICU 50 - */ - PluralFormat(const Locale& locale, UPluralType type, UErrorCode& status); - - /** - * Creates a new cardinal-number PluralFormat for a given pattern string. - * The default locale will be used to get the set of plural rules and for - * standard number formatting. - * @param pattern the pattern for this PluralFormat. - * errors are returned to status if the pattern is invalid. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @stable ICU 4.0 - */ - PluralFormat(const UnicodeString& pattern, UErrorCode& status); - - /** - * Creates a new cardinal-number PluralFormat for a given pattern string and - * locale. - * The locale will be used to get the set of plural rules and for - * standard number formatting. - * @param locale the PluralFormat will be configured with - * rules for this locale. This locale will also be used for - * standard number formatting. - * @param pattern the pattern for this PluralFormat. - * errors are returned to status if the pattern is invalid. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @stable ICU 4.0 - */ - PluralFormat(const Locale& locale, const UnicodeString& pattern, UErrorCode& status); - - /** - * Creates a new PluralFormat for a given set of rules, a - * pattern and a locale. - * @param rules defines the behavior of the PluralFormat - * object. - * @param pattern the pattern for this PluralFormat. - * errors are returned to status if the pattern is invalid. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @stable ICU 4.0 - */ - PluralFormat(const PluralRules& rules, - const UnicodeString& pattern, - UErrorCode& status); - - /** - * Creates a new PluralFormat for a given set of rules, a - * pattern and a locale. - * @param locale the PluralFormat will be configured with - * rules for this locale. This locale will also be used for - * standard number formatting. - * @param rules defines the behavior of the PluralFormat - * object. - * @param pattern the pattern for this PluralFormat. - * errors are returned to status if the pattern is invalid. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @stable ICU 4.0 - */ - PluralFormat(const Locale& locale, - const PluralRules& rules, - const UnicodeString& pattern, - UErrorCode& status); - - /** - * Creates a new PluralFormat for a plural type, a - * pattern and a locale. - * @param locale the PluralFormat will be configured with - * rules for this locale. This locale will also be used for - * standard number formatting. - * @param type The plural type (e.g., cardinal or ordinal). - * @param pattern the pattern for this PluralFormat. - * errors are returned to status if the pattern is invalid. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @stable ICU 50 - */ - PluralFormat(const Locale& locale, - UPluralType type, - const UnicodeString& pattern, - UErrorCode& status); - - /** - * copy constructor. - * @stable ICU 4.0 - */ - PluralFormat(const PluralFormat& other); - - /** - * Destructor. - * @stable ICU 4.0 - */ - virtual ~PluralFormat(); - - /** - * Sets the pattern used by this plural format. - * The method parses the pattern and creates a map of format strings - * for the plural rules. - * Patterns and their interpretation are specified in the class description. - * - * @param pattern the pattern for this plural format - * errors are returned to status if the pattern is invalid. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @stable ICU 4.0 - */ - void applyPattern(const UnicodeString& pattern, UErrorCode& status); - - - using Format::format; - - /** - * Formats a plural message for a given number. - * - * @param number a number for which the plural message should be formatted - * for. If no pattern has been applied to this - * PluralFormat object yet, the formatted number - * will be returned. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @return the string containing the formatted plural message. - * @stable ICU 4.0 - */ - UnicodeString format(int32_t number, UErrorCode& status) const; - - /** - * Formats a plural message for a given number. - * - * @param number a number for which the plural message should be formatted - * for. If no pattern has been applied to this - * PluralFormat object yet, the formatted number - * will be returned. - * @param status output param set to success or failure code on exit, which - * must not indicate a failure before the function call. - * @return the string containing the formatted plural message. - * @stable ICU 4.0 - */ - UnicodeString format(double number, UErrorCode& status) const; - - /** - * Formats a plural message for a given number. - * - * @param number a number for which the plural message should be formatted - * for. If no pattern has been applied to this - * PluralFormat object yet, the formatted number - * will be returned. - * @param appendTo output parameter to receive result. - * result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @return the string containing the formatted plural message. - * @stable ICU 4.0 - */ - UnicodeString& format(int32_t number, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& status) const; - - /** - * Formats a plural message for a given number. - * - * @param number a number for which the plural message should be formatted - * for. If no pattern has been applied to this - * PluralFormat object yet, the formatted number - * will be returned. - * @param appendTo output parameter to receive result. - * result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @return the string containing the formatted plural message. - * @stable ICU 4.0 - */ - UnicodeString& format(double number, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& status) const; - -#ifndef U_HIDE_DEPRECATED_API - /** - * Sets the locale used by this PluraFormat object. - * Note: Calling this method resets this PluraFormat object, - * i.e., a pattern that was applied previously will be removed, - * and the NumberFormat is set to the default number format for - * the locale. The resulting format behaves the same as one - * constructed from {@link #PluralFormat(const Locale& locale, UPluralType type, UErrorCode& status)} - * with UPLURAL_TYPE_CARDINAL. - * @param locale the locale to use to configure the formatter. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @deprecated ICU 50 This method clears the pattern and might create - * a different kind of PluralRules instance; - * use one of the constructors to create a new instance instead. - */ - void setLocale(const Locale& locale, UErrorCode& status); -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Sets the number format used by this formatter. You only need to - * call this if you want a different number format than the default - * formatter for the locale. - * @param format the number format to use. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @stable ICU 4.0 - */ - void setNumberFormat(const NumberFormat* format, UErrorCode& status); - - /** - * Assignment operator - * - * @param other the PluralFormat object to copy from. - * @stable ICU 4.0 - */ - PluralFormat& operator=(const PluralFormat& other); - - /** - * Return true if another object is semantically equal to this one. - * - * @param other the PluralFormat object to be compared with. - * @return true if other is semantically equal to this. - * @stable ICU 4.0 - */ - virtual UBool operator==(const Format& other) const; - - /** - * Return true if another object is semantically unequal to this one. - * - * @param other the PluralFormat object to be compared with. - * @return true if other is semantically unequal to this. - * @stable ICU 4.0 - */ - virtual UBool operator!=(const Format& other) const; - - /** - * Clones this Format object polymorphically. The caller owns the - * result and should delete it when done. - * @stable ICU 4.0 - */ - virtual Format* clone(void) const; - - /** - * Formats a plural message for a number taken from a Formattable object. - * - * @param obj The object containing a number for which the - * plural message should be formatted. - * The object must be of a numeric type. - * @param appendTo output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.0 - */ - UnicodeString& format(const Formattable& obj, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& status) const; - - /** - * Returns the pattern from applyPattern() or constructor(). - * - * @param appendTo output parameter to receive result. - * Result is appended to existing contents. - * @return the UnicodeString with inserted pattern. - * @stable ICU 4.0 - */ - UnicodeString& toPattern(UnicodeString& appendTo); - - /** - * This method is not yet supported by PluralFormat. - *

- * Before calling, set parse_pos.index to the offset you want to start - * parsing at in the source. After calling, parse_pos.index is the end of - * the text you parsed. If error occurs, index is unchanged. - *

- * When parsing, leading whitespace is discarded (with a successful parse), - * while trailing whitespace is left as is. - *

- * See Format::parseObject() for more. - * - * @param source The string to be parsed into an object. - * @param result Formattable to be set to the parse result. - * If parse fails, return contents are undefined. - * @param parse_pos The position to start parsing at. Upon return - * this param is set to the position after the - * last character successfully parsed. If the - * source is not parsed successfully, this param - * will remain unchanged. - * @stable ICU 4.0 - */ - virtual void parseObject(const UnicodeString& source, - Formattable& result, - ParsePosition& parse_pos) const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 4.0 - * - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 4.0 - */ - virtual UClassID getDynamicClassID() const; - -private: - /** - * @internal - */ - class U_I18N_API PluralSelector : public UMemory { - public: - virtual ~PluralSelector(); - /** - * Given a number, returns the appropriate PluralFormat keyword. - * - * @param context worker object for the selector. - * @param number The number to be plural-formatted. - * @param ec Error code. - * @return The selected PluralFormat keyword. - * @internal - */ - virtual UnicodeString select(void *context, double number, UErrorCode& ec) const = 0; - }; - - /** - * @internal - */ - class U_I18N_API PluralSelectorAdapter : public PluralSelector { - public: - PluralSelectorAdapter() : pluralRules(NULL) { - } - - virtual ~PluralSelectorAdapter(); - - virtual UnicodeString select(void *context, double number, UErrorCode& /*ec*/) const; /**< @internal */ - - void reset(); - - PluralRules* pluralRules; - }; - - Locale locale; - MessagePattern msgPattern; - NumberFormat* numberFormat; - double offset; - PluralSelectorAdapter pluralRulesWrapper; - - PluralFormat(); // default constructor not implemented - void init(const PluralRules* rules, UPluralType type, UErrorCode& status); - /** - * Copies dynamically allocated values (pointer fields). - * Others are copied using their copy constructors and assignment operators. - */ - void copyObjects(const PluralFormat& other); - - UnicodeString& format(const Formattable& numberObject, double number, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& status) const; /**< @internal */ - - /** - * Finds the PluralFormat sub-message for the given number, or the "other" sub-message. - * @param pattern A MessagePattern. - * @param partIndex the index of the first PluralFormat argument style part. - * @param selector the PluralSelector for mapping the number (minus offset) to a keyword. - * @param context worker object for the selector. - * @param number a number to be matched to one of the PluralFormat argument's explicit values, - * or mapped via the PluralSelector. - * @param ec ICU error code. - * @return the sub-message start part index. - */ - static int32_t findSubMessage( - const MessagePattern& pattern, int32_t partIndex, - const PluralSelector& selector, void *context, double number, UErrorCode& ec); /**< @internal */ - - void parseType(const UnicodeString& source, const NFRule *rbnfLenientScanner, - Formattable& result, FieldPosition& pos) const; - - friend class MessageFormat; - friend class NFRule; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _PLURFMT -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/plurrule.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/plurrule.h deleted file mode 100644 index d3c3bd56ba..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/plurrule.h +++ /dev/null @@ -1,539 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2008-2015, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************************* -* -* -* File PLURRULE.H -* -* Modification History:* -* Date Name Description -* -******************************************************************************** -*/ - -#ifndef PLURRULE -#define PLURRULE - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: PluralRules object - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/format.h" -#include "unicode/upluralrules.h" -#ifndef U_HIDE_INTERNAL_API -#include "unicode/numfmt.h" -#endif /* U_HIDE_INTERNAL_API */ - -/** - * Value returned by PluralRules::getUniqueKeywordValue() when there is no - * unique value to return. - * @stable ICU 4.8 - */ -#define UPLRULES_NO_UNIQUE_VALUE ((double)-0.00123456777) - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class Hashtable; -class IFixedDecimal; -class RuleChain; -class PluralRuleParser; -class PluralKeywordEnumeration; -class AndConstraint; -class SharedPluralRules; - -namespace number { -class FormattedNumber; -} - -/** - * Defines rules for mapping non-negative numeric values onto a small set of - * keywords. Rules are constructed from a text description, consisting - * of a series of keywords and conditions. The {@link #select} method - * examines each condition in order and returns the keyword for the - * first condition that matches the number. If none match, - * default rule(other) is returned. - * - * For more information, details, and tips for writing rules, see the - * LDML spec, C.11 Language Plural Rules: - * http://www.unicode.org/draft/reports/tr35/tr35.html#Language_Plural_Rules - * - * Examples:

- *   "one: n is 1; few: n in 2..4"
- * This defines two rules, for 'one' and 'few'. The condition for - * 'one' is "n is 1" which means that the number must be equal to - * 1 for this condition to pass. The condition for 'few' is - * "n in 2..4" which means that the number must be between 2 and - * 4 inclusive for this condition to pass. All other numbers - * are assigned the keyword "other" by the default rule. - *

- *    "zero: n is 0; one: n is 1; zero: n mod 100 in 1..19"
- * This illustrates that the same keyword can be defined multiple times. - * Each rule is examined in order, and the first keyword whose condition - * passes is the one returned. Also notes that a modulus is applied - * to n in the last rule. Thus its condition holds for 119, 219, 319... - *

- *    "one: n is 1; few: n mod 10 in 2..4 and n mod 100 not in 12..14"
- * This illustrates conjunction and negation. The condition for 'few' - * has two parts, both of which must be met: "n mod 10 in 2..4" and - * "n mod 100 not in 12..14". The first part applies a modulus to n - * before the test as in the previous example. The second part applies - * a different modulus and also uses negation, thus it matches all - * numbers _not_ in 12, 13, 14, 112, 113, 114, 212, 213, 214... - *

- *

- * Syntax:

- * \code
- * rules         = rule (';' rule)*
- * rule          = keyword ':' condition
- * keyword       = 
- * condition     = and_condition ('or' and_condition)*
- * and_condition = relation ('and' relation)*
- * relation      = is_relation | in_relation | within_relation | 'n' 
- * is_relation   = expr 'is' ('not')? value
- * in_relation   = expr ('not')? 'in' range_list
- * within_relation = expr ('not')? 'within' range
- * expr          = ('n' | 'i' | 'f' | 'v' | 'j') ('mod' value)?
- * range_list    = (range | value) (',' range_list)*
- * value         = digit+  ('.' digit+)?
- * digit         = 0|1|2|3|4|5|6|7|8|9
- * range         = value'..'value
- * \endcode
- * 

- *

- *

- * The i, f, and v values are defined as follows: - *

- *
    - *
  • i to be the integer digits.
  • - *
  • f to be the visible fractional digits, as an integer.
  • - *
  • v to be the number of visible fraction digits.
  • - *
  • j is defined to only match integers. That is j is 3 fails if v != 0 (eg for 3.1 or 3.0).
  • - *
- *

- * Examples are in the following table: - *

- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
nifv
1.0101
1.00102
1.3131
1.03132
1.231232
- *

- * The difference between 'in' and 'within' is that 'in' only includes integers in the specified range, while 'within' - * includes all values. Using 'within' with a range_list consisting entirely of values is the same as using 'in' (it's - * not an error). - *

- - * An "identifier" is a sequence of characters that do not have the - * Unicode Pattern_Syntax or Pattern_White_Space properties. - *

- * The difference between 'in' and 'within' is that 'in' only includes - * integers in the specified range, while 'within' includes all values. - * Using 'within' with a range_list consisting entirely of values is the - * same as using 'in' (it's not an error). - *

- *

- * Keywords - * could be defined by users or from ICU locale data. There are 6 - * predefined values in ICU - 'zero', 'one', 'two', 'few', 'many' and - * 'other'. Callers need to check the value of keyword returned by - * {@link #select} method. - *

- * - * Examples:
- * UnicodeString keyword = pl->select(number);
- * if (keyword== UnicodeString("one") {
- *     ...
- * }
- * else if ( ... )
- * 
- * Note:
- *

- * ICU defines plural rules for many locales based on CLDR Language Plural Rules. - * For these predefined rules, see CLDR page at - * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html - *

- */ -class U_I18N_API PluralRules : public UObject { -public: - - /** - * Constructor. - * @param status Output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * - * @stable ICU 4.0 - */ - PluralRules(UErrorCode& status); - - /** - * Copy constructor. - * @stable ICU 4.0 - */ - PluralRules(const PluralRules& other); - - /** - * Destructor. - * @stable ICU 4.0 - */ - virtual ~PluralRules(); - - /** - * Clone - * @stable ICU 4.0 - */ - PluralRules* clone() const; - - /** - * Assignment operator. - * @stable ICU 4.0 - */ - PluralRules& operator=(const PluralRules&); - - /** - * Creates a PluralRules from a description if it is parsable, otherwise - * returns NULL. - * - * @param description rule description - * @param status Output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @return new PluralRules pointer. NULL if there is an error. - * @stable ICU 4.0 - */ - static PluralRules* U_EXPORT2 createRules(const UnicodeString& description, - UErrorCode& status); - - /** - * The default rules that accept any number. - * - * @param status Output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @return new PluralRules pointer. NULL if there is an error. - * @stable ICU 4.0 - */ - static PluralRules* U_EXPORT2 createDefaultRules(UErrorCode& status); - - /** - * Provides access to the predefined cardinal-number PluralRules for a given - * locale. - * Same as forLocale(locale, UPLURAL_TYPE_CARDINAL, status). - * - * @param locale The locale for which a PluralRules object is - * returned. - * @param status Output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @return The predefined PluralRules object pointer for - * this locale. If there's no predefined rules for this locale, - * the rules for the closest parent in the locale hierarchy - * that has one will be returned. The final fallback always - * returns the default 'other' rules. - * @stable ICU 4.0 - */ - static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UErrorCode& status); - - /** - * Provides access to the predefined PluralRules for a given - * locale and the plural type. - * - * @param locale The locale for which a PluralRules object is - * returned. - * @param type The plural type (e.g., cardinal or ordinal). - * @param status Output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @return The predefined PluralRules object pointer for - * this locale. If there's no predefined rules for this locale, - * the rules for the closest parent in the locale hierarchy - * that has one will be returned. The final fallback always - * returns the default 'other' rules. - * @stable ICU 50 - */ - static PluralRules* U_EXPORT2 forLocale(const Locale& locale, UPluralType type, UErrorCode& status); - -#ifndef U_HIDE_INTERNAL_API - /** - * Return a StringEnumeration over the locales for which there is plurals data. - * @return a StringEnumeration over the locales available. - * @internal - */ - static StringEnumeration* U_EXPORT2 getAvailableLocales(UErrorCode &status); - - /** - * Returns whether or not there are overrides. - * @param locale the locale to check. - * @return - * @internal - */ - static UBool hasOverride(const Locale &locale); - - /** - * For ICU use only. - * creates a SharedPluralRules object - * @internal - */ - static PluralRules* U_EXPORT2 internalForLocale(const Locale& locale, UPluralType type, UErrorCode& status); - - /** - * For ICU use only. - * Returns handle to the shared, cached PluralRules instance. - * Caller must call removeRef() on returned value once it is done with - * the shared instance. - * @internal - */ - static const SharedPluralRules* U_EXPORT2 createSharedInstance( - const Locale& locale, UPluralType type, UErrorCode& status); - - -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Given an integer, returns the keyword of the first rule - * that applies to the number. This function can be used with - * isKeyword* functions to determine the keyword for default plural rules. - * - * @param number The number for which the rule has to be determined. - * @return The keyword of the selected rule. - * @stable ICU 4.0 - */ - UnicodeString select(int32_t number) const; - - /** - * Given a floating-point number, returns the keyword of the first rule - * that applies to the number. This function can be used with - * isKeyword* functions to determine the keyword for default plural rules. - * - * @param number The number for which the rule has to be determined. - * @return The keyword of the selected rule. - * @stable ICU 4.0 - */ - UnicodeString select(double number) const; - -#ifndef U_HIDE_DRAFT_API - /** - * Given a formatted number, returns the keyword of the first rule - * that applies to the number. This function can be used with - * isKeyword* functions to determine the keyword for default plural rules. - * - * A FormattedNumber allows you to specify an exponent or trailing zeros, - * which can affect the plural category. To get a FormattedNumber, see - * NumberFormatter. - * - * @param number The number for which the rule has to be determined. - * @param status Set if an error occurs while selecting plural keyword. - * This could happen if the FormattedNumber is invalid. - * @return The keyword of the selected rule. - * @draft ICU 64 - */ - UnicodeString select(const number::FormattedNumber& number, UErrorCode& status) const; -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_INTERNAL_API - /** - * @internal - */ - UnicodeString select(const IFixedDecimal &number) const; -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Returns a list of all rule keywords used in this PluralRules - * object. The rule 'other' is always present by default. - * - * @param status Output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @return StringEnumeration with the keywords. - * The caller must delete the object. - * @stable ICU 4.0 - */ - StringEnumeration* getKeywords(UErrorCode& status) const; - -#ifndef U_HIDE_DEPRECATED_API - /** - * Deprecated Function, does not return useful results. - * - * Originally intended to return a unique value for this keyword if it exists, - * else the constant UPLRULES_NO_UNIQUE_VALUE. - * - * @param keyword The keyword. - * @return Stub deprecated function returns UPLRULES_NO_UNIQUE_VALUE always. - * @deprecated ICU 55 - */ - double getUniqueKeywordValue(const UnicodeString& keyword); - - /** - * Deprecated Function, does not produce useful results. - * - * Originally intended to return all the values for which select() would return the keyword. - * If the keyword is unknown, returns no values, but this is not an error. If - * the number of values is unlimited, returns no values and -1 as the - * count. - * - * The number of returned values is typically small. - * - * @param keyword The keyword. - * @param dest Array into which to put the returned values. May - * be NULL if destCapacity is 0. - * @param destCapacity The capacity of the array, must be at least 0. - * @param status The error code. Deprecated function, always sets U_UNSUPPORTED_ERROR. - * @return The count of values available, or -1. This count - * can be larger than destCapacity, but no more than - * destCapacity values will be written. - * @deprecated ICU 55 - */ - int32_t getAllKeywordValues(const UnicodeString &keyword, - double *dest, int32_t destCapacity, - UErrorCode& status); -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Returns sample values for which select() would return the keyword. If - * the keyword is unknown, returns no values, but this is not an error. - * - * The number of returned values is typically small. - * - * @param keyword The keyword. - * @param dest Array into which to put the returned values. May - * be NULL if destCapacity is 0. - * @param destCapacity The capacity of the array, must be at least 0. - * @param status The error code. - * @return The count of values written. - * If more than destCapacity samples are available, then - * only destCapacity are written, and destCapacity is returned as the count, - * rather than setting a U_BUFFER_OVERFLOW_ERROR. - * (The actual number of keyword values could be unlimited.) - * @stable ICU 4.8 - */ - int32_t getSamples(const UnicodeString &keyword, - double *dest, int32_t destCapacity, - UErrorCode& status); - - /** - * Returns TRUE if the given keyword is defined in this - * PluralRules object. - * - * @param keyword the input keyword. - * @return TRUE if the input keyword is defined. - * Otherwise, return FALSE. - * @stable ICU 4.0 - */ - UBool isKeyword(const UnicodeString& keyword) const; - - - /** - * Returns keyword for default plural form. - * - * @return keyword for default plural form. - * @stable ICU 4.0 - */ - UnicodeString getKeywordOther() const; - -#ifndef U_HIDE_INTERNAL_API - /** - * - * @internal - */ - UnicodeString getRules() const; -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Compares the equality of two PluralRules objects. - * - * @param other The other PluralRules object to be compared with. - * @return True if the given PluralRules is the same as this - * PluralRules; false otherwise. - * @stable ICU 4.0 - */ - virtual UBool operator==(const PluralRules& other) const; - - /** - * Compares the inequality of two PluralRules objects. - * - * @param other The PluralRules object to be compared with. - * @return True if the given PluralRules is not the same as this - * PluralRules; false otherwise. - * @stable ICU 4.0 - */ - UBool operator!=(const PluralRules& other) const {return !operator==(other);} - - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 4.0 - * - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 4.0 - */ - virtual UClassID getDynamicClassID() const; - - -private: - RuleChain *mRules; - - PluralRules(); // default constructor not implemented - void parseDescription(const UnicodeString& ruleData, UErrorCode &status); - int32_t getNumberValue(const UnicodeString& token) const; - UnicodeString getRuleFromResource(const Locale& locale, UPluralType type, UErrorCode& status); - RuleChain *rulesForKeyword(const UnicodeString &keyword) const; - - /** - * An internal status variable used to indicate that the object is in an 'invalid' state. - * Used by copy constructor, the assignment operator and the clone method. - */ - UErrorCode mInternalStatus; - - friend class PluralRuleParser; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _PLURRULE -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ptypes.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ptypes.h deleted file mode 100644 index 70324ffee3..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ptypes.h +++ /dev/null @@ -1,130 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1997-2012, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* -* FILE NAME : ptypes.h -* -* Date Name Description -* 05/13/98 nos Creation (content moved here from ptypes.h). -* 03/02/99 stephen Added AS400 support. -* 03/30/99 stephen Added Linux support. -* 04/13/99 stephen Reworked for autoconf. -* 09/18/08 srl Moved basic types back to ptypes.h from platform.h -****************************************************************************** -*/ - -/** - * \file - * \brief C API: Definitions of integer types of various widths - */ - -#ifndef _PTYPES_H -#define _PTYPES_H - -/** - * \def __STDC_LIMIT_MACROS - * According to the Linux stdint.h, the ISO C99 standard specifies that in C++ implementations - * macros like INT32_MIN and UINTPTR_MAX should only be defined if explicitly requested. - * We need to define __STDC_LIMIT_MACROS before including stdint.h in C++ code - * that uses such limit macros. - * @internal - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS -#endif - -/* NULL, size_t, wchar_t */ -#include - -/* - * If all compilers provided all of the C99 headers and types, - * we would just unconditionally #include here - * and not need any of the stuff after including platform.h. - */ - -/* Find out if we have stdint.h etc. */ -#include "unicode/platform.h" - -/*===========================================================================*/ -/* Generic data types */ -/*===========================================================================*/ - -/* If your platform does not have the header, you may - need to edit the typedefs in the #else section below. - Use #if...#else...#endif with predefined compiler macros if possible. */ -#if U_HAVE_STDINT_H - -/* - * We mostly need (which defines the standard integer types) but not . - * includes and adds the printf/scanf helpers PRId32, SCNx16 etc. - * which we almost never use, plus stuff like imaxabs() which we never use. - */ -#include - -#if U_PLATFORM == U_PF_OS390 -/* The features header is needed to get (u)int64_t sometimes. */ -#include -/* z/OS has , but some versions are missing uint8_t (APAR PK62248). */ -#if !defined(__uint8_t) -#define __uint8_t 1 -typedef unsigned char uint8_t; -#endif -#endif /* U_PLATFORM == U_PF_OS390 */ - -#elif U_HAVE_INTTYPES_H - -# include - -#else /* neither U_HAVE_STDINT_H nor U_HAVE_INTTYPES_H */ - -/// \cond -#if ! U_HAVE_INT8_T -typedef signed char int8_t; -#endif - -#if ! U_HAVE_UINT8_T -typedef unsigned char uint8_t; -#endif - -#if ! U_HAVE_INT16_T -typedef signed short int16_t; -#endif - -#if ! U_HAVE_UINT16_T -typedef unsigned short uint16_t; -#endif - -#if ! U_HAVE_INT32_T -typedef signed int int32_t; -#endif - -#if ! U_HAVE_UINT32_T -typedef unsigned int uint32_t; -#endif - -#if ! U_HAVE_INT64_T -#ifdef _MSC_VER - typedef signed __int64 int64_t; -#else - typedef signed long long int64_t; -#endif -#endif - -#if ! U_HAVE_UINT64_T -#ifdef _MSC_VER - typedef unsigned __int64 uint64_t; -#else - typedef unsigned long long uint64_t; -#endif -#endif -/// \endcond - -#endif /* U_HAVE_STDINT_H / U_HAVE_INTTYPES_H */ - -#endif /* _PTYPES_H */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/putil.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/putil.h deleted file mode 100644 index 759b136c13..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/putil.h +++ /dev/null @@ -1,183 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1997-2014, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* -* FILE NAME : putil.h -* -* Date Name Description -* 05/14/98 nos Creation (content moved here from utypes.h). -* 06/17/99 erm Added IEEE_754 -* 07/22/98 stephen Added IEEEremainder, max, min, trunc -* 08/13/98 stephen Added isNegativeInfinity, isPositiveInfinity -* 08/24/98 stephen Added longBitsFromDouble -* 03/02/99 stephen Removed openFile(). Added AS400 support. -* 04/15/99 stephen Converted to C -* 11/15/99 helena Integrated S/390 changes for IEEE support. -* 01/11/00 helena Added u_getVersion. -****************************************************************************** -*/ - -#ifndef PUTIL_H -#define PUTIL_H - -#include "unicode/utypes.h" - /** - * \file - * \brief C API: Platform Utilities - */ - -/*==========================================================================*/ -/* Platform utilities */ -/*==========================================================================*/ - -/** - * Platform utilities isolates the platform dependencies of the - * library. For each platform which this code is ported to, these - * functions may have to be re-implemented. - */ - -/** - * Return the ICU data directory. - * The data directory is where common format ICU data files (.dat files) - * are loaded from. Note that normal use of the built-in ICU - * facilities does not require loading of an external data file; - * unless you are adding custom data to ICU, the data directory - * does not need to be set. - * - * The data directory is determined as follows: - * If u_setDataDirectory() has been called, that is it, otherwise - * if the ICU_DATA environment variable is set, use that, otherwise - * If a data directory was specified at ICU build time - * - * \code - * #define ICU_DATA_DIR "path" - * \endcode - * use that, - * otherwise no data directory is available. - * - * @return the data directory, or an empty string ("") if no data directory has - * been specified. - * - * @stable ICU 2.0 - */ -U_STABLE const char* U_EXPORT2 u_getDataDirectory(void); - - -/** - * Set the ICU data directory. - * The data directory is where common format ICU data files (.dat files) - * are loaded from. Note that normal use of the built-in ICU - * facilities does not require loading of an external data file; - * unless you are adding custom data to ICU, the data directory - * does not need to be set. - * - * This function should be called at most once in a process, before the - * first ICU operation (e.g., u_init()) that will require the loading of an - * ICU data file. - * This function is not thread-safe. Use it before calling ICU APIs from - * multiple threads. - * - * @param directory The directory to be set. - * - * @see u_init - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 u_setDataDirectory(const char *directory); - -#ifndef U_HIDE_INTERNAL_API -/** - * Return the time zone files override directory, or an empty string if - * no directory was specified. Certain time zone resources will be preferentially - * loaded from individual files in this directory. - * - * @return the time zone data override directory. - * @internal - */ -U_INTERNAL const char * U_EXPORT2 u_getTimeZoneFilesDirectory(UErrorCode *status); - -/** - * Set the time zone files override directory. - * This function is not thread safe; it must not be called concurrently with - * u_getTimeZoneFilesDirectory() or any other use of ICU time zone functions. - * This function should only be called before using any ICU service that - * will access the time zone data. - * @internal - */ -U_INTERNAL void U_EXPORT2 u_setTimeZoneFilesDirectory(const char *path, UErrorCode *status); -#endif /* U_HIDE_INTERNAL_API */ - - -/** - * @{ - * Filesystem file and path separator characters. - * Example: '/' and ':' on Unix, '\\' and ';' on Windows. - * @stable ICU 2.0 - */ -#if U_PLATFORM_USES_ONLY_WIN32_API -# define U_FILE_SEP_CHAR '\\' -# define U_FILE_ALT_SEP_CHAR '/' -# define U_PATH_SEP_CHAR ';' -# define U_FILE_SEP_STRING "\\" -# define U_FILE_ALT_SEP_STRING "/" -# define U_PATH_SEP_STRING ";" -#else -# define U_FILE_SEP_CHAR '/' -# define U_FILE_ALT_SEP_CHAR '/' -# define U_PATH_SEP_CHAR ':' -# define U_FILE_SEP_STRING "/" -# define U_FILE_ALT_SEP_STRING "/" -# define U_PATH_SEP_STRING ":" -#endif - -/** @} */ - -/** - * Convert char characters to UChar characters. - * This utility function is useful only for "invariant characters" - * that are encoded in the platform default encoding. - * They are a small, constant subset of the encoding and include - * just the latin letters, digits, and some punctuation. - * For details, see U_CHARSET_FAMILY. - * - * @param cs Input string, points to length - * character bytes from a subset of the platform encoding. - * @param us Output string, points to memory for length - * Unicode characters. - * @param length The number of characters to convert; this may - * include the terminating NUL. - * - * @see U_CHARSET_FAMILY - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -u_charsToUChars(const char *cs, UChar *us, int32_t length); - -/** - * Convert UChar characters to char characters. - * This utility function is useful only for "invariant characters" - * that can be encoded in the platform default encoding. - * They are a small, constant subset of the encoding and include - * just the latin letters, digits, and some punctuation. - * For details, see U_CHARSET_FAMILY. - * - * @param us Input string, points to length - * Unicode characters that can be encoded with the - * codepage-invariant subset of the platform encoding. - * @param cs Output string, points to memory for length - * character bytes. - * @param length The number of characters to convert; this may - * include the terminating NUL. - * - * @see U_CHARSET_FAMILY - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -u_UCharsToChars(const UChar *us, char *cs, int32_t length); - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rbbi.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rbbi.h deleted file mode 100644 index 9b086ffcca..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rbbi.h +++ /dev/null @@ -1,731 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -*************************************************************************** -* Copyright (C) 1999-2016 International Business Machines Corporation * -* and others. All rights reserved. * -*************************************************************************** - -********************************************************************** -* Date Name Description -* 10/22/99 alan Creation. -* 11/11/99 rgillam Complete port from Java. -********************************************************************** -*/ - -#ifndef RBBI_H -#define RBBI_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Rule Based Break Iterator - */ - -#if !UCONFIG_NO_BREAK_ITERATION - -#include "unicode/brkiter.h" -#include "unicode/udata.h" -#include "unicode/parseerr.h" -#include "unicode/schriter.h" -// for Apple addition: -#include "unicode/urbtok.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** @internal */ -class LanguageBreakEngine; -struct RBBIDataHeader; -class RBBIDataWrapper; -class UnhandledEngine; -class UStack; - -/** - * - * A subclass of BreakIterator whose behavior is specified using a list of rules. - *

Instances of this class are most commonly created by the factory methods of - * BreakIterator::createWordInstance(), BreakIterator::createLineInstance(), etc., - * and then used via the abstract API in class BreakIterator

- * - *

See the ICU User Guide for information on Break Iterator Rules.

- * - *

This class is not intended to be subclassed.

- */ -class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { - -private: - /** - * The UText through which this BreakIterator accesses the text - * @internal (private) - */ - UText fText; - -#ifndef U_HIDE_INTERNAL_API -public: -#endif /* U_HIDE_INTERNAL_API */ - /** - * The rule data for this BreakIterator instance. - * Not for general use; Public only for testing purposes. - * @internal - */ - RBBIDataWrapper *fData; -private: - - /** - * Character categories for the Latin1 subset of Unicode - * @internal Apple-only - */ - uint16_t *fLatin1Cat; - - /** - * The current position of the iterator. Pinned, 0 < fPosition <= text.length. - * Never has the value UBRK_DONE (-1). - */ - int32_t fPosition; - - /** - * TODO: - */ - int32_t fRuleStatusIndex; - - /** - * Cache of previously determined boundary positions. - */ - class BreakCache; - BreakCache *fBreakCache; - - /** - * Cache of boundary positions within a region of text that has been - * sub-divided by dictionary based breaking. - */ - class DictionaryCache; - DictionaryCache *fDictionaryCache; - - /** - * - * If present, UStack of LanguageBreakEngine objects that might handle - * dictionary characters. Searched from top to bottom to find an object to - * handle a given character. - * @internal (private) - */ - UStack *fLanguageBreakEngines; - - /** - * - * If present, the special LanguageBreakEngine used for handling - * characters that are in the dictionary set, but not handled by any - * LanguageBreakEngine. - * @internal (private) - */ - UnhandledEngine *fUnhandledBreakEngine; - - /** - * Counter for the number of characters encountered with the "dictionary" - * flag set. - * @internal (private) - */ - uint32_t fDictionaryCharCount; - - /** - * A character iterator that refers to the same text as the UText, above. - * Only included for compatibility with old API, which was based on CharacterIterators. - * Value may be adopted from outside, or one of fSCharIter or fDCharIter, below. - */ - CharacterIterator *fCharIter; - - /** - * When the input text is provided by a UnicodeString, this will point to - * a characterIterator that wraps that data. Needed only for the - * implementation of getText(), a backwards compatibility issue. - */ - StringCharacterIterator fSCharIter; - - /** - * True when iteration has run off the end, and iterator functions should return UBRK_DONE. - */ - UBool fDone; - - //======================================================================= - // constructors - //======================================================================= - -// The following is intended to be private in open-source. -// However Apple needs it to be public for urbtok.cpp -public: - /** - * Constructor from a flattened set of RBBI data in malloced memory. - * RulesBasedBreakIterators built from a custom set of rules - * are created via this constructor; the rules are compiled - * into memory, then the break iterator is constructed here. - * - * The break iterator adopts the memory, and will - * free it when done. - * @internal (private) - */ - RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status); -private: - - /** @internal */ - friend class RBBIRuleBuilder; - /** @internal */ - friend class BreakIterator; - -public: - - /** Default constructor. Creates an empty shell of an iterator, with no - * rules or text to iterate over. Object can subsequently be assigned to. - * @stable ICU 2.2 - */ - RuleBasedBreakIterator(); - - /** - * Copy constructor. Will produce a break iterator with the same behavior, - * and which iterates over the same text, as the one passed in. - * @param that The RuleBasedBreakIterator passed to be copied - * @stable ICU 2.0 - */ - RuleBasedBreakIterator(const RuleBasedBreakIterator& that); - - /** - * Construct a RuleBasedBreakIterator from a set of rules supplied as a string. - * @param rules The break rules to be used. - * @param parseError In the event of a syntax error in the rules, provides the location - * within the rules of the problem. - * @param status Information on any errors encountered. - * @stable ICU 2.2 - */ - RuleBasedBreakIterator( const UnicodeString &rules, - UParseError &parseError, - UErrorCode &status); - - /** - * Construct a RuleBasedBreakIterator from a set of precompiled binary rules. - * Binary rules are obtained from RulesBasedBreakIterator::getBinaryRules(). - * Construction of a break iterator in this way is substantially faster than - * construction from source rules. - * - * Ownership of the storage containing the compiled rules remains with the - * caller of this function. The compiled rules must not be modified or - * deleted during the life of the break iterator. - * - * The compiled rules are not compatible across different major versions of ICU. - * The compiled rules are compatible only between machines with the same - * byte ordering (little or big endian) and the same base character set family - * (ASCII or EBCDIC). - * - * @see #getBinaryRules - * @param compiledRules A pointer to the compiled break rules to be used. - * @param ruleLength The length of the compiled break rules, in bytes. This - * corresponds to the length value produced by getBinaryRules(). - * @param status Information on any errors encountered, including invalid - * binary rules. - * @stable ICU 4.8 - */ - RuleBasedBreakIterator(const uint8_t *compiledRules, - uint32_t ruleLength, - UErrorCode &status); - - /** - * This constructor uses the udata interface to create a BreakIterator - * whose internal tables live in a memory-mapped file. "image" is an - * ICU UDataMemory handle for the pre-compiled break iterator tables. - * @param image handle to the memory image for the break iterator data. - * Ownership of the UDataMemory handle passes to the Break Iterator, - * which will be responsible for closing it when it is no longer needed. - * @param status Information on any errors encountered. - * @see udata_open - * @see #getBinaryRules - * @stable ICU 2.8 - */ - RuleBasedBreakIterator(UDataMemory* image, UErrorCode &status); - - /** - * Destructor - * @stable ICU 2.0 - */ - virtual ~RuleBasedBreakIterator(); - - /** - * Assignment operator. Sets this iterator to have the same behavior, - * and iterate over the same text, as the one passed in. - * @param that The RuleBasedBreakItertor passed in - * @return the newly created RuleBasedBreakIterator - * @stable ICU 2.0 - */ - RuleBasedBreakIterator& operator=(const RuleBasedBreakIterator& that); - - /** - * Equality operator. Returns TRUE if both BreakIterators are of the - * same class, have the same behavior, and iterate over the same text. - * @param that The BreakIterator to be compared for equality - * @return TRUE if both BreakIterators are of the - * same class, have the same behavior, and iterate over the same text. - * @stable ICU 2.0 - */ - virtual UBool operator==(const BreakIterator& that) const; - - /** - * Not-equal operator. If operator== returns TRUE, this returns FALSE, - * and vice versa. - * @param that The BreakIterator to be compared for inequality - * @return TRUE if both BreakIterators are not same. - * @stable ICU 2.0 - */ - inline UBool operator!=(const BreakIterator& that) const; - - /** - * Returns a newly-constructed RuleBasedBreakIterator with the same - * behavior, and iterating over the same text, as this one. - * Differs from the copy constructor in that it is polymorphic, and - * will correctly clone (copy) a derived class. - * clone() is thread safe. Multiple threads may simultaneously - * clone the same source break iterator. - * @return a newly-constructed RuleBasedBreakIterator - * @stable ICU 2.0 - */ - virtual BreakIterator* clone() const; - - /** - * Compute a hash code for this BreakIterator - * @return A hash code - * @stable ICU 2.0 - */ - virtual int32_t hashCode(void) const; - - /** - * Returns the description used to create this iterator - * @return the description used to create this iterator - * @stable ICU 2.0 - */ - virtual const UnicodeString& getRules(void) const; - - //======================================================================= - // BreakIterator overrides - //======================================================================= - - /** - *

- * Return a CharacterIterator over the text being analyzed. - * The returned character iterator is owned by the break iterator, and must - * not be deleted by the caller. Repeated calls to this function may - * return the same CharacterIterator. - *

- *

- * The returned character iterator must not be used concurrently with - * the break iterator. If concurrent operation is needed, clone the - * returned character iterator first and operate on the clone. - *

- *

- * When the break iterator is operating on text supplied via a UText, - * this function will fail. Lacking any way to signal failures, it - * returns an CharacterIterator containing no text. - * The function getUText() provides similar functionality, - * is reliable, and is more efficient. - *

- * - * TODO: deprecate this function? - * - * @return An iterator over the text being analyzed. - * @stable ICU 2.0 - */ - virtual CharacterIterator& getText(void) const; - - - /** - * Get a UText for the text being analyzed. - * The returned UText is a shallow clone of the UText used internally - * by the break iterator implementation. It can safely be used to - * access the text without impacting any break iterator operations, - * but the underlying text itself must not be altered. - * - * @param fillIn A UText to be filled in. If NULL, a new UText will be - * allocated to hold the result. - * @param status receives any error codes. - * @return The current UText for this break iterator. If an input - * UText was provided, it will always be returned. - * @stable ICU 3.4 - */ - virtual UText *getUText(UText *fillIn, UErrorCode &status) const; - - /** - * Set the iterator to analyze a new piece of text. This function resets - * the current iteration position to the beginning of the text. - * @param newText An iterator over the text to analyze. The BreakIterator - * takes ownership of the character iterator. The caller MUST NOT delete it! - * @stable ICU 2.0 - */ - virtual void adoptText(CharacterIterator* newText); - - /** - * Set the iterator to analyze a new piece of text. This function resets - * the current iteration position to the beginning of the text. - * - * The BreakIterator will retain a reference to the supplied string. - * The caller must not modify or delete the text while the BreakIterator - * retains the reference. - * - * @param newText The text to analyze. - * @stable ICU 2.0 - */ - virtual void setText(const UnicodeString& newText); - - /** - * Reset the break iterator to operate over the text represented by - * the UText. The iterator position is reset to the start. - * - * This function makes a shallow clone of the supplied UText. This means - * that the caller is free to immediately close or otherwise reuse the - * Utext that was passed as a parameter, but that the underlying text itself - * must not be altered while being referenced by the break iterator. - * - * @param text The UText used to change the text. - * @param status Receives any error codes. - * @stable ICU 3.4 - */ - virtual void setText(UText *text, UErrorCode &status); - - /** - * Sets the current iteration position to the beginning of the text, position zero. - * @return The offset of the beginning of the text, zero. - * @stable ICU 2.0 - */ - virtual int32_t first(void); - - /** - * Sets the current iteration position to the end of the text. - * @return The text's past-the-end offset. - * @stable ICU 2.0 - */ - virtual int32_t last(void); - - /** - * Advances the iterator either forward or backward the specified number of steps. - * Negative values move backward, and positive values move forward. This is - * equivalent to repeatedly calling next() or previous(). - * @param n The number of steps to move. The sign indicates the direction - * (negative is backwards, and positive is forwards). - * @return The character offset of the boundary position n boundaries away from - * the current one. - * @stable ICU 2.0 - */ - virtual int32_t next(int32_t n); - - /** - * Advances the iterator to the next boundary position. - * @return The position of the first boundary after this one. - * @stable ICU 2.0 - */ - virtual int32_t next(void); - - /** - * Moves the iterator backwards, to the last boundary preceding this one. - * @return The position of the last boundary position preceding this one. - * @stable ICU 2.0 - */ - virtual int32_t previous(void); - - /** - * Sets the iterator to refer to the first boundary position following - * the specified position. - * @param offset The position from which to begin searching for a break position. - * @return The position of the first break after the current position. - * @stable ICU 2.0 - */ - virtual int32_t following(int32_t offset); - - /** - * Sets the iterator to refer to the last boundary position before the - * specified position. - * @param offset The position to begin searching for a break from. - * @return The position of the last boundary before the starting position. - * @stable ICU 2.0 - */ - virtual int32_t preceding(int32_t offset); - - /** - * Returns true if the specified position is a boundary position. As a side - * effect, leaves the iterator pointing to the first boundary position at - * or after "offset". - * @param offset the offset to check. - * @return True if "offset" is a boundary position. - * @stable ICU 2.0 - */ - virtual UBool isBoundary(int32_t offset); - - /** - * Returns the current iteration position. Note that UBRK_DONE is never - * returned from this function; if iteration has run to the end of a - * string, current() will return the length of the string while - * next() will return UBRK_DONE). - * @return The current iteration position. - * @stable ICU 2.0 - */ - virtual int32_t current(void) const; - - - /** - * Return the status tag from the break rule that determined the boundary at - * the current iteration position. For break rules that do not specify a - * status, a default value of 0 is returned. If more than one break rule - * would cause a boundary to be located at some position in the text, - * the numerically largest of the applicable status values is returned. - *

- * Of the standard types of ICU break iterators, only word break and - * line break provide status values. The values are defined in - * the header file ubrk.h. For Word breaks, the status allows distinguishing between words - * that contain alphabetic letters, "words" that appear to be numbers, - * punctuation and spaces, words containing ideographic characters, and - * more. For Line Break, the status distinguishes between hard (mandatory) breaks - * and soft (potential) break positions. - *

- * getRuleStatus() can be called after obtaining a boundary - * position from next(), previous(), or - * any other break iterator functions that returns a boundary position. - *

- * Note that getRuleStatus() returns the value corresponding to - * current() index even after next() has returned DONE. - *

- * When creating custom break rules, one is free to define whatever - * status values may be convenient for the application. - *

- * @return the status from the break rule that determined the boundary - * at the current iteration position. - * - * @see UWordBreak - * @stable ICU 2.2 - */ - virtual int32_t getRuleStatus() const; - - /** - * Get the status (tag) values from the break rule(s) that determined the boundary - * at the current iteration position. - *

- * The returned status value(s) are stored into an array provided by the caller. - * The values are stored in sorted (ascending) order. - * If the capacity of the output array is insufficient to hold the data, - * the output will be truncated to the available length, and a - * U_BUFFER_OVERFLOW_ERROR will be signaled. - * - * @param fillInVec an array to be filled in with the status values. - * @param capacity the length of the supplied vector. A length of zero causes - * the function to return the number of status values, in the - * normal way, without attempting to store any values. - * @param status receives error codes. - * @return The number of rule status values from the rules that determined - * the boundary at the current iteration position. - * In the event of a U_BUFFER_OVERFLOW_ERROR, the return value - * is the total number of status values that were available, - * not the reduced number that were actually returned. - * @see getRuleStatus - * @stable ICU 3.0 - */ - virtual int32_t getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status); - - /** - * Apple custom extension - * Initializes Latin1 category - * @internal - */ - void initLatin1Cat(void); - - /** - * Apple custom extension - * Fetch the next set of tokens. - * @param maxTokens The maximum number of tokens to return. - * @param outTokenRanges Pointer to output array of token ranges. - * @param outTokenFlags (optional) pointer to output array of token flags. - * @internal - */ - int32_t tokenize(int32_t maxTokens, RuleBasedTokenRange *outTokenRanges, unsigned long *outTokenFlags); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. - * This method is to implement a simple version of RTTI, since not all - * C++ compilers support genuine RTTI. Polymorphic operator==() and - * clone() methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const; - - /** - * Returns the class ID for this class. This is useful only for - * comparing to a return value from getDynamicClassID(). For example: - * - * Base* polymorphic_pointer = createPolymorphicObject(); - * if (polymorphic_pointer->getDynamicClassID() == - * Derived::getStaticClassID()) ... - * - * @return The class ID for all objects of this class. - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Deprecated functionality. Use clone() instead. - * - * Create a clone (copy) of this break iterator in memory provided - * by the caller. The idea is to increase performance by avoiding - * a storage allocation. Use of this function is NOT RECOMMENDED. - * Performance gains are minimal, and correct buffer management is - * tricky. Use clone() instead. - * - * @param stackBuffer The pointer to the memory into which the cloned object - * should be placed. If NULL, allocate heap memory - * for the cloned object. - * @param BufferSize The size of the buffer. If zero, return the required - * buffer size, but do not clone the object. If the - * size was too small (but not zero), allocate heap - * storage for the cloned object. - * - * @param status Error status. U_SAFECLONE_ALLOCATED_WARNING will be - * returned if the provided buffer was too small, and - * the clone was therefore put on the heap. - * - * @return Pointer to the clone object. This may differ from the stackBuffer - * address if the byte alignment of the stack buffer was not suitable - * or if the stackBuffer was too small to hold the clone. - * @deprecated ICU 52. Use clone() instead. - */ - virtual BreakIterator * createBufferClone(void *stackBuffer, - int32_t &BufferSize, - UErrorCode &status); - - - /** - * Return the binary form of compiled break rules, - * which can then be used to create a new break iterator at some - * time in the future. Creating a break iterator from pre-compiled rules - * is much faster than building one from the source form of the - * break rules. - * - * The binary data can only be used with the same version of ICU - * and on the same platform type (processor endian-ness) - * - * @param length Returns the length of the binary data. (Out parameter.) - * - * @return A pointer to the binary (compiled) rule data. The storage - * belongs to the RulesBasedBreakIterator object, not the - * caller, and must not be modified or deleted. - * @stable ICU 4.8 - */ - virtual const uint8_t *getBinaryRules(uint32_t &length); - - /** - * Set the subject text string upon which the break iterator is operating - * without changing any other aspect of the matching state. - * The new and previous text strings must have the same content. - * - * This function is intended for use in environments where ICU is operating on - * strings that may move around in memory. It provides a mechanism for notifying - * ICU that the string has been relocated, and providing a new UText to access the - * string in its new position. - * - * Note that the break iterator implementation never copies the underlying text - * of a string being processed, but always operates directly on the original text - * provided by the user. Refreshing simply drops the references to the old text - * and replaces them with references to the new. - * - * Caution: this function is normally used only by very specialized, - * system-level code. One example use case is with garbage collection that moves - * the text in memory. - * - * @param input The new (moved) text string. - * @param status Receives errors detected by this function. - * @return *this - * - * @stable ICU 49 - */ - virtual RuleBasedBreakIterator &refreshInputText(UText *input, UErrorCode &status); - - -private: - //======================================================================= - // implementation - //======================================================================= - /** - * Dumps caches and performs other actions associated with a complete change - * in text or iteration position. - * @internal (private) - */ - void reset(void); - - /** - * Common initialization function, used by constructors and bufferClone. - * @internal (private) - */ - void init(UErrorCode &status); - - /** - * Iterate backwards from an arbitrary position in the input text using the - * synthesized Safe Reverse rules. - * This locates a "Safe Position" from which the forward break rules - * will operate correctly. A Safe Position is not necessarily a boundary itself. - * - * @param fromPosition the position in the input text to begin the iteration. - * @internal (private) - */ - int32_t handleSafePrevious(int32_t fromPosition); - - /** - * Find a rule-based boundary by running the state machine. - * Input - * fPosition, the position in the text to begin from. - * Output - * fPosition: the boundary following the starting position. - * fDictionaryCharCount the number of dictionary characters encountered. - * If > 0, the segment will be further subdivided - * fRuleStatusIndex Info from the state table indicating which rules caused the boundary. - * - * @internal (private) - */ - int32_t handleNext(); - int32_t handleNextInternal(); - - - /** - * This function returns the appropriate LanguageBreakEngine for a - * given character c. - * @param c A character in the dictionary set - * @internal (private) - */ - const LanguageBreakEngine *getLanguageBreakEngine(UChar32 c); - - public: -#ifndef U_HIDE_INTERNAL_API - /** - * Debugging function only. - * @internal - */ - void dumpCache(); - - /** - * Debugging function only. - * @internal - */ - void dumpTables(); - -#endif /* U_HIDE_INTERNAL_API */ -}; - -//------------------------------------------------------------------------------ -// -// Inline Functions Definitions ... -// -//------------------------------------------------------------------------------ - -inline UBool RuleBasedBreakIterator::operator!=(const BreakIterator& that) const { - return !operator==(that); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rbnf.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rbnf.h deleted file mode 100644 index 6befb43781..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rbnf.h +++ /dev/null @@ -1,1141 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 1997-2015, International Business Machines Corporation and others. -* All Rights Reserved. -******************************************************************************* -*/ - -#ifndef RBNF_H -#define RBNF_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Rule Based Number Format - */ - -/** - * \def U_HAVE_RBNF - * This will be 0 if RBNF support is not included in ICU - * and 1 if it is. - * - * @stable ICU 2.4 - */ -#if UCONFIG_NO_FORMATTING -#define U_HAVE_RBNF 0 -#else -#define U_HAVE_RBNF 1 - -#include "unicode/dcfmtsym.h" -#include "unicode/fmtable.h" -#include "unicode/locid.h" -#include "unicode/numfmt.h" -#include "unicode/unistr.h" -#include "unicode/strenum.h" -#include "unicode/brkiter.h" -#include "unicode/upluralrules.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class NFRule; -class NFRuleSet; -class LocalizationInfo; -class PluralFormat; -class RuleBasedCollator; - -/** - * Tags for the predefined rulesets. - * - * @stable ICU 2.2 - */ -enum URBNFRuleSetTag { - URBNF_SPELLOUT, - URBNF_ORDINAL, - URBNF_DURATION, - URBNF_NUMBERING_SYSTEM, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal URBNFRuleSetTag value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - URBNF_COUNT -#endif // U_HIDE_DEPRECATED_API -}; - -/** - * The RuleBasedNumberFormat class formats numbers according to a set of rules. This number formatter is - * typically used for spelling out numeric values in words (e.g., 25,3476 as - * "twenty-five thousand three hundred seventy-six" or "vingt-cinq mille trois - * cents soixante-seize" or - * "fünfundzwanzigtausenddreihundertsechsundsiebzig"), but can also be used for - * other complicated formatting tasks, such as formatting a number of seconds as hours, - * minutes and seconds (e.g., 3,730 as "1:02:10"). - * - *

The resources contain three predefined formatters for each locale: spellout, which - * spells out a value in words (123 is "one hundred twenty-three"); ordinal, which - * appends an ordinal suffix to the end of a numeral (123 is "123rd"); and - * duration, which shows a duration in seconds as hours, minutes, and seconds (123 is - * "2:03").  The client can also define more specialized RuleBasedNumberFormats - * by supplying programmer-defined rule sets.

- * - *

The behavior of a RuleBasedNumberFormat is specified by a textual description - * that is either passed to the constructor as a String or loaded from a resource - * bundle. In its simplest form, the description consists of a semicolon-delimited list of rules. - * Each rule has a string of output text and a value or range of values it is applicable to. - * In a typical spellout rule set, the first twenty rules are the words for the numbers from - * 0 to 19:

- * - *
zero; one; two; three; four; five; six; seven; eight; nine;
- * ten; eleven; twelve; thirteen; fourteen; fifteen; sixteen; seventeen; eighteen; nineteen;
- * - *

For larger numbers, we can use the preceding set of rules to format the ones place, and - * we only have to supply the words for the multiples of 10:

- * - *
 20: twenty[->>];
- * 30: thirty[->>];
- * 40: forty[->>];
- * 50: fifty[->>];
- * 60: sixty[->>];
- * 70: seventy[->>];
- * 80: eighty[->>];
- * 90: ninety[->>];
- * - *

In these rules, the base value is spelled out explicitly and set off from the - * rule's output text with a colon. The rules are in a sorted list, and a rule is applicable - * to all numbers from its own base value to one less than the next rule's base value. The - * ">>" token is called a substitution and tells the fomatter to - * isolate the number's ones digit, format it using this same set of rules, and place the - * result at the position of the ">>" token. Text in brackets is omitted if - * the number being formatted is an even multiple of 10 (the hyphen is a literal hyphen; 24 - * is "twenty-four," not "twenty four").

- * - *

For even larger numbers, we can actually look up several parts of the number in the - * list:

- * - *
100: << hundred[ >>];
- * - *

The "<<" represents a new kind of substitution. The << isolates - * the hundreds digit (and any digits to its left), formats it using this same rule set, and - * places the result where the "<<" was. Notice also that the meaning of - * >> has changed: it now refers to both the tens and the ones digits. The meaning of - * both substitutions depends on the rule's base value. The base value determines the rule's divisor, - * which is the highest power of 10 that is less than or equal to the base value (the user - * can change this). To fill in the substitutions, the formatter divides the number being - * formatted by the divisor. The integral quotient is used to fill in the << - * substitution, and the remainder is used to fill in the >> substitution. The meaning - * of the brackets changes similarly: text in brackets is omitted if the value being - * formatted is an even multiple of the rule's divisor. The rules are applied recursively, so - * if a substitution is filled in with text that includes another substitution, that - * substitution is also filled in.

- * - *

This rule covers values up to 999, at which point we add another rule:

- * - *
1000: << thousand[ >>];
- * - *

Again, the meanings of the brackets and substitution tokens shift because the rule's - * base value is a higher power of 10, changing the rule's divisor. This rule can actually be - * used all the way up to 999,999. This allows us to finish out the rules as follows:

- * - *
 1,000,000: << million[ >>];
- * 1,000,000,000: << billion[ >>];
- * 1,000,000,000,000: << trillion[ >>];
- * 1,000,000,000,000,000: OUT OF RANGE!;
- * - *

Commas, periods, and spaces can be used in the base values to improve legibility and - * are ignored by the rule parser. The last rule in the list is customarily treated as an - * "overflow rule," applying to everything from its base value on up, and often (as - * in this example) being used to print out an error message or default representation. - * Notice also that the size of the major groupings in large numbers is controlled by the - * spacing of the rules: because in English we group numbers by thousand, the higher rules - * are separated from each other by a factor of 1,000.

- * - *

To see how these rules actually work in practice, consider the following example: - * Formatting 25,430 with this rule set would work like this:

- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
<< thousand >>[the rule whose base value is 1,000 is applicable to 25,340]
twenty->> thousand >>[25,340 over 1,000 is 25. The rule for 20 applies.]
twenty-five thousand >>[25 mod 10 is 5. The rule for 5 is "five."
twenty-five thousand << hundred >>[25,340 mod 1,000 is 340. The rule for 100 applies.]
twenty-five thousand three hundred >>[340 over 100 is 3. The rule for 3 is "three."]
twenty-five thousand three hundred forty[340 mod 100 is 40. The rule for 40 applies. Since 40 divides - * evenly by 10, the hyphen and substitution in the brackets are omitted.]
- * - *

The above syntax suffices only to format positive integers. To format negative numbers, - * we add a special rule:

- * - *
-x: minus >>;
- * - *

This is called a negative-number rule, and is identified by "-x" - * where the base value would be. This rule is used to format all negative numbers. the - * >> token here means "find the number's absolute value, format it with these - * rules, and put the result here."

- * - *

We also add a special rule called a fraction rule for numbers with fractional - * parts:

- * - *
x.x: << point >>;
- * - *

This rule is used for all positive non-integers (negative non-integers pass through the - * negative-number rule first and then through this rule). Here, the << token refers to - * the number's integral part, and the >> to the number's fractional part. The - * fractional part is formatted as a series of single-digit numbers (e.g., 123.456 would be - * formatted as "one hundred twenty-three point four five six").

- * - *

To see how this rule syntax is applied to various languages, examine the resource data.

- * - *

There is actually much more flexibility built into the rule language than the - * description above shows. A formatter may own multiple rule sets, which can be selected by - * the caller, and which can use each other to fill in their substitutions. Substitutions can - * also be filled in with digits, using a DecimalFormat object. There is syntax that can be - * used to alter a rule's divisor in various ways. And there is provision for much more - * flexible fraction handling. A complete description of the rule syntax follows:

- * - *
- * - *

The description of a RuleBasedNumberFormat's behavior consists of one or more rule - * sets. Each rule set consists of a name, a colon, and a list of rules. A rule - * set name must begin with a % sign. Rule sets with names that begin with a single % sign - * are public: the caller can specify that they be used to format and parse numbers. - * Rule sets with names that begin with %% are private: they exist only for the use - * of other rule sets. If a formatter only has one rule set, the name may be omitted.

- * - *

The user can also specify a special "rule set" named %%lenient-parse. - * The body of %%lenient-parse isn't a set of number-formatting rules, but a RuleBasedCollator - * description which is used to define equivalences for lenient parsing. For more information - * on the syntax, see RuleBasedCollator. For more information on lenient parsing, - * see setLenientParse(). Note: symbols that have syntactic meaning - * in collation rules, such as '&', have no particular meaning when appearing outside - * of the lenient-parse rule set.

- * - *

The body of a rule set consists of an ordered, semicolon-delimited list of rules. - * Internally, every rule has a base value, a divisor, rule text, and zero, one, or two substitutions. - * These parameters are controlled by the description syntax, which consists of a rule - * descriptor, a colon, and a rule body.

- * - *

A rule descriptor can take one of the following forms (text in italics is the - * name of a token):

- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
bv:bv specifies the rule's base value. bv is a decimal - * number expressed using ASCII digits. bv may contain spaces, period, and commas, - * which are ignored. The rule's divisor is the highest power of 10 less than or equal to - * the base value.
bv/rad:bv specifies the rule's base value. The rule's divisor is the - * highest power of rad less than or equal to the base value.
bv>:bv specifies the rule's base value. To calculate the divisor, - * let the radix be 10, and the exponent be the highest exponent of the radix that yields a - * result less than or equal to the base value. Every > character after the base value - * decreases the exponent by 1. If the exponent is positive or 0, the divisor is the radix - * raised to the power of the exponent; otherwise, the divisor is 1.
bv/rad>:bv specifies the rule's base value. To calculate the divisor, - * let the radix be rad, and the exponent be the highest exponent of the radix that - * yields a result less than or equal to the base value. Every > character after the radix - * decreases the exponent by 1. If the exponent is positive or 0, the divisor is the radix - * raised to the power of the exponent; otherwise, the divisor is 1.
-x:The rule is a negative-number rule.
x.x:The rule is an improper fraction rule. If the full stop in - * the middle of the rule name is replaced with the decimal point - * that is used in the language or DecimalFormatSymbols, then that rule will - * have precedence when formatting and parsing this rule. For example, some - * languages use the comma, and can thus be written as x,x instead. For example, - * you can use "x.x: << point >>;x,x: << comma >>;" to - * handle the decimal point that matches the language's natural spelling of - * the punctuation of either the full stop or comma.
0.x:The rule is a proper fraction rule. If the full stop in - * the middle of the rule name is replaced with the decimal point - * that is used in the language or DecimalFormatSymbols, then that rule will - * have precedence when formatting and parsing this rule. For example, some - * languages use the comma, and can thus be written as 0,x instead. For example, - * you can use "0.x: point >>;0,x: comma >>;" to - * handle the decimal point that matches the language's natural spelling of - * the punctuation of either the full stop or comma.
x.0:The rule is a master rule. If the full stop in - * the middle of the rule name is replaced with the decimal point - * that is used in the language or DecimalFormatSymbols, then that rule will - * have precedence when formatting and parsing this rule. For example, some - * languages use the comma, and can thus be written as x,0 instead. For example, - * you can use "x.0: << point;x,0: << comma;" to - * handle the decimal point that matches the language's natural spelling of - * the punctuation of either the full stop or comma.
Inf:The rule for infinity.
NaN:The rule for an IEEE 754 NaN (not a number).
nothingIf the rule's rule descriptor is left out, the base value is one plus the - * preceding rule's base value (or zero if this is the first rule in the list) in a normal - * rule set.  In a fraction rule set, the base value is the same as the preceding rule's - * base value.
- * - *

A rule set may be either a regular rule set or a fraction rule set, depending - * on whether it is used to format a number's integral part (or the whole number) or a - * number's fractional part. Using a rule set to format a rule's fractional part makes it a - * fraction rule set.

- * - *

Which rule is used to format a number is defined according to one of the following - * algorithms: If the rule set is a regular rule set, do the following: - * - *

    - *
  • If the rule set includes a master rule (and the number was passed in as a double), - * use the master rule.  (If the number being formatted was passed in as a long, - * the master rule is ignored.)
  • - *
  • If the number is negative, use the negative-number rule.
  • - *
  • If the number has a fractional part and is greater than 1, use the improper fraction - * rule.
  • - *
  • If the number has a fractional part and is between 0 and 1, use the proper fraction - * rule.
  • - *
  • Binary-search the rule list for the rule with the highest base value less than or equal - * to the number. If that rule has two substitutions, its base value is not an even multiple - * of its divisor, and the number is an even multiple of the rule's divisor, use the - * rule that precedes it in the rule list. Otherwise, use the rule itself.
  • - *
- * - *

If the rule set is a fraction rule set, do the following: - * - *

    - *
  • Ignore negative-number and fraction rules.
  • - *
  • For each rule in the list, multiply the number being formatted (which will always be - * between 0 and 1) by the rule's base value. Keep track of the distance between the result - * the nearest integer.
  • - *
  • Use the rule that produced the result closest to zero in the above calculation. In the - * event of a tie or a direct hit, use the first matching rule encountered. (The idea here is - * to try each rule's base value as a possible denominator of a fraction. Whichever - * denominator produces the fraction closest in value to the number being formatted wins.) If - * the rule following the matching rule has the same base value, use it if the numerator of - * the fraction is anything other than 1; if the numerator is 1, use the original matching - * rule. (This is to allow singular and plural forms of the rule text without a lot of extra - * hassle.)
  • - *
- * - *

A rule's body consists of a string of characters terminated by a semicolon. The rule - * may include zero, one, or two substitution tokens, and a range of text in - * brackets. The brackets denote optional text (and may also include one or both - * substitutions). The exact meanings of the substitution tokens, and under what conditions - * optional text is omitted, depend on the syntax of the substitution token and the context. - * The rest of the text in a rule body is literal text that is output when the rule matches - * the number being formatted.

- * - *

A substitution token begins and ends with a token character. The token - * character and the context together specify a mathematical operation to be performed on the - * number being formatted. An optional substitution descriptor specifies how the - * value resulting from that operation is used to fill in the substitution. The position of - * the substitution token in the rule body specifies the location of the resultant text in - * the original rule text.

- * - *

The meanings of the substitution token characters are as follows:

- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
>>in normal ruleDivide the number by the rule's divisor and format the remainder
in negative-number ruleFind the absolute value of the number and format the result
in fraction or master ruleIsolate the number's fractional part and format it.
in rule in fraction rule setNot allowed.
>>>in normal ruleDivide the number by the rule's divisor and format the remainder, - * but bypass the normal rule-selection process and just use the - * rule that precedes this one in this rule list.
in all other rulesNot allowed.
<<in normal ruleDivide the number by the rule's divisor and format the quotient
in negative-number ruleNot allowed.
in fraction or master ruleIsolate the number's integral part and format it.
in rule in fraction rule setMultiply the number by the rule's base value and format the result.
==in all rule setsFormat the number unchanged
[]in normal ruleOmit the optional text if the number is an even multiple of the rule's divisor
in negative-number ruleNot allowed.
in improper-fraction ruleOmit the optional text if the number is between 0 and 1 (same as specifying both an - * x.x rule and a 0.x rule)
in master ruleOmit the optional text if the number is an integer (same as specifying both an x.x - * rule and an x.0 rule)
in proper-fraction ruleNot allowed.
in rule in fraction rule setOmit the optional text if multiplying the number by the rule's base value yields 1.
$(cardinal,plural syntax)$in all rule setsThis provides the ability to choose a word based on the number divided by the radix to the power of the - * exponent of the base value for the specified locale, which is normally equivalent to the << value. - * This uses the cardinal plural rules from PluralFormat. All strings used in the plural format are treated - * as the same base value for parsing.
$(ordinal,plural syntax)$in all rule setsThis provides the ability to choose a word based on the number divided by the radix to the power of the - * exponent of the base value for the specified locale, which is normally equivalent to the << value. - * This uses the ordinal plural rules from PluralFormat. All strings used in the plural format are treated - * as the same base value for parsing.
- * - *

The substitution descriptor (i.e., the text between the token characters) may take one - * of three forms:

- * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
a rule set namePerform the mathematical operation on the number, and format the result using the - * named rule set.
a DecimalFormat patternPerform the mathematical operation on the number, and format the result using a - * DecimalFormat with the specified pattern.  The pattern must begin with 0 or #.
nothingPerform the mathematical operation on the number, and format the result using the rule - * set containing the current rule, except: - *
    - *
  • You can't have an empty substitution descriptor with a == substitution.
  • - *
  • If you omit the substitution descriptor in a >> substitution in a fraction rule, - * format the result one digit at a time using the rule set containing the current rule.
  • - *
  • If you omit the substitution descriptor in a << substitution in a rule in a - * fraction rule set, format the result using the default rule set for this formatter.
  • - *
- *
- * - *

Whitespace is ignored between a rule set name and a rule set body, between a rule - * descriptor and a rule body, or between rules. If a rule body begins with an apostrophe, - * the apostrophe is ignored, but all text after it becomes significant (this is how you can - * have a rule's rule text begin with whitespace). There is no escape function: the semicolon - * is not allowed in rule set names or in rule text, and the colon is not allowed in rule set - * names. The characters beginning a substitution token are always treated as the beginning - * of a substitution token.

- * - *

See the resource data and the demo program for annotated examples of real rule sets - * using these features.

- * - *

User subclasses are not supported. While clients may write - * subclasses, such code will not necessarily work and will not be - * guaranteed to work stably from release to release. - * - *

Localizations

- *

Constructors are available that allow the specification of localizations for the - * public rule sets (and also allow more control over what public rule sets are available). - * Localization data is represented as a textual description. The description represents - * an array of arrays of string. The first element is an array of the public rule set names, - * each of these must be one of the public rule set names that appear in the rules. Only - * names in this array will be treated as public rule set names by the API. Each subsequent - * element is an array of localizations of these names. The first element of one of these - * subarrays is the locale name, and the remaining elements are localizations of the - * public rule set names, in the same order as they were listed in the first arrray.

- *

In the syntax, angle brackets '<', '>' are used to delimit the arrays, and comma ',' is used - * to separate elements of an array. Whitespace is ignored, unless quoted.

- *

For example:

- * < < %foo, %bar, %baz >,
- *   < en, Foo, Bar, Baz >,
- *   < fr, 'le Foo', 'le Bar', 'le Baz' >
- *   < zh, \\u7532, \\u4e59, \\u4e19 > >
- * 

- * @author Richard Gillam - * @see NumberFormat - * @see DecimalFormat - * @see PluralFormat - * @see PluralRules - * @stable ICU 2.0 - */ -class U_I18N_API RuleBasedNumberFormat : public NumberFormat { -public: - - //----------------------------------------------------------------------- - // constructors - //----------------------------------------------------------------------- - - /** - * Creates a RuleBasedNumberFormat that behaves according to the description - * passed in. The formatter uses the default locale. - * @param rules A description of the formatter's desired behavior. - * See the class documentation for a complete explanation of the description - * syntax. - * @param perror The parse error if an error was encountered. - * @param status The status indicating whether the constructor succeeded. - * @stable ICU 3.2 - */ - RuleBasedNumberFormat(const UnicodeString& rules, UParseError& perror, UErrorCode& status); - - /** - * Creates a RuleBasedNumberFormat that behaves according to the description - * passed in. The formatter uses the default locale. - *

- * The localizations data provides information about the public - * rule sets and their localized display names for different - * locales. The first element in the list is an array of the names - * of the public rule sets. The first element in this array is - * the initial default ruleset. The remaining elements in the - * list are arrays of localizations of the names of the public - * rule sets. Each of these is one longer than the initial array, - * with the first String being the ULocale ID, and the remaining - * Strings being the localizations of the rule set names, in the - * same order as the initial array. Arrays are NULL-terminated. - * @param rules A description of the formatter's desired behavior. - * See the class documentation for a complete explanation of the description - * syntax. - * @param localizations the localization information. - * names in the description. These will be copied by the constructor. - * @param perror The parse error if an error was encountered. - * @param status The status indicating whether the constructor succeeded. - * @stable ICU 3.2 - */ - RuleBasedNumberFormat(const UnicodeString& rules, const UnicodeString& localizations, - UParseError& perror, UErrorCode& status); - - /** - * Creates a RuleBasedNumberFormat that behaves according to the rules - * passed in. The formatter uses the specified locale to determine the - * characters to use when formatting numerals, and to define equivalences - * for lenient parsing. - * @param rules The formatter rules. - * See the class documentation for a complete explanation of the rule - * syntax. - * @param locale A locale that governs which characters are used for - * formatting values in numerals and which characters are equivalent in - * lenient parsing. - * @param perror The parse error if an error was encountered. - * @param status The status indicating whether the constructor succeeded. - * @stable ICU 2.0 - */ - RuleBasedNumberFormat(const UnicodeString& rules, const Locale& locale, - UParseError& perror, UErrorCode& status); - - /** - * Creates a RuleBasedNumberFormat that behaves according to the description - * passed in. The formatter uses the default locale. - *

- * The localizations data provides information about the public - * rule sets and their localized display names for different - * locales. The first element in the list is an array of the names - * of the public rule sets. The first element in this array is - * the initial default ruleset. The remaining elements in the - * list are arrays of localizations of the names of the public - * rule sets. Each of these is one longer than the initial array, - * with the first String being the ULocale ID, and the remaining - * Strings being the localizations of the rule set names, in the - * same order as the initial array. Arrays are NULL-terminated. - * @param rules A description of the formatter's desired behavior. - * See the class documentation for a complete explanation of the description - * syntax. - * @param localizations a list of localizations for the rule set - * names in the description. These will be copied by the constructor. - * @param locale A locale that governs which characters are used for - * formatting values in numerals and which characters are equivalent in - * lenient parsing. - * @param perror The parse error if an error was encountered. - * @param status The status indicating whether the constructor succeeded. - * @stable ICU 3.2 - */ - RuleBasedNumberFormat(const UnicodeString& rules, const UnicodeString& localizations, - const Locale& locale, UParseError& perror, UErrorCode& status); - - /** - * Creates a RuleBasedNumberFormat from a predefined ruleset. The selector - * code choosed among three possible predefined formats: spellout, ordinal, - * and duration. - * @param tag A selector code specifying which kind of formatter to create for that - * locale. There are four legal values: URBNF_SPELLOUT, which creates a formatter that - * spells out a value in words in the desired language, URBNF_ORDINAL, which attaches - * an ordinal suffix from the desired language to the end of a number (e.g. "123rd"), - * URBNF_DURATION, which formats a duration in seconds as hours, minutes, and seconds always rounding down, - * and URBNF_NUMBERING_SYSTEM, which is used to invoke rules for alternate numbering - * systems such as the Hebrew numbering system, or for Roman Numerals, etc. - * @param locale The locale for the formatter. - * @param status The status indicating whether the constructor succeeded. - * @stable ICU 2.0 - */ - RuleBasedNumberFormat(URBNFRuleSetTag tag, const Locale& locale, UErrorCode& status); - - //----------------------------------------------------------------------- - // boilerplate - //----------------------------------------------------------------------- - - /** - * Copy constructor - * @param rhs the object to be copied from. - * @stable ICU 2.6 - */ - RuleBasedNumberFormat(const RuleBasedNumberFormat& rhs); - - /** - * Assignment operator - * @param rhs the object to be copied from. - * @stable ICU 2.6 - */ - RuleBasedNumberFormat& operator=(const RuleBasedNumberFormat& rhs); - - /** - * Release memory allocated for a RuleBasedNumberFormat when you are finished with it. - * @stable ICU 2.6 - */ - virtual ~RuleBasedNumberFormat(); - - /** - * Clone this object polymorphically. The caller is responsible - * for deleting the result when done. - * @return A copy of the object. - * @stable ICU 2.6 - */ - virtual Format* clone(void) const; - - /** - * Return true if the given Format objects are semantically equal. - * Objects of different subclasses are considered unequal. - * @param other the object to be compared with. - * @return true if the given Format objects are semantically equal. - * @stable ICU 2.6 - */ - virtual UBool operator==(const Format& other) const; - -//----------------------------------------------------------------------- -// public API functions -//----------------------------------------------------------------------- - - /** - * return the rules that were provided to the RuleBasedNumberFormat. - * @return the result String that was passed in - * @stable ICU 2.0 - */ - virtual UnicodeString getRules() const; - - /** - * Return the number of public rule set names. - * @return the number of public rule set names. - * @stable ICU 2.0 - */ - virtual int32_t getNumberOfRuleSetNames() const; - - /** - * Return the name of the index'th public ruleSet. If index is not valid, - * the function returns null. - * @param index the index of the ruleset - * @return the name of the index'th public ruleSet. - * @stable ICU 2.0 - */ - virtual UnicodeString getRuleSetName(int32_t index) const; - - /** - * Return the number of locales for which we have localized rule set display names. - * @return the number of locales for which we have localized rule set display names. - * @stable ICU 3.2 - */ - virtual int32_t getNumberOfRuleSetDisplayNameLocales(void) const; - - /** - * Return the index'th display name locale. - * @param index the index of the locale - * @param status set to a failure code when this function fails - * @return the locale - * @see #getNumberOfRuleSetDisplayNameLocales - * @stable ICU 3.2 - */ - virtual Locale getRuleSetDisplayNameLocale(int32_t index, UErrorCode& status) const; - - /** - * Return the rule set display names for the provided locale. These are in the same order - * as those returned by getRuleSetName. The locale is matched against the locales for - * which there is display name data, using normal fallback rules. If no locale matches, - * the default display names are returned. (These are the internal rule set names minus - * the leading '%'.) - * @param index the index of the rule set - * @param locale the locale (returned by getRuleSetDisplayNameLocales) for which the localized - * display name is desired - * @return the display name for the given index, which might be bogus if there is an error - * @see #getRuleSetName - * @stable ICU 3.2 - */ - virtual UnicodeString getRuleSetDisplayName(int32_t index, - const Locale& locale = Locale::getDefault()); - - /** - * Return the rule set display name for the provided rule set and locale. - * The locale is matched against the locales for which there is display name data, using - * normal fallback rules. If no locale matches, the default display name is returned. - * @return the display name for the rule set - * @stable ICU 3.2 - * @see #getRuleSetDisplayName - */ - virtual UnicodeString getRuleSetDisplayName(const UnicodeString& ruleSetName, - const Locale& locale = Locale::getDefault()); - - - using NumberFormat::format; - - /** - * Formats the specified 32-bit number using the default ruleset. - * @param number The number to format. - * @param toAppendTo the string that will hold the (appended) result - * @param pos the fieldposition - * @return A textual representation of the number. - * @stable ICU 2.0 - */ - virtual UnicodeString& format(int32_t number, - UnicodeString& toAppendTo, - FieldPosition& pos) const; - - /** - * Formats the specified 64-bit number using the default ruleset. - * @param number The number to format. - * @param toAppendTo the string that will hold the (appended) result - * @param pos the fieldposition - * @return A textual representation of the number. - * @stable ICU 2.1 - */ - virtual UnicodeString& format(int64_t number, - UnicodeString& toAppendTo, - FieldPosition& pos) const; - /** - * Formats the specified number using the default ruleset. - * @param number The number to format. - * @param toAppendTo the string that will hold the (appended) result - * @param pos the fieldposition - * @return A textual representation of the number. - * @stable ICU 2.0 - */ - virtual UnicodeString& format(double number, - UnicodeString& toAppendTo, - FieldPosition& pos) const; - - /** - * Formats the specified number using the named ruleset. - * @param number The number to format. - * @param ruleSetName The name of the rule set to format the number with. - * This must be the name of a valid public rule set for this formatter. - * @param toAppendTo the string that will hold the (appended) result - * @param pos the fieldposition - * @param status the status - * @return A textual representation of the number. - * @stable ICU 2.0 - */ - virtual UnicodeString& format(int32_t number, - const UnicodeString& ruleSetName, - UnicodeString& toAppendTo, - FieldPosition& pos, - UErrorCode& status) const; - /** - * Formats the specified 64-bit number using the named ruleset. - * @param number The number to format. - * @param ruleSetName The name of the rule set to format the number with. - * This must be the name of a valid public rule set for this formatter. - * @param toAppendTo the string that will hold the (appended) result - * @param pos the fieldposition - * @param status the status - * @return A textual representation of the number. - * @stable ICU 2.1 - */ - virtual UnicodeString& format(int64_t number, - const UnicodeString& ruleSetName, - UnicodeString& toAppendTo, - FieldPosition& pos, - UErrorCode& status) const; - /** - * Formats the specified number using the named ruleset. - * @param number The number to format. - * @param ruleSetName The name of the rule set to format the number with. - * This must be the name of a valid public rule set for this formatter. - * @param toAppendTo the string that will hold the (appended) result - * @param pos the fieldposition - * @param status the status - * @return A textual representation of the number. - * @stable ICU 2.0 - */ - virtual UnicodeString& format(double number, - const UnicodeString& ruleSetName, - UnicodeString& toAppendTo, - FieldPosition& pos, - UErrorCode& status) const; - -protected: - /** - * Format a decimal number. - * The number is a DigitList wrapper onto a floating point decimal number. - * The default implementation in NumberFormat converts the decimal number - * to a double and formats that. Subclasses of NumberFormat that want - * to specifically handle big decimal numbers must override this method. - * class DecimalFormat does so. - * - * @param number The number, a DigitList format Decimal Floating Point. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @internal - */ - virtual UnicodeString& format(const number::impl::DecimalQuantity &number, - UnicodeString& appendTo, - FieldPositionIterator* posIter, - UErrorCode& status) const; - - /** - * Format a decimal number. - * The number is a DigitList wrapper onto a floating point decimal number. - * The default implementation in NumberFormat converts the decimal number - * to a double and formats that. Subclasses of NumberFormat that want - * to specifically handle big decimal numbers must override this method. - * class DecimalFormat does so. - * - * @param number The number, a DigitList format Decimal Floating Point. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @internal - */ - virtual UnicodeString& format(const number::impl::DecimalQuantity &number, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& status) const; -public: - - using NumberFormat::parse; - - /** - * Parses the specfied string, beginning at the specified position, according - * to this formatter's rules. This will match the string against all of the - * formatter's public rule sets and return the value corresponding to the longest - * parseable substring. This function's behavior is affected by the lenient - * parse mode. - * @param text The string to parse - * @param result the result of the parse, either a double or a long. - * @param parsePosition On entry, contains the position of the first character - * in "text" to examine. On exit, has been updated to contain the position - * of the first character in "text" that wasn't consumed by the parse. - * @see #setLenient - * @stable ICU 2.0 - */ - virtual void parse(const UnicodeString& text, - Formattable& result, - ParsePosition& parsePosition) const; - -#if !UCONFIG_NO_COLLATION - - /** - * Turns lenient parse mode on and off. - * - * When in lenient parse mode, the formatter uses a Collator for parsing the text. - * Only primary differences are treated as significant. This means that case - * differences, accent differences, alternate spellings of the same letter - * (e.g., ae and a-umlaut in German), ignorable characters, etc. are ignored in - * matching the text. In many cases, numerals will be accepted in place of words - * or phrases as well. - * - * For example, all of the following will correctly parse as 255 in English in - * lenient-parse mode: - *
"two hundred fifty-five" - *
"two hundred fifty five" - *
"TWO HUNDRED FIFTY-FIVE" - *
"twohundredfiftyfive" - *
"2 hundred fifty-5" - * - * The Collator used is determined by the locale that was - * passed to this object on construction. The description passed to this object - * on construction may supply additional collation rules that are appended to the - * end of the default collator for the locale, enabling additional equivalences - * (such as adding more ignorable characters or permitting spelled-out version of - * symbols; see the demo program for examples). - * - * It's important to emphasize that even strict parsing is relatively lenient: it - * will accept some text that it won't produce as output. In English, for example, - * it will correctly parse "two hundred zero" and "fifteen hundred". - * - * @param enabled If true, turns lenient-parse mode on; if false, turns it off. - * @see RuleBasedCollator - * @stable ICU 2.0 - */ - virtual void setLenient(UBool enabled); - - /** - * Returns true if lenient-parse mode is turned on. Lenient parsing is off - * by default. - * @return true if lenient-parse mode is turned on. - * @see #setLenient - * @stable ICU 2.0 - */ - virtual inline UBool isLenient(void) const; - -#endif - - /** - * Override the default rule set to use. If ruleSetName is null, reset - * to the initial default rule set. If the rule set is not a public rule set name, - * U_ILLEGAL_ARGUMENT_ERROR is returned in status. - * @param ruleSetName the name of the rule set, or null to reset the initial default. - * @param status set to failure code when a problem occurs. - * @stable ICU 2.6 - */ - virtual void setDefaultRuleSet(const UnicodeString& ruleSetName, UErrorCode& status); - - /** - * Return the name of the current default rule set. If the current rule set is - * not public, returns a bogus (and empty) UnicodeString. - * @return the name of the current default rule set - * @stable ICU 3.0 - */ - virtual UnicodeString getDefaultRuleSetName() const; - - /** - * Set a particular UDisplayContext value in the formatter, such as - * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. Note: For getContext, see - * NumberFormat. - * @param value The UDisplayContext value to set. - * @param status Input/output status. If at entry this indicates a failure - * status, the function will do nothing; otherwise this will be - * updated with any new status from the function. - * @stable ICU 53 - */ - virtual void setContext(UDisplayContext value, UErrorCode& status); - - /** - * Get the rounding mode. - * @return A rounding mode - * @stable ICU 60 - */ - virtual ERoundingMode getRoundingMode(void) const; - - /** - * Set the rounding mode. - * @param roundingMode A rounding mode - * @stable ICU 60 - */ - virtual void setRoundingMode(ERoundingMode roundingMode); - -public: - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.8 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.8 - */ - virtual UClassID getDynamicClassID(void) const; - - /** - * Sets the decimal format symbols, which is generally not changed - * by the programmer or user. The formatter takes ownership of - * symbolsToAdopt; the client must not delete it. - * - * @param symbolsToAdopt DecimalFormatSymbols to be adopted. - * @stable ICU 49 - */ - virtual void adoptDecimalFormatSymbols(DecimalFormatSymbols* symbolsToAdopt); - - /** - * Sets the decimal format symbols, which is generally not changed - * by the programmer or user. A clone of the symbols is created and - * the symbols is _not_ adopted; the client is still responsible for - * deleting it. - * - * @param symbols DecimalFormatSymbols. - * @stable ICU 49 - */ - virtual void setDecimalFormatSymbols(const DecimalFormatSymbols& symbols); - -private: - RuleBasedNumberFormat(); // default constructor not implemented - - // this will ref the localizations if they are not NULL - // caller must deref to get adoption - RuleBasedNumberFormat(const UnicodeString& description, LocalizationInfo* localizations, - const Locale& locale, UParseError& perror, UErrorCode& status); - - void init(const UnicodeString& rules, LocalizationInfo* localizations, UParseError& perror, UErrorCode& status); - void initCapitalizationContextInfo(const Locale& thelocale); - void dispose(); - void stripWhitespace(UnicodeString& src); - void initDefaultRuleSet(); - NFRuleSet* findRuleSet(const UnicodeString& name, UErrorCode& status) const; - - /* friend access */ - friend class NFSubstitution; - friend class NFRule; - friend class NFRuleSet; - friend class FractionalPartSubstitution; - - inline NFRuleSet * getDefaultRuleSet() const; - const RuleBasedCollator * getCollator() const; - DecimalFormatSymbols * initializeDecimalFormatSymbols(UErrorCode &status); - const DecimalFormatSymbols * getDecimalFormatSymbols() const; - NFRule * initializeDefaultInfinityRule(UErrorCode &status); - const NFRule * getDefaultInfinityRule() const; - NFRule * initializeDefaultNaNRule(UErrorCode &status); - const NFRule * getDefaultNaNRule() const; - PluralFormat *createPluralFormat(UPluralType pluralType, const UnicodeString &pattern, UErrorCode& status) const; - UnicodeString& adjustForCapitalizationContext(int32_t startPos, UnicodeString& currentResult, UErrorCode& status) const; - UnicodeString& format(int64_t number, NFRuleSet *ruleSet, UnicodeString& toAppendTo, UErrorCode& status) const; - void format(double number, NFRuleSet& rs, UnicodeString& toAppendTo, UErrorCode& status) const; - -private: - NFRuleSet **fRuleSets; - UnicodeString* ruleSetDescriptions; - int32_t numRuleSets; - NFRuleSet *defaultRuleSet; - Locale locale; - RuleBasedCollator* collator; - DecimalFormatSymbols* decimalFormatSymbols; - NFRule *defaultInfinityRule; - NFRule *defaultNaNRule; - ERoundingMode fRoundingMode; - UBool lenient; - UnicodeString* lenientParseRules; - LocalizationInfo* localizations; - UnicodeString originalDescription; - UBool capitalizationInfoSet; - UBool capitalizationForUIListMenu; - UBool capitalizationForStandAlone; - BreakIterator* capitalizationBrkIter; -}; - -// --------------- - -#if !UCONFIG_NO_COLLATION - -inline UBool -RuleBasedNumberFormat::isLenient(void) const { - return lenient; -} - -#endif - -inline NFRuleSet* -RuleBasedNumberFormat::getDefaultRuleSet() const { - return defaultRuleSet; -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -/* U_HAVE_RBNF */ -#endif - -/* RBNF_H */ -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rbtz.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rbtz.h deleted file mode 100644 index b6dda4974e..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rbtz.h +++ /dev/null @@ -1,366 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2007-2013, International Business Machines Corporation and * -* others. All Rights Reserved. * -******************************************************************************* -*/ -#ifndef RBTZ_H -#define RBTZ_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Rule based customizable time zone - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/basictz.h" -#include "unicode/unistr.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -// forward declaration -class UVector; -struct Transition; - -/** - * a BasicTimeZone subclass implemented in terms of InitialTimeZoneRule and TimeZoneRule instances - * @see BasicTimeZone - * @see InitialTimeZoneRule - * @see TimeZoneRule - */ -class U_I18N_API RuleBasedTimeZone : public BasicTimeZone { -public: - /** - * Constructs a RuleBasedTimeZone object with the ID and the - * InitialTimeZoneRule. The input InitialTimeZoneRule - * is adopted by this RuleBasedTimeZone, thus the caller must not - * delete it. - * @param id The time zone ID. - * @param initialRule The initial time zone rule. - * @stable ICU 3.8 - */ - RuleBasedTimeZone(const UnicodeString& id, InitialTimeZoneRule* initialRule); - - /** - * Copy constructor. - * @param source The RuleBasedTimeZone object to be copied. - * @stable ICU 3.8 - */ - RuleBasedTimeZone(const RuleBasedTimeZone& source); - - /** - * Destructor. - * @stable ICU 3.8 - */ - virtual ~RuleBasedTimeZone(); - - /** - * Assignment operator. - * @param right The object to be copied. - * @stable ICU 3.8 - */ - RuleBasedTimeZone& operator=(const RuleBasedTimeZone& right); - - /** - * Return true if the given TimeZone objects are - * semantically equal. Objects of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given TimeZone objects are - *semantically equal. - * @stable ICU 3.8 - */ - virtual UBool operator==(const TimeZone& that) const; - - /** - * Return true if the given TimeZone objects are - * semantically unequal. Objects of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given TimeZone objects are - * semantically unequal. - * @stable ICU 3.8 - */ - virtual UBool operator!=(const TimeZone& that) const; - - /** - * Adds the TimeZoneRule which represents time transitions. - * The TimeZoneRule must have start times, that is, the result - * of isTransitionRule() must be true. Otherwise, U_ILLEGAL_ARGUMENT_ERROR - * is set to the error code. - * The input TimeZoneRule is adopted by this - * RuleBasedTimeZone on successful completion of this method, - * thus, the caller must not delete it when no error is returned. - * After all rules are added, the caller must call complete() method to - * make this RuleBasedTimeZone ready to handle common time - * zone functions. - * @param rule The TimeZoneRule. - * @param status Output param to filled in with a success or an error. - * @stable ICU 3.8 - */ - void addTransitionRule(TimeZoneRule* rule, UErrorCode& status); - - /** - * Makes the TimeZoneRule ready to handle actual timezone - * calcuation APIs. This method collects time zone rules specified - * by the caller via the constructor and addTransitionRule() and - * builds internal structure for making the object ready to support - * time zone APIs such as getOffset(), getNextTransition() and others. - * @param status Output param to filled in with a success or an error. - * @stable ICU 3.8 - */ - void complete(UErrorCode& status); - - /** - * Clones TimeZone objects polymorphically. Clients are responsible for deleting - * the TimeZone object cloned. - * - * @return A new copy of this TimeZone object. - * @stable ICU 3.8 - */ - virtual TimeZone* clone(void) const; - - /** - * Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add - * to GMT to get local time in this time zone, taking daylight savings time into - * account) as of a particular reference date. The reference date is used to determine - * whether daylight savings time is in effect and needs to be figured into the offset - * that is returned (in other words, what is the adjusted GMT offset in this time zone - * at this particular date and time?). For the time zones produced by createTimeZone(), - * the reference data is specified according to the Gregorian calendar, and the date - * and time fields are local standard time. - * - *

Note: Don't call this method. Instead, call the getOffset(UDate...) overload, - * which returns both the raw and the DST offset for a given time. This method - * is retained only for backward compatibility. - * - * @param era The reference date's era - * @param year The reference date's year - * @param month The reference date's month (0-based; 0 is January) - * @param day The reference date's day-in-month (1-based) - * @param dayOfWeek The reference date's day-of-week (1-based; 1 is Sunday) - * @param millis The reference date's milliseconds in day, local standard time - * @param status Output param to filled in with a success or an error. - * @return The offset in milliseconds to add to GMT to get local time. - * @stable ICU 3.8 - */ - virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, - uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const; - - /** - * Gets the time zone offset, for current date, modified in case of - * daylight savings. This is the offset to add *to* UTC to get local time. - * - *

Note: Don't call this method. Instead, call the getOffset(UDate...) overload, - * which returns both the raw and the DST offset for a given time. This method - * is retained only for backward compatibility. - * - * @param era The reference date's era - * @param year The reference date's year - * @param month The reference date's month (0-based; 0 is January) - * @param day The reference date's day-in-month (1-based) - * @param dayOfWeek The reference date's day-of-week (1-based; 1 is Sunday) - * @param millis The reference date's milliseconds in day, local standard time - * @param monthLength The length of the given month in days. - * @param status Output param to filled in with a success or an error. - * @return The offset in milliseconds to add to GMT to get local time. - * @stable ICU 3.8 - */ - virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, - uint8_t dayOfWeek, int32_t millis, - int32_t monthLength, UErrorCode& status) const; - - /** - * Returns the time zone raw and GMT offset for the given moment - * in time. Upon return, local-millis = GMT-millis + rawOffset + - * dstOffset. All computations are performed in the proleptic - * Gregorian calendar. The default implementation in the TimeZone - * class delegates to the 8-argument getOffset(). - * - * @param date moment in time for which to return offsets, in - * units of milliseconds from January 1, 1970 0:00 GMT, either GMT - * time or local wall time, depending on `local'. - * @param local if true, `date' is local wall time; otherwise it - * is in GMT time. - * @param rawOffset output parameter to receive the raw offset, that - * is, the offset not including DST adjustments - * @param dstOffset output parameter to receive the DST offset, - * that is, the offset to be added to `rawOffset' to obtain the - * total offset between local and GMT time. If DST is not in - * effect, this value is zero; otherwise it is a positive value, - * typically one hour. - * @param ec input-output error code - * @stable ICU 3.8 - */ - virtual void getOffset(UDate date, UBool local, int32_t& rawOffset, - int32_t& dstOffset, UErrorCode& ec) const; - - /** - * Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add - * to GMT to get local time, before taking daylight savings time into account). - * - * @param offsetMillis The new raw GMT offset for this time zone. - * @stable ICU 3.8 - */ - virtual void setRawOffset(int32_t offsetMillis); - - /** - * Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add - * to GMT to get local time, before taking daylight savings time into account). - * - * @return The TimeZone's raw GMT offset. - * @stable ICU 3.8 - */ - virtual int32_t getRawOffset(void) const; - - /** - * Queries if this time zone uses daylight savings time. - * @return true if this time zone uses daylight savings time, - * false, otherwise. - * @stable ICU 3.8 - */ - virtual UBool useDaylightTime(void) const; - - /** - * Queries if the given date is in daylight savings time in - * this time zone. - * This method is wasteful since it creates a new GregorianCalendar and - * deletes it each time it is called. This is a deprecated method - * and provided only for Java compatibility. - * - * @param date the given UDate. - * @param status Output param filled in with success/error code. - * @return true if the given date is in daylight savings time, - * false, otherwise. - * @deprecated ICU 2.4. Use Calendar::inDaylightTime() instead. - */ - virtual UBool inDaylightTime(UDate date, UErrorCode& status) const; - - /** - * Returns true if this zone has the same rule and offset as another zone. - * That is, if this zone differs only in ID, if at all. - * @param other the TimeZone object to be compared with - * @return true if the given zone is the same as this one, - * with the possible exception of the ID - * @stable ICU 3.8 - */ - virtual UBool hasSameRules(const TimeZone& other) const; - - /** - * Gets the first time zone transition after the base time. - * @param base The base time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives the first transition after the base time. - * @return TRUE if the transition is found. - * @stable ICU 3.8 - */ - virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; - - /** - * Gets the most recent time zone transition before the base time. - * @param base The base time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives the most recent transition before the base time. - * @return TRUE if the transition is found. - * @stable ICU 3.8 - */ - virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; - - /** - * Returns the number of TimeZoneRules which represents time transitions, - * for this time zone, that is, all TimeZoneRules for this time zone except - * InitialTimeZoneRule. The return value range is 0 or any positive value. - * @param status Receives error status code. - * @return The number of TimeZoneRules representing time transitions. - * @stable ICU 3.8 - */ - virtual int32_t countTransitionRules(UErrorCode& status) const; - - /** - * Gets the InitialTimeZoneRule and the set of TimeZoneRule - * which represent time transitions for this time zone. On successful return, - * the argument initial points to non-NULL InitialTimeZoneRule and - * the array trsrules is filled with 0 or multiple TimeZoneRule - * instances up to the size specified by trscount. The results are referencing the - * rule instance held by this time zone instance. Therefore, after this time zone - * is destructed, they are no longer available. - * @param initial Receives the initial timezone rule - * @param trsrules Receives the timezone transition rules - * @param trscount On input, specify the size of the array 'transitions' receiving - * the timezone transition rules. On output, actual number of - * rules filled in the array will be set. - * @param status Receives error status code. - * @stable ICU 3.8 - */ - virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial, - const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const; - - /** - * Get time zone offsets from local wall time. - * @internal - */ - virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, - int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const; - -private: - void deleteRules(void); - void deleteTransitions(void); - UVector* copyRules(UVector* source); - TimeZoneRule* findRuleInFinal(UDate date, UBool local, - int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const; - UBool findNext(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const; - UBool findPrev(UDate base, UBool inclusive, UDate& time, TimeZoneRule*& from, TimeZoneRule*& to) const; - int32_t getLocalDelta(int32_t rawBefore, int32_t dstBefore, int32_t rawAfter, int32_t dstAfter, - int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const; - UDate getTransitionTime(Transition* transition, UBool local, - int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const; - void getOffsetInternal(UDate date, UBool local, int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt, - int32_t& rawOffset, int32_t& dstOffset, UErrorCode& ec) const; - void completeConst(UErrorCode &status) const; - - InitialTimeZoneRule *fInitialRule; - UVector *fHistoricRules; - UVector *fFinalRules; - UVector *fHistoricTransitions; - UBool fUpToDate; - -public: - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *

-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 3.8 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 3.8 - */ - virtual UClassID getDynamicClassID(void) const; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // RBTZ_H - -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/regex.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/regex.h deleted file mode 100644 index 5fb6db06bb..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/regex.h +++ /dev/null @@ -1,1882 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2002-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* file name: regex.h -* encoding: UTF-8 -* indentation:4 -* -* created on: 2002oct22 -* created by: Andy Heninger -* -* ICU Regular Expressions, API for C++ -*/ - -#ifndef REGEX_H -#define REGEX_H - -//#define REGEX_DEBUG - -/** - * \file - * \brief C++ API: Regular Expressions - * - * The ICU API for processing regular expressions consists of two classes, - * `RegexPattern` and `RegexMatcher`. - * `RegexPattern` objects represent a pre-processed, or compiled - * regular expression. They are created from a regular expression pattern string, - * and can be used to create `RegexMatcher` objects for the pattern. - * - * Class `RegexMatcher` bundles together a regular expression - * pattern and a target string to which the search pattern will be applied. - * `RegexMatcher` includes API for doing plain find or search - * operations, for search and replace operations, and for obtaining detailed - * information about bounds of a match. - * - * Note that by constructing `RegexMatcher` objects directly from regular - * expression pattern strings application code can be simplified and the explicit - * need for `RegexPattern` objects can usually be eliminated. - * - */ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_REGULAR_EXPRESSIONS - -#include "unicode/uobject.h" -#include "unicode/unistr.h" -#include "unicode/utext.h" -#include "unicode/parseerr.h" - -#include "unicode/uregex.h" - -// Forward Declarations - -struct UHashtable; - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -struct Regex8BitSet; -class RegexCImpl; -class RegexMatcher; -class RegexPattern; -struct REStackFrame; -class RuleBasedBreakIterator; -class UnicodeSet; -class UVector; -class UVector32; -class UVector64; - - -/** - * Class `RegexPattern` represents a compiled regular expression. It includes - * factory methods for creating a RegexPattern object from the source (string) form - * of a regular expression, methods for creating RegexMatchers that allow the pattern - * to be applied to input text, and a few convenience methods for simple common - * uses of regular expressions. - * - * Class RegexPattern is not intended to be subclassed. - * - * @stable ICU 2.4 - */ -class U_I18N_API RegexPattern U_FINAL : public UObject { -public: - - /** - * default constructor. Create a RegexPattern object that refers to no actual - * pattern. Not normally needed; RegexPattern objects are usually - * created using the factory method `compile()`. - * - * @stable ICU 2.4 - */ - RegexPattern(); - - /** - * Copy Constructor. Create a new RegexPattern object that is equivalent - * to the source object. - * @param source the pattern object to be copied. - * @stable ICU 2.4 - */ - RegexPattern(const RegexPattern &source); - - /** - * Destructor. Note that a RegexPattern object must persist so long as any - * RegexMatcher objects that were created from the RegexPattern are active. - * @stable ICU 2.4 - */ - virtual ~RegexPattern(); - - /** - * Comparison operator. Two RegexPattern objects are considered equal if they - * were constructed from identical source patterns using the same #URegexpFlag - * settings. - * @param that a RegexPattern object to compare with "this". - * @return TRUE if the objects are equivalent. - * @stable ICU 2.4 - */ - UBool operator==(const RegexPattern& that) const; - - /** - * Comparison operator. Two RegexPattern objects are considered equal if they - * were constructed from identical source patterns using the same #URegexpFlag - * settings. - * @param that a RegexPattern object to compare with "this". - * @return TRUE if the objects are different. - * @stable ICU 2.4 - */ - inline UBool operator!=(const RegexPattern& that) const {return ! operator ==(that);} - - /** - * Assignment operator. After assignment, this RegexPattern will behave identically - * to the source object. - * @stable ICU 2.4 - */ - RegexPattern &operator =(const RegexPattern &source); - - /** - * Create an exact copy of this RegexPattern object. Since RegexPattern is not - * intended to be subclassed, clone() and the copy construction are - * equivalent operations. - * @return the copy of this RegexPattern - * @stable ICU 2.4 - */ - virtual RegexPattern *clone() const; - - - /** - * Compiles the regular expression in string form into a RegexPattern - * object. These compile methods, rather than the constructors, are the usual - * way that RegexPattern objects are created. - * - * Note that RegexPattern objects must not be deleted while RegexMatcher - * objects created from the pattern are active. RegexMatchers keep a pointer - * back to their pattern, so premature deletion of the pattern is a - * catastrophic error. - * - * All #URegexpFlag pattern match mode flags are set to their default values. - * - * Note that it is often more convenient to construct a RegexMatcher directly - * from a pattern string rather than separately compiling the pattern and - * then creating a RegexMatcher object from the pattern. - * - * @param regex The regular expression to be compiled. - * @param pe Receives the position (line and column nubers) of any error - * within the regular expression.) - * @param status A reference to a UErrorCode to receive any errors. - * @return A regexPattern object for the compiled pattern. - * - * @stable ICU 2.4 - */ - static RegexPattern * U_EXPORT2 compile( const UnicodeString ®ex, - UParseError &pe, - UErrorCode &status); - - /** - * Compiles the regular expression in string form into a RegexPattern - * object. These compile methods, rather than the constructors, are the usual - * way that RegexPattern objects are created. - * - * Note that RegexPattern objects must not be deleted while RegexMatcher - * objects created from the pattern are active. RegexMatchers keep a pointer - * back to their pattern, so premature deletion of the pattern is a - * catastrophic error. - * - * All #URegexpFlag pattern match mode flags are set to their default values. - * - * Note that it is often more convenient to construct a RegexMatcher directly - * from a pattern string rather than separately compiling the pattern and - * then creating a RegexMatcher object from the pattern. - * - * @param regex The regular expression to be compiled. Note, the text referred - * to by this UText must not be deleted during the lifetime of the - * RegexPattern object or any RegexMatcher object created from it. - * @param pe Receives the position (line and column nubers) of any error - * within the regular expression.) - * @param status A reference to a UErrorCode to receive any errors. - * @return A regexPattern object for the compiled pattern. - * - * @stable ICU 4.6 - */ - static RegexPattern * U_EXPORT2 compile( UText *regex, - UParseError &pe, - UErrorCode &status); - - /** - * Compiles the regular expression in string form into a RegexPattern - * object using the specified #URegexpFlag match mode flags. These compile methods, - * rather than the constructors, are the usual way that RegexPattern objects - * are created. - * - * Note that RegexPattern objects must not be deleted while RegexMatcher - * objects created from the pattern are active. RegexMatchers keep a pointer - * back to their pattern, so premature deletion of the pattern is a - * catastrophic error. - * - * Note that it is often more convenient to construct a RegexMatcher directly - * from a pattern string instead of than separately compiling the pattern and - * then creating a RegexMatcher object from the pattern. - * - * @param regex The regular expression to be compiled. - * @param flags The #URegexpFlag match mode flags to be used, e.g. #UREGEX_CASE_INSENSITIVE. - * @param pe Receives the position (line and column numbers) of any error - * within the regular expression.) - * @param status A reference to a UErrorCode to receive any errors. - * @return A regexPattern object for the compiled pattern. - * - * @stable ICU 2.4 - */ - static RegexPattern * U_EXPORT2 compile( const UnicodeString ®ex, - uint32_t flags, - UParseError &pe, - UErrorCode &status); - - /** - * Compiles the regular expression in string form into a RegexPattern - * object using the specified #URegexpFlag match mode flags. These compile methods, - * rather than the constructors, are the usual way that RegexPattern objects - * are created. - * - * Note that RegexPattern objects must not be deleted while RegexMatcher - * objects created from the pattern are active. RegexMatchers keep a pointer - * back to their pattern, so premature deletion of the pattern is a - * catastrophic error. - * - * Note that it is often more convenient to construct a RegexMatcher directly - * from a pattern string instead of than separately compiling the pattern and - * then creating a RegexMatcher object from the pattern. - * - * @param regex The regular expression to be compiled. Note, the text referred - * to by this UText must not be deleted during the lifetime of the - * RegexPattern object or any RegexMatcher object created from it. - * @param flags The #URegexpFlag match mode flags to be used, e.g. #UREGEX_CASE_INSENSITIVE. - * @param pe Receives the position (line and column numbers) of any error - * within the regular expression.) - * @param status A reference to a UErrorCode to receive any errors. - * @return A regexPattern object for the compiled pattern. - * - * @stable ICU 4.6 - */ - static RegexPattern * U_EXPORT2 compile( UText *regex, - uint32_t flags, - UParseError &pe, - UErrorCode &status); - - /** - * Compiles the regular expression in string form into a RegexPattern - * object using the specified #URegexpFlag match mode flags. These compile methods, - * rather than the constructors, are the usual way that RegexPattern objects - * are created. - * - * Note that RegexPattern objects must not be deleted while RegexMatcher - * objects created from the pattern are active. RegexMatchers keep a pointer - * back to their pattern, so premature deletion of the pattern is a - * catastrophic error. - * - * Note that it is often more convenient to construct a RegexMatcher directly - * from a pattern string instead of than separately compiling the pattern and - * then creating a RegexMatcher object from the pattern. - * - * @param regex The regular expression to be compiled. - * @param flags The #URegexpFlag match mode flags to be used, e.g. #UREGEX_CASE_INSENSITIVE. - * @param status A reference to a UErrorCode to receive any errors. - * @return A regexPattern object for the compiled pattern. - * - * @stable ICU 2.6 - */ - static RegexPattern * U_EXPORT2 compile( const UnicodeString ®ex, - uint32_t flags, - UErrorCode &status); - - /** - * Compiles the regular expression in string form into a RegexPattern - * object using the specified #URegexpFlag match mode flags. These compile methods, - * rather than the constructors, are the usual way that RegexPattern objects - * are created. - * - * Note that RegexPattern objects must not be deleted while RegexMatcher - * objects created from the pattern are active. RegexMatchers keep a pointer - * back to their pattern, so premature deletion of the pattern is a - * catastrophic error. - * - * Note that it is often more convenient to construct a RegexMatcher directly - * from a pattern string instead of than separately compiling the pattern and - * then creating a RegexMatcher object from the pattern. - * - * @param regex The regular expression to be compiled. Note, the text referred - * to by this UText must not be deleted during the lifetime of the - * RegexPattern object or any RegexMatcher object created from it. - * @param flags The #URegexpFlag match mode flags to be used, e.g. #UREGEX_CASE_INSENSITIVE. - * @param status A reference to a UErrorCode to receive any errors. - * @return A regexPattern object for the compiled pattern. - * - * @stable ICU 4.6 - */ - static RegexPattern * U_EXPORT2 compile( UText *regex, - uint32_t flags, - UErrorCode &status); - - /** - * Get the #URegexpFlag match mode flags that were used when compiling this pattern. - * @return the #URegexpFlag match mode flags - * @stable ICU 2.4 - */ - virtual uint32_t flags() const; - - /** - * Creates a RegexMatcher that will match the given input against this pattern. The - * RegexMatcher can then be used to perform match, find or replace operations - * on the input. Note that a RegexPattern object must not be deleted while - * RegexMatchers created from it still exist and might possibly be used again. - * - * The matcher will retain a reference to the supplied input string, and all regexp - * pattern matching operations happen directly on this original string. It is - * critical that the string not be altered or deleted before use by the regular - * expression operations is complete. - * - * @param input The input string to which the regular expression will be applied. - * @param status A reference to a UErrorCode to receive any errors. - * @return A RegexMatcher object for this pattern and input. - * - * @stable ICU 2.4 - */ - virtual RegexMatcher *matcher(const UnicodeString &input, - UErrorCode &status) const; - -private: - /** - * Cause a compilation error if an application accidentally attempts to - * create a matcher with a (char16_t *) string as input rather than - * a UnicodeString. Avoids a dangling reference to a temporary string. - * - * To efficiently work with char16_t *strings, wrap the data in a UnicodeString - * using one of the aliasing constructors, such as - * `UnicodeString(UBool isTerminated, const char16_t *text, int32_t textLength);` - * or in a UText, using - * `utext_openUChars(UText *ut, const char16_t *text, int64_t textLength, UErrorCode *status);` - * - */ - RegexMatcher *matcher(const char16_t *input, - UErrorCode &status) const; -public: - - - /** - * Creates a RegexMatcher that will match against this pattern. The - * RegexMatcher can be used to perform match, find or replace operations. - * Note that a RegexPattern object must not be deleted while - * RegexMatchers created from it still exist and might possibly be used again. - * - * @param status A reference to a UErrorCode to receive any errors. - * @return A RegexMatcher object for this pattern and input. - * - * @stable ICU 2.6 - */ - virtual RegexMatcher *matcher(UErrorCode &status) const; - - - /** - * Test whether a string matches a regular expression. This convenience function - * both compiles the regular expression and applies it in a single operation. - * Note that if the same pattern needs to be applied repeatedly, this method will be - * less efficient than creating and reusing a RegexMatcher object. - * - * @param regex The regular expression - * @param input The string data to be matched - * @param pe Receives the position of any syntax errors within the regular expression - * @param status A reference to a UErrorCode to receive any errors. - * @return True if the regular expression exactly matches the full input string. - * - * @stable ICU 2.4 - */ - static UBool U_EXPORT2 matches(const UnicodeString ®ex, - const UnicodeString &input, - UParseError &pe, - UErrorCode &status); - - /** - * Test whether a string matches a regular expression. This convenience function - * both compiles the regular expression and applies it in a single operation. - * Note that if the same pattern needs to be applied repeatedly, this method will be - * less efficient than creating and reusing a RegexMatcher object. - * - * @param regex The regular expression - * @param input The string data to be matched - * @param pe Receives the position of any syntax errors within the regular expression - * @param status A reference to a UErrorCode to receive any errors. - * @return True if the regular expression exactly matches the full input string. - * - * @stable ICU 4.6 - */ - static UBool U_EXPORT2 matches(UText *regex, - UText *input, - UParseError &pe, - UErrorCode &status); - - /** - * Returns the regular expression from which this pattern was compiled. This method will work - * even if the pattern was compiled from a UText. - * - * Note: If the pattern was originally compiled from a UText, and that UText was modified, - * the returned string may no longer reflect the RegexPattern object. - * @stable ICU 2.4 - */ - virtual UnicodeString pattern() const; - - - /** - * Returns the regular expression from which this pattern was compiled. This method will work - * even if the pattern was compiled from a UnicodeString. - * - * Note: This is the original input, not a clone. If the pattern was originally compiled from a - * UText, and that UText was modified, the returned UText may no longer reflect the RegexPattern - * object. - * - * @stable ICU 4.6 - */ - virtual UText *patternText(UErrorCode &status) const; - - - /** - * Get the group number corresponding to a named capture group. - * The returned number can be used with any function that access - * capture groups by number. - * - * The function returns an error status if the specified name does not - * appear in the pattern. - * - * @param groupName The capture group name. - * @param status A UErrorCode to receive any errors. - * - * @stable ICU 55 - */ - virtual int32_t groupNumberFromName(const UnicodeString &groupName, UErrorCode &status) const; - - - /** - * Get the group number corresponding to a named capture group. - * The returned number can be used with any function that access - * capture groups by number. - * - * The function returns an error status if the specified name does not - * appear in the pattern. - * - * @param groupName The capture group name, - * platform invariant characters only. - * @param nameLength The length of the name, or -1 if the name is - * nul-terminated. - * @param status A UErrorCode to receive any errors. - * - * @stable ICU 55 - */ - virtual int32_t groupNumberFromName(const char *groupName, int32_t nameLength, UErrorCode &status) const; - - - /** - * Split a string into fields. Somewhat like split() from Perl or Java. - * Pattern matches identify delimiters that separate the input - * into fields. The input data between the delimiters becomes the - * fields themselves. - * - * If the delimiter pattern includes capture groups, the captured text will - * also appear in the destination array of output strings, interspersed - * with the fields. This is similar to Perl, but differs from Java, - * which ignores the presence of capture groups in the pattern. - * - * Trailing empty fields will always be returned, assuming sufficient - * destination capacity. This differs from the default behavior for Java - * and Perl where trailing empty fields are not returned. - * - * The number of strings produced by the split operation is returned. - * This count includes the strings from capture groups in the delimiter pattern. - * This behavior differs from Java, which ignores capture groups. - * - * For the best performance on split() operations, - * RegexMatcher::split is preferable to this function - * - * @param input The string to be split into fields. The field delimiters - * match the pattern (in the "this" object) - * @param dest An array of UnicodeStrings to receive the results of the split. - * This is an array of actual UnicodeString objects, not an - * array of pointers to strings. Local (stack based) arrays can - * work well here. - * @param destCapacity The number of elements in the destination array. - * If the number of fields found is less than destCapacity, the - * extra strings in the destination array are not altered. - * If the number of destination strings is less than the number - * of fields, the trailing part of the input string, including any - * field delimiters, is placed in the last destination string. - * @param status A reference to a UErrorCode to receive any errors. - * @return The number of fields into which the input string was split. - * @stable ICU 2.4 - */ - virtual int32_t split(const UnicodeString &input, - UnicodeString dest[], - int32_t destCapacity, - UErrorCode &status) const; - - - /** - * Split a string into fields. Somewhat like %split() from Perl or Java. - * Pattern matches identify delimiters that separate the input - * into fields. The input data between the delimiters becomes the - * fields themselves. - * - * If the delimiter pattern includes capture groups, the captured text will - * also appear in the destination array of output strings, interspersed - * with the fields. This is similar to Perl, but differs from Java, - * which ignores the presence of capture groups in the pattern. - * - * Trailing empty fields will always be returned, assuming sufficient - * destination capacity. This differs from the default behavior for Java - * and Perl where trailing empty fields are not returned. - * - * The number of strings produced by the split operation is returned. - * This count includes the strings from capture groups in the delimiter pattern. - * This behavior differs from Java, which ignores capture groups. - * - * For the best performance on split() operations, - * `RegexMatcher::split()` is preferable to this function - * - * @param input The string to be split into fields. The field delimiters - * match the pattern (in the "this" object) - * @param dest An array of mutable UText structs to receive the results of the split. - * If a field is NULL, a new UText is allocated to contain the results for - * that field. This new UText is not guaranteed to be mutable. - * @param destCapacity The number of elements in the destination array. - * If the number of fields found is less than destCapacity, the - * extra strings in the destination array are not altered. - * If the number of destination strings is less than the number - * of fields, the trailing part of the input string, including any - * field delimiters, is placed in the last destination string. - * @param status A reference to a UErrorCode to receive any errors. - * @return The number of destination strings used. - * - * @stable ICU 4.6 - */ - virtual int32_t split(UText *input, - UText *dest[], - int32_t destCapacity, - UErrorCode &status) const; - - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.4 - */ - virtual UClassID getDynamicClassID() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.4 - */ - static UClassID U_EXPORT2 getStaticClassID(); - -private: - // - // Implementation Data - // - UText *fPattern; // The original pattern string. - UnicodeString *fPatternString; // The original pattern UncodeString if relevant - uint32_t fFlags; // The flags used when compiling the pattern. - // - UVector64 *fCompiledPat; // The compiled pattern p-code. - UnicodeString fLiteralText; // Any literal string data from the pattern, - // after un-escaping, for use during the match. - - UVector *fSets; // Any UnicodeSets referenced from the pattern. - Regex8BitSet *fSets8; // (and fast sets for latin-1 range.) - - - UErrorCode fDeferredStatus; // status if some prior error has left this - // RegexPattern in an unusable state. - - int32_t fMinMatchLen; // Minimum Match Length. All matches will have length - // >= this value. For some patterns, this calculated - // value may be less than the true shortest - // possible match. - - int32_t fFrameSize; // Size of a state stack frame in the - // execution engine. - - int32_t fDataSize; // The size of the data needed by the pattern that - // does not go on the state stack, but has just - // a single copy per matcher. - - UVector32 *fGroupMap; // Map from capture group number to position of - // the group's variables in the matcher stack frame. - - UnicodeSet **fStaticSets; // Ptr to static (shared) sets for predefined - // regex character classes, e.g. Word. - - Regex8BitSet *fStaticSets8; // Ptr to the static (shared) latin-1 only - // sets for predefined regex classes. - - int32_t fStartType; // Info on how a match must start. - int32_t fInitialStringIdx; // - int32_t fInitialStringLen; - UnicodeSet *fInitialChars; - UChar32 fInitialChar; - Regex8BitSet *fInitialChars8; - UBool fNeedsAltInput; - - UHashtable *fNamedCaptureMap; // Map from capture group names to numbers. - - friend class RegexCompile; - friend class RegexMatcher; - friend class RegexCImpl; - - // - // Implementation Methods - // - void init(); // Common initialization, for use by constructors. - void zap(); // Common cleanup - - void dumpOp(int32_t index) const; - - public: -#ifndef U_HIDE_INTERNAL_API - /** - * Dump a compiled pattern. Internal debug function. - * @internal - */ - void dumpPattern() const; -#endif /* U_HIDE_INTERNAL_API */ -}; - - - -/** - * class RegexMatcher bundles together a regular expression pattern and - * input text to which the expression can be applied. It includes methods - * for testing for matches, and for find and replace operations. - * - *

Class RegexMatcher is not intended to be subclassed.

- * - * @stable ICU 2.4 - */ -class U_I18N_API RegexMatcher U_FINAL : public UObject { -public: - - /** - * Construct a RegexMatcher for a regular expression. - * This is a convenience method that avoids the need to explicitly create - * a RegexPattern object. Note that if several RegexMatchers need to be - * created for the same expression, it will be more efficient to - * separately create and cache a RegexPattern object, and use - * its matcher() method to create the RegexMatcher objects. - * - * @param regexp The Regular Expression to be compiled. - * @param flags #URegexpFlag options, such as #UREGEX_CASE_INSENSITIVE. - * @param status Any errors are reported by setting this UErrorCode variable. - * @stable ICU 2.6 - */ - RegexMatcher(const UnicodeString ®exp, uint32_t flags, UErrorCode &status); - - /** - * Construct a RegexMatcher for a regular expression. - * This is a convenience method that avoids the need to explicitly create - * a RegexPattern object. Note that if several RegexMatchers need to be - * created for the same expression, it will be more efficient to - * separately create and cache a RegexPattern object, and use - * its matcher() method to create the RegexMatcher objects. - * - * @param regexp The regular expression to be compiled. - * @param flags #URegexpFlag options, such as #UREGEX_CASE_INSENSITIVE. - * @param status Any errors are reported by setting this UErrorCode variable. - * - * @stable ICU 4.6 - */ - RegexMatcher(UText *regexp, uint32_t flags, UErrorCode &status); - - /** - * Construct a RegexMatcher for a regular expression. - * This is a convenience method that avoids the need to explicitly create - * a RegexPattern object. Note that if several RegexMatchers need to be - * created for the same expression, it will be more efficient to - * separately create and cache a RegexPattern object, and use - * its matcher() method to create the RegexMatcher objects. - * - * The matcher will retain a reference to the supplied input string, and all regexp - * pattern matching operations happen directly on the original string. It is - * critical that the string not be altered or deleted before use by the regular - * expression operations is complete. - * - * @param regexp The Regular Expression to be compiled. - * @param input The string to match. The matcher retains a reference to the - * caller's string; mo copy is made. - * @param flags #URegexpFlag options, such as #UREGEX_CASE_INSENSITIVE. - * @param status Any errors are reported by setting this UErrorCode variable. - * @stable ICU 2.6 - */ - RegexMatcher(const UnicodeString ®exp, const UnicodeString &input, - uint32_t flags, UErrorCode &status); - - /** - * Construct a RegexMatcher for a regular expression. - * This is a convenience method that avoids the need to explicitly create - * a RegexPattern object. Note that if several RegexMatchers need to be - * created for the same expression, it will be more efficient to - * separately create and cache a RegexPattern object, and use - * its matcher() method to create the RegexMatcher objects. - * - * The matcher will make a shallow clone of the supplied input text, and all regexp - * pattern matching operations happen on this clone. While read-only operations on - * the supplied text are permitted, it is critical that the underlying string not be - * altered or deleted before use by the regular expression operations is complete. - * - * @param regexp The Regular Expression to be compiled. - * @param input The string to match. The matcher retains a shallow clone of the text. - * @param flags #URegexpFlag options, such as #UREGEX_CASE_INSENSITIVE. - * @param status Any errors are reported by setting this UErrorCode variable. - * - * @stable ICU 4.6 - */ - RegexMatcher(UText *regexp, UText *input, - uint32_t flags, UErrorCode &status); - -private: - /** - * Cause a compilation error if an application accidentally attempts to - * create a matcher with a (char16_t *) string as input rather than - * a UnicodeString. Avoids a dangling reference to a temporary string. - * - * To efficiently work with char16_t *strings, wrap the data in a UnicodeString - * using one of the aliasing constructors, such as - * `UnicodeString(UBool isTerminated, const char16_t *text, int32_t textLength);` - * or in a UText, using - * `utext_openUChars(UText *ut, const char16_t *text, int64_t textLength, UErrorCode *status);` - */ - RegexMatcher(const UnicodeString ®exp, const char16_t *input, - uint32_t flags, UErrorCode &status); -public: - - - /** - * Destructor. - * - * @stable ICU 2.4 - */ - virtual ~RegexMatcher(); - - - /** - * Attempts to match the entire input region against the pattern. - * @param status A reference to a UErrorCode to receive any errors. - * @return TRUE if there is a match - * @stable ICU 2.4 - */ - virtual UBool matches(UErrorCode &status); - - - /** - * Resets the matcher, then attempts to match the input beginning - * at the specified startIndex, and extending to the end of the input. - * The input region is reset to include the entire input string. - * A successful match must extend to the end of the input. - * @param startIndex The input string (native) index at which to begin matching. - * @param status A reference to a UErrorCode to receive any errors. - * @return TRUE if there is a match - * @stable ICU 2.8 - */ - virtual UBool matches(int64_t startIndex, UErrorCode &status); - - - /** - * Attempts to match the input string, starting from the beginning of the region, - * against the pattern. Like the matches() method, this function - * always starts at the beginning of the input region; - * unlike that function, it does not require that the entire region be matched. - * - * If the match succeeds then more information can be obtained via the start(), - * end(), and group() functions. - * - * @param status A reference to a UErrorCode to receive any errors. - * @return TRUE if there is a match at the start of the input string. - * @stable ICU 2.4 - */ - virtual UBool lookingAt(UErrorCode &status); - - - /** - * Attempts to match the input string, starting from the specified index, against the pattern. - * The match may be of any length, and is not required to extend to the end - * of the input string. Contrast with match(). - * - * If the match succeeds then more information can be obtained via the start(), - * end(), and group() functions. - * - * @param startIndex The input string (native) index at which to begin matching. - * @param status A reference to a UErrorCode to receive any errors. - * @return TRUE if there is a match. - * @stable ICU 2.8 - */ - virtual UBool lookingAt(int64_t startIndex, UErrorCode &status); - - - /** - * Find the next pattern match in the input string. - * The find begins searching the input at the location following the end of - * the previous match, or at the start of the string if there is no previous match. - * If a match is found, `start()`, `end()` and `group()` - * will provide more information regarding the match. - * Note that if the input string is changed by the application, - * use find(startPos, status) instead of find(), because the saved starting - * position may not be valid with the altered input string. - * @return TRUE if a match is found. - * @stable ICU 2.4 - */ - virtual UBool find(); - - - /** - * Find the next pattern match in the input string. - * The find begins searching the input at the location following the end of - * the previous match, or at the start of the string if there is no previous match. - * If a match is found, `start()`, `end()` and `group()` - * will provide more information regarding the match. - * - * Note that if the input string is changed by the application, - * use find(startPos, status) instead of find(), because the saved starting - * position may not be valid with the altered input string. - * @param status A reference to a UErrorCode to receive any errors. - * @return TRUE if a match is found. - * @stable ICU 55 - */ - virtual UBool find(UErrorCode &status); - - /** - * Resets this RegexMatcher and then attempts to find the next substring of the - * input string that matches the pattern, starting at the specified index. - * - * @param start The (native) index in the input string to begin the search. - * @param status A reference to a UErrorCode to receive any errors. - * @return TRUE if a match is found. - * @stable ICU 2.4 - */ - virtual UBool find(int64_t start, UErrorCode &status); - - - /** - * Returns a string containing the text matched by the previous match. - * If the pattern can match an empty string, an empty string may be returned. - * @param status A reference to a UErrorCode to receive any errors. - * Possible errors are U_REGEX_INVALID_STATE if no match - * has been attempted or the last match failed. - * @return a string containing the matched input text. - * @stable ICU 2.4 - */ - virtual UnicodeString group(UErrorCode &status) const; - - - /** - * Returns a string containing the text captured by the given group - * during the previous match operation. Group(0) is the entire match. - * - * A zero length string is returned both for capture groups that did not - * participate in the match and for actual zero length matches. - * To distinguish between these two cases use the function start(), - * which returns -1 for non-participating groups. - * - * @param groupNum the capture group number - * @param status A reference to a UErrorCode to receive any errors. - * Possible errors are U_REGEX_INVALID_STATE if no match - * has been attempted or the last match failed and - * U_INDEX_OUTOFBOUNDS_ERROR for a bad capture group number. - * @return the captured text - * @stable ICU 2.4 - */ - virtual UnicodeString group(int32_t groupNum, UErrorCode &status) const; - - /** - * Returns the number of capturing groups in this matcher's pattern. - * @return the number of capture groups - * @stable ICU 2.4 - */ - virtual int32_t groupCount() const; - - - /** - * Returns a shallow clone of the entire live input string with the UText current native index - * set to the beginning of the requested group. - * - * @param dest The UText into which the input should be cloned, or NULL to create a new UText - * @param group_len A reference to receive the length of the desired capture group - * @param status A reference to a UErrorCode to receive any errors. - * Possible errors are U_REGEX_INVALID_STATE if no match - * has been attempted or the last match failed and - * U_INDEX_OUTOFBOUNDS_ERROR for a bad capture group number. - * @return dest if non-NULL, a shallow copy of the input text otherwise - * - * @stable ICU 4.6 - */ - virtual UText *group(UText *dest, int64_t &group_len, UErrorCode &status) const; - - /** - * Returns a shallow clone of the entire live input string with the UText current native index - * set to the beginning of the requested group. - * - * A group length of zero is returned both for capture groups that did not - * participate in the match and for actual zero length matches. - * To distinguish between these two cases use the function start(), - * which returns -1 for non-participating groups. - * - * @param groupNum The capture group number. - * @param dest The UText into which the input should be cloned, or NULL to create a new UText. - * @param group_len A reference to receive the length of the desired capture group - * @param status A reference to a UErrorCode to receive any errors. - * Possible errors are U_REGEX_INVALID_STATE if no match - * has been attempted or the last match failed and - * U_INDEX_OUTOFBOUNDS_ERROR for a bad capture group number. - * @return dest if non-NULL, a shallow copy of the input text otherwise - * - * @stable ICU 4.6 - */ - virtual UText *group(int32_t groupNum, UText *dest, int64_t &group_len, UErrorCode &status) const; - - /** - * Returns the index in the input string of the start of the text matched - * during the previous match operation. - * @param status a reference to a UErrorCode to receive any errors. - * @return The (native) position in the input string of the start of the last match. - * @stable ICU 2.4 - */ - virtual int32_t start(UErrorCode &status) const; - - /** - * Returns the index in the input string of the start of the text matched - * during the previous match operation. - * @param status a reference to a UErrorCode to receive any errors. - * @return The (native) position in the input string of the start of the last match. - * @stable ICU 4.6 - */ - virtual int64_t start64(UErrorCode &status) const; - - - /** - * Returns the index in the input string of the start of the text matched by the - * specified capture group during the previous match operation. Return -1 if - * the capture group exists in the pattern, but was not part of the last match. - * - * @param group the capture group number - * @param status A reference to a UErrorCode to receive any errors. Possible - * errors are U_REGEX_INVALID_STATE if no match has been - * attempted or the last match failed, and - * U_INDEX_OUTOFBOUNDS_ERROR for a bad capture group number - * @return the (native) start position of substring matched by the specified group. - * @stable ICU 2.4 - */ - virtual int32_t start(int32_t group, UErrorCode &status) const; - - /** - * Returns the index in the input string of the start of the text matched by the - * specified capture group during the previous match operation. Return -1 if - * the capture group exists in the pattern, but was not part of the last match. - * - * @param group the capture group number. - * @param status A reference to a UErrorCode to receive any errors. Possible - * errors are U_REGEX_INVALID_STATE if no match has been - * attempted or the last match failed, and - * U_INDEX_OUTOFBOUNDS_ERROR for a bad capture group number. - * @return the (native) start position of substring matched by the specified group. - * @stable ICU 4.6 - */ - virtual int64_t start64(int32_t group, UErrorCode &status) const; - - /** - * Returns the index in the input string of the first character following the - * text matched during the previous match operation. - * - * @param status A reference to a UErrorCode to receive any errors. Possible - * errors are U_REGEX_INVALID_STATE if no match has been - * attempted or the last match failed. - * @return the index of the last character matched, plus one. - * The index value returned is a native index, corresponding to - * code units for the underlying encoding type, for example, - * a byte index for UTF-8. - * @stable ICU 2.4 - */ - virtual int32_t end(UErrorCode &status) const; - - /** - * Returns the index in the input string of the first character following the - * text matched during the previous match operation. - * - * @param status A reference to a UErrorCode to receive any errors. Possible - * errors are U_REGEX_INVALID_STATE if no match has been - * attempted or the last match failed. - * @return the index of the last character matched, plus one. - * The index value returned is a native index, corresponding to - * code units for the underlying encoding type, for example, - * a byte index for UTF-8. - * @stable ICU 4.6 - */ - virtual int64_t end64(UErrorCode &status) const; - - - /** - * Returns the index in the input string of the character following the - * text matched by the specified capture group during the previous match operation. - * - * @param group the capture group number - * @param status A reference to a UErrorCode to receive any errors. Possible - * errors are U_REGEX_INVALID_STATE if no match has been - * attempted or the last match failed and - * U_INDEX_OUTOFBOUNDS_ERROR for a bad capture group number - * @return the index of the first character following the text - * captured by the specified group during the previous match operation. - * Return -1 if the capture group exists in the pattern but was not part of the match. - * The index value returned is a native index, corresponding to - * code units for the underlying encoding type, for example, - * a byte index for UTF8. - * @stable ICU 2.4 - */ - virtual int32_t end(int32_t group, UErrorCode &status) const; - - /** - * Returns the index in the input string of the character following the - * text matched by the specified capture group during the previous match operation. - * - * @param group the capture group number - * @param status A reference to a UErrorCode to receive any errors. Possible - * errors are U_REGEX_INVALID_STATE if no match has been - * attempted or the last match failed and - * U_INDEX_OUTOFBOUNDS_ERROR for a bad capture group number - * @return the index of the first character following the text - * captured by the specified group during the previous match operation. - * Return -1 if the capture group exists in the pattern but was not part of the match. - * The index value returned is a native index, corresponding to - * code units for the underlying encoding type, for example, - * a byte index for UTF8. - * @stable ICU 4.6 - */ - virtual int64_t end64(int32_t group, UErrorCode &status) const; - - /** - * Resets this matcher. The effect is to remove any memory of previous matches, - * and to cause subsequent find() operations to begin at the beginning of - * the input string. - * - * @return this RegexMatcher. - * @stable ICU 2.4 - */ - virtual RegexMatcher &reset(); - - - /** - * Resets this matcher, and set the current input position. - * The effect is to remove any memory of previous matches, - * and to cause subsequent find() operations to begin at - * the specified (native) position in the input string. - * - * The matcher's region is reset to its default, which is the entire - * input string. - * - * An alternative to this function is to set a match region - * beginning at the desired index. - * - * @return this RegexMatcher. - * @stable ICU 2.8 - */ - virtual RegexMatcher &reset(int64_t index, UErrorCode &status); - - - /** - * Resets this matcher with a new input string. This allows instances of RegexMatcher - * to be reused, which is more efficient than creating a new RegexMatcher for - * each input string to be processed. - * @param input The new string on which subsequent pattern matches will operate. - * The matcher retains a reference to the callers string, and operates - * directly on that. Ownership of the string remains with the caller. - * Because no copy of the string is made, it is essential that the - * caller not delete the string until after regexp operations on it - * are done. - * Note that while a reset on the matcher with an input string that is then - * modified across/during matcher operations may be supported currently for UnicodeString, - * this was not originally intended behavior, and support for this is not guaranteed - * in upcoming versions of ICU. - * @return this RegexMatcher. - * @stable ICU 2.4 - */ - virtual RegexMatcher &reset(const UnicodeString &input); - - - /** - * Resets this matcher with a new input string. This allows instances of RegexMatcher - * to be reused, which is more efficient than creating a new RegexMatcher for - * each input string to be processed. - * @param input The new string on which subsequent pattern matches will operate. - * The matcher makes a shallow clone of the given text; ownership of the - * original string remains with the caller. Because no deep copy of the - * text is made, it is essential that the caller not modify the string - * until after regexp operations on it are done. - * @return this RegexMatcher. - * - * @stable ICU 4.6 - */ - virtual RegexMatcher &reset(UText *input); - - - /** - * Set the subject text string upon which the regular expression is looking for matches - * without changing any other aspect of the matching state. - * The new and previous text strings must have the same content. - * - * This function is intended for use in environments where ICU is operating on - * strings that may move around in memory. It provides a mechanism for notifying - * ICU that the string has been relocated, and providing a new UText to access the - * string in its new position. - * - * Note that the regular expression implementation never copies the underlying text - * of a string being matched, but always operates directly on the original text - * provided by the user. Refreshing simply drops the references to the old text - * and replaces them with references to the new. - * - * Caution: this function is normally used only by very specialized, - * system-level code. One example use case is with garbage collection that moves - * the text in memory. - * - * @param input The new (moved) text string. - * @param status Receives errors detected by this function. - * - * @stable ICU 4.8 - */ - virtual RegexMatcher &refreshInputText(UText *input, UErrorCode &status); - -private: - /** - * Cause a compilation error if an application accidentally attempts to - * reset a matcher with a (char16_t *) string as input rather than - * a UnicodeString. Avoids a dangling reference to a temporary string. - * - * To efficiently work with char16_t *strings, wrap the data in a UnicodeString - * using one of the aliasing constructors, such as - * `UnicodeString(UBool isTerminated, const char16_t *text, int32_t textLength);` - * or in a UText, using - * `utext_openUChars(UText *ut, const char16_t *text, int64_t textLength, UErrorCode *status);` - * - */ - RegexMatcher &reset(const char16_t *input); -public: - - /** - * Returns the input string being matched. Ownership of the string belongs to - * the matcher; it should not be altered or deleted. This method will work even if the input - * was originally supplied as a UText. - * @return the input string - * @stable ICU 2.4 - */ - virtual const UnicodeString &input() const; - - /** - * Returns the input string being matched. This is the live input text; it should not be - * altered or deleted. This method will work even if the input was originally supplied as - * a UnicodeString. - * @return the input text - * - * @stable ICU 4.6 - */ - virtual UText *inputText() const; - - /** - * Returns the input string being matched, either by copying it into the provided - * UText parameter or by returning a shallow clone of the live input. Note that copying - * the entire input may cause significant performance and memory issues. - * @param dest The UText into which the input should be copied, or NULL to create a new UText - * @param status error code - * @return dest if non-NULL, a shallow copy of the input text otherwise - * - * @stable ICU 4.6 - */ - virtual UText *getInput(UText *dest, UErrorCode &status) const; - - - /** Sets the limits of this matcher's region. - * The region is the part of the input string that will be searched to find a match. - * Invoking this method resets the matcher, and then sets the region to start - * at the index specified by the start parameter and end at the index specified - * by the end parameter. - * - * Depending on the transparency and anchoring being used (see useTransparentBounds - * and useAnchoringBounds), certain constructs such as anchors may behave differently - * at or around the boundaries of the region - * - * The function will fail if start is greater than limit, or if either index - * is less than zero or greater than the length of the string being matched. - * - * @param start The (native) index to begin searches at. - * @param limit The index to end searches at (exclusive). - * @param status A reference to a UErrorCode to receive any errors. - * @stable ICU 4.0 - */ - virtual RegexMatcher ®ion(int64_t start, int64_t limit, UErrorCode &status); - - /** - * Identical to region(start, limit, status) but also allows a start position without - * resetting the region state. - * @param regionStart The region start - * @param regionLimit the limit of the region - * @param startIndex The (native) index within the region bounds at which to begin searches. - * @param status A reference to a UErrorCode to receive any errors. - * If startIndex is not within the specified region bounds, - * U_INDEX_OUTOFBOUNDS_ERROR is returned. - * @stable ICU 4.6 - */ - virtual RegexMatcher ®ion(int64_t regionStart, int64_t regionLimit, int64_t startIndex, UErrorCode &status); - - /** - * Reports the start index of this matcher's region. The searches this matcher - * conducts are limited to finding matches within regionStart (inclusive) and - * regionEnd (exclusive). - * - * @return The starting (native) index of this matcher's region. - * @stable ICU 4.0 - */ - virtual int32_t regionStart() const; - - /** - * Reports the start index of this matcher's region. The searches this matcher - * conducts are limited to finding matches within regionStart (inclusive) and - * regionEnd (exclusive). - * - * @return The starting (native) index of this matcher's region. - * @stable ICU 4.6 - */ - virtual int64_t regionStart64() const; - - - /** - * Reports the end (limit) index (exclusive) of this matcher's region. The searches - * this matcher conducts are limited to finding matches within regionStart - * (inclusive) and regionEnd (exclusive). - * - * @return The ending point (native) of this matcher's region. - * @stable ICU 4.0 - */ - virtual int32_t regionEnd() const; - - /** - * Reports the end (limit) index (exclusive) of this matcher's region. The searches - * this matcher conducts are limited to finding matches within regionStart - * (inclusive) and regionEnd (exclusive). - * - * @return The ending point (native) of this matcher's region. - * @stable ICU 4.6 - */ - virtual int64_t regionEnd64() const; - - /** - * Queries the transparency of region bounds for this matcher. - * See useTransparentBounds for a description of transparent and opaque bounds. - * By default, a matcher uses opaque region boundaries. - * - * @return TRUE if this matcher is using opaque bounds, false if it is not. - * @stable ICU 4.0 - */ - virtual UBool hasTransparentBounds() const; - - /** - * Sets the transparency of region bounds for this matcher. - * Invoking this function with an argument of true will set this matcher to use transparent bounds. - * If the boolean argument is false, then opaque bounds will be used. - * - * Using transparent bounds, the boundaries of this matcher's region are transparent - * to lookahead, lookbehind, and boundary matching constructs. Those constructs can - * see text beyond the boundaries of the region while checking for a match. - * - * With opaque bounds, no text outside of the matcher's region is visible to lookahead, - * lookbehind, and boundary matching constructs. - * - * By default, a matcher uses opaque bounds. - * - * @param b TRUE for transparent bounds; FALSE for opaque bounds - * @return This Matcher; - * @stable ICU 4.0 - **/ - virtual RegexMatcher &useTransparentBounds(UBool b); - - - /** - * Return true if this matcher is using anchoring bounds. - * By default, matchers use anchoring region bounds. - * - * @return TRUE if this matcher is using anchoring bounds. - * @stable ICU 4.0 - */ - virtual UBool hasAnchoringBounds() const; - - - /** - * Set whether this matcher is using Anchoring Bounds for its region. - * With anchoring bounds, pattern anchors such as ^ and $ will match at the start - * and end of the region. Without Anchoring Bounds, anchors will only match at - * the positions they would in the complete text. - * - * Anchoring Bounds are the default for regions. - * - * @param b TRUE if to enable anchoring bounds; FALSE to disable them. - * @return This Matcher - * @stable ICU 4.0 - */ - virtual RegexMatcher &useAnchoringBounds(UBool b); - - - /** - * Return TRUE if the most recent matching operation attempted to access - * additional input beyond the available input text. - * In this case, additional input text could change the results of the match. - * - * hitEnd() is defined for both successful and unsuccessful matches. - * In either case hitEnd() will return TRUE if if the end of the text was - * reached at any point during the matching process. - * - * @return TRUE if the most recent match hit the end of input - * @stable ICU 4.0 - */ - virtual UBool hitEnd() const; - - /** - * Return TRUE the most recent match succeeded and additional input could cause - * it to fail. If this method returns false and a match was found, then more input - * might change the match but the match won't be lost. If a match was not found, - * then requireEnd has no meaning. - * - * @return TRUE if more input could cause the most recent match to no longer match. - * @stable ICU 4.0 - */ - virtual UBool requireEnd() const; - - - /** - * Returns the pattern that is interpreted by this matcher. - * @return the RegexPattern for this RegexMatcher - * @stable ICU 2.4 - */ - virtual const RegexPattern &pattern() const; - - - /** - * Replaces every substring of the input that matches the pattern - * with the given replacement string. This is a convenience function that - * provides a complete find-and-replace-all operation. - * - * This method first resets this matcher. It then scans the input string - * looking for matches of the pattern. Input that is not part of any - * match is left unchanged; each match is replaced in the result by the - * replacement string. The replacement string may contain references to - * capture groups. - * - * @param replacement a string containing the replacement text. - * @param status a reference to a UErrorCode to receive any errors. - * @return a string containing the results of the find and replace. - * @stable ICU 2.4 - */ - virtual UnicodeString replaceAll(const UnicodeString &replacement, UErrorCode &status); - - - /** - * Replaces every substring of the input that matches the pattern - * with the given replacement string. This is a convenience function that - * provides a complete find-and-replace-all operation. - * - * This method first resets this matcher. It then scans the input string - * looking for matches of the pattern. Input that is not part of any - * match is left unchanged; each match is replaced in the result by the - * replacement string. The replacement string may contain references to - * capture groups. - * - * @param replacement a string containing the replacement text. - * @param dest a mutable UText in which the results are placed. - * If NULL, a new UText will be created (which may not be mutable). - * @param status a reference to a UErrorCode to receive any errors. - * @return a string containing the results of the find and replace. - * If a pre-allocated UText was provided, it will always be used and returned. - * - * @stable ICU 4.6 - */ - virtual UText *replaceAll(UText *replacement, UText *dest, UErrorCode &status); - - - /** - * Replaces the first substring of the input that matches - * the pattern with the replacement string. This is a convenience - * function that provides a complete find-and-replace operation. - * - * This function first resets this RegexMatcher. It then scans the input string - * looking for a match of the pattern. Input that is not part - * of the match is appended directly to the result string; the match is replaced - * in the result by the replacement string. The replacement string may contain - * references to captured groups. - * - * The state of the matcher (the position at which a subsequent find() - * would begin) after completing a replaceFirst() is not specified. The - * RegexMatcher should be reset before doing additional find() operations. - * - * @param replacement a string containing the replacement text. - * @param status a reference to a UErrorCode to receive any errors. - * @return a string containing the results of the find and replace. - * @stable ICU 2.4 - */ - virtual UnicodeString replaceFirst(const UnicodeString &replacement, UErrorCode &status); - - - /** - * Replaces the first substring of the input that matches - * the pattern with the replacement string. This is a convenience - * function that provides a complete find-and-replace operation. - * - * This function first resets this RegexMatcher. It then scans the input string - * looking for a match of the pattern. Input that is not part - * of the match is appended directly to the result string; the match is replaced - * in the result by the replacement string. The replacement string may contain - * references to captured groups. - * - * The state of the matcher (the position at which a subsequent find() - * would begin) after completing a replaceFirst() is not specified. The - * RegexMatcher should be reset before doing additional find() operations. - * - * @param replacement a string containing the replacement text. - * @param dest a mutable UText in which the results are placed. - * If NULL, a new UText will be created (which may not be mutable). - * @param status a reference to a UErrorCode to receive any errors. - * @return a string containing the results of the find and replace. - * If a pre-allocated UText was provided, it will always be used and returned. - * - * @stable ICU 4.6 - */ - virtual UText *replaceFirst(UText *replacement, UText *dest, UErrorCode &status); - - - /** - * Implements a replace operation intended to be used as part of an - * incremental find-and-replace. - * - * The input string, starting from the end of the previous replacement and ending at - * the start of the current match, is appended to the destination string. Then the - * replacement string is appended to the output string, - * including handling any substitutions of captured text. - * - * For simple, prepackaged, non-incremental find-and-replace - * operations, see replaceFirst() or replaceAll(). - * - * @param dest A UnicodeString to which the results of the find-and-replace are appended. - * @param replacement A UnicodeString that provides the text to be substituted for - * the input text that matched the regexp pattern. The replacement - * text may contain references to captured text from the - * input. - * @param status A reference to a UErrorCode to receive any errors. Possible - * errors are U_REGEX_INVALID_STATE if no match has been - * attempted or the last match failed, and U_INDEX_OUTOFBOUNDS_ERROR - * if the replacement text specifies a capture group that - * does not exist in the pattern. - * - * @return this RegexMatcher - * @stable ICU 2.4 - * - */ - virtual RegexMatcher &appendReplacement(UnicodeString &dest, - const UnicodeString &replacement, UErrorCode &status); - - - /** - * Implements a replace operation intended to be used as part of an - * incremental find-and-replace. - * - * The input string, starting from the end of the previous replacement and ending at - * the start of the current match, is appended to the destination string. Then the - * replacement string is appended to the output string, - * including handling any substitutions of captured text. - * - * For simple, prepackaged, non-incremental find-and-replace - * operations, see replaceFirst() or replaceAll(). - * - * @param dest A mutable UText to which the results of the find-and-replace are appended. - * Must not be NULL. - * @param replacement A UText that provides the text to be substituted for - * the input text that matched the regexp pattern. The replacement - * text may contain references to captured text from the input. - * @param status A reference to a UErrorCode to receive any errors. Possible - * errors are U_REGEX_INVALID_STATE if no match has been - * attempted or the last match failed, and U_INDEX_OUTOFBOUNDS_ERROR - * if the replacement text specifies a capture group that - * does not exist in the pattern. - * - * @return this RegexMatcher - * - * @stable ICU 4.6 - */ - virtual RegexMatcher &appendReplacement(UText *dest, - UText *replacement, UErrorCode &status); - - - /** - * As the final step in a find-and-replace operation, append the remainder - * of the input string, starting at the position following the last appendReplacement(), - * to the destination string. `appendTail()` is intended to be invoked after one - * or more invocations of the `RegexMatcher::appendReplacement()`. - * - * @param dest A UnicodeString to which the results of the find-and-replace are appended. - * @return the destination string. - * @stable ICU 2.4 - */ - virtual UnicodeString &appendTail(UnicodeString &dest); - - - /** - * As the final step in a find-and-replace operation, append the remainder - * of the input string, starting at the position following the last appendReplacement(), - * to the destination string. `appendTail()` is intended to be invoked after one - * or more invocations of the `RegexMatcher::appendReplacement()`. - * - * @param dest A mutable UText to which the results of the find-and-replace are appended. - * Must not be NULL. - * @param status error cod - * @return the destination string. - * - * @stable ICU 4.6 - */ - virtual UText *appendTail(UText *dest, UErrorCode &status); - - - /** - * Split a string into fields. Somewhat like %split() from Perl. - * The pattern matches identify delimiters that separate the input - * into fields. The input data between the matches becomes the - * fields themselves. - * - * @param input The string to be split into fields. The field delimiters - * match the pattern (in the "this" object). This matcher - * will be reset to this input string. - * @param dest An array of UnicodeStrings to receive the results of the split. - * This is an array of actual UnicodeString objects, not an - * array of pointers to strings. Local (stack based) arrays can - * work well here. - * @param destCapacity The number of elements in the destination array. - * If the number of fields found is less than destCapacity, the - * extra strings in the destination array are not altered. - * If the number of destination strings is less than the number - * of fields, the trailing part of the input string, including any - * field delimiters, is placed in the last destination string. - * @param status A reference to a UErrorCode to receive any errors. - * @return The number of fields into which the input string was split. - * @stable ICU 2.6 - */ - virtual int32_t split(const UnicodeString &input, - UnicodeString dest[], - int32_t destCapacity, - UErrorCode &status); - - - /** - * Split a string into fields. Somewhat like %split() from Perl. - * The pattern matches identify delimiters that separate the input - * into fields. The input data between the matches becomes the - * fields themselves. - * - * @param input The string to be split into fields. The field delimiters - * match the pattern (in the "this" object). This matcher - * will be reset to this input string. - * @param dest An array of mutable UText structs to receive the results of the split. - * If a field is NULL, a new UText is allocated to contain the results for - * that field. This new UText is not guaranteed to be mutable. - * @param destCapacity The number of elements in the destination array. - * If the number of fields found is less than destCapacity, the - * extra strings in the destination array are not altered. - * If the number of destination strings is less than the number - * of fields, the trailing part of the input string, including any - * field delimiters, is placed in the last destination string. - * @param status A reference to a UErrorCode to receive any errors. - * @return The number of fields into which the input string was split. - * - * @stable ICU 4.6 - */ - virtual int32_t split(UText *input, - UText *dest[], - int32_t destCapacity, - UErrorCode &status); - - /** - * Set a processing time limit for match operations with this Matcher. - * - * Some patterns, when matching certain strings, can run in exponential time. - * For practical purposes, the match operation may appear to be in an - * infinite loop. - * When a limit is set a match operation will fail with an error if the - * limit is exceeded. - * - * The units of the limit are steps of the match engine. - * Correspondence with actual processor time will depend on the speed - * of the processor and the details of the specific pattern, but will - * typically be on the order of milliseconds. - * - * By default, the matching time is not limited. - * - * - * @param limit The limit value, or 0 for no limit. - * @param status A reference to a UErrorCode to receive any errors. - * @stable ICU 4.0 - */ - virtual void setTimeLimit(int32_t limit, UErrorCode &status); - - /** - * Get the time limit, if any, for match operations made with this Matcher. - * - * @return the maximum allowed time for a match, in units of processing steps. - * @stable ICU 4.0 - */ - virtual int32_t getTimeLimit() const; - - /** - * Set the amount of heap storage available for use by the match backtracking stack. - * The matcher is also reset, discarding any results from previous matches. - * - * ICU uses a backtracking regular expression engine, with the backtrack stack - * maintained on the heap. This function sets the limit to the amount of memory - * that can be used for this purpose. A backtracking stack overflow will - * result in an error from the match operation that caused it. - * - * A limit is desirable because a malicious or poorly designed pattern can use - * excessive memory, potentially crashing the process. A limit is enabled - * by default. - * - * @param limit The maximum size, in bytes, of the matching backtrack stack. - * A value of zero means no limit. - * The limit must be greater or equal to zero. - * - * @param status A reference to a UErrorCode to receive any errors. - * - * @stable ICU 4.0 - */ - virtual void setStackLimit(int32_t limit, UErrorCode &status); - - /** - * Get the size of the heap storage available for use by the back tracking stack. - * - * @return the maximum backtracking stack size, in bytes, or zero if the - * stack size is unlimited. - * @stable ICU 4.0 - */ - virtual int32_t getStackLimit() const; - - - /** - * Set a callback function for use with this Matcher. - * During matching operations the function will be called periodically, - * giving the application the opportunity to terminate a long-running - * match. - * - * @param callback A pointer to the user-supplied callback function. - * @param context User context pointer. The value supplied at the - * time the callback function is set will be saved - * and passed to the callback each time that it is called. - * @param status A reference to a UErrorCode to receive any errors. - * @stable ICU 4.0 - */ - virtual void setMatchCallback(URegexMatchCallback *callback, - const void *context, - UErrorCode &status); - - - /** - * Get the callback function for this URegularExpression. - * - * @param callback Out parameter, receives a pointer to the user-supplied - * callback function. - * @param context Out parameter, receives the user context pointer that - * was set when uregex_setMatchCallback() was called. - * @param status A reference to a UErrorCode to receive any errors. - * @stable ICU 4.0 - */ - virtual void getMatchCallback(URegexMatchCallback *&callback, - const void *&context, - UErrorCode &status); - - - /** - * Set a progress callback function for use with find operations on this Matcher. - * During find operations, the callback will be invoked after each return from a - * match attempt, giving the application the opportunity to terminate a long-running - * find operation. - * - * @param callback A pointer to the user-supplied callback function. - * @param context User context pointer. The value supplied at the - * time the callback function is set will be saved - * and passed to the callback each time that it is called. - * @param status A reference to a UErrorCode to receive any errors. - * @stable ICU 4.6 - */ - virtual void setFindProgressCallback(URegexFindProgressCallback *callback, - const void *context, - UErrorCode &status); - - - /** - * Get the find progress callback function for this URegularExpression. - * - * @param callback Out parameter, receives a pointer to the user-supplied - * callback function. - * @param context Out parameter, receives the user context pointer that - * was set when uregex_setFindProgressCallback() was called. - * @param status A reference to a UErrorCode to receive any errors. - * @stable ICU 4.6 - */ - virtual void getFindProgressCallback(URegexFindProgressCallback *&callback, - const void *&context, - UErrorCode &status); - -#ifndef U_HIDE_INTERNAL_API - /** - * setTrace Debug function, enable/disable tracing of the matching engine. - * For internal ICU development use only. DO NO USE!!!! - * @internal - */ - void setTrace(UBool state); -#endif /* U_HIDE_INTERNAL_API */ - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.2 - */ - virtual UClassID getDynamicClassID() const; - -private: - // Constructors and other object boilerplate are private. - // Instances of RegexMatcher can not be assigned, copied, cloned, etc. - RegexMatcher(); // default constructor not implemented - RegexMatcher(const RegexPattern *pat); - RegexMatcher(const RegexMatcher &other); - RegexMatcher &operator =(const RegexMatcher &rhs); - void init(UErrorCode &status); // Common initialization - void init2(UText *t, UErrorCode &e); // Common initialization, part 2. - - friend class RegexPattern; - friend class RegexCImpl; -public: -#ifndef U_HIDE_INTERNAL_API - /** @internal */ - void resetPreserveRegion(); // Reset matcher state, but preserve any region. -#endif /* U_HIDE_INTERNAL_API */ -private: - - // - // MatchAt This is the internal interface to the match engine itself. - // Match status comes back in matcher member variables. - // - void MatchAt(int64_t startIdx, UBool toEnd, UErrorCode &status); - inline void backTrack(int64_t &inputIdx, int32_t &patIdx); - UBool isWordBoundary(int64_t pos); // perform Perl-like \b test - UBool isUWordBoundary(int64_t pos); // perform RBBI based \b test - REStackFrame *resetStack(); - inline REStackFrame *StateSave(REStackFrame *fp, int64_t savePatIdx, UErrorCode &status); - void IncrementTime(UErrorCode &status); - - // Call user find callback function, if set. Return TRUE if operation should be interrupted. - inline UBool findProgressInterrupt(int64_t matchIndex, UErrorCode &status); - - int64_t appendGroup(int32_t groupNum, UText *dest, UErrorCode &status) const; - - UBool findUsingChunk(UErrorCode &status); - void MatchChunkAt(int32_t startIdx, UBool toEnd, UErrorCode &status); - UBool isChunkWordBoundary(int32_t pos); - - const RegexPattern *fPattern; - RegexPattern *fPatternOwned; // Non-NULL if this matcher owns the pattern, and - // should delete it when through. - - const UnicodeString *fInput; // The string being matched. Only used for input() - UText *fInputText; // The text being matched. Is never NULL. - UText *fAltInputText; // A shallow copy of the text being matched. - // Only created if the pattern contains backreferences. - int64_t fInputLength; // Full length of the input text. - int32_t fFrameSize; // The size of a frame in the backtrack stack. - - int64_t fRegionStart; // Start of the input region, default = 0. - int64_t fRegionLimit; // End of input region, default to input.length. - - int64_t fAnchorStart; // Region bounds for anchoring operations (^ or $). - int64_t fAnchorLimit; // See useAnchoringBounds - - int64_t fLookStart; // Region bounds for look-ahead/behind and - int64_t fLookLimit; // and other boundary tests. See - // useTransparentBounds - - int64_t fActiveStart; // Currently active bounds for matching. - int64_t fActiveLimit; // Usually is the same as region, but - // is changed to fLookStart/Limit when - // entering look around regions. - - UBool fTransparentBounds; // True if using transparent bounds. - UBool fAnchoringBounds; // True if using anchoring bounds. - - UBool fMatch; // True if the last attempted match was successful. - int64_t fMatchStart; // Position of the start of the most recent match - int64_t fMatchEnd; // First position after the end of the most recent match - // Zero if no previous match, even when a region - // is active. - int64_t fLastMatchEnd; // First position after the end of the previous match, - // or -1 if there was no previous match. - int64_t fAppendPosition; // First position after the end of the previous - // appendReplacement(). As described by the - // JavaDoc for Java Matcher, where it is called - // "append position" - UBool fHitEnd; // True if the last match touched the end of input. - UBool fRequireEnd; // True if the last match required end-of-input - // (matched $ or Z) - - UVector64 *fStack; - REStackFrame *fFrame; // After finding a match, the last active stack frame, - // which will contain the capture group results. - // NOT valid while match engine is running. - - int64_t *fData; // Data area for use by the compiled pattern. - int64_t fSmallData[8]; // Use this for data if it's enough. - - int32_t fTimeLimit; // Max time (in arbitrary steps) to let the - // match engine run. Zero for unlimited. - - int32_t fTime; // Match time, accumulates while matching. - int32_t fTickCounter; // Low bits counter for time. Counts down StateSaves. - // Kept separately from fTime to keep as much - // code as possible out of the inline - // StateSave function. - - int32_t fStackLimit; // Maximum memory size to use for the backtrack - // stack, in bytes. Zero for unlimited. - - URegexMatchCallback *fCallbackFn; // Pointer to match progress callback funct. - // NULL if there is no callback. - const void *fCallbackContext; // User Context ptr for callback function. - - URegexFindProgressCallback *fFindProgressCallbackFn; // Pointer to match progress callback funct. - // NULL if there is no callback. - const void *fFindProgressCallbackContext; // User Context ptr for callback function. - - - UBool fInputUniStrMaybeMutable; // Set when fInputText wraps a UnicodeString that may be mutable - compatibility. - - UBool fTraceDebug; // Set true for debug tracing of match engine. - - UErrorCode fDeferredStatus; // Save error state that cannot be immediately - // reported, or that permanently disables this matcher. - - RuleBasedBreakIterator *fWordBreakItr; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // UCONFIG_NO_REGULAR_EXPRESSIONS -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/region.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/region.h deleted file mode 100644 index d180129fb6..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/region.h +++ /dev/null @@ -1,226 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * Copyright (C) 2014-2016, International Business Machines Corporation and others. - * All Rights Reserved. - ******************************************************************************* - */ - -#ifndef REGION_H -#define REGION_H - -/** - * \file - * \brief C++ API: Region classes (territory containment) - */ - -#include "unicode/utypes.h" -#include "unicode/uregion.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/uobject.h" -#include "unicode/uniset.h" -#include "unicode/unistr.h" -#include "unicode/strenum.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * Region is the class representing a Unicode Region Code, also known as a - * Unicode Region Subtag, which is defined based upon the BCP 47 standard. We often think of - * "regions" as "countries" when defining the characteristics of a locale. Region codes There are different - * types of region codes that are important to distinguish. - *

- * Macroregion - A code for a "macro geographical (continental) region, geographical sub-region, or - * selected economic and other grouping" as defined in - * UN M.49 (http://unstats.un.org/unsd/methods/m49/m49regin.htm). - * These are typically 3-digit codes, but contain some 2-letter codes, such as the LDML code QO - * added for Outlying Oceania. Not all UNM.49 codes are defined in LDML, but most of them are. - * Macroregions are represented in ICU by one of three region types: WORLD ( region code 001 ), - * CONTINENTS ( regions contained directly by WORLD ), and SUBCONTINENTS ( things contained directly - * by a continent ). - *

- * TERRITORY - A Region that is not a Macroregion. These are typically codes for countries, but also - * include areas that are not separate countries, such as the code "AQ" for Antarctica or the code - * "HK" for Hong Kong (SAR China). Overseas dependencies of countries may or may not have separate - * codes. The codes are typically 2-letter codes aligned with the ISO 3166 standard, but BCP47 allows - * for the use of 3-digit codes in the future. - *

- * UNKNOWN - The code ZZ is defined by Unicode LDML for use to indicate that the Region is unknown, - * or that the value supplied as a region was invalid. - *

- * DEPRECATED - Region codes that have been defined in the past but are no longer in modern usage, - * usually due to a country splitting into multiple territories or changing its name. - *

- * GROUPING - A widely understood grouping of territories that has a well defined membership such - * that a region code has been assigned for it. Some of these are UNM.49 codes that do't fall into - * the world/continent/sub-continent hierarchy, while others are just well known groupings that have - * their own region code. Region "EU" (European Union) is one such region code that is a grouping. - * Groupings will never be returned by the getContainingRegion() API, since a different type of region - * ( WORLD, CONTINENT, or SUBCONTINENT ) will always be the containing region instead. - * - * The Region class is not intended for public subclassing. - * - * @author John Emmons - * @stable ICU 51 - */ - -class U_I18N_API Region : public UObject { -public: - /** - * Destructor. - * @stable ICU 51 - */ - virtual ~Region(); - - /** - * Returns true if the two regions are equal. - * @stable ICU 51 - */ - UBool operator==(const Region &that) const; - - /** - * Returns true if the two regions are NOT equal; that is, if operator ==() returns false. - * @stable ICU 51 - */ - UBool operator!=(const Region &that) const; - - /** - * Returns a pointer to a Region using the given region code. The region code can be either 2-letter ISO code, - * 3-letter ISO code, UNM.49 numeric code, or other valid Unicode Region Code as defined by the LDML specification. - * The identifier will be canonicalized internally using the supplemental metadata as defined in the CLDR. - * If the region code is NULL or not recognized, the appropriate error code will be set ( U_ILLEGAL_ARGUMENT_ERROR ) - * @stable ICU 51 - */ - static const Region* U_EXPORT2 getInstance(const char *region_code, UErrorCode &status); - - /** - * Returns a pointer to a Region using the given numeric region code. If the numeric region code is not recognized, - * the appropriate error code will be set ( U_ILLEGAL_ARGUMENT_ERROR ). - * @stable ICU 51 - */ - static const Region* U_EXPORT2 getInstance (int32_t code, UErrorCode &status); - - /** - * Returns an enumeration over the IDs of all known regions that match the given type. - * @stable ICU 55 - */ - static StringEnumeration* U_EXPORT2 getAvailable(URegionType type, UErrorCode &status); - - /** - * Returns a pointer to the region that contains this region. Returns NULL if this region is code "001" (World) - * or "ZZ" (Unknown region). For example, calling this method with region "IT" (Italy) returns the - * region "039" (Southern Europe). - * @stable ICU 51 - */ - const Region* getContainingRegion() const; - - /** - * Return a pointer to the region that geographically contains this region and matches the given type, - * moving multiple steps up the containment chain if necessary. Returns NULL if no containing region can be found - * that matches the given type. Note: The URegionTypes = "URGN_GROUPING", "URGN_DEPRECATED", or "URGN_UNKNOWN" - * are not appropriate for use in this API. NULL will be returned in this case. For example, calling this method - * with region "IT" (Italy) for type "URGN_CONTINENT" returns the region "150" ( Europe ). - * @stable ICU 51 - */ - const Region* getContainingRegion(URegionType type) const; - - /** - * Return an enumeration over the IDs of all the regions that are immediate children of this region in the - * region hierarchy. These returned regions could be either macro regions, territories, or a mixture of the two, - * depending on the containment data as defined in CLDR. This API may return NULL if this region doesn't have - * any sub-regions. For example, calling this method with region "150" (Europe) returns an enumeration containing - * the various sub regions of Europe - "039" (Southern Europe) - "151" (Eastern Europe) - "154" (Northern Europe) - * and "155" (Western Europe). - * @stable ICU 55 - */ - StringEnumeration* getContainedRegions(UErrorCode &status) const; - - /** - * Returns an enumeration over the IDs of all the regions that are children of this region anywhere in the region - * hierarchy and match the given type. This API may return an empty enumeration if this region doesn't have any - * sub-regions that match the given type. For example, calling this method with region "150" (Europe) and type - * "URGN_TERRITORY" returns a set containing all the territories in Europe ( "FR" (France) - "IT" (Italy) - "DE" (Germany) etc. ) - * @stable ICU 55 - */ - StringEnumeration* getContainedRegions( URegionType type, UErrorCode &status ) const; - - /** - * Returns true if this region contains the supplied other region anywhere in the region hierarchy. - * @stable ICU 51 - */ - UBool contains(const Region &other) const; - - /** - * For deprecated regions, return an enumeration over the IDs of the regions that are the preferred replacement - * regions for this region. Returns null for a non-deprecated region. For example, calling this method with region - * "SU" (Soviet Union) would return a list of the regions containing "RU" (Russia), "AM" (Armenia), "AZ" (Azerbaijan), etc... - * @stable ICU 55 - */ - StringEnumeration* getPreferredValues(UErrorCode &status) const; - - /** - * Return this region's canonical region code. - * @stable ICU 51 - */ - const char* getRegionCode() const; - - /** - * Return this region's numeric code. - * Returns a negative value if the given region does not have a numeric code assigned to it. - * @stable ICU 51 - */ - int32_t getNumericCode() const; - - /** - * Returns the region type of this region. - * @stable ICU 51 - */ - URegionType getType() const; - -#ifndef U_HIDE_INTERNAL_API - /** - * Cleans up statically allocated memory. - * @internal - */ - static void cleanupRegionData(); -#endif /* U_HIDE_INTERNAL_API */ - -private: - char id[4]; - UnicodeString idStr; - int32_t code; - URegionType fType; - Region *containingRegion; - UVector *containedRegions; - UVector *preferredValues; - - /** - * Default Constructor. Internal - use factory methods only. - */ - Region(); - - - /* - * Initializes the region data from the ICU resource bundles. The region data - * contains the basic relationships such as which regions are known, what the numeric - * codes are, any known aliases, and the territory containment data. - * - * If the region data has already loaded, then this method simply returns without doing - * anything meaningful. - */ - - static void U_CALLCONV loadRegionData(UErrorCode &status); - -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ -#endif // REGION_H - -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/reldatefmt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/reldatefmt.h deleted file mode 100644 index c1eca271cc..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/reldatefmt.h +++ /dev/null @@ -1,748 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -***************************************************************************** -* Copyright (C) 2014-2016, International Business Machines Corporation and -* others. -* All Rights Reserved. -***************************************************************************** -* -* File RELDATEFMT.H -***************************************************************************** -*/ - -#ifndef __RELDATEFMT_H -#define __RELDATEFMT_H - -#include "unicode/utypes.h" -#include "unicode/uobject.h" -#include "unicode/udisplaycontext.h" -#include "unicode/ureldatefmt.h" -#include "unicode/locid.h" -#include "unicode/formattedvalue.h" - -/** - * \file - * \brief C++ API: Formats relative dates such as "1 day ago" or "tomorrow" - */ - -#if !UCONFIG_NO_FORMATTING - -/** - * Represents the unit for formatting a relative date. e.g "in 5 days" - * or "in 3 months" - * @stable ICU 53 - */ -typedef enum UDateRelativeUnit { - - /** - * Seconds - * @stable ICU 53 - */ - UDAT_RELATIVE_SECONDS, - - /** - * Minutes - * @stable ICU 53 - */ - UDAT_RELATIVE_MINUTES, - - /** - * Hours - * @stable ICU 53 - */ - UDAT_RELATIVE_HOURS, - - /** - * Days - * @stable ICU 53 - */ - UDAT_RELATIVE_DAYS, - - /** - * Weeks - * @stable ICU 53 - */ - UDAT_RELATIVE_WEEKS, - - /** - * Months - * @stable ICU 53 - */ - UDAT_RELATIVE_MONTHS, - - /** - * Years - * @stable ICU 53 - */ - UDAT_RELATIVE_YEARS, - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UDateRelativeUnit value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UDAT_RELATIVE_UNIT_COUNT -#endif // U_HIDE_DEPRECATED_API -} UDateRelativeUnit; - -/** - * Represents an absolute unit. - * @stable ICU 53 - */ -typedef enum UDateAbsoluteUnit { - - // Days of week have to remain together and in order from Sunday to - // Saturday. - /** - * Sunday - * @stable ICU 53 - */ - UDAT_ABSOLUTE_SUNDAY, - - /** - * Monday - * @stable ICU 53 - */ - UDAT_ABSOLUTE_MONDAY, - - /** - * Tuesday - * @stable ICU 53 - */ - UDAT_ABSOLUTE_TUESDAY, - - /** - * Wednesday - * @stable ICU 53 - */ - UDAT_ABSOLUTE_WEDNESDAY, - - /** - * Thursday - * @stable ICU 53 - */ - UDAT_ABSOLUTE_THURSDAY, - - /** - * Friday - * @stable ICU 53 - */ - UDAT_ABSOLUTE_FRIDAY, - - /** - * Saturday - * @stable ICU 53 - */ - UDAT_ABSOLUTE_SATURDAY, - - /** - * Day - * @stable ICU 53 - */ - UDAT_ABSOLUTE_DAY, - - /** - * Week - * @stable ICU 53 - */ - UDAT_ABSOLUTE_WEEK, - - /** - * Month - * @stable ICU 53 - */ - UDAT_ABSOLUTE_MONTH, - - /** - * Year - * @stable ICU 53 - */ - UDAT_ABSOLUTE_YEAR, - - /** - * Now - * @stable ICU 53 - */ - UDAT_ABSOLUTE_NOW, - -#ifndef U_HIDE_DRAFT_API - /** - * Quarter - * @draft ICU 63 - */ - UDAT_ABSOLUTE_QUARTER, -#endif // U_HIDE_DRAFT_API - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UDateAbsoluteUnit value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UDAT_ABSOLUTE_UNIT_COUNT = UDAT_ABSOLUTE_NOW + 2 -#endif // U_HIDE_DEPRECATED_API -} UDateAbsoluteUnit; - -/** - * Represents a direction for an absolute unit e.g "Next Tuesday" - * or "Last Tuesday" - * @stable ICU 53 - */ -typedef enum UDateDirection { - - /** - * Two before. Not fully supported in every locale. - * @stable ICU 53 - */ - UDAT_DIRECTION_LAST_2, - - /** - * Last - * @stable ICU 53 - */ - UDAT_DIRECTION_LAST, - - /** - * This - * @stable ICU 53 - */ - UDAT_DIRECTION_THIS, - - /** - * Next - * @stable ICU 53 - */ - UDAT_DIRECTION_NEXT, - - /** - * Two after. Not fully supported in every locale. - * @stable ICU 53 - */ - UDAT_DIRECTION_NEXT_2, - - /** - * Plain, which means the absence of a qualifier. - * @stable ICU 53 - */ - UDAT_DIRECTION_PLAIN, - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UDateDirection value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UDAT_DIRECTION_COUNT -#endif // U_HIDE_DEPRECATED_API -} UDateDirection; - -#if !UCONFIG_NO_BREAK_ITERATION - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class BreakIterator; -class RelativeDateTimeCacheData; -class SharedNumberFormat; -class SharedPluralRules; -class SharedBreakIterator; -class NumberFormat; -class UnicodeString; -class FormattedRelativeDateTimeData; - -#ifndef U_HIDE_DRAFT_API -/** - * An immutable class containing the result of a relative datetime formatting operation. - * - * Instances of this class are immutable and thread-safe. - * - * Not intended for public subclassing. - * - * @draft ICU 64 - */ -class U_I18N_API FormattedRelativeDateTime : public UMemory, public FormattedValue { - public: - /** - * Default constructor; makes an empty FormattedRelativeDateTime. - * @draft ICU 64 - */ - FormattedRelativeDateTime() : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {} - - /** - * Move constructor: Leaves the source FormattedRelativeDateTime in an undefined state. - * @draft ICU 64 - */ - FormattedRelativeDateTime(FormattedRelativeDateTime&& src) U_NOEXCEPT; - - /** - * Destruct an instance of FormattedRelativeDateTime. - * @draft ICU 64 - */ - virtual ~FormattedRelativeDateTime() U_OVERRIDE; - - /** Copying not supported; use move constructor instead. */ - FormattedRelativeDateTime(const FormattedRelativeDateTime&) = delete; - - /** Copying not supported; use move assignment instead. */ - FormattedRelativeDateTime& operator=(const FormattedRelativeDateTime&) = delete; - - /** - * Move assignment: Leaves the source FormattedRelativeDateTime in an undefined state. - * @draft ICU 64 - */ - FormattedRelativeDateTime& operator=(FormattedRelativeDateTime&& src) U_NOEXCEPT; - - /** @copydoc FormattedValue::toString() */ - UnicodeString toString(UErrorCode& status) const U_OVERRIDE; - - /** @copydoc FormattedValue::toTempString() */ - UnicodeString toTempString(UErrorCode& status) const U_OVERRIDE; - - /** @copydoc FormattedValue::appendTo() */ - Appendable &appendTo(Appendable& appendable, UErrorCode& status) const U_OVERRIDE; - - /** @copydoc FormattedValue::nextPosition() */ - UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const U_OVERRIDE; - - private: - FormattedRelativeDateTimeData *fData; - UErrorCode fErrorCode; - explicit FormattedRelativeDateTime(FormattedRelativeDateTimeData *results) - : fData(results), fErrorCode(U_ZERO_ERROR) {} - explicit FormattedRelativeDateTime(UErrorCode errorCode) - : fData(nullptr), fErrorCode(errorCode) {} - friend class RelativeDateTimeFormatter; -}; -#endif /* U_HIDE_DRAFT_API */ - -/** - * Formats simple relative dates. There are two types of relative dates that - * it handles: - *

    - *
  • relative dates with a quantity e.g "in 5 days"
  • - *
  • relative dates without a quantity e.g "next Tuesday"
  • - *
- *

- * This API is very basic and is intended to be a building block for more - * fancy APIs. The caller tells it exactly what to display in a locale - * independent way. While this class automatically provides the correct plural - * forms, the grammatical form is otherwise as neutral as possible. It is the - * caller's responsibility to handle cut-off logic such as deciding between - * displaying "in 7 days" or "in 1 week." This API supports relative dates - * involving one single unit. This API does not support relative dates - * involving compound units, - * e.g "in 5 days and 4 hours" nor does it support parsing. - *

- * This class is mostly thread safe and immutable with the following caveats: - * 1. The assignment operator violates Immutability. It must not be used - * concurrently with other operations. - * 2. Caller must not hold onto adopted pointers. - *

- * This class is not intended for public subclassing. - *

- * Here are some examples of use: - *

- *
- * UErrorCode status = U_ZERO_ERROR;
- * UnicodeString appendTo;
- * RelativeDateTimeFormatter fmt(status);
- * // Appends "in 1 day"
- * fmt.format(
- *     1, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_DAYS, appendTo, status);
- * // Appends "in 3 days"
- * fmt.format(
- *     3, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_DAYS, appendTo, status);
- * // Appends "3.2 years ago"
- * fmt.format(
- *     3.2, UDAT_DIRECTION_LAST, UDAT_RELATIVE_YEARS, appendTo, status);
- * // Appends "last Sunday"
- * fmt.format(UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_SUNDAY, appendTo, status);
- * // Appends "this Sunday"
- * fmt.format(UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_SUNDAY, appendTo, status);
- * // Appends "next Sunday"
- * fmt.format(UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_SUNDAY, appendTo, status);
- * // Appends "Sunday"
- * fmt.format(UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_SUNDAY, appendTo, status);
- *
- * // Appends "yesterday"
- * fmt.format(UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_DAY, appendTo, status);
- * // Appends "today"
- * fmt.format(UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_DAY, appendTo, status);
- * // Appends "tomorrow"
- * fmt.format(UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_DAY, appendTo, status);
- * // Appends "now"
- * fmt.format(UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_NOW, appendTo, status);
- *
- * 
- *
- *

- * In the future, we may add more forms, such as abbreviated/short forms - * (3 secs ago), and relative day periods ("yesterday afternoon"), etc. - * - * The RelativeDateTimeFormatter class is not intended for public subclassing. - * - * @stable ICU 53 - */ -class U_I18N_API RelativeDateTimeFormatter : public UObject { -public: - - /** - * Create RelativeDateTimeFormatter with default locale. - * @stable ICU 53 - */ - RelativeDateTimeFormatter(UErrorCode& status); - - /** - * Create RelativeDateTimeFormatter with given locale. - * @stable ICU 53 - */ - RelativeDateTimeFormatter(const Locale& locale, UErrorCode& status); - - /** - * Create RelativeDateTimeFormatter with given locale and NumberFormat. - * - * @param locale the locale - * @param nfToAdopt Constructed object takes ownership of this pointer. - * It is an error for caller to delete this pointer or change its - * contents after calling this constructor. - * @param status Any error is returned here. - * @stable ICU 53 - */ - RelativeDateTimeFormatter( - const Locale& locale, NumberFormat *nfToAdopt, UErrorCode& status); - - /** - * Create RelativeDateTimeFormatter with given locale, NumberFormat, - * and capitalization context. - * - * @param locale the locale - * @param nfToAdopt Constructed object takes ownership of this pointer. - * It is an error for caller to delete this pointer or change its - * contents after calling this constructor. Caller may pass NULL for - * this argument if they want default number format behavior. - * @param style the format style. The UDAT_RELATIVE bit field has no effect. - * @param capitalizationContext A value from UDisplayContext that pertains to - * capitalization. - * @param status Any error is returned here. - * @stable ICU 54 - */ - RelativeDateTimeFormatter( - const Locale& locale, - NumberFormat *nfToAdopt, - UDateRelativeDateTimeFormatterStyle style, - UDisplayContext capitalizationContext, - UErrorCode& status); - - /** - * Copy constructor. - * @stable ICU 53 - */ - RelativeDateTimeFormatter(const RelativeDateTimeFormatter& other); - - /** - * Assignment operator. - * @stable ICU 53 - */ - RelativeDateTimeFormatter& operator=( - const RelativeDateTimeFormatter& other); - - /** - * Destructor. - * @stable ICU 53 - */ - virtual ~RelativeDateTimeFormatter(); - - /** - * Formats a relative date with a quantity such as "in 5 days" or - * "3 months ago" - * - * This method returns a String. To get more information about the - * formatting result, use formatToValue(). - * - * @param quantity The numerical amount e.g 5. This value is formatted - * according to this object's NumberFormat object. - * @param direction NEXT means a future relative date; LAST means a past - * relative date. If direction is anything else, this method sets - * status to U_ILLEGAL_ARGUMENT_ERROR. - * @param unit the unit e.g day? month? year? - * @param appendTo The string to which the formatted result will be - * appended - * @param status ICU error code returned here. - * @return appendTo - * @stable ICU 53 - */ - UnicodeString& format( - double quantity, - UDateDirection direction, - UDateRelativeUnit unit, - UnicodeString& appendTo, - UErrorCode& status) const; - -#ifndef U_HIDE_DRAFT_API - /** - * Formats a relative date with a quantity such as "in 5 days" or - * "3 months ago" - * - * This method returns a FormattedRelativeDateTime, which exposes more - * information than the String returned by format(). - * - * @param quantity The numerical amount e.g 5. This value is formatted - * according to this object's NumberFormat object. - * @param direction NEXT means a future relative date; LAST means a past - * relative date. If direction is anything else, this method sets - * status to U_ILLEGAL_ARGUMENT_ERROR. - * @param unit the unit e.g day? month? year? - * @param status ICU error code returned here. - * @return The formatted relative datetime - * @draft ICU 64 - */ - FormattedRelativeDateTime formatToValue( - double quantity, - UDateDirection direction, - UDateRelativeUnit unit, - UErrorCode& status) const; -#endif /* U_HIDE_DRAFT_API */ - - /** - * Formats a relative date without a quantity. - * - * This method returns a String. To get more information about the - * formatting result, use formatToValue(). - * - * @param direction NEXT, LAST, THIS, etc. - * @param unit e.g SATURDAY, DAY, MONTH - * @param appendTo The string to which the formatted result will be - * appended. If the value of direction is documented as not being fully - * supported in all locales then this method leaves appendTo unchanged if - * no format string is available. - * @param status ICU error code returned here. - * @return appendTo - * @stable ICU 53 - */ - UnicodeString& format( - UDateDirection direction, - UDateAbsoluteUnit unit, - UnicodeString& appendTo, - UErrorCode& status) const; - -#ifndef U_HIDE_DRAFT_API - /** - * Formats a relative date without a quantity. - * - * This method returns a FormattedRelativeDateTime, which exposes more - * information than the String returned by format(). - * - * If the string is not available in the requested locale, the return - * value will be empty (calling toString will give an empty string). - * - * @param direction NEXT, LAST, THIS, etc. - * @param unit e.g SATURDAY, DAY, MONTH - * @param status ICU error code returned here. - * @return The formatted relative datetime - * @draft ICU 64 - */ - FormattedRelativeDateTime formatToValue( - UDateDirection direction, - UDateAbsoluteUnit unit, - UErrorCode& status) const; -#endif /* U_HIDE_DRAFT_API */ - - /** - * Format a combination of URelativeDateTimeUnit and numeric offset - * using a numeric style, e.g. "1 week ago", "in 1 week", - * "5 weeks ago", "in 5 weeks". - * - * This method returns a String. To get more information about the - * formatting result, use formatNumericToValue(). - * - * @param offset The signed offset for the specified unit. This - * will be formatted according to this object's - * NumberFormat object. - * @param unit The unit to use when formatting the relative - * date, e.g. UDAT_REL_UNIT_WEEK, - * UDAT_REL_UNIT_FRIDAY. - * @param appendTo The string to which the formatted result will be - * appended. - * @param status ICU error code returned here. - * @return appendTo - * @stable ICU 57 - */ - UnicodeString& formatNumeric( - double offset, - URelativeDateTimeUnit unit, - UnicodeString& appendTo, - UErrorCode& status) const; - -#ifndef U_HIDE_DRAFT_API - /** - * Format a combination of URelativeDateTimeUnit and numeric offset - * using a numeric style, e.g. "1 week ago", "in 1 week", - * "5 weeks ago", "in 5 weeks". - * - * This method returns a FormattedRelativeDateTime, which exposes more - * information than the String returned by formatNumeric(). - * - * @param offset The signed offset for the specified unit. This - * will be formatted according to this object's - * NumberFormat object. - * @param unit The unit to use when formatting the relative - * date, e.g. UDAT_REL_UNIT_WEEK, - * UDAT_REL_UNIT_FRIDAY. - * @param status ICU error code returned here. - * @return The formatted relative datetime - * @draft ICU 64 - */ - FormattedRelativeDateTime formatNumericToValue( - double offset, - URelativeDateTimeUnit unit, - UErrorCode& status) const; -#endif /* U_HIDE_DRAFT_API */ - - /** - * Format a combination of URelativeDateTimeUnit and numeric offset - * using a text style if possible, e.g. "last week", "this week", - * "next week", "yesterday", "tomorrow". Falls back to numeric - * style if no appropriate text term is available for the specified - * offset in the object's locale. - * - * This method returns a String. To get more information about the - * formatting result, use formatToValue(). - * - * @param offset The signed offset for the specified unit. - * @param unit The unit to use when formatting the relative - * date, e.g. UDAT_REL_UNIT_WEEK, - * UDAT_REL_UNIT_FRIDAY. - * @param appendTo The string to which the formatted result will be - * appended. - * @param status ICU error code returned here. - * @return appendTo - * @stable ICU 57 - */ - UnicodeString& format( - double offset, - URelativeDateTimeUnit unit, - UnicodeString& appendTo, - UErrorCode& status) const; - -#ifndef U_HIDE_DRAFT_API - /** - * Format a combination of URelativeDateTimeUnit and numeric offset - * using a text style if possible, e.g. "last week", "this week", - * "next week", "yesterday", "tomorrow". Falls back to numeric - * style if no appropriate text term is available for the specified - * offset in the object's locale. - * - * This method returns a FormattedRelativeDateTime, which exposes more - * information than the String returned by format(). - * - * @param offset The signed offset for the specified unit. - * @param unit The unit to use when formatting the relative - * date, e.g. UDAT_REL_UNIT_WEEK, - * UDAT_REL_UNIT_FRIDAY. - * @param status ICU error code returned here. - * @return The formatted relative datetime - * @draft ICU 64 - */ - FormattedRelativeDateTime formatToValue( - double offset, - URelativeDateTimeUnit unit, - UErrorCode& status) const; -#endif /* U_HIDE_DRAFT_API */ - - /** - * Combines a relative date string and a time string in this object's - * locale. This is done with the same date-time separator used for the - * default calendar in this locale. - * - * @param relativeDateString the relative date, e.g 'yesterday' - * @param timeString the time e.g '3:45' - * @param appendTo concatenated date and time appended here - * @param status ICU error code returned here. - * @return appendTo - * @stable ICU 53 - */ - UnicodeString& combineDateAndTime( - const UnicodeString& relativeDateString, - const UnicodeString& timeString, - UnicodeString& appendTo, - UErrorCode& status) const; - - /** - * Returns the NumberFormat this object is using. - * - * @stable ICU 53 - */ - const NumberFormat& getNumberFormat() const; - - /** - * Returns the capitalization context. - * - * @stable ICU 54 - */ - UDisplayContext getCapitalizationContext() const; - - /** - * Returns the format style. - * - * @stable ICU 54 - */ - UDateRelativeDateTimeFormatterStyle getFormatStyle() const; - -private: - const RelativeDateTimeCacheData* fCache; - const SharedNumberFormat *fNumberFormat; - const SharedPluralRules *fPluralRules; - UDateRelativeDateTimeFormatterStyle fStyle; - UDisplayContext fContext; - const SharedBreakIterator *fOptBreakIterator; - Locale fLocale; - void init( - NumberFormat *nfToAdopt, - BreakIterator *brkIter, - UErrorCode &status); - UnicodeString& adjustForContext(UnicodeString &) const; - UBool checkNoAdjustForContext(UErrorCode& status) const; - - template - UnicodeString& doFormat( - F callback, - UnicodeString& appendTo, - UErrorCode& status, - Args... args) const; - -#ifndef U_HIDE_DRAFT_API // for FormattedRelativeDateTime - template - FormattedRelativeDateTime doFormatToValue( - F callback, - UErrorCode& status, - Args... args) const; -#endif // U_HIDE_DRAFT_API - - void formatImpl( - double quantity, - UDateDirection direction, - UDateRelativeUnit unit, - FormattedRelativeDateTimeData& output, - UErrorCode& status) const; - void formatAbsoluteImpl( - UDateDirection direction, - UDateAbsoluteUnit unit, - FormattedRelativeDateTimeData& output, - UErrorCode& status) const; - void formatNumericImpl( - double offset, - URelativeDateTimeUnit unit, - FormattedRelativeDateTimeData& output, - UErrorCode& status) const; - void formatRelativeImpl( - double offset, - URelativeDateTimeUnit unit, - FormattedRelativeDateTimeData& output, - UErrorCode& status) const; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* !UCONFIG_NO_BREAK_ITERATION */ -#endif /* !UCONFIG_NO_FORMATTING */ -#endif /* __RELDATEFMT_H */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rep.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rep.h deleted file mode 100644 index c831ee56ad..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/rep.h +++ /dev/null @@ -1,265 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -************************************************************************** -* Copyright (C) 1999-2012, International Business Machines Corporation and -* others. All Rights Reserved. -************************************************************************** -* Date Name Description -* 11/17/99 aliu Creation. Ported from java. Modified to -* match current UnicodeString API. Forced -* to use name "handleReplaceBetween" because -* of existing methods in UnicodeString. -************************************************************************** -*/ - -#ifndef REP_H -#define REP_H - -#include "unicode/uobject.h" - -/** - * \file - * \brief C++ API: Replaceable String - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class UnicodeString; - -/** - * Replaceable is an abstract base class representing a - * string of characters that supports the replacement of a range of - * itself with a new string of characters. It is used by APIs that - * change a piece of text while retaining metadata. Metadata is data - * other than the Unicode characters returned by char32At(). One - * example of metadata is style attributes; another is an edit - * history, marking each character with an author and revision number. - * - *

An implicit aspect of the Replaceable API is that - * during a replace operation, new characters take on the metadata of - * the old characters. For example, if the string "the bold - * font" has range (4, 8) replaced with "strong", then it becomes "the - * strong font". - * - *

Replaceable specifies ranges using a start - * offset and a limit offset. The range of characters thus specified - * includes the characters at offset start..limit-1. That is, the - * start offset is inclusive, and the limit offset is exclusive. - * - *

Replaceable also includes API to access characters - * in the string: length(), charAt(), - * char32At(), and extractBetween(). - * - *

For a subclass to support metadata, typical behavior of - * replace() is the following: - *

    - *
  • Set the metadata of the new text to the metadata of the first - * character replaced
  • - *
  • If no characters are replaced, use the metadata of the - * previous character
  • - *
  • If there is no previous character (i.e. start == 0), use the - * following character
  • - *
  • If there is no following character (i.e. the replaceable was - * empty), use default metadata.
    - *
  • If the code point U+FFFF is seen, it should be interpreted as - * a special marker having no metadata
  • - *
  • - *
- * If this is not the behavior, the subclass should document any differences. - * @author Alan Liu - * @stable ICU 2.0 - */ -class U_COMMON_API Replaceable : public UObject { - -public: - /** - * Destructor. - * @stable ICU 2.0 - */ - virtual ~Replaceable(); - - /** - * Returns the number of 16-bit code units in the text. - * @return number of 16-bit code units in text - * @stable ICU 1.8 - */ - inline int32_t length() const; - - /** - * Returns the 16-bit code unit at the given offset into the text. - * @param offset an integer between 0 and length()-1 - * inclusive - * @return 16-bit code unit of text at given offset - * @stable ICU 1.8 - */ - inline char16_t charAt(int32_t offset) const; - - /** - * Returns the 32-bit code point at the given 16-bit offset into - * the text. This assumes the text is stored as 16-bit code units - * with surrogate pairs intermixed. If the offset of a leading or - * trailing code unit of a surrogate pair is given, return the - * code point of the surrogate pair. - * - * @param offset an integer between 0 and length()-1 - * inclusive - * @return 32-bit code point of text at given offset - * @stable ICU 1.8 - */ - inline UChar32 char32At(int32_t offset) const; - - /** - * Copies characters in the range [start, limit) - * into the UnicodeString target. - * @param start offset of first character which will be copied - * @param limit offset immediately following the last character to - * be copied - * @param target UnicodeString into which to copy characters. - * @return A reference to target - * @stable ICU 2.1 - */ - virtual void extractBetween(int32_t start, - int32_t limit, - UnicodeString& target) const = 0; - - /** - * Replaces a substring of this object with the given text. If the - * characters being replaced have metadata, the new characters - * that replace them should be given the same metadata. - * - *

Subclasses must ensure that if the text between start and - * limit is equal to the replacement text, that replace has no - * effect. That is, any metadata - * should be unaffected. In addition, subclasses are encouraged to - * check for initial and trailing identical characters, and make a - * smaller replacement if possible. This will preserve as much - * metadata as possible. - * @param start the beginning index, inclusive; 0 <= start - * <= limit. - * @param limit the ending index, exclusive; start <= limit - * <= length(). - * @param text the text to replace characters start - * to limit - 1 - * @stable ICU 2.0 - */ - virtual void handleReplaceBetween(int32_t start, - int32_t limit, - const UnicodeString& text) = 0; - // Note: All other methods in this class take the names of - // existing UnicodeString methods. This method is the exception. - // It is named differently because all replace methods of - // UnicodeString return a UnicodeString&. The 'between' is - // required in order to conform to the UnicodeString naming - // convention; API taking start/length are named , and - // those taking start/limit are named . The - // 'handle' is added because 'replaceBetween' and - // 'doReplaceBetween' are already taken. - - /** - * Copies a substring of this object, retaining metadata. - * This method is used to duplicate or reorder substrings. - * The destination index must not overlap the source range. - * - * @param start the beginning index, inclusive; 0 <= start <= - * limit. - * @param limit the ending index, exclusive; start <= limit <= - * length(). - * @param dest the destination index. The characters from - * start..limit-1 will be copied to dest. - * Implementations of this method may assume that dest <= start || - * dest >= limit. - * @stable ICU 2.0 - */ - virtual void copy(int32_t start, int32_t limit, int32_t dest) = 0; - - /** - * Returns true if this object contains metadata. If a - * Replaceable object has metadata, calls to the Replaceable API - * must be made so as to preserve metadata. If it does not, calls - * to the Replaceable API may be optimized to improve performance. - * The default implementation returns true. - * @return true if this object contains metadata - * @stable ICU 2.2 - */ - virtual UBool hasMetaData() const; - - /** - * Clone this object, an instance of a subclass of Replaceable. - * Clones can be used concurrently in multiple threads. - * If a subclass does not implement clone(), or if an error occurs, - * then NULL is returned. - * The clone functions in all subclasses return a pointer to a Replaceable - * because some compilers do not support covariant (same-as-this) - * return types; cast to the appropriate subclass if necessary. - * The caller must delete the clone. - * - * @return a clone of this object - * - * @see getDynamicClassID - * @stable ICU 2.6 - */ - virtual Replaceable *clone() const; - -protected: - - /** - * Default constructor. - * @stable ICU 2.4 - */ - inline Replaceable(); - - /* - * Assignment operator not declared. The compiler will provide one - * which does nothing since this class does not contain any data members. - * API/code coverage may show the assignment operator as present and - * untested - ignore. - * Subclasses need this assignment operator if they use compiler-provided - * assignment operators of their own. An alternative to not declaring one - * here would be to declare and empty-implement a protected or public one. - Replaceable &Replaceable::operator=(const Replaceable &); - */ - - /** - * Virtual version of length(). - * @stable ICU 2.4 - */ - virtual int32_t getLength() const = 0; - - /** - * Virtual version of charAt(). - * @stable ICU 2.4 - */ - virtual char16_t getCharAt(int32_t offset) const = 0; - - /** - * Virtual version of char32At(). - * @stable ICU 2.4 - */ - virtual UChar32 getChar32At(int32_t offset) const = 0; -}; - -inline Replaceable::Replaceable() {} - -inline int32_t -Replaceable::length() const { - return getLength(); -} - -inline char16_t -Replaceable::charAt(int32_t offset) const { - return getCharAt(offset); -} - -inline UChar32 -Replaceable::char32At(int32_t offset) const { - return getChar32At(offset); -} - -// There is no rep.cpp, see unistr.cpp for Replaceable function implementations. - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/resbund.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/resbund.h deleted file mode 100644 index 4904b6e372..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/resbund.h +++ /dev/null @@ -1,495 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1996-2013, International Business Machines Corporation -* and others. All Rights Reserved. -* -****************************************************************************** -* -* File resbund.h -* -* CREATED BY -* Richard Gillam -* -* Modification History: -* -* Date Name Description -* 2/5/97 aliu Added scanForLocaleInFile. Added -* constructor which attempts to read resource bundle -* from a specific file, without searching other files. -* 2/11/97 aliu Added UErrorCode return values to constructors. Fixed -* infinite loops in scanForFile and scanForLocale. -* Modified getRawResourceData to not delete storage -* in localeData and resourceData which it doesn't own. -* Added Mac compatibility #ifdefs for tellp() and -* ios::nocreate. -* 2/18/97 helena Updated with 100% documentation coverage. -* 3/13/97 aliu Rewrote to load in entire resource bundle and store -* it as a Hashtable of ResourceBundleData objects. -* Added state table to govern parsing of files. -* Modified to load locale index out of new file -* distinct from default.txt. -* 3/25/97 aliu Modified to support 2-d arrays, needed for timezone -* data. Added support for custom file suffixes. Again, -* needed to support timezone data. -* 4/7/97 aliu Cleaned up. -* 03/02/99 stephen Removed dependency on FILE*. -* 03/29/99 helena Merged Bertrand and Stephen's changes. -* 06/11/99 stephen Removed parsing of .txt files. -* Reworked to use new binary format. -* Cleaned up. -* 06/14/99 stephen Removed methods taking a filename suffix. -* 11/09/99 weiv Added getLocale(), fRealLocale, removed fRealLocaleID -****************************************************************************** -*/ - -#ifndef RESBUND_H -#define RESBUND_H - -#include "unicode/utypes.h" -#include "unicode/uobject.h" -#include "unicode/ures.h" -#include "unicode/unistr.h" -#include "unicode/locid.h" - -/** - * \file - * \brief C++ API: Resource Bundle - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * A class representing a collection of resource information pertaining to a given - * locale. A resource bundle provides a way of accessing locale- specfic information in - * a data file. You create a resource bundle that manages the resources for a given - * locale and then ask it for individual resources. - *

- * Resource bundles in ICU4C are currently defined using text files which conform to the following - * BNF definition. - * More on resource bundle concepts and syntax can be found in the - * Users Guide. - *

- * - * The ResourceBundle class is not suitable for subclassing. - * - * @stable ICU 2.0 - */ -class U_COMMON_API ResourceBundle : public UObject { -public: - /** - * Constructor - * - * @param packageName The packageName and locale together point to an ICU udata object, - * as defined by udata_open( packageName, "res", locale, err) - * or equivalent. Typically, packageName will refer to a (.dat) file, or to - * a package registered with udata_setAppData(). Using a full file or directory - * pathname for packageName is deprecated. - * @param locale This is the locale this resource bundle is for. To get resources - * for the French locale, for example, you would create a - * ResourceBundle passing Locale::FRENCH for the "locale" parameter, - * and all subsequent calls to that resource bundle will return - * resources that pertain to the French locale. If the caller doesn't - * pass a locale parameter, the default locale for the system (as - * returned by Locale::getDefault()) will be used. - * @param err The Error Code. - * The UErrorCode& err parameter is used to return status information to the user. To - * check whether the construction succeeded or not, you should check the value of - * U_SUCCESS(err). If you wish more detailed information, you can check for - * informational error results which still indicate success. U_USING_FALLBACK_WARNING - * indicates that a fall back locale was used. For example, 'de_CH' was requested, - * but nothing was found there, so 'de' was used. U_USING_DEFAULT_WARNING indicates that - * the default locale data was used; neither the requested locale nor any of its - * fall back locales could be found. - * @stable ICU 2.0 - */ - ResourceBundle(const UnicodeString& packageName, - const Locale& locale, - UErrorCode& err); - - /** - * Construct a resource bundle for the default bundle in the specified package. - * - * @param packageName The packageName and locale together point to an ICU udata object, - * as defined by udata_open( packageName, "res", locale, err) - * or equivalent. Typically, packageName will refer to a (.dat) file, or to - * a package registered with udata_setAppData(). Using a full file or directory - * pathname for packageName is deprecated. - * @param err A UErrorCode value - * @stable ICU 2.0 - */ - ResourceBundle(const UnicodeString& packageName, - UErrorCode& err); - - /** - * Construct a resource bundle for the ICU default bundle. - * - * @param err A UErrorCode value - * @stable ICU 2.0 - */ - ResourceBundle(UErrorCode &err); - - /** - * Standard constructor, constructs a resource bundle for the locale-specific - * bundle in the specified package. - * - * @param packageName The packageName and locale together point to an ICU udata object, - * as defined by udata_open( packageName, "res", locale, err) - * or equivalent. Typically, packageName will refer to a (.dat) file, or to - * a package registered with udata_setAppData(). Using a full file or directory - * pathname for packageName is deprecated. - * NULL is used to refer to ICU data. - * @param locale The locale for which to open a resource bundle. - * @param err A UErrorCode value - * @stable ICU 2.0 - */ - ResourceBundle(const char* packageName, - const Locale& locale, - UErrorCode& err); - - /** - * Copy constructor. - * - * @param original The resource bundle to copy. - * @stable ICU 2.0 - */ - ResourceBundle(const ResourceBundle &original); - - /** - * Constructor from a C UResourceBundle. The resource bundle is - * copied and not adopted. ures_close will still need to be used on the - * original resource bundle. - * - * @param res A pointer to the C resource bundle. - * @param status A UErrorCode value. - * @stable ICU 2.0 - */ - ResourceBundle(UResourceBundle *res, - UErrorCode &status); - - /** - * Assignment operator. - * - * @param other The resource bundle to copy. - * @stable ICU 2.0 - */ - ResourceBundle& - operator=(const ResourceBundle& other); - - /** Destructor. - * @stable ICU 2.0 - */ - virtual ~ResourceBundle(); - - /** - * Clone this object. - * Clones can be used concurrently in multiple threads. - * If an error occurs, then NULL is returned. - * The caller must delete the clone. - * - * @return a clone of this object - * - * @see getDynamicClassID - * @stable ICU 2.8 - */ - ResourceBundle *clone() const; - - /** - * Returns the size of a resource. Size for scalar types is always 1, and for vector/table types is - * the number of child resources. - * @warning Integer array is treated as a scalar type. There are no - * APIs to access individual members of an integer array. It - * is always returned as a whole. - * - * @return number of resources in a given resource. - * @stable ICU 2.0 - */ - int32_t - getSize(void) const; - - /** - * returns a string from a string resource type - * - * @param status fills in the outgoing error code - * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a warning - * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return a pointer to a zero-terminated char16_t array which lives in a memory mapped/DLL file. - * @stable ICU 2.0 - */ - UnicodeString - getString(UErrorCode& status) const; - - /** - * returns a binary data from a resource. Can be used at most primitive resource types (binaries, - * strings, ints) - * - * @param len fills in the length of resulting byte chunk - * @param status fills in the outgoing error code - * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a warning - * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return a pointer to a chunk of unsigned bytes which live in a memory mapped/DLL file. - * @stable ICU 2.0 - */ - const uint8_t* - getBinary(int32_t& len, UErrorCode& status) const; - - - /** - * returns an integer vector from a resource. - * - * @param len fills in the length of resulting integer vector - * @param status fills in the outgoing error code - * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a warning - * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return a pointer to a vector of integers that lives in a memory mapped/DLL file. - * @stable ICU 2.0 - */ - const int32_t* - getIntVector(int32_t& len, UErrorCode& status) const; - - /** - * returns an unsigned integer from a resource. - * This integer is originally 28 bits. - * - * @param status fills in the outgoing error code - * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a warning - * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return an unsigned integer value - * @stable ICU 2.0 - */ - uint32_t - getUInt(UErrorCode& status) const; - - /** - * returns a signed integer from a resource. - * This integer is originally 28 bit and the sign gets propagated. - * - * @param status fills in the outgoing error code - * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a warning - * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return a signed integer value - * @stable ICU 2.0 - */ - int32_t - getInt(UErrorCode& status) const; - - /** - * Checks whether the resource has another element to iterate over. - * - * @return TRUE if there are more elements, FALSE if there is no more elements - * @stable ICU 2.0 - */ - UBool - hasNext(void) const; - - /** - * Resets the internal context of a resource so that iteration starts from the first element. - * - * @stable ICU 2.0 - */ - void - resetIterator(void); - - /** - * Returns the key associated with this resource. Not all the resources have a key - only - * those that are members of a table. - * - * @return a key associated to this resource, or NULL if it doesn't have a key - * @stable ICU 2.0 - */ - const char* - getKey(void) const; - - /** - * Gets the locale ID of the resource bundle as a string. - * Same as getLocale().getName() . - * - * @return the locale ID of the resource bundle as a string - * @stable ICU 2.0 - */ - const char* - getName(void) const; - - - /** - * Returns the type of a resource. Available types are defined in enum UResType - * - * @return type of the given resource. - * @stable ICU 2.0 - */ - UResType - getType(void) const; - - /** - * Returns the next resource in a given resource or NULL if there are no more resources - * - * @param status fills in the outgoing error code - * @return ResourceBundle object. - * @stable ICU 2.0 - */ - ResourceBundle - getNext(UErrorCode& status); - - /** - * Returns the next string in a resource or NULL if there are no more resources - * to iterate over. - * - * @param status fills in the outgoing error code - * @return an UnicodeString object. - * @stable ICU 2.0 - */ - UnicodeString - getNextString(UErrorCode& status); - - /** - * Returns the next string in a resource or NULL if there are no more resources - * to iterate over. - * - * @param key fill in for key associated with this string - * @param status fills in the outgoing error code - * @return an UnicodeString object. - * @stable ICU 2.0 - */ - UnicodeString - getNextString(const char ** key, - UErrorCode& status); - - /** - * Returns the resource in a resource at the specified index. - * - * @param index an index to the wanted resource. - * @param status fills in the outgoing error code - * @return ResourceBundle object. If there is an error, resource is invalid. - * @stable ICU 2.0 - */ - ResourceBundle - get(int32_t index, - UErrorCode& status) const; - - /** - * Returns the string in a given resource at the specified index. - * - * @param index an index to the wanted string. - * @param status fills in the outgoing error code - * @return an UnicodeString object. If there is an error, string is bogus - * @stable ICU 2.0 - */ - UnicodeString - getStringEx(int32_t index, - UErrorCode& status) const; - - /** - * Returns a resource in a resource that has a given key. This procedure works only with table - * resources. - * - * @param key a key associated with the wanted resource - * @param status fills in the outgoing error code. - * @return ResourceBundle object. If there is an error, resource is invalid. - * @stable ICU 2.0 - */ - ResourceBundle - get(const char* key, - UErrorCode& status) const; - - /** - * Returns a string in a resource that has a given key. This procedure works only with table - * resources. - * - * @param key a key associated with the wanted string - * @param status fills in the outgoing error code - * @return an UnicodeString object. If there is an error, string is bogus - * @stable ICU 2.0 - */ - UnicodeString - getStringEx(const char* key, - UErrorCode& status) const; - -#ifndef U_HIDE_DEPRECATED_API - /** - * Return the version number associated with this ResourceBundle as a string. Please - * use getVersion, as this method is going to be deprecated. - * - * @return A version number string as specified in the resource bundle or its parent. - * The caller does not own this string. - * @see getVersion - * @deprecated ICU 2.8 Use getVersion instead. - */ - const char* - getVersionNumber(void) const; -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Return the version number associated with this ResourceBundle as a UVersionInfo array. - * - * @param versionInfo A UVersionInfo array that is filled with the version number - * as specified in the resource bundle or its parent. - * @stable ICU 2.0 - */ - void - getVersion(UVersionInfo versionInfo) const; - -#ifndef U_HIDE_DEPRECATED_API - /** - * Return the Locale associated with this ResourceBundle. - * - * @return a Locale object - * @deprecated ICU 2.8 Use getLocale(ULocDataLocaleType type, UErrorCode &status) overload instead. - */ - const Locale& - getLocale(void) const; -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Return the Locale associated with this ResourceBundle. - * @param type You can choose between requested, valid and actual - * locale. For description see the definition of - * ULocDataLocaleType in uloc.h - * @param status just for catching illegal arguments - * - * @return a Locale object - * @stable ICU 2.8 - */ - const Locale - getLocale(ULocDataLocaleType type, UErrorCode &status) const; -#ifndef U_HIDE_INTERNAL_API - /** - * This API implements multilevel fallback - * @internal - */ - ResourceBundle - getWithFallback(const char* key, UErrorCode& status); -#endif /* U_HIDE_INTERNAL_API */ - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.2 - */ - virtual UClassID getDynamicClassID() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - -private: - ResourceBundle(); // default constructor not implemented - - UResourceBundle *fResource; - void constructForLocale(const UnicodeString& path, const Locale& locale, UErrorCode& error); - Locale *fLocale; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/schriter.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/schriter.h deleted file mode 100644 index 29360e724a..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/schriter.h +++ /dev/null @@ -1,192 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1998-2005, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* -* File schriter.h -* -* Modification History: -* -* Date Name Description -* 05/05/99 stephen Cleaned up. -****************************************************************************** -*/ - -#ifndef SCHRITER_H -#define SCHRITER_H - -#include "unicode/utypes.h" -#include "unicode/chariter.h" -#include "unicode/uchriter.h" - -/** - * \file - * \brief C++ API: String Character Iterator - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN -/** - * A concrete subclass of CharacterIterator that iterates over the - * characters (code units or code points) in a UnicodeString. - * It's possible not only to create an - * iterator that iterates over an entire UnicodeString, but also to - * create one that iterates over only a subrange of a UnicodeString - * (iterators over different subranges of the same UnicodeString don't - * compare equal). - * @see CharacterIterator - * @see ForwardCharacterIterator - * @stable ICU 2.0 - */ -class U_COMMON_API StringCharacterIterator : public UCharCharacterIterator { -public: - /** - * Create an iterator over the UnicodeString referred to by "textStr". - * The UnicodeString object is copied. - * The iteration range is the whole string, and the starting position is 0. - * @param textStr The unicode string used to create an iterator - * @stable ICU 2.0 - */ - StringCharacterIterator(const UnicodeString& textStr); - - /** - * Create an iterator over the UnicodeString referred to by "textStr". - * The iteration range is the whole string, and the starting - * position is specified by "textPos". If "textPos" is outside the valid - * iteration range, the behavior of this object is undefined. - * @param textStr The unicode string used to create an iterator - * @param textPos The starting position of the iteration - * @stable ICU 2.0 - */ - StringCharacterIterator(const UnicodeString& textStr, - int32_t textPos); - - /** - * Create an iterator over the UnicodeString referred to by "textStr". - * The UnicodeString object is copied. - * The iteration range begins with the code unit specified by - * "textBegin" and ends with the code unit BEFORE the code unit specified - * by "textEnd". The starting position is specified by "textPos". If - * "textBegin" and "textEnd" don't form a valid range on "text" (i.e., - * textBegin >= textEnd or either is negative or greater than text.size()), - * or "textPos" is outside the range defined by "textBegin" and "textEnd", - * the behavior of this iterator is undefined. - * @param textStr The unicode string used to create the StringCharacterIterator - * @param textBegin The begin position of the iteration range - * @param textEnd The end position of the iteration range - * @param textPos The starting position of the iteration - * @stable ICU 2.0 - */ - StringCharacterIterator(const UnicodeString& textStr, - int32_t textBegin, - int32_t textEnd, - int32_t textPos); - - /** - * Copy constructor. The new iterator iterates over the same range - * of the same string as "that", and its initial position is the - * same as "that"'s current position. - * The UnicodeString object in "that" is copied. - * @param that The StringCharacterIterator to be copied - * @stable ICU 2.0 - */ - StringCharacterIterator(const StringCharacterIterator& that); - - /** - * Destructor. - * @stable ICU 2.0 - */ - virtual ~StringCharacterIterator(); - - /** - * Assignment operator. *this is altered to iterate over the same - * range of the same string as "that", and refers to the same - * character within that string as "that" does. - * @param that The object to be copied. - * @return the newly created object. - * @stable ICU 2.0 - */ - StringCharacterIterator& - operator=(const StringCharacterIterator& that); - - /** - * Returns true if the iterators iterate over the same range of the - * same string and are pointing at the same character. - * @param that The ForwardCharacterIterator to be compared for equality - * @return true if the iterators iterate over the same range of the - * same string and are pointing at the same character. - * @stable ICU 2.0 - */ - virtual UBool operator==(const ForwardCharacterIterator& that) const; - - /** - * Returns a new StringCharacterIterator referring to the same - * character in the same range of the same string as this one. The - * caller must delete the new iterator. - * @return the newly cloned object. - * @stable ICU 2.0 - */ - virtual CharacterIterator* clone(void) const; - - /** - * Sets the iterator to iterate over the provided string. - * @param newText The string to be iterated over - * @stable ICU 2.0 - */ - void setText(const UnicodeString& newText); - - /** - * Copies the UnicodeString under iteration into the UnicodeString - * referred to by "result". Even if this iterator iterates across - * only a part of this string, the whole string is copied. - * @param result Receives a copy of the text under iteration. - * @stable ICU 2.0 - */ - virtual void getText(UnicodeString& result); - - /** - * Return a class ID for this object (not really public) - * @return a class ID for this object. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const; - - /** - * Return a class ID for this class (not really public) - * @return a class ID for this class - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - -protected: - /** - * Default constructor, iteration over empty string. - * @stable ICU 2.0 - */ - StringCharacterIterator(); - - /** - * Sets the iterator to iterate over the provided string. - * @param newText The string to be iterated over - * @param newTextLength The length of the String - * @stable ICU 2.0 - */ - void setText(const char16_t* newText, int32_t newTextLength); - - /** - * Copy of the iterated string object. - * @stable ICU 2.0 - */ - UnicodeString text; - -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/scientificnumberformatter.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/scientificnumberformatter.h deleted file mode 100644 index ce1e6d2068..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/scientificnumberformatter.h +++ /dev/null @@ -1,219 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (c) 2014-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -*/ -#ifndef SCINUMBERFORMATTER_H -#define SCINUMBERFORMATTER_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - - -#include "unicode/unistr.h" - -/** - * \file - * \brief C++ API: Formats in scientific notation. - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class FieldPositionIterator; -class DecimalFormatSymbols; -class DecimalFormat; -class Formattable; - -/** - * A formatter that formats numbers in user-friendly scientific notation. - * - * Sample code: - *

- * UErrorCode status = U_ZERO_ERROR;
- * LocalPointer fmt(
- *         ScientificNumberFormatter::createMarkupInstance(
- *                 "en", "", "", status));
- * if (U_FAILURE(status)) {
- *     return;
- * }
- * UnicodeString appendTo;
- * // appendTo = "1.23456x10-78"
- * fmt->format(1.23456e-78, appendTo, status);
- * 
- * - * @stable ICU 55 - */ -class U_I18N_API ScientificNumberFormatter : public UObject { -public: - - /** - * Creates a ScientificNumberFormatter instance that uses - * superscript characters for exponents. - * @param fmtToAdopt The DecimalFormat which must be configured for - * scientific notation. - * @param status error returned here. - * @return The new ScientificNumberFormatter instance. - * - * @stable ICU 55 - */ - static ScientificNumberFormatter *createSuperscriptInstance( - DecimalFormat *fmtToAdopt, UErrorCode &status); - - /** - * Creates a ScientificNumberFormatter instance that uses - * superscript characters for exponents for this locale. - * @param locale The locale - * @param status error returned here. - * @return The ScientificNumberFormatter instance. - * - * @stable ICU 55 - */ - static ScientificNumberFormatter *createSuperscriptInstance( - const Locale &locale, UErrorCode &status); - - - /** - * Creates a ScientificNumberFormatter instance that uses - * markup for exponents. - * @param fmtToAdopt The DecimalFormat which must be configured for - * scientific notation. - * @param beginMarkup the markup to start superscript. - * @param endMarkup the markup to end superscript. - * @param status error returned here. - * @return The new ScientificNumberFormatter instance. - * - * @stable ICU 55 - */ - static ScientificNumberFormatter *createMarkupInstance( - DecimalFormat *fmtToAdopt, - const UnicodeString &beginMarkup, - const UnicodeString &endMarkup, - UErrorCode &status); - - /** - * Creates a ScientificNumberFormatter instance that uses - * markup for exponents for this locale. - * @param locale The locale - * @param beginMarkup the markup to start superscript. - * @param endMarkup the markup to end superscript. - * @param status error returned here. - * @return The ScientificNumberFormatter instance. - * - * @stable ICU 55 - */ - static ScientificNumberFormatter *createMarkupInstance( - const Locale &locale, - const UnicodeString &beginMarkup, - const UnicodeString &endMarkup, - UErrorCode &status); - - - /** - * Returns a copy of this object. Caller must free returned copy. - * @stable ICU 55 - */ - ScientificNumberFormatter *clone() const { - return new ScientificNumberFormatter(*this); - } - - /** - * Destructor. - * @stable ICU 55 - */ - virtual ~ScientificNumberFormatter(); - - /** - * Formats a number into user friendly scientific notation. - * - * @param number the number to format. - * @param appendTo formatted string appended here. - * @param status any error returned here. - * @return appendTo - * - * @stable ICU 55 - */ - UnicodeString &format( - const Formattable &number, - UnicodeString &appendTo, - UErrorCode &status) const; - private: - class U_I18N_API Style : public UObject { - public: - virtual Style *clone() const = 0; - protected: - virtual UnicodeString &format( - const UnicodeString &original, - FieldPositionIterator &fpi, - const UnicodeString &preExponent, - UnicodeString &appendTo, - UErrorCode &status) const = 0; - private: - friend class ScientificNumberFormatter; - }; - - class U_I18N_API SuperscriptStyle : public Style { - public: - virtual Style *clone() const; - protected: - virtual UnicodeString &format( - const UnicodeString &original, - FieldPositionIterator &fpi, - const UnicodeString &preExponent, - UnicodeString &appendTo, - UErrorCode &status) const; - }; - - class U_I18N_API MarkupStyle : public Style { - public: - MarkupStyle( - const UnicodeString &beginMarkup, - const UnicodeString &endMarkup) - : Style(), - fBeginMarkup(beginMarkup), - fEndMarkup(endMarkup) { } - virtual Style *clone() const; - protected: - virtual UnicodeString &format( - const UnicodeString &original, - FieldPositionIterator &fpi, - const UnicodeString &preExponent, - UnicodeString &appendTo, - UErrorCode &status) const; - private: - UnicodeString fBeginMarkup; - UnicodeString fEndMarkup; - }; - - ScientificNumberFormatter( - DecimalFormat *fmtToAdopt, - Style *styleToAdopt, - UErrorCode &status); - - ScientificNumberFormatter(const ScientificNumberFormatter &other); - ScientificNumberFormatter &operator=(const ScientificNumberFormatter &); - - static void getPreExponent( - const DecimalFormatSymbols &dfs, UnicodeString &preExponent); - - static ScientificNumberFormatter *createInstance( - DecimalFormat *fmtToAdopt, - Style *styleToAdopt, - UErrorCode &status); - - UnicodeString fPreExponent; - DecimalFormat *fDecimalFormat; - Style *fStyle; - -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - - -#endif /* !UCONFIG_NO_FORMATTING */ -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/search.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/search.h deleted file mode 100644 index 403d3c5a91..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/search.h +++ /dev/null @@ -1,579 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2001-2011 IBM and others. All rights reserved. -********************************************************************** -* Date Name Description -* 03/22/2000 helena Creation. -********************************************************************** -*/ - -#ifndef SEARCH_H -#define SEARCH_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: SearchIterator object. - */ - -#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION - -#include "unicode/uobject.h" -#include "unicode/unistr.h" -#include "unicode/chariter.h" -#include "unicode/brkiter.h" -#include "unicode/usearch.h" - -/** -* @stable ICU 2.0 -*/ -struct USearch; -/** -* @stable ICU 2.0 -*/ -typedef struct USearch USearch; - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * - * SearchIterator is an abstract base class that provides - * methods to search for a pattern within a text string. Instances of - * SearchIterator maintain a current position and scans over the - * target text, returning the indices the pattern is matched and the length - * of each match. - *

- * SearchIterator defines a protocol for text searching. - * Subclasses provide concrete implementations of various search algorithms. - * For example, StringSearch implements language-sensitive pattern - * matching based on the comparison rules defined in a - * RuleBasedCollator object. - *

- * Other options for searching includes using a BreakIterator to restrict - * the points at which matches are detected. - *

- * SearchIterator provides an API that is similar to that of - * other text iteration classes such as BreakIterator. Using - * this class, it is easy to scan through text looking for all occurances of - * a given pattern. The following example uses a StringSearch - * object to find all instances of "fox" in the target string. Any other - * subclass of SearchIterator can be used in an identical - * manner. - *


- * UnicodeString target("The quick brown fox jumped over the lazy fox");
- * UnicodeString pattern("fox");
- *
- * SearchIterator *iter  = new StringSearch(pattern, target);
- * UErrorCode      error = U_ZERO_ERROR;
- * for (int pos = iter->first(error); pos != USEARCH_DONE; 
- *                               pos = iter->next(error)) {
- *     printf("Found match at %d pos, length is %d\n", pos, 
- *                                             iter.getMatchLength());
- * }
- * 
- * - * @see StringSearch - * @see RuleBasedCollator - */ -class U_I18N_API SearchIterator : public UObject { - -public: - - // public constructors and destructors ------------------------------- - - /** - * Copy constructor that creates a SearchIterator instance with the same - * behavior, and iterating over the same text. - * @param other the SearchIterator instance to be copied. - * @stable ICU 2.0 - */ - SearchIterator(const SearchIterator &other); - - /** - * Destructor. Cleans up the search iterator data struct. - * @stable ICU 2.0 - */ - virtual ~SearchIterator(); - - // public get and set methods ---------------------------------------- - - /** - * Sets the index to point to the given position, and clears any state - * that's affected. - *

- * This method takes the argument index and sets the position in the text - * string accordingly without checking if the index is pointing to a - * valid starting point to begin searching. - * @param position within the text to be set. If position is less - * than or greater than the text range for searching, - * an U_INDEX_OUTOFBOUNDS_ERROR will be returned - * @param status for errors if it occurs - * @stable ICU 2.0 - */ - virtual void setOffset(int32_t position, UErrorCode &status) = 0; - - /** - * Return the current index in the text being searched. - * If the iteration has gone past the end of the text - * (or past the beginning for a backwards search), USEARCH_DONE - * is returned. - * @return current index in the text being searched. - * @stable ICU 2.0 - */ - virtual int32_t getOffset(void) const = 0; - - /** - * Sets the text searching attributes located in the enum - * USearchAttribute with values from the enum USearchAttributeValue. - * USEARCH_DEFAULT can be used for all attributes for resetting. - * @param attribute text attribute (enum USearchAttribute) to be set - * @param value text attribute value - * @param status for errors if it occurs - * @stable ICU 2.0 - */ - void setAttribute(USearchAttribute attribute, - USearchAttributeValue value, - UErrorCode &status); - - /** - * Gets the text searching attributes - * @param attribute text attribute (enum USearchAttribute) to be retrieve - * @return text attribute value - * @stable ICU 2.0 - */ - USearchAttributeValue getAttribute(USearchAttribute attribute) const; - - /** - * Returns the index to the match in the text string that was searched. - * This call returns a valid result only after a successful call to - * first, next, previous, or last. - * Just after construction, or after a searching method returns - * USEARCH_DONE, this method will return USEARCH_DONE. - *

- * Use getMatchedLength to get the matched string length. - * @return index of a substring within the text string that is being - * searched. - * @see #first - * @see #next - * @see #previous - * @see #last - * @stable ICU 2.0 - */ - int32_t getMatchedStart(void) const; - - /** - * Returns the length of text in the string which matches the search - * pattern. This call returns a valid result only after a successful call - * to first, next, previous, or last. - * Just after construction, or after a searching method returns - * USEARCH_DONE, this method will return 0. - * @return The length of the match in the target text, or 0 if there - * is no match currently. - * @see #first - * @see #next - * @see #previous - * @see #last - * @stable ICU 2.0 - */ - int32_t getMatchedLength(void) const; - - /** - * Returns the text that was matched by the most recent call to - * first, next, previous, or last. - * If the iterator is not pointing at a valid match (e.g. just after - * construction or after USEARCH_DONE has been returned, - * returns an empty string. - * @param result stores the matched string or an empty string if a match - * is not found. - * @see #first - * @see #next - * @see #previous - * @see #last - * @stable ICU 2.0 - */ - void getMatchedText(UnicodeString &result) const; - - /** - * Set the BreakIterator that will be used to restrict the points - * at which matches are detected. The user is responsible for deleting - * the breakiterator. - * @param breakiter A BreakIterator that will be used to restrict the - * points at which matches are detected. If a match is - * found, but the match's start or end index is not a - * boundary as determined by the BreakIterator, - * the match will be rejected and another will be searched - * for. If this parameter is NULL, no break - * detection is attempted. - * @param status for errors if it occurs - * @see BreakIterator - * @stable ICU 2.0 - */ - void setBreakIterator(BreakIterator *breakiter, UErrorCode &status); - - /** - * Returns the BreakIterator that is used to restrict the points at - * which matches are detected. This will be the same object that was - * passed to the constructor or to setBreakIterator. - * Note that NULL is a legal value; it means that break - * detection should not be attempted. - * @return BreakIterator used to restrict matchings. - * @see #setBreakIterator - * @stable ICU 2.0 - */ - const BreakIterator * getBreakIterator(void) const; - - /** - * Set the string text to be searched. Text iteration will hence begin at - * the start of the text string. This method is useful if you want to - * re-use an iterator to search for the same pattern within a different - * body of text. The user is responsible for deleting the text. - * @param text string to be searched. - * @param status for errors. If the text length is 0, - * an U_ILLEGAL_ARGUMENT_ERROR is returned. - * @stable ICU 2.0 - */ - virtual void setText(const UnicodeString &text, UErrorCode &status); - - /** - * Set the string text to be searched. Text iteration will hence begin at - * the start of the text string. This method is useful if you want to - * re-use an iterator to search for the same pattern within a different - * body of text. - *

- * Note: No parsing of the text within the CharacterIterator - * will be done during searching for this version. The block of text - * in CharacterIterator will be used as it is. - * The user is responsible for deleting the text. - * @param text string iterator to be searched. - * @param status for errors if any. If the text length is 0 then an - * U_ILLEGAL_ARGUMENT_ERROR is returned. - * @stable ICU 2.0 - */ - virtual void setText(CharacterIterator &text, UErrorCode &status); - - /** - * Return the string text to be searched. - * @return text string to be searched. - * @stable ICU 2.0 - */ - const UnicodeString & getText(void) const; - - // operator overloading ---------------------------------------------- - - /** - * Equality operator. - * @param that SearchIterator instance to be compared. - * @return TRUE if both BreakIterators are of the same class, have the - * same behavior, terates over the same text and have the same - * attributes. FALSE otherwise. - * @stable ICU 2.0 - */ - virtual UBool operator==(const SearchIterator &that) const; - - /** - * Not-equal operator. - * @param that SearchIterator instance to be compared. - * @return FALSE if operator== returns TRUE, and vice versa. - * @stable ICU 2.0 - */ - UBool operator!=(const SearchIterator &that) const; - - // public methods ---------------------------------------------------- - - /** - * Returns a copy of SearchIterator with the same behavior, and - * iterating over the same text, as this one. Note that all data will be - * replicated, except for the text string to be searched. - * @return cloned object - * @stable ICU 2.0 - */ - virtual SearchIterator* safeClone(void) const = 0; - - /** - * Returns the first index at which the string text matches the search - * pattern. The iterator is adjusted so that its current index (as - * returned by getOffset) is the match position if one - * was found. - * If a match is not found, USEARCH_DONE will be returned and - * the iterator will be adjusted to the index USEARCH_DONE - * @param status for errors if it occurs - * @return The character index of the first match, or - * USEARCH_DONE if there are no matches. - * @see #getOffset - * @stable ICU 2.0 - */ - int32_t first(UErrorCode &status); - - /** - * Returns the first index equal or greater than position at which the - * string text matches the search pattern. The iterator is adjusted so - * that its current index (as returned by getOffset) is the - * match position if one was found. - * If a match is not found, USEARCH_DONE will be returned and the - * iterator will be adjusted to the index USEARCH_DONE. - * @param position where search if to start from. If position is less - * than or greater than the text range for searching, - * an U_INDEX_OUTOFBOUNDS_ERROR will be returned - * @param status for errors if it occurs - * @return The character index of the first match following - * position, or USEARCH_DONE if there are no - * matches. - * @see #getOffset - * @stable ICU 2.0 - */ - int32_t following(int32_t position, UErrorCode &status); - - /** - * Returns the last index in the target text at which it matches the - * search pattern. The iterator is adjusted so that its current index - * (as returned by getOffset) is the match position if one was - * found. - * If a match is not found, USEARCH_DONE will be returned and - * the iterator will be adjusted to the index USEARCH_DONE. - * @param status for errors if it occurs - * @return The index of the first match, or USEARCH_DONE if - * there are no matches. - * @see #getOffset - * @stable ICU 2.0 - */ - int32_t last(UErrorCode &status); - - /** - * Returns the first index less than position at which the string - * text matches the search pattern. The iterator is adjusted so that its - * current index (as returned by getOffset) is the match - * position if one was found. If a match is not found, - * USEARCH_DONE will be returned and the iterator will be - * adjusted to the index USEARCH_DONE - *

- * When USEARCH_OVERLAP option is off, the last index of the - * result match is always less than position. - * When USERARCH_OVERLAP is on, the result match may span across - * position. - * - * @param position where search is to start from. If position is less - * than or greater than the text range for searching, - * an U_INDEX_OUTOFBOUNDS_ERROR will be returned - * @param status for errors if it occurs - * @return The character index of the first match preceding - * position, or USEARCH_DONE if there are - * no matches. - * @see #getOffset - * @stable ICU 2.0 - */ - int32_t preceding(int32_t position, UErrorCode &status); - - /** - * Returns the index of the next point at which the text matches the - * search pattern, starting from the current position - * The iterator is adjusted so that its current index (as returned by - * getOffset) is the match position if one was found. - * If a match is not found, USEARCH_DONE will be returned and - * the iterator will be adjusted to a position after the end of the text - * string. - * @param status for errors if it occurs - * @return The index of the next match after the current position, - * or USEARCH_DONE if there are no more matches. - * @see #getOffset - * @stable ICU 2.0 - */ - int32_t next(UErrorCode &status); - - /** - * Returns the index of the previous point at which the string text - * matches the search pattern, starting at the current position. - * The iterator is adjusted so that its current index (as returned by - * getOffset) is the match position if one was found. - * If a match is not found, USEARCH_DONE will be returned and - * the iterator will be adjusted to the index USEARCH_DONE - * @param status for errors if it occurs - * @return The index of the previous match before the current position, - * or USEARCH_DONE if there are no more matches. - * @see #getOffset - * @stable ICU 2.0 - */ - int32_t previous(UErrorCode &status); - - /** - * Resets the iteration. - * Search will begin at the start of the text string if a forward - * iteration is initiated before a backwards iteration. Otherwise if a - * backwards iteration is initiated before a forwards iteration, the - * search will begin at the end of the text string. - * @stable ICU 2.0 - */ - virtual void reset(); - -protected: - // protected data members --------------------------------------------- - - /** - * C search data struct - * @stable ICU 2.0 - */ - USearch *m_search_; - - /** - * Break iterator. - * Currently the C++ breakiterator does not have getRules etc to reproduce - * another in C. Hence we keep the original around and do the verification - * at the end of the match. The user is responsible for deleting this - * break iterator. - * @stable ICU 2.0 - */ - BreakIterator *m_breakiterator_; - - /** - * Unicode string version of the search text - * @stable ICU 2.0 - */ - UnicodeString m_text_; - - // protected constructors and destructors ----------------------------- - - /** - * Default constructor. - * Initializes data to the default values. - * @stable ICU 2.0 - */ - SearchIterator(); - - /** - * Constructor for use by subclasses. - * @param text The target text to be searched. - * @param breakiter A {@link BreakIterator} that is used to restrict the - * points at which matches are detected. If - * handleNext or handlePrev finds a - * match, but the match's start or end index is not a - * boundary as determined by the BreakIterator, - * the match is rejected and handleNext or - * handlePrev is called again. If this parameter - * is NULL, no break detection is attempted. - * @see #handleNext - * @see #handlePrev - * @stable ICU 2.0 - */ - SearchIterator(const UnicodeString &text, - BreakIterator *breakiter = NULL); - - /** - * Constructor for use by subclasses. - *

- * Note: No parsing of the text within the CharacterIterator - * will be done during searching for this version. The block of text - * in CharacterIterator will be used as it is. - * @param text The target text to be searched. - * @param breakiter A {@link BreakIterator} that is used to restrict the - * points at which matches are detected. If - * handleNext or handlePrev finds a - * match, but the match's start or end index is not a - * boundary as determined by the BreakIterator, - * the match is rejected and handleNext or - * handlePrev is called again. If this parameter - * is NULL, no break detection is attempted. - * @see #handleNext - * @see #handlePrev - * @stable ICU 2.0 - */ - SearchIterator(CharacterIterator &text, BreakIterator *breakiter = NULL); - - // protected methods -------------------------------------------------- - - /** - * Assignment operator. Sets this iterator to have the same behavior, - * and iterate over the same text, as the one passed in. - * @param that instance to be copied. - * @stable ICU 2.0 - */ - SearchIterator & operator=(const SearchIterator &that); - - /** - * Abstract method which subclasses override to provide the mechanism - * for finding the next match in the target text. This allows different - * subclasses to provide different search algorithms. - *

- * If a match is found, the implementation should return the index at - * which the match starts and should call - * setMatchLength with the number of characters - * in the target text that make up the match. If no match is found, the - * method should return USEARCH_DONE. - *

- * @param position The index in the target text at which the search - * should start. - * @param status for error codes if it occurs. - * @return index at which the match starts, else if match is not found - * USEARCH_DONE is returned - * @see #setMatchLength - * @stable ICU 2.0 - */ - virtual int32_t handleNext(int32_t position, UErrorCode &status) - = 0; - - /** - * Abstract method which subclasses override to provide the mechanism for - * finding the previous match in the target text. This allows different - * subclasses to provide different search algorithms. - *

- * If a match is found, the implementation should return the index at - * which the match starts and should call - * setMatchLength with the number of characters - * in the target text that make up the match. If no match is found, the - * method should return USEARCH_DONE. - *

- * @param position The index in the target text at which the search - * should start. - * @param status for error codes if it occurs. - * @return index at which the match starts, else if match is not found - * USEARCH_DONE is returned - * @see #setMatchLength - * @stable ICU 2.0 - */ - virtual int32_t handlePrev(int32_t position, UErrorCode &status) - = 0; - - /** - * Sets the length of the currently matched string in the text string to - * be searched. - * Subclasses' handleNext and handlePrev - * methods should call this when they find a match in the target text. - * @param length length of the matched text. - * @see #handleNext - * @see #handlePrev - * @stable ICU 2.0 - */ - virtual void setMatchLength(int32_t length); - - /** - * Sets the offset of the currently matched string in the text string to - * be searched. - * Subclasses' handleNext and handlePrev - * methods should call this when they find a match in the target text. - * @param position start offset of the matched text. - * @see #handleNext - * @see #handlePrev - * @stable ICU 2.0 - */ - virtual void setMatchStart(int32_t position); - - /** - * sets match not found - * @stable ICU 2.0 - */ - void setMatchNotFound(); -}; - -inline UBool SearchIterator::operator!=(const SearchIterator &that) const -{ - return !operator==(that); -} -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_COLLATION */ - -#endif - diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/selfmt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/selfmt.h deleted file mode 100644 index 91e0e63135..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/selfmt.h +++ /dev/null @@ -1,371 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/******************************************************************** - * COPYRIGHT: - * Copyright (c) 1997-2011, International Business Machines Corporation and - * others. All Rights Reserved. - * Copyright (C) 2010 , Yahoo! Inc. - ******************************************************************** - * - * File SELFMT.H - * - * Modification History: - * - * Date Name Description - * 11/11/09 kirtig Finished first cut of implementation. - ********************************************************************/ - -#ifndef SELFMT -#define SELFMT - -#include "unicode/messagepattern.h" -#include "unicode/numfmt.h" -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: SelectFormat object - */ - -#if !UCONFIG_NO_FORMATTING - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class MessageFormat; - -/** - *

SelectFormat supports the creation of internationalized - * messages by selecting phrases based on keywords. The pattern specifies - * how to map keywords to phrases and provides a default phrase. The - * object provided to the format method is a string that's matched - * against the keywords. If there is a match, the corresponding phrase - * is selected; otherwise, the default phrase is used.

- * - *

Using SelectFormat for Gender Agreement

- * - *

Note: Typically, select formatting is done via MessageFormat - * with a select argument type, - * rather than using a stand-alone SelectFormat.

- * - *

The main use case for the select format is gender based inflection. - * When names or nouns are inserted into sentences, their gender can affect pronouns, - * verb forms, articles, and adjectives. Special care needs to be - * taken for the case where the gender cannot be determined. - * The impact varies between languages:

- * \htmlonly - *
    - *
  • English has three genders, and unknown gender is handled as a special - * case. Names use the gender of the named person (if known), nouns referring - * to people use natural gender, and inanimate objects are usually neutral. - * The gender only affects pronouns: "he", "she", "it", "they". - * - *
  • German differs from English in that the gender of nouns is rather - * arbitrary, even for nouns referring to people ("Mädchen", girl, is neutral). - * The gender affects pronouns ("er", "sie", "es"), articles ("der", "die", - * "das"), and adjective forms ("guter Mann", "gute Frau", "gutes Mädchen"). - * - *
  • French has only two genders; as in German the gender of nouns - * is rather arbitrary - for sun and moon, the genders - * are the opposite of those in German. The gender affects - * pronouns ("il", "elle"), articles ("le", "la"), - * adjective forms ("bon", "bonne"), and sometimes - * verb forms ("allé", "allée"). - * - *
  • Polish distinguishes five genders (or noun classes), - * human masculine, animate non-human masculine, inanimate masculine, - * feminine, and neuter. - *
- * \endhtmlonly - *

Some other languages have noun classes that are not related to gender, - * but similar in grammatical use. - * Some African languages have around 20 noun classes.

- * - *

Note:For the gender of a person in a given sentence, - * we usually need to distinguish only between female, male and other/unknown.

- * - *

To enable localizers to create sentence patterns that take their - * language's gender dependencies into consideration, software has to provide - * information about the gender associated with a noun or name to - * MessageFormat. - * Two main cases can be distinguished:

- * - *
    - *
  • For people, natural gender information should be maintained for each person. - * Keywords like "male", "female", "mixed" (for groups of people) - * and "unknown" could be used. - * - *
  • For nouns, grammatical gender information should be maintained for - * each noun and per language, e.g., in resource bundles. - * The keywords "masculine", "feminine", and "neuter" are commonly used, - * but some languages may require other keywords. - *
- * - *

The resulting keyword is provided to MessageFormat as a - * parameter separate from the name or noun it's associated with. For example, - * to generate a message such as "Jean went to Paris", three separate arguments - * would be provided: The name of the person as argument 0, the gender of - * the person as argument 1, and the name of the city as argument 2. - * The sentence pattern for English, where the gender of the person has - * no impact on this simple sentence, would not refer to argument 1 at all:

- * - *
{0} went to {2}.
- * - *

Note: The entire sentence should be included (and partially repeated) - * inside each phrase. Otherwise translators would have to be trained on how to - * move bits of the sentence in and out of the select argument of a message. - * (The examples below do not follow this recommendation!)

- * - *

The sentence pattern for French, where the gender of the person affects - * the form of the participle, uses a select format based on argument 1:

- * - * \htmlonly
{0} est {1, select, female {allée} other {allé}} à {2}.
\endhtmlonly - * - *

Patterns can be nested, so that it's possible to handle interactions of - * number and gender where necessary. For example, if the above sentence should - * allow for the names of several people to be inserted, the following sentence - * pattern can be used (with argument 0 the list of people's names, - * argument 1 the number of people, argument 2 their combined gender, and - * argument 3 the city name):

- * - * \htmlonly - *
{0} {1, plural,
-  *                 one {est {2, select, female {allée} other  {allé}}}
-  *                 other {sont {2, select, female {allées} other {allés}}}
-  *          }à {3}.
- * \endhtmlonly - * - *

Patterns and Their Interpretation

- * - *

The SelectFormat pattern string defines the phrase output - * for each user-defined keyword. - * The pattern is a sequence of (keyword, message) pairs. - * A keyword is a "pattern identifier": [^[[:Pattern_Syntax:][:Pattern_White_Space:]]]+

- * - *

Each message is a MessageFormat pattern string enclosed in {curly braces}.

- * - *

You always have to define a phrase for the default keyword - * other; this phrase is returned when the keyword - * provided to - * the format method matches no other keyword. - * If a pattern does not provide a phrase for other, the method - * it's provided to returns the error U_DEFAULT_KEYWORD_MISSING. - *
- * Pattern_White_Space between keywords and messages is ignored. - * Pattern_White_Space within a message is preserved and output.

- * - *

Example:
-  * \htmlonly
-  *
-  * UErrorCode status = U_ZERO_ERROR;
-  * MessageFormat *msgFmt = new MessageFormat(UnicodeString("{0} est  {1, select, female {allée} other {allé}} à Paris."), Locale("fr"),  status);
-  * if (U_FAILURE(status)) {
-  *       return;
-  * }
-  * FieldPosition ignore(FieldPosition::DONT_CARE);
-  * UnicodeString result;
-  *
-  * char* str1= "Kirti,female";
-  * Formattable args1[] = {"Kirti","female"};
-  * msgFmt->format(args1, 2, result, ignore, status);
-  * cout << "Input is " << str1 << " and result is: " << result << endl;
-  * delete msgFmt;
-  *
-  * \endhtmlonly
-  * 
- *

- * - * Produces the output:
- * \htmlonly - * Kirti est allée à Paris. - * \endhtmlonly - * - * @stable ICU 4.4 - */ - -class U_I18N_API SelectFormat : public Format { -public: - - /** - * Creates a new SelectFormat for a given pattern string. - * @param pattern the pattern for this SelectFormat. - * errors are returned to status if the pattern is invalid. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @stable ICU 4.4 - */ - SelectFormat(const UnicodeString& pattern, UErrorCode& status); - - /** - * copy constructor. - * @stable ICU 4.4 - */ - SelectFormat(const SelectFormat& other); - - /** - * Destructor. - * @stable ICU 4.4 - */ - virtual ~SelectFormat(); - - /** - * Sets the pattern used by this select format. - * for the keyword rules. - * Patterns and their interpretation are specified in the class description. - * - * @param pattern the pattern for this select format - * errors are returned to status if the pattern is invalid. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @stable ICU 4.4 - */ - void applyPattern(const UnicodeString& pattern, UErrorCode& status); - - - using Format::format; - - /** - * Selects the phrase for the given keyword - * - * @param keyword The keyword that is used to select an alternative. - * @param appendTo output parameter to receive result. - * result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status output param set to success/failure code on exit, which - * must not indicate a failure before the function call. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - UnicodeString& format(const UnicodeString& keyword, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& status) const; - - /** - * Assignment operator - * - * @param other the SelectFormat object to copy from. - * @stable ICU 4.4 - */ - SelectFormat& operator=(const SelectFormat& other); - - /** - * Return true if another object is semantically equal to this one. - * - * @param other the SelectFormat object to be compared with. - * @return true if other is semantically equal to this. - * @stable ICU 4.4 - */ - virtual UBool operator==(const Format& other) const; - - /** - * Return true if another object is semantically unequal to this one. - * - * @param other the SelectFormat object to be compared with. - * @return true if other is semantically unequal to this. - * @stable ICU 4.4 - */ - virtual UBool operator!=(const Format& other) const; - - /** - * Clones this Format object polymorphically. The caller owns the - * result and should delete it when done. - * @stable ICU 4.4 - */ - virtual Format* clone(void) const; - - /** - * Format an object to produce a string. - * This method handles keyword strings. - * If the Formattable object is not a UnicodeString, - * then it returns a failing UErrorCode. - * - * @param obj A keyword string that is used to select an alternative. - * @param appendTo output parameter to receive result. - * Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. - * On output: the offsets of the alignment field. - * @param status output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - UnicodeString& format(const Formattable& obj, - UnicodeString& appendTo, - FieldPosition& pos, - UErrorCode& status) const; - - /** - * Returns the pattern from applyPattern() or constructor. - * - * @param appendTo output parameter to receive result. - * Result is appended to existing contents. - * @return the UnicodeString with inserted pattern. - * @stable ICU 4.4 - */ - UnicodeString& toPattern(UnicodeString& appendTo); - - /** - * This method is not yet supported by SelectFormat. - *

- * Before calling, set parse_pos.index to the offset you want to start - * parsing at in the source. After calling, parse_pos.index is the end of - * the text you parsed. If error occurs, index is unchanged. - *

- * When parsing, leading whitespace is discarded (with a successful parse), - * while trailing whitespace is left as is. - *

- * See Format::parseObject() for more. - * - * @param source The string to be parsed into an object. - * @param result Formattable to be set to the parse result. - * If parse fails, return contents are undefined. - * @param parse_pos The position to start parsing at. Upon return - * this param is set to the position after the - * last character successfully parsed. If the - * source is not parsed successfully, this param - * will remain unchanged. - * @stable ICU 4.4 - */ - virtual void parseObject(const UnicodeString& source, - Formattable& result, - ParsePosition& parse_pos) const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * @stable ICU 4.4 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * @stable ICU 4.4 - */ - virtual UClassID getDynamicClassID() const; - -private: - friend class MessageFormat; - - SelectFormat(); // default constructor not implemented. - - /** - * Finds the SelectFormat sub-message for the given keyword, or the "other" sub-message. - * @param pattern A MessagePattern. - * @param partIndex the index of the first SelectFormat argument style part. - * @param keyword a keyword to be matched to one of the SelectFormat argument's keywords. - * @param ec Error code. - * @return the sub-message start part index. - */ - static int32_t findSubMessage(const MessagePattern& pattern, int32_t partIndex, - const UnicodeString& keyword, UErrorCode& ec); - - MessagePattern msgPattern; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _SELFMT -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/simpleformatter.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/simpleformatter.h deleted file mode 100644 index 0b92a5b54e..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/simpleformatter.h +++ /dev/null @@ -1,338 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* Copyright (C) 2014-2016, International Business Machines -* Corporation and others. All Rights Reserved. -****************************************************************************** -* simpleformatter.h -*/ - -#ifndef __SIMPLEFORMATTER_H__ -#define __SIMPLEFORMATTER_H__ - -/** - * \file - * \brief C++ API: Simple formatter, minimal subset of MessageFormat. - */ - -#include "unicode/utypes.h" -#include "unicode/unistr.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -// Forward declaration: -namespace number { -namespace impl { -class SimpleModifier; -} -} - -/** - * Formats simple patterns like "{1} was born in {0}". - * Minimal subset of MessageFormat; fast, simple, minimal dependencies. - * Supports only numbered arguments with no type nor style parameters, - * and formats only string values. - * Quoting via ASCII apostrophe compatible with ICU MessageFormat default behavior. - * - * Factory methods set error codes for syntax errors - * and for too few or too many arguments/placeholders. - * - * SimpleFormatter objects are thread-safe except for assignment and applying new patterns. - * - * Example: - *

- * UErrorCode errorCode = U_ZERO_ERROR;
- * SimpleFormatter fmt("{1} '{born}' in {0}", errorCode);
- * UnicodeString result;
- *
- * // Output: "paul {born} in england"
- * fmt.format("england", "paul", result, errorCode);
- * 
- * - * This class is not intended for public subclassing. - * - * @see MessageFormat - * @see UMessagePatternApostropheMode - * @stable ICU 57 - */ -class U_COMMON_API SimpleFormatter U_FINAL : public UMemory { -public: - /** - * Default constructor. - * @stable ICU 57 - */ - SimpleFormatter() : compiledPattern((char16_t)0) {} - - /** - * Constructs a formatter from the pattern string. - * - * @param pattern The pattern string. - * @param errorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * Set to U_ILLEGAL_ARGUMENT_ERROR for bad argument syntax. - * @stable ICU 57 - */ - SimpleFormatter(const UnicodeString& pattern, UErrorCode &errorCode) { - applyPattern(pattern, errorCode); - } - - /** - * Constructs a formatter from the pattern string. - * The number of arguments checked against the given limits is the - * highest argument number plus one, not the number of occurrences of arguments. - * - * @param pattern The pattern string. - * @param min The pattern must have at least this many arguments. - * @param max The pattern must have at most this many arguments. - * @param errorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * Set to U_ILLEGAL_ARGUMENT_ERROR for bad argument syntax and - * too few or too many arguments. - * @stable ICU 57 - */ - SimpleFormatter(const UnicodeString& pattern, int32_t min, int32_t max, - UErrorCode &errorCode) { - applyPatternMinMaxArguments(pattern, min, max, errorCode); - } - - /** - * Copy constructor. - * @stable ICU 57 - */ - SimpleFormatter(const SimpleFormatter& other) - : compiledPattern(other.compiledPattern) {} - - /** - * Assignment operator. - * @stable ICU 57 - */ - SimpleFormatter &operator=(const SimpleFormatter& other); - - /** - * Destructor. - * @stable ICU 57 - */ - ~SimpleFormatter(); - - /** - * Changes this object according to the new pattern. - * - * @param pattern The pattern string. - * @param errorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * Set to U_ILLEGAL_ARGUMENT_ERROR for bad argument syntax. - * @return TRUE if U_SUCCESS(errorCode). - * @stable ICU 57 - */ - UBool applyPattern(const UnicodeString &pattern, UErrorCode &errorCode) { - return applyPatternMinMaxArguments(pattern, 0, INT32_MAX, errorCode); - } - - /** - * Changes this object according to the new pattern. - * The number of arguments checked against the given limits is the - * highest argument number plus one, not the number of occurrences of arguments. - * - * @param pattern The pattern string. - * @param min The pattern must have at least this many arguments. - * @param max The pattern must have at most this many arguments. - * @param errorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * Set to U_ILLEGAL_ARGUMENT_ERROR for bad argument syntax and - * too few or too many arguments. - * @return TRUE if U_SUCCESS(errorCode). - * @stable ICU 57 - */ - UBool applyPatternMinMaxArguments(const UnicodeString &pattern, - int32_t min, int32_t max, UErrorCode &errorCode); - - /** - * @return The max argument number + 1. - * @stable ICU 57 - */ - int32_t getArgumentLimit() const { - return getArgumentLimit(compiledPattern.getBuffer(), compiledPattern.length()); - } - - /** - * Formats the given value, appending to the appendTo builder. - * The argument value must not be the same object as appendTo. - * getArgumentLimit() must be at most 1. - * - * @param value0 Value for argument {0}. - * @param appendTo Gets the formatted pattern and value appended. - * @param errorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return appendTo - * @stable ICU 57 - */ - UnicodeString &format( - const UnicodeString &value0, - UnicodeString &appendTo, UErrorCode &errorCode) const; - - /** - * Formats the given values, appending to the appendTo builder. - * An argument value must not be the same object as appendTo. - * getArgumentLimit() must be at most 2. - * - * @param value0 Value for argument {0}. - * @param value1 Value for argument {1}. - * @param appendTo Gets the formatted pattern and values appended. - * @param errorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return appendTo - * @stable ICU 57 - */ - UnicodeString &format( - const UnicodeString &value0, - const UnicodeString &value1, - UnicodeString &appendTo, UErrorCode &errorCode) const; - - /** - * Formats the given values, appending to the appendTo builder. - * An argument value must not be the same object as appendTo. - * getArgumentLimit() must be at most 3. - * - * @param value0 Value for argument {0}. - * @param value1 Value for argument {1}. - * @param value2 Value for argument {2}. - * @param appendTo Gets the formatted pattern and values appended. - * @param errorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return appendTo - * @stable ICU 57 - */ - UnicodeString &format( - const UnicodeString &value0, - const UnicodeString &value1, - const UnicodeString &value2, - UnicodeString &appendTo, UErrorCode &errorCode) const; - - /** - * Formats the given values, appending to the appendTo string. - * - * @param values The argument values. - * An argument value must not be the same object as appendTo. - * Can be NULL if valuesLength==getArgumentLimit()==0. - * @param valuesLength The length of the values array. - * Must be at least getArgumentLimit(). - * @param appendTo Gets the formatted pattern and values appended. - * @param offsets offsets[i] receives the offset of where - * values[i] replaced pattern argument {i}. - * Can be shorter or longer than values. Can be NULL if offsetsLength==0. - * If there is no {i} in the pattern, then offsets[i] is set to -1. - * @param offsetsLength The length of the offsets array. - * @param errorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return appendTo - * @stable ICU 57 - */ - UnicodeString &formatAndAppend( - const UnicodeString *const *values, int32_t valuesLength, - UnicodeString &appendTo, - int32_t *offsets, int32_t offsetsLength, UErrorCode &errorCode) const; - - /** - * Formats the given values, replacing the contents of the result string. - * May optimize by actually appending to the result if it is the same object - * as the value corresponding to the initial argument in the pattern. - * - * @param values The argument values. - * An argument value may be the same object as result. - * Can be NULL if valuesLength==getArgumentLimit()==0. - * @param valuesLength The length of the values array. - * Must be at least getArgumentLimit(). - * @param result Gets its contents replaced by the formatted pattern and values. - * @param offsets offsets[i] receives the offset of where - * values[i] replaced pattern argument {i}. - * Can be shorter or longer than values. Can be NULL if offsetsLength==0. - * If there is no {i} in the pattern, then offsets[i] is set to -1. - * @param offsetsLength The length of the offsets array. - * @param errorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return result - * @stable ICU 57 - */ - UnicodeString &formatAndReplace( - const UnicodeString *const *values, int32_t valuesLength, - UnicodeString &result, - int32_t *offsets, int32_t offsetsLength, UErrorCode &errorCode) const; - - /** - * Returns the pattern text with none of the arguments. - * Like formatting with all-empty string values. - * @stable ICU 57 - */ - UnicodeString getTextWithNoArguments() const { - return getTextWithNoArguments( - compiledPattern.getBuffer(), - compiledPattern.length(), - nullptr, - 0); - } - -#ifndef U_HIDE_INTERNAL_API - /** - * Returns the pattern text with none of the arguments. - * Like formatting with all-empty string values. - * - * TODO(ICU-20406): Replace this with an Iterator interface. - * - * @param offsets offsets[i] receives the offset of where {i} was located - * before it was replaced by an empty string. - * For example, "a{0}b{1}" produces offset 1 for i=0 and 2 for i=1. - * Can be nullptr if offsetsLength==0. - * If there is no {i} in the pattern, then offsets[i] is set to -1. - * @param offsetsLength The length of the offsets array. - * - * @internal - */ - UnicodeString getTextWithNoArguments(int32_t *offsets, int32_t offsetsLength) const { - return getTextWithNoArguments( - compiledPattern.getBuffer(), - compiledPattern.length(), - offsets, - offsetsLength); - } -#endif // U_HIDE_INTERNAL_API - -private: - /** - * Binary representation of the compiled pattern. - * Index 0: One more than the highest argument number. - * Followed by zero or more arguments or literal-text segments. - * - * An argument is stored as its number, less than ARG_NUM_LIMIT. - * A literal-text segment is stored as its length (at least 1) offset by ARG_NUM_LIMIT, - * followed by that many chars. - */ - UnicodeString compiledPattern; - - static inline int32_t getArgumentLimit(const char16_t *compiledPattern, - int32_t compiledPatternLength) { - return compiledPatternLength == 0 ? 0 : compiledPattern[0]; - } - - static UnicodeString getTextWithNoArguments( - const char16_t *compiledPattern, - int32_t compiledPatternLength, - int32_t *offsets, - int32_t offsetsLength); - - static UnicodeString &format( - const char16_t *compiledPattern, int32_t compiledPatternLength, - const UnicodeString *const *values, - UnicodeString &result, const UnicodeString *resultCopy, UBool forbidResultAsValue, - int32_t *offsets, int32_t offsetsLength, - UErrorCode &errorCode); - - // Give access to internals to SimpleModifier for number formatting - friend class number::impl::SimpleModifier; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // __SIMPLEFORMATTER_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/simpletz.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/simpletz.h deleted file mode 100644 index f93d106304..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/simpletz.h +++ /dev/null @@ -1,934 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************** - * Copyright (C) 1997-2013, International Business Machines * - * Corporation and others. All Rights Reserved. * - ******************************************************************************** - * - * File SIMPLETZ.H - * - * Modification History: - * - * Date Name Description - * 04/21/97 aliu Overhauled header. - * 08/10/98 stephen JDK 1.2 sync - * Added setStartRule() / setEndRule() overloads - * Added hasSameRules() - * 09/02/98 stephen Added getOffset(monthLen) - * Changed getOffset() to take UErrorCode - * 07/09/99 stephen Removed millisPerHour (unused, for HP compiler) - * 12/02/99 aliu Added TimeMode and constructor and setStart/EndRule - * methods that take TimeMode. Added to docs. - ******************************************************************************** - */ - -#ifndef SIMPLETZ_H -#define SIMPLETZ_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: SimpleTimeZone is a concrete subclass of TimeZone. - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/basictz.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -// forward declaration -class InitialTimeZoneRule; -class TimeZoneTransition; -class AnnualTimeZoneRule; - -/** - * SimpleTimeZone is a concrete subclass of TimeZone - * that represents a time zone for use with a Gregorian calendar. This - * class does not handle historical changes. - *

- * When specifying daylight-savings-time begin and end dates, use a negative value for - * dayOfWeekInMonth to indicate that SimpleTimeZone should - * count from the end of the month backwards. For example, if Daylight Savings - * Time starts or ends at the last Sunday a month, use dayOfWeekInMonth = -1 - * along with dayOfWeek = UCAL_SUNDAY to specify the rule. - * - * @see Calendar - * @see GregorianCalendar - * @see TimeZone - * @author D. Goldsmith, Mark Davis, Chen-Lieh Huang, Alan Liu - */ -class U_I18N_API SimpleTimeZone: public BasicTimeZone { -public: - - /** - * TimeMode is used, together with a millisecond offset after - * midnight, to specify a rule transition time. Most rules - * transition at a local wall time, that is, according to the - * current time in effect, either standard, or DST. However, some - * rules transition at local standard time, and some at a specific - * UTC time. Although it might seem that all times could be - * converted to wall time, thus eliminating the need for this - * parameter, this is not the case. - * @stable ICU 2.0 - */ - enum TimeMode { - WALL_TIME = 0, - STANDARD_TIME, - UTC_TIME - }; - - /** - * Copy constructor - * @param source the object to be copied. - * @stable ICU 2.0 - */ - SimpleTimeZone(const SimpleTimeZone& source); - - /** - * Default assignment operator - * @param right the object to be copied. - * @stable ICU 2.0 - */ - SimpleTimeZone& operator=(const SimpleTimeZone& right); - - /** - * Destructor - * @stable ICU 2.0 - */ - virtual ~SimpleTimeZone(); - - /** - * Returns true if the two TimeZone objects are equal; that is, they have - * the same ID, raw GMT offset, and DST rules. - * - * @param that The SimpleTimeZone object to be compared with. - * @return True if the given time zone is equal to this time zone; false - * otherwise. - * @stable ICU 2.0 - */ - virtual UBool operator==(const TimeZone& that) const; - - /** - * Constructs a SimpleTimeZone with the given raw GMT offset and time zone ID, - * and which doesn't observe daylight savings time. Normally you should use - * TimeZone::createInstance() to create a TimeZone instead of creating a - * SimpleTimeZone directly with this constructor. - * - * @param rawOffsetGMT The given base time zone offset to GMT. - * @param ID The timezone ID which is obtained from - * TimeZone.getAvailableIDs. - * @stable ICU 2.0 - */ - SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID); - - /** - * Construct a SimpleTimeZone with the given raw GMT offset, time zone ID, - * and times to start and end daylight savings time. To create a TimeZone that - * doesn't observe daylight savings time, don't use this constructor; use - * SimpleTimeZone(rawOffset, ID) instead. Normally, you should use - * TimeZone.createInstance() to create a TimeZone instead of creating a - * SimpleTimeZone directly with this constructor. - *

- * Various types of daylight-savings time rules can be specfied by using different - * values for startDay and startDayOfWeek and endDay and endDayOfWeek. For a - * complete explanation of how these parameters work, see the documentation for - * setStartRule(). - * - * @param rawOffsetGMT The new SimpleTimeZone's raw GMT offset - * @param ID The new SimpleTimeZone's time zone ID. - * @param savingsStartMonth The daylight savings starting month. Month is - * 0-based. eg, 0 for January. - * @param savingsStartDayOfWeekInMonth The daylight savings starting - * day-of-week-in-month. See setStartRule() for a - * complete explanation. - * @param savingsStartDayOfWeek The daylight savings starting day-of-week. - * See setStartRule() for a complete explanation. - * @param savingsStartTime The daylight savings starting time, expressed as the - * number of milliseconds after midnight. - * @param savingsEndMonth The daylight savings ending month. Month is - * 0-based. eg, 0 for January. - * @param savingsEndDayOfWeekInMonth The daylight savings ending day-of-week-in-month. - * See setStartRule() for a complete explanation. - * @param savingsEndDayOfWeek The daylight savings ending day-of-week. - * See setStartRule() for a complete explanation. - * @param savingsEndTime The daylight savings ending time, expressed as the - * number of milliseconds after midnight. - * @param status An UErrorCode to receive the status. - * @stable ICU 2.0 - */ - SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID, - int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth, - int8_t savingsStartDayOfWeek, int32_t savingsStartTime, - int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth, - int8_t savingsEndDayOfWeek, int32_t savingsEndTime, - UErrorCode& status); - /** - * Construct a SimpleTimeZone with the given raw GMT offset, time zone ID, - * and times to start and end daylight savings time. To create a TimeZone that - * doesn't observe daylight savings time, don't use this constructor; use - * SimpleTimeZone(rawOffset, ID) instead. Normally, you should use - * TimeZone.createInstance() to create a TimeZone instead of creating a - * SimpleTimeZone directly with this constructor. - *

- * Various types of daylight-savings time rules can be specfied by using different - * values for startDay and startDayOfWeek and endDay and endDayOfWeek. For a - * complete explanation of how these parameters work, see the documentation for - * setStartRule(). - * - * @param rawOffsetGMT The new SimpleTimeZone's raw GMT offset - * @param ID The new SimpleTimeZone's time zone ID. - * @param savingsStartMonth The daylight savings starting month. Month is - * 0-based. eg, 0 for January. - * @param savingsStartDayOfWeekInMonth The daylight savings starting - * day-of-week-in-month. See setStartRule() for a - * complete explanation. - * @param savingsStartDayOfWeek The daylight savings starting day-of-week. - * See setStartRule() for a complete explanation. - * @param savingsStartTime The daylight savings starting time, expressed as the - * number of milliseconds after midnight. - * @param savingsEndMonth The daylight savings ending month. Month is - * 0-based. eg, 0 for January. - * @param savingsEndDayOfWeekInMonth The daylight savings ending day-of-week-in-month. - * See setStartRule() for a complete explanation. - * @param savingsEndDayOfWeek The daylight savings ending day-of-week. - * See setStartRule() for a complete explanation. - * @param savingsEndTime The daylight savings ending time, expressed as the - * number of milliseconds after midnight. - * @param savingsDST The number of milliseconds added to standard time - * to get DST time. Default is one hour. - * @param status An UErrorCode to receive the status. - * @stable ICU 2.0 - */ - SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID, - int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth, - int8_t savingsStartDayOfWeek, int32_t savingsStartTime, - int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth, - int8_t savingsEndDayOfWeek, int32_t savingsEndTime, - int32_t savingsDST, UErrorCode& status); - - /** - * Construct a SimpleTimeZone with the given raw GMT offset, time zone ID, - * and times to start and end daylight savings time. To create a TimeZone that - * doesn't observe daylight savings time, don't use this constructor; use - * SimpleTimeZone(rawOffset, ID) instead. Normally, you should use - * TimeZone.createInstance() to create a TimeZone instead of creating a - * SimpleTimeZone directly with this constructor. - *

- * Various types of daylight-savings time rules can be specfied by using different - * values for startDay and startDayOfWeek and endDay and endDayOfWeek. For a - * complete explanation of how these parameters work, see the documentation for - * setStartRule(). - * - * @param rawOffsetGMT The new SimpleTimeZone's raw GMT offset - * @param ID The new SimpleTimeZone's time zone ID. - * @param savingsStartMonth The daylight savings starting month. Month is - * 0-based. eg, 0 for January. - * @param savingsStartDayOfWeekInMonth The daylight savings starting - * day-of-week-in-month. See setStartRule() for a - * complete explanation. - * @param savingsStartDayOfWeek The daylight savings starting day-of-week. - * See setStartRule() for a complete explanation. - * @param savingsStartTime The daylight savings starting time, expressed as the - * number of milliseconds after midnight. - * @param savingsStartTimeMode Whether the start time is local wall time, local - * standard time, or UTC time. Default is local wall time. - * @param savingsEndMonth The daylight savings ending month. Month is - * 0-based. eg, 0 for January. - * @param savingsEndDayOfWeekInMonth The daylight savings ending day-of-week-in-month. - * See setStartRule() for a complete explanation. - * @param savingsEndDayOfWeek The daylight savings ending day-of-week. - * See setStartRule() for a complete explanation. - * @param savingsEndTime The daylight savings ending time, expressed as the - * number of milliseconds after midnight. - * @param savingsEndTimeMode Whether the end time is local wall time, local - * standard time, or UTC time. Default is local wall time. - * @param savingsDST The number of milliseconds added to standard time - * to get DST time. Default is one hour. - * @param status An UErrorCode to receive the status. - * @stable ICU 2.0 - */ - SimpleTimeZone(int32_t rawOffsetGMT, const UnicodeString& ID, - int8_t savingsStartMonth, int8_t savingsStartDayOfWeekInMonth, - int8_t savingsStartDayOfWeek, int32_t savingsStartTime, - TimeMode savingsStartTimeMode, - int8_t savingsEndMonth, int8_t savingsEndDayOfWeekInMonth, - int8_t savingsEndDayOfWeek, int32_t savingsEndTime, TimeMode savingsEndTimeMode, - int32_t savingsDST, UErrorCode& status); - - /** - * Sets the daylight savings starting year, that is, the year this time zone began - * observing its specified daylight savings time rules. The time zone is considered - * not to observe daylight savings time prior to that year; SimpleTimeZone doesn't - * support historical daylight-savings-time rules. - * @param year the daylight savings starting year. - * @stable ICU 2.0 - */ - void setStartYear(int32_t year); - - /** - * Sets the daylight savings starting rule. For example, in the U.S., Daylight Savings - * Time starts at the second Sunday in March, at 2 AM in standard time. - * Therefore, you can set the start rule by calling: - * setStartRule(UCAL_MARCH, 2, UCAL_SUNDAY, 2*60*60*1000); - * The dayOfWeekInMonth and dayOfWeek parameters together specify how to calculate - * the exact starting date. Their exact meaning depend on their respective signs, - * allowing various types of rules to be constructed, as follows: - *

    - *
  • If both dayOfWeekInMonth and dayOfWeek are positive, they specify the - * day of week in the month (e.g., (2, WEDNESDAY) is the second Wednesday - * of the month).
  • - *
  • If dayOfWeek is positive and dayOfWeekInMonth is negative, they specify - * the day of week in the month counting backward from the end of the month. - * (e.g., (-1, MONDAY) is the last Monday in the month)
  • - *
  • If dayOfWeek is zero and dayOfWeekInMonth is positive, dayOfWeekInMonth - * specifies the day of the month, regardless of what day of the week it is. - * (e.g., (10, 0) is the tenth day of the month)
  • - *
  • If dayOfWeek is zero and dayOfWeekInMonth is negative, dayOfWeekInMonth - * specifies the day of the month counting backward from the end of the - * month, regardless of what day of the week it is (e.g., (-2, 0) is the - * next-to-last day of the month).
  • - *
  • If dayOfWeek is negative and dayOfWeekInMonth is positive, they specify the - * first specified day of the week on or after the specfied day of the month. - * (e.g., (15, -SUNDAY) is the first Sunday after the 15th of the month - * [or the 15th itself if the 15th is a Sunday].)
  • - *
  • If dayOfWeek and DayOfWeekInMonth are both negative, they specify the - * last specified day of the week on or before the specified day of the month. - * (e.g., (-20, -TUESDAY) is the last Tuesday before the 20th of the month - * [or the 20th itself if the 20th is a Tuesday].)
  • - *
- * @param month the daylight savings starting month. Month is 0-based. - * eg, 0 for January. - * @param dayOfWeekInMonth the daylight savings starting - * day-of-week-in-month. Please see the member description for an example. - * @param dayOfWeek the daylight savings starting day-of-week. Please see - * the member description for an example. - * @param time the daylight savings starting time. Please see the member - * description for an example. - * @param status An UErrorCode - * @stable ICU 2.0 - */ - void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, - int32_t time, UErrorCode& status); - /** - * Sets the daylight savings starting rule. For example, in the U.S., Daylight Savings - * Time starts at the second Sunday in March, at 2 AM in standard time. - * Therefore, you can set the start rule by calling: - * setStartRule(UCAL_MARCH, 2, UCAL_SUNDAY, 2*60*60*1000); - * The dayOfWeekInMonth and dayOfWeek parameters together specify how to calculate - * the exact starting date. Their exact meaning depend on their respective signs, - * allowing various types of rules to be constructed, as follows: - *
    - *
  • If both dayOfWeekInMonth and dayOfWeek are positive, they specify the - * day of week in the month (e.g., (2, WEDNESDAY) is the second Wednesday - * of the month).
  • - *
  • If dayOfWeek is positive and dayOfWeekInMonth is negative, they specify - * the day of week in the month counting backward from the end of the month. - * (e.g., (-1, MONDAY) is the last Monday in the month)
  • - *
  • If dayOfWeek is zero and dayOfWeekInMonth is positive, dayOfWeekInMonth - * specifies the day of the month, regardless of what day of the week it is. - * (e.g., (10, 0) is the tenth day of the month)
  • - *
  • If dayOfWeek is zero and dayOfWeekInMonth is negative, dayOfWeekInMonth - * specifies the day of the month counting backward from the end of the - * month, regardless of what day of the week it is (e.g., (-2, 0) is the - * next-to-last day of the month).
  • - *
  • If dayOfWeek is negative and dayOfWeekInMonth is positive, they specify the - * first specified day of the week on or after the specfied day of the month. - * (e.g., (15, -SUNDAY) is the first Sunday after the 15th of the month - * [or the 15th itself if the 15th is a Sunday].)
  • - *
  • If dayOfWeek and DayOfWeekInMonth are both negative, they specify the - * last specified day of the week on or before the specified day of the month. - * (e.g., (-20, -TUESDAY) is the last Tuesday before the 20th of the month - * [or the 20th itself if the 20th is a Tuesday].)
  • - *
- * @param month the daylight savings starting month. Month is 0-based. - * eg, 0 for January. - * @param dayOfWeekInMonth the daylight savings starting - * day-of-week-in-month. Please see the member description for an example. - * @param dayOfWeek the daylight savings starting day-of-week. Please see - * the member description for an example. - * @param time the daylight savings starting time. Please see the member - * description for an example. - * @param mode whether the time is local wall time, local standard time, - * or UTC time. Default is local wall time. - * @param status An UErrorCode - * @stable ICU 2.0 - */ - void setStartRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, - int32_t time, TimeMode mode, UErrorCode& status); - - /** - * Sets the DST start rule to a fixed date within a month. - * - * @param month The month in which this rule occurs (0-based). - * @param dayOfMonth The date in that month (1-based). - * @param time The time of that day (number of millis after midnight) - * when DST takes effect in local wall time, which is - * standard time in this case. - * @param status An UErrorCode - * @stable ICU 2.0 - */ - void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time, - UErrorCode& status); - /** - * Sets the DST start rule to a fixed date within a month. - * - * @param month The month in which this rule occurs (0-based). - * @param dayOfMonth The date in that month (1-based). - * @param time The time of that day (number of millis after midnight) - * when DST takes effect in local wall time, which is - * standard time in this case. - * @param mode whether the time is local wall time, local standard time, - * or UTC time. Default is local wall time. - * @param status An UErrorCode - * @stable ICU 2.0 - */ - void setStartRule(int32_t month, int32_t dayOfMonth, int32_t time, - TimeMode mode, UErrorCode& status); - - /** - * Sets the DST start rule to a weekday before or after a give date within - * a month, e.g., the first Monday on or after the 8th. - * - * @param month The month in which this rule occurs (0-based). - * @param dayOfMonth A date within that month (1-based). - * @param dayOfWeek The day of the week on which this rule occurs. - * @param time The time of that day (number of millis after midnight) - * when DST takes effect in local wall time, which is - * standard time in this case. - * @param after If true, this rule selects the first dayOfWeek on - * or after dayOfMonth. If false, this rule selects - * the last dayOfWeek on or before dayOfMonth. - * @param status An UErrorCode - * @stable ICU 2.0 - */ - void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, - int32_t time, UBool after, UErrorCode& status); - /** - * Sets the DST start rule to a weekday before or after a give date within - * a month, e.g., the first Monday on or after the 8th. - * - * @param month The month in which this rule occurs (0-based). - * @param dayOfMonth A date within that month (1-based). - * @param dayOfWeek The day of the week on which this rule occurs. - * @param time The time of that day (number of millis after midnight) - * when DST takes effect in local wall time, which is - * standard time in this case. - * @param mode whether the time is local wall time, local standard time, - * or UTC time. Default is local wall time. - * @param after If true, this rule selects the first dayOfWeek on - * or after dayOfMonth. If false, this rule selects - * the last dayOfWeek on or before dayOfMonth. - * @param status An UErrorCode - * @stable ICU 2.0 - */ - void setStartRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, - int32_t time, TimeMode mode, UBool after, UErrorCode& status); - - /** - * Sets the daylight savings ending rule. For example, if Daylight - * Savings Time ends at the last (-1) Sunday in October, at 2 AM in standard time. - * Therefore, you can set the end rule by calling: - *
-     *    setEndRule(UCAL_OCTOBER, -1, UCAL_SUNDAY, 2*60*60*1000);
-     * 
- * Various other types of rules can be specified by manipulating the dayOfWeek - * and dayOfWeekInMonth parameters. For complete details, see the documentation - * for setStartRule(). - * - * @param month the daylight savings ending month. Month is 0-based. - * eg, 0 for January. - * @param dayOfWeekInMonth the daylight savings ending - * day-of-week-in-month. See setStartRule() for a complete explanation. - * @param dayOfWeek the daylight savings ending day-of-week. See setStartRule() - * for a complete explanation. - * @param time the daylight savings ending time. Please see the member - * description for an example. - * @param status An UErrorCode - * @stable ICU 2.0 - */ - void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, - int32_t time, UErrorCode& status); - - /** - * Sets the daylight savings ending rule. For example, if Daylight - * Savings Time ends at the last (-1) Sunday in October, at 2 AM in standard time. - * Therefore, you can set the end rule by calling: - *
-     *    setEndRule(UCAL_OCTOBER, -1, UCAL_SUNDAY, 2*60*60*1000);
-     * 
- * Various other types of rules can be specified by manipulating the dayOfWeek - * and dayOfWeekInMonth parameters. For complete details, see the documentation - * for setStartRule(). - * - * @param month the daylight savings ending month. Month is 0-based. - * eg, 0 for January. - * @param dayOfWeekInMonth the daylight savings ending - * day-of-week-in-month. See setStartRule() for a complete explanation. - * @param dayOfWeek the daylight savings ending day-of-week. See setStartRule() - * for a complete explanation. - * @param time the daylight savings ending time. Please see the member - * description for an example. - * @param mode whether the time is local wall time, local standard time, - * or UTC time. Default is local wall time. - * @param status An UErrorCode - * @stable ICU 2.0 - */ - void setEndRule(int32_t month, int32_t dayOfWeekInMonth, int32_t dayOfWeek, - int32_t time, TimeMode mode, UErrorCode& status); - - /** - * Sets the DST end rule to a fixed date within a month. - * - * @param month The month in which this rule occurs (0-based). - * @param dayOfMonth The date in that month (1-based). - * @param time The time of that day (number of millis after midnight) - * when DST ends in local wall time, which is daylight - * time in this case. - * @param status An UErrorCode - * @stable ICU 2.0 - */ - void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, UErrorCode& status); - - /** - * Sets the DST end rule to a fixed date within a month. - * - * @param month The month in which this rule occurs (0-based). - * @param dayOfMonth The date in that month (1-based). - * @param time The time of that day (number of millis after midnight) - * when DST ends in local wall time, which is daylight - * time in this case. - * @param mode whether the time is local wall time, local standard time, - * or UTC time. Default is local wall time. - * @param status An UErrorCode - * @stable ICU 2.0 - */ - void setEndRule(int32_t month, int32_t dayOfMonth, int32_t time, - TimeMode mode, UErrorCode& status); - - /** - * Sets the DST end rule to a weekday before or after a give date within - * a month, e.g., the first Monday on or after the 8th. - * - * @param month The month in which this rule occurs (0-based). - * @param dayOfMonth A date within that month (1-based). - * @param dayOfWeek The day of the week on which this rule occurs. - * @param time The time of that day (number of millis after midnight) - * when DST ends in local wall time, which is daylight - * time in this case. - * @param after If true, this rule selects the first dayOfWeek on - * or after dayOfMonth. If false, this rule selects - * the last dayOfWeek on or before dayOfMonth. - * @param status An UErrorCode - * @stable ICU 2.0 - */ - void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, - int32_t time, UBool after, UErrorCode& status); - - /** - * Sets the DST end rule to a weekday before or after a give date within - * a month, e.g., the first Monday on or after the 8th. - * - * @param month The month in which this rule occurs (0-based). - * @param dayOfMonth A date within that month (1-based). - * @param dayOfWeek The day of the week on which this rule occurs. - * @param time The time of that day (number of millis after midnight) - * when DST ends in local wall time, which is daylight - * time in this case. - * @param mode whether the time is local wall time, local standard time, - * or UTC time. Default is local wall time. - * @param after If true, this rule selects the first dayOfWeek on - * or after dayOfMonth. If false, this rule selects - * the last dayOfWeek on or before dayOfMonth. - * @param status An UErrorCode - * @stable ICU 2.0 - */ - void setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, - int32_t time, TimeMode mode, UBool after, UErrorCode& status); - - /** - * Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add - * to GMT to get local time in this time zone, taking daylight savings time into - * account) as of a particular reference date. The reference date is used to determine - * whether daylight savings time is in effect and needs to be figured into the offset - * that is returned (in other words, what is the adjusted GMT offset in this time zone - * at this particular date and time?). For the time zones produced by createTimeZone(), - * the reference data is specified according to the Gregorian calendar, and the date - * and time fields are in GMT, NOT local time. - * - * @param era The reference date's era - * @param year The reference date's year - * @param month The reference date's month (0-based; 0 is January) - * @param day The reference date's day-in-month (1-based) - * @param dayOfWeek The reference date's day-of-week (1-based; 1 is Sunday) - * @param millis The reference date's milliseconds in day, UTT (NOT local time). - * @param status An UErrorCode to receive the status. - * @return The offset in milliseconds to add to GMT to get local time. - * @stable ICU 2.0 - */ - virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, - uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const; - - /** - * Gets the time zone offset, for current date, modified in case of - * daylight savings. This is the offset to add *to* UTC to get local time. - * @param era the era of the given date. - * @param year the year in the given date. - * @param month the month in the given date. - * Month is 0-based. e.g., 0 for January. - * @param day the day-in-month of the given date. - * @param dayOfWeek the day-of-week of the given date. - * @param milliseconds the millis in day in standard local time. - * @param monthLength the length of the given month in days. - * @param status An UErrorCode to receive the status. - * @return the offset to add *to* GMT to get local time. - * @stable ICU 2.0 - */ - virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, - uint8_t dayOfWeek, int32_t milliseconds, - int32_t monthLength, UErrorCode& status) const; - /** - * Gets the time zone offset, for current date, modified in case of - * daylight savings. This is the offset to add *to* UTC to get local time. - * @param era the era of the given date. - * @param year the year in the given date. - * @param month the month in the given date. - * Month is 0-based. e.g., 0 for January. - * @param day the day-in-month of the given date. - * @param dayOfWeek the day-of-week of the given date. - * @param milliseconds the millis in day in standard local time. - * @param monthLength the length of the given month in days. - * @param prevMonthLength length of the previous month in days. - * @param status An UErrorCode to receive the status. - * @return the offset to add *to* GMT to get local time. - * @stable ICU 2.0 - */ - virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, - uint8_t dayOfWeek, int32_t milliseconds, - int32_t monthLength, int32_t prevMonthLength, - UErrorCode& status) const; - - /** - * Redeclared TimeZone method. This implementation simply calls - * the base class method, which otherwise would be hidden. - * @stable ICU 2.8 - */ - virtual void getOffset(UDate date, UBool local, int32_t& rawOffset, - int32_t& dstOffset, UErrorCode& ec) const; - - /** - * Get time zone offsets from local wall time. - * @internal - */ - virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt, - int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const; - - /** - * Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add - * to GMT to get local time, before taking daylight savings time into account). - * - * @return The TimeZone's raw GMT offset. - * @stable ICU 2.0 - */ - virtual int32_t getRawOffset(void) const; - - /** - * Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add - * to GMT to get local time, before taking daylight savings time into account). - * - * @param offsetMillis The new raw GMT offset for this time zone. - * @stable ICU 2.0 - */ - virtual void setRawOffset(int32_t offsetMillis); - - /** - * Sets the amount of time in ms that the clock is advanced during DST. - * @param millisSavedDuringDST the number of milliseconds the time is - * advanced with respect to standard time when the daylight savings rules - * are in effect. Typically one hour (+3600000). The amount could be negative, - * but not 0. - * @param status An UErrorCode to receive the status. - * @stable ICU 2.0 - */ - void setDSTSavings(int32_t millisSavedDuringDST, UErrorCode& status); - - /** - * Returns the amount of time in ms that the clock is advanced during DST. - * @return the number of milliseconds the time is - * advanced with respect to standard time when the daylight savings rules - * are in effect. Typically one hour (+3600000). The amount could be negative, - * but not 0. - * @stable ICU 2.0 - */ - virtual int32_t getDSTSavings(void) const; - - /** - * Queries if this TimeZone uses Daylight Savings Time. - * - * @return True if this TimeZone uses Daylight Savings Time; false otherwise. - * @stable ICU 2.0 - */ - virtual UBool useDaylightTime(void) const; - - /** - * Returns true if the given date is within the period when daylight savings time - * is in effect; false otherwise. If the TimeZone doesn't observe daylight savings - * time, this functions always returns false. - * This method is wasteful since it creates a new GregorianCalendar and - * deletes it each time it is called. This is a deprecated method - * and provided only for Java compatibility. - * - * @param date The date to test. - * @param status An UErrorCode to receive the status. - * @return true if the given date is in Daylight Savings Time; - * false otherwise. - * @deprecated ICU 2.4. Use Calendar::inDaylightTime() instead. - */ - virtual UBool inDaylightTime(UDate date, UErrorCode& status) const; - - /** - * Return true if this zone has the same rules and offset as another zone. - * @param other the TimeZone object to be compared with - * @return true if the given zone has the same rules and offset as this one - * @stable ICU 2.0 - */ - UBool hasSameRules(const TimeZone& other) const; - - /** - * Clones TimeZone objects polymorphically. Clients are responsible for deleting - * the TimeZone object cloned. - * - * @return A new copy of this TimeZone object. - * @stable ICU 2.0 - */ - virtual TimeZone* clone(void) const; - - /** - * Gets the first time zone transition after the base time. - * @param base The base time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives the first transition after the base time. - * @return TRUE if the transition is found. - * @stable ICU 3.8 - */ - virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; - - /** - * Gets the most recent time zone transition before the base time. - * @param base The base time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives the most recent transition before the base time. - * @return TRUE if the transition is found. - * @stable ICU 3.8 - */ - virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; - - /** - * Returns the number of TimeZoneRules which represents time transitions, - * for this time zone, that is, all TimeZoneRules for this time zone except - * InitialTimeZoneRule. The return value range is 0 or any positive value. - * @param status Receives error status code. - * @return The number of TimeZoneRules representing time transitions. - * @stable ICU 3.8 - */ - virtual int32_t countTransitionRules(UErrorCode& status) const; - - /** - * Gets the InitialTimeZoneRule and the set of TimeZoneRule - * which represent time transitions for this time zone. On successful return, - * the argument initial points to non-NULL InitialTimeZoneRule and - * the array trsrules is filled with 0 or multiple TimeZoneRule - * instances up to the size specified by trscount. The results are referencing the - * rule instance held by this time zone instance. Therefore, after this time zone - * is destructed, they are no longer available. - * @param initial Receives the initial timezone rule - * @param trsrules Receives the timezone transition rules - * @param trscount On input, specify the size of the array 'transitions' receiving - * the timezone transition rules. On output, actual number of - * rules filled in the array will be set. - * @param status Receives error status code. - * @stable ICU 3.8 - */ - virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial, - const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const; - - -public: - - /** - * Override TimeZone Returns a unique class ID POLYMORPHICALLY. Pure virtual - * override. This method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() methods call - * this method. - * - * @return The class ID for this object. All objects of a given class have the - * same class ID. Objects of other classes have different class IDs. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const; - - /** - * Return the class ID for this class. This is useful only for comparing to a return - * value from getDynamicClassID(). For example: - *
-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       Derived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - -private: - /** - * Constants specifying values of startMode and endMode. - */ - enum EMode - { - DOM_MODE = 1, - DOW_IN_MONTH_MODE, - DOW_GE_DOM_MODE, - DOW_LE_DOM_MODE - }; - - SimpleTimeZone(); // default constructor not implemented - - /** - * Internal construction method. - * @param rawOffsetGMT The new SimpleTimeZone's raw GMT offset - * @param startMonth the month DST starts - * @param startDay the day DST starts - * @param startDayOfWeek the DOW DST starts - * @param startTime the time DST starts - * @param startTimeMode Whether the start time is local wall time, local - * standard time, or UTC time. Default is local wall time. - * @param endMonth the month DST ends - * @param endDay the day DST ends - * @param endDayOfWeek the DOW DST ends - * @param endTime the time DST ends - * @param endTimeMode Whether the end time is local wall time, local - * standard time, or UTC time. Default is local wall time. - * @param dstSavings The number of milliseconds added to standard time - * to get DST time. Default is one hour. - * @param status An UErrorCode to receive the status. - */ - void construct(int32_t rawOffsetGMT, - int8_t startMonth, int8_t startDay, int8_t startDayOfWeek, - int32_t startTime, TimeMode startTimeMode, - int8_t endMonth, int8_t endDay, int8_t endDayOfWeek, - int32_t endTime, TimeMode endTimeMode, - int32_t dstSavings, UErrorCode& status); - - /** - * Compare a given date in the year to a rule. Return 1, 0, or -1, depending - * on whether the date is after, equal to, or before the rule date. The - * millis are compared directly against the ruleMillis, so any - * standard-daylight adjustments must be handled by the caller. - * - * @return 1 if the date is after the rule date, -1 if the date is before - * the rule date, or 0 if the date is equal to the rule date. - */ - static int32_t compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen, - int8_t dayOfMonth, - int8_t dayOfWeek, int32_t millis, int32_t millisDelta, - EMode ruleMode, int8_t ruleMonth, int8_t ruleDayOfWeek, - int8_t ruleDay, int32_t ruleMillis); - - /** - * Given a set of encoded rules in startDay and startDayOfMonth, decode - * them and set the startMode appropriately. Do the same for endDay and - * endDayOfMonth. - *

- * Upon entry, the day of week variables may be zero or - * negative, in order to indicate special modes. The day of month - * variables may also be negative. - *

- * Upon exit, the mode variables will be - * set, and the day of week and day of month variables will be positive. - *

- * This method also recognizes a startDay or endDay of zero as indicating - * no DST. - */ - void decodeRules(UErrorCode& status); - void decodeStartRule(UErrorCode& status); - void decodeEndRule(UErrorCode& status); - - int8_t startMonth, startDay, startDayOfWeek; // the month, day, DOW, and time DST starts - int32_t startTime; - TimeMode startTimeMode, endTimeMode; // Mode for startTime, endTime; see TimeMode - int8_t endMonth, endDay, endDayOfWeek; // the month, day, DOW, and time DST ends - int32_t endTime; - int32_t startYear; // the year these DST rules took effect - int32_t rawOffset; // the TimeZone's raw GMT offset - UBool useDaylight; // flag indicating whether this TimeZone uses DST - static const int8_t STATICMONTHLENGTH[12]; // lengths of the months - EMode startMode, endMode; // flags indicating what kind of rules the DST rules are - - /** - * A positive value indicating the amount of time saved during DST in ms. - * Typically one hour; sometimes 30 minutes. - */ - int32_t dstSavings; - - /* Private for BasicTimeZone implementation */ - void checkTransitionRules(UErrorCode& status) const; - void initTransitionRules(UErrorCode& status); - void clearTransitionRules(void); - void deleteTransitionRules(void); - UBool transitionRulesInitialized; - InitialTimeZoneRule* initialRule; - TimeZoneTransition* firstTransition; - AnnualTimeZoneRule* stdRule; - AnnualTimeZoneRule* dstRule; -}; - -inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfWeekInMonth, - int32_t dayOfWeek, - int32_t time, UErrorCode& status) { - setStartRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status); -} - -inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth, - int32_t time, - UErrorCode& status) { - setStartRule(month, dayOfMonth, time, WALL_TIME, status); -} - -inline void SimpleTimeZone::setStartRule(int32_t month, int32_t dayOfMonth, - int32_t dayOfWeek, - int32_t time, UBool after, UErrorCode& status) { - setStartRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status); -} - -inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfWeekInMonth, - int32_t dayOfWeek, - int32_t time, UErrorCode& status) { - setEndRule(month, dayOfWeekInMonth, dayOfWeek, time, WALL_TIME, status); -} - -inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, - int32_t time, UErrorCode& status) { - setEndRule(month, dayOfMonth, time, WALL_TIME, status); -} - -inline void SimpleTimeZone::setEndRule(int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, - int32_t time, UBool after, UErrorCode& status) { - setEndRule(month, dayOfMonth, dayOfWeek, time, WALL_TIME, after, status); -} - -inline void -SimpleTimeZone::getOffset(UDate date, UBool local, int32_t& rawOffsetRef, - int32_t& dstOffsetRef, UErrorCode& ec) const { - TimeZone::getOffset(date, local, rawOffsetRef, dstOffsetRef, ec); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _SIMPLETZ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/smpdtfmt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/smpdtfmt.h deleted file mode 100644 index 6aa58eef6b..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/smpdtfmt.h +++ /dev/null @@ -1,1680 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -* Copyright (C) 1997-2016, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************************* -* -* File SMPDTFMT.H -* -* Modification History: -* -* Date Name Description -* 02/19/97 aliu Converted from java. -* 07/09/97 helena Make ParsePosition into a class. -* 07/21/98 stephen Added GMT_PLUS, GMT_MINUS -* Changed setTwoDigitStartDate to set2DigitYearStart -* Changed getTwoDigitStartDate to get2DigitYearStart -* Removed subParseLong -* Removed getZoneIndex (added in DateFormatSymbols) -* 06/14/99 stephen Removed fgTimeZoneDataSuffix -* 10/14/99 aliu Updated class doc to describe 2-digit year parsing -* {j28 4182066}. -******************************************************************************* -*/ - -#ifndef SMPDTFMT_H -#define SMPDTFMT_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Format and parse dates in a language-independent manner. - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/datefmt.h" -#include "unicode/udisplaycontext.h" -#include "unicode/tzfmt.h" /* for UTimeZoneFormatTimeType */ -#include "unicode/brkiter.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class DateFormatSymbols; -class DateFormat; -class MessageFormat; -class FieldPositionHandler; -class TimeZoneFormat; -class SharedNumberFormat; -class SimpleDateFormatMutableNFs; -class DateIntervalFormat; - -namespace number { -class LocalizedNumberFormatter; -} - -/** - * - * SimpleDateFormat is a concrete class for formatting and parsing dates in a - * language-independent manner. It allows for formatting (millis -> text), - * parsing (text -> millis), and normalization. Formats/Parses a date or time, - * which is the standard milliseconds since 24:00 GMT, Jan 1, 1970. - *

- * Clients are encouraged to create a date-time formatter using DateFormat::getInstance(), - * getDateInstance(), getDateInstance(), or getDateTimeInstance() rather than - * explicitly constructing an instance of SimpleDateFormat. This way, the client - * is guaranteed to get an appropriate formatting pattern for whatever locale the - * program is running in. However, if the client needs something more unusual than - * the default patterns in the locales, he can construct a SimpleDateFormat directly - * and give it an appropriate pattern (or use one of the factory methods on DateFormat - * and modify the pattern after the fact with toPattern() and applyPattern(). - * - *

Date and Time Patterns:

- * - *

Date and time formats are specified by date and time pattern strings. - * Within date and time pattern strings, all unquoted ASCII letters [A-Za-z] are reserved - * as pattern letters representing calendar fields. SimpleDateFormat supports - * the date and time formatting algorithm and pattern letters defined by - * UTS#35 - * Unicode Locale Data Markup Language (LDML) and further documented for ICU in the - * ICU - * User Guide. The following pattern letters are currently available (note that the actual - * values depend on CLDR and may change from the examples shown here):

- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
FieldSym.No.ExampleDescription
eraG1..3ADEra - Replaced with the Era string for the current date. One to three letters for the - * abbreviated form, four letters for the long (wide) form, five for the narrow form.
4Anno Domini
5A
yeary1..n1996Year. Normally the length specifies the padding, but for two letters it also specifies the maximum - * length. Example:
- *
- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
Yearyyyyyyyyyyyyyyy
AD 1101001000100001
AD 121212012001200012
AD 12312323123012300123
AD 12341234341234123401234
AD 123451234545123451234512345
- *
- *
Y1..n1997Year (in "Week of Year" based calendars). Normally the length specifies the padding, - * but for two letters it also specifies the maximum length. This year designation is used in ISO - * year-week calendar as defined by ISO 8601, but can be used in non-Gregorian based calendar systems - * where week date processing is desired. May not always be the same value as calendar year.
u1..n4601Extended year. This is a single number designating the year of this calendar system, encompassing - * all supra-year fields. For example, for the Julian calendar system, year numbers are positive, with an - * era of BCE or CE. An extended year value for the Julian calendar system assigns positive values to CE - * years and negative values to BCE years, with 1 BCE being year 0.
U1..3甲子Cyclic year name. Calendars such as the Chinese lunar calendar (and related calendars) - * and the Hindu calendars use 60-year cycles of year names. Use one through three letters for the abbreviated - * name, four for the full (wide) name, or five for the narrow name (currently the data only provides abbreviated names, - * which will be used for all requested name widths). If the calendar does not provide cyclic year name data, - * or if the year value to be formatted is out of the range of years for which cyclic name data is provided, - * then numeric formatting is used (behaves like 'y').
4(currently also 甲子)
5(currently also 甲子)
quarterQ1..202Quarter - Use one or two for the numerical quarter, three for the abbreviation, or four for the - * full (wide) name (five for the narrow name is not yet supported).
3Q2
42nd quarter
q1..202Stand-Alone Quarter - Use one or two for the numerical quarter, three for the abbreviation, - * or four for the full name (five for the narrow name is not yet supported).
3Q2
42nd quarter
monthM1..209Month - Use one or two for the numerical month, three for the abbreviation, four for - * the full (wide) name, or five for the narrow name. With two ("MM"), the month number is zero-padded - * if necessary (e.g. "08")
3Sep
4September
5S
L1..209Stand-Alone Month - Use one or two for the numerical month, three for the abbreviation, - * four for the full (wide) name, or 5 for the narrow name. With two ("LL"), the month number is zero-padded if - * necessary (e.g. "08")
3Sep
4September
5S
weekw1..227Week of Year. Use "w" to show the minimum number of digits, or "ww" to always show two digits - * (zero-padding if necessary, e.g. "08").
W13Week of Month
dayd1..21Date - Day of the month. Use "d" to show the minimum number of digits, or "dd" to always show - * two digits (zero-padding if necessary, e.g. "08").
D1..3345Day of year
F12Day of Week in Month. The example is for the 2nd Wed in July
g1..n2451334Modified Julian day. This is different from the conventional Julian day number in two regards. - * First, it demarcates days at local zone midnight, rather than noon GMT. Second, it is a local number; - * that is, it depends on the local time zone. It can be thought of as a single number that encompasses - * all the date-related fields.
week
- * day
E1..3TueDay of week - Use one through three letters for the short day, four for the full (wide) name, - * five for the narrow name, or six for the short name.
4Tuesday
5T
6Tu
e1..22Local day of week. Same as E except adds a numeric value that will depend on the local - * starting day of the week, using one or two letters. For this example, Monday is the first day of the week.
3Tue
4Tuesday
5T
6Tu
c12Stand-Alone local day of week - Use one letter for the local numeric value (same - * as 'e'), three for the short day, four for the full (wide) name, five for the narrow name, or six for - * the short name.
3Tue
4Tuesday
5T
6Tu
perioda1AMAM or PM
hourh1..211Hour [1-12]. When used in skeleton data or in a skeleton passed in an API for flexible data pattern - * generation, it should match the 12-hour-cycle format preferred by the locale (h or K); it should not match - * a 24-hour-cycle format (H or k). Use hh for zero padding.
H1..213Hour [0-23]. When used in skeleton data or in a skeleton passed in an API for flexible data pattern - * generation, it should match the 24-hour-cycle format preferred by the locale (H or k); it should not match a - * 12-hour-cycle format (h or K). Use HH for zero padding.
K1..20Hour [0-11]. When used in a skeleton, only matches K or h, see above. Use KK for zero padding.
k1..224Hour [1-24]. When used in a skeleton, only matches k or H, see above. Use kk for zero padding.
minutem1..259Minute. Use "m" to show the minimum number of digits, or "mm" to always show two digits - * (zero-padding if necessary, e.g. "08").
seconds1..212Second. Use "s" to show the minimum number of digits, or "ss" to always show two digits - * (zero-padding if necessary, e.g. "08").
S1..n3450Fractional Second - truncates (like other time fields) to the count of letters when formatting. - * Appends zeros if more than 3 letters specified. Truncates at three significant digits when parsing. - * (example shows display using pattern SSSS for seconds value 12.34567)
A1..n69540000Milliseconds in day. This field behaves exactly like a composite of all time-related fields, - * not including the zone fields. As such, it also reflects discontinuities of those fields on DST transition - * days. On a day of DST onset, it will jump forward. On a day of DST cessation, it will jump backward. This - * reflects the fact that is must be combined with the offset field to obtain a unique local time value.
zonez1..3PDTThe short specific non-location format. - * Where that is unavailable, falls back to the short localized GMT format ("O").
4Pacific Daylight TimeThe long specific non-location format. - * Where that is unavailable, falls back to the long localized GMT format ("OOOO").
Z1..3-0800The ISO8601 basic format with hours, minutes and optional seconds fields. - * The format is equivalent to RFC 822 zone format (when optional seconds field is absent). - * This is equivalent to the "xxxx" specifier.
4GMT-8:00The long localized GMT format. - * This is equivalent to the "OOOO" specifier.
5-08:00
- * -07:52:58
The ISO8601 extended format with hours, minutes and optional seconds fields. - * The ISO8601 UTC indicator "Z" is used when local time offset is 0. - * This is equivalent to the "XXXXX" specifier.
O1GMT-8The short localized GMT format.
4GMT-08:00The long localized GMT format.
v1PTThe short generic non-location format. - * Where that is unavailable, falls back to the generic location format ("VVVV"), - * then the short localized GMT format as the final fallback.
4Pacific TimeThe long generic non-location format. - * Where that is unavailable, falls back to generic location format ("VVVV"). - *
V1uslaxThe short time zone ID. - * Where that is unavailable, the special short time zone ID unk (Unknown Zone) is used.
- * Note: This specifier was originally used for a variant of the short specific non-location format, - * but it was deprecated in the later version of the LDML specification. In CLDR 23/ICU 51, the definition of - * the specifier was changed to designate a short time zone ID.
2America/Los_AngelesThe long time zone ID.
3Los AngelesThe exemplar city (location) for the time zone. - * Where that is unavailable, the localized exemplar city name for the special zone Etc/Unknown is used - * as the fallback (for example, "Unknown City").
4Los Angeles TimeThe generic location format. - * Where that is unavailable, falls back to the long localized GMT format ("OOOO"; - * Note: Fallback is only necessary with a GMT-style Time Zone ID, like Etc/GMT-830.)
- * This is especially useful when presenting possible timezone choices for user selection, - * since the naming is more uniform than the "v" format.
X1-08
- * +0530
- * Z
The ISO8601 basic format with hours field and optional minutes field. - * The ISO8601 UTC indicator "Z" is used when local time offset is 0.
2-0800
- * Z
The ISO8601 basic format with hours and minutes fields. - * The ISO8601 UTC indicator "Z" is used when local time offset is 0.
3-08:00
- * Z
The ISO8601 extended format with hours and minutes fields. - * The ISO8601 UTC indicator "Z" is used when local time offset is 0.
4-0800
- * -075258
- * Z
The ISO8601 basic format with hours, minutes and optional seconds fields. - * (Note: The seconds field is not supported by the ISO8601 specification.) - * The ISO8601 UTC indicator "Z" is used when local time offset is 0.
5-08:00
- * -07:52:58
- * Z
The ISO8601 extended format with hours, minutes and optional seconds fields. - * (Note: The seconds field is not supported by the ISO8601 specification.) - * The ISO8601 UTC indicator "Z" is used when local time offset is 0.
x1-08
- * +0530
The ISO8601 basic format with hours field and optional minutes field.
2-0800The ISO8601 basic format with hours and minutes fields.
3-08:00The ISO8601 extended format with hours and minutes fields.
4-0800
- * -075258
The ISO8601 basic format with hours, minutes and optional seconds fields. - * (Note: The seconds field is not supported by the ISO8601 specification.)
5-08:00
- * -07:52:58
The ISO8601 extended format with hours, minutes and optional seconds fields. - * (Note: The seconds field is not supported by the ISO8601 specification.)
- * - *

- * Any characters in the pattern that are not in the ranges of ['a'..'z'] and - * ['A'..'Z'] will be treated as quoted text. For instance, characters - * like ':', '.', ' ', '#' and '@' will appear in the resulting time text - * even they are not embraced within single quotes. - *

- * A pattern containing any invalid pattern letter will result in a failing - * UErrorCode result during formatting or parsing. - *

- * Examples using the US locale: - *

- * \code
- *    Format Pattern                         Result
- *    --------------                         -------
- *    "yyyy.MM.dd G 'at' HH:mm:ss vvvv" ->>  1996.07.10 AD at 15:08:56 Pacific Time
- *    "EEE, MMM d, ''yy"                ->>  Wed, July 10, '96
- *    "h:mm a"                          ->>  12:08 PM
- *    "hh 'o''clock' a, zzzz"           ->>  12 o'clock PM, Pacific Daylight Time
- *    "K:mm a, vvv"                     ->>  0:00 PM, PT
- *    "yyyyy.MMMMM.dd GGG hh:mm aaa"    ->>  1996.July.10 AD 12:08 PM
- * \endcode
- * 
- * Code Sample: - *
- * \code
- *     UErrorCode success = U_ZERO_ERROR;
- *     SimpleTimeZone* pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, "PST");
- *     pdt->setStartRule( Calendar::APRIL, 1, Calendar::SUNDAY, 2*60*60*1000);
- *     pdt->setEndRule( Calendar::OCTOBER, -1, Calendar::SUNDAY, 2*60*60*1000);
- *
- *     // Format the current time.
- *     SimpleDateFormat* formatter
- *         = new SimpleDateFormat ("yyyy.MM.dd G 'at' hh:mm:ss a zzz", success );
- *     GregorianCalendar cal(success);
- *     UDate currentTime_1 = cal.getTime(success);
- *     FieldPosition fp(FieldPosition::DONT_CARE);
- *     UnicodeString dateString;
- *     formatter->format( currentTime_1, dateString, fp );
- *     cout << "result: " << dateString << endl;
- *
- *     // Parse the previous string back into a Date.
- *     ParsePosition pp(0);
- *     UDate currentTime_2 = formatter->parse(dateString, pp );
- * \endcode
- * 
- * In the above example, the time value "currentTime_2" obtained from parsing - * will be equal to currentTime_1. However, they may not be equal if the am/pm - * marker 'a' is left out from the format pattern while the "hour in am/pm" - * pattern symbol is used. This information loss can happen when formatting the - * time in PM. - * - *

- * When parsing a date string using the abbreviated year pattern ("y" or "yy"), - * SimpleDateFormat must interpret the abbreviated year - * relative to some century. It does this by adjusting dates to be - * within 80 years before and 20 years after the time the SimpleDateFormat - * instance is created. For example, using a pattern of "MM/dd/yy" and a - * SimpleDateFormat instance created on Jan 1, 1997, the string - * "01/11/12" would be interpreted as Jan 11, 2012 while the string "05/04/64" - * would be interpreted as May 4, 1964. - * During parsing, only strings consisting of exactly two digits, as defined by - * Unicode::isDigit(), will be parsed into the default century. - * Any other numeric string, such as a one digit string, a three or more digit - * string, or a two digit string that isn't all digits (for example, "-1"), is - * interpreted literally. So "01/02/3" or "01/02/003" are parsed (for the - * Gregorian calendar), using the same pattern, as Jan 2, 3 AD. Likewise (but - * only in lenient parse mode, the default) "01/02/-3" is parsed as Jan 2, 4 BC. - * - *

- * If the year pattern has more than two 'y' characters, the year is - * interpreted literally, regardless of the number of digits. So using the - * pattern "MM/dd/yyyy", "01/11/12" parses to Jan 11, 12 A.D. - * - *

- * When numeric fields abut one another directly, with no intervening delimiter - * characters, they constitute a run of abutting numeric fields. Such runs are - * parsed specially. For example, the format "HHmmss" parses the input text - * "123456" to 12:34:56, parses the input text "12345" to 1:23:45, and fails to - * parse "1234". In other words, the leftmost field of the run is flexible, - * while the others keep a fixed width. If the parse fails anywhere in the run, - * then the leftmost field is shortened by one character, and the entire run is - * parsed again. This is repeated until either the parse succeeds or the - * leftmost field is one character in length. If the parse still fails at that - * point, the parse of the run fails. - * - *

- * For time zones that have no names, SimpleDateFormat uses strings GMT+hours:minutes or - * GMT-hours:minutes. - *

- * The calendar defines what is the first day of the week, the first week of the - * year, whether hours are zero based or not (0 vs 12 or 24), and the timezone. - * There is one common number format to handle all the numbers; the digit count - * is handled programmatically according to the pattern. - * - *

User subclasses are not supported. While clients may write - * subclasses, such code will not necessarily work and will not be - * guaranteed to work stably from release to release. - */ -class U_I18N_API SimpleDateFormat: public DateFormat { -public: - /** - * Construct a SimpleDateFormat using the default pattern for the default - * locale. - *

- * [Note:] Not all locales support SimpleDateFormat; for full generality, - * use the factory methods in the DateFormat class. - * @param status Output param set to success/failure code. - * @stable ICU 2.0 - */ - SimpleDateFormat(UErrorCode& status); - - /** - * Construct a SimpleDateFormat using the given pattern and the default locale. - * The locale is used to obtain the symbols used in formatting (e.g., the - * names of the months), but not to provide the pattern. - *

- * [Note:] Not all locales support SimpleDateFormat; for full generality, - * use the factory methods in the DateFormat class. - * @param pattern the pattern for the format. - * @param status Output param set to success/failure code. - * @stable ICU 2.0 - */ - SimpleDateFormat(const UnicodeString& pattern, - UErrorCode& status); - - /** - * Construct a SimpleDateFormat using the given pattern, numbering system override, and the default locale. - * The locale is used to obtain the symbols used in formatting (e.g., the - * names of the months), but not to provide the pattern. - *

- * A numbering system override is a string containing either the name of a known numbering system, - * or a set of field and numbering system pairs that specify which fields are to be formattied with - * the alternate numbering system. For example, to specify that all numeric fields in the specified - * date or time pattern are to be rendered using Thai digits, simply specify the numbering system override - * as "thai". To specify that just the year portion of the date be formatted using Hebrew numbering, - * use the override string "y=hebrew". Numbering system overrides can be combined using a semi-colon - * character in the override string, such as "d=decimal;M=arabic;y=hebrew", etc. - * - *

- * [Note:] Not all locales support SimpleDateFormat; for full generality, - * use the factory methods in the DateFormat class. - * @param pattern the pattern for the format. - * @param override the override string. - * @param status Output param set to success/failure code. - * @stable ICU 4.2 - */ - SimpleDateFormat(const UnicodeString& pattern, - const UnicodeString& override, - UErrorCode& status); - - /** - * Construct a SimpleDateFormat using the given pattern and locale. - * The locale is used to obtain the symbols used in formatting (e.g., the - * names of the months), but not to provide the pattern. - *

- * [Note:] Not all locales support SimpleDateFormat; for full generality, - * use the factory methods in the DateFormat class. - * @param pattern the pattern for the format. - * @param locale the given locale. - * @param status Output param set to success/failure code. - * @stable ICU 2.0 - */ - SimpleDateFormat(const UnicodeString& pattern, - const Locale& locale, - UErrorCode& status); - - /** - * Construct a SimpleDateFormat using the given pattern, numbering system override, and locale. - * The locale is used to obtain the symbols used in formatting (e.g., the - * names of the months), but not to provide the pattern. - *

- * A numbering system override is a string containing either the name of a known numbering system, - * or a set of field and numbering system pairs that specify which fields are to be formattied with - * the alternate numbering system. For example, to specify that all numeric fields in the specified - * date or time pattern are to be rendered using Thai digits, simply specify the numbering system override - * as "thai". To specify that just the year portion of the date be formatted using Hebrew numbering, - * use the override string "y=hebrew". Numbering system overrides can be combined using a semi-colon - * character in the override string, such as "d=decimal;M=arabic;y=hebrew", etc. - *

- * [Note:] Not all locales support SimpleDateFormat; for full generality, - * use the factory methods in the DateFormat class. - * @param pattern the pattern for the format. - * @param override the numbering system override. - * @param locale the given locale. - * @param status Output param set to success/failure code. - * @stable ICU 4.2 - */ - SimpleDateFormat(const UnicodeString& pattern, - const UnicodeString& override, - const Locale& locale, - UErrorCode& status); - - /** - * Construct a SimpleDateFormat using the given pattern and locale-specific - * symbol data. The formatter takes ownership of the DateFormatSymbols object; - * the caller is no longer responsible for deleting it. - * @param pattern the given pattern for the format. - * @param formatDataToAdopt the symbols to be adopted. - * @param status Output param set to success/faulure code. - * @stable ICU 2.0 - */ - SimpleDateFormat(const UnicodeString& pattern, - DateFormatSymbols* formatDataToAdopt, - UErrorCode& status); - - /** - * Construct a SimpleDateFormat using the given pattern and locale-specific - * symbol data. The DateFormatSymbols object is NOT adopted; the caller - * remains responsible for deleting it. - * @param pattern the given pattern for the format. - * @param formatData the formatting symbols to be use. - * @param status Output param set to success/faulure code. - * @stable ICU 2.0 - */ - SimpleDateFormat(const UnicodeString& pattern, - const DateFormatSymbols& formatData, - UErrorCode& status); - - /** - * Copy constructor. - * @stable ICU 2.0 - */ - SimpleDateFormat(const SimpleDateFormat&); - - /** - * Assignment operator. - * @stable ICU 2.0 - */ - SimpleDateFormat& operator=(const SimpleDateFormat&); - - /** - * Destructor. - * @stable ICU 2.0 - */ - virtual ~SimpleDateFormat(); - - /** - * Clone this Format object polymorphically. The caller owns the result and - * should delete it when done. - * @return A copy of the object. - * @stable ICU 2.0 - */ - virtual Format* clone(void) const; - - /** - * Return true if the given Format objects are semantically equal. Objects - * of different subclasses are considered unequal. - * @param other the object to be compared with. - * @return true if the given Format objects are semantically equal. - * @stable ICU 2.0 - */ - virtual UBool operator==(const Format& other) const; - - - using DateFormat::format; - - /** - * Format a date or time, which is the standard millis since 24:00 GMT, Jan - * 1, 1970. Overrides DateFormat pure virtual method. - *

- * Example: using the US locale: "yyyy.MM.dd e 'at' HH:mm:ss zzz" ->> - * 1996.07.10 AD at 15:08:56 PDT - * - * @param cal Calendar set to the date and time to be formatted - * into a date/time string. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param pos The formatting position. On input: an alignment field, - * if desired. On output: the offsets of the alignment field. - * @return Reference to 'appendTo' parameter. - * @stable ICU 2.1 - */ - virtual UnicodeString& format( Calendar& cal, - UnicodeString& appendTo, - FieldPosition& pos) const; - - /** - * Format a date or time, which is the standard millis since 24:00 GMT, Jan - * 1, 1970. Overrides DateFormat pure virtual method. - *

- * Example: using the US locale: "yyyy.MM.dd e 'at' HH:mm:ss zzz" ->> - * 1996.07.10 AD at 15:08:56 PDT - * - * @param cal Calendar set to the date and time to be formatted - * into a date/time string. - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param posIter On return, can be used to iterate over positions - * of fields generated by this format call. Field values - * are defined in UDateFormatField. - * @param status Input/output param set to success/failure code. - * @return Reference to 'appendTo' parameter. - * @stable ICU 4.4 - */ - virtual UnicodeString& format( Calendar& cal, - UnicodeString& appendTo, - FieldPositionIterator* posIter, - UErrorCode& status) const; - - using DateFormat::parse; - - /** - * Parse a date/time string beginning at the given parse position. For - * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date - * that is equivalent to Date(837039928046). - *

- * By default, parsing is lenient: If the input is not in the form used by - * this object's format method but can still be parsed as a date, then the - * parse succeeds. Clients may insist on strict adherence to the format by - * calling setLenient(false). - * @see DateFormat::setLenient(boolean) - * - * @param text The date/time string to be parsed - * @param cal A Calendar set on input to the date and time to be used for - * missing values in the date/time string being parsed, and set - * on output to the parsed date/time. When the calendar type is - * different from the internal calendar held by this SimpleDateFormat - * instance, the internal calendar will be cloned to a work - * calendar set to the same milliseconds and time zone as the - * cal parameter, field values will be parsed based on the work - * calendar, then the result (milliseconds and time zone) will - * be set in this calendar. - * @param pos On input, the position at which to start parsing; on - * output, the position at which parsing terminated, or the - * start position if the parse failed. - * @stable ICU 2.1 - */ - virtual void parse( const UnicodeString& text, - Calendar& cal, - ParsePosition& pos) const; - - - /** - * Set the start UDate used to interpret two-digit year strings. - * When dates are parsed having 2-digit year strings, they are placed within - * a assumed range of 100 years starting on the two digit start date. For - * example, the string "24-Jan-17" may be in the year 1817, 1917, 2017, or - * some other year. SimpleDateFormat chooses a year so that the resultant - * date is on or after the two digit start date and within 100 years of the - * two digit start date. - *

- * By default, the two digit start date is set to 80 years before the current - * time at which a SimpleDateFormat object is created. - * @param d start UDate used to interpret two-digit year strings. - * @param status Filled in with U_ZERO_ERROR if the parse was successful, and with - * an error value if there was a parse error. - * @stable ICU 2.0 - */ - virtual void set2DigitYearStart(UDate d, UErrorCode& status); - - /** - * Get the start UDate used to interpret two-digit year strings. - * When dates are parsed having 2-digit year strings, they are placed within - * a assumed range of 100 years starting on the two digit start date. For - * example, the string "24-Jan-17" may be in the year 1817, 1917, 2017, or - * some other year. SimpleDateFormat chooses a year so that the resultant - * date is on or after the two digit start date and within 100 years of the - * two digit start date. - *

- * By default, the two digit start date is set to 80 years before the current - * time at which a SimpleDateFormat object is created. - * @param status Filled in with U_ZERO_ERROR if the parse was successful, and with - * an error value if there was a parse error. - * @stable ICU 2.0 - */ - UDate get2DigitYearStart(UErrorCode& status) const; - - /** - * Return a pattern string describing this date format. - * @param result Output param to receive the pattern. - * @return A reference to 'result'. - * @stable ICU 2.0 - */ - virtual UnicodeString& toPattern(UnicodeString& result) const; - - /** - * Return a localized pattern string describing this date format. - * In most cases, this will return the same thing as toPattern(), - * but a locale can specify characters to use in pattern descriptions - * in place of the ones described in this class's class documentation. - * (Presumably, letters that would be more mnemonic in that locale's - * language.) This function would produce a pattern using those - * letters. - *

- * Note: This implementation depends on DateFormatSymbols::getLocalPatternChars() - * to get localized format pattern characters. ICU does not include - * localized pattern character data, therefore, unless user sets localized - * pattern characters manually, this method returns the same result as - * toPattern(). - * - * @param result Receives the localized pattern. - * @param status Output param set to success/failure code on - * exit. If the pattern is invalid, this will be - * set to a failure result. - * @return A reference to 'result'. - * @stable ICU 2.0 - */ - virtual UnicodeString& toLocalizedPattern(UnicodeString& result, - UErrorCode& status) const; - - /** - * Apply the given unlocalized pattern string to this date format. - * (i.e., after this call, this formatter will format dates according to - * the new pattern) - * - * @param pattern The pattern to be applied. - * @stable ICU 2.0 - */ - virtual void applyPattern(const UnicodeString& pattern); - - /** - * Apply the given localized pattern string to this date format. - * (see toLocalizedPattern() for more information on localized patterns.) - * - * @param pattern The localized pattern to be applied. - * @param status Output param set to success/failure code on - * exit. If the pattern is invalid, this will be - * set to a failure result. - * @stable ICU 2.0 - */ - virtual void applyLocalizedPattern(const UnicodeString& pattern, - UErrorCode& status); - - /** - * Gets the date/time formatting symbols (this is an object carrying - * the various strings and other symbols used in formatting: e.g., month - * names and abbreviations, time zone names, AM/PM strings, etc.) - * @return a copy of the date-time formatting data associated - * with this date-time formatter. - * @stable ICU 2.0 - */ - virtual const DateFormatSymbols* getDateFormatSymbols(void) const; - - /** - * Set the date/time formatting symbols. The caller no longer owns the - * DateFormatSymbols object and should not delete it after making this call. - * @param newFormatSymbols the given date-time formatting symbols to copy. - * @stable ICU 2.0 - */ - virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols); - - /** - * Set the date/time formatting data. - * @param newFormatSymbols the given date-time formatting symbols to copy. - * @stable ICU 2.0 - */ - virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols); - - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *

-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const; - - /** - * Set the calendar to be used by this date format. Initially, the default - * calendar for the specified or default locale is used. The caller should - * not delete the Calendar object after it is adopted by this call. - * Adopting a new calendar will change to the default symbols. - * - * @param calendarToAdopt Calendar object to be adopted. - * @stable ICU 2.0 - */ - virtual void adoptCalendar(Calendar* calendarToAdopt); - - /* Cannot use #ifndef U_HIDE_INTERNAL_API for the following methods since they are virtual */ - /** - * Sets the TimeZoneFormat to be used by this date/time formatter. - * The caller should not delete the TimeZoneFormat object after - * it is adopted by this call. - * @param timeZoneFormatToAdopt The TimeZoneFormat object to be adopted. - * @internal ICU 49 technology preview - */ - virtual void adoptTimeZoneFormat(TimeZoneFormat* timeZoneFormatToAdopt); - - /** - * Sets the TimeZoneFormat to be used by this date/time formatter. - * @param newTimeZoneFormat The TimeZoneFormat object to copy. - * @internal ICU 49 technology preview - */ - virtual void setTimeZoneFormat(const TimeZoneFormat& newTimeZoneFormat); - - /** - * Gets the time zone format object associated with this date/time formatter. - * @return the time zone format associated with this date/time formatter. - * @internal ICU 49 technology preview - */ - virtual const TimeZoneFormat* getTimeZoneFormat(void) const; - - /** - * Set a particular UDisplayContext value in the formatter, such as - * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. Note: For getContext, see - * DateFormat. - * @param value The UDisplayContext value to set. - * @param status Input/output status. If at entry this indicates a failure - * status, the function will do nothing; otherwise this will be - * updated with any new status from the function. - * @stable ICU 53 - */ - virtual void setContext(UDisplayContext value, UErrorCode& status); - - /** - * Overrides base class method and - * This method clears per field NumberFormat instances - * previously set by {@see adoptNumberFormat(const UnicodeString&, NumberFormat*, UErrorCode)} - * @param formatToAdopt the NumbeferFormat used - * @stable ICU 54 - */ - void adoptNumberFormat(NumberFormat *formatToAdopt); - - /** - * Allow the user to set the NumberFormat for several fields - * It can be a single field like: "y"(year) or "M"(month) - * It can be several field combined together: "yM"(year and month) - * Note: - * 1 symbol field is enough for multiple symbol field (so "y" will override "yy", "yyy") - * If the field is not numeric, then override has no effect (like "MMM" will use abbreviation, not numerical field) - * Per field NumberFormat can also be cleared in {@see DateFormat::setNumberFormat(const NumberFormat& newNumberFormat)} - * - * @param fields the fields to override(like y) - * @param formatToAdopt the NumbeferFormat used - * @param status Receives a status code, which will be U_ZERO_ERROR - * if the operation succeeds. - * @stable ICU 54 - */ - void adoptNumberFormat(const UnicodeString& fields, NumberFormat *formatToAdopt, UErrorCode &status); - - /** - * Get the numbering system to be used for a particular field. - * @param field The UDateFormatField to get - * @stable ICU 54 - */ - const NumberFormat * getNumberFormatForField(char16_t field) const; - -#ifndef U_HIDE_INTERNAL_API - /** - * This is for ICU internal use only. Please do not use. - * Check whether the 'field' is smaller than all the fields covered in - * pattern, return TRUE if it is. The sequence of calendar field, - * from large to small is: ERA, YEAR, MONTH, DATE, AM_PM, HOUR, MINUTE,... - * @param field the calendar field need to check against - * @return TRUE if the 'field' is smaller than all the fields - * covered in pattern. FALSE otherwise. - * @internal ICU 4.0 - */ - UBool isFieldUnitIgnored(UCalendarDateFields field) const; - - - /** - * This is for ICU internal use only. Please do not use. - * Check whether the 'field' is smaller than all the fields covered in - * pattern, return TRUE if it is. The sequence of calendar field, - * from large to small is: ERA, YEAR, MONTH, DATE, AM_PM, HOUR, MINUTE,... - * @param pattern the pattern to check against - * @param field the calendar field need to check against - * @return TRUE if the 'field' is smaller than all the fields - * covered in pattern. FALSE otherwise. - * @internal ICU 4.0 - */ - static UBool isFieldUnitIgnored(const UnicodeString& pattern, - UCalendarDateFields field); - - /** - * This is for ICU internal use only. Please do not use. - * Get the locale of this simple date formatter. - * It is used in DateIntervalFormat. - * - * @return locale in this simple date formatter - * @internal ICU 4.0 - */ - const Locale& getSmpFmtLocale(void) const; - - /** - * Apple addition - * This is for ICU internal use only. Please do not use. - * Get the capitalization break iterator of this simple date formatter. - * Should be cloned before using it. - * It is used in udat. - * - * @return capitalization break iterator - * @internal - */ - BreakIterator* getCapitalizationBrkIter(void) const; -#endif /* U_HIDE_INTERNAL_API */ - -private: - friend class DateFormat; - friend class DateIntervalFormat; - - void initializeDefaultCentury(void); - - void initializeBooleanAttributes(void); - - SimpleDateFormat(); // default constructor not implemented - - /** - * Used by the DateFormat factory methods to construct a SimpleDateFormat. - * @param timeStyle the time style. - * @param dateStyle the date style. - * @param locale the given locale. - * @param status Output param set to success/failure code on - * exit. - */ - SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status); - - /** - * Construct a SimpleDateFormat for the given locale. If no resource data - * is available, create an object of last resort, using hard-coded strings. - * This is an internal method, called by DateFormat. It should never fail. - * @param locale the given locale. - * @param status Output param set to success/failure code on - * exit. - */ - SimpleDateFormat(const Locale& locale, UErrorCode& status); // Use default pattern - - /** - * Hook called by format(... FieldPosition& ...) and format(...FieldPositionIterator&...) - */ - UnicodeString& _format(Calendar& cal, UnicodeString& appendTo, FieldPositionHandler& handler, UErrorCode& status) const; - - /** - * Called by format() to format a single field. - * - * @param appendTo Output parameter to receive result. - * Result is appended to existing contents. - * @param ch The format character we encountered in the pattern. - * @param count Number of characters in the current pattern symbol (e.g., - * "yyyy" in the pattern would result in a call to this function - * with ch equal to 'y' and count equal to 4) - * @param capitalizationContext Capitalization context for this date format. - * @param fieldNum Zero-based numbering of current field within the overall format. - * @param handler Records information about field positions. - * @param cal Calendar to use - * @param status Receives a status code, which will be U_ZERO_ERROR if the operation - * succeeds. - */ - void subFormat(UnicodeString &appendTo, - char16_t ch, - int32_t count, - UDisplayContext capitalizationContext, - int32_t fieldNum, - FieldPositionHandler& handler, - Calendar& cal, - UErrorCode& status) const; // in case of illegal argument - - /** - * Used by subFormat() to format a numeric value. - * Appends to toAppendTo a string representation of "value" - * having a number of digits between "minDigits" and - * "maxDigits". Uses the DateFormat's NumberFormat. - * - * @param currentNumberFormat - * @param appendTo Output parameter to receive result. - * Formatted number is appended to existing contents. - * @param value Value to format. - * @param minDigits Minimum number of digits the result should have - * @param maxDigits Maximum number of digits the result should have - */ - void zeroPaddingNumber(const NumberFormat *currentNumberFormat, - UnicodeString &appendTo, - int32_t value, - int32_t minDigits, - int32_t maxDigits) const; - - /** - * Return true if the given format character, occuring count - * times, represents a numeric field. - */ - static UBool isNumeric(char16_t formatChar, int32_t count); - - /** - * Returns TRUE if the patternOffset is at the start of a numeric field. - */ - static UBool isAtNumericField(const UnicodeString &pattern, int32_t patternOffset); - - /** - * Returns TRUE if the patternOffset is right after a non-numeric field. - */ - static UBool isAfterNonNumericField(const UnicodeString &pattern, int32_t patternOffset); - - /** - * initializes fCalendar from parameters. Returns fCalendar as a convenience. - * @param adoptZone Zone to be adopted, or NULL for TimeZone::createDefault(). - * @param locale Locale of the calendar - * @param status Error code - * @return the newly constructed fCalendar - */ - Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status); - - /** - * Called by several of the constructors to load pattern data and formatting symbols - * out of a resource bundle and initialize the locale based on it. - * @param timeStyle The time style, as passed to DateFormat::createDateInstance(). - * @param dateStyle The date style, as passed to DateFormat::createTimeInstance(). - * @param locale The locale to load the patterns from. - * @param status Filled in with an error code if loading the data from the - * resources fails. - */ - void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status); - - /** - * Called by construct() and the various constructors to set up the SimpleDateFormat's - * Calendar and NumberFormat objects. - * @param locale The locale for which we want a Calendar and a NumberFormat. - * @param status Filled in with an error code if creating either subobject fails. - */ - void initialize(const Locale& locale, UErrorCode& status); - - /** - * Private code-size reduction function used by subParse. - * @param text the time text being parsed. - * @param start where to start parsing. - * @param field the date field being parsed. - * @param stringArray the string array to parsed. - * @param stringArrayCount the size of the array. - * @param monthPattern pointer to leap month pattern, or NULL if none. - * @param cal a Calendar set to the date and time to be formatted - * into a date/time string. - * @return the new start position if matching succeeded; a negative number - * indicating matching failure, otherwise. - */ - int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field, - const UnicodeString* stringArray, int32_t stringArrayCount, - const UnicodeString* monthPattern, Calendar& cal) const; - - /** - * Private code-size reduction function used by subParse. - * @param text the time text being parsed. - * @param start where to start parsing. - * @param field the date field being parsed. - * @param stringArray the string array to parsed. - * @param stringArrayCount the size of the array. - * @param cal a Calendar set to the date and time to be formatted - * into a date/time string. - * @return the new start position if matching succeeded; a negative number - * indicating matching failure, otherwise. - */ - int32_t matchQuarterString(const UnicodeString& text, int32_t start, UCalendarDateFields field, - const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const; - - /** - * Used by subParse() to match localized day period strings. - */ - int32_t matchDayPeriodStrings(const UnicodeString& text, int32_t start, - const UnicodeString* stringArray, int32_t stringArrayCount, - int32_t &dayPeriod) const; - - /** - * Private function used by subParse to match literal pattern text. - * - * @param pattern the pattern string - * @param patternOffset the starting offset into the pattern text. On - * outupt will be set the offset of the first non-literal character in the pattern - * @param text the text being parsed - * @param textOffset the starting offset into the text. On output - * will be set to the offset of the character after the match - * @param whitespaceLenient TRUE if whitespace parse is lenient, FALSE otherwise. - * @param partialMatchLenient TRUE if partial match parse is lenient, FALSE otherwise. - * @param oldLeniency TRUE if old leniency control is lenient, FALSE otherwise. - * - * @return TRUE if the literal text could be matched, FALSE otherwise. - */ - static UBool matchLiterals(const UnicodeString &pattern, int32_t &patternOffset, - const UnicodeString &text, int32_t &textOffset, - UBool whitespaceLenient, UBool partialMatchLenient, UBool oldLeniency); - - /** - * Private member function that converts the parsed date strings into - * timeFields. Returns -start (for ParsePosition) if failed. - * @param text the time text to be parsed. - * @param start where to start parsing. - * @param ch the pattern character for the date field text to be parsed. - * @param count the count of a pattern character. - * @param obeyCount if true then the count is strictly obeyed. - * @param allowNegative - * @param ambiguousYear If true then the two-digit year == the default start year. - * @param saveHebrewMonth Used to hang onto month until year is known. - * @param cal a Calendar set to the date and time to be formatted - * into a date/time string. - * @param patLoc - * @param numericLeapMonthFormatter If non-null, used to parse numeric leap months. - * @param tzTimeType the type of parsed time zone - standard, daylight or unknown (output). - * This parameter can be NULL if caller does not need the information. - * @return the new start position if matching succeeded; a negative number - * indicating matching failure, otherwise. - */ - int32_t subParse(const UnicodeString& text, int32_t& start, char16_t ch, int32_t count, - UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], int32_t& saveHebrewMonth, Calendar& cal, - int32_t patLoc, MessageFormat * numericLeapMonthFormatter, UTimeZoneFormatTimeType *tzTimeType, - int32_t *dayPeriod=NULL) const; - - void parseInt(const UnicodeString& text, - Formattable& number, - ParsePosition& pos, - UBool allowNegative, - const NumberFormat *fmt) const; - - void parseInt(const UnicodeString& text, - Formattable& number, - int32_t maxDigits, - ParsePosition& pos, - UBool allowNegative, - const NumberFormat *fmt) const; - - int32_t checkIntSuffix(const UnicodeString& text, int32_t start, - int32_t patLoc, UBool isNegative) const; - - /** - * Counts number of digit code points in the specified text. - * - * @param text input text - * @param start start index, inclusive - * @param end end index, exclusive - * @return number of digits found in the text in the specified range. - */ - int32_t countDigits(const UnicodeString& text, int32_t start, int32_t end) const; - - /** - * Translate a pattern, mapping each character in the from string to the - * corresponding character in the to string. Return an error if the original - * pattern contains an unmapped character, or if a quote is unmatched. - * Quoted (single quotes only) material is not translated. - * @param originalPattern the original pattern. - * @param translatedPattern Output param to receive the translited pattern. - * @param from the characters to be translited from. - * @param to the characters to be translited to. - * @param status Receives a status code, which will be U_ZERO_ERROR - * if the operation succeeds. - */ - static void translatePattern(const UnicodeString& originalPattern, - UnicodeString& translatedPattern, - const UnicodeString& from, - const UnicodeString& to, - UErrorCode& status); - - /** - * Sets the starting date of the 100-year window that dates with 2-digit years - * are considered to fall within. - * @param startDate the start date - * @param status Receives a status code, which will be U_ZERO_ERROR - * if the operation succeeds. - */ - void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status); - - /** - * Return the length matched by the given affix, or -1 if none. - * Runs of white space in the affix, match runs of white space in - * the input. - * @param affix pattern string, taken as a literal - * @param input input text - * @param pos offset into input at which to begin matching - * @return length of input that matches, or -1 if match failure - */ - int32_t compareSimpleAffix(const UnicodeString& affix, - const UnicodeString& input, - int32_t pos) const; - - /** - * Skip over a run of zero or more Pattern_White_Space characters at - * pos in text. - */ - int32_t skipPatternWhiteSpace(const UnicodeString& text, int32_t pos) const; - - /** - * Skip over a run of zero or more isUWhiteSpace() characters at pos - * in text. - */ - int32_t skipUWhiteSpace(const UnicodeString& text, int32_t pos) const; - - /** - * Initialize LocalizedNumberFormatter instances used for speedup. - */ - void initFastNumberFormatters(UErrorCode& status); - - /** - * Delete the LocalizedNumberFormatter instances used for speedup. - */ - void freeFastNumberFormatters(); - - /** - * Initialize NumberFormat instances used for numbering system overrides. - */ - void initNumberFormatters(const Locale &locale,UErrorCode &status); - - /** - * Parse the given override string and set up structures for number formats - */ - void processOverrideString(const Locale &locale, const UnicodeString &str, int8_t type, UErrorCode &status); - - /** - * Used to map pattern characters to Calendar field identifiers. - */ - static const UCalendarDateFields fgPatternIndexToCalendarField[]; - - /** - * Map index into pattern character string to DateFormat field number - */ - static const UDateFormatField fgPatternIndexToDateFormatField[]; - - /** - * Lazy TimeZoneFormat instantiation, semantically const - */ - TimeZoneFormat *tzFormat(UErrorCode &status) const; - - const NumberFormat* getNumberFormatByIndex(UDateFormatField index) const; - - /** - * Used to map Calendar field to field level. - * The larger the level, the smaller the field unit. - * For example, UCAL_ERA level is 0, UCAL_YEAR level is 10, - * UCAL_MONTH level is 20. - */ - static const int32_t fgCalendarFieldToLevel[]; - - /** - * Map calendar field letter into calendar field level. - */ - static int32_t getLevelFromChar(char16_t ch); - - /** - * Tell if a character can be used to define a field in a format string. - */ - static UBool isSyntaxChar(char16_t ch); - - /** - * The formatting pattern for this formatter. - */ - UnicodeString fPattern; - - /** - * The numbering system override for dates. - */ - UnicodeString fDateOverride; - - /** - * The numbering system override for times. - */ - UnicodeString fTimeOverride; - - - /** - * The original locale used (for reloading symbols) - */ - Locale fLocale; - - /** - * A pointer to an object containing the strings to use in formatting (e.g., - * month and day names, AM and PM strings, time zone names, etc.) - */ - DateFormatSymbols* fSymbols; // Owned - - /** - * The time zone formatter - */ - TimeZoneFormat* fTimeZoneFormat; - - /** - * If dates have ambiguous years, we map them into the century starting - * at defaultCenturyStart, which may be any date. If defaultCenturyStart is - * set to SYSTEM_DEFAULT_CENTURY, which it is by default, then the system - * values are used. The instance values defaultCenturyStart and - * defaultCenturyStartYear are only used if explicitly set by the user - * through the API method parseAmbiguousDatesAsAfter(). - */ - UDate fDefaultCenturyStart; - - UBool fHasMinute; - UBool fHasSecond; - UBool fHasHanYearChar; // pattern contains the Han year character \u5E74 - - /** - * Sets fHasMinutes and fHasSeconds. - */ - void parsePattern(); - - /** - * See documentation for defaultCenturyStart. - */ - /*transient*/ int32_t fDefaultCenturyStartYear; - - struct NSOverride : public UMemory { - const SharedNumberFormat *snf; - int32_t hash; - NSOverride *next; - void free(); - NSOverride() : snf(NULL), hash(0), next(NULL) { - } - ~NSOverride(); - }; - - /** - * The number format in use for each date field. NULL means fall back - * to fNumberFormat in DateFormat. - */ - const SharedNumberFormat **fSharedNumberFormatters; - - enum NumberFormatterKey { - SMPDTFMT_NF_1x10, - SMPDTFMT_NF_2x10, - SMPDTFMT_NF_3x10, - SMPDTFMT_NF_4x10, - SMPDTFMT_NF_2x2, - SMPDTFMT_NF_COUNT - }; - - /** - * Number formatters pre-allocated for fast performance on the most common integer lengths. - */ - const number::LocalizedNumberFormatter* fFastNumberFormatters[SMPDTFMT_NF_COUNT] = {}; - - UBool fHaveDefaultCentury; - - BreakIterator* fCapitalizationBrkIter; -}; - -inline UDate -SimpleDateFormat::get2DigitYearStart(UErrorCode& /*status*/) const -{ - return fDefaultCenturyStart; -} - -inline BreakIterator* -SimpleDateFormat::getCapitalizationBrkIter() const -{ - return fCapitalizationBrkIter; -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // _SMPDTFMT -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/sortkey.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/sortkey.h deleted file mode 100644 index 5ac1fe1172..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/sortkey.h +++ /dev/null @@ -1,342 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ***************************************************************************** - * Copyright (C) 1996-2014, International Business Machines Corporation and others. - * All Rights Reserved. - ***************************************************************************** - * - * File sortkey.h - * - * Created by: Helena Shih - * - * Modification History: - * - * Date Name Description - * - * 6/20/97 helena Java class name change. - * 8/18/97 helena Added internal API documentation. - * 6/26/98 erm Changed to use byte arrays and memcmp. - ***************************************************************************** - */ - -#ifndef SORTKEY_H -#define SORTKEY_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Keys for comparing strings multiple times. - */ - -#if !UCONFIG_NO_COLLATION - -#include "unicode/uobject.h" -#include "unicode/unistr.h" -#include "unicode/coll.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/* forward declaration */ -class RuleBasedCollator; -class CollationKeyByteSink; - -/** - * - * Collation keys are generated by the Collator class. Use the CollationKey objects - * instead of Collator to compare strings multiple times. A CollationKey - * preprocesses the comparison information from the Collator object to - * make the comparison faster. If you are not going to comparing strings - * multiple times, then using the Collator object is generally faster, - * since it only processes as much of the string as needed to make a - * comparison. - *

For example (with strength == tertiary) - *

When comparing "Abernathy" to "Baggins-Smythworthy", Collator - * only needs to process a couple of characters, while a comparison - * with CollationKeys will process all of the characters. On the other hand, - * if you are doing a sort of a number of fields, it is much faster to use - * CollationKeys, since you will be comparing strings multiple times. - *

Typical use of CollationKeys are in databases, where you store a CollationKey - * in a hidden field, and use it for sorting or indexing. - * - *

Example of use: - *

- * \code
- *     UErrorCode success = U_ZERO_ERROR;
- *     Collator* myCollator = Collator::createInstance(success);
- *     CollationKey* keys = new CollationKey [3];
- *     myCollator->getCollationKey("Tom", keys[0], success );
- *     myCollator->getCollationKey("Dick", keys[1], success );
- *     myCollator->getCollationKey("Harry", keys[2], success );
- *
- *     // Inside body of sort routine, compare keys this way:
- *     CollationKey tmp;
- *     if(keys[0].compareTo( keys[1] ) > 0 ) {
- *         tmp = keys[0]; keys[0] = keys[1]; keys[1] = tmp;
- *     }
- *     //...
- * \endcode
- * 
- *

Because Collator::compare()'s algorithm is complex, it is faster to sort - * long lists of words by retrieving collation keys with Collator::getCollationKey(). - * You can then cache the collation keys and compare them using CollationKey::compareTo(). - *

- * Note: Collators with different Locale, - * CollationStrength and DecompositionMode settings will return different - * CollationKeys for the same set of strings. Locales have specific - * collation rules, and the way in which secondary and tertiary differences - * are taken into account, for example, will result in different CollationKeys - * for same strings. - *

- - * @see Collator - * @see RuleBasedCollator - * @version 1.3 12/18/96 - * @author Helena Shih - * @stable ICU 2.0 - */ -class U_I18N_API CollationKey : public UObject { -public: - /** - * This creates an empty collation key based on the null string. An empty - * collation key contains no sorting information. When comparing two empty - * collation keys, the result is Collator::EQUAL. Comparing empty collation key - * with non-empty collation key is always Collator::LESS. - * @stable ICU 2.0 - */ - CollationKey(); - - - /** - * Creates a collation key based on the collation key values. - * @param values the collation key values - * @param count number of collation key values, including trailing nulls. - * @stable ICU 2.0 - */ - CollationKey(const uint8_t* values, - int32_t count); - - /** - * Copy constructor. - * @param other the object to be copied. - * @stable ICU 2.0 - */ - CollationKey(const CollationKey& other); - - /** - * Sort key destructor. - * @stable ICU 2.0 - */ - virtual ~CollationKey(); - - /** - * Assignment operator - * @param other the object to be copied. - * @stable ICU 2.0 - */ - const CollationKey& operator=(const CollationKey& other); - - /** - * Compare if two collation keys are the same. - * @param source the collation key to compare to. - * @return Returns true if two collation keys are equal, false otherwise. - * @stable ICU 2.0 - */ - UBool operator==(const CollationKey& source) const; - - /** - * Compare if two collation keys are not the same. - * @param source the collation key to compare to. - * @return Returns TRUE if two collation keys are different, FALSE otherwise. - * @stable ICU 2.0 - */ - UBool operator!=(const CollationKey& source) const; - - - /** - * Test to see if the key is in an invalid state. The key will be in an - * invalid state if it couldn't allocate memory for some operation. - * @return Returns TRUE if the key is in an invalid, FALSE otherwise. - * @stable ICU 2.0 - */ - UBool isBogus(void) const; - - /** - * Returns a pointer to the collation key values. The storage is owned - * by the collation key and the pointer will become invalid if the key - * is deleted. - * @param count the output parameter of number of collation key values, - * including any trailing nulls. - * @return a pointer to the collation key values. - * @stable ICU 2.0 - */ - const uint8_t* getByteArray(int32_t& count) const; - -#ifdef U_USE_COLLATION_KEY_DEPRECATES - /** - * Extracts the collation key values into a new array. The caller owns - * this storage and should free it. - * @param count the output parameter of number of collation key values, - * including any trailing nulls. - * @obsolete ICU 2.6. Use getByteArray instead since this API will be removed in that release. - */ - uint8_t* toByteArray(int32_t& count) const; -#endif - -#ifndef U_HIDE_DEPRECATED_API - /** - * Convenience method which does a string(bit-wise) comparison of the - * two collation keys. - * @param target target collation key to be compared with - * @return Returns Collator::LESS if sourceKey < targetKey, - * Collator::GREATER if sourceKey > targetKey and Collator::EQUAL - * otherwise. - * @deprecated ICU 2.6 use the overload with error code - */ - Collator::EComparisonResult compareTo(const CollationKey& target) const; -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Convenience method which does a string(bit-wise) comparison of the - * two collation keys. - * @param target target collation key to be compared with - * @param status error code - * @return Returns UCOL_LESS if sourceKey < targetKey, - * UCOL_GREATER if sourceKey > targetKey and UCOL_EQUAL - * otherwise. - * @stable ICU 2.6 - */ - UCollationResult compareTo(const CollationKey& target, UErrorCode &status) const; - - /** - * Creates an integer that is unique to the collation key. NOTE: this - * is not the same as String.hashCode. - *

Example of use: - *

-    * .    UErrorCode status = U_ZERO_ERROR;
-    * .    Collator *myCollation = Collator::createInstance(Locale::US, status);
-    * .    if (U_FAILURE(status)) return;
-    * .    CollationKey key1, key2;
-    * .    UErrorCode status1 = U_ZERO_ERROR, status2 = U_ZERO_ERROR;
-    * .    myCollation->getCollationKey("abc", key1, status1);
-    * .    if (U_FAILURE(status1)) { delete myCollation; return; }
-    * .    myCollation->getCollationKey("ABC", key2, status2);
-    * .    if (U_FAILURE(status2)) { delete myCollation; return; }
-    * .    // key1.hashCode() != key2.hashCode()
-    * 
- * @return the hash value based on the string's collation order. - * @see UnicodeString#hashCode - * @stable ICU 2.0 - */ - int32_t hashCode(void) const; - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * @stable ICU 2.2 - */ - virtual UClassID getDynamicClassID() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * @stable ICU 2.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - -private: - /** - * Replaces the current bytes buffer with a new one of newCapacity - * and copies length bytes from the old buffer to the new one. - * @return the new buffer, or NULL if the allocation failed - */ - uint8_t *reallocate(int32_t newCapacity, int32_t length); - /** - * Set a new length for a new sort key in the existing fBytes. - */ - void setLength(int32_t newLength); - - uint8_t *getBytes() { - return (fFlagAndLength >= 0) ? fUnion.fStackBuffer : fUnion.fFields.fBytes; - } - const uint8_t *getBytes() const { - return (fFlagAndLength >= 0) ? fUnion.fStackBuffer : fUnion.fFields.fBytes; - } - int32_t getCapacity() const { - return (fFlagAndLength >= 0) ? (int32_t)sizeof(fUnion) : fUnion.fFields.fCapacity; - } - int32_t getLength() const { return fFlagAndLength & 0x7fffffff; } - - /** - * Set the CollationKey to a "bogus" or invalid state - * @return this CollationKey - */ - CollationKey& setToBogus(void); - /** - * Resets this CollationKey to an empty state - * @return this CollationKey - */ - CollationKey& reset(void); - - /** - * Allow private access to RuleBasedCollator - */ - friend class RuleBasedCollator; - friend class CollationKeyByteSink; - - // Class fields. sizeof(CollationKey) is intended to be 48 bytes - // on a machine with 64-bit pointers. - // We use a union to maximize the size of the internal buffer, - // similar to UnicodeString but not as tight and complex. - - // (implicit) *vtable; - /** - * Sort key length and flag. - * Bit 31 is set if the buffer is heap-allocated. - * Bits 30..0 contain the sort key length. - */ - int32_t fFlagAndLength; - /** - * Unique hash value of this CollationKey. - * Special value 2 if the key is bogus. - */ - mutable int32_t fHashCode; - /** - * fUnion provides 32 bytes for the internal buffer or for - * pointer+capacity. - */ - union StackBufferOrFields { - /** fStackBuffer is used iff fFlagAndLength>=0, else fFields is used */ - uint8_t fStackBuffer[32]; - struct { - uint8_t *fBytes; - int32_t fCapacity; - } fFields; - } fUnion; -}; - -inline UBool -CollationKey::operator!=(const CollationKey& other) const -{ - return !(*this == other); -} - -inline UBool -CollationKey::isBogus() const -{ - return fHashCode == 2; // kBogusHashCode -} - -inline const uint8_t* -CollationKey::getByteArray(int32_t &count) const -{ - count = getLength(); - return getBytes(); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_COLLATION */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/std_string.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/std_string.h deleted file mode 100644 index 729c563995..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/std_string.h +++ /dev/null @@ -1,37 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2009-2014, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: std_string.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2009feb19 -* created by: Markus W. Scherer -*/ - -#ifndef __STD_STRING_H__ -#define __STD_STRING_H__ - -/** - * \file - * \brief C++ API: Central ICU header for including the C++ standard <string> - * header and for related definitions. - */ - -#include "unicode/utypes.h" - -// Workaround for a libstdc++ bug before libstdc++4.6 (2011). -// https://bugs.llvm.org/show_bug.cgi?id=13364 -#if defined(__GLIBCXX__) -namespace std { class type_info; } -#endif -#include - -#endif // __STD_STRING_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/strenum.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/strenum.h deleted file mode 100644 index 50dfe4f573..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/strenum.h +++ /dev/null @@ -1,280 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2002-2012, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -*/ - -#ifndef STRENUM_H -#define STRENUM_H - -#include "unicode/uobject.h" -#include "unicode/unistr.h" - -/** - * \file - * \brief C++ API: String Enumeration - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * Base class for 'pure' C++ implementations of uenum api. Adds a - * method that returns the next UnicodeString since in C++ this can - * be a common storage format for strings. - * - *

The model is that the enumeration is over strings maintained by - * a 'service.' At any point, the service might change, invalidating - * the enumerator (though this is expected to be rare). The iterator - * returns an error if this has occurred. Lack of the error is no - * guarantee that the service didn't change immediately after the - * call, so the returned string still might not be 'valid' on - * subsequent use.

- * - *

Strings may take the form of const char*, const char16_t*, or const - * UnicodeString*. The type you get is determine by the variant of - * 'next' that you call. In general the StringEnumeration is - * optimized for one of these types, but all StringEnumerations can - * return all types. Returned strings are each terminated with a NUL. - * Depending on the service data, they might also include embedded NUL - * characters, so API is provided to optionally return the true - * length, counting the embedded NULs but not counting the terminating - * NUL.

- * - *

The pointers returned by next, unext, and snext become invalid - * upon any subsequent call to the enumeration's destructor, next, - * unext, snext, or reset.

- * - * ICU 2.8 adds some default implementations and helper functions - * for subclasses. - * - * @stable ICU 2.4 - */ -class U_COMMON_API StringEnumeration : public UObject { -public: - /** - * Destructor. - * @stable ICU 2.4 - */ - virtual ~StringEnumeration(); - - /** - * Clone this object, an instance of a subclass of StringEnumeration. - * Clones can be used concurrently in multiple threads. - * If a subclass does not implement clone(), or if an error occurs, - * then NULL is returned. - * The clone functions in all subclasses return a base class pointer - * because some compilers do not support covariant (same-as-this) - * return types; cast to the appropriate subclass if necessary. - * The caller must delete the clone. - * - * @return a clone of this object - * - * @see getDynamicClassID - * @stable ICU 2.8 - */ - virtual StringEnumeration *clone() const; - - /** - *

Return the number of elements that the iterator traverses. If - * the iterator is out of sync with its service, status is set to - * U_ENUM_OUT_OF_SYNC_ERROR, and the return value is zero.

- * - *

The return value will not change except possibly as a result of - * a subsequent call to reset, or if the iterator becomes out of sync.

- * - *

This is a convenience function. It can end up being very - * expensive as all the items might have to be pre-fetched - * (depending on the storage format of the data being - * traversed).

- * - * @param status the error code. - * @return number of elements in the iterator. - * - * @stable ICU 2.4 */ - virtual int32_t count(UErrorCode& status) const = 0; - - /** - *

Returns the next element as a NUL-terminated char*. If there - * are no more elements, returns NULL. If the resultLength pointer - * is not NULL, the length of the string (not counting the - * terminating NUL) is returned at that address. If an error - * status is returned, the value at resultLength is undefined.

- * - *

The returned pointer is owned by this iterator and must not be - * deleted by the caller. The pointer is valid until the next call - * to next, unext, snext, reset, or the enumerator's destructor.

- * - *

If the iterator is out of sync with its service, status is set - * to U_ENUM_OUT_OF_SYNC_ERROR and NULL is returned.

- * - *

If the native service string is a char16_t* string, it is - * converted to char* with the invariant converter. If the - * conversion fails (because a character cannot be converted) then - * status is set to U_INVARIANT_CONVERSION_ERROR and the return - * value is undefined (though not NULL).

- * - * Starting with ICU 2.8, the default implementation calls snext() - * and handles the conversion. - * Either next() or snext() must be implemented differently by a subclass. - * - * @param status the error code. - * @param resultLength a pointer to receive the length, can be NULL. - * @return a pointer to the string, or NULL. - * - * @stable ICU 2.4 - */ - virtual const char* next(int32_t *resultLength, UErrorCode& status); - - /** - *

Returns the next element as a NUL-terminated char16_t*. If there - * are no more elements, returns NULL. If the resultLength pointer - * is not NULL, the length of the string (not counting the - * terminating NUL) is returned at that address. If an error - * status is returned, the value at resultLength is undefined.

- * - *

The returned pointer is owned by this iterator and must not be - * deleted by the caller. The pointer is valid until the next call - * to next, unext, snext, reset, or the enumerator's destructor.

- * - *

If the iterator is out of sync with its service, status is set - * to U_ENUM_OUT_OF_SYNC_ERROR and NULL is returned.

- * - * Starting with ICU 2.8, the default implementation calls snext() - * and handles the conversion. - * - * @param status the error code. - * @param resultLength a ponter to receive the length, can be NULL. - * @return a pointer to the string, or NULL. - * - * @stable ICU 2.4 - */ - virtual const char16_t* unext(int32_t *resultLength, UErrorCode& status); - - /** - *

Returns the next element a UnicodeString*. If there are no - * more elements, returns NULL.

- * - *

The returned pointer is owned by this iterator and must not be - * deleted by the caller. The pointer is valid until the next call - * to next, unext, snext, reset, or the enumerator's destructor.

- * - *

If the iterator is out of sync with its service, status is set - * to U_ENUM_OUT_OF_SYNC_ERROR and NULL is returned.

- * - * Starting with ICU 2.8, the default implementation calls next() - * and handles the conversion. - * Either next() or snext() must be implemented differently by a subclass. - * - * @param status the error code. - * @return a pointer to the string, or NULL. - * - * @stable ICU 2.4 - */ - virtual const UnicodeString* snext(UErrorCode& status); - - /** - *

Resets the iterator. This re-establishes sync with the - * service and rewinds the iterator to start at the first - * element.

- * - *

Previous pointers returned by next, unext, or snext become - * invalid, and the value returned by count might change.

- * - * @param status the error code. - * - * @stable ICU 2.4 - */ - virtual void reset(UErrorCode& status) = 0; - - /** - * Compares this enumeration to other to check if both are equal - * - * @param that The other string enumeration to compare this object to - * @return TRUE if the enumerations are equal. FALSE if not. - * @stable ICU 3.6 - */ - virtual UBool operator==(const StringEnumeration& that)const; - /** - * Compares this enumeration to other to check if both are not equal - * - * @param that The other string enumeration to compare this object to - * @return TRUE if the enumerations are equal. FALSE if not. - * @stable ICU 3.6 - */ - virtual UBool operator!=(const StringEnumeration& that)const; - -protected: - /** - * UnicodeString field for use with default implementations and subclasses. - * @stable ICU 2.8 - */ - UnicodeString unistr; - /** - * char * default buffer for use with default implementations and subclasses. - * @stable ICU 2.8 - */ - char charsBuffer[32]; - /** - * char * buffer for use with default implementations and subclasses. - * Allocated in constructor and in ensureCharsCapacity(). - * @stable ICU 2.8 - */ - char *chars; - /** - * Capacity of chars, for use with default implementations and subclasses. - * @stable ICU 2.8 - */ - int32_t charsCapacity; - - /** - * Default constructor for use with default implementations and subclasses. - * @stable ICU 2.8 - */ - StringEnumeration(); - - /** - * Ensures that chars is at least as large as the requested capacity. - * For use with default implementations and subclasses. - * - * @param capacity Requested capacity. - * @param status ICU in/out error code. - * @stable ICU 2.8 - */ - void ensureCharsCapacity(int32_t capacity, UErrorCode &status); - - /** - * Converts s to Unicode and sets unistr to the result. - * For use with default implementations and subclasses, - * especially for implementations of snext() in terms of next(). - * This is provided with a helper function instead of a default implementation - * of snext() to avoid potential infinite loops between next() and snext(). - * - * For example: - * \code - * const UnicodeString* snext(UErrorCode& status) { - * int32_t resultLength=0; - * const char *s=next(&resultLength, status); - * return setChars(s, resultLength, status); - * } - * \endcode - * - * @param s String to be converted to Unicode. - * @param length Length of the string. - * @param status ICU in/out error code. - * @return A pointer to unistr. - * @stable ICU 2.8 - */ - UnicodeString *setChars(const char *s, int32_t length, UErrorCode &status); -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -/* STRENUM_H */ -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/stringoptions.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/stringoptions.h deleted file mode 100644 index 7b9f70944f..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/stringoptions.h +++ /dev/null @@ -1,190 +0,0 @@ -// © 2017 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html - -// stringoptions.h -// created: 2017jun08 Markus W. Scherer - -#ifndef __STRINGOPTIONS_H__ -#define __STRINGOPTIONS_H__ - -#include "unicode/utypes.h" - -/** - * \file - * \brief C API: Bit set option bit constants for various string and character processing functions. - */ - -/** - * Option value for case folding: Use default mappings defined in CaseFolding.txt. - * - * @stable ICU 2.0 - */ -#define U_FOLD_CASE_DEFAULT 0 - -/** - * Option value for case folding: - * - * Use the modified set of mappings provided in CaseFolding.txt to handle dotted I - * and dotless i appropriately for Turkic languages (tr, az). - * - * Before Unicode 3.2, CaseFolding.txt contains mappings marked with 'I' that - * are to be included for default mappings and - * excluded for the Turkic-specific mappings. - * - * Unicode 3.2 CaseFolding.txt instead contains mappings marked with 'T' that - * are to be excluded for default mappings and - * included for the Turkic-specific mappings. - * - * @stable ICU 2.0 - */ -#define U_FOLD_CASE_EXCLUDE_SPECIAL_I 1 - -/** - * Titlecase the string as a whole rather than each word. - * (Titlecase only the character at index 0, possibly adjusted.) - * Option bits value for titlecasing APIs that take an options bit set. - * - * It is an error to specify multiple titlecasing iterator options together, - * including both an options bit and an explicit BreakIterator. - * - * @see U_TITLECASE_ADJUST_TO_CASED - * @stable ICU 60 - */ -#define U_TITLECASE_WHOLE_STRING 0x20 - -/** - * Titlecase sentences rather than words. - * (Titlecase only the first character of each sentence, possibly adjusted.) - * Option bits value for titlecasing APIs that take an options bit set. - * - * It is an error to specify multiple titlecasing iterator options together, - * including both an options bit and an explicit BreakIterator. - * - * @see U_TITLECASE_ADJUST_TO_CASED - * @stable ICU 60 - */ -#define U_TITLECASE_SENTENCES 0x40 - -/** - * Do not lowercase non-initial parts of words when titlecasing. - * Option bit for titlecasing APIs that take an options bit set. - * - * By default, titlecasing will titlecase the character at each - * (possibly adjusted) BreakIterator index and - * lowercase all other characters up to the next iterator index. - * With this option, the other characters will not be modified. - * - * @see U_TITLECASE_ADJUST_TO_CASED - * @see UnicodeString::toTitle - * @see CaseMap::toTitle - * @see ucasemap_setOptions - * @see ucasemap_toTitle - * @see ucasemap_utf8ToTitle - * @stable ICU 3.8 - */ -#define U_TITLECASE_NO_LOWERCASE 0x100 - -/** - * Do not adjust the titlecasing BreakIterator indexes; - * titlecase exactly the characters at breaks from the iterator. - * Option bit for titlecasing APIs that take an options bit set. - * - * By default, titlecasing will take each break iterator index, - * adjust it to the next relevant character (see U_TITLECASE_ADJUST_TO_CASED), - * and titlecase that one. - * - * Other characters are lowercased. - * - * It is an error to specify multiple titlecasing adjustment options together. - * - * @see U_TITLECASE_ADJUST_TO_CASED - * @see U_TITLECASE_NO_LOWERCASE - * @see UnicodeString::toTitle - * @see CaseMap::toTitle - * @see ucasemap_setOptions - * @see ucasemap_toTitle - * @see ucasemap_utf8ToTitle - * @stable ICU 3.8 - */ -#define U_TITLECASE_NO_BREAK_ADJUSTMENT 0x200 - -/** - * Adjust each titlecasing BreakIterator index to the next cased character. - * (See the Unicode Standard, chapter 3, Default Case Conversion, R3 toTitlecase(X).) - * Option bit for titlecasing APIs that take an options bit set. - * - * This used to be the default index adjustment in ICU. - * Since ICU 60, the default index adjustment is to the next character that is - * a letter, number, symbol, or private use code point. - * (Uncased modifier letters are skipped.) - * The difference in behavior is small for word titlecasing, - * but the new adjustment is much better for whole-string and sentence titlecasing: - * It yields "49ers" and "«丰(abc)»" instead of "49Ers" and "«丰(Abc)»". - * - * It is an error to specify multiple titlecasing adjustment options together. - * - * @see U_TITLECASE_NO_BREAK_ADJUSTMENT - * @stable ICU 60 - */ -#define U_TITLECASE_ADJUST_TO_CASED 0x400 - -/** - * Option for string transformation functions to not first reset the Edits object. - * Used for example in some case-mapping and normalization functions. - * - * @see CaseMap - * @see Edits - * @see Normalizer2 - * @stable ICU 60 - */ -#define U_EDITS_NO_RESET 0x2000 - -/** - * Omit unchanged text when recording how source substrings - * relate to changed and unchanged result substrings. - * Used for example in some case-mapping and normalization functions. - * - * @see CaseMap - * @see Edits - * @see Normalizer2 - * @stable ICU 60 - */ -#define U_OMIT_UNCHANGED_TEXT 0x4000 - -/** - * Option bit for u_strCaseCompare, u_strcasecmp, unorm_compare, etc: - * Compare strings in code point order instead of code unit order. - * @stable ICU 2.2 - */ -#define U_COMPARE_CODE_POINT_ORDER 0x8000 - -/** - * Option bit for unorm_compare: - * Perform case-insensitive comparison. - * @stable ICU 2.2 - */ -#define U_COMPARE_IGNORE_CASE 0x10000 - -/** - * Option bit for unorm_compare: - * Both input strings are assumed to fulfill FCD conditions. - * @stable ICU 2.2 - */ -#define UNORM_INPUT_IS_FCD 0x20000 - -// Related definitions elsewhere. -// Options that are not meaningful in the same functions -// can share the same bits. -// -// Public: -// unicode/unorm.h #define UNORM_COMPARE_NORM_OPTIONS_SHIFT 20 -// -// Internal: (may change or be removed) -// ucase.h #define _STRCASECMP_OPTIONS_MASK 0xffff -// ucase.h #define _FOLD_CASE_OPTIONS_MASK 7 -// ucasemap_imp.h #define U_TITLECASE_ITERATOR_MASK 0xe0 -// ucasemap_imp.h #define U_TITLECASE_ADJUSTMENT_MASK 0x600 -// ustr_imp.h #define _STRNCMP_STYLE 0x1000 -// unormcmp.cpp #define _COMPARE_EQUIV 0x80000 - -#endif // __STRINGOPTIONS_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/stringpiece.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/stringpiece.h deleted file mode 100644 index d525f43288..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/stringpiece.h +++ /dev/null @@ -1,226 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -// Copyright (C) 2009-2013, International Business Machines -// Corporation and others. All Rights Reserved. -// -// Copyright 2001 and onwards Google Inc. -// Author: Sanjay Ghemawat - -// This code is a contribution of Google code, and the style used here is -// a compromise between the original Google code and the ICU coding guidelines. -// For example, data types are ICU-ified (size_t,int->int32_t), -// and API comments doxygen-ified, but function names and behavior are -// as in the original, if possible. -// Assertion-style error handling, not available in ICU, was changed to -// parameter "pinning" similar to UnicodeString. -// -// In addition, this is only a partial port of the original Google code, -// limited to what was needed so far. The (nearly) complete original code -// is in the ICU svn repository at icuhtml/trunk/design/strings/contrib -// (see ICU ticket 6765, r25517). - -#ifndef __STRINGPIECE_H__ -#define __STRINGPIECE_H__ - -/** - * \file - * \brief C++ API: StringPiece: Read-only byte string wrapper class. - */ - -#include "unicode/utypes.h" -#include "unicode/uobject.h" -#include "unicode/std_string.h" - -// Arghh! I wish C++ literals were "string". - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * A string-like object that points to a sized piece of memory. - * - * We provide non-explicit singleton constructors so users can pass - * in a "const char*" or a "string" wherever a "StringPiece" is - * expected. - * - * Functions or methods may use StringPiece parameters to accept either a - * "const char*" or a "string" value that will be implicitly converted to a - * StringPiece. - * - * Systematic usage of StringPiece is encouraged as it will reduce unnecessary - * conversions from "const char*" to "string" and back again. - * - * @stable ICU 4.2 - */ -class U_COMMON_API StringPiece : public UMemory { - private: - const char* ptr_; - int32_t length_; - - public: - /** - * Default constructor, creates an empty StringPiece. - * @stable ICU 4.2 - */ - StringPiece() : ptr_(NULL), length_(0) { } - /** - * Constructs from a NUL-terminated const char * pointer. - * @param str a NUL-terminated const char * pointer - * @stable ICU 4.2 - */ - StringPiece(const char* str); - /** - * Constructs from a std::string. - * @stable ICU 4.2 - */ - StringPiece(const std::string& str) - : ptr_(str.data()), length_(static_cast(str.size())) { } - /** - * Constructs from a const char * pointer and a specified length. - * @param offset a const char * pointer (need not be terminated) - * @param len the length of the string; must be non-negative - * @stable ICU 4.2 - */ - StringPiece(const char* offset, int32_t len) : ptr_(offset), length_(len) { } - /** - * Substring of another StringPiece. - * @param x the other StringPiece - * @param pos start position in x; must be non-negative and <= x.length(). - * @stable ICU 4.2 - */ - StringPiece(const StringPiece& x, int32_t pos); - /** - * Substring of another StringPiece. - * @param x the other StringPiece - * @param pos start position in x; must be non-negative and <= x.length(). - * @param len length of the substring; - * must be non-negative and will be pinned to at most x.length() - pos. - * @stable ICU 4.2 - */ - StringPiece(const StringPiece& x, int32_t pos, int32_t len); - - /** - * Returns the string pointer. May be NULL if it is empty. - * - * data() may return a pointer to a buffer with embedded NULs, and the - * returned buffer may or may not be null terminated. Therefore it is - * typically a mistake to pass data() to a routine that expects a NUL - * terminated string. - * @return the string pointer - * @stable ICU 4.2 - */ - const char* data() const { return ptr_; } - /** - * Returns the string length. Same as length(). - * @return the string length - * @stable ICU 4.2 - */ - int32_t size() const { return length_; } - /** - * Returns the string length. Same as size(). - * @return the string length - * @stable ICU 4.2 - */ - int32_t length() const { return length_; } - /** - * Returns whether the string is empty. - * @return TRUE if the string is empty - * @stable ICU 4.2 - */ - UBool empty() const { return length_ == 0; } - - /** - * Sets to an empty string. - * @stable ICU 4.2 - */ - void clear() { ptr_ = NULL; length_ = 0; } - - /** - * Reset the stringpiece to refer to new data. - * @param xdata pointer the new string data. Need not be nul terminated. - * @param len the length of the new data - * @stable ICU 4.8 - */ - void set(const char* xdata, int32_t len) { ptr_ = xdata; length_ = len; } - - /** - * Reset the stringpiece to refer to new data. - * @param str a pointer to a NUL-terminated string. - * @stable ICU 4.8 - */ - void set(const char* str); - - /** - * Removes the first n string units. - * @param n prefix length, must be non-negative and <=length() - * @stable ICU 4.2 - */ - void remove_prefix(int32_t n) { - if (n >= 0) { - if (n > length_) { - n = length_; - } - ptr_ += n; - length_ -= n; - } - } - - /** - * Removes the last n string units. - * @param n suffix length, must be non-negative and <=length() - * @stable ICU 4.2 - */ - void remove_suffix(int32_t n) { - if (n >= 0) { - if (n <= length_) { - length_ -= n; - } else { - length_ = 0; - } - } - } - - /** - * Maximum integer, used as a default value for substring methods. - * @stable ICU 4.2 - */ - static const int32_t npos; // = 0x7fffffff; - - /** - * Returns a substring of this StringPiece. - * @param pos start position; must be non-negative and <= length(). - * @param len length of the substring; - * must be non-negative and will be pinned to at most length() - pos. - * @return the substring StringPiece - * @stable ICU 4.2 - */ - StringPiece substr(int32_t pos, int32_t len = npos) const { - return StringPiece(*this, pos, len); - } -}; - -/** - * Global operator == for StringPiece - * @param x The first StringPiece to compare. - * @param y The second StringPiece to compare. - * @return TRUE if the string data is equal - * @stable ICU 4.8 - */ -U_EXPORT UBool U_EXPORT2 -operator==(const StringPiece& x, const StringPiece& y); - -/** - * Global operator != for StringPiece - * @param x The first StringPiece to compare. - * @param y The second StringPiece to compare. - * @return TRUE if the string data is not equal - * @stable ICU 4.8 - */ -inline UBool operator!=(const StringPiece& x, const StringPiece& y) { - return !(x == y); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // __STRINGPIECE_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/stringtriebuilder.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/stringtriebuilder.h deleted file mode 100644 index fc02dba629..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/stringtriebuilder.h +++ /dev/null @@ -1,423 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2010-2012,2014, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* file name: stringtriebuilder.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2010dec24 -* created by: Markus W. Scherer -*/ - -#ifndef __STRINGTRIEBUILDER_H__ -#define __STRINGTRIEBUILDER_H__ - -#include "unicode/utypes.h" -#include "unicode/uobject.h" - -/** - * \file - * \brief C++ API: Builder API for trie builders - */ - -// Forward declaration. -/// \cond -struct UHashtable; -typedef struct UHashtable UHashtable; -/// \endcond - -/** - * Build options for BytesTrieBuilder and CharsTrieBuilder. - * @stable ICU 4.8 - */ -enum UStringTrieBuildOption { - /** - * Builds a trie quickly. - * @stable ICU 4.8 - */ - USTRINGTRIE_BUILD_FAST, - /** - * Builds a trie more slowly, attempting to generate - * a shorter but equivalent serialization. - * This build option also uses more memory. - * - * This option can be effective when many integer values are the same - * and string/byte sequence suffixes can be shared. - * Runtime speed is not expected to improve. - * @stable ICU 4.8 - */ - USTRINGTRIE_BUILD_SMALL -}; - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * Base class for string trie builder classes. - * - * This class is not intended for public subclassing. - * @stable ICU 4.8 - */ -class U_COMMON_API StringTrieBuilder : public UObject { -public: -#ifndef U_HIDE_INTERNAL_API - /** @internal */ - static int32_t hashNode(const void *node); - /** @internal */ - static UBool equalNodes(const void *left, const void *right); -#endif /* U_HIDE_INTERNAL_API */ - -protected: - // Do not enclose the protected default constructor with #ifndef U_HIDE_INTERNAL_API - // or else the compiler will create a public default constructor. - /** @internal */ - StringTrieBuilder(); - /** @internal */ - virtual ~StringTrieBuilder(); - -#ifndef U_HIDE_INTERNAL_API - /** @internal */ - void createCompactBuilder(int32_t sizeGuess, UErrorCode &errorCode); - /** @internal */ - void deleteCompactBuilder(); - - /** @internal */ - void build(UStringTrieBuildOption buildOption, int32_t elementsLength, UErrorCode &errorCode); - - /** @internal */ - int32_t writeNode(int32_t start, int32_t limit, int32_t unitIndex); - /** @internal */ - int32_t writeBranchSubNode(int32_t start, int32_t limit, int32_t unitIndex, int32_t length); -#endif /* U_HIDE_INTERNAL_API */ - - class Node; - -#ifndef U_HIDE_INTERNAL_API - /** @internal */ - Node *makeNode(int32_t start, int32_t limit, int32_t unitIndex, UErrorCode &errorCode); - /** @internal */ - Node *makeBranchSubNode(int32_t start, int32_t limit, int32_t unitIndex, - int32_t length, UErrorCode &errorCode); -#endif /* U_HIDE_INTERNAL_API */ - - /** @internal */ - virtual int32_t getElementStringLength(int32_t i) const = 0; - /** @internal */ - virtual char16_t getElementUnit(int32_t i, int32_t unitIndex) const = 0; - /** @internal */ - virtual int32_t getElementValue(int32_t i) const = 0; - - // Finds the first unit index after this one where - // the first and last element have different units again. - /** @internal */ - virtual int32_t getLimitOfLinearMatch(int32_t first, int32_t last, int32_t unitIndex) const = 0; - - // Number of different units at unitIndex. - /** @internal */ - virtual int32_t countElementUnits(int32_t start, int32_t limit, int32_t unitIndex) const = 0; - /** @internal */ - virtual int32_t skipElementsBySomeUnits(int32_t i, int32_t unitIndex, int32_t count) const = 0; - /** @internal */ - virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t unitIndex, char16_t unit) const = 0; - - /** @internal */ - virtual UBool matchNodesCanHaveValues() const = 0; - - /** @internal */ - virtual int32_t getMaxBranchLinearSubNodeLength() const = 0; - /** @internal */ - virtual int32_t getMinLinearMatch() const = 0; - /** @internal */ - virtual int32_t getMaxLinearMatchLength() const = 0; - -#ifndef U_HIDE_INTERNAL_API - // max(BytesTrie::kMaxBranchLinearSubNodeLength, UCharsTrie::kMaxBranchLinearSubNodeLength). - /** @internal */ - static const int32_t kMaxBranchLinearSubNodeLength=5; - - // Maximum number of nested split-branch levels for a branch on all 2^16 possible char16_t units. - // log2(2^16/kMaxBranchLinearSubNodeLength) rounded up. - /** @internal */ - static const int32_t kMaxSplitBranchLevels=14; - - /** - * Makes sure that there is only one unique node registered that is - * equivalent to newNode. - * @param newNode Input node. The builder takes ownership. - * @param errorCode ICU in/out UErrorCode. - Set to U_MEMORY_ALLOCATION_ERROR if it was success but newNode==NULL. - * @return newNode if it is the first of its kind, or - * an equivalent node if newNode is a duplicate. - * @internal - */ - Node *registerNode(Node *newNode, UErrorCode &errorCode); - /** - * Makes sure that there is only one unique FinalValueNode registered - * with this value. - * Avoids creating a node if the value is a duplicate. - * @param value A final value. - * @param errorCode ICU in/out UErrorCode. - Set to U_MEMORY_ALLOCATION_ERROR if it was success but newNode==NULL. - * @return A FinalValueNode with the given value. - * @internal - */ - Node *registerFinalValue(int32_t value, UErrorCode &errorCode); -#endif /* U_HIDE_INTERNAL_API */ - - /* - * C++ note: - * registerNode() and registerFinalValue() take ownership of their input nodes, - * and only return owned nodes. - * If they see a failure UErrorCode, they will delete the input node. - * If they get a NULL pointer, they will record a U_MEMORY_ALLOCATION_ERROR. - * If there is a failure, they return NULL. - * - * NULL Node pointers can be safely passed into other Nodes because - * they call the static Node::hashCode() which checks for a NULL pointer first. - * - * Therefore, as long as builder functions register a new node, - * they need to check for failures only before explicitly dereferencing - * a Node pointer, or before setting a new UErrorCode. - */ - - // Hash set of nodes, maps from nodes to integer 1. - /** @internal */ - UHashtable *nodes; - - // Do not conditionalize the following with #ifndef U_HIDE_INTERNAL_API, - // it is needed for layout of other objects. - /** - * @internal - * \cond - */ - class Node : public UObject { - public: - Node(int32_t initialHash) : hash(initialHash), offset(0) {} - inline int32_t hashCode() const { return hash; } - // Handles node==NULL. - static inline int32_t hashCode(const Node *node) { return node==NULL ? 0 : node->hashCode(); } - // Base class operator==() compares the actual class types. - virtual UBool operator==(const Node &other) const; - inline UBool operator!=(const Node &other) const { return !operator==(other); } - /** - * Traverses the Node graph and numbers branch edges, with rightmost edges first. - * This is to avoid writing a duplicate node twice. - * - * Branch nodes in this trie data structure are not symmetric. - * Most branch edges "jump" to other nodes but the rightmost branch edges - * just continue without a jump. - * Therefore, write() must write the rightmost branch edge last - * (trie units are written backwards), and must write it at that point even if - * it is a duplicate of a node previously written elsewhere. - * - * This function visits and marks right branch edges first. - * Edges are numbered with increasingly negative values because we share the - * offset field which gets positive values when nodes are written. - * A branch edge also remembers the first number for any of its edges. - * - * When a further-left branch edge has a number in the range of the rightmost - * edge's numbers, then it will be written as part of the required right edge - * and we can avoid writing it first. - * - * After root.markRightEdgesFirst(-1) the offsets of all nodes are negative - * edge numbers. - * - * @param edgeNumber The first edge number for this node and its sub-nodes. - * @return An edge number that is at least the maximum-negative - * of the input edge number and the numbers of this node and all of its sub-nodes. - */ - virtual int32_t markRightEdgesFirst(int32_t edgeNumber); - // write() must set the offset to a positive value. - virtual void write(StringTrieBuilder &builder) = 0; - // See markRightEdgesFirst. - inline void writeUnlessInsideRightEdge(int32_t firstRight, int32_t lastRight, - StringTrieBuilder &builder) { - // Note: Edge numbers are negative, lastRight<=firstRight. - // If offset>0 then this node and its sub-nodes have been written already - // and we need not write them again. - // If this node is part of the unwritten right branch edge, - // then we wait until that is written. - if(offset<0 && (offsetStringSearch is a SearchIterator that provides - * language-sensitive text searching based on the comparison rules defined - * in a {@link RuleBasedCollator} object. - * StringSearch ensures that language eccentricity can be - * handled, e.g. for the German collator, characters ß and SS will be matched - * if case is chosen to be ignored. - * See the - * "ICU Collation Design Document" for more information. - *

- * There are 2 match options for selection:
- * Let S' be the sub-string of a text string S between the offsets start and - * end [start, end]. - *
- * A pattern string P matches a text string S at the offsets [start, end] - * if - *

 
- * option 1. Some canonical equivalent of P matches some canonical equivalent
- *           of S'
- * option 2. P matches S' and if P starts or ends with a combining mark,
- *           there exists no non-ignorable combining mark before or after S?
- *           in S respectively.
- * 
- * Option 2. will be the default. - *

- * This search has APIs similar to that of other text iteration mechanisms - * such as the break iterators in BreakIterator. Using these - * APIs, it is easy to scan through text looking for all occurrences of - * a given pattern. This search iterator allows changing of direction by - * calling a reset followed by a next or previous. - * Though a direction change can occur without calling reset first, - * this operation comes with some speed penalty. - * Match results in the forward direction will match the result matches in - * the backwards direction in the reverse order - *

- * SearchIterator provides APIs to specify the starting position - * within the text string to be searched, e.g. setOffset, - * preceding and following. Since the - * starting position will be set as it is specified, please take note that - * there are some danger points which the search may render incorrect - * results: - *

    - *
  • The midst of a substring that requires normalization. - *
  • If the following match is to be found, the position should not be the - * second character which requires to be swapped with the preceding - * character. Vice versa, if the preceding match is to be found, - * position to search from should not be the first character which - * requires to be swapped with the next character. E.g certain Thai and - * Lao characters require swapping. - *
  • If a following pattern match is to be found, any position within a - * contracting sequence except the first will fail. Vice versa if a - * preceding pattern match is to be found, a invalid starting point - * would be any character within a contracting sequence except the last. - *
- *

- * A BreakIterator can be used if only matches at logical breaks are desired. - * Using a BreakIterator will only give you results that exactly matches the - * boundaries given by the breakiterator. For instance the pattern "e" will - * not be found in the string "\u00e9" if a character break iterator is used. - *

- * Options are provided to handle overlapping matches. - * E.g. In English, overlapping matches produces the result 0 and 2 - * for the pattern "abab" in the text "ababab", where else mutually - * exclusive matches only produce the result of 0. - *

- * Though collator attributes will be taken into consideration while - * performing matches, there are no APIs here for setting and getting the - * attributes. These attributes can be set by getting the collator - * from getCollator and using the APIs in coll.h. - * Lastly to update StringSearch to the new collator attributes, - * reset has to be called. - *

- * Restriction:
- * Currently there are no composite characters that consists of a - * character with combining class > 0 before a character with combining - * class == 0. However, if such a character exists in the future, - * StringSearch does not guarantee the results for option 1. - *

- * Consult the SearchIterator documentation for information on - * and examples of how to use instances of this class to implement text - * searching. - *


- * UnicodeString target("The quick brown fox jumps over the lazy dog.");
- * UnicodeString pattern("fox");
- *
- * UErrorCode      error = U_ZERO_ERROR;
- * StringSearch iter(pattern, target, Locale::getUS(), NULL, status);
- * for (int pos = iter.first(error);
- *      pos != USEARCH_DONE; 
- *      pos = iter.next(error))
- * {
- *     printf("Found match at %d pos, length is %d\n", pos, 
- *                                             iter.getMatchLength());
- * }
- * 
- *

- * Note, StringSearch is not to be subclassed. - *

- * @see SearchIterator - * @see RuleBasedCollator - * @since ICU 2.0 - */ - -class U_I18N_API StringSearch U_FINAL : public SearchIterator -{ -public: - - // public constructors and destructors -------------------------------- - - /** - * Creating a StringSearch instance using the argument locale - * language rule set. A collator will be created in the process, which - * will be owned by this instance and will be deleted during - * destruction - * @param pattern The text for which this object will search. - * @param text The text in which to search for the pattern. - * @param locale A locale which defines the language-sensitive - * comparison rules used to determine whether text in the - * pattern and target matches. - * @param breakiter A BreakIterator object used to constrain - * the matches that are found. Matches whose start and end - * indices in the target text are not boundaries as - * determined by the BreakIterator are - * ignored. If this behavior is not desired, - * NULL can be passed in instead. - * @param status for errors if any. If pattern or text is NULL, or if - * either the length of pattern or text is 0 then an - * U_ILLEGAL_ARGUMENT_ERROR is returned. - * @stable ICU 2.0 - */ - StringSearch(const UnicodeString &pattern, const UnicodeString &text, - const Locale &locale, - BreakIterator *breakiter, - UErrorCode &status); - - /** - * Creating a StringSearch instance using the argument collator - * language rule set. Note, user retains the ownership of this collator, - * it does not get destroyed during this instance's destruction. - * @param pattern The text for which this object will search. - * @param text The text in which to search for the pattern. - * @param coll A RuleBasedCollator object which defines - * the language-sensitive comparison rules used to - * determine whether text in the pattern and target - * matches. User is responsible for the clearing of this - * object. - * @param breakiter A BreakIterator object used to constrain - * the matches that are found. Matches whose start and end - * indices in the target text are not boundaries as - * determined by the BreakIterator are - * ignored. If this behavior is not desired, - * NULL can be passed in instead. - * @param status for errors if any. If either the length of pattern or - * text is 0 then an U_ILLEGAL_ARGUMENT_ERROR is returned. - * @stable ICU 2.0 - */ - StringSearch(const UnicodeString &pattern, - const UnicodeString &text, - RuleBasedCollator *coll, - BreakIterator *breakiter, - UErrorCode &status); - - /** - * Creating a StringSearch instance using the argument locale - * language rule set. A collator will be created in the process, which - * will be owned by this instance and will be deleted during - * destruction - *

- * Note: No parsing of the text within the CharacterIterator - * will be done during searching for this version. The block of text - * in CharacterIterator will be used as it is. - * @param pattern The text for which this object will search. - * @param text The text iterator in which to search for the pattern. - * @param locale A locale which defines the language-sensitive - * comparison rules used to determine whether text in the - * pattern and target matches. User is responsible for - * the clearing of this object. - * @param breakiter A BreakIterator object used to constrain - * the matches that are found. Matches whose start and end - * indices in the target text are not boundaries as - * determined by the BreakIterator are - * ignored. If this behavior is not desired, - * NULL can be passed in instead. - * @param status for errors if any. If either the length of pattern or - * text is 0 then an U_ILLEGAL_ARGUMENT_ERROR is returned. - * @stable ICU 2.0 - */ - StringSearch(const UnicodeString &pattern, CharacterIterator &text, - const Locale &locale, - BreakIterator *breakiter, - UErrorCode &status); - - /** - * Creating a StringSearch instance using the argument collator - * language rule set. Note, user retains the ownership of this collator, - * it does not get destroyed during this instance's destruction. - *

- * Note: No parsing of the text within the CharacterIterator - * will be done during searching for this version. The block of text - * in CharacterIterator will be used as it is. - * @param pattern The text for which this object will search. - * @param text The text in which to search for the pattern. - * @param coll A RuleBasedCollator object which defines - * the language-sensitive comparison rules used to - * determine whether text in the pattern and target - * matches. User is responsible for the clearing of this - * object. - * @param breakiter A BreakIterator object used to constrain - * the matches that are found. Matches whose start and end - * indices in the target text are not boundaries as - * determined by the BreakIterator are - * ignored. If this behavior is not desired, - * NULL can be passed in instead. - * @param status for errors if any. If either the length of pattern or - * text is 0 then an U_ILLEGAL_ARGUMENT_ERROR is returned. - * @stable ICU 2.0 - */ - StringSearch(const UnicodeString &pattern, CharacterIterator &text, - RuleBasedCollator *coll, - BreakIterator *breakiter, - UErrorCode &status); - - /** - * Copy constructor that creates a StringSearch instance with the same - * behavior, and iterating over the same text. - * @param that StringSearch instance to be copied. - * @stable ICU 2.0 - */ - StringSearch(const StringSearch &that); - - /** - * Destructor. Cleans up the search iterator data struct. - * If a collator is created in the constructor, it will be destroyed here. - * @stable ICU 2.0 - */ - virtual ~StringSearch(void); - - /** - * Clone this object. - * Clones can be used concurrently in multiple threads. - * If an error occurs, then NULL is returned. - * The caller must delete the clone. - * - * @return a clone of this object - * - * @see getDynamicClassID - * @stable ICU 2.8 - */ - StringSearch *clone() const; - - // operator overloading --------------------------------------------- - - /** - * Assignment operator. Sets this iterator to have the same behavior, - * and iterate over the same text, as the one passed in. - * @param that instance to be copied. - * @stable ICU 2.0 - */ - StringSearch & operator=(const StringSearch &that); - - /** - * Equality operator. - * @param that instance to be compared. - * @return TRUE if both instances have the same attributes, - * breakiterators, collators and iterate over the same text - * while looking for the same pattern. - * @stable ICU 2.0 - */ - virtual UBool operator==(const SearchIterator &that) const; - - // public get and set methods ---------------------------------------- - - /** - * Sets the index to point to the given position, and clears any state - * that's affected. - *

- * This method takes the argument index and sets the position in the text - * string accordingly without checking if the index is pointing to a - * valid starting point to begin searching. - * @param position within the text to be set. If position is less - * than or greater than the text range for searching, - * an U_INDEX_OUTOFBOUNDS_ERROR will be returned - * @param status for errors if it occurs - * @stable ICU 2.0 - */ - virtual void setOffset(int32_t position, UErrorCode &status); - - /** - * Return the current index in the text being searched. - * If the iteration has gone past the end of the text - * (or past the beginning for a backwards search), USEARCH_DONE - * is returned. - * @return current index in the text being searched. - * @stable ICU 2.0 - */ - virtual int32_t getOffset(void) const; - - /** - * Set the target text to be searched. - * Text iteration will hence begin at the start of the text string. - * This method is - * useful if you want to re-use an iterator to search for the same - * pattern within a different body of text. - * @param text text string to be searched - * @param status for errors if any. If the text length is 0 then an - * U_ILLEGAL_ARGUMENT_ERROR is returned. - * @stable ICU 2.0 - */ - virtual void setText(const UnicodeString &text, UErrorCode &status); - - /** - * Set the target text to be searched. - * Text iteration will hence begin at the start of the text string. - * This method is - * useful if you want to re-use an iterator to search for the same - * pattern within a different body of text. - * Note: No parsing of the text within the CharacterIterator - * will be done during searching for this version. The block of text - * in CharacterIterator will be used as it is. - * @param text text string to be searched - * @param status for errors if any. If the text length is 0 then an - * U_ILLEGAL_ARGUMENT_ERROR is returned. - * @stable ICU 2.0 - */ - virtual void setText(CharacterIterator &text, UErrorCode &status); - - /** - * Gets the collator used for the language rules. - *

- * Caller may modify but must not delete the RuleBasedCollator! - * Modifications to this collator will affect the original collator passed in to - * the StringSearch> constructor or to setCollator, if any. - * @return collator used for string search - * @stable ICU 2.0 - */ - RuleBasedCollator * getCollator() const; - - /** - * Sets the collator used for the language rules. User retains the - * ownership of this collator, thus the responsibility of deletion lies - * with the user. The iterator's position will not be changed by this method. - * @param coll collator - * @param status for errors if any - * @stable ICU 2.0 - */ - void setCollator(RuleBasedCollator *coll, UErrorCode &status); - - /** - * Sets the pattern used for matching. - * The iterator's position will not be changed by this method. - * @param pattern search pattern to be found - * @param status for errors if any. If the pattern length is 0 then an - * U_ILLEGAL_ARGUMENT_ERROR is returned. - * @stable ICU 2.0 - */ - void setPattern(const UnicodeString &pattern, UErrorCode &status); - - /** - * Gets the search pattern. - * @return pattern used for matching - * @stable ICU 2.0 - */ - const UnicodeString & getPattern() const; - - // public methods ---------------------------------------------------- - - /** - * Reset the iteration. - * Search will begin at the start of the text string if a forward - * iteration is initiated before a backwards iteration. Otherwise if - * a backwards iteration is initiated before a forwards iteration, the - * search will begin at the end of the text string. - * @stable ICU 2.0 - */ - virtual void reset(); - - /** - * Returns a copy of StringSearch with the same behavior, and - * iterating over the same text, as this one. Note that all data will be - * replicated, except for the user-specified collator and the - * breakiterator. - * @return cloned object - * @stable ICU 2.0 - */ - virtual SearchIterator * safeClone(void) const; - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.2 - */ - virtual UClassID getDynamicClassID() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - -protected: - - // protected method ------------------------------------------------- - - /** - * Search forward for matching text, starting at a given location. - * Clients should not call this method directly; instead they should - * call {@link SearchIterator#next }. - *

- * If a match is found, this method returns the index at which the match - * starts and calls {@link SearchIterator#setMatchLength } with the number - * of characters in the target text that make up the match. If no match - * is found, the method returns USEARCH_DONE. - *

- * The StringSearch is adjusted so that its current index - * (as returned by {@link #getOffset }) is the match position if one was - * found. - * If a match is not found, USEARCH_DONE will be returned and - * the StringSearch will be adjusted to the index USEARCH_DONE. - * @param position The index in the target text at which the search - * starts - * @param status for errors if any occurs - * @return The index at which the matched text in the target starts, or - * USEARCH_DONE if no match was found. - * @stable ICU 2.0 - */ - virtual int32_t handleNext(int32_t position, UErrorCode &status); - - /** - * Search backward for matching text, starting at a given location. - * Clients should not call this method directly; instead they should call - * SearchIterator.previous(), which this method overrides. - *

- * If a match is found, this method returns the index at which the match - * starts and calls {@link SearchIterator#setMatchLength } with the number - * of characters in the target text that make up the match. If no match - * is found, the method returns USEARCH_DONE. - *

- * The StringSearch is adjusted so that its current index - * (as returned by {@link #getOffset }) is the match position if one was - * found. - * If a match is not found, USEARCH_DONE will be returned and - * the StringSearch will be adjusted to the index USEARCH_DONE. - * @param position The index in the target text at which the search - * starts. - * @param status for errors if any occurs - * @return The index at which the matched text in the target starts, or - * USEARCH_DONE if no match was found. - * @stable ICU 2.0 - */ - virtual int32_t handlePrev(int32_t position, UErrorCode &status); - -private : - StringSearch(); // default constructor not implemented - - // private data members ---------------------------------------------- - - /** - * Pattern text - * @stable ICU 2.0 - */ - UnicodeString m_pattern_; - /** - * String search struct data - * @stable ICU 2.0 - */ - UStringSearch *m_strsrch_; - -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_COLLATION */ - -#endif - diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/symtable.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/symtable.h deleted file mode 100644 index 95c22a4165..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/symtable.h +++ /dev/null @@ -1,116 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (c) 2000-2005, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* Date Name Description -* 02/04/00 aliu Creation. -********************************************************************** -*/ -#ifndef SYMTABLE_H -#define SYMTABLE_H - -#include "unicode/utypes.h" -#include "unicode/uobject.h" - -/** - * \file - * \brief C++ API: An interface that defines both lookup protocol and parsing of - * symbolic names. - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class ParsePosition; -class UnicodeFunctor; -class UnicodeSet; -class UnicodeString; - -/** - * An interface that defines both lookup protocol and parsing of - * symbolic names. - * - *

A symbol table maintains two kinds of mappings. The first is - * between symbolic names and their values. For example, if the - * variable with the name "start" is set to the value "alpha" - * (perhaps, though not necessarily, through an expression such as - * "$start=alpha"), then the call lookup("start") will return the - * char[] array ['a', 'l', 'p', 'h', 'a']. - * - *

The second kind of mapping is between character values and - * UnicodeMatcher objects. This is used by RuleBasedTransliterator, - * which uses characters in the private use area to represent objects - * such as UnicodeSets. If U+E015 is mapped to the UnicodeSet [a-z], - * then lookupMatcher(0xE015) will return the UnicodeSet [a-z]. - * - *

Finally, a symbol table defines parsing behavior for symbolic - * names. All symbolic names start with the SYMBOL_REF character. - * When a parser encounters this character, it calls parseReference() - * with the position immediately following the SYMBOL_REF. The symbol - * table parses the name, if there is one, and returns it. - * - * @stable ICU 2.8 - */ -class U_COMMON_API SymbolTable /* not : public UObject because this is an interface/mixin class */ { -public: - - /** - * The character preceding a symbol reference name. - * @stable ICU 2.8 - */ - enum { SYMBOL_REF = 0x0024 /*$*/ }; - - /** - * Destructor. - * @stable ICU 2.8 - */ - virtual ~SymbolTable(); - - /** - * Lookup the characters associated with this string and return it. - * Return NULL if no such name exists. The resultant - * string may have length zero. - * @param s the symbolic name to lookup - * @return a string containing the name's value, or NULL if - * there is no mapping for s. - * @stable ICU 2.8 - */ - virtual const UnicodeString* lookup(const UnicodeString& s) const = 0; - - /** - * Lookup the UnicodeMatcher associated with the given character, and - * return it. Return NULL if not found. - * @param ch a 32-bit code point from 0 to 0x10FFFF inclusive. - * @return the UnicodeMatcher object represented by the given - * character, or NULL if there is no mapping for ch. - * @stable ICU 2.8 - */ - virtual const UnicodeFunctor* lookupMatcher(UChar32 ch) const = 0; - - /** - * Parse a symbol reference name from the given string, starting - * at the given position. If no valid symbol reference name is - * found, return the empty string and leave pos unchanged. That is, if the - * character at pos cannot start a name, or if pos is at or after - * text.length(), then return an empty string. This indicates an - * isolated SYMBOL_REF character. - * @param text the text to parse for the name - * @param pos on entry, the index of the first character to parse. - * This is the character following the SYMBOL_REF character. On - * exit, the index after the last parsed character. If the parse - * failed, pos is unchanged on exit. - * @param limit the index after the last character to be parsed. - * @return the parsed name, or an empty string if there is no - * valid symbolic name at the given position. - * @stable ICU 2.8 - */ - virtual UnicodeString parseReference(const UnicodeString& text, - ParsePosition& pos, int32_t limit) const = 0; -}; -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tblcoll.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tblcoll.h deleted file mode 100644 index d4cf184a45..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tblcoll.h +++ /dev/null @@ -1,879 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* Copyright (C) 1996-2016, International Business Machines Corporation and -* others. All Rights Reserved. -****************************************************************************** -*/ - -/** - * \file - * \brief C++ API: The RuleBasedCollator class implements the Collator abstract base class. - */ - -/** -* File tblcoll.h -* -* Created by: Helena Shih -* -* Modification History: -* -* Date Name Description -* 2/5/97 aliu Added streamIn and streamOut methods. Added -* constructor which reads RuleBasedCollator object from -* a binary file. Added writeToFile method which streams -* RuleBasedCollator out to a binary file. The streamIn -* and streamOut methods use istream and ostream objects -* in binary mode. -* 2/12/97 aliu Modified to use TableCollationData sub-object to -* hold invariant data. -* 2/13/97 aliu Moved several methods into this class from Collation. -* Added a private RuleBasedCollator(Locale&) constructor, -* to be used by Collator::createDefault(). General -* clean up. -* 2/20/97 helena Added clone, operator==, operator!=, operator=, and copy -* constructor and getDynamicClassID. -* 3/5/97 aliu Modified constructFromFile() to add parameter -* specifying whether or not binary loading is to be -* attempted. This is required for dynamic rule loading. -* 05/07/97 helena Added memory allocation error detection. -* 6/17/97 helena Added IDENTICAL strength for compare, changed getRules to -* use MergeCollation::getPattern. -* 6/20/97 helena Java class name change. -* 8/18/97 helena Added internal API documentation. -* 09/03/97 helena Added createCollationKeyValues(). -* 02/10/98 damiba Added compare with "length" parameter -* 08/05/98 erm Synched with 1.2 version of RuleBasedCollator.java -* 04/23/99 stephen Removed EDecompositionMode, merged with -* Normalizer::EMode -* 06/14/99 stephen Removed kResourceBundleSuffix -* 11/02/99 helena Collator performance enhancements. Eliminates the -* UnicodeString construction and special case for NO_OP. -* 11/23/99 srl More performance enhancements. Updates to NormalizerIterator -* internal state management. -* 12/15/99 aliu Update to support Thai collation. Move NormalizerIterator -* to implementation file. -* 01/29/01 synwee Modified into a C++ wrapper which calls C API -* (ucol.h) -* 2012-2014 markus Rewritten in C++ again. -*/ - -#ifndef TBLCOLL_H -#define TBLCOLL_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_COLLATION - -#include "unicode/coll.h" -#include "unicode/locid.h" -#include "unicode/uiter.h" -#include "unicode/ucol.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -struct CollationCacheEntry; -struct CollationData; -struct CollationSettings; -struct CollationTailoring; -/** -* @stable ICU 2.0 -*/ -class StringSearch; -/** -* @stable ICU 2.0 -*/ -class CollationElementIterator; -class CollationKey; -class SortKeyByteSink; -class UnicodeSet; -class UnicodeString; -class UVector64; - -/** - * The RuleBasedCollator class provides the implementation of - * Collator, using data-driven tables. The user can create a customized - * table-based collation. - *

- * For more information about the collation service see - * the User Guide. - *

- * Collation service provides correct sorting orders for most locales supported in ICU. - * If specific data for a locale is not available, the orders eventually falls back - * to the CLDR root sort order. - *

- * Sort ordering may be customized by providing your own set of rules. For more on - * this subject see the - * Collation Customization section of the User Guide. - *

- * Note, RuleBasedCollator is not to be subclassed. - * @see Collator - */ -class U_I18N_API RuleBasedCollator : public Collator { -public: - /** - * RuleBasedCollator constructor. This takes the table rules and builds a - * collation table out of them. Please see RuleBasedCollator class - * description for more details on the collation rule syntax. - * @param rules the collation rules to build the collation table from. - * @param status reporting a success or an error. - * @stable ICU 2.0 - */ - RuleBasedCollator(const UnicodeString& rules, UErrorCode& status); - - /** - * RuleBasedCollator constructor. This takes the table rules and builds a - * collation table out of them. Please see RuleBasedCollator class - * description for more details on the collation rule syntax. - * @param rules the collation rules to build the collation table from. - * @param collationStrength strength for comparison - * @param status reporting a success or an error. - * @stable ICU 2.0 - */ - RuleBasedCollator(const UnicodeString& rules, - ECollationStrength collationStrength, - UErrorCode& status); - - /** - * RuleBasedCollator constructor. This takes the table rules and builds a - * collation table out of them. Please see RuleBasedCollator class - * description for more details on the collation rule syntax. - * @param rules the collation rules to build the collation table from. - * @param decompositionMode the normalisation mode - * @param status reporting a success or an error. - * @stable ICU 2.0 - */ - RuleBasedCollator(const UnicodeString& rules, - UColAttributeValue decompositionMode, - UErrorCode& status); - - /** - * RuleBasedCollator constructor. This takes the table rules and builds a - * collation table out of them. Please see RuleBasedCollator class - * description for more details on the collation rule syntax. - * @param rules the collation rules to build the collation table from. - * @param collationStrength strength for comparison - * @param decompositionMode the normalisation mode - * @param status reporting a success or an error. - * @stable ICU 2.0 - */ - RuleBasedCollator(const UnicodeString& rules, - ECollationStrength collationStrength, - UColAttributeValue decompositionMode, - UErrorCode& status); - -#ifndef U_HIDE_INTERNAL_API - /** - * TODO: document & propose as public API - * @internal - */ - RuleBasedCollator(const UnicodeString &rules, - UParseError &parseError, UnicodeString &reason, - UErrorCode &errorCode); -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Copy constructor. - * @param other the RuleBasedCollator object to be copied - * @stable ICU 2.0 - */ - RuleBasedCollator(const RuleBasedCollator& other); - - - /** Opens a collator from a collator binary image created using - * cloneBinary. Binary image used in instantiation of the - * collator remains owned by the user and should stay around for - * the lifetime of the collator. The API also takes a base collator - * which must be the root collator. - * @param bin binary image owned by the user and required through the - * lifetime of the collator - * @param length size of the image. If negative, the API will try to - * figure out the length of the image - * @param base Base collator, for lookup of untailored characters. - * Must be the root collator, must not be NULL. - * The base is required to be present through the lifetime of the collator. - * @param status for catching errors - * @return newly created collator - * @see cloneBinary - * @stable ICU 3.4 - */ - RuleBasedCollator(const uint8_t *bin, int32_t length, - const RuleBasedCollator *base, - UErrorCode &status); - - /** - * Destructor. - * @stable ICU 2.0 - */ - virtual ~RuleBasedCollator(); - - /** - * Assignment operator. - * @param other other RuleBasedCollator object to copy from. - * @stable ICU 2.0 - */ - RuleBasedCollator& operator=(const RuleBasedCollator& other); - - /** - * Returns true if argument is the same as this object. - * @param other Collator object to be compared. - * @return true if arguments is the same as this object. - * @stable ICU 2.0 - */ - virtual UBool operator==(const Collator& other) const; - - /** - * Makes a copy of this object. - * @return a copy of this object, owned by the caller - * @stable ICU 2.0 - */ - virtual Collator* clone(void) const; - - /** - * Creates a collation element iterator for the source string. The caller of - * this method is responsible for the memory management of the return - * pointer. - * @param source the string over which the CollationElementIterator will - * iterate. - * @return the collation element iterator of the source string using this as - * the based Collator. - * @stable ICU 2.2 - */ - virtual CollationElementIterator* createCollationElementIterator( - const UnicodeString& source) const; - - /** - * Creates a collation element iterator for the source. The caller of this - * method is responsible for the memory management of the returned pointer. - * @param source the CharacterIterator which produces the characters over - * which the CollationElementItgerator will iterate. - * @return the collation element iterator of the source using this as the - * based Collator. - * @stable ICU 2.2 - */ - virtual CollationElementIterator* createCollationElementIterator( - const CharacterIterator& source) const; - - // Make deprecated versions of Collator::compare() visible. - using Collator::compare; - - /** - * The comparison function compares the character data stored in two - * different strings. Returns information about whether a string is less - * than, greater than or equal to another string. - * @param source the source string to be compared with. - * @param target the string that is to be compared with the source string. - * @param status possible error code - * @return Returns an enum value. UCOL_GREATER if source is greater - * than target; UCOL_EQUAL if source is equal to target; UCOL_LESS if source is less - * than target - * @stable ICU 2.6 - **/ - virtual UCollationResult compare(const UnicodeString& source, - const UnicodeString& target, - UErrorCode &status) const; - - /** - * Does the same thing as compare but limits the comparison to a specified - * length - * @param source the source string to be compared with. - * @param target the string that is to be compared with the source string. - * @param length the length the comparison is limited to - * @param status possible error code - * @return Returns an enum value. UCOL_GREATER if source (up to the specified - * length) is greater than target; UCOL_EQUAL if source (up to specified - * length) is equal to target; UCOL_LESS if source (up to the specified - * length) is less than target. - * @stable ICU 2.6 - */ - virtual UCollationResult compare(const UnicodeString& source, - const UnicodeString& target, - int32_t length, - UErrorCode &status) const; - - /** - * The comparison function compares the character data stored in two - * different string arrays. Returns information about whether a string array - * is less than, greater than or equal to another string array. - * @param source the source string array to be compared with. - * @param sourceLength the length of the source string array. If this value - * is equal to -1, the string array is null-terminated. - * @param target the string that is to be compared with the source string. - * @param targetLength the length of the target string array. If this value - * is equal to -1, the string array is null-terminated. - * @param status possible error code - * @return Returns an enum value. UCOL_GREATER if source is greater - * than target; UCOL_EQUAL if source is equal to target; UCOL_LESS if source is less - * than target - * @stable ICU 2.6 - */ - virtual UCollationResult compare(const char16_t* source, int32_t sourceLength, - const char16_t* target, int32_t targetLength, - UErrorCode &status) const; - - /** - * Compares two strings using the Collator. - * Returns whether the first one compares less than/equal to/greater than - * the second one. - * This version takes UCharIterator input. - * @param sIter the first ("source") string iterator - * @param tIter the second ("target") string iterator - * @param status ICU status - * @return UCOL_LESS, UCOL_EQUAL or UCOL_GREATER - * @stable ICU 4.2 - */ - virtual UCollationResult compare(UCharIterator &sIter, - UCharIterator &tIter, - UErrorCode &status) const; - - /** - * Compares two UTF-8 strings using the Collator. - * Returns whether the first one compares less than/equal to/greater than - * the second one. - * This version takes UTF-8 input. - * Note that a StringPiece can be implicitly constructed - * from a std::string or a NUL-terminated const char * string. - * @param source the first UTF-8 string - * @param target the second UTF-8 string - * @param status ICU status - * @return UCOL_LESS, UCOL_EQUAL or UCOL_GREATER - * @stable ICU 51 - */ - virtual UCollationResult compareUTF8(const StringPiece &source, - const StringPiece &target, - UErrorCode &status) const; - - /** - * Transforms the string into a series of characters - * that can be compared with CollationKey.compare(). - * - * Note that sort keys are often less efficient than simply doing comparison. - * For more details, see the ICU User Guide. - * - * @param source the source string. - * @param key the transformed key of the source string. - * @param status the error code status. - * @return the transformed key. - * @see CollationKey - * @stable ICU 2.0 - */ - virtual CollationKey& getCollationKey(const UnicodeString& source, - CollationKey& key, - UErrorCode& status) const; - - /** - * Transforms a specified region of the string into a series of characters - * that can be compared with CollationKey.compare. - * - * Note that sort keys are often less efficient than simply doing comparison. - * For more details, see the ICU User Guide. - * - * @param source the source string. - * @param sourceLength the length of the source string. - * @param key the transformed key of the source string. - * @param status the error code status. - * @return the transformed key. - * @see CollationKey - * @stable ICU 2.0 - */ - virtual CollationKey& getCollationKey(const char16_t *source, - int32_t sourceLength, - CollationKey& key, - UErrorCode& status) const; - - /** - * Generates the hash code for the rule-based collation object. - * @return the hash code. - * @stable ICU 2.0 - */ - virtual int32_t hashCode() const; - - /** - * Gets the locale of the Collator - * @param type can be either requested, valid or actual locale. For more - * information see the definition of ULocDataLocaleType in - * uloc.h - * @param status the error code status. - * @return locale where the collation data lives. If the collator - * was instantiated from rules, locale is empty. - * @deprecated ICU 2.8 likely to change in ICU 3.0, based on feedback - */ - virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const; - - /** - * Gets the tailoring rules for this collator. - * @return the collation tailoring from which this collator was created - * @stable ICU 2.0 - */ - const UnicodeString& getRules() const; - - /** - * Gets the version information for a Collator. - * @param info the version # information, the result will be filled in - * @stable ICU 2.0 - */ - virtual void getVersion(UVersionInfo info) const; - -#ifndef U_HIDE_DEPRECATED_API - /** - * Returns the maximum length of any expansion sequences that end with the - * specified comparison order. - * - * This is specific to the kind of collation element values and sequences - * returned by the CollationElementIterator. - * Call CollationElementIterator::getMaxExpansion() instead. - * - * @param order a collation order returned by CollationElementIterator::previous - * or CollationElementIterator::next. - * @return maximum size of the expansion sequences ending with the collation - * element, or 1 if the collation element does not occur at the end of - * any expansion sequence - * @see CollationElementIterator#getMaxExpansion - * @deprecated ICU 51 Use CollationElementIterator::getMaxExpansion() instead. - */ - int32_t getMaxExpansion(int32_t order) const; -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * @return The class ID for this object. All objects of a given class have - * the same class ID. Objects of other classes have different class - * IDs. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const; - - /** - * Returns the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *

-     * Base* polymorphic_pointer = createPolymorphicObject();
-     * if (polymorphic_pointer->getDynamicClassID() ==
-     *                                          Derived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - -#ifndef U_HIDE_DEPRECATED_API - /** - * Do not use this method: The caller and the ICU library might use different heaps. - * Use cloneBinary() instead which writes to caller-provided memory. - * - * Returns a binary format of this collator. - * @param length Returns the length of the data, in bytes - * @param status the error code status. - * @return memory, owned by the caller, of size 'length' bytes. - * @deprecated ICU 52. Use cloneBinary() instead. - */ - uint8_t *cloneRuleData(int32_t &length, UErrorCode &status) const; -#endif /* U_HIDE_DEPRECATED_API */ - - /** Creates a binary image of a collator. This binary image can be stored and - * later used to instantiate a collator using ucol_openBinary. - * This API supports preflighting. - * @param buffer a fill-in buffer to receive the binary image - * @param capacity capacity of the destination buffer - * @param status for catching errors - * @return size of the image - * @see ucol_openBinary - * @stable ICU 3.4 - */ - int32_t cloneBinary(uint8_t *buffer, int32_t capacity, UErrorCode &status) const; - - /** - * Returns current rules. Delta defines whether full rules are returned or - * just the tailoring. - * - * getRules(void) should normally be used instead. - * See http://userguide.icu-project.org/collation/customization#TOC-Building-on-Existing-Locales - * @param delta one of UCOL_TAILORING_ONLY, UCOL_FULL_RULES. - * @param buffer UnicodeString to store the result rules - * @stable ICU 2.2 - * @see UCOL_FULL_RULES - */ - void getRules(UColRuleOption delta, UnicodeString &buffer) const; - - /** - * Universal attribute setter - * @param attr attribute type - * @param value attribute value - * @param status to indicate whether the operation went on smoothly or there were errors - * @stable ICU 2.2 - */ - virtual void setAttribute(UColAttribute attr, UColAttributeValue value, - UErrorCode &status); - - /** - * Universal attribute getter. - * @param attr attribute type - * @param status to indicate whether the operation went on smoothly or there were errors - * @return attribute value - * @stable ICU 2.2 - */ - virtual UColAttributeValue getAttribute(UColAttribute attr, - UErrorCode &status) const; - - /** - * Sets the variable top to the top of the specified reordering group. - * The variable top determines the highest-sorting character - * which is affected by UCOL_ALTERNATE_HANDLING. - * If that attribute is set to UCOL_NON_IGNORABLE, then the variable top has no effect. - * @param group one of UCOL_REORDER_CODE_SPACE, UCOL_REORDER_CODE_PUNCTUATION, - * UCOL_REORDER_CODE_SYMBOL, UCOL_REORDER_CODE_CURRENCY; - * or UCOL_REORDER_CODE_DEFAULT to restore the default max variable group - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return *this - * @see getMaxVariable - * @stable ICU 53 - */ - virtual Collator &setMaxVariable(UColReorderCode group, UErrorCode &errorCode); - - /** - * Returns the maximum reordering group whose characters are affected by UCOL_ALTERNATE_HANDLING. - * @return the maximum variable reordering group. - * @see setMaxVariable - * @stable ICU 53 - */ - virtual UColReorderCode getMaxVariable() const; - - /** - * Sets the variable top to the primary weight of the specified string. - * - * Beginning with ICU 53, the variable top is pinned to - * the top of one of the supported reordering groups, - * and it must not be beyond the last of those groups. - * See setMaxVariable(). - * @param varTop one or more (if contraction) char16_ts to which the variable top should be set - * @param len length of variable top string. If -1 it is considered to be zero terminated. - * @param status error code. If error code is set, the return value is undefined. Errors set by this function are:
- * U_CE_NOT_FOUND_ERROR if more than one character was passed and there is no such contraction
- * U_ILLEGAL_ARGUMENT_ERROR if the variable top is beyond - * the last reordering group supported by setMaxVariable() - * @return variable top primary weight - * @deprecated ICU 53 Call setMaxVariable() instead. - */ - virtual uint32_t setVariableTop(const char16_t *varTop, int32_t len, UErrorCode &status); - - /** - * Sets the variable top to the primary weight of the specified string. - * - * Beginning with ICU 53, the variable top is pinned to - * the top of one of the supported reordering groups, - * and it must not be beyond the last of those groups. - * See setMaxVariable(). - * @param varTop a UnicodeString size 1 or more (if contraction) of char16_ts to which the variable top should be set - * @param status error code. If error code is set, the return value is undefined. Errors set by this function are:
- * U_CE_NOT_FOUND_ERROR if more than one character was passed and there is no such contraction
- * U_ILLEGAL_ARGUMENT_ERROR if the variable top is beyond - * the last reordering group supported by setMaxVariable() - * @return variable top primary weight - * @deprecated ICU 53 Call setMaxVariable() instead. - */ - virtual uint32_t setVariableTop(const UnicodeString &varTop, UErrorCode &status); - - /** - * Sets the variable top to the specified primary weight. - * - * Beginning with ICU 53, the variable top is pinned to - * the top of one of the supported reordering groups, - * and it must not be beyond the last of those groups. - * See setMaxVariable(). - * @param varTop primary weight, as returned by setVariableTop or ucol_getVariableTop - * @param status error code - * @deprecated ICU 53 Call setMaxVariable() instead. - */ - virtual void setVariableTop(uint32_t varTop, UErrorCode &status); - - /** - * Gets the variable top value of a Collator. - * @param status error code (not changed by function). If error code is set, the return value is undefined. - * @return the variable top primary weight - * @see getMaxVariable - * @stable ICU 2.0 - */ - virtual uint32_t getVariableTop(UErrorCode &status) const; - - /** - * Get a UnicodeSet that contains all the characters and sequences tailored in - * this collator. - * @param status error code of the operation - * @return a pointer to a UnicodeSet object containing all the - * code points and sequences that may sort differently than - * in the root collator. The object must be disposed of by using delete - * @stable ICU 2.4 - */ - virtual UnicodeSet *getTailoredSet(UErrorCode &status) const; - - /** - * Get the sort key as an array of bytes from a UnicodeString. - * - * Note that sort keys are often less efficient than simply doing comparison. - * For more details, see the ICU User Guide. - * - * @param source string to be processed. - * @param result buffer to store result in. If NULL, number of bytes needed - * will be returned. - * @param resultLength length of the result buffer. If if not enough the - * buffer will be filled to capacity. - * @return Number of bytes needed for storing the sort key - * @stable ICU 2.0 - */ - virtual int32_t getSortKey(const UnicodeString& source, uint8_t *result, - int32_t resultLength) const; - - /** - * Get the sort key as an array of bytes from a char16_t buffer. - * - * Note that sort keys are often less efficient than simply doing comparison. - * For more details, see the ICU User Guide. - * - * @param source string to be processed. - * @param sourceLength length of string to be processed. If -1, the string - * is 0 terminated and length will be decided by the function. - * @param result buffer to store result in. If NULL, number of bytes needed - * will be returned. - * @param resultLength length of the result buffer. If if not enough the - * buffer will be filled to capacity. - * @return Number of bytes needed for storing the sort key - * @stable ICU 2.2 - */ - virtual int32_t getSortKey(const char16_t *source, int32_t sourceLength, - uint8_t *result, int32_t resultLength) const; - - /** - * Retrieves the reordering codes for this collator. - * @param dest The array to fill with the script ordering. - * @param destCapacity The length of dest. If it is 0, then dest may be NULL and the function - * will only return the length of the result without writing any codes (pre-flighting). - * @param status A reference to an error code value, which must not indicate - * a failure before the function call. - * @return The length of the script ordering array. - * @see ucol_setReorderCodes - * @see Collator#getEquivalentReorderCodes - * @see Collator#setReorderCodes - * @stable ICU 4.8 - */ - virtual int32_t getReorderCodes(int32_t *dest, - int32_t destCapacity, - UErrorCode& status) const; - - /** - * Sets the ordering of scripts for this collator. - * @param reorderCodes An array of script codes in the new order. This can be NULL if the - * length is also set to 0. An empty array will clear any reordering codes on the collator. - * @param reorderCodesLength The length of reorderCodes. - * @param status error code - * @see ucol_setReorderCodes - * @see Collator#getReorderCodes - * @see Collator#getEquivalentReorderCodes - * @stable ICU 4.8 - */ - virtual void setReorderCodes(const int32_t* reorderCodes, - int32_t reorderCodesLength, - UErrorCode& status) ; - - /** - * Implements ucol_strcollUTF8(). - * @internal - */ - virtual UCollationResult internalCompareUTF8( - const char *left, int32_t leftLength, - const char *right, int32_t rightLength, - UErrorCode &errorCode) const; - - /** Get the short definition string for a collator. This internal API harvests the collator's - * locale and the attribute set and produces a string that can be used for opening - * a collator with the same attributes using the ucol_openFromShortString API. - * This string will be normalized. - * The structure and the syntax of the string is defined in the "Naming collators" - * section of the users guide: - * http://userguide.icu-project.org/collation/concepts#TOC-Collator-naming-scheme - * This function supports preflighting. - * - * This is internal, and intended to be used with delegate converters. - * - * @param locale a locale that will appear as a collators locale in the resulting - * short string definition. If NULL, the locale will be harvested - * from the collator. - * @param buffer space to hold the resulting string - * @param capacity capacity of the buffer - * @param status for returning errors. All the preflighting errors are featured - * @return length of the resulting string - * @see ucol_openFromShortString - * @see ucol_normalizeShortDefinitionString - * @see ucol_getShortDefinitionString - * @internal - */ - virtual int32_t internalGetShortDefinitionString(const char *locale, - char *buffer, - int32_t capacity, - UErrorCode &status) const; - - /** - * Implements ucol_nextSortKeyPart(). - * @internal - */ - virtual int32_t internalNextSortKeyPart( - UCharIterator *iter, uint32_t state[2], - uint8_t *dest, int32_t count, UErrorCode &errorCode) const; - - // Do not enclose the default constructor with #ifndef U_HIDE_INTERNAL_API - /** - * Only for use in ucol_openRules(). - * @internal - */ - RuleBasedCollator(); - -#ifndef U_HIDE_INTERNAL_API - /** - * Implements ucol_getLocaleByType(). - * Needed because the lifetime of the locale ID string must match that of the collator. - * getLocale() returns a copy of a Locale, with minimal lifetime in a C wrapper. - * @internal - */ - const char *internalGetLocaleID(ULocDataLocaleType type, UErrorCode &errorCode) const; - - /** - * Implements ucol_getContractionsAndExpansions(). - * Gets this collator's sets of contraction strings and/or - * characters and strings that map to multiple collation elements (expansions). - * If addPrefixes is TRUE, then contractions that are expressed as - * prefix/pre-context rules are included. - * @param contractions if not NULL, the set to hold the contractions - * @param expansions if not NULL, the set to hold the expansions - * @param addPrefixes include prefix contextual mappings - * @param errorCode in/out ICU error code - * @internal - */ - void internalGetContractionsAndExpansions( - UnicodeSet *contractions, UnicodeSet *expansions, - UBool addPrefixes, UErrorCode &errorCode) const; - - /** - * Adds the contractions that start with character c to the set. - * Ignores prefixes. Used by AlphabeticIndex. - * @internal - */ - void internalAddContractions(UChar32 c, UnicodeSet &set, UErrorCode &errorCode) const; - - /** - * Implements from-rule constructors, and ucol_openRules(). - * @internal - */ - void internalBuildTailoring( - const UnicodeString &rules, - int32_t strength, - UColAttributeValue decompositionMode, - UParseError *outParseError, UnicodeString *outReason, - UErrorCode &errorCode); - - /** @internal */ - static inline RuleBasedCollator *rbcFromUCollator(UCollator *uc) { - return dynamic_cast(fromUCollator(uc)); - } - /** @internal */ - static inline const RuleBasedCollator *rbcFromUCollator(const UCollator *uc) { - return dynamic_cast(fromUCollator(uc)); - } - - /** - * Appends the CEs for the string to the vector. - * @internal for tests & tools - */ - void internalGetCEs(const UnicodeString &str, UVector64 &ces, UErrorCode &errorCode) const; -#endif // U_HIDE_INTERNAL_API - -protected: - /** - * Used internally by registration to define the requested and valid locales. - * @param requestedLocale the requested locale - * @param validLocale the valid locale - * @param actualLocale the actual locale - * @internal - */ - virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale); - -private: - friend class CollationElementIterator; - friend class Collator; - - RuleBasedCollator(const CollationCacheEntry *entry); - - /** - * Enumeration of attributes that are relevant for short definition strings - * (e.g., ucol_getShortDefinitionString()). - * Effectively extends UColAttribute. - */ - enum Attributes { - ATTR_VARIABLE_TOP = UCOL_ATTRIBUTE_COUNT, - ATTR_LIMIT - }; - - void adoptTailoring(CollationTailoring *t, UErrorCode &errorCode); - - // Both lengths must be <0 or else both must be >=0. - UCollationResult doCompare(const char16_t *left, int32_t leftLength, - const char16_t *right, int32_t rightLength, - UErrorCode &errorCode) const; - UCollationResult doCompare(const uint8_t *left, int32_t leftLength, - const uint8_t *right, int32_t rightLength, - UErrorCode &errorCode) const; - - void writeSortKey(const char16_t *s, int32_t length, - SortKeyByteSink &sink, UErrorCode &errorCode) const; - - void writeIdenticalLevel(const char16_t *s, const char16_t *limit, - SortKeyByteSink &sink, UErrorCode &errorCode) const; - - const CollationSettings &getDefaultSettings() const; - - void setAttributeDefault(int32_t attribute) { - explicitlySetAttributes &= ~((uint32_t)1 << attribute); - } - void setAttributeExplicitly(int32_t attribute) { - explicitlySetAttributes |= (uint32_t)1 << attribute; - } - UBool attributeHasBeenSetExplicitly(int32_t attribute) const { - // assert(0 <= attribute < ATTR_LIMIT); - return (UBool)((explicitlySetAttributes & ((uint32_t)1 << attribute)) != 0); - } - - /** - * Tests whether a character is "unsafe" for use as a collation starting point. - * - * @param c code point or code unit - * @return TRUE if c is unsafe - * @see CollationElementIterator#setOffset(int) - */ - UBool isUnsafe(UChar32 c) const; - - static void U_CALLCONV computeMaxExpansions(const CollationTailoring *t, UErrorCode &errorCode); - UBool initMaxExpansions(UErrorCode &errorCode) const; - - void setFastLatinOptions(CollationSettings &ownedSettings) const; - - const CollationData *data; - const CollationSettings *settings; // reference-counted - const CollationTailoring *tailoring; // alias of cacheEntry->tailoring - const CollationCacheEntry *cacheEntry; // reference-counted - Locale validLocale; - uint32_t explicitlySetAttributes; - - UBool actualLocaleIsSameAsValid; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // !UCONFIG_NO_COLLATION -#endif // TBLCOLL_H diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/timezone.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/timezone.h deleted file mode 100644 index 552da8cd68..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/timezone.h +++ /dev/null @@ -1,978 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/************************************************************************* -* Copyright (c) 1997-2016, International Business Machines Corporation -* and others. All Rights Reserved. -************************************************************************** -* -* File TIMEZONE.H -* -* Modification History: -* -* Date Name Description -* 04/21/97 aliu Overhauled header. -* 07/09/97 helena Changed createInstance to createDefault. -* 08/06/97 aliu Removed dependency on internal header for Hashtable. -* 08/10/98 stephen Changed getDisplayName() API conventions to match -* 08/19/98 stephen Changed createTimeZone() to never return 0 -* 09/02/98 stephen Sync to JDK 1.2 8/31 -* - Added getOffset(... monthlen ...) -* - Added hasSameRules() -* 09/15/98 stephen Added getStaticClassID -* 12/03/99 aliu Moved data out of static table into icudata.dll. -* Hashtable replaced by new static data structures. -* 12/14/99 aliu Made GMT public. -* 08/15/01 grhoten Made GMT private and added the getGMT() function -************************************************************************** -*/ - -#ifndef TIMEZONE_H -#define TIMEZONE_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: TimeZone object - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/uobject.h" -#include "unicode/unistr.h" -#include "unicode/ures.h" -#include "unicode/ucal.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class StringEnumeration; - -/** - * - * TimeZone represents a time zone offset, and also figures out daylight - * savings. - * - *

- * Typically, you get a TimeZone using createDefault - * which creates a TimeZone based on the time zone where the program - * is running. For example, for a program running in Japan, createDefault - * creates a TimeZone object based on Japanese Standard Time. - * - *

- * You can also get a TimeZone using createTimeZone along - * with a time zone ID. For instance, the time zone ID for the US Pacific - * Time zone is "America/Los_Angeles". So, you can get a Pacific Time TimeZone object - * with: - * \htmlonly

\endhtmlonly - *
- * TimeZone *tz = TimeZone::createTimeZone("America/Los_Angeles");
- * 
- * \htmlonly
\endhtmlonly - * You can use the createEnumeration method to iterate through - * all the supported time zone IDs, or the getCanonicalID method to check - * if a time zone ID is supported or not. You can then choose a - * supported ID to get a TimeZone. - * If the time zone you want is not represented by one of the - * supported IDs, then you can create a custom time zone ID with - * the following syntax: - * - * \htmlonly
\endhtmlonly - *
- * GMT[+|-]hh[[:]mm]
- * 
- * \htmlonly
\endhtmlonly - * - * For example, you might specify GMT+14:00 as a custom - * time zone ID. The TimeZone that is returned - * when you specify a custom time zone ID uses the specified - * offset from GMT(=UTC) and does not observe daylight saving - * time. For example, you might specify GMT+14:00 as a custom - * time zone ID to create a TimeZone representing 14 hours ahead - * of GMT (with no daylight saving time). In addition, - * getCanonicalID can also be used to - * normalize a custom time zone ID. - * - * TimeZone is an abstract class representing a time zone. A TimeZone is needed for - * Calendar to produce local time for a particular time zone. A TimeZone comprises - * three basic pieces of information: - *
    - *
  • A time zone offset; that, is the number of milliseconds to add or subtract - * from a time expressed in terms of GMT to convert it to the same time in that - * time zone (without taking daylight savings time into account).
  • - *
  • Logic necessary to take daylight savings time into account if daylight savings - * time is observed in that time zone (e.g., the days and hours on which daylight - * savings time begins and ends).
  • - *
  • An ID. This is a text string that uniquely identifies the time zone.
  • - *
- * - * (Only the ID is actually implemented in TimeZone; subclasses of TimeZone may handle - * daylight savings time and GMT offset in different ways. Currently we have the following - * TimeZone subclasses: RuleBasedTimeZone, SimpleTimeZone, and VTimeZone.) - *

- * The TimeZone class contains a static list containing a TimeZone object for every - * combination of GMT offset and daylight-savings time rules currently in use in the - * world, each with a unique ID. Each ID consists of a region (usually a continent or - * ocean) and a city in that region, separated by a slash, (for example, US Pacific - * Time is "America/Los_Angeles.") Because older versions of this class used - * three- or four-letter abbreviations instead, there is also a table that maps the older - * abbreviations to the newer ones (for example, "PST" maps to "America/Los_Angeles"). - * Anywhere the API requires an ID, you can use either form. - *

- * To create a new TimeZone, you call the factory function TimeZone::createTimeZone() - * and pass it a time zone ID. You can use the createEnumeration() function to - * obtain a list of all the time zone IDs recognized by createTimeZone(). - *

- * You can also use TimeZone::createDefault() to create a TimeZone. This function uses - * platform-specific APIs to produce a TimeZone for the time zone corresponding to - * the client's computer's physical location. For example, if you're in Japan (assuming - * your machine is set up correctly), TimeZone::createDefault() will return a TimeZone - * for Japanese Standard Time ("Asia/Tokyo"). - */ -class U_I18N_API TimeZone : public UObject { -public: - /** - * @stable ICU 2.0 - */ - virtual ~TimeZone(); - - /** - * Returns the "unknown" time zone. - * It behaves like the GMT/UTC time zone but has the - * UCAL_UNKNOWN_ZONE_ID = "Etc/Unknown". - * createTimeZone() returns a mutable clone of this time zone if the input ID is not recognized. - * - * @return the "unknown" time zone. - * @see UCAL_UNKNOWN_ZONE_ID - * @see createTimeZone - * @see getGMT - * @stable ICU 49 - */ - static const TimeZone& U_EXPORT2 getUnknown(); - - /** - * The GMT (=UTC) time zone has a raw offset of zero and does not use daylight - * savings time. This is a commonly used time zone. - * - *

Note: For backward compatibility reason, the ID used by the time - * zone returned by this method is "GMT", although the ICU's canonical - * ID for the GMT time zone is "Etc/GMT". - * - * @return the GMT/UTC time zone. - * @see getUnknown - * @stable ICU 2.0 - */ - static const TimeZone* U_EXPORT2 getGMT(void); - - /** - * Creates a TimeZone for the given ID. - * @param ID the ID for a TimeZone, such as "America/Los_Angeles", - * or a custom ID such as "GMT-8:00". - * @return the specified TimeZone, or a mutable clone of getUnknown() - * if the given ID cannot be understood or if the given ID is "Etc/Unknown". - * The return result is guaranteed to be non-NULL. - * If you require that the specific zone asked for be returned, - * compare the result with getUnknown() or check the ID of the return result. - * @stable ICU 2.0 - */ - static TimeZone* U_EXPORT2 createTimeZone(const UnicodeString& ID); - - /** - * Returns an enumeration over system time zone IDs with the given - * filter conditions. - * @param zoneType The system time zone type. - * @param region The ISO 3166 two-letter country code or UN M.49 - * three-digit area code. When NULL, no filtering - * done by region. - * @param rawOffset An offset from GMT in milliseconds, ignoring - * the effect of daylight savings time, if any. - * When NULL, no filtering done by zone offset. - * @param ec Output param to filled in with a success or - * an error. - * @return an enumeration object, owned by the caller. - * @stable ICU 4.8 - */ - static StringEnumeration* U_EXPORT2 createTimeZoneIDEnumeration( - USystemTimeZoneType zoneType, - const char* region, - const int32_t* rawOffset, - UErrorCode& ec); - - /** - * Returns an enumeration over all recognized time zone IDs. (i.e., - * all strings that createTimeZone() accepts) - * - * @return an enumeration object, owned by the caller. - * @stable ICU 2.4 - */ - static StringEnumeration* U_EXPORT2 createEnumeration(); - - /** - * Returns an enumeration over time zone IDs with a given raw - * offset from GMT. There may be several times zones with the - * same GMT offset that differ in the way they handle daylight - * savings time. For example, the state of Arizona doesn't - * observe daylight savings time. If you ask for the time zone - * IDs corresponding to GMT-7:00, you'll get back an enumeration - * over two time zone IDs: "America/Denver," which corresponds to - * Mountain Standard Time in the winter and Mountain Daylight Time - * in the summer, and "America/Phoenix", which corresponds to - * Mountain Standard Time year-round, even in the summer. - * - * @param rawOffset an offset from GMT in milliseconds, ignoring - * the effect of daylight savings time, if any - * @return an enumeration object, owned by the caller - * @stable ICU 2.4 - */ - static StringEnumeration* U_EXPORT2 createEnumeration(int32_t rawOffset); - - /** - * Returns an enumeration over time zone IDs associated with the - * given country. Some zones are affiliated with no country - * (e.g., "UTC"); these may also be retrieved, as a group. - * - * @param country The ISO 3166 two-letter country code, or NULL to - * retrieve zones not affiliated with any country. - * @return an enumeration object, owned by the caller - * @stable ICU 2.4 - */ - static StringEnumeration* U_EXPORT2 createEnumeration(const char* country); - - /** - * Returns the number of IDs in the equivalency group that - * includes the given ID. An equivalency group contains zones - * that have the same GMT offset and rules. - * - *

The returned count includes the given ID; it is always >= 1. - * The given ID must be a system time zone. If it is not, returns - * zero. - * @param id a system time zone ID - * @return the number of zones in the equivalency group containing - * 'id', or zero if 'id' is not a valid system ID - * @see #getEquivalentID - * @stable ICU 2.0 - */ - static int32_t U_EXPORT2 countEquivalentIDs(const UnicodeString& id); - - /** - * Returns an ID in the equivalency group that - * includes the given ID. An equivalency group contains zones - * that have the same GMT offset and rules. - * - *

The given index must be in the range 0..n-1, where n is the - * value returned by countEquivalentIDs(id). For - * some value of 'index', the returned value will be equal to the - * given id. If the given id is not a valid system time zone, or - * if 'index' is out of range, then returns an empty string. - * @param id a system time zone ID - * @param index a value from 0 to n-1, where n is the value - * returned by countEquivalentIDs(id) - * @return the ID of the index-th zone in the equivalency group - * containing 'id', or an empty string if 'id' is not a valid - * system ID or 'index' is out of range - * @see #countEquivalentIDs - * @stable ICU 2.0 - */ - static const UnicodeString U_EXPORT2 getEquivalentID(const UnicodeString& id, - int32_t index); - - /** - * Creates an instance of TimeZone detected from the current host - * system configuration. If the host system detection routines fail, - * or if they specify a TimeZone or TimeZone offset which is not - * recognized, then the special TimeZone "Etc/Unknown" is returned. - * - * Note that ICU4C does not change the default time zone unless - * `TimeZone::adoptDefault(TimeZone*)` or - * `TimeZone::setDefault(const TimeZone&)` is explicitly called by a - * user. This method does not update the current ICU's default, - * and may return a different TimeZone from the one returned by - * `TimeZone::createDefault()`. - * - *

This function is not thread safe.

- * - * @return A new instance of TimeZone detected from the current host system - * configuration. - * @see adoptDefault - * @see setDefault - * @see createDefault - * @see getUnknown - * @stable ICU 55 - */ - static TimeZone* U_EXPORT2 detectHostTimeZone(); - - /** - * Creates a new copy of the default TimeZone for this host. Unless the default time - * zone has already been set using adoptDefault() or setDefault(), the default is - * determined by querying the host system configuration. If the host system detection - * routines fail, or if they specify a TimeZone or TimeZone offset which is not - * recognized, then the special TimeZone "Etc/Unknown" is instantiated and made the - * default. - * - * @return A default TimeZone. Clients are responsible for deleting the time zone - * object returned. - * @see getUnknown - * @stable ICU 2.0 - */ - static TimeZone* U_EXPORT2 createDefault(void); - - /** - * Sets the default time zone (i.e., what's returned by createDefault()) to be the - * specified time zone. If NULL is specified for the time zone, the default time - * zone is set to the default host time zone. This call adopts the TimeZone object - * passed in; the client is no longer responsible for deleting it. - * - *

This function is not thread safe. It is an error for multiple threads - * to concurrently attempt to set the default time zone, or for any thread - * to attempt to reference the default zone while another thread is setting it. - * - * @param zone A pointer to the new TimeZone object to use as the default. - * @stable ICU 2.0 - */ - static void U_EXPORT2 adoptDefault(TimeZone* zone); - -#ifndef U_HIDE_SYSTEM_API - /** - * Same as adoptDefault(), except that the TimeZone object passed in is NOT adopted; - * the caller remains responsible for deleting it. - * - *

See the thread safety note under adoptDefault(). - * - * @param zone The given timezone. - * @system - * @stable ICU 2.0 - */ - static void U_EXPORT2 setDefault(const TimeZone& zone); -#endif /* U_HIDE_SYSTEM_API */ - - /** - * Returns the timezone data version currently used by ICU. - * @param status Output param to filled in with a success or an error. - * @return the version string, such as "2007f" - * @stable ICU 3.8 - */ - static const char* U_EXPORT2 getTZDataVersion(UErrorCode& status); - - /** - * Returns the canonical system timezone ID or the normalized - * custom time zone ID for the given time zone ID. - * @param id The input time zone ID to be canonicalized. - * @param canonicalID Receives the canonical system time zone ID - * or the custom time zone ID in normalized format. - * @param status Receives the status. When the given time zone ID - * is neither a known system time zone ID nor a - * valid custom time zone ID, U_ILLEGAL_ARGUMENT_ERROR - * is set. - * @return A reference to the result. - * @stable ICU 4.0 - */ - static UnicodeString& U_EXPORT2 getCanonicalID(const UnicodeString& id, - UnicodeString& canonicalID, UErrorCode& status); - - /** - * Returns the canonical system time zone ID or the normalized - * custom time zone ID for the given time zone ID. - * @param id The input time zone ID to be canonicalized. - * @param canonicalID Receives the canonical system time zone ID - * or the custom time zone ID in normalized format. - * @param isSystemID Receives if the given ID is a known system - * time zone ID. - * @param status Receives the status. When the given time zone ID - * is neither a known system time zone ID nor a - * valid custom time zone ID, U_ILLEGAL_ARGUMENT_ERROR - * is set. - * @return A reference to the result. - * @stable ICU 4.0 - */ - static UnicodeString& U_EXPORT2 getCanonicalID(const UnicodeString& id, - UnicodeString& canonicalID, UBool& isSystemID, UErrorCode& status); - - /** - * Converts a system time zone ID to an equivalent Windows time zone ID. For example, - * Windows time zone ID "Pacific Standard Time" is returned for input "America/Los_Angeles". - * - *

There are system time zones that cannot be mapped to Windows zones. When the input - * system time zone ID is unknown or unmappable to a Windows time zone, then the result will be - * empty, but the operation itself remains successful (no error status set on return). - * - *

This implementation utilizes - * Zone-Tzid mapping data. The mapping data is updated time to time. To get the latest changes, - * please read the ICU user guide section - * Updating the Time Zone Data. - * - * @param id A system time zone ID. - * @param winid Receives a Windows time zone ID. When the input system time zone ID is unknown - * or unmappable to a Windows time zone ID, then an empty string is set on return. - * @param status Receives the status. - * @return A reference to the result (winid). - * @see getIDForWindowsID - * - * @stable ICU 52 - */ - static UnicodeString& U_EXPORT2 getWindowsID(const UnicodeString& id, - UnicodeString& winid, UErrorCode& status); - - /** - * Converts a Windows time zone ID to an equivalent system time zone ID - * for a region. For example, system time zone ID "America/Los_Angeles" is returned - * for input Windows ID "Pacific Standard Time" and region "US" (or null), - * "America/Vancouver" is returned for the same Windows ID "Pacific Standard Time" and - * region "CA". - * - *

Not all Windows time zones can be mapped to system time zones. When the input - * Windows time zone ID is unknown or unmappable to a system time zone, then the result - * will be empty, but the operation itself remains successful (no error status set on return). - * - *

This implementation utilizes - * Zone-Tzid mapping data. The mapping data is updated time to time. To get the latest changes, - * please read the ICU user guide section - * Updating the Time Zone Data. - * - * @param winid A Windows time zone ID. - * @param region A null-terminated region code, or NULL if no regional preference. - * @param id Receives a system time zone ID. When the input Windows time zone ID is unknown - * or unmappable to a system time zone ID, then an empty string is set on return. - * @param status Receives the status. - * @return A reference to the result (id). - * @see getWindowsID - * - * @stable ICU 52 - */ - static UnicodeString& U_EXPORT2 getIDForWindowsID(const UnicodeString& winid, const char* region, - UnicodeString& id, UErrorCode& status); - - /** - * Returns true if the two TimeZones are equal. (The TimeZone version only compares - * IDs, but subclasses are expected to also compare the fields they add.) - * - * @param that The TimeZone object to be compared with. - * @return True if the given TimeZone is equal to this TimeZone; false - * otherwise. - * @stable ICU 2.0 - */ - virtual UBool operator==(const TimeZone& that) const; - - /** - * Returns true if the two TimeZones are NOT equal; that is, if operator==() returns - * false. - * - * @param that The TimeZone object to be compared with. - * @return True if the given TimeZone is not equal to this TimeZone; false - * otherwise. - * @stable ICU 2.0 - */ - UBool operator!=(const TimeZone& that) const {return !operator==(that);} - - /** - * Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add - * to GMT to get local time in this time zone, taking daylight savings time into - * account) as of a particular reference date. The reference date is used to determine - * whether daylight savings time is in effect and needs to be figured into the offset - * that is returned (in other words, what is the adjusted GMT offset in this time zone - * at this particular date and time?). For the time zones produced by createTimeZone(), - * the reference data is specified according to the Gregorian calendar, and the date - * and time fields are local standard time. - * - *

Note: Don't call this method. Instead, call the getOffset(UDate...) overload, - * which returns both the raw and the DST offset for a given time. This method - * is retained only for backward compatibility. - * - * @param era The reference date's era - * @param year The reference date's year - * @param month The reference date's month (0-based; 0 is January) - * @param day The reference date's day-in-month (1-based) - * @param dayOfWeek The reference date's day-of-week (1-based; 1 is Sunday) - * @param millis The reference date's milliseconds in day, local standard time - * @param status Output param to filled in with a success or an error. - * @return The offset in milliseconds to add to GMT to get local time. - * @stable ICU 2.0 - */ - virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, - uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const = 0; - - /** - * Gets the time zone offset, for current date, modified in case of - * daylight savings. This is the offset to add *to* UTC to get local time. - * - *

Note: Don't call this method. Instead, call the getOffset(UDate...) overload, - * which returns both the raw and the DST offset for a given time. This method - * is retained only for backward compatibility. - * - * @param era the era of the given date. - * @param year the year in the given date. - * @param month the month in the given date. - * Month is 0-based. e.g., 0 for January. - * @param day the day-in-month of the given date. - * @param dayOfWeek the day-of-week of the given date. - * @param milliseconds the millis in day in standard local time. - * @param monthLength the length of the given month in days. - * @param status Output param to filled in with a success or an error. - * @return the offset to add *to* GMT to get local time. - * @stable ICU 2.0 - */ - virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, - uint8_t dayOfWeek, int32_t milliseconds, - int32_t monthLength, UErrorCode& status) const = 0; - - /** - * Returns the time zone raw and GMT offset for the given moment - * in time. Upon return, local-millis = GMT-millis + rawOffset + - * dstOffset. All computations are performed in the proleptic - * Gregorian calendar. The default implementation in the TimeZone - * class delegates to the 8-argument getOffset(). - * - * @param date moment in time for which to return offsets, in - * units of milliseconds from January 1, 1970 0:00 GMT, either GMT - * time or local wall time, depending on `local'. - * @param local if true, `date' is local wall time; otherwise it - * is in GMT time. - * @param rawOffset output parameter to receive the raw offset, that - * is, the offset not including DST adjustments - * @param dstOffset output parameter to receive the DST offset, - * that is, the offset to be added to `rawOffset' to obtain the - * total offset between local and GMT time. If DST is not in - * effect, this value is zero; otherwise it is a positive value, - * typically one hour. - * @param ec input-output error code - * - * @stable ICU 2.8 - */ - virtual void getOffset(UDate date, UBool local, int32_t& rawOffset, - int32_t& dstOffset, UErrorCode& ec) const; - - /** - * Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add - * to GMT to get local time, before taking daylight savings time into account). - * - * @param offsetMillis The new raw GMT offset for this time zone. - * @stable ICU 2.0 - */ - virtual void setRawOffset(int32_t offsetMillis) = 0; - - /** - * Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add - * to GMT to get local time, before taking daylight savings time into account). - * - * @return The TimeZone's raw GMT offset. - * @stable ICU 2.0 - */ - virtual int32_t getRawOffset(void) const = 0; - - /** - * Fills in "ID" with the TimeZone's ID. - * - * @param ID Receives this TimeZone's ID. - * @return A reference to 'ID' - * @stable ICU 2.0 - */ - UnicodeString& getID(UnicodeString& ID) const; - - /** - * Sets the TimeZone's ID to the specified value. This doesn't affect any other - * fields (for example, if you say< - * blockquote>

-     * .     TimeZone* foo = TimeZone::createTimeZone("America/New_York");
-     * .     foo.setID("America/Los_Angeles");
-     * 
\htmlonly\endhtmlonly - * the time zone's GMT offset and daylight-savings rules don't change to those for - * Los Angeles. They're still those for New York. Only the ID has changed.) - * - * @param ID The new time zone ID. - * @stable ICU 2.0 - */ - void setID(const UnicodeString& ID); - - /** - * Enum for use with getDisplayName - * @stable ICU 2.4 - */ - enum EDisplayType { - /** - * Selector for short display name - * @stable ICU 2.4 - */ - SHORT = 1, - /** - * Selector for long display name - * @stable ICU 2.4 - */ - LONG, - /** - * Selector for short generic display name - * @stable ICU 4.4 - */ - SHORT_GENERIC, - /** - * Selector for long generic display name - * @stable ICU 4.4 - */ - LONG_GENERIC, - /** - * Selector for short display name derived - * from time zone offset - * @stable ICU 4.4 - */ - SHORT_GMT, - /** - * Selector for long display name derived - * from time zone offset - * @stable ICU 4.4 - */ - LONG_GMT, - /** - * Selector for short display name derived - * from the time zone's fallback name - * @stable ICU 4.4 - */ - SHORT_COMMONLY_USED, - /** - * Selector for long display name derived - * from the time zone's fallback name - * @stable ICU 4.4 - */ - GENERIC_LOCATION - }; - - /** - * Returns a name of this time zone suitable for presentation to the user - * in the default locale. - * This method returns the long name, not including daylight savings. - * If the display name is not available for the locale, - * then this method returns a string in the localized GMT offset format - * such as GMT[+-]HH:mm. - * @param result the human-readable name of this time zone in the default locale. - * @return A reference to 'result'. - * @stable ICU 2.0 - */ - UnicodeString& getDisplayName(UnicodeString& result) const; - - /** - * Returns a name of this time zone suitable for presentation to the user - * in the specified locale. - * This method returns the long name, not including daylight savings. - * If the display name is not available for the locale, - * then this method returns a string in the localized GMT offset format - * such as GMT[+-]HH:mm. - * @param locale the locale in which to supply the display name. - * @param result the human-readable name of this time zone in the given locale - * or in the default locale if the given locale is not recognized. - * @return A reference to 'result'. - * @stable ICU 2.0 - */ - UnicodeString& getDisplayName(const Locale& locale, UnicodeString& result) const; - - /** - * Returns a name of this time zone suitable for presentation to the user - * in the default locale. - * If the display name is not available for the locale, - * then this method returns a string in the localized GMT offset format - * such as GMT[+-]HH:mm. - * @param inDaylight if true, return the daylight savings name. - * @param style - * @param result the human-readable name of this time zone in the default locale. - * @return A reference to 'result'. - * @stable ICU 2.0 - */ - UnicodeString& getDisplayName(UBool inDaylight, EDisplayType style, UnicodeString& result) const; - - /** - * Returns a name of this time zone suitable for presentation to the user - * in the specified locale. - * If the display name is not available for the locale, - * then this method returns a string in the localized GMT offset format - * such as GMT[+-]HH:mm. - * @param inDaylight if true, return the daylight savings name. - * @param style - * @param locale the locale in which to supply the display name. - * @param result the human-readable name of this time zone in the given locale - * or in the default locale if the given locale is not recognized. - * @return A reference to 'result'. - * @stable ICU 2.0 - */ - UnicodeString& getDisplayName(UBool inDaylight, EDisplayType style, const Locale& locale, UnicodeString& result) const; - - /** - * Queries if this time zone uses daylight savings time. - * @return true if this time zone uses daylight savings time, - * false, otherwise. - *

Note:The default implementation of - * ICU TimeZone uses the tz database, which supports historic - * rule changes, for system time zones. With the implementation, - * there are time zones that used daylight savings time in the - * past, but no longer used currently. For example, Asia/Tokyo has - * never used daylight savings time since 1951. Most clients would - * expect that this method to return FALSE for such case. - * The default implementation of this method returns TRUE - * when the time zone uses daylight savings time in the current - * (Gregorian) calendar year. - *

In Java 7, observesDaylightTime() was added in - * addition to useDaylightTime(). In Java, useDaylightTime() - * only checks if daylight saving time is observed by the last known - * rule. This specification might not be what most users would expect - * if daylight saving time is currently observed, but not scheduled - * in future. In this case, Java's userDaylightTime() returns - * false. To resolve the issue, Java 7 added observesDaylightTime(), - * which takes the current rule into account. The method observesDaylightTime() - * was added in ICU4J for supporting API signature compatibility with JDK. - * In general, ICU4C also provides JDK compatible methods, but the current - * implementation userDaylightTime() serves the purpose - * (takes the current rule into account), observesDaylightTime() - * is not added in ICU4C. In addition to useDaylightTime(), ICU4C - * BasicTimeZone class (Note that TimeZone::createTimeZone(const UnicodeString &ID) - * always returns a BasicTimeZone) provides a series of methods allowing - * historic and future time zone rule iteration, so you can check if daylight saving - * time is observed or not within a given period. - * - * @stable ICU 2.0 - */ - virtual UBool useDaylightTime(void) const = 0; - - /** - * Queries if the given date is in daylight savings time in - * this time zone. - * This method is wasteful since it creates a new GregorianCalendar and - * deletes it each time it is called. This is a deprecated method - * and provided only for Java compatibility. - * - * @param date the given UDate. - * @param status Output param filled in with success/error code. - * @return true if the given date is in daylight savings time, - * false, otherwise. - * @deprecated ICU 2.4. Use Calendar::inDaylightTime() instead. - */ - virtual UBool inDaylightTime(UDate date, UErrorCode& status) const = 0; - - /** - * Returns true if this zone has the same rule and offset as another zone. - * That is, if this zone differs only in ID, if at all. - * @param other the TimeZone object to be compared with - * @return true if the given zone is the same as this one, - * with the possible exception of the ID - * @stable ICU 2.0 - */ - virtual UBool hasSameRules(const TimeZone& other) const; - - /** - * Clones TimeZone objects polymorphically. Clients are responsible for deleting - * the TimeZone object cloned. - * - * @return A new copy of this TimeZone object. - * @stable ICU 2.0 - */ - virtual TimeZone* clone(void) const = 0; - - /** - * Return the class ID for this class. This is useful only for - * comparing to a return value from getDynamicClassID(). - * @return The class ID for all objects of this class. - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. This method is to - * implement a simple version of RTTI, since not all C++ compilers support genuine - * RTTI. Polymorphic operator==() and clone() methods call this method. - *

- * Concrete subclasses of TimeZone must use the UOBJECT_DEFINE_RTTI_IMPLEMENTATION - * macro from uobject.h in their implementation to provide correct RTTI information. - * @return The class ID for this object. All objects of a given class have the - * same class ID. Objects of other classes have different class IDs. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const = 0; - - /** - * Returns the amount of time to be added to local standard time - * to get local wall clock time. - *

- * The default implementation always returns 3600000 milliseconds - * (i.e., one hour) if this time zone observes Daylight Saving - * Time. Otherwise, 0 (zero) is returned. - *

- * If an underlying TimeZone implementation subclass supports - * historical Daylight Saving Time changes, this method returns - * the known latest daylight saving value. - * - * @return the amount of saving time in milliseconds - * @stable ICU 3.6 - */ - virtual int32_t getDSTSavings() const; - - /** - * Gets the region code associated with the given - * system time zone ID. The region code is either ISO 3166 - * 2-letter country code or UN M.49 3-digit area code. - * When the time zone is not associated with a specific location, - * for example - "Etc/UTC", "EST5EDT", then this method returns - * "001" (UN M.49 area code for World). - * - * @param id The system time zone ID. - * @param region Output buffer for receiving the region code. - * @param capacity The size of the output buffer. - * @param status Receives the status. When the given time zone ID - * is not a known system time zone ID, - * U_ILLEGAL_ARGUMENT_ERROR is set. - * @return The length of the output region code. - * @stable ICU 4.8 - */ - static int32_t U_EXPORT2 getRegion(const UnicodeString& id, - char *region, int32_t capacity, UErrorCode& status); - -protected: - - /** - * Default constructor. ID is initialized to the empty string. - * @stable ICU 2.0 - */ - TimeZone(); - - /** - * Construct a TimeZone with a given ID. - * @param id a system time zone ID - * @stable ICU 2.0 - */ - TimeZone(const UnicodeString &id); - - /** - * Copy constructor. - * @param source the object to be copied. - * @stable ICU 2.0 - */ - TimeZone(const TimeZone& source); - - /** - * Default assignment operator. - * @param right the object to be copied. - * @stable ICU 2.0 - */ - TimeZone& operator=(const TimeZone& right); - -#ifndef U_HIDE_INTERNAL_API - /** - * Utility function. For internally loading rule data. - * @param top Top resource bundle for tz data - * @param ruleid ID of rule to load - * @param oldbundle Old bundle to reuse or NULL - * @param status Status parameter - * @return either a new bundle or *oldbundle - * @internal - */ - static UResourceBundle* loadRule(const UResourceBundle* top, const UnicodeString& ruleid, UResourceBundle* oldbundle, UErrorCode&status); -#endif /* U_HIDE_INTERNAL_API */ - -private: - friend class ZoneMeta; - - - static TimeZone* createCustomTimeZone(const UnicodeString&); // Creates a time zone based on the string. - - /** - * Finds the given ID in the Olson tzdata. If the given ID is found in the tzdata, - * returns the pointer to the ID resource. This method is exposed through ZoneMeta class - * for ICU internal implementation and useful for building hashtable using a time zone - * ID as a key. - * @param id zone id string - * @return the pointer of the ID resource, or NULL. - */ - static const char16_t* findID(const UnicodeString& id); - - /** - * Resolve a link in Olson tzdata. When the given id is known and it's not a link, - * the id itself is returned. When the given id is known and it is a link, then - * dereferenced zone id is returned. When the given id is unknown, then it returns - * NULL. - * @param id zone id string - * @return the dereferenced zone or NULL - */ - static const char16_t* dereferOlsonLink(const UnicodeString& id); - - /** - * Returns the region code associated with the given zone, - * or NULL if the zone is not known. - * @param id zone id string - * @return the region associated with the given zone - */ - static const char16_t* getRegion(const UnicodeString& id); - - public: -#ifndef U_HIDE_INTERNAL_API - /** - * Returns the region code associated with the given zone, - * or NULL if the zone is not known. - * @param id zone id string - * @param status Status parameter - * @return the region associated with the given zone - * @internal - */ - static const char16_t* getRegion(const UnicodeString& id, UErrorCode& status); -#endif /* U_HIDE_INTERNAL_API */ - - private: - /** - * Parses the given custom time zone identifier - * @param id id A string of the form GMT[+-]hh:mm, GMT[+-]hhmm, or - * GMT[+-]hh. - * @param sign Receves parsed sign, 1 for positive, -1 for negative. - * @param hour Receives parsed hour field - * @param minute Receives parsed minute field - * @param second Receives parsed second field - * @return Returns TRUE when the given custom id is valid. - */ - static UBool parseCustomID(const UnicodeString& id, int32_t& sign, int32_t& hour, - int32_t& minute, int32_t& second); - - /** - * Parse a custom time zone identifier and return the normalized - * custom time zone identifier for the given custom id string. - * @param id a string of the form GMT[+-]hh:mm, GMT[+-]hhmm, or - * GMT[+-]hh. - * @param normalized Receives the normalized custom ID - * @param status Receives the status. When the input ID string is invalid, - * U_ILLEGAL_ARGUMENT_ERROR is set. - * @return The normalized custom id string. - */ - static UnicodeString& getCustomID(const UnicodeString& id, UnicodeString& normalized, - UErrorCode& status); - - /** - * Returns the normalized custom time zone ID for the given offset fields. - * @param hour offset hours - * @param min offset minutes - * @param sec offset seconds - * @param negative sign of the offset, TRUE for negative offset. - * @param id Receves the format result (normalized custom ID) - * @return The reference to id - */ - static UnicodeString& formatCustomID(int32_t hour, int32_t min, int32_t sec, - UBool negative, UnicodeString& id); - - UnicodeString fID; // this time zone's ID - - friend class TZEnumeration; -}; - - -// ------------------------------------- - -inline UnicodeString& -TimeZone::getID(UnicodeString& ID) const -{ - ID = fID; - return ID; -} - -// ------------------------------------- - -inline void -TimeZone::setID(const UnicodeString& ID) -{ - fID = ID; -} -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif //_TIMEZONE -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tmunit.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tmunit.h deleted file mode 100644 index ce9fc65261..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tmunit.h +++ /dev/null @@ -1,139 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * Copyright (C) 2009-2016, International Business Machines Corporation, * - * Google, and others. All Rights Reserved. * - ******************************************************************************* - */ - -#ifndef __TMUNIT_H__ -#define __TMUNIT_H__ - - -/** - * \file - * \brief C++ API: time unit object - */ - - -#include "unicode/measunit.h" - -#if !UCONFIG_NO_FORMATTING - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * Measurement unit for time units. - * @see TimeUnitAmount - * @see TimeUnit - * @stable ICU 4.2 - */ -class U_I18N_API TimeUnit: public MeasureUnit { -public: - /** - * Constants for all the time units we supported. - * @stable ICU 4.2 - */ - enum UTimeUnitFields { - UTIMEUNIT_YEAR, - UTIMEUNIT_MONTH, - UTIMEUNIT_DAY, - UTIMEUNIT_WEEK, - UTIMEUNIT_HOUR, - UTIMEUNIT_MINUTE, - UTIMEUNIT_SECOND, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UTimeUnitFields value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UTIMEUNIT_FIELD_COUNT -#endif // U_HIDE_DEPRECATED_API - }; - - /** - * Create Instance. - * @param timeUnitField time unit field based on which the instance - * is created. - * @param status input-output error code. - * If the timeUnitField is invalid, - * then this will be set to U_ILLEGAL_ARGUMENT_ERROR. - * @return a TimeUnit instance - * @stable ICU 4.2 - */ - static TimeUnit* U_EXPORT2 createInstance(UTimeUnitFields timeUnitField, - UErrorCode& status); - - - /** - * Override clone. - * @stable ICU 4.2 - */ - virtual UObject* clone() const; - - /** - * Copy operator. - * @stable ICU 4.2 - */ - TimeUnit(const TimeUnit& other); - - /** - * Assignment operator. - * @stable ICU 4.2 - */ - TimeUnit& operator=(const TimeUnit& other); - - /** - * Returns a unique class ID for this object POLYMORPHICALLY. - * This method implements a simple form of RTTI used by ICU. - * @return The class ID for this object. All objects of a given - * class have the same class ID. Objects of other classes have - * different class IDs. - * @stable ICU 4.2 - */ - virtual UClassID getDynamicClassID() const; - - /** - * Returns the class ID for this class. This is used to compare to - * the return value of getDynamicClassID(). - * @return The class ID for all objects of this class. - * @stable ICU 4.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - - - /** - * Get time unit field. - * @return time unit field. - * @stable ICU 4.2 - */ - UTimeUnitFields getTimeUnitField() const; - - /** - * Destructor. - * @stable ICU 4.2 - */ - virtual ~TimeUnit(); - -private: - UTimeUnitFields fTimeUnitField; - - /** - * Constructor - * @internal (private) - */ - TimeUnit(UTimeUnitFields timeUnitField); - -}; - - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // __TMUNIT_H__ -//eof -// diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tmutamt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tmutamt.h deleted file mode 100644 index 726ee09cb5..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tmutamt.h +++ /dev/null @@ -1,172 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * Copyright (C) 2009-2010, Google, International Business Machines Corporation and * - * others. All Rights Reserved. * - ******************************************************************************* - */ - -#ifndef __TMUTAMT_H__ -#define __TMUTAMT_H__ - - -/** - * \file - * \brief C++ API: time unit amount object. - */ - -#include "unicode/measure.h" -#include "unicode/tmunit.h" - -#if !UCONFIG_NO_FORMATTING - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - - -/** - * Express a duration as a time unit and number. Patterned after Currency. - * @see TimeUnitAmount - * @see TimeUnitFormat - * @stable ICU 4.2 - */ -class U_I18N_API TimeUnitAmount: public Measure { -public: - /** - * Construct TimeUnitAmount object with the given number and the - * given time unit. - * @param number a numeric object; number.isNumeric() must be TRUE - * @param timeUnitField the time unit field of a time unit - * @param status the input-output error code. - * If the number is not numeric or the timeUnitField - * is not valid, - * then this will be set to a failing value: - * U_ILLEGAL_ARGUMENT_ERROR. - * @stable ICU 4.2 - */ - TimeUnitAmount(const Formattable& number, - TimeUnit::UTimeUnitFields timeUnitField, - UErrorCode& status); - - /** - * Construct TimeUnitAmount object with the given numeric amount and the - * given time unit. - * @param amount a numeric amount. - * @param timeUnitField the time unit field on which a time unit amount - * object will be created. - * @param status the input-output error code. - * If the timeUnitField is not valid, - * then this will be set to a failing value: - * U_ILLEGAL_ARGUMENT_ERROR. - * @stable ICU 4.2 - */ - TimeUnitAmount(double amount, TimeUnit::UTimeUnitFields timeUnitField, - UErrorCode& status); - - - /** - * Copy constructor - * @stable ICU 4.2 - */ - TimeUnitAmount(const TimeUnitAmount& other); - - - /** - * Assignment operator - * @stable ICU 4.2 - */ - TimeUnitAmount& operator=(const TimeUnitAmount& other); - - - /** - * Clone. - * @return a polymorphic clone of this object. The result will have the same class as returned by getDynamicClassID(). - * @stable ICU 4.2 - */ - virtual UObject* clone() const; - - - /** - * Destructor - * @stable ICU 4.2 - */ - virtual ~TimeUnitAmount(); - - - /** - * Equality operator. - * @param other the object to compare to. - * @return true if this object is equal to the given object. - * @stable ICU 4.2 - */ - virtual UBool operator==(const UObject& other) const; - - - /** - * Not-equality operator. - * @param other the object to compare to. - * @return true if this object is not equal to the given object. - * @stable ICU 4.2 - */ - UBool operator!=(const UObject& other) const; - - - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *

-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 4.2 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 4.2 - */ - virtual UClassID getDynamicClassID(void) const; - - - /** - * Get the time unit. - * @return time unit object. - * @stable ICU 4.2 - */ - const TimeUnit& getTimeUnit() const; - - /** - * Get the time unit field value. - * @return time unit field value. - * @stable ICU 4.2 - */ - TimeUnit::UTimeUnitFields getTimeUnitField() const; -}; - - - -inline UBool -TimeUnitAmount::operator!=(const UObject& other) const { - return !operator==(other); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // __TMUTAMT_H__ -//eof -// diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tmutfmt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tmutfmt.h deleted file mode 100644 index 686d1f6700..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tmutfmt.h +++ /dev/null @@ -1,250 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * Copyright (C) 2008-2014, Google, International Business Machines Corporation - * and others. All Rights Reserved. - ******************************************************************************* - */ - -#ifndef __TMUTFMT_H__ -#define __TMUTFMT_H__ - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Format and parse duration in single time unit - */ - - -#if !UCONFIG_NO_FORMATTING -#ifndef U_HIDE_DEPRECATED_API - -#include "unicode/unistr.h" -#include "unicode/tmunit.h" -#include "unicode/tmutamt.h" -#include "unicode/measfmt.h" -#include "unicode/numfmt.h" -#include "unicode/plurrule.h" - - -/** - * Constants for various styles. - * There are 2 styles: full name and abbreviated name. - * For example, for English, the full name for hour duration is "3 hours", - * and the abbreviated name is "3 hrs". - * @deprecated ICU 53 Use MeasureFormat and UMeasureFormatWidth instead. - */ -enum UTimeUnitFormatStyle { - /** @deprecated ICU 53 */ - UTMUTFMT_FULL_STYLE, - /** @deprecated ICU 53 */ - UTMUTFMT_ABBREVIATED_STYLE, - /** @deprecated ICU 53 */ - UTMUTFMT_FORMAT_STYLE_COUNT -}; -typedef enum UTimeUnitFormatStyle UTimeUnitFormatStyle; /**< @deprecated ICU 53 */ - - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class Hashtable; -class UVector; - -struct TimeUnitFormatReadSink; - -/** - * Format or parse a TimeUnitAmount, using plural rules for the units where available. - * - *

- * Code Sample: - *

- *   // create time unit amount instance - a combination of Number and time unit
- *   UErrorCode status = U_ZERO_ERROR;
- *   TimeUnitAmount* source = new TimeUnitAmount(2, TimeUnit::UTIMEUNIT_YEAR, status);
- *   // create time unit format instance
- *   TimeUnitFormat* format = new TimeUnitFormat(Locale("en"), status);
- *   // format a time unit amount
- *   UnicodeString formatted;
- *   Formattable formattable;
- *   if (U_SUCCESS(status)) {
- *       formattable.adoptObject(source);
- *       formatted = ((Format*)format)->format(formattable, formatted, status);
- *       Formattable result;
- *       ((Format*)format)->parseObject(formatted, result, status);
- *       if (U_SUCCESS(status)) {
- *           assert (result == formattable);
- *       }
- *   }
- * 
- * - *

- * @see TimeUnitAmount - * @see TimeUnitFormat - * @deprecated ICU 53 Use the MeasureFormat class instead. - */ -class U_I18N_API TimeUnitFormat: public MeasureFormat { -public: - - /** - * Create TimeUnitFormat with default locale, and full name style. - * Use setLocale and/or setFormat to modify. - * @deprecated ICU 53 - */ - TimeUnitFormat(UErrorCode& status); - - /** - * Create TimeUnitFormat given locale, and full name style. - * @deprecated ICU 53 - */ - TimeUnitFormat(const Locale& locale, UErrorCode& status); - - /** - * Create TimeUnitFormat given locale and style. - * @deprecated ICU 53 - */ - TimeUnitFormat(const Locale& locale, UTimeUnitFormatStyle style, UErrorCode& status); - - /** - * Copy constructor. - * @deprecated ICU 53 - */ - TimeUnitFormat(const TimeUnitFormat&); - - /** - * deconstructor - * @deprecated ICU 53 - */ - virtual ~TimeUnitFormat(); - - /** - * Clone this Format object polymorphically. The caller owns the result and - * should delete it when done. - * @return A copy of the object. - * @deprecated ICU 53 - */ - virtual Format* clone(void) const; - - /** - * Assignment operator - * @deprecated ICU 53 - */ - TimeUnitFormat& operator=(const TimeUnitFormat& other); - - /** - * Return true if the given Format objects are not semantically equal. - * Objects of different subclasses are considered unequal. - * @param other the object to be compared with. - * @return true if the given Format objects are not semantically equal. - * @deprecated ICU 53 - */ - UBool operator!=(const Format& other) const; - - /** - * Set the locale used for formatting or parsing. - * @param locale the locale to be set - * @param status output param set to success/failure code on exit - * @deprecated ICU 53 - */ - void setLocale(const Locale& locale, UErrorCode& status); - - - /** - * Set the number format used for formatting or parsing. - * @param format the number formatter to be set - * @param status output param set to success/failure code on exit - * @deprecated ICU 53 - */ - void setNumberFormat(const NumberFormat& format, UErrorCode& status); - - /** - * Parse a TimeUnitAmount. - * @see Format#parseObject(const UnicodeString&, Formattable&, ParsePosition&) const; - * @deprecated ICU 53 - */ - virtual void parseObject(const UnicodeString& source, - Formattable& result, - ParsePosition& pos) const; - - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *

-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @deprecated ICU 53 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @deprecated ICU 53 - */ - virtual UClassID getDynamicClassID(void) const; - -private: - Hashtable* fTimeUnitToCountToPatterns[TimeUnit::UTIMEUNIT_FIELD_COUNT]; - UTimeUnitFormatStyle fStyle; - - void create(UTimeUnitFormatStyle style, UErrorCode& status); - - // it might actually be simpler to make them Decimal Formats later. - // initialize all private data members - void setup(UErrorCode& status); - - // initialize data member without fill in data for fTimeUnitToCountToPattern - void initDataMembers(UErrorCode& status); - - // initialize fTimeUnitToCountToPatterns from current locale's resource. - void readFromCurrentLocale(UTimeUnitFormatStyle style, const char* key, const UVector& pluralCounts, - UErrorCode& status); - - // check completeness of fTimeUnitToCountToPatterns against all time units, - // and all plural rules, fill in fallback as necessary. - void checkConsistency(UTimeUnitFormatStyle style, const char* key, UErrorCode& status); - - // fill in fTimeUnitToCountToPatterns from locale fall-back chain - void searchInLocaleChain(UTimeUnitFormatStyle style, const char* key, const char* localeName, - TimeUnit::UTimeUnitFields field, const UnicodeString&, - const char*, Hashtable*, UErrorCode&); - - // initialize hash table - Hashtable* initHash(UErrorCode& status); - - // delete hash table - void deleteHash(Hashtable* htable); - - // copy hash table - void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status); - // get time unit name, such as "year", from time unit field enum, such as - // UTIMEUNIT_YEAR. - static const char* getTimeUnitName(TimeUnit::UTimeUnitFields field, UErrorCode& status); - - friend struct TimeUnitFormatReadSink; -}; - -inline UBool -TimeUnitFormat::operator!=(const Format& other) const { - return !operator==(other); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* U_HIDE_DEPRECATED_API */ -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // __TMUTFMT_H__ -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/translit.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/translit.h deleted file mode 100644 index c1b23a3e1d..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/translit.h +++ /dev/null @@ -1,1593 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1999-2014, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* Date Name Description -* 11/17/99 aliu Creation. -********************************************************************** -*/ -#ifndef TRANSLIT_H -#define TRANSLIT_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Tranforms text from one format to another. - */ - -#if !UCONFIG_NO_TRANSLITERATION - -#include "unicode/uobject.h" -#include "unicode/unistr.h" -#include "unicode/parseerr.h" -#include "unicode/utrans.h" // UTransPosition, UTransDirection -#include "unicode/strenum.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class UnicodeFilter; -class UnicodeSet; -class TransliteratorParser; -class NormalizationTransliterator; -class TransliteratorIDParser; - -/** - * - * Transliterator is an abstract class that - * transliterates text from one format to another. The most common - * kind of transliterator is a script, or alphabet, transliterator. - * For example, a Russian to Latin transliterator changes Russian text - * written in Cyrillic characters to phonetically equivalent Latin - * characters. It does not translate Russian to English! - * Transliteration, unlike translation, operates on characters, without - * reference to the meanings of words and sentences. - * - *

Although script conversion is its most common use, a - * transliterator can actually perform a more general class of tasks. - * In fact, Transliterator defines a very general API - * which specifies only that a segment of the input text is replaced - * by new text. The particulars of this conversion are determined - * entirely by subclasses of Transliterator. - * - *

Transliterators are stateless - * - *

Transliterator objects are stateless; they - * retain no information between calls to - * transliterate(). (However, this does not - * mean that threads may share transliterators without synchronizing - * them. Transliterators are not immutable, so they must be - * synchronized when shared between threads.) This might seem to - * limit the complexity of the transliteration operation. In - * practice, subclasses perform complex transliterations by delaying - * the replacement of text until it is known that no other - * replacements are possible. In other words, although the - * Transliterator objects are stateless, the source text - * itself embodies all the needed information, and delayed operation - * allows arbitrary complexity. - * - *

Batch transliteration - * - *

The simplest way to perform transliteration is all at once, on a - * string of existing text. This is referred to as batch - * transliteration. For example, given a string input - * and a transliterator t, the call - * - * String result = t.transliterate(input); - * - * will transliterate it and return the result. Other methods allow - * the client to specify a substring to be transliterated and to use - * {@link Replaceable } objects instead of strings, in order to - * preserve out-of-band information (such as text styles). - * - *

Keyboard transliteration - * - *

Somewhat more involved is keyboard, or incremental - * transliteration. This is the transliteration of text that is - * arriving from some source (typically the user's keyboard) one - * character at a time, or in some other piecemeal fashion. - * - *

In keyboard transliteration, a Replaceable buffer - * stores the text. As text is inserted, as much as possible is - * transliterated on the fly. This means a GUI that displays the - * contents of the buffer may show text being modified as each new - * character arrives. - * - *

Consider the simple rule-based Transliterator: - *

- *     th>{theta}
- *     t>{tau}
- * 
- * - * When the user types 't', nothing will happen, since the - * transliterator is waiting to see if the next character is 'h'. To - * remedy this, we introduce the notion of a cursor, marked by a '|' - * in the output string: - *
- *     t>|{tau}
- *     {tau}h>{theta}
- * 
- * - * Now when the user types 't', tau appears, and if the next character - * is 'h', the tau changes to a theta. This is accomplished by - * maintaining a cursor position (independent of the insertion point, - * and invisible in the GUI) across calls to - * transliterate(). Typically, the cursor will - * be coincident with the insertion point, but in a case like the one - * above, it will precede the insertion point. - * - *

Keyboard transliteration methods maintain a set of three indices - * that are updated with each call to - * transliterate(), including the cursor, start, - * and limit. Since these indices are changed by the method, they are - * passed in an int[] array. The START index - * marks the beginning of the substring that the transliterator will - * look at. It is advanced as text becomes committed (but it is not - * the committed index; that's the CURSOR). The - * CURSOR index, described above, marks the point at - * which the transliterator last stopped, either because it reached - * the end, or because it required more characters to disambiguate - * between possible inputs. The CURSOR can also be - * explicitly set by rules in a rule-based Transliterator. - * Any characters before the CURSOR index are frozen; - * future keyboard transliteration calls within this input sequence - * will not change them. New text is inserted at the - * LIMIT index, which marks the end of the substring that - * the transliterator looks at. - * - *

Because keyboard transliteration assumes that more characters - * are to arrive, it is conservative in its operation. It only - * transliterates when it can do so unambiguously. Otherwise it waits - * for more characters to arrive. When the client code knows that no - * more characters are forthcoming, perhaps because the user has - * performed some input termination operation, then it should call - * finishTransliteration() to complete any - * pending transliterations. - * - *

Inverses - * - *

Pairs of transliterators may be inverses of one another. For - * example, if transliterator A transliterates characters by - * incrementing their Unicode value (so "abc" -> "def"), and - * transliterator B decrements character values, then A - * is an inverse of B and vice versa. If we compose A - * with B in a compound transliterator, the result is the - * indentity transliterator, that is, a transliterator that does not - * change its input text. - * - * The Transliterator method getInverse() - * returns a transliterator's inverse, if one exists, or - * null otherwise. However, the result of - * getInverse() usually will not be a true - * mathematical inverse. This is because true inverse transliterators - * are difficult to formulate. For example, consider two - * transliterators: AB, which transliterates the character 'A' - * to 'B', and BA, which transliterates 'B' to 'A'. It might - * seem that these are exact inverses, since - * - * \htmlonly

\endhtmlonly"A" x AB -> "B"
- * "B" x BA -> "A"\htmlonly
\endhtmlonly - * - * where 'x' represents transliteration. However, - * - * \htmlonly
\endhtmlonly"ABCD" x AB -> "BBCD"
- * "BBCD" x BA -> "AACD"\htmlonly
\endhtmlonly - * - * so AB composed with BA is not the - * identity. Nonetheless, BA may be usefully considered to be - * AB's inverse, and it is on this basis that - * AB.getInverse() could legitimately return - * BA. - * - *

IDs and display names - * - *

A transliterator is designated by a short identifier string or - * ID. IDs follow the format source-destination, - * where source describes the entity being replaced, and - * destination describes the entity replacing - * source. The entities may be the names of scripts, - * particular sequences of characters, or whatever else it is that the - * transliterator converts to or from. For example, a transliterator - * from Russian to Latin might be named "Russian-Latin". A - * transliterator from keyboard escape sequences to Latin-1 characters - * might be named "KeyboardEscape-Latin1". By convention, system - * entity names are in English, with the initial letters of words - * capitalized; user entity names may follow any format so long as - * they do not contain dashes. - * - *

In addition to programmatic IDs, transliterator objects have - * display names for presentation in user interfaces, returned by - * {@link #getDisplayName }. - * - *

Factory methods and registration - * - *

In general, client code should use the factory method - * {@link #createInstance } to obtain an instance of a - * transliterator given its ID. Valid IDs may be enumerated using - * getAvailableIDs(). Since transliterators are mutable, - * multiple calls to {@link #createInstance } with the same ID will - * return distinct objects. - * - *

In addition to the system transliterators registered at startup, - * user transliterators may be registered by calling - * registerInstance() at run time. A registered instance - * acts a template; future calls to {@link #createInstance } with the ID - * of the registered object return clones of that object. Thus any - * object passed to registerInstance() must implement - * clone() propertly. To register a transliterator subclass - * without instantiating it (until it is needed), users may call - * {@link #registerFactory }. In this case, the objects are - * instantiated by invoking the zero-argument public constructor of - * the class. - * - *

Subclassing - * - * Subclasses must implement the abstract method - * handleTransliterate().

Subclasses should override - * the transliterate() method taking a - * Replaceable and the transliterate() - * method taking a String and StringBuffer - * if the performance of these methods can be improved over the - * performance obtained by the default implementations in this class. - * - *

Rule syntax - * - *

A set of rules determines how to perform translations. - * Rules within a rule set are separated by semicolons (';'). - * To include a literal semicolon, prefix it with a backslash ('\'). - * Unicode Pattern_White_Space is ignored. - * If the first non-blank character on a line is '#', - * the entire line is ignored as a comment. - * - *

Each set of rules consists of two groups, one forward, and one - * reverse. This is a convention that is not enforced; rules for one - * direction may be omitted, with the result that translations in - * that direction will not modify the source text. In addition, - * bidirectional forward-reverse rules may be specified for - * symmetrical transformations. - * - *

Note: Another description of the Transliterator rule syntax is available in - * section - * Transform Rules Syntax of UTS #35: Unicode LDML. - * The rules are shown there using arrow symbols ← and → and ↔. - * ICU supports both those and the equivalent ASCII symbols < and > and <>. - * - *

Rule statements take one of the following forms: - * - *

- *
$alefmadda=\\u0622;
- *
Variable definition. The name on the - * left is assigned the text on the right. In this example, - * after this statement, instances of the left hand name, - * "$alefmadda", will be replaced by - * the Unicode character U+0622. Variable names must begin - * with a letter and consist only of letters, digits, and - * underscores. Case is significant. Duplicate names cause - * an exception to be thrown, that is, variables cannot be - * redefined. The right hand side may contain well-formed - * text of any length, including no text at all ("$empty=;"). - * The right hand side may contain embedded UnicodeSet - * patterns, for example, "$softvowel=[eiyEIY]".
- *
ai>$alefmadda;
- *
Forward translation rule. This rule - * states that the string on the left will be changed to the - * string on the right when performing forward - * transliteration.
- *
ai<$alefmadda;
- *
Reverse translation rule. This rule - * states that the string on the right will be changed to - * the string on the left when performing reverse - * transliteration.
- *
- * - *
- *
ai<>$alefmadda;
- *
Bidirectional translation rule. This - * rule states that the string on the right will be changed - * to the string on the left when performing forward - * transliteration, and vice versa when performing reverse - * transliteration.
- *
- * - *

Translation rules consist of a match pattern and an output - * string. The match pattern consists of literal characters, - * optionally preceded by context, and optionally followed by - * context. Context characters, like literal pattern characters, - * must be matched in the text being transliterated. However, unlike - * literal pattern characters, they are not replaced by the output - * text. For example, the pattern "abc{def}" - * indicates the characters "def" must be - * preceded by "abc" for a successful match. - * If there is a successful match, "def" will - * be replaced, but not "abc". The final '}' - * is optional, so "abc{def" is equivalent to - * "abc{def}". Another example is "{123}456" - * (or "123}456") in which the literal - * pattern "123" must be followed by "456". - * - *

The output string of a forward or reverse rule consists of - * characters to replace the literal pattern characters. If the - * output string contains the character '|', this is - * taken to indicate the location of the cursor after - * replacement. The cursor is the point in the text at which the - * next replacement, if any, will be applied. The cursor is usually - * placed within the replacement text; however, it can actually be - * placed into the precending or following context by using the - * special character '@'. Examples: - * - *

- *     a {foo} z > | @ bar; # foo -> bar, move cursor before a
- *     {foo} xyz > bar @@|; # foo -> bar, cursor between y and z
- * 
- * - *

UnicodeSet - * - *

UnicodeSet patterns may appear anywhere that - * makes sense. They may appear in variable definitions. - * Contrariwise, UnicodeSet patterns may themselves - * contain variable references, such as "$a=[a-z];$not_a=[^$a]", - * or "$range=a-z;$ll=[$range]". - * - *

UnicodeSet patterns may also be embedded directly - * into rule strings. Thus, the following two rules are equivalent: - * - *

- *     $vowel=[aeiou]; $vowel>'*'; # One way to do this
- *     [aeiou]>'*'; # Another way
- * 
- * - *

See {@link UnicodeSet} for more documentation and examples. - * - *

Segments - * - *

Segments of the input string can be matched and copied to the - * output string. This makes certain sets of rules simpler and more - * general, and makes reordering possible. For example: - * - *

- *     ([a-z]) > $1 $1; # double lowercase letters
- *     ([:Lu:]) ([:Ll:]) > $2 $1; # reverse order of Lu-Ll pairs
- * 
- * - *

The segment of the input string to be copied is delimited by - * "(" and ")". Up to - * nine segments may be defined. Segments may not overlap. In the - * output string, "$1" through "$9" - * represent the input string segments, in left-to-right order of - * definition. - * - *

Anchors - * - *

Patterns can be anchored to the beginning or the end of the text. This is done with the - * special characters '^' and '$'. For example: - * - *

- *   ^ a   > 'BEG_A';   # match 'a' at start of text
- *     a   > 'A'; # match other instances of 'a'
- *     z $ > 'END_Z';   # match 'z' at end of text
- *     z   > 'Z';       # match other instances of 'z'
- * 
- * - *

It is also possible to match the beginning or the end of the text using a UnicodeSet. - * This is done by including a virtual anchor character '$' at the end of the - * set pattern. Although this is usually the match chafacter for the end anchor, the set will - * match either the beginning or the end of the text, depending on its placement. For - * example: - * - *

- *   $x = [a-z$];   # match 'a' through 'z' OR anchor
- *   $x 1    > 2;   # match '1' after a-z or at the start
- *      3 $x > 4;   # match '3' before a-z or at the end
- * 
- * - *

Example - * - *

The following example rules illustrate many of the features of - * the rule language. - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
Rule 1.abc{def}>x|y
Rule 2.xyz>r
Rule 3.yz>q
- * - *

Applying these rules to the string "adefabcdefz" - * yields the following results: - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
|adefabcdefzInitial state, no rules match. Advance - * cursor.
a|defabcdefzStill no match. Rule 1 does not match - * because the preceding context is not present.
ad|efabcdefzStill no match. Keep advancing until - * there is a match...
ade|fabcdefz...
adef|abcdefz...
adefa|bcdefz...
adefab|cdefz...
adefabc|defzRule 1 matches; replace "def" - * with "xy" and back up the cursor - * to before the 'y'.
adefabcx|yzAlthough "xyz" is - * present, rule 2 does not match because the cursor is - * before the 'y', not before the 'x'. - * Rule 3 does match. Replace "yz" - * with "q".
adefabcxq|The cursor is at the end; - * transliteration is complete.
- * - *

The order of rules is significant. If multiple rules may match - * at some point, the first matching rule is applied. - * - *

Forward and reverse rules may have an empty output string. - * Otherwise, an empty left or right hand side of any statement is a - * syntax error. - * - *

Single quotes are used to quote any character other than a - * digit or letter. To specify a single quote itself, inside or - * outside of quotes, use two single quotes in a row. For example, - * the rule "'>'>o''clock" changes the - * string ">" to the string "o'clock". - * - *

Notes - * - *

While a Transliterator is being built from rules, it checks that - * the rules are added in proper order. For example, if the rule - * "a>x" is followed by the rule "ab>y", - * then the second rule will throw an exception. The reason is that - * the second rule can never be triggered, since the first rule - * always matches anything it matches. In other words, the first - * rule masks the second rule. - * - * @author Alan Liu - * @stable ICU 2.0 - */ -class U_I18N_API Transliterator : public UObject { - -private: - - /** - * Programmatic name, e.g., "Latin-Arabic". - */ - UnicodeString ID; - - /** - * This transliterator's filter. Any character for which - * filter.contains() returns false will not be - * altered by this transliterator. If filter is - * null then no filtering is applied. - */ - UnicodeFilter* filter; - - int32_t maximumContextLength; - - public: - - /** - * A context integer or pointer for a factory function, passed by - * value. - * @stable ICU 2.4 - */ - union Token { - /** - * This token, interpreted as a 32-bit integer. - * @stable ICU 2.4 - */ - int32_t integer; - /** - * This token, interpreted as a native pointer. - * @stable ICU 2.4 - */ - void* pointer; - }; - -#ifndef U_HIDE_INTERNAL_API - /** - * Return a token containing an integer. - * @return a token containing an integer. - * @internal - */ - inline static Token integerToken(int32_t); - - /** - * Return a token containing a pointer. - * @return a token containing a pointer. - * @internal - */ - inline static Token pointerToken(void*); -#endif /* U_HIDE_INTERNAL_API */ - - /** - * A function that creates and returns a Transliterator. When - * invoked, it will be passed the ID string that is being - * instantiated, together with the context pointer that was passed - * in when the factory function was first registered. Many - * factory functions will ignore both parameters, however, - * functions that are registered to more than one ID may use the - * ID or the context parameter to parameterize the transliterator - * they create. - * @param ID the string identifier for this transliterator - * @param context a context pointer that will be stored and - * later passed to the factory function when an ID matching - * the registration ID is being instantiated with this factory. - * @stable ICU 2.4 - */ - typedef Transliterator* (U_EXPORT2 *Factory)(const UnicodeString& ID, Token context); - -protected: - - /** - * Default constructor. - * @param ID the string identifier for this transliterator - * @param adoptedFilter the filter. Any character for which - * filter.contains() returns false will not be - * altered by this transliterator. If filter is - * null then no filtering is applied. - * @stable ICU 2.4 - */ - Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter); - - /** - * Copy constructor. - * @stable ICU 2.4 - */ - Transliterator(const Transliterator&); - - /** - * Assignment operator. - * @stable ICU 2.4 - */ - Transliterator& operator=(const Transliterator&); - - /** - * Create a transliterator from a basic ID. This is an ID - * containing only the forward direction source, target, and - * variant. - * @param id a basic ID of the form S-T or S-T/V. - * @param canon canonical ID to assign to the object, or - * NULL to leave the ID unchanged - * @return a newly created Transliterator or null if the ID is - * invalid. - * @stable ICU 2.4 - */ - static Transliterator* createBasicInstance(const UnicodeString& id, - const UnicodeString* canon); - - friend class TransliteratorParser; // for parseID() - friend class TransliteratorIDParser; // for createBasicInstance() - friend class TransliteratorAlias; // for setID() - -public: - - /** - * Destructor. - * @stable ICU 2.0 - */ - virtual ~Transliterator(); - - /** - * Implements Cloneable. - * All subclasses are encouraged to implement this method if it is - * possible and reasonable to do so. Subclasses that are to be - * registered with the system using registerInstance() - * are required to implement this method. If a subclass does not - * implement clone() properly and is registered with the system - * using registerInstance(), then the default clone() implementation - * will return null, and calls to createInstance() will fail. - * - * @return a copy of the object. - * @see #registerInstance - * @stable ICU 2.0 - */ - virtual Transliterator* clone() const; - - /** - * Transliterates a segment of a string, with optional filtering. - * - * @param text the string to be transliterated - * @param start the beginning index, inclusive; 0 <= start - * <= limit. - * @param limit the ending index, exclusive; start <= limit - * <= text.length(). - * @return The new limit index. The text previously occupying [start, - * limit) has been transliterated, possibly to a string of a different - * length, at [start, new-limit), where - * new-limit is the return value. If the input offsets are out of bounds, - * the returned value is -1 and the input string remains unchanged. - * @stable ICU 2.0 - */ - virtual int32_t transliterate(Replaceable& text, - int32_t start, int32_t limit) const; - - /** - * Transliterates an entire string in place. Convenience method. - * @param text the string to be transliterated - * @stable ICU 2.0 - */ - virtual void transliterate(Replaceable& text) const; - - /** - * Transliterates the portion of the text buffer that can be - * transliterated unambiguosly after new text has been inserted, - * typically as a result of a keyboard event. The new text in - * insertion will be inserted into text - * at index.limit, advancing - * index.limit by insertion.length(). - * Then the transliterator will try to transliterate characters of - * text between index.cursor and - * index.limit. Characters before - * index.cursor will not be changed. - * - *

Upon return, values in index will be updated. - * index.start will be advanced to the first - * character that future calls to this method will read. - * index.cursor and index.limit will - * be adjusted to delimit the range of text that future calls to - * this method may change. - * - *

Typical usage of this method begins with an initial call - * with index.start and index.limit - * set to indicate the portion of text to be - * transliterated, and index.cursor == index.start. - * Thereafter, index can be used without - * modification in future calls, provided that all changes to - * text are made via this method. - * - *

This method assumes that future calls may be made that will - * insert new text into the buffer. As a result, it only performs - * unambiguous transliterations. After the last call to this - * method, there may be untransliterated text that is waiting for - * more input to resolve an ambiguity. In order to perform these - * pending transliterations, clients should call {@link - * #finishTransliteration } after the last call to this - * method has been made. - * - * @param text the buffer holding transliterated and untransliterated text - * @param index an array of three integers. - * - *

  • index.start: the beginning index, - * inclusive; 0 <= index.start <= index.limit. - * - *
  • index.limit: the ending index, exclusive; - * index.start <= index.limit <= text.length(). - * insertion is inserted at - * index.limit. - * - *
  • index.cursor: the next character to be - * considered for transliteration; index.start <= - * index.cursor <= index.limit. Characters before - * index.cursor will not be changed by future calls - * to this method.
- * - * @param insertion text to be inserted and possibly - * transliterated into the translation buffer at - * index.limit. If null then no text - * is inserted. - * @param status Output param to filled in with a success or an error. - * @see #handleTransliterate - * @exception IllegalArgumentException if index - * is invalid - * @see UTransPosition - * @stable ICU 2.0 - */ - virtual void transliterate(Replaceable& text, UTransPosition& index, - const UnicodeString& insertion, - UErrorCode& status) const; - - /** - * Transliterates the portion of the text buffer that can be - * transliterated unambiguosly after a new character has been - * inserted, typically as a result of a keyboard event. This is a - * convenience method. - * @param text the buffer holding transliterated and - * untransliterated text - * @param index an array of three integers. - * @param insertion text to be inserted and possibly - * transliterated into the translation buffer at - * index.limit. - * @param status Output param to filled in with a success or an error. - * @see #transliterate(Replaceable&, UTransPosition&, const UnicodeString&, UErrorCode&) const - * @stable ICU 2.0 - */ - virtual void transliterate(Replaceable& text, UTransPosition& index, - UChar32 insertion, - UErrorCode& status) const; - - /** - * Transliterates the portion of the text buffer that can be - * transliterated unambiguosly. This is a convenience method; see - * {@link - * #transliterate(Replaceable&, UTransPosition&, const UnicodeString&, UErrorCode&) const } - * for details. - * @param text the buffer holding transliterated and - * untransliterated text - * @param index an array of three integers. - * @param status Output param to filled in with a success or an error. - * @see #transliterate(Replaceable&, UTransPosition&, const UnicodeString&, UErrorCode &) const - * @stable ICU 2.0 - */ - virtual void transliterate(Replaceable& text, UTransPosition& index, - UErrorCode& status) const; - - /** - * Finishes any pending transliterations that were waiting for - * more characters. Clients should call this method as the last - * call after a sequence of one or more calls to - * transliterate(). - * @param text the buffer holding transliterated and - * untransliterated text. - * @param index the array of indices previously passed to {@link - * #transliterate } - * @stable ICU 2.0 - */ - virtual void finishTransliteration(Replaceable& text, - UTransPosition& index) const; - -private: - - /** - * This internal method does incremental transliteration. If the - * 'insertion' is non-null then we append it to 'text' before - * proceeding. This method calls through to the pure virtual - * framework method handleTransliterate() to do the actual - * work. - * @param text the buffer holding transliterated and - * untransliterated text - * @param index an array of three integers. See {@link - * #transliterate(Replaceable, int[], String)}. - * @param insertion text to be inserted and possibly - * transliterated into the translation buffer at - * index.limit. - * @param status Output param to filled in with a success or an error. - */ - void _transliterate(Replaceable& text, - UTransPosition& index, - const UnicodeString* insertion, - UErrorCode &status) const; - -protected: - - /** - * Abstract method that concrete subclasses define to implement - * their transliteration algorithm. This method handles both - * incremental and non-incremental transliteration. Let - * originalStart refer to the value of - * pos.start upon entry. - * - *
    - *
  • If incremental is false, then this method - * should transliterate all characters between - * pos.start and pos.limit. Upon return - * pos.start must == pos.limit.
  • - * - *
  • If incremental is true, then this method - * should transliterate all characters between - * pos.start and pos.limit that can be - * unambiguously transliterated, regardless of future insertions - * of text at pos.limit. Upon return, - * pos.start should be in the range - * [originalStart, pos.limit). - * pos.start should be positioned such that - * characters [originalStart, - * pos.start) will not be changed in the future by this - * transliterator and characters [pos.start, - * pos.limit) are unchanged.
  • - *
- * - *

Implementations of this method should also obey the - * following invariants:

- * - *
    - *
  • pos.limit and pos.contextLimit - * should be updated to reflect changes in length of the text - * between pos.start and pos.limit. The - * difference pos.contextLimit - pos.limit should - * not change.
  • - * - *
  • pos.contextStart should not change.
  • - * - *
  • Upon return, neither pos.start nor - * pos.limit should be less than - * originalStart.
  • - * - *
  • Text before originalStart and text after - * pos.limit should not change.
  • - * - *
  • Text before pos.contextStart and text after - * pos.contextLimit should be ignored.
  • - *
- * - *

Subclasses may safely assume that all characters in - * [pos.start, pos.limit) are filtered. - * In other words, the filter has already been applied by the time - * this method is called. See - * filteredTransliterate(). - * - *

This method is not for public consumption. Calling - * this method directly will transliterate - * [pos.start, pos.limit) without - * applying the filter. End user code should call - * transliterate() instead of this method. Subclass code - * and wrapping transliterators should call - * filteredTransliterate() instead of this method.

- * - * @param text the buffer holding transliterated and - * untransliterated text - * - * @param pos the indices indicating the start, limit, context - * start, and context limit of the text. - * - * @param incremental if true, assume more text may be inserted at - * pos.limit and act accordingly. Otherwise, - * transliterate all text between pos.start and - * pos.limit and move pos.start up to - * pos.limit. - * - * @see #transliterate - * @stable ICU 2.4 - */ - virtual void handleTransliterate(Replaceable& text, - UTransPosition& pos, - UBool incremental) const = 0; - -public: - /** - * Transliterate a substring of text, as specified by index, taking filters - * into account. This method is for subclasses that need to delegate to - * another transliterator. - * @param text the text to be transliterated - * @param index the position indices - * @param incremental if TRUE, then assume more characters may be inserted - * at index.limit, and postpone processing to accomodate future incoming - * characters - * @stable ICU 2.4 - */ - virtual void filteredTransliterate(Replaceable& text, - UTransPosition& index, - UBool incremental) const; - -private: - - /** - * Top-level transliteration method, handling filtering, incremental and - * non-incremental transliteration, and rollback. All transliteration - * public API methods eventually call this method with a rollback argument - * of TRUE. Other entities may call this method but rollback should be - * FALSE. - * - *

If this transliterator has a filter, break up the input text into runs - * of unfiltered characters. Pass each run to - * subclass.handleTransliterate(). - * - *

In incremental mode, if rollback is TRUE, perform a special - * incremental procedure in which several passes are made over the input - * text, adding one character at a time, and committing successful - * transliterations as they occur. Unsuccessful transliterations are rolled - * back and retried with additional characters to give correct results. - * - * @param text the text to be transliterated - * @param index the position indices - * @param incremental if TRUE, then assume more characters may be inserted - * at index.limit, and postpone processing to accomodate future incoming - * characters - * @param rollback if TRUE and if incremental is TRUE, then perform special - * incremental processing, as described above, and undo partial - * transliterations where necessary. If incremental is FALSE then this - * parameter is ignored. - */ - virtual void filteredTransliterate(Replaceable& text, - UTransPosition& index, - UBool incremental, - UBool rollback) const; - -public: - - /** - * Returns the length of the longest context required by this transliterator. - * This is preceding context. The default implementation supplied - * by Transliterator returns zero; subclasses - * that use preceding context should override this method to return the - * correct value. For example, if a transliterator translates "ddd" (where - * d is any digit) to "555" when preceded by "(ddd)", then the preceding - * context length is 5, the length of "(ddd)". - * - * @return The maximum number of preceding context characters this - * transliterator needs to examine - * @stable ICU 2.0 - */ - int32_t getMaximumContextLength(void) const; - -protected: - - /** - * Method for subclasses to use to set the maximum context length. - * @param maxContextLength the new value to be set. - * @see #getMaximumContextLength - * @stable ICU 2.4 - */ - void setMaximumContextLength(int32_t maxContextLength); - -public: - - /** - * Returns a programmatic identifier for this transliterator. - * If this identifier is passed to createInstance(), it - * will return this object, if it has been registered. - * @return a programmatic identifier for this transliterator. - * @see #registerInstance - * @see #registerFactory - * @see #getAvailableIDs - * @stable ICU 2.0 - */ - virtual const UnicodeString& getID(void) const; - - /** - * Returns a name for this transliterator that is appropriate for - * display to the user in the default locale. See {@link - * #getDisplayName } for details. - * @param ID the string identifier for this transliterator - * @param result Output param to receive the display name - * @return A reference to 'result'. - * @stable ICU 2.0 - */ - static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID, - UnicodeString& result); - - /** - * Returns a name for this transliterator that is appropriate for - * display to the user in the given locale. This name is taken - * from the locale resource data in the standard manner of the - * java.text package. - * - *

If no localized names exist in the system resource bundles, - * a name is synthesized using a localized - * MessageFormat pattern from the resource data. The - * arguments to this pattern are an integer followed by one or two - * strings. The integer is the number of strings, either 1 or 2. - * The strings are formed by splitting the ID for this - * transliterator at the first '-'. If there is no '-', then the - * entire ID forms the only string. - * @param ID the string identifier for this transliterator - * @param inLocale the Locale in which the display name should be - * localized. - * @param result Output param to receive the display name - * @return A reference to 'result'. - * @stable ICU 2.0 - */ - static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID, - const Locale& inLocale, - UnicodeString& result); - - /** - * Returns the filter used by this transliterator, or NULL - * if this transliterator uses no filter. - * @return the filter used by this transliterator, or NULL - * if this transliterator uses no filter. - * @stable ICU 2.0 - */ - const UnicodeFilter* getFilter(void) const; - - /** - * Returns the filter used by this transliterator, or NULL if this - * transliterator uses no filter. The caller must eventually delete the - * result. After this call, this transliterator's filter is set to - * NULL. - * @return the filter used by this transliterator, or NULL if this - * transliterator uses no filter. - * @stable ICU 2.4 - */ - UnicodeFilter* orphanFilter(void); - - /** - * Changes the filter used by this transliterator. If the filter - * is set to null then no filtering will occur. - * - *

Callers must take care if a transliterator is in use by - * multiple threads. The filter should not be changed by one - * thread while another thread may be transliterating. - * @param adoptedFilter the new filter to be adopted. - * @stable ICU 2.0 - */ - void adoptFilter(UnicodeFilter* adoptedFilter); - - /** - * Returns this transliterator's inverse. See the class - * documentation for details. This implementation simply inverts - * the two entities in the ID and attempts to retrieve the - * resulting transliterator. That is, if getID() - * returns "A-B", then this method will return the result of - * createInstance("B-A"), or null if that - * call fails. - * - *

Subclasses with knowledge of their inverse may wish to - * override this method. - * - * @param status Output param to filled in with a success or an error. - * @return a transliterator that is an inverse, not necessarily - * exact, of this transliterator, or null if no such - * transliterator is registered. - * @see #registerInstance - * @stable ICU 2.0 - */ - Transliterator* createInverse(UErrorCode& status) const; - - /** - * Returns a Transliterator object given its ID. - * The ID must be either a system transliterator ID or a ID registered - * using registerInstance(). - * - * @param ID a valid ID, as enumerated by getAvailableIDs() - * @param dir either FORWARD or REVERSE. - * @param parseError Struct to recieve information on position - * of error if an error is encountered - * @param status Output param to filled in with a success or an error. - * @return A Transliterator object with the given ID - * @see #registerInstance - * @see #getAvailableIDs - * @see #getID - * @stable ICU 2.0 - */ - static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID, - UTransDirection dir, - UParseError& parseError, - UErrorCode& status); - - /** - * Returns a Transliterator object given its ID. - * The ID must be either a system transliterator ID or a ID registered - * using registerInstance(). - * @param ID a valid ID, as enumerated by getAvailableIDs() - * @param dir either FORWARD or REVERSE. - * @param status Output param to filled in with a success or an error. - * @return A Transliterator object with the given ID - * @stable ICU 2.0 - */ - static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID, - UTransDirection dir, - UErrorCode& status); - - /** - * Returns a Transliterator object constructed from - * the given rule string. This will be a rule-based Transliterator, - * if the rule string contains only rules, or a - * compound Transliterator, if it contains ID blocks, or a - * null Transliterator, if it contains ID blocks which parse as - * empty for the given direction. - * - * @param ID the id for the transliterator. - * @param rules rules, separated by ';' - * @param dir either FORWARD or REVERSE. - * @param parseError Struct to receive information on position - * of error if an error is encountered - * @param status Output param set to success/failure code. - * @return a newly created Transliterator - * @stable ICU 2.0 - */ - static Transliterator* U_EXPORT2 createFromRules(const UnicodeString& ID, - const UnicodeString& rules, - UTransDirection dir, - UParseError& parseError, - UErrorCode& status); - - /** - * Create a rule string that can be passed to createFromRules() - * to recreate this transliterator. - * @param result the string to receive the rules. Previous - * contents will be deleted. - * @param escapeUnprintable if TRUE then convert unprintable - * character to their hex escape representations, \\uxxxx or - * \\Uxxxxxxxx. Unprintable characters are those other than - * U+000A, U+0020..U+007E. - * @stable ICU 2.0 - */ - virtual UnicodeString& toRules(UnicodeString& result, - UBool escapeUnprintable) const; - - /** - * Return the number of elements that make up this transliterator. - * For example, if the transliterator "NFD;Jamo-Latin;Latin-Greek" - * were created, the return value of this method would be 3. - * - *

If this transliterator is not composed of other - * transliterators, then this method returns 1. - * @return the number of transliterators that compose this - * transliterator, or 1 if this transliterator is not composed of - * multiple transliterators - * @stable ICU 3.0 - */ - int32_t countElements() const; - - /** - * Return an element that makes up this transliterator. For - * example, if the transliterator "NFD;Jamo-Latin;Latin-Greek" - * were created, the return value of this method would be one - * of the three transliterator objects that make up that - * transliterator: [NFD, Jamo-Latin, Latin-Greek]. - * - *

If this transliterator is not composed of other - * transliterators, then this method will return a reference to - * this transliterator when given the index 0. - * @param index a value from 0..countElements()-1 indicating the - * transliterator to return - * @param ec input-output error code - * @return one of the transliterators that makes up this - * transliterator, if this transliterator is made up of multiple - * transliterators, otherwise a reference to this object if given - * an index of 0 - * @stable ICU 3.0 - */ - const Transliterator& getElement(int32_t index, UErrorCode& ec) const; - - /** - * Returns the set of all characters that may be modified in the - * input text by this Transliterator. This incorporates this - * object's current filter; if the filter is changed, the return - * value of this function will change. The default implementation - * returns an empty set. Some subclasses may override {@link - * #handleGetSourceSet } to return a more precise result. The - * return result is approximate in any case and is intended for - * use by tests, tools, or utilities. - * @param result receives result set; previous contents lost - * @return a reference to result - * @see #getTargetSet - * @see #handleGetSourceSet - * @stable ICU 2.4 - */ - UnicodeSet& getSourceSet(UnicodeSet& result) const; - - /** - * Framework method that returns the set of all characters that - * may be modified in the input text by this Transliterator, - * ignoring the effect of this object's filter. The base class - * implementation returns the empty set. Subclasses that wish to - * implement this should override this method. - * @return the set of characters that this transliterator may - * modify. The set may be modified, so subclasses should return a - * newly-created object. - * @param result receives result set; previous contents lost - * @see #getSourceSet - * @see #getTargetSet - * @stable ICU 2.4 - */ - virtual void handleGetSourceSet(UnicodeSet& result) const; - - /** - * Returns the set of all characters that may be generated as - * replacement text by this transliterator. The default - * implementation returns the empty set. Some subclasses may - * override this method to return a more precise result. The - * return result is approximate in any case and is intended for - * use by tests, tools, or utilities requiring such - * meta-information. - * @param result receives result set; previous contents lost - * @return a reference to result - * @see #getTargetSet - * @stable ICU 2.4 - */ - virtual UnicodeSet& getTargetSet(UnicodeSet& result) const; - -public: - - /** - * Registers a factory function that creates transliterators of - * a given ID. - * - * Because ICU may choose to cache Transliterators internally, this must - * be called at application startup, prior to any calls to - * Transliterator::createXXX to avoid undefined behavior. - * - * @param id the ID being registered - * @param factory a function pointer that will be copied and - * called later when the given ID is passed to createInstance() - * @param context a context pointer that will be stored and - * later passed to the factory function when an ID matching - * the registration ID is being instantiated with this factory. - * @stable ICU 2.0 - */ - static void U_EXPORT2 registerFactory(const UnicodeString& id, - Factory factory, - Token context); - - /** - * Registers an instance obj of a subclass of - * Transliterator with the system. When - * createInstance() is called with an ID string that is - * equal to obj->getID(), then obj->clone() is - * returned. - * - * After this call the Transliterator class owns the adoptedObj - * and will delete it. - * - * Because ICU may choose to cache Transliterators internally, this must - * be called at application startup, prior to any calls to - * Transliterator::createXXX to avoid undefined behavior. - * - * @param adoptedObj an instance of subclass of - * Transliterator that defines clone() - * @see #createInstance - * @see #registerFactory - * @see #unregister - * @stable ICU 2.0 - */ - static void U_EXPORT2 registerInstance(Transliterator* adoptedObj); - - /** - * Registers an ID string as an alias of another ID string. - * That is, after calling this function, createInstance(aliasID) - * will return the same thing as createInstance(realID). - * This is generally used to create shorter, more mnemonic aliases - * for long compound IDs. - * - * @param aliasID The new ID being registered. - * @param realID The ID that the new ID is to be an alias for. - * This can be a compound ID and can include filters and should - * refer to transliterators that have already been registered with - * the framework, although this isn't checked. - * @stable ICU 3.6 - */ - static void U_EXPORT2 registerAlias(const UnicodeString& aliasID, - const UnicodeString& realID); - -protected: - -#ifndef U_HIDE_INTERNAL_API - /** - * @param id the ID being registered - * @param factory a function pointer that will be copied and - * called later when the given ID is passed to createInstance() - * @param context a context pointer that will be stored and - * later passed to the factory function when an ID matching - * the registration ID is being instantiated with this factory. - * @internal - */ - static void _registerFactory(const UnicodeString& id, - Factory factory, - Token context); - - /** - * @internal - */ - static void _registerInstance(Transliterator* adoptedObj); - - /** - * @internal - */ - static void _registerAlias(const UnicodeString& aliasID, const UnicodeString& realID); - - /** - * Register two targets as being inverses of one another. For - * example, calling registerSpecialInverse("NFC", "NFD", true) causes - * Transliterator to form the following inverse relationships: - * - *

NFC => NFD
-     * Any-NFC => Any-NFD
-     * NFD => NFC
-     * Any-NFD => Any-NFC
- * - * (Without the special inverse registration, the inverse of NFC - * would be NFC-Any.) Note that NFD is shorthand for Any-NFD, but - * that the presence or absence of "Any-" is preserved. - * - *

The relationship is symmetrical; registering (a, b) is - * equivalent to registering (b, a). - * - *

The relevant IDs must still be registered separately as - * factories or classes. - * - *

Only the targets are specified. Special inverses always - * have the form Any-Target1 <=> Any-Target2. The target should - * have canonical casing (the casing desired to be produced when - * an inverse is formed) and should contain no whitespace or other - * extraneous characters. - * - * @param target the target against which to register the inverse - * @param inverseTarget the inverse of target, that is - * Any-target.getInverse() => Any-inverseTarget - * @param bidirectional if true, register the reverse relation - * as well, that is, Any-inverseTarget.getInverse() => Any-target - * @internal - */ - static void _registerSpecialInverse(const UnicodeString& target, - const UnicodeString& inverseTarget, - UBool bidirectional); -#endif /* U_HIDE_INTERNAL_API */ - -public: - - /** - * Unregisters a transliterator or class. This may be either - * a system transliterator or a user transliterator or class. - * Any attempt to construct an unregistered transliterator based - * on its ID will fail. - * - * Because ICU may choose to cache Transliterators internally, this should - * be called during application shutdown, after all calls to - * Transliterator::createXXX to avoid undefined behavior. - * - * @param ID the ID of the transliterator or class - * @return the Object that was registered with - * ID, or null if none was - * @see #registerInstance - * @see #registerFactory - * @stable ICU 2.0 - */ - static void U_EXPORT2 unregister(const UnicodeString& ID); - -public: - - /** - * Return a StringEnumeration over the IDs available at the time of the - * call, including user-registered IDs. - * @param ec input-output error code - * @return a newly-created StringEnumeration over the transliterators - * available at the time of the call. The caller should delete this object - * when done using it. - * @stable ICU 3.0 - */ - static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec); - - /** - * Return the number of registered source specifiers. - * @return the number of registered source specifiers. - * @stable ICU 2.0 - */ - static int32_t U_EXPORT2 countAvailableSources(void); - - /** - * Return a registered source specifier. - * @param index which specifier to return, from 0 to n-1, where - * n = countAvailableSources() - * @param result fill-in paramter to receive the source specifier. - * If index is out of range, result will be empty. - * @return reference to result - * @stable ICU 2.0 - */ - static UnicodeString& U_EXPORT2 getAvailableSource(int32_t index, - UnicodeString& result); - - /** - * Return the number of registered target specifiers for a given - * source specifier. - * @param source the given source specifier. - * @return the number of registered target specifiers for a given - * source specifier. - * @stable ICU 2.0 - */ - static int32_t U_EXPORT2 countAvailableTargets(const UnicodeString& source); - - /** - * Return a registered target specifier for a given source. - * @param index which specifier to return, from 0 to n-1, where - * n = countAvailableTargets(source) - * @param source the source specifier - * @param result fill-in paramter to receive the target specifier. - * If source is invalid or if index is out of range, result will - * be empty. - * @return reference to result - * @stable ICU 2.0 - */ - static UnicodeString& U_EXPORT2 getAvailableTarget(int32_t index, - const UnicodeString& source, - UnicodeString& result); - - /** - * Return the number of registered variant specifiers for a given - * source-target pair. - * @param source the source specifiers. - * @param target the target specifiers. - * @stable ICU 2.0 - */ - static int32_t U_EXPORT2 countAvailableVariants(const UnicodeString& source, - const UnicodeString& target); - - /** - * Return a registered variant specifier for a given source-target - * pair. - * @param index which specifier to return, from 0 to n-1, where - * n = countAvailableVariants(source, target) - * @param source the source specifier - * @param target the target specifier - * @param result fill-in paramter to receive the variant - * specifier. If source is invalid or if target is invalid or if - * index is out of range, result will be empty. - * @return reference to result - * @stable ICU 2.0 - */ - static UnicodeString& U_EXPORT2 getAvailableVariant(int32_t index, - const UnicodeString& source, - const UnicodeString& target, - UnicodeString& result); - -protected: - -#ifndef U_HIDE_INTERNAL_API - /** - * Non-mutexed internal method - * @internal - */ - static int32_t _countAvailableSources(void); - - /** - * Non-mutexed internal method - * @internal - */ - static UnicodeString& _getAvailableSource(int32_t index, - UnicodeString& result); - - /** - * Non-mutexed internal method - * @internal - */ - static int32_t _countAvailableTargets(const UnicodeString& source); - - /** - * Non-mutexed internal method - * @internal - */ - static UnicodeString& _getAvailableTarget(int32_t index, - const UnicodeString& source, - UnicodeString& result); - - /** - * Non-mutexed internal method - * @internal - */ - static int32_t _countAvailableVariants(const UnicodeString& source, - const UnicodeString& target); - - /** - * Non-mutexed internal method - * @internal - */ - static UnicodeString& _getAvailableVariant(int32_t index, - const UnicodeString& source, - const UnicodeString& target, - UnicodeString& result); -#endif /* U_HIDE_INTERNAL_API */ - -protected: - - /** - * Set the ID of this transliterators. Subclasses shouldn't do - * this, unless the underlying script behavior has changed. - * @param id the new id t to be set. - * @stable ICU 2.4 - */ - void setID(const UnicodeString& id); - -public: - - /** - * Return the class ID for this class. This is useful only for - * comparing to a return value from getDynamicClassID(). - * Note that Transliterator is an abstract base class, and therefor - * no fully constructed object will have a dynamic - * UCLassID that equals the UClassID returned from - * TRansliterator::getStaticClassID(). - * @return The class ID for class Transliterator. - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID polymorphically. This method - * is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and - * clone() methods call this method. - * - *

Concrete subclasses of Transliterator must use the - * UOBJECT_DEFINE_RTTI_IMPLEMENTATION macro from - * uobject.h to provide the RTTI functions. - * - * @return The class ID for this object. All objects of a given - * class have the same class ID. Objects of other classes have - * different class IDs. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const = 0; - -private: - static UBool initializeRegistry(UErrorCode &status); - -public: -#ifndef U_HIDE_OBSOLETE_API - /** - * Return the number of IDs currently registered with the system. - * To retrieve the actual IDs, call getAvailableID(i) with - * i from 0 to countAvailableIDs() - 1. - * @return the number of IDs currently registered with the system. - * @obsolete ICU 3.4 use getAvailableIDs() instead - */ - static int32_t U_EXPORT2 countAvailableIDs(void); - - /** - * Return the index-th available ID. index must be between 0 - * and countAvailableIDs() - 1, inclusive. If index is out of - * range, the result of getAvailableID(0) is returned. - * @param index the given ID index. - * @return the index-th available ID. index must be between 0 - * and countAvailableIDs() - 1, inclusive. If index is out of - * range, the result of getAvailableID(0) is returned. - * @obsolete ICU 3.4 use getAvailableIDs() instead; this function - * is not thread safe, since it returns a reference to storage that - * may become invalid if another thread calls unregister - */ - static const UnicodeString& U_EXPORT2 getAvailableID(int32_t index); -#endif /* U_HIDE_OBSOLETE_API */ -}; - -inline int32_t Transliterator::getMaximumContextLength(void) const { - return maximumContextLength; -} - -inline void Transliterator::setID(const UnicodeString& id) { - ID = id; - // NUL-terminate the ID string, which is a non-aliased copy. - ID.append((char16_t)0); - ID.truncate(ID.length()-1); -} - -#ifndef U_HIDE_INTERNAL_API -inline Transliterator::Token Transliterator::integerToken(int32_t i) { - Token t; - t.integer = i; - return t; -} - -inline Transliterator::Token Transliterator::pointerToken(void* p) { - Token t; - t.pointer = p; - return t; -} -#endif /* U_HIDE_INTERNAL_API */ - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_TRANSLITERATION */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tzfmt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tzfmt.h deleted file mode 100644 index f0acd9be8f..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tzfmt.h +++ /dev/null @@ -1,1099 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2011-2015, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************************* -*/ -#ifndef __TZFMT_H -#define __TZFMT_H - -/** - * \file - * \brief C++ API: TimeZoneFormat - */ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/format.h" -#include "unicode/timezone.h" -#include "unicode/tznames.h" - -U_CDECL_BEGIN -/** - * Constants for time zone display format style used by format/parse APIs - * in TimeZoneFormat. - * @stable ICU 50 - */ -typedef enum UTimeZoneFormatStyle { - /** - * Generic location format, such as "United States Time (New York)", "Italy Time" - * @stable ICU 50 - */ - UTZFMT_STYLE_GENERIC_LOCATION, - /** - * Generic long non-location format, such as "Eastern Time". - * @stable ICU 50 - */ - UTZFMT_STYLE_GENERIC_LONG, - /** - * Generic short non-location format, such as "ET". - * @stable ICU 50 - */ - UTZFMT_STYLE_GENERIC_SHORT, - /** - * Specific long format, such as "Eastern Standard Time". - * @stable ICU 50 - */ - UTZFMT_STYLE_SPECIFIC_LONG, - /** - * Specific short format, such as "EST", "PDT". - * @stable ICU 50 - */ - UTZFMT_STYLE_SPECIFIC_SHORT, - /** - * Localized GMT offset format, such as "GMT-05:00", "UTC+0100" - * @stable ICU 50 - */ - UTZFMT_STYLE_LOCALIZED_GMT, - /** - * Short localized GMT offset format, such as "GMT-5", "UTC+1:30" - * This style is equivalent to the LDML date format pattern "O". - * @stable ICU 51 - */ - UTZFMT_STYLE_LOCALIZED_GMT_SHORT, - /** - * Short ISO 8601 local time difference (basic format) or the UTC indicator. - * For example, "-05", "+0530", and "Z"(UTC). - * This style is equivalent to the LDML date format pattern "X". - * @stable ICU 51 - */ - UTZFMT_STYLE_ISO_BASIC_SHORT, - /** - * Short ISO 8601 locale time difference (basic format). - * For example, "-05" and "+0530". - * This style is equivalent to the LDML date format pattern "x". - * @stable ICU 51 - */ - UTZFMT_STYLE_ISO_BASIC_LOCAL_SHORT, - /** - * Fixed width ISO 8601 local time difference (basic format) or the UTC indicator. - * For example, "-0500", "+0530", and "Z"(UTC). - * This style is equivalent to the LDML date format pattern "XX". - * @stable ICU 51 - */ - UTZFMT_STYLE_ISO_BASIC_FIXED, - /** - * Fixed width ISO 8601 local time difference (basic format). - * For example, "-0500" and "+0530". - * This style is equivalent to the LDML date format pattern "xx". - * @stable ICU 51 - */ - UTZFMT_STYLE_ISO_BASIC_LOCAL_FIXED, - /** - * ISO 8601 local time difference (basic format) with optional seconds field, or the UTC indicator. - * For example, "-0500", "+052538", and "Z"(UTC). - * This style is equivalent to the LDML date format pattern "XXXX". - * @stable ICU 51 - */ - UTZFMT_STYLE_ISO_BASIC_FULL, - /** - * ISO 8601 local time difference (basic format) with optional seconds field. - * For example, "-0500" and "+052538". - * This style is equivalent to the LDML date format pattern "xxxx". - * @stable ICU 51 - */ - UTZFMT_STYLE_ISO_BASIC_LOCAL_FULL, - /** - * Fixed width ISO 8601 local time difference (extended format) or the UTC indicator. - * For example, "-05:00", "+05:30", and "Z"(UTC). - * This style is equivalent to the LDML date format pattern "XXX". - * @stable ICU 51 - */ - UTZFMT_STYLE_ISO_EXTENDED_FIXED, - /** - * Fixed width ISO 8601 local time difference (extended format). - * For example, "-05:00" and "+05:30". - * This style is equivalent to the LDML date format pattern "xxx" and "ZZZZZ". - * @stable ICU 51 - */ - UTZFMT_STYLE_ISO_EXTENDED_LOCAL_FIXED, - /** - * ISO 8601 local time difference (extended format) with optional seconds field, or the UTC indicator. - * For example, "-05:00", "+05:25:38", and "Z"(UTC). - * This style is equivalent to the LDML date format pattern "XXXXX". - * @stable ICU 51 - */ - UTZFMT_STYLE_ISO_EXTENDED_FULL, - /** - * ISO 8601 local time difference (extended format) with optional seconds field. - * For example, "-05:00" and "+05:25:38". - * This style is equivalent to the LDML date format pattern "xxxxx". - * @stable ICU 51 - */ - UTZFMT_STYLE_ISO_EXTENDED_LOCAL_FULL, - /** - * Time Zone ID, such as "America/Los_Angeles". - * @stable ICU 51 - */ - UTZFMT_STYLE_ZONE_ID, - /** - * Short Time Zone ID (BCP 47 Unicode location extension, time zone type value), such as "uslax". - * @stable ICU 51 - */ - UTZFMT_STYLE_ZONE_ID_SHORT, - /** - * Exemplar location, such as "Los Angeles" and "Paris". - * @stable ICU 51 - */ - UTZFMT_STYLE_EXEMPLAR_LOCATION -} UTimeZoneFormatStyle; - -/** - * Constants for GMT offset pattern types. - * @stable ICU 50 - */ -typedef enum UTimeZoneFormatGMTOffsetPatternType { - /** - * Positive offset with hours and minutes fields - * @stable ICU 50 - */ - UTZFMT_PAT_POSITIVE_HM, - /** - * Positive offset with hours, minutes and seconds fields - * @stable ICU 50 - */ - UTZFMT_PAT_POSITIVE_HMS, - /** - * Negative offset with hours and minutes fields - * @stable ICU 50 - */ - UTZFMT_PAT_NEGATIVE_HM, - /** - * Negative offset with hours, minutes and seconds fields - * @stable ICU 50 - */ - UTZFMT_PAT_NEGATIVE_HMS, - /** - * Positive offset with hours field - * @stable ICU 51 - */ - UTZFMT_PAT_POSITIVE_H, - /** - * Negative offset with hours field - * @stable ICU 51 - */ - UTZFMT_PAT_NEGATIVE_H, - - /* The following cannot be #ifndef U_HIDE_INTERNAL_API, needed for other .h declarations */ - /** - * Number of UTimeZoneFormatGMTOffsetPatternType types. - * @internal - */ - UTZFMT_PAT_COUNT = 6 -} UTimeZoneFormatGMTOffsetPatternType; - -/** - * Constants for time types used by TimeZoneFormat APIs for - * receiving time type (standard time, daylight time or unknown). - * @stable ICU 50 - */ -typedef enum UTimeZoneFormatTimeType { - /** - * Unknown - * @stable ICU 50 - */ - UTZFMT_TIME_TYPE_UNKNOWN, - /** - * Standard time - * @stable ICU 50 - */ - UTZFMT_TIME_TYPE_STANDARD, - /** - * Daylight saving time - * @stable ICU 50 - */ - UTZFMT_TIME_TYPE_DAYLIGHT -} UTimeZoneFormatTimeType; - -/** - * Constants for parse option flags, used for specifying optional parse behavior. - * @stable ICU 50 - */ -typedef enum UTimeZoneFormatParseOption { - /** - * No option. - * @stable ICU 50 - */ - UTZFMT_PARSE_OPTION_NONE = 0x00, - /** - * When a time zone display name is not found within a set of display names - * used for the specified style, look for the name from display names used - * by other styles. - * @stable ICU 50 - */ - UTZFMT_PARSE_OPTION_ALL_STYLES = 0x01, - /** - * When parsing a time zone display name in \link UTZFMT_STYLE_SPECIFIC_SHORT \endlink, - * look for the IANA tz database compatible zone abbreviations in addition - * to the localized names coming from the icu::TimeZoneNames currently - * used by the icu::TimeZoneFormat. - * @stable ICU 54 - */ - UTZFMT_PARSE_OPTION_TZ_DATABASE_ABBREVIATIONS = 0x02 -} UTimeZoneFormatParseOption; - -U_CDECL_END - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class TimeZoneGenericNames; -class TZDBTimeZoneNames; -class UVector; - -/** - * TimeZoneFormat supports time zone display name formatting and parsing. - * An instance of TimeZoneFormat works as a subformatter of {@link SimpleDateFormat}, - * but you can also directly get a new instance of TimeZoneFormat and - * formatting/parsing time zone display names. - *

- * ICU implements the time zone display names defined by UTS#35 - * Unicode Locale Data Markup Language (LDML). {@link TimeZoneNames} represents the - * time zone display name data model and this class implements the algorithm for actual - * formatting and parsing. - * - * @see SimpleDateFormat - * @see TimeZoneNames - * @stable ICU 50 - */ -class U_I18N_API TimeZoneFormat : public Format { -public: - /** - * Copy constructor. - * @stable ICU 50 - */ - TimeZoneFormat(const TimeZoneFormat& other); - - /** - * Destructor. - * @stable ICU 50 - */ - virtual ~TimeZoneFormat(); - - /** - * Assignment operator. - * @stable ICU 50 - */ - TimeZoneFormat& operator=(const TimeZoneFormat& other); - - /** - * Return true if the given Format objects are semantically equal. - * Objects of different subclasses are considered unequal. - * @param other The object to be compared with. - * @return Return TRUE if the given Format objects are semantically equal. - * Objects of different subclasses are considered unequal. - * @stable ICU 50 - */ - virtual UBool operator==(const Format& other) const; - - /** - * Clone this object polymorphically. The caller is responsible - * for deleting the result when done. - * @return A copy of the object - * @stable ICU 50 - */ - virtual Format* clone() const; - - /** - * Creates an instance of TimeZoneFormat for the given locale. - * @param locale The locale. - * @param status Receives the status. - * @return An instance of TimeZoneFormat for the given locale, - * owned by the caller. - * @stable ICU 50 - */ - static TimeZoneFormat* U_EXPORT2 createInstance(const Locale& locale, UErrorCode& status); - - /** - * Returns the time zone display name data used by this instance. - * @return The time zone display name data. - * @stable ICU 50 - */ - const TimeZoneNames* getTimeZoneNames() const; - - /** - * Sets the time zone display name data to this format instnace. - * The caller should not delete the TimeZoenNames object after it is adopted - * by this call. - * @param tznames TimeZoneNames object to be adopted. - * @stable ICU 50 - */ - void adoptTimeZoneNames(TimeZoneNames *tznames); - - /** - * Sets the time zone display name data to this format instnace. - * @param tznames TimeZoneNames object to be set. - * @stable ICU 50 - */ - void setTimeZoneNames(const TimeZoneNames &tznames); - - /** - * Returns the localized GMT format pattern. - * @param pattern Receives the localized GMT format pattern. - * @return A reference to the result pattern. - * @see #setGMTPattern - * @stable ICU 50 - */ - UnicodeString& getGMTPattern(UnicodeString& pattern) const; - - /** - * Sets the localized GMT format pattern. The pattern must contain - * a single argument {0}, for example "GMT {0}". - * @param pattern The localized GMT format pattern to be used by this object. - * @param status Recieves the status. - * @see #getGMTPattern - * @stable ICU 50 - */ - void setGMTPattern(const UnicodeString& pattern, UErrorCode& status); - - /** - * Returns the offset pattern used for localized GMT format. - * @param type The offset pattern type enum. - * @param pattern Receives the offset pattern. - * @return A reference to the result pattern. - * @see #setGMTOffsetPattern - * @stable ICU 50 - */ - UnicodeString& getGMTOffsetPattern(UTimeZoneFormatGMTOffsetPatternType type, UnicodeString& pattern) const; - - /** - * Sets the offset pattern for the given offset type. - * @param type The offset pattern type enum. - * @param pattern The offset pattern used for localized GMT format for the type. - * @param status Receives the status. - * @see #getGMTOffsetPattern - * @stable ICU 50 - */ - void setGMTOffsetPattern(UTimeZoneFormatGMTOffsetPatternType type, const UnicodeString& pattern, UErrorCode& status); - - /** - * Returns the decimal digit characters used for localized GMT format. - * The return string contains exactly 10 code points (may include Unicode - * supplementary character) representing digit 0 to digit 9 in the ascending - * order. - * @param digits Receives the decimal digits used for localized GMT format. - * @see #setGMTOffsetDigits - * @stable ICU 50 - */ - UnicodeString& getGMTOffsetDigits(UnicodeString& digits) const; - - /** - * Sets the decimal digit characters used for localized GMT format. - * The input digits must contain exactly 10 code points - * (Unicode supplementary characters are also allowed) representing - * digit 0 to digit 9 in the ascending order. When the input digits - * does not satisfy the condition, U_ILLEGAL_ARGUMENT_ERROR - * will be set to the return status. - * @param digits The decimal digits used for localized GMT format. - * @param status Receives the status. - * @see #getGMTOffsetDigits - * @stable ICU 50 - */ - void setGMTOffsetDigits(const UnicodeString& digits, UErrorCode& status); - - /** - * Returns the localized GMT format string for GMT(UTC) itself (GMT offset is 0). - * @param gmtZeroFormat Receives the localized GMT string string for GMT(UTC) itself. - * @return A reference to the result GMT string. - * @see #setGMTZeroFormat - * @stable ICU 50 - */ - UnicodeString& getGMTZeroFormat(UnicodeString& gmtZeroFormat) const; - - /** - * Sets the localized GMT format string for GMT(UTC) itself (GMT offset is 0). - * @param gmtZeroFormat The localized GMT format string for GMT(UTC). - * @param status Receives the status. - * @see #getGMTZeroFormat - * @stable ICU 50 - */ - void setGMTZeroFormat(const UnicodeString& gmtZeroFormat, UErrorCode& status); - - /** - * Returns the bitwise flags of UTimeZoneFormatParseOption representing the default parse - * options used by this object. - * @return the default parse options. - * @see ParseOption - * @stable ICU 50 - */ - uint32_t getDefaultParseOptions(void) const; - - /** - * Sets the default parse options. - *

Note: By default, an instance of TimeZoneFormat - * created by {@link #createInstance} has no parse options set (UTZFMT_PARSE_OPTION_NONE). - * To specify multipe options, use bitwise flags of UTimeZoneFormatParseOption. - * @see #UTimeZoneFormatParseOption - * @stable ICU 50 - */ - void setDefaultParseOptions(uint32_t flags); - - /** - * Returns the ISO 8601 basic time zone string for the given offset. - * For example, "-08", "-0830" and "Z" - * - * @param offset the offset from GMT(UTC) in milliseconds. - * @param useUtcIndicator true if ISO 8601 UTC indicator "Z" is used when the offset is 0. - * @param isShort true if shortest form is used. - * @param ignoreSeconds true if non-zero offset seconds is appended. - * @param result Receives the ISO format string. - * @param status Receives the status - * @return the ISO 8601 basic format. - * @see #formatOffsetISO8601Extended - * @see #parseOffsetISO8601 - * @stable ICU 51 - */ - UnicodeString& formatOffsetISO8601Basic(int32_t offset, UBool useUtcIndicator, UBool isShort, UBool ignoreSeconds, - UnicodeString& result, UErrorCode& status) const; - - /** - * Returns the ISO 8601 extended time zone string for the given offset. - * For example, "-08:00", "-08:30" and "Z" - * - * @param offset the offset from GMT(UTC) in milliseconds. - * @param useUtcIndicator true if ISO 8601 UTC indicator "Z" is used when the offset is 0. - * @param isShort true if shortest form is used. - * @param ignoreSeconds true if non-zero offset seconds is appended. - * @param result Receives the ISO format string. - * @param status Receives the status - * @return the ISO 8601 basic format. - * @see #formatOffsetISO8601Extended - * @see #parseOffsetISO8601 - * @stable ICU 51 - */ - UnicodeString& formatOffsetISO8601Extended(int32_t offset, UBool useUtcIndicator, UBool isShort, UBool ignoreSeconds, - UnicodeString& result, UErrorCode& status) const; - - /** - * Returns the localized GMT(UTC) offset format for the given offset. - * The localized GMT offset is defined by; - *

    - *
  • GMT format pattern (e.g. "GMT {0}" - see {@link #getGMTPattern}) - *
  • Offset time pattern (e.g. "+HH:mm" - see {@link #getGMTOffsetPattern}) - *
  • Offset digits (e.g. "0123456789" - see {@link #getGMTOffsetDigits}) - *
  • GMT zero format (e.g. "GMT" - see {@link #getGMTZeroFormat}) - *
- * This format always uses 2 digit hours and minutes. When the given offset has non-zero - * seconds, 2 digit seconds field will be appended. For example, - * GMT+05:00 and GMT+05:28:06. - * @param offset the offset from GMT(UTC) in milliseconds. - * @param status Receives the status - * @param result Receives the localized GMT format string. - * @return A reference to the result. - * @see #parseOffsetLocalizedGMT - * @stable ICU 50 - */ - UnicodeString& formatOffsetLocalizedGMT(int32_t offset, UnicodeString& result, UErrorCode& status) const; - - /** - * Returns the short localized GMT(UTC) offset format for the given offset. - * The short localized GMT offset is defined by; - *
    - *
  • GMT format pattern (e.g. "GMT {0}" - see {@link #getGMTPattern}) - *
  • Offset time pattern (e.g. "+HH:mm" - see {@link #getGMTOffsetPattern}) - *
  • Offset digits (e.g. "0123456789" - see {@link #getGMTOffsetDigits}) - *
  • GMT zero format (e.g. "GMT" - see {@link #getGMTZeroFormat}) - *
- * This format uses the shortest representation of offset. The hours field does not - * have leading zero and lower fields with zero will be truncated. For example, - * GMT+5 and GMT+530. - * @param offset the offset from GMT(UTC) in milliseconds. - * @param status Receives the status - * @param result Receives the short localized GMT format string. - * @return A reference to the result. - * @see #parseOffsetShortLocalizedGMT - * @stable ICU 51 - */ - UnicodeString& formatOffsetShortLocalizedGMT(int32_t offset, UnicodeString& result, UErrorCode& status) const; - - using Format::format; - - /** - * Returns the display name of the time zone at the given date for the style. - * @param style The style (e.g. UTZFMT_STYLE_GENERIC_LONG, UTZFMT_STYLE_LOCALIZED_GMT...) - * @param tz The time zone. - * @param date The date. - * @param name Receives the display name. - * @param timeType the output argument for receiving the time type (standard/daylight/unknown) - * used for the display name, or NULL if the information is not necessary. - * @return A reference to the result - * @see #UTimeZoneFormatStyle - * @see #UTimeZoneFormatTimeType - * @stable ICU 50 - */ - virtual UnicodeString& format(UTimeZoneFormatStyle style, const TimeZone& tz, UDate date, - UnicodeString& name, UTimeZoneFormatTimeType* timeType = NULL) const; - - /** - * Returns offset from GMT(UTC) in milliseconds for the given ISO 8601 - * style time zone string. When the given string is not an ISO 8601 time zone - * string, this method sets the current position as the error index - * to ParsePosition pos and returns 0. - * @param text The text contains ISO8601 style time zone string (e.g. "-08:00", "Z") - * at the position. - * @param pos The ParsePosition object. - * @return The offset from GMT(UTC) in milliseconds for the given ISO 8601 style - * time zone string. - * @see #formatOffsetISO8601Basic - * @see #formatOffsetISO8601Extended - * @stable ICU 50 - */ - int32_t parseOffsetISO8601(const UnicodeString& text, ParsePosition& pos) const; - - /** - * Returns offset from GMT(UTC) in milliseconds for the given localized GMT - * offset format string. When the given string cannot be parsed, this method - * sets the current position as the error index to ParsePosition pos - * and returns 0. - * @param text The text contains a localized GMT offset string at the position. - * @param pos The ParsePosition object. - * @return The offset from GMT(UTC) in milliseconds for the given localized GMT - * offset format string. - * @see #formatOffsetLocalizedGMT - * @stable ICU 50 - */ - int32_t parseOffsetLocalizedGMT(const UnicodeString& text, ParsePosition& pos) const; - - /** - * Returns offset from GMT(UTC) in milliseconds for the given short localized GMT - * offset format string. When the given string cannot be parsed, this method - * sets the current position as the error index to ParsePosition pos - * and returns 0. - * @param text The text contains a short localized GMT offset string at the position. - * @param pos The ParsePosition object. - * @return The offset from GMT(UTC) in milliseconds for the given short localized GMT - * offset format string. - * @see #formatOffsetShortLocalizedGMT - * @stable ICU 51 - */ - int32_t parseOffsetShortLocalizedGMT(const UnicodeString& text, ParsePosition& pos) const; - - /** - * Returns a TimeZone by parsing the time zone string according to - * the given parse position, the specified format style and parse options. - * - * @param text The text contains a time zone string at the position. - * @param style The format style - * @param pos The position. - * @param parseOptions The parse options repesented by bitwise flags of UTimeZoneFormatParseOption. - * @param timeType The output argument for receiving the time type (standard/daylight/unknown), - * or NULL if the information is not necessary. - * @return A TimeZone, or null if the input could not be parsed. - * @see UTimeZoneFormatStyle - * @see UTimeZoneFormatParseOption - * @see UTimeZoneFormatTimeType - * @stable ICU 50 - */ - virtual TimeZone* parse(UTimeZoneFormatStyle style, const UnicodeString& text, ParsePosition& pos, - int32_t parseOptions, UTimeZoneFormatTimeType* timeType = NULL) const; - - /** - * Returns a TimeZone by parsing the time zone string according to - * the given parse position, the specified format style and the default parse options. - * - * @param text The text contains a time zone string at the position. - * @param style The format style - * @param pos The position. - * @param timeType The output argument for receiving the time type (standard/daylight/unknown), - * or NULL if the information is not necessary. - * @return A TimeZone, or null if the input could not be parsed. - * @see UTimeZoneFormatStyle - * @see UTimeZoneFormatParseOption - * @see UTimeZoneFormatTimeType - * @stable ICU 50 - */ - TimeZone* parse(UTimeZoneFormatStyle style, const UnicodeString& text, ParsePosition& pos, - UTimeZoneFormatTimeType* timeType = NULL) const; - - /* ---------------------------------------------- - * Format APIs - * ---------------------------------------------- */ - - /** - * Format an object to produce a time zone display string using localized GMT offset format. - * This method handles Formattable objects with a TimeZone. If a the Formattable - * object type is not a TimeZone, then it returns a failing UErrorCode. - * @param obj The object to format. Must be a TimeZone. - * @param appendTo Output parameter to receive result. Result is appended to existing contents. - * @param pos On input: an alignment field, if desired. On output: the offsets of the alignment field. - * @param status Output param filled with success/failure status. - * @return Reference to 'appendTo' parameter. - * @stable ICU 50 - */ - virtual UnicodeString& format(const Formattable& obj, UnicodeString& appendTo, - FieldPosition& pos, UErrorCode& status) const; - - /** - * Parse a string to produce an object. This methods handles parsing of - * time zone display strings into Formattable objects with TimeZone. - * @param source The string to be parsed into an object. - * @param result Formattable to be set to the parse result. If parse fails, return contents are undefined. - * @param parse_pos The position to start parsing at. Upon return this param is set to the position after the - * last character successfully parsed. If the source is not parsed successfully, this param - * will remain unchanged. - * @return A newly created Formattable* object, or NULL on failure. The caller owns this and should - * delete it when done. - * @stable ICU 50 - */ - virtual void parseObject(const UnicodeString& source, Formattable& result, ParsePosition& parse_pos) const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * @stable ICU 50 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * @stable ICU 50 - */ - virtual UClassID getDynamicClassID() const; - -protected: - /** - * Constructs a TimeZoneFormat object for the specified locale. - * @param locale the locale - * @param status receives the status. - * @stable ICU 50 - */ - TimeZoneFormat(const Locale& locale, UErrorCode& status); - -private: - /* Locale of this object */ - Locale fLocale; - - /* Stores the region (could be implicit default) */ - char fTargetRegion[ULOC_COUNTRY_CAPACITY]; - - /* TimeZoneNames object used by this formatter */ - TimeZoneNames* fTimeZoneNames; - - /* TimeZoneGenericNames object used by this formatter - lazily instantiated */ - TimeZoneGenericNames* fTimeZoneGenericNames; - - /* Localized GMT format pattern - e.g. "GMT{0}" */ - UnicodeString fGMTPattern; - - /* Array of offset patterns used by Localized GMT format - e.g. "+HH:mm" */ - UnicodeString fGMTOffsetPatterns[UTZFMT_PAT_COUNT]; - - /* Localized decimal digits used by Localized GMT format */ - UChar32 fGMTOffsetDigits[10]; - - /* Localized GMT zero format - e.g. "GMT" */ - UnicodeString fGMTZeroFormat; - - /* Bit flags representing parse options */ - uint32_t fDefParseOptionFlags; - - /* Constant parts of GMT format pattern, populated from localized GMT format pattern*/ - UnicodeString fGMTPatternPrefix; /* Substring before {0} */ - UnicodeString fGMTPatternSuffix; /* Substring after {0} */ - - /* Compiled offset patterns generated from fGMTOffsetPatterns[] */ - UVector* fGMTOffsetPatternItems[UTZFMT_PAT_COUNT]; - - UBool fAbuttingOffsetHoursAndMinutes; - - /* TZDBTimeZoneNames object used for parsing */ - TZDBTimeZoneNames* fTZDBTimeZoneNames; - - /** - * Returns the time zone's specific format string. - * @param tz the time zone - * @param stdType the name type used for standard time - * @param dstType the name type used for daylight time - * @param date the date - * @param name receives the time zone's specific format name string - * @param timeType when null, actual time type is set - * @return a reference to name. - */ - UnicodeString& formatSpecific(const TimeZone& tz, UTimeZoneNameType stdType, UTimeZoneNameType dstType, - UDate date, UnicodeString& name, UTimeZoneFormatTimeType *timeType) const; - - /** - * Returns the time zone's generic format string. - * @param tz the time zone - * @param genType the generic name type - * @param date the date - * @param name receives the time zone's generic format name string - * @return a reference to name. - */ - UnicodeString& formatGeneric(const TimeZone& tz, int32_t genType, UDate date, UnicodeString& name) const; - - /** - * Lazily create a TimeZoneGenericNames instance - * @param status receives the status - * @return the cached TimeZoneGenericNames. - */ - const TimeZoneGenericNames* getTimeZoneGenericNames(UErrorCode& status) const; - - /** - * Lazily create a TZDBTimeZoneNames instance - * @param status receives the status - * @return the cached TZDBTimeZoneNames. - */ - const TZDBTimeZoneNames* getTZDBTimeZoneNames(UErrorCode& status) const; - - /** - * Private method returning the time zone's exemplar location string. - * This method will never return empty. - * @param tz the time zone - * @param name receives the time zone's exemplar location name - * @return a reference to name. - */ - UnicodeString& formatExemplarLocation(const TimeZone& tz, UnicodeString& name) const; - - /** - * Private enum specifying a combination of offset fields - */ - enum OffsetFields { - FIELDS_H, - FIELDS_HM, - FIELDS_HMS - }; - - /** - * Parses the localized GMT pattern string and initialize - * localized gmt pattern fields. - * @param gmtPattern the localized GMT pattern string such as "GMT {0}" - * @param status U_ILLEGAL_ARGUMENT_ERROR is set when the specified pattern does not - * contain an argument "{0}". - */ - void initGMTPattern(const UnicodeString& gmtPattern, UErrorCode& status); - - /** - * Parse the GMT offset pattern into runtime optimized format. - * @param pattern the offset pattern string - * @param required the required set of fields, such as FIELDS_HM - * @param status U_ILLEGAL_ARGUMENT is set when the specified pattern does not contain - * pattern letters for the required fields. - * @return A list of GMTOffsetField objects, or NULL on error. - */ - static UVector* parseOffsetPattern(const UnicodeString& pattern, OffsetFields required, UErrorCode& status); - - /** - * Appends seconds field to the offset pattern with hour/minute - * Note: This code will be obsoleted once we add hour-minute-second pattern data in CLDR. - * @param offsetHM the offset pattern including hours and minutes fields - * @param result the output offset pattern including hour, minute and seconds fields - * @param status receives the status - * @return a reference to result - */ - static UnicodeString& expandOffsetPattern(const UnicodeString& offsetHM, UnicodeString& result, UErrorCode& status); - - /** - * Truncates minutes field to the offset pattern with hour/minute - * Note: This code will be obsoleted once we add hour pattern data in CLDR. - * @param offsetHM the offset pattern including hours and minutes fields - * @param result the output offset pattern including only hours field - * @param status receives the status - * @return a reference to result - */ - static UnicodeString& truncateOffsetPattern(const UnicodeString& offsetHM, UnicodeString& result, UErrorCode& status); - - /** - * Break input string into UChar32[]. Each array element represents - * a code point. This method is used for parsing localized digit - * characters and support characters in Unicode supplemental planes. - * @param str the string - * @param codeArray receives the result - * @param capacity the capacity of codeArray - * @return TRUE when the specified code array is fully filled with code points - * (no under/overflow). - */ - static UBool toCodePoints(const UnicodeString& str, UChar32* codeArray, int32_t capacity); - - /** - * Private method supprting all of ISO8601 formats - * @param offset the offset from GMT(UTC) in milliseconds. - * @param useUtcIndicator true if ISO 8601 UTC indicator "Z" is used when the offset is 0. - * @param isShort true if shortest form is used. - * @param ignoreSeconds true if non-zero offset seconds is appended. - * @param result Receives the result - * @param status Receives the status - * @return the ISO 8601 basic format. - */ - UnicodeString& formatOffsetISO8601(int32_t offset, UBool isBasic, UBool useUtcIndicator, - UBool isShort, UBool ignoreSeconds, UnicodeString& result, UErrorCode& status) const; - - /** - * Private method used for localized GMT formatting. - * @param offset the zone's UTC offset - * @param isShort true if the short localized GMT format is desired. - * @param result receives the localized GMT format string - * @param status receives the status - */ - UnicodeString& formatOffsetLocalizedGMT(int32_t offset, UBool isShort, UnicodeString& result, UErrorCode& status) const; - - /** - * Returns offset from GMT(UTC) in milliseconds for the given ISO 8601 style - * (extended format) time zone string. When the given string is not an ISO 8601 time - * zone string, this method sets the current position as the error index - * to ParsePosition pos and returns 0. - * @param text the text contains ISO 8601 style time zone string (e.g. "-08:00", "Z") - * at the position. - * @param pos the position, non-negative error index will be set on failure. - * @param extendedOnly TRUE if parsing the text as ISO 8601 extended offset format (e.g. "-08:00"), - * or FALSE to evaluate the text as basic format. - * @param hasDigitOffset receiving if the parsed zone string contains offset digits. - * @return the offset from GMT(UTC) in milliseconds for the given ISO 8601 style - * time zone string. - */ - int32_t parseOffsetISO8601(const UnicodeString& text, ParsePosition& pos, UBool extendedOnly, - UBool* hasDigitOffset = NULL) const; - - /** - * Appends localized digits to the buffer. - * This code assumes that the input number is 0 - 59 - * @param buf the target buffer - * @param n the integer number - * @param minDigits the minimum digits width - */ - void appendOffsetDigits(UnicodeString& buf, int32_t n, uint8_t minDigits) const; - - /** - * Returns offset from GMT(UTC) in milliseconds for the given localized GMT - * offset format string. When the given string cannot be parsed, this method - * sets the current position as the error index to ParsePosition pos - * and returns 0. - * @param text the text contains a localized GMT offset string at the position. - * @param pos the position, non-negative error index will be set on failure. - * @param isShort true if this parser to try the short format first - * @param hasDigitOffset receiving if the parsed zone string contains offset digits. - * @return the offset from GMT(UTC) in milliseconds for the given localized GMT - * offset format string. - */ - int32_t parseOffsetLocalizedGMT(const UnicodeString& text, ParsePosition& pos, - UBool isShort, UBool* hasDigitOffset) const; - - /** - * Parse localized GMT format generated by the patter used by this formatter, except - * GMT Zero format. - * @param text the input text - * @param start the start index - * @param isShort true if the short localized format is parsed. - * @param parsedLen receives the parsed length - * @return the parsed offset in milliseconds - */ - int32_t parseOffsetLocalizedGMTPattern(const UnicodeString& text, int32_t start, - UBool isShort, int32_t& parsedLen) const; - - /** - * Parses localized GMT offset fields into offset. - * @param text the input text - * @param start the start index - * @param isShort true if this is a short format - currently not used - * @param parsedLen the parsed length, or 0 on failure. - * @return the parsed offset in milliseconds. - */ - int32_t parseOffsetFields(const UnicodeString& text, int32_t start, UBool isShort, int32_t& parsedLen) const; - - /** - * Parse localized GMT offset fields with the given pattern. - * @param text the input text - * @param start the start index - * @param pattenItems the pattern (already itemized) - * @param forceSingleHourDigit true if hours field is parsed as a single digit - * @param hour receives the hour offset field - * @param min receives the minute offset field - * @param sec receives the second offset field - * @return the parsed length - */ - int32_t parseOffsetFieldsWithPattern(const UnicodeString& text, int32_t start, - UVector* patternItems, UBool forceSingleHourDigit, int32_t& hour, int32_t& min, int32_t& sec) const; - - /** - * Parses abutting localized GMT offset fields (such as 0800) into offset. - * @param text the input text - * @param start the start index - * @param parsedLen the parsed length, or 0 on failure - * @return the parsed offset in milliseconds. - */ - int32_t parseAbuttingOffsetFields(const UnicodeString& text, int32_t start, int32_t& parsedLen) const; - - /** - * Parses the input text using the default format patterns (e.g. "UTC{0}"). - * @param text the input text - * @param start the start index - * @param parsedLen the parsed length, or 0 on failure - * @return the parsed offset in milliseconds. - */ - int32_t parseOffsetDefaultLocalizedGMT(const UnicodeString& text, int start, int32_t& parsedLen) const; - - /** - * Parses the input GMT offset fields with the default offset pattern. - * @param text the input text - * @param start the start index - * @param separator the separator character, e.g. ':' - * @param parsedLen the parsed length, or 0 on failure. - * @return the parsed offset in milliseconds. - */ - int32_t parseDefaultOffsetFields(const UnicodeString& text, int32_t start, char16_t separator, - int32_t& parsedLen) const; - - /** - * Reads an offset field value. This method will stop parsing when - * 1) number of digits reaches maxDigits - * 2) just before already parsed number exceeds maxVal - * - * @param text the text - * @param start the start offset - * @param minDigits the minimum number of required digits - * @param maxDigits the maximum number of digits - * @param minVal the minimum value - * @param maxVal the maximum value - * @param parsedLen the actual parsed length. - * @return the integer value parsed - */ - int32_t parseOffsetFieldWithLocalizedDigits(const UnicodeString& text, int32_t start, - uint8_t minDigits, uint8_t maxDigits, uint16_t minVal, uint16_t maxVal, int32_t& parsedLen) const; - - /** - * Reads a single decimal digit, either localized digits used by this object - * or any Unicode numeric character. - * @param text the text - * @param start the start index - * @param len the actual length read from the text - * the start index is not a decimal number. - * @return the integer value of the parsed digit, or -1 on failure. - */ - int32_t parseSingleLocalizedDigit(const UnicodeString& text, int32_t start, int32_t& len) const; - - /** - * Formats offset using ASCII digits. The input offset range must be - * within +/-24 hours (exclusive). - * @param offset The offset - * @param sep The field separator character or 0 if not required - * @param minFields The minimum fields - * @param maxFields The maximum fields - * @return The offset string - */ - static UnicodeString& formatOffsetWithAsciiDigits(int32_t offset, char16_t sep, - OffsetFields minFields, OffsetFields maxFields, UnicodeString& result); - - /** - * Parses offset represented by contiguous ASCII digits. - *

- * Note: This method expects the input position is already at the start of - * ASCII digits and does not parse sign (+/-). - * @param text The text contains a sequence of ASCII digits - * @param pos The parse position - * @param minFields The minimum Fields to be parsed - * @param maxFields The maximum Fields to be parsed - * @param fixedHourWidth true if hours field must be width of 2 - * @return Parsed offset, 0 or positive number. - */ - static int32_t parseAbuttingAsciiOffsetFields(const UnicodeString& text, ParsePosition& pos, - OffsetFields minFields, OffsetFields maxFields, UBool fixedHourWidth); - - /** - * Parses offset represented by ASCII digits and separators. - *

- * Note: This method expects the input position is already at the start of - * ASCII digits and does not parse sign (+/-). - * @param text The text - * @param pos The parse position - * @param sep The separator character - * @param minFields The minimum Fields to be parsed - * @param maxFields The maximum Fields to be parsed - * @return Parsed offset, 0 or positive number. - */ - static int32_t parseAsciiOffsetFields(const UnicodeString& text, ParsePosition& pos, char16_t sep, - OffsetFields minFields, OffsetFields maxFields); - - /** - * Unquotes the message format style pattern. - * @param pattern the pattern - * @param result receive the unquoted pattern. - * @return A reference to result. - */ - static UnicodeString& unquote(const UnicodeString& pattern, UnicodeString& result); - - /** - * Initialize localized GMT format offset hour/min/sec patterns. - * This method parses patterns into optimized run-time format. - * @param status receives the status. - */ - void initGMTOffsetPatterns(UErrorCode& status); - - /** - * Check if there are any GMT format offset patterns without - * any separators between hours field and minutes field and update - * fAbuttingOffsetHoursAndMinutes field. This method must be called - * after all patterns are parsed into pattern items. - */ - void checkAbuttingHoursAndMinutes(); - - /** - * Creates an instance of TimeZone for the given offset - * @param offset the offset - * @return A TimeZone with the given offset - */ - TimeZone* createTimeZoneForOffset(int32_t offset) const; - - /** - * Returns the time type for the given name type - * @param nameType the name type - * @return the time type (unknown/standard/daylight) - */ - static UTimeZoneFormatTimeType getTimeType(UTimeZoneNameType nameType); - - /** - * Returns the time zone ID of a match at the specified index within - * the MatchInfoCollection. - * @param matches the collection of matches - * @param idx the index withing matches - * @param tzID receives the resolved time zone ID - * @return a reference to tzID. - */ - UnicodeString& getTimeZoneID(const TimeZoneNames::MatchInfoCollection* matches, int32_t idx, UnicodeString& tzID) const; - - - /** - * Parse a zone ID. - * @param text the text contains a time zone ID string at the position. - * @param pos the position - * @param tzID receives the zone ID - * @return a reference to tzID - */ - UnicodeString& parseZoneID(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const; - - /** - * Parse a short zone ID. - * @param text the text contains a short time zone ID string at the position. - * @param pos the position - * @param tzID receives the short zone ID - * @return a reference to tzID - */ - UnicodeString& parseShortZoneID(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const; - - /** - * Parse an exemplar location string. - * @param text the text contains an exemplar location string at the position. - * @param pos the position. - * @param tzID receives the time zone ID - * @return a reference to tzID - */ - UnicodeString& parseExemplarLocation(const UnicodeString& text, ParsePosition& pos, UnicodeString& tzID) const; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* !UCONFIG_NO_FORMATTING */ -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tznames.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tznames.h deleted file mode 100644 index 6078262957..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tznames.h +++ /dev/null @@ -1,416 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2011-2016, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************************* -*/ -#ifndef __TZNAMES_H -#define __TZNAMES_H - -/** - * \file - * \brief C++ API: TimeZoneNames - */ -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/uloc.h" -#include "unicode/unistr.h" - -U_CDECL_BEGIN - -/** - * Constants for time zone display name types. - * @stable ICU 50 - */ -typedef enum UTimeZoneNameType { - /** - * Unknown display name type. - * @stable ICU 50 - */ - UTZNM_UNKNOWN = 0x00, - /** - * Long display name, such as "Eastern Time". - * @stable ICU 50 - */ - UTZNM_LONG_GENERIC = 0x01, - /** - * Long display name for standard time, such as "Eastern Standard Time". - * @stable ICU 50 - */ - UTZNM_LONG_STANDARD = 0x02, - /** - * Long display name for daylight saving time, such as "Eastern Daylight Time". - * @stable ICU 50 - */ - UTZNM_LONG_DAYLIGHT = 0x04, - /** - * Short display name, such as "ET". - * @stable ICU 50 - */ - UTZNM_SHORT_GENERIC = 0x08, - /** - * Short display name for standard time, such as "EST". - * @stable ICU 50 - */ - UTZNM_SHORT_STANDARD = 0x10, - /** - * Short display name for daylight saving time, such as "EDT". - * @stable ICU 50 - */ - UTZNM_SHORT_DAYLIGHT = 0x20, - /** - * Exemplar location name, such as "Los Angeles". - * @stable ICU 51 - */ - UTZNM_EXEMPLAR_LOCATION = 0x40 -} UTimeZoneNameType; - -U_CDECL_END - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class UVector; -struct MatchInfo; - -/** - * TimeZoneNames is an abstract class representing the time zone display name data model defined - * by UTS#35 Unicode Locale Data Markup Language (LDML). - * The model defines meta zone, which is used for storing a set of display names. A meta zone can be shared - * by multiple time zones. Also a time zone may have multiple meta zone historic mappings. - *

- * For example, people in the United States refer the zone used by the east part of North America as "Eastern Time". - * The tz database contains multiple time zones "America/New_York", "America/Detroit", "America/Montreal" and some - * others that belong to "Eastern Time". However, assigning different display names to these time zones does not make - * much sense for most of people. - *

- * In CLDR (which uses LDML for representing locale data), the display name - * "Eastern Time" is stored as long generic display name of a meta zone identified by the ID "America_Eastern". - * Then, there is another table maintaining the historic mapping to meta zones for each time zone. The time zones in - * the above example ("America/New_York", "America/Detroit"...) are mapped to the meta zone "America_Eastern". - *

- * Sometimes, a time zone is mapped to a different time zone in the past. For example, "America/Indiana/Knox" - * had been moving "Eastern Time" and "Central Time" back and forth. Therefore, it is necessary that time zone - * to meta zones mapping data are stored by date range. - * - *

Note: - * The methods in this class assume that time zone IDs are already canonicalized. For example, you may not get proper - * result returned by a method with time zone ID "America/Indiana/Indianapolis", because it's not a canonical time zone - * ID (the canonical time zone ID for the time zone is "America/Indianapolis". See - * {@link TimeZone#getCanonicalID(const UnicodeString& id, UnicodeString& canonicalID, UErrorCode& status)} about ICU - * canonical time zone IDs. - * - *

- * In CLDR, most of time zone display names except location names are provided through meta zones. But a time zone may - * have a specific name that is not shared with other time zones. - * - * For example, time zone "Europe/London" has English long name for standard time "Greenwich Mean Time", which is also - * shared with other time zones. However, the long name for daylight saving time is "British Summer Time", which is only - * used for "Europe/London". - * - *

- * {@link #getTimeZoneDisplayName} is designed for accessing a name only used by a single time zone. - * But is not necessarily mean that a subclass implementation use the same model with CLDR. A subclass implementation - * may provide time zone names only through {@link #getTimeZoneDisplayName}, or only through {@link #getMetaZoneDisplayName}, - * or both. - * - *

- * The default TimeZoneNames implementation returned by {@link #createInstance} - * uses the locale data imported from CLDR. In CLDR, set of meta zone IDs and mappings between zone IDs and meta zone - * IDs are shared by all locales. Therefore, the behavior of {@link #getAvailableMetaZoneIDs}, - * {@link #getMetaZoneID}, and {@link #getReferenceZoneID} won't be changed no matter - * what locale is used for getting an instance of TimeZoneNames. - * - * @stable ICU 50 - */ -class U_I18N_API TimeZoneNames : public UObject { -public: - /** - * Destructor. - * @stable ICU 50 - */ - virtual ~TimeZoneNames(); - - /** - * Return true if the given TimeZoneNames objects are semantically equal. - * @param other the object to be compared with. - * @return Return TRUE if the given Format objects are semantically equal. - * @stable ICU 50 - */ - virtual UBool operator==(const TimeZoneNames& other) const = 0; - - /** - * Return true if the given TimeZoneNames objects are not semantically - * equal. - * @param other the object to be compared with. - * @return Return TRUE if the given Format objects are not semantically equal. - * @stable ICU 50 - */ - UBool operator!=(const TimeZoneNames& other) const { return !operator==(other); } - - /** - * Clone this object polymorphically. The caller is responsible - * for deleting the result when done. - * @return A copy of the object - * @stable ICU 50 - */ - virtual TimeZoneNames* clone() const = 0; - - /** - * Returns an instance of TimeZoneNames for the specified locale. - * - * @param locale The locale. - * @param status Receives the status. - * @return An instance of TimeZoneNames - * @stable ICU 50 - */ - static TimeZoneNames* U_EXPORT2 createInstance(const Locale& locale, UErrorCode& status); - - /** - * Returns an instance of TimeZoneNames containing only short specific - * zone names (SHORT_STANDARD and SHORT_DAYLIGHT), - * compatible with the IANA tz database's zone abbreviations (not localized). - *
- * Note: The input locale is used for resolving ambiguous names (e.g. "IST" is parsed - * as Israel Standard Time for Israel, while it is parsed as India Standard Time for - * all other regions). The zone names returned by this instance are not localized. - * @stable ICU 54 - */ - static TimeZoneNames* U_EXPORT2 createTZDBInstance(const Locale& locale, UErrorCode& status); - - /** - * Returns an enumeration of all available meta zone IDs. - * @param status Receives the status. - * @return an enumeration object, owned by the caller. - * @stable ICU 50 - */ - virtual StringEnumeration* getAvailableMetaZoneIDs(UErrorCode& status) const = 0; - - /** - * Returns an enumeration of all available meta zone IDs used by the given time zone. - * @param tzID The canoical tiem zone ID. - * @param status Receives the status. - * @return an enumeration object, owned by the caller. - * @stable ICU 50 - */ - virtual StringEnumeration* getAvailableMetaZoneIDs(const UnicodeString& tzID, UErrorCode& status) const = 0; - - /** - * Returns the meta zone ID for the given canonical time zone ID at the given date. - * @param tzID The canonical time zone ID. - * @param date The date. - * @param mzID Receives the meta zone ID for the given time zone ID at the given date. If the time zone does not have a - * corresponding meta zone at the given date or the implementation does not support meta zones, "bogus" state - * is set. - * @return A reference to the result. - * @stable ICU 50 - */ - virtual UnicodeString& getMetaZoneID(const UnicodeString& tzID, UDate date, UnicodeString& mzID) const = 0; - - /** - * Returns the reference zone ID for the given meta zone ID for the region. - * - * Note: Each meta zone must have a reference zone associated with a special region "001" (world). - * Some meta zones may have region specific reference zone IDs other than the special region - * "001". When a meta zone does not have any region specific reference zone IDs, this method - * return the reference zone ID for the special region "001" (world). - * - * @param mzID The meta zone ID. - * @param region The region. - * @param tzID Receives the reference zone ID ("golden zone" in the LDML specification) for the given time zone ID for the - * region. If the meta zone is unknown or the implementation does not support meta zones, "bogus" state - * is set. - * @return A reference to the result. - * @stable ICU 50 - */ - virtual UnicodeString& getReferenceZoneID(const UnicodeString& mzID, const char* region, UnicodeString& tzID) const = 0; - - /** - * Returns the display name of the meta zone. - * @param mzID The meta zone ID. - * @param type The display name type. See {@link #UTimeZoneNameType}. - * @param name Receives the display name of the meta zone. When this object does not have a localized display name for the given - * meta zone with the specified type or the implementation does not provide any display names associated - * with meta zones, "bogus" state is set. - * @return A reference to the result. - * @stable ICU 50 - */ - virtual UnicodeString& getMetaZoneDisplayName(const UnicodeString& mzID, UTimeZoneNameType type, UnicodeString& name) const = 0; - - /** - * Returns the display name of the time zone. Unlike {@link #getDisplayName}, - * this method does not get a name from a meta zone used by the time zone. - * @param tzID The canonical time zone ID. - * @param type The display name type. See {@link #UTimeZoneNameType}. - * @param name Receives the display name for the time zone. When this object does not have a localized display name for the given - * time zone with the specified type, "bogus" state is set. - * @return A reference to the result. - * @stable ICU 50 - */ - virtual UnicodeString& getTimeZoneDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UnicodeString& name) const = 0; - - /** - * Returns the exemplar location name for the given time zone. When this object does not have a localized location - * name, the default implementation may still returns a programmatically generated name with the logic described - * below. - *

    - *
  1. Check if the ID contains "/". If not, return null. - *
  2. Check if the ID does not start with "Etc/" or "SystemV/". If it does, return null. - *
  3. Extract a substring after the last occurrence of "/". - *
  4. Replace "_" with " ". - *
- * For example, "New York" is returned for the time zone ID "America/New_York" when this object does not have the - * localized location name. - * - * @param tzID The canonical time zone ID - * @param name Receives the exemplar location name for the given time zone, or "bogus" state is set when a localized - * location name is not available and the fallback logic described above cannot extract location from the ID. - * @return A reference to the result. - * @stable ICU 50 - */ - virtual UnicodeString& getExemplarLocationName(const UnicodeString& tzID, UnicodeString& name) const; - - /** - * Returns the display name of the time zone at the given date. - *

- * Note: This method calls the subclass's {@link #getTimeZoneDisplayName} first. When the - * result is bogus, this method calls {@link #getMetaZoneID} to get the meta zone ID mapped from the - * time zone, then calls {@link #getMetaZoneDisplayName}. - * - * @param tzID The canonical time zone ID. - * @param type The display name type. See {@link #UTimeZoneNameType}. - * @param date The date. - * @param name Receives the display name for the time zone at the given date. When this object does not have a localized display - * name for the time zone with the specified type and date, "bogus" state is set. - * @return A reference to the result. - * @stable ICU 50 - */ - virtual UnicodeString& getDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UDate date, UnicodeString& name) const; - - /** - * @internal ICU internal only, for specific users only until proposed publicly. - */ - virtual void loadAllDisplayNames(UErrorCode& status); - - /** - * @internal ICU internal only, for specific users only until proposed publicly. - */ - virtual void getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const; - - /** - * MatchInfoCollection represents a collection of time zone name matches used by - * {@link TimeZoneNames#find}. - * @internal - */ - class U_I18N_API MatchInfoCollection : public UMemory { - public: - /** - * Constructor. - * @internal - */ - MatchInfoCollection(); - /** - * Destructor. - * @internal - */ - virtual ~MatchInfoCollection(); - -#ifndef U_HIDE_INTERNAL_API - /** - * Adds a zone match. - * @param nameType The name type. - * @param matchLength The match length. - * @param tzID The time zone ID. - * @param status Receives the status - * @internal - */ - void addZone(UTimeZoneNameType nameType, int32_t matchLength, - const UnicodeString& tzID, UErrorCode& status); - - /** - * Adds a meata zone match. - * @param nameType The name type. - * @param matchLength The match length. - * @param mzID The metazone ID. - * @param status Receives the status - * @internal - */ - void addMetaZone(UTimeZoneNameType nameType, int32_t matchLength, - const UnicodeString& mzID, UErrorCode& status); - - /** - * Returns the number of entries available in this object. - * @return The number of entries. - * @internal - */ - int32_t size() const; - - /** - * Returns the time zone name type of a match at the specified index. - * @param idx The index - * @return The time zone name type. If the specified idx is out of range, - * it returns UTZNM_UNKNOWN. - * @see UTimeZoneNameType - * @internal - */ - UTimeZoneNameType getNameTypeAt(int32_t idx) const; - - /** - * Returns the match length of a match at the specified index. - * @param idx The index - * @return The match length. If the specified idx is out of range, - * it returns 0. - * @internal - */ - int32_t getMatchLengthAt(int32_t idx) const; - - /** - * Gets the zone ID of a match at the specified index. - * @param idx The index - * @param tzID Receives the zone ID. - * @return TRUE if the zone ID was set to tzID. - * @internal - */ - UBool getTimeZoneIDAt(int32_t idx, UnicodeString& tzID) const; - - /** - * Gets the metazone ID of a match at the specified index. - * @param idx The index - * @param mzID Receives the metazone ID - * @return TRUE if the meta zone ID was set to mzID. - * @internal - */ - UBool getMetaZoneIDAt(int32_t idx, UnicodeString& mzID) const; -#endif /* U_HIDE_INTERNAL_API */ - - private: - UVector* fMatches; // vector of MatchEntry - - UVector* matches(UErrorCode& status); - }; - - /** - * Finds time zone name prefix matches for the input text at the - * given offset and returns a collection of the matches. - * @param text The text. - * @param start The starting offset within the text. - * @param types The set of name types represented by bitwise flags of UTimeZoneNameType enums, - * or UTZNM_UNKNOWN for all name types. - * @param status Receives the status. - * @return A collection of matches (owned by the caller), or NULL if no matches are found. - * @see UTimeZoneNameType - * @see MatchInfoCollection - * @internal - */ - virtual MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const = 0; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tzrule.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tzrule.h deleted file mode 100644 index 88d27e6935..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tzrule.h +++ /dev/null @@ -1,832 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2007-2008, International Business Machines Corporation and * -* others. All Rights Reserved. * -******************************************************************************* -*/ -#ifndef TZRULE_H -#define TZRULE_H - -/** - * \file - * \brief C++ API: Time zone rule classes - */ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/uobject.h" -#include "unicode/unistr.h" -#include "unicode/dtrule.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * TimeZoneRule is a class representing a rule for time zone. - * TimeZoneRule has a set of time zone attributes, such as zone name, - * raw offset (UTC offset for standard time) and daylight saving time offset. - * - * @stable ICU 3.8 - */ -class U_I18N_API TimeZoneRule : public UObject { -public: - /** - * Destructor. - * @stable ICU 3.8 - */ - virtual ~TimeZoneRule(); - - /** - * Clone this TimeZoneRule object polymorphically. The caller owns the result and - * should delete it when done. - * @return A copy of the object. - * @stable ICU 3.8 - */ - virtual TimeZoneRule* clone(void) const = 0; - - /** - * Return true if the given TimeZoneRule objects are semantically equal. Objects - * of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given TimeZoneRule objects are semantically equal. - * @stable ICU 3.8 - */ - virtual UBool operator==(const TimeZoneRule& that) const; - - /** - * Return true if the given TimeZoneRule objects are semantically unequal. Objects - * of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given TimeZoneRule objects are semantically unequal. - * @stable ICU 3.8 - */ - virtual UBool operator!=(const TimeZoneRule& that) const; - - /** - * Fills in "name" with the name of this time zone. - * @param name Receives the name of this time zone. - * @return A reference to "name" - * @stable ICU 3.8 - */ - UnicodeString& getName(UnicodeString& name) const; - - /** - * Gets the standard time offset. - * @return The standard time offset from UTC in milliseconds. - * @stable ICU 3.8 - */ - int32_t getRawOffset(void) const; - - /** - * Gets the amount of daylight saving delta time from the standard time. - * @return The amount of daylight saving offset used by this rule - * in milliseconds. - * @stable ICU 3.8 - */ - int32_t getDSTSavings(void) const; - - /** - * Returns if this rule represents the same rule and offsets as another. - * When two TimeZoneRule objects differ only its names, this method - * returns true. - * @param other The TimeZoneRule object to be compared with. - * @return true if the other TimeZoneRule is the same as this one. - * @stable ICU 3.8 - */ - virtual UBool isEquivalentTo(const TimeZoneRule& other) const; - - /** - * Gets the very first time when this rule takes effect. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param result Receives the very first time when this rule takes effect. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const = 0; - - /** - * Gets the final time when this rule takes effect. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param result Receives the final time when this rule takes effect. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const = 0; - - /** - * Gets the first time when this rule takes effect after the specified time. - * @param base The first start time after this base time will be returned. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives The first time when this rule takes effect after - * the specified base time. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, - UBool inclusive, UDate& result) const = 0; - - /** - * Gets the most recent time when this rule takes effect before the specified time. - * @param base The most recent time before this base time will be returned. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives The most recent time when this rule takes effect before - * the specified base time. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, - UBool inclusive, UDate& result) const = 0; - -protected: - - /** - * Constructs a TimeZoneRule with the name, the GMT offset of its - * standard time and the amount of daylight saving offset adjustment. - * @param name The time zone name. - * @param rawOffset The UTC offset of its standard time in milliseconds. - * @param dstSavings The amount of daylight saving offset adjustment in milliseconds. - * If this ia a rule for standard time, the value of this argument is 0. - * @stable ICU 3.8 - */ - TimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings); - - /** - * Copy constructor. - * @param source The TimeZoneRule object to be copied. - * @stable ICU 3.8 - */ - TimeZoneRule(const TimeZoneRule& source); - - /** - * Assignment operator. - * @param right The object to be copied. - * @stable ICU 3.8 - */ - TimeZoneRule& operator=(const TimeZoneRule& right); - -private: - UnicodeString fName; // time name - int32_t fRawOffset; // UTC offset of the standard time in milliseconds - int32_t fDSTSavings; // DST saving amount in milliseconds -}; - -/** - * InitialTimeZoneRule represents a time zone rule - * representing a time zone effective from the beginning and - * has no actual start times. - * @stable ICU 3.8 - */ -class U_I18N_API InitialTimeZoneRule : public TimeZoneRule { -public: - /** - * Constructs an InitialTimeZoneRule with the name, the GMT offset of its - * standard time and the amount of daylight saving offset adjustment. - * @param name The time zone name. - * @param rawOffset The UTC offset of its standard time in milliseconds. - * @param dstSavings The amount of daylight saving offset adjustment in milliseconds. - * If this ia a rule for standard time, the value of this argument is 0. - * @stable ICU 3.8 - */ - InitialTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings); - - /** - * Copy constructor. - * @param source The InitialTimeZoneRule object to be copied. - * @stable ICU 3.8 - */ - InitialTimeZoneRule(const InitialTimeZoneRule& source); - - /** - * Destructor. - * @stable ICU 3.8 - */ - virtual ~InitialTimeZoneRule(); - - /** - * Clone this InitialTimeZoneRule object polymorphically. The caller owns the result and - * should delete it when done. - * @return A copy of the object. - * @stable ICU 3.8 - */ - virtual InitialTimeZoneRule* clone(void) const; - - /** - * Assignment operator. - * @param right The object to be copied. - * @stable ICU 3.8 - */ - InitialTimeZoneRule& operator=(const InitialTimeZoneRule& right); - - /** - * Return true if the given TimeZoneRule objects are semantically equal. Objects - * of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given TimeZoneRule objects are semantically equal. - * @stable ICU 3.8 - */ - virtual UBool operator==(const TimeZoneRule& that) const; - - /** - * Return true if the given TimeZoneRule objects are semantically unequal. Objects - * of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given TimeZoneRule objects are semantically unequal. - * @stable ICU 3.8 - */ - virtual UBool operator!=(const TimeZoneRule& that) const; - - /** - * Gets the time when this rule takes effect in the given year. - * @param year The Gregorian year, with 0 == 1 BCE, -1 == 2 BCE, etc. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param result Receives the start time in the year. - * @return true if this rule takes effect in the year and the result is set to - * "result". - * @stable ICU 3.8 - */ - UBool getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; - - /** - * Returns if this rule represents the same rule and offsets as another. - * When two TimeZoneRule objects differ only its names, this method - * returns true. - * @param that The TimeZoneRule object to be compared with. - * @return true if the other TimeZoneRule is equivalent to this one. - * @stable ICU 3.8 - */ - virtual UBool isEquivalentTo(const TimeZoneRule& that) const; - - /** - * Gets the very first time when this rule takes effect. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param result Receives the very first time when this rule takes effect. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; - - /** - * Gets the final time when this rule takes effect. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param result Receives the final time when this rule takes effect. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; - - /** - * Gets the first time when this rule takes effect after the specified time. - * @param base The first start time after this base time will be returned. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives The first time when this rule takes effect after - * the specified base time. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, - UBool inclusive, UDate& result) const; - - /** - * Gets the most recent time when this rule takes effect before the specified time. - * @param base The most recent time before this base time will be returned. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives The most recent time when this rule takes effect before - * the specified base time. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, - UBool inclusive, UDate& result) const; - -public: - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *

-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 3.8 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 3.8 - */ - virtual UClassID getDynamicClassID(void) const; -}; - -/** - * AnnualTimeZoneRule is a class used for representing a time zone - * rule which takes effect annually. The calenday system used for the rule is - * is based on Gregorian calendar - * - * @stable ICU 3.8 - */ -class U_I18N_API AnnualTimeZoneRule : public TimeZoneRule { -public: - /** - * The constant representing the maximum year used for designating - * a rule is permanent. - */ - static const int32_t MAX_YEAR; - - /** - * Constructs a AnnualTimeZoneRule with the name, the GMT offset of its - * standard time, the amount of daylight saving offset adjustment, the annual start - * time rule and the start/until years. The input DateTimeRule is copied by this - * constructor, so the caller remains responsible for deleting the object. - * @param name The time zone name. - * @param rawOffset The GMT offset of its standard time in milliseconds. - * @param dstSavings The amount of daylight saving offset adjustment in - * milliseconds. If this ia a rule for standard time, - * the value of this argument is 0. - * @param dateTimeRule The start date/time rule repeated annually. - * @param startYear The first year when this rule takes effect. - * @param endYear The last year when this rule takes effect. If this - * rule is effective forever in future, specify MAX_YEAR. - * @stable ICU 3.8 - */ - AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings, - const DateTimeRule& dateTimeRule, int32_t startYear, int32_t endYear); - - /** - * Constructs a AnnualTimeZoneRule with the name, the GMT offset of its - * standard time, the amount of daylight saving offset adjustment, the annual start - * time rule and the start/until years. The input DateTimeRule object is adopted - * by this object, therefore, the caller must not delete the object. - * @param name The time zone name. - * @param rawOffset The GMT offset of its standard time in milliseconds. - * @param dstSavings The amount of daylight saving offset adjustment in - * milliseconds. If this ia a rule for standard time, - * the value of this argument is 0. - * @param dateTimeRule The start date/time rule repeated annually. - * @param startYear The first year when this rule takes effect. - * @param endYear The last year when this rule takes effect. If this - * rule is effective forever in future, specify MAX_YEAR. - * @stable ICU 3.8 - */ - AnnualTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings, - DateTimeRule* dateTimeRule, int32_t startYear, int32_t endYear); - - /** - * Copy constructor. - * @param source The AnnualTimeZoneRule object to be copied. - * @stable ICU 3.8 - */ - AnnualTimeZoneRule(const AnnualTimeZoneRule& source); - - /** - * Destructor. - * @stable ICU 3.8 - */ - virtual ~AnnualTimeZoneRule(); - - /** - * Clone this AnnualTimeZoneRule object polymorphically. The caller owns the result and - * should delete it when done. - * @return A copy of the object. - * @stable ICU 3.8 - */ - virtual AnnualTimeZoneRule* clone(void) const; - - /** - * Assignment operator. - * @param right The object to be copied. - * @stable ICU 3.8 - */ - AnnualTimeZoneRule& operator=(const AnnualTimeZoneRule& right); - - /** - * Return true if the given TimeZoneRule objects are semantically equal. Objects - * of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given TimeZoneRule objects are semantically equal. - * @stable ICU 3.8 - */ - virtual UBool operator==(const TimeZoneRule& that) const; - - /** - * Return true if the given TimeZoneRule objects are semantically unequal. Objects - * of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given TimeZoneRule objects are semantically unequal. - * @stable ICU 3.8 - */ - virtual UBool operator!=(const TimeZoneRule& that) const; - - /** - * Gets the start date/time rule used by this rule. - * @return The AnnualDateTimeRule which represents the start date/time - * rule used by this time zone rule. - * @stable ICU 3.8 - */ - const DateTimeRule* getRule(void) const; - - /** - * Gets the first year when this rule takes effect. - * @return The start year of this rule. The year is in Gregorian calendar - * with 0 == 1 BCE, -1 == 2 BCE, etc. - * @stable ICU 3.8 - */ - int32_t getStartYear(void) const; - - /** - * Gets the end year when this rule takes effect. - * @return The end year of this rule (inclusive). The year is in Gregorian calendar - * with 0 == 1 BCE, -1 == 2 BCE, etc. - * @stable ICU 3.8 - */ - int32_t getEndYear(void) const; - - /** - * Gets the time when this rule takes effect in the given year. - * @param year The Gregorian year, with 0 == 1 BCE, -1 == 2 BCE, etc. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param result Receives the start time in the year. - * @return true if this rule takes effect in the year and the result is set to - * "result". - * @stable ICU 3.8 - */ - UBool getStartInYear(int32_t year, int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; - - /** - * Returns if this rule represents the same rule and offsets as another. - * When two TimeZoneRule objects differ only its names, this method - * returns true. - * @param that The TimeZoneRule object to be compared with. - * @return true if the other TimeZoneRule is equivalent to this one. - * @stable ICU 3.8 - */ - virtual UBool isEquivalentTo(const TimeZoneRule& that) const; - - /** - * Gets the very first time when this rule takes effect. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param result Receives the very first time when this rule takes effect. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; - - /** - * Gets the final time when this rule takes effect. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param result Receives the final time when this rule takes effect. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; - - /** - * Gets the first time when this rule takes effect after the specified time. - * @param base The first start time after this base time will be returned. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives The first time when this rule takes effect after - * the specified base time. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, - UBool inclusive, UDate& result) const; - - /** - * Gets the most recent time when this rule takes effect before the specified time. - * @param base The most recent time before this base time will be returned. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives The most recent time when this rule takes effect before - * the specified base time. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, - UBool inclusive, UDate& result) const; - - -private: - DateTimeRule* fDateTimeRule; - int32_t fStartYear; - int32_t fEndYear; - -public: - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *
-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 3.8 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 3.8 - */ - virtual UClassID getDynamicClassID(void) const; -}; - -/** - * TimeArrayTimeZoneRule represents a time zone rule whose start times are - * defined by an array of milliseconds since the standard base time. - * - * @stable ICU 3.8 - */ -class U_I18N_API TimeArrayTimeZoneRule : public TimeZoneRule { -public: - /** - * Constructs a TimeArrayTimeZoneRule with the name, the GMT offset of its - * standard time, the amount of daylight saving offset adjustment and - * the array of times when this rule takes effect. - * @param name The time zone name. - * @param rawOffset The UTC offset of its standard time in milliseconds. - * @param dstSavings The amount of daylight saving offset adjustment in - * milliseconds. If this ia a rule for standard time, - * the value of this argument is 0. - * @param startTimes The array start times in milliseconds since the base time - * (January 1, 1970, 00:00:00). - * @param numStartTimes The number of elements in the parameter "startTimes" - * @param timeRuleType The time type of the start times, which is one of - * DataTimeRule::WALL_TIME, STANDARD_TIME - * and UTC_TIME. - * @stable ICU 3.8 - */ - TimeArrayTimeZoneRule(const UnicodeString& name, int32_t rawOffset, int32_t dstSavings, - const UDate* startTimes, int32_t numStartTimes, DateTimeRule::TimeRuleType timeRuleType); - - /** - * Copy constructor. - * @param source The TimeArrayTimeZoneRule object to be copied. - * @stable ICU 3.8 - */ - TimeArrayTimeZoneRule(const TimeArrayTimeZoneRule& source); - - /** - * Destructor. - * @stable ICU 3.8 - */ - virtual ~TimeArrayTimeZoneRule(); - - /** - * Clone this TimeArrayTimeZoneRule object polymorphically. The caller owns the result and - * should delete it when done. - * @return A copy of the object. - * @stable ICU 3.8 - */ - virtual TimeArrayTimeZoneRule* clone(void) const; - - /** - * Assignment operator. - * @param right The object to be copied. - * @stable ICU 3.8 - */ - TimeArrayTimeZoneRule& operator=(const TimeArrayTimeZoneRule& right); - - /** - * Return true if the given TimeZoneRule objects are semantically equal. Objects - * of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given TimeZoneRule objects are semantically equal. - * @stable ICU 3.8 - */ - virtual UBool operator==(const TimeZoneRule& that) const; - - /** - * Return true if the given TimeZoneRule objects are semantically unequal. Objects - * of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given TimeZoneRule objects are semantically unequal. - * @stable ICU 3.8 - */ - virtual UBool operator!=(const TimeZoneRule& that) const; - - /** - * Gets the time type of the start times used by this rule. The return value - * is either DateTimeRule::WALL_TIME or STANDARD_TIME - * or UTC_TIME. - * - * @return The time type used of the start times used by this rule. - * @stable ICU 3.8 - */ - DateTimeRule::TimeRuleType getTimeType(void) const; - - /** - * Gets a start time at the index stored in this rule. - * @param index The index of start times - * @param result Receives the start time at the index - * @return true if the index is within the valid range and - * and the result is set. When false, the output - * parameger "result" is unchanged. - * @stable ICU 3.8 - */ - UBool getStartTimeAt(int32_t index, UDate& result) const; - - /** - * Returns the number of start times stored in this rule - * @return The number of start times. - * @stable ICU 3.8 - */ - int32_t countStartTimes(void) const; - - /** - * Returns if this rule represents the same rule and offsets as another. - * When two TimeZoneRule objects differ only its names, this method - * returns true. - * @param that The TimeZoneRule object to be compared with. - * @return true if the other TimeZoneRule is equivalent to this one. - * @stable ICU 3.8 - */ - virtual UBool isEquivalentTo(const TimeZoneRule& that) const; - - /** - * Gets the very first time when this rule takes effect. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param result Receives the very first time when this rule takes effect. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; - - /** - * Gets the final time when this rule takes effect. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param result Receives the final time when this rule takes effect. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const; - - /** - * Gets the first time when this rule takes effect after the specified time. - * @param base The first start time after this base time will be returned. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives The first time when this rule takes effect after - * the specified base time. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, - UBool inclusive, UDate& result) const; - - /** - * Gets the most recent time when this rule takes effect before the specified time. - * @param base The most recent time before this base time will be returned. - * @param prevRawOffset The standard time offset from UTC before this rule - * takes effect in milliseconds. - * @param prevDSTSavings The amount of daylight saving offset from the - * standard time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives The most recent time when this rule takes effect before - * the specified base time. - * @return true if the start time is available. When false is returned, output parameter - * "result" is unchanged. - * @stable ICU 3.8 - */ - virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings, - UBool inclusive, UDate& result) const; - - -private: - enum { TIMEARRAY_STACK_BUFFER_SIZE = 32 }; - UBool initStartTimes(const UDate source[], int32_t size, UErrorCode& ec); - UDate getUTC(UDate time, int32_t raw, int32_t dst) const; - - DateTimeRule::TimeRuleType fTimeRuleType; - int32_t fNumStartTimes; - UDate* fStartTimes; - UDate fLocalStartTimes[TIMEARRAY_STACK_BUFFER_SIZE]; - -public: - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *
-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 3.8 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 3.8 - */ - virtual UClassID getDynamicClassID(void) const; -}; - - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // TZRULE_H - -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tztrans.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tztrans.h deleted file mode 100644 index b295741671..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/tztrans.h +++ /dev/null @@ -1,199 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2007-2008, International Business Machines Corporation and * -* others. All Rights Reserved. * -******************************************************************************* -*/ -#ifndef TZTRANS_H -#define TZTRANS_H - -/** - * \file - * \brief C++ API: Time zone transition - */ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/uobject.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -// Forward declaration -class TimeZoneRule; - -/** - * TimeZoneTransition is a class representing a time zone transition. - * An instance has a time of transition and rules for both before and after the transition. - * @stable ICU 3.8 - */ -class U_I18N_API TimeZoneTransition : public UObject { -public: - /** - * Constructs a TimeZoneTransition with the time and the rules before/after - * the transition. - * - * @param time The time of transition in milliseconds since the base time. - * @param from The time zone rule used before the transition. - * @param to The time zone rule used after the transition. - * @stable ICU 3.8 - */ - TimeZoneTransition(UDate time, const TimeZoneRule& from, const TimeZoneRule& to); - - /** - * Constructs an empty TimeZoneTransition - * @stable ICU 3.8 - */ - TimeZoneTransition(); - - /** - * Copy constructor. - * @param source The TimeZoneTransition object to be copied. - * @stable ICU 3.8 - */ - TimeZoneTransition(const TimeZoneTransition& source); - - /** - * Destructor. - * @stable ICU 3.8 - */ - ~TimeZoneTransition(); - - /** - * Clone this TimeZoneTransition object polymorphically. The caller owns the result and - * should delete it when done. - * @return A copy of the object. - * @stable ICU 3.8 - */ - TimeZoneTransition* clone(void) const; - - /** - * Assignment operator. - * @param right The object to be copied. - * @stable ICU 3.8 - */ - TimeZoneTransition& operator=(const TimeZoneTransition& right); - - /** - * Return true if the given TimeZoneTransition objects are semantically equal. Objects - * of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given TimeZoneTransition objects are semantically equal. - * @stable ICU 3.8 - */ - UBool operator==(const TimeZoneTransition& that) const; - - /** - * Return true if the given TimeZoneTransition objects are semantically unequal. Objects - * of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given TimeZoneTransition objects are semantically unequal. - * @stable ICU 3.8 - */ - UBool operator!=(const TimeZoneTransition& that) const; - - /** - * Returns the time of transition in milliseconds. - * @return The time of the transition in milliseconds since the 1970 Jan 1 epoch time. - * @stable ICU 3.8 - */ - UDate getTime(void) const; - - /** - * Sets the time of transition in milliseconds. - * @param time The time of the transition in milliseconds since the 1970 Jan 1 epoch time. - * @stable ICU 3.8 - */ - void setTime(UDate time); - - /** - * Returns the rule used before the transition. - * @return The time zone rule used after the transition. - * @stable ICU 3.8 - */ - const TimeZoneRule* getFrom(void) const; - - /** - * Sets the rule used before the transition. The caller remains - * responsible for deleting the TimeZoneRule object. - * @param from The time zone rule used before the transition. - * @stable ICU 3.8 - */ - void setFrom(const TimeZoneRule& from); - - /** - * Adopts the rule used before the transition. The caller must - * not delete the TimeZoneRule object passed in. - * @param from The time zone rule used before the transition. - * @stable ICU 3.8 - */ - void adoptFrom(TimeZoneRule* from); - - /** - * Sets the rule used after the transition. The caller remains - * responsible for deleting the TimeZoneRule object. - * @param to The time zone rule used after the transition. - * @stable ICU 3.8 - */ - void setTo(const TimeZoneRule& to); - - /** - * Adopts the rule used after the transition. The caller must - * not delete the TimeZoneRule object passed in. - * @param to The time zone rule used after the transition. - * @stable ICU 3.8 - */ - void adoptTo(TimeZoneRule* to); - - /** - * Returns the rule used after the transition. - * @return The time zone rule used after the transition. - * @stable ICU 3.8 - */ - const TimeZoneRule* getTo(void) const; - -private: - UDate fTime; - TimeZoneRule* fFrom; - TimeZoneRule* fTo; - -public: - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *
-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 3.8 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 3.8 - */ - virtual UClassID getDynamicClassID(void) const; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // TZTRANS_H - -//eof diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ualoc.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ualoc.h deleted file mode 100644 index 8260c17602..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ualoc.h +++ /dev/null @@ -1,305 +0,0 @@ -/* -***************************************************************************************** -* Copyright (C) 2014-2015 Apple Inc. All Rights Reserved. -***************************************************************************************** -*/ - -#ifndef UALOC_H -#define UALOC_H - -#include "unicode/utypes.h" - -#ifndef U_HIDE_DRAFT_API - -/** - * Codes for language status in a country or region. - * @draft ICU 54 - */ -typedef enum { - /** - * The status is unknown, or the language has no special status. - * @draft ICU 54 */ - UALANGSTATUS_UNSPECIFIED = 0, - /** - * The language is official in a region of the specified country, - * e.g. Hawaiian for U.S. - * @draft ICU 54 */ - UALANGSTATUS_REGIONAL_OFFICIAL = 4, - /** - * The language is de-facto official for the specified country or region, - * e.g. English for U.S. - * @draft ICU 54 */ - UALANGSTATUS_DEFACTO_OFFICIAL = 8, - /** - * The language is explicitly official for the specified country or region. - * @draft ICU 54 */ - UALANGSTATUS_OFFICIAL = 12 -} UALanguageStatus; - -/** - * UALANGDATA_CODELEN is the maximum length of a language code - * (language subtag, possible extension, possible script subtag) - * in the UALanguageEntry struct. - * @draft ICU 54 - */ -#define UALANGDATA_CODELEN 23 - -/** - * The UALanguageEntry structure provides information about - * one of the languages for a specified region. - * @draft ICU 54 - */ -typedef struct { - char languageCode[UALANGDATA_CODELEN + 1]; /**< language code, may include script or - other subtags after primary language. - This may be "und" (undetermined) for - some regions such as AQ Antarctica. - @draft ICU 54 */ - double userFraction; /**< fraction of region's population (from 0.0 to 1.0) that - uses this language (not necessarily as a first language). - This may be 0.0 if the fraction is known to be very small. - @draft ICU 54 */ - UALanguageStatus status; /**< status of the language, if any. - @draft ICU 54 */ -} UALanguageEntry; - -/** - * Fills out a provided UALanguageEntry entry with information about the languages - * used in a specified region. - * - * @param regionID - * The specified regionID (currently only ISO-3166-style IDs are supported). - * @param minimumFraction - * The minimum fraction of language users for a language to be included - * in the UALanguageEntry array. Must be in the range 0.0 to 1.0; set to - * 0.0 if no minimum threshold is desired. As an example, as of March 2014 - * ICU lists 74 languages for India; setting minimumFraction to 0.001 (0.1%) - * skips 27, keeping the top 47 languages for inclusion in the entries array - * (depending on entriesCapacity); setting minimumFraction to 0.01 (1%) - * skips 54, keeping the top 20 for inclusion. - * @param entries - * Caller-provided array of UALanguageEntry elements. This will be filled - * out with information for languages of the specified region that meet - * the minimumFraction threshold, sorted in descending order by - * userFraction, up to the number of elements specified by entriesCapacity - * (so the number of languages for which data is provided can be limited by - * total count, by userFraction, or both). - * Preflight option: You may set this to NULL (and entriesCapacity to 0) - * to just obtain a count of all of the languages that meet the specified - * minimumFraction, without actually getting data for any of them. - * @param entriesCapacity - * The number of elements in the provided entries array. Must be 0 if - * entries is NULL (preflight option). - * @param status - * A pointer to a UErrorCode to receive any errors, for example - * U_MISSING_RESOURCE_ERROR if there is no data available for the - * specified region. - * @return - * The number of elements in entries filled out with data, or if - * entries is NULL and entriesCapacity is 0 (preflight option ), the total - * number of languages for the specified region that meet the minimumFraction - * threshold. - * @draft ICU 54 - */ -U_DRAFT int32_t U_EXPORT2 -ualoc_getLanguagesForRegion(const char *regionID, double minimumFraction, - UALanguageEntry *entries, int32_t entriesCapacity, - UErrorCode *err); - - -/** - * Gets the desired lproj parent locale ID for the specified locale, - * using ICU inheritance chain plus Apple additions (for zh*). For - * example, provided any ID in the following chains it would return - * the next one to the right: - * - * en_US → en → root; - * en_HK → en_GB → en_001 → en → root; - * en_IN → en_GB → en_001 → en → root; - * es_ES → es → root; - * es_MX → es_419 → es → root; - * haw → root; - * pt_BR → pt → root; - * pt_PT → pt → root; - * sr_Cyrl → sr → root; - * sr_Latn → root; - * zh_Hans → zh → zh_CN → root; - * zh_Hant_MO → zh_Hant_HK → zh_Hant → zh_TW → root; - * zh_HK → zh_Hant_HK → zh_Hant → zh_TW → root; - * root → root; - * tlh → root; - * - * @param localeID The locale whose parent to get. This can use either '-' or '_' for separator. - * @param parent Buffer into which the parent localeID will be copied. - * This will always use '_' for separator. - * @param parentCapacity The size of the buffer for parent localeID (including room for null terminator). - * @param err Pointer to UErrorCode. If on input it indicates failure, function will return 0. - * If on output it indicates an error the contents of parent buffer are undefined. - * @return The actual buffer length of the parent localeID. If it is greater than parentCapacity, - * an overflow error will be set and the contents of parent buffer are undefined. - * @draft ICU 53 - */ -U_DRAFT int32_t U_EXPORT2 -ualoc_getAppleParent(const char* localeID, - char * parent, - int32_t parentCapacity, - UErrorCode* err); - -/** - * ualoc_localizationsToUse - map preferred languages to - * available localizations. - * ========================= - * BEHAVIOR EXAMPLES - * Each block gives up to 6 sets of available lprojs, and then shows how various - * preferred language requests would be mapped into one of the lprojs in each set. - * The en entriy marked * is currently not working as intended (get just "en" - * instead of the indicated values) - * - * -------- - * lproj sets → list1 list2 list3 list4 list5 list6 - * zh_CN zh_CN zh_CN zh_Hans zh_CN zh_CN - * zh_TW zh_TW zh_TW zh_Hant zh_TW zh_TW - * zh_HK zh_HK zh_Hant_HK zh_Hans zh_HK - * zh_MO zh_Hant zh_Hans - * zh_Hant - * zh_Hant_HK - * language ↓ - * zh zh_CN zh_CN zh_CN zh_Hans zh_Hans zh_Hans - * zh-Hans zh_CN zh_CN zh_CN zh_Hans zh_Hans zh_Hans - * zh-Hant zh_TW zh_TW zh_TW zh_Hant zh_Hant zh_Hant - * zh-Hans-CN zh_CN zh_CN zh_CN zh_Hans zh_CN, zh_CN, - * zh_Hans zh_Hans - * zh-Hans-SG zh_CN zh_CN zh_CN zh_Hans zh_Hans zh_Hans - * zh-Hant-TW zh_TW zh_TW zh_TW zh_Hant zh_TW, zh_TW, - * zh_Hant zh_Hant - * zh-Hant-HK zh_TW zh_HK, zh_HK, zh_Hant_HK, zh_Hant zh_Hant_HK, - * zh_TW zh_TW zh_Hant zh_Hant - * zh-Hant-MO zh_TW zh_HK, zh_MO, zh_Hant_HK, zh_Hant zh_Hant_HK, - * zh_TW zh_HK,zh_TW zh_Hant zh_Hant - * zh-Hans-HK zh_CN zh_CN zh_CN zh_Hans zh_Hans zh_Hans - * zh-CN zh_CN zh_CN zh_CN zh_Hans zh_CN, zh_CN, - * zh_Hans zh_Hans - * zh-SG zh_CN zh_CN zh_CN zh_Hans zh_Hans zh_Hans - * zh-TW zh_TW zh_TW zh_TW zh_Hant zh_TW, zh_TW, - * zh_Hant zh_Hant - * zh-HK zh_TW zh_HK zh_HK, zh_Hant_HK, zh_Hant zh_HK, - * zh_TW zh_Hant zh_Hant_HK,zh_Hant - * zh-MO zh_TW zh_HK zh_MO, zh_Hant_HK, zh_Hant zh_Hant_HK, - * zh_HK,zh_TW zh_Hant zh_Hant_HK,zh_Hant - * -------- - * lproj sets → list1 list2 list3 list4 list5 list6 - * English en en en en en - * en_AU en_AU en_AU en_AU en_AU - * en_GB en_GB en_GB en_GB en_GB - * en_CA en_CA en_001 en_001 - * en_IN en_150 - * en_US - * language ↓ - * en English en en en en en - * en-US English en en en_US, en en - * en - * en-AU English en_AU, en_AU, en_AU, en_AU,en_GB, en_AU,en_GB, - * en_GB,en en_GB,en en_GB,en en_001,en en_001,en - * en-CA English en en_CA, en_CA, en_001, en_001, - * en en en en - * en-GB English en_GB, en_GB, en_GB, en_GB, en_GB, - * en en en en_001,en en_001,en - * en-IN English en_GB, en_GB, en_IN, en_GB, en_GB, - * en en en_GB,en en_001,en en_001,en - * en-US English en en en_US, en en - * en - * en-FR English en_GB, en_GB, en_GB, en_GB, en_150,en_GB, - * en en en en_001,en en_001,en - * en-IL English en en en en_001, en_001, - * en en - * en-001 English en en en en_001, en_001, - * en en - * en-150 English en_GB, en_GB, en_GB, en_GB, en_150,en_GB, - * en en en en_001,en en_001,en - * en-Latn English en en en en en - * en-Latn_US English en en en_US,* en en - * en - * -------- - * lproj sets → list1 list2 list3 list4 list5 list6 - * Spanish es es es es es - * es_MX es_419 es_419 es_ES es_ES - * es_MX es_MX es_419 - * es_MX - * language ↓ - * es Spanish es es es es es - * es-ES Spanish es es es es_ES, es_ES, - * es es - * es-419 Spanish es es_419, es_419, es es_419, - * es es es - * es-MX Spanish es_MX, es_419, es_MX, es_MX, es_MX, - * es es es_419,es es es_419,es - * es-AR Spanish es es_419, es_419, es es_419, - * es es es - * -------- - * lproj sets → list1 list2 list3 list4 list5 list6 - * Portuguese pt pt pt - * pt_PT pt_BR pt_BR - * pt_PT - * language ↓ - * pt Portuguese pt pt pt - * pt-BR Portuguese pt pt_BR, pt_BR, - * pt pt - * pt-PT Portuguese pt_PT, pt_PT, pt - * pt pt - * pt-MO Portuguese pt_PT, pt_PT, pt - * pt pt - * ========================= - * - * @param preferredLanguages - * Ordered array of pointers to user's preferred language - * codes (BCP47 style null-terminated ASCII strings), in - * order from most preferred; intended to accept the - * contents of AppleLanguages. Must not be NULL. - * Entries with the following values will be ignored: - * NULL, "", "root", any entry beginning with '-' or '_'. - * @param preferredLanguagesCount - * Count of entries in preferredLanguages. - * @param availableLocalizations - * Unordered array of pointers to identifiers for available - * localizations (lprojs); handles old Apple-style - * identifiers such as "English", as well as currently- - * superseded identifiers such as "no", "tl". Must not be - * NULL. Entries with the following values will be ignored: - * NULL, "", "root", any entry beginning with '-' or '_'. - * @param availableLocalizationsCount - * Count of entries in availableLocalizations. - * @param localizationsToUse - * Caller-provided array to be filled with pointers to - * localizations to use in the availableLocalizations - * array; these are entries from availableLocalizations - * that correspond to the first language in - * preferredLanguages for which there is any entry in - * availableLocalizations that is a reasonable match, - * with the best-matching localization first in - * localizationsToUse, followed by any other possible - * fallback localizations (for example, "en_IN" in - * preferredLanguages might produce { "en_GB, "en" } in - * localizationsToUse). Must not be NULL. This need not - * large enough to accomodate all of the localizations - * that might be returned; it is perfectly reasonable - * (and more efficient) to only provide an array with - * one entry, if that is all that you are planning to use. - * @param localizationsToUseCapacity - * The capacity of localizationsToUse. - * @param status - * A pointer to a UErrorCode to receive any errors. - * @return - * The number of entries filled out in localizationsToUse. - * @draft ICU 55 - */ -U_DRAFT int32_t U_EXPORT2 -ualoc_localizationsToUse( const char* const *preferredLanguages, - int32_t preferredLanguagesCount, - const char* const *availableLocalizations, - int32_t availableLocalizationsCount, - const char* *localizationsToUse, - int32_t localizationsToUseCapacity, - UErrorCode *status ); - -#endif /* U_HIDE_DRAFT_API */ -#endif /*UALOC_H*/ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uameasureformat.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uameasureformat.h deleted file mode 100644 index 7622cd6aa2..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uameasureformat.h +++ /dev/null @@ -1,684 +0,0 @@ -/* -***************************************************************************************** -* Copyright (C) 2014-2017 Apple Inc. All Rights Reserved. -***************************************************************************************** -*/ - -#ifndef UAMEASUREFORMAT_H -#define UAMEASUREFORMAT_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING -#ifndef U_HIDE_DRAFT_API - -#include "unicode/localpointer.h" -#include "unicode/unum.h" -#include "unicode/umisc.h" -#include "unicode/ufieldpositer.h" - -/** - * \file - * \brief C API: Format combinations of measurement units and numeric values. - * - * This is a somewhat temporary Apple-specific wrapper for using C++ MeasureFormat - * to format Measure objects, until the official ICU C API is available. - */ - -/** - * Opaque UAMeasureFormat object for use in C programs. - * @draft ICU 53 - */ -struct UAMeasureFormat; -typedef struct UAMeasureFormat UAMeasureFormat; /**< C typedef for struct UAMeasureFormat. @draft ICU 53 */ - -/** - * Constants for various widths. - * @draft ICU 53 - */ -typedef enum UAMeasureFormatWidth { - /** - * Full unit names, e.g. "5 hours, 37 minutes" - * @draft ICU 53 - */ - UAMEASFMT_WIDTH_WIDE, - - /** - * Abbreviated unit names, e.g. "5 hr, 37 min" - * @draft ICU 53 - */ - UAMEASFMT_WIDTH_SHORT, - - /** - * Use unit symbols if possible, e.g. "5h 37m" - * @draft ICU 53 - */ - UAMEASFMT_WIDTH_NARROW, - - /** - * Completely omit unit designatins if possible, e.g. "5:37" - * @draft ICU 53 - */ - UAMEASFMT_WIDTH_NUMERIC, - - /** - * Shorter, between SHORT and NARROW, e.g. "5hr 37min" - * @draft ICU 57 - */ - UAMEASFMT_WIDTH_SHORTER, - - /** - * Count of values in this enum. - * @draft ICU 53 - */ - UAMEASFMT_WIDTH_COUNT -} UAMeasureFormatWidth; - -/** - * Measurement units - * @draft ICU 54 - */ -typedef enum UAMeasureUnit { - UAMEASUNIT_ACCELERATION_G_FORCE = (0 << 8) + 0, - UAMEASUNIT_ACCELERATION_METER_PER_SECOND_SQUARED = (0 << 8) + 1, // (CLDR 26, ICU-541) - // - UAMEASUNIT_ANGLE_DEGREE = (1 << 8) + 0, - UAMEASUNIT_ANGLE_ARC_MINUTE = (1 << 8) + 1, - UAMEASUNIT_ANGLE_ARC_SECOND = (1 << 8) + 2, - UAMEASUNIT_ANGLE_RADIAN = (1 << 8) + 3, // (CLDR 26, ICU-541) - UAMEASUNIT_ANGLE_REVOLUTION = (1 << 8) + 4, // (CLDR 28, ICU-561.3) - // - UAMEASUNIT_AREA_SQUARE_METER = (2 << 8) + 0, - UAMEASUNIT_AREA_SQUARE_KILOMETER = (2 << 8) + 1, - UAMEASUNIT_AREA_SQUARE_FOOT = (2 << 8) + 2, - UAMEASUNIT_AREA_SQUARE_MILE = (2 << 8) + 3, - UAMEASUNIT_AREA_ACRE = (2 << 8) + 4, - UAMEASUNIT_AREA_HECTARE = (2 << 8) + 5, - UAMEASUNIT_AREA_SQUARE_CENTIMETER = (2 << 8) + 6, // (CLDR 26, ICU-541) - UAMEASUNIT_AREA_SQUARE_INCH = (2 << 8) + 7, // (CLDR 26, ICU-541) - UAMEASUNIT_AREA_SQUARE_YARD = (2 << 8) + 8, // (CLDR 26, ICU-541) - UAMEASUNIT_AREA_DUNAM = (2 << 8) + 9, // (CLDR 35, ICU-641) - // - // (3 reserved for currency, handled separately) - // - UAMEASUNIT_DURATION_YEAR = (4 << 8) + 0, - UAMEASUNIT_DURATION_MONTH = (4 << 8) + 1, - UAMEASUNIT_DURATION_WEEK = (4 << 8) + 2, - UAMEASUNIT_DURATION_DAY = (4 << 8) + 3, - UAMEASUNIT_DURATION_HOUR = (4 << 8) + 4, - UAMEASUNIT_DURATION_MINUTE = (4 << 8) + 5, - UAMEASUNIT_DURATION_SECOND = (4 << 8) + 6, - UAMEASUNIT_DURATION_MILLISECOND = (4 << 8) + 7, - UAMEASUNIT_DURATION_MICROSECOND = (4 << 8) + 8, // (CLDR 26, ICU-541) - UAMEASUNIT_DURATION_NANOSECOND = (4 << 8) + 9, // (CLDR 26, ICU-541) - UAMEASUNIT_DURATION_CENTURY = (4 << 8) + 10, // (CLDR 28, ICU-561.3) - UAMEASUNIT_DURATION_YEAR_PERSON = (4 << 8) + 11, // (CLDR 35, ICU-641) - UAMEASUNIT_DURATION_MONTH_PERSON = (4 << 8) + 12, // (CLDR 35, ICU-641) - UAMEASUNIT_DURATION_WEEK_PERSON = (4 << 8) + 13, // (CLDR 35, ICU-641) - UAMEASUNIT_DURATION_DAY_PERSON = (4 << 8) + 14, // (CLDR 35, ICU-641) - // - UAMEASUNIT_LENGTH_METER = (5 << 8) + 0, - UAMEASUNIT_LENGTH_CENTIMETER = (5 << 8) + 1, - UAMEASUNIT_LENGTH_KILOMETER = (5 << 8) + 2, - UAMEASUNIT_LENGTH_MILLIMETER = (5 << 8) + 3, - UAMEASUNIT_LENGTH_PICOMETER = (5 << 8) + 4, - UAMEASUNIT_LENGTH_FOOT = (5 << 8) + 5, - UAMEASUNIT_LENGTH_INCH = (5 << 8) + 6, - UAMEASUNIT_LENGTH_MILE = (5 << 8) + 7, - UAMEASUNIT_LENGTH_YARD = (5 << 8) + 8, - UAMEASUNIT_LENGTH_LIGHT_YEAR = (5 << 8) + 9, - UAMEASUNIT_LENGTH_DECIMETER = (5 << 8) + 10, // (CLDR 26, ICU-541) - UAMEASUNIT_LENGTH_MICROMETER = (5 << 8) + 11, // (CLDR 26, ICU-541) - UAMEASUNIT_LENGTH_NANOMETER = (5 << 8) + 12, // (CLDR 26, ICU-541) - UAMEASUNIT_LENGTH_NAUTICAL_MILE = (5 << 8) + 13, // (CLDR 26, ICU-541) - UAMEASUNIT_LENGTH_FATHOM = (5 << 8) + 14, // (CLDR 26, ICU-541) - UAMEASUNIT_LENGTH_FURLONG = (5 << 8) + 15, // (CLDR 26, ICU-541) - UAMEASUNIT_LENGTH_ASTRONOMICAL_UNIT = (5 << 8) + 16, // (CLDR 26, ICU-541) - UAMEASUNIT_LENGTH_PARSEC = (5 << 8) + 17, // (CLDR 26, ICU-541) - UAMEASUNIT_LENGTH_MILE_SCANDINAVIAN = (5 << 8) + 18, // (CLDR 28, ICU-561.3) - UAMEASUNIT_LENGTH_POINT = (5 << 8) + 19, // (CLDR 31, ICU-590) - UAMEASUNIT_LENGTH_SOLAR_RADIUS = (5 << 8) + 20, // (CLDR 35, ICU-641) - // - UAMEASUNIT_MASS_GRAM = (6 << 8) + 0, - UAMEASUNIT_MASS_KILOGRAM = (6 << 8) + 1, - UAMEASUNIT_MASS_OUNCE = (6 << 8) + 2, - UAMEASUNIT_MASS_POUND = (6 << 8) + 3, - UAMEASUNIT_MASS_STONE = (6 << 8) + 4, // = 14 pounds / 6.35 kg, abbr "st", used in UK/Ireland for body weight (CLDR 26) - UAMEASUNIT_MASS_MICROGRAM = (6 << 8) + 5, // (CLDR 26, ICU-541) - UAMEASUNIT_MASS_MILLIGRAM = (6 << 8) + 6, // (CLDR 26, ICU-541) - UAMEASUNIT_MASS_METRIC_TON = (6 << 8) + 7, // = "tonne" (CLDR 26, ICU-541) - UAMEASUNIT_MASS_TON = (6 << 8) + 8, // = "short ton", U.S. ton (CLDR 26, ICU-541) - UAMEASUNIT_MASS_CARAT = (6 << 8) + 9, // (CLDR 26, ICU-541) - UAMEASUNIT_MASS_OUNCE_TROY = (6 << 8) + 10, // (CLDR 26, ICU-541) - UAMEASUNIT_MASS_DALTON = (6 << 8) + 11, // (CLDR 35, ICU-641) - UAMEASUNIT_MASS_EARTH_MASS = (6 << 8) + 12, // (CLDR 35, ICU-641) - UAMEASUNIT_MASS_SOLAR_MASS = (6 << 8) + 13, // (CLDR 35, ICU-641) - // - UAMEASUNIT_POWER_WATT = (7 << 8) + 0, - UAMEASUNIT_POWER_KILOWATT = (7 << 8) + 1, - UAMEASUNIT_POWER_HORSEPOWER = (7 << 8) + 2, - UAMEASUNIT_POWER_MILLIWATT = (7 << 8) + 3, // (CLDR 26, ICU-541) - UAMEASUNIT_POWER_MEGAWATT = (7 << 8) + 4, // (CLDR 26, ICU-541) - UAMEASUNIT_POWER_GIGAWATT = (7 << 8) + 5, // (CLDR 26, ICU-541) - // - UAMEASUNIT_PRESSURE_HECTOPASCAL = (8 << 8) + 0, - UAMEASUNIT_PRESSURE_INCH_HG = (8 << 8) + 1, - UAMEASUNIT_PRESSURE_MILLIBAR = (8 << 8) + 2, - UAMEASUNIT_PRESSURE_MILLIMETER_OF_MERCURY = (8 << 8) + 3, // (CLDR 26, ICU-541) - UAMEASUNIT_PRESSURE_POUND_PER_SQUARE_INCH = (8 << 8) + 4, // (CLDR 26, ICU-541) - UAMEASUNIT_PRESSURE_ATMOSPHERE = (8 << 8) + 5, // (CLDR 34, ICU-631) - UAMEASUNIT_PRESSURE_KILOPASCAL = (8 << 8) + 6, // (CLDR 35, ICU-641) - UAMEASUNIT_PRESSURE_MEGAPASCAL = (8 << 8) + 7, // (CLDR 35, ICU-641) - // - UAMEASUNIT_SPEED_METER_PER_SECOND = (9 << 8) + 0, - UAMEASUNIT_SPEED_KILOMETER_PER_HOUR = (9 << 8) + 1, - UAMEASUNIT_SPEED_MILE_PER_HOUR = (9 << 8) + 2, - UAMEASUNIT_SPEED_KNOT = (9 << 8) + 3, // (CLDR 28, ICU-561.3) - // - UAMEASUNIT_TEMPERATURE_CELSIUS = (10 << 8) + 0, - UAMEASUNIT_TEMPERATURE_FAHRENHEIT = (10 << 8) + 1, - UAMEASUNIT_TEMPERATURE_KELVIN = (10 << 8) + 2, // (CLDR 26, ICU-541) - UAMEASUNIT_TEMPERATURE_GENERIC = (10 << 8) + 3, // (CLDR 27, ICU-550.2) - // - UAMEASUNIT_VOLUME_LITER = (11 << 8) + 0, - UAMEASUNIT_VOLUME_CUBIC_KILOMETER = (11 << 8) + 1, - UAMEASUNIT_VOLUME_CUBIC_MILE = (11 << 8) + 2, - UAMEASUNIT_VOLUME_MILLILITER = (11 << 8) + 3, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_CENTILITER = (11 << 8) + 4, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_DECILITER = (11 << 8) + 5, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_HECTOLITER = (11 << 8) + 6, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_MEGALITER = (11 << 8) + 7, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_CUBIC_CENTIMETER = (11 << 8) + 8, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_CUBIC_METER = (11 << 8) + 9, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_CUBIC_INCH = (11 << 8) + 10, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_CUBIC_FOOT = (11 << 8) + 11, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_CUBIC_YARD = (11 << 8) + 12, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_ACRE_FOOT = (11 << 8) + 13, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_BUSHEL = (11 << 8) + 14, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_TEASPOON = (11 << 8) + 15, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_TABLESPOON = (11 << 8) + 16, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_FLUID_OUNCE = (11 << 8) + 17, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_CUP = (11 << 8) + 18, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_PINT = (11 << 8) + 19, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_QUART = (11 << 8) + 20, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_GALLON = (11 << 8) + 21, // (CLDR 26, ICU-541) - UAMEASUNIT_VOLUME_CUP_METRIC = (11 << 8) + 22, // (CLDR 28, ICU-561.3) - UAMEASUNIT_VOLUME_PINT_METRIC = (11 << 8) + 23, // (CLDR 28, ICU-561.3) - UAMEASUNIT_VOLUME_GALLON_IMPERIAL = (11 << 8) + 24, // (CLDR 29, ICU-561.8+) - UAMEASUNIT_VOLUME_FLUID_OUNCE_IMPERIAL = (11 << 8) + 25, // (CLDR 35, ICU-641) - UAMEASUNIT_VOLUME_BARREL = (11 << 8) + 26, // (CLDR 35, ICU-641) - // - // new categories/values in CLDR 26 - // - UAMEASUNIT_ENERGY_JOULE = (12 << 8) + 2, - UAMEASUNIT_ENERGY_KILOJOULE = (12 << 8) + 4, - UAMEASUNIT_ENERGY_CALORIE = (12 << 8) + 0, // chemistry "calories", abbr "cal" - UAMEASUNIT_ENERGY_KILOCALORIE = (12 << 8) + 3, // kilocalories in general (chemistry, food), abbr "kcal" - UAMEASUNIT_ENERGY_FOODCALORIE = (12 << 8) + 1, // kilocalories specifically for food; in US/UK/? "Calories" abbr "C", elsewhere same as "kcal" - UAMEASUNIT_ENERGY_KILOWATT_HOUR = (12 << 8) + 5, // (ICU-541) - UAMEASUNIT_ENERGY_ELECTRONVOLT = (12 << 8) + 6, // (CLDR 35, ICU-641) - UAMEASUNIT_ENERGY_BRITISH_THERMAL_UNIT = (12 << 8) + 7, // (CLDR 35, ICU-641) - // - // new categories/values in CLDR 26 & ICU-541 - // - UAMEASUNIT_CONSUMPTION_LITER_PER_KILOMETER = (13 << 8) + 0, - UAMEASUNIT_CONSUMPTION_MILE_PER_GALLON = (13 << 8) + 1, - UAMEASUNIT_CONSUMPTION_LITER_PER_100_KILOMETERs = (13 << 8) + 2, // (CLDR 28, ICU-561.3) - UAMEASUNIT_CONSUMPTION_MILE_PER_GALLON_IMPERIAL = (13 << 8) + 3, // (CLDR 29, ICU-561.8+) - // - UAMEASUNIT_DIGITAL_BIT = (14 << 8) + 0, - UAMEASUNIT_DIGITAL_BYTE = (14 << 8) + 1, - UAMEASUNIT_DIGITAL_GIGABIT = (14 << 8) + 2, - UAMEASUNIT_DIGITAL_GIGABYTE = (14 << 8) + 3, - UAMEASUNIT_DIGITAL_KILOBIT = (14 << 8) + 4, - UAMEASUNIT_DIGITAL_KILOBYTE = (14 << 8) + 5, - UAMEASUNIT_DIGITAL_MEGABIT = (14 << 8) + 6, - UAMEASUNIT_DIGITAL_MEGABYTE = (14 << 8) + 7, - UAMEASUNIT_DIGITAL_TERABIT = (14 << 8) + 8, - UAMEASUNIT_DIGITAL_TERABYTE = (14 << 8) + 9, - UAMEASUNIT_DIGITAL_PETABYTE = (14 << 8) + 10, // (CLDR 34, ICU-631) - // - UAMEASUNIT_ELECTRIC_AMPERE = (15 << 8) + 0, - UAMEASUNIT_ELECTRIC_MILLIAMPERE = (15 << 8) + 1, - UAMEASUNIT_ELECTRIC_OHM = (15 << 8) + 2, - UAMEASUNIT_ELECTRIC_VOLT = (15 << 8) + 3, - // - UAMEASUNIT_FREQUENCY_HERTZ = (16 << 8) + 0, - UAMEASUNIT_FREQUENCY_KILOHERTZ = (16 << 8) + 1, - UAMEASUNIT_FREQUENCY_MEGAHERTZ = (16 << 8) + 2, - UAMEASUNIT_FREQUENCY_GIGAHERTZ = (16 << 8) + 3, - // - UAMEASUNIT_LIGHT_LUX = (17 << 8) + 0, - UAMEASUNIT_LIGHT_SOLAR_LUMINOSITY = (17 << 8) + 1, // (CLDR 35, ICU-641) - // - // new categories/values in CLDR 29, ICU-561.8+ - // - UAMEASUNIT_CONCENTRATION_KARAT = (18 << 8) + 0, // (CLDR 29, ICU-561.8+) - UAMEASUNIT_CONCENTRATION_MILLIGRAM_PER_DECILITER = (18 << 8) + 1, // (CLDR 29, ICU-561.8+) - UAMEASUNIT_CONCENTRATION_MILLIMOLE_PER_LITER = (18 << 8) + 2, // (CLDR 29, ICU-561.8+) - UAMEASUNIT_CONCENTRATION_PART_PER_MILLION = (18 << 8) + 3, // (CLDR 29, ICU-561.8+) - UAMEASUNIT_CONCENTRATION_PERCENT = (18 << 8) + 4, // (CLDR 34, ICU-631nn) - UAMEASUNIT_CONCENTRATION_PERMILLE = (18 << 8) + 5, // (CLDR 34, ICU-631nn) - UAMEASUNIT_CONCENTRATION_PERMYRIAD = (18 << 8) + 6, // (CLDR 35, ICU-641) - UAMEASUNIT_CONCENTRATION_MOLE = (18 << 8) + 7, // (CLDR 35, ICU-641) - // - // new categories/values in CLDR 35, ICU-641+ - // - UAMEASUNIT_FORCE_NEWTON = (19 << 8) + 0, // (CLDR 35, ICU-641) - UAMEASUNIT_FORCE_POUND_FORCE = (19 << 8) + 1, // (CLDR 35, ICU-641) - // - UAMEASUNIT_TORQUE_NEWTON_METER = (20 << 8) + 0, // (CLDR 35, ICU-641) - UAMEASUNIT_TORQUE_POUND_FOOT = (20 << 8) + 1, // (CLDR 35, ICU-641) - // -} UAMeasureUnit; - -enum { - // Mask bit set in UFieldPosition, in addition to a UAMeasureUnit value, - // to indicate the numeric portion of the field corresponding to the UAMeasureUnit. - UAMEASFMT_NUMERIC_FIELD_FLAG = (1 << 30) -}; - -/** - * Structure that combines value and UAMeasureUnit, - * for use with uameasfmt_formatMultiple to specify a - * list of value/unit combinations to format. - * @draft ICU 54 - */ -typedef struct UAMeasure { - double value; - UAMeasureUnit unit; -} UAMeasure; - - -/** - * Open a new UAMeasureFormat object for a given locale using the specified width, - * along with a number formatter (if desired) to override the default formatter - * that would be used for the numeric part of the unit in uameasfmt_format, or the - * numeric part of the *last unit* (only) in uameasfmt_formatMultiple. The default - * formatter typically rounds toward 0 and has a minimum of 0 fraction digits and a - * maximum of 3 fraction digits (i.e. it will show as many decimal places as - * necessary up to 3, without showing trailing 0s). An alternate number formatter - * can be used to produce (e.g.) "37.0 mins" instead of "37 mins", or - * "5 hours, 37.2 minutes" instead of "5 hours, 37.217 minutes". - * - * @param locale - * The locale - * @param style - * The width - wide, short, narrow, etc. - * @param nfToAdopt - * A number formatter to set for this UAMeasureFormat object (instead of - * the default decimal formatter). Ownership of this UNumberFormat object - * will pass to the UAMeasureFormat object (the UAMeasureFormat adopts the - * UNumberFormat), which becomes responsible for closing it. If the caller - * wishes to retain ownership of the UNumberFormat object, the caller must - * clone it (with unum_clone) and pass the clone to - * uatmufmt_openWithNumberFormat. May be NULL to use the default decimal - * formatter. - * @param status - * A pointer to a UErrorCode to receive any errors. - * @return - * A pointer to a UAMeasureFormat object for the specified locale, - * or NULL if an error occurred. - * @draft ICU 54 - */ -U_DRAFT UAMeasureFormat* U_EXPORT2 -uameasfmt_open( const char* locale, - UAMeasureFormatWidth width, - UNumberFormat* nfToAdopt, - UErrorCode* status ); - -/** - * Close a UAMeasureFormat object. Once closed it may no longer be used. - * @param measfmt - * The UATimeUnitFormat object to close. - * @draft ICU 54 - */ -U_DRAFT void U_EXPORT2 -uameasfmt_close(UAMeasureFormat *measfmt); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUAMeasureFormatPointer - * "Smart pointer" class, closes a UAMeasureFormat via uameasfmt_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @draft ICU 54 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUAMeasureFormatPointer, UAMeasureFormat, uameasfmt_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - - -/** - * Format a value like 1.0 and a field like UAMEASUNIT_DURATION_MINUTE to e.g. "1.0 minutes". - * - * @param measfmt - * The UAMeasureFormat object specifying the format conventions. - * @param value - * The numeric value to format - * @param unit - * The unit to format with the specified numeric value - * @param result - * A pointer to a buffer to receive the formatted result. - * @param resultCapacity - * The maximum size of result. - * @param status - * A pointer to a UErrorCode to receive any errors. In case of error status, - * the contents of result are undefined. - * @return - * The length of the formatted result; may be greater than resultCapacity, - * in which case an error is returned. - * @draft ICU 54 - */ -U_DRAFT int32_t U_EXPORT2 -uameasfmt_format( const UAMeasureFormat* measfmt, - double value, - UAMeasureUnit unit, - UChar* result, - int32_t resultCapacity, - UErrorCode* status ); - -/** - * Format a value like 1.0 and a field like UAMEASUNIT_DURATION_MINUTE to e.g. "1.0 minutes", - * and get the position in the formatted result for certain types for fields. - * - * @param measfmt - * The UAMeasureFormat object specifying the format conventions. - * @param value - * The numeric value to format - * @param unit - * The unit to format with the specified numeric value - * @param result - * A pointer to a buffer to receive the formatted result. - * @param resultCapacity - * The maximum size of result. - * @param pos - * A pointer to a UFieldPosition. On input, pos->field is read; this should - * be a value from the UNumberFormatFields enum in unum.h. On output, - * pos->beginIndex and pos->endIndex indicate the beginning and ending offsets - * of that field in the formatted output, if relevant. This parameter may be - * NULL if no position information is desired. - * @param status - * A pointer to a UErrorCode to receive any errors. In case of error status, - * the contents of result are undefined. - * @return - * The length of the formatted result; may be greater than resultCapacity, - * in which case an error is returned. - * @draft ICU 54 - */ -U_DRAFT int32_t U_EXPORT2 -uameasfmt_formatGetPosition( const UAMeasureFormat* measfmt, - double value, - UAMeasureUnit unit, - UChar* result, - int32_t resultCapacity, - UFieldPosition* pos, - UErrorCode* status ); - -/** - * Format a list of value and unit combinations, using locale-appropriate - * conventions for the list. Each combination is represented by a UAMeasure - * that combines a value and unit, such as 5.3 + UAMEASUNIT_DURATION_HOUR or - * 37.2 + UAMEASUNIT_DURATION_MINUTE. For all except the last UAMeasure in the - * list, the numeric part will be formatted using the default formatter (zero - * decimal places, rounds toward 0); for the last UAMeasure, the default may - * be overriden by passing a number formatter in uameasfmt_open. The result - * can thus be something like "5 hours, 37.2 minutes" or "5 hrs, 37.2 mins". - * - * @param measfmt - * The UAMeasureFormat object specifying the format conventions. - * @param measures - * A list of UAMeasure structs each specifying a numeric value - * and a UAMeasureUnit. - * @param measureCount - * The count of UAMeasureUnits in measures. Currently this has a limit of 8. - * @param result - * A pointer to a buffer to receive the formatted result. - * @param resultCapacity - * The maximum size of result. - * @param status - * A pointer to a UErrorCode to receive any errors. In case of error status, - * the contents of result are undefined. - * @return - * The length of the formatted result; may be greater than resultCapacity, - * in which case an error is returned. - * @draft ICU 54 - */ -U_DRAFT int32_t U_EXPORT2 -uameasfmt_formatMultiple( const UAMeasureFormat* measfmt, - const UAMeasure* measures, - int32_t measureCount, - UChar* result, - int32_t resultCapacity, - UErrorCode* status ); - -/** - * Format a list of value and unit combinations, using locale-appropriate - * conventions for the list. This has the same format behavior as - * uameasfmt_formatMultiple but adds the fpositer parameter. - * - * @param measfmt - * The UAMeasureFormat object specifying the format conventions. - * @param measures - * A list of UAMeasure structs each specifying a numeric value - * and a UAMeasureUnit. - * @param measureCount - * The count of UAMeasureUnits in measures. Currently this has a limit of 8. - * @param result - * A pointer to a buffer to receive the formatted result. - * @param resultCapacity - * The maximum size of result. - * @param fpositer - * A pointer to a UFieldPositionIterator created by ufieldpositer_open - * (may be NULL if field position information is not needed). Any - * iteration information already present in the UFieldPositionIterator - * will be deleted, and the iterator will be reset to apply to the - * fields in the formatted string created by this function call. In the - * the formatted result, each unit field (unit name or symbol plus any - * associated numeric value) will correspond to one or two results from - * ufieldpositer_next. The first result returns a UAMeasureUnit value and - * indicates the begin and end index for the complete field. If there is - * a numeric value contained in the field, then a subsequent call to - * ufieldpositer_next returns a value with UAMEASFMT_NUMERIC_FIELD_FLAG - * set and the same UAMeasureUnit value in the low-order bits, and - * indicates the begin and end index for the numeric portion of the field. - * For example with the string "3 hours, dualminute" the sequence of - * calls to ufieldpositer_next would result in: - * (1) return UAMEASUNIT_DURATION_HOUR, begin index 0, end index 7 - * (2) return UAMEASUNIT_DURATION_HOUR | UAMEASFMT_NUMERIC_FIELD_FLAG, begin index 0, end index 1 - * (3) return UAMEASUNIT_DURATION_MINUTE, begin index 9, end index 19 - * (4) return -1 to indicate end of interation - * @param status - * A pointer to a UErrorCode to receive any errors. In case of error status, - * the contents of result are undefined. - * @return - * The length of the formatted result; may be greater than resultCapacity, - * in which case an error is returned. - * @draft ICU 58 - */ -U_DRAFT int32_t U_EXPORT2 -uameasfmt_formatMultipleForFields( const UAMeasureFormat* measfmt, - const UAMeasure* measures, - int32_t measureCount, - UChar* result, - int32_t resultCapacity, - UFieldPositionIterator* fpositer, - UErrorCode* status ); - -/** - * Get the display name for a unit, such as "minutes" or "kilometers". - * - * @param measfmt - * The UAMeasureFormat object specifying the format conventions. - * @param unit - * The unit whose localized name to get - * @param result - * A pointer to a buffer to receive the name. - * @param resultCapacity - * The maximum size of result. - * @param status - * A pointer to a UErrorCode to receive any errors. In case of error status, - * the contents of result are undefined. - * @return - * The length of the name; may be greater than resultCapacity, - * in which case an error is returned. - * @draft ICU 57 - */ -U_DRAFT int32_t U_EXPORT2 -uameasfmt_getUnitName( const UAMeasureFormat* measfmt, - UAMeasureUnit unit, - UChar* result, - int32_t resultCapacity, - UErrorCode* status ); - -/** - * Constants for unit display name list styles - * @draft ICU 57 - */ -typedef enum UAMeasureNameListStyle { - /** - * Use standard (linguistic) list style, the same for all unit widths; e.g. - * wide: "hours, minutes, and seconds" - * short: "hours, min, and secs" - * narrow: "hour, min, and sec" - * @draft ICU 57 - */ - UAMEASNAME_LIST_STANDARD, - - /** - * Use the same list style as used by the formatted units, depends on width; e.g. - * wide: "hours, minutes, seconds" - * short: "hours, min, secs" - * narrow: "hour min sec" - * @draft ICU 57 - */ - UAMEASNAME_LIST_MATCHUNITS, -} UAMeasureNameListStyle; - -/** - * Get a list of display names for multiple units - * - * @param measfmt - * The UAMeasureFormat object specifying the format conventions. - * @param units - * The array of unit types whose names to get. - * @param unitCount - * The number of unit types in the units array. - * @param listStyle - * The list style used for combining the unit names. - * @param result - * A pointer to a buffer to receive the list of names. - * @param resultCapacity - * The maximum size of result. - * @param status - * A pointer to a UErrorCode to receive any errors. In case of error status, - * the contents of result are undefined. - * @return - * The length of the list of names; may be greater than resultCapacity, - * in which case an error is returned. - * @draft ICU 57 - */ -U_DRAFT int32_t U_EXPORT2 -uameasfmt_getMultipleUnitNames( const UAMeasureFormat* measfmt, - const UAMeasureUnit* units, - int32_t unitCount, - UAMeasureNameListStyle listStyle, - UChar* result, - int32_t resultCapacity, - UErrorCode* status ); - -/** - * Get the units used for a particular usage. This low-level function depends - * one some knowledge of the relevant CLDR keys. After more experience with - * usage, enums for relevant usage values may be created. - * - * This is sensitive to two locale keywords. - * If the "ms" keyword is present, then the measurement system specified by its - * value is used (except for certain categories like duration and concentr). - * Else if the "rg" keyword is present, then the region specified by its value - * determines the unit usage. - * Else if the locale has a region subtag, it determines the unit usage. - * Otherwise the likely region for the language determines the usage. - * - * @param locale - * The locale, which determines the usage as specified above. - * @param category - * A string representing the CLDR category key for the desired usage, - * such as "length" or "mass". Must not be NULL. - * @param usage - * A string representing the CLDR usage subkey for the desired usage, - * such as "person", "person-small" (for infants), "person-informal" - * (for conversational/informal usage), etc. To get the general unit - * for the category (not for a specific usage), this may be NULL, or - * may be just "large" or "small" to indicate a variant of the general - * unit for larger or smaller ranges than normal. - * @param units - * Array to be filled in with UAMeasureUnit values; the size is - * specified by unitsCapacity (which in general should be at least 3). - * The number of array elements actually filled in is indicated by - * the return value; if no error status is set then this will be - * non-zero. - * - * If the return value is positive then units represents an ordered - * list of one or more units that should be used in combination for - * the desired usage (e.g. the values UAMEASUNIT_LENGTH_FOOT, - * UAMEASUNIT_LENGTH_INCH to indicate a height expressed as a - * combination of feet and inches, or just UAMEASUNIT_LENGTH_CENTIMETER - * to indicate height expressed in centimeters alone). - * - * Negative return values may be used for future uses (such as - * indicating an X-per-Y relationship among the returned units). - * - * The units parameter may be NULL if unitsCapacity is 0, for - * pre-flighting (i.e. to determine the size of the units array that - * woud be required for the given category and usage). - * @param unitsCapacity - * The maximum capacity of the passed-in units array. - * @param status - * A pointer to a UErrorCode to receive any errors. In case of error status, - * the contents of result are undefined. - * @return - * Positive values indicate the number of units require for the usage; - * may be greater than resultCapacity, in which case an error is returned. - * If no error, than this number of units are actually provided in the - * units array. Negative return values are reserved for future uses. - * @draft ICU 57 - */ -U_DRAFT int32_t U_EXPORT2 -uameasfmt_getUnitsForUsage( const char* locale, - const char* category, - const char* usage, - UAMeasureUnit* units, - int32_t unitsCapacity, - UErrorCode* status ); - -/** - * Get the (non-localized) category name for a unit. For example, for - * UAMEASUNIT_VOLUME_LITER, returns "volume". - * - * @param unit - * The unit whose category name to get - * @param status - * A pointer to a UErrorCode to receive any errors. In case of error status, - * the return value is undefined. - * @return - * Pointer to a zero-terminated string giving the - * (non-localized) category name. - * @draft ICU 58 - */ -U_DRAFT const char * U_EXPORT2 -uameasfmt_getUnitCategory(UAMeasureUnit unit, - UErrorCode* status ); - - -#endif /* U_HIDE_DRAFT_API */ -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif /* #ifndef UAMEASUREFORMAT_H */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uatimeunitformat.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uatimeunitformat.h deleted file mode 100644 index cdecd3630f..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uatimeunitformat.h +++ /dev/null @@ -1,377 +0,0 @@ -/* -***************************************************************************************** -* Copyright (C) 2014 Apple Inc. All Rights Reserved. -***************************************************************************************** -*/ - -#ifndef UATIMEUNITFORMAT_H -#define UATIMEUNITFORMAT_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING -#ifndef U_HIDE_DRAFT_API - -#include "unicode/localpointer.h" -#include "unicode/unum.h" - -/** - * \file - * \brief C API: Support functions for formatting time units or portions thereof. - * - * These are somewhat temporary Apple-only functions to support NSDateComponentsFormatter. - */ - -/** - * Opaque UATimeUnitFormat object for use in C programs. - * @draft ICU 53 - */ -struct UATimeUnitFormat; -typedef struct UATimeUnitFormat UATimeUnitFormat; /**< C typedef for struct UATimeUnitFormat. @draft ICU 53 */ - -/** - * TimeUnit format styles - * @draft ICU 53 - */ -typedef enum UATimeUnitStyle { - /** - * full style, e.g. "1.0 minutes" - * @draft ICU 53 */ - UATIMEUNITSTYLE_FULL, - /** - * abbreviated/short style, e.g. "1.0 min" - * @draft ICU 53 */ - UATIMEUNITSTYLE_ABBREVIATED, - /** - * narrow style, e.g. "1.0 m" - * @draft ICU 53 */ - UATIMEUNITSTYLE_NARROW, - /** - * shorter style,between abbreviated and narrow" - * @draft ICU 57 */ - UATIMEUNITSTYLE_SHORTER, - /** @draft ICU 53 */ - UATIMEUNITSTYLE_COUNT -} UATimeUnitStyle; - -/** - * TimeUnit fields - * @draft ICU 53 - */ -typedef enum UATimeUnitField { - /** @draft ICU 53 */ - UATIMEUNITFIELD_YEAR, - /** @draft ICU 53 */ - UATIMEUNITFIELD_MONTH, - /** @draft ICU 53 */ - UATIMEUNITFIELD_DAY, - /** @draft ICU 53 */ - UATIMEUNITFIELD_WEEK, - /** @draft ICU 53 */ - UATIMEUNITFIELD_HOUR, - /** @draft ICU 53 */ - UATIMEUNITFIELD_MINUTE, - /** @draft ICU 53 */ - UATIMEUNITFIELD_SECOND, - /** @draft ICU 63 */ - UATIMEUNITFIELD_MILLISECOND, - /** @draft ICU 63 */ - UATIMEUNITFIELD_MICROSECOND, - /** @draft ICU 63 */ - UATIMEUNITFIELD_NANOSECOND, -#ifndef U_HIDE_DEPRECATED_API - /** @deprecated The numeric value may change over time */ - UATIMEUNITFIELD_COUNT -#endif /* U_HIDE_DEPRECATED_API */ -} UATimeUnitField; - -/** - * Open a new UATimeUnitFormat object for a given locale using the specified style, - * using the default decimal formatter. - * @param locale - * The locale - * @param style - * The style (width) - full, abbreviated, etc. - * @param status - * A pointer to a UErrorCode to receive any errors. - * @return - * A pointer to a UATimeUnitFormat object for the specified locale, - * or NULL if an error occurred. - * @draft ICU 53 - */ -U_DRAFT UATimeUnitFormat* U_EXPORT2 -uatmufmt_open(const char* locale, - UATimeUnitStyle style, - UErrorCode* status); - -/** - * Open a new UATimeUnitFormat object for a given locale using the specified style, - * along with the number formatter to use for the numeric part of the time unit, - * e.g. "1 min", "1.0 min", etc. -* @param locale - * The locale - * @param style - * The style (width) - full, abbreviated, etc. - * @param nfToAdopt - * A number formatter to set for this UATimeUnitFormat object (instead of - * the default decimal formatter). Ownership of this UNumberFormat object - * will pass to the UATimeUnitFormat object (the UATimeUnitFormat adopts the - * UNumberFormat), which becomes responsible for closing it. If the caller - * wishes to retain ownership of the UNumberFormat object, the caller must - * clone it (with unum_clone) and pass the clone to - * uatmufmt_openWithNumberFormat. May be NULL to use the default decimal - * formatter. - * @param status - * A pointer to a UErrorCode to receive any errors. - * @return - * A pointer to a UATimeUnitFormat object for the specified locale, - * or NULL if an error occurred. - * @draft ICU 53 - */ -U_DRAFT UATimeUnitFormat* U_EXPORT2 -uatmufmt_openWithNumberFormat(const char* locale, - UATimeUnitStyle style, - UNumberFormat* nfToAdopt, - UErrorCode* status); - -/** - * Close a UATimeUnitFormat object. Once closed it may no longer be used. - * @param tufmt - * The UATimeUnitFormat object to close. - * @draft ICU 53 - */ -U_DRAFT void U_EXPORT2 -uatmufmt_close(UATimeUnitFormat *tufmt); - - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUDateIntervalFormatPointer - * "Smart pointer" class, closes a UATimeUnitFormat via uatmufmt_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @draft ICU 53 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUATimeUnitFormatPointer, UATimeUnitFormat, uatmufmt_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - - -/** - * Set the number formatter to use for the numeric part of the time unit, - * e.g. "1 min", "1.0 min", etc. - * DO NOT USE - use uatmufmt_openWithNumberFormat instead, this will be - * removed soon. - * @param tufmt - * The UATimeUnitFormat object specifying the format conventions. - * @param numfmt - * The number formatter to set for this UATimeUnitFormat object; - * uatmufmt_setNumberFormat clones this for its own use, so the - * caller retains ownership of the passed-in UNumberFormat object. - * @param status - * A pointer to a UErrorCode to receive any errors. - * @deprecated ICU 53, use uatmufmt_openWithNumberFormat - */ -U_DEPRECATED void U_EXPORT2 -uatmufmt_setNumberFormat(UATimeUnitFormat* tufmt, - UNumberFormat* numfmt, - UErrorCode* status); - -/** - * Format a value like 1.0 and a field like UATIMEUNIT_MINUTE to e.g. "1.0 minutes". - * @param tufmt - * The UATimeUnitFormat object specifying the format conventions. - * @param value - * The numeric value to format - * @param field - * The time field to format with the specified numeric value - * @param result - * A pointer to a buffer to receive the formatted result. - * @param resultCapacity - * The maximum size of result. - * @param status - * A pointer to a UErrorCode to receive any errors. In case of error status, - * the contents of result are undefined. - * @return - * The length of the formatted result; may be greater than resultCapacity, - * in which case an error is returned. - * @draft ICU 53 - */ -U_DRAFT int32_t U_EXPORT2 -uatmufmt_format(const UATimeUnitFormat* tufmt, - double value, - UATimeUnitField field, - UChar* result, - int32_t resultCapacity, - UErrorCode* status); - - -/** - * Parse a single formatted time unit like "1.0 minutes" into a numeric value and unit type. - * NOT CURRENTLY SUPPORTED, sets status to U_UNSUPPORTED_ERROR and returns 0.0. - * @param tufmt - * The UATimeUnitFormat object specifying the format conventions. - * @param text - * The text to parse - * @param textLength - * The length of text, or -1 if null-terminated - * @param parsePos - * A pointer to an offset index into text at which to begin parsing. On output, - * *parsePos will point after the last parsed character. This parameter may be - * NULL, in which case parsing begins at offset 0. - * @param field - * A pointer to a UATimeUnitField to be set to the parsed firled type. - * @param status - * A pointer to a UErrorCode to receive any errors. - * @return - * The parsed double value. - * @draft ICU 53 - */ -U_DRAFT double U_EXPORT2 -uatmufmt_parse( const UATimeUnitFormat* tufmt, - const UChar* text, - int32_t textLength, - int32_t* parsePos, - UATimeUnitField* field, - UErrorCode* status); - - -/** - * TimeUnit time duration positional pattern types - * @draft ICU 53 - */ -typedef enum UATimeUnitTimePattern { - /** - * e.g. "h:mm" - * @draft ICU 53 */ - UATIMEUNITTIMEPAT_HM, - /** - * e.g. "h:mm:ss" - * @draft ICU 53 */ - UATIMEUNITTIMEPAT_HMS, - /** - * e.g. "m:ss" - * @draft ICU 53 */ - UATIMEUNITTIMEPAT_MS, - /** @draft ICU 53 */ - UATIMEUNITTIMEPAT_COUNT -} UATimeUnitTimePattern; - -/** - * Get a localized pattern for positional duration style, e.g. "h:mm:ss". - * This comes from the durationUnits CLDR data in ICU, e.g. - * durationUnits{ - * hm{"h:mm"} - * hms{"h:mm:ss"} - * ms{"m:ss"} - * } - * For usage see CLDR documentation on durationUnit under - * Unit Elements. - * - * @param locale - * The locale - * @param type - * The type of time pattern to get (hm, hms, ms) - * @param result - * A pointer to a buffer to receive the formatted result. - * @param resultCapacity - * The maximum size of result. - * @param status - * A pointer to a UErrorCode to receive any errors. In case of error status, - * the contents of result are undefined. - * @return - * The length of the formatted result; may be greater than resultCapacity, - * in which case an error is returned. - * @draft ICU 53 - */ -U_DRAFT int32_t U_EXPORT2 -uatmufmt_getTimePattern(const char* locale, - UATimeUnitTimePattern type, - UChar* result, - int32_t resultCapacity, - UErrorCode* status); - - -/** - * TimeUnit list pattern types - * @draft ICU 53 - */ -typedef enum UATimeUnitListPattern { - /** - * for two only, e.g. "{0} and {1}" - * @draft ICU 53 */ - UATIMEUNITLISTPAT_TWO_ONLY, - /** - * for end of list with 3 or more, e.g. "{0}, and {1}" - * @draft ICU 53 */ - UATIMEUNITLISTPAT_END_PIECE, - /** - * for middle of list with 3 or more, e.g. "{0}, {1}" - * @draft ICU 53 */ - UATIMEUNITLISTPAT_MIDDLE_PIECE, - /** - * for start of list with 3 or more, e.g. "{0}, {1}" - * @draft ICU 53 */ - UATIMEUNITLISTPAT_START_PIECE, - /** @draft ICU 53 */ - UATIMEUNITLISTPAT_COUNT -} UATimeUnitListPattern; - -/** - * Get a localized pattern for combining units in a list, e.g. "3 min, 42 sec". - * This comes from the listPattern/unit* CLDR data in ICU, e.g. - * listPattern{ - * unit{ - * .. use short if not present - * } - * unit-short{ - * 2{"{0}, {1}"} - * end{"{0}, {1}"} - * middle{"{0}, {1}"} - * start{"{0}, {1}"} - * } - * unit-narrow{ - * .. use short if not present - * } - * } - * For usage see CLDR documentation on - * List Patterns. - * - * @param locale - * The locale - * @param style - * The style (width) - full, abbreviated, etc. - * @param type - * The type of list pattern to get (for two items, end part for >= 3 items, etc.) - * @param result - * A pointer to a buffer to receive the formatted result. - * @param resultCapacity - * The maximum size of result. - * @param status - * A pointer to a UErrorCode to receive any errors. In case of error status, - * the contents of result are undefined. - * @return - * The length of the formatted result; may be greater than resultCapacity, - * in which case an error is returned. - * @draft ICU 53 - */ -U_DRAFT int32_t U_EXPORT2 -uatmufmt_getListPattern(const char* locale, - UATimeUnitStyle style, - UATimeUnitListPattern type, - UChar* result, - int32_t resultCapacity, - UErrorCode* status); - - -#endif /* U_HIDE_DRAFT_API */ -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif /* #ifndef UATIMEUNITFORMAT_H */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ubidi.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ubidi.h deleted file mode 100644 index 53bd843444..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ubidi.h +++ /dev/null @@ -1,2360 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1999-2015, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* file name: ubidi.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 1999jul27 -* created by: Markus W. Scherer, updated by Matitiahu Allouche -*/ - -#ifndef UBIDI_H -#define UBIDI_H - -#include "unicode/utypes.h" -#include "unicode/uchar.h" -#include "unicode/localpointer.h" - -/** - *\file - * \brief C API: Bidi algorithm - * - *

Bidi algorithm for ICU

- * - * This is an implementation of the Unicode Bidirectional Algorithm. - * The algorithm is defined in the - * Unicode Standard Annex #9.

- * - * Note: Libraries that perform a bidirectional algorithm and - * reorder strings accordingly are sometimes called "Storage Layout Engines". - * ICU's Bidi and shaping (u_shapeArabic()) APIs can be used at the core of such - * "Storage Layout Engines". - * - *

General remarks about the API:

- * - * In functions with an error code parameter, - * the pErrorCode pointer must be valid - * and the value that it points to must not indicate a failure before - * the function call. Otherwise, the function returns immediately. - * After the function call, the value indicates success or failure.

- * - * The "limit" of a sequence of characters is the position just after their - * last character, i.e., one more than that position.

- * - * Some of the API functions provide access to "runs". - * Such a "run" is defined as a sequence of characters - * that are at the same embedding level - * after performing the Bidi algorithm.

- * - * @author Markus W. Scherer - * @version 1.0 - * - * - *

Sample code for the ICU Bidi API

- * - *
Rendering a paragraph with the ICU Bidi API
- * - * This is (hypothetical) sample code that illustrates - * how the ICU Bidi API could be used to render a paragraph of text. - * Rendering code depends highly on the graphics system, - * therefore this sample code must make a lot of assumptions, - * which may or may not match any existing graphics system's properties. - * - *

The basic assumptions are:

- *
    - *
  • Rendering is done from left to right on a horizontal line.
  • - *
  • A run of single-style, unidirectional text can be rendered at once.
  • - *
  • Such a run of text is passed to the graphics system with - * characters (code units) in logical order.
  • - *
  • The line-breaking algorithm is very complicated - * and Locale-dependent - - * and therefore its implementation omitted from this sample code.
  • - *
- * - *
- * \code
- *#include "unicode/ubidi.h"
- *
- *typedef enum {
- *     styleNormal=0, styleSelected=1,
- *     styleBold=2, styleItalics=4,
- *     styleSuper=8, styleSub=16
- *} Style;
- *
- *typedef struct { int32_t limit; Style style; } StyleRun;
- *
- *int getTextWidth(const UChar *text, int32_t start, int32_t limit,
- *                  const StyleRun *styleRuns, int styleRunCount);
- *
- * // set *pLimit and *pStyleRunLimit for a line
- * // from text[start] and from styleRuns[styleRunStart]
- * // using ubidi_getLogicalRun(para, ...)
- *void getLineBreak(const UChar *text, int32_t start, int32_t *pLimit,
- *                  UBiDi *para,
- *                  const StyleRun *styleRuns, int styleRunStart, int *pStyleRunLimit,
- *                  int *pLineWidth);
- *
- * // render runs on a line sequentially, always from left to right
- *
- * // prepare rendering a new line
- * void startLine(UBiDiDirection textDirection, int lineWidth);
- *
- * // render a run of text and advance to the right by the run width
- * // the text[start..limit-1] is always in logical order
- * void renderRun(const UChar *text, int32_t start, int32_t limit,
- *               UBiDiDirection textDirection, Style style);
- *
- * // We could compute a cross-product
- * // from the style runs with the directional runs
- * // and then reorder it.
- * // Instead, here we iterate over each run type
- * // and render the intersections -
- * // with shortcuts in simple (and common) cases.
- * // renderParagraph() is the main function.
- *
- * // render a directional run with
- * // (possibly) multiple style runs intersecting with it
- * void renderDirectionalRun(const UChar *text,
- *                           int32_t start, int32_t limit,
- *                           UBiDiDirection direction,
- *                           const StyleRun *styleRuns, int styleRunCount) {
- *     int i;
- *
- *     // iterate over style runs
- *     if(direction==UBIDI_LTR) {
- *         int styleLimit;
- *
- *         for(i=0; ilimit) { styleLimit=limit; }
- *                 renderRun(text, start, styleLimit,
- *                           direction, styleRun[i].style);
- *                 if(styleLimit==limit) { break; }
- *                 start=styleLimit;
- *             }
- *         }
- *     } else {
- *         int styleStart;
- *
- *         for(i=styleRunCount-1; i>=0; --i) {
- *             if(i>0) {
- *                 styleStart=styleRun[i-1].limit;
- *             } else {
- *                 styleStart=0;
- *             }
- *             if(limit>=styleStart) {
- *                 if(styleStart=length
- *
- *         width=getTextWidth(text, 0, length, styleRuns, styleRunCount);
- *         if(width<=lineWidth) {
- *             // everything fits onto one line
- *
- *            // prepare rendering a new line from either left or right
- *             startLine(paraLevel, width);
- *
- *             renderLine(para, text, 0, length,
- *                        styleRuns, styleRunCount);
- *         } else {
- *             UBiDi *line;
- *
- *             // we need to render several lines
- *             line=ubidi_openSized(length, 0, pErrorCode);
- *             if(line!=NULL) {
- *                 int32_t start=0, limit;
- *                 int styleRunStart=0, styleRunLimit;
- *
- *                 for(;;) {
- *                     limit=length;
- *                     styleRunLimit=styleRunCount;
- *                     getLineBreak(text, start, &limit, para,
- *                                  styleRuns, styleRunStart, &styleRunLimit,
- *                                 &width);
- *                     ubidi_setLine(para, start, limit, line, pErrorCode);
- *                     if(U_SUCCESS(*pErrorCode)) {
- *                         // prepare rendering a new line
- *                         // from either left or right
- *                         startLine(paraLevel, width);
- *
- *                         renderLine(line, text, start, limit,
- *                                    styleRuns+styleRunStart,
- *                                    styleRunLimit-styleRunStart);
- *                     }
- *                     if(limit==length) { break; }
- *                     start=limit;
- *                     styleRunStart=styleRunLimit-1;
- *                     if(start>=styleRuns[styleRunStart].limit) {
- *                         ++styleRunStart;
- *                     }
- *                 }
- *
- *                 ubidi_close(line);
- *             }
- *        }
- *    }
- *
- *     ubidi_close(para);
- *}
- *\endcode
- * 
- */ - -/*DOCXX_TAG*/ -/*@{*/ - -/** - * UBiDiLevel is the type of the level values in this - * Bidi implementation. - * It holds an embedding level and indicates the visual direction - * by its bit 0 (even/odd value).

- * - * It can also hold non-level values for the - * paraLevel and embeddingLevels - * arguments of ubidi_setPara(); there: - *

    - *
  • bit 7 of an embeddingLevels[] - * value indicates whether the using application is - * specifying the level of a character to override whatever the - * Bidi implementation would resolve it to.
  • - *
  • paraLevel can be set to the - * pseudo-level values UBIDI_DEFAULT_LTR - * and UBIDI_DEFAULT_RTL.
  • - *
- * - * @see ubidi_setPara - * - *

The related constants are not real, valid level values. - * UBIDI_DEFAULT_XXX can be used to specify - * a default for the paragraph level for - * when the ubidi_setPara() function - * shall determine it but there is no - * strongly typed character in the input.

- * - * Note that the value for UBIDI_DEFAULT_LTR is even - * and the one for UBIDI_DEFAULT_RTL is odd, - * just like with normal LTR and RTL level values - - * these special values are designed that way. Also, the implementation - * assumes that UBIDI_MAX_EXPLICIT_LEVEL is odd. - * - * Note: The numeric values of the related constants will not change: - * They are tied to the use of 7-bit byte values (plus the override bit) - * and of the UBiDiLevel=uint8_t data type in this API. - * - * @see UBIDI_DEFAULT_LTR - * @see UBIDI_DEFAULT_RTL - * @see UBIDI_LEVEL_OVERRIDE - * @see UBIDI_MAX_EXPLICIT_LEVEL - * @stable ICU 2.0 - */ -typedef uint8_t UBiDiLevel; - -/** Paragraph level setting.

- * - * Constant indicating that the base direction depends on the first strong - * directional character in the text according to the Unicode Bidirectional - * Algorithm. If no strong directional character is present, - * then set the paragraph level to 0 (left-to-right).

- * - * If this value is used in conjunction with reordering modes - * UBIDI_REORDER_INVERSE_LIKE_DIRECT or - * UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL, the text to reorder - * is assumed to be visual LTR, and the text after reordering is required - * to be the corresponding logical string with appropriate contextual - * direction. The direction of the result string will be RTL if either - * the righmost or leftmost strong character of the source text is RTL - * or Arabic Letter, the direction will be LTR otherwise.

- * - * If reordering option UBIDI_OPTION_INSERT_MARKS is set, an RLM may - * be added at the beginning of the result string to ensure round trip - * (that the result string, when reordered back to visual, will produce - * the original source text). - * @see UBIDI_REORDER_INVERSE_LIKE_DIRECT - * @see UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL - * @stable ICU 2.0 - */ -#define UBIDI_DEFAULT_LTR 0xfe - -/** Paragraph level setting.

- * - * Constant indicating that the base direction depends on the first strong - * directional character in the text according to the Unicode Bidirectional - * Algorithm. If no strong directional character is present, - * then set the paragraph level to 1 (right-to-left).

- * - * If this value is used in conjunction with reordering modes - * UBIDI_REORDER_INVERSE_LIKE_DIRECT or - * UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL, the text to reorder - * is assumed to be visual LTR, and the text after reordering is required - * to be the corresponding logical string with appropriate contextual - * direction. The direction of the result string will be RTL if either - * the righmost or leftmost strong character of the source text is RTL - * or Arabic Letter, or if the text contains no strong character; - * the direction will be LTR otherwise.

- * - * If reordering option UBIDI_OPTION_INSERT_MARKS is set, an RLM may - * be added at the beginning of the result string to ensure round trip - * (that the result string, when reordered back to visual, will produce - * the original source text). - * @see UBIDI_REORDER_INVERSE_LIKE_DIRECT - * @see UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL - * @stable ICU 2.0 - */ -#define UBIDI_DEFAULT_RTL 0xff - -/** - * Maximum explicit embedding level. - * Same as the max_depth value in the - * Unicode Bidirectional Algorithm. - * (The maximum resolved level can be up to UBIDI_MAX_EXPLICIT_LEVEL+1). - * @stable ICU 2.0 - */ -#define UBIDI_MAX_EXPLICIT_LEVEL 125 - -/** Bit flag for level input. - * Overrides directional properties. - * @stable ICU 2.0 - */ -#define UBIDI_LEVEL_OVERRIDE 0x80 - -/** - * Special value which can be returned by the mapping functions when a logical - * index has no corresponding visual index or vice-versa. This may happen - * for the logical-to-visual mapping of a Bidi control when option - * #UBIDI_OPTION_REMOVE_CONTROLS is specified. This can also happen - * for the visual-to-logical mapping of a Bidi mark (LRM or RLM) inserted - * by option #UBIDI_OPTION_INSERT_MARKS. - * @see ubidi_getVisualIndex - * @see ubidi_getVisualMap - * @see ubidi_getLogicalIndex - * @see ubidi_getLogicalMap - * @stable ICU 3.6 - */ -#define UBIDI_MAP_NOWHERE (-1) - -/** - * UBiDiDirection values indicate the text direction. - * @stable ICU 2.0 - */ -enum UBiDiDirection { - /** Left-to-right text. This is a 0 value. - *

    - *
  • As return value for ubidi_getDirection(), it means - * that the source string contains no right-to-left characters, or - * that the source string is empty and the paragraph level is even. - *
  • As return value for ubidi_getBaseDirection(), it - * means that the first strong character of the source string has - * a left-to-right direction. - *
- * @stable ICU 2.0 - */ - UBIDI_LTR, - /** Right-to-left text. This is a 1 value. - *
    - *
  • As return value for ubidi_getDirection(), it means - * that the source string contains no left-to-right characters, or - * that the source string is empty and the paragraph level is odd. - *
  • As return value for ubidi_getBaseDirection(), it - * means that the first strong character of the source string has - * a right-to-left direction. - *
- * @stable ICU 2.0 - */ - UBIDI_RTL, - /** Mixed-directional text. - *

As return value for ubidi_getDirection(), it means - * that the source string contains both left-to-right and - * right-to-left characters. - * @stable ICU 2.0 - */ - UBIDI_MIXED, - /** No strongly directional text. - *

As return value for ubidi_getBaseDirection(), it means - * that the source string is missing or empty, or contains neither left-to-right - * nor right-to-left characters. - * @stable ICU 4.6 - */ - UBIDI_NEUTRAL -}; - -/** @stable ICU 2.0 */ -typedef enum UBiDiDirection UBiDiDirection; - -/** - * Forward declaration of the UBiDi structure for the declaration of - * the API functions. Its fields are implementation-specific.

- * This structure holds information about a paragraph (or multiple paragraphs) - * of text with Bidi-algorithm-related details, or about one line of - * such a paragraph.

- * Reordering can be done on a line, or on one or more paragraphs which are - * then interpreted each as one single line. - * @stable ICU 2.0 - */ -struct UBiDi; - -/** @stable ICU 2.0 */ -typedef struct UBiDi UBiDi; - -/** - * Allocate a UBiDi structure. - * Such an object is initially empty. It is assigned - * the Bidi properties of a piece of text containing one or more paragraphs - * by ubidi_setPara() - * or the Bidi properties of a line within a paragraph by - * ubidi_setLine().

- * This object can be reused for as long as it is not deallocated - * by calling ubidi_close().

- * ubidi_setPara() and ubidi_setLine() will allocate - * additional memory for internal structures as necessary. - * - * @return An empty UBiDi object. - * @stable ICU 2.0 - */ -U_STABLE UBiDi * U_EXPORT2 -ubidi_open(void); - -/** - * Allocate a UBiDi structure with preallocated memory - * for internal structures. - * This function provides a UBiDi object like ubidi_open() - * with no arguments, but it also preallocates memory for internal structures - * according to the sizings supplied by the caller.

- * Subsequent functions will not allocate any more memory, and are thus - * guaranteed not to fail because of lack of memory.

- * The preallocation can be limited to some of the internal memory - * by setting some values to 0 here. That means that if, e.g., - * maxRunCount cannot be reasonably predetermined and should not - * be set to maxLength (the only failproof value) to avoid - * wasting memory, then maxRunCount could be set to 0 here - * and the internal structures that are associated with it will be allocated - * on demand, just like with ubidi_open(). - * - * @param maxLength is the maximum text or line length that internal memory - * will be preallocated for. An attempt to associate this object with a - * longer text will fail, unless this value is 0, which leaves the allocation - * up to the implementation. - * - * @param maxRunCount is the maximum anticipated number of same-level runs - * that internal memory will be preallocated for. An attempt to access - * visual runs on an object that was not preallocated for as many runs - * as the text was actually resolved to will fail, - * unless this value is 0, which leaves the allocation up to the implementation.

- * The number of runs depends on the actual text and maybe anywhere between - * 1 and maxLength. It is typically small. - * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @return An empty UBiDi object with preallocated memory. - * @stable ICU 2.0 - */ -U_STABLE UBiDi * U_EXPORT2 -ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode); - -/** - * ubidi_close() must be called to free the memory - * associated with a UBiDi object.

- * - * Important: - * A parent UBiDi object must not be destroyed or reused if - * it still has children. - * If a UBiDi object has become the child - * of another one (its parent) by calling - * ubidi_setLine(), then the child object must - * be destroyed (closed) or reused (by calling - * ubidi_setPara() or ubidi_setLine()) - * before the parent object. - * - * @param pBiDi is a UBiDi object. - * - * @see ubidi_setPara - * @see ubidi_setLine - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ubidi_close(UBiDi *pBiDi); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUBiDiPointer - * "Smart pointer" class, closes a UBiDi via ubidi_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUBiDiPointer, UBiDi, ubidi_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Modify the operation of the Bidi algorithm such that it - * approximates an "inverse Bidi" algorithm. This function - * must be called before ubidi_setPara(). - * - *

The normal operation of the Bidi algorithm as described - * in the Unicode Technical Report is to take text stored in logical - * (keyboard, typing) order and to determine the reordering of it for visual - * rendering. - * Some legacy systems store text in visual order, and for operations - * with standard, Unicode-based algorithms, the text needs to be transformed - * to logical order. This is effectively the inverse algorithm of the - * described Bidi algorithm. Note that there is no standard algorithm for - * this "inverse Bidi" and that the current implementation provides only an - * approximation of "inverse Bidi".

- * - *

With isInverse set to TRUE, - * this function changes the behavior of some of the subsequent functions - * in a way that they can be used for the inverse Bidi algorithm. - * Specifically, runs of text with numeric characters will be treated in a - * special way and may need to be surrounded with LRM characters when they are - * written in reordered sequence.

- * - *

Output runs should be retrieved using ubidi_getVisualRun(). - * Since the actual input for "inverse Bidi" is visually ordered text and - * ubidi_getVisualRun() gets the reordered runs, these are actually - * the runs of the logically ordered output.

- * - *

Calling this function with argument isInverse set to - * TRUE is equivalent to calling - * ubidi_setReorderingMode with argument - * reorderingMode - * set to #UBIDI_REORDER_INVERSE_NUMBERS_AS_L.
- * Calling this function with argument isInverse set to - * FALSE is equivalent to calling - * ubidi_setReorderingMode with argument - * reorderingMode - * set to #UBIDI_REORDER_DEFAULT. - * - * @param pBiDi is a UBiDi object. - * - * @param isInverse specifies "forward" or "inverse" Bidi operation. - * - * @see ubidi_setPara - * @see ubidi_writeReordered - * @see ubidi_setReorderingMode - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ubidi_setInverse(UBiDi *pBiDi, UBool isInverse); - -/** - * Is this Bidi object set to perform the inverse Bidi algorithm? - *

Note: calling this function after setting the reordering mode with - * ubidi_setReorderingMode will return TRUE if the - * reordering mode was set to #UBIDI_REORDER_INVERSE_NUMBERS_AS_L, - * FALSE for all other values.

- * - * @param pBiDi is a UBiDi object. - * @return TRUE if the Bidi object is set to perform the inverse Bidi algorithm - * by handling numbers as L. - * - * @see ubidi_setInverse - * @see ubidi_setReorderingMode - * @stable ICU 2.0 - */ - -U_STABLE UBool U_EXPORT2 -ubidi_isInverse(UBiDi *pBiDi); - -/** - * Specify whether block separators must be allocated level zero, - * so that successive paragraphs will progress from left to right. - * This function must be called before ubidi_setPara(). - * Paragraph separators (B) may appear in the text. Setting them to level zero - * means that all paragraph separators (including one possibly appearing - * in the last text position) are kept in the reordered text after the text - * that they follow in the source text. - * When this feature is not enabled, a paragraph separator at the last - * position of the text before reordering will go to the first position - * of the reordered text when the paragraph level is odd. - * - * @param pBiDi is a UBiDi object. - * - * @param orderParagraphsLTR specifies whether paragraph separators (B) must - * receive level 0, so that successive paragraphs progress from left to right. - * - * @see ubidi_setPara - * @stable ICU 3.4 - */ -U_STABLE void U_EXPORT2 -ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR); - -/** - * Is this Bidi object set to allocate level 0 to block separators so that - * successive paragraphs progress from left to right? - * - * @param pBiDi is a UBiDi object. - * @return TRUE if the Bidi object is set to allocate level 0 to block - * separators. - * - * @see ubidi_orderParagraphsLTR - * @stable ICU 3.4 - */ -U_STABLE UBool U_EXPORT2 -ubidi_isOrderParagraphsLTR(UBiDi *pBiDi); - -/** - * UBiDiReorderingMode values indicate which variant of the Bidi - * algorithm to use. - * - * @see ubidi_setReorderingMode - * @stable ICU 3.6 - */ -typedef enum UBiDiReorderingMode { - /** Regular Logical to Visual Bidi algorithm according to Unicode. - * This is a 0 value. - * @stable ICU 3.6 */ - UBIDI_REORDER_DEFAULT = 0, - /** Logical to Visual algorithm which handles numbers in a way which - * mimics the behavior of Windows XP. - * @stable ICU 3.6 */ - UBIDI_REORDER_NUMBERS_SPECIAL, - /** Logical to Visual algorithm grouping numbers with adjacent R characters - * (reversible algorithm). - * @stable ICU 3.6 */ - UBIDI_REORDER_GROUP_NUMBERS_WITH_R, - /** Reorder runs only to transform a Logical LTR string to the Logical RTL - * string with the same display, or vice-versa.
- * If this mode is set together with option - * #UBIDI_OPTION_INSERT_MARKS, some Bidi controls in the source - * text may be removed and other controls may be added to produce the - * minimum combination which has the required display. - * @stable ICU 3.6 */ - UBIDI_REORDER_RUNS_ONLY, - /** Visual to Logical algorithm which handles numbers like L - * (same algorithm as selected by ubidi_setInverse(TRUE). - * @see ubidi_setInverse - * @stable ICU 3.6 */ - UBIDI_REORDER_INVERSE_NUMBERS_AS_L, - /** Visual to Logical algorithm equivalent to the regular Logical to Visual - * algorithm. - * @stable ICU 3.6 */ - UBIDI_REORDER_INVERSE_LIKE_DIRECT, - /** Inverse Bidi (Visual to Logical) algorithm for the - * UBIDI_REORDER_NUMBERS_SPECIAL Bidi algorithm. - * @stable ICU 3.6 */ - UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL, -#ifndef U_HIDE_DEPRECATED_API - /** - * Number of values for reordering mode. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UBIDI_REORDER_COUNT -#endif // U_HIDE_DEPRECATED_API -} UBiDiReorderingMode; - -/** - * Modify the operation of the Bidi algorithm such that it implements some - * variant to the basic Bidi algorithm or approximates an "inverse Bidi" - * algorithm, depending on different values of the "reordering mode". - * This function must be called before ubidi_setPara(), and stays - * in effect until called again with a different argument. - * - *

The normal operation of the Bidi algorithm as described - * in the Unicode Standard Annex #9 is to take text stored in logical - * (keyboard, typing) order and to determine how to reorder it for visual - * rendering.

- * - *

With the reordering mode set to a value other than - * #UBIDI_REORDER_DEFAULT, this function changes the behavior of - * some of the subsequent functions in a way such that they implement an - * inverse Bidi algorithm or some other algorithm variants.

- * - *

Some legacy systems store text in visual order, and for operations - * with standard, Unicode-based algorithms, the text needs to be transformed - * into logical order. This is effectively the inverse algorithm of the - * described Bidi algorithm. Note that there is no standard algorithm for - * this "inverse Bidi", so a number of variants are implemented here.

- * - *

In other cases, it may be desirable to emulate some variant of the - * Logical to Visual algorithm (e.g. one used in MS Windows), or perform a - * Logical to Logical transformation.

- * - *
    - *
  • When the reordering mode is set to #UBIDI_REORDER_DEFAULT, - * the standard Bidi Logical to Visual algorithm is applied.
  • - * - *
  • When the reordering mode is set to - * #UBIDI_REORDER_NUMBERS_SPECIAL, - * the algorithm used to perform Bidi transformations when calling - * ubidi_setPara should approximate the algorithm used in - * Microsoft Windows XP rather than strictly conform to the Unicode Bidi - * algorithm. - *
    - * The differences between the basic algorithm and the algorithm addressed - * by this option are as follows: - *
      - *
    • Within text at an even embedding level, the sequence "123AB" - * (where AB represent R or AL letters) is transformed to "123BA" by the - * Unicode algorithm and to "BA123" by the Windows algorithm.
    • - *
    • Arabic-Indic numbers (AN) are handled by the Windows algorithm just - * like regular numbers (EN).
    • - *
  • - * - *
  • When the reordering mode is set to - * #UBIDI_REORDER_GROUP_NUMBERS_WITH_R, - * numbers located between LTR text and RTL text are associated with the RTL - * text. For instance, an LTR paragraph with content "abc 123 DEF" (where - * upper case letters represent RTL characters) will be transformed to - * "abc FED 123" (and not "abc 123 FED"), "DEF 123 abc" will be transformed - * to "123 FED abc" and "123 FED abc" will be transformed to "DEF 123 abc". - * This makes the algorithm reversible and makes it useful when round trip - * (from visual to logical and back to visual) must be achieved without - * adding LRM characters. However, this is a variation from the standard - * Unicode Bidi algorithm.
    - * The source text should not contain Bidi control characters other than LRM - * or RLM.
  • - * - *
  • When the reordering mode is set to - * #UBIDI_REORDER_RUNS_ONLY, - * a "Logical to Logical" transformation must be performed: - *
      - *
    • If the default text level of the source text (argument paraLevel - * in ubidi_setPara) is even, the source text will be handled as - * LTR logical text and will be transformed to the RTL logical text which has - * the same LTR visual display.
    • - *
    • If the default level of the source text is odd, the source text - * will be handled as RTL logical text and will be transformed to the - * LTR logical text which has the same LTR visual display.
    • - *
    - * This mode may be needed when logical text which is basically Arabic or - * Hebrew, with possible included numbers or phrases in English, has to be - * displayed as if it had an even embedding level (this can happen if the - * displaying application treats all text as if it was basically LTR). - *
    - * This mode may also be needed in the reverse case, when logical text which is - * basically English, with possible included phrases in Arabic or Hebrew, has to - * be displayed as if it had an odd embedding level. - *
    - * Both cases could be handled by adding LRE or RLE at the head of the text, - * if the display subsystem supports these formatting controls. If it does not, - * the problem may be handled by transforming the source text in this mode - * before displaying it, so that it will be displayed properly.
    - * The source text should not contain Bidi control characters other than LRM - * or RLM.
  • - * - *
  • When the reordering mode is set to - * #UBIDI_REORDER_INVERSE_NUMBERS_AS_L, an "inverse Bidi" algorithm - * is applied. - * Runs of text with numeric characters will be treated like LTR letters and - * may need to be surrounded with LRM characters when they are written in - * reordered sequence (the option #UBIDI_INSERT_LRM_FOR_NUMERIC can - * be used with function ubidi_writeReordered to this end. This - * mode is equivalent to calling ubidi_setInverse() with - * argument isInverse set to TRUE.
  • - * - *
  • When the reordering mode is set to - * #UBIDI_REORDER_INVERSE_LIKE_DIRECT, the "direct" Logical to Visual - * Bidi algorithm is used as an approximation of an "inverse Bidi" algorithm. - * This mode is similar to mode #UBIDI_REORDER_INVERSE_NUMBERS_AS_L - * but is closer to the regular Bidi algorithm. - *
    - * For example, an LTR paragraph with the content "FED 123 456 CBA" (where - * upper case represents RTL characters) will be transformed to - * "ABC 456 123 DEF", as opposed to "DEF 123 456 ABC" - * with mode UBIDI_REORDER_INVERSE_NUMBERS_AS_L.
    - * When used in conjunction with option - * #UBIDI_OPTION_INSERT_MARKS, this mode generally - * adds Bidi marks to the output significantly more sparingly than mode - * #UBIDI_REORDER_INVERSE_NUMBERS_AS_L with option - * #UBIDI_INSERT_LRM_FOR_NUMERIC in calls to - * ubidi_writeReordered.
  • - * - *
  • When the reordering mode is set to - * #UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL, the Logical to Visual - * Bidi algorithm used in Windows XP is used as an approximation of an "inverse Bidi" algorithm. - *
    - * For example, an LTR paragraph with the content "abc FED123" (where - * upper case represents RTL characters) will be transformed to "abc 123DEF."
  • - *
- * - *

In all the reordering modes specifying an "inverse Bidi" algorithm - * (i.e. those with a name starting with UBIDI_REORDER_INVERSE), - * output runs should be retrieved using - * ubidi_getVisualRun(), and the output text with - * ubidi_writeReordered(). The caller should keep in mind that in - * "inverse Bidi" modes the input is actually visually ordered text and - * reordered output returned by ubidi_getVisualRun() or - * ubidi_writeReordered() are actually runs or character string - * of logically ordered output.
- * For all the "inverse Bidi" modes, the source text should not contain - * Bidi control characters other than LRM or RLM.

- * - *

Note that option #UBIDI_OUTPUT_REVERSE of - * ubidi_writeReordered has no useful meaning and should not be - * used in conjunction with any value of the reordering mode specifying - * "inverse Bidi" or with value UBIDI_REORDER_RUNS_ONLY. - * - * @param pBiDi is a UBiDi object. - * @param reorderingMode specifies the required variant of the Bidi algorithm. - * - * @see UBiDiReorderingMode - * @see ubidi_setInverse - * @see ubidi_setPara - * @see ubidi_writeReordered - * @stable ICU 3.6 - */ -U_STABLE void U_EXPORT2 -ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode); - -/** - * What is the requested reordering mode for a given Bidi object? - * - * @param pBiDi is a UBiDi object. - * @return the current reordering mode of the Bidi object - * @see ubidi_setReorderingMode - * @stable ICU 3.6 - */ -U_STABLE UBiDiReorderingMode U_EXPORT2 -ubidi_getReorderingMode(UBiDi *pBiDi); - -/** - * UBiDiReorderingOption values indicate which options are - * specified to affect the Bidi algorithm. - * - * @see ubidi_setReorderingOptions - * @stable ICU 3.6 - */ -typedef enum UBiDiReorderingOption { - /** - * option value for ubidi_setReorderingOptions: - * disable all the options which can be set with this function - * @see ubidi_setReorderingOptions - * @stable ICU 3.6 - */ - UBIDI_OPTION_DEFAULT = 0, - - /** - * option bit for ubidi_setReorderingOptions: - * insert Bidi marks (LRM or RLM) when needed to ensure correct result of - * a reordering to a Logical order - * - *

This option must be set or reset before calling - * ubidi_setPara.

- * - *

This option is significant only with reordering modes which generate - * a result with Logical order, specifically:

- *
    - *
  • #UBIDI_REORDER_RUNS_ONLY
  • - *
  • #UBIDI_REORDER_INVERSE_NUMBERS_AS_L
  • - *
  • #UBIDI_REORDER_INVERSE_LIKE_DIRECT
  • - *
  • #UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL
  • - *
- * - *

If this option is set in conjunction with reordering mode - * #UBIDI_REORDER_INVERSE_NUMBERS_AS_L or with calling - * ubidi_setInverse(TRUE), it implies - * option #UBIDI_INSERT_LRM_FOR_NUMERIC - * in calls to function ubidi_writeReordered().

- * - *

For other reordering modes, a minimum number of LRM or RLM characters - * will be added to the source text after reordering it so as to ensure - * round trip, i.e. when applying the inverse reordering mode on the - * resulting logical text with removal of Bidi marks - * (option #UBIDI_OPTION_REMOVE_CONTROLS set before calling - * ubidi_setPara() or option #UBIDI_REMOVE_BIDI_CONTROLS - * in ubidi_writeReordered), the result will be identical to the - * source text in the first transformation. - * - *

This option will be ignored if specified together with option - * #UBIDI_OPTION_REMOVE_CONTROLS. It inhibits option - * UBIDI_REMOVE_BIDI_CONTROLS in calls to function - * ubidi_writeReordered() and it implies option - * #UBIDI_INSERT_LRM_FOR_NUMERIC in calls to function - * ubidi_writeReordered() if the reordering mode is - * #UBIDI_REORDER_INVERSE_NUMBERS_AS_L.

- * - * @see ubidi_setReorderingMode - * @see ubidi_setReorderingOptions - * @stable ICU 3.6 - */ - UBIDI_OPTION_INSERT_MARKS = 1, - - /** - * option bit for ubidi_setReorderingOptions: - * remove Bidi control characters - * - *

This option must be set or reset before calling - * ubidi_setPara.

- * - *

This option nullifies option #UBIDI_OPTION_INSERT_MARKS. - * It inhibits option #UBIDI_INSERT_LRM_FOR_NUMERIC in calls - * to function ubidi_writeReordered() and it implies option - * #UBIDI_REMOVE_BIDI_CONTROLS in calls to that function.

- * - * @see ubidi_setReorderingMode - * @see ubidi_setReorderingOptions - * @stable ICU 3.6 - */ - UBIDI_OPTION_REMOVE_CONTROLS = 2, - - /** - * option bit for ubidi_setReorderingOptions: - * process the output as part of a stream to be continued - * - *

This option must be set or reset before calling - * ubidi_setPara.

- * - *

This option specifies that the caller is interested in processing large - * text object in parts. - * The results of the successive calls are expected to be concatenated by the - * caller. Only the call for the last part will have this option bit off.

- * - *

When this option bit is on, ubidi_setPara() may process - * less than the full source text in order to truncate the text at a meaningful - * boundary. The caller should call ubidi_getProcessedLength() - * immediately after calling ubidi_setPara() in order to - * determine how much of the source text has been processed. - * Source text beyond that length should be resubmitted in following calls to - * ubidi_setPara. The processed length may be less than - * the length of the source text if a character preceding the last character of - * the source text constitutes a reasonable boundary (like a block separator) - * for text to be continued.
- * If the last character of the source text constitutes a reasonable - * boundary, the whole text will be processed at once.
- * If nowhere in the source text there exists - * such a reasonable boundary, the processed length will be zero.
- * The caller should check for such an occurrence and do one of the following: - *

  • submit a larger amount of text with a better chance to include - * a reasonable boundary.
  • - *
  • resubmit the same text after turning off option - * UBIDI_OPTION_STREAMING.
- * In all cases, this option should be turned off before processing the last - * part of the text.

- * - *

When the UBIDI_OPTION_STREAMING option is used, - * it is recommended to call ubidi_orderParagraphsLTR() with - * argument orderParagraphsLTR set to TRUE before - * calling ubidi_setPara so that later paragraphs may be - * concatenated to previous paragraphs on the right.

- * - * @see ubidi_setReorderingMode - * @see ubidi_setReorderingOptions - * @see ubidi_getProcessedLength - * @see ubidi_orderParagraphsLTR - * @stable ICU 3.6 - */ - UBIDI_OPTION_STREAMING = 4 -} UBiDiReorderingOption; - -/** - * Specify which of the reordering options - * should be applied during Bidi transformations. - * - * @param pBiDi is a UBiDi object. - * @param reorderingOptions is a combination of zero or more of the following - * options: - * #UBIDI_OPTION_DEFAULT, #UBIDI_OPTION_INSERT_MARKS, - * #UBIDI_OPTION_REMOVE_CONTROLS, #UBIDI_OPTION_STREAMING. - * - * @see ubidi_getReorderingOptions - * @stable ICU 3.6 - */ -U_STABLE void U_EXPORT2 -ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions); - -/** - * What are the reordering options applied to a given Bidi object? - * - * @param pBiDi is a UBiDi object. - * @return the current reordering options of the Bidi object - * @see ubidi_setReorderingOptions - * @stable ICU 3.6 - */ -U_STABLE uint32_t U_EXPORT2 -ubidi_getReorderingOptions(UBiDi *pBiDi); - -/** - * Set the context before a call to ubidi_setPara().

- * - * ubidi_setPara() computes the left-right directionality for a given piece - * of text which is supplied as one of its arguments. Sometimes this piece - * of text (the "main text") should be considered in context, because text - * appearing before ("prologue") and/or after ("epilogue") the main text - * may affect the result of this computation.

- * - * This function specifies the prologue and/or the epilogue for the next - * call to ubidi_setPara(). The characters specified as prologue and - * epilogue should not be modified by the calling program until the call - * to ubidi_setPara() has returned. If successive calls to ubidi_setPara() - * all need specification of a context, ubidi_setContext() must be called - * before each call to ubidi_setPara(). In other words, a context is not - * "remembered" after the following successful call to ubidi_setPara().

- * - * If a call to ubidi_setPara() specifies UBIDI_DEFAULT_LTR or - * UBIDI_DEFAULT_RTL as paraLevel and is preceded by a call to - * ubidi_setContext() which specifies a prologue, the paragraph level will - * be computed taking in consideration the text in the prologue.

- * - * When ubidi_setPara() is called without a previous call to - * ubidi_setContext, the main text is handled as if preceded and followed - * by strong directional characters at the current paragraph level. - * Calling ubidi_setContext() with specification of a prologue will change - * this behavior by handling the main text as if preceded by the last - * strong character appearing in the prologue, if any. - * Calling ubidi_setContext() with specification of an epilogue will change - * the behavior of ubidi_setPara() by handling the main text as if followed - * by the first strong character or digit appearing in the epilogue, if any.

- * - * Note 1: if ubidi_setContext is called repeatedly without - * calling ubidi_setPara, the earlier calls have no effect, - * only the last call will be remembered for the next call to - * ubidi_setPara.

- * - * Note 2: calling ubidi_setContext(pBiDi, NULL, 0, NULL, 0, &errorCode) - * cancels any previous setting of non-empty prologue or epilogue. - * The next call to ubidi_setPara() will process no - * prologue or epilogue.

- * - * Note 3: users must be aware that even after setting the context - * before a call to ubidi_setPara() to perform e.g. a logical to visual - * transformation, the resulting string may not be identical to what it - * would have been if all the text, including prologue and epilogue, had - * been processed together.
- * Example (upper case letters represent RTL characters):
- *   prologue = "abc DE"
- *   epilogue = none
- *   main text = "FGH xyz"
- *   paraLevel = UBIDI_LTR
- *   display without prologue = "HGF xyz" - * ("HGF" is adjacent to "xyz")
- *   display with prologue = "abc HGFED xyz" - * ("HGF" is not adjacent to "xyz")
- * - * @param pBiDi is a paragraph UBiDi object. - * - * @param prologue is a pointer to the text which precedes the text that - * will be specified in a coming call to ubidi_setPara(). - * If there is no prologue to consider, then proLength - * must be zero and this pointer can be NULL. - * - * @param proLength is the length of the prologue; if proLength==-1 - * then the prologue must be zero-terminated. - * Otherwise proLength must be >= 0. If proLength==0, it means - * that there is no prologue to consider. - * - * @param epilogue is a pointer to the text which follows the text that - * will be specified in a coming call to ubidi_setPara(). - * If there is no epilogue to consider, then epiLength - * must be zero and this pointer can be NULL. - * - * @param epiLength is the length of the epilogue; if epiLength==-1 - * then the epilogue must be zero-terminated. - * Otherwise epiLength must be >= 0. If epiLength==0, it means - * that there is no epilogue to consider. - * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @see ubidi_setPara - * @stable ICU 4.8 - */ -U_STABLE void U_EXPORT2 -ubidi_setContext(UBiDi *pBiDi, - const UChar *prologue, int32_t proLength, - const UChar *epilogue, int32_t epiLength, - UErrorCode *pErrorCode); - -/** - * Perform the Unicode Bidi algorithm. It is defined in the - * Unicode Standard Annex #9, - * Unicode 8.0.0 / revision 33, - * also described in The Unicode Standard, Version 8.0 .

- * - * This function takes a piece of plain text containing one or more paragraphs, - * with or without externally specified embedding levels from styled - * text and computes the left-right-directionality of each character.

- * - * If the entire text is all of the same directionality, then - * the function may not perform all the steps described by the algorithm, - * i.e., some levels may not be the same as if all steps were performed. - * This is not relevant for unidirectional text.
- * For example, in pure LTR text with numbers the numbers would get - * a resolved level of 2 higher than the surrounding text according to - * the algorithm. This implementation may set all resolved levels to - * the same value in such a case.

- * - * The text can be composed of multiple paragraphs. Occurrence of a block - * separator in the text terminates a paragraph, and whatever comes next starts - * a new paragraph. The exception to this rule is when a Carriage Return (CR) - * is followed by a Line Feed (LF). Both CR and LF are block separators, but - * in that case, the pair of characters is considered as terminating the - * preceding paragraph, and a new paragraph will be started by a character - * coming after the LF. - * - * @param pBiDi A UBiDi object allocated with ubidi_open() - * which will be set to contain the reordering information, - * especially the resolved levels for all the characters in text. - * - * @param text is a pointer to the text that the Bidi algorithm will be performed on. - * This pointer is stored in the UBiDi object and can be retrieved - * with ubidi_getText().
- * Note: the text must be (at least) length long. - * - * @param length is the length of the text; if length==-1 then - * the text must be zero-terminated. - * - * @param paraLevel specifies the default level for the text; - * it is typically 0 (LTR) or 1 (RTL). - * If the function shall determine the paragraph level from the text, - * then paraLevel can be set to - * either #UBIDI_DEFAULT_LTR - * or #UBIDI_DEFAULT_RTL; if the text contains multiple - * paragraphs, the paragraph level shall be determined separately for - * each paragraph; if a paragraph does not include any strongly typed - * character, then the desired default is used (0 for LTR or 1 for RTL). - * Any other value between 0 and #UBIDI_MAX_EXPLICIT_LEVEL - * is also valid, with odd levels indicating RTL. - * - * @param embeddingLevels (in) may be used to preset the embedding and override levels, - * ignoring characters like LRE and PDF in the text. - * A level overrides the directional property of its corresponding - * (same index) character if the level has the - * #UBIDI_LEVEL_OVERRIDE bit set.

- * Aside from that bit, it must be - * paraLevel<=embeddingLevels[]<=UBIDI_MAX_EXPLICIT_LEVEL, - * except that level 0 is always allowed. - * Level 0 for a paragraph separator prevents reordering of paragraphs; - * this only works reliably if #UBIDI_LEVEL_OVERRIDE - * is also set for paragraph separators. - * Level 0 for other characters is treated as a wildcard - * and is lifted up to the resolved level of the surrounding paragraph.

- * Caution: A copy of this pointer, not of the levels, - * will be stored in the UBiDi object; - * the embeddingLevels array must not be - * deallocated before the UBiDi structure is destroyed or reused, - * and the embeddingLevels - * should not be modified to avoid unexpected results on subsequent Bidi operations. - * However, the ubidi_setPara() and - * ubidi_setLine() functions may modify some or all of the levels.

- * After the UBiDi object is reused or destroyed, the caller - * must take care of the deallocation of the embeddingLevels array.

- * Note: the embeddingLevels array must be - * at least length long. - * This pointer can be NULL if this - * value is not necessary. - * - * @param pErrorCode must be a valid pointer to an error code value. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, - UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels, - UErrorCode *pErrorCode); - -#ifndef U_HIDE_INTERNAL_API -/** - * Perform the Unicode Bidi algorithm. It is defined in the - * Unicode Standard Annex #9, - * Unicode 8.0.0 / revision 33, - * also described in The Unicode Standard, Version 8.0 .

- * - * This function takes a piece of plain text containing one or more paragraphs, - * with or without externally specified direction overrides (in the form of - * sequences of one or more bidi control characters for - * embeddings/overrides/isolates to be effectively inserted at specified points - * in the text), and computes the left-right-directionality of each character. - * Note that ubidi_setContext may be used to set the context before or after the - * text passed to ubidi_setPara, so ubidi_setParaWithControls is only needed if - * externally specified direction overrides need to be effectively inserted at - * other locations in the text.

- * - * Note: Currently the external specified direction overrides are only supported - * for the Logical to Visual values of UBiDiReorderingMode: UBIDI_REORDER_DEFAULT, - * UBIDI_REORDER_NUMBERS_SPECIAL, UBIDI_REORDER_GROUP_NUMBERS_WITH_R. With other - * UBiDiReorderingMode settings, this function behaves as if offsetCount is 0.

- * - * If the entire text is all of the same directionality, then the function may - * not perform all the steps described by the algorithm, i.e., some levels may - * not be the same as if all steps were performed. This is not relevant for - * unidirectional text.
- * For example, in pure LTR text with numbers the numbers would get a resolved - * level of 2 higher than the surrounding text according to the algorithm. This - * implementation may set all resolved levels to the same value in such a case.

- * - * The text can be composed of multiple paragraphs. Occurrence of a block - * separator in the text terminates a paragraph, and whatever comes next starts - * a new paragraph. The exception to this rule is when a Carriage Return (CR) - * is followed by a Line Feed (LF). Both CR and LF are block separators, but - * in that case, the pair of characters is considered as terminating the - * preceding paragraph, and a new paragraph will be started by a character - * coming after the LF.

- * - * @param pBiDi A UBiDi object allocated with ubidi_open() - * which will be set to contain the reordering information, - * especially the resolved levels for all the characters in text. - * - * @param text is a pointer to the text that the Bidi algorithm will be performed on. - * This pointer is stored in the UBiDi object and can be retrieved - * with ubidi_getText().
- * Note: the text must be (at least) length long. - * - * @param length is the length of the text; if length==-1 then - * the text must be zero-terminated. - * - * @param paraLevel specifies the default level for the text; - * it is typically 0 (LTR) or 1 (RTL). - * If the function shall determine the paragraph level from the text, - * then paraLevel can be set to - * either #UBIDI_DEFAULT_LTR - * or #UBIDI_DEFAULT_RTL; if the text contains multiple - * paragraphs, the paragraph level shall be determined separately for - * each paragraph; if a paragraph does not include any strongly typed - * character, then the desired default is used (0 for LTR or 1 for RTL). - * Any other value between 0 and #UBIDI_MAX_EXPLICIT_LEVEL - * is also valid, with odd levels indicating RTL. - * - * @param offsets Array of text offsets at which sequences of one or more - * bidi controls are to be effectively inserted. The offset values must - * be >= 0 and < length (use ubidi_setContext - * to provide the effect of inserting controls after the last character - * of the text). This must be non-NULL if offsetCount > 0. - * - * @param offsetCount The number of entries in the offsets array, and in the - * controlStringIndices array if the latter is present (non NULL). If - * offsetCount is 0, then no controls will be inserted and - * the parameters offsets, controlStringIndices - * and controlStrings will be ignored. - * - * @param controlStringIndices If not NULL, this array must have the same - * number of entries as the offsets array; each entry in this array - * maps from the corresponding offset to the index in controlStrings - * of the control sequence that is to be effectively inserted at that - * offset. This indirection is useful when certain control sequences - * are to be effectively inserted in many different places in the text. - * If this array is NULL, then the entries in controlStrings correspond - * directly to the entries in the offsets array. - * - * @param controlStrings Array of const pointers to zero-terminated - * const UChar strings each consisting of zero or more characters that - * are bidi controls for embeddings, overrides, or isolates (see list - * below). Other characters that might be supported in the future - * (depending on need) include bidi marks an characters with - * bidi class B (block separator) or class S (segment separator). - * The characters in these strings only affect the bidi levels assigned - * to the characters in he text array, they are not used for any other - * purpose.
- * If controlStringIndices is NULL, then controlStrings must have the - * same number of entries as the offsets array, and each entry provides - * the UChar string that is effectively inserted at the corresponding - * offset. If controlStringIndices is not NULL, then controlStrings must - * have at least enough entries to accommodate to all of the index values - * in the controlStringIndices array. This must be non-NULL if - * offsetCount > 0.
- * Current limitations:
- * Each zero-terminated const UChar string is limited a maximum length - * of 4, not including the zero terminator.
- * Each zero-terminated const UChar string may contain at most one - * instance of FSI, LRI, or RLI.
- * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @discussion - *

- * Supported bidi controls for embeddings / overrides / isolates as of Unicode 8.0:
- *   LRE   U+202A   LEFT-TO-RIGHT EMBEDDING
- *   RLE   U+202B   RIGHT-TO-LEFT EMBEDDING
- *   PDF   U+202C   POP DIRECTIONAL FORMATTING
- *   LRO   U+202D   LEFT-TO-RIGHT OVERRIDE
- *   RLO   U+202E   RIGHT-TO-LEFT OVERRIDE
- *   #
- *   LRI   U+2066   LEFT‑TO‑RIGHT ISOLATE
- *   RLI   U+2067   RIGHT‑TO‑LEFT ISOLATE
- *   FSI   U+2068   FIRST STRONG ISOLATE
- *   PDI   U+2069   POP DIRECTIONAL ISOLATE
- *
- * Bidi marks as of Unicode 8.0:
- *   ALM   U+061C   ARABIC LETTER MARK (bidi class AL)
- *   LRM   U+200E   LEFT-TO-RIGHT MARK (bidi class L)
- *   RLM   U+200F   RIGHT-TO-LEFT MARK (bidi class R)
- * Characters with bidi class B (block separator) as of Unicode 8.0:
- *   B     U+000A   LINE FEED (LF)
- *   B     U+000D   CARRIAGE RETURN (CR)
- *   B     U+001C   INFORMATION SEPARATOR FOUR
- *   B     U+001D   INFORMATION SEPARATOR THREE
- *   B     U+001E   INFORMATION SEPARATOR TWO
- *   B     U+0085   NEXT LINE (NEL)
- *   B     U+2029   PARAGRAPH SEPARATOR
- * Characters with bidi class S (segment separator) as of Unicode 8.0:
- *   S     U+0009   CHARACTER TABULATION
- *   S     U+000B   LINE TABULATION
- *   S     U+001F   INFORMATION SEPARATOR ONE
- * 
- * - * @see ubidi_setContext - * @internal technology preview as of ICU 57 - */ -U_INTERNAL void U_EXPORT2 -ubidi_setParaWithControls(UBiDi *pBiDi, - const UChar *text, int32_t length, - UBiDiLevel paraLevel, - const int32_t *offsets, int32_t offsetCount, - const int32_t *controlStringIndices, - const UChar * const * controlStrings, - UErrorCode *pErrorCode); - -#endif /* U_HIDE_INTERNAL_API */ - -/** - * ubidi_setLine() sets a UBiDi to - * contain the reordering information, especially the resolved levels, - * for all the characters in a line of text. This line of text is - * specified by referring to a UBiDi object representing - * this information for a piece of text containing one or more paragraphs, - * and by specifying a range of indexes in this text.

- * In the new line object, the indexes will range from 0 to limit-start-1.

- * - * This is used after calling ubidi_setPara() - * for a piece of text, and after line-breaking on that text. - * It is not necessary if each paragraph is treated as a single line.

- * - * After line-breaking, rules (L1) and (L2) for the treatment of - * trailing WS and for reordering are performed on - * a UBiDi object that represents a line.

- * - * Important: pLineBiDi shares data with - * pParaBiDi. - * You must destroy or reuse pLineBiDi before pParaBiDi. - * In other words, you must destroy or reuse the UBiDi object for a line - * before the object for its parent paragraph.

- * - * The text pointer that was stored in pParaBiDi is also copied, - * and start is added to it so that it points to the beginning of the - * line for this object. - * - * @param pParaBiDi is the parent paragraph object. It must have been set - * by a successful call to ubidi_setPara. - * - * @param start is the line's first index into the text. - * - * @param limit is just behind the line's last index into the text - * (its last index +1).
- * It must be 0<=startcontaining paragraph limit. - * If the specified line crosses a paragraph boundary, the function - * will terminate with error code U_ILLEGAL_ARGUMENT_ERROR. - * - * @param pLineBiDi is the object that will now represent a line of the text. - * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @see ubidi_setPara - * @see ubidi_getProcessedLength - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ubidi_setLine(const UBiDi *pParaBiDi, - int32_t start, int32_t limit, - UBiDi *pLineBiDi, - UErrorCode *pErrorCode); - -/** - * Get the directionality of the text. - * - * @param pBiDi is the paragraph or line UBiDi object. - * - * @return a value of UBIDI_LTR, UBIDI_RTL - * or UBIDI_MIXED - * that indicates if the entire text - * represented by this object is unidirectional, - * and which direction, or if it is mixed-directional. - * Note - The value UBIDI_NEUTRAL is never returned from this method. - * - * @see UBiDiDirection - * @stable ICU 2.0 - */ -U_STABLE UBiDiDirection U_EXPORT2 -ubidi_getDirection(const UBiDi *pBiDi); - -/** - * Gets the base direction of the text provided according - * to the Unicode Bidirectional Algorithm. The base direction - * is derived from the first character in the string with bidirectional - * character type L, R, or AL. If the first such character has type L, - * UBIDI_LTR is returned. If the first such character has - * type R or AL, UBIDI_RTL is returned. If the string does - * not contain any character of these types, then - * UBIDI_NEUTRAL is returned. - * - * This is a lightweight function for use when only the base direction - * is needed and no further bidi processing of the text is needed. - * - * @param text is a pointer to the text whose base - * direction is needed. - * Note: the text must be (at least) @c length long. - * - * @param length is the length of the text; - * if length==-1 then the text - * must be zero-terminated. - * - * @return UBIDI_LTR, UBIDI_RTL, - * UBIDI_NEUTRAL - * - * @see UBiDiDirection - * @stable ICU 4.6 - */ -U_STABLE UBiDiDirection U_EXPORT2 -ubidi_getBaseDirection(const UChar *text, int32_t length ); - -/** - * Get the pointer to the text. - * - * @param pBiDi is the paragraph or line UBiDi object. - * - * @return The pointer to the text that the UBiDi object was created for. - * - * @see ubidi_setPara - * @see ubidi_setLine - * @stable ICU 2.0 - */ -U_STABLE const UChar * U_EXPORT2 -ubidi_getText(const UBiDi *pBiDi); - -/** - * Get the length of the text. - * - * @param pBiDi is the paragraph or line UBiDi object. - * - * @return The length of the text that the UBiDi object was created for. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ubidi_getLength(const UBiDi *pBiDi); - -/** - * Get the paragraph level of the text. - * - * @param pBiDi is the paragraph or line UBiDi object. - * - * @return The paragraph level. If there are multiple paragraphs, their - * level may vary if the required paraLevel is UBIDI_DEFAULT_LTR or - * UBIDI_DEFAULT_RTL. In that case, the level of the first paragraph - * is returned. - * - * @see UBiDiLevel - * @see ubidi_getParagraph - * @see ubidi_getParagraphByIndex - * @stable ICU 2.0 - */ -U_STABLE UBiDiLevel U_EXPORT2 -ubidi_getParaLevel(const UBiDi *pBiDi); - -/** - * Get the number of paragraphs. - * - * @param pBiDi is the paragraph or line UBiDi object. - * - * @return The number of paragraphs. - * @stable ICU 3.4 - */ -U_STABLE int32_t U_EXPORT2 -ubidi_countParagraphs(UBiDi *pBiDi); - -/** - * Get a paragraph, given a position within the text. - * This function returns information about a paragraph.
- * Note: if the paragraph index is known, it is more efficient to - * retrieve the paragraph information using ubidi_getParagraphByIndex().

- * - * @param pBiDi is the paragraph or line UBiDi object. - * - * @param charIndex is the index of a character within the text, in the - * range [0..ubidi_getProcessedLength(pBiDi)-1]. - * - * @param pParaStart will receive the index of the first character of the - * paragraph in the text. - * This pointer can be NULL if this - * value is not necessary. - * - * @param pParaLimit will receive the limit of the paragraph. - * The l-value that you point to here may be the - * same expression (variable) as the one for - * charIndex. - * This pointer can be NULL if this - * value is not necessary. - * - * @param pParaLevel will receive the level of the paragraph. - * This pointer can be NULL if this - * value is not necessary. - * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @return The index of the paragraph containing the specified position. - * - * @see ubidi_getProcessedLength - * @stable ICU 3.4 - */ -U_STABLE int32_t U_EXPORT2 -ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex, int32_t *pParaStart, - int32_t *pParaLimit, UBiDiLevel *pParaLevel, - UErrorCode *pErrorCode); - -/** - * Get a paragraph, given the index of this paragraph. - * - * This function returns information about a paragraph.

- * - * @param pBiDi is the paragraph UBiDi object. - * - * @param paraIndex is the number of the paragraph, in the - * range [0..ubidi_countParagraphs(pBiDi)-1]. - * - * @param pParaStart will receive the index of the first character of the - * paragraph in the text. - * This pointer can be NULL if this - * value is not necessary. - * - * @param pParaLimit will receive the limit of the paragraph. - * This pointer can be NULL if this - * value is not necessary. - * - * @param pParaLevel will receive the level of the paragraph. - * This pointer can be NULL if this - * value is not necessary. - * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @stable ICU 3.4 - */ -U_STABLE void U_EXPORT2 -ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex, - int32_t *pParaStart, int32_t *pParaLimit, - UBiDiLevel *pParaLevel, UErrorCode *pErrorCode); - -/** - * Get the level for one character. - * - * @param pBiDi is the paragraph or line UBiDi object. - * - * @param charIndex the index of a character. It must be in the range - * [0..ubidi_getProcessedLength(pBiDi)]. - * - * @return The level for the character at charIndex (0 if charIndex is not - * in the valid range). - * - * @see UBiDiLevel - * @see ubidi_getProcessedLength - * @stable ICU 2.0 - */ -U_STABLE UBiDiLevel U_EXPORT2 -ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex); - -/** - * Get an array of levels for each character.

- * - * Note that this function may allocate memory under some - * circumstances, unlike ubidi_getLevelAt(). - * - * @param pBiDi is the paragraph or line UBiDi object, whose - * text length must be strictly positive. - * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @return The levels array for the text, - * or NULL if an error occurs. - * - * @see UBiDiLevel - * @see ubidi_getProcessedLength - * @stable ICU 2.0 - */ -U_STABLE const UBiDiLevel * U_EXPORT2 -ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode); - -/** - * Get a logical run. - * This function returns information about a run and is used - * to retrieve runs in logical order.

- * This is especially useful for line-breaking on a paragraph. - * - * @param pBiDi is the paragraph or line UBiDi object. - * - * @param logicalPosition is a logical position within the source text. - * - * @param pLogicalLimit will receive the limit of the corresponding run. - * The l-value that you point to here may be the - * same expression (variable) as the one for - * logicalPosition. - * This pointer can be NULL if this - * value is not necessary. - * - * @param pLevel will receive the level of the corresponding run. - * This pointer can be NULL if this - * value is not necessary. - * - * @see ubidi_getProcessedLength - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition, - int32_t *pLogicalLimit, UBiDiLevel *pLevel); - -/** - * Get the number of runs. - * This function may invoke the actual reordering on the - * UBiDi object, after ubidi_setPara() - * may have resolved only the levels of the text. Therefore, - * ubidi_countRuns() may have to allocate memory, - * and may fail doing so. - * - * @param pBiDi is the paragraph or line UBiDi object. - * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @return The number of runs. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode); - -/** - * Get one run's logical start, length, and directionality, - * which can be 0 for LTR or 1 for RTL. - * In an RTL run, the character at the logical start is - * visually on the right of the displayed run. - * The length is the number of characters in the run.

- * ubidi_countRuns() should be called - * before the runs are retrieved. - * - * @param pBiDi is the paragraph or line UBiDi object. - * - * @param runIndex is the number of the run in visual order, in the - * range [0..ubidi_countRuns(pBiDi)-1]. - * - * @param pLogicalStart is the first logical character index in the text. - * The pointer may be NULL if this index is not needed. - * - * @param pLength is the number of characters (at least one) in the run. - * The pointer may be NULL if this is not needed. - * - * @return the directionality of the run, - * UBIDI_LTR==0 or UBIDI_RTL==1, - * never UBIDI_MIXED, - * never UBIDI_NEUTRAL. - * - * @see ubidi_countRuns - * - * Example: - *

- * \code
- * int32_t i, count=ubidi_countRuns(pBiDi),
- *         logicalStart, visualIndex=0, length;
- * for(i=0; i0);
- *     } else {
- *         logicalStart+=length;  // logicalLimit
- *         do { // RTL
- *             show_char(text[--logicalStart], visualIndex++);
- *         } while(--length>0);
- *     }
- * }
- *\endcode
- * 
- * - * Note that in right-to-left runs, code like this places - * second surrogates before first ones (which is generally a bad idea) - * and combining characters before base characters. - *

- * Use of ubidi_writeReordered(), optionally with the - * #UBIDI_KEEP_BASE_COMBINING option, can be considered in order - * to avoid these issues. - * @stable ICU 2.0 - */ -U_STABLE UBiDiDirection U_EXPORT2 -ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex, - int32_t *pLogicalStart, int32_t *pLength); - -/** - * Get the visual position from a logical text position. - * If such a mapping is used many times on the same - * UBiDi object, then calling - * ubidi_getLogicalMap() is more efficient.

- * - * The value returned may be #UBIDI_MAP_NOWHERE if there is no - * visual position because the corresponding text character is a Bidi control - * removed from output by the option #UBIDI_OPTION_REMOVE_CONTROLS. - *

- * When the visual output is altered by using options of - * ubidi_writeReordered() such as UBIDI_INSERT_LRM_FOR_NUMERIC, - * UBIDI_KEEP_BASE_COMBINING, UBIDI_OUTPUT_REVERSE, - * UBIDI_REMOVE_BIDI_CONTROLS, the visual position returned may not - * be correct. It is advised to use, when possible, reordering options - * such as UBIDI_OPTION_INSERT_MARKS and UBIDI_OPTION_REMOVE_CONTROLS. - *

- * Note that in right-to-left runs, this mapping places - * second surrogates before first ones (which is generally a bad idea) - * and combining characters before base characters. - * Use of ubidi_writeReordered(), optionally with the - * #UBIDI_KEEP_BASE_COMBINING option can be considered instead - * of using the mapping, in order to avoid these issues. - * - * @param pBiDi is the paragraph or line UBiDi object. - * - * @param logicalIndex is the index of a character in the text. - * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @return The visual position of this character. - * - * @see ubidi_getLogicalMap - * @see ubidi_getLogicalIndex - * @see ubidi_getProcessedLength - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode); - -/** - * Get the logical text position from a visual position. - * If such a mapping is used many times on the same - * UBiDi object, then calling - * ubidi_getVisualMap() is more efficient.

- * - * The value returned may be #UBIDI_MAP_NOWHERE if there is no - * logical position because the corresponding text character is a Bidi mark - * inserted in the output by option #UBIDI_OPTION_INSERT_MARKS. - *

- * This is the inverse function to ubidi_getVisualIndex(). - *

- * When the visual output is altered by using options of - * ubidi_writeReordered() such as UBIDI_INSERT_LRM_FOR_NUMERIC, - * UBIDI_KEEP_BASE_COMBINING, UBIDI_OUTPUT_REVERSE, - * UBIDI_REMOVE_BIDI_CONTROLS, the logical position returned may not - * be correct. It is advised to use, when possible, reordering options - * such as UBIDI_OPTION_INSERT_MARKS and UBIDI_OPTION_REMOVE_CONTROLS. - * - * @param pBiDi is the paragraph or line UBiDi object. - * - * @param visualIndex is the visual position of a character. - * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @return The index of this character in the text. - * - * @see ubidi_getVisualMap - * @see ubidi_getVisualIndex - * @see ubidi_getResultLength - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode); - -/** - * Get a logical-to-visual index map (array) for the characters in the UBiDi - * (paragraph or line) object. - *

- * Some values in the map may be #UBIDI_MAP_NOWHERE if the - * corresponding text characters are Bidi controls removed from the visual - * output by the option #UBIDI_OPTION_REMOVE_CONTROLS. - *

- * When the visual output is altered by using options of - * ubidi_writeReordered() such as UBIDI_INSERT_LRM_FOR_NUMERIC, - * UBIDI_KEEP_BASE_COMBINING, UBIDI_OUTPUT_REVERSE, - * UBIDI_REMOVE_BIDI_CONTROLS, the visual positions returned may not - * be correct. It is advised to use, when possible, reordering options - * such as UBIDI_OPTION_INSERT_MARKS and UBIDI_OPTION_REMOVE_CONTROLS. - *

- * Note that in right-to-left runs, this mapping places - * second surrogates before first ones (which is generally a bad idea) - * and combining characters before base characters. - * Use of ubidi_writeReordered(), optionally with the - * #UBIDI_KEEP_BASE_COMBINING option can be considered instead - * of using the mapping, in order to avoid these issues. - * - * @param pBiDi is the paragraph or line UBiDi object. - * - * @param indexMap is a pointer to an array of ubidi_getProcessedLength() - * indexes which will reflect the reordering of the characters. - * If option #UBIDI_OPTION_INSERT_MARKS is set, the number - * of elements allocated in indexMap must be no less than - * ubidi_getResultLength(). - * The array does not need to be initialized.

- * The index map will result in indexMap[logicalIndex]==visualIndex. - * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @see ubidi_getVisualMap - * @see ubidi_getVisualIndex - * @see ubidi_getProcessedLength - * @see ubidi_getResultLength - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode); - -/** - * Get a visual-to-logical index map (array) for the characters in the UBiDi - * (paragraph or line) object. - *

- * Some values in the map may be #UBIDI_MAP_NOWHERE if the - * corresponding text characters are Bidi marks inserted in the visual output - * by the option #UBIDI_OPTION_INSERT_MARKS. - *

- * When the visual output is altered by using options of - * ubidi_writeReordered() such as UBIDI_INSERT_LRM_FOR_NUMERIC, - * UBIDI_KEEP_BASE_COMBINING, UBIDI_OUTPUT_REVERSE, - * UBIDI_REMOVE_BIDI_CONTROLS, the logical positions returned may not - * be correct. It is advised to use, when possible, reordering options - * such as UBIDI_OPTION_INSERT_MARKS and UBIDI_OPTION_REMOVE_CONTROLS. - * - * @param pBiDi is the paragraph or line UBiDi object. - * - * @param indexMap is a pointer to an array of ubidi_getResultLength() - * indexes which will reflect the reordering of the characters. - * If option #UBIDI_OPTION_REMOVE_CONTROLS is set, the number - * of elements allocated in indexMap must be no less than - * ubidi_getProcessedLength(). - * The array does not need to be initialized.

- * The index map will result in indexMap[visualIndex]==logicalIndex. - * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @see ubidi_getLogicalMap - * @see ubidi_getLogicalIndex - * @see ubidi_getProcessedLength - * @see ubidi_getResultLength - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode); - -/** - * This is a convenience function that does not use a UBiDi object. - * It is intended to be used for when an application has determined the levels - * of objects (character sequences) and just needs to have them reordered (L2). - * This is equivalent to using ubidi_getLogicalMap() on a - * UBiDi object. - * - * @param levels is an array with length levels that have been determined by - * the application. - * - * @param length is the number of levels in the array, or, semantically, - * the number of objects to be reordered. - * It must be length>0. - * - * @param indexMap is a pointer to an array of length - * indexes which will reflect the reordering of the characters. - * The array does not need to be initialized.

- * The index map will result in indexMap[logicalIndex]==visualIndex. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap); - -/** - * This is a convenience function that does not use a UBiDi object. - * It is intended to be used for when an application has determined the levels - * of objects (character sequences) and just needs to have them reordered (L2). - * This is equivalent to using ubidi_getVisualMap() on a - * UBiDi object. - * - * @param levels is an array with length levels that have been determined by - * the application. - * - * @param length is the number of levels in the array, or, semantically, - * the number of objects to be reordered. - * It must be length>0. - * - * @param indexMap is a pointer to an array of length - * indexes which will reflect the reordering of the characters. - * The array does not need to be initialized.

- * The index map will result in indexMap[visualIndex]==logicalIndex. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap); - -/** - * Invert an index map. - * The index mapping of the first map is inverted and written to - * the second one. - * - * @param srcMap is an array with length elements - * which defines the original mapping from a source array containing - * length elements to a destination array. - * Some elements of the source array may have no mapping in the - * destination array. In that case, their value will be - * the special value UBIDI_MAP_NOWHERE. - * All elements must be >=0 or equal to UBIDI_MAP_NOWHERE. - * Some elements may have a value >= length, if the - * destination array has more elements than the source array. - * There must be no duplicate indexes (two or more elements with the - * same value except UBIDI_MAP_NOWHERE). - * - * @param destMap is an array with a number of elements equal to 1 + the highest - * value in srcMap. - * destMap will be filled with the inverse mapping. - * If element with index i in srcMap has a value k different - * from UBIDI_MAP_NOWHERE, this means that element i of - * the source array maps to element k in the destination array. - * The inverse map will have value i in its k-th element. - * For all elements of the destination array which do not map to - * an element in the source array, the corresponding element in the - * inverse map will have a value equal to UBIDI_MAP_NOWHERE. - * - * @param length is the length of each array. - * @see UBIDI_MAP_NOWHERE - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length); - -/** option flags for ubidi_writeReordered() */ - -/** - * option bit for ubidi_writeReordered(): - * keep combining characters after their base characters in RTL runs - * - * @see ubidi_writeReordered - * @stable ICU 2.0 - */ -#define UBIDI_KEEP_BASE_COMBINING 1 - -/** - * option bit for ubidi_writeReordered(): - * replace characters with the "mirrored" property in RTL runs - * by their mirror-image mappings - * - * @see ubidi_writeReordered - * @stable ICU 2.0 - */ -#define UBIDI_DO_MIRRORING 2 - -/** - * option bit for ubidi_writeReordered(): - * surround the run with LRMs if necessary; - * this is part of the approximate "inverse Bidi" algorithm - * - *

This option does not imply corresponding adjustment of the index - * mappings.

- * - * @see ubidi_setInverse - * @see ubidi_writeReordered - * @stable ICU 2.0 - */ -#define UBIDI_INSERT_LRM_FOR_NUMERIC 4 - -/** - * option bit for ubidi_writeReordered(): - * remove Bidi control characters - * (this does not affect #UBIDI_INSERT_LRM_FOR_NUMERIC) - * - *

This option does not imply corresponding adjustment of the index - * mappings.

- * - * @see ubidi_writeReordered - * @stable ICU 2.0 - */ -#define UBIDI_REMOVE_BIDI_CONTROLS 8 - -/** - * option bit for ubidi_writeReordered(): - * write the output in reverse order - * - *

This has the same effect as calling ubidi_writeReordered() - * first without this option, and then calling - * ubidi_writeReverse() without mirroring. - * Doing this in the same step is faster and avoids a temporary buffer. - * An example for using this option is output to a character terminal that - * is designed for RTL scripts and stores text in reverse order.

- * - * @see ubidi_writeReordered - * @stable ICU 2.0 - */ -#define UBIDI_OUTPUT_REVERSE 16 - -/** - * Get the length of the source text processed by the last call to - * ubidi_setPara(). This length may be different from the length - * of the source text if option #UBIDI_OPTION_STREAMING - * has been set. - *
- * Note that whenever the length of the text affects the execution or the - * result of a function, it is the processed length which must be considered, - * except for ubidi_setPara (which receives unprocessed source - * text) and ubidi_getLength (which returns the original length - * of the source text).
- * In particular, the processed length is the one to consider in the following - * cases: - *
    - *
  • maximum value of the limit argument of - * ubidi_setLine
  • - *
  • maximum value of the charIndex argument of - * ubidi_getParagraph
  • - *
  • maximum value of the charIndex argument of - * ubidi_getLevelAt
  • - *
  • number of elements in the array returned by ubidi_getLevels
  • - *
  • maximum value of the logicalStart argument of - * ubidi_getLogicalRun
  • - *
  • maximum value of the logicalIndex argument of - * ubidi_getVisualIndex
  • - *
  • number of elements filled in the *indexMap argument of - * ubidi_getLogicalMap
  • - *
  • length of text processed by ubidi_writeReordered
  • - *
- * - * @param pBiDi is the paragraph UBiDi object. - * - * @return The length of the part of the source text processed by - * the last call to ubidi_setPara. - * @see ubidi_setPara - * @see UBIDI_OPTION_STREAMING - * @stable ICU 3.6 - */ -U_STABLE int32_t U_EXPORT2 -ubidi_getProcessedLength(const UBiDi *pBiDi); - -/** - * Get the length of the reordered text resulting from the last call to - * ubidi_setPara(). This length may be different from the length - * of the source text if option #UBIDI_OPTION_INSERT_MARKS - * or option #UBIDI_OPTION_REMOVE_CONTROLS has been set. - *
- * This resulting length is the one to consider in the following cases: - *
    - *
  • maximum value of the visualIndex argument of - * ubidi_getLogicalIndex
  • - *
  • number of elements of the *indexMap argument of - * ubidi_getVisualMap
  • - *
- * Note that this length stays identical to the source text length if - * Bidi marks are inserted or removed using option bits of - * ubidi_writeReordered, or if option - * #UBIDI_REORDER_INVERSE_NUMBERS_AS_L has been set. - * - * @param pBiDi is the paragraph UBiDi object. - * - * @return The length of the reordered text resulting from - * the last call to ubidi_setPara. - * @see ubidi_setPara - * @see UBIDI_OPTION_INSERT_MARKS - * @see UBIDI_OPTION_REMOVE_CONTROLS - * @stable ICU 3.6 - */ -U_STABLE int32_t U_EXPORT2 -ubidi_getResultLength(const UBiDi *pBiDi); - -U_CDECL_BEGIN - -#ifndef U_HIDE_DEPRECATED_API -/** - * Value returned by UBiDiClassCallback callbacks when - * there is no need to override the standard Bidi class for a given code point. - * - * This constant is deprecated; use u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS)+1 instead. - * - * @see UBiDiClassCallback - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ -#define U_BIDI_CLASS_DEFAULT U_CHAR_DIRECTION_COUNT -#endif // U_HIDE_DEPRECATED_API - -/** - * Callback type declaration for overriding default Bidi class values with - * custom ones. - *

Usually, the function pointer will be propagated to a UBiDi - * object by calling the ubidi_setClassCallback() function; - * then the callback will be invoked by the UBA implementation any time the - * class of a character is to be determined.

- * - * @param context is a pointer to the callback private data. - * - * @param c is the code point to get a Bidi class for. - * - * @return The directional property / Bidi class for the given code point - * c if the default class has been overridden, or - * u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS)+1 - * if the standard Bidi class value for c is to be used. - * @see ubidi_setClassCallback - * @see ubidi_getClassCallback - * @stable ICU 3.6 - */ -typedef UCharDirection U_CALLCONV -UBiDiClassCallback(const void *context, UChar32 c); - -U_CDECL_END - -/** - * Retrieve the Bidi class for a given code point. - *

If a #UBiDiClassCallback callback is defined and returns a - * value other than u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS)+1, - * that value is used; otherwise the default class determination mechanism is invoked.

- * - * @param pBiDi is the paragraph UBiDi object. - * - * @param c is the code point whose Bidi class must be retrieved. - * - * @return The Bidi class for character c based - * on the given pBiDi instance. - * @see UBiDiClassCallback - * @stable ICU 3.6 - */ -U_STABLE UCharDirection U_EXPORT2 -ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c); - -/** - * Set the callback function and callback data used by the UBA - * implementation for Bidi class determination. - *

This may be useful for assigning Bidi classes to PUA characters, or - * for special application needs. For instance, an application may want to - * handle all spaces like L or R characters (according to the base direction) - * when creating the visual ordering of logical lines which are part of a report - * organized in columns: there should not be interaction between adjacent - * cells.

- * - * @param pBiDi is the paragraph UBiDi object. - * - * @param newFn is the new callback function pointer. - * - * @param newContext is the new callback context pointer. This can be NULL. - * - * @param oldFn fillin: Returns the old callback function pointer. This can be - * NULL. - * - * @param oldContext fillin: Returns the old callback's context. This can be - * NULL. - * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @see ubidi_getClassCallback - * @stable ICU 3.6 - */ -U_STABLE void U_EXPORT2 -ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn, - const void *newContext, UBiDiClassCallback **oldFn, - const void **oldContext, UErrorCode *pErrorCode); - -/** - * Get the current callback function used for Bidi class determination. - * - * @param pBiDi is the paragraph UBiDi object. - * - * @param fn fillin: Returns the callback function pointer. - * - * @param context fillin: Returns the callback's private context. - * - * @see ubidi_setClassCallback - * @stable ICU 3.6 - */ -U_STABLE void U_EXPORT2 -ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context); - -/** - * Take a UBiDi object containing the reordering - * information for a piece of text (one or more paragraphs) set by - * ubidi_setPara() or for a line of text set by - * ubidi_setLine() and write a reordered string to the - * destination buffer. - * - * This function preserves the integrity of characters with multiple - * code units and (optionally) combining characters. - * Characters in RTL runs can be replaced by mirror-image characters - * in the destination buffer. Note that "real" mirroring has - * to be done in a rendering engine by glyph selection - * and that for many "mirrored" characters there are no - * Unicode characters as mirror-image equivalents. - * There are also options to insert or remove Bidi control - * characters; see the description of the destSize - * and options parameters and of the option bit flags. - * - * @param pBiDi A pointer to a UBiDi object that - * is set by ubidi_setPara() or - * ubidi_setLine() and contains the reordering - * information for the text that it was defined for, - * as well as a pointer to that text.

- * The text was aliased (only the pointer was stored - * without copying the contents) and must not have been modified - * since the ubidi_setPara() call. - * - * @param dest A pointer to where the reordered text is to be copied. - * The source text and dest[destSize] - * must not overlap. - * - * @param destSize The size of the dest buffer, - * in number of UChars. - * If the UBIDI_INSERT_LRM_FOR_NUMERIC - * option is set, then the destination length could be - * as large as - * ubidi_getLength(pBiDi)+2*ubidi_countRuns(pBiDi). - * If the UBIDI_REMOVE_BIDI_CONTROLS option - * is set, then the destination length may be less than - * ubidi_getLength(pBiDi). - * If none of these options is set, then the destination length - * will be exactly ubidi_getProcessedLength(pBiDi). - * - * @param options A bit set of options for the reordering that control - * how the reordered text is written. - * The options include mirroring the characters on a code - * point basis and inserting LRM characters, which is used - * especially for transforming visually stored text - * to logically stored text (although this is still an - * imperfect implementation of an "inverse Bidi" algorithm - * because it uses the "forward Bidi" algorithm at its core). - * The available options are: - * #UBIDI_DO_MIRRORING, - * #UBIDI_INSERT_LRM_FOR_NUMERIC, - * #UBIDI_KEEP_BASE_COMBINING, - * #UBIDI_OUTPUT_REVERSE, - * #UBIDI_REMOVE_BIDI_CONTROLS - * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @return The length of the output string. - * - * @see ubidi_getProcessedLength - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ubidi_writeReordered(UBiDi *pBiDi, - UChar *dest, int32_t destSize, - uint16_t options, - UErrorCode *pErrorCode); - -/** - * Reverse a Right-To-Left run of Unicode text. - * - * This function preserves the integrity of characters with multiple - * code units and (optionally) combining characters. - * Characters can be replaced by mirror-image characters - * in the destination buffer. Note that "real" mirroring has - * to be done in a rendering engine by glyph selection - * and that for many "mirrored" characters there are no - * Unicode characters as mirror-image equivalents. - * There are also options to insert or remove Bidi control - * characters. - * - * This function is the implementation for reversing RTL runs as part - * of ubidi_writeReordered(). For detailed descriptions - * of the parameters, see there. - * Since no Bidi controls are inserted here, the output string length - * will never exceed srcLength. - * - * @see ubidi_writeReordered - * - * @param src A pointer to the RTL run text. - * - * @param srcLength The length of the RTL run. - * - * @param dest A pointer to where the reordered text is to be copied. - * src[srcLength] and dest[destSize] - * must not overlap. - * - * @param destSize The size of the dest buffer, - * in number of UChars. - * If the UBIDI_REMOVE_BIDI_CONTROLS option - * is set, then the destination length may be less than - * srcLength. - * If this option is not set, then the destination length - * will be exactly srcLength. - * - * @param options A bit set of options for the reordering that control - * how the reordered text is written. - * See the options parameter in ubidi_writeReordered(). - * - * @param pErrorCode must be a valid pointer to an error code value. - * - * @return The length of the output string. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ubidi_writeReverse(const UChar *src, int32_t srcLength, - UChar *dest, int32_t destSize, - uint16_t options, - UErrorCode *pErrorCode); - -/*#define BIDI_SAMPLE_CODE*/ -/*@}*/ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ubiditransform.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ubiditransform.h deleted file mode 100644 index 7c58f768f3..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ubiditransform.h +++ /dev/null @@ -1,323 +0,0 @@ -/* -****************************************************************************** -* -* © 2016 and later: Unicode, Inc. and others. -* License & terms of use: http://www.unicode.org/copyright.html -* -****************************************************************************** -* file name: ubiditransform.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2016jul24 -* created by: Lina Kemmel -* -*/ - -#ifndef UBIDITRANSFORM_H -#define UBIDITRANSFORM_H - -#include "unicode/utypes.h" -#include "unicode/ubidi.h" -#include "unicode/uchar.h" -#include "unicode/localpointer.h" - -/** - * \file - * \brief Bidi Transformations - */ - -/** - * `UBiDiOrder` indicates the order of text. - * - * This bidi transformation engine supports all possible combinations (4 in - * total) of input and output text order: - * - * - : unless the output direction is RTL, this - * corresponds to a normal operation of the Bidi algorithm as described in the - * Unicode Technical Report and implemented by `UBiDi` when the - * reordering mode is set to `UBIDI_REORDER_DEFAULT`. Visual RTL - * mode is not supported by `UBiDi` and is accomplished through - * reversing a visual LTR string, - * - * - : unless the input direction is RTL, this - * corresponds to an "inverse bidi algorithm" in `UBiDi` with the - * reordering mode set to `UBIDI_REORDER_INVERSE_LIKE_DIRECT`. - * Visual RTL mode is not not supported by `UBiDi` and is - * accomplished through reversing a visual LTR string, - * - * - : if the input and output base directions - * mismatch, this corresponds to the `UBiDi` implementation with the - * reordering mode set to `UBIDI_REORDER_RUNS_ONLY`; and if the - * input and output base directions are identical, the transformation engine - * will only handle character mirroring and Arabic shaping operations without - * reordering, - * - * - : this reordering mode is not supported by - * the `UBiDi` engine; it implies character mirroring, Arabic - * shaping, and - if the input/output base directions mismatch - string - * reverse operations. - * @see ubidi_setInverse - * @see ubidi_setReorderingMode - * @see UBIDI_REORDER_DEFAULT - * @see UBIDI_REORDER_INVERSE_LIKE_DIRECT - * @see UBIDI_REORDER_RUNS_ONLY - * @stable ICU 58 - */ -typedef enum { - /** 0: Constant indicating a logical order. - * This is the default for input text. - * @stable ICU 58 - */ - UBIDI_LOGICAL = 0, - /** 1: Constant indicating a visual order. - * This is a default for output text. - * @stable ICU 58 - */ - UBIDI_VISUAL -} UBiDiOrder; - -/** - * UBiDiMirroring indicates whether or not characters with the - * "mirrored" property in RTL runs should be replaced with their mirror-image - * counterparts. - * @see UBIDI_DO_MIRRORING - * @see ubidi_setReorderingOptions - * @see ubidi_writeReordered - * @see ubidi_writeReverse - * @stable ICU 58 - */ -typedef enum { - /** 0: Constant indicating that character mirroring should not be - * performed. - * This is the default. - * @stable ICU 58 - */ - UBIDI_MIRRORING_OFF = 0, - /** 1: Constant indicating that character mirroring should be performed. - * This corresponds to calling ubidi_writeReordered or - * ubidi_writeReverse with the - * UBIDI_DO_MIRRORING option bit set. - * @stable ICU 58 - */ - UBIDI_MIRRORING_ON -} UBiDiMirroring; - -/** - * Forward declaration of the UBiDiTransform structure that stores - * information used by the layout transformation engine. - * @stable ICU 58 - */ -typedef struct UBiDiTransform UBiDiTransform; - -/** - * Performs transformation of text from the bidi layout defined by the input - * ordering scheme to the bidi layout defined by the output ordering scheme, - * and applies character mirroring and Arabic shaping operations.

- * In terms of UBiDi, such a transformation implies: - *

    - *
  • calling ubidi_setReorderingMode as needed (when the - * reordering mode is other than normal),
  • - *
  • calling ubidi_setInverse as needed (when text should be - * transformed from a visual to a logical form),
  • - *
  • resolving embedding levels of each character in the input text by - * calling ubidi_setPara,
  • - *
  • reordering the characters based on the computed embedding levels, also - * performing character mirroring as needed, and streaming the result to the - * output, by calling ubidi_writeReordered,
  • - *
  • performing Arabic digit and letter shaping on the output text by calling - * u_shapeArabic.
  • - *
- * An "ordering scheme" encompasses the base direction and the order of text, - * and these characteristics must be defined by the caller for both input and - * output explicitly .

- * There are 36 possible combinations of ordering schemes, - * which are partially supported by UBiDi already. Examples of the - * currently supported combinations: - *

    - *
  • : this is equivalent to calling - * ubidi_setPara with paraLevel == UBIDI_LTR,
  • - *
  • : this is equivalent to calling - * ubidi_setPara with paraLevel == UBIDI_RTL,
  • - *
  • : this is equivalent to - * calling ubidi_setPara with - * paraLevel == UBIDI_DEFAULT_LTR,
  • - *
  • : this is equivalent to - * calling ubidi_setPara with - * paraLevel == UBIDI_DEFAULT_RTL,
  • - *
  • : this is equivalent to - * calling ubidi_setInverse(UBiDi*, TRUE) and then - * ubidi_setPara with paraLevel == UBIDI_LTR,
  • - *
  • : this is equivalent to - * calling ubidi_setInverse(UBiDi*, TRUE) and then - * ubidi_setPara with paraLevel == UBIDI_RTL.
  • - *
- * All combinations that involve the Visual RTL scheme are unsupported by - * UBiDi, for instance: - *
    - *
  • ,
  • - *
  • .
  • - *
- *

Example of usage of the transformation engine:
- *

- * \code
- * UChar text1[] = {'a', 'b', 'c', 0x0625, '1', 0};
- * UChar text2[] = {'a', 'b', 'c', 0x0625, '1', 0};
- * UErrorCode errorCode = U_ZERO_ERROR;
- * // Run a transformation.
- * ubiditransform_transform(pBidiTransform,
- *          text1, -1, text2, -1,
- *          UBIDI_LTR, UBIDI_VISUAL,
- *          UBIDI_RTL, UBIDI_LOGICAL,
- *          UBIDI_MIRRORING_OFF,
- *          U_SHAPE_DIGITS_AN2EN | U_SHAPE_DIGIT_TYPE_AN_EXTENDED,
- *          &errorCode);
- * // Do something with text2.
- *  text2[4] = '2';
- * // Run a reverse transformation.
- * ubiditransform_transform(pBidiTransform,
- *          text2, -1, text1, -1,
- *          UBIDI_RTL, UBIDI_LOGICAL,
- *          UBIDI_LTR, UBIDI_VISUAL,
- *          UBIDI_MIRRORING_OFF,
- *          U_SHAPE_DIGITS_EN2AN | U_SHAPE_DIGIT_TYPE_AN_EXTENDED,
- *          &errorCode);
- *\endcode
- * 
- *

- * - * @param pBiDiTransform A pointer to a UBiDiTransform object - * allocated with ubiditransform_open() or - * NULL.

- * This object serves for one-time setup to amortize initialization - * overheads. Use of this object is not thread-safe. All other threads - * should allocate a new UBiDiTransform object by calling - * ubiditransform_open() before using it. Alternatively, - * a caller can set this parameter to NULL, in which case - * the object will be allocated by the engine on the fly.

- * @param src A pointer to the text that the Bidi layout transformations will - * be performed on. - *

Note: the text must be (at least) - * srcLength long.

- * @param srcLength The length of the text, in number of UChars. If - * length == -1 then the text must be zero-terminated. - * @param dest A pointer to where the processed text is to be copied. - * @param destSize The size of the dest buffer, in number of - * UChars. If the U_SHAPE_LETTERS_UNSHAPE option is set, - * then the destination length could be as large as - * srcLength * 2. Otherwise, the destination length will - * not exceed srcLength. If the caller reserves the last - * position for zero-termination, it should be excluded from - * destSize. - *

destSize == -1 is allowed and makes sense when - * dest was holds some meaningful value, e.g. that of - * src. In this case dest must be - * zero-terminated.

- * @param inParaLevel A base embedding level of the input as defined in - * ubidi_setPara documentation for the - * paraLevel parameter. - * @param inOrder An order of the input, which can be one of the - * UBiDiOrder values. - * @param outParaLevel A base embedding level of the output as defined in - * ubidi_setPara documentation for the - * paraLevel parameter. - * @param outOrder An order of the output, which can be one of the - * UBiDiOrder values. - * @param doMirroring Indicates whether or not to perform character mirroring, - * and can accept one of the UBiDiMirroring values. - * @param shapingOptions Arabic digit and letter shaping options defined in the - * ushape.h documentation. - *

Note: Direction indicator options are computed by - * the transformation engine based on the effective ordering schemes, so - * user-defined direction indicators will be ignored.

- * @param pErrorCode A pointer to an error code value. - * - * @return The destination length, i.e. the number of UChars written to - * dest. If the transformation fails, the return value - * will be 0 (and the error code will be written to - * pErrorCode). - * - * @see UBiDiLevel - * @see UBiDiOrder - * @see UBiDiMirroring - * @see ubidi_setPara - * @see u_shapeArabic - * @stable ICU 58 - */ -U_STABLE uint32_t U_EXPORT2 -ubiditransform_transform(UBiDiTransform *pBiDiTransform, - const UChar *src, int32_t srcLength, - UChar *dest, int32_t destSize, - UBiDiLevel inParaLevel, UBiDiOrder inOrder, - UBiDiLevel outParaLevel, UBiDiOrder outOrder, - UBiDiMirroring doMirroring, uint32_t shapingOptions, - UErrorCode *pErrorCode); - -/** - * Allocates a UBiDiTransform object. This object can be reused, - * e.g. with different ordering schemes, mirroring or shaping options.

- * Note:The object can only be reused in the same thread. - * All other threads should allocate a new UBiDiTransform object - * before using it.

- * Example of usage:

- *

- * \code
- * UErrorCode errorCode = U_ZERO_ERROR;
- * // Open a new UBiDiTransform.
- * UBiDiTransform* transform = ubiditransform_open(&errorCode);
- * // Run a transformation.
- * ubiditransform_transform(transform,
- *          text1, -1, text2, -1,
- *          UBIDI_RTL, UBIDI_LOGICAL,
- *          UBIDI_LTR, UBIDI_VISUAL,
- *          UBIDI_MIRRORING_ON,
- *          U_SHAPE_DIGITS_EN2AN,
- *          &errorCode);
- * // Do something with the output text and invoke another transformation using
- * //   that text as input.
- * ubiditransform_transform(transform,
- *          text2, -1, text3, -1,
- *          UBIDI_LTR, UBIDI_VISUAL,
- *          UBIDI_RTL, UBIDI_VISUAL,
- *          UBIDI_MIRRORING_ON,
- *          0, &errorCode);
- *\endcode
- * 
- *

- * The UBiDiTransform object must be deallocated by calling - * ubiditransform_close(). - * - * @return An empty UBiDiTransform object. - * @stable ICU 58 - */ -U_STABLE UBiDiTransform* U_EXPORT2 -ubiditransform_open(UErrorCode *pErrorCode); - -/** - * Deallocates the given UBiDiTransform object. - * @stable ICU 58 - */ -U_STABLE void U_EXPORT2 -ubiditransform_close(UBiDiTransform *pBidiTransform); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUBiDiTransformPointer - * "Smart pointer" class, closes a UBiDiTransform via ubiditransform_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 58 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUBiDiTransformPointer, UBiDiTransform, ubiditransform_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ubrk.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ubrk.h deleted file mode 100644 index 532083fc71..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ubrk.h +++ /dev/null @@ -1,661 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* Copyright (C) 1996-2015, International Business Machines Corporation and others. -* All Rights Reserved. -****************************************************************************** -*/ - -#ifndef UBRK_H -#define UBRK_H - -#include "unicode/utypes.h" -#include "unicode/uloc.h" -#include "unicode/utext.h" -#include "unicode/localpointer.h" - -/** - * A text-break iterator. - * For usage in C programs. - */ -#ifndef UBRK_TYPEDEF_UBREAK_ITERATOR -# define UBRK_TYPEDEF_UBREAK_ITERATOR - /** - * Opaque type representing an ICU Break iterator object. - * @stable ICU 2.0 - */ - typedef struct UBreakIterator UBreakIterator; -#endif - -#if !UCONFIG_NO_BREAK_ITERATION - -#include "unicode/parseerr.h" - -/** - * \file - * \brief C API: BreakIterator - * - *

BreakIterator C API

- * - * The BreakIterator C API defines methods for finding the location - * of boundaries in text. Pointer to a UBreakIterator maintain a - * current position and scan over text returning the index of characters - * where boundaries occur. - *

- * Line boundary analysis determines where a text string can be broken - * when line-wrapping. The mechanism correctly handles punctuation and - * hyphenated words. - *

- * Note: The locale keyword "lb" can be used to modify line break - * behavior according to the CSS level 3 line-break options, see - * . For example: - * "ja@lb=strict", "zh@lb=loose". - *

- * Sentence boundary analysis allows selection with correct - * interpretation of periods within numbers and abbreviations, and - * trailing punctuation marks such as quotation marks and parentheses. - *

- * Note: The locale keyword "ss" can be used to enable use of - * segmentation suppression data (preventing breaks in English after - * abbreviations such as "Mr." or "Est.", for example), as follows: - * "en@ss=standard". - *

- * Word boundary analysis is used by search and replace functions, as - * well as within text editing applications that allow the user to - * select words with a double click. Word selection provides correct - * interpretation of punctuation marks within and following - * words. Characters that are not part of a word, such as symbols or - * punctuation marks, have word-breaks on both sides. - *

- * Character boundary analysis identifies the boundaries of - * "Extended Grapheme Clusters", which are groupings of codepoints - * that should be treated as character-like units for many text operations. - * Please see Unicode Standard Annex #29, Unicode Text Segmentation, - * http://www.unicode.org/reports/tr29/ for additional information - * on grapheme clusters and guidelines on their use. - *

- * Title boundary analysis locates all positions, - * typically starts of words, that should be set to Title Case - * when title casing the text. - *

- * The text boundary positions are found according to the rules - * described in Unicode Standard Annex #29, Text Boundaries, and - * Unicode Standard Annex #14, Line Breaking Properties. These - * are available at http://www.unicode.org/reports/tr14/ and - * http://www.unicode.org/reports/tr29/. - *

- * In addition to the plain C API defined in this header file, an - * object oriented C++ API with equivalent functionality is defined in the - * file brkiter.h. - *

- * Code snippets illustrating the use of the Break Iterator APIs - * are available in the ICU User Guide, - * http://icu-project.org/userguide/boundaryAnalysis.html - * and in the sample program icu/source/samples/break/break.cpp - */ - -/** The possible types of text boundaries. @stable ICU 2.0 */ -typedef enum UBreakIteratorType { - /** Character breaks @stable ICU 2.0 */ - UBRK_CHARACTER = 0, - /** Word breaks @stable ICU 2.0 */ - UBRK_WORD = 1, - /** Line breaks @stable ICU 2.0 */ - UBRK_LINE = 2, - /** Sentence breaks @stable ICU 2.0 */ - UBRK_SENTENCE = 3, - -#ifndef U_HIDE_DEPRECATED_API - /** - * Title Case breaks - * The iterator created using this type locates title boundaries as described for - * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration, - * please use Word Boundary iterator. - * - * @deprecated ICU 2.8 Use the word break iterator for titlecasing for Unicode 4 and later. - */ - UBRK_TITLE = 4, - /** - * One more than the highest normal UBreakIteratorType value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UBRK_COUNT = 5 -#endif // U_HIDE_DEPRECATED_API -} UBreakIteratorType; - -/** Value indicating all text boundaries have been returned. - * @stable ICU 2.0 - */ -#define UBRK_DONE ((int32_t) -1) - - -/** - * Enum constants for the word break tags returned by - * getRuleStatus(). A range of values is defined for each category of - * word, to allow for further subdivisions of a category in future releases. - * Applications should check for tag values falling within the range, rather - * than for single individual values. - * - * The numeric values of all of these constants are stable (will not change). - * - * @stable ICU 2.2 -*/ -typedef enum UWordBreak { - /** Tag value for "words" that do not fit into any of other categories. - * Includes spaces and most punctuation. */ - UBRK_WORD_NONE = 0, - /** Upper bound for tags for uncategorized words. */ - UBRK_WORD_NONE_LIMIT = 100, - /** Tag value for words that appear to be numbers, lower limit. */ - UBRK_WORD_NUMBER = 100, - /** Tag value for words that appear to be numbers, upper limit. */ - UBRK_WORD_NUMBER_LIMIT = 200, - /** Tag value for words that contain letters, excluding - * hiragana, katakana or ideographic characters, lower limit. */ - UBRK_WORD_LETTER = 200, - /** Tag value for words containing letters, upper limit */ - UBRK_WORD_LETTER_LIMIT = 300, - /** Tag value for words containing kana characters, lower limit */ - UBRK_WORD_KANA = 300, - /** Tag value for words containing kana characters, upper limit */ - UBRK_WORD_KANA_LIMIT = 400, - /** Tag value for words containing ideographic characters, lower limit */ - UBRK_WORD_IDEO = 400, - /** Tag value for words containing ideographic characters, upper limit */ - UBRK_WORD_IDEO_LIMIT = 500 -} UWordBreak; - -/** - * Enum constants for the line break tags returned by getRuleStatus(). - * A range of values is defined for each category of - * word, to allow for further subdivisions of a category in future releases. - * Applications should check for tag values falling within the range, rather - * than for single individual values. - * - * The numeric values of all of these constants are stable (will not change). - * - * @stable ICU 2.8 -*/ -typedef enum ULineBreakTag { - /** Tag value for soft line breaks, positions at which a line break - * is acceptable but not required */ - UBRK_LINE_SOFT = 0, - /** Upper bound for soft line breaks. */ - UBRK_LINE_SOFT_LIMIT = 100, - /** Tag value for a hard, or mandatory line break */ - UBRK_LINE_HARD = 100, - /** Upper bound for hard line breaks. */ - UBRK_LINE_HARD_LIMIT = 200 -} ULineBreakTag; - - - -/** - * Enum constants for the sentence break tags returned by getRuleStatus(). - * A range of values is defined for each category of - * sentence, to allow for further subdivisions of a category in future releases. - * Applications should check for tag values falling within the range, rather - * than for single individual values. - * - * The numeric values of all of these constants are stable (will not change). - * - * @stable ICU 2.8 -*/ -typedef enum USentenceBreakTag { - /** Tag value for for sentences ending with a sentence terminator - * ('.', '?', '!', etc.) character, possibly followed by a - * hard separator (CR, LF, PS, etc.) - */ - UBRK_SENTENCE_TERM = 0, - /** Upper bound for tags for sentences ended by sentence terminators. */ - UBRK_SENTENCE_TERM_LIMIT = 100, - /** Tag value for for sentences that do not contain an ending - * sentence terminator ('.', '?', '!', etc.) character, but - * are ended only by a hard separator (CR, LF, PS, etc.) or end of input. - */ - UBRK_SENTENCE_SEP = 100, - /** Upper bound for tags for sentences ended by a separator. */ - UBRK_SENTENCE_SEP_LIMIT = 200 - /** Tag value for a hard, or mandatory line break */ -} USentenceBreakTag; - - -/** - * Masks to control line break word options (per the CSS word-break property). - * NORMAL allows breaks between CJK characters in the middle of words. Other masks - * prohibit breaks between characters of specific scripts (or all scripts) except as - * determined by a dictionary, or by spaces or other mechanisms (Western-style breaking). - * - * @internal Apple only -*/ -typedef enum ULineWordOptions { - /** Allow breaks between characters of all CJK scripts */ - UBRK_LINEWORD_NORMAL = 0, - /** Prevent breaks between Hangul characters, except as determined by a dictionary. */ - UBRK_LINEWORD_KEEP_HANGUL = 1, - /** Prevent breaks between characters of any script, except as determined by a dictionary. */ - UBRK_LINEWORD_KEEP_ALL = 0x7F -} ULineWordOptions; - - - -/** - * Open a new UBreakIterator for locating text boundaries for a specified locale. - * A UBreakIterator may be used for detecting character, line, word, - * and sentence breaks in text. - * @param type The type of UBreakIterator to open: one of UBRK_CHARACTER, UBRK_WORD, - * UBRK_LINE, UBRK_SENTENCE - * @param locale The locale specifying the text-breaking conventions. Note that - * locale keys such as "lb" and "ss" may be used to modify text break behavior, - * see general discussion of BreakIterator C API. - * @param text The text to be iterated over. May be null, in which case ubrk_setText() is - * used to specify the text to be iterated. - * @param textLength The number of characters in text, or -1 if null-terminated. - * @param status A UErrorCode to receive any errors. - * @return A UBreakIterator for the specified locale. - * @see ubrk_openRules - * @stable ICU 2.0 - */ -U_STABLE UBreakIterator* U_EXPORT2 -ubrk_open(UBreakIteratorType type, - const char *locale, - const UChar *text, - int32_t textLength, - UErrorCode *status); - -/** - * Open a new UBreakIterator for locating text boundaries using specified breaking rules. - * The rule syntax is ... (TBD) - * @param rules A set of rules specifying the text breaking conventions. - * @param rulesLength The number of characters in rules, or -1 if null-terminated. - * @param text The text to be iterated over. May be null, in which case ubrk_setText() is - * used to specify the text to be iterated. - * @param textLength The number of characters in text, or -1 if null-terminated. - * @param parseErr Receives position and context information for any syntax errors - * detected while parsing the rules. - * @param status A UErrorCode to receive any errors. - * @return A UBreakIterator for the specified rules. - * @see ubrk_open - * @stable ICU 2.2 - */ -U_STABLE UBreakIterator* U_EXPORT2 -ubrk_openRules(const UChar *rules, - int32_t rulesLength, - const UChar *text, - int32_t textLength, - UParseError *parseErr, - UErrorCode *status); - -/** - * Open a new UBreakIterator for locating text boundaries using precompiled binary rules. - * Opening a UBreakIterator this way is substantially faster than using ubrk_openRules. - * Binary rules may be obtained using ubrk_getBinaryRules. The compiled rules are not - * compatible across different major versions of ICU, nor across platforms of different - * endianness or different base character set family (ASCII vs EBCDIC). - * @param binaryRules A set of compiled binary rules specifying the text breaking - * conventions. Ownership of the storage containing the compiled - * rules remains with the caller of this function. The compiled - * rules must not be modified or deleted during the life of the - * break iterator. - * @param rulesLength The length of binaryRules in bytes; must be >= 0. - * @param text The text to be iterated over. May be null, in which case - * ubrk_setText() is used to specify the text to be iterated. - * @param textLength The number of characters in text, or -1 if null-terminated. - * @param status Pointer to UErrorCode to receive any errors. - * @return UBreakIterator for the specified rules. - * @see ubrk_getBinaryRules - * @stable ICU 59 - */ -U_STABLE UBreakIterator* U_EXPORT2 -ubrk_openBinaryRules(const uint8_t *binaryRules, int32_t rulesLength, - const UChar * text, int32_t textLength, - UErrorCode * status); - -/** - * Thread safe cloning operation - * @param bi iterator to be cloned - * @param stackBuffer Deprecated functionality as of ICU 52, use NULL.
- * user allocated space for the new clone. If NULL new memory will be allocated. - * If buffer is not large enough, new memory will be allocated. - * Clients can use the U_BRK_SAFECLONE_BUFFERSIZE. - * @param pBufferSize Deprecated functionality as of ICU 52, use NULL or 1.
- * pointer to size of allocated space. - * If *pBufferSize == 0, a sufficient size for use in cloning will - * be returned ('pre-flighting') - * If *pBufferSize is not enough for a stack-based safe clone, - * new memory will be allocated. - * @param status to indicate whether the operation went on smoothly or there were errors - * An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used if any allocations were necessary. - * @return pointer to the new clone - * @stable ICU 2.0 - */ -U_STABLE UBreakIterator * U_EXPORT2 -ubrk_safeClone( - const UBreakIterator *bi, - void *stackBuffer, - int32_t *pBufferSize, - UErrorCode *status); - -#ifndef U_HIDE_DEPRECATED_API - -/** - * A recommended size (in bytes) for the memory buffer to be passed to ubrk_saveClone(). - * @deprecated ICU 52. Do not rely on ubrk_safeClone() cloning into any provided buffer. - */ -#define U_BRK_SAFECLONE_BUFFERSIZE 1 - -#endif /* U_HIDE_DEPRECATED_API */ - -/** -* Close a UBreakIterator. -* Once closed, a UBreakIterator may no longer be used. -* @param bi The break iterator to close. - * @stable ICU 2.0 -*/ -U_STABLE void U_EXPORT2 -ubrk_close(UBreakIterator *bi); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUBreakIteratorPointer - * "Smart pointer" class, closes a UBreakIterator via ubrk_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUBreakIteratorPointer, UBreakIterator, ubrk_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -#ifndef U_HIDE_INTERNAL_API -/** - * Set the ULineWordOptions for the specified break iterator. - * - * @param bi The iterator to use - * @param lineWordOpts The ULineWordOptions to set. - * @internal Apple only - */ -U_INTERNAL void U_EXPORT2 -ubrk_setLineWordOpts(UBreakIterator* bi, - ULineWordOptions lineWordOpts); - -#endif /* U_HIDE_INTERNAL_API */ - -/** - * Sets an existing iterator to point to a new piece of text. - * The break iterator retains a pointer to the supplied text. - * The caller must not modify or delete the text while the BreakIterator - * retains the reference. - * - * @param bi The iterator to use - * @param text The text to be set - * @param textLength The length of the text - * @param status The error code - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ubrk_setText(UBreakIterator* bi, - const UChar* text, - int32_t textLength, - UErrorCode* status); - - -/** - * Sets an existing iterator to point to a new piece of text. - * - * All index positions returned by break iterator functions are - * native indices from the UText. For example, when breaking UTF-8 - * encoded text, the break positions returned by \ref ubrk_next, \ref ubrk_previous, etc. - * will be UTF-8 string indices, not UTF-16 positions. - * - * @param bi The iterator to use - * @param text The text to be set. - * This function makes a shallow clone of the supplied UText. This means - * that the caller is free to immediately close or otherwise reuse the - * UText that was passed as a parameter, but that the underlying text itself - * must not be altered while being referenced by the break iterator. - * @param status The error code - * @stable ICU 3.4 - */ -U_STABLE void U_EXPORT2 -ubrk_setUText(UBreakIterator* bi, - UText* text, - UErrorCode* status); - - - -/** - * Determine the most recently-returned text boundary. - * - * @param bi The break iterator to use. - * @return The character index most recently returned by \ref ubrk_next, \ref ubrk_previous, - * \ref ubrk_first, or \ref ubrk_last. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ubrk_current(const UBreakIterator *bi); - -/** - * Advance the iterator to the boundary following the current boundary. - * - * @param bi The break iterator to use. - * @return The character index of the next text boundary, or UBRK_DONE - * if all text boundaries have been returned. - * @see ubrk_previous - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ubrk_next(UBreakIterator *bi); - -/** - * Set the iterator position to the boundary preceding the current boundary. - * - * @param bi The break iterator to use. - * @return The character index of the preceding text boundary, or UBRK_DONE - * if all text boundaries have been returned. - * @see ubrk_next - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ubrk_previous(UBreakIterator *bi); - -/** - * Set the iterator position to zero, the start of the text being scanned. - * @param bi The break iterator to use. - * @return The new iterator position (zero). - * @see ubrk_last - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ubrk_first(UBreakIterator *bi); - -/** - * Set the iterator position to the index immediately beyond the last character in the text being scanned. - * This is not the same as the last character. - * @param bi The break iterator to use. - * @return The character offset immediately beyond the last character in the - * text being scanned. - * @see ubrk_first - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ubrk_last(UBreakIterator *bi); - -/** - * Set the iterator position to the first boundary preceding the specified offset. - * The new position is always smaller than offset, or UBRK_DONE. - * @param bi The break iterator to use. - * @param offset The offset to begin scanning. - * @return The text boundary preceding offset, or UBRK_DONE. - * @see ubrk_following - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ubrk_preceding(UBreakIterator *bi, - int32_t offset); - -/** - * Advance the iterator to the first boundary following the specified offset. - * The value returned is always greater than offset, or UBRK_DONE. - * @param bi The break iterator to use. - * @param offset The offset to begin scanning. - * @return The text boundary following offset, or UBRK_DONE. - * @see ubrk_preceding - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ubrk_following(UBreakIterator *bi, - int32_t offset); - -/** -* Get a locale for which text breaking information is available. -* A UBreakIterator in a locale returned by this function will perform the correct -* text breaking for the locale. -* @param index The index of the desired locale. -* @return A locale for which number text breaking information is available, or 0 if none. -* @see ubrk_countAvailable -* @stable ICU 2.0 -*/ -U_STABLE const char* U_EXPORT2 -ubrk_getAvailable(int32_t index); - -/** -* Determine how many locales have text breaking information available. -* This function is most useful as determining the loop ending condition for -* calls to \ref ubrk_getAvailable. -* @return The number of locales for which text breaking information is available. -* @see ubrk_getAvailable -* @stable ICU 2.0 -*/ -U_STABLE int32_t U_EXPORT2 -ubrk_countAvailable(void); - - -/** -* Returns true if the specified position is a boundary position. As a side -* effect, leaves the iterator pointing to the first boundary position at -* or after "offset". -* @param bi The break iterator to use. -* @param offset the offset to check. -* @return True if "offset" is a boundary position. -* @stable ICU 2.0 -*/ -U_STABLE UBool U_EXPORT2 -ubrk_isBoundary(UBreakIterator *bi, int32_t offset); - -/** - * Return the status from the break rule that determined the most recently - * returned break position. The values appear in the rule source - * within brackets, {123}, for example. For rules that do not specify a - * status, a default value of 0 is returned. - *

- * For word break iterators, the possible values are defined in enum UWordBreak. - * @stable ICU 2.2 - */ -U_STABLE int32_t U_EXPORT2 -ubrk_getRuleStatus(UBreakIterator *bi); - -/** - * Get the statuses from the break rules that determined the most recently - * returned break position. The values appear in the rule source - * within brackets, {123}, for example. The default status value for rules - * that do not explicitly provide one is zero. - *

- * For word break iterators, the possible values are defined in enum UWordBreak. - * @param bi The break iterator to use - * @param fillInVec an array to be filled in with the status values. - * @param capacity the length of the supplied vector. A length of zero causes - * the function to return the number of status values, in the - * normal way, without attempting to store any values. - * @param status receives error codes. - * @return The number of rule status values from rules that determined - * the most recent boundary returned by the break iterator. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -ubrk_getRuleStatusVec(UBreakIterator *bi, int32_t *fillInVec, int32_t capacity, UErrorCode *status); - -/** - * Return the locale of the break iterator. You can choose between the valid and - * the actual locale. - * @param bi break iterator - * @param type locale type (valid or actual) - * @param status error code - * @return locale string - * @stable ICU 2.8 - */ -U_STABLE const char* U_EXPORT2 -ubrk_getLocaleByType(const UBreakIterator *bi, ULocDataLocaleType type, UErrorCode* status); - -/** - * Set the subject text string upon which the break iterator is operating - * without changing any other aspect of the state. - * The new and previous text strings must have the same content. - * - * This function is intended for use in environments where ICU is operating on - * strings that may move around in memory. It provides a mechanism for notifying - * ICU that the string has been relocated, and providing a new UText to access the - * string in its new position. - * - * Note that the break iterator never copies the underlying text - * of a string being processed, but always operates directly on the original text - * provided by the user. Refreshing simply drops the references to the old text - * and replaces them with references to the new. - * - * Caution: this function is normally used only by very specialized - * system-level code. One example use case is with garbage collection - * that moves the text in memory. - * - * @param bi The break iterator. - * @param text The new (moved) text string. - * @param status Receives errors detected by this function. - * - * @stable ICU 49 - */ -U_STABLE void U_EXPORT2 -ubrk_refreshUText(UBreakIterator *bi, - UText *text, - UErrorCode *status); - - -/** - * Get a compiled binary version of the rules specifying the behavior of a UBreakIterator. - * The binary rules may be used with ubrk_openBinaryRules to open a new UBreakIterator - * more quickly than using ubrk_openRules. The compiled rules are not compatible across - * different major versions of ICU, nor across platforms of different endianness or - * different base character set family (ASCII vs EBCDIC). Supports preflighting (with - * binaryRules=NULL and rulesCapacity=0) to get the rules length without copying them to - * the binaryRules buffer. However, whether preflighting or not, if the actual length - * is greater than INT32_MAX, then the function returns 0 and sets *status to - * U_INDEX_OUTOFBOUNDS_ERROR. - - * @param bi The break iterator to use. - * @param binaryRules Buffer to receive the compiled binary rules; set to NULL for - * preflighting. - * @param rulesCapacity Capacity (in bytes) of the binaryRules buffer; set to 0 for - * preflighting. Must be >= 0. - * @param status Pointer to UErrorCode to receive any errors, such as - * U_BUFFER_OVERFLOW_ERROR, U_INDEX_OUTOFBOUNDS_ERROR, or - * U_ILLEGAL_ARGUMENT_ERROR. - * @return The actual byte length of the binary rules, if <= INT32_MAX; - * otherwise 0. If not preflighting and this is larger than - * rulesCapacity, *status will be set to an error. - * @see ubrk_openBinaryRules - * @stable ICU 59 - */ -U_STABLE int32_t U_EXPORT2 -ubrk_getBinaryRules(UBreakIterator *bi, - uint8_t * binaryRules, int32_t rulesCapacity, - UErrorCode * status); - -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucal.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucal.h deleted file mode 100644 index 5e3c53fe91..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucal.h +++ /dev/null @@ -1,1637 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * Copyright (C) 1996-2015, International Business Machines Corporation and - * others. All Rights Reserved. - ******************************************************************************* - */ - -#ifndef UCAL_H -#define UCAL_H - -#include "unicode/utypes.h" -#include "unicode/uenum.h" -#include "unicode/uloc.h" -#include "unicode/localpointer.h" - -#if !UCONFIG_NO_FORMATTING - -/** - * \file - * \brief C API: Calendar - * - *

Calendar C API

- * - * UCalendar C API is used for converting between a UDate object - * and a set of integer fields such as UCAL_YEAR, UCAL_MONTH, - * UCAL_DAY, UCAL_HOUR, and so on. - * (A UDate object represents a specific instant in - * time with millisecond precision. See UDate - * for information about the UDate .) - * - *

- * Types of UCalendar interpret a UDate - * according to the rules of a specific calendar system. The U_STABLE - * provides the enum UCalendarType with UCAL_TRADITIONAL and - * UCAL_GREGORIAN. - *

- * Like other locale-sensitive C API, calendar API provides a - * function, ucal_open(), which returns a pointer to - * UCalendar whose time fields have been initialized - * with the current date and time. We need to specify the type of - * calendar to be opened and the timezoneId. - * \htmlonly

\endhtmlonly - *
- * \code
- * UCalendar *caldef;
- * UChar *tzId;
- * UErrorCode status;
- * tzId=(UChar*)malloc(sizeof(UChar) * (strlen("PST") +1) );
- * u_uastrcpy(tzId, "PST");
- * caldef=ucal_open(tzID, u_strlen(tzID), NULL, UCAL_TRADITIONAL, &status);
- * \endcode
- * 
- * \htmlonly
\endhtmlonly - * - *

- * A UCalendar object can produce all the time field values - * needed to implement the date-time formatting for a particular language - * and calendar style (for example, Japanese-Gregorian, Japanese-Traditional). - * - *

- * When computing a UDate from time fields, two special circumstances - * may arise: there may be insufficient information to compute the - * UDate (such as only year and month but no day in the month), - * or there may be inconsistent information (such as "Tuesday, July 15, 1996" - * -- July 15, 1996 is actually a Monday). - * - *

- * Insufficient information. The calendar will use default - * information to specify the missing fields. This may vary by calendar; for - * the Gregorian calendar, the default for a field is the same as that of the - * start of the epoch: i.e., UCAL_YEAR = 1970, UCAL_MONTH = JANUARY, UCAL_DATE = 1, etc. - * - *

- * Inconsistent information. If fields conflict, the calendar - * will give preference to fields set more recently. For example, when - * determining the day, the calendar will look for one of the following - * combinations of fields. The most recent combination, as determined by the - * most recently set single field, will be used. - * - * \htmlonly

\endhtmlonly - *
- * \code
- * UCAL_MONTH + UCAL_DAY_OF_MONTH
- * UCAL_MONTH + UCAL_WEEK_OF_MONTH + UCAL_DAY_OF_WEEK
- * UCAL_MONTH + UCAL_DAY_OF_WEEK_IN_MONTH + UCAL_DAY_OF_WEEK
- * UCAL_DAY_OF_YEAR
- * UCAL_DAY_OF_WEEK + UCAL_WEEK_OF_YEAR
- * \endcode
- * 
- * \htmlonly
\endhtmlonly - * - * For the time of day: - * - * \htmlonly
\endhtmlonly - *
- * \code
- * UCAL_HOUR_OF_DAY
- * UCAL_AM_PM + UCAL_HOUR
- * \endcode
- * 
- * \htmlonly
\endhtmlonly - * - *

- * Note: for some non-Gregorian calendars, different - * fields may be necessary for complete disambiguation. For example, a full - * specification of the historical Arabic astronomical calendar requires year, - * month, day-of-month and day-of-week in some cases. - * - *

- * Note: There are certain possible ambiguities in - * interpretation of certain singular times, which are resolved in the - * following ways: - *

    - *
  1. 24:00:00 "belongs" to the following day. That is, - * 23:59 on Dec 31, 1969 < 24:00 on Jan 1, 1970 < 24:01:00 on Jan 1, 1970 - * - *
  2. Although historically not precise, midnight also belongs to "am", - * and noon belongs to "pm", so on the same day, - * 12:00 am (midnight) < 12:01 am, and 12:00 pm (noon) < 12:01 pm - *
- * - *

- * The date or time format strings are not part of the definition of a - * calendar, as those must be modifiable or overridable by the user at - * runtime. Use {@link icu::DateFormat} - * to format dates. - * - *

- * Calendar provides an API for field "rolling", where fields - * can be incremented or decremented, but wrap around. For example, rolling the - * month up in the date December 12, 1996 results in - * January 12, 1996. - * - *

- * Calendar also provides a date arithmetic function for - * adding the specified (signed) amount of time to a particular time field. - * For example, subtracting 5 days from the date September 12, 1996 - * results in September 7, 1996. - * - *

- * The Japanese calendar uses a combination of era name and year number. - * When an emperor of Japan abdicates and a new emperor ascends the throne, - * a new era is declared and year number is reset to 1. Even if the date of - * abdication is scheduled ahead of time, the new era name might not be - * announced until just before the date. In such case, ICU4C may include - * a start date of future era without actual era name, but not enabled - * by default. ICU4C users who want to test the behavior of the future era - * can enable the tentative era by: - *

    - *
  • Environment variable ICU_ENABLE_TENTATIVE_ERA=true.
  • - *
- * - * @stable ICU 2.0 - */ - -/** - * The time zone ID reserved for unknown time zone. - * It behaves like the GMT/UTC time zone but has the special ID "Etc/Unknown". - * @stable ICU 4.8 - */ -#define UCAL_UNKNOWN_ZONE_ID "Etc/Unknown" - -/** A calendar. - * For usage in C programs. - * @stable ICU 2.0 - */ -typedef void* UCalendar; - -/** Possible types of UCalendars - * @stable ICU 2.0 - */ -enum UCalendarType { - /** - * Despite the name, UCAL_TRADITIONAL designates the locale's default calendar, - * which may be the Gregorian calendar or some other calendar. - * @stable ICU 2.0 - */ - UCAL_TRADITIONAL, - /** - * A better name for UCAL_TRADITIONAL. - * @stable ICU 4.2 - */ - UCAL_DEFAULT = UCAL_TRADITIONAL, - /** - * Unambiguously designates the Gregorian calendar for the locale. - * @stable ICU 2.0 - */ - UCAL_GREGORIAN -}; - -/** @stable ICU 2.0 */ -typedef enum UCalendarType UCalendarType; - -/** Possible fields in a UCalendar - * @stable ICU 2.0 - */ -enum UCalendarDateFields { - /** - * Field number indicating the era, e.g., AD or BC in the Gregorian (Julian) calendar. - * This is a calendar-specific value. - * @stable ICU 2.6 - */ - UCAL_ERA, - - /** - * Field number indicating the year. This is a calendar-specific value. - * @stable ICU 2.6 - */ - UCAL_YEAR, - - /** - * Field number indicating the month. This is a calendar-specific value. - * The first month of the year is - * JANUARY; the last depends on the number of months in a year. - * @see #UCAL_JANUARY - * @see #UCAL_FEBRUARY - * @see #UCAL_MARCH - * @see #UCAL_APRIL - * @see #UCAL_MAY - * @see #UCAL_JUNE - * @see #UCAL_JULY - * @see #UCAL_AUGUST - * @see #UCAL_SEPTEMBER - * @see #UCAL_OCTOBER - * @see #UCAL_NOVEMBER - * @see #UCAL_DECEMBER - * @see #UCAL_UNDECIMBER - * @stable ICU 2.6 - */ - UCAL_MONTH, - - /** - * Field number indicating the - * week number within the current year. The first week of the year, as - * defined by UCAL_FIRST_DAY_OF_WEEK and UCAL_MINIMAL_DAYS_IN_FIRST_WEEK - * attributes, has value 1. Subclasses define - * the value of UCAL_WEEK_OF_YEAR for days before the first week of - * the year. - * @see ucal_getAttribute - * @see ucal_setAttribute - * @stable ICU 2.6 - */ - UCAL_WEEK_OF_YEAR, - - /** - * Field number indicating the - * week number within the current month. The first week of the month, as - * defined by UCAL_FIRST_DAY_OF_WEEK and UCAL_MINIMAL_DAYS_IN_FIRST_WEEK - * attributes, has value 1. Subclasses define - * the value of WEEK_OF_MONTH for days before the first week of - * the month. - * @see ucal_getAttribute - * @see ucal_setAttribute - * @see #UCAL_FIRST_DAY_OF_WEEK - * @see #UCAL_MINIMAL_DAYS_IN_FIRST_WEEK - * @stable ICU 2.6 - */ - UCAL_WEEK_OF_MONTH, - - /** - * Field number indicating the - * day of the month. This is a synonym for DAY_OF_MONTH. - * The first day of the month has value 1. - * @see #UCAL_DAY_OF_MONTH - * @stable ICU 2.6 - */ - UCAL_DATE, - - /** - * Field number indicating the day - * number within the current year. The first day of the year has value 1. - * @stable ICU 2.6 - */ - UCAL_DAY_OF_YEAR, - - /** - * Field number indicating the day - * of the week. This field takes values SUNDAY, - * MONDAY, TUESDAY, WEDNESDAY, - * THURSDAY, FRIDAY, and SATURDAY. - * @see #UCAL_SUNDAY - * @see #UCAL_MONDAY - * @see #UCAL_TUESDAY - * @see #UCAL_WEDNESDAY - * @see #UCAL_THURSDAY - * @see #UCAL_FRIDAY - * @see #UCAL_SATURDAY - * @stable ICU 2.6 - */ - UCAL_DAY_OF_WEEK, - - /** - * Field number indicating the - * ordinal number of the day of the week within the current month. Together - * with the DAY_OF_WEEK field, this uniquely specifies a day - * within a month. Unlike WEEK_OF_MONTH and - * WEEK_OF_YEAR, this field's value does not depend on - * getFirstDayOfWeek() or - * getMinimalDaysInFirstWeek(). DAY_OF_MONTH 1 - * through 7 always correspond to DAY_OF_WEEK_IN_MONTH - * 1; 8 through 15 correspond to - * DAY_OF_WEEK_IN_MONTH 2, and so on. - * DAY_OF_WEEK_IN_MONTH 0 indicates the week before - * DAY_OF_WEEK_IN_MONTH 1. Negative values count back from the - * end of the month, so the last Sunday of a month is specified as - * DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1. Because - * negative values count backward they will usually be aligned differently - * within the month than positive values. For example, if a month has 31 - * days, DAY_OF_WEEK_IN_MONTH -1 will overlap - * DAY_OF_WEEK_IN_MONTH 5 and the end of 4. - * @see #UCAL_DAY_OF_WEEK - * @see #UCAL_WEEK_OF_MONTH - * @stable ICU 2.6 - */ - UCAL_DAY_OF_WEEK_IN_MONTH, - - /** - * Field number indicating - * whether the HOUR is before or after noon. - * E.g., at 10:04:15.250 PM the AM_PM is PM. - * @see #UCAL_AM - * @see #UCAL_PM - * @see #UCAL_HOUR - * @stable ICU 2.6 - */ - UCAL_AM_PM, - - /** - * Field number indicating the - * hour of the morning or afternoon. HOUR is used for the 12-hour - * clock. - * E.g., at 10:04:15.250 PM the HOUR is 10. - * @see #UCAL_AM_PM - * @see #UCAL_HOUR_OF_DAY - * @stable ICU 2.6 - */ - UCAL_HOUR, - - /** - * Field number indicating the - * hour of the day. HOUR_OF_DAY is used for the 24-hour clock. - * E.g., at 10:04:15.250 PM the HOUR_OF_DAY is 22. - * @see #UCAL_HOUR - * @stable ICU 2.6 - */ - UCAL_HOUR_OF_DAY, - - /** - * Field number indicating the - * minute within the hour. - * E.g., at 10:04:15.250 PM the UCAL_MINUTE is 4. - * @stable ICU 2.6 - */ - UCAL_MINUTE, - - /** - * Field number indicating the - * second within the minute. - * E.g., at 10:04:15.250 PM the UCAL_SECOND is 15. - * @stable ICU 2.6 - */ - UCAL_SECOND, - - /** - * Field number indicating the - * millisecond within the second. - * E.g., at 10:04:15.250 PM the UCAL_MILLISECOND is 250. - * @stable ICU 2.6 - */ - UCAL_MILLISECOND, - - /** - * Field number indicating the - * raw offset from GMT in milliseconds. - * @stable ICU 2.6 - */ - UCAL_ZONE_OFFSET, - - /** - * Field number indicating the - * daylight savings offset in milliseconds. - * @stable ICU 2.6 - */ - UCAL_DST_OFFSET, - - /** - * Field number - * indicating the extended year corresponding to the - * UCAL_WEEK_OF_YEAR field. This may be one greater or less - * than the value of UCAL_EXTENDED_YEAR. - * @stable ICU 2.6 - */ - UCAL_YEAR_WOY, - - /** - * Field number - * indicating the localized day of week. This will be a value from 1 - * to 7 inclusive, with 1 being the localized first day of the week. - * @stable ICU 2.6 - */ - UCAL_DOW_LOCAL, - - /** - * Year of this calendar system, encompassing all supra-year fields. For example, - * in Gregorian/Julian calendars, positive Extended Year values indicate years AD, - * 1 BC = 0 extended, 2 BC = -1 extended, and so on. - * @stable ICU 2.8 - */ - UCAL_EXTENDED_YEAR, - - /** - * Field number - * indicating the modified Julian day number. This is different from - * the conventional Julian day number in two regards. First, it - * demarcates days at local zone midnight, rather than noon GMT. - * Second, it is a local number; that is, it depends on the local time - * zone. It can be thought of as a single number that encompasses all - * the date-related fields. - * @stable ICU 2.8 - */ - UCAL_JULIAN_DAY, - - /** - * Ranges from 0 to 23:59:59.999 (regardless of DST). This field behaves exactly - * like a composite of all time-related fields, not including the zone fields. As such, - * it also reflects discontinuities of those fields on DST transition days. On a day - * of DST onset, it will jump forward. On a day of DST cessation, it will jump - * backward. This reflects the fact that it must be combined with the DST_OFFSET field - * to obtain a unique local time value. - * @stable ICU 2.8 - */ - UCAL_MILLISECONDS_IN_DAY, - - /** - * Whether or not the current month is a leap month (0 or 1). See the Chinese calendar for - * an example of this. - */ - UCAL_IS_LEAP_MONTH, - - /* Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API, - * it is needed for layout of Calendar, DateFormat, and other objects */ - /** - * One more than the highest normal UCalendarDateFields value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UCAL_FIELD_COUNT, - - /** - * Field number indicating the - * day of the month. This is a synonym for UCAL_DATE. - * The first day of the month has value 1. - * @see #UCAL_DATE - * Synonym for UCAL_DATE - * @stable ICU 2.8 - **/ - UCAL_DAY_OF_MONTH=UCAL_DATE -}; - -/** @stable ICU 2.0 */ -typedef enum UCalendarDateFields UCalendarDateFields; - /** - * Useful constant for days of week. Note: Calendar day-of-week is 1-based. Clients - * who create locale resources for the field of first-day-of-week should be aware of - * this. For instance, in US locale, first-day-of-week is set to 1, i.e., UCAL_SUNDAY. - */ -/** Possible days of the week in a UCalendar - * @stable ICU 2.0 - */ -enum UCalendarDaysOfWeek { - /** Sunday */ - UCAL_SUNDAY = 1, - /** Monday */ - UCAL_MONDAY, - /** Tuesday */ - UCAL_TUESDAY, - /** Wednesday */ - UCAL_WEDNESDAY, - /** Thursday */ - UCAL_THURSDAY, - /** Friday */ - UCAL_FRIDAY, - /** Saturday */ - UCAL_SATURDAY -}; - -/** @stable ICU 2.0 */ -typedef enum UCalendarDaysOfWeek UCalendarDaysOfWeek; - -/** Possible months in a UCalendar. Note: Calendar month is 0-based. - * @stable ICU 2.0 - */ -enum UCalendarMonths { - /** January */ - UCAL_JANUARY, - /** February */ - UCAL_FEBRUARY, - /** March */ - UCAL_MARCH, - /** April */ - UCAL_APRIL, - /** May */ - UCAL_MAY, - /** June */ - UCAL_JUNE, - /** July */ - UCAL_JULY, - /** August */ - UCAL_AUGUST, - /** September */ - UCAL_SEPTEMBER, - /** October */ - UCAL_OCTOBER, - /** November */ - UCAL_NOVEMBER, - /** December */ - UCAL_DECEMBER, - /** Value of the UCAL_MONTH field indicating the - * thirteenth month of the year. Although the Gregorian calendar - * does not use this value, lunar calendars do. - */ - UCAL_UNDECIMBER -}; - -/** @stable ICU 2.0 */ -typedef enum UCalendarMonths UCalendarMonths; - -/** Possible AM/PM values in a UCalendar - * @stable ICU 2.0 - */ -enum UCalendarAMPMs { - /** AM */ - UCAL_AM, - /** PM */ - UCAL_PM -}; - -/** @stable ICU 2.0 */ -typedef enum UCalendarAMPMs UCalendarAMPMs; - -/** - * System time zone type constants used by filtering zones - * in ucal_openTimeZoneIDEnumeration. - * @see ucal_openTimeZoneIDEnumeration - * @stable ICU 4.8 - */ -enum USystemTimeZoneType { - /** - * Any system zones. - * @stable ICU 4.8 - */ - UCAL_ZONE_TYPE_ANY, - /** - * Canonical system zones. - * @stable ICU 4.8 - */ - UCAL_ZONE_TYPE_CANONICAL, - /** - * Canonical system zones associated with actual locations. - * @stable ICU 4.8 - */ - UCAL_ZONE_TYPE_CANONICAL_LOCATION -}; - -/** @stable ICU 4.8 */ -typedef enum USystemTimeZoneType USystemTimeZoneType; - -/** - * Create an enumeration over system time zone IDs with the given - * filter conditions. - * @param zoneType The system time zone type. - * @param region The ISO 3166 two-letter country code or UN M.49 - * three-digit area code. When NULL, no filtering - * done by region. - * @param rawOffset An offset from GMT in milliseconds, ignoring the - * effect of daylight savings time, if any. When NULL, - * no filtering done by zone offset. - * @param ec A pointer to an UErrorCode to receive any errors - * @return an enumeration object that the caller must dispose of - * using enum_close(), or NULL upon failure. In case of failure, - * *ec will indicate the error. - * @stable ICU 4.8 - */ -U_STABLE UEnumeration* U_EXPORT2 -ucal_openTimeZoneIDEnumeration(USystemTimeZoneType zoneType, const char* region, - const int32_t* rawOffset, UErrorCode* ec); - -/** - * Create an enumeration over all time zones. - * - * @param ec input/output error code - * - * @return an enumeration object that the caller must dispose of using - * uenum_close(), or NULL upon failure. In case of failure *ec will - * indicate the error. - * - * @stable ICU 2.6 - */ -U_STABLE UEnumeration* U_EXPORT2 -ucal_openTimeZones(UErrorCode* ec); - -/** - * Create an enumeration over all time zones associated with the given - * country. Some zones are affiliated with no country (e.g., "UTC"); - * these may also be retrieved, as a group. - * - * @param country the ISO 3166 two-letter country code, or NULL to - * retrieve zones not affiliated with any country - * - * @param ec input/output error code - * - * @return an enumeration object that the caller must dispose of using - * uenum_close(), or NULL upon failure. In case of failure *ec will - * indicate the error. - * - * @stable ICU 2.6 - */ -U_STABLE UEnumeration* U_EXPORT2 -ucal_openCountryTimeZones(const char* country, UErrorCode* ec); - -/** - * Return the default time zone. The default is determined initially - * by querying the host operating system. If the host system detection - * routines fail, or if they specify a TimeZone or TimeZone offset - * which is not recognized, then the special TimeZone "Etc/Unknown" - * is returned. - * - * The default may be changed with `ucal_setDefaultTimeZone()` or with - * the C++ TimeZone API, `TimeZone::adoptDefault(TimeZone*)`. - * - * @param result A buffer to receive the result, or NULL - * - * @param resultCapacity The capacity of the result buffer - * - * @param ec input/output error code - * - * @return The result string length, not including the terminating - * null - * - * @see #UCAL_UNKNOWN_ZONE_ID - * - * @stable ICU 2.6 - */ -U_STABLE int32_t U_EXPORT2 -ucal_getDefaultTimeZone(UChar* result, int32_t resultCapacity, UErrorCode* ec); - -/** - * Set the default time zone. - * - * @param zoneID null-terminated time zone ID - * - * @param ec input/output error code - * - * @stable ICU 2.6 - */ -U_STABLE void U_EXPORT2 -ucal_setDefaultTimeZone(const UChar* zoneID, UErrorCode* ec); - -/** - * Return the amount of time in milliseconds that the clock is - * advanced during daylight savings time for the given time zone, or - * zero if the time zone does not observe daylight savings time. - * - * @param zoneID null-terminated time zone ID - * - * @param ec input/output error code - * - * @return the number of milliseconds the time is advanced with - * respect to standard time when the daylight savings rules are in - * effect. This is always a non-negative number, most commonly either - * 3,600,000 (one hour) or zero. - * - * @stable ICU 2.6 - */ -U_STABLE int32_t U_EXPORT2 -ucal_getDSTSavings(const UChar* zoneID, UErrorCode* ec); - -/** - * Get the current date and time. - * The value returned is represented as milliseconds from the epoch. - * @return The current date and time. - * @stable ICU 2.0 - */ -U_STABLE UDate U_EXPORT2 -ucal_getNow(void); - -/** - * Open a UCalendar. - * A UCalendar may be used to convert a millisecond value to a year, - * month, and day. - *

- * Note: When unknown TimeZone ID is specified or if the TimeZone ID specified is "Etc/Unknown", - * the UCalendar returned by the function is initialized with GMT zone with TimeZone ID - * UCAL_UNKNOWN_ZONE_ID ("Etc/Unknown") without any errors/warnings. If you want - * to check if a TimeZone ID is valid prior to this function, use ucal_getCanonicalTimeZoneID. - * - * @param zoneID The desired TimeZone ID. If 0, use the default time zone. - * @param len The length of zoneID, or -1 if null-terminated. - * @param locale The desired locale - * @param type The type of UCalendar to open. This can be UCAL_GREGORIAN to open the Gregorian - * calendar for the locale, or UCAL_DEFAULT to open the default calendar for the locale (the - * default calendar may also be Gregorian). To open a specific non-Gregorian calendar for the - * locale, use uloc_setKeywordValue to set the value of the calendar keyword for the locale - * and then pass the locale to ucal_open with UCAL_DEFAULT as the type. - * @param status A pointer to an UErrorCode to receive any errors - * @return A pointer to a UCalendar, or 0 if an error occurred. - * @see #UCAL_UNKNOWN_ZONE_ID - * @stable ICU 2.0 - */ -U_STABLE UCalendar* U_EXPORT2 -ucal_open(const UChar* zoneID, - int32_t len, - const char* locale, - UCalendarType type, - UErrorCode* status); - -/** - * Close a UCalendar. - * Once closed, a UCalendar may no longer be used. - * @param cal The UCalendar to close. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucal_close(UCalendar *cal); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUCalendarPointer - * "Smart pointer" class, closes a UCalendar via ucal_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUCalendarPointer, UCalendar, ucal_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Open a copy of a UCalendar. - * This function performs a deep copy. - * @param cal The calendar to copy - * @param status A pointer to an UErrorCode to receive any errors. - * @return A pointer to a UCalendar identical to cal. - * @stable ICU 4.0 - */ -U_STABLE UCalendar* U_EXPORT2 -ucal_clone(const UCalendar* cal, - UErrorCode* status); - -/** - * Set the TimeZone used by a UCalendar. - * A UCalendar uses a timezone for converting from Greenwich time to local time. - * @param cal The UCalendar to set. - * @param zoneID The desired TimeZone ID. If 0, use the default time zone. - * @param len The length of zoneID, or -1 if null-terminated. - * @param status A pointer to an UErrorCode to receive any errors. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucal_setTimeZone(UCalendar* cal, - const UChar* zoneID, - int32_t len, - UErrorCode* status); - -/** - * Get the ID of the UCalendar's time zone. - * - * @param cal The UCalendar to query. - * @param result Receives the UCalendar's time zone ID. - * @param resultLength The maximum size of result. - * @param status Receives the status. - * @return The total buffer size needed; if greater than resultLength, the output was truncated. - * @stable ICU 51 - */ -U_STABLE int32_t U_EXPORT2 -ucal_getTimeZoneID(const UCalendar *cal, - UChar *result, - int32_t resultLength, - UErrorCode *status); - -/** - * Possible formats for a UCalendar's display name - * @stable ICU 2.0 - */ -enum UCalendarDisplayNameType { - /** Standard display name */ - UCAL_STANDARD, - /** Short standard display name */ - UCAL_SHORT_STANDARD, - /** Daylight savings display name */ - UCAL_DST, - /** Short daylight savings display name */ - UCAL_SHORT_DST -}; - -/** @stable ICU 2.0 */ -typedef enum UCalendarDisplayNameType UCalendarDisplayNameType; - -/** - * Get the display name for a UCalendar's TimeZone. - * A display name is suitable for presentation to a user. - * @param cal The UCalendar to query. - * @param type The desired display name format; one of UCAL_STANDARD, UCAL_SHORT_STANDARD, - * UCAL_DST, UCAL_SHORT_DST - * @param locale The desired locale for the display name. - * @param result A pointer to a buffer to receive the formatted number. - * @param resultLength The maximum size of result. - * @param status A pointer to an UErrorCode to receive any errors - * @return The total buffer size needed; if greater than resultLength, the output was truncated. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucal_getTimeZoneDisplayName(const UCalendar* cal, - UCalendarDisplayNameType type, - const char* locale, - UChar* result, - int32_t resultLength, - UErrorCode* status); - -/** - * Determine if a UCalendar is currently in daylight savings time. - * Daylight savings time is not used in all parts of the world. - * @param cal The UCalendar to query. - * @param status A pointer to an UErrorCode to receive any errors - * @return TRUE if cal is currently in daylight savings time, FALSE otherwise - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -ucal_inDaylightTime(const UCalendar* cal, - UErrorCode* status ); - -/** - * Sets the GregorianCalendar change date. This is the point when the switch from - * Julian dates to Gregorian dates occurred. Default is 00:00:00 local time, October - * 15, 1582. Previous to this time and date will be Julian dates. - * - * This function works only for Gregorian calendars. If the UCalendar is not - * an instance of a Gregorian calendar, then a U_UNSUPPORTED_ERROR - * error code is set. - * - * @param cal The calendar object. - * @param date The given Gregorian cutover date. - * @param pErrorCode Pointer to a standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * - * @see GregorianCalendar::setGregorianChange - * @see ucal_getGregorianChange - * @stable ICU 3.6 - */ -U_STABLE void U_EXPORT2 -ucal_setGregorianChange(UCalendar *cal, UDate date, UErrorCode *pErrorCode); - -/** - * Gets the Gregorian Calendar change date. This is the point when the switch from - * Julian dates to Gregorian dates occurred. Default is 00:00:00 local time, October - * 15, 1582. Previous to this time and date will be Julian dates. - * - * This function works only for Gregorian calendars. If the UCalendar is not - * an instance of a Gregorian calendar, then a U_UNSUPPORTED_ERROR - * error code is set. - * - * @param cal The calendar object. - * @param pErrorCode Pointer to a standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return The Gregorian cutover time for this calendar. - * - * @see GregorianCalendar::getGregorianChange - * @see ucal_setGregorianChange - * @stable ICU 3.6 - */ -U_STABLE UDate U_EXPORT2 -ucal_getGregorianChange(const UCalendar *cal, UErrorCode *pErrorCode); - -/** - * Types of UCalendar attributes - * @stable ICU 2.0 - */ -enum UCalendarAttribute { - /** - * Lenient parsing - * @stable ICU 2.0 - */ - UCAL_LENIENT, - /** - * First day of week - * @stable ICU 2.0 - */ - UCAL_FIRST_DAY_OF_WEEK, - /** - * Minimum number of days in first week - * @stable ICU 2.0 - */ - UCAL_MINIMAL_DAYS_IN_FIRST_WEEK, - /** - * The behavior for handling wall time repeating multiple times - * at negative time zone offset transitions - * @stable ICU 49 - */ - UCAL_REPEATED_WALL_TIME, - /** - * The behavior for handling skipped wall time at positive time - * zone offset transitions. - * @stable ICU 49 - */ - UCAL_SKIPPED_WALL_TIME -}; - -/** @stable ICU 2.0 */ -typedef enum UCalendarAttribute UCalendarAttribute; - -/** - * Options for handling ambiguous wall time at time zone - * offset transitions. - * @stable ICU 49 - */ -enum UCalendarWallTimeOption { - /** - * An ambiguous wall time to be interpreted as the latest. - * This option is valid for UCAL_REPEATED_WALL_TIME and - * UCAL_SKIPPED_WALL_TIME. - * @stable ICU 49 - */ - UCAL_WALLTIME_LAST, - /** - * An ambiguous wall time to be interpreted as the earliest. - * This option is valid for UCAL_REPEATED_WALL_TIME and - * UCAL_SKIPPED_WALL_TIME. - * @stable ICU 49 - */ - UCAL_WALLTIME_FIRST, - /** - * An ambiguous wall time to be interpreted as the next valid - * wall time. This option is valid for UCAL_SKIPPED_WALL_TIME. - * @stable ICU 49 - */ - UCAL_WALLTIME_NEXT_VALID -}; -/** @stable ICU 49 */ -typedef enum UCalendarWallTimeOption UCalendarWallTimeOption; - -/** - * Get a numeric attribute associated with a UCalendar. - * Numeric attributes include the first day of the week, or the minimal numbers - * of days in the first week of the month. - * @param cal The UCalendar to query. - * @param attr The desired attribute; one of UCAL_LENIENT, UCAL_FIRST_DAY_OF_WEEK, - * UCAL_MINIMAL_DAYS_IN_FIRST_WEEK, UCAL_REPEATED_WALL_TIME or UCAL_SKIPPED_WALL_TIME - * @return The value of attr. - * @see ucal_setAttribute - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucal_getAttribute(const UCalendar* cal, - UCalendarAttribute attr); - -/** - * Set a numeric attribute associated with a UCalendar. - * Numeric attributes include the first day of the week, or the minimal numbers - * of days in the first week of the month. - * @param cal The UCalendar to set. - * @param attr The desired attribute; one of UCAL_LENIENT, UCAL_FIRST_DAY_OF_WEEK, - * UCAL_MINIMAL_DAYS_IN_FIRST_WEEK, UCAL_REPEATED_WALL_TIME or UCAL_SKIPPED_WALL_TIME - * @param newValue The new value of attr. - * @see ucal_getAttribute - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucal_setAttribute(UCalendar* cal, - UCalendarAttribute attr, - int32_t newValue); - -/** - * Get a locale for which calendars are available. - * A UCalendar in a locale returned by this function will contain the correct - * day and month names for the locale. - * @param localeIndex The index of the desired locale. - * @return A locale for which calendars are available, or 0 if none. - * @see ucal_countAvailable - * @stable ICU 2.0 - */ -U_STABLE const char* U_EXPORT2 -ucal_getAvailable(int32_t localeIndex); - -/** - * Determine how many locales have calendars available. - * This function is most useful as determining the loop ending condition for - * calls to \ref ucal_getAvailable. - * @return The number of locales for which calendars are available. - * @see ucal_getAvailable - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucal_countAvailable(void); - -/** - * Get a UCalendar's current time in millis. - * The time is represented as milliseconds from the epoch. - * @param cal The UCalendar to query. - * @param status A pointer to an UErrorCode to receive any errors - * @return The calendar's current time in millis. - * @see ucal_setMillis - * @see ucal_setDate - * @see ucal_setDateTime - * @stable ICU 2.0 - */ -U_STABLE UDate U_EXPORT2 -ucal_getMillis(const UCalendar* cal, - UErrorCode* status); - -/** - * Set a UCalendar's current time in millis. - * The time is represented as milliseconds from the epoch. - * @param cal The UCalendar to set. - * @param dateTime The desired date and time. - * @param status A pointer to an UErrorCode to receive any errors - * @see ucal_getMillis - * @see ucal_setDate - * @see ucal_setDateTime - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucal_setMillis(UCalendar* cal, - UDate dateTime, - UErrorCode* status ); - -/** - * Set a UCalendar's current date. - * The date is represented as a series of 32-bit integers. - * @param cal The UCalendar to set. - * @param year The desired year. - * @param month The desired month; one of UCAL_JANUARY, UCAL_FEBRUARY, UCAL_MARCH, UCAL_APRIL, UCAL_MAY, - * UCAL_JUNE, UCAL_JULY, UCAL_AUGUST, UCAL_SEPTEMBER, UCAL_OCTOBER, UCAL_NOVEMBER, UCAL_DECEMBER, UCAL_UNDECIMBER - * @param date The desired day of the month. - * @param status A pointer to an UErrorCode to receive any errors - * @see ucal_getMillis - * @see ucal_setMillis - * @see ucal_setDateTime - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucal_setDate(UCalendar* cal, - int32_t year, - int32_t month, - int32_t date, - UErrorCode* status); - -/** - * Set a UCalendar's current date. - * The date is represented as a series of 32-bit integers. - * @param cal The UCalendar to set. - * @param year The desired year. - * @param month The desired month; one of UCAL_JANUARY, UCAL_FEBRUARY, UCAL_MARCH, UCAL_APRIL, UCAL_MAY, - * UCAL_JUNE, UCAL_JULY, UCAL_AUGUST, UCAL_SEPTEMBER, UCAL_OCTOBER, UCAL_NOVEMBER, UCAL_DECEMBER, UCAL_UNDECIMBER - * @param date The desired day of the month. - * @param hour The desired hour of day. - * @param minute The desired minute. - * @param second The desirec second. - * @param status A pointer to an UErrorCode to receive any errors - * @see ucal_getMillis - * @see ucal_setMillis - * @see ucal_setDate - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucal_setDateTime(UCalendar* cal, - int32_t year, - int32_t month, - int32_t date, - int32_t hour, - int32_t minute, - int32_t second, - UErrorCode* status); - -/** - * Returns TRUE if two UCalendars are equivalent. Equivalent - * UCalendars will behave identically, but they may be set to - * different times. - * @param cal1 The first of the UCalendars to compare. - * @param cal2 The second of the UCalendars to compare. - * @return TRUE if cal1 and cal2 are equivalent, FALSE otherwise. - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -ucal_equivalentTo(const UCalendar* cal1, - const UCalendar* cal2); - -/** - * Add a specified signed amount to a particular field in a UCalendar. - * This can modify more significant fields in the calendar. - * Adding a positive value always means moving forward in time, so for the Gregorian calendar, - * starting with 100 BC and adding +1 to year results in 99 BC (even though this actually reduces - * the numeric value of the field itself). - * @param cal The UCalendar to which to add. - * @param field The field to which to add the signed value; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET. - * @param amount The signed amount to add to field. If the amount causes the value - * to exceed to maximum or minimum values for that field, other fields are modified - * to preserve the magnitude of the change. - * @param status A pointer to an UErrorCode to receive any errors - * @see ucal_roll - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucal_add(UCalendar* cal, - UCalendarDateFields field, - int32_t amount, - UErrorCode* status); - -/** - * Add a specified signed amount to a particular field in a UCalendar. - * This will not modify more significant fields in the calendar. - * Rolling by a positive value always means moving forward in time (unless the limit of the - * field is reached, in which case it may pin or wrap), so for Gregorian calendar, - * starting with 100 BC and rolling the year by +1 results in 99 BC. - * When eras have a definite beginning and end (as in the Chinese calendar, or as in most eras in the - * Japanese calendar) then rolling the year past either limit of the era will cause the year to wrap around. - * When eras only have a limit at one end, then attempting to roll the year past that limit will result in - * pinning the year at that limit. Note that for most calendars in which era 0 years move forward in time - * (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to result in negative years for - * era 0 (that is the only way to represent years before the calendar epoch). - * @param cal The UCalendar to which to add. - * @param field The field to which to add the signed value; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET. - * @param amount The signed amount to add to field. If the amount causes the value - * to exceed to maximum or minimum values for that field, the field is pinned to a permissible - * value. - * @param status A pointer to an UErrorCode to receive any errors - * @see ucal_add - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucal_roll(UCalendar* cal, - UCalendarDateFields field, - int32_t amount, - UErrorCode* status); - -/** - * Get the current value of a field from a UCalendar. - * All fields are represented as 32-bit integers. - * @param cal The UCalendar to query. - * @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET. - * @param status A pointer to an UErrorCode to receive any errors - * @return The value of the desired field. - * @see ucal_set - * @see ucal_isSet - * @see ucal_clearField - * @see ucal_clear - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucal_get(const UCalendar* cal, - UCalendarDateFields field, - UErrorCode* status ); - -/** - * Set the value of a field in a UCalendar. - * All fields are represented as 32-bit integers. - * @param cal The UCalendar to set. - * @param field The field to set; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET. - * @param value The desired value of field. - * @see ucal_get - * @see ucal_isSet - * @see ucal_clearField - * @see ucal_clear - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucal_set(UCalendar* cal, - UCalendarDateFields field, - int32_t value); - -/** - * Determine if a field in a UCalendar is set. - * All fields are represented as 32-bit integers. - * @param cal The UCalendar to query. - * @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET. - * @return TRUE if field is set, FALSE otherwise. - * @see ucal_get - * @see ucal_set - * @see ucal_clearField - * @see ucal_clear - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -ucal_isSet(const UCalendar* cal, - UCalendarDateFields field); - -/** - * Clear a field in a UCalendar. - * All fields are represented as 32-bit integers. - * @param cal The UCalendar containing the field to clear. - * @param field The field to clear; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET. - * @see ucal_get - * @see ucal_set - * @see ucal_isSet - * @see ucal_clear - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucal_clearField(UCalendar* cal, - UCalendarDateFields field); - -/** - * Clear all fields in a UCalendar. - * All fields are represented as 32-bit integers. - * @param calendar The UCalendar to clear. - * @see ucal_get - * @see ucal_set - * @see ucal_isSet - * @see ucal_clearField - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucal_clear(UCalendar* calendar); - -/** - * Possible limit values for a UCalendar - * @stable ICU 2.0 - */ -enum UCalendarLimitType { - /** Minimum value */ - UCAL_MINIMUM, - /** Maximum value */ - UCAL_MAXIMUM, - /** Greatest minimum value */ - UCAL_GREATEST_MINIMUM, - /** Leaest maximum value */ - UCAL_LEAST_MAXIMUM, - /** Actual minimum value */ - UCAL_ACTUAL_MINIMUM, - /** Actual maximum value */ - UCAL_ACTUAL_MAXIMUM -}; - -/** @stable ICU 2.0 */ -typedef enum UCalendarLimitType UCalendarLimitType; - -/** - * Determine a limit for a field in a UCalendar. - * A limit is a maximum or minimum value for a field. - * @param cal The UCalendar to query. - * @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET. - * @param type The desired critical point; one of UCAL_MINIMUM, UCAL_MAXIMUM, UCAL_GREATEST_MINIMUM, - * UCAL_LEAST_MAXIMUM, UCAL_ACTUAL_MINIMUM, UCAL_ACTUAL_MAXIMUM - * @param status A pointer to an UErrorCode to receive any errors. - * @return The requested value. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucal_getLimit(const UCalendar* cal, - UCalendarDateFields field, - UCalendarLimitType type, - UErrorCode* status); - -/** Get the locale for this calendar object. You can choose between valid and actual locale. - * @param cal The calendar object - * @param type type of the locale we're looking for (valid or actual) - * @param status error code for the operation - * @return the locale name - * @stable ICU 2.8 - */ -U_STABLE const char * U_EXPORT2 -ucal_getLocaleByType(const UCalendar *cal, ULocDataLocaleType type, UErrorCode* status); - -/** - * Returns the timezone data version currently used by ICU. - * @param status error code for the operation - * @return the version string, such as "2007f" - * @stable ICU 3.8 - */ -U_STABLE const char * U_EXPORT2 -ucal_getTZDataVersion(UErrorCode* status); - -/** - * Returns the canonical system timezone ID or the normalized - * custom time zone ID for the given time zone ID. - * @param id The input timezone ID to be canonicalized. - * @param len The length of id, or -1 if null-terminated. - * @param result The buffer receives the canonical system timezone ID - * or the custom timezone ID in normalized format. - * @param resultCapacity The capacity of the result buffer. - * @param isSystemID Receives if the given ID is a known system - * timezone ID. - * @param status Receives the status. When the given timezone ID - * is neither a known system time zone ID nor a - * valid custom timezone ID, U_ILLEGAL_ARGUMENT_ERROR - * is set. - * @return The result string length, not including the terminating - * null. - * @stable ICU 4.0 - */ -U_STABLE int32_t U_EXPORT2 -ucal_getCanonicalTimeZoneID(const UChar* id, int32_t len, - UChar* result, int32_t resultCapacity, UBool *isSystemID, UErrorCode* status); -/** - * Get the resource keyword value string designating the calendar type for the UCalendar. - * @param cal The UCalendar to query. - * @param status The error code for the operation. - * @return The resource keyword value string. - * @stable ICU 4.2 - */ -U_STABLE const char * U_EXPORT2 -ucal_getType(const UCalendar *cal, UErrorCode* status); - -/** - * Given a key and a locale, returns an array of string values in a preferred - * order that would make a difference. These are all and only those values where - * the open (creation) of the service with the locale formed from the input locale - * plus input keyword and that value has different behavior than creation with the - * input locale alone. - * @param key one of the keys supported by this service. For now, only - * "calendar" is supported. - * @param locale the locale - * @param commonlyUsed if set to true it will return only commonly used values - * with the given locale in preferred order. Otherwise, - * it will return all the available values for the locale. - * @param status error status - * @return a string enumeration over keyword values for the given key and the locale. - * @stable ICU 4.2 - */ -U_STABLE UEnumeration* U_EXPORT2 -ucal_getKeywordValuesForLocale(const char* key, - const char* locale, - UBool commonlyUsed, - UErrorCode* status); - - -/** Weekday types, as returned by ucal_getDayOfWeekType(). - * @stable ICU 4.4 - */ -enum UCalendarWeekdayType { - /** - * Designates a full weekday (no part of the day is included in the weekend). - * @stable ICU 4.4 - */ - UCAL_WEEKDAY, - /** - * Designates a full weekend day (the entire day is included in the weekend). - * @stable ICU 4.4 - */ - UCAL_WEEKEND, - /** - * Designates a day that starts as a weekday and transitions to the weekend. - * Call ucal_getWeekendTransition() to get the time of transition. - * @stable ICU 4.4 - */ - UCAL_WEEKEND_ONSET, - /** - * Designates a day that starts as the weekend and transitions to a weekday. - * Call ucal_getWeekendTransition() to get the time of transition. - * @stable ICU 4.4 - */ - UCAL_WEEKEND_CEASE -}; - -/** @stable ICU 4.4 */ -typedef enum UCalendarWeekdayType UCalendarWeekdayType; - -/** - * Returns whether the given day of the week is a weekday, a weekend day, - * or a day that transitions from one to the other, for the locale and - * calendar system associated with this UCalendar (the locale's region is - * often the most determinant factor). If a transition occurs at midnight, - * then the days before and after the transition will have the - * type UCAL_WEEKDAY or UCAL_WEEKEND. If a transition occurs at a time - * other than midnight, then the day of the transition will have - * the type UCAL_WEEKEND_ONSET or UCAL_WEEKEND_CEASE. In this case, the - * function ucal_getWeekendTransition() will return the point of - * transition. - * @param cal The UCalendar to query. - * @param dayOfWeek The day of the week whose type is desired (UCAL_SUNDAY..UCAL_SATURDAY). - * @param status The error code for the operation. - * @return The UCalendarWeekdayType for the day of the week. - * @stable ICU 4.4 - */ -U_STABLE UCalendarWeekdayType U_EXPORT2 -ucal_getDayOfWeekType(const UCalendar *cal, UCalendarDaysOfWeek dayOfWeek, UErrorCode* status); - -/** - * Returns the time during the day at which the weekend begins or ends in - * this calendar system. If ucal_getDayOfWeekType() returns UCAL_WEEKEND_ONSET - * for the specified dayOfWeek, return the time at which the weekend begins. - * If ucal_getDayOfWeekType() returns UCAL_WEEKEND_CEASE for the specified dayOfWeek, - * return the time at which the weekend ends. If ucal_getDayOfWeekType() returns - * some other UCalendarWeekdayType for the specified dayOfWeek, is it an error condition - * (U_ILLEGAL_ARGUMENT_ERROR). - * @param cal The UCalendar to query. - * @param dayOfWeek The day of the week for which the weekend transition time is - * desired (UCAL_SUNDAY..UCAL_SATURDAY). - * @param status The error code for the operation. - * @return The milliseconds after midnight at which the weekend begins or ends. - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -ucal_getWeekendTransition(const UCalendar *cal, UCalendarDaysOfWeek dayOfWeek, UErrorCode *status); - -/** - * Returns TRUE if the given UDate is in the weekend in - * this calendar system. - * @param cal The UCalendar to query. - * @param date The UDate in question. - * @param status The error code for the operation. - * @return TRUE if the given UDate is in the weekend in - * this calendar system, FALSE otherwise. - * @stable ICU 4.4 - */ -U_STABLE UBool U_EXPORT2 -ucal_isWeekend(const UCalendar *cal, UDate date, UErrorCode *status); - -/** - * Return the difference between the target time and the time this calendar object is currently set to. - * If the target time is after the current calendar setting, the the returned value will be positive. - * The field parameter specifies the units of the return value. For example, if field is UCAL_MONTH - * and ucal_getFieldDifference returns 3, then the target time is 3 to less than 4 months after the - * current calendar setting. - * - * As a side effect of this call, this calendar is advanced toward target by the given amount. That is, - * calling this function has the side effect of calling ucal_add on this calendar with the specified - * field and an amount equal to the return value from this function. - * - * A typical way of using this function is to call it first with the largest field of interest, then - * with progressively smaller fields. - * - * @param cal The UCalendar to compare and update. - * @param target The target date to compare to the current calendar setting. - * @param field The field to compare; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH, - * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK, - * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND, - * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET. - * @param status A pointer to an UErrorCode to receive any errors - * @return The date difference for the specified field. - * @stable ICU 4.8 - */ -U_STABLE int32_t U_EXPORT2 -ucal_getFieldDifference(UCalendar* cal, - UDate target, - UCalendarDateFields field, - UErrorCode* status); - -/** - * Time zone transition types for ucal_getTimeZoneTransitionDate - * @stable ICU 50 - */ -enum UTimeZoneTransitionType { - /** - * Get the next transition after the current date, - * i.e. excludes the current date - * @stable ICU 50 - */ - UCAL_TZ_TRANSITION_NEXT, - /** - * Get the next transition on or after the current date, - * i.e. may include the current date - * @stable ICU 50 - */ - UCAL_TZ_TRANSITION_NEXT_INCLUSIVE, - /** - * Get the previous transition before the current date, - * i.e. excludes the current date - * @stable ICU 50 - */ - UCAL_TZ_TRANSITION_PREVIOUS, - /** - * Get the previous transition on or before the current date, - * i.e. may include the current date - * @stable ICU 50 - */ - UCAL_TZ_TRANSITION_PREVIOUS_INCLUSIVE -}; - -typedef enum UTimeZoneTransitionType UTimeZoneTransitionType; /**< @stable ICU 50 */ - -/** -* Get the UDate for the next/previous time zone transition relative to -* the calendar's current date, in the time zone to which the calendar -* is currently set. If there is no known time zone transition of the -* requested type relative to the calendar's date, the function returns -* FALSE. -* @param cal The UCalendar to query. -* @param type The type of transition desired. -* @param transition A pointer to a UDate to be set to the transition time. -* If the function returns FALSE, the value set is unspecified. -* @param status A pointer to a UErrorCode to receive any errors. -* @return TRUE if a valid transition time is set in *transition, FALSE -* otherwise. -* @stable ICU 50 -*/ -U_STABLE UBool U_EXPORT2 -ucal_getTimeZoneTransitionDate(const UCalendar* cal, UTimeZoneTransitionType type, - UDate* transition, UErrorCode* status); - -/** -* Converts a system time zone ID to an equivalent Windows time zone ID. For example, -* Windows time zone ID "Pacific Standard Time" is returned for input "America/Los_Angeles". -* -*

There are system time zones that cannot be mapped to Windows zones. When the input -* system time zone ID is unknown or unmappable to a Windows time zone, then this -* function returns 0 as the result length, but the operation itself remains successful -* (no error status set on return). -* -*

This implementation utilizes -* Zone-Tzid mapping data. The mapping data is updated time to time. To get the latest changes, -* please read the ICU user guide section -* Updating the Time Zone Data. -* -* @param id A system time zone ID. -* @param len The length of id, or -1 if null-terminated. -* @param winid A buffer to receive a Windows time zone ID. -* @param winidCapacity The capacity of the result buffer winid. -* @param status Receives the status. -* @return The result string length, not including the terminating null. -* @see ucal_getTimeZoneIDForWindowsID -* -* @stable ICU 52 -*/ -U_STABLE int32_t U_EXPORT2 -ucal_getWindowsTimeZoneID(const UChar* id, int32_t len, - UChar* winid, int32_t winidCapacity, UErrorCode* status); - -/** -* Converts a Windows time zone ID to an equivalent system time zone ID -* for a region. For example, system time zone ID "America/Los_Angeles" is returned -* for input Windows ID "Pacific Standard Time" and region "US" (or null), -* "America/Vancouver" is returned for the same Windows ID "Pacific Standard Time" and -* region "CA". -* -*

Not all Windows time zones can be mapped to system time zones. When the input -* Windows time zone ID is unknown or unmappable to a system time zone, then this -* function returns 0 as the result length, but the operation itself remains successful -* (no error status set on return). -* -*

This implementation utilizes -* Zone-Tzid mapping data. The mapping data is updated time to time. To get the latest changes, -* please read the ICU user guide section -* Updating the Time Zone Data. -* -* @param winid A Windows time zone ID. -* @param len The length of winid, or -1 if null-terminated. -* @param region A null-terminated region code, or NULL if no regional preference. -* @param id A buffer to receive a system time zone ID. -* @param idCapacity The capacity of the result buffer id. -* @param status Receives the status. -* @return The result string length, not including the terminating null. -* @see ucal_getWindowsTimeZoneID -* -* @stable ICU 52 -*/ -U_STABLE int32_t U_EXPORT2 -ucal_getTimeZoneIDForWindowsID(const UChar* winid, int32_t len, const char* region, - UChar* id, int32_t idCapacity, UErrorCode* status); - -#ifndef U_HIDE_DRAFT_API -/** - * Day periods - * @draft Apple - */ -typedef enum UADayPeriod { - UADAYPERIOD_MORNING1, - UADAYPERIOD_MORNING2, - UADAYPERIOD_AFTERNOON1, - UADAYPERIOD_AFTERNOON2, - UADAYPERIOD_EVENING1, - UADAYPERIOD_EVENING2, - UADAYPERIOD_NIGHT1, - UADAYPERIOD_NIGHT2, - UADAYPERIOD_MIDNIGHT, /* Should only get this for formatStyle TRUE */ - UADAYPERIOD_NOON, /* Should only get this for formatStyle TRUE */ - UADAYPERIOD_UNKNOWN -} UADayPeriod; - -/** - * Get the locale-specific day period for a particular time of day. - * This comes from the dayPeriod CLDR data in ICU. - * - * @param locale - * The locale - * @param hour - * Hour of day, in range 0..23. - * @param minute - * Minute of the hour, in range 0..59. Currently does not affect dayPeriod - * selection if formatStyle is FALSE. - * @param formatStyle - * FALSE to get dayPeriods for selecting strings to be used "stand-alone" - * without a particular time of day, e.g. "Good morning", "Good afternoon", - * "Good evening". - * TRUE to get dayPeriods for selecting strings to be used when formatting - * a particular time of day, e.g. "12:00 noon", "3:00 PM". - * @param status - * A pointer to a UErrorCode to receive any errors. In-out parameter; if - * this indicates an error on input, the function will return immediately. - * @return - * The UADayPeriod (possibly UADAYPERIOD_UNKNOWN). - * @draft Apple - */ -U_DRAFT UADayPeriod U_EXPORT2 -uacal_getDayPeriod( const char* locale, - int32_t hour, - int32_t minute, - UBool formatStyle, - UErrorCode* status ); - -#endif /* U_HIDE_DRAFT_API */ - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucasemap.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucasemap.h deleted file mode 100644 index e00d7eaec1..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucasemap.h +++ /dev/null @@ -1,385 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2005-2012, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: ucasemap.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2005may06 -* created by: Markus W. Scherer -* -* Case mapping service object and functions using it. -*/ - -#ifndef __UCASEMAP_H__ -#define __UCASEMAP_H__ - -#include "unicode/utypes.h" -#include "unicode/localpointer.h" -#include "unicode/stringoptions.h" -#include "unicode/ustring.h" - -/** - * \file - * \brief C API: Unicode case mapping functions using a UCaseMap service object. - * - * The service object takes care of memory allocations, data loading, and setup - * for the attributes, as usual. - * - * Currently, the functionality provided here does not overlap with uchar.h - * and ustring.h, except for ucasemap_toTitle(). - * - * ucasemap_utf8XYZ() functions operate directly on UTF-8 strings. - */ - -/** - * UCaseMap is an opaque service object for newer ICU case mapping functions. - * Older functions did not use a service object. - * @stable ICU 3.4 - */ -struct UCaseMap; -typedef struct UCaseMap UCaseMap; /**< C typedef for struct UCaseMap. @stable ICU 3.4 */ - -/** - * Open a UCaseMap service object for a locale and a set of options. - * The locale ID and options are preprocessed so that functions using the - * service object need not process them in each call. - * - * @param locale ICU locale ID, used for language-dependent - * upper-/lower-/title-casing according to the Unicode standard. - * Usual semantics: ""=root, NULL=default locale, etc. - * @param options Options bit set, used for case folding and string comparisons. - * Same flags as for u_foldCase(), u_strFoldCase(), - * u_strCaseCompare(), etc. - * Use 0 or U_FOLD_CASE_DEFAULT for default behavior. - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return Pointer to a UCaseMap service object, if successful. - * - * @see U_FOLD_CASE_DEFAULT - * @see U_FOLD_CASE_EXCLUDE_SPECIAL_I - * @see U_TITLECASE_NO_LOWERCASE - * @see U_TITLECASE_NO_BREAK_ADJUSTMENT - * @stable ICU 3.4 - */ -U_STABLE UCaseMap * U_EXPORT2 -ucasemap_open(const char *locale, uint32_t options, UErrorCode *pErrorCode); - -/** - * Close a UCaseMap service object. - * @param csm Object to be closed. - * @stable ICU 3.4 - */ -U_STABLE void U_EXPORT2 -ucasemap_close(UCaseMap *csm); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUCaseMapPointer - * "Smart pointer" class, closes a UCaseMap via ucasemap_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUCaseMapPointer, UCaseMap, ucasemap_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Get the locale ID that is used for language-dependent case mappings. - * @param csm UCaseMap service object. - * @return locale ID - * @stable ICU 3.4 - */ -U_STABLE const char * U_EXPORT2 -ucasemap_getLocale(const UCaseMap *csm); - -/** - * Get the options bit set that is used for case folding and string comparisons. - * @param csm UCaseMap service object. - * @return options bit set - * @stable ICU 3.4 - */ -U_STABLE uint32_t U_EXPORT2 -ucasemap_getOptions(const UCaseMap *csm); - -/** - * Set the locale ID that is used for language-dependent case mappings. - * - * @param csm UCaseMap service object. - * @param locale Locale ID, see ucasemap_open(). - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * - * @see ucasemap_open - * @stable ICU 3.4 - */ -U_STABLE void U_EXPORT2 -ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode); - -/** - * Set the options bit set that is used for case folding and string comparisons. - * - * @param csm UCaseMap service object. - * @param options Options bit set, see ucasemap_open(). - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * - * @see ucasemap_open - * @stable ICU 3.4 - */ -U_STABLE void U_EXPORT2 -ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode); - -#if !UCONFIG_NO_BREAK_ITERATION - -/** - * Get the break iterator that is used for titlecasing. - * Do not modify the returned break iterator. - * @param csm UCaseMap service object. - * @return titlecasing break iterator - * @stable ICU 3.8 - */ -U_STABLE const UBreakIterator * U_EXPORT2 -ucasemap_getBreakIterator(const UCaseMap *csm); - -/** - * Set the break iterator that is used for titlecasing. - * The UCaseMap service object releases a previously set break iterator - * and "adopts" this new one, taking ownership of it. - * It will be released in a subsequent call to ucasemap_setBreakIterator() - * or ucasemap_close(). - * - * Break iterator operations are not thread-safe. Therefore, titlecasing - * functions use non-const UCaseMap objects. It is not possible to titlecase - * strings concurrently using the same UCaseMap. - * - * @param csm UCaseMap service object. - * @param iterToAdopt Break iterator to be adopted for titlecasing. - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * - * @see ucasemap_toTitle - * @see ucasemap_utf8ToTitle - * @stable ICU 3.8 - */ -U_STABLE void U_EXPORT2 -ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode *pErrorCode); - -/** - * Titlecase a UTF-16 string. This function is almost a duplicate of u_strToTitle(), - * except that it takes ucasemap_setOptions() into account and has performance - * advantages from being able to use a UCaseMap object for multiple case mapping - * operations, saving setup time. - * - * Casing is locale-dependent and context-sensitive. - * Titlecasing uses a break iterator to find the first characters of words - * that are to be titlecased. It titlecases those characters and lowercases - * all others. (This can be modified with ucasemap_setOptions().) - * - * Note: This function takes a non-const UCaseMap pointer because it will - * open a default break iterator if no break iterator was set yet, - * and effectively call ucasemap_setBreakIterator(); - * also because the break iterator is stateful and will be modified during - * the iteration. - * - * The titlecase break iterator can be provided to customize for arbitrary - * styles, using rules and dictionaries beyond the standard iterators. - * The standard titlecase iterator for the root locale implements the - * algorithm of Unicode TR 21. - * - * This function uses only the setText(), first() and next() methods of the - * provided break iterator. - * - * The result may be longer or shorter than the original. - * The source string and the destination buffer must not overlap. - * - * @param csm UCaseMap service object. This pointer is non-const! - * See the note above for details. - * @param dest A buffer for the result string. The result will be NUL-terminated if - * the buffer is large enough. - * The contents is undefined in case of failure. - * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param src The original string. - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return The length of the result string, if successful - or in case of a buffer overflow, - * in which case it will be greater than destCapacity. - * - * @see u_strToTitle - * @stable ICU 3.8 - */ -U_STABLE int32_t U_EXPORT2 -ucasemap_toTitle(UCaseMap *csm, - UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode); - -#endif // UCONFIG_NO_BREAK_ITERATION - -/** - * Lowercase the characters in a UTF-8 string. - * Casing is locale-dependent and context-sensitive. - * The result may be longer or shorter than the original. - * The source string and the destination buffer must not overlap. - * - * @param csm UCaseMap service object. - * @param dest A buffer for the result string. The result will be NUL-terminated if - * the buffer is large enough. - * The contents is undefined in case of failure. - * @param destCapacity The size of the buffer (number of bytes). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param src The original string. - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return The length of the result string, if successful - or in case of a buffer overflow, - * in which case it will be greater than destCapacity. - * - * @see u_strToLower - * @stable ICU 3.4 - */ -U_STABLE int32_t U_EXPORT2 -ucasemap_utf8ToLower(const UCaseMap *csm, - char *dest, int32_t destCapacity, - const char *src, int32_t srcLength, - UErrorCode *pErrorCode); - -/** - * Uppercase the characters in a UTF-8 string. - * Casing is locale-dependent and context-sensitive. - * The result may be longer or shorter than the original. - * The source string and the destination buffer must not overlap. - * - * @param csm UCaseMap service object. - * @param dest A buffer for the result string. The result will be NUL-terminated if - * the buffer is large enough. - * The contents is undefined in case of failure. - * @param destCapacity The size of the buffer (number of bytes). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param src The original string. - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return The length of the result string, if successful - or in case of a buffer overflow, - * in which case it will be greater than destCapacity. - * - * @see u_strToUpper - * @stable ICU 3.4 - */ -U_STABLE int32_t U_EXPORT2 -ucasemap_utf8ToUpper(const UCaseMap *csm, - char *dest, int32_t destCapacity, - const char *src, int32_t srcLength, - UErrorCode *pErrorCode); - -#if !UCONFIG_NO_BREAK_ITERATION - -/** - * Titlecase a UTF-8 string. - * Casing is locale-dependent and context-sensitive. - * Titlecasing uses a break iterator to find the first characters of words - * that are to be titlecased. It titlecases those characters and lowercases - * all others. (This can be modified with ucasemap_setOptions().) - * - * Note: This function takes a non-const UCaseMap pointer because it will - * open a default break iterator if no break iterator was set yet, - * and effectively call ucasemap_setBreakIterator(); - * also because the break iterator is stateful and will be modified during - * the iteration. - * - * The titlecase break iterator can be provided to customize for arbitrary - * styles, using rules and dictionaries beyond the standard iterators. - * The standard titlecase iterator for the root locale implements the - * algorithm of Unicode TR 21. - * - * This function uses only the setUText(), first(), next() and close() methods of the - * provided break iterator. - * - * The result may be longer or shorter than the original. - * The source string and the destination buffer must not overlap. - * - * @param csm UCaseMap service object. This pointer is non-const! - * See the note above for details. - * @param dest A buffer for the result string. The result will be NUL-terminated if - * the buffer is large enough. - * The contents is undefined in case of failure. - * @param destCapacity The size of the buffer (number of bytes). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param src The original string. - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return The length of the result string, if successful - or in case of a buffer overflow, - * in which case it will be greater than destCapacity. - * - * @see u_strToTitle - * @see U_TITLECASE_NO_LOWERCASE - * @see U_TITLECASE_NO_BREAK_ADJUSTMENT - * @stable ICU 3.8 - */ -U_STABLE int32_t U_EXPORT2 -ucasemap_utf8ToTitle(UCaseMap *csm, - char *dest, int32_t destCapacity, - const char *src, int32_t srcLength, - UErrorCode *pErrorCode); - -#endif - -/** - * Case-folds the characters in a UTF-8 string. - * - * Case-folding is locale-independent and not context-sensitive, - * but there is an option for whether to include or exclude mappings for dotted I - * and dotless i that are marked with 'T' in CaseFolding.txt. - * - * The result may be longer or shorter than the original. - * The source string and the destination buffer must not overlap. - * - * @param csm UCaseMap service object. - * @param dest A buffer for the result string. The result will be NUL-terminated if - * the buffer is large enough. - * The contents is undefined in case of failure. - * @param destCapacity The size of the buffer (number of bytes). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param src The original string. - * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return The length of the result string, if successful - or in case of a buffer overflow, - * in which case it will be greater than destCapacity. - * - * @see u_strFoldCase - * @see ucasemap_setOptions - * @see U_FOLD_CASE_DEFAULT - * @see U_FOLD_CASE_EXCLUDE_SPECIAL_I - * @stable ICU 3.8 - */ -U_STABLE int32_t U_EXPORT2 -ucasemap_utf8FoldCase(const UCaseMap *csm, - char *dest, int32_t destCapacity, - const char *src, int32_t srcLength, - UErrorCode *pErrorCode); - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucat.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucat.h deleted file mode 100644 index 4d1ff3f6b2..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucat.h +++ /dev/null @@ -1,160 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (c) 2003-2004, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* Author: Alan Liu -* Created: March 19 2003 -* Since: ICU 2.6 -********************************************************************** -*/ -#ifndef UCAT_H -#define UCAT_H - -#include "unicode/utypes.h" -#include "unicode/ures.h" - -/** - * \file - * \brief C API: Message Catalog Wrappers - * - * This C API provides look-alike functions that deliberately resemble - * the POSIX catopen, catclose, and catgets functions. The underlying - * implementation is in terms of ICU resource bundles, rather than - * POSIX message catalogs. - * - * The ICU resource bundles obey standard ICU inheritance policies. - * To facilitate this, sets and messages are flattened into one tier. - * This is done by creating resource bundle keys of the form - * <set_num>%<msg_num> where set_num is the set number and msg_num is - * the message number, formatted as decimal strings. - * - * Example: Consider a message catalog containing two sets: - * - * Set 1: Message 4 = "Good morning." - * Message 5 = "Good afternoon." - * Message 7 = "Good evening." - * Message 8 = "Good night." - * Set 4: Message 14 = "Please " - * Message 19 = "Thank you." - * Message 20 = "Sincerely," - * - * The ICU resource bundle source file would, assuming it is named - * "greet.txt", would look like this: - * - * greet - * { - * 1%4 { "Good morning." } - * 1%5 { "Good afternoon." } - * 1%7 { "Good evening." } - * 1%8 { "Good night." } - * - * 4%14 { "Please " } - * 4%19 { "Thank you." } - * 4%20 { "Sincerely," } - * } - * - * The catgets function is commonly used in combination with functions - * like printf and strftime. ICU components like message format can - * be used instead, although they use a different format syntax. - * There is an ICU package, icuio, that provides some of - * the POSIX-style formatting API. - */ - -U_CDECL_BEGIN - -/** - * An ICU message catalog descriptor, analogous to nl_catd. - * - * @stable ICU 2.6 - */ -typedef UResourceBundle* u_nl_catd; - -/** - * Open and return an ICU message catalog descriptor. The descriptor - * may be passed to u_catgets() to retrieve localized strings. - * - * @param name string containing the full path pointing to the - * directory where the resources reside followed by the package name - * e.g. "/usr/resource/my_app/resources/guimessages" on a Unix system. - * If NULL, ICU default data files will be used. - * - * Unlike POSIX, environment variables are not interpolated within the - * name. - * - * @param locale the locale for which we want to open the resource. If - * NULL, the default ICU locale will be used (see uloc_getDefault). If - * strlen(locale) == 0, the root locale will be used. - * - * @param ec input/output error code. Upon output, - * U_USING_FALLBACK_WARNING indicates that a fallback locale was - * used. For example, 'de_CH' was requested, but nothing was found - * there, so 'de' was used. U_USING_DEFAULT_WARNING indicates that the - * default locale data or root locale data was used; neither the - * requested locale nor any of its fallback locales were found. - * - * @return a message catalog descriptor that may be passed to - * u_catgets(). If the ec parameter indicates success, then the caller - * is responsible for calling u_catclose() to close the message - * catalog. If the ec parameter indicates failure, then NULL will be - * returned. - * - * @stable ICU 2.6 - */ -U_STABLE u_nl_catd U_EXPORT2 -u_catopen(const char* name, const char* locale, UErrorCode* ec); - -/** - * Close an ICU message catalog, given its descriptor. - * - * @param catd a message catalog descriptor to be closed. May be NULL, - * in which case no action is taken. - * - * @stable ICU 2.6 - */ -U_STABLE void U_EXPORT2 -u_catclose(u_nl_catd catd); - -/** - * Retrieve a localized string from an ICU message catalog. - * - * @param catd a message catalog descriptor returned by u_catopen. - * - * @param set_num the message catalog set number. Sets need not be - * numbered consecutively. - * - * @param msg_num the message catalog message number within the - * set. Messages need not be numbered consecutively. - * - * @param s the default string. This is returned if the string - * specified by the set_num and msg_num is not found. It must be - * zero-terminated. - * - * @param len fill-in parameter to receive the length of the result. - * May be NULL, in which case it is ignored. - * - * @param ec input/output error code. May be U_USING_FALLBACK_WARNING - * or U_USING_DEFAULT_WARNING. U_MISSING_RESOURCE_ERROR indicates that - * the set_num/msg_num tuple does not specify a valid message string - * in this catalog. - * - * @return a pointer to a zero-terminated UChar array which lives in - * an internal buffer area, typically a memory mapped/DLL file. The - * caller must NOT delete this pointer. If the call is unsuccessful - * for any reason, then s is returned. This includes the situation in - * which ec indicates a failing error code upon entry to this - * function. - * - * @stable ICU 2.6 - */ -U_STABLE const UChar* U_EXPORT2 -u_catgets(u_nl_catd catd, int32_t set_num, int32_t msg_num, - const UChar* s, - int32_t* len, UErrorCode* ec); - -U_CDECL_END - -#endif /*UCAT_H*/ -/*eof*/ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uchar.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uchar.h deleted file mode 100644 index 2d2c5c33d7..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uchar.h +++ /dev/null @@ -1,4044 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1997-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* -* File UCHAR.H -* -* Modification History: -* -* Date Name Description -* 04/02/97 aliu Creation. -* 03/29/99 helena Updated for C APIs. -* 4/15/99 Madhu Updated for C Implementation and Javadoc -* 5/20/99 Madhu Added the function u_getVersion() -* 8/19/1999 srl Upgraded scripts to Unicode 3.0 -* 8/27/1999 schererm UCharDirection constants: U_... -* 11/11/1999 weiv added u_isalnum(), cleaned comments -* 01/11/2000 helena Renamed u_getVersion to u_getUnicodeVersion(). -****************************************************************************** -*/ - -#ifndef UCHAR_H -#define UCHAR_H - -#include "unicode/utypes.h" -#include "unicode/stringoptions.h" -#include "unicode/ucpmap.h" - -#if !defined(USET_DEFINED) && !defined(U_IN_DOXYGEN) - -#define USET_DEFINED - -/** - * USet is the C API type corresponding to C++ class UnicodeSet. - * It is forward-declared here to avoid including unicode/uset.h file if related - * APIs are not used. - * - * @see ucnv_getUnicodeSet - * @stable ICU 2.4 - */ -typedef struct USet USet; - -#endif - - -U_CDECL_BEGIN - -/*==========================================================================*/ -/* Unicode version number */ -/*==========================================================================*/ -/** - * Unicode version number, default for the current ICU version. - * The actual Unicode Character Database (UCD) data is stored in uprops.dat - * and may be generated from UCD files from a different Unicode version. - * Call u_getUnicodeVersion to get the actual Unicode version of the data. - * - * @see u_getUnicodeVersion - * @stable ICU 2.0 - */ -#define U_UNICODE_VERSION "12.1" - -/** - * \file - * \brief C API: Unicode Properties - * - * This C API provides low-level access to the Unicode Character Database. - * In addition to raw property values, some convenience functions calculate - * derived properties, for example for Java-style programming. - * - * Unicode assigns each code point (not just assigned character) values for - * many properties. - * Most of them are simple boolean flags, or constants from a small enumerated list. - * For some properties, values are strings or other relatively more complex types. - * - * For more information see - * "About the Unicode Character Database" (http://www.unicode.org/ucd/) - * and the ICU User Guide chapter on Properties (http://icu-project.org/userguide/properties.html). - * - * Many properties are accessible via generic functions that take a UProperty selector. - * - u_hasBinaryProperty() returns a binary value (TRUE/FALSE) per property and code point. - * - u_getIntPropertyValue() returns an integer value per property and code point. - * For each supported enumerated or catalog property, there is - * an enum type for all of the property's values, and - * u_getIntPropertyValue() returns the numeric values of those constants. - * - u_getBinaryPropertySet() returns a set for each ICU-supported binary property with - * all code points for which the property is true. - * - u_getIntPropertyMap() returns a map for each - * ICU-supported enumerated/catalog/int-valued property which - * maps all Unicode code points to their values for that property. - * - * Many functions are designed to match java.lang.Character functions. - * See the individual function documentation, - * and see the JDK 1.4 java.lang.Character documentation - * at http://java.sun.com/j2se/1.4/docs/api/java/lang/Character.html - * - * There are also functions that provide easy migration from C/POSIX functions - * like isblank(). Their use is generally discouraged because the C/POSIX - * standards do not define their semantics beyond the ASCII range, which means - * that different implementations exhibit very different behavior. - * Instead, Unicode properties should be used directly. - * - * There are also only a few, broad C/POSIX character classes, and they tend - * to be used for conflicting purposes. For example, the "isalpha()" class - * is sometimes used to determine word boundaries, while a more sophisticated - * approach would at least distinguish initial letters from continuation - * characters (the latter including combining marks). - * (In ICU, BreakIterator is the most sophisticated API for word boundaries.) - * Another example: There is no "istitle()" class for titlecase characters. - * - * ICU 3.4 and later provides API access for all twelve C/POSIX character classes. - * ICU implements them according to the Standard Recommendations in - * Annex C: Compatibility Properties of UTS #18 Unicode Regular Expressions - * (http://www.unicode.org/reports/tr18/#Compatibility_Properties). - * - * API access for C/POSIX character classes is as follows: - * - alpha: u_isUAlphabetic(c) or u_hasBinaryProperty(c, UCHAR_ALPHABETIC) - * - lower: u_isULowercase(c) or u_hasBinaryProperty(c, UCHAR_LOWERCASE) - * - upper: u_isUUppercase(c) or u_hasBinaryProperty(c, UCHAR_UPPERCASE) - * - punct: u_ispunct(c) - * - digit: u_isdigit(c) or u_charType(c)==U_DECIMAL_DIGIT_NUMBER - * - xdigit: u_isxdigit(c) or u_hasBinaryProperty(c, UCHAR_POSIX_XDIGIT) - * - alnum: u_hasBinaryProperty(c, UCHAR_POSIX_ALNUM) - * - space: u_isUWhiteSpace(c) or u_hasBinaryProperty(c, UCHAR_WHITE_SPACE) - * - blank: u_isblank(c) or u_hasBinaryProperty(c, UCHAR_POSIX_BLANK) - * - cntrl: u_charType(c)==U_CONTROL_CHAR - * - graph: u_hasBinaryProperty(c, UCHAR_POSIX_GRAPH) - * - print: u_hasBinaryProperty(c, UCHAR_POSIX_PRINT) - * - * Note: Some of the u_isxyz() functions in uchar.h predate, and do not match, - * the Standard Recommendations in UTS #18. Instead, they match Java - * functions according to their API documentation. - * - * \htmlonly - * The C/POSIX character classes are also available in UnicodeSet patterns, - * using patterns like [:graph:] or \p{graph}. - * \endhtmlonly - * - * Note: There are several ICU whitespace functions. - * Comparison: - * - u_isUWhiteSpace=UCHAR_WHITE_SPACE: Unicode White_Space property; - * most of general categories "Z" (separators) + most whitespace ISO controls - * (including no-break spaces, but excluding IS1..IS4) - * - u_isWhitespace: Java isWhitespace; Z + whitespace ISO controls but excluding no-break spaces - * - u_isJavaSpaceChar: Java isSpaceChar; just Z (including no-break spaces) - * - u_isspace: Z + whitespace ISO controls (including no-break spaces) - * - u_isblank: "horizontal spaces" = TAB + Zs - */ - -/** - * Constants. - */ - -/** The lowest Unicode code point value. Code points are non-negative. @stable ICU 2.0 */ -#define UCHAR_MIN_VALUE 0 - -/** - * The highest Unicode code point value (scalar value) according to - * The Unicode Standard. This is a 21-bit value (20.1 bits, rounded up). - * For a single character, UChar32 is a simple type that can hold any code point value. - * - * @see UChar32 - * @stable ICU 2.0 - */ -#define UCHAR_MAX_VALUE 0x10ffff - -/** - * Get a single-bit bit set (a flag) from a bit number 0..31. - * @stable ICU 2.1 - */ -#define U_MASK(x) ((uint32_t)1<<(x)) - -/** - * Selection constants for Unicode properties. - * These constants are used in functions like u_hasBinaryProperty to select - * one of the Unicode properties. - * - * The properties APIs are intended to reflect Unicode properties as defined - * in the Unicode Character Database (UCD) and Unicode Technical Reports (UTR). - * - * For details about the properties see - * UAX #44: Unicode Character Database (http://www.unicode.org/reports/tr44/). - * - * Important: If ICU is built with UCD files from Unicode versions below, e.g., 3.2, - * then properties marked with "new in Unicode 3.2" are not or not fully available. - * Check u_getUnicodeVersion to be sure. - * - * @see u_hasBinaryProperty - * @see u_getIntPropertyValue - * @see u_getUnicodeVersion - * @stable ICU 2.1 - */ -typedef enum UProperty { - /* - * Note: UProperty constants are parsed by preparseucd.py. - * It matches lines like - * UCHAR_=, - */ - - /* Note: Place UCHAR_ALPHABETIC before UCHAR_BINARY_START so that - debuggers display UCHAR_ALPHABETIC as the symbolic name for 0, - rather than UCHAR_BINARY_START. Likewise for other *_START - identifiers. */ - - /** Binary property Alphabetic. Same as u_isUAlphabetic, different from u_isalpha. - Lu+Ll+Lt+Lm+Lo+Nl+Other_Alphabetic @stable ICU 2.1 */ - UCHAR_ALPHABETIC=0, - /** First constant for binary Unicode properties. @stable ICU 2.1 */ - UCHAR_BINARY_START=UCHAR_ALPHABETIC, - /** Binary property ASCII_Hex_Digit. 0-9 A-F a-f @stable ICU 2.1 */ - UCHAR_ASCII_HEX_DIGIT=1, - /** Binary property Bidi_Control. - Format controls which have specific functions - in the Bidi Algorithm. @stable ICU 2.1 */ - UCHAR_BIDI_CONTROL=2, - /** Binary property Bidi_Mirrored. - Characters that may change display in RTL text. - Same as u_isMirrored. - See Bidi Algorithm, UTR 9. @stable ICU 2.1 */ - UCHAR_BIDI_MIRRORED=3, - /** Binary property Dash. Variations of dashes. @stable ICU 2.1 */ - UCHAR_DASH=4, - /** Binary property Default_Ignorable_Code_Point (new in Unicode 3.2). - Ignorable in most processing. - <2060..206F, FFF0..FFFB, E0000..E0FFF>+Other_Default_Ignorable_Code_Point+(Cf+Cc+Cs-White_Space) @stable ICU 2.1 */ - UCHAR_DEFAULT_IGNORABLE_CODE_POINT=5, - /** Binary property Deprecated (new in Unicode 3.2). - The usage of deprecated characters is strongly discouraged. @stable ICU 2.1 */ - UCHAR_DEPRECATED=6, - /** Binary property Diacritic. Characters that linguistically modify - the meaning of another character to which they apply. @stable ICU 2.1 */ - UCHAR_DIACRITIC=7, - /** Binary property Extender. - Extend the value or shape of a preceding alphabetic character, - e.g., length and iteration marks. @stable ICU 2.1 */ - UCHAR_EXTENDER=8, - /** Binary property Full_Composition_Exclusion. - CompositionExclusions.txt+Singleton Decompositions+ - Non-Starter Decompositions. @stable ICU 2.1 */ - UCHAR_FULL_COMPOSITION_EXCLUSION=9, - /** Binary property Grapheme_Base (new in Unicode 3.2). - For programmatic determination of grapheme cluster boundaries. - [0..10FFFF]-Cc-Cf-Cs-Co-Cn-Zl-Zp-Grapheme_Link-Grapheme_Extend-CGJ @stable ICU 2.1 */ - UCHAR_GRAPHEME_BASE=10, - /** Binary property Grapheme_Extend (new in Unicode 3.2). - For programmatic determination of grapheme cluster boundaries. - Me+Mn+Mc+Other_Grapheme_Extend-Grapheme_Link-CGJ @stable ICU 2.1 */ - UCHAR_GRAPHEME_EXTEND=11, - /** Binary property Grapheme_Link (new in Unicode 3.2). - For programmatic determination of grapheme cluster boundaries. @stable ICU 2.1 */ - UCHAR_GRAPHEME_LINK=12, - /** Binary property Hex_Digit. - Characters commonly used for hexadecimal numbers. @stable ICU 2.1 */ - UCHAR_HEX_DIGIT=13, - /** Binary property Hyphen. Dashes used to mark connections - between pieces of words, plus the Katakana middle dot. @stable ICU 2.1 */ - UCHAR_HYPHEN=14, - /** Binary property ID_Continue. - Characters that can continue an identifier. - DerivedCoreProperties.txt also says "NOTE: Cf characters should be filtered out." - ID_Start+Mn+Mc+Nd+Pc @stable ICU 2.1 */ - UCHAR_ID_CONTINUE=15, - /** Binary property ID_Start. - Characters that can start an identifier. - Lu+Ll+Lt+Lm+Lo+Nl @stable ICU 2.1 */ - UCHAR_ID_START=16, - /** Binary property Ideographic. - CJKV ideographs. @stable ICU 2.1 */ - UCHAR_IDEOGRAPHIC=17, - /** Binary property IDS_Binary_Operator (new in Unicode 3.2). - For programmatic determination of - Ideographic Description Sequences. @stable ICU 2.1 */ - UCHAR_IDS_BINARY_OPERATOR=18, - /** Binary property IDS_Trinary_Operator (new in Unicode 3.2). - For programmatic determination of - Ideographic Description Sequences. @stable ICU 2.1 */ - UCHAR_IDS_TRINARY_OPERATOR=19, - /** Binary property Join_Control. - Format controls for cursive joining and ligation. @stable ICU 2.1 */ - UCHAR_JOIN_CONTROL=20, - /** Binary property Logical_Order_Exception (new in Unicode 3.2). - Characters that do not use logical order and - require special handling in most processing. @stable ICU 2.1 */ - UCHAR_LOGICAL_ORDER_EXCEPTION=21, - /** Binary property Lowercase. Same as u_isULowercase, different from u_islower. - Ll+Other_Lowercase @stable ICU 2.1 */ - UCHAR_LOWERCASE=22, - /** Binary property Math. Sm+Other_Math @stable ICU 2.1 */ - UCHAR_MATH=23, - /** Binary property Noncharacter_Code_Point. - Code points that are explicitly defined as illegal - for the encoding of characters. @stable ICU 2.1 */ - UCHAR_NONCHARACTER_CODE_POINT=24, - /** Binary property Quotation_Mark. @stable ICU 2.1 */ - UCHAR_QUOTATION_MARK=25, - /** Binary property Radical (new in Unicode 3.2). - For programmatic determination of - Ideographic Description Sequences. @stable ICU 2.1 */ - UCHAR_RADICAL=26, - /** Binary property Soft_Dotted (new in Unicode 3.2). - Characters with a "soft dot", like i or j. - An accent placed on these characters causes - the dot to disappear. @stable ICU 2.1 */ - UCHAR_SOFT_DOTTED=27, - /** Binary property Terminal_Punctuation. - Punctuation characters that generally mark - the end of textual units. @stable ICU 2.1 */ - UCHAR_TERMINAL_PUNCTUATION=28, - /** Binary property Unified_Ideograph (new in Unicode 3.2). - For programmatic determination of - Ideographic Description Sequences. @stable ICU 2.1 */ - UCHAR_UNIFIED_IDEOGRAPH=29, - /** Binary property Uppercase. Same as u_isUUppercase, different from u_isupper. - Lu+Other_Uppercase @stable ICU 2.1 */ - UCHAR_UPPERCASE=30, - /** Binary property White_Space. - Same as u_isUWhiteSpace, different from u_isspace and u_isWhitespace. - Space characters+TAB+CR+LF-ZWSP-ZWNBSP @stable ICU 2.1 */ - UCHAR_WHITE_SPACE=31, - /** Binary property XID_Continue. - ID_Continue modified to allow closure under - normalization forms NFKC and NFKD. @stable ICU 2.1 */ - UCHAR_XID_CONTINUE=32, - /** Binary property XID_Start. ID_Start modified to allow - closure under normalization forms NFKC and NFKD. @stable ICU 2.1 */ - UCHAR_XID_START=33, - /** Binary property Case_Sensitive. Either the source of a case - mapping or _in_ the target of a case mapping. Not the same as - the general category Cased_Letter. @stable ICU 2.6 */ - UCHAR_CASE_SENSITIVE=34, - /** Binary property STerm (new in Unicode 4.0.1). - Sentence Terminal. Used in UAX #29: Text Boundaries - (http://www.unicode.org/reports/tr29/) - @stable ICU 3.0 */ - UCHAR_S_TERM=35, - /** Binary property Variation_Selector (new in Unicode 4.0.1). - Indicates all those characters that qualify as Variation Selectors. - For details on the behavior of these characters, - see StandardizedVariants.html and 15.6 Variation Selectors. - @stable ICU 3.0 */ - UCHAR_VARIATION_SELECTOR=36, - /** Binary property NFD_Inert. - ICU-specific property for characters that are inert under NFD, - i.e., they do not interact with adjacent characters. - See the documentation for the Normalizer2 class and the - Normalizer2::isInert() method. - @stable ICU 3.0 */ - UCHAR_NFD_INERT=37, - /** Binary property NFKD_Inert. - ICU-specific property for characters that are inert under NFKD, - i.e., they do not interact with adjacent characters. - See the documentation for the Normalizer2 class and the - Normalizer2::isInert() method. - @stable ICU 3.0 */ - UCHAR_NFKD_INERT=38, - /** Binary property NFC_Inert. - ICU-specific property for characters that are inert under NFC, - i.e., they do not interact with adjacent characters. - See the documentation for the Normalizer2 class and the - Normalizer2::isInert() method. - @stable ICU 3.0 */ - UCHAR_NFC_INERT=39, - /** Binary property NFKC_Inert. - ICU-specific property for characters that are inert under NFKC, - i.e., they do not interact with adjacent characters. - See the documentation for the Normalizer2 class and the - Normalizer2::isInert() method. - @stable ICU 3.0 */ - UCHAR_NFKC_INERT=40, - /** Binary Property Segment_Starter. - ICU-specific property for characters that are starters in terms of - Unicode normalization and combining character sequences. - They have ccc=0 and do not occur in non-initial position of the - canonical decomposition of any character - (like a-umlaut in NFD and a Jamo T in an NFD(Hangul LVT)). - ICU uses this property for segmenting a string for generating a set of - canonically equivalent strings, e.g. for canonical closure while - processing collation tailoring rules. - @stable ICU 3.0 */ - UCHAR_SEGMENT_STARTER=41, - /** Binary property Pattern_Syntax (new in Unicode 4.1). - See UAX #31 Identifier and Pattern Syntax - (http://www.unicode.org/reports/tr31/) - @stable ICU 3.4 */ - UCHAR_PATTERN_SYNTAX=42, - /** Binary property Pattern_White_Space (new in Unicode 4.1). - See UAX #31 Identifier and Pattern Syntax - (http://www.unicode.org/reports/tr31/) - @stable ICU 3.4 */ - UCHAR_PATTERN_WHITE_SPACE=43, - /** Binary property alnum (a C/POSIX character class). - Implemented according to the UTS #18 Annex C Standard Recommendation. - See the uchar.h file documentation. - @stable ICU 3.4 */ - UCHAR_POSIX_ALNUM=44, - /** Binary property blank (a C/POSIX character class). - Implemented according to the UTS #18 Annex C Standard Recommendation. - See the uchar.h file documentation. - @stable ICU 3.4 */ - UCHAR_POSIX_BLANK=45, - /** Binary property graph (a C/POSIX character class). - Implemented according to the UTS #18 Annex C Standard Recommendation. - See the uchar.h file documentation. - @stable ICU 3.4 */ - UCHAR_POSIX_GRAPH=46, - /** Binary property print (a C/POSIX character class). - Implemented according to the UTS #18 Annex C Standard Recommendation. - See the uchar.h file documentation. - @stable ICU 3.4 */ - UCHAR_POSIX_PRINT=47, - /** Binary property xdigit (a C/POSIX character class). - Implemented according to the UTS #18 Annex C Standard Recommendation. - See the uchar.h file documentation. - @stable ICU 3.4 */ - UCHAR_POSIX_XDIGIT=48, - /** Binary property Cased. For Lowercase, Uppercase and Titlecase characters. @stable ICU 4.4 */ - UCHAR_CASED=49, - /** Binary property Case_Ignorable. Used in context-sensitive case mappings. @stable ICU 4.4 */ - UCHAR_CASE_IGNORABLE=50, - /** Binary property Changes_When_Lowercased. @stable ICU 4.4 */ - UCHAR_CHANGES_WHEN_LOWERCASED=51, - /** Binary property Changes_When_Uppercased. @stable ICU 4.4 */ - UCHAR_CHANGES_WHEN_UPPERCASED=52, - /** Binary property Changes_When_Titlecased. @stable ICU 4.4 */ - UCHAR_CHANGES_WHEN_TITLECASED=53, - /** Binary property Changes_When_Casefolded. @stable ICU 4.4 */ - UCHAR_CHANGES_WHEN_CASEFOLDED=54, - /** Binary property Changes_When_Casemapped. @stable ICU 4.4 */ - UCHAR_CHANGES_WHEN_CASEMAPPED=55, - /** Binary property Changes_When_NFKC_Casefolded. @stable ICU 4.4 */ - UCHAR_CHANGES_WHEN_NFKC_CASEFOLDED=56, - /** - * Binary property Emoji. - * See http://www.unicode.org/reports/tr51/#Emoji_Properties - * - * @stable ICU 57 - */ - UCHAR_EMOJI=57, - /** - * Binary property Emoji_Presentation. - * See http://www.unicode.org/reports/tr51/#Emoji_Properties - * - * @stable ICU 57 - */ - UCHAR_EMOJI_PRESENTATION=58, - /** - * Binary property Emoji_Modifier. - * See http://www.unicode.org/reports/tr51/#Emoji_Properties - * - * @stable ICU 57 - */ - UCHAR_EMOJI_MODIFIER=59, - /** - * Binary property Emoji_Modifier_Base. - * See http://www.unicode.org/reports/tr51/#Emoji_Properties - * - * @stable ICU 57 - */ - UCHAR_EMOJI_MODIFIER_BASE=60, - /** - * Binary property Emoji_Component. - * See http://www.unicode.org/reports/tr51/#Emoji_Properties - * - * @stable ICU 60 - */ - UCHAR_EMOJI_COMPONENT=61, - /** - * Binary property Regional_Indicator. - * @stable ICU 60 - */ - UCHAR_REGIONAL_INDICATOR=62, - /** - * Binary property Prepended_Concatenation_Mark. - * @stable ICU 60 - */ - UCHAR_PREPENDED_CONCATENATION_MARK=63, - /** - * Binary property Extended_Pictographic. - * See http://www.unicode.org/reports/tr51/#Emoji_Properties - * - * @stable ICU 62 - */ - UCHAR_EXTENDED_PICTOGRAPHIC=64, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the last constant for binary Unicode properties. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UCHAR_BINARY_LIMIT, -#endif // U_HIDE_DEPRECATED_API - - /** Enumerated property Bidi_Class. - Same as u_charDirection, returns UCharDirection values. @stable ICU 2.2 */ - UCHAR_BIDI_CLASS=0x1000, - /** First constant for enumerated/integer Unicode properties. @stable ICU 2.2 */ - UCHAR_INT_START=UCHAR_BIDI_CLASS, - /** Enumerated property Block. - Same as ublock_getCode, returns UBlockCode values. @stable ICU 2.2 */ - UCHAR_BLOCK=0x1001, - /** Enumerated property Canonical_Combining_Class. - Same as u_getCombiningClass, returns 8-bit numeric values. @stable ICU 2.2 */ - UCHAR_CANONICAL_COMBINING_CLASS=0x1002, - /** Enumerated property Decomposition_Type. - Returns UDecompositionType values. @stable ICU 2.2 */ - UCHAR_DECOMPOSITION_TYPE=0x1003, - /** Enumerated property East_Asian_Width. - See http://www.unicode.org/reports/tr11/ - Returns UEastAsianWidth values. @stable ICU 2.2 */ - UCHAR_EAST_ASIAN_WIDTH=0x1004, - /** Enumerated property General_Category. - Same as u_charType, returns UCharCategory values. @stable ICU 2.2 */ - UCHAR_GENERAL_CATEGORY=0x1005, - /** Enumerated property Joining_Group. - Returns UJoiningGroup values. @stable ICU 2.2 */ - UCHAR_JOINING_GROUP=0x1006, - /** Enumerated property Joining_Type. - Returns UJoiningType values. @stable ICU 2.2 */ - UCHAR_JOINING_TYPE=0x1007, - /** Enumerated property Line_Break. - Returns ULineBreak values. @stable ICU 2.2 */ - UCHAR_LINE_BREAK=0x1008, - /** Enumerated property Numeric_Type. - Returns UNumericType values. @stable ICU 2.2 */ - UCHAR_NUMERIC_TYPE=0x1009, - /** Enumerated property Script. - Same as uscript_getScript, returns UScriptCode values. @stable ICU 2.2 */ - UCHAR_SCRIPT=0x100A, - /** Enumerated property Hangul_Syllable_Type, new in Unicode 4. - Returns UHangulSyllableType values. @stable ICU 2.6 */ - UCHAR_HANGUL_SYLLABLE_TYPE=0x100B, - /** Enumerated property NFD_Quick_Check. - Returns UNormalizationCheckResult values. @stable ICU 3.0 */ - UCHAR_NFD_QUICK_CHECK=0x100C, - /** Enumerated property NFKD_Quick_Check. - Returns UNormalizationCheckResult values. @stable ICU 3.0 */ - UCHAR_NFKD_QUICK_CHECK=0x100D, - /** Enumerated property NFC_Quick_Check. - Returns UNormalizationCheckResult values. @stable ICU 3.0 */ - UCHAR_NFC_QUICK_CHECK=0x100E, - /** Enumerated property NFKC_Quick_Check. - Returns UNormalizationCheckResult values. @stable ICU 3.0 */ - UCHAR_NFKC_QUICK_CHECK=0x100F, - /** Enumerated property Lead_Canonical_Combining_Class. - ICU-specific property for the ccc of the first code point - of the decomposition, or lccc(c)=ccc(NFD(c)[0]). - Useful for checking for canonically ordered text; - see UNORM_FCD and http://www.unicode.org/notes/tn5/#FCD . - Returns 8-bit numeric values like UCHAR_CANONICAL_COMBINING_CLASS. @stable ICU 3.0 */ - UCHAR_LEAD_CANONICAL_COMBINING_CLASS=0x1010, - /** Enumerated property Trail_Canonical_Combining_Class. - ICU-specific property for the ccc of the last code point - of the decomposition, or tccc(c)=ccc(NFD(c)[last]). - Useful for checking for canonically ordered text; - see UNORM_FCD and http://www.unicode.org/notes/tn5/#FCD . - Returns 8-bit numeric values like UCHAR_CANONICAL_COMBINING_CLASS. @stable ICU 3.0 */ - UCHAR_TRAIL_CANONICAL_COMBINING_CLASS=0x1011, - /** Enumerated property Grapheme_Cluster_Break (new in Unicode 4.1). - Used in UAX #29: Text Boundaries - (http://www.unicode.org/reports/tr29/) - Returns UGraphemeClusterBreak values. @stable ICU 3.4 */ - UCHAR_GRAPHEME_CLUSTER_BREAK=0x1012, - /** Enumerated property Sentence_Break (new in Unicode 4.1). - Used in UAX #29: Text Boundaries - (http://www.unicode.org/reports/tr29/) - Returns USentenceBreak values. @stable ICU 3.4 */ - UCHAR_SENTENCE_BREAK=0x1013, - /** Enumerated property Word_Break (new in Unicode 4.1). - Used in UAX #29: Text Boundaries - (http://www.unicode.org/reports/tr29/) - Returns UWordBreakValues values. @stable ICU 3.4 */ - UCHAR_WORD_BREAK=0x1014, - /** Enumerated property Bidi_Paired_Bracket_Type (new in Unicode 6.3). - Used in UAX #9: Unicode Bidirectional Algorithm - (http://www.unicode.org/reports/tr9/) - Returns UBidiPairedBracketType values. @stable ICU 52 */ - UCHAR_BIDI_PAIRED_BRACKET_TYPE=0x1015, - /** - * Enumerated property Indic_Positional_Category. - * New in Unicode 6.0 as provisional property Indic_Matra_Category; - * renamed and changed to informative in Unicode 8.0. - * See http://www.unicode.org/reports/tr44/#IndicPositionalCategory.txt - * @stable ICU 63 - */ - UCHAR_INDIC_POSITIONAL_CATEGORY=0x1016, - /** - * Enumerated property Indic_Syllabic_Category. - * New in Unicode 6.0 as provisional; informative since Unicode 8.0. - * See http://www.unicode.org/reports/tr44/#IndicSyllabicCategory.txt - * @stable ICU 63 - */ - UCHAR_INDIC_SYLLABIC_CATEGORY=0x1017, - /** - * Enumerated property Vertical_Orientation. - * Used for UAX #50 Unicode Vertical Text Layout (https://www.unicode.org/reports/tr50/). - * New as a UCD property in Unicode 10.0. - * @stable ICU 63 - */ - UCHAR_VERTICAL_ORIENTATION=0x1018, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the last constant for enumerated/integer Unicode properties. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UCHAR_INT_LIMIT=0x1019, -#endif // U_HIDE_DEPRECATED_API - - /** Bitmask property General_Category_Mask. - This is the General_Category property returned as a bit mask. - When used in u_getIntPropertyValue(c), same as U_MASK(u_charType(c)), - returns bit masks for UCharCategory values where exactly one bit is set. - When used with u_getPropertyValueName() and u_getPropertyValueEnum(), - a multi-bit mask is used for sets of categories like "Letters". - Mask values should be cast to uint32_t. - @stable ICU 2.4 */ - UCHAR_GENERAL_CATEGORY_MASK=0x2000, - /** First constant for bit-mask Unicode properties. @stable ICU 2.4 */ - UCHAR_MASK_START=UCHAR_GENERAL_CATEGORY_MASK, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the last constant for bit-mask Unicode properties. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UCHAR_MASK_LIMIT=0x2001, -#endif // U_HIDE_DEPRECATED_API - - /** Double property Numeric_Value. - Corresponds to u_getNumericValue. @stable ICU 2.4 */ - UCHAR_NUMERIC_VALUE=0x3000, - /** First constant for double Unicode properties. @stable ICU 2.4 */ - UCHAR_DOUBLE_START=UCHAR_NUMERIC_VALUE, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the last constant for double Unicode properties. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UCHAR_DOUBLE_LIMIT=0x3001, -#endif // U_HIDE_DEPRECATED_API - - /** String property Age. - Corresponds to u_charAge. @stable ICU 2.4 */ - UCHAR_AGE=0x4000, - /** First constant for string Unicode properties. @stable ICU 2.4 */ - UCHAR_STRING_START=UCHAR_AGE, - /** String property Bidi_Mirroring_Glyph. - Corresponds to u_charMirror. @stable ICU 2.4 */ - UCHAR_BIDI_MIRRORING_GLYPH=0x4001, - /** String property Case_Folding. - Corresponds to u_strFoldCase in ustring.h. @stable ICU 2.4 */ - UCHAR_CASE_FOLDING=0x4002, -#ifndef U_HIDE_DEPRECATED_API - /** Deprecated string property ISO_Comment. - Corresponds to u_getISOComment. @deprecated ICU 49 */ - UCHAR_ISO_COMMENT=0x4003, -#endif /* U_HIDE_DEPRECATED_API */ - /** String property Lowercase_Mapping. - Corresponds to u_strToLower in ustring.h. @stable ICU 2.4 */ - UCHAR_LOWERCASE_MAPPING=0x4004, - /** String property Name. - Corresponds to u_charName. @stable ICU 2.4 */ - UCHAR_NAME=0x4005, - /** String property Simple_Case_Folding. - Corresponds to u_foldCase. @stable ICU 2.4 */ - UCHAR_SIMPLE_CASE_FOLDING=0x4006, - /** String property Simple_Lowercase_Mapping. - Corresponds to u_tolower. @stable ICU 2.4 */ - UCHAR_SIMPLE_LOWERCASE_MAPPING=0x4007, - /** String property Simple_Titlecase_Mapping. - Corresponds to u_totitle. @stable ICU 2.4 */ - UCHAR_SIMPLE_TITLECASE_MAPPING=0x4008, - /** String property Simple_Uppercase_Mapping. - Corresponds to u_toupper. @stable ICU 2.4 */ - UCHAR_SIMPLE_UPPERCASE_MAPPING=0x4009, - /** String property Titlecase_Mapping. - Corresponds to u_strToTitle in ustring.h. @stable ICU 2.4 */ - UCHAR_TITLECASE_MAPPING=0x400A, -#ifndef U_HIDE_DEPRECATED_API - /** String property Unicode_1_Name. - This property is of little practical value. - Beginning with ICU 49, ICU APIs return an empty string for this property. - Corresponds to u_charName(U_UNICODE_10_CHAR_NAME). @deprecated ICU 49 */ - UCHAR_UNICODE_1_NAME=0x400B, -#endif /* U_HIDE_DEPRECATED_API */ - /** String property Uppercase_Mapping. - Corresponds to u_strToUpper in ustring.h. @stable ICU 2.4 */ - UCHAR_UPPERCASE_MAPPING=0x400C, - /** String property Bidi_Paired_Bracket (new in Unicode 6.3). - Corresponds to u_getBidiPairedBracket. @stable ICU 52 */ - UCHAR_BIDI_PAIRED_BRACKET=0x400D, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the last constant for string Unicode properties. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UCHAR_STRING_LIMIT=0x400E, -#endif // U_HIDE_DEPRECATED_API - - /** Miscellaneous property Script_Extensions (new in Unicode 6.0). - Some characters are commonly used in multiple scripts. - For more information, see UAX #24: http://www.unicode.org/reports/tr24/. - Corresponds to uscript_hasScript and uscript_getScriptExtensions in uscript.h. - @stable ICU 4.6 */ - UCHAR_SCRIPT_EXTENSIONS=0x7000, - /** First constant for Unicode properties with unusual value types. @stable ICU 4.6 */ - UCHAR_OTHER_PROPERTY_START=UCHAR_SCRIPT_EXTENSIONS, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the last constant for Unicode properties with unusual value types. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UCHAR_OTHER_PROPERTY_LIMIT=0x7001, -#endif // U_HIDE_DEPRECATED_API - - /** Represents a nonexistent or invalid property or property value. @stable ICU 2.4 */ - UCHAR_INVALID_CODE = -1 -} UProperty; - -/** - * Data for enumerated Unicode general category types. - * See http://www.unicode.org/Public/UNIDATA/UnicodeData.html . - * @stable ICU 2.0 - */ -typedef enum UCharCategory -{ - /* - * Note: UCharCategory constants and their API comments are parsed by preparseucd.py. - * It matches pairs of lines like - * / ** comment... * / - * U_<[A-Z_]+> = , - */ - - /** Non-category for unassigned and non-character code points. @stable ICU 2.0 */ - U_UNASSIGNED = 0, - /** Cn "Other, Not Assigned (no characters in [UnicodeData.txt] have this property)" (same as U_UNASSIGNED!) @stable ICU 2.0 */ - U_GENERAL_OTHER_TYPES = 0, - /** Lu @stable ICU 2.0 */ - U_UPPERCASE_LETTER = 1, - /** Ll @stable ICU 2.0 */ - U_LOWERCASE_LETTER = 2, - /** Lt @stable ICU 2.0 */ - U_TITLECASE_LETTER = 3, - /** Lm @stable ICU 2.0 */ - U_MODIFIER_LETTER = 4, - /** Lo @stable ICU 2.0 */ - U_OTHER_LETTER = 5, - /** Mn @stable ICU 2.0 */ - U_NON_SPACING_MARK = 6, - /** Me @stable ICU 2.0 */ - U_ENCLOSING_MARK = 7, - /** Mc @stable ICU 2.0 */ - U_COMBINING_SPACING_MARK = 8, - /** Nd @stable ICU 2.0 */ - U_DECIMAL_DIGIT_NUMBER = 9, - /** Nl @stable ICU 2.0 */ - U_LETTER_NUMBER = 10, - /** No @stable ICU 2.0 */ - U_OTHER_NUMBER = 11, - /** Zs @stable ICU 2.0 */ - U_SPACE_SEPARATOR = 12, - /** Zl @stable ICU 2.0 */ - U_LINE_SEPARATOR = 13, - /** Zp @stable ICU 2.0 */ - U_PARAGRAPH_SEPARATOR = 14, - /** Cc @stable ICU 2.0 */ - U_CONTROL_CHAR = 15, - /** Cf @stable ICU 2.0 */ - U_FORMAT_CHAR = 16, - /** Co @stable ICU 2.0 */ - U_PRIVATE_USE_CHAR = 17, - /** Cs @stable ICU 2.0 */ - U_SURROGATE = 18, - /** Pd @stable ICU 2.0 */ - U_DASH_PUNCTUATION = 19, - /** Ps @stable ICU 2.0 */ - U_START_PUNCTUATION = 20, - /** Pe @stable ICU 2.0 */ - U_END_PUNCTUATION = 21, - /** Pc @stable ICU 2.0 */ - U_CONNECTOR_PUNCTUATION = 22, - /** Po @stable ICU 2.0 */ - U_OTHER_PUNCTUATION = 23, - /** Sm @stable ICU 2.0 */ - U_MATH_SYMBOL = 24, - /** Sc @stable ICU 2.0 */ - U_CURRENCY_SYMBOL = 25, - /** Sk @stable ICU 2.0 */ - U_MODIFIER_SYMBOL = 26, - /** So @stable ICU 2.0 */ - U_OTHER_SYMBOL = 27, - /** Pi @stable ICU 2.0 */ - U_INITIAL_PUNCTUATION = 28, - /** Pf @stable ICU 2.0 */ - U_FINAL_PUNCTUATION = 29, - /** - * One higher than the last enum UCharCategory constant. - * This numeric value is stable (will not change), see - * http://www.unicode.org/policies/stability_policy.html#Property_Value - * - * @stable ICU 2.0 - */ - U_CHAR_CATEGORY_COUNT -} UCharCategory; - -/** - * U_GC_XX_MASK constants are bit flags corresponding to Unicode - * general category values. - * For each category, the nth bit is set if the numeric value of the - * corresponding UCharCategory constant is n. - * - * There are also some U_GC_Y_MASK constants for groups of general categories - * like L for all letter categories. - * - * @see u_charType - * @see U_GET_GC_MASK - * @see UCharCategory - * @stable ICU 2.1 - */ -#define U_GC_CN_MASK U_MASK(U_GENERAL_OTHER_TYPES) - -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_LU_MASK U_MASK(U_UPPERCASE_LETTER) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_LL_MASK U_MASK(U_LOWERCASE_LETTER) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_LT_MASK U_MASK(U_TITLECASE_LETTER) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_LM_MASK U_MASK(U_MODIFIER_LETTER) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_LO_MASK U_MASK(U_OTHER_LETTER) - -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_MN_MASK U_MASK(U_NON_SPACING_MARK) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_ME_MASK U_MASK(U_ENCLOSING_MARK) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_MC_MASK U_MASK(U_COMBINING_SPACING_MARK) - -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_ND_MASK U_MASK(U_DECIMAL_DIGIT_NUMBER) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_NL_MASK U_MASK(U_LETTER_NUMBER) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_NO_MASK U_MASK(U_OTHER_NUMBER) - -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_ZS_MASK U_MASK(U_SPACE_SEPARATOR) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_ZL_MASK U_MASK(U_LINE_SEPARATOR) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_ZP_MASK U_MASK(U_PARAGRAPH_SEPARATOR) - -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_CC_MASK U_MASK(U_CONTROL_CHAR) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_CF_MASK U_MASK(U_FORMAT_CHAR) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_CO_MASK U_MASK(U_PRIVATE_USE_CHAR) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_CS_MASK U_MASK(U_SURROGATE) - -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_PD_MASK U_MASK(U_DASH_PUNCTUATION) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_PS_MASK U_MASK(U_START_PUNCTUATION) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_PE_MASK U_MASK(U_END_PUNCTUATION) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_PC_MASK U_MASK(U_CONNECTOR_PUNCTUATION) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_PO_MASK U_MASK(U_OTHER_PUNCTUATION) - -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_SM_MASK U_MASK(U_MATH_SYMBOL) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_SC_MASK U_MASK(U_CURRENCY_SYMBOL) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_SK_MASK U_MASK(U_MODIFIER_SYMBOL) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_SO_MASK U_MASK(U_OTHER_SYMBOL) - -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_PI_MASK U_MASK(U_INITIAL_PUNCTUATION) -/** Mask constant for a UCharCategory. @stable ICU 2.1 */ -#define U_GC_PF_MASK U_MASK(U_FINAL_PUNCTUATION) - - -/** Mask constant for multiple UCharCategory bits (L Letters). @stable ICU 2.1 */ -#define U_GC_L_MASK \ - (U_GC_LU_MASK|U_GC_LL_MASK|U_GC_LT_MASK|U_GC_LM_MASK|U_GC_LO_MASK) - -/** Mask constant for multiple UCharCategory bits (LC Cased Letters). @stable ICU 2.1 */ -#define U_GC_LC_MASK \ - (U_GC_LU_MASK|U_GC_LL_MASK|U_GC_LT_MASK) - -/** Mask constant for multiple UCharCategory bits (M Marks). @stable ICU 2.1 */ -#define U_GC_M_MASK (U_GC_MN_MASK|U_GC_ME_MASK|U_GC_MC_MASK) - -/** Mask constant for multiple UCharCategory bits (N Numbers). @stable ICU 2.1 */ -#define U_GC_N_MASK (U_GC_ND_MASK|U_GC_NL_MASK|U_GC_NO_MASK) - -/** Mask constant for multiple UCharCategory bits (Z Separators). @stable ICU 2.1 */ -#define U_GC_Z_MASK (U_GC_ZS_MASK|U_GC_ZL_MASK|U_GC_ZP_MASK) - -/** Mask constant for multiple UCharCategory bits (C Others). @stable ICU 2.1 */ -#define U_GC_C_MASK \ - (U_GC_CN_MASK|U_GC_CC_MASK|U_GC_CF_MASK|U_GC_CO_MASK|U_GC_CS_MASK) - -/** Mask constant for multiple UCharCategory bits (P Punctuation). @stable ICU 2.1 */ -#define U_GC_P_MASK \ - (U_GC_PD_MASK|U_GC_PS_MASK|U_GC_PE_MASK|U_GC_PC_MASK|U_GC_PO_MASK| \ - U_GC_PI_MASK|U_GC_PF_MASK) - -/** Mask constant for multiple UCharCategory bits (S Symbols). @stable ICU 2.1 */ -#define U_GC_S_MASK (U_GC_SM_MASK|U_GC_SC_MASK|U_GC_SK_MASK|U_GC_SO_MASK) - -/** - * This specifies the language directional property of a character set. - * @stable ICU 2.0 - */ -typedef enum UCharDirection { - /* - * Note: UCharDirection constants and their API comments are parsed by preparseucd.py. - * It matches pairs of lines like - * / ** comment... * / - * U_<[A-Z_]+> = , - */ - - /** L @stable ICU 2.0 */ - U_LEFT_TO_RIGHT = 0, - /** R @stable ICU 2.0 */ - U_RIGHT_TO_LEFT = 1, - /** EN @stable ICU 2.0 */ - U_EUROPEAN_NUMBER = 2, - /** ES @stable ICU 2.0 */ - U_EUROPEAN_NUMBER_SEPARATOR = 3, - /** ET @stable ICU 2.0 */ - U_EUROPEAN_NUMBER_TERMINATOR = 4, - /** AN @stable ICU 2.0 */ - U_ARABIC_NUMBER = 5, - /** CS @stable ICU 2.0 */ - U_COMMON_NUMBER_SEPARATOR = 6, - /** B @stable ICU 2.0 */ - U_BLOCK_SEPARATOR = 7, - /** S @stable ICU 2.0 */ - U_SEGMENT_SEPARATOR = 8, - /** WS @stable ICU 2.0 */ - U_WHITE_SPACE_NEUTRAL = 9, - /** ON @stable ICU 2.0 */ - U_OTHER_NEUTRAL = 10, - /** LRE @stable ICU 2.0 */ - U_LEFT_TO_RIGHT_EMBEDDING = 11, - /** LRO @stable ICU 2.0 */ - U_LEFT_TO_RIGHT_OVERRIDE = 12, - /** AL @stable ICU 2.0 */ - U_RIGHT_TO_LEFT_ARABIC = 13, - /** RLE @stable ICU 2.0 */ - U_RIGHT_TO_LEFT_EMBEDDING = 14, - /** RLO @stable ICU 2.0 */ - U_RIGHT_TO_LEFT_OVERRIDE = 15, - /** PDF @stable ICU 2.0 */ - U_POP_DIRECTIONAL_FORMAT = 16, - /** NSM @stable ICU 2.0 */ - U_DIR_NON_SPACING_MARK = 17, - /** BN @stable ICU 2.0 */ - U_BOUNDARY_NEUTRAL = 18, - /** FSI @stable ICU 52 */ - U_FIRST_STRONG_ISOLATE = 19, - /** LRI @stable ICU 52 */ - U_LEFT_TO_RIGHT_ISOLATE = 20, - /** RLI @stable ICU 52 */ - U_RIGHT_TO_LEFT_ISOLATE = 21, - /** PDI @stable ICU 52 */ - U_POP_DIRECTIONAL_ISOLATE = 22, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest UCharDirection value. - * The highest value is available via u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS). - * - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_CHAR_DIRECTION_COUNT -#endif // U_HIDE_DEPRECATED_API -} UCharDirection; - -/** - * Bidi Paired Bracket Type constants. - * - * @see UCHAR_BIDI_PAIRED_BRACKET_TYPE - * @stable ICU 52 - */ -typedef enum UBidiPairedBracketType { - /* - * Note: UBidiPairedBracketType constants are parsed by preparseucd.py. - * It matches lines like - * U_BPT_ - */ - - /** Not a paired bracket. @stable ICU 52 */ - U_BPT_NONE, - /** Open paired bracket. @stable ICU 52 */ - U_BPT_OPEN, - /** Close paired bracket. @stable ICU 52 */ - U_BPT_CLOSE, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UBidiPairedBracketType value. - * The highest value is available via u_getIntPropertyMaxValue(UCHAR_BIDI_PAIRED_BRACKET_TYPE). - * - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_BPT_COUNT /* 3 */ -#endif // U_HIDE_DEPRECATED_API -} UBidiPairedBracketType; - -/** - * Constants for Unicode blocks, see the Unicode Data file Blocks.txt - * @stable ICU 2.0 - */ -enum UBlockCode { - /* - * Note: UBlockCode constants are parsed by preparseucd.py. - * It matches lines like - * UBLOCK_ = , - */ - - /** New No_Block value in Unicode 4. @stable ICU 2.6 */ - UBLOCK_NO_BLOCK = 0, /*[none]*/ /* Special range indicating No_Block */ - - /** @stable ICU 2.0 */ - UBLOCK_BASIC_LATIN = 1, /*[0000]*/ - - /** @stable ICU 2.0 */ - UBLOCK_LATIN_1_SUPPLEMENT=2, /*[0080]*/ - - /** @stable ICU 2.0 */ - UBLOCK_LATIN_EXTENDED_A =3, /*[0100]*/ - - /** @stable ICU 2.0 */ - UBLOCK_LATIN_EXTENDED_B =4, /*[0180]*/ - - /** @stable ICU 2.0 */ - UBLOCK_IPA_EXTENSIONS =5, /*[0250]*/ - - /** @stable ICU 2.0 */ - UBLOCK_SPACING_MODIFIER_LETTERS =6, /*[02B0]*/ - - /** @stable ICU 2.0 */ - UBLOCK_COMBINING_DIACRITICAL_MARKS =7, /*[0300]*/ - - /** - * Unicode 3.2 renames this block to "Greek and Coptic". - * @stable ICU 2.0 - */ - UBLOCK_GREEK =8, /*[0370]*/ - - /** @stable ICU 2.0 */ - UBLOCK_CYRILLIC =9, /*[0400]*/ - - /** @stable ICU 2.0 */ - UBLOCK_ARMENIAN =10, /*[0530]*/ - - /** @stable ICU 2.0 */ - UBLOCK_HEBREW =11, /*[0590]*/ - - /** @stable ICU 2.0 */ - UBLOCK_ARABIC =12, /*[0600]*/ - - /** @stable ICU 2.0 */ - UBLOCK_SYRIAC =13, /*[0700]*/ - - /** @stable ICU 2.0 */ - UBLOCK_THAANA =14, /*[0780]*/ - - /** @stable ICU 2.0 */ - UBLOCK_DEVANAGARI =15, /*[0900]*/ - - /** @stable ICU 2.0 */ - UBLOCK_BENGALI =16, /*[0980]*/ - - /** @stable ICU 2.0 */ - UBLOCK_GURMUKHI =17, /*[0A00]*/ - - /** @stable ICU 2.0 */ - UBLOCK_GUJARATI =18, /*[0A80]*/ - - /** @stable ICU 2.0 */ - UBLOCK_ORIYA =19, /*[0B00]*/ - - /** @stable ICU 2.0 */ - UBLOCK_TAMIL =20, /*[0B80]*/ - - /** @stable ICU 2.0 */ - UBLOCK_TELUGU =21, /*[0C00]*/ - - /** @stable ICU 2.0 */ - UBLOCK_KANNADA =22, /*[0C80]*/ - - /** @stable ICU 2.0 */ - UBLOCK_MALAYALAM =23, /*[0D00]*/ - - /** @stable ICU 2.0 */ - UBLOCK_SINHALA =24, /*[0D80]*/ - - /** @stable ICU 2.0 */ - UBLOCK_THAI =25, /*[0E00]*/ - - /** @stable ICU 2.0 */ - UBLOCK_LAO =26, /*[0E80]*/ - - /** @stable ICU 2.0 */ - UBLOCK_TIBETAN =27, /*[0F00]*/ - - /** @stable ICU 2.0 */ - UBLOCK_MYANMAR =28, /*[1000]*/ - - /** @stable ICU 2.0 */ - UBLOCK_GEORGIAN =29, /*[10A0]*/ - - /** @stable ICU 2.0 */ - UBLOCK_HANGUL_JAMO =30, /*[1100]*/ - - /** @stable ICU 2.0 */ - UBLOCK_ETHIOPIC =31, /*[1200]*/ - - /** @stable ICU 2.0 */ - UBLOCK_CHEROKEE =32, /*[13A0]*/ - - /** @stable ICU 2.0 */ - UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS =33, /*[1400]*/ - - /** @stable ICU 2.0 */ - UBLOCK_OGHAM =34, /*[1680]*/ - - /** @stable ICU 2.0 */ - UBLOCK_RUNIC =35, /*[16A0]*/ - - /** @stable ICU 2.0 */ - UBLOCK_KHMER =36, /*[1780]*/ - - /** @stable ICU 2.0 */ - UBLOCK_MONGOLIAN =37, /*[1800]*/ - - /** @stable ICU 2.0 */ - UBLOCK_LATIN_EXTENDED_ADDITIONAL =38, /*[1E00]*/ - - /** @stable ICU 2.0 */ - UBLOCK_GREEK_EXTENDED =39, /*[1F00]*/ - - /** @stable ICU 2.0 */ - UBLOCK_GENERAL_PUNCTUATION =40, /*[2000]*/ - - /** @stable ICU 2.0 */ - UBLOCK_SUPERSCRIPTS_AND_SUBSCRIPTS =41, /*[2070]*/ - - /** @stable ICU 2.0 */ - UBLOCK_CURRENCY_SYMBOLS =42, /*[20A0]*/ - - /** - * Unicode 3.2 renames this block to "Combining Diacritical Marks for Symbols". - * @stable ICU 2.0 - */ - UBLOCK_COMBINING_MARKS_FOR_SYMBOLS =43, /*[20D0]*/ - - /** @stable ICU 2.0 */ - UBLOCK_LETTERLIKE_SYMBOLS =44, /*[2100]*/ - - /** @stable ICU 2.0 */ - UBLOCK_NUMBER_FORMS =45, /*[2150]*/ - - /** @stable ICU 2.0 */ - UBLOCK_ARROWS =46, /*[2190]*/ - - /** @stable ICU 2.0 */ - UBLOCK_MATHEMATICAL_OPERATORS =47, /*[2200]*/ - - /** @stable ICU 2.0 */ - UBLOCK_MISCELLANEOUS_TECHNICAL =48, /*[2300]*/ - - /** @stable ICU 2.0 */ - UBLOCK_CONTROL_PICTURES =49, /*[2400]*/ - - /** @stable ICU 2.0 */ - UBLOCK_OPTICAL_CHARACTER_RECOGNITION =50, /*[2440]*/ - - /** @stable ICU 2.0 */ - UBLOCK_ENCLOSED_ALPHANUMERICS =51, /*[2460]*/ - - /** @stable ICU 2.0 */ - UBLOCK_BOX_DRAWING =52, /*[2500]*/ - - /** @stable ICU 2.0 */ - UBLOCK_BLOCK_ELEMENTS =53, /*[2580]*/ - - /** @stable ICU 2.0 */ - UBLOCK_GEOMETRIC_SHAPES =54, /*[25A0]*/ - - /** @stable ICU 2.0 */ - UBLOCK_MISCELLANEOUS_SYMBOLS =55, /*[2600]*/ - - /** @stable ICU 2.0 */ - UBLOCK_DINGBATS =56, /*[2700]*/ - - /** @stable ICU 2.0 */ - UBLOCK_BRAILLE_PATTERNS =57, /*[2800]*/ - - /** @stable ICU 2.0 */ - UBLOCK_CJK_RADICALS_SUPPLEMENT =58, /*[2E80]*/ - - /** @stable ICU 2.0 */ - UBLOCK_KANGXI_RADICALS =59, /*[2F00]*/ - - /** @stable ICU 2.0 */ - UBLOCK_IDEOGRAPHIC_DESCRIPTION_CHARACTERS =60, /*[2FF0]*/ - - /** @stable ICU 2.0 */ - UBLOCK_CJK_SYMBOLS_AND_PUNCTUATION =61, /*[3000]*/ - - /** @stable ICU 2.0 */ - UBLOCK_HIRAGANA =62, /*[3040]*/ - - /** @stable ICU 2.0 */ - UBLOCK_KATAKANA =63, /*[30A0]*/ - - /** @stable ICU 2.0 */ - UBLOCK_BOPOMOFO =64, /*[3100]*/ - - /** @stable ICU 2.0 */ - UBLOCK_HANGUL_COMPATIBILITY_JAMO =65, /*[3130]*/ - - /** @stable ICU 2.0 */ - UBLOCK_KANBUN =66, /*[3190]*/ - - /** @stable ICU 2.0 */ - UBLOCK_BOPOMOFO_EXTENDED =67, /*[31A0]*/ - - /** @stable ICU 2.0 */ - UBLOCK_ENCLOSED_CJK_LETTERS_AND_MONTHS =68, /*[3200]*/ - - /** @stable ICU 2.0 */ - UBLOCK_CJK_COMPATIBILITY =69, /*[3300]*/ - - /** @stable ICU 2.0 */ - UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A =70, /*[3400]*/ - - /** @stable ICU 2.0 */ - UBLOCK_CJK_UNIFIED_IDEOGRAPHS =71, /*[4E00]*/ - - /** @stable ICU 2.0 */ - UBLOCK_YI_SYLLABLES =72, /*[A000]*/ - - /** @stable ICU 2.0 */ - UBLOCK_YI_RADICALS =73, /*[A490]*/ - - /** @stable ICU 2.0 */ - UBLOCK_HANGUL_SYLLABLES =74, /*[AC00]*/ - - /** @stable ICU 2.0 */ - UBLOCK_HIGH_SURROGATES =75, /*[D800]*/ - - /** @stable ICU 2.0 */ - UBLOCK_HIGH_PRIVATE_USE_SURROGATES =76, /*[DB80]*/ - - /** @stable ICU 2.0 */ - UBLOCK_LOW_SURROGATES =77, /*[DC00]*/ - - /** - * Same as UBLOCK_PRIVATE_USE. - * Until Unicode 3.1.1, the corresponding block name was "Private Use", - * and multiple code point ranges had this block. - * Unicode 3.2 renames the block for the BMP PUA to "Private Use Area" and - * adds separate blocks for the supplementary PUAs. - * - * @stable ICU 2.0 - */ - UBLOCK_PRIVATE_USE_AREA =78, /*[E000]*/ - /** - * Same as UBLOCK_PRIVATE_USE_AREA. - * Until Unicode 3.1.1, the corresponding block name was "Private Use", - * and multiple code point ranges had this block. - * Unicode 3.2 renames the block for the BMP PUA to "Private Use Area" and - * adds separate blocks for the supplementary PUAs. - * - * @stable ICU 2.0 - */ - UBLOCK_PRIVATE_USE = UBLOCK_PRIVATE_USE_AREA, - - /** @stable ICU 2.0 */ - UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS =79, /*[F900]*/ - - /** @stable ICU 2.0 */ - UBLOCK_ALPHABETIC_PRESENTATION_FORMS =80, /*[FB00]*/ - - /** @stable ICU 2.0 */ - UBLOCK_ARABIC_PRESENTATION_FORMS_A =81, /*[FB50]*/ - - /** @stable ICU 2.0 */ - UBLOCK_COMBINING_HALF_MARKS =82, /*[FE20]*/ - - /** @stable ICU 2.0 */ - UBLOCK_CJK_COMPATIBILITY_FORMS =83, /*[FE30]*/ - - /** @stable ICU 2.0 */ - UBLOCK_SMALL_FORM_VARIANTS =84, /*[FE50]*/ - - /** @stable ICU 2.0 */ - UBLOCK_ARABIC_PRESENTATION_FORMS_B =85, /*[FE70]*/ - - /** @stable ICU 2.0 */ - UBLOCK_SPECIALS =86, /*[FFF0]*/ - - /** @stable ICU 2.0 */ - UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS =87, /*[FF00]*/ - - /* New blocks in Unicode 3.1 */ - - /** @stable ICU 2.0 */ - UBLOCK_OLD_ITALIC = 88, /*[10300]*/ - /** @stable ICU 2.0 */ - UBLOCK_GOTHIC = 89, /*[10330]*/ - /** @stable ICU 2.0 */ - UBLOCK_DESERET = 90, /*[10400]*/ - /** @stable ICU 2.0 */ - UBLOCK_BYZANTINE_MUSICAL_SYMBOLS = 91, /*[1D000]*/ - /** @stable ICU 2.0 */ - UBLOCK_MUSICAL_SYMBOLS = 92, /*[1D100]*/ - /** @stable ICU 2.0 */ - UBLOCK_MATHEMATICAL_ALPHANUMERIC_SYMBOLS = 93, /*[1D400]*/ - /** @stable ICU 2.0 */ - UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B = 94, /*[20000]*/ - /** @stable ICU 2.0 */ - UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT = 95, /*[2F800]*/ - /** @stable ICU 2.0 */ - UBLOCK_TAGS = 96, /*[E0000]*/ - - /* New blocks in Unicode 3.2 */ - - /** @stable ICU 3.0 */ - UBLOCK_CYRILLIC_SUPPLEMENT = 97, /*[0500]*/ - /** - * Unicode 4.0.1 renames the "Cyrillic Supplementary" block to "Cyrillic Supplement". - * @stable ICU 2.2 - */ - UBLOCK_CYRILLIC_SUPPLEMENTARY = UBLOCK_CYRILLIC_SUPPLEMENT, - /** @stable ICU 2.2 */ - UBLOCK_TAGALOG = 98, /*[1700]*/ - /** @stable ICU 2.2 */ - UBLOCK_HANUNOO = 99, /*[1720]*/ - /** @stable ICU 2.2 */ - UBLOCK_BUHID = 100, /*[1740]*/ - /** @stable ICU 2.2 */ - UBLOCK_TAGBANWA = 101, /*[1760]*/ - /** @stable ICU 2.2 */ - UBLOCK_MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A = 102, /*[27C0]*/ - /** @stable ICU 2.2 */ - UBLOCK_SUPPLEMENTAL_ARROWS_A = 103, /*[27F0]*/ - /** @stable ICU 2.2 */ - UBLOCK_SUPPLEMENTAL_ARROWS_B = 104, /*[2900]*/ - /** @stable ICU 2.2 */ - UBLOCK_MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B = 105, /*[2980]*/ - /** @stable ICU 2.2 */ - UBLOCK_SUPPLEMENTAL_MATHEMATICAL_OPERATORS = 106, /*[2A00]*/ - /** @stable ICU 2.2 */ - UBLOCK_KATAKANA_PHONETIC_EXTENSIONS = 107, /*[31F0]*/ - /** @stable ICU 2.2 */ - UBLOCK_VARIATION_SELECTORS = 108, /*[FE00]*/ - /** @stable ICU 2.2 */ - UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_A = 109, /*[F0000]*/ - /** @stable ICU 2.2 */ - UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_B = 110, /*[100000]*/ - - /* New blocks in Unicode 4 */ - - /** @stable ICU 2.6 */ - UBLOCK_LIMBU = 111, /*[1900]*/ - /** @stable ICU 2.6 */ - UBLOCK_TAI_LE = 112, /*[1950]*/ - /** @stable ICU 2.6 */ - UBLOCK_KHMER_SYMBOLS = 113, /*[19E0]*/ - /** @stable ICU 2.6 */ - UBLOCK_PHONETIC_EXTENSIONS = 114, /*[1D00]*/ - /** @stable ICU 2.6 */ - UBLOCK_MISCELLANEOUS_SYMBOLS_AND_ARROWS = 115, /*[2B00]*/ - /** @stable ICU 2.6 */ - UBLOCK_YIJING_HEXAGRAM_SYMBOLS = 116, /*[4DC0]*/ - /** @stable ICU 2.6 */ - UBLOCK_LINEAR_B_SYLLABARY = 117, /*[10000]*/ - /** @stable ICU 2.6 */ - UBLOCK_LINEAR_B_IDEOGRAMS = 118, /*[10080]*/ - /** @stable ICU 2.6 */ - UBLOCK_AEGEAN_NUMBERS = 119, /*[10100]*/ - /** @stable ICU 2.6 */ - UBLOCK_UGARITIC = 120, /*[10380]*/ - /** @stable ICU 2.6 */ - UBLOCK_SHAVIAN = 121, /*[10450]*/ - /** @stable ICU 2.6 */ - UBLOCK_OSMANYA = 122, /*[10480]*/ - /** @stable ICU 2.6 */ - UBLOCK_CYPRIOT_SYLLABARY = 123, /*[10800]*/ - /** @stable ICU 2.6 */ - UBLOCK_TAI_XUAN_JING_SYMBOLS = 124, /*[1D300]*/ - /** @stable ICU 2.6 */ - UBLOCK_VARIATION_SELECTORS_SUPPLEMENT = 125, /*[E0100]*/ - - /* New blocks in Unicode 4.1 */ - - /** @stable ICU 3.4 */ - UBLOCK_ANCIENT_GREEK_MUSICAL_NOTATION = 126, /*[1D200]*/ - /** @stable ICU 3.4 */ - UBLOCK_ANCIENT_GREEK_NUMBERS = 127, /*[10140]*/ - /** @stable ICU 3.4 */ - UBLOCK_ARABIC_SUPPLEMENT = 128, /*[0750]*/ - /** @stable ICU 3.4 */ - UBLOCK_BUGINESE = 129, /*[1A00]*/ - /** @stable ICU 3.4 */ - UBLOCK_CJK_STROKES = 130, /*[31C0]*/ - /** @stable ICU 3.4 */ - UBLOCK_COMBINING_DIACRITICAL_MARKS_SUPPLEMENT = 131, /*[1DC0]*/ - /** @stable ICU 3.4 */ - UBLOCK_COPTIC = 132, /*[2C80]*/ - /** @stable ICU 3.4 */ - UBLOCK_ETHIOPIC_EXTENDED = 133, /*[2D80]*/ - /** @stable ICU 3.4 */ - UBLOCK_ETHIOPIC_SUPPLEMENT = 134, /*[1380]*/ - /** @stable ICU 3.4 */ - UBLOCK_GEORGIAN_SUPPLEMENT = 135, /*[2D00]*/ - /** @stable ICU 3.4 */ - UBLOCK_GLAGOLITIC = 136, /*[2C00]*/ - /** @stable ICU 3.4 */ - UBLOCK_KHAROSHTHI = 137, /*[10A00]*/ - /** @stable ICU 3.4 */ - UBLOCK_MODIFIER_TONE_LETTERS = 138, /*[A700]*/ - /** @stable ICU 3.4 */ - UBLOCK_NEW_TAI_LUE = 139, /*[1980]*/ - /** @stable ICU 3.4 */ - UBLOCK_OLD_PERSIAN = 140, /*[103A0]*/ - /** @stable ICU 3.4 */ - UBLOCK_PHONETIC_EXTENSIONS_SUPPLEMENT = 141, /*[1D80]*/ - /** @stable ICU 3.4 */ - UBLOCK_SUPPLEMENTAL_PUNCTUATION = 142, /*[2E00]*/ - /** @stable ICU 3.4 */ - UBLOCK_SYLOTI_NAGRI = 143, /*[A800]*/ - /** @stable ICU 3.4 */ - UBLOCK_TIFINAGH = 144, /*[2D30]*/ - /** @stable ICU 3.4 */ - UBLOCK_VERTICAL_FORMS = 145, /*[FE10]*/ - - /* New blocks in Unicode 5.0 */ - - /** @stable ICU 3.6 */ - UBLOCK_NKO = 146, /*[07C0]*/ - /** @stable ICU 3.6 */ - UBLOCK_BALINESE = 147, /*[1B00]*/ - /** @stable ICU 3.6 */ - UBLOCK_LATIN_EXTENDED_C = 148, /*[2C60]*/ - /** @stable ICU 3.6 */ - UBLOCK_LATIN_EXTENDED_D = 149, /*[A720]*/ - /** @stable ICU 3.6 */ - UBLOCK_PHAGS_PA = 150, /*[A840]*/ - /** @stable ICU 3.6 */ - UBLOCK_PHOENICIAN = 151, /*[10900]*/ - /** @stable ICU 3.6 */ - UBLOCK_CUNEIFORM = 152, /*[12000]*/ - /** @stable ICU 3.6 */ - UBLOCK_CUNEIFORM_NUMBERS_AND_PUNCTUATION = 153, /*[12400]*/ - /** @stable ICU 3.6 */ - UBLOCK_COUNTING_ROD_NUMERALS = 154, /*[1D360]*/ - - /* New blocks in Unicode 5.1 */ - - /** @stable ICU 4.0 */ - UBLOCK_SUNDANESE = 155, /*[1B80]*/ - /** @stable ICU 4.0 */ - UBLOCK_LEPCHA = 156, /*[1C00]*/ - /** @stable ICU 4.0 */ - UBLOCK_OL_CHIKI = 157, /*[1C50]*/ - /** @stable ICU 4.0 */ - UBLOCK_CYRILLIC_EXTENDED_A = 158, /*[2DE0]*/ - /** @stable ICU 4.0 */ - UBLOCK_VAI = 159, /*[A500]*/ - /** @stable ICU 4.0 */ - UBLOCK_CYRILLIC_EXTENDED_B = 160, /*[A640]*/ - /** @stable ICU 4.0 */ - UBLOCK_SAURASHTRA = 161, /*[A880]*/ - /** @stable ICU 4.0 */ - UBLOCK_KAYAH_LI = 162, /*[A900]*/ - /** @stable ICU 4.0 */ - UBLOCK_REJANG = 163, /*[A930]*/ - /** @stable ICU 4.0 */ - UBLOCK_CHAM = 164, /*[AA00]*/ - /** @stable ICU 4.0 */ - UBLOCK_ANCIENT_SYMBOLS = 165, /*[10190]*/ - /** @stable ICU 4.0 */ - UBLOCK_PHAISTOS_DISC = 166, /*[101D0]*/ - /** @stable ICU 4.0 */ - UBLOCK_LYCIAN = 167, /*[10280]*/ - /** @stable ICU 4.0 */ - UBLOCK_CARIAN = 168, /*[102A0]*/ - /** @stable ICU 4.0 */ - UBLOCK_LYDIAN = 169, /*[10920]*/ - /** @stable ICU 4.0 */ - UBLOCK_MAHJONG_TILES = 170, /*[1F000]*/ - /** @stable ICU 4.0 */ - UBLOCK_DOMINO_TILES = 171, /*[1F030]*/ - - /* New blocks in Unicode 5.2 */ - - /** @stable ICU 4.4 */ - UBLOCK_SAMARITAN = 172, /*[0800]*/ - /** @stable ICU 4.4 */ - UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED = 173, /*[18B0]*/ - /** @stable ICU 4.4 */ - UBLOCK_TAI_THAM = 174, /*[1A20]*/ - /** @stable ICU 4.4 */ - UBLOCK_VEDIC_EXTENSIONS = 175, /*[1CD0]*/ - /** @stable ICU 4.4 */ - UBLOCK_LISU = 176, /*[A4D0]*/ - /** @stable ICU 4.4 */ - UBLOCK_BAMUM = 177, /*[A6A0]*/ - /** @stable ICU 4.4 */ - UBLOCK_COMMON_INDIC_NUMBER_FORMS = 178, /*[A830]*/ - /** @stable ICU 4.4 */ - UBLOCK_DEVANAGARI_EXTENDED = 179, /*[A8E0]*/ - /** @stable ICU 4.4 */ - UBLOCK_HANGUL_JAMO_EXTENDED_A = 180, /*[A960]*/ - /** @stable ICU 4.4 */ - UBLOCK_JAVANESE = 181, /*[A980]*/ - /** @stable ICU 4.4 */ - UBLOCK_MYANMAR_EXTENDED_A = 182, /*[AA60]*/ - /** @stable ICU 4.4 */ - UBLOCK_TAI_VIET = 183, /*[AA80]*/ - /** @stable ICU 4.4 */ - UBLOCK_MEETEI_MAYEK = 184, /*[ABC0]*/ - /** @stable ICU 4.4 */ - UBLOCK_HANGUL_JAMO_EXTENDED_B = 185, /*[D7B0]*/ - /** @stable ICU 4.4 */ - UBLOCK_IMPERIAL_ARAMAIC = 186, /*[10840]*/ - /** @stable ICU 4.4 */ - UBLOCK_OLD_SOUTH_ARABIAN = 187, /*[10A60]*/ - /** @stable ICU 4.4 */ - UBLOCK_AVESTAN = 188, /*[10B00]*/ - /** @stable ICU 4.4 */ - UBLOCK_INSCRIPTIONAL_PARTHIAN = 189, /*[10B40]*/ - /** @stable ICU 4.4 */ - UBLOCK_INSCRIPTIONAL_PAHLAVI = 190, /*[10B60]*/ - /** @stable ICU 4.4 */ - UBLOCK_OLD_TURKIC = 191, /*[10C00]*/ - /** @stable ICU 4.4 */ - UBLOCK_RUMI_NUMERAL_SYMBOLS = 192, /*[10E60]*/ - /** @stable ICU 4.4 */ - UBLOCK_KAITHI = 193, /*[11080]*/ - /** @stable ICU 4.4 */ - UBLOCK_EGYPTIAN_HIEROGLYPHS = 194, /*[13000]*/ - /** @stable ICU 4.4 */ - UBLOCK_ENCLOSED_ALPHANUMERIC_SUPPLEMENT = 195, /*[1F100]*/ - /** @stable ICU 4.4 */ - UBLOCK_ENCLOSED_IDEOGRAPHIC_SUPPLEMENT = 196, /*[1F200]*/ - /** @stable ICU 4.4 */ - UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C = 197, /*[2A700]*/ - - /* New blocks in Unicode 6.0 */ - - /** @stable ICU 4.6 */ - UBLOCK_MANDAIC = 198, /*[0840]*/ - /** @stable ICU 4.6 */ - UBLOCK_BATAK = 199, /*[1BC0]*/ - /** @stable ICU 4.6 */ - UBLOCK_ETHIOPIC_EXTENDED_A = 200, /*[AB00]*/ - /** @stable ICU 4.6 */ - UBLOCK_BRAHMI = 201, /*[11000]*/ - /** @stable ICU 4.6 */ - UBLOCK_BAMUM_SUPPLEMENT = 202, /*[16800]*/ - /** @stable ICU 4.6 */ - UBLOCK_KANA_SUPPLEMENT = 203, /*[1B000]*/ - /** @stable ICU 4.6 */ - UBLOCK_PLAYING_CARDS = 204, /*[1F0A0]*/ - /** @stable ICU 4.6 */ - UBLOCK_MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS = 205, /*[1F300]*/ - /** @stable ICU 4.6 */ - UBLOCK_EMOTICONS = 206, /*[1F600]*/ - /** @stable ICU 4.6 */ - UBLOCK_TRANSPORT_AND_MAP_SYMBOLS = 207, /*[1F680]*/ - /** @stable ICU 4.6 */ - UBLOCK_ALCHEMICAL_SYMBOLS = 208, /*[1F700]*/ - /** @stable ICU 4.6 */ - UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D = 209, /*[2B740]*/ - - /* New blocks in Unicode 6.1 */ - - /** @stable ICU 49 */ - UBLOCK_ARABIC_EXTENDED_A = 210, /*[08A0]*/ - /** @stable ICU 49 */ - UBLOCK_ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS = 211, /*[1EE00]*/ - /** @stable ICU 49 */ - UBLOCK_CHAKMA = 212, /*[11100]*/ - /** @stable ICU 49 */ - UBLOCK_MEETEI_MAYEK_EXTENSIONS = 213, /*[AAE0]*/ - /** @stable ICU 49 */ - UBLOCK_MEROITIC_CURSIVE = 214, /*[109A0]*/ - /** @stable ICU 49 */ - UBLOCK_MEROITIC_HIEROGLYPHS = 215, /*[10980]*/ - /** @stable ICU 49 */ - UBLOCK_MIAO = 216, /*[16F00]*/ - /** @stable ICU 49 */ - UBLOCK_SHARADA = 217, /*[11180]*/ - /** @stable ICU 49 */ - UBLOCK_SORA_SOMPENG = 218, /*[110D0]*/ - /** @stable ICU 49 */ - UBLOCK_SUNDANESE_SUPPLEMENT = 219, /*[1CC0]*/ - /** @stable ICU 49 */ - UBLOCK_TAKRI = 220, /*[11680]*/ - - /* New blocks in Unicode 7.0 */ - - /** @stable ICU 54 */ - UBLOCK_BASSA_VAH = 221, /*[16AD0]*/ - /** @stable ICU 54 */ - UBLOCK_CAUCASIAN_ALBANIAN = 222, /*[10530]*/ - /** @stable ICU 54 */ - UBLOCK_COPTIC_EPACT_NUMBERS = 223, /*[102E0]*/ - /** @stable ICU 54 */ - UBLOCK_COMBINING_DIACRITICAL_MARKS_EXTENDED = 224, /*[1AB0]*/ - /** @stable ICU 54 */ - UBLOCK_DUPLOYAN = 225, /*[1BC00]*/ - /** @stable ICU 54 */ - UBLOCK_ELBASAN = 226, /*[10500]*/ - /** @stable ICU 54 */ - UBLOCK_GEOMETRIC_SHAPES_EXTENDED = 227, /*[1F780]*/ - /** @stable ICU 54 */ - UBLOCK_GRANTHA = 228, /*[11300]*/ - /** @stable ICU 54 */ - UBLOCK_KHOJKI = 229, /*[11200]*/ - /** @stable ICU 54 */ - UBLOCK_KHUDAWADI = 230, /*[112B0]*/ - /** @stable ICU 54 */ - UBLOCK_LATIN_EXTENDED_E = 231, /*[AB30]*/ - /** @stable ICU 54 */ - UBLOCK_LINEAR_A = 232, /*[10600]*/ - /** @stable ICU 54 */ - UBLOCK_MAHAJANI = 233, /*[11150]*/ - /** @stable ICU 54 */ - UBLOCK_MANICHAEAN = 234, /*[10AC0]*/ - /** @stable ICU 54 */ - UBLOCK_MENDE_KIKAKUI = 235, /*[1E800]*/ - /** @stable ICU 54 */ - UBLOCK_MODI = 236, /*[11600]*/ - /** @stable ICU 54 */ - UBLOCK_MRO = 237, /*[16A40]*/ - /** @stable ICU 54 */ - UBLOCK_MYANMAR_EXTENDED_B = 238, /*[A9E0]*/ - /** @stable ICU 54 */ - UBLOCK_NABATAEAN = 239, /*[10880]*/ - /** @stable ICU 54 */ - UBLOCK_OLD_NORTH_ARABIAN = 240, /*[10A80]*/ - /** @stable ICU 54 */ - UBLOCK_OLD_PERMIC = 241, /*[10350]*/ - /** @stable ICU 54 */ - UBLOCK_ORNAMENTAL_DINGBATS = 242, /*[1F650]*/ - /** @stable ICU 54 */ - UBLOCK_PAHAWH_HMONG = 243, /*[16B00]*/ - /** @stable ICU 54 */ - UBLOCK_PALMYRENE = 244, /*[10860]*/ - /** @stable ICU 54 */ - UBLOCK_PAU_CIN_HAU = 245, /*[11AC0]*/ - /** @stable ICU 54 */ - UBLOCK_PSALTER_PAHLAVI = 246, /*[10B80]*/ - /** @stable ICU 54 */ - UBLOCK_SHORTHAND_FORMAT_CONTROLS = 247, /*[1BCA0]*/ - /** @stable ICU 54 */ - UBLOCK_SIDDHAM = 248, /*[11580]*/ - /** @stable ICU 54 */ - UBLOCK_SINHALA_ARCHAIC_NUMBERS = 249, /*[111E0]*/ - /** @stable ICU 54 */ - UBLOCK_SUPPLEMENTAL_ARROWS_C = 250, /*[1F800]*/ - /** @stable ICU 54 */ - UBLOCK_TIRHUTA = 251, /*[11480]*/ - /** @stable ICU 54 */ - UBLOCK_WARANG_CITI = 252, /*[118A0]*/ - - /* New blocks in Unicode 8.0 */ - - /** @stable ICU 56 */ - UBLOCK_AHOM = 253, /*[11700]*/ - /** @stable ICU 56 */ - UBLOCK_ANATOLIAN_HIEROGLYPHS = 254, /*[14400]*/ - /** @stable ICU 56 */ - UBLOCK_CHEROKEE_SUPPLEMENT = 255, /*[AB70]*/ - /** @stable ICU 56 */ - UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E = 256, /*[2B820]*/ - /** @stable ICU 56 */ - UBLOCK_EARLY_DYNASTIC_CUNEIFORM = 257, /*[12480]*/ - /** @stable ICU 56 */ - UBLOCK_HATRAN = 258, /*[108E0]*/ - /** @stable ICU 56 */ - UBLOCK_MULTANI = 259, /*[11280]*/ - /** @stable ICU 56 */ - UBLOCK_OLD_HUNGARIAN = 260, /*[10C80]*/ - /** @stable ICU 56 */ - UBLOCK_SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS = 261, /*[1F900]*/ - /** @stable ICU 56 */ - UBLOCK_SUTTON_SIGNWRITING = 262, /*[1D800]*/ - - /* New blocks in Unicode 9.0 */ - - /** @stable ICU 58 */ - UBLOCK_ADLAM = 263, /*[1E900]*/ - /** @stable ICU 58 */ - UBLOCK_BHAIKSUKI = 264, /*[11C00]*/ - /** @stable ICU 58 */ - UBLOCK_CYRILLIC_EXTENDED_C = 265, /*[1C80]*/ - /** @stable ICU 58 */ - UBLOCK_GLAGOLITIC_SUPPLEMENT = 266, /*[1E000]*/ - /** @stable ICU 58 */ - UBLOCK_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION = 267, /*[16FE0]*/ - /** @stable ICU 58 */ - UBLOCK_MARCHEN = 268, /*[11C70]*/ - /** @stable ICU 58 */ - UBLOCK_MONGOLIAN_SUPPLEMENT = 269, /*[11660]*/ - /** @stable ICU 58 */ - UBLOCK_NEWA = 270, /*[11400]*/ - /** @stable ICU 58 */ - UBLOCK_OSAGE = 271, /*[104B0]*/ - /** @stable ICU 58 */ - UBLOCK_TANGUT = 272, /*[17000]*/ - /** @stable ICU 58 */ - UBLOCK_TANGUT_COMPONENTS = 273, /*[18800]*/ - - // New blocks in Unicode 10.0 - - /** @stable ICU 60 */ - UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F = 274, /*[2CEB0]*/ - /** @stable ICU 60 */ - UBLOCK_KANA_EXTENDED_A = 275, /*[1B100]*/ - /** @stable ICU 60 */ - UBLOCK_MASARAM_GONDI = 276, /*[11D00]*/ - /** @stable ICU 60 */ - UBLOCK_NUSHU = 277, /*[1B170]*/ - /** @stable ICU 60 */ - UBLOCK_SOYOMBO = 278, /*[11A50]*/ - /** @stable ICU 60 */ - UBLOCK_SYRIAC_SUPPLEMENT = 279, /*[0860]*/ - /** @stable ICU 60 */ - UBLOCK_ZANABAZAR_SQUARE = 280, /*[11A00]*/ - - // New blocks in Unicode 11.0 - - /** @stable ICU 62 */ - UBLOCK_CHESS_SYMBOLS = 281, /*[1FA00]*/ - /** @stable ICU 62 */ - UBLOCK_DOGRA = 282, /*[11800]*/ - /** @stable ICU 62 */ - UBLOCK_GEORGIAN_EXTENDED = 283, /*[1C90]*/ - /** @stable ICU 62 */ - UBLOCK_GUNJALA_GONDI = 284, /*[11D60]*/ - /** @stable ICU 62 */ - UBLOCK_HANIFI_ROHINGYA = 285, /*[10D00]*/ - /** @stable ICU 62 */ - UBLOCK_INDIC_SIYAQ_NUMBERS = 286, /*[1EC70]*/ - /** @stable ICU 62 */ - UBLOCK_MAKASAR = 287, /*[11EE0]*/ - /** @stable ICU 62 */ - UBLOCK_MAYAN_NUMERALS = 288, /*[1D2E0]*/ - /** @stable ICU 62 */ - UBLOCK_MEDEFAIDRIN = 289, /*[16E40]*/ - /** @stable ICU 62 */ - UBLOCK_OLD_SOGDIAN = 290, /*[10F00]*/ - /** @stable ICU 62 */ - UBLOCK_SOGDIAN = 291, /*[10F30]*/ - - // New blocks in Unicode 12.0 - - /** @stable ICU 64 */ - UBLOCK_EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS = 292, /*[13430]*/ - /** @stable ICU 64 */ - UBLOCK_ELYMAIC = 293, /*[10FE0]*/ - /** @stable ICU 64 */ - UBLOCK_NANDINAGARI = 294, /*[119A0]*/ - /** @stable ICU 64 */ - UBLOCK_NYIAKENG_PUACHUE_HMONG = 295, /*[1E100]*/ - /** @stable ICU 64 */ - UBLOCK_OTTOMAN_SIYAQ_NUMBERS = 296, /*[1ED00]*/ - /** @stable ICU 64 */ - UBLOCK_SMALL_KANA_EXTENSION = 297, /*[1B130]*/ - /** @stable ICU 64 */ - UBLOCK_SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A = 298, /*[1FA70]*/ - /** @stable ICU 64 */ - UBLOCK_TAMIL_SUPPLEMENT = 299, /*[11FC0]*/ - /** @stable ICU 64 */ - UBLOCK_WANCHO = 300, /*[1E2C0]*/ - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UBlockCode value. - * The highest value is available via u_getIntPropertyMaxValue(UCHAR_BLOCK). - * - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UBLOCK_COUNT = 301, -#endif // U_HIDE_DEPRECATED_API - - /** @stable ICU 2.0 */ - UBLOCK_INVALID_CODE=-1 -}; - -/** @stable ICU 2.0 */ -typedef enum UBlockCode UBlockCode; - -/** - * East Asian Width constants. - * - * @see UCHAR_EAST_ASIAN_WIDTH - * @see u_getIntPropertyValue - * @stable ICU 2.2 - */ -typedef enum UEastAsianWidth { - /* - * Note: UEastAsianWidth constants are parsed by preparseucd.py. - * It matches lines like - * U_EA_ - */ - - U_EA_NEUTRAL, /*[N]*/ - U_EA_AMBIGUOUS, /*[A]*/ - U_EA_HALFWIDTH, /*[H]*/ - U_EA_FULLWIDTH, /*[F]*/ - U_EA_NARROW, /*[Na]*/ - U_EA_WIDE, /*[W]*/ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UEastAsianWidth value. - * The highest value is available via u_getIntPropertyMaxValue(UCHAR_EAST_ASIAN_WIDTH). - * - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_EA_COUNT -#endif // U_HIDE_DEPRECATED_API -} UEastAsianWidth; - -/** - * Selector constants for u_charName(). - * u_charName() returns the "modern" name of a - * Unicode character; or the name that was defined in - * Unicode version 1.0, before the Unicode standard merged - * with ISO-10646; or an "extended" name that gives each - * Unicode code point a unique name. - * - * @see u_charName - * @stable ICU 2.0 - */ -typedef enum UCharNameChoice { - /** Unicode character name (Name property). @stable ICU 2.0 */ - U_UNICODE_CHAR_NAME, -#ifndef U_HIDE_DEPRECATED_API - /** - * The Unicode_1_Name property value which is of little practical value. - * Beginning with ICU 49, ICU APIs return an empty string for this name choice. - * @deprecated ICU 49 - */ - U_UNICODE_10_CHAR_NAME, -#endif /* U_HIDE_DEPRECATED_API */ - /** Standard or synthetic character name. @stable ICU 2.0 */ - U_EXTENDED_CHAR_NAME = U_UNICODE_CHAR_NAME+2, - /** Corrected name from NameAliases.txt. @stable ICU 4.4 */ - U_CHAR_NAME_ALIAS, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UCharNameChoice value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_CHAR_NAME_CHOICE_COUNT -#endif // U_HIDE_DEPRECATED_API -} UCharNameChoice; - -/** - * Selector constants for u_getPropertyName() and - * u_getPropertyValueName(). These selectors are used to choose which - * name is returned for a given property or value. All properties and - * values have a long name. Most have a short name, but some do not. - * Unicode allows for additional names, beyond the long and short - * name, which would be indicated by U_LONG_PROPERTY_NAME + i, where - * i=1, 2,... - * - * @see u_getPropertyName() - * @see u_getPropertyValueName() - * @stable ICU 2.4 - */ -typedef enum UPropertyNameChoice { - U_SHORT_PROPERTY_NAME, - U_LONG_PROPERTY_NAME, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UPropertyNameChoice value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_PROPERTY_NAME_CHOICE_COUNT -#endif // U_HIDE_DEPRECATED_API -} UPropertyNameChoice; - -/** - * Decomposition Type constants. - * - * @see UCHAR_DECOMPOSITION_TYPE - * @stable ICU 2.2 - */ -typedef enum UDecompositionType { - /* - * Note: UDecompositionType constants are parsed by preparseucd.py. - * It matches lines like - * U_DT_ - */ - - U_DT_NONE, /*[none]*/ - U_DT_CANONICAL, /*[can]*/ - U_DT_COMPAT, /*[com]*/ - U_DT_CIRCLE, /*[enc]*/ - U_DT_FINAL, /*[fin]*/ - U_DT_FONT, /*[font]*/ - U_DT_FRACTION, /*[fra]*/ - U_DT_INITIAL, /*[init]*/ - U_DT_ISOLATED, /*[iso]*/ - U_DT_MEDIAL, /*[med]*/ - U_DT_NARROW, /*[nar]*/ - U_DT_NOBREAK, /*[nb]*/ - U_DT_SMALL, /*[sml]*/ - U_DT_SQUARE, /*[sqr]*/ - U_DT_SUB, /*[sub]*/ - U_DT_SUPER, /*[sup]*/ - U_DT_VERTICAL, /*[vert]*/ - U_DT_WIDE, /*[wide]*/ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UDecompositionType value. - * The highest value is available via u_getIntPropertyMaxValue(UCHAR_DECOMPOSITION_TYPE). - * - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_DT_COUNT /* 18 */ -#endif // U_HIDE_DEPRECATED_API -} UDecompositionType; - -/** - * Joining Type constants. - * - * @see UCHAR_JOINING_TYPE - * @stable ICU 2.2 - */ -typedef enum UJoiningType { - /* - * Note: UJoiningType constants are parsed by preparseucd.py. - * It matches lines like - * U_JT_ - */ - - U_JT_NON_JOINING, /*[U]*/ - U_JT_JOIN_CAUSING, /*[C]*/ - U_JT_DUAL_JOINING, /*[D]*/ - U_JT_LEFT_JOINING, /*[L]*/ - U_JT_RIGHT_JOINING, /*[R]*/ - U_JT_TRANSPARENT, /*[T]*/ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UJoiningType value. - * The highest value is available via u_getIntPropertyMaxValue(UCHAR_JOINING_TYPE). - * - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_JT_COUNT /* 6 */ -#endif // U_HIDE_DEPRECATED_API -} UJoiningType; - -/** - * Joining Group constants. - * - * @see UCHAR_JOINING_GROUP - * @stable ICU 2.2 - */ -typedef enum UJoiningGroup { - /* - * Note: UJoiningGroup constants are parsed by preparseucd.py. - * It matches lines like - * U_JG_ - */ - - U_JG_NO_JOINING_GROUP, - U_JG_AIN, - U_JG_ALAPH, - U_JG_ALEF, - U_JG_BEH, - U_JG_BETH, - U_JG_DAL, - U_JG_DALATH_RISH, - U_JG_E, - U_JG_FEH, - U_JG_FINAL_SEMKATH, - U_JG_GAF, - U_JG_GAMAL, - U_JG_HAH, - U_JG_TEH_MARBUTA_GOAL, /**< @stable ICU 4.6 */ - U_JG_HAMZA_ON_HEH_GOAL=U_JG_TEH_MARBUTA_GOAL, - U_JG_HE, - U_JG_HEH, - U_JG_HEH_GOAL, - U_JG_HETH, - U_JG_KAF, - U_JG_KAPH, - U_JG_KNOTTED_HEH, - U_JG_LAM, - U_JG_LAMADH, - U_JG_MEEM, - U_JG_MIM, - U_JG_NOON, - U_JG_NUN, - U_JG_PE, - U_JG_QAF, - U_JG_QAPH, - U_JG_REH, - U_JG_REVERSED_PE, - U_JG_SAD, - U_JG_SADHE, - U_JG_SEEN, - U_JG_SEMKATH, - U_JG_SHIN, - U_JG_SWASH_KAF, - U_JG_SYRIAC_WAW, - U_JG_TAH, - U_JG_TAW, - U_JG_TEH_MARBUTA, - U_JG_TETH, - U_JG_WAW, - U_JG_YEH, - U_JG_YEH_BARREE, - U_JG_YEH_WITH_TAIL, - U_JG_YUDH, - U_JG_YUDH_HE, - U_JG_ZAIN, - U_JG_FE, /**< @stable ICU 2.6 */ - U_JG_KHAPH, /**< @stable ICU 2.6 */ - U_JG_ZHAIN, /**< @stable ICU 2.6 */ - U_JG_BURUSHASKI_YEH_BARREE, /**< @stable ICU 4.0 */ - U_JG_FARSI_YEH, /**< @stable ICU 4.4 */ - U_JG_NYA, /**< @stable ICU 4.4 */ - U_JG_ROHINGYA_YEH, /**< @stable ICU 49 */ - U_JG_MANICHAEAN_ALEPH, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_AYIN, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_BETH, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_DALETH, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_DHAMEDH, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_FIVE, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_GIMEL, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_HETH, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_HUNDRED, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_KAPH, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_LAMEDH, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_MEM, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_NUN, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_ONE, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_PE, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_QOPH, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_RESH, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_SADHE, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_SAMEKH, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_TAW, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_TEN, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_TETH, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_THAMEDH, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_TWENTY, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_WAW, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_YODH, /**< @stable ICU 54 */ - U_JG_MANICHAEAN_ZAYIN, /**< @stable ICU 54 */ - U_JG_STRAIGHT_WAW, /**< @stable ICU 54 */ - U_JG_AFRICAN_FEH, /**< @stable ICU 58 */ - U_JG_AFRICAN_NOON, /**< @stable ICU 58 */ - U_JG_AFRICAN_QAF, /**< @stable ICU 58 */ - - U_JG_MALAYALAM_BHA, /**< @stable ICU 60 */ - U_JG_MALAYALAM_JA, /**< @stable ICU 60 */ - U_JG_MALAYALAM_LLA, /**< @stable ICU 60 */ - U_JG_MALAYALAM_LLLA, /**< @stable ICU 60 */ - U_JG_MALAYALAM_NGA, /**< @stable ICU 60 */ - U_JG_MALAYALAM_NNA, /**< @stable ICU 60 */ - U_JG_MALAYALAM_NNNA, /**< @stable ICU 60 */ - U_JG_MALAYALAM_NYA, /**< @stable ICU 60 */ - U_JG_MALAYALAM_RA, /**< @stable ICU 60 */ - U_JG_MALAYALAM_SSA, /**< @stable ICU 60 */ - U_JG_MALAYALAM_TTA, /**< @stable ICU 60 */ - - U_JG_HANIFI_ROHINGYA_KINNA_YA, /**< @stable ICU 62 */ - U_JG_HANIFI_ROHINGYA_PA, /**< @stable ICU 62 */ - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UJoiningGroup value. - * The highest value is available via u_getIntPropertyMaxValue(UCHAR_JOINING_GROUP). - * - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_JG_COUNT -#endif // U_HIDE_DEPRECATED_API -} UJoiningGroup; - -/** - * Grapheme Cluster Break constants. - * - * @see UCHAR_GRAPHEME_CLUSTER_BREAK - * @stable ICU 3.4 - */ -typedef enum UGraphemeClusterBreak { - /* - * Note: UGraphemeClusterBreak constants are parsed by preparseucd.py. - * It matches lines like - * U_GCB_ - */ - - U_GCB_OTHER = 0, /*[XX]*/ - U_GCB_CONTROL = 1, /*[CN]*/ - U_GCB_CR = 2, /*[CR]*/ - U_GCB_EXTEND = 3, /*[EX]*/ - U_GCB_L = 4, /*[L]*/ - U_GCB_LF = 5, /*[LF]*/ - U_GCB_LV = 6, /*[LV]*/ - U_GCB_LVT = 7, /*[LVT]*/ - U_GCB_T = 8, /*[T]*/ - U_GCB_V = 9, /*[V]*/ - /** @stable ICU 4.0 */ - U_GCB_SPACING_MARK = 10, /*[SM]*/ /* from here on: new in Unicode 5.1/ICU 4.0 */ - /** @stable ICU 4.0 */ - U_GCB_PREPEND = 11, /*[PP]*/ - /** @stable ICU 50 */ - U_GCB_REGIONAL_INDICATOR = 12, /*[RI]*/ /* new in Unicode 6.2/ICU 50 */ - /** @stable ICU 58 */ - U_GCB_E_BASE = 13, /*[EB]*/ /* from here on: new in Unicode 9.0/ICU 58 */ - /** @stable ICU 58 */ - U_GCB_E_BASE_GAZ = 14, /*[EBG]*/ - /** @stable ICU 58 */ - U_GCB_E_MODIFIER = 15, /*[EM]*/ - /** @stable ICU 58 */ - U_GCB_GLUE_AFTER_ZWJ = 16, /*[GAZ]*/ - /** @stable ICU 58 */ - U_GCB_ZWJ = 17, /*[ZWJ]*/ - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UGraphemeClusterBreak value. - * The highest value is available via u_getIntPropertyMaxValue(UCHAR_GRAPHEME_CLUSTER_BREAK). - * - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_GCB_COUNT = 18 -#endif // U_HIDE_DEPRECATED_API -} UGraphemeClusterBreak; - -/** - * Word Break constants. - * (UWordBreak is a pre-existing enum type in ubrk.h for word break status tags.) - * - * @see UCHAR_WORD_BREAK - * @stable ICU 3.4 - */ -typedef enum UWordBreakValues { - /* - * Note: UWordBreakValues constants are parsed by preparseucd.py. - * It matches lines like - * U_WB_ - */ - - U_WB_OTHER = 0, /*[XX]*/ - U_WB_ALETTER = 1, /*[LE]*/ - U_WB_FORMAT = 2, /*[FO]*/ - U_WB_KATAKANA = 3, /*[KA]*/ - U_WB_MIDLETTER = 4, /*[ML]*/ - U_WB_MIDNUM = 5, /*[MN]*/ - U_WB_NUMERIC = 6, /*[NU]*/ - U_WB_EXTENDNUMLET = 7, /*[EX]*/ - /** @stable ICU 4.0 */ - U_WB_CR = 8, /*[CR]*/ /* from here on: new in Unicode 5.1/ICU 4.0 */ - /** @stable ICU 4.0 */ - U_WB_EXTEND = 9, /*[Extend]*/ - /** @stable ICU 4.0 */ - U_WB_LF = 10, /*[LF]*/ - /** @stable ICU 4.0 */ - U_WB_MIDNUMLET =11, /*[MB]*/ - /** @stable ICU 4.0 */ - U_WB_NEWLINE =12, /*[NL]*/ - /** @stable ICU 50 */ - U_WB_REGIONAL_INDICATOR = 13, /*[RI]*/ /* new in Unicode 6.2/ICU 50 */ - /** @stable ICU 52 */ - U_WB_HEBREW_LETTER = 14, /*[HL]*/ /* from here on: new in Unicode 6.3/ICU 52 */ - /** @stable ICU 52 */ - U_WB_SINGLE_QUOTE = 15, /*[SQ]*/ - /** @stable ICU 52 */ - U_WB_DOUBLE_QUOTE = 16, /*[DQ]*/ - /** @stable ICU 58 */ - U_WB_E_BASE = 17, /*[EB]*/ /* from here on: new in Unicode 9.0/ICU 58 */ - /** @stable ICU 58 */ - U_WB_E_BASE_GAZ = 18, /*[EBG]*/ - /** @stable ICU 58 */ - U_WB_E_MODIFIER = 19, /*[EM]*/ - /** @stable ICU 58 */ - U_WB_GLUE_AFTER_ZWJ = 20, /*[GAZ]*/ - /** @stable ICU 58 */ - U_WB_ZWJ = 21, /*[ZWJ]*/ - /** @stable ICU 62 */ - U_WB_WSEGSPACE = 22, /*[WSEGSPACE]*/ - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UWordBreakValues value. - * The highest value is available via u_getIntPropertyMaxValue(UCHAR_WORD_BREAK). - * - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_WB_COUNT = 23 -#endif // U_HIDE_DEPRECATED_API -} UWordBreakValues; - -/** - * Sentence Break constants. - * - * @see UCHAR_SENTENCE_BREAK - * @stable ICU 3.4 - */ -typedef enum USentenceBreak { - /* - * Note: USentenceBreak constants are parsed by preparseucd.py. - * It matches lines like - * U_SB_ - */ - - U_SB_OTHER = 0, /*[XX]*/ - U_SB_ATERM = 1, /*[AT]*/ - U_SB_CLOSE = 2, /*[CL]*/ - U_SB_FORMAT = 3, /*[FO]*/ - U_SB_LOWER = 4, /*[LO]*/ - U_SB_NUMERIC = 5, /*[NU]*/ - U_SB_OLETTER = 6, /*[LE]*/ - U_SB_SEP = 7, /*[SE]*/ - U_SB_SP = 8, /*[SP]*/ - U_SB_STERM = 9, /*[ST]*/ - U_SB_UPPER = 10, /*[UP]*/ - U_SB_CR = 11, /*[CR]*/ /* from here on: new in Unicode 5.1/ICU 4.0 */ - U_SB_EXTEND = 12, /*[EX]*/ - U_SB_LF = 13, /*[LF]*/ - U_SB_SCONTINUE = 14, /*[SC]*/ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal USentenceBreak value. - * The highest value is available via u_getIntPropertyMaxValue(UCHAR_SENTENCE_BREAK). - * - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_SB_COUNT = 15 -#endif // U_HIDE_DEPRECATED_API -} USentenceBreak; - -/** - * Line Break constants. - * - * @see UCHAR_LINE_BREAK - * @stable ICU 2.2 - */ -typedef enum ULineBreak { - /* - * Note: ULineBreak constants are parsed by preparseucd.py. - * It matches lines like - * U_LB_ - */ - - U_LB_UNKNOWN = 0, /*[XX]*/ - U_LB_AMBIGUOUS = 1, /*[AI]*/ - U_LB_ALPHABETIC = 2, /*[AL]*/ - U_LB_BREAK_BOTH = 3, /*[B2]*/ - U_LB_BREAK_AFTER = 4, /*[BA]*/ - U_LB_BREAK_BEFORE = 5, /*[BB]*/ - U_LB_MANDATORY_BREAK = 6, /*[BK]*/ - U_LB_CONTINGENT_BREAK = 7, /*[CB]*/ - U_LB_CLOSE_PUNCTUATION = 8, /*[CL]*/ - U_LB_COMBINING_MARK = 9, /*[CM]*/ - U_LB_CARRIAGE_RETURN = 10, /*[CR]*/ - U_LB_EXCLAMATION = 11, /*[EX]*/ - U_LB_GLUE = 12, /*[GL]*/ - U_LB_HYPHEN = 13, /*[HY]*/ - U_LB_IDEOGRAPHIC = 14, /*[ID]*/ - /** Renamed from the misspelled "inseperable" in Unicode 4.0.1/ICU 3.0 @stable ICU 3.0 */ - U_LB_INSEPARABLE = 15, /*[IN]*/ - U_LB_INSEPERABLE = U_LB_INSEPARABLE, - U_LB_INFIX_NUMERIC = 16, /*[IS]*/ - U_LB_LINE_FEED = 17, /*[LF]*/ - U_LB_NONSTARTER = 18, /*[NS]*/ - U_LB_NUMERIC = 19, /*[NU]*/ - U_LB_OPEN_PUNCTUATION = 20, /*[OP]*/ - U_LB_POSTFIX_NUMERIC = 21, /*[PO]*/ - U_LB_PREFIX_NUMERIC = 22, /*[PR]*/ - U_LB_QUOTATION = 23, /*[QU]*/ - U_LB_COMPLEX_CONTEXT = 24, /*[SA]*/ - U_LB_SURROGATE = 25, /*[SG]*/ - U_LB_SPACE = 26, /*[SP]*/ - U_LB_BREAK_SYMBOLS = 27, /*[SY]*/ - U_LB_ZWSPACE = 28, /*[ZW]*/ - /** @stable ICU 2.6 */ - U_LB_NEXT_LINE = 29, /*[NL]*/ /* from here on: new in Unicode 4/ICU 2.6 */ - /** @stable ICU 2.6 */ - U_LB_WORD_JOINER = 30, /*[WJ]*/ - /** @stable ICU 3.4 */ - U_LB_H2 = 31, /*[H2]*/ /* from here on: new in Unicode 4.1/ICU 3.4 */ - /** @stable ICU 3.4 */ - U_LB_H3 = 32, /*[H3]*/ - /** @stable ICU 3.4 */ - U_LB_JL = 33, /*[JL]*/ - /** @stable ICU 3.4 */ - U_LB_JT = 34, /*[JT]*/ - /** @stable ICU 3.4 */ - U_LB_JV = 35, /*[JV]*/ - /** @stable ICU 4.4 */ - U_LB_CLOSE_PARENTHESIS = 36, /*[CP]*/ /* new in Unicode 5.2/ICU 4.4 */ - /** @stable ICU 49 */ - U_LB_CONDITIONAL_JAPANESE_STARTER = 37,/*[CJ]*/ /* new in Unicode 6.1/ICU 49 */ - /** @stable ICU 49 */ - U_LB_HEBREW_LETTER = 38, /*[HL]*/ /* new in Unicode 6.1/ICU 49 */ - /** @stable ICU 50 */ - U_LB_REGIONAL_INDICATOR = 39,/*[RI]*/ /* new in Unicode 6.2/ICU 50 */ - /** @stable ICU 58 */ - U_LB_E_BASE = 40, /*[EB]*/ /* from here on: new in Unicode 9.0/ICU 58 */ - /** @stable ICU 58 */ - U_LB_E_MODIFIER = 41, /*[EM]*/ - /** @stable ICU 58 */ - U_LB_ZWJ = 42, /*[ZWJ]*/ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal ULineBreak value. - * The highest value is available via u_getIntPropertyMaxValue(UCHAR_LINE_BREAK). - * - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_LB_COUNT = 43 -#endif // U_HIDE_DEPRECATED_API -} ULineBreak; - -/** - * Numeric Type constants. - * - * @see UCHAR_NUMERIC_TYPE - * @stable ICU 2.2 - */ -typedef enum UNumericType { - /* - * Note: UNumericType constants are parsed by preparseucd.py. - * It matches lines like - * U_NT_ - */ - - U_NT_NONE, /*[None]*/ - U_NT_DECIMAL, /*[de]*/ - U_NT_DIGIT, /*[di]*/ - U_NT_NUMERIC, /*[nu]*/ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UNumericType value. - * The highest value is available via u_getIntPropertyMaxValue(UCHAR_NUMERIC_TYPE). - * - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_NT_COUNT -#endif // U_HIDE_DEPRECATED_API -} UNumericType; - -/** - * Hangul Syllable Type constants. - * - * @see UCHAR_HANGUL_SYLLABLE_TYPE - * @stable ICU 2.6 - */ -typedef enum UHangulSyllableType { - /* - * Note: UHangulSyllableType constants are parsed by preparseucd.py. - * It matches lines like - * U_HST_ - */ - - U_HST_NOT_APPLICABLE, /*[NA]*/ - U_HST_LEADING_JAMO, /*[L]*/ - U_HST_VOWEL_JAMO, /*[V]*/ - U_HST_TRAILING_JAMO, /*[T]*/ - U_HST_LV_SYLLABLE, /*[LV]*/ - U_HST_LVT_SYLLABLE, /*[LVT]*/ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UHangulSyllableType value. - * The highest value is available via u_getIntPropertyMaxValue(UCHAR_HANGUL_SYLLABLE_TYPE). - * - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_HST_COUNT -#endif // U_HIDE_DEPRECATED_API -} UHangulSyllableType; - -/** - * Indic Positional Category constants. - * - * @see UCHAR_INDIC_POSITIONAL_CATEGORY - * @stable ICU 63 - */ -typedef enum UIndicPositionalCategory { - /* - * Note: UIndicPositionalCategory constants are parsed by preparseucd.py. - * It matches lines like - * U_INPC_ - */ - - /** @stable ICU 63 */ - U_INPC_NA, - /** @stable ICU 63 */ - U_INPC_BOTTOM, - /** @stable ICU 63 */ - U_INPC_BOTTOM_AND_LEFT, - /** @stable ICU 63 */ - U_INPC_BOTTOM_AND_RIGHT, - /** @stable ICU 63 */ - U_INPC_LEFT, - /** @stable ICU 63 */ - U_INPC_LEFT_AND_RIGHT, - /** @stable ICU 63 */ - U_INPC_OVERSTRUCK, - /** @stable ICU 63 */ - U_INPC_RIGHT, - /** @stable ICU 63 */ - U_INPC_TOP, - /** @stable ICU 63 */ - U_INPC_TOP_AND_BOTTOM, - /** @stable ICU 63 */ - U_INPC_TOP_AND_BOTTOM_AND_RIGHT, - /** @stable ICU 63 */ - U_INPC_TOP_AND_LEFT, - /** @stable ICU 63 */ - U_INPC_TOP_AND_LEFT_AND_RIGHT, - /** @stable ICU 63 */ - U_INPC_TOP_AND_RIGHT, - /** @stable ICU 63 */ - U_INPC_VISUAL_ORDER_LEFT, -} UIndicPositionalCategory; - -/** - * Indic Syllabic Category constants. - * - * @see UCHAR_INDIC_SYLLABIC_CATEGORY - * @stable ICU 63 - */ -typedef enum UIndicSyllabicCategory { - /* - * Note: UIndicSyllabicCategory constants are parsed by preparseucd.py. - * It matches lines like - * U_INSC_ - */ - - /** @stable ICU 63 */ - U_INSC_OTHER, - /** @stable ICU 63 */ - U_INSC_AVAGRAHA, - /** @stable ICU 63 */ - U_INSC_BINDU, - /** @stable ICU 63 */ - U_INSC_BRAHMI_JOINING_NUMBER, - /** @stable ICU 63 */ - U_INSC_CANTILLATION_MARK, - /** @stable ICU 63 */ - U_INSC_CONSONANT, - /** @stable ICU 63 */ - U_INSC_CONSONANT_DEAD, - /** @stable ICU 63 */ - U_INSC_CONSONANT_FINAL, - /** @stable ICU 63 */ - U_INSC_CONSONANT_HEAD_LETTER, - /** @stable ICU 63 */ - U_INSC_CONSONANT_INITIAL_POSTFIXED, - /** @stable ICU 63 */ - U_INSC_CONSONANT_KILLER, - /** @stable ICU 63 */ - U_INSC_CONSONANT_MEDIAL, - /** @stable ICU 63 */ - U_INSC_CONSONANT_PLACEHOLDER, - /** @stable ICU 63 */ - U_INSC_CONSONANT_PRECEDING_REPHA, - /** @stable ICU 63 */ - U_INSC_CONSONANT_PREFIXED, - /** @stable ICU 63 */ - U_INSC_CONSONANT_SUBJOINED, - /** @stable ICU 63 */ - U_INSC_CONSONANT_SUCCEEDING_REPHA, - /** @stable ICU 63 */ - U_INSC_CONSONANT_WITH_STACKER, - /** @stable ICU 63 */ - U_INSC_GEMINATION_MARK, - /** @stable ICU 63 */ - U_INSC_INVISIBLE_STACKER, - /** @stable ICU 63 */ - U_INSC_JOINER, - /** @stable ICU 63 */ - U_INSC_MODIFYING_LETTER, - /** @stable ICU 63 */ - U_INSC_NON_JOINER, - /** @stable ICU 63 */ - U_INSC_NUKTA, - /** @stable ICU 63 */ - U_INSC_NUMBER, - /** @stable ICU 63 */ - U_INSC_NUMBER_JOINER, - /** @stable ICU 63 */ - U_INSC_PURE_KILLER, - /** @stable ICU 63 */ - U_INSC_REGISTER_SHIFTER, - /** @stable ICU 63 */ - U_INSC_SYLLABLE_MODIFIER, - /** @stable ICU 63 */ - U_INSC_TONE_LETTER, - /** @stable ICU 63 */ - U_INSC_TONE_MARK, - /** @stable ICU 63 */ - U_INSC_VIRAMA, - /** @stable ICU 63 */ - U_INSC_VISARGA, - /** @stable ICU 63 */ - U_INSC_VOWEL, - /** @stable ICU 63 */ - U_INSC_VOWEL_DEPENDENT, - /** @stable ICU 63 */ - U_INSC_VOWEL_INDEPENDENT, -} UIndicSyllabicCategory; - -/** - * Vertical Orientation constants. - * - * @see UCHAR_VERTICAL_ORIENTATION - * @stable ICU 63 - */ -typedef enum UVerticalOrientation { - /* - * Note: UVerticalOrientation constants are parsed by preparseucd.py. - * It matches lines like - * U_VO_ - */ - - /** @stable ICU 63 */ - U_VO_ROTATED, - /** @stable ICU 63 */ - U_VO_TRANSFORMED_ROTATED, - /** @stable ICU 63 */ - U_VO_TRANSFORMED_UPRIGHT, - /** @stable ICU 63 */ - U_VO_UPRIGHT, -} UVerticalOrientation; - -/** - * Check a binary Unicode property for a code point. - * - * Unicode, especially in version 3.2, defines many more properties than the - * original set in UnicodeData.txt. - * - * The properties APIs are intended to reflect Unicode properties as defined - * in the Unicode Character Database (UCD) and Unicode Technical Reports (UTR). - * For details about the properties see http://www.unicode.org/ucd/ . - * For names of Unicode properties see the UCD file PropertyAliases.txt. - * - * Important: If ICU is built with UCD files from Unicode versions below 3.2, - * then properties marked with "new in Unicode 3.2" are not or not fully available. - * - * @param c Code point to test. - * @param which UProperty selector constant, identifies which binary property to check. - * Must be UCHAR_BINARY_START<=which=0. - * True for characters with general category "Nd" (decimal digit numbers) - * as well as Latin letters a-f and A-F in both ASCII and Fullwidth ASCII. - * (That is, for letters with code points - * 0041..0046, 0061..0066, FF21..FF26, FF41..FF46.) - * - * In order to narrow the definition of hexadecimal digits to only ASCII - * characters, use (c<=0x7f && u_isxdigit(c)). - * - * This is a C/POSIX migration function. - * See the comments about C/POSIX character classification functions in the - * documentation at the top of this header file. - * - * @param c the code point to be tested - * @return TRUE if the code point is a hexadecimal digit - * - * @stable ICU 2.6 - */ -U_STABLE UBool U_EXPORT2 -u_isxdigit(UChar32 c); - -/** - * Determines whether the specified code point is a punctuation character. - * True for characters with general categories "P" (punctuation). - * - * This is a C/POSIX migration function. - * See the comments about C/POSIX character classification functions in the - * documentation at the top of this header file. - * - * @param c the code point to be tested - * @return TRUE if the code point is a punctuation character - * - * @stable ICU 2.6 - */ -U_STABLE UBool U_EXPORT2 -u_ispunct(UChar32 c); - -/** - * Determines whether the specified code point is a "graphic" character - * (printable, excluding spaces). - * TRUE for all characters except those with general categories - * "Cc" (control codes), "Cf" (format controls), "Cs" (surrogates), - * "Cn" (unassigned), and "Z" (separators). - * - * This is a C/POSIX migration function. - * See the comments about C/POSIX character classification functions in the - * documentation at the top of this header file. - * - * @param c the code point to be tested - * @return TRUE if the code point is a "graphic" character - * - * @stable ICU 2.6 - */ -U_STABLE UBool U_EXPORT2 -u_isgraph(UChar32 c); - -/** - * Determines whether the specified code point is a "blank" or "horizontal space", - * a character that visibly separates words on a line. - * The following are equivalent definitions: - * - * TRUE for Unicode White_Space characters except for "vertical space controls" - * where "vertical space controls" are the following characters: - * U+000A (LF) U+000B (VT) U+000C (FF) U+000D (CR) U+0085 (NEL) U+2028 (LS) U+2029 (PS) - * - * same as - * - * TRUE for U+0009 (TAB) and characters with general category "Zs" (space separators). - * - * Note: There are several ICU whitespace functions; please see the uchar.h - * file documentation for a detailed comparison. - * - * This is a C/POSIX migration function. - * See the comments about C/POSIX character classification functions in the - * documentation at the top of this header file. - * - * @param c the code point to be tested - * @return TRUE if the code point is a "blank" - * - * @stable ICU 2.6 - */ -U_STABLE UBool U_EXPORT2 -u_isblank(UChar32 c); - -/** - * Determines whether the specified code point is "defined", - * which usually means that it is assigned a character. - * True for general categories other than "Cn" (other, not assigned), - * i.e., true for all code points mentioned in UnicodeData.txt. - * - * Note that non-character code points (e.g., U+FDD0) are not "defined" - * (they are Cn), but surrogate code points are "defined" (Cs). - * - * Same as java.lang.Character.isDefined(). - * - * @param c the code point to be tested - * @return TRUE if the code point is assigned a character - * - * @see u_isdigit - * @see u_isalpha - * @see u_isalnum - * @see u_isupper - * @see u_islower - * @see u_istitle - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -u_isdefined(UChar32 c); - -/** - * Determines if the specified character is a space character or not. - * - * Note: There are several ICU whitespace functions; please see the uchar.h - * file documentation for a detailed comparison. - * - * This is a C/POSIX migration function. - * See the comments about C/POSIX character classification functions in the - * documentation at the top of this header file. - * - * @param c the character to be tested - * @return true if the character is a space character; false otherwise. - * - * @see u_isJavaSpaceChar - * @see u_isWhitespace - * @see u_isUWhiteSpace - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -u_isspace(UChar32 c); - -/** - * Determine if the specified code point is a space character according to Java. - * True for characters with general categories "Z" (separators), - * which does not include control codes (e.g., TAB or Line Feed). - * - * Same as java.lang.Character.isSpaceChar(). - * - * Note: There are several ICU whitespace functions; please see the uchar.h - * file documentation for a detailed comparison. - * - * @param c the code point to be tested - * @return TRUE if the code point is a space character according to Character.isSpaceChar() - * - * @see u_isspace - * @see u_isWhitespace - * @see u_isUWhiteSpace - * @stable ICU 2.6 - */ -U_STABLE UBool U_EXPORT2 -u_isJavaSpaceChar(UChar32 c); - -/** - * Determines if the specified code point is a whitespace character according to Java/ICU. - * A character is considered to be a Java whitespace character if and only - * if it satisfies one of the following criteria: - * - * - It is a Unicode Separator character (categories "Z" = "Zs" or "Zl" or "Zp"), but is not - * also a non-breaking space (U+00A0 NBSP or U+2007 Figure Space or U+202F Narrow NBSP). - * - It is U+0009 HORIZONTAL TABULATION. - * - It is U+000A LINE FEED. - * - It is U+000B VERTICAL TABULATION. - * - It is U+000C FORM FEED. - * - It is U+000D CARRIAGE RETURN. - * - It is U+001C FILE SEPARATOR. - * - It is U+001D GROUP SEPARATOR. - * - It is U+001E RECORD SEPARATOR. - * - It is U+001F UNIT SEPARATOR. - * - * This API tries to sync with the semantics of Java's - * java.lang.Character.isWhitespace(), but it may not return - * the exact same results because of the Unicode version - * difference. - * - * Note: Unicode 4.0.1 changed U+200B ZERO WIDTH SPACE from a Space Separator (Zs) - * to a Format Control (Cf). Since then, isWhitespace(0x200b) returns false. - * See http://www.unicode.org/versions/Unicode4.0.1/ - * - * Note: There are several ICU whitespace functions; please see the uchar.h - * file documentation for a detailed comparison. - * - * @param c the code point to be tested - * @return TRUE if the code point is a whitespace character according to Java/ICU - * - * @see u_isspace - * @see u_isJavaSpaceChar - * @see u_isUWhiteSpace - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -u_isWhitespace(UChar32 c); - -/** - * Determines whether the specified code point is a control character - * (as defined by this function). - * A control character is one of the following: - * - ISO 8-bit control character (U+0000..U+001f and U+007f..U+009f) - * - U_CONTROL_CHAR (Cc) - * - U_FORMAT_CHAR (Cf) - * - U_LINE_SEPARATOR (Zl) - * - U_PARAGRAPH_SEPARATOR (Zp) - * - * This is a C/POSIX migration function. - * See the comments about C/POSIX character classification functions in the - * documentation at the top of this header file. - * - * @param c the code point to be tested - * @return TRUE if the code point is a control character - * - * @see UCHAR_DEFAULT_IGNORABLE_CODE_POINT - * @see u_isprint - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -u_iscntrl(UChar32 c); - -/** - * Determines whether the specified code point is an ISO control code. - * True for U+0000..U+001f and U+007f..U+009f (general category "Cc"). - * - * Same as java.lang.Character.isISOControl(). - * - * @param c the code point to be tested - * @return TRUE if the code point is an ISO control code - * - * @see u_iscntrl - * @stable ICU 2.6 - */ -U_STABLE UBool U_EXPORT2 -u_isISOControl(UChar32 c); - -/** - * Determines whether the specified code point is a printable character. - * True for general categories other than "C" (controls). - * - * This is a C/POSIX migration function. - * See the comments about C/POSIX character classification functions in the - * documentation at the top of this header file. - * - * @param c the code point to be tested - * @return TRUE if the code point is a printable character - * - * @see UCHAR_DEFAULT_IGNORABLE_CODE_POINT - * @see u_iscntrl - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -u_isprint(UChar32 c); - -/** - * Determines whether the specified code point is a base character. - * True for general categories "L" (letters), "N" (numbers), - * "Mc" (spacing combining marks), and "Me" (enclosing marks). - * - * Note that this is different from the definition in the Unicode - * Standard section 3.6, conformance clause D51, - * which defines base characters to be all characters (not Cn) - * that do not graphically combine with preceding characters (M) - * and that are neither control (Cc) or format (Cf) characters. - * - * @param c the code point to be tested - * @return TRUE if the code point is a base character according to this function - * - * @see u_isalpha - * @see u_isdigit - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -u_isbase(UChar32 c); - -/** - * Returns the bidirectional category value for the code point, - * which is used in the Unicode bidirectional algorithm - * (UAX #9 http://www.unicode.org/reports/tr9/). - * Note that some unassigned code points have bidi values - * of R or AL because they are in blocks that are reserved - * for Right-To-Left scripts. - * - * Same as java.lang.Character.getDirectionality() - * - * @param c the code point to be tested - * @return the bidirectional category (UCharDirection) value - * - * @see UCharDirection - * @stable ICU 2.0 - */ -U_STABLE UCharDirection U_EXPORT2 -u_charDirection(UChar32 c); - -/** - * Determines whether the code point has the Bidi_Mirrored property. - * This property is set for characters that are commonly used in - * Right-To-Left contexts and need to be displayed with a "mirrored" - * glyph. - * - * Same as java.lang.Character.isMirrored(). - * Same as UCHAR_BIDI_MIRRORED - * - * @param c the code point to be tested - * @return TRUE if the character has the Bidi_Mirrored property - * - * @see UCHAR_BIDI_MIRRORED - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -u_isMirrored(UChar32 c); - -/** - * Maps the specified character to a "mirror-image" character. - * For characters with the Bidi_Mirrored property, implementations - * sometimes need a "poor man's" mapping to another Unicode - * character (code point) such that the default glyph may serve - * as the mirror-image of the default glyph of the specified - * character. This is useful for text conversion to and from - * codepages with visual order, and for displays without glyph - * selection capabilities. - * - * @param c the code point to be mapped - * @return another Unicode code point that may serve as a mirror-image - * substitute, or c itself if there is no such mapping or c - * does not have the Bidi_Mirrored property - * - * @see UCHAR_BIDI_MIRRORED - * @see u_isMirrored - * @stable ICU 2.0 - */ -U_STABLE UChar32 U_EXPORT2 -u_charMirror(UChar32 c); - -/** - * Maps the specified character to its paired bracket character. - * For Bidi_Paired_Bracket_Type!=None, this is the same as u_charMirror(). - * Otherwise c itself is returned. - * See http://www.unicode.org/reports/tr9/ - * - * @param c the code point to be mapped - * @return the paired bracket code point, - * or c itself if there is no such mapping - * (Bidi_Paired_Bracket_Type=None) - * - * @see UCHAR_BIDI_PAIRED_BRACKET - * @see UCHAR_BIDI_PAIRED_BRACKET_TYPE - * @see u_charMirror - * @stable ICU 52 - */ -U_STABLE UChar32 U_EXPORT2 -u_getBidiPairedBracket(UChar32 c); - -/** - * Returns the general category value for the code point. - * - * Same as java.lang.Character.getType(). - * - * @param c the code point to be tested - * @return the general category (UCharCategory) value - * - * @see UCharCategory - * @stable ICU 2.0 - */ -U_STABLE int8_t U_EXPORT2 -u_charType(UChar32 c); - -/** - * Get a single-bit bit set for the general category of a character. - * This bit set can be compared bitwise with U_GC_SM_MASK, U_GC_L_MASK, etc. - * Same as U_MASK(u_charType(c)). - * - * @param c the code point to be tested - * @return a single-bit mask corresponding to the general category (UCharCategory) value - * - * @see u_charType - * @see UCharCategory - * @see U_GC_CN_MASK - * @stable ICU 2.1 - */ -#define U_GET_GC_MASK(c) U_MASK(u_charType(c)) - -/** - * Callback from u_enumCharTypes(), is called for each contiguous range - * of code points c (where start<=cnameChoice, the character name written - * into the buffer is the "modern" name or the name that was defined - * in Unicode version 1.0. - * The name contains only "invariant" characters - * like A-Z, 0-9, space, and '-'. - * Unicode 1.0 names are only retrieved if they are different from the modern - * names and if the data file contains the data for them. gennames may or may - * not be called with a command line option to include 1.0 names in unames.dat. - * - * @param code The character (code point) for which to get the name. - * It must be 0<=code<=0x10ffff. - * @param nameChoice Selector for which name to get. - * @param buffer Destination address for copying the name. - * The name will always be zero-terminated. - * If there is no name, then the buffer will be set to the empty string. - * @param bufferLength ==sizeof(buffer) - * @param pErrorCode Pointer to a UErrorCode variable; - * check for U_SUCCESS() after u_charName() - * returns. - * @return The length of the name, or 0 if there is no name for this character. - * If the bufferLength is less than or equal to the length, then the buffer - * contains the truncated name and the returned length indicates the full - * length of the name. - * The length does not include the zero-termination. - * - * @see UCharNameChoice - * @see u_charFromName - * @see u_enumCharNames - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_charName(UChar32 code, UCharNameChoice nameChoice, - char *buffer, int32_t bufferLength, - UErrorCode *pErrorCode); - -#ifndef U_HIDE_DEPRECATED_API -/** - * Returns an empty string. - * Used to return the ISO 10646 comment for a character. - * The Unicode ISO_Comment property is deprecated and has no values. - * - * @param c The character (code point) for which to get the ISO comment. - * It must be 0<=c<=0x10ffff. - * @param dest Destination address for copying the comment. - * The comment will be zero-terminated if possible. - * If there is no comment, then the buffer will be set to the empty string. - * @param destCapacity ==sizeof(dest) - * @param pErrorCode Pointer to a UErrorCode variable; - * check for U_SUCCESS() after u_getISOComment() - * returns. - * @return 0 - * - * @deprecated ICU 49 - */ -U_DEPRECATED int32_t U_EXPORT2 -u_getISOComment(UChar32 c, - char *dest, int32_t destCapacity, - UErrorCode *pErrorCode); -#endif /* U_HIDE_DEPRECATED_API */ - -/** - * Find a Unicode character by its name and return its code point value. - * The name is matched exactly and completely. - * If the name does not correspond to a code point, pErrorCode - * is set to U_INVALID_CHAR_FOUND. - * A Unicode 1.0 name is matched only if it differs from the modern name. - * Unicode names are all uppercase. Extended names are lowercase followed - * by an uppercase hexadecimal number, and within angle brackets. - * - * @param nameChoice Selector for which name to match. - * @param name The name to match. - * @param pErrorCode Pointer to a UErrorCode variable - * @return The Unicode value of the code point with the given name, - * or an undefined value if there is no such code point. - * - * @see UCharNameChoice - * @see u_charName - * @see u_enumCharNames - * @stable ICU 1.7 - */ -U_STABLE UChar32 U_EXPORT2 -u_charFromName(UCharNameChoice nameChoice, - const char *name, - UErrorCode *pErrorCode); - -/** - * Type of a callback function for u_enumCharNames() that gets called - * for each Unicode character with the code point value and - * the character name. - * If such a function returns FALSE, then the enumeration is stopped. - * - * @param context The context pointer that was passed to u_enumCharNames(). - * @param code The Unicode code point for the character with this name. - * @param nameChoice Selector for which kind of names is enumerated. - * @param name The character's name, zero-terminated. - * @param length The length of the name. - * @return TRUE if the enumeration should continue, FALSE to stop it. - * - * @see UCharNameChoice - * @see u_enumCharNames - * @stable ICU 1.7 - */ -typedef UBool U_CALLCONV UEnumCharNamesFn(void *context, - UChar32 code, - UCharNameChoice nameChoice, - const char *name, - int32_t length); - -/** - * Enumerate all assigned Unicode characters between the start and limit - * code points (start inclusive, limit exclusive) and call a function - * for each, passing the code point value and the character name. - * For Unicode 1.0 names, only those are enumerated that differ from the - * modern names. - * - * @param start The first code point in the enumeration range. - * @param limit One more than the last code point in the enumeration range - * (the first one after the range). - * @param fn The function that is to be called for each character name. - * @param context An arbitrary pointer that is passed to the function. - * @param nameChoice Selector for which kind of names to enumerate. - * @param pErrorCode Pointer to a UErrorCode variable - * - * @see UCharNameChoice - * @see UEnumCharNamesFn - * @see u_charName - * @see u_charFromName - * @stable ICU 1.7 - */ -U_STABLE void U_EXPORT2 -u_enumCharNames(UChar32 start, UChar32 limit, - UEnumCharNamesFn *fn, - void *context, - UCharNameChoice nameChoice, - UErrorCode *pErrorCode); - -/** - * Return the Unicode name for a given property, as given in the - * Unicode database file PropertyAliases.txt. - * - * In addition, this function maps the property - * UCHAR_GENERAL_CATEGORY_MASK to the synthetic names "gcm" / - * "General_Category_Mask". These names are not in - * PropertyAliases.txt. - * - * @param property UProperty selector other than UCHAR_INVALID_CODE. - * If out of range, NULL is returned. - * - * @param nameChoice selector for which name to get. If out of range, - * NULL is returned. All properties have a long name. Most - * have a short name, but some do not. Unicode allows for - * additional names; if present these will be returned by - * U_LONG_PROPERTY_NAME + i, where i=1, 2,... - * - * @return a pointer to the name, or NULL if either the - * property or the nameChoice is out of range. If a given - * nameChoice returns NULL, then all larger values of - * nameChoice will return NULL, with one exception: if NULL is - * returned for U_SHORT_PROPERTY_NAME, then - * U_LONG_PROPERTY_NAME (and higher) may still return a - * non-NULL value. The returned pointer is valid until - * u_cleanup() is called. - * - * @see UProperty - * @see UPropertyNameChoice - * @stable ICU 2.4 - */ -U_STABLE const char* U_EXPORT2 -u_getPropertyName(UProperty property, - UPropertyNameChoice nameChoice); - -/** - * Return the UProperty enum for a given property name, as specified - * in the Unicode database file PropertyAliases.txt. Short, long, and - * any other variants are recognized. - * - * In addition, this function maps the synthetic names "gcm" / - * "General_Category_Mask" to the property - * UCHAR_GENERAL_CATEGORY_MASK. These names are not in - * PropertyAliases.txt. - * - * @param alias the property name to be matched. The name is compared - * using "loose matching" as described in PropertyAliases.txt. - * - * @return a UProperty enum, or UCHAR_INVALID_CODE if the given name - * does not match any property. - * - * @see UProperty - * @stable ICU 2.4 - */ -U_STABLE UProperty U_EXPORT2 -u_getPropertyEnum(const char* alias); - -/** - * Return the Unicode name for a given property value, as given in the - * Unicode database file PropertyValueAliases.txt. - * - * Note: Some of the names in PropertyValueAliases.txt can only be - * retrieved using UCHAR_GENERAL_CATEGORY_MASK, not - * UCHAR_GENERAL_CATEGORY. These include: "C" / "Other", "L" / - * "Letter", "LC" / "Cased_Letter", "M" / "Mark", "N" / "Number", "P" - * / "Punctuation", "S" / "Symbol", and "Z" / "Separator". - * - * @param property UProperty selector constant. - * Must be UCHAR_BINARY_START<=which2<=radix<=36 or if the - * value of c is not a valid digit in the specified - * radix, -1 is returned. A character is a valid digit - * if at least one of the following is true: - *

    - *
  • The character has a decimal digit value. - * Such characters have the general category "Nd" (decimal digit numbers) - * and a Numeric_Type of Decimal. - * In this case the value is the character's decimal digit value.
  • - *
  • The character is one of the uppercase Latin letters - * 'A' through 'Z'. - * In this case the value is c-'A'+10.
  • - *
  • The character is one of the lowercase Latin letters - * 'a' through 'z'. - * In this case the value is ch-'a'+10.
  • - *
  • Latin letters from both the ASCII range (0061..007A, 0041..005A) - * as well as from the Fullwidth ASCII range (FF41..FF5A, FF21..FF3A) - * are recognized.
  • - *
- * - * Same as java.lang.Character.digit(). - * - * @param ch the code point to be tested. - * @param radix the radix. - * @return the numeric value represented by the character in the - * specified radix, - * or -1 if there is no value or if the value exceeds the radix. - * - * @see UCHAR_NUMERIC_TYPE - * @see u_forDigit - * @see u_charDigitValue - * @see u_isdigit - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_digit(UChar32 ch, int8_t radix); - -/** - * Determines the character representation for a specific digit in - * the specified radix. If the value of radix is not a - * valid radix, or the value of digit is not a valid - * digit in the specified radix, the null character - * (U+0000) is returned. - *

- * The radix argument is valid if it is greater than or - * equal to 2 and less than or equal to 36. - * The digit argument is valid if - * 0 <= digit < radix. - *

- * If the digit is less than 10, then - * '0' + digit is returned. Otherwise, the value - * 'a' + digit - 10 is returned. - * - * Same as java.lang.Character.forDigit(). - * - * @param digit the number to convert to a character. - * @param radix the radix. - * @return the char representation of the specified digit - * in the specified radix. - * - * @see u_digit - * @see u_charDigitValue - * @see u_isdigit - * @stable ICU 2.0 - */ -U_STABLE UChar32 U_EXPORT2 -u_forDigit(int32_t digit, int8_t radix); - -/** - * Get the "age" of the code point. - * The "age" is the Unicode version when the code point was first - * designated (as a non-character or for Private Use) - * or assigned a character. - * This can be useful to avoid emitting code points to receiving - * processes that do not accept newer characters. - * The data is from the UCD file DerivedAge.txt. - * - * @param c The code point. - * @param versionArray The Unicode version number array, to be filled in. - * - * @stable ICU 2.1 - */ -U_STABLE void U_EXPORT2 -u_charAge(UChar32 c, UVersionInfo versionArray); - -/** - * Gets the Unicode version information. - * The version array is filled in with the version information - * for the Unicode standard that is currently used by ICU. - * For example, Unicode version 3.1.1 is represented as an array with - * the values { 3, 1, 1, 0 }. - * - * @param versionArray an output array that will be filled in with - * the Unicode version number - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -u_getUnicodeVersion(UVersionInfo versionArray); - -#if !UCONFIG_NO_NORMALIZATION -/** - * Get the FC_NFKC_Closure property string for a character. - * See Unicode Standard Annex #15 for details, search for "FC_NFKC_Closure" - * or for "FNC": http://www.unicode.org/reports/tr15/ - * - * @param c The character (code point) for which to get the FC_NFKC_Closure string. - * It must be 0<=c<=0x10ffff. - * @param dest Destination address for copying the string. - * The string will be zero-terminated if possible. - * If there is no FC_NFKC_Closure string, - * then the buffer will be set to the empty string. - * @param destCapacity ==sizeof(dest) - * @param pErrorCode Pointer to a UErrorCode variable. - * @return The length of the string, or 0 if there is no FC_NFKC_Closure string for this character. - * If the destCapacity is less than or equal to the length, then the buffer - * contains the truncated name and the returned length indicates the full - * length of the name. - * The length does not include the zero-termination. - * - * @stable ICU 2.2 - */ -U_STABLE int32_t U_EXPORT2 -u_getFC_NFKC_Closure(UChar32 c, UChar *dest, int32_t destCapacity, UErrorCode *pErrorCode); - -#endif - - -U_CDECL_END - -#endif /*_UCHAR*/ -/*eof*/ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucharstrie.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucharstrie.h deleted file mode 100644 index 533e8c554b..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucharstrie.h +++ /dev/null @@ -1,580 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2010-2012, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* file name: ucharstrie.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2010nov14 -* created by: Markus W. Scherer -*/ - -#ifndef __UCHARSTRIE_H__ -#define __UCHARSTRIE_H__ - -/** - * \file - * \brief C++ API: Trie for mapping Unicode strings (or 16-bit-unit sequences) - * to integer values. - */ - -#include "unicode/utypes.h" -#include "unicode/unistr.h" -#include "unicode/uobject.h" -#include "unicode/ustringtrie.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class Appendable; -class UCharsTrieBuilder; -class UVector32; - -/** - * Light-weight, non-const reader class for a UCharsTrie. - * Traverses a char16_t-serialized data structure with minimal state, - * for mapping strings (16-bit-unit sequences) to non-negative integer values. - * - * This class owns the serialized trie data only if it was constructed by - * the builder's build() method. - * The public constructor and the copy constructor only alias the data (only copy the pointer). - * There is no assignment operator. - * - * This class is not intended for public subclassing. - * @stable ICU 4.8 - */ -class U_COMMON_API UCharsTrie : public UMemory { -public: - /** - * Constructs a UCharsTrie reader instance. - * - * The trieUChars must contain a copy of a char16_t sequence from the UCharsTrieBuilder, - * starting with the first char16_t of that sequence. - * The UCharsTrie object will not read more char16_ts than - * the UCharsTrieBuilder generated in the corresponding build() call. - * - * The array is not copied/cloned and must not be modified while - * the UCharsTrie object is in use. - * - * @param trieUChars The char16_t array that contains the serialized trie. - * @stable ICU 4.8 - */ - UCharsTrie(ConstChar16Ptr trieUChars) - : ownedArray_(NULL), uchars_(trieUChars), - pos_(uchars_), remainingMatchLength_(-1) {} - - /** - * Destructor. - * @stable ICU 4.8 - */ - ~UCharsTrie(); - - /** - * Copy constructor, copies the other trie reader object and its state, - * but not the char16_t array which will be shared. (Shallow copy.) - * @param other Another UCharsTrie object. - * @stable ICU 4.8 - */ - UCharsTrie(const UCharsTrie &other) - : ownedArray_(NULL), uchars_(other.uchars_), - pos_(other.pos_), remainingMatchLength_(other.remainingMatchLength_) {} - - /** - * Resets this trie to its initial state. - * @return *this - * @stable ICU 4.8 - */ - UCharsTrie &reset() { - pos_=uchars_; - remainingMatchLength_=-1; - return *this; - } - - /** - * UCharsTrie state object, for saving a trie's current state - * and resetting the trie back to this state later. - * @stable ICU 4.8 - */ - class State : public UMemory { - public: - /** - * Constructs an empty State. - * @stable ICU 4.8 - */ - State() { uchars=NULL; } - private: - friend class UCharsTrie; - - const char16_t *uchars; - const char16_t *pos; - int32_t remainingMatchLength; - }; - - /** - * Saves the state of this trie. - * @param state The State object to hold the trie's state. - * @return *this - * @see resetToState - * @stable ICU 4.8 - */ - const UCharsTrie &saveState(State &state) const { - state.uchars=uchars_; - state.pos=pos_; - state.remainingMatchLength=remainingMatchLength_; - return *this; - } - - /** - * Resets this trie to the saved state. - * If the state object contains no state, or the state of a different trie, - * then this trie remains unchanged. - * @param state The State object which holds a saved trie state. - * @return *this - * @see saveState - * @see reset - * @stable ICU 4.8 - */ - UCharsTrie &resetToState(const State &state) { - if(uchars_==state.uchars && uchars_!=NULL) { - pos_=state.pos; - remainingMatchLength_=state.remainingMatchLength; - } - return *this; - } - - /** - * Determines whether the string so far matches, whether it has a value, - * and whether another input char16_t can continue a matching string. - * @return The match/value Result. - * @stable ICU 4.8 - */ - UStringTrieResult current() const; - - /** - * Traverses the trie from the initial state for this input char16_t. - * Equivalent to reset().next(uchar). - * @param uchar Input char value. Values below 0 and above 0xffff will never match. - * @return The match/value Result. - * @stable ICU 4.8 - */ - inline UStringTrieResult first(int32_t uchar) { - remainingMatchLength_=-1; - return nextImpl(uchars_, uchar); - } - - /** - * Traverses the trie from the initial state for the - * one or two UTF-16 code units for this input code point. - * Equivalent to reset().nextForCodePoint(cp). - * @param cp A Unicode code point 0..0x10ffff. - * @return The match/value Result. - * @stable ICU 4.8 - */ - UStringTrieResult firstForCodePoint(UChar32 cp); - - /** - * Traverses the trie from the current state for this input char16_t. - * @param uchar Input char value. Values below 0 and above 0xffff will never match. - * @return The match/value Result. - * @stable ICU 4.8 - */ - UStringTrieResult next(int32_t uchar); - - /** - * Traverses the trie from the current state for the - * one or two UTF-16 code units for this input code point. - * @param cp A Unicode code point 0..0x10ffff. - * @return The match/value Result. - * @stable ICU 4.8 - */ - UStringTrieResult nextForCodePoint(UChar32 cp); - - /** - * Traverses the trie from the current state for this string. - * Equivalent to - * \code - * Result result=current(); - * for(each c in s) - * if(!USTRINGTRIE_HAS_NEXT(result)) return USTRINGTRIE_NO_MATCH; - * result=next(c); - * return result; - * \endcode - * @param s A string. Can be NULL if length is 0. - * @param length The length of the string. Can be -1 if NUL-terminated. - * @return The match/value Result. - * @stable ICU 4.8 - */ - UStringTrieResult next(ConstChar16Ptr s, int32_t length); - - /** - * Returns a matching string's value if called immediately after - * current()/first()/next() returned USTRINGTRIE_INTERMEDIATE_VALUE or USTRINGTRIE_FINAL_VALUE. - * getValue() can be called multiple times. - * - * Do not call getValue() after USTRINGTRIE_NO_MATCH or USTRINGTRIE_NO_VALUE! - * @return The value for the string so far. - * @stable ICU 4.8 - */ - inline int32_t getValue() const { - const char16_t *pos=pos_; - int32_t leadUnit=*pos++; - // U_ASSERT(leadUnit>=kMinValueLead); - return leadUnit&kValueIsFinal ? - readValue(pos, leadUnit&0x7fff) : readNodeValue(pos, leadUnit); - } - - /** - * Determines whether all strings reachable from the current state - * map to the same value. - * @param uniqueValue Receives the unique value, if this function returns TRUE. - * (output-only) - * @return TRUE if all strings reachable from the current state - * map to the same value. - * @stable ICU 4.8 - */ - inline UBool hasUniqueValue(int32_t &uniqueValue) const { - const char16_t *pos=pos_; - // Skip the rest of a pending linear-match node. - return pos!=NULL && findUniqueValue(pos+remainingMatchLength_+1, FALSE, uniqueValue); - } - - /** - * Finds each char16_t which continues the string from the current state. - * That is, each char16_t c for which it would be next(c)!=USTRINGTRIE_NO_MATCH now. - * @param out Each next char16_t is appended to this object. - * @return the number of char16_ts which continue the string from here - * @stable ICU 4.8 - */ - int32_t getNextUChars(Appendable &out) const; - - /** - * Iterator for all of the (string, value) pairs in a UCharsTrie. - * @stable ICU 4.8 - */ - class U_COMMON_API Iterator : public UMemory { - public: - /** - * Iterates from the root of a char16_t-serialized UCharsTrie. - * @param trieUChars The trie char16_ts. - * @param maxStringLength If 0, the iterator returns full strings. - * Otherwise, the iterator returns strings with this maximum length. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @stable ICU 4.8 - */ - Iterator(ConstChar16Ptr trieUChars, int32_t maxStringLength, UErrorCode &errorCode); - - /** - * Iterates from the current state of the specified UCharsTrie. - * @param trie The trie whose state will be copied for iteration. - * @param maxStringLength If 0, the iterator returns full strings. - * Otherwise, the iterator returns strings with this maximum length. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @stable ICU 4.8 - */ - Iterator(const UCharsTrie &trie, int32_t maxStringLength, UErrorCode &errorCode); - - /** - * Destructor. - * @stable ICU 4.8 - */ - ~Iterator(); - - /** - * Resets this iterator to its initial state. - * @return *this - * @stable ICU 4.8 - */ - Iterator &reset(); - - /** - * @return TRUE if there are more elements. - * @stable ICU 4.8 - */ - UBool hasNext() const; - - /** - * Finds the next (string, value) pair if there is one. - * - * If the string is truncated to the maximum length and does not - * have a real value, then the value is set to -1. - * In this case, this "not a real value" is indistinguishable from - * a real value of -1. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return TRUE if there is another element. - * @stable ICU 4.8 - */ - UBool next(UErrorCode &errorCode); - - /** - * @return The string for the last successful next(). - * @stable ICU 4.8 - */ - const UnicodeString &getString() const { return str_; } - /** - * @return The value for the last successful next(). - * @stable ICU 4.8 - */ - int32_t getValue() const { return value_; } - - private: - UBool truncateAndStop() { - pos_=NULL; - value_=-1; // no real value for str - return TRUE; - } - - const char16_t *branchNext(const char16_t *pos, int32_t length, UErrorCode &errorCode); - - const char16_t *uchars_; - const char16_t *pos_; - const char16_t *initialPos_; - int32_t remainingMatchLength_; - int32_t initialRemainingMatchLength_; - UBool skipValue_; // Skip intermediate value which was already delivered. - - UnicodeString str_; - int32_t maxLength_; - int32_t value_; - - // The stack stores pairs of integers for backtracking to another - // outbound edge of a branch node. - // The first integer is an offset from uchars_. - // The second integer has the str_.length() from before the node in bits 15..0, - // and the remaining branch length in bits 31..16. - // (We could store the remaining branch length minus 1 in bits 30..16 and not use the sign bit, - // but the code looks more confusing that way.) - UVector32 *stack_; - }; - -private: - friend class UCharsTrieBuilder; - - /** - * Constructs a UCharsTrie reader instance. - * Unlike the public constructor which just aliases an array, - * this constructor adopts the builder's array. - * This constructor is only called by the builder. - */ - UCharsTrie(char16_t *adoptUChars, const char16_t *trieUChars) - : ownedArray_(adoptUChars), uchars_(trieUChars), - pos_(uchars_), remainingMatchLength_(-1) {} - - // No assignment operator. - UCharsTrie &operator=(const UCharsTrie &other); - - inline void stop() { - pos_=NULL; - } - - // Reads a compact 32-bit integer. - // pos is already after the leadUnit, and the lead unit has bit 15 reset. - static inline int32_t readValue(const char16_t *pos, int32_t leadUnit) { - int32_t value; - if(leadUnit=kMinTwoUnitValueLead) { - if(leadUnit>6)-1; - } else if(leadUnit=kMinTwoUnitNodeValueLead) { - if(leadUnit=kMinTwoUnitDeltaLead) { - if(delta==kThreeUnitDeltaLead) { - delta=(pos[0]<<16)|pos[1]; - pos+=2; - } else { - delta=((delta-kMinTwoUnitDeltaLead)<<16)|*pos++; - } - } - return pos+delta; - } - - static const char16_t *skipDelta(const char16_t *pos) { - int32_t delta=*pos++; - if(delta>=kMinTwoUnitDeltaLead) { - if(delta==kThreeUnitDeltaLead) { - pos+=2; - } else { - ++pos; - } - } - return pos; - } - - static inline UStringTrieResult valueResult(int32_t node) { - return (UStringTrieResult)(USTRINGTRIE_INTERMEDIATE_VALUE-(node>>15)); - } - - // Handles a branch node for both next(uchar) and next(string). - UStringTrieResult branchNext(const char16_t *pos, int32_t length, int32_t uchar); - - // Requires remainingLength_<0. - UStringTrieResult nextImpl(const char16_t *pos, int32_t uchar); - - // Helper functions for hasUniqueValue(). - // Recursively finds a unique value (or whether there is not a unique one) - // from a branch. - static const char16_t *findUniqueValueFromBranch(const char16_t *pos, int32_t length, - UBool haveUniqueValue, int32_t &uniqueValue); - // Recursively finds a unique value (or whether there is not a unique one) - // starting from a position on a node lead unit. - static UBool findUniqueValue(const char16_t *pos, UBool haveUniqueValue, int32_t &uniqueValue); - - // Helper functions for getNextUChars(). - // getNextUChars() when pos is on a branch node. - static void getNextBranchUChars(const char16_t *pos, int32_t length, Appendable &out); - - // UCharsTrie data structure - // - // The trie consists of a series of char16_t-serialized nodes for incremental - // Unicode string/char16_t sequence matching. (char16_t=16-bit unsigned integer) - // The root node is at the beginning of the trie data. - // - // Types of nodes are distinguished by their node lead unit ranges. - // After each node, except a final-value node, another node follows to - // encode match values or continue matching further units. - // - // Node types: - // - Final-value node: Stores a 32-bit integer in a compact, variable-length format. - // The value is for the string/char16_t sequence so far. - // - Match node, optionally with an intermediate value in a different compact format. - // The value, if present, is for the string/char16_t sequence so far. - // - // Aside from the value, which uses the node lead unit's high bits: - // - // - Linear-match node: Matches a number of units. - // - Branch node: Branches to other nodes according to the current input unit. - // The node unit is the length of the branch (number of units to select from) - // minus 1. It is followed by a sub-node: - // - If the length is at most kMaxBranchLinearSubNodeLength, then - // there are length-1 (key, value) pairs and then one more comparison unit. - // If one of the key units matches, then the value is either a final value for - // the string so far, or a "jump" delta to the next node. - // If the last unit matches, then matching continues with the next node. - // (Values have the same encoding as final-value nodes.) - // - If the length is greater than kMaxBranchLinearSubNodeLength, then - // there is one unit and one "jump" delta. - // If the input unit is less than the sub-node unit, then "jump" by delta to - // the next sub-node which will have a length of length/2. - // (The delta has its own compact encoding.) - // Otherwise, skip the "jump" delta to the next sub-node - // which will have a length of length-length/2. - - // Match-node lead unit values, after masking off intermediate-value bits: - - // 0000..002f: Branch node. If node!=0 then the length is node+1, otherwise - // the length is one more than the next unit. - - // For a branch sub-node with at most this many entries, we drop down - // to a linear search. - static const int32_t kMaxBranchLinearSubNodeLength=5; - - // 0030..003f: Linear-match node, match 1..16 units and continue reading the next node. - static const int32_t kMinLinearMatch=0x30; - static const int32_t kMaxLinearMatchLength=0x10; - - // Match-node lead unit bits 14..6 for the optional intermediate value. - // If these bits are 0, then there is no intermediate value. - // Otherwise, see the *NodeValue* constants below. - static const int32_t kMinValueLead=kMinLinearMatch+kMaxLinearMatchLength; // 0x0040 - static const int32_t kNodeTypeMask=kMinValueLead-1; // 0x003f - - // A final-value node has bit 15 set. - static const int32_t kValueIsFinal=0x8000; - - // Compact value: After testing and masking off bit 15, use the following thresholds. - static const int32_t kMaxOneUnitValue=0x3fff; - - static const int32_t kMinTwoUnitValueLead=kMaxOneUnitValue+1; // 0x4000 - static const int32_t kThreeUnitValueLead=0x7fff; - - static const int32_t kMaxTwoUnitValue=((kThreeUnitValueLead-kMinTwoUnitValueLead)<<16)-1; // 0x3ffeffff - - // Compact intermediate-value integer, lead unit shared with a branch or linear-match node. - static const int32_t kMaxOneUnitNodeValue=0xff; - static const int32_t kMinTwoUnitNodeValueLead=kMinValueLead+((kMaxOneUnitNodeValue+1)<<6); // 0x4040 - static const int32_t kThreeUnitNodeValueLead=0x7fc0; - - static const int32_t kMaxTwoUnitNodeValue= - ((kThreeUnitNodeValueLead-kMinTwoUnitNodeValueLead)<<10)-1; // 0xfdffff - - // Compact delta integers. - static const int32_t kMaxOneUnitDelta=0xfbff; - static const int32_t kMinTwoUnitDeltaLead=kMaxOneUnitDelta+1; // 0xfc00 - static const int32_t kThreeUnitDeltaLead=0xffff; - - static const int32_t kMaxTwoUnitDelta=((kThreeUnitDeltaLead-kMinTwoUnitDeltaLead)<<16)-1; // 0x03feffff - - char16_t *ownedArray_; - - // Fixed value referencing the UCharsTrie words. - const char16_t *uchars_; - - // Iterator variables. - - // Pointer to next trie unit to read. NULL if no more matches. - const char16_t *pos_; - // Remaining length of a linear-match node, minus 1. Negative if not in such a node. - int32_t remainingMatchLength_; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // __UCHARSTRIE_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucharstriebuilder.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucharstriebuilder.h deleted file mode 100644 index e8e7390bdc..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucharstriebuilder.h +++ /dev/null @@ -1,189 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2010-2016, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* file name: ucharstriebuilder.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2010nov14 -* created by: Markus W. Scherer -*/ - -#ifndef __UCHARSTRIEBUILDER_H__ -#define __UCHARSTRIEBUILDER_H__ - -#include "unicode/utypes.h" -#include "unicode/stringtriebuilder.h" -#include "unicode/ucharstrie.h" -#include "unicode/unistr.h" - -/** - * \file - * \brief C++ API: Builder for icu::UCharsTrie - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class UCharsTrieElement; - -/** - * Builder class for UCharsTrie. - * - * This class is not intended for public subclassing. - * @stable ICU 4.8 - */ -class U_COMMON_API UCharsTrieBuilder : public StringTrieBuilder { -public: - /** - * Constructs an empty builder. - * @param errorCode Standard ICU error code. - * @stable ICU 4.8 - */ - UCharsTrieBuilder(UErrorCode &errorCode); - - /** - * Destructor. - * @stable ICU 4.8 - */ - virtual ~UCharsTrieBuilder(); - - /** - * Adds a (string, value) pair. - * The string must be unique. - * The string contents will be copied; the builder does not keep - * a reference to the input UnicodeString or its buffer. - * @param s The input string. - * @param value The value associated with this string. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return *this - * @stable ICU 4.8 - */ - UCharsTrieBuilder &add(const UnicodeString &s, int32_t value, UErrorCode &errorCode); - - /** - * Builds a UCharsTrie for the add()ed data. - * Once built, no further data can be add()ed until clear() is called. - * - * A UCharsTrie cannot be empty. At least one (string, value) pair - * must have been add()ed. - * - * This method passes ownership of the builder's internal result array to the new trie object. - * Another call to any build() variant will re-serialize the trie. - * After clear() has been called, a new array will be used as well. - * @param buildOption Build option, see UStringTrieBuildOption. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return A new UCharsTrie for the add()ed data. - * @stable ICU 4.8 - */ - UCharsTrie *build(UStringTrieBuildOption buildOption, UErrorCode &errorCode); - - /** - * Builds a UCharsTrie for the add()ed data and char16_t-serializes it. - * Once built, no further data can be add()ed until clear() is called. - * - * A UCharsTrie cannot be empty. At least one (string, value) pair - * must have been add()ed. - * - * Multiple calls to buildUnicodeString() set the UnicodeStrings to the - * builder's same char16_t array, without rebuilding. - * If buildUnicodeString() is called after build(), the trie will be - * re-serialized into a new array. - * If build() is called after buildUnicodeString(), the trie object will become - * the owner of the previously returned array. - * After clear() has been called, a new array will be used as well. - * @param buildOption Build option, see UStringTrieBuildOption. - * @param result A UnicodeString which will be set to the char16_t-serialized - * UCharsTrie for the add()ed data. - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return result - * @stable ICU 4.8 - */ - UnicodeString &buildUnicodeString(UStringTrieBuildOption buildOption, UnicodeString &result, - UErrorCode &errorCode); - - /** - * Removes all (string, value) pairs. - * New data can then be add()ed and a new trie can be built. - * @return *this - * @stable ICU 4.8 - */ - UCharsTrieBuilder &clear() { - strings.remove(); - elementsLength=0; - ucharsLength=0; - return *this; - } - -private: - UCharsTrieBuilder(const UCharsTrieBuilder &other); // no copy constructor - UCharsTrieBuilder &operator=(const UCharsTrieBuilder &other); // no assignment operator - - void buildUChars(UStringTrieBuildOption buildOption, UErrorCode &errorCode); - - virtual int32_t getElementStringLength(int32_t i) const; - virtual char16_t getElementUnit(int32_t i, int32_t unitIndex) const; - virtual int32_t getElementValue(int32_t i) const; - - virtual int32_t getLimitOfLinearMatch(int32_t first, int32_t last, int32_t unitIndex) const; - - virtual int32_t countElementUnits(int32_t start, int32_t limit, int32_t unitIndex) const; - virtual int32_t skipElementsBySomeUnits(int32_t i, int32_t unitIndex, int32_t count) const; - virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t unitIndex, char16_t unit) const; - - virtual UBool matchNodesCanHaveValues() const { return TRUE; } - - virtual int32_t getMaxBranchLinearSubNodeLength() const { return UCharsTrie::kMaxBranchLinearSubNodeLength; } - virtual int32_t getMinLinearMatch() const { return UCharsTrie::kMinLinearMatch; } - virtual int32_t getMaxLinearMatchLength() const { return UCharsTrie::kMaxLinearMatchLength; } - - class UCTLinearMatchNode : public LinearMatchNode { - public: - UCTLinearMatchNode(const char16_t *units, int32_t len, Node *nextNode); - virtual UBool operator==(const Node &other) const; - virtual void write(StringTrieBuilder &builder); - private: - const char16_t *s; - }; - - virtual Node *createLinearMatchNode(int32_t i, int32_t unitIndex, int32_t length, - Node *nextNode) const; - - UBool ensureCapacity(int32_t length); - virtual int32_t write(int32_t unit); - int32_t write(const char16_t *s, int32_t length); - virtual int32_t writeElementUnits(int32_t i, int32_t unitIndex, int32_t length); - virtual int32_t writeValueAndFinal(int32_t i, UBool isFinal); - virtual int32_t writeValueAndType(UBool hasValue, int32_t value, int32_t node); - virtual int32_t writeDeltaTo(int32_t jumpTarget); - - UnicodeString strings; - UCharsTrieElement *elements; - int32_t elementsCapacity; - int32_t elementsLength; - - // char16_t serialization of the trie. - // Grows from the back: ucharsLength measures from the end of the buffer! - char16_t *uchars; - int32_t ucharsCapacity; - int32_t ucharsLength; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif // __UCHARSTRIEBUILDER_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uchriter.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uchriter.h deleted file mode 100644 index 686f87e1f5..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uchriter.h +++ /dev/null @@ -1,390 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1998-2005, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -*/ - -#ifndef UCHRITER_H -#define UCHRITER_H - -#include "unicode/utypes.h" -#include "unicode/chariter.h" - -/** - * \file - * \brief C++ API: char16_t Character Iterator - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * A concrete subclass of CharacterIterator that iterates over the - * characters (code units or code points) in a char16_t array. - * It's possible not only to create an - * iterator that iterates over an entire char16_t array, but also to - * create one that iterates over only a subrange of a char16_t array - * (iterators over different subranges of the same char16_t array don't - * compare equal). - * @see CharacterIterator - * @see ForwardCharacterIterator - * @stable ICU 2.0 - */ -class U_COMMON_API UCharCharacterIterator : public CharacterIterator { -public: - /** - * Create an iterator over the char16_t array referred to by "textPtr". - * The iteration range is 0 to length-1. - * text is only aliased, not adopted (the - * destructor will not delete it). - * @param textPtr The char16_t array to be iterated over - * @param length The length of the char16_t array - * @stable ICU 2.0 - */ - UCharCharacterIterator(ConstChar16Ptr textPtr, int32_t length); - - /** - * Create an iterator over the char16_t array referred to by "textPtr". - * The iteration range is 0 to length-1. - * text is only aliased, not adopted (the - * destructor will not delete it). - * The starting - * position is specified by "position". If "position" is outside the valid - * iteration range, the behavior of this object is undefined. - * @param textPtr The char16_t array to be iteratd over - * @param length The length of the char16_t array - * @param position The starting position of the iteration - * @stable ICU 2.0 - */ - UCharCharacterIterator(ConstChar16Ptr textPtr, int32_t length, - int32_t position); - - /** - * Create an iterator over the char16_t array referred to by "textPtr". - * The iteration range is 0 to end-1. - * text is only aliased, not adopted (the - * destructor will not delete it). - * The starting - * position is specified by "position". If begin and end do not - * form a valid iteration range or "position" is outside the valid - * iteration range, the behavior of this object is undefined. - * @param textPtr The char16_t array to be iterated over - * @param length The length of the char16_t array - * @param textBegin The begin position of the iteration range - * @param textEnd The end position of the iteration range - * @param position The starting position of the iteration - * @stable ICU 2.0 - */ - UCharCharacterIterator(ConstChar16Ptr textPtr, int32_t length, - int32_t textBegin, - int32_t textEnd, - int32_t position); - - /** - * Copy constructor. The new iterator iterates over the same range - * of the same string as "that", and its initial position is the - * same as "that"'s current position. - * @param that The UCharCharacterIterator to be copied - * @stable ICU 2.0 - */ - UCharCharacterIterator(const UCharCharacterIterator& that); - - /** - * Destructor. - * @stable ICU 2.0 - */ - virtual ~UCharCharacterIterator(); - - /** - * Assignment operator. *this is altered to iterate over the sane - * range of the same string as "that", and refers to the same - * character within that string as "that" does. - * @param that The object to be copied - * @return the newly created object - * @stable ICU 2.0 - */ - UCharCharacterIterator& - operator=(const UCharCharacterIterator& that); - - /** - * Returns true if the iterators iterate over the same range of the - * same string and are pointing at the same character. - * @param that The ForwardCharacterIterator used to be compared for equality - * @return true if the iterators iterate over the same range of the - * same string and are pointing at the same character. - * @stable ICU 2.0 - */ - virtual UBool operator==(const ForwardCharacterIterator& that) const; - - /** - * Generates a hash code for this iterator. - * @return the hash code. - * @stable ICU 2.0 - */ - virtual int32_t hashCode(void) const; - - /** - * Returns a new UCharCharacterIterator referring to the same - * character in the same range of the same string as this one. The - * caller must delete the new iterator. - * @return the CharacterIterator newly created - * @stable ICU 2.0 - */ - virtual CharacterIterator* clone(void) const; - - /** - * Sets the iterator to refer to the first code unit in its - * iteration range, and returns that code unit. - * This can be used to begin an iteration with next(). - * @return the first code unit in its iteration range. - * @stable ICU 2.0 - */ - virtual char16_t first(void); - - /** - * Sets the iterator to refer to the first code unit in its - * iteration range, returns that code unit, and moves the position - * to the second code unit. This is an alternative to setToStart() - * for forward iteration with nextPostInc(). - * @return the first code unit in its iteration range - * @stable ICU 2.0 - */ - virtual char16_t firstPostInc(void); - - /** - * Sets the iterator to refer to the first code point in its - * iteration range, and returns that code unit, - * This can be used to begin an iteration with next32(). - * Note that an iteration with next32PostInc(), beginning with, - * e.g., setToStart() or firstPostInc(), is more efficient. - * @return the first code point in its iteration range - * @stable ICU 2.0 - */ - virtual UChar32 first32(void); - - /** - * Sets the iterator to refer to the first code point in its - * iteration range, returns that code point, and moves the position - * to the second code point. This is an alternative to setToStart() - * for forward iteration with next32PostInc(). - * @return the first code point in its iteration range. - * @stable ICU 2.0 - */ - virtual UChar32 first32PostInc(void); - - /** - * Sets the iterator to refer to the last code unit in its - * iteration range, and returns that code unit. - * This can be used to begin an iteration with previous(). - * @return the last code unit in its iteration range. - * @stable ICU 2.0 - */ - virtual char16_t last(void); - - /** - * Sets the iterator to refer to the last code point in its - * iteration range, and returns that code unit. - * This can be used to begin an iteration with previous32(). - * @return the last code point in its iteration range. - * @stable ICU 2.0 - */ - virtual UChar32 last32(void); - - /** - * Sets the iterator to refer to the "position"-th code unit - * in the text-storage object the iterator refers to, and - * returns that code unit. - * @param position the position within the text-storage object - * @return the code unit - * @stable ICU 2.0 - */ - virtual char16_t setIndex(int32_t position); - - /** - * Sets the iterator to refer to the beginning of the code point - * that contains the "position"-th code unit - * in the text-storage object the iterator refers to, and - * returns that code point. - * The current position is adjusted to the beginning of the code point - * (its first code unit). - * @param position the position within the text-storage object - * @return the code unit - * @stable ICU 2.0 - */ - virtual UChar32 setIndex32(int32_t position); - - /** - * Returns the code unit the iterator currently refers to. - * @return the code unit the iterator currently refers to. - * @stable ICU 2.0 - */ - virtual char16_t current(void) const; - - /** - * Returns the code point the iterator currently refers to. - * @return the code point the iterator currently refers to. - * @stable ICU 2.0 - */ - virtual UChar32 current32(void) const; - - /** - * Advances to the next code unit in the iteration range (toward - * endIndex()), and returns that code unit. If there are no more - * code units to return, returns DONE. - * @return the next code unit in the iteration range. - * @stable ICU 2.0 - */ - virtual char16_t next(void); - - /** - * Gets the current code unit for returning and advances to the next code unit - * in the iteration range - * (toward endIndex()). If there are - * no more code units to return, returns DONE. - * @return the current code unit. - * @stable ICU 2.0 - */ - virtual char16_t nextPostInc(void); - - /** - * Advances to the next code point in the iteration range (toward - * endIndex()), and returns that code point. If there are no more - * code points to return, returns DONE. - * Note that iteration with "pre-increment" semantics is less - * efficient than iteration with "post-increment" semantics - * that is provided by next32PostInc(). - * @return the next code point in the iteration range. - * @stable ICU 2.0 - */ - virtual UChar32 next32(void); - - /** - * Gets the current code point for returning and advances to the next code point - * in the iteration range - * (toward endIndex()). If there are - * no more code points to return, returns DONE. - * @return the current point. - * @stable ICU 2.0 - */ - virtual UChar32 next32PostInc(void); - - /** - * Returns FALSE if there are no more code units or code points - * at or after the current position in the iteration range. - * This is used with nextPostInc() or next32PostInc() in forward - * iteration. - * @return FALSE if there are no more code units or code points - * at or after the current position in the iteration range. - * @stable ICU 2.0 - */ - virtual UBool hasNext(); - - /** - * Advances to the previous code unit in the iteration range (toward - * startIndex()), and returns that code unit. If there are no more - * code units to return, returns DONE. - * @return the previous code unit in the iteration range. - * @stable ICU 2.0 - */ - virtual char16_t previous(void); - - /** - * Advances to the previous code point in the iteration range (toward - * startIndex()), and returns that code point. If there are no more - * code points to return, returns DONE. - * @return the previous code point in the iteration range. - * @stable ICU 2.0 - */ - virtual UChar32 previous32(void); - - /** - * Returns FALSE if there are no more code units or code points - * before the current position in the iteration range. - * This is used with previous() or previous32() in backward - * iteration. - * @return FALSE if there are no more code units or code points - * before the current position in the iteration range. - * @stable ICU 2.0 - */ - virtual UBool hasPrevious(); - - /** - * Moves the current position relative to the start or end of the - * iteration range, or relative to the current position itself. - * The movement is expressed in numbers of code units forward - * or backward by specifying a positive or negative delta. - * @param delta the position relative to origin. A positive delta means forward; - * a negative delta means backward. - * @param origin Origin enumeration {kStart, kCurrent, kEnd} - * @return the new position - * @stable ICU 2.0 - */ - virtual int32_t move(int32_t delta, EOrigin origin); - - /** - * Moves the current position relative to the start or end of the - * iteration range, or relative to the current position itself. - * The movement is expressed in numbers of code points forward - * or backward by specifying a positive or negative delta. - * @param delta the position relative to origin. A positive delta means forward; - * a negative delta means backward. - * @param origin Origin enumeration {kStart, kCurrent, kEnd} - * @return the new position - * @stable ICU 2.0 - */ -#ifdef move32 - // One of the system headers right now is sometimes defining a conflicting macro we don't use -#undef move32 -#endif - virtual int32_t move32(int32_t delta, EOrigin origin); - - /** - * Sets the iterator to iterate over a new range of text - * @stable ICU 2.0 - */ - void setText(ConstChar16Ptr newText, int32_t newTextLength); - - /** - * Copies the char16_t array under iteration into the UnicodeString - * referred to by "result". Even if this iterator iterates across - * only a part of this string, the whole string is copied. - * @param result Receives a copy of the text under iteration. - * @stable ICU 2.0 - */ - virtual void getText(UnicodeString& result); - - /** - * Return a class ID for this class (not really public) - * @return a class ID for this class - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Return a class ID for this object (not really public) - * @return a class ID for this object. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const; - -protected: - /** - * Protected constructor - * @stable ICU 2.0 - */ - UCharCharacterIterator(); - /** - * Protected member text - * @stable ICU 2.0 - */ - const char16_t* text; - -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uclean.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uclean.h deleted file mode 100644 index 7cef6dba68..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uclean.h +++ /dev/null @@ -1,262 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* Copyright (C) 2001-2014, International Business Machines -* Corporation and others. All Rights Reserved. -****************************************************************************** -* file name: uclean.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2001July05 -* created by: George Rhoten -*/ - -#ifndef __UCLEAN_H__ -#define __UCLEAN_H__ - -#include "unicode/utypes.h" -/** - * \file - * \brief C API: Initialize and clean up ICU - */ - -/** - * Initialize ICU. - * - * Use of this function is optional. It is OK to simply use ICU - * services and functions without first having initialized - * ICU by calling u_init(). - * - * u_init() will attempt to load some part of ICU's data, and is - * useful as a test for configuration or installation problems that - * leave the ICU data inaccessible. A successful invocation of u_init() - * does not, however, guarantee that all ICU data is accessible. - * - * Multiple calls to u_init() cause no harm, aside from the small amount - * of time required. - * - * In old versions of ICU, u_init() was required in multi-threaded applications - * to ensure the thread safety of ICU. u_init() is no longer needed for this purpose. - * - * @param status An ICU UErrorCode parameter. It must not be NULL. - * An Error will be returned if some required part of ICU data can not - * be loaded or initialized. - * The function returns immediately if the input error code indicates a - * failure, as usual. - * - * @stable ICU 2.6 - */ -U_STABLE void U_EXPORT2 -u_init(UErrorCode *status); - -#ifndef U_HIDE_SYSTEM_API -/** - * Clean up the system resources, such as allocated memory or open files, - * used in all ICU libraries. This will free/delete all memory owned by the - * ICU libraries, and return them to their original load state. All open ICU - * items (collators, resource bundles, converters, etc.) must be closed before - * calling this function, otherwise ICU may not free its allocated memory - * (e.g. close your converters and resource bundles before calling this - * function). Generally, this function should be called once just before - * an application exits. For applications that dynamically load and unload - * the ICU libraries (relatively uncommon), u_cleanup() should be called - * just before the library unload. - *

- * u_cleanup() also clears any ICU heap functions, mutex functions or - * trace functions that may have been set for the process. - * This has the effect of restoring ICU to its initial condition, before - * any of these override functions were installed. Refer to - * u_setMemoryFunctions(), u_setMutexFunctions and - * utrace_setFunctions(). If ICU is to be reinitialized after - * calling u_cleanup(), these runtime override functions will need to - * be set up again if they are still required. - *

- * u_cleanup() is not thread safe. All other threads should stop using ICU - * before calling this function. - *

- * Any open ICU items will be left in an undefined state by u_cleanup(), - * and any subsequent attempt to use such an item will give unpredictable - * results. - *

- * After calling u_cleanup(), an application may continue to use ICU by - * calling u_init(). An application must invoke u_init() first from one single - * thread before allowing other threads call u_init(). All threads existing - * at the time of the first thread's call to u_init() must also call - * u_init() themselves before continuing with other ICU operations. - *

- * The use of u_cleanup() just before an application terminates is optional, - * but it should be called only once for performance reasons. The primary - * benefit is to eliminate reports of memory or resource leaks originating - * in ICU code from the results generated by heap analysis tools. - *

- * Use this function with great care! - *

- * - * @stable ICU 2.0 - * @system - */ -U_STABLE void U_EXPORT2 -u_cleanup(void); - -U_CDECL_BEGIN -/** - * Pointer type for a user supplied memory allocation function. - * @param context user supplied value, obtained from u_setMemoryFunctions(). - * @param size The number of bytes to be allocated - * @return Pointer to the newly allocated memory, or NULL if the allocation failed. - * @stable ICU 2.8 - * @system - */ -typedef void *U_CALLCONV UMemAllocFn(const void *context, size_t size); -/** - * Pointer type for a user supplied memory re-allocation function. - * @param context user supplied value, obtained from u_setMemoryFunctions(). - * @param size The number of bytes to be allocated - * @return Pointer to the newly allocated memory, or NULL if the allocation failed. - * @stable ICU 2.8 - * @system - */ -typedef void *U_CALLCONV UMemReallocFn(const void *context, void *mem, size_t size); -/** - * Pointer type for a user supplied memory free function. Behavior should be - * similar the standard C library free(). - * @param context user supplied value, obtained from u_setMemoryFunctions(). - * @param mem Pointer to the memory block to be resized - * @param size The new size for the block - * @return Pointer to the resized memory block, or NULL if the resizing failed. - * @stable ICU 2.8 - * @system - */ -typedef void U_CALLCONV UMemFreeFn (const void *context, void *mem); - -/** - * Set the functions that ICU will use for memory allocation. - * Use of this function is optional; by default (without this function), ICU will - * use the standard C library malloc() and free() functions. - * This function can only be used when ICU is in an initial, unused state, before - * u_init() has been called. - * @param context This pointer value will be saved, and then (later) passed as - * a parameter to the memory functions each time they - * are called. - * @param a Pointer to a user-supplied malloc function. - * @param r Pointer to a user-supplied realloc function. - * @param f Pointer to a user-supplied free function. - * @param status Receives error values. - * @stable ICU 2.8 - * @system - */ -U_STABLE void U_EXPORT2 -u_setMemoryFunctions(const void *context, UMemAllocFn * U_CALLCONV_FPTR a, UMemReallocFn * U_CALLCONV_FPTR r, UMemFreeFn * U_CALLCONV_FPTR f, - UErrorCode *status); - -U_CDECL_END - -#ifndef U_HIDE_DEPRECATED_API -/********************************************************************************* - * - * Deprecated Functions - * - * The following functions for user supplied mutexes are no longer supported. - * Any attempt to use them will return a U_UNSUPPORTED_ERROR. - * - **********************************************************************************/ - -/** - * An opaque pointer type that represents an ICU mutex. - * For user-implemented mutexes, the value will typically point to a - * struct or object that implements the mutex. - * @deprecated ICU 52. This type is no longer supported. - * @system - */ -typedef void *UMTX; - -U_CDECL_BEGIN -/** - * Function Pointer type for a user supplied mutex initialization function. - * The user-supplied function will be called by ICU whenever ICU needs to create a - * new mutex. The function implementation should create a mutex, and store a pointer - * to something that uniquely identifies the mutex into the UMTX that is supplied - * as a parameter. - * @param context user supplied value, obtained from u_setMutexFunctions(). - * @param mutex Receives a pointer that identifies the new mutex. - * The mutex init function must set the UMTX to a non-null value. - * Subsequent calls by ICU to lock, unlock, or destroy a mutex will - * identify the mutex by the UMTX value. - * @param status Error status. Report errors back to ICU by setting this variable - * with an error code. - * @deprecated ICU 52. This function is no longer supported. - * @system - */ -typedef void U_CALLCONV UMtxInitFn (const void *context, UMTX *mutex, UErrorCode* status); - - -/** - * Function Pointer type for a user supplied mutex functions. - * One of the user-supplied functions with this signature will be called by ICU - * whenever ICU needs to lock, unlock, or destroy a mutex. - * @param context user supplied value, obtained from u_setMutexFunctions(). - * @param mutex specify the mutex on which to operate. - * @deprecated ICU 52. This function is no longer supported. - * @system - */ -typedef void U_CALLCONV UMtxFn (const void *context, UMTX *mutex); -U_CDECL_END - -/** - * Set the functions that ICU will use for mutex operations - * Use of this function is optional; by default (without this function), ICU will - * directly access system functions for mutex operations - * This function can only be used when ICU is in an initial, unused state, before - * u_init() has been called. - * @param context This pointer value will be saved, and then (later) passed as - * a parameter to the user-supplied mutex functions each time they - * are called. - * @param init Pointer to a mutex initialization function. Must be non-null. - * @param destroy Pointer to the mutex destroy function. Must be non-null. - * @param lock pointer to the mutex lock function. Must be non-null. - * @param unlock Pointer to the mutex unlock function. Must be non-null. - * @param status Receives error values. - * @deprecated ICU 52. This function is no longer supported. - * @system - */ -U_DEPRECATED void U_EXPORT2 -u_setMutexFunctions(const void *context, UMtxInitFn *init, UMtxFn *destroy, UMtxFn *lock, UMtxFn *unlock, - UErrorCode *status); - - -/** - * Pointer type for a user supplied atomic increment or decrement function. - * @param context user supplied value, obtained from u_setAtomicIncDecFunctions(). - * @param p Pointer to a 32 bit int to be incremented or decremented - * @return The value of the variable after the inc or dec operation. - * @deprecated ICU 52. This function is no longer supported. - * @system - */ -typedef int32_t U_CALLCONV UMtxAtomicFn(const void *context, int32_t *p); - -/** - * Set the functions that ICU will use for atomic increment and decrement of int32_t values. - * Use of this function is optional; by default (without this function), ICU will - * use its own internal implementation of atomic increment/decrement. - * This function can only be used when ICU is in an initial, unused state, before - * u_init() has been called. - * @param context This pointer value will be saved, and then (later) passed as - * a parameter to the increment and decrement functions each time they - * are called. This function can only be called - * @param inc Pointer to a function to do an atomic increment operation. Must be non-null. - * @param dec Pointer to a function to do an atomic decrement operation. Must be non-null. - * @param status Receives error values. - * @deprecated ICU 52. This function is no longer supported. - * @system - */ -U_DEPRECATED void U_EXPORT2 -u_setAtomicIncDecFunctions(const void *context, UMtxAtomicFn *inc, UMtxAtomicFn *dec, - UErrorCode *status); - -#endif /* U_HIDE_DEPRECATED_API */ -#endif /* U_HIDE_SYSTEM_API */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnv.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnv.h deleted file mode 100644 index 902bc1595e..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnv.h +++ /dev/null @@ -1,2042 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1999-2014, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** - * ucnv.h: - * External APIs for the ICU's codeset conversion library - * Bertrand A. Damiba - * - * Modification History: - * - * Date Name Description - * 04/04/99 helena Fixed internal header inclusion. - * 05/11/00 helena Added setFallback and usesFallback APIs. - * 06/29/2000 helena Major rewrite of the callback APIs. - * 12/07/2000 srl Update of documentation - */ - -/** - * \file - * \brief C API: Character conversion - * - *

Character Conversion C API

- * - *

This API is used to convert codepage or character encoded data to and - * from UTF-16. You can open a converter with {@link ucnv_open() }. With that - * converter, you can get its properties, set options, convert your data and - * close the converter.

- * - *

Since many software programs recognize different converter names for - * different types of converters, there are other functions in this API to - * iterate over the converter aliases. The functions {@link ucnv_getAvailableName() }, - * {@link ucnv_getAlias() } and {@link ucnv_getStandardName() } are some of the - * more frequently used alias functions to get this information.

- * - *

When a converter encounters an illegal, irregular, invalid or unmappable character - * its default behavior is to use a substitution character to replace the - * bad byte sequence. This behavior can be changed by using {@link ucnv_setFromUCallBack() } - * or {@link ucnv_setToUCallBack() } on the converter. The header ucnv_err.h defines - * many other callback actions that can be used instead of a character substitution.

- * - *

More information about this API can be found in our - * User's - * Guide.

- */ - -#ifndef UCNV_H -#define UCNV_H - -#include "unicode/ucnv_err.h" -#include "unicode/uenum.h" -#include "unicode/localpointer.h" - -#if !defined(USET_DEFINED) && !defined(U_IN_DOXYGEN) - -#define USET_DEFINED - -/** - * USet is the C API type corresponding to C++ class UnicodeSet. - * It is forward-declared here to avoid including unicode/uset.h file if related - * conversion APIs are not used. - * - * @see ucnv_getUnicodeSet - * @stable ICU 2.4 - */ -typedef struct USet USet; - -#endif - -#if !UCONFIG_NO_CONVERSION - -U_CDECL_BEGIN - -/** Maximum length of a converter name including the terminating NULL @stable ICU 2.0 */ -#define UCNV_MAX_CONVERTER_NAME_LENGTH 60 -/** Maximum length of a converter name including path and terminating NULL @stable ICU 2.0 */ -#define UCNV_MAX_FULL_FILE_NAME_LENGTH (600+UCNV_MAX_CONVERTER_NAME_LENGTH) - -/** Shift in for EBDCDIC_STATEFUL and iso2022 states @stable ICU 2.0 */ -#define UCNV_SI 0x0F -/** Shift out for EBDCDIC_STATEFUL and iso2022 states @stable ICU 2.0 */ -#define UCNV_SO 0x0E - -/** - * Enum for specifying basic types of converters - * @see ucnv_getType - * @stable ICU 2.0 - */ -typedef enum { - /** @stable ICU 2.0 */ - UCNV_UNSUPPORTED_CONVERTER = -1, - /** @stable ICU 2.0 */ - UCNV_SBCS = 0, - /** @stable ICU 2.0 */ - UCNV_DBCS = 1, - /** @stable ICU 2.0 */ - UCNV_MBCS = 2, - /** @stable ICU 2.0 */ - UCNV_LATIN_1 = 3, - /** @stable ICU 2.0 */ - UCNV_UTF8 = 4, - /** @stable ICU 2.0 */ - UCNV_UTF16_BigEndian = 5, - /** @stable ICU 2.0 */ - UCNV_UTF16_LittleEndian = 6, - /** @stable ICU 2.0 */ - UCNV_UTF32_BigEndian = 7, - /** @stable ICU 2.0 */ - UCNV_UTF32_LittleEndian = 8, - /** @stable ICU 2.0 */ - UCNV_EBCDIC_STATEFUL = 9, - /** @stable ICU 2.0 */ - UCNV_ISO_2022 = 10, - - /** @stable ICU 2.0 */ - UCNV_LMBCS_1 = 11, - /** @stable ICU 2.0 */ - UCNV_LMBCS_2, - /** @stable ICU 2.0 */ - UCNV_LMBCS_3, - /** @stable ICU 2.0 */ - UCNV_LMBCS_4, - /** @stable ICU 2.0 */ - UCNV_LMBCS_5, - /** @stable ICU 2.0 */ - UCNV_LMBCS_6, - /** @stable ICU 2.0 */ - UCNV_LMBCS_8, - /** @stable ICU 2.0 */ - UCNV_LMBCS_11, - /** @stable ICU 2.0 */ - UCNV_LMBCS_16, - /** @stable ICU 2.0 */ - UCNV_LMBCS_17, - /** @stable ICU 2.0 */ - UCNV_LMBCS_18, - /** @stable ICU 2.0 */ - UCNV_LMBCS_19, - /** @stable ICU 2.0 */ - UCNV_LMBCS_LAST = UCNV_LMBCS_19, - /** @stable ICU 2.0 */ - UCNV_HZ, - /** @stable ICU 2.0 */ - UCNV_SCSU, - /** @stable ICU 2.0 */ - UCNV_ISCII, - /** @stable ICU 2.0 */ - UCNV_US_ASCII, - /** @stable ICU 2.0 */ - UCNV_UTF7, - /** @stable ICU 2.2 */ - UCNV_BOCU1, - /** @stable ICU 2.2 */ - UCNV_UTF16, - /** @stable ICU 2.2 */ - UCNV_UTF32, - /** @stable ICU 2.2 */ - UCNV_CESU8, - /** @stable ICU 2.4 */ - UCNV_IMAP_MAILBOX, - /** @stable ICU 4.8 */ - UCNV_COMPOUND_TEXT, - - /* Number of converter types for which we have conversion routines. */ - UCNV_NUMBER_OF_SUPPORTED_CONVERTER_TYPES -} UConverterType; - -/** - * Enum for specifying which platform a converter ID refers to. - * The use of platform/CCSID is not recommended. See ucnv_openCCSID(). - * - * @see ucnv_getPlatform - * @see ucnv_openCCSID - * @see ucnv_getCCSID - * @stable ICU 2.0 - */ -typedef enum { - UCNV_UNKNOWN = -1, - UCNV_IBM = 0 -} UConverterPlatform; - -/** - * Function pointer for error callback in the codepage to unicode direction. - * Called when an error has occurred in conversion to unicode, or on open/close of the callback (see reason). - * @param context Pointer to the callback's private data - * @param args Information about the conversion in progress - * @param codeUnits Points to 'length' bytes of the concerned codepage sequence - * @param length Size (in bytes) of the concerned codepage sequence - * @param reason Defines the reason the callback was invoked - * @param pErrorCode ICU error code in/out parameter. - * For converter callback functions, set to a conversion error - * before the call, and the callback may reset it to U_ZERO_ERROR. - * @see ucnv_setToUCallBack - * @see UConverterToUnicodeArgs - * @stable ICU 2.0 - */ -typedef void (U_EXPORT2 *UConverterToUCallback) ( - const void* context, - UConverterToUnicodeArgs *args, - const char *codeUnits, - int32_t length, - UConverterCallbackReason reason, - UErrorCode *pErrorCode); - -/** - * Function pointer for error callback in the unicode to codepage direction. - * Called when an error has occurred in conversion from unicode, or on open/close of the callback (see reason). - * @param context Pointer to the callback's private data - * @param args Information about the conversion in progress - * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence - * @param length Size (in bytes) of the concerned codepage sequence - * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint. - * @param reason Defines the reason the callback was invoked - * @param pErrorCode ICU error code in/out parameter. - * For converter callback functions, set to a conversion error - * before the call, and the callback may reset it to U_ZERO_ERROR. - * @see ucnv_setFromUCallBack - * @stable ICU 2.0 - */ -typedef void (U_EXPORT2 *UConverterFromUCallback) ( - const void* context, - UConverterFromUnicodeArgs *args, - const UChar* codeUnits, - int32_t length, - UChar32 codePoint, - UConverterCallbackReason reason, - UErrorCode *pErrorCode); - -U_CDECL_END - -/** - * Character that separates converter names from options and options from each other. - * @see ucnv_open - * @stable ICU 2.0 - */ -#define UCNV_OPTION_SEP_CHAR ',' - -/** - * String version of UCNV_OPTION_SEP_CHAR. - * @see ucnv_open - * @stable ICU 2.0 - */ -#define UCNV_OPTION_SEP_STRING "," - -/** - * Character that separates a converter option from its value. - * @see ucnv_open - * @stable ICU 2.0 - */ -#define UCNV_VALUE_SEP_CHAR '=' - -/** - * String version of UCNV_VALUE_SEP_CHAR. - * @see ucnv_open - * @stable ICU 2.0 - */ -#define UCNV_VALUE_SEP_STRING "=" - -/** - * Converter option for specifying a locale. - * For example, ucnv_open("SCSU,locale=ja", &errorCode); - * See convrtrs.txt. - * - * @see ucnv_open - * @stable ICU 2.0 - */ -#define UCNV_LOCALE_OPTION_STRING ",locale=" - -/** - * Converter option for specifying a version selector (0..9) for some converters. - * For example, - * \code - * ucnv_open("UTF-7,version=1", &errorCode); - * \endcode - * See convrtrs.txt. - * - * @see ucnv_open - * @stable ICU 2.4 - */ -#define UCNV_VERSION_OPTION_STRING ",version=" - -/** - * Converter option for EBCDIC SBCS or mixed-SBCS/DBCS (stateful) codepages. - * Swaps Unicode mappings for EBCDIC LF and NL codes, as used on - * S/390 (z/OS) Unix System Services (Open Edition). - * For example, ucnv_open("ibm-1047,swaplfnl", &errorCode); - * See convrtrs.txt. - * - * @see ucnv_open - * @stable ICU 2.4 - */ -#define UCNV_SWAP_LFNL_OPTION_STRING ",swaplfnl" - -/** - * Do a fuzzy compare of two converter/alias names. - * The comparison is case-insensitive, ignores leading zeroes if they are not - * followed by further digits, and ignores all but letters and digits. - * Thus the strings "UTF-8", "utf_8", "u*T@f08" and "Utf 8" are exactly equivalent. - * See section 1.4, Charset Alias Matching in Unicode Technical Standard #22 - * at http://www.unicode.org/reports/tr22/ - * - * @param name1 a converter name or alias, zero-terminated - * @param name2 a converter name or alias, zero-terminated - * @return 0 if the names match, or a negative value if the name1 - * lexically precedes name2, or a positive value if the name1 - * lexically follows name2. - * @stable ICU 2.0 - */ -U_STABLE int U_EXPORT2 -ucnv_compareNames(const char *name1, const char *name2); - - -/** - * Creates a UConverter object with the name of a coded character set specified as a C string. - * The actual name will be resolved with the alias file - * using a case-insensitive string comparison that ignores - * leading zeroes and all non-alphanumeric characters. - * E.g., the names "UTF8", "utf-8", "u*T@f08" and "Utf 8" are all equivalent. - * (See also ucnv_compareNames().) - * If NULL is passed for the converter name, it will create one with the - * getDefaultName return value. - * - *

A converter name for ICU 1.5 and above may contain options - * like a locale specification to control the specific behavior of - * the newly instantiated converter. - * The meaning of the options depends on the particular converter. - * If an option is not defined for or recognized by a given converter, then it is ignored.

- * - *

Options are appended to the converter name string, with a - * UCNV_OPTION_SEP_CHAR between the name and the first option and - * also between adjacent options.

- * - *

If the alias is ambiguous, then the preferred converter is used - * and the status is set to U_AMBIGUOUS_ALIAS_WARNING.

- * - *

The conversion behavior and names can vary between platforms. ICU may - * convert some characters differently from other platforms. Details on this topic - * are in the User's - * Guide. Aliases starting with a "cp" prefix have no specific meaning - * other than its an alias starting with the letters "cp". Please do not - * associate any meaning to these aliases.

- * - * \snippet samples/ucnv/convsamp.cpp ucnv_open - * - * @param converterName Name of the coded character set table. - * This may have options appended to the string. - * IANA alias character set names, IBM CCSIDs starting with "ibm-", - * Windows codepage numbers starting with "windows-" are frequently - * used for this parameter. See ucnv_getAvailableName and - * ucnv_getAlias for a complete list that is available. - * If this parameter is NULL, the default converter will be used. - * @param err outgoing error status U_MEMORY_ALLOCATION_ERROR, U_FILE_ACCESS_ERROR - * @return the created Unicode converter object, or NULL if an error occurred - * @see ucnv_openU - * @see ucnv_openCCSID - * @see ucnv_getAvailableName - * @see ucnv_getAlias - * @see ucnv_getDefaultName - * @see ucnv_close - * @see ucnv_compareNames - * @stable ICU 2.0 - */ -U_STABLE UConverter* U_EXPORT2 -ucnv_open(const char *converterName, UErrorCode *err); - - -/** - * Creates a Unicode converter with the names specified as unicode string. - * The name should be limited to the ASCII-7 alphanumerics range. - * The actual name will be resolved with the alias file - * using a case-insensitive string comparison that ignores - * leading zeroes and all non-alphanumeric characters. - * E.g., the names "UTF8", "utf-8", "u*T@f08" and "Utf 8" are all equivalent. - * (See also ucnv_compareNames().) - * If NULL is passed for the converter name, it will create - * one with the ucnv_getDefaultName() return value. - * If the alias is ambiguous, then the preferred converter is used - * and the status is set to U_AMBIGUOUS_ALIAS_WARNING. - * - *

See ucnv_open for the complete details

- * @param name Name of the UConverter table in a zero terminated - * Unicode string - * @param err outgoing error status U_MEMORY_ALLOCATION_ERROR, - * U_FILE_ACCESS_ERROR - * @return the created Unicode converter object, or NULL if an - * error occurred - * @see ucnv_open - * @see ucnv_openCCSID - * @see ucnv_close - * @see ucnv_compareNames - * @stable ICU 2.0 - */ -U_STABLE UConverter* U_EXPORT2 -ucnv_openU(const UChar *name, - UErrorCode *err); - -/** - * Creates a UConverter object from a CCSID number and platform pair. - * Note that the usefulness of this function is limited to platforms with numeric - * encoding IDs. Only IBM and Microsoft platforms use numeric (16-bit) identifiers for - * encodings. - * - * In addition, IBM CCSIDs and Unicode conversion tables are not 1:1 related. - * For many IBM CCSIDs there are multiple (up to six) Unicode conversion tables, and - * for some Unicode conversion tables there are multiple CCSIDs. - * Some "alternate" Unicode conversion tables are provided by the - * IBM CDRA conversion table registry. - * The most prominent example of a systematic modification of conversion tables that is - * not provided in the form of conversion table files in the repository is - * that S/390 Unix System Services swaps the codes for Line Feed and New Line in all - * EBCDIC codepages, which requires such a swap in the Unicode conversion tables as well. - * - * Only IBM default conversion tables are accessible with ucnv_openCCSID(). - * ucnv_getCCSID() will return the same CCSID for all conversion tables that are associated - * with that CCSID. - * - * Currently, the only "platform" supported in the ICU converter API is UCNV_IBM. - * - * In summary, the use of CCSIDs and the associated API functions is not recommended. - * - * In order to open a converter with the default IBM CDRA Unicode conversion table, - * you can use this function or use the prefix "ibm-": - * \code - * char name[20]; - * sprintf(name, "ibm-%hu", ccsid); - * cnv=ucnv_open(name, &errorCode); - * \endcode - * - * In order to open a converter with the IBM S/390 Unix System Services variant - * of a Unicode/EBCDIC conversion table, - * you can use the prefix "ibm-" together with the option string UCNV_SWAP_LFNL_OPTION_STRING: - * \code - * char name[20]; - * sprintf(name, "ibm-%hu" UCNV_SWAP_LFNL_OPTION_STRING, ccsid); - * cnv=ucnv_open(name, &errorCode); - * \endcode - * - * In order to open a converter from a Microsoft codepage number, use the prefix "cp": - * \code - * char name[20]; - * sprintf(name, "cp%hu", codepageID); - * cnv=ucnv_open(name, &errorCode); - * \endcode - * - * If the alias is ambiguous, then the preferred converter is used - * and the status is set to U_AMBIGUOUS_ALIAS_WARNING. - * - * @param codepage codepage number to create - * @param platform the platform in which the codepage number exists - * @param err error status U_MEMORY_ALLOCATION_ERROR, U_FILE_ACCESS_ERROR - * @return the created Unicode converter object, or NULL if an error - * occurred. - * @see ucnv_open - * @see ucnv_openU - * @see ucnv_close - * @see ucnv_getCCSID - * @see ucnv_getPlatform - * @see UConverterPlatform - * @stable ICU 2.0 - */ -U_STABLE UConverter* U_EXPORT2 -ucnv_openCCSID(int32_t codepage, - UConverterPlatform platform, - UErrorCode * err); - -/** - *

Creates a UConverter object specified from a packageName and a converterName.

- * - *

The packageName and converterName must point to an ICU udata object, as defined by - * udata_open( packageName, "cnv", converterName, err) or equivalent. - * Typically, packageName will refer to a (.dat) file, or to a package registered with - * udata_setAppData(). Using a full file or directory pathname for packageName is deprecated.

- * - *

The name will NOT be looked up in the alias mechanism, nor will the converter be - * stored in the converter cache or the alias table. The only way to open further converters - * is call this function multiple times, or use the ucnv_safeClone() function to clone a - * 'master' converter.

- * - *

A future version of ICU may add alias table lookups and/or caching - * to this function.

- * - *

Example Use: - * cnv = ucnv_openPackage("myapp", "myconverter", &err); - *

- * - * @param packageName name of the package (equivalent to 'path' in udata_open() call) - * @param converterName name of the data item to be used, without suffix. - * @param err outgoing error status U_MEMORY_ALLOCATION_ERROR, U_FILE_ACCESS_ERROR - * @return the created Unicode converter object, or NULL if an error occurred - * @see udata_open - * @see ucnv_open - * @see ucnv_safeClone - * @see ucnv_close - * @stable ICU 2.2 - */ -U_STABLE UConverter* U_EXPORT2 -ucnv_openPackage(const char *packageName, const char *converterName, UErrorCode *err); - -/** - * Thread safe converter cloning operation. - * For most efficient operation, pass in a stackBuffer (and a *pBufferSize) - * with at least U_CNV_SAFECLONE_BUFFERSIZE bytes of space. - * If the buffer size is sufficient, then the clone will use the stack buffer; - * otherwise, it will be allocated, and *pBufferSize will indicate - * the actual size. (This should not occur with U_CNV_SAFECLONE_BUFFERSIZE.) - * - * You must ucnv_close() the clone in any case. - * - * If *pBufferSize==0, (regardless of whether stackBuffer==NULL or not) - * then *pBufferSize will be changed to a sufficient size - * for cloning this converter, - * without actually cloning the converter ("pure pre-flighting"). - * - * If *pBufferSize is greater than zero but not large enough for a stack-based - * clone, then the converter is cloned using newly allocated memory - * and *pBufferSize is changed to the necessary size. - * - * If the converter clone fits into the stack buffer but the stack buffer is not - * sufficiently aligned for the clone, then the clone will use an - * adjusted pointer and use an accordingly smaller buffer size. - * - * @param cnv converter to be cloned - * @param stackBuffer Deprecated functionality as of ICU 52, use NULL.
- * user allocated space for the new clone. If NULL new memory will be allocated. - * If buffer is not large enough, new memory will be allocated. - * Clients can use the U_CNV_SAFECLONE_BUFFERSIZE. This will probably be enough to avoid memory allocations. - * @param pBufferSize Deprecated functionality as of ICU 52, use NULL or 1.
- * pointer to size of allocated space. - * @param status to indicate whether the operation went on smoothly or there were errors - * An informational status value, U_SAFECLONE_ALLOCATED_WARNING, - * is used if any allocations were necessary. - * However, it is better to check if *pBufferSize grew for checking for - * allocations because warning codes can be overridden by subsequent - * function calls. - * @return pointer to the new clone - * @stable ICU 2.0 - */ -U_STABLE UConverter * U_EXPORT2 -ucnv_safeClone(const UConverter *cnv, - void *stackBuffer, - int32_t *pBufferSize, - UErrorCode *status); - -#ifndef U_HIDE_DEPRECATED_API - -/** - * \def U_CNV_SAFECLONE_BUFFERSIZE - * Definition of a buffer size that is designed to be large enough for - * converters to be cloned with ucnv_safeClone(). - * @deprecated ICU 52. Do not rely on ucnv_safeClone() cloning into any provided buffer. - */ -#define U_CNV_SAFECLONE_BUFFERSIZE 1024 - -#endif /* U_HIDE_DEPRECATED_API */ - -/** - * Deletes the unicode converter and releases resources associated - * with just this instance. - * Does not free up shared converter tables. - * - * @param converter the converter object to be deleted - * @see ucnv_open - * @see ucnv_openU - * @see ucnv_openCCSID - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_close(UConverter * converter); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUConverterPointer - * "Smart pointer" class, closes a UConverter via ucnv_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUConverterPointer, UConverter, ucnv_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Fills in the output parameter, subChars, with the substitution characters - * as multiple bytes. - * If ucnv_setSubstString() set a Unicode string because the converter is - * stateful, then subChars will be an empty string. - * - * @param converter the Unicode converter - * @param subChars the substitution characters - * @param len on input the capacity of subChars, on output the number - * of bytes copied to it - * @param err the outgoing error status code. - * If the substitution character array is too small, an - * U_INDEX_OUTOFBOUNDS_ERROR will be returned. - * @see ucnv_setSubstString - * @see ucnv_setSubstChars - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_getSubstChars(const UConverter *converter, - char *subChars, - int8_t *len, - UErrorCode *err); - -/** - * Sets the substitution chars when converting from unicode to a codepage. The - * substitution is specified as a string of 1-4 bytes, and may contain - * NULL bytes. - * The subChars must represent a single character. The caller needs to know the - * byte sequence of a valid character in the converter's charset. - * For some converters, for example some ISO 2022 variants, only single-byte - * substitution characters may be supported. - * The newer ucnv_setSubstString() function relaxes these limitations. - * - * @param converter the Unicode converter - * @param subChars the substitution character byte sequence we want set - * @param len the number of bytes in subChars - * @param err the error status code. U_INDEX_OUTOFBOUNDS_ERROR if - * len is bigger than the maximum number of bytes allowed in subchars - * @see ucnv_setSubstString - * @see ucnv_getSubstChars - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_setSubstChars(UConverter *converter, - const char *subChars, - int8_t len, - UErrorCode *err); - -/** - * Set a substitution string for converting from Unicode to a charset. - * The caller need not know the charset byte sequence for each charset. - * - * Unlike ucnv_setSubstChars() which is designed to set a charset byte sequence - * for a single character, this function takes a Unicode string with - * zero, one or more characters, and immediately verifies that the string can be - * converted to the charset. - * If not, or if the result is too long (more than 32 bytes as of ICU 3.6), - * then the function returns with an error accordingly. - * - * Also unlike ucnv_setSubstChars(), this function works for stateful charsets - * by converting on the fly at the point of substitution rather than setting - * a fixed byte sequence. - * - * @param cnv The UConverter object. - * @param s The Unicode string. - * @param length The number of UChars in s, or -1 for a NUL-terminated string. - * @param err Pointer to a standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * - * @see ucnv_setSubstChars - * @see ucnv_getSubstChars - * @stable ICU 3.6 - */ -U_STABLE void U_EXPORT2 -ucnv_setSubstString(UConverter *cnv, - const UChar *s, - int32_t length, - UErrorCode *err); - -/** - * Fills in the output parameter, errBytes, with the error characters from the - * last failing conversion. - * - * @param converter the Unicode converter - * @param errBytes the codepage bytes which were in error - * @param len on input the capacity of errBytes, on output the number of - * bytes which were copied to it - * @param err the error status code. - * If the substitution character array is too small, an - * U_INDEX_OUTOFBOUNDS_ERROR will be returned. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_getInvalidChars(const UConverter *converter, - char *errBytes, - int8_t *len, - UErrorCode *err); - -/** - * Fills in the output parameter, errChars, with the error characters from the - * last failing conversion. - * - * @param converter the Unicode converter - * @param errUChars the UChars which were in error - * @param len on input the capacity of errUChars, on output the number of - * UChars which were copied to it - * @param err the error status code. - * If the substitution character array is too small, an - * U_INDEX_OUTOFBOUNDS_ERROR will be returned. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_getInvalidUChars(const UConverter *converter, - UChar *errUChars, - int8_t *len, - UErrorCode *err); - -/** - * Resets the state of a converter to the default state. This is used - * in the case of an error, to restart a conversion from a known default state. - * It will also empty the internal output buffers. - * @param converter the Unicode converter - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_reset(UConverter *converter); - -/** - * Resets the to-Unicode part of a converter state to the default state. - * This is used in the case of an error to restart a conversion to - * Unicode to a known default state. It will also empty the internal - * output buffers used for the conversion to Unicode codepoints. - * @param converter the Unicode converter - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_resetToUnicode(UConverter *converter); - -/** - * Resets the from-Unicode part of a converter state to the default state. - * This is used in the case of an error to restart a conversion from - * Unicode to a known default state. It will also empty the internal output - * buffers used for the conversion from Unicode codepoints. - * @param converter the Unicode converter - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_resetFromUnicode(UConverter *converter); - -/** - * Returns the maximum number of bytes that are output per UChar in conversion - * from Unicode using this converter. - * The returned number can be used with UCNV_GET_MAX_BYTES_FOR_STRING - * to calculate the size of a target buffer for conversion from Unicode. - * - * Note: Before ICU 2.8, this function did not return reliable numbers for - * some stateful converters (EBCDIC_STATEFUL, ISO-2022) and LMBCS. - * - * This number may not be the same as the maximum number of bytes per - * "conversion unit". In other words, it may not be the intuitively expected - * number of bytes per character that would be published for a charset, - * and may not fulfill any other purpose than the allocation of an output - * buffer of guaranteed sufficient size for a given input length and converter. - * - * Examples for special cases that are taken into account: - * - Supplementary code points may convert to more bytes than BMP code points. - * This function returns bytes per UChar (UTF-16 code unit), not per - * Unicode code point, for efficient buffer allocation. - * - State-shifting output (SI/SO, escapes, etc.) from stateful converters. - * - When m input UChars are converted to n output bytes, then the maximum m/n - * is taken into account. - * - * The number returned here does not take into account - * (see UCNV_GET_MAX_BYTES_FOR_STRING): - * - callbacks which output more than one charset character sequence per call, - * like escape callbacks - * - initial and final non-character bytes that are output by some converters - * (automatic BOMs, initial escape sequence, final SI, etc.) - * - * Examples for returned values: - * - SBCS charsets: 1 - * - Shift-JIS: 2 - * - UTF-16: 2 (2 per BMP, 4 per surrogate _pair_, BOM not counted) - * - UTF-8: 3 (3 per BMP, 4 per surrogate _pair_) - * - EBCDIC_STATEFUL (EBCDIC mixed SBCS/DBCS): 3 (SO + DBCS) - * - ISO-2022: 3 (always outputs UTF-8) - * - ISO-2022-JP: 6 (4-byte escape sequences + DBCS) - * - ISO-2022-CN: 8 (4-byte designator sequences + 2-byte SS2/SS3 + DBCS) - * - * @param converter The Unicode converter. - * @return The maximum number of bytes per UChar (16 bit code unit) - * that are output by ucnv_fromUnicode(), - * to be used together with UCNV_GET_MAX_BYTES_FOR_STRING - * for buffer allocation. - * - * @see UCNV_GET_MAX_BYTES_FOR_STRING - * @see ucnv_getMinCharSize - * @stable ICU 2.0 - */ -U_STABLE int8_t U_EXPORT2 -ucnv_getMaxCharSize(const UConverter *converter); - -/** - * Calculates the size of a buffer for conversion from Unicode to a charset. - * The calculated size is guaranteed to be sufficient for this conversion. - * - * It takes into account initial and final non-character bytes that are output - * by some converters. - * It does not take into account callbacks which output more than one charset - * character sequence per call, like escape callbacks. - * The default (substitution) callback only outputs one charset character sequence. - * - * @param length Number of UChars to be converted. - * @param maxCharSize Return value from ucnv_getMaxCharSize() for the converter - * that will be used. - * @return Size of a buffer that will be large enough to hold the output bytes of - * converting length UChars with the converter that returned the maxCharSize. - * - * @see ucnv_getMaxCharSize - * @stable ICU 2.8 - */ -#define UCNV_GET_MAX_BYTES_FOR_STRING(length, maxCharSize) \ - (((int32_t)(length)+10)*(int32_t)(maxCharSize)) - -/** - * Returns the minimum byte length (per codepoint) for characters in this codepage. - * This is usually either 1 or 2. - * @param converter the Unicode converter - * @return the minimum number of bytes per codepoint allowed by this particular converter - * @see ucnv_getMaxCharSize - * @stable ICU 2.0 - */ -U_STABLE int8_t U_EXPORT2 -ucnv_getMinCharSize(const UConverter *converter); - -/** - * Returns the display name of the converter passed in based on the Locale - * passed in. If the locale contains no display name, the internal ASCII - * name will be filled in. - * - * @param converter the Unicode converter. - * @param displayLocale is the specific Locale we want to localized for - * @param displayName user provided buffer to be filled in - * @param displayNameCapacity size of displayName Buffer - * @param err error status code - * @return displayNameLength number of UChar needed in displayName - * @see ucnv_getName - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucnv_getDisplayName(const UConverter *converter, - const char *displayLocale, - UChar *displayName, - int32_t displayNameCapacity, - UErrorCode *err); - -/** - * Gets the internal, canonical name of the converter (zero-terminated). - * The lifetime of the returned string will be that of the converter - * passed to this function. - * @param converter the Unicode converter - * @param err UErrorCode status - * @return the internal name of the converter - * @see ucnv_getDisplayName - * @stable ICU 2.0 - */ -U_STABLE const char * U_EXPORT2 -ucnv_getName(const UConverter *converter, UErrorCode *err); - -/** - * Gets a codepage number associated with the converter. This is not guaranteed - * to be the one used to create the converter. Some converters do not represent - * platform registered codepages and return zero for the codepage number. - * The error code fill-in parameter indicates if the codepage number - * is available. - * Does not check if the converter is NULL or if converter's data - * table is NULL. - * - * Important: The use of CCSIDs is not recommended because it is limited - * to only two platforms in principle and only one (UCNV_IBM) in the current - * ICU converter API. - * Also, CCSIDs are insufficient to identify IBM Unicode conversion tables precisely. - * For more details see ucnv_openCCSID(). - * - * @param converter the Unicode converter - * @param err the error status code. - * @return If any error occurs, -1 will be returned otherwise, the codepage number - * will be returned - * @see ucnv_openCCSID - * @see ucnv_getPlatform - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucnv_getCCSID(const UConverter *converter, - UErrorCode *err); - -/** - * Gets a codepage platform associated with the converter. Currently, - * only UCNV_IBM will be returned. - * Does not test if the converter is NULL or if converter's data - * table is NULL. - * @param converter the Unicode converter - * @param err the error status code. - * @return The codepage platform - * @stable ICU 2.0 - */ -U_STABLE UConverterPlatform U_EXPORT2 -ucnv_getPlatform(const UConverter *converter, - UErrorCode *err); - -/** - * Gets the type of the converter - * e.g. SBCS, MBCS, DBCS, UTF8, UTF16_BE, UTF16_LE, ISO_2022, - * EBCDIC_STATEFUL, LATIN_1 - * @param converter a valid, opened converter - * @return the type of the converter - * @stable ICU 2.0 - */ -U_STABLE UConverterType U_EXPORT2 -ucnv_getType(const UConverter * converter); - -/** - * Gets the "starter" (lead) bytes for converters of type MBCS. - * Will fill in an U_ILLEGAL_ARGUMENT_ERROR if converter passed in - * is not MBCS. Fills in an array of type UBool, with the value of the byte - * as offset to the array. For example, if (starters[0x20] == TRUE) at return, - * it means that the byte 0x20 is a starter byte in this converter. - * Context pointers are always owned by the caller. - * - * @param converter a valid, opened converter of type MBCS - * @param starters an array of size 256 to be filled in - * @param err error status, U_ILLEGAL_ARGUMENT_ERROR if the - * converter is not a type which can return starters. - * @see ucnv_getType - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_getStarters(const UConverter* converter, - UBool starters[256], - UErrorCode* err); - - -/** - * Selectors for Unicode sets that can be returned by ucnv_getUnicodeSet(). - * @see ucnv_getUnicodeSet - * @stable ICU 2.6 - */ -typedef enum UConverterUnicodeSet { - /** Select the set of roundtrippable Unicode code points. @stable ICU 2.6 */ - UCNV_ROUNDTRIP_SET, - /** Select the set of Unicode code points with roundtrip or fallback mappings. @stable ICU 4.0 */ - UCNV_ROUNDTRIP_AND_FALLBACK_SET, -#ifndef U_HIDE_DEPRECATED_API - /** - * Number of UConverterUnicodeSet selectors. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UCNV_SET_COUNT -#endif // U_HIDE_DEPRECATED_API -} UConverterUnicodeSet; - - -/** - * Returns the set of Unicode code points that can be converted by an ICU converter. - * - * Returns one of several kinds of set: - * - * 1. UCNV_ROUNDTRIP_SET - * - * The set of all Unicode code points that can be roundtrip-converted - * (converted without any data loss) with the converter (ucnv_fromUnicode()). - * This set will not include code points that have fallback mappings - * or are only the result of reverse fallback mappings. - * This set will also not include PUA code points with fallbacks, although - * ucnv_fromUnicode() will always uses those mappings despite ucnv_setFallback(). - * See UTR #22 "Character Mapping Markup Language" - * at http://www.unicode.org/reports/tr22/ - * - * This is useful for example for - * - checking that a string or document can be roundtrip-converted with a converter, - * without/before actually performing the conversion - * - testing if a converter can be used for text for typical text for a certain locale, - * by comparing its roundtrip set with the set of ExemplarCharacters from - * ICU's locale data or other sources - * - * 2. UCNV_ROUNDTRIP_AND_FALLBACK_SET - * - * The set of all Unicode code points that can be converted with the converter (ucnv_fromUnicode()) - * when fallbacks are turned on (see ucnv_setFallback()). - * This set includes all code points with roundtrips and fallbacks (but not reverse fallbacks). - * - * In the future, there may be more UConverterUnicodeSet choices to select - * sets with different properties. - * - * @param cnv The converter for which a set is requested. - * @param setFillIn A valid USet *. It will be cleared by this function before - * the converter's specific set is filled into the USet. - * @param whichSet A UConverterUnicodeSet selector; - * currently UCNV_ROUNDTRIP_SET is the only supported value. - * @param pErrorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * - * @see UConverterUnicodeSet - * @see uset_open - * @see uset_close - * @stable ICU 2.6 - */ -U_STABLE void U_EXPORT2 -ucnv_getUnicodeSet(const UConverter *cnv, - USet *setFillIn, - UConverterUnicodeSet whichSet, - UErrorCode *pErrorCode); - -/** - * Gets the current calback function used by the converter when an illegal - * or invalid codepage sequence is found. - * Context pointers are always owned by the caller. - * - * @param converter the unicode converter - * @param action fillin: returns the callback function pointer - * @param context fillin: returns the callback's private void* context - * @see ucnv_setToUCallBack - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_getToUCallBack (const UConverter * converter, - UConverterToUCallback *action, - const void **context); - -/** - * Gets the current callback function used by the converter when illegal - * or invalid Unicode sequence is found. - * Context pointers are always owned by the caller. - * - * @param converter the unicode converter - * @param action fillin: returns the callback function pointer - * @param context fillin: returns the callback's private void* context - * @see ucnv_setFromUCallBack - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_getFromUCallBack (const UConverter * converter, - UConverterFromUCallback *action, - const void **context); - -/** - * Changes the callback function used by the converter when - * an illegal or invalid sequence is found. - * Context pointers are always owned by the caller. - * Predefined actions and contexts can be found in the ucnv_err.h header. - * - * @param converter the unicode converter - * @param newAction the new callback function - * @param newContext the new toUnicode callback context pointer. This can be NULL. - * @param oldAction fillin: returns the old callback function pointer. This can be NULL. - * @param oldContext fillin: returns the old callback's private void* context. This can be NULL. - * @param err The error code status - * @see ucnv_getToUCallBack - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_setToUCallBack (UConverter * converter, - UConverterToUCallback newAction, - const void* newContext, - UConverterToUCallback *oldAction, - const void** oldContext, - UErrorCode * err); - -/** - * Changes the current callback function used by the converter when - * an illegal or invalid sequence is found. - * Context pointers are always owned by the caller. - * Predefined actions and contexts can be found in the ucnv_err.h header. - * - * @param converter the unicode converter - * @param newAction the new callback function - * @param newContext the new fromUnicode callback context pointer. This can be NULL. - * @param oldAction fillin: returns the old callback function pointer. This can be NULL. - * @param oldContext fillin: returns the old callback's private void* context. This can be NULL. - * @param err The error code status - * @see ucnv_getFromUCallBack - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_setFromUCallBack (UConverter * converter, - UConverterFromUCallback newAction, - const void *newContext, - UConverterFromUCallback *oldAction, - const void **oldContext, - UErrorCode * err); - -/** - * Converts an array of unicode characters to an array of codepage - * characters. This function is optimized for converting a continuous - * stream of data in buffer-sized chunks, where the entire source and - * target does not fit in available buffers. - * - * The source pointer is an in/out parameter. It starts out pointing where the - * conversion is to begin, and ends up pointing after the last UChar consumed. - * - * Target similarly starts out pointer at the first available byte in the output - * buffer, and ends up pointing after the last byte written to the output. - * - * The converter always attempts to consume the entire source buffer, unless - * (1.) the target buffer is full, or (2.) a failing error is returned from the - * current callback function. When a successful error status has been - * returned, it means that all of the source buffer has been - * consumed. At that point, the caller should reset the source and - * sourceLimit pointers to point to the next chunk. - * - * At the end of the stream (flush==TRUE), the input is completely consumed - * when *source==sourceLimit and no error code is set. - * The converter object is then automatically reset by this function. - * (This means that a converter need not be reset explicitly between data - * streams if it finishes the previous stream without errors.) - * - * This is a stateful conversion. Additionally, even when all source data has - * been consumed, some data may be in the converters' internal state. - * Call this function repeatedly, updating the target pointers with - * the next empty chunk of target in case of a - * U_BUFFER_OVERFLOW_ERROR, and updating the source pointers - * with the next chunk of source when a successful error status is - * returned, until there are no more chunks of source data. - * @param converter the Unicode converter - * @param target I/O parameter. Input : Points to the beginning of the buffer to copy - * codepage characters to. Output : points to after the last codepage character copied - * to target. - * @param targetLimit the pointer just after last of the target buffer - * @param source I/O parameter, pointer to pointer to the source Unicode character buffer. - * @param sourceLimit the pointer just after the last of the source buffer - * @param offsets if NULL is passed, nothing will happen to it, otherwise it needs to have the same number - * of allocated cells as target. Will fill in offsets from target to source pointer - * e.g: offsets[3] is equal to 6, it means that the target[3] was a result of transcoding source[6] - * For output data carried across calls, and other data without a specific source character - * (such as from escape sequences or callbacks) -1 will be placed for offsets. - * @param flush set to TRUE if the current source buffer is the last available - * chunk of the source, FALSE otherwise. Note that if a failing status is returned, - * this function may have to be called multiple times with flush set to TRUE until - * the source buffer is consumed. - * @param err the error status. U_ILLEGAL_ARGUMENT_ERROR will be set if the - * converter is NULL. - * U_BUFFER_OVERFLOW_ERROR will be set if the target is full and there is - * still data to be written to the target. - * @see ucnv_fromUChars - * @see ucnv_convert - * @see ucnv_getMinCharSize - * @see ucnv_setToUCallBack - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_fromUnicode (UConverter * converter, - char **target, - const char *targetLimit, - const UChar ** source, - const UChar * sourceLimit, - int32_t* offsets, - UBool flush, - UErrorCode * err); - -/** - * Converts a buffer of codepage bytes into an array of unicode UChars - * characters. This function is optimized for converting a continuous - * stream of data in buffer-sized chunks, where the entire source and - * target does not fit in available buffers. - * - * The source pointer is an in/out parameter. It starts out pointing where the - * conversion is to begin, and ends up pointing after the last byte of source consumed. - * - * Target similarly starts out pointer at the first available UChar in the output - * buffer, and ends up pointing after the last UChar written to the output. - * It does NOT necessarily keep UChar sequences together. - * - * The converter always attempts to consume the entire source buffer, unless - * (1.) the target buffer is full, or (2.) a failing error is returned from the - * current callback function. When a successful error status has been - * returned, it means that all of the source buffer has been - * consumed. At that point, the caller should reset the source and - * sourceLimit pointers to point to the next chunk. - * - * At the end of the stream (flush==TRUE), the input is completely consumed - * when *source==sourceLimit and no error code is set - * The converter object is then automatically reset by this function. - * (This means that a converter need not be reset explicitly between data - * streams if it finishes the previous stream without errors.) - * - * This is a stateful conversion. Additionally, even when all source data has - * been consumed, some data may be in the converters' internal state. - * Call this function repeatedly, updating the target pointers with - * the next empty chunk of target in case of a - * U_BUFFER_OVERFLOW_ERROR, and updating the source pointers - * with the next chunk of source when a successful error status is - * returned, until there are no more chunks of source data. - * @param converter the Unicode converter - * @param target I/O parameter. Input : Points to the beginning of the buffer to copy - * UChars into. Output : points to after the last UChar copied. - * @param targetLimit the pointer just after the end of the target buffer - * @param source I/O parameter, pointer to pointer to the source codepage buffer. - * @param sourceLimit the pointer to the byte after the end of the source buffer - * @param offsets if NULL is passed, nothing will happen to it, otherwise it needs to have the same number - * of allocated cells as target. Will fill in offsets from target to source pointer - * e.g: offsets[3] is equal to 6, it means that the target[3] was a result of transcoding source[6] - * For output data carried across calls, and other data without a specific source character - * (such as from escape sequences or callbacks) -1 will be placed for offsets. - * @param flush set to TRUE if the current source buffer is the last available - * chunk of the source, FALSE otherwise. Note that if a failing status is returned, - * this function may have to be called multiple times with flush set to TRUE until - * the source buffer is consumed. - * @param err the error status. U_ILLEGAL_ARGUMENT_ERROR will be set if the - * converter is NULL. - * U_BUFFER_OVERFLOW_ERROR will be set if the target is full and there is - * still data to be written to the target. - * @see ucnv_fromUChars - * @see ucnv_convert - * @see ucnv_getMinCharSize - * @see ucnv_setFromUCallBack - * @see ucnv_getNextUChar - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_toUnicode(UConverter *converter, - UChar **target, - const UChar *targetLimit, - const char **source, - const char *sourceLimit, - int32_t *offsets, - UBool flush, - UErrorCode *err); - -/** - * Convert the Unicode string into a codepage string using an existing UConverter. - * The output string is NUL-terminated if possible. - * - * This function is a more convenient but less powerful version of ucnv_fromUnicode(). - * It is only useful for whole strings, not for streaming conversion. - * - * The maximum output buffer capacity required (barring output from callbacks) will be - * UCNV_GET_MAX_BYTES_FOR_STRING(srcLength, ucnv_getMaxCharSize(cnv)). - * - * @param cnv the converter object to be used (ucnv_resetFromUnicode() will be called) - * @param src the input Unicode string - * @param srcLength the input string length, or -1 if NUL-terminated - * @param dest destination string buffer, can be NULL if destCapacity==0 - * @param destCapacity the number of chars available at dest - * @param pErrorCode normal ICU error code; - * common error codes that may be set by this function include - * U_BUFFER_OVERFLOW_ERROR, U_STRING_NOT_TERMINATED_WARNING, - * U_ILLEGAL_ARGUMENT_ERROR, and conversion errors - * @return the length of the output string, not counting the terminating NUL; - * if the length is greater than destCapacity, then the string will not fit - * and a buffer of the indicated length would need to be passed in - * @see ucnv_fromUnicode - * @see ucnv_convert - * @see UCNV_GET_MAX_BYTES_FOR_STRING - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucnv_fromUChars(UConverter *cnv, - char *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - UErrorCode *pErrorCode); - -/** - * Convert the codepage string into a Unicode string using an existing UConverter. - * The output string is NUL-terminated if possible. - * - * This function is a more convenient but less powerful version of ucnv_toUnicode(). - * It is only useful for whole strings, not for streaming conversion. - * - * The maximum output buffer capacity required (barring output from callbacks) will be - * 2*srcLength (each char may be converted into a surrogate pair). - * - * @param cnv the converter object to be used (ucnv_resetToUnicode() will be called) - * @param src the input codepage string - * @param srcLength the input string length, or -1 if NUL-terminated - * @param dest destination string buffer, can be NULL if destCapacity==0 - * @param destCapacity the number of UChars available at dest - * @param pErrorCode normal ICU error code; - * common error codes that may be set by this function include - * U_BUFFER_OVERFLOW_ERROR, U_STRING_NOT_TERMINATED_WARNING, - * U_ILLEGAL_ARGUMENT_ERROR, and conversion errors - * @return the length of the output string, not counting the terminating NUL; - * if the length is greater than destCapacity, then the string will not fit - * and a buffer of the indicated length would need to be passed in - * @see ucnv_toUnicode - * @see ucnv_convert - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucnv_toUChars(UConverter *cnv, - UChar *dest, int32_t destCapacity, - const char *src, int32_t srcLength, - UErrorCode *pErrorCode); - -/** - * Convert a codepage buffer into Unicode one character at a time. - * The input is completely consumed when the U_INDEX_OUTOFBOUNDS_ERROR is set. - * - * Advantage compared to ucnv_toUnicode() or ucnv_toUChars(): - * - Faster for small amounts of data, for most converters, e.g., - * US-ASCII, ISO-8859-1, UTF-8/16/32, and most "normal" charsets. - * (For complex converters, e.g., SCSU, UTF-7 and ISO 2022 variants, - * it uses ucnv_toUnicode() internally.) - * - Convenient. - * - * Limitations compared to ucnv_toUnicode(): - * - Always assumes flush=TRUE. - * This makes ucnv_getNextUChar() unsuitable for "streaming" conversion, - * that is, for where the input is supplied in multiple buffers, - * because ucnv_getNextUChar() will assume the end of the input at the end - * of the first buffer. - * - Does not provide offset output. - * - * It is possible to "mix" ucnv_getNextUChar() and ucnv_toUnicode() because - * ucnv_getNextUChar() uses the current state of the converter - * (unlike ucnv_toUChars() which always resets first). - * However, if ucnv_getNextUChar() is called after ucnv_toUnicode() - * stopped in the middle of a character sequence (with flush=FALSE), - * then ucnv_getNextUChar() will always use the slower ucnv_toUnicode() - * internally until the next character boundary. - * (This is new in ICU 2.6. In earlier releases, ucnv_getNextUChar() had to - * start at a character boundary.) - * - * Instead of using ucnv_getNextUChar(), it is recommended - * to convert using ucnv_toUnicode() or ucnv_toUChars() - * and then iterate over the text using U16_NEXT() or a UCharIterator (uiter.h) - * or a C++ CharacterIterator or similar. - * This allows streaming conversion and offset output, for example. - * - *

Handling of surrogate pairs and supplementary-plane code points:
- * There are two different kinds of codepages that provide mappings for surrogate characters: - *

    - *
  • Codepages like UTF-8, UTF-32, and GB 18030 provide direct representations for Unicode - * code points U+10000-U+10ffff as well as for single surrogates U+d800-U+dfff. - * Each valid sequence will result in exactly one returned code point. - * If a sequence results in a single surrogate, then that will be returned - * by itself, even if a neighboring sequence encodes the matching surrogate.
  • - *
  • Codepages like SCSU and LMBCS (and UTF-16) provide direct representations only for BMP code points - * including surrogates. Code points in supplementary planes are represented with - * two sequences, each encoding a surrogate. - * For these codepages, matching pairs of surrogates will be combined into single - * code points for returning from this function. - * (Note that SCSU is actually a mix of these codepage types.)
  • - *

- * - * @param converter an open UConverter - * @param source the address of a pointer to the codepage buffer, will be - * updated to point after the bytes consumed in the conversion call. - * @param sourceLimit points to the end of the input buffer - * @param err fills in error status (see ucnv_toUnicode) - * U_INDEX_OUTOFBOUNDS_ERROR will be set if the input - * is empty or does not convert to any output (e.g.: pure state-change - * codes SI/SO, escape sequences for ISO 2022, - * or if the callback did not output anything, ...). - * This function will not set a U_BUFFER_OVERFLOW_ERROR because - * the "buffer" is the return code. However, there might be subsequent output - * stored in the converter object - * that will be returned in following calls to this function. - * @return a UChar32 resulting from the partial conversion of source - * @see ucnv_toUnicode - * @see ucnv_toUChars - * @see ucnv_convert - * @stable ICU 2.0 - */ -U_STABLE UChar32 U_EXPORT2 -ucnv_getNextUChar(UConverter * converter, - const char **source, - const char * sourceLimit, - UErrorCode * err); - -/** - * Convert from one external charset to another using two existing UConverters. - * Internally, two conversions - ucnv_toUnicode() and ucnv_fromUnicode() - - * are used, "pivoting" through 16-bit Unicode. - * - * Important: For streaming conversion (multiple function calls for successive - * parts of a text stream), the caller must provide a pivot buffer explicitly, - * and must preserve the pivot buffer and associated pointers from one - * call to another. (The buffer may be moved if its contents and the relative - * pointer positions are preserved.) - * - * There is a similar function, ucnv_convert(), - * which has the following limitations: - * - it takes charset names, not converter objects, so that - * - two converters are opened for each call - * - only single-string conversion is possible, not streaming operation - * - it does not provide enough information to find out, - * in case of failure, whether the toUnicode or - * the fromUnicode conversion failed - * - * By contrast, ucnv_convertEx() - * - takes UConverter parameters instead of charset names - * - fully exposes the pivot buffer for streaming conversion and complete error handling - * - * ucnv_convertEx() also provides further convenience: - * - an option to reset the converters at the beginning - * (if reset==TRUE, see parameters; - * also sets *pivotTarget=*pivotSource=pivotStart) - * - allow NUL-terminated input - * (only a single NUL byte, will not work for charsets with multi-byte NULs) - * (if sourceLimit==NULL, see parameters) - * - terminate with a NUL on output - * (only a single NUL byte, not useful for charsets with multi-byte NULs), - * or set U_STRING_NOT_TERMINATED_WARNING if the output exactly fills - * the target buffer - * - the pivot buffer can be provided internally; - * possible only for whole-string conversion, not streaming conversion; - * in this case, the caller will not be able to get details about where an - * error occurred - * (if pivotStart==NULL, see below) - * - * The function returns when one of the following is true: - * - the entire source text has been converted successfully to the target buffer - * - a target buffer overflow occurred (U_BUFFER_OVERFLOW_ERROR) - * - a conversion error occurred - * (other U_FAILURE(), see description of pErrorCode) - * - * Limitation compared to the direct use of - * ucnv_fromUnicode() and ucnv_toUnicode(): - * ucnv_convertEx() does not provide offset information. - * - * Limitation compared to ucnv_fromUChars() and ucnv_toUChars(): - * ucnv_convertEx() does not support preflighting directly. - * - * Sample code for converting a single string from - * one external charset to UTF-8, ignoring the location of errors: - * - * \code - * int32_t - * myToUTF8(UConverter *cnv, - * const char *s, int32_t length, - * char *u8, int32_t capacity, - * UErrorCode *pErrorCode) { - * UConverter *utf8Cnv; - * char *target; - * - * if(U_FAILURE(*pErrorCode)) { - * return 0; - * } - * - * utf8Cnv=myGetCachedUTF8Converter(pErrorCode); - * if(U_FAILURE(*pErrorCode)) { - * return 0; - * } - * - * if(length<0) { - * length=strlen(s); - * } - * target=u8; - * ucnv_convertEx(utf8Cnv, cnv, - * &target, u8+capacity, - * &s, s+length, - * NULL, NULL, NULL, NULL, - * TRUE, TRUE, - * pErrorCode); - * - * myReleaseCachedUTF8Converter(utf8Cnv); - * - * // return the output string length, but without preflighting - * return (int32_t)(target-u8); - * } - * \endcode - * - * @param targetCnv Output converter, used to convert from the UTF-16 pivot - * to the target using ucnv_fromUnicode(). - * @param sourceCnv Input converter, used to convert from the source to - * the UTF-16 pivot using ucnv_toUnicode(). - * @param target I/O parameter, same as for ucnv_fromUChars(). - * Input: *target points to the beginning of the target buffer. - * Output: *target points to the first unit after the last char written. - * @param targetLimit Pointer to the first unit after the target buffer. - * @param source I/O parameter, same as for ucnv_toUChars(). - * Input: *source points to the beginning of the source buffer. - * Output: *source points to the first unit after the last char read. - * @param sourceLimit Pointer to the first unit after the source buffer. - * @param pivotStart Pointer to the UTF-16 pivot buffer. If pivotStart==NULL, - * then an internal buffer is used and the other pivot - * arguments are ignored and can be NULL as well. - * @param pivotSource I/O parameter, same as source in ucnv_fromUChars() for - * conversion from the pivot buffer to the target buffer. - * @param pivotTarget I/O parameter, same as target in ucnv_toUChars() for - * conversion from the source buffer to the pivot buffer. - * It must be pivotStart<=*pivotSource<=*pivotTarget<=pivotLimit - * and pivotStart[0..ucnv_countAvaiable()]) - * @return a pointer a string (library owned), or NULL if the index is out of bounds. - * @see ucnv_countAvailable - * @stable ICU 2.0 - */ -U_STABLE const char* U_EXPORT2 -ucnv_getAvailableName(int32_t n); - -/** - * Returns a UEnumeration to enumerate all of the canonical converter - * names, as per the alias file, regardless of the ability to open each - * converter. - * - * @return A UEnumeration object for getting all the recognized canonical - * converter names. - * @see ucnv_getAvailableName - * @see uenum_close - * @see uenum_next - * @stable ICU 2.4 - */ -U_STABLE UEnumeration * U_EXPORT2 -ucnv_openAllNames(UErrorCode *pErrorCode); - -/** - * Gives the number of aliases for a given converter or alias name. - * If the alias is ambiguous, then the preferred converter is used - * and the status is set to U_AMBIGUOUS_ALIAS_WARNING. - * This method only enumerates the listed entries in the alias file. - * @param alias alias name - * @param pErrorCode error status - * @return number of names on alias list for given alias - * @stable ICU 2.0 - */ -U_STABLE uint16_t U_EXPORT2 -ucnv_countAliases(const char *alias, UErrorCode *pErrorCode); - -/** - * Gives the name of the alias at given index of alias list. - * This method only enumerates the listed entries in the alias file. - * If the alias is ambiguous, then the preferred converter is used - * and the status is set to U_AMBIGUOUS_ALIAS_WARNING. - * @param alias alias name - * @param n index in alias list - * @param pErrorCode result of operation - * @return returns the name of the alias at given index - * @see ucnv_countAliases - * @stable ICU 2.0 - */ -U_STABLE const char * U_EXPORT2 -ucnv_getAlias(const char *alias, uint16_t n, UErrorCode *pErrorCode); - -/** - * Fill-up the list of alias names for the given alias. - * This method only enumerates the listed entries in the alias file. - * If the alias is ambiguous, then the preferred converter is used - * and the status is set to U_AMBIGUOUS_ALIAS_WARNING. - * @param alias alias name - * @param aliases fill-in list, aliases is a pointer to an array of - * ucnv_countAliases() string-pointers - * (const char *) that will be filled in. - * The strings themselves are owned by the library. - * @param pErrorCode result of operation - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_getAliases(const char *alias, const char **aliases, UErrorCode *pErrorCode); - -/** - * Return a new UEnumeration object for enumerating all the - * alias names for a given converter that are recognized by a standard. - * This method only enumerates the listed entries in the alias file. - * The convrtrs.txt file can be modified to change the results of - * this function. - * The first result in this list is the same result given by - * ucnv_getStandardName, which is the default alias for - * the specified standard name. The returned object must be closed with - * uenum_close when you are done with the object. - * - * @param convName original converter name - * @param standard name of the standard governing the names; MIME and IANA - * are such standards - * @param pErrorCode The error code - * @return A UEnumeration object for getting all aliases that are recognized - * by a standard. If any of the parameters are invalid, NULL - * is returned. - * @see ucnv_getStandardName - * @see uenum_close - * @see uenum_next - * @stable ICU 2.2 - */ -U_STABLE UEnumeration * U_EXPORT2 -ucnv_openStandardNames(const char *convName, - const char *standard, - UErrorCode *pErrorCode); - -/** - * Gives the number of standards associated to converter names. - * @return number of standards - * @stable ICU 2.0 - */ -U_STABLE uint16_t U_EXPORT2 -ucnv_countStandards(void); - -/** - * Gives the name of the standard at given index of standard list. - * @param n index in standard list - * @param pErrorCode result of operation - * @return returns the name of the standard at given index. Owned by the library. - * @stable ICU 2.0 - */ -U_STABLE const char * U_EXPORT2 -ucnv_getStandard(uint16_t n, UErrorCode *pErrorCode); - -/** - * Returns a standard name for a given converter name. - *

- * Example alias table:
- * conv alias1 { STANDARD1 } alias2 { STANDARD1* } - *

- * Result of ucnv_getStandardName("conv", "STANDARD1") from example - * alias table:
- * "alias2" - * - * @param name original converter name - * @param standard name of the standard governing the names; MIME and IANA - * are such standards - * @param pErrorCode result of operation - * @return returns the standard converter name; - * if a standard converter name cannot be determined, - * then NULL is returned. Owned by the library. - * @stable ICU 2.0 - */ -U_STABLE const char * U_EXPORT2 -ucnv_getStandardName(const char *name, const char *standard, UErrorCode *pErrorCode); - -/** - * This function will return the internal canonical converter name of the - * tagged alias. This is the opposite of ucnv_openStandardNames, which - * returns the tagged alias given the canonical name. - *

- * Example alias table:
- * conv alias1 { STANDARD1 } alias2 { STANDARD1* } - *

- * Result of ucnv_getStandardName("alias1", "STANDARD1") from example - * alias table:
- * "conv" - * - * @return returns the canonical converter name; - * if a standard or alias name cannot be determined, - * then NULL is returned. The returned string is - * owned by the library. - * @see ucnv_getStandardName - * @stable ICU 2.4 - */ -U_STABLE const char * U_EXPORT2 -ucnv_getCanonicalName(const char *alias, const char *standard, UErrorCode *pErrorCode); - -/** - * Returns the current default converter name. If you want to open - * a default converter, you do not need to use this function. - * It is faster if you pass a NULL argument to ucnv_open the - * default converter. - * - * If U_CHARSET_IS_UTF8 is defined to 1 in utypes.h then this function - * always returns "UTF-8". - * - * @return returns the current default converter name. - * Storage owned by the library - * @see ucnv_setDefaultName - * @stable ICU 2.0 - */ -U_STABLE const char * U_EXPORT2 -ucnv_getDefaultName(void); - -#ifndef U_HIDE_SYSTEM_API -/** - * This function is not thread safe. DO NOT call this function when ANY ICU - * function is being used from more than one thread! This function sets the - * current default converter name. If this function needs to be called, it - * should be called during application initialization. Most of the time, the - * results from ucnv_getDefaultName() or ucnv_open with a NULL string argument - * is sufficient for your application. - * - * If U_CHARSET_IS_UTF8 is defined to 1 in utypes.h then this function - * does nothing. - * - * @param name the converter name to be the default (must be known by ICU). - * @see ucnv_getDefaultName - * @system - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_setDefaultName(const char *name); -#endif /* U_HIDE_SYSTEM_API */ - -/** - * Fixes the backslash character mismapping. For example, in SJIS, the backslash - * character in the ASCII portion is also used to represent the yen currency sign. - * When mapping from Unicode character 0x005C, it's unclear whether to map the - * character back to yen or backslash in SJIS. This function will take the input - * buffer and replace all the yen sign characters with backslash. This is necessary - * when the user tries to open a file with the input buffer on Windows. - * This function will test the converter to see whether such mapping is - * required. You can sometimes avoid using this function by using the correct version - * of Shift-JIS. - * - * @param cnv The converter representing the target codepage. - * @param source the input buffer to be fixed - * @param sourceLen the length of the input buffer - * @see ucnv_isAmbiguous - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_fixFileSeparator(const UConverter *cnv, UChar *source, int32_t sourceLen); - -/** - * Determines if the converter contains ambiguous mappings of the same - * character or not. - * @param cnv the converter to be tested - * @return TRUE if the converter contains ambiguous mapping of the same - * character, FALSE otherwise. - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -ucnv_isAmbiguous(const UConverter *cnv); - -/** - * Sets the converter to use fallback mappings or not. - * Regardless of this flag, the converter will always use - * fallbacks from Unicode Private Use code points, as well as - * reverse fallbacks (to Unicode). - * For details see ".ucm File Format" - * in the Conversion Data chapter of the ICU User Guide: - * http://www.icu-project.org/userguide/conversion-data.html#ucmformat - * - * @param cnv The converter to set the fallback mapping usage on. - * @param usesFallback TRUE if the user wants the converter to take advantage of the fallback - * mapping, FALSE otherwise. - * @stable ICU 2.0 - * @see ucnv_usesFallback - */ -U_STABLE void U_EXPORT2 -ucnv_setFallback(UConverter *cnv, UBool usesFallback); - -/** - * Determines if the converter uses fallback mappings or not. - * This flag has restrictions, see ucnv_setFallback(). - * - * @param cnv The converter to be tested - * @return TRUE if the converter uses fallback, FALSE otherwise. - * @stable ICU 2.0 - * @see ucnv_setFallback - */ -U_STABLE UBool U_EXPORT2 -ucnv_usesFallback(const UConverter *cnv); - -/** - * Detects Unicode signature byte sequences at the start of the byte stream - * and returns the charset name of the indicated Unicode charset. - * NULL is returned when no Unicode signature is recognized. - * The number of bytes in the signature is output as well. - * - * The caller can ucnv_open() a converter using the charset name. - * The first code unit (UChar) from the start of the stream will be U+FEFF - * (the Unicode BOM/signature character) and can usually be ignored. - * - * For most Unicode charsets it is also possible to ignore the indicated - * number of initial stream bytes and start converting after them. - * However, there are stateful Unicode charsets (UTF-7 and BOCU-1) for which - * this will not work. Therefore, it is best to ignore the first output UChar - * instead of the input signature bytes. - *

- * Usage: - * \snippet samples/ucnv/convsamp.cpp ucnv_detectUnicodeSignature - * - * @param source The source string in which the signature should be detected. - * @param sourceLength Length of the input string, or -1 if terminated with a NUL byte. - * @param signatureLength A pointer to int32_t to receive the number of bytes that make up the signature - * of the detected UTF. 0 if not detected. - * Can be a NULL pointer. - * @param pErrorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return The name of the encoding detected. NULL if encoding is not detected. - * @stable ICU 2.4 - */ -U_STABLE const char* U_EXPORT2 -ucnv_detectUnicodeSignature(const char* source, - int32_t sourceLength, - int32_t *signatureLength, - UErrorCode *pErrorCode); - -/** - * Returns the number of UChars held in the converter's internal state - * because more input is needed for completing the conversion. This function is - * useful for mapping semantics of ICU's converter interface to those of iconv, - * and this information is not needed for normal conversion. - * @param cnv The converter in which the input is held - * @param status ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return The number of UChars in the state. -1 if an error is encountered. - * @stable ICU 3.4 - */ -U_STABLE int32_t U_EXPORT2 -ucnv_fromUCountPending(const UConverter* cnv, UErrorCode* status); - -/** - * Returns the number of chars held in the converter's internal state - * because more input is needed for completing the conversion. This function is - * useful for mapping semantics of ICU's converter interface to those of iconv, - * and this information is not needed for normal conversion. - * @param cnv The converter in which the input is held as internal state - * @param status ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return The number of chars in the state. -1 if an error is encountered. - * @stable ICU 3.4 - */ -U_STABLE int32_t U_EXPORT2 -ucnv_toUCountPending(const UConverter* cnv, UErrorCode* status); - -/** - * Returns whether or not the charset of the converter has a fixed number of bytes - * per charset character. - * An example of this are converters that are of the type UCNV_SBCS or UCNV_DBCS. - * Another example is UTF-32 which is always 4 bytes per character. - * A Unicode code point may be represented by more than one UTF-8 or UTF-16 code unit - * but a UTF-32 converter encodes each code point with 4 bytes. - * Note: This method is not intended to be used to determine whether the charset has a - * fixed ratio of bytes to Unicode codes units for any particular Unicode encoding form. - * FALSE is returned with the UErrorCode if error occurs or cnv is NULL. - * @param cnv The converter to be tested - * @param status ICU error code in/out paramter - * @return TRUE if the converter is fixed-width - * @stable ICU 4.8 - */ -U_STABLE UBool U_EXPORT2 -ucnv_isFixedWidth(UConverter *cnv, UErrorCode *status); - -#endif - -#endif -/*_UCNV*/ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnv_cb.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnv_cb.h deleted file mode 100644 index 14169ed61c..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnv_cb.h +++ /dev/null @@ -1,164 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2000-2004, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** - * ucnv_cb.h: - * External APIs for the ICU's codeset conversion library - * Helena Shih - * - * Modification History: - * - * Date Name Description - */ - -/** - * \file - * \brief C UConverter functions to aid the writers of callbacks - * - *

Callback API for UConverter

- * - * These functions are provided here for the convenience of the callback - * writer. If you are just looking for callback functions to use, please - * see ucnv_err.h. DO NOT call these functions directly when you are - * working with converters, unless your code has been called as a callback - * via ucnv_setFromUCallback or ucnv_setToUCallback !! - * - * A note about error codes and overflow. Unlike other ICU functions, - * these functions do not expect the error status to be U_ZERO_ERROR. - * Callbacks must be much more careful about their error codes. - * The error codes used here are in/out parameters, which should be passed - * back in the callback's error parameter. - * - * For example, if you call ucnv_cbfromUWriteBytes to write data out - * to the output codepage, it may return U_BUFFER_OVERFLOW_ERROR if - * the data did not fit in the target. But this isn't a failing error, - * in fact, ucnv_cbfromUWriteBytes may be called AGAIN with the error - * status still U_BUFFER_OVERFLOW_ERROR to attempt to write further bytes, - * which will also go into the internal overflow buffers. - * - * Concerning offsets, the 'offset' parameters here are relative to the start - * of SOURCE. For example, Suppose the string "ABCD" was being converted - * from Unicode into a codepage which doesn't have a mapping for 'B'. - * 'A' will be written out correctly, but - * The FromU Callback will be called on an unassigned character for 'B'. - * At this point, this is the state of the world: - * Target: A [..] [points after A] - * Source: A B [C] D [points to C - B has been consumed] - * 0 1 2 3 - * codePoint = "B" [the unassigned codepoint] - * - * Now, suppose a callback wants to write the substitution character '?' to - * the target. It calls ucnv_cbFromUWriteBytes() to write the ?. - * It should pass ZERO as the offset, because the offset as far as the - * callback is concerned is relative to the SOURCE pointer [which points - * before 'C'.] If the callback goes into the args and consumes 'C' also, - * it would call FromUWriteBytes with an offset of 1 (and advance the source - * pointer). - * - */ - -#ifndef UCNV_CB_H -#define UCNV_CB_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION - -#include "unicode/ucnv.h" -#include "unicode/ucnv_err.h" - -/** - * ONLY used by FromU callback functions. - * Writes out the specified byte output bytes to the target byte buffer or to converter internal buffers. - * - * @param args callback fromUnicode arguments - * @param source source bytes to write - * @param length length of bytes to write - * @param offsetIndex the relative offset index from callback. - * @param err error status. If U_BUFFER_OVERFLOW is returned, then U_BUFFER_OVERFLOW must - * be returned to the user, because it means that not all data could be written into the target buffer, and some is - * in the converter error buffer. - * @see ucnv_cbFromUWriteSub - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_cbFromUWriteBytes (UConverterFromUnicodeArgs *args, - const char* source, - int32_t length, - int32_t offsetIndex, - UErrorCode * err); - -/** - * ONLY used by FromU callback functions. - * This function will write out the correct substitution character sequence - * to the target. - * - * @param args callback fromUnicode arguments - * @param offsetIndex the relative offset index from the current source pointer to be used - * @param err error status. If U_BUFFER_OVERFLOW is returned, then U_BUFFER_OVERFLOW must - * be returned to the user, because it means that not all data could be written into the target buffer, and some is - * in the converter error buffer. - * @see ucnv_cbFromUWriteBytes - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucnv_cbFromUWriteSub (UConverterFromUnicodeArgs *args, - int32_t offsetIndex, - UErrorCode * err); - -/** - * ONLY used by fromU callback functions. - * This function will write out the error character(s) to the target UChar buffer. - * - * @param args callback fromUnicode arguments - * @param source pointer to pointer to first UChar to write [on exit: 1 after last UChar processed] - * @param sourceLimit pointer after last UChar to write - * @param offsetIndex the relative offset index from callback which will be set - * @param err error status U_BUFFER_OVERFLOW - * @see ucnv_cbToUWriteSub - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 ucnv_cbFromUWriteUChars(UConverterFromUnicodeArgs *args, - const UChar** source, - const UChar* sourceLimit, - int32_t offsetIndex, - UErrorCode * err); - -/** - * ONLY used by ToU callback functions. - * This function will write out the specified characters to the target - * UChar buffer. - * - * @param args callback toUnicode arguments - * @param source source string to write - * @param length the length of source string - * @param offsetIndex the relative offset index which will be written. - * @param err error status U_BUFFER_OVERFLOW - * @see ucnv_cbToUWriteSub - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 ucnv_cbToUWriteUChars (UConverterToUnicodeArgs *args, - const UChar* source, - int32_t length, - int32_t offsetIndex, - UErrorCode * err); - -/** - * ONLY used by ToU callback functions. - * This function will write out the Unicode substitution character (U+FFFD). - * - * @param args callback fromUnicode arguments - * @param offsetIndex the relative offset index from callback. - * @param err error status U_BUFFER_OVERFLOW - * @see ucnv_cbToUWriteUChars - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 ucnv_cbToUWriteSub (UConverterToUnicodeArgs *args, - int32_t offsetIndex, - UErrorCode * err); -#endif - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnv_err.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnv_err.h deleted file mode 100644 index d234710a8b..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnv_err.h +++ /dev/null @@ -1,465 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1999-2009, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** - * - * - * ucnv_err.h: - */ - -/** - * \file - * \brief C UConverter predefined error callbacks - * - *

Error Behaviour Functions

- * Defines some error behaviour functions called by ucnv_{from,to}Unicode - * These are provided as part of ICU and many are stable, but they - * can also be considered only as an example of what can be done with - * callbacks. You may of course write your own. - * - * If you want to write your own, you may also find the functions from - * ucnv_cb.h useful when writing your own callbacks. - * - * These functions, although public, should NEVER be called directly. - * They should be used as parameters to the ucnv_setFromUCallback - * and ucnv_setToUCallback functions, to set the behaviour of a converter - * when it encounters ILLEGAL/UNMAPPED/INVALID sequences. - * - * usage example: 'STOP' doesn't need any context, but newContext - * could be set to something other than 'NULL' if needed. The available - * contexts in this header can modify the default behavior of the callback. - * - * \code - * UErrorCode err = U_ZERO_ERROR; - * UConverter *myConverter = ucnv_open("ibm-949", &err); - * const void *oldContext; - * UConverterFromUCallback oldAction; - * - * - * if (U_SUCCESS(err)) - * { - * ucnv_setFromUCallBack(myConverter, - * UCNV_FROM_U_CALLBACK_STOP, - * NULL, - * &oldAction, - * &oldContext, - * &status); - * } - * \endcode - * - * The code above tells "myConverter" to stop when it encounters an - * ILLEGAL/TRUNCATED/INVALID sequences when it is used to convert from - * Unicode -> Codepage. The behavior from Codepage to Unicode is not changed, - * and ucnv_setToUCallBack would need to be called in order to change - * that behavior too. - * - * Here is an example with a context: - * - * \code - * UErrorCode err = U_ZERO_ERROR; - * UConverter *myConverter = ucnv_open("ibm-949", &err); - * const void *oldContext; - * UConverterFromUCallback oldAction; - * - * - * if (U_SUCCESS(err)) - * { - * ucnv_setToUCallBack(myConverter, - * UCNV_TO_U_CALLBACK_SUBSTITUTE, - * UCNV_SUB_STOP_ON_ILLEGAL, - * &oldAction, - * &oldContext, - * &status); - * } - * \endcode - * - * The code above tells "myConverter" to stop when it encounters an - * ILLEGAL/TRUNCATED/INVALID sequences when it is used to convert from - * Codepage -> Unicode. Any unmapped and legal characters will be - * substituted to be the default substitution character. - */ - -#ifndef UCNV_ERR_H -#define UCNV_ERR_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION - -/** Forward declaring the UConverter structure. @stable ICU 2.0 */ -struct UConverter; - -/** @stable ICU 2.0 */ -typedef struct UConverter UConverter; - -/** - * FROM_U, TO_U context options for sub callback - * @stable ICU 2.0 - */ -#define UCNV_SUB_STOP_ON_ILLEGAL "i" - -/** - * FROM_U, TO_U context options for skip callback - * @stable ICU 2.0 - */ -#define UCNV_SKIP_STOP_ON_ILLEGAL "i" - -/** - * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to ICU (%UXXXX) - * @stable ICU 2.0 - */ -#define UCNV_ESCAPE_ICU NULL -/** - * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to JAVA (\\uXXXX) - * @stable ICU 2.0 - */ -#define UCNV_ESCAPE_JAVA "J" -/** - * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to C (\\uXXXX \\UXXXXXXXX) - * TO_U_CALLBACK_ESCAPE option to escape the character value according to C (\\xXXXX) - * @stable ICU 2.0 - */ -#define UCNV_ESCAPE_C "C" -/** - * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to XML Decimal escape \htmlonly(&#DDDD;)\endhtmlonly - * TO_U_CALLBACK_ESCAPE context option to escape the character value according to XML Decimal escape \htmlonly(&#DDDD;)\endhtmlonly - * @stable ICU 2.0 - */ -#define UCNV_ESCAPE_XML_DEC "D" -/** - * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to XML Hex escape \htmlonly(&#xXXXX;)\endhtmlonly - * TO_U_CALLBACK_ESCAPE context option to escape the character value according to XML Hex escape \htmlonly(&#xXXXX;)\endhtmlonly - * @stable ICU 2.0 - */ -#define UCNV_ESCAPE_XML_HEX "X" -/** - * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to Unicode (U+XXXXX) - * @stable ICU 2.0 - */ -#define UCNV_ESCAPE_UNICODE "U" - -/** - * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to CSS2 conventions (\\HH..H, that is, - * a backslash, 1..6 hex digits, and a space) - * @stable ICU 4.0 - */ -#define UCNV_ESCAPE_CSS2 "S" - -/** - * The process condition code to be used with the callbacks. - * Codes which are greater than UCNV_IRREGULAR should be - * passed on to any chained callbacks. - * @stable ICU 2.0 - */ -typedef enum { - UCNV_UNASSIGNED = 0, /**< The code point is unassigned. - The error code U_INVALID_CHAR_FOUND will be set. */ - UCNV_ILLEGAL = 1, /**< The code point is illegal. For example, - \\x81\\x2E is illegal in SJIS because \\x2E - is not a valid trail byte for the \\x81 - lead byte. - Also, starting with Unicode 3.0.1, non-shortest byte sequences - in UTF-8 (like \\xC1\\xA1 instead of \\x61 for U+0061) - are also illegal, not just irregular. - The error code U_ILLEGAL_CHAR_FOUND will be set. */ - UCNV_IRREGULAR = 2, /**< The codepoint is not a regular sequence in - the encoding. For example, \\xED\\xA0\\x80..\\xED\\xBF\\xBF - are irregular UTF-8 byte sequences for single surrogate - code points. - The error code U_INVALID_CHAR_FOUND will be set. */ - UCNV_RESET = 3, /**< The callback is called with this reason when a - 'reset' has occurred. Callback should reset all - state. */ - UCNV_CLOSE = 4, /**< Called when the converter is closed. The - callback should release any allocated memory.*/ - UCNV_CLONE = 5 /**< Called when ucnv_safeClone() is called on the - converter. the pointer available as the - 'context' is an alias to the original converters' - context pointer. If the context must be owned - by the new converter, the callback must clone - the data and call ucnv_setFromUCallback - (or setToUCallback) with the correct pointer. - @stable ICU 2.2 - */ -} UConverterCallbackReason; - - -/** - * The structure for the fromUnicode callback function parameter. - * @stable ICU 2.0 - */ -typedef struct { - uint16_t size; /**< The size of this struct. @stable ICU 2.0 */ - UBool flush; /**< The internal state of converter will be reset and data flushed if set to TRUE. @stable ICU 2.0 */ - UConverter *converter; /**< Pointer to the converter that is opened and to which this struct is passed as an argument. @stable ICU 2.0 */ - const UChar *source; /**< Pointer to the source source buffer. @stable ICU 2.0 */ - const UChar *sourceLimit; /**< Pointer to the limit (end + 1) of source buffer. @stable ICU 2.0 */ - char *target; /**< Pointer to the target buffer. @stable ICU 2.0 */ - const char *targetLimit; /**< Pointer to the limit (end + 1) of target buffer. @stable ICU 2.0 */ - int32_t *offsets; /**< Pointer to the buffer that receives the offsets. *offset = blah ; offset++;. @stable ICU 2.0 */ -} UConverterFromUnicodeArgs; - - -/** - * The structure for the toUnicode callback function parameter. - * @stable ICU 2.0 - */ -typedef struct { - uint16_t size; /**< The size of this struct @stable ICU 2.0 */ - UBool flush; /**< The internal state of converter will be reset and data flushed if set to TRUE. @stable ICU 2.0 */ - UConverter *converter; /**< Pointer to the converter that is opened and to which this struct is passed as an argument. @stable ICU 2.0 */ - const char *source; /**< Pointer to the source source buffer. @stable ICU 2.0 */ - const char *sourceLimit; /**< Pointer to the limit (end + 1) of source buffer. @stable ICU 2.0 */ - UChar *target; /**< Pointer to the target buffer. @stable ICU 2.0 */ - const UChar *targetLimit; /**< Pointer to the limit (end + 1) of target buffer. @stable ICU 2.0 */ - int32_t *offsets; /**< Pointer to the buffer that receives the offsets. *offset = blah ; offset++;. @stable ICU 2.0 */ -} UConverterToUnicodeArgs; - - -/** - * DO NOT CALL THIS FUNCTION DIRECTLY! - * This From Unicode callback STOPS at the ILLEGAL_SEQUENCE, - * returning the error code back to the caller immediately. - * - * @param context Pointer to the callback's private data - * @param fromUArgs Information about the conversion in progress - * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence - * @param length Size (in bytes) of the concerned codepage sequence - * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint. - * @param reason Defines the reason the callback was invoked - * @param err This should always be set to a failure status prior to calling. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_STOP ( - const void *context, - UConverterFromUnicodeArgs *fromUArgs, - const UChar* codeUnits, - int32_t length, - UChar32 codePoint, - UConverterCallbackReason reason, - UErrorCode * err); - - - -/** - * DO NOT CALL THIS FUNCTION DIRECTLY! - * This To Unicode callback STOPS at the ILLEGAL_SEQUENCE, - * returning the error code back to the caller immediately. - * - * @param context Pointer to the callback's private data - * @param toUArgs Information about the conversion in progress - * @param codeUnits Points to 'length' bytes of the concerned codepage sequence - * @param length Size (in bytes) of the concerned codepage sequence - * @param reason Defines the reason the callback was invoked - * @param err This should always be set to a failure status prior to calling. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_STOP ( - const void *context, - UConverterToUnicodeArgs *toUArgs, - const char* codeUnits, - int32_t length, - UConverterCallbackReason reason, - UErrorCode * err); - -/** - * DO NOT CALL THIS FUNCTION DIRECTLY! - * This From Unicode callback skips any ILLEGAL_SEQUENCE, or - * skips only UNASSINGED_SEQUENCE depending on the context parameter - * simply ignoring those characters. - * - * @param context The function currently recognizes the callback options: - * UCNV_SKIP_STOP_ON_ILLEGAL: STOPS at the ILLEGAL_SEQUENCE, - * returning the error code back to the caller immediately. - * NULL: Skips any ILLEGAL_SEQUENCE - * @param fromUArgs Information about the conversion in progress - * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence - * @param length Size (in bytes) of the concerned codepage sequence - * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint. - * @param reason Defines the reason the callback was invoked - * @param err Return value will be set to success if the callback was handled, - * otherwise this value will be set to a failure status. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SKIP ( - const void *context, - UConverterFromUnicodeArgs *fromUArgs, - const UChar* codeUnits, - int32_t length, - UChar32 codePoint, - UConverterCallbackReason reason, - UErrorCode * err); - -/** - * DO NOT CALL THIS FUNCTION DIRECTLY! - * This From Unicode callback will Substitute the ILLEGAL SEQUENCE, or - * UNASSIGNED_SEQUENCE depending on context parameter, with the - * current substitution string for the converter. This is the default - * callback. - * - * @param context The function currently recognizes the callback options: - * UCNV_SUB_STOP_ON_ILLEGAL: STOPS at the ILLEGAL_SEQUENCE, - * returning the error code back to the caller immediately. - * NULL: Substitutes any ILLEGAL_SEQUENCE - * @param fromUArgs Information about the conversion in progress - * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence - * @param length Size (in bytes) of the concerned codepage sequence - * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint. - * @param reason Defines the reason the callback was invoked - * @param err Return value will be set to success if the callback was handled, - * otherwise this value will be set to a failure status. - * @see ucnv_setSubstChars - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SUBSTITUTE ( - const void *context, - UConverterFromUnicodeArgs *fromUArgs, - const UChar* codeUnits, - int32_t length, - UChar32 codePoint, - UConverterCallbackReason reason, - UErrorCode * err); - -/** - * DO NOT CALL THIS FUNCTION DIRECTLY! - * This From Unicode callback will Substitute the ILLEGAL SEQUENCE with the - * hexadecimal representation of the illegal codepoints - * - * @param context The function currently recognizes the callback options: - *
    - *
  • UCNV_ESCAPE_ICU: Substitues the ILLEGAL SEQUENCE with the hexadecimal - * representation in the format %UXXXX, e.g. "%uFFFE%u00AC%uC8FE"). - * In the Event the converter doesn't support the characters {%,U}[A-F][0-9], - * it will substitute the illegal sequence with the substitution characters. - * Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as - * %UD84D%UDC56
  • - *
  • UCNV_ESCAPE_JAVA: Substitues the ILLEGAL SEQUENCE with the hexadecimal - * representation in the format \\uXXXX, e.g. "\\uFFFE\\u00AC\\uC8FE"). - * In the Event the converter doesn't support the characters {\,u}[A-F][0-9], - * it will substitute the illegal sequence with the substitution characters. - * Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as - * \\uD84D\\uDC56
  • - *
  • UCNV_ESCAPE_C: Substitues the ILLEGAL SEQUENCE with the hexadecimal - * representation in the format \\uXXXX, e.g. "\\uFFFE\\u00AC\\uC8FE"). - * In the Event the converter doesn't support the characters {\,u,U}[A-F][0-9], - * it will substitute the illegal sequence with the substitution characters. - * Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as - * \\U00023456
  • - *
  • UCNV_ESCAPE_XML_DEC: Substitues the ILLEGAL SEQUENCE with the decimal - * representation in the format \htmlonly&#DDDDDDDD;, e.g. "&#65534;&#172;&#51454;")\endhtmlonly. - * In the Event the converter doesn't support the characters {&,#}[0-9], - * it will substitute the illegal sequence with the substitution characters. - * Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as - * &#144470; and Zero padding is ignored.
  • - *
  • UCNV_ESCAPE_XML_HEX:Substitues the ILLEGAL SEQUENCE with the decimal - * representation in the format \htmlonly&#xXXXX; e.g. "&#xFFFE;&#x00AC;&#xC8FE;")\endhtmlonly. - * In the Event the converter doesn't support the characters {&,#,x}[0-9], - * it will substitute the illegal sequence with the substitution characters. - * Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as - * \htmlonly&#x23456;\endhtmlonly
  • - *
- * @param fromUArgs Information about the conversion in progress - * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence - * @param length Size (in bytes) of the concerned codepage sequence - * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint. - * @param reason Defines the reason the callback was invoked - * @param err Return value will be set to success if the callback was handled, - * otherwise this value will be set to a failure status. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_ESCAPE ( - const void *context, - UConverterFromUnicodeArgs *fromUArgs, - const UChar* codeUnits, - int32_t length, - UChar32 codePoint, - UConverterCallbackReason reason, - UErrorCode * err); - - -/** - * DO NOT CALL THIS FUNCTION DIRECTLY! - * This To Unicode callback skips any ILLEGAL_SEQUENCE, or - * skips only UNASSINGED_SEQUENCE depending on the context parameter - * simply ignoring those characters. - * - * @param context The function currently recognizes the callback options: - * UCNV_SKIP_STOP_ON_ILLEGAL: STOPS at the ILLEGAL_SEQUENCE, - * returning the error code back to the caller immediately. - * NULL: Skips any ILLEGAL_SEQUENCE - * @param toUArgs Information about the conversion in progress - * @param codeUnits Points to 'length' bytes of the concerned codepage sequence - * @param length Size (in bytes) of the concerned codepage sequence - * @param reason Defines the reason the callback was invoked - * @param err Return value will be set to success if the callback was handled, - * otherwise this value will be set to a failure status. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SKIP ( - const void *context, - UConverterToUnicodeArgs *toUArgs, - const char* codeUnits, - int32_t length, - UConverterCallbackReason reason, - UErrorCode * err); - -/** - * DO NOT CALL THIS FUNCTION DIRECTLY! - * This To Unicode callback will Substitute the ILLEGAL SEQUENCE,or - * UNASSIGNED_SEQUENCE depending on context parameter, with the - * Unicode substitution character, U+FFFD. - * - * @param context The function currently recognizes the callback options: - * UCNV_SUB_STOP_ON_ILLEGAL: STOPS at the ILLEGAL_SEQUENCE, - * returning the error code back to the caller immediately. - * NULL: Substitutes any ILLEGAL_SEQUENCE - * @param toUArgs Information about the conversion in progress - * @param codeUnits Points to 'length' bytes of the concerned codepage sequence - * @param length Size (in bytes) of the concerned codepage sequence - * @param reason Defines the reason the callback was invoked - * @param err Return value will be set to success if the callback was handled, - * otherwise this value will be set to a failure status. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_SUBSTITUTE ( - const void *context, - UConverterToUnicodeArgs *toUArgs, - const char* codeUnits, - int32_t length, - UConverterCallbackReason reason, - UErrorCode * err); - -/** - * DO NOT CALL THIS FUNCTION DIRECTLY! - * This To Unicode callback will Substitute the ILLEGAL SEQUENCE with the - * hexadecimal representation of the illegal bytes - * (in the format %XNN, e.g. "%XFF%X0A%XC8%X03"). - * - * @param context This function currently recognizes the callback options: - * UCNV_ESCAPE_ICU, UCNV_ESCAPE_JAVA, UCNV_ESCAPE_C, UCNV_ESCAPE_XML_DEC, - * UCNV_ESCAPE_XML_HEX and UCNV_ESCAPE_UNICODE. - * @param toUArgs Information about the conversion in progress - * @param codeUnits Points to 'length' bytes of the concerned codepage sequence - * @param length Size (in bytes) of the concerned codepage sequence - * @param reason Defines the reason the callback was invoked - * @param err Return value will be set to success if the callback was handled, - * otherwise this value will be set to a failure status. - * @stable ICU 2.0 - */ - -U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_ESCAPE ( - const void *context, - UConverterToUnicodeArgs *toUArgs, - const char* codeUnits, - int32_t length, - UConverterCallbackReason reason, - UErrorCode * err); - -#endif - -#endif - -/*UCNV_ERR_H*/ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnvsel.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnvsel.h deleted file mode 100644 index 6fc2285c6a..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucnvsel.h +++ /dev/null @@ -1,189 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2008-2011, International Business Machines -* Corporation, Google and others. All Rights Reserved. -* -******************************************************************************* -*/ -/* - * Author : eldawy@google.com (Mohamed Eldawy) - * ucnvsel.h - * - * Purpose: To generate a list of encodings capable of handling - * a given Unicode text - * - * Started 09-April-2008 - */ - -#ifndef __ICU_UCNV_SEL_H__ -#define __ICU_UCNV_SEL_H__ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION - -#include "unicode/uset.h" -#include "unicode/utf16.h" -#include "unicode/uenum.h" -#include "unicode/ucnv.h" -#include "unicode/localpointer.h" - -/** - * \file - * - * A converter selector is built with a set of encoding/charset names - * and given an input string returns the set of names of the - * corresponding converters which can convert the string. - * - * A converter selector can be serialized into a buffer and reopened - * from the serialized form. - */ - -/** - * @{ - * The selector data structure - */ -struct UConverterSelector; -typedef struct UConverterSelector UConverterSelector; -/** @} */ - -/** - * Open a selector. - * If converterListSize is 0, build for all available converters. - * If excludedCodePoints is NULL, don't exclude any code points. - * - * @param converterList a pointer to encoding names needed to be involved. - * Can be NULL if converterListSize==0. - * The list and the names will be cloned, and the caller - * retains ownership of the original. - * @param converterListSize number of encodings in above list. - * If 0, builds a selector for all available converters. - * @param excludedCodePoints a set of code points to be excluded from consideration. - * That is, excluded code points in a string do not change - * the selection result. (They might be handled by a callback.) - * Use NULL to exclude nothing. - * @param whichSet what converter set to use? Use this to determine whether - * to consider only roundtrip mappings or also fallbacks. - * @param status an in/out ICU UErrorCode - * @return the new selector - * - * @stable ICU 4.2 - */ -U_STABLE UConverterSelector* U_EXPORT2 -ucnvsel_open(const char* const* converterList, int32_t converterListSize, - const USet* excludedCodePoints, - const UConverterUnicodeSet whichSet, UErrorCode* status); - -/** - * Closes a selector. - * If any Enumerations were returned by ucnv_select*, they become invalid. - * They can be closed before or after calling ucnv_closeSelector, - * but should never be used after the selector is closed. - * - * @see ucnv_selectForString - * @see ucnv_selectForUTF8 - * - * @param sel selector to close - * - * @stable ICU 4.2 - */ -U_STABLE void U_EXPORT2 -ucnvsel_close(UConverterSelector *sel); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUConverterSelectorPointer - * "Smart pointer" class, closes a UConverterSelector via ucnvsel_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUConverterSelectorPointer, UConverterSelector, ucnvsel_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Open a selector from its serialized form. - * The buffer must remain valid and unchanged for the lifetime of the selector. - * This is much faster than creating a selector from scratch. - * Using a serialized form from a different machine (endianness/charset) is supported. - * - * @param buffer pointer to the serialized form of a converter selector; - * must be 32-bit-aligned - * @param length the capacity of this buffer (can be equal to or larger than - * the actual data length) - * @param status an in/out ICU UErrorCode - * @return the new selector - * - * @stable ICU 4.2 - */ -U_STABLE UConverterSelector* U_EXPORT2 -ucnvsel_openFromSerialized(const void* buffer, int32_t length, UErrorCode* status); - -/** - * Serialize a selector into a linear buffer. - * The serialized form is portable to different machines. - * - * @param sel selector to consider - * @param buffer pointer to 32-bit-aligned memory to be filled with the - * serialized form of this converter selector - * @param bufferCapacity the capacity of this buffer - * @param status an in/out ICU UErrorCode - * @return the required buffer capacity to hold serialize data (even if the call fails - * with a U_BUFFER_OVERFLOW_ERROR, it will return the required capacity) - * - * @stable ICU 4.2 - */ -U_STABLE int32_t U_EXPORT2 -ucnvsel_serialize(const UConverterSelector* sel, - void* buffer, int32_t bufferCapacity, UErrorCode* status); - -/** - * Select converters that can map all characters in a UTF-16 string, - * ignoring the excluded code points. - * - * @param sel a selector - * @param s UTF-16 string - * @param length length of the string, or -1 if NUL-terminated - * @param status an in/out ICU UErrorCode - * @return an enumeration containing encoding names. - * The returned encoding names and their order will be the same as - * supplied when building the selector. - * - * @stable ICU 4.2 - */ -U_STABLE UEnumeration * U_EXPORT2 -ucnvsel_selectForString(const UConverterSelector* sel, - const UChar *s, int32_t length, UErrorCode *status); - -/** - * Select converters that can map all characters in a UTF-8 string, - * ignoring the excluded code points. - * - * @param sel a selector - * @param s UTF-8 string - * @param length length of the string, or -1 if NUL-terminated - * @param status an in/out ICU UErrorCode - * @return an enumeration containing encoding names. - * The returned encoding names and their order will be the same as - * supplied when building the selector. - * - * @stable ICU 4.2 - */ -U_STABLE UEnumeration * U_EXPORT2 -ucnvsel_selectForUTF8(const UConverterSelector* sel, - const char *s, int32_t length, UErrorCode *status); - -#endif /* !UCONFIG_NO_CONVERSION */ - -#endif /* __ICU_UCNV_SEL_H__ */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucol.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucol.h deleted file mode 100644 index f9c767b657..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucol.h +++ /dev/null @@ -1,1498 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (c) 1996-2015, International Business Machines Corporation and others. -* All Rights Reserved. -******************************************************************************* -*/ - -#ifndef UCOL_H -#define UCOL_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_COLLATION - -#include "unicode/unorm.h" -#include "unicode/localpointer.h" -#include "unicode/parseerr.h" -#include "unicode/uloc.h" -#include "unicode/uset.h" -#include "unicode/uscript.h" - -/** - * \file - * \brief C API: Collator - * - *

Collator C API

- * - * The C API for Collator performs locale-sensitive - * string comparison. You use this service to build - * searching and sorting routines for natural language text. - *

- * For more information about the collation service see - * the User Guide. - *

- * Collation service provides correct sorting orders for most locales supported in ICU. - * If specific data for a locale is not available, the orders eventually falls back - * to the CLDR root sort order. - *

- * Sort ordering may be customized by providing your own set of rules. For more on - * this subject see the - * Collation Customization section of the User Guide. - *

- * @see UCollationResult - * @see UNormalizationMode - * @see UCollationStrength - * @see UCollationElements - */ - -/** A collator. -* For usage in C programs. -*/ -struct UCollator; -/** structure representing a collator object instance - * @stable ICU 2.0 - */ -typedef struct UCollator UCollator; - - -/** - * UCOL_LESS is returned if source string is compared to be less than target - * string in the ucol_strcoll() method. - * UCOL_EQUAL is returned if source string is compared to be equal to target - * string in the ucol_strcoll() method. - * UCOL_GREATER is returned if source string is compared to be greater than - * target string in the ucol_strcoll() method. - * @see ucol_strcoll() - *

- * Possible values for a comparison result - * @stable ICU 2.0 - */ -typedef enum { - /** string a == string b */ - UCOL_EQUAL = 0, - /** string a > string b */ - UCOL_GREATER = 1, - /** string a < string b */ - UCOL_LESS = -1 -} UCollationResult ; - - -/** Enum containing attribute values for controling collation behavior. - * Here are all the allowable values. Not every attribute can take every value. The only - * universal value is UCOL_DEFAULT, which resets the attribute value to the predefined - * value for that locale - * @stable ICU 2.0 - */ -typedef enum { - /** accepted by most attributes */ - UCOL_DEFAULT = -1, - - /** Primary collation strength */ - UCOL_PRIMARY = 0, - /** Secondary collation strength */ - UCOL_SECONDARY = 1, - /** Tertiary collation strength */ - UCOL_TERTIARY = 2, - /** Default collation strength */ - UCOL_DEFAULT_STRENGTH = UCOL_TERTIARY, - UCOL_CE_STRENGTH_LIMIT, - /** Quaternary collation strength */ - UCOL_QUATERNARY=3, - /** Identical collation strength */ - UCOL_IDENTICAL=15, - UCOL_STRENGTH_LIMIT, - - /** Turn the feature off - works for UCOL_FRENCH_COLLATION, - UCOL_CASE_LEVEL, UCOL_HIRAGANA_QUATERNARY_MODE - & UCOL_DECOMPOSITION_MODE*/ - UCOL_OFF = 16, - /** Turn the feature on - works for UCOL_FRENCH_COLLATION, - UCOL_CASE_LEVEL, UCOL_HIRAGANA_QUATERNARY_MODE - & UCOL_DECOMPOSITION_MODE*/ - UCOL_ON = 17, - - /** Valid for UCOL_ALTERNATE_HANDLING. Alternate handling will be shifted */ - UCOL_SHIFTED = 20, - /** Valid for UCOL_ALTERNATE_HANDLING. Alternate handling will be non ignorable */ - UCOL_NON_IGNORABLE = 21, - - /** Valid for UCOL_CASE_FIRST - - lower case sorts before upper case */ - UCOL_LOWER_FIRST = 24, - /** upper case sorts before lower case */ - UCOL_UPPER_FIRST = 25, - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UColAttributeValue value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UCOL_ATTRIBUTE_VALUE_COUNT -#endif /* U_HIDE_DEPRECATED_API */ -} UColAttributeValue; - -/** - * Enum containing the codes for reordering segments of the collation table that are not script - * codes. These reordering codes are to be used in conjunction with the script codes. - * @see ucol_getReorderCodes - * @see ucol_setReorderCodes - * @see ucol_getEquivalentReorderCodes - * @see UScriptCode - * @stable ICU 4.8 - */ - typedef enum { - /** - * A special reordering code that is used to specify the default - * reordering codes for a locale. - * @stable ICU 4.8 - */ - UCOL_REORDER_CODE_DEFAULT = -1, - /** - * A special reordering code that is used to specify no reordering codes. - * @stable ICU 4.8 - */ - UCOL_REORDER_CODE_NONE = USCRIPT_UNKNOWN, - /** - * A special reordering code that is used to specify all other codes used for - * reordering except for the codes lised as UColReorderCode values and those - * listed explicitly in a reordering. - * @stable ICU 4.8 - */ - UCOL_REORDER_CODE_OTHERS = USCRIPT_UNKNOWN, - /** - * Characters with the space property. - * This is equivalent to the rule value "space". - * @stable ICU 4.8 - */ - UCOL_REORDER_CODE_SPACE = 0x1000, - /** - * The first entry in the enumeration of reordering groups. This is intended for use in - * range checking and enumeration of the reorder codes. - * @stable ICU 4.8 - */ - UCOL_REORDER_CODE_FIRST = UCOL_REORDER_CODE_SPACE, - /** - * Characters with the punctuation property. - * This is equivalent to the rule value "punct". - * @stable ICU 4.8 - */ - UCOL_REORDER_CODE_PUNCTUATION = 0x1001, - /** - * Characters with the symbol property. - * This is equivalent to the rule value "symbol". - * @stable ICU 4.8 - */ - UCOL_REORDER_CODE_SYMBOL = 0x1002, - /** - * Characters with the currency property. - * This is equivalent to the rule value "currency". - * @stable ICU 4.8 - */ - UCOL_REORDER_CODE_CURRENCY = 0x1003, - /** - * Characters with the digit property. - * This is equivalent to the rule value "digit". - * @stable ICU 4.8 - */ - UCOL_REORDER_CODE_DIGIT = 0x1004, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UColReorderCode value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UCOL_REORDER_CODE_LIMIT = 0x1005 -#endif /* U_HIDE_DEPRECATED_API */ -} UColReorderCode; - -/** - * Base letter represents a primary difference. Set comparison - * level to UCOL_PRIMARY to ignore secondary and tertiary differences. - * Use this to set the strength of a Collator object. - * Example of primary difference, "abc" < "abd" - * - * Diacritical differences on the same base letter represent a secondary - * difference. Set comparison level to UCOL_SECONDARY to ignore tertiary - * differences. Use this to set the strength of a Collator object. - * Example of secondary difference, "ä" >> "a". - * - * Uppercase and lowercase versions of the same character represents a - * tertiary difference. Set comparison level to UCOL_TERTIARY to include - * all comparison differences. Use this to set the strength of a Collator - * object. - * Example of tertiary difference, "abc" <<< "ABC". - * - * Two characters are considered "identical" when they have the same - * unicode spellings. UCOL_IDENTICAL. - * For example, "ä" == "ä". - * - * UCollationStrength is also used to determine the strength of sort keys - * generated from UCollator objects - * These values can be now found in the UColAttributeValue enum. - * @stable ICU 2.0 - **/ -typedef UColAttributeValue UCollationStrength; - -/** Attributes that collation service understands. All the attributes can take UCOL_DEFAULT - * value, as well as the values specific to each one. - * @stable ICU 2.0 - */ -typedef enum { - /** Attribute for direction of secondary weights - used in Canadian French. - * Acceptable values are UCOL_ON, which results in secondary weights - * being considered backwards and UCOL_OFF which treats secondary - * weights in the order they appear. - * @stable ICU 2.0 - */ - UCOL_FRENCH_COLLATION, - /** Attribute for handling variable elements. - * Acceptable values are UCOL_NON_IGNORABLE (default) - * which treats all the codepoints with non-ignorable - * primary weights in the same way, - * and UCOL_SHIFTED which causes codepoints with primary - * weights that are equal or below the variable top value - * to be ignored on primary level and moved to the quaternary - * level. - * @stable ICU 2.0 - */ - UCOL_ALTERNATE_HANDLING, - /** Controls the ordering of upper and lower case letters. - * Acceptable values are UCOL_OFF (default), which orders - * upper and lower case letters in accordance to their tertiary - * weights, UCOL_UPPER_FIRST which forces upper case letters to - * sort before lower case letters, and UCOL_LOWER_FIRST which does - * the opposite. - * @stable ICU 2.0 - */ - UCOL_CASE_FIRST, - /** Controls whether an extra case level (positioned before the third - * level) is generated or not. Acceptable values are UCOL_OFF (default), - * when case level is not generated, and UCOL_ON which causes the case - * level to be generated. Contents of the case level are affected by - * the value of UCOL_CASE_FIRST attribute. A simple way to ignore - * accent differences in a string is to set the strength to UCOL_PRIMARY - * and enable case level. - * @stable ICU 2.0 - */ - UCOL_CASE_LEVEL, - /** Controls whether the normalization check and necessary normalizations - * are performed. When set to UCOL_OFF (default) no normalization check - * is performed. The correctness of the result is guaranteed only if the - * input data is in so-called FCD form (see users manual for more info). - * When set to UCOL_ON, an incremental check is performed to see whether - * the input data is in the FCD form. If the data is not in the FCD form, - * incremental NFD normalization is performed. - * @stable ICU 2.0 - */ - UCOL_NORMALIZATION_MODE, - /** An alias for UCOL_NORMALIZATION_MODE attribute. - * @stable ICU 2.0 - */ - UCOL_DECOMPOSITION_MODE = UCOL_NORMALIZATION_MODE, - /** The strength attribute. Can be either UCOL_PRIMARY, UCOL_SECONDARY, - * UCOL_TERTIARY, UCOL_QUATERNARY or UCOL_IDENTICAL. The usual strength - * for most locales (except Japanese) is tertiary. - * - * Quaternary strength - * is useful when combined with shifted setting for alternate handling - * attribute and for JIS X 4061 collation, when it is used to distinguish - * between Katakana and Hiragana. - * Otherwise, quaternary level - * is affected only by the number of non-ignorable code points in - * the string. - * - * Identical strength is rarely useful, as it amounts - * to codepoints of the NFD form of the string. - * @stable ICU 2.0 - */ - UCOL_STRENGTH, -#ifndef U_HIDE_DEPRECATED_API - /** When turned on, this attribute positions Hiragana before all - * non-ignorables on quaternary level This is a sneaky way to produce JIS - * sort order. - * - * This attribute was an implementation detail of the CLDR Japanese tailoring. - * Since ICU 50, this attribute is not settable any more via API functions. - * Since CLDR 25/ICU 53, explicit quaternary relations are used - * to achieve the same Japanese sort order. - * - * @deprecated ICU 50 Implementation detail, cannot be set via API, was removed from implementation. - */ - UCOL_HIRAGANA_QUATERNARY_MODE = UCOL_STRENGTH + 1, -#endif /* U_HIDE_DEPRECATED_API */ - /** - * When turned on, this attribute makes - * substrings of digits sort according to their numeric values. - * - * This is a way to get '100' to sort AFTER '2'. Note that the longest - * digit substring that can be treated as a single unit is - * 254 digits (not counting leading zeros). If a digit substring is - * longer than that, the digits beyond the limit will be treated as a - * separate digit substring. - * - * A "digit" in this sense is a code point with General_Category=Nd, - * which does not include circled numbers, roman numerals, etc. - * Only a contiguous digit substring is considered, that is, - * non-negative integers without separators. - * There is no support for plus/minus signs, decimals, exponents, etc. - * - * @stable ICU 2.8 - */ - UCOL_NUMERIC_COLLATION = UCOL_STRENGTH + 2, - - /* Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API, - * it is needed for layout of RuleBasedCollator object. */ - /** - * One more than the highest normal UColAttribute value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UCOL_ATTRIBUTE_COUNT -} UColAttribute; - -/** Options for retrieving the rule string - * @stable ICU 2.0 - */ -typedef enum { - /** - * Retrieves the tailoring rules only. - * Same as calling the version of getRules() without UColRuleOption. - * @stable ICU 2.0 - */ - UCOL_TAILORING_ONLY, - /** - * Retrieves the "UCA rules" concatenated with the tailoring rules. - * The "UCA rules" are an approximation of the root collator's sort order. - * They are almost never used or useful at runtime and can be removed from the data. - * See http://userguide.icu-project.org/collation/customization#TOC-Building-on-Existing-Locales - * @stable ICU 2.0 - */ - UCOL_FULL_RULES -} UColRuleOption ; - -/** - * Open a UCollator for comparing strings. - * - * For some languages, multiple collation types are available; - * for example, "de@collation=phonebook". - * Starting with ICU 54, collation attributes can be specified via locale keywords as well, - * in the old locale extension syntax ("el@colCaseFirst=upper") - * or in language tag syntax ("el-u-kf-upper"). - * See User Guide: Collation API. - * - * The UCollator pointer is used in all the calls to the Collation - * service. After finished, collator must be disposed of by calling - * {@link #ucol_close }. - * @param loc The locale containing the required collation rules. - * Special values for locales can be passed in - - * if NULL is passed for the locale, the default locale - * collation rules will be used. If empty string ("") or - * "root" are passed, the root collator will be returned. - * @param status A pointer to a UErrorCode to receive any errors - * @return A pointer to a UCollator, or 0 if an error occurred. - * @see ucol_openRules - * @see ucol_safeClone - * @see ucol_close - * @stable ICU 2.0 - */ -U_STABLE UCollator* U_EXPORT2 -ucol_open(const char *loc, UErrorCode *status); - -/** - * Produce a UCollator instance according to the rules supplied. - * The rules are used to change the default ordering, defined in the - * UCA in a process called tailoring. The resulting UCollator pointer - * can be used in the same way as the one obtained by {@link #ucol_strcoll }. - * @param rules A string describing the collation rules. For the syntax - * of the rules please see users guide. - * @param rulesLength The length of rules, or -1 if null-terminated. - * @param normalizationMode The normalization mode: One of - * UCOL_OFF (expect the text to not need normalization), - * UCOL_ON (normalize), or - * UCOL_DEFAULT (set the mode according to the rules) - * @param strength The default collation strength; one of UCOL_PRIMARY, UCOL_SECONDARY, - * UCOL_TERTIARY, UCOL_IDENTICAL,UCOL_DEFAULT_STRENGTH - can be also set in the rules. - * @param parseError A pointer to UParseError to recieve information about errors - * occurred during parsing. This argument can currently be set - * to NULL, but at users own risk. Please provide a real structure. - * @param status A pointer to a UErrorCode to receive any errors - * @return A pointer to a UCollator. It is not guaranteed that NULL be returned in case - * of error - please use status argument to check for errors. - * @see ucol_open - * @see ucol_safeClone - * @see ucol_close - * @stable ICU 2.0 - */ -U_STABLE UCollator* U_EXPORT2 -ucol_openRules( const UChar *rules, - int32_t rulesLength, - UColAttributeValue normalizationMode, - UCollationStrength strength, - UParseError *parseError, - UErrorCode *status); - -#ifndef U_HIDE_DEPRECATED_API -/** - * Open a collator defined by a short form string. - * The structure and the syntax of the string is defined in the "Naming collators" - * section of the users guide: - * http://userguide.icu-project.org/collation/concepts#TOC-Collator-naming-scheme - * Attributes are overriden by the subsequent attributes. So, for "S2_S3", final - * strength will be 3. 3066bis locale overrides individual locale parts. - * The call to this function is equivalent to a call to ucol_open, followed by a - * series of calls to ucol_setAttribute and ucol_setVariableTop. - * @param definition A short string containing a locale and a set of attributes. - * Attributes not explicitly mentioned are left at the default - * state for a locale. - * @param parseError if not NULL, structure that will get filled with error's pre - * and post context in case of error. - * @param forceDefaults if FALSE, the settings that are the same as the collator - * default settings will not be applied (for example, setting - * French secondary on a French collator would not be executed). - * If TRUE, all the settings will be applied regardless of the - * collator default value. If the definition - * strings are to be cached, should be set to FALSE. - * @param status Error code. Apart from regular error conditions connected to - * instantiating collators (like out of memory or similar), this - * API will return an error if an invalid attribute or attribute/value - * combination is specified. - * @return A pointer to a UCollator or 0 if an error occured (including an - * invalid attribute). - * @see ucol_open - * @see ucol_setAttribute - * @see ucol_setVariableTop - * @see ucol_getShortDefinitionString - * @see ucol_normalizeShortDefinitionString - * @deprecated ICU 54 Use ucol_open() with language tag collation keywords instead. - */ -U_DEPRECATED UCollator* U_EXPORT2 -ucol_openFromShortString( const char *definition, - UBool forceDefaults, - UParseError *parseError, - UErrorCode *status); -#endif /* U_HIDE_DEPRECATED_API */ - -#ifndef U_HIDE_DEPRECATED_API -/** - * Get a set containing the contractions defined by the collator. The set includes - * both the root collator's contractions and the contractions defined by the collator. This set - * will contain only strings. If a tailoring explicitly suppresses contractions from - * the root collator (like Russian), removed contractions will not be in the resulting set. - * @param coll collator - * @param conts the set to hold the result. It gets emptied before - * contractions are added. - * @param status to hold the error code - * @return the size of the contraction set - * - * @deprecated ICU 3.4, use ucol_getContractionsAndExpansions instead - */ -U_DEPRECATED int32_t U_EXPORT2 -ucol_getContractions( const UCollator *coll, - USet *conts, - UErrorCode *status); -#endif /* U_HIDE_DEPRECATED_API */ - -/** - * Get a set containing the expansions defined by the collator. The set includes - * both the root collator's expansions and the expansions defined by the tailoring - * @param coll collator - * @param contractions if not NULL, the set to hold the contractions - * @param expansions if not NULL, the set to hold the expansions - * @param addPrefixes add the prefix contextual elements to contractions - * @param status to hold the error code - * - * @stable ICU 3.4 - */ -U_STABLE void U_EXPORT2 -ucol_getContractionsAndExpansions( const UCollator *coll, - USet *contractions, USet *expansions, - UBool addPrefixes, UErrorCode *status); - -/** - * Close a UCollator. - * Once closed, a UCollator should not be used. Every open collator should - * be closed. Otherwise, a memory leak will result. - * @param coll The UCollator to close. - * @see ucol_open - * @see ucol_openRules - * @see ucol_safeClone - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucol_close(UCollator *coll); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUCollatorPointer - * "Smart pointer" class, closes a UCollator via ucol_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUCollatorPointer, UCollator, ucol_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Compare two strings. - * The strings will be compared using the options already specified. - * @param coll The UCollator containing the comparison rules. - * @param source The source string. - * @param sourceLength The length of source, or -1 if null-terminated. - * @param target The target string. - * @param targetLength The length of target, or -1 if null-terminated. - * @return The result of comparing the strings; one of UCOL_EQUAL, - * UCOL_GREATER, UCOL_LESS - * @see ucol_greater - * @see ucol_greaterOrEqual - * @see ucol_equal - * @stable ICU 2.0 - */ -U_STABLE UCollationResult U_EXPORT2 -ucol_strcoll( const UCollator *coll, - const UChar *source, - int32_t sourceLength, - const UChar *target, - int32_t targetLength); - -/** -* Compare two strings in UTF-8. -* The strings will be compared using the options already specified. -* Note: When input string contains malformed a UTF-8 byte sequence, -* this function treats these bytes as REPLACEMENT CHARACTER (U+FFFD). -* @param coll The UCollator containing the comparison rules. -* @param source The source UTF-8 string. -* @param sourceLength The length of source, or -1 if null-terminated. -* @param target The target UTF-8 string. -* @param targetLength The length of target, or -1 if null-terminated. -* @param status A pointer to a UErrorCode to receive any errors -* @return The result of comparing the strings; one of UCOL_EQUAL, -* UCOL_GREATER, UCOL_LESS -* @see ucol_greater -* @see ucol_greaterOrEqual -* @see ucol_equal -* @stable ICU 50 -*/ -U_STABLE UCollationResult U_EXPORT2 -ucol_strcollUTF8( - const UCollator *coll, - const char *source, - int32_t sourceLength, - const char *target, - int32_t targetLength, - UErrorCode *status); - -/** - * Determine if one string is greater than another. - * This function is equivalent to {@link #ucol_strcoll } == UCOL_GREATER - * @param coll The UCollator containing the comparison rules. - * @param source The source string. - * @param sourceLength The length of source, or -1 if null-terminated. - * @param target The target string. - * @param targetLength The length of target, or -1 if null-terminated. - * @return TRUE if source is greater than target, FALSE otherwise. - * @see ucol_strcoll - * @see ucol_greaterOrEqual - * @see ucol_equal - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -ucol_greater(const UCollator *coll, - const UChar *source, int32_t sourceLength, - const UChar *target, int32_t targetLength); - -/** - * Determine if one string is greater than or equal to another. - * This function is equivalent to {@link #ucol_strcoll } != UCOL_LESS - * @param coll The UCollator containing the comparison rules. - * @param source The source string. - * @param sourceLength The length of source, or -1 if null-terminated. - * @param target The target string. - * @param targetLength The length of target, or -1 if null-terminated. - * @return TRUE if source is greater than or equal to target, FALSE otherwise. - * @see ucol_strcoll - * @see ucol_greater - * @see ucol_equal - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -ucol_greaterOrEqual(const UCollator *coll, - const UChar *source, int32_t sourceLength, - const UChar *target, int32_t targetLength); - -/** - * Compare two strings for equality. - * This function is equivalent to {@link #ucol_strcoll } == UCOL_EQUAL - * @param coll The UCollator containing the comparison rules. - * @param source The source string. - * @param sourceLength The length of source, or -1 if null-terminated. - * @param target The target string. - * @param targetLength The length of target, or -1 if null-terminated. - * @return TRUE if source is equal to target, FALSE otherwise - * @see ucol_strcoll - * @see ucol_greater - * @see ucol_greaterOrEqual - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -ucol_equal(const UCollator *coll, - const UChar *source, int32_t sourceLength, - const UChar *target, int32_t targetLength); - -/** - * Compare two UTF-8 encoded trings. - * The strings will be compared using the options already specified. - * @param coll The UCollator containing the comparison rules. - * @param sIter The source string iterator. - * @param tIter The target string iterator. - * @return The result of comparing the strings; one of UCOL_EQUAL, - * UCOL_GREATER, UCOL_LESS - * @param status A pointer to a UErrorCode to receive any errors - * @see ucol_strcoll - * @stable ICU 2.6 - */ -U_STABLE UCollationResult U_EXPORT2 -ucol_strcollIter( const UCollator *coll, - UCharIterator *sIter, - UCharIterator *tIter, - UErrorCode *status); - -/** - * Get the collation strength used in a UCollator. - * The strength influences how strings are compared. - * @param coll The UCollator to query. - * @return The collation strength; one of UCOL_PRIMARY, UCOL_SECONDARY, - * UCOL_TERTIARY, UCOL_QUATERNARY, UCOL_IDENTICAL - * @see ucol_setStrength - * @stable ICU 2.0 - */ -U_STABLE UCollationStrength U_EXPORT2 -ucol_getStrength(const UCollator *coll); - -/** - * Set the collation strength used in a UCollator. - * The strength influences how strings are compared. - * @param coll The UCollator to set. - * @param strength The desired collation strength; one of UCOL_PRIMARY, - * UCOL_SECONDARY, UCOL_TERTIARY, UCOL_QUATERNARY, UCOL_IDENTICAL, UCOL_DEFAULT - * @see ucol_getStrength - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucol_setStrength(UCollator *coll, - UCollationStrength strength); - -/** - * Retrieves the reordering codes for this collator. - * These reordering codes are a combination of UScript codes and UColReorderCode entries. - * @param coll The UCollator to query. - * @param dest The array to fill with the script ordering. - * @param destCapacity The length of dest. If it is 0, then dest may be NULL and the function - * will only return the length of the result without writing any codes (pre-flighting). - * @param pErrorCode Must be a valid pointer to an error code value, which must not indicate a - * failure before the function call. - * @return The number of reordering codes written to the dest array. - * @see ucol_setReorderCodes - * @see ucol_getEquivalentReorderCodes - * @see UScriptCode - * @see UColReorderCode - * @stable ICU 4.8 - */ -U_STABLE int32_t U_EXPORT2 -ucol_getReorderCodes(const UCollator* coll, - int32_t* dest, - int32_t destCapacity, - UErrorCode *pErrorCode); -/** - * Sets the reordering codes for this collator. - * Collation reordering allows scripts and some other groups of characters - * to be moved relative to each other. This reordering is done on top of - * the DUCET/CLDR standard collation order. Reordering can specify groups to be placed - * at the start and/or the end of the collation order. These groups are specified using - * UScript codes and UColReorderCode entries. - * - *

By default, reordering codes specified for the start of the order are placed in the - * order given after several special non-script blocks. These special groups of characters - * are space, punctuation, symbol, currency, and digit. These special groups are represented with - * UColReorderCode entries. Script groups can be intermingled with - * these special non-script groups if those special groups are explicitly specified in the reordering. - * - *

The special code OTHERS stands for any script that is not explicitly - * mentioned in the list of reordering codes given. Anything that is after OTHERS - * will go at the very end of the reordering in the order given. - * - *

The special reorder code DEFAULT will reset the reordering for this collator - * to the default for this collator. The default reordering may be the DUCET/CLDR order or may be a reordering that - * was specified when this collator was created from resource data or from rules. The - * DEFAULT code must be the sole code supplied when it is used. - * If not, then U_ILLEGAL_ARGUMENT_ERROR will be set. - * - *

The special reorder code NONE will remove any reordering for this collator. - * The result of setting no reordering will be to have the DUCET/CLDR ordering used. The - * NONE code must be the sole code supplied when it is used. - * - * @param coll The UCollator to set. - * @param reorderCodes An array of script codes in the new order. This can be NULL if the - * length is also set to 0. An empty array will clear any reordering codes on the collator. - * @param reorderCodesLength The length of reorderCodes. - * @param pErrorCode Must be a valid pointer to an error code value, which must not indicate a - * failure before the function call. - * @see ucol_getReorderCodes - * @see ucol_getEquivalentReorderCodes - * @see UScriptCode - * @see UColReorderCode - * @stable ICU 4.8 - */ -U_STABLE void U_EXPORT2 -ucol_setReorderCodes(UCollator* coll, - const int32_t* reorderCodes, - int32_t reorderCodesLength, - UErrorCode *pErrorCode); - -/** - * Retrieves the reorder codes that are grouped with the given reorder code. Some reorder - * codes will be grouped and must reorder together. - * Beginning with ICU 55, scripts only reorder together if they are primary-equal, - * for example Hiragana and Katakana. - * - * @param reorderCode The reorder code to determine equivalence for. - * @param dest The array to fill with the script ordering. - * @param destCapacity The length of dest. If it is 0, then dest may be NULL and the function - * will only return the length of the result without writing any codes (pre-flighting). - * @param pErrorCode Must be a valid pointer to an error code value, which must not indicate - * a failure before the function call. - * @return The number of reordering codes written to the dest array. - * @see ucol_setReorderCodes - * @see ucol_getReorderCodes - * @see UScriptCode - * @see UColReorderCode - * @stable ICU 4.8 - */ -U_STABLE int32_t U_EXPORT2 -ucol_getEquivalentReorderCodes(int32_t reorderCode, - int32_t* dest, - int32_t destCapacity, - UErrorCode *pErrorCode); - -/** - * Get the display name for a UCollator. - * The display name is suitable for presentation to a user. - * @param objLoc The locale of the collator in question. - * @param dispLoc The locale for display. - * @param result A pointer to a buffer to receive the attribute. - * @param resultLength The maximum size of result. - * @param status A pointer to a UErrorCode to receive any errors - * @return The total buffer size needed; if greater than resultLength, - * the output was truncated. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucol_getDisplayName( const char *objLoc, - const char *dispLoc, - UChar *result, - int32_t resultLength, - UErrorCode *status); - -/** - * Get a locale for which collation rules are available. - * A UCollator in a locale returned by this function will perform the correct - * collation for the locale. - * @param localeIndex The index of the desired locale. - * @return A locale for which collation rules are available, or 0 if none. - * @see ucol_countAvailable - * @stable ICU 2.0 - */ -U_STABLE const char* U_EXPORT2 -ucol_getAvailable(int32_t localeIndex); - -/** - * Determine how many locales have collation rules available. - * This function is most useful as determining the loop ending condition for - * calls to {@link #ucol_getAvailable }. - * @return The number of locales for which collation rules are available. - * @see ucol_getAvailable - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucol_countAvailable(void); - -#if !UCONFIG_NO_SERVICE -/** - * Create a string enumerator of all locales for which a valid - * collator may be opened. - * @param status input-output error code - * @return a string enumeration over locale strings. The caller is - * responsible for closing the result. - * @stable ICU 3.0 - */ -U_STABLE UEnumeration* U_EXPORT2 -ucol_openAvailableLocales(UErrorCode *status); -#endif - -/** - * Create a string enumerator of all possible keywords that are relevant to - * collation. At this point, the only recognized keyword for this - * service is "collation". - * @param status input-output error code - * @return a string enumeration over locale strings. The caller is - * responsible for closing the result. - * @stable ICU 3.0 - */ -U_STABLE UEnumeration* U_EXPORT2 -ucol_getKeywords(UErrorCode *status); - -/** - * Given a keyword, create a string enumeration of all values - * for that keyword that are currently in use. - * @param keyword a particular keyword as enumerated by - * ucol_getKeywords. If any other keyword is passed in, *status is set - * to U_ILLEGAL_ARGUMENT_ERROR. - * @param status input-output error code - * @return a string enumeration over collation keyword values, or NULL - * upon error. The caller is responsible for closing the result. - * @stable ICU 3.0 - */ -U_STABLE UEnumeration* U_EXPORT2 -ucol_getKeywordValues(const char *keyword, UErrorCode *status); - -/** - * Given a key and a locale, returns an array of string values in a preferred - * order that would make a difference. These are all and only those values where - * the open (creation) of the service with the locale formed from the input locale - * plus input keyword and that value has different behavior than creation with the - * input locale alone. - * @param key one of the keys supported by this service. For now, only - * "collation" is supported. - * @param locale the locale - * @param commonlyUsed if set to true it will return only commonly used values - * with the given locale in preferred order. Otherwise, - * it will return all the available values for the locale. - * @param status error status - * @return a string enumeration over keyword values for the given key and the locale. - * @stable ICU 4.2 - */ -U_STABLE UEnumeration* U_EXPORT2 -ucol_getKeywordValuesForLocale(const char* key, - const char* locale, - UBool commonlyUsed, - UErrorCode* status); - -/** - * Return the functionally equivalent locale for the specified - * input locale, with respect to given keyword, for the - * collation service. If two different input locale + keyword - * combinations produce the same result locale, then collators - * instantiated for these two different input locales will behave - * equivalently. The converse is not always true; two collators - * may in fact be equivalent, but return different results, due to - * internal details. The return result has no other meaning than - * that stated above, and implies nothing as to the relationship - * between the two locales. This is intended for use by - * applications who wish to cache collators, or otherwise reuse - * collators when possible. The functional equivalent may change - * over time. For more information, please see the - * Locales and Services section of the ICU User Guide. - * @param result fillin for the functionally equivalent result locale - * @param resultCapacity capacity of the fillin buffer - * @param keyword a particular keyword as enumerated by - * ucol_getKeywords. - * @param locale the specified input locale - * @param isAvailable if non-NULL, pointer to a fillin parameter that - * on return indicates whether the specified input locale was 'available' - * to the collation service. A locale is defined as 'available' if it - * physically exists within the collation locale data. - * @param status pointer to input-output error code - * @return the actual buffer size needed for the locale. If greater - * than resultCapacity, the returned full name will be truncated and - * an error code will be returned. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -ucol_getFunctionalEquivalent(char* result, int32_t resultCapacity, - const char* keyword, const char* locale, - UBool* isAvailable, UErrorCode* status); - -/** - * Get the collation tailoring rules from a UCollator. - * The rules will follow the rule syntax. - * @param coll The UCollator to query. - * @param length - * @return The collation tailoring rules. - * @stable ICU 2.0 - */ -U_STABLE const UChar* U_EXPORT2 -ucol_getRules( const UCollator *coll, - int32_t *length); - -#ifndef U_HIDE_DEPRECATED_API -/** Get the short definition string for a collator. This API harvests the collator's - * locale and the attribute set and produces a string that can be used for opening - * a collator with the same attributes using the ucol_openFromShortString API. - * This string will be normalized. - * The structure and the syntax of the string is defined in the "Naming collators" - * section of the users guide: - * http://userguide.icu-project.org/collation/concepts#TOC-Collator-naming-scheme - * This API supports preflighting. - * @param coll a collator - * @param locale a locale that will appear as a collators locale in the resulting - * short string definition. If NULL, the locale will be harvested - * from the collator. - * @param buffer space to hold the resulting string - * @param capacity capacity of the buffer - * @param status for returning errors. All the preflighting errors are featured - * @return length of the resulting string - * @see ucol_openFromShortString - * @see ucol_normalizeShortDefinitionString - * @deprecated ICU 54 - */ -U_DEPRECATED int32_t U_EXPORT2 -ucol_getShortDefinitionString(const UCollator *coll, - const char *locale, - char *buffer, - int32_t capacity, - UErrorCode *status); - -/** Verifies and normalizes short definition string. - * Normalized short definition string has all the option sorted by the argument name, - * so that equivalent definition strings are the same. - * This API supports preflighting. - * @param source definition string - * @param destination space to hold the resulting string - * @param capacity capacity of the buffer - * @param parseError if not NULL, structure that will get filled with error's pre - * and post context in case of error. - * @param status Error code. This API will return an error if an invalid attribute - * or attribute/value combination is specified. All the preflighting - * errors are also featured - * @return length of the resulting normalized string. - * - * @see ucol_openFromShortString - * @see ucol_getShortDefinitionString - * - * @deprecated ICU 54 - */ - -U_DEPRECATED int32_t U_EXPORT2 -ucol_normalizeShortDefinitionString(const char *source, - char *destination, - int32_t capacity, - UParseError *parseError, - UErrorCode *status); -#endif /* U_HIDE_DEPRECATED_API */ - - -/** - * Get a sort key for a string from a UCollator. - * Sort keys may be compared using strcmp. - * - * Note that sort keys are often less efficient than simply doing comparison. - * For more details, see the ICU User Guide. - * - * Like ICU functions that write to an output buffer, the buffer contents - * is undefined if the buffer capacity (resultLength parameter) is too small. - * Unlike ICU functions that write a string to an output buffer, - * the terminating zero byte is counted in the sort key length. - * @param coll The UCollator containing the collation rules. - * @param source The string to transform. - * @param sourceLength The length of source, or -1 if null-terminated. - * @param result A pointer to a buffer to receive the attribute. - * @param resultLength The maximum size of result. - * @return The size needed to fully store the sort key. - * If there was an internal error generating the sort key, - * a zero value is returned. - * @see ucol_keyHashCode - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucol_getSortKey(const UCollator *coll, - const UChar *source, - int32_t sourceLength, - uint8_t *result, - int32_t resultLength); - - -/** Gets the next count bytes of a sort key. Caller needs - * to preserve state array between calls and to provide - * the same type of UCharIterator set with the same string. - * The destination buffer provided must be big enough to store - * the number of requested bytes. - * - * The generated sort key may or may not be compatible with - * sort keys generated using ucol_getSortKey(). - * @param coll The UCollator containing the collation rules. - * @param iter UCharIterator containing the string we need - * the sort key to be calculated for. - * @param state Opaque state of sortkey iteration. - * @param dest Buffer to hold the resulting sortkey part - * @param count number of sort key bytes required. - * @param status error code indicator. - * @return the actual number of bytes of a sortkey. It can be - * smaller than count if we have reached the end of - * the sort key. - * @stable ICU 2.6 - */ -U_STABLE int32_t U_EXPORT2 -ucol_nextSortKeyPart(const UCollator *coll, - UCharIterator *iter, - uint32_t state[2], - uint8_t *dest, int32_t count, - UErrorCode *status); - -/** enum that is taken by ucol_getBound API - * See below for explanation - * do not change the values assigned to the - * members of this enum. Underlying code - * depends on them having these numbers - * @stable ICU 2.0 - */ -typedef enum { - /** lower bound */ - UCOL_BOUND_LOWER = 0, - /** upper bound that will match strings of exact size */ - UCOL_BOUND_UPPER = 1, - /** upper bound that will match all the strings that have the same initial substring as the given string */ - UCOL_BOUND_UPPER_LONG = 2, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UColBoundMode value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UCOL_BOUND_VALUE_COUNT -#endif /* U_HIDE_DEPRECATED_API */ -} UColBoundMode; - -/** - * Produce a bound for a given sortkey and a number of levels. - * Return value is always the number of bytes needed, regardless of - * whether the result buffer was big enough or even valid.
- * Resulting bounds can be used to produce a range of strings that are - * between upper and lower bounds. For example, if bounds are produced - * for a sortkey of string "smith", strings between upper and lower - * bounds with one level would include "Smith", "SMITH", "sMiTh".
- * There are two upper bounds that can be produced. If UCOL_BOUND_UPPER - * is produced, strings matched would be as above. However, if bound - * produced using UCOL_BOUND_UPPER_LONG is used, the above example will - * also match "Smithsonian" and similar.
- * For more on usage, see example in cintltst/capitst.c in procedure - * TestBounds. - * Sort keys may be compared using strcmp. - * @param source The source sortkey. - * @param sourceLength The length of source, or -1 if null-terminated. - * (If an unmodified sortkey is passed, it is always null - * terminated). - * @param boundType Type of bound required. It can be UCOL_BOUND_LOWER, which - * produces a lower inclusive bound, UCOL_BOUND_UPPER, that - * produces upper bound that matches strings of the same length - * or UCOL_BOUND_UPPER_LONG that matches strings that have the - * same starting substring as the source string. - * @param noOfLevels Number of levels required in the resulting bound (for most - * uses, the recommended value is 1). See users guide for - * explanation on number of levels a sortkey can have. - * @param result A pointer to a buffer to receive the resulting sortkey. - * @param resultLength The maximum size of result. - * @param status Used for returning error code if something went wrong. If the - * number of levels requested is higher than the number of levels - * in the source key, a warning (U_SORT_KEY_TOO_SHORT_WARNING) is - * issued. - * @return The size needed to fully store the bound. - * @see ucol_keyHashCode - * @stable ICU 2.1 - */ -U_STABLE int32_t U_EXPORT2 -ucol_getBound(const uint8_t *source, - int32_t sourceLength, - UColBoundMode boundType, - uint32_t noOfLevels, - uint8_t *result, - int32_t resultLength, - UErrorCode *status); - -/** - * Gets the version information for a Collator. Version is currently - * an opaque 32-bit number which depends, among other things, on major - * versions of the collator tailoring and UCA. - * @param coll The UCollator to query. - * @param info the version # information, the result will be filled in - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucol_getVersion(const UCollator* coll, UVersionInfo info); - -/** - * Gets the UCA version information for a Collator. Version is the - * UCA version number (3.1.1, 4.0). - * @param coll The UCollator to query. - * @param info the version # information, the result will be filled in - * @stable ICU 2.8 - */ -U_STABLE void U_EXPORT2 -ucol_getUCAVersion(const UCollator* coll, UVersionInfo info); - -/** - * Merges two sort keys. The levels are merged with their corresponding counterparts - * (primaries with primaries, secondaries with secondaries etc.). Between the values - * from the same level a separator is inserted. - * - * This is useful, for example, for combining sort keys from first and last names - * to sort such pairs. - * See http://www.unicode.org/reports/tr10/#Merging_Sort_Keys - * - * The recommended way to achieve "merged" sorting is by - * concatenating strings with U+FFFE between them. - * The concatenation has the same sort order as the merged sort keys, - * but merge(getSortKey(str1), getSortKey(str2)) may differ from getSortKey(str1 + '\\uFFFE' + str2). - * Using strings with U+FFFE may yield shorter sort keys. - * - * For details about Sort Key Features see - * http://userguide.icu-project.org/collation/api#TOC-Sort-Key-Features - * - * It is possible to merge multiple sort keys by consecutively merging - * another one with the intermediate result. - * - * The length of the merge result is the sum of the lengths of the input sort keys. - * - * Example (uncompressed): - *

191B1D 01 050505 01 910505 00
- * 1F2123 01 050505 01 910505 00
- * will be merged as - *
191B1D 02 1F2123 01 050505 02 050505 01 910505 02 910505 00
- * - * If the destination buffer is not big enough, then its contents are undefined. - * If any of source lengths are zero or any of the source pointers are NULL/undefined, - * the result is of size zero. - * - * @param src1 the first sort key - * @param src1Length the length of the first sort key, including the zero byte at the end; - * can be -1 if the function is to find the length - * @param src2 the second sort key - * @param src2Length the length of the second sort key, including the zero byte at the end; - * can be -1 if the function is to find the length - * @param dest the buffer where the merged sort key is written, - * can be NULL if destCapacity==0 - * @param destCapacity the number of bytes in the dest buffer - * @return the length of the merged sort key, src1Length+src2Length; - * can be larger than destCapacity, or 0 if an error occurs (only for illegal arguments), - * in which cases the contents of dest is undefined - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucol_mergeSortkeys(const uint8_t *src1, int32_t src1Length, - const uint8_t *src2, int32_t src2Length, - uint8_t *dest, int32_t destCapacity); - -/** - * Universal attribute setter - * @param coll collator which attributes are to be changed - * @param attr attribute type - * @param value attribute value - * @param status to indicate whether the operation went on smoothly or there were errors - * @see UColAttribute - * @see UColAttributeValue - * @see ucol_getAttribute - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucol_setAttribute(UCollator *coll, UColAttribute attr, UColAttributeValue value, UErrorCode *status); - -/** - * Universal attribute getter - * @param coll collator which attributes are to be changed - * @param attr attribute type - * @return attribute value - * @param status to indicate whether the operation went on smoothly or there were errors - * @see UColAttribute - * @see UColAttributeValue - * @see ucol_setAttribute - * @stable ICU 2.0 - */ -U_STABLE UColAttributeValue U_EXPORT2 -ucol_getAttribute(const UCollator *coll, UColAttribute attr, UErrorCode *status); - -/** - * Sets the variable top to the top of the specified reordering group. - * The variable top determines the highest-sorting character - * which is affected by UCOL_ALTERNATE_HANDLING. - * If that attribute is set to UCOL_NON_IGNORABLE, then the variable top has no effect. - * @param coll the collator - * @param group one of UCOL_REORDER_CODE_SPACE, UCOL_REORDER_CODE_PUNCTUATION, - * UCOL_REORDER_CODE_SYMBOL, UCOL_REORDER_CODE_CURRENCY; - * or UCOL_REORDER_CODE_DEFAULT to restore the default max variable group - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @see ucol_getMaxVariable - * @stable ICU 53 - */ -U_STABLE void U_EXPORT2 -ucol_setMaxVariable(UCollator *coll, UColReorderCode group, UErrorCode *pErrorCode); - -/** - * Returns the maximum reordering group whose characters are affected by UCOL_ALTERNATE_HANDLING. - * @param coll the collator - * @return the maximum variable reordering group. - * @see ucol_setMaxVariable - * @stable ICU 53 - */ -U_STABLE UColReorderCode U_EXPORT2 -ucol_getMaxVariable(const UCollator *coll); - -#ifndef U_HIDE_DEPRECATED_API -/** - * Sets the variable top to the primary weight of the specified string. - * - * Beginning with ICU 53, the variable top is pinned to - * the top of one of the supported reordering groups, - * and it must not be beyond the last of those groups. - * See ucol_setMaxVariable(). - * @param coll the collator - * @param varTop one or more (if contraction) UChars to which the variable top should be set - * @param len length of variable top string. If -1 it is considered to be zero terminated. - * @param status error code. If error code is set, the return value is undefined. - * Errors set by this function are:
- * U_CE_NOT_FOUND_ERROR if more than one character was passed and there is no such contraction
- * U_ILLEGAL_ARGUMENT_ERROR if the variable top is beyond - * the last reordering group supported by ucol_setMaxVariable() - * @return variable top primary weight - * @see ucol_getVariableTop - * @see ucol_restoreVariableTop - * @deprecated ICU 53 Call ucol_setMaxVariable() instead. - */ -U_DEPRECATED uint32_t U_EXPORT2 -ucol_setVariableTop(UCollator *coll, - const UChar *varTop, int32_t len, - UErrorCode *status); -#endif /* U_HIDE_DEPRECATED_API */ - -/** - * Gets the variable top value of a Collator. - * @param coll collator which variable top needs to be retrieved - * @param status error code (not changed by function). If error code is set, - * the return value is undefined. - * @return the variable top primary weight - * @see ucol_getMaxVariable - * @see ucol_setVariableTop - * @see ucol_restoreVariableTop - * @stable ICU 2.0 - */ -U_STABLE uint32_t U_EXPORT2 ucol_getVariableTop(const UCollator *coll, UErrorCode *status); - -#ifndef U_HIDE_DEPRECATED_API -/** - * Sets the variable top to the specified primary weight. - * - * Beginning with ICU 53, the variable top is pinned to - * the top of one of the supported reordering groups, - * and it must not be beyond the last of those groups. - * See ucol_setMaxVariable(). - * @param coll collator to be set - * @param varTop primary weight, as returned by ucol_setVariableTop or ucol_getVariableTop - * @param status error code - * @see ucol_getVariableTop - * @see ucol_setVariableTop - * @deprecated ICU 53 Call ucol_setMaxVariable() instead. - */ -U_DEPRECATED void U_EXPORT2 -ucol_restoreVariableTop(UCollator *coll, const uint32_t varTop, UErrorCode *status); -#endif /* U_HIDE_DEPRECATED_API */ - -/** - * Thread safe cloning operation. The result is a clone of a given collator. - * @param coll collator to be cloned - * @param stackBuffer Deprecated functionality as of ICU 52, use NULL.
- * user allocated space for the new clone. - * If NULL new memory will be allocated. - * If buffer is not large enough, new memory will be allocated. - * Clients can use the U_COL_SAFECLONE_BUFFERSIZE. - * @param pBufferSize Deprecated functionality as of ICU 52, use NULL or 1.
- * pointer to size of allocated space. - * If *pBufferSize == 0, a sufficient size for use in cloning will - * be returned ('pre-flighting') - * If *pBufferSize is not enough for a stack-based safe clone, - * new memory will be allocated. - * @param status to indicate whether the operation went on smoothly or there were errors - * An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used if any - * allocations were necessary. - * @return pointer to the new clone - * @see ucol_open - * @see ucol_openRules - * @see ucol_close - * @stable ICU 2.0 - */ -U_STABLE UCollator* U_EXPORT2 -ucol_safeClone(const UCollator *coll, - void *stackBuffer, - int32_t *pBufferSize, - UErrorCode *status); - -#ifndef U_HIDE_DEPRECATED_API - -/** default memory size for the new clone. - * @deprecated ICU 52. Do not rely on ucol_safeClone() cloning into any provided buffer. - */ -#define U_COL_SAFECLONE_BUFFERSIZE 1 - -#endif /* U_HIDE_DEPRECATED_API */ - -/** - * Returns current rules. Delta defines whether full rules are returned or just the tailoring. - * Returns number of UChars needed to store rules. If buffer is NULL or bufferLen is not enough - * to store rules, will store up to available space. - * - * ucol_getRules() should normally be used instead. - * See http://userguide.icu-project.org/collation/customization#TOC-Building-on-Existing-Locales - * @param coll collator to get the rules from - * @param delta one of UCOL_TAILORING_ONLY, UCOL_FULL_RULES. - * @param buffer buffer to store the result in. If NULL, you'll get no rules. - * @param bufferLen length of buffer to store rules in. If less than needed you'll get only the part that fits in. - * @return current rules - * @stable ICU 2.0 - * @see UCOL_FULL_RULES - */ -U_STABLE int32_t U_EXPORT2 -ucol_getRulesEx(const UCollator *coll, UColRuleOption delta, UChar *buffer, int32_t bufferLen); - -#ifndef U_HIDE_DEPRECATED_API -/** - * gets the locale name of the collator. If the collator - * is instantiated from the rules, then this function returns - * NULL. - * @param coll The UCollator for which the locale is needed - * @param type You can choose between requested, valid and actual - * locale. For description see the definition of - * ULocDataLocaleType in uloc.h - * @param status error code of the operation - * @return real locale name from which the collation data comes. - * If the collator was instantiated from rules, returns - * NULL. - * @deprecated ICU 2.8 Use ucol_getLocaleByType instead - */ -U_DEPRECATED const char * U_EXPORT2 -ucol_getLocale(const UCollator *coll, ULocDataLocaleType type, UErrorCode *status); -#endif /* U_HIDE_DEPRECATED_API */ - -/** - * gets the locale name of the collator. If the collator - * is instantiated from the rules, then this function returns - * NULL. - * @param coll The UCollator for which the locale is needed - * @param type You can choose between requested, valid and actual - * locale. For description see the definition of - * ULocDataLocaleType in uloc.h - * @param status error code of the operation - * @return real locale name from which the collation data comes. - * If the collator was instantiated from rules, returns - * NULL. - * @stable ICU 2.8 - */ -U_STABLE const char * U_EXPORT2 -ucol_getLocaleByType(const UCollator *coll, ULocDataLocaleType type, UErrorCode *status); - -/** - * Get a Unicode set that contains all the characters and sequences tailored in - * this collator. The result must be disposed of by using uset_close. - * @param coll The UCollator for which we want to get tailored chars - * @param status error code of the operation - * @return a pointer to newly created USet. Must be be disposed by using uset_close - * @see ucol_openRules - * @see uset_close - * @stable ICU 2.4 - */ -U_STABLE USet * U_EXPORT2 -ucol_getTailoredSet(const UCollator *coll, UErrorCode *status); - -#ifndef U_HIDE_INTERNAL_API -/** Calculates the set of unsafe code points, given a collator. - * A character is unsafe if you could append any character and cause the ordering to alter significantly. - * Collation sorts in normalized order, so anything that rearranges in normalization can cause this. - * Thus if you have a character like a_umlaut, and you add a lower_dot to it, - * then it normalizes to a_lower_dot + umlaut, and sorts differently. - * @param coll Collator - * @param unsafe a fill-in set to receive the unsafe points - * @param status for catching errors - * @return number of elements in the set - * @internal ICU 3.0 - */ -U_INTERNAL int32_t U_EXPORT2 -ucol_getUnsafeSet( const UCollator *coll, - USet *unsafe, - UErrorCode *status); - -/** Touches all resources needed for instantiating a collator from a short string definition, - * thus filling up the cache. - * @param definition A short string containing a locale and a set of attributes. - * Attributes not explicitly mentioned are left at the default - * state for a locale. - * @param parseError if not NULL, structure that will get filled with error's pre - * and post context in case of error. - * @param forceDefaults if FALSE, the settings that are the same as the collator - * default settings will not be applied (for example, setting - * French secondary on a French collator would not be executed). - * If TRUE, all the settings will be applied regardless of the - * collator default value. If the definition - * strings are to be cached, should be set to FALSE. - * @param status Error code. Apart from regular error conditions connected to - * instantiating collators (like out of memory or similar), this - * API will return an error if an invalid attribute or attribute/value - * combination is specified. - * @see ucol_openFromShortString - * @internal ICU 3.2.1 - */ -U_INTERNAL void U_EXPORT2 -ucol_prepareShortStringOpen( const char *definition, - UBool forceDefaults, - UParseError *parseError, - UErrorCode *status); -#endif /* U_HIDE_INTERNAL_API */ - -/** Creates a binary image of a collator. This binary image can be stored and - * later used to instantiate a collator using ucol_openBinary. - * This API supports preflighting. - * @param coll Collator - * @param buffer a fill-in buffer to receive the binary image - * @param capacity capacity of the destination buffer - * @param status for catching errors - * @return size of the image - * @see ucol_openBinary - * @stable ICU 3.2 - */ -U_STABLE int32_t U_EXPORT2 -ucol_cloneBinary(const UCollator *coll, - uint8_t *buffer, int32_t capacity, - UErrorCode *status); - -/** Opens a collator from a collator binary image created using - * ucol_cloneBinary. Binary image used in instantiation of the - * collator remains owned by the user and should stay around for - * the lifetime of the collator. The API also takes a base collator - * which must be the root collator. - * @param bin binary image owned by the user and required through the - * lifetime of the collator - * @param length size of the image. If negative, the API will try to - * figure out the length of the image - * @param base Base collator, for lookup of untailored characters. - * Must be the root collator, must not be NULL. - * The base is required to be present through the lifetime of the collator. - * @param status for catching errors - * @return newly created collator - * @see ucol_cloneBinary - * @stable ICU 3.2 - */ -U_STABLE UCollator* U_EXPORT2 -ucol_openBinary(const uint8_t *bin, int32_t length, - const UCollator *base, - UErrorCode *status); - - -#endif /* #if !UCONFIG_NO_COLLATION */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucoleitr.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucoleitr.h deleted file mode 100644 index b6986fcf0c..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucoleitr.h +++ /dev/null @@ -1,325 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2001-2014, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* -* File ucoleitr.h -* -* Modification History: -* -* Date Name Description -* 02/15/2001 synwee Modified all methods to process its own function -* instead of calling the equivalent c++ api (coleitr.h) -*******************************************************************************/ - -#ifndef UCOLEITR_H -#define UCOLEITR_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_COLLATION - -/** - * This indicates an error has occured during processing or if no more CEs is - * to be returned. - * @stable ICU 2.0 - */ -#define UCOL_NULLORDER ((int32_t)0xFFFFFFFF) - -#ifndef U_HIDE_INTERNAL_API -/** - * DO NOT USE, INTERNAL CONSTANT THAT WAS REMOVED AND THEN - * TEMPORARILY RESTORED TO PREVENT THE BUILD FROM BREAKING. - * This indicates an error has occured during processing or there are no more CEs - * to be returned. - * - * @internal - */ -#define UCOL_PROCESSED_NULLORDER ((int64_t)U_INT64_MAX) -#endif /* U_HIDE_INTERNAL_API */ - -#include "unicode/ucol.h" - -/** - * The UCollationElements struct. - * For usage in C programs. - * @stable ICU 2.0 - */ -typedef struct UCollationElements UCollationElements; - -/** - * \file - * \brief C API: UCollationElements - * - * The UCollationElements API is used as an iterator to walk through each - * character of an international string. Use the iterator to return the - * ordering priority of the positioned character. The ordering priority of a - * character, which we refer to as a key, defines how a character is collated - * in the given collation object. - * For example, consider the following in Slovak and in traditional Spanish collation: - *
- * .       "ca" -> the first key is key('c') and second key is key('a').
- * .       "cha" -> the first key is key('ch') and second key is key('a').
- * 
- * And in German phonebook collation, - *
- * .       "b"-> the first key is key('a'), the second key is key('e'), and
- * .       the third key is key('b').
- * 
- *

Example of the iterator usage: (without error checking) - *

- * .  void CollationElementIterator_Example()
- * .  {
- * .      UChar *s;
- * .      t_int32 order, primaryOrder;
- * .      UCollationElements *c;
- * .      UCollatorOld *coll;
- * .      UErrorCode success = U_ZERO_ERROR;
- * .      s=(UChar*)malloc(sizeof(UChar) * (strlen("This is a test")+1) );
- * .      u_uastrcpy(s, "This is a test");
- * .      coll = ucol_open(NULL, &success);
- * .      c = ucol_openElements(coll, str, u_strlen(str), &status);
- * .      order = ucol_next(c, &success);
- * .      ucol_reset(c);
- * .      order = ucol_prev(c, &success);
- * .      free(s);
- * .      ucol_close(coll);
- * .      ucol_closeElements(c);
- * .  }
- * 
- *

- * ucol_next() returns the collation order of the next. - * ucol_prev() returns the collation order of the previous character. - * The Collation Element Iterator moves only in one direction between calls to - * ucol_reset. That is, ucol_next() and ucol_prev can not be inter-used. - * Whenever ucol_prev is to be called after ucol_next() or vice versa, - * ucol_reset has to be called first to reset the status, shifting pointers to - * either the end or the start of the string. Hence at the next call of - * ucol_prev or ucol_next, the first or last collation order will be returned. - * If a change of direction is done without a ucol_reset, the result is - * undefined. - * The result of a forward iterate (ucol_next) and reversed result of the - * backward iterate (ucol_prev) on the same string are equivalent, if - * collation orders with the value 0 are ignored. - * Character based on the comparison level of the collator. A collation order - * consists of primary order, secondary order and tertiary order. The data - * type of the collation order is int32_t. - * - * @see UCollator - */ - -/** - * Open the collation elements for a string. - * - * @param coll The collator containing the desired collation rules. - * @param text The text to iterate over. - * @param textLength The number of characters in text, or -1 if null-terminated - * @param status A pointer to a UErrorCode to receive any errors. - * @return a struct containing collation element information - * @stable ICU 2.0 - */ -U_STABLE UCollationElements* U_EXPORT2 -ucol_openElements(const UCollator *coll, - const UChar *text, - int32_t textLength, - UErrorCode *status); - - -/** - * get a hash code for a key... Not very useful! - * @param key the given key. - * @param length the size of the key array. - * @return the hash code. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucol_keyHashCode(const uint8_t* key, int32_t length); - -/** - * Close a UCollationElements. - * Once closed, a UCollationElements may no longer be used. - * @param elems The UCollationElements to close. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucol_closeElements(UCollationElements *elems); - -/** - * Reset the collation elements to their initial state. - * This will move the 'cursor' to the beginning of the text. - * Property settings for collation will be reset to the current status. - * @param elems The UCollationElements to reset. - * @see ucol_next - * @see ucol_previous - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucol_reset(UCollationElements *elems); - -/** - * Get the ordering priority of the next collation element in the text. - * A single character may contain more than one collation element. - * @param elems The UCollationElements containing the text. - * @param status A pointer to a UErrorCode to receive any errors. - * @return The next collation elements ordering, otherwise returns UCOL_NULLORDER - * if an error has occured or if the end of string has been reached - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucol_next(UCollationElements *elems, UErrorCode *status); - -/** - * Get the ordering priority of the previous collation element in the text. - * A single character may contain more than one collation element. - * Note that internally a stack is used to store buffered collation elements. - * @param elems The UCollationElements containing the text. - * @param status A pointer to a UErrorCode to receive any errors. Noteably - * a U_BUFFER_OVERFLOW_ERROR is returned if the internal stack - * buffer has been exhausted. - * @return The previous collation elements ordering, otherwise returns - * UCOL_NULLORDER if an error has occured or if the start of string has - * been reached. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucol_previous(UCollationElements *elems, UErrorCode *status); - -#ifndef U_HIDE_INTERNAL_API -/** - * DO NOT USE, INTERNAL FUNCTION THAT WAS REMOVED AND THEN - * TEMPORARILY RESTORED TO PREVENT THE BUILD FROM BREAKING. - * Get the processed ordering priority of the next collation element in the text. - * A single character may contain more than one collation element. - * - * @param elems The UCollationElements containing the text. - * @param ixLow a pointer to an int32_t to receive the iterator index before fetching the CE. - * @param ixHigh a pointer to an int32_t to receive the iterator index after fetching the CE. - * @param status A pointer to an UErrorCode to receive any errors. - * @return The next collation elements ordering, otherwise returns UCOL_PROCESSED_NULLORDER - * if an error has occured or if the end of string has been reached - * - * @internal - */ -U_INTERNAL int64_t U_EXPORT2 -ucol_nextProcessed(UCollationElements *elems, int32_t *ixLow, int32_t *ixHigh, UErrorCode *status); - -/** - * DO NOT USE, INTERNAL FUNCTION THAT WAS REMOVED AND THEN - * TEMPORARILY RESTORED TO PREVENT THE BUILD FROM BREAKING. - * Get the processed ordering priority of the previous collation element in the text. - * A single character may contain more than one collation element. - * Note that internally a stack is used to store buffered collation elements. - * It is very rare that the stack will overflow, however if such a case is - * encountered, the problem can be solved by increasing the size - * UCOL_EXPAND_CE_BUFFER_SIZE in ucol_imp.h. - * - * @param elems The UCollationElements containing the text. - * @param ixLow A pointer to an int32_t to receive the iterator index after fetching the CE - * @param ixHigh A pointer to an int32_t to receiver the iterator index before fetching the CE - * @param status A pointer to an UErrorCode to receive any errors. Noteably - * a U_BUFFER_OVERFLOW_ERROR is returned if the internal stack - * buffer has been exhausted. - * @return The previous collation elements ordering, otherwise returns - * UCOL_PROCESSED_NULLORDER if an error has occured or if the start of - * string has been reached. - * - * @internal - */ -U_INTERNAL int64_t U_EXPORT2 -ucol_previousProcessed(UCollationElements *elems, int32_t *ixLow, int32_t *ixHigh, UErrorCode *status); -#endif /* U_HIDE_INTERNAL_API */ - -/** - * Get the maximum length of any expansion sequences that end with the - * specified comparison order. - * This is useful for .... ? - * @param elems The UCollationElements containing the text. - * @param order A collation order returned by previous or next. - * @return maximum size of the expansion sequences ending with the collation - * element or 1 if collation element does not occur at the end of any - * expansion sequence - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucol_getMaxExpansion(const UCollationElements *elems, int32_t order); - -/** - * Set the text containing the collation elements. - * Property settings for collation will remain the same. - * In order to reset the iterator to the current collation property settings, - * the API reset() has to be called. - * @param elems The UCollationElements to set. - * @param text The source text containing the collation elements. - * @param textLength The length of text, or -1 if null-terminated. - * @param status A pointer to a UErrorCode to receive any errors. - * @see ucol_getText - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucol_setText( UCollationElements *elems, - const UChar *text, - int32_t textLength, - UErrorCode *status); - -/** - * Get the offset of the current source character. - * This is an offset into the text of the character containing the current - * collation elements. - * @param elems The UCollationElements to query. - * @return The offset of the current source character. - * @see ucol_setOffset - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ucol_getOffset(const UCollationElements *elems); - -/** - * Set the offset of the current source character. - * This is an offset into the text of the character to be processed. - * Property settings for collation will remain the same. - * In order to reset the iterator to the current collation property settings, - * the API reset() has to be called. - * @param elems The UCollationElements to set. - * @param offset The desired character offset. - * @param status A pointer to a UErrorCode to receive any errors. - * @see ucol_getOffset - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ucol_setOffset(UCollationElements *elems, - int32_t offset, - UErrorCode *status); - -/** -* Get the primary order of a collation order. -* @param order the collation order -* @return the primary order of a collation order. -* @stable ICU 2.6 -*/ -U_STABLE int32_t U_EXPORT2 -ucol_primaryOrder (int32_t order); - -/** -* Get the secondary order of a collation order. -* @param order the collation order -* @return the secondary order of a collation order. -* @stable ICU 2.6 -*/ -U_STABLE int32_t U_EXPORT2 -ucol_secondaryOrder (int32_t order); - -/** -* Get the tertiary order of a collation order. -* @param order the collation order -* @return the tertiary order of a collation order. -* @stable ICU 2.6 -*/ -U_STABLE int32_t U_EXPORT2 -ucol_tertiaryOrder (int32_t order); - -#endif /* #if !UCONFIG_NO_COLLATION */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uconfig.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uconfig.h deleted file mode 100644 index 284dee7eeb..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uconfig.h +++ /dev/null @@ -1,456 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2002-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* file name: uconfig.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2002sep19 -* created by: Markus W. Scherer -*/ - -#ifndef __UCONFIG_H__ -#define __UCONFIG_H__ - - -/*! - * \file - * \brief User-configurable settings - * - * Miscellaneous switches: - * - * A number of macros affect a variety of minor aspects of ICU. - * Most of them used to be defined elsewhere (e.g., in utypes.h or platform.h) - * and moved here to make them easier to find. - * - * Switches for excluding parts of ICU library code modules: - * - * Changing these macros allows building partial, smaller libraries for special purposes. - * By default, all modules are built. - * The switches are fairly coarse, controlling large modules. - * Basic services cannot be turned off. - * - * Building with any of these options does not guarantee that the - * ICU build process will completely work. It is recommended that - * the ICU libraries and data be built using the normal build. - * At that time you should remove the data used by those services. - * After building the ICU data library, you should rebuild the ICU - * libraries with these switches customized to your needs. - * - * @stable ICU 2.4 - */ - -/** - * If this switch is defined, ICU will attempt to load a header file named "uconfig_local.h" - * prior to determining default settings for uconfig variables. - * - * @internal ICU 4.0 - */ -#if defined(UCONFIG_USE_LOCAL) -#include "uconfig_local.h" -#endif - -/** - * \def U_DEBUG - * Determines whether to include debugging code. - * Automatically set on Windows, but most compilers do not have - * related predefined macros. - * @internal - */ -#ifdef U_DEBUG - /* Use the predefined value. */ -#elif defined(_DEBUG) - /* - * _DEBUG is defined by Visual Studio debug compilation. - * Do *not* test for its NDEBUG macro: It is an orthogonal macro - * which disables assert(). - */ -# define U_DEBUG 1 -# else -# define U_DEBUG 0 -#endif - -/** - * Determines whether to enable auto cleanup of libraries. - * @internal - */ -#ifndef UCLN_NO_AUTO_CLEANUP -#define UCLN_NO_AUTO_CLEANUP 1 -#endif - -/** - * \def U_DISABLE_RENAMING - * Determines whether to disable renaming or not. - * @internal - */ -#ifndef U_DISABLE_RENAMING -#define U_DISABLE_RENAMING 1 -#endif - -/** - * \def U_NO_DEFAULT_INCLUDE_UTF_HEADERS - * Determines whether utypes.h includes utf.h, utf8.h, utf16.h and utf_old.h. - * utypes.h includes those headers if this macro is defined to 0. - * Otherwise, each those headers must be included explicitly when using one of their macros. - * Defaults to 0 for backward compatibility, except inside ICU. - * @stable ICU 49 - */ -#ifdef U_NO_DEFAULT_INCLUDE_UTF_HEADERS - /* Use the predefined value. */ -#elif defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || \ - defined(U_IO_IMPLEMENTATION) || defined(U_LAYOUT_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION) || \ - defined(U_TOOLUTIL_IMPLEMENTATION) -# define U_NO_DEFAULT_INCLUDE_UTF_HEADERS 1 -#else -# define U_NO_DEFAULT_INCLUDE_UTF_HEADERS 0 -#endif - -/** - * \def U_OVERRIDE_CXX_ALLOCATION - * Determines whether to override new and delete. - * ICU is normally built such that all of its C++ classes, via their UMemory base, - * override operators new and delete to use its internal, customizable, - * non-exception-throwing memory allocation functions. (Default value 1 for this macro.) - * - * This is especially important when the application and its libraries use multiple heaps. - * For example, on Windows, this allows the ICU DLL to be used by - * applications that statically link the C Runtime library. - * - * @stable ICU 2.2 - */ -#ifndef U_OVERRIDE_CXX_ALLOCATION -#define U_OVERRIDE_CXX_ALLOCATION 1 -#endif - -/** - * \def U_ENABLE_TRACING - * Determines whether to enable tracing. - * @internal - */ -#ifndef U_ENABLE_TRACING -#define U_ENABLE_TRACING 0 -#endif - -/** - * \def UCONFIG_ENABLE_PLUGINS - * Determines whether to enable ICU plugins. - * @internal - */ -#ifndef UCONFIG_ENABLE_PLUGINS -#define UCONFIG_ENABLE_PLUGINS 0 -#endif - -/** - * \def U_ENABLE_DYLOAD - * Whether to enable Dynamic loading in ICU. - * @internal - */ -#ifndef U_ENABLE_DYLOAD -#define U_ENABLE_DYLOAD 1 -#endif - -/** - * \def U_CHECK_DYLOAD - * Whether to test Dynamic loading as an OS capability. - * @internal - */ -#ifndef U_CHECK_DYLOAD -#define U_CHECK_DYLOAD 1 -#endif - -/** - * \def U_DEFAULT_SHOW_DRAFT - * Do we allow ICU users to use the draft APIs by default? - * @internal - */ -#ifndef U_DEFAULT_SHOW_DRAFT -#define U_DEFAULT_SHOW_DRAFT 1 -#endif - -/*===========================================================================*/ -/* Custom icu entry point renaming */ -/*===========================================================================*/ - -/** - * \def U_HAVE_LIB_SUFFIX - * 1 if a custom library suffix is set. - * @internal - */ -#ifdef U_HAVE_LIB_SUFFIX - /* Use the predefined value. */ -#elif defined(U_LIB_SUFFIX_C_NAME) || defined(U_IN_DOXYGEN) -# define U_HAVE_LIB_SUFFIX 1 -#endif - -/** - * \def U_LIB_SUFFIX_C_NAME_STRING - * Defines the library suffix as a string with C syntax. - * @internal - */ -#ifdef U_LIB_SUFFIX_C_NAME_STRING - /* Use the predefined value. */ -#elif defined(U_LIB_SUFFIX_C_NAME) -# define CONVERT_TO_STRING(s) #s -# define U_LIB_SUFFIX_C_NAME_STRING CONVERT_TO_STRING(U_LIB_SUFFIX_C_NAME) -#else -# define U_LIB_SUFFIX_C_NAME_STRING "" -#endif - -/* common/i18n library switches --------------------------------------------- */ - -/** - * \def UCONFIG_ONLY_COLLATION - * This switch turns off modules that are not needed for collation. - * - * It does not turn off legacy conversion because that is necessary - * for ICU to work on EBCDIC platforms (for the default converter). - * If you want "only collation" and do not build for EBCDIC, - * then you can define UCONFIG_NO_CONVERSION or UCONFIG_NO_LEGACY_CONVERSION to 1 as well. - * - * @stable ICU 2.4 - */ -#ifndef UCONFIG_ONLY_COLLATION -# define UCONFIG_ONLY_COLLATION 0 -#endif - -#if UCONFIG_ONLY_COLLATION - /* common library */ -# define UCONFIG_NO_BREAK_ITERATION 1 -# define UCONFIG_NO_IDNA 1 - - /* i18n library */ -# if UCONFIG_NO_COLLATION -# error Contradictory collation switches in uconfig.h. -# endif -# define UCONFIG_NO_FORMATTING 1 -# define UCONFIG_NO_TRANSLITERATION 1 -# define UCONFIG_NO_REGULAR_EXPRESSIONS 1 -#endif - -/* common library switches -------------------------------------------------- */ - -/** - * \def UCONFIG_NO_FILE_IO - * This switch turns off all file access in the common library - * where file access is only used for data loading. - * ICU data must then be provided in the form of a data DLL (or with an - * equivalent way to link to the data residing in an executable, - * as in building a combined library with both the common library's code and - * the data), or via udata_setCommonData(). - * Application data must be provided via udata_setAppData() or by using - * "open" functions that take pointers to data, for example ucol_openBinary(). - * - * File access is not used at all in the i18n library. - * - * File access cannot be turned off for the icuio library or for the ICU - * test suites and ICU tools. - * - * @stable ICU 3.6 - */ -#ifndef UCONFIG_NO_FILE_IO -# define UCONFIG_NO_FILE_IO 0 -#endif - -#if UCONFIG_NO_FILE_IO && defined(U_TIMEZONE_FILES_DIR) -# error Contradictory file io switches in uconfig.h. -#endif - -/** - * \def UCONFIG_NO_CONVERSION - * ICU will not completely build (compiling the tools fails) with this - * switch turned on. - * This switch turns off all converters. - * - * You may want to use this together with U_CHARSET_IS_UTF8 defined to 1 - * in utypes.h if char* strings in your environment are always in UTF-8. - * - * @stable ICU 3.2 - * @see U_CHARSET_IS_UTF8 - */ -#ifndef UCONFIG_NO_CONVERSION -# define UCONFIG_NO_CONVERSION 0 -#endif - -#if UCONFIG_NO_CONVERSION -# define UCONFIG_NO_LEGACY_CONVERSION 1 -#endif - -/** - * \def UCONFIG_ONLY_HTML_CONVERSION - * This switch turns off all of the converters NOT listed in - * the HTML encoding standard: - * http://www.w3.org/TR/encoding/#names-and-labels - * - * This is not possible on EBCDIC platforms - * because they need ibm-37 or ibm-1047 default converters. - * - * @stable ICU 55 - */ -#ifndef UCONFIG_ONLY_HTML_CONVERSION -# define UCONFIG_ONLY_HTML_CONVERSION 0 -#endif - -/** - * \def UCONFIG_NO_LEGACY_CONVERSION - * This switch turns off all converters except for - * - Unicode charsets (UTF-7/8/16/32, CESU-8, SCSU, BOCU-1) - * - US-ASCII - * - ISO-8859-1 - * - * Turning off legacy conversion is not possible on EBCDIC platforms - * because they need ibm-37 or ibm-1047 default converters. - * - * @stable ICU 2.4 - */ -#ifndef UCONFIG_NO_LEGACY_CONVERSION -# define UCONFIG_NO_LEGACY_CONVERSION 0 -#endif - -/** - * \def UCONFIG_NO_NORMALIZATION - * This switch turns off normalization. - * It implies turning off several other services as well, for example - * collation and IDNA. - * - * @stable ICU 2.6 - */ -#ifndef UCONFIG_NO_NORMALIZATION -# define UCONFIG_NO_NORMALIZATION 0 -#endif - -#if UCONFIG_NO_NORMALIZATION - /* common library */ - /* ICU 50 CJK dictionary BreakIterator uses normalization */ -# define UCONFIG_NO_BREAK_ITERATION 1 - /* IDNA (UTS #46) is implemented via normalization */ -# define UCONFIG_NO_IDNA 1 - - /* i18n library */ -# if UCONFIG_ONLY_COLLATION -# error Contradictory collation switches in uconfig.h. -# endif -# define UCONFIG_NO_COLLATION 1 -# define UCONFIG_NO_TRANSLITERATION 1 -#endif - -/** - * \def UCONFIG_NO_BREAK_ITERATION - * This switch turns off break iteration. - * - * @stable ICU 2.4 - */ -#ifndef UCONFIG_NO_BREAK_ITERATION -# define UCONFIG_NO_BREAK_ITERATION 0 -#endif - -/** - * \def UCONFIG_NO_IDNA - * This switch turns off IDNA. - * - * @stable ICU 2.6 - */ -#ifndef UCONFIG_NO_IDNA -# define UCONFIG_NO_IDNA 0 -#endif - -/** - * \def UCONFIG_MSGPAT_DEFAULT_APOSTROPHE_MODE - * Determines the default UMessagePatternApostropheMode. - * See the documentation for that enum. - * - * @stable ICU 4.8 - */ -#ifndef UCONFIG_MSGPAT_DEFAULT_APOSTROPHE_MODE -# define UCONFIG_MSGPAT_DEFAULT_APOSTROPHE_MODE UMSGPAT_APOS_DOUBLE_OPTIONAL -#endif - -/** - * \def UCONFIG_USE_WINDOWS_LCID_MAPPING_API - * On platforms where U_PLATFORM_HAS_WIN32_API is true, this switch determines - * if the Windows platform APIs are used for LCID<->Locale Name conversions. - * Otherwise, only the built-in ICU tables are used. - * - * @internal ICU 64 - */ -#ifndef UCONFIG_USE_WINDOWS_LCID_MAPPING_API -# define UCONFIG_USE_WINDOWS_LCID_MAPPING_API 1 -#endif - -/* i18n library switches ---------------------------------------------------- */ - -/** - * \def UCONFIG_NO_COLLATION - * This switch turns off collation and collation-based string search. - * - * @stable ICU 2.4 - */ -#ifndef UCONFIG_NO_COLLATION -# define UCONFIG_NO_COLLATION 0 -#endif - -/** - * \def UCONFIG_NO_FORMATTING - * This switch turns off formatting and calendar/timezone services. - * - * @stable ICU 2.4 - */ -#ifndef UCONFIG_NO_FORMATTING -# define UCONFIG_NO_FORMATTING 0 -#endif - -/** - * \def UCONFIG_NO_TRANSLITERATION - * This switch turns off transliteration. - * - * @stable ICU 2.4 - */ -#ifndef UCONFIG_NO_TRANSLITERATION -# define UCONFIG_NO_TRANSLITERATION 0 -#endif - -/** - * \def UCONFIG_NO_REGULAR_EXPRESSIONS - * This switch turns off regular expressions. - * - * @stable ICU 2.4 - */ -#ifndef UCONFIG_NO_REGULAR_EXPRESSIONS -# define UCONFIG_NO_REGULAR_EXPRESSIONS 0 -#endif - -/** - * \def UCONFIG_NO_SERVICE - * This switch turns off service registration. - * - * @stable ICU 3.2 - */ -#ifndef UCONFIG_NO_SERVICE -# define UCONFIG_NO_SERVICE 1 -#endif - -/** - * \def UCONFIG_HAVE_PARSEALLINPUT - * This switch turns on the "parse all input" attribute. Binary incompatible. - * - * @internal - */ -#ifndef UCONFIG_HAVE_PARSEALLINPUT -# define UCONFIG_HAVE_PARSEALLINPUT 1 -#endif - -/** - * \def UCONFIG_NO_FILTERED_BREAK_ITERATION - * This switch turns off filtered break iteration code. - * - * @internal - */ -#ifndef UCONFIG_NO_FILTERED_BREAK_ITERATION -# define UCONFIG_NO_FILTERED_BREAK_ITERATION 0 -#endif - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucpmap.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucpmap.h deleted file mode 100644 index f2c42b6b7f..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucpmap.h +++ /dev/null @@ -1,162 +0,0 @@ -// © 2018 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html - -// ucpmap.h -// created: 2018sep03 Markus W. Scherer - -#ifndef __UCPMAP_H__ -#define __UCPMAP_H__ - -#include "unicode/utypes.h" - -#ifndef U_HIDE_DRAFT_API - -U_CDECL_BEGIN - -/** - * \file - * - * This file defines an abstract map from Unicode code points to integer values. - * - * @see UCPMap - * @see UCPTrie - * @see UMutableCPTrie - */ - -/** - * Abstract map from Unicode code points (U+0000..U+10FFFF) to integer values. - * - * @see UCPTrie - * @see UMutableCPTrie - * @draft ICU 63 - */ -typedef struct UCPMap UCPMap; - -/** - * Selectors for how ucpmap_getRange() etc. should report value ranges overlapping with surrogates. - * Most users should use UCPMAP_RANGE_NORMAL. - * - * @see ucpmap_getRange - * @see ucptrie_getRange - * @see umutablecptrie_getRange - * @draft ICU 63 - */ -enum UCPMapRangeOption { - /** - * ucpmap_getRange() enumerates all same-value ranges as stored in the map. - * Most users should use this option. - * @draft ICU 63 - */ - UCPMAP_RANGE_NORMAL, - /** - * ucpmap_getRange() enumerates all same-value ranges as stored in the map, - * except that lead surrogates (U+D800..U+DBFF) are treated as having the - * surrogateValue, which is passed to getRange() as a separate parameter. - * The surrogateValue is not transformed via filter(). - * See U_IS_LEAD(c). - * - * Most users should use UCPMAP_RANGE_NORMAL instead. - * - * This option is useful for maps that map surrogate code *units* to - * special values optimized for UTF-16 string processing - * or for special error behavior for unpaired surrogates, - * but those values are not to be associated with the lead surrogate code *points*. - * @draft ICU 63 - */ - UCPMAP_RANGE_FIXED_LEAD_SURROGATES, - /** - * ucpmap_getRange() enumerates all same-value ranges as stored in the map, - * except that all surrogates (U+D800..U+DFFF) are treated as having the - * surrogateValue, which is passed to getRange() as a separate parameter. - * The surrogateValue is not transformed via filter(). - * See U_IS_SURROGATE(c). - * - * Most users should use UCPMAP_RANGE_NORMAL instead. - * - * This option is useful for maps that map surrogate code *units* to - * special values optimized for UTF-16 string processing - * or for special error behavior for unpaired surrogates, - * but those values are not to be associated with the lead surrogate code *points*. - * @draft ICU 63 - */ - UCPMAP_RANGE_FIXED_ALL_SURROGATES -}; -#ifndef U_IN_DOXYGEN -typedef enum UCPMapRangeOption UCPMapRangeOption; -#endif - -/** - * Returns the value for a code point as stored in the map, with range checking. - * Returns an implementation-defined error value if c is not in the range 0..U+10FFFF. - * - * @param map the map - * @param c the code point - * @return the map value, - * or an implementation-defined error value if the code point is not in the range 0..U+10FFFF - * @draft ICU 63 - */ -U_CAPI uint32_t U_EXPORT2 -ucpmap_get(const UCPMap *map, UChar32 c); - -/** - * Callback function type: Modifies a map value. - * Optionally called by ucpmap_getRange()/ucptrie_getRange()/umutablecptrie_getRange(). - * The modified value will be returned by the getRange function. - * - * Can be used to ignore some of the value bits, - * make a filter for one of several values, - * return a value index computed from the map value, etc. - * - * @param context an opaque pointer, as passed into the getRange function - * @param value a value from the map - * @return the modified value - * @draft ICU 63 - */ -typedef uint32_t U_CALLCONV -UCPMapValueFilter(const void *context, uint32_t value); - -/** - * Returns the last code point such that all those from start to there have the same value. - * Can be used to efficiently iterate over all same-value ranges in a map. - * (This is normally faster than iterating over code points and get()ting each value, - * but much slower than a data structure that stores ranges directly.) - * - * If the UCPMapValueFilter function pointer is not NULL, then - * the value to be delivered is passed through that function, and the return value is the end - * of the range where all values are modified to the same actual value. - * The value is unchanged if that function pointer is NULL. - * - * Example: - * \code - * UChar32 start = 0, end; - * uint32_t value; - * while ((end = ucpmap_getRange(map, start, UCPMAP_RANGE_NORMAL, 0, - * NULL, NULL, &value)) >= 0) { - * // Work with the range start..end and its value. - * start = end + 1; - * } - * \endcode - * - * @param map the map - * @param start range start - * @param option defines whether surrogates are treated normally, - * or as having the surrogateValue; usually UCPMAP_RANGE_NORMAL - * @param surrogateValue value for surrogates; ignored if option==UCPMAP_RANGE_NORMAL - * @param filter a pointer to a function that may modify the map data value, - * or NULL if the values from the map are to be used unmodified - * @param context an opaque pointer that is passed on to the filter function - * @param pValue if not NULL, receives the value that every code point start..end has; - * may have been modified by filter(context, map value) - * if that function pointer is not NULL - * @return the range end code point, or -1 if start is not a valid code point - * @draft ICU 63 - */ -U_CAPI UChar32 U_EXPORT2 -ucpmap_getRange(const UCPMap *map, UChar32 start, - UCPMapRangeOption option, uint32_t surrogateValue, - UCPMapValueFilter *filter, const void *context, uint32_t *pValue); - -U_CDECL_END - -#endif // U_HIDE_DRAFT_API -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucptrie.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucptrie.h deleted file mode 100644 index 2718c984e4..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucptrie.h +++ /dev/null @@ -1,646 +0,0 @@ -// © 2017 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html - -// ucptrie.h (modified from utrie2.h) -// created: 2017dec29 Markus W. Scherer - -#ifndef __UCPTRIE_H__ -#define __UCPTRIE_H__ - -#include "unicode/utypes.h" - -#ifndef U_HIDE_DRAFT_API - -#include "unicode/localpointer.h" -#include "unicode/ucpmap.h" -#include "unicode/utf8.h" - -U_CDECL_BEGIN - -/** - * \file - * - * This file defines an immutable Unicode code point trie. - * - * @see UCPTrie - * @see UMutableCPTrie - */ - -#ifndef U_IN_DOXYGEN -/** @internal */ -typedef union UCPTrieData { - /** @internal */ - const void *ptr0; - /** @internal */ - const uint16_t *ptr16; - /** @internal */ - const uint32_t *ptr32; - /** @internal */ - const uint8_t *ptr8; -} UCPTrieData; -#endif - -/** - * Immutable Unicode code point trie structure. - * Fast, reasonably compact, map from Unicode code points (U+0000..U+10FFFF) to integer values. - * For details see http://site.icu-project.org/design/struct/utrie - * - * Do not access UCPTrie fields directly; use public functions and macros. - * Functions are easy to use: They support all trie types and value widths. - * - * When performance is really important, macros provide faster access. - * Most macros are specific to either "fast" or "small" tries, see UCPTrieType. - * There are "fast" macros for special optimized use cases. - * - * The macros will return bogus values, or may crash, if used on the wrong type or value width. - * - * @see UMutableCPTrie - * @draft ICU 63 - */ -struct UCPTrie { -#ifndef U_IN_DOXYGEN - /** @internal */ - const uint16_t *index; - /** @internal */ - UCPTrieData data; - - /** @internal */ - int32_t indexLength; - /** @internal */ - int32_t dataLength; - /** Start of the last range which ends at U+10FFFF. @internal */ - UChar32 highStart; - /** highStart>>12 @internal */ - uint16_t shifted12HighStart; - - /** @internal */ - int8_t type; // UCPTrieType - /** @internal */ - int8_t valueWidth; // UCPTrieValueWidth - - /** padding/reserved @internal */ - uint32_t reserved32; - /** padding/reserved @internal */ - uint16_t reserved16; - - /** - * Internal index-3 null block offset. - * Set to an impossibly high value (e.g., 0xffff) if there is no dedicated index-3 null block. - * @internal - */ - uint16_t index3NullOffset; - /** - * Internal data null block offset, not shifted. - * Set to an impossibly high value (e.g., 0xfffff) if there is no dedicated data null block. - * @internal - */ - int32_t dataNullOffset; - /** @internal */ - uint32_t nullValue; - -#ifdef UCPTRIE_DEBUG - /** @internal */ - const char *name; -#endif -#endif -}; -#ifndef U_IN_DOXYGEN -typedef struct UCPTrie UCPTrie; -#endif - -/** - * Selectors for the type of a UCPTrie. - * Different trade-offs for size vs. speed. - * - * @see umutablecptrie_buildImmutable - * @see ucptrie_openFromBinary - * @see ucptrie_getType - * @draft ICU 63 - */ -enum UCPTrieType { - /** - * For ucptrie_openFromBinary() to accept any type. - * ucptrie_getType() will return the actual type. - * @draft ICU 63 - */ - UCPTRIE_TYPE_ANY = -1, - /** - * Fast/simple/larger BMP data structure. Use functions and "fast" macros. - * @draft ICU 63 - */ - UCPTRIE_TYPE_FAST, - /** - * Small/slower BMP data structure. Use functions and "small" macros. - * @draft ICU 63 - */ - UCPTRIE_TYPE_SMALL -}; -#ifndef U_IN_DOXYGEN -typedef enum UCPTrieType UCPTrieType; -#endif - -/** - * Selectors for the number of bits in a UCPTrie data value. - * - * @see umutablecptrie_buildImmutable - * @see ucptrie_openFromBinary - * @see ucptrie_getValueWidth - * @draft ICU 63 - */ -enum UCPTrieValueWidth { - /** - * For ucptrie_openFromBinary() to accept any data value width. - * ucptrie_getValueWidth() will return the actual data value width. - * @draft ICU 63 - */ - UCPTRIE_VALUE_BITS_ANY = -1, - /** - * The trie stores 16 bits per data value. - * It returns them as unsigned values 0..0xffff=65535. - * @draft ICU 63 - */ - UCPTRIE_VALUE_BITS_16, - /** - * The trie stores 32 bits per data value. - * @draft ICU 63 - */ - UCPTRIE_VALUE_BITS_32, - /** - * The trie stores 8 bits per data value. - * It returns them as unsigned values 0..0xff=255. - * @draft ICU 63 - */ - UCPTRIE_VALUE_BITS_8 -}; -#ifndef U_IN_DOXYGEN -typedef enum UCPTrieValueWidth UCPTrieValueWidth; -#endif - -/** - * Opens a trie from its binary form, stored in 32-bit-aligned memory. - * Inverse of ucptrie_toBinary(). - * - * The memory must remain valid and unchanged as long as the trie is used. - * You must ucptrie_close() the trie once you are done using it. - * - * @param type selects the trie type; results in an - * U_INVALID_FORMAT_ERROR if it does not match the binary data; - * use UCPTRIE_TYPE_ANY to accept any type - * @param valueWidth selects the number of bits in a data value; results in an - * U_INVALID_FORMAT_ERROR if it does not match the binary data; - * use UCPTRIE_VALUE_BITS_ANY to accept any data value width - * @param data a pointer to 32-bit-aligned memory containing the binary data of a UCPTrie - * @param length the number of bytes available at data; - * can be more than necessary - * @param pActualLength receives the actual number of bytes at data taken up by the trie data; - * can be NULL - * @param pErrorCode an in/out ICU UErrorCode - * @return the trie - * - * @see umutablecptrie_open - * @see umutablecptrie_buildImmutable - * @see ucptrie_toBinary - * @draft ICU 63 - */ -U_CAPI UCPTrie * U_EXPORT2 -ucptrie_openFromBinary(UCPTrieType type, UCPTrieValueWidth valueWidth, - const void *data, int32_t length, int32_t *pActualLength, - UErrorCode *pErrorCode); - -/** - * Closes a trie and releases associated memory. - * - * @param trie the trie - * @draft ICU 63 - */ -U_CAPI void U_EXPORT2 -ucptrie_close(UCPTrie *trie); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUCPTriePointer - * "Smart pointer" class, closes a UCPTrie via ucptrie_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @draft ICU 63 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUCPTriePointer, UCPTrie, ucptrie_close); - -U_NAMESPACE_END - -#endif - -/** - * Returns the trie type. - * - * @param trie the trie - * @return the trie type - * @see ucptrie_openFromBinary - * @see UCPTRIE_TYPE_ANY - * @draft ICU 63 - */ -U_CAPI UCPTrieType U_EXPORT2 -ucptrie_getType(const UCPTrie *trie); - -/** - * Returns the number of bits in a trie data value. - * - * @param trie the trie - * @return the number of bits in a trie data value - * @see ucptrie_openFromBinary - * @see UCPTRIE_VALUE_BITS_ANY - * @draft ICU 63 - */ -U_CAPI UCPTrieValueWidth U_EXPORT2 -ucptrie_getValueWidth(const UCPTrie *trie); - -/** - * Returns the value for a code point as stored in the trie, with range checking. - * Returns the trie error value if c is not in the range 0..U+10FFFF. - * - * Easier to use than UCPTRIE_FAST_GET() and similar macros but slower. - * Easier to use because, unlike the macros, this function works on all UCPTrie - * objects, for all types and value widths. - * - * @param trie the trie - * @param c the code point - * @return the trie value, - * or the trie error value if the code point is not in the range 0..U+10FFFF - * @draft ICU 63 - */ -U_CAPI uint32_t U_EXPORT2 -ucptrie_get(const UCPTrie *trie, UChar32 c); - -/** - * Returns the last code point such that all those from start to there have the same value. - * Can be used to efficiently iterate over all same-value ranges in a trie. - * (This is normally faster than iterating over code points and get()ting each value, - * but much slower than a data structure that stores ranges directly.) - * - * If the UCPMapValueFilter function pointer is not NULL, then - * the value to be delivered is passed through that function, and the return value is the end - * of the range where all values are modified to the same actual value. - * The value is unchanged if that function pointer is NULL. - * - * Example: - * \code - * UChar32 start = 0, end; - * uint32_t value; - * while ((end = ucptrie_getRange(trie, start, UCPMAP_RANGE_NORMAL, 0, - * NULL, NULL, &value)) >= 0) { - * // Work with the range start..end and its value. - * start = end + 1; - * } - * \endcode - * - * @param trie the trie - * @param start range start - * @param option defines whether surrogates are treated normally, - * or as having the surrogateValue; usually UCPMAP_RANGE_NORMAL - * @param surrogateValue value for surrogates; ignored if option==UCPMAP_RANGE_NORMAL - * @param filter a pointer to a function that may modify the trie data value, - * or NULL if the values from the trie are to be used unmodified - * @param context an opaque pointer that is passed on to the filter function - * @param pValue if not NULL, receives the value that every code point start..end has; - * may have been modified by filter(context, trie value) - * if that function pointer is not NULL - * @return the range end code point, or -1 if start is not a valid code point - * @draft ICU 63 - */ -U_CAPI UChar32 U_EXPORT2 -ucptrie_getRange(const UCPTrie *trie, UChar32 start, - UCPMapRangeOption option, uint32_t surrogateValue, - UCPMapValueFilter *filter, const void *context, uint32_t *pValue); - -/** - * Writes a memory-mappable form of the trie into 32-bit aligned memory. - * Inverse of ucptrie_openFromBinary(). - * - * @param trie the trie - * @param data a pointer to 32-bit-aligned memory to be filled with the trie data; - * can be NULL if capacity==0 - * @param capacity the number of bytes available at data, or 0 for pure preflighting - * @param pErrorCode an in/out ICU UErrorCode; - * U_BUFFER_OVERFLOW_ERROR if the capacity is too small - * @return the number of bytes written or (if buffer overflow) needed for the trie - * - * @see ucptrie_openFromBinary() - * @draft ICU 63 - */ -U_CAPI int32_t U_EXPORT2 -ucptrie_toBinary(const UCPTrie *trie, void *data, int32_t capacity, UErrorCode *pErrorCode); - -/** - * Macro parameter value for a trie with 16-bit data values. - * Use the name of this macro as a "dataAccess" parameter in other macros. - * Do not use this macro in any other way. - * - * @see UCPTRIE_VALUE_BITS_16 - * @draft ICU 63 - */ -#define UCPTRIE_16(trie, i) ((trie)->data.ptr16[i]) - -/** - * Macro parameter value for a trie with 32-bit data values. - * Use the name of this macro as a "dataAccess" parameter in other macros. - * Do not use this macro in any other way. - * - * @see UCPTRIE_VALUE_BITS_32 - * @draft ICU 63 - */ -#define UCPTRIE_32(trie, i) ((trie)->data.ptr32[i]) - -/** - * Macro parameter value for a trie with 8-bit data values. - * Use the name of this macro as a "dataAccess" parameter in other macros. - * Do not use this macro in any other way. - * - * @see UCPTRIE_VALUE_BITS_8 - * @draft ICU 63 - */ -#define UCPTRIE_8(trie, i) ((trie)->data.ptr8[i]) - -/** - * Returns a trie value for a code point, with range checking. - * Returns the trie error value if c is not in the range 0..U+10FFFF. - * - * @param trie (const UCPTrie *, in) the trie; must have type UCPTRIE_TYPE_FAST - * @param dataAccess UCPTRIE_16, UCPTRIE_32, or UCPTRIE_8 according to the trie’s value width - * @param c (UChar32, in) the input code point - * @return The code point's trie value. - * @draft ICU 63 - */ -#define UCPTRIE_FAST_GET(trie, dataAccess, c) dataAccess(trie, _UCPTRIE_CP_INDEX(trie, 0xffff, c)) - -/** - * Returns a 16-bit trie value for a code point, with range checking. - * Returns the trie error value if c is not in the range U+0000..U+10FFFF. - * - * @param trie (const UCPTrie *, in) the trie; must have type UCPTRIE_TYPE_SMALL - * @param dataAccess UCPTRIE_16, UCPTRIE_32, or UCPTRIE_8 according to the trie’s value width - * @param c (UChar32, in) the input code point - * @return The code point's trie value. - * @draft ICU 63 - */ -#define UCPTRIE_SMALL_GET(trie, dataAccess, c) \ - dataAccess(trie, _UCPTRIE_CP_INDEX(trie, UCPTRIE_SMALL_MAX, c)) - -/** - * UTF-16: Reads the next code point (UChar32 c, out), post-increments src, - * and gets a value from the trie. - * Sets the trie error value if c is an unpaired surrogate. - * - * @param trie (const UCPTrie *, in) the trie; must have type UCPTRIE_TYPE_FAST - * @param dataAccess UCPTRIE_16, UCPTRIE_32, or UCPTRIE_8 according to the trie’s value width - * @param src (const UChar *, in/out) the source text pointer - * @param limit (const UChar *, in) the limit pointer for the text, or NULL if NUL-terminated - * @param c (UChar32, out) variable for the code point - * @param result (out) variable for the trie lookup result - * @draft ICU 63 - */ -#define UCPTRIE_FAST_U16_NEXT(trie, dataAccess, src, limit, c, result) { \ - (c) = *(src)++; \ - int32_t __index; \ - if (!U16_IS_SURROGATE(c)) { \ - __index = _UCPTRIE_FAST_INDEX(trie, c); \ - } else { \ - uint16_t __c2; \ - if (U16_IS_SURROGATE_LEAD(c) && (src) != (limit) && U16_IS_TRAIL(__c2 = *(src))) { \ - ++(src); \ - (c) = U16_GET_SUPPLEMENTARY((c), __c2); \ - __index = _UCPTRIE_SMALL_INDEX(trie, c); \ - } else { \ - __index = (trie)->dataLength - UCPTRIE_ERROR_VALUE_NEG_DATA_OFFSET; \ - } \ - } \ - (result) = dataAccess(trie, __index); \ -} - -/** - * UTF-16: Reads the previous code point (UChar32 c, out), pre-decrements src, - * and gets a value from the trie. - * Sets the trie error value if c is an unpaired surrogate. - * - * @param trie (const UCPTrie *, in) the trie; must have type UCPTRIE_TYPE_FAST - * @param dataAccess UCPTRIE_16, UCPTRIE_32, or UCPTRIE_8 according to the trie’s value width - * @param start (const UChar *, in) the start pointer for the text - * @param src (const UChar *, in/out) the source text pointer - * @param c (UChar32, out) variable for the code point - * @param result (out) variable for the trie lookup result - * @draft ICU 63 - */ -#define UCPTRIE_FAST_U16_PREV(trie, dataAccess, start, src, c, result) { \ - (c) = *--(src); \ - int32_t __index; \ - if (!U16_IS_SURROGATE(c)) { \ - __index = _UCPTRIE_FAST_INDEX(trie, c); \ - } else { \ - uint16_t __c2; \ - if (U16_IS_SURROGATE_TRAIL(c) && (src) != (start) && U16_IS_LEAD(__c2 = *((src) - 1))) { \ - --(src); \ - (c) = U16_GET_SUPPLEMENTARY(__c2, (c)); \ - __index = _UCPTRIE_SMALL_INDEX(trie, c); \ - } else { \ - __index = (trie)->dataLength - UCPTRIE_ERROR_VALUE_NEG_DATA_OFFSET; \ - } \ - } \ - (result) = dataAccess(trie, __index); \ -} - -/** - * UTF-8: Post-increments src and gets a value from the trie. - * Sets the trie error value for an ill-formed byte sequence. - * - * Unlike UCPTRIE_FAST_U16_NEXT() this UTF-8 macro does not provide the code point - * because it would be more work to do so and is often not needed. - * If the trie value differs from the error value, then the byte sequence is well-formed, - * and the code point can be assembled without revalidation. - * - * @param trie (const UCPTrie *, in) the trie; must have type UCPTRIE_TYPE_FAST - * @param dataAccess UCPTRIE_16, UCPTRIE_32, or UCPTRIE_8 according to the trie’s value width - * @param src (const char *, in/out) the source text pointer - * @param limit (const char *, in) the limit pointer for the text (must not be NULL) - * @param result (out) variable for the trie lookup result - * @draft ICU 63 - */ -#define UCPTRIE_FAST_U8_NEXT(trie, dataAccess, src, limit, result) { \ - int32_t __lead = (uint8_t)*(src)++; \ - if (!U8_IS_SINGLE(__lead)) { \ - uint8_t __t1, __t2, __t3; \ - if ((src) != (limit) && \ - (__lead >= 0xe0 ? \ - __lead < 0xf0 ? /* U+0800..U+FFFF except surrogates */ \ - U8_LEAD3_T1_BITS[__lead &= 0xf] & (1 << ((__t1 = *(src)) >> 5)) && \ - ++(src) != (limit) && (__t2 = *(src) - 0x80) <= 0x3f && \ - (__lead = ((int32_t)(trie)->index[(__lead << 6) + (__t1 & 0x3f)]) + __t2, 1) \ - : /* U+10000..U+10FFFF */ \ - (__lead -= 0xf0) <= 4 && \ - U8_LEAD4_T1_BITS[(__t1 = *(src)) >> 4] & (1 << __lead) && \ - (__lead = (__lead << 6) | (__t1 & 0x3f), ++(src) != (limit)) && \ - (__t2 = *(src) - 0x80) <= 0x3f && \ - ++(src) != (limit) && (__t3 = *(src) - 0x80) <= 0x3f && \ - (__lead = __lead >= (trie)->shifted12HighStart ? \ - (trie)->dataLength - UCPTRIE_HIGH_VALUE_NEG_DATA_OFFSET : \ - ucptrie_internalSmallU8Index((trie), __lead, __t2, __t3), 1) \ - : /* U+0080..U+07FF */ \ - __lead >= 0xc2 && (__t1 = *(src) - 0x80) <= 0x3f && \ - (__lead = (int32_t)(trie)->index[__lead & 0x1f] + __t1, 1))) { \ - ++(src); \ - } else { \ - __lead = (trie)->dataLength - UCPTRIE_ERROR_VALUE_NEG_DATA_OFFSET; /* ill-formed*/ \ - } \ - } \ - (result) = dataAccess(trie, __lead); \ -} - -/** - * UTF-8: Pre-decrements src and gets a value from the trie. - * Sets the trie error value for an ill-formed byte sequence. - * - * Unlike UCPTRIE_FAST_U16_PREV() this UTF-8 macro does not provide the code point - * because it would be more work to do so and is often not needed. - * If the trie value differs from the error value, then the byte sequence is well-formed, - * and the code point can be assembled without revalidation. - * - * @param trie (const UCPTrie *, in) the trie; must have type UCPTRIE_TYPE_FAST - * @param dataAccess UCPTRIE_16, UCPTRIE_32, or UCPTRIE_8 according to the trie’s value width - * @param start (const char *, in) the start pointer for the text - * @param src (const char *, in/out) the source text pointer - * @param result (out) variable for the trie lookup result - * @draft ICU 63 - */ -#define UCPTRIE_FAST_U8_PREV(trie, dataAccess, start, src, result) { \ - int32_t __index = (uint8_t)*--(src); \ - if (!U8_IS_SINGLE(__index)) { \ - __index = ucptrie_internalU8PrevIndex((trie), __index, (const uint8_t *)(start), \ - (const uint8_t *)(src)); \ - (src) -= __index & 7; \ - __index >>= 3; \ - } \ - (result) = dataAccess(trie, __index); \ -} - -/** - * Returns a trie value for an ASCII code point, without range checking. - * - * @param trie (const UCPTrie *, in) the trie (of either fast or small type) - * @param dataAccess UCPTRIE_16, UCPTRIE_32, or UCPTRIE_8 according to the trie’s value width - * @param c (UChar32, in) the input code point; must be U+0000..U+007F - * @return The ASCII code point's trie value. - * @draft ICU 63 - */ -#define UCPTRIE_ASCII_GET(trie, dataAccess, c) dataAccess(trie, c) - -/** - * Returns a trie value for a BMP code point (U+0000..U+FFFF), without range checking. - * Can be used to look up a value for a UTF-16 code unit if other parts of - * the string processing check for surrogates. - * - * @param trie (const UCPTrie *, in) the trie; must have type UCPTRIE_TYPE_FAST - * @param dataAccess UCPTRIE_16, UCPTRIE_32, or UCPTRIE_8 according to the trie’s value width - * @param c (UChar32, in) the input code point, must be U+0000..U+FFFF - * @return The BMP code point's trie value. - * @draft ICU 63 - */ -#define UCPTRIE_FAST_BMP_GET(trie, dataAccess, c) dataAccess(trie, _UCPTRIE_FAST_INDEX(trie, c)) - -/** - * Returns a trie value for a supplementary code point (U+10000..U+10FFFF), - * without range checking. - * - * @param trie (const UCPTrie *, in) the trie; must have type UCPTRIE_TYPE_FAST - * @param dataAccess UCPTRIE_16, UCPTRIE_32, or UCPTRIE_8 according to the trie’s value width - * @param c (UChar32, in) the input code point, must be U+10000..U+10FFFF - * @return The supplementary code point's trie value. - * @draft ICU 63 - */ -#define UCPTRIE_FAST_SUPP_GET(trie, dataAccess, c) dataAccess(trie, _UCPTRIE_SMALL_INDEX(trie, c)) - -/* Internal definitions ----------------------------------------------------- */ - -#ifndef U_IN_DOXYGEN - -/** - * Internal implementation constants. - * These are needed for the API macros, but users should not use these directly. - * @internal - */ -enum { - /** @internal */ - UCPTRIE_FAST_SHIFT = 6, - - /** Number of entries in a data block for code points below the fast limit. 64=0x40 @internal */ - UCPTRIE_FAST_DATA_BLOCK_LENGTH = 1 << UCPTRIE_FAST_SHIFT, - - /** Mask for getting the lower bits for the in-fast-data-block offset. @internal */ - UCPTRIE_FAST_DATA_MASK = UCPTRIE_FAST_DATA_BLOCK_LENGTH - 1, - - /** @internal */ - UCPTRIE_SMALL_MAX = 0xfff, - - /** - * Offset from dataLength (to be subtracted) for fetching the - * value returned for out-of-range code points and ill-formed UTF-8/16. - * @internal - */ - UCPTRIE_ERROR_VALUE_NEG_DATA_OFFSET = 1, - /** - * Offset from dataLength (to be subtracted) for fetching the - * value returned for code points highStart..U+10FFFF. - * @internal - */ - UCPTRIE_HIGH_VALUE_NEG_DATA_OFFSET = 2 -}; - -/* Internal functions and macros -------------------------------------------- */ -// Do not conditionalize with #ifndef U_HIDE_INTERNAL_API, needed for public API - -/** @internal */ -U_INTERNAL int32_t U_EXPORT2 -ucptrie_internalSmallIndex(const UCPTrie *trie, UChar32 c); - -/** @internal */ -U_INTERNAL int32_t U_EXPORT2 -ucptrie_internalSmallU8Index(const UCPTrie *trie, int32_t lt1, uint8_t t2, uint8_t t3); - -/** - * Internal function for part of the UCPTRIE_FAST_U8_PREVxx() macro implementations. - * Do not call directly. - * @internal - */ -U_INTERNAL int32_t U_EXPORT2 -ucptrie_internalU8PrevIndex(const UCPTrie *trie, UChar32 c, - const uint8_t *start, const uint8_t *src); - -/** Internal trie getter for a code point below the fast limit. Returns the data index. @internal */ -#define _UCPTRIE_FAST_INDEX(trie, c) \ - ((int32_t)(trie)->index[(c) >> UCPTRIE_FAST_SHIFT] + ((c) & UCPTRIE_FAST_DATA_MASK)) - -/** Internal trie getter for a code point at or above the fast limit. Returns the data index. @internal */ -#define _UCPTRIE_SMALL_INDEX(trie, c) \ - ((c) >= (trie)->highStart ? \ - (trie)->dataLength - UCPTRIE_HIGH_VALUE_NEG_DATA_OFFSET : \ - ucptrie_internalSmallIndex(trie, c)) - -/** - * Internal trie getter for a code point, with checking that c is in U+0000..10FFFF. - * Returns the data index. - * @internal - */ -#define _UCPTRIE_CP_INDEX(trie, fastMax, c) \ - ((uint32_t)(c) <= (uint32_t)(fastMax) ? \ - _UCPTRIE_FAST_INDEX(trie, c) : \ - (uint32_t)(c) <= 0x10ffff ? \ - _UCPTRIE_SMALL_INDEX(trie, c) : \ - (trie)->dataLength - UCPTRIE_ERROR_VALUE_NEG_DATA_OFFSET) - -U_CDECL_END - -#endif // U_IN_DOXYGEN -#endif // U_HIDE_DRAFT_API -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucsdet.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucsdet.h deleted file mode 100644 index 892f3ee412..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucsdet.h +++ /dev/null @@ -1,422 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ********************************************************************** - * Copyright (C) 2005-2013, International Business Machines - * Corporation and others. All Rights Reserved. - ********************************************************************** - * file name: ucsdet.h - * encoding: UTF-8 - * indentation:4 - * - * created on: 2005Aug04 - * created by: Andy Heninger - * - * ICU Character Set Detection, API for C - * - * Draft version 18 Oct 2005 - * - */ - -#ifndef __UCSDET_H -#define __UCSDET_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_CONVERSION - -#include "unicode/localpointer.h" -#include "unicode/uenum.h" - -/** - * \file - * \brief C API: Charset Detection API - * - * This API provides a facility for detecting the - * charset or encoding of character data in an unknown text format. - * The input data can be from an array of bytes. - *

- * Character set detection is at best an imprecise operation. The detection - * process will attempt to identify the charset that best matches the characteristics - * of the byte data, but the process is partly statistical in nature, and - * the results can not be guaranteed to always be correct. - *

- * For best accuracy in charset detection, the input data should be primarily - * in a single language, and a minimum of a few hundred bytes worth of plain text - * in the language are needed. The detection process will attempt to - * ignore html or xml style markup that could otherwise obscure the content. - *

- * An alternative to the ICU Charset Detector is the - * Compact Encoding Detector, https://github.com/google/compact_enc_det. - * It often gives more accurate results, especially with short input samples. - */ - - -struct UCharsetDetector; -/** - * Structure representing a charset detector - * @stable ICU 3.6 - */ -typedef struct UCharsetDetector UCharsetDetector; - -struct UCharsetMatch; -/** - * Opaque structure representing a match that was identified - * from a charset detection operation. - * @stable ICU 3.6 - */ -typedef struct UCharsetMatch UCharsetMatch; - -/** - * Open a charset detector. - * - * @param status Any error conditions occurring during the open - * operation are reported back in this variable. - * @return the newly opened charset detector. - * @stable ICU 3.6 - */ -U_STABLE UCharsetDetector * U_EXPORT2 -ucsdet_open(UErrorCode *status); - -/** - * Close a charset detector. All storage and any other resources - * owned by this charset detector will be released. Failure to - * close a charset detector when finished with it can result in - * memory leaks in the application. - * - * @param ucsd The charset detector to be closed. - * @stable ICU 3.6 - */ -U_STABLE void U_EXPORT2 -ucsdet_close(UCharsetDetector *ucsd); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUCharsetDetectorPointer - * "Smart pointer" class, closes a UCharsetDetector via ucsdet_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUCharsetDetectorPointer, UCharsetDetector, ucsdet_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Set the input byte data whose charset is to detected. - * - * Ownership of the input text byte array remains with the caller. - * The input string must not be altered or deleted until the charset - * detector is either closed or reset to refer to different input text. - * - * @param ucsd the charset detector to be used. - * @param textIn the input text of unknown encoding. . - * @param len the length of the input text, or -1 if the text - * is NUL terminated. - * @param status any error conditions are reported back in this variable. - * - * @stable ICU 3.6 - */ -U_STABLE void U_EXPORT2 -ucsdet_setText(UCharsetDetector *ucsd, const char *textIn, int32_t len, UErrorCode *status); - - -/** Set the declared encoding for charset detection. - * The declared encoding of an input text is an encoding obtained - * by the user from an http header or xml declaration or similar source that - * can be provided as an additional hint to the charset detector. - * - * How and whether the declared encoding will be used during the - * detection process is TBD. - * - * @param ucsd the charset detector to be used. - * @param encoding an encoding for the current data obtained from - * a header or declaration or other source outside - * of the byte data itself. - * @param length the length of the encoding name, or -1 if the name string - * is NUL terminated. - * @param status any error conditions are reported back in this variable. - * - * @stable ICU 3.6 - */ -U_STABLE void U_EXPORT2 -ucsdet_setDeclaredEncoding(UCharsetDetector *ucsd, const char *encoding, int32_t length, UErrorCode *status); - - -/** - * Return the charset that best matches the supplied input data. - * - * Note though, that because the detection - * only looks at the start of the input data, - * there is a possibility that the returned charset will fail to handle - * the full set of input data. - *

- * The returned UCharsetMatch object is owned by the UCharsetDetector. - * It will remain valid until the detector input is reset, or until - * the detector is closed. - *

- * The function will fail if - *

    - *
  • no charset appears to match the data.
  • - *
  • no input text has been provided
  • - *
- * - * @param ucsd the charset detector to be used. - * @param status any error conditions are reported back in this variable. - * @return a UCharsetMatch representing the best matching charset, - * or NULL if no charset matches the byte data. - * - * @stable ICU 3.6 - */ -U_STABLE const UCharsetMatch * U_EXPORT2 -ucsdet_detect(UCharsetDetector *ucsd, UErrorCode *status); - - -/** - * Find all charset matches that appear to be consistent with the input, - * returning an array of results. The results are ordered with the - * best quality match first. - * - * Because the detection only looks at a limited amount of the - * input byte data, some of the returned charsets may fail to handle - * the all of input data. - *

- * The returned UCharsetMatch objects are owned by the UCharsetDetector. - * They will remain valid until the detector is closed or modified - * - *

- * Return an error if - *

    - *
  • no charsets appear to match the input data.
  • - *
  • no input text has been provided
  • - *
- * - * @param ucsd the charset detector to be used. - * @param matchesFound pointer to a variable that will be set to the - * number of charsets identified that are consistent with - * the input data. Output only. - * @param status any error conditions are reported back in this variable. - * @return A pointer to an array of pointers to UCharSetMatch objects. - * This array, and the UCharSetMatch instances to which it refers, - * are owned by the UCharsetDetector, and will remain valid until - * the detector is closed or modified. - * @stable ICU 3.6 - */ -U_STABLE const UCharsetMatch ** U_EXPORT2 -ucsdet_detectAll(UCharsetDetector *ucsd, int32_t *matchesFound, UErrorCode *status); - - - -/** - * Get the name of the charset represented by a UCharsetMatch. - * - * The storage for the returned name string is owned by the - * UCharsetMatch, and will remain valid while the UCharsetMatch - * is valid. - * - * The name returned is suitable for use with the ICU conversion APIs. - * - * @param ucsm The charset match object. - * @param status Any error conditions are reported back in this variable. - * @return The name of the matching charset. - * - * @stable ICU 3.6 - */ -U_STABLE const char * U_EXPORT2 -ucsdet_getName(const UCharsetMatch *ucsm, UErrorCode *status); - -/** - * Get a confidence number for the quality of the match of the byte - * data with the charset. Confidence numbers range from zero to 100, - * with 100 representing complete confidence and zero representing - * no confidence. - * - * The confidence values are somewhat arbitrary. They define an - * an ordering within the results for any single detection operation - * but are not generally comparable between the results for different input. - * - * A confidence value of ten does have a general meaning - it is used - * for charsets that can represent the input data, but for which there - * is no other indication that suggests that the charset is the correct one. - * Pure 7 bit ASCII data, for example, is compatible with a - * great many charsets, most of which will appear as possible matches - * with a confidence of 10. - * - * @param ucsm The charset match object. - * @param status Any error conditions are reported back in this variable. - * @return A confidence number for the charset match. - * - * @stable ICU 3.6 - */ -U_STABLE int32_t U_EXPORT2 -ucsdet_getConfidence(const UCharsetMatch *ucsm, UErrorCode *status); - -/** - * Get the RFC 3066 code for the language of the input data. - * - * The Charset Detection service is intended primarily for detecting - * charsets, not language. For some, but not all, charsets, a language is - * identified as a byproduct of the detection process, and that is what - * is returned by this function. - * - * CAUTION: - * 1. Language information is not available for input data encoded in - * all charsets. In particular, no language is identified - * for UTF-8 input data. - * - * 2. Closely related languages may sometimes be confused. - * - * If more accurate language detection is required, a linguistic - * analysis package should be used. - * - * The storage for the returned name string is owned by the - * UCharsetMatch, and will remain valid while the UCharsetMatch - * is valid. - * - * @param ucsm The charset match object. - * @param status Any error conditions are reported back in this variable. - * @return The RFC 3066 code for the language of the input data, or - * an empty string if the language could not be determined. - * - * @stable ICU 3.6 - */ -U_STABLE const char * U_EXPORT2 -ucsdet_getLanguage(const UCharsetMatch *ucsm, UErrorCode *status); - - -/** - * Get the entire input text as a UChar string, placing it into - * a caller-supplied buffer. A terminating - * NUL character will be appended to the buffer if space is available. - * - * The number of UChars in the output string, not including the terminating - * NUL, is returned. - * - * If the supplied buffer is smaller than required to hold the output, - * the contents of the buffer are undefined. The full output string length - * (in UChars) is returned as always, and can be used to allocate a buffer - * of the correct size. - * - * - * @param ucsm The charset match object. - * @param buf A UChar buffer to be filled with the converted text data. - * @param cap The capacity of the buffer in UChars. - * @param status Any error conditions are reported back in this variable. - * @return The number of UChars in the output string. - * - * @stable ICU 3.6 - */ -U_STABLE int32_t U_EXPORT2 -ucsdet_getUChars(const UCharsetMatch *ucsm, - UChar *buf, int32_t cap, UErrorCode *status); - - - -/** - * Get an iterator over the set of all detectable charsets - - * over the charsets that are known to the charset detection - * service. - * - * The returned UEnumeration provides access to the names of - * the charsets. - * - *

- * The state of the Charset detector that is passed in does not - * affect the result of this function, but requiring a valid, open - * charset detector as a parameter insures that the charset detection - * service has been safely initialized and that the required detection - * data is available. - * - *

- * Note: Multiple different charset encodings in a same family may use - * a single shared name in this implementation. For example, this method returns - * an array including "ISO-8859-1" (ISO Latin 1), but not including "windows-1252" - * (Windows Latin 1). However, actual detection result could be "windows-1252" - * when the input data matches Latin 1 code points with any points only available - * in "windows-1252". - * - * @param ucsd a Charset detector. - * @param status Any error conditions are reported back in this variable. - * @return an iterator providing access to the detectable charset names. - * @stable ICU 3.6 - */ -U_STABLE UEnumeration * U_EXPORT2 -ucsdet_getAllDetectableCharsets(const UCharsetDetector *ucsd, UErrorCode *status); - -/** - * Test whether input filtering is enabled for this charset detector. - * Input filtering removes text that appears to be HTML or xml - * markup from the input before applying the code page detection - * heuristics. Apple addition per : Will also - * remove text that appears to be CSS declaration blocks. - * - * @param ucsd The charset detector to check. - * @return TRUE if filtering is enabled. - * @stable ICU 3.6 - */ - -U_STABLE UBool U_EXPORT2 -ucsdet_isInputFilterEnabled(const UCharsetDetector *ucsd); - - -/** - * Enable filtering of input text. If filtering is enabled, - * text within angle brackets ("<" and ">") will be removed - * before detection, which will remove most HTML or xml markup. - * Apple addition per : Will also - * remove text between '{' and '}', e.g. CSS declaration blocks. - * - * @param ucsd the charset detector to be modified. - * @param filter true to enable input text filtering. - * @return The previous setting. - * - * @stable ICU 3.6 - */ -U_STABLE UBool U_EXPORT2 -ucsdet_enableInputFilter(UCharsetDetector *ucsd, UBool filter); - -#ifndef U_HIDE_INTERNAL_API -/** - * Get an iterator over the set of detectable charsets - - * over the charsets that are enabled by the specified charset detector. - * - * The returned UEnumeration provides access to the names of - * the charsets. - * - * @param ucsd a Charset detector. - * @param status Any error conditions are reported back in this variable. - * @return an iterator providing access to the detectable charset names by - * the specified charset detector. - * @internal - */ -U_INTERNAL UEnumeration * U_EXPORT2 -ucsdet_getDetectableCharsets(const UCharsetDetector *ucsd, UErrorCode *status); - -/** - * Enable or disable individual charset encoding. - * A name of charset encoding must be included in the names returned by - * {@link #ucsdet_getAllDetectableCharsets()}. - * - * @param ucsd a Charset detector. - * @param encoding encoding the name of charset encoding. - * @param enabled TRUE to enable, or FALSE to disable the - * charset encoding. - * @param status receives the return status. When the name of charset encoding - * is not supported, U_ILLEGAL_ARGUMENT_ERROR is set. - * @internal - */ -U_INTERNAL void U_EXPORT2 -ucsdet_setDetectableCharset(UCharsetDetector *ucsd, const char *encoding, UBool enabled, UErrorCode *status); -#endif /* U_HIDE_INTERNAL_API */ - -#endif -#endif /* __UCSDET_H */ - - diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucurr.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucurr.h deleted file mode 100644 index c915327d38..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ucurr.h +++ /dev/null @@ -1,445 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (c) 2002-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -*/ -#ifndef _UCURR_H_ -#define _UCURR_H_ - -#include "unicode/utypes.h" -#include "unicode/uenum.h" - -/** - * \file - * \brief C API: Encapsulates information about a currency. - * - * The ucurr API encapsulates information about a currency, as defined by - * ISO 4217. A currency is represented by a 3-character string - * containing its ISO 4217 code. This API can return various data - * necessary the proper display of a currency: - * - *

  • A display symbol, for a specific locale - *
  • The number of fraction digits to display - *
  • A rounding increment - *
- * - * The DecimalFormat class uses these data to display - * currencies. - * @author Alan Liu - * @since ICU 2.2 - */ - -#if !UCONFIG_NO_FORMATTING - -/** - * Currency Usage used for Decimal Format - * @stable ICU 54 - */ -enum UCurrencyUsage { - /** - * a setting to specify currency usage which determines currency digit - * and rounding for standard usage, for example: "50.00 NT$" - * used as DEFAULT value - * @stable ICU 54 - */ - UCURR_USAGE_STANDARD=0, - /** - * a setting to specify currency usage which determines currency digit - * and rounding for cash usage, for example: "50 NT$" - * @stable ICU 54 - */ - UCURR_USAGE_CASH=1, -#ifndef U_HIDE_DEPRECATED_API - /** - * One higher than the last enum UCurrencyUsage constant. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UCURR_USAGE_COUNT=2 -#endif // U_HIDE_DEPRECATED_API -}; -/** Currency Usage used for Decimal Format */ -typedef enum UCurrencyUsage UCurrencyUsage; - -/** - * Finds a currency code for the given locale. - * @param locale the locale for which to retrieve a currency code. - * Currency can be specified by the "currency" keyword - * in which case it overrides the default currency code - * @param buff fill in buffer. Can be NULL for preflighting. - * @param buffCapacity capacity of the fill in buffer. Can be 0 for - * preflighting. If it is non-zero, the buff parameter - * must not be NULL. - * @param ec error code - * @return length of the currency string. It should always be 3. If 0, - * currency couldn't be found or the input values are - * invalid. - * @stable ICU 2.8 - */ -U_STABLE int32_t U_EXPORT2 -ucurr_forLocale(const char* locale, - UChar* buff, - int32_t buffCapacity, - UErrorCode* ec); - -/** - * Selector constants for ucurr_getName(). - * - * @see ucurr_getName - * @stable ICU 2.6 - */ -typedef enum UCurrNameStyle { - /** - * Selector for ucurr_getName indicating a symbolic name for a - * currency, such as "$" for USD. - * @stable ICU 2.6 - */ - UCURR_SYMBOL_NAME, - - /** - * Selector for ucurr_getName indicating the long name for a - * currency, such as "US Dollar" for USD. - * @stable ICU 2.6 - */ - UCURR_LONG_NAME, - - /** - * Selector for getName() indicating the narrow currency symbol. - * The narrow currency symbol is similar to the regular currency - * symbol, but it always takes the shortest form: for example, - * "$" instead of "US$" for USD in en-CA. - * - * @stable ICU 61 - */ - UCURR_NARROW_SYMBOL_NAME -} UCurrNameStyle; - -#if !UCONFIG_NO_SERVICE -/** - * @stable ICU 2.6 - */ -typedef const void* UCurrRegistryKey; - -/** - * Register an (existing) ISO 4217 currency code for the given locale. - * Only the country code and the two variants EURO and PRE_EURO are - * recognized. - * @param isoCode the three-letter ISO 4217 currency code - * @param locale the locale for which to register this currency code - * @param status the in/out status code - * @return a registry key that can be used to unregister this currency code, or NULL - * if there was an error. - * @stable ICU 2.6 - */ -U_STABLE UCurrRegistryKey U_EXPORT2 -ucurr_register(const UChar* isoCode, - const char* locale, - UErrorCode* status); -/** - * Unregister the previously-registered currency definitions using the - * URegistryKey returned from ucurr_register. Key becomes invalid after - * a successful call and should not be used again. Any currency - * that might have been hidden by the original ucurr_register call is - * restored. - * @param key the registry key returned by a previous call to ucurr_register - * @param status the in/out status code, no special meanings are assigned - * @return TRUE if the currency for this key was successfully unregistered - * @stable ICU 2.6 - */ -U_STABLE UBool U_EXPORT2 -ucurr_unregister(UCurrRegistryKey key, UErrorCode* status); -#endif /* UCONFIG_NO_SERVICE */ - -/** - * Returns the display name for the given currency in the - * given locale. For example, the display name for the USD - * currency object in the en_US locale is "$". - * @param currency null-terminated 3-letter ISO 4217 code - * @param locale locale in which to display currency - * @param nameStyle selector for which kind of name to return - * @param isChoiceFormat fill-in set to TRUE if the returned value - * is a ChoiceFormat pattern; otherwise it is a static string - * @param len fill-in parameter to receive length of result - * @param ec error code - * @return pointer to display string of 'len' UChars. If the resource - * data contains no entry for 'currency', then 'currency' itself is - * returned. If *isChoiceFormat is TRUE, then the result is a - * ChoiceFormat pattern. Otherwise it is a static string. - * @stable ICU 2.6 - */ -U_STABLE const UChar* U_EXPORT2 -ucurr_getName(const UChar* currency, - const char* locale, - UCurrNameStyle nameStyle, - UBool* isChoiceFormat, - int32_t* len, - UErrorCode* ec); - -/** - * Returns the plural name for the given currency in the - * given locale. For example, the plural name for the USD - * currency object in the en_US locale is "US dollar" or "US dollars". - * @param currency null-terminated 3-letter ISO 4217 code - * @param locale locale in which to display currency - * @param isChoiceFormat fill-in set to TRUE if the returned value - * is a ChoiceFormat pattern; otherwise it is a static string - * @param pluralCount plural count - * @param len fill-in parameter to receive length of result - * @param ec error code - * @return pointer to display string of 'len' UChars. If the resource - * data contains no entry for 'currency', then 'currency' itself is - * returned. - * @stable ICU 4.2 - */ -U_STABLE const UChar* U_EXPORT2 -ucurr_getPluralName(const UChar* currency, - const char* locale, - UBool* isChoiceFormat, - const char* pluralCount, - int32_t* len, - UErrorCode* ec); - -/** - * Returns the number of the number of fraction digits that should - * be displayed for the given currency. - * This is equivalent to ucurr_getDefaultFractionDigitsForUsage(currency,UCURR_USAGE_STANDARD,ec); - * - * Important: The number of fraction digits for a given currency is NOT - * guaranteed to be constant across versions of ICU or CLDR. For example, - * do NOT use this value as a mechanism for deciding the magnitude used - * to store currency values in a database. You should use this value for - * display purposes only. - * - * @param currency null-terminated 3-letter ISO 4217 code - * @param ec input-output error code - * @return a non-negative number of fraction digits to be - * displayed, or 0 if there is an error - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -ucurr_getDefaultFractionDigits(const UChar* currency, - UErrorCode* ec); - -/** - * Returns the number of the number of fraction digits that should - * be displayed for the given currency with usage. - * - * Important: The number of fraction digits for a given currency is NOT - * guaranteed to be constant across versions of ICU or CLDR. For example, - * do NOT use this value as a mechanism for deciding the magnitude used - * to store currency values in a database. You should use this value for - * display purposes only. - * - * @param currency null-terminated 3-letter ISO 4217 code - * @param usage enum usage for the currency - * @param ec input-output error code - * @return a non-negative number of fraction digits to be - * displayed, or 0 if there is an error - * @stable ICU 54 - */ -U_STABLE int32_t U_EXPORT2 -ucurr_getDefaultFractionDigitsForUsage(const UChar* currency, - const UCurrencyUsage usage, - UErrorCode* ec); - -/** - * Returns the rounding increment for the given currency, or 0.0 if no - * rounding is done by the currency. - * This is equivalent to ucurr_getRoundingIncrementForUsage(currency,UCURR_USAGE_STANDARD,ec); - * @param currency null-terminated 3-letter ISO 4217 code - * @param ec input-output error code - * @return the non-negative rounding increment, or 0.0 if none, - * or 0.0 if there is an error - * @stable ICU 3.0 - */ -U_STABLE double U_EXPORT2 -ucurr_getRoundingIncrement(const UChar* currency, - UErrorCode* ec); - -/** - * Returns the rounding increment for the given currency, or 0.0 if no - * rounding is done by the currency given usage. - * @param currency null-terminated 3-letter ISO 4217 code - * @param usage enum usage for the currency - * @param ec input-output error code - * @return the non-negative rounding increment, or 0.0 if none, - * or 0.0 if there is an error - * @stable ICU 54 - */ -U_STABLE double U_EXPORT2 -ucurr_getRoundingIncrementForUsage(const UChar* currency, - const UCurrencyUsage usage, - UErrorCode* ec); - -/** - * Selector constants for ucurr_openCurrencies(). - * - * @see ucurr_openCurrencies - * @stable ICU 3.2 - */ -typedef enum UCurrCurrencyType { - /** - * Select all ISO-4217 currency codes. - * @stable ICU 3.2 - */ - UCURR_ALL = INT32_MAX, - /** - * Select only ISO-4217 commonly used currency codes. - * These currencies can be found in common use, and they usually have - * bank notes or coins associated with the currency code. - * This does not include fund codes, precious metals and other - * various ISO-4217 codes limited to special financial products. - * @stable ICU 3.2 - */ - UCURR_COMMON = 1, - /** - * Select ISO-4217 uncommon currency codes. - * These codes respresent fund codes, precious metals and other - * various ISO-4217 codes limited to special financial products. - * A fund code is a monetary resource associated with a currency. - * @stable ICU 3.2 - */ - UCURR_UNCOMMON = 2, - /** - * Select only deprecated ISO-4217 codes. - * These codes are no longer in general public use. - * @stable ICU 3.2 - */ - UCURR_DEPRECATED = 4, - /** - * Select only non-deprecated ISO-4217 codes. - * These codes are in general public use. - * @stable ICU 3.2 - */ - UCURR_NON_DEPRECATED = 8 -} UCurrCurrencyType; - -/** - * Provides a UEnumeration object for listing ISO-4217 codes. - * @param currType You can use one of several UCurrCurrencyType values for this - * variable. You can also | (or) them together to get a specific list of - * currencies. Most people will want to use the (UCURR_CURRENCY|UCURR_NON_DEPRECATED) value to - * get a list of current currencies. - * @param pErrorCode Error code - * @stable ICU 3.2 - */ -U_STABLE UEnumeration * U_EXPORT2 -ucurr_openISOCurrencies(uint32_t currType, UErrorCode *pErrorCode); - -/** - * Queries if the given ISO 4217 3-letter code is available on the specified date range. - * - * Note: For checking availability of a currency on a specific date, specify the date on both 'from' and 'to' - * - * When 'from' is U_DATE_MIN and 'to' is U_DATE_MAX, this method checks if the specified currency is available any time. - * If 'from' and 'to' are same UDate value, this method checks if the specified currency is available on that date. - * - * @param isoCode - * The ISO 4217 3-letter code. - * - * @param from - * The lower bound of the date range, inclusive. When 'from' is U_DATE_MIN, check the availability - * of the currency any date before 'to' - * - * @param to - * The upper bound of the date range, inclusive. When 'to' is U_DATE_MAX, check the availability of - * the currency any date after 'from' - * - * @param errorCode - * ICU error code - * - * @return TRUE if the given ISO 4217 3-letter code is supported on the specified date range. - * - * @stable ICU 4.8 - */ -U_STABLE UBool U_EXPORT2 -ucurr_isAvailable(const UChar* isoCode, - UDate from, - UDate to, - UErrorCode* errorCode); - -/** - * Finds the number of valid currency codes for the - * given locale and date. - * @param locale the locale for which to retrieve the - * currency count. - * @param date the date for which to retrieve the - * currency count for the given locale. - * @param ec error code - * @return the number of currency codes for the - * given locale and date. If 0, currency - * codes couldn't be found for the input - * values are invalid. - * @stable ICU 4.0 - */ -U_STABLE int32_t U_EXPORT2 -ucurr_countCurrencies(const char* locale, - UDate date, - UErrorCode* ec); - -/** - * Finds a currency code for the given locale and date - * @param locale the locale for which to retrieve a currency code. - * Currency can be specified by the "currency" keyword - * in which case it overrides the default currency code - * @param date the date for which to retrieve a currency code for - * the given locale. - * @param index the index within the available list of currency codes - * for the given locale on the given date. - * @param buff fill in buffer. Can be NULL for preflighting. - * @param buffCapacity capacity of the fill in buffer. Can be 0 for - * preflighting. If it is non-zero, the buff parameter - * must not be NULL. - * @param ec error code - * @return length of the currency string. It should always be 3. - * If 0, currency couldn't be found or the input values are - * invalid. - * @stable ICU 4.0 - */ -U_STABLE int32_t U_EXPORT2 -ucurr_forLocaleAndDate(const char* locale, - UDate date, - int32_t index, - UChar* buff, - int32_t buffCapacity, - UErrorCode* ec); - -/** - * Given a key and a locale, returns an array of string values in a preferred - * order that would make a difference. These are all and only those values where - * the open (creation) of the service with the locale formed from the input locale - * plus input keyword and that value has different behavior than creation with the - * input locale alone. - * @param key one of the keys supported by this service. For now, only - * "currency" is supported. - * @param locale the locale - * @param commonlyUsed if set to true it will return only commonly used values - * with the given locale in preferred order. Otherwise, - * it will return all the available values for the locale. - * @param status error status - * @return a string enumeration over keyword values for the given key and the locale. - * @stable ICU 4.2 - */ -U_STABLE UEnumeration* U_EXPORT2 -ucurr_getKeywordValuesForLocale(const char* key, - const char* locale, - UBool commonlyUsed, - UErrorCode* status); - -/** - * Returns the ISO 4217 numeric code for the currency. - *

Note: If the ISO 4217 numeric code is not assigned for the currency or - * the currency is unknown, this function returns 0. - * - * @param currency null-terminated 3-letter ISO 4217 code - * @return The ISO 4217 numeric code of the currency - * @stable ICU 49 - */ -U_STABLE int32_t U_EXPORT2 -ucurr_getNumericCode(const UChar* currency); - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udat.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udat.h deleted file mode 100644 index 9368ee78eb..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udat.h +++ /dev/null @@ -1,1691 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * Copyright (C) 1996-2016, International Business Machines - * Corporation and others. All Rights Reserved. - ******************************************************************************* -*/ - -#ifndef UDAT_H -#define UDAT_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/localpointer.h" -#include "unicode/ucal.h" -#include "unicode/unum.h" -#include "unicode/udisplaycontext.h" -#include "unicode/ufieldpositer.h" -/** - * \file - * \brief C API: DateFormat - * - *

Date Format C API

- * - * Date Format C API consists of functions that convert dates and - * times from their internal representations to textual form and back again in a - * language-independent manner. Converting from the internal representation (milliseconds - * since midnight, January 1, 1970) to text is known as "formatting," and converting - * from text to millis is known as "parsing." We currently define only one concrete - * structure UDateFormat, which can handle pretty much all normal - * date formatting and parsing actions. - *

- * Date Format helps you to format and parse dates for any locale. Your code can - * be completely independent of the locale conventions for months, days of the - * week, or even the calendar format: lunar vs. solar. - *

- * To format a date for the current Locale with default time and date style, - * use one of the static factory methods: - *

- * \code
- *  UErrorCode status = U_ZERO_ERROR;
- *  UChar *myString;
- *  int32_t myStrlen = 0;
- *  UDateFormat* dfmt = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, NULL, -1, NULL, -1, &status);
- *  myStrlen = udat_format(dfmt, myDate, NULL, myStrlen, NULL, &status);
- *  if (status==U_BUFFER_OVERFLOW_ERROR){
- *      status=U_ZERO_ERROR;
- *      myString=(UChar*)malloc(sizeof(UChar) * (myStrlen+1) );
- *      udat_format(dfmt, myDate, myString, myStrlen+1, NULL, &status);
- *  }
- * \endcode
- * 
- * If you are formatting multiple numbers, it is more efficient to get the - * format and use it multiple times so that the system doesn't have to fetch the - * information about the local language and country conventions multiple times. - *
- * \code
- *  UErrorCode status = U_ZERO_ERROR;
- *  int32_t i, myStrlen = 0;
- *  UChar* myString;
- *  char buffer[1024];
- *  UDate myDateArr[] = { 0.0, 100000000.0, 2000000000.0 }; // test values
- *  UDateFormat* df = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, NULL, -1, NULL, 0, &status);
- *  for (i = 0; i < 3; i++) {
- *      myStrlen = udat_format(df, myDateArr[i], NULL, myStrlen, NULL, &status);
- *      if(status == U_BUFFER_OVERFLOW_ERROR){
- *          status = U_ZERO_ERROR;
- *          myString = (UChar*)malloc(sizeof(UChar) * (myStrlen+1) );
- *          udat_format(df, myDateArr[i], myString, myStrlen+1, NULL, &status);
- *          printf("%s\n", u_austrcpy(buffer, myString) );
- *          free(myString);
- *      }
- *  }
- * \endcode
- * 
- * To get specific fields of a date, you can use UFieldPosition to - * get specific fields. - *
- * \code
- *  UErrorCode status = U_ZERO_ERROR;
- *  UFieldPosition pos;
- *  UChar *myString;
- *  int32_t myStrlen = 0;
- *  char buffer[1024];
- *
- *  pos.field = 1;  // Same as the DateFormat::EField enum
- *  UDateFormat* dfmt = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, -1, NULL, 0, &status);
- *  myStrlen = udat_format(dfmt, myDate, NULL, myStrlen, &pos, &status);
- *  if (status==U_BUFFER_OVERFLOW_ERROR){
- *      status=U_ZERO_ERROR;
- *      myString=(UChar*)malloc(sizeof(UChar) * (myStrlen+1) );
- *      udat_format(dfmt, myDate, myString, myStrlen+1, &pos, &status);
- *  }
- *  printf("date format: %s\n", u_austrcpy(buffer, myString));
- *  buffer[pos.endIndex] = 0;   // NULL terminate the string.
- *  printf("UFieldPosition position equals %s\n", &buffer[pos.beginIndex]);
- * \endcode
- * 
- * To format a date for a different Locale, specify it in the call to - * udat_open() - *
- * \code
- *        UDateFormat* df = udat_open(UDAT_SHORT, UDAT_SHORT, "fr_FR", NULL, -1, NULL, 0, &status);
- * \endcode
- * 
- * You can use a DateFormat API udat_parse() to parse. - *
- * \code
- *  UErrorCode status = U_ZERO_ERROR;
- *  int32_t parsepos=0;
- *  UDate myDate = udat_parse(df, myString, u_strlen(myString), &parsepos, &status);
- * \endcode
- * 
- * You can pass in different options for the arguments for date and time style - * to control the length of the result; from SHORT to MEDIUM to LONG to FULL. - * The exact result depends on the locale, but generally: - * see UDateFormatStyle for more details - *
    - *
  • UDAT_SHORT is completely numeric, such as 12/13/52 or 3:30pm - *
  • UDAT_MEDIUM is longer, such as Jan 12, 1952 - *
  • UDAT_LONG is longer, such as January 12, 1952 or 3:30:32pm - *
  • UDAT_FULL is pretty completely specified, such as - * Tuesday, April 12, 1952 AD or 3:30:42pm PST. - *
- * You can also set the time zone on the format if you wish. - *

- * You can also use forms of the parse and format methods with Parse Position and - * UFieldPosition to allow you to - *

    - *
  • Progressively parse through pieces of a string. - *
  • Align any particular field, or find out where it is for selection - * on the screen. - *
- *

Date and Time Patterns:

- * - *

Date and time formats are specified by date and time pattern strings. - * Within date and time pattern strings, all unquoted ASCII letters [A-Za-z] are reserved - * as pattern letters representing calendar fields. UDateFormat supports - * the date and time formatting algorithm and pattern letters defined by - * UTS#35 - * Unicode Locale Data Markup Language (LDML) and further documented for ICU in the - * ICU - * User Guide.

- */ - -/** A date formatter. - * For usage in C programs. - * @stable ICU 2.6 - */ -typedef void* UDateFormat; - -/** The possible date/time format styles - * @stable ICU 2.6 - */ -typedef enum UDateFormatStyle { - /** Full style */ - UDAT_FULL, - /** Long style */ - UDAT_LONG, - /** Medium style */ - UDAT_MEDIUM, - /** Short style */ - UDAT_SHORT, - /** Default style */ - UDAT_DEFAULT = UDAT_MEDIUM, - - /** Bitfield for relative date */ - UDAT_RELATIVE = (1 << 7), - - UDAT_FULL_RELATIVE = UDAT_FULL | UDAT_RELATIVE, - - UDAT_LONG_RELATIVE = UDAT_LONG | UDAT_RELATIVE, - - UDAT_MEDIUM_RELATIVE = UDAT_MEDIUM | UDAT_RELATIVE, - - UDAT_SHORT_RELATIVE = UDAT_SHORT | UDAT_RELATIVE, - - - /** No style */ - UDAT_NONE = -1, - - /** - * Use the pattern given in the parameter to udat_open - * @see udat_open - * @stable ICU 50 - */ - UDAT_PATTERN = -2, - -#ifndef U_HIDE_INTERNAL_API - /** @internal alias to UDAT_PATTERN */ - UDAT_IGNORE = UDAT_PATTERN -#endif /* U_HIDE_INTERNAL_API */ -} UDateFormatStyle; - -/* Skeletons for dates. */ - -/** - * Constant for date skeleton with year. - * @stable ICU 4.0 - */ -#define UDAT_YEAR "y" -/** - * Constant for date skeleton with quarter. - * @stable ICU 51 - */ -#define UDAT_QUARTER "QQQQ" -/** - * Constant for date skeleton with abbreviated quarter. - * @stable ICU 51 - */ -#define UDAT_ABBR_QUARTER "QQQ" -/** - * Constant for date skeleton with year and quarter. - * @stable ICU 4.0 - */ -#define UDAT_YEAR_QUARTER "yQQQQ" -/** - * Constant for date skeleton with year and abbreviated quarter. - * @stable ICU 4.0 - */ -#define UDAT_YEAR_ABBR_QUARTER "yQQQ" -/** - * Constant for date skeleton with month. - * @stable ICU 4.0 - */ -#define UDAT_MONTH "MMMM" -/** - * Constant for date skeleton with abbreviated month. - * @stable ICU 4.0 - */ -#define UDAT_ABBR_MONTH "MMM" -/** - * Constant for date skeleton with numeric month. - * @stable ICU 4.0 - */ -#define UDAT_NUM_MONTH "M" -/** - * Constant for date skeleton with year and month. - * @stable ICU 4.0 - */ -#define UDAT_YEAR_MONTH "yMMMM" -/** - * Constant for date skeleton with year and abbreviated month. - * @stable ICU 4.0 - */ -#define UDAT_YEAR_ABBR_MONTH "yMMM" -/** - * Constant for date skeleton with year and numeric month. - * @stable ICU 4.0 - */ -#define UDAT_YEAR_NUM_MONTH "yM" -/** - * Constant for date skeleton with day. - * @stable ICU 4.0 - */ -#define UDAT_DAY "d" -/** - * Constant for date skeleton with year, month, and day. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_YEAR_MONTH_DAY "yMMMMd" -/** - * Constant for date skeleton with year, abbreviated month, and day. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_YEAR_ABBR_MONTH_DAY "yMMMd" -/** - * Constant for date skeleton with year, numeric month, and day. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_YEAR_NUM_MONTH_DAY "yMd" -/** - * Constant for date skeleton with weekday. - * @stable ICU 51 - */ -#define UDAT_WEEKDAY "EEEE" -/** - * Constant for date skeleton with abbreviated weekday. - * @stable ICU 51 - */ -#define UDAT_ABBR_WEEKDAY "E" -/** - * Constant for date skeleton with year, month, weekday, and day. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_YEAR_MONTH_WEEKDAY_DAY "yMMMMEEEEd" -/** - * Constant for date skeleton with year, abbreviated month, weekday, and day. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_YEAR_ABBR_MONTH_WEEKDAY_DAY "yMMMEd" -/** - * Constant for date skeleton with year, numeric month, weekday, and day. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_YEAR_NUM_MONTH_WEEKDAY_DAY "yMEd" -/** - * Constant for date skeleton with long month and day. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_MONTH_DAY "MMMMd" -/** - * Constant for date skeleton with abbreviated month and day. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_ABBR_MONTH_DAY "MMMd" -/** - * Constant for date skeleton with numeric month and day. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_NUM_MONTH_DAY "Md" -/** - * Constant for date skeleton with month, weekday, and day. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_MONTH_WEEKDAY_DAY "MMMMEEEEd" -/** - * Constant for date skeleton with abbreviated month, weekday, and day. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_ABBR_MONTH_WEEKDAY_DAY "MMMEd" -/** - * Constant for date skeleton with numeric month, weekday, and day. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_NUM_MONTH_WEEKDAY_DAY "MEd" - -/* Skeletons for times. */ - -/** - * Constant for date skeleton with hour, with the locale's preferred hour format (12 or 24). - * @stable ICU 4.0 - */ -#define UDAT_HOUR "j" -/** - * Constant for date skeleton with hour in 24-hour presentation. - * @stable ICU 51 - */ -#define UDAT_HOUR24 "H" -/** - * Constant for date skeleton with minute. - * @stable ICU 51 - */ -#define UDAT_MINUTE "m" -/** - * Constant for date skeleton with hour and minute, with the locale's preferred hour format (12 or 24). - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_HOUR_MINUTE "jm" -/** - * Constant for date skeleton with hour and minute in 24-hour presentation. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_HOUR24_MINUTE "Hm" -/** - * Constant for date skeleton with second. - * @stable ICU 51 - */ -#define UDAT_SECOND "s" -/** - * Constant for date skeleton with hour, minute, and second, - * with the locale's preferred hour format (12 or 24). - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_HOUR_MINUTE_SECOND "jms" -/** - * Constant for date skeleton with hour, minute, and second in - * 24-hour presentation. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_HOUR24_MINUTE_SECOND "Hms" -/** - * Constant for date skeleton with minute and second. - * Used in combinations date + time, date + time + zone, or time + zone. - * @stable ICU 4.0 - */ -#define UDAT_MINUTE_SECOND "ms" - -/* Skeletons for time zones. */ - -/** - * Constant for generic location format, such as Los Angeles Time; - * used in combinations date + time + zone, or time + zone. - * @see LDML Date Format Patterns - * @see LDML Time Zone Fallback - * @stable ICU 51 - */ -#define UDAT_LOCATION_TZ "VVVV" -/** - * Constant for generic non-location format, such as Pacific Time; - * used in combinations date + time + zone, or time + zone. - * @see LDML Date Format Patterns - * @see LDML Time Zone Fallback - * @stable ICU 51 - */ -#define UDAT_GENERIC_TZ "vvvv" -/** - * Constant for generic non-location format, abbreviated if possible, such as PT; - * used in combinations date + time + zone, or time + zone. - * @see LDML Date Format Patterns - * @see LDML Time Zone Fallback - * @stable ICU 51 - */ -#define UDAT_ABBR_GENERIC_TZ "v" -/** - * Constant for specific non-location format, such as Pacific Daylight Time; - * used in combinations date + time + zone, or time + zone. - * @see LDML Date Format Patterns - * @see LDML Time Zone Fallback - * @stable ICU 51 - */ -#define UDAT_SPECIFIC_TZ "zzzz" -/** - * Constant for specific non-location format, abbreviated if possible, such as PDT; - * used in combinations date + time + zone, or time + zone. - * @see LDML Date Format Patterns - * @see LDML Time Zone Fallback - * @stable ICU 51 - */ -#define UDAT_ABBR_SPECIFIC_TZ "z" -/** - * Constant for localized GMT/UTC format, such as GMT+8:00 or HPG-8:00; - * used in combinations date + time + zone, or time + zone. - * @see LDML Date Format Patterns - * @see LDML Time Zone Fallback - * @stable ICU 51 - */ -#define UDAT_ABBR_UTC_TZ "ZZZZ" - -/* deprecated skeleton constants */ - -#ifndef U_HIDE_DEPRECATED_API -/** - * Constant for date skeleton with standalone month. - * @deprecated ICU 50 Use UDAT_MONTH instead. - */ -#define UDAT_STANDALONE_MONTH "LLLL" -/** - * Constant for date skeleton with standalone abbreviated month. - * @deprecated ICU 50 Use UDAT_ABBR_MONTH instead. - */ -#define UDAT_ABBR_STANDALONE_MONTH "LLL" - -/** - * Constant for date skeleton with hour, minute, and generic timezone. - * @deprecated ICU 50 Use instead UDAT_HOUR_MINUTE UDAT_ABBR_GENERIC_TZ or some other timezone presentation. - */ -#define UDAT_HOUR_MINUTE_GENERIC_TZ "jmv" -/** - * Constant for date skeleton with hour, minute, and timezone. - * @deprecated ICU 50 Use instead UDAT_HOUR_MINUTE UDAT_ABBR_SPECIFIC_TZ or some other timezone presentation. - */ -#define UDAT_HOUR_MINUTE_TZ "jmz" -/** - * Constant for date skeleton with hour and generic timezone. - * @deprecated ICU 50 Use instead UDAT_HOUR UDAT_ABBR_GENERIC_TZ or some other timezone presentation. - */ -#define UDAT_HOUR_GENERIC_TZ "jv" -/** - * Constant for date skeleton with hour and timezone. - * @deprecated ICU 50 Use instead UDAT_HOUR UDAT_ABBR_SPECIFIC_TZ or some other timezone presentation. - */ -#define UDAT_HOUR_TZ "jz" -#endif /* U_HIDE_DEPRECATED_API */ - -#ifndef U_HIDE_INTERNAL_API -/** - * Constant for Unicode string name of new (in 2019) Japanese calendar era, - * root/English abbreviated version (ASCII-range characters). - * @internal - */ -#define JP_ERA_2019_ROOT "Reiwa" -/** - * Constant for Unicode string name of new (in 2019) Japanese calendar era, - * Japanese abbreviated version (Han, or fullwidth Latin for testing). - * @internal - */ -#define JP_ERA_2019_JA "\\u4EE4\\u548C" -/** - * Constant for Unicode string name of new (in 2019) Japanese calendar era, - * root and Japanese narrow version (ASCII-range characters). - * @internal - */ -#define JP_ERA_2019_NARROW "R" -#endif // U_HIDE_INTERNAL_API - -/** - * FieldPosition and UFieldPosition selectors for format fields - * defined by DateFormat and UDateFormat. - * @stable ICU 3.0 - */ -typedef enum UDateFormatField { - /** - * FieldPosition and UFieldPosition selector for 'G' field alignment, - * corresponding to the UCAL_ERA field. - * @stable ICU 3.0 - */ - UDAT_ERA_FIELD = 0, - - /** - * FieldPosition and UFieldPosition selector for 'y' field alignment, - * corresponding to the UCAL_YEAR field. - * @stable ICU 3.0 - */ - UDAT_YEAR_FIELD = 1, - - /** - * FieldPosition and UFieldPosition selector for 'M' field alignment, - * corresponding to the UCAL_MONTH field. - * @stable ICU 3.0 - */ - UDAT_MONTH_FIELD = 2, - - /** - * FieldPosition and UFieldPosition selector for 'd' field alignment, - * corresponding to the UCAL_DATE field. - * @stable ICU 3.0 - */ - UDAT_DATE_FIELD = 3, - - /** - * FieldPosition and UFieldPosition selector for 'k' field alignment, - * corresponding to the UCAL_HOUR_OF_DAY field. - * UDAT_HOUR_OF_DAY1_FIELD is used for the one-based 24-hour clock. - * For example, 23:59 + 01:00 results in 24:59. - * @stable ICU 3.0 - */ - UDAT_HOUR_OF_DAY1_FIELD = 4, - - /** - * FieldPosition and UFieldPosition selector for 'H' field alignment, - * corresponding to the UCAL_HOUR_OF_DAY field. - * UDAT_HOUR_OF_DAY0_FIELD is used for the zero-based 24-hour clock. - * For example, 23:59 + 01:00 results in 00:59. - * @stable ICU 3.0 - */ - UDAT_HOUR_OF_DAY0_FIELD = 5, - - /** - * FieldPosition and UFieldPosition selector for 'm' field alignment, - * corresponding to the UCAL_MINUTE field. - * @stable ICU 3.0 - */ - UDAT_MINUTE_FIELD = 6, - - /** - * FieldPosition and UFieldPosition selector for 's' field alignment, - * corresponding to the UCAL_SECOND field. - * @stable ICU 3.0 - */ - UDAT_SECOND_FIELD = 7, - - /** - * FieldPosition and UFieldPosition selector for 'S' field alignment, - * corresponding to the UCAL_MILLISECOND field. - * - * Note: Time formats that use 'S' can display a maximum of three - * significant digits for fractional seconds, corresponding to millisecond - * resolution and a fractional seconds sub-pattern of SSS. If the - * sub-pattern is S or SS, the fractional seconds value will be truncated - * (not rounded) to the number of display places specified. If the - * fractional seconds sub-pattern is longer than SSS, the additional - * display places will be filled with zeros. - * @stable ICU 3.0 - */ - UDAT_FRACTIONAL_SECOND_FIELD = 8, - - /** - * FieldPosition and UFieldPosition selector for 'E' field alignment, - * corresponding to the UCAL_DAY_OF_WEEK field. - * @stable ICU 3.0 - */ - UDAT_DAY_OF_WEEK_FIELD = 9, - - /** - * FieldPosition and UFieldPosition selector for 'D' field alignment, - * corresponding to the UCAL_DAY_OF_YEAR field. - * @stable ICU 3.0 - */ - UDAT_DAY_OF_YEAR_FIELD = 10, - - /** - * FieldPosition and UFieldPosition selector for 'F' field alignment, - * corresponding to the UCAL_DAY_OF_WEEK_IN_MONTH field. - * @stable ICU 3.0 - */ - UDAT_DAY_OF_WEEK_IN_MONTH_FIELD = 11, - - /** - * FieldPosition and UFieldPosition selector for 'w' field alignment, - * corresponding to the UCAL_WEEK_OF_YEAR field. - * @stable ICU 3.0 - */ - UDAT_WEEK_OF_YEAR_FIELD = 12, - - /** - * FieldPosition and UFieldPosition selector for 'W' field alignment, - * corresponding to the UCAL_WEEK_OF_MONTH field. - * @stable ICU 3.0 - */ - UDAT_WEEK_OF_MONTH_FIELD = 13, - - /** - * FieldPosition and UFieldPosition selector for 'a' field alignment, - * corresponding to the UCAL_AM_PM field. - * @stable ICU 3.0 - */ - UDAT_AM_PM_FIELD = 14, - - /** - * FieldPosition and UFieldPosition selector for 'h' field alignment, - * corresponding to the UCAL_HOUR field. - * UDAT_HOUR1_FIELD is used for the one-based 12-hour clock. - * For example, 11:30 PM + 1 hour results in 12:30 AM. - * @stable ICU 3.0 - */ - UDAT_HOUR1_FIELD = 15, - - /** - * FieldPosition and UFieldPosition selector for 'K' field alignment, - * corresponding to the UCAL_HOUR field. - * UDAT_HOUR0_FIELD is used for the zero-based 12-hour clock. - * For example, 11:30 PM + 1 hour results in 00:30 AM. - * @stable ICU 3.0 - */ - UDAT_HOUR0_FIELD = 16, - - /** - * FieldPosition and UFieldPosition selector for 'z' field alignment, - * corresponding to the UCAL_ZONE_OFFSET and - * UCAL_DST_OFFSET fields. - * @stable ICU 3.0 - */ - UDAT_TIMEZONE_FIELD = 17, - - /** - * FieldPosition and UFieldPosition selector for 'Y' field alignment, - * corresponding to the UCAL_YEAR_WOY field. - * @stable ICU 3.0 - */ - UDAT_YEAR_WOY_FIELD = 18, - - /** - * FieldPosition and UFieldPosition selector for 'e' field alignment, - * corresponding to the UCAL_DOW_LOCAL field. - * @stable ICU 3.0 - */ - UDAT_DOW_LOCAL_FIELD = 19, - - /** - * FieldPosition and UFieldPosition selector for 'u' field alignment, - * corresponding to the UCAL_EXTENDED_YEAR field. - * @stable ICU 3.0 - */ - UDAT_EXTENDED_YEAR_FIELD = 20, - - /** - * FieldPosition and UFieldPosition selector for 'g' field alignment, - * corresponding to the UCAL_JULIAN_DAY field. - * @stable ICU 3.0 - */ - UDAT_JULIAN_DAY_FIELD = 21, - - /** - * FieldPosition and UFieldPosition selector for 'A' field alignment, - * corresponding to the UCAL_MILLISECONDS_IN_DAY field. - * @stable ICU 3.0 - */ - UDAT_MILLISECONDS_IN_DAY_FIELD = 22, - - /** - * FieldPosition and UFieldPosition selector for 'Z' field alignment, - * corresponding to the UCAL_ZONE_OFFSET and - * UCAL_DST_OFFSET fields. - * @stable ICU 3.0 - */ - UDAT_TIMEZONE_RFC_FIELD = 23, - - /** - * FieldPosition and UFieldPosition selector for 'v' field alignment, - * corresponding to the UCAL_ZONE_OFFSET field. - * @stable ICU 3.4 - */ - UDAT_TIMEZONE_GENERIC_FIELD = 24, - /** - * FieldPosition selector for 'c' field alignment, - * corresponding to the {@link #UCAL_DOW_LOCAL} field. - * This displays the stand alone day name, if available. - * @stable ICU 3.4 - */ - UDAT_STANDALONE_DAY_FIELD = 25, - - /** - * FieldPosition selector for 'L' field alignment, - * corresponding to the {@link #UCAL_MONTH} field. - * This displays the stand alone month name, if available. - * @stable ICU 3.4 - */ - UDAT_STANDALONE_MONTH_FIELD = 26, - - /** - * FieldPosition selector for "Q" field alignment, - * corresponding to quarters. This is implemented - * using the {@link #UCAL_MONTH} field. This - * displays the quarter. - * @stable ICU 3.6 - */ - UDAT_QUARTER_FIELD = 27, - - /** - * FieldPosition selector for the "q" field alignment, - * corresponding to stand-alone quarters. This is - * implemented using the {@link #UCAL_MONTH} field. - * This displays the stand-alone quarter. - * @stable ICU 3.6 - */ - UDAT_STANDALONE_QUARTER_FIELD = 28, - - /** - * FieldPosition and UFieldPosition selector for 'V' field alignment, - * corresponding to the UCAL_ZONE_OFFSET field. - * @stable ICU 3.8 - */ - UDAT_TIMEZONE_SPECIAL_FIELD = 29, - - /** - * FieldPosition selector for "U" field alignment, - * corresponding to cyclic year names. This is implemented - * using the {@link #UCAL_YEAR} field. This displays - * the cyclic year name, if available. - * @stable ICU 49 - */ - UDAT_YEAR_NAME_FIELD = 30, - - /** - * FieldPosition selector for 'O' field alignment, - * corresponding to the UCAL_ZONE_OFFSET and UCAL_DST_OFFSETfields. - * This displays the localized GMT format. - * @stable ICU 51 - */ - UDAT_TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD = 31, - - /** - * FieldPosition selector for 'X' field alignment, - * corresponding to the UCAL_ZONE_OFFSET and UCAL_DST_OFFSETfields. - * This displays the ISO 8601 local time offset format or UTC indicator ("Z"). - * @stable ICU 51 - */ - UDAT_TIMEZONE_ISO_FIELD = 32, - - /** - * FieldPosition selector for 'x' field alignment, - * corresponding to the UCAL_ZONE_OFFSET and UCAL_DST_OFFSET fields. - * This displays the ISO 8601 local time offset format. - * @stable ICU 51 - */ - UDAT_TIMEZONE_ISO_LOCAL_FIELD = 33, - -#ifndef U_HIDE_INTERNAL_API - /** - * FieldPosition and UFieldPosition selector for 'r' field alignment, - * no directly corresponding UCAL_ field. - * @internal ICU 53 - */ - UDAT_RELATED_YEAR_FIELD = 34, -#endif /* U_HIDE_INTERNAL_API */ - - /** - * FieldPosition selector for 'b' field alignment. - * Displays midnight and noon for 12am and 12pm, respectively, if available; - * otherwise fall back to AM / PM. - * @stable ICU 57 - */ - UDAT_AM_PM_MIDNIGHT_NOON_FIELD = 35, - - /* FieldPosition selector for 'B' field alignment. - * Displays flexible day periods, such as "in the morning", if available. - * @stable ICU 57 - */ - UDAT_FLEXIBLE_DAY_PERIOD_FIELD = 36, - -#ifndef U_HIDE_INTERNAL_API - /** - * FieldPosition and UFieldPosition selector for time separator, - * no corresponding UCAL_ field. No pattern character is currently - * defined for this. - * @internal - */ - UDAT_TIME_SEPARATOR_FIELD = 37, -#endif /* U_HIDE_INTERNAL_API */ - -#ifndef U_HIDE_DEPRECATED_API - /** - * Number of FieldPosition and UFieldPosition selectors for - * DateFormat and UDateFormat. - * Valid selectors range from 0 to UDAT_FIELD_COUNT-1. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UDAT_FIELD_COUNT = 38 -#endif /* U_HIDE_DEPRECATED_API */ -} UDateFormatField; - - -#ifndef U_HIDE_INTERNAL_API -/** - * Is a pattern character defined for UDAT_TIME_SEPARATOR_FIELD? - * In ICU 55 it was COLON, but that was withdrawn in ICU 56. - * @internal ICU 56 - */ -#define UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR 0 -#endif /* U_HIDE_INTERNAL_API */ - - -/** - * Maps from a UDateFormatField to the corresponding UCalendarDateFields. - * Note: since the mapping is many-to-one, there is no inverse mapping. - * @param field the UDateFormatField. - * @return the UCalendarDateField. This will be UCAL_FIELD_COUNT in case - * of error (e.g., the input field is UDAT_FIELD_COUNT). - * @stable ICU 4.4 - */ -U_CAPI UCalendarDateFields U_EXPORT2 -udat_toCalendarDateField(UDateFormatField field); - - -/** - * Open a new UDateFormat for formatting and parsing dates and times. - * A UDateFormat may be used to format dates in calls to {@link #udat_format }, - * and to parse dates in calls to {@link #udat_parse }. - * @param timeStyle The style used to format times; one of UDAT_FULL, UDAT_LONG, - * UDAT_MEDIUM, UDAT_SHORT, UDAT_DEFAULT, or UDAT_NONE (relative time styles - * are not currently supported). - * When the pattern parameter is used, pass in UDAT_PATTERN for both timeStyle and dateStyle. - * @param dateStyle The style used to format dates; one of UDAT_FULL, UDAT_LONG, - * UDAT_MEDIUM, UDAT_SHORT, UDAT_DEFAULT, UDAT_FULL_RELATIVE, UDAT_LONG_RELATIVE, - * UDAT_MEDIUM_RELATIVE, UDAT_SHORT_RELATIVE, or UDAT_NONE. - * When the pattern parameter is used, pass in UDAT_PATTERN for both timeStyle and dateStyle. - * As currently implemented, - * relative date formatting only affects a limited range of calendar days before or - * after the current date, based on the CLDR <field type="day">/<relative> data: For - * example, in English, "Yesterday", "Today", and "Tomorrow". Outside of this range, - * dates are formatted using the corresponding non-relative style. - * @param locale The locale specifying the formatting conventions - * @param tzID A timezone ID specifying the timezone to use. If 0, use - * the default timezone. - * @param tzIDLength The length of tzID, or -1 if null-terminated. - * @param pattern A pattern specifying the format to use. - * @param patternLength The number of characters in the pattern, or -1 if null-terminated. - * @param status A pointer to an UErrorCode to receive any errors - * @return A pointer to a UDateFormat to use for formatting dates and times, or 0 if - * an error occurred. - * @stable ICU 2.0 - */ -U_CAPI UDateFormat* U_EXPORT2 -udat_open(UDateFormatStyle timeStyle, - UDateFormatStyle dateStyle, - const char *locale, - const UChar *tzID, - int32_t tzIDLength, - const UChar *pattern, - int32_t patternLength, - UErrorCode *status); - - -/** -* Close a UDateFormat. -* Once closed, a UDateFormat may no longer be used. -* @param format The formatter to close. -* @stable ICU 2.0 -*/ -U_CAPI void U_EXPORT2 -udat_close(UDateFormat* format); - - -/** - * DateFormat boolean attributes - * - * @stable ICU 53 - */ -typedef enum UDateFormatBooleanAttribute { - /** - * indicates whether whitespace is allowed. Includes trailing dot tolerance. - * @stable ICU 53 - */ - UDAT_PARSE_ALLOW_WHITESPACE = 0, - /** - * indicates tolerance of numeric data when String data may be assumed. eg: UDAT_YEAR_NAME_FIELD, - * UDAT_STANDALONE_MONTH_FIELD, UDAT_DAY_OF_WEEK_FIELD - * @stable ICU 53 - */ - UDAT_PARSE_ALLOW_NUMERIC = 1, - /** - * indicates tolerance of a partial literal match - * e.g. accepting "--mon-02-march-2011" for a pattern of "'--: 'EEE-WW-MMMM-yyyy" - * @stable ICU 56 - */ - UDAT_PARSE_PARTIAL_LITERAL_MATCH = 2, - /** - * indicates tolerance of pattern mismatch between input data and specified format pattern. - * e.g. accepting "September" for a month pattern of MMM ("Sep") - * @stable ICU 56 - */ - UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH = 3, - - /* Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API, - * it is needed for layout of DateFormat object. */ - /** - * One more than the highest normal UDateFormatBooleanAttribute value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UDAT_BOOLEAN_ATTRIBUTE_COUNT = 4 -} UDateFormatBooleanAttribute; - -/** - * Get a boolean attribute associated with a UDateFormat. - * An example would be a true value for a key of UDAT_PARSE_ALLOW_WHITESPACE indicating allowing whitespace leniency. - * If the formatter does not understand the attribute, -1 is returned. - * @param fmt The formatter to query. - * @param attr The attribute to query; e.g. UDAT_PARSE_ALLOW_WHITESPACE. - * @param status A pointer to an UErrorCode to receive any errors - * @return The value of attr. - * @stable ICU 53 - */ -U_CAPI UBool U_EXPORT2 -udat_getBooleanAttribute(const UDateFormat* fmt, UDateFormatBooleanAttribute attr, UErrorCode* status); - -/** - * Set a boolean attribute associated with a UDateFormat. - * An example of a boolean attribute is parse leniency control. If the formatter does not understand - * the attribute, the call is ignored. - * @param fmt The formatter to set. - * @param attr The attribute to set; one of UDAT_PARSE_ALLOW_WHITESPACE or UDAT_PARSE_ALLOW_NUMERIC - * @param newValue The new value of attr. - * @param status A pointer to an UErrorCode to receive any errors - * @stable ICU 53 - */ -U_CAPI void U_EXPORT2 -udat_setBooleanAttribute(UDateFormat *fmt, UDateFormatBooleanAttribute attr, UBool newValue, UErrorCode* status); - - - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUDateFormatPointer - * "Smart pointer" class, closes a UDateFormat via udat_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateFormatPointer, UDateFormat, udat_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Open a copy of a UDateFormat. - * This function performs a deep copy. - * @param fmt The format to copy - * @param status A pointer to an UErrorCode to receive any errors. - * @return A pointer to a UDateFormat identical to fmt. - * @stable ICU 2.0 - */ -U_CAPI UDateFormat* U_EXPORT2 -udat_clone(const UDateFormat *fmt, - UErrorCode *status); - -/** -* Format a date using a UDateFormat. -* The date will be formatted using the conventions specified in {@link #udat_open } -* @param format The formatter to use -* @param dateToFormat The date to format -* @param result A pointer to a buffer to receive the formatted number. -* @param resultLength The maximum size of result. -* @param position A pointer to a UFieldPosition. On input, position->field -* is read. On output, position->beginIndex and position->endIndex indicate -* the beginning and ending indices of field number position->field, if such -* a field exists. This parameter may be NULL, in which case no field -* position data is returned. -* @param status A pointer to an UErrorCode to receive any errors -* @return The total buffer size needed; if greater than resultLength, the output was truncated. -* @see udat_parse -* @see UFieldPosition -* @stable ICU 2.0 -*/ -U_CAPI int32_t U_EXPORT2 -udat_format( const UDateFormat* format, - UDate dateToFormat, - UChar* result, - int32_t resultLength, - UFieldPosition* position, - UErrorCode* status); - -/** -* Format a date using an UDateFormat. -* The date will be formatted using the conventions specified in {@link #udat_open } -* @param format The formatter to use -* @param calendar The calendar to format. The calendar instance might be -* mutated if fields are not yet fully calculated, though -* the function won't change the logical date and time held -* by the instance. -* @param result A pointer to a buffer to receive the formatted number. -* @param capacity The maximum size of result. -* @param position A pointer to a UFieldPosition. On input, position->field -* is read. On output, position->beginIndex and position->endIndex indicate -* the beginning and ending indices of field number position->field, if such -* a field exists. This parameter may be NULL, in which case no field -* position data is returned. -* @param status A pointer to an UErrorCode to receive any errors -* @return The total buffer size needed; if greater than resultLength, the output was truncated. -* @see udat_format -* @see udat_parseCalendar -* @see UFieldPosition -* @stable ICU 55 -*/ -U_CAPI int32_t U_EXPORT2 -udat_formatCalendar( const UDateFormat* format, - UCalendar* calendar, - UChar* result, - int32_t capacity, - UFieldPosition* position, - UErrorCode* status); - -/** -* Format a date using a UDateFormat. -* The date will be formatted using the conventions specified in {@link #udat_open} -* @param format -* The formatter to use -* @param dateToFormat -* The date to format -* @param result -* A pointer to a buffer to receive the formatted number. -* @param resultLength -* The maximum size of result. -* @param fpositer -* A pointer to a UFieldPositionIterator created by {@link #ufieldpositer_open} -* (may be NULL if field position information is not needed). Any -* iteration information already present in the UFieldPositionIterator -* will be deleted, and the iterator will be reset to apply to the -* fields in the formatted string created by this function call; the -* field values provided by {@link #ufieldpositer_next} will be from the -* UDateFormatField enum. -* @param status -* A pointer to a UErrorCode to receive any errors -* @return -* The total buffer size needed; if greater than resultLength, the output was truncated. -* @see udat_parse -* @see UFieldPositionIterator -* @stable ICU 55 -*/ -U_CAPI int32_t U_EXPORT2 -udat_formatForFields( const UDateFormat* format, - UDate dateToFormat, - UChar* result, - int32_t resultLength, - UFieldPositionIterator* fpositer, - UErrorCode* status); - -/** -* Format a date using a UDateFormat. -* The date will be formatted using the conventions specified in {@link #udat_open } -* @param format -* The formatter to use -* @param calendar -* The calendar to format. The calendar instance might be mutated if fields -* are not yet fully calculated, though the function won't change the logical -* date and time held by the instance. -* @param result -* A pointer to a buffer to receive the formatted number. -* @param capacity -* The maximum size of result. -* @param fpositer -* A pointer to a UFieldPositionIterator created by {@link #ufieldpositer_open} -* (may be NULL if field position information is not needed). Any -* iteration information already present in the UFieldPositionIterator -* will be deleted, and the iterator will be reset to apply to the -* fields in the formatted string created by this function call; the -* field values provided by {@link #ufieldpositer_next} will be from the -* UDateFormatField enum. -* @param status -* A pointer to a UErrorCode to receive any errors -* @return -* The total buffer size needed; if greater than resultLength, the output was truncated. -* @see udat_format -* @see udat_parseCalendar -* @see UFieldPositionIterator -* @stable ICU 55 -*/ -U_CAPI int32_t U_EXPORT2 -udat_formatCalendarForFields( const UDateFormat* format, - UCalendar* calendar, - UChar* result, - int32_t capacity, - UFieldPositionIterator* fpositer, - UErrorCode* status); - - -/** -* Parse a string into an date/time using a UDateFormat. -* The date will be parsed using the conventions specified in {@link #udat_open }. -*

-* Note that the normal date formats associated with some calendars - such -* as the Chinese lunar calendar - do not specify enough fields to enable -* dates to be parsed unambiguously. In the case of the Chinese lunar -* calendar, while the year within the current 60-year cycle is specified, -* the number of such cycles since the start date of the calendar (in the -* UCAL_ERA field of the UCalendar object) is not normally part of the format, -* and parsing may assume the wrong era. For cases such as this it is -* recommended that clients parse using udat_parseCalendar with the UCalendar -* passed in set to the current date, or to a date within the era/cycle that -* should be assumed if absent in the format. -* -* @param format The formatter to use. -* @param text The text to parse. -* @param textLength The length of text, or -1 if null-terminated. -* @param parsePos If not 0, on input a pointer to an integer specifying the offset at which -* to begin parsing. If not 0, on output the offset at which parsing ended. -* @param status A pointer to an UErrorCode to receive any errors -* @return The value of the parsed date/time -* @see udat_format -* @stable ICU 2.0 -*/ -U_CAPI UDate U_EXPORT2 -udat_parse(const UDateFormat* format, - const UChar* text, - int32_t textLength, - int32_t *parsePos, - UErrorCode *status); - -/** -* Parse a string into an date/time using a UDateFormat. -* The date will be parsed using the conventions specified in {@link #udat_open }. -* @param format The formatter to use. -* @param calendar A calendar set on input to the date and time to be used for -* missing values in the date/time string being parsed, and set -* on output to the parsed date/time. When the calendar type is -* different from the internal calendar held by the UDateFormat -* instance, the internal calendar will be cloned to a work -* calendar set to the same milliseconds and time zone as this -* calendar parameter, field values will be parsed based on the -* work calendar, then the result (milliseconds and time zone) -* will be set in this calendar. -* @param text The text to parse. -* @param textLength The length of text, or -1 if null-terminated. -* @param parsePos If not 0, on input a pointer to an integer specifying the offset at which -* to begin parsing. If not 0, on output the offset at which parsing ended. -* @param status A pointer to an UErrorCode to receive any errors -* @see udat_format -* @stable ICU 2.0 -*/ -U_CAPI void U_EXPORT2 -udat_parseCalendar(const UDateFormat* format, - UCalendar* calendar, - const UChar* text, - int32_t textLength, - int32_t *parsePos, - UErrorCode *status); - -/** -* Determine if an UDateFormat will perform lenient parsing. -* With lenient parsing, the parser may use heuristics to interpret inputs that do not -* precisely match the pattern. With strict parsing, inputs must match the pattern. -* @param fmt The formatter to query -* @return TRUE if fmt is set to perform lenient parsing, FALSE otherwise. -* @see udat_setLenient -* @stable ICU 2.0 -*/ -U_CAPI UBool U_EXPORT2 -udat_isLenient(const UDateFormat* fmt); - -/** -* Specify whether an UDateFormat will perform lenient parsing. -* With lenient parsing, the parser may use heuristics to interpret inputs that do not -* precisely match the pattern. With strict parsing, inputs must match the pattern. -* @param fmt The formatter to set -* @param isLenient TRUE if fmt should perform lenient parsing, FALSE otherwise. -* @see dat_isLenient -* @stable ICU 2.0 -*/ -U_CAPI void U_EXPORT2 -udat_setLenient( UDateFormat* fmt, - UBool isLenient); - -/** -* Get the UCalendar associated with an UDateFormat. -* A UDateFormat uses a UCalendar to convert a raw value to, for example, -* the day of the week. -* @param fmt The formatter to query. -* @return A pointer to the UCalendar used by fmt. -* @see udat_setCalendar -* @stable ICU 2.0 -*/ -U_CAPI const UCalendar* U_EXPORT2 -udat_getCalendar(const UDateFormat* fmt); - -/** -* Set the UCalendar associated with an UDateFormat. -* A UDateFormat uses a UCalendar to convert a raw value to, for example, -* the day of the week. -* @param fmt The formatter to set. -* @param calendarToSet A pointer to an UCalendar to be used by fmt. -* @see udat_setCalendar -* @stable ICU 2.0 -*/ -U_CAPI void U_EXPORT2 -udat_setCalendar( UDateFormat* fmt, - const UCalendar* calendarToSet); - -/** -* Get the UNumberFormat associated with an UDateFormat. -* A UDateFormat uses a UNumberFormat to format numbers within a date, -* for example the day number. -* @param fmt The formatter to query. -* @return A pointer to the UNumberFormat used by fmt to format numbers. -* @see udat_setNumberFormat -* @stable ICU 2.0 -*/ -U_CAPI const UNumberFormat* U_EXPORT2 -udat_getNumberFormat(const UDateFormat* fmt); - -/** -* Get the UNumberFormat for specific field associated with an UDateFormat. -* For example: 'y' for year and 'M' for month -* @param fmt The formatter to query. -* @param field the field to query -* @return A pointer to the UNumberFormat used by fmt to format field numbers. -* @see udat_setNumberFormatForField -* @stable ICU 54 -*/ -U_CAPI const UNumberFormat* U_EXPORT2 -udat_getNumberFormatForField(const UDateFormat* fmt, UChar field); - -/** -* Set the UNumberFormat for specific field associated with an UDateFormat. -* It can be a single field like: "y"(year) or "M"(month) -* It can be several field combined together: "yM"(year and month) -* Note: -* 1 symbol field is enough for multiple symbol field (so "y" will override "yy", "yyy") -* If the field is not numeric, then override has no effect (like "MMM" will use abbreviation, not numerical field) -* -* @param fields the fields to set -* @param fmt The formatter to set. -* @param numberFormatToSet A pointer to the UNumberFormat to be used by fmt to format numbers. -* @param status error code passed around (memory allocation or invalid fields) -* @see udat_getNumberFormatForField -* @stable ICU 54 -*/ -U_CAPI void U_EXPORT2 -udat_adoptNumberFormatForFields( UDateFormat* fmt, - const UChar* fields, - UNumberFormat* numberFormatToSet, - UErrorCode* status); -/** -* Set the UNumberFormat associated with an UDateFormat. -* A UDateFormat uses a UNumberFormat to format numbers within a date, -* for example the day number. -* This method also clears per field NumberFormat instances previously -* set by {@see udat_setNumberFormatForField} -* @param fmt The formatter to set. -* @param numberFormatToSet A pointer to the UNumberFormat to be used by fmt to format numbers. -* @see udat_getNumberFormat -* @see udat_setNumberFormatForField -* @stable ICU 2.0 -*/ -U_CAPI void U_EXPORT2 -udat_setNumberFormat( UDateFormat* fmt, - const UNumberFormat* numberFormatToSet); -/** -* Adopt the UNumberFormat associated with an UDateFormat. -* A UDateFormat uses a UNumberFormat to format numbers within a date, -* for example the day number. -* @param fmt The formatter to set. -* @param numberFormatToAdopt A pointer to the UNumberFormat to be used by fmt to format numbers. -* @see udat_getNumberFormat -* @stable ICU 54 -*/ -U_CAPI void U_EXPORT2 -udat_adoptNumberFormat( UDateFormat* fmt, - UNumberFormat* numberFormatToAdopt); -/** -* Get a locale for which date/time formatting patterns are available. -* A UDateFormat in a locale returned by this function will perform the correct -* formatting and parsing for the locale. -* @param localeIndex The index of the desired locale. -* @return A locale for which date/time formatting patterns are available, or 0 if none. -* @see udat_countAvailable -* @stable ICU 2.0 -*/ -U_CAPI const char* U_EXPORT2 -udat_getAvailable(int32_t localeIndex); - -/** -* Determine how many locales have date/time formatting patterns available. -* This function is most useful as determining the loop ending condition for -* calls to {@link #udat_getAvailable }. -* @return The number of locales for which date/time formatting patterns are available. -* @see udat_getAvailable -* @stable ICU 2.0 -*/ -U_CAPI int32_t U_EXPORT2 -udat_countAvailable(void); - -/** -* Get the year relative to which all 2-digit years are interpreted. -* For example, if the 2-digit start year is 2100, the year 99 will be -* interpreted as 2199. -* @param fmt The formatter to query. -* @param status A pointer to an UErrorCode to receive any errors -* @return The year relative to which all 2-digit years are interpreted. -* @see udat_Set2DigitYearStart -* @stable ICU 2.0 -*/ -U_CAPI UDate U_EXPORT2 -udat_get2DigitYearStart( const UDateFormat *fmt, - UErrorCode *status); - -/** -* Set the year relative to which all 2-digit years will be interpreted. -* For example, if the 2-digit start year is 2100, the year 99 will be -* interpreted as 2199. -* @param fmt The formatter to set. -* @param d The year relative to which all 2-digit years will be interpreted. -* @param status A pointer to an UErrorCode to receive any errors -* @see udat_Set2DigitYearStart -* @stable ICU 2.0 -*/ -U_CAPI void U_EXPORT2 -udat_set2DigitYearStart( UDateFormat *fmt, - UDate d, - UErrorCode *status); - -/** -* Extract the pattern from a UDateFormat. -* The pattern will follow the pattern syntax rules. -* @param fmt The formatter to query. -* @param localized TRUE if the pattern should be localized, FALSE otherwise. -* @param result A pointer to a buffer to receive the pattern. -* @param resultLength The maximum size of result. -* @param status A pointer to an UErrorCode to receive any errors -* @return The total buffer size needed; if greater than resultLength, the output was truncated. -* @see udat_applyPattern -* @stable ICU 2.0 -*/ -U_CAPI int32_t U_EXPORT2 -udat_toPattern( const UDateFormat *fmt, - UBool localized, - UChar *result, - int32_t resultLength, - UErrorCode *status); - -/** -* Set the pattern used by an UDateFormat. -* The pattern should follow the pattern syntax rules. -* @param format The formatter to set. -* @param localized TRUE if the pattern is localized, FALSE otherwise. -* @param pattern The new pattern -* @param patternLength The length of pattern, or -1 if null-terminated. -* @see udat_toPattern -* @stable ICU 2.0 -*/ -U_CAPI void U_EXPORT2 -udat_applyPattern( UDateFormat *format, - UBool localized, - const UChar *pattern, - int32_t patternLength); - -/** - * The possible types of date format symbols - * @stable ICU 2.6 - */ -typedef enum UDateFormatSymbolType { - /** The era names, for example AD */ - UDAT_ERAS, - /** The month names, for example February */ - UDAT_MONTHS, - /** The short month names, for example Feb. */ - UDAT_SHORT_MONTHS, - /** The CLDR-style format "wide" weekday names, for example Monday */ - UDAT_WEEKDAYS, - /** - * The CLDR-style format "abbreviated" (not "short") weekday names, for example "Mon." - * For the CLDR-style format "short" weekday names, use UDAT_SHORTER_WEEKDAYS. - */ - UDAT_SHORT_WEEKDAYS, - /** The AM/PM names, for example AM */ - UDAT_AM_PMS, - /** The localized characters */ - UDAT_LOCALIZED_CHARS, - /** The long era names, for example Anno Domini */ - UDAT_ERA_NAMES, - /** The narrow month names, for example F */ - UDAT_NARROW_MONTHS, - /** The CLDR-style format "narrow" weekday names, for example "M" */ - UDAT_NARROW_WEEKDAYS, - /** Standalone context versions of months */ - UDAT_STANDALONE_MONTHS, - UDAT_STANDALONE_SHORT_MONTHS, - UDAT_STANDALONE_NARROW_MONTHS, - /** The CLDR-style stand-alone "wide" weekday names */ - UDAT_STANDALONE_WEEKDAYS, - /** - * The CLDR-style stand-alone "abbreviated" (not "short") weekday names. - * For the CLDR-style stand-alone "short" weekday names, use UDAT_STANDALONE_SHORTER_WEEKDAYS. - */ - UDAT_STANDALONE_SHORT_WEEKDAYS, - /** The CLDR-style stand-alone "narrow" weekday names */ - UDAT_STANDALONE_NARROW_WEEKDAYS, - /** The quarters, for example 1st Quarter */ - UDAT_QUARTERS, - /** The short quarter names, for example Q1 */ - UDAT_SHORT_QUARTERS, - /** Standalone context versions of quarters */ - UDAT_STANDALONE_QUARTERS, - UDAT_STANDALONE_SHORT_QUARTERS, - /** - * The CLDR-style short weekday names, e.g. "Su", Mo", etc. - * These are named "SHORTER" to contrast with the constants using _SHORT_ - * above, which actually get the CLDR-style *abbreviated* versions of the - * corresponding names. - * @stable ICU 51 - */ - UDAT_SHORTER_WEEKDAYS, - /** - * Standalone version of UDAT_SHORTER_WEEKDAYS. - * @stable ICU 51 - */ - UDAT_STANDALONE_SHORTER_WEEKDAYS, - /** - * Cyclic year names (only supported for some calendars, and only for FORMAT usage; - * udat_setSymbols not supported for UDAT_CYCLIC_YEARS_WIDE) - * @stable ICU 54 - */ - UDAT_CYCLIC_YEARS_WIDE, - /** - * Cyclic year names (only supported for some calendars, and only for FORMAT usage) - * @stable ICU 54 - */ - UDAT_CYCLIC_YEARS_ABBREVIATED, - /** - * Cyclic year names (only supported for some calendars, and only for FORMAT usage; - * udat_setSymbols not supported for UDAT_CYCLIC_YEARS_NARROW) - * @stable ICU 54 - */ - UDAT_CYCLIC_YEARS_NARROW, - /** - * Calendar zodiac names (only supported for some calendars, and only for FORMAT usage; - * udat_setSymbols not supported for UDAT_ZODIAC_NAMES_WIDE) - * @stable ICU 54 - */ - UDAT_ZODIAC_NAMES_WIDE, - /** - * Calendar zodiac names (only supported for some calendars, and only for FORMAT usage) - * @stable ICU 54 - */ - UDAT_ZODIAC_NAMES_ABBREVIATED, - /** - * Calendar zodiac names (only supported for some calendars, and only for FORMAT usage; - * udat_setSymbols not supported for UDAT_ZODIAC_NAMES_NARROW) - * @stable ICU 54 - */ - UDAT_ZODIAC_NAMES_NARROW -#ifndef U_HIDE_INTERNAL_API - , - /** - * Apple-specific,. - * only for udat_getSymbols. - * no directly corresponding UCAL_ field. - * @internal ICU 54 - */ - UADAT_CYCLIC_ZODIAC_NAMES = 128 -#endif /* U_HIDE_INTERNAL_API */ -} UDateFormatSymbolType; - -struct UDateFormatSymbols; -/** Date format symbols. - * For usage in C programs. - * @stable ICU 2.6 - */ -typedef struct UDateFormatSymbols UDateFormatSymbols; - -/** -* Get the symbols associated with an UDateFormat. -* The symbols are what a UDateFormat uses to represent locale-specific data, -* for example month or day names. -* @param fmt The formatter to query. -* @param type The type of symbols to get. One of UDAT_ERAS, UDAT_MONTHS, UDAT_SHORT_MONTHS, -* UDAT_WEEKDAYS, UDAT_SHORT_WEEKDAYS, UDAT_AM_PMS, or UDAT_LOCALIZED_CHARS -* @param symbolIndex The desired symbol of type type. -* @param result A pointer to a buffer to receive the pattern. -* @param resultLength The maximum size of result. -* @param status A pointer to an UErrorCode to receive any errors -* @return The total buffer size needed; if greater than resultLength, the output was truncated. -* @see udat_countSymbols -* @see udat_setSymbols -* @stable ICU 2.0 -*/ -U_CAPI int32_t U_EXPORT2 -udat_getSymbols(const UDateFormat *fmt, - UDateFormatSymbolType type, - int32_t symbolIndex, - UChar *result, - int32_t resultLength, - UErrorCode *status); - -/** -* Count the number of particular symbols for an UDateFormat. -* This function is most useful as for detemining the loop termination condition -* for calls to {@link #udat_getSymbols }. -* @param fmt The formatter to query. -* @param type The type of symbols to count. One of UDAT_ERAS, UDAT_MONTHS, UDAT_SHORT_MONTHS, -* UDAT_WEEKDAYS, UDAT_SHORT_WEEKDAYS, UDAT_AM_PMS, or UDAT_LOCALIZED_CHARS -* @return The number of symbols of type type. -* @see udat_getSymbols -* @see udat_setSymbols -* @stable ICU 2.0 -*/ -U_CAPI int32_t U_EXPORT2 -udat_countSymbols( const UDateFormat *fmt, - UDateFormatSymbolType type); - -/** -* Set the symbols associated with an UDateFormat. -* The symbols are what a UDateFormat uses to represent locale-specific data, -* for example month or day names. -* @param format The formatter to set -* @param type The type of symbols to set. One of UDAT_ERAS, UDAT_MONTHS, UDAT_SHORT_MONTHS, -* UDAT_WEEKDAYS, UDAT_SHORT_WEEKDAYS, UDAT_AM_PMS, or UDAT_LOCALIZED_CHARS -* @param symbolIndex The index of the symbol to set of type type. -* @param value The new value -* @param valueLength The length of value, or -1 if null-terminated -* @param status A pointer to an UErrorCode to receive any errors -* @see udat_getSymbols -* @see udat_countSymbols -* @stable ICU 2.0 -*/ -U_CAPI void U_EXPORT2 -udat_setSymbols( UDateFormat *format, - UDateFormatSymbolType type, - int32_t symbolIndex, - UChar *value, - int32_t valueLength, - UErrorCode *status); - -/** - * Get the locale for this date format object. - * You can choose between valid and actual locale. - * @param fmt The formatter to get the locale from - * @param type type of the locale we're looking for (valid or actual) - * @param status error code for the operation - * @return the locale name - * @stable ICU 2.8 - */ -U_CAPI const char* U_EXPORT2 -udat_getLocaleByType(const UDateFormat *fmt, - ULocDataLocaleType type, - UErrorCode* status); - -/** - * Set a particular UDisplayContext value in the formatter, such as - * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. - * @param fmt The formatter for which to set a UDisplayContext value. - * @param value The UDisplayContext value to set. - * @param status A pointer to an UErrorCode to receive any errors - * @stable ICU 51 - */ -U_CAPI void U_EXPORT2 -udat_setContext(UDateFormat* fmt, UDisplayContext value, UErrorCode* status); - -/** - * Get the formatter's UDisplayContext value for the specified UDisplayContextType, - * such as UDISPCTX_TYPE_CAPITALIZATION. - * @param fmt The formatter to query. - * @param type The UDisplayContextType whose value to return - * @param status A pointer to an UErrorCode to receive any errors - * @return The UDisplayContextValue for the specified type. - * @stable ICU 53 - */ -U_CAPI UDisplayContext U_EXPORT2 -udat_getContext(const UDateFormat* fmt, UDisplayContextType type, UErrorCode* status); - -#ifndef U_HIDE_INTERNAL_API -/** -* Extract the date pattern from a UDateFormat set for relative date formatting. -* The pattern will follow the pattern syntax rules. -* @param fmt The formatter to query. -* @param result A pointer to a buffer to receive the pattern. -* @param resultLength The maximum size of result. -* @param status A pointer to a UErrorCode to receive any errors -* @return The total buffer size needed; if greater than resultLength, the output was truncated. -* @see udat_applyPatternRelative -* @internal ICU 4.2 technology preview -*/ -U_INTERNAL int32_t U_EXPORT2 -udat_toPatternRelativeDate(const UDateFormat *fmt, - UChar *result, - int32_t resultLength, - UErrorCode *status); - -/** -* Extract the time pattern from a UDateFormat set for relative date formatting. -* The pattern will follow the pattern syntax rules. -* @param fmt The formatter to query. -* @param result A pointer to a buffer to receive the pattern. -* @param resultLength The maximum size of result. -* @param status A pointer to a UErrorCode to receive any errors -* @return The total buffer size needed; if greater than resultLength, the output was truncated. -* @see udat_applyPatternRelative -* @internal ICU 4.2 technology preview -*/ -U_INTERNAL int32_t U_EXPORT2 -udat_toPatternRelativeTime(const UDateFormat *fmt, - UChar *result, - int32_t resultLength, - UErrorCode *status); - -/** -* Set the date & time patterns used by a UDateFormat set for relative date formatting. -* The patterns should follow the pattern syntax rules. -* @param format The formatter to set. -* @param datePattern The new date pattern -* @param datePatternLength The length of datePattern, or -1 if null-terminated. -* @param timePattern The new time pattern -* @param timePatternLength The length of timePattern, or -1 if null-terminated. -* @param status A pointer to a UErrorCode to receive any errors -* @see udat_toPatternRelativeDate, udat_toPatternRelativeTime -* @internal ICU 4.2 technology preview -*/ -U_INTERNAL void U_EXPORT2 -udat_applyPatternRelative(UDateFormat *format, - const UChar *datePattern, - int32_t datePatternLength, - const UChar *timePattern, - int32_t timePatternLength, - UErrorCode *status); - -/** - * @internal - * @see udat_open - */ -typedef UDateFormat* (U_EXPORT2 *UDateFormatOpener) (UDateFormatStyle timeStyle, - UDateFormatStyle dateStyle, - const char *locale, - const UChar *tzID, - int32_t tzIDLength, - const UChar *pattern, - int32_t patternLength, - UErrorCode *status); - -/** - * Register a provider factory - * @internal ICU 49 - */ -U_INTERNAL void U_EXPORT2 -udat_registerOpener(UDateFormatOpener opener, UErrorCode *status); - -/** - * Un-Register a provider factory - * @internal ICU 49 - */ -U_INTERNAL UDateFormatOpener U_EXPORT2 -udat_unregisterOpener(UDateFormatOpener opener, UErrorCode *status); -#endif /* U_HIDE_INTERNAL_API */ - - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udata.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udata.h deleted file mode 100644 index 600272a3d0..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udata.h +++ /dev/null @@ -1,437 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1999-2014, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* file name: udata.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 1999oct25 -* created by: Markus W. Scherer -*/ - -#ifndef __UDATA_H__ -#define __UDATA_H__ - -#include "unicode/utypes.h" -#include "unicode/localpointer.h" - -U_CDECL_BEGIN - -/** - * \file - * \brief C API: Data loading interface - * - *

Information about data loading interface

- * - * This API is used to find and efficiently load data for ICU and applications - * using ICU. It provides an abstract interface that specifies a data type and - * name to find and load the data. Normally this API is used by other ICU APIs - * to load required data out of the ICU data library, but it can be used to - * load data out of other places. - * - * See the User Guide Data Management chapter. - */ - -#ifndef U_HIDE_INTERNAL_API -/** - * Character used to separate package names from tree names - * @internal ICU 3.0 - */ -#define U_TREE_SEPARATOR '-' - -/** - * String used to separate package names from tree names - * @internal ICU 3.0 - */ -#define U_TREE_SEPARATOR_STRING "-" - -/** - * Character used to separate parts of entry names - * @internal ICU 3.0 - */ -#define U_TREE_ENTRY_SEP_CHAR '/' - -/** - * String used to separate parts of entry names - * @internal ICU 3.0 - */ -#define U_TREE_ENTRY_SEP_STRING "/" - -/** - * Alias for standard ICU data - * @internal ICU 3.0 - */ -#define U_ICUDATA_ALIAS "ICUDATA" - -#endif /* U_HIDE_INTERNAL_API */ - -/** - * UDataInfo contains the properties about the requested data. - * This is meta data. - * - *

This structure may grow in the future, indicated by the - * size field.

- * - *

ICU data must be at least 8-aligned, and should be 16-aligned. - * The UDataInfo struct begins 4 bytes after the start of the data item, - * so it is 4-aligned. - * - *

The platform data property fields help determine if a data - * file can be efficiently used on a given machine. - * The particular fields are of importance only if the data - * is affected by the properties - if there is integer data - * with word sizes > 1 byte, char* text, or UChar* text.

- * - *

The implementation for the udata_open[Choice]() - * functions may reject data based on the value in isBigEndian. - * No other field is used by the udata API implementation.

- * - *

The dataFormat may be used to identify - * the kind of data, e.g. a converter table.

- * - *

The formatVersion field should be used to - * make sure that the format can be interpreted. - * It may be a good idea to check only for the one or two highest - * of the version elements to allow the data memory to - * get more or somewhat rearranged contents, for as long - * as the using code can still interpret the older contents.

- * - *

The dataVersion field is intended to be a - * common place to store the source version of the data; - * for data from the Unicode character database, this could - * reflect the Unicode version.

- * - * @stable ICU 2.0 - */ -typedef struct { - /** sizeof(UDataInfo) - * @stable ICU 2.0 */ - uint16_t size; - - /** unused, set to 0 - * @stable ICU 2.0*/ - uint16_t reservedWord; - - /* platform data properties */ - /** 0 for little-endian machine, 1 for big-endian - * @stable ICU 2.0 */ - uint8_t isBigEndian; - - /** see U_CHARSET_FAMILY values in utypes.h - * @stable ICU 2.0*/ - uint8_t charsetFamily; - - /** sizeof(UChar), one of { 1, 2, 4 } - * @stable ICU 2.0*/ - uint8_t sizeofUChar; - - /** unused, set to 0 - * @stable ICU 2.0*/ - uint8_t reservedByte; - - /** data format identifier - * @stable ICU 2.0*/ - uint8_t dataFormat[4]; - - /** versions: [0] major [1] minor [2] milli [3] micro - * @stable ICU 2.0*/ - uint8_t formatVersion[4]; - - /** versions: [0] major [1] minor [2] milli [3] micro - * @stable ICU 2.0*/ - uint8_t dataVersion[4]; -} UDataInfo; - -/* API for reading data -----------------------------------------------------*/ - -/** - * Forward declaration of the data memory type. - * @stable ICU 2.0 - */ -typedef struct UDataMemory UDataMemory; - -/** - * Callback function for udata_openChoice(). - * @param context parameter passed into udata_openChoice(). - * @param type The type of the data as passed into udata_openChoice(). - * It may be NULL. - * @param name The name of the data as passed into udata_openChoice(). - * @param pInfo A pointer to the UDataInfo structure - * of data that has been loaded and will be returned - * by udata_openChoice() if this function - * returns TRUE. - * @return TRUE if the current data memory is acceptable - * @stable ICU 2.0 - */ -typedef UBool U_CALLCONV -UDataMemoryIsAcceptable(void *context, - const char *type, const char *name, - const UDataInfo *pInfo); - - -/** - * Convenience function. - * This function works the same as udata_openChoice - * except that any data that matches the type and name - * is assumed to be acceptable. - * @param path Specifies an absolute path and/or a basename for the - * finding of the data in the file system. - * NULL for ICU data. - * @param type A string that specifies the type of data to be loaded. - * For example, resource bundles are loaded with type "res", - * conversion tables with type "cnv". - * This may be NULL or empty. - * @param name A string that specifies the name of the data. - * @param pErrorCode An ICU UErrorCode parameter. It must not be NULL. - * @return A pointer (handle) to a data memory object, or NULL - * if an error occurs. Call udata_getMemory() - * to get a pointer to the actual data. - * - * @see udata_openChoice - * @stable ICU 2.0 - */ -U_STABLE UDataMemory * U_EXPORT2 -udata_open(const char *path, const char *type, const char *name, - UErrorCode *pErrorCode); - -/** - * Data loading function. - * This function is used to find and load efficiently data for - * ICU and applications using ICU. - * It provides an abstract interface that allows to specify a data - * type and name to find and load the data. - * - *

The implementation depends on platform properties and user preferences - * and may involve loading shared libraries (DLLs), mapping - * files into memory, or fopen()/fread() files. - * It may also involve using static memory or database queries etc. - * Several or all data items may be combined into one entity - * (DLL, memory-mappable file).

- * - *

The data is always preceded by a header that includes - * a UDataInfo structure. - * The caller's isAcceptable() function is called to make - * sure that the data is useful. It may be called several times if it - * rejects the data and there is more than one location with data - * matching the type and name.

- * - *

If path==NULL, then ICU data is loaded. - * Otherwise, it is separated into a basename and a basename-less directory string. - * The basename is used as the data package name, and the directory is - * logically prepended to the ICU data directory string.

- * - *

For details about ICU data loading see the User Guide - * Data Management chapter. (http://icu-project.org/userguide/icudata.html)

- * - * @param path Specifies an absolute path and/or a basename for the - * finding of the data in the file system. - * NULL for ICU data. - * @param type A string that specifies the type of data to be loaded. - * For example, resource bundles are loaded with type "res", - * conversion tables with type "cnv". - * This may be NULL or empty. - * @param name A string that specifies the name of the data. - * @param isAcceptable This function is called to verify that loaded data - * is useful for the client code. If it returns FALSE - * for all data items, then udata_openChoice() - * will return with an error. - * @param context Arbitrary parameter to be passed into isAcceptable. - * @param pErrorCode An ICU UErrorCode parameter. It must not be NULL. - * @return A pointer (handle) to a data memory object, or NULL - * if an error occurs. Call udata_getMemory() - * to get a pointer to the actual data. - * @stable ICU 2.0 - */ -U_STABLE UDataMemory * U_EXPORT2 -udata_openChoice(const char *path, const char *type, const char *name, - UDataMemoryIsAcceptable *isAcceptable, void *context, - UErrorCode *pErrorCode); - -/** - * Close the data memory. - * This function must be called to allow the system to - * release resources associated with this data memory. - * @param pData The pointer to data memory object - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -udata_close(UDataMemory *pData); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUDataMemoryPointer - * "Smart pointer" class, closes a UDataMemory via udata_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUDataMemoryPointer, UDataMemory, udata_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Get the pointer to the actual data inside the data memory. - * The data is read-only. - * - * ICU data must be at least 8-aligned, and should be 16-aligned. - * - * @param pData The pointer to data memory object - * @stable ICU 2.0 - */ -U_STABLE const void * U_EXPORT2 -udata_getMemory(UDataMemory *pData); - -/** - * Get the information from the data memory header. - * This allows to get access to the header containing - * platform data properties etc. which is not part of - * the data itself and can therefore not be accessed - * via the pointer that udata_getMemory() returns. - * - * @param pData pointer to the data memory object - * @param pInfo pointer to a UDataInfo object; - * its size field must be set correctly, - * typically to sizeof(UDataInfo). - * - * *pInfo will be filled with the UDataInfo structure - * in the data memory object. If this structure is smaller than - * pInfo->size, then the size will be - * adjusted and only part of the structure will be filled. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -udata_getInfo(UDataMemory *pData, UDataInfo *pInfo); - -/** - * This function bypasses the normal ICU data loading process and - * allows you to force ICU's system data to come out of a user-specified - * area in memory. - * - * ICU data must be at least 8-aligned, and should be 16-aligned. - * See http://userguide.icu-project.org/icudata - * - * The format of this data is that of the icu common data file, as is - * generated by the pkgdata tool with mode=common or mode=dll. - * You can read in a whole common mode file and pass the address to the start of the - * data, or (with the appropriate link options) pass in the pointer to - * the data that has been loaded from a dll by the operating system, - * as shown in this code: - * - * extern const char U_IMPORT U_ICUDATA_ENTRY_POINT []; - * // U_ICUDATA_ENTRY_POINT is same as entry point specified to pkgdata tool - * UErrorCode status = U_ZERO_ERROR; - * - * udata_setCommonData(&U_ICUDATA_ENTRY_POINT, &status); - * - * It is important that the declaration be as above. The entry point - * must not be declared as an extern void*. - * - * Starting with ICU 4.4, it is possible to set several data packages, - * one per call to this function. - * udata_open() will look for data in the multiple data packages in the order - * in which they were set. - * The position of the linked-in or default-name ICU .data package in the - * search list depends on when the first data item is loaded that is not contained - * in the already explicitly set packages. - * If data was loaded implicitly before the first call to this function - * (for example, via opening a converter, constructing a UnicodeString - * from default-codepage data, using formatting or collation APIs, etc.), - * then the default data will be first in the list. - * - * This function has no effect on application (non ICU) data. See udata_setAppData() - * for similar functionality for application data. - * - * @param data pointer to ICU common data - * @param err outgoing error status U_USING_DEFAULT_WARNING, U_UNSUPPORTED_ERROR - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -udata_setCommonData(const void *data, UErrorCode *err); - - -/** - * This function bypasses the normal ICU data loading process for application-specific - * data and allows you to force the it to come out of a user-specified - * pointer. - * - * ICU data must be at least 8-aligned, and should be 16-aligned. - * See http://userguide.icu-project.org/icudata - * - * The format of this data is that of the icu common data file, like 'icudt26l.dat' - * or the corresponding shared library (DLL) file. - * The application must read in or otherwise construct an image of the data and then - * pass the address of it to this function. - * - * - * Warning: setAppData will set a U_USING_DEFAULT_WARNING code if - * data with the specifed path that has already been opened, or - * if setAppData with the same path has already been called. - * Any such calls to setAppData will have no effect. - * - * - * @param packageName the package name by which the application will refer - * to (open) this data - * @param data pointer to the data - * @param err outgoing error status U_USING_DEFAULT_WARNING, U_UNSUPPORTED_ERROR - * @see udata_setCommonData - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -udata_setAppData(const char *packageName, const void *data, UErrorCode *err); - -/** - * Possible settings for udata_setFileAccess() - * @see udata_setFileAccess - * @stable ICU 3.4 - */ -typedef enum UDataFileAccess { - /** ICU looks for data in single files first, then in packages. (default) @stable ICU 3.4 */ - UDATA_FILES_FIRST, - /** An alias for the default access mode. @stable ICU 3.4 */ - UDATA_DEFAULT_ACCESS = UDATA_FILES_FIRST, - /** ICU only loads data from packages, not from single files. @stable ICU 3.4 */ - UDATA_ONLY_PACKAGES, - /** ICU loads data from packages first, and only from single files - if the data cannot be found in a package. @stable ICU 3.4 */ - UDATA_PACKAGES_FIRST, - /** ICU does not access the file system for data loading. @stable ICU 3.4 */ - UDATA_NO_FILES, -#ifndef U_HIDE_DEPRECATED_API - /** - * Number of real UDataFileAccess values. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UDATA_FILE_ACCESS_COUNT -#endif // U_HIDE_DEPRECATED_API -} UDataFileAccess; - -/** - * This function may be called to control how ICU loads data. It must be called - * before any ICU data is loaded, including application data loaded with - * ures/ResourceBundle or udata APIs. This function is not multithread safe. - * The results of calling it while other threads are loading data are undefined. - * @param access The type of file access to be used - * @param status Error code. - * @see UDataFileAccess - * @stable ICU 3.4 - */ -U_STABLE void U_EXPORT2 -udata_setFileAccess(UDataFileAccess access, UErrorCode *status); - -U_CDECL_END - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udateintervalformat.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udateintervalformat.h deleted file mode 100644 index ed9fa1e2b2..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udateintervalformat.h +++ /dev/null @@ -1,366 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -***************************************************************************************** -* Copyright (C) 2010-2012,2015-2016 International Business Machines -* Corporation and others. All Rights Reserved. -***************************************************************************************** -*/ - -#ifndef UDATEINTERVALFORMAT_H -#define UDATEINTERVALFORMAT_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/umisc.h" -#include "unicode/localpointer.h" -#include "unicode/uformattedvalue.h" -#include "unicode/udisplaycontext.h" - -/** - * \file - * \brief C API: Format a date interval. - * - * A UDateIntervalFormat is used to format the range between two UDate values - * in a locale-sensitive way, using a skeleton that specifies the precision and - * completeness of the information to show. If the range smaller than the resolution - * specified by the skeleton, a single date format will be produced. If the range - * is larger than the format specified by the skeleton, a locale-specific fallback - * will be used to format the items missing from the skeleton. - * - * For example, if the range is 2010-03-04 07:56 - 2010-03-04 19:56 (12 hours) - * - The skeleton jm will produce - * for en_US, "7:56 AM - 7:56 PM" - * for en_GB, "7:56 - 19:56" - * - The skeleton MMMd will produce - * for en_US, "Mar 4" - * for en_GB, "4 Mar" - * If the range is 2010-03-04 07:56 - 2010-03-08 16:11 (4 days, 8 hours, 15 minutes) - * - The skeleton jm will produce - * for en_US, "3/4/2010 7:56 AM - 3/8/2010 4:11 PM" - * for en_GB, "4/3/2010 7:56 - 8/3/2010 16:11" - * - The skeleton MMMd will produce - * for en_US, "Mar 4-8" - * for en_GB, "4-8 Mar" - * - * Note: the "-" characters in the above sample output will actually be - * Unicode 2013, EN_DASH, in all but the last example. - * - * Note, in ICU 4.4 the standard skeletons for which date interval format data - * is usually available are as follows; best results will be obtained by using - * skeletons from this set, or those formed by combining these standard skeletons - * (note that for these skeletons, the length of digit field such as d, y, or - * M vs MM is irrelevant (but for non-digit fields such as MMM vs MMMM it is - * relevant). Note that a skeleton involving h or H generally explicitly requests - * that time style (12- or 24-hour time respectively). For a skeleton that - * requests the locale's default time style (h or H), use 'j' instead of h or H. - * h, H, hm, Hm, - * hv, Hv, hmv, Hmv, - * d, - * M, MMM, MMMM, - * Md, MMMd, - * MEd, MMMEd, - * y, - * yM, yMMM, yMMMM, - * yMd, yMMMd, - * yMEd, yMMMEd - * - * Locales for which ICU 4.4 seems to have a reasonable amount of this data - * include: - * af, am, ar, be, bg, bn, ca, cs, da, de (_AT), el, en (_AU,_CA,_GB,_IE,_IN...), - * eo, es (_AR,_CL,_CO,...,_US) et, fa, fi, fo, fr (_BE,_CH,_CA), fur, gsw, he, - * hr, hu, hy, is, it (_CH), ja, kk, km, ko, lt, lv, mk, ml, mt, nb, nl )_BE), - * nn, pl, pt (_PT), rm, ro, ru (_UA), sk, sl, so, sq, sr, sr_Latn, sv, th, to, - * tr, uk, ur, vi, zh (_SG), zh_Hant (_HK,_MO) - */ - -/** - * Opaque UDateIntervalFormat object for use in C programs. - * @stable ICU 4.8 - */ -struct UDateIntervalFormat; -typedef struct UDateIntervalFormat UDateIntervalFormat; /**< C typedef for struct UDateIntervalFormat. @stable ICU 4.8 */ - -#ifndef U_HIDE_DRAFT_API -struct UFormattedDateInterval; -/** - * Opaque struct to contain the results of a UDateIntervalFormat operation. - * @draft ICU 64 - */ -typedef struct UFormattedDateInterval UFormattedDateInterval; -#endif /* U_HIDE_DRAFT_API */ - -/** - * Open a new UDateIntervalFormat object using the predefined rules for a - * given locale plus a specified skeleton. - * @param locale - * The locale for whose rules should be used; may be NULL for - * default locale. - * @param skeleton - * A pattern containing only the fields desired for the interval - * format, for example "Hm", "yMMMd", or "yMMMEdHm". - * @param skeletonLength - * The length of skeleton; may be -1 if the skeleton is zero-terminated. - * @param tzID - * A timezone ID specifying the timezone to use. If 0, use the default - * timezone. - * @param tzIDLength - * The length of tzID, or -1 if null-terminated. If 0, use the default - * timezone. - * @param status - * A pointer to a UErrorCode to receive any errors. - * @return - * A pointer to a UDateIntervalFormat object for the specified locale, - * or NULL if an error occurred. - * @stable ICU 4.8 - */ -U_STABLE UDateIntervalFormat* U_EXPORT2 -udtitvfmt_open(const char* locale, - const UChar* skeleton, - int32_t skeletonLength, - const UChar* tzID, - int32_t tzIDLength, - UErrorCode* status); - -/** - * Close a UDateIntervalFormat object. Once closed it may no longer be used. - * @param formatter - * The UDateIntervalFormat object to close. - * @stable ICU 4.8 - */ -U_STABLE void U_EXPORT2 -udtitvfmt_close(UDateIntervalFormat *formatter); - - -#ifndef U_HIDE_DRAFT_API -/** - * Creates an object to hold the result of a UDateIntervalFormat - * operation. The object can be used repeatedly; it is cleared whenever - * passed to a format function. - * - * @param ec Set if an error occurs. - * @return A pointer needing ownership. - * @draft ICU 64 - */ -U_CAPI UFormattedDateInterval* U_EXPORT2 -udtitvfmt_openResult(UErrorCode* ec); - -/** - * Returns a representation of a UFormattedDateInterval as a UFormattedValue, - * which can be subsequently passed to any API requiring that type. - * - * The returned object is owned by the UFormattedDateInterval and is valid - * only as long as the UFormattedDateInterval is present and unchanged in memory. - * - * You can think of this method as a cast between types. - * - * When calling ufmtval_nextPosition(): - * The fields are returned from left to right. The special field category - * UFIELD_CATEGORY_DATE_INTERVAL_SPAN is used to indicate which datetime - * primitives came from which arguments: 0 means fromCalendar, and 1 means - * toCalendar. The span category will always occur before the - * corresponding fields in UFIELD_CATEGORY_DATE - * in the ufmtval_nextPosition() iterator. - * - * @param uresult The object containing the formatted string. - * @param ec Set if an error occurs. - * @return A UFormattedValue owned by the input object. - * @draft ICU 64 - */ -U_CAPI const UFormattedValue* U_EXPORT2 -udtitvfmt_resultAsValue(const UFormattedDateInterval* uresult, UErrorCode* ec); - -/** - * Releases the UFormattedDateInterval created by udtitvfmt_openResult(). - * - * @param uresult The object to release. - * @draft ICU 64 - */ -U_CAPI void U_EXPORT2 -udtitvfmt_closeResult(UFormattedDateInterval* uresult); -#endif /* U_HIDE_DRAFT_API */ - - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUDateIntervalFormatPointer - * "Smart pointer" class, closes a UDateIntervalFormat via udtitvfmt_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.8 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateIntervalFormatPointer, UDateIntervalFormat, udtitvfmt_close); - -#ifndef U_HIDE_DRAFT_API -/** - * \class LocalUFormattedDateIntervalPointer - * "Smart pointer" class, closes a UFormattedDateInterval via udtitvfmt_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @draft ICU 64 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedDateIntervalPointer, UFormattedDateInterval, udtitvfmt_closeResult); -#endif /* U_HIDE_DRAFT_API */ - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - - -/** - * Formats a date/time range using the conventions established for the - * UDateIntervalFormat object. - * @param formatter - * The UDateIntervalFormat object specifying the format conventions. - * @param fromDate - * The starting point of the range. - * @param toDate - * The ending point of the range. - * @param result - * A pointer to a buffer to receive the formatted range. - * @param resultCapacity - * The maximum size of result. - * @param position - * A pointer to a UFieldPosition. On input, position->field is read. - * On output, position->beginIndex and position->endIndex indicate - * the beginning and ending indices of field number position->field, - * if such a field exists. This parameter may be NULL, in which case - * no field position data is returned. - * There may be multiple instances of a given field type in an - * interval format; in this case the position indices refer to the - * first instance. - * @param status - * A pointer to a UErrorCode to receive any errors. - * @return - * The total buffer size needed; if greater than resultLength, the - * output was truncated. - * @stable ICU 4.8 - */ -U_STABLE int32_t U_EXPORT2 -udtitvfmt_format(const UDateIntervalFormat* formatter, - UDate fromDate, - UDate toDate, - UChar* result, - int32_t resultCapacity, - UFieldPosition* position, - UErrorCode* status); - -#ifndef U_HIDE_DRAFT_API -/** - * Attributes and values to control the behavior of udtitvfmt_format. - * @internal - */ -typedef enum UDateIntervalFormatAttribute { - /** - * @internal - */ - UDTITVFMT_MINIMIZE_TYPE -} UDateIntervalFormatAttribute; - -typedef enum UDateIntervalFormatAttributeValue { - /** - * Standard behavior, no additional minimization. - * @internal - */ - UDTITVFMT_MINIMIZE_NONE = 0, - /** - * For intervals of less than 1 month that cross month boundaries, - * only show one month (use format for greatestDifference=d). - * @internal - */ - UDTITVFMT_MINIMIZE_ADJACENT_MONTHS, - /** - * For intervals of less than 12 hours that cross day boundaries, - * only show one day (use format for greatestDifference=h). - * @internal - */ - UDTITVFMT_MINIMIZE_ADJACENT_DAYS -} UDateIntervalFormatAttributeValue; - -/** - * Change attributes for the UDateIntervalFormat object. - * @param formatter - * The UDateIntervalFormat object whose attributes are to be changed. - * @param attr - * The attribute to change. - * @param value - * The new value for the attribute. - * @param status - * A pointer to a UErrorCode to receive any errors. - * @internal - */ -U_INTERNAL void U_EXPORT2 -udtitvfmt_setAttribute(UDateIntervalFormat* formatter, - UDateIntervalFormatAttribute attr, - UDateIntervalFormatAttributeValue value, - UErrorCode* status); - -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API -/** - * Formats a date/time range using the conventions established for the - * UDateIntervalFormat object. - * @param formatter - * The UDateIntervalFormat object specifying the format conventions. - * @param result - * The UFormattedDateInterval to contain the result of the - * formatting operation. - * @param fromDate - * The starting point of the range. - * @param toDate - * The ending point of the range. - * @param status - * A pointer to a UErrorCode to receive any errors. - * @draft ICU 64 - */ -U_DRAFT void U_EXPORT2 -udtitvfmt_formatToResult( - const UDateIntervalFormat* formatter, - UFormattedDateInterval* result, - UDate fromDate, - UDate toDate, - UErrorCode* status); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API -/** - * Set a particular UDisplayContext value in the formatter, such as - * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. This causes the formatted - * result to be capitalized appropriately for the context in which - * it is intended to be used, considering both the locale and the - * type of field at the beginning of the formatted result. - * @param formatter The formatter for which to set a UDisplayContext value. - * @param value The UDisplayContext value to set. - * @param status A pointer to an UErrorCode to receive any errors - * @draft ICU 65 - */ -U_DRAFT void U_EXPORT2 -udtitvfmt_setContext(UDateIntervalFormat* formatter, UDisplayContext value, UErrorCode* status); - -/** - * Get the formatter's UDisplayContext value for the specified UDisplayContextType, - * such as UDISPCTX_TYPE_CAPITALIZATION. - * @param formatter The formatter to query. - * @param type The UDisplayContextType whose value to return - * @param status A pointer to an UErrorCode to receive any errors - * @return The UDisplayContextValue for the specified type. - * @draft ICU 65 - */ -U_DRAFT UDisplayContext U_EXPORT2 -udtitvfmt_getContext(const UDateIntervalFormat* formatter, UDisplayContextType type, UErrorCode* status); - -#endif /* U_HIDE_DRAFT_API */ - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udatintv.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udatintv.h deleted file mode 100644 index 6ecda628bb..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udatintv.h +++ /dev/null @@ -1,146 +0,0 @@ -/* -****************************************************************************** -* Copyright (C) 2010-2011 Apple Inc. All Rights Reserved. -****************************************************************************** -*/ - -#ifndef UDATINTV_H -#define UDATINTV_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/umisc.h" -#include "unicode/udateintervalformat.h" - -/** - * NOTE - THE TEMPORARY APPLE INTERFACES DECLARED HERE ARE OBSOLETE, PLEASE USE - * THE REAL ICU EQUIVALENTS IN udateintervalformat.h - * - * A UDateIntervalFormat is used to format the range between two UDate values - * in a locale-sensitive way, using a skeleton that specifies the precision and - * completeness of the information to show. If the range smaller than the resolution - * specified by the skeleton, a single date format will be produced. If the range - * is larger than the format specified by the skeleton, a locale-specific fallback - * will be used to format the items missing from the skeleton. - * - * For example, if the range is 2010-03-04 07:56 - 2010-03-04 19:56 (12 hours) - * - The skeleton jm will produce - * for en_US, "7:56 AM – 7:56 PM" - * for en_GB, "7:56 – 19:56" - * - The skeleton MMMd will produce - * for en_US, "Mar 4" - * for en_GB, "4 Mar" - * If the range is 2010-03-04 07:56 - 2010-03-08 16:11 (4 days, 8 hours, 15 minutes) - * - The skeleton jm will produce - * for en_US, "3/4/2010 7:56 AM – 3/8/2010 4:11 PM" - * for en_GB, "4/3/2010 7:56 – 8/3/2010 16:11" - * - The skeleton MMMd will produce - * for en_US, "Mar 4–8" - * for en_GB, "4-8 Mar" - * - * Note, in ICU 4.4 the standard skeletons for which date interval format data - * is usually available are as follows; best results will be obtained by using - * skeletons from this set, or those formed by combining these standard skeletons - * (note that for these skeletons, the length of digit field such as d, y, or - * M vs MM is irrelevant (but for non-digit fields such as MMM vs MMMM it is - * relevant). Note that a skeleton involving h or H generally explicitly requests - * that time style (12- or 24-hour time respectively). For a skeleton that - * requests the locale's default time style (h or H), use 'j' instead of h or H. - * h, H, hm, Hm, - * hv, Hv, hmv, Hmv, - * d, - * M, MMM, MMMM, - * Md, MMMd, - * MEd, MMMEd, - * y, - * yM, yMMM, yMMMM, - * yMd, yMMMd, - * yMEd, yMMMEd - * - * Locales for which ICU 4.4 seems to have a reasonable amount of this data - * include: - * af, am, ar, be, bg, bn, ca, cs, da, de (_AT), el, en (_AU,_CA,_GB,_IE,_IN...), - * eo, es (_AR,_CL,_CO,...,_US) et, fa, fi, fo, fr (_BE,_CH,_CA), fur, gsw, he, - * hr, hu, hy, is, it (_CH), ja, kk, km, ko, lt, lv, mk, ml, mt, nb, nl )_BE), - * nn, pl, pt (_PT), rm, ro, ru (_UA), sk, sl, so, sq, sr, sr_Latn, sv, th, to, - * tr, uk, ur, vi, zh (_SG), zh_Hant (_HK,_MO) - */ - -/** - * A UDateIntervalFormat object for use in C programs. - * struct UDateIntervalFormat; defined in udateintervalformat.h - */ - -/** - * Open a new UDateIntervalFormat object using the predefined rules for a - * given locale plus a specified skeleton. - * @param locale - * The locale for whose rules should be used; may be NULL for - * default locale. - * @param skeleton - * A pattern containing only the fields desired for the interval - * format, for example "Hm", "yMMMd", or "yMMMEdHm". - * @param length - * The length of skeleton; may be -1 if the skeleton is zero-terminated. - * @param status - * A pointer to a UErrorCode to receive any errors. - * @return - * A UDateIntervalFormat object for the specified locale, or NULL - * if an error occurred. - * @internal/obsolete, use udtitvfmt_open in udateintervalformat.h - */ -U_INTERNAL UDateIntervalFormat* U_EXPORT2 -udatintv_open(const char* locale, - const UChar* skeleton, - int32_t skeletonLength, - UErrorCode* status); - -/** - * Close a UDateIntervalFormat object. Once closed it may no longer be used. - * @param datintv - * The UDateIntervalFormat object to close. - * @internal/obsolete, use udtitvfmt_close in udateintervalformat.h - */ -U_INTERNAL void U_EXPORT2 -udatintv_close(UDateIntervalFormat *datintv); - -/** - * Formats a date/time range using the conventions established for the - * UDateIntervalFormat object. - * @param datintv - * The UDateIntervalFormat object specifying the format conventions. - * @param fromDate - * The starting point of the range. - * @param fromDate - * The ending point of the range. - * @param result - * A pointer to a buffer to receive the formatted range. - * @param resultCapacity - * The maximum size of result. - * @param position - * A pointer to a UFieldPosition. On input, position->field is read. - * On output, position->beginIndex and position->endIndex indicate - * the beginning and ending indices of field number position->field, - * if such a field exists. This parameter may be NULL, in which case - * no field position data is returned. - * @param status - * A pointer to a UErrorCode to receive any errors. - * @return - * The total buffer size needed; if greater than resultLength, the - * output was truncated. - * @internal/obsolete, use udtitvfmt_format in udateintervalformat.h - */ -U_INTERNAL int32_t U_EXPORT2 -udatintv_format(const UDateIntervalFormat* datintv, - UDate fromDate, - UDate toDate, - UChar* result, - int32_t resultCapacity, - UFieldPosition* position, - UErrorCode* status); - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udatpg.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udatpg.h deleted file mode 100644 index 07339bbc4b..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udatpg.h +++ /dev/null @@ -1,698 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2007-2015, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: udatpg.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2007jul30 -* created by: Markus W. Scherer -*/ - -#ifndef __UDATPG_H__ -#define __UDATPG_H__ - -#include "unicode/utypes.h" -#include "unicode/uenum.h" -#include "unicode/localpointer.h" - -/** - * \file - * \brief C API: Wrapper for icu::DateTimePatternGenerator (unicode/dtptngen.h). - * - * UDateTimePatternGenerator provides flexible generation of date format patterns, - * like "yy-MM-dd". The user can build up the generator by adding successive - * patterns. Once that is done, a query can be made using a "skeleton", which is - * a pattern which just includes the desired fields and lengths. The generator - * will return the "best fit" pattern corresponding to that skeleton. - *

The main method people will use is udatpg_getBestPattern, since normally - * UDateTimePatternGenerator is pre-built with data from a particular locale. - * However, generators can be built directly from other data as well. - *

Issue: may be useful to also have a function that returns the list of - * fields in a pattern, in order, since we have that internally. - * That would be useful for getting the UI order of field elements. - */ - -/** - * Opaque type for a date/time pattern generator object. - * @stable ICU 3.8 - */ -typedef void *UDateTimePatternGenerator; - -/** - * Field number constants for udatpg_getAppendItemFormats() and similar functions. - * These constants are separate from UDateFormatField despite semantic overlap - * because some fields are merged for the date/time pattern generator. - * @stable ICU 3.8 - */ -typedef enum UDateTimePatternField { - /** @stable ICU 3.8 */ - UDATPG_ERA_FIELD, - /** @stable ICU 3.8 */ - UDATPG_YEAR_FIELD, - /** @stable ICU 3.8 */ - UDATPG_QUARTER_FIELD, - /** @stable ICU 3.8 */ - UDATPG_MONTH_FIELD, - /** @stable ICU 3.8 */ - UDATPG_WEEK_OF_YEAR_FIELD, - /** @stable ICU 3.8 */ - UDATPG_WEEK_OF_MONTH_FIELD, - /** @stable ICU 3.8 */ - UDATPG_WEEKDAY_FIELD, - /** @stable ICU 3.8 */ - UDATPG_DAY_OF_YEAR_FIELD, - /** @stable ICU 3.8 */ - UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, - /** @stable ICU 3.8 */ - UDATPG_DAY_FIELD, - /** @stable ICU 3.8 */ - UDATPG_DAYPERIOD_FIELD, - /** @stable ICU 3.8 */ - UDATPG_HOUR_FIELD, - /** @stable ICU 3.8 */ - UDATPG_MINUTE_FIELD, - /** @stable ICU 3.8 */ - UDATPG_SECOND_FIELD, - /** @stable ICU 3.8 */ - UDATPG_FRACTIONAL_SECOND_FIELD, - /** @stable ICU 3.8 */ - UDATPG_ZONE_FIELD, - - /* Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API, - * it is needed for layout of DateTimePatternGenerator object. */ - /** - * One more than the highest normal UDateTimePatternField value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UDATPG_FIELD_COUNT -} UDateTimePatternField; - -/** - * Field display name width constants for udatpg_getFieldDisplayName(). - * @stable ICU 61 - */ -typedef enum UDateTimePGDisplayWidth { - /** @stable ICU 61 */ - UDATPG_WIDE, - /** @stable ICU 61 */ - UDATPG_ABBREVIATED, - /** @stable ICU 61 */ - UDATPG_NARROW -} UDateTimePGDisplayWidth; - -/** - * Masks to control forcing the length of specified fields in the returned - * pattern to match those in the skeleton (when this would not happen - * otherwise). These may be combined to force the length of multiple fields. - * Used with udatpg_getBestPatternWithOptions, udatpg_replaceFieldTypesWithOptions. - * @stable ICU 4.4 - */ -typedef enum UDateTimePatternMatchOptions { - /** @stable ICU 4.4 */ - UDATPG_MATCH_NO_OPTIONS = 0, - /** @stable ICU 4.4 */ - UDATPG_MATCH_HOUR_FIELD_LENGTH = 1 << UDATPG_HOUR_FIELD, -#ifndef U_HIDE_INTERNAL_API - /** @internal ICU 4.4 */ - UDATPG_MATCH_MINUTE_FIELD_LENGTH = 1 << UDATPG_MINUTE_FIELD, - /** @internal ICU 4.4 */ - UDATPG_MATCH_SECOND_FIELD_LENGTH = 1 << UDATPG_SECOND_FIELD, -#endif /* U_HIDE_INTERNAL_API */ - /** @stable ICU 4.4 */ - UDATPG_MATCH_ALL_FIELDS_LENGTH = (1 << UDATPG_FIELD_COUNT) - 1, - /** @internal, Apple-specific for now */ - UADATPG_FORCE_12_HOUR_CYCLE = 1 << 29, - /** @internal, Apple-specific for now */ - UADATPG_FORCE_24_HOUR_CYCLE = 1 << 30, - /** @internal, Apple-specific for now */ - UADATPG_FORCE_HOUR_CYCLE_MASK = 3 << 29, -} UDateTimePatternMatchOptions; - -/** - * Status return values from udatpg_addPattern(). - * @stable ICU 3.8 - */ -typedef enum UDateTimePatternConflict { - /** @stable ICU 3.8 */ - UDATPG_NO_CONFLICT, - /** @stable ICU 3.8 */ - UDATPG_BASE_CONFLICT, - /** @stable ICU 3.8 */ - UDATPG_CONFLICT, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UDateTimePatternConflict value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UDATPG_CONFLICT_COUNT -#endif // U_HIDE_DEPRECATED_API -} UDateTimePatternConflict; - -/** - * Open a generator according to a given locale. - * @param locale - * @param pErrorCode a pointer to the UErrorCode which must not indicate a - * failure before the function call. - * @return a pointer to UDateTimePatternGenerator. - * @stable ICU 3.8 - */ -U_STABLE UDateTimePatternGenerator * U_EXPORT2 -udatpg_open(const char *locale, UErrorCode *pErrorCode); - -/** - * Open an empty generator, to be constructed with udatpg_addPattern(...) etc. - * @param pErrorCode a pointer to the UErrorCode which must not indicate a - * failure before the function call. - * @return a pointer to UDateTimePatternGenerator. - * @stable ICU 3.8 - */ -U_STABLE UDateTimePatternGenerator * U_EXPORT2 -udatpg_openEmpty(UErrorCode *pErrorCode); - -/** - * Close a generator. - * @param dtpg a pointer to UDateTimePatternGenerator. - * @stable ICU 3.8 - */ -U_STABLE void U_EXPORT2 -udatpg_close(UDateTimePatternGenerator *dtpg); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUDateTimePatternGeneratorPointer - * "Smart pointer" class, closes a UDateTimePatternGenerator via udatpg_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateTimePatternGeneratorPointer, UDateTimePatternGenerator, udatpg_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Create a copy pf a generator. - * @param dtpg a pointer to UDateTimePatternGenerator to be copied. - * @param pErrorCode a pointer to the UErrorCode which must not indicate a - * failure before the function call. - * @return a pointer to a new UDateTimePatternGenerator. - * @stable ICU 3.8 - */ -U_STABLE UDateTimePatternGenerator * U_EXPORT2 -udatpg_clone(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode); - -/** - * Get the best pattern matching the input skeleton. It is guaranteed to - * have all of the fields in the skeleton. - * - * Note that this function uses a non-const UDateTimePatternGenerator: - * It uses a stateful pattern parser which is set up for each generator object, - * rather than creating one for each function call. - * Consecutive calls to this function do not affect each other, - * but this function cannot be used concurrently on a single generator object. - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param skeleton - * The skeleton is a pattern containing only the variable fields. - * For example, "MMMdd" and "mmhh" are skeletons. - * @param length the length of skeleton - * @param bestPattern - * The best pattern found from the given skeleton. - * @param capacity the capacity of bestPattern. - * @param pErrorCode a pointer to the UErrorCode which must not indicate a - * failure before the function call. - * @return the length of bestPattern. - * @stable ICU 3.8 - */ -U_STABLE int32_t U_EXPORT2 -udatpg_getBestPattern(UDateTimePatternGenerator *dtpg, - const UChar *skeleton, int32_t length, - UChar *bestPattern, int32_t capacity, - UErrorCode *pErrorCode); - -/** - * Get the best pattern matching the input skeleton. It is guaranteed to - * have all of the fields in the skeleton. - * - * Note that this function uses a non-const UDateTimePatternGenerator: - * It uses a stateful pattern parser which is set up for each generator object, - * rather than creating one for each function call. - * Consecutive calls to this function do not affect each other, - * but this function cannot be used concurrently on a single generator object. - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param skeleton - * The skeleton is a pattern containing only the variable fields. - * For example, "MMMdd" and "mmhh" are skeletons. - * @param length the length of skeleton - * @param options - * Options for forcing the length of specified fields in the - * returned pattern to match those in the skeleton (when this - * would not happen otherwise). For default behavior, use - * UDATPG_MATCH_NO_OPTIONS. - * @param bestPattern - * The best pattern found from the given skeleton. - * @param capacity - * the capacity of bestPattern. - * @param pErrorCode - * a pointer to the UErrorCode which must not indicate a - * failure before the function call. - * @return the length of bestPattern. - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -udatpg_getBestPatternWithOptions(UDateTimePatternGenerator *dtpg, - const UChar *skeleton, int32_t length, - UDateTimePatternMatchOptions options, - UChar *bestPattern, int32_t capacity, - UErrorCode *pErrorCode); - -/** - * Get a unique skeleton from a given pattern. For example, - * both "MMM-dd" and "dd/MMM" produce the skeleton "MMMdd". - * - * Note that this function uses a non-const UDateTimePatternGenerator: - * It uses a stateful pattern parser which is set up for each generator object, - * rather than creating one for each function call. - * Consecutive calls to this function do not affect each other, - * but this function cannot be used concurrently on a single generator object. - * - * @param unusedDtpg a pointer to UDateTimePatternGenerator. - * This parameter is no longer used. Callers may pass NULL. - * @param pattern input pattern, such as "dd/MMM". - * @param length the length of pattern. - * @param skeleton such as "MMMdd" - * @param capacity the capacity of skeleton. - * @param pErrorCode a pointer to the UErrorCode which must not indicate a - * failure before the function call. - * @return the length of skeleton. - * @stable ICU 3.8 - */ -U_STABLE int32_t U_EXPORT2 -udatpg_getSkeleton(UDateTimePatternGenerator *unusedDtpg, - const UChar *pattern, int32_t length, - UChar *skeleton, int32_t capacity, - UErrorCode *pErrorCode); - -/** - * Get a unique base skeleton from a given pattern. This is the same - * as the skeleton, except that differences in length are minimized so - * as to only preserve the difference between string and numeric form. So - * for example, both "MMM-dd" and "d/MMM" produce the skeleton "MMMd" - * (notice the single d). - * - * Note that this function uses a non-const UDateTimePatternGenerator: - * It uses a stateful pattern parser which is set up for each generator object, - * rather than creating one for each function call. - * Consecutive calls to this function do not affect each other, - * but this function cannot be used concurrently on a single generator object. - * - * @param unusedDtpg a pointer to UDateTimePatternGenerator. - * This parameter is no longer used. Callers may pass NULL. - * @param pattern input pattern, such as "dd/MMM". - * @param length the length of pattern. - * @param baseSkeleton such as "Md" - * @param capacity the capacity of base skeleton. - * @param pErrorCode a pointer to the UErrorCode which must not indicate a - * failure before the function call. - * @return the length of baseSkeleton. - * @stable ICU 3.8 - */ -U_STABLE int32_t U_EXPORT2 -udatpg_getBaseSkeleton(UDateTimePatternGenerator *unusedDtpg, - const UChar *pattern, int32_t length, - UChar *baseSkeleton, int32_t capacity, - UErrorCode *pErrorCode); - -/** - * Adds a pattern to the generator. If the pattern has the same skeleton as - * an existing pattern, and the override parameter is set, then the previous - * value is overriden. Otherwise, the previous value is retained. In either - * case, the conflicting status is set and previous vale is stored in - * conflicting pattern. - *

- * Note that single-field patterns (like "MMM") are automatically added, and - * don't need to be added explicitly! - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param pattern input pattern, such as "dd/MMM" - * @param patternLength the length of pattern. - * @param override When existing values are to be overridden use true, - * otherwise use false. - * @param conflictingPattern Previous pattern with the same skeleton. - * @param capacity the capacity of conflictingPattern. - * @param pLength a pointer to the length of conflictingPattern. - * @param pErrorCode a pointer to the UErrorCode which must not indicate a - * failure before the function call. - * @return conflicting status. The value could be UDATPG_NO_CONFLICT, - * UDATPG_BASE_CONFLICT or UDATPG_CONFLICT. - * @stable ICU 3.8 - */ -U_STABLE UDateTimePatternConflict U_EXPORT2 -udatpg_addPattern(UDateTimePatternGenerator *dtpg, - const UChar *pattern, int32_t patternLength, - UBool override, - UChar *conflictingPattern, int32_t capacity, int32_t *pLength, - UErrorCode *pErrorCode); - -/** - * An AppendItem format is a pattern used to append a field if there is no - * good match. For example, suppose that the input skeleton is "GyyyyMMMd", - * and there is no matching pattern internally, but there is a pattern - * matching "yyyyMMMd", say "d-MM-yyyy". Then that pattern is used, plus the - * G. The way these two are conjoined is by using the AppendItemFormat for G - * (era). So if that value is, say "{0}, {1}" then the final resulting - * pattern is "d-MM-yyyy, G". - *

- * There are actually three available variables: {0} is the pattern so far, - * {1} is the element we are adding, and {2} is the name of the element. - *

- * This reflects the way that the CLDR data is organized. - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param field UDateTimePatternField, such as UDATPG_ERA_FIELD - * @param value pattern, such as "{0}, {1}" - * @param length the length of value. - * @stable ICU 3.8 - */ -U_STABLE void U_EXPORT2 -udatpg_setAppendItemFormat(UDateTimePatternGenerator *dtpg, - UDateTimePatternField field, - const UChar *value, int32_t length); - -/** - * Getter corresponding to setAppendItemFormat. Values below 0 or at or - * above UDATPG_FIELD_COUNT are illegal arguments. - * - * @param dtpg A pointer to UDateTimePatternGenerator. - * @param field UDateTimePatternField, such as UDATPG_ERA_FIELD - * @param pLength A pointer that will receive the length of appendItemFormat. - * @return appendItemFormat for field. - * @stable ICU 3.8 - */ -U_STABLE const UChar * U_EXPORT2 -udatpg_getAppendItemFormat(const UDateTimePatternGenerator *dtpg, - UDateTimePatternField field, - int32_t *pLength); - -/** - * Set the name of field, eg "era" in English for ERA. These are only - * used if the corresponding AppendItemFormat is used, and if it contains a - * {2} variable. - *

- * This reflects the way that the CLDR data is organized. - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param field UDateTimePatternField - * @param value name for the field. - * @param length the length of value. - * @stable ICU 3.8 - */ -U_STABLE void U_EXPORT2 -udatpg_setAppendItemName(UDateTimePatternGenerator *dtpg, - UDateTimePatternField field, - const UChar *value, int32_t length); - -/** - * Getter corresponding to setAppendItemNames. Values below 0 or at or above - * UDATPG_FIELD_COUNT are illegal arguments. Note: The more general function - * for getting date/time field display names is udatpg_getFieldDisplayName. - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param field UDateTimePatternField, such as UDATPG_ERA_FIELD - * @param pLength A pointer that will receive the length of the name for field. - * @return name for field - * @see udatpg_getFieldDisplayName - * @stable ICU 3.8 - */ -U_STABLE const UChar * U_EXPORT2 -udatpg_getAppendItemName(const UDateTimePatternGenerator *dtpg, - UDateTimePatternField field, - int32_t *pLength); - -/** - * The general interface to get a display name for a particular date/time field, - * in one of several possible display widths. - * - * @param dtpg - * A pointer to the UDateTimePatternGenerator object with the localized - * display names. - * @param field - * The desired UDateTimePatternField, such as UDATPG_ERA_FIELD. - * @param width - * The desired UDateTimePGDisplayWidth, such as UDATPG_ABBREVIATED. - * @param fieldName - * A pointer to a buffer to receive the NULL-terminated display name. If the name - * fits into fieldName but cannot be NULL-terminated (length == capacity) then - * the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the name doesn't - * fit into fieldName then the error code is set to U_BUFFER_OVERFLOW_ERROR. - * @param capacity - * The size of fieldName (in UChars). - * @param pErrorCode - * A pointer to a UErrorCode to receive any errors - * @return - * The full length of the name; if greater than capacity, fieldName contains a - * truncated result. - * @stable ICU 61 - */ -U_STABLE int32_t U_EXPORT2 -udatpg_getFieldDisplayName(const UDateTimePatternGenerator *dtpg, - UDateTimePatternField field, - UDateTimePGDisplayWidth width, - UChar *fieldName, int32_t capacity, - UErrorCode *pErrorCode); - -/** - * The DateTimeFormat is a message format pattern used to compose date and - * time patterns. The default pattern in the root locale is "{1} {0}", where - * {1} will be replaced by the date pattern and {0} will be replaced by the - * time pattern; however, other locales may specify patterns such as - * "{1}, {0}" or "{1} 'at' {0}", etc. - *

- * This is used when the input skeleton contains both date and time fields, - * but there is not a close match among the added patterns. For example, - * suppose that this object was created by adding "dd-MMM" and "hh:mm", and - * its DateTimeFormat is the default "{1} {0}". Then if the input skeleton - * is "MMMdhmm", there is not an exact match, so the input skeleton is - * broken up into two components "MMMd" and "hmm". There are close matches - * for those two skeletons, so the result is put together with this pattern, - * resulting in "d-MMM h:mm". - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param dtFormat - * message format pattern, here {1} will be replaced by the date - * pattern and {0} will be replaced by the time pattern. - * @param length the length of dtFormat. - * @stable ICU 3.8 - */ -U_STABLE void U_EXPORT2 -udatpg_setDateTimeFormat(const UDateTimePatternGenerator *dtpg, - const UChar *dtFormat, int32_t length); - -/** - * Getter corresponding to setDateTimeFormat. - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param pLength A pointer that will receive the length of the format - * @return dateTimeFormat. - * @stable ICU 3.8 - */ -U_STABLE const UChar * U_EXPORT2 -udatpg_getDateTimeFormat(const UDateTimePatternGenerator *dtpg, - int32_t *pLength); - -/** - * The decimal value is used in formatting fractions of seconds. If the - * skeleton contains fractional seconds, then this is used with the - * fractional seconds. For example, suppose that the input pattern is - * "hhmmssSSSS", and the best matching pattern internally is "H:mm:ss", and - * the decimal string is ",". Then the resulting pattern is modified to be - * "H:mm:ss,SSSS" - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param decimal - * @param length the length of decimal. - * @stable ICU 3.8 - */ -U_STABLE void U_EXPORT2 -udatpg_setDecimal(UDateTimePatternGenerator *dtpg, - const UChar *decimal, int32_t length); - -/** - * Getter corresponding to setDecimal. - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param pLength A pointer that will receive the length of the decimal string. - * @return corresponding to the decimal point. - * @stable ICU 3.8 - */ -U_STABLE const UChar * U_EXPORT2 -udatpg_getDecimal(const UDateTimePatternGenerator *dtpg, - int32_t *pLength); - -/** - * Adjusts the field types (width and subtype) of a pattern to match what is - * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a - * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be - * "dd-MMMM hh:mm". This is used internally to get the best match for the - * input skeleton, but can also be used externally. - * - * Note that this function uses a non-const UDateTimePatternGenerator: - * It uses a stateful pattern parser which is set up for each generator object, - * rather than creating one for each function call. - * Consecutive calls to this function do not affect each other, - * but this function cannot be used concurrently on a single generator object. - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param pattern Input pattern - * @param patternLength the length of input pattern. - * @param skeleton - * @param skeletonLength the length of input skeleton. - * @param dest pattern adjusted to match the skeleton fields widths and subtypes. - * @param destCapacity the capacity of dest. - * @param pErrorCode a pointer to the UErrorCode which must not indicate a - * failure before the function call. - * @return the length of dest. - * @stable ICU 3.8 - */ -U_STABLE int32_t U_EXPORT2 -udatpg_replaceFieldTypes(UDateTimePatternGenerator *dtpg, - const UChar *pattern, int32_t patternLength, - const UChar *skeleton, int32_t skeletonLength, - UChar *dest, int32_t destCapacity, - UErrorCode *pErrorCode); - -/** - * Adjusts the field types (width and subtype) of a pattern to match what is - * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a - * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be - * "dd-MMMM hh:mm". This is used internally to get the best match for the - * input skeleton, but can also be used externally. - * - * Note that this function uses a non-const UDateTimePatternGenerator: - * It uses a stateful pattern parser which is set up for each generator object, - * rather than creating one for each function call. - * Consecutive calls to this function do not affect each other, - * but this function cannot be used concurrently on a single generator object. - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param pattern Input pattern - * @param patternLength the length of input pattern. - * @param skeleton - * @param skeletonLength the length of input skeleton. - * @param options - * Options controlling whether the length of specified fields in the - * pattern are adjusted to match those in the skeleton (when this - * would not happen otherwise). For default behavior, use - * UDATPG_MATCH_NO_OPTIONS. - * @param dest pattern adjusted to match the skeleton fields widths and subtypes. - * @param destCapacity the capacity of dest. - * @param pErrorCode a pointer to the UErrorCode which must not indicate a - * failure before the function call. - * @return the length of dest. - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -udatpg_replaceFieldTypesWithOptions(UDateTimePatternGenerator *dtpg, - const UChar *pattern, int32_t patternLength, - const UChar *skeleton, int32_t skeletonLength, - UDateTimePatternMatchOptions options, - UChar *dest, int32_t destCapacity, - UErrorCode *pErrorCode); - -/** - * Return a UEnumeration list of all the skeletons in canonical form. - * Call udatpg_getPatternForSkeleton() to get the corresponding pattern. - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param pErrorCode a pointer to the UErrorCode which must not indicate a - * failure before the function call - * @return a UEnumeration list of all the skeletons - * The caller must close the object. - * @stable ICU 3.8 - */ -U_STABLE UEnumeration * U_EXPORT2 -udatpg_openSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode); - -/** - * Return a UEnumeration list of all the base skeletons in canonical form. - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param pErrorCode a pointer to the UErrorCode which must not indicate a - * failure before the function call. - * @return a UEnumeration list of all the base skeletons - * The caller must close the object. - * @stable ICU 3.8 - */ -U_STABLE UEnumeration * U_EXPORT2 -udatpg_openBaseSkeletons(const UDateTimePatternGenerator *dtpg, UErrorCode *pErrorCode); - -/** - * Get the pattern corresponding to a given skeleton. - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param skeleton - * @param skeletonLength pointer to the length of skeleton. - * @param pLength pointer to the length of return pattern. - * @return pattern corresponding to a given skeleton. - * @stable ICU 3.8 - */ -U_STABLE const UChar * U_EXPORT2 -udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg, - const UChar *skeleton, int32_t skeletonLength, - int32_t *pLength); - -/** - * Remap a pattern per the options (Apple-specific for now). - * Currently this will only remap the time to force an alternate time - * cycle (12-hour instead of 24-hour or vice versa), handling updating - * the pattern characters, insertion/removal of AM/PM marker, etc. in - * a locale-appropriate way. It calls udatpg_getBestPatternWithOptions - * as part of updating the time format. - * - * @param dtpg a pointer to UDateTimePatternGenerator. - * @param pattern - * The pattern to remap. - * @param patternLength - * The length of the pattern (may be -1 to indicate that it - * is zero-terminated). - * @param options - * Options for forcing the hour cycle and for forcing the - * length of specified fields in the - * returned pattern to match those in the skeleton (when this - * would not happen otherwise). For default behavior, use - * UDATPG_MATCH_NO_OPTIONS. - * @param newPattern - * The remapped pattern. - * @param newPatternCapacity - * The capacity of newPattern. - * @param pErrorCode - * A pointer to the UErrorCode. If at entry it indicates a - * failure, the call will return immediately. - * @return - * The length of newPattern. If this is greater than - * newPatternCapacity an error will be set and the contents of - * newPattern are undefined. - * @internal - */ -U_INTERNAL int32_t U_EXPORT2 -uadatpg_remapPatternWithOptions(UDateTimePatternGenerator *dtpg, - const UChar *pattern, int32_t patternLength, - UDateTimePatternMatchOptions options, - UChar *newPattern, int32_t newPatternCapacity, - UErrorCode *pErrorCode); - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udisplaycontext.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udisplaycontext.h deleted file mode 100644 index f9fb1fdf18..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/udisplaycontext.h +++ /dev/null @@ -1,204 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -***************************************************************************************** -* Copyright (C) 2014-2016, International Business Machines -* Corporation and others. All Rights Reserved. -***************************************************************************************** -*/ - -#ifndef UDISPLAYCONTEXT_H -#define UDISPLAYCONTEXT_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -/** - * \file - * \brief C API: Display context types (enum values) - */ - -/** - * Display context types, for getting values of a particular setting. - * Note, the specific numeric values are internal and may change. - * @stable ICU 51 - */ -enum UDisplayContextType { - /** - * Type to retrieve the dialect handling setting, e.g. - * UDISPCTX_STANDARD_NAMES or UDISPCTX_DIALECT_NAMES. - * @stable ICU 51 - */ - UDISPCTX_TYPE_DIALECT_HANDLING = 0, - /** - * Type to retrieve the capitalization context setting, e.g. - * UDISPCTX_CAPITALIZATION_NONE, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, - * UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, etc. - * @stable ICU 51 - */ - UDISPCTX_TYPE_CAPITALIZATION = 1, - /** - * Type to retrieve the display length setting, e.g. - * UDISPCTX_LENGTH_FULL, UDISPCTX_LENGTH_SHORT. - * @stable ICU 54 - */ - UDISPCTX_TYPE_DISPLAY_LENGTH = 2, - /** - * Type to retrieve the substitute handling setting, e.g. - * UDISPCTX_SUBSTITUTE, UDISPCTX_NO_SUBSTITUTE. - * @stable ICU 58 - */ - UDISPCTX_TYPE_SUBSTITUTE_HANDLING = 3 -#ifndef U_HIDE_INTERNAL_API - , - /** - * Apple-specific type to retrieve the display length setting, e.g. - * UADISPCTX_LENGTH_STANDARD, UADISPCTX_LENGTH_SHORT - * @internal ICU 54 - */ - UADISPCTX_TYPE_LENGTH = 32, -#endif /* U_HIDE_INTERNAL_API */ -}; -/** -* @stable ICU 51 -*/ -typedef enum UDisplayContextType UDisplayContextType; - -/** - * Display context settings. - * Note, the specific numeric values are internal and may change. - * @stable ICU 51 - */ -enum UDisplayContext { - /** - * ================================ - * DIALECT_HANDLING can be set to one of UDISPCTX_STANDARD_NAMES or - * UDISPCTX_DIALECT_NAMES. Use UDisplayContextType UDISPCTX_TYPE_DIALECT_HANDLING - * to get the value. - */ - /** - * A possible setting for DIALECT_HANDLING: - * use standard names when generating a locale name, - * e.g. en_GB displays as 'English (United Kingdom)'. - * @stable ICU 51 - */ - UDISPCTX_STANDARD_NAMES = (UDISPCTX_TYPE_DIALECT_HANDLING<<8) + 0, - /** - * A possible setting for DIALECT_HANDLING: - * use dialect names, when generating a locale name, - * e.g. en_GB displays as 'British English'. - * @stable ICU 51 - */ - UDISPCTX_DIALECT_NAMES = (UDISPCTX_TYPE_DIALECT_HANDLING<<8) + 1, - /** - * ================================ - * CAPITALIZATION can be set to one of UDISPCTX_CAPITALIZATION_NONE, - * UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, - * UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, - * UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, or - * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. - * Use UDisplayContextType UDISPCTX_TYPE_CAPITALIZATION to get the value. - */ - /** - * The capitalization context to be used is unknown (this is the default value). - * @stable ICU 51 - */ - UDISPCTX_CAPITALIZATION_NONE = (UDISPCTX_TYPE_CAPITALIZATION<<8) + 0, - /** - * The capitalization context if a date, date symbol or display name is to be - * formatted with capitalization appropriate for the middle of a sentence. - * @stable ICU 51 - */ - UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE = (UDISPCTX_TYPE_CAPITALIZATION<<8) + 1, - /** - * The capitalization context if a date, date symbol or display name is to be - * formatted with capitalization appropriate for the beginning of a sentence. - * @stable ICU 51 - */ - UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE = (UDISPCTX_TYPE_CAPITALIZATION<<8) + 2, - /** - * The capitalization context if a date, date symbol or display name is to be - * formatted with capitalization appropriate for a user-interface list or menu item. - * @stable ICU 51 - */ - UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU = (UDISPCTX_TYPE_CAPITALIZATION<<8) + 3, - /** - * The capitalization context if a date, date symbol or display name is to be - * formatted with capitalization appropriate for stand-alone usage such as an - * isolated name on a calendar page. - * @stable ICU 51 - */ - UDISPCTX_CAPITALIZATION_FOR_STANDALONE = (UDISPCTX_TYPE_CAPITALIZATION<<8) + 4, - /** - * ================================ - * DISPLAY_LENGTH can be set to one of UDISPCTX_LENGTH_FULL or - * UDISPCTX_LENGTH_SHORT. Use UDisplayContextType UDISPCTX_TYPE_DISPLAY_LENGTH - * to get the value. - */ - /** - * A possible setting for DISPLAY_LENGTH: - * use full names when generating a locale name, - * e.g. "United States" for US. - * @stable ICU 54 - */ - UDISPCTX_LENGTH_FULL = (UDISPCTX_TYPE_DISPLAY_LENGTH<<8) + 0, - /** - * A possible setting for DISPLAY_LENGTH: - * use short names when generating a locale name, - * e.g. "U.S." for US. - * @stable ICU 54 - */ - UDISPCTX_LENGTH_SHORT = (UDISPCTX_TYPE_DISPLAY_LENGTH<<8) + 1, - /** - * ================================ - * SUBSTITUTE_HANDLING can be set to one of UDISPCTX_SUBSTITUTE or - * UDISPCTX_NO_SUBSTITUTE. Use UDisplayContextType UDISPCTX_TYPE_SUBSTITUTE_HANDLING - * to get the value. - */ - /** - * A possible setting for SUBSTITUTE_HANDLING: - * Returns a fallback value (e.g., the input code) when no data is available. - * This is the default value. - * @stable ICU 58 - */ - UDISPCTX_SUBSTITUTE = (UDISPCTX_TYPE_SUBSTITUTE_HANDLING<<8) + 0, - /** - * A possible setting for SUBSTITUTE_HANDLING: - * Returns a null value when no data is available. - * @stable ICU 58 - */ - UDISPCTX_NO_SUBSTITUTE = (UDISPCTX_TYPE_SUBSTITUTE_HANDLING<<8) + 1 -#ifndef U_HIDE_INTERNAL_API - , - /** - * ================================ - * Apple-specific LENGTH can be set to one of UADISPCTX_LENGTH_STANDARD or - * UADISPCTX_LENGTH_SHORT. Use UDisplayContextType UADISPCTX_TYPE_LENGTH - * to get the value. - */ - /** - * A possible Apple-specific setting for LENGTH: - * use standard length names when generating a locale name. - * @internal ICU 54 - */ - UADISPCTX_LENGTH_STANDARD = (UADISPCTX_TYPE_LENGTH<<8) + 0, - /** - * A possible Apple-specific setting for LENGTH: - * use short length names (if available) when generating a locale name - * (in most cases short names are not available and the standard - * name will be used). - * @internal ICU 54 - */ - UADISPCTX_LENGTH_SHORT = (UADISPCTX_TYPE_LENGTH<<8) + 1, -#endif /* U_HIDE_INTERNAL_API */ - -}; -/** -* @stable ICU 51 -*/ -typedef enum UDisplayContext UDisplayContext; - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uenum.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uenum.h deleted file mode 100644 index 0f14444a3e..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uenum.h +++ /dev/null @@ -1,208 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2002-2013, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: uenum.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:2 -* -* created on: 2002jul08 -* created by: Vladimir Weinstein -*/ - -#ifndef __UENUM_H -#define __UENUM_H - -#include "unicode/utypes.h" -#include "unicode/localpointer.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN -class StringEnumeration; -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -/** - * \file - * \brief C API: String Enumeration - */ - -/** - * An enumeration object. - * For usage in C programs. - * @stable ICU 2.2 - */ -struct UEnumeration; -/** structure representing an enumeration object instance @stable ICU 2.2 */ -typedef struct UEnumeration UEnumeration; - -/** - * Disposes of resources in use by the iterator. If en is NULL, - * does nothing. After this call, any char* or UChar* pointer - * returned by uenum_unext() or uenum_next() is invalid. - * @param en UEnumeration structure pointer - * @stable ICU 2.2 - */ -U_STABLE void U_EXPORT2 -uenum_close(UEnumeration* en); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUEnumerationPointer - * "Smart pointer" class, closes a UEnumeration via uenum_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUEnumerationPointer, UEnumeration, uenum_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Returns the number of elements that the iterator traverses. If - * the iterator is out-of-sync with its service, status is set to - * U_ENUM_OUT_OF_SYNC_ERROR. - * This is a convenience function. It can end up being very - * expensive as all the items might have to be pre-fetched (depending - * on the type of data being traversed). Use with caution and only - * when necessary. - * @param en UEnumeration structure pointer - * @param status error code, can be U_ENUM_OUT_OF_SYNC_ERROR if the - * iterator is out of sync. - * @return number of elements in the iterator - * @stable ICU 2.2 - */ -U_STABLE int32_t U_EXPORT2 -uenum_count(UEnumeration* en, UErrorCode* status); - -/** - * Returns the next element in the iterator's list. If there are - * no more elements, returns NULL. If the iterator is out-of-sync - * with its service, status is set to U_ENUM_OUT_OF_SYNC_ERROR and - * NULL is returned. If the native service string is a char* string, - * it is converted to UChar* with the invariant converter. - * The result is terminated by (UChar)0. - * @param en the iterator object - * @param resultLength pointer to receive the length of the result - * (not including the terminating \\0). - * If the pointer is NULL it is ignored. - * @param status the error code, set to U_ENUM_OUT_OF_SYNC_ERROR if - * the iterator is out of sync with its service. - * @return a pointer to the string. The string will be - * zero-terminated. The return pointer is owned by this iterator - * and must not be deleted by the caller. The pointer is valid - * until the next call to any uenum_... method, including - * uenum_next() or uenum_unext(). When all strings have been - * traversed, returns NULL. - * @stable ICU 2.2 - */ -U_STABLE const UChar* U_EXPORT2 -uenum_unext(UEnumeration* en, - int32_t* resultLength, - UErrorCode* status); - -/** - * Returns the next element in the iterator's list. If there are - * no more elements, returns NULL. If the iterator is out-of-sync - * with its service, status is set to U_ENUM_OUT_OF_SYNC_ERROR and - * NULL is returned. If the native service string is a UChar* - * string, it is converted to char* with the invariant converter. - * The result is terminated by (char)0. If the conversion fails - * (because a character cannot be converted) then status is set to - * U_INVARIANT_CONVERSION_ERROR and the return value is undefined - * (but non-NULL). - * @param en the iterator object - * @param resultLength pointer to receive the length of the result - * (not including the terminating \\0). - * If the pointer is NULL it is ignored. - * @param status the error code, set to U_ENUM_OUT_OF_SYNC_ERROR if - * the iterator is out of sync with its service. Set to - * U_INVARIANT_CONVERSION_ERROR if the underlying native string is - * UChar* and conversion to char* with the invariant converter - * fails. This error pertains only to current string, so iteration - * might be able to continue successfully. - * @return a pointer to the string. The string will be - * zero-terminated. The return pointer is owned by this iterator - * and must not be deleted by the caller. The pointer is valid - * until the next call to any uenum_... method, including - * uenum_next() or uenum_unext(). When all strings have been - * traversed, returns NULL. - * @stable ICU 2.2 - */ -U_STABLE const char* U_EXPORT2 -uenum_next(UEnumeration* en, - int32_t* resultLength, - UErrorCode* status); - -/** - * Resets the iterator to the current list of service IDs. This - * re-establishes sync with the service and rewinds the iterator - * to start at the first element. - * @param en the iterator object - * @param status the error code, set to U_ENUM_OUT_OF_SYNC_ERROR if - * the iterator is out of sync with its service. - * @stable ICU 2.2 - */ -U_STABLE void U_EXPORT2 -uenum_reset(UEnumeration* en, UErrorCode* status); - -#if U_SHOW_CPLUSPLUS_API - -/** - * Given a StringEnumeration, wrap it in a UEnumeration. The - * StringEnumeration is adopted; after this call, the caller must not - * delete it (regardless of error status). - * @param adopted the C++ StringEnumeration to be wrapped in a UEnumeration. - * @param ec the error code. - * @return a UEnumeration wrapping the adopted StringEnumeration. - * @stable ICU 4.2 - */ -U_STABLE UEnumeration* U_EXPORT2 -uenum_openFromStringEnumeration(icu::StringEnumeration* adopted, UErrorCode* ec); - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Given an array of const UChar* strings, return a UEnumeration. String pointers from 0..count-1 must not be null. - * Do not free or modify either the string array or the characters it points to until this object has been destroyed with uenum_close. - * \snippet test/cintltst/uenumtst.c uenum_openUCharStringsEnumeration - * @param strings array of const UChar* strings (each null terminated). All storage is owned by the caller. - * @param count length of the array - * @param ec error code - * @return the new UEnumeration object. Caller is responsible for calling uenum_close to free memory. - * @see uenum_close - * @stable ICU 50 - */ -U_STABLE UEnumeration* U_EXPORT2 -uenum_openUCharStringsEnumeration(const UChar* const strings[], int32_t count, - UErrorCode* ec); - -/** - * Given an array of const char* strings (invariant chars only), return a UEnumeration. String pointers from 0..count-1 must not be null. - * Do not free or modify either the string array or the characters it points to until this object has been destroyed with uenum_close. - * \snippet test/cintltst/uenumtst.c uenum_openCharStringsEnumeration - * @param strings array of char* strings (each null terminated). All storage is owned by the caller. - * @param count length of the array - * @param ec error code - * @return the new UEnumeration object. Caller is responsible for calling uenum_close to free memory - * @see uenum_close - * @stable ICU 50 - */ -U_STABLE UEnumeration* U_EXPORT2 -uenum_openCharStringsEnumeration(const char* const strings[], int32_t count, - UErrorCode* ec); - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ufieldpositer.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ufieldpositer.h deleted file mode 100644 index 8cc25260ee..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ufieldpositer.h +++ /dev/null @@ -1,121 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -***************************************************************************************** -* Copyright (C) 2015-2016, International Business Machines -* Corporation and others. All Rights Reserved. -***************************************************************************************** -*/ - -#ifndef UFIELDPOSITER_H -#define UFIELDPOSITER_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/localpointer.h" - -/** - * \file - * \brief C API: UFieldPositionIterator for use with format APIs. - * - * Usage: - * ufieldpositer_open creates an empty (unset) UFieldPositionIterator. - * This can be passed to format functions such as {@link #udat_formatForFields}, - * which will set it to apply to the fields in a particular formatted string. - * ufieldpositer_next can then be used to iterate over those fields, - * providing for each field its type (using values that are specific to the - * particular format type, such as date or number formats), as well as the - * start and end positions of the field in the formatted string. - * A given UFieldPositionIterator can be re-used for different format calls; - * each such call resets it to apply to that format string. - * ufieldpositer_close should be called to dispose of the UFieldPositionIterator - * when it is no longer needed. - * - * @see FieldPositionIterator - */ - -/** - * Opaque UFieldPositionIterator object for use in C. - * @stable ICU 55 - */ -struct UFieldPositionIterator; -typedef struct UFieldPositionIterator UFieldPositionIterator; /**< C typedef for struct UFieldPositionIterator. @stable ICU 55 */ - -/** - * Open a new, unset UFieldPositionIterator object. - * @param status - * A pointer to a UErrorCode to receive any errors. - * @return - * A pointer to an empty (unset) UFieldPositionIterator object, - * or NULL if an error occurred. - * @stable ICU 55 - */ -U_STABLE UFieldPositionIterator* U_EXPORT2 -ufieldpositer_open(UErrorCode* status); - -/** - * Close a UFieldPositionIterator object. Once closed it may no longer be used. - * @param fpositer - * A pointer to the UFieldPositionIterator object to close. - * @stable ICU 55 - */ -U_STABLE void U_EXPORT2 -ufieldpositer_close(UFieldPositionIterator *fpositer); - - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUFieldPositionIteratorPointer - * "Smart pointer" class, closes a UFieldPositionIterator via ufieldpositer_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 55 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUFieldPositionIteratorPointer, UFieldPositionIterator, ufieldpositer_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Get information for the next field in the formatted string to which this - * UFieldPositionIterator currently applies, or return a negative value if there - * are no more fields. - * @param fpositer - * A pointer to the UFieldPositionIterator object containing iteration - * state for the format fields. - * @param beginIndex - * A pointer to an int32_t to receive information about the start offset - * of the field in the formatted string (undefined if the function - * returns a negative value). May be NULL if this information is not needed. - * @param endIndex - * A pointer to an int32_t to receive information about the end offset - * of the field in the formatted string (undefined if the function - * returns a negative value). May be NULL if this information is not needed. - * @return - * The field type (non-negative value), or a negative value if there are - * no more fields for which to provide information. If negative, then any - * values pointed to by beginIndex and endIndex are undefined. - * - * The values for field type depend on what type of formatter the - * UFieldPositionIterator has been set by; for a date formatter, the - * values from the UDateFormatField enum. For more information, see the - * descriptions of format functions that take a UFieldPositionIterator* - * parameter, such as {@link #udat_formatForFields}. - * - * @stable ICU 55 - */ -U_STABLE int32_t U_EXPORT2 -ufieldpositer_next(UFieldPositionIterator *fpositer, - int32_t *beginIndex, int32_t *endIndex); - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uformattable.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uformattable.h deleted file mode 100644 index 15830a14fb..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uformattable.h +++ /dev/null @@ -1,288 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************** -* Copyright (C) 2013-2014, International Business Machines Corporation and others. -* All Rights Reserved. -******************************************************************************** -* -* File UFORMATTABLE.H -* -* Modification History: -* -* Date Name Description -* 2013 Jun 7 srl New -******************************************************************************** -*/ - -/** - * \file - * \brief C API: UFormattable is a thin wrapper for primitive types used for formatting and parsing. - * - * This is a C interface to the icu::Formattable class. Static functions on this class convert - * to and from this interface (via reinterpret_cast). Note that Formattables (and thus UFormattables) - * are mutable, and many operations (even getters) may actually modify the internal state. For this - * reason, UFormattables are not thread safe, and should not be shared between threads. - * - * See {@link unum_parseToUFormattable} for example code. - */ - -#ifndef UFORMATTABLE_H -#define UFORMATTABLE_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/localpointer.h" - -/** - * Enum designating the type of a UFormattable instance. - * Practically, this indicates which of the getters would return without conversion - * or error. - * @see icu::Formattable::Type - * @stable ICU 52 - */ -typedef enum UFormattableType { - UFMT_DATE = 0, /**< ufmt_getDate() will return without conversion. @see ufmt_getDate*/ - UFMT_DOUBLE, /**< ufmt_getDouble() will return without conversion. @see ufmt_getDouble*/ - UFMT_LONG, /**< ufmt_getLong() will return without conversion. @see ufmt_getLong */ - UFMT_STRING, /**< ufmt_getUChars() will return without conversion. @see ufmt_getUChars*/ - UFMT_ARRAY, /**< ufmt_countArray() and ufmt_getArray() will return the value. @see ufmt_getArrayItemByIndex */ - UFMT_INT64, /**< ufmt_getInt64() will return without conversion. @see ufmt_getInt64 */ - UFMT_OBJECT, /**< ufmt_getObject() will return without conversion. @see ufmt_getObject*/ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UFormattableType value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UFMT_COUNT -#endif /* U_HIDE_DEPRECATED_API */ -} UFormattableType; - - -/** - * Opaque type representing various types of data which may be used for formatting - * and parsing operations. - * @see icu::Formattable - * @stable ICU 52 - */ -typedef void *UFormattable; - -/** - * Initialize a UFormattable, to type UNUM_LONG, value 0 - * may return error if memory allocation failed. - * parameter status error code. - * See {@link unum_parseToUFormattable} for example code. - * @stable ICU 52 - * @return the new UFormattable - * @see ufmt_close - * @see icu::Formattable::Formattable() - */ -U_STABLE UFormattable* U_EXPORT2 -ufmt_open(UErrorCode* status); - -/** - * Cleanup any additional memory allocated by this UFormattable. - * @param fmt the formatter - * @stable ICU 52 - * @see ufmt_open - */ -U_STABLE void U_EXPORT2 -ufmt_close(UFormattable* fmt); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUFormattablePointer - * "Smart pointer" class, closes a UFormattable via ufmt_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 52 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattablePointer, UFormattable, ufmt_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Return the type of this object - * @param fmt the UFormattable object - * @param status status code - U_ILLEGAL_ARGUMENT_ERROR is returned if the UFormattable contains data not supported by - * the API - * @return the value as a UFormattableType - * @see ufmt_isNumeric - * @see icu::Formattable::getType() const - * @stable ICU 52 - */ -U_STABLE UFormattableType U_EXPORT2 -ufmt_getType(const UFormattable* fmt, UErrorCode *status); - -/** - * Return whether the object is numeric. - * @param fmt the UFormattable object - * @return true if the object is a double, long, or int64 value, else false. - * @see ufmt_getType - * @see icu::Formattable::isNumeric() const - * @stable ICU 52 - */ -U_STABLE UBool U_EXPORT2 -ufmt_isNumeric(const UFormattable* fmt); - -/** - * Gets the UDate value of this object. If the type is not of type UFMT_DATE, - * status is set to U_INVALID_FORMAT_ERROR and the return value is - * undefined. - * @param fmt the UFormattable object - * @param status the error code - any conversion or format errors - * @return the value - * @stable ICU 52 - * @see icu::Formattable::getDate(UErrorCode&) const - */ -U_STABLE UDate U_EXPORT2 -ufmt_getDate(const UFormattable* fmt, UErrorCode *status); - -/** - * Gets the double value of this object. If the type is not a UFMT_DOUBLE, or - * if there are additional significant digits than fit in a double type, - * a conversion is performed with possible loss of precision. - * If the type is UFMT_OBJECT and the - * object is a Measure, then the result of - * getNumber().getDouble(status) is returned. If this object is - * neither a numeric type nor a Measure, then 0 is returned and - * the status is set to U_INVALID_FORMAT_ERROR. - * @param fmt the UFormattable object - * @param status the error code - any conversion or format errors - * @return the value - * @stable ICU 52 - * @see icu::Formattable::getDouble(UErrorCode&) const - */ -U_STABLE double U_EXPORT2 -ufmt_getDouble(UFormattable* fmt, UErrorCode *status); - -/** - * Gets the long (int32_t) value of this object. If the magnitude is too - * large to fit in a long, then the maximum or minimum long value, - * as appropriate, is returned and the status is set to - * U_INVALID_FORMAT_ERROR. If this object is of type UFMT_INT64 and - * it fits within a long, then no precision is lost. If it is of - * type kDouble or kDecimalNumber, then a conversion is peformed, with - * truncation of any fractional part. If the type is UFMT_OBJECT and - * the object is a Measure, then the result of - * getNumber().getLong(status) is returned. If this object is - * neither a numeric type nor a Measure, then 0 is returned and - * the status is set to U_INVALID_FORMAT_ERROR. - * @param fmt the UFormattable object - * @param status the error code - any conversion or format errors - * @return the value - * @stable ICU 52 - * @see icu::Formattable::getLong(UErrorCode&) const - */ -U_STABLE int32_t U_EXPORT2 -ufmt_getLong(UFormattable* fmt, UErrorCode *status); - - -/** - * Gets the int64_t value of this object. If this object is of a numeric - * type and the magnitude is too large to fit in an int64, then - * the maximum or minimum int64 value, as appropriate, is returned - * and the status is set to U_INVALID_FORMAT_ERROR. If the - * magnitude fits in an int64, then a casting conversion is - * peformed, with truncation of any fractional part. If the type - * is UFMT_OBJECT and the object is a Measure, then the result of - * getNumber().getDouble(status) is returned. If this object is - * neither a numeric type nor a Measure, then 0 is returned and - * the status is set to U_INVALID_FORMAT_ERROR. - * @param fmt the UFormattable object - * @param status the error code - any conversion or format errors - * @return the value - * @stable ICU 52 - * @see icu::Formattable::getInt64(UErrorCode&) const - */ -U_STABLE int64_t U_EXPORT2 -ufmt_getInt64(UFormattable* fmt, UErrorCode *status); - -/** - * Returns a pointer to the UObject contained within this - * formattable (as a const void*), or NULL if this object - * is not of type UFMT_OBJECT. - * @param fmt the UFormattable object - * @param status the error code - any conversion or format errors - * @return the value as a const void*. It is a polymorphic C++ object. - * @stable ICU 52 - * @see icu::Formattable::getObject() const - */ -U_STABLE const void *U_EXPORT2 -ufmt_getObject(const UFormattable* fmt, UErrorCode *status); - -/** - * Gets the string value of this object as a UChar string. If the type is not a - * string, status is set to U_INVALID_FORMAT_ERROR and a NULL pointer is returned. - * This function is not thread safe and may modify the UFormattable if need be to terminate the string. - * The returned pointer is not valid if any other functions are called on this UFormattable, or if the UFormattable is closed. - * @param fmt the UFormattable object - * @param status the error code - any conversion or format errors - * @param len if non null, contains the string length on return - * @return the null terminated string value - must not be referenced after any other functions are called on this UFormattable. - * @stable ICU 52 - * @see icu::Formattable::getString(UnicodeString&)const - */ -U_STABLE const UChar* U_EXPORT2 -ufmt_getUChars(UFormattable* fmt, int32_t *len, UErrorCode *status); - -/** - * Get the number of array objects contained, if an array type UFMT_ARRAY - * @param fmt the UFormattable object - * @param status the error code - any conversion or format errors. U_ILLEGAL_ARGUMENT_ERROR if not an array type. - * @return the number of array objects or undefined if not an array type - * @stable ICU 52 - * @see ufmt_getArrayItemByIndex - */ -U_STABLE int32_t U_EXPORT2 -ufmt_getArrayLength(const UFormattable* fmt, UErrorCode *status); - -/** - * Get the specified value from the array of UFormattables. Invalid if the object is not an array type UFMT_ARRAY - * @param fmt the UFormattable object - * @param n the number of the array to return (0 based). - * @param status the error code - any conversion or format errors. Returns an error if n is out of bounds. - * @return the nth array value, only valid while the containing UFormattable is valid. NULL if not an array. - * @stable ICU 52 - * @see icu::Formattable::getArray(int32_t&, UErrorCode&) const - */ -U_STABLE UFormattable * U_EXPORT2 -ufmt_getArrayItemByIndex(UFormattable* fmt, int32_t n, UErrorCode *status); - -/** - * Returns a numeric string representation of the number contained within this - * formattable, or NULL if this object does not contain numeric type. - * For values obtained by parsing, the returned decimal number retains - * the full precision and range of the original input, unconstrained by - * the limits of a double floating point or a 64 bit int. - * - * This function is not thread safe, and therfore is not declared const, - * even though it is logically const. - * The resulting buffer is owned by the UFormattable and is invalid if any other functions are - * called on the UFormattable. - * - * Possible errors include U_MEMORY_ALLOCATION_ERROR, and - * U_INVALID_STATE if the formattable object has not been set to - * a numeric type. - * @param fmt the UFormattable object - * @param len if non-null, on exit contains the string length (not including the terminating null) - * @param status the error code - * @return the character buffer as a NULL terminated string, which is owned by the object and must not be accessed if any other functions are called on this object. - * @stable ICU 52 - * @see icu::Formattable::getDecimalNumber(UErrorCode&) - */ -U_STABLE const char * U_EXPORT2 -ufmt_getDecNumChars(UFormattable *fmt, int32_t *len, UErrorCode *status); - -#endif - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uformattedvalue.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uformattedvalue.h deleted file mode 100644 index eaa4f28893..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uformattedvalue.h +++ /dev/null @@ -1,440 +0,0 @@ -// © 2018 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html - -#ifndef __UFORMATTEDVALUE_H__ -#define __UFORMATTEDVALUE_H__ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING -#ifndef U_HIDE_DRAFT_API - -#include "unicode/ufieldpositer.h" - -/** - * \file - * \brief C API: Abstract operations for localized strings. - * - * This file contains declarations for classes that deal with formatted strings. A number - * of APIs throughout ICU use these classes for expressing their localized output. - */ - - -/** - * All possible field categories in ICU. Every entry in this enum corresponds - * to another enum that exists in ICU. - * - * In the APIs that take a UFieldCategory, an int32_t type is used. Field - * categories having any of the top four bits turned on are reserved as - * private-use for external APIs implementing FormattedValue. This means that - * categories 2^28 and higher or below zero (with the highest bit turned on) - * are private-use and will not be used by ICU in the future. - * - * @draft ICU 64 - */ -typedef enum UFieldCategory { - /** - * For an undefined field category. - * - * @draft ICU 64 - */ - UFIELD_CATEGORY_UNDEFINED = 0, - - /** - * For fields in UDateFormatField (udat.h), from ICU 3.0. - * - * @draft ICU 64 - */ - UFIELD_CATEGORY_DATE, - - /** - * For fields in UNumberFormatFields (unum.h), from ICU 49. - * - * @draft ICU 64 - */ - UFIELD_CATEGORY_NUMBER, - - /** - * For fields in UListFormatterField (ulistformatter.h), from ICU 63. - * - * @draft ICU 64 - */ - UFIELD_CATEGORY_LIST, - - /** - * For fields in URelativeDateTimeFormatterField (ureldatefmt.h), from ICU 64. - * - * @draft ICU 64 - */ - UFIELD_CATEGORY_RELATIVE_DATETIME, - - /** - * Reserved for possible future fields in UDateIntervalFormatField. - * - * @internal - */ - UFIELD_CATEGORY_DATE_INTERVAL, - -#ifndef U_HIDE_INTERNAL_API - /** @internal */ - UFIELD_CATEGORY_COUNT, -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Category for spans in a list. - * - * @draft ICU 64 - */ - UFIELD_CATEGORY_LIST_SPAN = 0x1000 + UFIELD_CATEGORY_LIST, - - /** - * Category for spans in a date interval. - * - * @draft ICU 64 - */ - UFIELD_CATEGORY_DATE_INTERVAL_SPAN = 0x1000 + UFIELD_CATEGORY_DATE_INTERVAL, - -} UFieldCategory; - - -struct UConstrainedFieldPosition; -/** - * Represents a span of a string containing a given field. - * - * This struct differs from UFieldPosition in the following ways: - * - * 1. It has information on the field category. - * 2. It allows you to set constraints to use when iterating over field positions. - * 3. It is used for the newer FormattedValue APIs. - * - * @draft ICU 64 - */ -typedef struct UConstrainedFieldPosition UConstrainedFieldPosition; - - -/** - * Creates a new UConstrainedFieldPosition. - * - * By default, the UConstrainedFieldPosition has no iteration constraints. - * - * @param ec Set if an error occurs. - * @return The new object, or NULL if an error occurs. - * @draft ICU 64 - */ -U_DRAFT UConstrainedFieldPosition* U_EXPORT2 -ucfpos_open(UErrorCode* ec); - - -/** - * Resets a UConstrainedFieldPosition to its initial state, as if it were newly created. - * - * Removes any constraints that may have been set on the instance. - * - * @param ucfpos The instance of UConstrainedFieldPosition. - * @param ec Set if an error occurs. - * @draft ICU 64 - */ -U_DRAFT void U_EXPORT2 -ucfpos_reset( - UConstrainedFieldPosition* ucfpos, - UErrorCode* ec); - - -/** - * Destroys a UConstrainedFieldPosition and releases its memory. - * - * @param ucfpos The instance of UConstrainedFieldPosition. - * @draft ICU 64 - */ -U_DRAFT void U_EXPORT2 -ucfpos_close(UConstrainedFieldPosition* ucfpos); - - -/** - * Sets a constraint on the field category. - * - * When this instance of UConstrainedFieldPosition is passed to ufmtval_nextPosition, - * positions are skipped unless they have the given category. - * - * Any previously set constraints are cleared. - * - * For example, to loop over only the number-related fields: - * - * UConstrainedFieldPosition* ucfpos = ucfpos_open(ec); - * ucfpos_constrainCategory(ucfpos, UFIELDCATEGORY_NUMBER_FORMAT, ec); - * while (ufmtval_nextPosition(ufmtval, ucfpos, ec)) { - * // handle the number-related field position - * } - * ucfpos_close(ucfpos); - * - * Changing the constraint while in the middle of iterating over a FormattedValue - * does not generally have well-defined behavior. - * - * @param ucfpos The instance of UConstrainedFieldPosition. - * @param category The field category to fix when iterating. - * @param ec Set if an error occurs. - * @draft ICU 64 - */ -U_DRAFT void U_EXPORT2 -ucfpos_constrainCategory( - UConstrainedFieldPosition* ucfpos, - int32_t category, - UErrorCode* ec); - - -/** - * Sets a constraint on the category and field. - * - * When this instance of UConstrainedFieldPosition is passed to ufmtval_nextPosition, - * positions are skipped unless they have the given category and field. - * - * Any previously set constraints are cleared. - * - * For example, to loop over all grouping separators: - * - * UConstrainedFieldPosition* ucfpos = ucfpos_open(ec); - * ucfpos_constrainField(ucfpos, UFIELDCATEGORY_NUMBER_FORMAT, UNUM_GROUPING_SEPARATOR_FIELD, ec); - * while (ufmtval_nextPosition(ufmtval, ucfpos, ec)) { - * // handle the grouping separator position - * } - * ucfpos_close(ucfpos); - * - * Changing the constraint while in the middle of iterating over a FormattedValue - * does not generally have well-defined behavior. - * - * @param ucfpos The instance of UConstrainedFieldPosition. - * @param category The field category to fix when iterating. - * @param field The field to fix when iterating. - * @param ec Set if an error occurs. - * @draft ICU 64 - */ -U_DRAFT void U_EXPORT2 -ucfpos_constrainField( - UConstrainedFieldPosition* ucfpos, - int32_t category, - int32_t field, - UErrorCode* ec); - - -/** - * Gets the field category for the current position. - * - * If a category or field constraint was set, this function returns the constrained - * category. Otherwise, the return value is well-defined only after - * ufmtval_nextPosition returns TRUE. - * - * @param ucfpos The instance of UConstrainedFieldPosition. - * @param ec Set if an error occurs. - * @return The field category saved in the instance. - * @draft ICU 64 - */ -U_DRAFT int32_t U_EXPORT2 -ucfpos_getCategory( - const UConstrainedFieldPosition* ucfpos, - UErrorCode* ec); - - -/** - * Gets the field for the current position. - * - * If a field constraint was set, this function returns the constrained - * field. Otherwise, the return value is well-defined only after - * ufmtval_nextPosition returns TRUE. - * - * @param ucfpos The instance of UConstrainedFieldPosition. - * @param ec Set if an error occurs. - * @return The field saved in the instance. - * @draft ICU 64 - */ -U_DRAFT int32_t U_EXPORT2 -ucfpos_getField( - const UConstrainedFieldPosition* ucfpos, - UErrorCode* ec); - - -/** - * Gets the INCLUSIVE start and EXCLUSIVE end index stored for the current position. - * - * The output values are well-defined only after ufmtval_nextPosition returns TRUE. - * - * @param ucfpos The instance of UConstrainedFieldPosition. - * @param pStart Set to the start index saved in the instance. Ignored if nullptr. - * @param pLimit Set to the end index saved in the instance. Ignored if nullptr. - * @param ec Set if an error occurs. - * @draft ICU 64 - */ -U_DRAFT void U_EXPORT2 -ucfpos_getIndexes( - const UConstrainedFieldPosition* ucfpos, - int32_t* pStart, - int32_t* pLimit, - UErrorCode* ec); - - -/** - * Gets an int64 that FormattedValue implementations may use for storage. - * - * The initial value is zero. - * - * Users of FormattedValue should not need to call this method. - * - * @param ucfpos The instance of UConstrainedFieldPosition. - * @param ec Set if an error occurs. - * @return The current iteration context from ucfpos_setInt64IterationContext. - * @draft ICU 64 - */ -U_DRAFT int64_t U_EXPORT2 -ucfpos_getInt64IterationContext( - const UConstrainedFieldPosition* ucfpos, - UErrorCode* ec); - - -/** - * Sets an int64 that FormattedValue implementations may use for storage. - * - * Intended to be used by FormattedValue implementations. - * - * @param ucfpos The instance of UConstrainedFieldPosition. - * @param context The new iteration context. - * @param ec Set if an error occurs. - * @draft ICU 64 - */ -U_DRAFT void U_EXPORT2 -ucfpos_setInt64IterationContext( - UConstrainedFieldPosition* ucfpos, - int64_t context, - UErrorCode* ec); - - -/** - * Determines whether a given field should be included given the - * constraints. - * - * Intended to be used by FormattedValue implementations. - * - * @param ucfpos The instance of UConstrainedFieldPosition. - * @param category The category to test. - * @param field The field to test. - * @param ec Set if an error occurs. - * @draft ICU 64 - */ -U_DRAFT UBool U_EXPORT2 -ucfpos_matchesField( - const UConstrainedFieldPosition* ucfpos, - int32_t category, - int32_t field, - UErrorCode* ec); - - -/** - * Sets new values for the primary public getters. - * - * Intended to be used by FormattedValue implementations. - * - * It is up to the implementation to ensure that the user-requested - * constraints are satisfied. This method does not check! - * - * @param ucfpos The instance of UConstrainedFieldPosition. - * @param category The new field category. - * @param field The new field. - * @param start The new inclusive start index. - * @param limit The new exclusive end index. - * @param ec Set if an error occurs. - * @draft ICU 64 - */ -U_DRAFT void U_EXPORT2 -ucfpos_setState( - UConstrainedFieldPosition* ucfpos, - int32_t category, - int32_t field, - int32_t start, - int32_t limit, - UErrorCode* ec); - - -struct UFormattedValue; -/** - * An abstract formatted value: a string with associated field attributes. - * Many formatters format to types compatible with UFormattedValue. - * - * @draft ICU 64 - */ -typedef struct UFormattedValue UFormattedValue; - - -/** - * Returns a pointer to the formatted string. The pointer is owned by the UFormattedValue. The - * return value is valid only as long as the UFormattedValue is present and unchanged in memory. - * - * The return value is NUL-terminated but could contain internal NULs. - * - * @param ufmtval - * The object containing the formatted string and attributes. - * @param pLength Output variable for the length of the string. Ignored if NULL. - * @param ec Set if an error occurs. - * @return A NUL-terminated char16 string owned by the UFormattedValue. - * @draft ICU 64 - */ -U_DRAFT const UChar* U_EXPORT2 -ufmtval_getString( - const UFormattedValue* ufmtval, - int32_t* pLength, - UErrorCode* ec); - - -/** - * Iterates over field positions in the UFormattedValue. This lets you determine the position - * of specific types of substrings, like a month or a decimal separator. - * - * To loop over all field positions: - * - * UConstrainedFieldPosition* ucfpos = ucfpos_open(ec); - * while (ufmtval_nextPosition(ufmtval, ucfpos, ec)) { - * // handle the field position; get information from ucfpos - * } - * ucfpos_close(ucfpos); - * - * @param ufmtval - * The object containing the formatted string and attributes. - * @param ucfpos - * The object used for iteration state; can provide constraints to iterate over only - * one specific category or field; - * see ucfpos_constrainCategory - * and ucfpos_constrainField. - * @param ec Set if an error occurs. - * @return TRUE if another position was found; FALSE otherwise. - * @draft ICU 64 - */ -U_DRAFT UBool U_EXPORT2 -ufmtval_nextPosition( - const UFormattedValue* ufmtval, - UConstrainedFieldPosition* ucfpos, - UErrorCode* ec); - - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * \class LocalUConstrainedFieldPositionPointer - * "Smart pointer" class; closes a UConstrainedFieldPosition via ucfpos_close(). - * For most methods see the LocalPointerBase base class. - * - * Usage: - * - * LocalUConstrainedFieldPositionPointer ucfpos(ucfpos_open(ec)); - * // no need to explicitly call ucfpos_close() - * - * @draft ICU 64 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUConstrainedFieldPositionPointer, - UConstrainedFieldPosition, - ucfpos_close); - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - - -#endif /* U_HIDE_DRAFT_API */ -#endif /* #if !UCONFIG_NO_FORMATTING */ -#endif // __UFORMATTEDVALUE_H__ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ugender.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ugender.h deleted file mode 100644 index 903f3dd5de..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ugender.h +++ /dev/null @@ -1,84 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -***************************************************************************************** -* Copyright (C) 2010-2013, International Business Machines -* Corporation and others. All Rights Reserved. -***************************************************************************************** -*/ - -#ifndef UGENDER_H -#define UGENDER_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/localpointer.h" - -/** - * \file - * \brief C API: The purpose of this API is to compute the gender of a list as a - * whole given the gender of each element. - * - */ - -/** - * Genders - * @stable ICU 50 - */ -enum UGender { - /** - * Male gender. - * @stable ICU 50 - */ - UGENDER_MALE, - /** - * Female gender. - * @stable ICU 50 - */ - UGENDER_FEMALE, - /** - * Neutral gender. - * @stable ICU 50 - */ - UGENDER_OTHER -}; -/** - * @stable ICU 50 - */ -typedef enum UGender UGender; - -struct UGenderInfo; -/** - * Opaque UGenderInfo object for use in C programs. - * @stable ICU 50 - */ -typedef struct UGenderInfo UGenderInfo; - -/** - * Opens a new UGenderInfo object given locale. - * @param locale The locale for which the rules are desired. - * @param status UErrorCode pointer - * @return A UGenderInfo for the specified locale, or NULL if an error occurred. - * @stable ICU 50 - */ -U_STABLE const UGenderInfo* U_EXPORT2 -ugender_getInstance(const char *locale, UErrorCode *status); - - -/** - * Given a list, returns the gender of the list as a whole. - * @param genderInfo pointer that ugender_getInstance returns. - * @param genders the gender of each element in the list. - * @param size the size of the list. - * @param status A pointer to a UErrorCode to receive any errors. - * @return The gender of the list. - * @stable ICU 50 - */ -U_STABLE UGender U_EXPORT2 -ugender_getListGender(const UGenderInfo* genderInfo, const UGender *genders, int32_t size, UErrorCode *status); - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uidna.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uidna.h deleted file mode 100644 index 13e147234c..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uidna.h +++ /dev/null @@ -1,772 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * - * Copyright (C) 2003-2014, International Business Machines - * Corporation and others. All Rights Reserved. - * - ******************************************************************************* - * file name: uidna.h - * encoding: UTF-8 - * tab size: 8 (not used) - * indentation:4 - * - * created on: 2003feb1 - * created by: Ram Viswanadha - */ - -#ifndef __UIDNA_H__ -#define __UIDNA_H__ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_IDNA - -#include "unicode/localpointer.h" -#include "unicode/parseerr.h" - -/** - * \file - * \brief C API: Internationalizing Domain Names in Applications (IDNA) - * - * IDNA2008 is implemented according to UTS #46, see the IDNA C++ class in idna.h. - * - * The C API functions which do take a UIDNA * service object pointer - * implement UTS #46 and IDNA2008. - * - * IDNA2003 is obsolete. - * The C API functions which do not take a service object pointer - * implement IDNA2003. They are all deprecated. - */ - -/* - * IDNA option bit set values. - */ -enum { - /** - * Default options value: None of the other options are set. - * For use in static worker and factory methods. - * @stable ICU 2.6 - */ - UIDNA_DEFAULT=0, -#ifndef U_HIDE_DEPRECATED_API - /** - * Option to allow unassigned code points in domain names and labels. - * For use in static worker and factory methods. - *

This option is ignored by the UTS46 implementation. - * (UTS #46 disallows unassigned code points.) - * @deprecated ICU 55 Use UTS #46 instead via uidna_openUTS46() or class IDNA. - */ - UIDNA_ALLOW_UNASSIGNED=1, -#endif /* U_HIDE_DEPRECATED_API */ - /** - * Option to check whether the input conforms to the STD3 ASCII rules, - * for example the restriction of labels to LDH characters - * (ASCII Letters, Digits and Hyphen-Minus). - * For use in static worker and factory methods. - * @stable ICU 2.6 - */ - UIDNA_USE_STD3_RULES=2, - /** - * IDNA option to check for whether the input conforms to the BiDi rules. - * For use in static worker and factory methods. - *

This option is ignored by the IDNA2003 implementation. - * (IDNA2003 always performs a BiDi check.) - * @stable ICU 4.6 - */ - UIDNA_CHECK_BIDI=4, - /** - * IDNA option to check for whether the input conforms to the CONTEXTJ rules. - * For use in static worker and factory methods. - *

This option is ignored by the IDNA2003 implementation. - * (The CONTEXTJ check is new in IDNA2008.) - * @stable ICU 4.6 - */ - UIDNA_CHECK_CONTEXTJ=8, - /** - * IDNA option for nontransitional processing in ToASCII(). - * For use in static worker and factory methods. - *

By default, ToASCII() uses transitional processing. - *

This option is ignored by the IDNA2003 implementation. - * (This is only relevant for compatibility of newer IDNA implementations with IDNA2003.) - * @stable ICU 4.6 - */ - UIDNA_NONTRANSITIONAL_TO_ASCII=0x10, - /** - * IDNA option for nontransitional processing in ToUnicode(). - * For use in static worker and factory methods. - *

By default, ToUnicode() uses transitional processing. - *

This option is ignored by the IDNA2003 implementation. - * (This is only relevant for compatibility of newer IDNA implementations with IDNA2003.) - * @stable ICU 4.6 - */ - UIDNA_NONTRANSITIONAL_TO_UNICODE=0x20, - /** - * IDNA option to check for whether the input conforms to the CONTEXTO rules. - * For use in static worker and factory methods. - *

This option is ignored by the IDNA2003 implementation. - * (The CONTEXTO check is new in IDNA2008.) - *

This is for use by registries for IDNA2008 conformance. - * UTS #46 does not require the CONTEXTO check. - * @stable ICU 49 - */ - UIDNA_CHECK_CONTEXTO=0x40 -}; - -/** - * Opaque C service object type for the new IDNA API. - * @stable ICU 4.6 - */ -struct UIDNA; -typedef struct UIDNA UIDNA; /**< C typedef for struct UIDNA. @stable ICU 4.6 */ - -/** - * Returns a UIDNA instance which implements UTS #46. - * Returns an unmodifiable instance, owned by the caller. - * Cache it for multiple operations, and uidna_close() it when done. - * The instance is thread-safe, that is, it can be used concurrently. - * - * For details about the UTS #46 implementation see the IDNA C++ class in idna.h. - * - * @param options Bit set to modify the processing and error checking. - * See option bit set values in uidna.h. - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the UTS #46 UIDNA instance, if successful - * @stable ICU 4.6 - */ -U_STABLE UIDNA * U_EXPORT2 -uidna_openUTS46(uint32_t options, UErrorCode *pErrorCode); - -/** - * Closes a UIDNA instance. - * @param idna UIDNA instance to be closed - * @stable ICU 4.6 - */ -U_STABLE void U_EXPORT2 -uidna_close(UIDNA *idna); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUIDNAPointer - * "Smart pointer" class, closes a UIDNA via uidna_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.6 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUIDNAPointer, UIDNA, uidna_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Output container for IDNA processing errors. - * Initialize with UIDNA_INFO_INITIALIZER: - * \code - * UIDNAInfo info = UIDNA_INFO_INITIALIZER; - * int32_t length = uidna_nameToASCII(..., &info, &errorCode); - * if(U_SUCCESS(errorCode) && info.errors!=0) { ... } - * \endcode - * @stable ICU 4.6 - */ -typedef struct UIDNAInfo { - /** sizeof(UIDNAInfo) @stable ICU 4.6 */ - int16_t size; - /** - * Set to TRUE if transitional and nontransitional processing produce different results. - * For details see C++ IDNAInfo::isTransitionalDifferent(). - * @stable ICU 4.6 - */ - UBool isTransitionalDifferent; - UBool reservedB3; /**< Reserved field, do not use. @internal */ - /** - * Bit set indicating IDNA processing errors. 0 if no errors. - * See UIDNA_ERROR_... constants. - * @stable ICU 4.6 - */ - uint32_t errors; - int32_t reservedI2; /**< Reserved field, do not use. @internal */ - int32_t reservedI3; /**< Reserved field, do not use. @internal */ -} UIDNAInfo; - -/** - * Static initializer for a UIDNAInfo struct. - * @stable ICU 4.6 - */ -#define UIDNA_INFO_INITIALIZER { \ - (int16_t)sizeof(UIDNAInfo), \ - FALSE, FALSE, \ - 0, 0, 0 } - -/** - * Converts a single domain name label into its ASCII form for DNS lookup. - * If any processing step fails, then pInfo->errors will be non-zero and - * the result might not be an ASCII string. - * The label might be modified according to the types of errors. - * Labels with severe errors will be left in (or turned into) their Unicode form. - * - * The UErrorCode indicates an error only in exceptional cases, - * such as a U_MEMORY_ALLOCATION_ERROR. - * - * @param idna UIDNA instance - * @param label Input domain name label - * @param length Label length, or -1 if NUL-terminated - * @param dest Destination string buffer - * @param capacity Destination buffer capacity - * @param pInfo Output container of IDNA processing details. - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return destination string length - * @stable ICU 4.6 - */ -U_STABLE int32_t U_EXPORT2 -uidna_labelToASCII(const UIDNA *idna, - const UChar *label, int32_t length, - UChar *dest, int32_t capacity, - UIDNAInfo *pInfo, UErrorCode *pErrorCode); - -/** - * Converts a single domain name label into its Unicode form for human-readable display. - * If any processing step fails, then pInfo->errors will be non-zero. - * The label might be modified according to the types of errors. - * - * The UErrorCode indicates an error only in exceptional cases, - * such as a U_MEMORY_ALLOCATION_ERROR. - * - * @param idna UIDNA instance - * @param label Input domain name label - * @param length Label length, or -1 if NUL-terminated - * @param dest Destination string buffer - * @param capacity Destination buffer capacity - * @param pInfo Output container of IDNA processing details. - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return destination string length - * @stable ICU 4.6 - */ -U_STABLE int32_t U_EXPORT2 -uidna_labelToUnicode(const UIDNA *idna, - const UChar *label, int32_t length, - UChar *dest, int32_t capacity, - UIDNAInfo *pInfo, UErrorCode *pErrorCode); - -/** - * Converts a whole domain name into its ASCII form for DNS lookup. - * If any processing step fails, then pInfo->errors will be non-zero and - * the result might not be an ASCII string. - * The domain name might be modified according to the types of errors. - * Labels with severe errors will be left in (or turned into) their Unicode form. - * - * The UErrorCode indicates an error only in exceptional cases, - * such as a U_MEMORY_ALLOCATION_ERROR. - * - * @param idna UIDNA instance - * @param name Input domain name - * @param length Domain name length, or -1 if NUL-terminated - * @param dest Destination string buffer - * @param capacity Destination buffer capacity - * @param pInfo Output container of IDNA processing details. - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return destination string length - * @stable ICU 4.6 - */ -U_STABLE int32_t U_EXPORT2 -uidna_nameToASCII(const UIDNA *idna, - const UChar *name, int32_t length, - UChar *dest, int32_t capacity, - UIDNAInfo *pInfo, UErrorCode *pErrorCode); - -/** - * Converts a whole domain name into its Unicode form for human-readable display. - * If any processing step fails, then pInfo->errors will be non-zero. - * The domain name might be modified according to the types of errors. - * - * The UErrorCode indicates an error only in exceptional cases, - * such as a U_MEMORY_ALLOCATION_ERROR. - * - * @param idna UIDNA instance - * @param name Input domain name - * @param length Domain name length, or -1 if NUL-terminated - * @param dest Destination string buffer - * @param capacity Destination buffer capacity - * @param pInfo Output container of IDNA processing details. - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return destination string length - * @stable ICU 4.6 - */ -U_STABLE int32_t U_EXPORT2 -uidna_nameToUnicode(const UIDNA *idna, - const UChar *name, int32_t length, - UChar *dest, int32_t capacity, - UIDNAInfo *pInfo, UErrorCode *pErrorCode); - -/* UTF-8 versions of the processing methods --------------------------------- */ - -/** - * Converts a single domain name label into its ASCII form for DNS lookup. - * UTF-8 version of uidna_labelToASCII(), same behavior. - * - * @param idna UIDNA instance - * @param label Input domain name label - * @param length Label length, or -1 if NUL-terminated - * @param dest Destination string buffer - * @param capacity Destination buffer capacity - * @param pInfo Output container of IDNA processing details. - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return destination string length - * @stable ICU 4.6 - */ -U_STABLE int32_t U_EXPORT2 -uidna_labelToASCII_UTF8(const UIDNA *idna, - const char *label, int32_t length, - char *dest, int32_t capacity, - UIDNAInfo *pInfo, UErrorCode *pErrorCode); - -/** - * Converts a single domain name label into its Unicode form for human-readable display. - * UTF-8 version of uidna_labelToUnicode(), same behavior. - * - * @param idna UIDNA instance - * @param label Input domain name label - * @param length Label length, or -1 if NUL-terminated - * @param dest Destination string buffer - * @param capacity Destination buffer capacity - * @param pInfo Output container of IDNA processing details. - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return destination string length - * @stable ICU 4.6 - */ -U_STABLE int32_t U_EXPORT2 -uidna_labelToUnicodeUTF8(const UIDNA *idna, - const char *label, int32_t length, - char *dest, int32_t capacity, - UIDNAInfo *pInfo, UErrorCode *pErrorCode); - -/** - * Converts a whole domain name into its ASCII form for DNS lookup. - * UTF-8 version of uidna_nameToASCII(), same behavior. - * - * @param idna UIDNA instance - * @param name Input domain name - * @param length Domain name length, or -1 if NUL-terminated - * @param dest Destination string buffer - * @param capacity Destination buffer capacity - * @param pInfo Output container of IDNA processing details. - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return destination string length - * @stable ICU 4.6 - */ -U_STABLE int32_t U_EXPORT2 -uidna_nameToASCII_UTF8(const UIDNA *idna, - const char *name, int32_t length, - char *dest, int32_t capacity, - UIDNAInfo *pInfo, UErrorCode *pErrorCode); - -/** - * Converts a whole domain name into its Unicode form for human-readable display. - * UTF-8 version of uidna_nameToUnicode(), same behavior. - * - * @param idna UIDNA instance - * @param name Input domain name - * @param length Domain name length, or -1 if NUL-terminated - * @param dest Destination string buffer - * @param capacity Destination buffer capacity - * @param pInfo Output container of IDNA processing details. - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return destination string length - * @stable ICU 4.6 - */ -U_STABLE int32_t U_EXPORT2 -uidna_nameToUnicodeUTF8(const UIDNA *idna, - const char *name, int32_t length, - char *dest, int32_t capacity, - UIDNAInfo *pInfo, UErrorCode *pErrorCode); - -/* - * IDNA error bit set values. - * When a domain name or label fails a processing step or does not meet the - * validity criteria, then one or more of these error bits are set. - */ -enum { - /** - * A non-final domain name label (or the whole domain name) is empty. - * @stable ICU 4.6 - */ - UIDNA_ERROR_EMPTY_LABEL=1, - /** - * A domain name label is longer than 63 bytes. - * (See STD13/RFC1034 3.1. Name space specifications and terminology.) - * This is only checked in ToASCII operations, and only if the output label is all-ASCII. - * @stable ICU 4.6 - */ - UIDNA_ERROR_LABEL_TOO_LONG=2, - /** - * A domain name is longer than 255 bytes in its storage form. - * (See STD13/RFC1034 3.1. Name space specifications and terminology.) - * This is only checked in ToASCII operations, and only if the output domain name is all-ASCII. - * @stable ICU 4.6 - */ - UIDNA_ERROR_DOMAIN_NAME_TOO_LONG=4, - /** - * A label starts with a hyphen-minus ('-'). - * @stable ICU 4.6 - */ - UIDNA_ERROR_LEADING_HYPHEN=8, - /** - * A label ends with a hyphen-minus ('-'). - * @stable ICU 4.6 - */ - UIDNA_ERROR_TRAILING_HYPHEN=0x10, - /** - * A label contains hyphen-minus ('-') in the third and fourth positions. - * @stable ICU 4.6 - */ - UIDNA_ERROR_HYPHEN_3_4=0x20, - /** - * A label starts with a combining mark. - * @stable ICU 4.6 - */ - UIDNA_ERROR_LEADING_COMBINING_MARK=0x40, - /** - * A label or domain name contains disallowed characters. - * @stable ICU 4.6 - */ - UIDNA_ERROR_DISALLOWED=0x80, - /** - * A label starts with "xn--" but does not contain valid Punycode. - * That is, an xn-- label failed Punycode decoding. - * @stable ICU 4.6 - */ - UIDNA_ERROR_PUNYCODE=0x100, - /** - * A label contains a dot=full stop. - * This can occur in an input string for a single-label function. - * @stable ICU 4.6 - */ - UIDNA_ERROR_LABEL_HAS_DOT=0x200, - /** - * An ACE label does not contain a valid label string. - * The label was successfully ACE (Punycode) decoded but the resulting - * string had severe validation errors. For example, - * it might contain characters that are not allowed in ACE labels, - * or it might not be normalized. - * @stable ICU 4.6 - */ - UIDNA_ERROR_INVALID_ACE_LABEL=0x400, - /** - * A label does not meet the IDNA BiDi requirements (for right-to-left characters). - * @stable ICU 4.6 - */ - UIDNA_ERROR_BIDI=0x800, - /** - * A label does not meet the IDNA CONTEXTJ requirements. - * @stable ICU 4.6 - */ - UIDNA_ERROR_CONTEXTJ=0x1000, - /** - * A label does not meet the IDNA CONTEXTO requirements for punctuation characters. - * Some punctuation characters "Would otherwise have been DISALLOWED" - * but are allowed in certain contexts. (RFC 5892) - * @stable ICU 49 - */ - UIDNA_ERROR_CONTEXTO_PUNCTUATION=0x2000, - /** - * A label does not meet the IDNA CONTEXTO requirements for digits. - * Arabic-Indic Digits (U+066x) must not be mixed with Extended Arabic-Indic Digits (U+06Fx). - * @stable ICU 49 - */ - UIDNA_ERROR_CONTEXTO_DIGITS=0x4000 -}; - -#ifndef U_HIDE_DEPRECATED_API - -/* IDNA2003 API ------------------------------------------------------------- */ - -/** - * IDNA2003: This function implements the ToASCII operation as defined in the IDNA RFC. - * This operation is done on single labels before sending it to something that expects - * ASCII names. A label is an individual part of a domain name. Labels are usually - * separated by dots; e.g. "www.example.com" is composed of 3 labels "www","example", and "com". - * - * IDNA2003 API Overview: - * - * The uidna_ API implements the IDNA protocol as defined in the IDNA RFC - * (http://www.ietf.org/rfc/rfc3490.txt). - * The RFC defines 2 operations: ToASCII and ToUnicode. Domain name labels - * containing non-ASCII code points are processed by the - * ToASCII operation before passing it to resolver libraries. Domain names - * that are obtained from resolver libraries are processed by the - * ToUnicode operation before displaying the domain name to the user. - * IDNA requires that implementations process input strings with Nameprep - * (http://www.ietf.org/rfc/rfc3491.txt), - * which is a profile of Stringprep (http://www.ietf.org/rfc/rfc3454.txt), - * and then with Punycode (http://www.ietf.org/rfc/rfc3492.txt). - * Implementations of IDNA MUST fully implement Nameprep and Punycode; - * neither Nameprep nor Punycode are optional. - * The input and output of ToASCII and ToUnicode operations are Unicode - * and are designed to be chainable, i.e., applying ToASCII or ToUnicode operations - * multiple times to an input string will yield the same result as applying the operation - * once. - * ToUnicode(ToUnicode(ToUnicode...(ToUnicode(string)))) == ToUnicode(string) - * ToASCII(ToASCII(ToASCII...(ToASCII(string))) == ToASCII(string). - * - * @param src Input UChar array containing label in Unicode. - * @param srcLength Number of UChars in src, or -1 if NUL-terminated. - * @param dest Output UChar array with ASCII (ACE encoded) label. - * @param destCapacity Size of dest. - * @param options A bit set of options: - * - * - UIDNA_DEFAULT Use default options, i.e., do not process unassigned code points - * and do not use STD3 ASCII rules - * If unassigned code points are found the operation fails with - * U_UNASSIGNED_ERROR error code. - * - * - UIDNA_ALLOW_UNASSIGNED Unassigned values can be converted to ASCII for query operations - * If this option is set, the unassigned code points are in the input - * are treated as normal Unicode code points. - * - * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions - * If this option is set and the input does not satisfy STD3 rules, - * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR - * - * @param parseError Pointer to UParseError struct to receive information on position - * of error if an error is encountered. Can be NULL. - * @param status ICU in/out error code parameter. - * U_INVALID_CHAR_FOUND if src contains - * unmatched single surrogates. - * U_INDEX_OUTOFBOUNDS_ERROR if src contains - * too many code points. - * U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough - * @return The length of the result string, if successful - or in case of a buffer overflow, - * in which case it will be greater than destCapacity. - * @deprecated ICU 55 Use UTS #46 instead via uidna_openUTS46() or class IDNA. - */ -U_DEPRECATED int32_t U_EXPORT2 -uidna_toASCII(const UChar* src, int32_t srcLength, - UChar* dest, int32_t destCapacity, - int32_t options, - UParseError* parseError, - UErrorCode* status); - - -/** - * IDNA2003: This function implements the ToUnicode operation as defined in the IDNA RFC. - * This operation is done on single labels before sending it to something that expects - * Unicode names. A label is an individual part of a domain name. Labels are usually - * separated by dots; for e.g. "www.example.com" is composed of 3 labels "www","example", and "com". - * - * @param src Input UChar array containing ASCII (ACE encoded) label. - * @param srcLength Number of UChars in src, or -1 if NUL-terminated. - * @param dest Output Converted UChar array containing Unicode equivalent of label. - * @param destCapacity Size of dest. - * @param options A bit set of options: - * - * - UIDNA_DEFAULT Use default options, i.e., do not process unassigned code points - * and do not use STD3 ASCII rules - * If unassigned code points are found the operation fails with - * U_UNASSIGNED_ERROR error code. - * - * - UIDNA_ALLOW_UNASSIGNED Unassigned values can be converted to ASCII for query operations - * If this option is set, the unassigned code points are in the input - * are treated as normal Unicode code points. Note: This option is - * required on toUnicode operation because the RFC mandates - * verification of decoded ACE input by applying toASCII and comparing - * its output with source - * - * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions - * If this option is set and the input does not satisfy STD3 rules, - * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR - * - * @param parseError Pointer to UParseError struct to receive information on position - * of error if an error is encountered. Can be NULL. - * @param status ICU in/out error code parameter. - * U_INVALID_CHAR_FOUND if src contains - * unmatched single surrogates. - * U_INDEX_OUTOFBOUNDS_ERROR if src contains - * too many code points. - * U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough - * @return The length of the result string, if successful - or in case of a buffer overflow, - * in which case it will be greater than destCapacity. - * @deprecated ICU 55 Use UTS #46 instead via uidna_openUTS46() or class IDNA. - */ -U_DEPRECATED int32_t U_EXPORT2 -uidna_toUnicode(const UChar* src, int32_t srcLength, - UChar* dest, int32_t destCapacity, - int32_t options, - UParseError* parseError, - UErrorCode* status); - - -/** - * IDNA2003: Convenience function that implements the IDNToASCII operation as defined in the IDNA RFC. - * This operation is done on complete domain names, e.g: "www.example.com". - * It is important to note that this operation can fail. If it fails, then the input - * domain name cannot be used as an Internationalized Domain Name and the application - * should have methods defined to deal with the failure. - * - * Note: IDNA RFC specifies that a conformant application should divide a domain name - * into separate labels, decide whether to apply allowUnassigned and useSTD3ASCIIRules on each, - * and then convert. This function does not offer that level of granularity. The options once - * set will apply to all labels in the domain name - * - * @param src Input UChar array containing IDN in Unicode. - * @param srcLength Number of UChars in src, or -1 if NUL-terminated. - * @param dest Output UChar array with ASCII (ACE encoded) IDN. - * @param destCapacity Size of dest. - * @param options A bit set of options: - * - * - UIDNA_DEFAULT Use default options, i.e., do not process unassigned code points - * and do not use STD3 ASCII rules - * If unassigned code points are found the operation fails with - * U_UNASSIGNED_CODE_POINT_FOUND error code. - * - * - UIDNA_ALLOW_UNASSIGNED Unassigned values can be converted to ASCII for query operations - * If this option is set, the unassigned code points are in the input - * are treated as normal Unicode code points. - * - * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions - * If this option is set and the input does not satisfy STD3 rules, - * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR - * - * @param parseError Pointer to UParseError struct to receive information on position - * of error if an error is encountered. Can be NULL. - * @param status ICU in/out error code parameter. - * U_INVALID_CHAR_FOUND if src contains - * unmatched single surrogates. - * U_INDEX_OUTOFBOUNDS_ERROR if src contains - * too many code points. - * U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough - * @return The length of the result string, if successful - or in case of a buffer overflow, - * in which case it will be greater than destCapacity. - * @deprecated ICU 55 Use UTS #46 instead via uidna_openUTS46() or class IDNA. - */ -U_DEPRECATED int32_t U_EXPORT2 -uidna_IDNToASCII( const UChar* src, int32_t srcLength, - UChar* dest, int32_t destCapacity, - int32_t options, - UParseError* parseError, - UErrorCode* status); - -/** - * IDNA2003: Convenience function that implements the IDNToUnicode operation as defined in the IDNA RFC. - * This operation is done on complete domain names, e.g: "www.example.com". - * - * Note: IDNA RFC specifies that a conformant application should divide a domain name - * into separate labels, decide whether to apply allowUnassigned and useSTD3ASCIIRules on each, - * and then convert. This function does not offer that level of granularity. The options once - * set will apply to all labels in the domain name - * - * @param src Input UChar array containing IDN in ASCII (ACE encoded) form. - * @param srcLength Number of UChars in src, or -1 if NUL-terminated. - * @param dest Output UChar array containing Unicode equivalent of source IDN. - * @param destCapacity Size of dest. - * @param options A bit set of options: - * - * - UIDNA_DEFAULT Use default options, i.e., do not process unassigned code points - * and do not use STD3 ASCII rules - * If unassigned code points are found the operation fails with - * U_UNASSIGNED_CODE_POINT_FOUND error code. - * - * - UIDNA_ALLOW_UNASSIGNED Unassigned values can be converted to ASCII for query operations - * If this option is set, the unassigned code points are in the input - * are treated as normal Unicode code points. - * - * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions - * If this option is set and the input does not satisfy STD3 rules, - * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR - * - * @param parseError Pointer to UParseError struct to receive information on position - * of error if an error is encountered. Can be NULL. - * @param status ICU in/out error code parameter. - * U_INVALID_CHAR_FOUND if src contains - * unmatched single surrogates. - * U_INDEX_OUTOFBOUNDS_ERROR if src contains - * too many code points. - * U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough - * @return The length of the result string, if successful - or in case of a buffer overflow, - * in which case it will be greater than destCapacity. - * @deprecated ICU 55 Use UTS #46 instead via uidna_openUTS46() or class IDNA. - */ -U_DEPRECATED int32_t U_EXPORT2 -uidna_IDNToUnicode( const UChar* src, int32_t srcLength, - UChar* dest, int32_t destCapacity, - int32_t options, - UParseError* parseError, - UErrorCode* status); - -/** - * IDNA2003: Compare two IDN strings for equivalence. - * This function splits the domain names into labels and compares them. - * According to IDN RFC, whenever two labels are compared, they are - * considered equal if and only if their ASCII forms (obtained by - * applying toASCII) match using an case-insensitive ASCII comparison. - * Two domain names are considered a match if and only if all labels - * match regardless of whether label separators match. - * - * @param s1 First source string. - * @param length1 Length of first source string, or -1 if NUL-terminated. - * - * @param s2 Second source string. - * @param length2 Length of second source string, or -1 if NUL-terminated. - * @param options A bit set of options: - * - * - UIDNA_DEFAULT Use default options, i.e., do not process unassigned code points - * and do not use STD3 ASCII rules - * If unassigned code points are found the operation fails with - * U_UNASSIGNED_CODE_POINT_FOUND error code. - * - * - UIDNA_ALLOW_UNASSIGNED Unassigned values can be converted to ASCII for query operations - * If this option is set, the unassigned code points are in the input - * are treated as normal Unicode code points. - * - * - UIDNA_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions - * If this option is set and the input does not satisfy STD3 rules, - * the operation will fail with U_IDNA_STD3_ASCII_RULES_ERROR - * - * @param status ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return <0 or 0 or >0 as usual for string comparisons - * @deprecated ICU 55 Use UTS #46 instead via uidna_openUTS46() or class IDNA. - */ -U_DEPRECATED int32_t U_EXPORT2 -uidna_compare( const UChar *s1, int32_t length1, - const UChar *s2, int32_t length2, - int32_t options, - UErrorCode* status); - -#endif /* U_HIDE_DEPRECATED_API */ - -#endif /* #if !UCONFIG_NO_IDNA */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uiter.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uiter.h deleted file mode 100644 index 9792095e00..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uiter.h +++ /dev/null @@ -1,709 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2002-2011 International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: uiter.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2002jan18 -* created by: Markus W. Scherer -*/ - -#ifndef __UITER_H__ -#define __UITER_H__ - -/** - * \file - * \brief C API: Unicode Character Iteration - * - * @see UCharIterator - */ - -#include "unicode/utypes.h" - -#if U_SHOW_CPLUSPLUS_API - U_NAMESPACE_BEGIN - - class CharacterIterator; - class Replaceable; - - U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -U_CDECL_BEGIN - -struct UCharIterator; -typedef struct UCharIterator UCharIterator; /**< C typedef for struct UCharIterator. @stable ICU 2.1 */ - -/** - * Origin constants for UCharIterator.getIndex() and UCharIterator.move(). - * @see UCharIteratorMove - * @see UCharIterator - * @stable ICU 2.1 - */ -typedef enum UCharIteratorOrigin { - UITER_START, UITER_CURRENT, UITER_LIMIT, UITER_ZERO, UITER_LENGTH -} UCharIteratorOrigin; - -/** Constants for UCharIterator. @stable ICU 2.6 */ -enum { - /** - * Constant value that may be returned by UCharIteratorMove - * indicating that the final UTF-16 index is not known, but that the move succeeded. - * This can occur when moving relative to limit or length, or - * when moving relative to the current index after a setState() - * when the current UTF-16 index is not known. - * - * It would be very inefficient to have to count from the beginning of the text - * just to get the current/limit/length index after moving relative to it. - * The actual index can be determined with getIndex(UITER_CURRENT) - * which will count the UChars if necessary. - * - * @stable ICU 2.6 - */ - UITER_UNKNOWN_INDEX=-2 -}; - - -/** - * Constant for UCharIterator getState() indicating an error or - * an unknown state. - * Returned by uiter_getState()/UCharIteratorGetState - * when an error occurs. - * Also, some UCharIterator implementations may not be able to return - * a valid state for each position. This will be clearly documented - * for each such iterator (none of the public ones here). - * - * @stable ICU 2.6 - */ -#define UITER_NO_STATE ((uint32_t)0xffffffff) - -/** - * Function type declaration for UCharIterator.getIndex(). - * - * Gets the current position, or the start or limit of the - * iteration range. - * - * This function may perform slowly for UITER_CURRENT after setState() was called, - * or for UITER_LENGTH, because an iterator implementation may have to count - * UChars if the underlying storage is not UTF-16. - * - * @param iter the UCharIterator structure ("this pointer") - * @param origin get the 0, start, limit, length, or current index - * @return the requested index, or U_SENTINEL in an error condition - * - * @see UCharIteratorOrigin - * @see UCharIterator - * @stable ICU 2.1 - */ -typedef int32_t U_CALLCONV -UCharIteratorGetIndex(UCharIterator *iter, UCharIteratorOrigin origin); - -/** - * Function type declaration for UCharIterator.move(). - * - * Use iter->move(iter, index, UITER_ZERO) like CharacterIterator::setIndex(index). - * - * Moves the current position relative to the start or limit of the - * iteration range, or relative to the current position itself. - * The movement is expressed in numbers of code units forward - * or backward by specifying a positive or negative delta. - * Out of bounds movement will be pinned to the start or limit. - * - * This function may perform slowly for moving relative to UITER_LENGTH - * because an iterator implementation may have to count the rest of the - * UChars if the native storage is not UTF-16. - * - * When moving relative to the limit or length, or - * relative to the current position after setState() was called, - * move() may return UITER_UNKNOWN_INDEX (-2) to avoid an inefficient - * determination of the actual UTF-16 index. - * The actual index can be determined with getIndex(UITER_CURRENT) - * which will count the UChars if necessary. - * See UITER_UNKNOWN_INDEX for details. - * - * @param iter the UCharIterator structure ("this pointer") - * @param delta can be positive, zero, or negative - * @param origin move relative to the 0, start, limit, length, or current index - * @return the new index, or U_SENTINEL on an error condition, - * or UITER_UNKNOWN_INDEX when the index is not known. - * - * @see UCharIteratorOrigin - * @see UCharIterator - * @see UITER_UNKNOWN_INDEX - * @stable ICU 2.1 - */ -typedef int32_t U_CALLCONV -UCharIteratorMove(UCharIterator *iter, int32_t delta, UCharIteratorOrigin origin); - -/** - * Function type declaration for UCharIterator.hasNext(). - * - * Check if current() and next() can still - * return another code unit. - * - * @param iter the UCharIterator structure ("this pointer") - * @return boolean value for whether current() and next() can still return another code unit - * - * @see UCharIterator - * @stable ICU 2.1 - */ -typedef UBool U_CALLCONV -UCharIteratorHasNext(UCharIterator *iter); - -/** - * Function type declaration for UCharIterator.hasPrevious(). - * - * Check if previous() can still return another code unit. - * - * @param iter the UCharIterator structure ("this pointer") - * @return boolean value for whether previous() can still return another code unit - * - * @see UCharIterator - * @stable ICU 2.1 - */ -typedef UBool U_CALLCONV -UCharIteratorHasPrevious(UCharIterator *iter); - -/** - * Function type declaration for UCharIterator.current(). - * - * Return the code unit at the current position, - * or U_SENTINEL if there is none (index is at the limit). - * - * @param iter the UCharIterator structure ("this pointer") - * @return the current code unit - * - * @see UCharIterator - * @stable ICU 2.1 - */ -typedef UChar32 U_CALLCONV -UCharIteratorCurrent(UCharIterator *iter); - -/** - * Function type declaration for UCharIterator.next(). - * - * Return the code unit at the current index and increment - * the index (post-increment, like s[i++]), - * or return U_SENTINEL if there is none (index is at the limit). - * - * @param iter the UCharIterator structure ("this pointer") - * @return the current code unit (and post-increment the current index) - * - * @see UCharIterator - * @stable ICU 2.1 - */ -typedef UChar32 U_CALLCONV -UCharIteratorNext(UCharIterator *iter); - -/** - * Function type declaration for UCharIterator.previous(). - * - * Decrement the index and return the code unit from there - * (pre-decrement, like s[--i]), - * or return U_SENTINEL if there is none (index is at the start). - * - * @param iter the UCharIterator structure ("this pointer") - * @return the previous code unit (after pre-decrementing the current index) - * - * @see UCharIterator - * @stable ICU 2.1 - */ -typedef UChar32 U_CALLCONV -UCharIteratorPrevious(UCharIterator *iter); - -/** - * Function type declaration for UCharIterator.reservedFn(). - * Reserved for future use. - * - * @param iter the UCharIterator structure ("this pointer") - * @param something some integer argument - * @return some integer - * - * @see UCharIterator - * @stable ICU 2.1 - */ -typedef int32_t U_CALLCONV -UCharIteratorReserved(UCharIterator *iter, int32_t something); - -/** - * Function type declaration for UCharIterator.getState(). - * - * Get the "state" of the iterator in the form of a single 32-bit word. - * It is recommended that the state value be calculated to be as small as - * is feasible. For strings with limited lengths, fewer than 32 bits may - * be sufficient. - * - * This is used together with setState()/UCharIteratorSetState - * to save and restore the iterator position more efficiently than with - * getIndex()/move(). - * - * The iterator state is defined as a uint32_t value because it is designed - * for use in ucol_nextSortKeyPart() which provides 32 bits to store the state - * of the character iterator. - * - * With some UCharIterator implementations (e.g., UTF-8), - * getting and setting the UTF-16 index with existing functions - * (getIndex(UITER_CURRENT) followed by move(pos, UITER_ZERO)) is possible but - * relatively slow because the iterator has to "walk" from a known index - * to the requested one. - * This takes more time the farther it needs to go. - * - * An opaque state value allows an iterator implementation to provide - * an internal index (UTF-8: the source byte array index) for - * fast, constant-time restoration. - * - * After calling setState(), a getIndex(UITER_CURRENT) may be slow because - * the UTF-16 index may not be restored as well, but the iterator can deliver - * the correct text contents and move relative to the current position - * without performance degradation. - * - * Some UCharIterator implementations may not be able to return - * a valid state for each position, in which case they return UITER_NO_STATE instead. - * This will be clearly documented for each such iterator (none of the public ones here). - * - * @param iter the UCharIterator structure ("this pointer") - * @return the state word - * - * @see UCharIterator - * @see UCharIteratorSetState - * @see UITER_NO_STATE - * @stable ICU 2.6 - */ -typedef uint32_t U_CALLCONV -UCharIteratorGetState(const UCharIterator *iter); - -/** - * Function type declaration for UCharIterator.setState(). - * - * Restore the "state" of the iterator using a state word from a getState() call. - * The iterator object need not be the same one as for which getState() was called, - * but it must be of the same type (set up using the same uiter_setXYZ function) - * and it must iterate over the same string - * (binary identical regardless of memory address). - * For more about the state word see UCharIteratorGetState. - * - * After calling setState(), a getIndex(UITER_CURRENT) may be slow because - * the UTF-16 index may not be restored as well, but the iterator can deliver - * the correct text contents and move relative to the current position - * without performance degradation. - * - * @param iter the UCharIterator structure ("this pointer") - * @param state the state word from a getState() call - * on a same-type, same-string iterator - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * - * @see UCharIterator - * @see UCharIteratorGetState - * @stable ICU 2.6 - */ -typedef void U_CALLCONV -UCharIteratorSetState(UCharIterator *iter, uint32_t state, UErrorCode *pErrorCode); - - -/** - * C API for code unit iteration. - * This can be used as a C wrapper around - * CharacterIterator, Replaceable, or implemented using simple strings, etc. - * - * There are two roles for using UCharIterator: - * - * A "provider" sets the necessary function pointers and controls the "protected" - * fields of the UCharIterator structure. A "provider" passes a UCharIterator - * into C APIs that need a UCharIterator as an abstract, flexible string interface. - * - * Implementations of such C APIs are "callers" of UCharIterator functions; - * they only use the "public" function pointers and never access the "protected" - * fields directly. - * - * The current() and next() functions only check the current index against the - * limit, and previous() only checks the current index against the start, - * to see if the iterator already reached the end of the iteration range. - * - * The assumption - in all iterators - is that the index is moved via the API, - * which means it won't go out of bounds, or the index is modified by - * user code that knows enough about the iterator implementation to set valid - * index values. - * - * UCharIterator functions return code unit values 0..0xffff, - * or U_SENTINEL if the iteration bounds are reached. - * - * @stable ICU 2.1 - */ -struct UCharIterator { - /** - * (protected) Pointer to string or wrapped object or similar. - * Not used by caller. - * @stable ICU 2.1 - */ - const void *context; - - /** - * (protected) Length of string or similar. - * Not used by caller. - * @stable ICU 2.1 - */ - int32_t length; - - /** - * (protected) Start index or similar. - * Not used by caller. - * @stable ICU 2.1 - */ - int32_t start; - - /** - * (protected) Current index or similar. - * Not used by caller. - * @stable ICU 2.1 - */ - int32_t index; - - /** - * (protected) Limit index or similar. - * Not used by caller. - * @stable ICU 2.1 - */ - int32_t limit; - - /** - * (protected) Used by UTF-8 iterators and possibly others. - * @stable ICU 2.1 - */ - int32_t reservedField; - - /** - * (public) Returns the current position or the - * start or limit index of the iteration range. - * - * @see UCharIteratorGetIndex - * @stable ICU 2.1 - */ - UCharIteratorGetIndex *getIndex; - - /** - * (public) Moves the current position relative to the start or limit of the - * iteration range, or relative to the current position itself. - * The movement is expressed in numbers of code units forward - * or backward by specifying a positive or negative delta. - * - * @see UCharIteratorMove - * @stable ICU 2.1 - */ - UCharIteratorMove *move; - - /** - * (public) Check if current() and next() can still - * return another code unit. - * - * @see UCharIteratorHasNext - * @stable ICU 2.1 - */ - UCharIteratorHasNext *hasNext; - - /** - * (public) Check if previous() can still return another code unit. - * - * @see UCharIteratorHasPrevious - * @stable ICU 2.1 - */ - UCharIteratorHasPrevious *hasPrevious; - - /** - * (public) Return the code unit at the current position, - * or U_SENTINEL if there is none (index is at the limit). - * - * @see UCharIteratorCurrent - * @stable ICU 2.1 - */ - UCharIteratorCurrent *current; - - /** - * (public) Return the code unit at the current index and increment - * the index (post-increment, like s[i++]), - * or return U_SENTINEL if there is none (index is at the limit). - * - * @see UCharIteratorNext - * @stable ICU 2.1 - */ - UCharIteratorNext *next; - - /** - * (public) Decrement the index and return the code unit from there - * (pre-decrement, like s[--i]), - * or return U_SENTINEL if there is none (index is at the start). - * - * @see UCharIteratorPrevious - * @stable ICU 2.1 - */ - UCharIteratorPrevious *previous; - - /** - * (public) Reserved for future use. Currently NULL. - * - * @see UCharIteratorReserved - * @stable ICU 2.1 - */ - UCharIteratorReserved *reservedFn; - - /** - * (public) Return the state of the iterator, to be restored later with setState(). - * This function pointer is NULL if the iterator does not implement it. - * - * @see UCharIteratorGet - * @stable ICU 2.6 - */ - UCharIteratorGetState *getState; - - /** - * (public) Restore the iterator state from the state word from a call - * to getState(). - * This function pointer is NULL if the iterator does not implement it. - * - * @see UCharIteratorSet - * @stable ICU 2.6 - */ - UCharIteratorSetState *setState; -}; - -/** - * Helper function for UCharIterator to get the code point - * at the current index. - * - * Return the code point that includes the code unit at the current position, - * or U_SENTINEL if there is none (index is at the limit). - * If the current code unit is a lead or trail surrogate, - * then the following or preceding surrogate is used to form - * the code point value. - * - * @param iter the UCharIterator structure ("this pointer") - * @return the current code point - * - * @see UCharIterator - * @see U16_GET - * @see UnicodeString::char32At() - * @stable ICU 2.1 - */ -U_STABLE UChar32 U_EXPORT2 -uiter_current32(UCharIterator *iter); - -/** - * Helper function for UCharIterator to get the next code point. - * - * Return the code point at the current index and increment - * the index (post-increment, like s[i++]), - * or return U_SENTINEL if there is none (index is at the limit). - * - * @param iter the UCharIterator structure ("this pointer") - * @return the current code point (and post-increment the current index) - * - * @see UCharIterator - * @see U16_NEXT - * @stable ICU 2.1 - */ -U_STABLE UChar32 U_EXPORT2 -uiter_next32(UCharIterator *iter); - -/** - * Helper function for UCharIterator to get the previous code point. - * - * Decrement the index and return the code point from there - * (pre-decrement, like s[--i]), - * or return U_SENTINEL if there is none (index is at the start). - * - * @param iter the UCharIterator structure ("this pointer") - * @return the previous code point (after pre-decrementing the current index) - * - * @see UCharIterator - * @see U16_PREV - * @stable ICU 2.1 - */ -U_STABLE UChar32 U_EXPORT2 -uiter_previous32(UCharIterator *iter); - -/** - * Get the "state" of the iterator in the form of a single 32-bit word. - * This is a convenience function that calls iter->getState(iter) - * if iter->getState is not NULL; - * if it is NULL or any other error occurs, then UITER_NO_STATE is returned. - * - * Some UCharIterator implementations may not be able to return - * a valid state for each position, in which case they return UITER_NO_STATE instead. - * This will be clearly documented for each such iterator (none of the public ones here). - * - * @param iter the UCharIterator structure ("this pointer") - * @return the state word - * - * @see UCharIterator - * @see UCharIteratorGetState - * @see UITER_NO_STATE - * @stable ICU 2.6 - */ -U_STABLE uint32_t U_EXPORT2 -uiter_getState(const UCharIterator *iter); - -/** - * Restore the "state" of the iterator using a state word from a getState() call. - * This is a convenience function that calls iter->setState(iter, state, pErrorCode) - * if iter->setState is not NULL; if it is NULL, then U_UNSUPPORTED_ERROR is set. - * - * @param iter the UCharIterator structure ("this pointer") - * @param state the state word from a getState() call - * on a same-type, same-string iterator - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * - * @see UCharIterator - * @see UCharIteratorSetState - * @stable ICU 2.6 - */ -U_STABLE void U_EXPORT2 -uiter_setState(UCharIterator *iter, uint32_t state, UErrorCode *pErrorCode); - -/** - * Set up a UCharIterator to iterate over a string. - * - * Sets the UCharIterator function pointers for iteration over the string s - * with iteration boundaries start=index=0 and length=limit=string length. - * The "provider" may set the start, index, and limit values at any time - * within the range 0..length. - * The length field will be ignored. - * - * The string pointer s is set into UCharIterator.context without copying - * or reallocating the string contents. - * - * getState() simply returns the current index. - * move() will always return the final index. - * - * @param iter UCharIterator structure to be set for iteration - * @param s String to iterate over - * @param length Length of s, or -1 if NUL-terminated - * - * @see UCharIterator - * @stable ICU 2.1 - */ -U_STABLE void U_EXPORT2 -uiter_setString(UCharIterator *iter, const UChar *s, int32_t length); - -/** - * Set up a UCharIterator to iterate over a UTF-16BE string - * (byte vector with a big-endian pair of bytes per UChar). - * - * Everything works just like with a normal UChar iterator (uiter_setString), - * except that UChars are assembled from byte pairs, - * and that the length argument here indicates an even number of bytes. - * - * getState() simply returns the current index. - * move() will always return the final index. - * - * @param iter UCharIterator structure to be set for iteration - * @param s UTF-16BE string to iterate over - * @param length Length of s as an even number of bytes, or -1 if NUL-terminated - * (NUL means pair of 0 bytes at even index from s) - * - * @see UCharIterator - * @see uiter_setString - * @stable ICU 2.6 - */ -U_STABLE void U_EXPORT2 -uiter_setUTF16BE(UCharIterator *iter, const char *s, int32_t length); - -/** - * Set up a UCharIterator to iterate over a UTF-8 string. - * - * Sets the UCharIterator function pointers for iteration over the UTF-8 string s - * with UTF-8 iteration boundaries 0 and length. - * The implementation counts the UTF-16 index on the fly and - * lazily evaluates the UTF-16 length of the text. - * - * The start field is used as the UTF-8 offset, the limit field as the UTF-8 length. - * When the reservedField is not 0, then it contains a supplementary code point - * and the UTF-16 index is between the two corresponding surrogates. - * At that point, the UTF-8 index is behind that code point. - * - * The UTF-8 string pointer s is set into UCharIterator.context without copying - * or reallocating the string contents. - * - * getState() returns a state value consisting of - * - the current UTF-8 source byte index (bits 31..1) - * - a flag (bit 0) that indicates whether the UChar position is in the middle - * of a surrogate pair - * (from a 4-byte UTF-8 sequence for the corresponding supplementary code point) - * - * getState() cannot also encode the UTF-16 index in the state value. - * move(relative to limit or length), or - * move(relative to current) after setState(), may return UITER_UNKNOWN_INDEX. - * - * @param iter UCharIterator structure to be set for iteration - * @param s UTF-8 string to iterate over - * @param length Length of s in bytes, or -1 if NUL-terminated - * - * @see UCharIterator - * @stable ICU 2.6 - */ -U_STABLE void U_EXPORT2 -uiter_setUTF8(UCharIterator *iter, const char *s, int32_t length); - -#if U_SHOW_CPLUSPLUS_API - -/** - * Set up a UCharIterator to wrap around a C++ CharacterIterator. - * - * Sets the UCharIterator function pointers for iteration using the - * CharacterIterator charIter. - * - * The CharacterIterator pointer charIter is set into UCharIterator.context - * without copying or cloning the CharacterIterator object. - * The other "protected" UCharIterator fields are set to 0 and will be ignored. - * The iteration index and boundaries are controlled by the CharacterIterator. - * - * getState() simply returns the current index. - * move() will always return the final index. - * - * @param iter UCharIterator structure to be set for iteration - * @param charIter CharacterIterator to wrap - * - * @see UCharIterator - * @stable ICU 2.1 - */ -U_STABLE void U_EXPORT2 -uiter_setCharacterIterator(UCharIterator *iter, icu::CharacterIterator *charIter); - -/** - * Set up a UCharIterator to iterate over a C++ Replaceable. - * - * Sets the UCharIterator function pointers for iteration over the - * Replaceable rep with iteration boundaries start=index=0 and - * length=limit=rep->length(). - * The "provider" may set the start, index, and limit values at any time - * within the range 0..length=rep->length(). - * The length field will be ignored. - * - * The Replaceable pointer rep is set into UCharIterator.context without copying - * or cloning/reallocating the Replaceable object. - * - * getState() simply returns the current index. - * move() will always return the final index. - * - * @param iter UCharIterator structure to be set for iteration - * @param rep Replaceable to iterate over - * - * @see UCharIterator - * @stable ICU 2.1 - */ -U_STABLE void U_EXPORT2 -uiter_setReplaceable(UCharIterator *iter, const icu::Replaceable *rep); - -#endif // U_SHOW_CPLUSPLUS_API - -U_CDECL_END - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uldnames.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uldnames.h deleted file mode 100644 index aff4712ab0..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uldnames.h +++ /dev/null @@ -1,304 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2010-2016, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************************* -*/ - -#ifndef __ULDNAMES_H__ -#define __ULDNAMES_H__ - -/** - * \file - * \brief C API: Provides display names of Locale ids and their components. - */ - -#include "unicode/utypes.h" -#include "unicode/localpointer.h" -#include "unicode/uscript.h" -#include "unicode/udisplaycontext.h" - -/** - * Enum used in LocaleDisplayNames::createInstance. - * @stable ICU 4.4 - */ -typedef enum { - /** - * Use standard names when generating a locale name, - * e.g. en_GB displays as 'English (United Kingdom)'. - * @stable ICU 4.4 - */ - ULDN_STANDARD_NAMES = 0, - /** - * Use dialect names, when generating a locale name, - * e.g. en_GB displays as 'British English'. - * @stable ICU 4.4 - */ - ULDN_DIALECT_NAMES -} UDialectHandling; - -/** - * Opaque C service object type for the locale display names API - * @stable ICU 4.4 - */ -struct ULocaleDisplayNames; - -/** - * C typedef for struct ULocaleDisplayNames. - * @stable ICU 4.4 - */ -typedef struct ULocaleDisplayNames ULocaleDisplayNames; - -#if !UCONFIG_NO_FORMATTING - -/** - * Returns an instance of LocaleDisplayNames that returns names - * formatted for the provided locale, using the provided - * dialectHandling. The usual value for dialectHandling is - * ULDN_STANDARD_NAMES. - * - * @param locale the display locale - * @param dialectHandling how to select names for locales - * @return a ULocaleDisplayNames instance - * @param pErrorCode the status code - * @stable ICU 4.4 - */ -U_STABLE ULocaleDisplayNames * U_EXPORT2 -uldn_open(const char * locale, - UDialectHandling dialectHandling, - UErrorCode *pErrorCode); - -/** - * Closes a ULocaleDisplayNames instance obtained from uldn_open(). - * @param ldn the ULocaleDisplayNames instance to be closed - * @stable ICU 4.4 - */ -U_STABLE void U_EXPORT2 -uldn_close(ULocaleDisplayNames *ldn); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalULocaleDisplayNamesPointer - * "Smart pointer" class, closes a ULocaleDisplayNames via uldn_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalULocaleDisplayNamesPointer, ULocaleDisplayNames, uldn_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/* getters for state */ - -/** - * Returns the locale used to determine the display names. This is - * not necessarily the same locale passed to {@link #uldn_open}. - * @param ldn the LocaleDisplayNames instance - * @return the display locale - * @stable ICU 4.4 - */ -U_STABLE const char * U_EXPORT2 -uldn_getLocale(const ULocaleDisplayNames *ldn); - -/** - * Returns the dialect handling used in the display names. - * @param ldn the LocaleDisplayNames instance - * @return the dialect handling enum - * @stable ICU 4.4 - */ -U_STABLE UDialectHandling U_EXPORT2 -uldn_getDialectHandling(const ULocaleDisplayNames *ldn); - -/* names for entire locales */ - -/** - * Returns the display name of the provided locale. - * @param ldn the LocaleDisplayNames instance - * @param locale the locale whose display name to return - * @param result receives the display name - * @param maxResultSize the size of the result buffer - * @param pErrorCode the status code - * @return the actual buffer size needed for the display name. If it's - * greater than maxResultSize, the returned name will be truncated. - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -uldn_localeDisplayName(const ULocaleDisplayNames *ldn, - const char *locale, - UChar *result, - int32_t maxResultSize, - UErrorCode *pErrorCode); - -/* names for components of a locale */ - -/** - * Returns the display name of the provided language code. - * @param ldn the LocaleDisplayNames instance - * @param lang the language code whose display name to return - * @param result receives the display name - * @param maxResultSize the size of the result buffer - * @param pErrorCode the status code - * @return the actual buffer size needed for the display name. If it's - * greater than maxResultSize, the returned name will be truncated. - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -uldn_languageDisplayName(const ULocaleDisplayNames *ldn, - const char *lang, - UChar *result, - int32_t maxResultSize, - UErrorCode *pErrorCode); - -/** - * Returns the display name of the provided script. - * @param ldn the LocaleDisplayNames instance - * @param script the script whose display name to return - * @param result receives the display name - * @param maxResultSize the size of the result buffer - * @param pErrorCode the status code - * @return the actual buffer size needed for the display name. If it's - * greater than maxResultSize, the returned name will be truncated. - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -uldn_scriptDisplayName(const ULocaleDisplayNames *ldn, - const char *script, - UChar *result, - int32_t maxResultSize, - UErrorCode *pErrorCode); - -/** - * Returns the display name of the provided script code. - * @param ldn the LocaleDisplayNames instance - * @param scriptCode the script code whose display name to return - * @param result receives the display name - * @param maxResultSize the size of the result buffer - * @param pErrorCode the status code - * @return the actual buffer size needed for the display name. If it's - * greater than maxResultSize, the returned name will be truncated. - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -uldn_scriptCodeDisplayName(const ULocaleDisplayNames *ldn, - UScriptCode scriptCode, - UChar *result, - int32_t maxResultSize, - UErrorCode *pErrorCode); - -/** - * Returns the display name of the provided region code. - * @param ldn the LocaleDisplayNames instance - * @param region the region code whose display name to return - * @param result receives the display name - * @param maxResultSize the size of the result buffer - * @param pErrorCode the status code - * @return the actual buffer size needed for the display name. If it's - * greater than maxResultSize, the returned name will be truncated. - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -uldn_regionDisplayName(const ULocaleDisplayNames *ldn, - const char *region, - UChar *result, - int32_t maxResultSize, - UErrorCode *pErrorCode); - -/** - * Returns the display name of the provided variant - * @param ldn the LocaleDisplayNames instance - * @param variant the variant whose display name to return - * @param result receives the display name - * @param maxResultSize the size of the result buffer - * @param pErrorCode the status code - * @return the actual buffer size needed for the display name. If it's - * greater than maxResultSize, the returned name will be truncated. - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -uldn_variantDisplayName(const ULocaleDisplayNames *ldn, - const char *variant, - UChar *result, - int32_t maxResultSize, - UErrorCode *pErrorCode); - -/** - * Returns the display name of the provided locale key - * @param ldn the LocaleDisplayNames instance - * @param key the locale key whose display name to return - * @param result receives the display name - * @param maxResultSize the size of the result buffer - * @param pErrorCode the status code - * @return the actual buffer size needed for the display name. If it's - * greater than maxResultSize, the returned name will be truncated. - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -uldn_keyDisplayName(const ULocaleDisplayNames *ldn, - const char *key, - UChar *result, - int32_t maxResultSize, - UErrorCode *pErrorCode); - -/** - * Returns the display name of the provided value (used with the provided key). - * @param ldn the LocaleDisplayNames instance - * @param key the locale key - * @param value the locale key's value - * @param result receives the display name - * @param maxResultSize the size of the result buffer - * @param pErrorCode the status code - * @return the actual buffer size needed for the display name. If it's - * greater than maxResultSize, the returned name will be truncated. - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -uldn_keyValueDisplayName(const ULocaleDisplayNames *ldn, - const char *key, - const char *value, - UChar *result, - int32_t maxResultSize, - UErrorCode *pErrorCode); - -/** -* Returns an instance of LocaleDisplayNames that returns names formatted -* for the provided locale, using the provided UDisplayContext settings. -* -* @param locale The display locale -* @param contexts List of one or more context settings (e.g. for dialect -* handling, capitalization, etc. -* @param length Number of items in the contexts list -* @param pErrorCode Pointer to UErrorCode input/output status. If at entry this indicates -* a failure status, the function will do nothing; otherwise this will be -* updated with any new status from the function. -* @return a ULocaleDisplayNames instance -* @stable ICU 51 -*/ -U_STABLE ULocaleDisplayNames * U_EXPORT2 -uldn_openForContext(const char * locale, UDisplayContext *contexts, - int32_t length, UErrorCode *pErrorCode); - -/** -* Returns the UDisplayContext value for the specified UDisplayContextType. -* @param ldn the ULocaleDisplayNames instance -* @param type the UDisplayContextType whose value to return -* @param pErrorCode Pointer to UErrorCode input/output status. If at entry this indicates -* a failure status, the function will do nothing; otherwise this will be -* updated with any new status from the function. -* @return the UDisplayContextValue for the specified type. -* @stable ICU 51 -*/ -U_STABLE UDisplayContext U_EXPORT2 -uldn_getContext(const ULocaleDisplayNames *ldn, UDisplayContextType type, - UErrorCode *pErrorCode); - -#endif /* !UCONFIG_NO_FORMATTING */ -#endif /* __ULDNAMES_H__ */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ulistformatter.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ulistformatter.h deleted file mode 100644 index 9d91ad17bb..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ulistformatter.h +++ /dev/null @@ -1,257 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -***************************************************************************************** -* Copyright (C) 2015-2016, International Business Machines -* Corporation and others. All Rights Reserved. -***************************************************************************************** -*/ - -#ifndef ULISTFORMATTER_H -#define ULISTFORMATTER_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/localpointer.h" -#include "unicode/uformattedvalue.h" - -/** - * \file - * \brief C API: Format a list in a locale-appropriate way. - * - * A UListFormatter is used to format a list of items in a locale-appropriate way, - * using data from CLDR. - * Example: Input data ["Alice", "Bob", "Charlie", "Delta"] will be formatted - * as "Alice, Bob, Charlie, and Delta" in English. - */ - -/** - * Opaque UListFormatter object for use in C - * @stable ICU 55 - */ -struct UListFormatter; -typedef struct UListFormatter UListFormatter; /**< C typedef for struct UListFormatter. @stable ICU 55 */ - -#ifndef U_HIDE_DRAFT_API -struct UFormattedList; -/** - * Opaque struct to contain the results of a UListFormatter operation. - * @draft ICU 64 - */ -typedef struct UFormattedList UFormattedList; -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API -/** - * FieldPosition and UFieldPosition selectors for format fields - * defined by ListFormatter. - * @draft ICU 63 - */ -typedef enum UListFormatterField { - /** - * The literal text in the result which came from the resources. - * @draft ICU 63 - */ - ULISTFMT_LITERAL_FIELD, - /** - * The element text in the result which came from the input strings. - * @draft ICU 63 - */ - ULISTFMT_ELEMENT_FIELD -} UListFormatterField; -#endif // U_HIDE_DRAFT_API - -/** - * Open a new UListFormatter object using the rules for a given locale. - * @param locale - * The locale whose rules should be used; may be NULL for - * default locale. - * @param status - * A pointer to a standard ICU UErrorCode (input/output parameter). - * Its input value must pass the U_SUCCESS() test, or else the - * function returns immediately. The caller should check its output - * value with U_FAILURE(), or use with function chaining (see User - * Guide for details). - * @return - * A pointer to a UListFormatter object for the specified locale, - * or NULL if an error occurred. - * @stable ICU 55 - */ -U_CAPI UListFormatter* U_EXPORT2 -ulistfmt_open(const char* locale, - UErrorCode* status); - -/** - * Close a UListFormatter object. Once closed it may no longer be used. - * @param listfmt - * The UListFormatter object to close. - * @stable ICU 55 - */ -U_CAPI void U_EXPORT2 -ulistfmt_close(UListFormatter *listfmt); - -#ifndef U_HIDE_DRAFT_API -/** - * Creates an object to hold the result of a UListFormatter - * operation. The object can be used repeatedly; it is cleared whenever - * passed to a format function. - * - * @param ec Set if an error occurs. - * @return A pointer needing ownership. - * @draft ICU 64 - */ -U_CAPI UFormattedList* U_EXPORT2 -ulistfmt_openResult(UErrorCode* ec); - -/** - * Returns a representation of a UFormattedList as a UFormattedValue, - * which can be subsequently passed to any API requiring that type. - * - * The returned object is owned by the UFormattedList and is valid - * only as long as the UFormattedList is present and unchanged in memory. - * - * You can think of this method as a cast between types. - * - * When calling ufmtval_nextPosition(): - * The fields are returned from start to end. The special field category - * UFIELD_CATEGORY_LIST_SPAN is used to indicate which argument - * was inserted at the given position. The span category will - * always occur before the corresponding instance of UFIELD_CATEGORY_LIST - * in the ufmtval_nextPosition() iterator. - * - * @param uresult The object containing the formatted string. - * @param ec Set if an error occurs. - * @return A UFormattedValue owned by the input object. - * @draft ICU 64 - */ -U_CAPI const UFormattedValue* U_EXPORT2 -ulistfmt_resultAsValue(const UFormattedList* uresult, UErrorCode* ec); - -/** - * Releases the UFormattedList created by ulistfmt_openResult(). - * - * @param uresult The object to release. - * @draft ICU 64 - */ -U_CAPI void U_EXPORT2 -ulistfmt_closeResult(UFormattedList* uresult); -#endif /* U_HIDE_DRAFT_API */ - - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUListFormatterPointer - * "Smart pointer" class, closes a UListFormatter via ulistfmt_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 55 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUListFormatterPointer, UListFormatter, ulistfmt_close); - -#ifndef U_HIDE_DRAFT_API -/** - * \class LocalUFormattedListPointer - * "Smart pointer" class, closes a UFormattedList via ulistfmt_closeResult(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @draft ICU 64 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedListPointer, UFormattedList, ulistfmt_closeResult); -#endif /* U_HIDE_DRAFT_API */ - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Formats a list of strings using the conventions established for the - * UListFormatter object. - * @param listfmt - * The UListFormatter object specifying the list conventions. - * @param strings - * An array of pointers to UChar strings; the array length is - * specified by stringCount. Must be non-NULL if stringCount > 0. - * @param stringLengths - * An array of string lengths corresponding to the strings[] - * parameter; any individual length value may be negative to indicate - * that the corresponding strings[] entry is 0-terminated, or - * stringLengths itself may be NULL if all of the strings are - * 0-terminated. If non-NULL, the stringLengths array must have - * stringCount entries. - * @param stringCount - * the number of entries in strings[], and the number of entries - * in the stringLengths array if it is not NULL. Must be >= 0. - * @param result - * A pointer to a buffer to receive the formatted list. - * @param resultCapacity - * The maximum size of result. - * @param status - * A pointer to a standard ICU UErrorCode (input/output parameter). - * Its input value must pass the U_SUCCESS() test, or else the - * function returns immediately. The caller should check its output - * value with U_FAILURE(), or use with function chaining (see User - * Guide for details). - * @return - * The total buffer size needed; if greater than resultLength, the - * output was truncated. May be <=0 if unable to determine the - * total buffer size needed (e.g. for illegal arguments). - * @stable ICU 55 - */ -U_CAPI int32_t U_EXPORT2 -ulistfmt_format(const UListFormatter* listfmt, - const UChar* const strings[], - const int32_t * stringLengths, - int32_t stringCount, - UChar* result, - int32_t resultCapacity, - UErrorCode* status); - -#ifndef U_HIDE_DRAFT_API -/** - * Formats a list of strings to a UFormattedList, which exposes more - * information than the string exported by ulistfmt_format(). - * - * @param listfmt - * The UListFormatter object specifying the list conventions. - * @param strings - * An array of pointers to UChar strings; the array length is - * specified by stringCount. Must be non-NULL if stringCount > 0. - * @param stringLengths - * An array of string lengths corresponding to the strings[] - * parameter; any individual length value may be negative to indicate - * that the corresponding strings[] entry is 0-terminated, or - * stringLengths itself may be NULL if all of the strings are - * 0-terminated. If non-NULL, the stringLengths array must have - * stringCount entries. - * @param stringCount - * the number of entries in strings[], and the number of entries - * in the stringLengths array if it is not NULL. Must be >= 0. - * @param uresult - * The object in which to store the result of the list formatting - * operation. See ulistfmt_openResult(). - * @param status - * Error code set if an error occurred during formatting. - * @draft ICU 64 - */ -U_CAPI void U_EXPORT2 -ulistfmt_formatStringsToResult( - const UListFormatter* listfmt, - const UChar* const strings[], - const int32_t * stringLengths, - int32_t stringCount, - UFormattedList* uresult, - UErrorCode* status); -#endif /* U_HIDE_DRAFT_API */ - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uloc.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uloc.h deleted file mode 100644 index bc1d74fc80..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uloc.h +++ /dev/null @@ -1,1273 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1997-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* -* File ULOC.H -* -* Modification History: -* -* Date Name Description -* 04/01/97 aliu Creation. -* 08/22/98 stephen JDK 1.2 sync. -* 12/08/98 rtg New C API for Locale -* 03/30/99 damiba overhaul -* 03/31/99 helena Javadoc for uloc functions. -* 04/15/99 Madhu Updated Javadoc -******************************************************************************** -*/ - -#ifndef ULOC_H -#define ULOC_H - -#include "unicode/utypes.h" -#include "unicode/uenum.h" - -/** - * \file - * \brief C API: Locale - * - *

ULoc C API for Locale

- * A Locale represents a specific geographical, political, - * or cultural region. An operation that requires a Locale to perform - * its task is called locale-sensitive and uses the Locale - * to tailor information for the user. For example, displaying a number - * is a locale-sensitive operation--the number should be formatted - * according to the customs/conventions of the user's native country, - * region, or culture. In the C APIs, a locales is simply a const char string. - * - *

- * You create a Locale with one of the three options listed below. - * Each of the component is separated by '_' in the locale string. - * \htmlonly

\endhtmlonly - *
- * \code
- *       newLanguage
- * 
- *       newLanguage + newCountry
- * 
- *       newLanguage + newCountry + newVariant
- * \endcode
- * 
- * \htmlonly
\endhtmlonly - * The first option is a valid ISO - * Language Code. These codes are the lower-case two-letter - * codes as defined by ISO-639. - * You can find a full list of these codes at a number of sites, such as: - *
- * http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt - * - *

- * The second option includes an additional ISO Country - * Code. These codes are the upper-case two-letter codes - * as defined by ISO-3166. - * You can find a full list of these codes at a number of sites, such as: - *
- * http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html - * - *

- * The third option requires another additional information--the - * Variant. - * The Variant codes are vendor and browser-specific. - * For example, use WIN for Windows, MAC for Macintosh, and POSIX for POSIX. - * Where there are two variants, separate them with an underscore, and - * put the most important one first. For - * example, a Traditional Spanish collation might be referenced, with - * "ES", "ES", "Traditional_WIN". - * - *

- * Because a Locale is just an identifier for a region, - * no validity check is performed when you specify a Locale. - * If you want to see whether particular resources are available for the - * Locale you asked for, you must query those resources. For - * example, ask the UNumberFormat for the locales it supports - * using its getAvailable method. - *
Note: When you ask for a resource for a particular - * locale, you get back the best available match, not necessarily - * precisely what you asked for. For more information, look at - * UResourceBundle. - * - *

- * The Locale provides a number of convenient constants - * that you can use to specify the commonly used - * locales. For example, the following refers to a locale - * for the United States: - * \htmlonly

\endhtmlonly - *
- * \code
- *       ULOC_US
- * \endcode
- * 
- * \htmlonly
\endhtmlonly - * - *

- * Once you've specified a locale you can query it for information about - * itself. Use uloc_getCountry to get the ISO Country Code and - * uloc_getLanguage to get the ISO Language Code. You can - * use uloc_getDisplayCountry to get the - * name of the country suitable for displaying to the user. Similarly, - * you can use uloc_getDisplayLanguage to get the name of - * the language suitable for displaying to the user. Interestingly, - * the uloc_getDisplayXXX methods are themselves locale-sensitive - * and have two versions: one that uses the default locale and one - * that takes a locale as an argument and displays the name or country in - * a language appropriate to that locale. - * - *

- * The ICU provides a number of services that perform locale-sensitive - * operations. For example, the unum_xxx functions format - * numbers, currency, or percentages in a locale-sensitive manner. - *

- * \htmlonly
\endhtmlonly - *
- * \code
- *     UErrorCode success = U_ZERO_ERROR;
- *     UNumberFormat *nf;
- *     const char* myLocale = "fr_FR";
- * 
- *     nf = unum_open( UNUM_DEFAULT, NULL, success );          
- *     unum_close(nf);
- *     nf = unum_open( UNUM_CURRENCY, NULL, success );
- *     unum_close(nf);
- *     nf = unum_open( UNUM_PERCENT, NULL, success );   
- *     unum_close(nf);
- * \endcode
- * 
- * \htmlonly
\endhtmlonly - * Each of these methods has two variants; one with an explicit locale - * and one without; the latter using the default locale. - * \htmlonly
\endhtmlonly - *
- * \code 
- * 
- *     nf = unum_open( UNUM_DEFAULT, myLocale, success );          
- *     unum_close(nf);
- *     nf = unum_open( UNUM_CURRENCY, myLocale, success );
- *     unum_close(nf);
- *     nf = unum_open( UNUM_PERCENT, myLocale, success );   
- *     unum_close(nf);
- * \endcode
- * 
- * \htmlonly
\endhtmlonly - * A Locale is the mechanism for identifying the kind of services - * (UNumberFormat) that you would like to get. The locale is - * just a mechanism for identifying these services. - * - *

- * Each international service that performs locale-sensitive operations - * allows you - * to get all the available objects of that type. You can sift - * through these objects by language, country, or variant, - * and use the display names to present a menu to the user. - * For example, you can create a menu of all the collation objects - * suitable for a given language. Such classes implement these - * three class methods: - * \htmlonly

\endhtmlonly - *
- * \code
- *       const char* uloc_getAvailable(int32_t index);
- *       int32_t uloc_countAvailable();
- *       int32_t
- *       uloc_getDisplayName(const char* localeID,
- *                 const char* inLocaleID, 
- *                 UChar* result,
- *                 int32_t maxResultSize,
- *                  UErrorCode* err);
- * 
- * \endcode
- * 
- * \htmlonly
\endhtmlonly - *

- * Concerning POSIX/RFC1766 Locale IDs, - * the getLanguage/getCountry/getVariant/getName functions do understand - * the POSIX type form of language_COUNTRY.ENCODING\@VARIANT - * and if there is not an ICU-stype variant, uloc_getVariant() for example - * will return the one listed after the \@at sign. As well, the hyphen - * "-" is recognized as a country/variant separator similarly to RFC1766. - * So for example, "en-us" will be interpreted as en_US. - * As a result, uloc_getName() is far from a no-op, and will have the - * effect of converting POSIX/RFC1766 IDs into ICU form, although it does - * NOT map any of the actual codes (i.e. russian->ru) in any way. - * Applications should call uloc_getName() at the point where a locale ID - * is coming from an external source (user entry, OS, web browser) - * and pass the resulting string to other ICU functions. For example, - * don't use de-de\@EURO as an argument to resourcebundle. - * - * @see UResourceBundle - */ - -/** Useful constant for this language. @stable ICU 2.0 */ -#define ULOC_CHINESE "zh" -/** Useful constant for this language. @stable ICU 2.0 */ -#define ULOC_ENGLISH "en" -/** Useful constant for this language. @stable ICU 2.0 */ -#define ULOC_FRENCH "fr" -/** Useful constant for this language. @stable ICU 2.0 */ -#define ULOC_GERMAN "de" -/** Useful constant for this language. @stable ICU 2.0 */ -#define ULOC_ITALIAN "it" -/** Useful constant for this language. @stable ICU 2.0 */ -#define ULOC_JAPANESE "ja" -/** Useful constant for this language. @stable ICU 2.0 */ -#define ULOC_KOREAN "ko" -/** Useful constant for this language. @stable ICU 2.0 */ -#define ULOC_SIMPLIFIED_CHINESE "zh_CN" -/** Useful constant for this language. @stable ICU 2.0 */ -#define ULOC_TRADITIONAL_CHINESE "zh_TW" - -/** Useful constant for this country/region. @stable ICU 2.0 */ -#define ULOC_CANADA "en_CA" -/** Useful constant for this country/region. @stable ICU 2.0 */ -#define ULOC_CANADA_FRENCH "fr_CA" -/** Useful constant for this country/region. @stable ICU 2.0 */ -#define ULOC_CHINA "zh_CN" -/** Useful constant for this country/region. @stable ICU 2.0 */ -#define ULOC_PRC "zh_CN" -/** Useful constant for this country/region. @stable ICU 2.0 */ -#define ULOC_FRANCE "fr_FR" -/** Useful constant for this country/region. @stable ICU 2.0 */ -#define ULOC_GERMANY "de_DE" -/** Useful constant for this country/region. @stable ICU 2.0 */ -#define ULOC_ITALY "it_IT" -/** Useful constant for this country/region. @stable ICU 2.0 */ -#define ULOC_JAPAN "ja_JP" -/** Useful constant for this country/region. @stable ICU 2.0 */ -#define ULOC_KOREA "ko_KR" -/** Useful constant for this country/region. @stable ICU 2.0 */ -#define ULOC_TAIWAN "zh_TW" -/** Useful constant for this country/region. @stable ICU 2.0 */ -#define ULOC_UK "en_GB" -/** Useful constant for this country/region. @stable ICU 2.0 */ -#define ULOC_US "en_US" - -/** - * Useful constant for the maximum size of the language part of a locale ID. - * (including the terminating NULL). - * @stable ICU 2.0 - */ -#define ULOC_LANG_CAPACITY 12 - -/** - * Useful constant for the maximum size of the country part of a locale ID - * (including the terminating NULL). - * @stable ICU 2.0 - */ -#define ULOC_COUNTRY_CAPACITY 4 -/** - * Useful constant for the maximum size of the whole locale ID - * (including the terminating NULL and all keywords). - * @stable ICU 2.0 - */ -#define ULOC_FULLNAME_CAPACITY 157 - -/** - * Useful constant for the maximum size of the script part of a locale ID - * (including the terminating NULL). - * @stable ICU 2.8 - */ -#define ULOC_SCRIPT_CAPACITY 6 - -/** - * Useful constant for the maximum size of keywords in a locale - * @stable ICU 2.8 - */ -#define ULOC_KEYWORDS_CAPACITY 96 - -/** - * Useful constant for the maximum total size of keywords and their values in a locale - * @stable ICU 2.8 - */ -#define ULOC_KEYWORD_AND_VALUES_CAPACITY 100 - -/** - * Invariant character separating keywords from the locale string - * @stable ICU 2.8 - */ -#define ULOC_KEYWORD_SEPARATOR '@' - -/** - * Unicode code point for '@' separating keywords from the locale string. - * @see ULOC_KEYWORD_SEPARATOR - * @stable ICU 4.6 - */ -#define ULOC_KEYWORD_SEPARATOR_UNICODE 0x40 - -/** - * Invariant character for assigning value to a keyword - * @stable ICU 2.8 - */ -#define ULOC_KEYWORD_ASSIGN '=' - -/** - * Unicode code point for '=' for assigning value to a keyword. - * @see ULOC_KEYWORD_ASSIGN - * @stable ICU 4.6 - */ -#define ULOC_KEYWORD_ASSIGN_UNICODE 0x3D - -/** - * Invariant character separating keywords - * @stable ICU 2.8 - */ -#define ULOC_KEYWORD_ITEM_SEPARATOR ';' - -/** - * Unicode code point for ';' separating keywords - * @see ULOC_KEYWORD_ITEM_SEPARATOR - * @stable ICU 4.6 - */ -#define ULOC_KEYWORD_ITEM_SEPARATOR_UNICODE 0x3B - -/** - * Constants for *_getLocale() - * Allow user to select whether she wants information on - * requested, valid or actual locale. - * For example, a collator for "en_US_CALIFORNIA" was - * requested. In the current state of ICU (2.0), - * the requested locale is "en_US_CALIFORNIA", - * the valid locale is "en_US" (most specific locale supported by ICU) - * and the actual locale is "root" (the collation data comes unmodified - * from the UCA) - * The locale is considered supported by ICU if there is a core ICU bundle - * for that locale (although it may be empty). - * @stable ICU 2.1 - */ -typedef enum { - /** This is locale the data actually comes from - * @stable ICU 2.1 - */ - ULOC_ACTUAL_LOCALE = 0, - /** This is the most specific locale supported by ICU - * @stable ICU 2.1 - */ - ULOC_VALID_LOCALE = 1, - -#ifndef U_HIDE_DEPRECATED_API - /** This is the requested locale - * @deprecated ICU 2.8 - */ - ULOC_REQUESTED_LOCALE = 2, - - /** - * One more than the highest normal ULocDataLocaleType value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - ULOC_DATA_LOCALE_TYPE_LIMIT = 3 -#endif // U_HIDE_DEPRECATED_API -} ULocDataLocaleType; - -#ifndef U_HIDE_SYSTEM_API -/** - * Gets ICU's default locale. - * The returned string is a snapshot in time, and will remain valid - * and unchanged even when uloc_setDefault() is called. - * The returned storage is owned by ICU, and must not be altered or deleted - * by the caller. - * - * @return the ICU default locale - * @system - * @stable ICU 2.0 - */ -U_STABLE const char* U_EXPORT2 -uloc_getDefault(void); - -/** - * Sets ICU's default locale. - * By default (without calling this function), ICU's default locale will be based - * on information obtained from the underlying system environment. - *

- * Changes to ICU's default locale do not propagate back to the - * system environment. - *

- * Changes to ICU's default locale to not affect any ICU services that - * may already be open based on the previous default locale value. - * - * @param localeID the new ICU default locale. A value of NULL will try to get - * the system's default locale. - * @param status the error information if the setting of default locale fails - * @system - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -uloc_setDefault(const char* localeID, - UErrorCode* status); -#endif /* U_HIDE_SYSTEM_API */ - -/** - * Gets the language code for the specified locale. - * - * @param localeID the locale to get the ISO language code with - * @param language the language code for localeID - * @param languageCapacity the size of the language buffer to store the - * language code with - * @param err error information if retrieving the language code failed - * @return the actual buffer size needed for the language code. If it's greater - * than languageCapacity, the returned language code will be truncated. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getLanguage(const char* localeID, - char* language, - int32_t languageCapacity, - UErrorCode* err); - -/** - * Gets the script code for the specified locale. - * - * @param localeID the locale to get the ISO language code with - * @param script the language code for localeID - * @param scriptCapacity the size of the language buffer to store the - * language code with - * @param err error information if retrieving the language code failed - * @return the actual buffer size needed for the language code. If it's greater - * than scriptCapacity, the returned language code will be truncated. - * @stable ICU 2.8 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getScript(const char* localeID, - char* script, - int32_t scriptCapacity, - UErrorCode* err); - -/** - * Gets the country code for the specified locale. - * - * @param localeID the locale to get the country code with - * @param country the country code for localeID - * @param countryCapacity the size of the country buffer to store the - * country code with - * @param err error information if retrieving the country code failed - * @return the actual buffer size needed for the country code. If it's greater - * than countryCapacity, the returned country code will be truncated. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getCountry(const char* localeID, - char* country, - int32_t countryCapacity, - UErrorCode* err); - -/** - * Gets the variant code for the specified locale. - * - * @param localeID the locale to get the variant code with - * @param variant the variant code for localeID - * @param variantCapacity the size of the variant buffer to store the - * variant code with - * @param err error information if retrieving the variant code failed - * @return the actual buffer size needed for the variant code. If it's greater - * than variantCapacity, the returned variant code will be truncated. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getVariant(const char* localeID, - char* variant, - int32_t variantCapacity, - UErrorCode* err); - - -/** - * Gets the full name for the specified locale. - * Note: This has the effect of 'canonicalizing' the ICU locale ID to - * a certain extent. Upper and lower case are set as needed. - * It does NOT map aliased names in any way. - * See the top of this header file. - * This API supports preflighting. - * - * @param localeID the locale to get the full name with - * @param name fill in buffer for the name without keywords. - * @param nameCapacity capacity of the fill in buffer. - * @param err error information if retrieving the full name failed - * @return the actual buffer size needed for the full name. If it's greater - * than nameCapacity, the returned full name will be truncated. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getName(const char* localeID, - char* name, - int32_t nameCapacity, - UErrorCode* err); - -/** - * Gets the full name for the specified locale. - * Note: This has the effect of 'canonicalizing' the string to - * a certain extent. Upper and lower case are set as needed, - * and if the components were in 'POSIX' format they are changed to - * ICU format. It does NOT map aliased names in any way. - * See the top of this header file. - * - * @param localeID the locale to get the full name with - * @param name the full name for localeID - * @param nameCapacity the size of the name buffer to store the - * full name with - * @param err error information if retrieving the full name failed - * @return the actual buffer size needed for the full name. If it's greater - * than nameCapacity, the returned full name will be truncated. - * @stable ICU 2.8 - */ -U_STABLE int32_t U_EXPORT2 -uloc_canonicalize(const char* localeID, - char* name, - int32_t nameCapacity, - UErrorCode* err); - -/** - * Gets the ISO language code for the specified locale. - * - * @param localeID the locale to get the ISO language code with - * @return language the ISO language code for localeID - * @stable ICU 2.0 - */ -U_STABLE const char* U_EXPORT2 -uloc_getISO3Language(const char* localeID); - - -/** - * Gets the ISO country code for the specified locale. - * - * @param localeID the locale to get the ISO country code with - * @return country the ISO country code for localeID - * @stable ICU 2.0 - */ -U_STABLE const char* U_EXPORT2 -uloc_getISO3Country(const char* localeID); - -/** - * Gets the Win32 LCID value for the specified locale. - * If the ICU locale is not recognized by Windows, 0 will be returned. - * - * LCIDs were deprecated with Windows Vista and Microsoft recommends - * that developers use BCP47 style tags instead (uloc_toLanguageTag). - * - * @param localeID the locale to get the Win32 LCID value with - * @return country the Win32 LCID for localeID - * @stable ICU 2.0 - */ -U_STABLE uint32_t U_EXPORT2 -uloc_getLCID(const char* localeID); - -/** - * Gets the language name suitable for display for the specified locale. - * - * @param locale the locale to get the ISO language code with - * @param displayLocale Specifies the locale to be used to display the name. In other words, - * if the locale's language code is "en", passing Locale::getFrench() for - * inLocale would result in "Anglais", while passing Locale::getGerman() - * for inLocale would result in "Englisch". - * @param language the displayable language code for localeID - * @param languageCapacity the size of the language buffer to store the - * displayable language code with - * @param status error information if retrieving the displayable language code failed - * @return the actual buffer size needed for the displayable language code. If it's greater - * than languageCapacity, the returned language code will be truncated. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getDisplayLanguage(const char* locale, - const char* displayLocale, - UChar* language, - int32_t languageCapacity, - UErrorCode* status); - -/** - * Gets the script name suitable for display for the specified locale. - * - * @param locale the locale to get the displayable script code with. NULL may be used to specify the default. - * @param displayLocale Specifies the locale to be used to display the name. In other words, - * if the locale's language code is "en", passing Locale::getFrench() for - * inLocale would result in "", while passing Locale::getGerman() - * for inLocale would result in "". NULL may be used to specify the default. - * @param script the displayable script for the localeID - * @param scriptCapacity the size of the script buffer to store the - * displayable script code with - * @param status error information if retrieving the displayable script code failed - * @return the actual buffer size needed for the displayable script code. If it's greater - * than scriptCapacity, the returned displayable script code will be truncated. - * @stable ICU 2.8 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getDisplayScript(const char* locale, - const char* displayLocale, - UChar* script, - int32_t scriptCapacity, - UErrorCode* status); - -/** - * Gets the country name suitable for display for the specified locale. - * Warning: this is for the region part of a valid locale ID; it cannot just be the region code (like "FR"). - * To get the display name for a region alone, or for other options, use ULocaleDisplayNames instead. - * - * @param locale the locale to get the displayable country code with. NULL may be used to specify the default. - * @param displayLocale Specifies the locale to be used to display the name. In other words, - * if the locale's language code is "en", passing Locale::getFrench() for - * inLocale would result in "Anglais", while passing Locale::getGerman() - * for inLocale would result in "Englisch". NULL may be used to specify the default. - * @param country the displayable country code for localeID - * @param countryCapacity the size of the country buffer to store the - * displayable country code with - * @param status error information if retrieving the displayable country code failed - * @return the actual buffer size needed for the displayable country code. If it's greater - * than countryCapacity, the returned displayable country code will be truncated. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getDisplayCountry(const char* locale, - const char* displayLocale, - UChar* country, - int32_t countryCapacity, - UErrorCode* status); - - -/** - * Gets the variant name suitable for display for the specified locale. - * - * @param locale the locale to get the displayable variant code with. NULL may be used to specify the default. - * @param displayLocale Specifies the locale to be used to display the name. In other words, - * if the locale's language code is "en", passing Locale::getFrench() for - * inLocale would result in "Anglais", while passing Locale::getGerman() - * for inLocale would result in "Englisch". NULL may be used to specify the default. - * @param variant the displayable variant code for localeID - * @param variantCapacity the size of the variant buffer to store the - * displayable variant code with - * @param status error information if retrieving the displayable variant code failed - * @return the actual buffer size needed for the displayable variant code. If it's greater - * than variantCapacity, the returned displayable variant code will be truncated. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getDisplayVariant(const char* locale, - const char* displayLocale, - UChar* variant, - int32_t variantCapacity, - UErrorCode* status); - -/** - * Gets the keyword name suitable for display for the specified locale. - * E.g: for the locale string de_DE\@collation=PHONEBOOK, this API gets the display - * string for the keyword collation. - * Usage: - * - * UErrorCode status = U_ZERO_ERROR; - * const char* keyword =NULL; - * int32_t keywordLen = 0; - * int32_t keywordCount = 0; - * UChar displayKeyword[256]; - * int32_t displayKeywordLen = 0; - * UEnumeration* keywordEnum = uloc_openKeywords("de_DE@collation=PHONEBOOK;calendar=TRADITIONAL", &status); - * for(keywordCount = uenum_count(keywordEnum, &status); keywordCount > 0 ; keywordCount--){ - * if(U_FAILURE(status)){ - * ...something went wrong so handle the error... - * break; - * } - * // the uenum_next returns NUL terminated string - * keyword = uenum_next(keywordEnum, &keywordLen, &status); - * displayKeywordLen = uloc_getDisplayKeyword(keyword, "en_US", displayKeyword, 256); - * ... do something interesting ..... - * } - * uenum_close(keywordEnum); - * - * @param keyword The keyword whose display string needs to be returned. - * @param displayLocale Specifies the locale to be used to display the name. In other words, - * if the locale's language code is "en", passing Locale::getFrench() for - * inLocale would result in "Anglais", while passing Locale::getGerman() - * for inLocale would result in "Englisch". NULL may be used to specify the default. - * @param dest the buffer to which the displayable keyword should be written. - * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the - * result without writing any of the result string (pre-flighting). - * @param status error information if retrieving the displayable string failed. - * Should not be NULL and should not indicate failure on entry. - * @return the actual buffer size needed for the displayable variant code. - * @see #uloc_openKeywords - * @stable ICU 2.8 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getDisplayKeyword(const char* keyword, - const char* displayLocale, - UChar* dest, - int32_t destCapacity, - UErrorCode* status); -/** - * Gets the value of the keyword suitable for display for the specified locale. - * E.g: for the locale string de_DE\@collation=PHONEBOOK, this API gets the display - * string for PHONEBOOK, in the display locale, when "collation" is specified as the keyword. - * - * @param locale The locale to get the displayable variant code with. NULL may be used to specify the default. - * @param keyword The keyword for whose value should be used. - * @param displayLocale Specifies the locale to be used to display the name. In other words, - * if the locale's language code is "en", passing Locale::getFrench() for - * inLocale would result in "Anglais", while passing Locale::getGerman() - * for inLocale would result in "Englisch". NULL may be used to specify the default. - * @param dest the buffer to which the displayable keyword should be written. - * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the - * result without writing any of the result string (pre-flighting). - * @param status error information if retrieving the displayable string failed. - * Should not be NULL and must not indicate failure on entry. - * @return the actual buffer size needed for the displayable variant code. - * @stable ICU 2.8 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getDisplayKeywordValue( const char* locale, - const char* keyword, - const char* displayLocale, - UChar* dest, - int32_t destCapacity, - UErrorCode* status); -/** - * Gets the full name suitable for display for the specified locale. - * - * @param localeID the locale to get the displayable name with. NULL may be used to specify the default. - * @param inLocaleID Specifies the locale to be used to display the name. In other words, - * if the locale's language code is "en", passing Locale::getFrench() for - * inLocale would result in "Anglais", while passing Locale::getGerman() - * for inLocale would result in "Englisch". NULL may be used to specify the default. - * @param result the displayable name for localeID - * @param maxResultSize the size of the name buffer to store the - * displayable full name with - * @param err error information if retrieving the displayable name failed - * @return the actual buffer size needed for the displayable name. If it's greater - * than maxResultSize, the returned displayable name will be truncated. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getDisplayName(const char* localeID, - const char* inLocaleID, - UChar* result, - int32_t maxResultSize, - UErrorCode* err); - - -/** - * Gets the specified locale from a list of all available locales. - * The return value is a pointer to an item of - * a locale name array. Both this array and the pointers - * it contains are owned by ICU and should not be deleted or written through - * by the caller. The locale name is terminated by a null pointer. - * @param n the specific locale name index of the available locale list - * @return a specified locale name of all available locales - * @stable ICU 2.0 - */ -U_STABLE const char* U_EXPORT2 -uloc_getAvailable(int32_t n); - -/** - * Gets the size of the all available locale list. - * - * @return the size of the locale list - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 uloc_countAvailable(void); - -/** - * - * Gets a list of all available 2-letter language codes defined in ISO 639, - * plus additional 3-letter codes determined to be useful for locale generation as - * defined by Unicode CLDR. This is a pointer - * to an array of pointers to arrays of char. All of these pointers are owned - * by ICU-- do not delete them, and do not write through them. The array is - * terminated with a null pointer. - * @return a list of all available language codes - * @stable ICU 2.0 - */ -U_STABLE const char* const* U_EXPORT2 -uloc_getISOLanguages(void); - -/** - * - * Gets a list of all available 2-letter country codes which are valid regular - * region codes in CLDR; these are based on the non-deprecated alpha-2 region - * codes in ISO 3166-1. The return value is a pointer to an array of pointers - * C strings. All of these pointers are owned by ICU; do not delete them, and - * do not write through them. The array is terminated with a null pointer. - * @return a list of all available country codes - * @stable ICU 2.0 - */ -U_STABLE const char* const* U_EXPORT2 -uloc_getISOCountries(void); - -/** - * Truncate the locale ID string to get the parent locale ID. - * Copies the part of the string before the last underscore. - * The parent locale ID will be an empty string if there is no - * underscore, or if there is only one underscore at localeID[0]. - * - * @param localeID Input locale ID string. - * @param parent Output string buffer for the parent locale ID. - * @param parentCapacity Size of the output buffer. - * @param err A UErrorCode value. - * @return The length of the parent locale ID. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getParent(const char* localeID, - char* parent, - int32_t parentCapacity, - UErrorCode* err); - - - - -/** - * Gets the full name for the specified locale, like uloc_getName(), - * but without keywords. - * - * Note: This has the effect of 'canonicalizing' the string to - * a certain extent. Upper and lower case are set as needed, - * and if the components were in 'POSIX' format they are changed to - * ICU format. It does NOT map aliased names in any way. - * See the top of this header file. - * - * This API strips off the keyword part, so "de_DE\@collation=phonebook" - * will become "de_DE". - * This API supports preflighting. - * - * @param localeID the locale to get the full name with - * @param name fill in buffer for the name without keywords. - * @param nameCapacity capacity of the fill in buffer. - * @param err error information if retrieving the full name failed - * @return the actual buffer size needed for the full name. If it's greater - * than nameCapacity, the returned full name will be truncated. - * @stable ICU 2.8 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getBaseName(const char* localeID, - char* name, - int32_t nameCapacity, - UErrorCode* err); - -/** - * Gets an enumeration of keywords for the specified locale. Enumeration - * must get disposed of by the client using uenum_close function. - * - * @param localeID the locale to get the variant code with - * @param status error information if retrieving the keywords failed - * @return enumeration of keywords or NULL if there are no keywords. - * @stable ICU 2.8 - */ -U_STABLE UEnumeration* U_EXPORT2 -uloc_openKeywords(const char* localeID, - UErrorCode* status); - -/** - * Get the value for a keyword. Locale name does not need to be normalized. - * - * @param localeID locale name containing the keyword ("de_DE@currency=EURO;collation=PHONEBOOK") - * @param keywordName name of the keyword for which we want the value; must not be - * NULL or empty, and must consist only of [A-Za-z0-9]. Case insensitive. - * @param buffer receiving buffer - * @param bufferCapacity capacity of receiving buffer - * @param status containing error code: e.g. buffer not big enough or ill-formed localeID - * or keywordName parameters. - * @return the length of keyword value - * @stable ICU 2.8 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getKeywordValue(const char* localeID, - const char* keywordName, - char* buffer, int32_t bufferCapacity, - UErrorCode* status); - - -/** - * Sets or removes the value of the specified keyword. - * - * For removing all keywords, use uloc_getBaseName(). - * - * NOTE: Unlike almost every other ICU function which takes a - * buffer, this function will NOT truncate the output text, and will - * not update the buffer with unterminated text setting a status of - * U_STRING_NOT_TERMINATED_WARNING. If a BUFFER_OVERFLOW_ERROR is received, - * it means a terminated version of the updated locale ID would not fit - * in the buffer, and the original buffer is untouched. This is done to - * prevent incorrect or possibly even malformed locales from being generated - * and used. - * - * @param keywordName name of the keyword to be set; must not be - * NULL or empty, and must consist only of [A-Za-z0-9]. Case insensitive. - * @param keywordValue value of the keyword to be set. If 0-length or - * NULL, will result in the keyword being removed; no error is given if - * that keyword does not exist. Otherwise, must consist only of - * [A-Za-z0-9] and [/_+-]. - * @param buffer input buffer containing well-formed locale ID to be - * modified. - * @param bufferCapacity capacity of receiving buffer - * @param status containing error code: e.g. buffer not big enough - * or ill-formed keywordName or keywordValue parameters, or ill-formed - * locale ID in buffer on input. - * @return the length needed for the buffer - * @see uloc_getKeywordValue - * @stable ICU 3.2 - */ -U_STABLE int32_t U_EXPORT2 -uloc_setKeywordValue(const char* keywordName, - const char* keywordValue, - char* buffer, int32_t bufferCapacity, - UErrorCode* status); - -/** - * Returns whether the locale's script is written right-to-left. - * If there is no script subtag, then the likely script is used, see uloc_addLikelySubtags(). - * If no likely script is known, then FALSE is returned. - * - * A script is right-to-left according to the CLDR script metadata - * which corresponds to whether the script's letters have Bidi_Class=R or AL. - * - * Returns TRUE for "ar" and "en-Hebr", FALSE for "zh" and "fa-Cyrl". - * - * @param locale input locale ID - * @return TRUE if the locale's script is written right-to-left - * @stable ICU 54 - */ -U_STABLE UBool U_EXPORT2 -uloc_isRightToLeft(const char *locale); - -/** - * enums for the return value for the character and line orientation - * functions. - * @stable ICU 4.0 - */ -typedef enum { - ULOC_LAYOUT_LTR = 0, /* left-to-right. */ - ULOC_LAYOUT_RTL = 1, /* right-to-left. */ - ULOC_LAYOUT_TTB = 2, /* top-to-bottom. */ - ULOC_LAYOUT_BTT = 3, /* bottom-to-top. */ - ULOC_LAYOUT_UNKNOWN -} ULayoutType; - -/** - * Get the layout character orientation for the specified locale. - * - * @param localeId locale name - * @param status Error status - * @return an enum indicating the layout orientation for characters. - * @stable ICU 4.0 - */ -U_STABLE ULayoutType U_EXPORT2 -uloc_getCharacterOrientation(const char* localeId, - UErrorCode *status); - -/** - * Get the layout line orientation for the specified locale. - * - * @param localeId locale name - * @param status Error status - * @return an enum indicating the layout orientation for lines. - * @stable ICU 4.0 - */ -U_STABLE ULayoutType U_EXPORT2 -uloc_getLineOrientation(const char* localeId, - UErrorCode *status); - -/** - * enums for the 'outResult' parameter return value - * @see uloc_acceptLanguageFromHTTP - * @see uloc_acceptLanguage - * @stable ICU 3.2 - */ -typedef enum { - ULOC_ACCEPT_FAILED = 0, /* No exact match was found. */ - ULOC_ACCEPT_VALID = 1, /* An exact match was found. */ - ULOC_ACCEPT_FALLBACK = 2 /* A fallback was found, for example, - Accept list contained 'ja_JP' - which matched available locale 'ja'. */ -} UAcceptResult; - - -/** - * Based on a HTTP header from a web browser and a list of available locales, - * determine an acceptable locale for the user. - * @param result - buffer to accept the result locale - * @param resultAvailable the size of the result buffer. - * @param outResult - An out parameter that contains the fallback status - * @param httpAcceptLanguage - "Accept-Language:" header as per HTTP. - * @param availableLocales - list of available locales to match - * @param status Error status, may be BUFFER_OVERFLOW_ERROR - * @return length needed for the locale. - * @stable ICU 3.2 - */ -U_STABLE int32_t U_EXPORT2 -uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, - UAcceptResult *outResult, - const char *httpAcceptLanguage, - UEnumeration* availableLocales, - UErrorCode *status); - -/** - * Based on a list of available locales, - * determine an acceptable locale for the user. - * @param result - buffer to accept the result locale - * @param resultAvailable the size of the result buffer. - * @param outResult - An out parameter that contains the fallback status - * @param acceptList - list of acceptable languages - * @param acceptListCount - count of acceptList items - * @param availableLocales - list of available locales to match - * @param status Error status, may be BUFFER_OVERFLOW_ERROR - * @return length needed for the locale. - * @stable ICU 3.2 - */ -U_STABLE int32_t U_EXPORT2 -uloc_acceptLanguage(char *result, int32_t resultAvailable, - UAcceptResult *outResult, const char **acceptList, - int32_t acceptListCount, - UEnumeration* availableLocales, - UErrorCode *status); - - -/** - * Gets the ICU locale ID for the specified Win32 LCID value. - * - * @param hostID the Win32 LCID to translate - * @param locale the output buffer for the ICU locale ID, which will be NUL-terminated - * if there is room. - * @param localeCapacity the size of the output buffer - * @param status an error is returned if the LCID is unrecognized or the output buffer - * is too small - * @return actual the actual size of the locale ID, not including NUL-termination - * @stable ICU 3.8 - */ -U_STABLE int32_t U_EXPORT2 -uloc_getLocaleForLCID(uint32_t hostID, char *locale, int32_t localeCapacity, - UErrorCode *status); - - -/** - * Add the likely subtags for a provided locale ID, per the algorithm described - * in the following CLDR technical report: - * - * http://www.unicode.org/reports/tr35/#Likely_Subtags - * - * If localeID is already in the maximal form, or there is no data available - * for maximization, it will be copied to the output buffer. For example, - * "und-Zzzz" cannot be maximized, since there is no reasonable maximization. - * - * Examples: - * - * "en" maximizes to "en_Latn_US" - * - * "de" maximizes to "de_Latn_US" - * - * "sr" maximizes to "sr_Cyrl_RS" - * - * "sh" maximizes to "sr_Latn_RS" (Note this will not reverse.) - * - * "zh_Hani" maximizes to "zh_Hans_CN" (Note this will not reverse.) - * - * @param localeID The locale to maximize - * @param maximizedLocaleID The maximized locale - * @param maximizedLocaleIDCapacity The capacity of the maximizedLocaleID buffer - * @param err Error information if maximizing the locale failed. If the length - * of the localeID and the null-terminator is greater than the maximum allowed size, - * or the localeId is not well-formed, the error code is U_ILLEGAL_ARGUMENT_ERROR. - * @return The actual buffer size needed for the maximized locale. If it's - * greater than maximizedLocaleIDCapacity, the returned ID will be truncated. - * On error, the return value is -1. - * @stable ICU 4.0 - */ -U_STABLE int32_t U_EXPORT2 -uloc_addLikelySubtags(const char* localeID, - char* maximizedLocaleID, - int32_t maximizedLocaleIDCapacity, - UErrorCode* err); - - -/** - * Minimize the subtags for a provided locale ID, per the algorithm described - * in the following CLDR technical report: - * - * http://www.unicode.org/reports/tr35/#Likely_Subtags - * - * If localeID is already in the minimal form, or there is no data available - * for minimization, it will be copied to the output buffer. Since the - * minimization algorithm relies on proper maximization, see the comments - * for uloc_addLikelySubtags for reasons why there might not be any data. - * - * Examples: - * - * "en_Latn_US" minimizes to "en" - * - * "de_Latn_US" minimizes to "de" - * - * "sr_Cyrl_RS" minimizes to "sr" - * - * "zh_Hant_TW" minimizes to "zh_TW" (The region is preferred to the - * script, and minimizing to "zh" would imply "zh_Hans_CN".) - * - * @param localeID The locale to minimize - * @param minimizedLocaleID The minimized locale - * @param minimizedLocaleIDCapacity The capacity of the minimizedLocaleID buffer - * @param err Error information if minimizing the locale failed. If the length - * of the localeID and the null-terminator is greater than the maximum allowed size, - * or the localeId is not well-formed, the error code is U_ILLEGAL_ARGUMENT_ERROR. - * @return The actual buffer size needed for the minimized locale. If it's - * greater than minimizedLocaleIDCapacity, the returned ID will be truncated. - * On error, the return value is -1. - * @stable ICU 4.0 - */ -U_STABLE int32_t U_EXPORT2 -uloc_minimizeSubtags(const char* localeID, - char* minimizedLocaleID, - int32_t minimizedLocaleIDCapacity, - UErrorCode* err); - -/** - * Returns a locale ID for the specified BCP47 language tag string. - * If the specified language tag contains any ill-formed subtags, - * the first such subtag and all following subtags are ignored. - *

- * This implements the 'Language-Tag' production of BCP47, and so - * supports grandfathered (regular and irregular) as well as private - * use language tags. Private use tags are represented as 'x-whatever', - * and grandfathered tags are converted to their canonical replacements - * where they exist. Note that a few grandfathered tags have no modern - * replacement, these will be converted using the fallback described in - * the first paragraph, so some information might be lost. - * @param langtag the input BCP47 language tag. - * @param localeID the output buffer receiving a locale ID for the - * specified BCP47 language tag. - * @param localeIDCapacity the size of the locale ID output buffer. - * @param parsedLength if not NULL, successfully parsed length - * for the input language tag is set. - * @param err error information if receiving the locald ID - * failed. - * @return the length of the locale ID. - * @stable ICU 4.2 - */ -U_STABLE int32_t U_EXPORT2 -uloc_forLanguageTag(const char* langtag, - char* localeID, - int32_t localeIDCapacity, - int32_t* parsedLength, - UErrorCode* err); - -/** - * Returns a well-formed language tag for this locale ID. - *

- * Note: When strict is FALSE, any locale - * fields which do not satisfy the BCP47 syntax requirement will - * be omitted from the result. When strict is - * TRUE, this function sets U_ILLEGAL_ARGUMENT_ERROR to the - * err if any locale fields do not satisfy the - * BCP47 syntax requirement. - * @param localeID the input locale ID - * @param langtag the output buffer receiving BCP47 language - * tag for the locale ID. - * @param langtagCapacity the size of the BCP47 language tag - * output buffer. - * @param strict boolean value indicating if the function returns - * an error for an ill-formed input locale ID. - * @param err error information if receiving the language - * tag failed. - * @return The length of the BCP47 language tag. - * @stable ICU 4.2 - */ -U_STABLE int32_t U_EXPORT2 -uloc_toLanguageTag(const char* localeID, - char* langtag, - int32_t langtagCapacity, - UBool strict, - UErrorCode* err); - -/** - * Converts the specified keyword (legacy key, or BCP 47 Unicode locale - * extension key) to the equivalent BCP 47 Unicode locale extension key. - * For example, BCP 47 Unicode locale extension key "co" is returned for - * the input keyword "collation". - *

- * When the specified keyword is unknown, but satisfies the BCP syntax, - * then the pointer to the input keyword itself will be returned. - * For example, - * uloc_toUnicodeLocaleKey("ZZ") returns "ZZ". - * - * @param keyword the input locale keyword (either legacy key - * such as "collation" or BCP 47 Unicode locale extension - * key such as "co"). - * @return the well-formed BCP 47 Unicode locale extension key, - * or NULL if the specified locale keyword cannot be - * mapped to a well-formed BCP 47 Unicode locale extension - * key. - * @see uloc_toLegacyKey - * @stable ICU 54 - */ -U_STABLE const char* U_EXPORT2 -uloc_toUnicodeLocaleKey(const char* keyword); - -/** - * Converts the specified keyword value (legacy type, or BCP 47 - * Unicode locale extension type) to the well-formed BCP 47 Unicode locale - * extension type for the specified keyword (category). For example, BCP 47 - * Unicode locale extension type "phonebk" is returned for the input - * keyword value "phonebook", with the keyword "collation" (or "co"). - *

- * When the specified keyword is not recognized, but the specified value - * satisfies the syntax of the BCP 47 Unicode locale extension type, - * or when the specified keyword allows 'variable' type and the specified - * value satisfies the syntax, then the pointer to the input type value itself - * will be returned. - * For example, - * uloc_toUnicodeLocaleType("Foo", "Bar") returns "Bar", - * uloc_toUnicodeLocaleType("variableTop", "00A4") returns "00A4". - * - * @param keyword the locale keyword (either legacy key such as - * "collation" or BCP 47 Unicode locale extension - * key such as "co"). - * @param value the locale keyword value (either legacy type - * such as "phonebook" or BCP 47 Unicode locale extension - * type such as "phonebk"). - * @return the well-formed BCP47 Unicode locale extension type, - * or NULL if the locale keyword value cannot be mapped to - * a well-formed BCP 47 Unicode locale extension type. - * @see uloc_toLegacyType - * @stable ICU 54 - */ -U_STABLE const char* U_EXPORT2 -uloc_toUnicodeLocaleType(const char* keyword, const char* value); - -/** - * Converts the specified keyword (BCP 47 Unicode locale extension key, or - * legacy key) to the legacy key. For example, legacy key "collation" is - * returned for the input BCP 47 Unicode locale extension key "co". - * - * @param keyword the input locale keyword (either BCP 47 Unicode locale - * extension key or legacy key). - * @return the well-formed legacy key, or NULL if the specified - * keyword cannot be mapped to a well-formed legacy key. - * @see toUnicodeLocaleKey - * @stable ICU 54 - */ -U_STABLE const char* U_EXPORT2 -uloc_toLegacyKey(const char* keyword); - -/** - * Converts the specified keyword value (BCP 47 Unicode locale extension type, - * or legacy type or type alias) to the canonical legacy type. For example, - * the legacy type "phonebook" is returned for the input BCP 47 Unicode - * locale extension type "phonebk" with the keyword "collation" (or "co"). - *

- * When the specified keyword is not recognized, but the specified value - * satisfies the syntax of legacy key, or when the specified keyword - * allows 'variable' type and the specified value satisfies the syntax, - * then the pointer to the input type value itself will be returned. - * For example, - * uloc_toLegacyType("Foo", "Bar") returns "Bar", - * uloc_toLegacyType("vt", "00A4") returns "00A4". - * - * @param keyword the locale keyword (either legacy keyword such as - * "collation" or BCP 47 Unicode locale extension - * key such as "co"). - * @param value the locale keyword value (either BCP 47 Unicode locale - * extension type such as "phonebk" or legacy keyword value - * such as "phonebook"). - * @return the well-formed legacy type, or NULL if the specified - * keyword value cannot be mapped to a well-formed legacy - * type. - * @see toUnicodeLocaleType - * @stable ICU 54 - */ -U_STABLE const char* U_EXPORT2 -uloc_toLegacyType(const char* keyword, const char* value); - -#endif /*_ULOC*/ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ulocdata.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ulocdata.h deleted file mode 100644 index cbb8bfd866..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ulocdata.h +++ /dev/null @@ -1,296 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* * -* Copyright (C) 2003-2015, International Business Machines * -* Corporation and others. All Rights Reserved. * -* * -****************************************************************************** -* file name: ulocdata.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2003Oct21 -* created by: Ram Viswanadha -*/ - -#ifndef __ULOCDATA_H__ -#define __ULOCDATA_H__ - -#include "unicode/ures.h" -#include "unicode/uloc.h" -#include "unicode/uset.h" -#include "unicode/localpointer.h" - -/** - * \file - * \brief C API: Provides access to locale data. - */ - -/** Forward declaration of the ULocaleData structure. @stable ICU 3.6 */ -struct ULocaleData; - -/** A locale data object. @stable ICU 3.6 */ -typedef struct ULocaleData ULocaleData; - - - -/** The possible types of exemplar character sets. - * @stable ICU 3.4 - */ -typedef enum ULocaleDataExemplarSetType { - /** Basic set @stable ICU 3.4 */ - ULOCDATA_ES_STANDARD=0, - /** Auxiliary set @stable ICU 3.4 */ - ULOCDATA_ES_AUXILIARY=1, - /** Index Character set @stable ICU 4.8 */ - ULOCDATA_ES_INDEX=2, - /** Punctuation set @stable ICU 51 */ - ULOCDATA_ES_PUNCTUATION=3, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal ULocaleDataExemplarSetType value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - ULOCDATA_ES_COUNT=4 -#endif /* U_HIDE_DEPRECATED_API */ -} ULocaleDataExemplarSetType; - -/** The possible types of delimiters. - * @stable ICU 3.4 - */ -typedef enum ULocaleDataDelimiterType { - /** Quotation start @stable ICU 3.4 */ - ULOCDATA_QUOTATION_START = 0, - /** Quotation end @stable ICU 3.4 */ - ULOCDATA_QUOTATION_END = 1, - /** Alternate quotation start @stable ICU 3.4 */ - ULOCDATA_ALT_QUOTATION_START = 2, - /** Alternate quotation end @stable ICU 3.4 */ - ULOCDATA_ALT_QUOTATION_END = 3, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal ULocaleDataDelimiterType value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - ULOCDATA_DELIMITER_COUNT = 4 -#endif /* U_HIDE_DEPRECATED_API */ -} ULocaleDataDelimiterType; - -/** - * Opens a locale data object for the given locale - * - * @param localeID Specifies the locale associated with this locale - * data object. - * @param status Pointer to error status code. - * @stable ICU 3.4 - */ -U_STABLE ULocaleData* U_EXPORT2 -ulocdata_open(const char *localeID, UErrorCode *status); - -/** - * Closes a locale data object. - * - * @param uld The locale data object to close - * @stable ICU 3.4 - */ -U_STABLE void U_EXPORT2 -ulocdata_close(ULocaleData *uld); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalULocaleDataPointer - * "Smart pointer" class, closes a ULocaleData via ulocdata_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalULocaleDataPointer, ULocaleData, ulocdata_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Sets the "no Substitute" attribute of the locale data - * object. If true, then any methods associated with the - * locale data object will return null when there is no - * data available for that method, given the locale ID - * supplied to ulocdata_open(). - * - * @param uld The locale data object to set. - * @param setting Value of the "no substitute" attribute. - * @stable ICU 3.4 - */ -U_STABLE void U_EXPORT2 -ulocdata_setNoSubstitute(ULocaleData *uld, UBool setting); - -/** - * Retrieves the current "no Substitute" value of the locale data - * object. If true, then any methods associated with the - * locale data object will return null when there is no - * data available for that method, given the locale ID - * supplied to ulocdata_open(). - * - * @param uld Pointer to the The locale data object to set. - * @return UBool Value of the "no substitute" attribute. - * @stable ICU 3.4 - */ -U_STABLE UBool U_EXPORT2 -ulocdata_getNoSubstitute(ULocaleData *uld); - -/** - * Returns the set of exemplar characters for a locale. - * - * @param uld Pointer to the locale data object from which the - * exemplar character set is to be retrieved. - * @param fillIn Pointer to a USet object to receive the - * exemplar character set for the given locale. Previous - * contents of fillIn are lost. If fillIn is NULL, - * then a new USet is created and returned. The caller - * owns the result and must dispose of it by calling - * uset_close. - * @param options Bitmask for options to apply to the exemplar pattern. - * Specify zero to retrieve the exemplar set as it is - * defined in the locale data. Specify - * USET_CASE_INSENSITIVE to retrieve a case-folded - * exemplar set. See uset_applyPattern for a complete - * list of valid options. The USET_IGNORE_SPACE bit is - * always set, regardless of the value of 'options'. - * @param extype Specifies the type of exemplar set to be retrieved. - * @param status Pointer to an input-output error code value; - * must not be NULL. Will be set to U_MISSING_RESOURCE_ERROR - * if the requested data is not available. - * @return USet* Either fillIn, or if fillIn is NULL, a pointer to - * a newly-allocated USet that the user must close. - * In case of error, NULL is returned. - * @stable ICU 3.4 - */ -U_STABLE USet* U_EXPORT2 -ulocdata_getExemplarSet(ULocaleData *uld, USet *fillIn, - uint32_t options, ULocaleDataExemplarSetType extype, UErrorCode *status); - -/** - * Returns one of the delimiter strings associated with a locale. - * - * @param uld Pointer to the locale data object from which the - * delimiter string is to be retrieved. - * @param type the type of delimiter to be retrieved. - * @param result A pointer to a buffer to receive the result. - * @param resultLength The maximum size of result. - * @param status Pointer to an error code value - * @return int32_t The total buffer size needed; if greater than resultLength, - * the output was truncated. - * @stable ICU 3.4 - */ -U_STABLE int32_t U_EXPORT2 -ulocdata_getDelimiter(ULocaleData *uld, ULocaleDataDelimiterType type, UChar *result, int32_t resultLength, UErrorCode *status); - -/** - * Enumeration for representing the measurement systems. - * @stable ICU 2.8 - */ -typedef enum UMeasurementSystem { - UMS_SI, /**< Measurement system specified by SI otherwise known as Metric system. @stable ICU 2.8 */ - UMS_US, /**< Measurement system followed in the United States of America. @stable ICU 2.8 */ - UMS_UK, /**< Mix of metric and imperial units used in Great Britain. @stable ICU 55 */ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UMeasurementSystem value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UMS_LIMIT -#endif /* U_HIDE_DEPRECATED_API */ -} UMeasurementSystem; - -/** - * Returns the measurement system used in the locale specified by the localeID. - * Please note that this API will change in ICU 3.6 and will use an ulocdata object. - * - * @param localeID The id of the locale for which the measurement system to be retrieved. - * @param status Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return UMeasurementSystem the measurement system used in the locale. - * @stable ICU 2.8 - */ -U_STABLE UMeasurementSystem U_EXPORT2 -ulocdata_getMeasurementSystem(const char *localeID, UErrorCode *status); - -/** - * Returns the element gives the normal business letter size, and customary units. - * The units for the numbers are always in milli-meters. - * For US since 8.5 and 11 do not yeild an integral value when converted to milli-meters, - * the values are rounded off. - * So for A4 size paper the height and width are 297 mm and 210 mm repectively, - * and for US letter size the height and width are 279 mm and 216 mm respectively. - * Please note that this API will change in ICU 3.6 and will use an ulocdata object. - * - * @param localeID The id of the locale for which the paper size information to be retrieved. - * @param height A pointer to int to recieve the height information. - * @param width A pointer to int to recieve the width information. - * @param status Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @stable ICU 2.8 - */ -U_STABLE void U_EXPORT2 -ulocdata_getPaperSize(const char *localeID, int32_t *height, int32_t *width, UErrorCode *status); - -/** - * Return the current CLDR version used by the library. - * @param versionArray fillin that will recieve the version number - * @param status error code - could be U_MISSING_RESOURCE_ERROR if the version was not found. - * @stable ICU 4.2 - */ -U_STABLE void U_EXPORT2 -ulocdata_getCLDRVersion(UVersionInfo versionArray, UErrorCode *status); - -/** - * Returns locale display pattern associated with a locale. - * - * @param uld Pointer to the locale data object from which the - * exemplar character set is to be retrieved. - * @param pattern locale display pattern for locale. - * @param patternCapacity the size of the buffer to store the locale display - * pattern with. - * @param status Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return the actual buffer size needed for localeDisplayPattern. If it's greater - * than patternCapacity, the returned pattern will be truncated. - * - * @stable ICU 4.2 - */ -U_STABLE int32_t U_EXPORT2 -ulocdata_getLocaleDisplayPattern(ULocaleData *uld, - UChar *pattern, - int32_t patternCapacity, - UErrorCode *status); - - -/** - * Returns locale separator associated with a locale. - * - * @param uld Pointer to the locale data object from which the - * exemplar character set is to be retrieved. - * @param separator locale separator for locale. - * @param separatorCapacity the size of the buffer to store the locale - * separator with. - * @param status Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return the actual buffer size needed for localeSeparator. If it's greater - * than separatorCapacity, the returned separator will be truncated. - * - * @stable ICU 4.2 - */ -U_STABLE int32_t U_EXPORT2 -ulocdata_getLocaleSeparator(ULocaleData *uld, - UChar *separator, - int32_t separatorCapacity, - UErrorCode *status); -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umachine.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umachine.h deleted file mode 100644 index b38bc2bf5a..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umachine.h +++ /dev/null @@ -1,413 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1999-2015, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* file name: umachine.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 1999sep13 -* created by: Markus W. Scherer -* -* This file defines basic types and constants for ICU to be -* platform-independent. umachine.h and utf.h are included into -* utypes.h to provide all the general definitions for ICU. -* All of these definitions used to be in utypes.h before -* the UTF-handling macros made this unmaintainable. -*/ - -#ifndef __UMACHINE_H__ -#define __UMACHINE_H__ - - -/** - * \file - * \brief Basic types and constants for UTF - * - *

Basic types and constants for UTF

- * This file defines basic types and constants for utf.h to be - * platform-independent. umachine.h and utf.h are included into - * utypes.h to provide all the general definitions for ICU. - * All of these definitions used to be in utypes.h before - * the UTF-handling macros made this unmaintainable. - * - */ -/*==========================================================================*/ -/* Include platform-dependent definitions */ -/* which are contained in the platform-specific file platform.h */ -/*==========================================================================*/ - -#include "unicode/ptypes.h" /* platform.h is included in ptypes.h */ - -/* - * ANSI C headers: - * stddef.h defines wchar_t - */ -#include - -/*==========================================================================*/ -/* For C wrappers, we use the symbol U_STABLE. */ -/* This works properly if the includer is C or C++. */ -/* Functions are declared U_STABLE return-type U_EXPORT2 function-name()... */ -/*==========================================================================*/ - -/** - * \def U_CFUNC - * This is used in a declaration of a library private ICU C function. - * @stable ICU 2.4 - */ - -/** - * \def U_CDECL_BEGIN - * This is used to begin a declaration of a library private ICU C API. - * @stable ICU 2.4 - */ - -/** - * \def U_CDECL_END - * This is used to end a declaration of a library private ICU C API - * @stable ICU 2.4 - */ - -#ifdef __cplusplus -# define U_CFUNC extern "C" -# define U_CDECL_BEGIN extern "C" { -# define U_CDECL_END } -#else -# define U_CFUNC extern -# define U_CDECL_BEGIN -# define U_CDECL_END -#endif - -#ifndef U_ATTRIBUTE_DEPRECATED -/** - * \def U_ATTRIBUTE_DEPRECATED - * This is used for GCC specific attributes - * @internal - */ -#if U_GCC_MAJOR_MINOR >= 302 -# define U_ATTRIBUTE_DEPRECATED __attribute__ ((deprecated)) -/** - * \def U_ATTRIBUTE_DEPRECATED - * This is used for Visual C++ specific attributes - * @internal - */ -#elif defined(_MSC_VER) && (_MSC_VER >= 1400) -# define U_ATTRIBUTE_DEPRECATED __declspec(deprecated) -#else -# define U_ATTRIBUTE_DEPRECATED -#endif -#endif - -/** This is used to declare a function as a public ICU C API @stable ICU 2.0*/ -#define U_CAPI U_CFUNC U_EXPORT -/** This is used to declare a function as a stable public ICU C API*/ -#define U_STABLE U_CAPI -/** This is used to declare a function as a draft public ICU C API */ -#define U_DRAFT U_CAPI -/** This is used to declare a function as a deprecated public ICU C API */ -#define U_DEPRECATED U_CAPI U_ATTRIBUTE_DEPRECATED -/** This is used to declare a function as an obsolete public ICU C API */ -#define U_OBSOLETE U_CAPI -/** This is used to declare a function as an internal ICU C API */ -#define U_INTERNAL U_CAPI - -/** - * \def U_OVERRIDE - * Defined to the C++11 "override" keyword if available. - * Denotes a class or member which is an override of the base class. - * May result in an error if it applied to something not an override. - * @internal - */ -#ifndef U_OVERRIDE -#define U_OVERRIDE override -#endif - -/** - * \def U_FINAL - * Defined to the C++11 "final" keyword if available. - * Denotes a class or member which may not be overridden in subclasses. - * May result in an error if subclasses attempt to override. - * @internal - */ -#if !defined(U_FINAL) || defined(U_IN_DOXYGEN) -#define U_FINAL final -#endif - - -/*==========================================================================*/ -/* limits for int32_t etc., like in POSIX inttypes.h */ -/*==========================================================================*/ - -#ifndef INT8_MIN -/** The smallest value an 8 bit signed integer can hold @stable ICU 2.0 */ -# define INT8_MIN ((int8_t)(-128)) -#endif -#ifndef INT16_MIN -/** The smallest value a 16 bit signed integer can hold @stable ICU 2.0 */ -# define INT16_MIN ((int16_t)(-32767-1)) -#endif -#ifndef INT32_MIN -/** The smallest value a 32 bit signed integer can hold @stable ICU 2.0 */ -# define INT32_MIN ((int32_t)(-2147483647-1)) -#endif - -#ifndef INT8_MAX -/** The largest value an 8 bit signed integer can hold @stable ICU 2.0 */ -# define INT8_MAX ((int8_t)(127)) -#endif -#ifndef INT16_MAX -/** The largest value a 16 bit signed integer can hold @stable ICU 2.0 */ -# define INT16_MAX ((int16_t)(32767)) -#endif -#ifndef INT32_MAX -/** The largest value a 32 bit signed integer can hold @stable ICU 2.0 */ -# define INT32_MAX ((int32_t)(2147483647)) -#endif - -#ifndef UINT8_MAX -/** The largest value an 8 bit unsigned integer can hold @stable ICU 2.0 */ -# define UINT8_MAX ((uint8_t)(255U)) -#endif -#ifndef UINT16_MAX -/** The largest value a 16 bit unsigned integer can hold @stable ICU 2.0 */ -# define UINT16_MAX ((uint16_t)(65535U)) -#endif -#ifndef UINT32_MAX -/** The largest value a 32 bit unsigned integer can hold @stable ICU 2.0 */ -# define UINT32_MAX ((uint32_t)(4294967295U)) -#endif - -#if defined(U_INT64_T_UNAVAILABLE) -# error int64_t is required for decimal format and rule-based number format. -#else -# ifndef INT64_C -/** - * Provides a platform independent way to specify a signed 64-bit integer constant. - * note: may be wrong for some 64 bit platforms - ensure your compiler provides INT64_C - * @stable ICU 2.8 - */ -# define INT64_C(c) c ## LL -# endif -# ifndef UINT64_C -/** - * Provides a platform independent way to specify an unsigned 64-bit integer constant. - * note: may be wrong for some 64 bit platforms - ensure your compiler provides UINT64_C - * @stable ICU 2.8 - */ -# define UINT64_C(c) c ## ULL -# endif -# ifndef U_INT64_MIN -/** The smallest value a 64 bit signed integer can hold @stable ICU 2.8 */ -# define U_INT64_MIN ((int64_t)(INT64_C(-9223372036854775807)-1)) -# endif -# ifndef U_INT64_MAX -/** The largest value a 64 bit signed integer can hold @stable ICU 2.8 */ -# define U_INT64_MAX ((int64_t)(INT64_C(9223372036854775807))) -# endif -# ifndef U_UINT64_MAX -/** The largest value a 64 bit unsigned integer can hold @stable ICU 2.8 */ -# define U_UINT64_MAX ((uint64_t)(UINT64_C(18446744073709551615))) -# endif -#endif - -/*==========================================================================*/ -/* Boolean data type */ -/*==========================================================================*/ - -/** The ICU boolean type @stable ICU 2.0 */ -typedef int8_t UBool; - -#ifndef TRUE -/** The TRUE value of a UBool @stable ICU 2.0 */ -# define TRUE 1 -#endif -#ifndef FALSE -/** The FALSE value of a UBool @stable ICU 2.0 */ -# define FALSE 0 -#endif - - -/*==========================================================================*/ -/* Unicode data types */ -/*==========================================================================*/ - -/* wchar_t-related definitions -------------------------------------------- */ - -/* - * \def U_WCHAR_IS_UTF16 - * Defined if wchar_t uses UTF-16. - * - * @stable ICU 2.0 - */ -/* - * \def U_WCHAR_IS_UTF32 - * Defined if wchar_t uses UTF-32. - * - * @stable ICU 2.0 - */ -#if !defined(U_WCHAR_IS_UTF16) && !defined(U_WCHAR_IS_UTF32) -# ifdef __STDC_ISO_10646__ -# if (U_SIZEOF_WCHAR_T==2) -# define U_WCHAR_IS_UTF16 -# elif (U_SIZEOF_WCHAR_T==4) -# define U_WCHAR_IS_UTF32 -# endif -# elif defined __UCS2__ -# if (U_PF_OS390 <= U_PLATFORM && U_PLATFORM <= U_PF_OS400) && (U_SIZEOF_WCHAR_T==2) -# define U_WCHAR_IS_UTF16 -# endif -# elif defined(__UCS4__) || (U_PLATFORM == U_PF_OS400 && defined(__UTF32__)) -# if (U_SIZEOF_WCHAR_T==4) -# define U_WCHAR_IS_UTF32 -# endif -# elif U_PLATFORM_IS_DARWIN_BASED || (U_SIZEOF_WCHAR_T==4 && U_PLATFORM_IS_LINUX_BASED) -# define U_WCHAR_IS_UTF32 -# elif U_PLATFORM_HAS_WIN32_API -# define U_WCHAR_IS_UTF16 -# endif -#endif - -/* UChar and UChar32 definitions -------------------------------------------- */ - -/** Number of bytes in a UChar. @stable ICU 2.0 */ -#define U_SIZEOF_UCHAR 2 - -/** - * \def U_CHAR16_IS_TYPEDEF - * If 1, then char16_t is a typedef and not a real type (yet) - * @internal - */ -#if (U_PLATFORM == U_PF_AIX) && defined(__cplusplus) &&(U_CPLUSPLUS_VERSION < 11) -// for AIX, uchar.h needs to be included -# include -# define U_CHAR16_IS_TYPEDEF 1 -#elif defined(_MSC_VER) && (_MSC_VER < 1900) -// Versions of Visual Studio/MSVC below 2015 do not support char16_t as a real type, -// and instead use a typedef. https://msdn.microsoft.com/library/bb531344.aspx -# define U_CHAR16_IS_TYPEDEF 1 -#else -# define U_CHAR16_IS_TYPEDEF 0 -#endif - - -/** - * \var UChar - * - * The base type for UTF-16 code units and pointers. - * Unsigned 16-bit integer. - * Starting with ICU 59, C++ API uses char16_t directly, while C API continues to use UChar. - * - * UChar is configurable by defining the macro UCHAR_TYPE - * on the preprocessor or compiler command line: - * -DUCHAR_TYPE=uint16_t or -DUCHAR_TYPE=wchar_t (if U_SIZEOF_WCHAR_T==2) etc. - * (The UCHAR_TYPE can also be \#defined earlier in this file, for outside the ICU library code.) - * This is for transitional use from application code that uses uint16_t or wchar_t for UTF-16. - * - * The default is UChar=char16_t. - * - * C++11 defines char16_t as bit-compatible with uint16_t, but as a distinct type. - * - * In C, char16_t is a simple typedef of uint_least16_t. - * ICU requires uint_least16_t=uint16_t for data memory mapping. - * On macOS, char16_t is not available because the uchar.h standard header is missing. - * - * @stable ICU 4.4 - */ - -#if 0 - // #if 1 is normal. UChar defaults to char16_t in C++. - // For configuration testing of UChar=uint16_t temporarily change this to #if 0. - // The intltest Makefile #defines UCHAR_TYPE=char16_t, - // so we only #define it to uint16_t if it is undefined so far. -#elif !defined(UCHAR_TYPE) -# define UCHAR_TYPE uint16_t -#endif - -#if defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || \ - defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) - // Inside the ICU library code, never configurable. - typedef char16_t UChar; -#elif defined(UCHAR_TYPE) - typedef UCHAR_TYPE UChar; -#elif defined(__cplusplus) - typedef char16_t UChar; -#else - typedef uint16_t UChar; -#endif - -/** - * \var OldUChar - * Default ICU 58 definition of UChar. - * A base type for UTF-16 code units and pointers. - * Unsigned 16-bit integer. - * - * Define OldUChar to be wchar_t if that is 16 bits wide. - * If wchar_t is not 16 bits wide, then define UChar to be uint16_t. - * - * This makes the definition of OldUChar platform-dependent - * but allows direct string type compatibility with platforms with - * 16-bit wchar_t types. - * - * This is how UChar was defined in ICU 58, for transition convenience. - * Exception: ICU 58 UChar was defined to UCHAR_TYPE if that macro was defined. - * The current UChar responds to UCHAR_TYPE but OldUChar does not. - * - * @stable ICU 59 - */ -#if U_SIZEOF_WCHAR_T==2 - typedef wchar_t OldUChar; -#elif defined(__CHAR16_TYPE__) - typedef __CHAR16_TYPE__ OldUChar; -#else - typedef uint16_t OldUChar; -#endif - -/** - * Define UChar32 as a type for single Unicode code points. - * UChar32 is a signed 32-bit integer (same as int32_t). - * - * The Unicode code point range is 0..0x10ffff. - * All other values (negative or >=0x110000) are illegal as Unicode code points. - * They may be used as sentinel values to indicate "done", "error" - * or similar non-code point conditions. - * - * Before ICU 2.4 (Jitterbug 2146), UChar32 was defined - * to be wchar_t if that is 32 bits wide (wchar_t may be signed or unsigned) - * or else to be uint32_t. - * That is, the definition of UChar32 was platform-dependent. - * - * @see U_SENTINEL - * @stable ICU 2.4 - */ -typedef int32_t UChar32; - -/** - * This value is intended for sentinel values for APIs that - * (take or) return single code points (UChar32). - * It is outside of the Unicode code point range 0..0x10ffff. - * - * For example, a "done" or "error" value in a new API - * could be indicated with U_SENTINEL. - * - * ICU APIs designed before ICU 2.4 usually define service-specific "done" - * values, mostly 0xffff. - * Those may need to be distinguished from - * actual U+ffff text contents by calling functions like - * CharacterIterator::hasNext() or UnicodeString::length(). - * - * @return -1 - * @see UChar32 - * @stable ICU 2.4 - */ -#define U_SENTINEL (-1) - -#include "unicode/urename.h" - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umisc.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umisc.h deleted file mode 100644 index 213290b9af..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umisc.h +++ /dev/null @@ -1,62 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1999-2006, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* file name: umisc.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 1999oct15 -* created by: Markus W. Scherer -*/ - -#ifndef UMISC_H -#define UMISC_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C API:misc definitions - * - * This file contains miscellaneous definitions for the C APIs. - */ - -U_CDECL_BEGIN - -/** A struct representing a range of text containing a specific field - * @stable ICU 2.0 - */ -typedef struct UFieldPosition { - /** - * The field - * @stable ICU 2.0 - */ - int32_t field; - /** - * The start of the text range containing field - * @stable ICU 2.0 - */ - int32_t beginIndex; - /** - * The limit of the text range containing field - * @stable ICU 2.0 - */ - int32_t endIndex; -} UFieldPosition; - -#if !UCONFIG_NO_SERVICE -/** - * Opaque type returned by registerInstance, registerFactory and unregister for service registration. - * @stable ICU 2.6 - */ -typedef const void* URegistryKey; -#endif - -U_CDECL_END - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umsg.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umsg.h deleted file mode 100644 index aa4079034f..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umsg.h +++ /dev/null @@ -1,625 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/******************************************************************** - * COPYRIGHT: - * Copyright (c) 1997-2011, International Business Machines Corporation and - * others. All Rights Reserved. - * Copyright (C) 2010 , Yahoo! Inc. - ******************************************************************** - * - * file name: umsg.h - * encoding: UTF-8 - * tab size: 8 (not used) - * indentation:4 - * - * Change history: - * - * 08/5/2001 Ram Added C wrappers for C++ API. - ********************************************************************/ - -#ifndef UMSG_H -#define UMSG_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/localpointer.h" -#include "unicode/uloc.h" -#include "unicode/parseerr.h" -#include - -/** - * \file - * \brief C API: MessageFormat - * - *

MessageFormat C API

- * - *

MessageFormat prepares strings for display to users, - * with optional arguments (variables/placeholders). - * The arguments can occur in any order, which is necessary for translation - * into languages with different grammars. - * - *

The opaque UMessageFormat type is a thin C wrapper around - * a C++ MessageFormat. It is constructed from a pattern string - * with arguments in {curly braces} which will be replaced by formatted values. - * - *

Currently, the C API supports only numbered arguments. - * - *

For details about the pattern syntax and behavior, - * especially about the ASCII apostrophe vs. the - * real apostrophe (single quote) character \htmlonly’\endhtmlonly (U+2019), - * see the C++ MessageFormat class documentation. - * - *

Here are some examples of C API usage: - * Example 1: - *

- * \code
- *     UChar *result, *tzID, *str;
- *     UChar pattern[100];
- *     int32_t resultLengthOut, resultlength;
- *     UCalendar *cal;
- *     UDate d1;
- *     UDateFormat *def1;
- *     UErrorCode status = U_ZERO_ERROR;
- *
- *     str=(UChar*)malloc(sizeof(UChar) * (strlen("disturbance in force") +1));
- *     u_uastrcpy(str, "disturbance in force");
- *     tzID=(UChar*)malloc(sizeof(UChar) * 4);
- *     u_uastrcpy(tzID, "PST");
- *     cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status);
- *     ucal_setDateTime(cal, 1999, UCAL_MARCH, 18, 0, 0, 0, &status);
- *     d1=ucal_getMillis(cal, &status);
- *     u_uastrcpy(pattern, "On {0, date, long}, there was a {1} on planet {2,number,integer}");
- *     resultlength=0;
- *     resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, d1, str, 7);
- *     if(status==U_BUFFER_OVERFLOW_ERROR){
- *         status=U_ZERO_ERROR;
- *         resultlength=resultLengthOut+1;
- *         result=(UChar*)realloc(result, sizeof(UChar) * resultlength);
- *         u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, d1, str, 7);
- *     }
- *     printf("%s\n", austrdup(result) );//austrdup( a function used to convert UChar* to char*)
- *     //output>: "On March 18, 1999, there was a disturbance in force on planet 7
- * \endcode
- * 
- * Typically, the message format will come from resources, and the - * arguments will be dynamically set at runtime. - *

- * Example 2: - *

- * \code
- *     UChar* str;
- *     UErrorCode status = U_ZERO_ERROR;
- *     UChar *result;
- *     UChar pattern[100];
- *     int32_t resultlength, resultLengthOut, i;
- *     double testArgs= { 100.0, 1.0, 0.0};
- *
- *     str=(UChar*)malloc(sizeof(UChar) * 10);
- *     u_uastrcpy(str, "MyDisk");
- *     u_uastrcpy(pattern, "The disk {1} contains {0,choice,0#no files|1#one file|1<{0,number,integer} files}");
- *     for(i=0; i<3; i++){
- *       resultlength=0; 
- *       resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, testArgs[i], str); 
- *       if(status==U_BUFFER_OVERFLOW_ERROR){
- *         status=U_ZERO_ERROR;
- *         resultlength=resultLengthOut+1;
- *         result=(UChar*)malloc(sizeof(UChar) * resultlength);
- *         u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, testArgs[i], str);
- *       }
- *       printf("%s\n", austrdup(result) );  //austrdup( a function used to convert UChar* to char*)
- *       free(result);
- *     }
- *     // output, with different testArgs:
- *     // output: The disk "MyDisk" contains 100 files.
- *     // output: The disk "MyDisk" contains one file.
- *     // output: The disk "MyDisk" contains no files.
- * \endcode
- *  
- * - * - * Example 3: - *
- * \code
- * UChar* str;
- * UChar* str1;
- * UErrorCode status = U_ZERO_ERROR;
- * UChar *result;
- * UChar pattern[100];
- * UChar expected[100];
- * int32_t resultlength,resultLengthOut;
-
- * str=(UChar*)malloc(sizeof(UChar) * 25);
- * u_uastrcpy(str, "Kirti");
- * str1=(UChar*)malloc(sizeof(UChar) * 25);
- * u_uastrcpy(str1, "female");
- * log_verbose("Testing message format with Select test #1\n:");
- * u_uastrcpy(pattern, "{0} est {1, select, female {all\\u00E9e} other {all\\u00E9}} \\u00E0 Paris.");
- * u_uastrcpy(expected, "Kirti est all\\u00E9e \\u00E0 Paris.");
- * resultlength=0;
- * resultLengthOut=u_formatMessage( "fr", pattern, u_strlen(pattern), NULL, resultlength, &status, str , str1);
- * if(status==U_BUFFER_OVERFLOW_ERROR)
- *  {
- *      status=U_ZERO_ERROR;
- *      resultlength=resultLengthOut+1;
- *      result=(UChar*)malloc(sizeof(UChar) * resultlength);
- *      u_formatMessage( "fr", pattern, u_strlen(pattern), result, resultlength, &status, str , str1);
- *      if(u_strcmp(result, expected)==0)
- *          log_verbose("PASS: MessagFormat successful on Select test#1\n");
- *      else{
- *          log_err("FAIL: Error in MessageFormat on Select test#1\n GOT %s EXPECTED %s\n", austrdup(result),
- *          austrdup(expected) );
- *      }
- *      free(result);
- * }
- * \endcode
- *  
- */ - -/** - * Format a message for a locale. - * This function may perform re-ordering of the arguments depending on the - * locale. For all numeric arguments, double is assumed unless the type is - * explicitly integer. All choice format arguments must be of type double. - * @param locale The locale for which the message will be formatted - * @param pattern The pattern specifying the message's format - * @param patternLength The length of pattern - * @param result A pointer to a buffer to receive the formatted message. - * @param resultLength The maximum size of result. - * @param status A pointer to an UErrorCode to receive any errors - * @param ... A variable-length argument list containing the arguments specified - * in pattern. - * @return The total buffer size needed; if greater than resultLength, the - * output was truncated. - * @see u_parseMessage - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_formatMessage(const char *locale, - const UChar *pattern, - int32_t patternLength, - UChar *result, - int32_t resultLength, - UErrorCode *status, - ...); - -/** - * Format a message for a locale. - * This function may perform re-ordering of the arguments depending on the - * locale. For all numeric arguments, double is assumed unless the type is - * explicitly integer. All choice format arguments must be of type double. - * @param locale The locale for which the message will be formatted - * @param pattern The pattern specifying the message's format - * @param patternLength The length of pattern - * @param result A pointer to a buffer to receive the formatted message. - * @param resultLength The maximum size of result. - * @param ap A variable-length argument list containing the arguments specified - * @param status A pointer to an UErrorCode to receive any errors - * in pattern. - * @return The total buffer size needed; if greater than resultLength, the - * output was truncated. - * @see u_parseMessage - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_vformatMessage( const char *locale, - const UChar *pattern, - int32_t patternLength, - UChar *result, - int32_t resultLength, - va_list ap, - UErrorCode *status); - -/** - * Parse a message. - * For numeric arguments, this function will always use doubles. Integer types - * should not be passed. - * This function is not able to parse all output from {@link #u_formatMessage }. - * @param locale The locale for which the message is formatted - * @param pattern The pattern specifying the message's format - * @param patternLength The length of pattern - * @param source The text to parse. - * @param sourceLength The length of source, or -1 if null-terminated. - * @param status A pointer to an UErrorCode to receive any errors - * @param ... A variable-length argument list containing the arguments - * specified in pattern. - * @see u_formatMessage - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -u_parseMessage( const char *locale, - const UChar *pattern, - int32_t patternLength, - const UChar *source, - int32_t sourceLength, - UErrorCode *status, - ...); - -/** - * Parse a message. - * For numeric arguments, this function will always use doubles. Integer types - * should not be passed. - * This function is not able to parse all output from {@link #u_formatMessage }. - * @param locale The locale for which the message is formatted - * @param pattern The pattern specifying the message's format - * @param patternLength The length of pattern - * @param source The text to parse. - * @param sourceLength The length of source, or -1 if null-terminated. - * @param ap A variable-length argument list containing the arguments - * @param status A pointer to an UErrorCode to receive any errors - * specified in pattern. - * @see u_formatMessage - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -u_vparseMessage(const char *locale, - const UChar *pattern, - int32_t patternLength, - const UChar *source, - int32_t sourceLength, - va_list ap, - UErrorCode *status); - -/** - * Format a message for a locale. - * This function may perform re-ordering of the arguments depending on the - * locale. For all numeric arguments, double is assumed unless the type is - * explicitly integer. All choice format arguments must be of type double. - * @param locale The locale for which the message will be formatted - * @param pattern The pattern specifying the message's format - * @param patternLength The length of pattern - * @param result A pointer to a buffer to receive the formatted message. - * @param resultLength The maximum size of result. - * @param status A pointer to an UErrorCode to receive any errors - * @param ... A variable-length argument list containing the arguments specified - * in pattern. - * @param parseError A pointer to UParseError to receive information about errors - * occurred during parsing. - * @return The total buffer size needed; if greater than resultLength, the - * output was truncated. - * @see u_parseMessage - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_formatMessageWithError( const char *locale, - const UChar *pattern, - int32_t patternLength, - UChar *result, - int32_t resultLength, - UParseError *parseError, - UErrorCode *status, - ...); - -/** - * Format a message for a locale. - * This function may perform re-ordering of the arguments depending on the - * locale. For all numeric arguments, double is assumed unless the type is - * explicitly integer. All choice format arguments must be of type double. - * @param locale The locale for which the message will be formatted - * @param pattern The pattern specifying the message's format - * @param patternLength The length of pattern - * @param result A pointer to a buffer to receive the formatted message. - * @param resultLength The maximum size of result. - * @param parseError A pointer to UParseError to receive information about errors - * occurred during parsing. - * @param ap A variable-length argument list containing the arguments specified - * @param status A pointer to an UErrorCode to receive any errors - * in pattern. - * @return The total buffer size needed; if greater than resultLength, the - * output was truncated. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_vformatMessageWithError( const char *locale, - const UChar *pattern, - int32_t patternLength, - UChar *result, - int32_t resultLength, - UParseError* parseError, - va_list ap, - UErrorCode *status); - -/** - * Parse a message. - * For numeric arguments, this function will always use doubles. Integer types - * should not be passed. - * This function is not able to parse all output from {@link #u_formatMessage }. - * @param locale The locale for which the message is formatted - * @param pattern The pattern specifying the message's format - * @param patternLength The length of pattern - * @param source The text to parse. - * @param sourceLength The length of source, or -1 if null-terminated. - * @param parseError A pointer to UParseError to receive information about errors - * occurred during parsing. - * @param status A pointer to an UErrorCode to receive any errors - * @param ... A variable-length argument list containing the arguments - * specified in pattern. - * @see u_formatMessage - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -u_parseMessageWithError(const char *locale, - const UChar *pattern, - int32_t patternLength, - const UChar *source, - int32_t sourceLength, - UParseError *parseError, - UErrorCode *status, - ...); - -/** - * Parse a message. - * For numeric arguments, this function will always use doubles. Integer types - * should not be passed. - * This function is not able to parse all output from {@link #u_formatMessage }. - * @param locale The locale for which the message is formatted - * @param pattern The pattern specifying the message's format - * @param patternLength The length of pattern - * @param source The text to parse. - * @param sourceLength The length of source, or -1 if null-terminated. - * @param ap A variable-length argument list containing the arguments - * @param parseError A pointer to UParseError to receive information about errors - * occurred during parsing. - * @param status A pointer to an UErrorCode to receive any errors - * specified in pattern. - * @see u_formatMessage - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -u_vparseMessageWithError(const char *locale, - const UChar *pattern, - int32_t patternLength, - const UChar *source, - int32_t sourceLength, - va_list ap, - UParseError *parseError, - UErrorCode* status); - -/*----------------------- New experimental API --------------------------- */ -/** - * The message format object - * @stable ICU 2.0 - */ -typedef void* UMessageFormat; - - -/** - * Open a message formatter with given pattern and for the given locale. - * @param pattern A pattern specifying the format to use. - * @param patternLength Length of the pattern to use - * @param locale The locale for which the messages are formatted. - * @param parseError A pointer to UParseError struct to receive any errors - * occured during parsing. Can be NULL. - * @param status A pointer to an UErrorCode to receive any errors. - * @return A pointer to a UMessageFormat to use for formatting - * messages, or 0 if an error occurred. - * @stable ICU 2.0 - */ -U_STABLE UMessageFormat* U_EXPORT2 -umsg_open( const UChar *pattern, - int32_t patternLength, - const char *locale, - UParseError *parseError, - UErrorCode *status); - -/** - * Close a UMessageFormat. - * Once closed, a UMessageFormat may no longer be used. - * @param format The formatter to close. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -umsg_close(UMessageFormat* format); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUMessageFormatPointer - * "Smart pointer" class, closes a UMessageFormat via umsg_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUMessageFormatPointer, UMessageFormat, umsg_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Open a copy of a UMessageFormat. - * This function performs a deep copy. - * @param fmt The formatter to copy - * @param status A pointer to an UErrorCode to receive any errors. - * @return A pointer to a UDateFormat identical to fmt. - * @stable ICU 2.0 - */ -U_STABLE UMessageFormat U_EXPORT2 -umsg_clone(const UMessageFormat *fmt, - UErrorCode *status); - -/** - * Sets the locale. This locale is used for fetching default number or date - * format information. - * @param fmt The formatter to set - * @param locale The locale the formatter should use. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -umsg_setLocale(UMessageFormat *fmt, - const char* locale); - -/** - * Gets the locale. This locale is used for fetching default number or date - * format information. - * @param fmt The formatter to querry - * @return the locale. - * @stable ICU 2.0 - */ -U_STABLE const char* U_EXPORT2 -umsg_getLocale(const UMessageFormat *fmt); - -/** - * Sets the pattern. - * @param fmt The formatter to use - * @param pattern The pattern to be applied. - * @param patternLength Length of the pattern to use - * @param parseError Struct to receive information on position - * of error if an error is encountered.Can be NULL. - * @param status Output param set to success/failure code on - * exit. If the pattern is invalid, this will be - * set to a failure result. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -umsg_applyPattern( UMessageFormat *fmt, - const UChar* pattern, - int32_t patternLength, - UParseError* parseError, - UErrorCode* status); - -/** - * Gets the pattern. - * @param fmt The formatter to use - * @param result A pointer to a buffer to receive the pattern. - * @param resultLength The maximum size of result. - * @param status Output param set to success/failure code on - * exit. If the pattern is invalid, this will be - * set to a failure result. - * @return the pattern of the format - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -umsg_toPattern(const UMessageFormat *fmt, - UChar* result, - int32_t resultLength, - UErrorCode* status); - -/** - * Format a message for a locale. - * This function may perform re-ordering of the arguments depending on the - * locale. For all numeric arguments, double is assumed unless the type is - * explicitly integer. All choice format arguments must be of type double. - * @param fmt The formatter to use - * @param result A pointer to a buffer to receive the formatted message. - * @param resultLength The maximum size of result. - * @param status A pointer to an UErrorCode to receive any errors - * @param ... A variable-length argument list containing the arguments - * specified in pattern. - * @return The total buffer size needed; if greater than resultLength, - * the output was truncated. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -umsg_format( const UMessageFormat *fmt, - UChar *result, - int32_t resultLength, - UErrorCode *status, - ...); - -/** - * Format a message for a locale. - * This function may perform re-ordering of the arguments depending on the - * locale. For all numeric arguments, double is assumed unless the type is - * explicitly integer. All choice format arguments must be of type double. - * @param fmt The formatter to use - * @param result A pointer to a buffer to receive the formatted message. - * @param resultLength The maximum size of result. - * @param ap A variable-length argument list containing the arguments - * @param status A pointer to an UErrorCode to receive any errors - * specified in pattern. - * @return The total buffer size needed; if greater than resultLength, - * the output was truncated. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -umsg_vformat( const UMessageFormat *fmt, - UChar *result, - int32_t resultLength, - va_list ap, - UErrorCode *status); - -/** - * Parse a message. - * For numeric arguments, this function will always use doubles. Integer types - * should not be passed. - * This function is not able to parse all output from {@link #umsg_format }. - * @param fmt The formatter to use - * @param source The text to parse. - * @param sourceLength The length of source, or -1 if null-terminated. - * @param count Output param to receive number of elements returned. - * @param status A pointer to an UErrorCode to receive any errors - * @param ... A variable-length argument list containing the arguments - * specified in pattern. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -umsg_parse( const UMessageFormat *fmt, - const UChar *source, - int32_t sourceLength, - int32_t *count, - UErrorCode *status, - ...); - -/** - * Parse a message. - * For numeric arguments, this function will always use doubles. Integer types - * should not be passed. - * This function is not able to parse all output from {@link #umsg_format }. - * @param fmt The formatter to use - * @param source The text to parse. - * @param sourceLength The length of source, or -1 if null-terminated. - * @param count Output param to receive number of elements returned. - * @param ap A variable-length argument list containing the arguments - * @param status A pointer to an UErrorCode to receive any errors - * specified in pattern. - * @see u_formatMessage - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -umsg_vparse(const UMessageFormat *fmt, - const UChar *source, - int32_t sourceLength, - int32_t *count, - va_list ap, - UErrorCode *status); - - -/** - * Convert an 'apostrophe-friendly' pattern into a standard - * pattern. Standard patterns treat all apostrophes as - * quotes, which is problematic in some languages, e.g. - * French, where apostrophe is commonly used. This utility - * assumes that only an unpaired apostrophe immediately before - * a brace is a true quote. Other unpaired apostrophes are paired, - * and the resulting standard pattern string is returned. - * - *

Note it is not guaranteed that the returned pattern - * is indeed a valid pattern. The only effect is to convert - * between patterns having different quoting semantics. - * - * @param pattern the 'apostrophe-friendly' patttern to convert - * @param patternLength the length of pattern, or -1 if unknown and pattern is null-terminated - * @param dest the buffer for the result, or NULL if preflight only - * @param destCapacity the length of the buffer, or 0 if preflighting - * @param ec the error code - * @return the length of the resulting text, not including trailing null - * if buffer has room for the trailing null, it is provided, otherwise - * not - * @stable ICU 3.4 - */ -U_STABLE int32_t U_EXPORT2 -umsg_autoQuoteApostrophe(const UChar* pattern, - int32_t patternLength, - UChar* dest, - int32_t destCapacity, - UErrorCode* ec); - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umutablecptrie.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umutablecptrie.h deleted file mode 100644 index e75191a449..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/umutablecptrie.h +++ /dev/null @@ -1,241 +0,0 @@ -// © 2017 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html - -// umutablecptrie.h (split out of ucptrie.h) -// created: 2018jan24 Markus W. Scherer - -#ifndef __UMUTABLECPTRIE_H__ -#define __UMUTABLECPTRIE_H__ - -#include "unicode/utypes.h" - -#ifndef U_HIDE_DRAFT_API - -#include "unicode/localpointer.h" -#include "unicode/ucpmap.h" -#include "unicode/ucptrie.h" -#include "unicode/utf8.h" - -U_CDECL_BEGIN - -/** - * \file - * - * This file defines a mutable Unicode code point trie. - * - * @see UCPTrie - * @see UMutableCPTrie - */ - -/** - * Mutable Unicode code point trie. - * Fast map from Unicode code points (U+0000..U+10FFFF) to 32-bit integer values. - * For details see http://site.icu-project.org/design/struct/utrie - * - * Setting values (especially ranges) and lookup is fast. - * The mutable trie is only somewhat space-efficient. - * It builds a compacted, immutable UCPTrie. - * - * This trie can be modified while iterating over its contents. - * For example, it is possible to merge its values with those from another - * set of ranges (e.g., another mutable or immutable trie): - * Iterate over those source ranges; for each of them iterate over this trie; - * add the source value into the value of each trie range. - * - * @see UCPTrie - * @see umutablecptrie_buildImmutable - * @draft ICU 63 - */ -typedef struct UMutableCPTrie UMutableCPTrie; - -/** - * Creates a mutable trie that initially maps each Unicode code point to the same value. - * It uses 32-bit data values until umutablecptrie_buildImmutable() is called. - * umutablecptrie_buildImmutable() takes a valueWidth parameter which - * determines the number of bits in the data value in the resulting UCPTrie. - * You must umutablecptrie_close() the trie once you are done using it. - * - * @param initialValue the initial value that is set for all code points - * @param errorValue the value for out-of-range code points and ill-formed UTF-8/16 - * @param pErrorCode an in/out ICU UErrorCode - * @return the trie - * @draft ICU 63 - */ -U_CAPI UMutableCPTrie * U_EXPORT2 -umutablecptrie_open(uint32_t initialValue, uint32_t errorValue, UErrorCode *pErrorCode); - -/** - * Clones a mutable trie. - * You must umutablecptrie_close() the clone once you are done using it. - * - * @param other the trie to clone - * @param pErrorCode an in/out ICU UErrorCode - * @return the trie clone - * @draft ICU 63 - */ -U_CAPI UMutableCPTrie * U_EXPORT2 -umutablecptrie_clone(const UMutableCPTrie *other, UErrorCode *pErrorCode); - -/** - * Closes a mutable trie and releases associated memory. - * - * @param trie the trie - * @draft ICU 63 - */ -U_CAPI void U_EXPORT2 -umutablecptrie_close(UMutableCPTrie *trie); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUMutableCPTriePointer - * "Smart pointer" class, closes a UMutableCPTrie via umutablecptrie_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @draft ICU 63 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUMutableCPTriePointer, UMutableCPTrie, umutablecptrie_close); - -U_NAMESPACE_END - -#endif - -/** - * Creates a mutable trie with the same contents as the UCPMap. - * You must umutablecptrie_close() the mutable trie once you are done using it. - * - * @param map the source map - * @param pErrorCode an in/out ICU UErrorCode - * @return the mutable trie - * @draft ICU 63 - */ -U_CAPI UMutableCPTrie * U_EXPORT2 -umutablecptrie_fromUCPMap(const UCPMap *map, UErrorCode *pErrorCode); - -/** - * Creates a mutable trie with the same contents as the immutable one. - * You must umutablecptrie_close() the mutable trie once you are done using it. - * - * @param trie the immutable trie - * @param pErrorCode an in/out ICU UErrorCode - * @return the mutable trie - * @draft ICU 63 - */ -U_CAPI UMutableCPTrie * U_EXPORT2 -umutablecptrie_fromUCPTrie(const UCPTrie *trie, UErrorCode *pErrorCode); - -/** - * Returns the value for a code point as stored in the trie. - * - * @param trie the trie - * @param c the code point - * @return the value - * @draft ICU 63 - */ -U_CAPI uint32_t U_EXPORT2 -umutablecptrie_get(const UMutableCPTrie *trie, UChar32 c); - -/** - * Returns the last code point such that all those from start to there have the same value. - * Can be used to efficiently iterate over all same-value ranges in a trie. - * (This is normally faster than iterating over code points and get()ting each value, - * but much slower than a data structure that stores ranges directly.) - * - * The trie can be modified between calls to this function. - * - * If the UCPMapValueFilter function pointer is not NULL, then - * the value to be delivered is passed through that function, and the return value is the end - * of the range where all values are modified to the same actual value. - * The value is unchanged if that function pointer is NULL. - * - * See the same-signature ucptrie_getRange() for a code sample. - * - * @param trie the trie - * @param start range start - * @param option defines whether surrogates are treated normally, - * or as having the surrogateValue; usually UCPMAP_RANGE_NORMAL - * @param surrogateValue value for surrogates; ignored if option==UCPMAP_RANGE_NORMAL - * @param filter a pointer to a function that may modify the trie data value, - * or NULL if the values from the trie are to be used unmodified - * @param context an opaque pointer that is passed on to the filter function - * @param pValue if not NULL, receives the value that every code point start..end has; - * may have been modified by filter(context, trie value) - * if that function pointer is not NULL - * @return the range end code point, or -1 if start is not a valid code point - * @draft ICU 63 - */ -U_CAPI UChar32 U_EXPORT2 -umutablecptrie_getRange(const UMutableCPTrie *trie, UChar32 start, - UCPMapRangeOption option, uint32_t surrogateValue, - UCPMapValueFilter *filter, const void *context, uint32_t *pValue); - -/** - * Sets a value for a code point. - * - * @param trie the trie - * @param c the code point - * @param value the value - * @param pErrorCode an in/out ICU UErrorCode - * @draft ICU 63 - */ -U_CAPI void U_EXPORT2 -umutablecptrie_set(UMutableCPTrie *trie, UChar32 c, uint32_t value, UErrorCode *pErrorCode); - -/** - * Sets a value for each code point [start..end]. - * Faster and more space-efficient than setting the value for each code point separately. - * - * @param trie the trie - * @param start the first code point to get the value - * @param end the last code point to get the value (inclusive) - * @param value the value - * @param pErrorCode an in/out ICU UErrorCode - * @draft ICU 63 - */ -U_CAPI void U_EXPORT2 -umutablecptrie_setRange(UMutableCPTrie *trie, - UChar32 start, UChar32 end, - uint32_t value, UErrorCode *pErrorCode); - -/** - * Compacts the data and builds an immutable UCPTrie according to the parameters. - * After this, the mutable trie will be empty. - * - * The mutable trie stores 32-bit values until buildImmutable() is called. - * If values shorter than 32 bits are to be stored in the immutable trie, - * then the upper bits are discarded. - * For example, when the mutable trie contains values 0x81, -0x7f, and 0xa581, - * and the value width is 8 bits, then each of these is stored as 0x81 - * and the immutable trie will return that as an unsigned value. - * (Some implementations may want to make productive temporary use of the upper bits - * until buildImmutable() discards them.) - * - * Not every possible set of mappings can be built into a UCPTrie, - * because of limitations resulting from speed and space optimizations. - * Every Unicode assigned character can be mapped to a unique value. - * Typical data yields data structures far smaller than the limitations. - * - * It is possible to construct extremely unusual mappings that exceed the data structure limits. - * In such a case this function will fail with a U_INDEX_OUTOFBOUNDS_ERROR. - * - * @param trie the trie trie - * @param type selects the trie type - * @param valueWidth selects the number of bits in a trie data value; if smaller than 32 bits, - * then the values stored in the trie will be truncated first - * @param pErrorCode an in/out ICU UErrorCode - * - * @see umutablecptrie_fromUCPTrie - * @draft ICU 63 - */ -U_CAPI UCPTrie * U_EXPORT2 -umutablecptrie_buildImmutable(UMutableCPTrie *trie, UCPTrieType type, UCPTrieValueWidth valueWidth, - UErrorCode *pErrorCode); - -U_CDECL_END - -#endif // U_HIDE_DRAFT_API -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unifilt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unifilt.h deleted file mode 100644 index 4e3f71fc9b..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unifilt.h +++ /dev/null @@ -1,124 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1999-2010, International Business Machines Corporation and others. -* All Rights Reserved. -********************************************************************** -* Date Name Description -* 11/17/99 aliu Creation. -********************************************************************** -*/ -#ifndef UNIFILT_H -#define UNIFILT_H - -#include "unicode/unifunct.h" -#include "unicode/unimatch.h" - -/** - * \file - * \brief C++ API: Unicode Filter - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * U_ETHER is used to represent character values for positions outside - * a range. For example, transliterator uses this to represent - * characters outside the range contextStart..contextLimit-1. This - * allows explicit matching by rules and UnicodeSets of text outside a - * defined range. - * @stable ICU 3.0 - */ -#define U_ETHER ((char16_t)0xFFFF) - -/** - * - * UnicodeFilter defines a protocol for selecting a - * subset of the full range (U+0000 to U+10FFFF) of Unicode characters. - * Currently, filters are used in conjunction with classes like {@link - * Transliterator} to only process selected characters through a - * transformation. - * - *

Note: UnicodeFilter currently stubs out two pure virtual methods - * of its base class, UnicodeMatcher. These methods are toPattern() - * and matchesIndexValue(). This is done so that filter classes that - * are not actually used as matchers -- specifically, those in the - * UnicodeFilterLogic component, and those in tests -- can continue to - * work without defining these methods. As long as a filter is not - * used in an RBT during real transliteration, these methods will not - * be called. However, this breaks the UnicodeMatcher base class - * protocol, and it is not a correct solution. - * - *

In the future we may revisit the UnicodeMatcher / UnicodeFilter - * hierarchy and either redesign it, or simply remove the stubs in - * UnicodeFilter and force subclasses to implement the full - * UnicodeMatcher protocol. - * - * @see UnicodeFilterLogic - * @stable ICU 2.0 - */ -class U_COMMON_API UnicodeFilter : public UnicodeFunctor, public UnicodeMatcher { - -public: - /** - * Destructor - * @stable ICU 2.0 - */ - virtual ~UnicodeFilter(); - - /** - * Returns true for characters that are in the selected - * subset. In other words, if a character is to be - * filtered, then contains() returns - * false. - * @stable ICU 2.0 - */ - virtual UBool contains(UChar32 c) const = 0; - - /** - * UnicodeFunctor API. Cast 'this' to a UnicodeMatcher* pointer - * and return the pointer. - * @stable ICU 2.4 - */ - virtual UnicodeMatcher* toMatcher() const; - - /** - * Implement UnicodeMatcher API. - * @stable ICU 2.4 - */ - virtual UMatchDegree matches(const Replaceable& text, - int32_t& offset, - int32_t limit, - UBool incremental); - - /** - * UnicodeFunctor API. Nothing to do. - * @stable ICU 2.4 - */ - virtual void setData(const TransliterationRuleData*); - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - -protected: - - /* - * Since this class has pure virtual functions, - * a constructor can't be used. - * @stable ICU 2.0 - */ -/* UnicodeFilter();*/ -}; - -/*inline UnicodeFilter::UnicodeFilter() {}*/ - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unifunct.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unifunct.h deleted file mode 100644 index 3383733463..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unifunct.h +++ /dev/null @@ -1,129 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (c) 2002-2005, International Business Machines Corporation -* and others. All Rights Reserved. -********************************************************************** -* Date Name Description -* 01/14/2002 aliu Creation. -********************************************************************** -*/ -#ifndef UNIFUNCT_H -#define UNIFUNCT_H - -#include "unicode/utypes.h" -#include "unicode/uobject.h" - -/** - * \file - * \brief C++ API: Unicode Functor - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class UnicodeMatcher; -class UnicodeReplacer; -class TransliterationRuleData; - -/** - * UnicodeFunctor is an abstract base class for objects - * that perform match and/or replace operations on Unicode strings. - * @author Alan Liu - * @stable ICU 2.4 - */ -class U_COMMON_API UnicodeFunctor : public UObject { - -public: - - /** - * Destructor - * @stable ICU 2.4 - */ - virtual ~UnicodeFunctor(); - - /** - * Return a copy of this object. All UnicodeFunctor objects - * have to support cloning in order to allow classes using - * UnicodeFunctor to implement cloning. - * @stable ICU 2.4 - */ - virtual UnicodeFunctor* clone() const = 0; - - /** - * Cast 'this' to a UnicodeMatcher* pointer and return the - * pointer, or null if this is not a UnicodeMatcher*. Subclasses - * that mix in UnicodeMatcher as a base class must override this. - * This protocol is required because a pointer to a UnicodeFunctor - * cannot be cast to a pointer to a UnicodeMatcher, since - * UnicodeMatcher is a mixin that does not derive from - * UnicodeFunctor. - * @stable ICU 2.4 - */ - virtual UnicodeMatcher* toMatcher() const; - - /** - * Cast 'this' to a UnicodeReplacer* pointer and return the - * pointer, or null if this is not a UnicodeReplacer*. Subclasses - * that mix in UnicodeReplacer as a base class must override this. - * This protocol is required because a pointer to a UnicodeFunctor - * cannot be cast to a pointer to a UnicodeReplacer, since - * UnicodeReplacer is a mixin that does not derive from - * UnicodeFunctor. - * @stable ICU 2.4 - */ - virtual UnicodeReplacer* toReplacer() const; - - /** - * Return the class ID for this class. This is useful only for - * comparing to a return value from getDynamicClassID(). - * @return The class ID for all objects of this class. - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID polymorphically. This method - * is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and - * clone() methods call this method. - * - *

Concrete subclasses of UnicodeFunctor should use the macro - * UOBJECT_DEFINE_RTTI_IMPLEMENTATION from uobject.h to - * provide definitios getStaticClassID and getDynamicClassID. - * - * @return The class ID for this object. All objects of a given - * class have the same class ID. Objects of other classes have - * different class IDs. - * @stable ICU 2.4 - */ - virtual UClassID getDynamicClassID(void) const = 0; - - /** - * Set the data object associated with this functor. The data - * object provides context for functor-to-standin mapping. This - * method is required when assigning a functor to a different data - * object. This function MAY GO AWAY later if the architecture is - * changed to pass data object pointers through the API. - * @internal ICU 2.1 - */ - virtual void setData(const TransliterationRuleData*) = 0; - -protected: - - /** - * Since this class has pure virtual functions, - * a constructor can't be used. - * @stable ICU 2.0 - */ - /*UnicodeFunctor();*/ - -}; - -/*inline UnicodeFunctor::UnicodeFunctor() {}*/ - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unimatch.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unimatch.h deleted file mode 100644 index 7d668b3f9a..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unimatch.h +++ /dev/null @@ -1,167 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -* Copyright (C) 2001-2005, International Business Machines Corporation and others. All Rights Reserved. -********************************************************************** -* Date Name Description -* 07/18/01 aliu Creation. -********************************************************************** -*/ -#ifndef UNIMATCH_H -#define UNIMATCH_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: Unicode Matcher - */ - - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class Replaceable; -class UnicodeString; -class UnicodeSet; - -/** - * Constants returned by UnicodeMatcher::matches() - * indicating the degree of match. - * @stable ICU 2.4 - */ -enum UMatchDegree { - /** - * Constant returned by matches() indicating a - * mismatch between the text and this matcher. The text contains - * a character which does not match, or the text does not contain - * all desired characters for a non-incremental match. - * @stable ICU 2.4 - */ - U_MISMATCH, - - /** - * Constant returned by matches() indicating a - * partial match between the text and this matcher. This value is - * only returned for incremental match operations. All characters - * of the text match, but more characters are required for a - * complete match. Alternatively, for variable-length matchers, - * all characters of the text match, and if more characters were - * supplied at limit, they might also match. - * @stable ICU 2.4 - */ - U_PARTIAL_MATCH, - - /** - * Constant returned by matches() indicating a - * complete match between the text and this matcher. For an - * incremental variable-length match, this value is returned if - * the given text matches, and it is known that additional - * characters would not alter the extent of the match. - * @stable ICU 2.4 - */ - U_MATCH -}; - -/** - * UnicodeMatcher defines a protocol for objects that can - * match a range of characters in a Replaceable string. - * @stable ICU 2.4 - */ -class U_COMMON_API UnicodeMatcher /* not : public UObject because this is an interface/mixin class */ { - -public: - /** - * Destructor. - * @stable ICU 2.4 - */ - virtual ~UnicodeMatcher(); - - /** - * Return a UMatchDegree value indicating the degree of match for - * the given text at the given offset. Zero, one, or more - * characters may be matched. - * - * Matching in the forward direction is indicated by limit > - * offset. Characters from offset forwards to limit-1 will be - * considered for matching. - * - * Matching in the reverse direction is indicated by limit < - * offset. Characters from offset backwards to limit+1 will be - * considered for matching. - * - * If limit == offset then the only match possible is a zero - * character match (which subclasses may implement if desired). - * - * As a side effect, advance the offset parameter to the limit of - * the matched substring. In the forward direction, this will be - * the index of the last matched character plus one. In the - * reverse direction, this will be the index of the last matched - * character minus one. - * - *

Note: This method is not const because some classes may - * modify their state as the result of a match. - * - * @param text the text to be matched - * @param offset on input, the index into text at which to begin - * matching. On output, the limit of the matched text. The - * number of matched characters is the output value of offset - * minus the input value. Offset should always point to the - * HIGH SURROGATE (leading code unit) of a pair of surrogates, - * both on entry and upon return. - * @param limit the limit index of text to be matched. Greater - * than offset for a forward direction match, less than offset for - * a backward direction match. The last character to be - * considered for matching will be text.charAt(limit-1) in the - * forward direction or text.charAt(limit+1) in the backward - * direction. - * @param incremental if TRUE, then assume further characters may - * be inserted at limit and check for partial matching. Otherwise - * assume the text as given is complete. - * @return a match degree value indicating a full match, a partial - * match, or a mismatch. If incremental is FALSE then - * U_PARTIAL_MATCH should never be returned. - * @stable ICU 2.4 - */ - virtual UMatchDegree matches(const Replaceable& text, - int32_t& offset, - int32_t limit, - UBool incremental) = 0; - - /** - * Returns a string representation of this matcher. If the result of - * calling this function is passed to the appropriate parser, it - * will produce another matcher that is equal to this one. - * @param result the string to receive the pattern. Previous - * contents will be deleted. - * @param escapeUnprintable if TRUE then convert unprintable - * character to their hex escape representations, \\uxxxx or - * \\Uxxxxxxxx. Unprintable characters are those other than - * U+000A, U+0020..U+007E. - * @stable ICU 2.4 - */ - virtual UnicodeString& toPattern(UnicodeString& result, - UBool escapeUnprintable = FALSE) const = 0; - - /** - * Returns TRUE if this matcher will match a character c, where c - * & 0xFF == v, at offset, in the forward direction (with limit > - * offset). This is used by RuleBasedTransliterator for - * indexing. - * @stable ICU 2.4 - */ - virtual UBool matchesIndexValue(uint8_t v) const = 0; - - /** - * Union the set of all characters that may be matched by this object - * into the given set. - * @param toUnionTo the set into which to union the source characters - * @stable ICU 2.4 - */ - virtual void addMatchSetTo(UnicodeSet& toUnionTo) const = 0; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unirepl.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unirepl.h deleted file mode 100644 index 822da8cd93..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unirepl.h +++ /dev/null @@ -1,101 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (c) 2002-2005, International Business Machines Corporation -* and others. All Rights Reserved. -********************************************************************** -* Date Name Description -* 01/14/2002 aliu Creation. -********************************************************************** -*/ -#ifndef UNIREPL_H -#define UNIREPL_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: UnicodeReplacer - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class Replaceable; -class UnicodeString; -class UnicodeSet; - -/** - * UnicodeReplacer defines a protocol for objects that - * replace a range of characters in a Replaceable string with output - * text. The replacement is done via the Replaceable API so as to - * preserve out-of-band data. - * - *

This is a mixin class. - * @author Alan Liu - * @stable ICU 2.4 - */ -class U_I18N_API UnicodeReplacer /* not : public UObject because this is an interface/mixin class */ { - - public: - - /** - * Destructor. - * @stable ICU 2.4 - */ - virtual ~UnicodeReplacer(); - - /** - * Replace characters in 'text' from 'start' to 'limit' with the - * output text of this object. Update the 'cursor' parameter to - * give the cursor position and return the length of the - * replacement text. - * - * @param text the text to be matched - * @param start inclusive start index of text to be replaced - * @param limit exclusive end index of text to be replaced; - * must be greater than or equal to start - * @param cursor output parameter for the cursor position. - * Not all replacer objects will update this, but in a complete - * tree of replacer objects, representing the entire output side - * of a transliteration rule, at least one must update it. - * @return the number of 16-bit code units in the text replacing - * the characters at offsets start..(limit-1) in text - * @stable ICU 2.4 - */ - virtual int32_t replace(Replaceable& text, - int32_t start, - int32_t limit, - int32_t& cursor) = 0; - - /** - * Returns a string representation of this replacer. If the - * result of calling this function is passed to the appropriate - * parser, typically TransliteratorParser, it will produce another - * replacer that is equal to this one. - * @param result the string to receive the pattern. Previous - * contents will be deleted. - * @param escapeUnprintable if TRUE then convert unprintable - * character to their hex escape representations, \\uxxxx or - * \\Uxxxxxxxx. Unprintable characters are defined by - * Utility.isUnprintable(). - * @return a reference to 'result'. - * @stable ICU 2.4 - */ - virtual UnicodeString& toReplacerPattern(UnicodeString& result, - UBool escapeUnprintable) const = 0; - - /** - * Union the set of all characters that may output by this object - * into the given set. - * @param toUnionTo the set into which to union the output characters - * @stable ICU 2.4 - */ - virtual void addReplacementSetTo(UnicodeSet& toUnionTo) const = 0; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uniset.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uniset.h deleted file mode 100644 index c3b8f5d7e3..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uniset.h +++ /dev/null @@ -1,1742 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -*************************************************************************** -* Copyright (C) 1999-2016, International Business Machines Corporation -* and others. All Rights Reserved. -*************************************************************************** -* Date Name Description -* 10/20/99 alan Creation. -*************************************************************************** -*/ - -#ifndef UNICODESET_H -#define UNICODESET_H - -#include "unicode/ucpmap.h" -#include "unicode/unifilt.h" -#include "unicode/unistr.h" -#include "unicode/uset.h" - -/** - * \file - * \brief C++ API: Unicode Set - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -// Forward Declarations. -class BMPSet; -class ParsePosition; -class RBBIRuleScanner; -class SymbolTable; -class UnicodeSetStringSpan; -class UVector; -class RuleCharacterIterator; - -/** - * A mutable set of Unicode characters and multicharacter strings. Objects of this class - * represent character classes used in regular expressions. - * A character specifies a subset of Unicode code points. Legal - * code points are U+0000 to U+10FFFF, inclusive. - * - *

The UnicodeSet class is not designed to be subclassed. - * - *

UnicodeSet supports two APIs. The first is the - * operand API that allows the caller to modify the value of - * a UnicodeSet object. It conforms to Java 2's - * java.util.Set interface, although - * UnicodeSet does not actually implement that - * interface. All methods of Set are supported, with the - * modification that they take a character range or single character - * instead of an Object, and they take a - * UnicodeSet instead of a Collection. The - * operand API may be thought of in terms of boolean logic: a boolean - * OR is implemented by add, a boolean AND is implemented - * by retain, a boolean XOR is implemented by - * complement taking an argument, and a boolean NOT is - * implemented by complement with no argument. In terms - * of traditional set theory function names, add is a - * union, retain is an intersection, remove - * is an asymmetric difference, and complement with no - * argument is a set complement with respect to the superset range - * MIN_VALUE-MAX_VALUE - * - *

The second API is the - * applyPattern()/toPattern() API from the - * java.text.Format-derived classes. Unlike the - * methods that add characters, add categories, and control the logic - * of the set, the method applyPattern() sets all - * attributes of a UnicodeSet at once, based on a - * string pattern. - * - *

Pattern syntax

- * - * Patterns are accepted by the constructors and the - * applyPattern() methods and returned by the - * toPattern() method. These patterns follow a syntax - * similar to that employed by version 8 regular expression character - * classes. Here are some simple examples: - * - * \htmlonly
\endhtmlonly - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
[]No characters
[a]The character 'a'
[ae]The characters 'a' and 'e'
[a-e]The characters 'a' through 'e' inclusive, in Unicode code - * point order
[\\u4E01]The character U+4E01
[a{ab}{ac}]The character 'a' and the multicharacter strings "ab" and - * "ac"
[\\p{Lu}]All characters in the general category Uppercase Letter
- * \htmlonly
\endhtmlonly - * - * Any character may be preceded by a backslash in order to remove any special - * meaning. White space characters, as defined by UCharacter.isWhitespace(), are - * ignored, unless they are escaped. - * - *

Property patterns specify a set of characters having a certain - * property as defined by the Unicode standard. Both the POSIX-like - * "[:Lu:]" and the Perl-like syntax "\\p{Lu}" are recognized. For a - * complete list of supported property patterns, see the User's Guide - * for UnicodeSet at - * - * http://icu-project.org/userguide/unicodeSet.html. - * Actual determination of property data is defined by the underlying - * Unicode database as implemented by UCharacter. - * - *

Patterns specify individual characters, ranges of characters, and - * Unicode property sets. When elements are concatenated, they - * specify their union. To complement a set, place a '^' immediately - * after the opening '['. Property patterns are inverted by modifying - * their delimiters; "[:^foo]" and "\\P{foo}". In any other location, - * '^' has no special meaning. - * - *

Ranges are indicated by placing two a '-' between two - * characters, as in "a-z". This specifies the range of all - * characters from the left to the right, in Unicode order. If the - * left character is greater than or equal to the - * right character it is a syntax error. If a '-' occurs as the first - * character after the opening '[' or '[^', or if it occurs as the - * last character before the closing ']', then it is taken as a - * literal. Thus "[a\-b]", "[-ab]", and "[ab-]" all indicate the same - * set of three characters, 'a', 'b', and '-'. - * - *

Sets may be intersected using the '&' operator or the asymmetric - * set difference may be taken using the '-' operator, for example, - * "[[:L:]&[\\u0000-\\u0FFF]]" indicates the set of all Unicode letters - * with values less than 4096. Operators ('&' and '|') have equal - * precedence and bind left-to-right. Thus - * "[[:L:]-[a-z]-[\\u0100-\\u01FF]]" is equivalent to - * "[[[:L:]-[a-z]]-[\\u0100-\\u01FF]]". This only really matters for - * difference; intersection is commutative. - * - * - *
[a]The set containing 'a' - *
[a-z]The set containing 'a' - * through 'z' and all letters in between, in Unicode order - *
[^a-z]The set containing - * all characters but 'a' through 'z', - * that is, U+0000 through 'a'-1 and 'z'+1 through U+10FFFF - *
[[pat1][pat2]] - * The union of sets specified by pat1 and pat2 - *
[[pat1]&[pat2]] - * The intersection of sets specified by pat1 and pat2 - *
[[pat1]-[pat2]] - * The asymmetric difference of sets specified by pat1 and - * pat2 - *
[:Lu:] or \\p{Lu} - * The set of characters having the specified - * Unicode property; in - * this case, Unicode uppercase letters - *
[:^Lu:] or \\P{Lu} - * The set of characters not having the given - * Unicode property - *
- * - *

Warning: you cannot add an empty string ("") to a UnicodeSet.

- * - *

Formal syntax

- * - * \htmlonly
\endhtmlonly - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
pattern :=  ('[' '^'? item* ']') | - * property
item :=  char | (char '-' char) | pattern-expr
- *
pattern-expr :=  pattern | pattern-expr pattern | - * pattern-expr op pattern
- *
op :=  '&' | '-'
- *
special :=  '[' | ']' | '-'
- *
char :=  any character that is not special
- * | ('\'
any character)
- * | ('\\u' hex hex hex hex)
- *
hex :=  any character for which - * Character.digit(c, 16) - * returns a non-negative result
property :=  a Unicode property set pattern
- *
- * - * - * - * - *
Legend: - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
a := b  a may be replaced by b
a?zero or one instance of a
- *
a*one or more instances of a
- *
a | beither a or b
- *
'a'the literal string between the quotes
- *
- * \htmlonly
\endhtmlonly - * - *

Note: - * - Most UnicodeSet methods do not take a UErrorCode parameter because - * there are usually very few opportunities for failure other than a shortage - * of memory, error codes in low-level C++ string methods would be inconvenient, - * and the error code as the last parameter (ICU convention) would prevent - * the use of default parameter values. - * Instead, such methods set the UnicodeSet into a "bogus" state - * (see isBogus()) if an error occurs. - * - * @author Alan Liu - * @stable ICU 2.0 - */ -class U_COMMON_API UnicodeSet U_FINAL : public UnicodeFilter { -private: - /** - * Enough for sets with few ranges. - * For example, White_Space has 10 ranges, list length 21. - */ - static constexpr int32_t INITIAL_CAPACITY = 25; - // fFlags constant - static constexpr uint8_t kIsBogus = 1; // This set is bogus (i.e. not valid) - - UChar32* list = stackList; // MUST be terminated with HIGH - int32_t capacity = INITIAL_CAPACITY; // capacity of list - int32_t len = 1; // length of list used; 1 <= len <= capacity - uint8_t fFlags = 0; // Bit flag (see constants above) - - BMPSet *bmpSet = nullptr; // The set is frozen iff either bmpSet or stringSpan is not NULL. - UChar32* buffer = nullptr; // internal buffer, may be NULL - int32_t bufferCapacity = 0; // capacity of buffer - - /** - * The pattern representation of this set. This may not be the - * most economical pattern. It is the pattern supplied to - * applyPattern(), with variables substituted and whitespace - * removed. For sets constructed without applyPattern(), or - * modified using the non-pattern API, this string will be empty, - * indicating that toPattern() must generate a pattern - * representation from the inversion list. - */ - char16_t *pat = nullptr; - int32_t patLen = 0; - - UVector* strings = nullptr; // maintained in sorted order - UnicodeSetStringSpan *stringSpan = nullptr; - - /** - * Initial list array. - * Avoids some heap allocations, and list is never nullptr. - * Increases the object size a bit. - */ - UChar32 stackList[INITIAL_CAPACITY]; - -public: - /** - * Determine if this object contains a valid set. - * A bogus set has no value. It is different from an empty set. - * It can be used to indicate that no set value is available. - * - * @return TRUE if the set is bogus/invalid, FALSE otherwise - * @see setToBogus() - * @stable ICU 4.0 - */ - inline UBool isBogus(void) const; - - /** - * Make this UnicodeSet object invalid. - * The string will test TRUE with isBogus(). - * - * A bogus set has no value. It is different from an empty set. - * It can be used to indicate that no set value is available. - * - * This utility function is used throughout the UnicodeSet - * implementation to indicate that a UnicodeSet operation failed, - * and may be used in other functions, - * especially but not exclusively when such functions do not - * take a UErrorCode for simplicity. - * - * @see isBogus() - * @stable ICU 4.0 - */ - void setToBogus(); - -public: - - enum { - /** - * Minimum value that can be stored in a UnicodeSet. - * @stable ICU 2.4 - */ - MIN_VALUE = 0, - - /** - * Maximum value that can be stored in a UnicodeSet. - * @stable ICU 2.4 - */ - MAX_VALUE = 0x10ffff - }; - - //---------------------------------------------------------------- - // Constructors &c - //---------------------------------------------------------------- - -public: - - /** - * Constructs an empty set. - * @stable ICU 2.0 - */ - UnicodeSet(); - - /** - * Constructs a set containing the given range. If end < - * start then an empty set is created. - * - * @param start first character, inclusive, of range - * @param end last character, inclusive, of range - * @stable ICU 2.4 - */ - UnicodeSet(UChar32 start, UChar32 end); - -#ifndef U_HIDE_INTERNAL_API - /** - * @internal - */ - enum ESerialization { - kSerialized /* result of serialize() */ - }; - - /** - * Constructs a set from the output of serialize(). - * - * @param buffer the 16 bit array - * @param bufferLen the original length returned from serialize() - * @param serialization the value 'kSerialized' - * @param status error code - * - * @internal - */ - UnicodeSet(const uint16_t buffer[], int32_t bufferLen, - ESerialization serialization, UErrorCode &status); -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Constructs a set from the given pattern. See the class - * description for the syntax of the pattern language. - * @param pattern a string specifying what characters are in the set - * @param status returns U_ILLEGAL_ARGUMENT_ERROR if the pattern - * contains a syntax error. - * @stable ICU 2.0 - */ - UnicodeSet(const UnicodeString& pattern, - UErrorCode& status); - -#ifndef U_HIDE_INTERNAL_API - /** - * Constructs a set from the given pattern. See the class - * description for the syntax of the pattern language. - * @param pattern a string specifying what characters are in the set - * @param options bitmask for options to apply to the pattern. - * Valid options are USET_IGNORE_SPACE and USET_CASE_INSENSITIVE. - * @param symbols a symbol table mapping variable names to values - * and stand-in characters to UnicodeSets; may be NULL - * @param status returns U_ILLEGAL_ARGUMENT_ERROR if the pattern - * contains a syntax error. - * @internal - */ - UnicodeSet(const UnicodeString& pattern, - uint32_t options, - const SymbolTable* symbols, - UErrorCode& status); -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Constructs a set from the given pattern. See the class description - * for the syntax of the pattern language. - * @param pattern a string specifying what characters are in the set - * @param pos on input, the position in pattern at which to start parsing. - * On output, the position after the last character parsed. - * @param options bitmask for options to apply to the pattern. - * Valid options are USET_IGNORE_SPACE and USET_CASE_INSENSITIVE. - * @param symbols a symbol table mapping variable names to values - * and stand-in characters to UnicodeSets; may be NULL - * @param status input-output error code - * @stable ICU 2.8 - */ - UnicodeSet(const UnicodeString& pattern, ParsePosition& pos, - uint32_t options, - const SymbolTable* symbols, - UErrorCode& status); - - /** - * Constructs a set that is identical to the given UnicodeSet. - * @stable ICU 2.0 - */ - UnicodeSet(const UnicodeSet& o); - - /** - * Destructs the set. - * @stable ICU 2.0 - */ - virtual ~UnicodeSet(); - - /** - * Assigns this object to be a copy of another. - * A frozen set will not be modified. - * @stable ICU 2.0 - */ - UnicodeSet& operator=(const UnicodeSet& o); - - /** - * Compares the specified object with this set for equality. Returns - * true if the two sets - * have the same size, and every member of the specified set is - * contained in this set (or equivalently, every member of this set is - * contained in the specified set). - * - * @param o set to be compared for equality with this set. - * @return true if the specified set is equal to this set. - * @stable ICU 2.0 - */ - virtual UBool operator==(const UnicodeSet& o) const; - - /** - * Compares the specified object with this set for equality. Returns - * true if the specified set is not equal to this set. - * @stable ICU 2.0 - */ - inline UBool operator!=(const UnicodeSet& o) const; - - /** - * Returns a copy of this object. All UnicodeFunctor objects have - * to support cloning in order to allow classes using - * UnicodeFunctors, such as Transliterator, to implement cloning. - * If this set is frozen, then the clone will be frozen as well. - * Use cloneAsThawed() for a mutable clone of a frozen set. - * @see cloneAsThawed - * @stable ICU 2.0 - */ - virtual UnicodeFunctor* clone() const; - - /** - * Returns the hash code value for this set. - * - * @return the hash code value for this set. - * @see Object#hashCode() - * @stable ICU 2.0 - */ - virtual int32_t hashCode(void) const; - - /** - * Get a UnicodeSet pointer from a USet - * - * @param uset a USet (the ICU plain C type for UnicodeSet) - * @return the corresponding UnicodeSet pointer. - * - * @stable ICU 4.2 - */ - inline static UnicodeSet *fromUSet(USet *uset); - - /** - * Get a UnicodeSet pointer from a const USet - * - * @param uset a const USet (the ICU plain C type for UnicodeSet) - * @return the corresponding UnicodeSet pointer. - * - * @stable ICU 4.2 - */ - inline static const UnicodeSet *fromUSet(const USet *uset); - - /** - * Produce a USet * pointer for this UnicodeSet. - * USet is the plain C type for UnicodeSet - * - * @return a USet pointer for this UnicodeSet - * @stable ICU 4.2 - */ - inline USet *toUSet(); - - - /** - * Produce a const USet * pointer for this UnicodeSet. - * USet is the plain C type for UnicodeSet - * - * @return a const USet pointer for this UnicodeSet - * @stable ICU 4.2 - */ - inline const USet * toUSet() const; - - - //---------------------------------------------------------------- - // Freezable API - //---------------------------------------------------------------- - - /** - * Determines whether the set has been frozen (made immutable) or not. - * See the ICU4J Freezable interface for details. - * @return TRUE/FALSE for whether the set has been frozen - * @see freeze - * @see cloneAsThawed - * @stable ICU 3.8 - */ - inline UBool isFrozen() const; - - /** - * Freeze the set (make it immutable). - * Once frozen, it cannot be unfrozen and is therefore thread-safe - * until it is deleted. - * See the ICU4J Freezable interface for details. - * Freezing the set may also make some operations faster, for example - * contains() and span(). - * A frozen set will not be modified. (It remains frozen.) - * @return this set. - * @see isFrozen - * @see cloneAsThawed - * @stable ICU 3.8 - */ - UnicodeFunctor *freeze(); - - /** - * Clone the set and make the clone mutable. - * See the ICU4J Freezable interface for details. - * @return the mutable clone - * @see freeze - * @see isFrozen - * @stable ICU 3.8 - */ - UnicodeFunctor *cloneAsThawed() const; - - //---------------------------------------------------------------- - // Public API - //---------------------------------------------------------------- - - /** - * Make this object represent the range `start - end`. - * If `end > start` then this object is set to an empty range. - * A frozen set will not be modified. - * - * @param start first character in the set, inclusive - * @param end last character in the set, inclusive - * @stable ICU 2.4 - */ - UnicodeSet& set(UChar32 start, UChar32 end); - - /** - * Return true if the given position, in the given pattern, appears - * to be the start of a UnicodeSet pattern. - * @stable ICU 2.4 - */ - static UBool resemblesPattern(const UnicodeString& pattern, - int32_t pos); - - /** - * Modifies this set to represent the set specified by the given - * pattern, ignoring Unicode Pattern_White_Space characters. - * See the class description for the syntax of the pattern language. - * A frozen set will not be modified. - * @param pattern a string specifying what characters are in the set - * @param status returns U_ILLEGAL_ARGUMENT_ERROR if the pattern - * contains a syntax error. - * Empties the set passed before applying the pattern. - * @return a reference to this - * @stable ICU 2.0 - */ - UnicodeSet& applyPattern(const UnicodeString& pattern, - UErrorCode& status); - -#ifndef U_HIDE_INTERNAL_API - /** - * Modifies this set to represent the set specified by the given - * pattern, optionally ignoring Unicode Pattern_White_Space characters. - * See the class description for the syntax of the pattern language. - * A frozen set will not be modified. - * @param pattern a string specifying what characters are in the set - * @param options bitmask for options to apply to the pattern. - * Valid options are USET_IGNORE_SPACE and USET_CASE_INSENSITIVE. - * @param symbols a symbol table mapping variable names to - * values and stand-ins to UnicodeSets; may be NULL - * @param status returns U_ILLEGAL_ARGUMENT_ERROR if the pattern - * contains a syntax error. - * Empties the set passed before applying the pattern. - * @return a reference to this - * @internal - */ - UnicodeSet& applyPattern(const UnicodeString& pattern, - uint32_t options, - const SymbolTable* symbols, - UErrorCode& status); -#endif /* U_HIDE_INTERNAL_API */ - - /** - * Parses the given pattern, starting at the given position. The - * character at pattern.charAt(pos.getIndex()) must be '[', or the - * parse fails. Parsing continues until the corresponding closing - * ']'. If a syntax error is encountered between the opening and - * closing brace, the parse fails. Upon return from a successful - * parse, the ParsePosition is updated to point to the character - * following the closing ']', and a StringBuffer containing a - * pairs list for the parsed pattern is returned. This method calls - * itself recursively to parse embedded subpatterns. - * Empties the set passed before applying the pattern. - * A frozen set will not be modified. - * - * @param pattern the string containing the pattern to be parsed. - * The portion of the string from pos.getIndex(), which must be a - * '[', to the corresponding closing ']', is parsed. - * @param pos upon entry, the position at which to being parsing. - * The character at pattern.charAt(pos.getIndex()) must be a '['. - * Upon return from a successful parse, pos.getIndex() is either - * the character after the closing ']' of the parsed pattern, or - * pattern.length() if the closing ']' is the last character of - * the pattern string. - * @param options bitmask for options to apply to the pattern. - * Valid options are USET_IGNORE_SPACE and USET_CASE_INSENSITIVE. - * @param symbols a symbol table mapping variable names to - * values and stand-ins to UnicodeSets; may be NULL - * @param status returns U_ILLEGAL_ARGUMENT_ERROR if the pattern - * contains a syntax error. - * @return a reference to this - * @stable ICU 2.8 - */ - UnicodeSet& applyPattern(const UnicodeString& pattern, - ParsePosition& pos, - uint32_t options, - const SymbolTable* symbols, - UErrorCode& status); - - /** - * Returns a string representation of this set. If the result of - * calling this function is passed to a UnicodeSet constructor, it - * will produce another set that is equal to this one. - * A frozen set will not be modified. - * @param result the string to receive the rules. Previous - * contents will be deleted. - * @param escapeUnprintable if TRUE then convert unprintable - * character to their hex escape representations, \\uxxxx or - * \\Uxxxxxxxx. Unprintable characters are those other than - * U+000A, U+0020..U+007E. - * @stable ICU 2.0 - */ - virtual UnicodeString& toPattern(UnicodeString& result, - UBool escapeUnprintable = FALSE) const; - - /** - * Modifies this set to contain those code points which have the given value - * for the given binary or enumerated property, as returned by - * u_getIntPropertyValue. Prior contents of this set are lost. - * A frozen set will not be modified. - * - * @param prop a property in the range UCHAR_BIN_START..UCHAR_BIN_LIMIT-1 - * or UCHAR_INT_START..UCHAR_INT_LIMIT-1 - * or UCHAR_MASK_START..UCHAR_MASK_LIMIT-1. - * - * @param value a value in the range u_getIntPropertyMinValue(prop).. - * u_getIntPropertyMaxValue(prop), with one exception. If prop is - * UCHAR_GENERAL_CATEGORY_MASK, then value should not be a UCharCategory, but - * rather a mask value produced by U_GET_GC_MASK(). This allows grouped - * categories such as [:L:] to be represented. - * - * @param ec error code input/output parameter - * - * @return a reference to this set - * - * @stable ICU 2.4 - */ - UnicodeSet& applyIntPropertyValue(UProperty prop, - int32_t value, - UErrorCode& ec); - - /** - * Modifies this set to contain those code points which have the - * given value for the given property. Prior contents of this - * set are lost. - * A frozen set will not be modified. - * - * @param prop a property alias, either short or long. The name is matched - * loosely. See PropertyAliases.txt for names and a description of loose - * matching. If the value string is empty, then this string is interpreted - * as either a General_Category value alias, a Script value alias, a binary - * property alias, or a special ID. Special IDs are matched loosely and - * correspond to the following sets: - * - * "ANY" = [\\u0000-\\U0010FFFF], - * "ASCII" = [\\u0000-\\u007F], - * "Assigned" = [:^Cn:]. - * - * @param value a value alias, either short or long. The name is matched - * loosely. See PropertyValueAliases.txt for names and a description of - * loose matching. In addition to aliases listed, numeric values and - * canonical combining classes may be expressed numerically, e.g., ("nv", - * "0.5") or ("ccc", "220"). The value string may also be empty. - * - * @param ec error code input/output parameter - * - * @return a reference to this set - * - * @stable ICU 2.4 - */ - UnicodeSet& applyPropertyAlias(const UnicodeString& prop, - const UnicodeString& value, - UErrorCode& ec); - - /** - * Returns the number of elements in this set (its cardinality). - * Note than the elements of a set may include both individual - * codepoints and strings. - * - * @return the number of elements in this set (its cardinality). - * @stable ICU 2.0 - */ - virtual int32_t size(void) const; - - /** - * Returns true if this set contains no elements. - * - * @return true if this set contains no elements. - * @stable ICU 2.0 - */ - virtual UBool isEmpty(void) const; - - /** - * Returns true if this set contains the given character. - * This function works faster with a frozen set. - * @param c character to be checked for containment - * @return true if the test condition is met - * @stable ICU 2.0 - */ - virtual UBool contains(UChar32 c) const; - - /** - * Returns true if this set contains every character - * of the given range. - * @param start first character, inclusive, of the range - * @param end last character, inclusive, of the range - * @return true if the test condition is met - * @stable ICU 2.0 - */ - virtual UBool contains(UChar32 start, UChar32 end) const; - - /** - * Returns true if this set contains the given - * multicharacter string. - * @param s string to be checked for containment - * @return true if this set contains the specified string - * @stable ICU 2.4 - */ - UBool contains(const UnicodeString& s) const; - - /** - * Returns true if this set contains all the characters and strings - * of the given set. - * @param c set to be checked for containment - * @return true if the test condition is met - * @stable ICU 2.4 - */ - virtual UBool containsAll(const UnicodeSet& c) const; - - /** - * Returns true if this set contains all the characters - * of the given string. - * @param s string containing characters to be checked for containment - * @return true if the test condition is met - * @stable ICU 2.4 - */ - UBool containsAll(const UnicodeString& s) const; - - /** - * Returns true if this set contains none of the characters - * of the given range. - * @param start first character, inclusive, of the range - * @param end last character, inclusive, of the range - * @return true if the test condition is met - * @stable ICU 2.4 - */ - UBool containsNone(UChar32 start, UChar32 end) const; - - /** - * Returns true if this set contains none of the characters and strings - * of the given set. - * @param c set to be checked for containment - * @return true if the test condition is met - * @stable ICU 2.4 - */ - UBool containsNone(const UnicodeSet& c) const; - - /** - * Returns true if this set contains none of the characters - * of the given string. - * @param s string containing characters to be checked for containment - * @return true if the test condition is met - * @stable ICU 2.4 - */ - UBool containsNone(const UnicodeString& s) const; - - /** - * Returns true if this set contains one or more of the characters - * in the given range. - * @param start first character, inclusive, of the range - * @param end last character, inclusive, of the range - * @return true if the condition is met - * @stable ICU 2.4 - */ - inline UBool containsSome(UChar32 start, UChar32 end) const; - - /** - * Returns true if this set contains one or more of the characters - * and strings of the given set. - * @param s The set to be checked for containment - * @return true if the condition is met - * @stable ICU 2.4 - */ - inline UBool containsSome(const UnicodeSet& s) const; - - /** - * Returns true if this set contains one or more of the characters - * of the given string. - * @param s string containing characters to be checked for containment - * @return true if the condition is met - * @stable ICU 2.4 - */ - inline UBool containsSome(const UnicodeString& s) const; - - /** - * Returns the length of the initial substring of the input string which - * consists only of characters and strings that are contained in this set - * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE), - * or only of characters and strings that are not contained - * in this set (USET_SPAN_NOT_CONTAINED). - * See USetSpanCondition for details. - * Similar to the strspn() C library function. - * Unpaired surrogates are treated according to contains() of their surrogate code points. - * This function works faster with a frozen set and with a non-negative string length argument. - * @param s start of the string - * @param length of the string; can be -1 for NUL-terminated - * @param spanCondition specifies the containment condition - * @return the length of the initial substring according to the spanCondition; - * 0 if the start of the string does not fit the spanCondition - * @stable ICU 3.8 - * @see USetSpanCondition - */ - int32_t span(const char16_t *s, int32_t length, USetSpanCondition spanCondition) const; - - /** - * Returns the end of the substring of the input string according to the USetSpanCondition. - * Same as start+span(s.getBuffer()+start, s.length()-start, spanCondition) - * after pinning start to 0<=start<=s.length(). - * @param s the string - * @param start the start index in the string for the span operation - * @param spanCondition specifies the containment condition - * @return the exclusive end of the substring according to the spanCondition; - * the substring s.tempSubStringBetween(start, end) fulfills the spanCondition - * @stable ICU 4.4 - * @see USetSpanCondition - */ - inline int32_t span(const UnicodeString &s, int32_t start, USetSpanCondition spanCondition) const; - - /** - * Returns the start of the trailing substring of the input string which - * consists only of characters and strings that are contained in this set - * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE), - * or only of characters and strings that are not contained - * in this set (USET_SPAN_NOT_CONTAINED). - * See USetSpanCondition for details. - * Unpaired surrogates are treated according to contains() of their surrogate code points. - * This function works faster with a frozen set and with a non-negative string length argument. - * @param s start of the string - * @param length of the string; can be -1 for NUL-terminated - * @param spanCondition specifies the containment condition - * @return the start of the trailing substring according to the spanCondition; - * the string length if the end of the string does not fit the spanCondition - * @stable ICU 3.8 - * @see USetSpanCondition - */ - int32_t spanBack(const char16_t *s, int32_t length, USetSpanCondition spanCondition) const; - - /** - * Returns the start of the substring of the input string according to the USetSpanCondition. - * Same as spanBack(s.getBuffer(), limit, spanCondition) - * after pinning limit to 0<=end<=s.length(). - * @param s the string - * @param limit the exclusive-end index in the string for the span operation - * (use s.length() or INT32_MAX for spanning back from the end of the string) - * @param spanCondition specifies the containment condition - * @return the start of the substring according to the spanCondition; - * the substring s.tempSubStringBetween(start, limit) fulfills the spanCondition - * @stable ICU 4.4 - * @see USetSpanCondition - */ - inline int32_t spanBack(const UnicodeString &s, int32_t limit, USetSpanCondition spanCondition) const; - - /** - * Returns the length of the initial substring of the input string which - * consists only of characters and strings that are contained in this set - * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE), - * or only of characters and strings that are not contained - * in this set (USET_SPAN_NOT_CONTAINED). - * See USetSpanCondition for details. - * Similar to the strspn() C library function. - * Malformed byte sequences are treated according to contains(0xfffd). - * This function works faster with a frozen set and with a non-negative string length argument. - * @param s start of the string (UTF-8) - * @param length of the string; can be -1 for NUL-terminated - * @param spanCondition specifies the containment condition - * @return the length of the initial substring according to the spanCondition; - * 0 if the start of the string does not fit the spanCondition - * @stable ICU 3.8 - * @see USetSpanCondition - */ - int32_t spanUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const; - - /** - * Returns the start of the trailing substring of the input string which - * consists only of characters and strings that are contained in this set - * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE), - * or only of characters and strings that are not contained - * in this set (USET_SPAN_NOT_CONTAINED). - * See USetSpanCondition for details. - * Malformed byte sequences are treated according to contains(0xfffd). - * This function works faster with a frozen set and with a non-negative string length argument. - * @param s start of the string (UTF-8) - * @param length of the string; can be -1 for NUL-terminated - * @param spanCondition specifies the containment condition - * @return the start of the trailing substring according to the spanCondition; - * the string length if the end of the string does not fit the spanCondition - * @stable ICU 3.8 - * @see USetSpanCondition - */ - int32_t spanBackUTF8(const char *s, int32_t length, USetSpanCondition spanCondition) const; - - /** - * Implement UnicodeMatcher::matches() - * @stable ICU 2.4 - */ - virtual UMatchDegree matches(const Replaceable& text, - int32_t& offset, - int32_t limit, - UBool incremental); - -private: - /** - * Returns the longest match for s in text at the given position. - * If limit > start then match forward from start+1 to limit - * matching all characters except s.charAt(0). If limit < start, - * go backward starting from start-1 matching all characters - * except s.charAt(s.length()-1). This method assumes that the - * first character, text.charAt(start), matches s, so it does not - * check it. - * @param text the text to match - * @param start the first character to match. In the forward - * direction, text.charAt(start) is matched against s.charAt(0). - * In the reverse direction, it is matched against - * s.charAt(s.length()-1). - * @param limit the limit offset for matching, either last+1 in - * the forward direction, or last-1 in the reverse direction, - * where last is the index of the last character to match. - * @param s - * @return If part of s matches up to the limit, return |limit - - * start|. If all of s matches before reaching the limit, return - * s.length(). If there is a mismatch between s and text, return - * 0 - */ - static int32_t matchRest(const Replaceable& text, - int32_t start, int32_t limit, - const UnicodeString& s); - - /** - * Returns the smallest value i such that c < list[i]. Caller - * must ensure that c is a legal value or this method will enter - * an infinite loop. This method performs a binary search. - * @param c a character in the range MIN_VALUE..MAX_VALUE - * inclusive - * @return the smallest integer i in the range 0..len-1, - * inclusive, such that c < list[i] - */ - int32_t findCodePoint(UChar32 c) const; - -public: - - /** - * Implementation of UnicodeMatcher API. Union the set of all - * characters that may be matched by this object into the given - * set. - * @param toUnionTo the set into which to union the source characters - * @stable ICU 2.4 - */ - virtual void addMatchSetTo(UnicodeSet& toUnionTo) const; - - /** - * Returns the index of the given character within this set, where - * the set is ordered by ascending code point. If the character - * is not in this set, return -1. The inverse of this method is - * charAt(). - * @return an index from 0..size()-1, or -1 - * @stable ICU 2.4 - */ - int32_t indexOf(UChar32 c) const; - - /** - * Returns the character at the given index within this set, where - * the set is ordered by ascending code point. If the index is - * out of range, return (UChar32)-1. The inverse of this method is - * indexOf(). - * @param index an index from 0..size()-1 - * @return the character at the given index, or (UChar32)-1. - * @stable ICU 2.4 - */ - UChar32 charAt(int32_t index) const; - - /** - * Adds the specified range to this set if it is not already - * present. If this set already contains the specified range, - * the call leaves this set unchanged. If end > start - * then an empty range is added, leaving the set unchanged. - * This is equivalent to a boolean logic OR, or a set UNION. - * A frozen set will not be modified. - * - * @param start first character, inclusive, of range to be added - * to this set. - * @param end last character, inclusive, of range to be added - * to this set. - * @stable ICU 2.0 - */ - virtual UnicodeSet& add(UChar32 start, UChar32 end); - - /** - * Adds the specified character to this set if it is not already - * present. If this set already contains the specified character, - * the call leaves this set unchanged. - * A frozen set will not be modified. - * @stable ICU 2.0 - */ - UnicodeSet& add(UChar32 c); - - /** - * Adds the specified multicharacter to this set if it is not already - * present. If this set already contains the multicharacter, - * the call leaves this set unchanged. - * Thus "ch" => {"ch"} - *
Warning: you cannot add an empty string ("") to a UnicodeSet. - * A frozen set will not be modified. - * @param s the source string - * @return this object, for chaining - * @stable ICU 2.4 - */ - UnicodeSet& add(const UnicodeString& s); - - private: - /** - * @return a code point IF the string consists of a single one. - * otherwise returns -1. - * @param s string to test - */ - static int32_t getSingleCP(const UnicodeString& s); - - void _add(const UnicodeString& s); - - public: - /** - * Adds each of the characters in this string to the set. Thus "ch" => {"c", "h"} - * If this set already any particular character, it has no effect on that character. - * A frozen set will not be modified. - * @param s the source string - * @return this object, for chaining - * @stable ICU 2.4 - */ - UnicodeSet& addAll(const UnicodeString& s); - - /** - * Retains EACH of the characters in this string. Note: "ch" == {"c", "h"} - * If this set already any particular character, it has no effect on that character. - * A frozen set will not be modified. - * @param s the source string - * @return this object, for chaining - * @stable ICU 2.4 - */ - UnicodeSet& retainAll(const UnicodeString& s); - - /** - * Complement EACH of the characters in this string. Note: "ch" == {"c", "h"} - * If this set already any particular character, it has no effect on that character. - * A frozen set will not be modified. - * @param s the source string - * @return this object, for chaining - * @stable ICU 2.4 - */ - UnicodeSet& complementAll(const UnicodeString& s); - - /** - * Remove EACH of the characters in this string. Note: "ch" == {"c", "h"} - * If this set already any particular character, it has no effect on that character. - * A frozen set will not be modified. - * @param s the source string - * @return this object, for chaining - * @stable ICU 2.4 - */ - UnicodeSet& removeAll(const UnicodeString& s); - - /** - * Makes a set from a multicharacter string. Thus "ch" => {"ch"} - *
Warning: you cannot add an empty string ("") to a UnicodeSet. - * @param s the source string - * @return a newly created set containing the given string. - * The caller owns the return object and is responsible for deleting it. - * @stable ICU 2.4 - */ - static UnicodeSet* U_EXPORT2 createFrom(const UnicodeString& s); - - - /** - * Makes a set from each of the characters in the string. Thus "ch" => {"c", "h"} - * @param s the source string - * @return a newly created set containing the given characters - * The caller owns the return object and is responsible for deleting it. - * @stable ICU 2.4 - */ - static UnicodeSet* U_EXPORT2 createFromAll(const UnicodeString& s); - - /** - * Retain only the elements in this set that are contained in the - * specified range. If end > start then an empty range is - * retained, leaving the set empty. This is equivalent to - * a boolean logic AND, or a set INTERSECTION. - * A frozen set will not be modified. - * - * @param start first character, inclusive, of range to be retained - * to this set. - * @param end last character, inclusive, of range to be retained - * to this set. - * @stable ICU 2.0 - */ - virtual UnicodeSet& retain(UChar32 start, UChar32 end); - - - /** - * Retain the specified character from this set if it is present. - * A frozen set will not be modified. - * @stable ICU 2.0 - */ - UnicodeSet& retain(UChar32 c); - - /** - * Removes the specified range from this set if it is present. - * The set will not contain the specified range once the call - * returns. If end > start then an empty range is - * removed, leaving the set unchanged. - * A frozen set will not be modified. - * - * @param start first character, inclusive, of range to be removed - * from this set. - * @param end last character, inclusive, of range to be removed - * from this set. - * @stable ICU 2.0 - */ - virtual UnicodeSet& remove(UChar32 start, UChar32 end); - - /** - * Removes the specified character from this set if it is present. - * The set will not contain the specified range once the call - * returns. - * A frozen set will not be modified. - * @stable ICU 2.0 - */ - UnicodeSet& remove(UChar32 c); - - /** - * Removes the specified string from this set if it is present. - * The set will not contain the specified character once the call - * returns. - * A frozen set will not be modified. - * @param s the source string - * @return this object, for chaining - * @stable ICU 2.4 - */ - UnicodeSet& remove(const UnicodeString& s); - - /** - * Inverts this set. This operation modifies this set so that - * its value is its complement. This is equivalent to - * complement(MIN_VALUE, MAX_VALUE). - * A frozen set will not be modified. - * @stable ICU 2.0 - */ - virtual UnicodeSet& complement(void); - - /** - * Complements the specified range in this set. Any character in - * the range will be removed if it is in this set, or will be - * added if it is not in this set. If end > start - * then an empty range is complemented, leaving the set unchanged. - * This is equivalent to a boolean logic XOR. - * A frozen set will not be modified. - * - * @param start first character, inclusive, of range to be removed - * from this set. - * @param end last character, inclusive, of range to be removed - * from this set. - * @stable ICU 2.0 - */ - virtual UnicodeSet& complement(UChar32 start, UChar32 end); - - /** - * Complements the specified character in this set. The character - * will be removed if it is in this set, or will be added if it is - * not in this set. - * A frozen set will not be modified. - * @stable ICU 2.0 - */ - UnicodeSet& complement(UChar32 c); - - /** - * Complement the specified string in this set. - * The set will not contain the specified string once the call - * returns. - *
Warning: you cannot add an empty string ("") to a UnicodeSet. - * A frozen set will not be modified. - * @param s the string to complement - * @return this object, for chaining - * @stable ICU 2.4 - */ - UnicodeSet& complement(const UnicodeString& s); - - /** - * Adds all of the elements in the specified set to this set if - * they're not already present. This operation effectively - * modifies this set so that its value is the union of the two - * sets. The behavior of this operation is unspecified if the specified - * collection is modified while the operation is in progress. - * A frozen set will not be modified. - * - * @param c set whose elements are to be added to this set. - * @see #add(UChar32, UChar32) - * @stable ICU 2.0 - */ - virtual UnicodeSet& addAll(const UnicodeSet& c); - - /** - * Retains only the elements in this set that are contained in the - * specified set. In other words, removes from this set all of - * its elements that are not contained in the specified set. This - * operation effectively modifies this set so that its value is - * the intersection of the two sets. - * A frozen set will not be modified. - * - * @param c set that defines which elements this set will retain. - * @stable ICU 2.0 - */ - virtual UnicodeSet& retainAll(const UnicodeSet& c); - - /** - * Removes from this set all of its elements that are contained in the - * specified set. This operation effectively modifies this - * set so that its value is the asymmetric set difference of - * the two sets. - * A frozen set will not be modified. - * - * @param c set that defines which elements will be removed from - * this set. - * @stable ICU 2.0 - */ - virtual UnicodeSet& removeAll(const UnicodeSet& c); - - /** - * Complements in this set all elements contained in the specified - * set. Any character in the other set will be removed if it is - * in this set, or will be added if it is not in this set. - * A frozen set will not be modified. - * - * @param c set that defines which elements will be xor'ed from - * this set. - * @stable ICU 2.4 - */ - virtual UnicodeSet& complementAll(const UnicodeSet& c); - - /** - * Removes all of the elements from this set. This set will be - * empty after this call returns. - * A frozen set will not be modified. - * @stable ICU 2.0 - */ - virtual UnicodeSet& clear(void); - - /** - * Close this set over the given attribute. For the attribute - * USET_CASE, the result is to modify this set so that: - * - * 1. For each character or string 'a' in this set, all strings or - * characters 'b' such that foldCase(a) == foldCase(b) are added - * to this set. - * - * 2. For each string 'e' in the resulting set, if e != - * foldCase(e), 'e' will be removed. - * - * Example: [aq\\u00DF{Bc}{bC}{Fi}] => [aAqQ\\u00DF\\uFB01{ss}{bc}{fi}] - * - * (Here foldCase(x) refers to the operation u_strFoldCase, and a - * == b denotes that the contents are the same, not pointer - * comparison.) - * - * A frozen set will not be modified. - * - * @param attribute bitmask for attributes to close over. - * Currently only the USET_CASE bit is supported. Any undefined bits - * are ignored. - * @return a reference to this set. - * @stable ICU 4.2 - */ - UnicodeSet& closeOver(int32_t attribute); - - /** - * Remove all strings from this set. - * - * @return a reference to this set. - * @stable ICU 4.2 - */ - virtual UnicodeSet &removeAllStrings(); - - /** - * Iteration method that returns the number of ranges contained in - * this set. - * @see #getRangeStart - * @see #getRangeEnd - * @stable ICU 2.4 - */ - virtual int32_t getRangeCount(void) const; - - /** - * Iteration method that returns the first character in the - * specified range of this set. - * @see #getRangeCount - * @see #getRangeEnd - * @stable ICU 2.4 - */ - virtual UChar32 getRangeStart(int32_t index) const; - - /** - * Iteration method that returns the last character in the - * specified range of this set. - * @see #getRangeStart - * @see #getRangeEnd - * @stable ICU 2.4 - */ - virtual UChar32 getRangeEnd(int32_t index) const; - - /** - * Serializes this set into an array of 16-bit integers. Serialization - * (currently) only records the characters in the set; multicharacter - * strings are ignored. - * - * The array has following format (each line is one 16-bit - * integer): - * - * length = (n+2*m) | (m!=0?0x8000:0) - * bmpLength = n; present if m!=0 - * bmp[0] - * bmp[1] - * ... - * bmp[n-1] - * supp-high[0] - * supp-low[0] - * supp-high[1] - * supp-low[1] - * ... - * supp-high[m-1] - * supp-low[m-1] - * - * The array starts with a header. After the header are n bmp - * code points, then m supplementary code points. Either n or m - * or both may be zero. n+2*m is always <= 0x7FFF. - * - * If there are no supplementary characters (if m==0) then the - * header is one 16-bit integer, 'length', with value n. - * - * If there are supplementary characters (if m!=0) then the header - * is two 16-bit integers. The first, 'length', has value - * (n+2*m)|0x8000. The second, 'bmpLength', has value n. - * - * After the header the code points are stored in ascending order. - * Supplementary code points are stored as most significant 16 - * bits followed by least significant 16 bits. - * - * @param dest pointer to buffer of destCapacity 16-bit integers. - * May be NULL only if destCapacity is zero. - * @param destCapacity size of dest, or zero. Must not be negative. - * @param ec error code. Will be set to U_INDEX_OUTOFBOUNDS_ERROR - * if n+2*m > 0x7FFF. Will be set to U_BUFFER_OVERFLOW_ERROR if - * n+2*m+(m!=0?2:1) > destCapacity. - * @return the total length of the serialized format, including - * the header, that is, n+2*m+(m!=0?2:1), or 0 on error other - * than U_BUFFER_OVERFLOW_ERROR. - * @stable ICU 2.4 - */ - int32_t serialize(uint16_t *dest, int32_t destCapacity, UErrorCode& ec) const; - - /** - * Reallocate this objects internal structures to take up the least - * possible space, without changing this object's value. - * A frozen set will not be modified. - * @stable ICU 2.4 - */ - virtual UnicodeSet& compact(); - - /** - * Return the class ID for this class. This is useful only for - * comparing to a return value from getDynamicClassID(). For example: - *

-     * .      Base* polymorphic_pointer = createPolymorphicObject();
-     * .      if (polymorphic_pointer->getDynamicClassID() ==
-     * .          Derived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Implement UnicodeFunctor API. - * - * @return The class ID for this object. All objects of a given - * class have the same class ID. Objects of other classes have - * different class IDs. - * @stable ICU 2.4 - */ - virtual UClassID getDynamicClassID(void) const; - -private: - - // Private API for the USet API - - friend class USetAccess; - - const UnicodeString* getString(int32_t index) const; - - //---------------------------------------------------------------- - // RuleBasedTransliterator support - //---------------------------------------------------------------- - -private: - - /** - * Returns true if this set contains any character whose low byte - * is the given value. This is used by RuleBasedTransliterator for - * indexing. - */ - virtual UBool matchesIndexValue(uint8_t v) const; - -private: - friend class RBBIRuleScanner; - friend class RBBIRuleScanner57; - - //---------------------------------------------------------------- - // Implementation: Clone as thawed (see ICU4J Freezable) - //---------------------------------------------------------------- - - UnicodeSet(const UnicodeSet& o, UBool /* asThawed */); - UnicodeSet& copyFrom(const UnicodeSet& o, UBool asThawed); - - //---------------------------------------------------------------- - // Implementation: Pattern parsing - //---------------------------------------------------------------- - - void applyPatternIgnoreSpace(const UnicodeString& pattern, - ParsePosition& pos, - const SymbolTable* symbols, - UErrorCode& status); - - void applyPattern(RuleCharacterIterator& chars, - const SymbolTable* symbols, - UnicodeString& rebuiltPat, - uint32_t options, - UnicodeSet& (UnicodeSet::*caseClosure)(int32_t attribute), - int32_t depth, - UErrorCode& ec); - - //---------------------------------------------------------------- - // Implementation: Utility methods - //---------------------------------------------------------------- - - static int32_t nextCapacity(int32_t minCapacity); - - bool ensureCapacity(int32_t newLen); - - bool ensureBufferCapacity(int32_t newLen); - - void swapBuffers(void); - - UBool allocateStrings(UErrorCode &status); - UBool hasStrings() const; - int32_t stringsSize() const; - UBool stringsContains(const UnicodeString &s) const; - - UnicodeString& _toPattern(UnicodeString& result, - UBool escapeUnprintable) const; - - UnicodeString& _generatePattern(UnicodeString& result, - UBool escapeUnprintable) const; - - static void _appendToPat(UnicodeString& buf, const UnicodeString& s, UBool escapeUnprintable); - - static void _appendToPat(UnicodeString& buf, UChar32 c, UBool escapeUnprintable); - - //---------------------------------------------------------------- - // Implementation: Fundamental operators - //---------------------------------------------------------------- - - void exclusiveOr(const UChar32* other, int32_t otherLen, int8_t polarity); - - void add(const UChar32* other, int32_t otherLen, int8_t polarity); - - void retain(const UChar32* other, int32_t otherLen, int8_t polarity); - - /** - * Return true if the given position, in the given pattern, appears - * to be the start of a property set pattern [:foo:], \\p{foo}, or - * \\P{foo}, or \\N{name}. - */ - static UBool resemblesPropertyPattern(const UnicodeString& pattern, - int32_t pos); - - static UBool resemblesPropertyPattern(RuleCharacterIterator& chars, - int32_t iterOpts); - - /** - * Parse the given property pattern at the given parse position - * and set this UnicodeSet to the result. - * - * The original design document is out of date, but still useful. - * Ignore the property and value names: - * http://source.icu-project.org/repos/icu/icuhtml/trunk/design/unicodeset_properties.html - * - * Recognized syntax: - * - * [:foo:] [:^foo:] - white space not allowed within "[:" or ":]" - * \\p{foo} \\P{foo} - white space not allowed within "\\p" or "\\P" - * \\N{name} - white space not allowed within "\\N" - * - * Other than the above restrictions, Unicode Pattern_White_Space characters are ignored. - * Case is ignored except in "\\p" and "\\P" and "\\N". In 'name' leading - * and trailing space is deleted, and internal runs of whitespace - * are collapsed to a single space. - * - * We support binary properties, enumerated properties, and the - * following non-enumerated properties: - * - * Numeric_Value - * Name - * Unicode_1_Name - * - * @param pattern the pattern string - * @param ppos on entry, the position at which to begin parsing. - * This should be one of the locations marked '^': - * - * [:blah:] \\p{blah} \\P{blah} \\N{name} - * ^ % ^ % ^ % ^ % - * - * On return, the position after the last character parsed, that is, - * the locations marked '%'. If the parse fails, ppos is returned - * unchanged. - * @param ec status - * @return a reference to this. - */ - UnicodeSet& applyPropertyPattern(const UnicodeString& pattern, - ParsePosition& ppos, - UErrorCode &ec); - - void applyPropertyPattern(RuleCharacterIterator& chars, - UnicodeString& rebuiltPat, - UErrorCode& ec); - - static const UnicodeSet* getInclusions(int32_t src, UErrorCode &status); - - /** - * A filter that returns TRUE if the given code point should be - * included in the UnicodeSet being constructed. - */ - typedef UBool (*Filter)(UChar32 codePoint, void* context); - - /** - * Given a filter, set this UnicodeSet to the code points - * contained by that filter. The filter MUST be - * property-conformant. That is, if it returns value v for one - * code point, then it must return v for all affiliated code - * points, as defined by the inclusions list. See - * getInclusions(). - * src is a UPropertySource value. - */ - void applyFilter(Filter filter, - void* context, - const UnicodeSet* inclusions, - UErrorCode &status); - -#ifndef U_HIDE_DRAFT_API // Skipped: ucpmap.h is draft only. - void applyIntPropertyValue(const UCPMap *map, - UCPMapValueFilter *filter, const void *context, - UErrorCode &errorCode); -#endif /* U_HIDE_DRAFT_API */ - - /** - * Set the new pattern to cache. - */ - void setPattern(const UnicodeString& newPat) { - setPattern(newPat.getBuffer(), newPat.length()); - } - void setPattern(const char16_t *newPat, int32_t newPatLen); - /** - * Release existing cached pattern. - */ - void releasePattern(); - - friend class UnicodeSetIterator; -}; - - - -inline UBool UnicodeSet::operator!=(const UnicodeSet& o) const { - return !operator==(o); -} - -inline UBool UnicodeSet::isFrozen() const { - return (UBool)(bmpSet!=NULL || stringSpan!=NULL); -} - -inline UBool UnicodeSet::containsSome(UChar32 start, UChar32 end) const { - return !containsNone(start, end); -} - -inline UBool UnicodeSet::containsSome(const UnicodeSet& s) const { - return !containsNone(s); -} - -inline UBool UnicodeSet::containsSome(const UnicodeString& s) const { - return !containsNone(s); -} - -inline UBool UnicodeSet::isBogus() const { - return (UBool)(fFlags & kIsBogus); -} - -inline UnicodeSet *UnicodeSet::fromUSet(USet *uset) { - return reinterpret_cast(uset); -} - -inline const UnicodeSet *UnicodeSet::fromUSet(const USet *uset) { - return reinterpret_cast(uset); -} - -inline USet *UnicodeSet::toUSet() { - return reinterpret_cast(this); -} - -inline const USet *UnicodeSet::toUSet() const { - return reinterpret_cast(this); -} - -inline int32_t UnicodeSet::span(const UnicodeString &s, int32_t start, USetSpanCondition spanCondition) const { - int32_t sLength=s.length(); - if(start<0) { - start=0; - } else if(start>sLength) { - start=sLength; - } - return start+span(s.getBuffer()+start, sLength-start, spanCondition); -} - -inline int32_t UnicodeSet::spanBack(const UnicodeString &s, int32_t limit, USetSpanCondition spanCondition) const { - int32_t sLength=s.length(); - if(limit<0) { - limit=0; - } else if(limit>sLength) { - limit=sLength; - } - return spanBack(s.getBuffer(), limit, spanCondition); -} - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unistr.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unistr.h deleted file mode 100644 index 55739ac242..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unistr.h +++ /dev/null @@ -1,4757 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1998-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* -* File unistr.h -* -* Modification History: -* -* Date Name Description -* 09/25/98 stephen Creation. -* 11/11/98 stephen Changed per 11/9 code review. -* 04/20/99 stephen Overhauled per 4/16 code review. -* 11/18/99 aliu Made to inherit from Replaceable. Added method -* handleReplaceBetween(); other methods unchanged. -* 06/25/01 grhoten Remove dependency on iostream. -****************************************************************************** -*/ - -#ifndef UNISTR_H -#define UNISTR_H - -/** - * \file - * \brief C++ API: Unicode String - */ - -#include -#include "unicode/utypes.h" -#include "unicode/char16ptr.h" -#include "unicode/rep.h" -#include "unicode/std_string.h" -#include "unicode/stringpiece.h" -#include "unicode/bytestream.h" - -struct UConverter; // unicode/ucnv.h - -#ifndef USTRING_H -/** - * \ingroup ustring_ustrlen - */ -U_STABLE int32_t U_EXPORT2 -u_strlen(const UChar *s); -#endif - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -#if !UCONFIG_NO_BREAK_ITERATION -class BreakIterator; // unicode/brkiter.h -#endif -class Edits; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#if U_SHOW_CPLUSPLUS_API -// Not #ifndef U_HIDE_INTERNAL_API because UnicodeString needs the UStringCaseMapper. -/** - * Internal string case mapping function type. - * All error checking must be done. - * src and dest must not overlap. - * @internal - */ -typedef int32_t U_CALLCONV -UStringCaseMapper(int32_t caseLocale, uint32_t options, -#if !UCONFIG_NO_BREAK_ITERATION - icu::BreakIterator *iter, -#endif - char16_t *dest, int32_t destCapacity, - const char16_t *src, int32_t srcLength, - icu::Edits *edits, - UErrorCode &errorCode); -#endif // U_SHOW_CPLUSPLUS_API - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class Locale; // unicode/locid.h -class StringCharacterIterator; -class UnicodeStringAppendable; // unicode/appendable.h - -/* The include has been moved to unicode/ustream.h */ - -/** - * Constant to be used in the UnicodeString(char *, int32_t, EInvariant) constructor - * which constructs a Unicode string from an invariant-character char * string. - * About invariant characters see utypes.h. - * This constructor has no runtime dependency on conversion code and is - * therefore recommended over ones taking a charset name string - * (where the empty string "" indicates invariant-character conversion). - * - * @stable ICU 3.2 - */ -#define US_INV icu::UnicodeString::kInvariant - -/** - * Unicode String literals in C++. - * - * Note: these macros are not recommended for new code. - * Prior to the availability of C++11 and u"unicode string literals", - * these macros were provided for portability and efficiency when - * initializing UnicodeStrings from literals. - * - * They work only for strings that contain "invariant characters", i.e., - * only latin letters, digits, and some punctuation. - * See utypes.h for details. - * - * The string parameter must be a C string literal. - * The length of the string, not including the terminating - * `NUL`, must be specified as a constant. - * @stable ICU 2.0 - */ -#if !U_CHAR16_IS_TYPEDEF -# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, u ## cs, _length) -#else -# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const char16_t*)u ## cs, _length) -#endif - -/** - * Unicode String literals in C++. - * Dependent on the platform properties, different UnicodeString - * constructors should be used to create a UnicodeString object from - * a string literal. - * The macros are defined for improved performance. - * They work only for strings that contain "invariant characters", i.e., - * only latin letters, digits, and some punctuation. - * See utypes.h for details. - * - * The string parameter must be a C string literal. - * @stable ICU 2.0 - */ -#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1) - -/** - * \def UNISTR_FROM_CHAR_EXPLICIT - * This can be defined to be empty or "explicit". - * If explicit, then the UnicodeString(char16_t) and UnicodeString(UChar32) - * constructors are marked as explicit, preventing their inadvertent use. - * @stable ICU 49 - */ -#ifndef UNISTR_FROM_CHAR_EXPLICIT -# if defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) - // Auto-"explicit" in ICU library code. -# define UNISTR_FROM_CHAR_EXPLICIT explicit -# else - // Empty by default for source code compatibility. -# define UNISTR_FROM_CHAR_EXPLICIT -# endif -#endif - -/** - * \def UNISTR_FROM_STRING_EXPLICIT - * This can be defined to be empty or "explicit". - * If explicit, then the UnicodeString(const char *) and UnicodeString(const char16_t *) - * constructors are marked as explicit, preventing their inadvertent use. - * - * In particular, this helps prevent accidentally depending on ICU conversion code - * by passing a string literal into an API with a const UnicodeString & parameter. - * @stable ICU 49 - */ -#ifndef UNISTR_FROM_STRING_EXPLICIT -# if defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) - // Auto-"explicit" in ICU library code. -# define UNISTR_FROM_STRING_EXPLICIT explicit -# else - // Empty by default for source code compatibility. -# define UNISTR_FROM_STRING_EXPLICIT -# endif -#endif - -/** - * \def UNISTR_OBJECT_SIZE - * Desired sizeof(UnicodeString) in bytes. - * It should be a multiple of sizeof(pointer) to avoid unusable space for padding. - * The object size may want to be a multiple of 16 bytes, - * which is a common granularity for heap allocation. - * - * Any space inside the object beyond sizeof(vtable pointer) + 2 - * is available for storing short strings inside the object. - * The bigger the object, the longer a string that can be stored inside the object, - * without additional heap allocation. - * - * Depending on a platform's pointer size, pointer alignment requirements, - * and struct padding, the compiler will usually round up sizeof(UnicodeString) - * to 4 * sizeof(pointer) (or 3 * sizeof(pointer) for P128 data models), - * to hold the fields for heap-allocated strings. - * Such a minimum size also ensures that the object is easily large enough - * to hold at least 2 char16_ts, for one supplementary code point (U16_MAX_LENGTH). - * - * sizeof(UnicodeString) >= 48 should work for all known platforms. - * - * For example, on a 64-bit machine where sizeof(vtable pointer) is 8, - * sizeof(UnicodeString) = 64 would leave space for - * (64 - sizeof(vtable pointer) - 2) / U_SIZEOF_UCHAR = (64 - 8 - 2) / 2 = 27 - * char16_ts stored inside the object. - * - * The minimum object size on a 64-bit machine would be - * 4 * sizeof(pointer) = 4 * 8 = 32 bytes, - * and the internal buffer would hold up to 11 char16_ts in that case. - * - * @see U16_MAX_LENGTH - * @stable ICU 56 - */ -#ifndef UNISTR_OBJECT_SIZE -# define UNISTR_OBJECT_SIZE 64 -#endif - -/** - * UnicodeString is a string class that stores Unicode characters directly and provides - * similar functionality as the Java String and StringBuffer/StringBuilder classes. - * It is a concrete implementation of the abstract class Replaceable (for transliteration). - * - * A UnicodeString may also "alias" an external array of characters - * (that is, point to it, rather than own the array) - * whose lifetime must then at least match the lifetime of the aliasing object. - * This aliasing may be preserved when returning a UnicodeString by value, - * depending on the compiler and the function implementation, - * via Return Value Optimization (RVO) or the move assignment operator. - * (However, the copy assignment operator does not preserve aliasing.) - * For details see the description of storage models at the end of the class API docs - * and in the User Guide chapter linked from there. - * - * The UnicodeString class is not suitable for subclassing. - * - * For an overview of Unicode strings in C and C++ see the - * [User Guide Strings chapter](http://userguide.icu-project.org/strings#TOC-Strings-in-C-C-). - * - * In ICU, a Unicode string consists of 16-bit Unicode *code units*. - * A Unicode character may be stored with either one code unit - * (the most common case) or with a matched pair of special code units - * ("surrogates"). The data type for code units is char16_t. - * For single-character handling, a Unicode character code *point* is a value - * in the range 0..0x10ffff. ICU uses the UChar32 type for code points. - * - * Indexes and offsets into and lengths of strings always count code units, not code points. - * This is the same as with multi-byte char* strings in traditional string handling. - * Operations on partial strings typically do not test for code point boundaries. - * If necessary, the user needs to take care of such boundaries by testing for the code unit - * values or by using functions like - * UnicodeString::getChar32Start() and UnicodeString::getChar32Limit() - * (or, in C, the equivalent macros U16_SET_CP_START() and U16_SET_CP_LIMIT(), see utf.h). - * - * UnicodeString methods are more lenient with regard to input parameter values - * than other ICU APIs. In particular: - * - If indexes are out of bounds for a UnicodeString object - * (< 0 or > length()) then they are "pinned" to the nearest boundary. - * - If the buffer passed to an insert/append/replace operation is owned by the - * target object, e.g., calling str.append(str), an extra copy may take place - * to ensure safety. - * - If primitive string pointer values (e.g., const char16_t * or char *) - * for input strings are NULL, then those input string parameters are treated - * as if they pointed to an empty string. - * However, this is *not* the case for char * parameters for charset names - * or other IDs. - * - Most UnicodeString methods do not take a UErrorCode parameter because - * there are usually very few opportunities for failure other than a shortage - * of memory, error codes in low-level C++ string methods would be inconvenient, - * and the error code as the last parameter (ICU convention) would prevent - * the use of default parameter values. - * Instead, such methods set the UnicodeString into a "bogus" state - * (see isBogus()) if an error occurs. - * - * In string comparisons, two UnicodeString objects that are both "bogus" - * compare equal (to be transitive and prevent endless loops in sorting), - * and a "bogus" string compares less than any non-"bogus" one. - * - * Const UnicodeString methods are thread-safe. Multiple threads can use - * const methods on the same UnicodeString object simultaneously, - * but non-const methods must not be called concurrently (in multiple threads) - * with any other (const or non-const) methods. - * - * Similarly, const UnicodeString & parameters are thread-safe. - * One object may be passed in as such a parameter concurrently in multiple threads. - * This includes the const UnicodeString & parameters for - * copy construction, assignment, and cloning. - * - * UnicodeString uses several storage methods. - * String contents can be stored inside the UnicodeString object itself, - * in an allocated and shared buffer, or in an outside buffer that is "aliased". - * Most of this is done transparently, but careful aliasing in particular provides - * significant performance improvements. - * Also, the internal buffer is accessible via special functions. - * For details see the - * [User Guide Strings chapter](http://userguide.icu-project.org/strings#TOC-Maximizing-Performance-with-the-UnicodeString-Storage-Model). - * - * @see utf.h - * @see CharacterIterator - * @stable ICU 2.0 - */ -class U_COMMON_API UnicodeString : public Replaceable -{ -public: - - /** - * Constant to be used in the UnicodeString(char *, int32_t, EInvariant) constructor - * which constructs a Unicode string from an invariant-character char * string. - * Use the macro US_INV instead of the full qualification for this value. - * - * @see US_INV - * @stable ICU 3.2 - */ - enum EInvariant { - /** - * @see EInvariant - * @stable ICU 3.2 - */ - kInvariant - }; - - //======================================== - // Read-only operations - //======================================== - - /* Comparison - bitwise only - for international comparison use collation */ - - /** - * Equality operator. Performs only bitwise comparison. - * @param text The UnicodeString to compare to this one. - * @return TRUE if `text` contains the same characters as this one, - * FALSE otherwise. - * @stable ICU 2.0 - */ - inline UBool operator== (const UnicodeString& text) const; - - /** - * Inequality operator. Performs only bitwise comparison. - * @param text The UnicodeString to compare to this one. - * @return FALSE if `text` contains the same characters as this one, - * TRUE otherwise. - * @stable ICU 2.0 - */ - inline UBool operator!= (const UnicodeString& text) const; - - /** - * Greater than operator. Performs only bitwise comparison. - * @param text The UnicodeString to compare to this one. - * @return TRUE if the characters in this are bitwise - * greater than the characters in `text`, FALSE otherwise - * @stable ICU 2.0 - */ - inline UBool operator> (const UnicodeString& text) const; - - /** - * Less than operator. Performs only bitwise comparison. - * @param text The UnicodeString to compare to this one. - * @return TRUE if the characters in this are bitwise - * less than the characters in `text`, FALSE otherwise - * @stable ICU 2.0 - */ - inline UBool operator< (const UnicodeString& text) const; - - /** - * Greater than or equal operator. Performs only bitwise comparison. - * @param text The UnicodeString to compare to this one. - * @return TRUE if the characters in this are bitwise - * greater than or equal to the characters in `text`, FALSE otherwise - * @stable ICU 2.0 - */ - inline UBool operator>= (const UnicodeString& text) const; - - /** - * Less than or equal operator. Performs only bitwise comparison. - * @param text The UnicodeString to compare to this one. - * @return TRUE if the characters in this are bitwise - * less than or equal to the characters in `text`, FALSE otherwise - * @stable ICU 2.0 - */ - inline UBool operator<= (const UnicodeString& text) const; - - /** - * Compare the characters bitwise in this UnicodeString to - * the characters in `text`. - * @param text The UnicodeString to compare to this one. - * @return The result of bitwise character comparison: 0 if this - * contains the same characters as `text`, -1 if the characters in - * this are bitwise less than the characters in `text`, +1 if the - * characters in this are bitwise greater than the characters - * in `text`. - * @stable ICU 2.0 - */ - inline int8_t compare(const UnicodeString& text) const; - - /** - * Compare the characters bitwise in the range - * [`start`, `start + length`) with the characters - * in the **entire string** `text`. - * (The parameters "start" and "length" are not applied to the other text "text".) - * @param start the offset at which the compare operation begins - * @param length the number of characters of text to compare. - * @param text the other text to be compared against this string. - * @return The result of bitwise character comparison: 0 if this - * contains the same characters as `text`, -1 if the characters in - * this are bitwise less than the characters in `text`, +1 if the - * characters in this are bitwise greater than the characters - * in `text`. - * @stable ICU 2.0 - */ - inline int8_t compare(int32_t start, - int32_t length, - const UnicodeString& text) const; - - /** - * Compare the characters bitwise in the range - * [`start`, `start + length`) with the characters - * in `srcText` in the range - * [`srcStart`, `srcStart + srcLength`). - * @param start the offset at which the compare operation begins - * @param length the number of characters in this to compare. - * @param srcText the text to be compared - * @param srcStart the offset into `srcText` to start comparison - * @param srcLength the number of characters in `src` to compare - * @return The result of bitwise character comparison: 0 if this - * contains the same characters as `srcText`, -1 if the characters in - * this are bitwise less than the characters in `srcText`, +1 if the - * characters in this are bitwise greater than the characters - * in `srcText`. - * @stable ICU 2.0 - */ - inline int8_t compare(int32_t start, - int32_t length, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) const; - - /** - * Compare the characters bitwise in this UnicodeString with the first - * `srcLength` characters in `srcChars`. - * @param srcChars The characters to compare to this UnicodeString. - * @param srcLength the number of characters in `srcChars` to compare - * @return The result of bitwise character comparison: 0 if this - * contains the same characters as `srcChars`, -1 if the characters in - * this are bitwise less than the characters in `srcChars`, +1 if the - * characters in this are bitwise greater than the characters - * in `srcChars`. - * @stable ICU 2.0 - */ - inline int8_t compare(ConstChar16Ptr srcChars, - int32_t srcLength) const; - - /** - * Compare the characters bitwise in the range - * [`start`, `start + length`) with the first - * `length` characters in `srcChars` - * @param start the offset at which the compare operation begins - * @param length the number of characters to compare. - * @param srcChars the characters to be compared - * @return The result of bitwise character comparison: 0 if this - * contains the same characters as `srcChars`, -1 if the characters in - * this are bitwise less than the characters in `srcChars`, +1 if the - * characters in this are bitwise greater than the characters - * in `srcChars`. - * @stable ICU 2.0 - */ - inline int8_t compare(int32_t start, - int32_t length, - const char16_t *srcChars) const; - - /** - * Compare the characters bitwise in the range - * [`start`, `start + length`) with the characters - * in `srcChars` in the range - * [`srcStart`, `srcStart + srcLength`). - * @param start the offset at which the compare operation begins - * @param length the number of characters in this to compare - * @param srcChars the characters to be compared - * @param srcStart the offset into `srcChars` to start comparison - * @param srcLength the number of characters in `srcChars` to compare - * @return The result of bitwise character comparison: 0 if this - * contains the same characters as `srcChars`, -1 if the characters in - * this are bitwise less than the characters in `srcChars`, +1 if the - * characters in this are bitwise greater than the characters - * in `srcChars`. - * @stable ICU 2.0 - */ - inline int8_t compare(int32_t start, - int32_t length, - const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength) const; - - /** - * Compare the characters bitwise in the range - * [`start`, `limit`) with the characters - * in `srcText` in the range - * [`srcStart`, `srcLimit`). - * @param start the offset at which the compare operation begins - * @param limit the offset immediately following the compare operation - * @param srcText the text to be compared - * @param srcStart the offset into `srcText` to start comparison - * @param srcLimit the offset into `srcText` to limit comparison - * @return The result of bitwise character comparison: 0 if this - * contains the same characters as `srcText`, -1 if the characters in - * this are bitwise less than the characters in `srcText`, +1 if the - * characters in this are bitwise greater than the characters - * in `srcText`. - * @stable ICU 2.0 - */ - inline int8_t compareBetween(int32_t start, - int32_t limit, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLimit) const; - - /** - * Compare two Unicode strings in code point order. - * The result may be different from the results of compare(), operator<, etc. - * if supplementary characters are present: - * - * In UTF-16, supplementary characters (with code points U+10000 and above) are - * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff, - * which means that they compare as less than some other BMP characters like U+feff. - * This function compares Unicode strings in code point order. - * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined. - * - * @param text Another string to compare this one to. - * @return a negative/zero/positive integer corresponding to whether - * this string is less than/equal to/greater than the second one - * in code point order - * @stable ICU 2.0 - */ - inline int8_t compareCodePointOrder(const UnicodeString& text) const; - - /** - * Compare two Unicode strings in code point order. - * The result may be different from the results of compare(), operator<, etc. - * if supplementary characters are present: - * - * In UTF-16, supplementary characters (with code points U+10000 and above) are - * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff, - * which means that they compare as less than some other BMP characters like U+feff. - * This function compares Unicode strings in code point order. - * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined. - * - * @param start The start offset in this string at which the compare operation begins. - * @param length The number of code units from this string to compare. - * @param srcText Another string to compare this one to. - * @return a negative/zero/positive integer corresponding to whether - * this string is less than/equal to/greater than the second one - * in code point order - * @stable ICU 2.0 - */ - inline int8_t compareCodePointOrder(int32_t start, - int32_t length, - const UnicodeString& srcText) const; - - /** - * Compare two Unicode strings in code point order. - * The result may be different from the results of compare(), operator<, etc. - * if supplementary characters are present: - * - * In UTF-16, supplementary characters (with code points U+10000 and above) are - * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff, - * which means that they compare as less than some other BMP characters like U+feff. - * This function compares Unicode strings in code point order. - * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined. - * - * @param start The start offset in this string at which the compare operation begins. - * @param length The number of code units from this string to compare. - * @param srcText Another string to compare this one to. - * @param srcStart The start offset in that string at which the compare operation begins. - * @param srcLength The number of code units from that string to compare. - * @return a negative/zero/positive integer corresponding to whether - * this string is less than/equal to/greater than the second one - * in code point order - * @stable ICU 2.0 - */ - inline int8_t compareCodePointOrder(int32_t start, - int32_t length, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) const; - - /** - * Compare two Unicode strings in code point order. - * The result may be different from the results of compare(), operator<, etc. - * if supplementary characters are present: - * - * In UTF-16, supplementary characters (with code points U+10000 and above) are - * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff, - * which means that they compare as less than some other BMP characters like U+feff. - * This function compares Unicode strings in code point order. - * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined. - * - * @param srcChars A pointer to another string to compare this one to. - * @param srcLength The number of code units from that string to compare. - * @return a negative/zero/positive integer corresponding to whether - * this string is less than/equal to/greater than the second one - * in code point order - * @stable ICU 2.0 - */ - inline int8_t compareCodePointOrder(ConstChar16Ptr srcChars, - int32_t srcLength) const; - - /** - * Compare two Unicode strings in code point order. - * The result may be different from the results of compare(), operator<, etc. - * if supplementary characters are present: - * - * In UTF-16, supplementary characters (with code points U+10000 and above) are - * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff, - * which means that they compare as less than some other BMP characters like U+feff. - * This function compares Unicode strings in code point order. - * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined. - * - * @param start The start offset in this string at which the compare operation begins. - * @param length The number of code units from this string to compare. - * @param srcChars A pointer to another string to compare this one to. - * @return a negative/zero/positive integer corresponding to whether - * this string is less than/equal to/greater than the second one - * in code point order - * @stable ICU 2.0 - */ - inline int8_t compareCodePointOrder(int32_t start, - int32_t length, - const char16_t *srcChars) const; - - /** - * Compare two Unicode strings in code point order. - * The result may be different from the results of compare(), operator<, etc. - * if supplementary characters are present: - * - * In UTF-16, supplementary characters (with code points U+10000 and above) are - * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff, - * which means that they compare as less than some other BMP characters like U+feff. - * This function compares Unicode strings in code point order. - * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined. - * - * @param start The start offset in this string at which the compare operation begins. - * @param length The number of code units from this string to compare. - * @param srcChars A pointer to another string to compare this one to. - * @param srcStart The start offset in that string at which the compare operation begins. - * @param srcLength The number of code units from that string to compare. - * @return a negative/zero/positive integer corresponding to whether - * this string is less than/equal to/greater than the second one - * in code point order - * @stable ICU 2.0 - */ - inline int8_t compareCodePointOrder(int32_t start, - int32_t length, - const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength) const; - - /** - * Compare two Unicode strings in code point order. - * The result may be different from the results of compare(), operator<, etc. - * if supplementary characters are present: - * - * In UTF-16, supplementary characters (with code points U+10000 and above) are - * stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff, - * which means that they compare as less than some other BMP characters like U+feff. - * This function compares Unicode strings in code point order. - * If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined. - * - * @param start The start offset in this string at which the compare operation begins. - * @param limit The offset after the last code unit from this string to compare. - * @param srcText Another string to compare this one to. - * @param srcStart The start offset in that string at which the compare operation begins. - * @param srcLimit The offset after the last code unit from that string to compare. - * @return a negative/zero/positive integer corresponding to whether - * this string is less than/equal to/greater than the second one - * in code point order - * @stable ICU 2.0 - */ - inline int8_t compareCodePointOrderBetween(int32_t start, - int32_t limit, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLimit) const; - - /** - * Compare two strings case-insensitively using full case folding. - * This is equivalent to this->foldCase(options).compare(text.foldCase(options)). - * - * @param text Another string to compare this one to. - * @param options A bit set of options: - * - U_FOLD_CASE_DEFAULT or 0 is used for default options: - * Comparison in code unit order with default case folding. - * - * - U_COMPARE_CODE_POINT_ORDER - * Set to choose code point order instead of code unit order - * (see u_strCompare for details). - * - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I - * - * @return A negative, zero, or positive integer indicating the comparison result. - * @stable ICU 2.0 - */ - inline int8_t caseCompare(const UnicodeString& text, uint32_t options) const; - - /** - * Compare two strings case-insensitively using full case folding. - * This is equivalent to this->foldCase(options).compare(srcText.foldCase(options)). - * - * @param start The start offset in this string at which the compare operation begins. - * @param length The number of code units from this string to compare. - * @param srcText Another string to compare this one to. - * @param options A bit set of options: - * - U_FOLD_CASE_DEFAULT or 0 is used for default options: - * Comparison in code unit order with default case folding. - * - * - U_COMPARE_CODE_POINT_ORDER - * Set to choose code point order instead of code unit order - * (see u_strCompare for details). - * - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I - * - * @return A negative, zero, or positive integer indicating the comparison result. - * @stable ICU 2.0 - */ - inline int8_t caseCompare(int32_t start, - int32_t length, - const UnicodeString& srcText, - uint32_t options) const; - - /** - * Compare two strings case-insensitively using full case folding. - * This is equivalent to this->foldCase(options).compare(srcText.foldCase(options)). - * - * @param start The start offset in this string at which the compare operation begins. - * @param length The number of code units from this string to compare. - * @param srcText Another string to compare this one to. - * @param srcStart The start offset in that string at which the compare operation begins. - * @param srcLength The number of code units from that string to compare. - * @param options A bit set of options: - * - U_FOLD_CASE_DEFAULT or 0 is used for default options: - * Comparison in code unit order with default case folding. - * - * - U_COMPARE_CODE_POINT_ORDER - * Set to choose code point order instead of code unit order - * (see u_strCompare for details). - * - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I - * - * @return A negative, zero, or positive integer indicating the comparison result. - * @stable ICU 2.0 - */ - inline int8_t caseCompare(int32_t start, - int32_t length, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength, - uint32_t options) const; - - /** - * Compare two strings case-insensitively using full case folding. - * This is equivalent to this->foldCase(options).compare(srcChars.foldCase(options)). - * - * @param srcChars A pointer to another string to compare this one to. - * @param srcLength The number of code units from that string to compare. - * @param options A bit set of options: - * - U_FOLD_CASE_DEFAULT or 0 is used for default options: - * Comparison in code unit order with default case folding. - * - * - U_COMPARE_CODE_POINT_ORDER - * Set to choose code point order instead of code unit order - * (see u_strCompare for details). - * - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I - * - * @return A negative, zero, or positive integer indicating the comparison result. - * @stable ICU 2.0 - */ - inline int8_t caseCompare(ConstChar16Ptr srcChars, - int32_t srcLength, - uint32_t options) const; - - /** - * Compare two strings case-insensitively using full case folding. - * This is equivalent to this->foldCase(options).compare(srcChars.foldCase(options)). - * - * @param start The start offset in this string at which the compare operation begins. - * @param length The number of code units from this string to compare. - * @param srcChars A pointer to another string to compare this one to. - * @param options A bit set of options: - * - U_FOLD_CASE_DEFAULT or 0 is used for default options: - * Comparison in code unit order with default case folding. - * - * - U_COMPARE_CODE_POINT_ORDER - * Set to choose code point order instead of code unit order - * (see u_strCompare for details). - * - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I - * - * @return A negative, zero, or positive integer indicating the comparison result. - * @stable ICU 2.0 - */ - inline int8_t caseCompare(int32_t start, - int32_t length, - const char16_t *srcChars, - uint32_t options) const; - - /** - * Compare two strings case-insensitively using full case folding. - * This is equivalent to this->foldCase(options).compare(srcChars.foldCase(options)). - * - * @param start The start offset in this string at which the compare operation begins. - * @param length The number of code units from this string to compare. - * @param srcChars A pointer to another string to compare this one to. - * @param srcStart The start offset in that string at which the compare operation begins. - * @param srcLength The number of code units from that string to compare. - * @param options A bit set of options: - * - U_FOLD_CASE_DEFAULT or 0 is used for default options: - * Comparison in code unit order with default case folding. - * - * - U_COMPARE_CODE_POINT_ORDER - * Set to choose code point order instead of code unit order - * (see u_strCompare for details). - * - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I - * - * @return A negative, zero, or positive integer indicating the comparison result. - * @stable ICU 2.0 - */ - inline int8_t caseCompare(int32_t start, - int32_t length, - const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength, - uint32_t options) const; - - /** - * Compare two strings case-insensitively using full case folding. - * This is equivalent to this->foldCase(options).compareBetween(text.foldCase(options)). - * - * @param start The start offset in this string at which the compare operation begins. - * @param limit The offset after the last code unit from this string to compare. - * @param srcText Another string to compare this one to. - * @param srcStart The start offset in that string at which the compare operation begins. - * @param srcLimit The offset after the last code unit from that string to compare. - * @param options A bit set of options: - * - U_FOLD_CASE_DEFAULT or 0 is used for default options: - * Comparison in code unit order with default case folding. - * - * - U_COMPARE_CODE_POINT_ORDER - * Set to choose code point order instead of code unit order - * (see u_strCompare for details). - * - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I - * - * @return A negative, zero, or positive integer indicating the comparison result. - * @stable ICU 2.0 - */ - inline int8_t caseCompareBetween(int32_t start, - int32_t limit, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLimit, - uint32_t options) const; - - /** - * Determine if this starts with the characters in `text` - * @param text The text to match. - * @return TRUE if this starts with the characters in `text`, - * FALSE otherwise - * @stable ICU 2.0 - */ - inline UBool startsWith(const UnicodeString& text) const; - - /** - * Determine if this starts with the characters in `srcText` - * in the range [`srcStart`, `srcStart + srcLength`). - * @param srcText The text to match. - * @param srcStart the offset into `srcText` to start matching - * @param srcLength the number of characters in `srcText` to match - * @return TRUE if this starts with the characters in `text`, - * FALSE otherwise - * @stable ICU 2.0 - */ - inline UBool startsWith(const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) const; - - /** - * Determine if this starts with the characters in `srcChars` - * @param srcChars The characters to match. - * @param srcLength the number of characters in `srcChars` - * @return TRUE if this starts with the characters in `srcChars`, - * FALSE otherwise - * @stable ICU 2.0 - */ - inline UBool startsWith(ConstChar16Ptr srcChars, - int32_t srcLength) const; - - /** - * Determine if this ends with the characters in `srcChars` - * in the range [`srcStart`, `srcStart + srcLength`). - * @param srcChars The characters to match. - * @param srcStart the offset into `srcText` to start matching - * @param srcLength the number of characters in `srcChars` to match - * @return TRUE if this ends with the characters in `srcChars`, FALSE otherwise - * @stable ICU 2.0 - */ - inline UBool startsWith(const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength) const; - - /** - * Determine if this ends with the characters in `text` - * @param text The text to match. - * @return TRUE if this ends with the characters in `text`, - * FALSE otherwise - * @stable ICU 2.0 - */ - inline UBool endsWith(const UnicodeString& text) const; - - /** - * Determine if this ends with the characters in `srcText` - * in the range [`srcStart`, `srcStart + srcLength`). - * @param srcText The text to match. - * @param srcStart the offset into `srcText` to start matching - * @param srcLength the number of characters in `srcText` to match - * @return TRUE if this ends with the characters in `text`, - * FALSE otherwise - * @stable ICU 2.0 - */ - inline UBool endsWith(const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) const; - - /** - * Determine if this ends with the characters in `srcChars` - * @param srcChars The characters to match. - * @param srcLength the number of characters in `srcChars` - * @return TRUE if this ends with the characters in `srcChars`, - * FALSE otherwise - * @stable ICU 2.0 - */ - inline UBool endsWith(ConstChar16Ptr srcChars, - int32_t srcLength) const; - - /** - * Determine if this ends with the characters in `srcChars` - * in the range [`srcStart`, `srcStart + srcLength`). - * @param srcChars The characters to match. - * @param srcStart the offset into `srcText` to start matching - * @param srcLength the number of characters in `srcChars` to match - * @return TRUE if this ends with the characters in `srcChars`, - * FALSE otherwise - * @stable ICU 2.0 - */ - inline UBool endsWith(const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength) const; - - - /* Searching - bitwise only */ - - /** - * Locate in this the first occurrence of the characters in `text`, - * using bitwise comparison. - * @param text The text to search for. - * @return The offset into this of the start of `text`, - * or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t indexOf(const UnicodeString& text) const; - - /** - * Locate in this the first occurrence of the characters in `text` - * starting at offset `start`, using bitwise comparison. - * @param text The text to search for. - * @param start The offset at which searching will start. - * @return The offset into this of the start of `text`, - * or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t indexOf(const UnicodeString& text, - int32_t start) const; - - /** - * Locate in this the first occurrence in the range - * [`start`, `start + length`) of the characters - * in `text`, using bitwise comparison. - * @param text The text to search for. - * @param start The offset at which searching will start. - * @param length The number of characters to search - * @return The offset into this of the start of `text`, - * or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t indexOf(const UnicodeString& text, - int32_t start, - int32_t length) const; - - /** - * Locate in this the first occurrence in the range - * [`start`, `start + length`) of the characters - * in `srcText` in the range - * [`srcStart`, `srcStart + srcLength`), - * using bitwise comparison. - * @param srcText The text to search for. - * @param srcStart the offset into `srcText` at which - * to start matching - * @param srcLength the number of characters in `srcText` to match - * @param start the offset into this at which to start matching - * @param length the number of characters in this to search - * @return The offset into this of the start of `text`, - * or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t indexOf(const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength, - int32_t start, - int32_t length) const; - - /** - * Locate in this the first occurrence of the characters in - * `srcChars` - * starting at offset `start`, using bitwise comparison. - * @param srcChars The text to search for. - * @param srcLength the number of characters in `srcChars` to match - * @param start the offset into this at which to start matching - * @return The offset into this of the start of `text`, - * or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t indexOf(const char16_t *srcChars, - int32_t srcLength, - int32_t start) const; - - /** - * Locate in this the first occurrence in the range - * [`start`, `start + length`) of the characters - * in `srcChars`, using bitwise comparison. - * @param srcChars The text to search for. - * @param srcLength the number of characters in `srcChars` - * @param start The offset at which searching will start. - * @param length The number of characters to search - * @return The offset into this of the start of `srcChars`, - * or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t indexOf(ConstChar16Ptr srcChars, - int32_t srcLength, - int32_t start, - int32_t length) const; - - /** - * Locate in this the first occurrence in the range - * [`start`, `start + length`) of the characters - * in `srcChars` in the range - * [`srcStart`, `srcStart + srcLength`), - * using bitwise comparison. - * @param srcChars The text to search for. - * @param srcStart the offset into `srcChars` at which - * to start matching - * @param srcLength the number of characters in `srcChars` to match - * @param start the offset into this at which to start matching - * @param length the number of characters in this to search - * @return The offset into this of the start of `text`, - * or -1 if not found. - * @stable ICU 2.0 - */ - int32_t indexOf(const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength, - int32_t start, - int32_t length) const; - - /** - * Locate in this the first occurrence of the BMP code point `c`, - * using bitwise comparison. - * @param c The code unit to search for. - * @return The offset into this of `c`, or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t indexOf(char16_t c) const; - - /** - * Locate in this the first occurrence of the code point `c`, - * using bitwise comparison. - * - * @param c The code point to search for. - * @return The offset into this of `c`, or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t indexOf(UChar32 c) const; - - /** - * Locate in this the first occurrence of the BMP code point `c`, - * starting at offset `start`, using bitwise comparison. - * @param c The code unit to search for. - * @param start The offset at which searching will start. - * @return The offset into this of `c`, or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t indexOf(char16_t c, - int32_t start) const; - - /** - * Locate in this the first occurrence of the code point `c` - * starting at offset `start`, using bitwise comparison. - * - * @param c The code point to search for. - * @param start The offset at which searching will start. - * @return The offset into this of `c`, or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t indexOf(UChar32 c, - int32_t start) const; - - /** - * Locate in this the first occurrence of the BMP code point `c` - * in the range [`start`, `start + length`), - * using bitwise comparison. - * @param c The code unit to search for. - * @param start the offset into this at which to start matching - * @param length the number of characters in this to search - * @return The offset into this of `c`, or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t indexOf(char16_t c, - int32_t start, - int32_t length) const; - - /** - * Locate in this the first occurrence of the code point `c` - * in the range [`start`, `start + length`), - * using bitwise comparison. - * - * @param c The code point to search for. - * @param start the offset into this at which to start matching - * @param length the number of characters in this to search - * @return The offset into this of `c`, or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t indexOf(UChar32 c, - int32_t start, - int32_t length) const; - - /** - * Locate in this the last occurrence of the characters in `text`, - * using bitwise comparison. - * @param text The text to search for. - * @return The offset into this of the start of `text`, - * or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t lastIndexOf(const UnicodeString& text) const; - - /** - * Locate in this the last occurrence of the characters in `text` - * starting at offset `start`, using bitwise comparison. - * @param text The text to search for. - * @param start The offset at which searching will start. - * @return The offset into this of the start of `text`, - * or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t lastIndexOf(const UnicodeString& text, - int32_t start) const; - - /** - * Locate in this the last occurrence in the range - * [`start`, `start + length`) of the characters - * in `text`, using bitwise comparison. - * @param text The text to search for. - * @param start The offset at which searching will start. - * @param length The number of characters to search - * @return The offset into this of the start of `text`, - * or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t lastIndexOf(const UnicodeString& text, - int32_t start, - int32_t length) const; - - /** - * Locate in this the last occurrence in the range - * [`start`, `start + length`) of the characters - * in `srcText` in the range - * [`srcStart`, `srcStart + srcLength`), - * using bitwise comparison. - * @param srcText The text to search for. - * @param srcStart the offset into `srcText` at which - * to start matching - * @param srcLength the number of characters in `srcText` to match - * @param start the offset into this at which to start matching - * @param length the number of characters in this to search - * @return The offset into this of the start of `text`, - * or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t lastIndexOf(const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength, - int32_t start, - int32_t length) const; - - /** - * Locate in this the last occurrence of the characters in `srcChars` - * starting at offset `start`, using bitwise comparison. - * @param srcChars The text to search for. - * @param srcLength the number of characters in `srcChars` to match - * @param start the offset into this at which to start matching - * @return The offset into this of the start of `text`, - * or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t lastIndexOf(const char16_t *srcChars, - int32_t srcLength, - int32_t start) const; - - /** - * Locate in this the last occurrence in the range - * [`start`, `start + length`) of the characters - * in `srcChars`, using bitwise comparison. - * @param srcChars The text to search for. - * @param srcLength the number of characters in `srcChars` - * @param start The offset at which searching will start. - * @param length The number of characters to search - * @return The offset into this of the start of `srcChars`, - * or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t lastIndexOf(ConstChar16Ptr srcChars, - int32_t srcLength, - int32_t start, - int32_t length) const; - - /** - * Locate in this the last occurrence in the range - * [`start`, `start + length`) of the characters - * in `srcChars` in the range - * [`srcStart`, `srcStart + srcLength`), - * using bitwise comparison. - * @param srcChars The text to search for. - * @param srcStart the offset into `srcChars` at which - * to start matching - * @param srcLength the number of characters in `srcChars` to match - * @param start the offset into this at which to start matching - * @param length the number of characters in this to search - * @return The offset into this of the start of `text`, - * or -1 if not found. - * @stable ICU 2.0 - */ - int32_t lastIndexOf(const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength, - int32_t start, - int32_t length) const; - - /** - * Locate in this the last occurrence of the BMP code point `c`, - * using bitwise comparison. - * @param c The code unit to search for. - * @return The offset into this of `c`, or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t lastIndexOf(char16_t c) const; - - /** - * Locate in this the last occurrence of the code point `c`, - * using bitwise comparison. - * - * @param c The code point to search for. - * @return The offset into this of `c`, or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t lastIndexOf(UChar32 c) const; - - /** - * Locate in this the last occurrence of the BMP code point `c` - * starting at offset `start`, using bitwise comparison. - * @param c The code unit to search for. - * @param start The offset at which searching will start. - * @return The offset into this of `c`, or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t lastIndexOf(char16_t c, - int32_t start) const; - - /** - * Locate in this the last occurrence of the code point `c` - * starting at offset `start`, using bitwise comparison. - * - * @param c The code point to search for. - * @param start The offset at which searching will start. - * @return The offset into this of `c`, or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t lastIndexOf(UChar32 c, - int32_t start) const; - - /** - * Locate in this the last occurrence of the BMP code point `c` - * in the range [`start`, `start + length`), - * using bitwise comparison. - * @param c The code unit to search for. - * @param start the offset into this at which to start matching - * @param length the number of characters in this to search - * @return The offset into this of `c`, or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t lastIndexOf(char16_t c, - int32_t start, - int32_t length) const; - - /** - * Locate in this the last occurrence of the code point `c` - * in the range [`start`, `start + length`), - * using bitwise comparison. - * - * @param c The code point to search for. - * @param start the offset into this at which to start matching - * @param length the number of characters in this to search - * @return The offset into this of `c`, or -1 if not found. - * @stable ICU 2.0 - */ - inline int32_t lastIndexOf(UChar32 c, - int32_t start, - int32_t length) const; - - - /* Character access */ - - /** - * Return the code unit at offset `offset`. - * If the offset is not valid (0..length()-1) then U+ffff is returned. - * @param offset a valid offset into the text - * @return the code unit at offset `offset` - * or 0xffff if the offset is not valid for this string - * @stable ICU 2.0 - */ - inline char16_t charAt(int32_t offset) const; - - /** - * Return the code unit at offset `offset`. - * If the offset is not valid (0..length()-1) then U+ffff is returned. - * @param offset a valid offset into the text - * @return the code unit at offset `offset` - * @stable ICU 2.0 - */ - inline char16_t operator[] (int32_t offset) const; - - /** - * Return the code point that contains the code unit - * at offset `offset`. - * If the offset is not valid (0..length()-1) then U+ffff is returned. - * @param offset a valid offset into the text - * that indicates the text offset of any of the code units - * that will be assembled into a code point (21-bit value) and returned - * @return the code point of text at `offset` - * or 0xffff if the offset is not valid for this string - * @stable ICU 2.0 - */ - UChar32 char32At(int32_t offset) const; - - /** - * Adjust a random-access offset so that - * it points to the beginning of a Unicode character. - * The offset that is passed in points to - * any code unit of a code point, - * while the returned offset will point to the first code unit - * of the same code point. - * In UTF-16, if the input offset points to a second surrogate - * of a surrogate pair, then the returned offset will point - * to the first surrogate. - * @param offset a valid offset into one code point of the text - * @return offset of the first code unit of the same code point - * @see U16_SET_CP_START - * @stable ICU 2.0 - */ - int32_t getChar32Start(int32_t offset) const; - - /** - * Adjust a random-access offset so that - * it points behind a Unicode character. - * The offset that is passed in points behind - * any code unit of a code point, - * while the returned offset will point behind the last code unit - * of the same code point. - * In UTF-16, if the input offset points behind the first surrogate - * (i.e., to the second surrogate) - * of a surrogate pair, then the returned offset will point - * behind the second surrogate (i.e., to the first surrogate). - * @param offset a valid offset after any code unit of a code point of the text - * @return offset of the first code unit after the same code point - * @see U16_SET_CP_LIMIT - * @stable ICU 2.0 - */ - int32_t getChar32Limit(int32_t offset) const; - - /** - * Move the code unit index along the string by delta code points. - * Interpret the input index as a code unit-based offset into the string, - * move the index forward or backward by delta code points, and - * return the resulting index. - * The input index should point to the first code unit of a code point, - * if there is more than one. - * - * Both input and output indexes are code unit-based as for all - * string indexes/offsets in ICU (and other libraries, like MBCS char*). - * If delta<0 then the index is moved backward (toward the start of the string). - * If delta>0 then the index is moved forward (toward the end of the string). - * - * This behaves like CharacterIterator::move32(delta, kCurrent). - * - * Behavior for out-of-bounds indexes: - * `moveIndex32` pins the input index to 0..length(), i.e., - * if the input index<0 then it is pinned to 0; - * if it is index>length() then it is pinned to length(). - * Afterwards, the index is moved by `delta` code points - * forward or backward, - * but no further backward than to 0 and no further forward than to length(). - * The resulting index return value will be in between 0 and length(), inclusively. - * - * Examples: - * \code - * // s has code points 'a' U+10000 'b' U+10ffff U+2029 - * UnicodeString s(u"a\U00010000b\U0010ffff\u2029"); - * - * // initial index: position of U+10000 - * int32_t index=1; - * - * // the following examples will all result in index==4, position of U+10ffff - * - * // skip 2 code points from some position in the string - * index=s.moveIndex32(index, 2); // skips U+10000 and 'b' - * - * // go to the 3rd code point from the start of s (0-based) - * index=s.moveIndex32(0, 3); // skips 'a', U+10000, and 'b' - * - * // go to the next-to-last code point of s - * index=s.moveIndex32(s.length(), -2); // backward-skips U+2029 and U+10ffff - * \endcode - * - * @param index input code unit index - * @param delta (signed) code point count to move the index forward or backward - * in the string - * @return the resulting code unit index - * @stable ICU 2.0 - */ - int32_t moveIndex32(int32_t index, int32_t delta) const; - - /* Substring extraction */ - - /** - * Copy the characters in the range - * [`start`, `start + length`) into the array `dst`, - * beginning at `dstStart`. - * If the string aliases to `dst` itself as an external buffer, - * then extract() will not copy the contents. - * - * @param start offset of first character which will be copied into the array - * @param length the number of characters to extract - * @param dst array in which to copy characters. The length of `dst` - * must be at least (`dstStart + length`). - * @param dstStart the offset in `dst` where the first character - * will be extracted - * @stable ICU 2.0 - */ - inline void extract(int32_t start, - int32_t length, - Char16Ptr dst, - int32_t dstStart = 0) const; - - /** - * Copy the contents of the string into dest. - * This is a convenience function that - * checks if there is enough space in dest, - * extracts the entire string if possible, - * and NUL-terminates dest if possible. - * - * If the string fits into dest but cannot be NUL-terminated - * (length()==destCapacity) then the error code is set to U_STRING_NOT_TERMINATED_WARNING. - * If the string itself does not fit into dest - * (length()>destCapacity) then the error code is set to U_BUFFER_OVERFLOW_ERROR. - * - * If the string aliases to `dest` itself as an external buffer, - * then extract() will not copy the contents. - * - * @param dest Destination string buffer. - * @param destCapacity Number of char16_ts available at dest. - * @param errorCode ICU error code. - * @return length() - * @stable ICU 2.0 - */ - int32_t - extract(Char16Ptr dest, int32_t destCapacity, - UErrorCode &errorCode) const; - - /** - * Copy the characters in the range - * [`start`, `start + length`) into the UnicodeString - * `target`. - * @param start offset of first character which will be copied - * @param length the number of characters to extract - * @param target UnicodeString into which to copy characters. - * @stable ICU 2.0 - */ - inline void extract(int32_t start, - int32_t length, - UnicodeString& target) const; - - /** - * Copy the characters in the range [`start`, `limit`) - * into the array `dst`, beginning at `dstStart`. - * @param start offset of first character which will be copied into the array - * @param limit offset immediately following the last character to be copied - * @param dst array in which to copy characters. The length of `dst` - * must be at least (`dstStart + (limit - start)`). - * @param dstStart the offset in `dst` where the first character - * will be extracted - * @stable ICU 2.0 - */ - inline void extractBetween(int32_t start, - int32_t limit, - char16_t *dst, - int32_t dstStart = 0) const; - - /** - * Copy the characters in the range [`start`, `limit`) - * into the UnicodeString `target`. Replaceable API. - * @param start offset of first character which will be copied - * @param limit offset immediately following the last character to be copied - * @param target UnicodeString into which to copy characters. - * @stable ICU 2.0 - */ - virtual void extractBetween(int32_t start, - int32_t limit, - UnicodeString& target) const; - - /** - * Copy the characters in the range - * [`start`, `start + startLength`) into an array of characters. - * All characters must be invariant (see utypes.h). - * Use US_INV as the last, signature-distinguishing parameter. - * - * This function does not write any more than `targetCapacity` - * characters but returns the length of the entire output string - * so that one can allocate a larger buffer and call the function again - * if necessary. - * The output string is NUL-terminated if possible. - * - * @param start offset of first character which will be copied - * @param startLength the number of characters to extract - * @param target the target buffer for extraction, can be NULL - * if targetLength is 0 - * @param targetCapacity the length of the target buffer - * @param inv Signature-distinguishing paramater, use US_INV. - * @return the output string length, not including the terminating NUL - * @stable ICU 3.2 - */ - int32_t extract(int32_t start, - int32_t startLength, - char *target, - int32_t targetCapacity, - enum EInvariant inv) const; - -#if U_CHARSET_IS_UTF8 || !UCONFIG_NO_CONVERSION - - /** - * Copy the characters in the range - * [`start`, `start + length`) into an array of characters - * in the platform's default codepage. - * This function does not write any more than `targetLength` - * characters but returns the length of the entire output string - * so that one can allocate a larger buffer and call the function again - * if necessary. - * The output string is NUL-terminated if possible. - * - * @param start offset of first character which will be copied - * @param startLength the number of characters to extract - * @param target the target buffer for extraction - * @param targetLength the length of the target buffer - * If `target` is NULL, then the number of bytes required for - * `target` is returned. - * @return the output string length, not including the terminating NUL - * @stable ICU 2.0 - */ - int32_t extract(int32_t start, - int32_t startLength, - char *target, - uint32_t targetLength) const; - -#endif - -#if !UCONFIG_NO_CONVERSION - - /** - * Copy the characters in the range - * [`start`, `start + length`) into an array of characters - * in a specified codepage. - * The output string is NUL-terminated. - * - * Recommendation: For invariant-character strings use - * extract(int32_t start, int32_t length, char *target, int32_t targetCapacity, enum EInvariant inv) const - * because it avoids object code dependencies of UnicodeString on - * the conversion code. - * - * @param start offset of first character which will be copied - * @param startLength the number of characters to extract - * @param target the target buffer for extraction - * @param codepage the desired codepage for the characters. 0 has - * the special meaning of the default codepage - * If `codepage` is an empty string (`""`), - * then a simple conversion is performed on the codepage-invariant - * subset ("invariant characters") of the platform encoding. See utypes.h. - * If `target` is NULL, then the number of bytes required for - * `target` is returned. It is assumed that the target is big enough - * to fit all of the characters. - * @return the output string length, not including the terminating NUL - * @stable ICU 2.0 - */ - inline int32_t extract(int32_t start, - int32_t startLength, - char *target, - const char *codepage = 0) const; - - /** - * Copy the characters in the range - * [`start`, `start + length`) into an array of characters - * in a specified codepage. - * This function does not write any more than `targetLength` - * characters but returns the length of the entire output string - * so that one can allocate a larger buffer and call the function again - * if necessary. - * The output string is NUL-terminated if possible. - * - * Recommendation: For invariant-character strings use - * extract(int32_t start, int32_t length, char *target, int32_t targetCapacity, enum EInvariant inv) const - * because it avoids object code dependencies of UnicodeString on - * the conversion code. - * - * @param start offset of first character which will be copied - * @param startLength the number of characters to extract - * @param target the target buffer for extraction - * @param targetLength the length of the target buffer - * @param codepage the desired codepage for the characters. 0 has - * the special meaning of the default codepage - * If `codepage` is an empty string (`""`), - * then a simple conversion is performed on the codepage-invariant - * subset ("invariant characters") of the platform encoding. See utypes.h. - * If `target` is NULL, then the number of bytes required for - * `target` is returned. - * @return the output string length, not including the terminating NUL - * @stable ICU 2.0 - */ - int32_t extract(int32_t start, - int32_t startLength, - char *target, - uint32_t targetLength, - const char *codepage) const; - - /** - * Convert the UnicodeString into a codepage string using an existing UConverter. - * The output string is NUL-terminated if possible. - * - * This function avoids the overhead of opening and closing a converter if - * multiple strings are extracted. - * - * @param dest destination string buffer, can be NULL if destCapacity==0 - * @param destCapacity the number of chars available at dest - * @param cnv the converter object to be used (ucnv_resetFromUnicode() will be called), - * or NULL for the default converter - * @param errorCode normal ICU error code - * @return the length of the output string, not counting the terminating NUL; - * if the length is greater than destCapacity, then the string will not fit - * and a buffer of the indicated length would need to be passed in - * @stable ICU 2.0 - */ - int32_t extract(char *dest, int32_t destCapacity, - UConverter *cnv, - UErrorCode &errorCode) const; - -#endif - - /** - * Create a temporary substring for the specified range. - * Unlike the substring constructor and setTo() functions, - * the object returned here will be a read-only alias (using getBuffer()) - * rather than copying the text. - * As a result, this substring operation is much faster but requires - * that the original string not be modified or deleted during the lifetime - * of the returned substring object. - * @param start offset of the first character visible in the substring - * @param length length of the substring - * @return a read-only alias UnicodeString object for the substring - * @stable ICU 4.4 - */ - UnicodeString tempSubString(int32_t start=0, int32_t length=INT32_MAX) const; - - /** - * Create a temporary substring for the specified range. - * Same as tempSubString(start, length) except that the substring range - * is specified as a (start, limit) pair (with an exclusive limit index) - * rather than a (start, length) pair. - * @param start offset of the first character visible in the substring - * @param limit offset immediately following the last character visible in the substring - * @return a read-only alias UnicodeString object for the substring - * @stable ICU 4.4 - */ - inline UnicodeString tempSubStringBetween(int32_t start, int32_t limit=INT32_MAX) const; - - /** - * Convert the UnicodeString to UTF-8 and write the result - * to a ByteSink. This is called by toUTF8String(). - * Unpaired surrogates are replaced with U+FFFD. - * Calls u_strToUTF8WithSub(). - * - * @param sink A ByteSink to which the UTF-8 version of the string is written. - * sink.Flush() is called at the end. - * @stable ICU 4.2 - * @see toUTF8String - */ - void toUTF8(ByteSink &sink) const; - - /** - * Convert the UnicodeString to UTF-8 and append the result - * to a standard string. - * Unpaired surrogates are replaced with U+FFFD. - * Calls toUTF8(). - * - * @param result A standard string (or a compatible object) - * to which the UTF-8 version of the string is appended. - * @return The string object. - * @stable ICU 4.2 - * @see toUTF8 - */ - template - StringClass &toUTF8String(StringClass &result) const { - StringByteSink sbs(&result, length()); - toUTF8(sbs); - return result; - } - - /** - * Convert the UnicodeString to UTF-32. - * Unpaired surrogates are replaced with U+FFFD. - * Calls u_strToUTF32WithSub(). - * - * @param utf32 destination string buffer, can be NULL if capacity==0 - * @param capacity the number of UChar32s available at utf32 - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return The length of the UTF-32 string. - * @see fromUTF32 - * @stable ICU 4.2 - */ - int32_t toUTF32(UChar32 *utf32, int32_t capacity, UErrorCode &errorCode) const; - - /* Length operations */ - - /** - * Return the length of the UnicodeString object. - * The length is the number of char16_t code units are in the UnicodeString. - * If you want the number of code points, please use countChar32(). - * @return the length of the UnicodeString object - * @see countChar32 - * @stable ICU 2.0 - */ - inline int32_t length(void) const; - - /** - * Count Unicode code points in the length char16_t code units of the string. - * A code point may occupy either one or two char16_t code units. - * Counting code points involves reading all code units. - * - * This functions is basically the inverse of moveIndex32(). - * - * @param start the index of the first code unit to check - * @param length the number of char16_t code units to check - * @return the number of code points in the specified code units - * @see length - * @stable ICU 2.0 - */ - int32_t - countChar32(int32_t start=0, int32_t length=INT32_MAX) const; - - /** - * Check if the length char16_t code units of the string - * contain more Unicode code points than a certain number. - * This is more efficient than counting all code points in this part of the string - * and comparing that number with a threshold. - * This function may not need to scan the string at all if the length - * falls within a certain range, and - * never needs to count more than 'number+1' code points. - * Logically equivalent to (countChar32(start, length)>number). - * A Unicode code point may occupy either one or two char16_t code units. - * - * @param start the index of the first code unit to check (0 for the entire string) - * @param length the number of char16_t code units to check - * (use INT32_MAX for the entire string; remember that start/length - * values are pinned) - * @param number The number of code points in the (sub)string is compared against - * the 'number' parameter. - * @return Boolean value for whether the string contains more Unicode code points - * than 'number'. Same as (u_countChar32(s, length)>number). - * @see countChar32 - * @see u_strHasMoreChar32Than - * @stable ICU 2.4 - */ - UBool - hasMoreChar32Than(int32_t start, int32_t length, int32_t number) const; - - /** - * Determine if this string is empty. - * @return TRUE if this string contains 0 characters, FALSE otherwise. - * @stable ICU 2.0 - */ - inline UBool isEmpty(void) const; - - /** - * Return the capacity of the internal buffer of the UnicodeString object. - * This is useful together with the getBuffer functions. - * See there for details. - * - * @return the number of char16_ts available in the internal buffer - * @see getBuffer - * @stable ICU 2.0 - */ - inline int32_t getCapacity(void) const; - - /* Other operations */ - - /** - * Generate a hash code for this object. - * @return The hash code of this UnicodeString. - * @stable ICU 2.0 - */ - inline int32_t hashCode(void) const; - - /** - * Determine if this object contains a valid string. - * A bogus string has no value. It is different from an empty string, - * although in both cases isEmpty() returns TRUE and length() returns 0. - * setToBogus() and isBogus() can be used to indicate that no string value is available. - * For a bogus string, getBuffer() and getTerminatedBuffer() return NULL, and - * length() returns 0. - * - * @return TRUE if the string is bogus/invalid, FALSE otherwise - * @see setToBogus() - * @stable ICU 2.0 - */ - inline UBool isBogus(void) const; - - - //======================================== - // Write operations - //======================================== - - /* Assignment operations */ - - /** - * Assignment operator. Replace the characters in this UnicodeString - * with the characters from `srcText`. - * - * Starting with ICU 2.4, the assignment operator and the copy constructor - * allocate a new buffer and copy the buffer contents even for readonly aliases. - * By contrast, the fastCopyFrom() function implements the old, - * more efficient but less safe behavior - * of making this string also a readonly alias to the same buffer. - * - * If the source object has an "open" buffer from getBuffer(minCapacity), - * then the copy is an empty string. - * - * @param srcText The text containing the characters to replace - * @return a reference to this - * @stable ICU 2.0 - * @see fastCopyFrom - */ - UnicodeString &operator=(const UnicodeString &srcText); - - /** - * Almost the same as the assignment operator. - * Replace the characters in this UnicodeString - * with the characters from `srcText`. - * - * This function works the same as the assignment operator - * for all strings except for ones that are readonly aliases. - * - * Starting with ICU 2.4, the assignment operator and the copy constructor - * allocate a new buffer and copy the buffer contents even for readonly aliases. - * This function implements the old, more efficient but less safe behavior - * of making this string also a readonly alias to the same buffer. - * - * The fastCopyFrom function must be used only if it is known that the lifetime of - * this UnicodeString does not exceed the lifetime of the aliased buffer - * including its contents, for example for strings from resource bundles - * or aliases to string constants. - * - * If the source object has an "open" buffer from getBuffer(minCapacity), - * then the copy is an empty string. - * - * @param src The text containing the characters to replace. - * @return a reference to this - * @stable ICU 2.4 - */ - UnicodeString &fastCopyFrom(const UnicodeString &src); - - /** - * Move assignment operator; might leave src in bogus state. - * This string will have the same contents and state that the source string had. - * The behavior is undefined if *this and src are the same object. - * @param src source string - * @return *this - * @stable ICU 56 - */ - UnicodeString &operator=(UnicodeString &&src) U_NOEXCEPT; - - /** - * Swap strings. - * @param other other string - * @stable ICU 56 - */ - void swap(UnicodeString &other) U_NOEXCEPT; - - /** - * Non-member UnicodeString swap function. - * @param s1 will get s2's contents and state - * @param s2 will get s1's contents and state - * @stable ICU 56 - */ - friend inline void U_EXPORT2 - swap(UnicodeString &s1, UnicodeString &s2) U_NOEXCEPT { - s1.swap(s2); - } - - /** - * Assignment operator. Replace the characters in this UnicodeString - * with the code unit `ch`. - * @param ch the code unit to replace - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& operator= (char16_t ch); - - /** - * Assignment operator. Replace the characters in this UnicodeString - * with the code point `ch`. - * @param ch the code point to replace - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& operator= (UChar32 ch); - - /** - * Set the text in the UnicodeString object to the characters - * in `srcText` in the range - * [`srcStart`, `srcText.length()`). - * `srcText` is not modified. - * @param srcText the source for the new characters - * @param srcStart the offset into `srcText` where new characters - * will be obtained - * @return a reference to this - * @stable ICU 2.2 - */ - inline UnicodeString& setTo(const UnicodeString& srcText, - int32_t srcStart); - - /** - * Set the text in the UnicodeString object to the characters - * in `srcText` in the range - * [`srcStart`, `srcStart + srcLength`). - * `srcText` is not modified. - * @param srcText the source for the new characters - * @param srcStart the offset into `srcText` where new characters - * will be obtained - * @param srcLength the number of characters in `srcText` in the - * replace string. - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& setTo(const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength); - - /** - * Set the text in the UnicodeString object to the characters in - * `srcText`. - * `srcText` is not modified. - * @param srcText the source for the new characters - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& setTo(const UnicodeString& srcText); - - /** - * Set the characters in the UnicodeString object to the characters - * in `srcChars`. `srcChars` is not modified. - * @param srcChars the source for the new characters - * @param srcLength the number of Unicode characters in srcChars. - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& setTo(const char16_t *srcChars, - int32_t srcLength); - - /** - * Set the characters in the UnicodeString object to the code unit - * `srcChar`. - * @param srcChar the code unit which becomes the UnicodeString's character - * content - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& setTo(char16_t srcChar); - - /** - * Set the characters in the UnicodeString object to the code point - * `srcChar`. - * @param srcChar the code point which becomes the UnicodeString's character - * content - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& setTo(UChar32 srcChar); - - /** - * Aliasing setTo() function, analogous to the readonly-aliasing char16_t* constructor. - * The text will be used for the UnicodeString object, but - * it will not be released when the UnicodeString is destroyed. - * This has copy-on-write semantics: - * When the string is modified, then the buffer is first copied into - * newly allocated memory. - * The aliased buffer is never modified. - * - * In an assignment to another UnicodeString, when using the copy constructor - * or the assignment operator, the text will be copied. - * When using fastCopyFrom(), the text will be aliased again, - * so that both strings then alias the same readonly-text. - * - * @param isTerminated specifies if `text` is `NUL`-terminated. - * This must be true if `textLength==-1`. - * @param text The characters to alias for the UnicodeString. - * @param textLength The number of Unicode characters in `text` to alias. - * If -1, then this constructor will determine the length - * by calling `u_strlen()`. - * @return a reference to this - * @stable ICU 2.0 - */ - UnicodeString &setTo(UBool isTerminated, - ConstChar16Ptr text, - int32_t textLength); - - /** - * Aliasing setTo() function, analogous to the writable-aliasing char16_t* constructor. - * The text will be used for the UnicodeString object, but - * it will not be released when the UnicodeString is destroyed. - * This has write-through semantics: - * For as long as the capacity of the buffer is sufficient, write operations - * will directly affect the buffer. When more capacity is necessary, then - * a new buffer will be allocated and the contents copied as with regularly - * constructed strings. - * In an assignment to another UnicodeString, the buffer will be copied. - * The extract(Char16Ptr dst) function detects whether the dst pointer is the same - * as the string buffer itself and will in this case not copy the contents. - * - * @param buffer The characters to alias for the UnicodeString. - * @param buffLength The number of Unicode characters in `buffer` to alias. - * @param buffCapacity The size of `buffer` in char16_ts. - * @return a reference to this - * @stable ICU 2.0 - */ - UnicodeString &setTo(char16_t *buffer, - int32_t buffLength, - int32_t buffCapacity); - - /** - * Make this UnicodeString object invalid. - * The string will test TRUE with isBogus(). - * - * A bogus string has no value. It is different from an empty string. - * It can be used to indicate that no string value is available. - * getBuffer() and getTerminatedBuffer() return NULL, and - * length() returns 0. - * - * This utility function is used throughout the UnicodeString - * implementation to indicate that a UnicodeString operation failed, - * and may be used in other functions, - * especially but not exclusively when such functions do not - * take a UErrorCode for simplicity. - * - * The following methods, and no others, will clear a string object's bogus flag: - * - remove() - * - remove(0, INT32_MAX) - * - truncate(0) - * - operator=() (assignment operator) - * - setTo(...) - * - * The simplest ways to turn a bogus string into an empty one - * is to use the remove() function. - * Examples for other functions that are equivalent to "set to empty string": - * \code - * if(s.isBogus()) { - * s.remove(); // set to an empty string (remove all), or - * s.remove(0, INT32_MAX); // set to an empty string (remove all), or - * s.truncate(0); // set to an empty string (complete truncation), or - * s=UnicodeString(); // assign an empty string, or - * s.setTo((UChar32)-1); // set to a pseudo code point that is out of range, or - * static const char16_t nul=0; - * s.setTo(&nul, 0); // set to an empty C Unicode string - * } - * \endcode - * - * @see isBogus() - * @stable ICU 2.0 - */ - void setToBogus(); - - /** - * Set the character at the specified offset to the specified character. - * @param offset A valid offset into the text of the character to set - * @param ch The new character - * @return A reference to this - * @stable ICU 2.0 - */ - UnicodeString& setCharAt(int32_t offset, - char16_t ch); - - - /* Append operations */ - - /** - * Append operator. Append the code unit `ch` to the UnicodeString - * object. - * @param ch the code unit to be appended - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& operator+= (char16_t ch); - - /** - * Append operator. Append the code point `ch` to the UnicodeString - * object. - * @param ch the code point to be appended - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& operator+= (UChar32 ch); - - /** - * Append operator. Append the characters in `srcText` to the - * UnicodeString object. `srcText` is not modified. - * @param srcText the source for the new characters - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& operator+= (const UnicodeString& srcText); - - /** - * Append the characters - * in `srcText` in the range - * [`srcStart`, `srcStart + srcLength`) to the - * UnicodeString object at offset `start`. `srcText` - * is not modified. - * @param srcText the source for the new characters - * @param srcStart the offset into `srcText` where new characters - * will be obtained - * @param srcLength the number of characters in `srcText` in - * the append string - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& append(const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength); - - /** - * Append the characters in `srcText` to the UnicodeString object. - * `srcText` is not modified. - * @param srcText the source for the new characters - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& append(const UnicodeString& srcText); - - /** - * Append the characters in `srcChars` in the range - * [`srcStart`, `srcStart + srcLength`) to the UnicodeString - * object at offset - * `start`. `srcChars` is not modified. - * @param srcChars the source for the new characters - * @param srcStart the offset into `srcChars` where new characters - * will be obtained - * @param srcLength the number of characters in `srcChars` in - * the append string; can be -1 if `srcChars` is NUL-terminated - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& append(const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength); - - /** - * Append the characters in `srcChars` to the UnicodeString object - * at offset `start`. `srcChars` is not modified. - * @param srcChars the source for the new characters - * @param srcLength the number of Unicode characters in `srcChars`; - * can be -1 if `srcChars` is NUL-terminated - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& append(ConstChar16Ptr srcChars, - int32_t srcLength); - - /** - * Append the code unit `srcChar` to the UnicodeString object. - * @param srcChar the code unit to append - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& append(char16_t srcChar); - - /** - * Append the code point `srcChar` to the UnicodeString object. - * @param srcChar the code point to append - * @return a reference to this - * @stable ICU 2.0 - */ - UnicodeString& append(UChar32 srcChar); - - - /* Insert operations */ - - /** - * Insert the characters in `srcText` in the range - * [`srcStart`, `srcStart + srcLength`) into the UnicodeString - * object at offset `start`. `srcText` is not modified. - * @param start the offset where the insertion begins - * @param srcText the source for the new characters - * @param srcStart the offset into `srcText` where new characters - * will be obtained - * @param srcLength the number of characters in `srcText` in - * the insert string - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& insert(int32_t start, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength); - - /** - * Insert the characters in `srcText` into the UnicodeString object - * at offset `start`. `srcText` is not modified. - * @param start the offset where the insertion begins - * @param srcText the source for the new characters - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& insert(int32_t start, - const UnicodeString& srcText); - - /** - * Insert the characters in `srcChars` in the range - * [`srcStart`, `srcStart + srcLength`) into the UnicodeString - * object at offset `start`. `srcChars` is not modified. - * @param start the offset at which the insertion begins - * @param srcChars the source for the new characters - * @param srcStart the offset into `srcChars` where new characters - * will be obtained - * @param srcLength the number of characters in `srcChars` - * in the insert string - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& insert(int32_t start, - const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength); - - /** - * Insert the characters in `srcChars` into the UnicodeString object - * at offset `start`. `srcChars` is not modified. - * @param start the offset where the insertion begins - * @param srcChars the source for the new characters - * @param srcLength the number of Unicode characters in srcChars. - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& insert(int32_t start, - ConstChar16Ptr srcChars, - int32_t srcLength); - - /** - * Insert the code unit `srcChar` into the UnicodeString object at - * offset `start`. - * @param start the offset at which the insertion occurs - * @param srcChar the code unit to insert - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& insert(int32_t start, - char16_t srcChar); - - /** - * Insert the code point `srcChar` into the UnicodeString object at - * offset `start`. - * @param start the offset at which the insertion occurs - * @param srcChar the code point to insert - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& insert(int32_t start, - UChar32 srcChar); - - - /* Replace operations */ - - /** - * Replace the characters in the range - * [`start`, `start + length`) with the characters in - * `srcText` in the range - * [`srcStart`, `srcStart + srcLength`). - * `srcText` is not modified. - * @param start the offset at which the replace operation begins - * @param length the number of characters to replace. The character at - * `start + length` is not modified. - * @param srcText the source for the new characters - * @param srcStart the offset into `srcText` where new characters - * will be obtained - * @param srcLength the number of characters in `srcText` in - * the replace string - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& replace(int32_t start, - int32_t length, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength); - - /** - * Replace the characters in the range - * [`start`, `start + length`) - * with the characters in `srcText`. `srcText` is - * not modified. - * @param start the offset at which the replace operation begins - * @param length the number of characters to replace. The character at - * `start + length` is not modified. - * @param srcText the source for the new characters - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& replace(int32_t start, - int32_t length, - const UnicodeString& srcText); - - /** - * Replace the characters in the range - * [`start`, `start + length`) with the characters in - * `srcChars` in the range - * [`srcStart`, `srcStart + srcLength`). `srcChars` - * is not modified. - * @param start the offset at which the replace operation begins - * @param length the number of characters to replace. The character at - * `start + length` is not modified. - * @param srcChars the source for the new characters - * @param srcStart the offset into `srcChars` where new characters - * will be obtained - * @param srcLength the number of characters in `srcChars` - * in the replace string - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& replace(int32_t start, - int32_t length, - const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength); - - /** - * Replace the characters in the range - * [`start`, `start + length`) with the characters in - * `srcChars`. `srcChars` is not modified. - * @param start the offset at which the replace operation begins - * @param length number of characters to replace. The character at - * `start + length` is not modified. - * @param srcChars the source for the new characters - * @param srcLength the number of Unicode characters in srcChars - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& replace(int32_t start, - int32_t length, - ConstChar16Ptr srcChars, - int32_t srcLength); - - /** - * Replace the characters in the range - * [`start`, `start + length`) with the code unit - * `srcChar`. - * @param start the offset at which the replace operation begins - * @param length the number of characters to replace. The character at - * `start + length` is not modified. - * @param srcChar the new code unit - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& replace(int32_t start, - int32_t length, - char16_t srcChar); - - /** - * Replace the characters in the range - * [`start`, `start + length`) with the code point - * `srcChar`. - * @param start the offset at which the replace operation begins - * @param length the number of characters to replace. The character at - * `start + length` is not modified. - * @param srcChar the new code point - * @return a reference to this - * @stable ICU 2.0 - */ - UnicodeString& replace(int32_t start, int32_t length, UChar32 srcChar); - - /** - * Replace the characters in the range [`start`, `limit`) - * with the characters in `srcText`. `srcText` is not modified. - * @param start the offset at which the replace operation begins - * @param limit the offset immediately following the replace range - * @param srcText the source for the new characters - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& replaceBetween(int32_t start, - int32_t limit, - const UnicodeString& srcText); - - /** - * Replace the characters in the range [`start`, `limit`) - * with the characters in `srcText` in the range - * [`srcStart`, `srcLimit`). `srcText` is not modified. - * @param start the offset at which the replace operation begins - * @param limit the offset immediately following the replace range - * @param srcText the source for the new characters - * @param srcStart the offset into `srcChars` where new characters - * will be obtained - * @param srcLimit the offset immediately following the range to copy - * in `srcText` - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& replaceBetween(int32_t start, - int32_t limit, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLimit); - - /** - * Replace a substring of this object with the given text. - * @param start the beginning index, inclusive; `0 <= start <= limit`. - * @param limit the ending index, exclusive; `start <= limit <= length()`. - * @param text the text to replace characters `start` to `limit - 1` - * @stable ICU 2.0 - */ - virtual void handleReplaceBetween(int32_t start, - int32_t limit, - const UnicodeString& text); - - /** - * Replaceable API - * @return TRUE if it has MetaData - * @stable ICU 2.4 - */ - virtual UBool hasMetaData() const; - - /** - * Copy a substring of this object, retaining attribute (out-of-band) - * information. This method is used to duplicate or reorder substrings. - * The destination index must not overlap the source range. - * - * @param start the beginning index, inclusive; `0 <= start <= limit`. - * @param limit the ending index, exclusive; `start <= limit <= length()`. - * @param dest the destination index. The characters from - * `start..limit-1` will be copied to `dest`. - * Implementations of this method may assume that `dest <= start || - * dest >= limit`. - * @stable ICU 2.0 - */ - virtual void copy(int32_t start, int32_t limit, int32_t dest); - - /* Search and replace operations */ - - /** - * Replace all occurrences of characters in oldText with the characters - * in newText - * @param oldText the text containing the search text - * @param newText the text containing the replacement text - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& findAndReplace(const UnicodeString& oldText, - const UnicodeString& newText); - - /** - * Replace all occurrences of characters in oldText with characters - * in newText - * in the range [`start`, `start + length`). - * @param start the start of the range in which replace will performed - * @param length the length of the range in which replace will be performed - * @param oldText the text containing the search text - * @param newText the text containing the replacement text - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& findAndReplace(int32_t start, - int32_t length, - const UnicodeString& oldText, - const UnicodeString& newText); - - /** - * Replace all occurrences of characters in oldText in the range - * [`oldStart`, `oldStart + oldLength`) with the characters - * in newText in the range - * [`newStart`, `newStart + newLength`) - * in the range [`start`, `start + length`). - * @param start the start of the range in which replace will performed - * @param length the length of the range in which replace will be performed - * @param oldText the text containing the search text - * @param oldStart the start of the search range in `oldText` - * @param oldLength the length of the search range in `oldText` - * @param newText the text containing the replacement text - * @param newStart the start of the replacement range in `newText` - * @param newLength the length of the replacement range in `newText` - * @return a reference to this - * @stable ICU 2.0 - */ - UnicodeString& findAndReplace(int32_t start, - int32_t length, - const UnicodeString& oldText, - int32_t oldStart, - int32_t oldLength, - const UnicodeString& newText, - int32_t newStart, - int32_t newLength); - - - /* Remove operations */ - - /** - * Remove all characters from the UnicodeString object. - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& remove(void); - - /** - * Remove the characters in the range - * [`start`, `start + length`) from the UnicodeString object. - * @param start the offset of the first character to remove - * @param length the number of characters to remove - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& remove(int32_t start, - int32_t length = (int32_t)INT32_MAX); - - /** - * Remove the characters in the range - * [`start`, `limit`) from the UnicodeString object. - * @param start the offset of the first character to remove - * @param limit the offset immediately following the range to remove - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& removeBetween(int32_t start, - int32_t limit = (int32_t)INT32_MAX); - - /** - * Retain only the characters in the range - * [`start`, `limit`) from the UnicodeString object. - * Removes characters before `start` and at and after `limit`. - * @param start the offset of the first character to retain - * @param limit the offset immediately following the range to retain - * @return a reference to this - * @stable ICU 4.4 - */ - inline UnicodeString &retainBetween(int32_t start, int32_t limit = INT32_MAX); - - /* Length operations */ - - /** - * Pad the start of this UnicodeString with the character `padChar`. - * If the length of this UnicodeString is less than targetLength, - * length() - targetLength copies of padChar will be added to the - * beginning of this UnicodeString. - * @param targetLength the desired length of the string - * @param padChar the character to use for padding. Defaults to - * space (U+0020) - * @return TRUE if the text was padded, FALSE otherwise. - * @stable ICU 2.0 - */ - UBool padLeading(int32_t targetLength, - char16_t padChar = 0x0020); - - /** - * Pad the end of this UnicodeString with the character `padChar`. - * If the length of this UnicodeString is less than targetLength, - * length() - targetLength copies of padChar will be added to the - * end of this UnicodeString. - * @param targetLength the desired length of the string - * @param padChar the character to use for padding. Defaults to - * space (U+0020) - * @return TRUE if the text was padded, FALSE otherwise. - * @stable ICU 2.0 - */ - UBool padTrailing(int32_t targetLength, - char16_t padChar = 0x0020); - - /** - * Truncate this UnicodeString to the `targetLength`. - * @param targetLength the desired length of this UnicodeString. - * @return TRUE if the text was truncated, FALSE otherwise - * @stable ICU 2.0 - */ - inline UBool truncate(int32_t targetLength); - - /** - * Trims leading and trailing whitespace from this UnicodeString. - * @return a reference to this - * @stable ICU 2.0 - */ - UnicodeString& trim(void); - - - /* Miscellaneous operations */ - - /** - * Reverse this UnicodeString in place. - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& reverse(void); - - /** - * Reverse the range [`start`, `start + length`) in - * this UnicodeString. - * @param start the start of the range to reverse - * @param length the number of characters to to reverse - * @return a reference to this - * @stable ICU 2.0 - */ - inline UnicodeString& reverse(int32_t start, - int32_t length); - - /** - * Convert the characters in this to UPPER CASE following the conventions of - * the default locale. - * @return A reference to this. - * @stable ICU 2.0 - */ - UnicodeString& toUpper(void); - - /** - * Convert the characters in this to UPPER CASE following the conventions of - * a specific locale. - * @param locale The locale containing the conventions to use. - * @return A reference to this. - * @stable ICU 2.0 - */ - UnicodeString& toUpper(const Locale& locale); - - /** - * Convert the characters in this to lower case following the conventions of - * the default locale. - * @return A reference to this. - * @stable ICU 2.0 - */ - UnicodeString& toLower(void); - - /** - * Convert the characters in this to lower case following the conventions of - * a specific locale. - * @param locale The locale containing the conventions to use. - * @return A reference to this. - * @stable ICU 2.0 - */ - UnicodeString& toLower(const Locale& locale); - -#if !UCONFIG_NO_BREAK_ITERATION - - /** - * Titlecase this string, convenience function using the default locale. - * - * Casing is locale-dependent and context-sensitive. - * Titlecasing uses a break iterator to find the first characters of words - * that are to be titlecased. It titlecases those characters and lowercases - * all others. - * - * The titlecase break iterator can be provided to customize for arbitrary - * styles, using rules and dictionaries beyond the standard iterators. - * It may be more efficient to always provide an iterator to avoid - * opening and closing one for each string. - * The standard titlecase iterator for the root locale implements the - * algorithm of Unicode TR 21. - * - * This function uses only the setText(), first() and next() methods of the - * provided break iterator. - * - * @param titleIter A break iterator to find the first characters of words - * that are to be titlecased. - * If none is provided (0), then a standard titlecase - * break iterator is opened. - * Otherwise the provided iterator is set to the string's text. - * @return A reference to this. - * @stable ICU 2.1 - */ - UnicodeString &toTitle(BreakIterator *titleIter); - - /** - * Titlecase this string. - * - * Casing is locale-dependent and context-sensitive. - * Titlecasing uses a break iterator to find the first characters of words - * that are to be titlecased. It titlecases those characters and lowercases - * all others. - * - * The titlecase break iterator can be provided to customize for arbitrary - * styles, using rules and dictionaries beyond the standard iterators. - * It may be more efficient to always provide an iterator to avoid - * opening and closing one for each string. - * The standard titlecase iterator for the root locale implements the - * algorithm of Unicode TR 21. - * - * This function uses only the setText(), first() and next() methods of the - * provided break iterator. - * - * @param titleIter A break iterator to find the first characters of words - * that are to be titlecased. - * If none is provided (0), then a standard titlecase - * break iterator is opened. - * Otherwise the provided iterator is set to the string's text. - * @param locale The locale to consider. - * @return A reference to this. - * @stable ICU 2.1 - */ - UnicodeString &toTitle(BreakIterator *titleIter, const Locale &locale); - - /** - * Titlecase this string, with options. - * - * Casing is locale-dependent and context-sensitive. - * Titlecasing uses a break iterator to find the first characters of words - * that are to be titlecased. It titlecases those characters and lowercases - * all others. (This can be modified with options.) - * - * The titlecase break iterator can be provided to customize for arbitrary - * styles, using rules and dictionaries beyond the standard iterators. - * It may be more efficient to always provide an iterator to avoid - * opening and closing one for each string. - * The standard titlecase iterator for the root locale implements the - * algorithm of Unicode TR 21. - * - * This function uses only the setText(), first() and next() methods of the - * provided break iterator. - * - * @param titleIter A break iterator to find the first characters of words - * that are to be titlecased. - * If none is provided (0), then a standard titlecase - * break iterator is opened. - * Otherwise the provided iterator is set to the string's text. - * @param locale The locale to consider. - * @param options Options bit set, usually 0. See U_TITLECASE_NO_LOWERCASE, - * U_TITLECASE_NO_BREAK_ADJUSTMENT, U_TITLECASE_ADJUST_TO_CASED, - * U_TITLECASE_WHOLE_STRING, U_TITLECASE_SENTENCES. - * @param options Options bit set, see ucasemap_open(). - * @return A reference to this. - * @stable ICU 3.8 - */ - UnicodeString &toTitle(BreakIterator *titleIter, const Locale &locale, uint32_t options); - -#endif - - /** - * Case-folds the characters in this string. - * - * Case-folding is locale-independent and not context-sensitive, - * but there is an option for whether to include or exclude mappings for dotted I - * and dotless i that are marked with 'T' in CaseFolding.txt. - * - * The result may be longer or shorter than the original. - * - * @param options Either U_FOLD_CASE_DEFAULT or U_FOLD_CASE_EXCLUDE_SPECIAL_I - * @return A reference to this. - * @stable ICU 2.0 - */ - UnicodeString &foldCase(uint32_t options=0 /*U_FOLD_CASE_DEFAULT*/); - - //======================================== - // Access to the internal buffer - //======================================== - - /** - * Get a read/write pointer to the internal buffer. - * The buffer is guaranteed to be large enough for at least minCapacity char16_ts, - * writable, and is still owned by the UnicodeString object. - * Calls to getBuffer(minCapacity) must not be nested, and - * must be matched with calls to releaseBuffer(newLength). - * If the string buffer was read-only or shared, - * then it will be reallocated and copied. - * - * An attempted nested call will return 0, and will not further modify the - * state of the UnicodeString object. - * It also returns 0 if the string is bogus. - * - * The actual capacity of the string buffer may be larger than minCapacity. - * getCapacity() returns the actual capacity. - * For many operations, the full capacity should be used to avoid reallocations. - * - * While the buffer is "open" between getBuffer(minCapacity) - * and releaseBuffer(newLength), the following applies: - * - The string length is set to 0. - * - Any read API call on the UnicodeString object will behave like on a 0-length string. - * - Any write API call on the UnicodeString object is disallowed and will have no effect. - * - You can read from and write to the returned buffer. - * - The previous string contents will still be in the buffer; - * if you want to use it, then you need to call length() before getBuffer(minCapacity). - * If the length() was greater than minCapacity, then any contents after minCapacity - * may be lost. - * The buffer contents is not NUL-terminated by getBuffer(). - * If length() < getCapacity() then you can terminate it by writing a NUL - * at index length(). - * - You must call releaseBuffer(newLength) before and in order to - * return to normal UnicodeString operation. - * - * @param minCapacity the minimum number of char16_ts that are to be available - * in the buffer, starting at the returned pointer; - * default to the current string capacity if minCapacity==-1 - * @return a writable pointer to the internal string buffer, - * or nullptr if an error occurs (nested calls, out of memory) - * - * @see releaseBuffer - * @see getTerminatedBuffer() - * @stable ICU 2.0 - */ - char16_t *getBuffer(int32_t minCapacity); - - /** - * Release a read/write buffer on a UnicodeString object with an - * "open" getBuffer(minCapacity). - * This function must be called in a matched pair with getBuffer(minCapacity). - * releaseBuffer(newLength) must be called if and only if a getBuffer(minCapacity) is "open". - * - * It will set the string length to newLength, at most to the current capacity. - * If newLength==-1 then it will set the length according to the - * first NUL in the buffer, or to the capacity if there is no NUL. - * - * After calling releaseBuffer(newLength) the UnicodeString is back to normal operation. - * - * @param newLength the new length of the UnicodeString object; - * defaults to the current capacity if newLength is greater than that; - * if newLength==-1, it defaults to u_strlen(buffer) but not more than - * the current capacity of the string - * - * @see getBuffer(int32_t minCapacity) - * @stable ICU 2.0 - */ - void releaseBuffer(int32_t newLength=-1); - - /** - * Get a read-only pointer to the internal buffer. - * This can be called at any time on a valid UnicodeString. - * - * It returns 0 if the string is bogus, or - * during an "open" getBuffer(minCapacity). - * - * It can be called as many times as desired. - * The pointer that it returns will remain valid until the UnicodeString object is modified, - * at which time the pointer is semantically invalidated and must not be used any more. - * - * The capacity of the buffer can be determined with getCapacity(). - * The part after length() may or may not be initialized and valid, - * depending on the history of the UnicodeString object. - * - * The buffer contents is (probably) not NUL-terminated. - * You can check if it is with - * `(s.length() < s.getCapacity() && buffer[s.length()]==0)`. - * (See getTerminatedBuffer().) - * - * The buffer may reside in read-only memory. Its contents must not - * be modified. - * - * @return a read-only pointer to the internal string buffer, - * or nullptr if the string is empty or bogus - * - * @see getBuffer(int32_t minCapacity) - * @see getTerminatedBuffer() - * @stable ICU 2.0 - */ - inline const char16_t *getBuffer() const; - - /** - * Get a read-only pointer to the internal buffer, - * making sure that it is NUL-terminated. - * This can be called at any time on a valid UnicodeString. - * - * It returns 0 if the string is bogus, or - * during an "open" getBuffer(minCapacity), or if the buffer cannot - * be NUL-terminated (because memory allocation failed). - * - * It can be called as many times as desired. - * The pointer that it returns will remain valid until the UnicodeString object is modified, - * at which time the pointer is semantically invalidated and must not be used any more. - * - * The capacity of the buffer can be determined with getCapacity(). - * The part after length()+1 may or may not be initialized and valid, - * depending on the history of the UnicodeString object. - * - * The buffer contents is guaranteed to be NUL-terminated. - * getTerminatedBuffer() may reallocate the buffer if a terminating NUL - * is written. - * For this reason, this function is not const, unlike getBuffer(). - * Note that a UnicodeString may also contain NUL characters as part of its contents. - * - * The buffer may reside in read-only memory. Its contents must not - * be modified. - * - * @return a read-only pointer to the internal string buffer, - * or 0 if the string is empty or bogus - * - * @see getBuffer(int32_t minCapacity) - * @see getBuffer() - * @stable ICU 2.2 - */ - const char16_t *getTerminatedBuffer(); - - //======================================== - // Constructors - //======================================== - - /** Construct an empty UnicodeString. - * @stable ICU 2.0 - */ - inline UnicodeString(); - - /** - * Construct a UnicodeString with capacity to hold `capacity` char16_ts - * @param capacity the number of char16_ts this UnicodeString should hold - * before a resize is necessary; if count is greater than 0 and count - * code points c take up more space than capacity, then capacity is adjusted - * accordingly. - * @param c is used to initially fill the string - * @param count specifies how many code points c are to be written in the - * string - * @stable ICU 2.0 - */ - UnicodeString(int32_t capacity, UChar32 c, int32_t count); - - /** - * Single char16_t (code unit) constructor. - * - * It is recommended to mark this constructor "explicit" by - * `-DUNISTR_FROM_CHAR_EXPLICIT=explicit` - * on the compiler command line or similar. - * @param ch the character to place in the UnicodeString - * @stable ICU 2.0 - */ - UNISTR_FROM_CHAR_EXPLICIT UnicodeString(char16_t ch); - - /** - * Single UChar32 (code point) constructor. - * - * It is recommended to mark this constructor "explicit" by - * `-DUNISTR_FROM_CHAR_EXPLICIT=explicit` - * on the compiler command line or similar. - * @param ch the character to place in the UnicodeString - * @stable ICU 2.0 - */ - UNISTR_FROM_CHAR_EXPLICIT UnicodeString(UChar32 ch); - - /** - * char16_t* constructor. - * - * It is recommended to mark this constructor "explicit" by - * `-DUNISTR_FROM_STRING_EXPLICIT=explicit` - * on the compiler command line or similar. - * @param text The characters to place in the UnicodeString. `text` - * must be NULL (U+0000) terminated. - * @stable ICU 2.0 - */ - UNISTR_FROM_STRING_EXPLICIT UnicodeString(const char16_t *text); - -#if !U_CHAR16_IS_TYPEDEF - /** - * uint16_t * constructor. - * Delegates to UnicodeString(const char16_t *). - * - * It is recommended to mark this constructor "explicit" by - * `-DUNISTR_FROM_STRING_EXPLICIT=explicit` - * on the compiler command line or similar. - * @param text NUL-terminated UTF-16 string - * @stable ICU 59 - */ - UNISTR_FROM_STRING_EXPLICIT UnicodeString(const uint16_t *text) : - UnicodeString(ConstChar16Ptr(text)) {} -#endif - -#if U_SIZEOF_WCHAR_T==2 || defined(U_IN_DOXYGEN) - /** - * wchar_t * constructor. - * (Only defined if U_SIZEOF_WCHAR_T==2.) - * Delegates to UnicodeString(const char16_t *). - * - * It is recommended to mark this constructor "explicit" by - * `-DUNISTR_FROM_STRING_EXPLICIT=explicit` - * on the compiler command line or similar. - * @param text NUL-terminated UTF-16 string - * @stable ICU 59 - */ - UNISTR_FROM_STRING_EXPLICIT UnicodeString(const wchar_t *text) : - UnicodeString(ConstChar16Ptr(text)) {} -#endif - - /** - * nullptr_t constructor. - * Effectively the same as the default constructor, makes an empty string object. - * - * It is recommended to mark this constructor "explicit" by - * `-DUNISTR_FROM_STRING_EXPLICIT=explicit` - * on the compiler command line or similar. - * @param text nullptr - * @stable ICU 59 - */ - UNISTR_FROM_STRING_EXPLICIT inline UnicodeString(const std::nullptr_t text); - - /** - * char16_t* constructor. - * @param text The characters to place in the UnicodeString. - * @param textLength The number of Unicode characters in `text` - * to copy. - * @stable ICU 2.0 - */ - UnicodeString(const char16_t *text, - int32_t textLength); - -#if !U_CHAR16_IS_TYPEDEF - /** - * uint16_t * constructor. - * Delegates to UnicodeString(const char16_t *, int32_t). - * @param text UTF-16 string - * @param length string length - * @stable ICU 59 - */ - UnicodeString(const uint16_t *text, int32_t length) : - UnicodeString(ConstChar16Ptr(text), length) {} -#endif - -#if U_SIZEOF_WCHAR_T==2 || defined(U_IN_DOXYGEN) - /** - * wchar_t * constructor. - * (Only defined if U_SIZEOF_WCHAR_T==2.) - * Delegates to UnicodeString(const char16_t *, int32_t). - * @param text NUL-terminated UTF-16 string - * @param length string length - * @stable ICU 59 - */ - UnicodeString(const wchar_t *text, int32_t length) : - UnicodeString(ConstChar16Ptr(text), length) {} -#endif - - /** - * nullptr_t constructor. - * Effectively the same as the default constructor, makes an empty string object. - * @param text nullptr - * @param length ignored - * @stable ICU 59 - */ - inline UnicodeString(const std::nullptr_t text, int32_t length); - - /** - * Readonly-aliasing char16_t* constructor. - * The text will be used for the UnicodeString object, but - * it will not be released when the UnicodeString is destroyed. - * This has copy-on-write semantics: - * When the string is modified, then the buffer is first copied into - * newly allocated memory. - * The aliased buffer is never modified. - * - * In an assignment to another UnicodeString, when using the copy constructor - * or the assignment operator, the text will be copied. - * When using fastCopyFrom(), the text will be aliased again, - * so that both strings then alias the same readonly-text. - * - * @param isTerminated specifies if `text` is `NUL`-terminated. - * This must be true if `textLength==-1`. - * @param text The characters to alias for the UnicodeString. - * @param textLength The number of Unicode characters in `text` to alias. - * If -1, then this constructor will determine the length - * by calling `u_strlen()`. - * @stable ICU 2.0 - */ - UnicodeString(UBool isTerminated, - ConstChar16Ptr text, - int32_t textLength); - - /** - * Writable-aliasing char16_t* constructor. - * The text will be used for the UnicodeString object, but - * it will not be released when the UnicodeString is destroyed. - * This has write-through semantics: - * For as long as the capacity of the buffer is sufficient, write operations - * will directly affect the buffer. When more capacity is necessary, then - * a new buffer will be allocated and the contents copied as with regularly - * constructed strings. - * In an assignment to another UnicodeString, the buffer will be copied. - * The extract(Char16Ptr dst) function detects whether the dst pointer is the same - * as the string buffer itself and will in this case not copy the contents. - * - * @param buffer The characters to alias for the UnicodeString. - * @param buffLength The number of Unicode characters in `buffer` to alias. - * @param buffCapacity The size of `buffer` in char16_ts. - * @stable ICU 2.0 - */ - UnicodeString(char16_t *buffer, int32_t buffLength, int32_t buffCapacity); - -#if !U_CHAR16_IS_TYPEDEF - /** - * Writable-aliasing uint16_t * constructor. - * Delegates to UnicodeString(const char16_t *, int32_t, int32_t). - * @param buffer writable buffer of/for UTF-16 text - * @param buffLength length of the current buffer contents - * @param buffCapacity buffer capacity - * @stable ICU 59 - */ - UnicodeString(uint16_t *buffer, int32_t buffLength, int32_t buffCapacity) : - UnicodeString(Char16Ptr(buffer), buffLength, buffCapacity) {} -#endif - -#if U_SIZEOF_WCHAR_T==2 || defined(U_IN_DOXYGEN) - /** - * Writable-aliasing wchar_t * constructor. - * (Only defined if U_SIZEOF_WCHAR_T==2.) - * Delegates to UnicodeString(const char16_t *, int32_t, int32_t). - * @param buffer writable buffer of/for UTF-16 text - * @param buffLength length of the current buffer contents - * @param buffCapacity buffer capacity - * @stable ICU 59 - */ - UnicodeString(wchar_t *buffer, int32_t buffLength, int32_t buffCapacity) : - UnicodeString(Char16Ptr(buffer), buffLength, buffCapacity) {} -#endif - - /** - * Writable-aliasing nullptr_t constructor. - * Effectively the same as the default constructor, makes an empty string object. - * @param buffer nullptr - * @param buffLength ignored - * @param buffCapacity ignored - * @stable ICU 59 - */ - inline UnicodeString(std::nullptr_t buffer, int32_t buffLength, int32_t buffCapacity); - -#if U_CHARSET_IS_UTF8 || !UCONFIG_NO_CONVERSION - - /** - * char* constructor. - * Uses the default converter (and thus depends on the ICU conversion code) - * unless U_CHARSET_IS_UTF8 is set to 1. - * - * For ASCII (really "invariant character") strings it is more efficient to use - * the constructor that takes a US_INV (for its enum EInvariant). - * For ASCII (invariant-character) string literals, see UNICODE_STRING and - * UNICODE_STRING_SIMPLE. - * - * It is recommended to mark this constructor "explicit" by - * `-DUNISTR_FROM_STRING_EXPLICIT=explicit` - * on the compiler command line or similar. - * @param codepageData an array of bytes, null-terminated, - * in the platform's default codepage. - * @stable ICU 2.0 - * @see UNICODE_STRING - * @see UNICODE_STRING_SIMPLE - */ - UNISTR_FROM_STRING_EXPLICIT UnicodeString(const char *codepageData); - - /** - * char* constructor. - * Uses the default converter (and thus depends on the ICU conversion code) - * unless U_CHARSET_IS_UTF8 is set to 1. - * @param codepageData an array of bytes in the platform's default codepage. - * @param dataLength The number of bytes in `codepageData`. - * @stable ICU 2.0 - */ - UnicodeString(const char *codepageData, int32_t dataLength); - -#endif - -#if !UCONFIG_NO_CONVERSION - - /** - * char* constructor. - * @param codepageData an array of bytes, null-terminated - * @param codepage the encoding of `codepageData`. The special - * value 0 for `codepage` indicates that the text is in the - * platform's default codepage. - * - * If `codepage` is an empty string (`""`), - * then a simple conversion is performed on the codepage-invariant - * subset ("invariant characters") of the platform encoding. See utypes.h. - * Recommendation: For invariant-character strings use the constructor - * UnicodeString(const char *src, int32_t length, enum EInvariant inv) - * because it avoids object code dependencies of UnicodeString on - * the conversion code. - * - * @stable ICU 2.0 - */ - UnicodeString(const char *codepageData, const char *codepage); - - /** - * char* constructor. - * @param codepageData an array of bytes. - * @param dataLength The number of bytes in `codepageData`. - * @param codepage the encoding of `codepageData`. The special - * value 0 for `codepage` indicates that the text is in the - * platform's default codepage. - * If `codepage` is an empty string (`""`), - * then a simple conversion is performed on the codepage-invariant - * subset ("invariant characters") of the platform encoding. See utypes.h. - * Recommendation: For invariant-character strings use the constructor - * UnicodeString(const char *src, int32_t length, enum EInvariant inv) - * because it avoids object code dependencies of UnicodeString on - * the conversion code. - * - * @stable ICU 2.0 - */ - UnicodeString(const char *codepageData, int32_t dataLength, const char *codepage); - - /** - * char * / UConverter constructor. - * This constructor uses an existing UConverter object to - * convert the codepage string to Unicode and construct a UnicodeString - * from that. - * - * The converter is reset at first. - * If the error code indicates a failure before this constructor is called, - * or if an error occurs during conversion or construction, - * then the string will be bogus. - * - * This function avoids the overhead of opening and closing a converter if - * multiple strings are constructed. - * - * @param src input codepage string - * @param srcLength length of the input string, can be -1 for NUL-terminated strings - * @param cnv converter object (ucnv_resetToUnicode() will be called), - * can be NULL for the default converter - * @param errorCode normal ICU error code - * @stable ICU 2.0 - */ - UnicodeString( - const char *src, int32_t srcLength, - UConverter *cnv, - UErrorCode &errorCode); - -#endif - - /** - * Constructs a Unicode string from an invariant-character char * string. - * About invariant characters see utypes.h. - * This constructor has no runtime dependency on conversion code and is - * therefore recommended over ones taking a charset name string - * (where the empty string "" indicates invariant-character conversion). - * - * Use the macro US_INV as the third, signature-distinguishing parameter. - * - * For example: - * \code - * void fn(const char *s) { - * UnicodeString ustr(s, -1, US_INV); - * // use ustr ... - * } - * \endcode - * @param src String using only invariant characters. - * @param length Length of src, or -1 if NUL-terminated. - * @param inv Signature-distinguishing paramater, use US_INV. - * - * @see US_INV - * @stable ICU 3.2 - */ - UnicodeString(const char *src, int32_t length, enum EInvariant inv); - - - /** - * Copy constructor. - * - * Starting with ICU 2.4, the assignment operator and the copy constructor - * allocate a new buffer and copy the buffer contents even for readonly aliases. - * By contrast, the fastCopyFrom() function implements the old, - * more efficient but less safe behavior - * of making this string also a readonly alias to the same buffer. - * - * If the source object has an "open" buffer from getBuffer(minCapacity), - * then the copy is an empty string. - * - * @param that The UnicodeString object to copy. - * @stable ICU 2.0 - * @see fastCopyFrom - */ - UnicodeString(const UnicodeString& that); - - /** - * Move constructor; might leave src in bogus state. - * This string will have the same contents and state that the source string had. - * @param src source string - * @stable ICU 56 - */ - UnicodeString(UnicodeString &&src) U_NOEXCEPT; - - /** - * 'Substring' constructor from tail of source string. - * @param src The UnicodeString object to copy. - * @param srcStart The offset into `src` at which to start copying. - * @stable ICU 2.2 - */ - UnicodeString(const UnicodeString& src, int32_t srcStart); - - /** - * 'Substring' constructor from subrange of source string. - * @param src The UnicodeString object to copy. - * @param srcStart The offset into `src` at which to start copying. - * @param srcLength The number of characters from `src` to copy. - * @stable ICU 2.2 - */ - UnicodeString(const UnicodeString& src, int32_t srcStart, int32_t srcLength); - - /** - * Clone this object, an instance of a subclass of Replaceable. - * Clones can be used concurrently in multiple threads. - * If a subclass does not implement clone(), or if an error occurs, - * then NULL is returned. - * The clone functions in all subclasses return a pointer to a Replaceable - * because some compilers do not support covariant (same-as-this) - * return types; cast to the appropriate subclass if necessary. - * The caller must delete the clone. - * - * @return a clone of this object - * - * @see Replaceable::clone - * @see getDynamicClassID - * @stable ICU 2.6 - */ - virtual Replaceable *clone() const; - - /** Destructor. - * @stable ICU 2.0 - */ - virtual ~UnicodeString(); - - /** - * Create a UnicodeString from a UTF-8 string. - * Illegal input is replaced with U+FFFD. Otherwise, errors result in a bogus string. - * Calls u_strFromUTF8WithSub(). - * - * @param utf8 UTF-8 input string. - * Note that a StringPiece can be implicitly constructed - * from a std::string or a NUL-terminated const char * string. - * @return A UnicodeString with equivalent UTF-16 contents. - * @see toUTF8 - * @see toUTF8String - * @stable ICU 4.2 - */ - static UnicodeString fromUTF8(StringPiece utf8); - - /** - * Create a UnicodeString from a UTF-32 string. - * Illegal input is replaced with U+FFFD. Otherwise, errors result in a bogus string. - * Calls u_strFromUTF32WithSub(). - * - * @param utf32 UTF-32 input string. Must not be NULL. - * @param length Length of the input string, or -1 if NUL-terminated. - * @return A UnicodeString with equivalent UTF-16 contents. - * @see toUTF32 - * @stable ICU 4.2 - */ - static UnicodeString fromUTF32(const UChar32 *utf32, int32_t length); - - /* Miscellaneous operations */ - - /** - * Unescape a string of characters and return a string containing - * the result. The following escape sequences are recognized: - * - * \\uhhhh 4 hex digits; h in [0-9A-Fa-f] - * \\Uhhhhhhhh 8 hex digits - * \\xhh 1-2 hex digits - * \\ooo 1-3 octal digits; o in [0-7] - * \\cX control-X; X is masked with 0x1F - * - * as well as the standard ANSI C escapes: - * - * \\a => U+0007, \\b => U+0008, \\t => U+0009, \\n => U+000A, - * \\v => U+000B, \\f => U+000C, \\r => U+000D, \\e => U+001B, - * \\" => U+0022, \\' => U+0027, \\? => U+003F, \\\\ => U+005C - * - * Anything else following a backslash is generically escaped. For - * example, "[a\\-z]" returns "[a-z]". - * - * If an escape sequence is ill-formed, this method returns an empty - * string. An example of an ill-formed sequence is "\\u" followed by - * fewer than 4 hex digits. - * - * This function is similar to u_unescape() but not identical to it. - * The latter takes a source char*, so it does escape recognition - * and also invariant conversion. - * - * @return a string with backslash escapes interpreted, or an - * empty string on error. - * @see UnicodeString#unescapeAt() - * @see u_unescape() - * @see u_unescapeAt() - * @stable ICU 2.0 - */ - UnicodeString unescape() const; - - /** - * Unescape a single escape sequence and return the represented - * character. See unescape() for a listing of the recognized escape - * sequences. The character at offset-1 is assumed (without - * checking) to be a backslash. If the escape sequence is - * ill-formed, or the offset is out of range, U_SENTINEL=-1 is - * returned. - * - * @param offset an input output parameter. On input, it is the - * offset into this string where the escape sequence is located, - * after the initial backslash. On output, it is advanced after the - * last character parsed. On error, it is not advanced at all. - * @return the character represented by the escape sequence at - * offset, or U_SENTINEL=-1 on error. - * @see UnicodeString#unescape() - * @see u_unescape() - * @see u_unescapeAt() - * @stable ICU 2.0 - */ - UChar32 unescapeAt(int32_t &offset) const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.2 - */ - static UClassID U_EXPORT2 getStaticClassID(); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.2 - */ - virtual UClassID getDynamicClassID() const; - - //======================================== - // Implementation methods - //======================================== - -protected: - /** - * Implement Replaceable::getLength() (see jitterbug 1027). - * @stable ICU 2.4 - */ - virtual int32_t getLength() const; - - /** - * The change in Replaceable to use virtual getCharAt() allows - * UnicodeString::charAt() to be inline again (see jitterbug 709). - * @stable ICU 2.4 - */ - virtual char16_t getCharAt(int32_t offset) const; - - /** - * The change in Replaceable to use virtual getChar32At() allows - * UnicodeString::char32At() to be inline again (see jitterbug 709). - * @stable ICU 2.4 - */ - virtual UChar32 getChar32At(int32_t offset) const; - -private: - // For char* constructors. Could be made public. - UnicodeString &setToUTF8(StringPiece utf8); - // For extract(char*). - // We could make a toUTF8(target, capacity, errorCode) public but not - // this version: New API will be cleaner if we make callers create substrings - // rather than having start+length on every method, - // and it should take a UErrorCode&. - int32_t - toUTF8(int32_t start, int32_t len, - char *target, int32_t capacity) const; - - /** - * Internal string contents comparison, called by operator==. - * Requires: this & text not bogus and have same lengths. - */ - UBool doEquals(const UnicodeString &text, int32_t len) const; - - inline int8_t - doCompare(int32_t start, - int32_t length, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) const; - - int8_t doCompare(int32_t start, - int32_t length, - const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength) const; - - inline int8_t - doCompareCodePointOrder(int32_t start, - int32_t length, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) const; - - int8_t doCompareCodePointOrder(int32_t start, - int32_t length, - const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength) const; - - inline int8_t - doCaseCompare(int32_t start, - int32_t length, - const UnicodeString &srcText, - int32_t srcStart, - int32_t srcLength, - uint32_t options) const; - - int8_t - doCaseCompare(int32_t start, - int32_t length, - const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength, - uint32_t options) const; - - int32_t doIndexOf(char16_t c, - int32_t start, - int32_t length) const; - - int32_t doIndexOf(UChar32 c, - int32_t start, - int32_t length) const; - - int32_t doLastIndexOf(char16_t c, - int32_t start, - int32_t length) const; - - int32_t doLastIndexOf(UChar32 c, - int32_t start, - int32_t length) const; - - void doExtract(int32_t start, - int32_t length, - char16_t *dst, - int32_t dstStart) const; - - inline void doExtract(int32_t start, - int32_t length, - UnicodeString& target) const; - - inline char16_t doCharAt(int32_t offset) const; - - UnicodeString& doReplace(int32_t start, - int32_t length, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength); - - UnicodeString& doReplace(int32_t start, - int32_t length, - const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength); - - UnicodeString& doAppend(const UnicodeString& src, int32_t srcStart, int32_t srcLength); - UnicodeString& doAppend(const char16_t *srcChars, int32_t srcStart, int32_t srcLength); - - UnicodeString& doReverse(int32_t start, - int32_t length); - - // calculate hash code - int32_t doHashCode(void) const; - - // get pointer to start of array - // these do not check for kOpenGetBuffer, unlike the public getBuffer() function - inline char16_t* getArrayStart(void); - inline const char16_t* getArrayStart(void) const; - - inline UBool hasShortLength() const; - inline int32_t getShortLength() const; - - // A UnicodeString object (not necessarily its current buffer) - // is writable unless it isBogus() or it has an "open" getBuffer(minCapacity). - inline UBool isWritable() const; - - // Is the current buffer writable? - inline UBool isBufferWritable() const; - - // None of the following does releaseArray(). - inline void setZeroLength(); - inline void setShortLength(int32_t len); - inline void setLength(int32_t len); - inline void setToEmpty(); - inline void setArray(char16_t *array, int32_t len, int32_t capacity); // sets length but not flags - - // allocate the array; result may be the stack buffer - // sets refCount to 1 if appropriate - // sets fArray, fCapacity, and flags - // sets length to 0 - // returns boolean for success or failure - UBool allocate(int32_t capacity); - - // release the array if owned - void releaseArray(void); - - // turn a bogus string into an empty one - void unBogus(); - - // implements assigment operator, copy constructor, and fastCopyFrom() - UnicodeString ©From(const UnicodeString &src, UBool fastCopy=FALSE); - - // Copies just the fields without memory management. - void copyFieldsFrom(UnicodeString &src, UBool setSrcToBogus) U_NOEXCEPT; - - // Pin start and limit to acceptable values. - inline void pinIndex(int32_t& start) const; - inline void pinIndices(int32_t& start, - int32_t& length) const; - -#if !UCONFIG_NO_CONVERSION - - /* Internal extract() using UConverter. */ - int32_t doExtract(int32_t start, int32_t length, - char *dest, int32_t destCapacity, - UConverter *cnv, - UErrorCode &errorCode) const; - - /* - * Real constructor for converting from codepage data. - * It assumes that it is called with !fRefCounted. - * - * If `codepage==0`, then the default converter - * is used for the platform encoding. - * If `codepage` is an empty string (`""`), - * then a simple conversion is performed on the codepage-invariant - * subset ("invariant characters") of the platform encoding. See utypes.h. - */ - void doCodepageCreate(const char *codepageData, - int32_t dataLength, - const char *codepage); - - /* - * Worker function for creating a UnicodeString from - * a codepage string using a UConverter. - */ - void - doCodepageCreate(const char *codepageData, - int32_t dataLength, - UConverter *converter, - UErrorCode &status); - -#endif - - /* - * This function is called when write access to the array - * is necessary. - * - * We need to make a copy of the array if - * the buffer is read-only, or - * the buffer is refCounted (shared), and refCount>1, or - * the buffer is too small. - * - * Return FALSE if memory could not be allocated. - */ - UBool cloneArrayIfNeeded(int32_t newCapacity = -1, - int32_t growCapacity = -1, - UBool doCopyArray = TRUE, - int32_t **pBufferToDelete = 0, - UBool forceClone = FALSE); - - /** - * Common function for UnicodeString case mappings. - * The stringCaseMapper has the same type UStringCaseMapper - * as in ustr_imp.h for ustrcase_map(). - */ - UnicodeString & - caseMap(int32_t caseLocale, uint32_t options, -#if !UCONFIG_NO_BREAK_ITERATION - BreakIterator *iter, -#endif - UStringCaseMapper *stringCaseMapper); - - // ref counting - void addRef(void); - int32_t removeRef(void); - int32_t refCount(void) const; - - // constants - enum { - /** - * Size of stack buffer for short strings. - * Must be at least U16_MAX_LENGTH for the single-code point constructor to work. - * @see UNISTR_OBJECT_SIZE - */ - US_STACKBUF_SIZE=(int32_t)(UNISTR_OBJECT_SIZE-sizeof(void *)-2)/U_SIZEOF_UCHAR, - kInvalidUChar=0xffff, // U+FFFF returned by charAt(invalid index) - kInvalidHashCode=0, // invalid hash code - kEmptyHashCode=1, // hash code for empty string - - // bit flag values for fLengthAndFlags - kIsBogus=1, // this string is bogus, i.e., not valid or NULL - kUsingStackBuffer=2,// using fUnion.fStackFields instead of fUnion.fFields - kRefCounted=4, // there is a refCount field before the characters in fArray - kBufferIsReadonly=8,// do not write to this buffer - kOpenGetBuffer=16, // getBuffer(minCapacity) was called (is "open"), - // and releaseBuffer(newLength) must be called - kAllStorageFlags=0x1f, - - kLengthShift=5, // remaining 11 bits for non-negative short length, or negative if long - kLength1=1<127; else undefined - int32_t fCapacity; // capacity of fArray (in char16_ts) - // array pointer last to minimize padding for machines with P128 data model - // or pointer sizes that are not a power of 2 - char16_t *fArray; // the Unicode data - } fFields; - } fUnion; -}; - -/** - * Create a new UnicodeString with the concatenation of two others. - * - * @param s1 The first string to be copied to the new one. - * @param s2 The second string to be copied to the new one, after s1. - * @return UnicodeString(s1).append(s2) - * @stable ICU 2.8 - */ -U_COMMON_API UnicodeString U_EXPORT2 -operator+ (const UnicodeString &s1, const UnicodeString &s2); - -//======================================== -// Inline members -//======================================== - -//======================================== -// Privates -//======================================== - -inline void -UnicodeString::pinIndex(int32_t& start) const -{ - // pin index - if(start < 0) { - start = 0; - } else if(start > length()) { - start = length(); - } -} - -inline void -UnicodeString::pinIndices(int32_t& start, - int32_t& _length) const -{ - // pin indices - int32_t len = length(); - if(start < 0) { - start = 0; - } else if(start > len) { - start = len; - } - if(_length < 0) { - _length = 0; - } else if(_length > (len - start)) { - _length = (len - start); - } -} - -inline char16_t* -UnicodeString::getArrayStart() { - return (fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) ? - fUnion.fStackFields.fBuffer : fUnion.fFields.fArray; -} - -inline const char16_t* -UnicodeString::getArrayStart() const { - return (fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) ? - fUnion.fStackFields.fBuffer : fUnion.fFields.fArray; -} - -//======================================== -// Default constructor -//======================================== - -inline -UnicodeString::UnicodeString() { - fUnion.fStackFields.fLengthAndFlags=kShortString; -} - -inline UnicodeString::UnicodeString(const std::nullptr_t /*text*/) { - fUnion.fStackFields.fLengthAndFlags=kShortString; -} - -inline UnicodeString::UnicodeString(const std::nullptr_t /*text*/, int32_t /*length*/) { - fUnion.fStackFields.fLengthAndFlags=kShortString; -} - -inline UnicodeString::UnicodeString(std::nullptr_t /*buffer*/, int32_t /*buffLength*/, int32_t /*buffCapacity*/) { - fUnion.fStackFields.fLengthAndFlags=kShortString; -} - -//======================================== -// Read-only implementation methods -//======================================== -inline UBool -UnicodeString::hasShortLength() const { - return fUnion.fFields.fLengthAndFlags>=0; -} - -inline int32_t -UnicodeString::getShortLength() const { - // fLengthAndFlags must be non-negative -> short length >= 0 - // and arithmetic or logical shift does not matter. - return fUnion.fFields.fLengthAndFlags>>kLengthShift; -} - -inline int32_t -UnicodeString::length() const { - return hasShortLength() ? getShortLength() : fUnion.fFields.fLength; -} - -inline int32_t -UnicodeString::getCapacity() const { - return (fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) ? - US_STACKBUF_SIZE : fUnion.fFields.fCapacity; -} - -inline int32_t -UnicodeString::hashCode() const -{ return doHashCode(); } - -inline UBool -UnicodeString::isBogus() const -{ return (UBool)(fUnion.fFields.fLengthAndFlags & kIsBogus); } - -inline UBool -UnicodeString::isWritable() const -{ return (UBool)!(fUnion.fFields.fLengthAndFlags&(kOpenGetBuffer|kIsBogus)); } - -inline UBool -UnicodeString::isBufferWritable() const -{ - return (UBool)( - !(fUnion.fFields.fLengthAndFlags&(kOpenGetBuffer|kIsBogus|kBufferIsReadonly)) && - (!(fUnion.fFields.fLengthAndFlags&kRefCounted) || refCount()==1)); -} - -inline const char16_t * -UnicodeString::getBuffer() const { - if(fUnion.fFields.fLengthAndFlags&(kIsBogus|kOpenGetBuffer)) { - return nullptr; - } else if(fUnion.fFields.fLengthAndFlags&kUsingStackBuffer) { - return fUnion.fStackFields.fBuffer; - } else { - return fUnion.fFields.fArray; - } -} - -//======================================== -// Read-only alias methods -//======================================== -inline int8_t -UnicodeString::doCompare(int32_t start, - int32_t thisLength, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) const -{ - if(srcText.isBogus()) { - return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise - } else { - srcText.pinIndices(srcStart, srcLength); - return doCompare(start, thisLength, srcText.getArrayStart(), srcStart, srcLength); - } -} - -inline UBool -UnicodeString::operator== (const UnicodeString& text) const -{ - if(isBogus()) { - return text.isBogus(); - } else { - int32_t len = length(), textLength = text.length(); - return !text.isBogus() && len == textLength && doEquals(text, len); - } -} - -inline UBool -UnicodeString::operator!= (const UnicodeString& text) const -{ return (! operator==(text)); } - -inline UBool -UnicodeString::operator> (const UnicodeString& text) const -{ return doCompare(0, length(), text, 0, text.length()) == 1; } - -inline UBool -UnicodeString::operator< (const UnicodeString& text) const -{ return doCompare(0, length(), text, 0, text.length()) == -1; } - -inline UBool -UnicodeString::operator>= (const UnicodeString& text) const -{ return doCompare(0, length(), text, 0, text.length()) != -1; } - -inline UBool -UnicodeString::operator<= (const UnicodeString& text) const -{ return doCompare(0, length(), text, 0, text.length()) != 1; } - -inline int8_t -UnicodeString::compare(const UnicodeString& text) const -{ return doCompare(0, length(), text, 0, text.length()); } - -inline int8_t -UnicodeString::compare(int32_t start, - int32_t _length, - const UnicodeString& srcText) const -{ return doCompare(start, _length, srcText, 0, srcText.length()); } - -inline int8_t -UnicodeString::compare(ConstChar16Ptr srcChars, - int32_t srcLength) const -{ return doCompare(0, length(), srcChars, 0, srcLength); } - -inline int8_t -UnicodeString::compare(int32_t start, - int32_t _length, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) const -{ return doCompare(start, _length, srcText, srcStart, srcLength); } - -inline int8_t -UnicodeString::compare(int32_t start, - int32_t _length, - const char16_t *srcChars) const -{ return doCompare(start, _length, srcChars, 0, _length); } - -inline int8_t -UnicodeString::compare(int32_t start, - int32_t _length, - const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength) const -{ return doCompare(start, _length, srcChars, srcStart, srcLength); } - -inline int8_t -UnicodeString::compareBetween(int32_t start, - int32_t limit, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLimit) const -{ return doCompare(start, limit - start, - srcText, srcStart, srcLimit - srcStart); } - -inline int8_t -UnicodeString::doCompareCodePointOrder(int32_t start, - int32_t thisLength, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) const -{ - if(srcText.isBogus()) { - return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise - } else { - srcText.pinIndices(srcStart, srcLength); - return doCompareCodePointOrder(start, thisLength, srcText.getArrayStart(), srcStart, srcLength); - } -} - -inline int8_t -UnicodeString::compareCodePointOrder(const UnicodeString& text) const -{ return doCompareCodePointOrder(0, length(), text, 0, text.length()); } - -inline int8_t -UnicodeString::compareCodePointOrder(int32_t start, - int32_t _length, - const UnicodeString& srcText) const -{ return doCompareCodePointOrder(start, _length, srcText, 0, srcText.length()); } - -inline int8_t -UnicodeString::compareCodePointOrder(ConstChar16Ptr srcChars, - int32_t srcLength) const -{ return doCompareCodePointOrder(0, length(), srcChars, 0, srcLength); } - -inline int8_t -UnicodeString::compareCodePointOrder(int32_t start, - int32_t _length, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) const -{ return doCompareCodePointOrder(start, _length, srcText, srcStart, srcLength); } - -inline int8_t -UnicodeString::compareCodePointOrder(int32_t start, - int32_t _length, - const char16_t *srcChars) const -{ return doCompareCodePointOrder(start, _length, srcChars, 0, _length); } - -inline int8_t -UnicodeString::compareCodePointOrder(int32_t start, - int32_t _length, - const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength) const -{ return doCompareCodePointOrder(start, _length, srcChars, srcStart, srcLength); } - -inline int8_t -UnicodeString::compareCodePointOrderBetween(int32_t start, - int32_t limit, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLimit) const -{ return doCompareCodePointOrder(start, limit - start, - srcText, srcStart, srcLimit - srcStart); } - -inline int8_t -UnicodeString::doCaseCompare(int32_t start, - int32_t thisLength, - const UnicodeString &srcText, - int32_t srcStart, - int32_t srcLength, - uint32_t options) const -{ - if(srcText.isBogus()) { - return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise - } else { - srcText.pinIndices(srcStart, srcLength); - return doCaseCompare(start, thisLength, srcText.getArrayStart(), srcStart, srcLength, options); - } -} - -inline int8_t -UnicodeString::caseCompare(const UnicodeString &text, uint32_t options) const { - return doCaseCompare(0, length(), text, 0, text.length(), options); -} - -inline int8_t -UnicodeString::caseCompare(int32_t start, - int32_t _length, - const UnicodeString &srcText, - uint32_t options) const { - return doCaseCompare(start, _length, srcText, 0, srcText.length(), options); -} - -inline int8_t -UnicodeString::caseCompare(ConstChar16Ptr srcChars, - int32_t srcLength, - uint32_t options) const { - return doCaseCompare(0, length(), srcChars, 0, srcLength, options); -} - -inline int8_t -UnicodeString::caseCompare(int32_t start, - int32_t _length, - const UnicodeString &srcText, - int32_t srcStart, - int32_t srcLength, - uint32_t options) const { - return doCaseCompare(start, _length, srcText, srcStart, srcLength, options); -} - -inline int8_t -UnicodeString::caseCompare(int32_t start, - int32_t _length, - const char16_t *srcChars, - uint32_t options) const { - return doCaseCompare(start, _length, srcChars, 0, _length, options); -} - -inline int8_t -UnicodeString::caseCompare(int32_t start, - int32_t _length, - const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength, - uint32_t options) const { - return doCaseCompare(start, _length, srcChars, srcStart, srcLength, options); -} - -inline int8_t -UnicodeString::caseCompareBetween(int32_t start, - int32_t limit, - const UnicodeString &srcText, - int32_t srcStart, - int32_t srcLimit, - uint32_t options) const { - return doCaseCompare(start, limit - start, srcText, srcStart, srcLimit - srcStart, options); -} - -inline int32_t -UnicodeString::indexOf(const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength, - int32_t start, - int32_t _length) const -{ - if(!srcText.isBogus()) { - srcText.pinIndices(srcStart, srcLength); - if(srcLength > 0) { - return indexOf(srcText.getArrayStart(), srcStart, srcLength, start, _length); - } - } - return -1; -} - -inline int32_t -UnicodeString::indexOf(const UnicodeString& text) const -{ return indexOf(text, 0, text.length(), 0, length()); } - -inline int32_t -UnicodeString::indexOf(const UnicodeString& text, - int32_t start) const { - pinIndex(start); - return indexOf(text, 0, text.length(), start, length() - start); -} - -inline int32_t -UnicodeString::indexOf(const UnicodeString& text, - int32_t start, - int32_t _length) const -{ return indexOf(text, 0, text.length(), start, _length); } - -inline int32_t -UnicodeString::indexOf(const char16_t *srcChars, - int32_t srcLength, - int32_t start) const { - pinIndex(start); - return indexOf(srcChars, 0, srcLength, start, length() - start); -} - -inline int32_t -UnicodeString::indexOf(ConstChar16Ptr srcChars, - int32_t srcLength, - int32_t start, - int32_t _length) const -{ return indexOf(srcChars, 0, srcLength, start, _length); } - -inline int32_t -UnicodeString::indexOf(char16_t c, - int32_t start, - int32_t _length) const -{ return doIndexOf(c, start, _length); } - -inline int32_t -UnicodeString::indexOf(UChar32 c, - int32_t start, - int32_t _length) const -{ return doIndexOf(c, start, _length); } - -inline int32_t -UnicodeString::indexOf(char16_t c) const -{ return doIndexOf(c, 0, length()); } - -inline int32_t -UnicodeString::indexOf(UChar32 c) const -{ return indexOf(c, 0, length()); } - -inline int32_t -UnicodeString::indexOf(char16_t c, - int32_t start) const { - pinIndex(start); - return doIndexOf(c, start, length() - start); -} - -inline int32_t -UnicodeString::indexOf(UChar32 c, - int32_t start) const { - pinIndex(start); - return indexOf(c, start, length() - start); -} - -inline int32_t -UnicodeString::lastIndexOf(ConstChar16Ptr srcChars, - int32_t srcLength, - int32_t start, - int32_t _length) const -{ return lastIndexOf(srcChars, 0, srcLength, start, _length); } - -inline int32_t -UnicodeString::lastIndexOf(const char16_t *srcChars, - int32_t srcLength, - int32_t start) const { - pinIndex(start); - return lastIndexOf(srcChars, 0, srcLength, start, length() - start); -} - -inline int32_t -UnicodeString::lastIndexOf(const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength, - int32_t start, - int32_t _length) const -{ - if(!srcText.isBogus()) { - srcText.pinIndices(srcStart, srcLength); - if(srcLength > 0) { - return lastIndexOf(srcText.getArrayStart(), srcStart, srcLength, start, _length); - } - } - return -1; -} - -inline int32_t -UnicodeString::lastIndexOf(const UnicodeString& text, - int32_t start, - int32_t _length) const -{ return lastIndexOf(text, 0, text.length(), start, _length); } - -inline int32_t -UnicodeString::lastIndexOf(const UnicodeString& text, - int32_t start) const { - pinIndex(start); - return lastIndexOf(text, 0, text.length(), start, length() - start); -} - -inline int32_t -UnicodeString::lastIndexOf(const UnicodeString& text) const -{ return lastIndexOf(text, 0, text.length(), 0, length()); } - -inline int32_t -UnicodeString::lastIndexOf(char16_t c, - int32_t start, - int32_t _length) const -{ return doLastIndexOf(c, start, _length); } - -inline int32_t -UnicodeString::lastIndexOf(UChar32 c, - int32_t start, - int32_t _length) const { - return doLastIndexOf(c, start, _length); -} - -inline int32_t -UnicodeString::lastIndexOf(char16_t c) const -{ return doLastIndexOf(c, 0, length()); } - -inline int32_t -UnicodeString::lastIndexOf(UChar32 c) const { - return lastIndexOf(c, 0, length()); -} - -inline int32_t -UnicodeString::lastIndexOf(char16_t c, - int32_t start) const { - pinIndex(start); - return doLastIndexOf(c, start, length() - start); -} - -inline int32_t -UnicodeString::lastIndexOf(UChar32 c, - int32_t start) const { - pinIndex(start); - return lastIndexOf(c, start, length() - start); -} - -inline UBool -UnicodeString::startsWith(const UnicodeString& text) const -{ return compare(0, text.length(), text, 0, text.length()) == 0; } - -inline UBool -UnicodeString::startsWith(const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) const -{ return doCompare(0, srcLength, srcText, srcStart, srcLength) == 0; } - -inline UBool -UnicodeString::startsWith(ConstChar16Ptr srcChars, int32_t srcLength) const { - if(srcLength < 0) { - srcLength = u_strlen(toUCharPtr(srcChars)); - } - return doCompare(0, srcLength, srcChars, 0, srcLength) == 0; -} - -inline UBool -UnicodeString::startsWith(const char16_t *srcChars, int32_t srcStart, int32_t srcLength) const { - if(srcLength < 0) { - srcLength = u_strlen(toUCharPtr(srcChars)); - } - return doCompare(0, srcLength, srcChars, srcStart, srcLength) == 0; -} - -inline UBool -UnicodeString::endsWith(const UnicodeString& text) const -{ return doCompare(length() - text.length(), text.length(), - text, 0, text.length()) == 0; } - -inline UBool -UnicodeString::endsWith(const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) const { - srcText.pinIndices(srcStart, srcLength); - return doCompare(length() - srcLength, srcLength, - srcText, srcStart, srcLength) == 0; -} - -inline UBool -UnicodeString::endsWith(ConstChar16Ptr srcChars, - int32_t srcLength) const { - if(srcLength < 0) { - srcLength = u_strlen(toUCharPtr(srcChars)); - } - return doCompare(length() - srcLength, srcLength, - srcChars, 0, srcLength) == 0; -} - -inline UBool -UnicodeString::endsWith(const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength) const { - if(srcLength < 0) { - srcLength = u_strlen(toUCharPtr(srcChars + srcStart)); - } - return doCompare(length() - srcLength, srcLength, - srcChars, srcStart, srcLength) == 0; -} - -//======================================== -// replace -//======================================== -inline UnicodeString& -UnicodeString::replace(int32_t start, - int32_t _length, - const UnicodeString& srcText) -{ return doReplace(start, _length, srcText, 0, srcText.length()); } - -inline UnicodeString& -UnicodeString::replace(int32_t start, - int32_t _length, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) -{ return doReplace(start, _length, srcText, srcStart, srcLength); } - -inline UnicodeString& -UnicodeString::replace(int32_t start, - int32_t _length, - ConstChar16Ptr srcChars, - int32_t srcLength) -{ return doReplace(start, _length, srcChars, 0, srcLength); } - -inline UnicodeString& -UnicodeString::replace(int32_t start, - int32_t _length, - const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength) -{ return doReplace(start, _length, srcChars, srcStart, srcLength); } - -inline UnicodeString& -UnicodeString::replace(int32_t start, - int32_t _length, - char16_t srcChar) -{ return doReplace(start, _length, &srcChar, 0, 1); } - -inline UnicodeString& -UnicodeString::replaceBetween(int32_t start, - int32_t limit, - const UnicodeString& srcText) -{ return doReplace(start, limit - start, srcText, 0, srcText.length()); } - -inline UnicodeString& -UnicodeString::replaceBetween(int32_t start, - int32_t limit, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLimit) -{ return doReplace(start, limit - start, srcText, srcStart, srcLimit - srcStart); } - -inline UnicodeString& -UnicodeString::findAndReplace(const UnicodeString& oldText, - const UnicodeString& newText) -{ return findAndReplace(0, length(), oldText, 0, oldText.length(), - newText, 0, newText.length()); } - -inline UnicodeString& -UnicodeString::findAndReplace(int32_t start, - int32_t _length, - const UnicodeString& oldText, - const UnicodeString& newText) -{ return findAndReplace(start, _length, oldText, 0, oldText.length(), - newText, 0, newText.length()); } - -// ============================ -// extract -// ============================ -inline void -UnicodeString::doExtract(int32_t start, - int32_t _length, - UnicodeString& target) const -{ target.replace(0, target.length(), *this, start, _length); } - -inline void -UnicodeString::extract(int32_t start, - int32_t _length, - Char16Ptr target, - int32_t targetStart) const -{ doExtract(start, _length, target, targetStart); } - -inline void -UnicodeString::extract(int32_t start, - int32_t _length, - UnicodeString& target) const -{ doExtract(start, _length, target); } - -#if !UCONFIG_NO_CONVERSION - -inline int32_t -UnicodeString::extract(int32_t start, - int32_t _length, - char *dst, - const char *codepage) const - -{ - // This dstSize value will be checked explicitly - return extract(start, _length, dst, dst!=0 ? 0xffffffff : 0, codepage); -} - -#endif - -inline void -UnicodeString::extractBetween(int32_t start, - int32_t limit, - char16_t *dst, - int32_t dstStart) const { - pinIndex(start); - pinIndex(limit); - doExtract(start, limit - start, dst, dstStart); -} - -inline UnicodeString -UnicodeString::tempSubStringBetween(int32_t start, int32_t limit) const { - return tempSubString(start, limit - start); -} - -inline char16_t -UnicodeString::doCharAt(int32_t offset) const -{ - if((uint32_t)offset < (uint32_t)length()) { - return getArrayStart()[offset]; - } else { - return kInvalidUChar; - } -} - -inline char16_t -UnicodeString::charAt(int32_t offset) const -{ return doCharAt(offset); } - -inline char16_t -UnicodeString::operator[] (int32_t offset) const -{ return doCharAt(offset); } - -inline UBool -UnicodeString::isEmpty() const { - // Arithmetic or logical right shift does not matter: only testing for 0. - return (fUnion.fFields.fLengthAndFlags>>kLengthShift) == 0; -} - -//======================================== -// Write implementation methods -//======================================== -inline void -UnicodeString::setZeroLength() { - fUnion.fFields.fLengthAndFlags &= kAllStorageFlags; -} - -inline void -UnicodeString::setShortLength(int32_t len) { - // requires 0 <= len <= kMaxShortLength - fUnion.fFields.fLengthAndFlags = - (int16_t)((fUnion.fFields.fLengthAndFlags & kAllStorageFlags) | (len << kLengthShift)); -} - -inline void -UnicodeString::setLength(int32_t len) { - if(len <= kMaxShortLength) { - setShortLength(len); - } else { - fUnion.fFields.fLengthAndFlags |= kLengthIsLarge; - fUnion.fFields.fLength = len; - } -} - -inline void -UnicodeString::setToEmpty() { - fUnion.fFields.fLengthAndFlags = kShortString; -} - -inline void -UnicodeString::setArray(char16_t *array, int32_t len, int32_t capacity) { - setLength(len); - fUnion.fFields.fArray = array; - fUnion.fFields.fCapacity = capacity; -} - -inline UnicodeString& -UnicodeString::operator= (char16_t ch) -{ return doReplace(0, length(), &ch, 0, 1); } - -inline UnicodeString& -UnicodeString::operator= (UChar32 ch) -{ return replace(0, length(), ch); } - -inline UnicodeString& -UnicodeString::setTo(const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) -{ - unBogus(); - return doReplace(0, length(), srcText, srcStart, srcLength); -} - -inline UnicodeString& -UnicodeString::setTo(const UnicodeString& srcText, - int32_t srcStart) -{ - unBogus(); - srcText.pinIndex(srcStart); - return doReplace(0, length(), srcText, srcStart, srcText.length() - srcStart); -} - -inline UnicodeString& -UnicodeString::setTo(const UnicodeString& srcText) -{ - return copyFrom(srcText); -} - -inline UnicodeString& -UnicodeString::setTo(const char16_t *srcChars, - int32_t srcLength) -{ - unBogus(); - return doReplace(0, length(), srcChars, 0, srcLength); -} - -inline UnicodeString& -UnicodeString::setTo(char16_t srcChar) -{ - unBogus(); - return doReplace(0, length(), &srcChar, 0, 1); -} - -inline UnicodeString& -UnicodeString::setTo(UChar32 srcChar) -{ - unBogus(); - return replace(0, length(), srcChar); -} - -inline UnicodeString& -UnicodeString::append(const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) -{ return doAppend(srcText, srcStart, srcLength); } - -inline UnicodeString& -UnicodeString::append(const UnicodeString& srcText) -{ return doAppend(srcText, 0, srcText.length()); } - -inline UnicodeString& -UnicodeString::append(const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength) -{ return doAppend(srcChars, srcStart, srcLength); } - -inline UnicodeString& -UnicodeString::append(ConstChar16Ptr srcChars, - int32_t srcLength) -{ return doAppend(srcChars, 0, srcLength); } - -inline UnicodeString& -UnicodeString::append(char16_t srcChar) -{ return doAppend(&srcChar, 0, 1); } - -inline UnicodeString& -UnicodeString::operator+= (char16_t ch) -{ return doAppend(&ch, 0, 1); } - -inline UnicodeString& -UnicodeString::operator+= (UChar32 ch) { - return append(ch); -} - -inline UnicodeString& -UnicodeString::operator+= (const UnicodeString& srcText) -{ return doAppend(srcText, 0, srcText.length()); } - -inline UnicodeString& -UnicodeString::insert(int32_t start, - const UnicodeString& srcText, - int32_t srcStart, - int32_t srcLength) -{ return doReplace(start, 0, srcText, srcStart, srcLength); } - -inline UnicodeString& -UnicodeString::insert(int32_t start, - const UnicodeString& srcText) -{ return doReplace(start, 0, srcText, 0, srcText.length()); } - -inline UnicodeString& -UnicodeString::insert(int32_t start, - const char16_t *srcChars, - int32_t srcStart, - int32_t srcLength) -{ return doReplace(start, 0, srcChars, srcStart, srcLength); } - -inline UnicodeString& -UnicodeString::insert(int32_t start, - ConstChar16Ptr srcChars, - int32_t srcLength) -{ return doReplace(start, 0, srcChars, 0, srcLength); } - -inline UnicodeString& -UnicodeString::insert(int32_t start, - char16_t srcChar) -{ return doReplace(start, 0, &srcChar, 0, 1); } - -inline UnicodeString& -UnicodeString::insert(int32_t start, - UChar32 srcChar) -{ return replace(start, 0, srcChar); } - - -inline UnicodeString& -UnicodeString::remove() -{ - // remove() of a bogus string makes the string empty and non-bogus - if(isBogus()) { - setToEmpty(); - } else { - setZeroLength(); - } - return *this; -} - -inline UnicodeString& -UnicodeString::remove(int32_t start, - int32_t _length) -{ - if(start <= 0 && _length == INT32_MAX) { - // remove(guaranteed everything) of a bogus string makes the string empty and non-bogus - return remove(); - } - return doReplace(start, _length, NULL, 0, 0); -} - -inline UnicodeString& -UnicodeString::removeBetween(int32_t start, - int32_t limit) -{ return doReplace(start, limit - start, NULL, 0, 0); } - -inline UnicodeString & -UnicodeString::retainBetween(int32_t start, int32_t limit) { - truncate(limit); - return doReplace(0, start, NULL, 0, 0); -} - -inline UBool -UnicodeString::truncate(int32_t targetLength) -{ - if(isBogus() && targetLength == 0) { - // truncate(0) of a bogus string makes the string empty and non-bogus - unBogus(); - return FALSE; - } else if((uint32_t)targetLength < (uint32_t)length()) { - setLength(targetLength); - return TRUE; - } else { - return FALSE; - } -} - -inline UnicodeString& -UnicodeString::reverse() -{ return doReverse(0, length()); } - -inline UnicodeString& -UnicodeString::reverse(int32_t start, - int32_t _length) -{ return doReverse(start, _length); } - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unorm.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unorm.h deleted file mode 100644 index 3839de1295..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unorm.h +++ /dev/null @@ -1,472 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (c) 1996-2016, International Business Machines Corporation -* and others. All Rights Reserved. -******************************************************************************* -* File unorm.h -* -* Created by: Vladimir Weinstein 12052000 -* -* Modification history : -* -* Date Name Description -* 02/01/01 synwee Added normalization quickcheck enum and method. -*/ -#ifndef UNORM_H -#define UNORM_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_NORMALIZATION - -#include "unicode/uiter.h" -#include "unicode/unorm2.h" - -/** - * \file - * \brief C API: Unicode Normalization - * - * Old Unicode normalization API. - * - * This API has been replaced by the unorm2.h API and is only available - * for backward compatibility. The functions here simply delegate to the - * unorm2.h functions, for example unorm2_getInstance() and unorm2_normalize(). - * There is one exception: The new API does not provide a replacement for unorm_compare(). - * Its declaration has been moved to unorm2.h. - * - * unorm_normalize transforms Unicode text into an equivalent composed or - * decomposed form, allowing for easier sorting and searching of text. - * unorm_normalize supports the standard normalization forms described in - * - * Unicode Standard Annex #15: Unicode Normalization Forms. - * - * Characters with accents or other adornments can be encoded in - * several different ways in Unicode. For example, take the character A-acute. - * In Unicode, this can be encoded as a single character (the - * "composed" form): - * - * \code - * 00C1 LATIN CAPITAL LETTER A WITH ACUTE - * \endcode - * - * or as two separate characters (the "decomposed" form): - * - * \code - * 0041 LATIN CAPITAL LETTER A - * 0301 COMBINING ACUTE ACCENT - * \endcode - * - * To a user of your program, however, both of these sequences should be - * treated as the same "user-level" character "A with acute accent". When you are searching or - * comparing text, you must ensure that these two sequences are treated - * equivalently. In addition, you must handle characters with more than one - * accent. Sometimes the order of a character's combining accents is - * significant, while in other cases accent sequences in different orders are - * really equivalent. - * - * Similarly, the string "ffi" can be encoded as three separate letters: - * - * \code - * 0066 LATIN SMALL LETTER F - * 0066 LATIN SMALL LETTER F - * 0069 LATIN SMALL LETTER I - * \endcode - * - * or as the single character - * - * \code - * FB03 LATIN SMALL LIGATURE FFI - * \endcode - * - * The ffi ligature is not a distinct semantic character, and strictly speaking - * it shouldn't be in Unicode at all, but it was included for compatibility - * with existing character sets that already provided it. The Unicode standard - * identifies such characters by giving them "compatibility" decompositions - * into the corresponding semantic characters. When sorting and searching, you - * will often want to use these mappings. - * - * unorm_normalize helps solve these problems by transforming text into the - * canonical composed and decomposed forms as shown in the first example above. - * In addition, you can have it perform compatibility decompositions so that - * you can treat compatibility characters the same as their equivalents. - * Finally, unorm_normalize rearranges accents into the proper canonical - * order, so that you do not have to worry about accent rearrangement on your - * own. - * - * Form FCD, "Fast C or D", is also designed for collation. - * It allows to work on strings that are not necessarily normalized - * with an algorithm (like in collation) that works under "canonical closure", i.e., it treats precomposed - * characters and their decomposed equivalents the same. - * - * It is not a normalization form because it does not provide for uniqueness of representation. Multiple strings - * may be canonically equivalent (their NFDs are identical) and may all conform to FCD without being identical - * themselves. - * - * The form is defined such that the "raw decomposition", the recursive canonical decomposition of each character, - * results in a string that is canonically ordered. This means that precomposed characters are allowed for as long - * as their decompositions do not need canonical reordering. - * - * Its advantage for a process like collation is that all NFD and most NFC texts - and many unnormalized texts - - * already conform to FCD and do not need to be normalized (NFD) for such a process. The FCD quick check will - * return UNORM_YES for most strings in practice. - * - * unorm_normalize(UNORM_FCD) may be implemented with UNORM_NFD. - * - * For more details on FCD see the collation design document: - * http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm - * - * ICU collation performs either NFD or FCD normalization automatically if normalization - * is turned on for the collator object. - * Beyond collation and string search, normalized strings may be useful for string equivalence comparisons, - * transliteration/transcription, unique representations, etc. - * - * The W3C generally recommends to exchange texts in NFC. - * Note also that most legacy character encodings use only precomposed forms and often do not - * encode any combining marks by themselves. For conversion to such character encodings the - * Unicode text needs to be normalized to NFC. - * For more usage examples, see the Unicode Standard Annex. - */ - -// Do not conditionalize the following enum with #ifndef U_HIDE_DEPRECATED_API, -// it is needed for layout of Normalizer object. -/** - * Constants for normalization modes. - * @deprecated ICU 56 Use unorm2.h instead. - */ -typedef enum { - /** No decomposition/composition. @deprecated ICU 56 Use unorm2.h instead. */ - UNORM_NONE = 1, - /** Canonical decomposition. @deprecated ICU 56 Use unorm2.h instead. */ - UNORM_NFD = 2, - /** Compatibility decomposition. @deprecated ICU 56 Use unorm2.h instead. */ - UNORM_NFKD = 3, - /** Canonical decomposition followed by canonical composition. @deprecated ICU 56 Use unorm2.h instead. */ - UNORM_NFC = 4, - /** Default normalization. @deprecated ICU 56 Use unorm2.h instead. */ - UNORM_DEFAULT = UNORM_NFC, - /** Compatibility decomposition followed by canonical composition. @deprecated ICU 56 Use unorm2.h instead. */ - UNORM_NFKC =5, - /** "Fast C or D" form. @deprecated ICU 56 Use unorm2.h instead. */ - UNORM_FCD = 6, - - /** One more than the highest normalization mode constant. @deprecated ICU 56 Use unorm2.h instead. */ - UNORM_MODE_COUNT -} UNormalizationMode; - -#ifndef U_HIDE_DEPRECATED_API - -/** - * Constants for options flags for normalization. - * Use 0 for default options, - * including normalization according to the Unicode version - * that is currently supported by ICU (see u_getUnicodeVersion). - * @deprecated ICU 56 Use unorm2.h instead. - */ -enum { - /** - * Options bit set value to select Unicode 3.2 normalization - * (except NormalizationCorrections). - * At most one Unicode version can be selected at a time. - * @deprecated ICU 56 Use unorm2.h instead. - */ - UNORM_UNICODE_3_2=0x20 -}; - -/** - * Lowest-order bit number of unorm_compare() options bits corresponding to - * normalization options bits. - * - * The options parameter for unorm_compare() uses most bits for - * itself and for various comparison and folding flags. - * The most significant bits, however, are shifted down and passed on - * to the normalization implementation. - * (That is, from unorm_compare(..., options, ...), - * options>>UNORM_COMPARE_NORM_OPTIONS_SHIFT will be passed on to the - * internal normalization functions.) - * - * @see unorm_compare - * @deprecated ICU 56 Use unorm2.h instead. - */ -#define UNORM_COMPARE_NORM_OPTIONS_SHIFT 20 - -/** - * Normalize a string. - * The string will be normalized according the specified normalization mode - * and options. - * The source and result buffers must not be the same, nor overlap. - * - * @param source The string to normalize. - * @param sourceLength The length of source, or -1 if NUL-terminated. - * @param mode The normalization mode; one of UNORM_NONE, - * UNORM_NFD, UNORM_NFC, UNORM_NFKC, UNORM_NFKD, UNORM_DEFAULT. - * @param options The normalization options, ORed together (0 for no options). - * @param result A pointer to a buffer to receive the result string. - * The result string is NUL-terminated if possible. - * @param resultLength The maximum size of result. - * @param status A pointer to a UErrorCode to receive any errors. - * @return The total buffer size needed; if greater than resultLength, - * the output was truncated, and the error code is set to U_BUFFER_OVERFLOW_ERROR. - * @deprecated ICU 56 Use unorm2.h instead. - */ -U_DEPRECATED int32_t U_EXPORT2 -unorm_normalize(const UChar *source, int32_t sourceLength, - UNormalizationMode mode, int32_t options, - UChar *result, int32_t resultLength, - UErrorCode *status); - -/** - * Performing quick check on a string, to quickly determine if the string is - * in a particular normalization format. - * Three types of result can be returned UNORM_YES, UNORM_NO or - * UNORM_MAYBE. Result UNORM_YES indicates that the argument - * string is in the desired normalized format, UNORM_NO determines that - * argument string is not in the desired normalized format. A - * UNORM_MAYBE result indicates that a more thorough check is required, - * the user may have to put the string in its normalized form and compare the - * results. - * - * @param source string for determining if it is in a normalized format - * @param sourcelength length of source to test, or -1 if NUL-terminated - * @param mode which normalization form to test for - * @param status a pointer to a UErrorCode to receive any errors - * @return UNORM_YES, UNORM_NO or UNORM_MAYBE - * - * @see unorm_isNormalized - * @deprecated ICU 56 Use unorm2.h instead. - */ -U_DEPRECATED UNormalizationCheckResult U_EXPORT2 -unorm_quickCheck(const UChar *source, int32_t sourcelength, - UNormalizationMode mode, - UErrorCode *status); - -/** - * Performing quick check on a string; same as unorm_quickCheck but - * takes an extra options parameter like most normalization functions. - * - * @param src String that is to be tested if it is in a normalization format. - * @param srcLength Length of source to test, or -1 if NUL-terminated. - * @param mode Which normalization form to test for. - * @param options The normalization options, ORed together (0 for no options). - * @param pErrorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return UNORM_YES, UNORM_NO or UNORM_MAYBE - * - * @see unorm_quickCheck - * @see unorm_isNormalized - * @deprecated ICU 56 Use unorm2.h instead. - */ -U_DEPRECATED UNormalizationCheckResult U_EXPORT2 -unorm_quickCheckWithOptions(const UChar *src, int32_t srcLength, - UNormalizationMode mode, int32_t options, - UErrorCode *pErrorCode); - -/** - * Test if a string is in a given normalization form. - * This is semantically equivalent to source.equals(normalize(source, mode)) . - * - * Unlike unorm_quickCheck(), this function returns a definitive result, - * never a "maybe". - * For NFD, NFKD, and FCD, both functions work exactly the same. - * For NFC and NFKC where quickCheck may return "maybe", this function will - * perform further tests to arrive at a TRUE/FALSE result. - * - * @param src String that is to be tested if it is in a normalization format. - * @param srcLength Length of source to test, or -1 if NUL-terminated. - * @param mode Which normalization form to test for. - * @param pErrorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return Boolean value indicating whether the source string is in the - * "mode" normalization form. - * - * @see unorm_quickCheck - * @deprecated ICU 56 Use unorm2.h instead. - */ -U_DEPRECATED UBool U_EXPORT2 -unorm_isNormalized(const UChar *src, int32_t srcLength, - UNormalizationMode mode, - UErrorCode *pErrorCode); - -/** - * Test if a string is in a given normalization form; same as unorm_isNormalized but - * takes an extra options parameter like most normalization functions. - * - * @param src String that is to be tested if it is in a normalization format. - * @param srcLength Length of source to test, or -1 if NUL-terminated. - * @param mode Which normalization form to test for. - * @param options The normalization options, ORed together (0 for no options). - * @param pErrorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return Boolean value indicating whether the source string is in the - * "mode/options" normalization form. - * - * @see unorm_quickCheck - * @see unorm_isNormalized - * @deprecated ICU 56 Use unorm2.h instead. - */ -U_DEPRECATED UBool U_EXPORT2 -unorm_isNormalizedWithOptions(const UChar *src, int32_t srcLength, - UNormalizationMode mode, int32_t options, - UErrorCode *pErrorCode); - -/** - * Iterative normalization forward. - * This function (together with unorm_previous) is somewhat - * similar to the C++ Normalizer class (see its non-static functions). - * - * Iterative normalization is useful when only a small portion of a longer - * string/text needs to be processed. - * - * For example, the likelihood may be high that processing the first 10% of some - * text will be sufficient to find certain data. - * Another example: When one wants to concatenate two normalized strings and get a - * normalized result, it is much more efficient to normalize just a small part of - * the result around the concatenation place instead of re-normalizing everything. - * - * The input text is an instance of the C character iteration API UCharIterator. - * It may wrap around a simple string, a CharacterIterator, a Replaceable, or any - * other kind of text object. - * - * If a buffer overflow occurs, then the caller needs to reset the iterator to the - * old index and call the function again with a larger buffer - if the caller cares - * for the actual output. - * Regardless of the output buffer, the iterator will always be moved to the next - * normalization boundary. - * - * This function (like unorm_previous) serves two purposes: - * - * 1) To find the next boundary so that the normalization of the part of the text - * from the current position to that boundary does not affect and is not affected - * by the part of the text beyond that boundary. - * - * 2) To normalize the text up to the boundary. - * - * The second step is optional, per the doNormalize parameter. - * It is omitted for operations like string concatenation, where the two adjacent - * string ends need to be normalized together. - * In such a case, the output buffer will just contain a copy of the text up to the - * boundary. - * - * pNeededToNormalize is an output-only parameter. Its output value is only defined - * if normalization was requested (doNormalize) and successful (especially, no - * buffer overflow). - * It is useful for operations like a normalizing transliterator, where one would - * not want to replace a piece of text if it is not modified. - * - * If doNormalize==TRUE and pNeededToNormalize!=NULL then *pNeeded... is set TRUE - * if the normalization was necessary. - * - * If doNormalize==FALSE then *pNeededToNormalize will be set to FALSE. - * - * If the buffer overflows, then *pNeededToNormalize will be undefined; - * essentially, whenever U_FAILURE is true (like in buffer overflows), this result - * will be undefined. - * - * @param src The input text in the form of a C character iterator. - * @param dest The output buffer; can be NULL if destCapacity==0 for pure preflighting. - * @param destCapacity The number of UChars that fit into dest. - * @param mode The normalization mode. - * @param options The normalization options, ORed together (0 for no options). - * @param doNormalize Indicates if the source text up to the next boundary - * is to be normalized (TRUE) or just copied (FALSE). - * @param pNeededToNormalize Output flag indicating if the normalization resulted in - * different text from the input. - * Not defined if an error occurs including buffer overflow. - * Always FALSE if !doNormalize. - * @param pErrorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return Length of output (number of UChars) when successful or buffer overflow. - * - * @see unorm_previous - * @see unorm_normalize - * - * @deprecated ICU 56 Use unorm2.h instead. - */ -U_DEPRECATED int32_t U_EXPORT2 -unorm_next(UCharIterator *src, - UChar *dest, int32_t destCapacity, - UNormalizationMode mode, int32_t options, - UBool doNormalize, UBool *pNeededToNormalize, - UErrorCode *pErrorCode); - -/** - * Iterative normalization backward. - * This function (together with unorm_next) is somewhat - * similar to the C++ Normalizer class (see its non-static functions). - * For all details see unorm_next. - * - * @param src The input text in the form of a C character iterator. - * @param dest The output buffer; can be NULL if destCapacity==0 for pure preflighting. - * @param destCapacity The number of UChars that fit into dest. - * @param mode The normalization mode. - * @param options The normalization options, ORed together (0 for no options). - * @param doNormalize Indicates if the source text up to the next boundary - * is to be normalized (TRUE) or just copied (FALSE). - * @param pNeededToNormalize Output flag indicating if the normalization resulted in - * different text from the input. - * Not defined if an error occurs including buffer overflow. - * Always FALSE if !doNormalize. - * @param pErrorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return Length of output (number of UChars) when successful or buffer overflow. - * - * @see unorm_next - * @see unorm_normalize - * - * @deprecated ICU 56 Use unorm2.h instead. - */ -U_DEPRECATED int32_t U_EXPORT2 -unorm_previous(UCharIterator *src, - UChar *dest, int32_t destCapacity, - UNormalizationMode mode, int32_t options, - UBool doNormalize, UBool *pNeededToNormalize, - UErrorCode *pErrorCode); - -/** - * Concatenate normalized strings, making sure that the result is normalized as well. - * - * If both the left and the right strings are in - * the normalization form according to "mode/options", - * then the result will be - * - * \code - * dest=normalize(left+right, mode, options) - * \endcode - * - * With the input strings already being normalized, - * this function will use unorm_next() and unorm_previous() - * to find the adjacent end pieces of the input strings. - * Only the concatenation of these end pieces will be normalized and - * then concatenated with the remaining parts of the input strings. - * - * It is allowed to have dest==left to avoid copying the entire left string. - * - * @param left Left source string, may be same as dest. - * @param leftLength Length of left source string, or -1 if NUL-terminated. - * @param right Right source string. Must not be the same as dest, nor overlap. - * @param rightLength Length of right source string, or -1 if NUL-terminated. - * @param dest The output buffer; can be NULL if destCapacity==0 for pure preflighting. - * @param destCapacity The number of UChars that fit into dest. - * @param mode The normalization mode. - * @param options The normalization options, ORed together (0 for no options). - * @param pErrorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return Length of output (number of UChars) when successful or buffer overflow. - * - * @see unorm_normalize - * @see unorm_next - * @see unorm_previous - * - * @deprecated ICU 56 Use unorm2.h instead. - */ -U_DEPRECATED int32_t U_EXPORT2 -unorm_concatenate(const UChar *left, int32_t leftLength, - const UChar *right, int32_t rightLength, - UChar *dest, int32_t destCapacity, - UNormalizationMode mode, int32_t options, - UErrorCode *pErrorCode); - -#endif /* U_HIDE_DEPRECATED_API */ -#endif /* #if !UCONFIG_NO_NORMALIZATION */ -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unorm2.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unorm2.h deleted file mode 100644 index 39889bdf71..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unorm2.h +++ /dev/null @@ -1,603 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2009-2015, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: unorm2.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2009dec15 -* created by: Markus W. Scherer -*/ - -#ifndef __UNORM2_H__ -#define __UNORM2_H__ - -/** - * \file - * \brief C API: New API for Unicode Normalization. - * - * Unicode normalization functionality for standard Unicode normalization or - * for using custom mapping tables. - * All instances of UNormalizer2 are unmodifiable/immutable. - * Instances returned by unorm2_getInstance() are singletons that must not be deleted by the caller. - * For more details see the Normalizer2 C++ class. - */ - -#include "unicode/utypes.h" -#include "unicode/localpointer.h" -#include "unicode/stringoptions.h" -#include "unicode/uset.h" - -/** - * Constants for normalization modes. - * For details about standard Unicode normalization forms - * and about the algorithms which are also used with custom mapping tables - * see http://www.unicode.org/unicode/reports/tr15/ - * @stable ICU 4.4 - */ -typedef enum { - /** - * Decomposition followed by composition. - * Same as standard NFC when using an "nfc" instance. - * Same as standard NFKC when using an "nfkc" instance. - * For details about standard Unicode normalization forms - * see http://www.unicode.org/unicode/reports/tr15/ - * @stable ICU 4.4 - */ - UNORM2_COMPOSE, - /** - * Map, and reorder canonically. - * Same as standard NFD when using an "nfc" instance. - * Same as standard NFKD when using an "nfkc" instance. - * For details about standard Unicode normalization forms - * see http://www.unicode.org/unicode/reports/tr15/ - * @stable ICU 4.4 - */ - UNORM2_DECOMPOSE, - /** - * "Fast C or D" form. - * If a string is in this form, then further decomposition without reordering - * would yield the same form as DECOMPOSE. - * Text in "Fast C or D" form can be processed efficiently with data tables - * that are "canonically closed", that is, that provide equivalent data for - * equivalent text, without having to be fully normalized. - * Not a standard Unicode normalization form. - * Not a unique form: Different FCD strings can be canonically equivalent. - * For details see http://www.unicode.org/notes/tn5/#FCD - * @stable ICU 4.4 - */ - UNORM2_FCD, - /** - * Compose only contiguously. - * Also known as "FCC" or "Fast C Contiguous". - * The result will often but not always be in NFC. - * The result will conform to FCD which is useful for processing. - * Not a standard Unicode normalization form. - * For details see http://www.unicode.org/notes/tn5/#FCC - * @stable ICU 4.4 - */ - UNORM2_COMPOSE_CONTIGUOUS -} UNormalization2Mode; - -/** - * Result values for normalization quick check functions. - * For details see http://www.unicode.org/reports/tr15/#Detecting_Normalization_Forms - * @stable ICU 2.0 - */ -typedef enum UNormalizationCheckResult { - /** - * The input string is not in the normalization form. - * @stable ICU 2.0 - */ - UNORM_NO, - /** - * The input string is in the normalization form. - * @stable ICU 2.0 - */ - UNORM_YES, - /** - * The input string may or may not be in the normalization form. - * This value is only returned for composition forms like NFC and FCC, - * when a backward-combining character is found for which the surrounding text - * would have to be analyzed further. - * @stable ICU 2.0 - */ - UNORM_MAYBE -} UNormalizationCheckResult; - -/** - * Opaque C service object type for the new normalization API. - * @stable ICU 4.4 - */ -struct UNormalizer2; -typedef struct UNormalizer2 UNormalizer2; /**< C typedef for struct UNormalizer2. @stable ICU 4.4 */ - -#if !UCONFIG_NO_NORMALIZATION - -/** - * Returns a UNormalizer2 instance for Unicode NFC normalization. - * Same as unorm2_getInstance(NULL, "nfc", UNORM2_COMPOSE, pErrorCode). - * Returns an unmodifiable singleton instance. Do not delete it. - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the requested Normalizer2, if successful - * @stable ICU 49 - */ -U_STABLE const UNormalizer2 * U_EXPORT2 -unorm2_getNFCInstance(UErrorCode *pErrorCode); - -/** - * Returns a UNormalizer2 instance for Unicode NFD normalization. - * Same as unorm2_getInstance(NULL, "nfc", UNORM2_DECOMPOSE, pErrorCode). - * Returns an unmodifiable singleton instance. Do not delete it. - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the requested Normalizer2, if successful - * @stable ICU 49 - */ -U_STABLE const UNormalizer2 * U_EXPORT2 -unorm2_getNFDInstance(UErrorCode *pErrorCode); - -/** - * Returns a UNormalizer2 instance for Unicode NFKC normalization. - * Same as unorm2_getInstance(NULL, "nfkc", UNORM2_COMPOSE, pErrorCode). - * Returns an unmodifiable singleton instance. Do not delete it. - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the requested Normalizer2, if successful - * @stable ICU 49 - */ -U_STABLE const UNormalizer2 * U_EXPORT2 -unorm2_getNFKCInstance(UErrorCode *pErrorCode); - -/** - * Returns a UNormalizer2 instance for Unicode NFKD normalization. - * Same as unorm2_getInstance(NULL, "nfkc", UNORM2_DECOMPOSE, pErrorCode). - * Returns an unmodifiable singleton instance. Do not delete it. - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the requested Normalizer2, if successful - * @stable ICU 49 - */ -U_STABLE const UNormalizer2 * U_EXPORT2 -unorm2_getNFKDInstance(UErrorCode *pErrorCode); - -/** - * Returns a UNormalizer2 instance for Unicode NFKC_Casefold normalization. - * Same as unorm2_getInstance(NULL, "nfkc_cf", UNORM2_COMPOSE, pErrorCode). - * Returns an unmodifiable singleton instance. Do not delete it. - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the requested Normalizer2, if successful - * @stable ICU 49 - */ -U_STABLE const UNormalizer2 * U_EXPORT2 -unorm2_getNFKCCasefoldInstance(UErrorCode *pErrorCode); - -/** - * Returns a UNormalizer2 instance which uses the specified data file - * (packageName/name similar to ucnv_openPackage() and ures_open()/ResourceBundle) - * and which composes or decomposes text according to the specified mode. - * Returns an unmodifiable singleton instance. Do not delete it. - * - * Use packageName=NULL for data files that are part of ICU's own data. - * Use name="nfc" and UNORM2_COMPOSE/UNORM2_DECOMPOSE for Unicode standard NFC/NFD. - * Use name="nfkc" and UNORM2_COMPOSE/UNORM2_DECOMPOSE for Unicode standard NFKC/NFKD. - * Use name="nfkc_cf" and UNORM2_COMPOSE for Unicode standard NFKC_CF=NFKC_Casefold. - * - * @param packageName NULL for ICU built-in data, otherwise application data package name - * @param name "nfc" or "nfkc" or "nfkc_cf" or name of custom data file - * @param mode normalization mode (compose or decompose etc.) - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the requested UNormalizer2, if successful - * @stable ICU 4.4 - */ -U_STABLE const UNormalizer2 * U_EXPORT2 -unorm2_getInstance(const char *packageName, - const char *name, - UNormalization2Mode mode, - UErrorCode *pErrorCode); - -/** - * Constructs a filtered normalizer wrapping any UNormalizer2 instance - * and a filter set. - * Both are aliased and must not be modified or deleted while this object - * is used. - * The filter set should be frozen; otherwise the performance will suffer greatly. - * @param norm2 wrapped UNormalizer2 instance - * @param filterSet USet which determines the characters to be normalized - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the requested UNormalizer2, if successful - * @stable ICU 4.4 - */ -U_STABLE UNormalizer2 * U_EXPORT2 -unorm2_openFiltered(const UNormalizer2 *norm2, const USet *filterSet, UErrorCode *pErrorCode); - -/** - * Closes a UNormalizer2 instance from unorm2_openFiltered(). - * Do not close instances from unorm2_getInstance()! - * @param norm2 UNormalizer2 instance to be closed - * @stable ICU 4.4 - */ -U_STABLE void U_EXPORT2 -unorm2_close(UNormalizer2 *norm2); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUNormalizer2Pointer - * "Smart pointer" class, closes a UNormalizer2 via unorm2_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUNormalizer2Pointer, UNormalizer2, unorm2_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Writes the normalized form of the source string to the destination string - * (replacing its contents) and returns the length of the destination string. - * The source and destination strings must be different buffers. - * @param norm2 UNormalizer2 instance - * @param src source string - * @param length length of the source string, or -1 if NUL-terminated - * @param dest destination string; its contents is replaced with normalized src - * @param capacity number of UChars that can be written to dest - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return dest - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -unorm2_normalize(const UNormalizer2 *norm2, - const UChar *src, int32_t length, - UChar *dest, int32_t capacity, - UErrorCode *pErrorCode); -/** - * Appends the normalized form of the second string to the first string - * (merging them at the boundary) and returns the length of the first string. - * The result is normalized if the first string was normalized. - * The first and second strings must be different buffers. - * @param norm2 UNormalizer2 instance - * @param first string, should be normalized - * @param firstLength length of the first string, or -1 if NUL-terminated - * @param firstCapacity number of UChars that can be written to first - * @param second string, will be normalized - * @param secondLength length of the source string, or -1 if NUL-terminated - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return first - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -unorm2_normalizeSecondAndAppend(const UNormalizer2 *norm2, - UChar *first, int32_t firstLength, int32_t firstCapacity, - const UChar *second, int32_t secondLength, - UErrorCode *pErrorCode); -/** - * Appends the second string to the first string - * (merging them at the boundary) and returns the length of the first string. - * The result is normalized if both the strings were normalized. - * The first and second strings must be different buffers. - * @param norm2 UNormalizer2 instance - * @param first string, should be normalized - * @param firstLength length of the first string, or -1 if NUL-terminated - * @param firstCapacity number of UChars that can be written to first - * @param second string, should be normalized - * @param secondLength length of the source string, or -1 if NUL-terminated - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return first - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -unorm2_append(const UNormalizer2 *norm2, - UChar *first, int32_t firstLength, int32_t firstCapacity, - const UChar *second, int32_t secondLength, - UErrorCode *pErrorCode); - -/** - * Gets the decomposition mapping of c. - * Roughly equivalent to normalizing the String form of c - * on a UNORM2_DECOMPOSE UNormalizer2 instance, but much faster, and except that this function - * returns a negative value and does not write a string - * if c does not have a decomposition mapping in this instance's data. - * This function is independent of the mode of the UNormalizer2. - * @param norm2 UNormalizer2 instance - * @param c code point - * @param decomposition String buffer which will be set to c's - * decomposition mapping, if there is one. - * @param capacity number of UChars that can be written to decomposition - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the non-negative length of c's decomposition, if there is one; otherwise a negative value - * @stable ICU 4.6 - */ -U_STABLE int32_t U_EXPORT2 -unorm2_getDecomposition(const UNormalizer2 *norm2, - UChar32 c, UChar *decomposition, int32_t capacity, - UErrorCode *pErrorCode); - -/** - * Gets the raw decomposition mapping of c. - * - * This is similar to the unorm2_getDecomposition() function but returns the - * raw decomposition mapping as specified in UnicodeData.txt or - * (for custom data) in the mapping files processed by the gennorm2 tool. - * By contrast, unorm2_getDecomposition() returns the processed, - * recursively-decomposed version of this mapping. - * - * When used on a standard NFKC Normalizer2 instance, - * unorm2_getRawDecomposition() returns the Unicode Decomposition_Mapping (dm) property. - * - * When used on a standard NFC Normalizer2 instance, - * it returns the Decomposition_Mapping only if the Decomposition_Type (dt) is Canonical (Can); - * in this case, the result contains either one or two code points (=1..4 UChars). - * - * This function is independent of the mode of the UNormalizer2. - * @param norm2 UNormalizer2 instance - * @param c code point - * @param decomposition String buffer which will be set to c's - * raw decomposition mapping, if there is one. - * @param capacity number of UChars that can be written to decomposition - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return the non-negative length of c's raw decomposition, if there is one; otherwise a negative value - * @stable ICU 49 - */ -U_STABLE int32_t U_EXPORT2 -unorm2_getRawDecomposition(const UNormalizer2 *norm2, - UChar32 c, UChar *decomposition, int32_t capacity, - UErrorCode *pErrorCode); - -/** - * Performs pairwise composition of a & b and returns the composite if there is one. - * - * Returns a composite code point c only if c has a two-way mapping to a+b. - * In standard Unicode normalization, this means that - * c has a canonical decomposition to a+b - * and c does not have the Full_Composition_Exclusion property. - * - * This function is independent of the mode of the UNormalizer2. - * @param norm2 UNormalizer2 instance - * @param a A (normalization starter) code point. - * @param b Another code point. - * @return The non-negative composite code point if there is one; otherwise a negative value. - * @stable ICU 49 - */ -U_STABLE UChar32 U_EXPORT2 -unorm2_composePair(const UNormalizer2 *norm2, UChar32 a, UChar32 b); - -/** - * Gets the combining class of c. - * The default implementation returns 0 - * but all standard implementations return the Unicode Canonical_Combining_Class value. - * @param norm2 UNormalizer2 instance - * @param c code point - * @return c's combining class - * @stable ICU 49 - */ -U_STABLE uint8_t U_EXPORT2 -unorm2_getCombiningClass(const UNormalizer2 *norm2, UChar32 c); - -/** - * Tests if the string is normalized. - * Internally, in cases where the quickCheck() method would return "maybe" - * (which is only possible for the two COMPOSE modes) this method - * resolves to "yes" or "no" to provide a definitive result, - * at the cost of doing more work in those cases. - * @param norm2 UNormalizer2 instance - * @param s input string - * @param length length of the string, or -1 if NUL-terminated - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return TRUE if s is normalized - * @stable ICU 4.4 - */ -U_STABLE UBool U_EXPORT2 -unorm2_isNormalized(const UNormalizer2 *norm2, - const UChar *s, int32_t length, - UErrorCode *pErrorCode); - -/** - * Tests if the string is normalized. - * For the two COMPOSE modes, the result could be "maybe" in cases that - * would take a little more work to resolve definitively. - * Use spanQuickCheckYes() and normalizeSecondAndAppend() for a faster - * combination of quick check + normalization, to avoid - * re-checking the "yes" prefix. - * @param norm2 UNormalizer2 instance - * @param s input string - * @param length length of the string, or -1 if NUL-terminated - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return UNormalizationCheckResult - * @stable ICU 4.4 - */ -U_STABLE UNormalizationCheckResult U_EXPORT2 -unorm2_quickCheck(const UNormalizer2 *norm2, - const UChar *s, int32_t length, - UErrorCode *pErrorCode); - -/** - * Returns the end of the normalized substring of the input string. - * In other words, with end=spanQuickCheckYes(s, ec); - * the substring UnicodeString(s, 0, end) - * will pass the quick check with a "yes" result. - * - * The returned end index is usually one or more characters before the - * "no" or "maybe" character: The end index is at a normalization boundary. - * (See the class documentation for more about normalization boundaries.) - * - * When the goal is a normalized string and most input strings are expected - * to be normalized already, then call this method, - * and if it returns a prefix shorter than the input string, - * copy that prefix and use normalizeSecondAndAppend() for the remainder. - * @param norm2 UNormalizer2 instance - * @param s input string - * @param length length of the string, or -1 if NUL-terminated - * @param pErrorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return "yes" span end index - * @stable ICU 4.4 - */ -U_STABLE int32_t U_EXPORT2 -unorm2_spanQuickCheckYes(const UNormalizer2 *norm2, - const UChar *s, int32_t length, - UErrorCode *pErrorCode); - -/** - * Tests if the character always has a normalization boundary before it, - * regardless of context. - * For details see the Normalizer2 base class documentation. - * @param norm2 UNormalizer2 instance - * @param c character to test - * @return TRUE if c has a normalization boundary before it - * @stable ICU 4.4 - */ -U_STABLE UBool U_EXPORT2 -unorm2_hasBoundaryBefore(const UNormalizer2 *norm2, UChar32 c); - -/** - * Tests if the character always has a normalization boundary after it, - * regardless of context. - * For details see the Normalizer2 base class documentation. - * @param norm2 UNormalizer2 instance - * @param c character to test - * @return TRUE if c has a normalization boundary after it - * @stable ICU 4.4 - */ -U_STABLE UBool U_EXPORT2 -unorm2_hasBoundaryAfter(const UNormalizer2 *norm2, UChar32 c); - -/** - * Tests if the character is normalization-inert. - * For details see the Normalizer2 base class documentation. - * @param norm2 UNormalizer2 instance - * @param c character to test - * @return TRUE if c is normalization-inert - * @stable ICU 4.4 - */ -U_STABLE UBool U_EXPORT2 -unorm2_isInert(const UNormalizer2 *norm2, UChar32 c); - -/** - * Compares two strings for canonical equivalence. - * Further options include case-insensitive comparison and - * code point order (as opposed to code unit order). - * - * Canonical equivalence between two strings is defined as their normalized - * forms (NFD or NFC) being identical. - * This function compares strings incrementally instead of normalizing - * (and optionally case-folding) both strings entirely, - * improving performance significantly. - * - * Bulk normalization is only necessary if the strings do not fulfill the FCD - * conditions. Only in this case, and only if the strings are relatively long, - * is memory allocated temporarily. - * For FCD strings and short non-FCD strings there is no memory allocation. - * - * Semantically, this is equivalent to - * strcmp[CodePointOrder](NFD(foldCase(NFD(s1))), NFD(foldCase(NFD(s2)))) - * where code point order and foldCase are all optional. - * - * UAX 21 2.5 Caseless Matching specifies that for a canonical caseless match - * the case folding must be performed first, then the normalization. - * - * @param s1 First source string. - * @param length1 Length of first source string, or -1 if NUL-terminated. - * - * @param s2 Second source string. - * @param length2 Length of second source string, or -1 if NUL-terminated. - * - * @param options A bit set of options: - * - U_FOLD_CASE_DEFAULT or 0 is used for default options: - * Case-sensitive comparison in code unit order, and the input strings - * are quick-checked for FCD. - * - * - UNORM_INPUT_IS_FCD - * Set if the caller knows that both s1 and s2 fulfill the FCD conditions. - * If not set, the function will quickCheck for FCD - * and normalize if necessary. - * - * - U_COMPARE_CODE_POINT_ORDER - * Set to choose code point order instead of code unit order - * (see u_strCompare for details). - * - * - U_COMPARE_IGNORE_CASE - * Set to compare strings case-insensitively using case folding, - * instead of case-sensitively. - * If set, then the following case folding options are used. - * - * - Options as used with case-insensitive comparisons, currently: - * - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I - * (see u_strCaseCompare for details) - * - * - regular normalization options shifted left by UNORM_COMPARE_NORM_OPTIONS_SHIFT - * - * @param pErrorCode ICU error code in/out parameter. - * Must fulfill U_SUCCESS before the function call. - * @return <0 or 0 or >0 as usual for string comparisons - * - * @see unorm_normalize - * @see UNORM_FCD - * @see u_strCompare - * @see u_strCaseCompare - * - * @stable ICU 2.2 - */ -U_STABLE int32_t U_EXPORT2 -unorm_compare(const UChar *s1, int32_t length1, - const UChar *s2, int32_t length2, - uint32_t options, - UErrorCode *pErrorCode); - -#endif /* !UCONFIG_NO_NORMALIZATION */ -#endif /* __UNORM2_H__ */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unum.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unum.h deleted file mode 100644 index e1908cf5d3..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unum.h +++ /dev/null @@ -1,1493 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 1997-2015, International Business Machines Corporation and others. -* All Rights Reserved. -* Modification History: -* -* Date Name Description -* 06/24/99 helena Integrated Alan's NF enhancements and Java2 bug fixes -******************************************************************************* -*/ - -#ifndef _UNUM -#define _UNUM - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/localpointer.h" -#include "unicode/uloc.h" -#include "unicode/ucurr.h" -#include "unicode/umisc.h" -#include "unicode/parseerr.h" -#include "unicode/uformattable.h" -#include "unicode/udisplaycontext.h" -#include "unicode/ufieldpositer.h" - -/** - * \file - * \brief C API: Compatibility APIs for number formatting. - * - *

Number Format C API

- * - *

IMPORTANT: New users with are strongly encouraged to - * see if unumberformatter.h fits their use case. Although not deprecated, - * this header is provided for backwards compatibility only. - * - * Number Format C API Provides functions for - * formatting and parsing a number. Also provides methods for - * determining which locales have number formats, and what their names - * are. - *

- * UNumberFormat helps you to format and parse numbers for any locale. - * Your code can be completely independent of the locale conventions - * for decimal points, thousands-separators, or even the particular - * decimal digits used, or whether the number format is even decimal. - * There are different number format styles like decimal, currency, - * percent and spellout. - *

- * To format a number for the current Locale, use one of the static - * factory methods: - *

- * \code
- *    UChar myString[20];
- *    double myNumber = 7.0;
- *    UErrorCode status = U_ZERO_ERROR;
- *    UNumberFormat* nf = unum_open(UNUM_DEFAULT, NULL, -1, NULL, NULL, &status);
- *    unum_formatDouble(nf, myNumber, myString, 20, NULL, &status);
- *    printf(" Example 1: %s\n", austrdup(myString) ); //austrdup( a function used to convert UChar* to char*)
- * \endcode
- * 
- * If you are formatting multiple numbers, it is more efficient to get - * the format and use it multiple times so that the system doesn't - * have to fetch the information about the local language and country - * conventions multiple times. - *
- * \code
- * uint32_t i, resultlength, reslenneeded;
- * UErrorCode status = U_ZERO_ERROR;
- * UFieldPosition pos;
- * uint32_t a[] = { 123, 3333, -1234567 };
- * const uint32_t a_len = sizeof(a) / sizeof(a[0]);
- * UNumberFormat* nf;
- * UChar* result = NULL;
- *
- * nf = unum_open(UNUM_DEFAULT, NULL, -1, NULL, NULL, &status);
- * for (i = 0; i < a_len; i++) {
- *    resultlength=0;
- *    reslenneeded=unum_format(nf, a[i], NULL, resultlength, &pos, &status);
- *    result = NULL;
- *    if(status==U_BUFFER_OVERFLOW_ERROR){
- *       status=U_ZERO_ERROR;
- *       resultlength=reslenneeded+1;
- *       result=(UChar*)malloc(sizeof(UChar) * resultlength);
- *       unum_format(nf, a[i], result, resultlength, &pos, &status);
- *    }
- *    printf( " Example 2: %s\n", austrdup(result));
- *    free(result);
- * }
- * \endcode
- * 
- * To format a number for a different Locale, specify it in the - * call to unum_open(). - *
- * \code
- *     UNumberFormat* nf = unum_open(UNUM_DEFAULT, NULL, -1, "fr_FR", NULL, &success)
- * \endcode
- * 
- * You can use a NumberFormat API unum_parse() to parse. - *
- * \code
- *    UErrorCode status = U_ZERO_ERROR;
- *    int32_t pos=0;
- *    int32_t num;
- *    num = unum_parse(nf, str, u_strlen(str), &pos, &status);
- * \endcode
- * 
- * Use UNUM_DECIMAL to get the normal number format for that country. - * There are other static options available. Use UNUM_CURRENCY - * to get the currency number format for that country. Use UNUM_PERCENT - * to get a format for displaying percentages. With this format, a - * fraction from 0.53 is displayed as 53%. - *

- * Use a pattern to create either a DecimalFormat or a RuleBasedNumberFormat - * formatter. The pattern must conform to the syntax defined for those - * formatters. - *

- * You can also control the display of numbers with such function as - * unum_getAttributes() and unum_setAttributes(), which let you set the - * minimum fraction digits, grouping, etc. - * @see UNumberFormatAttributes for more details - *

- * You can also use forms of the parse and format methods with - * ParsePosition and UFieldPosition to allow you to: - *

    - *
  • (a) progressively parse through pieces of a string. - *
  • (b) align the decimal point and other areas. - *
- *

- * It is also possible to change or set the symbols used for a particular - * locale like the currency symbol, the grouping separator , monetary separator - * etc by making use of functions unum_setSymbols() and unum_getSymbols(). - */ - -/** A number formatter. - * For usage in C programs. - * @stable ICU 2.0 - */ -typedef void* UNumberFormat; - -/** The possible number format styles. - * @stable ICU 2.0 - */ -typedef enum UNumberFormatStyle { - /** - * Decimal format defined by a pattern string. - * @stable ICU 3.0 - */ - UNUM_PATTERN_DECIMAL=0, - /** - * Decimal format ("normal" style). - * @stable ICU 2.0 - */ - UNUM_DECIMAL=1, - /** - * Currency format (generic). - * Defaults to UNUM_CURRENCY_STANDARD style - * (using currency symbol, e.g., "$1.00", with non-accounting - * style for negative values e.g. using minus sign). - * The specific style may be specified using the -cf- locale key. - * @stable ICU 2.0 - */ - UNUM_CURRENCY=2, - /** - * Percent format - * @stable ICU 2.0 - */ - UNUM_PERCENT=3, - /** - * Scientific format - * @stable ICU 2.1 - */ - UNUM_SCIENTIFIC=4, - /** - * Spellout rule-based format. The default ruleset can be specified/changed using - * unum_setTextAttribute with UNUM_DEFAULT_RULESET; the available public rulesets - * can be listed using unum_getTextAttribute with UNUM_PUBLIC_RULESETS. - * @stable ICU 2.0 - */ - UNUM_SPELLOUT=5, - /** - * Ordinal rule-based format . The default ruleset can be specified/changed using - * unum_setTextAttribute with UNUM_DEFAULT_RULESET; the available public rulesets - * can be listed using unum_getTextAttribute with UNUM_PUBLIC_RULESETS. - * @stable ICU 3.0 - */ - UNUM_ORDINAL=6, - /** - * Duration rule-based format - * @stable ICU 3.0 - */ - UNUM_DURATION=7, - /** - * Numbering system rule-based format - * @stable ICU 4.2 - */ - UNUM_NUMBERING_SYSTEM=8, - /** - * Rule-based format defined by a pattern string. - * @stable ICU 3.0 - */ - UNUM_PATTERN_RULEBASED=9, - /** - * Currency format with an ISO currency code, e.g., "USD1.00". - * @stable ICU 4.8 - */ - UNUM_CURRENCY_ISO=10, - /** - * Currency format with a pluralized currency name, - * e.g., "1.00 US dollar" and "3.00 US dollars". - * @stable ICU 4.8 - */ - UNUM_CURRENCY_PLURAL=11, - /** - * Currency format for accounting, e.g., "($3.00)" for - * negative currency amount instead of "-$3.00" ({@link #UNUM_CURRENCY}). - * Overrides any style specified using -cf- key in locale. - * @stable ICU 53 - */ - UNUM_CURRENCY_ACCOUNTING=12, - /** - * Currency format with a currency symbol given CASH usage, e.g., - * "NT$3" instead of "NT$3.23". - * @stable ICU 54 - */ - UNUM_CASH_CURRENCY=13, - /** - * Decimal format expressed using compact notation - * (short form, corresponds to UNumberCompactStyle=UNUM_SHORT) - * e.g. "23K", "45B" - * @stable ICU 56 - */ - UNUM_DECIMAL_COMPACT_SHORT=14, - /** - * Decimal format expressed using compact notation - * (long form, corresponds to UNumberCompactStyle=UNUM_LONG) - * e.g. "23 thousand", "45 billion" - * @stable ICU 56 - */ - UNUM_DECIMAL_COMPACT_LONG=15, - /** - * Currency format with a currency symbol, e.g., "$1.00", - * using non-accounting style for negative values (e.g. minus sign). - * Overrides any style specified using -cf- key in locale. - * @stable ICU 56 - */ - UNUM_CURRENCY_STANDARD=16, - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UNumberFormatStyle value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UNUM_FORMAT_STYLE_COUNT=17, -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Default format - * @stable ICU 2.0 - */ - UNUM_DEFAULT = UNUM_DECIMAL, - /** - * Alias for UNUM_PATTERN_DECIMAL - * @stable ICU 3.0 - */ - UNUM_IGNORE = UNUM_PATTERN_DECIMAL -} UNumberFormatStyle; - -/** The possible number format rounding modes. - * - *

- * For more detail on rounding modes, see: - * http://userguide.icu-project.org/formatparse/numbers/rounding-modes - * - * @stable ICU 2.0 - */ -typedef enum UNumberFormatRoundingMode { - UNUM_ROUND_CEILING, - UNUM_ROUND_FLOOR, - UNUM_ROUND_DOWN, - UNUM_ROUND_UP, - /** - * Half-even rounding - * @stable, ICU 3.8 - */ - UNUM_ROUND_HALFEVEN, -#ifndef U_HIDE_DEPRECATED_API - /** - * Half-even rounding, misspelled name - * @deprecated, ICU 3.8 - */ - UNUM_FOUND_HALFEVEN = UNUM_ROUND_HALFEVEN, -#endif /* U_HIDE_DEPRECATED_API */ - UNUM_ROUND_HALFDOWN = UNUM_ROUND_HALFEVEN + 1, - UNUM_ROUND_HALFUP, - /** - * ROUND_UNNECESSARY reports an error if formatted result is not exact. - * @stable ICU 4.8 - */ - UNUM_ROUND_UNNECESSARY -} UNumberFormatRoundingMode; - -/** The possible number format pad positions. - * @stable ICU 2.0 - */ -typedef enum UNumberFormatPadPosition { - UNUM_PAD_BEFORE_PREFIX, - UNUM_PAD_AFTER_PREFIX, - UNUM_PAD_BEFORE_SUFFIX, - UNUM_PAD_AFTER_SUFFIX -} UNumberFormatPadPosition; - -/** - * Constants for specifying short or long format. - * @stable ICU 51 - */ -typedef enum UNumberCompactStyle { - /** @stable ICU 51 */ - UNUM_SHORT, - /** @stable ICU 51 */ - UNUM_LONG - /** @stable ICU 51 */ -} UNumberCompactStyle; - -/** - * Constants for specifying currency spacing - * @stable ICU 4.8 - */ -enum UCurrencySpacing { - /** @stable ICU 4.8 */ - UNUM_CURRENCY_MATCH, - /** @stable ICU 4.8 */ - UNUM_CURRENCY_SURROUNDING_MATCH, - /** @stable ICU 4.8 */ - UNUM_CURRENCY_INSERT, - - /* Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API, - * it is needed for layout of DecimalFormatSymbols object. */ - /** - * One more than the highest normal UCurrencySpacing value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UNUM_CURRENCY_SPACING_COUNT -}; -typedef enum UCurrencySpacing UCurrencySpacing; /**< @stable ICU 4.8 */ - - -/** - * FieldPosition and UFieldPosition selectors for format fields - * defined by NumberFormat and UNumberFormat. - * @stable ICU 49 - */ -typedef enum UNumberFormatFields { - /** @stable ICU 49 */ - UNUM_INTEGER_FIELD, - /** @stable ICU 49 */ - UNUM_FRACTION_FIELD, - /** @stable ICU 49 */ - UNUM_DECIMAL_SEPARATOR_FIELD, - /** @stable ICU 49 */ - UNUM_EXPONENT_SYMBOL_FIELD, - /** @stable ICU 49 */ - UNUM_EXPONENT_SIGN_FIELD, - /** @stable ICU 49 */ - UNUM_EXPONENT_FIELD, - /** @stable ICU 49 */ - UNUM_GROUPING_SEPARATOR_FIELD, - /** @stable ICU 49 */ - UNUM_CURRENCY_FIELD, - /** @stable ICU 49 */ - UNUM_PERCENT_FIELD, - /** @stable ICU 49 */ - UNUM_PERMILL_FIELD, - /** @stable ICU 49 */ - UNUM_SIGN_FIELD, -#ifndef U_HIDE_DRAFT_API - /** @draft ICU 64 */ - UNUM_MEASURE_UNIT_FIELD, - /** @draft ICU 64 */ - UNUM_COMPACT_FIELD, -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UNumberFormatFields value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UNUM_FIELD_COUNT = UNUM_SIGN_FIELD + 3 -#endif /* U_HIDE_DEPRECATED_API */ -} UNumberFormatFields; - - -/** - * Create and return a new UNumberFormat for formatting and parsing - * numbers. A UNumberFormat may be used to format numbers by calling - * {@link #unum_format }, and to parse numbers by calling {@link #unum_parse }. - * The caller must call {@link #unum_close } when done to release resources - * used by this object. - * @param style The type of number format to open: one of - * UNUM_DECIMAL, UNUM_CURRENCY, UNUM_PERCENT, UNUM_SCIENTIFIC, - * UNUM_CURRENCY_ISO, UNUM_CURRENCY_PLURAL, UNUM_SPELLOUT, - * UNUM_ORDINAL, UNUM_DURATION, UNUM_NUMBERING_SYSTEM, - * UNUM_PATTERN_DECIMAL, UNUM_PATTERN_RULEBASED, or UNUM_DEFAULT. - * If UNUM_PATTERN_DECIMAL or UNUM_PATTERN_RULEBASED is passed then the - * number format is opened using the given pattern, which must conform - * to the syntax described in DecimalFormat or RuleBasedNumberFormat, - * respectively. - * - *

NOTE:: New users with are strongly encouraged to - * use unumf_openWithSkeletonAndLocale instead of unum_open. - * - * @param pattern A pattern specifying the format to use. - * This parameter is ignored unless the style is - * UNUM_PATTERN_DECIMAL or UNUM_PATTERN_RULEBASED. - * @param patternLength The number of characters in the pattern, or -1 - * if null-terminated. This parameter is ignored unless the style is - * UNUM_PATTERN. - * @param locale A locale identifier to use to determine formatting - * and parsing conventions, or NULL to use the default locale. - * @param parseErr A pointer to a UParseError struct to receive the - * details of any parsing errors, or NULL if no parsing error details - * are desired. - * @param status A pointer to an input-output UErrorCode. - * @return A pointer to a newly created UNumberFormat, or NULL if an - * error occurred. - * @see unum_close - * @see DecimalFormat - * @stable ICU 2.0 - */ -U_STABLE UNumberFormat* U_EXPORT2 -unum_open( UNumberFormatStyle style, - const UChar* pattern, - int32_t patternLength, - const char* locale, - UParseError* parseErr, - UErrorCode* status); - - -/** -* Close a UNumberFormat. -* Once closed, a UNumberFormat may no longer be used. -* @param fmt The formatter to close. -* @stable ICU 2.0 -*/ -U_STABLE void U_EXPORT2 -unum_close(UNumberFormat* fmt); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUNumberFormatPointer - * "Smart pointer" class, closes a UNumberFormat via unum_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUNumberFormatPointer, UNumberFormat, unum_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Open a copy of a UNumberFormat. - * This function performs a deep copy. - * @param fmt The format to copy - * @param status A pointer to an UErrorCode to receive any errors. - * @return A pointer to a UNumberFormat identical to fmt. - * @stable ICU 2.0 - */ -U_STABLE UNumberFormat* U_EXPORT2 -unum_clone(const UNumberFormat *fmt, - UErrorCode *status); - -/** -* Format an integer using a UNumberFormat. -* The integer will be formatted according to the UNumberFormat's locale. -* @param fmt The formatter to use. -* @param number The number to format. -* @param result A pointer to a buffer to receive the NULL-terminated formatted number. If -* the formatted number fits into dest but cannot be NULL-terminated (length == resultLength) -* then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number -* doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR. -* @param resultLength The maximum size of result. -* @param pos A pointer to a UFieldPosition. On input, position->field -* is read. On output, position->beginIndex and position->endIndex indicate -* the beginning and ending indices of field number position->field, if such -* a field exists. This parameter may be NULL, in which case no field -* @param status A pointer to an UErrorCode to receive any errors -* @return The total buffer size needed; if greater than resultLength, the output was truncated. -* @see unum_formatInt64 -* @see unum_formatDouble -* @see unum_parse -* @see unum_parseInt64 -* @see unum_parseDouble -* @see UFieldPosition -* @stable ICU 2.0 -*/ -U_STABLE int32_t U_EXPORT2 -unum_format( const UNumberFormat* fmt, - int32_t number, - UChar* result, - int32_t resultLength, - UFieldPosition *pos, - UErrorCode* status); - -/** -* Format an int64 using a UNumberFormat. -* The int64 will be formatted according to the UNumberFormat's locale. -* @param fmt The formatter to use. -* @param number The number to format. -* @param result A pointer to a buffer to receive the NULL-terminated formatted number. If -* the formatted number fits into dest but cannot be NULL-terminated (length == resultLength) -* then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number -* doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR. -* @param resultLength The maximum size of result. -* @param pos A pointer to a UFieldPosition. On input, position->field -* is read. On output, position->beginIndex and position->endIndex indicate -* the beginning and ending indices of field number position->field, if such -* a field exists. This parameter may be NULL, in which case no field -* @param status A pointer to an UErrorCode to receive any errors -* @return The total buffer size needed; if greater than resultLength, the output was truncated. -* @see unum_format -* @see unum_formatDouble -* @see unum_parse -* @see unum_parseInt64 -* @see unum_parseDouble -* @see UFieldPosition -* @stable ICU 2.0 -*/ -U_STABLE int32_t U_EXPORT2 -unum_formatInt64(const UNumberFormat *fmt, - int64_t number, - UChar* result, - int32_t resultLength, - UFieldPosition *pos, - UErrorCode* status); - -/** -* Format a double using a UNumberFormat. -* The double will be formatted according to the UNumberFormat's locale. -* @param fmt The formatter to use. -* @param number The number to format. -* @param result A pointer to a buffer to receive the NULL-terminated formatted number. If -* the formatted number fits into dest but cannot be NULL-terminated (length == resultLength) -* then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number -* doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR. -* @param resultLength The maximum size of result. -* @param pos A pointer to a UFieldPosition. On input, position->field -* is read. On output, position->beginIndex and position->endIndex indicate -* the beginning and ending indices of field number position->field, if such -* a field exists. This parameter may be NULL, in which case no field -* @param status A pointer to an UErrorCode to receive any errors -* @return The total buffer size needed; if greater than resultLength, the output was truncated. -* @see unum_format -* @see unum_formatInt64 -* @see unum_parse -* @see unum_parseInt64 -* @see unum_parseDouble -* @see UFieldPosition -* @stable ICU 2.0 -*/ -U_STABLE int32_t U_EXPORT2 -unum_formatDouble( const UNumberFormat* fmt, - double number, - UChar* result, - int32_t resultLength, - UFieldPosition *pos, /* 0 if ignore */ - UErrorCode* status); - -/** -* Format a double using a UNumberFormat according to the UNumberFormat's locale, -* and initialize a UFieldPositionIterator that enumerates the subcomponents of -* the resulting string. -* -* @param format -* The formatter to use. -* @param number -* The number to format. -* @param result -* A pointer to a buffer to receive the NULL-terminated formatted -* number. If the formatted number fits into dest but cannot be -* NULL-terminated (length == resultLength) then the error code is set -* to U_STRING_NOT_TERMINATED_WARNING. If the formatted number doesn't -* fit into result then the error code is set to -* U_BUFFER_OVERFLOW_ERROR. -* @param resultLength -* The maximum size of result. -* @param fpositer -* A pointer to a UFieldPositionIterator created by {@link #ufieldpositer_open} -* (may be NULL if field position information is not needed, but in this -* case it's preferable to use {@link #unum_formatDouble}). Iteration -* information already present in the UFieldPositionIterator is deleted, -* and the iterator is reset to apply to the fields in the formatted -* string created by this function call. The field values and indexes -* returned by {@link #ufieldpositer_next} represent fields denoted by -* the UNumberFormatFields enum. Fields are not returned in a guaranteed -* order. Fields cannot overlap, but they may nest. For example, 1234 -* could format as "1,234" which might consist of a grouping separator -* field for ',' and an integer field encompassing the entire string. -* @param status -* A pointer to an UErrorCode to receive any errors -* @return -* The total buffer size needed; if greater than resultLength, the -* output was truncated. -* @see unum_formatDouble -* @see unum_parse -* @see unum_parseDouble -* @see UFieldPositionIterator -* @see UNumberFormatFields -* @stable ICU 59 -*/ -U_STABLE int32_t U_EXPORT2 -unum_formatDoubleForFields(const UNumberFormat* format, - double number, - UChar* result, - int32_t resultLength, - UFieldPositionIterator* fpositer, - UErrorCode* status); - - -/** -* Format a decimal number using a UNumberFormat. -* The number will be formatted according to the UNumberFormat's locale. -* The syntax of the input number is a "numeric string" -* as defined in the Decimal Arithmetic Specification, available at -* http://speleotrove.com/decimal -* @param fmt The formatter to use. -* @param number The number to format. -* @param length The length of the input number, or -1 if the input is nul-terminated. -* @param result A pointer to a buffer to receive the NULL-terminated formatted number. If -* the formatted number fits into dest but cannot be NULL-terminated (length == resultLength) -* then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number -* doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR. -* @param resultLength The maximum size of result. -* @param pos A pointer to a UFieldPosition. On input, position->field -* is read. On output, position->beginIndex and position->endIndex indicate -* the beginning and ending indices of field number position->field, if such -* a field exists. This parameter may be NULL, in which case it is ignored. -* @param status A pointer to an UErrorCode to receive any errors -* @return The total buffer size needed; if greater than resultLength, the output was truncated. -* @see unum_format -* @see unum_formatInt64 -* @see unum_parse -* @see unum_parseInt64 -* @see unum_parseDouble -* @see UFieldPosition -* @stable ICU 4.4 -*/ -U_STABLE int32_t U_EXPORT2 -unum_formatDecimal( const UNumberFormat* fmt, - const char * number, - int32_t length, - UChar* result, - int32_t resultLength, - UFieldPosition *pos, /* 0 if ignore */ - UErrorCode* status); - -/** - * Format a double currency amount using a UNumberFormat. - * The double will be formatted according to the UNumberFormat's locale. - * @param fmt the formatter to use - * @param number the number to format - * @param currency the 3-letter null-terminated ISO 4217 currency code - * @param result A pointer to a buffer to receive the NULL-terminated formatted number. If - * the formatted number fits into dest but cannot be NULL-terminated (length == resultLength) - * then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number - * doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR. - * @param resultLength the maximum number of UChars to write to result - * @param pos a pointer to a UFieldPosition. On input, - * position->field is read. On output, position->beginIndex and - * position->endIndex indicate the beginning and ending indices of - * field number position->field, if such a field exists. This - * parameter may be NULL, in which case it is ignored. - * @param status a pointer to an input-output UErrorCode - * @return the total buffer size needed; if greater than resultLength, - * the output was truncated. - * @see unum_formatDouble - * @see unum_parseDoubleCurrency - * @see UFieldPosition - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -unum_formatDoubleCurrency(const UNumberFormat* fmt, - double number, - UChar* currency, - UChar* result, - int32_t resultLength, - UFieldPosition* pos, - UErrorCode* status); - -/** - * Format a UFormattable into a string. - * @param fmt the formatter to use - * @param number the number to format, as a UFormattable - * @param result A pointer to a buffer to receive the NULL-terminated formatted number. If - * the formatted number fits into dest but cannot be NULL-terminated (length == resultLength) - * then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number - * doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR. - * @param resultLength the maximum number of UChars to write to result - * @param pos a pointer to a UFieldPosition. On input, - * position->field is read. On output, position->beginIndex and - * position->endIndex indicate the beginning and ending indices of - * field number position->field, if such a field exists. This - * parameter may be NULL, in which case it is ignored. - * @param status a pointer to an input-output UErrorCode - * @return the total buffer size needed; if greater than resultLength, - * the output was truncated. Will return 0 on error. - * @see unum_parseToUFormattable - * @stable ICU 52 - */ -U_STABLE int32_t U_EXPORT2 -unum_formatUFormattable(const UNumberFormat* fmt, - const UFormattable *number, - UChar *result, - int32_t resultLength, - UFieldPosition *pos, - UErrorCode *status); - -/** -* Parse a string into an integer using a UNumberFormat. -* The string will be parsed according to the UNumberFormat's locale. -* Note: parsing is not supported for styles UNUM_DECIMAL_COMPACT_SHORT -* and UNUM_DECIMAL_COMPACT_LONG. -* @param fmt The formatter to use. -* @param text The text to parse. -* @param textLength The length of text, or -1 if null-terminated. -* @param parsePos If not NULL, on input a pointer to an integer specifying the offset at which -* to begin parsing. If not NULL, on output the offset at which parsing ended. -* @param status A pointer to an UErrorCode to receive any errors -* @return The value of the parsed integer -* @see unum_parseInt64 -* @see unum_parseDouble -* @see unum_format -* @see unum_formatInt64 -* @see unum_formatDouble -* @stable ICU 2.0 -*/ -U_STABLE int32_t U_EXPORT2 -unum_parse( const UNumberFormat* fmt, - const UChar* text, - int32_t textLength, - int32_t *parsePos /* 0 = start */, - UErrorCode *status); - -/** -* Parse a string into an int64 using a UNumberFormat. -* The string will be parsed according to the UNumberFormat's locale. -* Note: parsing is not supported for styles UNUM_DECIMAL_COMPACT_SHORT -* and UNUM_DECIMAL_COMPACT_LONG. -* @param fmt The formatter to use. -* @param text The text to parse. -* @param textLength The length of text, or -1 if null-terminated. -* @param parsePos If not NULL, on input a pointer to an integer specifying the offset at which -* to begin parsing. If not NULL, on output the offset at which parsing ended. -* @param status A pointer to an UErrorCode to receive any errors -* @return The value of the parsed integer -* @see unum_parse -* @see unum_parseDouble -* @see unum_format -* @see unum_formatInt64 -* @see unum_formatDouble -* @stable ICU 2.8 -*/ -U_STABLE int64_t U_EXPORT2 -unum_parseInt64(const UNumberFormat* fmt, - const UChar* text, - int32_t textLength, - int32_t *parsePos /* 0 = start */, - UErrorCode *status); - -/** -* Parse a string into a double using a UNumberFormat. -* The string will be parsed according to the UNumberFormat's locale. -* Note: parsing is not supported for styles UNUM_DECIMAL_COMPACT_SHORT -* and UNUM_DECIMAL_COMPACT_LONG. -* @param fmt The formatter to use. -* @param text The text to parse. -* @param textLength The length of text, or -1 if null-terminated. -* @param parsePos If not NULL, on input a pointer to an integer specifying the offset at which -* to begin parsing. If not NULL, on output the offset at which parsing ended. -* @param status A pointer to an UErrorCode to receive any errors -* @return The value of the parsed double -* @see unum_parse -* @see unum_parseInt64 -* @see unum_format -* @see unum_formatInt64 -* @see unum_formatDouble -* @stable ICU 2.0 -*/ -U_STABLE double U_EXPORT2 -unum_parseDouble( const UNumberFormat* fmt, - const UChar* text, - int32_t textLength, - int32_t *parsePos /* 0 = start */, - UErrorCode *status); - - -/** -* Parse a number from a string into an unformatted numeric string using a UNumberFormat. -* The input string will be parsed according to the UNumberFormat's locale. -* The syntax of the output is a "numeric string" -* as defined in the Decimal Arithmetic Specification, available at -* http://speleotrove.com/decimal -* Note: parsing is not supported for styles UNUM_DECIMAL_COMPACT_SHORT -* and UNUM_DECIMAL_COMPACT_LONG. -* @param fmt The formatter to use. -* @param text The text to parse. -* @param textLength The length of text, or -1 if null-terminated. -* @param parsePos If not NULL, on input a pointer to an integer specifying the offset at which -* to begin parsing. If not NULL, on output the offset at which parsing ended. -* @param outBuf A (char *) buffer to receive the parsed number as a string. The output string -* will be nul-terminated if there is sufficient space. -* @param outBufLength The size of the output buffer. May be zero, in which case -* the outBuf pointer may be NULL, and the function will return the -* size of the output string. -* @param status A pointer to an UErrorCode to receive any errors -* @return the length of the output string, not including any terminating nul. -* @see unum_parse -* @see unum_parseInt64 -* @see unum_format -* @see unum_formatInt64 -* @see unum_formatDouble -* @stable ICU 4.4 -*/ -U_STABLE int32_t U_EXPORT2 -unum_parseDecimal(const UNumberFormat* fmt, - const UChar* text, - int32_t textLength, - int32_t *parsePos /* 0 = start */, - char *outBuf, - int32_t outBufLength, - UErrorCode *status); - -/** - * Parse a string into a double and a currency using a UNumberFormat. - * The string will be parsed according to the UNumberFormat's locale. - * @param fmt the formatter to use - * @param text the text to parse - * @param textLength the length of text, or -1 if null-terminated - * @param parsePos a pointer to an offset index into text at which to - * begin parsing. On output, *parsePos will point after the last - * parsed character. This parameter may be NULL, in which case parsing - * begins at offset 0. - * @param currency a pointer to the buffer to receive the parsed null- - * terminated currency. This buffer must have a capacity of at least - * 4 UChars. - * @param status a pointer to an input-output UErrorCode - * @return the parsed double - * @see unum_parseDouble - * @see unum_formatDoubleCurrency - * @stable ICU 3.0 - */ -U_STABLE double U_EXPORT2 -unum_parseDoubleCurrency(const UNumberFormat* fmt, - const UChar* text, - int32_t textLength, - int32_t* parsePos, /* 0 = start */ - UChar* currency, - UErrorCode* status); - -/** - * Parse a UChar string into a UFormattable. - * Example code: - * \snippet test/cintltst/cnumtst.c unum_parseToUFormattable - * Note: parsing is not supported for styles UNUM_DECIMAL_COMPACT_SHORT - * and UNUM_DECIMAL_COMPACT_LONG. - * @param fmt the formatter to use - * @param result the UFormattable to hold the result. If NULL, a new UFormattable will be allocated (which the caller must close with ufmt_close). - * @param text the text to parse - * @param textLength the length of text, or -1 if null-terminated - * @param parsePos a pointer to an offset index into text at which to - * begin parsing. On output, *parsePos will point after the last - * parsed character. This parameter may be NULL in which case parsing - * begins at offset 0. - * @param status a pointer to an input-output UErrorCode - * @return the UFormattable. Will be ==result unless NULL was passed in for result, in which case it will be the newly opened UFormattable. - * @see ufmt_getType - * @see ufmt_close - * @stable ICU 52 - */ -U_STABLE UFormattable* U_EXPORT2 -unum_parseToUFormattable(const UNumberFormat* fmt, - UFormattable *result, - const UChar* text, - int32_t textLength, - int32_t* parsePos, /* 0 = start */ - UErrorCode* status); - -/** - * Set the pattern used by a UNumberFormat. This can only be used - * on a DecimalFormat, other formats return U_UNSUPPORTED_ERROR - * in the status. - * @param format The formatter to set. - * @param localized TRUE if the pattern is localized, FALSE otherwise. - * @param pattern The new pattern - * @param patternLength The length of pattern, or -1 if null-terminated. - * @param parseError A pointer to UParseError to receive information - * about errors occurred during parsing, or NULL if no parse error - * information is desired. - * @param status A pointer to an input-output UErrorCode. - * @see unum_toPattern - * @see DecimalFormat - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -unum_applyPattern( UNumberFormat *format, - UBool localized, - const UChar *pattern, - int32_t patternLength, - UParseError *parseError, - UErrorCode *status - ); - -/** -* Get a locale for which decimal formatting patterns are available. -* A UNumberFormat in a locale returned by this function will perform the correct -* formatting and parsing for the locale. The results of this call are not -* valid for rule-based number formats. -* @param localeIndex The index of the desired locale. -* @return A locale for which number formatting patterns are available, or 0 if none. -* @see unum_countAvailable -* @stable ICU 2.0 -*/ -U_STABLE const char* U_EXPORT2 -unum_getAvailable(int32_t localeIndex); - -/** -* Determine how many locales have decimal formatting patterns available. The -* results of this call are not valid for rule-based number formats. -* This function is useful for determining the loop ending condition for -* calls to {@link #unum_getAvailable }. -* @return The number of locales for which decimal formatting patterns are available. -* @see unum_getAvailable -* @stable ICU 2.0 -*/ -U_STABLE int32_t U_EXPORT2 -unum_countAvailable(void); - -#if UCONFIG_HAVE_PARSEALLINPUT -/* The UNumberFormatAttributeValue type cannot be #ifndef U_HIDE_INTERNAL_API, needed for .h variable declaration */ -/** - * @internal - */ -typedef enum UNumberFormatAttributeValue { -#ifndef U_HIDE_INTERNAL_API - /** @internal */ - UNUM_NO = 0, - /** @internal */ - UNUM_YES = 1, - /** @internal */ - UNUM_MAYBE = 2 -#else - /** @internal */ - UNUM_FORMAT_ATTRIBUTE_VALUE_HIDDEN -#endif /* U_HIDE_INTERNAL_API */ -} UNumberFormatAttributeValue; -#endif - -/** The possible UNumberFormat numeric attributes @stable ICU 2.0 */ -typedef enum UNumberFormatAttribute { - /** Parse integers only */ - UNUM_PARSE_INT_ONLY, - /** Use grouping separator */ - UNUM_GROUPING_USED, - /** Always show decimal point */ - UNUM_DECIMAL_ALWAYS_SHOWN, - /** Maximum integer digits */ - UNUM_MAX_INTEGER_DIGITS, - /** Minimum integer digits */ - UNUM_MIN_INTEGER_DIGITS, - /** Integer digits */ - UNUM_INTEGER_DIGITS, - /** Maximum fraction digits */ - UNUM_MAX_FRACTION_DIGITS, - /** Minimum fraction digits */ - UNUM_MIN_FRACTION_DIGITS, - /** Fraction digits */ - UNUM_FRACTION_DIGITS, - /** Multiplier */ - UNUM_MULTIPLIER, - /** Grouping size */ - UNUM_GROUPING_SIZE, - /** Rounding Mode */ - UNUM_ROUNDING_MODE, - /** Rounding increment */ - UNUM_ROUNDING_INCREMENT, - /** The width to which the output of format() is padded. */ - UNUM_FORMAT_WIDTH, - /** The position at which padding will take place. */ - UNUM_PADDING_POSITION, - /** Secondary grouping size */ - UNUM_SECONDARY_GROUPING_SIZE, - /** Use significant digits - * @stable ICU 3.0 */ - UNUM_SIGNIFICANT_DIGITS_USED, - /** Minimum significant digits - * @stable ICU 3.0 */ - UNUM_MIN_SIGNIFICANT_DIGITS, - /** Maximum significant digits - * @stable ICU 3.0 */ - UNUM_MAX_SIGNIFICANT_DIGITS, - /** Lenient parse mode used by rule-based formats. - * @stable ICU 3.0 - */ - UNUM_LENIENT_PARSE, -#if UCONFIG_HAVE_PARSEALLINPUT - /** Consume all input. (may use fastpath). Set to UNUM_YES (require fastpath), UNUM_NO (skip fastpath), or UNUM_MAYBE (heuristic). - * This is an internal ICU API. Do not use. - * @internal - */ - UNUM_PARSE_ALL_INPUT = 20, -#endif - /** - * Scale, which adjusts the position of the - * decimal point when formatting. Amounts will be multiplied by 10 ^ (scale) - * before they are formatted. The default value for the scale is 0 ( no adjustment ). - * - *

Example: setting the scale to 3, 123 formats as "123,000" - *

Example: setting the scale to -4, 123 formats as "0.0123" - * - * This setting is analogous to getMultiplierScale() and setMultiplierScale() in decimfmt.h. - * - * @stable ICU 51 */ - UNUM_SCALE = 21, - -#ifndef U_HIDE_DRAFT_API - /** - * Minimum grouping digits; most commonly set to 2 to print "1000" instead of "1,000". - * See DecimalFormat::getMinimumGroupingDigits(). - * - * For better control over grouping strategies, use UNumberFormatter. - * - * @draft ICU 64 - */ - UNUM_MINIMUM_GROUPING_DIGITS = 22, -#endif /* U_HIDE_DRAFT_API */ -#ifndef U_HIDE_INTERNAL_API - /** Apple addition for . - * In open-source ICU 60 and earlier, unum_formatDouble pinned - * double to string conversion at DBL_DIG=15 (from ) - * significant digits; beginning in ICU 61, several extra digit - * digits could be produced. However, by default Apple ICU - * still pins to 15 digits if UNUM_SIGNIFICANT_DIGITS_USED is - * false and UNUM_MAX_FRACTION_DIGITS > 15; this is to improve - * compatibility with Numbers. This default can be overriden - * by setting UNUM_FORMAT_WITH_FULL_PRECISION to true. - * @internal */ - UNUM_FORMAT_WITH_FULL_PRECISION = 48, -#endif /* U_HIDE_INTERNAL_API */ - - /** - * if this attribute is set to 0, it is set to UNUM_CURRENCY_STANDARD purpose, - * otherwise it is UNUM_CURRENCY_CASH purpose - * Default: 0 (UNUM_CURRENCY_STANDARD purpose) - * @stable ICU 54 - */ - UNUM_CURRENCY_USAGE = 23, - -#ifndef U_HIDE_INTERNAL_API - /** One below the first bitfield-boolean item. - * All items after this one are stored in boolean form. - * @internal */ - UNUM_MAX_NONBOOLEAN_ATTRIBUTE = 0x0FFF, -#endif /* U_HIDE_INTERNAL_API */ - - /** If 1, specifies that if setting the "max integer digits" attribute would truncate a value, set an error status rather than silently truncating. - * For example, formatting the value 1234 with 4 max int digits would succeed, but formatting 12345 would fail. There is no effect on parsing. - * Default: 0 (not set) - * @stable ICU 50 - */ - UNUM_FORMAT_FAIL_IF_MORE_THAN_MAX_DIGITS = 0x1000, - /** - * if this attribute is set to 1, specifies that, if the pattern doesn't contain an exponent, the exponent will not be parsed. If the pattern does contain an exponent, this attribute has no effect. - * Has no effect on formatting. - * Default: 0 (unset) - * @stable ICU 50 - */ - UNUM_PARSE_NO_EXPONENT = 0x1001, - - /** - * if this attribute is set to 1, specifies that, if the pattern contains a - * decimal mark the input is required to have one. If this attribute is set to 0, - * specifies that input does not have to contain a decimal mark. - * Has no effect on formatting. - * Default: 0 (unset) - * @stable ICU 54 - */ - UNUM_PARSE_DECIMAL_MARK_REQUIRED = 0x1002, - -#ifndef U_HIDE_DRAFT_API - - /** - * Parsing: if set to 1, parsing is sensitive to case (lowercase/uppercase). - * - * @draft ICU 64 - */ - UNUM_PARSE_CASE_SENSITIVE = 0x1003, - - /** - * Formatting: if set to 1, whether to show the plus sign on non-negative numbers. - * - * For better control over sign display, use UNumberFormatter. - * - * @draft ICU 64 - */ - UNUM_SIGN_ALWAYS_SHOWN = 0x1004, - -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_INTERNAL_API - /** Limit of boolean attributes. (value should - * not depend on U_HIDE conditionals) - * @internal */ - UNUM_LIMIT_BOOLEAN_ATTRIBUTE = 0x1005, -#endif /* U_HIDE_INTERNAL_API */ - -} UNumberFormatAttribute; - -/** -* Get a numeric attribute associated with a UNumberFormat. -* An example of a numeric attribute is the number of integer digits a formatter will produce. -* @param fmt The formatter to query. -* @param attr The attribute to query; one of UNUM_PARSE_INT_ONLY, UNUM_GROUPING_USED, -* UNUM_DECIMAL_ALWAYS_SHOWN, UNUM_MAX_INTEGER_DIGITS, UNUM_MIN_INTEGER_DIGITS, UNUM_INTEGER_DIGITS, -* UNUM_MAX_FRACTION_DIGITS, UNUM_MIN_FRACTION_DIGITS, UNUM_FRACTION_DIGITS, UNUM_MULTIPLIER, -* UNUM_GROUPING_SIZE, UNUM_ROUNDING_MODE, UNUM_FORMAT_WIDTH, UNUM_PADDING_POSITION, UNUM_SECONDARY_GROUPING_SIZE, -* UNUM_SCALE, UNUM_MINIMUM_GROUPING_DIGITS. -* @return The value of attr. -* @see unum_setAttribute -* @see unum_getDoubleAttribute -* @see unum_setDoubleAttribute -* @see unum_getTextAttribute -* @see unum_setTextAttribute -* @stable ICU 2.0 -*/ -U_STABLE int32_t U_EXPORT2 -unum_getAttribute(const UNumberFormat* fmt, - UNumberFormatAttribute attr); - -/** -* Set a numeric attribute associated with a UNumberFormat. -* An example of a numeric attribute is the number of integer digits a formatter will produce. If the -* formatter does not understand the attribute, the call is ignored. Rule-based formatters only understand -* the lenient-parse attribute. -* @param fmt The formatter to set. -* @param attr The attribute to set; one of UNUM_PARSE_INT_ONLY, UNUM_GROUPING_USED, -* UNUM_DECIMAL_ALWAYS_SHOWN, UNUM_MAX_INTEGER_DIGITS, UNUM_MIN_INTEGER_DIGITS, UNUM_INTEGER_DIGITS, -* UNUM_MAX_FRACTION_DIGITS, UNUM_MIN_FRACTION_DIGITS, UNUM_FRACTION_DIGITS, UNUM_MULTIPLIER, -* UNUM_GROUPING_SIZE, UNUM_ROUNDING_MODE, UNUM_FORMAT_WIDTH, UNUM_PADDING_POSITION, UNUM_SECONDARY_GROUPING_SIZE, -* UNUM_LENIENT_PARSE, UNUM_SCALE, UNUM_MINIMUM_GROUPING_DIGITS. -* @param newValue The new value of attr. -* @see unum_getAttribute -* @see unum_getDoubleAttribute -* @see unum_setDoubleAttribute -* @see unum_getTextAttribute -* @see unum_setTextAttribute -* @stable ICU 2.0 -*/ -U_STABLE void U_EXPORT2 -unum_setAttribute( UNumberFormat* fmt, - UNumberFormatAttribute attr, - int32_t newValue); - - -/** -* Get a numeric attribute associated with a UNumberFormat. -* An example of a numeric attribute is the number of integer digits a formatter will produce. -* If the formatter does not understand the attribute, -1 is returned. -* @param fmt The formatter to query. -* @param attr The attribute to query; e.g. UNUM_ROUNDING_INCREMENT. -* @return The value of attr. -* @see unum_getAttribute -* @see unum_setAttribute -* @see unum_setDoubleAttribute -* @see unum_getTextAttribute -* @see unum_setTextAttribute -* @stable ICU 2.0 -*/ -U_STABLE double U_EXPORT2 -unum_getDoubleAttribute(const UNumberFormat* fmt, - UNumberFormatAttribute attr); - -/** -* Set a numeric attribute associated with a UNumberFormat. -* An example of a numeric attribute is the number of integer digits a formatter will produce. -* If the formatter does not understand the attribute, this call is ignored. -* @param fmt The formatter to set. -* @param attr The attribute to set; e.g. UNUM_ROUNDING_INCREMENT. -* @param newValue The new value of attr. -* @see unum_getAttribute -* @see unum_setAttribute -* @see unum_getDoubleAttribute -* @see unum_getTextAttribute -* @see unum_setTextAttribute -* @stable ICU 2.0 -*/ -U_STABLE void U_EXPORT2 -unum_setDoubleAttribute( UNumberFormat* fmt, - UNumberFormatAttribute attr, - double newValue); - -/** The possible UNumberFormat text attributes @stable ICU 2.0*/ -typedef enum UNumberFormatTextAttribute { - /** Positive prefix */ - UNUM_POSITIVE_PREFIX, - /** Positive suffix */ - UNUM_POSITIVE_SUFFIX, - /** Negative prefix */ - UNUM_NEGATIVE_PREFIX, - /** Negative suffix */ - UNUM_NEGATIVE_SUFFIX, - /** The character used to pad to the format width. */ - UNUM_PADDING_CHARACTER, - /** The ISO currency code */ - UNUM_CURRENCY_CODE, - /** - * The default rule set, such as "%spellout-numbering-year:", "%spellout-cardinal:", - * "%spellout-ordinal-masculine-plural:", "%spellout-ordinal-feminine:", or - * "%spellout-ordinal-neuter:". The available public rulesets can be listed using - * unum_getTextAttribute with UNUM_PUBLIC_RULESETS. This is only available with - * rule-based formatters. - * @stable ICU 3.0 - */ - UNUM_DEFAULT_RULESET, - /** - * The public rule sets. This is only available with rule-based formatters. - * This is a read-only attribute. The public rulesets are returned as a - * single string, with each ruleset name delimited by ';' (semicolon). See the - * CLDR LDML spec for more information about RBNF rulesets: - * http://www.unicode.org/reports/tr35/tr35-numbers.html#Rule-Based_Number_Formatting - * @stable ICU 3.0 - */ - UNUM_PUBLIC_RULESETS -} UNumberFormatTextAttribute; - -/** -* Get a text attribute associated with a UNumberFormat. -* An example of a text attribute is the suffix for positive numbers. If the formatter -* does not understand the attribute, U_UNSUPPORTED_ERROR is returned as the status. -* Rule-based formatters only understand UNUM_DEFAULT_RULESET and UNUM_PUBLIC_RULESETS. -* @param fmt The formatter to query. -* @param tag The attribute to query; one of UNUM_POSITIVE_PREFIX, UNUM_POSITIVE_SUFFIX, -* UNUM_NEGATIVE_PREFIX, UNUM_NEGATIVE_SUFFIX, UNUM_PADDING_CHARACTER, UNUM_CURRENCY_CODE, -* UNUM_DEFAULT_RULESET, or UNUM_PUBLIC_RULESETS. -* @param result A pointer to a buffer to receive the attribute. -* @param resultLength The maximum size of result. -* @param status A pointer to an UErrorCode to receive any errors -* @return The total buffer size needed; if greater than resultLength, the output was truncated. -* @see unum_setTextAttribute -* @see unum_getAttribute -* @see unum_setAttribute -* @stable ICU 2.0 -*/ -U_STABLE int32_t U_EXPORT2 -unum_getTextAttribute( const UNumberFormat* fmt, - UNumberFormatTextAttribute tag, - UChar* result, - int32_t resultLength, - UErrorCode* status); - -/** -* Set a text attribute associated with a UNumberFormat. -* An example of a text attribute is the suffix for positive numbers. Rule-based formatters -* only understand UNUM_DEFAULT_RULESET. -* @param fmt The formatter to set. -* @param tag The attribute to set; one of UNUM_POSITIVE_PREFIX, UNUM_POSITIVE_SUFFIX, -* UNUM_NEGATIVE_PREFIX, UNUM_NEGATIVE_SUFFIX, UNUM_PADDING_CHARACTER, UNUM_CURRENCY_CODE, -* or UNUM_DEFAULT_RULESET. -* @param newValue The new value of attr. -* @param newValueLength The length of newValue, or -1 if null-terminated. -* @param status A pointer to an UErrorCode to receive any errors -* @see unum_getTextAttribute -* @see unum_getAttribute -* @see unum_setAttribute -* @stable ICU 2.0 -*/ -U_STABLE void U_EXPORT2 -unum_setTextAttribute( UNumberFormat* fmt, - UNumberFormatTextAttribute tag, - const UChar* newValue, - int32_t newValueLength, - UErrorCode *status); - -/** - * Extract the pattern from a UNumberFormat. The pattern will follow - * the DecimalFormat pattern syntax. - * @param fmt The formatter to query. - * @param isPatternLocalized TRUE if the pattern should be localized, - * FALSE otherwise. This is ignored if the formatter is a rule-based - * formatter. - * @param result A pointer to a buffer to receive the pattern. - * @param resultLength The maximum size of result. - * @param status A pointer to an input-output UErrorCode. - * @return The total buffer size needed; if greater than resultLength, - * the output was truncated. - * @see unum_applyPattern - * @see DecimalFormat - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -unum_toPattern( const UNumberFormat* fmt, - UBool isPatternLocalized, - UChar* result, - int32_t resultLength, - UErrorCode* status); - - -/** - * Constants for specifying a number format symbol. - * @stable ICU 2.0 - */ -typedef enum UNumberFormatSymbol { - /** The decimal separator */ - UNUM_DECIMAL_SEPARATOR_SYMBOL = 0, - /** The grouping separator */ - UNUM_GROUPING_SEPARATOR_SYMBOL = 1, - /** The pattern separator */ - UNUM_PATTERN_SEPARATOR_SYMBOL = 2, - /** The percent sign */ - UNUM_PERCENT_SYMBOL = 3, - /** Zero*/ - UNUM_ZERO_DIGIT_SYMBOL = 4, - /** Character representing a digit in the pattern */ - UNUM_DIGIT_SYMBOL = 5, - /** The minus sign */ - UNUM_MINUS_SIGN_SYMBOL = 6, - /** The plus sign */ - UNUM_PLUS_SIGN_SYMBOL = 7, - /** The currency symbol */ - UNUM_CURRENCY_SYMBOL = 8, - /** The international currency symbol */ - UNUM_INTL_CURRENCY_SYMBOL = 9, - /** The monetary separator */ - UNUM_MONETARY_SEPARATOR_SYMBOL = 10, - /** The exponential symbol */ - UNUM_EXPONENTIAL_SYMBOL = 11, - /** Per mill symbol */ - UNUM_PERMILL_SYMBOL = 12, - /** Escape padding character */ - UNUM_PAD_ESCAPE_SYMBOL = 13, - /** Infinity symbol */ - UNUM_INFINITY_SYMBOL = 14, - /** Nan symbol */ - UNUM_NAN_SYMBOL = 15, - /** Significant digit symbol - * @stable ICU 3.0 */ - UNUM_SIGNIFICANT_DIGIT_SYMBOL = 16, - /** The monetary grouping separator - * @stable ICU 3.6 - */ - UNUM_MONETARY_GROUPING_SEPARATOR_SYMBOL = 17, - /** One - * @stable ICU 4.6 - */ - UNUM_ONE_DIGIT_SYMBOL = 18, - /** Two - * @stable ICU 4.6 - */ - UNUM_TWO_DIGIT_SYMBOL = 19, - /** Three - * @stable ICU 4.6 - */ - UNUM_THREE_DIGIT_SYMBOL = 20, - /** Four - * @stable ICU 4.6 - */ - UNUM_FOUR_DIGIT_SYMBOL = 21, - /** Five - * @stable ICU 4.6 - */ - UNUM_FIVE_DIGIT_SYMBOL = 22, - /** Six - * @stable ICU 4.6 - */ - UNUM_SIX_DIGIT_SYMBOL = 23, - /** Seven - * @stable ICU 4.6 - */ - UNUM_SEVEN_DIGIT_SYMBOL = 24, - /** Eight - * @stable ICU 4.6 - */ - UNUM_EIGHT_DIGIT_SYMBOL = 25, - /** Nine - * @stable ICU 4.6 - */ - UNUM_NINE_DIGIT_SYMBOL = 26, - - /** Multiplication sign - * @stable ICU 54 - */ - UNUM_EXPONENT_MULTIPLICATION_SYMBOL = 27, - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UNumberFormatSymbol value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UNUM_FORMAT_SYMBOL_COUNT = 28 -#endif /* U_HIDE_DEPRECATED_API */ -} UNumberFormatSymbol; - -/** -* Get a symbol associated with a UNumberFormat. -* A UNumberFormat uses symbols to represent the special locale-dependent -* characters in a number, for example the percent sign. This API is not -* supported for rule-based formatters. -* @param fmt The formatter to query. -* @param symbol The UNumberFormatSymbol constant for the symbol to get -* @param buffer The string buffer that will receive the symbol string; -* if it is NULL, then only the length of the symbol is returned -* @param size The size of the string buffer -* @param status A pointer to an UErrorCode to receive any errors -* @return The length of the symbol; the buffer is not modified if -* length>=size -* @see unum_setSymbol -* @stable ICU 2.0 -*/ -U_STABLE int32_t U_EXPORT2 -unum_getSymbol(const UNumberFormat *fmt, - UNumberFormatSymbol symbol, - UChar *buffer, - int32_t size, - UErrorCode *status); - -/** -* Set a symbol associated with a UNumberFormat. -* A UNumberFormat uses symbols to represent the special locale-dependent -* characters in a number, for example the percent sign. This API is not -* supported for rule-based formatters. -* @param fmt The formatter to set. -* @param symbol The UNumberFormatSymbol constant for the symbol to set -* @param value The string to set the symbol to -* @param length The length of the string, or -1 for a zero-terminated string -* @param status A pointer to an UErrorCode to receive any errors. -* @see unum_getSymbol -* @stable ICU 2.0 -*/ -U_STABLE void U_EXPORT2 -unum_setSymbol(UNumberFormat *fmt, - UNumberFormatSymbol symbol, - const UChar *value, - int32_t length, - UErrorCode *status); - - -/** - * Get the locale for this number format object. - * You can choose between valid and actual locale. - * @param fmt The formatter to get the locale from - * @param type type of the locale we're looking for (valid or actual) - * @param status error code for the operation - * @return the locale name - * @stable ICU 2.8 - */ -U_STABLE const char* U_EXPORT2 -unum_getLocaleByType(const UNumberFormat *fmt, - ULocDataLocaleType type, - UErrorCode* status); - -/** - * Set a particular UDisplayContext value in the formatter, such as - * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. - * @param fmt The formatter for which to set a UDisplayContext value. - * @param value The UDisplayContext value to set. - * @param status A pointer to an UErrorCode to receive any errors - * @stable ICU 53 - */ -U_STABLE void U_EXPORT2 -unum_setContext(UNumberFormat* fmt, UDisplayContext value, UErrorCode* status); - -/** - * Get the formatter's UDisplayContext value for the specified UDisplayContextType, - * such as UDISPCTX_TYPE_CAPITALIZATION. - * @param fmt The formatter to query. - * @param type The UDisplayContextType whose value to return - * @param status A pointer to an UErrorCode to receive any errors - * @return The UDisplayContextValue for the specified type. - * @stable ICU 53 - */ -U_STABLE UDisplayContext U_EXPORT2 -unum_getContext(const UNumberFormat *fmt, UDisplayContextType type, UErrorCode* status); - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unumberformatter.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unumberformatter.h deleted file mode 100644 index e4c21a4e4a..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unumberformatter.h +++ /dev/null @@ -1,713 +0,0 @@ -// © 2018 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING -#ifndef __UNUMBERFORMATTER_H__ -#define __UNUMBERFORMATTER_H__ - -#include "unicode/parseerr.h" -#include "unicode/ufieldpositer.h" -#include "unicode/umisc.h" -#include "unicode/uformattedvalue.h" - - -/** - * \file - * \brief C-compatible API for localized number formatting; not recommended for C++. - * - * This is the C-compatible version of the NumberFormatter API introduced in ICU 60. C++ users should - * include unicode/numberformatter.h and use the proper C++ APIs. - * - * The C API accepts a number skeleton string for specifying the settings for formatting, which covers a - * very large subset of all possible number formatting features. For more information on number skeleton - * strings, see unicode/numberformatter.h. - * - * When using UNumberFormatter, which is treated as immutable, the results are exported to a mutable - * UFormattedNumber object, which you subsequently use for populating your string buffer or iterating over - * the fields. - * - * Example code: - *

- * // Setup:
- * UErrorCode ec = U_ZERO_ERROR;
- * UNumberFormatter* uformatter = unumf_openForSkeletonAndLocale(u"precision-integer", -1, "en", &ec);
- * UFormattedNumber* uresult = unumf_openResult(&ec);
- * if (U_FAILURE(ec)) { return; }
- *
- * // Format a double:
- * unumf_formatDouble(uformatter, 5142.3, uresult, &ec);
- * if (U_FAILURE(ec)) { return; }
- *
- * // Export the string to a malloc'd buffer:
- * int32_t len = unumf_resultToString(uresult, NULL, 0, &ec);
- * // at this point, ec == U_BUFFER_OVERFLOW_ERROR
- * ec = U_ZERO_ERROR;
- * UChar* buffer = (UChar*) malloc((len+1)*sizeof(UChar));
- * unumf_resultToString(uresult, buffer, len+1, &ec);
- * if (U_FAILURE(ec)) { return; }
- * // buffer should equal "5,142"
- *
- * // Cleanup:
- * unumf_close(uformatter);
- * unumf_closeResult(uresult);
- * free(buffer);
- * 
- * - * If you are a C++ user linking against the C libraries, you can use the LocalPointer versions of these - * APIs. The following example uses LocalPointer with the decimal number and field position APIs: - * - *
- * // Setup:
- * LocalUNumberFormatterPointer uformatter(unumf_openForSkeletonAndLocale(u"percent", -1, "en", &ec));
- * LocalUFormattedNumberPointer uresult(unumf_openResult(&ec));
- * if (U_FAILURE(ec)) { return; }
- *
- * // Format a decimal number:
- * unumf_formatDecimal(uformatter.getAlias(), "9.87E-3", -1, uresult.getAlias(), &ec);
- * if (U_FAILURE(ec)) { return; }
- *
- * // Get the location of the percent sign:
- * UFieldPosition ufpos = {UNUM_PERCENT_FIELD, 0, 0};
- * unumf_resultNextFieldPosition(uresult.getAlias(), &ufpos, &ec);
- * // ufpos should contain beginIndex=7 and endIndex=8 since the string is "0.00987%"
- *
- * // No need to do any cleanup since we are using LocalPointer.
- * 
- */ - - -#ifndef U_HIDE_DRAFT_API -/** - * An enum declaring how to render units, including currencies. Example outputs when formatting 123 USD and 123 - * meters in en-CA: - * - *

- *

    - *
  • NARROW*: "$123.00" and "123 m" - *
  • SHORT: "US$ 123.00" and "123 m" - *
  • FULL_NAME: "123.00 US dollars" and "123 meters" - *
  • ISO_CODE: "USD 123.00" and undefined behavior - *
  • HIDDEN: "123.00" and "123" - *
- * - *

- * This enum is similar to {@link UMeasureFormatWidth}. - * - * @draft ICU 60 - */ -typedef enum UNumberUnitWidth { - /** - * Print an abbreviated version of the unit name. Similar to SHORT, but always use the shortest available - * abbreviation or symbol. This option can be used when the context hints at the identity of the unit. For more - * information on the difference between NARROW and SHORT, see SHORT. - * - *

- * In CLDR, this option corresponds to the "Narrow" format for measure units and the "¤¤¤¤¤" placeholder for - * currencies. - * - * @draft ICU 60 - */ - UNUM_UNIT_WIDTH_NARROW, - - /** - * Print an abbreviated version of the unit name. Similar to NARROW, but use a slightly wider abbreviation or - * symbol when there may be ambiguity. This is the default behavior. - * - *

- * For example, in es-US, the SHORT form for Fahrenheit is "{0} °F", but the NARROW form is "{0}°", - * since Fahrenheit is the customary unit for temperature in that locale. - * - *

- * In CLDR, this option corresponds to the "Short" format for measure units and the "¤" placeholder for - * currencies. - * - * @draft ICU 60 - */ - UNUM_UNIT_WIDTH_SHORT, - - /** - * Print the full name of the unit, without any abbreviations. - * - *

- * In CLDR, this option corresponds to the default format for measure units and the "¤¤¤" placeholder for - * currencies. - * - * @draft ICU 60 - */ - UNUM_UNIT_WIDTH_FULL_NAME, - - /** - * Use the three-digit ISO XXX code in place of the symbol for displaying currencies. The behavior of this - * option is currently undefined for use with measure units. - * - *

- * In CLDR, this option corresponds to the "¤¤" placeholder for currencies. - * - * @draft ICU 60 - */ - UNUM_UNIT_WIDTH_ISO_CODE, - - /** - * Format the number according to the specified unit, but do not display the unit. For currencies, apply - * monetary symbols and formats as with SHORT, but omit the currency symbol. For measure units, the behavior is - * equivalent to not specifying the unit at all. - * - * @draft ICU 60 - */ - UNUM_UNIT_WIDTH_HIDDEN, - - /** - * One more than the highest UNumberUnitWidth value. - * - * @internal ICU 60: The numeric value may change over time; see ICU ticket #12420. - */ - UNUM_UNIT_WIDTH_COUNT -} UNumberUnitWidth; -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API -/** - * An enum declaring the strategy for when and how to display grouping separators (i.e., the - * separator, often a comma or period, after every 2-3 powers of ten). The choices are several - * pre-built strategies for different use cases that employ locale data whenever possible. Example - * outputs for 1234 and 1234567 in en-IN: - * - *

    - *
  • OFF: 1234 and 12345 - *
  • MIN2: 1234 and 12,34,567 - *
  • AUTO: 1,234 and 12,34,567 - *
  • ON_ALIGNED: 1,234 and 12,34,567 - *
  • THOUSANDS: 1,234 and 1,234,567 - *
- * - *

- * The default is AUTO, which displays grouping separators unless the locale data says that grouping - * is not customary. To force grouping for all numbers greater than 1000 consistently across locales, - * use ON_ALIGNED. On the other hand, to display grouping less frequently than the default, use MIN2 - * or OFF. See the docs of each option for details. - * - *

- * Note: This enum specifies the strategy for grouping sizes. To set which character to use as the - * grouping separator, use the "symbols" setter. - * - * @draft ICU 63 - */ -typedef enum UNumberGroupingStrategy { - /** - * Do not display grouping separators in any locale. - * - * @draft ICU 61 - */ - UNUM_GROUPING_OFF, - - /** - * Display grouping using locale defaults, except do not show grouping on values smaller than - * 10000 (such that there is a minimum of two digits before the first separator). - * - *

- * Note that locales may restrict grouping separators to be displayed only on 1 million or - * greater (for example, ee and hu) or disable grouping altogether (for example, bg currency). - * - *

- * Locale data is used to determine whether to separate larger numbers into groups of 2 - * (customary in South Asia) or groups of 3 (customary in Europe and the Americas). - * - * @draft ICU 61 - */ - UNUM_GROUPING_MIN2, - - /** - * Display grouping using the default strategy for all locales. This is the default behavior. - * - *

- * Note that locales may restrict grouping separators to be displayed only on 1 million or - * greater (for example, ee and hu) or disable grouping altogether (for example, bg currency). - * - *

- * Locale data is used to determine whether to separate larger numbers into groups of 2 - * (customary in South Asia) or groups of 3 (customary in Europe and the Americas). - * - * @draft ICU 61 - */ - UNUM_GROUPING_AUTO, - - /** - * Always display the grouping separator on values of at least 1000. - * - *

- * This option ignores the locale data that restricts or disables grouping, described in MIN2 and - * AUTO. This option may be useful to normalize the alignment of numbers, such as in a - * spreadsheet. - * - *

- * Locale data is used to determine whether to separate larger numbers into groups of 2 - * (customary in South Asia) or groups of 3 (customary in Europe and the Americas). - * - * @draft ICU 61 - */ - UNUM_GROUPING_ON_ALIGNED, - - /** - * Use the Western defaults: groups of 3 and enabled for all numbers 1000 or greater. Do not use - * locale data for determining the grouping strategy. - * - * @draft ICU 61 - */ - UNUM_GROUPING_THOUSANDS - -#ifndef U_HIDE_INTERNAL_API - , - /** - * One more than the highest UNumberGroupingStrategy value. - * - * @internal ICU 62: The numeric value may change over time; see ICU ticket #12420. - */ - UNUM_GROUPING_COUNT -#endif /* U_HIDE_INTERNAL_API */ - -} UNumberGroupingStrategy; - - -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API -/** - * An enum declaring how to denote positive and negative numbers. Example outputs when formatting - * 123, 0, and -123 in en-US: - * - *

    - *
  • AUTO: "123", "0", and "-123" - *
  • ALWAYS: "+123", "+0", and "-123" - *
  • NEVER: "123", "0", and "123" - *
  • ACCOUNTING: "$123", "$0", and "($123)" - *
  • ACCOUNTING_ALWAYS: "+$123", "+$0", and "($123)" - *
  • EXCEPT_ZERO: "+123", "0", and "-123" - *
  • ACCOUNTING_EXCEPT_ZERO: "+$123", "$0", and "($123)" - *
- * - *

- * The exact format, including the position and the code point of the sign, differ by locale. - * - * @draft ICU 60 - */ -typedef enum UNumberSignDisplay { - /** - * Show the minus sign on negative numbers, and do not show the sign on positive numbers. This is the default - * behavior. - * - * @draft ICU 60 - */ - UNUM_SIGN_AUTO, - - /** - * Show the minus sign on negative numbers and the plus sign on positive numbers, including zero. - * To hide the sign on zero, see {@link UNUM_SIGN_EXCEPT_ZERO}. - * - * @draft ICU 60 - */ - UNUM_SIGN_ALWAYS, - - /** - * Do not show the sign on positive or negative numbers. - * - * @draft ICU 60 - */ - UNUM_SIGN_NEVER, - - /** - * Use the locale-dependent accounting format on negative numbers, and do not show the sign on positive numbers. - * - *

- * The accounting format is defined in CLDR and varies by locale; in many Western locales, the format is a pair - * of parentheses around the number. - * - *

- * Note: Since CLDR defines the accounting format in the monetary context only, this option falls back to the - * AUTO sign display strategy when formatting without a currency unit. This limitation may be lifted in the - * future. - * - * @draft ICU 60 - */ - UNUM_SIGN_ACCOUNTING, - - /** - * Use the locale-dependent accounting format on negative numbers, and show the plus sign on - * positive numbers, including zero. For more information on the accounting format, see the - * ACCOUNTING sign display strategy. To hide the sign on zero, see - * {@link UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO}. - * - * @draft ICU 60 - */ - UNUM_SIGN_ACCOUNTING_ALWAYS, - - /** - * Show the minus sign on negative numbers and the plus sign on positive numbers. Do not show a - * sign on zero. - * - * @draft ICU 61 - */ - UNUM_SIGN_EXCEPT_ZERO, - - /** - * Use the locale-dependent accounting format on negative numbers, and show the plus sign on - * positive numbers. Do not show a sign on zero. For more information on the accounting format, - * see the ACCOUNTING sign display strategy. - * - * @draft ICU 61 - */ - UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO, - - /** - * One more than the highest UNumberSignDisplay value. - * - * @internal ICU 60: The numeric value may change over time; see ICU ticket #12420. - */ - UNUM_SIGN_COUNT -} UNumberSignDisplay; -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_DRAFT_API -/** - * An enum declaring how to render the decimal separator. - * - *

- *

    - *
  • UNUM_DECIMAL_SEPARATOR_AUTO: "1", "1.1" - *
  • UNUM_DECIMAL_SEPARATOR_ALWAYS: "1.", "1.1" - *
- * - * @draft ICU 60 - */ -typedef enum UNumberDecimalSeparatorDisplay { - /** - * Show the decimal separator when there are one or more digits to display after the separator, and do not show - * it otherwise. This is the default behavior. - * - * @draft ICU 60 - */ - UNUM_DECIMAL_SEPARATOR_AUTO, - - /** - * Always show the decimal separator, even if there are no digits to display after the separator. - * - * @draft ICU 60 - */ - UNUM_DECIMAL_SEPARATOR_ALWAYS, - - /** - * One more than the highest UNumberDecimalSeparatorDisplay value. - * - * @internal ICU 60: The numeric value may change over time; see ICU ticket #12420. - */ - UNUM_DECIMAL_SEPARATOR_COUNT -} UNumberDecimalSeparatorDisplay; -#endif /* U_HIDE_DRAFT_API */ - -struct UNumberFormatter; -/** - * C-compatible version of icu::number::LocalizedNumberFormatter. - * - * NOTE: This is a C-compatible API; C++ users should build against numberformatter.h instead. - * - * @stable ICU 62 - */ -typedef struct UNumberFormatter UNumberFormatter; - -struct UFormattedNumber; -/** - * C-compatible version of icu::number::FormattedNumber. - * - * NOTE: This is a C-compatible API; C++ users should build against numberformatter.h instead. - * - * @stable ICU 62 - */ -typedef struct UFormattedNumber UFormattedNumber; - - -/** - * Creates a new UNumberFormatter for the given skeleton string and locale. This is currently the only - * method for creating a new UNumberFormatter. - * - * Objects of type UNumberFormatter returned by this method are threadsafe. - * - * For more details on skeleton strings, see the documentation in numberformatter.h. For more details on - * the usage of this API, see the documentation at the top of unumberformatter.h. - * - * NOTE: This is a C-compatible API; C++ users should build against numberformatter.h instead. - * - * @param skeleton The skeleton string, like u"percent precision-integer" - * @param skeletonLen The number of UChars in the skeleton string, or -1 it it is NUL-terminated. - * @param locale The NUL-terminated locale ID. - * @param ec Set if an error occurs. - * @stable ICU 62 - */ -U_STABLE UNumberFormatter* U_EXPORT2 -unumf_openForSkeletonAndLocale(const UChar* skeleton, int32_t skeletonLen, const char* locale, - UErrorCode* ec); - - -#ifndef U_HIDE_DRAFT_API -/** - * Like unumf_openForSkeletonAndLocale, but accepts a UParseError, which will be populated with the - * location of a skeleton syntax error if such a syntax error exists. - * - * @param skeleton The skeleton string, like u"percent precision-integer" - * @param skeletonLen The number of UChars in the skeleton string, or -1 it it is NUL-terminated. - * @param locale The NUL-terminated locale ID. - * @param perror A parse error struct populated if an error occurs when parsing. Can be NULL. - * If no error occurs, perror->offset will be set to -1. - * @param ec Set if an error occurs. - * @draft ICU 64 - */ -U_DRAFT UNumberFormatter* U_EXPORT2 -unumf_openForSkeletonAndLocaleWithError( - const UChar* skeleton, int32_t skeletonLen, const char* locale, UParseError* perror, UErrorCode* ec); -#endif // U_HIDE_DRAFT_API - - -/** - * Creates an object to hold the result of a UNumberFormatter - * operation. The object can be used repeatedly; it is cleared whenever - * passed to a format function. - * - * @param ec Set if an error occurs. - * @stable ICU 62 - */ -U_STABLE UFormattedNumber* U_EXPORT2 -unumf_openResult(UErrorCode* ec); - - -/** - * Uses a UNumberFormatter to format an integer to a UFormattedNumber. A string, field position, and other - * information can be retrieved from the UFormattedNumber. - * - * The UNumberFormatter can be shared between threads. Each thread should have its own local - * UFormattedNumber, however, for storing the result of the formatting operation. - * - * NOTE: This is a C-compatible API; C++ users should build against numberformatter.h instead. - * - * @param uformatter A formatter object created by unumf_openForSkeletonAndLocale or similar. - * @param value The number to be formatted. - * @param uresult The object that will be mutated to store the result; see unumf_openResult. - * @param ec Set if an error occurs. - * @stable ICU 62 - */ -U_STABLE void U_EXPORT2 -unumf_formatInt(const UNumberFormatter* uformatter, int64_t value, UFormattedNumber* uresult, - UErrorCode* ec); - - -/** - * Uses a UNumberFormatter to format a double to a UFormattedNumber. A string, field position, and other - * information can be retrieved from the UFormattedNumber. - * - * The UNumberFormatter can be shared between threads. Each thread should have its own local - * UFormattedNumber, however, for storing the result of the formatting operation. - * - * NOTE: This is a C-compatible API; C++ users should build against numberformatter.h instead. - * - * @param uformatter A formatter object created by unumf_openForSkeletonAndLocale or similar. - * @param value The number to be formatted. - * @param uresult The object that will be mutated to store the result; see unumf_openResult. - * @param ec Set if an error occurs. - * @stable ICU 62 - */ -U_STABLE void U_EXPORT2 -unumf_formatDouble(const UNumberFormatter* uformatter, double value, UFormattedNumber* uresult, - UErrorCode* ec); - - -/** - * Uses a UNumberFormatter to format a decimal number to a UFormattedNumber. A string, field position, and - * other information can be retrieved from the UFormattedNumber. - * - * The UNumberFormatter can be shared between threads. Each thread should have its own local - * UFormattedNumber, however, for storing the result of the formatting operation. - * - * The syntax of the unformatted number is a "numeric string" as defined in the Decimal Arithmetic - * Specification, available at http://speleotrove.com/decimal - * - * NOTE: This is a C-compatible API; C++ users should build against numberformatter.h instead. - * - * @param uformatter A formatter object created by unumf_openForSkeletonAndLocale or similar. - * @param value The numeric string to be formatted. - * @param valueLen The length of the numeric string, or -1 if it is NUL-terminated. - * @param uresult The object that will be mutated to store the result; see unumf_openResult. - * @param ec Set if an error occurs. - * @stable ICU 62 - */ -U_STABLE void U_EXPORT2 -unumf_formatDecimal(const UNumberFormatter* uformatter, const char* value, int32_t valueLen, - UFormattedNumber* uresult, UErrorCode* ec); - -#ifndef U_HIDE_DRAFT_API -/** - * Returns a representation of a UFormattedNumber as a UFormattedValue, - * which can be subsequently passed to any API requiring that type. - * - * The returned object is owned by the UFormattedNumber and is valid - * only as long as the UFormattedNumber is present and unchanged in memory. - * - * You can think of this method as a cast between types. - * - * @param uresult The object containing the formatted string. - * @param ec Set if an error occurs. - * @return A UFormattedValue owned by the input object. - * @draft ICU 64 - */ -U_DRAFT const UFormattedValue* U_EXPORT2 -unumf_resultAsValue(const UFormattedNumber* uresult, UErrorCode* ec); -#endif /* U_HIDE_DRAFT_API */ - - -/** - * Extracts the result number string out of a UFormattedNumber to a UChar buffer if possible. - * If bufferCapacity is greater than the required length, a terminating NUL is written. - * If bufferCapacity is less than the required length, an error code is set. - * - * Also see ufmtval_getString, which returns a NUL-terminated string: - * - * int32_t len; - * const UChar* str = ufmtval_getString(unumf_resultAsValue(uresult, &ec), &len, &ec); - * - * NOTE: This is a C-compatible API; C++ users should build against numberformatter.h instead. - * - * @param uresult The object containing the formatted number. - * @param buffer Where to save the string output. - * @param bufferCapacity The number of UChars available in the buffer. - * @param ec Set if an error occurs. - * @return The required length. - * @stable ICU 62 - */ -U_STABLE int32_t U_EXPORT2 -unumf_resultToString(const UFormattedNumber* uresult, UChar* buffer, int32_t bufferCapacity, - UErrorCode* ec); - - -/** - * Determines the start and end indices of the next occurrence of the given field in the - * output string. This allows you to determine the locations of, for example, the integer part, - * fraction part, or symbols. - * - * This is a simpler but less powerful alternative to {@link ufmtval_nextPosition}. - * - * If a field occurs just once, calling this method will find that occurrence and return it. If a - * field occurs multiple times, this method may be called repeatedly with the following pattern: - * - *
- * UFieldPosition ufpos = {UNUM_GROUPING_SEPARATOR_FIELD, 0, 0};
- * while (unumf_resultNextFieldPosition(uresult, ufpos, &ec)) {
- *   // do something with ufpos.
- * }
- * 
- * - * This method is useful if you know which field to query. If you want all available field position - * information, use unumf_resultGetAllFieldPositions(). - * - * NOTE: All fields of the UFieldPosition must be initialized before calling this method. - * - * @param uresult The object containing the formatted number. - * @param ufpos - * Input+output variable. On input, the "field" property determines which field to look up, - * and the "endIndex" property determines where to begin the search. On output, the - * "beginIndex" field is set to the beginning of the first occurrence of the field after the - * input "endIndex", and "endIndex" is set to the end of that occurrence of the field - * (exclusive index). If a field position is not found, the FieldPosition is not changed and - * the method returns FALSE. - * @param ec Set if an error occurs. - * @stable ICU 62 - */ -U_STABLE UBool U_EXPORT2 -unumf_resultNextFieldPosition(const UFormattedNumber* uresult, UFieldPosition* ufpos, UErrorCode* ec); - - -/** - * Populates the given iterator with all fields in the formatted output string. This allows you to - * determine the locations of the integer part, fraction part, and sign. - * - * This is an alternative to the more powerful {@link ufmtval_nextPosition} API. - * - * If you need information on only one field, use {@link ufmtval_nextPosition} or - * {@link unumf_resultNextFieldPosition}. - * - * @param uresult The object containing the formatted number. - * @param ufpositer - * A pointer to a UFieldPositionIterator created by {@link #ufieldpositer_open}. Iteration - * information already present in the UFieldPositionIterator is deleted, and the iterator is reset - * to apply to the fields in the formatted string created by this function call. The field values - * and indexes returned by {@link #ufieldpositer_next} represent fields denoted by - * the UNumberFormatFields enum. Fields are not returned in a guaranteed order. Fields cannot - * overlap, but they may nest. For example, 1234 could format as "1,234" which might consist of a - * grouping separator field for ',' and an integer field encompassing the entire string. - * @param ec Set if an error occurs. - * @stable ICU 62 - */ -U_STABLE void U_EXPORT2 -unumf_resultGetAllFieldPositions(const UFormattedNumber* uresult, UFieldPositionIterator* ufpositer, - UErrorCode* ec); - - -/** - * Releases the UNumberFormatter created by unumf_openForSkeletonAndLocale(). - * - * @param uformatter An object created by unumf_openForSkeletonAndLocale(). - * @stable ICU 62 - */ -U_STABLE void U_EXPORT2 -unumf_close(UNumberFormatter* uformatter); - - -/** - * Releases the UFormattedNumber created by unumf_openResult(). - * - * @param uresult An object created by unumf_openResult(). - * @stable ICU 62 - */ -U_STABLE void U_EXPORT2 -unumf_closeResult(UFormattedNumber* uresult); - - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * \class LocalUNumberFormatterPointer - * "Smart pointer" class; closes a UNumberFormatter via unumf_close(). - * For most methods see the LocalPointerBase base class. - * - * Usage: - *
- * LocalUNumberFormatterPointer uformatter(unumf_openForSkeletonAndLocale(...));
- * // no need to explicitly call unumf_close()
- * 
- * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 62 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUNumberFormatterPointer, UNumberFormatter, unumf_close); - -/** - * \class LocalUFormattedNumberPointer - * "Smart pointer" class; closes a UFormattedNumber via unumf_closeResult(). - * For most methods see the LocalPointerBase base class. - * - * Usage: - *
- * LocalUFormattedNumberPointer uformatter(unumf_openResult(...));
- * // no need to explicitly call unumf_closeResult()
- * 
- * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 62 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedNumberPointer, UFormattedNumber, unumf_closeResult); - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif //__UNUMBERFORMATTER_H__ -#endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unumsys.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unumsys.h deleted file mode 100644 index 07ed6f0f8e..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/unumsys.h +++ /dev/null @@ -1,173 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -***************************************************************************************** -* Copyright (C) 2013-2014, International Business Machines -* Corporation and others. All Rights Reserved. -***************************************************************************************** -*/ - -#ifndef UNUMSYS_H -#define UNUMSYS_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/uenum.h" -#include "unicode/localpointer.h" - -/** - * \file - * \brief C API: UNumberingSystem, information about numbering systems - * - * Defines numbering systems. A numbering system describes the scheme by which - * numbers are to be presented to the end user. In its simplest form, a numbering - * system describes the set of digit characters that are to be used to display - * numbers, such as Western digits, Thai digits, Arabic-Indic digits, etc., in a - * positional numbering system with a specified radix (typically 10). - * More complicated numbering systems are algorithmic in nature, and require use - * of an RBNF formatter (rule based number formatter), in order to calculate - * the characters to be displayed for a given number. Examples of algorithmic - * numbering systems include Roman numerals, Chinese numerals, and Hebrew numerals. - * Formatting rules for many commonly used numbering systems are included in - * the ICU package, based on the numbering system rules defined in CLDR. - * Alternate numbering systems can be specified to a locale by using the - * numbers locale keyword. - */ - -/** - * Opaque UNumberingSystem object for use in C programs. - * @stable ICU 52 - */ -struct UNumberingSystem; -typedef struct UNumberingSystem UNumberingSystem; /**< C typedef for struct UNumberingSystem. @stable ICU 52 */ - -/** - * Opens a UNumberingSystem object using the default numbering system for the specified - * locale. - * @param locale The locale for which the default numbering system should be opened. - * @param status A pointer to a UErrorCode to receive any errors. For example, this - * may be U_UNSUPPORTED_ERROR for a locale such as "en@numbers=xyz" that - * specifies a numbering system unknown to ICU. - * @return A UNumberingSystem for the specified locale, or NULL if an error - * occurred. - * @stable ICU 52 - */ -U_STABLE UNumberingSystem * U_EXPORT2 -unumsys_open(const char *locale, UErrorCode *status); - -/** - * Opens a UNumberingSystem object using the name of one of the predefined numbering - * systems specified by CLDR and known to ICU, such as "latn", "arabext", or "hanidec"; - * the full list is returned by unumsys_openAvailableNames. Note that some of the names - * listed at http://unicode.org/repos/cldr/tags/latest/common/bcp47/number.xml - e.g. - * default, native, traditional, finance - do not identify specific numbering systems, - * but rather key values that may only be used as part of a locale, which in turn - * defines how they are mapped to a specific numbering system such as "latn" or "hant". - * - * @param name The name of the numbering system for which a UNumberingSystem object - * should be opened. - * @param status A pointer to a UErrorCode to receive any errors. For example, this - * may be U_UNSUPPORTED_ERROR for a numbering system such as "xyz" that - * is unknown to ICU. - * @return A UNumberingSystem for the specified name, or NULL if an error - * occurred. - * @stable ICU 52 - */ -U_STABLE UNumberingSystem * U_EXPORT2 -unumsys_openByName(const char *name, UErrorCode *status); - -/** - * Close a UNumberingSystem object. Once closed it may no longer be used. - * @param unumsys The UNumberingSystem object to close. - * @stable ICU 52 - */ -U_STABLE void U_EXPORT2 -unumsys_close(UNumberingSystem *unumsys); - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * \class LocalUNumberingSystemPointer - * "Smart pointer" class, closes a UNumberingSystem via unumsys_close(). - * For most methods see the LocalPointerBase base class. - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 52 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUNumberingSystemPointer, UNumberingSystem, unumsys_close); - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Returns an enumeration over the names of all of the predefined numbering systems known - * to ICU. - * The numbering system names will be in alphabetical (invariant) order. - * @param status A pointer to a UErrorCode to receive any errors. - * @return A pointer to a UEnumeration that must be closed with uenum_close(), - * or NULL if an error occurred. - * @stable ICU 52 - */ -U_STABLE UEnumeration * U_EXPORT2 -unumsys_openAvailableNames(UErrorCode *status); - -/** - * Returns the name of the specified UNumberingSystem object (if it is one of the - * predefined names known to ICU). - * @param unumsys The UNumberingSystem whose name is desired. - * @return A pointer to the name of the specified UNumberingSystem object, or - * NULL if the name is not one of the ICU predefined names. The pointer - * is only valid for the lifetime of the UNumberingSystem object. - * @stable ICU 52 - */ -U_STABLE const char * U_EXPORT2 -unumsys_getName(const UNumberingSystem *unumsys); - -/** - * Returns whether the given UNumberingSystem object is for an algorithmic (not purely - * positional) system. - * @param unumsys The UNumberingSystem whose algorithmic status is desired. - * @return TRUE if the specified UNumberingSystem object is for an algorithmic - * system. - * @stable ICU 52 - */ -U_STABLE UBool U_EXPORT2 -unumsys_isAlgorithmic(const UNumberingSystem *unumsys); - -/** - * Returns the radix of the specified UNumberingSystem object. Simple positional - * numbering systems typically have radix 10, but might have a radix of e.g. 16 for - * hexadecimal. The radix is less well-defined for non-positional algorithmic systems. - * @param unumsys The UNumberingSystem whose radix is desired. - * @return The radix of the specified UNumberingSystem object. - * @stable ICU 52 - */ -U_STABLE int32_t U_EXPORT2 -unumsys_getRadix(const UNumberingSystem *unumsys); - -/** - * Get the description string of the specified UNumberingSystem object. For simple - * positional systems this is the ordered string of digits (with length matching - * the radix), e.g. "\u3007\u4E00\u4E8C\u4E09\u56DB\u4E94\u516D\u4E03\u516B\u4E5D" - * for "hanidec"; it would be "0123456789ABCDEF" for hexadecimal. For - * algorithmic systems this is the name of the RBNF ruleset used for formatting, - * e.g. "zh/SpelloutRules/%spellout-cardinal" for "hans" or "%greek-upper" for - * "grek". - * @param unumsys The UNumberingSystem whose description string is desired. - * @param result A pointer to a buffer to receive the description string. - * @param resultLength The maximum size of result. - * @param status A pointer to a UErrorCode to receive any errors. - * @return The total buffer size needed; if greater than resultLength, the - * output was truncated. - * @stable ICU 52 - */ -U_STABLE int32_t U_EXPORT2 -unumsys_getDescription(const UNumberingSystem *unumsys, UChar *result, - int32_t resultLength, UErrorCode *status); - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uobject.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uobject.h deleted file mode 100644 index b1d7d2e1cc..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uobject.h +++ /dev/null @@ -1,324 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 2002-2012, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* file name: uobject.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2002jun26 -* created by: Markus W. Scherer -*/ - -#ifndef __UOBJECT_H__ -#define __UOBJECT_H__ - -#include "unicode/utypes.h" -#include "unicode/platform.h" - -/** - * \file - * \brief C++ API: Common ICU base class UObject. - */ - -/** - * \def U_NO_THROW - * Since ICU 64, use U_NOEXCEPT instead. - * - * Previously, define this to define the throw() specification so - * certain functions do not throw any exceptions - * - * UMemory operator new methods should have the throw() specification - * appended to them, so that the compiler adds the additional NULL check - * before calling constructors. Without, if operator new returns NULL the - * constructor is still called, and if the constructor references member - * data, (which it typically does), the result is a segmentation violation. - * - * @stable ICU 4.2. Since ICU 64, Use U_NOEXCEPT instead. See ICU-20422. - */ -#ifndef U_NO_THROW -#define U_NO_THROW throw() -#endif - -/*===========================================================================*/ -/* UClassID-based RTTI */ -/*===========================================================================*/ - -/** - * UClassID is used to identify classes without using the compiler's RTTI. - * This was used before C++ compilers consistently supported RTTI. - * ICU 4.6 requires compiler RTTI to be turned on. - * - * Each class hierarchy which needs - * to implement polymorphic clone() or operator==() defines two methods, - * described in detail below. UClassID values can be compared using - * operator==(). Nothing else should be done with them. - * - * \par - * In class hierarchies that implement "poor man's RTTI", - * each concrete subclass implements getDynamicClassID() in the same way: - * - * \code - * class Derived { - * public: - * virtual UClassID getDynamicClassID() const - * { return Derived::getStaticClassID(); } - * } - * \endcode - * - * Each concrete class implements getStaticClassID() as well, which allows - * clients to test for a specific type. - * - * \code - * class Derived { - * public: - * static UClassID U_EXPORT2 getStaticClassID(); - * private: - * static char fgClassID; - * } - * - * // In Derived.cpp: - * UClassID Derived::getStaticClassID() - * { return (UClassID)&Derived::fgClassID; } - * char Derived::fgClassID = 0; // Value is irrelevant - * \endcode - * @stable ICU 2.0 - */ -typedef void* UClassID; - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * UMemory is the common ICU base class. - * All other ICU C++ classes are derived from UMemory (starting with ICU 2.4). - * - * This is primarily to make it possible and simple to override the - * C++ memory management by adding new/delete operators to this base class. - * - * To override ALL ICU memory management, including that from plain C code, - * replace the allocation functions declared in cmemory.h - * - * UMemory does not contain any virtual functions. - * Common "boilerplate" functions are defined in UObject. - * - * @stable ICU 2.4 - */ -class U_COMMON_API UMemory { -public: - -/* test versions for debugging shaper heap memory problems */ -#ifdef SHAPER_MEMORY_DEBUG - static void * NewArray(int size, int count); - static void * GrowArray(void * array, int newSize ); - static void FreeArray(void * array ); -#endif - -#if U_OVERRIDE_CXX_ALLOCATION - /** - * Override for ICU4C C++ memory management. - * simple, non-class types are allocated using the macros in common/cmemory.h - * (uprv_malloc(), uprv_free(), uprv_realloc()); - * they or something else could be used here to implement C++ new/delete - * for ICU4C C++ classes - * @stable ICU 2.4 - */ - static void * U_EXPORT2 operator new(size_t size) U_NOEXCEPT; - - /** - * Override for ICU4C C++ memory management. - * See new(). - * @stable ICU 2.4 - */ - static void * U_EXPORT2 operator new[](size_t size) U_NOEXCEPT; - - /** - * Override for ICU4C C++ memory management. - * simple, non-class types are allocated using the macros in common/cmemory.h - * (uprv_malloc(), uprv_free(), uprv_realloc()); - * they or something else could be used here to implement C++ new/delete - * for ICU4C C++ classes - * @stable ICU 2.4 - */ - static void U_EXPORT2 operator delete(void *p) U_NOEXCEPT; - - /** - * Override for ICU4C C++ memory management. - * See delete(). - * @stable ICU 2.4 - */ - static void U_EXPORT2 operator delete[](void *p) U_NOEXCEPT; - -#if U_HAVE_PLACEMENT_NEW - /** - * Override for ICU4C C++ memory management for STL. - * See new(). - * @stable ICU 2.6 - */ - static inline void * U_EXPORT2 operator new(size_t, void *ptr) U_NOEXCEPT { return ptr; } - - /** - * Override for ICU4C C++ memory management for STL. - * See delete(). - * @stable ICU 2.6 - */ - static inline void U_EXPORT2 operator delete(void *, void *) U_NOEXCEPT {} -#endif /* U_HAVE_PLACEMENT_NEW */ -#if U_HAVE_DEBUG_LOCATION_NEW - /** - * This method overrides the MFC debug version of the operator new - * - * @param size The requested memory size - * @param file The file where the allocation was requested - * @param line The line where the allocation was requested - */ - static void * U_EXPORT2 operator new(size_t size, const char* file, int line) U_NOEXCEPT; - /** - * This method provides a matching delete for the MFC debug new - * - * @param p The pointer to the allocated memory - * @param file The file where the allocation was requested - * @param line The line where the allocation was requested - */ - static void U_EXPORT2 operator delete(void* p, const char* file, int line) U_NOEXCEPT; -#endif /* U_HAVE_DEBUG_LOCATION_NEW */ -#endif /* U_OVERRIDE_CXX_ALLOCATION */ - - /* - * Assignment operator not declared. The compiler will provide one - * which does nothing since this class does not contain any data members. - * API/code coverage may show the assignment operator as present and - * untested - ignore. - * Subclasses need this assignment operator if they use compiler-provided - * assignment operators of their own. An alternative to not declaring one - * here would be to declare and empty-implement a protected or public one. - UMemory &UMemory::operator=(const UMemory &); - */ -}; - -/** - * UObject is the common ICU "boilerplate" class. - * UObject inherits UMemory (starting with ICU 2.4), - * and all other public ICU C++ classes - * are derived from UObject (starting with ICU 2.2). - * - * UObject contains common virtual functions, in particular a virtual destructor. - * - * The clone() function is not available in UObject because it is not - * implemented by all ICU classes. - * Many ICU services provide a clone() function for their class trees, - * defined on the service's C++ base class, and all subclasses within that - * service class tree return a pointer to the service base class - * (which itself is a subclass of UObject). - * This is because some compilers do not support covariant (same-as-this) - * return types; cast to the appropriate subclass if necessary. - * - * @stable ICU 2.2 - */ -class U_COMMON_API UObject : public UMemory { -public: - /** - * Destructor. - * - * @stable ICU 2.2 - */ - virtual ~UObject(); - - /** - * ICU4C "poor man's RTTI", returns a UClassID for the actual ICU class. - * The base class implementation returns a dummy value. - * - * Use compiler RTTI rather than ICU's "poor man's RTTI". - * Since ICU 4.6, new ICU C++ class hierarchies do not implement "poor man's RTTI". - * - * @stable ICU 2.2 - */ - virtual UClassID getDynamicClassID() const; - -protected: - // the following functions are protected to prevent instantiation and - // direct use of UObject itself - - // default constructor - // inline UObject() {} - - // copy constructor - // inline UObject(const UObject &other) {} - -#if 0 - // TODO Sometime in the future. Implement operator==(). - // (This comment inserted in 2.2) - // some or all of the following "boilerplate" functions may be made public - // in a future ICU4C release when all subclasses implement them - - // assignment operator - // (not virtual, see "Taligent's Guide to Designing Programs" pp.73..74) - // commented out because the implementation is the same as a compiler's default - // UObject &operator=(const UObject &other) { return *this; } - - // comparison operators - virtual inline UBool operator==(const UObject &other) const { return this==&other; } - inline UBool operator!=(const UObject &other) const { return !operator==(other); } - - // clone() commented out from the base class: - // some compilers do not support co-variant return types - // (i.e., subclasses would have to return UObject * as well, instead of SubClass *) - // see also UObject class documentation. - // virtual UObject *clone() const; -#endif - - /* - * Assignment operator not declared. The compiler will provide one - * which does nothing since this class does not contain any data members. - * API/code coverage may show the assignment operator as present and - * untested - ignore. - * Subclasses need this assignment operator if they use compiler-provided - * assignment operators of their own. An alternative to not declaring one - * here would be to declare and empty-implement a protected or public one. - UObject &UObject::operator=(const UObject &); - */ -}; - -#ifndef U_HIDE_INTERNAL_API -/** - * This is a simple macro to add ICU RTTI to an ICU object implementation. - * This does not go into the header. This should only be used in *.cpp files. - * - * @param myClass The name of the class that needs RTTI defined. - * @internal - */ -#define UOBJECT_DEFINE_RTTI_IMPLEMENTATION(myClass) \ - UClassID U_EXPORT2 myClass::getStaticClassID() { \ - static char classID = 0; \ - return (UClassID)&classID; \ - } \ - UClassID myClass::getDynamicClassID() const \ - { return myClass::getStaticClassID(); } - - -/** - * This macro adds ICU RTTI to an ICU abstract class implementation. - * This macro should be invoked in *.cpp files. The corresponding - * header should declare getStaticClassID. - * - * @param myClass The name of the class that needs RTTI defined. - * @internal - */ -#define UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(myClass) \ - UClassID U_EXPORT2 myClass::getStaticClassID() { \ - static char classID = 0; \ - return (UClassID)&classID; \ - } - -#endif /* U_HIDE_INTERNAL_API */ - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uplrule.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uplrule.h deleted file mode 100644 index b82cd68ce2..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uplrule.h +++ /dev/null @@ -1,82 +0,0 @@ -/* -****************************************************************************** -* Copyright (C) 2010-2011 Apple Inc. All Rights Reserved. -****************************************************************************** -*/ - -#ifndef UPLRULE_H -#define UPLRULE_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/upluralrules.h" - -/** - * NOTE - THE TEMPORARY APPLE INTERFACES DECLARED HERE ARE OBSOLETE, PLEASE USE - * THE REAL ICU EQUIVALENTS IN upluralrules.h - */ - -/** - * A UPluralRules object for use in C programs. - * struct UPluralRules; defined in upluralrules.h - */ - -/** - * Open a new UPluralRules object using the predefined plural rules for a - * given locale. - * @param locale The locale for which the rules are desired. - * @param status A pointer to a UErrorCode to receive any errors. - * @return A UPluralRules for the specified locale, or 0 if an error occurred. - * @internal/obsolete, use uplrules_open in upluralrules.h - */ -U_INTERNAL UPluralRules* U_EXPORT2 -uplrule_open(const char *locale, - UErrorCode *status); - -/** - * Close a UPluralRules object. Once closed it may no longer be used. - * @param plrules The UPluralRules object to close. - * @internal/obsolete, use uplrules_close in upluralrules.h - */ -U_INTERNAL void U_EXPORT2 -uplrule_close(UPluralRules *plrules); - -/** - * Given an int32_t number, returns the keyword of the first rule that - * applies to the number, according to the supplied UPluralRules object. - * @param plrules The UPluralRules object specifying the rules. - * @param number The number for which the rule has to be determined. - * @param keyword The keyword of the rule that applies to number. - * @param capacity The capacity of keyword. - * @param status A pointer to a UErrorCode to receive any errors. - * @return The length of keyword. - * @internal/obsolete, use uplrules_select in upluralrules.h - */ -U_INTERNAL int32_t U_EXPORT2 -uplrule_select(const UPluralRules *plrules, - int32_t number, - UChar *keyword, int32_t capacity, - UErrorCode *status); - -/** - * Given a double number, returns the keyword of the first rule that - * applies to the number, according to the supplied UPluralRules object. - * @param plrules The UPluralRules object specifying the rules. - * @param number The number for which the rule has to be determined. - * @param keyword The keyword of the rule that applies to number. - * @param capacity The capacity of keyword. - * @param status A pointer to a UErrorCode to receive any errors. - * @return The length of keyword. - * @internal/obsolete, use uplrules_select in upluralrules.h - */ -U_INTERNAL int32_t U_EXPORT2 -uplrule_selectDouble(const UPluralRules *plrules, - double number, - UChar *keyword, int32_t capacity, - UErrorCode *status); - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/upluralrules.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/upluralrules.h deleted file mode 100644 index 2554ae0ea0..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/upluralrules.h +++ /dev/null @@ -1,224 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -***************************************************************************************** -* Copyright (C) 2010-2013, International Business Machines -* Corporation and others. All Rights Reserved. -***************************************************************************************** -*/ - -#ifndef UPLURALRULES_H -#define UPLURALRULES_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/localpointer.h" -#include "unicode/uenum.h" -#ifndef U_HIDE_INTERNAL_API -#include "unicode/unum.h" -#endif /* U_HIDE_INTERNAL_API */ - -// Forward-declaration -struct UFormattedNumber; - -/** - * \file - * \brief C API: Plural rules, select plural keywords for numeric values. - * - * A UPluralRules object defines rules for mapping non-negative numeric - * values onto a small set of keywords. Rules are constructed from a text - * description, consisting of a series of keywords and conditions. - * The uplrules_select function examines each condition in order and - * returns the keyword for the first condition that matches the number. - * If none match, the default rule(other) is returned. - * - * For more information, see the LDML spec, C.11 Language Plural Rules: - * http://www.unicode.org/reports/tr35/#Language_Plural_Rules - * - * Keywords: ICU locale data has 6 predefined values - - * 'zero', 'one', 'two', 'few', 'many' and 'other'. Callers need to check - * the value of keyword returned by the uplrules_select function. - * - * These are based on CLDR Language Plural Rules. For these - * predefined rules, see the CLDR page at - * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html - */ - -/** - * Type of plurals and PluralRules. - * @stable ICU 50 - */ -enum UPluralType { - /** - * Plural rules for cardinal numbers: 1 file vs. 2 files. - * @stable ICU 50 - */ - UPLURAL_TYPE_CARDINAL, - /** - * Plural rules for ordinal numbers: 1st file, 2nd file, 3rd file, 4th file, etc. - * @stable ICU 50 - */ - UPLURAL_TYPE_ORDINAL, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UPluralType value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UPLURAL_TYPE_COUNT -#endif /* U_HIDE_DEPRECATED_API */ -}; -/** - * @stable ICU 50 - */ -typedef enum UPluralType UPluralType; - -/** - * Opaque UPluralRules object for use in C programs. - * @stable ICU 4.8 - */ -struct UPluralRules; -typedef struct UPluralRules UPluralRules; /**< C typedef for struct UPluralRules. @stable ICU 4.8 */ - -/** - * Opens a new UPluralRules object using the predefined cardinal-number plural rules for a - * given locale. - * Same as uplrules_openForType(locale, UPLURAL_TYPE_CARDINAL, status). - * @param locale The locale for which the rules are desired. - * @param status A pointer to a UErrorCode to receive any errors. - * @return A UPluralRules for the specified locale, or NULL if an error occurred. - * @stable ICU 4.8 - */ -U_CAPI UPluralRules* U_EXPORT2 -uplrules_open(const char *locale, UErrorCode *status); - -/** - * Opens a new UPluralRules object using the predefined plural rules for a - * given locale and the plural type. - * @param locale The locale for which the rules are desired. - * @param type The plural type (e.g., cardinal or ordinal). - * @param status A pointer to a UErrorCode to receive any errors. - * @return A UPluralRules for the specified locale, or NULL if an error occurred. - * @stable ICU 50 - */ -U_CAPI UPluralRules* U_EXPORT2 -uplrules_openForType(const char *locale, UPluralType type, UErrorCode *status); - -/** - * Closes a UPluralRules object. Once closed it may no longer be used. - * @param uplrules The UPluralRules object to close. - * @stable ICU 4.8 - */ -U_CAPI void U_EXPORT2 -uplrules_close(UPluralRules *uplrules); - - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUPluralRulesPointer - * "Smart pointer" class, closes a UPluralRules via uplrules_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.8 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUPluralRulesPointer, UPluralRules, uplrules_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - - -/** - * Given a floating-point number, returns the keyword of the first rule that - * applies to the number, according to the supplied UPluralRules object. - * @param uplrules The UPluralRules object specifying the rules. - * @param number The number for which the rule has to be determined. - * @param keyword An output buffer to write the keyword of the rule that - * applies to number. - * @param capacity The capacity of the keyword buffer. - * @param status A pointer to a UErrorCode to receive any errors. - * @return The length of the keyword. - * @stable ICU 4.8 - */ -U_CAPI int32_t U_EXPORT2 -uplrules_select(const UPluralRules *uplrules, - double number, - UChar *keyword, int32_t capacity, - UErrorCode *status); - -#ifndef U_HIDE_DRAFT_API -/** - * Given a formatted number, returns the keyword of the first rule - * that applies to the number, according to the supplied UPluralRules object. - * - * A UFormattedNumber allows you to specify an exponent or trailing zeros, - * which can affect the plural category. To get a UFormattedNumber, see - * {@link UNumberFormatter}. - * - * @param uplrules The UPluralRules object specifying the rules. - * @param number The formatted number for which the rule has to be determined. - * @param keyword The destination buffer for the keyword of the rule that - * applies to number. - * @param capacity The capacity of the keyword buffer. - * @param status A pointer to a UErrorCode to receive any errors. - * @return The length of the keyword. - * @draft ICU 64 - */ -U_CAPI int32_t U_EXPORT2 -uplrules_selectFormatted(const UPluralRules *uplrules, - const struct UFormattedNumber* number, - UChar *keyword, int32_t capacity, - UErrorCode *status); -#endif /* U_HIDE_DRAFT_API */ - -#ifndef U_HIDE_INTERNAL_API -/** - * Given a number, returns the keyword of the first rule that applies to the - * number, according to the UPluralRules object and given the number format - * specified by the UNumberFormat object. - * Note: This internal preview interface may be removed in the future if - * an architecturally cleaner solution reaches stable status. - * @param uplrules The UPluralRules object specifying the rules. - * @param number The number for which the rule has to be determined. - * @param fmt The UNumberFormat specifying how the number will be formatted - * (this can affect the plural form, e.g. "1 dollar" vs "1.0 dollars"). - * If this is NULL, the function behaves like uplrules_select. - * @param keyword An output buffer to write the keyword of the rule that - * applies to number. - * @param capacity The capacity of the keyword buffer. - * @param status A pointer to a UErrorCode to receive any errors. - * @return The length of keyword. - * @internal ICU 59 technology preview, may be removed in the future - */ -U_INTERNAL int32_t U_EXPORT2 -uplrules_selectWithFormat(const UPluralRules *uplrules, - double number, - const UNumberFormat *fmt, - UChar *keyword, int32_t capacity, - UErrorCode *status); - -#endif /* U_HIDE_INTERNAL_API */ - -/** - * Creates a string enumeration of all plural rule keywords used in this - * UPluralRules object. The rule "other" is always present by default. - * @param uplrules The UPluralRules object specifying the rules for - * a given locale. - * @param status A pointer to a UErrorCode to receive any errors. - * @return a string enumeration over plural rule keywords, or NULL - * upon error. The caller is responsible for closing the result. - * @stable ICU 59 - */ -U_STABLE UEnumeration* U_EXPORT2 -uplrules_getKeywords(const UPluralRules *uplrules, - UErrorCode *status); - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/urbtok.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/urbtok.h deleted file mode 100644 index bab4034130..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/urbtok.h +++ /dev/null @@ -1,270 +0,0 @@ -/* -****************************************************************************** -* Copyright (C) 2006-2008, 2017-2018 Apple Inc. All Rights Reserved. -****************************************************************************** -*/ - -#ifndef URBTOK_H -#define URBTOK_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_BREAK_ITERATION - -#include "unicode/ubrk.h" -#include "unicode/parseerr.h" - -/** - * The interfaces here are meant to extend the functionality of the standard - * ubrk_* interfaces in ubrk.h to allow for faster batch tokenization. This - * was primarily intended for Spotlight and related processes. There are two - * versions of these: - * - * The versions prefixed urbtok_ extend the standard ICU RuleBasedBreakIterator - * class. These are intended to fully support all of the current rule syntax used - * by that class, and should urbtok_tokenize give results equivalent to a loop using a - * combination of the standard functions ubrk_next to get the next break (determining - * the length of the previous token) and ubrk_getRuleStatusVec to get a flag value - * formed as the bitwise OR of all of the values in the returnend vector, skipping all - * tokens whose flag value is -1. urbtok_tokenize is faster than such a loop since it - * assumes only one pass over the text in the forward direction, and shut skips caching - * of breaks positions and makes other simplifying assumptions. However, it may not be - * fast enough fo Spotlight. - * - * Thus we also include the versions prefixed by urbtok57_, which use a legacy ICU 57 - * version of RuleBasedBreakIterator and an Apple subclass RuleBasedTokenizer. These - * versions do not support any RuleBasedBreakIterator rule sytax enhancements from - * later than ICU 57. - * - * The two different sets of functions should not be mixed; urbtok57_getBinaryRules - * should only be used with a UBreakIterator created using urbtok57_openRules; - * urbtok57_tokenize should only be used with a UBreakIterator created using - * urbtok57_openRules or urbtok_openBinaryRules[NoCopy], etc. Similarly, the - * urbtok_ functions should only be used with other urbtok_ functions. - */ - -/** - * struct for returning token results - */ -typedef struct RuleBasedTokenRange { - signed long location; - signed long length; -} RuleBasedTokenRange; - -/** - * Open a new UBreakIterator for locating text boundaries for a specified locale. - * A UBreakIterator may be used for detecting character, line, word, - * and sentence breaks in text. - * @param type The type of UBreakIterator to open: one of UBRK_CHARACTER, UBRK_WORD, - * UBRK_LINE, UBRK_SENTENCE - * @param locale The locale specifying the text-breaking conventions. Note that - * locale keys such as "lb" and "ss" may be used to modify text break behavior, - * see general discussion of BreakIterator C API. - * @param status A UErrorCode to receive any errors. - * @return A UBreakIterator for the specified type and locale. - * @see ubrk_open - * @internal - */ -U_INTERNAL UBreakIterator* U_EXPORT2 -urbtok_open(UBreakIteratorType type, - const char *locale, - UErrorCode *status); - -/** - * Open a new UBreakIterator for tokenizing text using specified breaking rules. - * The rule syntax is ... (TBD) - * @param rules A set of rules specifying the text breaking conventions. - * @param rulesLength The number of characters in rules, or -1 if null-terminated. - * @param parseErr Receives position and context information for any syntax errors - * detected while parsing the rules. - * @param status A UErrorCode to receive any errors. - * @return A UBreakIterator for the specified rules. - * @see ubrk_open - * @internal - */ -U_INTERNAL UBreakIterator* U_EXPORT2 -urbtok_openRules(const UChar *rules, - int32_t rulesLength, - UParseError *parseErr, - UErrorCode *status); - -/** - * Open a new UBreakIterator for tokenizing text using specified breaking rules. - * @param rules A set of rules specifying the text breaking conventions. The binary rules - * must be at least 32-bit aligned. Note: This version makes a copy of the - * rules, so after calling this function the caller can close or release - * the rules that were passed to this function. The copy created by this - * call will be freed when ubrk_close() is called on the UBreakIterator*. - * @param status A UErrorCode to receive any errors. - * @return A UBreakIterator for the specified rules. - * @see ubrk_open - * @internal - */ -U_INTERNAL UBreakIterator* U_EXPORT2 -urbtok_openBinaryRules(const uint8_t *rules, - UErrorCode *status); - -/** - * Open a new UBreakIterator for tokenizing text using specified breaking rules. - * @param rules A set of rules specifying the text breaking conventions. The binary rules - * must be at least 32-bit aligned. Note: This version does NOT make a copy - * of the rules, so after calling this function the caller must not close or - * release the rules passed to this function until after they are finished - * with this UBreakIterator* (and any others created using the same rules) - * and have called ubrk_close() to close the UBreakIterator* (and any others - * using the same rules). - * @param status A UErrorCode to receive any errors. - * @return A UBreakIterator for the specified rules. - * @see ubrk_open - * @internal - */ -U_INTERNAL UBreakIterator* U_EXPORT2 -urbtok_openBinaryRulesNoCopy(const uint8_t *rules, - UErrorCode *status); - -/** - * Get the (native-endian) binary break rules for this tokenizer. - * @param bi The tokenizer to use. - * @param buffer The output buffer for the rules. You can pass 0 to get the required size. - * @param buffSize The size of the output buffer. - * @param status A UErrorCode to receive any errors. - * @return The actual size of the binary rules, whether they fit the buffer or not. - * @internal - */ -U_INTERNAL uint32_t U_EXPORT2 -urbtok_getBinaryRules(UBreakIterator *bi, - uint8_t *buffer, - uint32_t buffSize, - UErrorCode *status); - -/** - * Tokenize text using a rule-based tokenizer. - * This is primarily intended for speedy batch tokenization using very simple rules. - * It does not currently implement support for all of the features of ICU break rules - * (adding that would reduce performance). If you need support for all of the ICU rule - * features, please use the standard ubrk_* interfaces; instead of urbtok_tokenize, - * use a loop with ubrk_next and ubrk_getRuleStatus. - * - * @param bi The tokenizer to use. - * @param maxTokens The maximum number of tokens to return. - * @param outTokens An array of RuleBasedTokenRange to fill in with the tokens. - * @param outTokenFlags An (optional) array of uint32_t to fill in with token flags. - * @return The number of tokens returned, 0 if done. - * @internal - */ -U_INTERNAL int32_t U_EXPORT2 -urbtok_tokenize(UBreakIterator *bi, - int32_t maxTokens, - RuleBasedTokenRange *outTokens, - unsigned long *outTokenFlags); - -/** - * Swap the endianness of a set of binary break rules. - * @param rules A set of rules which need swapping. - * @param buffer The output buffer for the swapped rules, which must be the same - * size as the input rules buffer. - * @param inIsBigEndian UBool indicating whether the input is big-endian - * @param outIsBigEndian UBool indicating whether the output should be big-endian - * @param status A UErrorCode to receive any errors. - * @internal - */ -U_INTERNAL void U_EXPORT2 -urbtok_swapBinaryRules(const uint8_t *rules, - uint8_t *buffer, - UBool inIsBigEndian, - UBool outIsBigEndian, - UErrorCode *status); - - - -/** - * Open a new UBreakIterator for tokenizing text using specified breaking rules. - * The rule syntax is ... (TBD) - * @param rules A set of rules specifying the text breaking conventions. - * @param rulesLength The number of characters in rules, or -1 if null-terminated. - * @param parseErr Receives position and context information for any syntax errors - * detected while parsing the rules. - * @param status A UErrorCode to receive any errors. - * @return A UBreakIterator for the specified rules. - * @see ubrk_open - * @internal - */ -U_INTERNAL UBreakIterator* U_EXPORT2 -urbtok57_openRules(const UChar *rules, - int32_t rulesLength, - UParseError *parseErr, - UErrorCode *status); - -/** - * Open a new UBreakIterator for tokenizing text using specified breaking rules. - * @param rules A set of rules specifying the text breaking conventions. The binary rules - * must be at least 32-bit aligned. Note: This version makes a copy of the - * rules, so after calling this function the caller can close or release - * the rules that were passed to this function. The copy created by this - * call will be freed when ubrk_close() is called on the UBreakIterator*. - * @param status A UErrorCode to receive any errors. - * @return A UBreakIterator for the specified rules. - * @see ubrk_open - * @internal - */ -U_INTERNAL UBreakIterator* U_EXPORT2 -urbtok57_openBinaryRules(const uint8_t *rules, - UErrorCode *status); - -/** - * Open a new UBreakIterator for tokenizing text using specified breaking rules. - * @param rules A set of rules specifying the text breaking conventions. The binary rules - * must be at least 32-bit aligned. Note: This version does NOT make a copy - * of the rules, so after calling this function the caller must not close or - * release the rules passed to this function until after they are finished - * with this UBreakIterator* (and any others created using the same rules) - * and have called ubrk_close() to close the UBreakIterator* (and any others - * using the same rules). - * @param status A UErrorCode to receive any errors. - * @return A UBreakIterator for the specified rules. - * @see ubrk_open - * @internal - */ -U_INTERNAL UBreakIterator* U_EXPORT2 -urbtok57_openBinaryRulesNoCopy(const uint8_t *rules, - UErrorCode *status); - -/** - * Get the (native-endian) binary break rules for this tokenizer. - * @param bi The tokenizer to use. - * @param buffer The output buffer for the rules. You can pass 0 to get the required size. - * @param buffSize The size of the output buffer. - * @param status A UErrorCode to receive any errors. - * @return The actual size of the binary rules, whether they fit the buffer or not. - * @internal - */ -U_INTERNAL uint32_t U_EXPORT2 -urbtok57_getBinaryRules(UBreakIterator *bi, - uint8_t *buffer, - uint32_t buffSize, - UErrorCode *status); - -/** - * Tokenize text using a rule-based tokenizer. - * This is primarily intended for speedy batch tokenization using very simple rules. - * It does not currently implement support for all of the features of ICU break rules - * (adding that would reduce performance). If you need support for all of the ICU rule - * features, please use the standard Apple urbtok_tokenize, or a loop with standard - * ICU interfaes ubrk_next and ubrk_getRuleStatusVec. - * - * @param bi The tokenizer to use. - * @param maxTokens The maximum number of tokens to return. - * @param outTokens An array of RuleBasedTokenRange to fill in with the tokens. - * @param outTokenFlags An (optional) array of uint32_t to fill in with token flags. - * @return The number of tokens returned, 0 if done. - * @internal - */ -U_INTERNAL int32_t U_EXPORT2 -urbtok57_tokenize(UBreakIterator *bi, - int32_t maxTokens, - RuleBasedTokenRange *outTokens, - unsigned long *outTokenFlags); - -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uregex.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uregex.h deleted file mode 100644 index 27aa3e8667..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uregex.h +++ /dev/null @@ -1,1614 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2004-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* file name: uregex.h -* encoding: UTF-8 -* indentation:4 -* -* created on: 2004mar09 -* created by: Andy Heninger -* -* ICU Regular Expressions, API for C -*/ - -/** - * \file - * \brief C API: Regular Expressions - * - *

This is a C wrapper around the C++ RegexPattern and RegexMatcher classes.

- */ - -#ifndef UREGEX_H -#define UREGEX_H - -#include "unicode/utext.h" -#include "unicode/utypes.h" - -#if !UCONFIG_NO_REGULAR_EXPRESSIONS - -#include "unicode/localpointer.h" -#include "unicode/parseerr.h" - -struct URegularExpression; -/** - * Structure representing a compiled regular expression, plus the results - * of a match operation. - * @stable ICU 3.0 - */ -typedef struct URegularExpression URegularExpression; - - -/** - * Constants for Regular Expression Match Modes. - * @stable ICU 2.4 - */ -typedef enum URegexpFlag{ - -#ifndef U_HIDE_DRAFT_API - /** Forces normalization of pattern and strings. - Not implemented yet, just a placeholder, hence draft. - @draft ICU 2.4 */ - UREGEX_CANON_EQ = 128, -#endif /* U_HIDE_DRAFT_API */ - /** Enable case insensitive matching. @stable ICU 2.4 */ - UREGEX_CASE_INSENSITIVE = 2, - - /** Allow white space and comments within patterns @stable ICU 2.4 */ - UREGEX_COMMENTS = 4, - - /** If set, '.' matches line terminators, otherwise '.' matching stops at line end. - * @stable ICU 2.4 */ - UREGEX_DOTALL = 32, - - /** If set, treat the entire pattern as a literal string. - * Metacharacters or escape sequences in the input sequence will be given - * no special meaning. - * - * The flag UREGEX_CASE_INSENSITIVE retains its impact - * on matching when used in conjunction with this flag. - * The other flags become superfluous. - * - * @stable ICU 4.0 - */ - UREGEX_LITERAL = 16, - - /** Control behavior of "$" and "^" - * If set, recognize line terminators within string, - * otherwise, match only at start and end of input string. - * @stable ICU 2.4 */ - UREGEX_MULTILINE = 8, - - /** Unix-only line endings. - * When this mode is enabled, only \\u000a is recognized as a line ending - * in the behavior of ., ^, and $. - * @stable ICU 4.0 - */ - UREGEX_UNIX_LINES = 1, - - /** Unicode word boundaries. - * If set, \b uses the Unicode TR 29 definition of word boundaries. - * Warning: Unicode word boundaries are quite different from - * traditional regular expression word boundaries. See - * http://unicode.org/reports/tr29/#Word_Boundaries - * @stable ICU 2.8 - */ - UREGEX_UWORD = 256, - - /** Error on Unrecognized backslash escapes. - * If set, fail with an error on patterns that contain - * backslash-escaped ASCII letters without a known special - * meaning. If this flag is not set, these - * escaped letters represent themselves. - * @stable ICU 4.0 - */ - UREGEX_ERROR_ON_UNKNOWN_ESCAPES = 512 - -} URegexpFlag; - -/** - * Open (compile) an ICU regular expression. Compiles the regular expression in - * string form into an internal representation using the specified match mode flags. - * The resulting regular expression handle can then be used to perform various - * matching operations. - * - * - * @param pattern The Regular Expression pattern to be compiled. - * @param patternLength The length of the pattern, or -1 if the pattern is - * NUL terminated. - * @param flags Flags that alter the default matching behavior for - * the regular expression, UREGEX_CASE_INSENSITIVE, for - * example. For default behavior, set this parameter to zero. - * See enum URegexpFlag. All desired flags - * are bitwise-ORed together. - * @param pe Receives the position (line and column numbers) of any syntax - * error within the source regular expression string. If this - * information is not wanted, pass NULL for this parameter. - * @param status Receives error detected by this function. - * @stable ICU 3.0 - * - */ -U_STABLE URegularExpression * U_EXPORT2 -uregex_open( const UChar *pattern, - int32_t patternLength, - uint32_t flags, - UParseError *pe, - UErrorCode *status); - -/** - * Open (compile) an ICU regular expression. Compiles the regular expression in - * string form into an internal representation using the specified match mode flags. - * The resulting regular expression handle can then be used to perform various - * matching operations. - *

- * The contents of the pattern UText will be extracted and saved. Ownership of the - * UText struct itself remains with the caller. This is to match the behavior of - * uregex_open(). - * - * @param pattern The Regular Expression pattern to be compiled. - * @param flags Flags that alter the default matching behavior for - * the regular expression, UREGEX_CASE_INSENSITIVE, for - * example. For default behavior, set this parameter to zero. - * See enum URegexpFlag. All desired flags - * are bitwise-ORed together. - * @param pe Receives the position (line and column numbers) of any syntax - * error within the source regular expression string. If this - * information is not wanted, pass NULL for this parameter. - * @param status Receives error detected by this function. - * - * @stable ICU 4.6 - */ -U_STABLE URegularExpression * U_EXPORT2 -uregex_openUText(UText *pattern, - uint32_t flags, - UParseError *pe, - UErrorCode *status); - -#if !UCONFIG_NO_CONVERSION -/** - * Open (compile) an ICU regular expression. The resulting regular expression - * handle can then be used to perform various matching operations. - *

- * This function is the same as uregex_open, except that the pattern - * is supplied as an 8 bit char * string in the default code page. - * - * @param pattern The Regular Expression pattern to be compiled, - * NUL terminated. - * @param flags Flags that alter the default matching behavior for - * the regular expression, UREGEX_CASE_INSENSITIVE, for - * example. For default behavior, set this parameter to zero. - * See enum URegexpFlag. All desired flags - * are bitwise-ORed together. - * @param pe Receives the position (line and column numbers) of any syntax - * error within the source regular expression string. If this - * information is not wanted, pass NULL for this parameter. - * @param status Receives errors detected by this function. - * @return The URegularExpression object representing the compiled - * pattern. - * - * @stable ICU 3.0 - */ -U_STABLE URegularExpression * U_EXPORT2 -uregex_openC( const char *pattern, - uint32_t flags, - UParseError *pe, - UErrorCode *status); -#endif - - - -/** - * Close the regular expression, recovering all resources (memory) it - * was holding. - * - * @param regexp The regular expression to be closed. - * @stable ICU 3.0 - */ -U_STABLE void U_EXPORT2 -uregex_close(URegularExpression *regexp); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalURegularExpressionPointer - * "Smart pointer" class, closes a URegularExpression via uregex_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalURegularExpressionPointer, URegularExpression, uregex_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Make a copy of a compiled regular expression. Cloning a regular - * expression is faster than opening a second instance from the source - * form of the expression, and requires less memory. - *

- * Note that the current input string and the position of any matched text - * within it are not cloned; only the pattern itself and the - * match mode flags are copied. - *

- * Cloning can be particularly useful to threaded applications that perform - * multiple match operations in parallel. Each concurrent RE - * operation requires its own instance of a URegularExpression. - * - * @param regexp The compiled regular expression to be cloned. - * @param status Receives indication of any errors encountered - * @return the cloned copy of the compiled regular expression. - * @stable ICU 3.0 - */ -U_STABLE URegularExpression * U_EXPORT2 -uregex_clone(const URegularExpression *regexp, UErrorCode *status); - -/** - * Returns a pointer to the source form of the pattern for this regular expression. - * This function will work even if the pattern was originally specified as a UText. - * - * @param regexp The compiled regular expression. - * @param patLength This output parameter will be set to the length of the - * pattern string. A NULL pointer may be used here if the - * pattern length is not needed, as would be the case if - * the pattern is known in advance to be a NUL terminated - * string. - * @param status Receives errors detected by this function. - * @return a pointer to the pattern string. The storage for the string is - * owned by the regular expression object, and must not be - * altered or deleted by the application. The returned string - * will remain valid until the regular expression is closed. - * @stable ICU 3.0 - */ -U_STABLE const UChar * U_EXPORT2 -uregex_pattern(const URegularExpression *regexp, - int32_t *patLength, - UErrorCode *status); - -/** - * Returns the source text of the pattern for this regular expression. - * This function will work even if the pattern was originally specified as a UChar string. - * - * @param regexp The compiled regular expression. - * @param status Receives errors detected by this function. - * @return the pattern text. The storage for the text is owned by the regular expression - * object, and must not be altered or deleted. - * - * @stable ICU 4.6 - */ -U_STABLE UText * U_EXPORT2 -uregex_patternUText(const URegularExpression *regexp, - UErrorCode *status); - -/** - * Get the match mode flags that were specified when compiling this regular expression. - * @param status Receives errors detected by this function. - * @param regexp The compiled regular expression. - * @return The match mode flags - * @see URegexpFlag - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -uregex_flags(const URegularExpression *regexp, - UErrorCode *status); - - -/** - * Set the subject text string upon which the regular expression will look for matches. - * This function may be called any number of times, allowing the regular - * expression pattern to be applied to different strings. - *

- * Regular expression matching operations work directly on the application's - * string data. No copy is made. The subject string data must not be - * altered after calling this function until after all regular expression - * operations involving this string data are completed. - *

- * Zero length strings are permitted. In this case, no subsequent match - * operation will dereference the text string pointer. - * - * @param regexp The compiled regular expression. - * @param text The subject text string. - * @param textLength The length of the subject text, or -1 if the string - * is NUL terminated. - * @param status Receives errors detected by this function. - * @stable ICU 3.0 - */ -U_STABLE void U_EXPORT2 -uregex_setText(URegularExpression *regexp, - const UChar *text, - int32_t textLength, - UErrorCode *status); - - -/** - * Set the subject text string upon which the regular expression will look for matches. - * This function may be called any number of times, allowing the regular - * expression pattern to be applied to different strings. - *

- * Regular expression matching operations work directly on the application's - * string data; only a shallow clone is made. The subject string data must not be - * altered after calling this function until after all regular expression - * operations involving this string data are completed. - * - * @param regexp The compiled regular expression. - * @param text The subject text string. - * @param status Receives errors detected by this function. - * - * @stable ICU 4.6 - */ -U_STABLE void U_EXPORT2 -uregex_setUText(URegularExpression *regexp, - UText *text, - UErrorCode *status); - -/** - * Get the subject text that is currently associated with this - * regular expression object. If the input was supplied using uregex_setText(), - * that pointer will be returned. Otherwise, the characters in the input will - * be extracted to a buffer and returned. In either case, ownership remains - * with the regular expression object. - * - * This function will work even if the input was originally specified as a UText. - * - * @param regexp The compiled regular expression. - * @param textLength The length of the string is returned in this output parameter. - * A NULL pointer may be used here if the - * text length is not needed, as would be the case if - * the text is known in advance to be a NUL terminated - * string. - * @param status Receives errors detected by this function. - * @return Pointer to the subject text string currently associated with - * this regular expression. - * @stable ICU 3.0 - */ -U_STABLE const UChar * U_EXPORT2 -uregex_getText(URegularExpression *regexp, - int32_t *textLength, - UErrorCode *status); - -/** - * Get the subject text that is currently associated with this - * regular expression object. - * - * This function will work even if the input was originally specified as a UChar string. - * - * @param regexp The compiled regular expression. - * @param dest A mutable UText in which to store the current input. - * If NULL, a new UText will be created as an immutable shallow clone - * of the actual input string. - * @param status Receives errors detected by this function. - * @return The subject text currently associated with this regular expression. - * If a pre-allocated UText was provided, it will always be used and returned. - * - * @stable ICU 4.6 - */ -U_STABLE UText * U_EXPORT2 -uregex_getUText(URegularExpression *regexp, - UText *dest, - UErrorCode *status); - -/** - * Set the subject text string upon which the regular expression is looking for matches - * without changing any other aspect of the matching state. - * The new and previous text strings must have the same content. - * - * This function is intended for use in environments where ICU is operating on - * strings that may move around in memory. It provides a mechanism for notifying - * ICU that the string has been relocated, and providing a new UText to access the - * string in its new position. - * - * Note that the regular expression implementation never copies the underlying text - * of a string being matched, but always operates directly on the original text - * provided by the user. Refreshing simply drops the references to the old text - * and replaces them with references to the new. - * - * Caution: this function is normally used only by very specialized - * system-level code. One example use case is with garbage collection - * that moves the text in memory. - * - * @param regexp The compiled regular expression. - * @param text The new (moved) text string. - * @param status Receives errors detected by this function. - * - * @stable ICU 4.8 - */ -U_STABLE void U_EXPORT2 -uregex_refreshUText(URegularExpression *regexp, - UText *text, - UErrorCode *status); - -/** - * Attempts to match the input string against the pattern. - * To succeed, the match must extend to the end of the string, - * or cover the complete match region. - * - * If startIndex >= zero the match operation starts at the specified - * index and must extend to the end of the input string. Any region - * that has been specified is reset. - * - * If startIndex == -1 the match must cover the input region, or the entire - * input string if no region has been set. This directly corresponds to - * Matcher.matches() in Java - * - * @param regexp The compiled regular expression. - * @param startIndex The input string (native) index at which to begin matching, or -1 - * to match the input Region. - * @param status Receives errors detected by this function. - * @return TRUE if there is a match - * @stable ICU 3.0 - */ -U_STABLE UBool U_EXPORT2 -uregex_matches(URegularExpression *regexp, - int32_t startIndex, - UErrorCode *status); - -/** - * 64bit version of uregex_matches. - * Attempts to match the input string against the pattern. - * To succeed, the match must extend to the end of the string, - * or cover the complete match region. - * - * If startIndex >= zero the match operation starts at the specified - * index and must extend to the end of the input string. Any region - * that has been specified is reset. - * - * If startIndex == -1 the match must cover the input region, or the entire - * input string if no region has been set. This directly corresponds to - * Matcher.matches() in Java - * - * @param regexp The compiled regular expression. - * @param startIndex The input string (native) index at which to begin matching, or -1 - * to match the input Region. - * @param status Receives errors detected by this function. - * @return TRUE if there is a match - * @stable ICU 4.6 - */ -U_STABLE UBool U_EXPORT2 -uregex_matches64(URegularExpression *regexp, - int64_t startIndex, - UErrorCode *status); - -/** - * Attempts to match the input string, starting from the specified index, against the pattern. - * The match may be of any length, and is not required to extend to the end - * of the input string. Contrast with uregex_matches(). - * - *

If startIndex is >= 0 any input region that was set for this - * URegularExpression is reset before the operation begins. - * - *

If the specified starting index == -1 the match begins at the start of the input - * region, or at the start of the full string if no region has been specified. - * This corresponds directly with Matcher.lookingAt() in Java. - * - *

If the match succeeds then more information can be obtained via the - * uregexp_start(), uregexp_end(), - * and uregex_group() functions.

- * - * @param regexp The compiled regular expression. - * @param startIndex The input string (native) index at which to begin matching, or - * -1 to match the Input Region - * @param status A reference to a UErrorCode to receive any errors. - * @return TRUE if there is a match. - * @stable ICU 3.0 - */ -U_STABLE UBool U_EXPORT2 -uregex_lookingAt(URegularExpression *regexp, - int32_t startIndex, - UErrorCode *status); - -/** - * 64bit version of uregex_lookingAt. - * Attempts to match the input string, starting from the specified index, against the pattern. - * The match may be of any length, and is not required to extend to the end - * of the input string. Contrast with uregex_matches(). - * - *

If startIndex is >= 0 any input region that was set for this - * URegularExpression is reset before the operation begins. - * - *

If the specified starting index == -1 the match begins at the start of the input - * region, or at the start of the full string if no region has been specified. - * This corresponds directly with Matcher.lookingAt() in Java. - * - *

If the match succeeds then more information can be obtained via the - * uregexp_start(), uregexp_end(), - * and uregex_group() functions.

- * - * @param regexp The compiled regular expression. - * @param startIndex The input string (native) index at which to begin matching, or - * -1 to match the Input Region - * @param status A reference to a UErrorCode to receive any errors. - * @return TRUE if there is a match. - * @stable ICU 4.6 - */ -U_STABLE UBool U_EXPORT2 -uregex_lookingAt64(URegularExpression *regexp, - int64_t startIndex, - UErrorCode *status); - -/** - * Find the first matching substring of the input string that matches the pattern. - * If startIndex is >= zero the search for a match begins at the specified index, - * and any match region is reset. This corresponds directly with - * Matcher.find(startIndex) in Java. - * - * If startIndex == -1 the search begins at the start of the input region, - * or at the start of the full string if no region has been specified. - * - * If a match is found, uregex_start(), uregex_end(), and - * uregex_group() will provide more information regarding the match. - * - * @param regexp The compiled regular expression. - * @param startIndex The position (native) in the input string to begin the search, or - * -1 to search within the Input Region. - * @param status A reference to a UErrorCode to receive any errors. - * @return TRUE if a match is found. - * @stable ICU 3.0 - */ -U_STABLE UBool U_EXPORT2 -uregex_find(URegularExpression *regexp, - int32_t startIndex, - UErrorCode *status); - -/** - * 64bit version of uregex_find. - * Find the first matching substring of the input string that matches the pattern. - * If startIndex is >= zero the search for a match begins at the specified index, - * and any match region is reset. This corresponds directly with - * Matcher.find(startIndex) in Java. - * - * If startIndex == -1 the search begins at the start of the input region, - * or at the start of the full string if no region has been specified. - * - * If a match is found, uregex_start(), uregex_end(), and - * uregex_group() will provide more information regarding the match. - * - * @param regexp The compiled regular expression. - * @param startIndex The position (native) in the input string to begin the search, or - * -1 to search within the Input Region. - * @param status A reference to a UErrorCode to receive any errors. - * @return TRUE if a match is found. - * @stable ICU 4.6 - */ -U_STABLE UBool U_EXPORT2 -uregex_find64(URegularExpression *regexp, - int64_t startIndex, - UErrorCode *status); - -/** - * Find the next pattern match in the input string. Begin searching - * the input at the location following the end of he previous match, - * or at the start of the string (or region) if there is no - * previous match. If a match is found, uregex_start(), uregex_end(), and - * uregex_group() will provide more information regarding the match. - * - * @param regexp The compiled regular expression. - * @param status A reference to a UErrorCode to receive any errors. - * @return TRUE if a match is found. - * @see uregex_reset - * @stable ICU 3.0 - */ -U_STABLE UBool U_EXPORT2 -uregex_findNext(URegularExpression *regexp, - UErrorCode *status); - -/** - * Get the number of capturing groups in this regular expression's pattern. - * @param regexp The compiled regular expression. - * @param status A reference to a UErrorCode to receive any errors. - * @return the number of capture groups - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -uregex_groupCount(URegularExpression *regexp, - UErrorCode *status); - -/** - * Get the group number corresponding to a named capture group. - * The returned number can be used with any function that access - * capture groups by number. - * - * The function returns an error status if the specified name does not - * appear in the pattern. - * - * @param regexp The compiled regular expression. - * @param groupName The capture group name. - * @param nameLength The length of the name, or -1 if the name is a - * nul-terminated string. - * @param status A pointer to a UErrorCode to receive any errors. - * - * @stable ICU 55 - */ -U_STABLE int32_t U_EXPORT2 -uregex_groupNumberFromName(URegularExpression *regexp, - const UChar *groupName, - int32_t nameLength, - UErrorCode *status); - - -/** - * Get the group number corresponding to a named capture group. - * The returned number can be used with any function that access - * capture groups by number. - * - * The function returns an error status if the specified name does not - * appear in the pattern. - * - * @param regexp The compiled regular expression. - * @param groupName The capture group name, - * platform invariant characters only. - * @param nameLength The length of the name, or -1 if the name is - * nul-terminated. - * @param status A pointer to a UErrorCode to receive any errors. - * - * @stable ICU 55 - */ -U_STABLE int32_t U_EXPORT2 -uregex_groupNumberFromCName(URegularExpression *regexp, - const char *groupName, - int32_t nameLength, - UErrorCode *status); - -/** Extract the string for the specified matching expression or subexpression. - * Group #0 is the complete string of matched text. - * Group #1 is the text matched by the first set of capturing parentheses. - * - * @param regexp The compiled regular expression. - * @param groupNum The capture group to extract. Group 0 is the complete - * match. The value of this parameter must be - * less than or equal to the number of capture groups in - * the pattern. - * @param dest Buffer to receive the matching string data - * @param destCapacity Capacity of the dest buffer. - * @param status A reference to a UErrorCode to receive any errors. - * @return Length of matching data, - * or -1 if no applicable match. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -uregex_group(URegularExpression *regexp, - int32_t groupNum, - UChar *dest, - int32_t destCapacity, - UErrorCode *status); - -/** Returns a shallow immutable clone of the entire input string with the current index set - * to the beginning of the requested capture group. The capture group length is also - * returned via groupLength. - * Group #0 is the complete string of matched text. - * Group #1 is the text matched by the first set of capturing parentheses. - * - * @param regexp The compiled regular expression. - * @param groupNum The capture group to extract. Group 0 is the complete - * match. The value of this parameter must be - * less than or equal to the number of capture groups in - * the pattern. - * @param dest A mutable UText in which to store the current input. - * If NULL, a new UText will be created as an immutable shallow clone - * of the entire input string. - * @param groupLength The group length of the desired capture group. Output parameter. - * @param status A reference to a UErrorCode to receive any errors. - * @return The subject text currently associated with this regular expression. - * If a pre-allocated UText was provided, it will always be used and returned. - - * - * @stable ICU 4.6 - */ -U_STABLE UText * U_EXPORT2 -uregex_groupUText(URegularExpression *regexp, - int32_t groupNum, - UText *dest, - int64_t *groupLength, - UErrorCode *status); - -/** - * Returns the index in the input string of the start of the text matched by the - * specified capture group during the previous match operation. Return -1 if - * the capture group was not part of the last match. - * Group #0 refers to the complete range of matched text. - * Group #1 refers to the text matched by the first set of capturing parentheses. - * - * @param regexp The compiled regular expression. - * @param groupNum The capture group number - * @param status A reference to a UErrorCode to receive any errors. - * @return the starting (native) position in the input of the text matched - * by the specified group. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -uregex_start(URegularExpression *regexp, - int32_t groupNum, - UErrorCode *status); - -/** - * 64bit version of uregex_start. - * Returns the index in the input string of the start of the text matched by the - * specified capture group during the previous match operation. Return -1 if - * the capture group was not part of the last match. - * Group #0 refers to the complete range of matched text. - * Group #1 refers to the text matched by the first set of capturing parentheses. - * - * @param regexp The compiled regular expression. - * @param groupNum The capture group number - * @param status A reference to a UErrorCode to receive any errors. - * @return the starting (native) position in the input of the text matched - * by the specified group. - * @stable ICU 4.6 - */ -U_STABLE int64_t U_EXPORT2 -uregex_start64(URegularExpression *regexp, - int32_t groupNum, - UErrorCode *status); - -/** - * Returns the index in the input string of the position following the end - * of the text matched by the specified capture group. - * Return -1 if the capture group was not part of the last match. - * Group #0 refers to the complete range of matched text. - * Group #1 refers to the text matched by the first set of capturing parentheses. - * - * @param regexp The compiled regular expression. - * @param groupNum The capture group number - * @param status A reference to a UErrorCode to receive any errors. - * @return the (native) index of the position following the last matched character. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -uregex_end(URegularExpression *regexp, - int32_t groupNum, - UErrorCode *status); - -/** - * 64bit version of uregex_end. - * Returns the index in the input string of the position following the end - * of the text matched by the specified capture group. - * Return -1 if the capture group was not part of the last match. - * Group #0 refers to the complete range of matched text. - * Group #1 refers to the text matched by the first set of capturing parentheses. - * - * @param regexp The compiled regular expression. - * @param groupNum The capture group number - * @param status A reference to a UErrorCode to receive any errors. - * @return the (native) index of the position following the last matched character. - * @stable ICU 4.6 - */ -U_STABLE int64_t U_EXPORT2 -uregex_end64(URegularExpression *regexp, - int32_t groupNum, - UErrorCode *status); - -/** - * Reset any saved state from the previous match. Has the effect of - * causing uregex_findNext to begin at the specified index, and causing - * uregex_start(), uregex_end() and uregex_group() to return an error - * indicating that there is no match information available. Clears any - * match region that may have been set. - * - * @param regexp The compiled regular expression. - * @param index The position (native) in the text at which a - * uregex_findNext() should begin searching. - * @param status A reference to a UErrorCode to receive any errors. - * @stable ICU 3.0 - */ -U_STABLE void U_EXPORT2 -uregex_reset(URegularExpression *regexp, - int32_t index, - UErrorCode *status); - -/** - * 64bit version of uregex_reset. - * Reset any saved state from the previous match. Has the effect of - * causing uregex_findNext to begin at the specified index, and causing - * uregex_start(), uregex_end() and uregex_group() to return an error - * indicating that there is no match information available. Clears any - * match region that may have been set. - * - * @param regexp The compiled regular expression. - * @param index The position (native) in the text at which a - * uregex_findNext() should begin searching. - * @param status A reference to a UErrorCode to receive any errors. - * @stable ICU 4.6 - */ -U_STABLE void U_EXPORT2 -uregex_reset64(URegularExpression *regexp, - int64_t index, - UErrorCode *status); - -/** - * Sets the limits of the matching region for this URegularExpression. - * The region is the part of the input string that will be considered when matching. - * Invoking this method resets any saved state from the previous match, - * then sets the region to start at the index specified by the start parameter - * and end at the index specified by the end parameter. - * - * Depending on the transparency and anchoring being used (see useTransparentBounds - * and useAnchoringBounds), certain constructs such as anchors may behave differently - * at or around the boundaries of the region - * - * The function will fail if start is greater than limit, or if either index - * is less than zero or greater than the length of the string being matched. - * - * @param regexp The compiled regular expression. - * @param regionStart The (native) index to begin searches at. - * @param regionLimit The (native) index to end searches at (exclusive). - * @param status A pointer to a UErrorCode to receive any errors. - * @stable ICU 4.0 - */ -U_STABLE void U_EXPORT2 -uregex_setRegion(URegularExpression *regexp, - int32_t regionStart, - int32_t regionLimit, - UErrorCode *status); - -/** - * 64bit version of uregex_setRegion. - * Sets the limits of the matching region for this URegularExpression. - * The region is the part of the input string that will be considered when matching. - * Invoking this method resets any saved state from the previous match, - * then sets the region to start at the index specified by the start parameter - * and end at the index specified by the end parameter. - * - * Depending on the transparency and anchoring being used (see useTransparentBounds - * and useAnchoringBounds), certain constructs such as anchors may behave differently - * at or around the boundaries of the region - * - * The function will fail if start is greater than limit, or if either index - * is less than zero or greater than the length of the string being matched. - * - * @param regexp The compiled regular expression. - * @param regionStart The (native) index to begin searches at. - * @param regionLimit The (native) index to end searches at (exclusive). - * @param status A pointer to a UErrorCode to receive any errors. - * @stable ICU 4.6 - */ -U_STABLE void U_EXPORT2 -uregex_setRegion64(URegularExpression *regexp, - int64_t regionStart, - int64_t regionLimit, - UErrorCode *status); - -/** - * Set the matching region and the starting index for subsequent matches - * in a single operation. - * This is useful because the usual function for setting the starting - * index, urgex_reset(), also resets any region limits. - * - * @param regexp The compiled regular expression. - * @param regionStart The (native) index to begin searches at. - * @param regionLimit The (native) index to end searches at (exclusive). - * @param startIndex The index in the input text at which the next - * match operation should begin. - * @param status A pointer to a UErrorCode to receive any errors. - * @stable ICU 4.6 - */ -U_STABLE void U_EXPORT2 -uregex_setRegionAndStart(URegularExpression *regexp, - int64_t regionStart, - int64_t regionLimit, - int64_t startIndex, - UErrorCode *status); - -/** - * Reports the start index of the matching region. Any matches found are limited to - * to the region bounded by regionStart (inclusive) and regionEnd (exclusive). - * - * @param regexp The compiled regular expression. - * @param status A pointer to a UErrorCode to receive any errors. - * @return The starting (native) index of this matcher's region. - * @stable ICU 4.0 - */ -U_STABLE int32_t U_EXPORT2 -uregex_regionStart(const URegularExpression *regexp, - UErrorCode *status); - -/** - * 64bit version of uregex_regionStart. - * Reports the start index of the matching region. Any matches found are limited to - * to the region bounded by regionStart (inclusive) and regionEnd (exclusive). - * - * @param regexp The compiled regular expression. - * @param status A pointer to a UErrorCode to receive any errors. - * @return The starting (native) index of this matcher's region. - * @stable ICU 4.6 - */ -U_STABLE int64_t U_EXPORT2 -uregex_regionStart64(const URegularExpression *regexp, - UErrorCode *status); - -/** - * Reports the end index (exclusive) of the matching region for this URegularExpression. - * Any matches found are limited to to the region bounded by regionStart (inclusive) - * and regionEnd (exclusive). - * - * @param regexp The compiled regular expression. - * @param status A pointer to a UErrorCode to receive any errors. - * @return The ending point (native) of this matcher's region. - * @stable ICU 4.0 - */ -U_STABLE int32_t U_EXPORT2 -uregex_regionEnd(const URegularExpression *regexp, - UErrorCode *status); - -/** - * 64bit version of uregex_regionEnd. - * Reports the end index (exclusive) of the matching region for this URegularExpression. - * Any matches found are limited to to the region bounded by regionStart (inclusive) - * and regionEnd (exclusive). - * - * @param regexp The compiled regular expression. - * @param status A pointer to a UErrorCode to receive any errors. - * @return The ending point (native) of this matcher's region. - * @stable ICU 4.6 - */ -U_STABLE int64_t U_EXPORT2 -uregex_regionEnd64(const URegularExpression *regexp, - UErrorCode *status); - -/** - * Queries the transparency of region bounds for this URegularExpression. - * See useTransparentBounds for a description of transparent and opaque bounds. - * By default, matching boundaries are opaque. - * - * @param regexp The compiled regular expression. - * @param status A pointer to a UErrorCode to receive any errors. - * @return TRUE if this matcher is using opaque bounds, false if it is not. - * @stable ICU 4.0 - */ -U_STABLE UBool U_EXPORT2 -uregex_hasTransparentBounds(const URegularExpression *regexp, - UErrorCode *status); - - -/** - * Sets the transparency of region bounds for this URegularExpression. - * Invoking this function with an argument of TRUE will set matches to use transparent bounds. - * If the boolean argument is FALSE, then opaque bounds will be used. - * - * Using transparent bounds, the boundaries of the matching region are transparent - * to lookahead, lookbehind, and boundary matching constructs. Those constructs can - * see text beyond the boundaries of the region while checking for a match. - * - * With opaque bounds, no text outside of the matching region is visible to lookahead, - * lookbehind, and boundary matching constructs. - * - * By default, opaque bounds are used. - * - * @param regexp The compiled regular expression. - * @param b TRUE for transparent bounds; FALSE for opaque bounds - * @param status A pointer to a UErrorCode to receive any errors. - * @stable ICU 4.0 - **/ -U_STABLE void U_EXPORT2 -uregex_useTransparentBounds(URegularExpression *regexp, - UBool b, - UErrorCode *status); - - -/** - * Return true if this URegularExpression is using anchoring bounds. - * By default, anchoring region bounds are used. - * - * @param regexp The compiled regular expression. - * @param status A pointer to a UErrorCode to receive any errors. - * @return TRUE if this matcher is using anchoring bounds. - * @stable ICU 4.0 - */ -U_STABLE UBool U_EXPORT2 -uregex_hasAnchoringBounds(const URegularExpression *regexp, - UErrorCode *status); - - -/** - * Set whether this URegularExpression is using Anchoring Bounds for its region. - * With anchoring bounds, pattern anchors such as ^ and $ will match at the start - * and end of the region. Without Anchoring Bounds, anchors will only match at - * the positions they would in the complete text. - * - * Anchoring Bounds are the default for regions. - * - * @param regexp The compiled regular expression. - * @param b TRUE if to enable anchoring bounds; FALSE to disable them. - * @param status A pointer to a UErrorCode to receive any errors. - * @stable ICU 4.0 - */ -U_STABLE void U_EXPORT2 -uregex_useAnchoringBounds(URegularExpression *regexp, - UBool b, - UErrorCode *status); - -/** - * Return TRUE if the most recent matching operation touched the - * end of the text being processed. In this case, additional input text could - * change the results of that match. - * - * @param regexp The compiled regular expression. - * @param status A pointer to a UErrorCode to receive any errors. - * @return TRUE if the most recent match hit the end of input - * @stable ICU 4.0 - */ -U_STABLE UBool U_EXPORT2 -uregex_hitEnd(const URegularExpression *regexp, - UErrorCode *status); - -/** - * Return TRUE the most recent match succeeded and additional input could cause - * it to fail. If this function returns false and a match was found, then more input - * might change the match but the match won't be lost. If a match was not found, - * then requireEnd has no meaning. - * - * @param regexp The compiled regular expression. - * @param status A pointer to a UErrorCode to receive any errors. - * @return TRUE if more input could cause the most recent match to no longer match. - * @stable ICU 4.0 - */ -U_STABLE UBool U_EXPORT2 -uregex_requireEnd(const URegularExpression *regexp, - UErrorCode *status); - - - - - -/** - * Replaces every substring of the input that matches the pattern - * with the given replacement string. This is a convenience function that - * provides a complete find-and-replace-all operation. - * - * This method scans the input string looking for matches of the pattern. - * Input that is not part of any match is copied unchanged to the - * destination buffer. Matched regions are replaced in the output - * buffer by the replacement string. The replacement string may contain - * references to capture groups; these take the form of $1, $2, etc. - * - * @param regexp The compiled regular expression. - * @param replacementText A string containing the replacement text. - * @param replacementLength The length of the replacement string, or - * -1 if it is NUL terminated. - * @param destBuf A (UChar *) buffer that will receive the result. - * @param destCapacity The capacity of the destination buffer. - * @param status A reference to a UErrorCode to receive any errors. - * @return The length of the string resulting from the find - * and replace operation. In the event that the - * destination capacity is inadequate, the return value - * is still the full length of the untruncated string. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -uregex_replaceAll(URegularExpression *regexp, - const UChar *replacementText, - int32_t replacementLength, - UChar *destBuf, - int32_t destCapacity, - UErrorCode *status); - -/** - * Replaces every substring of the input that matches the pattern - * with the given replacement string. This is a convenience function that - * provides a complete find-and-replace-all operation. - * - * This method scans the input string looking for matches of the pattern. - * Input that is not part of any match is copied unchanged to the - * destination buffer. Matched regions are replaced in the output - * buffer by the replacement string. The replacement string may contain - * references to capture groups; these take the form of $1, $2, etc. - * - * @param regexp The compiled regular expression. - * @param replacement A string containing the replacement text. - * @param dest A mutable UText that will receive the result. - * If NULL, a new UText will be created (which may not be mutable). - * @param status A reference to a UErrorCode to receive any errors. - * @return A UText containing the results of the find and replace. - * If a pre-allocated UText was provided, it will always be used and returned. - * - * @stable ICU 4.6 - */ -U_STABLE UText * U_EXPORT2 -uregex_replaceAllUText(URegularExpression *regexp, - UText *replacement, - UText *dest, - UErrorCode *status); - -/** - * Replaces the first substring of the input that matches the pattern - * with the given replacement string. This is a convenience function that - * provides a complete find-and-replace operation. - * - * This method scans the input string looking for a match of the pattern. - * All input that is not part of the match is copied unchanged to the - * destination buffer. The matched region is replaced in the output - * buffer by the replacement string. The replacement string may contain - * references to capture groups; these take the form of $1, $2, etc. - * - * @param regexp The compiled regular expression. - * @param replacementText A string containing the replacement text. - * @param replacementLength The length of the replacement string, or - * -1 if it is NUL terminated. - * @param destBuf A (UChar *) buffer that will receive the result. - * @param destCapacity The capacity of the destination buffer. - * @param status a reference to a UErrorCode to receive any errors. - * @return The length of the string resulting from the find - * and replace operation. In the event that the - * destination capacity is inadequate, the return value - * is still the full length of the untruncated string. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -uregex_replaceFirst(URegularExpression *regexp, - const UChar *replacementText, - int32_t replacementLength, - UChar *destBuf, - int32_t destCapacity, - UErrorCode *status); - -/** - * Replaces the first substring of the input that matches the pattern - * with the given replacement string. This is a convenience function that - * provides a complete find-and-replace operation. - * - * This method scans the input string looking for a match of the pattern. - * All input that is not part of the match is copied unchanged to the - * destination buffer. The matched region is replaced in the output - * buffer by the replacement string. The replacement string may contain - * references to capture groups; these take the form of $1, $2, etc. - * - * @param regexp The compiled regular expression. - * @param replacement A string containing the replacement text. - * @param dest A mutable UText that will receive the result. - * If NULL, a new UText will be created (which may not be mutable). - * @param status A reference to a UErrorCode to receive any errors. - * @return A UText containing the results of the find and replace. - * If a pre-allocated UText was provided, it will always be used and returned. - * - * @stable ICU 4.6 - */ -U_STABLE UText * U_EXPORT2 -uregex_replaceFirstUText(URegularExpression *regexp, - UText *replacement, - UText *dest, - UErrorCode *status); - -/** - * Implements a replace operation intended to be used as part of an - * incremental find-and-replace. - * - *

The input string, starting from the end of the previous match and ending at - * the start of the current match, is appended to the destination string. Then the - * replacement string is appended to the output string, - * including handling any substitutions of captured text.

- * - *

A note on preflight computation of buffersize and error handling: - * Calls to uregex_appendReplacement() and uregex_appendTail() are - * designed to be chained, one after another, with the destination - * buffer pointer and buffer capacity updated after each in preparation - * to for the next. If the destination buffer is exhausted partway through such a - * sequence, a U_BUFFER_OVERFLOW_ERROR status will be returned. Normal - * ICU conventions are for a function to perform no action if it is - * called with an error status, but for this one case, uregex_appendRepacement() - * will operate normally so that buffer size computations will complete - * correctly. - * - *

For simple, prepackaged, non-incremental find-and-replace - * operations, see replaceFirst() or replaceAll().

- * - * @param regexp The regular expression object. - * @param replacementText The string that will replace the matched portion of the - * input string as it is copied to the destination buffer. - * The replacement text may contain references ($1, for - * example) to capture groups from the match. - * @param replacementLength The length of the replacement text string, - * or -1 if the string is NUL terminated. - * @param destBuf The buffer into which the results of the - * find-and-replace are placed. On return, this pointer - * will be updated to refer to the beginning of the - * unused portion of buffer, leaving it in position for - * a subsequent call to this function. - * @param destCapacity The size of the output buffer, On return, this - * parameter will be updated to reflect the space remaining - * unused in the output buffer. - * @param status A reference to a UErrorCode to receive any errors. - * @return The length of the result string. In the event that - * destCapacity is inadequate, the full length of the - * untruncated output string is returned. - * - * @stable ICU 3.0 - * - */ -U_STABLE int32_t U_EXPORT2 -uregex_appendReplacement(URegularExpression *regexp, - const UChar *replacementText, - int32_t replacementLength, - UChar **destBuf, - int32_t *destCapacity, - UErrorCode *status); - -/** - * Implements a replace operation intended to be used as part of an - * incremental find-and-replace. - * - *

The input string, starting from the end of the previous match and ending at - * the start of the current match, is appended to the destination string. Then the - * replacement string is appended to the output string, - * including handling any substitutions of captured text.

- * - *

For simple, prepackaged, non-incremental find-and-replace - * operations, see replaceFirst() or replaceAll().

- * - * @param regexp The regular expression object. - * @param replacementText The string that will replace the matched portion of the - * input string as it is copied to the destination buffer. - * The replacement text may contain references ($1, for - * example) to capture groups from the match. - * @param dest A mutable UText that will receive the result. Must not be NULL. - * @param status A reference to a UErrorCode to receive any errors. - * - * @stable ICU 4.6 - */ -U_STABLE void U_EXPORT2 -uregex_appendReplacementUText(URegularExpression *regexp, - UText *replacementText, - UText *dest, - UErrorCode *status); - -/** - * As the final step in a find-and-replace operation, append the remainder - * of the input string, starting at the position following the last match, - * to the destination string. uregex_appendTail() is intended - * to be invoked after one or more invocations of the - * uregex_appendReplacement() function. - * - * @param regexp The regular expression object. This is needed to - * obtain the input string and with the position - * of the last match within it. - * @param destBuf The buffer in which the results of the - * find-and-replace are placed. On return, the pointer - * will be updated to refer to the beginning of the - * unused portion of buffer. - * @param destCapacity The size of the output buffer, On return, this - * value will be updated to reflect the space remaining - * unused in the output buffer. - * @param status A reference to a UErrorCode to receive any errors. - * @return The length of the result string. In the event that - * destCapacity is inadequate, the full length of the - * untruncated output string is returned. - * - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -uregex_appendTail(URegularExpression *regexp, - UChar **destBuf, - int32_t *destCapacity, - UErrorCode *status); - -/** - * As the final step in a find-and-replace operation, append the remainder - * of the input string, starting at the position following the last match, - * to the destination string. uregex_appendTailUText() is intended - * to be invoked after one or more invocations of the - * uregex_appendReplacementUText() function. - * - * @param regexp The regular expression object. This is needed to - * obtain the input string and with the position - * of the last match within it. - * @param dest A mutable UText that will receive the result. Must not be NULL. - * - * @param status Error code - * - * @return The destination UText. - * - * @stable ICU 4.6 - */ -U_STABLE UText * U_EXPORT2 -uregex_appendTailUText(URegularExpression *regexp, - UText *dest, - UErrorCode *status); - - /** - * Split a string into fields. Somewhat like split() from Perl. - * The pattern matches identify delimiters that separate the input - * into fields. The input data between the matches becomes the - * fields themselves. - * - * Each of the fields is copied from the input string to the destination - * buffer, and NUL terminated. The position of each field within - * the destination buffer is returned in the destFields array. - * - * If the delimiter pattern includes capture groups, the captured text will - * also appear in the destination array of output strings, interspersed - * with the fields. This is similar to Perl, but differs from Java, - * which ignores the presence of capture groups in the pattern. - * - * Trailing empty fields will always be returned, assuming sufficient - * destination capacity. This differs from the default behavior for Java - * and Perl where trailing empty fields are not returned. - * - * The number of strings produced by the split operation is returned. - * This count includes the strings from capture groups in the delimiter pattern. - * This behavior differs from Java, which ignores capture groups. - * - * @param regexp The compiled regular expression. - * @param destBuf A (UChar *) buffer to receive the fields that - * are extracted from the input string. These - * field pointers will refer to positions within the - * destination buffer supplied by the caller. Any - * extra positions within the destFields array will be - * set to NULL. - * @param destCapacity The capacity of the destBuf. - * @param requiredCapacity The actual capacity required of the destBuf. - * If destCapacity is too small, requiredCapacity will return - * the total capacity required to hold all of the output, and - * a U_BUFFER_OVERFLOW_ERROR will be returned. - * @param destFields An array to be filled with the position of each - * of the extracted fields within destBuf. - * @param destFieldsCapacity The number of elements in the destFields array. - * If the number of fields found is less than destFieldsCapacity, - * the extra destFields elements are set to zero. - * If destFieldsCapacity is too small, the trailing part of the - * input, including any field delimiters, is treated as if it - * were the last field - it is copied to the destBuf, and - * its position is in the destBuf is stored in the last element - * of destFields. This behavior mimics that of Perl. It is not - * an error condition, and no error status is returned when all destField - * positions are used. - * @param status A reference to a UErrorCode to receive any errors. - * @return The number of fields into which the input string was split. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -uregex_split( URegularExpression *regexp, - UChar *destBuf, - int32_t destCapacity, - int32_t *requiredCapacity, - UChar *destFields[], - int32_t destFieldsCapacity, - UErrorCode *status); - - /** - * Split a string into fields. Somewhat like split() from Perl. - * The pattern matches identify delimiters that separate the input - * into fields. The input data between the matches becomes the - * fields themselves. - *

- * The behavior of this function is not very closely aligned with uregex_split(); - * instead, it is based on (and implemented directly on top of) the C++ split method. - * - * @param regexp The compiled regular expression. - * @param destFields An array of mutable UText structs to receive the results of the split. - * If a field is NULL, a new UText is allocated to contain the results for - * that field. This new UText is not guaranteed to be mutable. - * @param destFieldsCapacity The number of elements in the destination array. - * If the number of fields found is less than destCapacity, the - * extra strings in the destination array are not altered. - * If the number of destination strings is less than the number - * of fields, the trailing part of the input string, including any - * field delimiters, is placed in the last destination string. - * This behavior mimics that of Perl. It is not an error condition, and no - * error status is returned when all destField positions are used. - * @param status A reference to a UErrorCode to receive any errors. - * @return The number of fields into which the input string was split. - * - * @stable ICU 4.6 - */ -U_STABLE int32_t U_EXPORT2 -uregex_splitUText(URegularExpression *regexp, - UText *destFields[], - int32_t destFieldsCapacity, - UErrorCode *status); - -/** - * Set a processing time limit for match operations with this URegularExpression. - * - * Some patterns, when matching certain strings, can run in exponential time. - * For practical purposes, the match operation may appear to be in an - * infinite loop. - * When a limit is set a match operation will fail with an error if the - * limit is exceeded. - *

- * The units of the limit are steps of the match engine. - * Correspondence with actual processor time will depend on the speed - * of the processor and the details of the specific pattern, but will - * typically be on the order of milliseconds. - *

- * By default, the matching time is not limited. - *

- * - * @param regexp The compiled regular expression. - * @param limit The limit value, or 0 for no limit. - * @param status A reference to a UErrorCode to receive any errors. - * @stable ICU 4.0 - */ -U_STABLE void U_EXPORT2 -uregex_setTimeLimit(URegularExpression *regexp, - int32_t limit, - UErrorCode *status); - -/** - * Get the time limit for for matches with this URegularExpression. - * A return value of zero indicates that there is no limit. - * - * @param regexp The compiled regular expression. - * @param status A reference to a UErrorCode to receive any errors. - * @return the maximum allowed time for a match, in units of processing steps. - * @stable ICU 4.0 - */ -U_STABLE int32_t U_EXPORT2 -uregex_getTimeLimit(const URegularExpression *regexp, - UErrorCode *status); - -/** - * Set the amount of heap storage available for use by the match backtracking stack. - *

- * ICU uses a backtracking regular expression engine, with the backtrack stack - * maintained on the heap. This function sets the limit to the amount of memory - * that can be used for this purpose. A backtracking stack overflow will - * result in an error from the match operation that caused it. - *

- * A limit is desirable because a malicious or poorly designed pattern can use - * excessive memory, potentially crashing the process. A limit is enabled - * by default. - *

- * @param regexp The compiled regular expression. - * @param limit The maximum size, in bytes, of the matching backtrack stack. - * A value of zero means no limit. - * The limit must be greater than or equal to zero. - * @param status A reference to a UErrorCode to receive any errors. - * - * @stable ICU 4.0 - */ -U_STABLE void U_EXPORT2 -uregex_setStackLimit(URegularExpression *regexp, - int32_t limit, - UErrorCode *status); - -/** - * Get the size of the heap storage available for use by the back tracking stack. - * - * @return the maximum backtracking stack size, in bytes, or zero if the - * stack size is unlimited. - * @stable ICU 4.0 - */ -U_STABLE int32_t U_EXPORT2 -uregex_getStackLimit(const URegularExpression *regexp, - UErrorCode *status); - - -/** - * Function pointer for a regular expression matching callback function. - * When set, a callback function will be called periodically during matching - * operations. If the call back function returns FALSE, the matching - * operation will be terminated early. - * - * Note: the callback function must not call other functions on this - * URegularExpression. - * - * @param context context pointer. The callback function will be invoked - * with the context specified at the time that - * uregex_setMatchCallback() is called. - * @param steps the accumulated processing time, in match steps, - * for this matching operation. - * @return TRUE to continue the matching operation. - * FALSE to terminate the matching operation. - * @stable ICU 4.0 - */ -U_CDECL_BEGIN -typedef UBool U_CALLCONV URegexMatchCallback ( - const void *context, - int32_t steps); -U_CDECL_END - -/** - * Set a callback function for this URegularExpression. - * During matching operations the function will be called periodically, - * giving the application the opportunity to terminate a long-running - * match. - * - * @param regexp The compiled regular expression. - * @param callback A pointer to the user-supplied callback function. - * @param context User context pointer. The value supplied at the - * time the callback function is set will be saved - * and passed to the callback each time that it is called. - * @param status A reference to a UErrorCode to receive any errors. - * @stable ICU 4.0 - */ -U_STABLE void U_EXPORT2 -uregex_setMatchCallback(URegularExpression *regexp, - URegexMatchCallback *callback, - const void *context, - UErrorCode *status); - - -/** - * Get the callback function for this URegularExpression. - * - * @param regexp The compiled regular expression. - * @param callback Out parameter, receives a pointer to the user-supplied - * callback function. - * @param context Out parameter, receives the user context pointer that - * was set when uregex_setMatchCallback() was called. - * @param status A reference to a UErrorCode to receive any errors. - * @stable ICU 4.0 - */ -U_STABLE void U_EXPORT2 -uregex_getMatchCallback(const URegularExpression *regexp, - URegexMatchCallback **callback, - const void **context, - UErrorCode *status); - -/** - * Function pointer for a regular expression find callback function. - * - * When set, a callback function will be called during a find operation - * and for operations that depend on find, such as findNext, split and some replace - * operations like replaceFirst. - * The callback will usually be called after each attempt at a match, but this is not a - * guarantee that the callback will be invoked at each character. For finds where the - * match engine is invoked at each character, this may be close to true, but less likely - * for more optimized loops where the pattern is known to only start, and the match - * engine invoked, at certain characters. - * When invoked, this callback will specify the index at which a match operation is about - * to be attempted, giving the application the opportunity to terminate a long-running - * find operation. - * - * If the call back function returns FALSE, the find operation will be terminated early. - * - * Note: the callback function must not call other functions on this - * URegularExpression - * - * @param context context pointer. The callback function will be invoked - * with the context specified at the time that - * uregex_setFindProgressCallback() is called. - * @param matchIndex the next index at which a match attempt will be attempted for this - * find operation. If this callback interrupts the search, this is the - * index at which a find/findNext operation may be re-initiated. - * @return TRUE to continue the matching operation. - * FALSE to terminate the matching operation. - * @stable ICU 4.6 - */ -U_CDECL_BEGIN -typedef UBool U_CALLCONV URegexFindProgressCallback ( - const void *context, - int64_t matchIndex); -U_CDECL_END - - -/** - * Set the find progress callback function for this URegularExpression. - * - * @param regexp The compiled regular expression. - * @param callback A pointer to the user-supplied callback function. - * @param context User context pointer. The value supplied at the - * time the callback function is set will be saved - * and passed to the callback each time that it is called. - * @param status A reference to a UErrorCode to receive any errors. - * @stable ICU 4.6 - */ -U_STABLE void U_EXPORT2 -uregex_setFindProgressCallback(URegularExpression *regexp, - URegexFindProgressCallback *callback, - const void *context, - UErrorCode *status); - -/** - * Get the find progress callback function for this URegularExpression. - * - * @param regexp The compiled regular expression. - * @param callback Out parameter, receives a pointer to the user-supplied - * callback function. - * @param context Out parameter, receives the user context pointer that - * was set when uregex_setFindProgressCallback() was called. - * @param status A reference to a UErrorCode to receive any errors. - * @stable ICU 4.6 - */ -U_STABLE void U_EXPORT2 -uregex_getFindProgressCallback(const URegularExpression *regexp, - URegexFindProgressCallback **callback, - const void **context, - UErrorCode *status); - -#endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */ -#endif /* UREGEX_H */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uregion.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uregion.h deleted file mode 100644 index a5de49674b..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uregion.h +++ /dev/null @@ -1,252 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -***************************************************************************************** -* Copyright (C) 2014, International Business Machines -* Corporation and others. All Rights Reserved. -***************************************************************************************** -*/ - -#ifndef UREGION_H -#define UREGION_H - -#include "unicode/utypes.h" -#include "unicode/uenum.h" - -/** - * \file - * \brief C API: URegion (territory containment and mapping) - * - * URegion objects represent data associated with a particular Unicode Region Code, also known as a - * Unicode Region Subtag, which is defined based upon the BCP 47 standard. These include: - * * Two-letter codes defined by ISO 3166-1, with special LDML treatment of certain private-use or - * reserved codes; - * * A subset of 3-digit numeric codes defined by UN M.49. - * URegion objects can also provide mappings to and from additional codes. There are different types - * of regions that are important to distinguish: - *

- * Macroregion - A code for a "macro geographical (continental) region, geographical sub-region, or - * selected economic and other grouping" as defined in UN M.49. These are typically 3-digit codes, - * but contain some 2-letter codes for LDML extensions, such as "QO" for Outlying Oceania. - * Macroregions are represented in ICU by one of three region types: WORLD (code 001), - * CONTINENTS (regions contained directly by WORLD), and SUBCONTINENTS (regions contained directly - * by a continent ). - *

- * TERRITORY - A Region that is not a Macroregion. These are typically codes for countries, but also - * include areas that are not separate countries, such as the code "AQ" for Antarctica or the code - * "HK" for Hong Kong (SAR China). Overseas dependencies of countries may or may not have separate - * codes. The codes are typically 2-letter codes aligned with ISO 3166, but BCP47 allows for the use - * of 3-digit codes in the future. - *

- * UNKNOWN - The code ZZ is defined by Unicode LDML for use in indicating that region is unknown, - * or that the value supplied as a region was invalid. - *

- * DEPRECATED - Region codes that have been defined in the past but are no longer in modern usage, - * usually due to a country splitting into multiple territories or changing its name. - *

- * GROUPING - A widely understood grouping of territories that has a well defined membership such - * that a region code has been assigned for it. Some of these are UN M.49 codes that don't fall into - * the world/continent/sub-continent hierarchy, while others are just well-known groupings that have - * their own region code. Region "EU" (European Union) is one such region code that is a grouping. - * Groupings will never be returned by the uregion_getContainingRegion, since a different type of region - * (WORLD, CONTINENT, or SUBCONTINENT) will always be the containing region instead. - * - * URegion objects are const/immutable, owned and maintained by ICU itself, so there are not functions - * to open or close them. - */ - -/** - * URegionType is an enumeration defining the different types of regions. Current possible - * values are URGN_WORLD, URGN_CONTINENT, URGN_SUBCONTINENT, URGN_TERRITORY, URGN_GROUPING, - * URGN_DEPRECATED, and URGN_UNKNOWN. - * - * @stable ICU 51 - */ -typedef enum URegionType { - /** - * Type representing the unknown region. - * @stable ICU 51 - */ - URGN_UNKNOWN, - - /** - * Type representing a territory. - * @stable ICU 51 - */ - URGN_TERRITORY, - - /** - * Type representing the whole world. - * @stable ICU 51 - */ - URGN_WORLD, - - /** - * Type representing a continent. - * @stable ICU 51 - */ - URGN_CONTINENT, - - /** - * Type representing a sub-continent. - * @stable ICU 51 - */ - URGN_SUBCONTINENT, - - /** - * Type representing a grouping of territories that is not to be used in - * the normal WORLD/CONTINENT/SUBCONTINENT/TERRITORY containment tree. - * @stable ICU 51 - */ - URGN_GROUPING, - - /** - * Type representing a region whose code has been deprecated, usually - * due to a country splitting into multiple territories or changing its name. - * @stable ICU 51 - */ - URGN_DEPRECATED, - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal URegionType value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - URGN_LIMIT -#endif /* U_HIDE_DEPRECATED_API */ -} URegionType; - -#if !UCONFIG_NO_FORMATTING - -/** - * Opaque URegion object for use in C programs. - * @stable ICU 52 - */ -struct URegion; -typedef struct URegion URegion; /**< @stable ICU 52 */ - -/** - * Returns a pointer to a URegion for the specified region code: A 2-letter or 3-letter ISO 3166 - * code, UN M.49 numeric code (superset of ISO 3166 numeric codes), or other valid Unicode Region - * Code as defined by the LDML specification. The code will be canonicalized internally. If the - * region code is NULL or not recognized, the appropriate error code will be set - * (U_ILLEGAL_ARGUMENT_ERROR). - * @stable ICU 52 - */ -U_STABLE const URegion* U_EXPORT2 -uregion_getRegionFromCode(const char *regionCode, UErrorCode *status); - -/** - * Returns a pointer to a URegion for the specified numeric region code. If the numeric region - * code is not recognized, the appropriate error code will be set (U_ILLEGAL_ARGUMENT_ERROR). - * @stable ICU 52 - */ -U_STABLE const URegion* U_EXPORT2 -uregion_getRegionFromNumericCode (int32_t code, UErrorCode *status); - -/** - * Returns an enumeration over the canonical codes of all known regions that match the given type. - * The enumeration must be closed with with uenum_close(). - * @stable ICU 52 - */ -U_STABLE UEnumeration* U_EXPORT2 -uregion_getAvailable(URegionType type, UErrorCode *status); - -/** - * Returns true if the specified uregion is equal to the specified otherRegion. - * @stable ICU 52 - */ -U_STABLE UBool U_EXPORT2 -uregion_areEqual(const URegion* uregion, const URegion* otherRegion); - -/** - * Returns a pointer to the URegion that contains the specified uregion. Returns NULL if the - * specified uregion is code "001" (World) or "ZZ" (Unknown region). For example, calling - * this method with region "IT" (Italy) returns the URegion for "039" (Southern Europe). - * @stable ICU 52 - */ -U_STABLE const URegion* U_EXPORT2 -uregion_getContainingRegion(const URegion* uregion); - -/** - * Return a pointer to the URegion that geographically contains this uregion and matches the - * specified type, moving multiple steps up the containment chain if necessary. Returns NULL if no - * containing region can be found that matches the specified type. Will return NULL if URegionType - * is URGN_GROUPING, URGN_DEPRECATED, or URGN_UNKNOWN which are not appropriate for this API. - * For example, calling this method with uregion "IT" (Italy) for type URGN_CONTINENT returns the - * URegion "150" (Europe). - * @stable ICU 52 - */ -U_STABLE const URegion* U_EXPORT2 -uregion_getContainingRegionOfType(const URegion* uregion, URegionType type); - -/** - * Return an enumeration over the canonical codes of all the regions that are immediate children - * of the specified uregion in the region hierarchy. These returned regions could be either macro - * regions, territories, or a mixture of the two, depending on the containment data as defined in - * CLDR. This API returns NULL if this uregion doesn't have any sub-regions. For example, calling - * this function for uregion "150" (Europe) returns an enumeration containing the various - * sub-regions of Europe: "039" (Southern Europe), "151" (Eastern Europe), "154" (Northern Europe), - * and "155" (Western Europe). The enumeration must be closed with with uenum_close(). - * @stable ICU 52 - */ -U_STABLE UEnumeration* U_EXPORT2 -uregion_getContainedRegions(const URegion* uregion, UErrorCode *status); - -/** - * Returns an enumeration over the canonical codes of all the regions that are children of the - * specified uregion anywhere in the region hierarchy and match the given type. This API may return - * an empty enumeration if this uregion doesn't have any sub-regions that match the given type. - * For example, calling this method with region "150" (Europe) and type URGN_TERRITORY" returns an - * enumeration containing all the territories in Europe: "FR" (France), "IT" (Italy), "DE" (Germany), - * etc. The enumeration must be closed with with uenum_close(). - * @stable ICU 52 - */ -U_STABLE UEnumeration* U_EXPORT2 -uregion_getContainedRegionsOfType(const URegion* uregion, URegionType type, UErrorCode *status); - -/** - * Returns true if the specified uregion contains the specified otherRegion anywhere in the region - * hierarchy. - * @stable ICU 52 - */ -U_STABLE UBool U_EXPORT2 -uregion_contains(const URegion* uregion, const URegion* otherRegion); - -/** - * If the specified uregion is deprecated, returns an enumeration over the canonical codes of the - * regions that are the preferred replacement regions for the specified uregion. If the specified - * uregion is not deprecated, returns NULL. For example, calling this method with uregion - * "SU" (Soviet Union) returns a list of the regions containing "RU" (Russia), "AM" (Armenia), - * "AZ" (Azerbaijan), etc... The enumeration must be closed with with uenum_close(). - * @stable ICU 52 - */ -U_STABLE UEnumeration* U_EXPORT2 -uregion_getPreferredValues(const URegion* uregion, UErrorCode *status); - -/** - * Returns the specified uregion's canonical code. - * @stable ICU 52 - */ -U_STABLE const char* U_EXPORT2 -uregion_getRegionCode(const URegion* uregion); - -/** - * Returns the specified uregion's numeric code, or a negative value if there is no numeric code - * for the specified uregion. - * @stable ICU 52 - */ -U_STABLE int32_t U_EXPORT2 -uregion_getNumericCode(const URegion* uregion); - -/** - * Returns the URegionType of the specified uregion. - * @stable ICU 52 - */ -U_STABLE URegionType U_EXPORT2 -uregion_getType(const URegion* uregion); - - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ureldatefmt.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ureldatefmt.h deleted file mode 100644 index a276f3c9c1..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ureldatefmt.h +++ /dev/null @@ -1,517 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -***************************************************************************************** -* Copyright (C) 2016, International Business Machines -* Corporation and others. All Rights Reserved. -***************************************************************************************** -*/ - -#ifndef URELDATEFMT_H -#define URELDATEFMT_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION - -#include "unicode/unum.h" -#include "unicode/udisplaycontext.h" -#include "unicode/localpointer.h" -#include "unicode/uformattedvalue.h" - -/** - * \file - * \brief C API: URelativeDateTimeFormatter, relative date formatting of unit + numeric offset. - * - * Provides simple formatting of relative dates, in two ways - *

    - *
  • relative dates with a quantity e.g "in 5 days"
  • - *
  • relative dates without a quantity e.g "next Tuesday"
  • - *
- *

- * This does not provide compound formatting for multiple units, - * other than the ability to combine a time string with a relative date, - * as in "next Tuesday at 3:45 PM". It also does not provide support - * for determining which unit to use, such as deciding between "in 7 days" - * and "in 1 week". - * - * @stable ICU 57 - */ - -/** - * The formatting style - * @stable ICU 54 - */ -typedef enum UDateRelativeDateTimeFormatterStyle { - /** - * Everything spelled out. - * @stable ICU 54 - */ - UDAT_STYLE_LONG, - - /** - * Abbreviations used when possible. - * @stable ICU 54 - */ - UDAT_STYLE_SHORT, - - /** - * Use the shortest possible form. - * @stable ICU 54 - */ - UDAT_STYLE_NARROW, - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UDateRelativeDateTimeFormatterStyle value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UDAT_STYLE_COUNT -#endif /* U_HIDE_DEPRECATED_API */ -} UDateRelativeDateTimeFormatterStyle; - -/** - * Represents the unit for formatting a relative date. e.g "in 5 days" - * or "next year" - * @stable ICU 57 - */ -typedef enum URelativeDateTimeUnit { - /** - * Specifies that relative unit is year, e.g. "last year", - * "in 5 years". - * @stable ICU 57 - */ - UDAT_REL_UNIT_YEAR, - /** - * Specifies that relative unit is quarter, e.g. "last quarter", - * "in 5 quarters". - * @stable ICU 57 - */ - UDAT_REL_UNIT_QUARTER, - /** - * Specifies that relative unit is month, e.g. "last month", - * "in 5 months". - * @stable ICU 57 - */ - UDAT_REL_UNIT_MONTH, - /** - * Specifies that relative unit is week, e.g. "last week", - * "in 5 weeks". - * @stable ICU 57 - */ - UDAT_REL_UNIT_WEEK, - /** - * Specifies that relative unit is day, e.g. "yesterday", - * "in 5 days". - * @stable ICU 57 - */ - UDAT_REL_UNIT_DAY, - /** - * Specifies that relative unit is hour, e.g. "1 hour ago", - * "in 5 hours". - * @stable ICU 57 - */ - UDAT_REL_UNIT_HOUR, - /** - * Specifies that relative unit is minute, e.g. "1 minute ago", - * "in 5 minutes". - * @stable ICU 57 - */ - UDAT_REL_UNIT_MINUTE, - /** - * Specifies that relative unit is second, e.g. "1 second ago", - * "in 5 seconds". - * @stable ICU 57 - */ - UDAT_REL_UNIT_SECOND, - /** - * Specifies that relative unit is Sunday, e.g. "last Sunday", - * "this Sunday", "next Sunday", "in 5 Sundays". - * @stable ICU 57 - */ - UDAT_REL_UNIT_SUNDAY, - /** - * Specifies that relative unit is Monday, e.g. "last Monday", - * "this Monday", "next Monday", "in 5 Mondays". - * @stable ICU 57 - */ - UDAT_REL_UNIT_MONDAY, - /** - * Specifies that relative unit is Tuesday, e.g. "last Tuesday", - * "this Tuesday", "next Tuesday", "in 5 Tuesdays". - * @stable ICU 57 - */ - UDAT_REL_UNIT_TUESDAY, - /** - * Specifies that relative unit is Wednesday, e.g. "last Wednesday", - * "this Wednesday", "next Wednesday", "in 5 Wednesdays". - * @stable ICU 57 - */ - UDAT_REL_UNIT_WEDNESDAY, - /** - * Specifies that relative unit is Thursday, e.g. "last Thursday", - * "this Thursday", "next Thursday", "in 5 Thursdays". - * @stable ICU 57 - */ - UDAT_REL_UNIT_THURSDAY, - /** - * Specifies that relative unit is Friday, e.g. "last Friday", - * "this Friday", "next Friday", "in 5 Fridays". - * @stable ICU 57 - */ - UDAT_REL_UNIT_FRIDAY, - /** - * Specifies that relative unit is Saturday, e.g. "last Saturday", - * "this Saturday", "next Saturday", "in 5 Saturdays". - * @stable ICU 57 - */ - UDAT_REL_UNIT_SATURDAY, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal URelativeDateTimeUnit value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UDAT_REL_UNIT_COUNT -#endif /* U_HIDE_DEPRECATED_API */ -} URelativeDateTimeUnit; - -#ifndef U_HIDE_DRAFT_API -/** - * FieldPosition and UFieldPosition selectors for format fields - * defined by RelativeDateTimeFormatter. - * @draft ICU 64 - */ -typedef enum URelativeDateTimeFormatterField { - /** - * Represents a literal text string, like "tomorrow" or "days ago". - * @draft ICU 64 - */ - UDAT_REL_LITERAL_FIELD, - /** - * Represents a number quantity, like "3" in "3 days ago". - * @draft ICU 64 - */ - UDAT_REL_NUMERIC_FIELD, -} URelativeDateTimeFormatterField; -#endif // U_HIDE_DRAFT_API - - -/** - * Opaque URelativeDateTimeFormatter object for use in C programs. - * @stable ICU 57 - */ -struct URelativeDateTimeFormatter; -typedef struct URelativeDateTimeFormatter URelativeDateTimeFormatter; /**< C typedef for struct URelativeDateTimeFormatter. @stable ICU 57 */ - - -/** - * Open a new URelativeDateTimeFormatter object for a given locale using the - * specified width and capitalizationContext, along with a number formatter - * (if desired) to override the default formatter that would be used for - * display of numeric field offsets. The default formatter typically rounds - * toward 0 and has a minimum of 0 fraction digits and a maximum of 3 - * fraction digits (i.e. it will show as many decimal places as necessary - * up to 3, without showing trailing 0s). - * - * @param locale - * The locale - * @param nfToAdopt - * A number formatter to set for this URelativeDateTimeFormatter - * object (instead of the default decimal formatter). Ownership of - * this UNumberFormat object will pass to the URelativeDateTimeFormatter - * object (the URelativeDateTimeFormatter adopts the UNumberFormat), - * which becomes responsible for closing it. If the caller wishes to - * retain ownership of the UNumberFormat object, the caller must clone - * it (with unum_clone) and pass the clone to ureldatefmt_open. May be - * NULL to use the default decimal formatter. - * @param width - * The width - wide, short, narrow, etc. - * @param capitalizationContext - * A value from UDisplayContext that pertains to capitalization, e.g. - * UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE. - * @param status - * A pointer to a UErrorCode to receive any errors. - * @return - * A pointer to a URelativeDateTimeFormatter object for the specified locale, - * or NULL if an error occurred. - * @stable ICU 57 - */ -U_STABLE URelativeDateTimeFormatter* U_EXPORT2 -ureldatefmt_open( const char* locale, - UNumberFormat* nfToAdopt, - UDateRelativeDateTimeFormatterStyle width, - UDisplayContext capitalizationContext, - UErrorCode* status ); - -/** - * Close a URelativeDateTimeFormatter object. Once closed it may no longer be used. - * @param reldatefmt - * The URelativeDateTimeFormatter object to close. - * @stable ICU 57 - */ -U_STABLE void U_EXPORT2 -ureldatefmt_close(URelativeDateTimeFormatter *reldatefmt); - -#ifndef U_HIDE_DRAFT_API -struct UFormattedRelativeDateTime; -/** - * Opaque struct to contain the results of a URelativeDateTimeFormatter operation. - * @draft ICU 64 - */ -typedef struct UFormattedRelativeDateTime UFormattedRelativeDateTime; - -/** - * Creates an object to hold the result of a URelativeDateTimeFormatter - * operation. The object can be used repeatedly; it is cleared whenever - * passed to a format function. - * - * @param ec Set if an error occurs. - * @return A pointer needing ownership. - * @draft ICU 64 - */ -U_DRAFT UFormattedRelativeDateTime* U_EXPORT2 -ureldatefmt_openResult(UErrorCode* ec); - -/** - * Returns a representation of a UFormattedRelativeDateTime as a UFormattedValue, - * which can be subsequently passed to any API requiring that type. - * - * The returned object is owned by the UFormattedRelativeDateTime and is valid - * only as long as the UFormattedRelativeDateTime is present and unchanged in memory. - * - * You can think of this method as a cast between types. - * - * @param ufrdt The object containing the formatted string. - * @param ec Set if an error occurs. - * @return A UFormattedValue owned by the input object. - * @draft ICU 64 - */ -U_DRAFT const UFormattedValue* U_EXPORT2 -ureldatefmt_resultAsValue(const UFormattedRelativeDateTime* ufrdt, UErrorCode* ec); - -/** - * Releases the UFormattedRelativeDateTime created by ureldatefmt_openResult. - * - * @param ufrdt The object to release. - * @draft ICU 64 - */ -U_DRAFT void U_EXPORT2 -ureldatefmt_closeResult(UFormattedRelativeDateTime* ufrdt); -#endif /* U_HIDE_DRAFT_API */ - - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalURelativeDateTimeFormatterPointer - * "Smart pointer" class, closes a URelativeDateTimeFormatter via ureldatefmt_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 57 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalURelativeDateTimeFormatterPointer, URelativeDateTimeFormatter, ureldatefmt_close); - -#ifndef U_HIDE_DRAFT_API -/** - * \class LocalUFormattedRelativeDateTimePointer - * "Smart pointer" class, closes a UFormattedRelativeDateTime via ureldatefmt_closeResult(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @draft ICU 64 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedRelativeDateTimePointer, UFormattedRelativeDateTime, ureldatefmt_closeResult); -#endif /* U_HIDE_DRAFT_API */ - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Format a combination of URelativeDateTimeUnit and numeric - * offset using a numeric style, e.g. "1 week ago", "in 1 week", - * "5 weeks ago", "in 5 weeks". - * - * @param reldatefmt - * The URelativeDateTimeFormatter object specifying the - * format conventions. - * @param offset - * The signed offset for the specified unit. This will - * be formatted according to this object's UNumberFormat - * object. - * @param unit - * The unit to use when formatting the relative - * date, e.g. UDAT_REL_UNIT_WEEK, UDAT_REL_UNIT_FRIDAY. - * @param result - * A pointer to a buffer to receive the formatted result. - * @param resultCapacity - * The maximum size of result. - * @param status - * A pointer to a UErrorCode to receive any errors. In - * case of error status, the contents of result are - * undefined. - * @return - * The length of the formatted result; may be greater - * than resultCapacity, in which case an error is returned. - * @stable ICU 57 - */ -U_STABLE int32_t U_EXPORT2 -ureldatefmt_formatNumeric( const URelativeDateTimeFormatter* reldatefmt, - double offset, - URelativeDateTimeUnit unit, - UChar* result, - int32_t resultCapacity, - UErrorCode* status); - -#ifndef U_HIDE_DRAFT_API -/** - * Format a combination of URelativeDateTimeUnit and numeric - * offset using a numeric style, e.g. "1 week ago", "in 1 week", - * "5 weeks ago", "in 5 weeks". - * - * @param reldatefmt - * The URelativeDateTimeFormatter object specifying the - * format conventions. - * @param offset - * The signed offset for the specified unit. This will - * be formatted according to this object's UNumberFormat - * object. - * @param unit - * The unit to use when formatting the relative - * date, e.g. UDAT_REL_UNIT_WEEK, UDAT_REL_UNIT_FRIDAY. - * @param result - * A pointer to a UFormattedRelativeDateTime to populate. - * @param status - * A pointer to a UErrorCode to receive any errors. In - * case of error status, the contents of result are - * undefined. - * @draft ICU 64 - */ -U_DRAFT void U_EXPORT2 -ureldatefmt_formatNumericToResult( - const URelativeDateTimeFormatter* reldatefmt, - double offset, - URelativeDateTimeUnit unit, - UFormattedRelativeDateTime* result, - UErrorCode* status); -#endif /* U_HIDE_DRAFT_API */ - -/** - * Format a combination of URelativeDateTimeUnit and numeric offset - * using a text style if possible, e.g. "last week", "this week", - * "next week", "yesterday", "tomorrow". Falls back to numeric - * style if no appropriate text term is available for the specified - * offset in the object's locale. - * - * @param reldatefmt - * The URelativeDateTimeFormatter object specifying the - * format conventions. - * @param offset - * The signed offset for the specified unit. - * @param unit - * The unit to use when formatting the relative - * date, e.g. UDAT_REL_UNIT_WEEK, UDAT_REL_UNIT_FRIDAY. - * @param result - * A pointer to a buffer to receive the formatted result. - * @param resultCapacity - * The maximum size of result. - * @param status - * A pointer to a UErrorCode to receive any errors. In - * case of error status, the contents of result are - * undefined. - * @return - * The length of the formatted result; may be greater - * than resultCapacity, in which case an error is returned. - * @stable ICU 57 - */ -U_STABLE int32_t U_EXPORT2 -ureldatefmt_format( const URelativeDateTimeFormatter* reldatefmt, - double offset, - URelativeDateTimeUnit unit, - UChar* result, - int32_t resultCapacity, - UErrorCode* status); - -#ifndef U_HIDE_DRAFT_API -/** - * Format a combination of URelativeDateTimeUnit and numeric offset - * using a text style if possible, e.g. "last week", "this week", - * "next week", "yesterday", "tomorrow". Falls back to numeric - * style if no appropriate text term is available for the specified - * offset in the object's locale. - * - * This method populates a UFormattedRelativeDateTime, which exposes more - * information than the string populated by format(). - * - * @param reldatefmt - * The URelativeDateTimeFormatter object specifying the - * format conventions. - * @param offset - * The signed offset for the specified unit. - * @param unit - * The unit to use when formatting the relative - * date, e.g. UDAT_REL_UNIT_WEEK, UDAT_REL_UNIT_FRIDAY. - * @param result - * A pointer to a UFormattedRelativeDateTime to populate. - * @param status - * A pointer to a UErrorCode to receive any errors. In - * case of error status, the contents of result are - * undefined. - * @draft ICU 64 - */ -U_DRAFT void U_EXPORT2 -ureldatefmt_formatToResult( - const URelativeDateTimeFormatter* reldatefmt, - double offset, - URelativeDateTimeUnit unit, - UFormattedRelativeDateTime* result, - UErrorCode* status); -#endif /* U_HIDE_DRAFT_API */ - -/** - * Combines a relative date string and a time string in this object's - * locale. This is done with the same date-time separator used for the - * default calendar in this locale to produce a result such as - * "yesterday at 3:45 PM". - * - * @param reldatefmt - * The URelativeDateTimeFormatter object specifying the format conventions. - * @param relativeDateString - * The relative date string. - * @param relativeDateStringLen - * The length of relativeDateString; may be -1 if relativeDateString - * is zero-terminated. - * @param timeString - * The time string. - * @param timeStringLen - * The length of timeString; may be -1 if timeString is zero-terminated. - * @param result - * A pointer to a buffer to receive the formatted result. - * @param resultCapacity - * The maximum size of result. - * @param status - * A pointer to a UErrorCode to receive any errors. In case of error status, - * the contents of result are undefined. - * @return - * The length of the formatted result; may be greater than resultCapacity, - * in which case an error is returned. - * @stable ICU 57 - */ -U_STABLE int32_t U_EXPORT2 -ureldatefmt_combineDateAndTime( const URelativeDateTimeFormatter* reldatefmt, - const UChar * relativeDateString, - int32_t relativeDateStringLen, - const UChar * timeString, - int32_t timeStringLen, - UChar* result, - int32_t resultCapacity, - UErrorCode* status ); - -#endif /* !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/urename.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/urename.h deleted file mode 100644 index eaf56c9614..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/urename.h +++ /dev/null @@ -1,1910 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2002-2016, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* -* file name: urename.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* Created by: Perl script tools/genren.pl written by Vladimir Weinstein -* -* Contains data for renaming ICU exports. -* Gets included by umachine.h -* -* THIS FILE IS MACHINE-GENERATED, DON'T PLAY WITH IT IF YOU DON'T KNOW WHAT -* YOU ARE DOING, OTHERWISE VERY BAD THINGS WILL HAPPEN! -*/ - -#ifndef URENAME_H -#define URENAME_H - -/* U_DISABLE_RENAMING can be defined in the following ways: - * - when running configure, e.g. - * runConfigureICU Linux --disable-renaming - * - by changing the default setting of U_DISABLE_RENAMING in uconfig.h - */ - -#include "unicode/uconfig.h" - -#if !U_DISABLE_RENAMING - -// Disable Renaming for Visual Studio's IntelliSense feature, so that 'Go-to-Definition' (F12) will work. -#if !(defined(_MSC_VER) && defined(__INTELLISENSE__)) - -/* We need the U_ICU_ENTRY_POINT_RENAME definition. There's a default one in unicode/uvernum.h we can use, but we will give - the platform a chance to define it first. - Normally (if utypes.h or umachine.h was included first) this will not be necessary as it will already be defined. - */ - -#ifndef U_ICU_ENTRY_POINT_RENAME -#include "unicode/umachine.h" -#endif - -/* If we still don't have U_ICU_ENTRY_POINT_RENAME use the default. */ -#ifndef U_ICU_ENTRY_POINT_RENAME -#include "unicode/uvernum.h" -#endif - -/* Error out before the following defines cause very strange and unexpected code breakage */ -#ifndef U_ICU_ENTRY_POINT_RENAME -#error U_ICU_ENTRY_POINT_RENAME is not defined - cannot continue. Consider defining U_DISABLE_RENAMING if renaming should not be used. -#endif - - -/* C exports renaming data */ - -#define T_CString_int64ToString U_ICU_ENTRY_POINT_RENAME(T_CString_int64ToString) -#define T_CString_integerToString U_ICU_ENTRY_POINT_RENAME(T_CString_integerToString) -#define T_CString_stringToInteger U_ICU_ENTRY_POINT_RENAME(T_CString_stringToInteger) -#define T_CString_toLowerCase U_ICU_ENTRY_POINT_RENAME(T_CString_toLowerCase) -#define T_CString_toUpperCase U_ICU_ENTRY_POINT_RENAME(T_CString_toUpperCase) -#define UCNV_FROM_U_CALLBACK_ESCAPE U_ICU_ENTRY_POINT_RENAME(UCNV_FROM_U_CALLBACK_ESCAPE) -#define UCNV_FROM_U_CALLBACK_SKIP U_ICU_ENTRY_POINT_RENAME(UCNV_FROM_U_CALLBACK_SKIP) -#define UCNV_FROM_U_CALLBACK_STOP U_ICU_ENTRY_POINT_RENAME(UCNV_FROM_U_CALLBACK_STOP) -#define UCNV_FROM_U_CALLBACK_SUBSTITUTE U_ICU_ENTRY_POINT_RENAME(UCNV_FROM_U_CALLBACK_SUBSTITUTE) -#define UCNV_TO_U_CALLBACK_ESCAPE U_ICU_ENTRY_POINT_RENAME(UCNV_TO_U_CALLBACK_ESCAPE) -#define UCNV_TO_U_CALLBACK_SKIP U_ICU_ENTRY_POINT_RENAME(UCNV_TO_U_CALLBACK_SKIP) -#define UCNV_TO_U_CALLBACK_STOP U_ICU_ENTRY_POINT_RENAME(UCNV_TO_U_CALLBACK_STOP) -#define UCNV_TO_U_CALLBACK_SUBSTITUTE U_ICU_ENTRY_POINT_RENAME(UCNV_TO_U_CALLBACK_SUBSTITUTE) -#define UDataMemory_createNewInstance U_ICU_ENTRY_POINT_RENAME(UDataMemory_createNewInstance) -#define UDataMemory_init U_ICU_ENTRY_POINT_RENAME(UDataMemory_init) -#define UDataMemory_isLoaded U_ICU_ENTRY_POINT_RENAME(UDataMemory_isLoaded) -#define UDataMemory_normalizeDataPointer U_ICU_ENTRY_POINT_RENAME(UDataMemory_normalizeDataPointer) -#define UDataMemory_setData U_ICU_ENTRY_POINT_RENAME(UDataMemory_setData) -#define UDatamemory_assign U_ICU_ENTRY_POINT_RENAME(UDatamemory_assign) -#define _ASCIIData U_ICU_ENTRY_POINT_RENAME(_ASCIIData) -#define _Bocu1Data U_ICU_ENTRY_POINT_RENAME(_Bocu1Data) -#define _CESU8Data U_ICU_ENTRY_POINT_RENAME(_CESU8Data) -#define _CompoundTextData U_ICU_ENTRY_POINT_RENAME(_CompoundTextData) -#define _HZData U_ICU_ENTRY_POINT_RENAME(_HZData) -#define _IMAPData U_ICU_ENTRY_POINT_RENAME(_IMAPData) -#define _ISCIIData U_ICU_ENTRY_POINT_RENAME(_ISCIIData) -#define _ISO2022Data U_ICU_ENTRY_POINT_RENAME(_ISO2022Data) -#define _LMBCSData1 U_ICU_ENTRY_POINT_RENAME(_LMBCSData1) -#define _LMBCSData11 U_ICU_ENTRY_POINT_RENAME(_LMBCSData11) -#define _LMBCSData16 U_ICU_ENTRY_POINT_RENAME(_LMBCSData16) -#define _LMBCSData17 U_ICU_ENTRY_POINT_RENAME(_LMBCSData17) -#define _LMBCSData18 U_ICU_ENTRY_POINT_RENAME(_LMBCSData18) -#define _LMBCSData19 U_ICU_ENTRY_POINT_RENAME(_LMBCSData19) -#define _LMBCSData2 U_ICU_ENTRY_POINT_RENAME(_LMBCSData2) -#define _LMBCSData3 U_ICU_ENTRY_POINT_RENAME(_LMBCSData3) -#define _LMBCSData4 U_ICU_ENTRY_POINT_RENAME(_LMBCSData4) -#define _LMBCSData5 U_ICU_ENTRY_POINT_RENAME(_LMBCSData5) -#define _LMBCSData6 U_ICU_ENTRY_POINT_RENAME(_LMBCSData6) -#define _LMBCSData8 U_ICU_ENTRY_POINT_RENAME(_LMBCSData8) -#define _Latin1Data U_ICU_ENTRY_POINT_RENAME(_Latin1Data) -#define _MBCSData U_ICU_ENTRY_POINT_RENAME(_MBCSData) -#define _SCSUData U_ICU_ENTRY_POINT_RENAME(_SCSUData) -#define _UTF16BEData U_ICU_ENTRY_POINT_RENAME(_UTF16BEData) -#define _UTF16Data U_ICU_ENTRY_POINT_RENAME(_UTF16Data) -#define _UTF16LEData U_ICU_ENTRY_POINT_RENAME(_UTF16LEData) -#define _UTF16v2Data U_ICU_ENTRY_POINT_RENAME(_UTF16v2Data) -#define _UTF32BEData U_ICU_ENTRY_POINT_RENAME(_UTF32BEData) -#define _UTF32Data U_ICU_ENTRY_POINT_RENAME(_UTF32Data) -#define _UTF32LEData U_ICU_ENTRY_POINT_RENAME(_UTF32LEData) -#define _UTF7Data U_ICU_ENTRY_POINT_RENAME(_UTF7Data) -#define _UTF8Data U_ICU_ENTRY_POINT_RENAME(_UTF8Data) -#define _isUnicodeLocaleTypeSubtag U_ICU_ENTRY_POINT_RENAME(_isUnicodeLocaleTypeSubtag) -#define allowedHourFormatsCleanup U_ICU_ENTRY_POINT_RENAME(allowedHourFormatsCleanup) -#define cmemory_cleanup U_ICU_ENTRY_POINT_RENAME(cmemory_cleanup) -#define dayPeriodRulesCleanup U_ICU_ENTRY_POINT_RENAME(dayPeriodRulesCleanup) -#define deleteAllowedHourFormats U_ICU_ENTRY_POINT_RENAME(deleteAllowedHourFormats) -#define gTimeZoneFilesInitOnce U_ICU_ENTRY_POINT_RENAME(gTimeZoneFilesInitOnce) -#define initNumsysNames U_ICU_ENTRY_POINT_RENAME(initNumsysNames) -#define izrule_clone U_ICU_ENTRY_POINT_RENAME(izrule_clone) -#define izrule_close U_ICU_ENTRY_POINT_RENAME(izrule_close) -#define izrule_equals U_ICU_ENTRY_POINT_RENAME(izrule_equals) -#define izrule_getDSTSavings U_ICU_ENTRY_POINT_RENAME(izrule_getDSTSavings) -#define izrule_getDynamicClassID U_ICU_ENTRY_POINT_RENAME(izrule_getDynamicClassID) -#define izrule_getFinalStart U_ICU_ENTRY_POINT_RENAME(izrule_getFinalStart) -#define izrule_getFirstStart U_ICU_ENTRY_POINT_RENAME(izrule_getFirstStart) -#define izrule_getName U_ICU_ENTRY_POINT_RENAME(izrule_getName) -#define izrule_getNextStart U_ICU_ENTRY_POINT_RENAME(izrule_getNextStart) -#define izrule_getPreviousStart U_ICU_ENTRY_POINT_RENAME(izrule_getPreviousStart) -#define izrule_getRawOffset U_ICU_ENTRY_POINT_RENAME(izrule_getRawOffset) -#define izrule_getStaticClassID U_ICU_ENTRY_POINT_RENAME(izrule_getStaticClassID) -#define izrule_isEquivalentTo U_ICU_ENTRY_POINT_RENAME(izrule_isEquivalentTo) -#define izrule_open U_ICU_ENTRY_POINT_RENAME(izrule_open) -#define locale_getKeywords U_ICU_ENTRY_POINT_RENAME(locale_getKeywords) -#define locale_getKeywordsStart U_ICU_ENTRY_POINT_RENAME(locale_getKeywordsStart) -#define locale_get_default U_ICU_ENTRY_POINT_RENAME(locale_get_default) -#define locale_set_default U_ICU_ENTRY_POINT_RENAME(locale_set_default) -#define numSysCleanup U_ICU_ENTRY_POINT_RENAME(numSysCleanup) -#define pl_addFontRun U_ICU_ENTRY_POINT_RENAME(pl_addFontRun) -#define pl_addLocaleRun U_ICU_ENTRY_POINT_RENAME(pl_addLocaleRun) -#define pl_addValueRun U_ICU_ENTRY_POINT_RENAME(pl_addValueRun) -#define pl_close U_ICU_ENTRY_POINT_RENAME(pl_close) -#define pl_closeFontRuns U_ICU_ENTRY_POINT_RENAME(pl_closeFontRuns) -#define pl_closeLine U_ICU_ENTRY_POINT_RENAME(pl_closeLine) -#define pl_closeLocaleRuns U_ICU_ENTRY_POINT_RENAME(pl_closeLocaleRuns) -#define pl_closeValueRuns U_ICU_ENTRY_POINT_RENAME(pl_closeValueRuns) -#define pl_countLineRuns U_ICU_ENTRY_POINT_RENAME(pl_countLineRuns) -#define pl_create U_ICU_ENTRY_POINT_RENAME(pl_create) -#define pl_getAscent U_ICU_ENTRY_POINT_RENAME(pl_getAscent) -#define pl_getDescent U_ICU_ENTRY_POINT_RENAME(pl_getDescent) -#define pl_getFontRunCount U_ICU_ENTRY_POINT_RENAME(pl_getFontRunCount) -#define pl_getFontRunFont U_ICU_ENTRY_POINT_RENAME(pl_getFontRunFont) -#define pl_getFontRunLastLimit U_ICU_ENTRY_POINT_RENAME(pl_getFontRunLastLimit) -#define pl_getFontRunLimit U_ICU_ENTRY_POINT_RENAME(pl_getFontRunLimit) -#define pl_getLeading U_ICU_ENTRY_POINT_RENAME(pl_getLeading) -#define pl_getLineAscent U_ICU_ENTRY_POINT_RENAME(pl_getLineAscent) -#define pl_getLineDescent U_ICU_ENTRY_POINT_RENAME(pl_getLineDescent) -#define pl_getLineLeading U_ICU_ENTRY_POINT_RENAME(pl_getLineLeading) -#define pl_getLineVisualRun U_ICU_ENTRY_POINT_RENAME(pl_getLineVisualRun) -#define pl_getLineWidth U_ICU_ENTRY_POINT_RENAME(pl_getLineWidth) -#define pl_getLocaleRunCount U_ICU_ENTRY_POINT_RENAME(pl_getLocaleRunCount) -#define pl_getLocaleRunLastLimit U_ICU_ENTRY_POINT_RENAME(pl_getLocaleRunLastLimit) -#define pl_getLocaleRunLimit U_ICU_ENTRY_POINT_RENAME(pl_getLocaleRunLimit) -#define pl_getLocaleRunLocale U_ICU_ENTRY_POINT_RENAME(pl_getLocaleRunLocale) -#define pl_getParagraphLevel U_ICU_ENTRY_POINT_RENAME(pl_getParagraphLevel) -#define pl_getTextDirection U_ICU_ENTRY_POINT_RENAME(pl_getTextDirection) -#define pl_getValueRunCount U_ICU_ENTRY_POINT_RENAME(pl_getValueRunCount) -#define pl_getValueRunLastLimit U_ICU_ENTRY_POINT_RENAME(pl_getValueRunLastLimit) -#define pl_getValueRunLimit U_ICU_ENTRY_POINT_RENAME(pl_getValueRunLimit) -#define pl_getValueRunValue U_ICU_ENTRY_POINT_RENAME(pl_getValueRunValue) -#define pl_getVisualRunAscent U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunAscent) -#define pl_getVisualRunDescent U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunDescent) -#define pl_getVisualRunDirection U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunDirection) -#define pl_getVisualRunFont U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunFont) -#define pl_getVisualRunGlyphCount U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunGlyphCount) -#define pl_getVisualRunGlyphToCharMap U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunGlyphToCharMap) -#define pl_getVisualRunGlyphs U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunGlyphs) -#define pl_getVisualRunLeading U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunLeading) -#define pl_getVisualRunPositions U_ICU_ENTRY_POINT_RENAME(pl_getVisualRunPositions) -#define pl_isComplex U_ICU_ENTRY_POINT_RENAME(pl_isComplex) -#define pl_nextLine U_ICU_ENTRY_POINT_RENAME(pl_nextLine) -#define pl_openEmptyFontRuns U_ICU_ENTRY_POINT_RENAME(pl_openEmptyFontRuns) -#define pl_openEmptyLocaleRuns U_ICU_ENTRY_POINT_RENAME(pl_openEmptyLocaleRuns) -#define pl_openEmptyValueRuns U_ICU_ENTRY_POINT_RENAME(pl_openEmptyValueRuns) -#define pl_openFontRuns U_ICU_ENTRY_POINT_RENAME(pl_openFontRuns) -#define pl_openLocaleRuns U_ICU_ENTRY_POINT_RENAME(pl_openLocaleRuns) -#define pl_openValueRuns U_ICU_ENTRY_POINT_RENAME(pl_openValueRuns) -#define pl_reflow U_ICU_ENTRY_POINT_RENAME(pl_reflow) -#define pl_resetFontRuns U_ICU_ENTRY_POINT_RENAME(pl_resetFontRuns) -#define pl_resetLocaleRuns U_ICU_ENTRY_POINT_RENAME(pl_resetLocaleRuns) -#define pl_resetValueRuns U_ICU_ENTRY_POINT_RENAME(pl_resetValueRuns) -#define res_countArrayItems U_ICU_ENTRY_POINT_RENAME(res_countArrayItems) -#define res_findResource U_ICU_ENTRY_POINT_RENAME(res_findResource) -#define res_getAlias U_ICU_ENTRY_POINT_RENAME(res_getAlias) -#define res_getArrayItem U_ICU_ENTRY_POINT_RENAME(res_getArrayItem) -#define res_getBinary U_ICU_ENTRY_POINT_RENAME(res_getBinary) -#define res_getIntVector U_ICU_ENTRY_POINT_RENAME(res_getIntVector) -#define res_getPublicType U_ICU_ENTRY_POINT_RENAME(res_getPublicType) -#define res_getResource U_ICU_ENTRY_POINT_RENAME(res_getResource) -#define res_getString U_ICU_ENTRY_POINT_RENAME(res_getString) -#define res_getTableItemByIndex U_ICU_ENTRY_POINT_RENAME(res_getTableItemByIndex) -#define res_getTableItemByKey U_ICU_ENTRY_POINT_RENAME(res_getTableItemByKey) -#define res_load U_ICU_ENTRY_POINT_RENAME(res_load) -#define res_read U_ICU_ENTRY_POINT_RENAME(res_read) -#define res_unload U_ICU_ENTRY_POINT_RENAME(res_unload) -#define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars) -#define u_austrcpy U_ICU_ENTRY_POINT_RENAME(u_austrcpy) -#define u_austrncpy U_ICU_ENTRY_POINT_RENAME(u_austrncpy) -#define u_caseInsensitivePrefixMatch U_ICU_ENTRY_POINT_RENAME(u_caseInsensitivePrefixMatch) -#define u_catclose U_ICU_ENTRY_POINT_RENAME(u_catclose) -#define u_catgets U_ICU_ENTRY_POINT_RENAME(u_catgets) -#define u_catopen U_ICU_ENTRY_POINT_RENAME(u_catopen) -#define u_charAge U_ICU_ENTRY_POINT_RENAME(u_charAge) -#define u_charDigitValue U_ICU_ENTRY_POINT_RENAME(u_charDigitValue) -#define u_charDirection U_ICU_ENTRY_POINT_RENAME(u_charDirection) -#define u_charFromName U_ICU_ENTRY_POINT_RENAME(u_charFromName) -#define u_charMirror U_ICU_ENTRY_POINT_RENAME(u_charMirror) -#define u_charName U_ICU_ENTRY_POINT_RENAME(u_charName) -#define u_charType U_ICU_ENTRY_POINT_RENAME(u_charType) -#define u_charsToUChars U_ICU_ENTRY_POINT_RENAME(u_charsToUChars) -#define u_cleanup U_ICU_ENTRY_POINT_RENAME(u_cleanup) -#define u_countChar32 U_ICU_ENTRY_POINT_RENAME(u_countChar32) -#define u_digit U_ICU_ENTRY_POINT_RENAME(u_digit) -#define u_enumCharNames U_ICU_ENTRY_POINT_RENAME(u_enumCharNames) -#define u_enumCharTypes U_ICU_ENTRY_POINT_RENAME(u_enumCharTypes) -#define u_errorName U_ICU_ENTRY_POINT_RENAME(u_errorName) -#define u_fadopt U_ICU_ENTRY_POINT_RENAME(u_fadopt) -#define u_fclose U_ICU_ENTRY_POINT_RENAME(u_fclose) -#define u_feof U_ICU_ENTRY_POINT_RENAME(u_feof) -#define u_fflush U_ICU_ENTRY_POINT_RENAME(u_fflush) -#define u_fgetConverter U_ICU_ENTRY_POINT_RENAME(u_fgetConverter) -#define u_fgetNumberFormat U_ICU_ENTRY_POINT_RENAME(u_fgetNumberFormat) -#define u_fgetc U_ICU_ENTRY_POINT_RENAME(u_fgetc) -#define u_fgetcodepage U_ICU_ENTRY_POINT_RENAME(u_fgetcodepage) -#define u_fgetcx U_ICU_ENTRY_POINT_RENAME(u_fgetcx) -#define u_fgetfile U_ICU_ENTRY_POINT_RENAME(u_fgetfile) -#define u_fgetlocale U_ICU_ENTRY_POINT_RENAME(u_fgetlocale) -#define u_fgets U_ICU_ENTRY_POINT_RENAME(u_fgets) -#define u_file_read U_ICU_ENTRY_POINT_RENAME(u_file_read) -#define u_file_write U_ICU_ENTRY_POINT_RENAME(u_file_write) -#define u_file_write_flush U_ICU_ENTRY_POINT_RENAME(u_file_write_flush) -#define u_finit U_ICU_ENTRY_POINT_RENAME(u_finit) -#define u_flushDefaultConverter U_ICU_ENTRY_POINT_RENAME(u_flushDefaultConverter) -#define u_foldCase U_ICU_ENTRY_POINT_RENAME(u_foldCase) -#define u_fopen U_ICU_ENTRY_POINT_RENAME(u_fopen) -#define u_fopen_u U_ICU_ENTRY_POINT_RENAME(u_fopen_u) -#define u_forDigit U_ICU_ENTRY_POINT_RENAME(u_forDigit) -#define u_formatMessage U_ICU_ENTRY_POINT_RENAME(u_formatMessage) -#define u_formatMessageWithError U_ICU_ENTRY_POINT_RENAME(u_formatMessageWithError) -#define u_fprintf U_ICU_ENTRY_POINT_RENAME(u_fprintf) -#define u_fprintf_u U_ICU_ENTRY_POINT_RENAME(u_fprintf_u) -#define u_fputc U_ICU_ENTRY_POINT_RENAME(u_fputc) -#define u_fputs U_ICU_ENTRY_POINT_RENAME(u_fputs) -#define u_frewind U_ICU_ENTRY_POINT_RENAME(u_frewind) -#define u_fscanf U_ICU_ENTRY_POINT_RENAME(u_fscanf) -#define u_fscanf_u U_ICU_ENTRY_POINT_RENAME(u_fscanf_u) -#define u_fsetcodepage U_ICU_ENTRY_POINT_RENAME(u_fsetcodepage) -#define u_fsetlocale U_ICU_ENTRY_POINT_RENAME(u_fsetlocale) -#define u_fsettransliterator U_ICU_ENTRY_POINT_RENAME(u_fsettransliterator) -#define u_fstropen U_ICU_ENTRY_POINT_RENAME(u_fstropen) -#define u_fungetc U_ICU_ENTRY_POINT_RENAME(u_fungetc) -#define u_getBidiPairedBracket U_ICU_ENTRY_POINT_RENAME(u_getBidiPairedBracket) -#define u_getBinaryPropertySet U_ICU_ENTRY_POINT_RENAME(u_getBinaryPropertySet) -#define u_getCombiningClass U_ICU_ENTRY_POINT_RENAME(u_getCombiningClass) -#define u_getDataDirectory U_ICU_ENTRY_POINT_RENAME(u_getDataDirectory) -#define u_getDataVersion U_ICU_ENTRY_POINT_RENAME(u_getDataVersion) -#define u_getDefaultConverter U_ICU_ENTRY_POINT_RENAME(u_getDefaultConverter) -#define u_getFC_NFKC_Closure U_ICU_ENTRY_POINT_RENAME(u_getFC_NFKC_Closure) -#define u_getISOComment U_ICU_ENTRY_POINT_RENAME(u_getISOComment) -#define u_getIntPropertyMap U_ICU_ENTRY_POINT_RENAME(u_getIntPropertyMap) -#define u_getIntPropertyMaxValue U_ICU_ENTRY_POINT_RENAME(u_getIntPropertyMaxValue) -#define u_getIntPropertyMinValue U_ICU_ENTRY_POINT_RENAME(u_getIntPropertyMinValue) -#define u_getIntPropertyValue U_ICU_ENTRY_POINT_RENAME(u_getIntPropertyValue) -#define u_getMainProperties U_ICU_ENTRY_POINT_RENAME(u_getMainProperties) -#define u_getNumericValue U_ICU_ENTRY_POINT_RENAME(u_getNumericValue) -#define u_getPropertyEnum U_ICU_ENTRY_POINT_RENAME(u_getPropertyEnum) -#define u_getPropertyName U_ICU_ENTRY_POINT_RENAME(u_getPropertyName) -#define u_getPropertyValueEnum U_ICU_ENTRY_POINT_RENAME(u_getPropertyValueEnum) -#define u_getPropertyValueName U_ICU_ENTRY_POINT_RENAME(u_getPropertyValueName) -#define u_getTimeZoneFilesDirectory U_ICU_ENTRY_POINT_RENAME(u_getTimeZoneFilesDirectory) -#define u_getUnicodeProperties U_ICU_ENTRY_POINT_RENAME(u_getUnicodeProperties) -#define u_getUnicodeVersion U_ICU_ENTRY_POINT_RENAME(u_getUnicodeVersion) -#define u_getVersion U_ICU_ENTRY_POINT_RENAME(u_getVersion) -#define u_get_stdout U_ICU_ENTRY_POINT_RENAME(u_get_stdout) -#define u_hasBinaryProperty U_ICU_ENTRY_POINT_RENAME(u_hasBinaryProperty) -#define u_init U_ICU_ENTRY_POINT_RENAME(u_init) -#define u_isIDIgnorable U_ICU_ENTRY_POINT_RENAME(u_isIDIgnorable) -#define u_isIDPart U_ICU_ENTRY_POINT_RENAME(u_isIDPart) -#define u_isIDStart U_ICU_ENTRY_POINT_RENAME(u_isIDStart) -#define u_isISOControl U_ICU_ENTRY_POINT_RENAME(u_isISOControl) -#define u_isJavaIDPart U_ICU_ENTRY_POINT_RENAME(u_isJavaIDPart) -#define u_isJavaIDStart U_ICU_ENTRY_POINT_RENAME(u_isJavaIDStart) -#define u_isJavaSpaceChar U_ICU_ENTRY_POINT_RENAME(u_isJavaSpaceChar) -#define u_isMirrored U_ICU_ENTRY_POINT_RENAME(u_isMirrored) -#define u_isUAlphabetic U_ICU_ENTRY_POINT_RENAME(u_isUAlphabetic) -#define u_isULowercase U_ICU_ENTRY_POINT_RENAME(u_isULowercase) -#define u_isUUppercase U_ICU_ENTRY_POINT_RENAME(u_isUUppercase) -#define u_isUWhiteSpace U_ICU_ENTRY_POINT_RENAME(u_isUWhiteSpace) -#define u_isWhitespace U_ICU_ENTRY_POINT_RENAME(u_isWhitespace) -#define u_isalnum U_ICU_ENTRY_POINT_RENAME(u_isalnum) -#define u_isalnumPOSIX U_ICU_ENTRY_POINT_RENAME(u_isalnumPOSIX) -#define u_isalpha U_ICU_ENTRY_POINT_RENAME(u_isalpha) -#define u_isbase U_ICU_ENTRY_POINT_RENAME(u_isbase) -#define u_isblank U_ICU_ENTRY_POINT_RENAME(u_isblank) -#define u_iscntrl U_ICU_ENTRY_POINT_RENAME(u_iscntrl) -#define u_isdefined U_ICU_ENTRY_POINT_RENAME(u_isdefined) -#define u_isdigit U_ICU_ENTRY_POINT_RENAME(u_isdigit) -#define u_isgraph U_ICU_ENTRY_POINT_RENAME(u_isgraph) -#define u_isgraphPOSIX U_ICU_ENTRY_POINT_RENAME(u_isgraphPOSIX) -#define u_islower U_ICU_ENTRY_POINT_RENAME(u_islower) -#define u_isprint U_ICU_ENTRY_POINT_RENAME(u_isprint) -#define u_isprintPOSIX U_ICU_ENTRY_POINT_RENAME(u_isprintPOSIX) -#define u_ispunct U_ICU_ENTRY_POINT_RENAME(u_ispunct) -#define u_isspace U_ICU_ENTRY_POINT_RENAME(u_isspace) -#define u_istitle U_ICU_ENTRY_POINT_RENAME(u_istitle) -#define u_isupper U_ICU_ENTRY_POINT_RENAME(u_isupper) -#define u_isxdigit U_ICU_ENTRY_POINT_RENAME(u_isxdigit) -#define u_locbund_close U_ICU_ENTRY_POINT_RENAME(u_locbund_close) -#define u_locbund_getNumberFormat U_ICU_ENTRY_POINT_RENAME(u_locbund_getNumberFormat) -#define u_locbund_init U_ICU_ENTRY_POINT_RENAME(u_locbund_init) -#define u_memcasecmp U_ICU_ENTRY_POINT_RENAME(u_memcasecmp) -#define u_memchr U_ICU_ENTRY_POINT_RENAME(u_memchr) -#define u_memchr32 U_ICU_ENTRY_POINT_RENAME(u_memchr32) -#define u_memcmp U_ICU_ENTRY_POINT_RENAME(u_memcmp) -#define u_memcmpCodePointOrder U_ICU_ENTRY_POINT_RENAME(u_memcmpCodePointOrder) -#define u_memcpy U_ICU_ENTRY_POINT_RENAME(u_memcpy) -#define u_memmove U_ICU_ENTRY_POINT_RENAME(u_memmove) -#define u_memrchr U_ICU_ENTRY_POINT_RENAME(u_memrchr) -#define u_memrchr32 U_ICU_ENTRY_POINT_RENAME(u_memrchr32) -#define u_memset U_ICU_ENTRY_POINT_RENAME(u_memset) -#define u_parseMessage U_ICU_ENTRY_POINT_RENAME(u_parseMessage) -#define u_parseMessageWithError U_ICU_ENTRY_POINT_RENAME(u_parseMessageWithError) -#define u_printf U_ICU_ENTRY_POINT_RENAME(u_printf) -#define u_printf_parse U_ICU_ENTRY_POINT_RENAME(u_printf_parse) -#define u_printf_u U_ICU_ENTRY_POINT_RENAME(u_printf_u) -#define u_releaseDefaultConverter U_ICU_ENTRY_POINT_RENAME(u_releaseDefaultConverter) -#define u_scanf_parse U_ICU_ENTRY_POINT_RENAME(u_scanf_parse) -#define u_setAtomicIncDecFunctions U_ICU_ENTRY_POINT_RENAME(u_setAtomicIncDecFunctions) -#define u_setDataDirectory U_ICU_ENTRY_POINT_RENAME(u_setDataDirectory) -#define u_setMemoryFunctions U_ICU_ENTRY_POINT_RENAME(u_setMemoryFunctions) -#define u_setMutexFunctions U_ICU_ENTRY_POINT_RENAME(u_setMutexFunctions) -#define u_setTimeZoneFilesDirectory U_ICU_ENTRY_POINT_RENAME(u_setTimeZoneFilesDirectory) -#define u_shapeArabic U_ICU_ENTRY_POINT_RENAME(u_shapeArabic) -#define u_snprintf U_ICU_ENTRY_POINT_RENAME(u_snprintf) -#define u_snprintf_u U_ICU_ENTRY_POINT_RENAME(u_snprintf_u) -#define u_sprintf U_ICU_ENTRY_POINT_RENAME(u_sprintf) -#define u_sprintf_u U_ICU_ENTRY_POINT_RENAME(u_sprintf_u) -#define u_sscanf U_ICU_ENTRY_POINT_RENAME(u_sscanf) -#define u_sscanf_u U_ICU_ENTRY_POINT_RENAME(u_sscanf_u) -#define u_strCaseCompare U_ICU_ENTRY_POINT_RENAME(u_strCaseCompare) -#define u_strCompare U_ICU_ENTRY_POINT_RENAME(u_strCompare) -#define u_strCompareIter U_ICU_ENTRY_POINT_RENAME(u_strCompareIter) -#define u_strFindFirst U_ICU_ENTRY_POINT_RENAME(u_strFindFirst) -#define u_strFindLast U_ICU_ENTRY_POINT_RENAME(u_strFindLast) -#define u_strFoldCase U_ICU_ENTRY_POINT_RENAME(u_strFoldCase) -#define u_strFromJavaModifiedUTF8WithSub U_ICU_ENTRY_POINT_RENAME(u_strFromJavaModifiedUTF8WithSub) -#define u_strFromPunycode U_ICU_ENTRY_POINT_RENAME(u_strFromPunycode) -#define u_strFromUTF32 U_ICU_ENTRY_POINT_RENAME(u_strFromUTF32) -#define u_strFromUTF32WithSub U_ICU_ENTRY_POINT_RENAME(u_strFromUTF32WithSub) -#define u_strFromUTF8 U_ICU_ENTRY_POINT_RENAME(u_strFromUTF8) -#define u_strFromUTF8Lenient U_ICU_ENTRY_POINT_RENAME(u_strFromUTF8Lenient) -#define u_strFromUTF8WithSub U_ICU_ENTRY_POINT_RENAME(u_strFromUTF8WithSub) -#define u_strFromWCS U_ICU_ENTRY_POINT_RENAME(u_strFromWCS) -#define u_strHasMoreChar32Than U_ICU_ENTRY_POINT_RENAME(u_strHasMoreChar32Than) -#define u_strToJavaModifiedUTF8 U_ICU_ENTRY_POINT_RENAME(u_strToJavaModifiedUTF8) -#define u_strToLower U_ICU_ENTRY_POINT_RENAME(u_strToLower) -#define u_strToPunycode U_ICU_ENTRY_POINT_RENAME(u_strToPunycode) -#define u_strToTitle U_ICU_ENTRY_POINT_RENAME(u_strToTitle) -#define u_strToUTF32 U_ICU_ENTRY_POINT_RENAME(u_strToUTF32) -#define u_strToUTF32WithSub U_ICU_ENTRY_POINT_RENAME(u_strToUTF32WithSub) -#define u_strToUTF8 U_ICU_ENTRY_POINT_RENAME(u_strToUTF8) -#define u_strToUTF8WithSub U_ICU_ENTRY_POINT_RENAME(u_strToUTF8WithSub) -#define u_strToUpper U_ICU_ENTRY_POINT_RENAME(u_strToUpper) -#define u_strToWCS U_ICU_ENTRY_POINT_RENAME(u_strToWCS) -#define u_strcasecmp U_ICU_ENTRY_POINT_RENAME(u_strcasecmp) -#define u_strcat U_ICU_ENTRY_POINT_RENAME(u_strcat) -#define u_strchr U_ICU_ENTRY_POINT_RENAME(u_strchr) -#define u_strchr32 U_ICU_ENTRY_POINT_RENAME(u_strchr32) -#define u_strcmp U_ICU_ENTRY_POINT_RENAME(u_strcmp) -#define u_strcmpCodePointOrder U_ICU_ENTRY_POINT_RENAME(u_strcmpCodePointOrder) -#define u_strcmpFold U_ICU_ENTRY_POINT_RENAME(u_strcmpFold) -#define u_strcpy U_ICU_ENTRY_POINT_RENAME(u_strcpy) -#define u_strcspn U_ICU_ENTRY_POINT_RENAME(u_strcspn) -#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen) -#define u_strncasecmp U_ICU_ENTRY_POINT_RENAME(u_strncasecmp) -#define u_strncat U_ICU_ENTRY_POINT_RENAME(u_strncat) -#define u_strncmp U_ICU_ENTRY_POINT_RENAME(u_strncmp) -#define u_strncmpCodePointOrder U_ICU_ENTRY_POINT_RENAME(u_strncmpCodePointOrder) -#define u_strncpy U_ICU_ENTRY_POINT_RENAME(u_strncpy) -#define u_strpbrk U_ICU_ENTRY_POINT_RENAME(u_strpbrk) -#define u_strrchr U_ICU_ENTRY_POINT_RENAME(u_strrchr) -#define u_strrchr32 U_ICU_ENTRY_POINT_RENAME(u_strrchr32) -#define u_strrstr U_ICU_ENTRY_POINT_RENAME(u_strrstr) -#define u_strspn U_ICU_ENTRY_POINT_RENAME(u_strspn) -#define u_strstr U_ICU_ENTRY_POINT_RENAME(u_strstr) -#define u_strtok_r U_ICU_ENTRY_POINT_RENAME(u_strtok_r) -#define u_terminateChars U_ICU_ENTRY_POINT_RENAME(u_terminateChars) -#define u_terminateUChar32s U_ICU_ENTRY_POINT_RENAME(u_terminateUChar32s) -#define u_terminateUChars U_ICU_ENTRY_POINT_RENAME(u_terminateUChars) -#define u_terminateWChars U_ICU_ENTRY_POINT_RENAME(u_terminateWChars) -#define u_tolower U_ICU_ENTRY_POINT_RENAME(u_tolower) -#define u_totitle U_ICU_ENTRY_POINT_RENAME(u_totitle) -#define u_toupper U_ICU_ENTRY_POINT_RENAME(u_toupper) -#define u_uastrcpy U_ICU_ENTRY_POINT_RENAME(u_uastrcpy) -#define u_uastrncpy U_ICU_ENTRY_POINT_RENAME(u_uastrncpy) -#define u_unescape U_ICU_ENTRY_POINT_RENAME(u_unescape) -#define u_unescapeAt U_ICU_ENTRY_POINT_RENAME(u_unescapeAt) -#define u_versionFromString U_ICU_ENTRY_POINT_RENAME(u_versionFromString) -#define u_versionFromUString U_ICU_ENTRY_POINT_RENAME(u_versionFromUString) -#define u_versionToString U_ICU_ENTRY_POINT_RENAME(u_versionToString) -#define u_vformatMessage U_ICU_ENTRY_POINT_RENAME(u_vformatMessage) -#define u_vformatMessageWithError U_ICU_ENTRY_POINT_RENAME(u_vformatMessageWithError) -#define u_vfprintf U_ICU_ENTRY_POINT_RENAME(u_vfprintf) -#define u_vfprintf_u U_ICU_ENTRY_POINT_RENAME(u_vfprintf_u) -#define u_vfscanf U_ICU_ENTRY_POINT_RENAME(u_vfscanf) -#define u_vfscanf_u U_ICU_ENTRY_POINT_RENAME(u_vfscanf_u) -#define u_vparseMessage U_ICU_ENTRY_POINT_RENAME(u_vparseMessage) -#define u_vparseMessageWithError U_ICU_ENTRY_POINT_RENAME(u_vparseMessageWithError) -#define u_vsnprintf U_ICU_ENTRY_POINT_RENAME(u_vsnprintf) -#define u_vsnprintf_u U_ICU_ENTRY_POINT_RENAME(u_vsnprintf_u) -#define u_vsprintf U_ICU_ENTRY_POINT_RENAME(u_vsprintf) -#define u_vsprintf_u U_ICU_ENTRY_POINT_RENAME(u_vsprintf_u) -#define u_vsscanf U_ICU_ENTRY_POINT_RENAME(u_vsscanf) -#define u_vsscanf_u U_ICU_ENTRY_POINT_RENAME(u_vsscanf_u) -#define u_writeIdenticalLevelRun U_ICU_ENTRY_POINT_RENAME(u_writeIdenticalLevelRun) -#define ubidi_addPropertyStarts U_ICU_ENTRY_POINT_RENAME(ubidi_addPropertyStarts) -#define ubidi_close U_ICU_ENTRY_POINT_RENAME(ubidi_close) -#define ubidi_countParagraphs U_ICU_ENTRY_POINT_RENAME(ubidi_countParagraphs) -#define ubidi_countRuns U_ICU_ENTRY_POINT_RENAME(ubidi_countRuns) -#define ubidi_getBaseDirection U_ICU_ENTRY_POINT_RENAME(ubidi_getBaseDirection) -#define ubidi_getClass U_ICU_ENTRY_POINT_RENAME(ubidi_getClass) -#define ubidi_getClassCallback U_ICU_ENTRY_POINT_RENAME(ubidi_getClassCallback) -#define ubidi_getCustomizedClass U_ICU_ENTRY_POINT_RENAME(ubidi_getCustomizedClass) -#define ubidi_getDirection U_ICU_ENTRY_POINT_RENAME(ubidi_getDirection) -#define ubidi_getJoiningGroup U_ICU_ENTRY_POINT_RENAME(ubidi_getJoiningGroup) -#define ubidi_getJoiningType U_ICU_ENTRY_POINT_RENAME(ubidi_getJoiningType) -#define ubidi_getLength U_ICU_ENTRY_POINT_RENAME(ubidi_getLength) -#define ubidi_getLevelAt U_ICU_ENTRY_POINT_RENAME(ubidi_getLevelAt) -#define ubidi_getLevels U_ICU_ENTRY_POINT_RENAME(ubidi_getLevels) -#define ubidi_getLogicalIndex U_ICU_ENTRY_POINT_RENAME(ubidi_getLogicalIndex) -#define ubidi_getLogicalMap U_ICU_ENTRY_POINT_RENAME(ubidi_getLogicalMap) -#define ubidi_getLogicalRun U_ICU_ENTRY_POINT_RENAME(ubidi_getLogicalRun) -#define ubidi_getMaxValue U_ICU_ENTRY_POINT_RENAME(ubidi_getMaxValue) -#define ubidi_getMemory U_ICU_ENTRY_POINT_RENAME(ubidi_getMemory) -#define ubidi_getMirror U_ICU_ENTRY_POINT_RENAME(ubidi_getMirror) -#define ubidi_getPairedBracket U_ICU_ENTRY_POINT_RENAME(ubidi_getPairedBracket) -#define ubidi_getPairedBracketType U_ICU_ENTRY_POINT_RENAME(ubidi_getPairedBracketType) -#define ubidi_getParaLevel U_ICU_ENTRY_POINT_RENAME(ubidi_getParaLevel) -#define ubidi_getParaLevelAtIndex U_ICU_ENTRY_POINT_RENAME(ubidi_getParaLevelAtIndex) -#define ubidi_getParagraph U_ICU_ENTRY_POINT_RENAME(ubidi_getParagraph) -#define ubidi_getParagraphByIndex U_ICU_ENTRY_POINT_RENAME(ubidi_getParagraphByIndex) -#define ubidi_getProcessedLength U_ICU_ENTRY_POINT_RENAME(ubidi_getProcessedLength) -#define ubidi_getReorderingMode U_ICU_ENTRY_POINT_RENAME(ubidi_getReorderingMode) -#define ubidi_getReorderingOptions U_ICU_ENTRY_POINT_RENAME(ubidi_getReorderingOptions) -#define ubidi_getResultLength U_ICU_ENTRY_POINT_RENAME(ubidi_getResultLength) -#define ubidi_getRuns U_ICU_ENTRY_POINT_RENAME(ubidi_getRuns) -#define ubidi_getText U_ICU_ENTRY_POINT_RENAME(ubidi_getText) -#define ubidi_getVisualIndex U_ICU_ENTRY_POINT_RENAME(ubidi_getVisualIndex) -#define ubidi_getVisualMap U_ICU_ENTRY_POINT_RENAME(ubidi_getVisualMap) -#define ubidi_getVisualRun U_ICU_ENTRY_POINT_RENAME(ubidi_getVisualRun) -#define ubidi_invertMap U_ICU_ENTRY_POINT_RENAME(ubidi_invertMap) -#define ubidi_isBidiControl U_ICU_ENTRY_POINT_RENAME(ubidi_isBidiControl) -#define ubidi_isInverse U_ICU_ENTRY_POINT_RENAME(ubidi_isInverse) -#define ubidi_isJoinControl U_ICU_ENTRY_POINT_RENAME(ubidi_isJoinControl) -#define ubidi_isMirrored U_ICU_ENTRY_POINT_RENAME(ubidi_isMirrored) -#define ubidi_isOrderParagraphsLTR U_ICU_ENTRY_POINT_RENAME(ubidi_isOrderParagraphsLTR) -#define ubidi_open U_ICU_ENTRY_POINT_RENAME(ubidi_open) -#define ubidi_openSized U_ICU_ENTRY_POINT_RENAME(ubidi_openSized) -#define ubidi_orderParagraphsLTR U_ICU_ENTRY_POINT_RENAME(ubidi_orderParagraphsLTR) -#define ubidi_reorderLogical U_ICU_ENTRY_POINT_RENAME(ubidi_reorderLogical) -#define ubidi_reorderVisual U_ICU_ENTRY_POINT_RENAME(ubidi_reorderVisual) -#define ubidi_setClassCallback U_ICU_ENTRY_POINT_RENAME(ubidi_setClassCallback) -#define ubidi_setContext U_ICU_ENTRY_POINT_RENAME(ubidi_setContext) -#define ubidi_setInverse U_ICU_ENTRY_POINT_RENAME(ubidi_setInverse) -#define ubidi_setLine U_ICU_ENTRY_POINT_RENAME(ubidi_setLine) -#define ubidi_setPara U_ICU_ENTRY_POINT_RENAME(ubidi_setPara) -#define ubidi_setReorderingMode U_ICU_ENTRY_POINT_RENAME(ubidi_setReorderingMode) -#define ubidi_setReorderingOptions U_ICU_ENTRY_POINT_RENAME(ubidi_setReorderingOptions) -#define ubidi_writeReordered U_ICU_ENTRY_POINT_RENAME(ubidi_writeReordered) -#define ubidi_writeReverse U_ICU_ENTRY_POINT_RENAME(ubidi_writeReverse) -#define ubiditransform_close U_ICU_ENTRY_POINT_RENAME(ubiditransform_close) -#define ubiditransform_open U_ICU_ENTRY_POINT_RENAME(ubiditransform_open) -#define ubiditransform_transform U_ICU_ENTRY_POINT_RENAME(ubiditransform_transform) -#define ublock_getCode U_ICU_ENTRY_POINT_RENAME(ublock_getCode) -#define ubrk_close U_ICU_ENTRY_POINT_RENAME(ubrk_close) -#define ubrk_countAvailable U_ICU_ENTRY_POINT_RENAME(ubrk_countAvailable) -#define ubrk_current U_ICU_ENTRY_POINT_RENAME(ubrk_current) -#define ubrk_first U_ICU_ENTRY_POINT_RENAME(ubrk_first) -#define ubrk_following U_ICU_ENTRY_POINT_RENAME(ubrk_following) -#define ubrk_getAvailable U_ICU_ENTRY_POINT_RENAME(ubrk_getAvailable) -#define ubrk_getBinaryRules U_ICU_ENTRY_POINT_RENAME(ubrk_getBinaryRules) -#define ubrk_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ubrk_getLocaleByType) -#define ubrk_getRuleStatus U_ICU_ENTRY_POINT_RENAME(ubrk_getRuleStatus) -#define ubrk_getRuleStatusVec U_ICU_ENTRY_POINT_RENAME(ubrk_getRuleStatusVec) -#define ubrk_isBoundary U_ICU_ENTRY_POINT_RENAME(ubrk_isBoundary) -#define ubrk_last U_ICU_ENTRY_POINT_RENAME(ubrk_last) -#define ubrk_next U_ICU_ENTRY_POINT_RENAME(ubrk_next) -#define ubrk_open U_ICU_ENTRY_POINT_RENAME(ubrk_open) -#define ubrk_openBinaryRules U_ICU_ENTRY_POINT_RENAME(ubrk_openBinaryRules) -#define ubrk_openRules U_ICU_ENTRY_POINT_RENAME(ubrk_openRules) -#define ubrk_preceding U_ICU_ENTRY_POINT_RENAME(ubrk_preceding) -#define ubrk_previous U_ICU_ENTRY_POINT_RENAME(ubrk_previous) -#define ubrk_refreshUText U_ICU_ENTRY_POINT_RENAME(ubrk_refreshUText) -#define ubrk_safeClone U_ICU_ENTRY_POINT_RENAME(ubrk_safeClone) -#define ubrk_setText U_ICU_ENTRY_POINT_RENAME(ubrk_setText) -#define ubrk_setUText U_ICU_ENTRY_POINT_RENAME(ubrk_setUText) -#define ubrk_swap U_ICU_ENTRY_POINT_RENAME(ubrk_swap) -#define ucache_compareKeys U_ICU_ENTRY_POINT_RENAME(ucache_compareKeys) -#define ucache_deleteKey U_ICU_ENTRY_POINT_RENAME(ucache_deleteKey) -#define ucache_hashKeys U_ICU_ENTRY_POINT_RENAME(ucache_hashKeys) -#define ucal_add U_ICU_ENTRY_POINT_RENAME(ucal_add) -#define ucal_clear U_ICU_ENTRY_POINT_RENAME(ucal_clear) -#define ucal_clearField U_ICU_ENTRY_POINT_RENAME(ucal_clearField) -#define ucal_clone U_ICU_ENTRY_POINT_RENAME(ucal_clone) -#define ucal_close U_ICU_ENTRY_POINT_RENAME(ucal_close) -#define ucal_countAvailable U_ICU_ENTRY_POINT_RENAME(ucal_countAvailable) -#define ucal_equivalentTo U_ICU_ENTRY_POINT_RENAME(ucal_equivalentTo) -#define ucal_get U_ICU_ENTRY_POINT_RENAME(ucal_get) -#define ucal_getAttribute U_ICU_ENTRY_POINT_RENAME(ucal_getAttribute) -#define ucal_getAvailable U_ICU_ENTRY_POINT_RENAME(ucal_getAvailable) -#define ucal_getCanonicalTimeZoneID U_ICU_ENTRY_POINT_RENAME(ucal_getCanonicalTimeZoneID) -#define ucal_getDSTSavings U_ICU_ENTRY_POINT_RENAME(ucal_getDSTSavings) -#define ucal_getDayOfWeekType U_ICU_ENTRY_POINT_RENAME(ucal_getDayOfWeekType) -#define ucal_getDefaultTimeZone U_ICU_ENTRY_POINT_RENAME(ucal_getDefaultTimeZone) -#define ucal_getFieldDifference U_ICU_ENTRY_POINT_RENAME(ucal_getFieldDifference) -#define ucal_getGregorianChange U_ICU_ENTRY_POINT_RENAME(ucal_getGregorianChange) -#define ucal_getKeywordValuesForLocale U_ICU_ENTRY_POINT_RENAME(ucal_getKeywordValuesForLocale) -#define ucal_getLimit U_ICU_ENTRY_POINT_RENAME(ucal_getLimit) -#define ucal_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ucal_getLocaleByType) -#define ucal_getMillis U_ICU_ENTRY_POINT_RENAME(ucal_getMillis) -#define ucal_getNow U_ICU_ENTRY_POINT_RENAME(ucal_getNow) -#define ucal_getTZDataVersion U_ICU_ENTRY_POINT_RENAME(ucal_getTZDataVersion) -#define ucal_getTimeZoneDisplayName U_ICU_ENTRY_POINT_RENAME(ucal_getTimeZoneDisplayName) -#define ucal_getTimeZoneID U_ICU_ENTRY_POINT_RENAME(ucal_getTimeZoneID) -#define ucal_getTimeZoneIDForWindowsID U_ICU_ENTRY_POINT_RENAME(ucal_getTimeZoneIDForWindowsID) -#define ucal_getTimeZoneTransitionDate U_ICU_ENTRY_POINT_RENAME(ucal_getTimeZoneTransitionDate) -#define ucal_getType U_ICU_ENTRY_POINT_RENAME(ucal_getType) -#define ucal_getWeekendTransition U_ICU_ENTRY_POINT_RENAME(ucal_getWeekendTransition) -#define ucal_getWindowsTimeZoneID U_ICU_ENTRY_POINT_RENAME(ucal_getWindowsTimeZoneID) -#define ucal_inDaylightTime U_ICU_ENTRY_POINT_RENAME(ucal_inDaylightTime) -#define ucal_isSet U_ICU_ENTRY_POINT_RENAME(ucal_isSet) -#define ucal_isWeekend U_ICU_ENTRY_POINT_RENAME(ucal_isWeekend) -#define ucal_open U_ICU_ENTRY_POINT_RENAME(ucal_open) -#define ucal_openCountryTimeZones U_ICU_ENTRY_POINT_RENAME(ucal_openCountryTimeZones) -#define ucal_openTimeZoneIDEnumeration U_ICU_ENTRY_POINT_RENAME(ucal_openTimeZoneIDEnumeration) -#define ucal_openTimeZones U_ICU_ENTRY_POINT_RENAME(ucal_openTimeZones) -#define ucal_roll U_ICU_ENTRY_POINT_RENAME(ucal_roll) -#define ucal_set U_ICU_ENTRY_POINT_RENAME(ucal_set) -#define ucal_setAttribute U_ICU_ENTRY_POINT_RENAME(ucal_setAttribute) -#define ucal_setDate U_ICU_ENTRY_POINT_RENAME(ucal_setDate) -#define ucal_setDateTime U_ICU_ENTRY_POINT_RENAME(ucal_setDateTime) -#define ucal_setDefaultTimeZone U_ICU_ENTRY_POINT_RENAME(ucal_setDefaultTimeZone) -#define ucal_setGregorianChange U_ICU_ENTRY_POINT_RENAME(ucal_setGregorianChange) -#define ucal_setMillis U_ICU_ENTRY_POINT_RENAME(ucal_setMillis) -#define ucal_setTimeZone U_ICU_ENTRY_POINT_RENAME(ucal_setTimeZone) -#define ucase_addCaseClosure U_ICU_ENTRY_POINT_RENAME(ucase_addCaseClosure) -#define ucase_addPropertyStarts U_ICU_ENTRY_POINT_RENAME(ucase_addPropertyStarts) -#define ucase_addStringCaseClosure U_ICU_ENTRY_POINT_RENAME(ucase_addStringCaseClosure) -#define ucase_fold U_ICU_ENTRY_POINT_RENAME(ucase_fold) -#define ucase_getCaseLocale U_ICU_ENTRY_POINT_RENAME(ucase_getCaseLocale) -#define ucase_getTrie U_ICU_ENTRY_POINT_RENAME(ucase_getTrie) -#define ucase_getType U_ICU_ENTRY_POINT_RENAME(ucase_getType) -#define ucase_getTypeOrIgnorable U_ICU_ENTRY_POINT_RENAME(ucase_getTypeOrIgnorable) -#define ucase_hasBinaryProperty U_ICU_ENTRY_POINT_RENAME(ucase_hasBinaryProperty) -#define ucase_isCaseSensitive U_ICU_ENTRY_POINT_RENAME(ucase_isCaseSensitive) -#define ucase_isSoftDotted U_ICU_ENTRY_POINT_RENAME(ucase_isSoftDotted) -#define ucase_toFullFolding U_ICU_ENTRY_POINT_RENAME(ucase_toFullFolding) -#define ucase_toFullLower U_ICU_ENTRY_POINT_RENAME(ucase_toFullLower) -#define ucase_toFullTitle U_ICU_ENTRY_POINT_RENAME(ucase_toFullTitle) -#define ucase_toFullUpper U_ICU_ENTRY_POINT_RENAME(ucase_toFullUpper) -#define ucase_tolower U_ICU_ENTRY_POINT_RENAME(ucase_tolower) -#define ucase_totitle U_ICU_ENTRY_POINT_RENAME(ucase_totitle) -#define ucase_toupper U_ICU_ENTRY_POINT_RENAME(ucase_toupper) -#define ucasemap_close U_ICU_ENTRY_POINT_RENAME(ucasemap_close) -#define ucasemap_getBreakIterator U_ICU_ENTRY_POINT_RENAME(ucasemap_getBreakIterator) -#define ucasemap_getLocale U_ICU_ENTRY_POINT_RENAME(ucasemap_getLocale) -#define ucasemap_getOptions U_ICU_ENTRY_POINT_RENAME(ucasemap_getOptions) -#define ucasemap_internalUTF8ToTitle U_ICU_ENTRY_POINT_RENAME(ucasemap_internalUTF8ToTitle) -#define ucasemap_mapUTF8 U_ICU_ENTRY_POINT_RENAME(ucasemap_mapUTF8) -#define ucasemap_open U_ICU_ENTRY_POINT_RENAME(ucasemap_open) -#define ucasemap_setBreakIterator U_ICU_ENTRY_POINT_RENAME(ucasemap_setBreakIterator) -#define ucasemap_setLocale U_ICU_ENTRY_POINT_RENAME(ucasemap_setLocale) -#define ucasemap_setOptions U_ICU_ENTRY_POINT_RENAME(ucasemap_setOptions) -#define ucasemap_toTitle U_ICU_ENTRY_POINT_RENAME(ucasemap_toTitle) -#define ucasemap_utf8FoldCase U_ICU_ENTRY_POINT_RENAME(ucasemap_utf8FoldCase) -#define ucasemap_utf8ToLower U_ICU_ENTRY_POINT_RENAME(ucasemap_utf8ToLower) -#define ucasemap_utf8ToTitle U_ICU_ENTRY_POINT_RENAME(ucasemap_utf8ToTitle) -#define ucasemap_utf8ToUpper U_ICU_ENTRY_POINT_RENAME(ucasemap_utf8ToUpper) -#define ucfpos_close U_ICU_ENTRY_POINT_RENAME(ucfpos_close) -#define ucfpos_constrainCategory U_ICU_ENTRY_POINT_RENAME(ucfpos_constrainCategory) -#define ucfpos_constrainField U_ICU_ENTRY_POINT_RENAME(ucfpos_constrainField) -#define ucfpos_getCategory U_ICU_ENTRY_POINT_RENAME(ucfpos_getCategory) -#define ucfpos_getField U_ICU_ENTRY_POINT_RENAME(ucfpos_getField) -#define ucfpos_getIndexes U_ICU_ENTRY_POINT_RENAME(ucfpos_getIndexes) -#define ucfpos_getInt64IterationContext U_ICU_ENTRY_POINT_RENAME(ucfpos_getInt64IterationContext) -#define ucfpos_matchesField U_ICU_ENTRY_POINT_RENAME(ucfpos_matchesField) -#define ucfpos_open U_ICU_ENTRY_POINT_RENAME(ucfpos_open) -#define ucfpos_reset U_ICU_ENTRY_POINT_RENAME(ucfpos_reset) -#define ucfpos_setInt64IterationContext U_ICU_ENTRY_POINT_RENAME(ucfpos_setInt64IterationContext) -#define ucfpos_setState U_ICU_ENTRY_POINT_RENAME(ucfpos_setState) -#define uchar_addPropertyStarts U_ICU_ENTRY_POINT_RENAME(uchar_addPropertyStarts) -#define uchar_swapNames U_ICU_ENTRY_POINT_RENAME(uchar_swapNames) -#define ucln_cleanupOne U_ICU_ENTRY_POINT_RENAME(ucln_cleanupOne) -#define ucln_common_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_common_registerCleanup) -#define ucln_i18n_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_i18n_registerCleanup) -#define ucln_io_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_io_registerCleanup) -#define ucln_lib_cleanup U_ICU_ENTRY_POINT_RENAME(ucln_lib_cleanup) -#define ucln_registerCleanup U_ICU_ENTRY_POINT_RENAME(ucln_registerCleanup) -#define ucnv_MBCSFromUChar32 U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSFromUChar32) -#define ucnv_MBCSFromUnicodeWithOffsets U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSFromUnicodeWithOffsets) -#define ucnv_MBCSGetFilteredUnicodeSetForUnicode U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSGetFilteredUnicodeSetForUnicode) -#define ucnv_MBCSGetType U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSGetType) -#define ucnv_MBCSGetUnicodeSetForUnicode U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSGetUnicodeSetForUnicode) -#define ucnv_MBCSIsLeadByte U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSIsLeadByte) -#define ucnv_MBCSSimpleGetNextUChar U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSSimpleGetNextUChar) -#define ucnv_MBCSToUnicodeWithOffsets U_ICU_ENTRY_POINT_RENAME(ucnv_MBCSToUnicodeWithOffsets) -#define ucnv_bld_countAvailableConverters U_ICU_ENTRY_POINT_RENAME(ucnv_bld_countAvailableConverters) -#define ucnv_bld_getAvailableConverter U_ICU_ENTRY_POINT_RENAME(ucnv_bld_getAvailableConverter) -#define ucnv_canCreateConverter U_ICU_ENTRY_POINT_RENAME(ucnv_canCreateConverter) -#define ucnv_cbFromUWriteBytes U_ICU_ENTRY_POINT_RENAME(ucnv_cbFromUWriteBytes) -#define ucnv_cbFromUWriteSub U_ICU_ENTRY_POINT_RENAME(ucnv_cbFromUWriteSub) -#define ucnv_cbFromUWriteUChars U_ICU_ENTRY_POINT_RENAME(ucnv_cbFromUWriteUChars) -#define ucnv_cbToUWriteSub U_ICU_ENTRY_POINT_RENAME(ucnv_cbToUWriteSub) -#define ucnv_cbToUWriteUChars U_ICU_ENTRY_POINT_RENAME(ucnv_cbToUWriteUChars) -#define ucnv_close U_ICU_ENTRY_POINT_RENAME(ucnv_close) -#define ucnv_compareNames U_ICU_ENTRY_POINT_RENAME(ucnv_compareNames) -#define ucnv_convert U_ICU_ENTRY_POINT_RENAME(ucnv_convert) -#define ucnv_convertEx U_ICU_ENTRY_POINT_RENAME(ucnv_convertEx) -#define ucnv_countAliases U_ICU_ENTRY_POINT_RENAME(ucnv_countAliases) -#define ucnv_countAvailable U_ICU_ENTRY_POINT_RENAME(ucnv_countAvailable) -#define ucnv_countStandards U_ICU_ENTRY_POINT_RENAME(ucnv_countStandards) -#define ucnv_createAlgorithmicConverter U_ICU_ENTRY_POINT_RENAME(ucnv_createAlgorithmicConverter) -#define ucnv_createConverter U_ICU_ENTRY_POINT_RENAME(ucnv_createConverter) -#define ucnv_createConverterFromPackage U_ICU_ENTRY_POINT_RENAME(ucnv_createConverterFromPackage) -#define ucnv_createConverterFromSharedData U_ICU_ENTRY_POINT_RENAME(ucnv_createConverterFromSharedData) -#define ucnv_detectUnicodeSignature U_ICU_ENTRY_POINT_RENAME(ucnv_detectUnicodeSignature) -#define ucnv_enableCleanup U_ICU_ENTRY_POINT_RENAME(ucnv_enableCleanup) -#define ucnv_extContinueMatchFromU U_ICU_ENTRY_POINT_RENAME(ucnv_extContinueMatchFromU) -#define ucnv_extContinueMatchToU U_ICU_ENTRY_POINT_RENAME(ucnv_extContinueMatchToU) -#define ucnv_extGetUnicodeSet U_ICU_ENTRY_POINT_RENAME(ucnv_extGetUnicodeSet) -#define ucnv_extInitialMatchFromU U_ICU_ENTRY_POINT_RENAME(ucnv_extInitialMatchFromU) -#define ucnv_extInitialMatchToU U_ICU_ENTRY_POINT_RENAME(ucnv_extInitialMatchToU) -#define ucnv_extSimpleMatchFromU U_ICU_ENTRY_POINT_RENAME(ucnv_extSimpleMatchFromU) -#define ucnv_extSimpleMatchToU U_ICU_ENTRY_POINT_RENAME(ucnv_extSimpleMatchToU) -#define ucnv_fixFileSeparator U_ICU_ENTRY_POINT_RENAME(ucnv_fixFileSeparator) -#define ucnv_flushCache U_ICU_ENTRY_POINT_RENAME(ucnv_flushCache) -#define ucnv_fromAlgorithmic U_ICU_ENTRY_POINT_RENAME(ucnv_fromAlgorithmic) -#define ucnv_fromUChars U_ICU_ENTRY_POINT_RENAME(ucnv_fromUChars) -#define ucnv_fromUCountPending U_ICU_ENTRY_POINT_RENAME(ucnv_fromUCountPending) -#define ucnv_fromUWriteBytes U_ICU_ENTRY_POINT_RENAME(ucnv_fromUWriteBytes) -#define ucnv_fromUnicode U_ICU_ENTRY_POINT_RENAME(ucnv_fromUnicode) -#define ucnv_fromUnicode_UTF8 U_ICU_ENTRY_POINT_RENAME(ucnv_fromUnicode_UTF8) -#define ucnv_fromUnicode_UTF8_OFFSETS_LOGIC U_ICU_ENTRY_POINT_RENAME(ucnv_fromUnicode_UTF8_OFFSETS_LOGIC) -#define ucnv_getAlias U_ICU_ENTRY_POINT_RENAME(ucnv_getAlias) -#define ucnv_getAliases U_ICU_ENTRY_POINT_RENAME(ucnv_getAliases) -#define ucnv_getAvailableName U_ICU_ENTRY_POINT_RENAME(ucnv_getAvailableName) -#define ucnv_getCCSID U_ICU_ENTRY_POINT_RENAME(ucnv_getCCSID) -#define ucnv_getCanonicalName U_ICU_ENTRY_POINT_RENAME(ucnv_getCanonicalName) -#define ucnv_getCompleteUnicodeSet U_ICU_ENTRY_POINT_RENAME(ucnv_getCompleteUnicodeSet) -#define ucnv_getDefaultName U_ICU_ENTRY_POINT_RENAME(ucnv_getDefaultName) -#define ucnv_getDisplayName U_ICU_ENTRY_POINT_RENAME(ucnv_getDisplayName) -#define ucnv_getFromUCallBack U_ICU_ENTRY_POINT_RENAME(ucnv_getFromUCallBack) -#define ucnv_getInvalidChars U_ICU_ENTRY_POINT_RENAME(ucnv_getInvalidChars) -#define ucnv_getInvalidUChars U_ICU_ENTRY_POINT_RENAME(ucnv_getInvalidUChars) -#define ucnv_getMaxCharSize U_ICU_ENTRY_POINT_RENAME(ucnv_getMaxCharSize) -#define ucnv_getMinCharSize U_ICU_ENTRY_POINT_RENAME(ucnv_getMinCharSize) -#define ucnv_getName U_ICU_ENTRY_POINT_RENAME(ucnv_getName) -#define ucnv_getNextUChar U_ICU_ENTRY_POINT_RENAME(ucnv_getNextUChar) -#define ucnv_getNonSurrogateUnicodeSet U_ICU_ENTRY_POINT_RENAME(ucnv_getNonSurrogateUnicodeSet) -#define ucnv_getPlatform U_ICU_ENTRY_POINT_RENAME(ucnv_getPlatform) -#define ucnv_getStandard U_ICU_ENTRY_POINT_RENAME(ucnv_getStandard) -#define ucnv_getStandardName U_ICU_ENTRY_POINT_RENAME(ucnv_getStandardName) -#define ucnv_getStarters U_ICU_ENTRY_POINT_RENAME(ucnv_getStarters) -#define ucnv_getSubstChars U_ICU_ENTRY_POINT_RENAME(ucnv_getSubstChars) -#define ucnv_getToUCallBack U_ICU_ENTRY_POINT_RENAME(ucnv_getToUCallBack) -#define ucnv_getType U_ICU_ENTRY_POINT_RENAME(ucnv_getType) -#define ucnv_getUnicodeSet U_ICU_ENTRY_POINT_RENAME(ucnv_getUnicodeSet) -#define ucnv_incrementRefCount U_ICU_ENTRY_POINT_RENAME(ucnv_incrementRefCount) -#define ucnv_io_countKnownConverters U_ICU_ENTRY_POINT_RENAME(ucnv_io_countKnownConverters) -#define ucnv_io_getConverterName U_ICU_ENTRY_POINT_RENAME(ucnv_io_getConverterName) -#define ucnv_io_stripASCIIForCompare U_ICU_ENTRY_POINT_RENAME(ucnv_io_stripASCIIForCompare) -#define ucnv_io_stripEBCDICForCompare U_ICU_ENTRY_POINT_RENAME(ucnv_io_stripEBCDICForCompare) -#define ucnv_isAmbiguous U_ICU_ENTRY_POINT_RENAME(ucnv_isAmbiguous) -#define ucnv_isFixedWidth U_ICU_ENTRY_POINT_RENAME(ucnv_isFixedWidth) -#define ucnv_load U_ICU_ENTRY_POINT_RENAME(ucnv_load) -#define ucnv_loadSharedData U_ICU_ENTRY_POINT_RENAME(ucnv_loadSharedData) -#define ucnv_open U_ICU_ENTRY_POINT_RENAME(ucnv_open) -#define ucnv_openAllNames U_ICU_ENTRY_POINT_RENAME(ucnv_openAllNames) -#define ucnv_openCCSID U_ICU_ENTRY_POINT_RENAME(ucnv_openCCSID) -#define ucnv_openPackage U_ICU_ENTRY_POINT_RENAME(ucnv_openPackage) -#define ucnv_openStandardNames U_ICU_ENTRY_POINT_RENAME(ucnv_openStandardNames) -#define ucnv_openU U_ICU_ENTRY_POINT_RENAME(ucnv_openU) -#define ucnv_reset U_ICU_ENTRY_POINT_RENAME(ucnv_reset) -#define ucnv_resetFromUnicode U_ICU_ENTRY_POINT_RENAME(ucnv_resetFromUnicode) -#define ucnv_resetToUnicode U_ICU_ENTRY_POINT_RENAME(ucnv_resetToUnicode) -#define ucnv_safeClone U_ICU_ENTRY_POINT_RENAME(ucnv_safeClone) -#define ucnv_setDefaultName U_ICU_ENTRY_POINT_RENAME(ucnv_setDefaultName) -#define ucnv_setFallback U_ICU_ENTRY_POINT_RENAME(ucnv_setFallback) -#define ucnv_setFromUCallBack U_ICU_ENTRY_POINT_RENAME(ucnv_setFromUCallBack) -#define ucnv_setSubstChars U_ICU_ENTRY_POINT_RENAME(ucnv_setSubstChars) -#define ucnv_setSubstString U_ICU_ENTRY_POINT_RENAME(ucnv_setSubstString) -#define ucnv_setToUCallBack U_ICU_ENTRY_POINT_RENAME(ucnv_setToUCallBack) -#define ucnv_swap U_ICU_ENTRY_POINT_RENAME(ucnv_swap) -#define ucnv_swapAliases U_ICU_ENTRY_POINT_RENAME(ucnv_swapAliases) -#define ucnv_toAlgorithmic U_ICU_ENTRY_POINT_RENAME(ucnv_toAlgorithmic) -#define ucnv_toUChars U_ICU_ENTRY_POINT_RENAME(ucnv_toUChars) -#define ucnv_toUCountPending U_ICU_ENTRY_POINT_RENAME(ucnv_toUCountPending) -#define ucnv_toUWriteCodePoint U_ICU_ENTRY_POINT_RENAME(ucnv_toUWriteCodePoint) -#define ucnv_toUWriteUChars U_ICU_ENTRY_POINT_RENAME(ucnv_toUWriteUChars) -#define ucnv_toUnicode U_ICU_ENTRY_POINT_RENAME(ucnv_toUnicode) -#define ucnv_unload U_ICU_ENTRY_POINT_RENAME(ucnv_unload) -#define ucnv_unloadSharedDataIfReady U_ICU_ENTRY_POINT_RENAME(ucnv_unloadSharedDataIfReady) -#define ucnv_usesFallback U_ICU_ENTRY_POINT_RENAME(ucnv_usesFallback) -#define ucnvsel_close U_ICU_ENTRY_POINT_RENAME(ucnvsel_close) -#define ucnvsel_open U_ICU_ENTRY_POINT_RENAME(ucnvsel_open) -#define ucnvsel_openFromSerialized U_ICU_ENTRY_POINT_RENAME(ucnvsel_openFromSerialized) -#define ucnvsel_selectForString U_ICU_ENTRY_POINT_RENAME(ucnvsel_selectForString) -#define ucnvsel_selectForUTF8 U_ICU_ENTRY_POINT_RENAME(ucnvsel_selectForUTF8) -#define ucnvsel_serialize U_ICU_ENTRY_POINT_RENAME(ucnvsel_serialize) -#define ucol_cloneBinary U_ICU_ENTRY_POINT_RENAME(ucol_cloneBinary) -#define ucol_close U_ICU_ENTRY_POINT_RENAME(ucol_close) -#define ucol_closeElements U_ICU_ENTRY_POINT_RENAME(ucol_closeElements) -#define ucol_countAvailable U_ICU_ENTRY_POINT_RENAME(ucol_countAvailable) -#define ucol_equal U_ICU_ENTRY_POINT_RENAME(ucol_equal) -#define ucol_equals U_ICU_ENTRY_POINT_RENAME(ucol_equals) -#define ucol_getAttribute U_ICU_ENTRY_POINT_RENAME(ucol_getAttribute) -#define ucol_getAvailable U_ICU_ENTRY_POINT_RENAME(ucol_getAvailable) -#define ucol_getBound U_ICU_ENTRY_POINT_RENAME(ucol_getBound) -#define ucol_getContractions U_ICU_ENTRY_POINT_RENAME(ucol_getContractions) -#define ucol_getContractionsAndExpansions U_ICU_ENTRY_POINT_RENAME(ucol_getContractionsAndExpansions) -#define ucol_getDisplayName U_ICU_ENTRY_POINT_RENAME(ucol_getDisplayName) -#define ucol_getEquivalentReorderCodes U_ICU_ENTRY_POINT_RENAME(ucol_getEquivalentReorderCodes) -#define ucol_getFunctionalEquivalent U_ICU_ENTRY_POINT_RENAME(ucol_getFunctionalEquivalent) -#define ucol_getKeywordValues U_ICU_ENTRY_POINT_RENAME(ucol_getKeywordValues) -#define ucol_getKeywordValuesForLocale U_ICU_ENTRY_POINT_RENAME(ucol_getKeywordValuesForLocale) -#define ucol_getKeywords U_ICU_ENTRY_POINT_RENAME(ucol_getKeywords) -#define ucol_getLocale U_ICU_ENTRY_POINT_RENAME(ucol_getLocale) -#define ucol_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ucol_getLocaleByType) -#define ucol_getMaxExpansion U_ICU_ENTRY_POINT_RENAME(ucol_getMaxExpansion) -#define ucol_getMaxVariable U_ICU_ENTRY_POINT_RENAME(ucol_getMaxVariable) -#define ucol_getOffset U_ICU_ENTRY_POINT_RENAME(ucol_getOffset) -#define ucol_getReorderCodes U_ICU_ENTRY_POINT_RENAME(ucol_getReorderCodes) -#define ucol_getRules U_ICU_ENTRY_POINT_RENAME(ucol_getRules) -#define ucol_getRulesEx U_ICU_ENTRY_POINT_RENAME(ucol_getRulesEx) -#define ucol_getShortDefinitionString U_ICU_ENTRY_POINT_RENAME(ucol_getShortDefinitionString) -#define ucol_getSortKey U_ICU_ENTRY_POINT_RENAME(ucol_getSortKey) -#define ucol_getStrength U_ICU_ENTRY_POINT_RENAME(ucol_getStrength) -#define ucol_getTailoredSet U_ICU_ENTRY_POINT_RENAME(ucol_getTailoredSet) -#define ucol_getUCAVersion U_ICU_ENTRY_POINT_RENAME(ucol_getUCAVersion) -#define ucol_getUnsafeSet U_ICU_ENTRY_POINT_RENAME(ucol_getUnsafeSet) -#define ucol_getVariableTop U_ICU_ENTRY_POINT_RENAME(ucol_getVariableTop) -#define ucol_getVersion U_ICU_ENTRY_POINT_RENAME(ucol_getVersion) -#define ucol_greater U_ICU_ENTRY_POINT_RENAME(ucol_greater) -#define ucol_greaterOrEqual U_ICU_ENTRY_POINT_RENAME(ucol_greaterOrEqual) -#define ucol_keyHashCode U_ICU_ENTRY_POINT_RENAME(ucol_keyHashCode) -#define ucol_looksLikeCollationBinary U_ICU_ENTRY_POINT_RENAME(ucol_looksLikeCollationBinary) -#define ucol_mergeSortkeys U_ICU_ENTRY_POINT_RENAME(ucol_mergeSortkeys) -#define ucol_next U_ICU_ENTRY_POINT_RENAME(ucol_next) -#define ucol_nextSortKeyPart U_ICU_ENTRY_POINT_RENAME(ucol_nextSortKeyPart) -#define ucol_normalizeShortDefinitionString U_ICU_ENTRY_POINT_RENAME(ucol_normalizeShortDefinitionString) -#define ucol_open U_ICU_ENTRY_POINT_RENAME(ucol_open) -#define ucol_openAvailableLocales U_ICU_ENTRY_POINT_RENAME(ucol_openAvailableLocales) -#define ucol_openBinary U_ICU_ENTRY_POINT_RENAME(ucol_openBinary) -#define ucol_openElements U_ICU_ENTRY_POINT_RENAME(ucol_openElements) -#define ucol_openFromShortString U_ICU_ENTRY_POINT_RENAME(ucol_openFromShortString) -#define ucol_openRules U_ICU_ENTRY_POINT_RENAME(ucol_openRules) -#define ucol_prepareShortStringOpen U_ICU_ENTRY_POINT_RENAME(ucol_prepareShortStringOpen) -#define ucol_previous U_ICU_ENTRY_POINT_RENAME(ucol_previous) -#define ucol_primaryOrder U_ICU_ENTRY_POINT_RENAME(ucol_primaryOrder) -#define ucol_reset U_ICU_ENTRY_POINT_RENAME(ucol_reset) -#define ucol_restoreVariableTop U_ICU_ENTRY_POINT_RENAME(ucol_restoreVariableTop) -#define ucol_safeClone U_ICU_ENTRY_POINT_RENAME(ucol_safeClone) -#define ucol_secondaryOrder U_ICU_ENTRY_POINT_RENAME(ucol_secondaryOrder) -#define ucol_setAttribute U_ICU_ENTRY_POINT_RENAME(ucol_setAttribute) -#define ucol_setMaxVariable U_ICU_ENTRY_POINT_RENAME(ucol_setMaxVariable) -#define ucol_setOffset U_ICU_ENTRY_POINT_RENAME(ucol_setOffset) -#define ucol_setReorderCodes U_ICU_ENTRY_POINT_RENAME(ucol_setReorderCodes) -#define ucol_setStrength U_ICU_ENTRY_POINT_RENAME(ucol_setStrength) -#define ucol_setText U_ICU_ENTRY_POINT_RENAME(ucol_setText) -#define ucol_setVariableTop U_ICU_ENTRY_POINT_RENAME(ucol_setVariableTop) -#define ucol_strcoll U_ICU_ENTRY_POINT_RENAME(ucol_strcoll) -#define ucol_strcollIter U_ICU_ENTRY_POINT_RENAME(ucol_strcollIter) -#define ucol_strcollUTF8 U_ICU_ENTRY_POINT_RENAME(ucol_strcollUTF8) -#define ucol_swap U_ICU_ENTRY_POINT_RENAME(ucol_swap) -#define ucol_swapInverseUCA U_ICU_ENTRY_POINT_RENAME(ucol_swapInverseUCA) -#define ucol_tertiaryOrder U_ICU_ENTRY_POINT_RENAME(ucol_tertiaryOrder) -#define ucpmap_get U_ICU_ENTRY_POINT_RENAME(ucpmap_get) -#define ucpmap_getRange U_ICU_ENTRY_POINT_RENAME(ucpmap_getRange) -#define ucptrie_close U_ICU_ENTRY_POINT_RENAME(ucptrie_close) -#define ucptrie_get U_ICU_ENTRY_POINT_RENAME(ucptrie_get) -#define ucptrie_getRange U_ICU_ENTRY_POINT_RENAME(ucptrie_getRange) -#define ucptrie_getType U_ICU_ENTRY_POINT_RENAME(ucptrie_getType) -#define ucptrie_getValueWidth U_ICU_ENTRY_POINT_RENAME(ucptrie_getValueWidth) -#define ucptrie_internalGetRange U_ICU_ENTRY_POINT_RENAME(ucptrie_internalGetRange) -#define ucptrie_internalSmallIndex U_ICU_ENTRY_POINT_RENAME(ucptrie_internalSmallIndex) -#define ucptrie_internalSmallU8Index U_ICU_ENTRY_POINT_RENAME(ucptrie_internalSmallU8Index) -#define ucptrie_internalU8PrevIndex U_ICU_ENTRY_POINT_RENAME(ucptrie_internalU8PrevIndex) -#define ucptrie_openFromBinary U_ICU_ENTRY_POINT_RENAME(ucptrie_openFromBinary) -#define ucptrie_swap U_ICU_ENTRY_POINT_RENAME(ucptrie_swap) -#define ucptrie_toBinary U_ICU_ENTRY_POINT_RENAME(ucptrie_toBinary) -#define ucsdet_close U_ICU_ENTRY_POINT_RENAME(ucsdet_close) -#define ucsdet_detect U_ICU_ENTRY_POINT_RENAME(ucsdet_detect) -#define ucsdet_detectAll U_ICU_ENTRY_POINT_RENAME(ucsdet_detectAll) -#define ucsdet_enableInputFilter U_ICU_ENTRY_POINT_RENAME(ucsdet_enableInputFilter) -#define ucsdet_getAllDetectableCharsets U_ICU_ENTRY_POINT_RENAME(ucsdet_getAllDetectableCharsets) -#define ucsdet_getConfidence U_ICU_ENTRY_POINT_RENAME(ucsdet_getConfidence) -#define ucsdet_getDetectableCharsets U_ICU_ENTRY_POINT_RENAME(ucsdet_getDetectableCharsets) -#define ucsdet_getLanguage U_ICU_ENTRY_POINT_RENAME(ucsdet_getLanguage) -#define ucsdet_getName U_ICU_ENTRY_POINT_RENAME(ucsdet_getName) -#define ucsdet_getUChars U_ICU_ENTRY_POINT_RENAME(ucsdet_getUChars) -#define ucsdet_isInputFilterEnabled U_ICU_ENTRY_POINT_RENAME(ucsdet_isInputFilterEnabled) -#define ucsdet_open U_ICU_ENTRY_POINT_RENAME(ucsdet_open) -#define ucsdet_setDeclaredEncoding U_ICU_ENTRY_POINT_RENAME(ucsdet_setDeclaredEncoding) -#define ucsdet_setDetectableCharset U_ICU_ENTRY_POINT_RENAME(ucsdet_setDetectableCharset) -#define ucsdet_setText U_ICU_ENTRY_POINT_RENAME(ucsdet_setText) -#define ucurr_countCurrencies U_ICU_ENTRY_POINT_RENAME(ucurr_countCurrencies) -#define ucurr_forLocale U_ICU_ENTRY_POINT_RENAME(ucurr_forLocale) -#define ucurr_forLocaleAndDate U_ICU_ENTRY_POINT_RENAME(ucurr_forLocaleAndDate) -#define ucurr_getDefaultFractionDigits U_ICU_ENTRY_POINT_RENAME(ucurr_getDefaultFractionDigits) -#define ucurr_getDefaultFractionDigitsForUsage U_ICU_ENTRY_POINT_RENAME(ucurr_getDefaultFractionDigitsForUsage) -#define ucurr_getKeywordValuesForLocale U_ICU_ENTRY_POINT_RENAME(ucurr_getKeywordValuesForLocale) -#define ucurr_getName U_ICU_ENTRY_POINT_RENAME(ucurr_getName) -#define ucurr_getNumericCode U_ICU_ENTRY_POINT_RENAME(ucurr_getNumericCode) -#define ucurr_getPluralName U_ICU_ENTRY_POINT_RENAME(ucurr_getPluralName) -#define ucurr_getRoundingIncrement U_ICU_ENTRY_POINT_RENAME(ucurr_getRoundingIncrement) -#define ucurr_getRoundingIncrementForUsage U_ICU_ENTRY_POINT_RENAME(ucurr_getRoundingIncrementForUsage) -#define ucurr_isAvailable U_ICU_ENTRY_POINT_RENAME(ucurr_isAvailable) -#define ucurr_openISOCurrencies U_ICU_ENTRY_POINT_RENAME(ucurr_openISOCurrencies) -#define ucurr_register U_ICU_ENTRY_POINT_RENAME(ucurr_register) -#define ucurr_unregister U_ICU_ENTRY_POINT_RENAME(ucurr_unregister) -#define udat_adoptNumberFormat U_ICU_ENTRY_POINT_RENAME(udat_adoptNumberFormat) -#define udat_adoptNumberFormatForFields U_ICU_ENTRY_POINT_RENAME(udat_adoptNumberFormatForFields) -#define udat_applyPattern U_ICU_ENTRY_POINT_RENAME(udat_applyPattern) -#define udat_applyPatternRelative U_ICU_ENTRY_POINT_RENAME(udat_applyPatternRelative) -#define udat_clone U_ICU_ENTRY_POINT_RENAME(udat_clone) -#define udat_close U_ICU_ENTRY_POINT_RENAME(udat_close) -#define udat_countAvailable U_ICU_ENTRY_POINT_RENAME(udat_countAvailable) -#define udat_countSymbols U_ICU_ENTRY_POINT_RENAME(udat_countSymbols) -#define udat_format U_ICU_ENTRY_POINT_RENAME(udat_format) -#define udat_formatCalendar U_ICU_ENTRY_POINT_RENAME(udat_formatCalendar) -#define udat_formatCalendarForFields U_ICU_ENTRY_POINT_RENAME(udat_formatCalendarForFields) -#define udat_formatForFields U_ICU_ENTRY_POINT_RENAME(udat_formatForFields) -#define udat_get2DigitYearStart U_ICU_ENTRY_POINT_RENAME(udat_get2DigitYearStart) -#define udat_getAvailable U_ICU_ENTRY_POINT_RENAME(udat_getAvailable) -#define udat_getBooleanAttribute U_ICU_ENTRY_POINT_RENAME(udat_getBooleanAttribute) -#define udat_getCalendar U_ICU_ENTRY_POINT_RENAME(udat_getCalendar) -#define udat_getContext U_ICU_ENTRY_POINT_RENAME(udat_getContext) -#define udat_getLocaleByType U_ICU_ENTRY_POINT_RENAME(udat_getLocaleByType) -#define udat_getNumberFormat U_ICU_ENTRY_POINT_RENAME(udat_getNumberFormat) -#define udat_getNumberFormatForField U_ICU_ENTRY_POINT_RENAME(udat_getNumberFormatForField) -#define udat_getSymbols U_ICU_ENTRY_POINT_RENAME(udat_getSymbols) -#define udat_isLenient U_ICU_ENTRY_POINT_RENAME(udat_isLenient) -#define udat_open U_ICU_ENTRY_POINT_RENAME(udat_open) -#define udat_parse U_ICU_ENTRY_POINT_RENAME(udat_parse) -#define udat_parseCalendar U_ICU_ENTRY_POINT_RENAME(udat_parseCalendar) -#define udat_registerOpener U_ICU_ENTRY_POINT_RENAME(udat_registerOpener) -#define udat_set2DigitYearStart U_ICU_ENTRY_POINT_RENAME(udat_set2DigitYearStart) -#define udat_setBooleanAttribute U_ICU_ENTRY_POINT_RENAME(udat_setBooleanAttribute) -#define udat_setCalendar U_ICU_ENTRY_POINT_RENAME(udat_setCalendar) -#define udat_setContext U_ICU_ENTRY_POINT_RENAME(udat_setContext) -#define udat_setLenient U_ICU_ENTRY_POINT_RENAME(udat_setLenient) -#define udat_setNumberFormat U_ICU_ENTRY_POINT_RENAME(udat_setNumberFormat) -#define udat_setSymbols U_ICU_ENTRY_POINT_RENAME(udat_setSymbols) -#define udat_toCalendarDateField U_ICU_ENTRY_POINT_RENAME(udat_toCalendarDateField) -#define udat_toPattern U_ICU_ENTRY_POINT_RENAME(udat_toPattern) -#define udat_toPatternRelativeDate U_ICU_ENTRY_POINT_RENAME(udat_toPatternRelativeDate) -#define udat_toPatternRelativeTime U_ICU_ENTRY_POINT_RENAME(udat_toPatternRelativeTime) -#define udat_unregisterOpener U_ICU_ENTRY_POINT_RENAME(udat_unregisterOpener) -#define udata_checkCommonData U_ICU_ENTRY_POINT_RENAME(udata_checkCommonData) -#define udata_close U_ICU_ENTRY_POINT_RENAME(udata_close) -#define udata_closeSwapper U_ICU_ENTRY_POINT_RENAME(udata_closeSwapper) -#define udata_getHeaderSize U_ICU_ENTRY_POINT_RENAME(udata_getHeaderSize) -#define udata_getInfo U_ICU_ENTRY_POINT_RENAME(udata_getInfo) -#define udata_getInfoSize U_ICU_ENTRY_POINT_RENAME(udata_getInfoSize) -#define udata_getLength U_ICU_ENTRY_POINT_RENAME(udata_getLength) -#define udata_getMemory U_ICU_ENTRY_POINT_RENAME(udata_getMemory) -#define udata_getRawMemory U_ICU_ENTRY_POINT_RENAME(udata_getRawMemory) -#define udata_open U_ICU_ENTRY_POINT_RENAME(udata_open) -#define udata_openChoice U_ICU_ENTRY_POINT_RENAME(udata_openChoice) -#define udata_openSwapper U_ICU_ENTRY_POINT_RENAME(udata_openSwapper) -#define udata_openSwapperForInputData U_ICU_ENTRY_POINT_RENAME(udata_openSwapperForInputData) -#define udata_printError U_ICU_ENTRY_POINT_RENAME(udata_printError) -#define udata_readInt16 U_ICU_ENTRY_POINT_RENAME(udata_readInt16) -#define udata_readInt32 U_ICU_ENTRY_POINT_RENAME(udata_readInt32) -#define udata_setAppData U_ICU_ENTRY_POINT_RENAME(udata_setAppData) -#define udata_setCommonData U_ICU_ENTRY_POINT_RENAME(udata_setCommonData) -#define udata_setFileAccess U_ICU_ENTRY_POINT_RENAME(udata_setFileAccess) -#define udata_swapDataHeader U_ICU_ENTRY_POINT_RENAME(udata_swapDataHeader) -#define udata_swapInvStringBlock U_ICU_ENTRY_POINT_RENAME(udata_swapInvStringBlock) -#define udatpg_addPattern U_ICU_ENTRY_POINT_RENAME(udatpg_addPattern) -#define udatpg_clone U_ICU_ENTRY_POINT_RENAME(udatpg_clone) -#define udatpg_close U_ICU_ENTRY_POINT_RENAME(udatpg_close) -#define udatpg_getAppendItemFormat U_ICU_ENTRY_POINT_RENAME(udatpg_getAppendItemFormat) -#define udatpg_getAppendItemName U_ICU_ENTRY_POINT_RENAME(udatpg_getAppendItemName) -#define udatpg_getBaseSkeleton U_ICU_ENTRY_POINT_RENAME(udatpg_getBaseSkeleton) -#define udatpg_getBestPattern U_ICU_ENTRY_POINT_RENAME(udatpg_getBestPattern) -#define udatpg_getBestPatternWithOptions U_ICU_ENTRY_POINT_RENAME(udatpg_getBestPatternWithOptions) -#define udatpg_getDateTimeFormat U_ICU_ENTRY_POINT_RENAME(udatpg_getDateTimeFormat) -#define udatpg_getDecimal U_ICU_ENTRY_POINT_RENAME(udatpg_getDecimal) -#define udatpg_getFieldDisplayName U_ICU_ENTRY_POINT_RENAME(udatpg_getFieldDisplayName) -#define udatpg_getPatternForSkeleton U_ICU_ENTRY_POINT_RENAME(udatpg_getPatternForSkeleton) -#define udatpg_getSkeleton U_ICU_ENTRY_POINT_RENAME(udatpg_getSkeleton) -#define udatpg_open U_ICU_ENTRY_POINT_RENAME(udatpg_open) -#define udatpg_openBaseSkeletons U_ICU_ENTRY_POINT_RENAME(udatpg_openBaseSkeletons) -#define udatpg_openEmpty U_ICU_ENTRY_POINT_RENAME(udatpg_openEmpty) -#define udatpg_openSkeletons U_ICU_ENTRY_POINT_RENAME(udatpg_openSkeletons) -#define udatpg_replaceFieldTypes U_ICU_ENTRY_POINT_RENAME(udatpg_replaceFieldTypes) -#define udatpg_replaceFieldTypesWithOptions U_ICU_ENTRY_POINT_RENAME(udatpg_replaceFieldTypesWithOptions) -#define udatpg_setAppendItemFormat U_ICU_ENTRY_POINT_RENAME(udatpg_setAppendItemFormat) -#define udatpg_setAppendItemName U_ICU_ENTRY_POINT_RENAME(udatpg_setAppendItemName) -#define udatpg_setDateTimeFormat U_ICU_ENTRY_POINT_RENAME(udatpg_setDateTimeFormat) -#define udatpg_setDecimal U_ICU_ENTRY_POINT_RENAME(udatpg_setDecimal) -#define udict_swap U_ICU_ENTRY_POINT_RENAME(udict_swap) -#define udtitvfmt_close U_ICU_ENTRY_POINT_RENAME(udtitvfmt_close) -#define udtitvfmt_closeResult U_ICU_ENTRY_POINT_RENAME(udtitvfmt_closeResult) -#define udtitvfmt_format U_ICU_ENTRY_POINT_RENAME(udtitvfmt_format) -#define udtitvfmt_formatToResult U_ICU_ENTRY_POINT_RENAME(udtitvfmt_formatToResult) -#define udtitvfmt_open U_ICU_ENTRY_POINT_RENAME(udtitvfmt_open) -#define udtitvfmt_openResult U_ICU_ENTRY_POINT_RENAME(udtitvfmt_openResult) -#define udtitvfmt_resultAsValue U_ICU_ENTRY_POINT_RENAME(udtitvfmt_resultAsValue) -#define uenum_close U_ICU_ENTRY_POINT_RENAME(uenum_close) -#define uenum_count U_ICU_ENTRY_POINT_RENAME(uenum_count) -#define uenum_next U_ICU_ENTRY_POINT_RENAME(uenum_next) -#define uenum_nextDefault U_ICU_ENTRY_POINT_RENAME(uenum_nextDefault) -#define uenum_openCharStringsEnumeration U_ICU_ENTRY_POINT_RENAME(uenum_openCharStringsEnumeration) -#define uenum_openFromStringEnumeration U_ICU_ENTRY_POINT_RENAME(uenum_openFromStringEnumeration) -#define uenum_openUCharStringsEnumeration U_ICU_ENTRY_POINT_RENAME(uenum_openUCharStringsEnumeration) -#define uenum_reset U_ICU_ENTRY_POINT_RENAME(uenum_reset) -#define uenum_unext U_ICU_ENTRY_POINT_RENAME(uenum_unext) -#define uenum_unextDefault U_ICU_ENTRY_POINT_RENAME(uenum_unextDefault) -#define ufieldpositer_close U_ICU_ENTRY_POINT_RENAME(ufieldpositer_close) -#define ufieldpositer_next U_ICU_ENTRY_POINT_RENAME(ufieldpositer_next) -#define ufieldpositer_open U_ICU_ENTRY_POINT_RENAME(ufieldpositer_open) -#define ufile_close_translit U_ICU_ENTRY_POINT_RENAME(ufile_close_translit) -#define ufile_fill_uchar_buffer U_ICU_ENTRY_POINT_RENAME(ufile_fill_uchar_buffer) -#define ufile_flush_io U_ICU_ENTRY_POINT_RENAME(ufile_flush_io) -#define ufile_flush_translit U_ICU_ENTRY_POINT_RENAME(ufile_flush_translit) -#define ufile_getch U_ICU_ENTRY_POINT_RENAME(ufile_getch) -#define ufile_getch32 U_ICU_ENTRY_POINT_RENAME(ufile_getch32) -#define ufmt_64tou U_ICU_ENTRY_POINT_RENAME(ufmt_64tou) -#define ufmt_close U_ICU_ENTRY_POINT_RENAME(ufmt_close) -#define ufmt_defaultCPToUnicode U_ICU_ENTRY_POINT_RENAME(ufmt_defaultCPToUnicode) -#define ufmt_digitvalue U_ICU_ENTRY_POINT_RENAME(ufmt_digitvalue) -#define ufmt_getArrayItemByIndex U_ICU_ENTRY_POINT_RENAME(ufmt_getArrayItemByIndex) -#define ufmt_getArrayLength U_ICU_ENTRY_POINT_RENAME(ufmt_getArrayLength) -#define ufmt_getDate U_ICU_ENTRY_POINT_RENAME(ufmt_getDate) -#define ufmt_getDecNumChars U_ICU_ENTRY_POINT_RENAME(ufmt_getDecNumChars) -#define ufmt_getDouble U_ICU_ENTRY_POINT_RENAME(ufmt_getDouble) -#define ufmt_getInt64 U_ICU_ENTRY_POINT_RENAME(ufmt_getInt64) -#define ufmt_getLong U_ICU_ENTRY_POINT_RENAME(ufmt_getLong) -#define ufmt_getObject U_ICU_ENTRY_POINT_RENAME(ufmt_getObject) -#define ufmt_getType U_ICU_ENTRY_POINT_RENAME(ufmt_getType) -#define ufmt_getUChars U_ICU_ENTRY_POINT_RENAME(ufmt_getUChars) -#define ufmt_isNumeric U_ICU_ENTRY_POINT_RENAME(ufmt_isNumeric) -#define ufmt_isdigit U_ICU_ENTRY_POINT_RENAME(ufmt_isdigit) -#define ufmt_open U_ICU_ENTRY_POINT_RENAME(ufmt_open) -#define ufmt_ptou U_ICU_ENTRY_POINT_RENAME(ufmt_ptou) -#define ufmt_uto64 U_ICU_ENTRY_POINT_RENAME(ufmt_uto64) -#define ufmt_utop U_ICU_ENTRY_POINT_RENAME(ufmt_utop) -#define ufmtval_getString U_ICU_ENTRY_POINT_RENAME(ufmtval_getString) -#define ufmtval_nextPosition U_ICU_ENTRY_POINT_RENAME(ufmtval_nextPosition) -#define ugender_getInstance U_ICU_ENTRY_POINT_RENAME(ugender_getInstance) -#define ugender_getListGender U_ICU_ENTRY_POINT_RENAME(ugender_getListGender) -#define uhash_close U_ICU_ENTRY_POINT_RENAME(uhash_close) -#define uhash_compareCaselessUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareCaselessUnicodeString) -#define uhash_compareChars U_ICU_ENTRY_POINT_RENAME(uhash_compareChars) -#define uhash_compareIChars U_ICU_ENTRY_POINT_RENAME(uhash_compareIChars) -#define uhash_compareLong U_ICU_ENTRY_POINT_RENAME(uhash_compareLong) -#define uhash_compareScriptSet U_ICU_ENTRY_POINT_RENAME(uhash_compareScriptSet) -#define uhash_compareUChars U_ICU_ENTRY_POINT_RENAME(uhash_compareUChars) -#define uhash_compareUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareUnicodeString) -#define uhash_count U_ICU_ENTRY_POINT_RENAME(uhash_count) -#define uhash_deleteHashtable U_ICU_ENTRY_POINT_RENAME(uhash_deleteHashtable) -#define uhash_deleteScriptSet U_ICU_ENTRY_POINT_RENAME(uhash_deleteScriptSet) -#define uhash_equals U_ICU_ENTRY_POINT_RENAME(uhash_equals) -#define uhash_equalsScriptSet U_ICU_ENTRY_POINT_RENAME(uhash_equalsScriptSet) -#define uhash_find U_ICU_ENTRY_POINT_RENAME(uhash_find) -#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get) -#define uhash_geti U_ICU_ENTRY_POINT_RENAME(uhash_geti) -#define uhash_hashCaselessUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_hashCaselessUnicodeString) -#define uhash_hashChars U_ICU_ENTRY_POINT_RENAME(uhash_hashChars) -#define uhash_hashIChars U_ICU_ENTRY_POINT_RENAME(uhash_hashIChars) -#define uhash_hashLong U_ICU_ENTRY_POINT_RENAME(uhash_hashLong) -#define uhash_hashScriptSet U_ICU_ENTRY_POINT_RENAME(uhash_hashScriptSet) -#define uhash_hashUChars U_ICU_ENTRY_POINT_RENAME(uhash_hashUChars) -#define uhash_hashUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_hashUnicodeString) -#define uhash_iget U_ICU_ENTRY_POINT_RENAME(uhash_iget) -#define uhash_igeti U_ICU_ENTRY_POINT_RENAME(uhash_igeti) -#define uhash_init U_ICU_ENTRY_POINT_RENAME(uhash_init) -#define uhash_initSize U_ICU_ENTRY_POINT_RENAME(uhash_initSize) -#define uhash_iput U_ICU_ENTRY_POINT_RENAME(uhash_iput) -#define uhash_iputi U_ICU_ENTRY_POINT_RENAME(uhash_iputi) -#define uhash_iremove U_ICU_ENTRY_POINT_RENAME(uhash_iremove) -#define uhash_iremovei U_ICU_ENTRY_POINT_RENAME(uhash_iremovei) -#define uhash_nextElement U_ICU_ENTRY_POINT_RENAME(uhash_nextElement) -#define uhash_open U_ICU_ENTRY_POINT_RENAME(uhash_open) -#define uhash_openSize U_ICU_ENTRY_POINT_RENAME(uhash_openSize) -#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put) -#define uhash_puti U_ICU_ENTRY_POINT_RENAME(uhash_puti) -#define uhash_remove U_ICU_ENTRY_POINT_RENAME(uhash_remove) -#define uhash_removeAll U_ICU_ENTRY_POINT_RENAME(uhash_removeAll) -#define uhash_removeElement U_ICU_ENTRY_POINT_RENAME(uhash_removeElement) -#define uhash_removei U_ICU_ENTRY_POINT_RENAME(uhash_removei) -#define uhash_setKeyComparator U_ICU_ENTRY_POINT_RENAME(uhash_setKeyComparator) -#define uhash_setKeyDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setKeyDeleter) -#define uhash_setKeyHasher U_ICU_ENTRY_POINT_RENAME(uhash_setKeyHasher) -#define uhash_setResizePolicy U_ICU_ENTRY_POINT_RENAME(uhash_setResizePolicy) -#define uhash_setValueComparator U_ICU_ENTRY_POINT_RENAME(uhash_setValueComparator) -#define uhash_setValueDeleter U_ICU_ENTRY_POINT_RENAME(uhash_setValueDeleter) -#define uidna_IDNToASCII U_ICU_ENTRY_POINT_RENAME(uidna_IDNToASCII) -#define uidna_IDNToUnicode U_ICU_ENTRY_POINT_RENAME(uidna_IDNToUnicode) -#define uidna_close U_ICU_ENTRY_POINT_RENAME(uidna_close) -#define uidna_compare U_ICU_ENTRY_POINT_RENAME(uidna_compare) -#define uidna_labelToASCII U_ICU_ENTRY_POINT_RENAME(uidna_labelToASCII) -#define uidna_labelToASCII_UTF8 U_ICU_ENTRY_POINT_RENAME(uidna_labelToASCII_UTF8) -#define uidna_labelToUnicode U_ICU_ENTRY_POINT_RENAME(uidna_labelToUnicode) -#define uidna_labelToUnicodeUTF8 U_ICU_ENTRY_POINT_RENAME(uidna_labelToUnicodeUTF8) -#define uidna_nameToASCII U_ICU_ENTRY_POINT_RENAME(uidna_nameToASCII) -#define uidna_nameToASCII_UTF8 U_ICU_ENTRY_POINT_RENAME(uidna_nameToASCII_UTF8) -#define uidna_nameToUnicode U_ICU_ENTRY_POINT_RENAME(uidna_nameToUnicode) -#define uidna_nameToUnicodeUTF8 U_ICU_ENTRY_POINT_RENAME(uidna_nameToUnicodeUTF8) -#define uidna_openUTS46 U_ICU_ENTRY_POINT_RENAME(uidna_openUTS46) -#define uidna_toASCII U_ICU_ENTRY_POINT_RENAME(uidna_toASCII) -#define uidna_toUnicode U_ICU_ENTRY_POINT_RENAME(uidna_toUnicode) -#define uiter_current32 U_ICU_ENTRY_POINT_RENAME(uiter_current32) -#define uiter_getState U_ICU_ENTRY_POINT_RENAME(uiter_getState) -#define uiter_next32 U_ICU_ENTRY_POINT_RENAME(uiter_next32) -#define uiter_previous32 U_ICU_ENTRY_POINT_RENAME(uiter_previous32) -#define uiter_setCharacterIterator U_ICU_ENTRY_POINT_RENAME(uiter_setCharacterIterator) -#define uiter_setReplaceable U_ICU_ENTRY_POINT_RENAME(uiter_setReplaceable) -#define uiter_setState U_ICU_ENTRY_POINT_RENAME(uiter_setState) -#define uiter_setString U_ICU_ENTRY_POINT_RENAME(uiter_setString) -#define uiter_setUTF16BE U_ICU_ENTRY_POINT_RENAME(uiter_setUTF16BE) -#define uiter_setUTF8 U_ICU_ENTRY_POINT_RENAME(uiter_setUTF8) -#define uldn_close U_ICU_ENTRY_POINT_RENAME(uldn_close) -#define uldn_getContext U_ICU_ENTRY_POINT_RENAME(uldn_getContext) -#define uldn_getDialectHandling U_ICU_ENTRY_POINT_RENAME(uldn_getDialectHandling) -#define uldn_getLocale U_ICU_ENTRY_POINT_RENAME(uldn_getLocale) -#define uldn_keyDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_keyDisplayName) -#define uldn_keyValueDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_keyValueDisplayName) -#define uldn_languageDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_languageDisplayName) -#define uldn_localeDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_localeDisplayName) -#define uldn_open U_ICU_ENTRY_POINT_RENAME(uldn_open) -#define uldn_openForContext U_ICU_ENTRY_POINT_RENAME(uldn_openForContext) -#define uldn_regionDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_regionDisplayName) -#define uldn_scriptCodeDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_scriptCodeDisplayName) -#define uldn_scriptDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_scriptDisplayName) -#define uldn_variantDisplayName U_ICU_ENTRY_POINT_RENAME(uldn_variantDisplayName) -#define ulist_addItemBeginList U_ICU_ENTRY_POINT_RENAME(ulist_addItemBeginList) -#define ulist_addItemEndList U_ICU_ENTRY_POINT_RENAME(ulist_addItemEndList) -#define ulist_close_keyword_values_iterator U_ICU_ENTRY_POINT_RENAME(ulist_close_keyword_values_iterator) -#define ulist_containsString U_ICU_ENTRY_POINT_RENAME(ulist_containsString) -#define ulist_count_keyword_values U_ICU_ENTRY_POINT_RENAME(ulist_count_keyword_values) -#define ulist_createEmptyList U_ICU_ENTRY_POINT_RENAME(ulist_createEmptyList) -#define ulist_deleteList U_ICU_ENTRY_POINT_RENAME(ulist_deleteList) -#define ulist_getListFromEnum U_ICU_ENTRY_POINT_RENAME(ulist_getListFromEnum) -#define ulist_getListSize U_ICU_ENTRY_POINT_RENAME(ulist_getListSize) -#define ulist_getNext U_ICU_ENTRY_POINT_RENAME(ulist_getNext) -#define ulist_next_keyword_value U_ICU_ENTRY_POINT_RENAME(ulist_next_keyword_value) -#define ulist_removeString U_ICU_ENTRY_POINT_RENAME(ulist_removeString) -#define ulist_resetList U_ICU_ENTRY_POINT_RENAME(ulist_resetList) -#define ulist_reset_keyword_values_iterator U_ICU_ENTRY_POINT_RENAME(ulist_reset_keyword_values_iterator) -#define ulistfmt_close U_ICU_ENTRY_POINT_RENAME(ulistfmt_close) -#define ulistfmt_closeResult U_ICU_ENTRY_POINT_RENAME(ulistfmt_closeResult) -#define ulistfmt_format U_ICU_ENTRY_POINT_RENAME(ulistfmt_format) -#define ulistfmt_formatStringsToResult U_ICU_ENTRY_POINT_RENAME(ulistfmt_formatStringsToResult) -#define ulistfmt_open U_ICU_ENTRY_POINT_RENAME(ulistfmt_open) -#define ulistfmt_openResult U_ICU_ENTRY_POINT_RENAME(ulistfmt_openResult) -#define ulistfmt_resultAsValue U_ICU_ENTRY_POINT_RENAME(ulistfmt_resultAsValue) -#define uloc_acceptLanguage U_ICU_ENTRY_POINT_RENAME(uloc_acceptLanguage) -#define uloc_acceptLanguageFromHTTP U_ICU_ENTRY_POINT_RENAME(uloc_acceptLanguageFromHTTP) -#define uloc_addLikelySubtags U_ICU_ENTRY_POINT_RENAME(uloc_addLikelySubtags) -#define uloc_canonicalize U_ICU_ENTRY_POINT_RENAME(uloc_canonicalize) -#define uloc_countAvailable U_ICU_ENTRY_POINT_RENAME(uloc_countAvailable) -#define uloc_forLanguageTag U_ICU_ENTRY_POINT_RENAME(uloc_forLanguageTag) -#define uloc_getAvailable U_ICU_ENTRY_POINT_RENAME(uloc_getAvailable) -#define uloc_getBaseName U_ICU_ENTRY_POINT_RENAME(uloc_getBaseName) -#define uloc_getCharacterOrientation U_ICU_ENTRY_POINT_RENAME(uloc_getCharacterOrientation) -#define uloc_getCountry U_ICU_ENTRY_POINT_RENAME(uloc_getCountry) -#define uloc_getCurrentCountryID U_ICU_ENTRY_POINT_RENAME(uloc_getCurrentCountryID) -#define uloc_getCurrentLanguageID U_ICU_ENTRY_POINT_RENAME(uloc_getCurrentLanguageID) -#define uloc_getDefault U_ICU_ENTRY_POINT_RENAME(uloc_getDefault) -#define uloc_getDisplayCountry U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayCountry) -#define uloc_getDisplayKeyword U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayKeyword) -#define uloc_getDisplayKeywordValue U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayKeywordValue) -#define uloc_getDisplayLanguage U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayLanguage) -#define uloc_getDisplayName U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayName) -#define uloc_getDisplayScript U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayScript) -#define uloc_getDisplayScriptInContext U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayScriptInContext) -#define uloc_getDisplayVariant U_ICU_ENTRY_POINT_RENAME(uloc_getDisplayVariant) -#define uloc_getISO3Country U_ICU_ENTRY_POINT_RENAME(uloc_getISO3Country) -#define uloc_getISO3Language U_ICU_ENTRY_POINT_RENAME(uloc_getISO3Language) -#define uloc_getISOCountries U_ICU_ENTRY_POINT_RENAME(uloc_getISOCountries) -#define uloc_getISOLanguages U_ICU_ENTRY_POINT_RENAME(uloc_getISOLanguages) -#define uloc_getKeywordValue U_ICU_ENTRY_POINT_RENAME(uloc_getKeywordValue) -#define uloc_getLCID U_ICU_ENTRY_POINT_RENAME(uloc_getLCID) -#define uloc_getLanguage U_ICU_ENTRY_POINT_RENAME(uloc_getLanguage) -#define uloc_getLineOrientation U_ICU_ENTRY_POINT_RENAME(uloc_getLineOrientation) -#define uloc_getLocaleForLCID U_ICU_ENTRY_POINT_RENAME(uloc_getLocaleForLCID) -#define uloc_getName U_ICU_ENTRY_POINT_RENAME(uloc_getName) -#define uloc_getParent U_ICU_ENTRY_POINT_RENAME(uloc_getParent) -#define uloc_getScript U_ICU_ENTRY_POINT_RENAME(uloc_getScript) -#define uloc_getTableStringWithFallback U_ICU_ENTRY_POINT_RENAME(uloc_getTableStringWithFallback) -#define uloc_getVariant U_ICU_ENTRY_POINT_RENAME(uloc_getVariant) -#define uloc_isRightToLeft U_ICU_ENTRY_POINT_RENAME(uloc_isRightToLeft) -#define uloc_minimizeSubtags U_ICU_ENTRY_POINT_RENAME(uloc_minimizeSubtags) -#define uloc_openKeywordList U_ICU_ENTRY_POINT_RENAME(uloc_openKeywordList) -#define uloc_openKeywords U_ICU_ENTRY_POINT_RENAME(uloc_openKeywords) -#define uloc_setDefault U_ICU_ENTRY_POINT_RENAME(uloc_setDefault) -#define uloc_setKeywordValue U_ICU_ENTRY_POINT_RENAME(uloc_setKeywordValue) -#define uloc_toLanguageTag U_ICU_ENTRY_POINT_RENAME(uloc_toLanguageTag) -#define uloc_toLegacyKey U_ICU_ENTRY_POINT_RENAME(uloc_toLegacyKey) -#define uloc_toLegacyType U_ICU_ENTRY_POINT_RENAME(uloc_toLegacyType) -#define uloc_toUnicodeLocaleKey U_ICU_ENTRY_POINT_RENAME(uloc_toUnicodeLocaleKey) -#define uloc_toUnicodeLocaleType U_ICU_ENTRY_POINT_RENAME(uloc_toUnicodeLocaleType) -#define ulocdata_close U_ICU_ENTRY_POINT_RENAME(ulocdata_close) -#define ulocdata_getCLDRVersion U_ICU_ENTRY_POINT_RENAME(ulocdata_getCLDRVersion) -#define ulocdata_getDelimiter U_ICU_ENTRY_POINT_RENAME(ulocdata_getDelimiter) -#define ulocdata_getExemplarSet U_ICU_ENTRY_POINT_RENAME(ulocdata_getExemplarSet) -#define ulocdata_getLocaleDisplayPattern U_ICU_ENTRY_POINT_RENAME(ulocdata_getLocaleDisplayPattern) -#define ulocdata_getLocaleSeparator U_ICU_ENTRY_POINT_RENAME(ulocdata_getLocaleSeparator) -#define ulocdata_getMeasurementSystem U_ICU_ENTRY_POINT_RENAME(ulocdata_getMeasurementSystem) -#define ulocdata_getNoSubstitute U_ICU_ENTRY_POINT_RENAME(ulocdata_getNoSubstitute) -#define ulocdata_getPaperSize U_ICU_ENTRY_POINT_RENAME(ulocdata_getPaperSize) -#define ulocdata_open U_ICU_ENTRY_POINT_RENAME(ulocdata_open) -#define ulocdata_setNoSubstitute U_ICU_ENTRY_POINT_RENAME(ulocdata_setNoSubstitute) -#define ulocimp_addLikelySubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_addLikelySubtags) -#define ulocimp_forLanguageTag U_ICU_ENTRY_POINT_RENAME(ulocimp_forLanguageTag) -#define ulocimp_getCountry U_ICU_ENTRY_POINT_RENAME(ulocimp_getCountry) -#define ulocimp_getLanguage U_ICU_ENTRY_POINT_RENAME(ulocimp_getLanguage) -#define ulocimp_getRegionForSupplementalData U_ICU_ENTRY_POINT_RENAME(ulocimp_getRegionForSupplementalData) -#define ulocimp_getScript U_ICU_ENTRY_POINT_RENAME(ulocimp_getScript) -#define ulocimp_minimizeSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_minimizeSubtags) -#define ulocimp_toBcpKey U_ICU_ENTRY_POINT_RENAME(ulocimp_toBcpKey) -#define ulocimp_toBcpType U_ICU_ENTRY_POINT_RENAME(ulocimp_toBcpType) -#define ulocimp_toLanguageTag U_ICU_ENTRY_POINT_RENAME(ulocimp_toLanguageTag) -#define ulocimp_toLegacyKey U_ICU_ENTRY_POINT_RENAME(ulocimp_toLegacyKey) -#define ulocimp_toLegacyType U_ICU_ENTRY_POINT_RENAME(ulocimp_toLegacyType) -#define ultag_isExtensionSubtags U_ICU_ENTRY_POINT_RENAME(ultag_isExtensionSubtags) -#define ultag_isLanguageSubtag U_ICU_ENTRY_POINT_RENAME(ultag_isLanguageSubtag) -#define ultag_isPrivateuseValueSubtags U_ICU_ENTRY_POINT_RENAME(ultag_isPrivateuseValueSubtags) -#define ultag_isRegionSubtag U_ICU_ENTRY_POINT_RENAME(ultag_isRegionSubtag) -#define ultag_isScriptSubtag U_ICU_ENTRY_POINT_RENAME(ultag_isScriptSubtag) -#define ultag_isTransformedExtensionSubtags U_ICU_ENTRY_POINT_RENAME(ultag_isTransformedExtensionSubtags) -#define ultag_isUnicodeExtensionSubtags U_ICU_ENTRY_POINT_RENAME(ultag_isUnicodeExtensionSubtags) -#define ultag_isUnicodeLocaleAttribute U_ICU_ENTRY_POINT_RENAME(ultag_isUnicodeLocaleAttribute) -#define ultag_isUnicodeLocaleAttributes U_ICU_ENTRY_POINT_RENAME(ultag_isUnicodeLocaleAttributes) -#define ultag_isUnicodeLocaleKey U_ICU_ENTRY_POINT_RENAME(ultag_isUnicodeLocaleKey) -#define ultag_isUnicodeLocaleType U_ICU_ENTRY_POINT_RENAME(ultag_isUnicodeLocaleType) -#define ultag_isVariantSubtags U_ICU_ENTRY_POINT_RENAME(ultag_isVariantSubtags) -#define umsg_applyPattern U_ICU_ENTRY_POINT_RENAME(umsg_applyPattern) -#define umsg_autoQuoteApostrophe U_ICU_ENTRY_POINT_RENAME(umsg_autoQuoteApostrophe) -#define umsg_clone U_ICU_ENTRY_POINT_RENAME(umsg_clone) -#define umsg_close U_ICU_ENTRY_POINT_RENAME(umsg_close) -#define umsg_format U_ICU_ENTRY_POINT_RENAME(umsg_format) -#define umsg_getLocale U_ICU_ENTRY_POINT_RENAME(umsg_getLocale) -#define umsg_open U_ICU_ENTRY_POINT_RENAME(umsg_open) -#define umsg_parse U_ICU_ENTRY_POINT_RENAME(umsg_parse) -#define umsg_setLocale U_ICU_ENTRY_POINT_RENAME(umsg_setLocale) -#define umsg_toPattern U_ICU_ENTRY_POINT_RENAME(umsg_toPattern) -#define umsg_vformat U_ICU_ENTRY_POINT_RENAME(umsg_vformat) -#define umsg_vparse U_ICU_ENTRY_POINT_RENAME(umsg_vparse) -#define umtx_condBroadcast U_ICU_ENTRY_POINT_RENAME(umtx_condBroadcast) -#define umtx_condSignal U_ICU_ENTRY_POINT_RENAME(umtx_condSignal) -#define umtx_condWait U_ICU_ENTRY_POINT_RENAME(umtx_condWait) -#define umtx_lock U_ICU_ENTRY_POINT_RENAME(umtx_lock) -#define umtx_unlock U_ICU_ENTRY_POINT_RENAME(umtx_unlock) -#define umutablecptrie_buildImmutable U_ICU_ENTRY_POINT_RENAME(umutablecptrie_buildImmutable) -#define umutablecptrie_clone U_ICU_ENTRY_POINT_RENAME(umutablecptrie_clone) -#define umutablecptrie_close U_ICU_ENTRY_POINT_RENAME(umutablecptrie_close) -#define umutablecptrie_fromUCPMap U_ICU_ENTRY_POINT_RENAME(umutablecptrie_fromUCPMap) -#define umutablecptrie_fromUCPTrie U_ICU_ENTRY_POINT_RENAME(umutablecptrie_fromUCPTrie) -#define umutablecptrie_get U_ICU_ENTRY_POINT_RENAME(umutablecptrie_get) -#define umutablecptrie_getRange U_ICU_ENTRY_POINT_RENAME(umutablecptrie_getRange) -#define umutablecptrie_open U_ICU_ENTRY_POINT_RENAME(umutablecptrie_open) -#define umutablecptrie_set U_ICU_ENTRY_POINT_RENAME(umutablecptrie_set) -#define umutablecptrie_setRange U_ICU_ENTRY_POINT_RENAME(umutablecptrie_setRange) -#define uniset_getUnicode32Instance U_ICU_ENTRY_POINT_RENAME(uniset_getUnicode32Instance) -#define unorm2_append U_ICU_ENTRY_POINT_RENAME(unorm2_append) -#define unorm2_close U_ICU_ENTRY_POINT_RENAME(unorm2_close) -#define unorm2_composePair U_ICU_ENTRY_POINT_RENAME(unorm2_composePair) -#define unorm2_getCombiningClass U_ICU_ENTRY_POINT_RENAME(unorm2_getCombiningClass) -#define unorm2_getDecomposition U_ICU_ENTRY_POINT_RENAME(unorm2_getDecomposition) -#define unorm2_getInstance U_ICU_ENTRY_POINT_RENAME(unorm2_getInstance) -#define unorm2_getNFCInstance U_ICU_ENTRY_POINT_RENAME(unorm2_getNFCInstance) -#define unorm2_getNFDInstance U_ICU_ENTRY_POINT_RENAME(unorm2_getNFDInstance) -#define unorm2_getNFKCCasefoldInstance U_ICU_ENTRY_POINT_RENAME(unorm2_getNFKCCasefoldInstance) -#define unorm2_getNFKCInstance U_ICU_ENTRY_POINT_RENAME(unorm2_getNFKCInstance) -#define unorm2_getNFKDInstance U_ICU_ENTRY_POINT_RENAME(unorm2_getNFKDInstance) -#define unorm2_getRawDecomposition U_ICU_ENTRY_POINT_RENAME(unorm2_getRawDecomposition) -#define unorm2_hasBoundaryAfter U_ICU_ENTRY_POINT_RENAME(unorm2_hasBoundaryAfter) -#define unorm2_hasBoundaryBefore U_ICU_ENTRY_POINT_RENAME(unorm2_hasBoundaryBefore) -#define unorm2_isInert U_ICU_ENTRY_POINT_RENAME(unorm2_isInert) -#define unorm2_isNormalized U_ICU_ENTRY_POINT_RENAME(unorm2_isNormalized) -#define unorm2_normalize U_ICU_ENTRY_POINT_RENAME(unorm2_normalize) -#define unorm2_normalizeSecondAndAppend U_ICU_ENTRY_POINT_RENAME(unorm2_normalizeSecondAndAppend) -#define unorm2_openFiltered U_ICU_ENTRY_POINT_RENAME(unorm2_openFiltered) -#define unorm2_quickCheck U_ICU_ENTRY_POINT_RENAME(unorm2_quickCheck) -#define unorm2_spanQuickCheckYes U_ICU_ENTRY_POINT_RENAME(unorm2_spanQuickCheckYes) -#define unorm2_swap U_ICU_ENTRY_POINT_RENAME(unorm2_swap) -#define unorm_compare U_ICU_ENTRY_POINT_RENAME(unorm_compare) -#define unorm_concatenate U_ICU_ENTRY_POINT_RENAME(unorm_concatenate) -#define unorm_getFCD16 U_ICU_ENTRY_POINT_RENAME(unorm_getFCD16) -#define unorm_getQuickCheck U_ICU_ENTRY_POINT_RENAME(unorm_getQuickCheck) -#define unorm_isNormalized U_ICU_ENTRY_POINT_RENAME(unorm_isNormalized) -#define unorm_isNormalizedWithOptions U_ICU_ENTRY_POINT_RENAME(unorm_isNormalizedWithOptions) -#define unorm_next U_ICU_ENTRY_POINT_RENAME(unorm_next) -#define unorm_normalize U_ICU_ENTRY_POINT_RENAME(unorm_normalize) -#define unorm_previous U_ICU_ENTRY_POINT_RENAME(unorm_previous) -#define unorm_quickCheck U_ICU_ENTRY_POINT_RENAME(unorm_quickCheck) -#define unorm_quickCheckWithOptions U_ICU_ENTRY_POINT_RENAME(unorm_quickCheckWithOptions) -#define unum_applyPattern U_ICU_ENTRY_POINT_RENAME(unum_applyPattern) -#define unum_clone U_ICU_ENTRY_POINT_RENAME(unum_clone) -#define unum_close U_ICU_ENTRY_POINT_RENAME(unum_close) -#define unum_countAvailable U_ICU_ENTRY_POINT_RENAME(unum_countAvailable) -#define unum_format U_ICU_ENTRY_POINT_RENAME(unum_format) -#define unum_formatDecimal U_ICU_ENTRY_POINT_RENAME(unum_formatDecimal) -#define unum_formatDouble U_ICU_ENTRY_POINT_RENAME(unum_formatDouble) -#define unum_formatDoubleCurrency U_ICU_ENTRY_POINT_RENAME(unum_formatDoubleCurrency) -#define unum_formatDoubleForFields U_ICU_ENTRY_POINT_RENAME(unum_formatDoubleForFields) -#define unum_formatInt64 U_ICU_ENTRY_POINT_RENAME(unum_formatInt64) -#define unum_formatUFormattable U_ICU_ENTRY_POINT_RENAME(unum_formatUFormattable) -#define unum_getAttribute U_ICU_ENTRY_POINT_RENAME(unum_getAttribute) -#define unum_getAvailable U_ICU_ENTRY_POINT_RENAME(unum_getAvailable) -#define unum_getContext U_ICU_ENTRY_POINT_RENAME(unum_getContext) -#define unum_getDoubleAttribute U_ICU_ENTRY_POINT_RENAME(unum_getDoubleAttribute) -#define unum_getLocaleByType U_ICU_ENTRY_POINT_RENAME(unum_getLocaleByType) -#define unum_getSymbol U_ICU_ENTRY_POINT_RENAME(unum_getSymbol) -#define unum_getTextAttribute U_ICU_ENTRY_POINT_RENAME(unum_getTextAttribute) -#define unum_open U_ICU_ENTRY_POINT_RENAME(unum_open) -#define unum_parse U_ICU_ENTRY_POINT_RENAME(unum_parse) -#define unum_parseDecimal U_ICU_ENTRY_POINT_RENAME(unum_parseDecimal) -#define unum_parseDouble U_ICU_ENTRY_POINT_RENAME(unum_parseDouble) -#define unum_parseDoubleCurrency U_ICU_ENTRY_POINT_RENAME(unum_parseDoubleCurrency) -#define unum_parseInt64 U_ICU_ENTRY_POINT_RENAME(unum_parseInt64) -#define unum_parseToUFormattable U_ICU_ENTRY_POINT_RENAME(unum_parseToUFormattable) -#define unum_setAttribute U_ICU_ENTRY_POINT_RENAME(unum_setAttribute) -#define unum_setContext U_ICU_ENTRY_POINT_RENAME(unum_setContext) -#define unum_setDoubleAttribute U_ICU_ENTRY_POINT_RENAME(unum_setDoubleAttribute) -#define unum_setSymbol U_ICU_ENTRY_POINT_RENAME(unum_setSymbol) -#define unum_setTextAttribute U_ICU_ENTRY_POINT_RENAME(unum_setTextAttribute) -#define unum_toPattern U_ICU_ENTRY_POINT_RENAME(unum_toPattern) -#define unumf_close U_ICU_ENTRY_POINT_RENAME(unumf_close) -#define unumf_closeResult U_ICU_ENTRY_POINT_RENAME(unumf_closeResult) -#define unumf_formatDecimal U_ICU_ENTRY_POINT_RENAME(unumf_formatDecimal) -#define unumf_formatDouble U_ICU_ENTRY_POINT_RENAME(unumf_formatDouble) -#define unumf_formatInt U_ICU_ENTRY_POINT_RENAME(unumf_formatInt) -#define unumf_openForSkeletonAndLocale U_ICU_ENTRY_POINT_RENAME(unumf_openForSkeletonAndLocale) -#define unumf_openForSkeletonAndLocaleWithError U_ICU_ENTRY_POINT_RENAME(unumf_openForSkeletonAndLocaleWithError) -#define unumf_openResult U_ICU_ENTRY_POINT_RENAME(unumf_openResult) -#define unumf_resultAsValue U_ICU_ENTRY_POINT_RENAME(unumf_resultAsValue) -#define unumf_resultGetAllFieldPositions U_ICU_ENTRY_POINT_RENAME(unumf_resultGetAllFieldPositions) -#define unumf_resultNextFieldPosition U_ICU_ENTRY_POINT_RENAME(unumf_resultNextFieldPosition) -#define unumf_resultToString U_ICU_ENTRY_POINT_RENAME(unumf_resultToString) -#define unumsys_close U_ICU_ENTRY_POINT_RENAME(unumsys_close) -#define unumsys_getDescription U_ICU_ENTRY_POINT_RENAME(unumsys_getDescription) -#define unumsys_getName U_ICU_ENTRY_POINT_RENAME(unumsys_getName) -#define unumsys_getRadix U_ICU_ENTRY_POINT_RENAME(unumsys_getRadix) -#define unumsys_isAlgorithmic U_ICU_ENTRY_POINT_RENAME(unumsys_isAlgorithmic) -#define unumsys_open U_ICU_ENTRY_POINT_RENAME(unumsys_open) -#define unumsys_openAvailableNames U_ICU_ENTRY_POINT_RENAME(unumsys_openAvailableNames) -#define unumsys_openByName U_ICU_ENTRY_POINT_RENAME(unumsys_openByName) -#define uplrules_close U_ICU_ENTRY_POINT_RENAME(uplrules_close) -#define uplrules_getKeywords U_ICU_ENTRY_POINT_RENAME(uplrules_getKeywords) -#define uplrules_open U_ICU_ENTRY_POINT_RENAME(uplrules_open) -#define uplrules_openForType U_ICU_ENTRY_POINT_RENAME(uplrules_openForType) -#define uplrules_select U_ICU_ENTRY_POINT_RENAME(uplrules_select) -#define uplrules_selectFormatted U_ICU_ENTRY_POINT_RENAME(uplrules_selectFormatted) -#define uplrules_selectWithFormat U_ICU_ENTRY_POINT_RENAME(uplrules_selectWithFormat) -#define uplug_closeLibrary U_ICU_ENTRY_POINT_RENAME(uplug_closeLibrary) -#define uplug_findLibrary U_ICU_ENTRY_POINT_RENAME(uplug_findLibrary) -#define uplug_getConfiguration U_ICU_ENTRY_POINT_RENAME(uplug_getConfiguration) -#define uplug_getContext U_ICU_ENTRY_POINT_RENAME(uplug_getContext) -#define uplug_getCurrentLevel U_ICU_ENTRY_POINT_RENAME(uplug_getCurrentLevel) -#define uplug_getLibrary U_ICU_ENTRY_POINT_RENAME(uplug_getLibrary) -#define uplug_getLibraryName U_ICU_ENTRY_POINT_RENAME(uplug_getLibraryName) -#define uplug_getPlugInternal U_ICU_ENTRY_POINT_RENAME(uplug_getPlugInternal) -#define uplug_getPlugLevel U_ICU_ENTRY_POINT_RENAME(uplug_getPlugLevel) -#define uplug_getPlugLoadStatus U_ICU_ENTRY_POINT_RENAME(uplug_getPlugLoadStatus) -#define uplug_getPlugName U_ICU_ENTRY_POINT_RENAME(uplug_getPlugName) -#define uplug_getPluginFile U_ICU_ENTRY_POINT_RENAME(uplug_getPluginFile) -#define uplug_getSymbolName U_ICU_ENTRY_POINT_RENAME(uplug_getSymbolName) -#define uplug_init U_ICU_ENTRY_POINT_RENAME(uplug_init) -#define uplug_loadPlugFromEntrypoint U_ICU_ENTRY_POINT_RENAME(uplug_loadPlugFromEntrypoint) -#define uplug_loadPlugFromLibrary U_ICU_ENTRY_POINT_RENAME(uplug_loadPlugFromLibrary) -#define uplug_nextPlug U_ICU_ENTRY_POINT_RENAME(uplug_nextPlug) -#define uplug_openLibrary U_ICU_ENTRY_POINT_RENAME(uplug_openLibrary) -#define uplug_removePlug U_ICU_ENTRY_POINT_RENAME(uplug_removePlug) -#define uplug_setContext U_ICU_ENTRY_POINT_RENAME(uplug_setContext) -#define uplug_setPlugLevel U_ICU_ENTRY_POINT_RENAME(uplug_setPlugLevel) -#define uplug_setPlugName U_ICU_ENTRY_POINT_RENAME(uplug_setPlugName) -#define uplug_setPlugNoUnload U_ICU_ENTRY_POINT_RENAME(uplug_setPlugNoUnload) -#define uprops_addPropertyStarts U_ICU_ENTRY_POINT_RENAME(uprops_addPropertyStarts) -#define uprops_getSource U_ICU_ENTRY_POINT_RENAME(uprops_getSource) -#define upropsvec_addPropertyStarts U_ICU_ENTRY_POINT_RENAME(upropsvec_addPropertyStarts) -#define uprv_add32_overflow U_ICU_ENTRY_POINT_RENAME(uprv_add32_overflow) -#define uprv_aestrncpy U_ICU_ENTRY_POINT_RENAME(uprv_aestrncpy) -#define uprv_asciiFromEbcdic U_ICU_ENTRY_POINT_RENAME(uprv_asciiFromEbcdic) -#define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower) -#define uprv_calloc U_ICU_ENTRY_POINT_RENAME(uprv_calloc) -#define uprv_ceil U_ICU_ENTRY_POINT_RENAME(uprv_ceil) -#define uprv_compareASCIIPropertyNames U_ICU_ENTRY_POINT_RENAME(uprv_compareASCIIPropertyNames) -#define uprv_compareEBCDICPropertyNames U_ICU_ENTRY_POINT_RENAME(uprv_compareEBCDICPropertyNames) -#define uprv_compareInvAscii U_ICU_ENTRY_POINT_RENAME(uprv_compareInvAscii) -#define uprv_compareInvEbcdic U_ICU_ENTRY_POINT_RENAME(uprv_compareInvEbcdic) -#define uprv_compareInvEbcdicAsAscii U_ICU_ENTRY_POINT_RENAME(uprv_compareInvEbcdicAsAscii) -#define uprv_convertToLCID U_ICU_ENTRY_POINT_RENAME(uprv_convertToLCID) -#define uprv_convertToLCIDPlatform U_ICU_ENTRY_POINT_RENAME(uprv_convertToLCIDPlatform) -#define uprv_convertToPosix U_ICU_ENTRY_POINT_RENAME(uprv_convertToPosix) -#define uprv_copyAscii U_ICU_ENTRY_POINT_RENAME(uprv_copyAscii) -#define uprv_copyEbcdic U_ICU_ENTRY_POINT_RENAME(uprv_copyEbcdic) -#define uprv_currencyLeads U_ICU_ENTRY_POINT_RENAME(uprv_currencyLeads) -#define uprv_decContextClearStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextClearStatus) -#define uprv_decContextDefault U_ICU_ENTRY_POINT_RENAME(uprv_decContextDefault) -#define uprv_decContextGetRounding U_ICU_ENTRY_POINT_RENAME(uprv_decContextGetRounding) -#define uprv_decContextGetStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextGetStatus) -#define uprv_decContextRestoreStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextRestoreStatus) -#define uprv_decContextSaveStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextSaveStatus) -#define uprv_decContextSetRounding U_ICU_ENTRY_POINT_RENAME(uprv_decContextSetRounding) -#define uprv_decContextSetStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextSetStatus) -#define uprv_decContextSetStatusFromString U_ICU_ENTRY_POINT_RENAME(uprv_decContextSetStatusFromString) -#define uprv_decContextSetStatusFromStringQuiet U_ICU_ENTRY_POINT_RENAME(uprv_decContextSetStatusFromStringQuiet) -#define uprv_decContextSetStatusQuiet U_ICU_ENTRY_POINT_RENAME(uprv_decContextSetStatusQuiet) -#define uprv_decContextStatusToString U_ICU_ENTRY_POINT_RENAME(uprv_decContextStatusToString) -#define uprv_decContextTestSavedStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextTestSavedStatus) -#define uprv_decContextTestStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextTestStatus) -#define uprv_decContextZeroStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextZeroStatus) -#define uprv_decNumberAbs U_ICU_ENTRY_POINT_RENAME(uprv_decNumberAbs) -#define uprv_decNumberAdd U_ICU_ENTRY_POINT_RENAME(uprv_decNumberAdd) -#define uprv_decNumberAnd U_ICU_ENTRY_POINT_RENAME(uprv_decNumberAnd) -#define uprv_decNumberClass U_ICU_ENTRY_POINT_RENAME(uprv_decNumberClass) -#define uprv_decNumberClassToString U_ICU_ENTRY_POINT_RENAME(uprv_decNumberClassToString) -#define uprv_decNumberCompare U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCompare) -#define uprv_decNumberCompareSignal U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCompareSignal) -#define uprv_decNumberCompareTotal U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCompareTotal) -#define uprv_decNumberCompareTotalMag U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCompareTotalMag) -#define uprv_decNumberCopy U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCopy) -#define uprv_decNumberCopyAbs U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCopyAbs) -#define uprv_decNumberCopyNegate U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCopyNegate) -#define uprv_decNumberCopySign U_ICU_ENTRY_POINT_RENAME(uprv_decNumberCopySign) -#define uprv_decNumberDivide U_ICU_ENTRY_POINT_RENAME(uprv_decNumberDivide) -#define uprv_decNumberDivideInteger U_ICU_ENTRY_POINT_RENAME(uprv_decNumberDivideInteger) -#define uprv_decNumberExp U_ICU_ENTRY_POINT_RENAME(uprv_decNumberExp) -#define uprv_decNumberFMA U_ICU_ENTRY_POINT_RENAME(uprv_decNumberFMA) -#define uprv_decNumberFromInt32 U_ICU_ENTRY_POINT_RENAME(uprv_decNumberFromInt32) -#define uprv_decNumberFromString U_ICU_ENTRY_POINT_RENAME(uprv_decNumberFromString) -#define uprv_decNumberFromUInt32 U_ICU_ENTRY_POINT_RENAME(uprv_decNumberFromUInt32) -#define uprv_decNumberGetBCD U_ICU_ENTRY_POINT_RENAME(uprv_decNumberGetBCD) -#define uprv_decNumberInvert U_ICU_ENTRY_POINT_RENAME(uprv_decNumberInvert) -#define uprv_decNumberIsNormal U_ICU_ENTRY_POINT_RENAME(uprv_decNumberIsNormal) -#define uprv_decNumberIsSubnormal U_ICU_ENTRY_POINT_RENAME(uprv_decNumberIsSubnormal) -#define uprv_decNumberLn U_ICU_ENTRY_POINT_RENAME(uprv_decNumberLn) -#define uprv_decNumberLog10 U_ICU_ENTRY_POINT_RENAME(uprv_decNumberLog10) -#define uprv_decNumberLogB U_ICU_ENTRY_POINT_RENAME(uprv_decNumberLogB) -#define uprv_decNumberMax U_ICU_ENTRY_POINT_RENAME(uprv_decNumberMax) -#define uprv_decNumberMaxMag U_ICU_ENTRY_POINT_RENAME(uprv_decNumberMaxMag) -#define uprv_decNumberMin U_ICU_ENTRY_POINT_RENAME(uprv_decNumberMin) -#define uprv_decNumberMinMag U_ICU_ENTRY_POINT_RENAME(uprv_decNumberMinMag) -#define uprv_decNumberMinus U_ICU_ENTRY_POINT_RENAME(uprv_decNumberMinus) -#define uprv_decNumberMultiply U_ICU_ENTRY_POINT_RENAME(uprv_decNumberMultiply) -#define uprv_decNumberNextMinus U_ICU_ENTRY_POINT_RENAME(uprv_decNumberNextMinus) -#define uprv_decNumberNextPlus U_ICU_ENTRY_POINT_RENAME(uprv_decNumberNextPlus) -#define uprv_decNumberNextToward U_ICU_ENTRY_POINT_RENAME(uprv_decNumberNextToward) -#define uprv_decNumberNormalize U_ICU_ENTRY_POINT_RENAME(uprv_decNumberNormalize) -#define uprv_decNumberOr U_ICU_ENTRY_POINT_RENAME(uprv_decNumberOr) -#define uprv_decNumberPlus U_ICU_ENTRY_POINT_RENAME(uprv_decNumberPlus) -#define uprv_decNumberPower U_ICU_ENTRY_POINT_RENAME(uprv_decNumberPower) -#define uprv_decNumberQuantize U_ICU_ENTRY_POINT_RENAME(uprv_decNumberQuantize) -#define uprv_decNumberReduce U_ICU_ENTRY_POINT_RENAME(uprv_decNumberReduce) -#define uprv_decNumberRemainder U_ICU_ENTRY_POINT_RENAME(uprv_decNumberRemainder) -#define uprv_decNumberRemainderNear U_ICU_ENTRY_POINT_RENAME(uprv_decNumberRemainderNear) -#define uprv_decNumberRescale U_ICU_ENTRY_POINT_RENAME(uprv_decNumberRescale) -#define uprv_decNumberRotate U_ICU_ENTRY_POINT_RENAME(uprv_decNumberRotate) -#define uprv_decNumberSameQuantum U_ICU_ENTRY_POINT_RENAME(uprv_decNumberSameQuantum) -#define uprv_decNumberScaleB U_ICU_ENTRY_POINT_RENAME(uprv_decNumberScaleB) -#define uprv_decNumberSetBCD U_ICU_ENTRY_POINT_RENAME(uprv_decNumberSetBCD) -#define uprv_decNumberShift U_ICU_ENTRY_POINT_RENAME(uprv_decNumberShift) -#define uprv_decNumberSquareRoot U_ICU_ENTRY_POINT_RENAME(uprv_decNumberSquareRoot) -#define uprv_decNumberSubtract U_ICU_ENTRY_POINT_RENAME(uprv_decNumberSubtract) -#define uprv_decNumberToEngString U_ICU_ENTRY_POINT_RENAME(uprv_decNumberToEngString) -#define uprv_decNumberToInt32 U_ICU_ENTRY_POINT_RENAME(uprv_decNumberToInt32) -#define uprv_decNumberToIntegralExact U_ICU_ENTRY_POINT_RENAME(uprv_decNumberToIntegralExact) -#define uprv_decNumberToIntegralValue U_ICU_ENTRY_POINT_RENAME(uprv_decNumberToIntegralValue) -#define uprv_decNumberToString U_ICU_ENTRY_POINT_RENAME(uprv_decNumberToString) -#define uprv_decNumberToUInt32 U_ICU_ENTRY_POINT_RENAME(uprv_decNumberToUInt32) -#define uprv_decNumberTrim U_ICU_ENTRY_POINT_RENAME(uprv_decNumberTrim) -#define uprv_decNumberVersion U_ICU_ENTRY_POINT_RENAME(uprv_decNumberVersion) -#define uprv_decNumberXor U_ICU_ENTRY_POINT_RENAME(uprv_decNumberXor) -#define uprv_decNumberZero U_ICU_ENTRY_POINT_RENAME(uprv_decNumberZero) -#define uprv_deleteConditionalCE32 U_ICU_ENTRY_POINT_RENAME(uprv_deleteConditionalCE32) -#define uprv_deleteUObject U_ICU_ENTRY_POINT_RENAME(uprv_deleteUObject) -#define uprv_dl_close U_ICU_ENTRY_POINT_RENAME(uprv_dl_close) -#define uprv_dl_open U_ICU_ENTRY_POINT_RENAME(uprv_dl_open) -#define uprv_dlsym_func U_ICU_ENTRY_POINT_RENAME(uprv_dlsym_func) -#define uprv_eastrncpy U_ICU_ENTRY_POINT_RENAME(uprv_eastrncpy) -#define uprv_ebcdicFromAscii U_ICU_ENTRY_POINT_RENAME(uprv_ebcdicFromAscii) -#define uprv_ebcdicToLowercaseAscii U_ICU_ENTRY_POINT_RENAME(uprv_ebcdicToLowercaseAscii) -#define uprv_ebcdictolower U_ICU_ENTRY_POINT_RENAME(uprv_ebcdictolower) -#define uprv_fabs U_ICU_ENTRY_POINT_RENAME(uprv_fabs) -#define uprv_floor U_ICU_ENTRY_POINT_RENAME(uprv_floor) -#define uprv_fmax U_ICU_ENTRY_POINT_RENAME(uprv_fmax) -#define uprv_fmin U_ICU_ENTRY_POINT_RENAME(uprv_fmin) -#define uprv_fmod U_ICU_ENTRY_POINT_RENAME(uprv_fmod) -#define uprv_free U_ICU_ENTRY_POINT_RENAME(uprv_free) -#define uprv_getCharNameCharacters U_ICU_ENTRY_POINT_RENAME(uprv_getCharNameCharacters) -#define uprv_getDefaultLocaleID U_ICU_ENTRY_POINT_RENAME(uprv_getDefaultLocaleID) -#define uprv_getInfinity U_ICU_ENTRY_POINT_RENAME(uprv_getInfinity) -#define uprv_getMaxCharNameLength U_ICU_ENTRY_POINT_RENAME(uprv_getMaxCharNameLength) -#define uprv_getMaxValues U_ICU_ENTRY_POINT_RENAME(uprv_getMaxValues) -#define uprv_getNaN U_ICU_ENTRY_POINT_RENAME(uprv_getNaN) -#define uprv_getRawUTCtime U_ICU_ENTRY_POINT_RENAME(uprv_getRawUTCtime) -#define uprv_getStaticCurrencyName U_ICU_ENTRY_POINT_RENAME(uprv_getStaticCurrencyName) -#define uprv_getUTCtime U_ICU_ENTRY_POINT_RENAME(uprv_getUTCtime) -#define uprv_int32Comparator U_ICU_ENTRY_POINT_RENAME(uprv_int32Comparator) -#define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter) -#define uprv_isInfinite U_ICU_ENTRY_POINT_RENAME(uprv_isInfinite) -#define uprv_isInvariantString U_ICU_ENTRY_POINT_RENAME(uprv_isInvariantString) -#define uprv_isInvariantUString U_ICU_ENTRY_POINT_RENAME(uprv_isInvariantUString) -#define uprv_isNaN U_ICU_ENTRY_POINT_RENAME(uprv_isNaN) -#define uprv_isNegativeInfinity U_ICU_ENTRY_POINT_RENAME(uprv_isNegativeInfinity) -#define uprv_isPositiveInfinity U_ICU_ENTRY_POINT_RENAME(uprv_isPositiveInfinity) -#define uprv_itou U_ICU_ENTRY_POINT_RENAME(uprv_itou) -#define uprv_log U_ICU_ENTRY_POINT_RENAME(uprv_log) -#define uprv_malloc U_ICU_ENTRY_POINT_RENAME(uprv_malloc) -#define uprv_mapFile U_ICU_ENTRY_POINT_RENAME(uprv_mapFile) -#define uprv_max U_ICU_ENTRY_POINT_RENAME(uprv_max) -#define uprv_maxMantissa U_ICU_ENTRY_POINT_RENAME(uprv_maxMantissa) -#define uprv_maximumPtr U_ICU_ENTRY_POINT_RENAME(uprv_maximumPtr) -#define uprv_min U_ICU_ENTRY_POINT_RENAME(uprv_min) -#define uprv_modf U_ICU_ENTRY_POINT_RENAME(uprv_modf) -#define uprv_mul32_overflow U_ICU_ENTRY_POINT_RENAME(uprv_mul32_overflow) -#define uprv_parseCurrency U_ICU_ENTRY_POINT_RENAME(uprv_parseCurrency) -#define uprv_pathIsAbsolute U_ICU_ENTRY_POINT_RENAME(uprv_pathIsAbsolute) -#define uprv_pow U_ICU_ENTRY_POINT_RENAME(uprv_pow) -#define uprv_pow10 U_ICU_ENTRY_POINT_RENAME(uprv_pow10) -#define uprv_realloc U_ICU_ENTRY_POINT_RENAME(uprv_realloc) -#define uprv_round U_ICU_ENTRY_POINT_RENAME(uprv_round) -#define uprv_sortArray U_ICU_ENTRY_POINT_RENAME(uprv_sortArray) -#define uprv_stableBinarySearch U_ICU_ENTRY_POINT_RENAME(uprv_stableBinarySearch) -#define uprv_strCompare U_ICU_ENTRY_POINT_RENAME(uprv_strCompare) -#define uprv_strdup U_ICU_ENTRY_POINT_RENAME(uprv_strdup) -#define uprv_stricmp U_ICU_ENTRY_POINT_RENAME(uprv_stricmp) -#define uprv_strndup U_ICU_ENTRY_POINT_RENAME(uprv_strndup) -#define uprv_strnicmp U_ICU_ENTRY_POINT_RENAME(uprv_strnicmp) -#define uprv_syntaxError U_ICU_ENTRY_POINT_RENAME(uprv_syntaxError) -#define uprv_timezone U_ICU_ENTRY_POINT_RENAME(uprv_timezone) -#define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper) -#define uprv_trunc U_ICU_ENTRY_POINT_RENAME(uprv_trunc) -#define uprv_tzname U_ICU_ENTRY_POINT_RENAME(uprv_tzname) -#define uprv_tzname_clear_cache U_ICU_ENTRY_POINT_RENAME(uprv_tzname_clear_cache) -#define uprv_tzset U_ICU_ENTRY_POINT_RENAME(uprv_tzset) -#define uprv_uint16Comparator U_ICU_ENTRY_POINT_RENAME(uprv_uint16Comparator) -#define uprv_uint32Comparator U_ICU_ENTRY_POINT_RENAME(uprv_uint32Comparator) -#define uprv_unmapFile U_ICU_ENTRY_POINT_RENAME(uprv_unmapFile) -#define upvec_cloneArray U_ICU_ENTRY_POINT_RENAME(upvec_cloneArray) -#define upvec_close U_ICU_ENTRY_POINT_RENAME(upvec_close) -#define upvec_compact U_ICU_ENTRY_POINT_RENAME(upvec_compact) -#define upvec_compactToUTrie2Handler U_ICU_ENTRY_POINT_RENAME(upvec_compactToUTrie2Handler) -#define upvec_compactToUTrie2WithRowIndexes U_ICU_ENTRY_POINT_RENAME(upvec_compactToUTrie2WithRowIndexes) -#define upvec_getArray U_ICU_ENTRY_POINT_RENAME(upvec_getArray) -#define upvec_getRow U_ICU_ENTRY_POINT_RENAME(upvec_getRow) -#define upvec_getValue U_ICU_ENTRY_POINT_RENAME(upvec_getValue) -#define upvec_open U_ICU_ENTRY_POINT_RENAME(upvec_open) -#define upvec_setValue U_ICU_ENTRY_POINT_RENAME(upvec_setValue) -#define uregex_appendReplacement U_ICU_ENTRY_POINT_RENAME(uregex_appendReplacement) -#define uregex_appendReplacementUText U_ICU_ENTRY_POINT_RENAME(uregex_appendReplacementUText) -#define uregex_appendTail U_ICU_ENTRY_POINT_RENAME(uregex_appendTail) -#define uregex_appendTailUText U_ICU_ENTRY_POINT_RENAME(uregex_appendTailUText) -#define uregex_clone U_ICU_ENTRY_POINT_RENAME(uregex_clone) -#define uregex_close U_ICU_ENTRY_POINT_RENAME(uregex_close) -#define uregex_end U_ICU_ENTRY_POINT_RENAME(uregex_end) -#define uregex_end64 U_ICU_ENTRY_POINT_RENAME(uregex_end64) -#define uregex_find U_ICU_ENTRY_POINT_RENAME(uregex_find) -#define uregex_find64 U_ICU_ENTRY_POINT_RENAME(uregex_find64) -#define uregex_findNext U_ICU_ENTRY_POINT_RENAME(uregex_findNext) -#define uregex_flags U_ICU_ENTRY_POINT_RENAME(uregex_flags) -#define uregex_getFindProgressCallback U_ICU_ENTRY_POINT_RENAME(uregex_getFindProgressCallback) -#define uregex_getMatchCallback U_ICU_ENTRY_POINT_RENAME(uregex_getMatchCallback) -#define uregex_getStackLimit U_ICU_ENTRY_POINT_RENAME(uregex_getStackLimit) -#define uregex_getText U_ICU_ENTRY_POINT_RENAME(uregex_getText) -#define uregex_getTimeLimit U_ICU_ENTRY_POINT_RENAME(uregex_getTimeLimit) -#define uregex_getUText U_ICU_ENTRY_POINT_RENAME(uregex_getUText) -#define uregex_group U_ICU_ENTRY_POINT_RENAME(uregex_group) -#define uregex_groupCount U_ICU_ENTRY_POINT_RENAME(uregex_groupCount) -#define uregex_groupNumberFromCName U_ICU_ENTRY_POINT_RENAME(uregex_groupNumberFromCName) -#define uregex_groupNumberFromName U_ICU_ENTRY_POINT_RENAME(uregex_groupNumberFromName) -#define uregex_groupUText U_ICU_ENTRY_POINT_RENAME(uregex_groupUText) -#define uregex_hasAnchoringBounds U_ICU_ENTRY_POINT_RENAME(uregex_hasAnchoringBounds) -#define uregex_hasTransparentBounds U_ICU_ENTRY_POINT_RENAME(uregex_hasTransparentBounds) -#define uregex_hitEnd U_ICU_ENTRY_POINT_RENAME(uregex_hitEnd) -#define uregex_lookingAt U_ICU_ENTRY_POINT_RENAME(uregex_lookingAt) -#define uregex_lookingAt64 U_ICU_ENTRY_POINT_RENAME(uregex_lookingAt64) -#define uregex_matches U_ICU_ENTRY_POINT_RENAME(uregex_matches) -#define uregex_matches64 U_ICU_ENTRY_POINT_RENAME(uregex_matches64) -#define uregex_open U_ICU_ENTRY_POINT_RENAME(uregex_open) -#define uregex_openC U_ICU_ENTRY_POINT_RENAME(uregex_openC) -#define uregex_openUText U_ICU_ENTRY_POINT_RENAME(uregex_openUText) -#define uregex_pattern U_ICU_ENTRY_POINT_RENAME(uregex_pattern) -#define uregex_patternUText U_ICU_ENTRY_POINT_RENAME(uregex_patternUText) -#define uregex_refreshUText U_ICU_ENTRY_POINT_RENAME(uregex_refreshUText) -#define uregex_regionEnd U_ICU_ENTRY_POINT_RENAME(uregex_regionEnd) -#define uregex_regionEnd64 U_ICU_ENTRY_POINT_RENAME(uregex_regionEnd64) -#define uregex_regionStart U_ICU_ENTRY_POINT_RENAME(uregex_regionStart) -#define uregex_regionStart64 U_ICU_ENTRY_POINT_RENAME(uregex_regionStart64) -#define uregex_replaceAll U_ICU_ENTRY_POINT_RENAME(uregex_replaceAll) -#define uregex_replaceAllUText U_ICU_ENTRY_POINT_RENAME(uregex_replaceAllUText) -#define uregex_replaceFirst U_ICU_ENTRY_POINT_RENAME(uregex_replaceFirst) -#define uregex_replaceFirstUText U_ICU_ENTRY_POINT_RENAME(uregex_replaceFirstUText) -#define uregex_requireEnd U_ICU_ENTRY_POINT_RENAME(uregex_requireEnd) -#define uregex_reset U_ICU_ENTRY_POINT_RENAME(uregex_reset) -#define uregex_reset64 U_ICU_ENTRY_POINT_RENAME(uregex_reset64) -#define uregex_setFindProgressCallback U_ICU_ENTRY_POINT_RENAME(uregex_setFindProgressCallback) -#define uregex_setMatchCallback U_ICU_ENTRY_POINT_RENAME(uregex_setMatchCallback) -#define uregex_setRegion U_ICU_ENTRY_POINT_RENAME(uregex_setRegion) -#define uregex_setRegion64 U_ICU_ENTRY_POINT_RENAME(uregex_setRegion64) -#define uregex_setRegionAndStart U_ICU_ENTRY_POINT_RENAME(uregex_setRegionAndStart) -#define uregex_setStackLimit U_ICU_ENTRY_POINT_RENAME(uregex_setStackLimit) -#define uregex_setText U_ICU_ENTRY_POINT_RENAME(uregex_setText) -#define uregex_setTimeLimit U_ICU_ENTRY_POINT_RENAME(uregex_setTimeLimit) -#define uregex_setUText U_ICU_ENTRY_POINT_RENAME(uregex_setUText) -#define uregex_split U_ICU_ENTRY_POINT_RENAME(uregex_split) -#define uregex_splitUText U_ICU_ENTRY_POINT_RENAME(uregex_splitUText) -#define uregex_start U_ICU_ENTRY_POINT_RENAME(uregex_start) -#define uregex_start64 U_ICU_ENTRY_POINT_RENAME(uregex_start64) -#define uregex_ucstr_unescape_charAt U_ICU_ENTRY_POINT_RENAME(uregex_ucstr_unescape_charAt) -#define uregex_useAnchoringBounds U_ICU_ENTRY_POINT_RENAME(uregex_useAnchoringBounds) -#define uregex_useTransparentBounds U_ICU_ENTRY_POINT_RENAME(uregex_useTransparentBounds) -#define uregex_utext_unescape_charAt U_ICU_ENTRY_POINT_RENAME(uregex_utext_unescape_charAt) -#define uregion_areEqual U_ICU_ENTRY_POINT_RENAME(uregion_areEqual) -#define uregion_contains U_ICU_ENTRY_POINT_RENAME(uregion_contains) -#define uregion_getAvailable U_ICU_ENTRY_POINT_RENAME(uregion_getAvailable) -#define uregion_getContainedRegions U_ICU_ENTRY_POINT_RENAME(uregion_getContainedRegions) -#define uregion_getContainedRegionsOfType U_ICU_ENTRY_POINT_RENAME(uregion_getContainedRegionsOfType) -#define uregion_getContainingRegion U_ICU_ENTRY_POINT_RENAME(uregion_getContainingRegion) -#define uregion_getContainingRegionOfType U_ICU_ENTRY_POINT_RENAME(uregion_getContainingRegionOfType) -#define uregion_getNumericCode U_ICU_ENTRY_POINT_RENAME(uregion_getNumericCode) -#define uregion_getPreferredValues U_ICU_ENTRY_POINT_RENAME(uregion_getPreferredValues) -#define uregion_getRegionCode U_ICU_ENTRY_POINT_RENAME(uregion_getRegionCode) -#define uregion_getRegionFromCode U_ICU_ENTRY_POINT_RENAME(uregion_getRegionFromCode) -#define uregion_getRegionFromNumericCode U_ICU_ENTRY_POINT_RENAME(uregion_getRegionFromNumericCode) -#define uregion_getType U_ICU_ENTRY_POINT_RENAME(uregion_getType) -#define ureldatefmt_close U_ICU_ENTRY_POINT_RENAME(ureldatefmt_close) -#define ureldatefmt_closeResult U_ICU_ENTRY_POINT_RENAME(ureldatefmt_closeResult) -#define ureldatefmt_combineDateAndTime U_ICU_ENTRY_POINT_RENAME(ureldatefmt_combineDateAndTime) -#define ureldatefmt_format U_ICU_ENTRY_POINT_RENAME(ureldatefmt_format) -#define ureldatefmt_formatNumeric U_ICU_ENTRY_POINT_RENAME(ureldatefmt_formatNumeric) -#define ureldatefmt_formatNumericToResult U_ICU_ENTRY_POINT_RENAME(ureldatefmt_formatNumericToResult) -#define ureldatefmt_formatToResult U_ICU_ENTRY_POINT_RENAME(ureldatefmt_formatToResult) -#define ureldatefmt_open U_ICU_ENTRY_POINT_RENAME(ureldatefmt_open) -#define ureldatefmt_openResult U_ICU_ENTRY_POINT_RENAME(ureldatefmt_openResult) -#define ureldatefmt_resultAsValue U_ICU_ENTRY_POINT_RENAME(ureldatefmt_resultAsValue) -#define ures_close U_ICU_ENTRY_POINT_RENAME(ures_close) -#define ures_copyResb U_ICU_ENTRY_POINT_RENAME(ures_copyResb) -#define ures_countArrayItems U_ICU_ENTRY_POINT_RENAME(ures_countArrayItems) -#define ures_findResource U_ICU_ENTRY_POINT_RENAME(ures_findResource) -#define ures_findSubResource U_ICU_ENTRY_POINT_RENAME(ures_findSubResource) -#define ures_getAllItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllItemsWithFallback) -#define ures_getBinary U_ICU_ENTRY_POINT_RENAME(ures_getBinary) -#define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex) -#define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey) -#define ures_getByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getByKeyWithFallback) -#define ures_getFunctionalEquivalent U_ICU_ENTRY_POINT_RENAME(ures_getFunctionalEquivalent) -#define ures_getInt U_ICU_ENTRY_POINT_RENAME(ures_getInt) -#define ures_getIntVector U_ICU_ENTRY_POINT_RENAME(ures_getIntVector) -#define ures_getKey U_ICU_ENTRY_POINT_RENAME(ures_getKey) -#define ures_getKeywordValues U_ICU_ENTRY_POINT_RENAME(ures_getKeywordValues) -#define ures_getLocale U_ICU_ENTRY_POINT_RENAME(ures_getLocale) -#define ures_getLocaleByType U_ICU_ENTRY_POINT_RENAME(ures_getLocaleByType) -#define ures_getLocaleInternal U_ICU_ENTRY_POINT_RENAME(ures_getLocaleInternal) -#define ures_getName U_ICU_ENTRY_POINT_RENAME(ures_getName) -#define ures_getNextResource U_ICU_ENTRY_POINT_RENAME(ures_getNextResource) -#define ures_getNextString U_ICU_ENTRY_POINT_RENAME(ures_getNextString) -#define ures_getSize U_ICU_ENTRY_POINT_RENAME(ures_getSize) -#define ures_getString U_ICU_ENTRY_POINT_RENAME(ures_getString) -#define ures_getStringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getStringByIndex) -#define ures_getStringByKey U_ICU_ENTRY_POINT_RENAME(ures_getStringByKey) -#define ures_getStringByKeyWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getStringByKeyWithFallback) -#define ures_getType U_ICU_ENTRY_POINT_RENAME(ures_getType) -#define ures_getUInt U_ICU_ENTRY_POINT_RENAME(ures_getUInt) -#define ures_getUTF8String U_ICU_ENTRY_POINT_RENAME(ures_getUTF8String) -#define ures_getUTF8StringByIndex U_ICU_ENTRY_POINT_RENAME(ures_getUTF8StringByIndex) -#define ures_getUTF8StringByKey U_ICU_ENTRY_POINT_RENAME(ures_getUTF8StringByKey) -#define ures_getVersion U_ICU_ENTRY_POINT_RENAME(ures_getVersion) -#define ures_getVersionByKey U_ICU_ENTRY_POINT_RENAME(ures_getVersionByKey) -#define ures_getVersionNumber U_ICU_ENTRY_POINT_RENAME(ures_getVersionNumber) -#define ures_getVersionNumberInternal U_ICU_ENTRY_POINT_RENAME(ures_getVersionNumberInternal) -#define ures_hasNext U_ICU_ENTRY_POINT_RENAME(ures_hasNext) -#define ures_initStackObject U_ICU_ENTRY_POINT_RENAME(ures_initStackObject) -#define ures_open U_ICU_ENTRY_POINT_RENAME(ures_open) -#define ures_openAvailableLocales U_ICU_ENTRY_POINT_RENAME(ures_openAvailableLocales) -#define ures_openDirect U_ICU_ENTRY_POINT_RENAME(ures_openDirect) -#define ures_openDirectFillIn U_ICU_ENTRY_POINT_RENAME(ures_openDirectFillIn) -#define ures_openFillIn U_ICU_ENTRY_POINT_RENAME(ures_openFillIn) -#define ures_openNoDefault U_ICU_ENTRY_POINT_RENAME(ures_openNoDefault) -#define ures_openU U_ICU_ENTRY_POINT_RENAME(ures_openU) -#define ures_resetIterator U_ICU_ENTRY_POINT_RENAME(ures_resetIterator) -#define ures_swap U_ICU_ENTRY_POINT_RENAME(ures_swap) -#define uscript_breaksBetweenLetters U_ICU_ENTRY_POINT_RENAME(uscript_breaksBetweenLetters) -#define uscript_closeRun U_ICU_ENTRY_POINT_RENAME(uscript_closeRun) -#define uscript_getCode U_ICU_ENTRY_POINT_RENAME(uscript_getCode) -#define uscript_getName U_ICU_ENTRY_POINT_RENAME(uscript_getName) -#define uscript_getSampleString U_ICU_ENTRY_POINT_RENAME(uscript_getSampleString) -#define uscript_getSampleUnicodeString U_ICU_ENTRY_POINT_RENAME(uscript_getSampleUnicodeString) -#define uscript_getScript U_ICU_ENTRY_POINT_RENAME(uscript_getScript) -#define uscript_getScriptExtensions U_ICU_ENTRY_POINT_RENAME(uscript_getScriptExtensions) -#define uscript_getShortName U_ICU_ENTRY_POINT_RENAME(uscript_getShortName) -#define uscript_getUsage U_ICU_ENTRY_POINT_RENAME(uscript_getUsage) -#define uscript_hasScript U_ICU_ENTRY_POINT_RENAME(uscript_hasScript) -#define uscript_isCased U_ICU_ENTRY_POINT_RENAME(uscript_isCased) -#define uscript_isRightToLeft U_ICU_ENTRY_POINT_RENAME(uscript_isRightToLeft) -#define uscript_nextRun U_ICU_ENTRY_POINT_RENAME(uscript_nextRun) -#define uscript_openRun U_ICU_ENTRY_POINT_RENAME(uscript_openRun) -#define uscript_resetRun U_ICU_ENTRY_POINT_RENAME(uscript_resetRun) -#define uscript_setRunText U_ICU_ENTRY_POINT_RENAME(uscript_setRunText) -#define usearch_close U_ICU_ENTRY_POINT_RENAME(usearch_close) -#define usearch_first U_ICU_ENTRY_POINT_RENAME(usearch_first) -#define usearch_following U_ICU_ENTRY_POINT_RENAME(usearch_following) -#define usearch_getAttribute U_ICU_ENTRY_POINT_RENAME(usearch_getAttribute) -#define usearch_getBreakIterator U_ICU_ENTRY_POINT_RENAME(usearch_getBreakIterator) -#define usearch_getCollator U_ICU_ENTRY_POINT_RENAME(usearch_getCollator) -#define usearch_getMatchedLength U_ICU_ENTRY_POINT_RENAME(usearch_getMatchedLength) -#define usearch_getMatchedStart U_ICU_ENTRY_POINT_RENAME(usearch_getMatchedStart) -#define usearch_getMatchedText U_ICU_ENTRY_POINT_RENAME(usearch_getMatchedText) -#define usearch_getOffset U_ICU_ENTRY_POINT_RENAME(usearch_getOffset) -#define usearch_getPattern U_ICU_ENTRY_POINT_RENAME(usearch_getPattern) -#define usearch_getText U_ICU_ENTRY_POINT_RENAME(usearch_getText) -#define usearch_handleNextCanonical U_ICU_ENTRY_POINT_RENAME(usearch_handleNextCanonical) -#define usearch_handleNextExact U_ICU_ENTRY_POINT_RENAME(usearch_handleNextExact) -#define usearch_handlePreviousCanonical U_ICU_ENTRY_POINT_RENAME(usearch_handlePreviousCanonical) -#define usearch_handlePreviousExact U_ICU_ENTRY_POINT_RENAME(usearch_handlePreviousExact) -#define usearch_last U_ICU_ENTRY_POINT_RENAME(usearch_last) -#define usearch_next U_ICU_ENTRY_POINT_RENAME(usearch_next) -#define usearch_open U_ICU_ENTRY_POINT_RENAME(usearch_open) -#define usearch_openFromCollator U_ICU_ENTRY_POINT_RENAME(usearch_openFromCollator) -#define usearch_preceding U_ICU_ENTRY_POINT_RENAME(usearch_preceding) -#define usearch_previous U_ICU_ENTRY_POINT_RENAME(usearch_previous) -#define usearch_reset U_ICU_ENTRY_POINT_RENAME(usearch_reset) -#define usearch_search U_ICU_ENTRY_POINT_RENAME(usearch_search) -#define usearch_searchBackwards U_ICU_ENTRY_POINT_RENAME(usearch_searchBackwards) -#define usearch_setAttribute U_ICU_ENTRY_POINT_RENAME(usearch_setAttribute) -#define usearch_setBreakIterator U_ICU_ENTRY_POINT_RENAME(usearch_setBreakIterator) -#define usearch_setCollator U_ICU_ENTRY_POINT_RENAME(usearch_setCollator) -#define usearch_setOffset U_ICU_ENTRY_POINT_RENAME(usearch_setOffset) -#define usearch_setPattern U_ICU_ENTRY_POINT_RENAME(usearch_setPattern) -#define usearch_setText U_ICU_ENTRY_POINT_RENAME(usearch_setText) -#define uset_add U_ICU_ENTRY_POINT_RENAME(uset_add) -#define uset_addAll U_ICU_ENTRY_POINT_RENAME(uset_addAll) -#define uset_addAllCodePoints U_ICU_ENTRY_POINT_RENAME(uset_addAllCodePoints) -#define uset_addRange U_ICU_ENTRY_POINT_RENAME(uset_addRange) -#define uset_addString U_ICU_ENTRY_POINT_RENAME(uset_addString) -#define uset_applyIntPropertyValue U_ICU_ENTRY_POINT_RENAME(uset_applyIntPropertyValue) -#define uset_applyPattern U_ICU_ENTRY_POINT_RENAME(uset_applyPattern) -#define uset_applyPropertyAlias U_ICU_ENTRY_POINT_RENAME(uset_applyPropertyAlias) -#define uset_charAt U_ICU_ENTRY_POINT_RENAME(uset_charAt) -#define uset_clear U_ICU_ENTRY_POINT_RENAME(uset_clear) -#define uset_clone U_ICU_ENTRY_POINT_RENAME(uset_clone) -#define uset_cloneAsThawed U_ICU_ENTRY_POINT_RENAME(uset_cloneAsThawed) -#define uset_close U_ICU_ENTRY_POINT_RENAME(uset_close) -#define uset_closeOver U_ICU_ENTRY_POINT_RENAME(uset_closeOver) -#define uset_compact U_ICU_ENTRY_POINT_RENAME(uset_compact) -#define uset_complement U_ICU_ENTRY_POINT_RENAME(uset_complement) -#define uset_complementAll U_ICU_ENTRY_POINT_RENAME(uset_complementAll) -#define uset_contains U_ICU_ENTRY_POINT_RENAME(uset_contains) -#define uset_containsAll U_ICU_ENTRY_POINT_RENAME(uset_containsAll) -#define uset_containsAllCodePoints U_ICU_ENTRY_POINT_RENAME(uset_containsAllCodePoints) -#define uset_containsNone U_ICU_ENTRY_POINT_RENAME(uset_containsNone) -#define uset_containsRange U_ICU_ENTRY_POINT_RENAME(uset_containsRange) -#define uset_containsSome U_ICU_ENTRY_POINT_RENAME(uset_containsSome) -#define uset_containsString U_ICU_ENTRY_POINT_RENAME(uset_containsString) -#define uset_equals U_ICU_ENTRY_POINT_RENAME(uset_equals) -#define uset_freeze U_ICU_ENTRY_POINT_RENAME(uset_freeze) -#define uset_getItem U_ICU_ENTRY_POINT_RENAME(uset_getItem) -#define uset_getItemCount U_ICU_ENTRY_POINT_RENAME(uset_getItemCount) -#define uset_getSerializedRange U_ICU_ENTRY_POINT_RENAME(uset_getSerializedRange) -#define uset_getSerializedRangeCount U_ICU_ENTRY_POINT_RENAME(uset_getSerializedRangeCount) -#define uset_getSerializedSet U_ICU_ENTRY_POINT_RENAME(uset_getSerializedSet) -#define uset_indexOf U_ICU_ENTRY_POINT_RENAME(uset_indexOf) -#define uset_isEmpty U_ICU_ENTRY_POINT_RENAME(uset_isEmpty) -#define uset_isFrozen U_ICU_ENTRY_POINT_RENAME(uset_isFrozen) -#define uset_open U_ICU_ENTRY_POINT_RENAME(uset_open) -#define uset_openEmpty U_ICU_ENTRY_POINT_RENAME(uset_openEmpty) -#define uset_openPattern U_ICU_ENTRY_POINT_RENAME(uset_openPattern) -#define uset_openPatternOptions U_ICU_ENTRY_POINT_RENAME(uset_openPatternOptions) -#define uset_remove U_ICU_ENTRY_POINT_RENAME(uset_remove) -#define uset_removeAll U_ICU_ENTRY_POINT_RENAME(uset_removeAll) -#define uset_removeAllStrings U_ICU_ENTRY_POINT_RENAME(uset_removeAllStrings) -#define uset_removeRange U_ICU_ENTRY_POINT_RENAME(uset_removeRange) -#define uset_removeString U_ICU_ENTRY_POINT_RENAME(uset_removeString) -#define uset_resemblesPattern U_ICU_ENTRY_POINT_RENAME(uset_resemblesPattern) -#define uset_retain U_ICU_ENTRY_POINT_RENAME(uset_retain) -#define uset_retainAll U_ICU_ENTRY_POINT_RENAME(uset_retainAll) -#define uset_serialize U_ICU_ENTRY_POINT_RENAME(uset_serialize) -#define uset_serializedContains U_ICU_ENTRY_POINT_RENAME(uset_serializedContains) -#define uset_set U_ICU_ENTRY_POINT_RENAME(uset_set) -#define uset_setSerializedToOne U_ICU_ENTRY_POINT_RENAME(uset_setSerializedToOne) -#define uset_size U_ICU_ENTRY_POINT_RENAME(uset_size) -#define uset_span U_ICU_ENTRY_POINT_RENAME(uset_span) -#define uset_spanBack U_ICU_ENTRY_POINT_RENAME(uset_spanBack) -#define uset_spanBackUTF8 U_ICU_ENTRY_POINT_RENAME(uset_spanBackUTF8) -#define uset_spanUTF8 U_ICU_ENTRY_POINT_RENAME(uset_spanUTF8) -#define uset_toPattern U_ICU_ENTRY_POINT_RENAME(uset_toPattern) -#define uspoof_areConfusable U_ICU_ENTRY_POINT_RENAME(uspoof_areConfusable) -#define uspoof_areConfusableUTF8 U_ICU_ENTRY_POINT_RENAME(uspoof_areConfusableUTF8) -#define uspoof_areConfusableUnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_areConfusableUnicodeString) -#define uspoof_check U_ICU_ENTRY_POINT_RENAME(uspoof_check) -#define uspoof_check2 U_ICU_ENTRY_POINT_RENAME(uspoof_check2) -#define uspoof_check2UTF8 U_ICU_ENTRY_POINT_RENAME(uspoof_check2UTF8) -#define uspoof_check2UnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_check2UnicodeString) -#define uspoof_checkUTF8 U_ICU_ENTRY_POINT_RENAME(uspoof_checkUTF8) -#define uspoof_checkUnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_checkUnicodeString) -#define uspoof_clone U_ICU_ENTRY_POINT_RENAME(uspoof_clone) -#define uspoof_close U_ICU_ENTRY_POINT_RENAME(uspoof_close) -#define uspoof_closeCheckResult U_ICU_ENTRY_POINT_RENAME(uspoof_closeCheckResult) -#define uspoof_getAllowedChars U_ICU_ENTRY_POINT_RENAME(uspoof_getAllowedChars) -#define uspoof_getAllowedLocales U_ICU_ENTRY_POINT_RENAME(uspoof_getAllowedLocales) -#define uspoof_getAllowedUnicodeSet U_ICU_ENTRY_POINT_RENAME(uspoof_getAllowedUnicodeSet) -#define uspoof_getCheckResultChecks U_ICU_ENTRY_POINT_RENAME(uspoof_getCheckResultChecks) -#define uspoof_getCheckResultNumerics U_ICU_ENTRY_POINT_RENAME(uspoof_getCheckResultNumerics) -#define uspoof_getCheckResultRestrictionLevel U_ICU_ENTRY_POINT_RENAME(uspoof_getCheckResultRestrictionLevel) -#define uspoof_getChecks U_ICU_ENTRY_POINT_RENAME(uspoof_getChecks) -#define uspoof_getInclusionSet U_ICU_ENTRY_POINT_RENAME(uspoof_getInclusionSet) -#define uspoof_getInclusionUnicodeSet U_ICU_ENTRY_POINT_RENAME(uspoof_getInclusionUnicodeSet) -#define uspoof_getRecommendedSet U_ICU_ENTRY_POINT_RENAME(uspoof_getRecommendedSet) -#define uspoof_getRecommendedUnicodeSet U_ICU_ENTRY_POINT_RENAME(uspoof_getRecommendedUnicodeSet) -#define uspoof_getRestrictionLevel U_ICU_ENTRY_POINT_RENAME(uspoof_getRestrictionLevel) -#define uspoof_getSkeleton U_ICU_ENTRY_POINT_RENAME(uspoof_getSkeleton) -#define uspoof_getSkeletonUTF8 U_ICU_ENTRY_POINT_RENAME(uspoof_getSkeletonUTF8) -#define uspoof_getSkeletonUnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_getSkeletonUnicodeString) -#define uspoof_internalInitStatics U_ICU_ENTRY_POINT_RENAME(uspoof_internalInitStatics) -#define uspoof_open U_ICU_ENTRY_POINT_RENAME(uspoof_open) -#define uspoof_openCheckResult U_ICU_ENTRY_POINT_RENAME(uspoof_openCheckResult) -#define uspoof_openFromSerialized U_ICU_ENTRY_POINT_RENAME(uspoof_openFromSerialized) -#define uspoof_openFromSource U_ICU_ENTRY_POINT_RENAME(uspoof_openFromSource) -#define uspoof_serialize U_ICU_ENTRY_POINT_RENAME(uspoof_serialize) -#define uspoof_setAllowedChars U_ICU_ENTRY_POINT_RENAME(uspoof_setAllowedChars) -#define uspoof_setAllowedLocales U_ICU_ENTRY_POINT_RENAME(uspoof_setAllowedLocales) -#define uspoof_setAllowedUnicodeSet U_ICU_ENTRY_POINT_RENAME(uspoof_setAllowedUnicodeSet) -#define uspoof_setChecks U_ICU_ENTRY_POINT_RENAME(uspoof_setChecks) -#define uspoof_setRestrictionLevel U_ICU_ENTRY_POINT_RENAME(uspoof_setRestrictionLevel) -#define uspoof_swap U_ICU_ENTRY_POINT_RENAME(uspoof_swap) -#define usprep_close U_ICU_ENTRY_POINT_RENAME(usprep_close) -#define usprep_open U_ICU_ENTRY_POINT_RENAME(usprep_open) -#define usprep_openByType U_ICU_ENTRY_POINT_RENAME(usprep_openByType) -#define usprep_prepare U_ICU_ENTRY_POINT_RENAME(usprep_prepare) -#define usprep_swap U_ICU_ENTRY_POINT_RENAME(usprep_swap) -#define ustr_hashCharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashCharsN) -#define ustr_hashICharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashICharsN) -#define ustr_hashUCharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashUCharsN) -#define ustrcase_getCaseLocale U_ICU_ENTRY_POINT_RENAME(ustrcase_getCaseLocale) -#define ustrcase_getTitleBreakIterator U_ICU_ENTRY_POINT_RENAME(ustrcase_getTitleBreakIterator) -#define ustrcase_internalFold U_ICU_ENTRY_POINT_RENAME(ustrcase_internalFold) -#define ustrcase_internalToLower U_ICU_ENTRY_POINT_RENAME(ustrcase_internalToLower) -#define ustrcase_internalToTitle U_ICU_ENTRY_POINT_RENAME(ustrcase_internalToTitle) -#define ustrcase_internalToUpper U_ICU_ENTRY_POINT_RENAME(ustrcase_internalToUpper) -#define ustrcase_map U_ICU_ENTRY_POINT_RENAME(ustrcase_map) -#define ustrcase_mapWithOverlap U_ICU_ENTRY_POINT_RENAME(ustrcase_mapWithOverlap) -#define utext_char32At U_ICU_ENTRY_POINT_RENAME(utext_char32At) -#define utext_clone U_ICU_ENTRY_POINT_RENAME(utext_clone) -#define utext_close U_ICU_ENTRY_POINT_RENAME(utext_close) -#define utext_copy U_ICU_ENTRY_POINT_RENAME(utext_copy) -#define utext_current32 U_ICU_ENTRY_POINT_RENAME(utext_current32) -#define utext_equals U_ICU_ENTRY_POINT_RENAME(utext_equals) -#define utext_extract U_ICU_ENTRY_POINT_RENAME(utext_extract) -#define utext_freeze U_ICU_ENTRY_POINT_RENAME(utext_freeze) -#define utext_getNativeIndex U_ICU_ENTRY_POINT_RENAME(utext_getNativeIndex) -#define utext_getPreviousNativeIndex U_ICU_ENTRY_POINT_RENAME(utext_getPreviousNativeIndex) -#define utext_hasMetaData U_ICU_ENTRY_POINT_RENAME(utext_hasMetaData) -#define utext_isLengthExpensive U_ICU_ENTRY_POINT_RENAME(utext_isLengthExpensive) -#define utext_isWritable U_ICU_ENTRY_POINT_RENAME(utext_isWritable) -#define utext_moveIndex32 U_ICU_ENTRY_POINT_RENAME(utext_moveIndex32) -#define utext_nativeLength U_ICU_ENTRY_POINT_RENAME(utext_nativeLength) -#define utext_next32 U_ICU_ENTRY_POINT_RENAME(utext_next32) -#define utext_next32From U_ICU_ENTRY_POINT_RENAME(utext_next32From) -#define utext_openCharacterIterator U_ICU_ENTRY_POINT_RENAME(utext_openCharacterIterator) -#define utext_openConstUnicodeString U_ICU_ENTRY_POINT_RENAME(utext_openConstUnicodeString) -#define utext_openReplaceable U_ICU_ENTRY_POINT_RENAME(utext_openReplaceable) -#define utext_openUChars U_ICU_ENTRY_POINT_RENAME(utext_openUChars) -#define utext_openUTF8 U_ICU_ENTRY_POINT_RENAME(utext_openUTF8) -#define utext_openUnicodeString U_ICU_ENTRY_POINT_RENAME(utext_openUnicodeString) -#define utext_previous32 U_ICU_ENTRY_POINT_RENAME(utext_previous32) -#define utext_previous32From U_ICU_ENTRY_POINT_RENAME(utext_previous32From) -#define utext_replace U_ICU_ENTRY_POINT_RENAME(utext_replace) -#define utext_setNativeIndex U_ICU_ENTRY_POINT_RENAME(utext_setNativeIndex) -#define utext_setup U_ICU_ENTRY_POINT_RENAME(utext_setup) -#define utf8_appendCharSafeBody U_ICU_ENTRY_POINT_RENAME(utf8_appendCharSafeBody) -#define utf8_back1SafeBody U_ICU_ENTRY_POINT_RENAME(utf8_back1SafeBody) -#define utf8_countTrailBytes U_ICU_ENTRY_POINT_RENAME(utf8_countTrailBytes) -#define utf8_nextCharSafeBody U_ICU_ENTRY_POINT_RENAME(utf8_nextCharSafeBody) -#define utf8_prevCharSafeBody U_ICU_ENTRY_POINT_RENAME(utf8_prevCharSafeBody) -#define utmscale_fromInt64 U_ICU_ENTRY_POINT_RENAME(utmscale_fromInt64) -#define utmscale_getTimeScaleValue U_ICU_ENTRY_POINT_RENAME(utmscale_getTimeScaleValue) -#define utmscale_toInt64 U_ICU_ENTRY_POINT_RENAME(utmscale_toInt64) -#define utrace_cleanup U_ICU_ENTRY_POINT_RENAME(utrace_cleanup) -#define utrace_data U_ICU_ENTRY_POINT_RENAME(utrace_data) -#define utrace_entry U_ICU_ENTRY_POINT_RENAME(utrace_entry) -#define utrace_exit U_ICU_ENTRY_POINT_RENAME(utrace_exit) -#define utrace_format U_ICU_ENTRY_POINT_RENAME(utrace_format) -#define utrace_functionName U_ICU_ENTRY_POINT_RENAME(utrace_functionName) -#define utrace_getFunctions U_ICU_ENTRY_POINT_RENAME(utrace_getFunctions) -#define utrace_getLevel U_ICU_ENTRY_POINT_RENAME(utrace_getLevel) -#define utrace_setFunctions U_ICU_ENTRY_POINT_RENAME(utrace_setFunctions) -#define utrace_setLevel U_ICU_ENTRY_POINT_RENAME(utrace_setLevel) -#define utrace_vformat U_ICU_ENTRY_POINT_RENAME(utrace_vformat) -#define utrans_clone U_ICU_ENTRY_POINT_RENAME(utrans_clone) -#define utrans_close U_ICU_ENTRY_POINT_RENAME(utrans_close) -#define utrans_countAvailableIDs U_ICU_ENTRY_POINT_RENAME(utrans_countAvailableIDs) -#define utrans_getAvailableID U_ICU_ENTRY_POINT_RENAME(utrans_getAvailableID) -#define utrans_getID U_ICU_ENTRY_POINT_RENAME(utrans_getID) -#define utrans_getSourceSet U_ICU_ENTRY_POINT_RENAME(utrans_getSourceSet) -#define utrans_getUnicodeID U_ICU_ENTRY_POINT_RENAME(utrans_getUnicodeID) -#define utrans_open U_ICU_ENTRY_POINT_RENAME(utrans_open) -#define utrans_openIDs U_ICU_ENTRY_POINT_RENAME(utrans_openIDs) -#define utrans_openInverse U_ICU_ENTRY_POINT_RENAME(utrans_openInverse) -#define utrans_openU U_ICU_ENTRY_POINT_RENAME(utrans_openU) -#define utrans_register U_ICU_ENTRY_POINT_RENAME(utrans_register) -#define utrans_rep_caseContextIterator U_ICU_ENTRY_POINT_RENAME(utrans_rep_caseContextIterator) -#define utrans_setFilter U_ICU_ENTRY_POINT_RENAME(utrans_setFilter) -#define utrans_stripRules U_ICU_ENTRY_POINT_RENAME(utrans_stripRules) -#define utrans_toRules U_ICU_ENTRY_POINT_RENAME(utrans_toRules) -#define utrans_trans U_ICU_ENTRY_POINT_RENAME(utrans_trans) -#define utrans_transIncremental U_ICU_ENTRY_POINT_RENAME(utrans_transIncremental) -#define utrans_transIncrementalUChars U_ICU_ENTRY_POINT_RENAME(utrans_transIncrementalUChars) -#define utrans_transUChars U_ICU_ENTRY_POINT_RENAME(utrans_transUChars) -#define utrans_transliterator_cleanup U_ICU_ENTRY_POINT_RENAME(utrans_transliterator_cleanup) -#define utrans_unregister U_ICU_ENTRY_POINT_RENAME(utrans_unregister) -#define utrans_unregisterID U_ICU_ENTRY_POINT_RENAME(utrans_unregisterID) -#define utrie2_clone U_ICU_ENTRY_POINT_RENAME(utrie2_clone) -#define utrie2_cloneAsThawed U_ICU_ENTRY_POINT_RENAME(utrie2_cloneAsThawed) -#define utrie2_close U_ICU_ENTRY_POINT_RENAME(utrie2_close) -#define utrie2_enum U_ICU_ENTRY_POINT_RENAME(utrie2_enum) -#define utrie2_enumForLeadSurrogate U_ICU_ENTRY_POINT_RENAME(utrie2_enumForLeadSurrogate) -#define utrie2_freeze U_ICU_ENTRY_POINT_RENAME(utrie2_freeze) -#define utrie2_fromUTrie U_ICU_ENTRY_POINT_RENAME(utrie2_fromUTrie) -#define utrie2_get32 U_ICU_ENTRY_POINT_RENAME(utrie2_get32) -#define utrie2_get32FromLeadSurrogateCodeUnit U_ICU_ENTRY_POINT_RENAME(utrie2_get32FromLeadSurrogateCodeUnit) -#define utrie2_internalU8NextIndex U_ICU_ENTRY_POINT_RENAME(utrie2_internalU8NextIndex) -#define utrie2_internalU8PrevIndex U_ICU_ENTRY_POINT_RENAME(utrie2_internalU8PrevIndex) -#define utrie2_isFrozen U_ICU_ENTRY_POINT_RENAME(utrie2_isFrozen) -#define utrie2_open U_ICU_ENTRY_POINT_RENAME(utrie2_open) -#define utrie2_openDummy U_ICU_ENTRY_POINT_RENAME(utrie2_openDummy) -#define utrie2_openFromSerialized U_ICU_ENTRY_POINT_RENAME(utrie2_openFromSerialized) -#define utrie2_serialize U_ICU_ENTRY_POINT_RENAME(utrie2_serialize) -#define utrie2_set32 U_ICU_ENTRY_POINT_RENAME(utrie2_set32) -#define utrie2_set32ForLeadSurrogateCodeUnit U_ICU_ENTRY_POINT_RENAME(utrie2_set32ForLeadSurrogateCodeUnit) -#define utrie2_setRange32 U_ICU_ENTRY_POINT_RENAME(utrie2_setRange32) -#define utrie2_swap U_ICU_ENTRY_POINT_RENAME(utrie2_swap) -#define utrie_clone U_ICU_ENTRY_POINT_RENAME(utrie_clone) -#define utrie_close U_ICU_ENTRY_POINT_RENAME(utrie_close) -#define utrie_defaultGetFoldingOffset U_ICU_ENTRY_POINT_RENAME(utrie_defaultGetFoldingOffset) -#define utrie_enum U_ICU_ENTRY_POINT_RENAME(utrie_enum) -#define utrie_get32 U_ICU_ENTRY_POINT_RENAME(utrie_get32) -#define utrie_getData U_ICU_ENTRY_POINT_RENAME(utrie_getData) -#define utrie_open U_ICU_ENTRY_POINT_RENAME(utrie_open) -#define utrie_serialize U_ICU_ENTRY_POINT_RENAME(utrie_serialize) -#define utrie_set32 U_ICU_ENTRY_POINT_RENAME(utrie_set32) -#define utrie_setRange32 U_ICU_ENTRY_POINT_RENAME(utrie_setRange32) -#define utrie_swap U_ICU_ENTRY_POINT_RENAME(utrie_swap) -#define utrie_swapAnyVersion U_ICU_ENTRY_POINT_RENAME(utrie_swapAnyVersion) -#define utrie_unserialize U_ICU_ENTRY_POINT_RENAME(utrie_unserialize) -#define utrie_unserializeDummy U_ICU_ENTRY_POINT_RENAME(utrie_unserializeDummy) -#define vzone_clone U_ICU_ENTRY_POINT_RENAME(vzone_clone) -#define vzone_close U_ICU_ENTRY_POINT_RENAME(vzone_close) -#define vzone_countTransitionRules U_ICU_ENTRY_POINT_RENAME(vzone_countTransitionRules) -#define vzone_equals U_ICU_ENTRY_POINT_RENAME(vzone_equals) -#define vzone_getDynamicClassID U_ICU_ENTRY_POINT_RENAME(vzone_getDynamicClassID) -#define vzone_getLastModified U_ICU_ENTRY_POINT_RENAME(vzone_getLastModified) -#define vzone_getNextTransition U_ICU_ENTRY_POINT_RENAME(vzone_getNextTransition) -#define vzone_getOffset U_ICU_ENTRY_POINT_RENAME(vzone_getOffset) -#define vzone_getOffset2 U_ICU_ENTRY_POINT_RENAME(vzone_getOffset2) -#define vzone_getOffset3 U_ICU_ENTRY_POINT_RENAME(vzone_getOffset3) -#define vzone_getPreviousTransition U_ICU_ENTRY_POINT_RENAME(vzone_getPreviousTransition) -#define vzone_getRawOffset U_ICU_ENTRY_POINT_RENAME(vzone_getRawOffset) -#define vzone_getStaticClassID U_ICU_ENTRY_POINT_RENAME(vzone_getStaticClassID) -#define vzone_getTZURL U_ICU_ENTRY_POINT_RENAME(vzone_getTZURL) -#define vzone_hasSameRules U_ICU_ENTRY_POINT_RENAME(vzone_hasSameRules) -#define vzone_inDaylightTime U_ICU_ENTRY_POINT_RENAME(vzone_inDaylightTime) -#define vzone_openData U_ICU_ENTRY_POINT_RENAME(vzone_openData) -#define vzone_openID U_ICU_ENTRY_POINT_RENAME(vzone_openID) -#define vzone_setLastModified U_ICU_ENTRY_POINT_RENAME(vzone_setLastModified) -#define vzone_setRawOffset U_ICU_ENTRY_POINT_RENAME(vzone_setRawOffset) -#define vzone_setTZURL U_ICU_ENTRY_POINT_RENAME(vzone_setTZURL) -#define vzone_useDaylightTime U_ICU_ENTRY_POINT_RENAME(vzone_useDaylightTime) -#define vzone_write U_ICU_ENTRY_POINT_RENAME(vzone_write) -#define vzone_writeFromStart U_ICU_ENTRY_POINT_RENAME(vzone_writeFromStart) -#define vzone_writeSimple U_ICU_ENTRY_POINT_RENAME(vzone_writeSimple) -#define zrule_close U_ICU_ENTRY_POINT_RENAME(zrule_close) -#define zrule_equals U_ICU_ENTRY_POINT_RENAME(zrule_equals) -#define zrule_getDSTSavings U_ICU_ENTRY_POINT_RENAME(zrule_getDSTSavings) -#define zrule_getName U_ICU_ENTRY_POINT_RENAME(zrule_getName) -#define zrule_getRawOffset U_ICU_ENTRY_POINT_RENAME(zrule_getRawOffset) -#define zrule_isEquivalentTo U_ICU_ENTRY_POINT_RENAME(zrule_isEquivalentTo) -#define ztrans_adoptFrom U_ICU_ENTRY_POINT_RENAME(ztrans_adoptFrom) -#define ztrans_adoptTo U_ICU_ENTRY_POINT_RENAME(ztrans_adoptTo) -#define ztrans_clone U_ICU_ENTRY_POINT_RENAME(ztrans_clone) -#define ztrans_close U_ICU_ENTRY_POINT_RENAME(ztrans_close) -#define ztrans_equals U_ICU_ENTRY_POINT_RENAME(ztrans_equals) -#define ztrans_getDynamicClassID U_ICU_ENTRY_POINT_RENAME(ztrans_getDynamicClassID) -#define ztrans_getFrom U_ICU_ENTRY_POINT_RENAME(ztrans_getFrom) -#define ztrans_getStaticClassID U_ICU_ENTRY_POINT_RENAME(ztrans_getStaticClassID) -#define ztrans_getTime U_ICU_ENTRY_POINT_RENAME(ztrans_getTime) -#define ztrans_getTo U_ICU_ENTRY_POINT_RENAME(ztrans_getTo) -#define ztrans_open U_ICU_ENTRY_POINT_RENAME(ztrans_open) -#define ztrans_openEmpty U_ICU_ENTRY_POINT_RENAME(ztrans_openEmpty) -#define ztrans_setFrom U_ICU_ENTRY_POINT_RENAME(ztrans_setFrom) -#define ztrans_setTime U_ICU_ENTRY_POINT_RENAME(ztrans_setTime) -#define ztrans_setTo U_ICU_ENTRY_POINT_RENAME(ztrans_setTo) - -#endif /* !(defined(_MSC_VER) && defined(__INTELLISENSE__)) */ -#endif /* U_DISABLE_RENAMING */ -#endif /* URENAME_H */ - diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/urep.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/urep.h deleted file mode 100644 index 932202ddb0..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/urep.h +++ /dev/null @@ -1,157 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* Copyright (C) 1997-2010, International Business Machines -* Corporation and others. All Rights Reserved. -****************************************************************************** -* Date Name Description -* 06/23/00 aliu Creation. -****************************************************************************** -*/ - -#ifndef __UREP_H -#define __UREP_H - -#include "unicode/utypes.h" - -U_CDECL_BEGIN - -/******************************************************************** - * General Notes - ******************************************************************** - * TODO - * Add usage scenario - * Add test code - * Talk about pinning - * Talk about "can truncate result if out of memory" - */ - -/******************************************************************** - * Data Structures - ********************************************************************/ -/** - * \file - * \brief C API: Callbacks for UReplaceable - */ -/** - * An opaque replaceable text object. This will be manipulated only - * through the caller-supplied UReplaceableFunctor struct. Related - * to the C++ class Replaceable. - * This is currently only used in the Transliterator C API, see utrans.h . - * @stable ICU 2.0 - */ -typedef void* UReplaceable; - -/** - * A set of function pointers that transliterators use to manipulate a - * UReplaceable. The caller should supply the required functions to - * manipulate their text appropriately. Related to the C++ class - * Replaceable. - * @stable ICU 2.0 - */ -typedef struct UReplaceableCallbacks { - - /** - * Function pointer that returns the number of UChar code units in - * this text. - * - * @param rep A pointer to "this" UReplaceable object. - * @return The length of the text. - * @stable ICU 2.0 - */ - int32_t (*length)(const UReplaceable* rep); - - /** - * Function pointer that returns a UChar code units at the given - * offset into this text; 0 <= offset < n, where n is the value - * returned by (*length)(rep). See unistr.h for a description of - * charAt() vs. char32At(). - * - * @param rep A pointer to "this" UReplaceable object. - * @param offset The index at which to fetch the UChar (code unit). - * @return The UChar (code unit) at offset, or U+FFFF if the offset is out of bounds. - * @stable ICU 2.0 - */ - UChar (*charAt)(const UReplaceable* rep, - int32_t offset); - - /** - * Function pointer that returns a UChar32 code point at the given - * offset into this text. See unistr.h for a description of - * charAt() vs. char32At(). - * - * @param rep A pointer to "this" UReplaceable object. - * @param offset The index at which to fetch the UChar32 (code point). - * @return The UChar32 (code point) at offset, or U+FFFF if the offset is out of bounds. - * @stable ICU 2.0 - */ - UChar32 (*char32At)(const UReplaceable* rep, - int32_t offset); - - /** - * Function pointer that replaces text between start and limit in - * this text with the given text. Attributes (out of band info) - * should be retained. - * - * @param rep A pointer to "this" UReplaceable object. - * @param start the starting index of the text to be replaced, - * inclusive. - * @param limit the ending index of the text to be replaced, - * exclusive. - * @param text the new text to replace the UChars from - * start..limit-1. - * @param textLength the number of UChars at text, or -1 if text - * is null-terminated. - * @stable ICU 2.0 - */ - void (*replace)(UReplaceable* rep, - int32_t start, - int32_t limit, - const UChar* text, - int32_t textLength); - - /** - * Function pointer that copies the characters in the range - * [start, limit) into the array dst. - * - * @param rep A pointer to "this" UReplaceable object. - * @param start offset of first character which will be copied - * into the array - * @param limit offset immediately following the last character to - * be copied - * @param dst array in which to copy characters. The length of - * dst must be at least (limit - start). - * @stable ICU 2.1 - */ - void (*extract)(UReplaceable* rep, - int32_t start, - int32_t limit, - UChar* dst); - - /** - * Function pointer that copies text between start and limit in - * this text to another index in the text. Attributes (out of - * band info) should be retained. After this call, there will be - * (at least) two copies of the characters originally located at - * start..limit-1. - * - * @param rep A pointer to "this" UReplaceable object. - * @param start the starting index of the text to be copied, - * inclusive. - * @param limit the ending index of the text to be copied, - * exclusive. - * @param dest the index at which the copy of the UChars should be - * inserted. - * @stable ICU 2.0 - */ - void (*copy)(UReplaceable* rep, - int32_t start, - int32_t limit, - int32_t dest); - -} UReplaceableCallbacks; - -U_CDECL_END - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ures.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ures.h deleted file mode 100644 index a5fe7deed8..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ures.h +++ /dev/null @@ -1,908 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1997-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* -* File URES.H (formerly CRESBUND.H) -* -* Modification History: -* -* Date Name Description -* 04/01/97 aliu Creation. -* 02/22/99 damiba overhaul. -* 04/04/99 helena Fixed internal header inclusion. -* 04/15/99 Madhu Updated Javadoc -* 06/14/99 stephen Removed functions taking a filename suffix. -* 07/20/99 stephen Language-independent typedef to void* -* 11/09/99 weiv Added ures_getLocale() -* 06/24/02 weiv Added support for resource sharing -****************************************************************************** -*/ - -#ifndef URES_H -#define URES_H - -#include "unicode/utypes.h" -#include "unicode/uloc.h" -#include "unicode/localpointer.h" - -/** - * \file - * \brief C API: Resource Bundle - * - *

C API: Resource Bundle

- * - * C API representing a collection of resource information pertaining to a given - * locale. A resource bundle provides a way of accessing locale- specific information in - * a data file. You create a resource bundle that manages the resources for a given - * locale and then ask it for individual resources. - *

- * Resource bundles in ICU4C are currently defined using text files which conform to the following - * BNF definition. - * More on resource bundle concepts and syntax can be found in the - * Users Guide. - *

- */ - -/** - * UResourceBundle is an opaque type for handles for resource bundles in C APIs. - * @stable ICU 2.0 - */ -struct UResourceBundle; - -/** - * @stable ICU 2.0 - */ -typedef struct UResourceBundle UResourceBundle; - -/** - * Numeric constants for types of resource items. - * @see ures_getType - * @stable ICU 2.0 - */ -typedef enum { - /** Resource type constant for "no resource". @stable ICU 2.6 */ - URES_NONE=-1, - - /** Resource type constant for 16-bit Unicode strings. @stable ICU 2.6 */ - URES_STRING=0, - - /** Resource type constant for binary data. @stable ICU 2.6 */ - URES_BINARY=1, - - /** Resource type constant for tables of key-value pairs. @stable ICU 2.6 */ - URES_TABLE=2, - - /** - * Resource type constant for aliases; - * internally stores a string which identifies the actual resource - * storing the data (can be in a different resource bundle). - * Resolved internally before delivering the actual resource through the API. - * @stable ICU 2.6 - */ - URES_ALIAS=3, - - /** - * Resource type constant for a single 28-bit integer, interpreted as - * signed or unsigned by the ures_getInt() or ures_getUInt() function. - * @see ures_getInt - * @see ures_getUInt - * @stable ICU 2.6 - */ - URES_INT=7, - - /** Resource type constant for arrays of resources. @stable ICU 2.6 */ - URES_ARRAY=8, - - /** - * Resource type constant for vectors of 32-bit integers. - * @see ures_getIntVector - * @stable ICU 2.6 - */ - URES_INT_VECTOR = 14, -#ifndef U_HIDE_DEPRECATED_API - /** @deprecated ICU 2.6 Use the URES_ constant instead. */ - RES_NONE=URES_NONE, - /** @deprecated ICU 2.6 Use the URES_ constant instead. */ - RES_STRING=URES_STRING, - /** @deprecated ICU 2.6 Use the URES_ constant instead. */ - RES_BINARY=URES_BINARY, - /** @deprecated ICU 2.6 Use the URES_ constant instead. */ - RES_TABLE=URES_TABLE, - /** @deprecated ICU 2.6 Use the URES_ constant instead. */ - RES_ALIAS=URES_ALIAS, - /** @deprecated ICU 2.6 Use the URES_ constant instead. */ - RES_INT=URES_INT, - /** @deprecated ICU 2.6 Use the URES_ constant instead. */ - RES_ARRAY=URES_ARRAY, - /** @deprecated ICU 2.6 Use the URES_ constant instead. */ - RES_INT_VECTOR=URES_INT_VECTOR, - /** @deprecated ICU 2.6 Not used. */ - RES_RESERVED=15, - - /** - * One more than the highest normal UResType value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - URES_LIMIT = 16 -#endif // U_HIDE_DEPRECATED_API -} UResType; - -/* - * Functions to create and destroy resource bundles. - */ - -/** - * Opens a UResourceBundle, from which users can extract strings by using - * their corresponding keys. - * Note that the caller is responsible of calling ures_close on each successfully - * opened resource bundle. - * @param packageName The packageName and locale together point to an ICU udata object, - * as defined by udata_open( packageName, "res", locale, err) - * or equivalent. Typically, packageName will refer to a (.dat) file, or to - * a package registered with udata_setAppData(). Using a full file or directory - * pathname for packageName is deprecated. If NULL, ICU data will be used. - * @param locale specifies the locale for which we want to open the resource - * if NULL, the default locale will be used. If strlen(locale) == 0 - * root locale will be used. - * - * @param status fills in the outgoing error code. - * The UErrorCode err parameter is used to return status information to the user. To - * check whether the construction succeeded or not, you should check the value of - * U_SUCCESS(err). If you wish more detailed information, you can check for - * informational status results which still indicate success. U_USING_FALLBACK_WARNING - * indicates that a fall back locale was used. For example, 'de_CH' was requested, - * but nothing was found there, so 'de' was used. U_USING_DEFAULT_WARNING indicates that - * the default locale data or root locale data was used; neither the requested locale - * nor any of its fall back locales could be found. Please see the users guide for more - * information on this topic. - * @return a newly allocated resource bundle. - * @see ures_close - * @stable ICU 2.0 - */ -U_STABLE UResourceBundle* U_EXPORT2 -ures_open(const char* packageName, - const char* locale, - UErrorCode* status); - - -/** This function does not care what kind of localeID is passed in. It simply opens a bundle with - * that name. Fallback mechanism is disabled for the new bundle. If the requested bundle contains - * an %%ALIAS directive, the results are undefined. - * @param packageName The packageName and locale together point to an ICU udata object, - * as defined by udata_open( packageName, "res", locale, err) - * or equivalent. Typically, packageName will refer to a (.dat) file, or to - * a package registered with udata_setAppData(). Using a full file or directory - * pathname for packageName is deprecated. If NULL, ICU data will be used. - * @param locale specifies the locale for which we want to open the resource - * if NULL, the default locale will be used. If strlen(locale) == 0 - * root locale will be used. - * - * @param status fills in the outgoing error code. Either U_ZERO_ERROR or U_MISSING_RESOURCE_ERROR - * @return a newly allocated resource bundle or NULL if it doesn't exist. - * @see ures_close - * @stable ICU 2.0 - */ -U_STABLE UResourceBundle* U_EXPORT2 -ures_openDirect(const char* packageName, - const char* locale, - UErrorCode* status); - -/** - * Same as ures_open() but takes a const UChar *path. - * This path will be converted to char * using the default converter, - * then ures_open() is called. - * - * @param packageName The packageName and locale together point to an ICU udata object, - * as defined by udata_open( packageName, "res", locale, err) - * or equivalent. Typically, packageName will refer to a (.dat) file, or to - * a package registered with udata_setAppData(). Using a full file or directory - * pathname for packageName is deprecated. If NULL, ICU data will be used. - * @param locale specifies the locale for which we want to open the resource - * if NULL, the default locale will be used. If strlen(locale) == 0 - * root locale will be used. - * @param status fills in the outgoing error code. - * @return a newly allocated resource bundle. - * @see ures_open - * @stable ICU 2.0 - */ -U_STABLE UResourceBundle* U_EXPORT2 -ures_openU(const UChar* packageName, - const char* locale, - UErrorCode* status); - -#ifndef U_HIDE_DEPRECATED_API -/** - * Returns the number of strings/arrays in resource bundles. - * Better to use ures_getSize, as this function will be deprecated. - * - *@param resourceBundle resource bundle containing the desired strings - *@param resourceKey key tagging the resource - *@param err fills in the outgoing error code - * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a non-failing error - * e.g.: U_USING_FALLBACK_WARNING,U_USING_FALLBACK_WARNING - *@return: for Arrays: returns the number of resources in the array - * Tables: returns the number of resources in the table - * single string: returns 1 - *@see ures_getSize - * @deprecated ICU 2.8 User ures_getSize instead - */ -U_DEPRECATED int32_t U_EXPORT2 -ures_countArrayItems(const UResourceBundle* resourceBundle, - const char* resourceKey, - UErrorCode* err); -#endif /* U_HIDE_DEPRECATED_API */ - -/** - * Close a resource bundle, all pointers returned from the various ures_getXXX calls - * on this particular bundle should be considered invalid henceforth. - * - * @param resourceBundle a pointer to a resourceBundle struct. Can be NULL. - * @see ures_open - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ures_close(UResourceBundle* resourceBundle); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUResourceBundlePointer - * "Smart pointer" class, closes a UResourceBundle via ures_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUResourceBundlePointer, UResourceBundle, ures_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -#ifndef U_HIDE_DEPRECATED_API -/** - * Return the version number associated with this ResourceBundle as a string. Please - * use ures_getVersion as this function is going to be deprecated. - * - * @param resourceBundle The resource bundle for which the version is checked. - * @return A version number string as specified in the resource bundle or its parent. - * The caller does not own this string. - * @see ures_getVersion - * @deprecated ICU 2.8 Use ures_getVersion instead. - */ -U_DEPRECATED const char* U_EXPORT2 -ures_getVersionNumber(const UResourceBundle* resourceBundle); -#endif /* U_HIDE_DEPRECATED_API */ - -/** - * Return the version number associated with this ResourceBundle as an - * UVersionInfo array. - * - * @param resB The resource bundle for which the version is checked. - * @param versionInfo A UVersionInfo array that is filled with the version number - * as specified in the resource bundle or its parent. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ures_getVersion(const UResourceBundle* resB, - UVersionInfo versionInfo); - -#ifndef U_HIDE_DEPRECATED_API -/** - * Return the name of the Locale associated with this ResourceBundle. This API allows - * you to query for the real locale of the resource. For example, if you requested - * "en_US_CALIFORNIA" and only "en_US" bundle exists, "en_US" will be returned. - * For subresources, the locale where this resource comes from will be returned. - * If fallback has occurred, getLocale will reflect this. - * - * @param resourceBundle resource bundle in question - * @param status just for catching illegal arguments - * @return A Locale name - * @deprecated ICU 2.8 Use ures_getLocaleByType instead. - */ -U_DEPRECATED const char* U_EXPORT2 -ures_getLocale(const UResourceBundle* resourceBundle, - UErrorCode* status); -#endif /* U_HIDE_DEPRECATED_API */ - -/** - * Return the name of the Locale associated with this ResourceBundle. - * You can choose between requested, valid and real locale. - * - * @param resourceBundle resource bundle in question - * @param type You can choose between requested, valid and actual - * locale. For description see the definition of - * ULocDataLocaleType in uloc.h - * @param status just for catching illegal arguments - * @return A Locale name - * @stable ICU 2.8 - */ -U_STABLE const char* U_EXPORT2 -ures_getLocaleByType(const UResourceBundle* resourceBundle, - ULocDataLocaleType type, - UErrorCode* status); - - -#ifndef U_HIDE_INTERNAL_API -/** - * Same as ures_open() but uses the fill-in parameter instead of allocating a new bundle. - * - * TODO need to revisit usefulness of this function - * and usage model for fillIn parameters without knowing sizeof(UResourceBundle) - * @param r The existing UResourceBundle to fill in. If NULL then status will be - * set to U_ILLEGAL_ARGUMENT_ERROR. - * @param packageName The packageName and locale together point to an ICU udata object, - * as defined by udata_open( packageName, "res", locale, err) - * or equivalent. Typically, packageName will refer to a (.dat) file, or to - * a package registered with udata_setAppData(). Using a full file or directory - * pathname for packageName is deprecated. If NULL, ICU data will be used. - * @param localeID specifies the locale for which we want to open the resource - * @param status The error code. - * @internal - */ -U_INTERNAL void U_EXPORT2 -ures_openFillIn(UResourceBundle *r, - const char* packageName, - const char* localeID, - UErrorCode* status); -#endif /* U_HIDE_INTERNAL_API */ - -/** - * Returns a string from a string resource type - * - * @param resourceBundle a string resource - * @param len fills in the length of resulting string - * @param status fills in the outgoing error code - * could be U_MISSING_RESOURCE_ERROR if the key is not found - * Always check the value of status. Don't count on returning NULL. - * could be a non-failing error - * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. - * @see ures_getBinary - * @see ures_getIntVector - * @see ures_getInt - * @see ures_getUInt - * @stable ICU 2.0 - */ -U_STABLE const UChar* U_EXPORT2 -ures_getString(const UResourceBundle* resourceBundle, - int32_t* len, - UErrorCode* status); - -/** - * Returns a UTF-8 string from a string resource. - * The UTF-8 string may be returnable directly as a pointer, or - * it may need to be copied, or transformed from UTF-16 using u_strToUTF8() - * or equivalent. - * - * If forceCopy==TRUE, then the string is always written to the dest buffer - * and dest is returned. - * - * If forceCopy==FALSE, then the string is returned as a pointer if possible, - * without needing a dest buffer (it can be NULL). If the string needs to be - * copied or transformed, then it may be placed into dest at an arbitrary offset. - * - * If the string is to be written to dest, then U_BUFFER_OVERFLOW_ERROR and - * U_STRING_NOT_TERMINATED_WARNING are set if appropriate, as usual. - * - * If the string is transformed from UTF-16, then a conversion error may occur - * if an unpaired surrogate is encountered. If the function is successful, then - * the output UTF-8 string is always well-formed. - * - * @param resB Resource bundle. - * @param dest Destination buffer. Can be NULL only if capacity=*length==0. - * @param length Input: Capacity of destination buffer. - * Output: Actual length of the UTF-8 string, not counting the - * terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR. - * Can be NULL, meaning capacity=0 and the string length is not - * returned to the caller. - * @param forceCopy If TRUE, then the output string will always be written to - * dest, with U_BUFFER_OVERFLOW_ERROR and - * U_STRING_NOT_TERMINATED_WARNING set if appropriate. - * If FALSE, then the dest buffer may or may not contain a - * copy of the string. dest may or may not be modified. - * If a copy needs to be written, then the UErrorCode parameter - * indicates overflow etc. as usual. - * @param status Pointer to a standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return The pointer to the UTF-8 string. It may be dest, or at some offset - * from dest (only if !forceCopy), or in unrelated memory. - * Always NUL-terminated unless the string was written to dest and - * length==capacity (in which case U_STRING_NOT_TERMINATED_WARNING is set). - * - * @see ures_getString - * @see u_strToUTF8 - * @stable ICU 3.6 - */ -U_STABLE const char * U_EXPORT2 -ures_getUTF8String(const UResourceBundle *resB, - char *dest, int32_t *length, - UBool forceCopy, - UErrorCode *status); - -/** - * Returns a binary data from a binary resource. - * - * @param resourceBundle a string resource - * @param len fills in the length of resulting byte chunk - * @param status fills in the outgoing error code - * could be U_MISSING_RESOURCE_ERROR if the key is not found - * Always check the value of status. Don't count on returning NULL. - * could be a non-failing error - * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return a pointer to a chunk of unsigned bytes which live in a memory mapped/DLL file. - * @see ures_getString - * @see ures_getIntVector - * @see ures_getInt - * @see ures_getUInt - * @stable ICU 2.0 - */ -U_STABLE const uint8_t* U_EXPORT2 -ures_getBinary(const UResourceBundle* resourceBundle, - int32_t* len, - UErrorCode* status); - -/** - * Returns a 32 bit integer array from a resource. - * - * @param resourceBundle an int vector resource - * @param len fills in the length of resulting byte chunk - * @param status fills in the outgoing error code - * could be U_MISSING_RESOURCE_ERROR if the key is not found - * Always check the value of status. Don't count on returning NULL. - * could be a non-failing error - * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return a pointer to a chunk of integers which live in a memory mapped/DLL file. - * @see ures_getBinary - * @see ures_getString - * @see ures_getInt - * @see ures_getUInt - * @stable ICU 2.0 - */ -U_STABLE const int32_t* U_EXPORT2 -ures_getIntVector(const UResourceBundle* resourceBundle, - int32_t* len, - UErrorCode* status); - -/** - * Returns an unsigned integer from a resource. - * This integer is originally 28 bits. - * - * @param resourceBundle a string resource - * @param status fills in the outgoing error code - * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a non-failing error - * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return an integer value - * @see ures_getInt - * @see ures_getIntVector - * @see ures_getBinary - * @see ures_getString - * @stable ICU 2.0 - */ -U_STABLE uint32_t U_EXPORT2 -ures_getUInt(const UResourceBundle* resourceBundle, - UErrorCode *status); - -/** - * Returns a signed integer from a resource. - * This integer is originally 28 bit and the sign gets propagated. - * - * @param resourceBundle a string resource - * @param status fills in the outgoing error code - * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a non-failing error - * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return an integer value - * @see ures_getUInt - * @see ures_getIntVector - * @see ures_getBinary - * @see ures_getString - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ures_getInt(const UResourceBundle* resourceBundle, - UErrorCode *status); - -/** - * Returns the size of a resource. Size for scalar types is always 1, - * and for vector/table types is the number of child resources. - * @warning Integer array is treated as a scalar type. There are no - * APIs to access individual members of an integer array. It - * is always returned as a whole. - * @param resourceBundle a resource - * @return number of resources in a given resource. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -ures_getSize(const UResourceBundle *resourceBundle); - -/** - * Returns the type of a resource. Available types are defined in enum UResType - * - * @param resourceBundle a resource - * @return type of the given resource. - * @see UResType - * @stable ICU 2.0 - */ -U_STABLE UResType U_EXPORT2 -ures_getType(const UResourceBundle *resourceBundle); - -/** - * Returns the key associated with a given resource. Not all the resources have a key - only - * those that are members of a table. - * - * @param resourceBundle a resource - * @return a key associated to this resource, or NULL if it doesn't have a key - * @stable ICU 2.0 - */ -U_STABLE const char * U_EXPORT2 -ures_getKey(const UResourceBundle *resourceBundle); - -/* ITERATION API - This API provides means for iterating through a resource -*/ - -/** - * Resets the internal context of a resource so that iteration starts from the first element. - * - * @param resourceBundle a resource - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -ures_resetIterator(UResourceBundle *resourceBundle); - -/** - * Checks whether the given resource has another element to iterate over. - * - * @param resourceBundle a resource - * @return TRUE if there are more elements, FALSE if there is no more elements - * @stable ICU 2.0 - */ -U_STABLE UBool U_EXPORT2 -ures_hasNext(const UResourceBundle *resourceBundle); - -/** - * Returns the next resource in a given resource or NULL if there are no more resources - * to iterate over. Features a fill-in parameter. - * - * @param resourceBundle a resource - * @param fillIn if NULL a new UResourceBundle struct is allocated and must be closed by the caller. - * Alternatively, you can supply a struct to be filled by this function. - * @param status fills in the outgoing error code. You may still get a non NULL result even if an - * error occurred. Check status instead. - * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it - * @stable ICU 2.0 - */ -U_STABLE UResourceBundle* U_EXPORT2 -ures_getNextResource(UResourceBundle *resourceBundle, - UResourceBundle *fillIn, - UErrorCode *status); - -/** - * Returns the next string in a given resource or NULL if there are no more resources - * to iterate over. - * - * @param resourceBundle a resource - * @param len fill in length of the string - * @param key fill in for key associated with this string. NULL if no key - * @param status fills in the outgoing error code. If an error occurred, we may return NULL, but don't - * count on it. Check status instead! - * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. - * @stable ICU 2.0 - */ -U_STABLE const UChar* U_EXPORT2 -ures_getNextString(UResourceBundle *resourceBundle, - int32_t* len, - const char ** key, - UErrorCode *status); - -/** - * Returns the resource in a given resource at the specified index. Features a fill-in parameter. - * - * @param resourceBundle the resource bundle from which to get a sub-resource - * @param indexR an index to the wanted resource. - * @param fillIn if NULL a new UResourceBundle struct is allocated and must be closed by the caller. - * Alternatively, you can supply a struct to be filled by this function. - * @param status fills in the outgoing error code. Don't count on NULL being returned if an error has - * occurred. Check status instead. - * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it - * @stable ICU 2.0 - */ -U_STABLE UResourceBundle* U_EXPORT2 -ures_getByIndex(const UResourceBundle *resourceBundle, - int32_t indexR, - UResourceBundle *fillIn, - UErrorCode *status); - -/** - * Returns the string in a given resource at the specified index. - * - * @param resourceBundle a resource - * @param indexS an index to the wanted string. - * @param len fill in length of the string - * @param status fills in the outgoing error code. If an error occurred, we may return NULL, but don't - * count on it. Check status instead! - * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. - * @stable ICU 2.0 - */ -U_STABLE const UChar* U_EXPORT2 -ures_getStringByIndex(const UResourceBundle *resourceBundle, - int32_t indexS, - int32_t* len, - UErrorCode *status); - -/** - * Returns a UTF-8 string from a resource at the specified index. - * The UTF-8 string may be returnable directly as a pointer, or - * it may need to be copied, or transformed from UTF-16 using u_strToUTF8() - * or equivalent. - * - * If forceCopy==TRUE, then the string is always written to the dest buffer - * and dest is returned. - * - * If forceCopy==FALSE, then the string is returned as a pointer if possible, - * without needing a dest buffer (it can be NULL). If the string needs to be - * copied or transformed, then it may be placed into dest at an arbitrary offset. - * - * If the string is to be written to dest, then U_BUFFER_OVERFLOW_ERROR and - * U_STRING_NOT_TERMINATED_WARNING are set if appropriate, as usual. - * - * If the string is transformed from UTF-16, then a conversion error may occur - * if an unpaired surrogate is encountered. If the function is successful, then - * the output UTF-8 string is always well-formed. - * - * @param resB Resource bundle. - * @param stringIndex An index to the wanted string. - * @param dest Destination buffer. Can be NULL only if capacity=*length==0. - * @param pLength Input: Capacity of destination buffer. - * Output: Actual length of the UTF-8 string, not counting the - * terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR. - * Can be NULL, meaning capacity=0 and the string length is not - * returned to the caller. - * @param forceCopy If TRUE, then the output string will always be written to - * dest, with U_BUFFER_OVERFLOW_ERROR and - * U_STRING_NOT_TERMINATED_WARNING set if appropriate. - * If FALSE, then the dest buffer may or may not contain a - * copy of the string. dest may or may not be modified. - * If a copy needs to be written, then the UErrorCode parameter - * indicates overflow etc. as usual. - * @param status Pointer to a standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return The pointer to the UTF-8 string. It may be dest, or at some offset - * from dest (only if !forceCopy), or in unrelated memory. - * Always NUL-terminated unless the string was written to dest and - * length==capacity (in which case U_STRING_NOT_TERMINATED_WARNING is set). - * - * @see ures_getStringByIndex - * @see u_strToUTF8 - * @stable ICU 3.6 - */ -U_STABLE const char * U_EXPORT2 -ures_getUTF8StringByIndex(const UResourceBundle *resB, - int32_t stringIndex, - char *dest, int32_t *pLength, - UBool forceCopy, - UErrorCode *status); - -/** - * Returns a resource in a given resource that has a given key. This procedure works only with table - * resources. Features a fill-in parameter. - * - * @param resourceBundle a resource - * @param key a key associated with the wanted resource - * @param fillIn if NULL a new UResourceBundle struct is allocated and must be closed by the caller. - * Alternatively, you can supply a struct to be filled by this function. - * @param status fills in the outgoing error code. - * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it - * @stable ICU 2.0 - */ -U_STABLE UResourceBundle* U_EXPORT2 -ures_getByKey(const UResourceBundle *resourceBundle, - const char* key, - UResourceBundle *fillIn, - UErrorCode *status); - -/** - * Returns a string in a given resource that has a given key. This procedure works only with table - * resources. - * - * @param resB a resource - * @param key a key associated with the wanted string - * @param len fill in length of the string - * @param status fills in the outgoing error code. If an error occurred, we may return NULL, but don't - * count on it. Check status instead! - * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. - * @stable ICU 2.0 - */ -U_STABLE const UChar* U_EXPORT2 -ures_getStringByKey(const UResourceBundle *resB, - const char* key, - int32_t* len, - UErrorCode *status); - -/** - * Returns a UTF-8 string from a resource and a key. - * This function works only with table resources. - * - * The UTF-8 string may be returnable directly as a pointer, or - * it may need to be copied, or transformed from UTF-16 using u_strToUTF8() - * or equivalent. - * - * If forceCopy==TRUE, then the string is always written to the dest buffer - * and dest is returned. - * - * If forceCopy==FALSE, then the string is returned as a pointer if possible, - * without needing a dest buffer (it can be NULL). If the string needs to be - * copied or transformed, then it may be placed into dest at an arbitrary offset. - * - * If the string is to be written to dest, then U_BUFFER_OVERFLOW_ERROR and - * U_STRING_NOT_TERMINATED_WARNING are set if appropriate, as usual. - * - * If the string is transformed from UTF-16, then a conversion error may occur - * if an unpaired surrogate is encountered. If the function is successful, then - * the output UTF-8 string is always well-formed. - * - * @param resB Resource bundle. - * @param key A key associated with the wanted resource - * @param dest Destination buffer. Can be NULL only if capacity=*length==0. - * @param pLength Input: Capacity of destination buffer. - * Output: Actual length of the UTF-8 string, not counting the - * terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR. - * Can be NULL, meaning capacity=0 and the string length is not - * returned to the caller. - * @param forceCopy If TRUE, then the output string will always be written to - * dest, with U_BUFFER_OVERFLOW_ERROR and - * U_STRING_NOT_TERMINATED_WARNING set if appropriate. - * If FALSE, then the dest buffer may or may not contain a - * copy of the string. dest may or may not be modified. - * If a copy needs to be written, then the UErrorCode parameter - * indicates overflow etc. as usual. - * @param status Pointer to a standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return The pointer to the UTF-8 string. It may be dest, or at some offset - * from dest (only if !forceCopy), or in unrelated memory. - * Always NUL-terminated unless the string was written to dest and - * length==capacity (in which case U_STRING_NOT_TERMINATED_WARNING is set). - * - * @see ures_getStringByKey - * @see u_strToUTF8 - * @stable ICU 3.6 - */ -U_STABLE const char * U_EXPORT2 -ures_getUTF8StringByKey(const UResourceBundle *resB, - const char *key, - char *dest, int32_t *pLength, - UBool forceCopy, - UErrorCode *status); - -#if U_SHOW_CPLUSPLUS_API -#include "unicode/unistr.h" - -U_NAMESPACE_BEGIN -/** - * Returns the string value from a string resource bundle. - * - * @param resB a resource, should have type URES_STRING - * @param status: fills in the outgoing error code - * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a non-failing error - * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return The string value, or a bogus string if there is a failure UErrorCode. - * @stable ICU 2.0 - */ -inline UnicodeString -ures_getUnicodeString(const UResourceBundle *resB, UErrorCode* status) { - UnicodeString result; - int32_t len = 0; - const UChar *r = ures_getString(resB, &len, status); - if(U_SUCCESS(*status)) { - result.setTo(TRUE, r, len); - } else { - result.setToBogus(); - } - return result; -} - -/** - * Returns the next string in a resource, or an empty string if there are no more resources - * to iterate over. - * Use ures_getNextString() instead to distinguish between - * the end of the iteration and a real empty string value. - * - * @param resB a resource - * @param key fill in for key associated with this string - * @param status fills in the outgoing error code - * @return The string value, or a bogus string if there is a failure UErrorCode. - * @stable ICU 2.0 - */ -inline UnicodeString -ures_getNextUnicodeString(UResourceBundle *resB, const char ** key, UErrorCode* status) { - UnicodeString result; - int32_t len = 0; - const UChar* r = ures_getNextString(resB, &len, key, status); - if(U_SUCCESS(*status)) { - result.setTo(TRUE, r, len); - } else { - result.setToBogus(); - } - return result; -} - -/** - * Returns the string in a given resource array or table at the specified index. - * - * @param resB a resource - * @param indexS an index to the wanted string. - * @param status fills in the outgoing error code - * @return The string value, or a bogus string if there is a failure UErrorCode. - * @stable ICU 2.0 - */ -inline UnicodeString -ures_getUnicodeStringByIndex(const UResourceBundle *resB, int32_t indexS, UErrorCode* status) { - UnicodeString result; - int32_t len = 0; - const UChar* r = ures_getStringByIndex(resB, indexS, &len, status); - if(U_SUCCESS(*status)) { - result.setTo(TRUE, r, len); - } else { - result.setToBogus(); - } - return result; -} - -/** - * Returns a string in a resource that has a given key. - * This procedure works only with table resources. - * - * @param resB a resource - * @param key a key associated with the wanted string - * @param status fills in the outgoing error code - * @return The string value, or a bogus string if there is a failure UErrorCode. - * @stable ICU 2.0 - */ -inline UnicodeString -ures_getUnicodeStringByKey(const UResourceBundle *resB, const char* key, UErrorCode* status) { - UnicodeString result; - int32_t len = 0; - const UChar* r = ures_getStringByKey(resB, key, &len, status); - if(U_SUCCESS(*status)) { - result.setTo(TRUE, r, len); - } else { - result.setToBogus(); - } - return result; -} - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Create a string enumerator, owned by the caller, of all locales located within - * the specified resource tree. - * @param packageName name of the tree, such as (NULL) or U_ICUDATA_ALIAS or or "ICUDATA-coll" - * This call is similar to uloc_getAvailable(). - * @param status error code - * @stable ICU 3.2 - */ -U_STABLE UEnumeration* U_EXPORT2 -ures_openAvailableLocales(const char *packageName, UErrorCode *status); - - -#endif /*_URES*/ -/*eof*/ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uscript.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uscript.h deleted file mode 100644 index 0ba3cf0be6..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uscript.h +++ /dev/null @@ -1,699 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ********************************************************************** - * Copyright (C) 1997-2016, International Business Machines - * Corporation and others. All Rights Reserved. - ********************************************************************** - * - * File USCRIPT.H - * - * Modification History: - * - * Date Name Description - * 07/06/2001 Ram Creation. - ****************************************************************************** - */ - -#ifndef USCRIPT_H -#define USCRIPT_H -#include "unicode/utypes.h" - -/** - * \file - * \brief C API: Unicode Script Information - */ - -/** - * Constants for ISO 15924 script codes. - * - * The current set of script code constants supports at least all scripts - * that are encoded in the version of Unicode which ICU currently supports. - * The names of the constants are usually derived from the - * Unicode script property value aliases. - * See UAX #24 Unicode Script Property (http://www.unicode.org/reports/tr24/) - * and http://www.unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt . - * - * In addition, constants for many ISO 15924 script codes - * are included, for use with language tags, CLDR data, and similar. - * Some of those codes are not used in the Unicode Character Database (UCD). - * For example, there are no characters that have a UCD script property value of - * Hans or Hant. All Han ideographs have the Hani script property value in Unicode. - * - * Private-use codes Qaaa..Qabx are not included, except as used in the UCD or in CLDR. - * - * Starting with ICU 55, script codes are only added when their scripts - * have been or will certainly be encoded in Unicode, - * and have been assigned Unicode script property value aliases, - * to ensure that their script names are stable and match the names of the constants. - * Script codes like Latf and Aran that are not subject to separate encoding - * may be added at any time. - * - * @stable ICU 2.2 - */ -typedef enum UScriptCode { - /* - * Note: UScriptCode constants and their ISO script code comments - * are parsed by preparseucd.py. - * It matches lines like - * USCRIPT_ = , / * * / - */ - - /** @stable ICU 2.2 */ - USCRIPT_INVALID_CODE = -1, - /** @stable ICU 2.2 */ - USCRIPT_COMMON = 0, /* Zyyy */ - /** @stable ICU 2.2 */ - USCRIPT_INHERITED = 1, /* Zinh */ /* "Code for inherited script", for non-spacing combining marks; also Qaai */ - /** @stable ICU 2.2 */ - USCRIPT_ARABIC = 2, /* Arab */ - /** @stable ICU 2.2 */ - USCRIPT_ARMENIAN = 3, /* Armn */ - /** @stable ICU 2.2 */ - USCRIPT_BENGALI = 4, /* Beng */ - /** @stable ICU 2.2 */ - USCRIPT_BOPOMOFO = 5, /* Bopo */ - /** @stable ICU 2.2 */ - USCRIPT_CHEROKEE = 6, /* Cher */ - /** @stable ICU 2.2 */ - USCRIPT_COPTIC = 7, /* Copt */ - /** @stable ICU 2.2 */ - USCRIPT_CYRILLIC = 8, /* Cyrl */ - /** @stable ICU 2.2 */ - USCRIPT_DESERET = 9, /* Dsrt */ - /** @stable ICU 2.2 */ - USCRIPT_DEVANAGARI = 10, /* Deva */ - /** @stable ICU 2.2 */ - USCRIPT_ETHIOPIC = 11, /* Ethi */ - /** @stable ICU 2.2 */ - USCRIPT_GEORGIAN = 12, /* Geor */ - /** @stable ICU 2.2 */ - USCRIPT_GOTHIC = 13, /* Goth */ - /** @stable ICU 2.2 */ - USCRIPT_GREEK = 14, /* Grek */ - /** @stable ICU 2.2 */ - USCRIPT_GUJARATI = 15, /* Gujr */ - /** @stable ICU 2.2 */ - USCRIPT_GURMUKHI = 16, /* Guru */ - /** @stable ICU 2.2 */ - USCRIPT_HAN = 17, /* Hani */ - /** @stable ICU 2.2 */ - USCRIPT_HANGUL = 18, /* Hang */ - /** @stable ICU 2.2 */ - USCRIPT_HEBREW = 19, /* Hebr */ - /** @stable ICU 2.2 */ - USCRIPT_HIRAGANA = 20, /* Hira */ - /** @stable ICU 2.2 */ - USCRIPT_KANNADA = 21, /* Knda */ - /** @stable ICU 2.2 */ - USCRIPT_KATAKANA = 22, /* Kana */ - /** @stable ICU 2.2 */ - USCRIPT_KHMER = 23, /* Khmr */ - /** @stable ICU 2.2 */ - USCRIPT_LAO = 24, /* Laoo */ - /** @stable ICU 2.2 */ - USCRIPT_LATIN = 25, /* Latn */ - /** @stable ICU 2.2 */ - USCRIPT_MALAYALAM = 26, /* Mlym */ - /** @stable ICU 2.2 */ - USCRIPT_MONGOLIAN = 27, /* Mong */ - /** @stable ICU 2.2 */ - USCRIPT_MYANMAR = 28, /* Mymr */ - /** @stable ICU 2.2 */ - USCRIPT_OGHAM = 29, /* Ogam */ - /** @stable ICU 2.2 */ - USCRIPT_OLD_ITALIC = 30, /* Ital */ - /** @stable ICU 2.2 */ - USCRIPT_ORIYA = 31, /* Orya */ - /** @stable ICU 2.2 */ - USCRIPT_RUNIC = 32, /* Runr */ - /** @stable ICU 2.2 */ - USCRIPT_SINHALA = 33, /* Sinh */ - /** @stable ICU 2.2 */ - USCRIPT_SYRIAC = 34, /* Syrc */ - /** @stable ICU 2.2 */ - USCRIPT_TAMIL = 35, /* Taml */ - /** @stable ICU 2.2 */ - USCRIPT_TELUGU = 36, /* Telu */ - /** @stable ICU 2.2 */ - USCRIPT_THAANA = 37, /* Thaa */ - /** @stable ICU 2.2 */ - USCRIPT_THAI = 38, /* Thai */ - /** @stable ICU 2.2 */ - USCRIPT_TIBETAN = 39, /* Tibt */ - /** Canadian_Aboriginal script. @stable ICU 2.6 */ - USCRIPT_CANADIAN_ABORIGINAL = 40, /* Cans */ - /** Canadian_Aboriginal script (alias). @stable ICU 2.2 */ - USCRIPT_UCAS = USCRIPT_CANADIAN_ABORIGINAL, - /** @stable ICU 2.2 */ - USCRIPT_YI = 41, /* Yiii */ - /* New scripts in Unicode 3.2 */ - /** @stable ICU 2.2 */ - USCRIPT_TAGALOG = 42, /* Tglg */ - /** @stable ICU 2.2 */ - USCRIPT_HANUNOO = 43, /* Hano */ - /** @stable ICU 2.2 */ - USCRIPT_BUHID = 44, /* Buhd */ - /** @stable ICU 2.2 */ - USCRIPT_TAGBANWA = 45, /* Tagb */ - - /* New scripts in Unicode 4 */ - /** @stable ICU 2.6 */ - USCRIPT_BRAILLE = 46, /* Brai */ - /** @stable ICU 2.6 */ - USCRIPT_CYPRIOT = 47, /* Cprt */ - /** @stable ICU 2.6 */ - USCRIPT_LIMBU = 48, /* Limb */ - /** @stable ICU 2.6 */ - USCRIPT_LINEAR_B = 49, /* Linb */ - /** @stable ICU 2.6 */ - USCRIPT_OSMANYA = 50, /* Osma */ - /** @stable ICU 2.6 */ - USCRIPT_SHAVIAN = 51, /* Shaw */ - /** @stable ICU 2.6 */ - USCRIPT_TAI_LE = 52, /* Tale */ - /** @stable ICU 2.6 */ - USCRIPT_UGARITIC = 53, /* Ugar */ - - /** New script code in Unicode 4.0.1 @stable ICU 3.0 */ - USCRIPT_KATAKANA_OR_HIRAGANA = 54,/*Hrkt */ - - /* New scripts in Unicode 4.1 */ - /** @stable ICU 3.4 */ - USCRIPT_BUGINESE = 55, /* Bugi */ - /** @stable ICU 3.4 */ - USCRIPT_GLAGOLITIC = 56, /* Glag */ - /** @stable ICU 3.4 */ - USCRIPT_KHAROSHTHI = 57, /* Khar */ - /** @stable ICU 3.4 */ - USCRIPT_SYLOTI_NAGRI = 58, /* Sylo */ - /** @stable ICU 3.4 */ - USCRIPT_NEW_TAI_LUE = 59, /* Talu */ - /** @stable ICU 3.4 */ - USCRIPT_TIFINAGH = 60, /* Tfng */ - /** @stable ICU 3.4 */ - USCRIPT_OLD_PERSIAN = 61, /* Xpeo */ - - /* New script codes from Unicode and ISO 15924 */ - /** @stable ICU 3.6 */ - USCRIPT_BALINESE = 62, /* Bali */ - /** @stable ICU 3.6 */ - USCRIPT_BATAK = 63, /* Batk */ - /** @stable ICU 3.6 */ - USCRIPT_BLISSYMBOLS = 64, /* Blis */ - /** @stable ICU 3.6 */ - USCRIPT_BRAHMI = 65, /* Brah */ - /** @stable ICU 3.6 */ - USCRIPT_CHAM = 66, /* Cham */ - /** @stable ICU 3.6 */ - USCRIPT_CIRTH = 67, /* Cirt */ - /** @stable ICU 3.6 */ - USCRIPT_OLD_CHURCH_SLAVONIC_CYRILLIC = 68, /* Cyrs */ - /** @stable ICU 3.6 */ - USCRIPT_DEMOTIC_EGYPTIAN = 69, /* Egyd */ - /** @stable ICU 3.6 */ - USCRIPT_HIERATIC_EGYPTIAN = 70, /* Egyh */ - /** @stable ICU 3.6 */ - USCRIPT_EGYPTIAN_HIEROGLYPHS = 71, /* Egyp */ - /** @stable ICU 3.6 */ - USCRIPT_KHUTSURI = 72, /* Geok */ - /** @stable ICU 3.6 */ - USCRIPT_SIMPLIFIED_HAN = 73, /* Hans */ - /** @stable ICU 3.6 */ - USCRIPT_TRADITIONAL_HAN = 74, /* Hant */ - /** @stable ICU 3.6 */ - USCRIPT_PAHAWH_HMONG = 75, /* Hmng */ - /** @stable ICU 3.6 */ - USCRIPT_OLD_HUNGARIAN = 76, /* Hung */ - /** @stable ICU 3.6 */ - USCRIPT_HARAPPAN_INDUS = 77, /* Inds */ - /** @stable ICU 3.6 */ - USCRIPT_JAVANESE = 78, /* Java */ - /** @stable ICU 3.6 */ - USCRIPT_KAYAH_LI = 79, /* Kali */ - /** @stable ICU 3.6 */ - USCRIPT_LATIN_FRAKTUR = 80, /* Latf */ - /** @stable ICU 3.6 */ - USCRIPT_LATIN_GAELIC = 81, /* Latg */ - /** @stable ICU 3.6 */ - USCRIPT_LEPCHA = 82, /* Lepc */ - /** @stable ICU 3.6 */ - USCRIPT_LINEAR_A = 83, /* Lina */ - /** @stable ICU 4.6 */ - USCRIPT_MANDAIC = 84, /* Mand */ - /** @stable ICU 3.6 */ - USCRIPT_MANDAEAN = USCRIPT_MANDAIC, - /** @stable ICU 3.6 */ - USCRIPT_MAYAN_HIEROGLYPHS = 85, /* Maya */ - /** @stable ICU 4.6 */ - USCRIPT_MEROITIC_HIEROGLYPHS = 86, /* Mero */ - /** @stable ICU 3.6 */ - USCRIPT_MEROITIC = USCRIPT_MEROITIC_HIEROGLYPHS, - /** @stable ICU 3.6 */ - USCRIPT_NKO = 87, /* Nkoo */ - /** @stable ICU 3.6 */ - USCRIPT_ORKHON = 88, /* Orkh */ - /** @stable ICU 3.6 */ - USCRIPT_OLD_PERMIC = 89, /* Perm */ - /** @stable ICU 3.6 */ - USCRIPT_PHAGS_PA = 90, /* Phag */ - /** @stable ICU 3.6 */ - USCRIPT_PHOENICIAN = 91, /* Phnx */ - /** @stable ICU 52 */ - USCRIPT_MIAO = 92, /* Plrd */ - /** @stable ICU 3.6 */ - USCRIPT_PHONETIC_POLLARD = USCRIPT_MIAO, - /** @stable ICU 3.6 */ - USCRIPT_RONGORONGO = 93, /* Roro */ - /** @stable ICU 3.6 */ - USCRIPT_SARATI = 94, /* Sara */ - /** @stable ICU 3.6 */ - USCRIPT_ESTRANGELO_SYRIAC = 95, /* Syre */ - /** @stable ICU 3.6 */ - USCRIPT_WESTERN_SYRIAC = 96, /* Syrj */ - /** @stable ICU 3.6 */ - USCRIPT_EASTERN_SYRIAC = 97, /* Syrn */ - /** @stable ICU 3.6 */ - USCRIPT_TENGWAR = 98, /* Teng */ - /** @stable ICU 3.6 */ - USCRIPT_VAI = 99, /* Vaii */ - /** @stable ICU 3.6 */ - USCRIPT_VISIBLE_SPEECH = 100,/* Visp */ - /** @stable ICU 3.6 */ - USCRIPT_CUNEIFORM = 101,/* Xsux */ - /** @stable ICU 3.6 */ - USCRIPT_UNWRITTEN_LANGUAGES = 102,/* Zxxx */ - /** @stable ICU 3.6 */ - USCRIPT_UNKNOWN = 103,/* Zzzz */ /* Unknown="Code for uncoded script", for unassigned code points */ - - /** @stable ICU 3.8 */ - USCRIPT_CARIAN = 104,/* Cari */ - /** @stable ICU 3.8 */ - USCRIPT_JAPANESE = 105,/* Jpan */ - /** @stable ICU 3.8 */ - USCRIPT_LANNA = 106,/* Lana */ - /** @stable ICU 3.8 */ - USCRIPT_LYCIAN = 107,/* Lyci */ - /** @stable ICU 3.8 */ - USCRIPT_LYDIAN = 108,/* Lydi */ - /** @stable ICU 3.8 */ - USCRIPT_OL_CHIKI = 109,/* Olck */ - /** @stable ICU 3.8 */ - USCRIPT_REJANG = 110,/* Rjng */ - /** @stable ICU 3.8 */ - USCRIPT_SAURASHTRA = 111,/* Saur */ - /** Sutton SignWriting @stable ICU 3.8 */ - USCRIPT_SIGN_WRITING = 112,/* Sgnw */ - /** @stable ICU 3.8 */ - USCRIPT_SUNDANESE = 113,/* Sund */ - /** @stable ICU 3.8 */ - USCRIPT_MOON = 114,/* Moon */ - /** @stable ICU 3.8 */ - USCRIPT_MEITEI_MAYEK = 115,/* Mtei */ - - /** @stable ICU 4.0 */ - USCRIPT_IMPERIAL_ARAMAIC = 116,/* Armi */ - /** @stable ICU 4.0 */ - USCRIPT_AVESTAN = 117,/* Avst */ - /** @stable ICU 4.0 */ - USCRIPT_CHAKMA = 118,/* Cakm */ - /** @stable ICU 4.0 */ - USCRIPT_KOREAN = 119,/* Kore */ - /** @stable ICU 4.0 */ - USCRIPT_KAITHI = 120,/* Kthi */ - /** @stable ICU 4.0 */ - USCRIPT_MANICHAEAN = 121,/* Mani */ - /** @stable ICU 4.0 */ - USCRIPT_INSCRIPTIONAL_PAHLAVI = 122,/* Phli */ - /** @stable ICU 4.0 */ - USCRIPT_PSALTER_PAHLAVI = 123,/* Phlp */ - /** @stable ICU 4.0 */ - USCRIPT_BOOK_PAHLAVI = 124,/* Phlv */ - /** @stable ICU 4.0 */ - USCRIPT_INSCRIPTIONAL_PARTHIAN = 125,/* Prti */ - /** @stable ICU 4.0 */ - USCRIPT_SAMARITAN = 126,/* Samr */ - /** @stable ICU 4.0 */ - USCRIPT_TAI_VIET = 127,/* Tavt */ - /** @stable ICU 4.0 */ - USCRIPT_MATHEMATICAL_NOTATION = 128,/* Zmth */ - /** @stable ICU 4.0 */ - USCRIPT_SYMBOLS = 129,/* Zsym */ - - /** @stable ICU 4.4 */ - USCRIPT_BAMUM = 130,/* Bamu */ - /** @stable ICU 4.4 */ - USCRIPT_LISU = 131,/* Lisu */ - /** @stable ICU 4.4 */ - USCRIPT_NAKHI_GEBA = 132,/* Nkgb */ - /** @stable ICU 4.4 */ - USCRIPT_OLD_SOUTH_ARABIAN = 133,/* Sarb */ - - /** @stable ICU 4.6 */ - USCRIPT_BASSA_VAH = 134,/* Bass */ - /** @stable ICU 54 */ - USCRIPT_DUPLOYAN = 135,/* Dupl */ -#ifndef U_HIDE_DEPRECATED_API - /** @deprecated ICU 54 Typo, use USCRIPT_DUPLOYAN */ - USCRIPT_DUPLOYAN_SHORTAND = USCRIPT_DUPLOYAN, -#endif /* U_HIDE_DEPRECATED_API */ - /** @stable ICU 4.6 */ - USCRIPT_ELBASAN = 136,/* Elba */ - /** @stable ICU 4.6 */ - USCRIPT_GRANTHA = 137,/* Gran */ - /** @stable ICU 4.6 */ - USCRIPT_KPELLE = 138,/* Kpel */ - /** @stable ICU 4.6 */ - USCRIPT_LOMA = 139,/* Loma */ - /** Mende Kikakui @stable ICU 4.6 */ - USCRIPT_MENDE = 140,/* Mend */ - /** @stable ICU 4.6 */ - USCRIPT_MEROITIC_CURSIVE = 141,/* Merc */ - /** @stable ICU 4.6 */ - USCRIPT_OLD_NORTH_ARABIAN = 142,/* Narb */ - /** @stable ICU 4.6 */ - USCRIPT_NABATAEAN = 143,/* Nbat */ - /** @stable ICU 4.6 */ - USCRIPT_PALMYRENE = 144,/* Palm */ - /** @stable ICU 54 */ - USCRIPT_KHUDAWADI = 145,/* Sind */ - /** @stable ICU 4.6 */ - USCRIPT_SINDHI = USCRIPT_KHUDAWADI, - /** @stable ICU 4.6 */ - USCRIPT_WARANG_CITI = 146,/* Wara */ - - /** @stable ICU 4.8 */ - USCRIPT_AFAKA = 147,/* Afak */ - /** @stable ICU 4.8 */ - USCRIPT_JURCHEN = 148,/* Jurc */ - /** @stable ICU 4.8 */ - USCRIPT_MRO = 149,/* Mroo */ - /** @stable ICU 4.8 */ - USCRIPT_NUSHU = 150,/* Nshu */ - /** @stable ICU 4.8 */ - USCRIPT_SHARADA = 151,/* Shrd */ - /** @stable ICU 4.8 */ - USCRIPT_SORA_SOMPENG = 152,/* Sora */ - /** @stable ICU 4.8 */ - USCRIPT_TAKRI = 153,/* Takr */ - /** @stable ICU 4.8 */ - USCRIPT_TANGUT = 154,/* Tang */ - /** @stable ICU 4.8 */ - USCRIPT_WOLEAI = 155,/* Wole */ - - /** @stable ICU 49 */ - USCRIPT_ANATOLIAN_HIEROGLYPHS = 156,/* Hluw */ - /** @stable ICU 49 */ - USCRIPT_KHOJKI = 157,/* Khoj */ - /** @stable ICU 49 */ - USCRIPT_TIRHUTA = 158,/* Tirh */ - - /** @stable ICU 52 */ - USCRIPT_CAUCASIAN_ALBANIAN = 159,/* Aghb */ - /** @stable ICU 52 */ - USCRIPT_MAHAJANI = 160,/* Mahj */ - - /** @stable ICU 54 */ - USCRIPT_AHOM = 161,/* Ahom */ - /** @stable ICU 54 */ - USCRIPT_HATRAN = 162,/* Hatr */ - /** @stable ICU 54 */ - USCRIPT_MODI = 163,/* Modi */ - /** @stable ICU 54 */ - USCRIPT_MULTANI = 164,/* Mult */ - /** @stable ICU 54 */ - USCRIPT_PAU_CIN_HAU = 165,/* Pauc */ - /** @stable ICU 54 */ - USCRIPT_SIDDHAM = 166,/* Sidd */ - - /** @stable ICU 58 */ - USCRIPT_ADLAM = 167,/* Adlm */ - /** @stable ICU 58 */ - USCRIPT_BHAIKSUKI = 168,/* Bhks */ - /** @stable ICU 58 */ - USCRIPT_MARCHEN = 169,/* Marc */ - /** @stable ICU 58 */ - USCRIPT_NEWA = 170,/* Newa */ - /** @stable ICU 58 */ - USCRIPT_OSAGE = 171,/* Osge */ - - /** @stable ICU 58 */ - USCRIPT_HAN_WITH_BOPOMOFO = 172,/* Hanb */ - /** @stable ICU 58 */ - USCRIPT_JAMO = 173,/* Jamo */ - /** @stable ICU 58 */ - USCRIPT_SYMBOLS_EMOJI = 174,/* Zsye */ - - /** @stable ICU 60 */ - USCRIPT_MASARAM_GONDI = 175,/* Gonm */ - /** @stable ICU 60 */ - USCRIPT_SOYOMBO = 176,/* Soyo */ - /** @stable ICU 60 */ - USCRIPT_ZANABAZAR_SQUARE = 177,/* Zanb */ - - /** @stable ICU 62 */ - USCRIPT_DOGRA = 178,/* Dogr */ - /** @stable ICU 62 */ - USCRIPT_GUNJALA_GONDI = 179,/* Gong */ - /** @stable ICU 62 */ - USCRIPT_MAKASAR = 180,/* Maka */ - /** @stable ICU 62 */ - USCRIPT_MEDEFAIDRIN = 181,/* Medf */ - /** @stable ICU 62 */ - USCRIPT_HANIFI_ROHINGYA = 182,/* Rohg */ - /** @stable ICU 62 */ - USCRIPT_SOGDIAN = 183,/* Sogd */ - /** @stable ICU 62 */ - USCRIPT_OLD_SOGDIAN = 184,/* Sogo */ - - /** @stable ICU 64 */ - USCRIPT_ELYMAIC = 185,/* Elym */ - /** @stable ICU 64 */ - USCRIPT_NYIAKENG_PUACHUE_HMONG = 186,/* Hmnp */ - /** @stable ICU 64 */ - USCRIPT_NANDINAGARI = 187,/* Nand */ - /** @stable ICU 64 */ - USCRIPT_WANCHO = 188,/* Wcho */ - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UScriptCode value. - * The highest value is available via u_getIntPropertyMaxValue(UCHAR_SCRIPT). - * - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - USCRIPT_CODE_LIMIT = 189 -#endif // U_HIDE_DEPRECATED_API -} UScriptCode; - -/** - * Gets the script codes associated with the given locale or ISO 15924 abbreviation or name. - * Fills in USCRIPT_MALAYALAM given "Malayam" OR "Mlym". - * Fills in USCRIPT_LATIN given "en" OR "en_US" - * If the required capacity is greater than the capacity of the destination buffer, - * then the error code is set to U_BUFFER_OVERFLOW_ERROR and the required capacity is returned. - * - *

Note: To search by short or long script alias only, use - * u_getPropertyValueEnum(UCHAR_SCRIPT, alias) instead. That does - * a fast lookup with no access of the locale data. - * - * @param nameOrAbbrOrLocale name of the script, as given in - * PropertyValueAliases.txt, or ISO 15924 code or locale - * @param fillIn the UScriptCode buffer to fill in the script code - * @param capacity the capacity (size) of UScriptCode buffer passed in. - * @param err the error status code. - * @return The number of script codes filled in the buffer passed in - * @stable ICU 2.4 - */ -U_STABLE int32_t U_EXPORT2 -uscript_getCode(const char* nameOrAbbrOrLocale,UScriptCode* fillIn,int32_t capacity,UErrorCode *err); - -/** - * Returns the long Unicode script name, if there is one. - * Otherwise returns the 4-letter ISO 15924 script code. - * Returns "Malayam" given USCRIPT_MALAYALAM. - * - * @param scriptCode UScriptCode enum - * @return long script name as given in PropertyValueAliases.txt, or the 4-letter code, - * or NULL if scriptCode is invalid - * @stable ICU 2.4 - */ -U_STABLE const char* U_EXPORT2 -uscript_getName(UScriptCode scriptCode); - -/** - * Returns the 4-letter ISO 15924 script code, - * which is the same as the short Unicode script name if Unicode has names for the script. - * Returns "Mlym" given USCRIPT_MALAYALAM. - * - * @param scriptCode UScriptCode enum - * @return short script name (4-letter code), or NULL if scriptCode is invalid - * @stable ICU 2.4 - */ -U_STABLE const char* U_EXPORT2 -uscript_getShortName(UScriptCode scriptCode); - -/** - * Gets the script code associated with the given codepoint. - * Returns USCRIPT_MALAYALAM given 0x0D02 - * @param codepoint UChar32 codepoint - * @param err the error status code. - * @return The UScriptCode, or 0 if codepoint is invalid - * @stable ICU 2.4 - */ -U_STABLE UScriptCode U_EXPORT2 -uscript_getScript(UChar32 codepoint, UErrorCode *err); - -/** - * Do the Script_Extensions of code point c contain script sc? - * If c does not have explicit Script_Extensions, then this tests whether - * c has the Script property value sc. - * - * Some characters are commonly used in multiple scripts. - * For more information, see UAX #24: http://www.unicode.org/reports/tr24/. - * @param c code point - * @param sc script code - * @return TRUE if sc is in Script_Extensions(c) - * @stable ICU 49 - */ -U_STABLE UBool U_EXPORT2 -uscript_hasScript(UChar32 c, UScriptCode sc); - -/** - * Writes code point c's Script_Extensions as a list of UScriptCode values - * to the output scripts array and returns the number of script codes. - * - If c does have Script_Extensions, then the Script property value - * (normally Common or Inherited) is not included. - * - If c does not have Script_Extensions, then the one Script code is written to the output array. - * - If c is not a valid code point, then the one USCRIPT_UNKNOWN code is written. - * In other words, if the return value is 1, - * then the output array contains exactly c's single Script code. - * If the return value is n>=2, then the output array contains c's n Script_Extensions script codes. - * - * Some characters are commonly used in multiple scripts. - * For more information, see UAX #24: http://www.unicode.org/reports/tr24/. - * - * If there are more than capacity script codes to be written, then - * U_BUFFER_OVERFLOW_ERROR is set and the number of Script_Extensions is returned. - * (Usual ICU buffer handling behavior.) - * - * @param c code point - * @param scripts output script code array - * @param capacity capacity of the scripts array - * @param errorCode Standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return number of script codes in c's Script_Extensions, or 1 for the single Script value, - * written to scripts unless U_BUFFER_OVERFLOW_ERROR indicates insufficient capacity - * @stable ICU 49 - */ -U_STABLE int32_t U_EXPORT2 -uscript_getScriptExtensions(UChar32 c, - UScriptCode *scripts, int32_t capacity, - UErrorCode *errorCode); - -/** - * Script usage constants. - * See UAX #31 Unicode Identifier and Pattern Syntax. - * http://www.unicode.org/reports/tr31/#Table_Candidate_Characters_for_Exclusion_from_Identifiers - * - * @stable ICU 51 - */ -typedef enum UScriptUsage { - /** Not encoded in Unicode. @stable ICU 51 */ - USCRIPT_USAGE_NOT_ENCODED, - /** Unknown script usage. @stable ICU 51 */ - USCRIPT_USAGE_UNKNOWN, - /** Candidate for Exclusion from Identifiers. @stable ICU 51 */ - USCRIPT_USAGE_EXCLUDED, - /** Limited Use script. @stable ICU 51 */ - USCRIPT_USAGE_LIMITED_USE, - /** Aspirational Use script. @stable ICU 51 */ - USCRIPT_USAGE_ASPIRATIONAL, - /** Recommended script. @stable ICU 51 */ - USCRIPT_USAGE_RECOMMENDED -} UScriptUsage; - -/** - * Writes the script sample character string. - * This string normally consists of one code point but might be longer. - * The string is empty if the script is not encoded. - * - * @param script script code - * @param dest output string array - * @param capacity number of UChars in the dest array - * @param pErrorCode standard ICU in/out error code, must pass U_SUCCESS() on input - * @return the string length, even if U_BUFFER_OVERFLOW_ERROR - * @stable ICU 51 - */ -U_STABLE int32_t U_EXPORT2 -uscript_getSampleString(UScriptCode script, UChar *dest, int32_t capacity, UErrorCode *pErrorCode); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN -class UnicodeString; -U_NAMESPACE_END - -/** - * Returns the script sample character string. - * This string normally consists of one code point but might be longer. - * The string is empty if the script is not encoded. - * - * @param script script code - * @return the sample character string - * @stable ICU 51 - */ -U_COMMON_API icu::UnicodeString U_EXPORT2 -uscript_getSampleUnicodeString(UScriptCode script); - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Returns the script usage according to UAX #31 Unicode Identifier and Pattern Syntax. - * Returns USCRIPT_USAGE_NOT_ENCODED if the script is not encoded in Unicode. - * - * @param script script code - * @return script usage - * @see UScriptUsage - * @stable ICU 51 - */ -U_STABLE UScriptUsage U_EXPORT2 -uscript_getUsage(UScriptCode script); - -/** - * Returns TRUE if the script is written right-to-left. - * For example, Arab and Hebr. - * - * @param script script code - * @return TRUE if the script is right-to-left - * @stable ICU 51 - */ -U_STABLE UBool U_EXPORT2 -uscript_isRightToLeft(UScriptCode script); - -/** - * Returns TRUE if the script allows line breaks between letters (excluding hyphenation). - * Such a script typically requires dictionary-based line breaking. - * For example, Hani and Thai. - * - * @param script script code - * @return TRUE if the script allows line breaks between letters - * @stable ICU 51 - */ -U_STABLE UBool U_EXPORT2 -uscript_breaksBetweenLetters(UScriptCode script); - -/** - * Returns TRUE if in modern (or most recent) usage of the script case distinctions are customary. - * For example, Latn and Cyrl. - * - * @param script script code - * @return TRUE if the script is cased - * @stable ICU 51 - */ -U_STABLE UBool U_EXPORT2 -uscript_isCased(UScriptCode script); - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/usearch.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/usearch.h deleted file mode 100644 index 313c3b9a7d..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/usearch.h +++ /dev/null @@ -1,890 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2001-2011,2014 IBM and others. All rights reserved. -********************************************************************** -* Date Name Description -* 06/28/2001 synwee Creation. -********************************************************************** -*/ -#ifndef USEARCH_H -#define USEARCH_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION - -#include "unicode/localpointer.h" -#include "unicode/ucol.h" -#include "unicode/ucoleitr.h" -#include "unicode/ubrk.h" - -/** - * \file - * \brief C API: StringSearch - * - * C Apis for an engine that provides language-sensitive text searching based - * on the comparison rules defined in a UCollator data struct, - * see ucol.h. This ensures that language eccentricity can be - * handled, e.g. for the German collator, characters ß and SS will be matched - * if case is chosen to be ignored. - * See the - * "ICU Collation Design Document" for more information. - *

- * The implementation may use a linear search or a modified form of the Boyer-Moore - * search; for more information on the latter see - * - * "Efficient Text Searching in Java", published in Java Report - * in February, 1999. - *

- * There are 2 match options for selection:
- * Let S' be the sub-string of a text string S between the offsets start and - * end . - *
- * A pattern string P matches a text string S at the offsets - * if - *

 
- * option 1. Some canonical equivalent of P matches some canonical equivalent 
- *           of S'
- * option 2. P matches S' and if P starts or ends with a combining mark, 
- *           there exists no non-ignorable combining mark before or after S' 
- *           in S respectively. 
- * 
- * Option 2. will be the default. - *

- * This search has APIs similar to that of other text iteration mechanisms - * such as the break iterators in ubrk.h. Using these - * APIs, it is easy to scan through text looking for all occurances of - * a given pattern. This search iterator allows changing of direction by - * calling a reset followed by a next or previous. - * Though a direction change can occur without calling reset first, - * this operation comes with some speed penalty. - * Generally, match results in the forward direction will match the result - * matches in the backwards direction in the reverse order - *

- * usearch.h provides APIs to specify the starting position - * within the text string to be searched, e.g. usearch_setOffset, - * usearch_preceding and usearch_following. Since the - * starting position will be set as it is specified, please take note that - * there are some dangerous positions which the search may render incorrect - * results: - *

    - *
  • The midst of a substring that requires normalization. - *
  • If the following match is to be found, the position should not be the - * second character which requires to be swapped with the preceding - * character. Vice versa, if the preceding match is to be found, - * position to search from should not be the first character which - * requires to be swapped with the next character. E.g certain Thai and - * Lao characters require swapping. - *
  • If a following pattern match is to be found, any position within a - * contracting sequence except the first will fail. Vice versa if a - * preceding pattern match is to be found, a invalid starting point - * would be any character within a contracting sequence except the last. - *
- *

- * A breakiterator can be used if only matches at logical breaks are desired. - * Using a breakiterator will only give you results that exactly matches the - * boundaries given by the breakiterator. For instance the pattern "e" will - * not be found in the string "\u00e9" if a character break iterator is used. - *

- * Options are provided to handle overlapping matches. - * E.g. In English, overlapping matches produces the result 0 and 2 - * for the pattern "abab" in the text "ababab", where else mutually - * exclusive matches only produce the result of 0. - *

- * Options are also provided to implement "asymmetric search" as described in - * - * UTS #10 Unicode Collation Algorithm, specifically the USearchAttribute - * USEARCH_ELEMENT_COMPARISON and its values. - *

- * Though collator attributes will be taken into consideration while - * performing matches, there are no APIs here for setting and getting the - * attributes. These attributes can be set by getting the collator - * from usearch_getCollator and using the APIs in ucol.h. - * Lastly to update String Search to the new collator attributes, - * usearch_reset() has to be called. - *

- * Restriction:
- * Currently there are no composite characters that consists of a - * character with combining class > 0 before a character with combining - * class == 0. However, if such a character exists in the future, the - * search mechanism does not guarantee the results for option 1. - * - *

- * Example of use:
- *


- * char *tgtstr = "The quick brown fox jumped over the lazy fox";
- * char *patstr = "fox";
- * UChar target[64];
- * UChar pattern[16];
- * UErrorCode status = U_ZERO_ERROR;
- * u_uastrcpy(target, tgtstr);
- * u_uastrcpy(pattern, patstr);
- *
- * UStringSearch *search = usearch_open(pattern, -1, target, -1, "en_US", 
- *                                  NULL, &status);
- * if (U_SUCCESS(status)) {
- *     for (int pos = usearch_first(search, &status); 
- *          pos != USEARCH_DONE; 
- *          pos = usearch_next(search, &status))
- *     {
- *         printf("Found match at %d pos, length is %d\n", pos, 
- *                                        usearch_getMatchLength(search));
- *     }
- * }
- *
- * usearch_close(search);
- * 
- * @stable ICU 2.4 - */ - -/** -* DONE is returned by previous() and next() after all valid matches have -* been returned, and by first() and last() if there are no matches at all. -* @stable ICU 2.4 -*/ -#define USEARCH_DONE -1 - -/** -* Data structure for searching -* @stable ICU 2.4 -*/ -struct UStringSearch; -/** -* Data structure for searching -* @stable ICU 2.4 -*/ -typedef struct UStringSearch UStringSearch; - -/** -* @stable ICU 2.4 -*/ -typedef enum { - /** - * Option for overlapping matches - * @stable ICU 2.4 - */ - USEARCH_OVERLAP = 0, -#ifndef U_HIDE_DEPRECATED_API - /** - * Option for canonical matches; option 1 in header documentation. - * The default value will be USEARCH_OFF. - * Note: Setting this option to USEARCH_ON currently has no effect on - * search behavior, and this option is deprecated. Instead, to control - * canonical match behavior, you must set UCOL_NORMALIZATION_MODE - * appropriately (to UCOL_OFF or UCOL_ON) in the UCollator used by - * the UStringSearch object. - * @see usearch_openFromCollator - * @see usearch_getCollator - * @see usearch_setCollator - * @see ucol_getAttribute - * @deprecated ICU 53 - */ - USEARCH_CANONICAL_MATCH = 1, -#endif /* U_HIDE_DEPRECATED_API */ - /** - * Option to control how collation elements are compared. - * The default value will be USEARCH_STANDARD_ELEMENT_COMPARISON. - * @stable ICU 4.4 - */ - USEARCH_ELEMENT_COMPARISON = 2, - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal USearchAttribute value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - USEARCH_ATTRIBUTE_COUNT = 3 -#endif /* U_HIDE_DEPRECATED_API */ -} USearchAttribute; - -/** -* @stable ICU 2.4 -*/ -typedef enum { - /** - * Default value for any USearchAttribute - * @stable ICU 2.4 - */ - USEARCH_DEFAULT = -1, - /** - * Value for USEARCH_OVERLAP and USEARCH_CANONICAL_MATCH - * @stable ICU 2.4 - */ - USEARCH_OFF, - /** - * Value for USEARCH_OVERLAP and USEARCH_CANONICAL_MATCH - * @stable ICU 2.4 - */ - USEARCH_ON, - /** - * Value (default) for USEARCH_ELEMENT_COMPARISON; - * standard collation element comparison at the specified collator - * strength. - * @stable ICU 4.4 - */ - USEARCH_STANDARD_ELEMENT_COMPARISON, - /** - * Value for USEARCH_ELEMENT_COMPARISON; - * collation element comparison is modified to effectively provide - * behavior between the specified strength and strength - 1. Collation - * elements in the pattern that have the base weight for the specified - * strength are treated as "wildcards" that match an element with any - * other weight at that collation level in the searched text. For - * example, with a secondary-strength English collator, a plain 'e' in - * the pattern will match a plain e or an e with any diacritic in the - * searched text, but an e with diacritic in the pattern will only - * match an e with the same diacritic in the searched text. - * - * This supports "asymmetric search" as described in - * - * UTS #10 Unicode Collation Algorithm. - * - * @stable ICU 4.4 - */ - USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, - /** - * Value for USEARCH_ELEMENT_COMPARISON. - * collation element comparison is modified to effectively provide - * behavior between the specified strength and strength - 1. Collation - * elements in either the pattern or the searched text that have the - * base weight for the specified strength are treated as "wildcards" - * that match an element with any other weight at that collation level. - * For example, with a secondary-strength English collator, a plain 'e' - * in the pattern will match a plain e or an e with any diacritic in the - * searched text, but an e with diacritic in the pattern will only - * match an e with the same diacritic or a plain e in the searched text. - * - * This option is similar to "asymmetric search" as described in - * [UTS #10 Unicode Collation Algorithm](http://www.unicode.org/reports/tr10/#Asymmetric_Search), - * but also allows unmarked characters in the searched text to match - * marked or unmarked versions of that character in the pattern. - * - * @stable ICU 4.4 - */ - USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD, - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal USearchAttributeValue value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - USEARCH_ATTRIBUTE_VALUE_COUNT -#endif /* U_HIDE_DEPRECATED_API */ -} USearchAttributeValue; - -/* open and close ------------------------------------------------------ */ - -/** -* Creating a search iterator data struct using the argument locale language -* rule set. A collator will be created in the process, which will be owned by -* this search and will be deleted in usearch_close. -* @param pattern for matching -* @param patternlength length of the pattern, -1 for null-termination -* @param text text string -* @param textlength length of the text string, -1 for null-termination -* @param locale name of locale for the rules to be used -* @param breakiter A BreakIterator that will be used to restrict the points -* at which matches are detected. If a match is found, but -* the match's start or end index is not a boundary as -* determined by the BreakIterator, the match will -* be rejected and another will be searched for. -* If this parameter is NULL, no break detection is -* attempted. -* @param status for errors if it occurs. If pattern or text is NULL, or if -* patternlength or textlength is 0 then an -* U_ILLEGAL_ARGUMENT_ERROR is returned. -* @return search iterator data structure, or NULL if there is an error. -* @stable ICU 2.4 -*/ -U_STABLE UStringSearch * U_EXPORT2 usearch_open(const UChar *pattern, - int32_t patternlength, - const UChar *text, - int32_t textlength, - const char *locale, - UBreakIterator *breakiter, - UErrorCode *status); - -/** -* Creating a search iterator data struct using the argument collator language -* rule set. Note, user retains the ownership of this collator, thus the -* responsibility of deletion lies with the user. -* NOTE: string search cannot be instantiated from a collator that has -* collate digits as numbers (CODAN) turned on. -* @param pattern for matching -* @param patternlength length of the pattern, -1 for null-termination -* @param text text string -* @param textlength length of the text string, -1 for null-termination -* @param collator used for the language rules -* @param breakiter A BreakIterator that will be used to restrict the points -* at which matches are detected. If a match is found, but -* the match's start or end index is not a boundary as -* determined by the BreakIterator, the match will -* be rejected and another will be searched for. -* If this parameter is NULL, no break detection is -* attempted. -* @param status for errors if it occurs. If collator, pattern or text is NULL, -* or if patternlength or textlength is 0 then an -* U_ILLEGAL_ARGUMENT_ERROR is returned. -* @return search iterator data structure, or NULL if there is an error. -* @stable ICU 2.4 -*/ -U_STABLE UStringSearch * U_EXPORT2 usearch_openFromCollator( - const UChar *pattern, - int32_t patternlength, - const UChar *text, - int32_t textlength, - const UCollator *collator, - UBreakIterator *breakiter, - UErrorCode *status); - -/** -* Destroying and cleaning up the search iterator data struct. -* If a collator is created in usearch_open, it will be destroyed here. -* @param searchiter data struct to clean up -* @stable ICU 2.4 -*/ -U_STABLE void U_EXPORT2 usearch_close(UStringSearch *searchiter); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUStringSearchPointer - * "Smart pointer" class, closes a UStringSearch via usearch_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUStringSearchPointer, UStringSearch, usearch_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/* get and set methods -------------------------------------------------- */ - -/** -* Sets the current position in the text string which the next search will -* start from. Clears previous states. -* This method takes the argument index and sets the position in the text -* string accordingly without checking if the index is pointing to a -* valid starting point to begin searching. -* Search positions that may render incorrect results are highlighted in the -* header comments -* @param strsrch search iterator data struct -* @param position position to start next search from. If position is less -* than or greater than the text range for searching, -* an U_INDEX_OUTOFBOUNDS_ERROR will be returned -* @param status error status if any. -* @stable ICU 2.4 -*/ -U_STABLE void U_EXPORT2 usearch_setOffset(UStringSearch *strsrch, - int32_t position, - UErrorCode *status); - -/** -* Return the current index in the string text being searched. -* If the iteration has gone past the end of the text (or past the beginning -* for a backwards search), USEARCH_DONE is returned. -* @param strsrch search iterator data struct -* @see #USEARCH_DONE -* @stable ICU 2.4 -*/ -U_STABLE int32_t U_EXPORT2 usearch_getOffset(const UStringSearch *strsrch); - -/** -* Sets the text searching attributes located in the enum USearchAttribute -* with values from the enum USearchAttributeValue. -* USEARCH_DEFAULT can be used for all attributes for resetting. -* @param strsrch search iterator data struct -* @param attribute text attribute to be set -* @param value text attribute value -* @param status for errors if it occurs -* @see #usearch_getAttribute -* @stable ICU 2.4 -*/ -U_STABLE void U_EXPORT2 usearch_setAttribute(UStringSearch *strsrch, - USearchAttribute attribute, - USearchAttributeValue value, - UErrorCode *status); - -/** -* Gets the text searching attributes. -* @param strsrch search iterator data struct -* @param attribute text attribute to be retrieve -* @return text attribute value -* @see #usearch_setAttribute -* @stable ICU 2.4 -*/ -U_STABLE USearchAttributeValue U_EXPORT2 usearch_getAttribute( - const UStringSearch *strsrch, - USearchAttribute attribute); - -/** -* Returns the index to the match in the text string that was searched. -* This call returns a valid result only after a successful call to -* usearch_first, usearch_next, usearch_previous, -* or usearch_last. -* Just after construction, or after a searching method returns -* USEARCH_DONE, this method will return USEARCH_DONE. -*

-* Use usearch_getMatchedLength to get the matched string length. -* @param strsrch search iterator data struct -* @return index to a substring within the text string that is being -* searched. -* @see #usearch_first -* @see #usearch_next -* @see #usearch_previous -* @see #usearch_last -* @see #USEARCH_DONE -* @stable ICU 2.4 -*/ -U_STABLE int32_t U_EXPORT2 usearch_getMatchedStart( - const UStringSearch *strsrch); - -/** -* Returns the length of text in the string which matches the search pattern. -* This call returns a valid result only after a successful call to -* usearch_first, usearch_next, usearch_previous, -* or usearch_last. -* Just after construction, or after a searching method returns -* USEARCH_DONE, this method will return 0. -* @param strsrch search iterator data struct -* @return The length of the match in the string text, or 0 if there is no -* match currently. -* @see #usearch_first -* @see #usearch_next -* @see #usearch_previous -* @see #usearch_last -* @see #USEARCH_DONE -* @stable ICU 2.4 -*/ -U_STABLE int32_t U_EXPORT2 usearch_getMatchedLength( - const UStringSearch *strsrch); - -/** -* Returns the text that was matched by the most recent call to -* usearch_first, usearch_next, usearch_previous, -* or usearch_last. -* If the iterator is not pointing at a valid match (e.g. just after -* construction or after USEARCH_DONE has been returned, returns -* an empty string. If result is not large enough to store the matched text, -* result will be filled with the partial text and an U_BUFFER_OVERFLOW_ERROR -* will be returned in status. result will be null-terminated whenever -* possible. If the buffer fits the matched text exactly, a null-termination -* is not possible, then a U_STRING_NOT_TERMINATED_ERROR set in status. -* Pre-flighting can be either done with length = 0 or the API -* usearch_getMatchLength. -* @param strsrch search iterator data struct -* @param result UChar buffer to store the matched string -* @param resultCapacity length of the result buffer -* @param status error returned if result is not large enough -* @return exact length of the matched text, not counting the null-termination -* @see #usearch_first -* @see #usearch_next -* @see #usearch_previous -* @see #usearch_last -* @see #USEARCH_DONE -* @stable ICU 2.4 -*/ -U_STABLE int32_t U_EXPORT2 usearch_getMatchedText(const UStringSearch *strsrch, - UChar *result, - int32_t resultCapacity, - UErrorCode *status); - -#if !UCONFIG_NO_BREAK_ITERATION - -/** -* Set the BreakIterator that will be used to restrict the points at which -* matches are detected. -* @param strsrch search iterator data struct -* @param breakiter A BreakIterator that will be used to restrict the points -* at which matches are detected. If a match is found, but -* the match's start or end index is not a boundary as -* determined by the BreakIterator, the match will -* be rejected and another will be searched for. -* If this parameter is NULL, no break detection is -* attempted. -* @param status for errors if it occurs -* @see #usearch_getBreakIterator -* @stable ICU 2.4 -*/ -U_STABLE void U_EXPORT2 usearch_setBreakIterator(UStringSearch *strsrch, - UBreakIterator *breakiter, - UErrorCode *status); - -/** -* Returns the BreakIterator that is used to restrict the points at which -* matches are detected. This will be the same object that was passed to the -* constructor or to usearch_setBreakIterator. Note that -* NULL -* is a legal value; it means that break detection should not be attempted. -* @param strsrch search iterator data struct -* @return break iterator used -* @see #usearch_setBreakIterator -* @stable ICU 2.4 -*/ -U_STABLE const UBreakIterator * U_EXPORT2 usearch_getBreakIterator( - const UStringSearch *strsrch); - -#endif - -/** -* Set the string text to be searched. Text iteration will hence begin at the -* start of the text string. This method is useful if you want to re-use an -* iterator to search for the same pattern within a different body of text. -* @param strsrch search iterator data struct -* @param text new string to look for match -* @param textlength length of the new string, -1 for null-termination -* @param status for errors if it occurs. If text is NULL, or textlength is 0 -* then an U_ILLEGAL_ARGUMENT_ERROR is returned with no change -* done to strsrch. -* @see #usearch_getText -* @stable ICU 2.4 -*/ -U_STABLE void U_EXPORT2 usearch_setText( UStringSearch *strsrch, - const UChar *text, - int32_t textlength, - UErrorCode *status); - -/** -* Return the string text to be searched. -* @param strsrch search iterator data struct -* @param length returned string text length -* @return string text -* @see #usearch_setText -* @stable ICU 2.4 -*/ -U_STABLE const UChar * U_EXPORT2 usearch_getText(const UStringSearch *strsrch, - int32_t *length); - -/** -* Gets the collator used for the language rules. -*

-* Deleting the returned UCollator before calling -* usearch_close would cause the string search to fail. -* usearch_close will delete the collator if this search owns it. -* @param strsrch search iterator data struct -* @return collator -* @stable ICU 2.4 -*/ -U_STABLE UCollator * U_EXPORT2 usearch_getCollator( - const UStringSearch *strsrch); - -/** -* Sets the collator used for the language rules. User retains the ownership -* of this collator, thus the responsibility of deletion lies with the user. -* This method causes internal data such as Boyer-Moore shift tables to -* be recalculated, but the iterator's position is unchanged. -* @param strsrch search iterator data struct -* @param collator to be used -* @param status for errors if it occurs -* @stable ICU 2.4 -*/ -U_STABLE void U_EXPORT2 usearch_setCollator( UStringSearch *strsrch, - const UCollator *collator, - UErrorCode *status); - -/** -* Sets the pattern used for matching. -* Internal data like the Boyer Moore table will be recalculated, but the -* iterator's position is unchanged. -* @param strsrch search iterator data struct -* @param pattern string -* @param patternlength pattern length, -1 for null-terminated string -* @param status for errors if it occurs. If text is NULL, or textlength is 0 -* then an U_ILLEGAL_ARGUMENT_ERROR is returned with no change -* done to strsrch. -* @stable ICU 2.4 -*/ -U_STABLE void U_EXPORT2 usearch_setPattern( UStringSearch *strsrch, - const UChar *pattern, - int32_t patternlength, - UErrorCode *status); - -/** -* Gets the search pattern -* @param strsrch search iterator data struct -* @param length return length of the pattern, -1 indicates that the pattern -* is null-terminated -* @return pattern string -* @stable ICU 2.4 -*/ -U_STABLE const UChar * U_EXPORT2 usearch_getPattern( - const UStringSearch *strsrch, - int32_t *length); - -/* methods ------------------------------------------------------------- */ - -/** -* Returns the first index at which the string text matches the search -* pattern. -* The iterator is adjusted so that its current index (as returned by -* usearch_getOffset) is the match position if one was found. -* If a match is not found, USEARCH_DONE will be returned and -* the iterator will be adjusted to the index USEARCH_DONE. -* @param strsrch search iterator data struct -* @param status for errors if it occurs -* @return The character index of the first match, or -* USEARCH_DONE if there are no matches. -* @see #usearch_getOffset -* @see #USEARCH_DONE -* @stable ICU 2.4 -*/ -U_STABLE int32_t U_EXPORT2 usearch_first(UStringSearch *strsrch, - UErrorCode *status); - -/** -* Returns the first index equal or greater than position at which -* the string text -* matches the search pattern. The iterator is adjusted so that its current -* index (as returned by usearch_getOffset) is the match position if -* one was found. -* If a match is not found, USEARCH_DONE will be returned and -* the iterator will be adjusted to the index USEARCH_DONE -*

-* Search positions that may render incorrect results are highlighted in the -* header comments. If position is less than or greater than the text range -* for searching, an U_INDEX_OUTOFBOUNDS_ERROR will be returned -* @param strsrch search iterator data struct -* @param position to start the search at -* @param status for errors if it occurs -* @return The character index of the first match following pos, -* or USEARCH_DONE if there are no matches. -* @see #usearch_getOffset -* @see #USEARCH_DONE -* @stable ICU 2.4 -*/ -U_STABLE int32_t U_EXPORT2 usearch_following(UStringSearch *strsrch, - int32_t position, - UErrorCode *status); - -/** -* Returns the last index in the target text at which it matches the search -* pattern. The iterator is adjusted so that its current -* index (as returned by usearch_getOffset) is the match position if -* one was found. -* If a match is not found, USEARCH_DONE will be returned and -* the iterator will be adjusted to the index USEARCH_DONE. -* @param strsrch search iterator data struct -* @param status for errors if it occurs -* @return The index of the first match, or USEARCH_DONE if there -* are no matches. -* @see #usearch_getOffset -* @see #USEARCH_DONE -* @stable ICU 2.4 -*/ -U_STABLE int32_t U_EXPORT2 usearch_last(UStringSearch *strsrch, - UErrorCode *status); - -/** -* Returns the first index less than position at which the string text -* matches the search pattern. The iterator is adjusted so that its current -* index (as returned by usearch_getOffset) is the match position if -* one was found. -* If a match is not found, USEARCH_DONE will be returned and -* the iterator will be adjusted to the index USEARCH_DONE -*

-* Search positions that may render incorrect results are highlighted in the -* header comments. If position is less than or greater than the text range -* for searching, an U_INDEX_OUTOFBOUNDS_ERROR will be returned. -*

-* When USEARCH_OVERLAP option is off, the last index of the -* result match is always less than position. -* When USERARCH_OVERLAP is on, the result match may span across -* position. -* @param strsrch search iterator data struct -* @param position index position the search is to begin at -* @param status for errors if it occurs -* @return The character index of the first match preceding pos, -* or USEARCH_DONE if there are no matches. -* @see #usearch_getOffset -* @see #USEARCH_DONE -* @stable ICU 2.4 -*/ -U_STABLE int32_t U_EXPORT2 usearch_preceding(UStringSearch *strsrch, - int32_t position, - UErrorCode *status); - -/** -* Returns the index of the next point at which the string text matches the -* search pattern, starting from the current position. -* The iterator is adjusted so that its current -* index (as returned by usearch_getOffset) is the match position if -* one was found. -* If a match is not found, USEARCH_DONE will be returned and -* the iterator will be adjusted to the index USEARCH_DONE -* @param strsrch search iterator data struct -* @param status for errors if it occurs -* @return The index of the next match after the current position, or -* USEARCH_DONE if there are no more matches. -* @see #usearch_first -* @see #usearch_getOffset -* @see #USEARCH_DONE -* @stable ICU 2.4 -*/ -U_STABLE int32_t U_EXPORT2 usearch_next(UStringSearch *strsrch, - UErrorCode *status); - -/** -* Returns the index of the previous point at which the string text matches -* the search pattern, starting at the current position. -* The iterator is adjusted so that its current -* index (as returned by usearch_getOffset) is the match position if -* one was found. -* If a match is not found, USEARCH_DONE will be returned and -* the iterator will be adjusted to the index USEARCH_DONE -* @param strsrch search iterator data struct -* @param status for errors if it occurs -* @return The index of the previous match before the current position, -* or USEARCH_DONE if there are no more matches. -* @see #usearch_last -* @see #usearch_getOffset -* @see #USEARCH_DONE -* @stable ICU 2.4 -*/ -U_STABLE int32_t U_EXPORT2 usearch_previous(UStringSearch *strsrch, - UErrorCode *status); - -/** -* Reset the iteration. -* Search will begin at the start of the text string if a forward iteration -* is initiated before a backwards iteration. Otherwise if a backwards -* iteration is initiated before a forwards iteration, the search will begin -* at the end of the text string. -* @param strsrch search iterator data struct -* @see #usearch_first -* @stable ICU 2.4 -*/ -U_STABLE void U_EXPORT2 usearch_reset(UStringSearch *strsrch); - -#ifndef U_HIDE_INTERNAL_API -/** - * Simple forward search for the pattern, starting at a specified index, - * and using using a default set search options. - * - * This is an experimental function, and is not an official part of the - * ICU API. - * - * The collator options, such as UCOL_STRENGTH and UCOL_NORMALIZTION, are honored. - * - * The UStringSearch options USEARCH_CANONICAL_MATCH, USEARCH_OVERLAP and - * any Break Iterator are ignored. - * - * Matches obey the following constraints: - * - * Characters at the start or end positions of a match that are ignorable - * for collation are not included as part of the match, unless they - * are part of a combining sequence, as described below. - * - * A match will not include a partial combining sequence. Combining - * character sequences are considered to be inseperable units, - * and either match the pattern completely, or are considered to not match - * at all. Thus, for example, an A followed a combining accent mark will - * not be found when searching for a plain (unaccented) A. (unless - * the collation strength has been set to ignore all accents). - * - * When beginning a search, the initial starting position, startIdx, - * is assumed to be an acceptable match boundary with respect to - * combining characters. A combining sequence that spans across the - * starting point will not supress a match beginning at startIdx. - * - * Characters that expand to multiple collation elements - * (German sharp-S becoming 'ss', or the composed forms of accented - * characters, for example) also must match completely. - * Searching for a single 's' in a string containing only a sharp-s will - * find no match. - * - * - * @param strsrch the UStringSearch struct, which references both - * the text to be searched and the pattern being sought. - * @param startIdx The index into the text to begin the search. - * @param matchStart An out parameter, the starting index of the matched text. - * This parameter may be NULL. - * A value of -1 will be returned if no match was found. - * @param matchLimit Out parameter, the index of the first position following the matched text. - * The matchLimit will be at a suitable position for beginning a subsequent search - * in the input text. - * This parameter may be NULL. - * A value of -1 will be returned if no match was found. - * - * @param status Report any errors. Note that no match found is not an error. - * @return TRUE if a match was found, FALSE otherwise. - * - * @internal - */ -U_INTERNAL UBool U_EXPORT2 usearch_search(UStringSearch *strsrch, - int32_t startIdx, - int32_t *matchStart, - int32_t *matchLimit, - UErrorCode *status); - -/** - * Simple backwards search for the pattern, starting at a specified index, - * and using using a default set search options. - * - * This is an experimental function, and is not an official part of the - * ICU API. - * - * The collator options, such as UCOL_STRENGTH and UCOL_NORMALIZTION, are honored. - * - * The UStringSearch options USEARCH_CANONICAL_MATCH, USEARCH_OVERLAP and - * any Break Iterator are ignored. - * - * Matches obey the following constraints: - * - * Characters at the start or end positions of a match that are ignorable - * for collation are not included as part of the match, unless they - * are part of a combining sequence, as described below. - * - * A match will not include a partial combining sequence. Combining - * character sequences are considered to be inseperable units, - * and either match the pattern completely, or are considered to not match - * at all. Thus, for example, an A followed a combining accent mark will - * not be found when searching for a plain (unaccented) A. (unless - * the collation strength has been set to ignore all accents). - * - * When beginning a search, the initial starting position, startIdx, - * is assumed to be an acceptable match boundary with respect to - * combining characters. A combining sequence that spans across the - * starting point will not supress a match beginning at startIdx. - * - * Characters that expand to multiple collation elements - * (German sharp-S becoming 'ss', or the composed forms of accented - * characters, for example) also must match completely. - * Searching for a single 's' in a string containing only a sharp-s will - * find no match. - * - * - * @param strsrch the UStringSearch struct, which references both - * the text to be searched and the pattern being sought. - * @param startIdx The index into the text to begin the search. - * @param matchStart An out parameter, the starting index of the matched text. - * This parameter may be NULL. - * A value of -1 will be returned if no match was found. - * @param matchLimit Out parameter, the index of the first position following the matched text. - * The matchLimit will be at a suitable position for beginning a subsequent search - * in the input text. - * This parameter may be NULL. - * A value of -1 will be returned if no match was found. - * - * @param status Report any errors. Note that no match found is not an error. - * @return TRUE if a match was found, FALSE otherwise. - * - * @internal - */ -U_INTERNAL UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch, - int32_t startIdx, - int32_t *matchStart, - int32_t *matchLimit, - UErrorCode *status); -#endif /* U_HIDE_INTERNAL_API */ - -#endif /* #if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uset.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uset.h deleted file mode 100644 index bdb38e12c0..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uset.h +++ /dev/null @@ -1,1134 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2002-2014, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: uset.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2002mar07 -* created by: Markus W. Scherer -* -* C version of UnicodeSet. -*/ - - -/** - * \file - * \brief C API: Unicode Set - * - *

This is a C wrapper around the C++ UnicodeSet class.

- */ - -#ifndef __USET_H__ -#define __USET_H__ - -#include "unicode/utypes.h" -#include "unicode/uchar.h" -#include "unicode/localpointer.h" - -#ifndef USET_DEFINED - -#ifndef U_IN_DOXYGEN -#define USET_DEFINED -#endif -/** - * USet is the C API type corresponding to C++ class UnicodeSet. - * Use the uset_* API to manipulate. Create with - * uset_open*, and destroy with uset_close. - * @stable ICU 2.4 - */ -typedef struct USet USet; -#endif - -/** - * Bitmask values to be passed to uset_openPatternOptions() or - * uset_applyPattern() taking an option parameter. - * @stable ICU 2.4 - */ -enum { - /** - * Ignore white space within patterns unless quoted or escaped. - * @stable ICU 2.4 - */ - USET_IGNORE_SPACE = 1, - - /** - * Enable case insensitive matching. E.g., "[ab]" with this flag - * will match 'a', 'A', 'b', and 'B'. "[^ab]" with this flag will - * match all except 'a', 'A', 'b', and 'B'. This performs a full - * closure over case mappings, e.g. U+017F for s. - * - * The resulting set is a superset of the input for the code points but - * not for the strings. - * It performs a case mapping closure of the code points and adds - * full case folding strings for the code points, and reduces strings of - * the original set to their full case folding equivalents. - * - * This is designed for case-insensitive matches, for example - * in regular expressions. The full code point case closure allows checking of - * an input character directly against the closure set. - * Strings are matched by comparing the case-folded form from the closure - * set with an incremental case folding of the string in question. - * - * The closure set will also contain single code points if the original - * set contained case-equivalent strings (like U+00DF for "ss" or "Ss" etc.). - * This is not necessary (that is, redundant) for the above matching method - * but results in the same closure sets regardless of whether the original - * set contained the code point or a string. - * - * @stable ICU 2.4 - */ - USET_CASE_INSENSITIVE = 2, - - /** - * Enable case insensitive matching. E.g., "[ab]" with this flag - * will match 'a', 'A', 'b', and 'B'. "[^ab]" with this flag will - * match all except 'a', 'A', 'b', and 'B'. This adds the lower-, - * title-, and uppercase mappings as well as the case folding - * of each existing element in the set. - * @stable ICU 3.2 - */ - USET_ADD_CASE_MAPPINGS = 4 -}; - -/** - * Argument values for whether span() and similar functions continue while - * the current character is contained vs. not contained in the set. - * - * The functionality is straightforward for sets with only single code points, - * without strings (which is the common case): - * - USET_SPAN_CONTAINED and USET_SPAN_SIMPLE work the same. - * - USET_SPAN_CONTAINED and USET_SPAN_SIMPLE are inverses of USET_SPAN_NOT_CONTAINED. - * - span() and spanBack() partition any string the same way when - * alternating between span(USET_SPAN_NOT_CONTAINED) and - * span(either "contained" condition). - * - Using a complemented (inverted) set and the opposite span conditions - * yields the same results. - * - * When a set contains multi-code point strings, then these statements may not - * be true, depending on the strings in the set (for example, whether they - * overlap with each other) and the string that is processed. - * For a set with strings: - * - The complement of the set contains the opposite set of code points, - * but the same set of strings. - * Therefore, complementing both the set and the span conditions - * may yield different results. - * - When starting spans at different positions in a string - * (span(s, ...) vs. span(s+1, ...)) the ends of the spans may be different - * because a set string may start before the later position. - * - span(USET_SPAN_SIMPLE) may be shorter than - * span(USET_SPAN_CONTAINED) because it will not recursively try - * all possible paths. - * For example, with a set which contains the three strings "xy", "xya" and "ax", - * span("xyax", USET_SPAN_CONTAINED) will return 4 but - * span("xyax", USET_SPAN_SIMPLE) will return 3. - * span(USET_SPAN_SIMPLE) will never be longer than - * span(USET_SPAN_CONTAINED). - * - With either "contained" condition, span() and spanBack() may partition - * a string in different ways. - * For example, with a set which contains the two strings "ab" and "ba", - * and when processing the string "aba", - * span() will yield contained/not-contained boundaries of { 0, 2, 3 } - * while spanBack() will yield boundaries of { 0, 1, 3 }. - * - * Note: If it is important to get the same boundaries whether iterating forward - * or backward through a string, then either only span() should be used and - * the boundaries cached for backward operation, or an ICU BreakIterator - * could be used. - * - * Note: Unpaired surrogates are treated like surrogate code points. - * Similarly, set strings match only on code point boundaries, - * never in the middle of a surrogate pair. - * Illegal UTF-8 sequences are treated like U+FFFD. - * When processing UTF-8 strings, malformed set strings - * (strings with unpaired surrogates which cannot be converted to UTF-8) - * are ignored. - * - * @stable ICU 3.8 - */ -typedef enum USetSpanCondition { - /** - * Continues a span() while there is no set element at the current position. - * Increments by one code point at a time. - * Stops before the first set element (character or string). - * (For code points only, this is like while contains(current)==FALSE). - * - * When span() returns, the substring between where it started and the position - * it returned consists only of characters that are not in the set, - * and none of its strings overlap with the span. - * - * @stable ICU 3.8 - */ - USET_SPAN_NOT_CONTAINED = 0, - /** - * Spans the longest substring that is a concatenation of set elements (characters or strings). - * (For characters only, this is like while contains(current)==TRUE). - * - * When span() returns, the substring between where it started and the position - * it returned consists only of set elements (characters or strings) that are in the set. - * - * If a set contains strings, then the span will be the longest substring for which there - * exists at least one non-overlapping concatenation of set elements (characters or strings). - * This is equivalent to a POSIX regular expression for (OR of each set element)*. - * (Java/ICU/Perl regex stops at the first match of an OR.) - * - * @stable ICU 3.8 - */ - USET_SPAN_CONTAINED = 1, - /** - * Continues a span() while there is a set element at the current position. - * Increments by the longest matching element at each position. - * (For characters only, this is like while contains(current)==TRUE). - * - * When span() returns, the substring between where it started and the position - * it returned consists only of set elements (characters or strings) that are in the set. - * - * If a set only contains single characters, then this is the same - * as USET_SPAN_CONTAINED. - * - * If a set contains strings, then the span will be the longest substring - * with a match at each position with the longest single set element (character or string). - * - * Use this span condition together with other longest-match algorithms, - * such as ICU converters (ucnv_getUnicodeSet()). - * - * @stable ICU 3.8 - */ - USET_SPAN_SIMPLE = 2, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the last span condition. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - USET_SPAN_CONDITION_COUNT -#endif // U_HIDE_DEPRECATED_API -} USetSpanCondition; - -enum { - /** - * Capacity of USerializedSet::staticArray. - * Enough for any single-code point set. - * Also provides padding for nice sizeof(USerializedSet). - * @stable ICU 2.4 - */ - USET_SERIALIZED_STATIC_ARRAY_CAPACITY=8 -}; - -/** - * A serialized form of a Unicode set. Limited manipulations are - * possible directly on a serialized set. See below. - * @stable ICU 2.4 - */ -typedef struct USerializedSet { - /** - * The serialized Unicode Set. - * @stable ICU 2.4 - */ - const uint16_t *array; - /** - * The length of the array that contains BMP characters. - * @stable ICU 2.4 - */ - int32_t bmpLength; - /** - * The total length of the array. - * @stable ICU 2.4 - */ - int32_t length; - /** - * A small buffer for the array to reduce memory allocations. - * @stable ICU 2.4 - */ - uint16_t staticArray[USET_SERIALIZED_STATIC_ARRAY_CAPACITY]; -} USerializedSet; - -/********************************************************************* - * USet API - *********************************************************************/ - -/** - * Create an empty USet object. - * Equivalent to uset_open(1, 0). - * @return a newly created USet. The caller must call uset_close() on - * it when done. - * @stable ICU 4.2 - */ -U_STABLE USet* U_EXPORT2 -uset_openEmpty(void); - -/** - * Creates a USet object that contains the range of characters - * start..end, inclusive. If start > end - * then an empty set is created (same as using uset_openEmpty()). - * @param start first character of the range, inclusive - * @param end last character of the range, inclusive - * @return a newly created USet. The caller must call uset_close() on - * it when done. - * @stable ICU 2.4 - */ -U_STABLE USet* U_EXPORT2 -uset_open(UChar32 start, UChar32 end); - -/** - * Creates a set from the given pattern. See the UnicodeSet class - * description for the syntax of the pattern language. - * @param pattern a string specifying what characters are in the set - * @param patternLength the length of the pattern, or -1 if null - * terminated - * @param ec the error code - * @stable ICU 2.4 - */ -U_STABLE USet* U_EXPORT2 -uset_openPattern(const UChar* pattern, int32_t patternLength, - UErrorCode* ec); - -/** - * Creates a set from the given pattern. See the UnicodeSet class - * description for the syntax of the pattern language. - * @param pattern a string specifying what characters are in the set - * @param patternLength the length of the pattern, or -1 if null - * terminated - * @param options bitmask for options to apply to the pattern. - * Valid options are USET_IGNORE_SPACE and USET_CASE_INSENSITIVE. - * @param ec the error code - * @stable ICU 2.4 - */ -U_STABLE USet* U_EXPORT2 -uset_openPatternOptions(const UChar* pattern, int32_t patternLength, - uint32_t options, - UErrorCode* ec); - -/** - * Disposes of the storage used by a USet object. This function should - * be called exactly once for objects returned by uset_open(). - * @param set the object to dispose of - * @stable ICU 2.4 - */ -U_STABLE void U_EXPORT2 -uset_close(USet* set); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUSetPointer - * "Smart pointer" class, closes a USet via uset_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUSetPointer, USet, uset_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Returns a copy of this object. - * If this set is frozen, then the clone will be frozen as well. - * Use uset_cloneAsThawed() for a mutable clone of a frozen set. - * @param set the original set - * @return the newly allocated copy of the set - * @see uset_cloneAsThawed - * @stable ICU 3.8 - */ -U_STABLE USet * U_EXPORT2 -uset_clone(const USet *set); - -/** - * Determines whether the set has been frozen (made immutable) or not. - * See the ICU4J Freezable interface for details. - * @param set the set - * @return TRUE/FALSE for whether the set has been frozen - * @see uset_freeze - * @see uset_cloneAsThawed - * @stable ICU 3.8 - */ -U_STABLE UBool U_EXPORT2 -uset_isFrozen(const USet *set); - -/** - * Freeze the set (make it immutable). - * Once frozen, it cannot be unfrozen and is therefore thread-safe - * until it is deleted. - * See the ICU4J Freezable interface for details. - * Freezing the set may also make some operations faster, for example - * uset_contains() and uset_span(). - * A frozen set will not be modified. (It remains frozen.) - * @param set the set - * @return the same set, now frozen - * @see uset_isFrozen - * @see uset_cloneAsThawed - * @stable ICU 3.8 - */ -U_STABLE void U_EXPORT2 -uset_freeze(USet *set); - -/** - * Clone the set and make the clone mutable. - * See the ICU4J Freezable interface for details. - * @param set the set - * @return the mutable clone - * @see uset_freeze - * @see uset_isFrozen - * @see uset_clone - * @stable ICU 3.8 - */ -U_STABLE USet * U_EXPORT2 -uset_cloneAsThawed(const USet *set); - -/** - * Causes the USet object to represent the range start - end. - * If start > end then this USet is set to an empty range. - * A frozen set will not be modified. - * @param set the object to set to the given range - * @param start first character in the set, inclusive - * @param end last character in the set, inclusive - * @stable ICU 3.2 - */ -U_STABLE void U_EXPORT2 -uset_set(USet* set, - UChar32 start, UChar32 end); - -/** - * Modifies the set to represent the set specified by the given - * pattern. See the UnicodeSet class description for the syntax of - * the pattern language. See also the User Guide chapter about UnicodeSet. - * Empties the set passed before applying the pattern. - * A frozen set will not be modified. - * @param set The set to which the pattern is to be applied. - * @param pattern A pointer to UChar string specifying what characters are in the set. - * The character at pattern[0] must be a '['. - * @param patternLength The length of the UChar string. -1 if NUL terminated. - * @param options A bitmask for options to apply to the pattern. - * Valid options are USET_IGNORE_SPACE and USET_CASE_INSENSITIVE. - * @param status Returns an error if the pattern cannot be parsed. - * @return Upon successful parse, the value is either - * the index of the character after the closing ']' - * of the parsed pattern. - * If the status code indicates failure, then the return value - * is the index of the error in the source. - * - * @stable ICU 2.8 - */ -U_STABLE int32_t U_EXPORT2 -uset_applyPattern(USet *set, - const UChar *pattern, int32_t patternLength, - uint32_t options, - UErrorCode *status); - -/** - * Modifies the set to contain those code points which have the given value - * for the given binary or enumerated property, as returned by - * u_getIntPropertyValue. Prior contents of this set are lost. - * A frozen set will not be modified. - * - * @param set the object to contain the code points defined by the property - * - * @param prop a property in the range UCHAR_BIN_START..UCHAR_BIN_LIMIT-1 - * or UCHAR_INT_START..UCHAR_INT_LIMIT-1 - * or UCHAR_MASK_START..UCHAR_MASK_LIMIT-1. - * - * @param value a value in the range u_getIntPropertyMinValue(prop).. - * u_getIntPropertyMaxValue(prop), with one exception. If prop is - * UCHAR_GENERAL_CATEGORY_MASK, then value should not be a UCharCategory, but - * rather a mask value produced by U_GET_GC_MASK(). This allows grouped - * categories such as [:L:] to be represented. - * - * @param ec error code input/output parameter - * - * @stable ICU 3.2 - */ -U_STABLE void U_EXPORT2 -uset_applyIntPropertyValue(USet* set, - UProperty prop, int32_t value, UErrorCode* ec); - -/** - * Modifies the set to contain those code points which have the - * given value for the given property. Prior contents of this - * set are lost. - * A frozen set will not be modified. - * - * @param set the object to contain the code points defined by the given - * property and value alias - * - * @param prop a string specifying a property alias, either short or long. - * The name is matched loosely. See PropertyAliases.txt for names and a - * description of loose matching. If the value string is empty, then this - * string is interpreted as either a General_Category value alias, a Script - * value alias, a binary property alias, or a special ID. Special IDs are - * matched loosely and correspond to the following sets: - * - * "ANY" = [\\u0000-\\U0010FFFF], - * "ASCII" = [\\u0000-\\u007F], - * "Assigned" = [:^Cn:]. - * - * @param propLength the length of the prop, or -1 if NULL - * - * @param value a string specifying a value alias, either short or long. - * The name is matched loosely. See PropertyValueAliases.txt for names - * and a description of loose matching. In addition to aliases listed, - * numeric values and canonical combining classes may be expressed - * numerically, e.g., ("nv", "0.5") or ("ccc", "220"). The value string - * may also be empty. - * - * @param valueLength the length of the value, or -1 if NULL - * - * @param ec error code input/output parameter - * - * @stable ICU 3.2 - */ -U_STABLE void U_EXPORT2 -uset_applyPropertyAlias(USet* set, - const UChar *prop, int32_t propLength, - const UChar *value, int32_t valueLength, - UErrorCode* ec); - -/** - * Return true if the given position, in the given pattern, appears - * to be the start of a UnicodeSet pattern. - * - * @param pattern a string specifying the pattern - * @param patternLength the length of the pattern, or -1 if NULL - * @param pos the given position - * @stable ICU 3.2 - */ -U_STABLE UBool U_EXPORT2 -uset_resemblesPattern(const UChar *pattern, int32_t patternLength, - int32_t pos); - -/** - * Returns a string representation of this set. If the result of - * calling this function is passed to a uset_openPattern(), it - * will produce another set that is equal to this one. - * @param set the set - * @param result the string to receive the rules, may be NULL - * @param resultCapacity the capacity of result, may be 0 if result is NULL - * @param escapeUnprintable if TRUE then convert unprintable - * character to their hex escape representations, \\uxxxx or - * \\Uxxxxxxxx. Unprintable characters are those other than - * U+000A, U+0020..U+007E. - * @param ec error code. - * @return length of string, possibly larger than resultCapacity - * @stable ICU 2.4 - */ -U_STABLE int32_t U_EXPORT2 -uset_toPattern(const USet* set, - UChar* result, int32_t resultCapacity, - UBool escapeUnprintable, - UErrorCode* ec); - -/** - * Adds the given character to the given USet. After this call, - * uset_contains(set, c) will return TRUE. - * A frozen set will not be modified. - * @param set the object to which to add the character - * @param c the character to add - * @stable ICU 2.4 - */ -U_STABLE void U_EXPORT2 -uset_add(USet* set, UChar32 c); - -/** - * Adds all of the elements in the specified set to this set if - * they're not already present. This operation effectively - * modifies this set so that its value is the union of the two - * sets. The behavior of this operation is unspecified if the specified - * collection is modified while the operation is in progress. - * A frozen set will not be modified. - * - * @param set the object to which to add the set - * @param additionalSet the source set whose elements are to be added to this set. - * @stable ICU 2.6 - */ -U_STABLE void U_EXPORT2 -uset_addAll(USet* set, const USet *additionalSet); - -/** - * Adds the given range of characters to the given USet. After this call, - * uset_contains(set, start, end) will return TRUE. - * A frozen set will not be modified. - * @param set the object to which to add the character - * @param start the first character of the range to add, inclusive - * @param end the last character of the range to add, inclusive - * @stable ICU 2.2 - */ -U_STABLE void U_EXPORT2 -uset_addRange(USet* set, UChar32 start, UChar32 end); - -/** - * Adds the given string to the given USet. After this call, - * uset_containsString(set, str, strLen) will return TRUE. - * A frozen set will not be modified. - * @param set the object to which to add the character - * @param str the string to add - * @param strLen the length of the string or -1 if null terminated. - * @stable ICU 2.4 - */ -U_STABLE void U_EXPORT2 -uset_addString(USet* set, const UChar* str, int32_t strLen); - -/** - * Adds each of the characters in this string to the set. Thus "ch" => {"c", "h"} - * If this set already any particular character, it has no effect on that character. - * A frozen set will not be modified. - * @param set the object to which to add the character - * @param str the source string - * @param strLen the length of the string or -1 if null terminated. - * @stable ICU 3.4 - */ -U_STABLE void U_EXPORT2 -uset_addAllCodePoints(USet* set, const UChar *str, int32_t strLen); - -/** - * Removes the given character from the given USet. After this call, - * uset_contains(set, c) will return FALSE. - * A frozen set will not be modified. - * @param set the object from which to remove the character - * @param c the character to remove - * @stable ICU 2.4 - */ -U_STABLE void U_EXPORT2 -uset_remove(USet* set, UChar32 c); - -/** - * Removes the given range of characters from the given USet. After this call, - * uset_contains(set, start, end) will return FALSE. - * A frozen set will not be modified. - * @param set the object to which to add the character - * @param start the first character of the range to remove, inclusive - * @param end the last character of the range to remove, inclusive - * @stable ICU 2.2 - */ -U_STABLE void U_EXPORT2 -uset_removeRange(USet* set, UChar32 start, UChar32 end); - -/** - * Removes the given string to the given USet. After this call, - * uset_containsString(set, str, strLen) will return FALSE. - * A frozen set will not be modified. - * @param set the object to which to add the character - * @param str the string to remove - * @param strLen the length of the string or -1 if null terminated. - * @stable ICU 2.4 - */ -U_STABLE void U_EXPORT2 -uset_removeString(USet* set, const UChar* str, int32_t strLen); - -/** - * Removes from this set all of its elements that are contained in the - * specified set. This operation effectively modifies this - * set so that its value is the asymmetric set difference of - * the two sets. - * A frozen set will not be modified. - * @param set the object from which the elements are to be removed - * @param removeSet the object that defines which elements will be - * removed from this set - * @stable ICU 3.2 - */ -U_STABLE void U_EXPORT2 -uset_removeAll(USet* set, const USet* removeSet); - -/** - * Retain only the elements in this set that are contained in the - * specified range. If start > end then an empty range is - * retained, leaving the set empty. This is equivalent to - * a boolean logic AND, or a set INTERSECTION. - * A frozen set will not be modified. - * - * @param set the object for which to retain only the specified range - * @param start first character, inclusive, of range to be retained - * to this set. - * @param end last character, inclusive, of range to be retained - * to this set. - * @stable ICU 3.2 - */ -U_STABLE void U_EXPORT2 -uset_retain(USet* set, UChar32 start, UChar32 end); - -/** - * Retains only the elements in this set that are contained in the - * specified set. In other words, removes from this set all of - * its elements that are not contained in the specified set. This - * operation effectively modifies this set so that its value is - * the intersection of the two sets. - * A frozen set will not be modified. - * - * @param set the object on which to perform the retain - * @param retain set that defines which elements this set will retain - * @stable ICU 3.2 - */ -U_STABLE void U_EXPORT2 -uset_retainAll(USet* set, const USet* retain); - -/** - * Reallocate this objects internal structures to take up the least - * possible space, without changing this object's value. - * A frozen set will not be modified. - * - * @param set the object on which to perfrom the compact - * @stable ICU 3.2 - */ -U_STABLE void U_EXPORT2 -uset_compact(USet* set); - -/** - * Inverts this set. This operation modifies this set so that - * its value is its complement. This operation does not affect - * the multicharacter strings, if any. - * A frozen set will not be modified. - * @param set the set - * @stable ICU 2.4 - */ -U_STABLE void U_EXPORT2 -uset_complement(USet* set); - -/** - * Complements in this set all elements contained in the specified - * set. Any character in the other set will be removed if it is - * in this set, or will be added if it is not in this set. - * A frozen set will not be modified. - * - * @param set the set with which to complement - * @param complement set that defines which elements will be xor'ed - * from this set. - * @stable ICU 3.2 - */ -U_STABLE void U_EXPORT2 -uset_complementAll(USet* set, const USet* complement); - -/** - * Removes all of the elements from this set. This set will be - * empty after this call returns. - * A frozen set will not be modified. - * @param set the set - * @stable ICU 2.4 - */ -U_STABLE void U_EXPORT2 -uset_clear(USet* set); - -/** - * Close this set over the given attribute. For the attribute - * USET_CASE, the result is to modify this set so that: - * - * 1. For each character or string 'a' in this set, all strings or - * characters 'b' such that foldCase(a) == foldCase(b) are added - * to this set. - * - * 2. For each string 'e' in the resulting set, if e != - * foldCase(e), 'e' will be removed. - * - * Example: [aq\\u00DF{Bc}{bC}{Fi}] => [aAqQ\\u00DF\\uFB01{ss}{bc}{fi}] - * - * (Here foldCase(x) refers to the operation u_strFoldCase, and a - * == b denotes that the contents are the same, not pointer - * comparison.) - * - * A frozen set will not be modified. - * - * @param set the set - * - * @param attributes bitmask for attributes to close over. - * Currently only the USET_CASE bit is supported. Any undefined bits - * are ignored. - * @stable ICU 4.2 - */ -U_STABLE void U_EXPORT2 -uset_closeOver(USet* set, int32_t attributes); - -/** - * Remove all strings from this set. - * - * @param set the set - * @stable ICU 4.2 - */ -U_STABLE void U_EXPORT2 -uset_removeAllStrings(USet* set); - -/** - * Returns TRUE if the given USet contains no characters and no - * strings. - * @param set the set - * @return true if set is empty - * @stable ICU 2.4 - */ -U_STABLE UBool U_EXPORT2 -uset_isEmpty(const USet* set); - -/** - * Returns TRUE if the given USet contains the given character. - * This function works faster with a frozen set. - * @param set the set - * @param c The codepoint to check for within the set - * @return true if set contains c - * @stable ICU 2.4 - */ -U_STABLE UBool U_EXPORT2 -uset_contains(const USet* set, UChar32 c); - -/** - * Returns TRUE if the given USet contains all characters c - * where start <= c && c <= end. - * @param set the set - * @param start the first character of the range to test, inclusive - * @param end the last character of the range to test, inclusive - * @return TRUE if set contains the range - * @stable ICU 2.2 - */ -U_STABLE UBool U_EXPORT2 -uset_containsRange(const USet* set, UChar32 start, UChar32 end); - -/** - * Returns TRUE if the given USet contains the given string. - * @param set the set - * @param str the string - * @param strLen the length of the string or -1 if null terminated. - * @return true if set contains str - * @stable ICU 2.4 - */ -U_STABLE UBool U_EXPORT2 -uset_containsString(const USet* set, const UChar* str, int32_t strLen); - -/** - * Returns the index of the given character within this set, where - * the set is ordered by ascending code point. If the character - * is not in this set, return -1. The inverse of this method is - * charAt(). - * @param set the set - * @param c the character to obtain the index for - * @return an index from 0..size()-1, or -1 - * @stable ICU 3.2 - */ -U_STABLE int32_t U_EXPORT2 -uset_indexOf(const USet* set, UChar32 c); - -/** - * Returns the character at the given index within this set, where - * the set is ordered by ascending code point. If the index is - * out of range, return (UChar32)-1. The inverse of this method is - * indexOf(). - * @param set the set - * @param charIndex an index from 0..size()-1 to obtain the char for - * @return the character at the given index, or (UChar32)-1. - * @stable ICU 3.2 - */ -U_STABLE UChar32 U_EXPORT2 -uset_charAt(const USet* set, int32_t charIndex); - -/** - * Returns the number of characters and strings contained in the given - * USet. - * @param set the set - * @return a non-negative integer counting the characters and strings - * contained in set - * @stable ICU 2.4 - */ -U_STABLE int32_t U_EXPORT2 -uset_size(const USet* set); - -/** - * Returns the number of items in this set. An item is either a range - * of characters or a single multicharacter string. - * @param set the set - * @return a non-negative integer counting the character ranges - * and/or strings contained in set - * @stable ICU 2.4 - */ -U_STABLE int32_t U_EXPORT2 -uset_getItemCount(const USet* set); - -/** - * Returns an item of this set. An item is either a range of - * characters or a single multicharacter string. - * @param set the set - * @param itemIndex a non-negative integer in the range 0.. - * uset_getItemCount(set)-1 - * @param start pointer to variable to receive first character - * in range, inclusive - * @param end pointer to variable to receive last character in range, - * inclusive - * @param str buffer to receive the string, may be NULL - * @param strCapacity capacity of str, or 0 if str is NULL - * @param ec error code - * @return the length of the string (>= 2), or 0 if the item is a - * range, in which case it is the range *start..*end, or -1 if - * itemIndex is out of range - * @stable ICU 2.4 - */ -U_STABLE int32_t U_EXPORT2 -uset_getItem(const USet* set, int32_t itemIndex, - UChar32* start, UChar32* end, - UChar* str, int32_t strCapacity, - UErrorCode* ec); - -/** - * Returns true if set1 contains all the characters and strings - * of set2. It answers the question, 'Is set1 a superset of set2?' - * @param set1 set to be checked for containment - * @param set2 set to be checked for containment - * @return true if the test condition is met - * @stable ICU 3.2 - */ -U_STABLE UBool U_EXPORT2 -uset_containsAll(const USet* set1, const USet* set2); - -/** - * Returns true if this set contains all the characters - * of the given string. This is does not check containment of grapheme - * clusters, like uset_containsString. - * @param set set of characters to be checked for containment - * @param str string containing codepoints to be checked for containment - * @param strLen the length of the string or -1 if null terminated. - * @return true if the test condition is met - * @stable ICU 3.4 - */ -U_STABLE UBool U_EXPORT2 -uset_containsAllCodePoints(const USet* set, const UChar *str, int32_t strLen); - -/** - * Returns true if set1 contains none of the characters and strings - * of set2. It answers the question, 'Is set1 a disjoint set of set2?' - * @param set1 set to be checked for containment - * @param set2 set to be checked for containment - * @return true if the test condition is met - * @stable ICU 3.2 - */ -U_STABLE UBool U_EXPORT2 -uset_containsNone(const USet* set1, const USet* set2); - -/** - * Returns true if set1 contains some of the characters and strings - * of set2. It answers the question, 'Does set1 and set2 have an intersection?' - * @param set1 set to be checked for containment - * @param set2 set to be checked for containment - * @return true if the test condition is met - * @stable ICU 3.2 - */ -U_STABLE UBool U_EXPORT2 -uset_containsSome(const USet* set1, const USet* set2); - -/** - * Returns the length of the initial substring of the input string which - * consists only of characters and strings that are contained in this set - * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE), - * or only of characters and strings that are not contained - * in this set (USET_SPAN_NOT_CONTAINED). - * See USetSpanCondition for details. - * Similar to the strspn() C library function. - * Unpaired surrogates are treated according to contains() of their surrogate code points. - * This function works faster with a frozen set and with a non-negative string length argument. - * @param set the set - * @param s start of the string - * @param length of the string; can be -1 for NUL-terminated - * @param spanCondition specifies the containment condition - * @return the length of the initial substring according to the spanCondition; - * 0 if the start of the string does not fit the spanCondition - * @stable ICU 3.8 - * @see USetSpanCondition - */ -U_STABLE int32_t U_EXPORT2 -uset_span(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition); - -/** - * Returns the start of the trailing substring of the input string which - * consists only of characters and strings that are contained in this set - * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE), - * or only of characters and strings that are not contained - * in this set (USET_SPAN_NOT_CONTAINED). - * See USetSpanCondition for details. - * Unpaired surrogates are treated according to contains() of their surrogate code points. - * This function works faster with a frozen set and with a non-negative string length argument. - * @param set the set - * @param s start of the string - * @param length of the string; can be -1 for NUL-terminated - * @param spanCondition specifies the containment condition - * @return the start of the trailing substring according to the spanCondition; - * the string length if the end of the string does not fit the spanCondition - * @stable ICU 3.8 - * @see USetSpanCondition - */ -U_STABLE int32_t U_EXPORT2 -uset_spanBack(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition); - -/** - * Returns the length of the initial substring of the input string which - * consists only of characters and strings that are contained in this set - * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE), - * or only of characters and strings that are not contained - * in this set (USET_SPAN_NOT_CONTAINED). - * See USetSpanCondition for details. - * Similar to the strspn() C library function. - * Malformed byte sequences are treated according to contains(0xfffd). - * This function works faster with a frozen set and with a non-negative string length argument. - * @param set the set - * @param s start of the string (UTF-8) - * @param length of the string; can be -1 for NUL-terminated - * @param spanCondition specifies the containment condition - * @return the length of the initial substring according to the spanCondition; - * 0 if the start of the string does not fit the spanCondition - * @stable ICU 3.8 - * @see USetSpanCondition - */ -U_STABLE int32_t U_EXPORT2 -uset_spanUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition); - -/** - * Returns the start of the trailing substring of the input string which - * consists only of characters and strings that are contained in this set - * (USET_SPAN_CONTAINED, USET_SPAN_SIMPLE), - * or only of characters and strings that are not contained - * in this set (USET_SPAN_NOT_CONTAINED). - * See USetSpanCondition for details. - * Malformed byte sequences are treated according to contains(0xfffd). - * This function works faster with a frozen set and with a non-negative string length argument. - * @param set the set - * @param s start of the string (UTF-8) - * @param length of the string; can be -1 for NUL-terminated - * @param spanCondition specifies the containment condition - * @return the start of the trailing substring according to the spanCondition; - * the string length if the end of the string does not fit the spanCondition - * @stable ICU 3.8 - * @see USetSpanCondition - */ -U_STABLE int32_t U_EXPORT2 -uset_spanBackUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition); - -/** - * Returns true if set1 contains all of the characters and strings - * of set2, and vis versa. It answers the question, 'Is set1 equal to set2?' - * @param set1 set to be checked for containment - * @param set2 set to be checked for containment - * @return true if the test condition is met - * @stable ICU 3.2 - */ -U_STABLE UBool U_EXPORT2 -uset_equals(const USet* set1, const USet* set2); - -/********************************************************************* - * Serialized set API - *********************************************************************/ - -/** - * Serializes this set into an array of 16-bit integers. Serialization - * (currently) only records the characters in the set; multicharacter - * strings are ignored. - * - * The array - * has following format (each line is one 16-bit integer): - * - * length = (n+2*m) | (m!=0?0x8000:0) - * bmpLength = n; present if m!=0 - * bmp[0] - * bmp[1] - * ... - * bmp[n-1] - * supp-high[0] - * supp-low[0] - * supp-high[1] - * supp-low[1] - * ... - * supp-high[m-1] - * supp-low[m-1] - * - * The array starts with a header. After the header are n bmp - * code points, then m supplementary code points. Either n or m - * or both may be zero. n+2*m is always <= 0x7FFF. - * - * If there are no supplementary characters (if m==0) then the - * header is one 16-bit integer, 'length', with value n. - * - * If there are supplementary characters (if m!=0) then the header - * is two 16-bit integers. The first, 'length', has value - * (n+2*m)|0x8000. The second, 'bmpLength', has value n. - * - * After the header the code points are stored in ascending order. - * Supplementary code points are stored as most significant 16 - * bits followed by least significant 16 bits. - * - * @param set the set - * @param dest pointer to buffer of destCapacity 16-bit integers. - * May be NULL only if destCapacity is zero. - * @param destCapacity size of dest, or zero. Must not be negative. - * @param pErrorCode pointer to the error code. Will be set to - * U_INDEX_OUTOFBOUNDS_ERROR if n+2*m > 0x7FFF. Will be set to - * U_BUFFER_OVERFLOW_ERROR if n+2*m+(m!=0?2:1) > destCapacity. - * @return the total length of the serialized format, including - * the header, that is, n+2*m+(m!=0?2:1), or 0 on error other - * than U_BUFFER_OVERFLOW_ERROR. - * @stable ICU 2.4 - */ -U_STABLE int32_t U_EXPORT2 -uset_serialize(const USet* set, uint16_t* dest, int32_t destCapacity, UErrorCode* pErrorCode); - -/** - * Given a serialized array, fill in the given serialized set object. - * @param fillSet pointer to result - * @param src pointer to start of array - * @param srcLength length of array - * @return true if the given array is valid, otherwise false - * @stable ICU 2.4 - */ -U_STABLE UBool U_EXPORT2 -uset_getSerializedSet(USerializedSet* fillSet, const uint16_t* src, int32_t srcLength); - -/** - * Set the USerializedSet to contain the given character (and nothing - * else). - * @param fillSet pointer to result - * @param c The codepoint to set - * @stable ICU 2.4 - */ -U_STABLE void U_EXPORT2 -uset_setSerializedToOne(USerializedSet* fillSet, UChar32 c); - -/** - * Returns TRUE if the given USerializedSet contains the given - * character. - * @param set the serialized set - * @param c The codepoint to check for within the set - * @return true if set contains c - * @stable ICU 2.4 - */ -U_STABLE UBool U_EXPORT2 -uset_serializedContains(const USerializedSet* set, UChar32 c); - -/** - * Returns the number of disjoint ranges of characters contained in - * the given serialized set. Ignores any strings contained in the - * set. - * @param set the serialized set - * @return a non-negative integer counting the character ranges - * contained in set - * @stable ICU 2.4 - */ -U_STABLE int32_t U_EXPORT2 -uset_getSerializedRangeCount(const USerializedSet* set); - -/** - * Returns a range of characters contained in the given serialized - * set. - * @param set the serialized set - * @param rangeIndex a non-negative integer in the range 0.. - * uset_getSerializedRangeCount(set)-1 - * @param pStart pointer to variable to receive first character - * in range, inclusive - * @param pEnd pointer to variable to receive last character in range, - * inclusive - * @return true if rangeIndex is valid, otherwise false - * @stable ICU 2.4 - */ -U_STABLE UBool U_EXPORT2 -uset_getSerializedRange(const USerializedSet* set, int32_t rangeIndex, - UChar32* pStart, UChar32* pEnd); - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/usetiter.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/usetiter.h deleted file mode 100644 index a13867eee2..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/usetiter.h +++ /dev/null @@ -1,322 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (c) 2002-2014, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -*/ -#ifndef USETITER_H -#define USETITER_H - -#include "unicode/utypes.h" -#include "unicode/uobject.h" -#include "unicode/unistr.h" - -/** - * \file - * \brief C++ API: UnicodeSetIterator iterates over the contents of a UnicodeSet. - */ - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class UnicodeSet; -class UnicodeString; - -/** - * - * UnicodeSetIterator iterates over the contents of a UnicodeSet. It - * iterates over either code points or code point ranges. After all - * code points or ranges have been returned, it returns the - * multicharacter strings of the UnicodeSet, if any. - * - * This class is not intended to be subclassed. Consider any fields - * or methods declared as "protected" to be private. The use of - * protected in this class is an artifact of history. - * - *

To iterate over code points and strings, use a loop like this: - *

- * UnicodeSetIterator it(set);
- * while (it.next()) {
- *     processItem(it.getString());
- * }
- * 
- *

Each item in the set is accessed as a string. Set elements - * consisting of single code points are returned as strings containing - * just the one code point. - * - *

To iterate over code point ranges, instead of individual code points, - * use a loop like this: - *

- * UnicodeSetIterator it(set);
- * while (it.nextRange()) {
- *   if (it.isString()) {
- *     processString(it.getString());
- *   } else {
- *     processCodepointRange(it.getCodepoint(), it.getCodepointEnd());
- *   }
- * }
- * 
- * @author M. Davis - * @stable ICU 2.4 - */ -class U_COMMON_API UnicodeSetIterator : public UObject { - - protected: - - /** - * Value of codepoint if the iterator points to a string. - * If codepoint == IS_STRING, then examine - * string for the current iteration result. - * @stable ICU 2.4 - */ - enum { IS_STRING = -1 }; - - /** - * Current code point, or the special value IS_STRING, if - * the iterator points to a string. - * @stable ICU 2.4 - */ - UChar32 codepoint; - - /** - * When iterating over ranges using nextRange(), - * codepointEnd contains the inclusive end of the - * iteration range, if codepoint != IS_STRING. If - * iterating over code points using next(), or if - * codepoint == IS_STRING, then the value of - * codepointEnd is undefined. - * @stable ICU 2.4 - */ - UChar32 codepointEnd; - - /** - * If codepoint == IS_STRING, then string points - * to the current string. If codepoint != IS_STRING, the - * value of string is undefined. - * @stable ICU 2.4 - */ - const UnicodeString* string; - - public: - - /** - * Create an iterator over the given set. The iterator is valid - * only so long as set is valid. - * @param set set to iterate over - * @stable ICU 2.4 - */ - UnicodeSetIterator(const UnicodeSet& set); - - /** - * Create an iterator over nothing. next() and - * nextRange() return false. This is a convenience - * constructor allowing the target to be set later. - * @stable ICU 2.4 - */ - UnicodeSetIterator(); - - /** - * Destructor. - * @stable ICU 2.4 - */ - virtual ~UnicodeSetIterator(); - - /** - * Returns true if the current element is a string. If so, the - * caller can retrieve it with getString(). If this - * method returns false, the current element is a code point or - * code point range, depending on whether next() or - * nextRange() was called. - * Elements of types string and codepoint can both be retrieved - * with the function getString(). - * Elements of type codepoint can also be retrieved with - * getCodepoint(). - * For ranges, getCodepoint() returns the starting codepoint - * of the range, and getCodepointEnd() returns the end - * of the range. - * @stable ICU 2.4 - */ - inline UBool isString() const; - - /** - * Returns the current code point, if isString() returned - * false. Otherwise returns an undefined result. - * @stable ICU 2.4 - */ - inline UChar32 getCodepoint() const; - - /** - * Returns the end of the current code point range, if - * isString() returned false and nextRange() was - * called. Otherwise returns an undefined result. - * @stable ICU 2.4 - */ - inline UChar32 getCodepointEnd() const; - - /** - * Returns the current string, if isString() returned - * true. If the current iteration item is a code point, a UnicodeString - * containing that single code point is returned. - * - * Ownership of the returned string remains with the iterator. - * The string is guaranteed to remain valid only until the iterator is - * advanced to the next item, or until the iterator is deleted. - * - * @stable ICU 2.4 - */ - const UnicodeString& getString(); - - /** - * Advances the iteration position to the next element in the set, - * which can be either a single code point or a string. - * If there are no more elements in the set, return false. - * - *

- * If isString() == TRUE, the value is a - * string, otherwise the value is a - * single code point. Elements of either type can be retrieved - * with the function getString(), while elements of - * consisting of a single code point can be retrieved with - * getCodepoint() - * - *

The order of iteration is all code points in sorted order, - * followed by all strings sorted order. Do not mix - * calls to next() and nextRange() without - * calling reset() between them. The results of doing so - * are undefined. - * - * @return true if there was another element in the set. - * @stable ICU 2.4 - */ - UBool next(); - - /** - * Returns the next element in the set, either a code point range - * or a string. If there are no more elements in the set, return - * false. If isString() == TRUE, the value is a - * string and can be accessed with getString(). Otherwise the value is a - * range of one or more code points from getCodepoint() to - * getCodepointeEnd() inclusive. - * - *

The order of iteration is all code points ranges in sorted - * order, followed by all strings sorted order. Ranges are - * disjoint and non-contiguous. The value returned from getString() - * is undefined unless isString() == TRUE. Do not mix calls to - * next() and nextRange() without calling - * reset() between them. The results of doing so are - * undefined. - * - * @return true if there was another element in the set. - * @stable ICU 2.4 - */ - UBool nextRange(); - - /** - * Sets this iterator to visit the elements of the given set and - * resets it to the start of that set. The iterator is valid only - * so long as set is valid. - * @param set the set to iterate over. - * @stable ICU 2.4 - */ - void reset(const UnicodeSet& set); - - /** - * Resets this iterator to the start of the set. - * @stable ICU 2.4 - */ - void reset(); - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @stable ICU 2.4 - */ - static UClassID U_EXPORT2 getStaticClassID(); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @stable ICU 2.4 - */ - virtual UClassID getDynamicClassID() const; - - // ======================= PRIVATES =========================== - - protected: - - // endElement and nextElements are really UChar32's, but we keep - // them as signed int32_t's so we can do comparisons with - // endElement set to -1. Leave them as int32_t's. - /** The set - * @stable ICU 2.4 - */ - const UnicodeSet* set; - /** End range - * @stable ICU 2.4 - */ - int32_t endRange; - /** Range - * @stable ICU 2.4 - */ - int32_t range; - /** End element - * @stable ICU 2.4 - */ - int32_t endElement; - /** Next element - * @stable ICU 2.4 - */ - int32_t nextElement; - //UBool abbreviated; - /** Next string - * @stable ICU 2.4 - */ - int32_t nextString; - /** String count - * @stable ICU 2.4 - */ - int32_t stringCount; - - /** - * Points to the string to use when the caller asks for a - * string and the current iteration item is a code point, not a string. - * @internal - */ - UnicodeString *cpString; - - /** Copy constructor. Disallowed. - * @stable ICU 2.4 - */ - UnicodeSetIterator(const UnicodeSetIterator&); // disallow - - /** Assignment operator. Disallowed. - * @stable ICU 2.4 - */ - UnicodeSetIterator& operator=(const UnicodeSetIterator&); // disallow - - /** Load range - * @stable ICU 2.4 - */ - virtual void loadRange(int32_t range); - -}; - -inline UBool UnicodeSetIterator::isString() const { - return codepoint == (UChar32)IS_STRING; -} - -inline UChar32 UnicodeSetIterator::getCodepoint() const { - return codepoint; -} - -inline UChar32 UnicodeSetIterator::getCodepointEnd() const { - return codepointEnd; -} - - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ushape.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ushape.h deleted file mode 100644 index 78b4d027a8..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ushape.h +++ /dev/null @@ -1,476 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 2000-2012, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* file name: ushape.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2000jun29 -* created by: Markus W. Scherer -*/ - -#ifndef __USHAPE_H__ -#define __USHAPE_H__ - -#include "unicode/utypes.h" - -/** - * \file - * \brief C API: Arabic shaping - * - */ - -/** - * Shape Arabic text on a character basis. - * - *

This function performs basic operations for "shaping" Arabic text. It is most - * useful for use with legacy data formats and legacy display technology - * (simple terminals). All operations are performed on Unicode characters.

- * - *

Text-based shaping means that some character code points in the text are - * replaced by others depending on the context. It transforms one kind of text - * into another. In comparison, modern displays for Arabic text select - * appropriate, context-dependent font glyphs for each text element, which means - * that they transform text into a glyph vector.

- * - *

Text transformations are necessary when modern display technology is not - * available or when text needs to be transformed to or from legacy formats that - * use "shaped" characters. Since the Arabic script is cursive, connecting - * adjacent letters to each other, computers select images for each letter based - * on the surrounding letters. This usually results in four images per Arabic - * letter: initial, middle, final, and isolated forms. In Unicode, on the other - * hand, letters are normally stored abstract, and a display system is expected - * to select the necessary glyphs. (This makes searching and other text - * processing easier because the same letter has only one code.) It is possible - * to mimic this with text transformations because there are characters in - * Unicode that are rendered as letters with a specific shape - * (or cursive connectivity). They were included for interoperability with - * legacy systems and codepages, and for unsophisticated display systems.

- * - *

A second kind of text transformations is supported for Arabic digits: - * For compatibility with legacy codepages that only include European digits, - * it is possible to replace one set of digits by another, changing the - * character code points. These operations can be performed for either - * Arabic-Indic Digits (U+0660...U+0669) or Eastern (Extended) Arabic-Indic - * digits (U+06f0...U+06f9).

- * - *

Some replacements may result in more or fewer characters (code points). - * By default, this means that the destination buffer may receive text with a - * length different from the source length. Some legacy systems rely on the - * length of the text to be constant. They expect extra spaces to be added - * or consumed either next to the affected character or at the end of the - * text.

- * - *

For details about the available operations, see the description of the - * U_SHAPE_... options.

- * - * @param source The input text. - * - * @param sourceLength The number of UChars in source. - * - * @param dest The destination buffer that will receive the results of the - * requested operations. It may be NULL only if - * destSize is 0. The source and destination must not - * overlap. - * - * @param destSize The size (capacity) of the destination buffer in UChars. - * If destSize is 0, then no output is produced, - * but the necessary buffer size is returned ("preflighting"). - * - * @param options This is a 32-bit set of flags that specify the operations - * that are performed on the input text. If no error occurs, - * then the result will always be written to the destination - * buffer. - * - * @param pErrorCode must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * - * @return The number of UChars written to the destination buffer. - * If an error occurred, then no output was written, or it may be - * incomplete. If U_BUFFER_OVERFLOW_ERROR is set, then - * the return value indicates the necessary destination buffer size. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_shapeArabic(const UChar *source, int32_t sourceLength, - UChar *dest, int32_t destSize, - uint32_t options, - UErrorCode *pErrorCode); - -/** - * Memory option: allow the result to have a different length than the source. - * Affects: LamAlef options - * @stable ICU 2.0 - */ -#define U_SHAPE_LENGTH_GROW_SHRINK 0 - -/** - * Memory option: allow the result to have a different length than the source. - * Affects: LamAlef options - * This option is an alias to U_SHAPE_LENGTH_GROW_SHRINK - * @stable ICU 4.2 - */ -#define U_SHAPE_LAMALEF_RESIZE 0 - -/** - * Memory option: the result must have the same length as the source. - * If more room is necessary, then try to consume spaces next to modified characters. - * @stable ICU 2.0 - */ -#define U_SHAPE_LENGTH_FIXED_SPACES_NEAR 1 - -/** - * Memory option: the result must have the same length as the source. - * If more room is necessary, then try to consume spaces next to modified characters. - * Affects: LamAlef options - * This option is an alias to U_SHAPE_LENGTH_FIXED_SPACES_NEAR - * @stable ICU 4.2 - */ -#define U_SHAPE_LAMALEF_NEAR 1 - -/** - * Memory option: the result must have the same length as the source. - * If more room is necessary, then try to consume spaces at the end of the text. - * @stable ICU 2.0 - */ -#define U_SHAPE_LENGTH_FIXED_SPACES_AT_END 2 - -/** - * Memory option: the result must have the same length as the source. - * If more room is necessary, then try to consume spaces at the end of the text. - * Affects: LamAlef options - * This option is an alias to U_SHAPE_LENGTH_FIXED_SPACES_AT_END - * @stable ICU 4.2 - */ -#define U_SHAPE_LAMALEF_END 2 - -/** - * Memory option: the result must have the same length as the source. - * If more room is necessary, then try to consume spaces at the beginning of the text. - * @stable ICU 2.0 - */ -#define U_SHAPE_LENGTH_FIXED_SPACES_AT_BEGINNING 3 - -/** - * Memory option: the result must have the same length as the source. - * If more room is necessary, then try to consume spaces at the beginning of the text. - * Affects: LamAlef options - * This option is an alias to U_SHAPE_LENGTH_FIXED_SPACES_AT_BEGINNING - * @stable ICU 4.2 - */ -#define U_SHAPE_LAMALEF_BEGIN 3 - - -/** - * Memory option: the result must have the same length as the source. - * Shaping Mode: For each LAMALEF character found, expand LAMALEF using space at end. - * If there is no space at end, use spaces at beginning of the buffer. If there - * is no space at beginning of the buffer, use spaces at the near (i.e. the space - * after the LAMALEF character). - * If there are no spaces found, an error U_NO_SPACE_AVAILABLE (as defined in utypes.h) - * will be set in pErrorCode - * - * Deshaping Mode: Perform the same function as the flag equals U_SHAPE_LAMALEF_END. - * Affects: LamAlef options - * @stable ICU 4.2 - */ -#define U_SHAPE_LAMALEF_AUTO 0x10000 - -/** Bit mask for memory options. @stable ICU 2.0 */ -#define U_SHAPE_LENGTH_MASK 0x10003 /* Changed old value 3 */ - - -/** - * Bit mask for LamAlef memory options. - * @stable ICU 4.2 - */ -#define U_SHAPE_LAMALEF_MASK 0x10003 /* updated */ - -/** Direction indicator: the source is in logical (keyboard) order. @stable ICU 2.0 */ -#define U_SHAPE_TEXT_DIRECTION_LOGICAL 0 - -/** - * Direction indicator: - * the source is in visual RTL order, - * the rightmost displayed character stored first. - * This option is an alias to U_SHAPE_TEXT_DIRECTION_LOGICAL - * @stable ICU 4.2 - */ -#define U_SHAPE_TEXT_DIRECTION_VISUAL_RTL 0 - -/** - * Direction indicator: - * the source is in visual LTR order, - * the leftmost displayed character stored first. - * @stable ICU 2.0 - */ -#define U_SHAPE_TEXT_DIRECTION_VISUAL_LTR 4 - -/** Bit mask for direction indicators. @stable ICU 2.0 */ -#define U_SHAPE_TEXT_DIRECTION_MASK 4 - - -/** Letter shaping option: do not perform letter shaping. @stable ICU 2.0 */ -#define U_SHAPE_LETTERS_NOOP 0 - -/** Letter shaping option: replace abstract letter characters by "shaped" ones. @stable ICU 2.0 */ -#define U_SHAPE_LETTERS_SHAPE 8 - -/** Letter shaping option: replace "shaped" letter characters by abstract ones. @stable ICU 2.0 */ -#define U_SHAPE_LETTERS_UNSHAPE 0x10 - -/** - * Letter shaping option: replace abstract letter characters by "shaped" ones. - * The only difference with U_SHAPE_LETTERS_SHAPE is that Tashkeel letters - * are always "shaped" into the isolated form instead of the medial form - * (selecting code points from the Arabic Presentation Forms-B block). - * @stable ICU 2.0 - */ -#define U_SHAPE_LETTERS_SHAPE_TASHKEEL_ISOLATED 0x18 - - -/** Bit mask for letter shaping options. @stable ICU 2.0 */ -#define U_SHAPE_LETTERS_MASK 0x18 - - -/** Digit shaping option: do not perform digit shaping. @stable ICU 2.0 */ -#define U_SHAPE_DIGITS_NOOP 0 - -/** - * Digit shaping option: - * Replace European digits (U+0030...) by Arabic-Indic digits. - * @stable ICU 2.0 - */ -#define U_SHAPE_DIGITS_EN2AN 0x20 - -/** - * Digit shaping option: - * Replace Arabic-Indic digits by European digits (U+0030...). - * @stable ICU 2.0 - */ -#define U_SHAPE_DIGITS_AN2EN 0x40 - -/** - * Digit shaping option: - * Replace European digits (U+0030...) by Arabic-Indic digits if the most recent - * strongly directional character is an Arabic letter - * (u_charDirection() result U_RIGHT_TO_LEFT_ARABIC [AL]).
- * The direction of "preceding" depends on the direction indicator option. - * For the first characters, the preceding strongly directional character - * (initial state) is assumed to be not an Arabic letter - * (it is U_LEFT_TO_RIGHT [L] or U_RIGHT_TO_LEFT [R]). - * @stable ICU 2.0 - */ -#define U_SHAPE_DIGITS_ALEN2AN_INIT_LR 0x60 - -/** - * Digit shaping option: - * Replace European digits (U+0030...) by Arabic-Indic digits if the most recent - * strongly directional character is an Arabic letter - * (u_charDirection() result U_RIGHT_TO_LEFT_ARABIC [AL]).
- * The direction of "preceding" depends on the direction indicator option. - * For the first characters, the preceding strongly directional character - * (initial state) is assumed to be an Arabic letter. - * @stable ICU 2.0 - */ -#define U_SHAPE_DIGITS_ALEN2AN_INIT_AL 0x80 - -/** Not a valid option value. May be replaced by a new option. @stable ICU 2.0 */ -#define U_SHAPE_DIGITS_RESERVED 0xa0 - -/** Bit mask for digit shaping options. @stable ICU 2.0 */ -#define U_SHAPE_DIGITS_MASK 0xe0 - - -/** Digit type option: Use Arabic-Indic digits (U+0660...U+0669). @stable ICU 2.0 */ -#define U_SHAPE_DIGIT_TYPE_AN 0 - -/** Digit type option: Use Eastern (Extended) Arabic-Indic digits (U+06f0...U+06f9). @stable ICU 2.0 */ -#define U_SHAPE_DIGIT_TYPE_AN_EXTENDED 0x100 - -/** Not a valid option value. May be replaced by a new option. @stable ICU 2.0 */ -#define U_SHAPE_DIGIT_TYPE_RESERVED 0x200 - -/** Bit mask for digit type options. @stable ICU 2.0 */ -#define U_SHAPE_DIGIT_TYPE_MASK 0x300 /* I need to change this from 0x3f00 to 0x300 */ - -/** - * Tashkeel aggregation option: - * Replaces any combination of U+0651 with one of - * U+064C, U+064D, U+064E, U+064F, U+0650 with - * U+FC5E, U+FC5F, U+FC60, U+FC61, U+FC62 consecutively. - * @stable ICU 3.6 - */ -#define U_SHAPE_AGGREGATE_TASHKEEL 0x4000 -/** Tashkeel aggregation option: do not aggregate tashkeels. @stable ICU 3.6 */ -#define U_SHAPE_AGGREGATE_TASHKEEL_NOOP 0 -/** Bit mask for tashkeel aggregation. @stable ICU 3.6 */ -#define U_SHAPE_AGGREGATE_TASHKEEL_MASK 0x4000 - -/** - * Presentation form option: - * Don't replace Arabic Presentation Forms-A and Arabic Presentation Forms-B - * characters with 0+06xx characters, before shaping. - * @stable ICU 3.6 - */ -#define U_SHAPE_PRESERVE_PRESENTATION 0x8000 -/** Presentation form option: - * Replace Arabic Presentation Forms-A and Arabic Presentationo Forms-B with - * their unshaped correspondants in range 0+06xx, before shaping. - * @stable ICU 3.6 - */ -#define U_SHAPE_PRESERVE_PRESENTATION_NOOP 0 -/** Bit mask for preserve presentation form. @stable ICU 3.6 */ -#define U_SHAPE_PRESERVE_PRESENTATION_MASK 0x8000 - -/* Seen Tail option */ -/** - * Memory option: the result must have the same length as the source. - * Shaping mode: The SEEN family character will expand into two characters using space near - * the SEEN family character(i.e. the space after the character). - * If there are no spaces found, an error U_NO_SPACE_AVAILABLE (as defined in utypes.h) - * will be set in pErrorCode - * - * De-shaping mode: Any Seen character followed by Tail character will be - * replaced by one cell Seen and a space will replace the Tail. - * Affects: Seen options - * @stable ICU 4.2 - */ -#define U_SHAPE_SEEN_TWOCELL_NEAR 0x200000 - -/** - * Bit mask for Seen memory options. - * @stable ICU 4.2 - */ -#define U_SHAPE_SEEN_MASK 0x700000 - -/* YehHamza option */ -/** - * Memory option: the result must have the same length as the source. - * Shaping mode: The YEHHAMZA character will expand into two characters using space near it - * (i.e. the space after the character - * If there are no spaces found, an error U_NO_SPACE_AVAILABLE (as defined in utypes.h) - * will be set in pErrorCode - * - * De-shaping mode: Any Yeh (final or isolated) character followed by Hamza character will be - * replaced by one cell YehHamza and space will replace the Hamza. - * Affects: YehHamza options - * @stable ICU 4.2 - */ -#define U_SHAPE_YEHHAMZA_TWOCELL_NEAR 0x1000000 - - -/** - * Bit mask for YehHamza memory options. - * @stable ICU 4.2 - */ -#define U_SHAPE_YEHHAMZA_MASK 0x3800000 - -/* New Tashkeel options */ -/** - * Memory option: the result must have the same length as the source. - * Shaping mode: Tashkeel characters will be replaced by spaces. - * Spaces will be placed at beginning of the buffer - * - * De-shaping mode: N/A - * Affects: Tashkeel options - * @stable ICU 4.2 - */ -#define U_SHAPE_TASHKEEL_BEGIN 0x40000 - -/** - * Memory option: the result must have the same length as the source. - * Shaping mode: Tashkeel characters will be replaced by spaces. - * Spaces will be placed at end of the buffer - * - * De-shaping mode: N/A - * Affects: Tashkeel options - * @stable ICU 4.2 - */ -#define U_SHAPE_TASHKEEL_END 0x60000 - -/** - * Memory option: allow the result to have a different length than the source. - * Shaping mode: Tashkeel characters will be removed, buffer length will shrink. - * De-shaping mode: N/A - * - * Affect: Tashkeel options - * @stable ICU 4.2 - */ -#define U_SHAPE_TASHKEEL_RESIZE 0x80000 - -/** - * Memory option: the result must have the same length as the source. - * Shaping mode: Tashkeel characters will be replaced by Tatweel if it is connected to adjacent - * characters (i.e. shaped on Tatweel) or replaced by space if it is not connected. - * - * De-shaping mode: N/A - * Affects: YehHamza options - * @stable ICU 4.2 - */ -#define U_SHAPE_TASHKEEL_REPLACE_BY_TATWEEL 0xC0000 - -/** - * Bit mask for Tashkeel replacement with Space or Tatweel memory options. - * @stable ICU 4.2 - */ -#define U_SHAPE_TASHKEEL_MASK 0xE0000 - - -/* Space location Control options */ -/** - * This option affect the meaning of BEGIN and END options. if this option is not used the default - * for BEGIN and END will be as following: - * The Default (for both Visual LTR, Visual RTL and Logical Text) - * 1. BEGIN always refers to the start address of physical memory. - * 2. END always refers to the end address of physical memory. - * - * If this option is used it will swap the meaning of BEGIN and END only for Visual LTR text. - * - * The effect on BEGIN and END Memory Options will be as following: - * A. BEGIN For Visual LTR text: This will be the beginning (right side) of the visual text( - * corresponding to the physical memory address end for Visual LTR text, Same as END in - * default behavior) - * B. BEGIN For Logical text: Same as BEGIN in default behavior. - * C. END For Visual LTR text: This will be the end (left side) of the visual text (corresponding - * to the physical memory address beginning for Visual LTR text, Same as BEGIN in default behavior. - * D. END For Logical text: Same as END in default behavior). - * Affects: All LamAlef BEGIN, END and AUTO options. - * @stable ICU 4.2 - */ -#define U_SHAPE_SPACES_RELATIVE_TO_TEXT_BEGIN_END 0x4000000 - -/** - * Bit mask for swapping BEGIN and END for Visual LTR text - * @stable ICU 4.2 - */ -#define U_SHAPE_SPACES_RELATIVE_TO_TEXT_MASK 0x4000000 - -/** - * If this option is used, shaping will use the new Unicode code point for TAIL (i.e. 0xFE73). - * If this option is not specified (Default), old unofficial Unicode TAIL code point is used (i.e. 0x200B) - * De-shaping will not use this option as it will always search for both the new Unicode code point for the - * TAIL (i.e. 0xFE73) or the old unofficial Unicode TAIL code point (i.e. 0x200B) and de-shape the - * Seen-Family letter accordingly. - * - * Shaping Mode: Only shaping. - * De-shaping Mode: N/A. - * Affects: All Seen options - * @stable ICU 4.8 - */ -#define U_SHAPE_TAIL_NEW_UNICODE 0x8000000 - -/** - * Bit mask for new Unicode Tail option - * @stable ICU 4.8 - */ -#define U_SHAPE_TAIL_TYPE_MASK 0x8000000 - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uspoof.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uspoof.h deleted file mode 100644 index b27a14237a..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uspoof.h +++ /dev/null @@ -1,1592 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -*************************************************************************** -* Copyright (C) 2008-2016, International Business Machines Corporation -* and others. All Rights Reserved. -*************************************************************************** -* file name: uspoof.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2008Feb13 -* created by: Andy Heninger -* -* Unicode Spoof Detection -*/ - -#ifndef USPOOF_H -#define USPOOF_H - -#include "unicode/utypes.h" -#include "unicode/uset.h" -#include "unicode/parseerr.h" -#include "unicode/localpointer.h" - -#if !UCONFIG_NO_NORMALIZATION - - -#if U_SHOW_CPLUSPLUS_API -#include "unicode/unistr.h" -#include "unicode/uniset.h" -#endif // U_SHOW_CPLUSPLUS_API - - -/** - * \file - * \brief Unicode Security and Spoofing Detection, C API. - * - *

- * This class, based on Unicode Technical Report #36 and - * Unicode Technical Standard #39, has two main functions: - * - *

    - *
  1. Checking whether two strings are visually confusable with each other, such as "Harvest" and - * "Ηarvest", where the second string starts with the Greek capital letter Eta.
  2. - *
  3. Checking whether an individual string is likely to be an attempt at confusing the reader (spoof - * detection), such as "paypal" with some Latin characters substituted with Cyrillic look-alikes.
  4. - *
- * - *

- * Although originally designed as a method for flagging suspicious identifier strings such as URLs, - * USpoofChecker has a number of other practical use cases, such as preventing attempts to evade bad-word - * content filters. - * - *

- * The functions of this class are exposed as C API, with a handful of syntactical conveniences for C++. - * - *

Confusables

- * - *

- * The following example shows how to use USpoofChecker to check for confusability between two strings: - * - * \code{.c} - * UErrorCode status = U_ZERO_ERROR; - * UChar* str1 = (UChar*) u"Harvest"; - * UChar* str2 = (UChar*) u"\u0397arvest"; // with U+0397 GREEK CAPITAL LETTER ETA - * - * USpoofChecker* sc = uspoof_open(&status); - * uspoof_setChecks(sc, USPOOF_CONFUSABLE, &status); - * - * int32_t bitmask = uspoof_areConfusable(sc, str1, -1, str2, -1, &status); - * UBool result = bitmask != 0; - * // areConfusable: 1 (status: U_ZERO_ERROR) - * printf("areConfusable: %d (status: %s)\n", result, u_errorName(status)); - * uspoof_close(sc); - * \endcode - * - *

- * The call to {@link uspoof_open} creates a USpoofChecker object; the call to {@link uspoof_setChecks} - * enables confusable checking and disables all other checks; the call to {@link uspoof_areConfusable} performs the - * confusability test; and the following line extracts the result out of the return value. For best performance, - * the instance should be created once (e.g., upon application startup), and the efficient - * {@link uspoof_areConfusable} method can be used at runtime. - * - *

- * The type {@link LocalUSpoofCheckerPointer} is exposed for C++ programmers. It will automatically call - * {@link uspoof_close} when the object goes out of scope: - * - * \code{.cpp} - * UErrorCode status = U_ZERO_ERROR; - * LocalUSpoofCheckerPointer sc(uspoof_open(&status)); - * uspoof_setChecks(sc.getAlias(), USPOOF_CONFUSABLE, &status); - * // ... - * \endcode - * - * UTS 39 defines two strings to be confusable if they map to the same skeleton string. A skeleton can - * be thought of as a "hash code". {@link uspoof_getSkeleton} computes the skeleton for a particular string, so - * the following snippet is equivalent to the example above: - * - * \code{.c} - * UErrorCode status = U_ZERO_ERROR; - * UChar* str1 = (UChar*) u"Harvest"; - * UChar* str2 = (UChar*) u"\u0397arvest"; // with U+0397 GREEK CAPITAL LETTER ETA - * - * USpoofChecker* sc = uspoof_open(&status); - * uspoof_setChecks(sc, USPOOF_CONFUSABLE, &status); - * - * // Get skeleton 1 - * int32_t skel1Len = uspoof_getSkeleton(sc, 0, str1, -1, NULL, 0, &status); - * UChar* skel1 = (UChar*) malloc(++skel1Len * sizeof(UChar)); - * status = U_ZERO_ERROR; - * uspoof_getSkeleton(sc, 0, str1, -1, skel1, skel1Len, &status); - * - * // Get skeleton 2 - * int32_t skel2Len = uspoof_getSkeleton(sc, 0, str2, -1, NULL, 0, &status); - * UChar* skel2 = (UChar*) malloc(++skel2Len * sizeof(UChar)); - * status = U_ZERO_ERROR; - * uspoof_getSkeleton(sc, 0, str2, -1, skel2, skel2Len, &status); - * - * // Are the skeletons the same? - * UBool result = u_strcmp(skel1, skel2) == 0; - * // areConfusable: 1 (status: U_ZERO_ERROR) - * printf("areConfusable: %d (status: %s)\n", result, u_errorName(status)); - * uspoof_close(sc); - * free(skel1); - * free(skel2); - * \endcode - * - * If you need to check if a string is confusable with any string in a dictionary of many strings, rather than calling - * {@link uspoof_areConfusable} many times in a loop, {@link uspoof_getSkeleton} can be used instead, as shown below: - * - * \code{.c} - * UErrorCode status = U_ZERO_ERROR; - * #define DICTIONARY_LENGTH 2 - * UChar* dictionary[DICTIONARY_LENGTH] = { (UChar*) u"lorem", (UChar*) u"ipsum" }; - * UChar* skeletons[DICTIONARY_LENGTH]; - * UChar* str = (UChar*) u"1orern"; - * - * // Setup: - * USpoofChecker* sc = uspoof_open(&status); - * uspoof_setChecks(sc, USPOOF_CONFUSABLE, &status); - * for (size_t i=0; iNote: Since the Unicode confusables mapping table is frequently updated, confusable skeletons are not - * guaranteed to be the same between ICU releases. We therefore recommend that you always compute confusable skeletons - * at runtime and do not rely on creating a permanent, or difficult to update, database of skeletons. - * - *

Spoof Detection

- * - * The following snippet shows a minimal example of using USpoofChecker to perform spoof detection on a - * string: - * - * \code{.c} - * UErrorCode status = U_ZERO_ERROR; - * UChar* str = (UChar*) u"p\u0430ypal"; // with U+0430 CYRILLIC SMALL LETTER A - * - * // Get the default set of allowable characters: - * USet* allowed = uset_openEmpty(); - * uset_addAll(allowed, uspoof_getRecommendedSet(&status)); - * uset_addAll(allowed, uspoof_getInclusionSet(&status)); - * - * USpoofChecker* sc = uspoof_open(&status); - * uspoof_setAllowedChars(sc, allowed, &status); - * uspoof_setRestrictionLevel(sc, USPOOF_MODERATELY_RESTRICTIVE); - * - * int32_t bitmask = uspoof_check(sc, str, -1, NULL, &status); - * UBool result = bitmask != 0; - * // fails checks: 1 (status: U_ZERO_ERROR) - * printf("fails checks: %d (status: %s)\n", result, u_errorName(status)); - * uspoof_close(sc); - * uset_close(allowed); - * \endcode - * - * As in the case for confusability checking, it is good practice to create one USpoofChecker instance at - * startup, and call the cheaper {@link uspoof_check} online. We specify the set of - * allowed characters to be those with type RECOMMENDED or INCLUSION, according to the recommendation in UTS 39. - * - * In addition to {@link uspoof_check}, the function {@link uspoof_checkUTF8} is exposed for UTF8-encoded char* strings, - * and {@link uspoof_checkUnicodeString} is exposed for C++ programmers. - * - * If the {@link USPOOF_AUX_INFO} check is enabled, a limited amount of information on why a string failed the checks - * is available in the returned bitmask. For complete information, use the {@link uspoof_check2} class of functions - * with a {@link USpoofCheckResult} parameter: - * - * \code{.c} - * UErrorCode status = U_ZERO_ERROR; - * UChar* str = (UChar*) u"p\u0430ypal"; // with U+0430 CYRILLIC SMALL LETTER A - * - * // Get the default set of allowable characters: - * USet* allowed = uset_openEmpty(); - * uset_addAll(allowed, uspoof_getRecommendedSet(&status)); - * uset_addAll(allowed, uspoof_getInclusionSet(&status)); - * - * USpoofChecker* sc = uspoof_open(&status); - * uspoof_setAllowedChars(sc, allowed, &status); - * uspoof_setRestrictionLevel(sc, USPOOF_MODERATELY_RESTRICTIVE); - * - * USpoofCheckResult* checkResult = uspoof_openCheckResult(&status); - * int32_t bitmask = uspoof_check2(sc, str, -1, checkResult, &status); - * - * int32_t failures1 = bitmask; - * int32_t failures2 = uspoof_getCheckResultChecks(checkResult, &status); - * assert(failures1 == failures2); - * // checks that failed: 0x00000010 (status: U_ZERO_ERROR) - * printf("checks that failed: %#010x (status: %s)\n", failures1, u_errorName(status)); - * - * // Cleanup: - * uspoof_close(sc); - * uset_close(allowed); - * uspoof_closeCheckResult(checkResult); - * \endcode - * - * C++ users can take advantage of a few syntactical conveniences. The following snippet is functionally - * equivalent to the one above: - * - * \code{.cpp} - * UErrorCode status = U_ZERO_ERROR; - * UnicodeString str((UChar*) u"p\u0430ypal"); // with U+0430 CYRILLIC SMALL LETTER A - * - * // Get the default set of allowable characters: - * UnicodeSet allowed; - * allowed.addAll(*uspoof_getRecommendedUnicodeSet(&status)); - * allowed.addAll(*uspoof_getInclusionUnicodeSet(&status)); - * - * LocalUSpoofCheckerPointer sc(uspoof_open(&status)); - * uspoof_setAllowedChars(sc.getAlias(), allowed.toUSet(), &status); - * uspoof_setRestrictionLevel(sc.getAlias(), USPOOF_MODERATELY_RESTRICTIVE); - * - * LocalUSpoofCheckResultPointer checkResult(uspoof_openCheckResult(&status)); - * int32_t bitmask = uspoof_check2UnicodeString(sc.getAlias(), str, checkResult.getAlias(), &status); - * - * int32_t failures1 = bitmask; - * int32_t failures2 = uspoof_getCheckResultChecks(checkResult.getAlias(), &status); - * assert(failures1 == failures2); - * // checks that failed: 0x00000010 (status: U_ZERO_ERROR) - * printf("checks that failed: %#010x (status: %s)\n", failures1, u_errorName(status)); - * - * // Explicit cleanup not necessary. - * \endcode - * - * The return value is a bitmask of the checks that failed. In this case, there was one check that failed: - * {@link USPOOF_RESTRICTION_LEVEL}, corresponding to the fifth bit (16). The possible checks are: - * - *
    - *
  • RESTRICTION_LEVEL: flags strings that violate the - * Restriction Level test as specified in UTS - * 39; in most cases, this means flagging strings that contain characters from multiple different scripts.
  • - *
  • INVISIBLE: flags strings that contain invisible characters, such as zero-width spaces, or character - * sequences that are likely not to display, such as multiple occurrences of the same non-spacing mark.
  • - *
  • CHAR_LIMIT: flags strings that contain characters outside of a specified set of acceptable - * characters. See {@link uspoof_setAllowedChars} and {@link uspoof_setAllowedLocales}.
  • - *
  • MIXED_NUMBERS: flags strings that contain digits from multiple different numbering systems.
  • - *
- * - *

- * These checks can be enabled independently of each other. For example, if you were interested in checking for only the - * INVISIBLE and MIXED_NUMBERS conditions, you could do: - * - * \code{.c} - * UErrorCode status = U_ZERO_ERROR; - * UChar* str = (UChar*) u"8\u09EA"; // 8 mixed with U+09EA BENGALI DIGIT FOUR - * - * USpoofChecker* sc = uspoof_open(&status); - * uspoof_setChecks(sc, USPOOF_INVISIBLE | USPOOF_MIXED_NUMBERS, &status); - * - * int32_t bitmask = uspoof_check2(sc, str, -1, NULL, &status); - * UBool result = bitmask != 0; - * // fails checks: 1 (status: U_ZERO_ERROR) - * printf("fails checks: %d (status: %s)\n", result, u_errorName(status)); - * uspoof_close(sc); - * \endcode - * - * Here is an example in C++ showing how to compute the restriction level of a string: - * - * \code{.cpp} - * UErrorCode status = U_ZERO_ERROR; - * UnicodeString str((UChar*) u"p\u0430ypal"); // with U+0430 CYRILLIC SMALL LETTER A - * - * // Get the default set of allowable characters: - * UnicodeSet allowed; - * allowed.addAll(*uspoof_getRecommendedUnicodeSet(&status)); - * allowed.addAll(*uspoof_getInclusionUnicodeSet(&status)); - * - * LocalUSpoofCheckerPointer sc(uspoof_open(&status)); - * uspoof_setAllowedChars(sc.getAlias(), allowed.toUSet(), &status); - * uspoof_setRestrictionLevel(sc.getAlias(), USPOOF_MODERATELY_RESTRICTIVE); - * uspoof_setChecks(sc.getAlias(), USPOOF_RESTRICTION_LEVEL | USPOOF_AUX_INFO, &status); - * - * LocalUSpoofCheckResultPointer checkResult(uspoof_openCheckResult(&status)); - * int32_t bitmask = uspoof_check2UnicodeString(sc.getAlias(), str, checkResult.getAlias(), &status); - * - * URestrictionLevel restrictionLevel = uspoof_getCheckResultRestrictionLevel(checkResult.getAlias(), &status); - * // Since USPOOF_AUX_INFO was enabled, the restriction level is also available in the upper bits of the bitmask: - * assert((restrictionLevel & bitmask) == restrictionLevel); - * // Restriction level: 0x50000000 (status: U_ZERO_ERROR) - * printf("Restriction level: %#010x (status: %s)\n", restrictionLevel, u_errorName(status)); - * \endcode - * - * The code '0x50000000' corresponds to the restriction level USPOOF_MINIMALLY_RESTRICTIVE. Since - * USPOOF_MINIMALLY_RESTRICTIVE is weaker than USPOOF_MODERATELY_RESTRICTIVE, the string fails the check. - * - * Note: The Restriction Level is the most powerful of the checks. The full logic is documented in - * UTS 39, but the basic idea is that strings - * are restricted to contain characters from only a single script, except that most scripts are allowed to have - * Latin characters interspersed. Although the default restriction level is HIGHLY_RESTRICTIVE, it is - * recommended that users set their restriction level to MODERATELY_RESTRICTIVE, which allows Latin mixed - * with all other scripts except Cyrillic, Greek, and Cherokee, with which it is often confusable. For more details on - * the levels, see UTS 39 or {@link URestrictionLevel}. The Restriction Level test is aware of the set of - * allowed characters set in {@link uspoof_setAllowedChars}. Note that characters which have script code - * COMMON or INHERITED, such as numbers and punctuation, are ignored when computing whether a string has multiple - * scripts. - * - *

Additional Information

- * - * A USpoofChecker instance may be used repeatedly to perform checks on any number of identifiers. - * - * Thread Safety: The test functions for checking a single identifier, or for testing whether - * two identifiers are possible confusable, are thread safe. They may called concurrently, from multiple threads, - * using the same USpoofChecker instance. - * - * More generally, the standard ICU thread safety rules apply: functions that take a const USpoofChecker parameter are - * thread safe. Those that take a non-const USpoofChecker are not thread safe.. - * - * @stable ICU 4.6 - */ - -struct USpoofChecker; -/** - * @stable ICU 4.2 - */ -typedef struct USpoofChecker USpoofChecker; /**< typedef for C of USpoofChecker */ - -struct USpoofCheckResult; -/** - * @see uspoof_openCheckResult - * @stable ICU 58 - */ -typedef struct USpoofCheckResult USpoofCheckResult; - -/** - * Enum for the kinds of checks that USpoofChecker can perform. - * These enum values are used both to select the set of checks that - * will be performed, and to report results from the check function. - * - * @stable ICU 4.2 - */ -typedef enum USpoofChecks { - /** - * When performing the two-string {@link uspoof_areConfusable} test, this flag in the return value indicates - * that the two strings are visually confusable and that they are from the same script, according to UTS 39 section - * 4. - * - * @see uspoof_areConfusable - * @stable ICU 4.2 - */ - USPOOF_SINGLE_SCRIPT_CONFUSABLE = 1, - - /** - * When performing the two-string {@link uspoof_areConfusable} test, this flag in the return value indicates - * that the two strings are visually confusable and that they are not from the same script, according to UTS - * 39 section 4. - * - * @see uspoof_areConfusable - * @stable ICU 4.2 - */ - USPOOF_MIXED_SCRIPT_CONFUSABLE = 2, - - /** - * When performing the two-string {@link uspoof_areConfusable} test, this flag in the return value indicates - * that the two strings are visually confusable and that they are not from the same script but both of them are - * single-script strings, according to UTS 39 section 4. - * - * @see uspoof_areConfusable - * @stable ICU 4.2 - */ - USPOOF_WHOLE_SCRIPT_CONFUSABLE = 4, - - /** - * Enable this flag in {@link uspoof_setChecks} to turn on all types of confusables. You may set - * the checks to some subset of SINGLE_SCRIPT_CONFUSABLE, MIXED_SCRIPT_CONFUSABLE, or WHOLE_SCRIPT_CONFUSABLE to - * make {@link uspoof_areConfusable} return only those types of confusables. - * - * @see uspoof_areConfusable - * @see uspoof_getSkeleton - * @stable ICU 58 - */ - USPOOF_CONFUSABLE = USPOOF_SINGLE_SCRIPT_CONFUSABLE | USPOOF_MIXED_SCRIPT_CONFUSABLE | USPOOF_WHOLE_SCRIPT_CONFUSABLE, - -#ifndef U_HIDE_DEPRECATED_API - /** - * This flag is deprecated and no longer affects the behavior of SpoofChecker. - * - * @deprecated ICU 58 Any case confusable mappings were removed from UTS 39; the corresponding ICU API was deprecated. - */ - USPOOF_ANY_CASE = 8, -#endif /* U_HIDE_DEPRECATED_API */ - - /** - * Check that an identifier is no looser than the specified RestrictionLevel. - * The default if {@link uspoof_setRestrictionLevel} is not called is HIGHLY_RESTRICTIVE. - * - * If USPOOF_AUX_INFO is enabled the actual restriction level of the - * identifier being tested will also be returned by uspoof_check(). - * - * @see URestrictionLevel - * @see uspoof_setRestrictionLevel - * @see USPOOF_AUX_INFO - * - * @stable ICU 51 - */ - USPOOF_RESTRICTION_LEVEL = 16, - -#ifndef U_HIDE_DEPRECATED_API - /** Check that an identifier contains only characters from a - * single script (plus chars from the common and inherited scripts.) - * Applies to checks of a single identifier check only. - * @deprecated ICU 51 Use RESTRICTION_LEVEL instead. - */ - USPOOF_SINGLE_SCRIPT = USPOOF_RESTRICTION_LEVEL, -#endif /* U_HIDE_DEPRECATED_API */ - - /** Check an identifier for the presence of invisible characters, - * such as zero-width spaces, or character sequences that are - * likely not to display, such as multiple occurrences of the same - * non-spacing mark. This check does not test the input string as a whole - * for conformance to any particular syntax for identifiers. - */ - USPOOF_INVISIBLE = 32, - - /** Check that an identifier contains only characters from a specified set - * of acceptable characters. See {@link uspoof_setAllowedChars} and - * {@link uspoof_setAllowedLocales}. Note that a string that fails this check - * will also fail the {@link USPOOF_RESTRICTION_LEVEL} check. - */ - USPOOF_CHAR_LIMIT = 64, - - /** - * Check that an identifier does not mix numbers from different numbering systems. - * For more information, see UTS 39 section 5.3. - * - * @stable ICU 51 - */ - USPOOF_MIXED_NUMBERS = 128, - -#ifndef U_HIDE_DRAFT_API - /** - * Check that an identifier does not have a combining character following a character in which that - * combining character would be hidden; for example 'i' followed by a U+0307 combining dot. - * - * More specifically, the following characters are forbidden from preceding a U+0307: - *
    - *
  • Those with the Soft_Dotted Unicode property (which includes 'i' and 'j')
  • - *
  • Latin lowercase letter 'l'
  • - *
  • Dotless 'i' and 'j' ('ı' and 'ȷ', U+0131 and U+0237)
  • - *
  • Any character whose confusable prototype ends with such a character - * (Soft_Dotted, 'l', 'ı', or 'ȷ')
  • - *
- * In addition, combining characters are allowed between the above characters and U+0307 except those - * with combining class 0 or combining class "Above" (230, same class as U+0307). - * - * This list and the number of combing characters considered by this check may grow over time. - * - * @draft ICU 62 - */ - USPOOF_HIDDEN_OVERLAY = 256, -#endif /* U_HIDE_DRAFT_API */ - - /** - * Enable all spoof checks. - * - * @stable ICU 4.6 - */ - USPOOF_ALL_CHECKS = 0xFFFF, - - /** - * Enable the return of auxillary (non-error) information in the - * upper bits of the check results value. - * - * If this "check" is not enabled, the results of {@link uspoof_check} will be - * zero when an identifier passes all of the enabled checks. - * - * If this "check" is enabled, (uspoof_check() & {@link USPOOF_ALL_CHECKS}) will - * be zero when an identifier passes all checks. - * - * @stable ICU 51 - */ - USPOOF_AUX_INFO = 0x40000000 - - } USpoofChecks; - - - /** - * Constants from UAX #39 for use in {@link uspoof_setRestrictionLevel}, and - * for returned identifier restriction levels in check results. - * - * @stable ICU 51 - * - * @see uspoof_setRestrictionLevel - * @see uspoof_check - */ - typedef enum URestrictionLevel { - /** - * All characters in the string are in the identifier profile and all characters in the string are in the - * ASCII range. - * - * @stable ICU 51 - */ - USPOOF_ASCII = 0x10000000, - /** - * The string classifies as ASCII-Only, or all characters in the string are in the identifier profile and - * the string is single-script, according to the definition in UTS 39 section 5.1. - * - * @stable ICU 53 - */ - USPOOF_SINGLE_SCRIPT_RESTRICTIVE = 0x20000000, - /** - * The string classifies as Single Script, or all characters in the string are in the identifier profile and - * the string is covered by any of the following sets of scripts, according to the definition in UTS 39 - * section 5.1: - *
    - *
  • Latin + Han + Bopomofo (or equivalently: Latn + Hanb)
  • - *
  • Latin + Han + Hiragana + Katakana (or equivalently: Latn + Jpan)
  • - *
  • Latin + Han + Hangul (or equivalently: Latn +Kore)
  • - *
- * This is the default restriction in ICU. - * - * @stable ICU 51 - */ - USPOOF_HIGHLY_RESTRICTIVE = 0x30000000, - /** - * The string classifies as Highly Restrictive, or all characters in the string are in the identifier profile - * and the string is covered by Latin and any one other Recommended or Aspirational script, except Cyrillic, - * Greek, and Cherokee. - * - * @stable ICU 51 - */ - USPOOF_MODERATELY_RESTRICTIVE = 0x40000000, - /** - * All characters in the string are in the identifier profile. Allow arbitrary mixtures of scripts. - * - * @stable ICU 51 - */ - USPOOF_MINIMALLY_RESTRICTIVE = 0x50000000, - /** - * Any valid identifiers, including characters outside of the Identifier Profile. - * - * @stable ICU 51 - */ - USPOOF_UNRESTRICTIVE = 0x60000000, - /** - * Mask for selecting the Restriction Level bits from the return value of {@link uspoof_check}. - * - * @stable ICU 53 - */ - USPOOF_RESTRICTION_LEVEL_MASK = 0x7F000000, -#ifndef U_HIDE_INTERNAL_API - /** - * An undefined restriction level. - * @internal - */ - USPOOF_UNDEFINED_RESTRICTIVE = -1 -#endif /* U_HIDE_INTERNAL_API */ - } URestrictionLevel; - -/** - * Create a Unicode Spoof Checker, configured to perform all - * checks except for USPOOF_LOCALE_LIMIT and USPOOF_CHAR_LIMIT. - * Note that additional checks may be added in the future, - * resulting in the changes to the default checking behavior. - * - * @param status The error code, set if this function encounters a problem. - * @return the newly created Spoof Checker - * @stable ICU 4.2 - */ -U_STABLE USpoofChecker * U_EXPORT2 -uspoof_open(UErrorCode *status); - - -/** - * Open a Spoof checker from its serialized form, stored in 32-bit-aligned memory. - * Inverse of uspoof_serialize(). - * The memory containing the serialized data must remain valid and unchanged - * as long as the spoof checker, or any cloned copies of the spoof checker, - * are in use. Ownership of the memory remains with the caller. - * The spoof checker (and any clones) must be closed prior to deleting the - * serialized data. - * - * @param data a pointer to 32-bit-aligned memory containing the serialized form of spoof data - * @param length the number of bytes available at data; - * can be more than necessary - * @param pActualLength receives the actual number of bytes at data taken up by the data; - * can be NULL - * @param pErrorCode ICU error code - * @return the spoof checker. - * - * @see uspoof_open - * @see uspoof_serialize - * @stable ICU 4.2 - */ -U_STABLE USpoofChecker * U_EXPORT2 -uspoof_openFromSerialized(const void *data, int32_t length, int32_t *pActualLength, - UErrorCode *pErrorCode); - -/** - * Open a Spoof Checker from the source form of the spoof data. - * The input corresponds to the Unicode data file confusables.txt - * as described in Unicode UAX #39. The syntax of the source data - * is as described in UAX #39 for this file, and the content of - * this file is acceptable input. - * - * The character encoding of the (char *) input text is UTF-8. - * - * @param confusables a pointer to the confusable characters definitions, - * as found in file confusables.txt from unicode.org. - * @param confusablesLen The length of the confusables text, or -1 if the - * input string is zero terminated. - * @param confusablesWholeScript - * Deprecated in ICU 58. No longer used. - * @param confusablesWholeScriptLen - * Deprecated in ICU 58. No longer used. - * @param errType In the event of an error in the input, indicates - * which of the input files contains the error. - * The value is one of USPOOF_SINGLE_SCRIPT_CONFUSABLE or - * USPOOF_WHOLE_SCRIPT_CONFUSABLE, or - * zero if no errors are found. - * @param pe In the event of an error in the input, receives the position - * in the input text (line, offset) of the error. - * @param status an in/out ICU UErrorCode. Among the possible errors is - * U_PARSE_ERROR, which is used to report syntax errors - * in the input. - * @return A spoof checker that uses the rules from the input files. - * @stable ICU 4.2 - */ -U_STABLE USpoofChecker * U_EXPORT2 -uspoof_openFromSource(const char *confusables, int32_t confusablesLen, - const char *confusablesWholeScript, int32_t confusablesWholeScriptLen, - int32_t *errType, UParseError *pe, UErrorCode *status); - - -/** - * Close a Spoof Checker, freeing any memory that was being held by - * its implementation. - * @stable ICU 4.2 - */ -U_STABLE void U_EXPORT2 -uspoof_close(USpoofChecker *sc); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUSpoofCheckerPointer - * "Smart pointer" class, closes a USpoofChecker via uspoof_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUSpoofCheckerPointer, USpoofChecker, uspoof_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Clone a Spoof Checker. The clone will be set to perform the same checks - * as the original source. - * - * @param sc The source USpoofChecker - * @param status The error code, set if this function encounters a problem. - * @return - * @stable ICU 4.2 - */ -U_STABLE USpoofChecker * U_EXPORT2 -uspoof_clone(const USpoofChecker *sc, UErrorCode *status); - - -/** - * Specify the bitmask of checks that will be performed by {@link uspoof_check}. Calling this method - * overwrites any checks that may have already been enabled. By default, all checks are enabled. - * - * To enable specific checks and disable all others, the "whitelisted" checks should be ORed together. For - * example, to fail strings containing characters outside of the set specified by {@link uspoof_setAllowedChars} and - * also strings that contain digits from mixed numbering systems: - * - *
- * {@code
- * uspoof_setChecks(USPOOF_CHAR_LIMIT | USPOOF_MIXED_NUMBERS);
- * }
- * 
- * - * To disable specific checks and enable all others, the "blacklisted" checks should be ANDed away from - * ALL_CHECKS. For example, if you are not planning to use the {@link uspoof_areConfusable} functionality, - * it is good practice to disable the CONFUSABLE check: - * - *
- * {@code
- * uspoof_setChecks(USPOOF_ALL_CHECKS & ~USPOOF_CONFUSABLE);
- * }
- * 
- * - * Note that methods such as {@link uspoof_setAllowedChars}, {@link uspoof_setAllowedLocales}, and - * {@link uspoof_setRestrictionLevel} will enable certain checks when called. Those methods will OR the check they - * enable onto the existing bitmask specified by this method. For more details, see the documentation of those - * methods. - * - * @param sc The USpoofChecker - * @param checks The set of checks that this spoof checker will perform. - * The value is a bit set, obtained by OR-ing together - * values from enum USpoofChecks. - * @param status The error code, set if this function encounters a problem. - * @stable ICU 4.2 - * - */ -U_STABLE void U_EXPORT2 -uspoof_setChecks(USpoofChecker *sc, int32_t checks, UErrorCode *status); - -/** - * Get the set of checks that this Spoof Checker has been configured to perform. - * - * @param sc The USpoofChecker - * @param status The error code, set if this function encounters a problem. - * @return The set of checks that this spoof checker will perform. - * The value is a bit set, obtained by OR-ing together - * values from enum USpoofChecks. - * @stable ICU 4.2 - * - */ -U_STABLE int32_t U_EXPORT2 -uspoof_getChecks(const USpoofChecker *sc, UErrorCode *status); - -/** - * Set the loosest restriction level allowed for strings. The default if this is not called is - * {@link USPOOF_HIGHLY_RESTRICTIVE}. Calling this method enables the {@link USPOOF_RESTRICTION_LEVEL} and - * {@link USPOOF_MIXED_NUMBERS} checks, corresponding to Sections 5.1 and 5.2 of UTS 39. To customize which checks are - * to be performed by {@link uspoof_check}, see {@link uspoof_setChecks}. - * - * @param sc The USpoofChecker - * @param restrictionLevel The loosest restriction level allowed. - * @see URestrictionLevel - * @stable ICU 51 - */ -U_STABLE void U_EXPORT2 -uspoof_setRestrictionLevel(USpoofChecker *sc, URestrictionLevel restrictionLevel); - - -/** - * Get the Restriction Level that will be tested if the checks include {@link USPOOF_RESTRICTION_LEVEL}. - * - * @return The restriction level - * @see URestrictionLevel - * @stable ICU 51 - */ -U_STABLE URestrictionLevel U_EXPORT2 -uspoof_getRestrictionLevel(const USpoofChecker *sc); - -/** - * Limit characters that are acceptable in identifiers being checked to those - * normally used with the languages associated with the specified locales. - * Any previously specified list of locales is replaced by the new settings. - * - * A set of languages is determined from the locale(s), and - * from those a set of acceptable Unicode scripts is determined. - * Characters from this set of scripts, along with characters from - * the "common" and "inherited" Unicode Script categories - * will be permitted. - * - * Supplying an empty string removes all restrictions; - * characters from any script will be allowed. - * - * The {@link USPOOF_CHAR_LIMIT} test is automatically enabled for this - * USpoofChecker when calling this function with a non-empty list - * of locales. - * - * The Unicode Set of characters that will be allowed is accessible - * via the uspoof_getAllowedChars() function. uspoof_setAllowedLocales() - * will replace any previously applied set of allowed characters. - * - * Adjustments, such as additions or deletions of certain classes of characters, - * can be made to the result of uspoof_setAllowedLocales() by - * fetching the resulting set with uspoof_getAllowedChars(), - * manipulating it with the Unicode Set API, then resetting the - * spoof detectors limits with uspoof_setAllowedChars(). - * - * @param sc The USpoofChecker - * @param localesList A list list of locales, from which the language - * and associated script are extracted. The locales - * are comma-separated if there is more than one. - * White space may not appear within an individual locale, - * but is ignored otherwise. - * The locales are syntactically like those from the - * HTTP Accept-Language header. - * If the localesList is empty, no restrictions will be placed on - * the allowed characters. - * - * @param status The error code, set if this function encounters a problem. - * @stable ICU 4.2 - */ -U_STABLE void U_EXPORT2 -uspoof_setAllowedLocales(USpoofChecker *sc, const char *localesList, UErrorCode *status); - -/** - * Get a list of locales for the scripts that are acceptable in strings - * to be checked. If no limitations on scripts have been specified, - * an empty string will be returned. - * - * uspoof_setAllowedChars() will reset the list of allowed to be empty. - * - * The format of the returned list is the same as that supplied to - * uspoof_setAllowedLocales(), but returned list may not be identical - * to the originally specified string; the string may be reformatted, - * and information other than languages from - * the originally specified locales may be omitted. - * - * @param sc The USpoofChecker - * @param status The error code, set if this function encounters a problem. - * @return A string containing a list of locales corresponding - * to the acceptable scripts, formatted like an - * HTTP Accept Language value. - * - * @stable ICU 4.2 - */ -U_STABLE const char * U_EXPORT2 -uspoof_getAllowedLocales(USpoofChecker *sc, UErrorCode *status); - - -/** - * Limit the acceptable characters to those specified by a Unicode Set. - * Any previously specified character limit is - * is replaced by the new settings. This includes limits on - * characters that were set with the uspoof_setAllowedLocales() function. - * - * The USPOOF_CHAR_LIMIT test is automatically enabled for this - * USpoofChecker by this function. - * - * @param sc The USpoofChecker - * @param chars A Unicode Set containing the list of - * characters that are permitted. Ownership of the set - * remains with the caller. The incoming set is cloned by - * this function, so there are no restrictions on modifying - * or deleting the USet after calling this function. - * @param status The error code, set if this function encounters a problem. - * @stable ICU 4.2 - */ -U_STABLE void U_EXPORT2 -uspoof_setAllowedChars(USpoofChecker *sc, const USet *chars, UErrorCode *status); - - -/** - * Get a USet for the characters permitted in an identifier. - * This corresponds to the limits imposed by the Set Allowed Characters - * functions. Limitations imposed by other checks will not be - * reflected in the set returned by this function. - * - * The returned set will be frozen, meaning that it cannot be modified - * by the caller. - * - * Ownership of the returned set remains with the Spoof Detector. The - * returned set will become invalid if the spoof detector is closed, - * or if a new set of allowed characters is specified. - * - * - * @param sc The USpoofChecker - * @param status The error code, set if this function encounters a problem. - * @return A USet containing the characters that are permitted by - * the USPOOF_CHAR_LIMIT test. - * @stable ICU 4.2 - */ -U_STABLE const USet * U_EXPORT2 -uspoof_getAllowedChars(const USpoofChecker *sc, UErrorCode *status); - - -#if U_SHOW_CPLUSPLUS_API -/** - * Limit the acceptable characters to those specified by a Unicode Set. - * Any previously specified character limit is - * is replaced by the new settings. This includes limits on - * characters that were set with the uspoof_setAllowedLocales() function. - * - * The USPOOF_CHAR_LIMIT test is automatically enabled for this - * USoofChecker by this function. - * - * @param sc The USpoofChecker - * @param chars A Unicode Set containing the list of - * characters that are permitted. Ownership of the set - * remains with the caller. The incoming set is cloned by - * this function, so there are no restrictions on modifying - * or deleting the UnicodeSet after calling this function. - * @param status The error code, set if this function encounters a problem. - * @stable ICU 4.2 - */ -U_STABLE void U_EXPORT2 -uspoof_setAllowedUnicodeSet(USpoofChecker *sc, const icu::UnicodeSet *chars, UErrorCode *status); - - -/** - * Get a UnicodeSet for the characters permitted in an identifier. - * This corresponds to the limits imposed by the Set Allowed Characters / - * UnicodeSet functions. Limitations imposed by other checks will not be - * reflected in the set returned by this function. - * - * The returned set will be frozen, meaning that it cannot be modified - * by the caller. - * - * Ownership of the returned set remains with the Spoof Detector. The - * returned set will become invalid if the spoof detector is closed, - * or if a new set of allowed characters is specified. - * - * - * @param sc The USpoofChecker - * @param status The error code, set if this function encounters a problem. - * @return A UnicodeSet containing the characters that are permitted by - * the USPOOF_CHAR_LIMIT test. - * @stable ICU 4.2 - */ -U_STABLE const icu::UnicodeSet * U_EXPORT2 -uspoof_getAllowedUnicodeSet(const USpoofChecker *sc, UErrorCode *status); -#endif // U_SHOW_CPLUSPLUS_API - - -/** - * Check the specified string for possible security issues. - * The text to be checked will typically be an identifier of some sort. - * The set of checks to be performed is specified with uspoof_setChecks(). - * - * \note - * Consider using the newer API, {@link uspoof_check2}, instead. - * The newer API exposes additional information from the check procedure - * and is otherwise identical to this method. - * - * @param sc The USpoofChecker - * @param id The identifier to be checked for possible security issues, - * in UTF-16 format. - * @param length the length of the string to be checked, expressed in - * 16 bit UTF-16 code units, or -1 if the string is - * zero terminated. - * @param position Deprecated in ICU 51. Always returns zero. - * Originally, an out parameter for the index of the first - * string position that failed a check. - * This parameter may be NULL. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * Spoofing or security issues detected with the input string are - * not reported here, but through the function's return value. - * @return An integer value with bits set for any potential security - * or spoofing issues detected. The bits are defined by - * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) - * will be zero if the input string passes all of the - * enabled checks. - * @see uspoof_check2 - * @stable ICU 4.2 - */ -U_STABLE int32_t U_EXPORT2 -uspoof_check(const USpoofChecker *sc, - const UChar *id, int32_t length, - int32_t *position, - UErrorCode *status); - - -/** - * Check the specified string for possible security issues. - * The text to be checked will typically be an identifier of some sort. - * The set of checks to be performed is specified with uspoof_setChecks(). - * - * \note - * Consider using the newer API, {@link uspoof_check2UTF8}, instead. - * The newer API exposes additional information from the check procedure - * and is otherwise identical to this method. - * - * @param sc The USpoofChecker - * @param id A identifier to be checked for possible security issues, in UTF8 format. - * @param length the length of the string to be checked, or -1 if the string is - * zero terminated. - * @param position Deprecated in ICU 51. Always returns zero. - * Originally, an out parameter for the index of the first - * string position that failed a check. - * This parameter may be NULL. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * Spoofing or security issues detected with the input string are - * not reported here, but through the function's return value. - * If the input contains invalid UTF-8 sequences, - * a status of U_INVALID_CHAR_FOUND will be returned. - * @return An integer value with bits set for any potential security - * or spoofing issues detected. The bits are defined by - * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) - * will be zero if the input string passes all of the - * enabled checks. - * @see uspoof_check2UTF8 - * @stable ICU 4.2 - */ -U_STABLE int32_t U_EXPORT2 -uspoof_checkUTF8(const USpoofChecker *sc, - const char *id, int32_t length, - int32_t *position, - UErrorCode *status); - - -#if U_SHOW_CPLUSPLUS_API -/** - * Check the specified string for possible security issues. - * The text to be checked will typically be an identifier of some sort. - * The set of checks to be performed is specified with uspoof_setChecks(). - * - * \note - * Consider using the newer API, {@link uspoof_check2UnicodeString}, instead. - * The newer API exposes additional information from the check procedure - * and is otherwise identical to this method. - * - * @param sc The USpoofChecker - * @param id A identifier to be checked for possible security issues. - * @param position Deprecated in ICU 51. Always returns zero. - * Originally, an out parameter for the index of the first - * string position that failed a check. - * This parameter may be NULL. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * Spoofing or security issues detected with the input string are - * not reported here, but through the function's return value. - * @return An integer value with bits set for any potential security - * or spoofing issues detected. The bits are defined by - * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) - * will be zero if the input string passes all of the - * enabled checks. - * @see uspoof_check2UnicodeString - * @stable ICU 4.2 - */ -U_STABLE int32_t U_EXPORT2 -uspoof_checkUnicodeString(const USpoofChecker *sc, - const icu::UnicodeString &id, - int32_t *position, - UErrorCode *status); -#endif // U_SHOW_CPLUSPLUS_API - - -/** - * Check the specified string for possible security issues. - * The text to be checked will typically be an identifier of some sort. - * The set of checks to be performed is specified with uspoof_setChecks(). - * - * @param sc The USpoofChecker - * @param id The identifier to be checked for possible security issues, - * in UTF-16 format. - * @param length the length of the string to be checked, or -1 if the string is - * zero terminated. - * @param checkResult An instance of USpoofCheckResult to be filled with - * details about the identifier. Can be NULL. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * Spoofing or security issues detected with the input string are - * not reported here, but through the function's return value. - * @return An integer value with bits set for any potential security - * or spoofing issues detected. The bits are defined by - * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) - * will be zero if the input string passes all of the - * enabled checks. Any information in this bitmask will be - * consistent with the information saved in the optional - * checkResult parameter. - * @see uspoof_openCheckResult - * @see uspoof_check2UTF8 - * @see uspoof_check2UnicodeString - * @stable ICU 58 - */ -U_STABLE int32_t U_EXPORT2 -uspoof_check2(const USpoofChecker *sc, - const UChar* id, int32_t length, - USpoofCheckResult* checkResult, - UErrorCode *status); - -/** - * Check the specified string for possible security issues. - * The text to be checked will typically be an identifier of some sort. - * The set of checks to be performed is specified with uspoof_setChecks(). - * - * This version of {@link uspoof_check} accepts a USpoofCheckResult, which - * returns additional information about the identifier. For more - * information, see {@link uspoof_openCheckResult}. - * - * @param sc The USpoofChecker - * @param id A identifier to be checked for possible security issues, in UTF8 format. - * @param length the length of the string to be checked, or -1 if the string is - * zero terminated. - * @param checkResult An instance of USpoofCheckResult to be filled with - * details about the identifier. Can be NULL. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * Spoofing or security issues detected with the input string are - * not reported here, but through the function's return value. - * @return An integer value with bits set for any potential security - * or spoofing issues detected. The bits are defined by - * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) - * will be zero if the input string passes all of the - * enabled checks. Any information in this bitmask will be - * consistent with the information saved in the optional - * checkResult parameter. - * @see uspoof_openCheckResult - * @see uspoof_check2 - * @see uspoof_check2UnicodeString - * @stable ICU 58 - */ -U_STABLE int32_t U_EXPORT2 -uspoof_check2UTF8(const USpoofChecker *sc, - const char *id, int32_t length, - USpoofCheckResult* checkResult, - UErrorCode *status); - -#if U_SHOW_CPLUSPLUS_API -/** - * Check the specified string for possible security issues. - * The text to be checked will typically be an identifier of some sort. - * The set of checks to be performed is specified with uspoof_setChecks(). - * - * @param sc The USpoofChecker - * @param id A identifier to be checked for possible security issues. - * @param checkResult An instance of USpoofCheckResult to be filled with - * details about the identifier. Can be NULL. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * Spoofing or security issues detected with the input string are - * not reported here, but through the function's return value. - * @return An integer value with bits set for any potential security - * or spoofing issues detected. The bits are defined by - * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) - * will be zero if the input string passes all of the - * enabled checks. Any information in this bitmask will be - * consistent with the information saved in the optional - * checkResult parameter. - * @see uspoof_openCheckResult - * @see uspoof_check2 - * @see uspoof_check2UTF8 - * @stable ICU 58 - */ -U_STABLE int32_t U_EXPORT2 -uspoof_check2UnicodeString(const USpoofChecker *sc, - const icu::UnicodeString &id, - USpoofCheckResult* checkResult, - UErrorCode *status); -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Create a USpoofCheckResult, used by the {@link uspoof_check2} class of functions to return - * information about the identifier. Information includes: - *
    - *
  • A bitmask of the checks that failed
  • - *
  • The identifier's restriction level (UTS 39 section 5.2)
  • - *
  • The set of numerics in the string (UTS 39 section 5.3)
  • - *
- * The data held in a USpoofCheckResult is cleared whenever it is passed into a new call - * of {@link uspoof_check2}. - * - * @param status The error code, set if this function encounters a problem. - * @return the newly created USpoofCheckResult - * @see uspoof_check2 - * @see uspoof_check2UTF8 - * @see uspoof_check2UnicodeString - * @stable ICU 58 - */ -U_STABLE USpoofCheckResult* U_EXPORT2 -uspoof_openCheckResult(UErrorCode *status); - -/** - * Close a USpoofCheckResult, freeing any memory that was being held by - * its implementation. - * - * @param checkResult The instance of USpoofCheckResult to close - * @stable ICU 58 - */ -U_STABLE void U_EXPORT2 -uspoof_closeCheckResult(USpoofCheckResult *checkResult); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUSpoofCheckResultPointer - * "Smart pointer" class, closes a USpoofCheckResult via `uspoof_closeCheckResult()`. - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 58 - */ - -/** - * \cond - * Note: Doxygen is giving a bogus warning on this U_DEFINE_LOCAL_OPEN_POINTER. - * For now, suppress with a Doxygen cond - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUSpoofCheckResultPointer, USpoofCheckResult, uspoof_closeCheckResult); -/** \endcond */ - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Indicates which of the spoof check(s) have failed. The value is a bitwise OR of the constants for the tests - * in question: USPOOF_RESTRICTION_LEVEL, USPOOF_CHAR_LIMIT, and so on. - * - * @param checkResult The instance of USpoofCheckResult created by {@link uspoof_openCheckResult} - * @param status The error code, set if an error occurred. - * @return An integer value with bits set for any potential security - * or spoofing issues detected. The bits are defined by - * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) - * will be zero if the input string passes all of the - * enabled checks. - * @see uspoof_setChecks - * @stable ICU 58 - */ -U_STABLE int32_t U_EXPORT2 -uspoof_getCheckResultChecks(const USpoofCheckResult *checkResult, UErrorCode *status); - -/** - * Gets the restriction level that the text meets, if the USPOOF_RESTRICTION_LEVEL check - * was enabled; otherwise, undefined. - * - * @param checkResult The instance of USpoofCheckResult created by {@link uspoof_openCheckResult} - * @param status The error code, set if an error occurred. - * @return The restriction level contained in the USpoofCheckResult - * @see uspoof_setRestrictionLevel - * @stable ICU 58 - */ -U_STABLE URestrictionLevel U_EXPORT2 -uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult *checkResult, UErrorCode *status); - -/** - * Gets the set of numerics found in the string, if the USPOOF_MIXED_NUMBERS check was enabled; - * otherwise, undefined. The set will contain the zero digit from each decimal number system found - * in the input string. Ownership of the returned USet remains with the USpoofCheckResult. - * The USet will be free'd when {@link uspoof_closeCheckResult} is called. - * - * @param checkResult The instance of USpoofCheckResult created by {@link uspoof_openCheckResult} - * @return The set of numerics contained in the USpoofCheckResult - * @param status The error code, set if an error occurred. - * @stable ICU 58 - */ -U_STABLE const USet* U_EXPORT2 -uspoof_getCheckResultNumerics(const USpoofCheckResult *checkResult, UErrorCode *status); - - -/** - * Check the whether two specified strings are visually confusable. - * - * If the strings are confusable, the return value will be nonzero, as long as - * {@link USPOOF_CONFUSABLE} was enabled in uspoof_setChecks(). - * - * The bits in the return value correspond to flags for each of the classes of - * confusables applicable to the two input strings. According to UTS 39 - * section 4, the possible flags are: - * - *
    - *
  • {@link USPOOF_SINGLE_SCRIPT_CONFUSABLE}
  • - *
  • {@link USPOOF_MIXED_SCRIPT_CONFUSABLE}
  • - *
  • {@link USPOOF_WHOLE_SCRIPT_CONFUSABLE}
  • - *
- * - * If one or more of the above flags were not listed in uspoof_setChecks(), this - * function will never report that class of confusable. The check - * {@link USPOOF_CONFUSABLE} enables all three flags. - * - * - * @param sc The USpoofChecker - * @param id1 The first of the two identifiers to be compared for - * confusability. The strings are in UTF-16 format. - * @param length1 the length of the first identifer, expressed in - * 16 bit UTF-16 code units, or -1 if the string is - * nul terminated. - * @param id2 The second of the two identifiers to be compared for - * confusability. The identifiers are in UTF-16 format. - * @param length2 The length of the second identifiers, expressed in - * 16 bit UTF-16 code units, or -1 if the string is - * nul terminated. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * Confusability of the identifiers is not reported here, - * but through this function's return value. - * @return An integer value with bit(s) set corresponding to - * the type of confusability found, as defined by - * enum USpoofChecks. Zero is returned if the identifiers - * are not confusable. - * - * @stable ICU 4.2 - */ -U_STABLE int32_t U_EXPORT2 -uspoof_areConfusable(const USpoofChecker *sc, - const UChar *id1, int32_t length1, - const UChar *id2, int32_t length2, - UErrorCode *status); - - - -/** - * A version of {@link uspoof_areConfusable} accepting strings in UTF-8 format. - * - * @param sc The USpoofChecker - * @param id1 The first of the two identifiers to be compared for - * confusability. The strings are in UTF-8 format. - * @param length1 the length of the first identifiers, in bytes, or -1 - * if the string is nul terminated. - * @param id2 The second of the two identifiers to be compared for - * confusability. The strings are in UTF-8 format. - * @param length2 The length of the second string in bytes, or -1 - * if the string is nul terminated. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * Confusability of the strings is not reported here, - * but through this function's return value. - * @return An integer value with bit(s) set corresponding to - * the type of confusability found, as defined by - * enum USpoofChecks. Zero is returned if the strings - * are not confusable. - * - * @stable ICU 4.2 - * - * @see uspoof_areConfusable - */ -U_STABLE int32_t U_EXPORT2 -uspoof_areConfusableUTF8(const USpoofChecker *sc, - const char *id1, int32_t length1, - const char *id2, int32_t length2, - UErrorCode *status); - - - - -#if U_SHOW_CPLUSPLUS_API -/** - * A version of {@link uspoof_areConfusable} accepting UnicodeStrings. - * - * @param sc The USpoofChecker - * @param s1 The first of the two identifiers to be compared for - * confusability. The strings are in UTF-8 format. - * @param s2 The second of the two identifiers to be compared for - * confusability. The strings are in UTF-8 format. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * Confusability of the identifiers is not reported here, - * but through this function's return value. - * @return An integer value with bit(s) set corresponding to - * the type of confusability found, as defined by - * enum USpoofChecks. Zero is returned if the identifiers - * are not confusable. - * - * @stable ICU 4.2 - * - * @see uspoof_areConfusable - */ -U_STABLE int32_t U_EXPORT2 -uspoof_areConfusableUnicodeString(const USpoofChecker *sc, - const icu::UnicodeString &s1, - const icu::UnicodeString &s2, - UErrorCode *status); -#endif // U_SHOW_CPLUSPLUS_API - - -/** - * Get the "skeleton" for an identifier. - * Skeletons are a transformation of the input identifier; - * Two identifiers are confusable if their skeletons are identical. - * See Unicode UAX #39 for additional information. - * - * Using skeletons directly makes it possible to quickly check - * whether an identifier is confusable with any of some large - * set of existing identifiers, by creating an efficiently - * searchable collection of the skeletons. - * - * @param sc The USpoofChecker - * @param type Deprecated in ICU 58. You may pass any number. - * Originally, controlled which of the Unicode confusable data - * tables to use. - * @param id The input identifier whose skeleton will be computed. - * @param length The length of the input identifier, expressed in 16 bit - * UTF-16 code units, or -1 if the string is zero terminated. - * @param dest The output buffer, to receive the skeleton string. - * @param destCapacity The length of the output buffer, in 16 bit units. - * The destCapacity may be zero, in which case the function will - * return the actual length of the skeleton. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * @return The length of the skeleton string. The returned length - * is always that of the complete skeleton, even when the - * supplied buffer is too small (or of zero length) - * - * @stable ICU 4.2 - * @see uspoof_areConfusable - */ -U_STABLE int32_t U_EXPORT2 -uspoof_getSkeleton(const USpoofChecker *sc, - uint32_t type, - const UChar *id, int32_t length, - UChar *dest, int32_t destCapacity, - UErrorCode *status); - -/** - * Get the "skeleton" for an identifier. - * Skeletons are a transformation of the input identifier; - * Two identifiers are confusable if their skeletons are identical. - * See Unicode UAX #39 for additional information. - * - * Using skeletons directly makes it possible to quickly check - * whether an identifier is confusable with any of some large - * set of existing identifiers, by creating an efficiently - * searchable collection of the skeletons. - * - * @param sc The USpoofChecker - * @param type Deprecated in ICU 58. You may pass any number. - * Originally, controlled which of the Unicode confusable data - * tables to use. - * @param id The UTF-8 format identifier whose skeleton will be computed. - * @param length The length of the input string, in bytes, - * or -1 if the string is zero terminated. - * @param dest The output buffer, to receive the skeleton string. - * @param destCapacity The length of the output buffer, in bytes. - * The destCapacity may be zero, in which case the function will - * return the actual length of the skeleton. - * @param status The error code, set if an error occurred while attempting to - * perform the check. Possible Errors include U_INVALID_CHAR_FOUND - * for invalid UTF-8 sequences, and - * U_BUFFER_OVERFLOW_ERROR if the destination buffer is too small - * to hold the complete skeleton. - * @return The length of the skeleton string, in bytes. The returned length - * is always that of the complete skeleton, even when the - * supplied buffer is too small (or of zero length) - * - * @stable ICU 4.2 - */ -U_STABLE int32_t U_EXPORT2 -uspoof_getSkeletonUTF8(const USpoofChecker *sc, - uint32_t type, - const char *id, int32_t length, - char *dest, int32_t destCapacity, - UErrorCode *status); - -#if U_SHOW_CPLUSPLUS_API -/** - * Get the "skeleton" for an identifier. - * Skeletons are a transformation of the input identifier; - * Two identifiers are confusable if their skeletons are identical. - * See Unicode UAX #39 for additional information. - * - * Using skeletons directly makes it possible to quickly check - * whether an identifier is confusable with any of some large - * set of existing identifiers, by creating an efficiently - * searchable collection of the skeletons. - * - * @param sc The USpoofChecker. - * @param type Deprecated in ICU 58. You may pass any number. - * Originally, controlled which of the Unicode confusable data - * tables to use. - * @param id The input identifier whose skeleton will be computed. - * @param dest The output identifier, to receive the skeleton string. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * @return A reference to the destination (skeleton) string. - * - * @stable ICU 4.2 - */ -U_I18N_API icu::UnicodeString & U_EXPORT2 -uspoof_getSkeletonUnicodeString(const USpoofChecker *sc, - uint32_t type, - const icu::UnicodeString &id, - icu::UnicodeString &dest, - UErrorCode *status); -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Get the set of Candidate Characters for Inclusion in Identifiers, as defined - * in http://unicode.org/Public/security/latest/xidmodifications.txt - * and documented in http://www.unicode.org/reports/tr39/, Unicode Security Mechanisms. - * - * The returned set is frozen. Ownership of the set remains with the ICU library; it must not - * be deleted by the caller. - * - * @param status The error code, set if a problem occurs while creating the set. - * - * @stable ICU 51 - */ -U_STABLE const USet * U_EXPORT2 -uspoof_getInclusionSet(UErrorCode *status); - -/** - * Get the set of characters from Recommended Scripts for Inclusion in Identifiers, as defined - * in http://unicode.org/Public/security/latest/xidmodifications.txt - * and documented in http://www.unicode.org/reports/tr39/, Unicode Security Mechanisms. - * - * The returned set is frozen. Ownership of the set remains with the ICU library; it must not - * be deleted by the caller. - * - * @param status The error code, set if a problem occurs while creating the set. - * - * @stable ICU 51 - */ -U_STABLE const USet * U_EXPORT2 -uspoof_getRecommendedSet(UErrorCode *status); - -#if U_SHOW_CPLUSPLUS_API - -/** - * Get the set of Candidate Characters for Inclusion in Identifiers, as defined - * in http://unicode.org/Public/security/latest/xidmodifications.txt - * and documented in http://www.unicode.org/reports/tr39/, Unicode Security Mechanisms. - * - * The returned set is frozen. Ownership of the set remains with the ICU library; it must not - * be deleted by the caller. - * - * @param status The error code, set if a problem occurs while creating the set. - * - * @stable ICU 51 - */ -U_STABLE const icu::UnicodeSet * U_EXPORT2 -uspoof_getInclusionUnicodeSet(UErrorCode *status); - -/** - * Get the set of characters from Recommended Scripts for Inclusion in Identifiers, as defined - * in http://unicode.org/Public/security/latest/xidmodifications.txt - * and documented in http://www.unicode.org/reports/tr39/, Unicode Security Mechanisms. - * - * The returned set is frozen. Ownership of the set remains with the ICU library; it must not - * be deleted by the caller. - * - * @param status The error code, set if a problem occurs while creating the set. - * - * @stable ICU 51 - */ -U_STABLE const icu::UnicodeSet * U_EXPORT2 -uspoof_getRecommendedUnicodeSet(UErrorCode *status); - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Serialize the data for a spoof detector into a chunk of memory. - * The flattened spoof detection tables can later be used to efficiently - * instantiate a new Spoof Detector. - * - * The serialized spoof checker includes only the data compiled from the - * Unicode data tables by uspoof_openFromSource(); it does not include - * include any other state or configuration that may have been set. - * - * @param sc the Spoof Detector whose data is to be serialized. - * @param data a pointer to 32-bit-aligned memory to be filled with the data, - * can be NULL if capacity==0 - * @param capacity the number of bytes available at data, - * or 0 for preflighting - * @param status an in/out ICU UErrorCode; possible errors include: - * - U_BUFFER_OVERFLOW_ERROR if the data storage block is too small for serialization - * - U_ILLEGAL_ARGUMENT_ERROR the data or capacity parameters are bad - * @return the number of bytes written or needed for the spoof data - * - * @see utrie2_openFromSerialized() - * @stable ICU 4.2 - */ -U_STABLE int32_t U_EXPORT2 -uspoof_serialize(USpoofChecker *sc, - void *data, int32_t capacity, - UErrorCode *status); - - -#endif - -#endif /* USPOOF_H */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/usprep.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/usprep.h deleted file mode 100644 index 8cb52f1ede..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/usprep.h +++ /dev/null @@ -1,271 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * - * Copyright (C) 2003-2014, International Business Machines - * Corporation and others. All Rights Reserved. - * - ******************************************************************************* - * file name: usprep.h - * encoding: UTF-8 - * tab size: 8 (not used) - * indentation:4 - * - * created on: 2003jul2 - * created by: Ram Viswanadha - */ - -#ifndef __USPREP_H__ -#define __USPREP_H__ - -/** - * \file - * \brief C API: Implements the StringPrep algorithm. - */ - -#include "unicode/utypes.h" -#include "unicode/localpointer.h" - -/** - * - * StringPrep API implements the StingPrep framework as described by RFC 3454. - * StringPrep prepares Unicode strings for use in network protocols. - * Profiles of StingPrep are set of rules and data according to with the - * Unicode Strings are prepared. Each profiles contains tables which describe - * how a code point should be treated. The tables are broadly classified into - *
    - *
  • Unassigned Table: Contains code points that are unassigned - * in the Unicode Version supported by StringPrep. Currently - * RFC 3454 supports Unicode 3.2.
  • - *
  • Prohibited Table: Contains code points that are prohibited from - * the output of the StringPrep processing function.
  • - *
  • Mapping Table: Contains code points that are deleted from the output or case mapped.
  • - *
- * - * The procedure for preparing Unicode strings: - *
    - *
  1. Map: For each character in the input, check if it has a mapping - * and, if so, replace it with its mapping.
  2. - *
  3. Normalize: Possibly normalize the result of step 1 using Unicode - * normalization.
  4. - *
  5. Prohibit: Check for any characters that are not allowed in the - * output. If any are found, return an error.
  6. - *
  7. Check bidi: Possibly check for right-to-left characters, and if - * any are found, make sure that the whole string satisfies the - * requirements for bidirectional strings. If the string does not - * satisfy the requirements for bidirectional strings, return an - * error.
  8. - *
- * @author Ram Viswanadha - */ -#if !UCONFIG_NO_IDNA - -#include "unicode/parseerr.h" - -/** - * The StringPrep profile - * @stable ICU 2.8 - */ -typedef struct UStringPrepProfile UStringPrepProfile; - - -/** - * Option to prohibit processing of unassigned code points in the input - * - * @see usprep_prepare - * @stable ICU 2.8 - */ -#define USPREP_DEFAULT 0x0000 - -/** - * Option to allow processing of unassigned code points in the input - * - * @see usprep_prepare - * @stable ICU 2.8 - */ -#define USPREP_ALLOW_UNASSIGNED 0x0001 - -/** - * enums for the standard stringprep profile types - * supported by usprep_openByType. - * @see usprep_openByType - * @stable ICU 4.2 - */ -typedef enum UStringPrepProfileType { - /** - * RFC3491 Nameprep - * @stable ICU 4.2 - */ - USPREP_RFC3491_NAMEPREP, - /** - * RFC3530 nfs4_cs_prep - * @stable ICU 4.2 - */ - USPREP_RFC3530_NFS4_CS_PREP, - /** - * RFC3530 nfs4_cs_prep with case insensitive option - * @stable ICU 4.2 - */ - USPREP_RFC3530_NFS4_CS_PREP_CI, - /** - * RFC3530 nfs4_cis_prep - * @stable ICU 4.2 - */ - USPREP_RFC3530_NFS4_CIS_PREP, - /** - * RFC3530 nfs4_mixed_prep for prefix - * @stable ICU 4.2 - */ - USPREP_RFC3530_NFS4_MIXED_PREP_PREFIX, - /** - * RFC3530 nfs4_mixed_prep for suffix - * @stable ICU 4.2 - */ - USPREP_RFC3530_NFS4_MIXED_PREP_SUFFIX, - /** - * RFC3722 iSCSI - * @stable ICU 4.2 - */ - USPREP_RFC3722_ISCSI, - /** - * RFC3920 XMPP Nodeprep - * @stable ICU 4.2 - */ - USPREP_RFC3920_NODEPREP, - /** - * RFC3920 XMPP Resourceprep - * @stable ICU 4.2 - */ - USPREP_RFC3920_RESOURCEPREP, - /** - * RFC4011 Policy MIB Stringprep - * @stable ICU 4.2 - */ - USPREP_RFC4011_MIB, - /** - * RFC4013 SASLprep - * @stable ICU 4.2 - */ - USPREP_RFC4013_SASLPREP, - /** - * RFC4505 trace - * @stable ICU 4.2 - */ - USPREP_RFC4505_TRACE, - /** - * RFC4518 LDAP - * @stable ICU 4.2 - */ - USPREP_RFC4518_LDAP, - /** - * RFC4518 LDAP for case ignore, numeric and stored prefix - * matching rules - * @stable ICU 4.2 - */ - USPREP_RFC4518_LDAP_CI -} UStringPrepProfileType; - -/** - * Creates a StringPrep profile from the data file. - * - * @param path string containing the full path pointing to the directory - * where the profile reside followed by the package name - * e.g. "/usr/resource/my_app/profiles/mydata" on a Unix system. - * if NULL, ICU default data files will be used. - * @param fileName name of the profile file to be opened - * @param status ICU error code in/out parameter. Must not be NULL. - * Must fulfill U_SUCCESS before the function call. - * @return Pointer to UStringPrepProfile that is opened. Should be closed by - * calling usprep_close() - * @see usprep_close() - * @stable ICU 2.8 - */ -U_STABLE UStringPrepProfile* U_EXPORT2 -usprep_open(const char* path, - const char* fileName, - UErrorCode* status); - -/** - * Creates a StringPrep profile for the specified profile type. - * - * @param type The profile type - * @param status ICU error code in/out parameter. Must not be NULL. - * Must fulfill U_SUCCESS before the function call. - * @return Pointer to UStringPrepProfile that is opened. Should be closed by - * calling usprep_close() - * @see usprep_close() - * @stable ICU 4.2 - */ -U_STABLE UStringPrepProfile* U_EXPORT2 -usprep_openByType(UStringPrepProfileType type, - UErrorCode* status); - -/** - * Closes the profile - * @param profile The profile to close - * @stable ICU 2.8 - */ -U_STABLE void U_EXPORT2 -usprep_close(UStringPrepProfile* profile); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUStringPrepProfilePointer - * "Smart pointer" class, closes a UStringPrepProfile via usprep_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUStringPrepProfilePointer, UStringPrepProfile, usprep_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Prepare the input buffer for use in applications with the given profile. This operation maps, normalizes(NFKC), - * checks for prohibited and BiDi characters in the order defined by RFC 3454 - * depending on the options specified in the profile. - * - * @param prep The profile to use - * @param src Pointer to UChar buffer containing the string to prepare - * @param srcLength Number of characters in the source string - * @param dest Pointer to the destination buffer to receive the output - * @param destCapacity The capacity of destination array - * @param options A bit set of options: - * - * - USPREP_DEFAULT Prohibit processing of unassigned code points in the input - * - * - USPREP_ALLOW_UNASSIGNED Treat the unassigned code points are in the input - * as normal Unicode code points. - * - * @param parseError Pointer to UParseError struct to receive information on position - * of error if an error is encountered. Can be NULL. - * @param status ICU in/out error code parameter. - * U_INVALID_CHAR_FOUND if src contains - * unmatched single surrogates. - * U_INDEX_OUTOFBOUNDS_ERROR if src contains - * too many code points. - * U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough - * @return The number of UChars in the destination buffer - * @stable ICU 2.8 - */ - -U_STABLE int32_t U_EXPORT2 -usprep_prepare( const UStringPrepProfile* prep, - const UChar* src, int32_t srcLength, - UChar* dest, int32_t destCapacity, - int32_t options, - UParseError* parseError, - UErrorCode* status ); - - -#endif /* #if !UCONFIG_NO_IDNA */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustdio.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustdio.h deleted file mode 100644 index a2ad3c2442..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustdio.h +++ /dev/null @@ -1,1018 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -****************************************************************************** -* -* Copyright (C) 1998-2015, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* -* File ustdio.h -* -* Modification History: -* -* Date Name Description -* 10/16/98 stephen Creation. -* 11/06/98 stephen Modified per code review. -* 03/12/99 stephen Modified for new C API. -* 07/19/99 stephen Minor doc update. -* 02/01/01 george Added sprintf & sscanf with all of its variants -****************************************************************************** -*/ - -#ifndef USTDIO_H -#define USTDIO_H - -#include -#include - -#include "unicode/utypes.h" -#include "unicode/ucnv.h" -#include "unicode/utrans.h" -#include "unicode/localpointer.h" -#include "unicode/unum.h" - -#if !UCONFIG_NO_CONVERSION - -/* - TODO - The following is a small list as to what is currently wrong/suggestions for - ustdio. - - * Make sure that * in the scanf format specification works for all formats. - * Each UFILE takes up at least 2KB. - Look into adding setvbuf() for configurable buffers. - * This library does buffering. The OS should do this for us already. Check on - this, and remove it from this library, if this is the case. Double buffering - wastes a lot of time and space. - * Test stdin and stdout with the u_f* functions - * Testing should be done for reading and writing multi-byte encodings, - and make sure that a character that is contained across buffer boundries - works even for incomplete characters. - * Make sure that the last character is flushed when the file/string is closed. - * snprintf should follow the C99 standard for the return value, which is - return the number of characters (excluding the trailing '\0') - which would have been written to the destination string regardless - of available space. This is like pre-flighting. - * Everything that uses %s should do what operator>> does for UnicodeString. - It should convert one byte at a time, and once a character is - converted then check to see if it's whitespace or in the scanset. - If it's whitespace or in the scanset, put all the bytes back (do nothing - for sprintf/sscanf). - * If bad string data is encountered, make sure that the function fails - without memory leaks and the unconvertable characters are valid - substitution or are escaped characters. - * u_fungetc() can't unget a character when it's at the beginning of the - internal conversion buffer. For example, read the buffer size # of - characters, and then ungetc to get the previous character that was - at the end of the last buffer. - * u_fflush() and u_fclose should return an int32_t like C99 functions. - 0 is returned if the operation was successful and EOF otherwise. - * u_fsettransliterator does not support U_READ side of transliteration. - * The format specifier should limit the size of a format or honor it in - order to prevent buffer overruns. (e.g. %256.256d). - * u_fread and u_fwrite don't exist. They're needed for reading and writing - data structures without any conversion. - * u_file_read and u_file_write are used for writing strings. u_fgets and - u_fputs or u_fread and u_fwrite should be used to do this. - * The width parameter for all scanf formats, including scanset, needs - better testing. This prevents buffer overflows. - * Figure out what is suppose to happen when a codepage is changed midstream. - Maybe a flush or a rewind are good enough. - * Make sure that a UFile opened with "rw" can be used after using - u_fflush with a u_frewind. - * scanf(%i) should detect what type of number to use. - * Add more testing of the alternate format, %# - * Look at newline handling of fputs/puts - * Think more about codeunit/codepoint error handling/support in %S,%s,%C,%c,%[] - * Complete the file documentation with proper doxygen formatting. - See http://oss.software.ibm.com/pipermail/icu/2003-July/005647.html -*/ - -/** - * \file - * \brief C API: Unicode stdio-like API - * - *

Unicode stdio-like C API

- * - *

This API provides an stdio-like API wrapper around ICU's other - * formatting and parsing APIs. It is meant to ease the transition of adding - * Unicode support to a preexisting applications using stdio. The following - * is a small list of noticable differences between stdio and ICU I/O's - * ustdio implementation.

- * - *
    - *
  • Locale specific formatting and parsing is only done with file IO.
  • - *
  • u_fstropen can be used to simulate file IO with strings. - * This is similar to the iostream API, and it allows locale specific - * formatting and parsing to be used.
  • - *
  • This API provides uniform formatting and parsing behavior between - * platforms (unlike the standard stdio implementations found on various - * platforms).
  • - *
  • This API is better suited for text data handling than binary data - * handling when compared to the typical stdio implementation.
  • - *
  • You can specify a Transliterator while using the file IO.
  • - *
  • You can specify a file's codepage separately from the default - * system codepage.
  • - *
- * - *

Formatting and Parsing Specification

- * - * General printf format:
- * %[format modifier][width][.precision][type modifier][format] - * - * General scanf format:
- * %[*][format modifier][width][type modifier][format] - * - - - - - - - - - - - - - - - - - - - - - -
formatdefault
printf
type
default
scanf
type
description
%EdoublefloatScientific with an uppercase exponent
%edoublefloatScientific with a lowercase exponent
%GdoublefloatUse %E or %f for best format
%gdoublefloatUse %e or %f for best format
%fdoublefloatSimple floating point without the exponent
%Xint32_tint32_tustdio special uppercase hex radix formatting
%xint32_tint32_tustdio special lowercase hex radix formatting
%dint32_tint32_tDecimal format
%iint32_tint32_tSame as %d
%nint32_tint32_tcount (write the number of UTF-16 codeunits read/written)
%oint32_tint32_tustdio special octal radix formatting
%uuint32_tuint32_tDecimal format
%pvoid *void *Prints the pointer value
%schar *char *Use default converter or specified converter from fopen
%ccharcharUse default converter or specified converter from fopen
-When width is specified for scanf, this acts like a non-NULL-terminated char * string.
-By default, only one char is written.
%SUChar *UChar *Null terminated UTF-16 string
%CUCharUChar16-bit Unicode code unit
-When width is specified for scanf, this acts like a non-NULL-terminated UChar * string
-By default, only one codepoint is written.
%[] UChar *Null terminated UTF-16 string which contains the filtered set of characters specified by the UnicodeSet
%%  Show a percent sign
- -Format modifiers - - - - - - - - - - - - - - - - - - - - - - -
modifierformatstypecomments
%h%d, %i, %o, %xint16_tshort format
%h%uuint16_tshort format
%hcchar(Unimplemented) Use invariant converter
%hschar *(Unimplemented) Use invariant converter
%hCchar(Unimplemented) 8-bit Unicode code unit
%hSchar *(Unimplemented) Null terminated UTF-8 string
%l%d, %i, %o, %xint32_tlong format (no effect)
%l%uuint32_tlong format (no effect)
%lcN/A(Unimplemented) Reserved for future implementation
%lsN/A(Unimplemented) Reserved for future implementation
%lCUChar32(Unimplemented) 32-bit Unicode code unit
%lSUChar32 *(Unimplemented) Null terminated UTF-32 string
%ll%d, %i, %o, %xint64_tlong long format
%ll%uuint64_t(Unimplemented) long long format
%-allN/ALeft justify
%+%d, %i, %o, %x, %e, %f, %g, %E, %GN/AAlways show the plus or minus sign. Needs data for plus sign.
% %d, %i, %o, %x, %e, %f, %g, %E, %GN/AInstead of a "+" output a blank character for positive numbers.
%#%d, %i, %o, %x, %e, %f, %g, %E, %GN/APrecede octal value with 0, hex with 0x and show the - decimal point for floats.
%nallN/AWidth of input/output. num is an actual number from 0 to - some large number.
%.n%e, %f, %g, %E, %F, %GN/ASignificant digits precision. num is an actual number from - 0 to some large number.
If * is used in printf, then the precision is passed in as an argument before the number to be formatted.
- -printf modifier -%* int32_t Next argument after this one specifies the width - -scanf modifier -%* N/A This field is scanned, but not stored - -

If you are using this C API instead of the ustream.h API for C++, -you can use one of the following u_fprintf examples to display a UnicodeString.

- -

-    UFILE *out = u_finit(stdout, NULL, NULL);
-    UnicodeString string1("string 1");
-    UnicodeString string2("string 2");
-    u_fprintf(out, "%S\n", string1.getTerminatedBuffer());
-    u_fprintf(out, "%.*S\n", string2.length(), string2.getBuffer());
-    u_fclose(out);
-
- - */ - - -/** - * When an end of file is encountered, this value can be returned. - * @see u_fgetc - * @stable 3.0 - */ -#define U_EOF 0xFFFF - -/** Forward declaration of a Unicode-aware file @stable 3.0 */ -typedef struct UFILE UFILE; - -/** - * Enum for which direction of stream a transliterator applies to. - * @see u_fsettransliterator - * @stable ICU 3.0 - */ -typedef enum { - U_READ = 1, - U_WRITE = 2, - U_READWRITE =3 /* == (U_READ | U_WRITE) */ -} UFileDirection; - -/** - * Open a UFILE. - * A UFILE is a wrapper around a FILE* that is locale and codepage aware. - * That is, data written to a UFILE will be formatted using the conventions - * specified by that UFILE's Locale; this data will be in the character set - * specified by that UFILE's codepage. - * @param filename The name of the file to open. - * @param perm The read/write permission for the UFILE; one of "r", "w", "rw" - * @param locale The locale whose conventions will be used to format - * and parse output. If this parameter is NULL, the default locale will - * be used. - * @param codepage The codepage in which data will be written to and - * read from the file. If this paramter is NULL the system default codepage - * will be used. - * @return A new UFILE, or NULL if an error occurred. - * @stable ICU 3.0 - */ -U_STABLE UFILE* U_EXPORT2 -u_fopen(const char *filename, - const char *perm, - const char *locale, - const char *codepage); - -/** - * Open a UFILE with a UChar* filename - * A UFILE is a wrapper around a FILE* that is locale and codepage aware. - * That is, data written to a UFILE will be formatted using the conventions - * specified by that UFILE's Locale; this data will be in the character set - * specified by that UFILE's codepage. - * @param filename The name of the file to open. - * @param perm The read/write permission for the UFILE; one of "r", "w", "rw" - * @param locale The locale whose conventions will be used to format - * and parse output. If this parameter is NULL, the default locale will - * be used. - * @param codepage The codepage in which data will be written to and - * read from the file. If this paramter is NULL the system default codepage - * will be used. - * @return A new UFILE, or NULL if an error occurred. - * @stable ICU 54 - */ -U_STABLE UFILE* U_EXPORT2 -u_fopen_u(const UChar *filename, - const char *perm, - const char *locale, - const char *codepage); - -/** - * Open a UFILE on top of an existing FILE* stream. The FILE* stream - * ownership remains with the caller. To have the UFILE take over - * ownership and responsibility for the FILE* stream, use the - * function u_fadopt. - * @param f The FILE* to which this UFILE will attach and use. - * @param locale The locale whose conventions will be used to format - * and parse output. If this parameter is NULL, the default locale will - * be used. - * @param codepage The codepage in which data will be written to and - * read from the file. If this paramter is NULL, data will be written and - * read using the default codepage for locale, unless locale - * is NULL, in which case the system default codepage will be used. - * @return A new UFILE, or NULL if an error occurred. - * @stable ICU 3.0 - */ -U_STABLE UFILE* U_EXPORT2 -u_finit(FILE *f, - const char *locale, - const char *codepage); - -/** - * Open a UFILE on top of an existing FILE* stream. The FILE* stream - * ownership is transferred to the new UFILE. It will be closed when the - * UFILE is closed. - * @param f The FILE* which this UFILE will take ownership of. - * @param locale The locale whose conventions will be used to format - * and parse output. If this parameter is NULL, the default locale will - * be used. - * @param codepage The codepage in which data will be written to and - * read from the file. If this paramter is NULL, data will be written and - * read using the default codepage for locale, unless locale - * is NULL, in which case the system default codepage will be used. - * @return A new UFILE, or NULL if an error occurred. If an error occurs - * the ownership of the FILE* stream remains with the caller. - * @stable ICU 4.4 - */ -U_STABLE UFILE* U_EXPORT2 -u_fadopt(FILE *f, - const char *locale, - const char *codepage); - -/** - * Create a UFILE that can be used for localized formatting or parsing. - * The u_sprintf and u_sscanf functions do not read or write numbers for a - * specific locale. The ustdio.h file functions can be used on this UFILE. - * The string is usable once u_fclose or u_fflush has been called on the - * returned UFILE. - * @param stringBuf The string used for reading or writing. - * @param capacity The number of code units available for use in stringBuf - * @param locale The locale whose conventions will be used to format - * and parse output. If this parameter is NULL, the default locale will - * be used. - * @return A new UFILE, or NULL if an error occurred. - * @stable ICU 3.0 - */ -U_STABLE UFILE* U_EXPORT2 -u_fstropen(UChar *stringBuf, - int32_t capacity, - const char *locale); - -/** - * Close a UFILE. Implies u_fflush first. - * @param file The UFILE to close. - * @stable ICU 3.0 - * @see u_fflush - */ -U_STABLE void U_EXPORT2 -u_fclose(UFILE *file); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUFILEPointer - * "Smart pointer" class, closes a UFILE via u_fclose(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUFILEPointer, UFILE, u_fclose); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Tests if the UFILE is at the end of the file stream. - * @param f The UFILE from which to read. - * @return Returns TRUE after the first read operation that attempts to - * read past the end of the file. It returns FALSE if the current position is - * not end of file. - * @stable ICU 3.0 -*/ -U_STABLE UBool U_EXPORT2 -u_feof(UFILE *f); - -/** - * Flush output of a UFILE. Implies a flush of - * converter/transliterator state. (That is, a logical break is - * made in the output stream - for example if a different type of - * output is desired.) The underlying OS level file is also flushed. - * Note that for a stateful encoding, the converter may write additional - * bytes to return the stream to default state. - * @param file The UFILE to flush. - * @stable ICU 3.0 - */ -U_STABLE void U_EXPORT2 -u_fflush(UFILE *file); - -/** - * Rewind the file pointer to the beginning of the file. - * @param file The UFILE to rewind. - * @stable ICU 3.0 - */ -U_STABLE void -u_frewind(UFILE *file); - -/** - * Get the FILE* associated with a UFILE. - * @param f The UFILE - * @return A FILE*, owned by the UFILE. (The FILE must not be modified or closed) - * @stable ICU 3.0 - */ -U_STABLE FILE* U_EXPORT2 -u_fgetfile(UFILE *f); - -#if !UCONFIG_NO_FORMATTING - -/** - * Get the locale whose conventions are used to format and parse output. - * This is the same locale passed in the preceding call tou_fsetlocale - * or u_fopen. - * @param file The UFILE to set. - * @return The locale whose conventions are used to format and parse output. - * @stable ICU 3.0 - */ -U_STABLE const char* U_EXPORT2 -u_fgetlocale(UFILE *file); - -/** - * Set the locale whose conventions will be used to format and parse output. - * @param locale The locale whose conventions will be used to format - * and parse output. - * @param file The UFILE to query. - * @return NULL if successful, otherwise a negative number. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_fsetlocale(UFILE *file, - const char *locale); - -#endif - -/** - * Get the codepage in which data is written to and read from the UFILE. - * This is the same codepage passed in the preceding call to - * u_fsetcodepage or u_fopen. - * @param file The UFILE to query. - * @return The codepage in which data is written to and read from the UFILE, - * or NULL if an error occurred. - * @stable ICU 3.0 - */ -U_STABLE const char* U_EXPORT2 -u_fgetcodepage(UFILE *file); - -/** - * Set the codepage in which data will be written to and read from the UFILE. - * All Unicode data written to the UFILE will be converted to this codepage - * before it is written to the underlying FILE*. It it generally a bad idea to - * mix codepages within a file. This should only be called right - * after opening the UFile, or after calling u_frewind. - * @param codepage The codepage in which data will be written to - * and read from the file. For example "latin-1" or "ibm-943". - * A value of NULL means the default codepage for the UFILE's current - * locale will be used. - * @param file The UFILE to set. - * @return 0 if successful, otherwise a negative number. - * @see u_frewind - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_fsetcodepage(const char *codepage, - UFILE *file); - - -/** - * Returns an alias to the converter being used for this file. - * @param f The UFILE to get the value from - * @return alias to the converter (The converter must not be modified or closed) - * @stable ICU 3.0 - */ -U_STABLE UConverter* U_EXPORT2 u_fgetConverter(UFILE *f); - -#if !UCONFIG_NO_FORMATTING -/** - * Returns an alias to the number formatter being used for this file. - * @param f The UFILE to get the value from - * @return alias to the number formatter (The formatter must not be modified or closed) - * @stable ICU 51 -*/ - U_STABLE const UNumberFormat* U_EXPORT2 u_fgetNumberFormat(UFILE *f); - -/* Output functions */ - -/** - * Write formatted data to stdout. - * @param patternSpecification A pattern specifying how u_printf will - * interpret the variable arguments received and format the data. - * @return The number of Unicode characters written to stdout - * @stable ICU 49 - */ -U_STABLE int32_t U_EXPORT2 -u_printf(const char *patternSpecification, - ... ); - -/** - * Write formatted data to a UFILE. - * @param f The UFILE to which to write. - * @param patternSpecification A pattern specifying how u_fprintf will - * interpret the variable arguments received and format the data. - * @return The number of Unicode characters written to f. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_fprintf(UFILE *f, - const char *patternSpecification, - ... ); - -/** - * Write formatted data to a UFILE. - * This is identical to u_fprintf, except that it will - * not call va_start and va_end. - * @param f The UFILE to which to write. - * @param patternSpecification A pattern specifying how u_fprintf will - * interpret the variable arguments received and format the data. - * @param ap The argument list to use. - * @return The number of Unicode characters written to f. - * @see u_fprintf - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_vfprintf(UFILE *f, - const char *patternSpecification, - va_list ap); - -/** - * Write formatted data to stdout. - * @param patternSpecification A pattern specifying how u_printf_u will - * interpret the variable arguments received and format the data. - * @return The number of Unicode characters written to stdout - * @stable ICU 49 - */ -U_STABLE int32_t U_EXPORT2 -u_printf_u(const UChar *patternSpecification, - ... ); - -/** - * Get a UFILE for stdout. - * @return UFILE that writes to stdout - * @stable ICU 49 - */ -U_STABLE UFILE * U_EXPORT2 -u_get_stdout(void); - -/** - * Write formatted data to a UFILE. - * @param f The UFILE to which to write. - * @param patternSpecification A pattern specifying how u_fprintf will - * interpret the variable arguments received and format the data. - * @return The number of Unicode characters written to f. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_fprintf_u(UFILE *f, - const UChar *patternSpecification, - ... ); - -/** - * Write formatted data to a UFILE. - * This is identical to u_fprintf_u, except that it will - * not call va_start and va_end. - * @param f The UFILE to which to write. - * @param patternSpecification A pattern specifying how u_fprintf will - * interpret the variable arguments received and format the data. - * @param ap The argument list to use. - * @return The number of Unicode characters written to f. - * @see u_fprintf_u - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_vfprintf_u(UFILE *f, - const UChar *patternSpecification, - va_list ap); -#endif -/** - * Write a Unicode to a UFILE. The null (U+0000) terminated UChar* - * s will be written to f, excluding the NULL terminator. - * A newline will be added to f. - * @param s The UChar* to write. - * @param f The UFILE to which to write. - * @return A non-negative number if successful, EOF otherwise. - * @see u_file_write - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_fputs(const UChar *s, - UFILE *f); - -/** - * Write a UChar to a UFILE. - * @param uc The UChar to write. - * @param f The UFILE to which to write. - * @return The character written if successful, EOF otherwise. - * @stable ICU 3.0 - */ -U_STABLE UChar32 U_EXPORT2 -u_fputc(UChar32 uc, - UFILE *f); - -/** - * Write Unicode to a UFILE. - * The ustring passed in will be converted to the UFILE's underlying - * codepage before it is written. - * @param ustring A pointer to the Unicode data to write. - * @param count The number of Unicode characters to write - * @param f The UFILE to which to write. - * @return The number of Unicode characters written. - * @see u_fputs - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_file_write(const UChar *ustring, - int32_t count, - UFILE *f); - - -/* Input functions */ -#if !UCONFIG_NO_FORMATTING - -/** - * Read formatted data from a UFILE. - * @param f The UFILE from which to read. - * @param patternSpecification A pattern specifying how u_fscanf will - * interpret the variable arguments received and parse the data. - * @return The number of items successfully converted and assigned, or EOF - * if an error occurred. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_fscanf(UFILE *f, - const char *patternSpecification, - ... ); - -/** - * Read formatted data from a UFILE. - * This is identical to u_fscanf, except that it will - * not call va_start and va_end. - * @param f The UFILE from which to read. - * @param patternSpecification A pattern specifying how u_fscanf will - * interpret the variable arguments received and parse the data. - * @param ap The argument list to use. - * @return The number of items successfully converted and assigned, or EOF - * if an error occurred. - * @see u_fscanf - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_vfscanf(UFILE *f, - const char *patternSpecification, - va_list ap); - -/** - * Read formatted data from a UFILE. - * @param f The UFILE from which to read. - * @param patternSpecification A pattern specifying how u_fscanf will - * interpret the variable arguments received and parse the data. - * @return The number of items successfully converted and assigned, or EOF - * if an error occurred. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_fscanf_u(UFILE *f, - const UChar *patternSpecification, - ... ); - -/** - * Read formatted data from a UFILE. - * This is identical to u_fscanf_u, except that it will - * not call va_start and va_end. - * @param f The UFILE from which to read. - * @param patternSpecification A pattern specifying how u_fscanf will - * interpret the variable arguments received and parse the data. - * @param ap The argument list to use. - * @return The number of items successfully converted and assigned, or EOF - * if an error occurred. - * @see u_fscanf_u - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_vfscanf_u(UFILE *f, - const UChar *patternSpecification, - va_list ap); -#endif - -/** - * Read one line of text into a UChar* string from a UFILE. The newline - * at the end of the line is read into the string. The string is always - * null terminated - * @param f The UFILE from which to read. - * @param n The maximum number of characters - 1 to read. - * @param s The UChar* to receive the read data. Characters will be - * stored successively in s until a newline or EOF is - * reached. A null character (U+0000) will be appended to s. - * @return A pointer to s, or NULL if no characters were available. - * @stable ICU 3.0 - */ -U_STABLE UChar* U_EXPORT2 -u_fgets(UChar *s, - int32_t n, - UFILE *f); - -/** - * Read a UChar from a UFILE. It is recommended that u_fgetcx - * used instead for proper parsing functions, but sometimes reading - * code units is needed instead of codepoints. - * - * @param f The UFILE from which to read. - * @return The UChar value read, or U+FFFF if no character was available. - * @stable ICU 3.0 - */ -U_STABLE UChar U_EXPORT2 -u_fgetc(UFILE *f); - -/** - * Read a UChar32 from a UFILE. - * - * @param f The UFILE from which to read. - * @return The UChar32 value read, or U_EOF if no character was - * available, or U+FFFFFFFF if an ill-formed character was - * encountered. - * @see u_unescape() - * @stable ICU 3.0 - */ -U_STABLE UChar32 U_EXPORT2 -u_fgetcx(UFILE *f); - -/** - * Unget a UChar from a UFILE. - * If this function is not the first to operate on f after a call - * to u_fgetc, the results are undefined. - * If this function is passed a character that was not recieved from the - * previous u_fgetc or u_fgetcx call, the results are undefined. - * @param c The UChar to put back on the stream. - * @param f The UFILE to receive c. - * @return The UChar32 value put back if successful, U_EOF otherwise. - * @stable ICU 3.0 - */ -U_STABLE UChar32 U_EXPORT2 -u_fungetc(UChar32 c, - UFILE *f); - -/** - * Read Unicode from a UFILE. - * Bytes will be converted from the UFILE's underlying codepage, with - * subsequent conversion to Unicode. The data will not be NULL terminated. - * @param chars A pointer to receive the Unicode data. - * @param count The number of Unicode characters to read. - * @param f The UFILE from which to read. - * @return The number of Unicode characters read. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_file_read(UChar *chars, - int32_t count, - UFILE *f); - -#if !UCONFIG_NO_TRANSLITERATION - -/** - * Set a transliterator on the UFILE. The transliterator will be owned by the - * UFILE. - * @param file The UFILE to set transliteration on - * @param adopt The UTransliterator to set. Can be NULL, which will - * mean that no transliteration is used. - * @param direction either U_READ, U_WRITE, or U_READWRITE - sets - * which direction the transliterator is to be applied to. If - * U_READWRITE, the "Read" transliteration will be in the inverse - * direction. - * @param status ICU error code. - * @return The previously set transliterator, owned by the - * caller. If U_READWRITE is specified, only the WRITE transliterator - * is returned. In most cases, the caller should call utrans_close() - * on the result of this function. - * @stable ICU 3.0 - */ -U_STABLE UTransliterator* U_EXPORT2 -u_fsettransliterator(UFILE *file, UFileDirection direction, - UTransliterator *adopt, UErrorCode *status); - -#endif - - -/* Output string functions */ -#if !UCONFIG_NO_FORMATTING - - -/** - * Write formatted data to a Unicode string. - * - * @param buffer The Unicode String to which to write. - * @param patternSpecification A pattern specifying how u_sprintf will - * interpret the variable arguments received and format the data. - * @return The number of Unicode code units written to buffer. This - * does not include the terminating null character. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_sprintf(UChar *buffer, - const char *patternSpecification, - ... ); - -/** - * Write formatted data to a Unicode string. When the number of code units - * required to store the data exceeds count, then count code - * units of data are stored in buffer and a negative value is - * returned. When the number of code units required to store the data equals - * count, the string is not null terminated and count is - * returned. - * - * @param buffer The Unicode String to which to write. - * @param count The number of code units to read. - * @param patternSpecification A pattern specifying how u_sprintf will - * interpret the variable arguments received and format the data. - * @return The number of Unicode characters that would have been written to - * buffer had count been sufficiently large. This does not include - * the terminating null character. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_snprintf(UChar *buffer, - int32_t count, - const char *patternSpecification, - ... ); - -/** - * Write formatted data to a Unicode string. - * This is identical to u_sprintf, except that it will - * not call va_start and va_end. - * - * @param buffer The Unicode string to which to write. - * @param patternSpecification A pattern specifying how u_sprintf will - * interpret the variable arguments received and format the data. - * @param ap The argument list to use. - * @return The number of Unicode characters written to buffer. - * @see u_sprintf - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_vsprintf(UChar *buffer, - const char *patternSpecification, - va_list ap); - -/** - * Write formatted data to a Unicode string. - * This is identical to u_snprintf, except that it will - * not call va_start and va_end.

- * When the number of code units required to store the data exceeds - * count, then count code units of data are stored in - * buffer and a negative value is returned. When the number of code - * units required to store the data equals count, the string is not - * null terminated and count is returned. - * - * @param buffer The Unicode string to which to write. - * @param count The number of code units to read. - * @param patternSpecification A pattern specifying how u_sprintf will - * interpret the variable arguments received and format the data. - * @param ap The argument list to use. - * @return The number of Unicode characters that would have been written to - * buffer had count been sufficiently large. - * @see u_sprintf - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_vsnprintf(UChar *buffer, - int32_t count, - const char *patternSpecification, - va_list ap); - -/** - * Write formatted data to a Unicode string. - * - * @param buffer The Unicode string to which to write. - * @param patternSpecification A pattern specifying how u_sprintf will - * interpret the variable arguments received and format the data. - * @return The number of Unicode characters written to buffer. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_sprintf_u(UChar *buffer, - const UChar *patternSpecification, - ... ); - -/** - * Write formatted data to a Unicode string. When the number of code units - * required to store the data exceeds count, then count code - * units of data are stored in buffer and a negative value is - * returned. When the number of code units required to store the data equals - * count, the string is not null terminated and count is - * returned. - * - * @param buffer The Unicode string to which to write. - * @param count The number of code units to read. - * @param patternSpecification A pattern specifying how u_sprintf will - * interpret the variable arguments received and format the data. - * @return The number of Unicode characters that would have been written to - * buffer had count been sufficiently large. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_snprintf_u(UChar *buffer, - int32_t count, - const UChar *patternSpecification, - ... ); - -/** - * Write formatted data to a Unicode string. - * This is identical to u_sprintf_u, except that it will - * not call va_start and va_end. - * - * @param buffer The Unicode string to which to write. - * @param patternSpecification A pattern specifying how u_sprintf will - * interpret the variable arguments received and format the data. - * @param ap The argument list to use. - * @return The number of Unicode characters written to f. - * @see u_sprintf_u - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_vsprintf_u(UChar *buffer, - const UChar *patternSpecification, - va_list ap); - -/** - * Write formatted data to a Unicode string. - * This is identical to u_snprintf_u, except that it will - * not call va_start and va_end. - * When the number of code units required to store the data exceeds - * count, then count code units of data are stored in - * buffer and a negative value is returned. When the number of code - * units required to store the data equals count, the string is not - * null terminated and count is returned. - * - * @param buffer The Unicode string to which to write. - * @param count The number of code units to read. - * @param patternSpecification A pattern specifying how u_sprintf will - * interpret the variable arguments received and format the data. - * @param ap The argument list to use. - * @return The number of Unicode characters that would have been written to - * f had count been sufficiently large. - * @see u_sprintf_u - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_vsnprintf_u(UChar *buffer, - int32_t count, - const UChar *patternSpecification, - va_list ap); - -/* Input string functions */ - -/** - * Read formatted data from a Unicode string. - * - * @param buffer The Unicode string from which to read. - * @param patternSpecification A pattern specifying how u_sscanf will - * interpret the variable arguments received and parse the data. - * @return The number of items successfully converted and assigned, or EOF - * if an error occurred. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_sscanf(const UChar *buffer, - const char *patternSpecification, - ... ); - -/** - * Read formatted data from a Unicode string. - * This is identical to u_sscanf, except that it will - * not call va_start and va_end. - * - * @param buffer The Unicode string from which to read. - * @param patternSpecification A pattern specifying how u_sscanf will - * interpret the variable arguments received and parse the data. - * @param ap The argument list to use. - * @return The number of items successfully converted and assigned, or EOF - * if an error occurred. - * @see u_sscanf - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_vsscanf(const UChar *buffer, - const char *patternSpecification, - va_list ap); - -/** - * Read formatted data from a Unicode string. - * - * @param buffer The Unicode string from which to read. - * @param patternSpecification A pattern specifying how u_sscanf will - * interpret the variable arguments received and parse the data. - * @return The number of items successfully converted and assigned, or EOF - * if an error occurred. - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_sscanf_u(const UChar *buffer, - const UChar *patternSpecification, - ... ); - -/** - * Read formatted data from a Unicode string. - * This is identical to u_sscanf_u, except that it will - * not call va_start and va_end. - * - * @param buffer The Unicode string from which to read. - * @param patternSpecification A pattern specifying how u_sscanf will - * interpret the variable arguments received and parse the data. - * @param ap The argument list to use. - * @return The number of items successfully converted and assigned, or EOF - * if an error occurred. - * @see u_sscanf_u - * @stable ICU 3.0 - */ -U_STABLE int32_t U_EXPORT2 -u_vsscanf_u(const UChar *buffer, - const UChar *patternSpecification, - va_list ap); - - -#endif -#endif -#endif - - diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustream.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustream.h deleted file mode 100644 index f185c453f8..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustream.h +++ /dev/null @@ -1,65 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 2001-2014 International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* FILE NAME : ustream.h -* -* Modification History: -* -* Date Name Description -* 06/25/2001 grhoten Move iostream from unistr.h -****************************************************************************** -*/ - -#ifndef USTREAM_H -#define USTREAM_H - -#include "unicode/unistr.h" - -#if !UCONFIG_NO_CONVERSION // not available without conversion - -/** - * \file - * \brief C++ API: Unicode iostream like API - * - * At this time, this API is very limited. It contains - * operator<< and operator>> for UnicodeString manipulation with the - * C++ I/O stream API. - */ - -#if defined(__GLIBCXX__) -namespace std { class type_info; } // WORKAROUND: http://llvm.org/bugs/show_bug.cgi?id=13364 -#endif - -#include - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -/** - * Write the contents of a UnicodeString to a C++ ostream. This functions writes - * the characters in a UnicodeString to an ostream. The UChars in the - * UnicodeString are converted to the char based ostream with the default - * converter. - * @stable 3.0 - */ -U_IO_API std::ostream & U_EXPORT2 operator<<(std::ostream& stream, const UnicodeString& s); - -/** - * Write the contents from a C++ istream to a UnicodeString. The UChars in the - * UnicodeString are converted from the char based istream with the default - * converter. - * @stable 3.0 - */ -U_IO_API std::istream & U_EXPORT2 operator>>(std::istream& stream, UnicodeString& s); -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif - -/* No operator for UChar because it can conflict with wchar_t */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustring.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustring.h deleted file mode 100644 index b173907dbf..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustring.h +++ /dev/null @@ -1,1721 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1998-2014, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* -* File ustring.h -* -* Modification History: -* -* Date Name Description -* 12/07/98 bertrand Creation. -****************************************************************************** -*/ - -#ifndef USTRING_H -#define USTRING_H - -#include "unicode/utypes.h" -#include "unicode/putil.h" -#include "unicode/uiter.h" - -/** - * \def UBRK_TYPEDEF_UBREAK_ITERATOR - * @internal - */ - -#ifndef UBRK_TYPEDEF_UBREAK_ITERATOR -# define UBRK_TYPEDEF_UBREAK_ITERATOR -/** Simple declaration for u_strToTitle() to avoid including unicode/ubrk.h. @stable ICU 2.1*/ - typedef struct UBreakIterator UBreakIterator; -#endif - -/** - * \file - * \brief C API: Unicode string handling functions - * - * These C API functions provide general Unicode string handling. - * - * Some functions are equivalent in name, signature, and behavior to the ANSI C - * functions. (For example, they do not check for bad arguments like NULL string pointers.) - * In some cases, only the thread-safe variant of such a function is implemented here - * (see u_strtok_r()). - * - * Other functions provide more Unicode-specific functionality like locale-specific - * upper/lower-casing and string comparison in code point order. - * - * ICU uses 16-bit Unicode (UTF-16) in the form of arrays of UChar code units. - * UTF-16 encodes each Unicode code point with either one or two UChar code units. - * (This is the default form of Unicode, and a forward-compatible extension of the original, - * fixed-width form that was known as UCS-2. UTF-16 superseded UCS-2 with Unicode 2.0 - * in 1996.) - * - * Some APIs accept a 32-bit UChar32 value for a single code point. - * - * ICU also handles 16-bit Unicode text with unpaired surrogates. - * Such text is not well-formed UTF-16. - * Code-point-related functions treat unpaired surrogates as surrogate code points, - * i.e., as separate units. - * - * Although UTF-16 is a variable-width encoding form (like some legacy multi-byte encodings), - * it is much more efficient even for random access because the code unit values - * for single-unit characters vs. lead units vs. trail units are completely disjoint. - * This means that it is easy to determine character (code point) boundaries from - * random offsets in the string. - * - * Unicode (UTF-16) string processing is optimized for the single-unit case. - * Although it is important to support supplementary characters - * (which use pairs of lead/trail code units called "surrogates"), - * their occurrence is rare. Almost all characters in modern use require only - * a single UChar code unit (i.e., their code point values are <=0xffff). - * - * For more details see the User Guide Strings chapter (http://icu-project.org/userguide/strings.html). - * For a discussion of the handling of unpaired surrogates see also - * Jitterbug 2145 and its icu mailing list proposal on 2002-sep-18. - */ - -/** - * \defgroup ustring_ustrlen String Length - * \ingroup ustring_strlen - */ -/*@{*/ -/** - * Determine the length of an array of UChar. - * - * @param s The array of UChars, NULL (U+0000) terminated. - * @return The number of UChars in chars, minus the terminator. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_strlen(const UChar *s); -/*@}*/ - -/** - * Count Unicode code points in the length UChar code units of the string. - * A code point may occupy either one or two UChar code units. - * Counting code points involves reading all code units. - * - * This functions is basically the inverse of the U16_FWD_N() macro (see utf.h). - * - * @param s The input string. - * @param length The number of UChar code units to be checked, or -1 to count all - * code points before the first NUL (U+0000). - * @return The number of code points in the specified code units. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_countChar32(const UChar *s, int32_t length); - -/** - * Check if the string contains more Unicode code points than a certain number. - * This is more efficient than counting all code points in the entire string - * and comparing that number with a threshold. - * This function may not need to scan the string at all if the length is known - * (not -1 for NUL-termination) and falls within a certain range, and - * never needs to count more than 'number+1' code points. - * Logically equivalent to (u_countChar32(s, length)>number). - * A Unicode code point may occupy either one or two UChar code units. - * - * @param s The input string. - * @param length The length of the string, or -1 if it is NUL-terminated. - * @param number The number of code points in the string is compared against - * the 'number' parameter. - * @return Boolean value for whether the string contains more Unicode code points - * than 'number'. Same as (u_countChar32(s, length)>number). - * @stable ICU 2.4 - */ -U_STABLE UBool U_EXPORT2 -u_strHasMoreChar32Than(const UChar *s, int32_t length, int32_t number); - -/** - * Concatenate two ustrings. Appends a copy of src, - * including the null terminator, to dst. The initial copied - * character from src overwrites the null terminator in dst. - * - * @param dst The destination string. - * @param src The source string. - * @return A pointer to dst. - * @stable ICU 2.0 - */ -U_STABLE UChar* U_EXPORT2 -u_strcat(UChar *dst, - const UChar *src); - -/** - * Concatenate two ustrings. - * Appends at most n characters from src to dst. - * Adds a terminating NUL. - * If src is too long, then only n-1 characters will be copied - * before the terminating NUL. - * If n<=0 then dst is not modified. - * - * @param dst The destination string. - * @param src The source string (can be NULL/invalid if n<=0). - * @param n The maximum number of characters to append; no-op if <=0. - * @return A pointer to dst. - * @stable ICU 2.0 - */ -U_STABLE UChar* U_EXPORT2 -u_strncat(UChar *dst, - const UChar *src, - int32_t n); - -/** - * Find the first occurrence of a substring in a string. - * The substring is found at code point boundaries. - * That means that if the substring begins with - * a trail surrogate or ends with a lead surrogate, - * then it is found only if these surrogates stand alone in the text. - * Otherwise, the substring edge units would be matched against - * halves of surrogate pairs. - * - * @param s The string to search (NUL-terminated). - * @param substring The substring to find (NUL-terminated). - * @return A pointer to the first occurrence of substring in s, - * or s itself if the substring is empty, - * or NULL if substring is not in s. - * @stable ICU 2.0 - * - * @see u_strrstr - * @see u_strFindFirst - * @see u_strFindLast - */ -U_STABLE UChar * U_EXPORT2 -u_strstr(const UChar *s, const UChar *substring); - -/** - * Find the first occurrence of a substring in a string. - * The substring is found at code point boundaries. - * That means that if the substring begins with - * a trail surrogate or ends with a lead surrogate, - * then it is found only if these surrogates stand alone in the text. - * Otherwise, the substring edge units would be matched against - * halves of surrogate pairs. - * - * @param s The string to search. - * @param length The length of s (number of UChars), or -1 if it is NUL-terminated. - * @param substring The substring to find (NUL-terminated). - * @param subLength The length of substring (number of UChars), or -1 if it is NUL-terminated. - * @return A pointer to the first occurrence of substring in s, - * or s itself if the substring is empty, - * or NULL if substring is not in s. - * @stable ICU 2.4 - * - * @see u_strstr - * @see u_strFindLast - */ -U_STABLE UChar * U_EXPORT2 -u_strFindFirst(const UChar *s, int32_t length, const UChar *substring, int32_t subLength); - -/** - * Find the first occurrence of a BMP code point in a string. - * A surrogate code point is found only if its match in the text is not - * part of a surrogate pair. - * A NUL character is found at the string terminator. - * - * @param s The string to search (NUL-terminated). - * @param c The BMP code point to find. - * @return A pointer to the first occurrence of c in s - * or NULL if c is not in s. - * @stable ICU 2.0 - * - * @see u_strchr32 - * @see u_memchr - * @see u_strstr - * @see u_strFindFirst - */ -U_STABLE UChar * U_EXPORT2 -u_strchr(const UChar *s, UChar c); - -/** - * Find the first occurrence of a code point in a string. - * A surrogate code point is found only if its match in the text is not - * part of a surrogate pair. - * A NUL character is found at the string terminator. - * - * @param s The string to search (NUL-terminated). - * @param c The code point to find. - * @return A pointer to the first occurrence of c in s - * or NULL if c is not in s. - * @stable ICU 2.0 - * - * @see u_strchr - * @see u_memchr32 - * @see u_strstr - * @see u_strFindFirst - */ -U_STABLE UChar * U_EXPORT2 -u_strchr32(const UChar *s, UChar32 c); - -/** - * Find the last occurrence of a substring in a string. - * The substring is found at code point boundaries. - * That means that if the substring begins with - * a trail surrogate or ends with a lead surrogate, - * then it is found only if these surrogates stand alone in the text. - * Otherwise, the substring edge units would be matched against - * halves of surrogate pairs. - * - * @param s The string to search (NUL-terminated). - * @param substring The substring to find (NUL-terminated). - * @return A pointer to the last occurrence of substring in s, - * or s itself if the substring is empty, - * or NULL if substring is not in s. - * @stable ICU 2.4 - * - * @see u_strstr - * @see u_strFindFirst - * @see u_strFindLast - */ -U_STABLE UChar * U_EXPORT2 -u_strrstr(const UChar *s, const UChar *substring); - -/** - * Find the last occurrence of a substring in a string. - * The substring is found at code point boundaries. - * That means that if the substring begins with - * a trail surrogate or ends with a lead surrogate, - * then it is found only if these surrogates stand alone in the text. - * Otherwise, the substring edge units would be matched against - * halves of surrogate pairs. - * - * @param s The string to search. - * @param length The length of s (number of UChars), or -1 if it is NUL-terminated. - * @param substring The substring to find (NUL-terminated). - * @param subLength The length of substring (number of UChars), or -1 if it is NUL-terminated. - * @return A pointer to the last occurrence of substring in s, - * or s itself if the substring is empty, - * or NULL if substring is not in s. - * @stable ICU 2.4 - * - * @see u_strstr - * @see u_strFindLast - */ -U_STABLE UChar * U_EXPORT2 -u_strFindLast(const UChar *s, int32_t length, const UChar *substring, int32_t subLength); - -/** - * Find the last occurrence of a BMP code point in a string. - * A surrogate code point is found only if its match in the text is not - * part of a surrogate pair. - * A NUL character is found at the string terminator. - * - * @param s The string to search (NUL-terminated). - * @param c The BMP code point to find. - * @return A pointer to the last occurrence of c in s - * or NULL if c is not in s. - * @stable ICU 2.4 - * - * @see u_strrchr32 - * @see u_memrchr - * @see u_strrstr - * @see u_strFindLast - */ -U_STABLE UChar * U_EXPORT2 -u_strrchr(const UChar *s, UChar c); - -/** - * Find the last occurrence of a code point in a string. - * A surrogate code point is found only if its match in the text is not - * part of a surrogate pair. - * A NUL character is found at the string terminator. - * - * @param s The string to search (NUL-terminated). - * @param c The code point to find. - * @return A pointer to the last occurrence of c in s - * or NULL if c is not in s. - * @stable ICU 2.4 - * - * @see u_strrchr - * @see u_memchr32 - * @see u_strrstr - * @see u_strFindLast - */ -U_STABLE UChar * U_EXPORT2 -u_strrchr32(const UChar *s, UChar32 c); - -/** - * Locates the first occurrence in the string string of any of the characters - * in the string matchSet. - * Works just like C's strpbrk but with Unicode. - * - * @param string The string in which to search, NUL-terminated. - * @param matchSet A NUL-terminated string defining a set of code points - * for which to search in the text string. - * @return A pointer to the character in string that matches one of the - * characters in matchSet, or NULL if no such character is found. - * @stable ICU 2.0 - */ -U_STABLE UChar * U_EXPORT2 -u_strpbrk(const UChar *string, const UChar *matchSet); - -/** - * Returns the number of consecutive characters in string, - * beginning with the first, that do not occur somewhere in matchSet. - * Works just like C's strcspn but with Unicode. - * - * @param string The string in which to search, NUL-terminated. - * @param matchSet A NUL-terminated string defining a set of code points - * for which to search in the text string. - * @return The number of initial characters in string that do not - * occur in matchSet. - * @see u_strspn - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_strcspn(const UChar *string, const UChar *matchSet); - -/** - * Returns the number of consecutive characters in string, - * beginning with the first, that occur somewhere in matchSet. - * Works just like C's strspn but with Unicode. - * - * @param string The string in which to search, NUL-terminated. - * @param matchSet A NUL-terminated string defining a set of code points - * for which to search in the text string. - * @return The number of initial characters in string that do - * occur in matchSet. - * @see u_strcspn - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_strspn(const UChar *string, const UChar *matchSet); - -/** - * The string tokenizer API allows an application to break a string into - * tokens. Unlike strtok(), the saveState (the current pointer within the - * original string) is maintained in saveState. In the first call, the - * argument src is a pointer to the string. In subsequent calls to - * return successive tokens of that string, src must be specified as - * NULL. The value saveState is set by this function to maintain the - * function's position within the string, and on each subsequent call - * you must give this argument the same variable. This function does - * handle surrogate pairs. This function is similar to the strtok_r() - * the POSIX Threads Extension (1003.1c-1995) version. - * - * @param src String containing token(s). This string will be modified. - * After the first call to u_strtok_r(), this argument must - * be NULL to get to the next token. - * @param delim Set of delimiter characters (Unicode code points). - * @param saveState The current pointer within the original string, - * which is set by this function. The saveState - * parameter should the address of a local variable of type - * UChar *. (i.e. defined "UChar *myLocalSaveState" and use - * &myLocalSaveState for this parameter). - * @return A pointer to the next token found in src, or NULL - * when there are no more tokens. - * @stable ICU 2.0 - */ -U_STABLE UChar * U_EXPORT2 -u_strtok_r(UChar *src, - const UChar *delim, - UChar **saveState); - -/** - * Compare two Unicode strings for bitwise equality (code unit order). - * - * @param s1 A string to compare. - * @param s2 A string to compare. - * @return 0 if s1 and s2 are bitwise equal; a negative - * value if s1 is bitwise less than s2,; a positive - * value if s1 is bitwise greater than s2. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_strcmp(const UChar *s1, - const UChar *s2); - -/** - * Compare two Unicode strings in code point order. - * See u_strCompare for details. - * - * @param s1 A string to compare. - * @param s2 A string to compare. - * @return a negative/zero/positive integer corresponding to whether - * the first string is less than/equal to/greater than the second one - * in code point order - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_strcmpCodePointOrder(const UChar *s1, const UChar *s2); - -/** - * Compare two Unicode strings (binary order). - * - * The comparison can be done in code unit order or in code point order. - * They differ only in UTF-16 when - * comparing supplementary code points (U+10000..U+10ffff) - * to BMP code points near the end of the BMP (i.e., U+e000..U+ffff). - * In code unit order, high BMP code points sort after supplementary code points - * because they are stored as pairs of surrogates which are at U+d800..U+dfff. - * - * This functions works with strings of different explicitly specified lengths - * unlike the ANSI C-like u_strcmp() and u_memcmp() etc. - * NUL-terminated strings are possible with length arguments of -1. - * - * @param s1 First source string. - * @param length1 Length of first source string, or -1 if NUL-terminated. - * - * @param s2 Second source string. - * @param length2 Length of second source string, or -1 if NUL-terminated. - * - * @param codePointOrder Choose between code unit order (FALSE) - * and code point order (TRUE). - * - * @return <0 or 0 or >0 as usual for string comparisons - * - * @stable ICU 2.2 - */ -U_STABLE int32_t U_EXPORT2 -u_strCompare(const UChar *s1, int32_t length1, - const UChar *s2, int32_t length2, - UBool codePointOrder); - -/** - * Compare two Unicode strings (binary order) - * as presented by UCharIterator objects. - * Works otherwise just like u_strCompare(). - * - * Both iterators are reset to their start positions. - * When the function returns, it is undefined where the iterators - * have stopped. - * - * @param iter1 First source string iterator. - * @param iter2 Second source string iterator. - * @param codePointOrder Choose between code unit order (FALSE) - * and code point order (TRUE). - * - * @return <0 or 0 or >0 as usual for string comparisons - * - * @see u_strCompare - * - * @stable ICU 2.6 - */ -U_STABLE int32_t U_EXPORT2 -u_strCompareIter(UCharIterator *iter1, UCharIterator *iter2, UBool codePointOrder); - -/** - * Compare two strings case-insensitively using full case folding. - * This is equivalent to - * u_strCompare(u_strFoldCase(s1, options), - * u_strFoldCase(s2, options), - * (options&U_COMPARE_CODE_POINT_ORDER)!=0). - * - * The comparison can be done in UTF-16 code unit order or in code point order. - * They differ only when comparing supplementary code points (U+10000..U+10ffff) - * to BMP code points near the end of the BMP (i.e., U+e000..U+ffff). - * In code unit order, high BMP code points sort after supplementary code points - * because they are stored as pairs of surrogates which are at U+d800..U+dfff. - * - * This functions works with strings of different explicitly specified lengths - * unlike the ANSI C-like u_strcmp() and u_memcmp() etc. - * NUL-terminated strings are possible with length arguments of -1. - * - * @param s1 First source string. - * @param length1 Length of first source string, or -1 if NUL-terminated. - * - * @param s2 Second source string. - * @param length2 Length of second source string, or -1 if NUL-terminated. - * - * @param options A bit set of options: - * - U_FOLD_CASE_DEFAULT or 0 is used for default options: - * Comparison in code unit order with default case folding. - * - * - U_COMPARE_CODE_POINT_ORDER - * Set to choose code point order instead of code unit order - * (see u_strCompare for details). - * - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I - * - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * - * @return <0 or 0 or >0 as usual for string comparisons - * - * @stable ICU 2.2 - */ -U_STABLE int32_t U_EXPORT2 -u_strCaseCompare(const UChar *s1, int32_t length1, - const UChar *s2, int32_t length2, - uint32_t options, - UErrorCode *pErrorCode); - -/** - * Compare two ustrings for bitwise equality. - * Compares at most n characters. - * - * @param ucs1 A string to compare (can be NULL/invalid if n<=0). - * @param ucs2 A string to compare (can be NULL/invalid if n<=0). - * @param n The maximum number of characters to compare; always returns 0 if n<=0. - * @return 0 if s1 and s2 are bitwise equal; a negative - * value if s1 is bitwise less than s2; a positive - * value if s1 is bitwise greater than s2. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_strncmp(const UChar *ucs1, - const UChar *ucs2, - int32_t n); - -/** - * Compare two Unicode strings in code point order. - * This is different in UTF-16 from u_strncmp() if supplementary characters are present. - * For details, see u_strCompare(). - * - * @param s1 A string to compare. - * @param s2 A string to compare. - * @param n The maximum number of characters to compare. - * @return a negative/zero/positive integer corresponding to whether - * the first string is less than/equal to/greater than the second one - * in code point order - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_strncmpCodePointOrder(const UChar *s1, const UChar *s2, int32_t n); - -/** - * Compare two strings case-insensitively using full case folding. - * This is equivalent to u_strcmp(u_strFoldCase(s1, options), u_strFoldCase(s2, options)). - * - * @param s1 A string to compare. - * @param s2 A string to compare. - * @param options A bit set of options: - * - U_FOLD_CASE_DEFAULT or 0 is used for default options: - * Comparison in code unit order with default case folding. - * - * - U_COMPARE_CODE_POINT_ORDER - * Set to choose code point order instead of code unit order - * (see u_strCompare for details). - * - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I - * - * @return A negative, zero, or positive integer indicating the comparison result. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_strcasecmp(const UChar *s1, const UChar *s2, uint32_t options); - -/** - * Compare two strings case-insensitively using full case folding. - * This is equivalent to u_strcmp(u_strFoldCase(s1, at most n, options), - * u_strFoldCase(s2, at most n, options)). - * - * @param s1 A string to compare. - * @param s2 A string to compare. - * @param n The maximum number of characters each string to case-fold and then compare. - * @param options A bit set of options: - * - U_FOLD_CASE_DEFAULT or 0 is used for default options: - * Comparison in code unit order with default case folding. - * - * - U_COMPARE_CODE_POINT_ORDER - * Set to choose code point order instead of code unit order - * (see u_strCompare for details). - * - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I - * - * @return A negative, zero, or positive integer indicating the comparison result. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_strncasecmp(const UChar *s1, const UChar *s2, int32_t n, uint32_t options); - -/** - * Compare two strings case-insensitively using full case folding. - * This is equivalent to u_strcmp(u_strFoldCase(s1, n, options), - * u_strFoldCase(s2, n, options)). - * - * @param s1 A string to compare. - * @param s2 A string to compare. - * @param length The number of characters in each string to case-fold and then compare. - * @param options A bit set of options: - * - U_FOLD_CASE_DEFAULT or 0 is used for default options: - * Comparison in code unit order with default case folding. - * - * - U_COMPARE_CODE_POINT_ORDER - * Set to choose code point order instead of code unit order - * (see u_strCompare for details). - * - * - U_FOLD_CASE_EXCLUDE_SPECIAL_I - * - * @return A negative, zero, or positive integer indicating the comparison result. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_memcasecmp(const UChar *s1, const UChar *s2, int32_t length, uint32_t options); - -/** - * Copy a ustring. Adds a null terminator. - * - * @param dst The destination string. - * @param src The source string. - * @return A pointer to dst. - * @stable ICU 2.0 - */ -U_STABLE UChar* U_EXPORT2 -u_strcpy(UChar *dst, - const UChar *src); - -/** - * Copy a ustring. - * Copies at most n characters. The result will be null terminated - * if the length of src is less than n. - * - * @param dst The destination string. - * @param src The source string (can be NULL/invalid if n<=0). - * @param n The maximum number of characters to copy; no-op if <=0. - * @return A pointer to dst. - * @stable ICU 2.0 - */ -U_STABLE UChar* U_EXPORT2 -u_strncpy(UChar *dst, - const UChar *src, - int32_t n); - -#if !UCONFIG_NO_CONVERSION - -/** - * Copy a byte string encoded in the default codepage to a ustring. - * Adds a null terminator. - * Performs a host byte to UChar conversion - * - * @param dst The destination string. - * @param src The source string. - * @return A pointer to dst. - * @stable ICU 2.0 - */ -U_STABLE UChar* U_EXPORT2 u_uastrcpy(UChar *dst, - const char *src ); - -/** - * Copy a byte string encoded in the default codepage to a ustring. - * Copies at most n characters. The result will be null terminated - * if the length of src is less than n. - * Performs a host byte to UChar conversion - * - * @param dst The destination string. - * @param src The source string. - * @param n The maximum number of characters to copy. - * @return A pointer to dst. - * @stable ICU 2.0 - */ -U_STABLE UChar* U_EXPORT2 u_uastrncpy(UChar *dst, - const char *src, - int32_t n); - -/** - * Copy ustring to a byte string encoded in the default codepage. - * Adds a null terminator. - * Performs a UChar to host byte conversion - * - * @param dst The destination string. - * @param src The source string. - * @return A pointer to dst. - * @stable ICU 2.0 - */ -U_STABLE char* U_EXPORT2 u_austrcpy(char *dst, - const UChar *src ); - -/** - * Copy ustring to a byte string encoded in the default codepage. - * Copies at most n characters. The result will be null terminated - * if the length of src is less than n. - * Performs a UChar to host byte conversion - * - * @param dst The destination string. - * @param src The source string. - * @param n The maximum number of characters to copy. - * @return A pointer to dst. - * @stable ICU 2.0 - */ -U_STABLE char* U_EXPORT2 u_austrncpy(char *dst, - const UChar *src, - int32_t n ); - -#endif - -/** - * Synonym for memcpy(), but with UChars only. - * @param dest The destination string - * @param src The source string (can be NULL/invalid if count<=0) - * @param count The number of characters to copy; no-op if <=0 - * @return A pointer to dest - * @stable ICU 2.0 - */ -U_STABLE UChar* U_EXPORT2 -u_memcpy(UChar *dest, const UChar *src, int32_t count); - -/** - * Synonym for memmove(), but with UChars only. - * @param dest The destination string - * @param src The source string (can be NULL/invalid if count<=0) - * @param count The number of characters to move; no-op if <=0 - * @return A pointer to dest - * @stable ICU 2.0 - */ -U_STABLE UChar* U_EXPORT2 -u_memmove(UChar *dest, const UChar *src, int32_t count); - -/** - * Initialize count characters of dest to c. - * - * @param dest The destination string. - * @param c The character to initialize the string. - * @param count The maximum number of characters to set. - * @return A pointer to dest. - * @stable ICU 2.0 - */ -U_STABLE UChar* U_EXPORT2 -u_memset(UChar *dest, UChar c, int32_t count); - -/** - * Compare the first count UChars of each buffer. - * - * @param buf1 The first string to compare. - * @param buf2 The second string to compare. - * @param count The maximum number of UChars to compare. - * @return When buf1 < buf2, a negative number is returned. - * When buf1 == buf2, 0 is returned. - * When buf1 > buf2, a positive number is returned. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_memcmp(const UChar *buf1, const UChar *buf2, int32_t count); - -/** - * Compare two Unicode strings in code point order. - * This is different in UTF-16 from u_memcmp() if supplementary characters are present. - * For details, see u_strCompare(). - * - * @param s1 A string to compare. - * @param s2 A string to compare. - * @param count The maximum number of characters to compare. - * @return a negative/zero/positive integer corresponding to whether - * the first string is less than/equal to/greater than the second one - * in code point order - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_memcmpCodePointOrder(const UChar *s1, const UChar *s2, int32_t count); - -/** - * Find the first occurrence of a BMP code point in a string. - * A surrogate code point is found only if its match in the text is not - * part of a surrogate pair. - * A NUL character is found at the string terminator. - * - * @param s The string to search (contains count UChars). - * @param c The BMP code point to find. - * @param count The length of the string. - * @return A pointer to the first occurrence of c in s - * or NULL if c is not in s. - * @stable ICU 2.0 - * - * @see u_strchr - * @see u_memchr32 - * @see u_strFindFirst - */ -U_STABLE UChar* U_EXPORT2 -u_memchr(const UChar *s, UChar c, int32_t count); - -/** - * Find the first occurrence of a code point in a string. - * A surrogate code point is found only if its match in the text is not - * part of a surrogate pair. - * A NUL character is found at the string terminator. - * - * @param s The string to search (contains count UChars). - * @param c The code point to find. - * @param count The length of the string. - * @return A pointer to the first occurrence of c in s - * or NULL if c is not in s. - * @stable ICU 2.0 - * - * @see u_strchr32 - * @see u_memchr - * @see u_strFindFirst - */ -U_STABLE UChar* U_EXPORT2 -u_memchr32(const UChar *s, UChar32 c, int32_t count); - -/** - * Find the last occurrence of a BMP code point in a string. - * A surrogate code point is found only if its match in the text is not - * part of a surrogate pair. - * A NUL character is found at the string terminator. - * - * @param s The string to search (contains count UChars). - * @param c The BMP code point to find. - * @param count The length of the string. - * @return A pointer to the last occurrence of c in s - * or NULL if c is not in s. - * @stable ICU 2.4 - * - * @see u_strrchr - * @see u_memrchr32 - * @see u_strFindLast - */ -U_STABLE UChar* U_EXPORT2 -u_memrchr(const UChar *s, UChar c, int32_t count); - -/** - * Find the last occurrence of a code point in a string. - * A surrogate code point is found only if its match in the text is not - * part of a surrogate pair. - * A NUL character is found at the string terminator. - * - * @param s The string to search (contains count UChars). - * @param c The code point to find. - * @param count The length of the string. - * @return A pointer to the last occurrence of c in s - * or NULL if c is not in s. - * @stable ICU 2.4 - * - * @see u_strrchr32 - * @see u_memrchr - * @see u_strFindLast - */ -U_STABLE UChar* U_EXPORT2 -u_memrchr32(const UChar *s, UChar32 c, int32_t count); - -/** - * Unicode String literals in C. - * We need one macro to declare a variable for the string - * and to statically preinitialize it if possible, - * and a second macro to dynamically initialize such a string variable if necessary. - * - * The macros are defined for maximum performance. - * They work only for strings that contain "invariant characters", i.e., - * only latin letters, digits, and some punctuation. - * See utypes.h for details. - * - * A pair of macros for a single string must be used with the same - * parameters. - * The string parameter must be a C string literal. - * The length of the string, not including the terminating - * `NUL`, must be specified as a constant. - * The U_STRING_DECL macro should be invoked exactly once for one - * such string variable before it is used. - * - * Usage: - * - * U_STRING_DECL(ustringVar1, "Quick-Fox 2", 11); - * U_STRING_DECL(ustringVar2, "jumps 5%", 8); - * static UBool didInit=FALSE; - * - * int32_t function() { - * if(!didInit) { - * U_STRING_INIT(ustringVar1, "Quick-Fox 2", 11); - * U_STRING_INIT(ustringVar2, "jumps 5%", 8); - * didInit=TRUE; - * } - * return u_strcmp(ustringVar1, ustringVar2); - * } - * - * Note that the macros will NOT consistently work if their argument is another #`define`. - * The following will not work on all platforms, don't use it. - * - * #define GLUCK "Mr. Gluck" - * U_STRING_DECL(var, GLUCK, 9) - * U_STRING_INIT(var, GLUCK, 9) - * - * Instead, use the string literal "Mr. Gluck" as the argument to both macro - * calls. - * - * - * @stable ICU 2.0 - */ -#if defined(U_DECLARE_UTF16) -# define U_STRING_DECL(var, cs, length) static const UChar *var=(const UChar *)U_DECLARE_UTF16(cs) - /**@stable ICU 2.0 */ -# define U_STRING_INIT(var, cs, length) -#elif U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16))) -# define U_STRING_DECL(var, cs, length) static const UChar var[(length)+1]=L ## cs - /**@stable ICU 2.0 */ -# define U_STRING_INIT(var, cs, length) -#elif U_SIZEOF_UCHAR==1 && U_CHARSET_FAMILY==U_ASCII_FAMILY -# define U_STRING_DECL(var, cs, length) static const UChar var[(length)+1]=cs - /**@stable ICU 2.0 */ -# define U_STRING_INIT(var, cs, length) -#else -# define U_STRING_DECL(var, cs, length) static UChar var[(length)+1] - /**@stable ICU 2.0 */ -# define U_STRING_INIT(var, cs, length) u_charsToUChars(cs, var, length+1) -#endif - -/** - * Unescape a string of characters and write the resulting - * Unicode characters to the destination buffer. The following escape - * sequences are recognized: - * - * \\uhhhh 4 hex digits; h in [0-9A-Fa-f] - * \\Uhhhhhhhh 8 hex digits - * \\xhh 1-2 hex digits - * \\x{h...} 1-8 hex digits - * \\ooo 1-3 octal digits; o in [0-7] - * \\cX control-X; X is masked with 0x1F - * - * as well as the standard ANSI C escapes: - * - * \\a => U+0007, \\b => U+0008, \\t => U+0009, \\n => U+000A, - * \\v => U+000B, \\f => U+000C, \\r => U+000D, \\e => U+001B, - * \\" => U+0022, \\' => U+0027, \\? => U+003F, \\\\ => U+005C - * - * Anything else following a backslash is generically escaped. For - * example, "[a\\-z]" returns "[a-z]". - * - * If an escape sequence is ill-formed, this method returns an empty - * string. An example of an ill-formed sequence is "\\u" followed by - * fewer than 4 hex digits. - * - * The above characters are recognized in the compiler's codepage, - * that is, they are coded as 'u', '\\', etc. Characters that are - * not parts of escape sequences are converted using u_charsToUChars(). - * - * This function is similar to UnicodeString::unescape() but not - * identical to it. The latter takes a source UnicodeString, so it - * does escape recognition but no conversion. - * - * @param src a zero-terminated string of invariant characters - * @param dest pointer to buffer to receive converted and unescaped - * text and, if there is room, a zero terminator. May be NULL for - * preflighting, in which case no UChars will be written, but the - * return value will still be valid. On error, an empty string is - * stored here (if possible). - * @param destCapacity the number of UChars that may be written at - * dest. Ignored if dest == NULL. - * @return the length of unescaped string. - * @see u_unescapeAt - * @see UnicodeString#unescape() - * @see UnicodeString#unescapeAt() - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_unescape(const char *src, - UChar *dest, int32_t destCapacity); - -U_CDECL_BEGIN -/** - * Callback function for u_unescapeAt() that returns a character of - * the source text given an offset and a context pointer. The context - * pointer will be whatever is passed into u_unescapeAt(). - * - * @param offset pointer to the offset that will be passed to u_unescapeAt(). - * @param context an opaque pointer passed directly into u_unescapeAt() - * @return the character represented by the escape sequence at - * offset - * @see u_unescapeAt - * @stable ICU 2.0 - */ -typedef UChar (U_CALLCONV *UNESCAPE_CHAR_AT)(int32_t offset, void *context); -U_CDECL_END - -/** - * Unescape a single sequence. The character at offset-1 is assumed - * (without checking) to be a backslash. This method takes a callback - * pointer to a function that returns the UChar at a given offset. By - * varying this callback, ICU functions are able to unescape char* - * strings, UnicodeString objects, and UFILE pointers. - * - * If offset is out of range, or if the escape sequence is ill-formed, - * (UChar32)0xFFFFFFFF is returned. See documentation of u_unescape() - * for a list of recognized sequences. - * - * @param charAt callback function that returns a UChar of the source - * text given an offset and a context pointer. - * @param offset pointer to the offset that will be passed to charAt. - * The offset value will be updated upon return to point after the - * last parsed character of the escape sequence. On error the offset - * is unchanged. - * @param length the number of characters in the source text. The - * last character of the source text is considered to be at offset - * length-1. - * @param context an opaque pointer passed directly into charAt. - * @return the character represented by the escape sequence at - * offset, or (UChar32)0xFFFFFFFF on error. - * @see u_unescape() - * @see UnicodeString#unescape() - * @see UnicodeString#unescapeAt() - * @stable ICU 2.0 - */ -U_STABLE UChar32 U_EXPORT2 -u_unescapeAt(UNESCAPE_CHAR_AT charAt, - int32_t *offset, - int32_t length, - void *context); - -/** - * Uppercase the characters in a string. - * Casing is locale-dependent and context-sensitive. - * The result may be longer or shorter than the original. - * The source string and the destination buffer are allowed to overlap. - * - * @param dest A buffer for the result string. The result will be zero-terminated if - * the buffer is large enough. - * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param src The original string - * @param srcLength The length of the original string. If -1, then src must be zero-terminated. - * @param locale The locale to consider, or "" for the root locale or NULL for the default locale. - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return The length of the result string. It may be greater than destCapacity. In that case, - * only some of the result was written to the destination buffer. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_strToUpper(UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - const char *locale, - UErrorCode *pErrorCode); - -/** - * Lowercase the characters in a string. - * Casing is locale-dependent and context-sensitive. - * The result may be longer or shorter than the original. - * The source string and the destination buffer are allowed to overlap. - * - * @param dest A buffer for the result string. The result will be zero-terminated if - * the buffer is large enough. - * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param src The original string - * @param srcLength The length of the original string. If -1, then src must be zero-terminated. - * @param locale The locale to consider, or "" for the root locale or NULL for the default locale. - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return The length of the result string. It may be greater than destCapacity. In that case, - * only some of the result was written to the destination buffer. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_strToLower(UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - const char *locale, - UErrorCode *pErrorCode); - -#if !UCONFIG_NO_BREAK_ITERATION - -/** - * Titlecase a string. - * Casing is locale-dependent and context-sensitive. - * Titlecasing uses a break iterator to find the first characters of words - * that are to be titlecased. It titlecases those characters and lowercases - * all others. - * - * The titlecase break iterator can be provided to customize for arbitrary - * styles, using rules and dictionaries beyond the standard iterators. - * It may be more efficient to always provide an iterator to avoid - * opening and closing one for each string. - * The standard titlecase iterator for the root locale implements the - * algorithm of Unicode TR 21. - * - * This function uses only the setText(), first() and next() methods of the - * provided break iterator. - * - * The result may be longer or shorter than the original. - * The source string and the destination buffer are allowed to overlap. - * - * @param dest A buffer for the result string. The result will be zero-terminated if - * the buffer is large enough. - * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param src The original string - * @param srcLength The length of the original string. If -1, then src must be zero-terminated. - * @param titleIter A break iterator to find the first characters of words - * that are to be titlecased. - * If none is provided (NULL), then a standard titlecase - * break iterator is opened. - * @param locale The locale to consider, or "" for the root locale or NULL for the default locale. - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return The length of the result string. It may be greater than destCapacity. In that case, - * only some of the result was written to the destination buffer. - * @stable ICU 2.1 - */ -U_STABLE int32_t U_EXPORT2 -u_strToTitle(UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - UBreakIterator *titleIter, - const char *locale, - UErrorCode *pErrorCode); - -#endif - -/** - * Case-folds the characters in a string. - * - * Case-folding is locale-independent and not context-sensitive, - * but there is an option for whether to include or exclude mappings for dotted I - * and dotless i that are marked with 'T' in CaseFolding.txt. - * - * The result may be longer or shorter than the original. - * The source string and the destination buffer are allowed to overlap. - * - * @param dest A buffer for the result string. The result will be zero-terminated if - * the buffer is large enough. - * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the result - * without writing any of the result string. - * @param src The original string - * @param srcLength The length of the original string. If -1, then src must be zero-terminated. - * @param options Either U_FOLD_CASE_DEFAULT or U_FOLD_CASE_EXCLUDE_SPECIAL_I - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return The length of the result string. It may be greater than destCapacity. In that case, - * only some of the result was written to the destination buffer. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -u_strFoldCase(UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - uint32_t options, - UErrorCode *pErrorCode); - -#if defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32) || !UCONFIG_NO_CONVERSION -/** - * Convert a UTF-16 string to a wchar_t string. - * If it is known at compile time that wchar_t strings are in UTF-16 or UTF-32, then - * this function simply calls the fast, dedicated function for that. - * Otherwise, two conversions UTF-16 -> default charset -> wchar_t* are performed. - * - * @param dest A buffer for the result string. The result will be zero-terminated if - * the buffer is large enough. - * @param destCapacity The size of the buffer (number of wchar_t's). If it is 0, then - * dest may be NULL and the function will only return the length of the - * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of - * all the input units, even in case of a buffer overflow. - * @param src The original source string - * @param srcLength The length of the original string. If -1, then src must be zero-terminated. - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return The pointer to destination buffer. - * @stable ICU 2.0 - */ -U_STABLE wchar_t* U_EXPORT2 -u_strToWCS(wchar_t *dest, - int32_t destCapacity, - int32_t *pDestLength, - const UChar *src, - int32_t srcLength, - UErrorCode *pErrorCode); -/** - * Convert a wchar_t string to UTF-16. - * If it is known at compile time that wchar_t strings are in UTF-16 or UTF-32, then - * this function simply calls the fast, dedicated function for that. - * Otherwise, two conversions wchar_t* -> default charset -> UTF-16 are performed. - * - * @param dest A buffer for the result string. The result will be zero-terminated if - * the buffer is large enough. - * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the - * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of - * all the input units, even in case of a buffer overflow. - * @param src The original source string - * @param srcLength The length of the original string. If -1, then src must be zero-terminated. - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return The pointer to destination buffer. - * @stable ICU 2.0 - */ -U_STABLE UChar* U_EXPORT2 -u_strFromWCS(UChar *dest, - int32_t destCapacity, - int32_t *pDestLength, - const wchar_t *src, - int32_t srcLength, - UErrorCode *pErrorCode); -#endif /* defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32) || !UCONFIG_NO_CONVERSION */ - -/** - * Convert a UTF-16 string to UTF-8. - * If the input string is not well-formed, then the U_INVALID_CHAR_FOUND error code is set. - * - * @param dest A buffer for the result string. The result will be zero-terminated if - * the buffer is large enough. - * @param destCapacity The size of the buffer (number of chars). If it is 0, then - * dest may be NULL and the function will only return the length of the - * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of - * all the input units, even in case of a buffer overflow. - * @param src The original source string - * @param srcLength The length of the original string. If -1, then src must be zero-terminated. - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return The pointer to destination buffer. - * @stable ICU 2.0 - * @see u_strToUTF8WithSub - * @see u_strFromUTF8 - */ -U_STABLE char* U_EXPORT2 -u_strToUTF8(char *dest, - int32_t destCapacity, - int32_t *pDestLength, - const UChar *src, - int32_t srcLength, - UErrorCode *pErrorCode); - -/** - * Convert a UTF-8 string to UTF-16. - * If the input string is not well-formed, then the U_INVALID_CHAR_FOUND error code is set. - * - * @param dest A buffer for the result string. The result will be zero-terminated if - * the buffer is large enough. - * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the - * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of - * all the input units, even in case of a buffer overflow. - * @param src The original source string - * @param srcLength The length of the original string. If -1, then src must be zero-terminated. - * @param pErrorCode Must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. - * @return The pointer to destination buffer. - * @stable ICU 2.0 - * @see u_strFromUTF8WithSub - * @see u_strFromUTF8Lenient - */ -U_STABLE UChar* U_EXPORT2 -u_strFromUTF8(UChar *dest, - int32_t destCapacity, - int32_t *pDestLength, - const char *src, - int32_t srcLength, - UErrorCode *pErrorCode); - -/** - * Convert a UTF-16 string to UTF-8. - * - * Same as u_strToUTF8() except for the additional subchar which is output for - * illegal input sequences, instead of stopping with the U_INVALID_CHAR_FOUND error code. - * With subchar==U_SENTINEL, this function behaves exactly like u_strToUTF8(). - * - * @param dest A buffer for the result string. The result will be zero-terminated if - * the buffer is large enough. - * @param destCapacity The size of the buffer (number of chars). If it is 0, then - * dest may be NULL and the function will only return the length of the - * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of - * all the input units, even in case of a buffer overflow. - * @param src The original source string - * @param srcLength The length of the original string. If -1, then src must be zero-terminated. - * @param subchar The substitution character to use in place of an illegal input sequence, - * or U_SENTINEL if the function is to return with U_INVALID_CHAR_FOUND instead. - * A substitution character can be any valid Unicode code point (up to U+10FFFF) - * except for surrogate code points (U+D800..U+DFFF). - * The recommended value is U+FFFD "REPLACEMENT CHARACTER". - * @param pNumSubstitutions Output parameter receiving the number of substitutions if subchar>=0. - * Set to 0 if no substitutions occur or subchar<0. - * pNumSubstitutions can be NULL. - * @param pErrorCode Pointer to a standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return The pointer to destination buffer. - * @see u_strToUTF8 - * @see u_strFromUTF8WithSub - * @stable ICU 3.6 - */ -U_STABLE char* U_EXPORT2 -u_strToUTF8WithSub(char *dest, - int32_t destCapacity, - int32_t *pDestLength, - const UChar *src, - int32_t srcLength, - UChar32 subchar, int32_t *pNumSubstitutions, - UErrorCode *pErrorCode); - -/** - * Convert a UTF-8 string to UTF-16. - * - * Same as u_strFromUTF8() except for the additional subchar which is output for - * illegal input sequences, instead of stopping with the U_INVALID_CHAR_FOUND error code. - * With subchar==U_SENTINEL, this function behaves exactly like u_strFromUTF8(). - * - * @param dest A buffer for the result string. The result will be zero-terminated if - * the buffer is large enough. - * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the - * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of - * all the input units, even in case of a buffer overflow. - * @param src The original source string - * @param srcLength The length of the original string. If -1, then src must be zero-terminated. - * @param subchar The substitution character to use in place of an illegal input sequence, - * or U_SENTINEL if the function is to return with U_INVALID_CHAR_FOUND instead. - * A substitution character can be any valid Unicode code point (up to U+10FFFF) - * except for surrogate code points (U+D800..U+DFFF). - * The recommended value is U+FFFD "REPLACEMENT CHARACTER". - * @param pNumSubstitutions Output parameter receiving the number of substitutions if subchar>=0. - * Set to 0 if no substitutions occur or subchar<0. - * pNumSubstitutions can be NULL. - * @param pErrorCode Pointer to a standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return The pointer to destination buffer. - * @see u_strFromUTF8 - * @see u_strFromUTF8Lenient - * @see u_strToUTF8WithSub - * @stable ICU 3.6 - */ -U_STABLE UChar* U_EXPORT2 -u_strFromUTF8WithSub(UChar *dest, - int32_t destCapacity, - int32_t *pDestLength, - const char *src, - int32_t srcLength, - UChar32 subchar, int32_t *pNumSubstitutions, - UErrorCode *pErrorCode); - -/** - * Convert a UTF-8 string to UTF-16. - * - * Same as u_strFromUTF8() except that this function is designed to be very fast, - * which it achieves by being lenient about malformed UTF-8 sequences. - * This function is intended for use in environments where UTF-8 text is - * expected to be well-formed. - * - * Its semantics are: - * - Well-formed UTF-8 text is correctly converted to well-formed UTF-16 text. - * - The function will not read beyond the input string, nor write beyond - * the destCapacity. - * - Malformed UTF-8 results in "garbage" 16-bit Unicode strings which may not - * be well-formed UTF-16. - * The function will resynchronize to valid code point boundaries - * within a small number of code points after an illegal sequence. - * - Non-shortest forms are not detected and will result in "spoofing" output. - * - * For further performance improvement, if srcLength is given (>=0), - * then it must be destCapacity>=srcLength. - * - * There is no inverse u_strToUTF8Lenient() function because there is practically - * no performance gain from not checking that a UTF-16 string is well-formed. - * - * @param dest A buffer for the result string. The result will be zero-terminated if - * the buffer is large enough. - * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the - * result without writing any of the result string (pre-flighting). - * Unlike for other ICU functions, if srcLength>=0 then it - * must be destCapacity>=srcLength. - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of - * all the input units, even in case of a buffer overflow. - * Unlike for other ICU functions, if srcLength>=0 but - * destCapacity=0. - * Set to 0 if no substitutions occur or subchar<0. - * pNumSubstitutions can be NULL. - * @param pErrorCode Pointer to a standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return The pointer to destination buffer. - * @see u_strToUTF32 - * @see u_strFromUTF32WithSub - * @stable ICU 4.2 - */ -U_STABLE UChar32* U_EXPORT2 -u_strToUTF32WithSub(UChar32 *dest, - int32_t destCapacity, - int32_t *pDestLength, - const UChar *src, - int32_t srcLength, - UChar32 subchar, int32_t *pNumSubstitutions, - UErrorCode *pErrorCode); - -/** - * Convert a UTF-32 string to UTF-16. - * - * Same as u_strFromUTF32() except for the additional subchar which is output for - * illegal input sequences, instead of stopping with the U_INVALID_CHAR_FOUND error code. - * With subchar==U_SENTINEL, this function behaves exactly like u_strFromUTF32(). - * - * @param dest A buffer for the result string. The result will be zero-terminated if - * the buffer is large enough. - * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the - * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of - * all the input units, even in case of a buffer overflow. - * @param src The original source string - * @param srcLength The length of the original string. If -1, then src must be zero-terminated. - * @param subchar The substitution character to use in place of an illegal input sequence, - * or U_SENTINEL if the function is to return with U_INVALID_CHAR_FOUND instead. - * A substitution character can be any valid Unicode code point (up to U+10FFFF) - * except for surrogate code points (U+D800..U+DFFF). - * The recommended value is U+FFFD "REPLACEMENT CHARACTER". - * @param pNumSubstitutions Output parameter receiving the number of substitutions if subchar>=0. - * Set to 0 if no substitutions occur or subchar<0. - * pNumSubstitutions can be NULL. - * @param pErrorCode Pointer to a standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return The pointer to destination buffer. - * @see u_strFromUTF32 - * @see u_strToUTF32WithSub - * @stable ICU 4.2 - */ -U_STABLE UChar* U_EXPORT2 -u_strFromUTF32WithSub(UChar *dest, - int32_t destCapacity, - int32_t *pDestLength, - const UChar32 *src, - int32_t srcLength, - UChar32 subchar, int32_t *pNumSubstitutions, - UErrorCode *pErrorCode); - -/** - * Convert a 16-bit Unicode string to Java Modified UTF-8. - * See http://java.sun.com/javase/6/docs/api/java/io/DataInput.html#modified-utf-8 - * - * This function behaves according to the documentation for Java DataOutput.writeUTF() - * except that it does not encode the output length in the destination buffer - * and does not have an output length restriction. - * See http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html#writeUTF(java.lang.String) - * - * The input string need not be well-formed UTF-16. - * (Therefore there is no subchar parameter.) - * - * @param dest A buffer for the result string. The result will be zero-terminated if - * the buffer is large enough. - * @param destCapacity The size of the buffer (number of chars). If it is 0, then - * dest may be NULL and the function will only return the length of the - * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of - * all the input units, even in case of a buffer overflow. - * @param src The original source string - * @param srcLength The length of the original string. If -1, then src must be zero-terminated. - * @param pErrorCode Pointer to a standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return The pointer to destination buffer. - * @stable ICU 4.4 - * @see u_strToUTF8WithSub - * @see u_strFromJavaModifiedUTF8WithSub - */ -U_STABLE char* U_EXPORT2 -u_strToJavaModifiedUTF8( - char *dest, - int32_t destCapacity, - int32_t *pDestLength, - const UChar *src, - int32_t srcLength, - UErrorCode *pErrorCode); - -/** - * Convert a Java Modified UTF-8 string to a 16-bit Unicode string. - * If the input string is not well-formed and no substitution char is specified, - * then the U_INVALID_CHAR_FOUND error code is set. - * - * This function behaves according to the documentation for Java DataInput.readUTF() - * except that it takes a length parameter rather than - * interpreting the first two input bytes as the length. - * See http://java.sun.com/javase/6/docs/api/java/io/DataInput.html#readUTF() - * - * The output string may not be well-formed UTF-16. - * - * @param dest A buffer for the result string. The result will be zero-terminated if - * the buffer is large enough. - * @param destCapacity The size of the buffer (number of UChars). If it is 0, then - * dest may be NULL and the function will only return the length of the - * result without writing any of the result string (pre-flighting). - * @param pDestLength A pointer to receive the number of units written to the destination. If - * pDestLength!=NULL then *pDestLength is always set to the - * number of output units corresponding to the transformation of - * all the input units, even in case of a buffer overflow. - * @param src The original source string - * @param srcLength The length of the original string. If -1, then src must be zero-terminated. - * @param subchar The substitution character to use in place of an illegal input sequence, - * or U_SENTINEL if the function is to return with U_INVALID_CHAR_FOUND instead. - * A substitution character can be any valid Unicode code point (up to U+10FFFF) - * except for surrogate code points (U+D800..U+DFFF). - * The recommended value is U+FFFD "REPLACEMENT CHARACTER". - * @param pNumSubstitutions Output parameter receiving the number of substitutions if subchar>=0. - * Set to 0 if no substitutions occur or subchar<0. - * pNumSubstitutions can be NULL. - * @param pErrorCode Pointer to a standard ICU error code. Its input value must - * pass the U_SUCCESS() test, or else the function returns - * immediately. Check for U_FAILURE() on output or use with - * function chaining. (See User Guide for details.) - * @return The pointer to destination buffer. - * @see u_strFromUTF8WithSub - * @see u_strFromUTF8Lenient - * @see u_strToJavaModifiedUTF8 - * @stable ICU 4.4 - */ -U_STABLE UChar* U_EXPORT2 -u_strFromJavaModifiedUTF8WithSub( - UChar *dest, - int32_t destCapacity, - int32_t *pDestLength, - const char *src, - int32_t srcLength, - UChar32 subchar, int32_t *pNumSubstitutions, - UErrorCode *pErrorCode); - -#ifndef U_HIDE_INTERNAL_API -/** - * Check whether the string is well-formed according to various criteria: - * - No code points that are defined as non-characters (e.g. 0xFFFF) or are undefined in - * the version of Unicode currently supported. - * - No isolated surrogate code points. - * - No overly-long sequences of non-starter combining marks, i.e. more than 30 characters - * in a row with non-zero combining class (which may have category Mn or Mc); this - * violates Stream-Safe Text Format per UAX #15. This test does not ensure that the - * string satisfies Stream-Safe Text Format (because it does not convert to NFKC first), - * but any string that fails this test is certainly not Stream-Safe. - * - No emoji variation selectors applied to non-emoji code points. This function may - * also check for other non-standard variation sequences. - * - No tag sequences that are ill-formed per definition ED-14a in UTS #51 (e.g. tag - * sequences must have an emoji base and a terminator). - * - Bidi controls do not lead to a bidi embedding level of greater than max_depth (125) - * approximately according to the algorithm in - * [https://www.unicode.org/reports/tr9/#Explicit_Levels_and_Directions] - * (we do not evaluate paragraph direction or FSI direction so may actually toerate a - * level or two beyond the official limit in some cases) - * - * @param s The input string. - * @param length The length of the string, or -1 if it is NUL-terminated. - * @return Boolean value for whether the string is well-formed according to the - * specified criteria. - * @internal Apple only - */ -U_INTERNAL UBool U_EXPORT2 -u_strIsWellFormed(const UChar *s, int32_t length); - -#endif /* U_HIDE_INTERNAL_API */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustringtrie.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustringtrie.h deleted file mode 100644 index fd85648225..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/ustringtrie.h +++ /dev/null @@ -1,97 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2010-2012, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* file name: udicttrie.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2010dec17 -* created by: Markus W. Scherer -*/ - -#ifndef __USTRINGTRIE_H__ -#define __USTRINGTRIE_H__ - -/** - * \file - * \brief C API: Helper definitions for dictionary trie APIs. - */ - -#include "unicode/utypes.h" - - -/** - * Return values for BytesTrie::next(), UCharsTrie::next() and similar methods. - * @see USTRINGTRIE_MATCHES - * @see USTRINGTRIE_HAS_VALUE - * @see USTRINGTRIE_HAS_NEXT - * @stable ICU 4.8 - */ -enum UStringTrieResult { - /** - * The input unit(s) did not continue a matching string. - * Once current()/next() return USTRINGTRIE_NO_MATCH, - * all further calls to current()/next() will also return USTRINGTRIE_NO_MATCH, - * until the trie is reset to its original state or to a saved state. - * @stable ICU 4.8 - */ - USTRINGTRIE_NO_MATCH, - /** - * The input unit(s) continued a matching string - * but there is no value for the string so far. - * (It is a prefix of a longer string.) - * @stable ICU 4.8 - */ - USTRINGTRIE_NO_VALUE, - /** - * The input unit(s) continued a matching string - * and there is a value for the string so far. - * This value will be returned by getValue(). - * No further input byte/unit can continue a matching string. - * @stable ICU 4.8 - */ - USTRINGTRIE_FINAL_VALUE, - /** - * The input unit(s) continued a matching string - * and there is a value for the string so far. - * This value will be returned by getValue(). - * Another input byte/unit can continue a matching string. - * @stable ICU 4.8 - */ - USTRINGTRIE_INTERMEDIATE_VALUE -}; - -/** - * Same as (result!=USTRINGTRIE_NO_MATCH). - * @param result A result from BytesTrie::first(), UCharsTrie::next() etc. - * @return true if the input bytes/units so far are part of a matching string/byte sequence. - * @stable ICU 4.8 - */ -#define USTRINGTRIE_MATCHES(result) ((result)!=USTRINGTRIE_NO_MATCH) - -/** - * Equivalent to (result==USTRINGTRIE_INTERMEDIATE_VALUE || result==USTRINGTRIE_FINAL_VALUE) but - * this macro evaluates result exactly once. - * @param result A result from BytesTrie::first(), UCharsTrie::next() etc. - * @return true if there is a value for the input bytes/units so far. - * @see BytesTrie::getValue - * @see UCharsTrie::getValue - * @stable ICU 4.8 - */ -#define USTRINGTRIE_HAS_VALUE(result) ((result)>=USTRINGTRIE_FINAL_VALUE) - -/** - * Equivalent to (result==USTRINGTRIE_NO_VALUE || result==USTRINGTRIE_INTERMEDIATE_VALUE) but - * this macro evaluates result exactly once. - * @param result A result from BytesTrie::first(), UCharsTrie::next() etc. - * @return true if another input byte/unit can continue a matching string. - * @stable ICU 4.8 - */ -#define USTRINGTRIE_HAS_NEXT(result) ((result)&1) - -#endif /* __USTRINGTRIE_H__ */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utext.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utext.h deleted file mode 100644 index 921408ae1c..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utext.h +++ /dev/null @@ -1,1613 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2004-2012, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: utext.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2004oct06 -* created by: Markus W. Scherer -*/ - -#ifndef __UTEXT_H__ -#define __UTEXT_H__ - -/** - * \file - * \brief C API: Abstract Unicode Text API - * - * The Text Access API provides a means to allow text that is stored in alternative - * formats to work with ICU services. ICU normally operates on text that is - * stored in UTF-16 format, in (UChar *) arrays for the C APIs or as type - * UnicodeString for C++ APIs. - * - * ICU Text Access allows other formats, such as UTF-8 or non-contiguous - * UTF-16 strings, to be placed in a UText wrapper and then passed to ICU services. - * - * There are three general classes of usage for UText: - * - * Application Level Use. This is the simplest usage - applications would - * use one of the utext_open() functions on their input text, and pass - * the resulting UText to the desired ICU service. - * - * Second is usage in ICU Services, such as break iteration, that will need to - * operate on input presented to them as a UText. These implementations - * will need to use the iteration and related UText functions to gain - * access to the actual text. - * - * The third class of UText users are "text providers." These are the - * UText implementations for the various text storage formats. An application - * or system with a unique text storage format can implement a set of - * UText provider functions for that format, which will then allow - * ICU services to operate on that format. - * - * - * Iterating over text - * - * Here is sample code for a forward iteration over the contents of a UText - * - * \code - * UChar32 c; - * UText *ut = whatever(); - * - * for (c=utext_next32From(ut, 0); c>=0; c=utext_next32(ut)) { - * // do whatever with the codepoint c here. - * } - * \endcode - * - * And here is similar code to iterate in the reverse direction, from the end - * of the text towards the beginning. - * - * \code - * UChar32 c; - * UText *ut = whatever(); - * int textLength = utext_nativeLength(ut); - * for (c=utext_previous32From(ut, textLength); c>=0; c=utext_previous32(ut)) { - * // do whatever with the codepoint c here. - * } - * \endcode - * - * Characters and Indexing - * - * Indexing into text by UText functions is nearly always in terms of the native - * indexing of the underlying text storage. The storage format could be UTF-8 - * or UTF-32, for example. When coding to the UText access API, no assumptions - * can be made regarding the size of characters, or how far an index - * may move when iterating between characters. - * - * All indices supplied to UText functions are pinned to the length of the - * text. An out-of-bounds index is not considered to be an error, but is - * adjusted to be in the range 0 <= index <= length of input text. - * - * - * When an index position is returned from a UText function, it will be - * a native index to the underlying text. In the case of multi-unit characters, - * it will always refer to the first position of the character, - * never to the interior. This is essentially the same thing as saying that - * a returned index will always point to a boundary between characters. - * - * When a native index is supplied to a UText function, all indices that - * refer to any part of a multi-unit character representation are considered - * to be equivalent. In the case of multi-unit characters, an incoming index - * will be logically normalized to refer to the start of the character. - * - * It is possible to test whether a native index is on a code point boundary - * by doing a utext_setNativeIndex() followed by a utext_getNativeIndex(). - * If the index is returned unchanged, it was on a code point boundary. If - * an adjusted index is returned, the original index referred to the - * interior of a character. - * - * Conventions for calling UText functions - * - * Most UText access functions have as their first parameter a (UText *) pointer, - * which specifies the UText to be used. Unless otherwise noted, the - * pointer must refer to a valid, open UText. Attempting to - * use a closed UText or passing a NULL pointer is a programming error and - * will produce undefined results or NULL pointer exceptions. - * - * The UText_Open family of functions can either open an existing (closed) - * UText, or heap allocate a new UText. Here is sample code for creating - * a stack-allocated UText. - * - * \code - * char *s = whatever(); // A utf-8 string - * U_ErrorCode status = U_ZERO_ERROR; - * UText ut = UTEXT_INITIALIZER; - * utext_openUTF8(ut, s, -1, &status); - * if (U_FAILURE(status)) { - * // error handling - * } else { - * // work with the UText - * } - * \endcode - * - * Any existing UText passed to an open function _must_ have been initialized, - * either by the UTEXT_INITIALIZER, or by having been originally heap-allocated - * by an open function. Passing NULL will cause the open function to - * heap-allocate and fully initialize a new UText. - * - */ - - - -#include "unicode/utypes.h" -#include "unicode/uchar.h" -#if U_SHOW_CPLUSPLUS_API -#include "unicode/localpointer.h" -#include "unicode/rep.h" -#include "unicode/unistr.h" -#include "unicode/chariter.h" -#endif // U_SHOW_CPLUSPLUS_API - - -U_CDECL_BEGIN - -struct UText; -typedef struct UText UText; /**< C typedef for struct UText. @stable ICU 3.6 */ - - -/*************************************************************************************** - * - * C Functions for creating UText wrappers around various kinds of text strings. - * - ****************************************************************************************/ - - -/** - * Close function for UText instances. - * Cleans up, releases any resources being held by an open UText. - *

- * If the UText was originally allocated by one of the utext_open functions, - * the storage associated with the utext will also be freed. - * If the UText storage originated with the application, as it would with - * a local or static instance, the storage will not be deleted. - * - * An open UText can be reset to refer to new string by using one of the utext_open() - * functions without first closing the UText. - * - * @param ut The UText to be closed. - * @return NULL if the UText struct was deleted by the close. If the UText struct - * was originally provided by the caller to the open function, it is - * returned by this function, and may be safely used again in - * a subsequent utext_open. - * - * @stable ICU 3.4 - */ -U_STABLE UText * U_EXPORT2 -utext_close(UText *ut); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUTextPointer - * "Smart pointer" class, closes a UText via utext_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUTextPointer, UText, utext_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Open a read-only UText implementation for UTF-8 strings. - * - * \htmlonly - * Any invalid UTF-8 in the input will be handled in this way: - * a sequence of bytes that has the form of a truncated, but otherwise valid, - * UTF-8 sequence will be replaced by a single unicode replacement character, \uFFFD. - * Any other illegal bytes will each be replaced by a \uFFFD. - * \endhtmlonly - * - * @param ut Pointer to a UText struct. If NULL, a new UText will be created. - * If non-NULL, must refer to an initialized UText struct, which will then - * be reset to reference the specified UTF-8 string. - * @param s A UTF-8 string. Must not be NULL. - * @param length The length of the UTF-8 string in bytes, or -1 if the string is - * zero terminated. - * @param status Errors are returned here. - * @return A pointer to the UText. If a pre-allocated UText was provided, it - * will always be used and returned. - * @stable ICU 3.4 - */ -U_STABLE UText * U_EXPORT2 -utext_openUTF8(UText *ut, const char *s, int64_t length, UErrorCode *status); - - -/** - * Open a read-only UText for UChar * string. - * - * @param ut Pointer to a UText struct. If NULL, a new UText will be created. - * If non-NULL, must refer to an initialized UText struct, which will then - * be reset to reference the specified UChar string. - * @param s A UChar (UTF-16) string - * @param length The number of UChars in the input string, or -1 if the string is - * zero terminated. - * @param status Errors are returned here. - * @return A pointer to the UText. If a pre-allocated UText was provided, it - * will always be used and returned. - * @stable ICU 3.4 - */ -U_STABLE UText * U_EXPORT2 -utext_openUChars(UText *ut, const UChar *s, int64_t length, UErrorCode *status); - - -#if U_SHOW_CPLUSPLUS_API -/** - * Open a writable UText for a non-const UnicodeString. - * - * @param ut Pointer to a UText struct. If NULL, a new UText will be created. - * If non-NULL, must refer to an initialized UText struct, which will then - * be reset to reference the specified input string. - * @param s A UnicodeString. - * @param status Errors are returned here. - * @return Pointer to the UText. If a UText was supplied as input, this - * will always be used and returned. - * @stable ICU 3.4 - */ -U_STABLE UText * U_EXPORT2 -utext_openUnicodeString(UText *ut, icu::UnicodeString *s, UErrorCode *status); - - -/** - * Open a UText for a const UnicodeString. The resulting UText will not be writable. - * - * @param ut Pointer to a UText struct. If NULL, a new UText will be created. - * If non-NULL, must refer to an initialized UText struct, which will then - * be reset to reference the specified input string. - * @param s A const UnicodeString to be wrapped. - * @param status Errors are returned here. - * @return Pointer to the UText. If a UText was supplied as input, this - * will always be used and returned. - * @stable ICU 3.4 - */ -U_STABLE UText * U_EXPORT2 -utext_openConstUnicodeString(UText *ut, const icu::UnicodeString *s, UErrorCode *status); - - -/** - * Open a writable UText implementation for an ICU Replaceable object. - * @param ut Pointer to a UText struct. If NULL, a new UText will be created. - * If non-NULL, must refer to an already existing UText, which will then - * be reset to reference the specified replaceable text. - * @param rep A Replaceable text object. - * @param status Errors are returned here. - * @return Pointer to the UText. If a UText was supplied as input, this - * will always be used and returned. - * @see Replaceable - * @stable ICU 3.4 - */ -U_STABLE UText * U_EXPORT2 -utext_openReplaceable(UText *ut, icu::Replaceable *rep, UErrorCode *status); - -/** - * Open a UText implementation over an ICU CharacterIterator. - * @param ut Pointer to a UText struct. If NULL, a new UText will be created. - * If non-NULL, must refer to an already existing UText, which will then - * be reset to reference the specified replaceable text. - * @param ci A Character Iterator. - * @param status Errors are returned here. - * @return Pointer to the UText. If a UText was supplied as input, this - * will always be used and returned. - * @see Replaceable - * @stable ICU 3.4 - */ -U_STABLE UText * U_EXPORT2 -utext_openCharacterIterator(UText *ut, icu::CharacterIterator *ci, UErrorCode *status); - -#endif // U_SHOW_CPLUSPLUS_API - - -/** - * Clone a UText. This is much like opening a UText where the source text is itself - * another UText. - * - * A deep clone will copy both the UText data structures and the underlying text. - * The original and cloned UText will operate completely independently; modifications - * made to the text in one will not affect the other. Text providers are not - * required to support deep clones. The user of clone() must check the status return - * and be prepared to handle failures. - * - * The standard UText implementations for UTF8, UChar *, UnicodeString and - * Replaceable all support deep cloning. - * - * The UText returned from a deep clone will be writable, assuming that the text - * provider is able to support writing, even if the source UText had been made - * non-writable by means of UText_freeze(). - * - * A shallow clone replicates only the UText data structures; it does not make - * a copy of the underlying text. Shallow clones can be used as an efficient way to - * have multiple iterators active in a single text string that is not being - * modified. - * - * A shallow clone operation will not fail, barring truly exceptional conditions such - * as memory allocation failures. - * - * Shallow UText clones should be avoided if the UText functions that modify the - * text are expected to be used, either on the original or the cloned UText. - * Any such modifications can cause unpredictable behavior. Read Only - * shallow clones provide some protection against errors of this type by - * disabling text modification via the cloned UText. - * - * A shallow clone made with the readOnly parameter == FALSE will preserve the - * utext_isWritable() state of the source object. Note, however, that - * write operations must be avoided while more than one UText exists that refer - * to the same underlying text. - * - * A UText and its clone may be safely concurrently accessed by separate threads. - * This is true for read access only with shallow clones, and for both read and - * write access with deep clones. - * It is the responsibility of the Text Provider to ensure that this thread safety - * constraint is met. - * - * @param dest A UText struct to be filled in with the result of the clone operation, - * or NULL if the clone function should heap-allocate a new UText struct. - * If non-NULL, must refer to an already existing UText, which will then - * be reset to become the clone. - * @param src The UText to be cloned. - * @param deep TRUE to request a deep clone, FALSE for a shallow clone. - * @param readOnly TRUE to request that the cloned UText have read only access to the - * underlying text. - - * @param status Errors are returned here. For deep clones, U_UNSUPPORTED_ERROR - * will be returned if the text provider is unable to clone the - * original text. - * @return The newly created clone, or NULL if the clone operation failed. - * @stable ICU 3.4 - */ -U_STABLE UText * U_EXPORT2 -utext_clone(UText *dest, const UText *src, UBool deep, UBool readOnly, UErrorCode *status); - - -/** - * Compare two UText objects for equality. - * UTexts are equal if they are iterating over the same text, and - * have the same iteration position within the text. - * If either or both of the parameters are NULL, the comparison is FALSE. - * - * @param a The first of the two UTexts to compare. - * @param b The other UText to be compared. - * @return TRUE if the two UTexts are equal. - * @stable ICU 3.6 - */ -U_STABLE UBool U_EXPORT2 -utext_equals(const UText *a, const UText *b); - - -/***************************************************************************** - * - * Functions to work with the text represented by a UText wrapper - * - *****************************************************************************/ - -/** - * Get the length of the text. Depending on the characteristics - * of the underlying text representation, this may be expensive. - * @see utext_isLengthExpensive() - * - * - * @param ut the text to be accessed. - * @return the length of the text, expressed in native units. - * - * @stable ICU 3.4 - */ -U_STABLE int64_t U_EXPORT2 -utext_nativeLength(UText *ut); - -/** - * Return TRUE if calculating the length of the text could be expensive. - * Finding the length of NUL terminated strings is considered to be expensive. - * - * Note that the value of this function may change - * as the result of other operations on a UText. - * Once the length of a string has been discovered, it will no longer - * be expensive to report it. - * - * @param ut the text to be accessed. - * @return TRUE if determining the length of the text could be time consuming. - * @stable ICU 3.4 - */ -U_STABLE UBool U_EXPORT2 -utext_isLengthExpensive(const UText *ut); - -/** - * Returns the code point at the requested index, - * or U_SENTINEL (-1) if it is out of bounds. - * - * If the specified index points to the interior of a multi-unit - * character - one of the trail bytes of a UTF-8 sequence, for example - - * the complete code point will be returned. - * - * The iteration position will be set to the start of the returned code point. - * - * This function is roughly equivalent to the sequence - * utext_setNativeIndex(index); - * utext_current32(); - * (There is a subtle difference if the index is out of bounds by being less than zero - - * utext_setNativeIndex(negative value) sets the index to zero, after which utext_current() - * will return the char at zero. utext_char32At(negative index), on the other hand, will - * return the U_SENTINEL value of -1.) - * - * @param ut the text to be accessed - * @param nativeIndex the native index of the character to be accessed. If the index points - * to other than the first unit of a multi-unit character, it will be adjusted - * to the start of the character. - * @return the code point at the specified index. - * @stable ICU 3.4 - */ -U_STABLE UChar32 U_EXPORT2 -utext_char32At(UText *ut, int64_t nativeIndex); - - -/** - * - * Get the code point at the current iteration position, - * or U_SENTINEL (-1) if the iteration has reached the end of - * the input text. - * - * @param ut the text to be accessed. - * @return the Unicode code point at the current iterator position. - * @stable ICU 3.4 - */ -U_STABLE UChar32 U_EXPORT2 -utext_current32(UText *ut); - - -/** - * Get the code point at the current iteration position of the UText, and - * advance the position to the first index following the character. - * - * If the position is at the end of the text (the index following - * the last character, which is also the length of the text), - * return U_SENTINEL (-1) and do not advance the index. - * - * This is a post-increment operation. - * - * An inline macro version of this function, UTEXT_NEXT32(), - * is available for performance critical use. - * - * @param ut the text to be accessed. - * @return the Unicode code point at the iteration position. - * @see UTEXT_NEXT32 - * @stable ICU 3.4 - */ -U_STABLE UChar32 U_EXPORT2 -utext_next32(UText *ut); - - -/** - * Move the iterator position to the character (code point) whose - * index precedes the current position, and return that character. - * This is a pre-decrement operation. - * - * If the initial position is at the start of the text (index of 0) - * return U_SENTINEL (-1), and leave the position unchanged. - * - * An inline macro version of this function, UTEXT_PREVIOUS32(), - * is available for performance critical use. - * - * @param ut the text to be accessed. - * @return the previous UChar32 code point, or U_SENTINEL (-1) - * if the iteration has reached the start of the text. - * @see UTEXT_PREVIOUS32 - * @stable ICU 3.4 - */ -U_STABLE UChar32 U_EXPORT2 -utext_previous32(UText *ut); - - -/** - * Set the iteration index and return the code point at that index. - * Leave the iteration index at the start of the following code point. - * - * This function is the most efficient and convenient way to - * begin a forward iteration. The results are identical to the those - * from the sequence - * \code - * utext_setIndex(); - * utext_next32(); - * \endcode - * - * @param ut the text to be accessed. - * @param nativeIndex Iteration index, in the native units of the text provider. - * @return Code point which starts at or before index, - * or U_SENTINEL (-1) if it is out of bounds. - * @stable ICU 3.4 - */ -U_STABLE UChar32 U_EXPORT2 -utext_next32From(UText *ut, int64_t nativeIndex); - - - -/** - * Set the iteration index, and return the code point preceding the - * one specified by the initial index. Leave the iteration position - * at the start of the returned code point. - * - * This function is the most efficient and convenient way to - * begin a backwards iteration. - * - * @param ut the text to be accessed. - * @param nativeIndex Iteration index in the native units of the text provider. - * @return Code point preceding the one at the initial index, - * or U_SENTINEL (-1) if it is out of bounds. - * - * @stable ICU 3.4 - */ -U_STABLE UChar32 U_EXPORT2 -utext_previous32From(UText *ut, int64_t nativeIndex); - -/** - * Get the current iterator position, which can range from 0 to - * the length of the text. - * The position is a native index into the input text, in whatever format it - * may have (possibly UTF-8 for example), and may not always be the same as - * the corresponding UChar (UTF-16) index. - * The returned position will always be aligned to a code point boundary. - * - * @param ut the text to be accessed. - * @return the current index position, in the native units of the text provider. - * @stable ICU 3.4 - */ -U_STABLE int64_t U_EXPORT2 -utext_getNativeIndex(const UText *ut); - -/** - * Set the current iteration position to the nearest code point - * boundary at or preceding the specified index. - * The index is in the native units of the original input text. - * If the index is out of range, it will be pinned to be within - * the range of the input text. - *

- * It will usually be more efficient to begin an iteration - * using the functions utext_next32From() or utext_previous32From() - * rather than setIndex(). - *

- * Moving the index position to an adjacent character is best done - * with utext_next32(), utext_previous32() or utext_moveIndex32(). - * Attempting to do direct arithmetic on the index position is - * complicated by the fact that the size (in native units) of a - * character depends on the underlying representation of the character - * (UTF-8, UTF-16, UTF-32, arbitrary codepage), and is not - * easily knowable. - * - * @param ut the text to be accessed. - * @param nativeIndex the native unit index of the new iteration position. - * @stable ICU 3.4 - */ -U_STABLE void U_EXPORT2 -utext_setNativeIndex(UText *ut, int64_t nativeIndex); - -/** - * Move the iterator position by delta code points. The number of code points - * is a signed number; a negative delta will move the iterator backwards, - * towards the start of the text. - *

- * The index is moved by delta code points - * forward or backward, but no further backward than to 0 and - * no further forward than to utext_nativeLength(). - * The resulting index value will be in between 0 and length, inclusive. - * - * @param ut the text to be accessed. - * @param delta the signed number of code points to move the iteration position. - * @return TRUE if the position could be moved the requested number of positions while - * staying within the range [0 - text length]. - * @stable ICU 3.4 - */ -U_STABLE UBool U_EXPORT2 -utext_moveIndex32(UText *ut, int32_t delta); - -/** - * Get the native index of the character preceding the current position. - * If the iteration position is already at the start of the text, zero - * is returned. - * The value returned is the same as that obtained from the following sequence, - * but without the side effect of changing the iteration position. - * - * \code - * UText *ut = whatever; - * ... - * utext_previous(ut) - * utext_getNativeIndex(ut); - * \endcode - * - * This function is most useful during forwards iteration, where it will get the - * native index of the character most recently returned from utext_next(). - * - * @param ut the text to be accessed - * @return the native index of the character preceding the current index position, - * or zero if the current position is at the start of the text. - * @stable ICU 3.6 - */ -U_STABLE int64_t U_EXPORT2 -utext_getPreviousNativeIndex(UText *ut); - - -/** - * - * Extract text from a UText into a UChar buffer. The range of text to be extracted - * is specified in the native indices of the UText provider. These may not necessarily - * be UTF-16 indices. - *

- * The size (number of 16 bit UChars) of the data to be extracted is returned. The - * full number of UChars is returned, even when the extracted text is truncated - * because the specified buffer size is too small. - *

- * The extracted string will (if you are a user) / must (if you are a text provider) - * be NUL-terminated if there is sufficient space in the destination buffer. This - * terminating NUL is not included in the returned length. - *

- * The iteration index is left at the position following the last extracted character. - * - * @param ut the UText from which to extract data. - * @param nativeStart the native index of the first character to extract.\ - * If the specified index is out of range, - * it will be pinned to be within 0 <= index <= textLength - * @param nativeLimit the native string index of the position following the last - * character to extract. If the specified index is out of range, - * it will be pinned to be within 0 <= index <= textLength. - * nativeLimit must be >= nativeStart. - * @param dest the UChar (UTF-16) buffer into which the extracted text is placed - * @param destCapacity The size, in UChars, of the destination buffer. May be zero - * for precomputing the required size. - * @param status receives any error status. - * U_BUFFER_OVERFLOW_ERROR: the extracted text was truncated because the - * buffer was too small. Returns number of UChars for preflighting. - * @return Number of UChars in the data to be extracted. Does not include a trailing NUL. - * - * @stable ICU 3.4 - */ -U_STABLE int32_t U_EXPORT2 -utext_extract(UText *ut, - int64_t nativeStart, int64_t nativeLimit, - UChar *dest, int32_t destCapacity, - UErrorCode *status); - - - -/************************************************************************************ - * - * #define inline versions of selected performance-critical text access functions - * Caution: do not use auto increment++ or decrement-- expressions - * as parameters to these macros. - * - * For most use, where there is no extreme performance constraint, the - * normal, non-inline functions are a better choice. The resulting code - * will be smaller, and, if the need ever arises, easier to debug. - * - * These are implemented as #defines rather than real functions - * because there is no fully portable way to do inline functions in plain C. - * - ************************************************************************************/ - -#ifndef U_HIDE_INTERNAL_API -/** - * inline version of utext_current32(), for performance-critical situations. - * - * Get the code point at the current iteration position of the UText. - * Returns U_SENTINEL (-1) if the position is at the end of the - * text. - * - * @internal ICU 4.4 technology preview - */ -#define UTEXT_CURRENT32(ut) \ - ((ut)->chunkOffset < (ut)->chunkLength && ((ut)->chunkContents)[(ut)->chunkOffset]<0xd800 ? \ - ((ut)->chunkContents)[((ut)->chunkOffset)] : utext_current32(ut)) -#endif /* U_HIDE_INTERNAL_API */ - -/** - * inline version of utext_next32(), for performance-critical situations. - * - * Get the code point at the current iteration position of the UText, and - * advance the position to the first index following the character. - * This is a post-increment operation. - * Returns U_SENTINEL (-1) if the position is at the end of the - * text. - * - * @stable ICU 3.4 - */ -#define UTEXT_NEXT32(ut) \ - ((ut)->chunkOffset < (ut)->chunkLength && ((ut)->chunkContents)[(ut)->chunkOffset]<0xd800 ? \ - ((ut)->chunkContents)[((ut)->chunkOffset)++] : utext_next32(ut)) - -/** - * inline version of utext_previous32(), for performance-critical situations. - * - * Move the iterator position to the character (code point) whose - * index precedes the current position, and return that character. - * This is a pre-decrement operation. - * Returns U_SENTINEL (-1) if the position is at the start of the text. - * - * @stable ICU 3.4 - */ -#define UTEXT_PREVIOUS32(ut) \ - ((ut)->chunkOffset > 0 && \ - (ut)->chunkContents[(ut)->chunkOffset-1] < 0xd800 ? \ - (ut)->chunkContents[--((ut)->chunkOffset)] : utext_previous32(ut)) - -/** - * inline version of utext_getNativeIndex(), for performance-critical situations. - * - * Get the current iterator position, which can range from 0 to - * the length of the text. - * The position is a native index into the input text, in whatever format it - * may have (possibly UTF-8 for example), and may not always be the same as - * the corresponding UChar (UTF-16) index. - * The returned position will always be aligned to a code point boundary. - * - * @stable ICU 3.6 - */ -#define UTEXT_GETNATIVEINDEX(ut) \ - ((ut)->chunkOffset <= (ut)->nativeIndexingLimit? \ - (ut)->chunkNativeStart+(ut)->chunkOffset : \ - (ut)->pFuncs->mapOffsetToNative(ut)) - -/** - * inline version of utext_setNativeIndex(), for performance-critical situations. - * - * Set the current iteration position to the nearest code point - * boundary at or preceding the specified index. - * The index is in the native units of the original input text. - * If the index is out of range, it will be pinned to be within - * the range of the input text. - * - * @stable ICU 3.8 - */ -#if LOG_UTEXT_SETNATIVEINDEX -/* Add logging for */ -#define UTEXT_SETNATIVEINDEX(ut, ix) \ - { int64_t __offset = (ix) - (ut)->chunkNativeStart; \ - if ((ut)->chunkContents!=0 && __offset>=0 && __offset<(int64_t)(ut)->nativeIndexingLimit && (ut)->chunkContents[__offset]<0xdc00) { \ - (ut)->chunkOffset=(int32_t)__offset; \ - } else if ((ut)->chunkContents==0 && __offset>=0 && __offset<(int64_t)(ut)->nativeIndexingLimit) { \ - os_log(OS_LOG_DEFAULT, "# UTEXT_SETNATIVEINDEX (ut) %p, (ut)->chunkContents 0, __offset %lld", (ut), __offset); \ - } else { \ - utext_setNativeIndex((ut), (ix)); } } -#else -#define UTEXT_SETNATIVEINDEX(ut, ix) \ - { int64_t __offset = (ix) - (ut)->chunkNativeStart; \ - if ((ut)->chunkContents!=0 && __offset>=0 && __offset<(int64_t)(ut)->nativeIndexingLimit && (ut)->chunkContents[__offset]<0xdc00) { \ - (ut)->chunkOffset=(int32_t)__offset; \ - } else { \ - utext_setNativeIndex((ut), (ix)); } } -#endif - - - -/************************************************************************************ - * - * Functions related to writing or modifying the text. - * These will work only with modifiable UTexts. Attempting to - * modify a read-only UText will return an error status. - * - ************************************************************************************/ - - -/** - * Return TRUE if the text can be written (modified) with utext_replace() or - * utext_copy(). For the text to be writable, the text provider must - * be of a type that supports writing and the UText must not be frozen. - * - * Attempting to modify text when utext_isWriteable() is FALSE will fail - - * the text will not be modified, and an error will be returned from the function - * that attempted the modification. - * - * @param ut the UText to be tested. - * @return TRUE if the text is modifiable. - * - * @see utext_freeze() - * @see utext_replace() - * @see utext_copy() - * @stable ICU 3.4 - * - */ -U_STABLE UBool U_EXPORT2 -utext_isWritable(const UText *ut); - - -/** - * Test whether there is meta data associated with the text. - * @see Replaceable::hasMetaData() - * - * @param ut The UText to be tested - * @return TRUE if the underlying text includes meta data. - * @stable ICU 3.4 - */ -U_STABLE UBool U_EXPORT2 -utext_hasMetaData(const UText *ut); - - -/** - * Replace a range of the original text with a replacement text. - * - * Leaves the current iteration position at the position following the - * newly inserted replacement text. - * - * This function is only available on UText types that support writing, - * that is, ones where utext_isWritable() returns TRUE. - * - * When using this function, there should be only a single UText opened onto the - * underlying native text string. Behavior after a replace operation - * on a UText is undefined for any other additional UTexts that refer to the - * modified string. - * - * @param ut the UText representing the text to be operated on. - * @param nativeStart the native index of the start of the region to be replaced - * @param nativeLimit the native index of the character following the region to be replaced. - * @param replacementText pointer to the replacement text - * @param replacementLength length of the replacement text, or -1 if the text is NUL terminated. - * @param status receives any error status. Possible errors include - * U_NO_WRITE_PERMISSION - * - * @return The signed number of (native) storage units by which - * the length of the text expanded or contracted. - * - * @stable ICU 3.4 - */ -U_STABLE int32_t U_EXPORT2 -utext_replace(UText *ut, - int64_t nativeStart, int64_t nativeLimit, - const UChar *replacementText, int32_t replacementLength, - UErrorCode *status); - - - -/** - * - * Copy or move a substring from one position to another within the text, - * while retaining any metadata associated with the text. - * This function is used to duplicate or reorder substrings. - * The destination index must not overlap the source range. - * - * The text to be copied or moved is inserted at destIndex; - * it does not replace or overwrite any existing text. - * - * The iteration position is left following the newly inserted text - * at the destination position. - * - * This function is only available on UText types that support writing, - * that is, ones where utext_isWritable() returns TRUE. - * - * When using this function, there should be only a single UText opened onto the - * underlying native text string. Behavior after a copy operation - * on a UText is undefined in any other additional UTexts that refer to the - * modified string. - * - * @param ut The UText representing the text to be operated on. - * @param nativeStart The native index of the start of the region to be copied or moved - * @param nativeLimit The native index of the character position following the region - * to be copied. - * @param destIndex The native destination index to which the source substring is - * copied or moved. - * @param move If TRUE, then the substring is moved, not copied/duplicated. - * @param status receives any error status. Possible errors include U_NO_WRITE_PERMISSION - * - * @stable ICU 3.4 - */ -U_STABLE void U_EXPORT2 -utext_copy(UText *ut, - int64_t nativeStart, int64_t nativeLimit, - int64_t destIndex, - UBool move, - UErrorCode *status); - - -/** - *

- * Freeze a UText. This prevents any modification to the underlying text itself - * by means of functions operating on this UText. - *

- *

- * Once frozen, a UText can not be unfrozen. The intent is to ensure - * that a the text underlying a frozen UText wrapper cannot be modified via that UText. - *

- *

- * Caution: freezing a UText will disable changes made via the specific - * frozen UText wrapper only; it will not have any effect on the ability to - * directly modify the text by bypassing the UText. Any such backdoor modifications - * are always an error while UText access is occurring because the underlying - * text can get out of sync with UText's buffering. - *

- * - * @param ut The UText to be frozen. - * @see utext_isWritable() - * @stable ICU 3.6 - */ -U_STABLE void U_EXPORT2 -utext_freeze(UText *ut); - - -/** - * UText provider properties (bit field indexes). - * - * @see UText - * @stable ICU 3.4 - */ -enum { - /** - * It is potentially time consuming for the provider to determine the length of the text. - * @stable ICU 3.4 - */ - UTEXT_PROVIDER_LENGTH_IS_EXPENSIVE = 1, - /** - * Text chunks remain valid and usable until the text object is modified or - * deleted, not just until the next time the access() function is called - * (which is the default). - * @stable ICU 3.4 - */ - UTEXT_PROVIDER_STABLE_CHUNKS = 2, - /** - * The provider supports modifying the text via the replace() and copy() - * functions. - * @see Replaceable - * @stable ICU 3.4 - */ - UTEXT_PROVIDER_WRITABLE = 3, - /** - * There is meta data associated with the text. - * @see Replaceable::hasMetaData() - * @stable ICU 3.4 - */ - UTEXT_PROVIDER_HAS_META_DATA = 4, - /** - * Text provider owns the text storage. - * Generally occurs as the result of a deep clone of the UText. - * When closing the UText, the associated text must - * also be closed/deleted/freed/ whatever is appropriate. - * @stable ICU 3.6 - */ - UTEXT_PROVIDER_OWNS_TEXT = 5 -}; - -/** - * Function type declaration for UText.clone(). - * - * clone a UText. Much like opening a UText where the source text is itself - * another UText. - * - * A deep clone will copy both the UText data structures and the underlying text. - * The original and cloned UText will operate completely independently; modifications - * made to the text in one will not effect the other. Text providers are not - * required to support deep clones. The user of clone() must check the status return - * and be prepared to handle failures. - * - * A shallow clone replicates only the UText data structures; it does not make - * a copy of the underlying text. Shallow clones can be used as an efficient way to - * have multiple iterators active in a single text string that is not being - * modified. - * - * A shallow clone operation must not fail except for truly exceptional conditions such - * as memory allocation failures. - * - * A UText and its clone may be safely concurrently accessed by separate threads. - * This is true for both shallow and deep clones. - * It is the responsibility of the Text Provider to ensure that this thread safety - * constraint is met. - - * - * @param dest A UText struct to be filled in with the result of the clone operation, - * or NULL if the clone function should heap-allocate a new UText struct. - * @param src The UText to be cloned. - * @param deep TRUE to request a deep clone, FALSE for a shallow clone. - * @param status Errors are returned here. For deep clones, U_UNSUPPORTED_ERROR - * should be returned if the text provider is unable to clone the - * original text. - * @return The newly created clone, or NULL if the clone operation failed. - * - * @stable ICU 3.4 - */ -typedef UText * U_CALLCONV -UTextClone(UText *dest, const UText *src, UBool deep, UErrorCode *status); - - -/** - * Function type declaration for UText.nativeLength(). - * - * @param ut the UText to get the length of. - * @return the length, in the native units of the original text string. - * @see UText - * @stable ICU 3.4 - */ -typedef int64_t U_CALLCONV -UTextNativeLength(UText *ut); - -/** - * Function type declaration for UText.access(). Get the description of the text chunk - * containing the text at a requested native index. The UText's iteration - * position will be left at the requested index. If the index is out - * of bounds, the iteration position will be left at the start or end - * of the string, as appropriate. - * - * Chunks must begin and end on code point boundaries. A single code point - * comprised of multiple storage units must never span a chunk boundary. - * - * - * @param ut the UText being accessed. - * @param nativeIndex Requested index of the text to be accessed. - * @param forward If TRUE, then the returned chunk must contain text - * starting from the index, so that start<=index - * The size (number of 16 bit UChars) in the data to be extracted is returned. The - * full amount is returned, even when the specified buffer size is smaller. - *

- * The extracted string will (if you are a user) / must (if you are a text provider) - * be NUL-terminated if there is sufficient space in the destination buffer. - * - * @param ut the UText from which to extract data. - * @param nativeStart the native index of the first character to extract. - * @param nativeLimit the native string index of the position following the last - * character to extract. - * @param dest the UChar (UTF-16) buffer into which the extracted text is placed - * @param destCapacity The size, in UChars, of the destination buffer. May be zero - * for precomputing the required size. - * @param status receives any error status. - * If U_BUFFER_OVERFLOW_ERROR: Returns number of UChars for - * preflighting. - * @return Number of UChars in the data. Does not include a trailing NUL. - * - * @stable ICU 3.4 - */ -typedef int32_t U_CALLCONV -UTextExtract(UText *ut, - int64_t nativeStart, int64_t nativeLimit, - UChar *dest, int32_t destCapacity, - UErrorCode *status); - -/** - * Function type declaration for UText.replace(). - * - * Replace a range of the original text with a replacement text. - * - * Leaves the current iteration position at the position following the - * newly inserted replacement text. - * - * This function need only be implemented on UText types that support writing. - * - * When using this function, there should be only a single UText opened onto the - * underlying native text string. The function is responsible for updating the - * text chunk within the UText to reflect the updated iteration position, - * taking into account any changes to the underlying string's structure caused - * by the replace operation. - * - * @param ut the UText representing the text to be operated on. - * @param nativeStart the index of the start of the region to be replaced - * @param nativeLimit the index of the character following the region to be replaced. - * @param replacementText pointer to the replacement text - * @param replacmentLength length of the replacement text in UChars, or -1 if the text is NUL terminated. - * @param status receives any error status. Possible errors include - * U_NO_WRITE_PERMISSION - * - * @return The signed number of (native) storage units by which - * the length of the text expanded or contracted. - * - * @stable ICU 3.4 - */ -typedef int32_t U_CALLCONV -UTextReplace(UText *ut, - int64_t nativeStart, int64_t nativeLimit, - const UChar *replacementText, int32_t replacmentLength, - UErrorCode *status); - -/** - * Function type declaration for UText.copy(). - * - * Copy or move a substring from one position to another within the text, - * while retaining any metadata associated with the text. - * This function is used to duplicate or reorder substrings. - * The destination index must not overlap the source range. - * - * The text to be copied or moved is inserted at destIndex; - * it does not replace or overwrite any existing text. - * - * This function need only be implemented for UText types that support writing. - * - * When using this function, there should be only a single UText opened onto the - * underlying native text string. The function is responsible for updating the - * text chunk within the UText to reflect the updated iteration position, - * taking into account any changes to the underlying string's structure caused - * by the replace operation. - * - * @param ut The UText representing the text to be operated on. - * @param nativeStart The index of the start of the region to be copied or moved - * @param nativeLimit The index of the character following the region to be replaced. - * @param nativeDest The destination index to which the source substring is copied or moved. - * @param move If TRUE, then the substring is moved, not copied/duplicated. - * @param status receives any error status. Possible errors include U_NO_WRITE_PERMISSION - * - * @stable ICU 3.4 - */ -typedef void U_CALLCONV -UTextCopy(UText *ut, - int64_t nativeStart, int64_t nativeLimit, - int64_t nativeDest, - UBool move, - UErrorCode *status); - -/** - * Function type declaration for UText.mapOffsetToNative(). - * Map from the current UChar offset within the current text chunk to - * the corresponding native index in the original source text. - * - * This is required only for text providers that do not use native UTF-16 indexes. - * - * @param ut the UText. - * @return Absolute (native) index corresponding to chunkOffset in the current chunk. - * The returned native index should always be to a code point boundary. - * - * @stable ICU 3.4 - */ -typedef int64_t U_CALLCONV -UTextMapOffsetToNative(const UText *ut); - -/** - * Function type declaration for UText.mapIndexToUTF16(). - * Map from a native index to a UChar offset within a text chunk. - * Behavior is undefined if the native index does not fall within the - * current chunk. - * - * This function is required only for text providers that do not use native UTF-16 indexes. - * - * @param ut The UText containing the text chunk. - * @param nativeIndex Absolute (native) text index, chunk->start<=index<=chunk->limit. - * @return Chunk-relative UTF-16 offset corresponding to the specified native - * index. - * - * @stable ICU 3.4 - */ -typedef int32_t U_CALLCONV -UTextMapNativeIndexToUTF16(const UText *ut, int64_t nativeIndex); - - -/** - * Function type declaration for UText.utextClose(). - * - * A Text Provider close function is only required for provider types that make - * allocations in their open function (or other functions) that must be - * cleaned when the UText is closed. - * - * The allocation of the UText struct itself and any "extra" storage - * associated with the UText is handled by the common UText implementation - * and does not require provider specific cleanup in a close function. - * - * Most UText provider implementations do not need to implement this function. - * - * @param ut A UText object to be closed. - * - * @stable ICU 3.4 - */ -typedef void U_CALLCONV -UTextClose(UText *ut); - - -/** - * (public) Function dispatch table for UText. - * Conceptually very much like a C++ Virtual Function Table. - * This struct defines the organization of the table. - * Each text provider implementation must provide an - * actual table that is initialized with the appropriate functions - * for the type of text being handled. - * @stable ICU 3.6 - */ -struct UTextFuncs { - /** - * (public) Function table size, sizeof(UTextFuncs) - * Intended for use should the table grow to accommodate added - * functions in the future, to allow tests for older format - * function tables that do not contain the extensions. - * - * Fields are placed for optimal alignment on - * 32/64/128-bit-pointer machines, by normally grouping together - * 4 32-bit fields, - * 4 pointers, - * 2 64-bit fields - * in sequence. - * @stable ICU 3.6 - */ - int32_t tableSize; - - /** - * (private) Alignment padding. - * Do not use, reserved for use by the UText framework only. - * @internal - */ - int32_t reserved1, /** @internal */ reserved2, /** @internal */ reserved3; - - - /** - * (public) Function pointer for UTextClone - * - * @see UTextClone - * @stable ICU 3.6 - */ - UTextClone *clone; - - /** - * (public) function pointer for UTextLength - * May be expensive to compute! - * - * @see UTextLength - * @stable ICU 3.6 - */ - UTextNativeLength *nativeLength; - - /** - * (public) Function pointer for UTextAccess. - * - * @see UTextAccess - * @stable ICU 3.6 - */ - UTextAccess *access; - - /** - * (public) Function pointer for UTextExtract. - * - * @see UTextExtract - * @stable ICU 3.6 - */ - UTextExtract *extract; - - /** - * (public) Function pointer for UTextReplace. - * - * @see UTextReplace - * @stable ICU 3.6 - */ - UTextReplace *replace; - - /** - * (public) Function pointer for UTextCopy. - * - * @see UTextCopy - * @stable ICU 3.6 - */ - UTextCopy *copy; - - /** - * (public) Function pointer for UTextMapOffsetToNative. - * - * @see UTextMapOffsetToNative - * @stable ICU 3.6 - */ - UTextMapOffsetToNative *mapOffsetToNative; - - /** - * (public) Function pointer for UTextMapNativeIndexToUTF16. - * - * @see UTextMapNativeIndexToUTF16 - * @stable ICU 3.6 - */ - UTextMapNativeIndexToUTF16 *mapNativeIndexToUTF16; - - /** - * (public) Function pointer for UTextClose. - * - * @see UTextClose - * @stable ICU 3.6 - */ - UTextClose *close; - - /** - * (private) Spare function pointer - * @internal - */ - UTextClose *spare1; - - /** - * (private) Spare function pointer - * @internal - */ - UTextClose *spare2; - - /** - * (private) Spare function pointer - * @internal - */ - UTextClose *spare3; - -}; -/** - * Function dispatch table for UText - * @see UTextFuncs - */ -typedef struct UTextFuncs UTextFuncs; - - /** - * UText struct. Provides the interface between the generic UText access code - * and the UText provider code that works on specific kinds of - * text (UTF-8, noncontiguous UTF-16, whatever.) - * - * Applications that are using predefined types of text providers - * to pass text data to ICU services will have no need to view the - * internals of the UText structs that they open. - * - * @stable ICU 3.6 - */ -struct UText { - /** - * (private) Magic. Used to help detect when UText functions are handed - * invalid or uninitialized UText structs. - * utext_openXYZ() functions take an initialized, - * but not necessarily open, UText struct as an - * optional fill-in parameter. This magic field - * is used to check for that initialization. - * Text provider close functions must NOT clear - * the magic field because that would prevent - * reuse of the UText struct. - * @internal - */ - uint32_t magic; - - - /** - * (private) Flags for managing the allocation and freeing of - * memory associated with this UText. - * @internal - */ - int32_t flags; - - - /** - * Text provider properties. This set of flags is maintained by the - * text provider implementation. - * @stable ICU 3.4 - */ - int32_t providerProperties; - - /** - * (public) sizeOfStruct=sizeof(UText) - * Allows possible backward compatible extension. - * - * @stable ICU 3.4 - */ - int32_t sizeOfStruct; - - /* ------ 16 byte alignment boundary ----------- */ - - - /** - * (protected) Native index of the first character position following - * the current chunk. - * @stable ICU 3.6 - */ - int64_t chunkNativeLimit; - - /** - * (protected) Size in bytes of the extra space (pExtra). - * @stable ICU 3.4 - */ - int32_t extraSize; - - /** - * (protected) The highest chunk offset where native indexing and - * chunk (UTF-16) indexing correspond. For UTF-16 sources, value - * will be equal to chunkLength. - * - * @stable ICU 3.6 - */ - int32_t nativeIndexingLimit; - - /* ---- 16 byte alignment boundary------ */ - - /** - * (protected) Native index of the first character in the text chunk. - * @stable ICU 3.6 - */ - int64_t chunkNativeStart; - - /** - * (protected) Current iteration position within the text chunk (UTF-16 buffer). - * This is the index to the character that will be returned by utext_next32(). - * @stable ICU 3.6 - */ - int32_t chunkOffset; - - /** - * (protected) Length the text chunk (UTF-16 buffer), in UChars. - * @stable ICU 3.6 - */ - int32_t chunkLength; - - /* ---- 16 byte alignment boundary-- */ - - - /** - * (protected) pointer to a chunk of text in UTF-16 format. - * May refer either to original storage of the source of the text, or - * if conversion was required, to a buffer owned by the UText. - * @stable ICU 3.6 - */ - const UChar *chunkContents; - - /** - * (public) Pointer to Dispatch table for accessing functions for this UText. - * @stable ICU 3.6 - */ - const UTextFuncs *pFuncs; - - /** - * (protected) Pointer to additional space requested by the - * text provider during the utext_open operation. - * @stable ICU 3.4 - */ - void *pExtra; - - /** - * (protected) Pointer to string or text-containing object or similar. - * This is the source of the text that this UText is wrapping, in a format - * that is known to the text provider functions. - * @stable ICU 3.4 - */ - const void *context; - - /* --- 16 byte alignment boundary--- */ - - /** - * (protected) Pointer fields available for use by the text provider. - * Not used by UText common code. - * @stable ICU 3.6 - */ - const void *p; - /** - * (protected) Pointer fields available for use by the text provider. - * Not used by UText common code. - * @stable ICU 3.6 - */ - const void *q; - /** - * (protected) Pointer fields available for use by the text provider. - * Not used by UText common code. - * @stable ICU 3.6 - */ - const void *r; - - /** - * Private field reserved for future use by the UText framework - * itself. This is not to be touched by the text providers. - * @internal ICU 3.4 - */ - void *privP; - - - /* --- 16 byte alignment boundary--- */ - - - /** - * (protected) Integer field reserved for use by the text provider. - * Not used by the UText framework, or by the client (user) of the UText. - * @stable ICU 3.4 - */ - int64_t a; - - /** - * (protected) Integer field reserved for use by the text provider. - * Not used by the UText framework, or by the client (user) of the UText. - * @stable ICU 3.4 - */ - int32_t b; - - /** - * (protected) Integer field reserved for use by the text provider. - * Not used by the UText framework, or by the client (user) of the UText. - * @stable ICU 3.4 - */ - int32_t c; - - /* ---- 16 byte alignment boundary---- */ - - - /** - * Private field reserved for future use by the UText framework - * itself. This is not to be touched by the text providers. - * @internal ICU 3.4 - */ - int64_t privA; - /** - * Private field reserved for future use by the UText framework - * itself. This is not to be touched by the text providers. - * @internal ICU 3.4 - */ - int32_t privB; - /** - * Private field reserved for future use by the UText framework - * itself. This is not to be touched by the text providers. - * @internal ICU 3.4 - */ - int32_t privC; -}; - - -/** - * Common function for use by Text Provider implementations to allocate and/or initialize - * a new UText struct. To be called in the implementation of utext_open() functions. - * If the supplied UText parameter is null, a new UText struct will be allocated on the heap. - * If the supplied UText is already open, the provider's close function will be called - * so that the struct can be reused by the open that is in progress. - * - * @param ut pointer to a UText struct to be re-used, or null if a new UText - * should be allocated. - * @param extraSpace The amount of additional space to be allocated as part - * of this UText, for use by types of providers that require - * additional storage. - * @param status Errors are returned here. - * @return pointer to the UText, allocated if necessary, with extra space set up if requested. - * @stable ICU 3.4 - */ -U_STABLE UText * U_EXPORT2 -utext_setup(UText *ut, int32_t extraSpace, UErrorCode *status); - -// do not use #ifndef U_HIDE_INTERNAL_API around the following! -/** - * @internal - * Value used to help identify correctly initialized UText structs. - * Note: must be publicly visible so that UTEXT_INITIALIZER can access it. - */ -enum { - UTEXT_MAGIC = 0x345ad82c -}; - -/** - * initializer to be used with local (stack) instances of a UText - * struct. UText structs must be initialized before passing - * them to one of the utext_open functions. - * - * @stable ICU 3.6 - */ -#define UTEXT_INITIALIZER { \ - UTEXT_MAGIC, /* magic */ \ - 0, /* flags */ \ - 0, /* providerProps */ \ - sizeof(UText), /* sizeOfStruct */ \ - 0, /* chunkNativeLimit */ \ - 0, /* extraSize */ \ - 0, /* nativeIndexingLimit */ \ - 0, /* chunkNativeStart */ \ - 0, /* chunkOffset */ \ - 0, /* chunkLength */ \ - NULL, /* chunkContents */ \ - NULL, /* pFuncs */ \ - NULL, /* pExtra */ \ - NULL, /* context */ \ - NULL, NULL, NULL, /* p, q, r */ \ - NULL, /* privP */ \ - 0, 0, 0, /* a, b, c */ \ - 0, 0, 0 /* privA,B,C, */ \ - } - - -U_CDECL_END - - - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf.h deleted file mode 100644 index ef512997f0..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf.h +++ /dev/null @@ -1,225 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 1999-2011, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: utf.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 1999sep09 -* created by: Markus W. Scherer -*/ - -/** - * \file - * \brief C API: Code point macros - * - * This file defines macros for checking whether a code point is - * a surrogate or a non-character etc. - * - * If U_NO_DEFAULT_INCLUDE_UTF_HEADERS is 0 then utf.h is included by utypes.h - * and itself includes utf8.h and utf16.h after some - * common definitions. - * If U_NO_DEFAULT_INCLUDE_UTF_HEADERS is 1 then each of these headers must be - * included explicitly if their definitions are used. - * - * utf8.h and utf16.h define macros for efficiently getting code points - * in and out of UTF-8/16 strings. - * utf16.h macros have "U16_" prefixes. - * utf8.h defines similar macros with "U8_" prefixes for UTF-8 string handling. - * - * ICU mostly processes 16-bit Unicode strings. - * Most of the time, such strings are well-formed UTF-16. - * Single, unpaired surrogates must be handled as well, and are treated in ICU - * like regular code points where possible. - * (Pairs of surrogate code points are indistinguishable from supplementary - * code points encoded as pairs of supplementary code units.) - * - * In fact, almost all Unicode code points in normal text (>99%) - * are on the BMP (<=U+ffff) and even <=U+d7ff. - * ICU functions handle supplementary code points (U+10000..U+10ffff) - * but are optimized for the much more frequently occurring BMP code points. - * - * umachine.h defines UChar to be an unsigned 16-bit integer. - * Since ICU 59, ICU uses char16_t in C++, UChar only in C, - * and defines UChar=char16_t by default. See the UChar API docs for details. - * - * UChar32 is defined to be a signed 32-bit integer (int32_t), large enough for a 21-bit - * Unicode code point (Unicode scalar value, 0..0x10ffff) and U_SENTINEL (-1). - * Before ICU 2.4, the definition of UChar32 was similarly platform-dependent as - * the definition of UChar. For details see the documentation for UChar32 itself. - * - * utf.h defines a small number of C macros for single Unicode code points. - * These are simple checks for surrogates and non-characters. - * For actual Unicode character properties see uchar.h. - * - * By default, string operations must be done with error checking in case - * a string is not well-formed UTF-16 or UTF-8. - * - * The U16_ macros detect if a surrogate code unit is unpaired - * (lead unit without trail unit or vice versa) and just return the unit itself - * as the code point. - * - * The U8_ macros detect illegal byte sequences and return a negative value. - * Starting with ICU 60, the observable length of a single illegal byte sequence - * skipped by one of these macros follows the Unicode 6+ recommendation - * which is consistent with the W3C Encoding Standard. - * - * There are ..._OR_FFFD versions of both U16_ and U8_ macros - * that return U+FFFD for illegal code unit sequences. - * - * The regular "safe" macros require that the initial, passed-in string index - * is within bounds. They only check the index when they read more than one - * code unit. This is usually done with code similar to the following loop: - *

while(i
- *
- * When it is safe to assume that text is well-formed UTF-16
- * (does not contain single, unpaired surrogates), then one can use
- * U16_..._UNSAFE macros.
- * These do not check for proper code unit sequences or truncated text and may
- * yield wrong results or even cause a crash if they are used with "malformed"
- * text.
- * In practice, U16_..._UNSAFE macros will produce slightly less code but
- * should not be faster because the processing is only different when a
- * surrogate code unit is detected, which will be rare.
- *
- * Similarly for UTF-8, there are "safe" macros without a suffix,
- * and U8_..._UNSAFE versions.
- * The performance differences are much larger here because UTF-8 provides so
- * many opportunities for malformed sequences.
- * The unsafe UTF-8 macros are entirely implemented inside the macro definitions
- * and are fast, while the safe UTF-8 macros call functions for some complicated cases.
- *
- * Unlike with UTF-16, malformed sequences cannot be expressed with distinct
- * code point values (0..U+10ffff). They are indicated with negative values instead.
- *
- * For more information see the ICU User Guide Strings chapter
- * (http://userguide.icu-project.org/strings).
- *
- * Usage:
- * ICU coding guidelines for if() statements should be followed when using these macros.
- * Compound statements (curly braces {}) must be used  for if-else-while... 
- * bodies and all macro statements should be terminated with semicolon.
- *
- * @stable ICU 2.4
- */
-
-#ifndef __UTF_H__
-#define __UTF_H__
-
-#include "unicode/umachine.h"
-/* include the utfXX.h after the following definitions */
-
-/* single-code point definitions -------------------------------------------- */
-
-/**
- * Is this code point a Unicode noncharacter?
- * @param c 32-bit code point
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U_IS_UNICODE_NONCHAR(c) \
-    ((c)>=0xfdd0 && \
-     ((c)<=0xfdef || ((c)&0xfffe)==0xfffe) && (c)<=0x10ffff)
-
-/**
- * Is c a Unicode code point value (0..U+10ffff)
- * that can be assigned a character?
- *
- * Code points that are not characters include:
- * - single surrogate code points (U+d800..U+dfff, 2048 code points)
- * - the last two code points on each plane (U+__fffe and U+__ffff, 34 code points)
- * - U+fdd0..U+fdef (new with Unicode 3.1, 32 code points)
- * - the highest Unicode code point value is U+10ffff
- *
- * This means that all code points below U+d800 are character code points,
- * and that boundary is tested first for performance.
- *
- * @param c 32-bit code point
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U_IS_UNICODE_CHAR(c) \
-    ((uint32_t)(c)<0xd800 || \
-        (0xdfff<(c) && (c)<=0x10ffff && !U_IS_UNICODE_NONCHAR(c)))
-
-/**
- * Is this code point a BMP code point (U+0000..U+ffff)?
- * @param c 32-bit code point
- * @return TRUE or FALSE
- * @stable ICU 2.8
- */
-#define U_IS_BMP(c) ((uint32_t)(c)<=0xffff)
-
-/**
- * Is this code point a supplementary code point (U+10000..U+10ffff)?
- * @param c 32-bit code point
- * @return TRUE or FALSE
- * @stable ICU 2.8
- */
-#define U_IS_SUPPLEMENTARY(c) ((uint32_t)((c)-0x10000)<=0xfffff)
- 
-/**
- * Is this code point a lead surrogate (U+d800..U+dbff)?
- * @param c 32-bit code point
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
-
-/**
- * Is this code point a trail surrogate (U+dc00..U+dfff)?
- * @param c 32-bit code point
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
-
-/**
- * Is this code point a surrogate (U+d800..U+dfff)?
- * @param c 32-bit code point
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
-
-/**
- * Assuming c is a surrogate code point (U_IS_SURROGATE(c)),
- * is it a lead surrogate?
- * @param c 32-bit code point
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U_IS_SURROGATE_LEAD(c) (((c)&0x400)==0)
-
-/**
- * Assuming c is a surrogate code point (U_IS_SURROGATE(c)),
- * is it a trail surrogate?
- * @param c 32-bit code point
- * @return TRUE or FALSE
- * @stable ICU 4.2
- */
-#define U_IS_SURROGATE_TRAIL(c) (((c)&0x400)!=0)
-
-/* include the utfXX.h ------------------------------------------------------ */
-
-#if !U_NO_DEFAULT_INCLUDE_UTF_HEADERS
-
-#include "unicode/utf8.h"
-#include "unicode/utf16.h"
-
-/* utf_old.h contains deprecated, pre-ICU 2.4 definitions */
-#include "unicode/utf_old.h"
-
-#endif  /* !U_NO_DEFAULT_INCLUDE_UTF_HEADERS */
-
-#endif  /* __UTF_H__ */
diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf16.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf16.h
deleted file mode 100644
index aca51b56a7..0000000000
--- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf16.h
+++ /dev/null
@@ -1,733 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-*******************************************************************************
-*
-*   Copyright (C) 1999-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  utf16.h
-*   encoding:   UTF-8
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 1999sep09
-*   created by: Markus W. Scherer
-*/
-
-/**
- * \file
- * \brief C API: 16-bit Unicode handling macros
- * 
- * This file defines macros to deal with 16-bit Unicode (UTF-16) code units and strings.
- *
- * For more information see utf.h and the ICU User Guide Strings chapter
- * (http://userguide.icu-project.org/strings).
- *
- * Usage:
- * ICU coding guidelines for if() statements should be followed when using these macros.
- * Compound statements (curly braces {}) must be used  for if-else-while... 
- * bodies and all macro statements should be terminated with semicolon.
- */
-
-#ifndef __UTF16_H__
-#define __UTF16_H__
-
-#include "unicode/umachine.h"
-#ifndef __UTF_H__
-#   include "unicode/utf.h"
-#endif
-
-/* single-code point definitions -------------------------------------------- */
-
-/**
- * Does this code unit alone encode a code point (BMP, not a surrogate)?
- * @param c 16-bit code unit
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U16_IS_SINGLE(c) !U_IS_SURROGATE(c)
-
-/**
- * Is this code unit a lead surrogate (U+d800..U+dbff)?
- * @param c 16-bit code unit
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
-
-/**
- * Is this code unit a trail surrogate (U+dc00..U+dfff)?
- * @param c 16-bit code unit
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
-
-/**
- * Is this code unit a surrogate (U+d800..U+dfff)?
- * @param c 16-bit code unit
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U16_IS_SURROGATE(c) U_IS_SURROGATE(c)
-
-/**
- * Assuming c is a surrogate code point (U16_IS_SURROGATE(c)),
- * is it a lead surrogate?
- * @param c 16-bit code unit
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U16_IS_SURROGATE_LEAD(c) (((c)&0x400)==0)
-
-/**
- * Assuming c is a surrogate code point (U16_IS_SURROGATE(c)),
- * is it a trail surrogate?
- * @param c 16-bit code unit
- * @return TRUE or FALSE
- * @stable ICU 4.2
- */
-#define U16_IS_SURROGATE_TRAIL(c) (((c)&0x400)!=0)
-
-/**
- * Helper constant for U16_GET_SUPPLEMENTARY.
- * @internal
- */
-#define U16_SURROGATE_OFFSET ((0xd800<<10UL)+0xdc00-0x10000)
-
-/**
- * Get a supplementary code point value (U+10000..U+10ffff)
- * from its lead and trail surrogates.
- * The result is undefined if the input values are not
- * lead and trail surrogates.
- *
- * @param lead lead surrogate (U+d800..U+dbff)
- * @param trail trail surrogate (U+dc00..U+dfff)
- * @return supplementary code point (U+10000..U+10ffff)
- * @stable ICU 2.4
- */
-#define U16_GET_SUPPLEMENTARY(lead, trail) \
-    (((UChar32)(lead)<<10UL)+(UChar32)(trail)-U16_SURROGATE_OFFSET)
-
-
-/**
- * Get the lead surrogate (0xd800..0xdbff) for a
- * supplementary code point (0x10000..0x10ffff).
- * @param supplementary 32-bit code point (U+10000..U+10ffff)
- * @return lead surrogate (U+d800..U+dbff) for supplementary
- * @stable ICU 2.4
- */
-#define U16_LEAD(supplementary) (UChar)(((supplementary)>>10)+0xd7c0)
-
-/**
- * Get the trail surrogate (0xdc00..0xdfff) for a
- * supplementary code point (0x10000..0x10ffff).
- * @param supplementary 32-bit code point (U+10000..U+10ffff)
- * @return trail surrogate (U+dc00..U+dfff) for supplementary
- * @stable ICU 2.4
- */
-#define U16_TRAIL(supplementary) (UChar)(((supplementary)&0x3ff)|0xdc00)
-
-/**
- * How many 16-bit code units are used to encode this Unicode code point? (1 or 2)
- * The result is not defined if c is not a Unicode code point (U+0000..U+10ffff).
- * @param c 32-bit code point
- * @return 1 or 2
- * @stable ICU 2.4
- */
-#define U16_LENGTH(c) ((uint32_t)(c)<=0xffff ? 1 : 2)
-
-/**
- * The maximum number of 16-bit code units per Unicode code point (U+0000..U+10ffff).
- * @return 2
- * @stable ICU 2.4
- */
-#define U16_MAX_LENGTH 2
-
-/**
- * Get a code point from a string at a random-access offset,
- * without changing the offset.
- * "Unsafe" macro, assumes well-formed UTF-16.
- *
- * The offset may point to either the lead or trail surrogate unit
- * for a supplementary code point, in which case the macro will read
- * the adjacent matching surrogate as well.
- * The result is undefined if the offset points to a single, unpaired surrogate.
- * Iteration through a string is more efficient with U16_NEXT_UNSAFE or U16_NEXT.
- *
- * @param s const UChar * string
- * @param i string offset
- * @param c output UChar32 variable
- * @see U16_GET
- * @stable ICU 2.4
- */
-#define U16_GET_UNSAFE(s, i, c) { \
-    (c)=(s)[i]; \
-    if(U16_IS_SURROGATE(c)) { \
-        if(U16_IS_SURROGATE_LEAD(c)) { \
-            (c)=U16_GET_SUPPLEMENTARY((c), (s)[(i)+1]); \
-        } else { \
-            (c)=U16_GET_SUPPLEMENTARY((s)[(i)-1], (c)); \
-        } \
-    } \
-}
-
-/**
- * Get a code point from a string at a random-access offset,
- * without changing the offset.
- * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
- *
- * The offset may point to either the lead or trail surrogate unit
- * for a supplementary code point, in which case the macro will read
- * the adjacent matching surrogate as well.
- *
- * The length can be negative for a NUL-terminated string.
- *
- * If the offset points to a single, unpaired surrogate, then
- * c is set to that unpaired surrogate.
- * Iteration through a string is more efficient with U16_NEXT_UNSAFE or U16_NEXT.
- *
- * @param s const UChar * string
- * @param start starting string offset (usually 0)
- * @param i string offset, must be start<=i(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \
-                (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \
-            } \
-        } \
-    } \
-}
-
-/**
- * Get a code point from a string at a random-access offset,
- * without changing the offset.
- * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
- *
- * The offset may point to either the lead or trail surrogate unit
- * for a supplementary code point, in which case the macro will read
- * the adjacent matching surrogate as well.
- *
- * The length can be negative for a NUL-terminated string.
- *
- * If the offset points to a single, unpaired surrogate, then
- * c is set to U+FFFD.
- * Iteration through a string is more efficient with U16_NEXT_UNSAFE or U16_NEXT_OR_FFFD.
- *
- * @param s const UChar * string
- * @param start starting string offset (usually 0)
- * @param i string offset, must be start<=i(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \
-                (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \
-            } else { \
-                (c)=0xfffd; \
-            } \
-        } \
-    } \
-}
-
-/* definitions with forward iteration --------------------------------------- */
-
-/**
- * Get a code point from a string at a code point boundary offset,
- * and advance the offset to the next code point boundary.
- * (Post-incrementing forward iteration.)
- * "Unsafe" macro, assumes well-formed UTF-16.
- *
- * The offset may point to the lead surrogate unit
- * for a supplementary code point, in which case the macro will read
- * the following trail surrogate as well.
- * If the offset points to a trail surrogate, then that itself
- * will be returned as the code point.
- * The result is undefined if the offset points to a single, unpaired lead surrogate.
- *
- * @param s const UChar * string
- * @param i string offset
- * @param c output UChar32 variable
- * @see U16_NEXT
- * @stable ICU 2.4
- */
-#define U16_NEXT_UNSAFE(s, i, c) { \
-    (c)=(s)[(i)++]; \
-    if(U16_IS_LEAD(c)) { \
-        (c)=U16_GET_SUPPLEMENTARY((c), (s)[(i)++]); \
-    } \
-}
-
-/**
- * Get a code point from a string at a code point boundary offset,
- * and advance the offset to the next code point boundary.
- * (Post-incrementing forward iteration.)
- * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
- *
- * The length can be negative for a NUL-terminated string.
- *
- * The offset may point to the lead surrogate unit
- * for a supplementary code point, in which case the macro will read
- * the following trail surrogate as well.
- * If the offset points to a trail surrogate or
- * to a single, unpaired lead surrogate, then c is set to that unpaired surrogate.
- *
- * @param s const UChar * string
- * @param i string offset, must be i>10)+0xd7c0); \
-        (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \
-    } \
-}
-
-/**
- * Append a code point to a string, overwriting 1 or 2 code units.
- * The offset points to the current end of the string contents
- * and is advanced (post-increment).
- * "Safe" macro, checks for a valid code point.
- * If a surrogate pair is written, checks for sufficient space in the string.
- * If the code point is not valid or a trail surrogate does not fit,
- * then isError is set to TRUE.
- *
- * @param s const UChar * string buffer
- * @param i string offset, must be i>10)+0xd7c0); \
-        (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \
-    } else /* c>0x10ffff or not enough space */ { \
-        (isError)=TRUE; \
-    } \
-}
-
-/**
- * Advance the string offset from one code point boundary to the next.
- * (Post-incrementing iteration.)
- * "Unsafe" macro, assumes well-formed UTF-16.
- *
- * @param s const UChar * string
- * @param i string offset
- * @see U16_FWD_1
- * @stable ICU 2.4
- */
-#define U16_FWD_1_UNSAFE(s, i) { \
-    if(U16_IS_LEAD((s)[(i)++])) { \
-        ++(i); \
-    } \
-}
-
-/**
- * Advance the string offset from one code point boundary to the next.
- * (Post-incrementing iteration.)
- * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
- *
- * The length can be negative for a NUL-terminated string.
- *
- * @param s const UChar * string
- * @param i string offset, must be i0) { \
-        U16_FWD_1_UNSAFE(s, i); \
-        --__N; \
-    } \
-}
-
-/**
- * Advance the string offset from one code point boundary to the n-th next one,
- * i.e., move forward by n code points.
- * (Post-incrementing iteration.)
- * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
- *
- * The length can be negative for a NUL-terminated string.
- *
- * @param s const UChar * string
- * @param i int32_t string offset, must be i0 && ((i)<(length) || ((length)<0 && (s)[i]!=0))) { \
-        U16_FWD_1(s, i, length); \
-        --__N; \
-    } \
-}
-
-/**
- * Adjust a random-access offset to a code point boundary
- * at the start of a code point.
- * If the offset points to the trail surrogate of a surrogate pair,
- * then the offset is decremented.
- * Otherwise, it is not modified.
- * "Unsafe" macro, assumes well-formed UTF-16.
- *
- * @param s const UChar * string
- * @param i string offset
- * @see U16_SET_CP_START
- * @stable ICU 2.4
- */
-#define U16_SET_CP_START_UNSAFE(s, i) { \
-    if(U16_IS_TRAIL((s)[i])) { \
-        --(i); \
-    } \
-}
-
-/**
- * Adjust a random-access offset to a code point boundary
- * at the start of a code point.
- * If the offset points to the trail surrogate of a surrogate pair,
- * then the offset is decremented.
- * Otherwise, it is not modified.
- * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
- *
- * @param s const UChar * string
- * @param start starting string offset (usually 0)
- * @param i string offset, must be start<=i
- * @see U16_SET_CP_START_UNSAFE
- * @stable ICU 2.4
- */
-#define U16_SET_CP_START(s, start, i) { \
-    if(U16_IS_TRAIL((s)[i]) && (i)>(start) && U16_IS_LEAD((s)[(i)-1])) { \
-        --(i); \
-    } \
-}
-
-/* definitions with backward iteration -------------------------------------- */
-
-/**
- * Move the string offset from one code point boundary to the previous one
- * and get the code point between them.
- * (Pre-decrementing backward iteration.)
- * "Unsafe" macro, assumes well-formed UTF-16.
- *
- * The input offset may be the same as the string length.
- * If the offset is behind a trail surrogate unit
- * for a supplementary code point, then the macro will read
- * the preceding lead surrogate as well.
- * If the offset is behind a lead surrogate, then that itself
- * will be returned as the code point.
- * The result is undefined if the offset is behind a single, unpaired trail surrogate.
- *
- * @param s const UChar * string
- * @param i string offset
- * @param c output UChar32 variable
- * @see U16_PREV
- * @stable ICU 2.4
- */
-#define U16_PREV_UNSAFE(s, i, c) { \
-    (c)=(s)[--(i)]; \
-    if(U16_IS_TRAIL(c)) { \
-        (c)=U16_GET_SUPPLEMENTARY((s)[--(i)], (c)); \
-    } \
-}
-
-/**
- * Move the string offset from one code point boundary to the previous one
- * and get the code point between them.
- * (Pre-decrementing backward iteration.)
- * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
- *
- * The input offset may be the same as the string length.
- * If the offset is behind a trail surrogate unit
- * for a supplementary code point, then the macro will read
- * the preceding lead surrogate as well.
- * If the offset is behind a lead surrogate or behind a single, unpaired
- * trail surrogate, then c is set to that unpaired surrogate.
- *
- * @param s const UChar * string
- * @param start starting string offset (usually 0)
- * @param i string offset, must be start(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \
-            --(i); \
-            (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \
-        } \
-    } \
-}
-
-/**
- * Move the string offset from one code point boundary to the previous one
- * and get the code point between them.
- * (Pre-decrementing backward iteration.)
- * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
- *
- * The input offset may be the same as the string length.
- * If the offset is behind a trail surrogate unit
- * for a supplementary code point, then the macro will read
- * the preceding lead surrogate as well.
- * If the offset is behind a lead surrogate or behind a single, unpaired
- * trail surrogate, then c is set to U+FFFD.
- *
- * @param s const UChar * string
- * @param start starting string offset (usually 0)
- * @param i string offset, must be start(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \
-            --(i); \
-            (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \
-        } else { \
-            (c)=0xfffd; \
-        } \
-    } \
-}
-
-/**
- * Move the string offset from one code point boundary to the previous one.
- * (Pre-decrementing backward iteration.)
- * The input offset may be the same as the string length.
- * "Unsafe" macro, assumes well-formed UTF-16.
- *
- * @param s const UChar * string
- * @param i string offset
- * @see U16_BACK_1
- * @stable ICU 2.4
- */
-#define U16_BACK_1_UNSAFE(s, i) { \
-    if(U16_IS_TRAIL((s)[--(i)])) { \
-        --(i); \
-    } \
-}
-
-/**
- * Move the string offset from one code point boundary to the previous one.
- * (Pre-decrementing backward iteration.)
- * The input offset may be the same as the string length.
- * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
- *
- * @param s const UChar * string
- * @param start starting string offset (usually 0)
- * @param i string offset, must be start(start) && U16_IS_LEAD((s)[(i)-1])) { \
-        --(i); \
-    } \
-}
-
-/**
- * Move the string offset from one code point boundary to the n-th one before it,
- * i.e., move backward by n code points.
- * (Pre-decrementing backward iteration.)
- * The input offset may be the same as the string length.
- * "Unsafe" macro, assumes well-formed UTF-16.
- *
- * @param s const UChar * string
- * @param i string offset
- * @param n number of code points to skip
- * @see U16_BACK_N
- * @stable ICU 2.4
- */
-#define U16_BACK_N_UNSAFE(s, i, n) { \
-    int32_t __N=(n); \
-    while(__N>0) { \
-        U16_BACK_1_UNSAFE(s, i); \
-        --__N; \
-    } \
-}
-
-/**
- * Move the string offset from one code point boundary to the n-th one before it,
- * i.e., move backward by n code points.
- * (Pre-decrementing backward iteration.)
- * The input offset may be the same as the string length.
- * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
- *
- * @param s const UChar * string
- * @param start start of string
- * @param i string offset, must be start0 && (i)>(start)) { \
-        U16_BACK_1(s, start, i); \
-        --__N; \
-    } \
-}
-
-/**
- * Adjust a random-access offset to a code point boundary after a code point.
- * If the offset is behind the lead surrogate of a surrogate pair,
- * then the offset is incremented.
- * Otherwise, it is not modified.
- * The input offset may be the same as the string length.
- * "Unsafe" macro, assumes well-formed UTF-16.
- *
- * @param s const UChar * string
- * @param i string offset
- * @see U16_SET_CP_LIMIT
- * @stable ICU 2.4
- */
-#define U16_SET_CP_LIMIT_UNSAFE(s, i) { \
-    if(U16_IS_LEAD((s)[(i)-1])) { \
-        ++(i); \
-    } \
-}
-
-/**
- * Adjust a random-access offset to a code point boundary after a code point.
- * If the offset is behind the lead surrogate of a surrogate pair,
- * then the offset is incremented.
- * Otherwise, it is not modified.
- * The input offset may be the same as the string length.
- * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
- *
- * The length can be negative for a NUL-terminated string.
- *
- * @param s const UChar * string
- * @param start int32_t starting string offset (usually 0)
- * @param i int32_t string offset, start<=i<=length
- * @param length int32_t string length
- * @see U16_SET_CP_LIMIT_UNSAFE
- * @stable ICU 2.4
- */
-#define U16_SET_CP_LIMIT(s, start, i, length) { \
-    if((start)<(i) && ((i)<(length) || (length)<0) && U16_IS_LEAD((s)[(i)-1]) && U16_IS_TRAIL((s)[i])) { \
-        ++(i); \
-    } \
-}
-
-#endif
diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf32.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf32.h
deleted file mode 100644
index 8822c4dd09..0000000000
--- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf32.h
+++ /dev/null
@@ -1,25 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-*******************************************************************************
-*
-*   Copyright (C) 1999-2001, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  utf32.h
-*   encoding:   UTF-8
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 1999sep20
-*   created by: Markus W. Scherer
-*/
-/**
- * \file
- * \brief C API: UTF-32 macros
- *
- * This file is obsolete and its contents moved to utf_old.h.
- * See utf_old.h and Jitterbug 2150 and its discussion on the ICU mailing list
- * in September 2002.
- */
diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf8.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf8.h
deleted file mode 100644
index 3685ae3d71..0000000000
--- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf8.h
+++ /dev/null
@@ -1,880 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-*******************************************************************************
-*
-*   Copyright (C) 1999-2015, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  utf8.h
-*   encoding:   UTF-8
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 1999sep13
-*   created by: Markus W. Scherer
-*/
-
-/**
- * \file
- * \brief C API: 8-bit Unicode handling macros
- * 
- * This file defines macros to deal with 8-bit Unicode (UTF-8) code units (bytes) and strings.
- *
- * For more information see utf.h and the ICU User Guide Strings chapter
- * (http://userguide.icu-project.org/strings).
- *
- * Usage:
- * ICU coding guidelines for if() statements should be followed when using these macros.
- * Compound statements (curly braces {}) must be used  for if-else-while... 
- * bodies and all macro statements should be terminated with semicolon.
- */
-
-#ifndef __UTF8_H__
-#define __UTF8_H__
-
-#include "unicode/umachine.h"
-#ifndef __UTF_H__
-#   include "unicode/utf.h"
-#endif
-
-/* internal definitions ----------------------------------------------------- */
-
-/**
- * Counts the trail bytes for a UTF-8 lead byte.
- * Returns 0 for 0..0xc1 as well as for 0xf5..0xff.
- * leadByte might be evaluated multiple times.
- *
- * This is internal since it is not meant to be called directly by external clients;
- * however it is called by public macros in this file and thus must remain stable.
- *
- * @param leadByte The first byte of a UTF-8 sequence. Must be 0..0xff.
- * @internal
- */
-#define U8_COUNT_TRAIL_BYTES(leadByte) \
-    (U8_IS_LEAD(leadByte) ? \
-        ((uint8_t)(leadByte)>=0xe0)+((uint8_t)(leadByte)>=0xf0)+1 : 0)
-
-/**
- * Counts the trail bytes for a UTF-8 lead byte of a valid UTF-8 sequence.
- * Returns 0 for 0..0xc1. Undefined for 0xf5..0xff.
- * leadByte might be evaluated multiple times.
- *
- * This is internal since it is not meant to be called directly by external clients;
- * however it is called by public macros in this file and thus must remain stable.
- *
- * @param leadByte The first byte of a UTF-8 sequence. Must be 0..0xff.
- * @internal
- */
-#define U8_COUNT_TRAIL_BYTES_UNSAFE(leadByte) \
-    (((uint8_t)(leadByte)>=0xc2)+((uint8_t)(leadByte)>=0xe0)+((uint8_t)(leadByte)>=0xf0))
-
-/**
- * Mask a UTF-8 lead byte, leave only the lower bits that form part of the code point value.
- *
- * This is internal since it is not meant to be called directly by external clients;
- * however it is called by public macros in this file and thus must remain stable.
- * @internal
- */
-#define U8_MASK_LEAD_BYTE(leadByte, countTrailBytes) ((leadByte)&=(1<<(6-(countTrailBytes)))-1)
-
-/**
- * Internal bit vector for 3-byte UTF-8 validity check, for use in U8_IS_VALID_LEAD3_AND_T1.
- * Each bit indicates whether one lead byte + first trail byte pair starts a valid sequence.
- * Lead byte E0..EF bits 3..0 are used as byte index,
- * first trail byte bits 7..5 are used as bit index into that byte.
- * @see U8_IS_VALID_LEAD3_AND_T1
- * @internal
- */
-#define U8_LEAD3_T1_BITS "\x20\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x10\x30\x30"
-
-/**
- * Internal 3-byte UTF-8 validity check.
- * Non-zero if lead byte E0..EF and first trail byte 00..FF start a valid sequence.
- * @internal
- */
-#define U8_IS_VALID_LEAD3_AND_T1(lead, t1) (U8_LEAD3_T1_BITS[(lead)&0xf]&(1<<((uint8_t)(t1)>>5)))
-
-/**
- * Internal bit vector for 4-byte UTF-8 validity check, for use in U8_IS_VALID_LEAD4_AND_T1.
- * Each bit indicates whether one lead byte + first trail byte pair starts a valid sequence.
- * First trail byte bits 7..4 are used as byte index,
- * lead byte F0..F4 bits 2..0 are used as bit index into that byte.
- * @see U8_IS_VALID_LEAD4_AND_T1
- * @internal
- */
-#define U8_LEAD4_T1_BITS "\x00\x00\x00\x00\x00\x00\x00\x00\x1E\x0F\x0F\x0F\x00\x00\x00\x00"
-
-/**
- * Internal 4-byte UTF-8 validity check.
- * Non-zero if lead byte F0..F4 and first trail byte 00..FF start a valid sequence.
- * @internal
- */
-#define U8_IS_VALID_LEAD4_AND_T1(lead, t1) (U8_LEAD4_T1_BITS[(uint8_t)(t1)>>4]&(1<<((lead)&7)))
-
-/**
- * Function for handling "next code point" with error-checking.
- *
- * This is internal since it is not meant to be called directly by external clients;
- * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this
- * file and thus must remain stable, and should not be hidden when other internal
- * functions are hidden (otherwise public macros would fail to compile).
- * @internal
- */
-U_STABLE UChar32 U_EXPORT2
-utf8_nextCharSafeBody(const uint8_t *s, int32_t *pi, int32_t length, UChar32 c, UBool strict);
-
-/**
- * Function for handling "append code point" with error-checking.
- *
- * This is internal since it is not meant to be called directly by external clients;
- * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this
- * file and thus must remain stable, and should not be hidden when other internal
- * functions are hidden (otherwise public macros would fail to compile).
- * @internal
- */
-U_STABLE int32_t U_EXPORT2
-utf8_appendCharSafeBody(uint8_t *s, int32_t i, int32_t length, UChar32 c, UBool *pIsError);
-
-/**
- * Function for handling "previous code point" with error-checking.
- *
- * This is internal since it is not meant to be called directly by external clients;
- * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this
- * file and thus must remain stable, and should not be hidden when other internal
- * functions are hidden (otherwise public macros would fail to compile).
- * @internal
- */
-U_STABLE UChar32 U_EXPORT2
-utf8_prevCharSafeBody(const uint8_t *s, int32_t start, int32_t *pi, UChar32 c, UBool strict);
-
-/**
- * Function for handling "skip backward one code point" with error-checking.
- *
- * This is internal since it is not meant to be called directly by external clients;
- * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this
- * file and thus must remain stable, and should not be hidden when other internal
- * functions are hidden (otherwise public macros would fail to compile).
- * @internal
- */
-U_STABLE int32_t U_EXPORT2
-utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
-
-/* single-code point definitions -------------------------------------------- */
-
-/**
- * Does this code unit (byte) encode a code point by itself (US-ASCII 0..0x7f)?
- * @param c 8-bit code unit (byte)
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U8_IS_SINGLE(c) (((c)&0x80)==0)
-
-/**
- * Is this code unit (byte) a UTF-8 lead byte? (0xC2..0xF4)
- * @param c 8-bit code unit (byte)
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U8_IS_LEAD(c) ((uint8_t)((c)-0xc2)<=0x32)
-// 0x32=0xf4-0xc2
-
-/**
- * Is this code unit (byte) a UTF-8 trail byte? (0x80..0xBF)
- * @param c 8-bit code unit (byte)
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define U8_IS_TRAIL(c) ((int8_t)(c)<-0x40)
-
-/**
- * How many code units (bytes) are used for the UTF-8 encoding
- * of this Unicode code point?
- * @param c 32-bit code point
- * @return 1..4, or 0 if c is a surrogate or not a Unicode code point
- * @stable ICU 2.4
- */
-#define U8_LENGTH(c) \
-    ((uint32_t)(c)<=0x7f ? 1 : \
-        ((uint32_t)(c)<=0x7ff ? 2 : \
-            ((uint32_t)(c)<=0xd7ff ? 3 : \
-                ((uint32_t)(c)<=0xdfff || (uint32_t)(c)>0x10ffff ? 0 : \
-                    ((uint32_t)(c)<=0xffff ? 3 : 4)\
-                ) \
-            ) \
-        ) \
-    )
-
-/**
- * The maximum number of UTF-8 code units (bytes) per Unicode code point (U+0000..U+10ffff).
- * @return 4
- * @stable ICU 2.4
- */
-#define U8_MAX_LENGTH 4
-
-/**
- * Get a code point from a string at a random-access offset,
- * without changing the offset.
- * The offset may point to either the lead byte or one of the trail bytes
- * for a code point, in which case the macro will read all of the bytes
- * for the code point.
- * The result is undefined if the offset points to an illegal UTF-8
- * byte sequence.
- * Iteration through a string is more efficient with U8_NEXT_UNSAFE or U8_NEXT.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @param c output UChar32 variable
- * @see U8_GET
- * @stable ICU 2.4
- */
-#define U8_GET_UNSAFE(s, i, c) { \
-    int32_t _u8_get_unsafe_index=(int32_t)(i); \
-    U8_SET_CP_START_UNSAFE(s, _u8_get_unsafe_index); \
-    U8_NEXT_UNSAFE(s, _u8_get_unsafe_index, c); \
-}
-
-/**
- * Get a code point from a string at a random-access offset,
- * without changing the offset.
- * The offset may point to either the lead byte or one of the trail bytes
- * for a code point, in which case the macro will read all of the bytes
- * for the code point.
- *
- * The length can be negative for a NUL-terminated string.
- *
- * If the offset points to an illegal UTF-8 byte sequence, then
- * c is set to a negative value.
- * Iteration through a string is more efficient with U8_NEXT_UNSAFE or U8_NEXT.
- *
- * @param s const uint8_t * string
- * @param start int32_t starting string offset
- * @param i int32_t string offset, must be start<=i=0xe0 ? \
-                ((c)<0xf0 ?  /* U+0800..U+FFFF except surrogates */ \
-                    U8_LEAD3_T1_BITS[(c)&=0xf]&(1<<((__t=(s)[i])>>5)) && \
-                    (__t&=0x3f, 1) \
-                :  /* U+10000..U+10FFFF */ \
-                    ((c)-=0xf0)<=4 && \
-                    U8_LEAD4_T1_BITS[(__t=(s)[i])>>4]&(1<<(c)) && \
-                    ((c)=((c)<<6)|(__t&0x3f), ++(i)!=(length)) && \
-                    (__t=(s)[i]-0x80)<=0x3f) && \
-                /* valid second-to-last trail byte */ \
-                ((c)=((c)<<6)|__t, ++(i)!=(length)) \
-            :  /* U+0080..U+07FF */ \
-                (c)>=0xc2 && ((c)&=0x1f, 1)) && \
-            /* last trail byte */ \
-            (__t=(s)[i]-0x80)<=0x3f && \
-            ((c)=((c)<<6)|__t, ++(i), 1)) { \
-        } else { \
-            (c)=(sub);  /* ill-formed*/ \
-        } \
-    } \
-}
-
-/**
- * Append a code point to a string, overwriting 1 to 4 bytes.
- * The offset points to the current end of the string contents
- * and is advanced (post-increment).
- * "Unsafe" macro, assumes a valid code point and sufficient space in the string.
- * Otherwise, the result is undefined.
- *
- * @param s const uint8_t * string buffer
- * @param i string offset
- * @param c code point to append
- * @see U8_APPEND
- * @stable ICU 2.4
- */
-#define U8_APPEND_UNSAFE(s, i, c) { \
-    uint32_t __uc=(c); \
-    if(__uc<=0x7f) { \
-        (s)[(i)++]=(uint8_t)__uc; \
-    } else { \
-        if(__uc<=0x7ff) { \
-            (s)[(i)++]=(uint8_t)((__uc>>6)|0xc0); \
-        } else { \
-            if(__uc<=0xffff) { \
-                (s)[(i)++]=(uint8_t)((__uc>>12)|0xe0); \
-            } else { \
-                (s)[(i)++]=(uint8_t)((__uc>>18)|0xf0); \
-                (s)[(i)++]=(uint8_t)(((__uc>>12)&0x3f)|0x80); \
-            } \
-            (s)[(i)++]=(uint8_t)(((__uc>>6)&0x3f)|0x80); \
-        } \
-        (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \
-    } \
-}
-
-/**
- * Append a code point to a string, overwriting 1 to 4 bytes.
- * The offset points to the current end of the string contents
- * and is advanced (post-increment).
- * "Safe" macro, checks for a valid code point.
- * If a non-ASCII code point is written, checks for sufficient space in the string.
- * If the code point is not valid or trail bytes do not fit,
- * then isError is set to TRUE.
- *
- * @param s const uint8_t * string buffer
- * @param i int32_t string offset, must be i>6)|0xc0); \
-        (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \
-    } else if((__uc<=0xd7ff || (0xe000<=__uc && __uc<=0xffff)) && (i)+2<(capacity)) { \
-        (s)[(i)++]=(uint8_t)((__uc>>12)|0xe0); \
-        (s)[(i)++]=(uint8_t)(((__uc>>6)&0x3f)|0x80); \
-        (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \
-    } else if(0xffff<__uc && __uc<=0x10ffff && (i)+3<(capacity)) { \
-        (s)[(i)++]=(uint8_t)((__uc>>18)|0xf0); \
-        (s)[(i)++]=(uint8_t)(((__uc>>12)&0x3f)|0x80); \
-        (s)[(i)++]=(uint8_t)(((__uc>>6)&0x3f)|0x80); \
-        (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \
-    } else { \
-        (isError)=TRUE; \
-    } \
-}
-
-/**
- * Advance the string offset from one code point boundary to the next.
- * (Post-incrementing iteration.)
- * "Unsafe" macro, assumes well-formed UTF-8.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @see U8_FWD_1
- * @stable ICU 2.4
- */
-#define U8_FWD_1_UNSAFE(s, i) { \
-    (i)+=1+U8_COUNT_TRAIL_BYTES_UNSAFE((s)[i]); \
-}
-
-/**
- * Advance the string offset from one code point boundary to the next.
- * (Post-incrementing iteration.)
- * "Safe" macro, checks for illegal sequences and for string boundaries.
- *
- * The length can be negative for a NUL-terminated string.
- *
- * @param s const uint8_t * string
- * @param i int32_t string offset, must be i=0xf0 */ { \
-            if(U8_IS_VALID_LEAD4_AND_T1(__b, __t1) && \
-                    ++(i)!=(length) && U8_IS_TRAIL((s)[i]) && \
-                    ++(i)!=(length) && U8_IS_TRAIL((s)[i])) { \
-                ++(i); \
-            } \
-        } \
-    } \
-}
-
-/**
- * Advance the string offset from one code point boundary to the n-th next one,
- * i.e., move forward by n code points.
- * (Post-incrementing iteration.)
- * "Unsafe" macro, assumes well-formed UTF-8.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @param n number of code points to skip
- * @see U8_FWD_N
- * @stable ICU 2.4
- */
-#define U8_FWD_N_UNSAFE(s, i, n) { \
-    int32_t __N=(n); \
-    while(__N>0) { \
-        U8_FWD_1_UNSAFE(s, i); \
-        --__N; \
-    } \
-}
-
-/**
- * Advance the string offset from one code point boundary to the n-th next one,
- * i.e., move forward by n code points.
- * (Post-incrementing iteration.)
- * "Safe" macro, checks for illegal sequences and for string boundaries.
- *
- * The length can be negative for a NUL-terminated string.
- *
- * @param s const uint8_t * string
- * @param i int32_t string offset, must be i0 && ((i)<(length) || ((length)<0 && (s)[i]!=0))) { \
-        U8_FWD_1(s, i, length); \
-        --__N; \
-    } \
-}
-
-/**
- * Adjust a random-access offset to a code point boundary
- * at the start of a code point.
- * If the offset points to a UTF-8 trail byte,
- * then the offset is moved backward to the corresponding lead byte.
- * Otherwise, it is not modified.
- * "Unsafe" macro, assumes well-formed UTF-8.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @see U8_SET_CP_START
- * @stable ICU 2.4
- */
-#define U8_SET_CP_START_UNSAFE(s, i) { \
-    while(U8_IS_TRAIL((s)[i])) { --(i); } \
-}
-
-/**
- * Adjust a random-access offset to a code point boundary
- * at the start of a code point.
- * If the offset points to a UTF-8 trail byte,
- * then the offset is moved backward to the corresponding lead byte.
- * Otherwise, it is not modified.
- *
- * "Safe" macro, checks for illegal sequences and for string boundaries.
- * Unlike U8_TRUNCATE_IF_INCOMPLETE(), this macro always reads s[i].
- *
- * @param s const uint8_t * string
- * @param start int32_t starting string offset (usually 0)
- * @param i int32_t string offset, must be start<=i
- * @see U8_SET_CP_START_UNSAFE
- * @see U8_TRUNCATE_IF_INCOMPLETE
- * @stable ICU 2.4
- */
-#define U8_SET_CP_START(s, start, i) { \
-    if(U8_IS_TRAIL((s)[(i)])) { \
-        (i)=utf8_back1SafeBody(s, start, (i)); \
-    } \
-}
-
-/**
- * If the string ends with a UTF-8 byte sequence that is valid so far
- * but incomplete, then reduce the length of the string to end before
- * the lead byte of that incomplete sequence.
- * For example, if the string ends with E1 80, the length is reduced by 2.
- *
- * In all other cases (the string ends with a complete sequence, or it is not
- * possible for any further trail byte to extend the trailing sequence)
- * the length remains unchanged.
- *
- * Useful for processing text split across multiple buffers
- * (save the incomplete sequence for later)
- * and for optimizing iteration
- * (check for string length only once per character).
- *
- * "Safe" macro, checks for illegal sequences and for string boundaries.
- * Unlike U8_SET_CP_START(), this macro never reads s[length].
- *
- * (In UTF-16, simply check for U16_IS_LEAD(last code unit).)
- *
- * @param s const uint8_t * string
- * @param start int32_t starting string offset (usually 0)
- * @param length int32_t string length (usually start<=length)
- * @see U8_SET_CP_START
- * @stable ICU 61
- */
-#define U8_TRUNCATE_IF_INCOMPLETE(s, start, length) \
-    if((length)>(start)) { \
-        uint8_t __b1=s[(length)-1]; \
-        if(U8_IS_SINGLE(__b1)) { \
-            /* common ASCII character */ \
-        } else if(U8_IS_LEAD(__b1)) { \
-            --(length); \
-        } else if(U8_IS_TRAIL(__b1) && ((length)-2)>=(start)) { \
-            uint8_t __b2=s[(length)-2]; \
-            if(0xe0<=__b2 && __b2<=0xf4) { \
-                if(__b2<0xf0 ? U8_IS_VALID_LEAD3_AND_T1(__b2, __b1) : \
-                        U8_IS_VALID_LEAD4_AND_T1(__b2, __b1)) { \
-                    (length)-=2; \
-                } \
-            } else if(U8_IS_TRAIL(__b2) && ((length)-3)>=(start)) { \
-                uint8_t __b3=s[(length)-3]; \
-                if(0xf0<=__b3 && __b3<=0xf4 && U8_IS_VALID_LEAD4_AND_T1(__b3, __b2)) { \
-                    (length)-=3; \
-                } \
-            } \
-        } \
-    }
-
-/* definitions with backward iteration -------------------------------------- */
-
-/**
- * Move the string offset from one code point boundary to the previous one
- * and get the code point between them.
- * (Pre-decrementing backward iteration.)
- * "Unsafe" macro, assumes well-formed UTF-8.
- *
- * The input offset may be the same as the string length.
- * If the offset is behind a multi-byte sequence, then the macro will read
- * the whole sequence.
- * If the offset is behind a lead byte, then that itself
- * will be returned as the code point.
- * The result is undefined if the offset is behind an illegal UTF-8 sequence.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @param c output UChar32 variable
- * @see U8_PREV
- * @stable ICU 2.4
- */
-#define U8_PREV_UNSAFE(s, i, c) { \
-    (c)=(uint8_t)(s)[--(i)]; \
-    if(U8_IS_TRAIL(c)) { \
-        uint8_t __b, __count=1, __shift=6; \
-\
-        /* c is a trail byte */ \
-        (c)&=0x3f; \
-        for(;;) { \
-            __b=(s)[--(i)]; \
-            if(__b>=0xc0) { \
-                U8_MASK_LEAD_BYTE(__b, __count); \
-                (c)|=(UChar32)__b<<__shift; \
-                break; \
-            } else { \
-                (c)|=(UChar32)(__b&0x3f)<<__shift; \
-                ++__count; \
-                __shift+=6; \
-            } \
-        } \
-    } \
-}
-
-/**
- * Move the string offset from one code point boundary to the previous one
- * and get the code point between them.
- * (Pre-decrementing backward iteration.)
- * "Safe" macro, checks for illegal sequences and for string boundaries.
- *
- * The input offset may be the same as the string length.
- * If the offset is behind a multi-byte sequence, then the macro will read
- * the whole sequence.
- * If the offset is behind a lead byte, then that itself
- * will be returned as the code point.
- * If the offset is behind an illegal UTF-8 sequence, then c is set to a negative value.
- *
- * @param s const uint8_t * string
- * @param start int32_t starting string offset (usually 0)
- * @param i int32_t string offset, must be start0) { \
-        U8_BACK_1_UNSAFE(s, i); \
-        --__N; \
-    } \
-}
-
-/**
- * Move the string offset from one code point boundary to the n-th one before it,
- * i.e., move backward by n code points.
- * (Pre-decrementing backward iteration.)
- * The input offset may be the same as the string length.
- * "Safe" macro, checks for illegal sequences and for string boundaries.
- *
- * @param s const uint8_t * string
- * @param start int32_t index of the start of the string
- * @param i int32_t string offset, must be start0 && (i)>(start)) { \
-        U8_BACK_1(s, start, i); \
-        --__N; \
-    } \
-}
-
-/**
- * Adjust a random-access offset to a code point boundary after a code point.
- * If the offset is behind a partial multi-byte sequence,
- * then the offset is incremented to behind the whole sequence.
- * Otherwise, it is not modified.
- * The input offset may be the same as the string length.
- * "Unsafe" macro, assumes well-formed UTF-8.
- *
- * @param s const uint8_t * string
- * @param i string offset
- * @see U8_SET_CP_LIMIT
- * @stable ICU 2.4
- */
-#define U8_SET_CP_LIMIT_UNSAFE(s, i) { \
-    U8_BACK_1_UNSAFE(s, i); \
-    U8_FWD_1_UNSAFE(s, i); \
-}
-
-/**
- * Adjust a random-access offset to a code point boundary after a code point.
- * If the offset is behind a partial multi-byte sequence,
- * then the offset is incremented to behind the whole sequence.
- * Otherwise, it is not modified.
- * The input offset may be the same as the string length.
- * "Safe" macro, checks for illegal sequences and for string boundaries.
- *
- * The length can be negative for a NUL-terminated string.
- *
- * @param s const uint8_t * string
- * @param start int32_t starting string offset (usually 0)
- * @param i int32_t string offset, must be start<=i<=length
- * @param length int32_t string length
- * @see U8_SET_CP_LIMIT_UNSAFE
- * @stable ICU 2.4
- */
-#define U8_SET_CP_LIMIT(s, start, i, length) { \
-    if((start)<(i) && ((i)<(length) || (length)<0)) { \
-        U8_BACK_1(s, start, i); \
-        U8_FWD_1(s, i, length); \
-    } \
-}
-
-#endif
diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf_old.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf_old.h
deleted file mode 100644
index 55c17c01df..0000000000
--- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utf_old.h
+++ /dev/null
@@ -1,1204 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2002-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  utf_old.h
-*   encoding:   UTF-8
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2002sep21
-*   created by: Markus W. Scherer
-*/
-
-/**
- * \file
- * \brief C API: Deprecated macros for Unicode string handling
- */
-
-/**
- *
- * The macros in utf_old.h are all deprecated and their use discouraged.
- * Some of the design principles behind the set of UTF macros
- * have changed or proved impractical.
- * Almost all of the old "UTF macros" are at least renamed.
- * If you are looking for a new equivalent to an old macro, please see the
- * comment at the old one.
- *
- * Brief summary of reasons for deprecation:
- * - Switch on UTF_SIZE (selection of UTF-8/16/32 default string processing)
- *   was impractical.
- * - Switch on UTF_SAFE etc. (selection of unsafe/safe/strict default string processing)
- *   was of little use and impractical.
- * - Whole classes of macros became obsolete outside of the UTF_SIZE/UTF_SAFE
- *   selection framework: UTF32_ macros (all trivial)
- *   and UTF_ default and intermediate macros (all aliases).
- * - The selection framework also caused many macro aliases.
- * - Change in Unicode standard: "irregular" sequences (3.0) became illegal (3.2).
- * - Change of language in Unicode standard:
- *   Growing distinction between internal x-bit Unicode strings and external UTF-x
- *   forms, with the former more lenient.
- *   Suggests renaming of UTF16_ macros to U16_.
- * - The prefix "UTF_" without a width number confused some users.
- * - "Safe" append macros needed the addition of an error indicator output.
- * - "Safe" UTF-8 macros used legitimate (if rarely used) code point values
- *   to indicate error conditions.
- * - The use of the "_CHAR" infix for code point operations confused some users.
- *
- * More details:
- *
- * Until ICU 2.2, utf.h theoretically allowed to choose among UTF-8/16/32
- * for string processing, and among unsafe/safe/strict default macros for that.
- *
- * It proved nearly impossible to write non-trivial, high-performance code
- * that is UTF-generic.
- * Unsafe default macros would be dangerous for default string processing,
- * and the main reason for the "strict" versions disappeared:
- * Between Unicode 3.0 and 3.2 all "irregular" UTF-8 sequences became illegal.
- * The only other conditions that "strict" checked for were non-characters,
- * which are valid during processing. Only during text input/output should they
- * be checked, and at that time other well-formedness checks may be
- * necessary or useful as well.
- * This can still be done by using U16_NEXT and U_IS_UNICODE_NONCHAR
- * or U_IS_UNICODE_CHAR.
- *
- * The old UTF8_..._SAFE macros also used some normal Unicode code points
- * to indicate malformed sequences.
- * The new UTF8_ macros without suffix use negative values instead.
- *
- * The entire contents of utf32.h was moved here without replacement
- * because all those macros were trivial and
- * were meaningful only in the framework of choosing the UTF size.
- *
- * See Jitterbug 2150 and its discussion on the ICU mailing list
- * in September 2002.
- *
- * 
- * - * Obsolete part of pre-ICU 2.4 utf.h file documentation: - * - *

The original concept for these files was for ICU to allow - * in principle to set which UTF (UTF-8/16/32) is used internally - * by defining UTF_SIZE to either 8, 16, or 32. utf.h would then define the UChar type - * accordingly. UTF-16 was the default.

- * - *

This concept has been abandoned. - * A lot of the ICU source code assumes UChar strings are in UTF-16. - * This is especially true for low-level code like - * conversion, normalization, and collation. - * The utf.h header enforces the default of UTF-16. - * The UTF-8 and UTF-32 macros remain for now for completeness and backward compatibility.

- * - *

Accordingly, utf.h defines UChar to be an unsigned 16-bit integer. If this matches wchar_t, then - * UChar is defined to be exactly wchar_t, otherwise uint16_t.

- * - *

UChar32 is defined to be a signed 32-bit integer (int32_t), large enough for a 21-bit - * Unicode code point (Unicode scalar value, 0..0x10ffff). - * Before ICU 2.4, the definition of UChar32 was similarly platform-dependent as - * the definition of UChar. For details see the documentation for UChar32 itself.

- * - *

utf.h also defines a number of C macros for handling single Unicode code points and - * for using UTF Unicode strings. It includes utf8.h, utf16.h, and utf32.h for the actual - * implementations of those macros and then aliases one set of them (for UTF-16) for general use. - * The UTF-specific macros have the UTF size in the macro name prefixes (UTF16_...), while - * the general alias macros always begin with UTF_...

- * - *

Many string operations can be done with or without error checking. - * Where such a distinction is useful, there are two versions of the macros, "unsafe" and "safe" - * ones with ..._UNSAFE and ..._SAFE suffixes. The unsafe macros are fast but may cause - * program failures if the strings are not well-formed. The safe macros have an additional, boolean - * parameter "strict". If strict is FALSE, then only illegal sequences are detected. - * Otherwise, irregular sequences and non-characters are detected as well (like single surrogates). - * Safe macros return special error code points for illegal/irregular sequences: - * Typically, U+ffff, or values that would result in a code unit sequence of the same length - * as the erroneous input sequence.
- * Note that _UNSAFE macros have fewer parameters: They do not have the strictness parameter, and - * they do not have start/length parameters for boundary checking.

- * - *

Here, the macros are aliased in two steps: - * In the first step, the UTF-specific macros with UTF16_ prefix and _UNSAFE and _SAFE suffixes are - * aliased according to the UTF_SIZE to macros with UTF_ prefix and the same suffixes and signatures. - * Then, in a second step, the default, general alias macros are set to use either the unsafe or - * the safe/not strict (default) or the safe/strict macro; - * these general macros do not have a strictness parameter.

- * - *

It is possible to change the default choice for the general alias macros to be unsafe, safe/not strict or safe/strict. - * The default is safe/not strict. It is not recommended to select the unsafe macros as the basis for - * Unicode string handling in ICU! To select this, define UTF_SAFE, UTF_STRICT, or UTF_UNSAFE.

- * - *

For general use, one should use the default, general macros with UTF_ prefix and no _SAFE/_UNSAFE suffix. - * Only in some cases it may be necessary to control the choice of macro directly and use a less generic alias. - * For example, if it can be assumed that a string is well-formed and the index will stay within the bounds, - * then the _UNSAFE version may be used. - * If a UTF-8 string is to be processed, then the macros with UTF8_ prefixes need to be used.

- * - *
- * - * @deprecated ICU 2.4. Use the macros in utf.h, utf16.h, utf8.h instead. - */ - -#ifndef __UTF_OLD_H__ -#define __UTF_OLD_H__ - -/** - * \def U_HIDE_OBSOLETE_UTF_OLD_H - * - * Hides the obsolete definitions in unicode/utf_old.h. - * Recommended to be set to 1 at compile time to make sure - * the long-deprecated macros are no longer used. - * - * For reasons for the deprecation see the utf_old.h file comments. - * - * @internal - */ -#ifndef U_HIDE_OBSOLETE_UTF_OLD_H -# define U_HIDE_OBSOLETE_UTF_OLD_H 0 -#endif - -#if !defined(U_HIDE_DEPRECATED_API) && !U_HIDE_OBSOLETE_UTF_OLD_H - -#include "unicode/utf.h" -#include "unicode/utf8.h" -#include "unicode/utf16.h" - -/* Formerly utf.h, part 1 --------------------------------------------------- */ - -#ifdef U_USE_UTF_DEPRECATES -/** - * Unicode string and array offset and index type. - * ICU always counts Unicode code units (UChars) for - * string offsets, indexes, and lengths, not Unicode code points. - * - * @obsolete ICU 2.6. Use int32_t directly instead since this API will be removed in that release. - */ -typedef int32_t UTextOffset; -#endif - -/** Number of bits in a Unicode string code unit - ICU uses 16-bit Unicode. @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF_SIZE 16 - -/** - * The default choice for general Unicode string macros is to use the ..._SAFE macro implementations - * with strict=FALSE. - * - * @deprecated ICU 2.4. Obsolete, see utf_old.h. - */ -#define UTF_SAFE -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#undef UTF_UNSAFE -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#undef UTF_STRICT - -/** - * UTF8_ERROR_VALUE_1 and UTF8_ERROR_VALUE_2 are special error values for UTF-8, - * which need 1 or 2 bytes in UTF-8: - * \code - * U+0015 = NAK = Negative Acknowledge, C0 control character - * U+009f = highest C1 control character - * \endcode - * - * These are used by UTF8_..._SAFE macros so that they can return an error value - * that needs the same number of code units (bytes) as were seen by - * a macro. They should be tested with UTF_IS_ERROR() or UTF_IS_VALID(). - * - * @deprecated ICU 2.4. Obsolete, see utf_old.h. - */ -#define UTF8_ERROR_VALUE_1 0x15 - -/** - * See documentation on UTF8_ERROR_VALUE_1 for details. - * - * @deprecated ICU 2.4. Obsolete, see utf_old.h. - */ -#define UTF8_ERROR_VALUE_2 0x9f - -/** - * Error value for all UTFs. This code point value will be set by macros with error - * checking if an error is detected. - * - * @deprecated ICU 2.4. Obsolete, see utf_old.h. - */ -#define UTF_ERROR_VALUE 0xffff - -/** - * Is a given 32-bit code an error value - * as returned by one of the macros for any UTF? - * - * @deprecated ICU 2.4. Obsolete, see utf_old.h. - */ -#define UTF_IS_ERROR(c) \ - (((c)&0xfffe)==0xfffe || (c)==UTF8_ERROR_VALUE_1 || (c)==UTF8_ERROR_VALUE_2) - -/** - * This is a combined macro: Is c a valid Unicode value _and_ not an error code? - * - * @deprecated ICU 2.4. Obsolete, see utf_old.h. - */ -#define UTF_IS_VALID(c) \ - (UTF_IS_UNICODE_CHAR(c) && \ - (c)!=UTF8_ERROR_VALUE_1 && (c)!=UTF8_ERROR_VALUE_2) - -/** - * Is this code unit or code point a surrogate (U+d800..U+dfff)? - * @deprecated ICU 2.4. Renamed to U_IS_SURROGATE and U16_IS_SURROGATE, see utf_old.h. - */ -#define UTF_IS_SURROGATE(uchar) (((uchar)&0xfffff800)==0xd800) - -/** - * Is a given 32-bit code point a Unicode noncharacter? - * - * @deprecated ICU 2.4. Renamed to U_IS_UNICODE_NONCHAR, see utf_old.h. - */ -#define UTF_IS_UNICODE_NONCHAR(c) \ - ((c)>=0xfdd0 && \ - ((uint32_t)(c)<=0xfdef || ((c)&0xfffe)==0xfffe) && \ - (uint32_t)(c)<=0x10ffff) - -/** - * Is a given 32-bit value a Unicode code point value (0..U+10ffff) - * that can be assigned a character? - * - * Code points that are not characters include: - * - single surrogate code points (U+d800..U+dfff, 2048 code points) - * - the last two code points on each plane (U+__fffe and U+__ffff, 34 code points) - * - U+fdd0..U+fdef (new with Unicode 3.1, 32 code points) - * - the highest Unicode code point value is U+10ffff - * - * This means that all code points below U+d800 are character code points, - * and that boundary is tested first for performance. - * - * @deprecated ICU 2.4. Renamed to U_IS_UNICODE_CHAR, see utf_old.h. - */ -#define UTF_IS_UNICODE_CHAR(c) \ - ((uint32_t)(c)<0xd800 || \ - ((uint32_t)(c)>0xdfff && \ - (uint32_t)(c)<=0x10ffff && \ - !UTF_IS_UNICODE_NONCHAR(c))) - -/* Formerly utf8.h ---------------------------------------------------------- */ - -/** -* \var utf8_countTrailBytes -* Internal array with numbers of trail bytes for any given byte used in -* lead byte position. -* -* This is internal since it is not meant to be called directly by external clients; -* however it is called by public macros in this file and thus must remain stable, -* and should not be hidden when other internal functions are hidden (otherwise -* public macros would fail to compile). -* @internal -*/ -#ifdef U_UTF8_IMPL -// No forward declaration if compiling utf_impl.cpp, which defines utf8_countTrailBytes. -#elif defined(U_STATIC_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) -U_CFUNC const uint8_t utf8_countTrailBytes[]; -#else -U_CFUNC U_IMPORT const uint8_t utf8_countTrailBytes[]; /* U_IMPORT2? */ /*U_IMPORT*/ -#endif - -/** - * Count the trail bytes for a UTF-8 lead byte. - * @deprecated ICU 2.4. Renamed to U8_COUNT_TRAIL_BYTES, see utf_old.h. - */ -#define UTF8_COUNT_TRAIL_BYTES(leadByte) (utf8_countTrailBytes[(uint8_t)leadByte]) - -/** - * Mask a UTF-8 lead byte, leave only the lower bits that form part of the code point value. - * @deprecated ICU 2.4. Renamed to U8_MASK_LEAD_BYTE, see utf_old.h. - */ -#define UTF8_MASK_LEAD_BYTE(leadByte, countTrailBytes) ((leadByte)&=(1<<(6-(countTrailBytes)))-1) - -/** Is this this code point a single code unit (byte)? @deprecated ICU 2.4. Renamed to U8_IS_SINGLE, see utf_old.h. */ -#define UTF8_IS_SINGLE(uchar) (((uchar)&0x80)==0) -/** Is this this code unit the lead code unit (byte) of a code point? @deprecated ICU 2.4. Renamed to U8_IS_LEAD, see utf_old.h. */ -#define UTF8_IS_LEAD(uchar) ((uint8_t)((uchar)-0xc0)<0x3e) -/** Is this this code unit a trailing code unit (byte) of a code point? @deprecated ICU 2.4. Renamed to U8_IS_TRAIL, see utf_old.h. */ -#define UTF8_IS_TRAIL(uchar) (((uchar)&0xc0)==0x80) - -/** Does this scalar Unicode value need multiple code units for storage? @deprecated ICU 2.4. Use U8_LENGTH or test ((uint32_t)(c)>0x7f) instead, see utf_old.h. */ -#define UTF8_NEED_MULTIPLE_UCHAR(c) ((uint32_t)(c)>0x7f) - -/** - * Given the lead character, how many bytes are taken by this code point. - * ICU does not deal with code points >0x10ffff - * unless necessary for advancing in the byte stream. - * - * These length macros take into account that for values >0x10ffff - * the UTF8_APPEND_CHAR_SAFE macros would write the error code point 0xffff - * with 3 bytes. - * Code point comparisons need to be in uint32_t because UChar32 - * may be a signed type, and negative values must be recognized. - * - * @deprecated ICU 2.4. Use U8_LENGTH instead, see utf.h. - */ -#if 1 -# define UTF8_CHAR_LENGTH(c) \ - ((uint32_t)(c)<=0x7f ? 1 : \ - ((uint32_t)(c)<=0x7ff ? 2 : \ - ((uint32_t)((c)-0x10000)>0xfffff ? 3 : 4) \ - ) \ - ) -#else -# define UTF8_CHAR_LENGTH(c) \ - ((uint32_t)(c)<=0x7f ? 1 : \ - ((uint32_t)(c)<=0x7ff ? 2 : \ - ((uint32_t)(c)<=0xffff ? 3 : \ - ((uint32_t)(c)<=0x10ffff ? 4 : \ - ((uint32_t)(c)<=0x3ffffff ? 5 : \ - ((uint32_t)(c)<=0x7fffffff ? 6 : 3) \ - ) \ - ) \ - ) \ - ) \ - ) -#endif - -/** The maximum number of bytes per code point. @deprecated ICU 2.4. Renamed to U8_MAX_LENGTH, see utf_old.h. */ -#define UTF8_MAX_CHAR_LENGTH 4 - -/** Average number of code units compared to UTF-16. @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF8_ARRAY_SIZE(size) ((5*(size))/2) - -/** @deprecated ICU 2.4. Renamed to U8_GET_UNSAFE, see utf_old.h. */ -#define UTF8_GET_CHAR_UNSAFE(s, i, c) { \ - int32_t _utf8_get_char_unsafe_index=(int32_t)(i); \ - UTF8_SET_CHAR_START_UNSAFE(s, _utf8_get_char_unsafe_index); \ - UTF8_NEXT_CHAR_UNSAFE(s, _utf8_get_char_unsafe_index, c); \ -} - -/** @deprecated ICU 2.4. Use U8_GET instead, see utf_old.h. */ -#define UTF8_GET_CHAR_SAFE(s, start, i, length, c, strict) { \ - int32_t _utf8_get_char_safe_index=(int32_t)(i); \ - UTF8_SET_CHAR_START_SAFE(s, start, _utf8_get_char_safe_index); \ - UTF8_NEXT_CHAR_SAFE(s, _utf8_get_char_safe_index, length, c, strict); \ -} - -/** @deprecated ICU 2.4. Renamed to U8_NEXT_UNSAFE, see utf_old.h. */ -#define UTF8_NEXT_CHAR_UNSAFE(s, i, c) { \ - (c)=(s)[(i)++]; \ - if((uint8_t)((c)-0xc0)<0x35) { \ - uint8_t __count=UTF8_COUNT_TRAIL_BYTES(c); \ - UTF8_MASK_LEAD_BYTE(c, __count); \ - switch(__count) { \ - /* each following branch falls through to the next one */ \ - case 3: \ - (c)=((c)<<6)|((s)[(i)++]&0x3f); \ - case 2: \ - (c)=((c)<<6)|((s)[(i)++]&0x3f); \ - case 1: \ - (c)=((c)<<6)|((s)[(i)++]&0x3f); \ - /* no other branches to optimize switch() */ \ - break; \ - } \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U8_APPEND_UNSAFE, see utf_old.h. */ -#define UTF8_APPEND_CHAR_UNSAFE(s, i, c) { \ - if((uint32_t)(c)<=0x7f) { \ - (s)[(i)++]=(uint8_t)(c); \ - } else { \ - if((uint32_t)(c)<=0x7ff) { \ - (s)[(i)++]=(uint8_t)(((c)>>6)|0xc0); \ - } else { \ - if((uint32_t)(c)<=0xffff) { \ - (s)[(i)++]=(uint8_t)(((c)>>12)|0xe0); \ - } else { \ - (s)[(i)++]=(uint8_t)(((c)>>18)|0xf0); \ - (s)[(i)++]=(uint8_t)((((c)>>12)&0x3f)|0x80); \ - } \ - (s)[(i)++]=(uint8_t)((((c)>>6)&0x3f)|0x80); \ - } \ - (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U8_FWD_1_UNSAFE, see utf_old.h. */ -#define UTF8_FWD_1_UNSAFE(s, i) { \ - (i)+=1+UTF8_COUNT_TRAIL_BYTES((s)[i]); \ -} - -/** @deprecated ICU 2.4. Renamed to U8_FWD_N_UNSAFE, see utf_old.h. */ -#define UTF8_FWD_N_UNSAFE(s, i, n) { \ - int32_t __N=(n); \ - while(__N>0) { \ - UTF8_FWD_1_UNSAFE(s, i); \ - --__N; \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U8_SET_CP_START_UNSAFE, see utf_old.h. */ -#define UTF8_SET_CHAR_START_UNSAFE(s, i) { \ - while(UTF8_IS_TRAIL((s)[i])) { --(i); } \ -} - -/** @deprecated ICU 2.4. Use U8_NEXT instead, see utf_old.h. */ -#define UTF8_NEXT_CHAR_SAFE(s, i, length, c, strict) { \ - (c)=(s)[(i)++]; \ - if((c)>=0x80) { \ - if(UTF8_IS_LEAD(c)) { \ - (c)=utf8_nextCharSafeBody(s, &(i), (int32_t)(length), c, strict); \ - } else { \ - (c)=UTF8_ERROR_VALUE_1; \ - } \ - } \ -} - -/** @deprecated ICU 2.4. Use U8_APPEND instead, see utf_old.h. */ -#define UTF8_APPEND_CHAR_SAFE(s, i, length, c) { \ - if((uint32_t)(c)<=0x7f) { \ - (s)[(i)++]=(uint8_t)(c); \ - } else { \ - (i)=utf8_appendCharSafeBody(s, (int32_t)(i), (int32_t)(length), c, NULL); \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U8_FWD_1, see utf_old.h. */ -#define UTF8_FWD_1_SAFE(s, i, length) U8_FWD_1(s, i, length) - -/** @deprecated ICU 2.4. Renamed to U8_FWD_N, see utf_old.h. */ -#define UTF8_FWD_N_SAFE(s, i, length, n) U8_FWD_N(s, i, length, n) - -/** @deprecated ICU 2.4. Renamed to U8_SET_CP_START, see utf_old.h. */ -#define UTF8_SET_CHAR_START_SAFE(s, start, i) U8_SET_CP_START(s, start, i) - -/** @deprecated ICU 2.4. Renamed to U8_PREV_UNSAFE, see utf_old.h. */ -#define UTF8_PREV_CHAR_UNSAFE(s, i, c) { \ - (c)=(s)[--(i)]; \ - if(UTF8_IS_TRAIL(c)) { \ - uint8_t __b, __count=1, __shift=6; \ -\ - /* c is a trail byte */ \ - (c)&=0x3f; \ - for(;;) { \ - __b=(s)[--(i)]; \ - if(__b>=0xc0) { \ - UTF8_MASK_LEAD_BYTE(__b, __count); \ - (c)|=(UChar32)__b<<__shift; \ - break; \ - } else { \ - (c)|=(UChar32)(__b&0x3f)<<__shift; \ - ++__count; \ - __shift+=6; \ - } \ - } \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U8_BACK_1_UNSAFE, see utf_old.h. */ -#define UTF8_BACK_1_UNSAFE(s, i) { \ - while(UTF8_IS_TRAIL((s)[--(i)])) {} \ -} - -/** @deprecated ICU 2.4. Renamed to U8_BACK_N_UNSAFE, see utf_old.h. */ -#define UTF8_BACK_N_UNSAFE(s, i, n) { \ - int32_t __N=(n); \ - while(__N>0) { \ - UTF8_BACK_1_UNSAFE(s, i); \ - --__N; \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U8_SET_CP_LIMIT_UNSAFE, see utf_old.h. */ -#define UTF8_SET_CHAR_LIMIT_UNSAFE(s, i) { \ - UTF8_BACK_1_UNSAFE(s, i); \ - UTF8_FWD_1_UNSAFE(s, i); \ -} - -/** @deprecated ICU 2.4. Use U8_PREV instead, see utf_old.h. */ -#define UTF8_PREV_CHAR_SAFE(s, start, i, c, strict) { \ - (c)=(s)[--(i)]; \ - if((c)>=0x80) { \ - if((c)<=0xbf) { \ - (c)=utf8_prevCharSafeBody(s, start, &(i), c, strict); \ - } else { \ - (c)=UTF8_ERROR_VALUE_1; \ - } \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U8_BACK_1, see utf_old.h. */ -#define UTF8_BACK_1_SAFE(s, start, i) U8_BACK_1(s, start, i) - -/** @deprecated ICU 2.4. Renamed to U8_BACK_N, see utf_old.h. */ -#define UTF8_BACK_N_SAFE(s, start, i, n) U8_BACK_N(s, start, i, n) - -/** @deprecated ICU 2.4. Renamed to U8_SET_CP_LIMIT, see utf_old.h. */ -#define UTF8_SET_CHAR_LIMIT_SAFE(s, start, i, length) U8_SET_CP_LIMIT(s, start, i, length) - -/* Formerly utf16.h --------------------------------------------------------- */ - -/** Is uchar a first/lead surrogate? @deprecated ICU 2.4. Renamed to U_IS_LEAD and U16_IS_LEAD, see utf_old.h. */ -#define UTF_IS_FIRST_SURROGATE(uchar) (((uchar)&0xfffffc00)==0xd800) - -/** Is uchar a second/trail surrogate? @deprecated ICU 2.4. Renamed to U_IS_TRAIL and U16_IS_TRAIL, see utf_old.h. */ -#define UTF_IS_SECOND_SURROGATE(uchar) (((uchar)&0xfffffc00)==0xdc00) - -/** Assuming c is a surrogate, is it a first/lead surrogate? @deprecated ICU 2.4. Renamed to U_IS_SURROGATE_LEAD and U16_IS_SURROGATE_LEAD, see utf_old.h. */ -#define UTF_IS_SURROGATE_FIRST(c) (((c)&0x400)==0) - -/** Helper constant for UTF16_GET_PAIR_VALUE. @deprecated ICU 2.4. Renamed to U16_SURROGATE_OFFSET, see utf_old.h. */ -#define UTF_SURROGATE_OFFSET ((0xd800<<10UL)+0xdc00-0x10000) - -/** Get the UTF-32 value from the surrogate code units. @deprecated ICU 2.4. Renamed to U16_GET_SUPPLEMENTARY, see utf_old.h. */ -#define UTF16_GET_PAIR_VALUE(first, second) \ - (((first)<<10UL)+(second)-UTF_SURROGATE_OFFSET) - -/** @deprecated ICU 2.4. Renamed to U16_LEAD, see utf_old.h. */ -#define UTF_FIRST_SURROGATE(supplementary) (UChar)(((supplementary)>>10)+0xd7c0) - -/** @deprecated ICU 2.4. Renamed to U16_TRAIL, see utf_old.h. */ -#define UTF_SECOND_SURROGATE(supplementary) (UChar)(((supplementary)&0x3ff)|0xdc00) - -/** @deprecated ICU 2.4. Renamed to U16_LEAD, see utf_old.h. */ -#define UTF16_LEAD(supplementary) UTF_FIRST_SURROGATE(supplementary) - -/** @deprecated ICU 2.4. Renamed to U16_TRAIL, see utf_old.h. */ -#define UTF16_TRAIL(supplementary) UTF_SECOND_SURROGATE(supplementary) - -/** @deprecated ICU 2.4. Renamed to U16_IS_SINGLE, see utf_old.h. */ -#define UTF16_IS_SINGLE(uchar) !UTF_IS_SURROGATE(uchar) - -/** @deprecated ICU 2.4. Renamed to U16_IS_LEAD, see utf_old.h. */ -#define UTF16_IS_LEAD(uchar) UTF_IS_FIRST_SURROGATE(uchar) - -/** @deprecated ICU 2.4. Renamed to U16_IS_TRAIL, see utf_old.h. */ -#define UTF16_IS_TRAIL(uchar) UTF_IS_SECOND_SURROGATE(uchar) - -/** Does this scalar Unicode value need multiple code units for storage? @deprecated ICU 2.4. Use U16_LENGTH or test ((uint32_t)(c)>0xffff) instead, see utf_old.h. */ -#define UTF16_NEED_MULTIPLE_UCHAR(c) ((uint32_t)(c)>0xffff) - -/** @deprecated ICU 2.4. Renamed to U16_LENGTH, see utf_old.h. */ -#define UTF16_CHAR_LENGTH(c) ((uint32_t)(c)<=0xffff ? 1 : 2) - -/** @deprecated ICU 2.4. Renamed to U16_MAX_LENGTH, see utf_old.h. */ -#define UTF16_MAX_CHAR_LENGTH 2 - -/** Average number of code units compared to UTF-16. @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF16_ARRAY_SIZE(size) (size) - -/** - * Get a single code point from an offset that points to any - * of the code units that belong to that code point. - * Assume 0<=i=(start) && UTF_IS_FIRST_SURROGATE(__c2=(s)[(i)-1])) { \ - (c)=UTF16_GET_PAIR_VALUE(__c2, (c)); \ - /* strict: ((c)&0xfffe)==0xfffe is caught by UTF_IS_ERROR() and UTF_IS_UNICODE_CHAR() */ \ - } else if(strict) {\ - /* unmatched second surrogate */ \ - (c)=UTF_ERROR_VALUE; \ - } \ - } \ - } else if((strict) && !UTF_IS_UNICODE_CHAR(c)) { \ - (c)=UTF_ERROR_VALUE; \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U16_NEXT_UNSAFE, see utf_old.h. */ -#define UTF16_NEXT_CHAR_UNSAFE(s, i, c) { \ - (c)=(s)[(i)++]; \ - if(UTF_IS_FIRST_SURROGATE(c)) { \ - (c)=UTF16_GET_PAIR_VALUE((c), (s)[(i)++]); \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U16_APPEND_UNSAFE, see utf_old.h. */ -#define UTF16_APPEND_CHAR_UNSAFE(s, i, c) { \ - if((uint32_t)(c)<=0xffff) { \ - (s)[(i)++]=(uint16_t)(c); \ - } else { \ - (s)[(i)++]=(uint16_t)(((c)>>10)+0xd7c0); \ - (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U16_FWD_1_UNSAFE, see utf_old.h. */ -#define UTF16_FWD_1_UNSAFE(s, i) { \ - if(UTF_IS_FIRST_SURROGATE((s)[(i)++])) { \ - ++(i); \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U16_FWD_N_UNSAFE, see utf_old.h. */ -#define UTF16_FWD_N_UNSAFE(s, i, n) { \ - int32_t __N=(n); \ - while(__N>0) { \ - UTF16_FWD_1_UNSAFE(s, i); \ - --__N; \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U16_SET_CP_START_UNSAFE, see utf_old.h. */ -#define UTF16_SET_CHAR_START_UNSAFE(s, i) { \ - if(UTF_IS_SECOND_SURROGATE((s)[i])) { \ - --(i); \ - } \ -} - -/** @deprecated ICU 2.4. Use U16_NEXT instead, see utf_old.h. */ -#define UTF16_NEXT_CHAR_SAFE(s, i, length, c, strict) { \ - (c)=(s)[(i)++]; \ - if(UTF_IS_FIRST_SURROGATE(c)) { \ - uint16_t __c2; \ - if((i)<(length) && UTF_IS_SECOND_SURROGATE(__c2=(s)[(i)])) { \ - ++(i); \ - (c)=UTF16_GET_PAIR_VALUE((c), __c2); \ - /* strict: ((c)&0xfffe)==0xfffe is caught by UTF_IS_ERROR() and UTF_IS_UNICODE_CHAR() */ \ - } else if(strict) {\ - /* unmatched first surrogate */ \ - (c)=UTF_ERROR_VALUE; \ - } \ - } else if((strict) && !UTF_IS_UNICODE_CHAR(c)) { \ - /* unmatched second surrogate or other non-character */ \ - (c)=UTF_ERROR_VALUE; \ - } \ -} - -/** @deprecated ICU 2.4. Use U16_APPEND instead, see utf_old.h. */ -#define UTF16_APPEND_CHAR_SAFE(s, i, length, c) { \ - if((uint32_t)(c)<=0xffff) { \ - (s)[(i)++]=(uint16_t)(c); \ - } else if((uint32_t)(c)<=0x10ffff) { \ - if((i)+1<(length)) { \ - (s)[(i)++]=(uint16_t)(((c)>>10)+0xd7c0); \ - (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \ - } else /* not enough space */ { \ - (s)[(i)++]=UTF_ERROR_VALUE; \ - } \ - } else /* c>0x10ffff, write error value */ { \ - (s)[(i)++]=UTF_ERROR_VALUE; \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U16_FWD_1, see utf_old.h. */ -#define UTF16_FWD_1_SAFE(s, i, length) U16_FWD_1(s, i, length) - -/** @deprecated ICU 2.4. Renamed to U16_FWD_N, see utf_old.h. */ -#define UTF16_FWD_N_SAFE(s, i, length, n) U16_FWD_N(s, i, length, n) - -/** @deprecated ICU 2.4. Renamed to U16_SET_CP_START, see utf_old.h. */ -#define UTF16_SET_CHAR_START_SAFE(s, start, i) U16_SET_CP_START(s, start, i) - -/** @deprecated ICU 2.4. Renamed to U16_PREV_UNSAFE, see utf_old.h. */ -#define UTF16_PREV_CHAR_UNSAFE(s, i, c) { \ - (c)=(s)[--(i)]; \ - if(UTF_IS_SECOND_SURROGATE(c)) { \ - (c)=UTF16_GET_PAIR_VALUE((s)[--(i)], (c)); \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U16_BACK_1_UNSAFE, see utf_old.h. */ -#define UTF16_BACK_1_UNSAFE(s, i) { \ - if(UTF_IS_SECOND_SURROGATE((s)[--(i)])) { \ - --(i); \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U16_BACK_N_UNSAFE, see utf_old.h. */ -#define UTF16_BACK_N_UNSAFE(s, i, n) { \ - int32_t __N=(n); \ - while(__N>0) { \ - UTF16_BACK_1_UNSAFE(s, i); \ - --__N; \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U16_SET_CP_LIMIT_UNSAFE, see utf_old.h. */ -#define UTF16_SET_CHAR_LIMIT_UNSAFE(s, i) { \ - if(UTF_IS_FIRST_SURROGATE((s)[(i)-1])) { \ - ++(i); \ - } \ -} - -/** @deprecated ICU 2.4. Use U16_PREV instead, see utf_old.h. */ -#define UTF16_PREV_CHAR_SAFE(s, start, i, c, strict) { \ - (c)=(s)[--(i)]; \ - if(UTF_IS_SECOND_SURROGATE(c)) { \ - uint16_t __c2; \ - if((i)>(start) && UTF_IS_FIRST_SURROGATE(__c2=(s)[(i)-1])) { \ - --(i); \ - (c)=UTF16_GET_PAIR_VALUE(__c2, (c)); \ - /* strict: ((c)&0xfffe)==0xfffe is caught by UTF_IS_ERROR() and UTF_IS_UNICODE_CHAR() */ \ - } else if(strict) {\ - /* unmatched second surrogate */ \ - (c)=UTF_ERROR_VALUE; \ - } \ - } else if((strict) && !UTF_IS_UNICODE_CHAR(c)) { \ - /* unmatched first surrogate or other non-character */ \ - (c)=UTF_ERROR_VALUE; \ - } \ -} - -/** @deprecated ICU 2.4. Renamed to U16_BACK_1, see utf_old.h. */ -#define UTF16_BACK_1_SAFE(s, start, i) U16_BACK_1(s, start, i) - -/** @deprecated ICU 2.4. Renamed to U16_BACK_N, see utf_old.h. */ -#define UTF16_BACK_N_SAFE(s, start, i, n) U16_BACK_N(s, start, i, n) - -/** @deprecated ICU 2.4. Renamed to U16_SET_CP_LIMIT, see utf_old.h. */ -#define UTF16_SET_CHAR_LIMIT_SAFE(s, start, i, length) U16_SET_CP_LIMIT(s, start, i, length) - -/* Formerly utf32.h --------------------------------------------------------- */ - -/* -* Old documentation: -* -* This file defines macros to deal with UTF-32 code units and code points. -* Signatures and semantics are the same as for the similarly named macros -* in utf16.h. -* utf32.h is included by utf.h after unicode/umachine.h

-* and some common definitions. -*

Usage: ICU coding guidelines for if() statements should be followed when using these macros. -* Compound statements (curly braces {}) must be used for if-else-while... -* bodies and all macro statements should be terminated with semicolon.

-*/ - -/* internal definitions ----------------------------------------------------- */ - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_IS_SAFE(c, strict) \ - (!(strict) ? \ - (uint32_t)(c)<=0x10ffff : \ - UTF_IS_UNICODE_CHAR(c)) - -/* - * For the semantics of all of these macros, see utf16.h. - * The UTF-32 versions are trivial because any code point is - * encoded using exactly one code unit. - */ - -/* single-code point definitions -------------------------------------------- */ - -/* classes of code unit values */ - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_IS_SINGLE(uchar) 1 -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_IS_LEAD(uchar) 0 -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_IS_TRAIL(uchar) 0 - -/* number of code units per code point */ - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_NEED_MULTIPLE_UCHAR(c) 0 -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_CHAR_LENGTH(c) 1 -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_MAX_CHAR_LENGTH 1 - -/* average number of code units compared to UTF-16 */ - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_ARRAY_SIZE(size) (size) - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_GET_CHAR_UNSAFE(s, i, c) { \ - (c)=(s)[i]; \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_GET_CHAR_SAFE(s, start, i, length, c, strict) { \ - (c)=(s)[i]; \ - if(!UTF32_IS_SAFE(c, strict)) { \ - (c)=UTF_ERROR_VALUE; \ - } \ -} - -/* definitions with forward iteration --------------------------------------- */ - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_NEXT_CHAR_UNSAFE(s, i, c) { \ - (c)=(s)[(i)++]; \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_APPEND_CHAR_UNSAFE(s, i, c) { \ - (s)[(i)++]=(c); \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_FWD_1_UNSAFE(s, i) { \ - ++(i); \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_FWD_N_UNSAFE(s, i, n) { \ - (i)+=(n); \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_SET_CHAR_START_UNSAFE(s, i) { \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_NEXT_CHAR_SAFE(s, i, length, c, strict) { \ - (c)=(s)[(i)++]; \ - if(!UTF32_IS_SAFE(c, strict)) { \ - (c)=UTF_ERROR_VALUE; \ - } \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_APPEND_CHAR_SAFE(s, i, length, c) { \ - if((uint32_t)(c)<=0x10ffff) { \ - (s)[(i)++]=(c); \ - } else /* c>0x10ffff, write 0xfffd */ { \ - (s)[(i)++]=0xfffd; \ - } \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_FWD_1_SAFE(s, i, length) { \ - ++(i); \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_FWD_N_SAFE(s, i, length, n) { \ - if(((i)+=(n))>(length)) { \ - (i)=(length); \ - } \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_SET_CHAR_START_SAFE(s, start, i) { \ -} - -/* definitions with backward iteration -------------------------------------- */ - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_PREV_CHAR_UNSAFE(s, i, c) { \ - (c)=(s)[--(i)]; \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_BACK_1_UNSAFE(s, i) { \ - --(i); \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_BACK_N_UNSAFE(s, i, n) { \ - (i)-=(n); \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_SET_CHAR_LIMIT_UNSAFE(s, i) { \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_PREV_CHAR_SAFE(s, start, i, c, strict) { \ - (c)=(s)[--(i)]; \ - if(!UTF32_IS_SAFE(c, strict)) { \ - (c)=UTF_ERROR_VALUE; \ - } \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_BACK_1_SAFE(s, start, i) { \ - --(i); \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_BACK_N_SAFE(s, start, i, n) { \ - (i)-=(n); \ - if((i)<(start)) { \ - (i)=(start); \ - } \ -} - -/** @deprecated ICU 2.4. Obsolete, see utf_old.h. */ -#define UTF32_SET_CHAR_LIMIT_SAFE(s, i, length) { \ -} - -/* Formerly utf.h, part 2 --------------------------------------------------- */ - -/** - * Estimate the number of code units for a string based on the number of UTF-16 code units. - * - * @deprecated ICU 2.4. Obsolete, see utf_old.h. - */ -#define UTF_ARRAY_SIZE(size) UTF16_ARRAY_SIZE(size) - -/** @deprecated ICU 2.4. Renamed to U16_GET_UNSAFE, see utf_old.h. */ -#define UTF_GET_CHAR_UNSAFE(s, i, c) UTF16_GET_CHAR_UNSAFE(s, i, c) - -/** @deprecated ICU 2.4. Use U16_GET instead, see utf_old.h. */ -#define UTF_GET_CHAR_SAFE(s, start, i, length, c, strict) UTF16_GET_CHAR_SAFE(s, start, i, length, c, strict) - - -/** @deprecated ICU 2.4. Renamed to U16_NEXT_UNSAFE, see utf_old.h. */ -#define UTF_NEXT_CHAR_UNSAFE(s, i, c) UTF16_NEXT_CHAR_UNSAFE(s, i, c) - -/** @deprecated ICU 2.4. Use U16_NEXT instead, see utf_old.h. */ -#define UTF_NEXT_CHAR_SAFE(s, i, length, c, strict) UTF16_NEXT_CHAR_SAFE(s, i, length, c, strict) - - -/** @deprecated ICU 2.4. Renamed to U16_APPEND_UNSAFE, see utf_old.h. */ -#define UTF_APPEND_CHAR_UNSAFE(s, i, c) UTF16_APPEND_CHAR_UNSAFE(s, i, c) - -/** @deprecated ICU 2.4. Use U16_APPEND instead, see utf_old.h. */ -#define UTF_APPEND_CHAR_SAFE(s, i, length, c) UTF16_APPEND_CHAR_SAFE(s, i, length, c) - - -/** @deprecated ICU 2.4. Renamed to U16_FWD_1_UNSAFE, see utf_old.h. */ -#define UTF_FWD_1_UNSAFE(s, i) UTF16_FWD_1_UNSAFE(s, i) - -/** @deprecated ICU 2.4. Renamed to U16_FWD_1, see utf_old.h. */ -#define UTF_FWD_1_SAFE(s, i, length) UTF16_FWD_1_SAFE(s, i, length) - - -/** @deprecated ICU 2.4. Renamed to U16_FWD_N_UNSAFE, see utf_old.h. */ -#define UTF_FWD_N_UNSAFE(s, i, n) UTF16_FWD_N_UNSAFE(s, i, n) - -/** @deprecated ICU 2.4. Renamed to U16_FWD_N, see utf_old.h. */ -#define UTF_FWD_N_SAFE(s, i, length, n) UTF16_FWD_N_SAFE(s, i, length, n) - - -/** @deprecated ICU 2.4. Renamed to U16_SET_CP_START_UNSAFE, see utf_old.h. */ -#define UTF_SET_CHAR_START_UNSAFE(s, i) UTF16_SET_CHAR_START_UNSAFE(s, i) - -/** @deprecated ICU 2.4. Renamed to U16_SET_CP_START, see utf_old.h. */ -#define UTF_SET_CHAR_START_SAFE(s, start, i) UTF16_SET_CHAR_START_SAFE(s, start, i) - - -/** @deprecated ICU 2.4. Renamed to U16_PREV_UNSAFE, see utf_old.h. */ -#define UTF_PREV_CHAR_UNSAFE(s, i, c) UTF16_PREV_CHAR_UNSAFE(s, i, c) - -/** @deprecated ICU 2.4. Use U16_PREV instead, see utf_old.h. */ -#define UTF_PREV_CHAR_SAFE(s, start, i, c, strict) UTF16_PREV_CHAR_SAFE(s, start, i, c, strict) - - -/** @deprecated ICU 2.4. Renamed to U16_BACK_1_UNSAFE, see utf_old.h. */ -#define UTF_BACK_1_UNSAFE(s, i) UTF16_BACK_1_UNSAFE(s, i) - -/** @deprecated ICU 2.4. Renamed to U16_BACK_1, see utf_old.h. */ -#define UTF_BACK_1_SAFE(s, start, i) UTF16_BACK_1_SAFE(s, start, i) - - -/** @deprecated ICU 2.4. Renamed to U16_BACK_N_UNSAFE, see utf_old.h. */ -#define UTF_BACK_N_UNSAFE(s, i, n) UTF16_BACK_N_UNSAFE(s, i, n) - -/** @deprecated ICU 2.4. Renamed to U16_BACK_N, see utf_old.h. */ -#define UTF_BACK_N_SAFE(s, start, i, n) UTF16_BACK_N_SAFE(s, start, i, n) - - -/** @deprecated ICU 2.4. Renamed to U16_SET_CP_LIMIT_UNSAFE, see utf_old.h. */ -#define UTF_SET_CHAR_LIMIT_UNSAFE(s, i) UTF16_SET_CHAR_LIMIT_UNSAFE(s, i) - -/** @deprecated ICU 2.4. Renamed to U16_SET_CP_LIMIT, see utf_old.h. */ -#define UTF_SET_CHAR_LIMIT_SAFE(s, start, i, length) UTF16_SET_CHAR_LIMIT_SAFE(s, start, i, length) - -/* Define default macros (UTF-16 "safe") ------------------------------------ */ - -/** - * Does this code unit alone encode a code point (BMP, not a surrogate)? - * Same as UTF16_IS_SINGLE. - * @deprecated ICU 2.4. Renamed to U_IS_SINGLE and U16_IS_SINGLE, see utf_old.h. - */ -#define UTF_IS_SINGLE(uchar) U16_IS_SINGLE(uchar) - -/** - * Is this code unit the first one of several (a lead surrogate)? - * Same as UTF16_IS_LEAD. - * @deprecated ICU 2.4. Renamed to U_IS_LEAD and U16_IS_LEAD, see utf_old.h. - */ -#define UTF_IS_LEAD(uchar) U16_IS_LEAD(uchar) - -/** - * Is this code unit one of several but not the first one (a trail surrogate)? - * Same as UTF16_IS_TRAIL. - * @deprecated ICU 2.4. Renamed to U_IS_TRAIL and U16_IS_TRAIL, see utf_old.h. - */ -#define UTF_IS_TRAIL(uchar) U16_IS_TRAIL(uchar) - -/** - * Does this code point require multiple code units (is it a supplementary code point)? - * Same as UTF16_NEED_MULTIPLE_UCHAR. - * @deprecated ICU 2.4. Use U16_LENGTH or test ((uint32_t)(c)>0xffff) instead. - */ -#define UTF_NEED_MULTIPLE_UCHAR(c) UTF16_NEED_MULTIPLE_UCHAR(c) - -/** - * How many code units are used to encode this code point (1 or 2)? - * Same as UTF16_CHAR_LENGTH. - * @deprecated ICU 2.4. Renamed to U16_LENGTH, see utf_old.h. - */ -#define UTF_CHAR_LENGTH(c) U16_LENGTH(c) - -/** - * How many code units are used at most for any Unicode code point (2)? - * Same as UTF16_MAX_CHAR_LENGTH. - * @deprecated ICU 2.4. Renamed to U16_MAX_LENGTH, see utf_old.h. - */ -#define UTF_MAX_CHAR_LENGTH U16_MAX_LENGTH - -/** - * Set c to the code point that contains the code unit i. - * i could point to the lead or the trail surrogate for the code point. - * i is not modified. - * Same as UTF16_GET_CHAR. - * \pre 0<=iaverageTime = (time1 + time2)/2, there will be overflow even with dates - * around the present. Moreover, even if these problems don't occur, there is the issue of - * conversion back and forth between different systems. - * - *

- * Binary datetimes differ in a number of ways: the datatype, the unit, - * and the epoch (origin). We'll refer to these as time scales. For example: - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
Table 1: Binary Time Scales
SourceDatatypeUnitEpoch
UDTS_JAVA_TIMEint64_tmillisecondsJan 1, 1970
UDTS_UNIX_TIMEint32_t or int64_tsecondsJan 1, 1970
UDTS_ICU4C_TIMEdoublemillisecondsJan 1, 1970
UDTS_WINDOWS_FILE_TIMEint64_tticks (100 nanoseconds)Jan 1, 1601
UDTS_DOTNET_DATE_TIMEint64_tticks (100 nanoseconds)Jan 1, 0001
UDTS_MAC_OLD_TIMEint32_t or int64_tsecondsJan 1, 1904
UDTS_MAC_TIMEdoublesecondsJan 1, 2001
UDTS_EXCEL_TIME?daysDec 31, 1899
UDTS_DB2_TIME?daysDec 31, 1899
UDTS_UNIX_MICROSECONDS_TIMEint64_tmicrosecondsJan 1, 1970
- * - *

- * All of the epochs start at 00:00 am (the earliest possible time on the day in question), - * and are assumed to be UTC. - * - *

- * The ranges for different datatypes are given in the following table (all values in years). - * The range of years includes the entire range expressible with positive and negative - * values of the datatype. The range of years for double is the range that would be allowed - * without losing precision to the corresponding unit. - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
Unitsint64_tdoubleint32_t
1 sec5.84542x1011285,420,920.94136.10
1 millisecond584,542,046.09285,420.920.14
1 microsecond584,542.05285.420.00
100 nanoseconds (tick)58,454.2028.540.00
1 nanosecond584.54204610.28540.00
- * - *

- * These functions implement a universal time scale which can be used as a 'pivot', - * and provide conversion functions to and from all other major time scales. - * This datetimes to be converted to the pivot time, safely manipulated, - * and converted back to any other datetime time scale. - * - *

- * So what to use for this pivot? Java time has plenty of range, but cannot represent - * .NET System.DateTime values without severe loss of precision. ICU4C time addresses this by using a - * double that is otherwise equivalent to the Java time. However, there are disadvantages - * with doubles. They provide for much more graceful degradation in arithmetic operations. - * But they only have 53 bits of accuracy, which means that they will lose precision when - * converting back and forth to ticks. What would really be nice would be a - * long double (80 bits -- 64 bit mantissa), but that is not supported on most systems. - * - *

- * The Unix extended time uses a structure with two components: time in seconds and a - * fractional field (microseconds). However, this is clumsy, slow, and - * prone to error (you always have to keep track of overflow and underflow in the - * fractional field). BigDecimal would allow for arbitrary precision and arbitrary range, - * but we do not want to use this as the normal type, because it is slow and does not - * have a fixed size. - * - *

- * Because of these issues, we ended up concluding that the .NET framework's - * System.DateTime would be the best pivot. However, we use the full range - * allowed by the datatype, allowing for datetimes back to 29,000 BC and up to 29,000 AD. - * This time scale is very fine grained, does not lose precision, and covers a range that - * will meet almost all requirements. It will not handle the range that Java times do, - * but frankly, being able to handle dates before 29,000 BC or after 29,000 AD is of very limited interest. - * - */ - -/** - * UDateTimeScale values are used to specify the time scale used for - * conversion into or out if the universal time scale. - * - * @stable ICU 3.2 - */ -typedef enum UDateTimeScale { - /** - * Used in the JDK. Data is a Java long (int64_t). Value - * is milliseconds since January 1, 1970. - * - * @stable ICU 3.2 - */ - UDTS_JAVA_TIME = 0, - - /** - * Used on Unix systems. Data is int32_t or int64_t. Value - * is seconds since January 1, 1970. - * - * @stable ICU 3.2 - */ - UDTS_UNIX_TIME, - - /** - * Used in IUC4C. Data is a double. Value - * is milliseconds since January 1, 1970. - * - * @stable ICU 3.2 - */ - UDTS_ICU4C_TIME, - - /** - * Used in Windows for file times. Data is an int64_t. Value - * is ticks (1 tick == 100 nanoseconds) since January 1, 1601. - * - * @stable ICU 3.2 - */ - UDTS_WINDOWS_FILE_TIME, - - /** - * Used in the .NET framework's System.DateTime structure. Data is an int64_t. Value - * is ticks (1 tick == 100 nanoseconds) since January 1, 0001. - * - * @stable ICU 3.2 - */ - UDTS_DOTNET_DATE_TIME, - - /** - * Used in older Macintosh systems. Data is int32_t or int64_t. Value - * is seconds since January 1, 1904. - * - * @stable ICU 3.2 - */ - UDTS_MAC_OLD_TIME, - - /** - * Used in newer Macintosh systems. Data is a double. Value - * is seconds since January 1, 2001. - * - * @stable ICU 3.2 - */ - UDTS_MAC_TIME, - - /** - * Used in Excel. Data is an ?unknown?. Value - * is days since December 31, 1899. - * - * @stable ICU 3.2 - */ - UDTS_EXCEL_TIME, - - /** - * Used in DB2. Data is an ?unknown?. Value - * is days since December 31, 1899. - * - * @stable ICU 3.2 - */ - UDTS_DB2_TIME, - - /** - * Data is a long. Value is microseconds since January 1, 1970. - * Similar to Unix time (linear value from 1970) and struct timeval - * (microseconds resolution). - * - * @stable ICU 3.8 - */ - UDTS_UNIX_MICROSECONDS_TIME, - -#ifndef U_HIDE_DEPRECATED_API - /** - * The first unused time scale value. The limit of this enum - * @deprecated ICU 59 The numeric value may change over time, see ICU ticket #12420. - */ - UDTS_MAX_SCALE -#endif /* U_HIDE_DEPRECATED_API */ - -} UDateTimeScale; - -/** - * UTimeScaleValue values are used to specify the time scale values - * to utmscale_getTimeScaleValue. - * - * @see utmscale_getTimeScaleValue - * - * @stable ICU 3.2 - */ -typedef enum UTimeScaleValue { - /** - * The constant used to select the units vale - * for a time scale. - * - * @see utmscale_getTimeScaleValue - * - * @stable ICU 3.2 - */ - UTSV_UNITS_VALUE = 0, - - /** - * The constant used to select the epoch offset value - * for a time scale. - * - * @see utmscale_getTimeScaleValue - * - * @stable ICU 3.2 - */ - UTSV_EPOCH_OFFSET_VALUE=1, - - /** - * The constant used to select the minimum from value - * for a time scale. - * - * @see utmscale_getTimeScaleValue - * - * @stable ICU 3.2 - */ - UTSV_FROM_MIN_VALUE=2, - - /** - * The constant used to select the maximum from value - * for a time scale. - * - * @see utmscale_getTimeScaleValue - * - * @stable ICU 3.2 - */ - UTSV_FROM_MAX_VALUE=3, - - /** - * The constant used to select the minimum to value - * for a time scale. - * - * @see utmscale_getTimeScaleValue - * - * @stable ICU 3.2 - */ - UTSV_TO_MIN_VALUE=4, - - /** - * The constant used to select the maximum to value - * for a time scale. - * - * @see utmscale_getTimeScaleValue - * - * @stable ICU 3.2 - */ - UTSV_TO_MAX_VALUE=5, - -#ifndef U_HIDE_INTERNAL_API - /** - * The constant used to select the epoch plus one value - * for a time scale. - * - * NOTE: This is an internal value. DO NOT USE IT. May not - * actually be equal to the epoch offset value plus one. - * - * @see utmscale_getTimeScaleValue - * - * @internal ICU 3.2 - */ - UTSV_EPOCH_OFFSET_PLUS_1_VALUE=6, - - /** - * The constant used to select the epoch plus one value - * for a time scale. - * - * NOTE: This is an internal value. DO NOT USE IT. May not - * actually be equal to the epoch offset value plus one. - * - * @see utmscale_getTimeScaleValue - * - * @internal ICU 3.2 - */ - UTSV_EPOCH_OFFSET_MINUS_1_VALUE=7, - - /** - * The constant used to select the units round value - * for a time scale. - * - * NOTE: This is an internal value. DO NOT USE IT. - * - * @see utmscale_getTimeScaleValue - * - * @internal ICU 3.2 - */ - UTSV_UNITS_ROUND_VALUE=8, - - /** - * The constant used to select the minimum safe rounding value - * for a time scale. - * - * NOTE: This is an internal value. DO NOT USE IT. - * - * @see utmscale_getTimeScaleValue - * - * @internal ICU 3.2 - */ - UTSV_MIN_ROUND_VALUE=9, - - /** - * The constant used to select the maximum safe rounding value - * for a time scale. - * - * NOTE: This is an internal value. DO NOT USE IT. - * - * @see utmscale_getTimeScaleValue - * - * @internal ICU 3.2 - */ - UTSV_MAX_ROUND_VALUE=10, - -#endif /* U_HIDE_INTERNAL_API */ - -#ifndef U_HIDE_DEPRECATED_API - /** - * The number of time scale values, in other words limit of this enum. - * - * @see utmscale_getTimeScaleValue - * @deprecated ICU 59 The numeric value may change over time, see ICU ticket #12420. - */ - UTSV_MAX_SCALE_VALUE=11 -#endif /* U_HIDE_DEPRECATED_API */ - -} UTimeScaleValue; - -/** - * Get a value associated with a particular time scale. - * - * @param timeScale The time scale - * @param value A constant representing the value to get - * @param status The status code. Set to U_ILLEGAL_ARGUMENT_ERROR if arguments are invalid. - * @return - the value. - * - * @stable ICU 3.2 - */ -U_STABLE int64_t U_EXPORT2 - utmscale_getTimeScaleValue(UDateTimeScale timeScale, UTimeScaleValue value, UErrorCode *status); - -/* Conversion to 'universal time scale' */ - -/** - * Convert a int64_t datetime from the given time scale to the universal time scale. - * - * @param otherTime The int64_t datetime - * @param timeScale The time scale to convert from - * @param status The status code. Set to U_ILLEGAL_ARGUMENT_ERROR if the conversion is out of range. - * - * @return The datetime converted to the universal time scale - * - * @stable ICU 3.2 - */ -U_STABLE int64_t U_EXPORT2 - utmscale_fromInt64(int64_t otherTime, UDateTimeScale timeScale, UErrorCode *status); - -/* Conversion from 'universal time scale' */ - -/** - * Convert a datetime from the universal time scale to a int64_t in the given time scale. - * - * @param universalTime The datetime in the universal time scale - * @param timeScale The time scale to convert to - * @param status The status code. Set to U_ILLEGAL_ARGUMENT_ERROR if the conversion is out of range. - * - * @return The datetime converted to the given time scale - * - * @stable ICU 3.2 - */ -U_STABLE int64_t U_EXPORT2 - utmscale_toInt64(int64_t universalTime, UDateTimeScale timeScale, UErrorCode *status); - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif - diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utrace.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utrace.h deleted file mode 100644 index 66269784db..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utrace.h +++ /dev/null @@ -1,379 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* -* Copyright (C) 2003-2013, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: utrace.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2003aug06 -* created by: Markus W. Scherer -* -* Definitions for ICU tracing/logging. -* -*/ - -#ifndef __UTRACE_H__ -#define __UTRACE_H__ - -#include -#include "unicode/utypes.h" - -/** - * \file - * \brief C API: Definitions for ICU tracing/logging. - * - * This provides API for debugging the internals of ICU without the use of - * a traditional debugger. - * - * By default, tracing is disabled in ICU. If you need to debug ICU with - * tracing, please compile ICU with the --enable-tracing configure option. - */ - -U_CDECL_BEGIN - -/** - * Trace severity levels. Higher levels increase the verbosity of the trace output. - * @see utrace_setLevel - * @stable ICU 2.8 - */ -typedef enum UTraceLevel { - /** Disable all tracing @stable ICU 2.8*/ - UTRACE_OFF=-1, - /** Trace error conditions only @stable ICU 2.8*/ - UTRACE_ERROR=0, - /** Trace errors and warnings @stable ICU 2.8*/ - UTRACE_WARNING=3, - /** Trace opens and closes of ICU services @stable ICU 2.8*/ - UTRACE_OPEN_CLOSE=5, - /** Trace an intermediate number of ICU operations @stable ICU 2.8*/ - UTRACE_INFO=7, - /** Trace the maximum number of ICU operations @stable ICU 2.8*/ - UTRACE_VERBOSE=9 -} UTraceLevel; - -/** - * These are the ICU functions that will be traced when tracing is enabled. - * @stable ICU 2.8 - */ -typedef enum UTraceFunctionNumber { - UTRACE_FUNCTION_START=0, - UTRACE_U_INIT=UTRACE_FUNCTION_START, - UTRACE_U_CLEANUP, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal collation trace location. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UTRACE_FUNCTION_LIMIT, -#endif // U_HIDE_DEPRECATED_API - - UTRACE_CONVERSION_START=0x1000, - UTRACE_UCNV_OPEN=UTRACE_CONVERSION_START, - UTRACE_UCNV_OPEN_PACKAGE, - UTRACE_UCNV_OPEN_ALGORITHMIC, - UTRACE_UCNV_CLONE, - UTRACE_UCNV_CLOSE, - UTRACE_UCNV_FLUSH_CACHE, - UTRACE_UCNV_LOAD, - UTRACE_UCNV_UNLOAD, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal collation trace location. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UTRACE_CONVERSION_LIMIT, -#endif // U_HIDE_DEPRECATED_API - - UTRACE_COLLATION_START=0x2000, - UTRACE_UCOL_OPEN=UTRACE_COLLATION_START, - UTRACE_UCOL_CLOSE, - UTRACE_UCOL_STRCOLL, - UTRACE_UCOL_GET_SORTKEY, - UTRACE_UCOL_GETLOCALE, - UTRACE_UCOL_NEXTSORTKEYPART, - UTRACE_UCOL_STRCOLLITER, - UTRACE_UCOL_OPEN_FROM_SHORT_STRING, - UTRACE_UCOL_STRCOLLUTF8, /**< @stable ICU 50 */ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal collation trace location. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - UTRACE_COLLATION_LIMIT -#endif // U_HIDE_DEPRECATED_API -} UTraceFunctionNumber; - -/** - * Setter for the trace level. - * @param traceLevel A UTraceLevel value. - * @stable ICU 2.8 - */ -U_STABLE void U_EXPORT2 -utrace_setLevel(int32_t traceLevel); - -/** - * Getter for the trace level. - * @return The UTraceLevel value being used by ICU. - * @stable ICU 2.8 - */ -U_STABLE int32_t U_EXPORT2 -utrace_getLevel(void); - -/* Trace function pointers types ----------------------------- */ - -/** - * Type signature for the trace function to be called when entering a function. - * @param context value supplied at the time the trace functions are set. - * @param fnNumber Enum value indicating the ICU function being entered. - * @stable ICU 2.8 - */ -typedef void U_CALLCONV -UTraceEntry(const void *context, int32_t fnNumber); - -/** - * Type signature for the trace function to be called when exiting from a function. - * @param context value supplied at the time the trace functions are set. - * @param fnNumber Enum value indicating the ICU function being exited. - * @param fmt A formatting string that describes the number and types - * of arguments included with the variable args. The fmt - * string has the same form as the utrace_vformat format - * string. - * @param args A variable arguments list. Contents are described by - * the fmt parameter. - * @see utrace_vformat - * @stable ICU 2.8 - */ -typedef void U_CALLCONV -UTraceExit(const void *context, int32_t fnNumber, - const char *fmt, va_list args); - -/** - * Type signature for the trace function to be called from within an ICU function - * to display data or messages. - * @param context value supplied at the time the trace functions are set. - * @param fnNumber Enum value indicating the ICU function being exited. - * @param level The current tracing level - * @param fmt A format string describing the tracing data that is supplied - * as variable args - * @param args The data being traced, passed as variable args. - * @stable ICU 2.8 - */ -typedef void U_CALLCONV -UTraceData(const void *context, int32_t fnNumber, int32_t level, - const char *fmt, va_list args); - -/** - * Set ICU Tracing functions. Installs application-provided tracing - * functions into ICU. After doing this, subsequent ICU operations - * will call back to the installed functions, providing a trace - * of the use of ICU. Passing a NULL pointer for a tracing function - * is allowed, and inhibits tracing action at points where that function - * would be called. - *

- * Tracing and Threads: Tracing functions are global to a process, and - * will be called in response to ICU operations performed by any - * thread. If tracing of an individual thread is desired, the - * tracing functions must themselves filter by checking that the - * current thread is the desired thread. - * - * @param context an uninterpreted pointer. Whatever is passed in - * here will in turn be passed to each of the tracing - * functions UTraceEntry, UTraceExit and UTraceData. - * ICU does not use or alter this pointer. - * @param e Callback function to be called on entry to a - * a traced ICU function. - * @param x Callback function to be called on exit from a - * traced ICU function. - * @param d Callback function to be called from within a - * traced ICU function, for the purpose of providing - * data to the trace. - * - * @stable ICU 2.8 - */ -U_STABLE void U_EXPORT2 -utrace_setFunctions(const void *context, - UTraceEntry *e, UTraceExit *x, UTraceData *d); - -/** - * Get the currently installed ICU tracing functions. Note that a null function - * pointer will be returned if no trace function has been set. - * - * @param context The currently installed tracing context. - * @param e The currently installed UTraceEntry function. - * @param x The currently installed UTraceExit function. - * @param d The currently installed UTraceData function. - * @stable ICU 2.8 - */ -U_STABLE void U_EXPORT2 -utrace_getFunctions(const void **context, - UTraceEntry **e, UTraceExit **x, UTraceData **d); - - - -/* - * - * ICU trace format string syntax - * - * Format Strings are passed to UTraceData functions, and define the - * number and types of the trace data being passed on each call. - * - * The UTraceData function, which is supplied by the application, - * not by ICU, can either forward the trace data (passed via - * varargs) and the format string back to ICU for formatting into - * a displayable string, or it can interpret the format itself, - * and do as it wishes with the trace data. - * - * - * Goals for the format string - * - basic data output - * - easy to use for trace programmer - * - sufficient provision for data types for trace output readability - * - well-defined types and binary portable APIs - * - * Non-goals - * - printf compatibility - * - fancy formatting - * - argument reordering and other internationalization features - * - * ICU trace format strings contain plain text with argument inserts, - * much like standard printf format strings. - * Each insert begins with a '%', then optionally contains a 'v', - * then exactly one type character. - * Two '%' in a row represent a '%' instead of an insert. - * The trace format strings need not have \n at the end. - * - * - * Types - * ----- - * - * Type characters: - * - c A char character in the default codepage. - * - s A NUL-terminated char * string in the default codepage. - * - S A UChar * string. Requires two params, (ptr, length). Length=-1 for nul term. - * - b A byte (8-bit integer). - * - h A 16-bit integer. Also a 16 bit Unicode code unit. - * - d A 32-bit integer. Also a 20 bit Unicode code point value. - * - l A 64-bit integer. - * - p A data pointer. - * - * Vectors - * ------- - * - * If the 'v' is not specified, then one item of the specified type - * is passed in. - * If the 'v' (for "vector") is specified, then a vector of items of the - * specified type is passed in, via a pointer to the first item - * and an int32_t value for the length of the vector. - * Length==-1 means zero or NUL termination. Works for vectors of all types. - * - * Note: %vS is a vector of (UChar *) strings. The strings must - * be nul terminated as there is no way to provide a - * separate length parameter for each string. The length - * parameter (required for all vectors) is the number of - * strings, not the length of the strings. - * - * Examples - * -------- - * - * These examples show the parameters that will be passed to an application's - * UTraceData() function for various formats. - * - * - the precise formatting is up to the application! - * - the examples use type casts for arguments only to _show_ the types of - * arguments without needing variable declarations in the examples; - * the type casts will not be necessary in actual code - * - * UTraceDataFunc(context, fnNumber, level, - * "There is a character %c in the string %s.", // Format String - * (char)c, (const char *)s); // varargs parameters - * -> There is a character 0x42 'B' in the string "Bravo". - * - * UTraceDataFunc(context, fnNumber, level, - * "Vector of bytes %vb vector of chars %vc", - * (const uint8_t *)bytes, (int32_t)bytesLength, - * (const char *)chars, (int32_t)charsLength); - * -> Vector of bytes - * 42 63 64 3f [4] - * vector of chars - * "Bcd?"[4] - * - * UTraceDataFunc(context, fnNumber, level, - * "An int32_t %d and a whole bunch of them %vd", - * (int32_t)-5, (const int32_t *)ints, (int32_t)intsLength); - * -> An int32_t 0xfffffffb and a whole bunch of them - * fffffffb 00000005 0000010a [3] - * - */ - - - -/** - * Trace output Formatter. An application's UTraceData tracing functions may call - * back to this function to format the trace output in a - * human readable form. Note that a UTraceData function may choose - * to not format the data; it could, for example, save it in - * in the raw form it was received (more compact), leaving - * formatting for a later trace analysis tool. - * @param outBuf pointer to a buffer to receive the formatted output. Output - * will be nul terminated if there is space in the buffer - - * if the length of the requested output < the output buffer size. - * @param capacity Length of the output buffer. - * @param indent Number of spaces to indent the output. Intended to allow - * data displayed from nested functions to be indented for readability. - * @param fmt Format specification for the data to output - * @param args Data to be formatted. - * @return Length of formatted output, including the terminating NUL. - * If buffer capacity is insufficient, the required capacity is returned. - * @stable ICU 2.8 - */ -U_STABLE int32_t U_EXPORT2 -utrace_vformat(char *outBuf, int32_t capacity, - int32_t indent, const char *fmt, va_list args); - -/** - * Trace output Formatter. An application's UTraceData tracing functions may call - * this function to format any additional trace data, beyond that - * provided by default, in human readable form with the same - * formatting conventions used by utrace_vformat(). - * @param outBuf pointer to a buffer to receive the formatted output. Output - * will be nul terminated if there is space in the buffer - - * if the length of the requested output < the output buffer size. - * @param capacity Length of the output buffer. - * @param indent Number of spaces to indent the output. Intended to allow - * data displayed from nested functions to be indented for readability. - * @param fmt Format specification for the data to output - * @param ... Data to be formatted. - * @return Length of formatted output, including the terminating NUL. - * If buffer capacity is insufficient, the required capacity is returned. - * @stable ICU 2.8 - */ -U_STABLE int32_t U_EXPORT2 -utrace_format(char *outBuf, int32_t capacity, - int32_t indent, const char *fmt, ...); - - - -/* Trace function numbers --------------------------------------------------- */ - -/** - * Get the name of a function from its trace function number. - * - * @param fnNumber The trace number for an ICU function. - * @return The name string for the function. - * - * @see UTraceFunctionNumber - * @stable ICU 2.8 - */ -U_STABLE const char * U_EXPORT2 -utrace_functionName(int32_t fnNumber); - -U_CDECL_END - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utrans.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utrans.h deleted file mode 100644 index 6114d956b8..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utrans.h +++ /dev/null @@ -1,658 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 1997-2011,2014-2015 International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* Date Name Description -* 06/21/00 aliu Creation. -******************************************************************************* -*/ - -#ifndef UTRANS_H -#define UTRANS_H - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_TRANSLITERATION - -#include "unicode/localpointer.h" -#include "unicode/urep.h" -#include "unicode/parseerr.h" -#include "unicode/uenum.h" -#include "unicode/uset.h" - -/******************************************************************** - * General Notes - ******************************************************************** - */ -/** - * \file - * \brief C API: Transliterator - * - *

Transliteration

- * The data structures and functions described in this header provide - * transliteration services. Transliteration services are implemented - * as C++ classes. The comments and documentation in this header - * assume the reader is familiar with the C++ headers translit.h and - * associated documentation. - * - * A significant but incomplete subset of the C++ transliteration - * services are available to C code through this header. In order to - * access more complex transliteration services, refer to the C++ - * headers and documentation. - * - * There are two sets of functions for working with transliterator IDs: - * - * An old, deprecated set uses char * IDs, which works for true and pure - * identifiers that these APIs were designed for, - * for example "Cyrillic-Latin". - * It does not work when the ID contains filters ("[:Script=Cyrl:]") - * or even a complete set of rules because then the ID string contains more - * than just "invariant" characters (see utypes.h). - * - * A new set of functions replaces the old ones and uses UChar * IDs, - * paralleling the UnicodeString IDs in the C++ API. (New in ICU 2.8.) - */ - -/******************************************************************** - * Data Structures - ********************************************************************/ - -/** - * An opaque transliterator for use in C. Open with utrans_openxxx() - * and close with utrans_close() when done. Equivalent to the C++ class - * Transliterator and its subclasses. - * @see Transliterator - * @stable ICU 2.0 - */ -typedef void* UTransliterator; - -/** - * Direction constant indicating the direction in a transliterator, - * e.g., the forward or reverse rules of a RuleBasedTransliterator. - * Specified when a transliterator is opened. An "A-B" transliterator - * transliterates A to B when operating in the forward direction, and - * B to A when operating in the reverse direction. - * @stable ICU 2.0 - */ -typedef enum UTransDirection { - - /** - * UTRANS_FORWARD means from <source> to <target> for a - * transliterator with ID <source>-<target>. For a transliterator - * opened using a rule, it means forward direction rules, e.g., - * "A > B". - */ - UTRANS_FORWARD, - - /** - * UTRANS_REVERSE means from <target> to <source> for a - * transliterator with ID <source>-<target>. For a transliterator - * opened using a rule, it means reverse direction rules, e.g., - * "A < B". - */ - UTRANS_REVERSE - -} UTransDirection; - -/** - * Position structure for utrans_transIncremental() incremental - * transliteration. This structure defines two substrings of the text - * being transliterated. The first region, [contextStart, - * contextLimit), defines what characters the transliterator will read - * as context. The second region, [start, limit), defines what - * characters will actually be transliterated. The second region - * should be a subset of the first. - * - *

After a transliteration operation, some of the indices in this - * structure will be modified. See the field descriptions for - * details. - * - *

contextStart <= start <= limit <= contextLimit - * - *

Note: All index values in this structure must be at code point - * boundaries. That is, none of them may occur between two code units - * of a surrogate pair. If any index does split a surrogate pair, - * results are unspecified. - * - * @stable ICU 2.0 - */ -typedef struct UTransPosition { - - /** - * Beginning index, inclusive, of the context to be considered for - * a transliteration operation. The transliterator will ignore - * anything before this index. INPUT/OUTPUT parameter: This parameter - * is updated by a transliteration operation to reflect the maximum - * amount of antecontext needed by a transliterator. - * @stable ICU 2.4 - */ - int32_t contextStart; - - /** - * Ending index, exclusive, of the context to be considered for a - * transliteration operation. The transliterator will ignore - * anything at or after this index. INPUT/OUTPUT parameter: This - * parameter is updated to reflect changes in the length of the - * text, but points to the same logical position in the text. - * @stable ICU 2.4 - */ - int32_t contextLimit; - - /** - * Beginning index, inclusive, of the text to be transliteratd. - * INPUT/OUTPUT parameter: This parameter is advanced past - * characters that have already been transliterated by a - * transliteration operation. - * @stable ICU 2.4 - */ - int32_t start; - - /** - * Ending index, exclusive, of the text to be transliteratd. - * INPUT/OUTPUT parameter: This parameter is updated to reflect - * changes in the length of the text, but points to the same - * logical position in the text. - * @stable ICU 2.4 - */ - int32_t limit; - -} UTransPosition; - -/******************************************************************** - * General API - ********************************************************************/ - -/** - * Open a custom transliterator, given a custom rules string - * OR - * a system transliterator, given its ID. - * Any non-NULL result from this function should later be closed with - * utrans_close(). - * - * @param id a valid transliterator ID - * @param idLength the length of the ID string, or -1 if NUL-terminated - * @param dir the desired direction - * @param rules the transliterator rules. See the C++ header rbt.h for - * rules syntax. If NULL then a system transliterator matching - * the ID is returned. - * @param rulesLength the length of the rules, or -1 if the rules - * are NUL-terminated. - * @param parseError a pointer to a UParseError struct to receive the details - * of any parsing errors. This parameter may be NULL if no - * parsing error details are desired. - * @param pErrorCode a pointer to the UErrorCode - * @return a transliterator pointer that may be passed to other - * utrans_xxx() functions, or NULL if the open call fails. - * @stable ICU 2.8 - */ -U_STABLE UTransliterator* U_EXPORT2 -utrans_openU(const UChar *id, - int32_t idLength, - UTransDirection dir, - const UChar *rules, - int32_t rulesLength, - UParseError *parseError, - UErrorCode *pErrorCode); - -/** - * Open an inverse of an existing transliterator. For this to work, - * the inverse must be registered with the system. For example, if - * the Transliterator "A-B" is opened, and then its inverse is opened, - * the result is the Transliterator "B-A", if such a transliterator is - * registered with the system. Otherwise the result is NULL and a - * failing UErrorCode is set. Any non-NULL result from this function - * should later be closed with utrans_close(). - * - * @param trans the transliterator to open the inverse of. - * @param status a pointer to the UErrorCode - * @return a pointer to a newly-opened transliterator that is the - * inverse of trans, or NULL if the open call fails. - * @stable ICU 2.0 - */ -U_STABLE UTransliterator* U_EXPORT2 -utrans_openInverse(const UTransliterator* trans, - UErrorCode* status); - -/** - * Create a copy of a transliterator. Any non-NULL result from this - * function should later be closed with utrans_close(). - * - * @param trans the transliterator to be copied. - * @param status a pointer to the UErrorCode - * @return a transliterator pointer that may be passed to other - * utrans_xxx() functions, or NULL if the clone call fails. - * @stable ICU 2.0 - */ -U_STABLE UTransliterator* U_EXPORT2 -utrans_clone(const UTransliterator* trans, - UErrorCode* status); - -/** - * Close a transliterator. Any non-NULL pointer returned by - * utrans_openXxx() or utrans_clone() should eventually be closed. - * @param trans the transliterator to be closed. - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -utrans_close(UTransliterator* trans); - -#if U_SHOW_CPLUSPLUS_API - -U_NAMESPACE_BEGIN - -/** - * \class LocalUTransliteratorPointer - * "Smart pointer" class, closes a UTransliterator via utrans_close(). - * For most methods see the LocalPointerBase base class. - * - * @see LocalPointerBase - * @see LocalPointer - * @stable ICU 4.4 - */ -U_DEFINE_LOCAL_OPEN_POINTER(LocalUTransliteratorPointer, UTransliterator, utrans_close); - -U_NAMESPACE_END - -#endif // U_SHOW_CPLUSPLUS_API - -/** - * Return the programmatic identifier for this transliterator. - * If this identifier is passed to utrans_openU(), it will open - * a transliterator equivalent to this one, if the ID has been - * registered. - * - * @param trans the transliterator to return the ID of. - * @param resultLength pointer to an output variable receiving the length - * of the ID string; can be NULL - * @return the NUL-terminated ID string. This pointer remains - * valid until utrans_close() is called on this transliterator. - * - * @stable ICU 2.8 - */ -U_STABLE const UChar * U_EXPORT2 -utrans_getUnicodeID(const UTransliterator *trans, - int32_t *resultLength); - -/** - * Register an open transliterator with the system. When - * utrans_open() is called with an ID string that is equal to that - * returned by utrans_getID(adoptedTrans,...), then - * utrans_clone(adoptedTrans,...) is returned. - * - *

NOTE: After this call the system owns the adoptedTrans and will - * close it. The user must not call utrans_close() on adoptedTrans. - * - * @param adoptedTrans a transliterator, typically the result of - * utrans_openRules(), to be registered with the system. - * @param status a pointer to the UErrorCode - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -utrans_register(UTransliterator* adoptedTrans, - UErrorCode* status); - -/** - * Unregister a transliterator from the system. After this call the - * system will no longer recognize the given ID when passed to - * utrans_open(). If the ID is invalid then nothing is done. - * - * @param id an ID to unregister - * @param idLength the length of id, or -1 if id is zero-terminated - * @stable ICU 2.8 - */ -U_STABLE void U_EXPORT2 -utrans_unregisterID(const UChar* id, int32_t idLength); - -/** - * Set the filter used by a transliterator. A filter can be used to - * make the transliterator pass certain characters through untouched. - * The filter is expressed using a UnicodeSet pattern. If the - * filterPattern is NULL or the empty string, then the transliterator - * will be reset to use no filter. - * - * @param trans the transliterator - * @param filterPattern a pattern string, in the form accepted by - * UnicodeSet, specifying which characters to apply the - * transliteration to. May be NULL or the empty string to indicate no - * filter. - * @param filterPatternLen the length of filterPattern, or -1 if - * filterPattern is zero-terminated - * @param status a pointer to the UErrorCode - * @see UnicodeSet - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -utrans_setFilter(UTransliterator* trans, - const UChar* filterPattern, - int32_t filterPatternLen, - UErrorCode* status); - -/** - * Return the number of system transliterators. - * It is recommended to use utrans_openIDs() instead. - * - * @return the number of system transliterators. - * @stable ICU 2.0 - */ -U_STABLE int32_t U_EXPORT2 -utrans_countAvailableIDs(void); - -/** - * Return a UEnumeration for the available transliterators. - * - * @param pErrorCode Pointer to the UErrorCode in/out parameter. - * @return UEnumeration for the available transliterators. - * Close with uenum_close(). - * - * @stable ICU 2.8 - */ -U_STABLE UEnumeration * U_EXPORT2 -utrans_openIDs(UErrorCode *pErrorCode); - -/******************************************************************** - * Transliteration API - ********************************************************************/ - -/** - * Transliterate a segment of a UReplaceable string. The string is - * passed in as a UReplaceable pointer rep and a UReplaceableCallbacks - * function pointer struct repFunc. Functions in the repFunc struct - * will be called in order to modify the rep string. - * - * @param trans the transliterator - * @param rep a pointer to the string. This will be passed to the - * repFunc functions. - * @param repFunc a set of function pointers that will be used to - * modify the string pointed to by rep. - * @param start the beginning index, inclusive; 0 <= start <= - * limit. - * @param limit pointer to the ending index, exclusive; start <= - * limit <= repFunc->length(rep). Upon return, *limit will - * contain the new limit index. The text previously occupying - * [start, limit) has been transliterated, possibly to a - * string of a different length, at [start, - * new-limit), where new-limit - * is the return value. - * @param status a pointer to the UErrorCode - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -utrans_trans(const UTransliterator* trans, - UReplaceable* rep, - const UReplaceableCallbacks* repFunc, - int32_t start, - int32_t* limit, - UErrorCode* status); - -/** - * Transliterate the portion of the UReplaceable text buffer that can - * be transliterated unambiguosly. This method is typically called - * after new text has been inserted, e.g. as a result of a keyboard - * event. The transliterator will try to transliterate characters of - * rep between index.cursor and - * index.limit. Characters before - * index.cursor will not be changed. - * - *

Upon return, values in index will be updated. - * index.start will be advanced to the first - * character that future calls to this method will read. - * index.cursor and index.limit will - * be adjusted to delimit the range of text that future calls to - * this method may change. - * - *

Typical usage of this method begins with an initial call - * with index.start and index.limit - * set to indicate the portion of text to be - * transliterated, and index.cursor == index.start. - * Thereafter, index can be used without - * modification in future calls, provided that all changes to - * text are made via this method. - * - *

This method assumes that future calls may be made that will - * insert new text into the buffer. As a result, it only performs - * unambiguous transliterations. After the last call to this method, - * there may be untransliterated text that is waiting for more input - * to resolve an ambiguity. In order to perform these pending - * transliterations, clients should call utrans_trans() with a start - * of index.start and a limit of index.end after the last call to this - * method has been made. - * - * @param trans the transliterator - * @param rep a pointer to the string. This will be passed to the - * repFunc functions. - * @param repFunc a set of function pointers that will be used to - * modify the string pointed to by rep. - * @param pos a struct containing the start and limit indices of the - * text to be read and the text to be transliterated - * @param status a pointer to the UErrorCode - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -utrans_transIncremental(const UTransliterator* trans, - UReplaceable* rep, - const UReplaceableCallbacks* repFunc, - UTransPosition* pos, - UErrorCode* status); - -/** - * Transliterate a segment of a UChar* string. The string is passed - * in in a UChar* buffer. The string is modified in place. If the - * result is longer than textCapacity, it is truncated. The actual - * length of the result is returned in *textLength, if textLength is - * non-NULL. *textLength may be greater than textCapacity, but only - * textCapacity UChars will be written to *text, including the zero - * terminator. - * - * @param trans the transliterator - * @param text a pointer to a buffer containing the text to be - * transliterated on input and the result text on output. - * @param textLength a pointer to the length of the string in text. - * If the length is -1 then the string is assumed to be - * zero-terminated. Upon return, the new length is stored in - * *textLength. If textLength is NULL then the string is assumed to - * be zero-terminated. - * @param textCapacity a pointer to the length of the text buffer. - * Upon return, - * @param start the beginning index, inclusive; 0 <= start <= - * limit. - * @param limit pointer to the ending index, exclusive; start <= - * limit <= repFunc->length(rep). Upon return, *limit will - * contain the new limit index. The text previously occupying - * [start, limit) has been transliterated, possibly to a - * string of a different length, at [start, - * new-limit), where new-limit - * is the return value. - * @param status a pointer to the UErrorCode - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -utrans_transUChars(const UTransliterator* trans, - UChar* text, - int32_t* textLength, - int32_t textCapacity, - int32_t start, - int32_t* limit, - UErrorCode* status); - -/** - * Transliterate the portion of the UChar* text buffer that can be - * transliterated unambiguosly. See utrans_transIncremental(). The - * string is passed in in a UChar* buffer. The string is modified in - * place. If the result is longer than textCapacity, it is truncated. - * The actual length of the result is returned in *textLength, if - * textLength is non-NULL. *textLength may be greater than - * textCapacity, but only textCapacity UChars will be written to - * *text, including the zero terminator. See utrans_transIncremental() - * for usage details. - * - * @param trans the transliterator - * @param text a pointer to a buffer containing the text to be - * transliterated on input and the result text on output. - * @param textLength a pointer to the length of the string in text. - * If the length is -1 then the string is assumed to be - * zero-terminated. Upon return, the new length is stored in - * *textLength. If textLength is NULL then the string is assumed to - * be zero-terminated. - * @param textCapacity the length of the text buffer - * @param pos a struct containing the start and limit indices of the - * text to be read and the text to be transliterated - * @param status a pointer to the UErrorCode - * @see utrans_transIncremental - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -utrans_transIncrementalUChars(const UTransliterator* trans, - UChar* text, - int32_t* textLength, - int32_t textCapacity, - UTransPosition* pos, - UErrorCode* status); - -/** - * Create a rule string that can be passed to utrans_openU to recreate this - * transliterator. - * - * @param trans The transliterator - * @param escapeUnprintable if TRUE then convert unprintable characters to their - * hex escape representations, \\uxxxx or \\Uxxxxxxxx. - * Unprintable characters are those other than - * U+000A, U+0020..U+007E. - * @param result A pointer to a buffer to receive the rules. - * @param resultLength The maximum size of result. - * @param status A pointer to the UErrorCode. In case of error status, the - * contents of result are undefined. - * @return int32_t The length of the rule string (may be greater than resultLength, - * in which case an error is returned). - * @stable ICU 53 - */ -U_STABLE int32_t U_EXPORT2 -utrans_toRules( const UTransliterator* trans, - UBool escapeUnprintable, - UChar* result, int32_t resultLength, - UErrorCode* status); - -/** - * Returns the set of all characters that may be modified in the input text by - * this UTransliterator, optionally ignoring the transliterator's current filter. - * @param trans The transliterator. - * @param ignoreFilter If FALSE, the returned set incorporates the - * UTransliterator's current filter; if the filter is changed, - * the return value of this function will change. If TRUE, the - * returned set ignores the effect of the UTransliterator's - * current filter. - * @param fillIn Pointer to a USet object to receive the modifiable characters - * set. Previous contents of fillIn are lost. If fillIn is - * NULL, then a new USet is created and returned. The caller - * owns the result and must dispose of it by calling uset_close. - * @param status A pointer to the UErrorCode. - * @return USet* Either fillIn, or if fillIn is NULL, a pointer to a - * newly-allocated USet that the user must close. In case of - * error, NULL is returned. - * @stable ICU 53 - */ -U_STABLE USet* U_EXPORT2 -utrans_getSourceSet(const UTransliterator* trans, - UBool ignoreFilter, - USet* fillIn, - UErrorCode* status); - -/* deprecated API ----------------------------------------------------------- */ - -#ifndef U_HIDE_DEPRECATED_API - -/* see utrans.h documentation for why these functions are deprecated */ - -/** - * Deprecated, use utrans_openU() instead. - * Open a custom transliterator, given a custom rules string - * OR - * a system transliterator, given its ID. - * Any non-NULL result from this function should later be closed with - * utrans_close(). - * - * @param id a valid ID, as returned by utrans_getAvailableID() - * @param dir the desired direction - * @param rules the transliterator rules. See the C++ header rbt.h - * for rules syntax. If NULL then a system transliterator matching - * the ID is returned. - * @param rulesLength the length of the rules, or -1 if the rules - * are zero-terminated. - * @param parseError a pointer to a UParseError struct to receive the - * details of any parsing errors. This parameter may be NULL if no - * parsing error details are desired. - * @param status a pointer to the UErrorCode - * @return a transliterator pointer that may be passed to other - * utrans_xxx() functions, or NULL if the open call fails. - * @deprecated ICU 2.8 Use utrans_openU() instead, see utrans.h - */ -U_DEPRECATED UTransliterator* U_EXPORT2 -utrans_open(const char* id, - UTransDirection dir, - const UChar* rules, /* may be Null */ - int32_t rulesLength, /* -1 if null-terminated */ - UParseError* parseError, /* may be Null */ - UErrorCode* status); - -/** - * Deprecated, use utrans_getUnicodeID() instead. - * Return the programmatic identifier for this transliterator. - * If this identifier is passed to utrans_open(), it will open - * a transliterator equivalent to this one, if the ID has been - * registered. - * @param trans the transliterator to return the ID of. - * @param buf the buffer in which to receive the ID. This may be - * NULL, in which case no characters are copied. - * @param bufCapacity the capacity of the buffer. Ignored if buf is - * NULL. - * @return the actual length of the ID, not including - * zero-termination. This may be greater than bufCapacity. - * @deprecated ICU 2.8 Use utrans_getUnicodeID() instead, see utrans.h - */ -U_DEPRECATED int32_t U_EXPORT2 -utrans_getID(const UTransliterator* trans, - char* buf, - int32_t bufCapacity); - -/** - * Deprecated, use utrans_unregisterID() instead. - * Unregister a transliterator from the system. After this call the - * system will no longer recognize the given ID when passed to - * utrans_open(). If the id is invalid then nothing is done. - * - * @param id a zero-terminated ID - * @deprecated ICU 2.8 Use utrans_unregisterID() instead, see utrans.h - */ -U_DEPRECATED void U_EXPORT2 -utrans_unregister(const char* id); - -/** - * Deprecated, use utrans_openIDs() instead. - * Return the ID of the index-th system transliterator. The result - * is placed in the given buffer. If the given buffer is too small, - * the initial substring is copied to buf. The result in buf is - * always zero-terminated. - * - * @param index the number of the transliterator to return. Must - * satisfy 0 <= index < utrans_countAvailableIDs(). If index is out - * of range then it is treated as if it were 0. - * @param buf the buffer in which to receive the ID. This may be - * NULL, in which case no characters are copied. - * @param bufCapacity the capacity of the buffer. Ignored if buf is - * NULL. - * @return the actual length of the index-th ID, not including - * zero-termination. This may be greater than bufCapacity. - * @deprecated ICU 2.8 Use utrans_openIDs() instead, see utrans.h - */ -U_DEPRECATED int32_t U_EXPORT2 -utrans_getAvailableID(int32_t index, - char* buf, - int32_t bufCapacity); - -#endif /* U_HIDE_DEPRECATED_API */ - -#endif /* #if !UCONFIG_NO_TRANSLITERATION */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utypes.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utypes.h deleted file mode 100644 index 753ce44a8f..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/utypes.h +++ /dev/null @@ -1,730 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -********************************************************************** -* Copyright (C) 1996-2016, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* -* FILE NAME : UTYPES.H (formerly ptypes.h) -* -* Date Name Description -* 12/11/96 helena Creation. -* 02/27/97 aliu Added typedefs for UClassID, int8, int16, int32, -* uint8, uint16, and uint32. -* 04/01/97 aliu Added XP_CPLUSPLUS and modified to work under C as -* well as C++. -* Modified to use memcpy() for uprv_arrayCopy() fns. -* 04/14/97 aliu Added TPlatformUtilities. -* 05/07/97 aliu Added import/export specifiers (replacing the old -* broken EXT_CLASS). Added version number for our -* code. Cleaned up header. -* 6/20/97 helena Java class name change. -* 08/11/98 stephen UErrorCode changed from typedef to enum -* 08/12/98 erm Changed T_ANALYTIC_PACKAGE_VERSION to 3 -* 08/14/98 stephen Added uprv_arrayCopy() for int8_t, int16_t, int32_t -* 12/09/98 jfitz Added BUFFER_OVERFLOW_ERROR (bug 1100066) -* 04/20/99 stephen Cleaned up & reworked for autoconf. -* Renamed to utypes.h. -* 05/05/99 stephen Changed to use -* 12/07/99 helena Moved copyright notice string from ucnv_bld.h here. -******************************************************************************* -*/ - -#ifndef UTYPES_H -#define UTYPES_H - - -#include "unicode/umachine.h" -#include "unicode/uversion.h" -#include "unicode/uconfig.h" -#if U_PLATFORM!=U_PF_IPHONE -#include -#endif - -#if !U_NO_DEFAULT_INCLUDE_UTF_HEADERS -# include "unicode/utf.h" -#endif - -/*! - * \file - * \brief Basic definitions for ICU, for both C and C++ APIs - * - * This file defines basic types, constants, and enumerations directly or - * indirectly by including other header files, especially utf.h for the - * basic character and string definitions and umachine.h for consistent - * integer and other types. - */ - - -/** - * \def U_SHOW_CPLUSPLUS_API - * @internal - */ -#ifdef __cplusplus -# ifndef U_SHOW_CPLUSPLUS_API -# define U_SHOW_CPLUSPLUS_API 0 -# endif -#else -# undef U_SHOW_CPLUSPLUS_API -# define U_SHOW_CPLUSPLUS_API 0 -#endif - - -/* - * Apple-specific warning if U_SHOW_CPLUSPLUS_API set and the compile - * is not for a build of ICU itself (ICU_DATA_DIR is always defined - * for ICU builds, and is unlikely to be defined for client builds). - * Windows VSC compliler does not like #warning, skip for it. - */ -#if U_SHOW_CPLUSPLUS_API -#ifndef ICU_DATA_DIR -#if U_PLATFORM!=U_PF_WINDOWS -#warning Do not set U_SHOW_CPLUSPLUS_API for code that ships with the OS, it is only for local tools. -#warning ICU C++ functionality may not be used by any OS client, it is not binary compatible across updates. -#endif -#endif -#endif - -/** @{ API visibility control */ - -/** - * \def U_HIDE_DRAFT_API - * Define this to 1 to request that draft API be "hidden" - * @internal - */ -/** - * \def U_HIDE_INTERNAL_API - * Define this to 1 to request that internal API be "hidden" - * @internal - */ -#if !U_DEFAULT_SHOW_DRAFT && !defined(U_SHOW_DRAFT_API) -#define U_HIDE_DRAFT_API 1 -#endif -#if !U_DEFAULT_SHOW_DRAFT && !defined(U_SHOW_INTERNAL_API) -#define U_HIDE_INTERNAL_API 1 -#endif - -/** @} */ - -/*===========================================================================*/ -/* ICUDATA naming scheme */ -/*===========================================================================*/ - -/** - * \def U_ICUDATA_TYPE_LETTER - * - * This is a platform-dependent string containing one letter: - * - b for big-endian, ASCII-family platforms - * - l for little-endian, ASCII-family platforms - * - e for big-endian, EBCDIC-family platforms - * This letter is part of the common data file name. - * @stable ICU 2.0 - */ - -/** - * \def U_ICUDATA_TYPE_LITLETTER - * The non-string form of U_ICUDATA_TYPE_LETTER - * @stable ICU 2.0 - */ -#if U_CHARSET_FAMILY -# if U_IS_BIG_ENDIAN - /* EBCDIC - should always be BE */ -# define U_ICUDATA_TYPE_LETTER "e" -# define U_ICUDATA_TYPE_LITLETTER e -# else -# error "Don't know what to do with little endian EBCDIC!" -# define U_ICUDATA_TYPE_LETTER "x" -# define U_ICUDATA_TYPE_LITLETTER x -# endif -#else -# if U_IS_BIG_ENDIAN - /* Big-endian ASCII */ -# define U_ICUDATA_TYPE_LETTER "b" -# define U_ICUDATA_TYPE_LITLETTER b -# else - /* Little-endian ASCII */ -# define U_ICUDATA_TYPE_LETTER "l" -# define U_ICUDATA_TYPE_LITLETTER l -# endif -#endif - -/** - * A single string literal containing the icudata stub name. i.e. 'icudt18e' for - * ICU 1.8.x on EBCDIC, etc.. - * @stable ICU 2.0 - */ -#define U_ICUDATA_NAME "icudt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER -#ifndef U_HIDE_INTERNAL_API -#define U_USRDATA_NAME "usrdt" U_ICU_VERSION_SHORT U_ICUDATA_TYPE_LETTER /**< @internal */ -#define U_USE_USRDATA 0 /**< @internal */ -#endif /* U_HIDE_INTERNAL_API */ - -/** - * U_ICU_ENTRY_POINT is the name of the DLL entry point to the ICU data library. - * Defined as a literal, not a string. - * Tricky Preprocessor use - ## operator replaces macro parameters with the literal string - * from the corresponding macro invocation, _before_ other macro substitutions. - * Need a nested \#defines to get the actual version numbers rather than - * the literal text U_ICU_VERSION_MAJOR_NUM into the name. - * The net result will be something of the form - * \#define U_ICU_ENTRY_POINT icudt19_dat - * @stable ICU 2.4 - */ -#define U_ICUDATA_ENTRY_POINT U_DEF2_ICUDATA_ENTRY_POINT(U_ICU_VERSION_MAJOR_NUM,U_LIB_SUFFIX_C_NAME) - -#ifndef U_HIDE_INTERNAL_API -/** - * Do not use. Note that it's OK for the 2nd argument to be undefined (literal). - * @internal - */ -#define U_DEF2_ICUDATA_ENTRY_POINT(major,suff) U_DEF_ICUDATA_ENTRY_POINT(major,suff) - -/** - * Do not use. - * @internal - */ -#ifndef U_DEF_ICUDATA_ENTRY_POINT -/* affected by symbol renaming. See platform.h */ -#ifndef U_LIB_SUFFIX_C_NAME -#define U_DEF_ICUDATA_ENTRY_POINT(major, suff) icudt##major##_dat -#else -#define U_DEF_ICUDATA_ENTRY_POINT(major, suff) icudt##suff ## major##_dat -#endif -#endif -#endif /* U_HIDE_INTERNAL_API */ - -/** - * \def NULL - * Define NULL if necessary, to nullptr for C++ and to ((void *)0) for C. - * @stable ICU 2.0 - */ -#ifndef NULL -#ifdef __cplusplus -#define NULL nullptr -#else -#define NULL ((void *)0) -#endif -#endif - -/*===========================================================================*/ -/* Calendar/TimeZone data types */ -/*===========================================================================*/ - -/** - * Date and Time data type. - * This is a primitive data type that holds the date and time - * as the number of milliseconds since 1970-jan-01, 00:00 UTC. - * UTC leap seconds are ignored. - * @stable ICU 2.0 - */ -typedef double UDate; - -/** The number of milliseconds per second @stable ICU 2.0 */ -#define U_MILLIS_PER_SECOND (1000) -/** The number of milliseconds per minute @stable ICU 2.0 */ -#define U_MILLIS_PER_MINUTE (60000) -/** The number of milliseconds per hour @stable ICU 2.0 */ -#define U_MILLIS_PER_HOUR (3600000) -/** The number of milliseconds per day @stable ICU 2.0 */ -#define U_MILLIS_PER_DAY (86400000) - -/** - * Maximum UDate value - * @stable ICU 4.8 - */ -#if U_PLATFORM!=U_PF_IPHONE -#define U_DATE_MAX DBL_MAX -#else -#define U_DATE_MAX (1.7976931348623157e+308) -#endif - -/** - * Minimum UDate value - * @stable ICU 4.8 - */ -#define U_DATE_MIN (-U_DATE_MAX) - -/*===========================================================================*/ -/* Shared library/DLL import-export API control */ -/*===========================================================================*/ - -/* - * Control of symbol import/export. - * ICU is separated into three libraries. - */ - -/** - * \def U_COMBINED_IMPLEMENTATION - * Set to export library symbols from inside the ICU library - * when all of ICU is in a single library. - * This can be set as a compiler option while building ICU, and it - * needs to be the first one tested to override U_COMMON_API, U_I18N_API, etc. - * @stable ICU 2.0 - */ - -/** - * \def U_DATA_API - * Set to export library symbols from inside the stubdata library, - * and to import them from outside. - * @stable ICU 3.0 - */ - -/** - * \def U_COMMON_API - * Set to export library symbols from inside the common library, - * and to import them from outside. - * @stable ICU 2.0 - */ - -/** - * \def U_I18N_API - * Set to export library symbols from inside the i18n library, - * and to import them from outside. - * @stable ICU 2.0 - */ - -/** - * \def U_LAYOUT_API - * Set to export library symbols from inside the layout engine library, - * and to import them from outside. - * @stable ICU 2.0 - */ - -/** - * \def U_LAYOUTEX_API - * Set to export library symbols from inside the layout extensions library, - * and to import them from outside. - * @stable ICU 2.6 - */ - -/** - * \def U_IO_API - * Set to export library symbols from inside the ustdio library, - * and to import them from outside. - * @stable ICU 2.0 - */ - -/** - * \def U_TOOLUTIL_API - * Set to export library symbols from inside the toolutil library, - * and to import them from outside. - * @stable ICU 3.4 - */ - -#ifdef U_IN_DOXYGEN -// This definition is required when generating the API docs. -#define U_COMBINED_IMPLEMENTATION 1 -#endif - -#if defined(U_COMBINED_IMPLEMENTATION) -#define U_DATA_API U_EXPORT -#define U_COMMON_API U_EXPORT -#define U_I18N_API U_EXPORT -#define U_LAYOUT_API U_EXPORT -#define U_LAYOUTEX_API U_EXPORT -#define U_IO_API U_EXPORT -#define U_TOOLUTIL_API U_EXPORT -#elif defined(U_STATIC_IMPLEMENTATION) -#define U_DATA_API -#define U_COMMON_API -#define U_I18N_API -#define U_LAYOUT_API -#define U_LAYOUTEX_API -#define U_IO_API -#define U_TOOLUTIL_API -#elif defined(U_COMMON_IMPLEMENTATION) -#define U_DATA_API U_IMPORT -#define U_COMMON_API U_EXPORT -#define U_I18N_API U_IMPORT -#define U_LAYOUT_API U_IMPORT -#define U_LAYOUTEX_API U_IMPORT -#define U_IO_API U_IMPORT -#define U_TOOLUTIL_API U_IMPORT -#elif defined(U_I18N_IMPLEMENTATION) -#define U_DATA_API U_IMPORT -#define U_COMMON_API U_IMPORT -#define U_I18N_API U_EXPORT -#define U_LAYOUT_API U_IMPORT -#define U_LAYOUTEX_API U_IMPORT -#define U_IO_API U_IMPORT -#define U_TOOLUTIL_API U_IMPORT -#elif defined(U_LAYOUT_IMPLEMENTATION) -#define U_DATA_API U_IMPORT -#define U_COMMON_API U_IMPORT -#define U_I18N_API U_IMPORT -#define U_LAYOUT_API U_EXPORT -#define U_LAYOUTEX_API U_IMPORT -#define U_IO_API U_IMPORT -#define U_TOOLUTIL_API U_IMPORT -#elif defined(U_LAYOUTEX_IMPLEMENTATION) -#define U_DATA_API U_IMPORT -#define U_COMMON_API U_IMPORT -#define U_I18N_API U_IMPORT -#define U_LAYOUT_API U_IMPORT -#define U_LAYOUTEX_API U_EXPORT -#define U_IO_API U_IMPORT -#define U_TOOLUTIL_API U_IMPORT -#elif defined(U_IO_IMPLEMENTATION) -#define U_DATA_API U_IMPORT -#define U_COMMON_API U_IMPORT -#define U_I18N_API U_IMPORT -#define U_LAYOUT_API U_IMPORT -#define U_LAYOUTEX_API U_IMPORT -#define U_IO_API U_EXPORT -#define U_TOOLUTIL_API U_IMPORT -#elif defined(U_TOOLUTIL_IMPLEMENTATION) -#define U_DATA_API U_IMPORT -#define U_COMMON_API U_IMPORT -#define U_I18N_API U_IMPORT -#define U_LAYOUT_API U_IMPORT -#define U_LAYOUTEX_API U_IMPORT -#define U_IO_API U_IMPORT -#define U_TOOLUTIL_API U_EXPORT -#else -#define U_DATA_API U_IMPORT -#define U_COMMON_API U_IMPORT -#define U_I18N_API U_IMPORT -#define U_LAYOUT_API U_IMPORT -#define U_LAYOUTEX_API U_IMPORT -#define U_IO_API U_IMPORT -#define U_TOOLUTIL_API U_IMPORT -#endif - -/** - * \def U_STANDARD_CPP_NAMESPACE - * Control of C++ Namespace - * @stable ICU 2.0 - */ -#ifdef __cplusplus -#define U_STANDARD_CPP_NAMESPACE :: -#else -#define U_STANDARD_CPP_NAMESPACE -#endif - -/*===========================================================================*/ -/* UErrorCode */ -/*===========================================================================*/ - -/** - * Error code to replace exception handling, so that the code is compatible with all C++ compilers, - * and to use the same mechanism for C and C++. - * - * \par - * ICU functions that take a reference (C++) or a pointer (C) to a UErrorCode - * first test if(U_FAILURE(errorCode)) { return immediately; } - * so that in a chain of such functions the first one that sets an error code - * causes the following ones to not perform any operations. - * - * \par - * Error codes should be tested using U_FAILURE() and U_SUCCESS(). - * @stable ICU 2.0 - */ -typedef enum UErrorCode { - /* The ordering of U_ERROR_INFO_START Vs U_USING_FALLBACK_WARNING looks weird - * and is that way because VC++ debugger displays first encountered constant, - * which is not the what the code is used for - */ - - U_USING_FALLBACK_WARNING = -128, /**< A resource bundle lookup returned a fallback result (not an error) */ - - U_ERROR_WARNING_START = -128, /**< Start of information results (semantically successful) */ - - U_USING_DEFAULT_WARNING = -127, /**< A resource bundle lookup returned a result from the root locale (not an error) */ - - U_SAFECLONE_ALLOCATED_WARNING = -126, /**< A SafeClone operation required allocating memory (informational only) */ - - U_STATE_OLD_WARNING = -125, /**< ICU has to use compatibility layer to construct the service. Expect performance/memory usage degradation. Consider upgrading */ - - U_STRING_NOT_TERMINATED_WARNING = -124,/**< An output string could not be NUL-terminated because output length==destCapacity. */ - - U_SORT_KEY_TOO_SHORT_WARNING = -123, /**< Number of levels requested in getBound is higher than the number of levels in the sort key */ - - U_AMBIGUOUS_ALIAS_WARNING = -122, /**< This converter alias can go to different converter implementations */ - - U_DIFFERENT_UCA_VERSION = -121, /**< ucol_open encountered a mismatch between UCA version and collator image version, so the collator was constructed from rules. No impact to further function */ - - U_PLUGIN_CHANGED_LEVEL_WARNING = -120, /**< A plugin caused a level change. May not be an error, but later plugins may not load. */ - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal UErrorCode warning value. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_ERROR_WARNING_LIMIT, -#endif // U_HIDE_DEPRECATED_API - - U_ZERO_ERROR = 0, /**< No error, no warning. */ - - U_ILLEGAL_ARGUMENT_ERROR = 1, /**< Start of codes indicating failure */ - U_MISSING_RESOURCE_ERROR = 2, /**< The requested resource cannot be found */ - U_INVALID_FORMAT_ERROR = 3, /**< Data format is not what is expected */ - U_FILE_ACCESS_ERROR = 4, /**< The requested file cannot be found */ - U_INTERNAL_PROGRAM_ERROR = 5, /**< Indicates a bug in the library code */ - U_MESSAGE_PARSE_ERROR = 6, /**< Unable to parse a message (message format) */ - U_MEMORY_ALLOCATION_ERROR = 7, /**< Memory allocation error */ - U_INDEX_OUTOFBOUNDS_ERROR = 8, /**< Trying to access the index that is out of bounds */ - U_PARSE_ERROR = 9, /**< Equivalent to Java ParseException */ - U_INVALID_CHAR_FOUND = 10, /**< Character conversion: Unmappable input sequence. In other APIs: Invalid character. */ - U_TRUNCATED_CHAR_FOUND = 11, /**< Character conversion: Incomplete input sequence. */ - U_ILLEGAL_CHAR_FOUND = 12, /**< Character conversion: Illegal input sequence/combination of input units. */ - U_INVALID_TABLE_FORMAT = 13, /**< Conversion table file found, but corrupted */ - U_INVALID_TABLE_FILE = 14, /**< Conversion table file not found */ - U_BUFFER_OVERFLOW_ERROR = 15, /**< A result would not fit in the supplied buffer */ - U_UNSUPPORTED_ERROR = 16, /**< Requested operation not supported in current context */ - U_RESOURCE_TYPE_MISMATCH = 17, /**< an operation is requested over a resource that does not support it */ - U_ILLEGAL_ESCAPE_SEQUENCE = 18, /**< ISO-2022 illegal escape sequence */ - U_UNSUPPORTED_ESCAPE_SEQUENCE = 19, /**< ISO-2022 unsupported escape sequence */ - U_NO_SPACE_AVAILABLE = 20, /**< No space available for in-buffer expansion for Arabic shaping */ - U_CE_NOT_FOUND_ERROR = 21, /**< Currently used only while setting variable top, but can be used generally */ - U_PRIMARY_TOO_LONG_ERROR = 22, /**< User tried to set variable top to a primary that is longer than two bytes */ - U_STATE_TOO_OLD_ERROR = 23, /**< ICU cannot construct a service from this state, as it is no longer supported */ - U_TOO_MANY_ALIASES_ERROR = 24, /**< There are too many aliases in the path to the requested resource. - It is very possible that a circular alias definition has occurred */ - U_ENUM_OUT_OF_SYNC_ERROR = 25, /**< UEnumeration out of sync with underlying collection */ - U_INVARIANT_CONVERSION_ERROR = 26, /**< Unable to convert a UChar* string to char* with the invariant converter. */ - U_INVALID_STATE_ERROR = 27, /**< Requested operation can not be completed with ICU in its current state */ - U_COLLATOR_VERSION_MISMATCH = 28, /**< Collator version is not compatible with the base version */ - U_USELESS_COLLATOR_ERROR = 29, /**< Collator is options only and no base is specified */ - U_NO_WRITE_PERMISSION = 30, /**< Attempt to modify read-only or constant data. */ - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest standard error code. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_STANDARD_ERROR_LIMIT, -#endif // U_HIDE_DEPRECATED_API - - /* - * Error codes in the range 0x10000 0x10100 are reserved for Transliterator. - */ - U_BAD_VARIABLE_DEFINITION=0x10000,/**< Missing '$' or duplicate variable name */ - U_PARSE_ERROR_START = 0x10000, /**< Start of Transliterator errors */ - U_MALFORMED_RULE, /**< Elements of a rule are misplaced */ - U_MALFORMED_SET, /**< A UnicodeSet pattern is invalid*/ - U_MALFORMED_SYMBOL_REFERENCE, /**< UNUSED as of ICU 2.4 */ - U_MALFORMED_UNICODE_ESCAPE, /**< A Unicode escape pattern is invalid*/ - U_MALFORMED_VARIABLE_DEFINITION, /**< A variable definition is invalid */ - U_MALFORMED_VARIABLE_REFERENCE, /**< A variable reference is invalid */ - U_MISMATCHED_SEGMENT_DELIMITERS, /**< UNUSED as of ICU 2.4 */ - U_MISPLACED_ANCHOR_START, /**< A start anchor appears at an illegal position */ - U_MISPLACED_CURSOR_OFFSET, /**< A cursor offset occurs at an illegal position */ - U_MISPLACED_QUANTIFIER, /**< A quantifier appears after a segment close delimiter */ - U_MISSING_OPERATOR, /**< A rule contains no operator */ - U_MISSING_SEGMENT_CLOSE, /**< UNUSED as of ICU 2.4 */ - U_MULTIPLE_ANTE_CONTEXTS, /**< More than one ante context */ - U_MULTIPLE_CURSORS, /**< More than one cursor */ - U_MULTIPLE_POST_CONTEXTS, /**< More than one post context */ - U_TRAILING_BACKSLASH, /**< A dangling backslash */ - U_UNDEFINED_SEGMENT_REFERENCE, /**< A segment reference does not correspond to a defined segment */ - U_UNDEFINED_VARIABLE, /**< A variable reference does not correspond to a defined variable */ - U_UNQUOTED_SPECIAL, /**< A special character was not quoted or escaped */ - U_UNTERMINATED_QUOTE, /**< A closing single quote is missing */ - U_RULE_MASK_ERROR, /**< A rule is hidden by an earlier more general rule */ - U_MISPLACED_COMPOUND_FILTER, /**< A compound filter is in an invalid location */ - U_MULTIPLE_COMPOUND_FILTERS, /**< More than one compound filter */ - U_INVALID_RBT_SYNTAX, /**< A "::id" rule was passed to the RuleBasedTransliterator parser */ - U_INVALID_PROPERTY_PATTERN, /**< UNUSED as of ICU 2.4 */ - U_MALFORMED_PRAGMA, /**< A 'use' pragma is invalid */ - U_UNCLOSED_SEGMENT, /**< A closing ')' is missing */ - U_ILLEGAL_CHAR_IN_SEGMENT, /**< UNUSED as of ICU 2.4 */ - U_VARIABLE_RANGE_EXHAUSTED, /**< Too many stand-ins generated for the given variable range */ - U_VARIABLE_RANGE_OVERLAP, /**< The variable range overlaps characters used in rules */ - U_ILLEGAL_CHARACTER, /**< A special character is outside its allowed context */ - U_INTERNAL_TRANSLITERATOR_ERROR, /**< Internal transliterator system error */ - U_INVALID_ID, /**< A "::id" rule specifies an unknown transliterator */ - U_INVALID_FUNCTION, /**< A "&fn()" rule specifies an unknown transliterator */ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal Transliterator error code. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_PARSE_ERROR_LIMIT, -#endif // U_HIDE_DEPRECATED_API - - /* - * Error codes in the range 0x10100 0x10200 are reserved for the formatting API. - */ - U_UNEXPECTED_TOKEN=0x10100, /**< Syntax error in format pattern */ - U_FMT_PARSE_ERROR_START=0x10100, /**< Start of format library errors */ - U_MULTIPLE_DECIMAL_SEPARATORS, /**< More than one decimal separator in number pattern */ - U_MULTIPLE_DECIMAL_SEPERATORS = U_MULTIPLE_DECIMAL_SEPARATORS, /**< Typo: kept for backward compatibility. Use U_MULTIPLE_DECIMAL_SEPARATORS */ - U_MULTIPLE_EXPONENTIAL_SYMBOLS, /**< More than one exponent symbol in number pattern */ - U_MALFORMED_EXPONENTIAL_PATTERN, /**< Grouping symbol in exponent pattern */ - U_MULTIPLE_PERCENT_SYMBOLS, /**< More than one percent symbol in number pattern */ - U_MULTIPLE_PERMILL_SYMBOLS, /**< More than one permill symbol in number pattern */ - U_MULTIPLE_PAD_SPECIFIERS, /**< More than one pad symbol in number pattern */ - U_PATTERN_SYNTAX_ERROR, /**< Syntax error in format pattern */ - U_ILLEGAL_PAD_POSITION, /**< Pad symbol misplaced in number pattern */ - U_UNMATCHED_BRACES, /**< Braces do not match in message pattern */ - U_UNSUPPORTED_PROPERTY, /**< UNUSED as of ICU 2.4 */ - U_UNSUPPORTED_ATTRIBUTE, /**< UNUSED as of ICU 2.4 */ - U_ARGUMENT_TYPE_MISMATCH, /**< Argument name and argument index mismatch in MessageFormat functions */ - U_DUPLICATE_KEYWORD, /**< Duplicate keyword in PluralFormat */ - U_UNDEFINED_KEYWORD, /**< Undefined Plural keyword */ - U_DEFAULT_KEYWORD_MISSING, /**< Missing DEFAULT rule in plural rules */ - U_DECIMAL_NUMBER_SYNTAX_ERROR, /**< Decimal number syntax error */ - U_FORMAT_INEXACT_ERROR, /**< Cannot format a number exactly and rounding mode is ROUND_UNNECESSARY @stable ICU 4.8 */ - U_NUMBER_ARG_OUTOFBOUNDS_ERROR, /**< The argument to a NumberFormatter helper method was out of bounds; the bounds are usually 0 to 999. @stable ICU 61 */ - U_NUMBER_SKELETON_SYNTAX_ERROR, /**< The number skeleton passed to C++ NumberFormatter or C UNumberFormatter was invalid or contained a syntax error. @stable ICU 62 */ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal formatting API error code. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_FMT_PARSE_ERROR_LIMIT = 0x10114, -#endif // U_HIDE_DEPRECATED_API - - /* - * Error codes in the range 0x10200 0x102ff are reserved for BreakIterator. - */ - U_BRK_INTERNAL_ERROR=0x10200, /**< An internal error (bug) was detected. */ - U_BRK_ERROR_START=0x10200, /**< Start of codes indicating Break Iterator failures */ - U_BRK_HEX_DIGITS_EXPECTED, /**< Hex digits expected as part of a escaped char in a rule. */ - U_BRK_SEMICOLON_EXPECTED, /**< Missing ';' at the end of a RBBI rule. */ - U_BRK_RULE_SYNTAX, /**< Syntax error in RBBI rule. */ - U_BRK_UNCLOSED_SET, /**< UnicodeSet writing an RBBI rule missing a closing ']'. */ - U_BRK_ASSIGN_ERROR, /**< Syntax error in RBBI rule assignment statement. */ - U_BRK_VARIABLE_REDFINITION, /**< RBBI rule $Variable redefined. */ - U_BRK_MISMATCHED_PAREN, /**< Mis-matched parentheses in an RBBI rule. */ - U_BRK_NEW_LINE_IN_QUOTED_STRING, /**< Missing closing quote in an RBBI rule. */ - U_BRK_UNDEFINED_VARIABLE, /**< Use of an undefined $Variable in an RBBI rule. */ - U_BRK_INIT_ERROR, /**< Initialization failure. Probable missing ICU Data. */ - U_BRK_RULE_EMPTY_SET, /**< Rule contains an empty Unicode Set. */ - U_BRK_UNRECOGNIZED_OPTION, /**< !!option in RBBI rules not recognized. */ - U_BRK_MALFORMED_RULE_TAG, /**< The {nnn} tag on a rule is malformed */ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal BreakIterator error code. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_BRK_ERROR_LIMIT, -#endif // U_HIDE_DEPRECATED_API - - /* - * Error codes in the range 0x10300-0x103ff are reserved for regular expression related errors. - */ - U_REGEX_INTERNAL_ERROR=0x10300, /**< An internal error (bug) was detected. */ - U_REGEX_ERROR_START=0x10300, /**< Start of codes indicating Regexp failures */ - U_REGEX_RULE_SYNTAX, /**< Syntax error in regexp pattern. */ - U_REGEX_INVALID_STATE, /**< RegexMatcher in invalid state for requested operation */ - U_REGEX_BAD_ESCAPE_SEQUENCE, /**< Unrecognized backslash escape sequence in pattern */ - U_REGEX_PROPERTY_SYNTAX, /**< Incorrect Unicode property */ - U_REGEX_UNIMPLEMENTED, /**< Use of regexp feature that is not yet implemented. */ - U_REGEX_MISMATCHED_PAREN, /**< Incorrectly nested parentheses in regexp pattern. */ - U_REGEX_NUMBER_TOO_BIG, /**< Decimal number is too large. */ - U_REGEX_BAD_INTERVAL, /**< Error in {min,max} interval */ - U_REGEX_MAX_LT_MIN, /**< In {min,max}, max is less than min. */ - U_REGEX_INVALID_BACK_REF, /**< Back-reference to a non-existent capture group. */ - U_REGEX_INVALID_FLAG, /**< Invalid value for match mode flags. */ - U_REGEX_LOOK_BEHIND_LIMIT, /**< Look-Behind pattern matches must have a bounded maximum length. */ - U_REGEX_SET_CONTAINS_STRING, /**< Regexps cannot have UnicodeSets containing strings.*/ -#ifndef U_HIDE_DEPRECATED_API - U_REGEX_OCTAL_TOO_BIG, /**< Octal character constants must be <= 0377. @deprecated ICU 54. This error cannot occur. */ -#endif /* U_HIDE_DEPRECATED_API */ - U_REGEX_MISSING_CLOSE_BRACKET=U_REGEX_SET_CONTAINS_STRING+2, /**< Missing closing bracket on a bracket expression. */ - U_REGEX_INVALID_RANGE, /**< In a character range [x-y], x is greater than y. */ - U_REGEX_STACK_OVERFLOW, /**< Regular expression backtrack stack overflow. */ - U_REGEX_TIME_OUT, /**< Maximum allowed match time exceeded */ - U_REGEX_STOPPED_BY_CALLER, /**< Matching operation aborted by user callback fn. */ - U_REGEX_PATTERN_TOO_BIG, /**< Pattern exceeds limits on size or complexity. @stable ICU 55 */ - U_REGEX_INVALID_CAPTURE_GROUP_NAME, /**< Invalid capture group name. @stable ICU 55 */ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal regular expression error code. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_REGEX_ERROR_LIMIT=U_REGEX_STOPPED_BY_CALLER+3, -#endif // U_HIDE_DEPRECATED_API - - /* - * Error codes in the range 0x10400-0x104ff are reserved for IDNA related error codes. - */ - U_IDNA_PROHIBITED_ERROR=0x10400, - U_IDNA_ERROR_START=0x10400, - U_IDNA_UNASSIGNED_ERROR, - U_IDNA_CHECK_BIDI_ERROR, - U_IDNA_STD3_ASCII_RULES_ERROR, - U_IDNA_ACE_PREFIX_ERROR, - U_IDNA_VERIFICATION_ERROR, - U_IDNA_LABEL_TOO_LONG_ERROR, - U_IDNA_ZERO_LENGTH_LABEL_ERROR, - U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR, -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal IDNA error code. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_IDNA_ERROR_LIMIT, -#endif // U_HIDE_DEPRECATED_API - /* - * Aliases for StringPrep - */ - U_STRINGPREP_PROHIBITED_ERROR = U_IDNA_PROHIBITED_ERROR, - U_STRINGPREP_UNASSIGNED_ERROR = U_IDNA_UNASSIGNED_ERROR, - U_STRINGPREP_CHECK_BIDI_ERROR = U_IDNA_CHECK_BIDI_ERROR, - - /* - * Error codes in the range 0x10500-0x105ff are reserved for Plugin related error codes. - */ - U_PLUGIN_ERROR_START=0x10500, /**< Start of codes indicating plugin failures */ - U_PLUGIN_TOO_HIGH=0x10500, /**< The plugin's level is too high to be loaded right now. */ - U_PLUGIN_DIDNT_SET_LEVEL, /**< The plugin didn't call uplug_setPlugLevel in response to a QUERY */ -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal plug-in error code. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_PLUGIN_ERROR_LIMIT, -#endif // U_HIDE_DEPRECATED_API - -#ifndef U_HIDE_DEPRECATED_API - /** - * One more than the highest normal error code. - * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. - */ - U_ERROR_LIMIT=U_PLUGIN_ERROR_LIMIT -#endif // U_HIDE_DEPRECATED_API -} UErrorCode; - -/* Use the following to determine if an UErrorCode represents */ -/* operational success or failure. */ - -#ifdef __cplusplus - /** - * Does the error code indicate success? - * @stable ICU 2.0 - */ - static - inline UBool U_SUCCESS(UErrorCode code) { return (UBool)(code<=U_ZERO_ERROR); } - /** - * Does the error code indicate a failure? - * @stable ICU 2.0 - */ - static - inline UBool U_FAILURE(UErrorCode code) { return (UBool)(code>U_ZERO_ERROR); } -#else - /** - * Does the error code indicate success? - * @stable ICU 2.0 - */ -# define U_SUCCESS(x) ((x)<=U_ZERO_ERROR) - /** - * Does the error code indicate a failure? - * @stable ICU 2.0 - */ -# define U_FAILURE(x) ((x)>U_ZERO_ERROR) -#endif - -/** - * Return a string for a UErrorCode value. - * The string will be the same as the name of the error code constant - * in the UErrorCode enum above. - * @stable ICU 2.0 - */ -U_STABLE const char * U_EXPORT2 -u_errorName(UErrorCode code); - - -#endif /* _UTYPES */ diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uvernum.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uvernum.h deleted file mode 100644 index 7c114be2cc..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uvernum.h +++ /dev/null @@ -1,198 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2000-2016, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* -* file name: uvernum.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* Created by: Vladimir Weinstein -* Updated by: Steven R. Loomis -* -*/ - -/** - * \file - * \brief C API: definitions of ICU version numbers - * - * This file is included by uversion.h and other files. This file contains only - * macros and definitions. The actual version numbers are defined here. - */ - - /* - * IMPORTANT: When updating version, the following things need to be done: - * source/common/unicode/uvernum.h - this file: update major, minor, - * patchlevel, suffix, version, short version constants, namespace, - * renaming macro, and copyright - * - * The following files need to be updated as well, which can be done - * by running the UNIX makefile target 'update-windows-makefiles' in icu/source. - * - * - * source/common/common_uwp.vcxproj - * source/common/common.vcxproj - update 'Output file name' on the link tab so - * that it contains the new major/minor combination - * source/i18n/i18n.vcxproj - same as for the common.vcxproj - * source/i18n/i18n_uwp.vcxproj - same as for the common_uwp.vcxproj - * source/layoutex/layoutex.vcproj - same - * source/stubdata/stubdata.vcproj - same as for the common.vcxproj - * source/io/io.vcproj - same as for the common.vcxproj - * source/data/makedata.mak - change U_ICUDATA_NAME so that it contains - * the new major/minor combination and the Unicode version. - */ - -#ifndef UVERNUM_H -#define UVERNUM_H - -/** The standard copyright notice that gets compiled into each library. - * This value will change in the subsequent releases of ICU - * @stable ICU 2.4 - */ -#define U_COPYRIGHT_STRING \ - " Copyright (C) 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html " - -/** The current ICU major version as an integer. - * This value will change in the subsequent releases of ICU - * @stable ICU 2.4 - */ -#define U_ICU_VERSION_MAJOR_NUM 64 - -/** The current ICU minor version as an integer. - * This value will change in the subsequent releases of ICU - * @stable ICU 2.6 - */ -#define U_ICU_VERSION_MINOR_NUM 2 - -/** The current ICU patchlevel version as an integer. - * This value will change in the subsequent releases of ICU - * @stable ICU 2.4 - */ -#define U_ICU_VERSION_PATCHLEVEL_NUM 0 - -/** The current ICU build level version as an integer. - * This value is for use by ICU clients. It defaults to 0. - * @stable ICU 4.0 - */ -#ifndef U_ICU_VERSION_BUILDLEVEL_NUM -#define U_ICU_VERSION_BUILDLEVEL_NUM 0 -#endif - -/** Glued version suffix for renamers - * This value will change in the subsequent releases of ICU - * @stable ICU 2.6 - */ -#define U_ICU_VERSION_SUFFIX _64 - -/** - * \def U_DEF2_ICU_ENTRY_POINT_RENAME - * @internal - */ -/** - * \def U_DEF_ICU_ENTRY_POINT_RENAME - * @internal - */ -/** Glued version suffix function for renamers - * This value will change in the subsequent releases of ICU. - * If a custom suffix (such as matching library suffixes) is desired, this can be modified. - * Note that if present, platform.h may contain an earlier definition of this macro. - * \def U_ICU_ENTRY_POINT_RENAME - * @stable ICU 4.2 - */ -/** - * Disable the version suffix. Use the custom suffix if exists. - * \def U_DISABLE_VERSION_SUFFIX - * @internal - */ -#ifndef U_DISABLE_VERSION_SUFFIX -#define U_DISABLE_VERSION_SUFFIX 0 -#endif - -#ifndef U_ICU_ENTRY_POINT_RENAME -#ifdef U_HAVE_LIB_SUFFIX -# if !U_DISABLE_VERSION_SUFFIX -# define U_DEF_ICU_ENTRY_POINT_RENAME(x,y,z) x ## y ## z -# define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y,z) U_DEF_ICU_ENTRY_POINT_RENAME(x,y,z) -# define U_ICU_ENTRY_POINT_RENAME(x) U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX,U_LIB_SUFFIX_C_NAME) -# else -# define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y -# define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y) -# define U_ICU_ENTRY_POINT_RENAME(x) U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_LIB_SUFFIX_C_NAME) -# endif -#else -# if !U_DISABLE_VERSION_SUFFIX -# define U_DEF_ICU_ENTRY_POINT_RENAME(x,y) x ## y -# define U_DEF2_ICU_ENTRY_POINT_RENAME(x,y) U_DEF_ICU_ENTRY_POINT_RENAME(x,y) -# define U_ICU_ENTRY_POINT_RENAME(x) U_DEF2_ICU_ENTRY_POINT_RENAME(x,U_ICU_VERSION_SUFFIX) -# else -# define U_ICU_ENTRY_POINT_RENAME(x) x -# endif -#endif -#endif - -/** The current ICU library version as a dotted-decimal string. The patchlevel - * only appears in this string if it non-zero. - * This value will change in the subsequent releases of ICU - * @stable ICU 2.4 - */ -#define U_ICU_VERSION "64.2" - -/** - * The current ICU library major version number as a string, for library name suffixes. - * This value will change in subsequent releases of ICU. - * - * Until ICU 4.8, this was the combination of the single-digit major and minor ICU version numbers - * into one string without dots ("48"). - * Since ICU 49, it is the double-digit major ICU version number. - * See http://userguide.icu-project.org/design#TOC-Version-Numbers-in-ICU - * - * @stable ICU 2.6 - */ -#define U_ICU_VERSION_SHORT "64" - -#ifndef U_HIDE_INTERNAL_API -/** Data version in ICU4C. - * @internal ICU 4.4 Internal Use Only - **/ -#define U_ICU_DATA_VERSION "64.2" -#endif /* U_HIDE_INTERNAL_API */ - -/*=========================================================================== - * ICU collation framework version information - * Version info that can be obtained from a collator is affected by these - * numbers in a secret and magic way. Please use collator version as whole - *=========================================================================== - */ - -/** - * Collation runtime version (sort key generator, strcoll). - * If the version is different, sort keys for the same string could be different. - * This value may change in subsequent releases of ICU. - * @stable ICU 2.4 - */ -#define UCOL_RUNTIME_VERSION 9 - -/** - * Collation builder code version. - * When this is different, the same tailoring might result - * in assigning different collation elements to code points. - * This value may change in subsequent releases of ICU. - * @stable ICU 2.4 - */ -#define UCOL_BUILDER_VERSION 9 - -#ifndef U_HIDE_DEPRECATED_API -/** - * Constant 1. - * This was intended to be the version of collation tailorings, - * but instead the tailoring data carries a version number. - * @deprecated ICU 54 - */ -#define UCOL_TAILORINGS_VERSION 1 -#endif /* U_HIDE_DEPRECATED_API */ - -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uversion.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uversion.h deleted file mode 100644 index 4aaa8b4d60..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/uversion.h +++ /dev/null @@ -1,201 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2000-2011, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* -* file name: uversion.h -* encoding: UTF-8 -* tab size: 8 (not used) -* indentation:4 -* -* Created by: Vladimir Weinstein -* -* Gets included by utypes.h and Windows .rc files -*/ - -/** - * \file - * \brief C API: API for accessing ICU version numbers. - */ -/*===========================================================================*/ -/* Main ICU version information */ -/*===========================================================================*/ - -#ifndef UVERSION_H -#define UVERSION_H - -#include "unicode/umachine.h" - -/* Actual version info lives in uvernum.h */ -#include "unicode/uvernum.h" - -/** Maximum length of the copyright string. - * @stable ICU 2.4 - */ -#define U_COPYRIGHT_STRING_LENGTH 128 - -/** An ICU version consists of up to 4 numbers from 0..255. - * @stable ICU 2.4 - */ -#define U_MAX_VERSION_LENGTH 4 - -/** In a string, ICU version fields are delimited by dots. - * @stable ICU 2.4 - */ -#define U_VERSION_DELIMITER '.' - -/** The maximum length of an ICU version string. - * @stable ICU 2.4 - */ -#define U_MAX_VERSION_STRING_LENGTH 20 - -/** The binary form of a version on ICU APIs is an array of 4 uint8_t. - * To compare two versions, use memcmp(v1,v2,sizeof(UVersionInfo)). - * @stable ICU 2.4 - */ -typedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH]; - -/*===========================================================================*/ -/* C++ namespace if supported. Versioned unless versioning is disabled. */ -/*===========================================================================*/ - -/** - * \def U_NAMESPACE_BEGIN - * This is used to begin a declaration of a public ICU C++ API. - * When not compiling for C++, it does nothing. - * When compiling for C++, it begins an extern "C++" linkage block (to protect - * against cases in which an external client includes ICU header files inside - * an extern "C" linkage block). - * - * It also begins a versioned-ICU-namespace block. - * @stable ICU 2.4 - */ - -/** - * \def U_NAMESPACE_END - * This is used to end a declaration of a public ICU C++ API. - * When not compiling for C++, it does nothing. - * When compiling for C++, it ends the extern "C++" block begun by - * U_NAMESPACE_BEGIN. - * - * It also ends the versioned-ICU-namespace block begun by U_NAMESPACE_BEGIN. - * @stable ICU 2.4 - */ - -/** - * \def U_NAMESPACE_USE - * This is used to specify that the rest of the code uses the - * public ICU C++ API namespace. - * This is invoked by default; we recommend that you turn it off: - * See the "Recommended Build Options" section of the ICU4C readme - * (http://source.icu-project.org/repos/icu/icu/trunk/readme.html#RecBuild) - * @stable ICU 2.4 - */ - -/** - * \def U_NAMESPACE_QUALIFIER - * This is used to qualify that a function or class is part of - * the public ICU C++ API namespace. - * - * This macro is unnecessary since ICU 49 requires namespace support. - * You can just use "icu::" instead. - * @stable ICU 2.4 - */ - -/* Define C++ namespace symbols. */ -#ifdef __cplusplus -# if U_DISABLE_RENAMING -# define U_ICU_NAMESPACE icu - namespace U_ICU_NAMESPACE { } -# else -# define U_ICU_NAMESPACE U_ICU_ENTRY_POINT_RENAME(icu) - namespace U_ICU_NAMESPACE { } - namespace icu = U_ICU_NAMESPACE; -# endif - -# define U_NAMESPACE_BEGIN extern "C++" { namespace U_ICU_NAMESPACE { -# define U_NAMESPACE_END } } -# define U_NAMESPACE_USE using namespace U_ICU_NAMESPACE; -# define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE:: - -# ifndef U_USING_ICU_NAMESPACE -# if defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || \ - defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) || \ - defined(U_LAYOUTEX_IMPLEMENTATION) || defined(U_TOOLUTIL_IMPLEMENTATION) -# define U_USING_ICU_NAMESPACE 0 -# else -# define U_USING_ICU_NAMESPACE 0 -# endif -# endif -# if U_USING_ICU_NAMESPACE - U_NAMESPACE_USE -# endif -#else -# define U_NAMESPACE_BEGIN -# define U_NAMESPACE_END -# define U_NAMESPACE_USE -# define U_NAMESPACE_QUALIFIER -#endif - -/*===========================================================================*/ -/* General version helper functions. Definitions in putil.c */ -/*===========================================================================*/ - -/** - * Parse a string with dotted-decimal version information and - * fill in a UVersionInfo structure with the result. - * Definition of this function lives in putil.c - * - * @param versionArray The destination structure for the version information. - * @param versionString A string with dotted-decimal version information, - * with up to four non-negative number fields with - * values of up to 255 each. - * @stable ICU 2.4 - */ -U_STABLE void U_EXPORT2 -u_versionFromString(UVersionInfo versionArray, const char *versionString); - -/** - * Parse a Unicode string with dotted-decimal version information and - * fill in a UVersionInfo structure with the result. - * Definition of this function lives in putil.c - * - * @param versionArray The destination structure for the version information. - * @param versionString A Unicode string with dotted-decimal version - * information, with up to four non-negative number - * fields with values of up to 255 each. - * @stable ICU 4.2 - */ -U_STABLE void U_EXPORT2 -u_versionFromUString(UVersionInfo versionArray, const UChar *versionString); - - -/** - * Write a string with dotted-decimal version information according - * to the input UVersionInfo. - * Definition of this function lives in putil.c - * - * @param versionArray The version information to be written as a string. - * @param versionString A string buffer that will be filled in with - * a string corresponding to the numeric version - * information in versionArray. - * The buffer size must be at least U_MAX_VERSION_STRING_LENGTH. - * @stable ICU 2.4 - */ -U_STABLE void U_EXPORT2 -u_versionToString(const UVersionInfo versionArray, char *versionString); - -/** - * Gets the ICU release version. The version array stores the version information - * for ICU. For example, release "1.3.31.2" is then represented as 0x01031F02. - * Definition of this function lives in putil.c - * - * @param versionArray the version # information, the result will be filled in - * @stable ICU 2.0 - */ -U_STABLE void U_EXPORT2 -u_getVersion(UVersionInfo versionArray); -#endif diff --git a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/vtzone.h b/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/vtzone.h deleted file mode 100644 index cf2101d808..0000000000 --- a/bootstrap/x86_64-apple-darwin/usr/local/include/unicode/vtzone.h +++ /dev/null @@ -1,459 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* -******************************************************************************* -* Copyright (C) 2007-2013, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************************* -*/ -#ifndef VTZONE_H -#define VTZONE_H - -#include "unicode/utypes.h" - -/** - * \file - * \brief C++ API: RFC2445 VTIMEZONE support - */ - -#if !UCONFIG_NO_FORMATTING - -#include "unicode/basictz.h" - -#if U_SHOW_CPLUSPLUS_API -U_NAMESPACE_BEGIN - -class VTZWriter; -class VTZReader; -class UVector; - -/** - * VTimeZone is a class implementing RFC2445 VTIMEZONE. You can create a - * VTimeZone instance from a time zone ID supported by TimeZone. - * With the VTimeZone instance created from the ID, you can write out the rule - * in RFC2445 VTIMEZONE format. Also, you can create a VTimeZone instance - * from RFC2445 VTIMEZONE data stream, which allows you to calculate time - * zone offset by the rules defined by the data. Or, you can create a - * VTimeZone from any other ICU BasicTimeZone. - *

- * Note: The consumer of this class reading or writing VTIMEZONE data is responsible to - * decode or encode Non-ASCII text. Methods reading/writing VTIMEZONE data in this class - * do nothing with MIME encoding. - * @stable ICU 3.8 - */ -class U_I18N_API VTimeZone : public BasicTimeZone { -public: - /** - * Copy constructor. - * @param source The VTimeZone object to be copied. - * @stable ICU 3.8 - */ - VTimeZone(const VTimeZone& source); - - /** - * Destructor. - * @stable ICU 3.8 - */ - virtual ~VTimeZone(); - - /** - * Assignment operator. - * @param right The object to be copied. - * @stable ICU 3.8 - */ - VTimeZone& operator=(const VTimeZone& right); - - /** - * Return true if the given TimeZone objects are - * semantically equal. Objects of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given TimeZone objects are - *semantically equal. - * @stable ICU 3.8 - */ - virtual UBool operator==(const TimeZone& that) const; - - /** - * Return true if the given TimeZone objects are - * semantically unequal. Objects of different subclasses are considered unequal. - * @param that The object to be compared with. - * @return true if the given TimeZone objects are - * semantically unequal. - * @stable ICU 3.8 - */ - virtual UBool operator!=(const TimeZone& that) const; - - /** - * Create a VTimeZone instance by the time zone ID. - * @param ID The time zone ID, such as America/New_York - * @return A VTimeZone object initialized by the time zone ID, - * or NULL when the ID is unknown. - * @stable ICU 3.8 - */ - static VTimeZone* createVTimeZoneByID(const UnicodeString& ID); - - /** - * Create a VTimeZone instance using a basic time zone. - * @param basicTZ The basic time zone instance - * @param status Output param to filled in with a success or an error. - * @return A VTimeZone object initialized by the basic time zone. - * @stable ICU 4.6 - */ - static VTimeZone* createVTimeZoneFromBasicTimeZone(const BasicTimeZone& basicTZ, - UErrorCode &status); - - /** - * Create a VTimeZone instance by RFC2445 VTIMEZONE data - * - * @param vtzdata The string including VTIMEZONE data block - * @param status Output param to filled in with a success or an error. - * @return A VTimeZone initialized by the VTIMEZONE data or - * NULL if failed to load the rule from the VTIMEZONE data. - * @stable ICU 3.8 - */ - static VTimeZone* createVTimeZone(const UnicodeString& vtzdata, UErrorCode& status); - - /** - * Gets the RFC2445 TZURL property value. When a VTimeZone instance was - * created from VTIMEZONE data, the initial value is set by the TZURL property value - * in the data. Otherwise, the initial value is not set. - * @param url Receives the RFC2445 TZURL property value. - * @return TRUE if TZURL attribute is available and value is set. - * @stable ICU 3.8 - */ - UBool getTZURL(UnicodeString& url) const; - - /** - * Sets the RFC2445 TZURL property value. - * @param url The TZURL property value. - * @stable ICU 3.8 - */ - void setTZURL(const UnicodeString& url); - - /** - * Gets the RFC2445 LAST-MODIFIED property value. When a VTimeZone instance - * was created from VTIMEZONE data, the initial value is set by the LAST-MODIFIED property - * value in the data. Otherwise, the initial value is not set. - * @param lastModified Receives the last modified date. - * @return TRUE if lastModified attribute is available and value is set. - * @stable ICU 3.8 - */ - UBool getLastModified(UDate& lastModified) const; - - /** - * Sets the RFC2445 LAST-MODIFIED property value. - * @param lastModified The LAST-MODIFIED date. - * @stable ICU 3.8 - */ - void setLastModified(UDate lastModified); - - /** - * Writes RFC2445 VTIMEZONE data for this time zone - * @param result Output param to filled in with the VTIMEZONE data. - * @param status Output param to filled in with a success or an error. - * @stable ICU 3.8 - */ - void write(UnicodeString& result, UErrorCode& status) const; - - /** - * Writes RFC2445 VTIMEZONE data for this time zone applicalbe - * for dates after the specified start time. - * @param start The start date. - * @param result Output param to filled in with the VTIMEZONE data. - * @param status Output param to filled in with a success or an error. - * @stable ICU 3.8 - */ - void write(UDate start, UnicodeString& result, UErrorCode& status) const; - - /** - * Writes RFC2445 VTIMEZONE data applicalbe for the specified date. - * Some common iCalendar implementations can only handle a single time - * zone property or a pair of standard and daylight time properties using - * BYDAY rule with day of week (such as BYDAY=1SUN). This method produce - * the VTIMEZONE data which can be handled these implementations. The rules - * produced by this method can be used only for calculating time zone offset - * around the specified date. - * @param time The date used for rule extraction. - * @param result Output param to filled in with the VTIMEZONE data. - * @param status Output param to filled in with a success or an error. - * @stable ICU 3.8 - */ - void writeSimple(UDate time, UnicodeString& result, UErrorCode& status) const; - - /** - * Clones TimeZone objects polymorphically. Clients are responsible for deleting - * the TimeZone object cloned. - * @return A new copy of this TimeZone object. - * @stable ICU 3.8 - */ - virtual TimeZone* clone(void) const; - - /** - * Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add - * to GMT to get local time in this time zone, taking daylight savings time into - * account) as of a particular reference date. The reference date is used to determine - * whether daylight savings time is in effect and needs to be figured into the offset - * that is returned (in other words, what is the adjusted GMT offset in this time zone - * at this particular date and time?). For the time zones produced by createTimeZone(), - * the reference data is specified according to the Gregorian calendar, and the date - * and time fields are local standard time. - * - *

Note: Don't call this method. Instead, call the getOffset(UDate...) overload, - * which returns both the raw and the DST offset for a given time. This method - * is retained only for backward compatibility. - * - * @param era The reference date's era - * @param year The reference date's year - * @param month The reference date's month (0-based; 0 is January) - * @param day The reference date's day-in-month (1-based) - * @param dayOfWeek The reference date's day-of-week (1-based; 1 is Sunday) - * @param millis The reference date's milliseconds in day, local standard time - * @param status Output param to filled in with a success or an error. - * @return The offset in milliseconds to add to GMT to get local time. - * @stable ICU 3.8 - */ - virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, - uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const; - - /** - * Gets the time zone offset, for current date, modified in case of - * daylight savings. This is the offset to add *to* UTC to get local time. - * - *

Note: Don't call this method. Instead, call the getOffset(UDate...) overload, - * which returns both the raw and the DST offset for a given time. This method - * is retained only for backward compatibility. - * - * @param era The reference date's era - * @param year The reference date's year - * @param month The reference date's month (0-based; 0 is January) - * @param day The reference date's day-in-month (1-based) - * @param dayOfWeek The reference date's day-of-week (1-based; 1 is Sunday) - * @param millis The reference date's milliseconds in day, local standard time - * @param monthLength The length of the given month in days. - * @param status Output param to filled in with a success or an error. - * @return The offset in milliseconds to add to GMT to get local time. - * @stable ICU 3.8 - */ - virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, - uint8_t dayOfWeek, int32_t millis, - int32_t monthLength, UErrorCode& status) const; - - /** - * Returns the time zone raw and GMT offset for the given moment - * in time. Upon return, local-millis = GMT-millis + rawOffset + - * dstOffset. All computations are performed in the proleptic - * Gregorian calendar. The default implementation in the TimeZone - * class delegates to the 8-argument getOffset(). - * - * @param date moment in time for which to return offsets, in - * units of milliseconds from January 1, 1970 0:00 GMT, either GMT - * time or local wall time, depending on `local'. - * @param local if true, `date' is local wall time; otherwise it - * is in GMT time. - * @param rawOffset output parameter to receive the raw offset, that - * is, the offset not including DST adjustments - * @param dstOffset output parameter to receive the DST offset, - * that is, the offset to be added to `rawOffset' to obtain the - * total offset between local and GMT time. If DST is not in - * effect, this value is zero; otherwise it is a positive value, - * typically one hour. - * @param ec input-output error code - * @stable ICU 3.8 - */ - virtual void getOffset(UDate date, UBool local, int32_t& rawOffset, - int32_t& dstOffset, UErrorCode& ec) const; - - /** - * Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add - * to GMT to get local time, before taking daylight savings time into account). - * - * @param offsetMillis The new raw GMT offset for this time zone. - * @stable ICU 3.8 - */ - virtual void setRawOffset(int32_t offsetMillis); - - /** - * Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add - * to GMT to get local time, before taking daylight savings time into account). - * - * @return The TimeZone's raw GMT offset. - * @stable ICU 3.8 - */ - virtual int32_t getRawOffset(void) const; - - /** - * Queries if this time zone uses daylight savings time. - * @return true if this time zone uses daylight savings time, - * false, otherwise. - * @stable ICU 3.8 - */ - virtual UBool useDaylightTime(void) const; - - /** - * Queries if the given date is in daylight savings time in - * this time zone. - * This method is wasteful since it creates a new GregorianCalendar and - * deletes it each time it is called. This is a deprecated method - * and provided only for Java compatibility. - * - * @param date the given UDate. - * @param status Output param filled in with success/error code. - * @return true if the given date is in daylight savings time, - * false, otherwise. - * @deprecated ICU 2.4. Use Calendar::inDaylightTime() instead. - */ - virtual UBool inDaylightTime(UDate date, UErrorCode& status) const; - - /** - * Returns true if this zone has the same rule and offset as another zone. - * That is, if this zone differs only in ID, if at all. - * @param other the TimeZone object to be compared with - * @return true if the given zone is the same as this one, - * with the possible exception of the ID - * @stable ICU 3.8 - */ - virtual UBool hasSameRules(const TimeZone& other) const; - - /** - * Gets the first time zone transition after the base time. - * @param base The base time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives the first transition after the base time. - * @return TRUE if the transition is found. - * @stable ICU 3.8 - */ - virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; - - /** - * Gets the most recent time zone transition before the base time. - * @param base The base time. - * @param inclusive Whether the base time is inclusive or not. - * @param result Receives the most recent transition before the base time. - * @return TRUE if the transition is found. - * @stable ICU 3.8 - */ - virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const; - - /** - * Returns the number of TimeZoneRules which represents time transitions, - * for this time zone, that is, all TimeZoneRules for this time zone except - * InitialTimeZoneRule. The return value range is 0 or any positive value. - * @param status Receives error status code. - * @return The number of TimeZoneRules representing time transitions. - * @stable ICU 3.8 - */ - virtual int32_t countTransitionRules(UErrorCode& status) const; - - /** - * Gets the InitialTimeZoneRule and the set of TimeZoneRule - * which represent time transitions for this time zone. On successful return, - * the argument initial points to non-NULL InitialTimeZoneRule and - * the array trsrules is filled with 0 or multiple TimeZoneRule - * instances up to the size specified by trscount. The results are referencing the - * rule instance held by this time zone instance. Therefore, after this time zone - * is destructed, they are no longer available. - * @param initial Receives the initial timezone rule - * @param trsrules Receives the timezone transition rules - * @param trscount On input, specify the size of the array 'transitions' receiving - * the timezone transition rules. On output, actual number of - * rules filled in the array will be set. - * @param status Receives error status code. - * @stable ICU 3.8 - */ - virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial, - const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const; - -private: - enum { DEFAULT_VTIMEZONE_LINES = 100 }; - - /** - * Default constructor. - */ - VTimeZone(); - static VTimeZone* createVTimeZone(VTZReader* reader); - void write(VTZWriter& writer, UErrorCode& status) const; - void write(UDate start, VTZWriter& writer, UErrorCode& status) const; - void writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const; - void load(VTZReader& reader, UErrorCode& status); - void parse(UErrorCode& status); - - void writeZone(VTZWriter& w, BasicTimeZone& basictz, UVector* customProps, - UErrorCode& status) const; - - void writeHeaders(VTZWriter& w, UErrorCode& status) const; - void writeFooter(VTZWriter& writer, UErrorCode& status) const; - - void writeZonePropsByTime(VTZWriter& writer, UBool isDst, const UnicodeString& zonename, - int32_t fromOffset, int32_t toOffset, UDate time, UBool withRDATE, - UErrorCode& status) const; - void writeZonePropsByDOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename, - int32_t fromOffset, int32_t toOffset, - int32_t month, int32_t dayOfMonth, UDate startTime, UDate untilTime, - UErrorCode& status) const; - void writeZonePropsByDOW(VTZWriter& writer, UBool isDst, const UnicodeString& zonename, - int32_t fromOffset, int32_t toOffset, - int32_t month, int32_t weekInMonth, int32_t dayOfWeek, - UDate startTime, UDate untilTime, UErrorCode& status) const; - void writeZonePropsByDOW_GEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename, - int32_t fromOffset, int32_t toOffset, - int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, - UDate startTime, UDate untilTime, UErrorCode& status) const; - void writeZonePropsByDOW_GEQ_DOM_sub(VTZWriter& writer, int32_t month, int32_t dayOfMonth, - int32_t dayOfWeek, int32_t numDays, - UDate untilTime, int32_t fromOffset, UErrorCode& status) const; - void writeZonePropsByDOW_LEQ_DOM(VTZWriter& writer, UBool isDst, const UnicodeString& zonename, - int32_t fromOffset, int32_t toOffset, - int32_t month, int32_t dayOfMonth, int32_t dayOfWeek, - UDate startTime, UDate untilTime, UErrorCode& status) const; - void writeFinalRule(VTZWriter& writer, UBool isDst, const AnnualTimeZoneRule* rule, - int32_t fromRawOffset, int32_t fromDSTSavings, - UDate startTime, UErrorCode& status) const; - - void beginZoneProps(VTZWriter& writer, UBool isDst, const UnicodeString& zonename, - int32_t fromOffset, int32_t toOffset, UDate startTime, UErrorCode& status) const; - void endZoneProps(VTZWriter& writer, UBool isDst, UErrorCode& status) const; - void beginRRULE(VTZWriter& writer, int32_t month, UErrorCode& status) const; - void appendUNTIL(VTZWriter& writer, const UnicodeString& until, UErrorCode& status) const; - - BasicTimeZone *tz; - UVector *vtzlines; - UnicodeString tzurl; - UDate lastmod; - UnicodeString olsonzid; - UnicodeString icutzver; - -public: - /** - * Return the class ID for this class. This is useful only for comparing to - * a return value from getDynamicClassID(). For example: - *

-     * .   Base* polymorphic_pointer = createPolymorphicObject();
-     * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
-     * 
- * @return The class ID for all objects of this class. - * @stable ICU 3.8 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This - * method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() - * methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 3.8 - */ - virtual UClassID getDynamicClassID(void) const; -}; - -U_NAMESPACE_END -#endif // U_SHOW_CPLUSPLUS_API - -#endif /* #if !UCONFIG_NO_FORMATTING */ - -#endif // VTZONE_H -//eof diff --git a/build-android b/build-android deleted file mode 100755 index 15d21f7c67..0000000000 --- a/build-android +++ /dev/null @@ -1,141 +0,0 @@ -#!/usr/bin/env bash -# -# build-android -# -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See https://swift.org/LICENSE.txt for license information -# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors - -set -e - -SWIFT_PATH="$( cd "$(dirname $0)/.." && pwd )" - -ANDROID_NDK_PATH="${ANDROID_NDK_PATH:?Please set the Android NDK path in the ANDROID_NDK_PATH environment variable}" -ANDROID_ICU_PATH=${SWIFT_PATH}/libiconv-libicu-android - -SWIFT_ANDROID_TOOLCHAIN_PATH="${SWIFT_PATH}/swift-android-toolchain" -SWIFT_ANDROID_BUILD_PATH="${SWIFT_PATH}/build/Ninja-ReleaseAssert" - -cd ${SWIFT_PATH}/swift-corelibs-foundation - -mkdir -p .build -cd .build - -ANDROID_STANDALONE_TOOLCHAIN=`realpath ./android-standalone-toolchain` -ANDROID_STANDALONE_SYSROOT=$ANDROID_STANDALONE_TOOLCHAIN/sysroot - -if [ ! -d android-standalone-toolchain ]; then - echo Creating Android standalone toolchain ... - $ANDROID_NDK_PATH/build/tools/make_standalone_toolchain.py --api 21 --arch arm --stl libc++ --install-dir $ANDROID_STANDALONE_TOOLCHAIN --force -v -fi - -export PATH=$ANDROID_STANDALONE_TOOLCHAIN/bin:$PATH -export CC=$ANDROID_STANDALONE_TOOLCHAIN/bin/arm-linux-androideabi-clang -export CXX=$ANDROID_STANDALONE_TOOLCHAIN/bin/arm-linux-androideabi-clang++ -export AR=$ANDROID_STANDALONE_TOOLCHAIN/bin/arm-linux-androideabi-ar -export AS=$ANDROID_STANDALONE_TOOLCHAIN/bin/arm-linux-androideabi-as -export LD=$ANDROID_STANDALONE_TOOLCHAIN/bin/arm-linux-androideabi-ld -export RANLIB=$ANDROID_STANDALONE_TOOLCHAIN/bin/arm-linux-androideabi-ranlib -export NM=$ANDROID_STANDALONE_TOOLCHAIN/bin/arm-linux-androideabi-nm -export STRIP=$ANDROID_STANDALONE_TOOLCHAIN/bin/arm-linux-androideabi-strip -export CHOST=arm-linux-androideabi -export ARCH_FLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" -export ARCH_LINK="-march=armv7-a -Wl,--fix-cortex-a8" -export CPPFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing " -export CXXFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -frtti -fexceptions -std=c++11 -Wno-error=unused-command-line-argument " -export CFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing " -export LDFLAGS=" ${ARCH_LINK} " - -if [ ! -d curl ]; then - git clone https://github.com/curl/curl.git -fi -if [ ! -f $ANDROID_STANDALONE_SYSROOT/usr/lib/libcurl.so ]; then - pushd curl - autoreconf -i - ./configure --host=arm-linux-androideabi --enable-shared --disable-static --disable-dependency-tracking --with-zlib=$ANDROID_STANDALONE_SYSROOT/usr --with-ssl=$ANDROID_STANDALONE_SYSROOT/usr --without-ca-bundle --without-ca-path --enable-ipv6 --enable-http --enable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-proxy --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smtp --disable-gopher --disable-sspi --disable-manual --target=arm-linux-androideabi --build=x86_64-unknown-linux-gnu --prefix=$ANDROID_STANDALONE_SYSROOT/usr - make - make install - popd -fi -if [ ! -d libxml2 ]; then - git clone git://git.gnome.org/libxml2 -fi -if [ ! -f $ANDROID_STANDALONE_SYSROOT/usr/lib/libxml2.so ]; then - pushd libxml2 - autoreconf -i - ./configure --with-sysroot=$ANDROID_STANDALONE_SYSROOT --with-zlib=$ANDROID_STANDALONE_SYSROOT/usr --prefix=$ANDROID_STANDALONE_SYSROOT/usr --host=$CHOST --without-lzma --disable-static --enable-shared --without-http --without-html --without-ftp - make libxml2.la - make install-libLTLIBRARIES - pushd include - make install - popd - popd -fi -if [ ! -f libFoundation.so ]; then - pushd $ANDROID_STANDALONE_SYSROOT - - # Move dispatch public and private headers to the directory foundation is expecting to get it - mkdir -p $ANDROID_STANDALONE_SYSROOT/usr/include/dispatch - cp $SWIFT_PATH/swift-corelibs-libdispatch/dispatch/*.h $ANDROID_STANDALONE_SYSROOT/usr/include/dispatch - cp $SWIFT_PATH/swift-corelibs-libdispatch/private/*.h $ANDROID_STANDALONE_SYSROOT/usr/include/dispatch - - pushd $SWIFT_PATH - pushd swift-corelibs-foundation - # Libfoundation script is not completely prepared to handle cross compilation yet. - ln -sf $SWIFT_ANDROID_BUILD_PATH/swift-linux-x86_64/lib/swift $ANDROID_STANDALONE_SYSROOT/usr/lib/ - cp $SWIFT_ANDROID_BUILD_PATH/swift-linux-x86_64/lib/swift/android/armv7/* $SWIFT_ANDROID_BUILD_PATH/swift-linux-x86_64/lib/swift/android/ - - # Search path for curl seems to be wrong in foundation - #cp -r .build/openssl-1.0.2l/ssl $ANDROID_STANDALONE_SYSROOT/usr/include - cp -r .build/curl/include/curl $ANDROID_STANDALONE_SYSROOT/usr/include - if [ ! -e $ANDROID_STANDALONE_SYSROOT/usr/include/curl/curl ]; then - ln -s $ANDROID_STANDALONE_SYSROOT/usr/include/curl $ANDROID_STANDALONE_SYSROOT/usr/include/curl/curl - fi - if [ ! -e $ANDROID_STANDALONE_SYSROOT/usr/include/libxml ]; then - ln -s $ANDROID_STANDALONE_SYSROOT/usr/include/libxml2/libxml $ANDROID_STANDALONE_SYSROOT/usr/include/libxml - fi - - env \ - SWIFTC="$SWIFT_ANDROID_BUILD_PATH/swift-linux-x86_64/bin/swiftc" \ - CLANG="$SWIFT_ANDROID_BUILD_PATH/llvm-linux-x86_64/bin/clang" \ - SWIFT="$SWIFT_ANDROID_BUILD_PATH/swift-linux-x86_64/bin/swift" \ - SDKROOT="$SWIFT_ANDROID_BUILD_PATH/swift-linux-x86_64" \ - BUILD_DIR="$SWIFT_ANDROID_BUILD_PATH/foundation-linux-x86_64" \ - DSTROOT="/" \ - PREFIX="/usr" \ - CFLAGS="-DDEPLOYMENT_ENABLE_LIBDISPATCH --sysroot=$ANDROID_NDK_PATH/platforms/android-21/arch-arm -I$ANDROID_ICU_PATH/armeabi-v7a/include -I${SDKROOT}/lib/swift -I$ANDROID_NDK_PATH/sources/android/support/include -I$ANDROID_STANDALONE_SYSROOT/usr/include -I$SWIFT_PATH/swift-corelibs-foundation/closure" \ - SWIFTCFLAGS="-DDEPLOYMENT_ENABLE_LIBDISPATCH -I$ANDROID_NDK_PATH/platforms/android-21/arch-arm/usr/include" \ - LDFLAGS="-fuse-ld=gold --sysroot=$ANDROID_NDK_PATH/platforms/android-21/arch-arm -L$ANDROID_NDK_PATH/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x -L$ANDROID_ICU_PATH/armeabi-v7a -L$ANDROID_STANDALONE_SYSROOT/usr/lib -ldispatch " \ - ./configure \ - Release \ - --target=armv7-none-linux-androideabi \ - --sysroot=$ANDROID_STANDALONE_SYSROOT \ - -DXCTEST_BUILD_DIR=$SWIFT_ANDROID_BUILD_PATH/xctest-linux-x86_64 \ - -DLIBDISPATCH_SOURCE_DIR=$SWIFT_PATH/swift-corelibs-libdispatch \ - -DLIBDISPATCH_BUILD_DIR=$SWIFT_PATH/swift-corelibs-libdispatch && - - cp -r /usr/include/uuid $ANDROID_STANDALONE_SYSROOT/usr/include - sed -i~ "s/-I.\/ -I\/usr\/include\/x86_64-linux-gnu -I\/usr\/include\/x86_64-linux-gnu -I\/usr\/include\/libxml2//" build.ninja - sed -i~ "s/-licui18n/-licui18nswift/g" build.ninja - sed -i~ "s/-licuuc/-licuucswift/g" build.ninja - sed -i~ "s/-licudata/-licudataswift/g" build.ninja - - ninja - - # There's no installation script for foundation yet, so the installation needs to be done manually. - # Apparently the installation for the main script is in swift repo. - rsync -av $SWIFT_ANDROID_BUILD_PATH/foundation-linux-x86_64/Foundation/Foundation.swift* $SWIFT_ANDROID_TOOLCHAIN_PATH/usr/lib/swift/android/armv7/ - rsync -av $ANDROID_STANDALONE_SYSROOT/usr/lib/libxml2.* $ANDROID_STANDALONE_SYSROOT/usr/lib/libcurl.* $ANDROID_ICU_PATH/armeabi-v7a/libicu{uc,i18n,data}swift.so $ANDROID_NDK_PATH/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so $SWIFT_ANDROID_BUILD_PATH/foundation-linux-x86_64/Foundation/libFoundation.so $SWIFT_ANDROID_TOOLCHAIN_PATH/usr/lib/swift/android - - # prep install so it can be used to build foundation - cp -r $SWIFT_PATH/swift-corelibs-foundation/.build/libxml2/include/libxml $SWIFT_ANDROID_TOOLCHAIN_PATH/usr/lib/swift - cp -r $SWIFT_PATH/swift-corelibs-foundation/.build/curl/include/curl $SWIFT_ANDROID_TOOLCHAIN_PATH/usr/lib/swift - popd - popd - popd -fi - diff --git a/build.py b/build.py deleted file mode 100755 index db42bc763c..0000000000 --- a/build.py +++ /dev/null @@ -1,601 +0,0 @@ -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -# - -script = Script() - -foundation = StaticAndDynamicLibrary("Foundation") - -foundation.GCC_PREFIX_HEADER = 'CoreFoundation/Base.subproj/CoreFoundation_Prefix.h' - -swift_cflags = ['-DDEPLOYMENT_RUNTIME_SWIFT'] -if Configuration.current.target.sdk == OSType.Linux: - foundation.CFLAGS = '-D_GNU_SOURCE -DCF_CHARACTERSET_DATA_DIR="CoreFoundation/CharacterSets"' - foundation.LDFLAGS = '${SWIFT_USE_LINKER} -lswiftGlibc -Wl,-Bsymbolic ' - Configuration.current.requires_pkg_config = True -elif Configuration.current.target.sdk == OSType.FreeBSD: - foundation.CFLAGS = '-I/usr/local/include -I/usr/local/include/libxml2 -I/usr/local/include/curl ' - foundation.LDFLAGS = '' -elif Configuration.current.target.sdk == OSType.MacOSX: - foundation.LDFLAGS = '-licucore -twolevel_namespace -Wl,-alias_list,CoreFoundation/Base.subproj/DarwinSymbolAliases -sectcreate __UNICODE __csbitmaps CoreFoundation/CharacterSets/CFCharacterSetBitmaps.bitmap -sectcreate __UNICODE __properties CoreFoundation/CharacterSets/CFUniCharPropertyDatabase.data -sectcreate __UNICODE __data CoreFoundation/CharacterSets/CFUnicodeData-L.mapping -segprot __UNICODE r r ' -elif Configuration.current.target.sdk == OSType.Win32 and Configuration.current.target.environ == EnvironmentType.Cygnus: - foundation.CFLAGS = '-D_GNU_SOURCE -mcmodel=large ' - foundation.LDFLAGS = '${SWIFT_USE_LINKER} -lswiftGlibc `icu-config --ldflags` -Wl,--allow-multiple-definition ' - swift_cflags += ['-DCYGWIN'] - -if Configuration.current.build_mode == Configuration.Debug: - foundation.LDFLAGS += ' -lswiftSwiftOnoneSupport ' - swift_cflags += ['-enable-testing'] - -foundation.ASFLAGS = " ".join([ - '-DCF_CHARACTERSET_BITMAP=\\"CoreFoundation/CharacterSets/CFCharacterSetBitmaps.bitmap\\"', - '-DCF_CHARACTERSET_UNICHAR_DB=\\"CoreFoundation/CharacterSets/CFUniCharPropertyDatabase.data\\"', - '-DCF_CHARACTERSET_UNICODE_DATA_B=\\"CoreFoundation/CharacterSets/CFUnicodeData-B.mapping\\"', - '-DCF_CHARACTERSET_UNICODE_DATA_L=\\"CoreFoundation/CharacterSets/CFUnicodeData-L.mapping\\"', -]) - -# For now, we do not distinguish between public and private headers (they are all private to Foundation) -# These are really part of CF, which should ultimately be a separate target -foundation.ROOT_HEADERS_FOLDER_PATH = "${PREFIX}/lib/swift" -foundation.PUBLIC_HEADERS_FOLDER_PATH = "${PREFIX}/lib/swift/CoreFoundation" -foundation.PRIVATE_HEADERS_FOLDER_PATH = "${PREFIX}/lib/swift/CoreFoundation" -foundation.PROJECT_HEADERS_FOLDER_PATH = "${PREFIX}/lib/swift/CoreFoundation" - -foundation.PUBLIC_MODULE_FOLDER_PATH = "${PREFIX}/lib/swift/CoreFoundation" - -foundation.CFLAGS += " ".join([ - '-DU_SHOW_DRAFT_API', - '-DCF_BUILDING_CF', - '-DDEPLOYMENT_RUNTIME_SWIFT', - '-fconstant-cfstrings', - '-fexceptions', - '-Wno-shorten-64-to-32', - '-Wno-deprecated-declarations', - '-Wno-unreachable-code', - '-Wno-conditional-uninitialized', - '-Wno-unused-variable', - '-Wno-int-conversion', - '-Wno-unused-function', - '-I./', - '-fno-common', - '-fcf-runtime-abi=swift', -]) - -swift_cflags += [ - '-I${BUILD_DIR}/Foundation/${PREFIX}/lib/swift', -] - -if "XCTEST_BUILD_DIR" in Configuration.current.variables: - swift_cflags += [ - '-I${XCTEST_BUILD_DIR}', - '-L${XCTEST_BUILD_DIR}', - ] - -if Configuration.current.requires_pkg_config: - pkg_config_dependencies = [ - 'icu-i18n', - 'icu-uc', - 'libcurl', - 'libxml-2.0', - ] - for package_name in pkg_config_dependencies: - try: - package = PkgConfig(package_name) - except PkgConfig.Error as e: - sys.exit("pkg-config error for package {}: {}".format(package_name, e)) - foundation.CFLAGS += ' {} '.format(' '.join(package.cflags)) - foundation.LDFLAGS += ' {} '.format(' '.join(package.ldflags)) - swift_cflags += package.swiftc_flags -else: - foundation.CFLAGS += ''.join([ - '-I${SYSROOT}/usr/include/curl ', - '-I${SYSROOT}/usr/include/libxml2 ', - ]) - foundation.LDFLAGS += ''.join([ - '-lcurl ', - '-lxml2 ', - ]) - swift_cflags += [ - '-I${SYSROOT}/usr/include/curl', - '-I${SYSROOT}/usr/include/libxml2', - ] - -triple = Configuration.current.target.triple -if triple == "armv7-none-linux-androideabi": - foundation.LDFLAGS += '-llog ' -else: - foundation.LDFLAGS += '-lpthread ' - -foundation.LDFLAGS += '-ldl -lm -lswiftCore ' - -# Configure use of Dispatch in CoreFoundation and Foundation if libdispatch is being built -if "LIBDISPATCH_SOURCE_DIR" in Configuration.current.variables: - foundation.CFLAGS += " "+" ".join([ - '-DDEPLOYMENT_ENABLE_LIBDISPATCH', - '-I'+Configuration.current.variables["LIBDISPATCH_SOURCE_DIR"], - '-I' + os.path.join(Configuration.current.variables["LIBDISPATCH_SOURCE_DIR"], 'src', 'BlocksRuntime'), - '-I'+Configuration.current.variables["LIBDISPATCH_BUILD_DIR"]+'/tests' # for include of dispatch/private.h in CF - ]) - swift_cflags += ([ - '-DDEPLOYMENT_ENABLE_LIBDISPATCH', - '-I'+Configuration.current.variables["LIBDISPATCH_SOURCE_DIR"], - '-I'+Configuration.current.variables["LIBDISPATCH_BUILD_DIR"]+'/src/swift', - '-Xcc -fblocks' - ]) - foundation.LDFLAGS += '-ldispatch -lswiftDispatch -L'+Configuration.current.variables["LIBDISPATCH_BUILD_DIR"]+'/src -rpath \$$ORIGIN ' - foundation.LDFLAGS += '-L' + Configuration.current.variables['LIBDISPATCH_BUILD_DIR'] + ' -lBlocksRuntime ' - -foundation.SWIFTCFLAGS = " ".join(swift_cflags) - -if "XCTEST_BUILD_DIR" in Configuration.current.variables: - foundation.LDFLAGS += '-L${XCTEST_BUILD_DIR}' - -headers = CopyHeaders( -module = 'CoreFoundation/Base.subproj/module.modulemap', -public = [ - 'CoreFoundation/Stream.subproj/CFStream.h', - 'CoreFoundation/String.subproj/CFStringEncodingExt.h', - 'CoreFoundation/Base.subproj/SwiftRuntime/CoreFoundation.h', - 'CoreFoundation/Base.subproj/SwiftRuntime/TargetConditionals.h', - 'CoreFoundation/RunLoop.subproj/CFMessagePort.h', - 'CoreFoundation/Collections.subproj/CFBinaryHeap.h', - 'CoreFoundation/PlugIn.subproj/CFBundle.h', - 'CoreFoundation/Locale.subproj/CFCalendar.h', - 'CoreFoundation/Collections.subproj/CFBitVector.h', - 'CoreFoundation/Base.subproj/CFAvailability.h', - 'CoreFoundation/Collections.subproj/CFTree.h', - 'CoreFoundation/NumberDate.subproj/CFTimeZone.h', - 'CoreFoundation/Error.subproj/CFError.h', - 'CoreFoundation/Collections.subproj/CFBag.h', - 'CoreFoundation/PlugIn.subproj/CFPlugIn.h', - 'CoreFoundation/Parsing.subproj/CFXMLParser.h', - 'CoreFoundation/String.subproj/CFString.h', - 'CoreFoundation/Collections.subproj/CFSet.h', - 'CoreFoundation/Base.subproj/CFUUID.h', - 'CoreFoundation/NumberDate.subproj/CFDate.h', - 'CoreFoundation/Collections.subproj/CFDictionary.h', - 'CoreFoundation/Base.subproj/CFByteOrder.h', - 'CoreFoundation/AppServices.subproj/CFUserNotification.h', - 'CoreFoundation/Base.subproj/CFBase.h', - 'CoreFoundation/Preferences.subproj/CFPreferences.h', - 'CoreFoundation/Locale.subproj/CFLocale.h', - 'CoreFoundation/RunLoop.subproj/CFSocket.h', - 'CoreFoundation/Parsing.subproj/CFPropertyList.h', - 'CoreFoundation/Collections.subproj/CFArray.h', - 'CoreFoundation/RunLoop.subproj/CFRunLoop.h', - 'CoreFoundation/URL.subproj/CFURLAccess.h', - 'CoreFoundation/URL.subproj/CFURLSessionInterface.h', - 'CoreFoundation/Locale.subproj/CFDateFormatter.h', - 'CoreFoundation/RunLoop.subproj/CFMachPort.h', - 'CoreFoundation/PlugIn.subproj/CFPlugInCOM.h', - 'CoreFoundation/Base.subproj/CFUtilities.h', - 'CoreFoundation/Parsing.subproj/CFXMLNode.h', - 'CoreFoundation/URL.subproj/CFURLComponents.h', - 'CoreFoundation/URL.subproj/CFURL.h', - 'CoreFoundation/Locale.subproj/CFNumberFormatter.h', - 'CoreFoundation/String.subproj/CFCharacterSet.h', - 'CoreFoundation/NumberDate.subproj/CFNumber.h', - 'CoreFoundation/Collections.subproj/CFData.h', - 'CoreFoundation/String.subproj/CFAttributedString.h', - 'CoreFoundation/Base.subproj/CoreFoundation_Prefix.h', - 'CoreFoundation/AppServices.subproj/CFNotificationCenter.h' -], -private = [ - 'CoreFoundation/Base.subproj/ForSwiftFoundationOnly.h', - 'CoreFoundation/Base.subproj/ForFoundationOnly.h', - 'CoreFoundation/Base.subproj/CFAsmMacros.h', - 'CoreFoundation/String.subproj/CFBurstTrie.h', - 'CoreFoundation/Error.subproj/CFError_Private.h', - 'CoreFoundation/URL.subproj/CFURLPriv.h', - 'CoreFoundation/Base.subproj/CFLogUtilities.h', - 'CoreFoundation/PlugIn.subproj/CFBundlePriv.h', - 'CoreFoundation/StringEncodings.subproj/CFStringEncodingConverter.h', - 'CoreFoundation/Stream.subproj/CFStreamAbstract.h', - 'CoreFoundation/Base.subproj/CFInternal.h', - 'CoreFoundation/Parsing.subproj/CFXMLInputStream.h', - 'CoreFoundation/Parsing.subproj/CFXMLInterface.h', - 'CoreFoundation/PlugIn.subproj/CFPlugIn_Factory.h', - 'CoreFoundation/String.subproj/CFStringLocalizedFormattingInternal.h', - 'CoreFoundation/PlugIn.subproj/CFBundle_Internal.h', - 'CoreFoundation/StringEncodings.subproj/CFStringEncodingConverterPriv.h', - 'CoreFoundation/Collections.subproj/CFBasicHash.h', - 'CoreFoundation/StringEncodings.subproj/CFStringEncodingDatabase.h', - 'CoreFoundation/StringEncodings.subproj/CFUnicodeDecomposition.h', - 'CoreFoundation/Stream.subproj/CFStreamInternal.h', - 'CoreFoundation/PlugIn.subproj/CFBundle_BinaryTypes.h', - 'CoreFoundation/Locale.subproj/CFICULogging.h', - 'CoreFoundation/Locale.subproj/CFLocaleInternal.h', - 'CoreFoundation/StringEncodings.subproj/CFUnicodePrecomposition.h', - 'CoreFoundation/Base.subproj/CFPriv.h', - 'CoreFoundation/StringEncodings.subproj/CFUniCharPriv.h', - 'CoreFoundation/URL.subproj/CFURL.inc.h', - 'CoreFoundation/NumberDate.subproj/CFBigNumber.h', - 'CoreFoundation/StringEncodings.subproj/CFUniChar.h', - 'CoreFoundation/StringEncodings.subproj/CFStringEncodingConverterExt.h', - 'CoreFoundation/Collections.subproj/CFStorage.h', - 'CoreFoundation/Base.subproj/CFRuntime.h', - 'CoreFoundation/String.subproj/CFStringDefaultEncoding.h', - 'CoreFoundation/String.subproj/CFCharacterSetPriv.h', - 'CoreFoundation/Stream.subproj/CFStreamPriv.h', - 'CoreFoundation/StringEncodings.subproj/CFICUConverters.h', - 'CoreFoundation/String.subproj/CFRegularExpression.h', - 'CoreFoundation/String.subproj/CFRunArray.h', - 'CoreFoundation/Locale.subproj/CFDateFormatter_Private.h', - 'CoreFoundation/Locale.subproj/CFLocale_Private.h', - 'CoreFoundation/Parsing.subproj/CFPropertyList_Private.h', - 'CoreFoundation/Base.subproj/CFKnownLocations.h', - 'CoreFoundation/Base.subproj/CFOverflow.h', - 'CoreFoundation/Base.subproj/CFRuntime_Internal.h', - 'CoreFoundation/Collections.subproj/CFCollections_Internal.h', - 'CoreFoundation/RunLoop.subproj/CFMachPort_Internal.h', - 'CoreFoundation/RunLoop.subproj/CFMachPort_Lifetime.h', - 'CoreFoundation/String.subproj/CFAttributedStringPriv.h', - 'CoreFoundation/String.subproj/CFString_Internal.h', -], -project = [ -]) - -foundation.add_phase(headers) - -sources = CompileSources([ - 'uuid/uuid.c', - # 'CoreFoundation/AppServices.subproj/CFUserNotification.c', - 'CoreFoundation/Base.subproj/CFBase.c', - 'CoreFoundation/Base.subproj/CFFileUtilities.c', - 'CoreFoundation/Base.subproj/CFPlatform.c', - 'CoreFoundation/Base.subproj/CFRuntime.c', - 'CoreFoundation/Base.subproj/CFSortFunctions.c', - 'CoreFoundation/Base.subproj/CFSystemDirectories.c', - 'CoreFoundation/Base.subproj/CFUtilities.c', - 'CoreFoundation/Base.subproj/CFUUID.c', - 'CoreFoundation/Collections.subproj/CFArray.c', - 'CoreFoundation/Collections.subproj/CFBag.c', - 'CoreFoundation/Collections.subproj/CFBasicHash.c', - 'CoreFoundation/Collections.subproj/CFBinaryHeap.c', - 'CoreFoundation/Collections.subproj/CFBitVector.c', - 'CoreFoundation/Collections.subproj/CFData.c', - 'CoreFoundation/Collections.subproj/CFDictionary.c', - 'CoreFoundation/Collections.subproj/CFSet.c', - 'CoreFoundation/Collections.subproj/CFStorage.c', - 'CoreFoundation/Collections.subproj/CFTree.c', - 'CoreFoundation/Error.subproj/CFError.c', - 'CoreFoundation/Locale.subproj/CFCalendar.c', - 'CoreFoundation/Locale.subproj/CFDateFormatter.c', - 'CoreFoundation/Locale.subproj/CFLocale.c', - 'CoreFoundation/Locale.subproj/CFLocaleIdentifier.c', - 'CoreFoundation/Locale.subproj/CFLocaleKeys.c', - 'CoreFoundation/Locale.subproj/CFNumberFormatter.c', - 'CoreFoundation/NumberDate.subproj/CFBigNumber.c', - 'CoreFoundation/NumberDate.subproj/CFDate.c', - 'CoreFoundation/NumberDate.subproj/CFNumber.c', - 'CoreFoundation/NumberDate.subproj/CFTimeZone.c', - 'CoreFoundation/Parsing.subproj/CFBinaryPList.c', - 'CoreFoundation/Parsing.subproj/CFOldStylePList.c', - 'CoreFoundation/Parsing.subproj/CFPropertyList.c', - 'CoreFoundation/Parsing.subproj/CFXMLInputStream.c', - 'CoreFoundation/Parsing.subproj/CFXMLNode.c', - 'CoreFoundation/Parsing.subproj/CFXMLParser.c', - 'CoreFoundation/Parsing.subproj/CFXMLTree.c', - 'CoreFoundation/Parsing.subproj/CFXMLInterface.c', - 'CoreFoundation/PlugIn.subproj/CFBundle.c', - 'CoreFoundation/PlugIn.subproj/CFBundle_Binary.c', - 'CoreFoundation/PlugIn.subproj/CFBundle_Grok.c', - 'CoreFoundation/PlugIn.subproj/CFBundle_InfoPlist.c', - 'CoreFoundation/PlugIn.subproj/CFBundle_Locale.c', - 'CoreFoundation/PlugIn.subproj/CFBundle_Resources.c', - 'CoreFoundation/PlugIn.subproj/CFBundle_Strings.c', - 'CoreFoundation/PlugIn.subproj/CFBundle_Main.c', - 'CoreFoundation/PlugIn.subproj/CFBundle_ResourceFork.c', - 'CoreFoundation/PlugIn.subproj/CFBundle_Executable.c', - 'CoreFoundation/PlugIn.subproj/CFBundle_DebugStrings.c', - 'CoreFoundation/PlugIn.subproj/CFPlugIn.c', - 'CoreFoundation/PlugIn.subproj/CFPlugIn_Factory.c', - 'CoreFoundation/PlugIn.subproj/CFPlugIn_Instance.c', - 'CoreFoundation/PlugIn.subproj/CFPlugIn_PlugIn.c', - 'CoreFoundation/Preferences.subproj/CFApplicationPreferences.c', - 'CoreFoundation/Preferences.subproj/CFPreferences.c', - 'CoreFoundation/Preferences.subproj/CFXMLPreferencesDomain.c', - # 'CoreFoundation/RunLoop.subproj/CFMachPort.c', - # 'CoreFoundation/RunLoop.subproj/CFMessagePort.c', - # 'CoreFoundation/RunLoop.subproj/CFMachPort_Lifetime.c', - 'CoreFoundation/RunLoop.subproj/CFRunLoop.c', - 'CoreFoundation/RunLoop.subproj/CFSocket.c', - 'CoreFoundation/Stream.subproj/CFConcreteStreams.c', - 'CoreFoundation/Stream.subproj/CFSocketStream.c', - 'CoreFoundation/Stream.subproj/CFStream.c', - 'CoreFoundation/String.subproj/CFBurstTrie.c', - 'CoreFoundation/String.subproj/CFCharacterSet.c', - 'CoreFoundation/String.subproj/CFString.c', - 'CoreFoundation/String.subproj/CFStringEncodings.c', - 'CoreFoundation/String.subproj/CFStringScanner.c', - 'CoreFoundation/String.subproj/CFStringUtilities.c', - 'CoreFoundation/String.subproj/CFStringTransform.c', - 'CoreFoundation/StringEncodings.subproj/CFBuiltinConverters.c', - 'CoreFoundation/StringEncodings.subproj/CFICUConverters.c', - 'CoreFoundation/StringEncodings.subproj/CFPlatformConverters.c', - 'CoreFoundation/StringEncodings.subproj/CFStringEncodingConverter.c', - 'CoreFoundation/StringEncodings.subproj/CFStringEncodingDatabase.c', - 'CoreFoundation/StringEncodings.subproj/CFUniChar.c', - 'CoreFoundation/StringEncodings.subproj/CFUnicodeDecomposition.c', - 'CoreFoundation/StringEncodings.subproj/CFUnicodePrecomposition.c', - 'CoreFoundation/URL.subproj/CFURL.c', - 'CoreFoundation/URL.subproj/CFURLAccess.c', - 'CoreFoundation/URL.subproj/CFURLComponents.c', - 'CoreFoundation/URL.subproj/CFURLComponents_URIParser.c', - 'CoreFoundation/String.subproj/CFCharacterSetData.S', - 'CoreFoundation/String.subproj/CFUnicodeData.S', - 'CoreFoundation/String.subproj/CFUniCharPropertyDatabase.S', - 'CoreFoundation/String.subproj/CFRegularExpression.c', - 'CoreFoundation/String.subproj/CFAttributedString.c', - 'CoreFoundation/String.subproj/CFRunArray.c', - 'CoreFoundation/URL.subproj/CFURLSessionInterface.c', - 'CoreFoundation/Base.subproj/CFKnownLocations.c', -]) - -# This code is already in libdispatch so is only needed if libdispatch is -# NOT being used -if "LIBDISPATCH_SOURCE_DIR" not in Configuration.current.variables: - sources += (['closure/data.c', 'closure/runtime.c']) - -sources.add_dependency(headers) -foundation.add_phase(sources) - -swift_sources = CompileSwiftSources([ - 'Foundation/NSObject.swift', - 'Foundation/AffineTransform.swift', - 'Foundation/NSArray.swift', - 'Foundation/NSAttributedString.swift', - 'Foundation/Bundle.swift', - 'Foundation/ByteCountFormatter.swift', - 'Foundation/NSCache.swift', - 'Foundation/NSCalendar.swift', - 'Foundation/NSCFArray.swift', - 'Foundation/NSCFBoolean.swift', - 'Foundation/NSCFDictionary.swift', - 'Foundation/NSCFSet.swift', - 'Foundation/NSCFString.swift', - 'Foundation/NSCharacterSet.swift', - 'Foundation/NSCFCharacterSet.swift', - 'Foundation/NSCoder.swift', - 'Foundation/NSComparisonPredicate.swift', - 'Foundation/NSCompoundPredicate.swift', - 'Foundation/NSConcreteValue.swift', - 'Foundation/NSData.swift', - 'Foundation/NSDate.swift', - 'Foundation/DateComponentsFormatter.swift', - 'Foundation/DateFormatter.swift', - 'Foundation/DateIntervalFormatter.swift', - 'Foundation/Decimal.swift', - 'Foundation/NSDecimalNumber.swift', - 'Foundation/NSDictionary.swift', - 'Foundation/EnergyFormatter.swift', - 'Foundation/NSEnumerator.swift', - 'Foundation/NSError.swift', - 'Foundation/NSExpression.swift', - 'Foundation/FileHandle.swift', - 'Foundation/FileManager.swift', - 'Foundation/FileManager_XDG.swift', - 'Foundation/Formatter.swift', - 'Foundation/NSGeometry.swift', - 'Foundation/Host.swift', - 'Foundation/HTTPCookie.swift', - 'Foundation/HTTPCookieStorage.swift', - 'Foundation/NSIndexPath.swift', - 'Foundation/NSIndexSet.swift', - 'Foundation/ISO8601DateFormatter.swift', - 'Foundation/JSONSerialization.swift', - 'Foundation/NSKeyedCoderOldStyleArray.swift', - 'Foundation/NSKeyedArchiver.swift', - 'Foundation/NSKeyedArchiverHelpers.swift', - 'Foundation/NSKeyedUnarchiver.swift', - 'Foundation/LengthFormatter.swift', - 'Foundation/NSLocale.swift', - 'Foundation/NSLock.swift', - 'Foundation/NSLog.swift', - 'Foundation/MassFormatter.swift', - 'Foundation/NSNotification.swift', - 'Foundation/NotificationQueue.swift', - 'Foundation/NSNull.swift', - 'Foundation/NSNumber.swift', - 'Foundation/NumberFormatter.swift', - 'Foundation/NSObjCRuntime.swift', - 'Foundation/Operation.swift', - 'Foundation/NSOrderedSet.swift', - 'Foundation/NSPathUtilities.swift', - 'Foundation/NSPersonNameComponents.swift', - 'Foundation/PersonNameComponentsFormatter.swift', - 'Foundation/NSPlatform.swift', - 'Foundation/Port.swift', - 'Foundation/PortMessage.swift', - 'Foundation/NSPredicate.swift', - 'Foundation/ProcessInfo.swift', - 'Foundation/Progress.swift', - 'Foundation/ProgressFraction.swift', - 'Foundation/PropertyListSerialization.swift', - 'Foundation/NSRange.swift', - 'Foundation/NSRegularExpression.swift', - 'Foundation/RunLoop.swift', - 'Foundation/Scanner.swift', - 'Foundation/NSSet.swift', - 'Foundation/NSSortDescriptor.swift', - 'Foundation/NSSpecialValue.swift', - 'Foundation/Stream.swift', - 'Foundation/NSString.swift', - 'Foundation/NSStringAPI.swift', - 'Foundation/NSSwiftRuntime.swift', - 'Foundation/Process.swift', - 'Foundation/NSTextCheckingResult.swift', - 'Foundation/Thread.swift', - 'Foundation/Timer.swift', - 'Foundation/NSTimeZone.swift', - 'Foundation/NSURL.swift', - 'Foundation/URLAuthenticationChallenge.swift', - 'Foundation/URLCache.swift', - 'Foundation/URLCredential.swift', - 'Foundation/URLCredentialStorage.swift', - 'Foundation/NSURLError.swift', - 'Foundation/URLProtectionSpace.swift', - 'Foundation/URLProtocol.swift', - 'Foundation/NSURLRequest.swift', - 'Foundation/URLResponse.swift', - 'Foundation/URLSession/Configuration.swift', - 'Foundation/URLSession/libcurl/EasyHandle.swift', - 'Foundation/URLSession/BodySource.swift', - 'Foundation/URLSession/Message.swift', - 'Foundation/URLSession/http/HTTPMessage.swift', - 'Foundation/URLSession/libcurl/MultiHandle.swift', - 'Foundation/URLSession/URLSession.swift', - 'Foundation/URLSession/URLSessionConfiguration.swift', - 'Foundation/URLSession/URLSessionDelegate.swift', - 'Foundation/URLSession/URLSessionTask.swift', - 'Foundation/URLSession/TaskRegistry.swift', - 'Foundation/URLSession/NativeProtocol.swift', - 'Foundation/URLSession/TransferState.swift', - 'Foundation/URLSession/libcurl/libcurlHelpers.swift', - 'Foundation/URLSession/http/HTTPURLProtocol.swift', - 'Foundation/URLSession/ftp/FTPURLProtocol.swift', - 'Foundation/UserDefaults.swift', - 'Foundation/NSUUID.swift', - 'Foundation/NSValue.swift', - 'Foundation/XMLDocument.swift', - 'Foundation/XMLDTD.swift', - 'Foundation/XMLDTDNode.swift', - 'Foundation/XMLElement.swift', - 'Foundation/XMLNode.swift', - 'Foundation/XMLParser.swift', - 'Foundation/FoundationErrors.swift', - 'Foundation/URL.swift', - 'Foundation/UUID.swift', - 'Foundation/Boxing.swift', - 'Foundation/ReferenceConvertible.swift', - 'Foundation/Date.swift', - 'Foundation/Data.swift', - 'Foundation/CharacterSet.swift', - 'Foundation/URLRequest.swift', - 'Foundation/PersonNameComponents.swift', - 'Foundation/Notification.swift', - 'Foundation/URLComponents.swift', - 'Foundation/DateComponents.swift', - 'Foundation/DateInterval.swift', - 'Foundation/IndexPath.swift', - 'Foundation/IndexSet.swift', - 'Foundation/StringEncodings.swift', - 'Foundation/ExtraStringAPIs.swift', - 'Foundation/Measurement.swift', - 'Foundation/NSMeasurement.swift', - 'Foundation/MeasurementFormatter.swift', - 'Foundation/Unit.swift', - 'Foundation/TimeZone.swift', - 'Foundation/Calendar.swift', - 'Foundation/Locale.swift', - 'Foundation/String.swift', - 'Foundation/Set.swift', - 'Foundation/Dictionary.swift', - 'Foundation/Array.swift', - 'Foundation/Bridging.swift', - 'Foundation/CGFloat.swift', - 'Foundation/Codable.swift', - 'Foundation/JSONEncoder.swift', -]) - -if Configuration.current.build_mode == Configuration.Debug: - swift_sources.enable_testable_import = True - -swift_sources.add_dependency(headers) -foundation.add_phase(swift_sources) - -foundation_tests_resources = CopyResources('TestFoundation', [ - 'TestFoundation/Resources/Info.plist', - 'TestFoundation/Resources/NSURLTestData.plist', - 'TestFoundation/Resources/Test.plist', - 'TestFoundation/Resources/NSStringTestData.txt', - 'TestFoundation/Resources/NSString-UTF16-BE-data.txt', - 'TestFoundation/Resources/NSString-UTF16-LE-data.txt', - 'TestFoundation/Resources/NSString-UTF32-BE-data.txt', - 'TestFoundation/Resources/NSString-UTF32-LE-data.txt', - 'TestFoundation/Resources/NSString-ISO-8859-1-data.txt', - 'TestFoundation/Resources/NSXMLDocumentTestData.xml', - 'TestFoundation/Resources/PropertyList-1.0.dtd', - 'TestFoundation/Resources/NSXMLDTDTestData.xml', - 'TestFoundation/Resources/NSKeyedUnarchiver-ArrayTest.plist', - 'TestFoundation/Resources/NSKeyedUnarchiver-ComplexTest.plist', - 'TestFoundation/Resources/NSKeyedUnarchiver-ConcreteValueTest.plist', - 'TestFoundation/Resources/NSKeyedUnarchiver-EdgeInsetsTest.plist', - 'TestFoundation/Resources/NSKeyedUnarchiver-NotificationTest.plist', - 'TestFoundation/Resources/NSKeyedUnarchiver-RangeTest.plist', - 'TestFoundation/Resources/NSKeyedUnarchiver-RectTest.plist', - 'TestFoundation/Resources/NSKeyedUnarchiver-URLTest.plist', - 'TestFoundation/Resources/NSKeyedUnarchiver-UUIDTest.plist', - 'TestFoundation/Resources/NSKeyedUnarchiver-OrderedSetTest.plist', - 'TestFoundation/Resources/TestFileWithZeros.txt', -]) - -# TODO: Probably this should be another 'product', but for now it's simply a phase -foundation_tests = SwiftExecutable('TestFoundation', [ - 'TestFoundation/main.swift', - 'TestFoundation/HTTPServer.swift', - 'TestFoundation/FTPServer.swift', - 'Foundation/ProgressFraction.swift', - 'TestFoundation/Utilities.swift', -] + glob.glob('./TestFoundation/Test*.swift')) # all TestSomething.swift are considered sources to the test project in the TestFoundation directory - -Configuration.current.extra_ld_flags += ' -L'+Configuration.current.variables["LIBDISPATCH_BUILD_DIR"]+'/src' - -foundation_tests.add_dependency(foundation_tests_resources) -xdgTestHelper = SwiftExecutable('xdgTestHelper', - ['TestFoundation/xdgTestHelper/main.swift']) -xdgTestHelper.outputDirectory = 'TestFoundation' -foundation_tests.add_dependency(xdgTestHelper) -foundation.add_phase(xdgTestHelper) -foundation.add_phase(foundation_tests_resources) -foundation.add_phase(foundation_tests) - -plutil = SwiftExecutable('plutil', ['Tools/plutil/main.swift']) -foundation.add_phase(plutil) - -script.add_product(foundation) - -LIBS_DIRS = Configuration.current.build_directory.absolute()+"/Foundation/:" -if "XCTEST_BUILD_DIR" in Configuration.current.variables: - LIBS_DIRS += "${XCTEST_BUILD_DIR}:" -if "LIBDISPATCH_BUILD_DIR" in Configuration.current.variables: - LIBS_DIRS += Configuration.current.variables["LIBDISPATCH_BUILD_DIR"]+"/src:" - -Configuration.current.variables["LIBS_DIRS"] = LIBS_DIRS - -extra_script = """ -rule InstallFoundation - command = mkdir -p "${DSTROOT}/${PREFIX}/lib/swift/${OS}"; $ - cp "${BUILD_DIR}/Foundation/${DYLIB_PREFIX}Foundation${DYLIB_SUFFIX}" "${DSTROOT}/${PREFIX}/lib/swift/${OS}"; $ - mkdir -p "${DSTROOT}/${PREFIX}/lib/swift_static/${OS}"; $ - cp "${BUILD_DIR}/Foundation/${STATICLIB_PREFIX}Foundation${STATICLIB_SUFFIX}" "${DSTROOT}/${PREFIX}/lib/swift_static/${OS}"; $ - mkdir -p "${DSTROOT}/${PREFIX}/lib/swift/${OS}/${ARCH}"; $ - cp "${BUILD_DIR}/Foundation/Foundation.swiftmodule" "${DSTROOT}/${PREFIX}/lib/swift/${OS}/${ARCH}/"; $ - cp "${BUILD_DIR}/Foundation/Foundation.swiftdoc" "${DSTROOT}/${PREFIX}/lib/swift/${OS}/${ARCH}/"; $ - mkdir -p "${DSTROOT}/${PREFIX}/local/include"; $ - rsync -a "${BUILD_DIR}/Foundation/${PREFIX}/lib/swift/CoreFoundation" "${DSTROOT}/${PREFIX}/lib/swift/" - -build ${BUILD_DIR}/.install: InstallFoundation ${BUILD_DIR}/Foundation/${DYLIB_PREFIX}Foundation${DYLIB_SUFFIX} - -build install: phony | ${BUILD_DIR}/.install - -""" -extra_script += """ -rule RunTestFoundation - command = echo "**** RUNNING TESTS ****\\nexecute:\\nLD_LIBRARY_PATH=${LIBS_DIRS} ${BUILD_DIR}/TestFoundation/TestFoundation\\n**** DEBUGGING TESTS ****\\nexecute:\\nLD_LIBRARY_PATH=${LIBS_DIRS} ${BUILD_DIR}/../lldb-${OS}-${ARCH}/bin/lldb ${BUILD_DIR}/TestFoundation/TestFoundation\\n" - description = Building Tests - -build ${BUILD_DIR}/.test: RunTestFoundation | TestFoundation - -build test: phony | ${BUILD_DIR}/.test - -""" - -script.add_text(extra_script) - -script.generate() diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt deleted file mode 100644 index 3dbaaace15..0000000000 --- a/cmake/modules/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ - -set(Foundation_EXPORTS_FILE ${CMAKE_CURRENT_BINARY_DIR}/FoundationExports.cmake) -configure_file(FoundationConfig.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/FoundationConfig.cmake) - -get_property(Foundation_EXPORTS GLOBAL PROPERTY Foundation_EXPORTS) -export(TARGETS ${Foundation_EXPORTS} FILE ${Foundation_EXPORTS_FILE}) diff --git a/cmake/modules/FoundationConfig.cmake.in b/cmake/modules/FoundationConfig.cmake.in deleted file mode 100644 index 77f0b76fbc..0000000000 --- a/cmake/modules/FoundationConfig.cmake.in +++ /dev/null @@ -1,4 +0,0 @@ - -if(NOT TARGET Foundation) - include(@Foundation_EXPORTS_FILE@) -endif() diff --git a/cmake/modules/SwiftSupport.cmake b/cmake/modules/SwiftSupport.cmake deleted file mode 100644 index ffb24527eb..0000000000 --- a/cmake/modules/SwiftSupport.cmake +++ /dev/null @@ -1,97 +0,0 @@ - -# Returns the current architecture name in a variable -# -# Usage: -# get_swift_host_arch(result_var_name) -# -# If the current architecture is supported by Swift, sets ${result_var_name} -# with the sanitized host architecture name derived from CMAKE_SYSTEM_PROCESSOR. -function(get_swift_host_arch result_var_name) - if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") - set("${result_var_name}" "x86_64" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64") - set("${result_var_name}" "aarch64" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64") - set("${result_var_name}" "powerpc64" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64le") - set("${result_var_name}" "powerpc64le" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "s390x") - set("${result_var_name}" "s390x" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv6l") - set("${result_var_name}" "armv6" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7l") - set("${result_var_name}" "armv7" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7-a") - set("${result_var_name}" "armv7" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "amd64") - set("${result_var_name}" "amd64" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64") - set("${result_var_name}" "x86_64" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "IA64") - set("${result_var_name}" "itanium" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86") - set("${result_var_name}" "i686" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686") - set("${result_var_name}" "i686" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "wasm32") - set("${result_var_name}" "wasm32" PARENT_SCOPE) - else() - message(FATAL_ERROR "Unrecognized architecture on host system: ${CMAKE_SYSTEM_PROCESSOR}") - endif() -endfunction() - -# Returns the os name in a variable -# -# Usage: -# get_swift_host_os(result_var_name) -# -# -# Sets ${result_var_name} with the converted OS name derived from -# CMAKE_SYSTEM_NAME. -function(get_swift_host_os result_var_name) - if(CMAKE_SYSTEM_NAME STREQUAL Darwin) - set(${result_var_name} macosx PARENT_SCOPE) - else() - string(TOLOWER ${CMAKE_SYSTEM_NAME} cmake_system_name_lc) - set(${result_var_name} ${cmake_system_name_lc} PARENT_SCOPE) - endif() -endfunction() - -function(_install_target module) - get_swift_host_os(swift_os) - get_target_property(type ${module} TYPE) - - if(type STREQUAL STATIC_LIBRARY) - set(swift swift_static) - else() - set(swift swift) - endif() - - install(TARGETS ${module} - ARCHIVE DESTINATION lib/${swift}/${swift_os} - LIBRARY DESTINATION lib/${swift}/${swift_os} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - if(type STREQUAL EXECUTABLE) - return() - endif() - - get_swift_host_arch(swift_arch) - get_target_property(module_name ${module} Swift_MODULE_NAME) - if(NOT module_name) - set(module_name ${module}) - endif() - - if(CMAKE_SYSTEM_NAME STREQUAL Darwin) - install(FILES $/${module_name}.swiftdoc - DESTINATION lib/${swift}/${swift_os}/${module_name}.swiftmodule - RENAME ${swift_arch}.swiftdoc) - install(FILES $/${module_name}.swiftmodule - DESTINATION lib/${swift}/${swift_os}/${module_name}.swiftmodule - RENAME ${swift_arch}.swiftmodule) - else() - install(FILES - $/${module_name}.swiftdoc - $/${module_name}.swiftmodule - DESTINATION lib/${swift}/${swift_os}/${swift_arch}) - endif() -endfunction() diff --git a/cmake/modules/XCTest.cmake b/cmake/modules/XCTest.cmake deleted file mode 100644 index c15355a829..0000000000 --- a/cmake/modules/XCTest.cmake +++ /dev/null @@ -1,100 +0,0 @@ -cmake_policy(PUSH) -cmake_policy(SET CMP0057 NEW) - -# Automatically add tests with CTest by querying the compiled test executable -# for available tests. -# -# xctest_discover_tests(target -# [COMMAND command] -# [WORKING_DIRECTORY dir] -# [PROPERTIES name1 value1...] -# [DISCOVERY_TIMEOUT seconds] -# ) -# -# `xctest_discover_tests` sets up a post-build command on the test executable -# that generates the list of tests by parsing the output from running the test -# with the `--list-tests` argument. -# -# The options are: -# -# `target` -# Specifies the XCTest executable, which must be a known CMake target. CMake -# will substitute the location of the built executable when running the test. -# -# `COMMAND command` -# Override the command used for the test executable. If you executable is not -# created with CMake add_executable, you will have to provide a command path. -# If this option is not provided, the target file of the target is used. -# -# `WORKING_DIRECTORY dir` -# Specifies the directory in which to run the discovered test cases. If this -# option is not provided, the current binary directory is used. -# -# `PROPERTIES name1 value1...` -# Specifies additional properties to be set on all tests discovered by this -# invocation of `xctest_discover_tests`. -# -# `DISCOVERY_TIMEOUT seconds` -# Specifies how long (in seconds) CMake will wait for the test to enumerate -# available tests. If the test takes longer than this, discovery (and your -# build) will fail. The default is 5 seconds. -# -# The inspiration for this is CMake `gtest_discover_tests`. The official -# documentation might be useful for using this function. Many details of that -# function has been dropped in the name of simplicity, and others have been -# improved. -function(xctest_discover_tests TARGET) - cmake_parse_arguments( - "" - "" - "COMMAND;WORKING_DIRECTORY;DISCOVERY_TIMEOUT" - "PROPERTIES" - ${ARGN} - ) - - if(NOT _COMMAND) - set(_COMMAND "$") - endif() - if(NOT _WORKING_DIRECTORY) - set(_WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - endif() - if(NOT _DISCOVERY_TIMEOUT) - set(_DISCOVERY_TIMEOUT 5) - endif() - - set(ctest_file_base ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}) - set(ctest_include_file "${ctest_file_base}_include.cmake") - set(ctest_tests_file "${ctest_file_base}_tests.cmake") - - add_custom_command( - TARGET ${TARGET} POST_BUILD - BYPRODUCTS "${ctest_tests_file}" - COMMAND "${CMAKE_COMMAND}" - -D "TEST_TARGET=${TARGET}" - -D "TEST_EXECUTABLE=${_COMMAND}" - -D "TEST_WORKING_DIR=${_WORKING_DIRECTORY}" - -D "TEST_PROPERTIES=${_PROPERTIES}" - -D "CTEST_FILE=${ctest_tests_file}" - -D "TEST_DISCOVERY_TIMEOUT=${_DISCOVERY_TIMEOUT}" - -P "${_XCTEST_DISCOVER_TESTS_SCRIPT}" - VERBATIM - ) - - file(WRITE "${ctest_include_file}" - "if(EXISTS \"${ctest_tests_file}\")\n" - " include(\"${ctest_tests_file}\")\n" - "else()\n" - " add_test(${TARGET}_NOT_BUILT ${TARGET}_NOT_BUILT)\n" - "endif()\n" - ) - - set_property(DIRECTORY - APPEND PROPERTY TEST_INCLUDE_FILES "${ctest_include_file}" - ) -endfunction() - -set(_XCTEST_DISCOVER_TESTS_SCRIPT - ${CMAKE_CURRENT_LIST_DIR}/XCTestAddTests.cmake -) - -cmake_policy(POP) diff --git a/cmake/modules/XCTestAddTests.cmake b/cmake/modules/XCTestAddTests.cmake deleted file mode 100644 index b836c96554..0000000000 --- a/cmake/modules/XCTestAddTests.cmake +++ /dev/null @@ -1,90 +0,0 @@ -set(properties ${TEST_PROPERTIES}) -set(script) -set(tests) - -function(add_command NAME) - set(_args "") - foreach(_arg ${ARGN}) - if(_arg MATCHES "[^-./:a-zA-Z0-9_]") - set(_args "${_args} [==[${_arg}]==]") - else() - set(_args "${_args} ${_arg}") - endif() - endforeach() - set(script "${script}${NAME}(${_args})\n" PARENT_SCOPE) -endfunction() - -if(NOT EXISTS "${TEST_EXECUTABLE}") - message(FATAL_ERROR - "Specified test executable does not exist.\n" - " Path: '${TEST_EXECUTABLE}'" - ) -endif() -# We need to figure out if some environment is needed to run the test listing. -cmake_parse_arguments("_properties" "" "ENVIRONMENT" "" ${properties}) -if(_properties_ENVIRONMENT) - foreach(_env ${_properties_ENVIRONMENT}) - string(REGEX REPLACE "([a-zA-Z0-9_]+)=(.*)" "\\1" _key "${_env}") - string(REGEX REPLACE "([a-zA-Z0-9_]+)=(.*)" "\\2" _value "${_env}") - if(NOT "${_key}" STREQUAL "") - set(ENV{${_key}} "${_value}") - endif() - endforeach() -endif() -execute_process( - COMMAND "${TEST_EXECUTABLE}" --list-tests - WORKING_DIRECTORY "${TEST_WORKING_DIR}" - TIMEOUT ${TEST_DISCOVERY_TIMEOUT} - OUTPUT_VARIABLE output - ERROR_VARIABLE error_output - RESULT_VARIABLE result -) -if(NOT ${result} EQUAL 0) - string(REPLACE "\n" "\n " output "${output}") - string(REPLACE "\n" "\n " error_output "${error_output}") - message(FATAL_ERROR - "Error running test executable.\n" - " Path: '${TEST_EXECUTABLE}'\n" - " Result: ${result}\n" - " Output:\n" - " ${output}\n" - " Error:\n" - " ${error_output}\n" - ) -endif() - -string(REPLACE "\n" ";" output "${output}") - -foreach(line ${output}) - if(line MATCHES "^[ \t]*$") - continue() - elseif(line MATCHES "^Listing [0-9]+ tests? in .+:$") - continue() - elseif(line MATCHES "^.+\\..+/.+$") - # TODO: remove non-ASCII characters from module, class and method names - set(pretty_target "${line}") - string(REGEX REPLACE "/" "-" pretty_target "${pretty_target}") - add_command(add_test - "${pretty_target}" - "${TEST_EXECUTABLE}" - "${line}" - ) - add_command(set_tests_properties - "${pretty_target}" - PROPERTIES - WORKING_DIRECTORY "${TEST_WORKING_DIR}" - ${properties} - ) - list(APPEND tests "${pretty_target}") - else() - message(FATAL_ERROR - "Error parsing test executable output.\n" - " Path: '${TEST_EXECUTABLE}'\n" - " Line: '${line}'" - ) - endif() -endforeach() - -add_command(set "${TARGET}_TESTS" ${tests}) - -file(WRITE "${CTEST_FILE}" "${script}") diff --git a/configure b/configure deleted file mode 100755 index 28d5350f12..0000000000 --- a/configure +++ /dev/null @@ -1,208 +0,0 @@ -#!/usr/bin/env python - -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -# - -import sys -import os -import argparse -import json -import glob - -from lib.config import Configuration - -from lib.path import Path - -from lib.phases import CompileSources -from lib.phases import CompileSwiftSources -from lib.phases import CopyResources -from lib.phases import CopyHeaders -from lib.phases import SwiftExecutable - -from lib.product import DynamicLibrary -from lib.product import Framework -from lib.product import StaticLibrary -from lib.product import StaticAndDynamicLibrary -from lib.product import Application -from lib.product import Executable - -from lib.pkg_config import PkgConfig - -from lib.script import Script - -from lib.target import ArchSubType -from lib.target import ArchType -from lib.target import EnvironmentType -from lib.target import ObjectFormat -from lib.target import OSType -from lib.target import Target -from lib.target import Vendor - -from lib.workspace import Workspace - -import sys - -def reconfigure(config, path): - with open(path, 'r') as infile: - info = json.load(infile) - config.requires_pkg_config = info['requires_pkg_config'] - if 'version' in info and info['version'] == config.version: - if 'command' in info and info['command'] is not None: - config.command = info['command'] - if 'project' in info and info['project'] is not None: - config.command = info['project'] - if 'script_path' in info and info['script_path'] is not None: - config.script_path = Path(info['script_path']) - if 'build_script_path' in info and info['build_script_path'] is not None: - config.build_script_path = Path(info['build_script_path']) - if 'source_root' in info and info['source_root'] is not None: - config.source_root = Path(info['source_root']) - if 'target' in info and info['target'] is not None: - config.target = Target(info['target']) - if 'system_root' in info and info['system_root'] is not None: - config.system_root = Path(info['system_root']) - if 'toolchain' in info and info['toolchain'] is not None: - config.toolchain = Path(info['toolchain']) - if 'linker' in info and info['linker'] is not None: - config.linker = info['linker'] - elif config.target is not None: - config.linker = config.target.linker - if 'build_directory' in info and info['build_directory'] is not None: - config.build_directory = Path(info['build_directory']) - if 'intermediate_directory' in info and info['intermediate_directory'] is not None: - config.intermediate_directory = Path(info['intermediate_directory']) - if 'module_cache_directory' in info and info['module_cache_directory'] is not None: - config.module_cache_directory = Path(info['module_cache_directory']) - if 'install_directory' in info and info['install_directory'] is not None: - config.install_directory = Path(info['install_directory']) - if 'prefix' in info and info['prefix'] is not None: - config.prefix = info['prefix'] - if 'swift_install' in info and info['swift_install'] is not None: - config.swift_install = info['swift_install'] - if 'pkg_config' in info and info['pkg_config'] is not None: - config.pkg_config = info['pkg_config'] - if 'clang' in info and info['clang'] is not None: - config.clang = info['clang'] - if 'clangxx' in info and info['clangxx'] is not None: - config.clangxx = info['clangxx'] - if 'swift' in info and info['swift'] is not None: - config.swift = info['swift'] - if 'swiftc' in info and info['swiftc'] is not None: - config.swiftc = info['swiftc'] - if 'ar' in info and info['ar'] is not None: - config.ar = info['ar'] - if 'swift_sdk' in info and info['swift_sdk'] is not None: - config.swift_sdk = info['swift_sdk'] - if 'bootstrap_directory' in info and info['bootstrap_directory'] is not None: - config.bootstrap_directory = Path(info['bootstrap_directory']) - if 'verbose' in info and info['verbose'] is not None: - config.verbose = info['verbose'] - if 'extra_c_flags' in info and info['extra_c_flags'] is not None: - config.extra_c_flags = info['extra_c_flags'] - if 'extra_swift_flags' in info and info['extra_swift_flags'] is not None: - config.extra_swift_flags = info['extra_swift_flags'] - if 'extra_ld_flags' in info and info['extra_ld_flags'] is not None: - config.extra_ld_flags = info['extra_ld_flags'] - if 'build_mode' in info and info['build_mode'] is not None: - config.build_mode = info['build_mode'] - if 'variables' in info and info['variables'] is not None: - config.variables = info['variables'] - else: - sys.exit("invalid version") - - -def main(): - config = Configuration() - CWD = Path.path(os.getcwd()) - config.build_directory = Path.path(os.getenv("BUILD_DIR", os.path.join(os.path.dirname(os.path.abspath(__file__)), "Build"))) - config.module_cache_directory = Path.path(os.getenv("BUILD_DIR", config.build_directory.path_by_appending("ModuleCache"))) - config.intermediate_directory = Path.path(os.getenv("INTERMEDIATE_DIR", config.build_directory.path_by_appending("Intermediates"))) - config.install_directory = Path.path(os.getenv("DSTROOT", "/")) - config.prefix = os.getenv("PREFIX", "/usr") - config.clang = os.getenv("CLANG", "clang") - config.clangxx = os.getenv("CLANGXX", "clang") - config.swift = os.getenv("SWIFT", "swift") - config.swiftc = os.getenv("SWIFTC", "swiftc") - config.ar = os.getenv("AR", None) - config.source_root = Path.path(os.getenv("SRCROOT", CWD)) - config.extra_c_flags = os.getenv("CFLAGS", "") - config.extra_swift_flags = os.getenv("SWIFTCFLAGS", "") - config.extra_ld_flags = os.getenv("LDFLAGS", "") - config.swift_sdk = os.getenv("SDKROOT", None) - config.script_path = config.source_root.path_by_appending("build.py") - config.build_script_path = config.source_root.path_by_appending("build.ninja") - config.config_path = config.source_root.path_by_appending(".configuration") - - parser = argparse.ArgumentParser(description='Configure and emit ninja build scripts for building.') - parser.add_argument('--target', dest='target', type=str, default=Target.default(), help="specify the deployment target") - parser.add_argument('--sysroot', dest='sysroot', type=str, default=None, help="the system root directory for building") - parser.add_argument('--toolchain', dest='toolchain', type=str, default=None, help="the base location for finding tools to compile") - parser.add_argument('--linker', dest='linker', type=str, default=None, help="which linker program to use") - parser.add_argument('--pkg-config', dest='pkg_config', type=str, default="pkg-config") - parser.add_argument('--bootstrap', dest='bootstrap', type=str, default=os.path.join(os.path.dirname(os.path.abspath(__file__)), "bootstrap"), help="a directory for bootstrapping commonly used headers and libraries not associated directly with the target operating system") - parser.add_argument('--reconfigure', dest='reconfigure', action="store_true", help="re-generate the build script given the previous configuration") - parser.add_argument('-v', '--verbose', dest='verbose', action="store_true") - args, extras = parser.parse_known_args() - - if args.reconfigure: - reconfigure(config, config.config_path.absolute()) - for arg in extras: - if arg.lower() == 'debug': - config.build_mode = Configuration.Debug - elif arg.lower() == 'release': - config.build_mode = Configuration.Release - else: - config.build_mode = Configuration.Debug # by default build in debug mode - - for arg in extras: - if arg.lower() == 'debug': - config.build_mode = Configuration.Debug - elif arg.lower() == 'release': - config.build_mode = Configuration.Release - elif arg.startswith('-D'): # accept -DNAME=value as extra parameters to the configuration of the build.ninja - key, val = arg[2:].split("=", 1) - config.variables[key] = val - - config.command = [os.path.abspath(__file__)] + sys.argv[1:] - - config.target = Target(args.target) - - config.system_root = Path.path(args.sysroot) - if config.target.sdk == OSType.MacOSX and config.system_root is None and Target(Target.default()).sdk == OSType.MacOSX: - import subprocess - config.system_root = Path.path(subprocess.Popen(['xcrun', '--show-sdk-path'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE).communicate()[0]) - swift_path = Path.path(subprocess.Popen(['xcrun', '--find', 'swift'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE).communicate()[0]).parent().parent() - config.swift_sdk = swift_path.absolute() - elif config.swift_sdk is None: - config.swift_sdk = "/usr" - config.toolchain = Path.path(args.toolchain) - config.pkg_config = args.pkg_config - if args.linker is not None: - config.linker = args.linker - else: - config.linker = config.target.linker - config.bootstrap_directory = Path.path(args.bootstrap) - config.verbose = args.verbose - if config.toolchain is not None: - ar_path = os.path.join(config.toolchain.relative(), "ar") - if not os.path.exists(ar_path): - ar_path = os.path.join(config.toolchain.relative(), "bin", "ar") - config.ar = ar_path - elif config.ar is None: - config.ar = "ar" - - config.write(config.config_path.absolute()) - Configuration.current = config - - exec(compile(open(config.script_path.absolute()).read(), config.script_path.absolute(), 'exec')) - - -if __name__ == "__main__": - main() - diff --git a/lib/__init__.py b/lib/__init__.py deleted file mode 100644 index b55f8a598f..0000000000 --- a/lib/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -# - -__all__ = [ - "config", - "path", - "phases", - "pkg_config", - "product", - "script", - "target", - "workspace", -] diff --git a/lib/config.py b/lib/config.py deleted file mode 100644 index b15ec17956..0000000000 --- a/lib/config.py +++ /dev/null @@ -1,96 +0,0 @@ -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -# - -import json - -from .path import Path - -class Configuration: - Debug = "debug" - Release = "release" - version = 1 - - command = None - current = None - project = None - script_path = None - build_script_path = None - source_root = None - target = None - system_root = None - toolchain = None - linker = None - build_directory = None - intermediate_directory = None - module_cache_directory = None - install_directory = None - prefix = None - swift_install = None - pkg_config = None - requires_pkg_config = False - clang = None - clangxx = None - swift = None - swiftc = None - ar = None - swift_sdk = None - bootstrap_directory = None - verbose = False - extra_c_flags = None - extra_swift_flags = None - extra_ld_flags = None - build_mode = None - config_path = None # don't save this; else it would be recursive - variables = {} - def __init__(self): - pass - - def _encode_path(self, path): - if path is not None: - return path.absolute() - else: - return None - - def write(self, path): - info = { - 'version' : self.version, - 'command' : self.command, - 'project' : self.project, - 'script_path' : self._encode_path(self.script_path), - 'build_script_path' : self._encode_path(self.build_script_path), - 'source_root' : self._encode_path(self.source_root), - 'target' : self.target.triple, - 'system_root' : self._encode_path(self.system_root), - 'toolchain' : self._encode_path(self.toolchain), - 'linker' : self.linker, - 'build_directory' : self._encode_path(self.build_directory), - 'intermediate_directory' : self._encode_path(self.intermediate_directory), - 'module_cache_directory' : self._encode_path(self.module_cache_directory), - 'install_directory' : self._encode_path(self.install_directory), - 'prefix' : self.prefix, - 'swift_install' : self.swift_install, - 'pkg_config' : self.pkg_config, - 'requires_pkg_config' : self.requires_pkg_config, - 'clang' : self.clang, - 'clangxx' : self.clangxx, - 'swift' : self.swift, - 'swiftc' : self.swiftc, - 'ar' : self.ar, - 'swift_sdk' : self.swift_sdk, - 'bootstrap_directory' : self._encode_path(self.bootstrap_directory), - 'verbose' : self.verbose, - 'extra_c_flags' : self.extra_c_flags, - 'extra_swift_flags' : self.extra_swift_flags, - 'extra_ld_flags' : self.extra_ld_flags, - 'build_mode' : self.build_mode, - 'variables' : self.variables, - } - with open(path, 'w+') as outfile: - json.dump(info, outfile) - \ No newline at end of file diff --git a/lib/path.py b/lib/path.py deleted file mode 100644 index adc2e76c1b..0000000000 --- a/lib/path.py +++ /dev/null @@ -1,47 +0,0 @@ -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -# - -import os - -class Path: - _path = None - def __init__(self, path): - if isinstance(path, Path): - self._path = path.absolute() - elif os.path.isabs(path): - self._path = os.path.abspath(path) - else: - self._path = path - - def relative(self, base=os.getcwd()): - return os.path.relpath(self._path, base) - - def absolute(self): - return self._path - - @staticmethod - def path(path): - if path is None: - return None - else: - return Path(path) - - def path_by_appending(self, comps): - return Path.path(os.path.join(self._path, comps)) - - def basename(self): - return os.path.basename(self._path) - - def extension(self): - name, ext = os.path.splitext(self._path) - return ext - - def parent(self): - path, _ = os.path.split(self._path) - return Path(path) \ No newline at end of file diff --git a/lib/phases.py b/lib/phases.py deleted file mode 100644 index 921e8eef1a..0000000000 --- a/lib/phases.py +++ /dev/null @@ -1,449 +0,0 @@ -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -# - -from .config import Configuration -from .target import TargetConditional -from .path import Path -import os - -class BuildAction: - input = None - output = None - _product = None - dependencies = None - skipRule = False - - def __init__(self, input=None, output=None): - self.input = input - self.output = output - - @property - def product(self): - return self._product - - def set_product(self, product): - self._product = product - - def generate_dependencies(self, extra = None): - if self.dependencies is not None and len(self.dependencies) > 0: - rule = " |" - for dep in self.dependencies: - rule += " " + dep.name - if extra is not None: - rule += " " + extra - return rule - else: - if extra is not None: - return " | " + extra - return "" - - def add_dependency(self, phase): - if self.dependencies is None: - self.dependencies = [phase] - else: - self.dependencies.append(phase) - - -class Cp(BuildAction): - def __init__(self, source, destination): - BuildAction.__init__(self, input=source, output=destination) - - def generate(self): - return """ -build """ + self.output.relative() + """: Cp """ + self.input.relative() + self.generate_dependencies() + """ -""" - -class CompileSource(BuildAction): - path = None - def __init__(self, path, product): - BuildAction.__init__(self, input=path, output=Configuration.current.build_directory.path_by_appending(product.name).path_by_appending(path.relative() + ".o")) - self.path = path - - @staticmethod - def compile(source, phase): - ext = source.extension() - if ext == ".c" or ext == ".m": - return CompileC(source, phase.product) - elif ext == ".mm" or ext == ".cpp" or ext == ".CC": - return CompileCxx(source, phase.product) - elif ext == ".S" or ext == ".s": - return Assemble(source, phase.product) - elif ext == ".swift": - return CompileSwift(source, phase.product, phase) - else: - return None - - -class CompileC(CompileSource): - def __init__(self, path, product): - CompileSource.__init__(self, path, product) - - def generate(self): - generated = """ -build """ + self.output.relative() + """: CompileC """ + self.path.relative() + self.generate_dependencies() + """ - flags = """ - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() - generated += " -I" + Configuration.current.build_directory.relative() - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + self.product.ROOT_HEADERS_FOLDER_PATH - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + self.product.PUBLIC_HEADERS_FOLDER_PATH - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + self.product.PRIVATE_HEADERS_FOLDER_PATH - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + self.product.PROJECT_HEADERS_FOLDER_PATH - cflags = TargetConditional.value(self.product.CFLAGS) - if cflags is not None: - generated += " " + cflags - prefix = TargetConditional.value(self.product.GCC_PREFIX_HEADER) - if prefix is not None: - generated += " -include " + prefix - generated += "\n" - if self.path.extension() == ".m" or "-x objective-c" in generated: - self.product.needs_objc = True - return generated - - -class CompileCxx(CompileSource): - def __init__(self, path, product): - CompileSource.__init__(self, path, product) - - def generate(self): - generated = """ -build """ + self.output.relative() + """: CompileCxx """ + self.path.relative() + self.generate_dependencies() + """ - flags = """ - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() - generated += " -I" + Configuration.current.build_directory.relative() - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + self.product.ROOT_HEADERS_FOLDER_PATH - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + self.product.PUBLIC_HEADERS_FOLDER_PATH - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + self.product.PRIVATE_HEADERS_FOLDER_PATH - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + self.product.PROJECT_HEADERS_FOLDER_PATH - cflags = TargetConditional.value(self.product.CFLAGS) - if cflags is not None: - generated += " " + cflags - cxxflags = TargetConditional.value(self.product.CXXFLAGS) - if cxxflags is not None: - generated += " " + cxxflags - prefix = TargetConditional.value(self.product.GCC_PREFIX_HEADER) - if prefix is not None: - generated += " -include " + prefix - generated += "\n" - if self.path.extension() == ".mm" or "-x objective-c" in generated: - self.product.needs_objc = True - self.product.needs_stdcxx = True - return generated - - -class Assemble(CompileSource): - def __init__(self, path, product): - CompileSource.__init__(self, path, product) - - def generate(self): - generated = """ -build """ + self.output.relative() + """: Assemble """ + self.path.relative() + self.generate_dependencies() + """ - flags = """ - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() - generated += " -I" + Configuration.current.build_directory.relative() - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + self.product.ROOT_HEADERS_FOLDER_PATH - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + self.product.PUBLIC_HEADERS_FOLDER_PATH - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + self.product.PRIVATE_HEADERS_FOLDER_PATH - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + self.product.PROJECT_HEADERS_FOLDER_PATH - asflags = TargetConditional.value(self.product.ASFLAGS) - if asflags is not None: - generated += " " + asflags - return generated - - -class CompileSwift(CompileSource): - phase = None - def __init__(self, path, product, phase): - CompileSource.__init__(self, path, product) - self.phase = phase - - def generate(self): - generated = """ -build """ + self.output.relative() + """: CompileSwift """ + self.path.relative() + self.generate_dependencies() + """ - module_sources = """ + self.module_sources + """ - module_name = """ + self.product.name + """ - flags = """ - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() - generated += " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + self.product.ROOT_HEADERS_FOLDER_PATH - generated += " -I" + Configuration.current.build_directory.relative() - swiftflags = TargetConditional.value(self.product.SWIFTCFLAGS) - # Force building in Swift 4 compatibility mode. - swiftflags += " -swift-version 4" - if swiftflags is not None: - generated += " " + swiftflags - return generated - - @property - def module_sources(self): - sources = self.phase.module_sources(primary=self.path.absolute()) - return " ".join(sources) - - -class BuildPhase(BuildAction): - previous = None - name = None - dependencies = None - actions = None - def __init__(self, name): - BuildAction.__init__(self) - self.dependencies = [] - self.actions = [] - self.name = name - - def generate(self): - generated = "" - for action in self.actions: - action.dependencies = self.dependencies - generated += action.generate() + "\n" - - rule = "build " + self.name + ": phony" - - if self.previous is not None or len(self.actions) > 0: - rule += " |" - if self.previous is not None: - rule += " " + self.previous.name - for action in self.actions: - rule += " " + action.output.relative() - rule += "\n" - return generated + "\n" + rule - - @property - def objects(self): - return [] - - -class CopyHeaders(BuildPhase): - _public = [] - _private = [] - _project = [] - _module = None - def __init__(self, public, private, project, module=None): - BuildPhase.__init__(self, "CopyHeaders") - if public is not None: - self._public = public - if private is not None: - self._private = private - if project is not None: - self._project = project - self._module = module - - @property - def product(self): - return self._product - - def set_product(self, product): - BuildAction.set_product(self, product) - self.actions = [] - - module = Path.path(TargetConditional.value(self._module)) - if module is not None: - action = Cp(module, self.product.public_module_path.path_by_appending("module.modulemap")) - self.actions.append(action) - action.set_product(product) - - for value in self._public: - header = Path.path(TargetConditional.value(value)) - if header is None: - continue - action = Cp(header, self.product.public_headers_path.path_by_appending(header.basename())) - self.actions.append(action) - action.set_product(product) - - for value in self._private: - header = Path.path(TargetConditional.value(value)) - if header is None: - continue - action = Cp(header, self.product.private_headers_path.path_by_appending(header.basename())) - self.actions.append(action) - action.set_product(product) - - for value in self._project: - header = Path.path(TargetConditional.value(value)) - if header is None: - continue - action = Cp(header, self.product.project_headers_path.path_by_appending(header.basename())) - self.actions.append(action) - action.set_product(product) - -class CopyResources(BuildPhase): - _resources = [] - _resourcesDir = None - - def __init__(self, outputDir, resources): - BuildPhase.__init__(self, "CopyResources") - if resources is not None: - self._resources = resources - self._resourcesDir = outputDir - - @property - def product(self): - return self._product - - def set_product(self, product): - BuildAction.set_product(self, product) - self.actions = [] - - for value in self._resources: - resource = Path.path(TargetConditional.value(value)) - if resource is None: - continue - - action = Cp(resource, Configuration.current.build_directory.path_by_appending(self._resourcesDir).path_by_appending(resource.basename())) - self.actions.append(action) - action.set_product(product) - -class CompileSources(BuildPhase): - _sources = [] - def __init__(self, sources): - BuildPhase.__init__(self, "CompileSources") - if sources is not None: - self._sources = sources - - @property - def product(self): - return self._product - - def set_product(self, product): - BuildAction.set_product(self, product) - self.actions = [] - - for value in self._sources: - source = Path.path(TargetConditional.value(value)) - if source is None: - continue - action = CompileSource.compile(source, self) - if action is None: - print("Unable to compile source " + source.absolute()) - assert action is not None - self.actions.append(action) - action.set_product(product) - - @property - def objects(self): - objects = [] - for action in self.actions: - objects.append(action.output.relative()) - return objects - - -class MergeSwiftModule: - name = None - def __init__(self, module): - self.name = module\ - - @property - def output(self): - return Path.path(self.name) - - -class CompileSwiftSources(BuildPhase): - _sources = [] - _module = None - def __init__(self, sources): - BuildPhase.__init__(self, "CompileSwiftSources") - if sources is not None: - self._sources = sources - self.enable_testable_import = False - - @property - def product(self): - return self._product - - def set_product(self, product): - BuildAction.set_product(self, product) - self.actions = [] - - for value in self._sources: - source = Path.path(TargetConditional.value(value)) - if source is None: - continue - action = CompileSource.compile(source, self) - if action is None: - print("Unable to compile source " + source.absolute()) - assert action is not None - self.actions.append(action) - action.set_product(product) - self._module = Configuration.current.build_directory.path_by_appending(self.product.name).path_by_appending(self.product.name + ".swiftmodule") - product.add_dependency(MergeSwiftModule(self._module.relative())) - - def module_sources(self, primary): - modules = [] - for value in self._sources: - source = Path.path(TargetConditional.value(value)) - if source is None: - continue - if source.absolute() != primary: - modules.append(source.relative()) - else: - modules.append("-primary-file") - modules.append(source.relative()) - return modules - - def generate(self): - generated = BuildPhase.generate(self) - generated += "\n\n" - objects = "" - partial_modules = "" - partial_docs = "" - for value in self._sources: - path = Path.path(value) - compiled = Configuration.current.build_directory.path_by_appending(self.product.name).path_by_appending(path.relative() + ".o") - objects += compiled.relative() + " " - partial_modules += compiled.relative() + ".~partial.swiftmodule " - partial_docs += compiled.relative() + ".~partial.swiftdoc " - - testable_import_flags = "" - if self.enable_testable_import: - testable_import_flags = "-enable-testing" - - generated += """ -build """ + self._module.relative() + ": MergeSwiftModule " + objects + """ - partials = """ + partial_modules + """ - module_name = """ + self.product.name + """ - flags = """ + testable_import_flags + " -I" + self.product.public_module_path.relative() + """ """ + TargetConditional.value(self.product.SWIFTCFLAGS) + """ -emit-module-doc-path """ + self._module.parent().path_by_appending(self.product.name).relative() + """.swiftdoc -""" - return generated - - @property - def objects(self): - objects = [] - for action in self.actions: - objects.append(action.output.relative()) - return objects - -# This builds a Swift executable using one invocation of swiftc (no partial compilation) -class SwiftExecutable(BuildPhase): - executableName = None - outputDirectory = None - sources = [] - - def __init__(self, executableName, sources): - BuildAction.__init__(self, output=executableName) - self.executableName = executableName - self.name = executableName - self.sources = sources - self.outputDirectory = executableName - - def generate(self): - appName = Configuration.current.build_directory.relative() + """/""" + self.outputDirectory + """/""" + self.executableName - libDependencyName = self.product.product_name - swiftSources = "" - for value in self.sources: - resource = Path.path(TargetConditional.value(value)) - if resource is None: - continue - swiftSources += " " + resource.relative() - # Note: Fix -swift-version 4 for now. - return """ -build """ + appName + """: SwiftExecutable """ + swiftSources + self.generate_dependencies(libDependencyName) + """ - flags = -swift-version 4 -I""" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + self.product.ROOT_HEADERS_FOLDER_PATH + " -I" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + " -L" + Configuration.current.build_directory.path_by_appending(self.product.name).relative() + " " + TargetConditional.value(self.product.SWIFTCFLAGS) + """ -build """ + self.executableName + """: phony | """ + appName + """ -""" - - - diff --git a/lib/pkg_config.py b/lib/pkg_config.py deleted file mode 100644 index ff3bb452d4..0000000000 --- a/lib/pkg_config.py +++ /dev/null @@ -1,65 +0,0 @@ -from __future__ import print_function - -import shlex -import subprocess -import sys - -from .config import Configuration - - -class PkgConfig(object): - class Error(Exception): - """Raised when information could not be obtained from pkg-config.""" - - def __init__(self, package_name): - """Query pkg-config for information about a package. - - :type package_name: str - :param package_name: The name of the package to query. - :raises PkgConfig.Error: When a call to pkg-config fails. - """ - self.package_name = package_name - self._cflags = self._call("--cflags") - self._cflags_only_I = self._call("--cflags-only-I") - self._cflags_only_other = self._call("--cflags-only-other") - self._libs = self._call("--libs") - self._libs_only_l = self._call("--libs-only-l") - self._libs_only_L = self._call("--libs-only-L") - self._libs_only_other = self._call("--libs-only-other") - - def _call(self, *pkg_config_args): - try: - cmd = [Configuration.current.pkg_config] + list(pkg_config_args) + [self.package_name] - print("Executing command '{}'".format(cmd), file=sys.stderr) - return shlex.split(subprocess.check_output(cmd).decode('utf-8')) - except subprocess.CalledProcessError as e: - raise self.Error("pkg-config exited with error code {}".format(e.returncode)) - - @property - def swiftc_flags(self): - """Flags for this package in a format suitable for passing to `swiftc`. - - :rtype: list[str] - """ - return ( - ["-Xcc {}".format(s) for s in self._cflags_only_other] - + ["-Xlinker {}".format(s) for s in self._libs_only_other] - + self._cflags_only_I - + self._libs_only_L - + self._libs_only_l) - - @property - def cflags(self): - """CFLAGS for this package. - - :rtype: list[str] - """ - return self._cflags - - @property - def ldflags(self): - """LDFLAGS for this package. - - :rtype: list[str] - """ - return self._libs diff --git a/lib/product.py b/lib/product.py deleted file mode 100644 index 2ead36494d..0000000000 --- a/lib/product.py +++ /dev/null @@ -1,236 +0,0 @@ -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -# - -from .config import Configuration -from .phases import CompileC -from .phases import CompileCxx -from .phases import Assemble -from .phases import BuildAction -from .phases import MergeSwiftModule -from .target import OSType -from .path import Path - -import os - -class Product(BuildAction): - name = None - product_name = None - phases = [] - installed_headers = [] - CFLAGS = None - CXXFLAGS = None - LDFLAGS = None - ASFLAGS = None - SWIFTCFLAGS = "" - needs_stdcxx = False - needs_objc = False - GCC_PREFIX_HEADER = None - PUBLIC_HEADERS_FOLDER_PATH = os.path.join("usr", "include") - PUBLIC_MODULE_FOLDER_PATH = os.path.join("usr", "include") - PRIVATE_HEADERS_FOLDER_PATH = os.path.join("usr", "local", "include") - - def __init__(self, name): - self.name = name - - def generate(self): - generated = "\n\n" - for phase in self.phases: - generated += phase.generate() - return generated - - def add_phase(self, phase): - phase.set_product(self) - if len(self.phases) > 0: - phase.previous = self.phases[-1] - self.phases.append(phase) - - @property - def product(self): - return Configuration.current.build_directory.path_by_appending(self.name).path_by_appending(self.product_name) - - @property - def public_module_path(self): - return Path.path(Configuration.current.build_directory.path_by_appending(self.name).absolute() + "/" + self.PUBLIC_MODULE_FOLDER_PATH) - - @property - def public_headers_path(self): - return Path.path(Configuration.current.build_directory.path_by_appending(self.name).absolute() + "/" + self.PUBLIC_HEADERS_FOLDER_PATH) - - @property - def private_headers_path(self): - return Path.path(Configuration.current.build_directory.path_by_appending(self.name).absolute() + "/" + self.PRIVATE_HEADERS_FOLDER_PATH) - - @property - def project_headers_path(self): - return Path.path(Configuration.current.build_directory.path_by_appending(self.name).absolute() + "/" + self.PROJECT_HEADERS_FOLDER_PATH) - -class Library(Product): - runtime_object = '' - rule = None - def __init__(self, name): - Product.__init__(self, name) - - def generate(self, flags, objects = []): - generated = "" - if len(objects) == 0: - generated = Product.generate(self) - for phase in self.phases: - objects += phase.objects - - product_flags = " ".join(flags) - if self.LDFLAGS is not None: - product_flags += " " + self.LDFLAGS - if self.needs_stdcxx: - product_flags += " -lstdc++" - - generated += """ -build """ + self.product.relative() + """: """ + self.rule + """ """ + self.runtime_object + """ """ + " ".join(objects) + """ """ + self.generate_dependencies() + """ - flags = """ + product_flags - if self.needs_objc: - generated += """ - start = ${TARGET_BOOTSTRAP_DIR}/usr/lib/objc-begin.o - end = ${TARGET_BOOTSTRAP_DIR}/usr/lib/objc-end.o -""" - - generated += """ - -build """ + self.product_name + """: phony | """ + self.product.relative() + """ - -default """ + self.product_name + """ - -""" - - return objects, generated - - -class DynamicLibrary(Library): - def __init__(self, name, uses_swift_runtime_object = True): - Library.__init__(self, name) - self.name = name - self.uses_swift_runtime_object = uses_swift_runtime_object - - def generate(self, objects = []): - self.rule = "Link" - self.product_name = Configuration.current.target.dynamic_library_prefix + self.name + Configuration.current.target.dynamic_library_suffix - if (Configuration.current.target.sdk == OSType.Linux or Configuration.current.target.sdk == OSType.FreeBSD) and self.uses_swift_runtime_object: - self.runtime_object = '${SDKROOT}/lib/swift/${OS}/${ARCH}/swiftrt.o' - return Library.generate(self, ["-shared", "-Wl,-soname," + self.product_name, "-Wl,--no-undefined"], objects) - else: - return Library.generate(self, ["-shared"], objects) - - -class Framework(Product): - def __init__(self, name): - Product.__init__(self, name) - self.product_name = name + ".framework" - - @property - def public_module_path(self): - return Configuration.current.build_directory.path_by_appending(self.name).path_by_appending(self.product_name).path_by_appending("Modules") - - @property - def public_headers_path(self): - return Configuration.current.build_directory.path_by_appending(self.name).path_by_appending(self.product_name).path_by_appending("Headers") - - @property - def private_headers_path(self): - return Configuration.current.build_directory.path_by_appending(self.name).path_by_appending(self.product_name).path_by_appending("PrivateHeaders") - - def generate(self): - generated = Product.generate(self) - objects = [] - for phase in self.phases: - objects += phase.objects - product_flags = "-shared -Wl,-soname," + Configuration.current.target.dynamic_library_prefix + self.name + Configuration.current.target.dynamic_library_suffix + " -Wl,--no-undefined" - if self.LDFLAGS is not None: - product_flags += " " + self.LDFLAGS - if self.needs_stdcxx: - product_flags += " -lstdc++" - - generated += """ - -build """ + self.product.path_by_appending(self.name).relative() + """: Link """ + " ".join(objects) + self.generate_dependencies() + """ - flags = """ + product_flags - if self.needs_objc: - generated += """ - start = ${TARGET_BOOTSTRAP_DIR}/usr/lib/objc-begin.o - end = ${TARGET_BOOTSTRAP_DIR}/usr/lib/objc-end.o -""" - - generated += """ -build """ + self.product_name + """: phony | """ + self.product.relative() + """ - -default """ + self.product_name + """ - -build ${TARGET_BOOTSTRAP_DIR}/usr/lib/""" + Configuration.current.target.dynamic_library_prefix + self.name + Configuration.current.target.dynamic_library_suffix + """: Cp """ + self.product.path_by_appending(self.name).relative() + """ -""" - - return generated - -class StaticLibrary(Library): - def __init__(self, name): - Library.__init__(self, name) - self.name = name - - def generate(self, objects = []): - self.rule = "Archive" - self.product_name = Configuration.current.target.static_library_prefix + self.name + Configuration.current.target.static_library_suffix - self.runtime_object = '' - return Library.generate(self, [], objects) - -class StaticAndDynamicLibrary(StaticLibrary, DynamicLibrary): - def __init__(self, name): - StaticLibrary.__init__(self, name) - DynamicLibrary.__init__(self, name) - - def generate(self): - objects, generatedForDynamic = DynamicLibrary.generate(self) - _, generatedForStatic = StaticLibrary.generate(self, objects) - return generatedForDynamic + generatedForStatic - -class Executable(Product): - def __init__(self, name): - Product.__init__(self, name) - self.product_name = name + Configuration.current.target.executable_suffix - - def generate(self): - generated = Product.generate(self) - - return generated - -class Application(Product): - executable = None - def __init__(self, name): - Product.__init__(self, name) - self.product_name = name + ".app" - - def generate(self): - generated = Product.generate(self) - objects = [] - for phase in self.phases: - objects += phase.objects - product_flags = "" - - if self.LDFLAGS is not None: - product_flags += " " + self.LDFLAGS - if self.needs_stdcxx: - product_flags += " -lstdc++" - - - generated += """ -build """ + self.product.path_by_appending(self.name).relative() + ": Link " + " ".join(objects) + self.generate_dependencies() + """ - flags = """ + product_flags - if self.needs_objc: - generated += """ - start = ${TARGET_BOOTSTRAP_DIR}/usr/lib/objc-begin.o - end = ${TARGET_BOOTSTRAP_DIR}/usr/lib/objc-end.o -""" - - return generated - diff --git a/lib/script.py b/lib/script.py deleted file mode 100644 index 8ed08af641..0000000000 --- a/lib/script.py +++ /dev/null @@ -1,274 +0,0 @@ -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -# - -from .config import Configuration -import os - -class Script: - products = [] - workspaces = [] - extra = "" - - def __init__(self): - pass - - def add_product(self, product): - self.workspaces = None - self.products.append(product) - - def add_workspace(self, workspace): - self.products = None - self.workspaces.append(workspace) - - def add_text(self, text): - self.extra += text + "\n\n" - - def generate_products(self): - variables = "" - for key, val in Configuration.current.variables.items(): - variables += key + "=" + val - variables += "\n" - verbose_flags = """ -VERBOSE_FLAGS = """ - if Configuration.current.verbose: - verbose_flags += "-v" - verbose_flags += "\n" - swift_triple = Configuration.current.target.swift_triple - base_flags = """ -TARGET = """ + Configuration.current.target.triple + """ -DSTROOT = """ + Configuration.current.install_directory.absolute() + """ -""" - if swift_triple is not None: - base_flags += """ -SWIFT_TARGET = """ + Configuration.current.target.swift_triple + """ -SWIFT_ARCH = """ + Configuration.current.target.swift_arch + """ -""" - base_flags += """ -MODULE_CACHE_PATH = """ + Configuration.current.module_cache_directory.relative() + """ -BUILD_DIR = """ + Configuration.current.build_directory.relative() + """ -INTERMEDIATE_DIR = """ + Configuration.current.intermediate_directory.relative() + """ -CLANG = """ + Configuration.current.clang + """ -CLANGXX = """ + Configuration.current.clangxx + """ -SWIFT = """ + Configuration.current.swift + """ -SWIFTC = """ + Configuration.current.swiftc + """ -SDKROOT = """ + Configuration.current.swift_sdk + """ -AR = """ + Configuration.current.ar + """ -OS = """ + Configuration.current.target.swift_sdk_name + """ -ARCH = """ + Configuration.current.target.swift_arch + """ -DYLIB_PREFIX = """ + Configuration.current.target.dynamic_library_prefix + """ -DYLIB_SUFFIX = """ + Configuration.current.target.dynamic_library_suffix + """ -STATICLIB_PREFIX = """ + Configuration.current.target.static_library_prefix + """ -STATICLIB_SUFFIX = """ + Configuration.current.target.static_library_suffix + """ -PREFIX = """ + Configuration.current.prefix + """ -""" - if Configuration.current.requires_pkg_config: - base_flags += """ -PKG_CONFIG = """ + Configuration.current.pkg_config + """ -""" - if Configuration.current.system_root is not None: - base_flags += """ -SYSROOT = """ + Configuration.current.system_root.absolute() + """ -""" - base_flags += """ -SRCROOT = """ + Configuration.current.source_root.relative() + """ -BINUTILS_VERSION = 4.8 -TARGET_LDSYSROOT = -""" - - if Configuration.current.bootstrap_directory is not None: - base_flags += """ -BOOTSTRAP_DIR = """ + Configuration.current.bootstrap_directory.relative() + """/common -TARGET_BOOTSTRAP_DIR = """ + Configuration.current.bootstrap_directory.relative() + """/${TARGET} -""" - - c_flags = """ -TARGET_CFLAGS = -fcolor-diagnostics -fdollars-in-identifiers -fblocks -fobjc-runtime=macosx-10.11 -fintegrated-as -fPIC --target=${TARGET} """ - - if Configuration.current.build_mode == Configuration.Debug: - c_flags += "-g -O0 " - elif Configuration.current.build_mode == Configuration.Release: - c_flags += "-O2 " - - if Configuration.current.system_root is not None: - c_flags += "--sysroot=${SYSROOT}" - - if Configuration.current.bootstrap_directory is not None: - c_flags += """ -I${BOOTSTRAP_DIR}/usr/include -I${BOOTSTRAP_DIR}/usr/local/include """ - c_flags += """ -I${TARGET_BOOTSTRAP_DIR}/usr/include -I${TARGET_BOOTSTRAP_DIR}/usr/local/include """ - - c_flags += Configuration.current.extra_c_flags - - swift_flags = "\nTARGET_SWIFTCFLAGS = -I${SDKROOT}/lib/swift/" + Configuration.current.target.swift_sdk_name + " -Xcc -fblocks -resource-dir ${SDKROOT}/lib/swift " - if swift_triple is not None: - swift_flags += "-target ${SWIFT_TARGET} " - if Configuration.current.system_root is not None: - swift_flags += "-sdk ${SYSROOT} " - - if Configuration.current.bootstrap_directory is not None: - swift_flags += """ -I${BOOTSTRAP_DIR}/usr/include -I${BOOTSTRAP_DIR}/usr/local/include """ - swift_flags += """ -I${TARGET_BOOTSTRAP_DIR}/usr/include -I${TARGET_BOOTSTRAP_DIR}/usr/local/include """ - - if Configuration.current.build_mode == Configuration.Debug: - swift_flags += "-g -Onone " - elif Configuration.current.build_mode == Configuration.Release: - swift_flags += "-O " - - swift_flags += Configuration.current.extra_swift_flags - - swift_flags += """ -TARGET_SWIFTEXE_FLAGS = -I${SDKROOT}/lib/swift/""" + Configuration.current.target.swift_sdk_name + """ -L${SDKROOT}/lib/swift/""" + Configuration.current.target.swift_sdk_name + """ """ - if Configuration.current.build_mode == Configuration.Debug: - swift_flags += "-g -Onone -enable-testing -DNS_FOUNDATION_ALLOWS_TESTABLE_IMPORT " - elif Configuration.current.build_mode == Configuration.Release: - swift_flags += " " - swift_flags += Configuration.current.extra_swift_flags - - - - ld_flags = """ -EXTRA_LD_FLAGS = """ + Configuration.current.extra_ld_flags - - ld_flags += """ -TARGET_LDFLAGS = --target=${TARGET} ${EXTRA_LD_FLAGS} -L ${SDKROOT}/lib/swift/""" + Configuration.current.target.swift_sdk_name + """/${ARCH} -L${SDKROOT}/lib/swift/""" + Configuration.current.target.swift_sdk_name + """ """ - if Configuration.current.system_root is not None: - ld_flags += "--sysroot=${SYSROOT}" - - if Configuration.current.bootstrap_directory is not None: - ld_flags += """ -L${TARGET_BOOTSTRAP_DIR}/usr/lib""" - - if Configuration.current.build_mode == Configuration.Debug: - ld_flags += """ -rpath ${SDKROOT}/lib/swift/""" + Configuration.current.target.swift_sdk_name + """ """ - - if Configuration.current.linker is not None: - ld_flags += " -fuse-ld=" + Configuration.current.linker - - if Configuration.current.toolchain is not None: - bin_dir = Configuration.current.toolchain - if not os.path.exists(bin_dir.path_by_appending("ld").relative()): - bin_dir = Configuration.current.toolchain.path_by_appending("bin") - c_flags += " -B" + bin_dir.relative() - ld_flags += " -B" + bin_dir.relative() - - c_flags += "\n" - swift_flags += "\n" - ld_flags += "\n" - - cxx_flags = """ -TARGET_CXXFLAGS = -std=gnu++11 -I${SYSROOT}/usr/include/c++/${BINUTILS_VERSION} -I${SYSROOT}/usr/include/${TARGET}/c++/${BINUTILS_VERSION} -""" - - ar_flags = """ -AR_FLAGS = rcs -""" - - flags = variables + verbose_flags + base_flags + c_flags + swift_flags + cxx_flags + ld_flags + ar_flags - - cp_command = """ -rule Cp - command = mkdir -p `dirname $out`; /bin/cp -r $in $out - description = Cp $in -""" - - compilec_command = """ -rule CompileC - command = mkdir -p `dirname $out`; ${CLANG} ${TARGET_CFLAGS} $flags ${VERBOSE_FLAGS} -c $in -o $out - description = CompileC: $in - -rule CompileCxx - command = mkdir -p `dirname $out`; ${CLANGXX} ${TARGET_CFLAGS} ${TARGET_CXXFLAGS} $flags ${VERBOSE_FLAGS} -c $in -o $out - description = CompileCxx: $in -""" - - swiftc_command = """ -rule CompileSwift - command = mkdir -p `dirname $out`; mkdir -p ${MODULE_CACHE_PATH}; ${SWIFT} -frontend -c $module_sources ${TARGET_SWIFTCFLAGS} $flags -module-name $module_name -module-link-name $module_name -o $out -emit-module-path $out.~partial.swiftmodule -emit-module-doc-path $out.~partial.swiftdoc -emit-dependencies-path $out.d -emit-reference-dependencies-path $out.swiftdeps -module-cache-path ${MODULE_CACHE_PATH} - description = CompileSwift: $in - depfile = $out.d - -rule MergeSwiftModule - command = mkdir -p `dirname $out`; ${SWIFT} -frontend -sil-merge-partial-modules -emit-module $partials ${TARGET_SWIFTCFLAGS} $flags -module-cache-path ${MODULE_CACHE_PATH} -module-link-name $module_name -o $out - description = Merge $out -""" - - assembler_command = """ -rule Assemble - command = mkdir -p `dirname $out`; ${CLANG} -x assembler-with-cpp -c $in -o $out ${TARGET_CFLAGS} $flags ${VERBOSE_FLAGS} - description = Assemble: $in -""" - - link_command = """ -rule Link - command = mkdir -p `dirname $out`; ${CLANG} ${TARGET_LDFLAGS} ${VERBOSE_FLAGS} $start $in $end $flags -o $out""" - if Configuration.current.verbose: - link_command += "-Xlinker --verbose" - link_command += """ - description = Link: $out - -rule Archive - command = mkdir -p `dirname $out`; ${AR} ${AR_FLAGS} $out $in - description = Archive: $out -""" - - swift_build_command = """ -rule SwiftExecutable - command = mkdir -p `dirname $out`; ${SWIFTC} ${TARGET_SWIFTEXE_FLAGS} ${EXTRA_LD_FLAGS} $flags $in -o $out - description = SwiftExecutable: $out -""" - - commands = cp_command + compilec_command + swiftc_command + assembler_command + link_command + swift_build_command - - script = flags + commands - - for product in self.products: - script += "".join([product_build_command for product_build_command in product.generate() if not isinstance(product_build_command, list)]) - - script += """ - -rule RunReconfigure - command = ./configure --reconfigure - description = Reconfiguring build script. - -build ${BUILD_DIR}/.reconfigure: RunReconfigure - -build reconfigure: phony | ${BUILD_DIR}/.reconfigure - -""" - script += self.extra - script += "\n\n" - - return script - - def generate_workspaces(self): - - build_project_command = """ -rule BuildProject - command = pushd $project; ninja; popd -""" - script = build_project_command - - for workspace in self.workspaces: - script += workspace.generate() - - script += "\n\n" - - return script - - def generate(self): - script = None - if self.workspaces is None: - script = self.generate_products() - script_file = open(Configuration.current.build_script_path.absolute(), 'w') - script_file.write(script) - script_file.close() - else: - for workspace in self.workspaces: - workspace.configure() - script = self.generate_workspaces() - - diff --git a/lib/target.py b/lib/target.py deleted file mode 100644 index d1db48b150..0000000000 --- a/lib/target.py +++ /dev/null @@ -1,455 +0,0 @@ -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -# - -from .config import Configuration -import platform - -class ArchType: - UnknownArch = 0 - armv7 = 1 - armeb = 2 - aarch64 = 3 - aarch64_be = 4 - bpfel = 5 - bpfeb = 6 - hexagon = 7 - mips = 8 - mipsel = 9 - mips64 = 10 - mips64el = 11 - msp430 = 12 - ppc = 13 - ppc64 = 14 - ppc64le = 15 - r600 = 16 - amdgcn = 17 - sparc = 18 - sparcv9 = 19 - sparcel = 20 - systemz = 21 - tce = 22 - thumb = 23 - thumbeb = 24 - x86 = 25 - x86_64 = 26 - xcore = 27 - nvptx = 28 - nvptx64 = 29 - le32 = 30 - le64 = 31 - amdil = 32 - amdil64 = 33 - hsail = 34 - hsail64 = 35 - spir = 36 - spir64 = 37 - kalimba = 38 - shave = 39 - armv6 = 40 - s390x = 41 - i686 = 42 -# Do not assume that these are 1:1 mapping. This should follow -# canonical naming conventions for arm, etc. architectures. -# See apple/swift PR #608 - @staticmethod - def to_string(value): - if value == ArchType.armv7: - return "armv7" - if value == ArchType.armv6: - return "armv6" - if value == ArchType.armeb: - return "armeb" - if value == ArchType.aarch64: - return "aarch64" - if value == ArchType.aarch64_be: - return "aarch64_be" - if value == ArchType.bpfel: - return "bpfel" - if value == ArchType.bpfeb: - return "bpfeb" - if value == ArchType.hexagon: - return "hexagon" - if value == ArchType.mips: - return "mips" - if value == ArchType.mipsel: - return "mipsel" - if value == ArchType.mips64: - return "mips64" - if value == ArchType.mips64el: - return "mips64el" - if value == ArchType.msp430: - return "msp430" - if value == ArchType.ppc: - return "powerpc" - if value == ArchType.ppc64: - return "powerpc64" - if value == ArchType.ppc64le: - return "powerpc64le" - if value == ArchType.r600: - return "r600" - if value == ArchType.amdgcn: - return "amdgcn" - if value == ArchType.sparc: - return "sparc" - if value == ArchType.sparcv9: - return "sparcv9" - if value == ArchType.sparcel: - return "sparcel" - if value == ArchType.systemz: - return "systemz" - if value == ArchType.tce: - return "tce" - if value == ArchType.thumb: - return "armv7" - if value == ArchType.thumbeb: - return "thumbeb" - if value == ArchType.x86: - return "i386" - if value == ArchType.i686: - return "i686" - if value == ArchType.x86_64: - return "x86_64" - if value == ArchType.xcore: - return "xcore" - if value == ArchType.nvptx: - return "nvptx" - if value == ArchType.nvptx64: - return "nvptx64" - if value == ArchType.le32: - return "le32" - if value == ArchType.le64: - return "le64" - if value == ArchType.amdil: - return "amdil" - if value == ArchType.amdil64: - return "amdil64" - if value == ArchType.hsail: - return "hsail" - if value == ArchType.hsail64: - return "hsail64" - if value == ArchType.spir: - return "spir" - if value == ArchType.spir64: - return "spir64" - if value == ArchType.kalimba: - return "kalimba" - if value == ArchType.shave: - return "shave" - if value == ArchType.s390x: - return "s390x" - return "unknown" -# Not 1:1, See to_string - @staticmethod - def from_string(string): - if string == "armeb": - return ArchType.armeb - if string == "arm": - return ArchType.armv7 - if string == "armv7": - return ArchType.armv7 - if string == "armv7l": - return ArchType.armv7 - if string == "armv6": - return ArchType.armv6 - if string == "armv6l": - return ArchType.armv6 - if string == "aarch64": - return ArchType.aarch64 - if string == "aarch64_be": - return ArchType.aarch64_be - if string == "bpfel": - return ArchType.bpfel - if string == "bpfeb": - return ArchType.bpfeb - if string == "hexagon": - return ArchType.hexagon - if string == "mips": - return ArchType.mips - if string == "mipsel": - return ArchType.mipsel - if string == "mips64": - return ArchType.mips64 - if string == "mips64el": - return ArchType.mips64el - if string == "msp430": - return ArchType.msp430 - if string == "ppc" or string == "powerpc": - return ArchType.ppc - if string == "ppc64" or string == "powerpc64": - return ArchType.ppc64 - if string == "ppc64le" or string == "powerpc64le": - return ArchType.ppc64le - if string == "r600": - return ArchType.r600 - if string == "amdgcn": - return ArchType.amdgcn - if string == "sparc": - return ArchType.sparc - if string == "sparcv9": - return ArchType.sparcv9 - if string == "sparcel": - return ArchType.sparcel - if string == "systemz": - return ArchType.systemz - if string == "tce": - return ArchType.tce - if string == "thumb": - return ArchType.thumb - if string == "thumbeb": - return ArchType.thumbeb - if string == "x86": - return ArchType.x86 - if string == "i686": - return ArchType.i686 - if string == "x86_64": - return ArchType.x86_64 - if string == "xcore": - return ArchType.xcore - if string == "nvptx": - return ArchType.nvptx - if string == "nvptx64": - return ArchType.nvptx64 - if string == "le32": - return ArchType.le32 - if string == "le64": - return ArchType.le64 - if string == "amdil": - return ArchType.amdil - if string == "amdil64": - return ArchType.amdil64 - if string == "hsail": - return ArchType.hsail - if string == "hsail64": - return ArchType.hsail64 - if string == "spir": - return ArchType.spir - if string == "spir64": - return ArchType.spir64 - if string == "kalimba": - return ArchType.kalimba - if string == "shave": - return ArchType.shave - if string == "s390x": - return ArchType.s390x - - return ArchType.UnknownArch - - -class ArchSubType: - NoSubArch = 0 - ARMSubArch_v8_1a = 1 - ARMSubArch_v8 = 2 - ARMSubArch_v7 = 3 - ARMSubArch_v7em = 4 - ARMSubArch_v7m = 5 - ARMSubArch_v7s = 6 - ARMSubArch_v6 = 7 - ARMSubArch_v6m = 8 - ARMSubArch_v6k = 9 - ARMSubArch_v6t2 = 10 - ARMSubArch_v5 = 11 - ARMSubArch_v5te = 12 - ARMSubArch_v4t = 13 - KalimbaSubArch_v3 = 14 - KalimbaSubArch_v4 = 15 - KalimbaSubArch_v5 = 16 - - -class OSType: - UnknownOS = 0 - CloudABI = 1 - Darwin = 2 - DragonFly = 3 - FreeBSD = 4 - IOS = 5 - KFreeBSD = 6 - Linux = 7 - Lv2 = 8 - MacOSX = 9 - NetBSD = 10 - OpenBSD = 11 - Solaris = 12 - Win32 = 13 - Haiku = 14 - Minix = 15 - RTEMS = 16 - NaCl = 17 - CNK = 18 - Bitrig = 19 - AIX = 20 - CUDA = 21 - NVCL = 22 - AMDHSA = 23 - PS4 = 24 - - -class ObjectFormat: - UnknownObjectFormat = 0 - COFF = 1 - ELF = 2 - MachO = 3 - - -class EnvironmentType: - UnknownEnvironment = 0 - GNU = 1 - GNUEABI = 2 - GNUEABIHF = 3 - GNUX32 = 4 - CODE16 = 5 - EABI = 6 - EABIHF = 7 - Android = 8 - MSVC = 9 - Itanium = 10 - Cygnus = 11 - - -class Vendor: - UnknownVendor = 0 - Apple = 1 - PC = 2 - SCEI = 3 - BGP = 4 - BGQ = 5 - Freescale = 6 - IBM = 7 - ImaginationTechnologies = 8 - MipsTechnologies = 9 - NVIDIA = 10 - CSR = 11 - - -class Target: - triple = None - sdk = None - arch = None - environ = None - executable_suffix = "" - dynamic_library_prefix = "lib" - dynamic_library_suffix = ".dylib" - static_library_prefix = "lib" - static_library_suffix = ".a" - linker = None - - def __init__(self, triple): - if "linux" in triple: - self.sdk = OSType.Linux - self.dynamic_library_suffix = ".so" - self.linker = "gold" - elif "freebsd" in triple: - self.sdk = OSType.FreeBSD - self.dynamic_library_suffix = ".so" - self.linker = "gold" - elif "windows" in triple or "win32" in triple: - self.sdk = OSType.Win32 - self.dynamic_library_suffix = ".dll" - self.executable_suffix = ".exe" - if "cygnus" in triple: - self.environ = EnvironmentType.Cygnus - else: - self.environ = EnvironmentType.UnknownEnvironment - elif "darwin" in triple: - self.sdk = OSType.MacOSX - else: - print("Unknown platform") - - self.triple = triple - - comps = triple.split('-') - self.arch = ArchType.from_string(comps[0]) - - @staticmethod - def default(): - arch = ArchType.from_string(platform.machine()) - triple = ArchType.to_string(arch) - if platform.system() == "Linux": - if (arch == ArchType.armv6) or (arch == ArchType.armv7): - triple += "-linux-gnueabihf" - else: - triple += "-linux-gnu" - elif platform.system() == "Darwin": - triple += "-apple-darwin" - elif platform.system() == "FreeBSD": - # Make this work on 10 as well. - triple += "-freebsd11.0" - elif platform.system() == "CYGWIN_NT-10.0": - triple += "-windows-cygnus" - else: - # TODO: This should be a bit more exhaustive - print("unknown host os") - return None - return triple - - @property - def swift_triple(self): - triple = ArchType.to_string(self.arch) - if self.sdk == OSType.MacOSX: - return None - elif self.sdk == OSType.Linux: - # FIXME: It would be nice to detect the host ABI here - if (self.arch == ArchType.armv6) or (self.arch == ArchType.armv7): - if Configuration.current.target.triple == "armv7-none-linux-androideabi": - triple = Configuration.current.target.triple - else: - triple += "-unknown-linux-gnueabihf" - else: - triple += "-unknown-linux" - elif self.sdk == OSType.FreeBSD: - triple += "-unknown-freebsd" - elif self.sdk == OSType.Win32 and self.environ == EnvironmentType.Cygnus: - triple += "-unknown-windows-cygnus" - else: - print("unknown sdk for swift") - return None - - return triple - - @property - def swift_sdk_name(self): - if self.sdk == OSType.MacOSX: - return "macosx" - elif self.sdk == OSType.Linux and "android" in self.triple: - return "android" - elif self.sdk == OSType.Linux: - return "linux" - elif self.sdk == OSType.FreeBSD: - return "freebsd" - elif self.sdk == OSType.Win32: - return "cygwin" - else: - print("unknown sdk for swift") - return None - - - @property - def swift_arch(self): - return ArchType.to_string(self.arch) - -class TargetConditional: - _sdk = None - _arch = None - _default = None - def __init__(self, sdk = None, arch = None, default = None): - self._sdk = sdk - self._arch = arch - self._default = default - - def evalulate(self, target): - if self._sdk is not None and target.sdk in self._sdk: - return self._sdk[target.sdk] - if self._arch is not None and target.arch in self._arch: - return self._arch[target.arch] - return self._default - - @staticmethod - def value(value): - if type(value) is TargetConditional: - return value.evalulate(Configuration.current.target) - return value diff --git a/lib/workspace.py b/lib/workspace.py deleted file mode 100644 index 5b9958a1df..0000000000 --- a/lib/workspace.py +++ /dev/null @@ -1,59 +0,0 @@ -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -# - -from subprocess import call -from .config import Configuration -from .path import Path -import os - -class Workspace: - projects = [] - def __init__(self, projects): - self.projects = projects - - def configure(self): - if Configuration.current.system_root is None: - Configuration.current.system_root = Path("./sysroots/" + Configuration.current.target.triple) - if Configuration.current.toolchain is None: - Configuration.current.toolchain = Path("./toolchains/" + Configuration.current.target.triple) - if Configuration.current.bootstrap_directory is None: - Configuration.current.bootstrap_directory = Path("./bootstrap") - for project in self.projects: - working_dir = Configuration.current.source_root.path_by_appending(project).absolute() - cmd = [Configuration.current.command[0], "--target", Configuration.current.target.triple] - if Configuration.current.system_root is not None: - cmd.append("--sysroot=" + Configuration.current.system_root.relative(working_dir)) - if Configuration.current.toolchain is not None: - cmd.append("--toolchain=" + Configuration.current.toolchain.relative(working_dir)) - if Configuration.current.bootstrap_directory is not None: - cmd.append("--bootstrap=" + Configuration.current.bootstrap_directory.relative(working_dir)) - - if Configuration.current.verbose: - cmd.append("--verbose") - print("cd " + working_dir) - print(" " + " ".join(cmd)) - status = call(cmd, cwd=working_dir) - if status != 0: - exit(status) # pass the exit value along if one of the sub-configurations fails - - def generate(self): - generated = "" - for project in self.projects: - generated += """ -build """ + os.path.basename(project) + """: BuildProject - project = """ + project + """ - -""" - generated += """ -build all: phony | """ + " ".join(reversed(self.projects)) + """ - -default all -""" - - return generated \ No newline at end of file diff --git a/xcode-build.sh b/xcode-build.sh deleted file mode 100755 index 4bc689ab9c..0000000000 --- a/xcode-build.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash - -DERIVED_DATA=xcode-test-build - -CLEAN=0 -CONFIG=Debug -TEST=0 -TESTCASE="" - -for i in "$@" -do - case $i in - -h) - echo "usage: $0 [--clean] [--debug|--release] [--test]" - exit 0 - ;; - - --clean) - CLEAN=1 - ;; - - --debug) - CONFIG=Debug - ;; - - --release) - CONFIG=Release - ;; - - --test) - TEST=1 -;; - *) - TESTCASE="$i" - break - ;; - esac -done - -if [ $CLEAN = 1 ]; then - echo Cleaning - rm -rf "${DERIVED_DATA}" -fi - -xcodebuild -derivedDataPath $DERIVED_DATA -workspace Foundation.xcworkspace -scheme SwiftFoundation -configuration $CONFIG build || exit 1 -xcodebuild -derivedDataPath $DERIVED_DATA -workspace Foundation.xcworkspace -scheme SwiftFoundationNetworking -configuration $CONFIG build || exit 1 - -if [ $TEST = 1 ]; then - echo Testing - xcodebuild -derivedDataPath $DERIVED_DATA -workspace Foundation.xcworkspace -scheme TestFoundation -configuration $CONFIG build || exit 1 - $DERIVED_DATA/Build/Products/$CONFIG/TestFoundation.app/Contents/MacOS/TestFoundation $TESTCASE -fi - From 8c08801e4287000bf92b628f2afbe240c3fc5179 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Fri, 2 Feb 2024 17:14:31 -0800 Subject: [PATCH 010/198] Ignore swiftpm file --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 16e7ca9f18..0f1cf0ef96 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,4 @@ Build *.swp *.orig .arcconfig +.swiftpm From 9582a2ca6a5bd2d4e40861b94764f15aa08fd2ea Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Fri, 2 Feb 2024 17:15:18 -0800 Subject: [PATCH 011/198] Remove more CMake cruft --- Sources/Foundation/CMakeLists.txt | 218 ------------------------------ Sources/plutil/CMakeLists.txt | 36 ----- 2 files changed, 254 deletions(-) delete mode 100644 Sources/Foundation/CMakeLists.txt delete mode 100644 Sources/plutil/CMakeLists.txt diff --git a/Sources/Foundation/CMakeLists.txt b/Sources/Foundation/CMakeLists.txt deleted file mode 100644 index fc093ce0c8..0000000000 --- a/Sources/Foundation/CMakeLists.txt +++ /dev/null @@ -1,218 +0,0 @@ -add_library(Foundation - AffineTransform.swift - Array.swift - AttributedString/AttributedString.swift - AttributedString/AttributedStringAttribute.swift - AttributedString/AttributedStringCodable.swift - AttributedString/AttributedStringRunCoalescing.swift - AttributedString/AttributedString+Locking.swift - Boxing.swift - Bridging.swift - Bundle.swift - ByteCountFormatter.swift - Calendar.swift - CGFloat.swift - CharacterSet.swift - Codable.swift - Collections+DataProtocol.swift - ContiguousBytes.swift - AttributedString/Conversion.swift - Data.swift - DataProtocol.swift - Date.swift - DateComponents.swift - DateComponentsFormatter.swift - DateFormatter.swift - DateInterval.swift - DateIntervalFormatter.swift - Decimal.swift - Dictionary.swift - DispatchData+DataProtocol.swift - EnergyFormatter.swift - ExtraStringAPIs.swift - FileHandle.swift - FileManager.swift - FileManager+POSIX.swift - FileManager+Win32.swift - FileManager+XDG.swift - Formatter.swift - AttributedString/FoundationAttributes.swift - FoundationErrors.swift - Host.swift - IndexPath.swift - IndexSet.swift - ISO8601DateFormatter.swift - JSONDecoder.swift - JSONEncoder.swift - JSONSerialization.swift - JSONSerialization+Parser.swift - LengthFormatter.swift - Locale.swift - MassFormatter.swift - Measurement.swift - MeasurementFormatter.swift - Morphology.swift - Notification.swift - NotificationQueue.swift - NSArray.swift - NSAttributedString.swift - NSCache.swift - NSCalendar.swift - NSCFArray.swift - NSCFBoolean.swift - NSCFCharacterSet.swift - NSCFDictionary.swift - NSCFSet.swift - NSCFString.swift - NSCFTypeShims.swift - NSCharacterSet.swift - NSCoder.swift - NSComparisonPredicate.swift - NSCompoundPredicate.swift - NSConcreteValue.swift - NSData+DataProtocol.swift - NSData.swift - NSDate.swift - NSDateComponents.swift - NSDecimalNumber.swift - NSDictionary.swift - NSEnumerator.swift - NSError.swift - NSExpression.swift - NSGeometry.swift - NSIndexPath.swift - NSIndexSet.swift - NSKeyedArchiver.swift - NSKeyedArchiverHelpers.swift - NSKeyedCoderOldStyleArray.swift - NSKeyedUnarchiver.swift - NSLocale.swift - NSLock.swift - NSLog.swift - NSMeasurement.swift - NSNotification.swift - NSNull.swift - NSNumber.swift - NSObjCRuntime.swift - NSObject.swift - NSOrderedSet.swift - NSPathUtilities.swift - NSPersonNameComponents.swift - NSPlatform.swift - NSPredicate.swift - NSRange.swift - NSRegularExpression.swift - NSSet.swift - NSSortDescriptor.swift - NSSpecialValue.swift - NSString.swift - NSStringAPI.swift - NSSwiftRuntime.swift - NSTextCheckingResult.swift - NSTimeZone.swift - NSURL.swift - NSURLComponents.swift - NSURLQueryItem.swift - NSURLError.swift - NSUUID.swift - NSValue.swift - NumberFormatter.swift - Operation.swift - PersonNameComponents.swift - PersonNameComponentsFormatter.swift - Pointers+DataProtocol.swift - Port.swift - PortMessage.swift - Process.swift - ProcessInfo.swift - Progress.swift - ProgressFraction.swift - PropertyListEncoder.swift - PropertyListSerialization.swift - ReferenceConvertible.swift - RunLoop.swift - Scanner.swift - ScannerAPI.swift - Set.swift - Stream.swift - String.swift - StringEncodings.swift - Thread.swift - Timer.swift - TimeZone.swift - Unit.swift - URL.swift - URLComponents.swift - URLQueryItem.swift - URLResourceKey.swift - UserDefaults.swift - UUID.swift - WinSDK+Extensions.swift) -target_compile_definitions(Foundation PRIVATE - DEPLOYMENT_RUNTIME_SWIFT) -target_compile_options(Foundation PUBLIC - $<$:-enable-testing> - "SHELL:-Xfrontend -disable-autolink-framework -Xfrontend CoreFoundation" - "SHELL:-Xcc -F${CMAKE_BINARY_DIR}") -target_link_libraries(Foundation - PRIVATE - $<$:CoreFoundationResources> - $<$:Ole32> - $<$:Shell32> - $<$:pathcch> - CoreFoundation - uuid - PUBLIC - swiftDispatch) -set_target_properties(Foundation PROPERTIES - INSTALL_RPATH "$ORIGIN" - BUILD_RPATH "$" - Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift - INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/swift) - -if(NOT BUILD_SHARED_LIBS) - # ICU_I18N_LIBRARY is set by find_package(ICU) in the top level CMakeLists.txt - # It's an absolute path to the found library file - get_target_property(icui18n_path ICU::i18n IMPORTED_LOCATION) - get_filename_component(icu_i18n_basename "${icui18n_path}" NAME_WE) - get_filename_component(icu_i18n_dir "${icui18n_path}" DIRECTORY) - string(REPLACE "lib" "" icu_i18n_basename "${icu_i18n_basename}") - - get_target_property(icuuc_path ICU::uc IMPORTED_LOCATION) - get_filename_component(icu_uc_basename "${icuuc_path}" NAME_WE) - string(REPLACE "lib" "" icu_uc_basename "${icu_uc_basename}") - - get_target_property(icudata_path ICU::data IMPORTED_LOCATION) - get_filename_component(icu_data_basename "${icudata_path}" NAME_WE) - string(REPLACE "lib" "" icu_data_basename "${icu_data_basename}") - - target_compile_options(Foundation - PRIVATE - "SHELL:-Xfrontend -public-autolink-library -Xfrontend ${icu_i18n_basename} - -Xfrontend -public-autolink-library -Xfrontend ${icu_uc_basename} - -Xfrontend -public-autolink-library -Xfrontend ${icu_data_basename} - -Xfrontend -public-autolink-library -Xfrontend BlocksRuntime") - # ICU libraries are linked by absolute library path in this project, - # but -public-autolink-library forces to resolve library path by - # library search path given by -L, so add a directory of icui18n - # in the search path - target_link_directories(Foundation PUBLIC "${icu_i18n_dir}") - - # Merge private dependencies into single static objects archive - set_property(TARGET Foundation PROPERTY STATIC_LIBRARY_OPTIONS - $ - $) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL Windows) - # NOTE: workaround for CMake which doesn't link in OBJECT libraries properly - add_dependencies(Foundation CoreFoundationResources) - target_link_options(Foundation PRIVATE - $) -elseif(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) - target_link_options(Foundation PRIVATE "SHELL:-no-toolchain-stdlib-rpath") -endif() - - -set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS Foundation) -_install_target(Foundation) diff --git a/Sources/plutil/CMakeLists.txt b/Sources/plutil/CMakeLists.txt deleted file mode 100644 index b1c843506a..0000000000 --- a/Sources/plutil/CMakeLists.txt +++ /dev/null @@ -1,36 +0,0 @@ -add_executable(plutil - main.swift) -target_link_libraries(plutil PRIVATE - Foundation) - -# On ELF platforms, remove the absolute rpath to the host toolchain's stdlib, -# then add it back temporarily as a BUILD_RPATH just for the tests. -if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin|Windows") - target_link_options(plutil PRIVATE "SHELL:-no-toolchain-stdlib-rpath") - - string(REPLACE " " ";" ARGS_LIST "${CMAKE_Swift_FLAGS}") - execute_process( - COMMAND ${CMAKE_Swift_COMPILER} ${ARGS_LIST} -print-target-info - OUTPUT_VARIABLE output - ERROR_VARIABLE error_output - RESULT_VARIABLE result - ) - if(NOT ${result} EQUAL 0) - message(FATAL_ERROR "Error getting target info with\n" - " `${CMAKE_Swift_COMPILER} ${CMAKE_Swift_FLAGS} -print-target-info`\n" - "Error:\n" - " ${error_output}") - endif() - - string(REGEX MATCH "\"runtimeLibraryPaths\": \\[\n\ +\"([^\"]+)\"" - path ${output}) - set_target_properties(plutil PROPERTIES BUILD_RPATH ${CMAKE_MATCH_1}) -endif() - -set_target_properties(plutil PROPERTIES - INSTALL_RPATH "$ORIGIN/../lib/swift/$") - - -set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS plutil) -install(TARGETS plutil - DESTINATION ${CMAKE_INSTALL_BINDIR}) From f816f1531052352cb7ab41b7d8a5bdbd9a845a6f Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Sat, 3 Feb 2024 14:21:42 -0800 Subject: [PATCH 012/198] Allow Date in plutil --- Package.swift | 2 +- Sources/plutil/main.swift | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index bcf87638fd..b684ce0125 100644 --- a/Package.swift +++ b/Package.swift @@ -32,7 +32,7 @@ let buildSettings: [CSetting] = [ "-fcf-runtime-abi=swift" // /EHsc for Windows ]), - .unsafeFlags(["-I/usr/lib/swift"]) + .unsafeFlags(["-I/usr/lib/swift"], .when(platforms: [.linux, .android])) ] let package = Package( diff --git a/Sources/plutil/main.swift b/Sources/plutil/main.swift index c9ee783f84..d3f916e415 100644 --- a/Sources/plutil/main.swift +++ b/Sources/plutil/main.swift @@ -290,6 +290,20 @@ extension NSData { } } +extension NSDate { + func display(_ indent: Int = 0, type: DisplayType = .primary) { + let indentation = String(repeating: " ", count: indent * 2) + switch type { + case .primary: + print("\(indentation)\"\(self)\"\n", terminator: "") + case .key: + print("\(indentation)\"\(self)\"", terminator: "") + case .value: + print("\"\(self)\"\n", terminator: "") + } + } +} + func displayPlist(_ plist: Any, indent: Int = 0, type: DisplayType = .primary) { switch plist { case let val as [String : Any]: @@ -304,6 +318,8 @@ func displayPlist(_ plist: Any, indent: Int = 0, type: DisplayType = .primary) { val.display(indent, type: type) case let val as NSData: val.display(indent, type: type) + case let val as NSDate: + val.display(indent, type: type) default: fatalError("unhandled type \(Swift.type(of: plist))") } From 83a1f839fd9068113734ac7240bbba3861b31a53 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Mon, 5 Feb 2024 10:18:51 -0800 Subject: [PATCH 013/198] Moving tests WIP --- Package.swift | 17 +++++++++++- Sources/Foundation/Data.swift | 6 ++++ Tests/CMakeLists.txt | 2 -- Tests/Foundation/FixtureValues.swift | 2 ++ Tests/Foundation/{Tests => }/TestNSData.swift | 26 ++++++++---------- Tests/Foundation/Utilities.swift | 25 +++-------------- {Tests => TestsOld}/Foundation/CMakeLists.txt | 0 .../Foundation/FTPServer.swift | 0 .../Foundation/HTTPServer.swift | 0 {Tests => TestsOld}/Foundation/Imports.swift | 0 .../ByteCountFormatter-AllFieldsSet.archive | Bin .../ByteCountFormatter-Default.archive | Bin .../DateIntervalFormatter-Default.archive | Bin ...valFormatter-ValuesSetWithTemplate.archive | Bin ...Formatter-ValuesSetWithoutTemplate.archive | Bin .../ISO8601DateFormatter-Default.archive | Bin .../ISO8601DateFormatter-OptionsSet.archive | Bin .../macOS-10.14/NSAttributedString.archive | Bin .../macOS-10.14/NSCountedSet-Empty.archive | Bin .../NSCountedSet-NumbersAppearingOnce.archive | Bin ...edSet-NumbersAppearingSeveralTimes.archive | Bin .../macOS-10.14/NSIndexPath-Empty.archive | Bin .../NSIndexPath-ManyIndices.archive | Bin .../macOS-10.14/NSIndexPath-OneIndex.archive | Bin .../macOS-10.14/NSIndexSet-Empty.archive | Bin .../macOS-10.14/NSIndexSet-ManyRanges.archive | Bin .../macOS-10.14/NSIndexSet-OneRange.archive | Bin .../macOS-10.14/NSMeasurement-Angle.archive | Bin .../NSMeasurement-Frequency.archive | Bin .../macOS-10.14/NSMeasurement-Length.archive | Bin .../macOS-10.14/NSMeasurement-Zero.archive | Bin .../NSMutableAttributedString.archive | Bin .../NSMutableIndexSet-Empty.archive | Bin .../NSMutableIndexSet-ManyRanges.archive | Bin .../NSMutableIndexSet-OneRange.archive | Bin .../NSMutableOrderedSet-Empty.archive | Bin .../NSMutableOrderedSet-Numbers.archive | Bin .../macOS-10.14/NSMutableSet-Empty.archive | Bin .../macOS-10.14/NSMutableSet-Numbers.archive | Bin .../macOS-10.14/NSOrderedSet-Empty.archive | Bin .../macOS-10.14/NSOrderedSet-Numbers.archive | Bin .../Fixtures/macOS-10.14/NSSet-Empty.archive | Bin .../macOS-10.14/NSSet-Numbers.archive | Bin .../NSTextCheckingResult-ComplexRegex.archive | Bin ...NSTextCheckingResult-ExtendedRegex.archive | Bin .../NSTextCheckingResult-SimpleRegex.archive | Bin .../NSKeyedUnarchiver-ArrayTest.plist | 0 .../NSKeyedUnarchiver-ComplexTest.plist | Bin .../NSKeyedUnarchiver-ConcreteValueTest.plist | 0 .../NSKeyedUnarchiver-EdgeInsetsTest.plist | 0 .../NSKeyedUnarchiver-NotificationTest.plist | 0 .../NSKeyedUnarchiver-OrderedSetTest.plist | 0 .../NSKeyedUnarchiver-RangeTest.plist | 0 .../NSKeyedUnarchiver-RectTest.plist | 0 .../Resources/NSKeyedUnarchiver-URLTest.plist | 0 .../NSKeyedUnarchiver-UUIDTest.plist | 0 .../Resources/NSString-ISO-8859-1-data.txt | 0 .../Resources/NSString-UTF16-BE-data.txt | Bin .../Resources/NSString-UTF16-LE-data.txt | Bin .../Resources/NSString-UTF32-BE-data.txt | Bin .../Resources/NSString-UTF32-LE-data.txt | Bin .../Foundation/Resources/NSStringTestData.txt | 0 .../Foundation/Resources/NSURLTestData.plist | 0 .../Foundation/Resources/NSXMLDTDTestData.xml | 0 .../Resources/NSXMLDocumentTestData.xml | 0 .../Foundation/Resources/PropertyList-1.0.dtd | 0 .../Resources/TestFileWithZeros.txt | Bin .../Tests/TestAffineTransform.swift | 0 .../Tests/TestAttributedString.swift | 0 .../Tests/TestAttributedStringCOW.swift | 0 .../TestAttributedStringPerformance.swift | 0 .../Tests/TestAttributedStringSupport.swift | 0 .../Foundation/Tests/TestBridging.swift | 0 .../Foundation/Tests/TestBundle.swift | 0 .../Tests/TestByteCountFormatter.swift | 0 .../Tests/TestCachedURLResponse.swift | 0 .../Foundation/Tests/TestCalendar.swift | 0 .../Foundation/Tests/TestCharacterSet.swift | 0 .../Foundation/Tests/TestCodable.swift | 0 .../Tests/TestDataURLProtocol.swift | 0 .../Foundation/Tests/TestDate.swift | 0 .../Foundation/Tests/TestDateComponents.swift | 0 .../Foundation/Tests/TestDateFormatter.swift | 0 .../Foundation/Tests/TestDateInterval.swift | 0 .../Tests/TestDateIntervalFormatter.swift | 0 .../Foundation/Tests/TestDecimal.swift | 0 .../Foundation/Tests/TestDimension.swift | 0 .../Tests/TestEnergyFormatter.swift | 0 .../Foundation/Tests/TestFileHandle.swift | 0 .../Foundation/Tests/TestFileManager.swift | 0 .../Foundation/Tests/TestHTTPCookie.swift | 0 .../Tests/TestHTTPCookieStorage.swift | 0 .../Tests/TestHTTPURLResponse.swift | 0 .../Foundation/Tests/TestHost.swift | 0 .../Tests/TestISO8601DateFormatter.swift | 0 .../Foundation/Tests/TestIndexPath.swift | 0 .../Foundation/Tests/TestIndexSet.swift | 0 .../Foundation/Tests/TestJSONEncoder.swift | 0 .../Tests/TestJSONSerialization.swift | 0 .../Tests/TestLengthFormatter.swift | 0 .../Foundation/Tests/TestMassFormatter.swift | 0 .../Foundation/Tests/TestMeasurement.swift | 0 .../Foundation/Tests/TestNSArray.swift | 0 .../Tests/TestNSAttributedString.swift | 0 .../Foundation/Tests/TestNSCache.swift | 0 .../Foundation/Tests/TestNSCalendar.swift | 0 .../Tests/TestNSCompoundPredicate.swift | 0 .../Tests/TestNSDateComponents.swift | 0 .../Foundation/Tests/TestNSDictionary.swift | 0 .../Foundation/Tests/TestNSError.swift | 0 .../Foundation/Tests/TestNSGeometry.swift | 0 .../Tests/TestNSKeyedArchiver.swift | 0 .../Tests/TestNSKeyedUnarchiver.swift | 0 .../Foundation/Tests/TestNSLocale.swift | 0 .../Foundation/Tests/TestNSLock.swift | 0 .../Foundation/Tests/TestNSNull.swift | 0 .../Foundation/Tests/TestNSNumber.swift | 0 .../Tests/TestNSNumberBridging.swift | 0 .../Foundation/Tests/TestNSOrderedSet.swift | 0 .../Foundation/Tests/TestNSPredicate.swift | 0 .../Foundation/Tests/TestNSRange.swift | 0 .../Tests/TestNSRegularExpression.swift | 0 .../Foundation/Tests/TestNSSet.swift | 0 .../Tests/TestNSSortDescriptor.swift | 0 .../Foundation/Tests/TestNSString.swift | 0 .../Tests/TestNSTextCheckingResult.swift | 0 .../Foundation/Tests/TestNSURL.swift | 0 .../Foundation/Tests/TestNSURLRequest.swift | 0 .../Foundation/Tests/TestNSUUID.swift | 0 .../Foundation/Tests/TestNSValue.swift | 0 .../Foundation/Tests/TestNotification.swift | 0 .../Tests/TestNotificationCenter.swift | 0 .../Tests/TestNotificationQueue.swift | 0 .../Tests/TestNumberFormatter.swift | 0 .../Foundation/Tests/TestObjCRuntime.swift | 0 .../Foundation/Tests/TestOperationQueue.swift | 0 .../Tests/TestPersonNameComponents.swift | 0 .../Foundation/Tests/TestPipe.swift | 0 .../Foundation/Tests/TestProcess.swift | 0 .../Foundation/Tests/TestProcessInfo.swift | 0 .../Foundation/Tests/TestProgress.swift | 0 .../Tests/TestProgressFraction.swift | 0 .../Tests/TestPropertyListEncoder.swift | 0 .../Tests/TestPropertyListSerialization.swift | 0 .../Foundation/Tests/TestRunLoop.swift | 0 .../Foundation/Tests/TestScanner.swift | 0 .../Foundation/Tests/TestSocketPort.swift | 0 .../Foundation/Tests/TestStream.swift | 0 .../Foundation/Tests/TestThread.swift | 0 .../Foundation/Tests/TestTimeZone.swift | 0 .../Foundation/Tests/TestTimer.swift | 0 .../Foundation/Tests/TestURL.swift | 0 .../Foundation/Tests/TestURLCache.swift | 0 .../Foundation/Tests/TestURLComponents.swift | 0 .../Foundation/Tests/TestURLCredential.swift | 0 .../Tests/TestURLCredentialStorage.swift | 0 .../Tests/TestURLProtectionSpace.swift | 0 .../Foundation/Tests/TestURLProtocol.swift | 0 .../Foundation/Tests/TestURLRequest.swift | 0 .../Foundation/Tests/TestURLResponse.swift | 0 .../Foundation/Tests/TestURLSession.swift | 0 .../Foundation/Tests/TestURLSessionFTP.swift | 0 .../Foundation/Tests/TestUUID.swift | 0 .../Foundation/Tests/TestUnit.swift | 0 .../Foundation/Tests/TestUnitConverter.swift | 0 .../Tests/TestUnitInformationStorage.swift | 0 .../Foundation/Tests/TestUnitVolume.swift | 0 .../Foundation/Tests/TestUserDefaults.swift | 0 .../Foundation/Tests/TestUtils.swift | 0 .../Foundation/Tests/TestXMLDocument.swift | 0 .../Foundation/Tests/TestXMLParser.swift | 0 {Tests => TestsOld}/Foundation/main.swift | 0 {Tests => TestsOld}/Tools/CMakeLists.txt | 0 .../Tools/GenerateTestFixtures/CMakeLists.txt | 0 .../GenerateTestFixtures/Utilities.swift | 0 .../Tools/GenerateTestFixtures/main.swift | 0 .../Tools/XDGTestHelper/CMakeLists.txt | 0 .../Tools/XDGTestHelper/Resources/Info.plist | 0 .../Tools/XDGTestHelper/main.swift | 0 179 files changed, 39 insertions(+), 39 deletions(-) delete mode 100644 Tests/CMakeLists.txt rename Tests/Foundation/{Tests => }/TestNSData.swift (99%) rename {Tests => TestsOld}/Foundation/CMakeLists.txt (100%) rename {Tests => TestsOld}/Foundation/FTPServer.swift (100%) rename {Tests => TestsOld}/Foundation/HTTPServer.swift (100%) rename {Tests => TestsOld}/Foundation/Imports.swift (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/ByteCountFormatter-AllFieldsSet.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/ByteCountFormatter-Default.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-Default.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-ValuesSetWithTemplate.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-ValuesSetWithoutTemplate.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/ISO8601DateFormatter-Default.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/ISO8601DateFormatter-OptionsSet.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSAttributedString.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-Empty.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-NumbersAppearingOnce.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-NumbersAppearingSeveralTimes.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-Empty.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-ManyIndices.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-OneIndex.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-Empty.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-ManyRanges.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-OneRange.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Angle.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Frequency.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Length.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Zero.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableAttributedString.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-Empty.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-ManyRanges.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-OneRange.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableOrderedSet-Empty.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableOrderedSet-Numbers.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableSet-Empty.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableSet-Numbers.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSOrderedSet-Empty.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSOrderedSet-Numbers.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSSet-Empty.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSSet-Numbers.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-ComplexRegex.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-ExtendedRegex.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-SimpleRegex.archive (100%) rename {Tests => TestsOld}/Foundation/Resources/NSKeyedUnarchiver-ArrayTest.plist (100%) rename {Tests => TestsOld}/Foundation/Resources/NSKeyedUnarchiver-ComplexTest.plist (100%) rename {Tests => TestsOld}/Foundation/Resources/NSKeyedUnarchiver-ConcreteValueTest.plist (100%) rename {Tests => TestsOld}/Foundation/Resources/NSKeyedUnarchiver-EdgeInsetsTest.plist (100%) rename {Tests => TestsOld}/Foundation/Resources/NSKeyedUnarchiver-NotificationTest.plist (100%) rename {Tests => TestsOld}/Foundation/Resources/NSKeyedUnarchiver-OrderedSetTest.plist (100%) rename {Tests => TestsOld}/Foundation/Resources/NSKeyedUnarchiver-RangeTest.plist (100%) rename {Tests => TestsOld}/Foundation/Resources/NSKeyedUnarchiver-RectTest.plist (100%) rename {Tests => TestsOld}/Foundation/Resources/NSKeyedUnarchiver-URLTest.plist (100%) rename {Tests => TestsOld}/Foundation/Resources/NSKeyedUnarchiver-UUIDTest.plist (100%) rename {Tests => TestsOld}/Foundation/Resources/NSString-ISO-8859-1-data.txt (100%) rename {Tests => TestsOld}/Foundation/Resources/NSString-UTF16-BE-data.txt (100%) rename {Tests => TestsOld}/Foundation/Resources/NSString-UTF16-LE-data.txt (100%) rename {Tests => TestsOld}/Foundation/Resources/NSString-UTF32-BE-data.txt (100%) rename {Tests => TestsOld}/Foundation/Resources/NSString-UTF32-LE-data.txt (100%) rename {Tests => TestsOld}/Foundation/Resources/NSStringTestData.txt (100%) rename {Tests => TestsOld}/Foundation/Resources/NSURLTestData.plist (100%) rename {Tests => TestsOld}/Foundation/Resources/NSXMLDTDTestData.xml (100%) rename {Tests => TestsOld}/Foundation/Resources/NSXMLDocumentTestData.xml (100%) rename {Tests => TestsOld}/Foundation/Resources/PropertyList-1.0.dtd (100%) rename {Tests => TestsOld}/Foundation/Resources/TestFileWithZeros.txt (100%) rename {Tests => TestsOld}/Foundation/Tests/TestAffineTransform.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestAttributedString.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestAttributedStringCOW.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestAttributedStringPerformance.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestAttributedStringSupport.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestBridging.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestBundle.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestByteCountFormatter.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestCachedURLResponse.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestCalendar.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestCharacterSet.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestCodable.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestDataURLProtocol.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestDate.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestDateComponents.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestDateFormatter.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestDateInterval.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestDateIntervalFormatter.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestDecimal.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestDimension.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestEnergyFormatter.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestFileHandle.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestFileManager.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestHTTPCookie.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestHTTPCookieStorage.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestHTTPURLResponse.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestHost.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestISO8601DateFormatter.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestIndexPath.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestIndexSet.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestJSONEncoder.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestJSONSerialization.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestLengthFormatter.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestMassFormatter.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestMeasurement.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSArray.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSAttributedString.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSCache.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSCalendar.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSCompoundPredicate.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSDateComponents.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSDictionary.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSError.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSGeometry.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSKeyedArchiver.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSKeyedUnarchiver.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSLocale.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSLock.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSNull.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSNumber.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSNumberBridging.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSOrderedSet.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSPredicate.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSRange.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSRegularExpression.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSSet.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSSortDescriptor.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSString.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSTextCheckingResult.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSURL.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSURLRequest.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSUUID.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNSValue.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNotification.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNotificationCenter.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNotificationQueue.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestNumberFormatter.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestObjCRuntime.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestOperationQueue.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestPersonNameComponents.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestPipe.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestProcess.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestProcessInfo.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestProgress.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestProgressFraction.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestPropertyListEncoder.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestPropertyListSerialization.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestRunLoop.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestScanner.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestSocketPort.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestStream.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestThread.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestTimeZone.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestTimer.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestURL.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestURLCache.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestURLComponents.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestURLCredential.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestURLCredentialStorage.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestURLProtectionSpace.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestURLProtocol.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestURLRequest.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestURLResponse.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestURLSession.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestURLSessionFTP.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestUUID.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestUnit.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestUnitConverter.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestUnitInformationStorage.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestUnitVolume.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestUserDefaults.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestUtils.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestXMLDocument.swift (100%) rename {Tests => TestsOld}/Foundation/Tests/TestXMLParser.swift (100%) rename {Tests => TestsOld}/Foundation/main.swift (100%) rename {Tests => TestsOld}/Tools/CMakeLists.txt (100%) rename {Tests => TestsOld}/Tools/GenerateTestFixtures/CMakeLists.txt (100%) rename {Tests => TestsOld}/Tools/GenerateTestFixtures/Utilities.swift (100%) rename {Tests => TestsOld}/Tools/GenerateTestFixtures/main.swift (100%) rename {Tests => TestsOld}/Tools/XDGTestHelper/CMakeLists.txt (100%) rename {Tests => TestsOld}/Tools/XDGTestHelper/Resources/Info.plist (100%) rename {Tests => TestsOld}/Tools/XDGTestHelper/main.swift (100%) diff --git a/Package.swift b/Package.swift index b684ce0125..6a24a66605 100644 --- a/Package.swift +++ b/Package.swift @@ -50,6 +50,10 @@ let package = Package( // url: "https://github.com/apple/swift-foundation", // branch: "main" path: "../swift-foundation" + ), + .package( + url: "https://github.com/apple/swift-corelibs-xctest", + branch: "main" ) ], targets: [ @@ -84,6 +88,17 @@ let package = Package( .executableTarget( name: "plutil", dependencies: ["Foundation"] - ) + ), + .testTarget( + name: "TestFoundation", + dependencies: [ + "Foundation", + .product(name: "XCTest", package: "swift-corelibs-xctest"), + ], + resources: [ + .copy("Resources/Info.plist"), + .copy("Resources/NSStringTestData.txt") + ] + ), ] ) diff --git a/Sources/Foundation/Data.swift b/Sources/Foundation/Data.swift index eade2bcbbd..ef944911a8 100644 --- a/Sources/Foundation/Data.swift +++ b/Sources/Foundation/Data.swift @@ -29,6 +29,12 @@ extension Data { } } +extension Data { + public init(referencing d: NSData) { + self = Data(d) + } +} + // TODO: Allow bridging via protocol extension Data /*: _ObjectiveCBridgeable */ { @_semantics("convertToObjectiveC") diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt deleted file mode 100644 index f0867dd3e7..0000000000 --- a/Tests/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -add_subdirectory(Tools) -add_subdirectory(Foundation) diff --git a/Tests/Foundation/FixtureValues.swift b/Tests/Foundation/FixtureValues.swift index 69fb050de6..0a8799f369 100644 --- a/Tests/Foundation/FixtureValues.swift +++ b/Tests/Foundation/FixtureValues.swift @@ -14,6 +14,8 @@ import Foundation #endif +import XCTest + // ----- extension Calendar { diff --git a/Tests/Foundation/Tests/TestNSData.swift b/Tests/Foundation/TestNSData.swift similarity index 99% rename from Tests/Foundation/Tests/TestNSData.swift rename to Tests/Foundation/TestNSData.swift index 2c84f63360..1fee17f19b 100644 --- a/Tests/Foundation/Tests/TestNSData.swift +++ b/Tests/Foundation/TestNSData.swift @@ -7,17 +7,11 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +import XCTest import CoreFoundation +@testable import Foundation -#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT - #if canImport(SwiftFoundation) && !DEPLOYMENT_RUNTIME_OBJC - @testable import SwiftFoundation - #else - @testable import Foundation - #endif -#endif - -class TestNSData: LoopbackServerTest { +class TestNSData: XCTestCase { class AllOnesImmutableData : NSData { private var _length : Int @@ -198,7 +192,7 @@ class TestNSData: LoopbackServerTest { ("test_contentsOfFile", test_contentsOfFile), ("test_contentsOfZeroFile", test_contentsOfZeroFile), ("test_wrongSizedFile", test_wrongSizedFile), - ("test_contentsOfURL", test_contentsOfURL), + //("test_contentsOfURL", test_contentsOfURL), ("test_basicReadWrite", test_basicReadWrite), ("test_bufferSizeCalculation", test_bufferSizeCalculation), ("test_dataHash", test_dataHash), @@ -557,7 +551,7 @@ class TestNSData: LoopbackServerTest { } func test_writeToURLOptions() { - let saveData = try! Data(contentsOf: testBundle().url(forResource: "Test", withExtension: "plist")!) + let saveData = try! Data(contentsOf: Bundle.main.url(forResource: "Test", withExtension: "plist")!) let savePath = URL(fileURLWithPath: NSTemporaryDirectory() + "Test1.plist") do { try saveData.write(to: savePath, options: .atomic) @@ -1099,7 +1093,7 @@ class TestNSData: LoopbackServerTest { } func test_initNSMutableDataContentsOf() { - let testDir = testBundle().resourcePath + let testDir = Bundle.main.resourcePath let filename = testDir!.appending("/NSStringTestData.txt") let url = URL(fileURLWithPath: filename) @@ -1657,7 +1651,7 @@ extension TestNSData { func test_base64DataDecode_small() { let dataEncoded = "SGVsbG8sIG5ldyBXb3JsZA==".data(using: .utf8)! let dataDecoded = NSData(base64Encoded: dataEncoded)! - let string = (dataDecoded as Data).withUnsafeBytes { buffer in + let string = Data(referencing: dataDecoded).withUnsafeBytes { buffer in return String(bytes: buffer, encoding: .utf8) } XCTAssertEqual("Hello, new World", string, "trivial base64 decoding should work") @@ -1683,7 +1677,7 @@ extension TestNSData { func test_base64DataDecode_medium() { let dataEncoded = "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gVXQgYXQgdGluY2lkdW50IGFyY3UuIFN1c3BlbmRpc3NlIG5lYyBzb2RhbGVzIGVyYXQsIHNpdCBhbWV0IGltcGVyZGlldCBpcHN1bS4gRXRpYW0gc2VkIG9ybmFyZSBmZWxpcy4gTnVuYyBtYXVyaXMgdHVycGlzLCBiaWJlbmR1bSBub24gbGVjdHVzIHF1aXMsIG1hbGVzdWFkYSBwbGFjZXJhdCB0dXJwaXMuIE5hbSBhZGlwaXNjaW5nIG5vbiBtYXNzYSBldCBzZW1wZXIuIE51bGxhIGNvbnZhbGxpcyBzZW1wZXIgYmliZW5kdW0uIEFsaXF1YW0gZGljdHVtIG51bGxhIGN1cnN1cyBtaSB1bHRyaWNpZXMsIGF0IHRpbmNpZHVudCBtaSBzYWdpdHRpcy4gTnVsbGEgZmF1Y2lidXMgYXQgZHVpIHF1aXMgc29kYWxlcy4gTW9yYmkgcnV0cnVtLCBkdWkgaWQgdWx0cmljZXMgdmVuZW5hdGlzLCBhcmN1IHVybmEgZWdlc3RhcyBmZWxpcywgdmVsIHN1c2NpcGl0IG1hdXJpcyBhcmN1IHF1aXMgcmlzdXMuIE51bmMgdmVuZW5hdGlzIGxpZ3VsYSBhdCBvcmNpIHRyaXN0aXF1ZSwgZXQgbWF0dGlzIHB1cnVzIHB1bHZpbmFyLiBFdGlhbSB1bHRyaWNpZXMgZXN0IG9kaW8uIE51bmMgZWxlaWZlbmQgbWFsZXN1YWRhIGp1c3RvLCBuZWMgZXVpc21vZCBzZW0gdWx0cmljZXMgcXVpcy4gRXRpYW0gbmVjIG5pYmggc2l0IGFtZXQgbG9yZW0gZmF1Y2lidXMgZGFwaWJ1cyBxdWlzIG5lYyBsZW8uIFByYWVzZW50IHNpdCBhbWV0IG1hdXJpcyB2ZWwgbGFjdXMgaGVuZHJlcml0IHBvcnRhIG1vbGxpcyBjb25zZWN0ZXR1ciBtaS4gRG9uZWMgZWdldCB0b3J0b3IgZHVpLiBNb3JiaSBpbXBlcmRpZXQsIGFyY3Ugc2l0IGFtZXQgZWxlbWVudHVtIGludGVyZHVtLCBxdWFtIG5pc2wgdGVtcG9yIHF1YW0sIHZpdGFlIGZldWdpYXQgYXVndWUgcHVydXMgc2VkIGxhY3VzLiBJbiBhYyB1cm5hIGFkaXBpc2NpbmcgcHVydXMgdmVuZW5hdGlzIHZvbHV0cGF0IHZlbCBldCBtZXR1cy4gTnVsbGFtIG5lYyBhdWN0b3IgcXVhbS4gUGhhc2VsbHVzIHBvcnR0aXRvciBmZWxpcyBhYyBuaWJoIGdyYXZpZGEgc3VzY2lwaXQgdGVtcHVzIGF0IGFudGUuIE51bmMgcGVsbGVudGVzcXVlIGlhY3VsaXMgc2FwaWVuIGEgbWF0dGlzLiBBZW5lYW4gZWxlaWZlbmQgZG9sb3Igbm9uIG51bmMgbGFvcmVldCwgbm9uIGRpY3R1bSBtYXNzYSBhbGlxdWFtLiBBZW5lYW4gcXVpcyB0dXJwaXMgYXVndWUuIFByYWVzZW50IGF1Z3VlIGxlY3R1cywgbW9sbGlzIG5lYyBlbGVtZW50dW0gZXUsIGRpZ25pc3NpbSBhdCB2ZWxpdC4gVXQgY29uZ3VlIG5lcXVlIGlkIHVsbGFtY29ycGVyIHBlbGxlbnRlc3F1ZS4gTWFlY2VuYXMgZXVpc21vZCBpbiBlbGl0IGV1IHZlaGljdWxhLiBOdWxsYW0gdHJpc3RpcXVlIGR1aSBudWxsYSwgbmVjIGNvbnZhbGxpcyBtZXR1cyBzdXNjaXBpdCBlZ2V0LiBDcmFzIHNlbXBlciBhdWd1ZSBuZWMgY3Vyc3VzIGJsYW5kaXQuIE51bGxhIHJob25jdXMgZXQgb2RpbyBxdWlzIGJsYW5kaXQuIFByYWVzZW50IGxvYm9ydGlzIGRpZ25pc3NpbSB2ZWxpdCB1dCBwdWx2aW5hci4gRHVpcyBpbnRlcmR1bSBxdWFtIGFkaXBpc2NpbmcgZG9sb3Igc2VtcGVyIHNlbXBlci4gTnVuYyBiaWJlbmR1bSBjb252YWxsaXMgZHVpLCBlZ2V0IG1vbGxpcyBtYWduYSBoZW5kcmVyaXQgZXQuIE1vcmJpIGZhY2lsaXNpcywgYXVndWUgZXUgZnJpbmdpbGxhIGNvbnZhbGxpcywgbWF1cmlzIGVzdCBjdXJzdXMgZG9sb3IsIGV1IHBvc3VlcmUgb2RpbyBudW5jIHF1aXMgb3JjaS4gVXQgZXUganVzdG8gc2VtLiBQaGFzZWxsdXMgdXQgZXJhdCByaG9uY3VzLCBmYXVjaWJ1cyBhcmN1IHZpdGFlLCB2dWxwdXRhdGUgZXJhdC4gQWxpcXVhbSBuZWMgbWFnbmEgdml2ZXJyYSwgaW50ZXJkdW0gZXN0IHZpdGFlLCByaG9uY3VzIHNhcGllbi4gRHVpcyB0aW5jaWR1bnQgdGVtcG9yIGlwc3VtIHV0IGRhcGlidXMuIE51bGxhbSBjb21tb2RvIHZhcml1cyBtZXR1cywgc2VkIHNvbGxpY2l0dWRpbiBlcm9zLiBFdGlhbSBuZWMgb2RpbyBldCBkdWkgdGVtcG9yIGJsYW5kaXQgcG9zdWVyZS4=".data(using: .utf8)! let dataDecoded = NSData(base64Encoded: dataEncoded)! - let string = (dataDecoded as Data).withUnsafeBytes { buffer in + let string = Data(referencing: dataDecoded).withUnsafeBytes { buffer in return String(bytes: buffer, encoding: .utf8) } XCTAssertEqual("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut at tincidunt arcu. Suspendisse nec sodales erat, sit amet imperdiet ipsum. Etiam sed ornare felis. Nunc mauris turpis, bibendum non lectus quis, malesuada placerat turpis. Nam adipiscing non massa et semper. Nulla convallis semper bibendum. Aliquam dictum nulla cursus mi ultricies, at tincidunt mi sagittis. Nulla faucibus at dui quis sodales. Morbi rutrum, dui id ultrices venenatis, arcu urna egestas felis, vel suscipit mauris arcu quis risus. Nunc venenatis ligula at orci tristique, et mattis purus pulvinar. Etiam ultricies est odio. Nunc eleifend malesuada justo, nec euismod sem ultrices quis. Etiam nec nibh sit amet lorem faucibus dapibus quis nec leo. Praesent sit amet mauris vel lacus hendrerit porta mollis consectetur mi. Donec eget tortor dui. Morbi imperdiet, arcu sit amet elementum interdum, quam nisl tempor quam, vitae feugiat augue purus sed lacus. In ac urna adipiscing purus venenatis volutpat vel et metus. Nullam nec auctor quam. Phasellus porttitor felis ac nibh gravida suscipit tempus at ante. Nunc pellentesque iaculis sapien a mattis. Aenean eleifend dolor non nunc laoreet, non dictum massa aliquam. Aenean quis turpis augue. Praesent augue lectus, mollis nec elementum eu, dignissim at velit. Ut congue neque id ullamcorper pellentesque. Maecenas euismod in elit eu vehicula. Nullam tristique dui nulla, nec convallis metus suscipit eget. Cras semper augue nec cursus blandit. Nulla rhoncus et odio quis blandit. Praesent lobortis dignissim velit ut pulvinar. Duis interdum quam adipiscing dolor semper semper. Nunc bibendum convallis dui, eget mollis magna hendrerit et. Morbi facilisis, augue eu fringilla convallis, mauris est cursus dolor, eu posuere odio nunc quis orci. Ut eu justo sem. Phasellus ut erat rhoncus, faucibus arcu vitae, vulputate erat. Aliquam nec magna viverra, interdum est vitae, rhoncus sapien. Duis tincidunt tempor ipsum ut dapibus. Nullam commodo varius metus, sed sollicitudin eros. Etiam nec odio et dui tempor blandit posuere.", string, "medium base64 decoding should work") @@ -1702,7 +1696,7 @@ extension TestNSData { } func test_contentsOfFile() { - let testDir = testBundle().resourcePath + let testDir = Bundle.main.resourcePath let filename = testDir!.appending("/NSStringTestData.txt") let contents = NSData(contentsOfFile: filename) @@ -1758,6 +1752,7 @@ extension TestNSData { #endif } +#if ENABLE_DATA_NETWORKING_TESTS func test_contentsOfURL() throws { do { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/country.txt" @@ -1798,6 +1793,7 @@ extension TestNSData { } } } +#endif func test_basicReadWrite() { let url = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true).appendingPathComponent("testfile") diff --git a/Tests/Foundation/Utilities.swift b/Tests/Foundation/Utilities.swift index 14d6eee3b0..3e9272fd4d 100644 --- a/Tests/Foundation/Utilities.swift +++ b/Tests/Foundation/Utilities.swift @@ -7,25 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -#if DARWIN_COMPATIBILITY_TESTS -public typealias XCTestCaseEntry = (testCaseClass: XCTestCase.Type, allTests: [(String, XCTestCaseClosure)]) -public typealias XCTestCaseClosure = (XCTestCase) throws -> Void - -public func testCase(_ allTests: [(String, (T) -> () throws -> Void)]) -> XCTestCaseEntry { - let tests: [(String, XCTestCaseClosure)] = allTests.map { ($0.0, test($0.1)) } - return (T.self, tests) -} - -private func test(_ testFunc: @escaping (T) -> () throws -> Void) -> XCTestCaseClosure { - return { testCaseType in - guard let testCase = testCaseType as? T else { - fatalError("Attempt to invoke test on class \(T.self) with incompatible instance type \(type(of: testCaseType))") - } - - try testFunc(testCase)() - } -} -#endif +import XCTest func checkHashing_ValueType( @@ -233,7 +215,7 @@ func expectNoChanges(_ check: @autoclosure () -> T, by differe extension Fixture where ValueType: NSObject & NSCoding { func loadEach(handler: (ValueType, FixtureVariant) throws -> Void) throws { - try self.loadEach(fixtureRepository: try XCTUnwrap(testBundle().url(forResource: "Fixtures", withExtension: nil)), handler: handler) + try self.loadEach(fixtureRepository: try XCTUnwrap(Bundle.main.url(forResource: "Fixtures", withExtension: nil)), handler: handler) } func assertLoadedValuesMatch(_ matchHandler: (ValueType, ValueType) -> Bool = { $0 == $1 }) throws { @@ -697,7 +679,8 @@ public func withTemporaryDirectory(functionName: String = #function, block: ( // Create the temporary directory as one level so that it doesnt leave a directory hierarchy on the filesystem // eg tmp dir will be something like: /tmp/TestFoundation-test_name-BE16B2FF-37FA-4F70-8A84-923D1CC2A860 - let fname = testBundleName() + "-" + String(functionName[.. Date: Tue, 6 Feb 2024 13:55:39 -0800 Subject: [PATCH 014/198] Got one test building --- Package.swift | 26 +- Sources/XCTest/Private/ArgumentParser.swift | 72 +++ Sources/XCTest/Private/IgnoredErrors.swift | 67 +++ Sources/XCTest/Private/ObjectWrapper.swift | 27 + Sources/XCTest/Private/PerformanceMeter.swift | 202 ++++++++ Sources/XCTest/Private/PrintObserver.swift | 98 ++++ Sources/XCTest/Private/SourceLocation.swift | 43 ++ Sources/XCTest/Private/TestFiltering.swift | 72 +++ Sources/XCTest/Private/TestListing.swift | 100 ++++ Sources/XCTest/Private/WaiterManager.swift | 145 ++++++ .../XCTest/Private/WallClockTimeMetric.swift | 79 +++ .../XCTestCase.TearDownBlocksState.swift | 44 ++ Sources/XCTest/Private/XCTestCaseSuite.swift | 38 ++ .../Private/XCTestInternalObservation.swift | 35 ++ .../XCTNSNotificationExpectation.swift | 116 +++++ .../XCTNSPredicateExpectation.swift | 135 +++++ .../Asynchronous/XCTWaiter+Validation.swift | 89 ++++ .../Public/Asynchronous/XCTWaiter.swift | 481 ++++++++++++++++++ .../XCTestCase+Asynchronous.swift | 267 ++++++++++ .../Asynchronous/XCTestExpectation.swift | 322 ++++++++++++ Sources/XCTest/Public/XCAbstractTest.swift | 81 +++ Sources/XCTest/Public/XCTAssert.swift | 444 ++++++++++++++++ Sources/XCTest/Public/XCTSkip.swift | 116 +++++ .../Public/XCTestCase+Performance.swift | 176 +++++++ Sources/XCTest/Public/XCTestCase.swift | 378 ++++++++++++++ Sources/XCTest/Public/XCTestCaseRun.swift | 51 ++ Sources/XCTest/Public/XCTestErrors.swift | 45 ++ Sources/XCTest/Public/XCTestMain.swift | 173 +++++++ Sources/XCTest/Public/XCTestObservation.swift | 73 +++ .../Public/XCTestObservationCenter.swift | 94 ++++ Sources/XCTest/Public/XCTestRun.swift | 186 +++++++ Sources/XCTest/Public/XCTestSuite.swift | 65 +++ Sources/XCTest/Public/XCTestSuiteRun.swift | 66 +++ .../Foundation/FTPServer.swift | 0 .../Foundation/HTTPServer.swift | 0 {TestsOld => Tests}/Foundation/Imports.swift | 0 .../ByteCountFormatter-AllFieldsSet.archive | Bin .../ByteCountFormatter-Default.archive | Bin .../DateIntervalFormatter-Default.archive | Bin ...valFormatter-ValuesSetWithTemplate.archive | Bin ...Formatter-ValuesSetWithoutTemplate.archive | Bin .../ISO8601DateFormatter-Default.archive | Bin .../ISO8601DateFormatter-OptionsSet.archive | Bin .../macOS-10.14/NSAttributedString.archive | Bin .../macOS-10.14/NSCountedSet-Empty.archive | Bin .../NSCountedSet-NumbersAppearingOnce.archive | Bin ...edSet-NumbersAppearingSeveralTimes.archive | Bin .../macOS-10.14/NSIndexPath-Empty.archive | Bin .../NSIndexPath-ManyIndices.archive | Bin .../macOS-10.14/NSIndexPath-OneIndex.archive | Bin .../macOS-10.14/NSIndexSet-Empty.archive | Bin .../macOS-10.14/NSIndexSet-ManyRanges.archive | Bin .../macOS-10.14/NSIndexSet-OneRange.archive | Bin .../macOS-10.14/NSMeasurement-Angle.archive | Bin .../NSMeasurement-Frequency.archive | Bin .../macOS-10.14/NSMeasurement-Length.archive | Bin .../macOS-10.14/NSMeasurement-Zero.archive | Bin .../NSMutableAttributedString.archive | Bin .../NSMutableIndexSet-Empty.archive | Bin .../NSMutableIndexSet-ManyRanges.archive | Bin .../NSMutableIndexSet-OneRange.archive | Bin .../NSMutableOrderedSet-Empty.archive | Bin .../NSMutableOrderedSet-Numbers.archive | Bin .../macOS-10.14/NSMutableSet-Empty.archive | Bin .../macOS-10.14/NSMutableSet-Numbers.archive | Bin .../macOS-10.14/NSOrderedSet-Empty.archive | Bin .../macOS-10.14/NSOrderedSet-Numbers.archive | Bin .../Fixtures/macOS-10.14/NSSet-Empty.archive | Bin .../macOS-10.14/NSSet-Numbers.archive | Bin .../NSTextCheckingResult-ComplexRegex.archive | Bin ...NSTextCheckingResult-ExtendedRegex.archive | Bin .../NSTextCheckingResult-SimpleRegex.archive | Bin .../NSKeyedUnarchiver-ArrayTest.plist | 0 .../NSKeyedUnarchiver-ComplexTest.plist | Bin .../NSKeyedUnarchiver-ConcreteValueTest.plist | 0 .../NSKeyedUnarchiver-EdgeInsetsTest.plist | 0 .../NSKeyedUnarchiver-NotificationTest.plist | 0 .../NSKeyedUnarchiver-OrderedSetTest.plist | 0 .../NSKeyedUnarchiver-RangeTest.plist | 0 .../NSKeyedUnarchiver-RectTest.plist | 0 .../Resources/NSKeyedUnarchiver-URLTest.plist | 0 .../NSKeyedUnarchiver-UUIDTest.plist | 0 .../Resources/NSString-ISO-8859-1-data.txt | 0 .../Resources/NSString-UTF16-BE-data.txt | Bin .../Resources/NSString-UTF16-LE-data.txt | Bin .../Resources/NSString-UTF32-BE-data.txt | Bin .../Resources/NSString-UTF32-LE-data.txt | Bin .../Foundation/Resources/NSStringTestData.txt | 0 .../Foundation/Resources/NSURLTestData.plist | 0 .../Foundation/Resources/NSXMLDTDTestData.xml | 0 .../Resources/NSXMLDocumentTestData.xml | 0 .../Foundation/Resources/PropertyList-1.0.dtd | 0 .../Resources/TestFileWithZeros.txt | Bin .../Foundation}/TestAffineTransform.swift | 0 .../Foundation}/TestAttributedString.swift | 0 .../Foundation}/TestAttributedStringCOW.swift | 0 .../TestAttributedStringPerformance.swift | 0 .../TestAttributedStringSupport.swift | 0 .../Foundation}/TestBridging.swift | 0 .../Foundation}/TestBundle.swift | 0 .../Foundation}/TestByteCountFormatter.swift | 0 .../Foundation}/TestCachedURLResponse.swift | 0 .../Foundation}/TestCalendar.swift | 0 .../Foundation}/TestCharacterSet.swift | 0 .../Foundation}/TestCodable.swift | 0 .../Foundation}/TestDataURLProtocol.swift | 0 .../Tests => Tests/Foundation}/TestDate.swift | 0 .../Foundation}/TestDateComponents.swift | 0 .../Foundation}/TestDateFormatter.swift | 0 .../Foundation}/TestDateInterval.swift | 0 .../TestDateIntervalFormatter.swift | 0 .../Foundation}/TestDecimal.swift | 0 .../Foundation}/TestDimension.swift | 0 .../Foundation}/TestEnergyFormatter.swift | 0 .../Foundation}/TestFileHandle.swift | 0 .../Foundation}/TestFileManager.swift | 0 .../Foundation}/TestHTTPCookie.swift | 0 .../Foundation}/TestHTTPCookieStorage.swift | 0 .../Foundation}/TestHTTPURLResponse.swift | 0 .../Tests => Tests/Foundation}/TestHost.swift | 0 .../TestISO8601DateFormatter.swift | 0 .../Foundation}/TestIndexPath.swift | 0 .../Foundation}/TestIndexSet.swift | 0 .../Foundation}/TestJSONEncoder.swift | 0 .../Foundation}/TestJSONSerialization.swift | 0 .../Foundation}/TestLengthFormatter.swift | 0 .../Foundation}/TestMassFormatter.swift | 0 .../Foundation}/TestMeasurement.swift | 0 .../Foundation}/TestNSArray.swift | 0 .../Foundation}/TestNSAttributedString.swift | 0 .../Foundation}/TestNSCache.swift | 0 .../Foundation}/TestNSCalendar.swift | 0 .../Foundation}/TestNSCompoundPredicate.swift | 0 Tests/Foundation/TestNSData.swift | 2 +- .../Foundation}/TestNSDateComponents.swift | 0 .../Foundation}/TestNSDictionary.swift | 0 .../Foundation}/TestNSError.swift | 0 .../Foundation}/TestNSGeometry.swift | 0 .../Foundation}/TestNSKeyedArchiver.swift | 0 .../Foundation}/TestNSKeyedUnarchiver.swift | 0 .../Foundation}/TestNSLocale.swift | 0 .../Foundation}/TestNSLock.swift | 0 .../Foundation}/TestNSNull.swift | 0 .../Foundation}/TestNSNumber.swift | 0 .../Foundation}/TestNSNumberBridging.swift | 0 .../Foundation}/TestNSOrderedSet.swift | 0 .../Foundation}/TestNSPredicate.swift | 0 .../Foundation}/TestNSRange.swift | 0 .../Foundation}/TestNSRegularExpression.swift | 0 .../Foundation}/TestNSSet.swift | 0 .../Foundation}/TestNSSortDescriptor.swift | 0 .../Foundation}/TestNSString.swift | 0 .../TestNSTextCheckingResult.swift | 0 .../Foundation}/TestNSURL.swift | 0 .../Foundation}/TestNSURLRequest.swift | 0 .../Foundation}/TestNSUUID.swift | 0 .../Foundation}/TestNSValue.swift | 0 .../Foundation}/TestNotification.swift | 0 .../Foundation}/TestNotificationCenter.swift | 0 .../Foundation}/TestNotificationQueue.swift | 0 .../Foundation}/TestNumberFormatter.swift | 0 .../Foundation}/TestObjCRuntime.swift | 0 .../Foundation}/TestOperationQueue.swift | 0 .../TestPersonNameComponents.swift | 0 .../Tests => Tests/Foundation}/TestPipe.swift | 0 .../Foundation}/TestProcess.swift | 0 .../Foundation}/TestProcessInfo.swift | 0 .../Foundation}/TestProgress.swift | 0 .../Foundation}/TestProgressFraction.swift | 0 .../Foundation}/TestPropertyListEncoder.swift | 0 .../TestPropertyListSerialization.swift | 0 .../Foundation}/TestRunLoop.swift | 0 .../Foundation}/TestScanner.swift | 0 .../Foundation}/TestSocketPort.swift | 0 .../Foundation}/TestStream.swift | 0 .../Foundation}/TestThread.swift | 0 .../Foundation}/TestTimeZone.swift | 0 .../Foundation}/TestTimer.swift | 0 .../Tests => Tests/Foundation}/TestURL.swift | 0 .../Foundation}/TestURLCache.swift | 0 .../Foundation}/TestURLComponents.swift | 0 .../Foundation}/TestURLCredential.swift | 0 .../TestURLCredentialStorage.swift | 0 .../Foundation}/TestURLProtectionSpace.swift | 0 .../Foundation}/TestURLProtocol.swift | 0 .../Foundation}/TestURLRequest.swift | 0 .../Foundation}/TestURLResponse.swift | 0 .../Foundation}/TestURLSession.swift | 0 .../Foundation}/TestURLSessionFTP.swift | 0 .../Tests => Tests/Foundation}/TestUUID.swift | 0 .../Tests => Tests/Foundation}/TestUnit.swift | 0 .../Foundation}/TestUnitConverter.swift | 0 .../TestUnitInformationStorage.swift | 0 .../Foundation}/TestUnitVolume.swift | 0 .../Foundation}/TestUserDefaults.swift | 0 .../Foundation}/TestUtils.swift | 0 .../Foundation}/TestXMLDocument.swift | 0 .../Foundation}/TestXMLParser.swift | 0 TestsOld/Foundation/CMakeLists.txt | 191 ------- TestsOld/Foundation/main.swift | 149 ------ TestsOld/Tools/CMakeLists.txt | 2 - .../Tools/GenerateTestFixtures/CMakeLists.txt | 6 - .../GenerateTestFixtures/Utilities.swift | 30 -- .../Tools/GenerateTestFixtures/main.swift | 77 --- TestsOld/Tools/XDGTestHelper/CMakeLists.txt | 12 - .../Tools/XDGTestHelper/Resources/Info.plist | 26 - TestsOld/Tools/XDGTestHelper/main.swift | 286 ----------- 207 files changed, 4397 insertions(+), 790 deletions(-) create mode 100644 Sources/XCTest/Private/ArgumentParser.swift create mode 100644 Sources/XCTest/Private/IgnoredErrors.swift create mode 100644 Sources/XCTest/Private/ObjectWrapper.swift create mode 100644 Sources/XCTest/Private/PerformanceMeter.swift create mode 100644 Sources/XCTest/Private/PrintObserver.swift create mode 100644 Sources/XCTest/Private/SourceLocation.swift create mode 100644 Sources/XCTest/Private/TestFiltering.swift create mode 100644 Sources/XCTest/Private/TestListing.swift create mode 100644 Sources/XCTest/Private/WaiterManager.swift create mode 100644 Sources/XCTest/Private/WallClockTimeMetric.swift create mode 100644 Sources/XCTest/Private/XCTestCase.TearDownBlocksState.swift create mode 100644 Sources/XCTest/Private/XCTestCaseSuite.swift create mode 100644 Sources/XCTest/Private/XCTestInternalObservation.swift create mode 100644 Sources/XCTest/Public/Asynchronous/XCTNSNotificationExpectation.swift create mode 100644 Sources/XCTest/Public/Asynchronous/XCTNSPredicateExpectation.swift create mode 100644 Sources/XCTest/Public/Asynchronous/XCTWaiter+Validation.swift create mode 100644 Sources/XCTest/Public/Asynchronous/XCTWaiter.swift create mode 100644 Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift create mode 100644 Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift create mode 100644 Sources/XCTest/Public/XCAbstractTest.swift create mode 100644 Sources/XCTest/Public/XCTAssert.swift create mode 100644 Sources/XCTest/Public/XCTSkip.swift create mode 100644 Sources/XCTest/Public/XCTestCase+Performance.swift create mode 100644 Sources/XCTest/Public/XCTestCase.swift create mode 100644 Sources/XCTest/Public/XCTestCaseRun.swift create mode 100644 Sources/XCTest/Public/XCTestErrors.swift create mode 100644 Sources/XCTest/Public/XCTestMain.swift create mode 100644 Sources/XCTest/Public/XCTestObservation.swift create mode 100644 Sources/XCTest/Public/XCTestObservationCenter.swift create mode 100644 Sources/XCTest/Public/XCTestRun.swift create mode 100644 Sources/XCTest/Public/XCTestSuite.swift create mode 100644 Sources/XCTest/Public/XCTestSuiteRun.swift rename {TestsOld => Tests}/Foundation/FTPServer.swift (100%) rename {TestsOld => Tests}/Foundation/HTTPServer.swift (100%) rename {TestsOld => Tests}/Foundation/Imports.swift (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/ByteCountFormatter-AllFieldsSet.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/ByteCountFormatter-Default.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-Default.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-ValuesSetWithTemplate.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-ValuesSetWithoutTemplate.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/ISO8601DateFormatter-Default.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/ISO8601DateFormatter-OptionsSet.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSAttributedString.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-Empty.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-NumbersAppearingOnce.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-NumbersAppearingSeveralTimes.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-Empty.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-ManyIndices.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-OneIndex.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-Empty.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-ManyRanges.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-OneRange.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Angle.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Frequency.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Length.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Zero.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableAttributedString.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-Empty.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-ManyRanges.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-OneRange.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableOrderedSet-Empty.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableOrderedSet-Numbers.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableSet-Empty.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSMutableSet-Numbers.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSOrderedSet-Empty.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSOrderedSet-Numbers.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSSet-Empty.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSSet-Numbers.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-ComplexRegex.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-ExtendedRegex.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-SimpleRegex.archive (100%) rename {TestsOld => Tests}/Foundation/Resources/NSKeyedUnarchiver-ArrayTest.plist (100%) rename {TestsOld => Tests}/Foundation/Resources/NSKeyedUnarchiver-ComplexTest.plist (100%) rename {TestsOld => Tests}/Foundation/Resources/NSKeyedUnarchiver-ConcreteValueTest.plist (100%) rename {TestsOld => Tests}/Foundation/Resources/NSKeyedUnarchiver-EdgeInsetsTest.plist (100%) rename {TestsOld => Tests}/Foundation/Resources/NSKeyedUnarchiver-NotificationTest.plist (100%) rename {TestsOld => Tests}/Foundation/Resources/NSKeyedUnarchiver-OrderedSetTest.plist (100%) rename {TestsOld => Tests}/Foundation/Resources/NSKeyedUnarchiver-RangeTest.plist (100%) rename {TestsOld => Tests}/Foundation/Resources/NSKeyedUnarchiver-RectTest.plist (100%) rename {TestsOld => Tests}/Foundation/Resources/NSKeyedUnarchiver-URLTest.plist (100%) rename {TestsOld => Tests}/Foundation/Resources/NSKeyedUnarchiver-UUIDTest.plist (100%) rename {TestsOld => Tests}/Foundation/Resources/NSString-ISO-8859-1-data.txt (100%) rename {TestsOld => Tests}/Foundation/Resources/NSString-UTF16-BE-data.txt (100%) rename {TestsOld => Tests}/Foundation/Resources/NSString-UTF16-LE-data.txt (100%) rename {TestsOld => Tests}/Foundation/Resources/NSString-UTF32-BE-data.txt (100%) rename {TestsOld => Tests}/Foundation/Resources/NSString-UTF32-LE-data.txt (100%) rename {TestsOld => Tests}/Foundation/Resources/NSStringTestData.txt (100%) rename {TestsOld => Tests}/Foundation/Resources/NSURLTestData.plist (100%) rename {TestsOld => Tests}/Foundation/Resources/NSXMLDTDTestData.xml (100%) rename {TestsOld => Tests}/Foundation/Resources/NSXMLDocumentTestData.xml (100%) rename {TestsOld => Tests}/Foundation/Resources/PropertyList-1.0.dtd (100%) rename {TestsOld => Tests}/Foundation/Resources/TestFileWithZeros.txt (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestAffineTransform.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestAttributedString.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestAttributedStringCOW.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestAttributedStringPerformance.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestAttributedStringSupport.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestBridging.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestBundle.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestByteCountFormatter.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestCachedURLResponse.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestCalendar.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestCharacterSet.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestCodable.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestDataURLProtocol.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestDate.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestDateComponents.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestDateFormatter.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestDateInterval.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestDateIntervalFormatter.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestDecimal.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestDimension.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestEnergyFormatter.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestFileHandle.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestFileManager.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestHTTPCookie.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestHTTPCookieStorage.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestHTTPURLResponse.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestHost.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestISO8601DateFormatter.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestIndexPath.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestIndexSet.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestJSONEncoder.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestJSONSerialization.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestLengthFormatter.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestMassFormatter.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestMeasurement.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSArray.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSAttributedString.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSCache.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSCalendar.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSCompoundPredicate.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSDateComponents.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSDictionary.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSError.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSGeometry.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSKeyedArchiver.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSKeyedUnarchiver.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSLocale.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSLock.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSNull.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSNumber.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSNumberBridging.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSOrderedSet.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSPredicate.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSRange.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSRegularExpression.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSSet.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSSortDescriptor.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSString.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSTextCheckingResult.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSURL.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSURLRequest.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSUUID.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNSValue.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNotification.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNotificationCenter.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNotificationQueue.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestNumberFormatter.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestObjCRuntime.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestOperationQueue.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestPersonNameComponents.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestPipe.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestProcess.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestProcessInfo.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestProgress.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestProgressFraction.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestPropertyListEncoder.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestPropertyListSerialization.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestRunLoop.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestScanner.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestSocketPort.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestStream.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestThread.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestTimeZone.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestTimer.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestURL.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestURLCache.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestURLComponents.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestURLCredential.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestURLCredentialStorage.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestURLProtectionSpace.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestURLProtocol.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestURLRequest.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestURLResponse.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestURLSession.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestURLSessionFTP.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestUUID.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestUnit.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestUnitConverter.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestUnitInformationStorage.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestUnitVolume.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestUserDefaults.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestUtils.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestXMLDocument.swift (100%) rename {TestsOld/Foundation/Tests => Tests/Foundation}/TestXMLParser.swift (100%) delete mode 100644 TestsOld/Foundation/CMakeLists.txt delete mode 100644 TestsOld/Foundation/main.swift delete mode 100644 TestsOld/Tools/CMakeLists.txt delete mode 100644 TestsOld/Tools/GenerateTestFixtures/CMakeLists.txt delete mode 100644 TestsOld/Tools/GenerateTestFixtures/Utilities.swift delete mode 100644 TestsOld/Tools/GenerateTestFixtures/main.swift delete mode 100644 TestsOld/Tools/XDGTestHelper/CMakeLists.txt delete mode 100644 TestsOld/Tools/XDGTestHelper/Resources/Info.plist delete mode 100644 TestsOld/Tools/XDGTestHelper/main.swift diff --git a/Package.swift b/Package.swift index 6a24a66605..8d0d6c461e 100644 --- a/Package.swift +++ b/Package.swift @@ -47,14 +47,9 @@ let package = Package( url: "https://github.com/apple/swift-foundation-icu", exact: "0.0.5"), .package( - // url: "https://github.com/apple/swift-foundation", - // branch: "main" - path: "../swift-foundation" - ), - .package( - url: "https://github.com/apple/swift-corelibs-xctest", + url: "https://github.com/apple/swift-foundation", branch: "main" - ) + ), ], targets: [ .target( @@ -89,15 +84,26 @@ let package = Package( name: "plutil", dependencies: ["Foundation"] ), + .target( + // swift-corelibs-foundation has a copy of XCTest's sources so: + // (1) we do not depend on the toolchain's XCTest, which depends on toolchain's Foundation, which we cannot pull in at the same time as a Foundation package + // (2) we do not depend on a swift-corelibs-xctest Swift package, which depends on Foundation, which causes a circular dependency in swiftpm + // We believe Foundation is the only project that needs to take this rather drastic measure. + name: "XCTest", + dependencies: [ + "Foundation" + ], + path: "Sources/XCTest" + ), .testTarget( name: "TestFoundation", dependencies: [ "Foundation", - .product(name: "XCTest", package: "swift-corelibs-xctest"), + "XCTest" ], resources: [ - .copy("Resources/Info.plist"), - .copy("Resources/NSStringTestData.txt") + .copy("Tests/Foundation/Resources/Info.plist"), + .copy("Tests/Foundation/Resources/NSStringTestData.txt") ] ), ] diff --git a/Sources/XCTest/Private/ArgumentParser.swift b/Sources/XCTest/Private/ArgumentParser.swift new file mode 100644 index 0000000000..d30f86fbfc --- /dev/null +++ b/Sources/XCTest/Private/ArgumentParser.swift @@ -0,0 +1,72 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// ArgumentParser.swift +// Tools for parsing test execution configuration from command line arguments. +// + +/// Utility for converting command line arguments into a strongly-typed +/// representation of the passed-in options +internal struct ArgumentParser { + + /// The basic operations that can be performed by an XCTest runner executable + enum ExecutionMode { + /// Run tests or test cases, printing results to stdout and exiting with + /// a non-0 return code if any tests failed. The names of tests or test cases + /// may be provided to only run a subset of them. + case run(selectedTestNames: [String]?) + + /// The different ways that the tests can be represented when they are listed + enum ListType { + /// A flat list of the tests that can be run. The lines in this + /// output are valid test names for the `run` mode. + case humanReadable + + /// A JSON representation of the test suite, intended for consumption + /// by other tools + case json + } + + /// Print a list of all the tests in the suite. + case list(type: ListType) + + /// Print Help + case help(invalidOption: String?) + + var selectedTestNames: [String]? { + if case .run(let names) = self { + return names + } else { + return nil + } + } + } + + private let arguments: [String] + + init(arguments: [String]) { + self.arguments = arguments + } + + var executionMode: ExecutionMode { + if arguments.count <= 1 { + return .run(selectedTestNames: nil) + } else if arguments[1] == "--list-tests" || arguments[1] == "-l" { + return .list(type: .humanReadable) + } else if arguments[1] == "--dump-tests-json" { + return .list(type: .json) + } else if arguments[1] == "--help" || arguments[1] == "-h" { + return .help(invalidOption: nil) + } else if let fst = arguments[1].first, fst == "-" { + return .help(invalidOption: arguments[1]) + } else { + return .run(selectedTestNames: arguments[1].split(separator: ",").map(String.init)) + } + } +} diff --git a/Sources/XCTest/Private/IgnoredErrors.swift b/Sources/XCTest/Private/IgnoredErrors.swift new file mode 100644 index 0000000000..1723a1d4c8 --- /dev/null +++ b/Sources/XCTest/Private/IgnoredErrors.swift @@ -0,0 +1,67 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2019 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// IgnoredErrors.swift +// + +protocol XCTCustomErrorHandling: Error { + + /// Whether this error should be recorded as a test failure when it is caught. Default: true. + var shouldRecordAsTestFailure: Bool { get } + + /// Whether this error should cause the test invocation to be skipped when it is caught during a throwing setUp method. Default: true. + var shouldSkipTestInvocation: Bool { get } + + /// Whether this error should be recorded as a test skip when it is caught during a test invocation. Default: false. + var shouldRecordAsTestSkip: Bool { get } + +} + +extension XCTCustomErrorHandling { + + var shouldRecordAsTestFailure: Bool { + true + } + + var shouldSkipTestInvocation: Bool { + true + } + + var shouldRecordAsTestSkip: Bool { + false + } + +} + +extension Error { + + var xct_shouldRecordAsTestFailure: Bool { + (self as? XCTCustomErrorHandling)?.shouldRecordAsTestFailure ?? true + } + + var xct_shouldSkipTestInvocation: Bool { + (self as? XCTCustomErrorHandling)?.shouldSkipTestInvocation ?? true + } + + var xct_shouldRecordAsTestSkip: Bool { + (self as? XCTCustomErrorHandling)?.shouldRecordAsTestSkip ?? false + } + +} + +/// The error type thrown by `XCTUnwrap` on assertion failure. +internal struct XCTestErrorWhileUnwrappingOptional: Error, XCTCustomErrorHandling { + + var shouldRecordAsTestFailure: Bool { + // Don't record this error as a test failure, because XCTUnwrap + // internally records the failure before throwing this error + false + } + +} diff --git a/Sources/XCTest/Private/ObjectWrapper.swift b/Sources/XCTest/Private/ObjectWrapper.swift new file mode 100644 index 0000000000..cc595f6c67 --- /dev/null +++ b/Sources/XCTest/Private/ObjectWrapper.swift @@ -0,0 +1,27 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// ObjectWrapper.swift +// Utility type for adapting implementors of a `class` protocol to `Hashable` +// + +/// A `Hashable` representation of an object and its `ObjectIdentifier`. This is +/// useful because Swift classes aren't implicitly hashable based on identity. +internal struct ObjectWrapper: Hashable { + let object: T + let objectIdentifier: ObjectIdentifier + + func hash(into hasher: inout Hasher) { + hasher.combine(objectIdentifier) + } +} + +internal func ==(lhs: ObjectWrapper, rhs: ObjectWrapper) -> Bool { + return lhs.objectIdentifier == rhs.objectIdentifier +} diff --git a/Sources/XCTest/Private/PerformanceMeter.swift b/Sources/XCTest/Private/PerformanceMeter.swift new file mode 100644 index 0000000000..afb3e1918d --- /dev/null +++ b/Sources/XCTest/Private/PerformanceMeter.swift @@ -0,0 +1,202 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// PerformanceMeter.swift +// Measures the performance of a block of code and reports the results. +// + +/// Describes a type that is capable of measuring some aspect of code performance +/// over time. +internal protocol PerformanceMetric { + /// Called once per iteration immediately before the tested code is executed. + /// The metric should do whatever work is required to begin a new measurement. + func startMeasuring() + + /// Called once per iteration immediately after the tested code is executed. + /// The metric should do whatever work is required to finalize measurement. + func stopMeasuring() + + /// Called once, after all measurements have been taken, to provide feedback + /// about the collected measurements. + /// - Returns: Measurement results to present to the user. + func calculateResults() -> String + + /// Called once, after all measurements have been taken, to determine whether + /// the measurements should be treated as a test failure or not. + /// - Returns: A diagnostic message if the results indicate failure, else nil. + func failureMessage() -> String? +} + +/// Protocol used by `PerformanceMeter` to report measurement results +internal protocol PerformanceMeterDelegate { + /// Reports a string representation of the gathered performance metrics + /// - Parameter results: The raw measured values, and some derived data such + /// as average, and standard deviation + /// - Parameter file: The source file name where the measurement was invoked + /// - Parameter line: The source line number where the measurement was invoked + func recordMeasurements(results: String, file: StaticString, line: Int) + + /// Reports a test failure from the analysis of performance measurements. + /// This can currently be caused by an unexpectedly large standard deviation + /// calculated over the data. + /// - Parameter description: An explanation of the failure + /// - Parameter file: The source file name where the measurement was invoked + /// - Parameter line: The source line number where the measurement was invoked + func recordFailure(description: String, file: StaticString, line: Int) + + /// Reports a misuse of the `PerformanceMeter` API, such as calling ` + /// startMeasuring` multiple times. + /// - Parameter description: An explanation of the misuse + /// - Parameter file: The source file name where the misuse occurred + /// - Parameter line: The source line number where the misuse occurred + func recordAPIViolation(description: String, file: StaticString, line: Int) +} + +/// - Bug: This class is intended to be `internal` but is public to work around +/// a toolchain bug on Linux. See `XCTestCase._performanceMeter` for more info. +public final class PerformanceMeter { + enum Error: Swift.Error, CustomStringConvertible { + case noMetrics + case unknownMetric(metricName: String) + case startMeasuringAlreadyCalled + case stopMeasuringAlreadyCalled + case startMeasuringNotCalled + case stopBeforeStarting + + var description: String { + switch self { + case .noMetrics: return "At least one metric must be provided to measure." + case .unknownMetric(let name): return "Unknown metric: \(name)" + case .startMeasuringAlreadyCalled: return "Already called startMeasuring() once this iteration." + case .stopMeasuringAlreadyCalled: return "Already called stopMeasuring() once this iteration." + case .startMeasuringNotCalled: return "startMeasuring() must be called during the block." + case .stopBeforeStarting: return "Cannot stop measuring before starting measuring." + } + } + } + + internal var didFinishMeasuring: Bool { + return state == .measurementFinished || state == .measurementAborted + } + + private enum State { + case iterationUnstarted + case iterationStarted + case iterationFinished + case measurementFinished + case measurementAborted + } + private var state: State = .iterationUnstarted + + private let metrics: [PerformanceMetric] + private let delegate: PerformanceMeterDelegate + private let invocationFile: StaticString + private let invocationLine: Int + + private init(metrics: [PerformanceMetric], delegate: PerformanceMeterDelegate, file: StaticString, line: Int) { + self.metrics = metrics + self.delegate = delegate + self.invocationFile = file + self.invocationLine = line + } + + static func measureMetrics(_ metricNames: [String], delegate: PerformanceMeterDelegate, file: StaticString = #file, line: Int = #line, for block: (PerformanceMeter) -> Void) { + do { + let metrics = try self.metrics(forNames: metricNames) + let meter = PerformanceMeter(metrics: metrics, delegate: delegate, file: file, line: line) + meter.measure(block) + } catch let e { + delegate.recordAPIViolation(description: String(describing: e), file: file, line: line) + } + } + + func startMeasuring(file: StaticString = #file, line: Int = #line) { + guard state == .iterationUnstarted else { + return recordAPIViolation(.startMeasuringAlreadyCalled, file: file, line: line) + } + state = .iterationStarted + metrics.forEach { $0.startMeasuring() } + } + + func stopMeasuring(file: StaticString = #file, line: Int = #line) { + guard state != .iterationUnstarted else { + return recordAPIViolation(.stopBeforeStarting, file: file, line: line) + } + + guard state != .iterationFinished else { + return recordAPIViolation(.stopMeasuringAlreadyCalled, file: file, line: line) + } + + state = .iterationFinished + metrics.forEach { $0.stopMeasuring() } + } + + func abortMeasuring() { + state = .measurementAborted + } + + + private static func metrics(forNames names: [String]) throws -> [PerformanceMetric] { + guard !names.isEmpty else { throw Error.noMetrics } + + let metricsMapping = [WallClockTimeMetric.name : WallClockTimeMetric.self] + + return try names.map({ + guard let metricType = metricsMapping[$0] else { throw Error.unknownMetric(metricName: $0) } + return metricType.init() + }) + } + + private var numberOfIterations: Int { + return 10 + } + + private func measure(_ block: (PerformanceMeter) -> Void) { + for _ in (0.." + printAndFlush("\(file):\(lineNumber): error: \(testCase.name) : \(description)") + } + + func testCaseDidFinish(_ testCase: XCTestCase) { + let testRun = testCase.testRun! + + let verb: String + if testRun.hasSucceeded { + if testRun.hasBeenSkipped { + verb = "skipped" + } else { + verb = "passed" + } + } else { + verb = "failed" + } + + printAndFlush("Test Case '\(testCase.name)' \(verb) (\(formatTimeInterval(testRun.totalDuration)) seconds)") + } + + func testSuiteDidFinish(_ testSuite: XCTestSuite) { + let testRun = testSuite.testRun! + let verb = testRun.hasSucceeded ? "passed" : "failed" + printAndFlush("Test Suite '\(testSuite.name)' \(verb) at \(dateFormatter.string(from: testRun.stopDate!))") + + let tests = testRun.executionCount == 1 ? "test" : "tests" + let skipped = testRun.skipCount > 0 ? "\(testRun.skipCount) test\(testRun.skipCount != 1 ? "s" : "") skipped and " : "" + let failures = testRun.totalFailureCount == 1 ? "failure" : "failures" + + printAndFlush(""" + \t Executed \(testRun.executionCount) \(tests), \ + with \(skipped)\ + \(testRun.totalFailureCount) \(failures) \ + (\(testRun.unexpectedExceptionCount) unexpected) \ + in \(formatTimeInterval(testRun.testDuration)) (\(formatTimeInterval(testRun.totalDuration))) seconds + """ + ) + } + + func testBundleDidFinish(_ testBundle: Bundle) {} + + private lazy var dateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS" + return formatter + }() + + fileprivate func printAndFlush(_ message: String) { + print(message) + #if !os(Android) + fflush(stdout) + #endif + } + + private func formatTimeInterval(_ timeInterval: TimeInterval) -> String { + return String(round(timeInterval * 1000.0) / 1000.0) + } +} + +extension PrintObserver: XCTestInternalObservation { + func testCase(_ testCase: XCTestCase, wasSkippedWithDescription description: String, at sourceLocation: SourceLocation?) { + let file = sourceLocation?.file ?? "" + let line = sourceLocation?.line ?? 0 + printAndFlush("\(file):\(line): \(testCase.name) : \(description)") + } + + func testCase(_ testCase: XCTestCase, didMeasurePerformanceResults results: String, file: StaticString, line: Int) { + printAndFlush("\(file):\(line): Test Case '\(testCase.name)' measured \(results)") + } +} diff --git a/Sources/XCTest/Private/SourceLocation.swift b/Sources/XCTest/Private/SourceLocation.swift new file mode 100644 index 0000000000..679d70924c --- /dev/null +++ b/Sources/XCTest/Private/SourceLocation.swift @@ -0,0 +1,43 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2018 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// SourceLocation.swift +// + +internal struct SourceLocation { + + typealias LineNumber = UInt + + /// Represents an "unknown" source location, with default values, which may be used as a fallback + /// when a real source location may not be known. + static var unknown: SourceLocation = { + return SourceLocation(file: "", line: 0) + }() + + let file: String + let line: LineNumber + + init(file: String, line: LineNumber) { + self.file = file + self.line = line + } + + init(file: StaticString, line: LineNumber) { + self.init(file: String(describing: file), line: line) + } + + init(file: String, line: Int) { + self.init(file: file, line: LineNumber(line)) + } + + init(file: StaticString, line: Int) { + self.init(file: String(describing: file), line: LineNumber(line)) + } + +} diff --git a/Sources/XCTest/Private/TestFiltering.swift b/Sources/XCTest/Private/TestFiltering.swift new file mode 100644 index 0000000000..bb1bacd1ce --- /dev/null +++ b/Sources/XCTest/Private/TestFiltering.swift @@ -0,0 +1,72 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestFiltering.swift +// This provides utilities for executing only a subset of the tests provided to `XCTMain` +// + +internal typealias TestFilter = (XCTestCase.Type, String) -> Bool + +internal struct TestFiltering { + private let selectedTestNames: [String]? + + init(selectedTestNames: [String]?) { + self.selectedTestNames = selectedTestNames + } + + var selectedTestFilter: TestFilter { + guard let selectedTestNames = selectedTestNames else { return includeAllFilter() } + let selectedTests = Set(selectedTestNames.compactMap { SelectedTest(selectedTestName: $0) }) + + return { testCaseClass, testCaseMethodName in + return selectedTests.contains(SelectedTest(testCaseClass: testCaseClass, testCaseMethodName: testCaseMethodName)) || + selectedTests.contains(SelectedTest(testCaseClass: testCaseClass, testCaseMethodName: nil)) + } + } + + private func includeAllFilter() -> TestFilter { + return { _,_ in true } + } + + static func filterTests(_ entries: [XCTestCaseEntry], filter: TestFilter) -> [XCTestCaseEntry] { + return entries + .map { testCaseClass, testCaseMethods in + return (testCaseClass, testCaseMethods.filter { filter(testCaseClass, $0.0) } ) + } + .filter { _, testCaseMethods in + return !testCaseMethods.isEmpty + } + } +} + +/// A selected test can be a single test case, or an entire class of test cases +private struct SelectedTest : Hashable { + let testCaseClassName: String + let testCaseMethodName: String? +} + +private extension SelectedTest { + init?(selectedTestName: String) { + let components = selectedTestName.split(separator: "/").map(String.init) + switch components.count { + case 1: + testCaseClassName = components[0] + testCaseMethodName = nil + case 2: + testCaseClassName = components[0] + testCaseMethodName = components[1] + default: + return nil + } + } + + init(testCaseClass: XCTestCase.Type, testCaseMethodName: String?) { + self.init(testCaseClassName: String(reflecting: testCaseClass), testCaseMethodName: testCaseMethodName) + } +} diff --git a/Sources/XCTest/Private/TestListing.swift b/Sources/XCTest/Private/TestListing.swift new file mode 100644 index 0000000000..dcd54f47d8 --- /dev/null +++ b/Sources/XCTest/Private/TestListing.swift @@ -0,0 +1,100 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// TestListing.swift +// Implementation of the mode for printing the list of tests. +// + +internal struct TestListing { + private let testSuite: XCTestSuite + + init(testSuite: XCTestSuite) { + self.testSuite = testSuite + } + + /// Prints a flat list of the tests in the suite, in the format used to + /// specify a test by name when running tests. + func printTestList() { + let list = testSuite.list() + let tests = list.count == 1 ? "test" : "tests" + let bundleName = testSuite.findBundleTestSuite()?.name ?? "<>" + + print("Listing \(list.count) \(tests) in \(bundleName):\n") + for entry in testSuite.list() { + print(entry) + } + } + + /// Prints a JSON representation of the tests in the suite, mirring the internal + /// tree representation of test suites and test cases. This output is intended + /// to be consumed by other tools. + func printTestJSON() { + let json = try! JSONSerialization.data(withJSONObject: testSuite.dictionaryRepresentation()) + print(String(data: json, encoding: .utf8)!) + } +} + +protocol Listable { + func list() -> [String] + func dictionaryRepresentation() -> NSDictionary +} + +private func moduleName(value: Any) -> String { + let moduleAndType = String(reflecting: type(of: value)) + return String(moduleAndType.split(separator: ".").first!) +} + +extension XCTestSuite: Listable { + private var listables: [Listable] { + return tests + .compactMap({ ($0 as? Listable) }) + } + + private var listingName: String { + if let childTestCase = tests.first as? XCTestCase, name == String(describing: type(of: childTestCase)) { + return "\(moduleName(value: childTestCase)).\(name)" + } else { + return name + } + } + + func list() -> [String] { + return listables.flatMap({ $0.list() }) + } + + func dictionaryRepresentation() -> NSDictionary { + let listedTests = NSArray(array: tests.compactMap({ ($0 as? Listable)?.dictionaryRepresentation() })) + return NSDictionary(objects: [NSString(string: listingName), + listedTests], + forKeys: [NSString(string: "name"), + NSString(string: "tests")]) + } + + func findBundleTestSuite() -> XCTestSuite? { + if name.hasSuffix(".xctest") { + return self + } else { + return tests.compactMap({ ($0 as? XCTestSuite)?.findBundleTestSuite() }).first + } + } +} + +extension XCTestCase: Listable { + func list() -> [String] { + let adjustedName = name.split(separator: ".") + .map(String.init) + .joined(separator: "/") + return ["\(moduleName(value: self)).\(adjustedName)"] + } + + func dictionaryRepresentation() -> NSDictionary { + let methodName = String(name.split(separator: ".").last!) + return NSDictionary(object: NSString(string: methodName), forKey: NSString(string: "name")) + } +} diff --git a/Sources/XCTest/Private/WaiterManager.swift b/Sources/XCTest/Private/WaiterManager.swift new file mode 100644 index 0000000000..f705165fe8 --- /dev/null +++ b/Sources/XCTest/Private/WaiterManager.swift @@ -0,0 +1,145 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2018 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// WaiterManager.swift +// + +internal protocol ManageableWaiter: AnyObject, Equatable { + var isFinished: Bool { get } + + // Invoked on `XCTWaiter.subsystemQueue` + func queue_handleWatchdogTimeout() + func queue_interrupt(for interruptingWaiter: Self) +} + +private protocol ManageableWaiterWatchdog { + func cancel() +} +extension DispatchWorkItem: ManageableWaiterWatchdog {} + +/// This class manages the XCTWaiter instances which are currently waiting on a particular thread. +/// It facilitates "nested" waiters, allowing an outer waiter to interrupt inner waiters if it times +/// out. +internal final class WaiterManager : NSObject { + + /// The current thread's waiter manager. This is the only supported way to access an instance of + /// this class, since each instance is bound to a particular thread and is only concerned with + /// the XCTWaiters waiting on that thread. + static var current: WaiterManager { + let threadKey = "org.swift.XCTest.WaiterManager" + + if let existing = Thread.current.threadDictionary[threadKey] as? WaiterManager { + return existing + } else { + let manager = WaiterManager() + Thread.current.threadDictionary[threadKey] = manager + return manager + } + } + + private struct ManagedWaiterDetails { + let waiter: WaiterType + let watchdog: ManageableWaiterWatchdog? + } + + private var managedWaiterStack = [ManagedWaiterDetails]() + private weak var thread = Thread.current + private let queue = DispatchQueue(label: "org.swift.XCTest.WaiterManager") + + // Use `WaiterManager.current` to access the thread-specific instance + private override init() {} + + deinit { + assert(managedWaiterStack.isEmpty, "Waiters still registered when WaiterManager is deallocating.") + } + + func startManaging(_ waiter: WaiterType, timeout: TimeInterval) { + guard let thread = thread else { fatalError("\(self) no longer belongs to a thread") } + precondition(thread === Thread.current, "\(#function) called on wrong thread, must be called on \(thread)") + + var alreadyFinishedOuterWaiter: WaiterType? + + queue.sync { + // To start managing `waiter`, first see if any existing, outer waiters have already finished, + // because if one has, then `waiter` will be immediately interrupted before it begins waiting. + alreadyFinishedOuterWaiter = managedWaiterStack.first(where: { $0.waiter.isFinished })?.waiter + + let watchdog: ManageableWaiterWatchdog? + if alreadyFinishedOuterWaiter == nil { + // If there is no already-finished outer waiter, install a watchdog for `waiter`, and store it + // alongside `waiter` so that it may be canceled if `waiter` finishes waiting within its allotted timeout. + watchdog = WaiterManager.installWatchdog(for: waiter, timeout: timeout) + } else { + // If there is an already-finished outer waiter, no watchdog is needed for `waiter` because it will + // be interrupted before it begins waiting. + watchdog = nil + } + + // Add the waiter even if it's going to immediately be interrupted below to simplify the stack management + let details = ManagedWaiterDetails(waiter: waiter, watchdog: watchdog) + managedWaiterStack.append(details) + } + + if let alreadyFinishedOuterWaiter = alreadyFinishedOuterWaiter { + XCTWaiter.subsystemQueue.async { + waiter.queue_interrupt(for: alreadyFinishedOuterWaiter) + } + } + } + + func stopManaging(_ waiter: WaiterType) { + guard let thread = thread else { fatalError("\(self) no longer belongs to a thread") } + precondition(thread === Thread.current, "\(#function) called on wrong thread, must be called on \(thread)") + + queue.sync { + precondition(!managedWaiterStack.isEmpty, "Waiter stack was empty when requesting to stop managing: \(waiter)") + + let expectedIndex = managedWaiterStack.index(before: managedWaiterStack.endIndex) + let waiterDetails = managedWaiterStack[expectedIndex] + guard waiter == waiterDetails.waiter else { + fatalError("Top waiter on stack \(waiterDetails.waiter) is not equal to waiter to stop managing: \(waiter)") + } + + waiterDetails.watchdog?.cancel() + managedWaiterStack.remove(at: expectedIndex) + } + } + + private static func installWatchdog(for waiter: WaiterType, timeout: TimeInterval) -> ManageableWaiterWatchdog { + // Use DispatchWorkItem instead of a basic closure since it can be canceled. + let watchdog = DispatchWorkItem { [weak waiter] in + waiter?.queue_handleWatchdogTimeout() + } + + let outerTimeoutSlop = TimeInterval(0.25) + let deadline = DispatchTime.now() + timeout + outerTimeoutSlop + XCTWaiter.subsystemQueue.asyncAfter(deadline: deadline, execute: watchdog) + + return watchdog + } + + func queue_handleWatchdogTimeout(of waiter: WaiterType) { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + + var waitersToInterrupt = [WaiterType]() + + queue.sync { + guard let indexOfWaiter = managedWaiterStack.firstIndex(where: { $0.waiter == waiter }) else { + preconditionFailure("Waiter \(waiter) reported timed out but is not in the waiter stack \(managedWaiterStack)") + } + + waitersToInterrupt += managedWaiterStack[managedWaiterStack.index(after: indexOfWaiter)...].map { $0.waiter } + } + + for waiterToInterrupt in waitersToInterrupt.reversed() { + waiterToInterrupt.queue_interrupt(for: waiter) + } + } + +} diff --git a/Sources/XCTest/Private/WallClockTimeMetric.swift b/Sources/XCTest/Private/WallClockTimeMetric.swift new file mode 100644 index 0000000000..2fe945a346 --- /dev/null +++ b/Sources/XCTest/Private/WallClockTimeMetric.swift @@ -0,0 +1,79 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// WallClockTimeMetric.swift +// Performance metric measuring how long it takes code to execute +// + +/// This metric uses the system uptime to keep track of how much time passes +/// between starting and stopping measuring. +internal final class WallClockTimeMetric: PerformanceMetric { + static let name = "org.swift.XCTPerformanceMetric_WallClockTime" + + typealias Measurement = TimeInterval + private var startTime: TimeInterval? + var measurements: [Measurement] = [] + + func startMeasuring() { + startTime = currentTime() + } + + func stopMeasuring() { + guard let startTime = startTime else { fatalError("Must start measuring before stopping measuring") } + let stopTime = currentTime() + measurements.append(stopTime-startTime) + } + + private let maxRelativeStandardDeviation = 10.0 + private let standardDeviationNegligibilityThreshold = 0.1 + + func calculateResults() -> String { + let results = [ + String(format: "average: %.3f", measurements.average), + String(format: "relative standard deviation: %.3f%%", measurements.relativeStandardDeviation), + "values: [\(measurements.map({ String(format: "%.6f", $0) }).joined(separator: ", "))]", + "performanceMetricID:\(type(of: self).name)", + String(format: "maxPercentRelativeStandardDeviation: %.3f%%", maxRelativeStandardDeviation), + String(format: "maxStandardDeviation: %.3f", standardDeviationNegligibilityThreshold), + ] + return "[Time, seconds] \(results.joined(separator: ", "))" + } + + func failureMessage() -> String? { + let relativeStandardDeviation = measurements.relativeStandardDeviation + if (relativeStandardDeviation > maxRelativeStandardDeviation && + measurements.standardDeviation > standardDeviationNegligibilityThreshold) { + return String(format: "The relative standard deviation of the measurements is %.3f%% which is higher than the max allowed of %.3f%%.", relativeStandardDeviation, maxRelativeStandardDeviation) + } + + return nil + } + + private func currentTime() -> TimeInterval { + return ProcessInfo.processInfo.systemUptime + } +} + + +private extension Collection where Index: ExpressibleByIntegerLiteral, Iterator.Element == WallClockTimeMetric.Measurement { + var average: WallClockTimeMetric.Measurement { + return self.reduce(0, +) / Double(Int(count)) + } + + var standardDeviation: WallClockTimeMetric.Measurement { + let average = self.average + let squaredDifferences = self.map({ pow($0 - average, 2.0) }) + let variance = squaredDifferences.reduce(0, +) / Double(Int(count-1)) + return sqrt(variance) + } + + var relativeStandardDeviation: Double { + return (standardDeviation*100) / average + } +} diff --git a/Sources/XCTest/Private/XCTestCase.TearDownBlocksState.swift b/Sources/XCTest/Private/XCTestCase.TearDownBlocksState.swift new file mode 100644 index 0000000000..83f43fe470 --- /dev/null +++ b/Sources/XCTest/Private/XCTestCase.TearDownBlocksState.swift @@ -0,0 +1,44 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2014 - 2021 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors + +extension XCTestCase { + + /// A class which encapsulates teardown blocks which are registered via the `addTeardownBlock(_:)` method. + /// Supports async and sync throwing methods. + final class TeardownBlocksState { + + private var wasFinalized = false + private var blocks: [() throws -> Void] = [] + + // We don't want to overload append(_:) below because of how Swift will implicitly promote sync closures to async closures, + // which can unexpectedly change their semantics in difficult to track down ways. + // + // Because of this, we chose the unusual decision to forgo overloading (which is a super sweet language feature <3) to prevent this issue from surprising any contributors to corelibs-xctest + @available(macOS 12.0, *) + func appendAsync(_ block: @Sendable @escaping () async throws -> Void) { + self.append { + try awaitUsingExpectation { try await block() } + } + } + + func append(_ block: @escaping () throws -> Void) { + XCTWaiter.subsystemQueue.sync { + precondition(wasFinalized == false, "API violation -- attempting to add a teardown block after teardown blocks have been dequeued") + blocks.append(block) + } + } + + func finalize() -> [() throws -> Void] { + XCTWaiter.subsystemQueue.sync { + precondition(wasFinalized == false, "API violation -- attempting to run teardown blocks after they've already run") + wasFinalized = true + return blocks + } + } + } +} diff --git a/Sources/XCTest/Private/XCTestCaseSuite.swift b/Sources/XCTest/Private/XCTestCaseSuite.swift new file mode 100644 index 0000000000..a31befbc99 --- /dev/null +++ b/Sources/XCTest/Private/XCTestCaseSuite.swift @@ -0,0 +1,38 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestCaseSuite.swift +// A test suite associated with a particular test case class. +// + +/// A test suite which is associated with a particular test case class. It will +/// call `setUp` and `tearDown` on the class itself before and after invoking +/// all of the test cases making up the class. +internal class XCTestCaseSuite: XCTestSuite { + private let testCaseClass: XCTestCase.Type + + init(testCaseEntry: XCTestCaseEntry) { + let testCaseClass = testCaseEntry.testCaseClass + self.testCaseClass = testCaseClass + super.init(name: String(describing: testCaseClass)) + + for (testName, testClosure) in testCaseEntry.allTests { + let testCase = testCaseClass.init(name: testName, testClosure: testClosure) + addTest(testCase) + } + } + + override func setUp() { + testCaseClass.setUp() + } + + override func tearDown() { + testCaseClass.tearDown() + } +} diff --git a/Sources/XCTest/Private/XCTestInternalObservation.swift b/Sources/XCTest/Private/XCTestInternalObservation.swift new file mode 100644 index 0000000000..2dd06ba260 --- /dev/null +++ b/Sources/XCTest/Private/XCTestInternalObservation.swift @@ -0,0 +1,35 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestInternalObservation.swift +// Extra hooks used within XCTest for being notified about additional events +// during a test run. +// + +/// Expanded version of `XCTestObservation` used internally to respond to +/// additional events not publicly exposed. +internal protocol XCTestInternalObservation: XCTestObservation { + func testCase(_ testCase: XCTestCase, wasSkippedWithDescription description: String, at sourceLocation: SourceLocation?) + + /// Called when a test case finishes measuring performance and has results + /// to report + /// - Parameter testCase: The test case that did the measurements. + /// - Parameter results: The measured values and derived stats. + /// - Parameter file: The path to the source file where the failure was + /// reported, if available. + /// - Parameter line: The line number in the source file where the failure + /// was reported. + func testCase(_ testCase: XCTestCase, didMeasurePerformanceResults results: String, file: StaticString, line: Int) +} + +// All `XCInternalTestObservation` methods are optional, so empty default implementations are provided +internal extension XCTestInternalObservation { + func testCase(_ testCase: XCTestCase, wasSkippedWithDescription description: String, at sourceLocation: SourceLocation?) {} + func testCase(_ testCase: XCTestCase, didMeasurePerformanceResults results: String, file: StaticString, line: Int) {} +} diff --git a/Sources/XCTest/Public/Asynchronous/XCTNSNotificationExpectation.swift b/Sources/XCTest/Public/Asynchronous/XCTNSNotificationExpectation.swift new file mode 100644 index 0000000000..dc86780475 --- /dev/null +++ b/Sources/XCTest/Public/Asynchronous/XCTNSNotificationExpectation.swift @@ -0,0 +1,116 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTNSNotificationExpectation.swift +// + +/// Expectation subclass for waiting on a condition defined by a Foundation Notification instance. +open class XCTNSNotificationExpectation: XCTestExpectation { + + /// A closure to be invoked when a notification specified by the expectation is observed. + /// + /// - Parameter notification: The notification object which was observed. + /// - Returns: `true` if the expectation should be fulfilled, `false` if it should not. + /// + /// - SeeAlso: `XCTNSNotificationExpectation.handler` + public typealias Handler = @Sendable (Notification) -> Bool + + private let queue = DispatchQueue(label: "org.swift.XCTest.XCTNSNotificationExpectation") + + /// The name of the notification being waited on. + open private(set) var notificationName: Notification.Name + + /// The specific object that will post the notification, if any. + /// If nil, any object may post the notification. Default is nil. + open private(set) var observedObject: Any? + + /// The specific notification center that the notification will be posted to. + open private(set) var notificationCenter: NotificationCenter + + private var observer: AnyObject? + + private var _handler: Handler? + + /// Allows the caller to install a special handler to do custom evaluation of received notifications + /// matching the specified object and notification center. + /// + /// - SeeAlso: `XCTNSNotificationExpectation.Handler` + open var handler: Handler? { + get { + return queue.sync { _handler } + } + set { + dispatchPrecondition(condition: .notOnQueue(queue)) + queue.async { self._handler = newValue } + } + } + + /// Initializes an expectation that waits for a Foundation Notification to be posted by an optional `object` to a specific NotificationCenter. + /// + /// - Parameter notificationName: The name of the notification to wait on. + /// - Parameter object: The object that will post the notification, if any. Default is nil. + /// - Parameter notificationCenter: The specific notification center that the notification will be posted to. + /// - Parameter file: The file name to use in the error message if + /// expectations are not met before the wait timeout. Default is the file + /// containing the call to this method. It is rare to provide this + /// parameter when calling this method. + /// - Parameter line: The line number to use in the error message if the + /// expectations are not met before the wait timeout. Default is the line + /// number of the call to this method in the calling file. It is rare to + /// provide this parameter when calling this method. + public init(name notificationName: Notification.Name, object: Any? = nil, notificationCenter: NotificationCenter = .default, file: StaticString = #file, line: Int = #line) { + self.notificationName = notificationName + self.observedObject = object + self.notificationCenter = notificationCenter + let description = "Expect notification '\(notificationName.rawValue)' from " + (object.map { "\($0)" } ?? "any object") + + super.init(description: description, file: file, line: line) + + beginObserving(with: notificationCenter) + } + + deinit { + assert(observer == nil, "observer should be nil, indicates failure to call cleanUp() internally") + } + + private func beginObserving(with notificationCenter: NotificationCenter) { + observer = notificationCenter.addObserver(forName: notificationName, object: observedObject, queue: nil) { [weak self] notification in + guard let strongSelf = self else { return } + + let shouldFulfill: Bool + + // If the handler is invoked, the test will only pass if true is returned. + if let handler = strongSelf.handler { + shouldFulfill = handler(notification) + } else { + shouldFulfill = true + } + + if shouldFulfill { + strongSelf.fulfill() + } + } + } + + override func cleanUp() { + queue.sync { + if let observer = observer { + notificationCenter.removeObserver(observer) + self.observer = nil + } + } + } + +} + +/// A closure to be invoked when a notification specified by the expectation is observed. +/// +/// - SeeAlso: `XCTNSNotificationExpectation.handler` +@available(*, deprecated, renamed: "XCTNSNotificationExpectation.Handler") +public typealias XCNotificationExpectationHandler = XCTNSNotificationExpectation.Handler diff --git a/Sources/XCTest/Public/Asynchronous/XCTNSPredicateExpectation.swift b/Sources/XCTest/Public/Asynchronous/XCTNSPredicateExpectation.swift new file mode 100644 index 0000000000..b41bca147c --- /dev/null +++ b/Sources/XCTest/Public/Asynchronous/XCTNSPredicateExpectation.swift @@ -0,0 +1,135 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTNSPredicateExpectation.swift +// + +/// Expectation subclass for waiting on a condition defined by an NSPredicate and an optional object. +open class XCTNSPredicateExpectation: XCTestExpectation { + + /// A closure to be invoked whenever evaluating the predicate against the object returns true. + /// + /// - Returns: `true` if the expectation should be fulfilled, `false` if it should not. + /// + /// - SeeAlso: `XCTNSPredicateExpectation.handler` + public typealias Handler = @Sendable () -> Bool + + private let queue = DispatchQueue(label: "org.swift.XCTest.XCTNSPredicateExpectation") + + /// The predicate used by the expectation. + open private(set) var predicate: NSPredicate + + /// The object against which the predicate is evaluated, if any. Default is nil. + open private(set) var object: Any? + + private var _handler: Handler? + + /// Handler called when evaluating the predicate against the object returns true. If the handler is not + /// provided, the first successful evaluation will fulfill the expectation. If the handler provided, the + /// handler will be queried each time the notification is received to determine whether the expectation + /// should be fulfilled or not. + open var handler: Handler? { + get { + return queue.sync { _handler } + } + set { + dispatchPrecondition(condition: .notOnQueue(queue)) + queue.async { self._handler = newValue } + } + } + + private let runLoop = RunLoop.current + private var timer: Timer? + private let evaluationInterval = 0.01 + + /// Initializes an expectation that waits for a predicate to evaluate as true with an optionally specified object. + /// + /// - Parameter predicate: The predicate to evaluate. + /// - Parameter object: An optional object to evaluate `predicate` with. Default is nil. + /// - Parameter file: The file name to use in the error message if + /// expectations are not met before the wait timeout. Default is the file + /// containing the call to this method. It is rare to provide this + /// parameter when calling this method. + /// - Parameter line: The line number to use in the error message if the + /// expectations are not met before the wait timeout. Default is the line + /// number of the call to this method in the calling file. It is rare to + /// provide this parameter when calling this method. + public init(predicate: NSPredicate, object: Any? = nil, file: StaticString = #file, line: Int = #line) { + self.predicate = predicate + self.object = object + let description = "Expect predicate `\(predicate)`" + (object.map { " for object \($0)" } ?? "") + + super.init(description: description, file: file, line: line) + } + + deinit { + assert(timer == nil, "timer should be nil, indicates failure to call cleanUp() internally") + } + + override func didBeginWaiting() { + runLoop.perform { + if self.shouldFulfill() { + self.fulfill() + } else { + self.startPolling() + } + } + } + + private func startPolling() { + let timer = Timer(timeInterval: evaluationInterval, repeats: true) { [weak self] timer in + guard let self = self else { + timer.invalidate() + return + } + + if self.shouldFulfill() { + self.fulfill() + timer.invalidate() + } + } + + runLoop.add(timer, forMode: .default) + queue.async { + self.timer = timer + } + } + + private func shouldFulfill() -> Bool { + if predicate.evaluate(with: object) { + if let handler = handler { + if handler() { + return true + } + // We do not fulfill or invalidate the timer if the handler returns + // false. The object is still re-evaluated until timeout. + } else { + return true + } + } + + return false + } + + override func cleanUp() { + queue.sync { + if let timer = timer { + timer.invalidate() + self.timer = nil + } + } + } + +} + +/// A closure to be invoked whenever evaluating the predicate against the object returns true. +/// +/// - SeeAlso: `XCTNSPredicateExpectation.handler` +@available(*, deprecated, renamed: "XCTNSPredicateExpectation.Handler") +public typealias XCPredicateExpectationHandler = XCTNSPredicateExpectation.Handler diff --git a/Sources/XCTest/Public/Asynchronous/XCTWaiter+Validation.swift b/Sources/XCTest/Public/Asynchronous/XCTWaiter+Validation.swift new file mode 100644 index 0000000000..5ff4643c73 --- /dev/null +++ b/Sources/XCTest/Public/Asynchronous/XCTWaiter+Validation.swift @@ -0,0 +1,89 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2018 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTWaiter+Validation.swift +// + +protocol XCTWaiterValidatableExpectation: Equatable { + var isFulfilled: Bool { get } + var fulfillmentToken: UInt64 { get } + var isInverted: Bool { get } +} + +extension XCTWaiter { + struct ValidatableXCTestExpectation: XCTWaiterValidatableExpectation { + let expectation: XCTestExpectation + + var isFulfilled: Bool { + return expectation.queue_isFulfilled + } + + var fulfillmentToken: UInt64 { + return expectation.queue_fulfillmentToken + } + + var isInverted: Bool { + return expectation.queue_isInverted + } + } +} + +extension XCTWaiter { + enum ValidationResult { + case complete + case fulfilledInvertedExpectation(invertedExpectation: ExpectationType) + case violatedOrderingConstraints(expectation: ExpectationType, requiredExpectation: ExpectationType) + case timedOut(unfulfilledExpectations: [ExpectationType]) + case incomplete + } + + static func validateExpectations(_ expectations: [ExpectationType], dueToTimeout didTimeOut: Bool, enforceOrder: Bool) -> ValidationResult { + var unfulfilledExpectations = [ExpectationType]() + var fulfilledExpectations = [ExpectationType]() + + for expectation in expectations { + if expectation.isFulfilled { + // Check for any fulfilled inverse expectations. If they were fulfilled before wait was called, + // this is where we'd catch that. + if expectation.isInverted { + return .fulfilledInvertedExpectation(invertedExpectation: expectation) + } else { + fulfilledExpectations.append(expectation) + } + } else { + unfulfilledExpectations.append(expectation) + } + } + + if enforceOrder { + fulfilledExpectations.sort { $0.fulfillmentToken < $1.fulfillmentToken } + let nonInvertedExpectations = expectations.filter { !$0.isInverted } + + assert(fulfilledExpectations.count <= nonInvertedExpectations.count, "Internal error: number of fulfilledExpectations (\(fulfilledExpectations.count)) must not exceed number of non-inverted expectations (\(nonInvertedExpectations.count))") + + for (fulfilledExpectation, nonInvertedExpectation) in zip(fulfilledExpectations, nonInvertedExpectations) where fulfilledExpectation != nonInvertedExpectation { + return .violatedOrderingConstraints(expectation: fulfilledExpectation, requiredExpectation: nonInvertedExpectation) + } + } + + if unfulfilledExpectations.isEmpty { + return .complete + } else if didTimeOut { + // If we've timed out, our new state is just based on whether or not we have any remaining unfulfilled, non-inverted expectations. + let nonInvertedUnfilledExpectations = unfulfilledExpectations.filter { !$0.isInverted } + if nonInvertedUnfilledExpectations.isEmpty { + return .complete + } else { + return .timedOut(unfulfilledExpectations: nonInvertedUnfilledExpectations) + } + } + + return .incomplete + } +} diff --git a/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift b/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift new file mode 100644 index 0000000000..f19b344fdd --- /dev/null +++ b/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift @@ -0,0 +1,481 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2018 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTWaiter.swift +// + +#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +import CoreFoundation +#endif + +/// Events are reported to the waiter's delegate via these methods. XCTestCase conforms to this +/// protocol and will automatically report timeouts and other unexpected events as test failures. +/// +/// - Note: These methods are invoked on an arbitrary queue. +public protocol XCTWaiterDelegate: AnyObject { + + /// Invoked when not all waited on expectations are fulfilled during the timeout period. If the delegate + /// is an XCTestCase instance, this will be reported as a test failure. + /// + /// - Parameter waiter: The waiter which timed out. + /// - Parameter unfulfilledExpectations: The expectations which were unfulfilled when `waiter` timed out. + func waiter(_ waiter: XCTWaiter, didTimeoutWithUnfulfilledExpectations unfulfilledExpectations: [XCTestExpectation]) + + /// Invoked when the wait specified that fulfillment order should be enforced and an expectation + /// has been fulfilled in the wrong order. If the delegate is an XCTestCase instance, this will be reported + /// as a test failure. + /// + /// - Parameter waiter: The waiter which had an ordering violation. + /// - Parameter expectation: The expectation which was fulfilled instead of the required expectation. + /// - Parameter requiredExpectation: The expectation which was fulfilled instead of the required expectation. + func waiter(_ waiter: XCTWaiter, fulfillmentDidViolateOrderingConstraintsFor expectation: XCTestExpectation, requiredExpectation: XCTestExpectation) + + /// Invoked when an expectation marked as inverted is fulfilled. If the delegate is an XCTestCase instance, + /// this will be reported as a test failure. + /// + /// - Parameter waiter: The waiter which had an inverted expectation fulfilled. + /// - Parameter expectation: The inverted expectation which was fulfilled. + /// + /// - SeeAlso: `XCTestExpectation.isInverted` + func waiter(_ waiter: XCTWaiter, didFulfillInvertedExpectation expectation: XCTestExpectation) + + /// Invoked when the waiter is interrupted prior to its expectations being fulfilled or timing out. + /// This occurs when an "outer" waiter times out, resulting in any waiters nested inside it being + /// interrupted to allow the call stack to quickly unwind. + /// + /// - Parameter waiter: The waiter which was interrupted. + /// - Parameter outerWaiter: The "outer" waiter which interrupted `waiter`. + func nestedWaiter(_ waiter: XCTWaiter, wasInterruptedByTimedOutWaiter outerWaiter: XCTWaiter) + +} + +// All `XCTWaiterDelegate` methods are optional, so empty default implementations are provided +public extension XCTWaiterDelegate { + func waiter(_ waiter: XCTWaiter, didTimeoutWithUnfulfilledExpectations unfulfilledExpectations: [XCTestExpectation]) {} + func waiter(_ waiter: XCTWaiter, fulfillmentDidViolateOrderingConstraintsFor expectation: XCTestExpectation, requiredExpectation: XCTestExpectation) {} + func waiter(_ waiter: XCTWaiter, didFulfillInvertedExpectation expectation: XCTestExpectation) {} + func nestedWaiter(_ waiter: XCTWaiter, wasInterruptedByTimedOutWaiter outerWaiter: XCTWaiter) {} +} + +/// Manages waiting - pausing the current execution context - for an array of XCTestExpectations. Waiters +/// can be used with or without a delegate to respond to events such as completion, timeout, or invalid +/// expectation fulfillment. XCTestCase conforms to the delegate protocol and will automatically report +/// timeouts and other unexpected events as test failures. +/// +/// Waiters can be used without a delegate or any association with a test case instance. This allows test +/// support libraries to provide convenience methods for waiting without having to pass test cases through +/// those APIs. +open class XCTWaiter { + + /// Values returned by a waiter when it completes, times out, or is interrupted due to another waiter + /// higher in the call stack timing out. + public enum Result: Int { + case completed = 1 + case timedOut + case incorrectOrder + case invertedFulfillment + case interrupted + } + + private enum State: Equatable { + case ready + case waiting(state: Waiting) + case finished(state: Finished) + + struct Waiting: Equatable { + var enforceOrder: Bool + var expectations: [XCTestExpectation] + var fulfilledExpectations: [XCTestExpectation] + } + + struct Finished: Equatable { + let result: Result + let fulfilledExpectations: [XCTestExpectation] + let unfulfilledExpectations: [XCTestExpectation] + } + + var allExpectations: [XCTestExpectation] { + switch self { + case .ready: + return [] + case let .waiting(waitingState): + return waitingState.expectations + case let .finished(finishedState): + return finishedState.fulfilledExpectations + finishedState.unfulfilledExpectations + } + } + } + + internal static let subsystemQueue = DispatchQueue(label: "org.swift.XCTest.XCTWaiter") + + private var state = State.ready + internal var timeout: TimeInterval = 0 + internal var waitSourceLocation: SourceLocation? + private weak var manager: WaiterManager? + private var runLoop: RunLoop? + + private weak var _delegate: XCTWaiterDelegate? + private let delegateQueue = DispatchQueue(label: "org.swift.XCTest.XCTWaiter.delegate") + + /// The waiter delegate will be called with various events described in the `XCTWaiterDelegate` protocol documentation. + /// + /// - SeeAlso: `XCTWaiterDelegate` + open var delegate: XCTWaiterDelegate? { + get { + return XCTWaiter.subsystemQueue.sync { _delegate } + } + set { + dispatchPrecondition(condition: .notOnQueue(XCTWaiter.subsystemQueue)) + XCTWaiter.subsystemQueue.async { self._delegate = newValue } + } + } + + /// Returns an array containing the expectations that were fulfilled, in that order, up until the waiter + /// stopped waiting. Expectations fulfilled after the waiter stopped waiting will not be in the array. + /// The array will be empty until the waiter has started waiting, even if expectations have already been + /// fulfilled. + open var fulfilledExpectations: [XCTestExpectation] { + return XCTWaiter.subsystemQueue.sync { + let fulfilledExpectations: [XCTestExpectation] + + switch state { + case .ready: + fulfilledExpectations = [] + case let .waiting(waitingState): + fulfilledExpectations = waitingState.fulfilledExpectations + case let .finished(finishedState): + fulfilledExpectations = finishedState.fulfilledExpectations + } + + // Sort by fulfillment token before returning, since it is the true fulfillment order. + // The waiter being notified by the expectation isn't guaranteed to happen in the same order. + return fulfilledExpectations.sorted { $0.queue_fulfillmentToken < $1.queue_fulfillmentToken } + } + } + + /// Initializes a waiter with an optional delegate. + public init(delegate: XCTWaiterDelegate? = nil) { + _delegate = delegate + } + + /// Wait on an array of expectations for up to the specified timeout, and optionally specify whether they + /// must be fulfilled in the given order. May return early based on fulfillment of the waited on expectations. + /// + /// - Parameter expectations: The expectations to wait on. + /// - Parameter timeout: The maximum total time duration to wait on all expectations. + /// - Parameter enforceOrder: Specifies whether the expectations must be fulfilled in the order + /// they are specified in the `expectations` Array. Default is false. + /// - Parameter file: The file name to use in the error message if + /// expectations are not fulfilled before the given timeout. Default is the file + /// containing the call to this method. It is rare to provide this + /// parameter when calling this method. + /// - Parameter line: The line number to use in the error message if the + /// expectations are not fulfilled before the given timeout. Default is the line + /// number of the call to this method in the calling file. It is rare to + /// provide this parameter when calling this method. + /// + /// - Note: Whereas Objective-C XCTest determines the file and line + /// number of the "wait" call using symbolication, this implementation + /// opts to take `file` and `line` as parameters instead. As a result, + /// the interface to these methods are not exactly identical between + /// these environments. To ensure compatibility of tests between + /// swift-corelibs-xctest and Apple XCTest, it is not recommended to pass + /// explicit values for `file` and `line`. + @available(*, noasync, message: "Use await fulfillment(of:timeout:enforceOrder:) instead.") + @discardableResult + open func wait(for expectations: [XCTestExpectation], timeout: TimeInterval, enforceOrder: Bool = false, file: StaticString = #file, line: Int = #line) -> Result { + precondition(Set(expectations).count == expectations.count, "API violation - each expectation can appear only once in the 'expectations' parameter.") + + self.timeout = timeout + waitSourceLocation = SourceLocation(file: file, line: line) + let runLoop = RunLoop.current + + XCTWaiter.subsystemQueue.sync { + precondition(state == .ready, "API violation - wait(...) has already been called on this waiter.") + + let previouslyWaitedOnExpectations = expectations.filter { $0.queue_hasBeenWaitedOn } + let previouslyWaitedOnExpectationDescriptions = previouslyWaitedOnExpectations.map { $0.queue_expectationDescription }.joined(separator: "`, `") + precondition(previouslyWaitedOnExpectations.isEmpty, "API violation - expectations can only be waited on once, `\(previouslyWaitedOnExpectationDescriptions)` have already been waited on.") + + let waitingState = State.Waiting( + enforceOrder: enforceOrder, + expectations: expectations, + fulfilledExpectations: expectations.filter { $0.queue_isFulfilled } + ) + queue_configureExpectations(expectations) + state = .waiting(state: waitingState) + self.runLoop = runLoop + + queue_validateExpectationFulfillment(dueToTimeout: false) + } + + let manager = WaiterManager.current + manager.startManaging(self, timeout: timeout) + self.manager = manager + + // Begin the core wait loop. + let timeoutTimestamp = Date.timeIntervalSinceReferenceDate + timeout + while !isFinished { + let remaining = timeoutTimestamp - Date.timeIntervalSinceReferenceDate + if remaining <= 0 { + break + } + primitiveWait(using: runLoop, duration: remaining) + } + + manager.stopManaging(self) + self.manager = nil + + let result: Result = XCTWaiter.subsystemQueue.sync { + queue_validateExpectationFulfillment(dueToTimeout: true) + + for expectation in expectations { + expectation.cleanUp() + expectation.queue_didFulfillHandler = nil + } + + guard case let .finished(finishedState) = state else { fatalError("Unexpected state: \(state)") } + return finishedState.result + } + + delegateQueue.sync { + // DO NOT REMOVE ME + // This empty block, executed synchronously, ensures that inflight delegate callbacks from the + // internal queue have been processed before wait returns. + } + + return result + } + + /// Wait on an array of expectations for up to the specified timeout, and optionally specify whether they + /// must be fulfilled in the given order. May return early based on fulfillment of the waited on expectations. + /// + /// - Parameter expectations: The expectations to wait on. + /// - Parameter timeout: The maximum total time duration to wait on all expectations. + /// - Parameter enforceOrder: Specifies whether the expectations must be fulfilled in the order + /// they are specified in the `expectations` Array. Default is false. + /// - Parameter file: The file name to use in the error message if + /// expectations are not fulfilled before the given timeout. Default is the file + /// containing the call to this method. It is rare to provide this + /// parameter when calling this method. + /// - Parameter line: The line number to use in the error message if the + /// expectations are not fulfilled before the given timeout. Default is the line + /// number of the call to this method in the calling file. It is rare to + /// provide this parameter when calling this method. + /// + /// - Note: Whereas Objective-C XCTest determines the file and line + /// number of the "wait" call using symbolication, this implementation + /// opts to take `file` and `line` as parameters instead. As a result, + /// the interface to these methods are not exactly identical between + /// these environments. To ensure compatibility of tests between + /// swift-corelibs-xctest and Apple XCTest, it is not recommended to pass + /// explicit values for `file` and `line`. + @available(macOS 12.0, *) + @discardableResult + open func fulfillment(of expectations: [XCTestExpectation], timeout: TimeInterval, enforceOrder: Bool = false, file: StaticString = #file, line: Int = #line) async -> Result { + return await withCheckedContinuation { continuation in + // This function operates by blocking a background thread instead of one owned by libdispatch or by the + // Swift runtime (as used by Swift concurrency.) To ensure we use a thread owned by neither subsystem, use + // Foundation's Thread.detachNewThread(_:). + Thread.detachNewThread { [self] in + let result = wait(for: expectations, timeout: timeout, enforceOrder: enforceOrder, file: file, line: line) + continuation.resume(returning: result) + } + } + } + + /// Convenience API to create an XCTWaiter which then waits on an array of expectations for up to the specified timeout, and optionally specify whether they + /// must be fulfilled in the given order. May return early based on fulfillment of the waited on expectations. The waiter + /// is discarded when the wait completes. + /// + /// - Parameter expectations: The expectations to wait on. + /// - Parameter timeout: The maximum total time duration to wait on all expectations. + /// - Parameter enforceOrder: Specifies whether the expectations must be fulfilled in the order + /// they are specified in the `expectations` Array. Default is false. + /// - Parameter file: The file name to use in the error message if + /// expectations are not fulfilled before the given timeout. Default is the file + /// containing the call to this method. It is rare to provide this + /// parameter when calling this method. + /// - Parameter line: The line number to use in the error message if the + /// expectations are not fulfilled before the given timeout. Default is the line + /// number of the call to this method in the calling file. It is rare to + /// provide this parameter when calling this method. + @available(*, noasync, message: "Use await fulfillment(of:timeout:enforceOrder:) instead.") + open class func wait(for expectations: [XCTestExpectation], timeout: TimeInterval, enforceOrder: Bool = false, file: StaticString = #file, line: Int = #line) -> Result { + return XCTWaiter().wait(for: expectations, timeout: timeout, enforceOrder: enforceOrder, file: file, line: line) + } + + /// Convenience API to create an XCTWaiter which then waits on an array of expectations for up to the specified timeout, and optionally specify whether they + /// must be fulfilled in the given order. May return early based on fulfillment of the waited on expectations. The waiter + /// is discarded when the wait completes. + /// + /// - Parameter expectations: The expectations to wait on. + /// - Parameter timeout: The maximum total time duration to wait on all expectations. + /// - Parameter enforceOrder: Specifies whether the expectations must be fulfilled in the order + /// they are specified in the `expectations` Array. Default is false. + /// - Parameter file: The file name to use in the error message if + /// expectations are not fulfilled before the given timeout. Default is the file + /// containing the call to this method. It is rare to provide this + /// parameter when calling this method. + /// - Parameter line: The line number to use in the error message if the + /// expectations are not fulfilled before the given timeout. Default is the line + /// number of the call to this method in the calling file. It is rare to + /// provide this parameter when calling this method. + @available(macOS 12.0, *) + open class func fulfillment(of expectations: [XCTestExpectation], timeout: TimeInterval, enforceOrder: Bool = false, file: StaticString = #file, line: Int = #line) async -> Result { + return await XCTWaiter().fulfillment(of: expectations, timeout: timeout, enforceOrder: enforceOrder, file: file, line: line) + } + + deinit { + for expectation in state.allExpectations { + expectation.cleanUp() + } + } + + private func queue_configureExpectations(_ expectations: [XCTestExpectation]) { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + + for expectation in expectations { + expectation.queue_didFulfillHandler = { [weak self, unowned expectation] in + self?.expectationWasFulfilled(expectation) + } + expectation.queue_hasBeenWaitedOn = true + } + } + + private func queue_validateExpectationFulfillment(dueToTimeout: Bool) { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + guard case let .waiting(waitingState) = state else { return } + + let validatableExpectations = waitingState.expectations.map { ValidatableXCTestExpectation(expectation: $0) } + let validationResult = XCTWaiter.validateExpectations(validatableExpectations, dueToTimeout: dueToTimeout, enforceOrder: waitingState.enforceOrder) + + switch validationResult { + case .complete: + queue_finish(result: .completed, cancelPrimitiveWait: !dueToTimeout) + + case .fulfilledInvertedExpectation(let invertedValidationExpectation): + queue_finish(result: .invertedFulfillment, cancelPrimitiveWait: true) { delegate in + delegate.waiter(self, didFulfillInvertedExpectation: invertedValidationExpectation.expectation) + } + + case .violatedOrderingConstraints(let validationExpectation, let requiredValidationExpectation): + queue_finish(result: .incorrectOrder, cancelPrimitiveWait: true) { delegate in + delegate.waiter(self, fulfillmentDidViolateOrderingConstraintsFor: validationExpectation.expectation, requiredExpectation: requiredValidationExpectation.expectation) + } + + case .timedOut(let unfulfilledValidationExpectations): + queue_finish(result: .timedOut, cancelPrimitiveWait: false) { delegate in + delegate.waiter(self, didTimeoutWithUnfulfilledExpectations: unfulfilledValidationExpectations.map { $0.expectation }) + } + + case .incomplete: + break + + } + } + + private func queue_finish(result: Result, cancelPrimitiveWait: Bool, delegateBlock: ((XCTWaiterDelegate) -> Void)? = nil) { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + guard case let .waiting(waitingState) = state else { preconditionFailure("Unexpected state: \(state)") } + + let unfulfilledExpectations = waitingState.expectations.filter { !waitingState.fulfilledExpectations.contains($0) } + + state = .finished(state: State.Finished( + result: result, + fulfilledExpectations: waitingState.fulfilledExpectations, + unfulfilledExpectations: unfulfilledExpectations + )) + + if cancelPrimitiveWait { + self.cancelPrimitiveWait() + } + + if let delegateBlock = delegateBlock, let delegate = _delegate { + delegateQueue.async { + delegateBlock(delegate) + } + } + } + + private func expectationWasFulfilled(_ expectation: XCTestExpectation) { + XCTWaiter.subsystemQueue.sync { + // If already finished, do nothing + guard case var .waiting(waitingState) = state else { return } + + waitingState.fulfilledExpectations.append(expectation) + queue_validateExpectationFulfillment(dueToTimeout: false) + } + } + +} + +private extension XCTWaiter { + func primitiveWait(using runLoop: RunLoop, duration timeout: TimeInterval) { + // The contract for `primitiveWait(for:)` explicitly allows waiting for a shorter period than requested + // by the `timeout` argument. Only run for a short time in case `cancelPrimitiveWait()` was called and + // issued `CFRunLoopStop` just before we reach this point. + let timeIntervalToRun = min(0.1, timeout) + + // RunLoop.run(mode:before:) should have @discardableResult + _ = runLoop.run(mode: .default, before: Date(timeIntervalSinceNow: timeIntervalToRun)) + } + + func cancelPrimitiveWait() { + guard let runLoop = runLoop else { return } +#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + CFRunLoopStop(runLoop.getCFRunLoop()) +#else + runLoop._stop() +#endif + } +} + +extension XCTWaiter: Equatable { + public static func == (lhs: XCTWaiter, rhs: XCTWaiter) -> Bool { + return lhs === rhs + } +} + +extension XCTWaiter: CustomStringConvertible { + public var description: String { + return XCTWaiter.subsystemQueue.sync { + let expectationsString = state.allExpectations.map { "'\($0.queue_expectationDescription)'" }.joined(separator: ", ") + + return "" + } + } +} + +extension XCTWaiter: ManageableWaiter { + var isFinished: Bool { + return XCTWaiter.subsystemQueue.sync { + switch state { + case .ready, .waiting: return false + case .finished: return true + } + } + } + + func queue_handleWatchdogTimeout() { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + + queue_validateExpectationFulfillment(dueToTimeout: true) + manager!.queue_handleWatchdogTimeout(of: self) + cancelPrimitiveWait() + } + + func queue_interrupt(for interruptingWaiter: XCTWaiter) { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + + queue_finish(result: .interrupted, cancelPrimitiveWait: true) { delegate in + delegate.nestedWaiter(self, wasInterruptedByTimedOutWaiter: interruptingWaiter) + } + } +} diff --git a/Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift b/Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift new file mode 100644 index 0000000000..b9935ff728 --- /dev/null +++ b/Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift @@ -0,0 +1,267 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2018 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestCase+Asynchronous.swift +// Methods on XCTestCase for testing asynchronous operations +// + +public extension XCTestCase { + + /// Creates a point of synchronization in the flow of a test. Only one + /// "wait" can be active at any given time, but multiple discrete sequences + /// of { expectations -> wait } can be chained together. The related + /// XCTWaiter API allows multiple "nested" waits if that is required. + /// + /// - Parameter timeout: The amount of time within which all expectation + /// must be fulfilled. + /// - Parameter file: The file name to use in the error message if + /// expectations are not met before the given timeout. Default is the file + /// containing the call to this method. It is rare to provide this + /// parameter when calling this method. + /// - Parameter line: The line number to use in the error message if the + /// expectations are not met before the given timeout. Default is the line + /// number of the call to this method in the calling file. It is rare to + /// provide this parameter when calling this method. + /// - Parameter handler: If provided, the handler will be invoked both on + /// timeout or fulfillment of all expectations. Timeout is always treated + /// as a test failure. + /// + /// - SeeAlso: XCTWaiter + /// + /// - Note: Whereas Objective-C XCTest determines the file and line + /// number of the "wait" call using symbolication, this implementation + /// opts to take `file` and `line` as parameters instead. As a result, + /// the interface to these methods are not exactly identical between + /// these environments. To ensure compatibility of tests between + /// swift-corelibs-xctest and Apple XCTest, it is not recommended to pass + /// explicit values for `file` and `line`. + @preconcurrency @MainActor + func waitForExpectations(timeout: TimeInterval, file: StaticString = #file, line: Int = #line, handler: XCWaitCompletionHandler? = nil) { + precondition(Thread.isMainThread, "\(#function) must be called on the main thread") + if currentWaiter != nil { + return recordFailure(description: "API violation - calling wait on test case while already waiting.", at: SourceLocation(file: file, line: line), expected: false) + } + let expectations = self.expectations + if expectations.isEmpty { + return recordFailure(description: "API violation - call made to wait without any expectations having been set.", at: SourceLocation(file: file, line: line), expected: false) + } + + let waiter = XCTWaiter(delegate: self) + currentWaiter = waiter + + let waiterResult = waiter.wait(for: expectations, timeout: timeout, file: file, line: line) + + currentWaiter = nil + + cleanUpExpectations(expectations) + + // The handler is invoked regardless of whether the test passed. + if let handler = handler { + let error = (waiterResult == .completed) ? nil : XCTestError(.timeoutWhileWaiting) + handler(error) + } + } + + /// Wait on an array of expectations for up to the specified timeout, and optionally specify whether they + /// must be fulfilled in the given order. May return early based on fulfillment of the waited on expectations. + /// + /// - Parameter expectations: The expectations to wait on. + /// - Parameter timeout: The maximum total time duration to wait on all expectations. + /// - Parameter enforceOrder: Specifies whether the expectations must be fulfilled in the order + /// they are specified in the `expectations` Array. Default is false. + /// - Parameter file: The file name to use in the error message if + /// expectations are not fulfilled before the given timeout. Default is the file + /// containing the call to this method. It is rare to provide this + /// parameter when calling this method. + /// - Parameter line: The line number to use in the error message if the + /// expectations are not fulfilled before the given timeout. Default is the line + /// number of the call to this method in the calling file. It is rare to + /// provide this parameter when calling this method. + /// + /// - SeeAlso: XCTWaiter + @available(*, noasync, message: "Use await fulfillment(of:timeout:enforceOrder:) instead.") + func wait(for expectations: [XCTestExpectation], timeout: TimeInterval, enforceOrder: Bool = false, file: StaticString = #file, line: Int = #line) { + let waiter = XCTWaiter(delegate: self) + waiter.wait(for: expectations, timeout: timeout, enforceOrder: enforceOrder, file: file, line: line) + + cleanUpExpectations(expectations) + } + + /// Wait on an array of expectations for up to the specified timeout, and optionally specify whether they + /// must be fulfilled in the given order. May return early based on fulfillment of the waited on expectations. + /// + /// - Parameter expectations: The expectations to wait on. + /// - Parameter timeout: The maximum total time duration to wait on all expectations. + /// - Parameter enforceOrder: Specifies whether the expectations must be fulfilled in the order + /// they are specified in the `expectations` Array. Default is false. + /// - Parameter file: The file name to use in the error message if + /// expectations are not fulfilled before the given timeout. Default is the file + /// containing the call to this method. It is rare to provide this + /// parameter when calling this method. + /// - Parameter line: The line number to use in the error message if the + /// expectations are not fulfilled before the given timeout. Default is the line + /// number of the call to this method in the calling file. It is rare to + /// provide this parameter when calling this method. + /// + /// - SeeAlso: XCTWaiter + @available(macOS 12.0, *) + func fulfillment(of expectations: [XCTestExpectation], timeout: TimeInterval, enforceOrder: Bool = false, file: StaticString = #file, line: Int = #line) async { + let waiter = XCTWaiter(delegate: self) + await waiter.fulfillment(of: expectations, timeout: timeout, enforceOrder: enforceOrder, file: file, line: line) + + cleanUpExpectations(expectations) + } + + /// Creates and returns an expectation associated with the test case. + /// + /// - Parameter description: This string will be displayed in the test log + /// to help diagnose failures. + /// - Parameter file: The file name to use in the error message if + /// this expectation is not waited for. Default is the file + /// containing the call to this method. It is rare to provide this + /// parameter when calling this method. + /// - Parameter line: The line number to use in the error message if the + /// this expectation is not waited for. Default is the line + /// number of the call to this method in the calling file. It is rare to + /// provide this parameter when calling this method. + /// + /// - Note: Whereas Objective-C XCTest determines the file and line + /// number of expectations that are created by using symbolication, this + /// implementation opts to take `file` and `line` as parameters instead. + /// As a result, the interface to these methods are not exactly identical + /// between these environments. To ensure compatibility of tests between + /// swift-corelibs-xctest and Apple XCTest, it is not recommended to pass + /// explicit values for `file` and `line`. + @discardableResult func expectation(description: String, file: StaticString = #file, line: Int = #line) -> XCTestExpectation { + let expectation = XCTestExpectation(description: description, file: file, line: line) + addExpectation(expectation) + return expectation + } + + /// Creates and returns an expectation for a notification. + /// + /// - Parameter notificationName: The name of the notification the + /// expectation observes. + /// - Parameter object: The object whose notifications the expectation will + /// receive; that is, only notifications with this object are observed by + /// the test case. If you pass nil, the expectation doesn't use + /// a notification's object to decide whether it is fulfilled. + /// - Parameter notificationCenter: The specific notification center that + /// the notification will be posted to. + /// - Parameter handler: If provided, the handler will be invoked when the + /// notification is observed. It will not be invoked on timeout. Use the + /// handler to further investigate if the notification fulfills the + /// expectation. + @discardableResult func expectation(forNotification notificationName: Notification.Name, object: Any? = nil, notificationCenter: NotificationCenter = .default, file: StaticString = #file, line: Int = #line, handler: XCTNSNotificationExpectation.Handler? = nil) -> XCTestExpectation { + let expectation = XCTNSNotificationExpectation(name: notificationName, object: object, notificationCenter: notificationCenter, file: file, line: line) + expectation.handler = handler + addExpectation(expectation) + return expectation + } + + /// Creates and returns an expectation for a notification. + /// + /// - Parameter notificationName: The name of the notification the + /// expectation observes. + /// - Parameter object: The object whose notifications the expectation will + /// receive; that is, only notifications with this object are observed by + /// the test case. If you pass nil, the expectation doesn't use + /// a notification's object to decide whether it is fulfilled. + /// - Parameter notificationCenter: The specific notification center that + /// the notification will be posted to. + /// - Parameter handler: If provided, the handler will be invoked when the + /// notification is observed. It will not be invoked on timeout. Use the + /// handler to further investigate if the notification fulfills the + /// expectation. + @discardableResult func expectation(forNotification notificationName: String, object: Any? = nil, notificationCenter: NotificationCenter = .default, file: StaticString = #file, line: Int = #line, handler: XCTNSNotificationExpectation.Handler? = nil) -> XCTestExpectation { + return expectation(forNotification: Notification.Name(rawValue: notificationName), object: object, notificationCenter: notificationCenter, file: file, line: line, handler: handler) + } + + /// Creates and returns an expectation that is fulfilled if the predicate + /// returns true when evaluated with the given object. The expectation + /// periodically evaluates the predicate and also may use notifications or + /// other events to optimistically re-evaluate. + /// + /// - Parameter predicate: The predicate that will be used to evaluate the + /// object. + /// - Parameter object: The object that is evaluated against the conditions + /// specified by the predicate, if any. Default is nil. + /// - Parameter file: The file name to use in the error message if + /// this expectation is not waited for. Default is the file + /// containing the call to this method. It is rare to provide this + /// parameter when calling this method. + /// - Parameter line: The line number to use in the error message if the + /// this expectation is not waited for. Default is the line + /// number of the call to this method in the calling file. It is rare to + /// provide this parameter when calling this method. + /// - Parameter handler: A block to be invoked when evaluating the predicate + /// against the object returns true. If the block is not provided the + /// first successful evaluation will fulfill the expectation. If provided, + /// the handler can override that behavior which leaves the caller + /// responsible for fulfilling the expectation. + @discardableResult func expectation(for predicate: NSPredicate, evaluatedWith object: Any? = nil, file: StaticString = #file, line: Int = #line, handler: XCTNSPredicateExpectation.Handler? = nil) -> XCTestExpectation { + let expectation = XCTNSPredicateExpectation(predicate: predicate, object: object, file: file, line: line) + expectation.handler = handler + addExpectation(expectation) + return expectation + } + +} + +/// A block to be invoked when a call to wait times out or has had all +/// associated expectations fulfilled. +/// +/// - Parameter error: If the wait timed out or a failure was raised while +/// waiting, the error's code will specify the type of failure. Otherwise +/// error will be nil. +public typealias XCWaitCompletionHandler = (Error?) -> () + +extension XCTestCase: XCTWaiterDelegate { + + public func waiter(_ waiter: XCTWaiter, didTimeoutWithUnfulfilledExpectations unfulfilledExpectations: [XCTestExpectation]) { + let expectationDescription = unfulfilledExpectations.map { $0.expectationDescription }.joined(separator: ", ") + let failureDescription = "Asynchronous wait failed - Exceeded timeout of \(waiter.timeout) seconds, with unfulfilled expectations: \(expectationDescription)" + recordFailure(description: failureDescription, at: waiter.waitSourceLocation ?? .unknown, expected: true) + } + + public func waiter(_ waiter: XCTWaiter, fulfillmentDidViolateOrderingConstraintsFor expectation: XCTestExpectation, requiredExpectation: XCTestExpectation) { + let failureDescription = "Failed due to expectation fulfilled in incorrect order: requires '\(requiredExpectation.expectationDescription)', actually fulfilled '\(expectation.expectationDescription)'" + recordFailure(description: failureDescription, at: expectation.fulfillmentSourceLocation ?? .unknown, expected: true) + } + + public func waiter(_ waiter: XCTWaiter, didFulfillInvertedExpectation expectation: XCTestExpectation) { + let failureDescription = "Asynchronous wait failed - Fulfilled inverted expectation '\(expectation.expectationDescription)'" + recordFailure(description: failureDescription, at: expectation.fulfillmentSourceLocation ?? .unknown, expected: true) + } + + public func nestedWaiter(_ waiter: XCTWaiter, wasInterruptedByTimedOutWaiter outerWaiter: XCTWaiter) { + let failureDescription = "Asynchronous waiter \(waiter) failed - Interrupted by timeout of containing waiter \(outerWaiter)" + recordFailure(description: failureDescription, at: waiter.waitSourceLocation ?? .unknown, expected: true) + } + +} + +internal extension XCTestCase { + // It is an API violation to create expectations but not wait for them to + // be completed. Notify the user of a mistake via a test failure. + func failIfExpectationsNotWaitedFor(_ expectations: [XCTestExpectation]) { + let orderedUnwaitedExpectations = expectations.filter { !$0.hasBeenWaitedOn }.sorted { $0.creationToken < $1.creationToken } + guard let expectationForFileLineReporting = orderedUnwaitedExpectations.first else { + return + } + + let expectationDescriptions = orderedUnwaitedExpectations.map { "'\($0.expectationDescription)'" }.joined(separator: ", ") + let failureDescription = "Failed due to unwaited expectation\(orderedUnwaitedExpectations.count > 1 ? "s" : "") \(expectationDescriptions)" + + recordFailure( + description: failureDescription, + at: expectationForFileLineReporting.creationSourceLocation, + expected: false) + } +} diff --git a/Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift b/Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift new file mode 100644 index 0000000000..16564dd9cf --- /dev/null +++ b/Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift @@ -0,0 +1,322 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestExpectation.swift +// + +/// Expectations represent specific conditions in asynchronous testing. +open class XCTestExpectation: @unchecked Sendable { + + private static var currentMonotonicallyIncreasingToken: UInt64 = 0 + private static func queue_nextMonotonicallyIncreasingToken() -> UInt64 { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + currentMonotonicallyIncreasingToken += 1 + return currentMonotonicallyIncreasingToken + } + private static func nextMonotonicallyIncreasingToken() -> UInt64 { + return XCTWaiter.subsystemQueue.sync { queue_nextMonotonicallyIncreasingToken() } + } + + /* + Rules for properties + ==================== + + XCTestExpectation has many properties, many of which require synchronization on `XCTWaiter.subsystemQueue`. + When adding properties, use the following rules for consistency. The naming guidelines aim to allow + property names to be as short & simple as possible, while maintaining the necessary synchronization. + + - If property is constant (`let`), it is immutable so there is no synchronization concern. + - No underscore prefix on name + - No matching `queue_` property + - If it is only used within this file: + - `private` access + - If is is used outside this file but not outside the module: + - `internal` access + - If it is used outside the module: + - `public` or `open` access, depending on desired overridability + + - If property is variable (`var`), it is mutable so access to it must be synchronized. + - `private` access + - If it is only used within this file: + - No underscore prefix on name + - No matching `queue_` property + - If is is used outside this file: + - If access outside this file is always on-queue: + - No underscore prefix on name + - Matching internal `queue_` property with `.onQueue` dispatchPreconditions + - If access outside this file is sometimes off-queue + - Underscore prefix on name + - Matching `internal` property with `queue_` prefix and `XCTWaiter.subsystemQueue` dispatchPreconditions + - Matching `internal` or `public` property without underscore prefix but with `XCTWaiter.subsystemQueue` synchronization + */ + + private var _expectationDescription: String + + internal let creationToken: UInt64 + internal let creationSourceLocation: SourceLocation + + private var isFulfilled = false + private var fulfillmentToken: UInt64 = 0 + private var _fulfillmentSourceLocation: SourceLocation? + + private var _expectedFulfillmentCount = 1 + private var numberOfFulfillments = 0 + + private var _isInverted = false + + private var _assertForOverFulfill = false + + private var _hasBeenWaitedOn = false + + private var _didFulfillHandler: (() -> Void)? + + /// A human-readable string used to describe the expectation in log output and test reports. + open var expectationDescription: String { + get { + return XCTWaiter.subsystemQueue.sync { queue_expectationDescription } + } + set { + XCTWaiter.subsystemQueue.sync { queue_expectationDescription = newValue } + } + } + + /// The number of times `fulfill()` must be called on the expectation in order for it + /// to report complete fulfillment to its waiter. Default is 1. + /// This value must be greater than 0 and is not meaningful if combined with `isInverted`. + open var expectedFulfillmentCount: Int { + get { + return XCTWaiter.subsystemQueue.sync { queue_expectedFulfillmentCount } + } + set { + precondition(newValue > 0, "API violation - fulfillment count must be greater than 0.") + + XCTWaiter.subsystemQueue.sync { + precondition(!queue_hasBeenWaitedOn, "API violation - cannot set expectedFulfillmentCount on '\(queue_expectationDescription)' after already waiting on it.") + queue_expectedFulfillmentCount = newValue + } + } + } + + /// If an expectation is set to be inverted, then fulfilling it will have a similar effect as + /// failing to fulfill a conventional expectation has, as handled by the waiter and its delegate. + /// Furthermore, waiters that wait on an inverted expectation will allow the full timeout to elapse + /// and not report timeout to the delegate if it is not fulfilled. + open var isInverted: Bool { + get { + return XCTWaiter.subsystemQueue.sync { queue_isInverted } + } + set { + XCTWaiter.subsystemQueue.sync { + precondition(!queue_hasBeenWaitedOn, "API violation - cannot set isInverted on '\(queue_expectationDescription)' after already waiting on it.") + queue_isInverted = newValue + } + } + } + + /// If set, calls to fulfill() after the expectation has already been fulfilled - exceeding the fulfillment + /// count - will cause a fatal error and halt process execution. Default is false (disabled). + /// + /// - Note: This is the legacy behavior of expectations created through APIs on the ObjC version of XCTestCase + /// because that version raises ObjC exceptions (which may be caught) instead of causing a fatal error. + /// In this version of XCTest, no expectation ever has this property set to true (enabled) by default, it + /// must be opted-in to explicitly. + open var assertForOverFulfill: Bool { + get { + return XCTWaiter.subsystemQueue.sync { _assertForOverFulfill } + } + set { + XCTWaiter.subsystemQueue.sync { + precondition(!queue_hasBeenWaitedOn, "API violation - cannot set assertForOverFulfill on '\(queue_expectationDescription)' after already waiting on it.") + _assertForOverFulfill = newValue + } + } + } + + internal var fulfillmentSourceLocation: SourceLocation? { + return XCTWaiter.subsystemQueue.sync { _fulfillmentSourceLocation } + } + + internal var hasBeenWaitedOn: Bool { + return XCTWaiter.subsystemQueue.sync { queue_hasBeenWaitedOn } + } + + internal var queue_expectationDescription: String { + get { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + return _expectationDescription + } + set { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + _expectationDescription = newValue + } + } + internal var queue_isFulfilled: Bool { + get { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + return isFulfilled + } + set { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + isFulfilled = newValue + } + } + internal var queue_fulfillmentToken: UInt64 { + get { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + return fulfillmentToken + } + set { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + fulfillmentToken = newValue + } + } + internal var queue_expectedFulfillmentCount: Int { + get { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + return _expectedFulfillmentCount + } + set { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + _expectedFulfillmentCount = newValue + } + } + internal var queue_isInverted: Bool { + get { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + return _isInverted + } + set { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + _isInverted = newValue + } + } + internal var queue_hasBeenWaitedOn: Bool { + get { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + return _hasBeenWaitedOn + } + set { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + _hasBeenWaitedOn = newValue + + if _hasBeenWaitedOn { + didBeginWaiting() + } + } + } + internal var queue_didFulfillHandler: (() -> Void)? { + get { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + return _didFulfillHandler + } + set { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + _didFulfillHandler = newValue + } + } + + /// Initializes a new expectation with a description of the condition it is checking. + /// + /// - Parameter description: A human-readable string used to describe the condition the expectation is checking. + public init(description: String = "no description provided", file: StaticString = #file, line: Int = #line) { + _expectationDescription = description + creationToken = XCTestExpectation.nextMonotonicallyIncreasingToken() + creationSourceLocation = SourceLocation(file: file, line: line) + } + + /// Marks an expectation as having been met. It's an error to call this + /// method on an expectation that has already been fulfilled, or when the + /// test case that vended the expectation has already completed. + /// + /// - Parameter file: The file name to use in the error message if + /// expectations are not met before the given timeout. Default is the file + /// containing the call to this method. It is rare to provide this + /// parameter when calling this method. + /// - Parameter line: The line number to use in the error message if the + /// expectations are not met before the given timeout. Default is the line + /// number of the call to this method in the calling file. It is rare to + /// provide this parameter when calling this method. + /// + /// - Note: Whereas Objective-C XCTest determines the file and line + /// number the expectation was fulfilled using symbolication, this + /// implementation opts to take `file` and `line` as parameters instead. + /// As a result, the interface to these methods are not exactly identical + /// between these environments. To ensure compatibility of tests between + /// swift-corelibs-xctest and Apple XCTest, it is not recommended to pass + /// explicit values for `file` and `line`. + open func fulfill(_ file: StaticString = #file, line: Int = #line) { + let sourceLocation = SourceLocation(file: file, line: line) + + let didFulfillHandler: (() -> Void)? = XCTWaiter.subsystemQueue.sync { + // FIXME: Objective-C XCTest emits failures when expectations are + // fulfilled after the test cases that generated those + // expectations have completed. Similarly, this should cause an + // error as well. + + if queue_isFulfilled, _assertForOverFulfill, let testCase = XCTCurrentTestCase { + testCase.recordFailure( + description: "API violation - multiple calls made to XCTestExpectation.fulfill() for \(queue_expectationDescription).", + at: sourceLocation, + expected: false) + + return nil + } + + if queue_fulfill(sourceLocation: sourceLocation) { + return queue_didFulfillHandler + } else { + return nil + } + } + + didFulfillHandler?() + } + + private func queue_fulfill(sourceLocation: SourceLocation) -> Bool { + dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) + + numberOfFulfillments += 1 + + if numberOfFulfillments == queue_expectedFulfillmentCount { + queue_isFulfilled = true + _fulfillmentSourceLocation = sourceLocation + queue_fulfillmentToken = XCTestExpectation.queue_nextMonotonicallyIncreasingToken() + return true + } else { + return false + } + } + + internal func didBeginWaiting() { + // Override point for subclasses + } + + internal func cleanUp() { + // Override point for subclasses + } + +} + +extension XCTestExpectation: Equatable { + public static func == (lhs: XCTestExpectation, rhs: XCTestExpectation) -> Bool { + return lhs === rhs + } +} + +extension XCTestExpectation: Hashable { + public func hash(into hasher: inout Hasher) { + hasher.combine(ObjectIdentifier(self)) + } +} + +extension XCTestExpectation: CustomStringConvertible { + public var description: String { + return expectationDescription + } +} diff --git a/Sources/XCTest/Public/XCAbstractTest.swift b/Sources/XCTest/Public/XCAbstractTest.swift new file mode 100644 index 0000000000..cf37cba0da --- /dev/null +++ b/Sources/XCTest/Public/XCAbstractTest.swift @@ -0,0 +1,81 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCAbstractTest.swift +// An abstract base class that XCTestCase and XCTestSuite inherit from. +// The purpose of this class is to mirror the design of Apple XCTest. +// + +/// An abstract base class for testing. `XCTestCase` and `XCTestSuite` extend +/// `XCTest` to provide for creating, managing, and executing tests. Most +/// developers will not need to subclass `XCTest` directly. +open class XCTest { + /// Test's name. Must be overridden by subclasses. + open var name: String { + fatalError("Must be overridden by subclasses.") + } + + /// Number of test cases. Must be overridden by subclasses. + open var testCaseCount: Int { + fatalError("Must be overridden by subclasses.") + } + + /// The `XCTestRun` subclass that will be instantiated when the test is run + /// to hold the test's results. Must be overridden by subclasses. + open var testRunClass: AnyClass? { + fatalError("Must be overridden by subclasses.") + } + + /// The test run object that executed the test, an instance of + /// testRunClass. If the test has not yet been run, this will be nil. + open private(set) var testRun: XCTestRun? = nil + + /// The method through which tests are executed. Must be overridden by + /// subclasses. + open func perform(_ run: XCTestRun) { + fatalError("Must be overridden by subclasses.") + } + + /// Creates an instance of the `testRunClass` and passes it as a parameter + /// to `perform()`. + open func run() { + guard let testRunType = testRunClass as? XCTestRun.Type else { + fatalError("XCTest.testRunClass must be a kind of XCTestRun.") + } + testRun = testRunType.init(test: self) + perform(testRun!) + } + + /// Async setup method called before the invocation of `setUpWithError` for each test method in the class. + @available(macOS 12.0, *) + open func setUp() async throws {} + /// Setup method called before the invocation of `setUp` and the test method + /// for each test method in the class. + open func setUpWithError() throws {} + + /// Setup method called before the invocation of each test method in the + /// class. + open func setUp() {} + + /// Teardown method called after the invocation of each test method in the + /// class. + open func tearDown() {} + + /// Teardown method called after the invocation of the test method and `tearDown` + /// for each test method in the class. + open func tearDownWithError() throws {} + + /// Async teardown method which is called after the invocation of `tearDownWithError` + /// for each test method in the class. + @available(macOS 12.0, *) + open func tearDown() async throws {} + // FIXME: This initializer is required due to a Swift compiler bug on Linux. + // It should be removed once the bug is fixed. + public init() {} +} diff --git a/Sources/XCTest/Public/XCTAssert.swift b/Sources/XCTest/Public/XCTAssert.swift new file mode 100644 index 0000000000..d3249740a8 --- /dev/null +++ b/Sources/XCTest/Public/XCTAssert.swift @@ -0,0 +1,444 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTAssert.swift +// + +private enum _XCTAssertion { + case equal + case equalWithAccuracy + case identical + case notIdentical + case greaterThan + case greaterThanOrEqual + case lessThan + case lessThanOrEqual + case notEqual + case notEqualWithAccuracy + case `nil` + case notNil + case unwrap + case `true` + case `false` + case fail + case throwsError + case noThrow + + var name: String? { + switch(self) { + case .equal: return "XCTAssertEqual" + case .equalWithAccuracy: return "XCTAssertEqual" + case .identical: return "XCTAssertIdentical" + case .notIdentical: return "XCTAssertNotIdentical" + case .greaterThan: return "XCTAssertGreaterThan" + case .greaterThanOrEqual: return "XCTAssertGreaterThanOrEqual" + case .lessThan: return "XCTAssertLessThan" + case .lessThanOrEqual: return "XCTAssertLessThanOrEqual" + case .notEqual: return "XCTAssertNotEqual" + case .notEqualWithAccuracy: return "XCTAssertNotEqual" + case .`nil`: return "XCTAssertNil" + case .notNil: return "XCTAssertNotNil" + case .unwrap: return "XCTUnwrap" + case .`true`: return "XCTAssertTrue" + case .`false`: return "XCTAssertFalse" + case .throwsError: return "XCTAssertThrowsError" + case .noThrow: return "XCTAssertNoThrow" + case .fail: return nil + } + } +} + +private enum _XCTAssertionResult { + case success + case expectedFailure(String?) + case unexpectedFailure(Swift.Error) + + var isExpected: Bool { + switch self { + case .unexpectedFailure(_): return false + default: return true + } + } + + func failureDescription(_ assertion: _XCTAssertion) -> String { + let explanation: String + switch self { + case .success: explanation = "passed" + case .expectedFailure(let details?): explanation = "failed: \(details)" + case .expectedFailure(_): explanation = "failed" + case .unexpectedFailure(let error): explanation = "threw error \"\(error)\"" + } + + if let name = assertion.name { + return "\(name) \(explanation)" + } else { + return explanation + } + } +} + +private func _XCTEvaluateAssertion(_ assertion: _XCTAssertion, message: @autoclosure () -> String, file: StaticString, line: UInt, expression: () throws -> _XCTAssertionResult) { + let result: _XCTAssertionResult + do { + result = try expression() + } catch { + result = .unexpectedFailure(error) + } + + switch result { + case .success: + return + default: + if let currentTestCase = XCTCurrentTestCase { + currentTestCase.recordFailure( + withDescription: "\(result.failureDescription(assertion)) - \(message())", + inFile: String(describing: file), + atLine: Int(line), + expected: result.isExpected) + } + } +} + +/// This function emits a test failure if the general `Boolean` expression passed +/// to it evaluates to `false`. +/// +/// - Requires: This and all other XCTAssert* functions must be called from +/// within a test method, as passed to `XCTMain`. +/// Assertion failures that occur outside of a test method will *not* be +/// reported as failures. +/// +/// - Parameter expression: A boolean test. If it evaluates to `false`, the +/// assertion fails and emits a test failure. +/// - Parameter message: An optional message to use in the failure if the +/// assertion fails. If no message is supplied a default message is used. +/// - Parameter file: The file name to use in the error message if the assertion +/// fails. Default is the file containing the call to this function. It is +/// rare to provide this parameter when calling this function. +/// - Parameter line: The line number to use in the error message if the +/// assertion fails. Default is the line number of the call to this function +/// in the calling file. It is rare to provide this parameter when calling +/// this function. +/// +/// - Note: It is rare to provide the `file` and `line` parameters when calling +/// this function, although you may consider doing so when creating your own +/// assertion functions. For example, consider the following custom assertion: +/// +/// ``` +/// // AssertEmpty.swift +/// +/// func AssertEmpty(_ elements: [T]) { +/// XCTAssertEqual(elements.count, 0, "Array is not empty") +/// } +/// ``` +/// +/// Calling this assertion will cause XCTest to report the failure occurred +/// in the file where `AssertEmpty()` is defined, and on the line where +/// `XCTAssertEqual` is called from within that function: +/// +/// ``` +/// // MyFile.swift +/// +/// AssertEmpty([1, 2, 3]) // Emits "AssertEmpty.swift:3: error: ..." +/// ``` +/// +/// To have XCTest properly report the file and line where the assertion +/// failed, you may specify the file and line yourself: +/// +/// ``` +/// // AssertEmpty.swift +/// +/// func AssertEmpty(_ elements: [T], file: StaticString = #file, line: UInt = #line) { +/// XCTAssertEqual(elements.count, 0, "Array is not empty", file: file, line: line) +/// } +/// ``` +/// +/// Now calling failures in `AssertEmpty` will be reported in the file and on +/// the line that the assert function is *called*, not where it is defined. +public func XCTAssert(_ expression: @autoclosure () throws -> Bool, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + XCTAssertTrue(try expression(), message(), file: file, line: line) +} + +public func XCTAssertEqual(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTEvaluateAssertion(.equal, message: message(), file: file, line: line) { + let (value1, value2) = (try expression1(), try expression2()) + if value1 == value2 { + return .success + } else { + return .expectedFailure("(\"\(value1)\") is not equal to (\"\(value2)\")") + } + } +} + +private func areEqual(_ exp1: T, _ exp2: T, accuracy: T) -> Bool { + // Test with equality first to handle comparing inf/-inf with itself. + if exp1 == exp2 { + return true + } else { + // NaN values are handled implicitly, since the <= operator returns false when comparing any value to NaN. + let difference = (exp1.magnitude > exp2.magnitude) ? exp1 - exp2 : exp2 - exp1 + return difference.magnitude <= accuracy.magnitude + } +} + +public func XCTAssertEqual(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, accuracy: T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTAssertEqual(try expression1(), try expression2(), accuracy: accuracy, message(), file: file, line: line) +} + +public func XCTAssertEqual(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, accuracy: T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTAssertEqual(try expression1(), try expression2(), accuracy: accuracy, message(), file: file, line: line) +} + +private func _XCTAssertEqual(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, accuracy: T, _ message: @autoclosure () -> String, file: StaticString, line: UInt) { + _XCTEvaluateAssertion(.equalWithAccuracy, message: message(), file: file, line: line) { + let (value1, value2) = (try expression1(), try expression2()) + if areEqual(value1, value2, accuracy: accuracy) { + return .success + } else { + return .expectedFailure("(\"\(value1)\") is not equal to (\"\(value2)\") +/- (\"\(accuracy)\")") + } + } +} + +@available(*, deprecated, renamed: "XCTAssertEqual(_:_:accuracy:file:line:)") +public func XCTAssertEqualWithAccuracy(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, accuracy: T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + XCTAssertEqual(try expression1(), try expression2(), accuracy: accuracy, message(), file: file, line: line) +} + +private func describe(_ object: AnyObject?) -> String { + return object == nil ? String(describing: object) : String(describing: object!) +} + +/// Asserts that two values are identical. +public func XCTAssertIdentical(_ expression1: @autoclosure () throws -> AnyObject?, _ expression2: @autoclosure () throws -> AnyObject?, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTEvaluateAssertion(.identical, message: message(), file: file, line: line) { + let (value1, value2) = (try expression1(), try expression2()) + if value1 === value2 { + return .success + } else { + return .expectedFailure("(\"\(describe(value1))\") is not identical to (\"\(describe(value2))\")") + } + } +} + +/// Asserts that two values aren't identical. +public func XCTAssertNotIdentical(_ expression1: @autoclosure () throws -> AnyObject?, _ expression2: @autoclosure () throws -> AnyObject?, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTEvaluateAssertion(.notIdentical, message: message(), file: file, line: line) { + let (value1, value2) = (try expression1(), try expression2()) + if value1 !== value2 { + return .success + } else { + return .expectedFailure("(\"\(describe(value1))\") is identical to (\"\(describe(value2))\")") + } + } +} + +public func XCTAssertFalse(_ expression: @autoclosure () throws -> Bool, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTEvaluateAssertion(.`false`, message: message(), file: file, line: line) { + let value = try expression() + if !value { + return .success + } else { + return .expectedFailure(nil) + } + } +} + +public func XCTAssertGreaterThan(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTEvaluateAssertion(.greaterThan, message: message(), file: file, line: line) { + let (value1, value2) = (try expression1(), try expression2()) + if value1 > value2 { + return .success + } else { + return .expectedFailure("(\"\(value1)\") is not greater than (\"\(value2)\")") + } + } +} + +public func XCTAssertGreaterThanOrEqual(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTEvaluateAssertion(.greaterThanOrEqual, message: message(), file: file, line: line) { + let (value1, value2) = (try expression1(), try expression2()) + if value1 >= value2 { + return .success + } else { + return .expectedFailure("(\"\(value1)\") is less than (\"\(value2)\")") + } + } +} + +public func XCTAssertLessThan(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTEvaluateAssertion(.lessThan, message: message(), file: file, line: line) { + let (value1, value2) = (try expression1(), try expression2()) + if value1 < value2 { + return .success + } else { + return .expectedFailure("(\"\(value1)\") is not less than (\"\(value2)\")") + } + } +} + +public func XCTAssertLessThanOrEqual(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTEvaluateAssertion(.lessThanOrEqual, message: message(), file: file, line: line) { + let (value1, value2) = (try expression1(), try expression2()) + if value1 <= value2 { + return .success + } else { + return .expectedFailure("(\"\(value1)\") is greater than (\"\(value2)\")") + } + } +} + +public func XCTAssertNil(_ expression: @autoclosure () throws -> Any?, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTEvaluateAssertion(.`nil`, message: message(), file: file, line: line) { + let value = try expression() + if value == nil { + return .success + } else { + return .expectedFailure("\"\(value!)\"") + } + } +} + +public func XCTAssertNotEqual(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTEvaluateAssertion(.notEqual, message: message(), file: file, line: line) { + let (value1, value2) = (try expression1(), try expression2()) + if value1 != value2 { + return .success + } else { + return .expectedFailure("(\"\(value1)\") is equal to (\"\(value2)\")") + } + } +} + +public func XCTAssertNotEqual(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, accuracy: T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTAssertNotEqual(try expression1(), try expression2(), accuracy: accuracy, message(), file: file, line: line) +} + +public func XCTAssertNotEqual(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, accuracy: T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTAssertNotEqual(try expression1(), try expression2(), accuracy: accuracy, message(), file: file, line: line) +} + +private func _XCTAssertNotEqual(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, accuracy: T, _ message: @autoclosure () -> String, file: StaticString, line: UInt) { + _XCTEvaluateAssertion(.notEqualWithAccuracy, message: message(), file: file, line: line) { + let (value1, value2) = (try expression1(), try expression2()) + if !areEqual(value1, value2, accuracy: accuracy) { + return .success + } else { + return .expectedFailure("(\"\(value1)\") is equal to (\"\(value2)\") +/- (\"\(accuracy)\")") + } + } +} + +@available(*, deprecated, renamed: "XCTAssertNotEqual(_:_:accuracy:file:line:)") +public func XCTAssertNotEqualWithAccuracy(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, _ accuracy: T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + XCTAssertNotEqual(try expression1(), try expression2(), accuracy: accuracy, message(), file: file, line: line) +} + +public func XCTAssertNotNil(_ expression: @autoclosure () throws -> Any?, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTEvaluateAssertion(.notNil, message: message(), file: file, line: line) { + let value = try expression() + if value != nil { + return .success + } else { + return .expectedFailure(nil) + } + } +} + +/// Asserts that an expression is not `nil`, and returns its unwrapped value. +/// +/// Generates a failure if `expression` returns `nil`. +/// +/// - Parameters: +/// - expression: An expression of type `T?` to compare against `nil`. Its type will determine the type of the +/// returned value. +/// - message: An optional description of the failure. +/// - file: The file in which failure occurred. Defaults to the file name of the test case in which this function was +/// called. +/// - line: The line number on which failure occurred. Defaults to the line number on which this function was called. +/// - Returns: A value of type `T`, the result of evaluating and unwrapping the given `expression`. +/// - Throws: An error if `expression` returns `nil`. If `expression` throws an error, then that error will be rethrown instead. +public func XCTUnwrap(_ expression: @autoclosure () throws -> T?, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) throws -> T { + var value: T? + var caughtErrorOptional: Swift.Error? + + _XCTEvaluateAssertion(.unwrap, message: message(), file: file, line: line) { + do { + value = try expression() + } catch { + caughtErrorOptional = error + return .unexpectedFailure(error) + } + + if value != nil { + return .success + } else { + return .expectedFailure("expected non-nil value of type \"\(T.self)\"") + } + } + + if let unwrappedValue = value { + return unwrappedValue + } else if let error = caughtErrorOptional { + throw error + } else { + throw XCTestErrorWhileUnwrappingOptional() + } +} + +public func XCTAssertTrue(_ expression: @autoclosure () throws -> Bool, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTEvaluateAssertion(.`true`, message: message(), file: file, line: line) { + let value = try expression() + if value { + return .success + } else { + return .expectedFailure(nil) + } + } +} + +public func XCTFail(_ message: String = "", file: StaticString = #file, line: UInt = #line) { + _XCTEvaluateAssertion(.fail, message: message, file: file, line: line) { + return .expectedFailure(nil) + } +} + +public func XCTAssertThrowsError(_ expression: @autoclosure () throws -> T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line, _ errorHandler: (_ error: Swift.Error) -> Void = { _ in }) { + let rethrowsOverload: (() throws -> T, () -> String, StaticString, UInt, (Swift.Error) throws -> Void) throws -> Void = XCTAssertThrowsError + + try? rethrowsOverload(expression, message, file, line, errorHandler) +} + +public func XCTAssertThrowsError(_ expression: @autoclosure () throws -> T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line, _ errorHandler: (_ error: Swift.Error) throws -> Void = { _ in }) rethrows { + _XCTEvaluateAssertion(.throwsError, message: message(), file: file, line: line) { + var caughtErrorOptional: Swift.Error? + do { + _ = try expression() + } catch { + caughtErrorOptional = error + } + + if let caughtError = caughtErrorOptional { + try errorHandler(caughtError) + return .success + } else { + return .expectedFailure("did not throw error") + } + } +} + +public func XCTAssertNoThrow(_ expression: @autoclosure () throws -> T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) { + _XCTEvaluateAssertion(.noThrow, message: message(), file: file, line: line) { + do { + _ = try expression() + return .success + } catch let error { + return .expectedFailure("threw error \"\(error)\"") + } + } +} diff --git a/Sources/XCTest/Public/XCTSkip.swift b/Sources/XCTest/Public/XCTSkip.swift new file mode 100644 index 0000000000..9642c36c97 --- /dev/null +++ b/Sources/XCTest/Public/XCTSkip.swift @@ -0,0 +1,116 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2020 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTSkip.swift +// APIs for skipping tests +// + +/// An error which causes the current test to cease executing +/// and be marked as skipped when it is thrown. +public struct XCTSkip: Error { + + /// The user-supplied message related to this skip, if specified. + public let message: String? + + /// A complete description of the skip. Includes the string-ified expression and user-supplied message when possible. + let summary: String + + /// An explanation of why the skip has occurred. + /// + /// - Note: May be nil if the skip was unconditional. + private let explanation: String? + + /// The source code location where the skip occurred. + let sourceLocation: SourceLocation? + + private init(explanation: String?, message: String?, sourceLocation: SourceLocation?) { + self.explanation = explanation + self.message = message + self.sourceLocation = sourceLocation + + var summary = "Test skipped" + if let explanation = explanation { + summary += ": \(explanation)" + } + if let message = message, !message.isEmpty { + summary += " - \(message)" + } + self.summary = summary + } + + public init(_ message: @autoclosure () -> String? = nil, file: StaticString = #file, line: UInt = #line) { + self.init(explanation: nil, message: message(), sourceLocation: SourceLocation(file: file, line: line)) + } + + fileprivate init(expectedValue: Bool, message: String?, file: StaticString, line: UInt) { + let explanation = expectedValue + ? "required true value but got false" + : "required false value but got true" + self.init(explanation: explanation, message: message, sourceLocation: SourceLocation(file: file, line: line)) + } + + internal init(error: Error, message: String?, sourceLocation: SourceLocation?) { + let explanation = #"threw error "\#(error)""# + self.init(explanation: explanation, message: message, sourceLocation: sourceLocation) + } + +} + +extension XCTSkip: XCTCustomErrorHandling { + + var shouldRecordAsTestFailure: Bool { + // Don't record this error as a test failure since it's a test skip + false + } + + var shouldRecordAsTestSkip: Bool { + true + } + +} + +/// Evaluates a boolean expression and, if it is true, throws an error which +/// causes the current test to cease executing and be marked as skipped. +public func XCTSkipIf( + _ expression: @autoclosure () throws -> Bool, + _ message: @autoclosure () -> String? = nil, + file: StaticString = #file, line: UInt = #line +) throws { + try skipIfEqual(expression(), true, message(), file: file, line: line) +} + +/// Evaluates a boolean expression and, if it is false, throws an error which +/// causes the current test to cease executing and be marked as skipped. +public func XCTSkipUnless( + _ expression: @autoclosure () throws -> Bool, + _ message: @autoclosure () -> String? = nil, + file: StaticString = #file, line: UInt = #line +) throws { + try skipIfEqual(expression(), false, message(), file: file, line: line) +} + +private func skipIfEqual( + _ expression: @autoclosure () throws -> Bool, + _ expectedValue: Bool, + _ message: @autoclosure () -> String?, + file: StaticString, line: UInt +) throws { + let expressionValue: Bool + + do { + // evaluate the expression exactly once + expressionValue = try expression() + } catch { + throw XCTSkip(error: error, message: message(), sourceLocation: SourceLocation(file: file, line: line)) + } + + if expressionValue == expectedValue { + throw XCTSkip(expectedValue: expectedValue, message: message(), file: file, line: line) + } +} diff --git a/Sources/XCTest/Public/XCTestCase+Performance.swift b/Sources/XCTest/Public/XCTestCase+Performance.swift new file mode 100644 index 0000000000..401fb5e9c1 --- /dev/null +++ b/Sources/XCTest/Public/XCTestCase+Performance.swift @@ -0,0 +1,176 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestCase+Performance.swift +// Methods on XCTestCase for testing the performance of code blocks. +// + +public struct XCTPerformanceMetric : RawRepresentable, Equatable, Hashable { + public let rawValue: String + + public init(_ rawValue: String) { + self.rawValue = rawValue + } + + public init(rawValue: String) { + self.rawValue = rawValue + } +} + +public extension XCTPerformanceMetric { + /// Records wall clock time in seconds between `startMeasuring`/`stopMeasuring`. + static let wallClockTime = XCTPerformanceMetric(rawValue: WallClockTimeMetric.name) +} + +/// The following methods are called from within a test method to carry out +/// performance testing on blocks of code. +public extension XCTestCase { + + /// The names of the performance metrics to measure when invoking `measure(block:)`. + /// Returns `XCTPerformanceMetric_WallClockTime` by default. Subclasses can + /// override this to change the behavior of `measure(block:)` + class var defaultPerformanceMetrics: [XCTPerformanceMetric] { + return [.wallClockTime] + } + + /// Call from a test method to measure resources (`defaultPerformanceMetrics`) + /// used by the block in the current process. + /// + /// func testPerformanceOfMyFunction() { + /// measure { + /// // Do that thing you want to measure. + /// MyFunction(); + /// } + /// } + /// + /// - Parameter block: A block whose performance to measure. + /// - Bug: The `block` param should have no external label, but there seems + /// to be a swiftc bug that causes issues when such a parameter comes + /// after a defaulted arg. See https://bugs.swift.org/browse/SR-1483 This + /// API incompatibility with Apple XCTest can be worked around in practice + /// by using trailing closure syntax when calling this method. + /// - Note: Whereas Apple XCTest determines the file and line number of + /// measurements by using symbolication, this implementation opts to take + /// `file` and `line` as parameters instead. As a result, the interface to + /// these methods are not exactly identical between these environments. To + /// ensure compatibility of tests between swift-corelibs-xctest and Apple + /// XCTest, it is not recommended to pass explicit values for `file` and `line`. + func measure(file: StaticString = #file, line: Int = #line, block: () -> Void) { + measureMetrics(type(of: self).defaultPerformanceMetrics, + automaticallyStartMeasuring: true, + file: file, + line: line, + for: block) + } + + /// Call from a test method to measure resources (XCTPerformanceMetrics) used + /// by the block in the current process. Each metric will be measured across + /// calls to the block. The number of times the block will be called is undefined + /// and may change in the future. For one example of why, as long as the requested + /// performance metrics do not interfere with each other the API will measure + /// all metrics across the same calls to the block. If the performance metrics + /// may interfere the API will measure them separately. + /// + /// func testMyFunction2_WallClockTime() { + /// measureMetrics(type(of: self).defaultPerformanceMetrics, automaticallyStartMeasuring: false) { + /// + /// // Do setup work that needs to be done for every iteration but + /// // you don't want to measure before the call to `startMeasuring()` + /// SetupSomething(); + /// self.startMeasuring() + /// + /// // Do that thing you want to measure. + /// MyFunction() + /// self.stopMeasuring() + /// + /// // Do teardown work that needs to be done for every iteration + /// // but you don't want to measure after the call to `stopMeasuring()` + /// TeardownSomething() + /// } + /// } + /// + /// Caveats: + /// * If `true` was passed for `automaticallyStartMeasuring` and `startMeasuring()` + /// is called anyway, the test will fail. + /// * If `false` was passed for `automaticallyStartMeasuring` then `startMeasuring()` + /// must be called once and only once before the end of the block or the test will fail. + /// * If `stopMeasuring()` is called multiple times during the block the test will fail. + /// + /// - Parameter metrics: An array of Strings (XCTPerformanceMetrics) to measure. + /// Providing an unrecognized string is a test failure. + /// - Parameter automaticallyStartMeasuring: If `false`, `XCTestCase` will + /// not take any measurements until -startMeasuring is called. + /// - Parameter block: A block whose performance to measure. + /// - Note: Whereas Apple XCTest determines the file and line number of + /// measurements by using symbolication, this implementation opts to take + /// `file` and `line` as parameters instead. As a result, the interface to + /// these methods are not exactly identical between these environments. To + /// ensure compatibility of tests between swift-corelibs-xctest and Apple + /// XCTest, it is not recommended to pass explicit values for `file` and `line`. + func measureMetrics(_ metrics: [XCTPerformanceMetric], automaticallyStartMeasuring: Bool, file: StaticString = #file, line: Int = #line, for block: () -> Void) { + guard _performanceMeter == nil else { + return recordAPIViolation(description: "Can only record one set of metrics per test method.", file: file, line: line) + } + + PerformanceMeter.measureMetrics(metrics.map({ $0.rawValue }), delegate: self, file: file, line: line) { meter in + self._performanceMeter = meter + if automaticallyStartMeasuring { + meter.startMeasuring(file: file, line: line) + } + block() + } + } + + /// Call this from within a measure block to set the beginning of the critical + /// section. Measurement of metrics will start at this point. + /// - Note: Whereas Apple XCTest determines the file and line number of + /// measurements by using symbolication, this implementation opts to take + /// `file` and `line` as parameters instead. As a result, the interface to + /// these methods are not exactly identical between these environments. To + /// ensure compatibility of tests between swift-corelibs-xctest and Apple + /// XCTest, it is not recommended to pass explicit values for `file` and `line`. + func startMeasuring(file: StaticString = #file, line: Int = #line) { + guard let performanceMeter = _performanceMeter, !performanceMeter.didFinishMeasuring else { + return recordAPIViolation(description: "Cannot start measuring. startMeasuring() is only supported from a block passed to measureMetrics(...).", file: file, line: line) + } + performanceMeter.startMeasuring(file: file, line: line) + } + + /// Call this from within a measure block to set the ending of the critical + /// section. Measurement of metrics will stop at this point. + /// - Note: Whereas Apple XCTest determines the file and line number of + /// measurements by using symbolication, this implementation opts to take + /// `file` and `line` as parameters instead. As a result, the interface to + /// these methods are not exactly identical between these environments. To + /// ensure compatibility of tests between swift-corelibs-xctest and Apple + /// XCTest, it is not recommended to pass explicit values for `file` and `line`. + func stopMeasuring(file: StaticString = #file, line: Int = #line) { + guard let performanceMeter = _performanceMeter, !performanceMeter.didFinishMeasuring else { + return recordAPIViolation(description: "Cannot stop measuring. stopMeasuring() is only supported from a block passed to measureMetrics(...).", file: file, line: line) + } + performanceMeter.stopMeasuring(file: file, line: line) + } +} + +extension XCTestCase: PerformanceMeterDelegate { + internal func recordAPIViolation(description: String, file: StaticString, line: Int) { + recordFailure(withDescription: "API violation - \(description)", + inFile: String(describing: file), + atLine: line, + expected: false) + } + + internal func recordMeasurements(results: String, file: StaticString, line: Int) { + XCTestObservationCenter.shared.testCase(self, didMeasurePerformanceResults: results, file: file, line: line) + } + + internal func recordFailure(description: String, file: StaticString, line: Int) { + recordFailure(withDescription: "failed: " + description, inFile: String(describing: file), atLine: line, expected: true) + } +} diff --git a/Sources/XCTest/Public/XCTestCase.swift b/Sources/XCTest/Public/XCTestCase.swift new file mode 100644 index 0000000000..4d734cd895 --- /dev/null +++ b/Sources/XCTest/Public/XCTestCase.swift @@ -0,0 +1,378 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestCase.swift +// Base class for test cases +// + +/// A block with the test code to be invoked when the test runs. +/// +/// - Parameter testCase: the test case associated with the current test code. +public typealias XCTestCaseClosure = (XCTestCase) throws -> Void + +/// This is a compound type used by `XCTMain` to represent tests to run. It combines an +/// `XCTestCase` subclass type with the list of test case methods to invoke on the class. +/// This type is intended to be produced by the `testCase` helper function. +/// - seealso: `testCase` +/// - seealso: `XCTMain` +public typealias XCTestCaseEntry = (testCaseClass: XCTestCase.Type, allTests: [(String, XCTestCaseClosure)]) + +// A global pointer to the currently running test case. This is required in +// order for XCTAssert functions to report failures. +internal var XCTCurrentTestCase: XCTestCase? + +/// An instance of this class represents an individual test case which can be +/// run by the framework. This class is normally subclassed and extended with +/// methods containing the tests to run. +/// - seealso: `XCTMain` +open class XCTestCase: XCTest { + private let testClosure: XCTestCaseClosure + + private var skip: XCTSkip? + + /// The name of the test case, consisting of its class name and the method + /// name it will run. + open override var name: String { + return _name + } + /// A private setter for the name of this test case. + private var _name: String + + open override var testCaseCount: Int { + return 1 + } + + @MainActor + internal var currentWaiter: XCTWaiter? + + /// The set of expectations made upon this test case. + private var _allExpectations = [XCTestExpectation]() + + internal var expectations: [XCTestExpectation] { + return XCTWaiter.subsystemQueue.sync { + return _allExpectations + } + } + + internal func addExpectation(_ expectation: XCTestExpectation) { + XCTWaiter.subsystemQueue.sync { + _allExpectations.append(expectation) + } + } + + internal func cleanUpExpectations(_ expectationsToCleanUp: [XCTestExpectation]? = nil) { + XCTWaiter.subsystemQueue.sync { + if let expectationsToReset = expectationsToCleanUp { + for expectation in expectationsToReset { + expectation.cleanUp() + _allExpectations.removeAll(where: { $0 == expectation }) + } + } else { + for expectation in _allExpectations { + expectation.cleanUp() + } + _allExpectations.removeAll() + } + } + } + + /// An internal object implementing performance measurements. + internal var _performanceMeter: PerformanceMeter? + + open override var testRunClass: AnyClass? { + return XCTestCaseRun.self + } + + open override func perform(_ run: XCTestRun) { + guard let testRun = run as? XCTestCaseRun else { + fatalError("Wrong XCTestRun class.") + } + + XCTCurrentTestCase = self + testRun.start() + invokeTest() + + let allExpectations = XCTWaiter.subsystemQueue.sync { _allExpectations } + failIfExpectationsNotWaitedFor(allExpectations) + + testRun.stop() + XCTCurrentTestCase = nil + } + + /// The designated initializer for SwiftXCTest's XCTestCase. + /// - Note: Like the designated initializer for Apple XCTest's XCTestCase, + /// `-[XCTestCase initWithInvocation:]`, it's rare for anyone outside of + /// XCTest itself to call this initializer. + public required init(name: String, testClosure: @escaping XCTestCaseClosure) { + _name = "\(type(of: self)).\(name)" + self.testClosure = testClosure + } + + /// Invoking a test performs its setUp, invocation, and tearDown. In + /// general this should not be called directly. + open func invokeTest() { + performSetUpSequence() + + do { + if skip == nil { + try testClosure(self) + } + } catch { + if error.xct_shouldRecordAsTestFailure { + recordFailure(for: error) + } + + if error.xct_shouldRecordAsTestSkip { + if let skip = error as? XCTSkip { + self.skip = skip + } else { + self.skip = XCTSkip(error: error, message: nil, sourceLocation: nil) + } + } + } + + if let skip = skip { + testRun?.recordSkip(description: skip.summary, sourceLocation: skip.sourceLocation) + } + + performTearDownSequence() + } + + /// Records a failure in the execution of the test and is used by all test + /// assertions. + /// - Parameter description: The description of the failure being reported. + /// - Parameter filePath: The file path to the source file where the failure + /// being reported was encountered. + /// - Parameter lineNumber: The line number in the source file at filePath + /// where the failure being reported was encountered. + /// - Parameter expected: `true` if the failure being reported was the + /// result of a failed assertion, `false` if it was the result of an + /// uncaught exception. + open func recordFailure(withDescription description: String, inFile filePath: String, atLine lineNumber: Int, expected: Bool) { + testRun?.recordFailure( + withDescription: description, + inFile: filePath, + atLine: lineNumber, + expected: expected) + + _performanceMeter?.abortMeasuring() + + // FIXME: Apple XCTest does not throw a fatal error and crash the test + // process, it merely prevents the remainder of a testClosure + // from expecting after it's been determined that it has already + // failed. The following behavior is incorrect. + // FIXME: No regression tests exist for this feature. We may break it + // without ever realizing. + if !continueAfterFailure { + fatalError("Terminating execution due to test failure") + } + } + + // Convenience for recording failure using a SourceLocation + func recordFailure(description: String, at sourceLocation: SourceLocation, expected: Bool) { + recordFailure(withDescription: description, inFile: sourceLocation.file, atLine: Int(sourceLocation.line), expected: expected) + } + + // Convenience for recording a failure for a caught Error + private func recordFailure(for error: Error) { + recordFailure( + withDescription: "threw error \"\(error)\"", + inFile: "", + atLine: 0, + expected: false) + } + + /// Setup method called before the invocation of any test method in the + /// class. + open class func setUp() {} + + /// Teardown method called after the invocation of every test method in the + /// class. + open class func tearDown() {} + + private let teardownBlocksState = TeardownBlocksState() + + /// Registers a block of teardown code to be run after the current test + /// method ends. + open func addTeardownBlock(_ block: @escaping () -> Void) { + teardownBlocksState.append(block) + } + + /// Registers a block of teardown code to be run after the current test + /// method ends. + @available(macOS 12.0, *) + public func addTeardownBlock(_ block: @Sendable @escaping () async throws -> Void) { + teardownBlocksState.appendAsync(block) + } + + private func performSetUpSequence() { + func handleErrorDuringSetUp(_ error: Error) { + if error.xct_shouldRecordAsTestFailure { + recordFailure(for: error) + } + + if error.xct_shouldSkipTestInvocation { + if let skip = error as? XCTSkip { + self.skip = skip + } else { + self.skip = XCTSkip(error: error, message: nil, sourceLocation: nil) + } + } + } + + do { + if #available(macOS 12.0, *) { + try awaitUsingExpectation { + try await self.setUp() + } + } + } catch { + handleErrorDuringSetUp(error) + } + + do { + try setUpWithError() + } catch { + handleErrorDuringSetUp(error) + } + + setUp() + } + + private func performTearDownSequence() { + func handleErrorDuringTearDown(_ error: Error) { + if error.xct_shouldRecordAsTestFailure { + recordFailure(for: error) + } + } + + func runTeardownBlocks() { + for block in self.teardownBlocksState.finalize().reversed() { + do { + try block() + } catch { + handleErrorDuringTearDown(error) + } + } + } + + runTeardownBlocks() + + tearDown() + + do { + try tearDownWithError() + } catch { + handleErrorDuringTearDown(error) + } + + do { + if #available(macOS 12.0, *) { + try awaitUsingExpectation { + try await self.tearDown() + } + } + } catch { + handleErrorDuringTearDown(error) + } + } + + open var continueAfterFailure: Bool { + get { + return true + } + set { + // TODO: When using the Objective-C runtime, XCTest is able to throw an exception from an assert and then catch it at the frame above the test method. + // This enables the framework to effectively stop all execution in the current test. + // There is no such facility in Swift. Until we figure out how to get a compatible behavior, + // we have decided to hard-code the value of 'true' for continue after failure. + } + } +} + +/// Wrapper function allowing an array of static test case methods to fit +/// the signature required by `XCTMain` +/// - seealso: `XCTMain` +public func testCase(_ allTests: [(String, (T) -> () throws -> Void)]) -> XCTestCaseEntry { + let tests: [(String, XCTestCaseClosure)] = allTests.map { ($0.0, test($0.1)) } + return (T.self, tests) +} + +/// Wrapper function for the non-throwing variant of tests. +/// - seealso: `XCTMain` +public func testCase(_ allTests: [(String, (T) -> () -> Void)]) -> XCTestCaseEntry { + let tests: [(String, XCTestCaseClosure)] = allTests.map { ($0.0, test($0.1)) } + return (T.self, tests) +} + +private func test(_ testFunc: @escaping (T) -> () throws -> Void) -> XCTestCaseClosure { + return { testCaseType in + guard let testCase = testCaseType as? T else { + fatalError("Attempt to invoke test on class \(T.self) with incompatible instance type \(type(of: testCaseType))") + } + + try testFunc(testCase)() + } +} + +@available(macOS 12.0, *) +public func asyncTest( + _ testClosureGenerator: @escaping (T) -> () async throws -> Void +) -> (T) -> () throws -> Void { + return { (testType: T) in + let testClosure = testClosureGenerator(testType) + return { + try awaitUsingExpectation(testClosure) + } + } +} + +@available(macOS 12.0, *) +func awaitUsingExpectation( + _ closure: @escaping () async throws -> Void +) throws -> Void { + let expectation = XCTestExpectation(description: "async test completion") + let thrownErrorWrapper = ThrownErrorWrapper() + + Task { + defer { expectation.fulfill() } + + do { + try await closure() + } catch { + thrownErrorWrapper.error = error + } + } + + _ = XCTWaiter.wait(for: [expectation], timeout: asyncTestTimeout) + + if let error = thrownErrorWrapper.error { + throw error + } +} + +private final class ThrownErrorWrapper: @unchecked Sendable { + + private var _error: Error? + + var error: Error? { + get { + XCTWaiter.subsystemQueue.sync { _error } + } + set { + XCTWaiter.subsystemQueue.sync { _error = newValue } + } + } +} + + +// This time interval is set to a very large value due to their being no real native timeout functionality within corelibs-xctest. +// With the introduction of async/await support, the framework now relies on XCTestExpectations internally to coordinate the addition async portions of setup and tear down. +// This time interval is the timeout corelibs-xctest uses with XCTestExpectations. +private let asyncTestTimeout: TimeInterval = 60 * 60 * 24 * 30 diff --git a/Sources/XCTest/Public/XCTestCaseRun.swift b/Sources/XCTest/Public/XCTestCaseRun.swift new file mode 100644 index 0000000000..0857fcf0c9 --- /dev/null +++ b/Sources/XCTest/Public/XCTestCaseRun.swift @@ -0,0 +1,51 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestCaseRun.swift +// A test run for an `XCTestCase`. +// + +/// A test run for an `XCTestCase`. +open class XCTestCaseRun: XCTestRun { + open override func start() { + super.start() + XCTestObservationCenter.shared.testCaseWillStart(testCase) + } + + open override func stop() { + super.stop() + XCTestObservationCenter.shared.testCaseDidFinish(testCase) + } + + open override func recordFailure(withDescription description: String, inFile filePath: String?, atLine lineNumber: Int, expected: Bool) { + super.recordFailure( + withDescription: "\(test.name) : \(description)", + inFile: filePath, + atLine: lineNumber, + expected: expected) + XCTestObservationCenter.shared.testCase( + testCase, + didFailWithDescription: description, + inFile: filePath, + atLine: lineNumber) + } + + override func recordSkip(description: String, sourceLocation: SourceLocation?) { + super.recordSkip(description: description, sourceLocation: sourceLocation) + + XCTestObservationCenter.shared.testCase( + testCase, + wasSkippedWithDescription: description, + at: sourceLocation) + } + + private var testCase: XCTestCase { + return test as! XCTestCase + } +} diff --git a/Sources/XCTest/Public/XCTestErrors.swift b/Sources/XCTest/Public/XCTestErrors.swift new file mode 100644 index 0000000000..a18af0afb3 --- /dev/null +++ b/Sources/XCTest/Public/XCTestErrors.swift @@ -0,0 +1,45 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestErrors.swift +// Constants used in errors produced by the XCTest library. +// + +/// The domain used by errors produced by the XCTest library. +public let XCTestErrorDomain = "org.swift.XCTestErrorDomain" + +/// Describes an error in the XCTestErrorDomain. +public struct XCTestError : _BridgedStoredNSError { + public let _nsError: NSError + + public init(_nsError error: NSError) { + precondition(error.domain == XCTestErrorDomain) + self._nsError = error + } + + public static var _nsErrorDomain: String { return XCTestErrorDomain } + + public enum Code : Int, _ErrorCodeProtocol { + public typealias _ErrorType = XCTestError + + case timeoutWhileWaiting + case failureWhileWaiting + } +} + +public extension XCTestError { + /// Indicates that one or more expectations failed to be fulfilled in time + /// during a call to `waitForExpectations(timeout:handler:)` + static var timeoutWhileWaiting: XCTestError.Code { return .timeoutWhileWaiting } + + /// Indicates that a test assertion failed while waiting for expectations + /// during a call to `waitForExpectations(timeout:handler:)` + /// FIXME: swift-corelibs-xctest does not currently produce this error code. + static var failureWhileWaiting: XCTestError.Code { return .failureWhileWaiting } +} diff --git a/Sources/XCTest/Public/XCTestMain.swift b/Sources/XCTest/Public/XCTestMain.swift new file mode 100644 index 0000000000..33572e723d --- /dev/null +++ b/Sources/XCTest/Public/XCTestMain.swift @@ -0,0 +1,173 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestMain.swift +// This is the main file for the framework. It provides the entry point function +// for running tests and some infrastructure for running them. +// + +// Note that we are re-exporting Foundation so tests importing XCTest don't need +// to import it themselves. This is consistent with the behavior of Apple XCTest +#if os(macOS) + #if USE_FOUNDATION_FRAMEWORK + @_exported import Foundation + #else + @_exported import SwiftFoundation + #endif +#else + @_exported import Foundation +#endif + +#if canImport(Darwin) + import Darwin +#elseif canImport(Glibc) + import Glibc +#endif + +/// Starts a test run for the specified test cases. +/// +/// Example usage: +/// +/// class TestFoo: XCTestCase { +/// static var allTests = { +/// return [ +/// ("test_foo", test_foo), +/// ("test_bar", test_bar), +/// ] +/// }() +/// +/// func test_foo() { +/// // Test things... +/// } +/// +/// // etc... +/// } +/// +/// let exitCode = XCTMain([ testCase(TestFoo.allTests) ]) +/// +/// Command line arguments can be used to select a particular test case or class +/// to execute. For example: +/// +/// ./FooTests FooTestCase/testFoo # Run a single test case +/// ./FooTests FooTestCase # Run all the tests in FooTestCase +/// +/// - Parameters: +/// - testCases: An array of test cases run, each produced by a call to the +/// `testCase` function. +/// - arguments: Command-line arguments to pass to XCTest. By default, the +/// arguments passed to the process are used. +/// - observers: Zero or more observers that should observe events that +/// occur while testing. If `nil` (the default), events are written to +/// the console. +/// +/// - Returns: The exit code to use when the process terminates. `EXIT_SUCCESS` +/// indicates success, while any other value (including `EXIT_FAILURE`) +/// indicates failure. +@_disfavoredOverload +public func XCTMain( + _ testCases: [XCTestCaseEntry], + arguments: [String] = CommandLine.arguments, + observers: [XCTestObservation]? = nil +) -> CInt { + let observers = observers ?? [PrintObserver()] + let testBundle = Bundle.main + + let executionMode = ArgumentParser(arguments: arguments).executionMode + + // Apple XCTest behaves differently if tests have been filtered: + // - The root `XCTestSuite` is named "Selected tests" instead of + // "All tests". + // - An `XCTestSuite` representing the .xctest test bundle is not included. + let rootTestSuite: XCTestSuite + let currentTestSuite: XCTestSuite + if executionMode.selectedTestNames == nil { + rootTestSuite = XCTestSuite(name: "All tests") + currentTestSuite = XCTestSuite(name: "\(testBundle.bundleURL.lastPathComponent).xctest") + rootTestSuite.addTest(currentTestSuite) + } else { + rootTestSuite = XCTestSuite(name: "Selected tests") + currentTestSuite = rootTestSuite + } + + let filter = TestFiltering(selectedTestNames: executionMode.selectedTestNames) + TestFiltering.filterTests(testCases, filter: filter.selectedTestFilter) + .map(XCTestCaseSuite.init) + .forEach(currentTestSuite.addTest) + + switch executionMode { + case .list(type: .humanReadable): + TestListing(testSuite: rootTestSuite).printTestList() + return EXIT_SUCCESS + case .list(type: .json): + TestListing(testSuite: rootTestSuite).printTestJSON() + return EXIT_SUCCESS + case let .help(invalidOption): + if let invalid = invalidOption { + let errMsg = "Error: Invalid option \"\(invalid)\"\n" + FileHandle.standardError.write(errMsg.data(using: .utf8) ?? Data()) + } + let exeName = URL(fileURLWithPath: arguments[0]).lastPathComponent + let sampleTest = rootTestSuite.list().first ?? "Tests.FooTestCase/testFoo" + let sampleTests = sampleTest.prefix(while: { $0 != "/" }) + print(""" + Usage: \(exeName) [OPTION] + \(exeName) [TESTCASE] + Run and report results of test cases. + + With no OPTION or TESTCASE, runs all test cases. + + OPTIONS: + + -l, --list-test List tests line by line to standard output + --dump-tests-json List tests in JSON to standard output + + TESTCASES: + + Run a single test + + > \(exeName) \(sampleTest) + + Run all the tests in \(sampleTests) + + > \(exeName) \(sampleTests) + """) + return invalidOption == nil ? EXIT_SUCCESS : EXIT_FAILURE + case .run(selectedTestNames: _): + // Add a test observer that prints test progress to stdout. + let observationCenter = XCTestObservationCenter.shared + for observer in observers { + observationCenter.addTestObserver(observer) + } + + observationCenter.testBundleWillStart(testBundle) + rootTestSuite.run() + observationCenter.testBundleDidFinish(testBundle) + + return rootTestSuite.testRun!.totalFailureCount == 0 ? EXIT_SUCCESS : EXIT_FAILURE + } +} + +// @available(*, deprecated, message: "Call the overload of XCTMain() that returns an exit code instead.") +public func XCTMain(_ testCases: [XCTestCaseEntry]) -> Never { + exit(XCTMain(testCases, arguments: CommandLine.arguments, observers: nil) as CInt) +} + +// @available(*, deprecated, message: "Call the overload of XCTMain() that returns an exit code instead.") +public func XCTMain(_ testCases: [XCTestCaseEntry], arguments: [String]) -> Never { + exit(XCTMain(testCases, arguments: arguments, observers: nil) as CInt) +} + +// @available(*, deprecated, message: "Call the overload of XCTMain() that returns an exit code instead.") +public func XCTMain( + _ testCases: [XCTestCaseEntry], + arguments: [String], + observers: [XCTestObservation] +) -> Never { + exit(XCTMain(testCases, arguments: arguments, observers: observers) as CInt) +} diff --git a/Sources/XCTest/Public/XCTestObservation.swift b/Sources/XCTest/Public/XCTestObservation.swift new file mode 100644 index 0000000000..1a53207b90 --- /dev/null +++ b/Sources/XCTest/Public/XCTestObservation.swift @@ -0,0 +1,73 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestObservation.swift +// Hooks for being notified about progress during a test run. +// + +/// `XCTestObservation` provides hooks for being notified about progress during a +/// test run. +/// - seealso: `XCTestObservationCenter` +public protocol XCTestObservation: AnyObject { + + /// Sent immediately before tests begin as a hook for any pre-testing setup. + /// - Parameter testBundle: The bundle containing the tests that were + /// executed. + func testBundleWillStart(_ testBundle: Bundle) + + /// Sent when a test suite starts executing. + /// - Parameter testSuite: The test suite that started. Additional + /// information can be retrieved from the associated XCTestRun. + func testSuiteWillStart(_ testSuite: XCTestSuite) + + /// Called just before a test begins executing. + /// - Parameter testCase: The test case that is about to start. Its `name` + /// property can be used to identify it. + func testCaseWillStart(_ testCase: XCTestCase) + + /// Called when a test failure is reported. + /// - Parameter testCase: The test case that failed. Its `name` property + /// can be used to identify it. + /// - Parameter description: Details about the cause of the test failure. + /// - Parameter filePath: The path to the source file where the failure + /// was reported, if available. + /// - Parameter lineNumber: The line number in the source file where the + /// failure was reported. + func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) + + /// Called just after a test finishes executing. + /// - Parameter testCase: The test case that finished. Its `name` property + /// can be used to identify it. + func testCaseDidFinish(_ testCase: XCTestCase) + + /// Sent when a test suite finishes executing. + /// - Parameter testSuite: The test suite that finished. Additional + /// information can be retrieved from the associated XCTestRun. + func testSuiteDidFinish(_ testSuite: XCTestSuite) + + /// Sent immediately after all tests have finished as a hook for any + /// post-testing activity. The test process will generally exit after this + /// method returns, so if there is long running and/or asynchronous work to + /// be done after testing, be sure to implement this method in a way that + /// it blocks until all such activity is complete. + /// - Parameter testBundle: The bundle containing the tests that were + /// executed. + func testBundleDidFinish(_ testBundle: Bundle) +} + +// All `XCTestObservation` methods are optional, so empty default implementations are provided +public extension XCTestObservation { + func testBundleWillStart(_ testBundle: Bundle) {} + func testSuiteWillStart(_ testSuite: XCTestSuite) {} + func testCaseWillStart(_ testCase: XCTestCase) {} + func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {} + func testCaseDidFinish(_ testCase: XCTestCase) {} + func testSuiteDidFinish(_ testSuite: XCTestSuite) {} + func testBundleDidFinish(_ testBundle: Bundle) {} +} diff --git a/Sources/XCTest/Public/XCTestObservationCenter.swift b/Sources/XCTest/Public/XCTestObservationCenter.swift new file mode 100644 index 0000000000..540956dd5c --- /dev/null +++ b/Sources/XCTest/Public/XCTestObservationCenter.swift @@ -0,0 +1,94 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestObservationCenter.swift +// Notification center for test run progress events. +// + +private let _sharedCenter: XCTestObservationCenter = XCTestObservationCenter() + +/// Provides a registry for objects wishing to be informed about progress +/// during the course of a test run. Observers must implement the +/// `XCTestObservation` protocol +/// - seealso: `XCTestObservation` +public class XCTestObservationCenter { + + private var observers = Set>() + + /// Registration should be performed on this shared instance + public class var shared: XCTestObservationCenter { + return _sharedCenter + } + + /// Register an observer to receive future events during a test run. The order + /// in which individual observers are notified about events is undefined. + public func addTestObserver(_ testObserver: XCTestObservation) { + observers.insert(testObserver.wrapper) + } + + /// Remove a previously-registered observer so that it will no longer receive + /// event callbacks. + public func removeTestObserver(_ testObserver: XCTestObservation) { + observers.remove(testObserver.wrapper) + } + + internal func testBundleWillStart(_ testBundle: Bundle) { + forEachObserver { $0.testBundleWillStart(testBundle) } + } + + internal func testSuiteWillStart(_ testSuite: XCTestSuite) { + forEachObserver { $0.testSuiteWillStart(testSuite) } + } + + internal func testCaseWillStart(_ testCase: XCTestCase) { + forEachObserver { $0.testCaseWillStart(testCase) } + } + + internal func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) { + forEachObserver { $0.testCase(testCase, didFailWithDescription: description, inFile: filePath, atLine: lineNumber) } + } + + internal func testCase(_ testCase: XCTestCase, wasSkippedWithDescription description: String, at sourceLocation: SourceLocation?) { + forEachInternalObserver { $0.testCase(testCase, wasSkippedWithDescription: description, at: sourceLocation) } + } + + internal func testCaseDidFinish(_ testCase: XCTestCase) { + forEachObserver { $0.testCaseDidFinish(testCase) } + } + + internal func testSuiteDidFinish(_ testSuite: XCTestSuite) { + forEachObserver { $0.testSuiteDidFinish(testSuite) } + } + + internal func testBundleDidFinish(_ testBundle: Bundle) { + forEachObserver { $0.testBundleDidFinish(testBundle) } + } + + internal func testCase(_ testCase: XCTestCase, didMeasurePerformanceResults results: String, file: StaticString, line: Int) { + forEachInternalObserver { $0.testCase(testCase, didMeasurePerformanceResults: results, file: file, line: line) } + } + + private func forEachObserver(_ body: (XCTestObservation) -> Void) { + for observer in observers { + body(observer.object) + } + } + + private func forEachInternalObserver(_ body: (XCTestInternalObservation) -> Void) { + for observer in observers where observer.object is XCTestInternalObservation { + body(observer.object as! XCTestInternalObservation) + } + } +} + +private extension XCTestObservation { + var wrapper: ObjectWrapper { + return ObjectWrapper(object: self, objectIdentifier: ObjectIdentifier(self)) + } +} diff --git a/Sources/XCTest/Public/XCTestRun.swift b/Sources/XCTest/Public/XCTestRun.swift new file mode 100644 index 0000000000..4ca345268c --- /dev/null +++ b/Sources/XCTest/Public/XCTestRun.swift @@ -0,0 +1,186 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestRun.swift +// A test run collects information about the execution of a test. +// + +/// A test run collects information about the execution of a test. Failures in +/// explicit test assertions are classified as "expected", while failures from +/// unrelated or uncaught exceptions are classified as "unexpected". +open class XCTestRun { + /// The test instance provided when the test run was initialized. + public let test: XCTest + + /// The time at which the test run was started, or nil. + open private(set) var startDate: Date? + + /// The time at which the test run was stopped, or nil. + open private(set) var stopDate: Date? + + /// The number of seconds that elapsed between when the run was started and + /// when it was stopped. + open var totalDuration: TimeInterval { + if let stop = stopDate, let start = startDate { + return stop.timeIntervalSince(start) + } else { + return 0.0 + } + } + + /// In an `XCTestCase` run, the number of seconds that elapsed between when + /// the run was started and when it was stopped. In an `XCTestSuite` run, + /// the combined `testDuration` of each test case in the suite. + open var testDuration: TimeInterval { + return totalDuration + } + + /// The number of tests in the run. + open var testCaseCount: Int { + return test.testCaseCount + } + + /// The number of test executions recorded during the run. + open private(set) var executionCount: Int = 0 + + /// The number of test skips recorded during the run. + open var skipCount: Int { + hasBeenSkipped ? 1 : 0 + } + + /// The number of test failures recorded during the run. + open private(set) var failureCount: Int = 0 + + /// The number of uncaught exceptions recorded during the run. + open private(set) var unexpectedExceptionCount: Int = 0 + + /// The total number of test failures and uncaught exceptions recorded + /// during the run. + open var totalFailureCount: Int { + return failureCount + unexpectedExceptionCount + } + + /// `true` if all tests in the run completed their execution without + /// recording any failures, otherwise `false`. + open var hasSucceeded: Bool { + guard isStopped else { + return false + } + return totalFailureCount == 0 + } + + /// `true` if the test was skipped, otherwise `false`. + open private(set) var hasBeenSkipped = false + + /// Designated initializer for the XCTestRun class. + /// - Parameter test: An XCTest instance. + /// - Returns: A test run for the provided test. + public required init(test: XCTest) { + self.test = test + } + + /// Start a test run. Must not be called more than once. + open func start() { + guard !isStarted else { + fatalError("Invalid attempt to start a test run that has " + + "already been started: \(self)") + } + guard !isStopped else { + fatalError("Invalid attempt to start a test run that has " + + "already been stopped: \(self)") + } + + startDate = Date() + } + + /// Stop a test run. Must not be called unless the run has been started. + /// Must not be called more than once. + open func stop() { + guard isStarted else { + fatalError("Invalid attempt to stop a test run that has " + + "not yet been started: \(self)") + } + guard !isStopped else { + fatalError("Invalid attempt to stop a test run that has " + + "already been stopped: \(self)") + } + + executionCount += 1 + stopDate = Date() + } + + /// Records a failure in the execution of the test for this test run. Must + /// not be called unless the run has been started. Must not be called if the + /// test run has been stopped. + /// - Parameter description: The description of the failure being reported. + /// - Parameter filePath: The file path to the source file where the failure + /// being reported was encountered or nil if unknown. + /// - Parameter lineNumber: The line number in the source file at filePath + /// where the failure being reported was encountered. + /// - Parameter expected: `true` if the failure being reported was the + /// result of a failed assertion, `false` if it was the result of an + /// uncaught exception. + func recordFailure(withDescription description: String, inFile filePath: String?, atLine lineNumber: Int, expected: Bool) { + func failureLocation() -> String { + if let filePath = filePath { + return "\(test.name) (\(filePath):\(lineNumber))" + } else { + return "\(test.name)" + } + } + + guard isStarted else { + fatalError("Invalid attempt to record a failure for a test run " + + "that has not yet been started: \(failureLocation())") + } + guard !isStopped else { + fatalError("Invalid attempt to record a failure for a test run " + + "that has already been stopped: \(failureLocation())") + } + + if expected { + failureCount += 1 + } else { + unexpectedExceptionCount += 1 + } + } + + func recordSkip(description: String, sourceLocation: SourceLocation?) { + func failureLocation() -> String { + if let sourceLocation = sourceLocation { + return "\(test.name) (\(sourceLocation.file):\(sourceLocation.line))" + } else { + return "\(test.name)" + } + } + + guard isStarted else { + fatalError("Invalid attempt to record a skip for a test run " + + "that has not yet been started: \(failureLocation())") + } + guard !hasBeenSkipped else { + fatalError("Invalid attempt to record a skip for a test run " + + "that has already been skipped: \(failureLocation())") + } + guard !isStopped else { + fatalError("Invalid attempt to record a skip for a test run " + + "has already been stopped: \(failureLocation())") + } + + hasBeenSkipped = true + } + + private var isStarted: Bool { + return startDate != nil + } + + private var isStopped: Bool { + return isStarted && stopDate != nil + } +} diff --git a/Sources/XCTest/Public/XCTestSuite.swift b/Sources/XCTest/Public/XCTestSuite.swift new file mode 100644 index 0000000000..177dd1cb72 --- /dev/null +++ b/Sources/XCTest/Public/XCTestSuite.swift @@ -0,0 +1,65 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestSuite.swift +// A collection of test cases. +// + +/// A subclass of XCTest, XCTestSuite is a collection of test cases. Based on +/// what's passed into XCTMain(), a hierarchy of suites is built up, but +/// XCTestSuite can also be instantiated and manipulated directly: +/// +/// let suite = XCTestSuite(name: "My Tests") +/// suite.addTest(myTest) +/// suite.testCaseCount // 1 +/// suite.run() +open class XCTestSuite: XCTest { + open private(set) var tests = [XCTest]() + + /// The name of this test suite. + open override var name: String { + return _name + } + /// A private setter for the name of this test suite. + private let _name: String + + /// The number of test cases in this suite. + open override var testCaseCount: Int { + return tests.reduce(0) { $0 + $1.testCaseCount } + } + + open override var testRunClass: AnyClass? { + return XCTestSuiteRun.self + } + + open override func perform(_ run: XCTestRun) { + guard let testRun = run as? XCTestSuiteRun else { + fatalError("Wrong XCTestRun class.") + } + + run.start() + setUp() + for test in tests { + test.run() + testRun.addTestRun(test.testRun!) + } + tearDown() + run.stop() + } + + public init(name: String) { + _name = name + } + + /// Adds a test (either an `XCTestSuite` or an `XCTestCase` to this + /// collection. + open func addTest(_ test: XCTest) { + tests.append(test) + } +} diff --git a/Sources/XCTest/Public/XCTestSuiteRun.swift b/Sources/XCTest/Public/XCTestSuiteRun.swift new file mode 100644 index 0000000000..666a3b0698 --- /dev/null +++ b/Sources/XCTest/Public/XCTestSuiteRun.swift @@ -0,0 +1,66 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +// +// XCTestSuiteRun.swift +// A test run for an `XCTestSuite`. +// + +/// A test run for an `XCTestSuite`. +open class XCTestSuiteRun: XCTestRun { + /// The combined `testDuration` of each test case run in the suite. + open override var totalDuration: TimeInterval { + return testRuns.reduce(TimeInterval(0.0)) { $0 + $1.totalDuration } + } + + /// The combined execution count of each test case run in the suite. + open override var executionCount: Int { + return testRuns.reduce(0) { $0 + $1.executionCount } + } + + /// The combined skip count of each test case run in the suite. + open override var skipCount: Int { + testRuns.reduce(0) { $0 + $1.skipCount } + } + + /// The combined failure count of each test case run in the suite. + open override var failureCount: Int { + return testRuns.reduce(0) { $0 + $1.failureCount } + } + + /// The combined unexpected failure count of each test case run in the + /// suite. + open override var unexpectedExceptionCount: Int { + return testRuns.reduce(0) { $0 + $1.unexpectedExceptionCount } + } + + open override func start() { + super.start() + XCTestObservationCenter.shared.testSuiteWillStart(testSuite) + } + + open override func stop() { + super.stop() + XCTestObservationCenter.shared.testSuiteDidFinish(testSuite) + } + + /// The test run for each of the tests in this suite. + /// Depending on what kinds of tests this suite is composed of, these could + /// be some combination of `XCTestCaseRun` and `XCTestSuiteRun` objects. + open private(set) var testRuns = [XCTestRun]() + + /// Add a test run to the collection of `testRuns`. + /// - Note: It is rare to call this method outside of XCTest itself. + open func addTestRun(_ testRun: XCTestRun) { + testRuns.append(testRun) + } + + private var testSuite: XCTestSuite { + return test as! XCTestSuite + } +} diff --git a/TestsOld/Foundation/FTPServer.swift b/Tests/Foundation/FTPServer.swift similarity index 100% rename from TestsOld/Foundation/FTPServer.swift rename to Tests/Foundation/FTPServer.swift diff --git a/TestsOld/Foundation/HTTPServer.swift b/Tests/Foundation/HTTPServer.swift similarity index 100% rename from TestsOld/Foundation/HTTPServer.swift rename to Tests/Foundation/HTTPServer.swift diff --git a/TestsOld/Foundation/Imports.swift b/Tests/Foundation/Imports.swift similarity index 100% rename from TestsOld/Foundation/Imports.swift rename to Tests/Foundation/Imports.swift diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/ByteCountFormatter-AllFieldsSet.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/ByteCountFormatter-AllFieldsSet.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/ByteCountFormatter-AllFieldsSet.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/ByteCountFormatter-AllFieldsSet.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/ByteCountFormatter-Default.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/ByteCountFormatter-Default.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/ByteCountFormatter-Default.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/ByteCountFormatter-Default.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-Default.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-Default.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-Default.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-Default.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-ValuesSetWithTemplate.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-ValuesSetWithTemplate.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-ValuesSetWithTemplate.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-ValuesSetWithTemplate.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-ValuesSetWithoutTemplate.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-ValuesSetWithoutTemplate.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-ValuesSetWithoutTemplate.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/DateIntervalFormatter-ValuesSetWithoutTemplate.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/ISO8601DateFormatter-Default.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/ISO8601DateFormatter-Default.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/ISO8601DateFormatter-Default.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/ISO8601DateFormatter-Default.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/ISO8601DateFormatter-OptionsSet.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/ISO8601DateFormatter-OptionsSet.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/ISO8601DateFormatter-OptionsSet.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/ISO8601DateFormatter-OptionsSet.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSAttributedString.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSAttributedString.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSAttributedString.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSAttributedString.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-Empty.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-Empty.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-Empty.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-Empty.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-NumbersAppearingOnce.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-NumbersAppearingOnce.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-NumbersAppearingOnce.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-NumbersAppearingOnce.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-NumbersAppearingSeveralTimes.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-NumbersAppearingSeveralTimes.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-NumbersAppearingSeveralTimes.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSCountedSet-NumbersAppearingSeveralTimes.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-Empty.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-Empty.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-Empty.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-Empty.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-ManyIndices.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-ManyIndices.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-ManyIndices.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-ManyIndices.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-OneIndex.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-OneIndex.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-OneIndex.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSIndexPath-OneIndex.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-Empty.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-Empty.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-Empty.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-Empty.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-ManyRanges.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-ManyRanges.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-ManyRanges.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-ManyRanges.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-OneRange.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-OneRange.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-OneRange.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSIndexSet-OneRange.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Angle.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Angle.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Angle.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Angle.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Frequency.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Frequency.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Frequency.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Frequency.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Length.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Length.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Length.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Length.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Zero.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Zero.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Zero.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMeasurement-Zero.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableAttributedString.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableAttributedString.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableAttributedString.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableAttributedString.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-Empty.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-Empty.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-Empty.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-Empty.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-ManyRanges.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-ManyRanges.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-ManyRanges.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-ManyRanges.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-OneRange.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-OneRange.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-OneRange.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableIndexSet-OneRange.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableOrderedSet-Empty.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableOrderedSet-Empty.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableOrderedSet-Empty.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableOrderedSet-Empty.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableOrderedSet-Numbers.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableOrderedSet-Numbers.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableOrderedSet-Numbers.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableOrderedSet-Numbers.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableSet-Empty.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableSet-Empty.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableSet-Empty.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableSet-Empty.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableSet-Numbers.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableSet-Numbers.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSMutableSet-Numbers.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSMutableSet-Numbers.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSOrderedSet-Empty.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSOrderedSet-Empty.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSOrderedSet-Empty.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSOrderedSet-Empty.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSOrderedSet-Numbers.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSOrderedSet-Numbers.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSOrderedSet-Numbers.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSOrderedSet-Numbers.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSSet-Empty.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSSet-Empty.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSSet-Empty.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSSet-Empty.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSSet-Numbers.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSSet-Numbers.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSSet-Numbers.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSSet-Numbers.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-ComplexRegex.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-ComplexRegex.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-ComplexRegex.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-ComplexRegex.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-ExtendedRegex.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-ExtendedRegex.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-ExtendedRegex.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-ExtendedRegex.archive diff --git a/TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-SimpleRegex.archive b/Tests/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-SimpleRegex.archive similarity index 100% rename from TestsOld/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-SimpleRegex.archive rename to Tests/Foundation/Resources/Fixtures/macOS-10.14/NSTextCheckingResult-SimpleRegex.archive diff --git a/TestsOld/Foundation/Resources/NSKeyedUnarchiver-ArrayTest.plist b/Tests/Foundation/Resources/NSKeyedUnarchiver-ArrayTest.plist similarity index 100% rename from TestsOld/Foundation/Resources/NSKeyedUnarchiver-ArrayTest.plist rename to Tests/Foundation/Resources/NSKeyedUnarchiver-ArrayTest.plist diff --git a/TestsOld/Foundation/Resources/NSKeyedUnarchiver-ComplexTest.plist b/Tests/Foundation/Resources/NSKeyedUnarchiver-ComplexTest.plist similarity index 100% rename from TestsOld/Foundation/Resources/NSKeyedUnarchiver-ComplexTest.plist rename to Tests/Foundation/Resources/NSKeyedUnarchiver-ComplexTest.plist diff --git a/TestsOld/Foundation/Resources/NSKeyedUnarchiver-ConcreteValueTest.plist b/Tests/Foundation/Resources/NSKeyedUnarchiver-ConcreteValueTest.plist similarity index 100% rename from TestsOld/Foundation/Resources/NSKeyedUnarchiver-ConcreteValueTest.plist rename to Tests/Foundation/Resources/NSKeyedUnarchiver-ConcreteValueTest.plist diff --git a/TestsOld/Foundation/Resources/NSKeyedUnarchiver-EdgeInsetsTest.plist b/Tests/Foundation/Resources/NSKeyedUnarchiver-EdgeInsetsTest.plist similarity index 100% rename from TestsOld/Foundation/Resources/NSKeyedUnarchiver-EdgeInsetsTest.plist rename to Tests/Foundation/Resources/NSKeyedUnarchiver-EdgeInsetsTest.plist diff --git a/TestsOld/Foundation/Resources/NSKeyedUnarchiver-NotificationTest.plist b/Tests/Foundation/Resources/NSKeyedUnarchiver-NotificationTest.plist similarity index 100% rename from TestsOld/Foundation/Resources/NSKeyedUnarchiver-NotificationTest.plist rename to Tests/Foundation/Resources/NSKeyedUnarchiver-NotificationTest.plist diff --git a/TestsOld/Foundation/Resources/NSKeyedUnarchiver-OrderedSetTest.plist b/Tests/Foundation/Resources/NSKeyedUnarchiver-OrderedSetTest.plist similarity index 100% rename from TestsOld/Foundation/Resources/NSKeyedUnarchiver-OrderedSetTest.plist rename to Tests/Foundation/Resources/NSKeyedUnarchiver-OrderedSetTest.plist diff --git a/TestsOld/Foundation/Resources/NSKeyedUnarchiver-RangeTest.plist b/Tests/Foundation/Resources/NSKeyedUnarchiver-RangeTest.plist similarity index 100% rename from TestsOld/Foundation/Resources/NSKeyedUnarchiver-RangeTest.plist rename to Tests/Foundation/Resources/NSKeyedUnarchiver-RangeTest.plist diff --git a/TestsOld/Foundation/Resources/NSKeyedUnarchiver-RectTest.plist b/Tests/Foundation/Resources/NSKeyedUnarchiver-RectTest.plist similarity index 100% rename from TestsOld/Foundation/Resources/NSKeyedUnarchiver-RectTest.plist rename to Tests/Foundation/Resources/NSKeyedUnarchiver-RectTest.plist diff --git a/TestsOld/Foundation/Resources/NSKeyedUnarchiver-URLTest.plist b/Tests/Foundation/Resources/NSKeyedUnarchiver-URLTest.plist similarity index 100% rename from TestsOld/Foundation/Resources/NSKeyedUnarchiver-URLTest.plist rename to Tests/Foundation/Resources/NSKeyedUnarchiver-URLTest.plist diff --git a/TestsOld/Foundation/Resources/NSKeyedUnarchiver-UUIDTest.plist b/Tests/Foundation/Resources/NSKeyedUnarchiver-UUIDTest.plist similarity index 100% rename from TestsOld/Foundation/Resources/NSKeyedUnarchiver-UUIDTest.plist rename to Tests/Foundation/Resources/NSKeyedUnarchiver-UUIDTest.plist diff --git a/TestsOld/Foundation/Resources/NSString-ISO-8859-1-data.txt b/Tests/Foundation/Resources/NSString-ISO-8859-1-data.txt similarity index 100% rename from TestsOld/Foundation/Resources/NSString-ISO-8859-1-data.txt rename to Tests/Foundation/Resources/NSString-ISO-8859-1-data.txt diff --git a/TestsOld/Foundation/Resources/NSString-UTF16-BE-data.txt b/Tests/Foundation/Resources/NSString-UTF16-BE-data.txt similarity index 100% rename from TestsOld/Foundation/Resources/NSString-UTF16-BE-data.txt rename to Tests/Foundation/Resources/NSString-UTF16-BE-data.txt diff --git a/TestsOld/Foundation/Resources/NSString-UTF16-LE-data.txt b/Tests/Foundation/Resources/NSString-UTF16-LE-data.txt similarity index 100% rename from TestsOld/Foundation/Resources/NSString-UTF16-LE-data.txt rename to Tests/Foundation/Resources/NSString-UTF16-LE-data.txt diff --git a/TestsOld/Foundation/Resources/NSString-UTF32-BE-data.txt b/Tests/Foundation/Resources/NSString-UTF32-BE-data.txt similarity index 100% rename from TestsOld/Foundation/Resources/NSString-UTF32-BE-data.txt rename to Tests/Foundation/Resources/NSString-UTF32-BE-data.txt diff --git a/TestsOld/Foundation/Resources/NSString-UTF32-LE-data.txt b/Tests/Foundation/Resources/NSString-UTF32-LE-data.txt similarity index 100% rename from TestsOld/Foundation/Resources/NSString-UTF32-LE-data.txt rename to Tests/Foundation/Resources/NSString-UTF32-LE-data.txt diff --git a/TestsOld/Foundation/Resources/NSStringTestData.txt b/Tests/Foundation/Resources/NSStringTestData.txt similarity index 100% rename from TestsOld/Foundation/Resources/NSStringTestData.txt rename to Tests/Foundation/Resources/NSStringTestData.txt diff --git a/TestsOld/Foundation/Resources/NSURLTestData.plist b/Tests/Foundation/Resources/NSURLTestData.plist similarity index 100% rename from TestsOld/Foundation/Resources/NSURLTestData.plist rename to Tests/Foundation/Resources/NSURLTestData.plist diff --git a/TestsOld/Foundation/Resources/NSXMLDTDTestData.xml b/Tests/Foundation/Resources/NSXMLDTDTestData.xml similarity index 100% rename from TestsOld/Foundation/Resources/NSXMLDTDTestData.xml rename to Tests/Foundation/Resources/NSXMLDTDTestData.xml diff --git a/TestsOld/Foundation/Resources/NSXMLDocumentTestData.xml b/Tests/Foundation/Resources/NSXMLDocumentTestData.xml similarity index 100% rename from TestsOld/Foundation/Resources/NSXMLDocumentTestData.xml rename to Tests/Foundation/Resources/NSXMLDocumentTestData.xml diff --git a/TestsOld/Foundation/Resources/PropertyList-1.0.dtd b/Tests/Foundation/Resources/PropertyList-1.0.dtd similarity index 100% rename from TestsOld/Foundation/Resources/PropertyList-1.0.dtd rename to Tests/Foundation/Resources/PropertyList-1.0.dtd diff --git a/TestsOld/Foundation/Resources/TestFileWithZeros.txt b/Tests/Foundation/Resources/TestFileWithZeros.txt similarity index 100% rename from TestsOld/Foundation/Resources/TestFileWithZeros.txt rename to Tests/Foundation/Resources/TestFileWithZeros.txt diff --git a/TestsOld/Foundation/Tests/TestAffineTransform.swift b/Tests/Foundation/TestAffineTransform.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestAffineTransform.swift rename to Tests/Foundation/TestAffineTransform.swift diff --git a/TestsOld/Foundation/Tests/TestAttributedString.swift b/Tests/Foundation/TestAttributedString.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestAttributedString.swift rename to Tests/Foundation/TestAttributedString.swift diff --git a/TestsOld/Foundation/Tests/TestAttributedStringCOW.swift b/Tests/Foundation/TestAttributedStringCOW.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestAttributedStringCOW.swift rename to Tests/Foundation/TestAttributedStringCOW.swift diff --git a/TestsOld/Foundation/Tests/TestAttributedStringPerformance.swift b/Tests/Foundation/TestAttributedStringPerformance.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestAttributedStringPerformance.swift rename to Tests/Foundation/TestAttributedStringPerformance.swift diff --git a/TestsOld/Foundation/Tests/TestAttributedStringSupport.swift b/Tests/Foundation/TestAttributedStringSupport.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestAttributedStringSupport.swift rename to Tests/Foundation/TestAttributedStringSupport.swift diff --git a/TestsOld/Foundation/Tests/TestBridging.swift b/Tests/Foundation/TestBridging.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestBridging.swift rename to Tests/Foundation/TestBridging.swift diff --git a/TestsOld/Foundation/Tests/TestBundle.swift b/Tests/Foundation/TestBundle.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestBundle.swift rename to Tests/Foundation/TestBundle.swift diff --git a/TestsOld/Foundation/Tests/TestByteCountFormatter.swift b/Tests/Foundation/TestByteCountFormatter.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestByteCountFormatter.swift rename to Tests/Foundation/TestByteCountFormatter.swift diff --git a/TestsOld/Foundation/Tests/TestCachedURLResponse.swift b/Tests/Foundation/TestCachedURLResponse.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestCachedURLResponse.swift rename to Tests/Foundation/TestCachedURLResponse.swift diff --git a/TestsOld/Foundation/Tests/TestCalendar.swift b/Tests/Foundation/TestCalendar.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestCalendar.swift rename to Tests/Foundation/TestCalendar.swift diff --git a/TestsOld/Foundation/Tests/TestCharacterSet.swift b/Tests/Foundation/TestCharacterSet.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestCharacterSet.swift rename to Tests/Foundation/TestCharacterSet.swift diff --git a/TestsOld/Foundation/Tests/TestCodable.swift b/Tests/Foundation/TestCodable.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestCodable.swift rename to Tests/Foundation/TestCodable.swift diff --git a/TestsOld/Foundation/Tests/TestDataURLProtocol.swift b/Tests/Foundation/TestDataURLProtocol.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestDataURLProtocol.swift rename to Tests/Foundation/TestDataURLProtocol.swift diff --git a/TestsOld/Foundation/Tests/TestDate.swift b/Tests/Foundation/TestDate.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestDate.swift rename to Tests/Foundation/TestDate.swift diff --git a/TestsOld/Foundation/Tests/TestDateComponents.swift b/Tests/Foundation/TestDateComponents.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestDateComponents.swift rename to Tests/Foundation/TestDateComponents.swift diff --git a/TestsOld/Foundation/Tests/TestDateFormatter.swift b/Tests/Foundation/TestDateFormatter.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestDateFormatter.swift rename to Tests/Foundation/TestDateFormatter.swift diff --git a/TestsOld/Foundation/Tests/TestDateInterval.swift b/Tests/Foundation/TestDateInterval.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestDateInterval.swift rename to Tests/Foundation/TestDateInterval.swift diff --git a/TestsOld/Foundation/Tests/TestDateIntervalFormatter.swift b/Tests/Foundation/TestDateIntervalFormatter.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestDateIntervalFormatter.swift rename to Tests/Foundation/TestDateIntervalFormatter.swift diff --git a/TestsOld/Foundation/Tests/TestDecimal.swift b/Tests/Foundation/TestDecimal.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestDecimal.swift rename to Tests/Foundation/TestDecimal.swift diff --git a/TestsOld/Foundation/Tests/TestDimension.swift b/Tests/Foundation/TestDimension.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestDimension.swift rename to Tests/Foundation/TestDimension.swift diff --git a/TestsOld/Foundation/Tests/TestEnergyFormatter.swift b/Tests/Foundation/TestEnergyFormatter.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestEnergyFormatter.swift rename to Tests/Foundation/TestEnergyFormatter.swift diff --git a/TestsOld/Foundation/Tests/TestFileHandle.swift b/Tests/Foundation/TestFileHandle.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestFileHandle.swift rename to Tests/Foundation/TestFileHandle.swift diff --git a/TestsOld/Foundation/Tests/TestFileManager.swift b/Tests/Foundation/TestFileManager.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestFileManager.swift rename to Tests/Foundation/TestFileManager.swift diff --git a/TestsOld/Foundation/Tests/TestHTTPCookie.swift b/Tests/Foundation/TestHTTPCookie.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestHTTPCookie.swift rename to Tests/Foundation/TestHTTPCookie.swift diff --git a/TestsOld/Foundation/Tests/TestHTTPCookieStorage.swift b/Tests/Foundation/TestHTTPCookieStorage.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestHTTPCookieStorage.swift rename to Tests/Foundation/TestHTTPCookieStorage.swift diff --git a/TestsOld/Foundation/Tests/TestHTTPURLResponse.swift b/Tests/Foundation/TestHTTPURLResponse.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestHTTPURLResponse.swift rename to Tests/Foundation/TestHTTPURLResponse.swift diff --git a/TestsOld/Foundation/Tests/TestHost.swift b/Tests/Foundation/TestHost.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestHost.swift rename to Tests/Foundation/TestHost.swift diff --git a/TestsOld/Foundation/Tests/TestISO8601DateFormatter.swift b/Tests/Foundation/TestISO8601DateFormatter.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestISO8601DateFormatter.swift rename to Tests/Foundation/TestISO8601DateFormatter.swift diff --git a/TestsOld/Foundation/Tests/TestIndexPath.swift b/Tests/Foundation/TestIndexPath.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestIndexPath.swift rename to Tests/Foundation/TestIndexPath.swift diff --git a/TestsOld/Foundation/Tests/TestIndexSet.swift b/Tests/Foundation/TestIndexSet.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestIndexSet.swift rename to Tests/Foundation/TestIndexSet.swift diff --git a/TestsOld/Foundation/Tests/TestJSONEncoder.swift b/Tests/Foundation/TestJSONEncoder.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestJSONEncoder.swift rename to Tests/Foundation/TestJSONEncoder.swift diff --git a/TestsOld/Foundation/Tests/TestJSONSerialization.swift b/Tests/Foundation/TestJSONSerialization.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestJSONSerialization.swift rename to Tests/Foundation/TestJSONSerialization.swift diff --git a/TestsOld/Foundation/Tests/TestLengthFormatter.swift b/Tests/Foundation/TestLengthFormatter.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestLengthFormatter.swift rename to Tests/Foundation/TestLengthFormatter.swift diff --git a/TestsOld/Foundation/Tests/TestMassFormatter.swift b/Tests/Foundation/TestMassFormatter.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestMassFormatter.swift rename to Tests/Foundation/TestMassFormatter.swift diff --git a/TestsOld/Foundation/Tests/TestMeasurement.swift b/Tests/Foundation/TestMeasurement.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestMeasurement.swift rename to Tests/Foundation/TestMeasurement.swift diff --git a/TestsOld/Foundation/Tests/TestNSArray.swift b/Tests/Foundation/TestNSArray.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSArray.swift rename to Tests/Foundation/TestNSArray.swift diff --git a/TestsOld/Foundation/Tests/TestNSAttributedString.swift b/Tests/Foundation/TestNSAttributedString.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSAttributedString.swift rename to Tests/Foundation/TestNSAttributedString.swift diff --git a/TestsOld/Foundation/Tests/TestNSCache.swift b/Tests/Foundation/TestNSCache.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSCache.swift rename to Tests/Foundation/TestNSCache.swift diff --git a/TestsOld/Foundation/Tests/TestNSCalendar.swift b/Tests/Foundation/TestNSCalendar.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSCalendar.swift rename to Tests/Foundation/TestNSCalendar.swift diff --git a/TestsOld/Foundation/Tests/TestNSCompoundPredicate.swift b/Tests/Foundation/TestNSCompoundPredicate.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSCompoundPredicate.swift rename to Tests/Foundation/TestNSCompoundPredicate.swift diff --git a/Tests/Foundation/TestNSData.swift b/Tests/Foundation/TestNSData.swift index 1fee17f19b..32c49378ff 100644 --- a/Tests/Foundation/TestNSData.swift +++ b/Tests/Foundation/TestNSData.swift @@ -8,7 +8,7 @@ // import XCTest -import CoreFoundation +//import CoreFoundation @testable import Foundation class TestNSData: XCTestCase { diff --git a/TestsOld/Foundation/Tests/TestNSDateComponents.swift b/Tests/Foundation/TestNSDateComponents.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSDateComponents.swift rename to Tests/Foundation/TestNSDateComponents.swift diff --git a/TestsOld/Foundation/Tests/TestNSDictionary.swift b/Tests/Foundation/TestNSDictionary.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSDictionary.swift rename to Tests/Foundation/TestNSDictionary.swift diff --git a/TestsOld/Foundation/Tests/TestNSError.swift b/Tests/Foundation/TestNSError.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSError.swift rename to Tests/Foundation/TestNSError.swift diff --git a/TestsOld/Foundation/Tests/TestNSGeometry.swift b/Tests/Foundation/TestNSGeometry.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSGeometry.swift rename to Tests/Foundation/TestNSGeometry.swift diff --git a/TestsOld/Foundation/Tests/TestNSKeyedArchiver.swift b/Tests/Foundation/TestNSKeyedArchiver.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSKeyedArchiver.swift rename to Tests/Foundation/TestNSKeyedArchiver.swift diff --git a/TestsOld/Foundation/Tests/TestNSKeyedUnarchiver.swift b/Tests/Foundation/TestNSKeyedUnarchiver.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSKeyedUnarchiver.swift rename to Tests/Foundation/TestNSKeyedUnarchiver.swift diff --git a/TestsOld/Foundation/Tests/TestNSLocale.swift b/Tests/Foundation/TestNSLocale.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSLocale.swift rename to Tests/Foundation/TestNSLocale.swift diff --git a/TestsOld/Foundation/Tests/TestNSLock.swift b/Tests/Foundation/TestNSLock.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSLock.swift rename to Tests/Foundation/TestNSLock.swift diff --git a/TestsOld/Foundation/Tests/TestNSNull.swift b/Tests/Foundation/TestNSNull.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSNull.swift rename to Tests/Foundation/TestNSNull.swift diff --git a/TestsOld/Foundation/Tests/TestNSNumber.swift b/Tests/Foundation/TestNSNumber.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSNumber.swift rename to Tests/Foundation/TestNSNumber.swift diff --git a/TestsOld/Foundation/Tests/TestNSNumberBridging.swift b/Tests/Foundation/TestNSNumberBridging.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSNumberBridging.swift rename to Tests/Foundation/TestNSNumberBridging.swift diff --git a/TestsOld/Foundation/Tests/TestNSOrderedSet.swift b/Tests/Foundation/TestNSOrderedSet.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSOrderedSet.swift rename to Tests/Foundation/TestNSOrderedSet.swift diff --git a/TestsOld/Foundation/Tests/TestNSPredicate.swift b/Tests/Foundation/TestNSPredicate.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSPredicate.swift rename to Tests/Foundation/TestNSPredicate.swift diff --git a/TestsOld/Foundation/Tests/TestNSRange.swift b/Tests/Foundation/TestNSRange.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSRange.swift rename to Tests/Foundation/TestNSRange.swift diff --git a/TestsOld/Foundation/Tests/TestNSRegularExpression.swift b/Tests/Foundation/TestNSRegularExpression.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSRegularExpression.swift rename to Tests/Foundation/TestNSRegularExpression.swift diff --git a/TestsOld/Foundation/Tests/TestNSSet.swift b/Tests/Foundation/TestNSSet.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSSet.swift rename to Tests/Foundation/TestNSSet.swift diff --git a/TestsOld/Foundation/Tests/TestNSSortDescriptor.swift b/Tests/Foundation/TestNSSortDescriptor.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSSortDescriptor.swift rename to Tests/Foundation/TestNSSortDescriptor.swift diff --git a/TestsOld/Foundation/Tests/TestNSString.swift b/Tests/Foundation/TestNSString.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSString.swift rename to Tests/Foundation/TestNSString.swift diff --git a/TestsOld/Foundation/Tests/TestNSTextCheckingResult.swift b/Tests/Foundation/TestNSTextCheckingResult.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSTextCheckingResult.swift rename to Tests/Foundation/TestNSTextCheckingResult.swift diff --git a/TestsOld/Foundation/Tests/TestNSURL.swift b/Tests/Foundation/TestNSURL.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSURL.swift rename to Tests/Foundation/TestNSURL.swift diff --git a/TestsOld/Foundation/Tests/TestNSURLRequest.swift b/Tests/Foundation/TestNSURLRequest.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSURLRequest.swift rename to Tests/Foundation/TestNSURLRequest.swift diff --git a/TestsOld/Foundation/Tests/TestNSUUID.swift b/Tests/Foundation/TestNSUUID.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSUUID.swift rename to Tests/Foundation/TestNSUUID.swift diff --git a/TestsOld/Foundation/Tests/TestNSValue.swift b/Tests/Foundation/TestNSValue.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNSValue.swift rename to Tests/Foundation/TestNSValue.swift diff --git a/TestsOld/Foundation/Tests/TestNotification.swift b/Tests/Foundation/TestNotification.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNotification.swift rename to Tests/Foundation/TestNotification.swift diff --git a/TestsOld/Foundation/Tests/TestNotificationCenter.swift b/Tests/Foundation/TestNotificationCenter.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNotificationCenter.swift rename to Tests/Foundation/TestNotificationCenter.swift diff --git a/TestsOld/Foundation/Tests/TestNotificationQueue.swift b/Tests/Foundation/TestNotificationQueue.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNotificationQueue.swift rename to Tests/Foundation/TestNotificationQueue.swift diff --git a/TestsOld/Foundation/Tests/TestNumberFormatter.swift b/Tests/Foundation/TestNumberFormatter.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestNumberFormatter.swift rename to Tests/Foundation/TestNumberFormatter.swift diff --git a/TestsOld/Foundation/Tests/TestObjCRuntime.swift b/Tests/Foundation/TestObjCRuntime.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestObjCRuntime.swift rename to Tests/Foundation/TestObjCRuntime.swift diff --git a/TestsOld/Foundation/Tests/TestOperationQueue.swift b/Tests/Foundation/TestOperationQueue.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestOperationQueue.swift rename to Tests/Foundation/TestOperationQueue.swift diff --git a/TestsOld/Foundation/Tests/TestPersonNameComponents.swift b/Tests/Foundation/TestPersonNameComponents.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestPersonNameComponents.swift rename to Tests/Foundation/TestPersonNameComponents.swift diff --git a/TestsOld/Foundation/Tests/TestPipe.swift b/Tests/Foundation/TestPipe.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestPipe.swift rename to Tests/Foundation/TestPipe.swift diff --git a/TestsOld/Foundation/Tests/TestProcess.swift b/Tests/Foundation/TestProcess.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestProcess.swift rename to Tests/Foundation/TestProcess.swift diff --git a/TestsOld/Foundation/Tests/TestProcessInfo.swift b/Tests/Foundation/TestProcessInfo.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestProcessInfo.swift rename to Tests/Foundation/TestProcessInfo.swift diff --git a/TestsOld/Foundation/Tests/TestProgress.swift b/Tests/Foundation/TestProgress.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestProgress.swift rename to Tests/Foundation/TestProgress.swift diff --git a/TestsOld/Foundation/Tests/TestProgressFraction.swift b/Tests/Foundation/TestProgressFraction.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestProgressFraction.swift rename to Tests/Foundation/TestProgressFraction.swift diff --git a/TestsOld/Foundation/Tests/TestPropertyListEncoder.swift b/Tests/Foundation/TestPropertyListEncoder.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestPropertyListEncoder.swift rename to Tests/Foundation/TestPropertyListEncoder.swift diff --git a/TestsOld/Foundation/Tests/TestPropertyListSerialization.swift b/Tests/Foundation/TestPropertyListSerialization.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestPropertyListSerialization.swift rename to Tests/Foundation/TestPropertyListSerialization.swift diff --git a/TestsOld/Foundation/Tests/TestRunLoop.swift b/Tests/Foundation/TestRunLoop.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestRunLoop.swift rename to Tests/Foundation/TestRunLoop.swift diff --git a/TestsOld/Foundation/Tests/TestScanner.swift b/Tests/Foundation/TestScanner.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestScanner.swift rename to Tests/Foundation/TestScanner.swift diff --git a/TestsOld/Foundation/Tests/TestSocketPort.swift b/Tests/Foundation/TestSocketPort.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestSocketPort.swift rename to Tests/Foundation/TestSocketPort.swift diff --git a/TestsOld/Foundation/Tests/TestStream.swift b/Tests/Foundation/TestStream.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestStream.swift rename to Tests/Foundation/TestStream.swift diff --git a/TestsOld/Foundation/Tests/TestThread.swift b/Tests/Foundation/TestThread.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestThread.swift rename to Tests/Foundation/TestThread.swift diff --git a/TestsOld/Foundation/Tests/TestTimeZone.swift b/Tests/Foundation/TestTimeZone.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestTimeZone.swift rename to Tests/Foundation/TestTimeZone.swift diff --git a/TestsOld/Foundation/Tests/TestTimer.swift b/Tests/Foundation/TestTimer.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestTimer.swift rename to Tests/Foundation/TestTimer.swift diff --git a/TestsOld/Foundation/Tests/TestURL.swift b/Tests/Foundation/TestURL.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestURL.swift rename to Tests/Foundation/TestURL.swift diff --git a/TestsOld/Foundation/Tests/TestURLCache.swift b/Tests/Foundation/TestURLCache.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestURLCache.swift rename to Tests/Foundation/TestURLCache.swift diff --git a/TestsOld/Foundation/Tests/TestURLComponents.swift b/Tests/Foundation/TestURLComponents.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestURLComponents.swift rename to Tests/Foundation/TestURLComponents.swift diff --git a/TestsOld/Foundation/Tests/TestURLCredential.swift b/Tests/Foundation/TestURLCredential.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestURLCredential.swift rename to Tests/Foundation/TestURLCredential.swift diff --git a/TestsOld/Foundation/Tests/TestURLCredentialStorage.swift b/Tests/Foundation/TestURLCredentialStorage.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestURLCredentialStorage.swift rename to Tests/Foundation/TestURLCredentialStorage.swift diff --git a/TestsOld/Foundation/Tests/TestURLProtectionSpace.swift b/Tests/Foundation/TestURLProtectionSpace.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestURLProtectionSpace.swift rename to Tests/Foundation/TestURLProtectionSpace.swift diff --git a/TestsOld/Foundation/Tests/TestURLProtocol.swift b/Tests/Foundation/TestURLProtocol.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestURLProtocol.swift rename to Tests/Foundation/TestURLProtocol.swift diff --git a/TestsOld/Foundation/Tests/TestURLRequest.swift b/Tests/Foundation/TestURLRequest.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestURLRequest.swift rename to Tests/Foundation/TestURLRequest.swift diff --git a/TestsOld/Foundation/Tests/TestURLResponse.swift b/Tests/Foundation/TestURLResponse.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestURLResponse.swift rename to Tests/Foundation/TestURLResponse.swift diff --git a/TestsOld/Foundation/Tests/TestURLSession.swift b/Tests/Foundation/TestURLSession.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestURLSession.swift rename to Tests/Foundation/TestURLSession.swift diff --git a/TestsOld/Foundation/Tests/TestURLSessionFTP.swift b/Tests/Foundation/TestURLSessionFTP.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestURLSessionFTP.swift rename to Tests/Foundation/TestURLSessionFTP.swift diff --git a/TestsOld/Foundation/Tests/TestUUID.swift b/Tests/Foundation/TestUUID.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestUUID.swift rename to Tests/Foundation/TestUUID.swift diff --git a/TestsOld/Foundation/Tests/TestUnit.swift b/Tests/Foundation/TestUnit.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestUnit.swift rename to Tests/Foundation/TestUnit.swift diff --git a/TestsOld/Foundation/Tests/TestUnitConverter.swift b/Tests/Foundation/TestUnitConverter.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestUnitConverter.swift rename to Tests/Foundation/TestUnitConverter.swift diff --git a/TestsOld/Foundation/Tests/TestUnitInformationStorage.swift b/Tests/Foundation/TestUnitInformationStorage.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestUnitInformationStorage.swift rename to Tests/Foundation/TestUnitInformationStorage.swift diff --git a/TestsOld/Foundation/Tests/TestUnitVolume.swift b/Tests/Foundation/TestUnitVolume.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestUnitVolume.swift rename to Tests/Foundation/TestUnitVolume.swift diff --git a/TestsOld/Foundation/Tests/TestUserDefaults.swift b/Tests/Foundation/TestUserDefaults.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestUserDefaults.swift rename to Tests/Foundation/TestUserDefaults.swift diff --git a/TestsOld/Foundation/Tests/TestUtils.swift b/Tests/Foundation/TestUtils.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestUtils.swift rename to Tests/Foundation/TestUtils.swift diff --git a/TestsOld/Foundation/Tests/TestXMLDocument.swift b/Tests/Foundation/TestXMLDocument.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestXMLDocument.swift rename to Tests/Foundation/TestXMLDocument.swift diff --git a/TestsOld/Foundation/Tests/TestXMLParser.swift b/Tests/Foundation/TestXMLParser.swift similarity index 100% rename from TestsOld/Foundation/Tests/TestXMLParser.swift rename to Tests/Foundation/TestXMLParser.swift diff --git a/TestsOld/Foundation/CMakeLists.txt b/TestsOld/Foundation/CMakeLists.txt deleted file mode 100644 index abe9b8b48a..0000000000 --- a/TestsOld/Foundation/CMakeLists.txt +++ /dev/null @@ -1,191 +0,0 @@ -add_executable(TestFoundation - main.swift - HTTPServer.swift - Imports.swift - FTPServer.swift - ../../Sources/Foundation/ProgressFraction.swift - Utilities.swift - FixtureValues.swift) - -# Test Cases -target_sources(TestFoundation PRIVATE - Tests/TestAffineTransform.swift - Tests/TestAttributedString.swift - Tests/TestAttributedStringCOW.swift - Tests/TestAttributedStringPerformance.swift - Tests/TestAttributedStringSupport.swift - Tests/TestBridging.swift - Tests/TestBundle.swift - Tests/TestByteCountFormatter.swift - Tests/TestCachedURLResponse.swift - Tests/TestCalendar.swift - Tests/TestCharacterSet.swift - Tests/TestCodable.swift - Tests/TestDataURLProtocol.swift - Tests/TestDateComponents.swift - Tests/TestDateFormatter.swift - Tests/TestDateInterval.swift - Tests/TestDateIntervalFormatter.swift - Tests/TestDate.swift - Tests/TestDecimal.swift - Tests/TestDimension.swift - Tests/TestEnergyFormatter.swift - Tests/TestFileHandle.swift - Tests/TestFileManager.swift - Tests/TestHost.swift - Tests/TestHTTPCookieStorage.swift - Tests/TestHTTPCookie.swift - Tests/TestHTTPURLResponse.swift - Tests/TestIndexPath.swift - Tests/TestIndexSet.swift - Tests/TestISO8601DateFormatter.swift - Tests/TestJSONEncoder.swift - Tests/TestJSONSerialization.swift - Tests/TestLengthFormatter.swift - Tests/TestMassFormatter.swift - Tests/TestMeasurement.swift - Tests/TestNotificationCenter.swift - Tests/TestNotificationQueue.swift - Tests/TestNotification.swift - Tests/TestNSArray.swift - Tests/TestNSAttributedString.swift - Tests/TestNSCache.swift - Tests/TestNSCalendar.swift - Tests/TestNSCompoundPredicate.swift - Tests/TestNSData.swift - Tests/TestNSDateComponents.swift - Tests/TestNSDictionary.swift - Tests/TestNSError.swift - Tests/TestNSGeometry.swift - Tests/TestNSKeyedArchiver.swift - Tests/TestNSKeyedUnarchiver.swift - Tests/TestNSLocale.swift - Tests/TestNSLock.swift - Tests/TestNSNull.swift - Tests/TestNSNumberBridging.swift - Tests/TestNSNumber.swift - Tests/TestNSOrderedSet.swift - Tests/TestNSPredicate.swift - Tests/TestNSRange.swift - Tests/TestNSRegularExpression.swift - Tests/TestNSSet.swift - Tests/TestNSSortDescriptor.swift - Tests/TestNSString.swift - Tests/TestNSTextCheckingResult.swift - Tests/TestNSURL.swift - Tests/TestNSURLRequest.swift - Tests/TestNSUUID.swift - Tests/TestNSValue.swift - Tests/TestNumberFormatter.swift - Tests/TestObjCRuntime.swift - Tests/TestOperationQueue.swift - Tests/TestPersonNameComponents.swift - Tests/TestPipe.swift - Tests/TestProcessInfo.swift - Tests/TestProcess.swift - Tests/TestProgress.swift - Tests/TestProgressFraction.swift - Tests/TestPropertyListEncoder.swift - Tests/TestPropertyListSerialization.swift - Tests/TestRunLoop.swift - Tests/TestScanner.swift - Tests/TestSocketPort.swift - Tests/TestStream.swift - Tests/TestThread.swift - Tests/TestTimer.swift - Tests/TestTimeZone.swift - Tests/TestUnitConverter.swift - Tests/TestUnitInformationStorage.swift - Tests/TestUnitVolume.swift - Tests/TestUnit.swift - Tests/TestURLCache.swift - Tests/TestURLCredential.swift - Tests/TestURLCredentialStorage.swift - Tests/TestURLComponents.swift - Tests/TestURLProtectionSpace.swift - Tests/TestURLProtocol.swift - Tests/TestURLRequest.swift - Tests/TestURLResponse.swift - Tests/TestURLSession.swift - Tests/TestURLSessionFTP.swift - Tests/TestURL.swift - Tests/TestUserDefaults.swift - Tests/TestUtils.swift - Tests/TestUUID.swift - Tests/TestXMLDocument.swift - Tests/TestXMLParser.swift) - -target_compile_definitions(TestFoundation PRIVATE - $<$:NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT>) -target_link_libraries(TestFoundation PRIVATE - Foundation - FoundationNetworking - FoundationXML) -target_link_libraries(TestFoundation PRIVATE - XCTest) - -# NOTE(compnerd) create a test "app" directory as we need the xdgTestHelper as -# an executable peer and the binary will be placed in the directory with the -# same name as a peer in the build tree. -if(CMAKE_SYSTEM_NAME STREQUAL Windows) - set(Resources TestFoundation.resources) -else() - set(Resources Resources) -endif() - -add_custom_command(TARGET TestFoundation POST_BUILD - COMMAND - ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/TestFoundation.app - COMMAND - ${CMAKE_COMMAND} -E copy_if_different $ ${CMAKE_BINARY_DIR}/TestFoundation.app - COMMAND - ${CMAKE_COMMAND} -E copy_if_different $ ${CMAKE_BINARY_DIR}/TestFoundation.app - COMMAND - ${CMAKE_COMMAND} -E copy_if_different $ ${CMAKE_BINARY_DIR}/TestFoundation.app - COMMAND - ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/TestFoundation.app/${Resources} - COMMAND - ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/Info.plist - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSURLTestData.plist - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/Test.plist - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSStringTestData.txt - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSString-UTF16-BE-data.txt - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSString-UTF16-LE-data.txt - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSString-UTF32-BE-data.txt - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSString-UTF32-LE-data.txt - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSString-ISO-8859-1-data.txt - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSXMLDocumentTestData.xml - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/PropertyList-1.0.dtd - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSXMLDTDTestData.xml - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSKeyedUnarchiver-ArrayTest.plist - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSKeyedUnarchiver-ComplexTest.plist - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSKeyedUnarchiver-ConcreteValueTest.plist - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSKeyedUnarchiver-EdgeInsetsTest.plist - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSKeyedUnarchiver-NotificationTest.plist - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSKeyedUnarchiver-RangeTest.plist - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSKeyedUnarchiver-RectTest.plist - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSKeyedUnarchiver-URLTest.plist - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSKeyedUnarchiver-UUIDTest.plist - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/NSKeyedUnarchiver-OrderedSetTest.plist - ${CMAKE_CURRENT_SOURCE_DIR}/Resources/TestFileWithZeros.txt - ${CMAKE_BINARY_DIR}/TestFoundation.app/${Resources} - COMMAND - ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/Resources/Fixtures ${CMAKE_BINARY_DIR}/TestFoundation.app/${Resources}/Fixtures - COMMAND - ${CMAKE_COMMAND} -E copy_if_different $ ${CMAKE_BINARY_DIR}/TestFoundation.app - COMMAND - ${CMAKE_COMMAND} -E copy_if_different $ ${CMAKE_BINARY_DIR}/TestFoundation.app - COMMAND - ${CMAKE_COMMAND} -E copy_if_different $ ${CMAKE_BINARY_DIR}/TestFoundation.app) - -xctest_discover_tests(TestFoundation - COMMAND - ${CMAKE_BINARY_DIR}/TestFoundation.app/TestFoundation${CMAKE_EXECUTABLE_SUFFIX} - WORKING_DIRECTORY - ${CMAKE_BINARY_DIR}/TestFoundation.app - DISCOVERY_TIMEOUT - 30 - PROPERTIES - ENVIRONMENT - LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/TestFoundation.app:$:$:$:$) diff --git a/TestsOld/Foundation/main.swift b/TestsOld/Foundation/main.swift deleted file mode 100644 index e6c7b35bc1..0000000000 --- a/TestsOld/Foundation/main.swift +++ /dev/null @@ -1,149 +0,0 @@ -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// - -// Most imports now centralized in TestImports.swift - -#if canImport(Darwin) - import Darwin -#elseif canImport(Glibc) - import Glibc -#elseif canImport(CRT) - import CRT -#endif - -#if !os(Windows) -// ignore SIGPIPE which is sent when writing to closed file descriptors. -_ = signal(SIGPIPE, SIG_IGN) -#endif - -// For the Swift version of the Foundation tests, we must manually list all test cases here. -var allTestCases = [ - testCase(TestAffineTransform.allTests), - testCase(TestNSArray.allTests), - testCase(TestBridging.allTests), - testCase(TestBundle.allTests), - testCase(TestByteCountFormatter.allTests), - testCase(TestNSCache.allTests), - testCase(TestCachedURLResponse.allTests), - testCase(TestCalendar.allTests), - testCase(TestNSCalendar.allTests), - testCase(TestCharacterSet.allTests), - testCase(TestNSCompoundPredicate.allTests), - testCase(TestNSData.allTests), - testCase(TestDataURLProtocol.allTests), - testCase(TestDate.allTests), - testCase(TestDateComponents.allTests), - testCase(TestDateInterval.allTests), - testCase(TestNSDateComponents.allTests), - testCase(TestDateFormatter.allTests), - testCase(TestDateIntervalFormatter.allTests), - testCase(TestDecimal.allTests), - testCase(TestNSDictionary.allTests), - testCase(TestNSError.allTests), - testCase(TestCocoaError.allTests), - testCase(TestURLError.allTests), - testCase(TestEnergyFormatter.allTests), - testCase(TestFileManager.allTests), - testCase(TestNSGeometry.allTests), - testCase(TestHTTPCookie.allTests), - testCase(TestHTTPCookieStorage.allTests), - testCase(TestIndexPath.allTests), - testCase(TestIndexSet.allTests), - testCase(TestISO8601DateFormatter.allTests), - testCase(TestJSONSerialization.allTests), - testCase(TestNSKeyedArchiver.allTests), - testCase(TestNSKeyedUnarchiver.allTests), - testCase(TestLengthFormatter.allTests), - testCase(TestNSLocale.allTests), - testCase(TestNotificationCenter.allTests), - testCase(TestNotificationQueue.allTests), - testCase(TestNSNull.allTests), - testCase(TestNSNumber.allTests), - testCase(TestNSNumberBridging.allTests), - testCase(TestNumberFormatter.allTests), - testCase(TestOperationQueue.allTests), - testCase(TestNSOrderedSet.allTests), - testCase(TestPersonNameComponents.allTests), - testCase(TestPipe.allTests), - testCase(TestNSPredicate.allTests), - testCase(TestProcessInfo.allTests), - testCase(TestHost.allTests), - testCase(TestPropertyListSerialization.allTests), - testCase(TestNSRange.allTests), - testCase(TestNSRegularExpression.allTests), - testCase(TestRunLoop.allTests), - testCase(TestScanner.allTests), - testCase(TestNSSet.allTests), - testCase(TestSocketPort.allTests), - testCase(TestStream.allTests), - testCase(TestNSString.allTests), - testCase(TestThread.allTests), - testCase(TestProcess.allTests), - testCase(TestNSTextCheckingResult.allTests), - testCase(TestTimer.allTests), - testCase(TestTimeZone.allTests), - testCase(TestURL.allTests), - testCase(TestURLCache.allTests), - testCase(TestURLComponents.allTests), - testCase(TestURLCredential.allTests), - testCase(TestURLCredentialStorage.allTests), - testCase(TestURLProtectionSpace.allTests), - testCase(TestURLProtocol.allTests), - testCase(TestNSURLRequest.allTests), - testCase(TestNSURL.allTests), - testCase(TestURLRequest.allTests), - testCase(TestURLResponse.allTests), - testCase(TestHTTPURLResponse.allTests), - testCase(TestNSUUID.allTests), - testCase(TestUUID.allTests), - testCase(TestNSValue.allTests), - testCase(TestUserDefaults.allTests), - testCase(TestXMLParser.allTests), - testCase(TestXMLDocument.allTests), - testCase(TestNSAttributedString.allTests), - testCase(TestNSMutableAttributedString.allTests), - testCase(TestFileHandle.allTests), - testCase(TestUnitConverter.allTests), - testCase(TestProgressFraction.allTests), - testCase(TestProgress.allTests), - testCase(TestObjCRuntime.allTests), - testCase(TestNotification.allTests), - testCase(TestMassFormatter.allTests), - testCase(TestJSONEncoder.allTests), - testCase(TestPropertyListEncoder.allTests), - testCase(TestCodable.allTests), - testCase(TestUnit.allTests), - testCase(TestDimension.allTests), - testCase(TestMeasurement.allTests), - testCase(TestUnitVolume.allTests), - testCase(TestUnitInformationStorage.allTests), - testCase(TestNSLock.allTests), - testCase(TestNSSortDescriptor.allTests), -] - -if #available(macOS 12, *) { - allTestCases.append(contentsOf: [ - testCase(TestAttributedString.allTests), - testCase(TestAttributedStringCOW.allTests), - testCase(TestAttributedStringPerformance.allTests) - ]) -} - -#if !os(Windows) -allTestCases.append(contentsOf: [ - testCase(TestURLSession.allTests), - testCase(TestURLSessionFTP.allTests), -]) -#endif - -atexit({ - fflush(stdout) - fflush(stderr) -}) -XCTMain(allTestCases) diff --git a/TestsOld/Tools/CMakeLists.txt b/TestsOld/Tools/CMakeLists.txt deleted file mode 100644 index a40910eb54..0000000000 --- a/TestsOld/Tools/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -add_subdirectory(GenerateTestFixtures) -add_subdirectory(XDGTestHelper) diff --git a/TestsOld/Tools/GenerateTestFixtures/CMakeLists.txt b/TestsOld/Tools/GenerateTestFixtures/CMakeLists.txt deleted file mode 100644 index ccea307c9e..0000000000 --- a/TestsOld/Tools/GenerateTestFixtures/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -add_executable(GenerateTestFixtures - main.swift - Utilities.swift - ../../Foundation/FixtureValues.swift) -target_link_libraries(GenerateTestFixtures PRIVATE - Foundation) diff --git a/TestsOld/Tools/GenerateTestFixtures/Utilities.swift b/TestsOld/Tools/GenerateTestFixtures/Utilities.swift deleted file mode 100644 index ae0a08e2e7..0000000000 --- a/TestsOld/Tools/GenerateTestFixtures/Utilities.swift +++ /dev/null @@ -1,30 +0,0 @@ -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2019 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors - -// This is the same as the XCTUnwrap() method used in TestFoundation, but does not require XCTest. - -enum TestError: Error { - case unexpectedNil -} - -// Same signature as the original. -func XCTUnwrap(_ expression: @autoclosure () throws -> T?, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) throws -> T { - if let value = try expression() { - return value - } else { - throw TestError.unexpectedNil - } -} - -func swiftVersionString() -> String { - #if compiler(>=5.0) && compiler(<5.1) - return "5.0" // We support 5.0 or later. - #elseif compiler(>=5.1) - return "5.1" - #endif -} diff --git a/TestsOld/Tools/GenerateTestFixtures/main.swift b/TestsOld/Tools/GenerateTestFixtures/main.swift deleted file mode 100644 index c3660f1793..0000000000 --- a/TestsOld/Tools/GenerateTestFixtures/main.swift +++ /dev/null @@ -1,77 +0,0 @@ -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2019 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors - -/* - This tool generates fixtures from Foundation that can be used by TestFoundation - to test cross-platform serialization compatibility. It can generate fixtures - either from the Foundation that ships with Apple OSes, or from swift-corelibs-foundation, - depending on the OS and linkage. - - usage: GenerateTestFixtures - The fixtures will be generated either in /Darwin or /Swift, - depending on whether Darwin Foundation or swift-corelibs-foundation produced the fixtures. - */ - -// 1. Get the right Foundation imported. -#if os(iOS) || os(watchOS) || os(tvOS) -#error("macOS only, please.") -#endif - -#if os(macOS) && NS_GENERATE_FIXTURES_FROM_SWIFT_CORELIBS_FOUNDATION_ON_DARWIN - -#if canImport(SwiftFoundation) - import SwiftFoundation - fileprivate let foundationVariant = "Swift" - fileprivate let foundationPlatformVersion = swiftVersionString() -#else - // A better diagnostic message: - #error("You specified NS_GENERATE_FIXTURES_FROM_SWIFT_CORELIBS_FOUNDATION_ON_DARWIN, but the SwiftFoundation module isn't available. Make sure you have set up this project to link with the result of the SwiftFoundation target in the swift-corelibs-foundation workspace") -#endif - -#else - import Foundation - - #if os(macOS) - fileprivate let foundationVariant = "macOS" - fileprivate let foundationPlatformVersion: String = { - let version = ProcessInfo.processInfo.operatingSystemVersion - return "\(version.majorVersion).\(version.minorVersion)" - }() - #else - fileprivate let foundationVariant = "Swift" - fileprivate let foundationPlatformVersion = swiftVersionString() - #endif -#endif - -// 2. Figure out the output path and create it if needed. - -let arguments = ProcessInfo.processInfo.arguments -let outputRoot: URL -if arguments.count > 1 { - outputRoot = URL(fileURLWithPath: arguments[1], relativeTo: URL(fileURLWithPath: FileManager.default.currentDirectoryPath)) -} else { - outputRoot = Bundle.main.executableURL!.deletingLastPathComponent() -} - -let outputDirectory = outputRoot.appendingPathComponent("\(foundationVariant)-\(foundationPlatformVersion)", isDirectory: true) - -try! FileManager.default.createDirectory(at: outputDirectory, withIntermediateDirectories: true, attributes: nil) - -// 3. Generate the fixtures. -// Fixture objects are defined in TestFoundation/FixtureValues.swift, which needs to be compiled into this module. - -for fixture in Fixtures.all { - let outputFile = outputDirectory.appendingPathComponent(fixture.identifier, isDirectory: false).appendingPathExtension("archive") - print(" == Archiving fixture: \(fixture.identifier) to \(outputFile.path)") - - let value = try! fixture.make() - - let data = try! NSKeyedArchiver.archivedData(withRootObject: value, requiringSecureCoding: fixture.supportsSecureCoding) - - try! data.write(to: outputFile) -} diff --git a/TestsOld/Tools/XDGTestHelper/CMakeLists.txt b/TestsOld/Tools/XDGTestHelper/CMakeLists.txt deleted file mode 100644 index 89e100e729..0000000000 --- a/TestsOld/Tools/XDGTestHelper/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -add_executable(xdgTestHelper - main.swift) -target_link_libraries(xdgTestHelper PRIVATE - Foundation - FoundationNetworking - FoundationXML) -set_target_properties(xdgTestHelper PROPERTIES - BUILD_RPATH "$;$;$;$") -if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows) - target_link_options(xdgTestHelper PRIVATE - "SHELL:-Xlinker -rpath -Xlinker $:$:$:$") -endif() diff --git a/TestsOld/Tools/XDGTestHelper/Resources/Info.plist b/TestsOld/Tools/XDGTestHelper/Resources/Info.plist deleted file mode 100644 index 506785aede..0000000000 --- a/TestsOld/Tools/XDGTestHelper/Resources/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - xdgTestHelper - CFBundleIdentifier - org.swift.xdgTestHelper - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - TestFoundation - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSHumanReadableCopyright - Copyright (c) 2017 Swift project authors - - diff --git a/TestsOld/Tools/XDGTestHelper/main.swift b/TestsOld/Tools/XDGTestHelper/main.swift deleted file mode 100644 index d2a36e2b11..0000000000 --- a/TestsOld/Tools/XDGTestHelper/main.swift +++ /dev/null @@ -1,286 +0,0 @@ -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2017 - 2018 Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// - -#if !DEPLOYMENT_RUNTIME_OBJC && canImport(SwiftFoundation) && canImport(SwiftFoundationNetworking) && canImport(SwiftFoundationXML) -import SwiftFoundation -import SwiftFoundationNetworking -import SwiftFoundationXML -#else -import Foundation -#if canImport(FoundationNetworking) -import FoundationNetworking -#endif -#endif -#if os(Windows) -import WinSDK -#endif - -enum HelperCheckStatus : Int32 { - case ok = 0 - case fail = 1 - case cookieStorageNil = 20 - case cookieStorePathWrong -} - - -class XDGCheck { - static func run() -> Never { - let storage = HTTPCookieStorage.shared - let properties: [HTTPCookiePropertyKey: String] = [ - .name: "TestCookie", - .value: "Test @#$%^$&*99", - .path: "/", - .domain: "example.com", - ] - - guard let simpleCookie = HTTPCookie(properties: properties) else { - exit(HelperCheckStatus.cookieStorageNil.rawValue) - } - guard let rawValue = getenv("XDG_DATA_HOME"), let xdg_data_home = String(utf8String: rawValue) else { - exit(HelperCheckStatus.fail.rawValue) - } - - storage.setCookie(simpleCookie) - let fm = FileManager.default - - guard let bundleName = Bundle.main.infoDictionary?["CFBundleName"] as? String else { - exit(HelperCheckStatus.fail.rawValue) - } - let destPath = xdg_data_home + "/" + bundleName + "/.cookies.shared" - var isDir: ObjCBool = false - let exists = fm.fileExists(atPath: destPath, isDirectory: &isDir) - if (!exists) { - print("Expected cookie path: ", destPath) - exit(HelperCheckStatus.cookieStorePathWrong.rawValue) - } - exit(HelperCheckStatus.ok.rawValue) - } -} - -#if !os(Windows) -// ----- - -// Used by TestProcess: test_interrupt(), test_suspend_resume() -func signalTest() { - - var signalSet = sigset_t() - sigemptyset(&signalSet) - sigaddset(&signalSet, SIGTERM) - sigaddset(&signalSet, SIGCONT) - sigaddset(&signalSet, SIGINT) - sigaddset(&signalSet, SIGALRM) - guard sigprocmask(SIG_BLOCK, &signalSet, nil) == 0 else { - fatalError("Cant block signals") - } - // Timeout - alarm(3) - - // On Linux, print() doesnt currently flush the output over the pipe so use - // write() for now. On macOS, print() works fine. - write(1, "Ready\n", 6) - - while true { - var receivedSignal: Int32 = 0 - let ret = sigwait(&signalSet, &receivedSignal) - guard ret == 0 else { - fatalError("sigwait() failed") - } - switch receivedSignal { - case SIGINT: - write(1, "Signal: SIGINT\n", 15) - - case SIGCONT: - write(1, "Signal: SIGCONT\n", 16) - - case SIGTERM: - print("Terminated") - exit(99) - - case SIGALRM: - print("Timedout") - exit(127) - - default: - let msg = "Unexpected signal: \(receivedSignal)" - fatalError(msg) - } - } -} -#endif - -// ----- - -#if !DEPLOYMENT_RUNTIME_OBJC -struct NSURLForPrintTest { - enum Method: String { - case NSSearchPath - case FileManagerDotURLFor - case FileManagerDotURLsFor - } - - enum Identifier: String { - case desktop - case download - case publicShare - case documents - case music - case pictures - case videos - } - - let method: Method - let identifier: Identifier - - func run() { - let directory: FileManager.SearchPathDirectory - - switch identifier { - case .desktop: - directory = .desktopDirectory - case .download: - directory = .downloadsDirectory - case .publicShare: - directory = .sharedPublicDirectory - case .documents: - directory = .documentDirectory - case .music: - directory = .musicDirectory - case .pictures: - directory = .picturesDirectory - case .videos: - directory = .moviesDirectory - } - - switch method { - case .NSSearchPath: - print(NSSearchPathForDirectoriesInDomains(directory, .userDomainMask, true).first!) - case .FileManagerDotURLFor: - print(try! FileManager.default.url(for: directory, in: .userDomainMask, appropriateFor: nil, create: false).path) - case .FileManagerDotURLsFor: - print(FileManager.default.urls(for: directory, in: .userDomainMask).first!.path) - } - } -} -#endif - -// Simple implementation of /bin/cat -func cat(_ args: ArraySlice.Iterator) { - var exitCode: Int32 = 0 - - func catFile(_ name: String) { - do { - guard let fh = name == "-" ? FileHandle.standardInput : FileHandle(forReadingAtPath: name) else { - FileHandle.standardError.write(Data("cat: \(name): No such file or directory\n".utf8)) - exitCode = 1 - return - } - while let data = try fh.readToEnd() { - try FileHandle.standardOutput.write(contentsOf: data) - } - } - catch { print(error) } - } - - var args = args - let arg = args.next() ?? "-" - catFile(arg) - while let arg = args.next() { - catFile(arg) - } - exit(exitCode) -} - -#if !os(Windows) -func printOpenFileDescriptors() { - let reasonableMaxFD: CInt - #if os(Linux) || os(macOS) - reasonableMaxFD = getdtablesize() - #else - reasonableMaxFD = 4096 - #endif - for fd in 0.. ") - } - - let test = NSURLForPrintTest(method: method, identifier: identifier) - test.run() -#endif - -#if !os(Windows) -case "--signal-test": - signalTest() - -case "--print-open-file-descriptors": - printOpenFileDescriptors() - -case "--pgrp": - print("pgrp: \(getpgrp())") - -#endif - -default: - fatalError("These arguments are not recognized. Only run this from a unit test.") -} - From 6ba9edf60c5ec5962e116915f03c8c459a2f319f Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Tue, 6 Feb 2024 14:19:53 -0800 Subject: [PATCH 015/198] Add libcurl for CF --- Package.swift | 15 +++++++++++++-- .../xml2.h => Clibcurl/module.modulemap} | 0 2 files changed, 13 insertions(+), 2 deletions(-) rename Sources/{Clibxml2/xml2.h => Clibcurl/module.modulemap} (100%) diff --git a/Package.swift b/Package.swift index 8d0d6c461e..08b2dfbe4f 100644 --- a/Package.swift +++ b/Package.swift @@ -66,10 +66,10 @@ let package = Package( name: "CoreFoundationPackage", dependencies: [ .product(name: "FoundationICU", package: "swift-foundation-icu"), - "Clibxml2" + "Clibxml2", + "Clibcurl" ], path: "Sources/CoreFoundation", - exclude: ["CFURLSessionInterface.c"], // TODO: Need curl cSettings: buildSettings ), .systemLibrary( @@ -80,6 +80,14 @@ let package = Package( .apt(["libxml2-dev"]) ] ), + .systemLibrary( + name: "Clibcurl", + pkgConfig: "libcurl", + providers: [ + .brew(["libcurl"]), + .apt(["libcurl"]) + ] + ), .executableTarget( name: "plutil", dependencies: ["Foundation"] @@ -104,6 +112,9 @@ let package = Package( resources: [ .copy("Tests/Foundation/Resources/Info.plist"), .copy("Tests/Foundation/Resources/NSStringTestData.txt") + ], + swiftSettings: [ + .define("NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT") ] ), ] diff --git a/Sources/Clibxml2/xml2.h b/Sources/Clibcurl/module.modulemap similarity index 100% rename from Sources/Clibxml2/xml2.h rename to Sources/Clibcurl/module.modulemap From 9fc534977299a49cfee87adb110a09ce0ec2eb12 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Tue, 6 Feb 2024 14:36:43 -0800 Subject: [PATCH 016/198] Build CFXMLInterface and FoundationXML --- Package.swift | 51 ++++++++++++++++++- .../CFXMLInterface.c | 0 .../include/CFXMLInterface.h | 2 +- .../module.map} | 0 .../module.modulemap} | 0 Sources/FoundationXML/XMLDTD.swift | 2 +- Sources/FoundationXML/XMLDocument.swift | 2 +- 7 files changed, 52 insertions(+), 5 deletions(-) rename Sources/{CoreFoundation => CFXMLInterface}/CFXMLInterface.c (100%) rename Sources/{CoreFoundation => CFXMLInterface}/include/CFXMLInterface.h (99%) rename Sources/{CoreFoundation/cfxml-module.map => CFXMLInterface/module.map} (100%) rename Sources/{CoreFoundation/cfxml-module.modulemap => CFXMLInterface/module.modulemap} (100%) diff --git a/Package.swift b/Package.swift index 08b2dfbe4f..83c222e063 100644 --- a/Package.swift +++ b/Package.swift @@ -32,7 +32,36 @@ let buildSettings: [CSetting] = [ "-fcf-runtime-abi=swift" // /EHsc for Windows ]), - .unsafeFlags(["-I/usr/lib/swift"], .when(platforms: [.linux, .android])) + .unsafeFlags(["-I/usr/lib/swift"], .when(platforms: [.linux, .android])) // dispatch +] + +let xmlInterfaceBuildSettings: [CSetting] = [ + .headerSearchPath("../CoreFoundation/internalInclude"), + .headerSearchPath("../CoreFoundation/include"), + .define("DEBUG", .when(configuration: .debug)), + .define("CF_BUILDING_CF"), + .define("DEPLOYMENT_RUNTIME_SWIFT"), + .define("DEPLOYMENT_ENABLE_LIBDISPATCH"), + .define("HAVE_STRUCT_TIMESPEC"), + .define("__CONSTANT_CFSTRINGS__"), + .define("_GNU_SOURCE", .when(platforms: [.linux, .android])), + .unsafeFlags([ + "-Wno-shorten-64-to-32", + "-Wno-deprecated-declarations", + "-Wno-unreachable-code", + "-Wno-conditional-uninitialized", + "-Wno-unused-variable", + "-Wno-int-conversion", + "-Wno-unused-function", + "-Wno-microsoft-enum-forward-reference", + "-fconstant-cfstrings", + "-fexceptions", // TODO: not on OpenBSD + "-fdollars-in-identifiers", + "-fno-common", + "-fcf-runtime-abi=swift" + // /EHsc for Windows + ]), + .unsafeFlags(["-I/usr/lib/swift"], .when(platforms: [.linux, .android])) // dispatch ] let package = Package( @@ -62,16 +91,34 @@ let package = Package( path: "Sources/Foundation", swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT")] ), + .target( + name: "FoundationXML", + dependencies: [ + .product(name: "FoundationEssentials", package: "swift-foundation"), + "CoreFoundationPackage", + "CFXMLInterface" + ], + path: "Sources/FoundationXML", + swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT")] + ), .target( name: "CoreFoundationPackage", dependencies: [ .product(name: "FoundationICU", package: "swift-foundation-icu"), - "Clibxml2", "Clibcurl" ], path: "Sources/CoreFoundation", cSettings: buildSettings ), + .target( + name: "CFXMLInterface", + dependencies: [ + "CoreFoundationPackage", + "Clibxml2", + ], + path: "Sources/CFXMLInterface", + cSettings: xmlInterfaceBuildSettings + ), .systemLibrary( name: "Clibxml2", pkgConfig: "libxml-2.0", diff --git a/Sources/CoreFoundation/CFXMLInterface.c b/Sources/CFXMLInterface/CFXMLInterface.c similarity index 100% rename from Sources/CoreFoundation/CFXMLInterface.c rename to Sources/CFXMLInterface/CFXMLInterface.c diff --git a/Sources/CoreFoundation/include/CFXMLInterface.h b/Sources/CFXMLInterface/include/CFXMLInterface.h similarity index 99% rename from Sources/CoreFoundation/include/CFXMLInterface.h rename to Sources/CFXMLInterface/include/CFXMLInterface.h index 9d95e6ee57..8a2fc98bf7 100644 --- a/Sources/CoreFoundation/include/CFXMLInterface.h +++ b/Sources/CFXMLInterface/include/CFXMLInterface.h @@ -14,7 +14,7 @@ #if !defined(__COREFOUNDATION_CFXMLINTERFACE__) #define __COREFOUNDATION_CFXMLINTERFACE__ 1 -#include "CoreFoundation.h" +#include #include #include #include diff --git a/Sources/CoreFoundation/cfxml-module.map b/Sources/CFXMLInterface/module.map similarity index 100% rename from Sources/CoreFoundation/cfxml-module.map rename to Sources/CFXMLInterface/module.map diff --git a/Sources/CoreFoundation/cfxml-module.modulemap b/Sources/CFXMLInterface/module.modulemap similarity index 100% rename from Sources/CoreFoundation/cfxml-module.modulemap rename to Sources/CFXMLInterface/module.modulemap diff --git a/Sources/FoundationXML/XMLDTD.swift b/Sources/FoundationXML/XMLDTD.swift index 9fb588bccf..407b8f9d9d 100644 --- a/Sources/FoundationXML/XMLDTD.swift +++ b/Sources/FoundationXML/XMLDTD.swift @@ -44,7 +44,7 @@ open class XMLDTD : XMLNode { setupXMLParsing() var unmanagedError: Unmanaged? = nil - guard let node = _CFXMLParseDTDFromData(unsafeBitCast(data as NSData, to: CFData.self), &unmanagedError) else { + guard let node = _CFXMLParseDTDFromData(unsafeBitCast(NSData(data: data) /* data as NSData */, to: CFData.self), &unmanagedError) else { if let error = unmanagedError?.takeRetainedValue() { throw _CFErrorSPIForFoundationXMLUseOnly(unsafelyAssumingIsCFError: error)._nsObject } diff --git a/Sources/FoundationXML/XMLDocument.swift b/Sources/FoundationXML/XMLDocument.swift index 6e9e86833d..010843929d 100644 --- a/Sources/FoundationXML/XMLDocument.swift +++ b/Sources/FoundationXML/XMLDocument.swift @@ -102,7 +102,7 @@ open class XMLDocument : XMLNode { */ public init(data: Data, options mask: XMLNode.Options = []) throws { setupXMLParsing() - let docPtr = _CFXMLDocPtrFromDataWithOptions(unsafeBitCast(data as NSData, to: CFData.self), UInt32(mask.rawValue)) + let docPtr = _CFXMLDocPtrFromDataWithOptions(unsafeBitCast(NSData(data: data) /* data as NSData */, to: CFData.self), UInt32(mask.rawValue)) super.init(ptr: _CFXMLNodePtr(docPtr)) if mask.contains(.documentValidate) { From e09e8113c2242cb2d9da6e32cf4bd64fb4881967 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Tue, 6 Feb 2024 16:00:44 -0800 Subject: [PATCH 017/198] Build FoundationNetworking --- Package.swift | 32 ++- Sources/CFXMLInterface/module.map | 3 - Sources/CoreFoundation/url-module.map | 3 - Sources/Foundation/Boxing.swift | 8 +- Sources/FoundationNetworking/Boxing.swift | 235 ++++++++++++++++++ Sources/FoundationNetworking/URLCache.swift | 4 +- .../URLSession/BodySource.swift | 2 +- .../URLSession/HTTP/HTTPURLProtocol.swift | 2 +- .../URLSession/NetworkingSpecific.swift | 2 +- .../WebSocket/WebSocketURLProtocol.swift | 2 +- .../URLSession/libcurl/EasyHandle.swift | 2 +- .../URLSession/libcurl/MultiHandle.swift | 2 +- .../URLSession/libcurl/libcurlHelpers.swift | 2 +- Sources/FoundationXML/XMLDTD.swift | 4 +- Sources/FoundationXML/XMLDTDNode.swift | 2 +- Sources/FoundationXML/XMLDocument.swift | 4 +- Sources/FoundationXML/XMLElement.swift | 2 +- Sources/FoundationXML/XMLNode.swift | 4 +- Sources/FoundationXML/XMLParser.swift | 4 +- .../CFURLSessionInterface.c | 0 .../include/CFURLSessionInterface.h | 2 +- Sources/_CFURLSessionInterface/module.map | 3 + .../module.modulemap} | 2 +- .../CFXMLInterface.c | 0 .../include/CFXMLInterface.h | 0 Sources/_CFXMLInterface/module.map | 3 + .../module.modulemap | 2 +- 27 files changed, 291 insertions(+), 40 deletions(-) delete mode 100644 Sources/CFXMLInterface/module.map delete mode 100644 Sources/CoreFoundation/url-module.map create mode 100644 Sources/FoundationNetworking/Boxing.swift rename Sources/{CoreFoundation => _CFURLSessionInterface}/CFURLSessionInterface.c (100%) rename Sources/{CoreFoundation => _CFURLSessionInterface}/include/CFURLSessionInterface.h (99%) create mode 100644 Sources/_CFURLSessionInterface/module.map rename Sources/{CoreFoundation/url-module.modulemap => _CFURLSessionInterface/module.modulemap} (61%) rename Sources/{CFXMLInterface => _CFXMLInterface}/CFXMLInterface.c (100%) rename Sources/{CFXMLInterface => _CFXMLInterface}/include/CFXMLInterface.h (100%) create mode 100644 Sources/_CFXMLInterface/module.map rename Sources/{CFXMLInterface => _CFXMLInterface}/module.modulemap (62%) diff --git a/Package.swift b/Package.swift index 83c222e063..542acb4f77 100644 --- a/Package.swift +++ b/Package.swift @@ -35,7 +35,8 @@ let buildSettings: [CSetting] = [ .unsafeFlags(["-I/usr/lib/swift"], .when(platforms: [.linux, .android])) // dispatch ] -let xmlInterfaceBuildSettings: [CSetting] = [ +// For _CFURLSessionInterface, _CFXMLInterface +let interfaceBuildSettings: [CSetting] = [ .headerSearchPath("../CoreFoundation/internalInclude"), .headerSearchPath("../CoreFoundation/include"), .define("DEBUG", .when(configuration: .debug)), @@ -95,12 +96,24 @@ let package = Package( name: "FoundationXML", dependencies: [ .product(name: "FoundationEssentials", package: "swift-foundation"), + "Foundation", "CoreFoundationPackage", - "CFXMLInterface" + "_CFXMLInterface" ], path: "Sources/FoundationXML", swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT")] ), + .target( + name: "FoundationNetworking", + dependencies: [ + .product(name: "FoundationEssentials", package: "swift-foundation"), + "Foundation", + "CoreFoundationPackage", + "_CFURLSessionInterface" + ], + path: "Sources/FoundationNetworking", + swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT")] + ), .target( name: "CoreFoundationPackage", dependencies: [ @@ -111,13 +124,22 @@ let package = Package( cSettings: buildSettings ), .target( - name: "CFXMLInterface", + name: "_CFXMLInterface", dependencies: [ "CoreFoundationPackage", "Clibxml2", ], - path: "Sources/CFXMLInterface", - cSettings: xmlInterfaceBuildSettings + path: "Sources/_CFXMLInterface", + cSettings: interfaceBuildSettings + ), + .target( + name: "_CFURLSessionInterface", + dependencies: [ + "CoreFoundationPackage", + "Clibcurl", + ], + path: "Sources/_CFURLSessionInterface", + cSettings: interfaceBuildSettings ), .systemLibrary( name: "Clibxml2", diff --git a/Sources/CFXMLInterface/module.map b/Sources/CFXMLInterface/module.map deleted file mode 100644 index f3a90f198f..0000000000 --- a/Sources/CFXMLInterface/module.map +++ /dev/null @@ -1,3 +0,0 @@ -module CFXMLInterface [extern_c] [system] { - umbrella header "CFXMLInterface.h" -} diff --git a/Sources/CoreFoundation/url-module.map b/Sources/CoreFoundation/url-module.map deleted file mode 100644 index 5b63dcbe0e..0000000000 --- a/Sources/CoreFoundation/url-module.map +++ /dev/null @@ -1,3 +0,0 @@ -module CFURLSessionInterface [extern_c] [system] { - umbrella header "CFURLSessionInterface.h" -} diff --git a/Sources/Foundation/Boxing.swift b/Sources/Foundation/Boxing.swift index 2054666be2..48ec6b5496 100644 --- a/Sources/Foundation/Boxing.swift +++ b/Sources/Foundation/Boxing.swift @@ -10,13 +10,7 @@ // //===----------------------------------------------------------------------===// -#if NS_BUILDING_FOUNDATION_NETWORKING -#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) -import SwiftFoundation -#else -import Foundation -#endif -#endif +// This file is for internal use of Foundation /// A class type which acts as a handle (pointer-to-pointer) to a Foundation reference type which has only a mutable class (e.g., NSURLComponents). /// diff --git a/Sources/FoundationNetworking/Boxing.swift b/Sources/FoundationNetworking/Boxing.swift new file mode 100644 index 0000000000..d04f68eb4c --- /dev/null +++ b/Sources/FoundationNetworking/Boxing.swift @@ -0,0 +1,235 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +//===----------------------------------------------------------------------===// + +// This file is for internal use of FoundationNetworking + +#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) +import SwiftFoundation +#else +import Foundation +#endif + +/// A class type which acts as a handle (pointer-to-pointer) to a Foundation reference type which has only a mutable class (e.g., NSURLComponents). +/// +/// Note: This assumes that the result of calling copy() is mutable. The documentation says that classes which do not have a mutable/immutable distinction should just adopt NSCopying instead of NSMutableCopying. +internal final class _MutableHandle where MutableType : NSCopying { + @usableFromInline internal var _pointer : MutableType + + init(reference : MutableType) { + _pointer = reference.copy() as! MutableType + } + + init(adoptingReference reference: MutableType) { + _pointer = reference + } + + /// Apply a closure to the reference type. + func map(_ whatToDo : (MutableType) throws -> ReturnType) rethrows -> ReturnType { + return try whatToDo(_pointer) + } + + func _copiedReference() -> MutableType { + return _pointer.copy() as! MutableType + } + + func _uncopiedReference() -> MutableType { + return _pointer + } +} + +/// Describes common operations for Foundation struct types that are bridged to a mutable object (e.g. NSURLComponents). +internal protocol _MutableBoxing : ReferenceConvertible { + var _handle : _MutableHandle { get set } + + /// Apply a mutating closure to the reference type, regardless if it is mutable or immutable. + /// + /// This function performs the correct copy-on-write check for efficient mutation. + mutating func _applyMutation(_ whatToDo : (ReferenceType) -> ReturnType) -> ReturnType +} + +extension _MutableBoxing { + @inline(__always) + mutating func _applyMutation(_ whatToDo : (ReferenceType) -> ReturnType) -> ReturnType { + // Only create a new box if we are not uniquely referenced + if !isKnownUniquelyReferenced(&_handle) { + let ref = _handle._pointer + _handle = _MutableHandle(reference: ref) + } + return whatToDo(_handle._pointer) + } +} + +internal enum _MutableUnmanagedWrapper where MutableType : NSMutableCopying { + case Immutable(Unmanaged) + case Mutable(Unmanaged) +} + +internal protocol _SwiftNativeFoundationType: AnyObject { + associatedtype ImmutableType : NSObject + associatedtype MutableType : NSObject, NSMutableCopying + var __wrapped : _MutableUnmanagedWrapper { get } + + init(unmanagedImmutableObject: Unmanaged) + init(unmanagedMutableObject: Unmanaged) + + func mutableCopy(with zone : NSZone) -> Any + + func hash(into hasher: inout Hasher) + var hashValue: Int { get } + + var description: String { get } + var debugDescription: String { get } + + func releaseWrappedObject() +} + +extension _SwiftNativeFoundationType { + + @inline(__always) + func _mapUnmanaged(_ whatToDo : (ImmutableType) throws -> ReturnType) rethrows -> ReturnType { + defer { _fixLifetime(self) } + + switch __wrapped { + case .Immutable(let i): + return try i._withUnsafeGuaranteedRef { + _onFastPath() + return try whatToDo($0) + } + case .Mutable(let m): + return try m._withUnsafeGuaranteedRef { + _onFastPath() + return try whatToDo(_unsafeReferenceCast($0, to: ImmutableType.self)) + } + } + } + + func releaseWrappedObject() { + switch __wrapped { + case .Immutable(let i): + i.release() + case .Mutable(let m): + m.release() + } + } + + func mutableCopy(with zone : NSZone) -> Any { + return _mapUnmanaged { ($0 as NSObject).mutableCopy() } + } + + func hash(into hasher: inout Hasher) { + _mapUnmanaged { hasher.combine($0) } + } + + var hashValue: Int { + return _mapUnmanaged { return $0.hashValue } + } + + var description: String { + return _mapUnmanaged { return $0.description } + } + + var debugDescription: String { + return _mapUnmanaged { return $0.debugDescription } + } + + func isEqual(_ other: AnyObject) -> Bool { + return _mapUnmanaged { return $0.isEqual(other) } + } +} + +internal protocol _MutablePairBoxing { + associatedtype WrappedSwiftNSType : _SwiftNativeFoundationType + var _wrapped : WrappedSwiftNSType { get set } +} + +extension _MutablePairBoxing { + @inline(__always) + func _mapUnmanaged(_ whatToDo : (WrappedSwiftNSType.ImmutableType) throws -> ReturnType) rethrows -> ReturnType { + // We are using Unmanaged. Make sure that the owning container class + // 'self' is guaranteed to be alive by extending the lifetime of 'self' + // to the end of the scope of this function. + // Note: At the time of this writing using withExtendedLifetime here + // instead of _fixLifetime causes different ARC pair matching behavior + // foiling optimization. This is why we explicitly use _fixLifetime here + // instead. + defer { _fixLifetime(self) } + + let unmanagedHandle = Unmanaged.passUnretained(_wrapped) + let wrapper = unmanagedHandle._withUnsafeGuaranteedRef { $0.__wrapped } + switch (wrapper) { + case .Immutable(let i): + return try i._withUnsafeGuaranteedRef { + return try whatToDo($0) + } + case .Mutable(let m): + return try m._withUnsafeGuaranteedRef { + return try whatToDo(_unsafeReferenceCast($0, to: WrappedSwiftNSType.ImmutableType.self)) + } + } + } + + @inline(__always) + mutating func _applyUnmanagedMutation(_ whatToDo : (WrappedSwiftNSType.MutableType) throws -> ReturnType) rethrows -> ReturnType { + // We are using Unmanaged. Make sure that the owning container class + // 'self' is guaranteed to be alive by extending the lifetime of 'self' + // to the end of the scope of this function. + // Note: At the time of this writing using withExtendedLifetime here + // instead of _fixLifetime causes different ARC pair matching behavior + // foiling optimization. This is why we explicitly use _fixLifetime here + // instead. + defer { _fixLifetime(self) } + + var unique = true + let _unmanagedHandle = Unmanaged.passUnretained(_wrapped) + let wrapper = _unmanagedHandle._withUnsafeGuaranteedRef { $0.__wrapped } + + // This check is done twice because: Value kept live for too long causing uniqueness check to fail + switch (wrapper) { + case .Immutable: + break + case .Mutable: + unique = isKnownUniquelyReferenced(&_wrapped) + } + + switch (wrapper) { + case .Immutable(let i): + // We need to become mutable; by creating a new instance we also become unique + let copy = Unmanaged.passRetained(i._withUnsafeGuaranteedRef { + return _unsafeReferenceCast($0.mutableCopy(), to: WrappedSwiftNSType.MutableType.self) } + ) + + // Be sure to set the var before calling out; otherwise references to the struct in the closure may be looking at the old value + _wrapped = WrappedSwiftNSType(unmanagedMutableObject: copy) + return try copy._withUnsafeGuaranteedRef { + _onFastPath() + return try whatToDo($0) + } + case .Mutable(let m): + // Only create a new box if we are not uniquely referenced + if !unique { + let copy = Unmanaged.passRetained(m._withUnsafeGuaranteedRef { + return _unsafeReferenceCast($0.mutableCopy(), to: WrappedSwiftNSType.MutableType.self) + }) + _wrapped = WrappedSwiftNSType(unmanagedMutableObject: copy) + return try copy._withUnsafeGuaranteedRef { + _onFastPath() + return try whatToDo($0) + } + } else { + return try m._withUnsafeGuaranteedRef { + _onFastPath() + return try whatToDo($0) + } + } + } + } +} diff --git a/Sources/FoundationNetworking/URLCache.swift b/Sources/FoundationNetworking/URLCache.swift index e74805e049..914898bdc5 100644 --- a/Sources/FoundationNetworking/URLCache.swift +++ b/Sources/FoundationNetworking/URLCache.swift @@ -52,7 +52,7 @@ class StoredCachedURLResponse: NSObject, NSSecureCoding { func encode(with aCoder: NSCoder) { aCoder.encode(cachedURLResponse.response, forKey: "response") - aCoder.encode(cachedURLResponse.data as NSData, forKey: "data") + aCoder.encode(cachedURLResponse.data._bridgeToObjectiveC(), forKey: "data") aCoder.encode(Int(bitPattern: cachedURLResponse.storagePolicy.rawValue), forKey: "storagePolicy") aCoder.encode(cachedURLResponse.userInfo as NSDictionary?, forKey: "userInfo") aCoder.encode(cachedURLResponse.date as NSDate, forKey: "date") @@ -68,7 +68,7 @@ class StoredCachedURLResponse: NSObject, NSSecureCoding { let userInfo = aDecoder.decodeObject(of: NSDictionary.self, forKey: "userInfo") as? [AnyHashable: Any] - cachedURLResponse = CachedURLResponse(response: response, data: data as Data, userInfo: userInfo, storagePolicy: storagePolicy) + cachedURLResponse = CachedURLResponse(response: response, data: Data(data), userInfo: userInfo, storagePolicy: storagePolicy) cachedURLResponse.date = date as Date } diff --git a/Sources/FoundationNetworking/URLSession/BodySource.swift b/Sources/FoundationNetworking/URLSession/BodySource.swift index 4e82976391..e6e3f85c86 100644 --- a/Sources/FoundationNetworking/URLSession/BodySource.swift +++ b/Sources/FoundationNetworking/URLSession/BodySource.swift @@ -23,7 +23,7 @@ import Foundation #endif @_implementationOnly import CoreFoundation -@_implementationOnly import CFURLSessionInterface +@_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift b/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift index abf6623435..23c6811c34 100644 --- a/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift @@ -14,7 +14,7 @@ import Foundation #endif @_implementationOnly import CoreFoundation -@_implementationOnly import CFURLSessionInterface +@_implementationOnly import _CFURLSessionInterface import Dispatch internal class _HTTPURLProtocol: _NativeProtocol { diff --git a/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift b/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift index e534cd9218..e099f42d9f 100644 --- a/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift +++ b/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift @@ -85,7 +85,7 @@ class _NSNonfileURLContentLoader: _NSNonfileURLContentLoading { switch statusCode { // These are the only valid response codes that data will be returned for, all other codes will be treated as error. case 101, 200...399, 401, 407: - return (data as NSData, urlResponse?.textEncodingName) + return (NSData(data: data), urlResponse?.textEncodingName) default: break diff --git a/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift b/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift index da142721af..9a7438d69f 100644 --- a/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift @@ -14,7 +14,7 @@ import Foundation #endif @_implementationOnly import CoreFoundation -@_implementationOnly import CFURLSessionInterface +@_implementationOnly import _CFURLSessionInterface import Dispatch internal class _WebSocketURLProtocol: _HTTPURLProtocol { diff --git a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift index 4513cdb701..6edcaffd97 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift @@ -24,7 +24,7 @@ import Foundation #endif @_implementationOnly import CoreFoundation -@_implementationOnly import CFURLSessionInterface +@_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift index 19bda9723d..12cac38f36 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift @@ -23,7 +23,7 @@ import Foundation #endif @_implementationOnly import CoreFoundation -@_implementationOnly import CFURLSessionInterface +@_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift b/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift index f0a236bd39..55460cfc22 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift @@ -18,7 +18,7 @@ @_implementationOnly import CoreFoundation -@_implementationOnly import CFURLSessionInterface +@_implementationOnly import _CFURLSessionInterface //TODO: Move things in this file? diff --git a/Sources/FoundationXML/XMLDTD.swift b/Sources/FoundationXML/XMLDTD.swift index 407b8f9d9d..db18d25fb5 100644 --- a/Sources/FoundationXML/XMLDTD.swift +++ b/Sources/FoundationXML/XMLDTD.swift @@ -13,7 +13,7 @@ import SwiftFoundation import Foundation #endif @_implementationOnly import CoreFoundation -@_implementationOnly import CFXMLInterface +@_implementationOnly import _CFXMLInterface /*! @class XMLDTD @@ -44,7 +44,7 @@ open class XMLDTD : XMLNode { setupXMLParsing() var unmanagedError: Unmanaged? = nil - guard let node = _CFXMLParseDTDFromData(unsafeBitCast(NSData(data: data) /* data as NSData */, to: CFData.self), &unmanagedError) else { + guard let node = _CFXMLParseDTDFromData(unsafeBitCast(data._bridgeToObjectiveC(), to: CFData.self), &unmanagedError) else { if let error = unmanagedError?.takeRetainedValue() { throw _CFErrorSPIForFoundationXMLUseOnly(unsafelyAssumingIsCFError: error)._nsObject } diff --git a/Sources/FoundationXML/XMLDTDNode.swift b/Sources/FoundationXML/XMLDTDNode.swift index d5975b242e..f0d74cb20e 100644 --- a/Sources/FoundationXML/XMLDTDNode.swift +++ b/Sources/FoundationXML/XMLDTDNode.swift @@ -13,7 +13,7 @@ import SwiftFoundation import Foundation #endif @_implementationOnly import CoreFoundation -@_implementationOnly import CFXMLInterface +@_implementationOnly import _CFXMLInterface /*! @typedef XMLDTDNodeKind diff --git a/Sources/FoundationXML/XMLDocument.swift b/Sources/FoundationXML/XMLDocument.swift index 010843929d..41d6ada04d 100644 --- a/Sources/FoundationXML/XMLDocument.swift +++ b/Sources/FoundationXML/XMLDocument.swift @@ -13,7 +13,7 @@ import SwiftFoundation import Foundation #endif @_implementationOnly import CoreFoundation -@_implementationOnly import CFXMLInterface +@_implementationOnly import _CFXMLInterface // Input options // NSXMLNodeOptionsNone @@ -102,7 +102,7 @@ open class XMLDocument : XMLNode { */ public init(data: Data, options mask: XMLNode.Options = []) throws { setupXMLParsing() - let docPtr = _CFXMLDocPtrFromDataWithOptions(unsafeBitCast(NSData(data: data) /* data as NSData */, to: CFData.self), UInt32(mask.rawValue)) + let docPtr = _CFXMLDocPtrFromDataWithOptions(unsafeBitCast(data._bridgeToObjectiveC(), to: CFData.self), UInt32(mask.rawValue)) super.init(ptr: _CFXMLNodePtr(docPtr)) if mask.contains(.documentValidate) { diff --git a/Sources/FoundationXML/XMLElement.swift b/Sources/FoundationXML/XMLElement.swift index 01e7c0357e..448b769108 100644 --- a/Sources/FoundationXML/XMLElement.swift +++ b/Sources/FoundationXML/XMLElement.swift @@ -13,7 +13,7 @@ import SwiftFoundation import Foundation #endif @_implementationOnly import CoreFoundation -@_implementationOnly import CFXMLInterface +@_implementationOnly import _CFXMLInterface /*! @class XMLElement diff --git a/Sources/FoundationXML/XMLNode.swift b/Sources/FoundationXML/XMLNode.swift index 75d71cf5b7..2735b2f3c1 100644 --- a/Sources/FoundationXML/XMLNode.swift +++ b/Sources/FoundationXML/XMLNode.swift @@ -10,10 +10,10 @@ //import libxml2 #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) import SwiftFoundation -import CFXMLInterface +import _CFXMLInterface #else import Foundation -@_implementationOnly import CFXMLInterface +@_implementationOnly import _CFXMLInterface #endif @_implementationOnly import CoreFoundation diff --git a/Sources/FoundationXML/XMLParser.swift b/Sources/FoundationXML/XMLParser.swift index 501c9670a1..f41d56ce8f 100644 --- a/Sources/FoundationXML/XMLParser.swift +++ b/Sources/FoundationXML/XMLParser.swift @@ -9,10 +9,10 @@ #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) import SwiftFoundation -import CFXMLInterface +import _CFXMLInterface #else import Foundation -@_implementationOnly import CFXMLInterface +@_implementationOnly import _CFXMLInterface #endif @_implementationOnly import CoreFoundation diff --git a/Sources/CoreFoundation/CFURLSessionInterface.c b/Sources/_CFURLSessionInterface/CFURLSessionInterface.c similarity index 100% rename from Sources/CoreFoundation/CFURLSessionInterface.c rename to Sources/_CFURLSessionInterface/CFURLSessionInterface.c diff --git a/Sources/CoreFoundation/include/CFURLSessionInterface.h b/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h similarity index 99% rename from Sources/CoreFoundation/include/CFURLSessionInterface.h rename to Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h index b0104c33bd..d760177041 100644 --- a/Sources/CoreFoundation/include/CFURLSessionInterface.h +++ b/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h @@ -27,7 +27,7 @@ #if !defined(__COREFOUNDATION_URLSESSIONINTERFACE__) #define __COREFOUNDATION_URLSESSIONINTERFACE__ 1 -#include "CoreFoundation.h" +#include #include #if defined(_WIN32) #include diff --git a/Sources/_CFURLSessionInterface/module.map b/Sources/_CFURLSessionInterface/module.map new file mode 100644 index 0000000000..b6d8887d19 --- /dev/null +++ b/Sources/_CFURLSessionInterface/module.map @@ -0,0 +1,3 @@ +module _CFURLSessionInterface [extern_c] [system] { + umbrella header "CFURLSessionInterface.h" +} diff --git a/Sources/CoreFoundation/url-module.modulemap b/Sources/_CFURLSessionInterface/module.modulemap similarity index 61% rename from Sources/CoreFoundation/url-module.modulemap rename to Sources/_CFURLSessionInterface/module.modulemap index 66498a5f98..a832adcca2 100644 --- a/Sources/CoreFoundation/url-module.modulemap +++ b/Sources/_CFURLSessionInterface/module.modulemap @@ -1,4 +1,4 @@ -framework module CFURLSessionInterface [extern_c] [system] { +framework module _CFURLSessionInterface [extern_c] [system] { umbrella header "CFURLSessionInterface.h" export * diff --git a/Sources/CFXMLInterface/CFXMLInterface.c b/Sources/_CFXMLInterface/CFXMLInterface.c similarity index 100% rename from Sources/CFXMLInterface/CFXMLInterface.c rename to Sources/_CFXMLInterface/CFXMLInterface.c diff --git a/Sources/CFXMLInterface/include/CFXMLInterface.h b/Sources/_CFXMLInterface/include/CFXMLInterface.h similarity index 100% rename from Sources/CFXMLInterface/include/CFXMLInterface.h rename to Sources/_CFXMLInterface/include/CFXMLInterface.h diff --git a/Sources/_CFXMLInterface/module.map b/Sources/_CFXMLInterface/module.map new file mode 100644 index 0000000000..c64502b592 --- /dev/null +++ b/Sources/_CFXMLInterface/module.map @@ -0,0 +1,3 @@ +module _CFXMLInterface [extern_c] [system] { + umbrella header "CFXMLInterface.h" +} diff --git a/Sources/CFXMLInterface/module.modulemap b/Sources/_CFXMLInterface/module.modulemap similarity index 62% rename from Sources/CFXMLInterface/module.modulemap rename to Sources/_CFXMLInterface/module.modulemap index 95e5a151b1..35e9bb7969 100644 --- a/Sources/CFXMLInterface/module.modulemap +++ b/Sources/_CFXMLInterface/module.modulemap @@ -1,4 +1,4 @@ -framework module CFXMLInterface [extern_c] [system] { +framework module _CFXMLInterface [extern_c] [system] { umbrella header "CFXMLInterface.h" export * From 55b2f94c897f35b76f02e4463c89b53d6fdf03af Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Tue, 6 Feb 2024 16:04:18 -0800 Subject: [PATCH 018/198] Remove more cmake build files --- CMakeLists.txt | 146 ----- Sources/CoreFoundation/CMakeLists.txt | 547 ------------------ Sources/CoreFoundation/build.py | 329 ----------- .../modules/CoreFoundationAddFramework.cmake | 81 --- Sources/FoundationNetworking/CMakeLists.txt | 91 --- Sources/FoundationXML/CMakeLists.txt | 42 -- .../static-module.map} | 0 .../static-module.map} | 0 8 files changed, 1236 deletions(-) delete mode 100644 CMakeLists.txt delete mode 100644 Sources/CoreFoundation/CMakeLists.txt delete mode 100755 Sources/CoreFoundation/build.py delete mode 100644 Sources/CoreFoundation/cmake/modules/CoreFoundationAddFramework.cmake delete mode 100644 Sources/FoundationNetworking/CMakeLists.txt delete mode 100644 Sources/FoundationXML/CMakeLists.txt rename Sources/{CoreFoundation/url-static-module.map => _CFURLSessionInterface/static-module.map} (100%) rename Sources/{CoreFoundation/static-cfxml-module.map => _CFXMLInterface/static-module.map} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 2bb1099078..0000000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,146 +0,0 @@ - -cmake_minimum_required(VERSION 3.15.1) - -list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) - -# NOTE(compnerd) enable CMP0091 - select MSVC runtime based on -# CMAKE_MSVC_RUNTIME_LIBRARY. Requires CMake 3.15 or newer -if(POLICY CMP0091) - cmake_policy(SET CMP0091 NEW) -endif() - -project(Foundation - LANGUAGES C Swift) -enable_testing() - -# NOTE(compnerd) default to /MD or /MDd by default based on the configuration. -# Cache the variable to allow the user to alter the configuration. -set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL" CACHE - STRING "MSVC Runtime Library") - -if(CMAKE_VERSION VERSION_LESS 3.16.0) - if(NOT (CMAKE_SYSTEM_NAME STREQUAL Windows OR CMAKE_SYSTEM_NAME STREQUAL Darwin)) - set(CMAKE_SHARED_LIBRARY_RUNTIME_Swift_FLAG "-Xlinker -rpath -Xlinker ") - set(CMAKE_SHARED_LIBRARY_RUNTIME_Swift_FLAG_SEP ":") - endif() - # Workaround for CMake 3.15 which doesn't link libraries properly on Windows - set(CMAKE_LINK_LIBRARY_FLAG "-l") -endif() - -if(CMAKE_VERSION VERSION_LESS 3.16 AND CMAKE_SYSTEM_NAME STREQUAL Windows) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) -else() - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -endif() -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) -set(CMAKE_Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift) - -option(BUILD_SHARED_LIBS "build shared libraries" ON) -option(HAS_LIBDISPATCH_API "has libdispatch API" ON) -option(BUILD_NETWORKING "build FoundationNetworking module" ON) -option(BUILD_TOOLS "build tools" ON) -option(NS_CURL_ASSUME_FEATURES_MISSING "Assume that optional libcurl features are missing rather than test the library's version, for build debugging" NO) - -if(HAS_LIBDISPATCH_API) - find_package(dispatch CONFIG REQUIRED) -endif() - -find_package(ICU COMPONENTS uc i18n REQUIRED OPTIONAL_COMPONENTS data) - -include(SwiftSupport) -include(GNUInstallDirs) -include(XCTest) - -set(CF_DEPLOYMENT_SWIFT YES CACHE BOOL "Build for Swift" FORCE) - -set(CMAKE_THREAD_PREFER_PTHREAD TRUE) -set(THREADS_PREFER_PTHREAD_FLAG OFF) -find_package(Threads REQUIRED) - -set(SAVED_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) -set(BUILD_SHARED_LIBS NO) -add_subdirectory(CoreFoundation EXCLUDE_FROM_ALL) -set(BUILD_SHARED_LIBS ${SAVED_BUILD_SHARED_LIBS}) - -# BlocksRuntime is already in libdispatch so it is only needed if libdispatch is -# NOT being used -if(NOT HAS_LIBDISPATCH_API) - add_subdirectory(Sources/BlocksRuntime) -endif() - -# Setup include paths for uuid/uuid.h -add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/uuid-headers/uuid/uuid.h - COMMAND - ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/uuid-headers/uuid - COMMAND - ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/Sources/UUID/uuid.h ${CMAKE_BINARY_DIR}/uuid-headers/uuid/uuid.h) -add_custom_target(uuid-headers - DEPENDS ${CMAKE_BINARY_DIR}/uuid-headers/uuid/uuid.h) -add_dependencies(CoreFoundation uuid-headers) -target_include_directories(CoreFoundation PRIVATE - ${CMAKE_BINARY_DIR}/uuid-headers - ${CMAKE_CURRENT_BINARY_DIR}/CoreFoundation.framework/Headers) - -add_subdirectory(Sources) -if(ENABLE_TESTING) - find_package(XCTest CONFIG REQUIRED) - add_subdirectory(Tests) -endif() - -if(NOT BUILD_SHARED_LIBS) - set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS - CoreFoundation CFXMLInterface) - - if(NOT HAS_LIBDISPATCH_API) - set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS - BlocksRuntime) - endif() - - install(TARGETS CoreFoundation CFXMLInterface - DESTINATION lib/swift_static/$) - - if(BUILD_NETWORKING) - set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS - CFURLSessionInterface) - install(TARGETS CFURLSessionInterface - DESTINATION lib/swift_static/$) - endif() -endif() - -set(swift_lib_dir "lib/swift") -if(NOT BUILD_SHARED_LIBS) - set(swift_lib_dir "lib/swift_static") -endif() - -# TODO(compnerd) install as a Framework as that is how swift actually is built -install(DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}/CoreFoundation.framework/Headers/ - DESTINATION - ${swift_lib_dir}/CoreFoundation - FILES_MATCHING PATTERN "*.h") -install(FILES - CoreFoundation/Base.subproj/$<$>:static/>module.map - DESTINATION - ${swift_lib_dir}/CoreFoundation) -install(DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}/CFURLSessionInterface.framework/Headers/ - DESTINATION - ${swift_lib_dir}/CFURLSessionInterface - FILES_MATCHING PATTERN "*.h") -install(FILES - CoreFoundation/URL.subproj/$<$>:static/>module.map - DESTINATION - ${swift_lib_dir}/CFURLSessionInterface) -install(DIRECTORY - ${CMAKE_CURRENT_BINARY_DIR}/CFXMLInterface.framework/Headers/ - DESTINATION - ${swift_lib_dir}/CFXMLInterface - FILES_MATCHING PATTERN "*.h") -install(FILES - CoreFoundation/Parsing.subproj/$<$>:static/>module.map - DESTINATION - ${swift_lib_dir}/CFXMLInterface) - -add_subdirectory(cmake/modules) diff --git a/Sources/CoreFoundation/CMakeLists.txt b/Sources/CoreFoundation/CMakeLists.txt deleted file mode 100644 index beb48d6c86..0000000000 --- a/Sources/CoreFoundation/CMakeLists.txt +++ /dev/null @@ -1,547 +0,0 @@ - -cmake_minimum_required(VERSION 3.12) -list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) - -project(CoreFoundation - VERSION 1338 - LANGUAGES ASM C) - -set(CMAKE_C_STANDARD 99) -set(CMAKE_C_STANDARD_REQUIRED YES) - -# TODO(compnerd): this should be re-enabled once CoreFoundation annotations have -# been reconciled. Hidden visibility should ensure that internal interfaces are -# not accidentally exposed on platforms without exports lists and explicit -# annotations (i.e. ELFish and MachO targets). -if(0) -set(CMAKE_C_VISIBILITY_PRESET hidden) -set(CMAKE_C_VISIBILITY_INLINES_HIDDEN ON) -endif() - -set(CMAKE_POSITION_INDEPENDENT_CODE YES) - -set(CMAKE_THREAD_PREFER_PTHREAD TRUE) -set(THREADS_PREFER_PTHREAD_FLAG OFF) -find_package(Threads REQUIRED) - -if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) - find_package(LibXml2 REQUIRED) - find_package(CURL CONFIG) - if(CURL_FOUND) - set(CURL_VERSION_STRING ${CURL_VERSION}) - else() - find_package(CURL REQUIRED) - endif() -endif() - -include(GNUInstallDirs) -include(CoreFoundationAddFramework) - -option(CF_DEPLOYMENT_SWIFT "Build for swift" NO) - -if("${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC") - add_compile_options($<$:/FI${PROJECT_SOURCE_DIR}/Base.subproj/CoreFoundation_Prefix.h>) -else() - add_compile_options($<$:-include$${PROJECT_SOURCE_DIR}/Base.subproj/CoreFoundation_Prefix.h>) -endif() - -add_compile_options($<$:-fblocks>) - -if("${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC") - add_compile_options($<$:/EHsc>) -else() - if(NOT CMAKE_SYSTEM_NAME STREQUAL OpenBSD) - add_compile_options($<$:-fexceptions>) - endif() -endif() - -if(NOT "${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC") - add_compile_options($<$:-fconstant-cfstrings>) - add_compile_options($<$:-fdollars-in-identifiers>) - add_compile_options($<$:-fno-common>) - add_compile_options($<$:-Werror=implicit-function-declaration>) -endif() - -if(CF_DEPLOYMENT_SWIFT) - add_compile_options($<$:$<$:/clang:>-fcf-runtime-abi=swift>) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL Linux OR CMAKE_SYSTEM_NAME STREQUAL Android) - add_compile_definitions($<$:_GNU_SOURCE>) - - if(CMAKE_SYSTEM_NAME STREQUAL Linux) - include(CheckSymbolExists) - include(CheckIncludeFile) - list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE) - check_include_file("sched.h" HAVE_SCHED_H) - if(HAVE_SCHED_H) - check_symbol_exists(sched_getaffinity "sched.h" HAVE_SCHED_GETAFFINITY) - if(HAVE_SCHED_GETAFFINITY) - add_compile_definitions($<$:HAVE_SCHED_GETAFFINITY>) - endif() - endif() - endif() -elseif(CMAKE_SYSTEM_NAME STREQUAL Windows) - # NOTE(compnerd) we only support building with the dynamic CRT as using the - # static CRT causes problems for users of the library. - add_compile_definitions($<$:_DLL>) - if(BUILD_SHARED_LIBS) - add_compile_definitions($<$:_WINDLL) - endif() -endif() - -add_compile_definitions($<$:U_SHOW_DRAFT_API>) -add_compile_definitions($<$:CF_BUILDING_CF>) - -if(CF_DEPLOYMENT_SWIFT) - add_compile_definitions($<$:DEPLOYMENT_RUNTIME_SWIFT>) -else() - add_compile_definitions($<$:DEPLOYMENT_RUNTIME_C>) -endif() - -# TODO(compnerd) ensure that the compiler supports the warning flag -add_compile_options($<$:-Wno-shorten-64-to-32>) -add_compile_options($<$:-Wno-deprecated-declarations>) -add_compile_options($<$:-Wno-unreachable-code>) -add_compile_options($<$:-Wno-conditional-uninitialized>) -add_compile_options($<$:-Wno-unused-variable>) -add_compile_options($<$:-Wno-int-conversion>) -add_compile_options($<$:-Wno-unused-function>) -add_compile_options($<$:-Wno-microsoft-enum-forward-reference>) - -if(BUILD_SHARED_LIBS) - set(FRAMEWORK_LIBRARY_TYPE SHARED) -else() - set(FRAMEWORK_LIBRARY_TYPE STATIC) -endif() - -add_framework(CoreFoundation - ${FRAMEWORK_LIBRARY_TYPE} - FRAMEWORK_DIRECTORY - CoreFoundation_FRAMEWORK_DIRECTORY - MODULE_MAP - Base.subproj/module.modulemap - PRIVATE_HEADERS - # Base - Base.subproj/CFAsmMacros.h - Base.subproj/CFInternal.h - Base.subproj/CFKnownLocations.h - Base.subproj/CFLogUtilities.h - Base.subproj/CFPriv.h - Base.subproj/CFOverflow.h - Base.subproj/CFRuntime.h - Base.subproj/CFRuntime_Internal.h - Base.subproj/ForFoundationOnly.h - Base.subproj/ForSwiftFoundationOnly.h - # Collections - Collections.subproj/CFBasicHash.h - Collections.subproj/CFStorage.h - Collections.subproj/CFCollections_Internal.h - # Error - Error.subproj/CFError_Private.h - # Locale - Locale.subproj/CFCalendar_Internal.h - Locale.subproj/CFDateComponents.h - Locale.subproj/CFDateFormatter_Private.h - Locale.subproj/CFDateIntervalFormatter.h - Locale.subproj/CFDateInterval.h - Locale.subproj/CFICULogging.h - Locale.subproj/CFListFormatter.h - Locale.subproj/CFLocaleInternal.h - Locale.subproj/CFLocale_Private.h - Locale.subproj/CFRelativeDateTimeFormatter.h - # NumberDate - NumberDate.subproj/CFBigNumber.h - NumberDate.subproj/CFNumber_Private.h - # Parsing - Parsing.subproj/CFPropertyList_Private.h - # PlugIn - PlugIn.subproj/CFBundlePriv.h - PlugIn.subproj/CFBundle_BinaryTypes.h - PlugIn.subproj/CFBundle_Internal.h - PlugIn.subproj/CFPlugIn_Factory.h - # RunLoop - RunLoop.subproj/CFMachPort_Internal.h - RunLoop.subproj/CFMachPort_Lifetime.h - # Stream - Stream.subproj/CFStreamAbstract.h - Stream.subproj/CFStreamInternal.h - Stream.subproj/CFStreamPriv.h - # String - String.subproj/CFAttributedStringPriv.h - String.subproj/CFBurstTrie.h - String.subproj/CFCharacterSetPriv.h - String.subproj/CFRegularExpression.h - String.subproj/CFRunArray.h - String.subproj/CFString_Internal.h - String.subproj/CFString_Private.h - String.subproj/CFStringDefaultEncoding.h - String.subproj/CFStringLocalizedFormattingInternal.h - # StringEncodings - StringEncodings.subproj/CFICUConverters.h - StringEncodings.subproj/CFStringEncodingConverter.h - StringEncodings.subproj/CFStringEncodingConverterExt.h - StringEncodings.subproj/CFStringEncodingConverterPriv.h - StringEncodings.subproj/CFStringEncodingDatabase.h - StringEncodings.subproj/CFUniChar.h - StringEncodings.subproj/CFUniCharPriv.h - StringEncodings.subproj/CFUnicodeDecomposition.h - StringEncodings.subproj/CFUnicodePrecomposition.h - # URL - URL.subproj/CFURL.inc.h - URL.subproj/CFURLPriv.h - URL.subproj/CFURLSessionInterface.h - PUBLIC_HEADERS - # FIXME: PrivateHeaders referenced by public headers - Base.subproj/CFKnownLocations.h - Base.subproj/CFLocking.h - Base.subproj/CFLogUtilities.h - Base.subproj/CFPriv.h - Base.subproj/CFRuntime.h - Base.subproj/ForFoundationOnly.h - Base.subproj/ForSwiftFoundationOnly.h - Locale.subproj/CFCalendar_Internal.h - Locale.subproj/CFDateComponents.h - Locale.subproj/CFDateInterval.h - Locale.subproj/CFLocaleInternal.h - PlugIn.subproj/CFBundlePriv.h - Stream.subproj/CFStreamPriv.h - String.subproj/CFCharacterSetPriv.h - String.subproj/CFRegularExpression.h - String.subproj/CFRunArray.h - StringEncodings.subproj/CFStringEncodingConverter.h - StringEncodings.subproj/CFStringEncodingConverterExt.h - URL.subproj/CFURLPriv.h - URL.subproj/CFURLSessionInterface.h - Locale.subproj/CFDateIntervalFormatter.h - - # AppServices - AppServices.subproj/CFNotificationCenter.h - AppServices.subproj/CFUserNotification.h - # Base - Base.subproj/CFAvailability.h - Base.subproj/CFBase.h - Base.subproj/CFByteOrder.h - Base.subproj/CFUUID.h - Base.subproj/CFUtilities.h - Base.subproj/SwiftRuntime/CoreFoundation.h - Base.subproj/SwiftRuntime/TargetConditionals.h - # Collections - Collections.subproj/CFArray.h - Collections.subproj/CFBag.h - Collections.subproj/CFBinaryHeap.h - Collections.subproj/CFBitVector.h - Collections.subproj/CFData.h - Collections.subproj/CFDictionary.h - Collections.subproj/CFSet.h - Collections.subproj/CFTree.h - # Error - Error.subproj/CFError.h - # Locale - Locale.subproj/CFCalendar.h - Locale.subproj/CFDateFormatter.h - Locale.subproj/CFLocale.h - Locale.subproj/CFNumberFormatter.h - # NumberDate - NumberDate.subproj/CFDate.h - NumberDate.subproj/CFNumber.h - NumberDate.subproj/CFTimeZone.h - # Parsing - Parsing.subproj/CFPropertyList.h - # PlugIn - PlugIn.subproj/CFBundle.h - PlugIn.subproj/CFPlugIn.h - PlugIn.subproj/CFPlugInCOM.h - # Preferences - Preferences.subproj/CFPreferences.h - # RunLoop - RunLoop.subproj/CFMachPort.h - RunLoop.subproj/CFMessagePort.h - RunLoop.subproj/CFRunLoop.h - RunLoop.subproj/CFSocket.h - # Stream - Stream.subproj/CFStream.h - # String - String.subproj/CFAttributedString.h - String.subproj/CFCharacterSet.h - String.subproj/CFString.h - String.subproj/CFStringEncodingExt.h - # URL - URL.subproj/CFURL.h - URL.subproj/CFURLAccess.h - URL.subproj/CFURLComponents.h - SOURCES - # Base - Base.subproj/CFBase.c - Base.subproj/CFFileUtilities.c - Base.subproj/CFKnownLocations.c - Base.subproj/CFPlatform.c - Base.subproj/CFRuntime.c - Base.subproj/CFSortFunctions.c - Base.subproj/CFSystemDirectories.c - Base.subproj/CFUtilities.c - Base.subproj/CFUUID.c - Base.subproj/CFWindowsUtilities.c - # Collections - Collections.subproj/CFArray.c - Collections.subproj/CFBag.c - Collections.subproj/CFBasicHash.c - Collections.subproj/CFBinaryHeap.c - Collections.subproj/CFBitVector.c - Collections.subproj/CFData.c - Collections.subproj/CFDictionary.c - Collections.subproj/CFSet.c - Collections.subproj/CFStorage.c - Collections.subproj/CFTree.c - # Error - Error.subproj/CFError.c - # Locale - Locale.subproj/CFCalendar.c - Locale.subproj/CFCalendar_Enumerate.c - Locale.subproj/CFDateComponents.c - Locale.subproj/CFDateFormatter.c - Locale.subproj/CFDateIntervalFormatter.c - Locale.subproj/CFDateInterval.c - Locale.subproj/CFListFormatter.c - Locale.subproj/CFLocale.c - Locale.subproj/CFLocaleIdentifier.c - Locale.subproj/CFLocaleKeys.c - Locale.subproj/CFNumberFormatter.c - Locale.subproj/CFRelativeDateTimeFormatter.c - # NumberData - NumberDate.subproj/CFBigNumber.c - NumberDate.subproj/CFDate.c - NumberDate.subproj/CFNumber.c - NumberDate.subproj/CFTimeZone.c - # Parsing - Parsing.subproj/CFBinaryPList.c - Parsing.subproj/CFOldStylePList.c - Parsing.subproj/CFPropertyList.c - # PlugIn - PlugIn.subproj/CFBundle_Binary.c - PlugIn.subproj/CFBundle.c - PlugIn.subproj/CFBundle_DebugStrings.c - PlugIn.subproj/CFBundle_Executable.c - PlugIn.subproj/CFBundle_Grok.c - PlugIn.subproj/CFBundle_InfoPlist.c - PlugIn.subproj/CFBundle_Locale.c - PlugIn.subproj/CFBundle_Main.c - PlugIn.subproj/CFBundle_ResourceFork.c - PlugIn.subproj/CFBundle_Resources.c - PlugIn.subproj/CFBundle_SplitFileName.c - PlugIn.subproj/CFBundle_Strings.c - PlugIn.subproj/CFBundle_Tables.c - PlugIn.subproj/CFPlugIn.c - # Preferences - Preferences.subproj/CFApplicationPreferences.c - Preferences.subproj/CFPreferences.c - Preferences.subproj/CFXMLPreferencesDomain.c - # RunLoop - # TODO(compnerd) make this empty on non-Mach targets - # RunLoop.subproj/CFMachPort.c - # RunLoop.subproj/CFMachPort_Lifetime.c - # RunLoop.subproj/CFMessagePort.c - RunLoop.subproj/CFRunLoop.c - RunLoop.subproj/CFSocket.c - # Stream - Stream.subproj/CFConcreteStreams.c - Stream.subproj/CFSocketStream.c - Stream.subproj/CFStream.c - # String - String.subproj/CFAttributedString.c - String.subproj/CFBurstTrie.c - String.subproj/CFCharacterSet.c - String.subproj/CFCharacterSetData.S - String.subproj/CFRegularExpression.c - String.subproj/CFRunArray.c - String.subproj/CFString.c - String.subproj/CFStringEncodings.c - String.subproj/CFStringScanner.c - String.subproj/CFStringTransform.c - String.subproj/CFStringUtilities.c - String.subproj/CFUniCharPropertyDatabase.S - String.subproj/CFUnicodeData.S - # StringEncodings - StringEncodings.subproj/CFBuiltinConverters.c - StringEncodings.subproj/CFICUConverters.c - StringEncodings.subproj/CFPlatformConverters.c - StringEncodings.subproj/CFStringEncodingConverter.c - StringEncodings.subproj/CFStringEncodingDatabase.c - StringEncodings.subproj/CFUniChar.c - StringEncodings.subproj/CFUnicodeDecomposition.c - StringEncodings.subproj/CFUnicodePrecomposition.c - # URL - URL.subproj/CFURLAccess.c - URL.subproj/CFURL.c - URL.subproj/CFURLComponents.c - URL.subproj/CFURLComponents_URIParser.c) -target_compile_definitions(CoreFoundation - PRIVATE - $<$:CF_CHARACTERSET_BITMAP="CharacterSets/CFCharacterSetBitmaps.bitmap"> - $<$:CF_CHARACTERSET_UNICHAR_DB="CharacterSets/CFUniCharPropertyDatabase.data"> - $<$:CF_CHARACTERSET_UNICODE_DATA_B="CharacterSets/CFUnicodeData-B.mapping"> - $<$:CF_CHARACTERSET_UNICODE_DATA_L="CharacterSets/CFUnicodeData-L.mapping">) -target_include_directories(CoreFoundation - PRIVATE - ${PROJECT_SOURCE_DIR}) -target_link_libraries(CoreFoundation PRIVATE - Threads::Threads - ${CMAKE_DL_LIBS} - BlocksRuntime - dispatch) -if(CMAKE_SYSTEM_NAME STREQUAL Android) - target_link_libraries(CoreFoundation PRIVATE - log) -endif() -if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) - target_link_libraries(CoreFoundation PRIVATE - ICU::uc - ICU::i18n) - if(ICU_DATA_FOUND) - target_link_libraries(CoreFoundation PRIVATE - ICU::data) - endif() -endif() - -if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) - if((NS_CURL_ASSUME_FEATURES_MISSING) OR (CURL_VERSION_STRING VERSION_LESS "7.32.0")) - add_compile_definitions($<$:NS_CURL_MISSING_XFERINFOFUNCTION>) - endif() - - if((NS_CURL_ASSUME_FEATURES_MISSING) OR (CURL_VERSION_STRING VERSION_LESS "7.30.0")) - add_compile_definitions($<$:NS_CURL_MISSING_MAX_HOST_CONNECTIONS>) - endif() -endif() - -add_framework(CFURLSessionInterface - ${FRAMEWORK_LIBRARY_TYPE} - FRAMEWORK_DIRECTORY - CFURLSessionInterface_FRAMEWORK_DIRECTORY - MODULE_MAP - URL.subproj/module.modulemap - PRIVATE_HEADERS - URL.subproj/CFURLSessionInterface.h - PUBLIC_HEADERS - URL.subproj/CFURLSessionInterface.h - SOURCES - URL.subproj/CFURLSessionInterface.c) -add_dependencies(CFURLSessionInterface CoreFoundation) -if(CMAKE_SYSTEM_NAME STREQUAL Windows) - target_compile_definitions(CFURLSessionInterface - PRIVATE - CURL_STATICLIB) -endif() -if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) - target_link_libraries(CFURLSessionInterface PRIVATE - CURL::libcurl) -endif() - -add_framework(CFXMLInterface - ${FRAMEWORK_LIBRARY_TYPE} - FRAMEWORK_DIRECTORY - CFXMLInterface_FRAMEWORK_DIRECTORY - MODULE_MAP - Parsing.subproj/module.modulemap - PRIVATE_HEADERS - Parsing.subproj/CFXMLInterface.h - PUBLIC_HEADERS - Parsing.subproj/CFXMLInterface.h - SOURCES - Parsing.subproj/CFXMLInterface.c) -add_dependencies(CFXMLInterface CoreFoundation) -if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) - target_link_libraries(CFXMLInterface PRIVATE - LibXml2::LibXml2) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL Windows) - add_library(CoreFoundationResources OBJECT - CoreFoundation.rc) - if(BUILD_SHARED_LIBS) - target_link_libraries(CoreFoundation PRIVATE CoreFoundationResources) - else() - target_link_libraries(CoreFoundation INTERFACE CoreFoundationResources) - endif() - - # NOTE(compnerd) the WindowsOlsonMapping.plist and OlsonWindowsMapping.plist - # are embedded Windows resources that we use to map the Windows timezone to - # the Olson name. Ensure that we rebuild on regeneration of the files. - add_custom_target(CoreFoundationWindowsTimeZonesPLists DEPENDS - WindowsOlsonMapping.plist - OlsonWindowsMapping.plist) - add_dependencies(CoreFoundation CoreFoundationWindowsTimeZonesPLists) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL Windows) - target_link_libraries(CoreFoundation - PRIVATE - AdvAPI32 - Secur32 - User32 - mincore - pathcch) - target_link_libraries(CFURLSessionInterface - PRIVATE - AdvAPI32 - Secur32 - User32 - mincore) - target_link_libraries(CFXMLInterface - PRIVATE - AdvAPI32 - Secur32 - User32 - mincore) -endif() -if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows AND NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) - target_link_libraries(CoreFoundation - PRIVATE - m) - target_link_libraries(CFURLSessionInterface - PRIVATE - m) - target_link_libraries(CFXMLInterface - PRIVATE - m) -endif() -target_link_libraries(CoreFoundation - PRIVATE - dispatch) -target_link_libraries(CFURLSessionInterface - PRIVATE - dispatch) -target_link_libraries(CFXMLInterface - PRIVATE - dispatch) -if(CMAKE_SYSTEM_NAME STREQUAL Darwin) - target_link_libraries(CoreFoundation - PRIVATE - icucore) - target_link_libraries(CFURLSessionInterface - PRIVATE - icucore) - target_link_libraries(CFXMLInterface - PRIVATE - icucore) - set_target_properties(CoreFoundation - PROPERTIES LINK_FLAGS - -Xlinker;-alias_list;-Xlinker;Base.subproj/DarwinSymbolAliases;-twolevel_namespace;-sectcreate;__UNICODE;__csbitmaps;CharacterSets/CFCharacterSetBitmaps.bitmap;-sectcreate;__UNICODE;__properties;CharacterSets/CFUniCharPropertyDatabase.data;-sectcreate;__UNICODE;__data;CharacterSets/CFUnicodeData-L.mapping;-segprot;__UNICODE;r;r) -endif() - -install(TARGETS - CoreFoundation - CFURLSessionInterface - CFXMLInterface - DESTINATION - "${CMAKE_INSTALL_FULL_LIBDIR}") - -# Needed to avoid double slash "//" when CMAKE_INSTALL_PREFIX set to "/" and DESTDIR used to relocate whole installation. -# Double slash raise CMake error "file called with network path DESTINATION //System/Library/Frameworks". -string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") - -install(DIRECTORY - ${CoreFoundation_FRAMEWORK_DIRECTORY} - DESTINATION - ${CMAKE_INSTALL_PREFIX}/System/Library/Frameworks - USE_SOURCE_PERMISSIONS - PATTERN PrivateHeaders EXCLUDE) diff --git a/Sources/CoreFoundation/build.py b/Sources/CoreFoundation/build.py deleted file mode 100755 index 804a1ececd..0000000000 --- a/Sources/CoreFoundation/build.py +++ /dev/null @@ -1,329 +0,0 @@ -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -# - -script = Script() - -cf = DynamicLibrary("CoreFoundation", uses_swift_runtime_object=False) - -cf.GCC_PREFIX_HEADER = 'Base.subproj/CoreFoundation_Prefix.h' - -if Configuration.current.target.sdk == OSType.Linux: - cf.CFLAGS = '-D_GNU_SOURCE -DCF_CHARACTERSET_DATA_DIR="CharacterSets" ' - cf.LDFLAGS = '-Wl,-Bsymbolic ' - Configuration.current.requires_pkg_config = True -elif Configuration.current.target.sdk == OSType.FreeBSD: - cf.CFLAGS = '-I/usr/local/include -I/usr/local/include/libxml2 -I/usr/local/include/curl ' - cf.LDFLAGS = '' -elif Configuration.current.target.sdk == OSType.MacOSX: - cf.LDFLAGS = '-licucore -twolevel_namespace -Wl,-alias_list,Base.subproj/DarwinSymbolAliases -sectcreate __UNICODE __csbitmaps CharacterSets/CFCharacterSetBitmaps.bitmap -sectcreate __UNICODE __properties CharacterSets/CFUniCharPropertyDatabase.data -sectcreate __UNICODE __data CharacterSets/CFUnicodeData-L.mapping -segprot __UNICODE r r ' -elif Configuration.current.target.sdk == OSType.Win32 and Configuration.current.target.environ == EnvironmentType.Cygnus: - cf.CFLAGS = '-D_GNU_SOURCE -mcmodel=large ' - cf.LDFLAGS = '${SWIFT_USE_LINKER} -lswiftGlibc `icu-config --ldflags` -Wl,--allow-multiple-definition ' - -cf.ASFLAGS = " ".join([ - '-DCF_CHARACTERSET_BITMAP=\\"CharacterSets/CFCharacterSetBitmaps.bitmap\\"', - '-DCF_CHARACTERSET_UNICHAR_DB=\\"CharacterSets/CFUniCharPropertyDatabase.data\\"', - '-DCF_CHARACTERSET_UNICODE_DATA_B=\\"CharacterSets/CFUnicodeData-B.mapping\\"', - '-DCF_CHARACTERSET_UNICODE_DATA_L=\\"CharacterSets/CFUnicodeData-L.mapping\\"', -]) - -cf.CFLAGS += " ".join([ - '-I${DSTROOT}${PREFIX}/include', - '-I${DSTROOT}${PREFIX}/local/include', -]) + " " -cf.LDFLAGS += " ".join([ - '-L${DSTROOT}${PREFIX}/lib', - '-L${DSTROOT}${PREFIX}/local/lib', -]) + " " - -# For now, we do not distinguish between public and private headers (they are all private to Foundation) -# These are really part of CF, which should ultimately be a separate target -cf.ROOT_HEADERS_FOLDER_PATH = "${PREFIX}/include" -cf.PUBLIC_HEADERS_FOLDER_PATH = "${PREFIX}/include/CoreFoundation" -cf.PRIVATE_HEADERS_FOLDER_PATH = "${PREFIX}/include/CoreFoundation" -cf.PROJECT_HEADERS_FOLDER_PATH = "${PREFIX}/include/CoreFoundation" - -cf.PUBLIC_MODULE_FOLDER_PATH = "${PREFIX}/include/CoreFoundation" - -cf.CFLAGS += " ".join([ - '-DU_SHOW_DRAFT_API=1', - '-DCF_BUILDING_CF=1', - '-DDEPLOYMENT_RUNTIME_C=1', - '-fconstant-cfstrings', - '-fexceptions', - '-Wno-shorten-64-to-32', - '-Wno-deprecated-declarations', - '-Wno-unreachable-code', - '-Wno-conditional-uninitialized', - '-Wno-unused-variable', - '-Wno-int-conversion', - '-Wno-unused-function', - '-I./', -]) - -if Configuration.current.requires_pkg_config: - pkg_config_dependencies = [ - 'libcurl', - 'libxml-2.0', - ] - for package_name in pkg_config_dependencies: - try: - package = PkgConfig(package_name) - except PkgConfig.Error as e: - sys.exit("pkg-config error for package {}: {}".format(package_name, e)) - cf.CFLAGS += ' {} '.format(' '.join(package.cflags)) - cf.LDFLAGS += ' {} '.format(' '.join(package.ldflags)) -else: - cf.CFLAGS += ''.join([ - '-I${SYSROOT}/usr/include/curl ', - '-I${SYSROOT}/usr/include/libxml2 ', - ]) - cf.LDFLAGS += ''.join([ - '-lcurl ', - '-lxml2 ', - ]) - -triple = Configuration.current.target.triple -if triple == "armv7-none-linux-androideabi": - cf.LDFLAGS += '-llog ' -else: - cf.LDFLAGS += '-lpthread ' - -cf.LDFLAGS += '-ldl -lm ' - -# Configure use of Dispatch in CoreFoundation and Foundation if libdispatch is being built -cf.CFLAGS += '-DDEPLOYMENT_ENABLE_LIBDISPATCH=1 ' -cf.LDFLAGS += '-ldispatch -rpath \$$ORIGIN ' - -if "XCTEST_BUILD_DIR" in Configuration.current.variables: - cf.LDFLAGS += '-L${XCTEST_BUILD_DIR}' - -headers = CopyHeaders( -module = 'Base.subproj/module.modulemap', -public = [ - 'Stream.subproj/CFStream.h', - 'String.subproj/CFStringEncodingExt.h', - 'Base.subproj/CoreFoundation.h', - 'Base.subproj/SwiftRuntime/TargetConditionals.h', - 'RunLoop.subproj/CFMessagePort.h', - 'Collections.subproj/CFBinaryHeap.h', - 'PlugIn.subproj/CFBundle.h', - 'Locale.subproj/CFCalendar.h', - 'Collections.subproj/CFBitVector.h', - 'Base.subproj/CFAvailability.h', - 'Collections.subproj/CFTree.h', - 'NumberDate.subproj/CFTimeZone.h', - 'Error.subproj/CFError.h', - 'Collections.subproj/CFBag.h', - 'PlugIn.subproj/CFPlugIn.h', - 'Parsing.subproj/CFXMLParser.h', - 'String.subproj/CFString.h', - 'Collections.subproj/CFSet.h', - 'Base.subproj/CFUUID.h', - 'NumberDate.subproj/CFDate.h', - 'Collections.subproj/CFDictionary.h', - 'Base.subproj/CFByteOrder.h', - 'AppServices.subproj/CFUserNotification.h', - 'Base.subproj/CFBase.h', - 'Preferences.subproj/CFPreferences.h', - 'Locale.subproj/CFLocale.h', - 'RunLoop.subproj/CFSocket.h', - 'Parsing.subproj/CFPropertyList.h', - 'Collections.subproj/CFArray.h', - 'RunLoop.subproj/CFRunLoop.h', - 'URL.subproj/CFURLAccess.h', - 'URL.subproj/CFURLSessionInterface.h', - 'Locale.subproj/CFDateFormatter.h', - 'RunLoop.subproj/CFMachPort.h', - 'PlugIn.subproj/CFPlugInCOM.h', - 'Base.subproj/CFUtilities.h', - 'Parsing.subproj/CFXMLNode.h', - 'URL.subproj/CFURLComponents.h', - 'URL.subproj/CFURL.h', - 'Locale.subproj/CFNumberFormatter.h', - 'String.subproj/CFCharacterSet.h', - 'NumberDate.subproj/CFNumber.h', - 'Collections.subproj/CFData.h', - 'String.subproj/CFAttributedString.h', - 'Base.subproj/CoreFoundation_Prefix.h', - 'AppServices.subproj/CFNotificationCenter.h' -], -private = [ - 'Base.subproj/ForSwiftFoundationOnly.h', - 'Base.subproj/ForFoundationOnly.h', - 'Base.subproj/CFAsmMacros.h', - 'String.subproj/CFBurstTrie.h', - 'Error.subproj/CFError_Private.h', - 'URL.subproj/CFURLPriv.h', - 'Base.subproj/CFLogUtilities.h', - 'PlugIn.subproj/CFBundlePriv.h', - 'StringEncodings.subproj/CFStringEncodingConverter.h', - 'Stream.subproj/CFStreamAbstract.h', - 'Base.subproj/CFInternal.h', - 'Parsing.subproj/CFXMLInputStream.h', - 'Parsing.subproj/CFXMLInterface.h', - 'PlugIn.subproj/CFPlugIn_Factory.h', - 'String.subproj/CFStringLocalizedFormattingInternal.h', - 'PlugIn.subproj/CFBundle_Internal.h', - 'StringEncodings.subproj/CFStringEncodingConverterPriv.h', - 'Collections.subproj/CFBasicHash.h', - 'StringEncodings.subproj/CFStringEncodingDatabase.h', - 'StringEncodings.subproj/CFUnicodeDecomposition.h', - 'Stream.subproj/CFStreamInternal.h', - 'PlugIn.subproj/CFBundle_BinaryTypes.h', - 'Locale.subproj/CFICULogging.h', - 'Locale.subproj/CFLocaleInternal.h', - 'StringEncodings.subproj/CFUnicodePrecomposition.h', - 'Base.subproj/CFPriv.h', - 'StringEncodings.subproj/CFUniCharPriv.h', - 'URL.subproj/CFURL.inc.h', - 'NumberDate.subproj/CFBigNumber.h', - 'StringEncodings.subproj/CFUniChar.h', - 'StringEncodings.subproj/CFStringEncodingConverterExt.h', - 'Collections.subproj/CFStorage.h', - 'Base.subproj/CFRuntime.h', - 'String.subproj/CFStringDefaultEncoding.h', - 'String.subproj/CFCharacterSetPriv.h', - 'Stream.subproj/CFStreamPriv.h', - 'StringEncodings.subproj/CFICUConverters.h', - 'String.subproj/CFRegularExpression.h', - 'String.subproj/CFRunArray.h', - 'Locale.subproj/CFDateFormatter_Private.h', - 'Locale.subproj/CFLocale_Private.h', - 'Parsing.subproj/CFPropertyList_Private.h', - 'Base.subproj/CFKnownLocations.h', -], -project = [ -]) - -cf.add_phase(headers) - -sources_list = [ - '../uuid/uuid.c', - # 'AppServices.subproj/CFUserNotification.c', - 'Base.subproj/CFBase.c', - 'Base.subproj/CFFileUtilities.c', - 'Base.subproj/CFPlatform.c', - 'Base.subproj/CFRuntime.c', - 'Base.subproj/CFSortFunctions.c', - 'Base.subproj/CFSystemDirectories.c', - 'Base.subproj/CFUtilities.c', - 'Base.subproj/CFUUID.c', - 'Collections.subproj/CFArray.c', - 'Collections.subproj/CFBag.c', - 'Collections.subproj/CFBasicHash.c', - 'Collections.subproj/CFBinaryHeap.c', - 'Collections.subproj/CFBitVector.c', - 'Collections.subproj/CFData.c', - 'Collections.subproj/CFDictionary.c', - 'Collections.subproj/CFSet.c', - 'Collections.subproj/CFStorage.c', - 'Collections.subproj/CFTree.c', - 'Error.subproj/CFError.c', - 'Locale.subproj/CFCalendar.c', - 'Locale.subproj/CFDateFormatter.c', - 'Locale.subproj/CFLocale.c', - 'Locale.subproj/CFLocaleIdentifier.c', - 'Locale.subproj/CFLocaleKeys.c', - 'Locale.subproj/CFNumberFormatter.c', - 'NumberDate.subproj/CFBigNumber.c', - 'NumberDate.subproj/CFDate.c', - 'NumberDate.subproj/CFNumber.c', - 'NumberDate.subproj/CFTimeZone.c', - 'Parsing.subproj/CFBinaryPList.c', - 'Parsing.subproj/CFOldStylePList.c', - 'Parsing.subproj/CFPropertyList.c', - 'Parsing.subproj/CFXMLInputStream.c', - 'Parsing.subproj/CFXMLNode.c', - 'Parsing.subproj/CFXMLParser.c', - 'Parsing.subproj/CFXMLTree.c', - 'Parsing.subproj/CFXMLInterface.c', - 'PlugIn.subproj/CFBundle.c', - 'PlugIn.subproj/CFBundle_Binary.c', - 'PlugIn.subproj/CFBundle_Grok.c', - 'PlugIn.subproj/CFBundle_InfoPlist.c', - 'PlugIn.subproj/CFBundle_Locale.c', - 'PlugIn.subproj/CFBundle_Resources.c', - 'PlugIn.subproj/CFBundle_Strings.c', - 'PlugIn.subproj/CFBundle_Main.c', - 'PlugIn.subproj/CFBundle_ResourceFork.c', - 'PlugIn.subproj/CFBundle_Executable.c', - 'PlugIn.subproj/CFBundle_DebugStrings.c', - 'PlugIn.subproj/CFPlugIn.c', - 'PlugIn.subproj/CFPlugIn_Factory.c', - 'PlugIn.subproj/CFPlugIn_Instance.c', - 'PlugIn.subproj/CFPlugIn_PlugIn.c', - 'Preferences.subproj/CFApplicationPreferences.c', - 'Preferences.subproj/CFPreferences.c', - 'Preferences.subproj/CFXMLPreferencesDomain.c', - 'RunLoop.subproj/CFMachPort.c', - 'RunLoop.subproj/CFMessagePort.c', - 'RunLoop.subproj/CFRunLoop.c', - 'RunLoop.subproj/CFSocket.c', - 'Stream.subproj/CFConcreteStreams.c', - 'Stream.subproj/CFSocketStream.c', - 'Stream.subproj/CFStream.c', - 'String.subproj/CFBurstTrie.c', - 'String.subproj/CFCharacterSet.c', - 'String.subproj/CFString.c', - 'String.subproj/CFStringEncodings.c', - 'String.subproj/CFStringScanner.c', - 'String.subproj/CFStringUtilities.c', - 'String.subproj/CFStringTransform.c', - 'StringEncodings.subproj/CFBuiltinConverters.c', - 'StringEncodings.subproj/CFICUConverters.c', - 'StringEncodings.subproj/CFPlatformConverters.c', - 'StringEncodings.subproj/CFStringEncodingConverter.c', - 'StringEncodings.subproj/CFStringEncodingDatabase.c', - 'StringEncodings.subproj/CFUniChar.c', - 'StringEncodings.subproj/CFUnicodeDecomposition.c', - 'StringEncodings.subproj/CFUnicodePrecomposition.c', - 'URL.subproj/CFURL.c', - 'URL.subproj/CFURLAccess.c', - 'URL.subproj/CFURLComponents.c', - 'URL.subproj/CFURLComponents_URIParser.c', - 'String.subproj/CFCharacterSetData.S', - 'String.subproj/CFUnicodeData.S', - 'String.subproj/CFUniCharPropertyDatabase.S', - 'String.subproj/CFRegularExpression.c', - 'String.subproj/CFAttributedString.c', - 'String.subproj/CFRunArray.c', - 'Base.subproj/CFKnownLocations.c', -] - -sources = CompileSources(sources_list) -sources.add_dependency(headers) -cf.add_phase(sources) - -script.add_product(cf) - -LIBS_DIRS = "" -if "XCTEST_BUILD_DIR" in Configuration.current.variables: - LIBS_DIRS += "${XCTEST_BUILD_DIR}:" -if "PREFIX" in Configuration.current.variables: - LIBS_DIRS += Configuration.current.variables["PREFIX"]+"/lib:" - -Configuration.current.variables["LIBS_DIRS"] = LIBS_DIRS - -extra_script = """ -rule InstallCoreFoundation - command = mkdir -p "${DSTROOT}/${PREFIX}/lib"; $ - mkdir -p "${DSTROOT}/${PREFIX}/include"; $ - rsync -a "${BUILD_DIR}/CoreFoundation/${PREFIX}/include/CoreFoundation" "${DSTROOT}/${PREFIX}/include/"; $ - cp "${BUILD_DIR}/CoreFoundation/${DYLIB_PREFIX}CoreFoundation${DYLIB_SUFFIX}" "${DSTROOT}/${PREFIX}/lib" - -build ${BUILD_DIR}/.install: InstallCoreFoundation ${BUILD_DIR}/CoreFoundation/${DYLIB_PREFIX}CoreFoundation${DYLIB_SUFFIX} - -build install: phony | ${BUILD_DIR}/.install - -""" - -script.add_text(extra_script) - -script.generate() diff --git a/Sources/CoreFoundation/cmake/modules/CoreFoundationAddFramework.cmake b/Sources/CoreFoundation/cmake/modules/CoreFoundationAddFramework.cmake deleted file mode 100644 index 4b7ccb93e2..0000000000 --- a/Sources/CoreFoundation/cmake/modules/CoreFoundationAddFramework.cmake +++ /dev/null @@ -1,81 +0,0 @@ - -include(CMakeParseArguments) - -function(add_framework NAME) - set(options STATIC SHARED) - set(single_value_args MODULE_MAP FRAMEWORK_DIRECTORY) - set(multiple_value_args PRIVATE_HEADERS PUBLIC_HEADERS SOURCES) - cmake_parse_arguments(AF "${options}" "${single_value_args}" "${multiple_value_args}" ${ARGN}) - - set(AF_TYPE) - if(AF_STATIC) - set(AF_TYPE STATIC) - elseif(AF_SHARED) - set(AF_TYPE SHARED) - endif() - - if(AF_MODULE_MAP) - file(COPY - ${AF_MODULE_MAP} - DESTINATION - ${CMAKE_BINARY_DIR}/${NAME}.framework/Modules - NO_SOURCE_PERMISSIONS) - endif() - if(AF_PUBLIC_HEADERS) - foreach(HEADER IN LISTS AF_PUBLIC_HEADERS) - get_filename_component(HEADER_FILENAME ${HEADER} NAME) - set(DEST ${CMAKE_BINARY_DIR}/${NAME}.framework/Headers/${HEADER_FILENAME}) - add_custom_command(OUTPUT ${DEST} - DEPENDS ${HEADER} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ${CMAKE_COMMAND} -E copy ${HEADER} ${DEST}) - list(APPEND PUBLIC_HEADER_PATHS ${DEST}) - endforeach() - endif() - if(AF_PRIVATE_HEADERS) - foreach(HEADER IN LISTS AF_PRIVATE_HEADERS) - get_filename_component(HEADER_FILENAME ${HEADER} NAME) - set(DEST ${CMAKE_BINARY_DIR}/${NAME}.framework/PrivateHeaders/${HEADER_FILENAME}) - add_custom_command(OUTPUT ${DEST} - DEPENDS ${HEADER} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ${CMAKE_COMMAND} -E copy ${HEADER} ${DEST}) - list(APPEND PRIVATE_HEADER_PATHS ${DEST}) - endforeach() - endif() - add_custom_target(${NAME}_POPULATE_HEADERS - DEPENDS - ${AF_MODULE_MAP} - ${PUBLIC_HEADER_PATHS} - ${PRIVATE_HEADER_PATHS} - SOURCES - ${AF_MODULE_MAP} - ${AF_PUBLIC_HEADERS} - ${AF_PRIVATE_HEADERS}) - - add_library(${NAME} - ${AF_TYPE} - ${AF_SOURCES}) - set_target_properties(${NAME} - PROPERTIES - LIBRARY_OUTPUT_DIRECTORY - ${CMAKE_BINARY_DIR}/${NAME}.framework) - if("${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC") - target_compile_options(${NAME} - PRIVATE - -Xclang;-F${CMAKE_BINARY_DIR}) - else() - target_compile_options(${NAME} - PRIVATE - -F;${CMAKE_BINARY_DIR}) - endif() - target_compile_options(${NAME} - PRIVATE - $<$,$>:-I;${CMAKE_BINARY_DIR}/${NAME}.framework/PrivateHeaders>) - add_dependencies(${NAME} ${NAME}_POPULATE_HEADERS) - - if(AF_FRAMEWORK_DIRECTORY) - set(${AF_FRAMEWORK_DIRECTORY} ${CMAKE_BINARY_DIR}/${NAME}.framework PARENT_SCOPE) - endif() -endfunction() - diff --git a/Sources/FoundationNetworking/CMakeLists.txt b/Sources/FoundationNetworking/CMakeLists.txt deleted file mode 100644 index 1a8f516e98..0000000000 --- a/Sources/FoundationNetworking/CMakeLists.txt +++ /dev/null @@ -1,91 +0,0 @@ -if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) - find_package(CURL CONFIG) - if(CURL_FOUND) - set(CURL_VERSION_STRING ${CURL_VERSION}) - else() - find_package(CURL REQUIRED) - endif() -endif() - -if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) - if((NS_CURL_ASSUME_FEATURES_MISSING) OR (CURL_VERSION_STRING VERSION_LESS "7.32.0")) - add_compile_definitions(NS_CURL_MISSING_XFERINFOFUNCTION) - endif() - - if((NS_CURL_ASSUME_FEATURES_MISSING) OR (CURL_VERSION_STRING VERSION_LESS "7.30.0")) - add_compile_definitions(NS_CURL_MISSING_MAX_HOST_CONNECTIONS) - endif() -endif() - -add_library(FoundationNetworking - ../Foundation/Boxing.swift - DataURLProtocol.swift - HTTPCookie.swift - HTTPCookieStorage.swift - NSURLRequest.swift - URLAuthenticationChallenge.swift - URLCache.swift - URLCredential.swift - URLCredentialStorage.swift - URLProtectionSpace.swift - URLProtocol.swift - URLRequest.swift - URLResponse.swift - URLSession/BodySource.swift - URLSession/Configuration.swift - URLSession/FTP/FTPURLProtocol.swift - URLSession/HTTP/HTTPMessage.swift - URLSession/HTTP/HTTPURLProtocol.swift - URLSession/WebSocket/WebSocketURLProtocol.swift - URLSession/Message.swift - URLSession/NativeProtocol.swift - URLSession/NetworkingSpecific.swift - URLSession/TaskRegistry.swift - URLSession/TransferState.swift - URLSession/URLSession.swift - URLSession/URLSessionConfiguration.swift - URLSession/URLSessionDelegate.swift - URLSession/URLSessionTask.swift - URLSession/URLSessionTaskMetrics.swift - URLSession/libcurl/EasyHandle.swift - URLSession/libcurl/MultiHandle.swift - URLSession/libcurl/libcurlHelpers.swift) -target_compile_definitions(FoundationNetworking PRIVATE - DEPLOYMENT_RUNTIME_SWIFT - NS_BUILDING_FOUNDATION_NETWORKING) -target_compile_options(FoundationNetworking PUBLIC - -autolink-force-load - # SR-12254: workaround for the swift compiler not properly tracking the - # forced load symbol when validating the TBD - -Xfrontend -validate-tbd-against-ir=none - $<$:-enable-testing> - "SHELL:-Xfrontend -disable-autolink-framework -Xfrontend CFURLSessionInterface" - "SHELL:-Xcc -F${CMAKE_BINARY_DIR}") -target_link_libraries(FoundationNetworking - PRIVATE - CFURLSessionInterface - PUBLIC - Foundation) - -if(NOT BUILD_SHARED_LIBS) - target_compile_options(FoundationNetworking - PRIVATE - "SHELL:-Xfrontend -public-autolink-library -Xfrontend curl") - - # Merge private dependencies into single static objects archive - set_property(TARGET FoundationNetworking PROPERTY STATIC_LIBRARY_OPTIONS - $) -endif() - -set_target_properties(FoundationNetworking PROPERTIES - INSTALL_RPATH "$ORIGIN" - Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift - INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/swift) - -if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin|Windows") - target_link_options(FoundationNetworking PRIVATE "SHELL:-no-toolchain-stdlib-rpath") -endif() - - -set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS FoundationNetworking) -_install_target(FoundationNetworking) diff --git a/Sources/FoundationXML/CMakeLists.txt b/Sources/FoundationXML/CMakeLists.txt deleted file mode 100644 index 944ea25875..0000000000 --- a/Sources/FoundationXML/CMakeLists.txt +++ /dev/null @@ -1,42 +0,0 @@ -add_library(FoundationXML - XMLDocument.swift - XMLDTD.swift - XMLDTDNode.swift - XMLElement.swift - XMLNode.swift - XMLParser.swift - CFAccess.swift) -target_compile_definitions(FoundationXML PRIVATE - DEPLOYMENT_RUNTIME_SWIFT) -target_compile_options(FoundationXML PUBLIC - $<$:-enable-testing> - "SHELL:-Xfrontend -disable-autolink-framework -Xfrontend CFXMLInterface" - "SHELL:-Xcc -F${CMAKE_BINARY_DIR}") -target_link_libraries(FoundationXML - PRIVATE - CFXMLInterface - PUBLIC - Foundation) - -if(NOT BUILD_SHARED_LIBS) - target_compile_options(FoundationXML - PRIVATE - "SHELL:-Xfrontend -public-autolink-library -Xfrontend xml2") - - # Merge private dependencies into single static objects archive - set_property(TARGET FoundationXML PROPERTY STATIC_LIBRARY_OPTIONS - $) -endif() - -set_target_properties(FoundationXML PROPERTIES - INSTALL_RPATH "$ORIGIN" - Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift - INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/swift) - -if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin|Windows") - target_link_options(FoundationXML PRIVATE "SHELL:-no-toolchain-stdlib-rpath") -endif() - - -set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS FoundationXML) -_install_target(FoundationXML) diff --git a/Sources/CoreFoundation/url-static-module.map b/Sources/_CFURLSessionInterface/static-module.map similarity index 100% rename from Sources/CoreFoundation/url-static-module.map rename to Sources/_CFURLSessionInterface/static-module.map diff --git a/Sources/CoreFoundation/static-cfxml-module.map b/Sources/_CFXMLInterface/static-module.map similarity index 100% rename from Sources/CoreFoundation/static-cfxml-module.map rename to Sources/_CFXMLInterface/static-module.map From 9db5173fa80737b053764fbe284a7ac7d55225b1 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Wed, 7 Feb 2024 13:01:24 -0800 Subject: [PATCH 019/198] Build FoundationXML/FoundationNetworking --- Package.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Package.swift b/Package.swift index 542acb4f77..8aab87d4c4 100644 --- a/Package.swift +++ b/Package.swift @@ -70,6 +70,8 @@ let package = Package( platforms: [.macOS("13.3"), .iOS("16.4"), .tvOS("16.4"), .watchOS("9.4")], products: [ .library(name: "Foundation", targets: ["Foundation"]), + .library(name: "FoundationXML", targets: ["FoundationXML"]), + .library(name: "FoundationNetworking", targets: ["FoundationNetworking"]), .executable(name: "plutil", targets: ["plutil"]) ], dependencies: [ @@ -176,6 +178,8 @@ let package = Package( name: "TestFoundation", dependencies: [ "Foundation", + "FoundationXML", + "FoundationNetworking", "XCTest" ], resources: [ From bfdf5f2334d57a94648e8ba807ee353d58b6c036 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Wed, 7 Feb 2024 13:01:36 -0800 Subject: [PATCH 020/198] Don't rely on bridging for NSData --- Tests/Foundation/TestDimension.swift | 2 +- Tests/Foundation/TestNSAttributedString.swift | 4 ++-- Tests/Foundation/TestNSString.swift | 22 +++++++++---------- Tests/Foundation/TestSocketPort.swift | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Tests/Foundation/TestDimension.swift b/Tests/Foundation/TestDimension.swift index 07c508823d..85c18c5ba8 100644 --- a/Tests/Foundation/TestDimension.swift +++ b/Tests/Foundation/TestDimension.swift @@ -17,7 +17,7 @@ class TestDimension: XCTestCase { original.encode(with: archiver) archiver.finishEncoding() - let unarchiver = NSKeyedUnarchiver(forReadingWith: encodedData as Data) + let unarchiver = NSKeyedUnarchiver(forReadingWith: Data(encodedData)) let decoded = Dimension(coder: unarchiver) XCTAssertNotNil(decoded) diff --git a/Tests/Foundation/TestNSAttributedString.swift b/Tests/Foundation/TestNSAttributedString.swift index 2d7ecf730f..2d7df3cb10 100644 --- a/Tests/Foundation/TestNSAttributedString.swift +++ b/Tests/Foundation/TestNSAttributedString.swift @@ -286,7 +286,7 @@ class TestNSAttributedString : XCTestCase { archiver.encode(string, forKey: NSKeyedArchiveRootObjectKey) archiver.finishEncoding() - let unarchiver = NSKeyedUnarchiver(forReadingWith: data as Data) + let unarchiver = NSKeyedUnarchiver(forReadingWith: Data(data)) unarchiver.requiresSecureCoding = true let unarchived = unarchiver.decodeObject(of: NSAttributedString.self, forKey: NSKeyedArchiveRootObjectKey) @@ -621,7 +621,7 @@ class TestNSMutableAttributedString : XCTestCase { archiver.encode(string, forKey: NSKeyedArchiveRootObjectKey) archiver.finishEncoding() - let unarchiver = NSKeyedUnarchiver(forReadingWith: data as Data) + let unarchiver = NSKeyedUnarchiver(forReadingWith: Data(data)) unarchiver.requiresSecureCoding = true let unarchived = unarchiver.decodeObject(of: NSMutableAttributedString.self, forKey: NSKeyedArchiveRootObjectKey) diff --git a/Tests/Foundation/TestNSString.swift b/Tests/Foundation/TestNSString.swift index 3339815b3e..10179a3b45 100644 --- a/Tests/Foundation/TestNSString.swift +++ b/Tests/Foundation/TestNSString.swift @@ -1199,31 +1199,31 @@ class TestNSString: LoopbackServerTest { do { let string = NSString(string: "this is an external string that should be representable by data") - let UTF8Data = try XCTUnwrap(string.data(using: String.Encoding.utf8.rawValue, allowLossyConversion: false)) as NSData - let UTF8Length = UTF8Data.length + let UTF8Data = try XCTUnwrap(string.data(using: String.Encoding.utf8.rawValue, allowLossyConversion: false))/* as NSData*/ + let UTF8Length = UTF8Data.count XCTAssertEqual(UTF8Length, 63, "NSString should successfully produce an external UTF8 representation with a length of 63 but got \(UTF8Length) bytes") - let UTF16Data = try XCTUnwrap(string.data(using: String.Encoding.utf16.rawValue, allowLossyConversion: false)) as NSData - let UTF16Length = UTF16Data.length + let UTF16Data = try XCTUnwrap(string.data(using: String.Encoding.utf16.rawValue, allowLossyConversion: false))/* as NSData*/ + let UTF16Length = UTF16Data.count XCTAssertEqual(UTF16Length, 128, "NSString should successfully produce an external UTF16 representation with a length of 128 but got \(UTF16Length) bytes") - let ISOLatin1Data = try XCTUnwrap(string.data(using: String.Encoding.isoLatin1.rawValue, allowLossyConversion: false)) as NSData - let ISOLatin1Length = ISOLatin1Data.length + let ISOLatin1Data = try XCTUnwrap(string.data(using: String.Encoding.isoLatin1.rawValue, allowLossyConversion: false))/* as NSData*/ + let ISOLatin1Length = ISOLatin1Data.count XCTAssertEqual(ISOLatin1Length, 63, "NSString should successfully produce an external ISOLatin1 representation with a length of 63 but got \(ISOLatin1Length) bytes") } do { let string = NSString(string: "🐢 encoding all the way down. 🐢🐢🐢") - let UTF8Data = try XCTUnwrap(string.data(using: String.Encoding.utf8.rawValue, allowLossyConversion: false)) as NSData - let UTF8Length = UTF8Data.length + let UTF8Data = try XCTUnwrap(string.data(using: String.Encoding.utf8.rawValue, allowLossyConversion: false))/* as NSData*/ + let UTF8Length = UTF8Data.count XCTAssertEqual(UTF8Length, 44, "NSString should successfully produce an external UTF8 representation with a length of 44 but got \(UTF8Length) bytes") - let UTF16Data = try XCTUnwrap(string.data(using: String.Encoding.utf16.rawValue, allowLossyConversion: false)) as NSData - let UTF16Length = UTF16Data.length + let UTF16Data = try XCTUnwrap(string.data(using: String.Encoding.utf16.rawValue, allowLossyConversion: false))/* as NSData*/ + let UTF16Length = UTF16Data.count XCTAssertEqual(UTF16Length, 74, "NSString should successfully produce an external UTF16 representation with a length of 74 but got \(UTF16Length) bytes") - let ISOLatin1Data = string.data(using: String.Encoding.isoLatin1.rawValue, allowLossyConversion: false) as NSData? + let ISOLatin1Data = string.data(using: String.Encoding.isoLatin1.rawValue, allowLossyConversion: false)/* as NSData?*/ XCTAssertNil(ISOLatin1Data) } } diff --git a/Tests/Foundation/TestSocketPort.swift b/Tests/Foundation/TestSocketPort.swift index 32366ea510..98ec2bb955 100644 --- a/Tests/Foundation/TestSocketPort.swift +++ b/Tests/Foundation/TestSocketPort.swift @@ -84,7 +84,7 @@ class TestSocketPort : XCTestCase { let received = expectation(description: "Message received") let delegate = TestPortDelegateWithBlock { message in - XCTAssertEqual(message.components as? [AnyHashable], [data as NSData]) + XCTAssertEqual(message.components as? [AnyHashable], [data._bridgeToObjectiveC()]) received.fulfill() } From f501e193bcc6fb44b365550cbc195f9f9a0dda61 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 8 Feb 2024 10:35:37 -0800 Subject: [PATCH 021/198] Work towards macOS build --- Package.swift | 19 ++-- Sources/CoreFoundation/CFCalendar.c | 3 +- .../CoreFoundation/CFDateIntervalFormatter.c | 1 + Sources/CoreFoundation/CFLocaleKeys.c | 2 +- .../CoreFoundation/include/CFAvailability.h | 6 +- Sources/CoreFoundation/include/CFBase.h | 7 +- Sources/CoreFoundation/include/CFCalendar.h | 1 - .../CoreFoundation/include/CFCalendarPriv.h | 45 ++++++++ Sources/CoreFoundation/include/CFLocking.h | 6 +- ...tConditionals.h => CFTargetConditionals.h} | 7 ++ .../include/CoreFoundation-SwiftRuntime.h | 106 ------------------ .../CoreFoundation/include/CoreFoundation.h | 3 +- .../include/CoreFoundation_Prefix.h | 8 +- .../ForSwiftFoundationOnly.h | 4 +- .../CoreFoundation/internalInclude/Block.h | 2 +- .../internalInclude/Block_private.h | 2 +- .../internalInclude/CFCalendar_Internal.h | 16 +-- .../internalInclude/CFInternal.h | 7 +- Sources/CoreFoundation/internalInclude/uuid.h | 2 +- Sources/CoreFoundation/runtime.c | 2 +- .../CFURLSessionInterface.c | 4 +- .../include/CFURLSessionInterface.h | 5 +- Sources/_CFXMLInterface/CFXMLInterface.c | 3 +- .../_CFXMLInterface/include/CFXMLInterface.h | 13 ++- 24 files changed, 91 insertions(+), 183 deletions(-) create mode 100644 Sources/CoreFoundation/include/CFCalendarPriv.h rename Sources/CoreFoundation/include/{TargetConditionals.h => CFTargetConditionals.h} (98%) delete mode 100644 Sources/CoreFoundation/include/CoreFoundation-SwiftRuntime.h rename Sources/CoreFoundation/{internalInclude => include}/ForSwiftFoundationOnly.h (99%) diff --git a/Package.swift b/Package.swift index 8aab87d4c4..19b6186e91 100644 --- a/Package.swift +++ b/Package.swift @@ -10,7 +10,6 @@ let buildSettings: [CSetting] = [ .define("DEPLOYMENT_RUNTIME_SWIFT"), .define("DEPLOYMENT_ENABLE_LIBDISPATCH"), .define("HAVE_STRUCT_TIMESPEC"), - .define("__CONSTANT_CFSTRINGS__"), .define("_GNU_SOURCE", .when(platforms: [.linux, .android])), .define("CF_CHARACTERSET_UNICODE_DATA_L", to: "\"Sources/CoreFoundation/CFUnicodeData-L.mapping\""), .define("CF_CHARACTERSET_UNICODE_DATA_B", to: "\"Sources/CoreFoundation/CFUnicodeData-B.mapping\""), @@ -25,7 +24,7 @@ let buildSettings: [CSetting] = [ "-Wno-int-conversion", "-Wno-unused-function", "-Wno-microsoft-enum-forward-reference", - "-fconstant-cfstrings", + "-fconstant-cfstrings", "-fexceptions", // TODO: not on OpenBSD "-fdollars-in-identifiers", "-fno-common", @@ -44,7 +43,6 @@ let interfaceBuildSettings: [CSetting] = [ .define("DEPLOYMENT_RUNTIME_SWIFT"), .define("DEPLOYMENT_ENABLE_LIBDISPATCH"), .define("HAVE_STRUCT_TIMESPEC"), - .define("__CONSTANT_CFSTRINGS__"), .define("_GNU_SOURCE", .when(platforms: [.linux, .android])), .unsafeFlags([ "-Wno-shorten-64-to-32", @@ -55,7 +53,7 @@ let interfaceBuildSettings: [CSetting] = [ "-Wno-int-conversion", "-Wno-unused-function", "-Wno-microsoft-enum-forward-reference", - "-fconstant-cfstrings", + "-fconstant-cfstrings", "-fexceptions", // TODO: not on OpenBSD "-fdollars-in-identifiers", "-fno-common", @@ -89,7 +87,7 @@ let package = Package( dependencies: [ .product(name: "FoundationEssentials", package: "swift-foundation"), .product(name: "FoundationInternationalization", package: "swift-foundation"), - "CoreFoundationPackage" + "_CoreFoundation" ], path: "Sources/Foundation", swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT")] @@ -99,7 +97,7 @@ let package = Package( dependencies: [ .product(name: "FoundationEssentials", package: "swift-foundation"), "Foundation", - "CoreFoundationPackage", + "_CoreFoundation", "_CFXMLInterface" ], path: "Sources/FoundationXML", @@ -110,17 +108,16 @@ let package = Package( dependencies: [ .product(name: "FoundationEssentials", package: "swift-foundation"), "Foundation", - "CoreFoundationPackage", + "_CoreFoundation", "_CFURLSessionInterface" ], path: "Sources/FoundationNetworking", swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT")] ), .target( - name: "CoreFoundationPackage", + name: "_CoreFoundation", dependencies: [ .product(name: "FoundationICU", package: "swift-foundation-icu"), - "Clibcurl" ], path: "Sources/CoreFoundation", cSettings: buildSettings @@ -128,7 +125,7 @@ let package = Package( .target( name: "_CFXMLInterface", dependencies: [ - "CoreFoundationPackage", + "_CoreFoundation", "Clibxml2", ], path: "Sources/_CFXMLInterface", @@ -137,7 +134,7 @@ let package = Package( .target( name: "_CFURLSessionInterface", dependencies: [ - "CoreFoundationPackage", + "_CoreFoundation", "Clibcurl", ], path: "Sources/_CFURLSessionInterface", diff --git a/Sources/CoreFoundation/CFCalendar.c b/Sources/CoreFoundation/CFCalendar.c index 8ac9be95a1..8f1a1e6128 100644 --- a/Sources/CoreFoundation/CFCalendar.c +++ b/Sources/CoreFoundation/CFCalendar.c @@ -8,6 +8,7 @@ */ #include "CFCalendar.h" +#include "CFCalendarPriv.h" #include "CFRuntime.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" @@ -722,7 +723,7 @@ CFCalendarRef CFCalendarCreateWithIdentifier(CFAllocatorRef allocator, CFStringR return _CFCalendarCreate(allocator, identifier, NULL, NULL, kCFNotFound, kCFNotFound, NULL); } -CF_CROSS_PLATFORM_EXPORT Boolean _CFCalendarInitWithIdentifier(CFCalendarRef calendar, CFStringRef identifier) { +CF_EXPORT Boolean _CFCalendarInitWithIdentifier(CFCalendarRef calendar, CFStringRef identifier) { return _CFCalendarInitialize(calendar, kCFAllocatorSystemDefault, identifier, NULL, NULL, kCFNotFound, kCFNotFound, NULL) ? true : false; } diff --git a/Sources/CoreFoundation/CFDateIntervalFormatter.c b/Sources/CoreFoundation/CFDateIntervalFormatter.c index 641f4e603c..5d470fbd9b 100644 --- a/Sources/CoreFoundation/CFDateIntervalFormatter.c +++ b/Sources/CoreFoundation/CFDateIntervalFormatter.c @@ -13,6 +13,7 @@ #include "CFRuntime_Internal.h" #include "CFCalendar.h" +#include "CFCalendar_Internal.h" #include "CFDate.h" #include "CFDateFormatter.h" #include "CFDateInterval.h" diff --git a/Sources/CoreFoundation/CFLocaleKeys.c b/Sources/CoreFoundation/CFLocaleKeys.c index 2cf05e97a6..7eac80e87b 100644 --- a/Sources/CoreFoundation/CFLocaleKeys.c +++ b/Sources/CoreFoundation/CFLocaleKeys.c @@ -7,7 +7,7 @@ See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors */ -#include "TargetConditionals.h" +#include "CFTargetConditionals.h" #include "CFInternal.h" CONST_STRING_DECL(kCFLocaleAlternateQuotationBeginDelimiterKey, "kCFLocaleAlternateQuotationBeginDelimiterKey"); diff --git a/Sources/CoreFoundation/include/CFAvailability.h b/Sources/CoreFoundation/include/CFAvailability.h index 8f1f163f03..84e1d9f30a 100644 --- a/Sources/CoreFoundation/include/CFAvailability.h +++ b/Sources/CoreFoundation/include/CFAvailability.h @@ -10,11 +10,7 @@ #if !defined(__COREFOUNDATION_CFAVAILABILITY__) #define __COREFOUNDATION_CFAVAILABILITY__ 1 -#if __has_include() -#include "TargetConditionals.h" -#else -#include -#endif +#include "CFTargetConditionals.h" #if __has_include() && __has_include() && __has_include() #include diff --git a/Sources/CoreFoundation/include/CFBase.h b/Sources/CoreFoundation/include/CFBase.h index e918cd6bdd..d0eb47049a 100644 --- a/Sources/CoreFoundation/include/CFBase.h +++ b/Sources/CoreFoundation/include/CFBase.h @@ -12,12 +12,7 @@ #if !defined(__COREFOUNDATION_CFBASE__) #define __COREFOUNDATION_CFBASE__ 1 -#if __has_include() -#include "TargetConditionals.h" -#else -#include -#endif - +#include "CFTargetConditionals.h" #include "CFAvailability.h" #if (defined(__CYGWIN32__) || defined(_WIN32)) && !defined(__WIN32__) diff --git a/Sources/CoreFoundation/include/CFCalendar.h b/Sources/CoreFoundation/include/CFCalendar.h index b2c3c8eed1..bc2ae126e9 100644 --- a/Sources/CoreFoundation/include/CFCalendar.h +++ b/Sources/CoreFoundation/include/CFCalendar.h @@ -109,7 +109,6 @@ Boolean CFCalendarAddComponents(CFCalendarRef calendar, /* inout */ CFAbsoluteTi CF_EXPORT Boolean CFCalendarGetComponentDifference(CFCalendarRef calendar, CFAbsoluteTime startingAT, CFAbsoluteTime resultAT, CFOptionFlags options, const char *componentDesc, ...); - CF_EXTERN_C_END CF_IMPLICIT_BRIDGING_DISABLED diff --git a/Sources/CoreFoundation/include/CFCalendarPriv.h b/Sources/CoreFoundation/include/CFCalendarPriv.h new file mode 100644 index 0000000000..a8e7e61518 --- /dev/null +++ b/Sources/CoreFoundation/include/CFCalendarPriv.h @@ -0,0 +1,45 @@ +/* CFCalendarPriv.h + Copyright (c) 2004-2019, Apple Inc. and the Swift project authors + + Portions Copyright (c) 2014-2019, Apple Inc. and the Swift project authors + Licensed under Apache License v2.0 with Runtime Library Exception + See http://swift.org/LICENSE.txt for license information + See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +*/ + +#if !defined(__COREFOUNDATION_CFCALENDAR_PRIV__) +#define __COREFOUNDATION_CFCALENDAR_PRIV__ 1 + +#include "CFBase.h" +#include "CFLocale.h" +#include "CFDate.h" +#include "CFTimeZone.h" +#include "CFDateComponents.h" +#include "CFCalendar.h" + +CF_IMPLICIT_BRIDGING_ENABLED +CF_EXTERN_C_BEGIN +CF_ASSUME_NONNULL_BEGIN + +// swift-corelibs-foundation only + +typedef struct { + CFTimeInterval onsetTime; + CFTimeInterval ceaseTime; + CFIndex start; + CFIndex end; +} _CFCalendarWeekendRange; + +CF_EXPORT Boolean _CFCalendarInitWithIdentifier(CFCalendarRef calendar, CFStringRef identifier); +CF_EXPORT Boolean _CFCalendarComposeAbsoluteTimeV(CFCalendarRef calendar, /* out */ CFAbsoluteTime *atp, const char *componentDesc, int32_t *vector, int32_t count); +CF_EXPORT Boolean _CFCalendarDecomposeAbsoluteTimeV(CFCalendarRef calendar, CFAbsoluteTime at, const char *componentDesc, int32_t *_Nonnull * _Nonnull vector, int32_t count); +CF_EXPORT Boolean _CFCalendarAddComponentsV(CFCalendarRef calendar, /* inout */ CFAbsoluteTime *atp, CFOptionFlags options, const char *componentDesc, int32_t *vector, int32_t count); +CF_EXPORT Boolean _CFCalendarGetComponentDifferenceV(CFCalendarRef calendar, CFAbsoluteTime startingAT, CFAbsoluteTime resultAT, CFOptionFlags options, const char *componentDesc, int32_t *_Nonnull * _Nonnull vector, int32_t count); +CF_EXPORT void _CFCalendarEnumerateDates(CFCalendarRef calendar, CFDateRef start, CFDateComponentsRef matchingComponents, CFOptionFlags opts, void (^block)(CFDateRef _Nullable, Boolean, Boolean*)); + +CF_ASSUME_NONNULL_END +CF_EXTERN_C_END +CF_IMPLICIT_BRIDGING_DISABLED + +#endif /* ! __COREFOUNDATION_CFCALENDAR_PRIV__ */ + diff --git a/Sources/CoreFoundation/include/CFLocking.h b/Sources/CoreFoundation/include/CFLocking.h index ca7f8a86b9..486b6d7867 100644 --- a/Sources/CoreFoundation/include/CFLocking.h +++ b/Sources/CoreFoundation/include/CFLocking.h @@ -14,11 +14,7 @@ #if !defined(__COREFOUNDATION_CFLOCKING_H__) #define __COREFOUNDATION_CFLOCKING_H__ 1 -#if __has_include() -#include "TargetConditionals.h" -#else -#include -#endif +#include "CFTargetConditionals.h" #if TARGET_OS_MAC diff --git a/Sources/CoreFoundation/include/TargetConditionals.h b/Sources/CoreFoundation/include/CFTargetConditionals.h similarity index 98% rename from Sources/CoreFoundation/include/TargetConditionals.h rename to Sources/CoreFoundation/include/CFTargetConditionals.h index 7ee2e4cf49..ed36cd6479 100644 --- a/Sources/CoreFoundation/include/TargetConditionals.h +++ b/Sources/CoreFoundation/include/CFTargetConditionals.h @@ -18,6 +18,10 @@ */ +#if __has_include() +#include +#else + #ifndef __TARGETCONDITIONALS__ #define __TARGETCONDITIONALS__ /**************************************************************************************************** @@ -275,3 +279,6 @@ #endif #endif /* __TARGETCONDITIONALS__ */ + +#endif // __has_include + diff --git a/Sources/CoreFoundation/include/CoreFoundation-SwiftRuntime.h b/Sources/CoreFoundation/include/CoreFoundation-SwiftRuntime.h deleted file mode 100644 index c3220c2590..0000000000 --- a/Sources/CoreFoundation/include/CoreFoundation-SwiftRuntime.h +++ /dev/null @@ -1,106 +0,0 @@ -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// - -/* - This version of CoreFoundation.h is for the "Swift Runtime" mode of CF only. - - Note: The contents of this file are only meant for compiling the Swift Foundation module. The library is not ABI or API stable and is not meant to be used as a general-purpose C library on Linux. - -*/ - -#if !defined(__COREFOUNDATION_COREFOUNDATION__) -#define __COREFOUNDATION_COREFOUNDATION__ 1 -#define __COREFOUNDATION__ 1 - -#define DEPLOYMENT_RUNTIME_SWIFT 1 - -#if !defined(CF_EXCLUDE_CSTD_HEADERS) - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if !defined(__wasi__) -#include -#endif -#include -#include -#include -#include -#include -#include - -#if __has_include() -#include // for Host.swift -#endif - -#if __has_include() && !defined(__wasi__) -#include // for Host.swift -#endif - -#if defined(__STDC_VERSION__) && (199901L <= __STDC_VERSION__) - -#include -#include -#include - -#endif - -#endif - -#include "CFBase.h" -#include "CFArray.h" -#include "CFBag.h" -#include "CFBinaryHeap.h" -#include "CFBitVector.h" -#include "CFByteOrder.h" -#include "CFCalendar.h" -#include "CFCharacterSet.h" -#include "CFData.h" -#include "CFDate.h" -#include "CFDateFormatter.h" -#include "CFDictionary.h" -#include "CFError.h" -#include "CFLocale.h" -#include "CFNumber.h" -#include "CFNumberFormatter.h" -#include "CFPropertyList.h" -#include "CFSet.h" -#include "CFString.h" -#include "CFStringEncodingExt.h" -#include "CFTimeZone.h" -#include "CFTree.h" -#include "CFURL.h" -#include "CFURLAccess.h" -#include "CFUUID.h" -#include "CFUtilities.h" - -#if !TARGET_OS_WASI -#include "CFBundle.h" -#include "CFPlugIn.h" -#include "CFMessagePort.h" -#include "CFPreferences.h" -#include "CFRunLoop.h" -#include "CFStream.h" -#include "CFSocket.h" -#include "CFMachPort.h" -#endif - -#include "CFAttributedString.h" -#include "CFNotificationCenter.h" - -#include "ForSwiftFoundationOnly.h" - -#endif /* ! __COREFOUNDATION_COREFOUNDATION__ */ - diff --git a/Sources/CoreFoundation/include/CoreFoundation.h b/Sources/CoreFoundation/include/CoreFoundation.h index 7a75465e8c..3a4045b223 100644 --- a/Sources/CoreFoundation/include/CoreFoundation.h +++ b/Sources/CoreFoundation/include/CoreFoundation.h @@ -72,7 +72,8 @@ #include "CFUUID.h" #include "CFUtilities.h" #include "CFBundle.h" -#include "CFLocaleInternal.h" + +#include "ForSwiftFoundationOnly.h" #if TARGET_OS_OSX || TARGET_OS_IPHONE || TARGET_OS_WIN32 #include "CFMessagePort.h" diff --git a/Sources/CoreFoundation/include/CoreFoundation_Prefix.h b/Sources/CoreFoundation/include/CoreFoundation_Prefix.h index e7df72b371..83797a4df7 100644 --- a/Sources/CoreFoundation/include/CoreFoundation_Prefix.h +++ b/Sources/CoreFoundation/include/CoreFoundation_Prefix.h @@ -10,13 +10,7 @@ #ifndef __COREFOUNDATION_PREFIX_H__ #define __COREFOUNDATION_PREFIX_H__ 1 -#if __has_include() -#include "TargetConditionals.h" -#define __TARGETCONDITIONALS__ // Prevent loading the macOS TargetConditionals.h at all. -#else -#include -#endif - +#include "CFTargetConditionals.h" #include "CFAvailability.h" #if TARGET_OS_WASI diff --git a/Sources/CoreFoundation/internalInclude/ForSwiftFoundationOnly.h b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h similarity index 99% rename from Sources/CoreFoundation/internalInclude/ForSwiftFoundationOnly.h rename to Sources/CoreFoundation/include/ForSwiftFoundationOnly.h index 43f04bf32a..d705b79f91 100644 --- a/Sources/CoreFoundation/internalInclude/ForSwiftFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h @@ -18,8 +18,8 @@ #include "CFBase.h" #include "CFNumber.h" #include "CFLocking.h" -#include "CFLocaleInternal.h" #include "CFCalendar.h" +#include "CFCalendarPriv.h" #include "CFPriv.h" #include "CFRegularExpression.h" #include "CFLogUtilities.h" @@ -49,8 +49,6 @@ #include #endif -#include "CFCalendar_Internal.h" - #if __has_include() #include #endif diff --git a/Sources/CoreFoundation/internalInclude/Block.h b/Sources/CoreFoundation/internalInclude/Block.h index f3b92fdacc..b6f9eaf2be 100644 --- a/Sources/CoreFoundation/internalInclude/Block.h +++ b/Sources/CoreFoundation/internalInclude/Block.h @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -#include "TargetConditionals.h" +#include "CFTargetConditionals.h" #ifndef _Block_H_ #define _Block_H_ diff --git a/Sources/CoreFoundation/internalInclude/Block_private.h b/Sources/CoreFoundation/internalInclude/Block_private.h index 66079bf7ac..eaf8296811 100644 --- a/Sources/CoreFoundation/internalInclude/Block_private.h +++ b/Sources/CoreFoundation/internalInclude/Block_private.h @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -#include "TargetConditionals.h" +#include "CFTargetConditionals.h" #ifndef _BLOCK_PRIVATE_H_ #define _BLOCK_PRIVATE_H_ diff --git a/Sources/CoreFoundation/internalInclude/CFCalendar_Internal.h b/Sources/CoreFoundation/internalInclude/CFCalendar_Internal.h index a4f31b6659..4d95f36db0 100644 --- a/Sources/CoreFoundation/internalInclude/CFCalendar_Internal.h +++ b/Sources/CoreFoundation/internalInclude/CFCalendar_Internal.h @@ -13,6 +13,8 @@ #include "CFBase.h" #include "CFRuntime.h" #include "CFPriv.h" +#include "CFCalendar.h" +#include "CFCalendarPriv.h" #include "CFTimeZone.h" #include "CFString.h" @@ -70,13 +72,6 @@ struct __CFDateComponents { CFIndex _nanosecond; }; -typedef struct { - CFTimeInterval onsetTime; - CFTimeInterval ceaseTime; - CFIndex start; - CFIndex end; -} _CFCalendarWeekendRange; - // Additional options for enumeration CF_ENUM(CFOptionFlags) { kCFCalendarMatchStrictly = (1ULL << 1), @@ -91,14 +86,8 @@ CF_ENUM(CFOptionFlags) { CF_PRIVATE void __CFCalendarSetupCal(CFCalendarRef calendar); CF_PRIVATE void __CFCalendarZapCal(CFCalendarRef calendar); -CF_CROSS_PLATFORM_EXPORT Boolean _CFCalendarInitWithIdentifier(CFCalendarRef calendar, CFStringRef identifier); - CF_PRIVATE CFCalendarRef _CFCalendarCreateCopy(CFAllocatorRef allocator, CFCalendarRef calendar); -CF_CROSS_PLATFORM_EXPORT Boolean _CFCalendarComposeAbsoluteTimeV(CFCalendarRef calendar, /* out */ CFAbsoluteTime *atp, const char *componentDesc, int32_t *vector, int32_t count); -CF_CROSS_PLATFORM_EXPORT Boolean _CFCalendarDecomposeAbsoluteTimeV(CFCalendarRef calendar, CFAbsoluteTime at, const char *componentDesc, int32_t *_Nonnull * _Nonnull vector, int32_t count); -CF_CROSS_PLATFORM_EXPORT Boolean _CFCalendarAddComponentsV(CFCalendarRef calendar, /* inout */ CFAbsoluteTime *atp, CFOptionFlags options, const char *componentDesc, int32_t *vector, int32_t count); -CF_CROSS_PLATFORM_EXPORT Boolean _CFCalendarGetComponentDifferenceV(CFCalendarRef calendar, CFAbsoluteTime startingAT, CFAbsoluteTime resultAT, CFOptionFlags options, const char *componentDesc, int32_t *_Nonnull * _Nonnull vector, int32_t count); CF_PRIVATE Boolean _CFCalendarIsDateInWeekend(CFCalendarRef calendar, CFDateRef date); CF_PRIVATE Boolean _CFCalendarGetNextWeekend(CFCalendarRef calendar, _CFCalendarWeekendRange *range); @@ -110,7 +99,6 @@ CF_PRIVATE _Nullable CFDateRef _CFCalendarCreateStartDateForTimeRangeOfUnitForDa CF_PRIVATE _Nullable CFDateIntervalRef _CFCalendarCreateDateInterval(CFAllocatorRef allocator, CFCalendarRef calendar, CFCalendarUnit unit, CFDateRef date); CF_PRIVATE _Nullable CFDateRef _CFCalendarCreateDateByAddingValueOfUnitToDate(CFCalendarRef calendar, CFIndex val, CFCalendarUnit unit, CFDateRef date); -CF_CROSS_PLATFORM_EXPORT void _CFCalendarEnumerateDates(CFCalendarRef calendar, CFDateRef start, CFDateComponentsRef matchingComponents, CFOptionFlags opts, void (^block)(CFDateRef _Nullable, Boolean, Boolean*)); CF_EXPORT void CFCalendarSetGregorianStartDate(CFCalendarRef calendar, CFDateRef _Nullable date); CF_EXPORT _Nullable CFDateRef CFCalendarCopyGregorianStartDate(CFCalendarRef calendar); diff --git a/Sources/CoreFoundation/internalInclude/CFInternal.h b/Sources/CoreFoundation/internalInclude/CFInternal.h index de3af09f08..874ea16e4d 100644 --- a/Sources/CoreFoundation/internalInclude/CFInternal.h +++ b/Sources/CoreFoundation/internalInclude/CFInternal.h @@ -19,12 +19,7 @@ #if !defined(__COREFOUNDATION_CFINTERNAL__) #define __COREFOUNDATION_CFINTERNAL__ 1 -#if __has_include() -#include "TargetConditionals.h" -#else -#include -#endif - +#include "CFTargetConditionals.h" #define __CF_COMPILE_YEAR__ (__DATE__[7] * 1000 + __DATE__[8] * 100 + __DATE__[9] * 10 + __DATE__[10] - 53328) #define __CF_COMPILE_MONTH__ ((__DATE__[1] + __DATE__[2] == 207) ? 1 : \ diff --git a/Sources/CoreFoundation/internalInclude/uuid.h b/Sources/CoreFoundation/internalInclude/uuid.h index cc997a855b..66549cb414 100644 --- a/Sources/CoreFoundation/internalInclude/uuid.h +++ b/Sources/CoreFoundation/internalInclude/uuid.h @@ -33,7 +33,7 @@ #ifndef _UUID_UUID_H #define _UUID_UUID_H -#include +#include "CFTargetConditionals.h" #if TARGET_OS_MAC #include #include diff --git a/Sources/CoreFoundation/runtime.c b/Sources/CoreFoundation/runtime.c index 8d0003e42a..be8ec8c22a 100644 --- a/Sources/CoreFoundation/runtime.c +++ b/Sources/CoreFoundation/runtime.c @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -#include "TargetConditionals.h" +#include "CFTargetConditionals.h" #include "Block_private.h" #include #include diff --git a/Sources/_CFURLSessionInterface/CFURLSessionInterface.c b/Sources/_CFURLSessionInterface/CFURLSessionInterface.c index afd950d6fc..72476c5566 100644 --- a/Sources/_CFURLSessionInterface/CFURLSessionInterface.c +++ b/Sources/_CFURLSessionInterface/CFURLSessionInterface.c @@ -142,7 +142,7 @@ CFURLSessionEasyCode CFURLSessionInit(void) { #if LIBCURL_VERSION_MAJOR > 7 || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR >= 86) -Boolean CFURLSessionWebSocketsSupported(void) { +bool CFURLSessionWebSocketsSupported(void) { curl_version_info_data *info = curl_version_info(CURLVERSION_NOW); for (int i = 0; ; i++) { const char * const protocol = info->protocols[i]; @@ -173,7 +173,7 @@ CFURLSessionWebSocketsFrame * _Nonnull CFURLSessionEasyHandleWebSocketsMetadata( #else -Boolean CFURLSessionWebSocketsSupported(void) { +bool CFURLSessionWebSocketsSupported(void) { return false; } diff --git a/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h b/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h index d760177041..09ca440931 100644 --- a/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h +++ b/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h @@ -27,7 +27,8 @@ #if !defined(__COREFOUNDATION_URLSESSIONINTERFACE__) #define __COREFOUNDATION_URLSESSIONINTERFACE__ 1 -#include +#include "CFTargetConditionals.h" +#include "CFBase.h" #include #if defined(_WIN32) #include @@ -555,7 +556,7 @@ CF_EXPORT CFURLSessionWebSocketsMessageFlag const CFURLSessionWebSocketsPong; // CF_EXPORT CFURLSessionOption const CFURLSessionWebSocketsRawMode; // CURLWS_RAW_MODE // The following WebSockets functions are functional with libcurl 7.86.0 or later, when WebSockets support is enabled. On libcurl versions without WebSockets support, they'll trap on use. Consult CFURLSessionWebSocketsSupported() to get a runtime signal whether they're functional. -CF_EXPORT Boolean CFURLSessionWebSocketsSupported(void); +CF_EXPORT bool CFURLSessionWebSocketsSupported(void); typedef struct CFURLSessionWebSocketsFrame { int age; /* always zero */ diff --git a/Sources/_CFXMLInterface/CFXMLInterface.c b/Sources/_CFXMLInterface/CFXMLInterface.c index 6ad5720718..379acbb4d1 100644 --- a/Sources/_CFXMLInterface/CFXMLInterface.c +++ b/Sources/_CFXMLInterface/CFXMLInterface.c @@ -13,7 +13,6 @@ #include "CFRuntime.h" #include "CFInternal.h" -#include "ForSwiftFoundationOnly.h" #include #include #include @@ -549,7 +548,7 @@ void _CFXMLNodeSetName(_CFXMLNodePtr node, const char* name) { xmlNodeSetName(node, (const xmlChar*)name); } -Boolean _CFXMLNodeNameEqual(_CFXMLNodePtr node, const char* name) { +bool _CFXMLNodeNameEqual(_CFXMLNodePtr node, const char* name) { return (xmlStrcmp(((xmlNodePtr)node)->name, (xmlChar*)name) == 0) ? true : false; } diff --git a/Sources/_CFXMLInterface/include/CFXMLInterface.h b/Sources/_CFXMLInterface/include/CFXMLInterface.h index 8a2fc98bf7..31941e005b 100644 --- a/Sources/_CFXMLInterface/include/CFXMLInterface.h +++ b/Sources/_CFXMLInterface/include/CFXMLInterface.h @@ -14,7 +14,8 @@ #if !defined(__COREFOUNDATION_CFXMLINTERFACE__) #define __COREFOUNDATION_CFXMLINTERFACE__ 1 -#include +#include "CFTargetConditionals.h" +#include "CFBase.h" #include #include #include @@ -142,7 +143,7 @@ typedef void* _CFXMLDTDPtr; typedef void* _CFXMLDTDNodePtr; _CFXMLNodePtr _CFXMLNewNode(_CFXMLNamespacePtr _Nullable name_space, const char* name); -_CFXMLNodePtr _CFXMLCopyNode(_CFXMLNodePtr node, Boolean recursive); +_CFXMLNodePtr _CFXMLCopyNode(_CFXMLNodePtr node, bool recursive); _CFXMLDocPtr _CFXMLNewDoc(const unsigned char* version); _CFXMLNodePtr _CFXMLNewProcessingInstruction(const unsigned char* name, const unsigned char* value); @@ -160,7 +161,7 @@ CFIndex _CFXMLNodeGetType(_CFXMLNodePtr node); CFStringRef _Nullable _CFXMLNodeCopyName(_CFXMLNodePtr node); void _CFXMLNodeForceSetName(_CFXMLNodePtr node, const char* _Nullable name); void _CFXMLNodeSetName(_CFXMLNodePtr node, const char* name); -Boolean _CFXMLNodeNameEqual(_CFXMLNodePtr node, const char* name); +bool _CFXMLNodeNameEqual(_CFXMLNodePtr node, const char* name); CFStringRef _Nullable _CFXMLNodeCopyContent(_CFXMLNodePtr node); void _CFXMLNodeSetContent(_CFXMLNodePtr node, const unsigned char* _Nullable content); void _CFXMLUnlinkNode(_CFXMLNodePtr node); @@ -178,8 +179,8 @@ void _CFXMLNodeReplaceNode(_CFXMLNodePtr node, _CFXMLNodePtr replacement); _CFXMLDocPtr _Nullable _CFXMLNodeGetDocument(_CFXMLNodePtr node); -Boolean _CFXMLDocStandalone(_CFXMLDocPtr doc); -void _CFXMLDocSetStandalone(_CFXMLDocPtr doc, Boolean standalone); +bool _CFXMLDocStandalone(_CFXMLDocPtr doc); +void _CFXMLDocSetStandalone(_CFXMLDocPtr doc, bool standalone); _CFXMLNodePtr _Nullable _CFXMLDocRootElement(_CFXMLDocPtr doc); void _CFXMLDocSetRootElement(_CFXMLDocPtr doc, _CFXMLNodePtr node); CFStringRef _Nullable _CFXMLDocCopyCharacterEncoding(_CFXMLDocPtr doc); @@ -211,7 +212,7 @@ _CFXMLDocPtr _CFXMLDocPtrFromDataWithOptions(CFDataRef data, unsigned int option CFStringRef _Nullable _CFXMLNodeCopyLocalName(_CFXMLNodePtr node); CFStringRef _Nullable _CFXMLNodeCopyPrefix(_CFXMLNodePtr node); -Boolean _CFXMLDocValidate(_CFXMLDocPtr doc, CFErrorRef _Nullable * error); +bool _CFXMLDocValidate(_CFXMLDocPtr doc, CFErrorRef _Nullable * error); _CFXMLDTDPtr _CFXMLNewDTD(_CFXMLDocPtr _Nullable doc, const unsigned char* name, const unsigned char* publicID, const unsigned char* systemID); _CFXMLDTDNodePtr _Nullable _CFXMLParseDTDNode(const unsigned char* xmlString); From 791467147409a8b9c7236c82d01722092c06835f Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Fri, 9 Feb 2024 21:11:14 -0800 Subject: [PATCH 022/198] Ensure we're using the built-in CoreFoundation and not mixing things with the toolchain, by renaming the module --- Package.swift | 4 +- Sources/CoreFoundation/CFBundle.c | 8 +- Sources/CoreFoundation/CFCalendar.c | 2 +- Sources/CoreFoundation/CFCalendar_Enumerate.c | 2 +- Sources/CoreFoundation/CFDateFormatter.c | 2 +- Sources/CoreFoundation/CFLocale.c | 2 +- Sources/CoreFoundation/CFLocaleIdentifier.c | 2 +- Sources/CoreFoundation/CFNumberFormatter.c | 2 +- Sources/CoreFoundation/CFPropertyList.c | 2 +- Sources/CoreFoundation/CFString.c | 3 +- Sources/CoreFoundation/CFURL.c | 2 +- Sources/CoreFoundation/CFUtilities.c | 2 +- .../CoreFoundation/include/CFAvailability.h | 4 + Sources/CoreFoundation/include/CFBase.h | 4 - .../CoreFoundation/include/CFCalendarPriv.h | 7 + .../CoreFoundation/include/CFConstantKeys.h | 128 ++++++++++++++++++ Sources/CoreFoundation/include/CFString.h | 2 + .../CoreFoundation/include/CoreFoundation.h | 1 + .../include/CoreFoundation_Prefix.h | 4 + .../include/ForFoundationOnly.h | 2 +- .../include/ForSwiftFoundationOnly.h | 9 +- .../internalInclude/CFCalendar_Internal.h | 3 - .../internalInclude/CFLocaleInternal.h | 2 +- Sources/Foundation/Bridging.swift | 2 +- Sources/Foundation/Bundle.swift | 2 +- Sources/Foundation/Calendar.swift | 2 +- Sources/Foundation/Date.swift | 2 +- Sources/Foundation/DateComponents.swift | 2 +- Sources/Foundation/DateFormatter.swift | 2 +- Sources/Foundation/DateInterval.swift | 2 +- .../Foundation/DateIntervalFormatter.swift | 2 +- Sources/Foundation/Dictionary.swift | 2 +- Sources/Foundation/FileHandle.swift | 2 +- Sources/Foundation/FileManager+POSIX.swift | 2 +- Sources/Foundation/FileManager+Win32.swift | 2 +- Sources/Foundation/FileManager+XDG.swift | 2 +- Sources/Foundation/FileManager.swift | 2 +- Sources/Foundation/Host.swift | 2 +- Sources/Foundation/ISO8601DateFormatter.swift | 2 +- Sources/Foundation/JSONDecoder.swift | 2 +- Sources/Foundation/JSONEncoder.swift | 2 +- Sources/Foundation/JSONSerialization.swift | 2 +- Sources/Foundation/Locale.swift | 2 +- Sources/Foundation/Measurement.swift | 2 +- Sources/Foundation/NSArray.swift | 2 +- Sources/Foundation/NSAttributedString.swift | 2 +- Sources/Foundation/NSCFArray.swift | 2 +- Sources/Foundation/NSCFBoolean.swift | 2 +- Sources/Foundation/NSCFCharacterSet.swift | 2 +- Sources/Foundation/NSCFDictionary.swift | 2 +- Sources/Foundation/NSCFSet.swift | 2 +- Sources/Foundation/NSCFString.swift | 2 +- Sources/Foundation/NSCalendar.swift | 4 +- Sources/Foundation/NSCharacterSet.swift | 2 +- Sources/Foundation/NSConcreteValue.swift | 2 +- Sources/Foundation/NSData.swift | 2 +- Sources/Foundation/NSDate.swift | 2 +- Sources/Foundation/NSDateComponents.swift | 2 +- Sources/Foundation/NSDictionary.swift | 2 +- Sources/Foundation/NSError.swift | 2 +- Sources/Foundation/NSKeyedArchiver.swift | 2 +- .../Foundation/NSKeyedArchiverHelpers.swift | 2 +- .../NSKeyedCoderOldStyleArray.swift | 2 +- Sources/Foundation/NSKeyedUnarchiver.swift | 2 +- Sources/Foundation/NSLocale.swift | 2 +- Sources/Foundation/NSLock.swift | 2 +- Sources/Foundation/NSLog.swift | 2 +- Sources/Foundation/NSNumber.swift | 2 +- Sources/Foundation/NSObjCRuntime.swift | 2 +- Sources/Foundation/NSObject.swift | 2 +- Sources/Foundation/NSPathUtilities.swift | 2 +- Sources/Foundation/NSRange.swift | 2 +- Sources/Foundation/NSRegularExpression.swift | 2 +- Sources/Foundation/NSSet.swift | 2 +- Sources/Foundation/NSSortDescriptor.swift | 2 +- Sources/Foundation/NSString.swift | 2 +- Sources/Foundation/NSSwiftRuntime.swift | 2 +- Sources/Foundation/NSTextCheckingResult.swift | 2 +- Sources/Foundation/NSTimeZone.swift | 2 +- Sources/Foundation/NSURL.swift | 2 +- Sources/Foundation/NSURLComponents.swift | 2 +- Sources/Foundation/NSUUID.swift | 2 +- Sources/Foundation/NotificationQueue.swift | 2 +- Sources/Foundation/NumberFormatter.swift | 2 +- Sources/Foundation/Port.swift | 2 +- Sources/Foundation/Process.swift | 2 +- Sources/Foundation/ProcessInfo.swift | 2 +- Sources/Foundation/PropertyListEncoder.swift | 2 +- .../PropertyListSerialization.swift | 2 +- Sources/Foundation/RunLoop.swift | 13 +- Sources/Foundation/Set.swift | 2 +- Sources/Foundation/Stream.swift | 2 +- Sources/Foundation/String.swift | 2 +- Sources/Foundation/Thread.swift | 2 +- Sources/Foundation/Timer.swift | 2 +- Sources/Foundation/UUID.swift | 2 +- Sources/Foundation/UserDefaults.swift | 2 +- .../HTTPCookieStorage.swift | 2 +- .../URLSession/BodySource.swift | 2 +- .../URLSession/FTP/FTPURLProtocol.swift | 2 +- .../URLSession/HTTP/HTTPMessage.swift | 2 +- .../URLSession/HTTP/HTTPURLProtocol.swift | 2 +- .../URLSession/NativeProtocol.swift | 2 +- .../URLSession/TaskRegistry.swift | 2 +- .../URLSession/TransferState.swift | 2 +- .../URLSession/URLSession.swift | 2 +- .../URLSession/URLSessionTask.swift | 2 +- .../URLSession/URLSessionTaskMetrics.swift | 2 +- .../WebSocket/WebSocketURLProtocol.swift | 2 +- .../URLSession/libcurl/EasyHandle.swift | 2 +- .../URLSession/libcurl/MultiHandle.swift | 2 +- .../URLSession/libcurl/libcurlHelpers.swift | 2 +- Sources/FoundationXML/XMLDTD.swift | 2 +- Sources/FoundationXML/XMLDTDNode.swift | 2 +- Sources/FoundationXML/XMLDocument.swift | 2 +- Sources/FoundationXML/XMLElement.swift | 2 +- Sources/FoundationXML/XMLNode.swift | 2 +- Sources/FoundationXML/XMLParser.swift | 2 +- .../Public/Asynchronous/XCTWaiter.swift | 2 +- Tests/Foundation/TestBundle.swift | 2 - Tests/Foundation/TestNSArray.swift | 20 --- Tests/Foundation/TestNSData.swift | 1 - Tests/Foundation/TestNSString.swift | 2 - Tests/Foundation/TestThread.swift | 4 - 124 files changed, 267 insertions(+), 166 deletions(-) create mode 100644 Sources/CoreFoundation/include/CFConstantKeys.h diff --git a/Package.swift b/Package.swift index 19b6186e91..736a677bba 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 5.10 +// swift-tools-version: 5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription @@ -28,7 +28,7 @@ let buildSettings: [CSetting] = [ "-fexceptions", // TODO: not on OpenBSD "-fdollars-in-identifiers", "-fno-common", - "-fcf-runtime-abi=swift" + "-fcf-runtime-abi=swift", // /EHsc for Windows ]), .unsafeFlags(["-I/usr/lib/swift"], .when(platforms: [.linux, .android])) // dispatch diff --git a/Sources/CoreFoundation/CFBundle.c b/Sources/CoreFoundation/CFBundle.c index 6a564e3ea4..eeee2ae6c8 100644 --- a/Sources/CoreFoundation/CFBundle.c +++ b/Sources/CoreFoundation/CFBundle.c @@ -141,7 +141,7 @@ static void _CFBundleEnsureBundlesExistForImagePaths(CFArrayRef imagePaths); // Functions and constants for FHS bundles: #define _CFBundleFHSDirectory_share CFSTR("share") -static Boolean _CFBundleURLIsForFHSInstalledBundle(CFURLRef bundleURL) { +static bool _CFBundleURLIsForFHSInstalledBundle(CFURLRef bundleURL) { // Paths of this form are FHS installed bundles: // /share/.resources @@ -149,7 +149,7 @@ static Boolean _CFBundleURLIsForFHSInstalledBundle(CFURLRef bundleURL) { CFURLRef parentURL = CFURLCreateCopyDeletingLastPathComponent(kCFAllocatorSystemDefault, bundleURL); CFStringRef containingDirectoryName = parentURL ? CFURLCopyLastPathComponent(parentURL) : NULL; - Boolean isFHSBundle = + bool isFHSBundle = extension && containingDirectoryName && CFEqual(extension, _CFBundleSiblingResourceDirectoryExtension) && @@ -163,7 +163,7 @@ static Boolean _CFBundleURLIsForFHSInstalledBundle(CFURLRef bundleURL) { } #endif // !DEPLOYMENT_RUNTIME_OBJC && !TARGET_OS_WIN32 && !TARGET_OS_ANDROID -CF_CROSS_PLATFORM_EXPORT Boolean _CFBundleSupportsFHSBundles() { +CF_CROSS_PLATFORM_EXPORT bool _CFBundleSupportsFHSBundles() { #if !DEPLOYMENT_RUNTIME_OBJC && !TARGET_OS_WIN32 && !TARGET_OS_ANDROID return true; #else @@ -171,7 +171,7 @@ CF_CROSS_PLATFORM_EXPORT Boolean _CFBundleSupportsFHSBundles() { #endif } -CF_CROSS_PLATFORM_EXPORT Boolean _CFBundleSupportsFreestandingBundles() { +CF_CROSS_PLATFORM_EXPORT bool _CFBundleSupportsFreestandingBundles() { #if !DEPLOYMENT_RUNTIME_OBJC return true; #else diff --git a/Sources/CoreFoundation/CFCalendar.c b/Sources/CoreFoundation/CFCalendar.c index 8f1a1e6128..54ece0c9d7 100644 --- a/Sources/CoreFoundation/CFCalendar.c +++ b/Sources/CoreFoundation/CFCalendar.c @@ -14,7 +14,7 @@ #include "CFRuntime_Internal.h" #include "CFPriv.h" #include "CFCalendar_Internal.h" -#include "CFLocaleInternal.h" +#include "CFConstantKeys.h" #include "CFICULogging.h" #include "CFDateInterval.h" #include diff --git a/Sources/CoreFoundation/CFCalendar_Enumerate.c b/Sources/CoreFoundation/CFCalendar_Enumerate.c index 67d0de91cf..d60bf7f39d 100644 --- a/Sources/CoreFoundation/CFCalendar_Enumerate.c +++ b/Sources/CoreFoundation/CFCalendar_Enumerate.c @@ -11,7 +11,7 @@ #include "CFCalendar.h" #include "CFCalendar_Internal.h" #include "CFDateComponents.h" -#include "CFLocaleInternal.h" +#include "CFConstantKeys.h" #include "CFInternal.h" CF_PRIVATE CFDateRef _CFDateCreateWithTimeIntervalSinceDate(CFAllocatorRef allocator, CFTimeInterval ti, CFDateRef date) { diff --git a/Sources/CoreFoundation/CFDateFormatter.c b/Sources/CoreFoundation/CFDateFormatter.c index 7dea503747..5c1e4d3324 100644 --- a/Sources/CoreFoundation/CFDateFormatter.c +++ b/Sources/CoreFoundation/CFDateFormatter.c @@ -19,7 +19,7 @@ #include "CFPriv.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" -#include "CFLocaleInternal.h" +#include "CFConstantKeys.h" #include "CFICULogging.h" #include #include diff --git a/Sources/CoreFoundation/CFLocale.c b/Sources/CoreFoundation/CFLocale.c index 1163954a3b..6ed7637cee 100644 --- a/Sources/CoreFoundation/CFLocale.c +++ b/Sources/CoreFoundation/CFLocale.c @@ -25,7 +25,7 @@ #else #include "CFBase.h" #endif -#include "CFLocaleInternal.h" +#include "CFConstantKeys.h" #include #if TARGET_OS_MAC || TARGET_OS_WIN32 || TARGET_OS_LINUX || TARGET_OS_BSD #include // ICU locales diff --git a/Sources/CoreFoundation/CFLocaleIdentifier.c b/Sources/CoreFoundation/CFLocaleIdentifier.c index 363ab7846c..88ea819818 100644 --- a/Sources/CoreFoundation/CFLocaleIdentifier.c +++ b/Sources/CoreFoundation/CFLocaleIdentifier.c @@ -66,7 +66,7 @@ #define ULOC_KEYWORD_AND_VALUES_CAPACITY 100 #endif #include "CFInternal.h" -#include "CFLocaleInternal.h" +#include "CFConstantKeys.h" // Max byte length of locale identifier (ASCII) as C string, including terminating null byte enum { diff --git a/Sources/CoreFoundation/CFNumberFormatter.c b/Sources/CoreFoundation/CFNumberFormatter.c index 784c543415..5bdde6f54e 100644 --- a/Sources/CoreFoundation/CFNumberFormatter.c +++ b/Sources/CoreFoundation/CFNumberFormatter.c @@ -14,7 +14,7 @@ #include "CFBigNumber.h" #include "CFInternal.h" #include "CFRuntime_Internal.h" -#include "CFLocaleInternal.h" +#include "CFConstantKeys.h" #include "CFICULogging.h" #include #include diff --git a/Sources/CoreFoundation/CFPropertyList.c b/Sources/CoreFoundation/CFPropertyList.c index 536d649e61..eaa58eca9b 100644 --- a/Sources/CoreFoundation/CFPropertyList.c +++ b/Sources/CoreFoundation/CFPropertyList.c @@ -28,7 +28,7 @@ #include "CFStream.h" #endif #include "CFCalendar.h" -#include "CFLocaleInternal.h" +#include "CFConstantKeys.h" #include #include #include diff --git a/Sources/CoreFoundation/CFString.c b/Sources/CoreFoundation/CFString.c index 939464bfca..9586a96df4 100644 --- a/Sources/CoreFoundation/CFString.c +++ b/Sources/CoreFoundation/CFString.c @@ -29,7 +29,7 @@ #include #include #if TARGET_OS_MAC || TARGET_OS_WIN32 || TARGET_OS_LINUX || TARGET_OS_BSD -#include "CFLocaleInternal.h" +#include "CFConstantKeys.h" #include "CFStringLocalizedFormattingInternal.h" #endif #include @@ -7932,4 +7932,3 @@ void CFShowStr(CFStringRef str) { #undef HANGUL_VCOUNT #undef HANGUL_TCOUNT #undef HANGUL_NCOUNT - diff --git a/Sources/CoreFoundation/CFURL.c b/Sources/CoreFoundation/CFURL.c index 93e0444686..bb0bd02a9b 100644 --- a/Sources/CoreFoundation/CFURL.c +++ b/Sources/CoreFoundation/CFURL.c @@ -4396,7 +4396,7 @@ CF_EXPORT CFURLRef CFURLCreateWithFileSystemPathRelativeToBase(CFAllocatorRef al return ( result ); } -void _CFURLInitWithFileSystemPathRelativeToBase(CFURLRef url, CFStringRef fileSystemPath, CFURLPathStyle pathStyle, Boolean isDirectory, _Nullable CFURLRef baseURL) { +void _CFURLInitWithFileSystemPathRelativeToBase(CFURLRef url, CFStringRef fileSystemPath, CFURLPathStyle pathStyle, bool isDirectory, _Nullable CFURLRef baseURL) { CFAllocatorRef allocator = kCFAllocatorSystemDefault; struct __CFURL *result = (struct __CFURL *)CFURLCreateWithFileSystemPathRelativeToBase(allocator, fileSystemPath, pathStyle, isDirectory, baseURL); if (result == NULL) return; diff --git a/Sources/CoreFoundation/CFUtilities.c b/Sources/CoreFoundation/CFUtilities.c index 69d42918cb..6ad6192b0b 100644 --- a/Sources/CoreFoundation/CFUtilities.c +++ b/Sources/CoreFoundation/CFUtilities.c @@ -17,7 +17,7 @@ #include "CFBase.h" #include "CFPriv.h" #include "CFInternal.h" -#include "CFLocaleInternal.h" +#include "CFConstantKeys.h" #if !TARGET_OS_WASI #include "CFBundle_Internal.h" #endif diff --git a/Sources/CoreFoundation/include/CFAvailability.h b/Sources/CoreFoundation/include/CFAvailability.h index 84e1d9f30a..c74e8cbe23 100644 --- a/Sources/CoreFoundation/include/CFAvailability.h +++ b/Sources/CoreFoundation/include/CFAvailability.h @@ -7,6 +7,10 @@ See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors */ +#ifndef DEPLOYMENT_RUNTIME_SWIFT +#define DEPLOYMENT_RUNTIME_SWIFT 1 +#endif + #if !defined(__COREFOUNDATION_CFAVAILABILITY__) #define __COREFOUNDATION_CFAVAILABILITY__ 1 diff --git a/Sources/CoreFoundation/include/CFBase.h b/Sources/CoreFoundation/include/CFBase.h index d0eb47049a..6f42ca3790 100644 --- a/Sources/CoreFoundation/include/CFBase.h +++ b/Sources/CoreFoundation/include/CFBase.h @@ -77,11 +77,7 @@ #if !defined(__MACTYPES__) #if !defined(_OS_OSTYPES_H) -#if DEPLOYMENT_RUNTIME_SWIFT typedef bool Boolean; -#else - typedef unsigned char Boolean; -#endif typedef unsigned char UInt8; typedef signed char SInt8; typedef unsigned short UInt16; diff --git a/Sources/CoreFoundation/include/CFCalendarPriv.h b/Sources/CoreFoundation/include/CFCalendarPriv.h index a8e7e61518..93c28a0f60 100644 --- a/Sources/CoreFoundation/include/CFCalendarPriv.h +++ b/Sources/CoreFoundation/include/CFCalendarPriv.h @@ -37,6 +37,13 @@ CF_EXPORT Boolean _CFCalendarAddComponentsV(CFCalendarRef calendar, /* inout */ CF_EXPORT Boolean _CFCalendarGetComponentDifferenceV(CFCalendarRef calendar, CFAbsoluteTime startingAT, CFAbsoluteTime resultAT, CFOptionFlags options, const char *componentDesc, int32_t *_Nonnull * _Nonnull vector, int32_t count); CF_EXPORT void _CFCalendarEnumerateDates(CFCalendarRef calendar, CFDateRef start, CFDateComponentsRef matchingComponents, CFOptionFlags opts, void (^block)(CFDateRef _Nullable, Boolean, Boolean*)); +CF_EXPORT Boolean _CFCalendarIsDateInWeekend(CFCalendarRef calendar, CFDateRef date); +CF_EXPORT Boolean _CFCalendarGetNextWeekend(CFCalendarRef calendar, _CFCalendarWeekendRange *range); + +CF_EXPORT void _CFCalendarEnumerateDates(CFCalendarRef calendar, CFDateRef start, CFDateComponentsRef matchingComponents, CFOptionFlags opts, void (^block)(CFDateRef _Nullable, Boolean, Boolean*)); +CF_EXPORT void CFCalendarSetGregorianStartDate(CFCalendarRef calendar, CFDateRef _Nullable date); +CF_EXPORT _Nullable CFDateRef CFCalendarCopyGregorianStartDate(CFCalendarRef calendar); + CF_ASSUME_NONNULL_END CF_EXTERN_C_END CF_IMPLICIT_BRIDGING_DISABLED diff --git a/Sources/CoreFoundation/include/CFConstantKeys.h b/Sources/CoreFoundation/include/CFConstantKeys.h new file mode 100644 index 0000000000..71af99cbb6 --- /dev/null +++ b/Sources/CoreFoundation/include/CFConstantKeys.h @@ -0,0 +1,128 @@ +/* + CFConstantKeys.h + Copyright (c) 2008-2019, Apple Inc. and the Swift project authors + + Portions Copyright (c) 2014-2019, Apple Inc. and the Swift project authors + Licensed under Apache License v2.0 with Runtime Library Exception + See http://swift.org/LICENSE.txt for license information + See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors + */ + +/* + This file is for the use of the CoreFoundation project only. + */ + +#include "CFString.h" + +CF_EXPORT CFStringRef const kCFLocaleAlternateQuotationBeginDelimiterKey; +CF_EXPORT CFStringRef const kCFLocaleAlternateQuotationEndDelimiterKey; +CF_EXPORT CFStringRef const kCFLocaleQuotationBeginDelimiterKey; +CF_EXPORT CFStringRef const kCFLocaleQuotationEndDelimiterKey; +CF_EXPORT CFStringRef const kCFLocaleCalendarIdentifierKey; // *** +CF_EXPORT CFStringRef const kCFLocaleCalendarKey; +CF_EXPORT CFStringRef const kCFLocaleCollationIdentifierKey; // *** +CF_EXPORT CFStringRef const kCFLocaleCollatorIdentifierKey; +CF_EXPORT CFStringRef const kCFLocaleCountryCodeKey; +CF_EXPORT CFStringRef const kCFLocaleCurrencyCodeKey; // *** +CF_EXPORT CFStringRef const kCFLocaleCurrencySymbolKey; +CF_EXPORT CFStringRef const kCFLocaleDecimalSeparatorKey; +CF_EXPORT CFStringRef const kCFLocaleExemplarCharacterSetKey; +CF_EXPORT CFStringRef const kCFLocaleGroupingSeparatorKey; +CF_EXPORT CFStringRef const kCFLocaleIdentifierKey; +CF_EXPORT CFStringRef const kCFLocaleLanguageCodeKey; +CF_EXPORT CFStringRef const kCFLocaleMeasurementSystemKey; +CF_EXPORT CFStringRef const kCFLocaleTemperatureUnitKey; +CF_EXPORT CFStringRef const kCFLocaleScriptCodeKey; +CF_EXPORT CFStringRef const kCFLocaleUsesMetricSystemKey; +CF_EXPORT CFStringRef const kCFLocaleVariantCodeKey; + +CF_EXPORT CFStringRef const kCFDateFormatterAMSymbolKey; +CF_EXPORT CFStringRef const kCFDateFormatterCalendarKey; +CF_EXPORT CFStringRef const kCFDateFormatterCalendarIdentifierKey; +CF_EXPORT CFStringRef const kCFDateFormatterDefaultDateKey; +CF_EXPORT CFStringRef const kCFDateFormatterDefaultFormatKey; +CF_EXPORT CFStringRef const kCFDateFormatterDoesRelativeDateFormattingKey; +CF_EXPORT CFStringRef const kCFDateFormatterEraSymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterGregorianStartDateKey; +CF_EXPORT CFStringRef const kCFDateFormatterIsLenientKey; +CF_EXPORT CFStringRef const kCFDateFormatterLongEraSymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterMonthSymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterPMSymbolKey; +CF_EXPORT CFStringRef const kCFDateFormatterAmbiguousYearStrategyKey; +CF_EXPORT CFStringRef const kCFDateFormatterQuarterSymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterShortMonthSymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterShortQuarterSymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterShortStandaloneMonthSymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterShortStandaloneQuarterSymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterShortStandaloneWeekdaySymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterShortWeekdaySymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterStandaloneMonthSymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterStandaloneQuarterSymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterStandaloneWeekdaySymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterTimeZoneKey; +CF_EXPORT CFStringRef const kCFDateFormatterTwoDigitStartDateKey; +CF_EXPORT CFStringRef const kCFDateFormatterVeryShortMonthSymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterVeryShortStandaloneMonthSymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterVeryShortStandaloneWeekdaySymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterVeryShortWeekdaySymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterWeekdaySymbolsKey; +CF_EXPORT CFStringRef const kCFDateFormatterUsesCharacterDirectionKey; + +CF_EXPORT CFStringRef const kCFNumberFormatterAlwaysShowDecimalSeparatorKey; +CF_EXPORT CFStringRef const kCFNumberFormatterCurrencyCodeKey; +CF_EXPORT CFStringRef const kCFNumberFormatterCurrencyDecimalSeparatorKey; +CF_EXPORT CFStringRef const kCFNumberFormatterCurrencyGroupingSeparatorKey; +CF_EXPORT CFStringRef const kCFNumberFormatterCurrencySymbolKey; +CF_EXPORT CFStringRef const kCFNumberFormatterDecimalSeparatorKey; +CF_EXPORT CFStringRef const kCFNumberFormatterDefaultFormatKey; +CF_EXPORT CFStringRef const kCFNumberFormatterExponentSymbolKey; +CF_EXPORT CFStringRef const kCFNumberFormatterFormatWidthKey; +CF_EXPORT CFStringRef const kCFNumberFormatterGroupingSeparatorKey; +CF_EXPORT CFStringRef const kCFNumberFormatterGroupingSizeKey; +CF_EXPORT CFStringRef const kCFNumberFormatterInfinitySymbolKey; +CF_EXPORT CFStringRef const kCFNumberFormatterInternationalCurrencySymbolKey; +CF_EXPORT CFStringRef const kCFNumberFormatterIsLenientKey; +CF_EXPORT CFStringRef const kCFNumberFormatterMaxFractionDigitsKey; +CF_EXPORT CFStringRef const kCFNumberFormatterMaxIntegerDigitsKey; +CF_EXPORT CFStringRef const kCFNumberFormatterMaxSignificantDigitsKey; +CF_EXPORT CFStringRef const kCFNumberFormatterMinFractionDigitsKey; +CF_EXPORT CFStringRef const kCFNumberFormatterMinIntegerDigitsKey; +CF_EXPORT CFStringRef const kCFNumberFormatterMinSignificantDigitsKey; +CF_EXPORT CFStringRef const kCFNumberFormatterMinusSignKey; +CF_EXPORT CFStringRef const kCFNumberFormatterMultiplierKey; +CF_EXPORT CFStringRef const kCFNumberFormatterNaNSymbolKey; +CF_EXPORT CFStringRef const kCFNumberFormatterNegativePrefixKey; +CF_EXPORT CFStringRef const kCFNumberFormatterNegativeSuffixKey; +CF_EXPORT CFStringRef const kCFNumberFormatterPaddingCharacterKey; +CF_EXPORT CFStringRef const kCFNumberFormatterPaddingPositionKey; +CF_EXPORT CFStringRef const kCFNumberFormatterPerMillSymbolKey; +CF_EXPORT CFStringRef const kCFNumberFormatterPercentSymbolKey; +CF_EXPORT CFStringRef const kCFNumberFormatterPlusSignKey; +CF_EXPORT CFStringRef const kCFNumberFormatterPositivePrefixKey; +CF_EXPORT CFStringRef const kCFNumberFormatterPositiveSuffixKey; +CF_EXPORT CFStringRef const kCFNumberFormatterRoundingIncrementKey; +CF_EXPORT CFStringRef const kCFNumberFormatterRoundingModeKey; +CF_EXPORT CFStringRef const kCFNumberFormatterSecondaryGroupingSizeKey; +CF_EXPORT CFStringRef const kCFNumberFormatterUseGroupingSeparatorKey; +CF_EXPORT CFStringRef const kCFNumberFormatterUseSignificantDigitsKey; +CF_EXPORT CFStringRef const kCFNumberFormatterZeroSymbolKey; +CF_EXPORT CFStringRef const kCFNumberFormatterUsesCharacterDirectionKey; + +CF_EXPORT CFStringRef const kCFCalendarIdentifierGregorian; +CF_EXPORT CFStringRef const kCFCalendarIdentifierBuddhist; +CF_EXPORT CFStringRef const kCFCalendarIdentifierJapanese; +CF_EXPORT CFStringRef const kCFCalendarIdentifierIslamic; +CF_EXPORT CFStringRef const kCFCalendarIdentifierIslamicCivil; +CF_EXPORT CFStringRef const kCFCalendarIdentifierIslamicTabular; +CF_EXPORT CFStringRef const kCFCalendarIdentifierIslamicUmmAlQura; +CF_EXPORT CFStringRef const kCFCalendarIdentifierHebrew; +CF_EXPORT CFStringRef const kCFCalendarIdentifierChinese; +CF_EXPORT CFStringRef const kCFCalendarIdentifierRepublicOfChina; +CF_EXPORT CFStringRef const kCFCalendarIdentifierPersian; +CF_EXPORT CFStringRef const kCFCalendarIdentifierIndian; +CF_EXPORT CFStringRef const kCFCalendarIdentifierISO8601; +CF_EXPORT CFStringRef const kCFCalendarIdentifierCoptic; +CF_EXPORT CFStringRef const kCFCalendarIdentifierEthiopicAmeteMihret; +CF_EXPORT CFStringRef const kCFCalendarIdentifierEthiopicAmeteAlem; + + diff --git a/Sources/CoreFoundation/include/CFString.h b/Sources/CoreFoundation/include/CFString.h index ffb616936f..03b56abb64 100644 --- a/Sources/CoreFoundation/include/CFString.h +++ b/Sources/CoreFoundation/include/CFString.h @@ -10,6 +10,8 @@ #if !defined(__COREFOUNDATION_CFSTRING__) #define __COREFOUNDATION_CFSTRING__ 1 +#include "CFTargetConditionals.h" + #include "CFBase.h" #include "CFArray.h" #include "CFData.h" diff --git a/Sources/CoreFoundation/include/CoreFoundation.h b/Sources/CoreFoundation/include/CoreFoundation.h index 3a4045b223..64d38adff0 100644 --- a/Sources/CoreFoundation/include/CoreFoundation.h +++ b/Sources/CoreFoundation/include/CoreFoundation.h @@ -72,6 +72,7 @@ #include "CFUUID.h" #include "CFUtilities.h" #include "CFBundle.h" +#include "CFConstantKeys.h" #include "ForSwiftFoundationOnly.h" diff --git a/Sources/CoreFoundation/include/CoreFoundation_Prefix.h b/Sources/CoreFoundation/include/CoreFoundation_Prefix.h index 83797a4df7..2434ae356a 100644 --- a/Sources/CoreFoundation/include/CoreFoundation_Prefix.h +++ b/Sources/CoreFoundation/include/CoreFoundation_Prefix.h @@ -7,6 +7,10 @@ See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors */ +#ifndef DEPLOYMENT_RUNTIME_SWIFT +#define DEPLOYMENT_RUNTIME_SWIFT 1 +#endif + #ifndef __COREFOUNDATION_PREFIX_H__ #define __COREFOUNDATION_PREFIX_H__ 1 diff --git a/Sources/CoreFoundation/include/ForFoundationOnly.h b/Sources/CoreFoundation/include/ForFoundationOnly.h index 5bb11ccf18..ffd0f6f978 100644 --- a/Sources/CoreFoundation/include/ForFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForFoundationOnly.h @@ -647,7 +647,7 @@ CF_EXPORT void *__CFURLReservedPtr(CFURLRef url); CF_EXPORT void __CFURLSetReservedPtr(CFURLRef url, void *_Nullable ptr); CF_EXPORT CFStringEncoding _CFURLGetEncoding(CFURLRef url); -CF_CROSS_PLATFORM_EXPORT void _CFURLInitWithFileSystemPathRelativeToBase(CFURLRef url, CFStringRef fileSystemPath, CFURLPathStyle pathStyle, Boolean isDirectory, _Nullable CFURLRef baseURL); +CF_CROSS_PLATFORM_EXPORT void _CFURLInitWithFileSystemPathRelativeToBase(CFURLRef url, CFStringRef fileSystemPath, CFURLPathStyle pathStyle, bool isDirectory, _Nullable CFURLRef baseURL); CF_CROSS_PLATFORM_EXPORT Boolean _CFURLInitWithURLString(CFURLRef url, CFStringRef string, Boolean checkForLegalCharacters, _Nullable CFURLRef baseURL); CF_CROSS_PLATFORM_EXPORT Boolean _CFURLInitAbsoluteURLWithBytes(CFURLRef url, const UInt8 *relativeURLBytes, CFIndex length, CFStringEncoding encoding, _Nullable CFURLRef baseURL); diff --git a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h index d705b79f91..12bc78da28 100644 --- a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h @@ -94,11 +94,6 @@ _CF_EXPORT_SCOPE_BEGIN CF_PRIVATE Boolean __CFAllocatorRespectsHintZeroWhenAllocating(CFAllocatorRef _Nullable allocator); -CF_CROSS_PLATFORM_EXPORT Boolean _CFCalendarGetNextWeekend(CFCalendarRef calendar, _CFCalendarWeekendRange *range); -CF_CROSS_PLATFORM_EXPORT void _CFCalendarEnumerateDates(CFCalendarRef calendar, CFDateRef start, CFDateComponentsRef matchingComponents, CFOptionFlags opts, void (^block)(CFDateRef _Nullable, Boolean, Boolean*)); -CF_EXPORT void CFCalendarSetGregorianStartDate(CFCalendarRef calendar, CFDateRef _Nullable date); -CF_EXPORT _Nullable CFDateRef CFCalendarCopyGregorianStartDate(CFCalendarRef calendar); - struct __CFSwiftObject { uintptr_t isa; }; @@ -445,8 +440,8 @@ CF_EXPORT _Nullable CFErrorRef CFReadStreamCopyError(CFReadStreamRef _Null_unspe CF_EXPORT _Nullable CFErrorRef CFWriteStreamCopyError(CFWriteStreamRef _Null_unspecified stream); CF_CROSS_PLATFORM_EXPORT CFStringRef _Nullable _CFBundleCopyExecutablePath(CFBundleRef bundle); -CF_CROSS_PLATFORM_EXPORT Boolean _CFBundleSupportsFHSBundles(void); -CF_CROSS_PLATFORM_EXPORT Boolean _CFBundleSupportsFreestandingBundles(void); +CF_CROSS_PLATFORM_EXPORT bool _CFBundleSupportsFHSBundles(void); +CF_CROSS_PLATFORM_EXPORT bool _CFBundleSupportsFreestandingBundles(void); CF_CROSS_PLATFORM_EXPORT CFStringRef _Nullable _CFBundleCopyLoadedImagePathForAddress(const void *p); #endif diff --git a/Sources/CoreFoundation/internalInclude/CFCalendar_Internal.h b/Sources/CoreFoundation/internalInclude/CFCalendar_Internal.h index 4d95f36db0..7e6bf35154 100644 --- a/Sources/CoreFoundation/internalInclude/CFCalendar_Internal.h +++ b/Sources/CoreFoundation/internalInclude/CFCalendar_Internal.h @@ -88,9 +88,6 @@ CF_PRIVATE void __CFCalendarZapCal(CFCalendarRef calendar); CF_PRIVATE CFCalendarRef _CFCalendarCreateCopy(CFAllocatorRef allocator, CFCalendarRef calendar); -CF_PRIVATE Boolean _CFCalendarIsDateInWeekend(CFCalendarRef calendar, CFDateRef date); -CF_PRIVATE Boolean _CFCalendarGetNextWeekend(CFCalendarRef calendar, _CFCalendarWeekendRange *range); - CF_PRIVATE CFStringRef _CFDateComponentsCopyDescriptionInner(CFDateComponentsRef dc); CF_PRIVATE _Nullable CFDateRef _CFCalendarCreateDateByAddingDateComponentsToDate(CFAllocatorRef allocator, CFCalendarRef calendar, CFDateComponentsRef dateComp, CFDateRef date, CFOptionFlags opts); diff --git a/Sources/CoreFoundation/internalInclude/CFLocaleInternal.h b/Sources/CoreFoundation/internalInclude/CFLocaleInternal.h index d9da160259..71af99cbb6 100644 --- a/Sources/CoreFoundation/internalInclude/CFLocaleInternal.h +++ b/Sources/CoreFoundation/internalInclude/CFLocaleInternal.h @@ -1,5 +1,5 @@ /* - CFLocaleInternal.h + CFConstantKeys.h Copyright (c) 2008-2019, Apple Inc. and the Swift project authors Portions Copyright (c) 2014-2019, Apple Inc. and the Swift project authors diff --git a/Sources/Foundation/Bridging.swift b/Sources/Foundation/Bridging.swift index 4539058325..5ed8f7309a 100644 --- a/Sources/Foundation/Bridging.swift +++ b/Sources/Foundation/Bridging.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation #if canImport(ObjectiveC) import ObjectiveC diff --git a/Sources/Foundation/Bundle.swift b/Sources/Foundation/Bundle.swift index 67223bfc41..38c28cf834 100644 --- a/Sources/Foundation/Bundle.swift +++ b/Sources/Foundation/Bundle.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation @_silgen_name("swift_getTypeContextDescriptor") private func _getTypeContextDescriptor(of cls: AnyClass) -> UnsafeRawPointer diff --git a/Sources/Foundation/Calendar.swift b/Sources/Foundation/Calendar.swift index 2957f190bc..e3ae45a4b8 100644 --- a/Sources/Foundation/Calendar.swift +++ b/Sources/Foundation/Calendar.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal func __NSCalendarIsAutoupdating(_ calendar: NSCalendar) -> Bool { return false diff --git a/Sources/Foundation/Date.swift b/Sources/Foundation/Date.swift index 755e945d45..65ea5c5c17 100644 --- a/Sources/Foundation/Date.swift +++ b/Sources/Foundation/Date.swift @@ -9,7 +9,7 @@ @_exported import FoundationEssentials -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation /** `Date` represents a single point in time. diff --git a/Sources/Foundation/DateComponents.swift b/Sources/Foundation/DateComponents.swift index c79baf8893..114b6c6e90 100644 --- a/Sources/Foundation/DateComponents.swift +++ b/Sources/Foundation/DateComponents.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation /** `DateComponents` encapsulates the components of a date in an extendable, structured manner. diff --git a/Sources/Foundation/DateFormatter.swift b/Sources/Foundation/DateFormatter.swift index e6b8020fb8..191f56bba5 100644 --- a/Sources/Foundation/DateFormatter.swift +++ b/Sources/Foundation/DateFormatter.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation open class DateFormatter : Formatter { typealias CFType = CFDateFormatter diff --git a/Sources/Foundation/DateInterval.swift b/Sources/Foundation/DateInterval.swift index 8e4990c8f9..6748060b83 100644 --- a/Sources/Foundation/DateInterval.swift +++ b/Sources/Foundation/DateInterval.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation /// DateInterval represents a closed date interval in the form of [startDate, endDate]. It is possible for the start and end dates to be the same with a duration of 0. DateInterval does not support reverse intervals i.e. intervals where the duration is less than 0 and the end date occurs earlier in time than the start date. public struct DateInterval : ReferenceConvertible, Comparable, Sendable, Hashable { diff --git a/Sources/Foundation/DateIntervalFormatter.swift b/Sources/Foundation/DateIntervalFormatter.swift index 7a08780b7c..c5e4f24fee 100644 --- a/Sources/Foundation/DateIntervalFormatter.swift +++ b/Sources/Foundation/DateIntervalFormatter.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal let kCFDateIntervalFormatterNoStyle = CFDateIntervalFormatterStyle.noStyle internal let kCFDateIntervalFormatterShortStyle = CFDateIntervalFormatterStyle.shortStyle diff --git a/Sources/Foundation/Dictionary.swift b/Sources/Foundation/Dictionary.swift index fa0b5079bf..eb35e22e94 100644 --- a/Sources/Foundation/Dictionary.swift +++ b/Sources/Foundation/Dictionary.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation extension Dictionary : _ObjectiveCBridgeable { diff --git a/Sources/Foundation/FileHandle.swift b/Sources/Foundation/FileHandle.swift index a538a2975e..7bfdb88887 100644 --- a/Sources/Foundation/FileHandle.swift +++ b/Sources/Foundation/FileHandle.swift @@ -7,7 +7,7 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation import Dispatch // FileHandle has a .read(upToCount:) method. Just invoking read() will cause an ambiguity warning. Use _read instead. diff --git a/Sources/Foundation/FileManager+POSIX.swift b/Sources/Foundation/FileManager+POSIX.swift index d90ece91e6..0d590bc2d9 100644 --- a/Sources/Foundation/FileManager+POSIX.swift +++ b/Sources/Foundation/FileManager+POSIX.swift @@ -13,7 +13,7 @@ internal func &(left: UInt32, right: mode_t) -> mode_t { } #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation extension FileManager { internal func _mountedVolumeURLs(includingResourceValuesForKeys propertyKeys: [URLResourceKey]?, options: VolumeEnumerationOptions = []) -> [URL]? { diff --git a/Sources/Foundation/FileManager+Win32.swift b/Sources/Foundation/FileManager+Win32.swift index 35103f378b..2c92cf7a48 100644 --- a/Sources/Foundation/FileManager+Win32.swift +++ b/Sources/Foundation/FileManager+Win32.swift @@ -7,7 +7,7 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation #if os(Windows) import let WinSDK.INVALID_FILE_ATTRIBUTES diff --git a/Sources/Foundation/FileManager+XDG.swift b/Sources/Foundation/FileManager+XDG.swift index 4eb9871f03..511faad64c 100644 --- a/Sources/Foundation/FileManager+XDG.swift +++ b/Sources/Foundation/FileManager+XDG.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation enum _XDGUserDirectory: String { case desktop = "DESKTOP" diff --git a/Sources/Foundation/FileManager.swift b/Sources/Foundation/FileManager.swift index 20f0893516..d50c6c25a5 100644 --- a/Sources/Foundation/FileManager.swift +++ b/Sources/Foundation/FileManager.swift @@ -15,7 +15,7 @@ fileprivate let UF_APPEND: Int32 = 1 fileprivate let UF_HIDDEN: Int32 = 1 #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation #if os(Windows) import CRT import WinSDK diff --git a/Sources/Foundation/Host.swift b/Sources/Foundation/Host.swift index 5fe7b29c5b..d0880bff5f 100644 --- a/Sources/Foundation/Host.swift +++ b/Sources/Foundation/Host.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation #if os(Windows) import WinSDK #endif diff --git a/Sources/Foundation/ISO8601DateFormatter.swift b/Sources/Foundation/ISO8601DateFormatter.swift index 9949b787d0..ffc03833d7 100644 --- a/Sources/Foundation/ISO8601DateFormatter.swift +++ b/Sources/Foundation/ISO8601DateFormatter.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation extension ISO8601DateFormatter { diff --git a/Sources/Foundation/JSONDecoder.swift b/Sources/Foundation/JSONDecoder.swift index aef6c2a0f6..f8cb339aac 100644 --- a/Sources/Foundation/JSONDecoder.swift +++ b/Sources/Foundation/JSONDecoder.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation /// A marker protocol used to determine whether a value is a `String`-keyed `Dictionary` /// containing `Decodable` values (in which case it should be exempt from key conversion strategies). diff --git a/Sources/Foundation/JSONEncoder.swift b/Sources/Foundation/JSONEncoder.swift index df26ca3dca..71786f747e 100644 --- a/Sources/Foundation/JSONEncoder.swift +++ b/Sources/Foundation/JSONEncoder.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation /// A marker protocol used to determine whether a value is a `String`-keyed `Dictionary` /// containing `Encodable` values (in which case it should be exempt from key conversion strategies). diff --git a/Sources/Foundation/JSONSerialization.swift b/Sources/Foundation/JSONSerialization.swift index e5f9eb0252..549be815f5 100644 --- a/Sources/Foundation/JSONSerialization.swift +++ b/Sources/Foundation/JSONSerialization.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation extension JSONSerialization { public struct ReadingOptions : OptionSet { diff --git a/Sources/Foundation/Locale.swift b/Sources/Foundation/Locale.swift index c041592ae4..dc54bd85b9 100644 --- a/Sources/Foundation/Locale.swift +++ b/Sources/Foundation/Locale.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal func __NSLocaleIsAutoupdating(_ locale: NSLocale) -> Bool { return false // Auto-updating is only on Darwin diff --git a/Sources/Foundation/Measurement.swift b/Sources/Foundation/Measurement.swift index 028048675f..f9b30e64f5 100644 --- a/Sources/Foundation/Measurement.swift +++ b/Sources/Foundation/Measurement.swift @@ -11,7 +11,7 @@ //===----------------------------------------------------------------------===// #if DEPLOYMENT_RUNTIME_SWIFT -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation #else @_exported import Foundation // Clang module import _SwiftCoreFoundationOverlayShims diff --git a/Sources/Foundation/NSArray.swift b/Sources/Foundation/NSArray.swift index a6db8e67be..5488dc404b 100644 --- a/Sources/Foundation/NSArray.swift +++ b/Sources/Foundation/NSArray.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation open class NSArray : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCoding, ExpressibleByArrayLiteral { private let _cfinfo = _CFInfo(typeID: CFArrayGetTypeID()) diff --git a/Sources/Foundation/NSAttributedString.swift b/Sources/Foundation/NSAttributedString.swift index 4f7523f179..d9e74b2b85 100644 --- a/Sources/Foundation/NSAttributedString.swift +++ b/Sources/Foundation/NSAttributedString.swift @@ -7,7 +7,7 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation extension NSAttributedString { public struct Key: RawRepresentable, Equatable, Hashable { diff --git a/Sources/Foundation/NSCFArray.swift b/Sources/Foundation/NSCFArray.swift index fb94518e4a..6a0e7d8e8f 100644 --- a/Sources/Foundation/NSCFArray.swift +++ b/Sources/Foundation/NSCFArray.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal final class _NSCFArray : NSMutableArray { deinit { diff --git a/Sources/Foundation/NSCFBoolean.swift b/Sources/Foundation/NSCFBoolean.swift index adb48ac535..706c601221 100644 --- a/Sources/Foundation/NSCFBoolean.swift +++ b/Sources/Foundation/NSCFBoolean.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal class __NSCFBoolean : NSNumber { override var hash: Int { diff --git a/Sources/Foundation/NSCFCharacterSet.swift b/Sources/Foundation/NSCFCharacterSet.swift index b4431b7547..7db1632795 100644 --- a/Sources/Foundation/NSCFCharacterSet.swift +++ b/Sources/Foundation/NSCFCharacterSet.swift @@ -6,7 +6,7 @@ // Copyright © 2016 Apple. All rights reserved. // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal class _NSCFCharacterSet : NSMutableCharacterSet { diff --git a/Sources/Foundation/NSCFDictionary.swift b/Sources/Foundation/NSCFDictionary.swift index 4d7269f588..1f031195d7 100644 --- a/Sources/Foundation/NSCFDictionary.swift +++ b/Sources/Foundation/NSCFDictionary.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal final class _NSCFDictionary : NSMutableDictionary { deinit { diff --git a/Sources/Foundation/NSCFSet.swift b/Sources/Foundation/NSCFSet.swift index 6b90fd71d7..d65c9843db 100644 --- a/Sources/Foundation/NSCFSet.swift +++ b/Sources/Foundation/NSCFSet.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal final class _NSCFSet : NSMutableSet { deinit { diff --git a/Sources/Foundation/NSCFString.swift b/Sources/Foundation/NSCFString.swift index 40ee579f42..f006f1db9b 100644 --- a/Sources/Foundation/NSCFString.swift +++ b/Sources/Foundation/NSCFString.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation @usableFromInline internal class _NSCFString : NSMutableString { diff --git a/Sources/Foundation/NSCalendar.swift b/Sources/Foundation/NSCalendar.swift index 5b78defcfc..4529b9d7cc 100644 --- a/Sources/Foundation/NSCalendar.swift +++ b/Sources/Foundation/NSCalendar.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal let kCFCalendarUnitEra = CFCalendarUnit.era internal let kCFCalendarUnitYear = CFCalendarUnit.year @@ -22,7 +22,7 @@ internal let kCFCalendarUnitQuarter = CFCalendarUnit.quarter internal let kCFCalendarUnitWeekOfMonth = CFCalendarUnit.weekOfMonth internal let kCFCalendarUnitWeekOfYear = CFCalendarUnit.weekOfYear internal let kCFCalendarUnitYearForWeekOfYear = CFCalendarUnit.yearForWeekOfYear -internal let kCFCalendarUnitNanosecond = CFCalendarUnit(rawValue: CFOptionFlags(CoreFoundation.kCFCalendarUnitNanosecond)) +internal let kCFCalendarUnitNanosecond = CFCalendarUnit(rawValue: CFOptionFlags(_CoreFoundation.kCFCalendarUnitNanosecond)) internal func _CFCalendarUnitRawValue(_ unit: CFCalendarUnit) -> CFOptionFlags { return unit.rawValue diff --git a/Sources/Foundation/NSCharacterSet.swift b/Sources/Foundation/NSCharacterSet.swift index 0c4e9934b1..cdb77abcf3 100644 --- a/Sources/Foundation/NSCharacterSet.swift +++ b/Sources/Foundation/NSCharacterSet.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation let kCFCharacterSetControl = CFCharacterSetPredefinedSet.control let kCFCharacterSetWhitespace = CFCharacterSetPredefinedSet.whitespace diff --git a/Sources/Foundation/NSConcreteValue.swift b/Sources/Foundation/NSConcreteValue.swift index ea796c8825..dba8c1c7d6 100644 --- a/Sources/Foundation/NSConcreteValue.swift +++ b/Sources/Foundation/NSConcreteValue.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal class NSConcreteValue : NSValue { diff --git a/Sources/Foundation/NSData.swift b/Sources/Foundation/NSData.swift index 603390533a..53ac05f48d 100644 --- a/Sources/Foundation/NSData.swift +++ b/Sources/Foundation/NSData.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation #if !os(WASI) import Dispatch #endif diff --git a/Sources/Foundation/NSDate.swift b/Sources/Foundation/NSDate.swift index 904e8e1f19..33077cdc77 100644 --- a/Sources/Foundation/NSDate.swift +++ b/Sources/Foundation/NSDate.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation public typealias TimeInterval = Double diff --git a/Sources/Foundation/NSDateComponents.swift b/Sources/Foundation/NSDateComponents.swift index b395181e5e..6a1c3e0819 100644 --- a/Sources/Foundation/NSDateComponents.swift +++ b/Sources/Foundation/NSDateComponents.swift @@ -7,7 +7,7 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation // This is a just used as an extensible struct, basically; diff --git a/Sources/Foundation/NSDictionary.swift b/Sources/Foundation/NSDictionary.swift index f30426e660..378e254831 100644 --- a/Sources/Foundation/NSDictionary.swift +++ b/Sources/Foundation/NSDictionary.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation #if !os(WASI) import Dispatch diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index 1ce1deeda0..4ccb70f912 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -18,7 +18,7 @@ import Glibc import CRT #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation public typealias NSErrorDomain = NSString diff --git a/Sources/Foundation/NSKeyedArchiver.swift b/Sources/Foundation/NSKeyedArchiver.swift index 8433b13869..60b63f47ce 100644 --- a/Sources/Foundation/NSKeyedArchiver.swift +++ b/Sources/Foundation/NSKeyedArchiver.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation /// Archives created using the class method `archivedData(withRootObject:)` use this key /// for the root object in the hierarchy of encoded objects. The `NSKeyedUnarchiver` class method diff --git a/Sources/Foundation/NSKeyedArchiverHelpers.swift b/Sources/Foundation/NSKeyedArchiverHelpers.swift index 341936d851..e528acce7e 100644 --- a/Sources/Foundation/NSKeyedArchiverHelpers.swift +++ b/Sources/Foundation/NSKeyedArchiverHelpers.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation extension CFKeyedArchiverUID : _NSBridgeable { typealias NSType = _NSKeyedArchiverUID diff --git a/Sources/Foundation/NSKeyedCoderOldStyleArray.swift b/Sources/Foundation/NSKeyedCoderOldStyleArray.swift index 72b48c0215..4bcf458c8c 100644 --- a/Sources/Foundation/NSKeyedCoderOldStyleArray.swift +++ b/Sources/Foundation/NSKeyedCoderOldStyleArray.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal final class _NSKeyedCoderOldStyleArray : NSObject, NSCopying, NSSecureCoding, NSCoding { diff --git a/Sources/Foundation/NSKeyedUnarchiver.swift b/Sources/Foundation/NSKeyedUnarchiver.swift index 0c76f3a61b..cd2784d20f 100644 --- a/Sources/Foundation/NSKeyedUnarchiver.swift +++ b/Sources/Foundation/NSKeyedUnarchiver.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation open class NSKeyedUnarchiver : NSCoder { enum InternalError: Error { diff --git a/Sources/Foundation/NSLocale.swift b/Sources/Foundation/NSLocale.swift index e7e35e452b..5d3d726f95 100644 --- a/Sources/Foundation/NSLocale.swift +++ b/Sources/Foundation/NSLocale.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation open class NSLocale: NSObject, NSCopying, NSSecureCoding { typealias CFType = CFLocale diff --git a/Sources/Foundation/NSLock.swift b/Sources/Foundation/NSLock.swift index f4384b70ac..8499b3bb32 100644 --- a/Sources/Foundation/NSLock.swift +++ b/Sources/Foundation/NSLock.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation #if canImport(Glibc) import Glibc diff --git a/Sources/Foundation/NSLog.swift b/Sources/Foundation/NSLog.swift index ede48862b9..b1a8f568a5 100644 --- a/Sources/Foundation/NSLog.swift +++ b/Sources/Foundation/NSLog.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation /* Output from NSLogv is serialized, in that only one thread in a process can be doing * the writing/logging described above at a time. All attempts at writing/logging a diff --git a/Sources/Foundation/NSNumber.swift b/Sources/Foundation/NSNumber.swift index 883a44c2ee..a68361e6dd 100644 --- a/Sources/Foundation/NSNumber.swift +++ b/Sources/Foundation/NSNumber.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal let kCFNumberSInt8Type = CFNumberType.sInt8Type internal let kCFNumberSInt16Type = CFNumberType.sInt16Type diff --git a/Sources/Foundation/NSObjCRuntime.swift b/Sources/Foundation/NSObjCRuntime.swift index bc388d4031..c845109ebc 100644 --- a/Sources/Foundation/NSObjCRuntime.swift +++ b/Sources/Foundation/NSObjCRuntime.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal let kCFCompareLessThan = CFComparisonResult.compareLessThan internal let kCFCompareEqualTo = CFComparisonResult.compareEqualTo diff --git a/Sources/Foundation/NSObject.swift b/Sources/Foundation/NSObject.swift index a2bbd0b77d..8d65b88cac 100644 --- a/Sources/Foundation/NSObject.swift +++ b/Sources/Foundation/NSObject.swift @@ -14,7 +14,7 @@ @_exported import Dispatch #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation /// The `NSObjectProtocol` groups methods that are fundamental to all Foundation objects. /// diff --git a/Sources/Foundation/NSPathUtilities.swift b/Sources/Foundation/NSPathUtilities.swift index 1726b35115..df9a1320fe 100644 --- a/Sources/Foundation/NSPathUtilities.swift +++ b/Sources/Foundation/NSPathUtilities.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation #if os(Windows) import WinSDK #endif diff --git a/Sources/Foundation/NSRange.swift b/Sources/Foundation/NSRange.swift index 3ec747b0db..91ae61dd6c 100644 --- a/Sources/Foundation/NSRange.swift +++ b/Sources/Foundation/NSRange.swift @@ -9,7 +9,7 @@ #if DEPLOYMENT_RUNTIME_SWIFT -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation public struct _NSRange { public var location: Int diff --git a/Sources/Foundation/NSRegularExpression.swift b/Sources/Foundation/NSRegularExpression.swift index 24adba513a..fc8a352540 100644 --- a/Sources/Foundation/NSRegularExpression.swift +++ b/Sources/Foundation/NSRegularExpression.swift @@ -10,7 +10,7 @@ /* NSRegularExpression is a class used to represent and apply regular expressions. An instance of this class is an immutable representation of a compiled regular expression pattern and various option flags. */ -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation extension NSRegularExpression { public struct Options : OptionSet { diff --git a/Sources/Foundation/NSSet.swift b/Sources/Foundation/NSSet.swift index 7f2318d6de..85bd2bcb95 100644 --- a/Sources/Foundation/NSSet.swift +++ b/Sources/Foundation/NSSet.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation open class NSSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCoding { private let _cfinfo = _CFInfo(typeID: CFSetGetTypeID()) diff --git a/Sources/Foundation/NSSortDescriptor.swift b/Sources/Foundation/NSSortDescriptor.swift index 03b52bd659..d99afe882a 100644 --- a/Sources/Foundation/NSSortDescriptor.swift +++ b/Sources/Foundation/NSSortDescriptor.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation // In swift-corelibs-foundation, key-value coding is not available. Since encoding and decoding a NSSortDescriptor requires interpreting key paths, NSSortDescriptor does not conform to NSCoding or NSSecureCoding in swift-corelibs-foundation only. open class NSSortDescriptor: NSObject, NSCopying { diff --git a/Sources/Foundation/NSString.swift b/Sources/Foundation/NSString.swift index 867fc83340..bbfbdb93fe 100644 --- a/Sources/Foundation/NSString.swift +++ b/Sources/Foundation/NSString.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation public typealias unichar = UInt16 diff --git a/Sources/Foundation/NSSwiftRuntime.swift b/Sources/Foundation/NSSwiftRuntime.swift index 04958446d7..1ad4730fb3 100644 --- a/Sources/Foundation/NSSwiftRuntime.swift +++ b/Sources/Foundation/NSSwiftRuntime.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation // Re-export Darwin and Glibc by importing Foundation // This mimics the behavior of the swift sdk overlay on Darwin diff --git a/Sources/Foundation/NSTextCheckingResult.swift b/Sources/Foundation/NSTextCheckingResult.swift index d55176dc78..d03b969007 100644 --- a/Sources/Foundation/NSTextCheckingResult.swift +++ b/Sources/Foundation/NSTextCheckingResult.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation /* NSTextCheckingType in this project is limited to regular expressions. */ extension NSTextCheckingResult { diff --git a/Sources/Foundation/NSTimeZone.swift b/Sources/Foundation/NSTimeZone.swift index df42999316..4249de32d1 100644 --- a/Sources/Foundation/NSTimeZone.swift +++ b/Sources/Foundation/NSTimeZone.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation open class NSTimeZone : NSObject, NSCopying, NSSecureCoding, NSCoding { typealias CFType = CFTimeZone diff --git a/Sources/Foundation/NSURL.swift b/Sources/Foundation/NSURL.swift index 9b121d6681..36550e8ff2 100644 --- a/Sources/Foundation/NSURL.swift +++ b/Sources/Foundation/NSURL.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation #if os(Windows) import WinSDK #endif diff --git a/Sources/Foundation/NSURLComponents.swift b/Sources/Foundation/NSURLComponents.swift index 7b495c76cb..e65e948005 100644 --- a/Sources/Foundation/NSURLComponents.swift +++ b/Sources/Foundation/NSURLComponents.swift @@ -7,7 +7,7 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation open class NSURLComponents: NSObject, NSCopying { diff --git a/Sources/Foundation/NSUUID.swift b/Sources/Foundation/NSUUID.swift index 00acd6890f..722b32bdae 100644 --- a/Sources/Foundation/NSUUID.swift +++ b/Sources/Foundation/NSUUID.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation open class NSUUID : NSObject, NSCopying, NSSecureCoding, NSCoding { internal var buffer = UnsafeMutablePointer.allocate(capacity: 16) diff --git a/Sources/Foundation/NotificationQueue.swift b/Sources/Foundation/NotificationQueue.swift index a6cc935eec..0b8865eb76 100644 --- a/Sources/Foundation/NotificationQueue.swift +++ b/Sources/Foundation/NotificationQueue.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation extension NotificationQueue { diff --git a/Sources/Foundation/NumberFormatter.swift b/Sources/Foundation/NumberFormatter.swift index 1fb0739cb4..4754ce0d50 100644 --- a/Sources/Foundation/NumberFormatter.swift +++ b/Sources/Foundation/NumberFormatter.swift @@ -7,7 +7,7 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation extension NumberFormatter { public enum Style : UInt { diff --git a/Sources/Foundation/Port.swift b/Sources/Foundation/Port.swift index c481f96613..69dcca52eb 100644 --- a/Sources/Foundation/Port.swift +++ b/Sources/Foundation/Port.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation // MARK: Port and related types diff --git a/Sources/Foundation/Process.swift b/Sources/Foundation/Process.swift index 542cc94cf1..e784ede9ed 100644 --- a/Sources/Foundation/Process.swift +++ b/Sources/Foundation/Process.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation #if os(Windows) import WinSDK import let WinSDK.HANDLE_FLAG_INHERIT diff --git a/Sources/Foundation/ProcessInfo.swift b/Sources/Foundation/ProcessInfo.swift index 891799c658..4c5a483dd1 100644 --- a/Sources/Foundation/ProcessInfo.swift +++ b/Sources/Foundation/ProcessInfo.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation #if os(Windows) import WinSDK #endif diff --git a/Sources/Foundation/PropertyListEncoder.swift b/Sources/Foundation/PropertyListEncoder.swift index 16865e7f4e..473810313e 100644 --- a/Sources/Foundation/PropertyListEncoder.swift +++ b/Sources/Foundation/PropertyListEncoder.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation //===----------------------------------------------------------------------===// // Plist Encoder diff --git a/Sources/Foundation/PropertyListSerialization.swift b/Sources/Foundation/PropertyListSerialization.swift index 7f742a6a8e..1ca5015b50 100644 --- a/Sources/Foundation/PropertyListSerialization.swift +++ b/Sources/Foundation/PropertyListSerialization.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation let kCFPropertyListOpenStepFormat = CFPropertyListFormat.openStepFormat let kCFPropertyListXMLFormat_v1_0 = CFPropertyListFormat.xmlFormat_v1_0 diff --git a/Sources/Foundation/RunLoop.swift b/Sources/Foundation/RunLoop.swift index 5ad595e6ef..e6dcae2de7 100644 --- a/Sources/Foundation/RunLoop.swift +++ b/Sources/Foundation/RunLoop.swift @@ -7,11 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -#if os(Linux) || os(macOS) || os(iOS) || os(tvOS) || os(watchOS) || os(OpenBSD) -import CoreFoundation -#else -@_implementationOnly import CoreFoundation -#endif +@_implementationOnly import _CoreFoundation internal let kCFRunLoopEntry = CFRunLoopActivity.entry.rawValue internal let kCFRunLoopBeforeTimers = CFRunLoopActivity.beforeTimers.rawValue @@ -97,22 +93,23 @@ open class RunLoop: NSObject { // On platforms where it's available, getCFRunLoop() can be overridden and we use it below. // Make sure we honor the override -- var currentCFRunLoop will do so on platforms where overrides are available. + // TODO: This has been removed as public API in port to the package, because CoreFoundation cannot be available as both toolchain "CoreFoundation" and package "_CoreFoundation" #if os(Linux) || os(macOS) || os(iOS) || os(tvOS) || os(watchOS) || os(OpenBSD) internal var currentCFRunLoop: CFRunLoop { getCFRunLoop() } @available(*, deprecated, message: "Directly accessing the run loop may cause your code to not become portable in the future.") - open func getCFRunLoop() -> CFRunLoop { + internal func getCFRunLoop() -> CFRunLoop { return _cfRunLoop } #else internal final var currentCFRunLoop: CFRunLoop { _cfRunLoop } @available(*, unavailable, message: "Core Foundation is not available on your platform.") - open func getCFRunLoop() -> Never { + internal func getCFRunLoop() -> Never { fatalError() } #endif - + open func add(_ timer: Timer, forMode mode: RunLoop.Mode) { CFRunLoopAddTimer(_cfRunLoop, timer._cfObject, mode._cfStringUniquingKnown) } diff --git a/Sources/Foundation/Set.swift b/Sources/Foundation/Set.swift index 2a636eaa91..cad8bffff1 100644 --- a/Sources/Foundation/Set.swift +++ b/Sources/Foundation/Set.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation extension Set : _ObjectiveCBridgeable { public typealias _ObjectType = NSSet diff --git a/Sources/Foundation/Stream.swift b/Sources/Foundation/Stream.swift index 3ea8a9d01f..8ea494df62 100644 --- a/Sources/Foundation/Stream.swift +++ b/Sources/Foundation/Stream.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal extension UInt { init(_ status: CFStreamStatus) { diff --git a/Sources/Foundation/String.swift b/Sources/Foundation/String.swift index e1f606e4d7..898f24151c 100644 --- a/Sources/Foundation/String.swift +++ b/Sources/Foundation/String.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation extension String: _ObjectiveCBridgeable { diff --git a/Sources/Foundation/Thread.swift b/Sources/Foundation/Thread.swift index 7734cf738d..04b7f2185e 100644 --- a/Sources/Foundation/Thread.swift +++ b/Sources/Foundation/Thread.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation #if os(Windows) import WinSDK #endif diff --git a/Sources/Foundation/Timer.swift b/Sources/Foundation/Timer.swift index 83a3efa0de..f938507b43 100644 --- a/Sources/Foundation/Timer.swift +++ b/Sources/Foundation/Timer.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal func __NSFireTimer(_ timer: CFRunLoopTimer?, info: UnsafeMutableRawPointer?) -> Void { let t: Timer = NSObject.unretainedReference(info!) diff --git a/Sources/Foundation/UUID.swift b/Sources/Foundation/UUID.swift index 2a5b19abce..f4044f450b 100644 --- a/Sources/Foundation/UUID.swift +++ b/Sources/Foundation/UUID.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation public typealias uuid_t = (UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8) public typealias uuid_string_t = (Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8) diff --git a/Sources/Foundation/UserDefaults.swift b/Sources/Foundation/UserDefaults.swift index fda2a9a912..946155f942 100644 --- a/Sources/Foundation/UserDefaults.swift +++ b/Sources/Foundation/UserDefaults.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation private var registeredDefaults = [String: Any]() private var sharedDefaults = UserDefaults() diff --git a/Sources/FoundationNetworking/HTTPCookieStorage.swift b/Sources/FoundationNetworking/HTTPCookieStorage.swift index 3961d44cc3..3f1fe53a86 100644 --- a/Sources/FoundationNetworking/HTTPCookieStorage.swift +++ b/Sources/FoundationNetworking/HTTPCookieStorage.swift @@ -13,7 +13,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation /*! @enum HTTPCookie.AcceptPolicy diff --git a/Sources/FoundationNetworking/URLSession/BodySource.swift b/Sources/FoundationNetworking/URLSession/BodySource.swift index e6e3f85c86..5a20839e24 100644 --- a/Sources/FoundationNetworking/URLSession/BodySource.swift +++ b/Sources/FoundationNetworking/URLSession/BodySource.swift @@ -22,7 +22,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift b/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift index 55583fd2b8..6e334bc9f4 100644 --- a/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift @@ -13,7 +13,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation import Dispatch internal class _FTPURLProtocol: _NativeProtocol { diff --git a/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift b/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift index cc2e7d7f9c..552d866cb5 100644 --- a/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift +++ b/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift @@ -22,7 +22,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation internal extension _HTTPURLProtocol._ResponseHeaderLines { /// Create an `NSHTTPRULResponse` from the lines. diff --git a/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift b/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift index 23c6811c34..752b8a7a23 100644 --- a/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift @@ -13,7 +13,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/NativeProtocol.swift b/Sources/FoundationNetworking/URLSession/NativeProtocol.swift index 53a195f5a8..714cb5ec65 100644 --- a/Sources/FoundationNetworking/URLSession/NativeProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/NativeProtocol.swift @@ -23,7 +23,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation import Dispatch internal let enableLibcurlDebugOutput: Bool = { diff --git a/Sources/FoundationNetworking/URLSession/TaskRegistry.swift b/Sources/FoundationNetworking/URLSession/TaskRegistry.swift index 9066a4a9cc..33b637a358 100644 --- a/Sources/FoundationNetworking/URLSession/TaskRegistry.swift +++ b/Sources/FoundationNetworking/URLSession/TaskRegistry.swift @@ -22,7 +22,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation import Dispatch extension URLSession { diff --git a/Sources/FoundationNetworking/URLSession/TransferState.swift b/Sources/FoundationNetworking/URLSession/TransferState.swift index b4142c24eb..b8fc07f7d8 100644 --- a/Sources/FoundationNetworking/URLSession/TransferState.swift +++ b/Sources/FoundationNetworking/URLSession/TransferState.swift @@ -22,7 +22,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation diff --git a/Sources/FoundationNetworking/URLSession/URLSession.swift b/Sources/FoundationNetworking/URLSession/URLSession.swift index 2dcb000a22..ce533cb5a6 100644 --- a/Sources/FoundationNetworking/URLSession/URLSession.swift +++ b/Sources/FoundationNetworking/URLSession/URLSession.swift @@ -167,7 +167,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation extension URLSession { public enum DelayedRequestDisposition { diff --git a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift index 6a342c6ad2..1ab0ff9dca 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift @@ -20,7 +20,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation private class Bag { var values: [Element] = [] diff --git a/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift b/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift index 035a5d802b..d13c393799 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift @@ -20,7 +20,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation open class URLSessionTaskMetrics : NSObject { public internal(set) var transactionMetrics: [URLSessionTaskTransactionMetrics] = [] diff --git a/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift b/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift index 9a7438d69f..f18fa71e12 100644 --- a/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift @@ -13,7 +13,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift index 6edcaffd97..e1c062ff4d 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift @@ -23,7 +23,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift index 12cac38f36..8309ea3969 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift @@ -22,7 +22,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift b/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift index 55460cfc22..08f7f50596 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift @@ -17,7 +17,7 @@ // ----------------------------------------------------------------------------- -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation @_implementationOnly import _CFURLSessionInterface //TODO: Move things in this file? diff --git a/Sources/FoundationXML/XMLDTD.swift b/Sources/FoundationXML/XMLDTD.swift index db18d25fb5..52e571c48f 100644 --- a/Sources/FoundationXML/XMLDTD.swift +++ b/Sources/FoundationXML/XMLDTD.swift @@ -12,7 +12,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation @_implementationOnly import _CFXMLInterface /*! diff --git a/Sources/FoundationXML/XMLDTDNode.swift b/Sources/FoundationXML/XMLDTDNode.swift index f0d74cb20e..e6afa6e718 100644 --- a/Sources/FoundationXML/XMLDTDNode.swift +++ b/Sources/FoundationXML/XMLDTDNode.swift @@ -12,7 +12,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation @_implementationOnly import _CFXMLInterface /*! diff --git a/Sources/FoundationXML/XMLDocument.swift b/Sources/FoundationXML/XMLDocument.swift index 41d6ada04d..89f80f24dd 100644 --- a/Sources/FoundationXML/XMLDocument.swift +++ b/Sources/FoundationXML/XMLDocument.swift @@ -12,7 +12,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation @_implementationOnly import _CFXMLInterface // Input options diff --git a/Sources/FoundationXML/XMLElement.swift b/Sources/FoundationXML/XMLElement.swift index 448b769108..e9986a8700 100644 --- a/Sources/FoundationXML/XMLElement.swift +++ b/Sources/FoundationXML/XMLElement.swift @@ -12,7 +12,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation @_implementationOnly import _CFXMLInterface /*! diff --git a/Sources/FoundationXML/XMLNode.swift b/Sources/FoundationXML/XMLNode.swift index 2735b2f3c1..b233459760 100644 --- a/Sources/FoundationXML/XMLNode.swift +++ b/Sources/FoundationXML/XMLNode.swift @@ -15,7 +15,7 @@ import _CFXMLInterface import Foundation @_implementationOnly import _CFXMLInterface #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation // initWithKind options // NSXMLNodeOptionsNone diff --git a/Sources/FoundationXML/XMLParser.swift b/Sources/FoundationXML/XMLParser.swift index f41d56ce8f..9ee3827851 100644 --- a/Sources/FoundationXML/XMLParser.swift +++ b/Sources/FoundationXML/XMLParser.swift @@ -14,7 +14,7 @@ import _CFXMLInterface import Foundation @_implementationOnly import _CFXMLInterface #endif -@_implementationOnly import CoreFoundation +@_implementationOnly import _CoreFoundation extension XMLParser { public enum ExternalEntityResolvingPolicy : UInt { diff --git a/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift b/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift index f19b344fdd..e6acc4a1c9 100644 --- a/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift +++ b/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift @@ -11,7 +11,7 @@ // #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -import CoreFoundation +@_implementationOnly import _CoreFoundation #endif /// Events are reported to the waiter's delegate via these methods. XCTestCase conforms to this diff --git a/Tests/Foundation/TestBundle.swift b/Tests/Foundation/TestBundle.swift index 5b0fb25e9d..12d138659f 100644 --- a/Tests/Foundation/TestBundle.swift +++ b/Tests/Foundation/TestBundle.swift @@ -7,8 +7,6 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -import CoreFoundation - #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT #if canImport(SwiftFoundation) && !DEPLOYMENT_RUNTIME_OBJC @testable import SwiftFoundation diff --git a/Tests/Foundation/TestNSArray.swift b/Tests/Foundation/TestNSArray.swift index 8fdd122b2f..18475ee185 100644 --- a/Tests/Foundation/TestNSArray.swift +++ b/Tests/Foundation/TestNSArray.swift @@ -7,8 +7,6 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -import CoreFoundation - class TestNSArray : XCTestCase { static var allTests: [(String, (TestNSArray) -> () throws -> Void)] { @@ -47,12 +45,6 @@ class TestNSArray : XCTestCase { ("test_customMirror", test_customMirror), ] -#if os(iOS) || os(macOS) || os(tvOS) || os(watchOS) || os(Linux) - tests.append(contentsOf: [ - ("test_arrayUsedAsCFArrayInvokesArrayMethods", test_arrayUsedAsCFArrayInvokesArrayMethods), - ]) -#endif - return tests } @@ -829,18 +821,6 @@ class TestNSArray : XCTestCase { XCTAssertEqual(array[6] as! String, arrayMirror.descendant(6) as! String) } -#if os(iOS) || os(macOS) || os(tvOS) || os(watchOS) || os(Linux) - func test_arrayUsedAsCFArrayInvokesArrayMethods() { - let number = 789 as NSNumber - let array = NSMutableArray(array: [123, 456]) - withExtendedLifetime(number) { - CFArraySetValueAtIndex(unsafeBitCast(array, to: CFMutableArray.self), 1, UnsafeRawPointer(Unmanaged.passUnretained(number).toOpaque())) - } - XCTAssertEqual(array[0] as! NSNumber, 123 as NSNumber) - XCTAssertEqual(array[1] as! NSNumber, 789 as NSNumber) - } -#endif - private func createTestFile(_ path: String, _contents: Data) -> String? { let tempDir = NSTemporaryDirectory() + "TestFoundation_Playground_" + NSUUID().uuidString + "/" do { diff --git a/Tests/Foundation/TestNSData.swift b/Tests/Foundation/TestNSData.swift index 32c49378ff..d31180d135 100644 --- a/Tests/Foundation/TestNSData.swift +++ b/Tests/Foundation/TestNSData.swift @@ -8,7 +8,6 @@ // import XCTest -//import CoreFoundation @testable import Foundation class TestNSData: XCTestCase { diff --git a/Tests/Foundation/TestNSString.swift b/Tests/Foundation/TestNSString.swift index 10179a3b45..36900cdc8a 100644 --- a/Tests/Foundation/TestNSString.swift +++ b/Tests/Foundation/TestNSString.swift @@ -7,8 +7,6 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -import CoreFoundation - #if os(macOS) || os(iOS) internal let kCFStringEncodingMacRoman = CFStringBuiltInEncodings.macRoman.rawValue internal let kCFStringEncodingWindowsLatin1 = CFStringBuiltInEncodings.windowsLatin1.rawValue diff --git a/Tests/Foundation/TestThread.swift b/Tests/Foundation/TestThread.swift index cf9a432df0..8cbe5629bf 100644 --- a/Tests/Foundation/TestThread.swift +++ b/Tests/Foundation/TestThread.swift @@ -7,10 +7,6 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -#if !(os(macOS) || os(iOS) || os(watchOS) || os(tvOS)) - import CoreFoundation -#endif - #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT #if canImport(SwiftFoundation) && !DEPLOYMENT_RUNTIME_OBJC @testable import SwiftFoundation From 0f87f9d4743fc366b36906ffff3a0684cacf29e7 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Fri, 9 Feb 2024 21:14:21 -0800 Subject: [PATCH 023/198] Use bridging again - relies on compiler from 2024-02-07 or later --- Sources/Foundation/Data.swift | 3 +-- Tests/Foundation/TestDimension.swift | 2 +- Tests/Foundation/TestNSAttributedString.swift | 4 ++-- Tests/Foundation/TestNSString.swift | 22 +++++++++---------- Tests/Foundation/TestSocketPort.swift | 2 +- 5 files changed, 16 insertions(+), 17 deletions(-) diff --git a/Sources/Foundation/Data.swift b/Sources/Foundation/Data.swift index ef944911a8..961c7aa47d 100644 --- a/Sources/Foundation/Data.swift +++ b/Sources/Foundation/Data.swift @@ -35,8 +35,7 @@ extension Data { } } -// TODO: Allow bridging via protocol -extension Data /*: _ObjectiveCBridgeable */ { +extension Data : _ObjectiveCBridgeable { @_semantics("convertToObjectiveC") public func _bridgeToObjectiveC() -> NSData { return self.withUnsafeBytes { diff --git a/Tests/Foundation/TestDimension.swift b/Tests/Foundation/TestDimension.swift index 85c18c5ba8..07c508823d 100644 --- a/Tests/Foundation/TestDimension.swift +++ b/Tests/Foundation/TestDimension.swift @@ -17,7 +17,7 @@ class TestDimension: XCTestCase { original.encode(with: archiver) archiver.finishEncoding() - let unarchiver = NSKeyedUnarchiver(forReadingWith: Data(encodedData)) + let unarchiver = NSKeyedUnarchiver(forReadingWith: encodedData as Data) let decoded = Dimension(coder: unarchiver) XCTAssertNotNil(decoded) diff --git a/Tests/Foundation/TestNSAttributedString.swift b/Tests/Foundation/TestNSAttributedString.swift index 2d7df3cb10..2d7ecf730f 100644 --- a/Tests/Foundation/TestNSAttributedString.swift +++ b/Tests/Foundation/TestNSAttributedString.swift @@ -286,7 +286,7 @@ class TestNSAttributedString : XCTestCase { archiver.encode(string, forKey: NSKeyedArchiveRootObjectKey) archiver.finishEncoding() - let unarchiver = NSKeyedUnarchiver(forReadingWith: Data(data)) + let unarchiver = NSKeyedUnarchiver(forReadingWith: data as Data) unarchiver.requiresSecureCoding = true let unarchived = unarchiver.decodeObject(of: NSAttributedString.self, forKey: NSKeyedArchiveRootObjectKey) @@ -621,7 +621,7 @@ class TestNSMutableAttributedString : XCTestCase { archiver.encode(string, forKey: NSKeyedArchiveRootObjectKey) archiver.finishEncoding() - let unarchiver = NSKeyedUnarchiver(forReadingWith: Data(data)) + let unarchiver = NSKeyedUnarchiver(forReadingWith: data as Data) unarchiver.requiresSecureCoding = true let unarchived = unarchiver.decodeObject(of: NSMutableAttributedString.self, forKey: NSKeyedArchiveRootObjectKey) diff --git a/Tests/Foundation/TestNSString.swift b/Tests/Foundation/TestNSString.swift index 36900cdc8a..2b000b0abb 100644 --- a/Tests/Foundation/TestNSString.swift +++ b/Tests/Foundation/TestNSString.swift @@ -1197,31 +1197,31 @@ class TestNSString: LoopbackServerTest { do { let string = NSString(string: "this is an external string that should be representable by data") - let UTF8Data = try XCTUnwrap(string.data(using: String.Encoding.utf8.rawValue, allowLossyConversion: false))/* as NSData*/ - let UTF8Length = UTF8Data.count + let UTF8Data = try XCTUnwrap(string.data(using: String.Encoding.utf8.rawValue, allowLossyConversion: false)) as NSData + let UTF8Length = UTF8Data.length XCTAssertEqual(UTF8Length, 63, "NSString should successfully produce an external UTF8 representation with a length of 63 but got \(UTF8Length) bytes") - let UTF16Data = try XCTUnwrap(string.data(using: String.Encoding.utf16.rawValue, allowLossyConversion: false))/* as NSData*/ - let UTF16Length = UTF16Data.count + let UTF16Data = try XCTUnwrap(string.data(using: String.Encoding.utf16.rawValue, allowLossyConversion: false)) as NSData + let UTF16Length = UTF16Data.length XCTAssertEqual(UTF16Length, 128, "NSString should successfully produce an external UTF16 representation with a length of 128 but got \(UTF16Length) bytes") - let ISOLatin1Data = try XCTUnwrap(string.data(using: String.Encoding.isoLatin1.rawValue, allowLossyConversion: false))/* as NSData*/ - let ISOLatin1Length = ISOLatin1Data.count + let ISOLatin1Data = try XCTUnwrap(string.data(using: String.Encoding.isoLatin1.rawValue, allowLossyConversion: false)) as NSData + let ISOLatin1Length = ISOLatin1Data.length XCTAssertEqual(ISOLatin1Length, 63, "NSString should successfully produce an external ISOLatin1 representation with a length of 63 but got \(ISOLatin1Length) bytes") } do { let string = NSString(string: "🐢 encoding all the way down. 🐢🐢🐢") - let UTF8Data = try XCTUnwrap(string.data(using: String.Encoding.utf8.rawValue, allowLossyConversion: false))/* as NSData*/ - let UTF8Length = UTF8Data.count + let UTF8Data = try XCTUnwrap(string.data(using: String.Encoding.utf8.rawValue, allowLossyConversion: false)) as NSData + let UTF8Length = UTF8Data.length XCTAssertEqual(UTF8Length, 44, "NSString should successfully produce an external UTF8 representation with a length of 44 but got \(UTF8Length) bytes") - let UTF16Data = try XCTUnwrap(string.data(using: String.Encoding.utf16.rawValue, allowLossyConversion: false))/* as NSData*/ - let UTF16Length = UTF16Data.count + let UTF16Data = try XCTUnwrap(string.data(using: String.Encoding.utf16.rawValue, allowLossyConversion: false)) as NSData + let UTF16Length = UTF16Data.length XCTAssertEqual(UTF16Length, 74, "NSString should successfully produce an external UTF16 representation with a length of 74 but got \(UTF16Length) bytes") - let ISOLatin1Data = string.data(using: String.Encoding.isoLatin1.rawValue, allowLossyConversion: false)/* as NSData?*/ + let ISOLatin1Data = string.data(using: String.Encoding.isoLatin1.rawValue, allowLossyConversion: false) as NSData? XCTAssertNil(ISOLatin1Data) } } diff --git a/Tests/Foundation/TestSocketPort.swift b/Tests/Foundation/TestSocketPort.swift index 98ec2bb955..32366ea510 100644 --- a/Tests/Foundation/TestSocketPort.swift +++ b/Tests/Foundation/TestSocketPort.swift @@ -84,7 +84,7 @@ class TestSocketPort : XCTestCase { let received = expectation(description: "Message received") let delegate = TestPortDelegateWithBlock { message in - XCTAssertEqual(message.components as? [AnyHashable], [data._bridgeToObjectiveC()]) + XCTAssertEqual(message.components as? [AnyHashable], [data as NSData]) received.fulfill() } From bd05761738267016ed957d5ff37d96246b9641b3 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Fri, 9 Feb 2024 21:27:03 -0800 Subject: [PATCH 024/198] Clean up export of essentials, and stop warning about resources --- Package.swift | 3 +- Sources/Foundation/Date.swift | 2 -- Sources/Foundation/Essentials.swift | 6 ++++ .../FoundationNetworking/Resources/Info.plist | 28 ------------------- Sources/FoundationXML/Resources/Info.plist | 28 ------------------- 5 files changed, 7 insertions(+), 60 deletions(-) create mode 100644 Sources/Foundation/Essentials.swift delete mode 100644 Sources/FoundationNetworking/Resources/Info.plist delete mode 100644 Sources/FoundationXML/Resources/Info.plist diff --git a/Package.swift b/Package.swift index 736a677bba..c1c5e893ff 100644 --- a/Package.swift +++ b/Package.swift @@ -180,8 +180,7 @@ let package = Package( "XCTest" ], resources: [ - .copy("Tests/Foundation/Resources/Info.plist"), - .copy("Tests/Foundation/Resources/NSStringTestData.txt") + .copy("Foundation/Resources") ], swiftSettings: [ .define("NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT") diff --git a/Sources/Foundation/Date.swift b/Sources/Foundation/Date.swift index 65ea5c5c17..a931335bce 100644 --- a/Sources/Foundation/Date.swift +++ b/Sources/Foundation/Date.swift @@ -7,8 +7,6 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_exported import FoundationEssentials - @_implementationOnly import _CoreFoundation /** diff --git a/Sources/Foundation/Essentials.swift b/Sources/Foundation/Essentials.swift new file mode 100644 index 0000000000..2407e3763b --- /dev/null +++ b/Sources/Foundation/Essentials.swift @@ -0,0 +1,6 @@ + +// Re-export FoundationEssentials and Internationalization +@_exported import FoundationEssentials +@_exported import FoundationInternationalization + + diff --git a/Sources/FoundationNetworking/Resources/Info.plist b/Sources/FoundationNetworking/Resources/Info.plist deleted file mode 100644 index cc715d0504..0000000000 --- a/Sources/FoundationNetworking/Resources/Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - SwiftFoundationNetworking - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - SwiftFoundation - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSHumanReadableCopyright - Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors - NSPrincipalClass - - - diff --git a/Sources/FoundationXML/Resources/Info.plist b/Sources/FoundationXML/Resources/Info.plist deleted file mode 100644 index 7053d71976..0000000000 --- a/Sources/FoundationXML/Resources/Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - SwiftFoundationXML - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - SwiftFoundation - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSHumanReadableCopyright - Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors - NSPrincipalClass - - - From 11c49428c5453643c4d7b02ee5041135e7a395d9 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Sat, 10 Feb 2024 14:49:16 -0800 Subject: [PATCH 025/198] Use FoundationEssentials Locale --- Package.swift | 5 +- Sources/Foundation/Calendar.swift | 27 +- Sources/Foundation/Date.swift | 254 +------------- Sources/Foundation/DateInterval.swift | 184 ---------- Sources/Foundation/Locale.swift | 443 +------------------------ Sources/Foundation/NSLocale.swift | 336 +++++++++++++++---- Sources/Foundation/NSObjCRuntime.swift | 7 +- 7 files changed, 278 insertions(+), 978 deletions(-) diff --git a/Package.swift b/Package.swift index c1c5e893ff..f3bdf38d66 100644 --- a/Package.swift +++ b/Package.swift @@ -77,8 +77,9 @@ let package = Package( url: "https://github.com/apple/swift-foundation-icu", exact: "0.0.5"), .package( - url: "https://github.com/apple/swift-foundation", - branch: "main" +// url: "https://github.com/apple/swift-foundation", +// branch: "main" + path: "../swift-foundation" ), ], targets: [ diff --git a/Sources/Foundation/Calendar.swift b/Sources/Foundation/Calendar.swift index e3ae45a4b8..73fcf3196f 100644 --- a/Sources/Foundation/Calendar.swift +++ b/Sources/Foundation/Calendar.swift @@ -33,31 +33,8 @@ public struct Calendar : Hashable, Equatable, ReferenceConvertible, _MutableBoxi private var _autoupdating: Bool internal var _handle: _MutableHandle - /// Calendar supports many different kinds of calendars. Each is identified by an identifier here. - public enum Identifier { - /// The common calendar in Europe, the Western Hemisphere, and elsewhere. - case gregorian - - case buddhist - case chinese - case coptic - case ethiopicAmeteMihret - case ethiopicAmeteAlem - case hebrew - case iso8601 - case indian - case islamic - case islamicCivil - case japanese - case persian - case republicOfChina - - /// A simple tabular Islamic calendar using the astronomical/Thursday epoch of CE 622 July 15 - case islamicTabular - - /// The Islamic Umm al-Qura calendar used in Saudi Arabia. This is based on astronomical calculation, instead of tabular behavior. - case islamicUmmAlQura - } + // Temporary until we replace this struct + public typealias Identifier = FoundationEssentials.Calendar.Identifier /// An enumeration for the various components of a calendar date. /// diff --git a/Sources/Foundation/Date.swift b/Sources/Foundation/Date.swift index a931335bce..5b0461a6f9 100644 --- a/Sources/Foundation/Date.swift +++ b/Sources/Foundation/Date.swift @@ -9,249 +9,10 @@ @_implementationOnly import _CoreFoundation -/** - `Date` represents a single point in time. - - A `Date` is independent of a particular calendar or time zone. To represent a `Date` to a user, you must interpret it in the context of a `Calendar`. - */ -public struct Date : ReferenceConvertible, Comparable, Equatable, Sendable { - public typealias ReferenceType = NSDate - - fileprivate var _time: TimeInterval - - /// The number of seconds from 1 January 1970 to the reference date, 1 January 2001. - public static let timeIntervalBetween1970AndReferenceDate: TimeInterval = 978307200.0 - - /// The interval between 00:00:00 UTC on 1 January 2001 and the current date and time. - public static var timeIntervalSinceReferenceDate: TimeInterval { - return CFAbsoluteTimeGetCurrent() - } - - /// Returns a `Date` initialized to the current date and time. - public static var now: Date { Date() } - - /// Returns a `Date` initialized to the current date and time. - public init() { - _time = CFAbsoluteTimeGetCurrent() - } - - /// Returns a `Date` initialized relative to the current date and time by a given number of seconds. - public init(timeIntervalSinceNow: TimeInterval) { - self.init(timeIntervalSinceReferenceDate: timeIntervalSinceNow + CFAbsoluteTimeGetCurrent()) - } - - /// Returns a `Date` initialized relative to 00:00:00 UTC on 1 January 1970 by a given number of seconds. - public init(timeIntervalSince1970: TimeInterval) { - self.init(timeIntervalSinceReferenceDate: timeIntervalSince1970 - Date.timeIntervalBetween1970AndReferenceDate) - } - - /** - Returns a `Date` initialized relative to another given date by a given number of seconds. - - - Parameter timeInterval: The number of seconds to add to `date`. A negative value means the receiver will be earlier than `date`. - - Parameter date: The reference date. - */ - public init(timeInterval: TimeInterval, since date: Date) { - self.init(timeIntervalSinceReferenceDate: date.timeIntervalSinceReferenceDate + timeInterval) - } - - /// Returns a `Date` initialized relative to 00:00:00 UTC on 1 January 2001 by a given number of seconds. - public init(timeIntervalSinceReferenceDate ti: TimeInterval) { - _time = ti - } - - /** - Returns the interval between the date object and 00:00:00 UTC on 1 January 2001. - - This property's value is negative if the date object is earlier than the system's absolute reference date (00:00:00 UTC on 1 January 2001). - */ - public var timeIntervalSinceReferenceDate: TimeInterval { - return _time - } - - /** - Returns the interval between the receiver and another given date. - - - Parameter another: The date with which to compare the receiver. - - - Returns: The interval between the receiver and the `another` parameter. If the receiver is earlier than `anotherDate`, the return value is negative. If `anotherDate` is `nil`, the results are undefined. - - - SeeAlso: `timeIntervalSince1970` - - SeeAlso: `timeIntervalSinceNow` - - SeeAlso: `timeIntervalSinceReferenceDate` - */ - public func timeIntervalSince(_ date: Date) -> TimeInterval { - return self.timeIntervalSinceReferenceDate - date.timeIntervalSinceReferenceDate - } - - /** - The time interval between the date and the current date and time. - - If the date is earlier than the current date and time, this property's value is negative. - - - SeeAlso: `timeIntervalSince(_:)` - - SeeAlso: `timeIntervalSince1970` - - SeeAlso: `timeIntervalSinceReferenceDate` - */ - public var timeIntervalSinceNow: TimeInterval { - return self.timeIntervalSinceReferenceDate - CFAbsoluteTimeGetCurrent() - } - - /** - The interval between the date object and 00:00:00 UTC on 1 January 1970. - - This property's value is negative if the date object is earlier than 00:00:00 UTC on 1 January 1970. - - - SeeAlso: `timeIntervalSince(_:)` - - SeeAlso: `timeIntervalSinceNow` - - SeeAlso: `timeIntervalSinceReferenceDate` - */ - public var timeIntervalSince1970: TimeInterval { - return self.timeIntervalSinceReferenceDate + Date.timeIntervalBetween1970AndReferenceDate - } - - /// Return a new `Date` by adding a `TimeInterval` to this `Date`. - /// - /// - parameter timeInterval: The value to add, in seconds. - /// - warning: This only adjusts an absolute value. If you wish to add calendrical concepts like hours, days, months then you must use a `Calendar`. That will take into account complexities like daylight saving time, months with different numbers of days, and more. - public func addingTimeInterval(_ timeInterval: TimeInterval) -> Date { - return self + timeInterval - } - - /// Add a `TimeInterval` to this `Date`. - /// - /// - parameter timeInterval: The value to add, in seconds. - /// - warning: This only adjusts an absolute value. If you wish to add calendrical concepts like hours, days, months then you must use a `Calendar`. That will take into account complexities like daylight saving time, months with different numbers of days, and more. - public mutating func addTimeInterval(_ timeInterval: TimeInterval) { - self += timeInterval - } - - /** - Creates and returns a Date value representing a date in the distant future. - - The distant future is in terms of centuries. - */ - public static let distantFuture = Date(timeIntervalSinceReferenceDate: 63113904000.0) - - /** - Creates and returns a Date value representing a date in the distant past. - - The distant past is in terms of centuries. - */ - public static let distantPast = Date(timeIntervalSinceReferenceDate: -63114076800.0) - - public func hash(into hasher: inout Hasher) { - hasher.combine(_time) - } - - /// Compare two `Date` values. - public func compare(_ other: Date) -> ComparisonResult { - if _time < other.timeIntervalSinceReferenceDate { - return .orderedAscending - } else if _time > other.timeIntervalSinceReferenceDate { - return .orderedDescending - } else { - return .orderedSame - } - } - - /// Returns true if the two `Date` values represent the same point in time. - public static func ==(lhs: Date, rhs: Date) -> Bool { - return lhs.timeIntervalSinceReferenceDate == rhs.timeIntervalSinceReferenceDate - } - - /// Returns true if the left hand `Date` is earlier in time than the right hand `Date`. - public static func <(lhs: Date, rhs: Date) -> Bool { - return lhs.timeIntervalSinceReferenceDate < rhs.timeIntervalSinceReferenceDate - } - - /// Returns true if the left hand `Date` is later in time than the right hand `Date`. - public static func >(lhs: Date, rhs: Date) -> Bool { - return lhs.timeIntervalSinceReferenceDate > rhs.timeIntervalSinceReferenceDate - } - - /// Returns a `Date` with a specified amount of time added to it. - public static func +(lhs: Date, rhs: TimeInterval) -> Date { - return Date(timeIntervalSinceReferenceDate: lhs.timeIntervalSinceReferenceDate + rhs) - } - - /// Returns a `Date` with a specified amount of time subtracted from it. - public static func -(lhs: Date, rhs: TimeInterval) -> Date { - return Date(timeIntervalSinceReferenceDate: lhs.timeIntervalSinceReferenceDate - rhs) - } - - /// Add a `TimeInterval` to a `Date`. - /// - /// - warning: This only adjusts an absolute value. If you wish to add calendrical concepts like hours, days, months then you must use a `Calendar`. That will take into account complexities like daylight saving time, months with different numbers of days, and more. - public static func +=(lhs: inout Date, rhs: TimeInterval) { - lhs = lhs + rhs - } - - /// Subtract a `TimeInterval` from a `Date`. - /// - /// - warning: This only adjusts an absolute value. If you wish to add calendrical concepts like hours, days, months then you must use a `Calendar`. That will take into account complexities like daylight saving time, months with different numbers of days, and more. - public static func -=(lhs: inout Date, rhs: TimeInterval) { - lhs = lhs - rhs - } - - public typealias Stride = TimeInterval - - /// Returns the `TimeInterval` between this `Date` and another given date. - /// - /// - returns: The interval between the receiver and the another parameter. If the receiver is earlier than `other`, the return value is negative. - public func distance(to other: Date) -> TimeInterval { - return other.timeIntervalSince(self) - } - - /// Creates a new date value by adding a `TimeInterval` to this `Date`. - /// - /// - warning: This only adjusts an absolute value. If you wish to add calendrical concepts like hours, days, months then you must use a `Calendar`. That will take into account complexities like daylight saving time, months with different numbers of days, and more. - public func advanced(by n: TimeInterval) -> Date { - return self.addingTimeInterval(n) - } -} - -extension Date : CustomDebugStringConvertible, CustomStringConvertible, CustomReflectable { - /** - A string representation of the date object (read-only). - - The representation is useful for debugging only. - - There are a number of options to acquire a formatted string for a date including: date formatters (see - [NSDateFormatter](//apple_ref/occ/cl/NSDateFormatter) and [Data Formatting Guide](//apple_ref/doc/uid/10000029i)), and the `Date` function `description(locale:)`. - */ - public var description: String { - // Defer to NSDate for description - return NSDate(timeIntervalSinceReferenceDate: _time).description - } - - /** - Returns a string representation of the receiver using the given - locale. - - - Parameter locale: A `Locale`. If you pass `nil`, `Date` formats the date in the same way as the `description` property. - - - Returns: A string representation of the `Date`, using the given locale, or if the locale argument is `nil`, in the international format `YYYY-MM-DD HH:MM:SS ±HHMM`, where `±HHMM` represents the time zone offset in hours and minutes from UTC (for example, "`2001-03-24 10:45:32 +0600`"). - */ - public func description(with locale: Locale?) -> String { - return NSDate(timeIntervalSinceReferenceDate: _time).description(with: locale) - } - - public var debugDescription: String { - return description - } - - public var customMirror: Mirror { - var c: [(label: String?, value: Any)] = [] - c.append((label: "timeIntervalSinceReferenceDate", value: timeIntervalSinceReferenceDate)) - return Mirror(self, children: c, displayStyle: .struct) - } -} - extension Date : _ObjectiveCBridgeable { @_semantics("convertToObjectiveC") public func _bridgeToObjectiveC() -> NSDate { - return NSDate(timeIntervalSinceReferenceDate: _time) + return NSDate(timeIntervalSinceReferenceDate: timeIntervalSinceReferenceDate) } public static func _forceBridgeFromObjectiveC(_ x: NSDate, result: inout Date?) { @@ -280,16 +41,3 @@ extension Date : CustomPlaygroundDisplayConvertible { return df.string(from: self) } } - -extension Date : Codable { - public init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - let timestamp = try container.decode(Double.self) - self.init(timeIntervalSinceReferenceDate: timestamp) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(self.timeIntervalSinceReferenceDate) - } -} diff --git a/Sources/Foundation/DateInterval.swift b/Sources/Foundation/DateInterval.swift index 6748060b83..02b790f1f7 100644 --- a/Sources/Foundation/DateInterval.swift +++ b/Sources/Foundation/DateInterval.swift @@ -12,170 +12,6 @@ @_implementationOnly import _CoreFoundation -/// DateInterval represents a closed date interval in the form of [startDate, endDate]. It is possible for the start and end dates to be the same with a duration of 0. DateInterval does not support reverse intervals i.e. intervals where the duration is less than 0 and the end date occurs earlier in time than the start date. -public struct DateInterval : ReferenceConvertible, Comparable, Sendable, Hashable { - public typealias ReferenceType = NSDateInterval - - /// The start date. - public var start: Date - - /// The end date. - /// - /// - precondition: `end >= start` - public var end: Date { - get { - return start + duration - } - set { - precondition(newValue >= start, "Reverse intervals are not allowed") - duration = newValue.timeIntervalSinceReferenceDate - start.timeIntervalSinceReferenceDate - } - } - - /// The duration. - /// - /// - precondition: `duration >= 0` - public var duration: TimeInterval { - willSet { - precondition(newValue >= 0, "Negative durations are not allowed") - } - } - - /// Initializes a `DateInterval` with start and end dates set to the current date and the duration set to `0`. - public init() { - let d = Date() - start = d - duration = 0 - } - - /// Initialize a `DateInterval` with the specified start and end date. - /// - /// - precondition: `end >= start` - public init(start: Date, end: Date) { - precondition(end >= start, "Reverse intervals are not allowed") - self.start = start - duration = end.timeIntervalSince(start) - } - - /// Initialize a `DateInterval` with the specified start date and duration. - /// - /// - precondition: `duration >= 0` - public init(start: Date, duration: TimeInterval) { - precondition(duration >= 0, "Negative durations are not allowed") - self.start = start - self.duration = duration - } - - /** - Compare two DateIntervals. - - This method prioritizes ordering by start date. If the start dates are equal, then it will order by duration. - e.g. Given intervals a and b - ``` - a. |-----| - b. |-----| - ``` - - `a.compare(b)` would return `.OrderedAscending` because a's start date is earlier in time than b's start date. - - In the event that the start dates are equal, the compare method will attempt to order by duration. - e.g. Given intervals c and d - ``` - c. |-----| - d. |---| - ``` - `c.compare(d)` would result in `.OrderedDescending` because c is longer than d. - - If both the start dates and the durations are equal, then the intervals are considered equal and `.OrderedSame` is returned as the result. - */ - public func compare(_ dateInterval: DateInterval) -> ComparisonResult { - let result = start.compare(dateInterval.start) - if result == .orderedSame { - if self.duration < dateInterval.duration { return .orderedAscending } - if self.duration > dateInterval.duration { return .orderedDescending } - return .orderedSame - } - return result - } - - /// Returns `true` if `self` intersects the `dateInterval`. - public func intersects(_ dateInterval: DateInterval) -> Bool { - return contains(dateInterval.start) || contains(dateInterval.end) || dateInterval.contains(start) || dateInterval.contains(end) - } - - /// Returns a DateInterval that represents the interval where the given date interval and the current instance intersect. - /// - /// In the event that there is no intersection, the method returns nil. - public func intersection(with dateInterval: DateInterval) -> DateInterval? { - if !intersects(dateInterval) { - return nil - } - - if self == dateInterval { - return self - } - - let timeIntervalForSelfStart = start.timeIntervalSinceReferenceDate - let timeIntervalForSelfEnd = end.timeIntervalSinceReferenceDate - let timeIntervalForGivenStart = dateInterval.start.timeIntervalSinceReferenceDate - let timeIntervalForGivenEnd = dateInterval.end.timeIntervalSinceReferenceDate - - let resultStartDate : Date - if timeIntervalForGivenStart >= timeIntervalForSelfStart { - resultStartDate = dateInterval.start - } else { - // self starts after given - resultStartDate = start - } - - let resultEndDate : Date - if timeIntervalForGivenEnd >= timeIntervalForSelfEnd { - resultEndDate = end - } else { - // given ends before self - resultEndDate = dateInterval.end - } - - return DateInterval(start: resultStartDate, end: resultEndDate) - } - - /// Returns `true` if `self` contains `date`. - public func contains(_ date: Date) -> Bool { - return (start...end).contains(date) - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(start) - hasher.combine(duration) - } - - public static func ==(lhs: DateInterval, rhs: DateInterval) -> Bool { - return lhs.start == rhs.start && lhs.duration == rhs.duration - } - - public static func <(lhs: DateInterval, rhs: DateInterval) -> Bool { - return lhs.compare(rhs) == .orderedAscending - } -} - -extension DateInterval : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - public var description: String { - return "(Start Date) \(start) + (Duration) \(duration) seconds = (End Date) \(end)" - } - - public var debugDescription: String { - return description - } - - public var customMirror: Mirror { - var c: [(label: String?, value: Any)] = [] - c.append((label: "start", value: start)) - c.append((label: "end", value: end)) - c.append((label: "duration", value: duration)) - return Mirror(self, children: c, displayStyle: .struct) - } -} - extension DateInterval : _ObjectiveCBridgeable { public static func _isBridgedToObjectiveC() -> Bool { return true @@ -207,23 +43,3 @@ extension DateInterval : _ObjectiveCBridgeable { return result! } } - -extension DateInterval : Codable { - enum CodingKeys: String, CodingKey { - case start - case duration - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let start = try container.decode(Date.self, forKey: .start) - let duration = try container.decode(TimeInterval.self, forKey: .duration) - self.init(start: start, duration: duration) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(self.start, forKey: .start) - try container.encode(self.duration, forKey: .duration) - } -} diff --git a/Sources/Foundation/Locale.swift b/Sources/Foundation/Locale.swift index dc54bd85b9..9492a7f7a1 100644 --- a/Sources/Foundation/Locale.swift +++ b/Sources/Foundation/Locale.swift @@ -17,429 +17,9 @@ internal func __NSLocaleIsAutoupdating(_ locale: NSLocale) -> Bool { } internal func __NSLocaleCurrent() -> NSLocale { - return CFLocaleCopyCurrent()._nsObject + NSLocale(locale: Locale.current) } -/** - `Locale` encapsulates information about linguistic, cultural, and technological conventions and standards. Examples of information encapsulated by a locale include the symbol used for the decimal separator in numbers and the way dates are formatted. - - Locales are typically used to provide, format, and interpret information about and according to the user’s customs and preferences. They are frequently used in conjunction with formatters. Although you can use many locales, you usually use the one associated with the current user. - */ -public struct Locale : CustomStringConvertible, CustomDebugStringConvertible, Hashable, Equatable, ReferenceConvertible { - public typealias ReferenceType = NSLocale - - public typealias LanguageDirection = NSLocale.LanguageDirection - - internal var _wrapped : NSLocale - internal var _autoupdating : Bool - - /// Returns the user's current locale. - public static var current : Locale { - return Locale(adoptingReference: __NSLocaleCurrent(), autoupdating: false) - } - - /// Returns a locale which tracks the user's current preferences. - /// - /// If mutated, this Locale will no longer track the user's preferences. - /// - /// - note: The autoupdating Locale will only compare equal to another autoupdating Locale. - public static var autoupdatingCurrent : Locale { - // swift-corelibs-foundation does not yet support autoupdating, but we can return the current locale (which will not change). - return Locale(adoptingReference: __NSLocaleCurrent(), autoupdating: true) - } - - @available(*, unavailable, message: "Consider using the user's locale or nil instead, depending on use case") - public static var system : Locale { fatalError() } - - // MARK: - - // - - /// Return a locale with the specified identifier. - public init(identifier: String) { - _wrapped = NSLocale(localeIdentifier: identifier) - _autoupdating = false - } - - internal init(reference: NSLocale) { - _wrapped = reference.copy() as! NSLocale - if __NSLocaleIsAutoupdating(reference) { - _autoupdating = true - } else { - _autoupdating = false - } - } - - private init(adoptingReference reference: NSLocale, autoupdating: Bool) { - _wrapped = reference - _autoupdating = autoupdating - } - - // MARK: - - // - - /// Returns a localized string for a specified identifier. - /// - /// For example, in the "en" locale, the result for `"es"` is `"Spanish"`. - public func localizedString(forIdentifier identifier: String) -> String? { - return _wrapped.displayName(forKey: .identifier, value: identifier) - } - - /// Returns a localized string for a specified language code. - /// - /// For example, in the "en" locale, the result for `"es"` is `"Spanish"`. - public func localizedString(forLanguageCode languageCode: String) -> String? { - return _wrapped.displayName(forKey: .languageCode, value: languageCode) - } - - /// Returns a localized string for a specified region code. - /// - /// For example, in the "en" locale, the result for `"fr"` is `"France"`. - public func localizedString(forRegionCode regionCode: String) -> String? { - return _wrapped.displayName(forKey: .countryCode, value: regionCode) - } - - /// Returns a localized string for a specified script code. - /// - /// For example, in the "en" locale, the result for `"Hans"` is `"Simplified Han"`. - public func localizedString(forScriptCode scriptCode: String) -> String? { - return _wrapped.displayName(forKey: .scriptCode, value: scriptCode) - } - - /// Returns a localized string for a specified variant code. - /// - /// For example, in the "en" locale, the result for `"POSIX"` is `"Computer"`. - public func localizedString(forVariantCode variantCode: String) -> String? { - return _wrapped.displayName(forKey: .variantCode, value: variantCode) - } - - /// Returns a localized string for a specified `Calendar.Identifier`. - /// - /// For example, in the "en" locale, the result for `.buddhist` is `"Buddhist Calendar"`. - public func localizedString(for calendarIdentifier: Calendar.Identifier) -> String? { - // NSLocale doesn't export a constant for this - let result = CFLocaleCopyDisplayNameForPropertyValue(unsafeBitCast(_wrapped, to: CFLocale.self), kCFLocaleCalendarIdentifier, Calendar._toNSCalendarIdentifier(calendarIdentifier).rawValue._cfObject)._swiftObject - return result - } - - /// Returns a localized string for a specified ISO 4217 currency code. - /// - /// For example, in the "en" locale, the result for `"USD"` is `"US Dollar"`. - /// - seealso: `Locale.isoCurrencyCodes` - public func localizedString(forCurrencyCode currencyCode: String) -> String? { - return _wrapped.displayName(forKey: .currencyCode, value: currencyCode) - } - - /// Returns a localized string for a specified ICU collation identifier. - /// - /// For example, in the "en" locale, the result for `"phonebook"` is `"Phonebook Sort Order"`. - public func localizedString(forCollationIdentifier collationIdentifier: String) -> String? { - return _wrapped.displayName(forKey: .collationIdentifier, value: collationIdentifier) - } - - /// Returns a localized string for a specified ICU collator identifier. - public func localizedString(forCollatorIdentifier collatorIdentifier: String) -> String? { - return _wrapped.displayName(forKey: .collatorIdentifier, value: collatorIdentifier) - } - - // MARK: - - // - - /// Returns the identifier of the locale. - public var identifier: String { - return _wrapped.localeIdentifier - } - - /// Returns the language code of the locale, or nil if has none. - /// - /// For example, for the locale "zh-Hant-HK", returns "zh". - public var languageCode: String? { - return _wrapped.object(forKey: .languageCode) as? String - } - - /// Returns the region code of the locale, or nil if it has none. - /// - /// For example, for the locale "zh-Hant-HK", returns "HK". - public var regionCode: String? { - // n.b. this is called countryCode in ObjC - if let result = _wrapped.object(forKey: .countryCode) as? String { - if result.isEmpty { - return nil - } else { - return result - } - } else { - return nil - } - } - - /// Returns the script code of the locale, or nil if has none. - /// - /// For example, for the locale "zh-Hant-HK", returns "Hant". - public var scriptCode: String? { - return _wrapped.object(forKey: .scriptCode) as? String - } - - /// Returns the variant code for the locale, or nil if it has none. - /// - /// For example, for the locale "en_POSIX", returns "POSIX". - public var variantCode: String? { - if let result = _wrapped.object(forKey: .variantCode) as? String { - if result.isEmpty { - return nil - } else { - return result - } - } else { - return nil - } - } - - /// Returns the exemplar character set for the locale, or nil if has none. - public var exemplarCharacterSet: CharacterSet? { - return _wrapped.object(forKey: .exemplarCharacterSet) as? CharacterSet - } - - /// Returns the calendar for the locale, or the Gregorian calendar as a fallback. - public var calendar: Calendar { - // NSLocale should not return nil here - if let result = _wrapped.object(forKey: .calendar) as? Calendar { - return result - } else { - return Calendar(identifier: .gregorian) - } - } - - /// Returns the collation identifier for the locale, or nil if it has none. - /// - /// For example, for the locale "en_US@collation=phonebook", returns "phonebook". - public var collationIdentifier: String? { - return _wrapped.object(forKey: .collationIdentifier) as? String - } - - /// Returns true if the locale uses the metric system. - /// - /// -seealso: MeasurementFormatter - public var usesMetricSystem: Bool { - // NSLocale should not return nil here, but just in case - if let result = _wrapped.object(forKey: .usesMetricSystem) as? Bool { - return result - } else { - return false - } - } - - /// Returns the decimal separator of the locale. - /// - /// For example, for "en_US", returns ".". - public var decimalSeparator: String? { - return _wrapped.object(forKey: .decimalSeparator) as? String - } - - /// Returns the grouping separator of the locale. - /// - /// For example, for "en_US", returns ",". - public var groupingSeparator: String? { - return _wrapped.object(forKey: .groupingSeparator) as? String - } - - /// Returns the currency symbol of the locale. - /// - /// For example, for "zh-Hant-HK", returns "HK$". - public var currencySymbol: String? { - return _wrapped.object(forKey: .currencySymbol) as? String - } - - /// Returns the currency code of the locale. - /// - /// For example, for "zh-Hant-HK", returns "HKD". - public var currencyCode: String? { - return _wrapped.object(forKey: .currencyCode) as? String - } - - /// Returns the collator identifier of the locale. - public var collatorIdentifier: String? { - return _wrapped.object(forKey: .collatorIdentifier) as? String - } - - /// Returns the quotation begin delimiter of the locale. - /// - /// For example, returns `“` for "en_US", and `「` for "zh-Hant-HK". - public var quotationBeginDelimiter: String? { - return _wrapped.object(forKey: .quotationBeginDelimiterKey) as? String - } - - /// Returns the quotation end delimiter of the locale. - /// - /// For example, returns `”` for "en_US", and `」` for "zh-Hant-HK". - public var quotationEndDelimiter: String? { - return _wrapped.object(forKey: .quotationEndDelimiterKey) as? String - } - - /// Returns the alternate quotation begin delimiter of the locale. - /// - /// For example, returns `‘` for "en_US", and `『` for "zh-Hant-HK". - public var alternateQuotationBeginDelimiter: String? { - return _wrapped.object(forKey: .alternateQuotationBeginDelimiterKey) as? String - } - - /// Returns the alternate quotation end delimiter of the locale. - /// - /// For example, returns `’` for "en_US", and `』` for "zh-Hant-HK". - public var alternateQuotationEndDelimiter: String? { - return _wrapped.object(forKey: .alternateQuotationEndDelimiterKey) as? String - } - - // MARK: - - // - - /// Returns a list of available `Locale` identifiers. - public static var availableIdentifiers: [String] { - return NSLocale.availableLocaleIdentifiers - } - - /// Returns a list of available `Locale` language codes. - public static var isoLanguageCodes: [String] { - return NSLocale.isoLanguageCodes - } - - /// Returns a list of available `Locale` region codes. - public static var isoRegionCodes: [String] { - // This was renamed from Obj-C - return NSLocale.isoCountryCodes - } - - /// Returns a list of available `Locale` currency codes. - public static var isoCurrencyCodes: [String] { - return NSLocale.isoCurrencyCodes - } - - /// Returns a list of common `Locale` currency codes. - public static var commonISOCurrencyCodes: [String] { - return NSLocale.commonISOCurrencyCodes - } - - /// Returns a list of the user's preferred languages. - /// - /// - note: `Bundle` is responsible for determining the language that your application will run in, based on the result of this API and combined with the languages your application supports. - /// - seealso: `Bundle.preferredLocalizations(from:)` - /// - seealso: `Bundle.preferredLocalizations(from:forPreferences:)` - public static var preferredLanguages: [String] { - return NSLocale.preferredLanguages - } - - /// Returns a dictionary that splits an identifier into its component pieces. - public static func components(fromIdentifier string: String) -> [String : String] { - return NSLocale.components(fromLocaleIdentifier: string) - } - - /// Constructs an identifier from a dictionary of components. - public static func identifier(fromComponents components: [String : String]) -> String { - return NSLocale.localeIdentifier(fromComponents: components) - } - - /// Returns a canonical identifier from the given string. - public static func canonicalIdentifier(from string: String) -> String { - return NSLocale.canonicalLocaleIdentifier(from: string) - } - - /// Returns a canonical language identifier from the given string. - public static func canonicalLanguageIdentifier(from string: String) -> String { - return NSLocale.canonicalLanguageIdentifier(from: string) - } - - /// Returns the `Locale` identifier from a given Windows locale code, or nil if it could not be converted. - public static func identifier(fromWindowsLocaleCode code: Int) -> String? { - return NSLocale.localeIdentifier(fromWindowsLocaleCode: UInt32(code)) - } - - /// Returns the Windows locale code from a given identifier, or nil if it could not be converted. - public static func windowsLocaleCode(fromIdentifier identifier: String) -> Int? { - let result = NSLocale.windowsLocaleCode(fromLocaleIdentifier: identifier) - if result == 0 { - return nil - } else { - return Int(result) - } - } - - /// Returns the character direction for a specified language code. - public static func characterDirection(forLanguage isoLangCode: String) -> Locale.LanguageDirection { - return NSLocale.characterDirection(forLanguage: isoLangCode) - } - - /// Returns the line direction for a specified language code. - public static func lineDirection(forLanguage isoLangCode: String) -> Locale.LanguageDirection { - return NSLocale.lineDirection(forLanguage: isoLangCode) - } - - // MARK: - - - @available(*, unavailable, renamed: "init(identifier:)") - public init(localeIdentifier: String) { fatalError() } - - @available(*, unavailable, renamed: "identifier") - public var localeIdentifier: String { fatalError() } - - @available(*, unavailable, renamed: "localizedString(forIdentifier:)") - public func localizedString(forLocaleIdentifier localeIdentifier: String) -> String { fatalError() } - - @available(*, unavailable, renamed: "availableIdentifiers") - public static var availableLocaleIdentifiers: [String] { fatalError() } - - @available(*, unavailable, renamed: "components(fromIdentifier:)") - public static func components(fromLocaleIdentifier string: String) -> [String : String] { fatalError() } - - @available(*, unavailable, renamed: "identifier(fromComponents:)") - public static func localeIdentifier(fromComponents dict: [String : String]) -> String { fatalError() } - - @available(*, unavailable, renamed: "canonicalIdentifier(from:)") - public static func canonicalLocaleIdentifier(from string: String) -> String { fatalError() } - - @available(*, unavailable, renamed: "identifier(fromWindowsLocaleCode:)") - public static func localeIdentifier(fromWindowsLocaleCode lcid: UInt32) -> String? { fatalError() } - - @available(*, unavailable, renamed: "windowsLocaleCode(fromIdentifier:)") - public static func windowsLocaleCode(fromLocaleIdentifier localeIdentifier: String) -> UInt32 { fatalError() } - - @available(*, unavailable, message: "use regionCode instead") - public var countryCode: String { fatalError() } - - @available(*, unavailable, message: "use localizedString(forRegionCode:) instead") - public func localizedString(forCountryCode countryCode: String) -> String { fatalError() } - - @available(*, unavailable, renamed: "isoRegionCodes") - public static var isoCountryCodes: [String] { fatalError() } - - // MARK: - - // - - public var description: String { - return _wrapped.description - } - - public var debugDescription : String { - return _wrapped.debugDescription - } - - public func hash(into hasher: inout Hasher) { - if _autoupdating { - hasher.combine(false) - } else { - hasher.combine(true) - hasher.combine(_wrapped) - } - } - - public static func ==(lhs: Locale, rhs: Locale) -> Bool { - if lhs._autoupdating || rhs._autoupdating { - return lhs._autoupdating == rhs._autoupdating - } else { - return lhs._wrapped.isEqual(rhs._wrapped) - } - } -} - - extension Locale : _ObjectiveCBridgeable { public static func _isBridgedToObjectiveC() -> Bool { return true @@ -447,7 +27,7 @@ extension Locale : _ObjectiveCBridgeable { @_semantics("convertToObjectiveC") public func _bridgeToObjectiveC() -> NSLocale { - return _wrapped + return NSLocale(locale: Locale.current) } public static func _forceBridgeFromObjectiveC(_ input: NSLocale, result: inout Locale?) { @@ -457,7 +37,7 @@ extension Locale : _ObjectiveCBridgeable { } public static func _conditionallyBridgeFromObjectiveC(_ input: NSLocale, result: inout Locale?) -> Bool { - result = Locale(reference: input) + result = input._locale return true } @@ -467,20 +47,3 @@ extension Locale : _ObjectiveCBridgeable { return result! } } - -extension Locale : Codable { - private enum CodingKeys : Int, CodingKey { - case identifier - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let identifier = try container.decode(String.self, forKey: .identifier) - self.init(identifier: identifier) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(self.identifier, forKey: .identifier) - } -} diff --git a/Sources/Foundation/NSLocale.swift b/Sources/Foundation/NSLocale.swift index 5d3d726f95..87f16852d8 100644 --- a/Sources/Foundation/NSLocale.swift +++ b/Sources/Foundation/NSLocale.swift @@ -9,33 +9,233 @@ @_implementationOnly import _CoreFoundation +@_exported import FoundationEssentials +@_exported import FoundationInternationalization open class NSLocale: NSObject, NSCopying, NSSecureCoding { - typealias CFType = CFLocale - - // struct __CFLocale - private var _base = _CFInfo(typeID: CFLocaleGetTypeID()) - private var _identifier: UnsafeMutableRawPointer? = nil - private var _cache: UnsafeMutableRawPointer? = nil - private var _prefs: UnsafeMutableRawPointer? = nil - private var _lock: _NSCFLock = _NSCFLockInit() - private var _nullLocale: Bool = false - - internal final var _cfObject: CFType { - return unsafeBitCast(self, to: CFType.self) + var _locale: Locale + + internal init(locale: Locale) { + _locale = locale } open func object(forKey key: NSLocale.Key) -> Any? { - return __SwiftValue.fetch(CFLocaleGetValue(_cfObject, key.rawValue._cfObject)) + switch key { + case .identifier: return self.localeIdentifier + case .languageCode: return self.languageCode + case .countryCode: return self.countryCode + case .scriptCode: return self.scriptCode + case .variantCode: return self.variantCode +#if FOUNDATION_FRAMEWORK + case .exemplarCharacterSet: return self.exemplarCharacterSet +#endif + case .calendarIdentifier: return self.calendarIdentifier + case .calendar: return _locale.calendar + case .collationIdentifier: return self.collationIdentifier + case .usesMetricSystem: return self.usesMetricSystem + // Foundation framework only + /* + case .measurementSystem: + switch locale.measurementSystem { + case .us: return NSLocaleMeasurementSystemUS + case .uk: return NSLocaleMeasurementSystemUK + case .metric: return NSLocaleMeasurementSystemMetric + default: return NSLocaleMeasurementSystemMetric + } + case .temperatureUnit: + switch _locale.temperatureUnit { + case .celsius: return NSLocaleTemperatureUnitCelsius + case .fahrenheit: return NSLocaleTemperatureUnitFahrenheit + default: return NSLocaleTemperatureUnitCelsius + } + */ + case .decimalSeparator: return self.decimalSeparator + case .groupingSeparator: return self.groupingSeparator + case .currencySymbol: return self.currencySymbol + case .currencyCode: return self.currencyCode + // Foundation framework only + /* + case .collatorIdentifier, .cfLocaleCollatorID: return self.collatorIdentifier + */ + case .quotationBeginDelimiterKey: return self.quotationBeginDelimiter + case .quotationEndDelimiterKey: return self.quotationEndDelimiter + case .alternateQuotationBeginDelimiterKey: return self.alternateQuotationBeginDelimiter + case .alternateQuotationEndDelimiterKey: return self.alternateQuotationEndDelimiter + // Foundation framework only + /* + case .languageIdentifier: return self.languageIdentifier + */ + default: + return nil + } } open func displayName(forKey key: Key, value: String) -> String? { - return CFLocaleCopyDisplayNameForPropertyValue(_cfObject, key.rawValue._cfObject, value._cfObject)?._swiftObject + guard let value = value as? String else { + return nil + } + + switch key { + case .identifier: return self._nullableLocalizedString(forLocaleIdentifier: value) + case .languageCode: return self.localizedString(forLanguageCode: value) + case .countryCode: return self.localizedString(forCountryCode: value) + case .scriptCode: return self.localizedString(forScriptCode: value) + case .variantCode: return self.localizedString(forVariantCode: value) +#if FOUNDATION_FRAMEWORK + case .exemplarCharacterSet: return nil +#endif + case .calendarIdentifier, .calendar: return self.localizedString(forCalendarIdentifier: value) + case .collationIdentifier: return self.localizedString(forCollationIdentifier: value) + case .usesMetricSystem: return nil + case .measurementSystem: return nil + case .decimalSeparator: return nil + case .groupingSeparator: return nil + case .currencySymbol: return self.localizedString(forCurrencySymbol: value) + case .currencyCode: return self.localizedString(forCurrencyCode: value) + case .collatorIdentifier: return self.localizedString(forCollatorIdentifier: value) + case .quotationBeginDelimiterKey: return nil + case .quotationEndDelimiterKey: return nil + case .alternateQuotationBeginDelimiterKey: return nil + case .alternateQuotationEndDelimiterKey: return nil + default: + return nil + } + } + + var localeIdentifier: String { + _locale.identifier + } + + var languageCode: String { + _locale.languageCode ?? "" + } + + var languageIdentifier: String { + let langIdentifier = _locale.language._components._identifier + let localeWithOnlyLanguage = Locale(identifier: langIdentifier) + return localeWithOnlyLanguage.identifier(.bcp47) + } + + var countryCode: String? { + _locale.region?.identifier + } + + var regionCode: String? { + _locale.region?.identifier + } + + var scriptCode: String? { + _locale.scriptCode + } + + var variantCode: String? { + _locale.variantCode + } + + var calendarIdentifier: String { + _locale.__calendarIdentifier._cfCalendarIdentifier + } + + var collationIdentifier: String? { + _locale.collationIdentifier + } + + var decimalSeparator: String { + _locale.decimalSeparator ?? "" + } + + var groupingSeparator: String { + _locale.groupingSeparator ?? "" + } + + var currencySymbol: String { + _locale.currencySymbol ?? "" + } + + var currencyCode: String? { + _locale.currencyCode + } + + var collatorIdentifier: String { + _locale.collatorIdentifier ?? "" + } + + var quotationBeginDelimiter: String { + _locale.quotationBeginDelimiter ?? "" + } + + var quotationEndDelimiter: String { + _locale.quotationEndDelimiter ?? "" + } + + var alternateQuotationBeginDelimiter: String { + _locale.alternateQuotationBeginDelimiter ?? "" + } + + var alternateQuotationEndDelimiter: String { + _locale.alternateQuotationEndDelimiter ?? "" + } + +#if FOUNDATION_FRAMEWORK + var exemplarCharacterSet: CharacterSet { + _locale.exemplarCharacterSet ?? CharacterSet() + } +#endif + + var usesMetricSystem: Bool { + _locale.usesMetricSystem + } + + func localizedString(forLocaleIdentifier localeIdentifier: String) -> String { + _nullableLocalizedString(forLocaleIdentifier: localeIdentifier) ?? "" } + /// Some CFLocale APIs require the result to remain `nullable`. They can call this directly, where the `localizedString(forLocaleIdentifier:)` entry point can remain (correctly) non-nullable. + private func _nullableLocalizedString(forLocaleIdentifier localeIdentifier: String) -> String? { + _locale.localizedString(forIdentifier: localeIdentifier) + } + + func localizedString(forLanguageCode languageCode: String) -> String? { + _locale.localizedString(forLanguageCode: languageCode) + } + + func localizedString(forCountryCode countryCode: String) -> String? { + _locale.localizedString(forRegionCode: countryCode) + } + + func localizedString(forScriptCode scriptCode: String) -> String? { + _locale.localizedString(forScriptCode: scriptCode) + } + + func localizedString(forVariantCode variantCode: String) -> String? { + _locale.localizedString(forVariantCode: variantCode) + } + + func localizedString(forCalendarIdentifier calendarIdentifier: String) -> String? { + let id = Calendar._fromNSCalendarIdentifier(.init(calendarIdentifier)) + return _locale.localizedString(for: id) + } + + func localizedString(forCollationIdentifier collationIdentifier: String) -> String? { + _locale.localizedString(forCollationIdentifier: collationIdentifier) + } + + func localizedString(forCurrencyCode currencyCode: String) -> String? { + _locale.localizedString(forCurrencyCode: currencyCode) + } + + func localizedString(forCurrencySymbol currencySymbol: String) -> String? { + // internal access for SCL-F only + _locale._localizedString(forCurrencySymbol: currencySymbol) + } + + func localizedString(forCollatorIdentifier collatorIdentifier: String) -> String? { + _locale.localizedString(forCollatorIdentifier: collatorIdentifier) + } + public init(localeIdentifier string: String) { + _locale = Locale(identifier: string) super.init() - _CFLocaleInit(_cfObject, string._cfObject) } public required convenience init?(coder aDecoder: NSCoder) { @@ -47,11 +247,7 @@ open class NSLocale: NSObject, NSCopying, NSSecureCoding { } self.init(localeIdentifier: String._unconditionallyBridgeFromObjectiveC(identifier)) } - - deinit { - _CFDeinit(self) - } - + open override func copy() -> Any { return copy(with: nil) } @@ -76,8 +272,7 @@ open class NSLocale: NSObject, NSCopying, NSSecureCoding { guard aCoder.allowsKeyedCoding else { preconditionFailure("Unkeyed coding is unsupported.") } - let identifier = CFLocaleGetIdentifier(self._cfObject)._nsObject - aCoder.encode(identifier, forKey: "NS.identifier") + aCoder.encode(_locale.identifier as NSString, forKey: "NS.identifier") } public static var supportsSecureCoding: Bool { @@ -87,75 +282,81 @@ open class NSLocale: NSObject, NSCopying, NSSecureCoding { extension NSLocale { open class var current: Locale { - return CFLocaleCopyCurrent()._swiftObject + Locale.current } open class var system: Locale { - return CFLocaleGetSystem()._swiftObject + Locale(identifier: "") } } extension NSLocale { - public var localeIdentifier: String { - return object(forKey: .identifier) as! String - } - open class var availableLocaleIdentifiers: [String] { - return __SwiftValue.fetch(CFLocaleCopyAvailableLocaleIdentifiers()) as? [String] ?? [] + Locale.availableIdentifiers } open class var isoLanguageCodes: [String] { - return __SwiftValue.fetch(CFLocaleCopyISOLanguageCodes()) as? [String] ?? [] + // Map back from the type to strings + Locale.LanguageCode.isoLanguageCodes.map { $0.identifier } } open class var isoCountryCodes: [String] { - return __SwiftValue.fetch(CFLocaleCopyISOCountryCodes()) as? [String] ?? [] + Locale.Region.isoRegions.map { $0.identifier } } open class var isoCurrencyCodes: [String] { - return __SwiftValue.fetch(CFLocaleCopyISOCurrencyCodes()) as? [String] ?? [] + Locale.Currency.isoCurrencies.map { $0.identifier } } open class var commonISOCurrencyCodes: [String] { - return __SwiftValue.fetch(CFLocaleCopyCommonISOCurrencyCodes()) as? [String] ?? [] + Locale.commonISOCurrencyCodes } open class var preferredLanguages: [String] { - return __SwiftValue.fetch(CFLocaleCopyPreferredLanguages()) as? [String] ?? [] + Locale.preferredLanguages } open class func components(fromLocaleIdentifier string: String) -> [String : String] { - return __SwiftValue.fetch(CFLocaleCreateComponentsFromLocaleIdentifier(kCFAllocatorSystemDefault, string._cfObject)) as? [String : String] ?? [:] + let comps = CFLocaleCreateComponentsFromLocaleIdentifier(kCFAllocatorSystemDefault, string._cfObject) + if let result = comps as? [String: String] { + return result + } else { + return [:] + } } open class func localeIdentifier(fromComponents dict: [String : String]) -> String { - return CFLocaleCreateLocaleIdentifierFromComponents(kCFAllocatorSystemDefault, dict._cfObject)._swiftObject + Locale.identifier(fromComponents: dict) } open class func canonicalLocaleIdentifier(from string: String) -> String { - return CFLocaleCreateCanonicalLocaleIdentifierFromString(kCFAllocatorSystemDefault, string._cfObject)._swiftObject + Locale.canonicalLanguageIdentifier(from: string) } open class func canonicalLanguageIdentifier(from string: String) -> String { - return CFLocaleCreateCanonicalLanguageIdentifierFromString(kCFAllocatorSystemDefault, string._cfObject)._swiftObject + Locale.canonicalLanguageIdentifier(from: string) } open class func localeIdentifier(fromWindowsLocaleCode lcid: UInt32) -> String? { - return CFLocaleCreateLocaleIdentifierFromWindowsLocaleCode(kCFAllocatorSystemDefault, lcid)._swiftObject + Locale.identifier(fromWindowsLocaleCode: Int(lcid)) } open class func windowsLocaleCode(fromLocaleIdentifier localeIdentifier: String) -> UInt32 { - return CFLocaleGetWindowsLocaleCodeFromLocaleIdentifier(localeIdentifier._cfObject) + if let code = Locale.windowsLocaleCode(fromIdentifier: localeIdentifier) { + return UInt32(code) + } else { + return UInt32.max + } } open class func characterDirection(forLanguage isoLangCode: String) -> NSLocale.LanguageDirection { - let dir = CFLocaleGetLanguageCharacterDirection(isoLangCode._cfObject) - return NSLocale.LanguageDirection(rawValue: UInt(dir.rawValue))! + let language = Locale.Language(components: .init(identifier: isoLangCode)) + return language.characterDirection } open class func lineDirection(forLanguage isoLangCode: String) -> NSLocale.LanguageDirection { - let dir = CFLocaleGetLanguageLineDirection(isoLangCode._cfObject) - return NSLocale.LanguageDirection(rawValue: UInt(dir.rawValue))! + let language = Locale.Language(components: .init(identifier: isoLangCode)) + return language.lineLayoutDirection } } @@ -189,13 +390,7 @@ extension NSLocale { public static let alternateQuotationEndDelimiterKey = NSLocale.Key(rawValue: "kCFLocaleAlternateQuotationEndDelimiterKey") } - public enum LanguageDirection : UInt { - case unknown - case leftToRight - case rightToLeft - case topToBottom - case bottomToTop - } + public typealias LanguageDirection = Locale.LanguageDirection } @@ -205,36 +400,41 @@ extension NSLocale { } #endif - -extension CFLocale : _NSBridgeable, _SwiftBridgeable { - typealias NSType = NSLocale +extension NSLocale : _SwiftBridgeable { typealias SwiftType = Locale - internal var _nsObject: NSLocale { - return unsafeBitCast(self, to: NSType.self) - } internal var _swiftObject: Locale { - return _nsObject._swiftObject + return self._locale } } -extension NSLocale : _SwiftBridgeable { - typealias SwiftType = Locale - internal var _swiftObject: Locale { - return Locale(reference: self) +extension NSLocale : _StructTypeBridgeable { + public typealias _StructType = Locale + + public func _bridgeToSwift() -> Locale { + return Locale._unconditionallyBridgeFromObjectiveC(self) } } +// MARK: - CF Conversions + extension Locale { - typealias CFType = CFLocale internal var _cfObject: CFLocale { - return _bridgeToObjectiveC()._cfObject + CFLocaleCreate(nil, identifier._cfObject) } } -extension NSLocale : _StructTypeBridgeable { - public typealias _StructType = Locale +extension NSLocale { + internal var _cfObject: CFLocale { + CFLocaleCreate(nil, _locale.identifier._cfObject) + } +} + +extension CFLocale { + internal var _swiftObject: Locale { + Locale(identifier: CFLocaleGetIdentifier(self)._swiftObject) + } - public func _bridgeToSwift() -> Locale { - return Locale._unconditionallyBridgeFromObjectiveC(self) + internal var _nsObject: NSLocale { + NSLocale(locale: _swiftObject) } } diff --git a/Sources/Foundation/NSObjCRuntime.swift b/Sources/Foundation/NSObjCRuntime.swift index c845109ebc..5be719679f 100644 --- a/Sources/Foundation/NSObjCRuntime.swift +++ b/Sources/Foundation/NSObjCRuntime.swift @@ -133,12 +133,7 @@ public func NSGetSizeAndAlignment(_ typePtr: UnsafePointer, return typePtr.advanced(by: 1) } -public enum ComparisonResult : Int { - - case orderedAscending = -1 - case orderedSame - case orderedDescending - +extension ComparisonResult { internal static func _fromCF(_ val: CFComparisonResult) -> ComparisonResult { if val == kCFCompareLessThan { return .orderedAscending From e1e3bd3b01ba2057ffb228ce8cd48003ca3f4a42 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Sat, 10 Feb 2024 15:30:13 -0800 Subject: [PATCH 026/198] Add deprecated API to Locale --- Sources/Foundation/NSLocale.swift | 44 ++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/Sources/Foundation/NSLocale.swift b/Sources/Foundation/NSLocale.swift index 87f16852d8..0b62a8b5c7 100644 --- a/Sources/Foundation/NSLocale.swift +++ b/Sources/Foundation/NSLocale.swift @@ -26,9 +26,7 @@ open class NSLocale: NSObject, NSCopying, NSSecureCoding { case .countryCode: return self.countryCode case .scriptCode: return self.scriptCode case .variantCode: return self.variantCode -#if FOUNDATION_FRAMEWORK - case .exemplarCharacterSet: return self.exemplarCharacterSet -#endif + //case .exemplarCharacterSet: return self.exemplarCharacterSet case .calendarIdentifier: return self.calendarIdentifier case .calendar: return _locale.calendar case .collationIdentifier: return self.collationIdentifier @@ -415,6 +413,46 @@ extension NSLocale : _StructTypeBridgeable { } } +// MARK: - Deprecated Locale API + +extension Locale { + /// Returns a list of available `Locale` language codes. + @available(*, deprecated, message: "Use `Locale.LanguageCode.isoLanguageCodes` instead") + public static var isoLanguageCodes: [String] { + NSLocale.isoLanguageCodes + } + + /// Returns a dictionary that splits an identifier into its component pieces. + @available(*, deprecated, message: "Use `Locale.Components(identifier:)` to access components") + public static func components(fromIdentifier string: String) -> [String : String] { + NSLocale.components(fromLocaleIdentifier: string) + } + + /// Returns a list of available `Locale` region codes. + @available(*, deprecated, message: "Use `Locale.Region.isoRegions` instead") + public static var isoRegionCodes: [String] { + NSLocale.isoCountryCodes + } + + /// Returns a list of available `Locale` currency codes. + @available(*, deprecated, message: "Use `Locale.Currency.isoCurrencies` instead") + public static var isoCurrencyCodes: [String] { + NSLocale.isoCurrencyCodes + } + + /// Returns the character direction for a specified language code. + @available(*, deprecated, message: "Use `Locale.Language(identifier:).characterDirection`") + public static func characterDirection(forLanguage isoLangCode: String) -> Locale.LanguageDirection { + NSLocale.characterDirection(forLanguage: isoLangCode) + } + + /// Returns the line direction for a specified language code. + @available(*, deprecated, message: "Use `Locale.Language(identifier:).lineLayoutDirection`") + public static func lineDirection(forLanguage isoLangCode: String) -> Locale.LanguageDirection { + NSLocale.lineDirection(forLanguage: isoLangCode) + } +} + // MARK: - CF Conversions extension Locale { From 74b371daea9bc256c04a91756ccbf13fe1e77dad Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Mon, 12 Feb 2024 11:25:02 -0800 Subject: [PATCH 027/198] Remove ability to unsafeBitCast from CFLocale to NSLocale --- Sources/Foundation/Locale.swift | 49 ---------------- Sources/Foundation/NSLocale.swift | 75 ++++++++++++++++++------- Sources/Foundation/NSSwiftRuntime.swift | 1 - 3 files changed, 54 insertions(+), 71 deletions(-) delete mode 100644 Sources/Foundation/Locale.swift diff --git a/Sources/Foundation/Locale.swift b/Sources/Foundation/Locale.swift deleted file mode 100644 index 9492a7f7a1..0000000000 --- a/Sources/Foundation/Locale.swift +++ /dev/null @@ -1,49 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_implementationOnly import _CoreFoundation - -internal func __NSLocaleIsAutoupdating(_ locale: NSLocale) -> Bool { - return false // Auto-updating is only on Darwin -} - -internal func __NSLocaleCurrent() -> NSLocale { - NSLocale(locale: Locale.current) -} - -extension Locale : _ObjectiveCBridgeable { - public static func _isBridgedToObjectiveC() -> Bool { - return true - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSLocale { - return NSLocale(locale: Locale.current) - } - - public static func _forceBridgeFromObjectiveC(_ input: NSLocale, result: inout Locale?) { - if !_conditionallyBridgeFromObjectiveC(input, result: &result) { - fatalError("Unable to bridge \(NSLocale.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ input: NSLocale, result: inout Locale?) -> Bool { - result = input._locale - return true - } - - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSLocale?) -> Locale { - var result: Locale? = nil - _forceBridgeFromObjectiveC(source!, result: &result) - return result! - } -} diff --git a/Sources/Foundation/NSLocale.swift b/Sources/Foundation/NSLocale.swift index 0b62a8b5c7..a6bdfbc637 100644 --- a/Sources/Foundation/NSLocale.swift +++ b/Sources/Foundation/NSLocale.swift @@ -13,6 +13,7 @@ @_exported import FoundationInternationalization open class NSLocale: NSObject, NSCopying, NSSecureCoding { + // Our own data var _locale: Locale internal init(locale: Locale) { @@ -398,21 +399,6 @@ extension NSLocale { } #endif -extension NSLocale : _SwiftBridgeable { - typealias SwiftType = Locale - internal var _swiftObject: Locale { - return self._locale - } -} - -extension NSLocale : _StructTypeBridgeable { - public typealias _StructType = Locale - - public func _bridgeToSwift() -> Locale { - return Locale._unconditionallyBridgeFromObjectiveC(self) - } -} - // MARK: - Deprecated Locale API extension Locale { @@ -455,24 +441,71 @@ extension Locale { // MARK: - CF Conversions +extension CFLocale : _NSBridgeable, _SwiftBridgeable { + typealias NSType = NSLocale + typealias SwiftType = Locale + internal var _nsObject: NSLocale { + return NSLocale(localeIdentifier: CFLocaleGetIdentifier(self)._swiftObject) + } + internal var _swiftObject: Locale { + return _nsObject._swiftObject + } +} + extension Locale { + typealias CFType = CFLocale internal var _cfObject: CFLocale { - CFLocaleCreate(nil, identifier._cfObject) + return _bridgeToObjectiveC()._cfObject } } extension NSLocale { internal var _cfObject: CFLocale { - CFLocaleCreate(nil, _locale.identifier._cfObject) + CFLocaleCreate(nil, self.localeIdentifier._cfObject) } } -extension CFLocale { +// MARK: - Swift Conversions + +extension NSLocale : _SwiftBridgeable { + typealias SwiftType = Locale internal var _swiftObject: Locale { - Locale(identifier: CFLocaleGetIdentifier(self)._swiftObject) + return Locale(identifier: self.localeIdentifier) } +} + +extension NSLocale : _StructTypeBridgeable { + public typealias _StructType = Locale - internal var _nsObject: NSLocale { - NSLocale(locale: _swiftObject) + public func _bridgeToSwift() -> Locale { + return Locale._unconditionallyBridgeFromObjectiveC(self) + } +} + +extension Locale : _ObjectiveCBridgeable { + public static func _isBridgedToObjectiveC() -> Bool { + return true + } + + @_semantics("convertToObjectiveC") + public func _bridgeToObjectiveC() -> NSLocale { + return NSLocale(locale: Locale.current) + } + + public static func _forceBridgeFromObjectiveC(_ input: NSLocale, result: inout Locale?) { + if !_conditionallyBridgeFromObjectiveC(input, result: &result) { + fatalError("Unable to bridge \(NSLocale.self) to \(self)") + } + } + + public static func _conditionallyBridgeFromObjectiveC(_ input: NSLocale, result: inout Locale?) -> Bool { + result = input._locale + return true + } + + public static func _unconditionallyBridgeFromObjectiveC(_ source: NSLocale?) -> Locale { + var result: Locale? = nil + _forceBridgeFromObjectiveC(source!, result: &result) + return result! } } diff --git a/Sources/Foundation/NSSwiftRuntime.swift b/Sources/Foundation/NSSwiftRuntime.swift index 1ad4730fb3..f3521beaaa 100644 --- a/Sources/Foundation/NSSwiftRuntime.swift +++ b/Sources/Foundation/NSSwiftRuntime.swift @@ -179,7 +179,6 @@ internal func __CFInitializeSwift() { _CFRuntimeBridgeTypeToClass(CFDateGetTypeID(), unsafeBitCast(NSDate.self, to: UnsafeRawPointer.self)) _CFRuntimeBridgeTypeToClass(CFURLGetTypeID(), unsafeBitCast(NSURL.self, to: UnsafeRawPointer.self)) _CFRuntimeBridgeTypeToClass(CFCalendarGetTypeID(), unsafeBitCast(NSCalendar.self, to: UnsafeRawPointer.self)) - _CFRuntimeBridgeTypeToClass(CFLocaleGetTypeID(), unsafeBitCast(NSLocale.self, to: UnsafeRawPointer.self)) _CFRuntimeBridgeTypeToClass(CFTimeZoneGetTypeID(), unsafeBitCast(NSTimeZone.self, to: UnsafeRawPointer.self)) _CFRuntimeBridgeTypeToClass(CFCharacterSetGetTypeID(), unsafeBitCast(_NSCFCharacterSet.self, to: UnsafeRawPointer.self)) _CFRuntimeBridgeTypeToClass(_CFKeyedArchiverUIDGetTypeID(), unsafeBitCast(_NSKeyedArchiverUID.self, to: UnsafeRawPointer.self)) From 60f6f7a48d46fa712048ae0b647c9630c2ef2332 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 15 Feb 2024 09:29:37 -0800 Subject: [PATCH 028/198] Recore Date --- Sources/Foundation/Date.swift | 43 ------------------- Sources/Foundation/NSDate.swift | 75 ++++++++++++++++++++++++--------- 2 files changed, 54 insertions(+), 64 deletions(-) delete mode 100644 Sources/Foundation/Date.swift diff --git a/Sources/Foundation/Date.swift b/Sources/Foundation/Date.swift deleted file mode 100644 index 5b0461a6f9..0000000000 --- a/Sources/Foundation/Date.swift +++ /dev/null @@ -1,43 +0,0 @@ -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// - -@_implementationOnly import _CoreFoundation - -extension Date : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSDate { - return NSDate(timeIntervalSinceReferenceDate: timeIntervalSinceReferenceDate) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSDate, result: inout Date?) { - if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge \(NSDate.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSDate, result: inout Date?) -> Bool { - result = Date(timeIntervalSinceReferenceDate: x.timeIntervalSinceReferenceDate) - return true - } - - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSDate?) -> Date { - var result: Date? = nil - _forceBridgeFromObjectiveC(source!, result: &result) - return result! - } -} - -extension Date : CustomPlaygroundDisplayConvertible { - public var playgroundDescription: Any { - let df = DateFormatter() - df.dateStyle = .medium - df.timeStyle = .short - return df.string(from: self) - } -} diff --git a/Sources/Foundation/NSDate.swift b/Sources/Foundation/NSDate.swift index 33077cdc77..63f1fd3fdb 100644 --- a/Sources/Foundation/NSDate.swift +++ b/Sources/Foundation/NSDate.swift @@ -226,30 +226,15 @@ extension NSDate { } } -extension NSDate: _SwiftBridgeable { - typealias SwiftType = Date - var _swiftObject: Date { - return Date(timeIntervalSinceReferenceDate: timeIntervalSinceReferenceDate) +extension Date : CustomPlaygroundDisplayConvertible { + public var playgroundDescription: Any { + let df = DateFormatter() + df.dateStyle = .medium + df.timeStyle = .short + return df.string(from: self) } } -extension CFDate : _NSBridgeable, _SwiftBridgeable { - typealias NSType = NSDate - typealias SwiftType = Date - - internal var _nsObject: NSType { return unsafeBitCast(self, to: NSType.self) } - internal var _swiftObject: Date { return _nsObject._swiftObject } -} - -extension Date : _NSBridgeable { - typealias NSType = NSDate - typealias CFType = CFDate - - internal var _nsObject: NSType { return NSDate(timeIntervalSinceReferenceDate: timeIntervalSinceReferenceDate) } - internal var _cfObject: CFType { return _nsObject._cfObject } -} - - open class NSDateInterval : NSObject, NSCopying, NSSecureCoding { @@ -407,6 +392,8 @@ open class NSDateInterval : NSObject, NSCopying, NSSecureCoding { } } +// MARK: - Bridging + extension NSDate : _StructTypeBridgeable { public typealias _StructType = Date @@ -429,3 +416,49 @@ extension NSDateInterval : _SwiftBridgeable { } } +extension NSDate: _SwiftBridgeable { + typealias SwiftType = Date + var _swiftObject: Date { + return Date(timeIntervalSinceReferenceDate: timeIntervalSinceReferenceDate) + } +} + +extension CFDate : _NSBridgeable, _SwiftBridgeable { + typealias NSType = NSDate + typealias SwiftType = Date + + internal var _nsObject: NSType { return unsafeBitCast(self, to: NSType.self) } + internal var _swiftObject: Date { return _nsObject._swiftObject } +} + +extension Date : _NSBridgeable { + typealias NSType = NSDate + typealias CFType = CFDate + + internal var _nsObject: NSType { return NSDate(timeIntervalSinceReferenceDate: timeIntervalSinceReferenceDate) } + internal var _cfObject: CFType { return _nsObject._cfObject } +} + +extension Date : _ObjectiveCBridgeable { + @_semantics("convertToObjectiveC") + public func _bridgeToObjectiveC() -> NSDate { + return NSDate(timeIntervalSinceReferenceDate: timeIntervalSinceReferenceDate) + } + + public static func _forceBridgeFromObjectiveC(_ x: NSDate, result: inout Date?) { + if !_conditionallyBridgeFromObjectiveC(x, result: &result) { + fatalError("Unable to bridge \(NSDate.self) to \(self)") + } + } + + public static func _conditionallyBridgeFromObjectiveC(_ x: NSDate, result: inout Date?) -> Bool { + result = Date(timeIntervalSinceReferenceDate: x.timeIntervalSinceReferenceDate) + return true + } + + public static func _unconditionallyBridgeFromObjectiveC(_ source: NSDate?) -> Date { + var result: Date? = nil + _forceBridgeFromObjectiveC(source!, result: &result) + return result! + } +} From 1b88a3b91085f5d83235ad1813dda6b4a83bac42 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Fri, 16 Feb 2024 02:24:18 +0900 Subject: [PATCH 029/198] Stop assuming `CFSTR` is a constant-time expression with Clang 15 (#4872) From Clang 15, nested static initializer inside statement-expression is no longer a constant-time expression (See https://reviews.llvm.org/D127201). OSS Foundation defines `CFSTR` as a macro rather than `__builtin___CFStringMakeConstantString` and it uses nested static initializer inside statement-expression, so we can't assume `CFSTR` itself is always a constant-time expression. This patch removes some `static` qualifiers associated with `CFSTR` to make them acceptable with Clang 15 and later. --- Sources/CoreFoundation/CFBundle_Locale.c | 4 ++-- Sources/CoreFoundation/CFLocale.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/CoreFoundation/CFBundle_Locale.c b/Sources/CoreFoundation/CFBundle_Locale.c index 8cbdbb635c..22ef762ac7 100644 --- a/Sources/CoreFoundation/CFBundle_Locale.c +++ b/Sources/CoreFoundation/CFBundle_Locale.c @@ -148,8 +148,8 @@ const char * const __CFBundleLanguageAbbreviationsArray = static CFStringRef _CFBundleGetAlternateNameForLanguage(CFStringRef language) { // These are not necessarily common localizations per se, but localizations for which the full language name is still in common use. // These are used to provide a fast path for it (other localizations usually use the abbreviation, which is even faster). - static CFStringRef const __CFBundleCommonLanguageNamesArray[] = {CFSTR("English"), CFSTR("French"), CFSTR("German"), CFSTR("Italian"), CFSTR("Dutch"), CFSTR("Spanish"), CFSTR("Japanese")}; - static CFStringRef const __CFBundleCommonLanguageAbbreviationsArray[] = {CFSTR("en"), CFSTR("fr"), CFSTR("de"), CFSTR("it"), CFSTR("nl"), CFSTR("es"), CFSTR("ja")}; + CFStringRef const __CFBundleCommonLanguageNamesArray[] = {CFSTR("English"), CFSTR("French"), CFSTR("German"), CFSTR("Italian"), CFSTR("Dutch"), CFSTR("Spanish"), CFSTR("Japanese")}; + CFStringRef const __CFBundleCommonLanguageAbbreviationsArray[] = {CFSTR("en"), CFSTR("fr"), CFSTR("de"), CFSTR("it"), CFSTR("nl"), CFSTR("es"), CFSTR("ja")}; for (CFIndex idx = 0; idx < sizeof(__CFBundleCommonLanguageNamesArray) / sizeof(CFStringRef); idx++) { if (CFEqual(language, __CFBundleCommonLanguageAbbreviationsArray[idx])) { diff --git a/Sources/CoreFoundation/CFLocale.c b/Sources/CoreFoundation/CFLocale.c index 6ed7637cee..2750eb71a5 100644 --- a/Sources/CoreFoundation/CFLocale.c +++ b/Sources/CoreFoundation/CFLocale.c @@ -1274,7 +1274,7 @@ static bool __CFLocaleCopyLocaleID(CFLocaleRef locale, bool user, CFTypeRef *cf, static bool __CFLocaleCopyCodes(CFLocaleRef locale, bool user, CFTypeRef *cf, CFStringRef context) { - static CFStringRef const kCFLocaleCodesKey = CFSTR("__kCFLocaleCodes"); + CFStringRef const kCFLocaleCodesKey = CFSTR("__kCFLocaleCodes"); bool codesWasAllocated = false; CFDictionaryRef codes = NULL; From 7052e54f9b3f88b7845ef27a5ecaa10e20e0bbcf Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 15 Feb 2024 12:29:29 -0800 Subject: [PATCH 030/198] Depend on public branch of swift-foundation --- Package.swift | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Package.swift b/Package.swift index f3bdf38d66..170393a09a 100644 --- a/Package.swift +++ b/Package.swift @@ -77,9 +77,8 @@ let package = Package( url: "https://github.com/apple/swift-foundation-icu", exact: "0.0.5"), .package( -// url: "https://github.com/apple/swift-foundation", -// branch: "main" - path: "../swift-foundation" + url: "https://github.com/parkera/swift-foundation", + branch: "scf-package" ), ], targets: [ From c54936aaf3699e8f1b76e058c94afec30e79c95b Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 15 Feb 2024 12:30:41 -0800 Subject: [PATCH 031/198] Use SCL-F SPI import --- Sources/Foundation/NSLocale.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Foundation/NSLocale.swift b/Sources/Foundation/NSLocale.swift index a6bdfbc637..2f30114aee 100644 --- a/Sources/Foundation/NSLocale.swift +++ b/Sources/Foundation/NSLocale.swift @@ -9,7 +9,7 @@ @_implementationOnly import _CoreFoundation -@_exported import FoundationEssentials +@_spi(SwiftCorelibsFoundation) @_exported import FoundationEssentials @_exported import FoundationInternationalization open class NSLocale: NSObject, NSCopying, NSSecureCoding { From 3d2c6cbd9588bf316d101e8219b27043bf7e2896 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 15 Feb 2024 12:30:52 -0800 Subject: [PATCH 032/198] Use FoundationEssentials UUID --- Sources/Foundation/UUID.swift | 121 +--------------------------------- 1 file changed, 3 insertions(+), 118 deletions(-) diff --git a/Sources/Foundation/UUID.swift b/Sources/Foundation/UUID.swift index f4044f450b..2c504a9f79 100644 --- a/Sources/Foundation/UUID.swift +++ b/Sources/Foundation/UUID.swift @@ -10,86 +10,17 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import _CoreFoundation - -public typealias uuid_t = (UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8) -public typealias uuid_string_t = (Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8) - -/// Represents UUID strings, which can be used to uniquely identify types, interfaces, and other items. -public struct UUID : ReferenceConvertible, Hashable, Equatable, CustomStringConvertible, Sendable { - public typealias ReferenceType = NSUUID - - public private(set) var uuid: uuid_t = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - - /* Create a new UUID with RFC 4122 version 4 random bytes */ - public init() { - withUnsafeMutablePointer(to: &uuid) { - $0.withMemoryRebound(to: UInt8.self, capacity: MemoryLayout.size) { - _cf_uuid_generate_random($0) - } - } - } - - fileprivate init(reference: NSUUID) { +extension UUID { + init(reference: NSUUID) { var bytes: uuid_t = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) withUnsafeMutablePointer(to: &bytes) { $0.withMemoryRebound(to: UInt8.self, capacity: MemoryLayout.size) { reference.getBytes($0) } } - uuid = bytes - } - - /// Create a UUID from a string such as "E621E1F8-C36C-495A-93FC-0C247A3E6E5F". - /// - /// Returns nil for invalid strings. - public init?(uuidString string: String) { - let res = withUnsafeMutablePointer(to: &uuid) { - $0.withMemoryRebound(to: UInt8.self, capacity: MemoryLayout.size) { - return _cf_uuid_parse(string, $0) - } - } - if res != 0 { - return nil - } - } - - /// Create a UUID from a `uuid_t`. - public init(uuid: uuid_t) { - self.uuid = uuid - } - - /// Returns a string created from the UUID, such as "E621E1F8-C36C-495A-93FC-0C247A3E6E5F" - public var uuidString: String { - var bytes: uuid_string_t = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - return withUnsafePointer(to: uuid) { valPtr in - valPtr.withMemoryRebound(to: UInt8.self, capacity: MemoryLayout.size) { val in - withUnsafeMutablePointer(to: &bytes) { strPtr in - strPtr.withMemoryRebound(to: CChar.self, capacity: MemoryLayout.size) { str in - _cf_uuid_unparse_upper(val, str) - return String(cString: str, encoding: .utf8)! - } - } - } - } - } - - public func hash(into hasher: inout Hasher) { - withUnsafeBytes(of: uuid) { buffer in - hasher.combine(bytes: buffer) - } - } - - public var description: String { - return uuidString - } - - public var debugDescription: String { - return description + self = UUID(uuid: bytes) } - // MARK: - Bridging Support - fileprivate var reference: NSUUID { return withUnsafePointer(to: uuid) { $0.withMemoryRebound(to: UInt8.self, capacity: MemoryLayout.size) { @@ -97,33 +28,6 @@ public struct UUID : ReferenceConvertible, Hashable, Equatable, CustomStringConv } } } - - public static func ==(lhs: UUID, rhs: UUID) -> Bool { - return lhs.uuid.0 == rhs.uuid.0 && - lhs.uuid.1 == rhs.uuid.1 && - lhs.uuid.2 == rhs.uuid.2 && - lhs.uuid.3 == rhs.uuid.3 && - lhs.uuid.4 == rhs.uuid.4 && - lhs.uuid.5 == rhs.uuid.5 && - lhs.uuid.6 == rhs.uuid.6 && - lhs.uuid.7 == rhs.uuid.7 && - lhs.uuid.8 == rhs.uuid.8 && - lhs.uuid.9 == rhs.uuid.9 && - lhs.uuid.10 == rhs.uuid.10 && - lhs.uuid.11 == rhs.uuid.11 && - lhs.uuid.12 == rhs.uuid.12 && - lhs.uuid.13 == rhs.uuid.13 && - lhs.uuid.14 == rhs.uuid.14 && - lhs.uuid.15 == rhs.uuid.15 - } -} - -extension UUID : CustomReflectable { - public var customMirror: Mirror { - let c : [(label: String?, value: Any)] = [] - let m = Mirror(self, children:c, displayStyle: .struct) - return m - } } extension UUID : _ObjectiveCBridgeable { @@ -157,22 +61,3 @@ extension NSUUID : _HasCustomAnyHashableRepresentation { return AnyHashable(UUID._unconditionallyBridgeFromObjectiveC(self)) } } - -extension UUID : Codable { - public init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - let uuidString = try container.decode(String.self) - - guard let uuid = UUID(uuidString: uuidString) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, - debugDescription: "Attempted to decode UUID from invalid UUID string.")) - } - - self = uuid - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(self.uuidString) - } -} From 2238ee688dd07ac299592b3e63e0547323b29ef0 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 15 Feb 2024 12:51:48 -0800 Subject: [PATCH 033/198] Remove AttributedString from swift-corelibs-foundation in favor of swift-foundation implementation --- .../AttributedString+Locking.swift | 53 - .../AttributedString/AttributedString.swift | 2109 --------------- .../AttributedStringAttribute.swift | 626 ----- .../AttributedStringCodable.swift | 534 ---- .../AttributedStringRunCoalescing.swift | 278 -- .../AttributedString/Conversion.swift | 383 --- .../FoundationAttributes.swift | 330 --- Tests/Foundation/TestAttributedString.swift | 2287 ----------------- .../Foundation/TestAttributedStringCOW.swift | 182 -- .../TestAttributedStringPerformance.swift | 428 --- .../TestAttributedStringSupport.swift | 144 -- 11 files changed, 7354 deletions(-) delete mode 100644 Sources/Foundation/AttributedString/AttributedString+Locking.swift delete mode 100644 Sources/Foundation/AttributedString/AttributedString.swift delete mode 100644 Sources/Foundation/AttributedString/AttributedStringAttribute.swift delete mode 100644 Sources/Foundation/AttributedString/AttributedStringCodable.swift delete mode 100644 Sources/Foundation/AttributedString/AttributedStringRunCoalescing.swift delete mode 100644 Sources/Foundation/AttributedString/Conversion.swift delete mode 100644 Sources/Foundation/AttributedString/FoundationAttributes.swift delete mode 100644 Tests/Foundation/TestAttributedString.swift delete mode 100644 Tests/Foundation/TestAttributedStringCOW.swift delete mode 100644 Tests/Foundation/TestAttributedStringPerformance.swift delete mode 100644 Tests/Foundation/TestAttributedStringSupport.swift diff --git a/Sources/Foundation/AttributedString/AttributedString+Locking.swift b/Sources/Foundation/AttributedString/AttributedString+Locking.swift deleted file mode 100644 index cc66f53efa..0000000000 --- a/Sources/Foundation/AttributedString/AttributedString+Locking.swift +++ /dev/null @@ -1,53 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2021 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#if canImport(Darwin) -import Darwin - -@available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) -extension UnsafeMutablePointer where Pointee == os_unfair_lock_s { - internal init() { - let l = UnsafeMutablePointer.allocate(capacity: 1) - l.initialize(to: os_unfair_lock()) - self = l - } - - internal func cleanupLock() { - deinitialize(count: 1) - deallocate() - } - - internal func lock() { - os_unfair_lock_lock(self) - } - - internal func tryLock() -> Bool { - let result = os_unfair_lock_trylock(self) - return result - } - - internal func unlock() { - os_unfair_lock_unlock(self) - } -} - -@available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) -typealias Lock = os_unfair_lock_t - -#else -internal typealias Lock = NSLock - -extension NSLock { - // Stub to match the API of os_unfair_lock_t - func cleanupLock() { /* NOOP */ } -} -#endif diff --git a/Sources/Foundation/AttributedString/AttributedString.swift b/Sources/Foundation/AttributedString/AttributedString.swift deleted file mode 100644 index 06a53e031f..0000000000 --- a/Sources/Foundation/AttributedString/AttributedString.swift +++ /dev/null @@ -1,2109 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_spi(Reflection) import Swift - -@dynamicMemberLookup -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public struct AttributeContainer : Equatable, CustomStringConvertible { - public static func == (lhs: AttributeContainer, rhs: AttributeContainer) -> Bool { - guard lhs.contents.keys == rhs.contents.keys else { return false } - for (key, value) in lhs.contents { - if !__equalAttributes(value, rhs.contents[key]) { - return false - } - } - return true - } - - public var description : String { - contents._attrStrDescription - } - - internal var contents : [String : Any] - - public subscript(_: T.Type) -> T.Value? { - get { contents[T.name] as? T.Value } - set { contents[T.name] = newValue } - } - - public subscript(dynamicMember keyPath: KeyPath) -> K.Value? { - get { self[K.self] } - set { self[K.self] = newValue } - } - - public subscript(dynamicMember keyPath: KeyPath) -> ScopedAttributeContainer { - get { - return ScopedAttributeContainer(contents) - } - _modify { - var container = ScopedAttributeContainer() - defer { - if let removedKey = container.removedKey { - contents[removedKey] = nil - } else { - contents.merge(container.contents) { original, new in - return new - } - } - } - yield &container - } - } - - public static subscript(dynamicMember keyPath: KeyPath) -> Builder { - return Builder(container: AttributeContainer()) - } - - @_disfavoredOverload - public subscript(dynamicMember keyPath: KeyPath) -> Builder { - return Builder(container: self) - } - - public struct Builder { - var container : AttributeContainer - - public func callAsFunction(_ value: T.Value) -> AttributeContainer { - var new = container - new[T.self] = value - return new - } - } - - public init() { - contents = [:] - } - - internal init(_ contents: [String : Any]) { - self.contents = contents - } - - public mutating func merge(_ other: AttributeContainer, mergePolicy: AttributedString.AttributeMergePolicy = .keepNew) { - self.contents.merge(other.contents, uniquingKeysWith: mergePolicy.combinerClosure) - } - - public func merging(_ other: AttributeContainer, mergePolicy: AttributedString.AttributeMergePolicy = .keepNew) -> AttributeContainer { - var copy = self - copy.merge(other, mergePolicy: mergePolicy) - return copy - } -} - -internal extension Dictionary where Key == String, Value == Any { - var _attrStrDescription : String { - let keyvals = self.reduce(into: "") { (res, entry) in - res += "\t\(entry.key) = \(entry.value)" + "\n" - } - return "{\n\(keyvals)}" - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public protocol AttributedStringAttributeMutation { - mutating func setAttributes(_ attributes: AttributeContainer) - mutating func mergeAttributes(_ attributes: AttributeContainer, mergePolicy: AttributedString.AttributeMergePolicy) - mutating func replaceAttributes(_ attributes: AttributeContainer, with others: AttributeContainer) -} - -@dynamicMemberLookup -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public protocol AttributedStringProtocol : AttributedStringAttributeMutation, Hashable, CustomStringConvertible { - var startIndex : AttributedString.Index { get } - var endIndex : AttributedString.Index { get } - - var runs : AttributedString.Runs { get } - var characters : AttributedString.CharacterView { get } - var unicodeScalars : AttributedString.UnicodeScalarView { get } - - subscript(_: K.Type) -> K.Value? { get set } - subscript(dynamicMember keyPath: KeyPath) -> K.Value? { get set } - subscript(dynamicMember keyPath: KeyPath) -> ScopedAttributeContainer { get set } - - subscript(bounds: R) -> AttributedSubstring where R.Bound == AttributedString.Index { get } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributedString { - internal init(_ s: S) { - if let s = s as? AttributedString { - self = s - } else if let s = s as? AttributedSubstring { - self = AttributedString(s) - } else { - // !!!: We don't expect or want this to happen. - self = AttributedString(s.characters._guts) - } - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension AttributedStringProtocol { - func settingAttributes(_ attributes: AttributeContainer) -> AttributedString { - var new = AttributedString(self) - new.setAttributes(attributes) - return new - } - - func mergingAttributes(_ attributes: AttributeContainer, mergePolicy: AttributedString.AttributeMergePolicy = .keepNew) -> AttributedString { - var new = AttributedString(self) - new.mergeAttributes(attributes, mergePolicy: mergePolicy) - return new - } - - func replacingAttributes(_ attributes: AttributeContainer, with others: AttributeContainer) -> AttributedString { - var new = AttributedString(self) - new.replaceAttributes(attributes, with: others) - return new - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributedStringProtocol { - internal var __guts : AttributedString.Guts { - if let s = self as? AttributedString { - return s._guts - } else if let s = self as? AttributedSubstring { - return s._guts - } else { - return self.characters._guts - } - } - - public var description : String { - var result = "" - self.__guts.enumerateRuns { run, loc, _, modified in - let range = self.__guts.index(startIndex, offsetByUTF8: loc) ..< self.__guts.index(startIndex, offsetByUTF8: loc + run.length) - result += (result.isEmpty ? "" : "\n") + "\(String(self.characters[range])) \(run.attributes)" - modified = .guaranteedNotModified - } - return result - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(__guts) - } - - @_specialize(where Self == AttributedString, RHS == AttributedString) - @_specialize(where Self == AttributedString, RHS == AttributedSubstring) - @_specialize(where Self == AttributedSubstring, RHS == AttributedString) - @_specialize(where Self == AttributedSubstring, RHS == AttributedSubstring) - public static func == (lhs: Self, rhs: RHS) -> Bool { - // Manually slice the __guts.string (in case its an AttributedSubstring), the Runs type takes the range into account for AttributedSubstrings - let rangeLHS = Range(uncheckedBounds: (lower: lhs.startIndex, upper: lhs.endIndex)) - let rangeRHS = Range(uncheckedBounds: (lower: rhs.startIndex, upper: rhs.endIndex)) - return lhs.__guts.string[rangeLHS._stringRange] == rhs.__guts.string[rangeRHS._stringRange] && lhs.runs == rhs.runs - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension AttributedStringProtocol { - func index(afterCharacter i: AttributedString.Index) -> AttributedString.Index { - self.characters.index(after: i) - } - func index(beforeCharacter i: AttributedString.Index) -> AttributedString.Index { - self.characters.index(before: i) - } - func index(_ i: AttributedString.Index, offsetByCharacters distance: Int) -> AttributedString.Index { - self.characters.index(i, offsetBy: distance) - } - - func index(afterUnicodeScalar i: AttributedString.Index) -> AttributedString.Index { - self.unicodeScalars.index(after: i) - } - func index(beforeUnicodeScalar i: AttributedString.Index) -> AttributedString.Index { - self.unicodeScalars.index(before: i) - } - func index(_ i: AttributedString.Index, offsetByUnicodeScalars distance: Int) -> AttributedString.Index { - self.unicodeScalars.index(i, offsetBy: distance) - } - - func index(afterRun i: AttributedString.Index) -> AttributedString.Index { - self.runs._runs_index(after: i, startIndex: startIndex, endIndex: endIndex, attributeNames: []) - } - func index(beforeRun i: AttributedString.Index) -> AttributedString.Index { - self.runs._runs_index(before: i, startIndex: startIndex, endIndex: endIndex, attributeNames: []) - } - func index(_ i: AttributedString.Index, offsetByRuns distance: Int) -> AttributedString.Index { - var res = i - var remainingDistance = distance - while remainingDistance != 0 { - if remainingDistance > 0 { - res = self.runs._runs_index(after: res, startIndex: startIndex, endIndex: endIndex, attributeNames: []) - remainingDistance -= 1 - } else { - res = self.runs._runs_index(before: res, startIndex: startIndex, endIndex: endIndex, attributeNames: []) - remainingDistance += 1 - } - } - return res - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributedStringProtocol { - public func range(of stringToFind: T, options: String.CompareOptions = [], locale: Locale? = nil) -> Range? { - // Since we have secret access to the String property, go ahead and use the full implementation given by Foundation rather than the limited reimplementation we needed for CharacterView. - return self.__guts.string.range(of: stringToFind, options: options, range: (startIndex.. Any { - switch self { - case .keepNew: return { _, new in new } - case .keepCurrent: return { current, _ in current } - } - } - } - - public subscript(_: K.Type) -> K.Value? { - get { _guts.getValue(in: startIndex ..< endIndex, key: K.name) as? K.Value } - set { - ensureUniqueReference() - if let v = newValue { - _guts.add(value: v, in: startIndex ..< endIndex, key: K.name) - } else { - _guts.remove(attribute: K.self, in: startIndex ..< endIndex) - } - } - } - - public subscript(dynamicMember keyPath: KeyPath) -> K.Value? { - get { self[K.self] } - set { self[K.self] = newValue } - } - - public subscript(dynamicMember keyPath: KeyPath) -> ScopedAttributeContainer { - get { - return ScopedAttributeContainer(_guts.getValues(in: startIndex ..< endIndex)) - } - _modify { - ensureUniqueReference() - var container = ScopedAttributeContainer() - defer { - if let removedKey = container.removedKey { - _guts.remove(key: removedKey, in: startIndex ..< endIndex) - } else { - _guts.add(attributes: AttributeContainer(container.contents), in: startIndex ..< endIndex) - } - } - yield &container - } - } - - public mutating func setAttributes(_ attributes: AttributeContainer) { - ensureUniqueReference() - _guts.set(attributes: attributes, in: startIndex ..< endIndex) - } - - public mutating func mergeAttributes(_ attributes: AttributeContainer, mergePolicy: AttributeMergePolicy = .keepNew) { - ensureUniqueReference() - _guts.add(attributes: attributes, in: startIndex ..< endIndex, mergePolicy: mergePolicy) - } - - public mutating func replaceAttributes(_ attributes: AttributeContainer, with others: AttributeContainer) { - guard attributes != others else { - return - } - ensureUniqueReference() - _guts.enumerateRuns { run, _, _, modified in - if _run(run, matches: attributes) { - for key in attributes.contents.keys { - run.attributes.contents.removeValue(forKey: key) - } - run.attributes.mergeIn(others) - modified = .guaranteedModified - } else { - modified = .guaranteedNotModified - } - } - } - - internal func applyRemovals(withOriginal orig: AttributedString.SingleAttributeTransformer, andChanged changed: AttributedString.SingleAttributeTransformer, to attrStr: inout AttributedString, key: K.Type) { - if orig.range != changed.range || orig.attrName != changed.attrName { - attrStr._guts.remove(attribute: K.self, in: orig.range) // If the range changed, we need to remove from the old range first. - } - } - - internal func applyChanges(withOriginal orig: AttributedString.SingleAttributeTransformer, andChanged changed: AttributedString.SingleAttributeTransformer, to attrStr: inout AttributedString, key: K.Type) { - if orig.range != changed.range || orig.attrName != changed.attrName || !__equalAttributes(orig.attr, changed.attr) { - if let newVal = changed.attr { // Then if there's a new value, we add it in. - // Unfortunately, we can't use the attrStr[range].set() provided by the AttributedStringProtocol, because we *don't know* the new type statically! - attrStr._guts.add(value: newVal, in: changed.range, key: changed.attrName) - } else { - attrStr._guts.remove(attribute: K.self, in: changed.range) // ???: Is this right? Does changing the range of an attribute==nil run remove it from the new range? - } - } - } - - public func transformingAttributes(_ k: K.Type, _ c: (inout AttributedString.SingleAttributeTransformer) -> Void) -> AttributedString { - let orig = AttributedString(_guts) - var copy = orig - copy.ensureUniqueReference() // ???: Is this best practice? We're going behind the back of the AttributedString mutation API surface, so it doesn't happen anywhere else. It's also aggressively speculative. - for (attr, range) in orig.runs[k] { - let origAttr1 = AttributedString.SingleAttributeTransformer(range: range, attr: attr) - var changedAttr1 = origAttr1 - c(&changedAttr1) - applyRemovals(withOriginal: origAttr1, andChanged: changedAttr1, to: ©, key: k) - applyChanges(withOriginal: origAttr1, andChanged: changedAttr1, to: ©, key: k) - } - return copy - } - - public func transformingAttributes(_ k: K1.Type, _ k2: K2.Type, - _ c: (inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer) -> Void) -> AttributedString { - let orig = AttributedString(_guts) - var copy = orig - copy.ensureUniqueReference() // ???: Is this best practice? We're going behind the back of the AttributedString mutation API surface, so it doesn't happen anywhere else. It's also aggressively speculative. - for (attr, attr2, range) in orig.runs[k, k2] { - let origAttr1 = AttributedString.SingleAttributeTransformer(range: range, attr: attr) - let origAttr2 = AttributedString.SingleAttributeTransformer(range: range, attr: attr2) - var changedAttr1 = origAttr1 - var changedAttr2 = origAttr2 - c(&changedAttr1, &changedAttr2) - applyRemovals(withOriginal: origAttr1, andChanged: changedAttr1, to: ©, key: k) - applyRemovals(withOriginal: origAttr2, andChanged: changedAttr2, to: ©, key: k2) - applyChanges(withOriginal: origAttr1, andChanged: changedAttr1, to: ©, key: k) - applyChanges(withOriginal: origAttr2, andChanged: changedAttr2, to: ©, key: k2) - } - return copy - } - - public func transformingAttributes(_ k: K1.Type, _ k2: K2.Type, _ k3: K3.Type, - _ c: (inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer) -> Void) -> AttributedString { - let orig = AttributedString(_guts) - var copy = orig - copy.ensureUniqueReference() // ???: Is this best practice? We're going behind the back of the AttributedString mutation API surface, so it doesn't happen anywhere else. It's also aggressively speculative. - for (attr, attr2, attr3, range) in orig.runs[k, k2, k3] { - let origAttr1 = AttributedString.SingleAttributeTransformer(range: range, attr: attr) - let origAttr2 = AttributedString.SingleAttributeTransformer(range: range, attr: attr2) - let origAttr3 = AttributedString.SingleAttributeTransformer(range: range, attr: attr3) - var changedAttr1 = origAttr1 - var changedAttr2 = origAttr2 - var changedAttr3 = origAttr3 - c(&changedAttr1, &changedAttr2, &changedAttr3) - applyRemovals(withOriginal: origAttr1, andChanged: changedAttr1, to: ©, key: k) - applyRemovals(withOriginal: origAttr2, andChanged: changedAttr2, to: ©, key: k2) - applyRemovals(withOriginal: origAttr3, andChanged: changedAttr3, to: ©, key: k3) - applyChanges(withOriginal: origAttr1, andChanged: changedAttr1, to: ©, key: k) - applyChanges(withOriginal: origAttr2, andChanged: changedAttr2, to: ©, key: k2) - applyChanges(withOriginal: origAttr3, andChanged: changedAttr3, to: ©, key: k3) - } - return copy - } - - public func transformingAttributes(_ k: K1.Type, _ k2: K2.Type, _ k3: K3.Type, _ k4: K4.Type, - _ c: (inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer) -> Void) -> AttributedString { - let orig = AttributedString(_guts) - var copy = orig - copy.ensureUniqueReference() // ???: Is this best practice? We're going behind the back of the AttributedString mutation API surface, so it doesn't happen anywhere else. It's also aggressively speculative. - for (attr, attr2, attr3, attr4, range) in orig.runs[k, k2, k3, k4] { - let origAttr1 = AttributedString.SingleAttributeTransformer(range: range, attr: attr) - let origAttr2 = AttributedString.SingleAttributeTransformer(range: range, attr: attr2) - let origAttr3 = AttributedString.SingleAttributeTransformer(range: range, attr: attr3) - let origAttr4 = AttributedString.SingleAttributeTransformer(range: range, attr: attr4) - var changedAttr1 = origAttr1 - var changedAttr2 = origAttr2 - var changedAttr3 = origAttr3 - var changedAttr4 = origAttr4 - c(&changedAttr1, &changedAttr2, &changedAttr3, &changedAttr4) - applyRemovals(withOriginal: origAttr1, andChanged: changedAttr1, to: ©, key: k) - applyRemovals(withOriginal: origAttr2, andChanged: changedAttr2, to: ©, key: k2) - applyRemovals(withOriginal: origAttr3, andChanged: changedAttr3, to: ©, key: k3) - applyRemovals(withOriginal: origAttr4, andChanged: changedAttr4, to: ©, key: k4) - applyChanges(withOriginal: origAttr1, andChanged: changedAttr1, to: ©, key: k) - applyChanges(withOriginal: origAttr2, andChanged: changedAttr2, to: ©, key: k2) - applyChanges(withOriginal: origAttr3, andChanged: changedAttr3, to: ©, key: k3) - applyChanges(withOriginal: origAttr4, andChanged: changedAttr4, to: ©, key: k4) - } - return copy - } - - public func transformingAttributes(_ k: K1.Type, _ k2: K2.Type, _ k3: K3.Type, _ k4: K4.Type, _ k5: K5.Type, - _ c: (inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer) -> Void) -> AttributedString { - let orig = AttributedString(_guts) - var copy = orig - copy.ensureUniqueReference() // ???: Is this best practice? We're going behind the back of the AttributedString mutation API surface, so it doesn't happen anywhere else. It's also aggressively speculative. - for (attr, attr2, attr3, attr4, attr5, range) in orig.runs[k, k2, k3, k4, k5] { - let origAttr1 = AttributedString.SingleAttributeTransformer(range: range, attr: attr) - let origAttr2 = AttributedString.SingleAttributeTransformer(range: range, attr: attr2) - let origAttr3 = AttributedString.SingleAttributeTransformer(range: range, attr: attr3) - let origAttr4 = AttributedString.SingleAttributeTransformer(range: range, attr: attr4) - let origAttr5 = AttributedString.SingleAttributeTransformer(range: range, attr: attr5) - var changedAttr1 = origAttr1 - var changedAttr2 = origAttr2 - var changedAttr3 = origAttr3 - var changedAttr4 = origAttr4 - var changedAttr5 = origAttr5 - c(&changedAttr1, &changedAttr2, &changedAttr3, &changedAttr4, &changedAttr5) - applyRemovals(withOriginal: origAttr1, andChanged: changedAttr1, to: ©, key: k) - applyRemovals(withOriginal: origAttr2, andChanged: changedAttr2, to: ©, key: k2) - applyRemovals(withOriginal: origAttr3, andChanged: changedAttr3, to: ©, key: k3) - applyRemovals(withOriginal: origAttr4, andChanged: changedAttr4, to: ©, key: k4) - applyRemovals(withOriginal: origAttr5, andChanged: changedAttr5, to: ©, key: k5) - applyChanges(withOriginal: origAttr1, andChanged: changedAttr1, to: ©, key: k) - applyChanges(withOriginal: origAttr2, andChanged: changedAttr2, to: ©, key: k2) - applyChanges(withOriginal: origAttr3, andChanged: changedAttr3, to: ©, key: k3) - applyChanges(withOriginal: origAttr4, andChanged: changedAttr4, to: ©, key: k4) - applyChanges(withOriginal: origAttr5, andChanged: changedAttr5, to: ©, key: k5) - } - return copy - } - - public func transformingAttributes(_ k: KeyPath, _ c: (inout AttributedString.SingleAttributeTransformer) -> Void) -> AttributedString { - self.transformingAttributes(K.self, c) - } - - public func transformingAttributes( - _ k: KeyPath, - _ k2: KeyPath, _ c: (inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer) -> Void) -> AttributedString { - self.transformingAttributes(K1.self, K2.self, c) - } - - public func transformingAttributes( - _ k: KeyPath, - _ k2: KeyPath, - _ k3: KeyPath, _ c: (inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer) -> Void) -> AttributedString { - self.transformingAttributes(K1.self, K2.self, K3.self, c) - } - - public func transformingAttributes( - _ k: KeyPath, - _ k2: KeyPath, - _ k3: KeyPath, - _ k4: KeyPath, _ c: (inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer) -> Void) -> AttributedString { - self.transformingAttributes(K1.self, K2.self, K3.self, K4.self, c) - } - - public func transformingAttributes( - _ k: KeyPath, - _ k2: KeyPath, - _ k3: KeyPath, - _ k4: KeyPath, - _ k5: KeyPath, _ c: (inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer, - inout AttributedString.SingleAttributeTransformer) -> Void) -> AttributedString { - self.transformingAttributes(K1.self, K2.self, K3.self, K4.self, K5.self, c) - - } - - internal struct _AttributeStorage : Hashable, CustomStringConvertible { - internal var contents : [String : Any] - - subscript (_ attribute: T.Type) -> T.Value? { - get { self.contents[T.name] as? T.Value } - set { self.contents[T.name] = newValue } - } - - internal mutating func mergeIn(_ otherContents: [String: Any]) { - for (key, value) in otherContents { - contents[key] = value - } - } - - internal mutating func mergeIn(_ otherContents: [String: Any], uniquingKeysWith: (Any, Any) -> Any) { - contents.merge(otherContents, uniquingKeysWith: uniquingKeysWith) - } - - internal mutating func mergeIn(_ other: _AttributeStorage) { - self.mergeIn(other.contents) - } - - internal mutating func mergeIn(_ other: AttributeContainer) { - self.mergeIn(other.contents) - } - - public init(_ contents: [String : Any] = [:]) { - self.contents = contents - } - - public static func == (lhs: AttributedString._AttributeStorage, rhs: AttributedString._AttributeStorage) -> Bool { - guard lhs.contents.keys == rhs.contents.keys else { - return false - } - for (key, value) in lhs.contents { - if !__equalAttributes(value, rhs.contents[key]) { - return false - } - } - return true - } - - public var description : String { - contents._attrStrDescription - } - - public func hash(into hasher: inout Hasher) { - let c = contents as! [String : AnyHashable] - c.hash(into: &hasher) - } - } - - public struct SingleAttributeTransformer { - public var range: Range - - internal var attrName = T.name - internal var attr : Any? - - public var value: T.Value? { - get { attr as? T.Value } - set { attr = newValue } - } - - public mutating func replace(with key: U.Type, value: U.Value) { - attrName = key.name - attr = value - } - - public mutating func replace(with keyPath: KeyPath, value: U.Value) { - self.replace(with: U.self, value: value) - } - } - - public struct Index : Comparable { - internal let characterIndex: String.Index - public static func < (lhs: AttributedString.Index, rhs: AttributedString.Index) -> Bool { - return lhs.characterIndex < rhs.characterIndex - } - } - - internal struct _InternalRun : Hashable { - // UTF-8 Code Unit Length - internal var length : Int - internal var attributes : _AttributeStorage - - public static func == (lhs: _InternalRun, rhs: _InternalRun) -> Bool { - if lhs.length != rhs.length { - return false - } - return lhs.attributes == rhs.attributes - } - - public func get(_ k: T.Type) -> T.Value? { - attributes[k] - } - } - - internal class Guts : Hashable { - var string : String - - // NOTE: the runs and runOffsetCache should never be modified directly. Instead, use the functions defined in AttributedStringRunCoalescing.swift - var runs : [_InternalRun] - var runOffsetCache : RunOffset - var runOffsetCacheLock : Lock - - static func == (lhs: AttributedString.Guts, rhs: AttributedString.Guts) -> Bool { - return lhs.string == rhs.string && lhs.runs == rhs.runs - } - - init(string: String, runs : [_InternalRun]) { - precondition(string.isEmpty == runs.isEmpty, "An empty attributed string should not contain any runs") - self.string = string - self.runs = runs - runOffsetCache = RunOffset() - runOffsetCacheLock = Lock() - // Ensure the string is a native contiguous string to prevent performance issues when indexing via offsets - self.string.makeContiguousUTF8() - } - - init(_ guts: Guts, range: Range) { - string = String(guts.string[range._stringRange]) - runs = guts.runs(in: range, relativeTo: string) - runOffsetCache = RunOffset() - runOffsetCacheLock = Lock() - } - - init(_ guts: Guts) { - string = guts.string - runs = guts.runs - runOffsetCache = RunOffset() - runOffsetCacheLock = Lock() - } - - deinit { - runOffsetCacheLock.cleanupLock() - } - - func hash(into hasher: inout Hasher) { - hasher.combine(string) - hasher.combine(runs) - } - - var startIndex : Index { - Index(characterIndex: string.startIndex) - } - - var endIndex : Index { - Index(characterIndex: string.endIndex) - } - - func index(byCharactersAfter i: Index) -> Index { - return Index(characterIndex: string.index(after: i.characterIndex)) - } - - func index(byCharactersBefore i: Index) -> Index { - return Index(characterIndex: string.index(before: i.characterIndex)) - } - - func index(byUTF8Before i: Index) -> Index { - return Index(characterIndex: string.utf8.index(before: i.characterIndex)) - } - - func index(for utf8Offset: Int) -> Index { - return index(startIndex, offsetByUTF8: utf8Offset) - } - - func index(_ i: Index, offsetByUTF8 distance: Int) -> Index { - return Index(characterIndex: string.utf8.index(i.characterIndex, offsetBy: distance)) - } - - func utf8OffsetRange(from range: Range) -> Range { - return utf8Distance(from: startIndex, to: range.lowerBound) ..< utf8Distance(from: startIndex, to: range.upperBound) - } - - func utf8Distance(from: Index, to: Index) -> Int { - return string.utf8.distance(from: from.characterIndex, to: to.characterIndex) - } - - func boundsCheck(_ idx: AttributedString.Index) { - precondition(idx.characterIndex >= string.startIndex && idx.characterIndex <= string.endIndex, "AttributedString index is out of bounds") - } - - func boundsCheck(_ range: Range) { - precondition(range.lowerBound.characterIndex >= string.startIndex && range.upperBound.characterIndex <= string.endIndex, "AttributedString index range is out of bounds") - } - - func boundsCheck(_ idx: Runs.Index) { - precondition(idx.rangeIndex >= 0 && idx.rangeIndex < runs.count, "AttributedString.Runs index is out of bounds") - } - - func run(at position: Runs.Index, clampedBy range: Range) -> Runs.Run { - boundsCheck(position) - let (internalRun, loc) = runAndLocation(at: position.rangeIndex) - let result = Runs.Run(_internal: internalRun, _rangeOrStartIndex: .startIndex(index(for: loc)), _guts: self) - return result.run(clampedTo: range) - - } - - func run(at position: AttributedString.Index, clampedBy clampRange: Range) -> (_InternalRun, Range) { - boundsCheck(position) - let location = utf8Distance(from: startIndex, to: position) - let (run, startIdx) = runAndLocation(containing: location) - let start = index(for: startIdx) - let end = index(for: startIdx + run.length) - return (run, (start ..< end).clamped(to: clampRange)) - } - - func indexOfRun(at position: AttributedString.Index) -> Runs.Index { - boundsCheck(position) - // !!!: Blech - if position == self.endIndex { - return Runs.Index(rangeIndex: runs.endIndex) - } - - return Runs.Index(rangeIndex: indexOfRun(containing: utf8Distance(from: startIndex, to: position))) - } - - // Returns all the runs in the receiver, in the given range. - func runs(in range: Range, relativeTo newString: String) -> [_InternalRun] { - let lowerBound = utf8Distance(from: startIndex, to: range.lowerBound) - let upperBound = lowerBound + utf8Distance(from: range.lowerBound, to: range.upperBound) - return runs(containing: lowerBound ..< upperBound) - } - - func getValue(at index: Index, key: String) -> Any? { - run(containing: utf8Distance(from: startIndex, to: index)).attributes.contents[key] - } - - func getValue(in range: Range, key: String) -> Any? { - var result : Any? = nil - let lowerBound = utf8Distance(from: startIndex, to: range.lowerBound) - let upperBound = lowerBound + utf8Distance(from: range.lowerBound, to: range.upperBound) - enumerateRuns(containing: lowerBound ..< upperBound) { run, location, stop, modified in - modified = .guaranteedNotModified - guard let value = run.attributes.contents[key] else { - result = nil - stop = true - return - } - - if let previous = result, !__equalAttributes(previous, value) { - result = nil - stop = true - return - } - result = value - } - return result - } - - func getValues(in range: Range) -> [String : Any] { - var contents = [String : Any]() - let lowerBound = utf8Distance(from: startIndex, to: range.lowerBound) - let upperBound = lowerBound + utf8Distance(from: range.lowerBound, to: range.upperBound) - enumerateRuns(containing: lowerBound ..< upperBound) { run, _, stop, modification in - modification = .guaranteedNotModified - if contents.isEmpty { - contents = run.attributes.contents - } else { - contents = contents.filter { - run.attributes.contents.keys.contains($0.key) && __equalAttributes($0.value, run.attributes.contents[$0.key]) - } - } - if contents.isEmpty { - stop = true - } - } - return contents - } - - func add(value: Any, in range: Range, key: String) { - self.enumerateRuns(containing: utf8OffsetRange(from: range)) { run, _, _, _ in - run.attributes.contents[key] = value - } - } - - func add(attributes: AttributeContainer, in range: Range, mergePolicy: AttributeMergePolicy = .keepNew) { - let newAttrDict = attributes.contents - let closure = mergePolicy.combinerClosure - self.enumerateRuns(containing: utf8OffsetRange(from: range)) { run, _, _, _ in - run.attributes.mergeIn(newAttrDict, uniquingKeysWith: closure) - } - } - - func set(attributes: AttributeContainer, in range: Range) { - let newAttrDict = attributes.contents - let range = utf8OffsetRange(from: range) - self.replaceRunsSubrange(locations: range, with: [_InternalRun(length: range.endIndex - range.startIndex, attributes: _AttributeStorage(newAttrDict))]) - } - - func remove(attribute: T.Type, in range: Range) { - self.enumerateRuns(containing: utf8OffsetRange(from: range)) { run, _, _, _ in - run.attributes.contents[T.name] = nil - } - } - - func remove(key: String, in range: Range) { - self.enumerateRuns(containing: utf8OffsetRange(from: range)) { run, _, _, _ in - run.attributes.contents[key] = nil - } - } - - func replaceSubrange(_ range: Range, with s: S) { - let otherStringRange = s.startIndex.characterIndex ..< s.endIndex.characterIndex - let thisStringRange = range._stringRange - let otherString = s.__guts.string[otherStringRange] - let lowerBound = utf8Distance(from: startIndex, to: range.lowerBound) - let upperBound = lowerBound + utf8Distance(from: range.lowerBound, to: range.upperBound) - if string[thisStringRange] != otherString { - // Faster to allocate and pass String(otherString) than pass otherString because taking - // replaceSubrange's fast paths for String objects is better than not allocating a String - string.replaceSubrange(thisStringRange, with: String(otherString)) - } - let otherLowerBound = utf8Distance(from: s.__guts.startIndex, to: s.startIndex) - let otherUpperBound = otherLowerBound + utf8Distance(from: s.startIndex, to: s.endIndex) - self.replaceRunsSubrange(locations: lowerBound ..< upperBound, with: s.__guts.runs(containing: otherLowerBound ..< otherUpperBound)) - } - - func attributesToUseForReplacement(in range: Range) -> _AttributeStorage { - guard !self.string.isEmpty else { - return _AttributeStorage() - } - if !range.isEmpty { - return self.run(at: range.lowerBound, clampedBy: self.startIndex ..< self.endIndex).0.attributes - } else if range.lowerBound > self.startIndex { - let prevIndex = self.index(byUTF8Before: range.lowerBound) - return self.run(at: prevIndex, clampedBy: self.startIndex ..< self.endIndex).0.attributes - } else { - return self.run(at: self.startIndex, clampedBy: self.startIndex ..< self.endIndex).0.attributes - } - } - - } - - internal var _guts : Guts - - internal enum RangeOrStartIndex : Equatable { - case range(Range) - case startIndex(AttributedString.Index) - } - public struct Runs : BidirectionalCollection, Equatable, CustomStringConvertible { - public struct Index : Comparable, Strideable { - internal let rangeIndex : Int - - public static func < (lhs: AttributedString.Runs.Index, rhs: AttributedString.Runs.Index) -> Bool { - return lhs.rangeIndex < rhs.rangeIndex - } - - public func distance(to other: AttributedString.Runs.Index) -> Int { - return other.rangeIndex - rangeIndex - } - - public func advanced(by n: Int) -> AttributedString.Runs.Index { - Index(rangeIndex: rangeIndex + n) - } - } - - @dynamicMemberLookup - public struct Run : Equatable, CustomStringConvertible { - - public var range : Range { - switch _rangeOrStartIndex { - case .range(let range): - return range - case .startIndex(let startIndex): - return startIndex ..< _guts.index(startIndex, offsetByUTF8: _internal.length) - } - } - internal var startIndex : AttributedString.Index { - switch _rangeOrStartIndex { - case .range(let range): - return range.lowerBound - case .startIndex(let startIndex): - return startIndex - } - } - internal var _attributes : _AttributeStorage { - return _internal.attributes - } - - internal let _internal : _InternalRun - internal let _rangeOrStartIndex : RangeOrStartIndex - internal let _guts : AttributedString.Guts - internal init(_internal: _InternalRun, _rangeOrStartIndex: RangeOrStartIndex, _guts: AttributedString.Guts) { - self._internal = _internal - self._rangeOrStartIndex = _rangeOrStartIndex - self._guts = _guts - } - internal init(_ other: Runs.Run) { - self._internal = other._internal - self._rangeOrStartIndex = other._rangeOrStartIndex - self._guts = other._guts - } - - public static func == (lhs: Run, rhs: Run) -> Bool { - return lhs._internal == rhs._internal - } - - public var description: String { - AttributedSubstring(_guts, range).description - } - - internal func run(clampedTo range: Range) -> Run { - var newInternal = _internal - let newRange = self.range.clamped(to: range) - newInternal.length = _guts.utf8Distance(from: newRange.lowerBound, to: newRange.upperBound) - return Run(_internal: newInternal, _rangeOrStartIndex: .range(newRange), _guts: _guts) - } - - public subscript(dynamicMember keyPath: KeyPath) -> K.Value? { - get { self[K.self] } - } - - public subscript(_: K.Type) -> K.Value? { - get { _internal.attributes.contents[K.name] as? K.Value } - } - - public subscript(dynamicMember keyPath: KeyPath) -> ScopedAttributeContainer { - get { ScopedAttributeContainer(_internal.attributes.contents) } - } - - internal subscript(_ scope: S.Type) -> ScopedAttributeContainer { - get { ScopedAttributeContainer(_internal.attributes.contents) } - } - - public var attributes : AttributeContainer { - AttributeContainer(self._attributes.contents) - } - } - - - public typealias Element = Run - - internal var _guts : Guts - internal var _range : Range - internal var _startingRunIndex : Int - internal var _endingRunIndex : Int - internal init(_ g: Guts, _ r: Range) { - _guts = g - _range = r - _startingRunIndex = _guts.indexOfRun(at: _range.lowerBound).rangeIndex - if _range.upperBound == _guts.endIndex { - _endingRunIndex = _guts.runs.count - } else if _range.upperBound == _guts.startIndex { - _endingRunIndex = 0 - } else { - _endingRunIndex = _guts.indexOfRun(at: _guts.index(byUTF8Before: _range.upperBound)).rangeIndex + 1 - } - } - - public static func == (lhs: Runs, rhs: Runs) -> Bool { - let lhsSlice = lhs._guts.runs[lhs._startingRunIndex ..< lhs._endingRunIndex] - let rhsSlice = rhs._guts.runs[rhs._startingRunIndex ..< rhs._endingRunIndex] - - // If there are different numbers of runs, they aren't equal - guard lhsSlice.count == rhsSlice.count else { - return false - } - - let runCount = lhsSlice.count - - // Empty slices are always equal - guard runCount > 0 else { - return true - } - - // Compare the first run (clamping their ranges) since we know each has at least one run - if lhs._guts.run(at: lhs.startIndex, clampedBy: lhs._range) != rhs._guts.run(at: rhs.startIndex, clampedBy: rhs._range) { - return false - } - - // Compare all inner runs if they exist without needing to clamp ranges - if runCount > 2 && !lhsSlice[lhsSlice.startIndex + 1 ..< lhsSlice.endIndex - 1].elementsEqual(rhsSlice[rhsSlice.startIndex + 1 ..< rhsSlice.endIndex - 1]) { - return false - } - - // If there are more than one run (so we didn't already check this as the first run), check the last run (clamping its range) - if runCount > 1 && lhs._guts.run(at: Index(rangeIndex: lhs._endingRunIndex - 1), clampedBy: lhs._range) != rhs._guts.run(at: Index(rangeIndex: rhs._endingRunIndex - 1), clampedBy: rhs._range) { - return false - } - - return true - } - - public var description: String { - AttributedSubstring(_guts, _range).description - } - - public func index(before i: Index) -> Index { - return Index(rangeIndex: i.rangeIndex-1) - } - - public func index(after i: Index) -> Index { - return Index(rangeIndex: i.rangeIndex+1) - } - - public var startIndex: Index { - return Index(rangeIndex: _startingRunIndex) - } - - public var endIndex: Index { - return Index(rangeIndex: _endingRunIndex) - } - - public subscript(position: Index) -> Run { - return _guts.run(at: position, clampedBy: _range) - } - - internal subscript(internal position: Index) -> _InternalRun { - return _guts.runs[position.rangeIndex] - } - - public subscript(position: AttributedString.Index) -> Run { - let (internalRun, range) = _guts.run(at: position, clampedBy: _range) - return Run(_internal: internalRun, _rangeOrStartIndex: .range(range), _guts: _guts) - } - - // ???: public? - internal func indexOfRun(at position: AttributedString.Index) -> Index { - return _guts.indexOfRun(at: position) - } - - internal static func __equalAttributeSlices(lhs: _AttributeStorage, rhs: _AttributeStorage, attributes: [String]) -> Bool { - for name in attributes { - if !__equalAttributes(lhs.contents[name], rhs.contents[name]) { - return false - } - } - return true - } - - internal func _runs_index(before i: AttributedString.Index, startIndex: AttributedString.Index, endIndex: AttributedString.Index, attributeNames: [String], findingStartOfCurrentSlice: Bool = false) -> AttributedString.Index { - let beginningOfInitialRun = (i == endIndex) ? endIndex : self[i].startIndex - var currentIndex = i - var attributes : _AttributeStorage? - var result = i - if findingStartOfCurrentSlice { - attributes = self[currentIndex]._attributes - } - repeat { - if beginningOfInitialRun < currentIndex { - currentIndex = beginningOfInitialRun - } else { - currentIndex = self._guts.index(byCharactersBefore: currentIndex) - } - let currentRun = self[currentIndex] - if let attrs = attributes { - if !Self.__equalAttributeSlices(lhs: attrs, rhs: currentRun._attributes, attributes: attributeNames) { - break - } - } else { - attributes = currentRun._attributes - } - - switch currentRun._rangeOrStartIndex { - case .range(let r): - result = r.clamped(to: startIndex ..< endIndex).lowerBound - case .startIndex(let si): - result = Swift.max(si, startIndex) - } - } while result > startIndex - return result - } - - internal func _runs_index(after i: AttributedString.Index, startIndex: AttributedString.Index, endIndex: AttributedString.Index, attributeNames: [String]) -> AttributedString.Index { - let thisRunIndex = self.indexOfRun(at: i) - let thisRun = self[internal: thisRunIndex] - var nextRunIndex = self.index(after: thisRunIndex) - while nextRunIndex < self.endIndex { - let (nextRun, location) = self._guts.runAndLocation(at: nextRunIndex.rangeIndex) // Call to guts directly to avoid unneccesary range clamping - if !Self.__equalAttributeSlices(lhs: thisRun.attributes, rhs: nextRun.attributes, attributes: attributeNames) { - return self._guts.index(_guts.startIndex, offsetByUTF8: location) - } - nextRunIndex = self.index(after: nextRunIndex) - } - return endIndex - } - - internal func _runs_attributesAndRangeAt(position: AttributedString.Index, from previousRunIndex: AttributedString.Index, through nextRunIndex: AttributedString.Index) -> (_AttributeStorage, Range) { - let thisRunIndex = self.indexOfRun(at: position) - let thisRun = self[thisRunIndex] - let range = previousRunIndex ..< nextRunIndex - return (thisRun._attributes, range) - } - - public struct AttributesSlice1 : BidirectionalCollection { - public typealias Index = AttributedString.Index - public typealias Element = (T.Value?, Range) - - public struct Iterator: IteratorProtocol { - public typealias Element = AttributesSlice1.Element - - let slice: AttributesSlice1 - var currentIndex: AttributedString.Index - var cachedNextRunIndex: AttributedString.Index? - - internal init(_ slice: AttributesSlice1) { - self.slice = slice - currentIndex = slice.startIndex - } - - public mutating func next() -> Element? { - if let cached = cachedNextRunIndex { - currentIndex = cached - } - if currentIndex == slice.endIndex { - return nil - } - cachedNextRunIndex = slice.runs._runs_index(after: currentIndex, startIndex: slice.startIndex, endIndex: slice.endIndex, attributeNames: [T.name]) - let (attrContents, range) = slice.runs._runs_attributesAndRangeAt(position: currentIndex, from: currentIndex, through: cachedNextRunIndex!) - return (attrContents[T.self], range) - } - } - - public func makeIterator() -> Iterator { - Iterator(self) - } - - public var startIndex: Index { - runs._range.lowerBound - } - public var endIndex: Index { - runs._range.upperBound - } - - public func index(before i: Index) -> Index { - runs._runs_index(before: i, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name]) - } - - public func index(after i: Index) -> Index { - runs._runs_index(after: i, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name]) - } - - public subscript(position: AttributedString.Index) -> Element { - let nextRunIndex = self.index(after: position) - let previousRunIndex : AttributedString.Index - if position == startIndex { - previousRunIndex = position - } else { - previousRunIndex = runs._runs_index(before: position, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name], findingStartOfCurrentSlice: true) - } - let (attrContents, range) = runs._runs_attributesAndRangeAt(position: position, from: previousRunIndex, through: nextRunIndex) - return (attrContents[T.self], range) - } - - let runs : Runs - } - - public struct AttributesSlice2 - : BidirectionalCollection { - public typealias Index = AttributedString.Index - public typealias Element = (T.Value?, U.Value?, Range) - - public struct Iterator: IteratorProtocol { - public typealias Element = AttributesSlice2.Element - - let slice: AttributesSlice2 - var currentIndex: AttributedString.Index - var cachedNextRunIndex: AttributedString.Index? - - internal init(_ slice: AttributesSlice2) { - self.slice = slice - currentIndex = slice.startIndex - } - - public mutating func next() -> Element? { - if let cached = cachedNextRunIndex { - currentIndex = cached - } - if currentIndex == slice.endIndex { - return nil - } - cachedNextRunIndex = slice.runs._runs_index(after: currentIndex, startIndex: slice.startIndex, endIndex: slice.endIndex, attributeNames: [T.name, U.name]) - let (attrContents, range) = slice.runs._runs_attributesAndRangeAt(position: currentIndex, from: currentIndex, through: cachedNextRunIndex!) - return (attrContents[T.self], attrContents[U.self], range) - } - } - - public func makeIterator() -> Iterator { - Iterator(self) - } - - public var startIndex: Index { - runs._range.lowerBound - } - public var endIndex: Index { - runs._range.upperBound - } - - public func index(before i: Index) -> Index { - runs._runs_index(before: i, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name, U.name]) - } - - public func index(after i: Index) -> Index { - runs._runs_index(after: i, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name, U.name]) - } - - public subscript(position: AttributedString.Index) -> Element { - let nextRunIndex = self.index(after: position) - let previousRunIndex : AttributedString.Index - if position == startIndex { - previousRunIndex = position - } else { - previousRunIndex = runs._runs_index(before: position, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name, U.name], findingStartOfCurrentSlice: true) - } - let (attrContents, range) = runs._runs_attributesAndRangeAt(position: position, from: previousRunIndex, through: nextRunIndex) - return (attrContents[T.self], attrContents[U.self], range) - } - - let runs : Runs - } - - public struct AttributesSlice3 - : BidirectionalCollection { - public typealias Index = AttributedString.Index - public typealias Element = (T.Value?, U.Value?, V.Value?, Range) - - public struct Iterator: IteratorProtocol { - public typealias Element = AttributesSlice3.Element - - let slice: AttributesSlice3 - var currentIndex: AttributedString.Index - var cachedNextRunIndex: AttributedString.Index? - - internal init(_ slice: AttributesSlice3) { - self.slice = slice - currentIndex = slice.startIndex - } - - public mutating func next() -> Element? { - if let cached = cachedNextRunIndex { - currentIndex = cached - } - if currentIndex == slice.endIndex { - return nil - } - cachedNextRunIndex = slice.runs._runs_index(after: currentIndex, startIndex: slice.startIndex, endIndex: slice.endIndex, attributeNames: [T.name, U.name, V.name]) - let (attrContents, range) = slice.runs._runs_attributesAndRangeAt(position: currentIndex, from: currentIndex, through: cachedNextRunIndex!) - return (attrContents[T.self], attrContents[U.self], attrContents[V.self], range) - } - } - - public func makeIterator() -> Iterator { - Iterator(self) - } - - public var startIndex: Index { - runs._range.lowerBound - } - public var endIndex: Index { - runs._range.upperBound - } - - public func index(before i: Index) -> Index { - runs._runs_index(before: i, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name, U.name, V.name]) - } - - public func index(after i: Index) -> Index { - runs._runs_index(after: i, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name, U.name, V.name]) - } - - public subscript(position: AttributedString.Index) -> Element { - let nextRunIndex = self.index(after: position) - let previousRunIndex : AttributedString.Index - if position == startIndex { - previousRunIndex = position - } else { - previousRunIndex = runs._runs_index(before: position, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name, U.name, V.name], findingStartOfCurrentSlice: true) - } - let (attrContents, range) = runs._runs_attributesAndRangeAt(position: position, from: previousRunIndex, through: nextRunIndex) - return (attrContents[T.self], attrContents[U.self], attrContents[V.self], range) - } - - let runs : Runs - } - - public struct AttributesSlice4 - : BidirectionalCollection { - public typealias Index = AttributedString.Index - public typealias Element = (T.Value?, U.Value?, V.Value?, W.Value?, Range) - - public struct Iterator: IteratorProtocol { - public typealias Element = AttributesSlice4.Element - - let slice: AttributesSlice4 - var currentIndex: AttributedString.Index - var cachedNextRunIndex: AttributedString.Index? - - internal init(_ slice: AttributesSlice4) { - self.slice = slice - currentIndex = slice.startIndex - } - - public mutating func next() -> Element? { - if let cached = cachedNextRunIndex { - currentIndex = cached - } - if currentIndex == slice.endIndex { - return nil - } - cachedNextRunIndex = slice.runs._runs_index(after: currentIndex, startIndex: slice.startIndex, endIndex: slice.endIndex, attributeNames: [T.name, U.name, V.name, W.name]) - let (attrContents, range) = slice.runs._runs_attributesAndRangeAt(position: currentIndex, from: currentIndex, through: cachedNextRunIndex!) - return (attrContents[T.self], attrContents[U.self], attrContents[V.self], attrContents[W.self], range) - } - } - - public func makeIterator() -> Iterator { - Iterator(self) - } - - public var startIndex: Index { - runs._range.lowerBound - } - public var endIndex: Index { - runs._range.upperBound - } - - public func index(before i: Index) -> Index { - runs._runs_index(before: i, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name, U.name, V.name, W.name]) - } - - public func index(after i: Index) -> Index { - runs._runs_index(after: i, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name, U.name, V.name, W.name]) - } - - public subscript(position: AttributedString.Index) -> Element { - let nextRunIndex = self.index(after: position) - let previousRunIndex : AttributedString.Index - if position == startIndex { - previousRunIndex = position - } else { - previousRunIndex = runs._runs_index(before: position, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name, U.name, V.name, W.name], findingStartOfCurrentSlice: true) - } - let (attrContents, range) = runs._runs_attributesAndRangeAt(position: position, from: previousRunIndex, through: nextRunIndex) - return (attrContents[T.self], attrContents[U.self], attrContents[V.self], attrContents[W.self], range) - } - - let runs : Runs - } - - public struct AttributesSlice5 - : BidirectionalCollection { - public typealias Index = AttributedString.Index - public typealias Element = (T.Value?, U.Value?, V.Value?, W.Value?, X.Value?, Range) - - public struct Iterator: IteratorProtocol { - public typealias Element = AttributesSlice5.Element - - let slice: AttributesSlice5 - var currentIndex: AttributedString.Index - var cachedNextRunIndex: AttributedString.Index? - - internal init(_ slice: AttributesSlice5) { - self.slice = slice - currentIndex = slice.startIndex - } - - public mutating func next() -> Element? { - if let cached = cachedNextRunIndex { - currentIndex = cached - } - if currentIndex == slice.endIndex { - return nil - } - cachedNextRunIndex = slice.runs._runs_index(after: currentIndex, startIndex: slice.startIndex, endIndex: slice.endIndex, attributeNames: [T.name, U.name, V.name, W.name, X.name]) - let (attrContents, range) = slice.runs._runs_attributesAndRangeAt(position: currentIndex, from: currentIndex, through: cachedNextRunIndex!) - return (attrContents[T.self], attrContents[U.self], attrContents[V.self], attrContents[W.self], attrContents[X.self], range) - } - } - - public func makeIterator() -> Iterator { - Iterator(self) - } - - public var startIndex: Index { - runs._range.lowerBound - } - public var endIndex: Index { - runs._range.upperBound - } - - public func index(before i: Index) -> Index { - runs._runs_index(before: i, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name, U.name, V.name, W.name, X.name]) - } - - public func index(after i: Index) -> Index { - runs._runs_index(after: i, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name, U.name, V.name, W.name, X.name]) - } - - public subscript(position: AttributedString.Index) -> Element { - let nextRunIndex = self.index(after: position) - let previousRunIndex : AttributedString.Index - if position == startIndex { - previousRunIndex = position - } else { - previousRunIndex = runs._runs_index(before: position, startIndex: startIndex, endIndex: endIndex, attributeNames: [T.name, U.name, V.name, W.name, X.name], findingStartOfCurrentSlice: true) - } - let (attrContents, range) = runs._runs_attributesAndRangeAt(position: position, from: previousRunIndex, through: nextRunIndex) - return (attrContents[T.self], attrContents[U.self], attrContents[V.self], attrContents[W.self], attrContents[X.self], range) - } - - let runs : Runs - } - - public subscript < - T : AttributedStringKey, - U : AttributedStringKey, - V : AttributedStringKey, - W : AttributedStringKey, - X : AttributedStringKey> (_ t: KeyPath, - _ u: KeyPath, - _ v: KeyPath, - _ w: KeyPath, - _ x: KeyPath) -> AttributesSlice5 - { - return AttributesSlice5(runs: self) - } - - public subscript < - T : AttributedStringKey, - U : AttributedStringKey, - V : AttributedStringKey, - W : AttributedStringKey> (_ t: KeyPath, - _ u: KeyPath, - _ v: KeyPath, - _ w: KeyPath) -> AttributesSlice4 - { - return AttributesSlice4(runs: self) - } - - public subscript < - T : AttributedStringKey, - U : AttributedStringKey, - V : AttributedStringKey> (_ t: KeyPath, - _ u: KeyPath, - _ v: KeyPath) -> AttributesSlice3 - { - return AttributesSlice3(runs: self) - } - - public subscript < - T : AttributedStringKey, - U : AttributedStringKey> (_ t: KeyPath, - _ u: KeyPath) -> AttributesSlice2 - { - return AttributesSlice2(runs: self) - } - - public subscript(_ keyPath: KeyPath) -> AttributesSlice1 { - return AttributesSlice1(runs: self) - } - - public subscript < - T : AttributedStringKey, - U : AttributedStringKey, - V : AttributedStringKey, - W : AttributedStringKey, - X : AttributedStringKey> (_ t: T.Type, - _ u: U.Type, - _ v: V.Type, - _ w: W.Type, - _ x: X.Type) -> AttributesSlice5 - { - return AttributesSlice5(runs: self) - } - - public subscript < - T : AttributedStringKey, - U : AttributedStringKey, - V : AttributedStringKey, - W : AttributedStringKey> (_ t: T.Type, - _ u: U.Type, - _ v: V.Type, - _ w: W.Type) -> AttributesSlice4 - { - return AttributesSlice4(runs: self) - } - - public subscript < - T : AttributedStringKey, - U : AttributedStringKey, - V : AttributedStringKey> (_ t: T.Type, - _ u: U.Type, - _ v: V.Type) -> AttributesSlice3 - { - return AttributesSlice3(runs: self) - } - - public subscript < - T : AttributedStringKey, - U : AttributedStringKey> (_ t: T.Type, - _ u: U.Type) -> AttributesSlice2 - { - return AttributesSlice2(runs: self) - } - - public subscript(_ t: T.Type) -> AttributesSlice1 { - return AttributesSlice1(runs: self) - } - - } - - public var runs : Runs { - get { .init(_guts, _guts.startIndex ..< _guts.endIndex) } - } - - public struct CharacterView : BidirectionalCollection, RangeReplaceableCollection { - public typealias Element = Character - public typealias Index = AttributedString.Index - - internal var _guts : Guts - internal var _range : Range - internal var _identity : Int = 0 - internal init(_ g: Guts, _ r: Range) { - _guts = g - _range = r - } - - public init() { - _guts = Guts(string: "", runs: []) - _range = _guts.startIndex ..< _guts.endIndex - } - - public var startIndex: AttributedString.Index { - return _range.lowerBound - } - - public var endIndex: AttributedString.Index { - return _range.upperBound - } - - public func index(before i: AttributedString.Index) -> AttributedString.Index { - return _guts.index(byCharactersBefore: i) - } - - public func index(after i: AttributedString.Index) -> AttributedString.Index { - return _guts.index(byCharactersAfter: i) - } - - internal mutating func ensureUniqueReference() { - if !isKnownUniquelyReferenced(&_guts) { - _guts = Guts(_guts) - } - } - - public subscript(index: AttributedString.Index) -> Character { - get { - _guts.string[index.characterIndex] - } - set { - self.replaceSubrange(index ..< _guts.index(byCharactersAfter: index), with: [newValue]) - } - } - - public subscript(bounds: Range) -> Slice { - get { - Slice(base: self, bounds: bounds) - } - set { - ensureUniqueReference() - let newAttributedString = AttributedString(String(newValue)) - if newAttributedString._guts.runs.count > 0 { - var run = newAttributedString._guts.runs[0] - run.attributes = _guts.run(at: bounds.lowerBound, clampedBy: _range).0.attributes // ???: Is this right? - newAttributedString._guts.updateAndCoalesce(run: run, at: 0) - } - _guts.replaceSubrange(bounds, with: newAttributedString) - } - } - - public mutating func replaceSubrange(_ subrange: Range, with newElements: C) where C.Element == Character { - ensureUniqueReference() - let newAttributedString = AttributedString(String(newElements)) - if newAttributedString._guts.runs.count > 0 { - var run = newAttributedString._guts.runs[0] - run.attributes = _guts.attributesToUseForReplacement(in: subrange) - newAttributedString._guts.updateAndCoalesce(run: run, at: 0) - } - - // !!!: We're dealing with Characters in this view, but the subrange could sub-Character indexes. I'm pretty sure this will FATALERROR if they do if we try to compute character distance. This needs serious vetting & testing. - let sliceOffset = _guts.utf8Distance(from: _guts.startIndex, to: self.startIndex) - let newSliceCount = _guts.utf8Distance(from: self.startIndex, to: subrange.lowerBound) + _guts.utf8Distance(from: subrange.upperBound, to: self.endIndex) + String(newElements).utf8.count - _guts.replaceSubrange(subrange, with: newAttributedString) - _range = _guts.index(_guts.startIndex, offsetByUTF8: sliceOffset) ..< _guts.index(self.startIndex, offsetByUTF8: newSliceCount) - } - } - - public struct UnicodeScalarView : RangeReplaceableCollection, BidirectionalCollection { - public typealias Element = UnicodeScalar - public typealias Index = AttributedString.Index - - internal var _guts : Guts - internal var _range : Range - internal var _identity : Int = 0 - internal init(_ g: Guts, _ r: Range) { - _guts = g - _range = r - } - - public init() { - _guts = Guts(string: "", runs: []) - _range = _guts.startIndex ..< _guts.endIndex - } - - public var startIndex: AttributedString.Index { - return _range.lowerBound - } - - public var endIndex: AttributedString.Index { - return _range.upperBound - } - - public func index(before i: AttributedString.Index) -> AttributedString.Index { - let index = _guts.string.unicodeScalars.index(before: i.characterIndex) - return Index(characterIndex: index) - } - - public func index(after i: AttributedString.Index) -> AttributedString.Index { - let index = _guts.string.unicodeScalars.index(after: i.characterIndex) - return Index(characterIndex: index) - } - - public func index(_ i: AttributedString.Index, offsetBy distance: Int) -> AttributedString.Index { - let index = _guts.string.unicodeScalars.index(i.characterIndex, offsetBy: distance) - return Index(characterIndex: index) - } - - public subscript(index: AttributedString.Index) -> UnicodeScalar { - _guts.string.unicodeScalars[index.characterIndex] - } - - public subscript(bounds: Range) -> Slice { - Slice(base: self, bounds: bounds) - } - - internal mutating func ensureUniqueReference() { - if !isKnownUniquelyReferenced(&_guts) { - _guts = Guts(_guts) - } - } - - public mutating func replaceSubrange(_ subrange: Range, with newElements: C) where C.Element == UnicodeScalar { - ensureUniqueReference() - let unicodeScalarView = String.UnicodeScalarView(newElements) - let newAttributedString = AttributedString(String(unicodeScalarView)) - if newAttributedString._guts.runs.count > 0 { - var run = newAttributedString._guts.runs[0] - run.attributes = _guts.attributesToUseForReplacement(in: subrange) - newAttributedString._guts.updateAndCoalesce(run: run, at: 0) - } - - // !!!: We're dealing with Characters in this view, but the subrange could sub-Character indexes. I'm pretty sure this will FATALERROR if they do if we try to compute character distance. This needs serious vetting & testing. - let sliceOffset = _guts.utf8Distance(from: _guts.startIndex, to: self.startIndex) - let newSliceCount = _guts.utf8Distance(from: self.startIndex, to: subrange.lowerBound) + _guts.utf8Distance(from: subrange.upperBound, to: self.endIndex) + newElements.count - _guts.replaceSubrange(subrange, with: newAttributedString) - _range = _guts.index(_guts.startIndex, offsetByUTF8: sliceOffset) ..< _guts.index(self.startIndex, offsetByUTF8: newSliceCount) - } - } - - public var characters : CharacterView { - get { - return CharacterView(_guts, startIndex ..< endIndex) - } - _modify { - ensureUniqueReference() - var cv = CharacterView(_guts, startIndex ..< endIndex) - let ident = Self._nextModifyIdentity - cv._identity = ident - _guts = Guts(string: "", runs: []) // Dummy guts so the CharacterView has (hopefully) the sole reference - defer { - if cv._identity != ident { - fatalError("Mutating a CharacterView by replacing it with another from a different source is unsupported") - } - _guts = cv._guts - } - yield &cv - } set { - self.characters.replaceSubrange(startIndex ..< endIndex, with: newValue) - } - } - - public var unicodeScalars : UnicodeScalarView { - get { - UnicodeScalarView(_guts, startIndex ..< endIndex) - } - _modify { - ensureUniqueReference() - var usv = UnicodeScalarView(_guts, startIndex ..< endIndex) - let ident = Self._nextModifyIdentity - usv._identity = ident - _guts = Guts(string: "", runs: []) // Dummy guts so the UnicodeScalarView has (hopefully) the sole reference - defer { - if usv._identity != ident { - fatalError("Mutating a UnicodeScalarView by replacing it with another from a different source is unsupported") - } - _guts = usv._guts - } - yield &usv - } set { - self.unicodeScalars.replaceSubrange(startIndex ..< endIndex, with: newValue) - } - } - - // MARK: Protocol conformance - - public static func == (lhs: Self, rhs: Self) -> Bool { - return lhs._guts == rhs._guts - } - - // MARK: Initialization - - public init() { - self.init("") - } - - fileprivate init(_ string: String, attributes: _AttributeStorage) { - if string.isEmpty { - _guts = Guts(string: string, runs: []) - } else { - let run = _InternalRun(length: string.utf8.count, attributes: attributes) - _guts = Guts(string: string, runs: [run]) - } - } - - /// Creates a new attributed string with the given `String` value associated with the given - /// attributes. - public init(_ string: String, attributes: AttributeContainer = .init()) { - var storage = _AttributeStorage() - storage.contents = attributes.contents - self.init(string, attributes: storage) - } - - /// Creates a new attributed string with the given `Substring` value associated with the given - /// attributes. - public init(_ substring: Substring, attributes: AttributeContainer = .init()) { - self.init(String(substring), attributes: attributes) - } - - public init(_ elements: S, attributes: AttributeContainer = .init()) where S.Element == Character { - if let string = elements as? String { - self.init(string, attributes: attributes) - return - } - if let substring = elements as? Substring { - self.init(substring, attributes: attributes) - return - } - self.init(String(elements), attributes: attributes) - } - - public init(_ substring: AttributedSubstring) { - let newString = String(substring._guts.string[substring._range._stringRange]) - let newRuns = substring._guts.runs(in: substring._range, relativeTo: newString) - _guts = Guts(string: newString, runs: newRuns) - } - - internal init(_ guts: Guts) { - _guts = guts - } - - public init(_ other: T, including scope: KeyPath) { - self.init(other, including: S.self) - } - - public init(_ other: T, including scope: S.Type) { - self.init(Guts(other.__guts, range: other.startIndex ..< other.endIndex)) - var attributeCache = [String : Bool]() - _guts.enumerateRuns { run, _, _, modification in - modification = .guaranteedNotModified - for key in run.attributes.contents.keys { - var inScope: Bool - if let cachedInScope = attributeCache[key] { - inScope = cachedInScope - } else { - inScope = scope.attributeKeyType(matching: key) != nil - attributeCache[key] = inScope - } - - if !inScope { - run.attributes.contents.removeValue(forKey: key) - modification = .guaranteedModified - } - } - } - } - - // MARK: Appending - - internal mutating func ensureUniqueReference() { - if !isKnownUniquelyReferenced(&_guts) { - _guts = Guts(_guts) - } - } - - public static func + (lhs: AttributedString, rhs: T) -> AttributedString { - var result = lhs - result.append(rhs) - return result - } - - public static func += (lhs: inout AttributedString, rhs: T) { - lhs.append(rhs) - } - - public static func + (lhs: AttributedString, rhs: AttributedString) -> AttributedString { - var result = lhs - result.append(rhs) - return result - } - - public static func += (lhs: inout Self, rhs: AttributedString) { - lhs.append(rhs) - } - - // MARK: Attribute Access - - internal static var currentIdentity = 0 - internal static var currentIdentityLock = Lock() - internal static var _nextModifyIdentity : Int { - currentIdentityLock.lock() - currentIdentity += 1 - let result = currentIdentity - currentIdentityLock.unlock() - return result - } - - public subscript(bounds: R) -> AttributedSubstring where R.Bound == Index { - get { - return AttributedSubstring(_guts, bounds.relative(to: characters)) - } - _modify { - ensureUniqueReference() - var substr = AttributedSubstring(_guts, bounds.relative(to: characters)) - let ident = Self._nextModifyIdentity - substr._identity = ident - _guts = Guts(string: "", runs: []) // Dummy guts so the substr has (hopefully) the sole reference - defer { - if substr._identity != ident { - fatalError("Mutating an AttributedSubstring by replacing it with another from a different source is unsupported") - } - _guts = substr._guts - } - yield &substr - } - set { - self.replaceSubrange(bounds, with: newValue) - } - } - - public mutating func append(_ s: S) { - replaceSubrange(endIndex ..< endIndex, with: s) - } - - public mutating func insert(_ s: S, at index: AttributedString.Index) { - replaceSubrange(index ..< index, with: s) - } - - public mutating func removeSubrange(_ range: R) where R.Bound == Index { - replaceSubrange(range, with: AttributedString()) - } - - public mutating func replaceSubrange(_ range: R, with s: S) where R.Bound == Index { - ensureUniqueReference() - _guts.replaceSubrange(range.relative(to: characters), with: s) - } - - public var startIndex : Index { - return _guts.startIndex - } - - public var endIndex : Index { - return _guts.endIndex - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributedString : ExpressibleByStringLiteral { - public init(stringLiteral value: String) { - self.init(value) - } -} - -@dynamicMemberLookup -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public struct AttributedSubstring { - internal var _guts: AttributedString.Guts - internal var _range: Range - internal var _identity: Int = 0 - - internal init(_ guts: AttributedString.Guts, _ range: Range) { - self._guts = guts - self._range = range - } - - public init() { - let str = AttributedString() - self.init(str._guts, str.startIndex ..< str.endIndex) - } - - public var base : AttributedString { - return AttributedString(_guts) - } - - public var description: String { - var result = "" - self._guts.enumerateRuns(containing: self._guts.utf8OffsetRange(from: _range)) { run, loc, _, modified in - let range = self._guts.index(_guts.startIndex, offsetByUTF8: loc) ..< self._guts.index(_guts.startIndex, offsetByUTF8: loc + run.length) - result += (result.isEmpty ? "" : "\n") + "\(String(self.characters[range])) \(run.attributes)" - modified = .guaranteedNotModified - } - return result - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributedSubstring : AttributedStringProtocol { - public var startIndex: AttributedString.Index { - get { - return _range.lowerBound - } - } - - public var endIndex: AttributedString.Index { - get { - return _range.upperBound - } - } - - public static func == (lhs: Self, rhs: Self) -> Bool { - guard lhs._guts.string[lhs._range._stringRange] == rhs._guts.string[rhs._range._stringRange] else { - return false - } - return lhs.runs == rhs.runs - } - - internal mutating func ensureUniqueReference() { - // Ideally we'd only copy the portions that this range covers. However, we need to be able to vend the .base AttributedString, so we copy the entire Guts. - if !isKnownUniquelyReferenced(&_guts) { - _guts = AttributedString.Guts(_guts, range: _guts.startIndex ..< _guts.endIndex) - } - } - - public mutating func setAttributes(_ attributes: AttributeContainer) { - ensureUniqueReference() - _guts.set(attributes: attributes, in: _range) - } - - public mutating func mergeAttributes(_ attributes: AttributeContainer, mergePolicy: AttributedString.AttributeMergePolicy = .keepNew) { - ensureUniqueReference() - _guts.add(attributes: attributes, in: _range, mergePolicy: mergePolicy) - } - - public mutating func replaceAttributes(_ attributes: AttributeContainer, with others: AttributeContainer) { - guard attributes != others else { - return - } - ensureUniqueReference() - _guts.enumerateRuns { run, _, _, modified in - if _run(run, matches: attributes) { - for key in attributes.contents.keys { - run.attributes.contents.removeValue(forKey: key) - } - run.attributes.mergeIn(others) - modified = .guaranteedModified - } else { - modified = .guaranteedNotModified - } - } - } - - public var runs : AttributedString.Runs { - get { .init(_guts, _range) } - } - - public var characters : AttributedString.CharacterView { - return AttributedString.CharacterView(_guts, startIndex ..< endIndex) - } - - public var unicodeScalars : AttributedString.UnicodeScalarView { - return AttributedString.UnicodeScalarView(_guts, startIndex ..< endIndex) - } - - public subscript(bounds: R) -> AttributedSubstring where R.Bound == AttributedString.Index { - return AttributedSubstring(_guts, bounds.relative(to: characters)) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributedSubstring { - public subscript(_: K.Type) -> K.Value? { - get { _guts.getValue(in: _range, key: K.name) as? K.Value } - set { - ensureUniqueReference() - if let v = newValue { - _guts.add(value: v, in: _range, key: K.name) - } else { - _guts.remove(attribute: K.self, in: _range) - } - } - } - - public subscript(dynamicMember keyPath: KeyPath) -> K.Value? { - get { self[K.self] } - set { self[K.self] = newValue } - } - - public subscript(dynamicMember keyPath: KeyPath) -> ScopedAttributeContainer { - get { - return ScopedAttributeContainer(_guts.getValues(in: _range)) - } - _modify { - ensureUniqueReference() - var container = ScopedAttributeContainer() - defer { - if let removedKey = container.removedKey { - _guts.remove(key: removedKey, in: _range) - } else { - _guts.add(attributes: AttributeContainer(container.contents), in: _range) - } - } - yield &container - } - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension String { - init(_ attrStrSlice: Slice) { - self = String(attrStrSlice.base._guts.string[attrStrSlice.startIndex.characterIndex ..< attrStrSlice.endIndex.characterIndex]) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal func _run(_ run : AttributedString._InternalRun, matches container: AttributeContainer) -> Bool { - let attrs = run.attributes.contents - for (key, value) in container.contents { - if !__equalAttributes(attrs[key], value) { - return false - } - } - return true -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension Range where Bound == AttributedString.Index { - internal var _stringRange : Range { - lowerBound.characterIndex ..< upperBound.characterIndex - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension Range where Bound == String.Index { - internal var _attributedStringRange : Range { - AttributedString.Index(characterIndex: lowerBound) ..< AttributedString.Index(characterIndex: upperBound) - } -} - -internal func __equalAttributes(_ lhs: Any?, _ rhs: Any?) -> Bool { - switch (lhs, rhs) { - case (.none, .none): - return true - case (.none, .some(_)): - return false - case (.some(_), .none): - return false - case (.some(let lhs), .some(let rhs)): - func openLHS(_ lhs: LHS) -> Bool { - if let rhs = rhs as? LHS { - return CheckEqualityIfEquatable(lhs, rhs).attemptAction() ?? false - } else { - return false - } - } - return _openExistential(lhs, do: openLHS) - } -} diff --git a/Sources/Foundation/AttributedString/AttributedStringAttribute.swift b/Sources/Foundation/AttributedString/AttributedStringAttribute.swift deleted file mode 100644 index 5caee55da8..0000000000 --- a/Sources/Foundation/AttributedString/AttributedStringAttribute.swift +++ /dev/null @@ -1,626 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_spi(Reflection) import Swift - -// MARK: API - -// Developers define new attributes by implementing AttributeKey. -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public protocol AttributedStringKey { - associatedtype Value : Hashable - static var name : String { get } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension AttributedStringKey { - var description: String { Self.name } -} - -// Developers can also add the attributes to pre-defined scopes of attributes, which are used to provide type information to the encoding and decoding of AttributedString values, as well as allow for dynamic member lookup in Runss of AttributedStrings. -// Example, where ForegroundColor is an existing AttributedStringKey: -// struct MyAttributes : AttributeScope { -// var foregroundColor : ForegroundColor -// } -// An AttributeScope can contain other scopes as well. -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public protocol AttributeScope : DecodingConfigurationProviding, EncodingConfigurationProviding { - static var decodingConfiguration: AttributeScopeCodableConfiguration { get } - static var encodingConfiguration: AttributeScopeCodableConfiguration { get } -} - -@frozen -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public enum AttributeScopes { } - -@dynamicMemberLookup @frozen -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public enum AttributeDynamicLookup { - public subscript(_: T.Type) -> T { - get { fatalError("Called outside of a dynamicMemberLookup subscript overload") } - } -} - -@dynamicMemberLookup -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public struct ScopedAttributeContainer { - internal var contents : [String : Any] - - // Record the most recently deleted key for use in AttributedString mutation subscripts that use _modify - // Note: if ScopedAttributeContainer ever adds a mutating function that can mutate multiple attributes, this will need to record multiple removed keys - internal var removedKey : String? - - public subscript(dynamicMember keyPath: KeyPath) -> T.Value? { - get { contents[T.name] as? T.Value } - set { - contents[T.name] = newValue - if newValue == nil { - removedKey = T.name - } - } - } - - internal init(_ contents : [String : Any] = [:]) { - self.contents = contents - } - - internal func equals(_ other: Self) -> Bool { - var equal = true - _forEachField(of: S.self, options: [.ignoreUnknown]) { name, offset, type, kind -> Bool in - func project( _: T.Type) -> Bool { - if let name = GetNameIfAttribute(T.self).attemptAction() { - if !__equalAttributes(self.contents[name], other.contents[name]) { - equal = false - return false - } - } - // TODO: Nested scopes - return true - } - return _openExistential(type, do: project) - } - return equal - } - - internal var attributes : AttributeContainer { - var contents = [String : Any]() - _forEachField(of: S.self, options: [.ignoreUnknown]) { name, offset, type, kind -> Bool in - func project( _: T.Type) -> Bool { - if let name = GetNameIfAttribute(T.self).attemptAction() { - contents[name] = self.contents[name] - } - // TODO: Nested scopes - return true - } - return _openExistential(type, do: project) - } - return AttributeContainer(contents) - } -} - - -// MARK: Internals - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal extension AttributeScope { - static func attributeKeyType(matching key: String) -> Any.Type? { - var result : Any.Type? - _forEachField(of: Self.self, options: [.ignoreUnknown]) { name, offset, type, kind -> Bool in - func project( _: T.Type) -> Bool { - if GetNameIfAttribute(T.self).attemptAction() == key { - result = type - return false - } else if let t = GetAttributeTypeIfAttributeScope(T.self, key: key).attemptAction() ?? nil { - result = t - return false - } - return true - } - return _openExistential(type, do: project) - } - return result - } - - static func markdownAttributeKeyType(matching key: String) -> Any.Type? { - var result : Any.Type? - _forEachField(of: Self.self, options: [.ignoreUnknown]) { name, offset, type, kind -> Bool in - func project( _: T.Type) -> Bool { - if GetMarkdownNameIfMarkdownDecodableAttribute(T.self).attemptAction() == key { - result = type - return false - } else if let t = GetMarkdownAttributeTypeIfAttributeScope(T.self, key: key).attemptAction() ?? nil { - result = t - return false - } - return true - } - return _openExistential(type, do: project) - } - return result - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension AttributeDynamicLookup { -} - -// MARK: Attribute Protocol Unwrappers - -internal protocol ProxyProtocol { - associatedtype Wrapped -} - -internal enum Proxy: ProxyProtocol {} - -internal protocol DynamicallyDispatched { - associatedtype Input - associatedtype Result - func attemptAction() -> Result? -} - -internal protocol ThrowingDynamicallyDispatched { - associatedtype Input - associatedtype Result - func attemptAction() throws -> Result? -} - -private protocol KnownConformance { - static func performAction(_ t: T) -> T.Result -} - -private protocol KnownThrowingConformance { - static func performAction(_ t: T) throws -> T.Result -} - -private protocol ConformanceMarker { - associatedtype A: DynamicallyDispatched -} - -private protocol ThrowingConformanceMarker { - associatedtype A: ThrowingDynamicallyDispatched -} - -extension ConformanceMarker { - fileprivate static func attempt(_ a: A) -> A.Result? { - (self as? KnownConformance.Type)?.performAction(a) - } -} - -extension ThrowingConformanceMarker { - fileprivate static func attempt(_ a: A) throws -> A.Result? { - try (self as? KnownThrowingConformance.Type)?.performAction(a) - } -} - -// Specific to CodableAttributedStringKey - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal protocol AttemptIfCodable : ThrowingDynamicallyDispatched { - override associatedtype Result - - func action(_ t: T.Type) throws -> Result where T == Input -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttemptIfCodable { - func attemptAction() throws -> Result? { - try CodableAttributeMarker.attempt(self) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -private enum CodableAttributeMarker: ThrowingConformanceMarker {} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension CodableAttributeMarker: KnownThrowingConformance where A.Input: CodableAttributedStringKey { - static func performAction(_ t: T) throws -> T.Result { - try (t as! A).action(A.Input.self) as! T.Result - } -} - -// Specific to Encoding and Decoding - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal struct EncodeIfCodable : AttemptIfCodable where P.Wrapped : Any { - typealias Input = P.Wrapped - typealias Result = Void - - private var x : Input.Type - private var v : Any - private var e : Encoder - - init(_ x: T.Type, value : Any, encoder: Encoder) where P == Proxy { - self.x = x - self.v = value - self.e = encoder - } - - func action(_ t: T.Type) throws -> Result where T == Input { - try x.encode(v as! T.Value, to: e) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal struct DecodeIfCodable : AttemptIfCodable where P.Wrapped : Any { - typealias Input = P.Wrapped - typealias Result = AnyHashable - - private var x : Input.Type - private var d : Decoder - - init(_ x: T.Type, decoder: Decoder) where P == Proxy { - self.x = x - self.d = decoder - } - - func action(_ t: T.Type) throws -> AnyHashable where T : CodableAttributedStringKey, T == P.Wrapped { - try x.decode(from: d) - } -} - -// Specific to MarkdownDecodableAttributedStringKey - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal protocol AttemptIfMarkdownDecodable : DynamicallyDispatched { - override associatedtype Result - - func action(_ t: T.Type) -> Result where T == Input -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttemptIfMarkdownDecodable { - func attemptAction() -> Result? { - MarkdownDecodableAttributeMarker.attempt(self) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -private enum MarkdownDecodableAttributeMarker: ConformanceMarker {} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension MarkdownDecodableAttributeMarker: KnownConformance where A.Input: MarkdownDecodableAttributedStringKey { - static func performAction(_ t: T) -> T.Result { - (t as! A).action(A.Input.self) as! T.Result - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal protocol ThrowingAttemptIfMarkdownDecodable : ThrowingDynamicallyDispatched { - override associatedtype Result - - func action(_ t: T.Type) throws -> Result where T == Input -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension ThrowingAttemptIfMarkdownDecodable { - func attemptAction() throws -> Result? { - try ThrowingMarkdownDecodableAttributeMarker.attempt(self) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -private enum ThrowingMarkdownDecodableAttributeMarker: ThrowingConformanceMarker {} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension ThrowingMarkdownDecodableAttributeMarker: KnownThrowingConformance where A.Input: MarkdownDecodableAttributedStringKey { - static func performAction(_ t: T) throws -> T.Result { - try (t as! A).action(A.Input.self) as! T.Result - } -} - -// Specific to Markdown decoding - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal struct DecodeIfMarkdownDecodable : ThrowingAttemptIfMarkdownDecodable where P.Wrapped : Any { - typealias Input = P.Wrapped - typealias Result = AnyHashable - - private var x : Input.Type - private var d : Decoder - - init(_ x: T.Type, decoder: Decoder) where P == Proxy { - self.x = x - self.d = decoder - } - - func action(_ t: T.Type) throws -> AnyHashable where T : MarkdownDecodableAttributedStringKey, T == P.Wrapped { - try x.decodeMarkdown(from: d) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal struct GetMarkdownNameIfMarkdownDecodableAttribute : AttemptIfMarkdownDecodable where P.Wrapped : Any { - typealias Input = P.Wrapped - typealias Result = String - - private var x : Input.Type - - init(_ x: T.Type) where P == Proxy { - self.x = x - } - - func action(_ t: T.Type) -> String where T : MarkdownDecodableAttributedStringKey, T == P.Wrapped { - x.markdownName - } -} - -// Specific to AttributedStringKey - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal protocol AttemptIfAttribute : DynamicallyDispatched { - override associatedtype Result - - func action(_ t: T.Type) -> Result where T == Input -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttemptIfAttribute { - func attemptAction() -> Result? { - AttributeMarker.attempt(self) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -private enum AttributeMarker: ConformanceMarker {} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributeMarker: KnownConformance where A.Input: AttributedStringKey { - static func performAction(_ t: T) -> T.Result { - (t as! A).action(A.Input.self) as! T.Result - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal protocol ThrowingAttemptIfAttribute : ThrowingDynamicallyDispatched { - override associatedtype Result - - func action(_ t: T.Type) throws -> Result where T == Input -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension ThrowingAttemptIfAttribute { - func attemptAction() throws -> Result? { - try ThrowingAttributeMarker.attempt(self) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -private enum ThrowingAttributeMarker: ThrowingConformanceMarker {} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension ThrowingAttributeMarker: KnownThrowingConformance where A.Input: AttributedStringKey { - static func performAction(_ t: T) throws -> T.Result { - try (t as! A).action(A.Input.self) as! T.Result - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal struct GetNameIfAttribute : AttemptIfAttribute where P.Wrapped : Any { - typealias Input = P.Wrapped - typealias Result = String - - private var x : Input.Type - - init(_ x: T.Type) where P == Proxy { - self.x = x - } - - func action(_ t: T.Type) -> Result where T == Input { - return t.name - } -} - -// Specific to NSAS Conversion - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal protocol AttemptIfObjCAttribute : ThrowingDynamicallyDispatched { - override associatedtype Result - - func action(_ t: T.Type) throws -> Result where T == Input -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttemptIfObjCAttribute { - func attemptAction() throws -> Result? { - try ObjCAttributeMarker.attempt(self) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -private enum ObjCAttributeMarker: ThrowingConformanceMarker {} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension ObjCAttributeMarker: KnownThrowingConformance where A.Input: ObjectiveCConvertibleAttributedStringKey { - static func performAction(_ t: T) throws -> T.Result { - try (t as! A).action(A.Input.self) as! T.Result - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal struct ConvertToObjCIfObjCAttribute : AttemptIfObjCAttribute where P.Wrapped : Any { - typealias Input = P.Wrapped - typealias Result = AnyObject - - private var x : Input.Type - private var v : Any - - init(_ x: T.Type, value : Any) where P == Proxy { - self.x = x - self.v = value - } - - func action(_ t: T.Type) throws -> Result where T == Input { - return try t.objectiveCValue(for: v as! T.Value) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal struct ConvertFromObjCIfObjCAttribute : AttemptIfObjCAttribute where P.Wrapped : Any { - typealias Input = P.Wrapped - typealias Result = AnyHashable - - private var x : Input.Type - private var v : AnyObject - - init(_ x: T.Type, value : AnyObject) where P == Proxy { - self.x = x - self.v = value - } - - func action(_ t: T.Type) throws -> Result where T == Input { - guard let objCValue = v as? T.ObjectiveCValue else { - throw CocoaError(.coderInvalidValue) - } - return try t.value(for: objCValue) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal struct ConvertFromObjCIfAttribute : ThrowingAttemptIfAttribute where P.Wrapped : Any { - typealias Input = P.Wrapped - typealias Result = AnyHashable? - - private var x : Input.Type - private var v : AnyObject - - init(_ x: T.Type, value : AnyObject) where P == Proxy { - self.x = x - self.v = value - } - - func action(_ t: T.Type) throws -> Result where T == Input { - guard let value = v as? T.Value else { - throw CocoaError(.coderInvalidValue) - } - return value - } -} - -// For implementing generic Equatable without Hashable conformance - -internal protocol AttemptIfEquatable : DynamicallyDispatched { - override associatedtype Result - - func action(_ t: T.Type) -> Result where T == Input -} - -extension AttemptIfEquatable { - public func attemptAction() -> Result? { - EquatableMarker.attempt(self) - } -} - -private enum EquatableMarker: ConformanceMarker {} - -extension EquatableMarker: KnownConformance where A.Input: Equatable { - static func performAction(_ t: T) -> T.Result { - (t as! A).action(A.Input.self) as! T.Result - } -} - -internal struct CheckEqualityIfEquatable : AttemptIfEquatable where P.Wrapped : Any { - typealias Input = P.Wrapped - typealias Result = Bool - - private var lhs : Input - private var rhs : Input - - init(_ lhs: T, _ rhs: T) where P == Proxy { - self.lhs = lhs - self.rhs = rhs - } - - func action(_ t: T.Type) -> Result where T == Input { - return lhs == rhs - } -} - -// Specific to AttributeScope. - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal protocol AttemptIfAttributeScope : DynamicallyDispatched { - override associatedtype Result - - func action(_ t: T.Type) -> Result where T == Input -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttemptIfAttributeScope { - func attemptAction() -> Result? { - AttributeScopeMarker.attempt(self) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -private enum AttributeScopeMarker: ConformanceMarker {} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributeScopeMarker: KnownConformance where A.Input: AttributeScope { - static func performAction(_ t: T) -> T.Result { - (t as! A).action(A.Input.self) as! T.Result - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal struct GetAttributeTypeIfAttributeScope : AttemptIfAttributeScope where P.Wrapped : Any { - typealias Input = P.Wrapped - typealias Result = Any.Type? - private var x : Input.Type - private var key: String - init(_ x: T.Type, key: String) where P == Proxy { - self.x = x - self.key = key - } - func action(_ t: T.Type) -> Result where T == Input { - return t.attributeKeyType(matching: key) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal struct GetAllAttributeTypesIfAttributeScope : AttemptIfAttributeScope where P.Wrapped : Any { - typealias Input = P.Wrapped - typealias Result = [String : Any.Type] - private var x : Input.Type - init(_ x: T.Type) where P == Proxy { - self.x = x - } - func action(_ t: T.Type) -> Result where T == Input { - var result = [String : Any.Type]() - _forEachField(of: t, options: [.ignoreUnknown]) { pointer, offset, type, kind -> Bool in - func project(_: K.Type) { - if let key = GetNameIfAttribute(K.self).attemptAction() { - result[key] = type - } else if let subResults = GetAllAttributeTypesIfAttributeScope>(K.self).attemptAction() { - result.merge(subResults, uniquingKeysWith: { current, new in new }) - } - } - _openExistential(type, do: project) - return true - } - return result - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal struct GetMarkdownAttributeTypeIfAttributeScope : AttemptIfAttributeScope where P.Wrapped : Any { - typealias Input = P.Wrapped - typealias Result = Any.Type? - private var x : Input.Type - private var key: String - init(_ x: T.Type, key: String) where P == Proxy { - self.x = x - self.key = key - } - func action(_ t: T.Type) -> Result where T == Input { - return t.markdownAttributeKeyType(matching: key) - } -} diff --git a/Sources/Foundation/AttributedString/AttributedStringCodable.swift b/Sources/Foundation/AttributedString/AttributedStringCodable.swift deleted file mode 100644 index c7ee7362fe..0000000000 --- a/Sources/Foundation/AttributedString/AttributedStringCodable.swift +++ /dev/null @@ -1,534 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2021 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_spi(Reflection) import Swift - -// MARK: AttributedStringKey - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public protocol EncodableAttributedStringKey : AttributedStringKey { - static func encode(_ value: Value, to encoder: Encoder) throws -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public protocol DecodableAttributedStringKey : AttributedStringKey { - static func decode(from decoder: Decoder) throws -> Value -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public typealias CodableAttributedStringKey = EncodableAttributedStringKey & DecodableAttributedStringKey - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension EncodableAttributedStringKey where Value : Encodable { - static func encode(_ value: Value, to encoder: Encoder) throws { try value.encode(to: encoder) } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension DecodableAttributedStringKey where Value : Decodable { - static func decode(from decoder: Decoder) throws -> Value { return try Value.init(from: decoder) } -} - - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public protocol MarkdownDecodableAttributedStringKey : AttributedStringKey { - static func decodeMarkdown(from decoder: Decoder) throws -> Value - static var markdownName: String { get } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension MarkdownDecodableAttributedStringKey { - static var markdownName: String { name } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension MarkdownDecodableAttributedStringKey where Self : DecodableAttributedStringKey { - static func decodeMarkdown(from decoder: Decoder) throws -> Value { try Self.decode(from: decoder) } -} - - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension EncodableAttributedStringKey where Value : NSSecureCoding & NSObject { - static func encode(_ value: Value, to encoder: Encoder) throws { - let data = try NSKeyedArchiver.archivedData(withRootObject: value, requiringSecureCoding: true) - var container = encoder.singleValueContainer() - try container.encode(data) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension DecodableAttributedStringKey where Value : NSSecureCoding & NSObject { - static func decode(from decoder: Decoder) throws -> Value { - let container = try decoder.singleValueContainer() - let data = try container.decode(Data.self) - if let result = try NSKeyedUnarchiver.unarchivedObject(ofClass: Value.self, from: data) { - return result - } else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, - debugDescription: "Unable to unarchive object, result was nil")) - } - } -} - -// MARK: Codable With Configuration - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public protocol EncodingConfigurationProviding { - associatedtype EncodingConfiguration - static var encodingConfiguration: EncodingConfiguration { get } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public protocol EncodableWithConfiguration { - associatedtype EncodingConfiguration - func encode(to encoder: Encoder, configuration: EncodingConfiguration) throws -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public protocol DecodingConfigurationProviding { - associatedtype DecodingConfiguration - static var decodingConfiguration: DecodingConfiguration { get } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public protocol DecodableWithConfiguration { - associatedtype DecodingConfiguration - init(from decoder: Decoder, configuration: DecodingConfiguration) throws -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public typealias CodableWithConfiguration = EncodableWithConfiguration & DecodableWithConfiguration - - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension KeyedEncodingContainer { - mutating func encode(_ wrapper: CodableConfiguration, forKey key: Self.Key) throws { - switch wrapper.wrappedValue { - case .some(let val): - try val.encode(to: self.superEncoder(forKey: key), configuration: C.encodingConfiguration) - break - default: break - } - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension KeyedDecodingContainer { - func decode(_: CodableConfiguration.Type, forKey key: Self.Key) throws -> CodableConfiguration { - if self.contains(key) { - let wrapper = try self.decode(CodableConfiguration.self, forKey: key) - return CodableConfiguration(wrappedValue: wrapper.wrappedValue) - } else { - return CodableConfiguration(wrappedValue: nil) - } - } - -} - - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension KeyedEncodingContainer { - - mutating func encode(_ t: T, forKey key: Self.Key, configuration: C.Type) throws where T.EncodingConfiguration == C.EncodingConfiguration { - try t.encode(to: self.superEncoder(forKey: key), configuration: C.encodingConfiguration) - } - mutating func encodeIfPresent(_ t: T?, forKey key: Self.Key, configuration: C.Type) throws where T.EncodingConfiguration == C.EncodingConfiguration { - guard let value = t else { return } - try self.encode(value, forKey: key, configuration: configuration) - } - - mutating func encode(_ t: T, forKey key: Self.Key, configuration: T.EncodingConfiguration) throws { - try t.encode(to: self.superEncoder(forKey: key), configuration: configuration) - } - mutating func encodeIfPresent(_ t: T?, forKey key: Self.Key, configuration: T.EncodingConfiguration) throws { - guard let value = t else { return } - try self.encode(value, forKey: key, configuration: configuration) - } - -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension KeyedDecodingContainer { - - func decode(_ : T.Type, forKey key: Self.Key, configuration: C.Type) throws -> T where T.DecodingConfiguration == C.DecodingConfiguration { - return try T(from: self.superDecoder(forKey: key), configuration: C.decodingConfiguration) - } - func decodeIfPresent(_ : T.Type, forKey key: Self.Key, configuration: C.Type) throws -> T? where T.DecodingConfiguration == C.DecodingConfiguration { - if contains(key) { - return try self.decode(T.self, forKey: key, configuration: configuration) - } else { - return nil - } - } - - func decode(_ : T.Type, forKey key: Self.Key, configuration: T.DecodingConfiguration) throws -> T { - return try T(from: self.superDecoder(forKey: key), configuration: configuration) - } - func decodeIfPresent(_ : T.Type, forKey key: Self.Key, configuration: T.DecodingConfiguration) throws -> T? { - if contains(key) { - return try self.decode(T.self, forKey: key, configuration: configuration) - } else { - return nil - } - } - -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension UnkeyedEncodingContainer { - - mutating func encode(_ t: T, configuration: C.Type) throws where T.EncodingConfiguration == C.EncodingConfiguration { - try t.encode(to: self.superEncoder(), configuration: C.encodingConfiguration) - } - - mutating func encode(_ t: T, configuration: T.EncodingConfiguration) throws { - try t.encode(to: self.superEncoder(), configuration: configuration) - } - -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension UnkeyedDecodingContainer { - - mutating func decode(_ : T.Type, configuration: C.Type) throws -> T where T.DecodingConfiguration == C.DecodingConfiguration { - return try T(from: try self.superDecoder(), configuration: C.decodingConfiguration) - } - mutating func decodeIfPresent(_ : T.Type, configuration: C.Type) throws -> T? where T.DecodingConfiguration == C.DecodingConfiguration { - if try self.decodeNil() { - return nil - } else { - return try self.decode(T.self, configuration: configuration) - } - } - - mutating func decode(_ : T.Type, configuration: T.DecodingConfiguration) throws -> T { - return try T(from: try self.superDecoder(), configuration: configuration) - } - mutating func decodeIfPresent(_ : T.Type, configuration: T.DecodingConfiguration) throws -> T? { - if try self.decodeNil() { - return nil - } else { - return try self.decode(T.self, configuration: configuration) - } - } - -} - -@propertyWrapper -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public struct CodableConfiguration : Codable where T : CodableWithConfiguration, ConfigurationProvider : EncodingConfigurationProviding & DecodingConfigurationProviding, ConfigurationProvider.EncodingConfiguration == T.EncodingConfiguration, ConfigurationProvider.DecodingConfiguration == T.DecodingConfiguration { - public var wrappedValue: T - - public init(wrappedValue: T) { - self.wrappedValue = wrappedValue - } - - public init(wrappedValue: T, from configurationProvider: ConfigurationProvider.Type) { - self.wrappedValue = wrappedValue - } - - public func encode(to encoder: Encoder) throws { - try wrappedValue.encode(to: encoder, configuration: ConfigurationProvider.encodingConfiguration) - } - - public init(from decoder: Decoder) throws { - wrappedValue = try T(from: decoder, configuration: ConfigurationProvider.decodingConfiguration) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension CodableConfiguration : Equatable where T : Equatable { } - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension CodableConfiguration : Hashable where T : Hashable { } - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension Optional : EncodableWithConfiguration where Wrapped : EncodableWithConfiguration { - public func encode(to encoder: Encoder, configuration: Wrapped.EncodingConfiguration) throws { - if let wrapped = self { - try wrapped.encode(to: encoder, configuration: configuration) - } else { - var c = encoder.singleValueContainer() - try c.encodeNil() - } - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension Optional : DecodableWithConfiguration where Wrapped : DecodableWithConfiguration { - public init(from decoder: Decoder, configuration: Wrapped.DecodingConfiguration) throws { - let c = try decoder.singleValueContainer() - if c.decodeNil() { - self = nil - } else { - self = try Wrapped.init(from: decoder, configuration: configuration) - } - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension Array : EncodableWithConfiguration where Element : EncodableWithConfiguration { - public func encode(to encoder: Encoder, configuration: Element.EncodingConfiguration) throws { - var c = encoder.unkeyedContainer() - for e in self { - try c.encode(e, configuration: configuration) - } - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension Array : DecodableWithConfiguration where Element : DecodableWithConfiguration { - public init(from decoder: Decoder, configuration: Element.DecodingConfiguration) throws { - var result = [Element]() - var c = try decoder.unkeyedContainer() - while !c.isAtEnd { - try result.append(c.decode(Element.self, configuration: configuration)) - } - self = result - } -} - -// MARK: AttributedString CodableWithConfiguration Conformance - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public struct AttributeScopeCodableConfiguration { - internal let scopeType : Any.Type - internal let extraAttributesTable : [String : Any.Type] - - internal init(scopeType: Any.Type, extraAttributesTable: [String : Any.Type] = [:]) { - self.scopeType = scopeType - self.extraAttributesTable = extraAttributesTable - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension AttributeScope { - static var encodingConfiguration: AttributeScopeCodableConfiguration { AttributeScopeCodableConfiguration(scopeType: self) } - static var decodingConfiguration: AttributeScopeCodableConfiguration { AttributeScopeCodableConfiguration(scopeType: self) } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributedString : Codable { - public func encode(to encoder: Encoder) throws { - try encode(to: encoder, configuration: AttributeScopeCodableConfiguration(scopeType: AttributeScopes.FoundationAttributes.self, extraAttributesTable: _loadDefaultAttributes())) - } - - public init(from decoder: Decoder) throws { - try self.init(from: decoder, configuration: AttributeScopeCodableConfiguration(scopeType: AttributeScopes.FoundationAttributes.self, extraAttributesTable: _loadDefaultAttributes())) - } -} - - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributedString : CodableWithConfiguration { - - private enum CodingKeys : String, CodingKey { - case runs - case attributeTable - } - - private struct AttributeKey: CodingKey { - var stringValue: String - var intValue: Int? - - init?(stringValue: String) { - self.stringValue = stringValue - } - - init?(intValue: Int) { - self.stringValue = "\(intValue)" - self.intValue = intValue - } - } - - public func encode(to encoder: Encoder, configuration: AttributeScopeCodableConfiguration) throws { - if self._guts.runs.count == 0 || (self._guts.runs.count == 1 && self._guts.runs[0].attributes.contents.isEmpty) { - var container = encoder.singleValueContainer() - try container.encode(self._guts.string) - return - } - - var runsContainer: UnkeyedEncodingContainer - var attributeTable = [_AttributeStorage : Int]() - var attributeTableNextIndex = 0 - var attributeTableContainer: UnkeyedEncodingContainer? - if self._guts.runs.count <= 10 { - runsContainer = encoder.unkeyedContainer() - } else { - var topLevelContainer = encoder.container(keyedBy: CodingKeys.self) - runsContainer = topLevelContainer.nestedUnkeyedContainer(forKey: .runs) - attributeTableContainer = topLevelContainer.nestedUnkeyedContainer(forKey: .attributeTable) - } - - var currentIndex = self.startIndex - var attributeKeyTypes = configuration.extraAttributesTable - for run in self._guts.runs { - let currentEndIndex = self._guts.index(currentIndex, offsetByUTF8: run.length) - let substring = self._guts.string[(currentIndex ..< currentEndIndex)._stringRange] - try runsContainer.encode(String(substring)) - - if !run.attributes.contents.isEmpty, var attributeTableContainer = attributeTableContainer { - let index = attributeTable[run.attributes, default: attributeTableNextIndex] - if index == attributeTableNextIndex { - try Self.encodeAttributeContainer(run.attributes, to: attributeTableContainer.superEncoder(), configuration: configuration, using: &attributeKeyTypes) - attributeTable[run.attributes] = index - attributeTableNextIndex += 1 - } - try runsContainer.encode(index) - } else { - try Self.encodeAttributeContainer(run.attributes, to: runsContainer.superEncoder(), configuration: configuration, using: &attributeKeyTypes) - } - - currentIndex = currentEndIndex - } - } - - fileprivate static func encodeAttributeContainer(_ attributes: _AttributeStorage, to encoder: Encoder, configuration: AttributeScopeCodableConfiguration, using attributeKeyTypeTable: inout [String : Any.Type]) throws { - func projectScopeType(_: S.Type) throws { - var attributesContainer = encoder.container(keyedBy: AttributeKey.self) - for (name, value) in attributes.contents { - if let attributeKeyType = attributeKeyTypeTable[name] ?? GetAttributeTypeIfAttributeScope(S.self, key: name).attemptAction() ?? nil { - attributeKeyTypeTable[name] = attributeKeyType - func project( _: T.Type) throws { - let attributeEncoder = attributesContainer.superEncoder(forKey: AttributeKey(stringValue: name)!) - let encodeIfCodable = EncodeIfCodable(T.self, value: value, encoder: attributeEncoder) - let _ = try encodeIfCodable.attemptAction() // Ignores result to drop attributes that are not codable - } - try _openExistential(attributeKeyType, do: project) - } // else: the attribute was not in the provided scope, so drop it - } - } - try _openExistential(configuration.scopeType, do: projectScopeType) - } - - public init(from decoder: Decoder, configuration: AttributeScopeCodableConfiguration) throws { - if let svc = try? decoder.singleValueContainer(), let str = try? svc.decode(String.self) { - self.init(str) - return - } - - var runsContainer: UnkeyedDecodingContainer - var attributeTable: [_AttributeStorage]? - var attributeKeyTypeTable = configuration.extraAttributesTable - - if let runs = try? decoder.unkeyedContainer() { - runsContainer = runs - attributeTable = nil - } else { - let topLevelContainer = try decoder.container(keyedBy: CodingKeys.self) - runsContainer = try topLevelContainer.nestedUnkeyedContainer(forKey: .runs) - attributeTable = try Self.decodeAttributeTable(from: topLevelContainer.superDecoder(forKey: .attributeTable), configuration: configuration, using: &attributeKeyTypeTable) - } - - var string = "" - var runs = [_InternalRun]() - if let containerCount = runsContainer.count { - runs.reserveCapacity(containerCount / 2) - } - while !runsContainer.isAtEnd { - let substring = try runsContainer.decode(String.self) - var attributes: _AttributeStorage - - if let tableIndex = try? runsContainer.decode(Int.self) { - guard let attributeTable = attributeTable else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, - debugDescription: "Attribute table index present with no reference attribute table")) - } - guard tableIndex >= 0 && tableIndex < attributeTable.count else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, - debugDescription: "Attribute table index \(tableIndex) is not within the bounds of the attribute table [0...\(attributeTable.count - 1)]")) - } - attributes = attributeTable[tableIndex] - } else { - attributes = try Self.decodeAttributeContainer(from: try runsContainer.superDecoder(), configuration: configuration, using: &attributeKeyTypeTable) - } - - if substring.isEmpty && (runs.count > 0 || !runsContainer.isAtEnd) { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, - debugDescription: "When multiple runs are present, runs with empty substrings are not allowed")) - } - if substring.isEmpty && !attributes.contents.isEmpty { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, - debugDescription: "Runs of empty substrings cannot contain attributes")) - } - - string += substring - if let previous = runs.last, previous.attributes == attributes { - runs[runs.count - 1].length += substring.count - } else { - runs.append(_InternalRun(length: substring.count, attributes: attributes)) - } - } - if runs.isEmpty { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, - debugDescription: "Runs container must not be empty")) - } - self.init(Guts(string: string, runs: runs)) - } - - private static func decodeAttributeTable(from decoder: Decoder, configuration: AttributeScopeCodableConfiguration, using attributeKeyTypeTable: inout [String : Any.Type]) throws -> [_AttributeStorage] { - var container = try decoder.unkeyedContainer() - var table = [_AttributeStorage]() - if let size = container.count { - table.reserveCapacity(size) - } - while !container.isAtEnd { - table.append(try decodeAttributeContainer(from: try container.superDecoder(), configuration: configuration, using: &attributeKeyTypeTable)) - } - return table - } - - fileprivate static func decodeAttributeContainer(from decoder: Decoder, configuration: AttributeScopeCodableConfiguration, using attributeKeyTypeTable: inout [String : Any.Type]) throws -> _AttributeStorage { - let attributesContainer = try decoder.container(keyedBy: AttributeKey.self) - var attributes = _AttributeStorage() - func projectScopeType(_: S.Type) throws { - for key in attributesContainer.allKeys { - let name = key.stringValue - if let attributeKeyType = attributeKeyTypeTable[name] ?? GetAttributeTypeIfAttributeScope(S.self, key: name).attemptAction() ?? nil { - attributeKeyTypeTable[name] = attributeKeyType - func project( _: T.Type) throws { - let decodeIfCodable = DecodeIfCodable(T.self, decoder: try attributesContainer.superDecoder(forKey: key)) - if let decoded = try decodeIfCodable.attemptAction() { - attributes.contents[name] = decoded - } // else: attribute was not codable, so drop it - } - try _openExistential(attributeKeyType, do: project) - } - // else: the attribute was not in the provided scope, so drop it - } - } - try _openExistential(configuration.scopeType, do: projectScopeType) - return attributes - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributeContainer : CodableWithConfiguration { - public func encode(to encoder: Encoder, configuration: AttributeScopeCodableConfiguration) throws { - var attributeKeyTypeTable = configuration.extraAttributesTable - var storage = AttributedString._AttributeStorage() - storage.contents = self.contents - try AttributedString.encodeAttributeContainer(storage, to: encoder, configuration: configuration, using: &attributeKeyTypeTable) - } - - public init(from decoder: Decoder, configuration: AttributeScopeCodableConfiguration) throws { - var attributeKeyTypeTable = configuration.extraAttributesTable - let storage = try AttributedString.decodeAttributeContainer(from: decoder, configuration: configuration, using: &attributeKeyTypeTable) - self.contents = storage.contents - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension CodableConfiguration where ConfigurationProvider : AttributeScope { - init(wrappedValue: T, from keyPath: KeyPath) { - self.wrappedValue = wrappedValue - } -} diff --git a/Sources/Foundation/AttributedString/AttributedStringRunCoalescing.swift b/Sources/Foundation/AttributedString/AttributedStringRunCoalescing.swift deleted file mode 100644 index 52ae571e0b..0000000000 --- a/Sources/Foundation/AttributedString/AttributedStringRunCoalescing.swift +++ /dev/null @@ -1,278 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributedString.Guts { - internal struct RunOffset { - fileprivate var location: Int = 0 - fileprivate var block: Int = 0 - } - - // MARK: - Helper Functions - - /// Retrieve the UTF-8 `location` and `block` index of the run containing the UTF-8 `location`, and update the cache accordingly - @discardableResult - private func seekToRun(location: Int) -> RunOffset { - var currentLocation = 0 - var currentBlock = 0 - - runOffsetCacheLock.lock() - defer { runOffsetCacheLock.unlock() } - - if location > runOffsetCache.location / 2 { - currentLocation = runOffsetCache.location - currentBlock = runOffsetCache.block - } - - if currentLocation <= location { - while currentBlock < runs.count && currentLocation + runs[currentBlock].length <= location { - currentLocation += runs[currentBlock].length - currentBlock += 1 - } - } else { - repeat { - currentBlock -= 1 - currentLocation -= runs[currentBlock].length - } while currentLocation > location && currentBlock >= 0 - } - - let currentOffset = RunOffset(location: currentLocation, block: currentBlock) - runOffsetCache = currentOffset - return currentOffset - } - - /// Retrieve the UTF-8 `location` and `block` index of the run at the `rangeIndex` block, and update the cache accordingly - @discardableResult - private func seekToRun(rangeIndex: Int) -> RunOffset { - runOffsetCacheLock.lock() - defer { runOffsetCacheLock.unlock() } - return seekToRunAlreadyLocked(rangeIndex: rangeIndex) - } - - /// Retrieve the UTF-8 `location` and `block` index of the run at the `rangeIndex` block, and update the cache accordingly - @discardableResult - private func seekToRunAlreadyLocked(rangeIndex: Int) -> RunOffset { - var currentLocation = 0 - var currentBlock = 0 - - if rangeIndex > runOffsetCache.block / 2 { - currentLocation = runOffsetCache.location - currentBlock = runOffsetCache.block - } - - if currentBlock <= rangeIndex { - while currentBlock != rangeIndex { - currentLocation += runs[currentBlock].length - currentBlock += 1 - } - } else { - repeat { - currentBlock -= 1 - currentLocation -= runs[currentBlock].length - } while currentBlock != rangeIndex - } - - let currentOffset = RunOffset(location: currentLocation, block: currentBlock) - runOffsetCache = currentOffset - return currentOffset - } - - /// Update the run at the given block `index` with the provided `run` and coalesce it with its neighbors if necessary. - /// - Returns: The new index of the updated run (potentially different from the provided `index` due to coalescing) - @discardableResult - func updateAndCoalesce(run: AttributedString._InternalRun, at index: Int) -> Int { - runOffsetCacheLock.lock() - defer { runOffsetCacheLock.unlock() } - if runOffsetCache.block > index { - runOffsetCache.location += run.length - runs[index].length - } - runs[index] = run - - if index < runs.count - 1 && run.attributes == runs[index + 1].attributes { - if runOffsetCache.block == index + 1 { - runOffsetCache.location += runs[index + 1].length - } else if runOffsetCache.block > index + 1{ - runOffsetCache.block -= 1 - } - runs[index].length += runs[index + 1].length - runs.remove(at: index + 1) - } - var newIndex = index - if index > 0 && run.attributes == runs[index - 1].attributes { - if runOffsetCache.block == index { - runOffsetCache.location += runs[index].length - } else if runOffsetCache.block > index { - runOffsetCache.block -= 1 - } - runs[index - 1].length += runs[index].length - runs.remove(at: index) - newIndex -= 1 - } - return newIndex - } - - func runAndLocation(at index: Int) -> (run: AttributedString._InternalRun, location: Int) { - let result = seekToRun(rangeIndex: index) - return (runs[result.block], result.location) - } - - func run(containing location: Int) -> AttributedString._InternalRun { - return runs[seekToRun(location: location).block] - } - - func runAndLocation(containing location: Int) -> (run: AttributedString._InternalRun, location: Int) { - let result = seekToRun(location: location) - return (runs[result.block], result.location) - } - - func runs(containing range: Range) -> [AttributedString._InternalRun] { - var runs = [AttributedString._InternalRun]() - var location = range.lowerBound - while location < range.upperBound { - let run = self.runs[seekToRun(location: location).block] - let clampedRange = (location..? = nil, _ block: (_ run: inout AttributedString._InternalRun, _ location: Int, _ stop: inout Bool, _ modificationStatus: inout RunEnumerationModification) throws -> Void) rethrows { - var location = range?.lowerBound ?? 0 - // When endLocation=-1, the return statement will break the loop - // We do this to avoid needing to scan the whole runs array to find endLocation when range is nil - let endLocation = range?.upperBound ?? -1 - while endLocation == -1 || location < endLocation { - let result = seekToRun(location: location) - if result.block >= runs.count { - return - } - let run = runs[result.block] - let runRange = result.location ..< result.location + run.length - let clampedRange : Range - if endLocation == -1 { - clampedRange = runRange.clamped(to: location ..< runRange.endIndex) - } else { - clampedRange = runRange.clamped(to: location ..< endLocation) - } - var stop = false - let clampedRun = AttributedString._InternalRun(length: clampedRange.count, attributes: run.attributes) - var maybeChangedRun = clampedRun - var modificationStatus: RunEnumerationModification = .notGuaranteed - try block(&maybeChangedRun, location, &stop, &modificationStatus) - maybeChangedRun.length = clampedRun.length // Ignore any changes to length - if modificationStatus == .guaranteedModified || (modificationStatus == .notGuaranteed && maybeChangedRun.attributes != clampedRun.attributes) { - if runRange != clampedRange { - var replacementRuns = [AttributedString._InternalRun]() - if runRange.startIndex != clampedRange.startIndex { - let splitOffStartLength = clampedRange.startIndex - runRange.startIndex - replacementRuns.append(AttributedString._InternalRun(length: splitOffStartLength, attributes: run.attributes)) - } - replacementRuns.append(maybeChangedRun) - if runRange.endIndex != clampedRange.endIndex { - let splitOffEndLength = runRange.endIndex - clampedRange.endIndex - replacementRuns.append(AttributedString._InternalRun(length: splitOffEndLength, attributes: run.attributes)) - } - replaceRunsSubrange(result.block ..< result.block + 1, with: replacementRuns) - let newResult = seekToRun(location: location) - location = newResult.location + runs[newResult.block].length - } else { - let newBlock = self.updateAndCoalesce(run: maybeChangedRun, at: result.block) - let newResult = seekToRun(rangeIndex: newBlock) - location = newResult.location + runs[newResult.block].length - } - } else { - location += maybeChangedRun.length - } - if stop { - return - } - } - } - - func indexOfRun(containing location: Int) -> Int { - return seekToRun(location: location).block - } - - /// Replace the runs for a specified range of UTF-8 locations with the provided collection. This will split runs at the start/end if the bounds of the range fall in the middle of an existing run - /// Note: the provided `newElements` must already be coalesced together if needed. - func replaceRunsSubrange(locations subrange: Range, with newElements: C) where C.Element == AttributedString._InternalRun { - let start = seekToRun(location: subrange.startIndex) - let newStartLength = subrange.startIndex - start.location - var insertingRuns = [AttributedString._InternalRun](newElements) - if newStartLength > 0 { - if insertingRuns.isEmpty || runs[start.block].attributes != insertingRuns[0].attributes { - insertingRuns.insert(AttributedString._InternalRun(length: newStartLength, attributes: runs[start.block].attributes), at: 0) - } else { - insertingRuns[0].length += newStartLength - } - } - - let end = seekToRun(location: subrange.endIndex) - if end.block != runs.endIndex { - let endRun = runs[end.block] - let newEndLength = end.location + endRun.length - subrange.endIndex - if newEndLength > 0 { - if insertingRuns.isEmpty || runs[end.block].attributes != insertingRuns.last!.attributes { - insertingRuns.append(AttributedString._InternalRun(length: newEndLength, attributes: runs[end.block].attributes)) - } else { - insertingRuns[insertingRuns.endIndex - 1].length += newEndLength - } - } - replaceRunsSubrange(start.block ..< end.block + 1, with: insertingRuns) - } else { - replaceRunsSubrange(start.block ..< end.block, with: insertingRuns) - } - } - - /// Replaces the runs for a specified range of block indices with the given `newElements` - /// Note: The provided `newElements` must already be coalsced together if needed. - func replaceRunsSubrange(_ subrange: Range, with newElements: C) where C.Element == AttributedString._InternalRun { - runOffsetCacheLock.lock() - defer { runOffsetCacheLock.unlock() } - if runOffsetCache.block > subrange.lowerBound { - // Move the cached location to a place where it won't be corrupted - seekToRunAlreadyLocked(rangeIndex: subrange.lowerBound) - } - runs.replaceSubrange(subrange, with: newElements) - let startOfReplacement = subrange.startIndex - let endOfReplacement = subrange.endIndex + (newElements.count - (subrange.endIndex - subrange.startIndex)) - if endOfReplacement < runs.count && endOfReplacement > 0 && runs[endOfReplacement - 1].attributes == runs[endOfReplacement].attributes { - runs[endOfReplacement - 1].length += runs[endOfReplacement].length - runs.remove(at: endOfReplacement) - } - if startOfReplacement < runs.count && startOfReplacement > 0 && runs[startOfReplacement - 1].attributes == runs[startOfReplacement].attributes { - runOffsetCache.block -= 1 - runOffsetCache.location -= runs[startOfReplacement - 1].length - runs[startOfReplacement - 1].length += runs[startOfReplacement].length - runs.remove(at: startOfReplacement) - } - } -} diff --git a/Sources/Foundation/AttributedString/Conversion.swift b/Sources/Foundation/AttributedString/Conversion.swift deleted file mode 100644 index 11aebc8eed..0000000000 --- a/Sources/Foundation/AttributedString/Conversion.swift +++ /dev/null @@ -1,383 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_spi(Reflection) import Swift - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public protocol ObjectiveCConvertibleAttributedStringKey : AttributedStringKey { - associatedtype ObjectiveCValue : NSObject - - static func objectiveCValue(for value: Value) throws -> ObjectiveCValue - static func value(for object: ObjectiveCValue) throws -> Value -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension ObjectiveCConvertibleAttributedStringKey where Value : RawRepresentable, Value.RawValue == Int, ObjectiveCValue == NSNumber { - static func objectiveCValue(for value: Value) throws -> ObjectiveCValue { - return NSNumber(value: value.rawValue) - } - static func value(for object: ObjectiveCValue) throws -> Value { - if let val = Value(rawValue: object.intValue) { - return val - } - throw CocoaError(.coderInvalidValue) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension ObjectiveCConvertibleAttributedStringKey where Value : RawRepresentable, Value.RawValue == String, ObjectiveCValue == NSString { - static func objectiveCValue(for value: Value) throws -> ObjectiveCValue { - return value.rawValue as NSString - } - static func value(for object: ObjectiveCValue) throws -> Value { - if let val = Value(rawValue: object as String) { - return val - } - throw CocoaError(.coderInvalidValue) - } -} - -internal struct _AttributeConversionOptions : OptionSet { - let rawValue: Int - - // If an attribute's value(for: ObjectieCValue) or objectiveCValue(for: Value) function throws, ignore the error and drop the attribute - static let dropThrowingAttributes = Self(rawValue: 1 << 0) -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension AttributeContainer { - init(_ dictionary: [NSAttributedString.Key : Any]) { - var attributeKeyTypes = _loadDefaultAttributes() - // Passing .dropThrowingAttributes causes attributes that throw during conversion to be dropped, so it is safe to do try! here - try! self.init(dictionary, including: AttributeScopes.FoundationAttributes.self, attributeKeyTypes: &attributeKeyTypes, options: .dropThrowingAttributes) - } - - - init(_ dictionary: [NSAttributedString.Key : Any], including scope: KeyPath) throws { - try self.init(dictionary, including: S.self) - } - - init(_ dictionary: [NSAttributedString.Key : Any], including scope: S.Type) throws { - var attributeKeyTypes = [String : Any.Type]() - try self.init(dictionary, including: scope, attributeKeyTypes: &attributeKeyTypes) - } - - fileprivate init(_ dictionary: [NSAttributedString.Key : Any], including scope: S.Type, attributeKeyTypes: inout [String : Any.Type], options: _AttributeConversionOptions = []) throws { - contents = [:] - for (key, value) in dictionary { - if let type = attributeKeyTypes[key.rawValue] ?? S.attributeKeyType(matching: key.rawValue) { - attributeKeyTypes[key.rawValue] = type - var swiftVal: AnyHashable? - func project(_: T.Type) throws { - if let val = try ConvertFromObjCIfObjCAttribute(T.self, value: value as AnyObject).attemptAction() { - // Value is converted via the function defined by `ObjectiveCConvertibleAttributedStringKey` - swiftVal = val - } else if let val = try ConvertFromObjCIfAttribute(T.self, value: value as AnyObject).attemptAction() { - // Attribute is only `AttributedStringKey`, so converted by casting to Value type - // This implicitly bridges or unboxes the value - swiftVal = val - } // else: the type was not an attribute (should never happen) - } - do { - try _openExistential(type, do: project) - } catch let conversionError { - if !options.contains(.dropThrowingAttributes) { - throw conversionError - } - } - if let swiftVal = swiftVal { - contents[key.rawValue] = swiftVal - } - } // else, attribute is not in provided scope, so drop it - } - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension Dictionary where Key == NSAttributedString.Key, Value == Any { - init(_ container: AttributeContainer) { - var attributeKeyTypes = _loadDefaultAttributes() - // Passing .dropThrowingAttributes causes attributes that throw during conversion to be dropped, so it is safe to do try! here - try! self.init(container, including: AttributeScopes.FoundationAttributes.self, attributeKeyTypes: &attributeKeyTypes, options: .dropThrowingAttributes) - } - - init(_ container: AttributeContainer, including scope: KeyPath) throws { - try self.init(container, including: S.self) - } - - init(_ container: AttributeContainer, including scope: S.Type) throws { - var attributeKeyTypes = [String : Any.Type]() - try self.init(container, including: scope, attributeKeyTypes: &attributeKeyTypes) - } - - // These includingOnly SPI initializers were provided originally when conversion boxed attributes outside of the given scope as an AnyObject - // After rdar://80201634, these SPI initializers have the same behavior as the API initializers - @_spi(AttributedString) - init(_ container: AttributeContainer, includingOnly scope: KeyPath) throws { - try self.init(container, including: S.self) - } - - @_spi(AttributedString) - init(_ container: AttributeContainer, includingOnly scope: S.Type) throws { - try self.init(container, including: S.self) - } - - fileprivate init(_ container: AttributeContainer, including scope: S.Type, attributeKeyTypes: inout [String : Any.Type], options: _AttributeConversionOptions = []) throws { - self.init() - for (key, value) in container.contents { - if let type = attributeKeyTypes[key] ?? S.attributeKeyType(matching: key) { - attributeKeyTypes[key] = type - var objcVal: AnyObject? - func project(_: T.Type) throws { - if let val = try ConvertToObjCIfObjCAttribute(T.self, value: value).attemptAction() { - objcVal = val - } else { - // Attribute is not `ObjectiveCConvertibleAttributedStringKey`, so cast it to AnyObject to implicitly bridge it or box it - objcVal = value as AnyObject - } - } - do { - try _openExistential(type, do: project) - } catch let conversionError { - if !options.contains(.dropThrowingAttributes) { - throw conversionError - } - } - if let val = objcVal { - self[NSAttributedString.Key(rawValue: key)] = val - } - } - } - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension NSAttributedString { - convenience init(_ attrStr: AttributedString) { - // Passing .dropThrowingAttributes causes attributes that throw during conversion to be dropped, so it is safe to do try! here - try! self.init(attrStr, scope: AttributeScopes.FoundationAttributes.self, otherAttributeTypes: _loadDefaultAttributes(), options: .dropThrowingAttributes) - } - - convenience init(_ attrStr: AttributedString, including scope: KeyPath) throws { - try self.init(attrStr, scope: S.self) - } - - convenience init(_ attrStr: AttributedString, including scope: S.Type) throws { - try self.init(attrStr, scope: scope) - } - - @_spi(AttributedString) - convenience init(_ attrStr: AttributedString, includingOnly scope: KeyPath) throws { - try self.init(attrStr, scope: S.self) - } - - @_spi(AttributedString) - convenience init(_ attrStr: AttributedString, includingOnly scope: S.Type) throws { - try self.init(attrStr, scope: scope) - } - - internal convenience init(_ attrStr: AttributedString, scope: S.Type, otherAttributeTypes: [String : Any.Type] = [:], options: _AttributeConversionOptions = []) throws { - let result = NSMutableAttributedString(string: attrStr._guts.string) - var attributeKeyTypes: [String : Any.Type] = otherAttributeTypes - // Iterate through each run of the source - var nsStartIndex = 0 - var stringStart = attrStr._guts.string.startIndex - for run in attrStr._guts.runs { - let stringEnd = attrStr._guts.string.utf8.index(stringStart, offsetBy: run.length) - let utf16Length = attrStr._guts.string.utf16.distance(from: stringStart, to: stringEnd) - let range = NSRange(location: nsStartIndex, length: utf16Length) - let attributes = try Dictionary(AttributeContainer(run.attributes.contents), including: scope, attributeKeyTypes: &attributeKeyTypes, options: options) - result.setAttributes(attributes, range: range) - nsStartIndex += utf16Length - stringStart = stringEnd - } - self.init(attributedString: result) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension AttributedString { - init(_ nsStr: NSAttributedString) { - // Passing .dropThrowingAttributes causes attributes that throw during conversion to be dropped, so it is safe to do try! here - try! self.init(nsStr, scope: AttributeScopes.FoundationAttributes.self, otherAttributeTypes: _loadDefaultAttributes(), options: .dropThrowingAttributes) - } - - init(_ nsStr: NSAttributedString, including scope: KeyPath) throws { - try self.init(nsStr, scope: S.self) - } - - init(_ nsStr: NSAttributedString, including scope: S.Type) throws { - try self.init(nsStr, scope: S.self) - } - - private init(_ nsStr: NSAttributedString, scope: S.Type, otherAttributeTypes: [String : Any.Type] = [:], options: _AttributeConversionOptions = []) throws { - let string = nsStr.string - var runs: [_InternalRun] = [] - var attributeKeyTypes: [String : Any.Type] = otherAttributeTypes - var conversionError: Error? - var stringStart = string.startIndex - nsStr.enumerateAttributes(in: NSMakeRange(0, nsStr.length), options: []) { (nsAttrs, range, stop) in - let container: AttributeContainer - do { - container = try AttributeContainer(nsAttrs, including: scope, attributeKeyTypes: &attributeKeyTypes, options: options) - } catch { - conversionError = error - stop.pointee = true - return - } - let stringEnd = string.utf16.index(stringStart, offsetBy: range.length) - let runLength = string.utf8.distance(from: stringStart, to: stringEnd) - let attrStorage = _AttributeStorage(container.contents) - if let previous = runs.last, previous.attributes == attrStorage { - runs[runs.endIndex - 1].length += runLength - } else { - runs.append(_InternalRun(length: runLength, attributes: attrStorage)) - } - stringStart = stringEnd - } - if let error = conversionError { - throw error - } - self = AttributedString(Guts(string: string, runs: runs)) - } -} - -fileprivate var _loadedScopeCache = [String : [String : Any.Type]]() -fileprivate var _loadedScopeCacheLock = Lock() - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -internal func _loadDefaultAttributes() -> [String : Any.Type] { - #if os(macOS) - #if !targetEnvironment(macCatalyst) - // AppKit scope on macOS - let macOSSymbol = ("$s10Foundation15AttributeScopesO6AppKitE0dE10AttributesVN", "/usr/lib/swift/libswiftAppKit.dylib") - #else - // UIKit scope on macOS - let macOSSymbol = ("$s10Foundation15AttributeScopesO5UIKitE0D10AttributesVN", "/System/iOSSupport/usr/lib/swift/libswiftUIKit.dylib") - #endif - - let loadedScopes = [ - macOSSymbol, - // UIKit scope on non-macOS - ("$s10Foundation15AttributeScopesO5UIKitE0D10AttributesVN", "/usr/lib/swift/libswiftUIKit.dylib"), - // SwiftUI scope - ("$s10Foundation15AttributeScopesO7SwiftUIE0D12UIAttributesVN", "/System/Library/Frameworks/SwiftUI.framework/SwiftUI"), - // Accessibility scope - ("$s10Foundation15AttributeScopesO13AccessibilityE0D10AttributesVN", "/System/Library/Frameworks/Accessibility.framework/Accessibility") - ].compactMap { - _loadScopeAttributes(forSymbol: $0.0, from: $0.1) - } - - return loadedScopes.reduce([:]) { result, item in - result.merging(item) { current, new in new } - } - #else - return [:] - #endif // os(macOS) -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -fileprivate func _loadScopeAttributes(forSymbol symbol: String, from path: String) -> [String : Any.Type]? { -#if os(macOS) - _loadedScopeCacheLock.lock() - defer { _loadedScopeCacheLock.unlock() } - if let cachedResult = _loadedScopeCache[symbol] { - return cachedResult - } - guard let handle = dlopen(path, RTLD_NOLOAD) else { - return nil - } - guard let symbolPointer = dlsym(handle, symbol) else { - return nil - } - let scopeType = unsafeBitCast(symbolPointer, to: Any.Type.self) - let attributeTypes = _loadAttributeTypes(from: scopeType) - _loadedScopeCache[symbol] = attributeTypes - return attributeTypes -#else - return nil -#endif // os(macOS) -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -fileprivate func _loadAttributeTypes(from scope: Any.Type) -> [String : Any.Type] { - var result = [String : Any.Type]() - _forEachField(of: scope, options: [.ignoreUnknown]) { pointer, offset, type, kind -> Bool in - func project(_: K.Type) { - if let key = GetNameIfAttribute(K.self).attemptAction() { - result[key] = type - } else if let subResults = GetAllAttributeTypesIfAttributeScope(K.self).attemptAction() { - result.merge(subResults, uniquingKeysWith: { current, new in new }) - } - } - _openExistential(type, do: project) - return true - } - return result -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension String.Index { - public init?(_ sourcePosition: AttributedString.Index, within target: S) { - self.init(sourcePosition.characterIndex, within: target) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributedString.Index { - public init?(_ sourcePosition: String.Index, within target: S) { - guard let strIndex = String.Index(sourcePosition, within: target.__guts.string) else { - return nil - } - self.init(characterIndex: strIndex) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension NSRange { - public init(_ region: R, in target: S) where R.Bound == AttributedString.Index { - let str = target.__guts.string - let r = region.relative(to: target.characters)._stringRange.relative(to: str) - self.init(str._toUTF16Offsets(r)) - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension Range where Bound == AttributedString.Index { - public init?(_ range: NSRange, in attrStr: S) { - if let r = Range(range, in: attrStr.__guts.string) { - self = r._attributedStringRange - } else { - return nil - } - } - public init?(_ region: R, in attrStr: S) where R.Bound == String.Index { - let range = region.relative(to: attrStr.__guts.string) - if let lwr = Bound(range.lowerBound, within: attrStr), let upr = Bound(range.upperBound, within: attrStr) { - self = lwr ..< upr - } else { - return nil - } - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension Range where Bound == String.Index { - public init?(_ region: R, in string: S) where R.Bound == AttributedString.Index { - let range = region.relative(to: AttributedString(string).characters) - if let lwr = Bound(range.lowerBound, within: string), let upr = Bound(range.upperBound, within: string) { - self = lwr ..< upr - } else { - return nil - } - } -} diff --git a/Sources/Foundation/AttributedString/FoundationAttributes.swift b/Sources/Foundation/AttributedString/FoundationAttributes.swift deleted file mode 100644 index fa1d35e071..0000000000 --- a/Sources/Foundation/AttributedString/FoundationAttributes.swift +++ /dev/null @@ -1,330 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -// MARK: Attribute Scope - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributeScopes { - public var foundation: FoundationAttributes.Type { FoundationAttributes.self } - - public struct FoundationAttributes : AttributeScope { - public let link: LinkAttribute - public let morphology: MorphologyAttribute - public let inflect: InflectionRuleAttribute - public let languageIdentifier: LanguageIdentifierAttribute - public let personNameComponent: PersonNameComponentAttribute - public let numberFormat: NumberFormatAttributes - public let dateField: DateFieldAttribute - public let replacementIndex : ReplacementIndexAttribute - public let measurement: MeasurementAttribute - public let inflectionAlternative: InflectionAlternativeAttribute - public let byteCount: ByteCountAttribute - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -public extension AttributeDynamicLookup { - subscript(dynamicMember keyPath: KeyPath) -> T { - return self[T.self] - } - - subscript(dynamicMember keyPath: KeyPath) -> T { self[T.self] } -} - -// MARK: Attribute Definitions - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributeScopes.FoundationAttributes { - @frozen - @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) - public enum LinkAttribute : CodableAttributedStringKey, ObjectiveCConvertibleAttributedStringKey { - public typealias Value = URL - public typealias ObjectiveCValue = NSObject // NSURL or NSString - public static var name = "NSLink" - - public static func objectiveCValue(for value: URL) throws -> NSObject { - value as NSURL - } - - public static func value(for object: NSObject) throws -> URL { - if let object = object as? NSURL { - return object as URL - } else if let object = object as? NSString { - // TODO: Do we need to call up to [NSTextView _URLForString:] on macOS here? - if let result = URL(string: object as String) { - return result - } - } - throw CocoaError(.coderInvalidValue) - } - } - - @frozen - @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) - public enum MorphologyAttribute : CodableAttributedStringKey, MarkdownDecodableAttributedStringKey { - public typealias Value = Morphology - public static let name = NSAttributedString.Key.morphology.rawValue - public static let markdownName = "morphology" - } - - @frozen - @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) - public enum InflectionRuleAttribute : CodableAttributedStringKey, MarkdownDecodableAttributedStringKey { - public typealias Value = InflectionRule - public static let name = NSAttributedString.Key.inflectionRule.rawValue - public static let markdownName = "inflect" - } - - @frozen - @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) - public enum LanguageIdentifierAttribute : CodableAttributedStringKey, MarkdownDecodableAttributedStringKey { - public typealias Value = String - public static let name = NSAttributedString.Key.language.rawValue - public static let markdownName = "languageIdentifier" - } - - @frozen - @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) - public enum PersonNameComponentAttribute : CodableAttributedStringKey, ObjectiveCConvertibleAttributedStringKey { - public typealias Value = Component - public typealias ObjectiveCValue = NSString - public static let name = "NSPersonNameComponentKey" - - public enum Component: String, Codable { - case givenName, familyName, middleName, namePrefix, nameSuffix, nickname, delimiter - } - } - - @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) - public struct NumberFormatAttributes: AttributeScope { - public let numberSymbol: SymbolAttribute - public let numberPart: NumberPartAttribute - - @frozen - public enum NumberPartAttribute : CodableAttributedStringKey { - public enum NumberPart : Int, Codable { - case integer - case fraction - } - - public static let name = "Foundation.NumberFormatPart" - public typealias Value = NumberPart - } - - @frozen - public enum SymbolAttribute : CodableAttributedStringKey { - public enum Symbol : Int, Codable { - case groupingSeparator - case sign - case decimalSeparator - case currency - case percent - } - - public static let name = "Foundation.NumberFormatSymbol" - public typealias Value = Symbol - } - } - - @frozen - @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) - public enum DateFieldAttribute : CodableAttributedStringKey { - public enum Field : Hashable, Codable { - case era - case year - /// For non-Gregorian calendars, this corresponds to the extended Gregorian year in which the calendar’s year begins. - case relatedGregorianYear - case quarter - case month - case weekOfYear - case weekOfMonth - case weekday - /// The ordinal position of the weekday unit within the month unit. For example, `2` in "2nd Wednesday in July" - case weekdayOrdinal - case day - case dayOfYear - case amPM - case hour - case minute - case second - case secondFraction - case timeZone - - var rawValue: String { - switch self { - case .era: - return "G" - case .year: - return "y" - case .relatedGregorianYear: - return "r" - case .quarter: - return "Q" - case .month: - return "M" - case .weekOfYear: - return "w" - case .weekOfMonth: - return "W" - case .weekday: - return "E" - case .weekdayOrdinal: - return "F" - case .day: - return "d" - case .dayOfYear: - return "D" - case .amPM: - return "a" - case .hour: - return "h" - case .minute: - return "m" - case .second: - return "s" - case .secondFraction: - return "S" - case .timeZone: - return "z" - } - } - - init?(rawValue: String) { - let mappings: [String: Self] = [ - "G": .era, - "y": .year, - "Y": .year, - "u": .year, - "U": .year, - "r": .relatedGregorianYear, - "Q": .quarter, - "q": .quarter, - "M": .month, - "L": .month, - "w": .weekOfYear, - "W": .weekOfMonth, - "e": .weekday, - "c": .weekday, - "E": .weekday, - "F": .weekdayOrdinal, - "d": .day, - "g": .day, - "D": .dayOfYear, - "a": .amPM, - "b": .amPM, - "B": .amPM, - "h": .hour, - "H": .hour, - "k": .hour, - "K": .hour, - "m": .minute, - "s": .second, - "A": .second, - "S": .secondFraction, - "v": .timeZone, - "z": .timeZone, - "Z": .timeZone, - "O": .timeZone, - "V": .timeZone, - "X": .timeZone, - "x": .timeZone, - ] - - guard let field = mappings[rawValue] else { - return nil - } - self = field - } - - // Codable - public init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(String.self) - guard let field = Field(rawValue: rawValue) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Invalid Field pattern <\(rawValue)>.")) - } - self = field - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - try container.encode(rawValue) - } - } - - public static let name = "Foundation.DateFormatField" - public typealias Value = Field - } - - @frozen - @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) - public enum InflectionAlternativeAttribute : CodableAttributedStringKey, MarkdownDecodableAttributedStringKey, ObjectiveCConvertibleAttributedStringKey { - public typealias Value = AttributedString - public typealias ObjectiveCValue = NSObject - public static let name = NSAttributedString.Key.inflectionAlternative.rawValue - public static let markdownName = "inflectionAlternative" - - public static func objectiveCValue(for value: AttributedString) throws -> NSObject { - try NSAttributedString(value, including: \.foundation) - } - - public static func value(for object: NSObject) throws -> AttributedString { - if let attrString = object as? NSAttributedString { - return try AttributedString(attrString, including: \.foundation) - } else { - throw CocoaError(.coderInvalidValue) - } - } - } - - @frozen - @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) - public enum ReplacementIndexAttribute : CodableAttributedStringKey { - public typealias Value = Int - public static let name = "NSReplacementIndex" - } - - @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) - public struct MeasurementAttribute: CodableAttributedStringKey { - public typealias Value = Component - public static let name = "Foundation.MeasurementAttribute" - public enum Component: Int, Codable { - case value - case unit - } - } - - @frozen - @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) - public enum ByteCountAttribute: CodableAttributedStringKey { - public typealias Value = Component - public static let name = "Foundation.ByteCountAttribute" - public enum Component: Codable, Hashable { - case value - case spelledOutValue - case unit(Unit) - case actualByteCount - } - - public enum Unit: Codable { - case byte - case kb - case mb - case gb - case tb - case pb - case eb - case zb - case yb - } - } -} diff --git a/Tests/Foundation/TestAttributedString.swift b/Tests/Foundation/TestAttributedString.swift deleted file mode 100644 index ee8c5768ac..0000000000 --- a/Tests/Foundation/TestAttributedString.swift +++ /dev/null @@ -1,2287 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - - -#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT - #if canImport(SwiftFoundation) && !DEPLOYMENT_RUNTIME_OBJC - @testable import SwiftFoundation - #else - @testable import Foundation - #endif -#endif - -/// Regression and coverage tests for `AttributedString` and its associated objects -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -final class TestAttributedString: XCTestCase { - // MARK: - Enumeration Tests - - func testEmptyEnumeration() { - for _ in AttributedString().runs { - XCTFail("Empty AttributedString should not enumerate any attributes") - } - } - - func verifyAttributes(_ runs: AttributedString.Runs.AttributesSlice1, string: AttributedString, expectation: [(String, T.Value?)]) { - // Test that the attribute is correct when iterating through attribute runs - var expectIterator = expectation.makeIterator() - for (attribute, range) in runs { - let expected = expectIterator.next()! - XCTAssertEqual(String(string[range].characters), expected.0, "Substring of AttributedString characters for range of run did not match expectation") - XCTAssertEqual(attribute, expected.1, "Attribute of run did not match expectation") - } - XCTAssertNil(expectIterator.next(), "Additional runs expected but not found") - - // Test that the attribute is correct when iterating through reversed attribute runs - expectIterator = expectation.reversed().makeIterator() - for (attribute, range) in runs.reversed() { - let expected = expectIterator.next()! - XCTAssertEqual(String(string[range].characters), expected.0, "Substring of AttributedString characters for range of run did not match expectation") - XCTAssertEqual(attribute, expected.1, "Attribute of run did not match expectation") - } - XCTAssertNil(expectIterator.next(), "Additional runs expected but not found") - } - - func verifyAttributes(_ runs: AttributedString.Runs.AttributesSlice2, string: AttributedString, expectation: [(String, T.Value?, U.Value?)]) { - // Test that the attributes are correct when iterating through attribute runs - var expectIterator = expectation.makeIterator() - for (attribute, attribute2, range) in runs { - let expected = expectIterator.next()! - XCTAssertEqual(String(string[range].characters), expected.0, "Substring of AttributedString characters for range of run did not match expectation") - XCTAssertEqual(attribute, expected.1, "Attribute of run did not match expectation") - XCTAssertEqual(attribute2, expected.2, "Attribute of run did not match expectation") - } - XCTAssertNil(expectIterator.next(), "Additional runs expected but not found") - - // Test that the attributes are correct when iterating through reversed attribute runs - expectIterator = expectation.reversed().makeIterator() - for (attribute, attribute2, range) in runs.reversed() { - let expected = expectIterator.next()! - XCTAssertEqual(String(string[range].characters), expected.0, "Substring of AttributedString characters for range of run did not match expectation") - XCTAssertEqual(attribute, expected.1, "Attribute of run did not match expectation") - XCTAssertEqual(attribute2, expected.2, "Attribute of run did not match expectation") - } - XCTAssertNil(expectIterator.next(), "Additional runs expected but not found") - } - - func testSimpleEnumeration() { - var attrStr = AttributedString("Hello", attributes: AttributeContainer().testInt(1)) - attrStr += " " - attrStr += AttributedString("World", attributes: AttributeContainer().testDouble(2.0)) - - let expectation = [("Hello", 1, nil), (" ", nil, nil), ("World", nil, 2.0)] - var expectationIterator = expectation.makeIterator() - for run in attrStr.runs { - let expected = expectationIterator.next()! - XCTAssertEqual(String(attrStr[run.range].characters), expected.0) - XCTAssertEqual(run.testInt, expected.1) - XCTAssertEqual(run.testDouble, expected.2) - XCTAssertNil(run.testString) - } - XCTAssertNil(expectationIterator.next()) - - expectationIterator = expectation.reversed().makeIterator() - for run in attrStr.runs.reversed() { - let expected = expectationIterator.next()! - XCTAssertEqual(String(attrStr[run.range].characters), expected.0) - XCTAssertEqual(run.testInt, expected.1) - XCTAssertEqual(run.testDouble, expected.2) - XCTAssertNil(run.testString) - } - XCTAssertNil(expectationIterator.next()) - - let attrView = attrStr.runs - verifyAttributes(attrView[\.testInt], string: attrStr, expectation: [("Hello", 1), (" World", nil)]) - verifyAttributes(attrView[\.testDouble], string: attrStr, expectation: [("Hello ", nil), ("World", 2.0)]) - verifyAttributes(attrView[\.testString], string: attrStr, expectation: [("Hello World", nil)]) - verifyAttributes(attrView[\.testInt, \.testDouble], string: attrStr, expectation: [("Hello", 1, nil), (" ", nil, nil), ("World", nil, 2.0)]) - } - - func testSliceEnumeration() { - var attrStr = AttributedString("Hello", attributes: AttributeContainer().testInt(1)) - attrStr += AttributedString(" ") - attrStr += AttributedString("World", attributes: AttributeContainer().testDouble(2.0)) - - let attrStrSlice = attrStr[attrStr.characters.index(attrStr.startIndex, offsetBy: 3) ..< attrStr.characters.index(attrStr.endIndex, offsetBy: -3)] - - let expectation = [("lo", 1, nil), (" ", nil, nil), ("Wo", nil, 2.0)] - var expectationIterator = expectation.makeIterator() - for run in attrStrSlice.runs { - let expected = expectationIterator.next()! - XCTAssertEqual(String(attrStr[run.range].characters), expected.0) - XCTAssertEqual(run.testInt, expected.1) - XCTAssertEqual(run.testDouble, expected.2) - XCTAssertNil(run.testString) - } - XCTAssertNil(expectationIterator.next()) - - expectationIterator = expectation.reversed().makeIterator() - for run in attrStrSlice.runs.reversed() { - let expected = expectationIterator.next()! - XCTAssertEqual(String(attrStr[run.range].characters), expected.0) - XCTAssertEqual(run.testInt, expected.1) - XCTAssertEqual(run.testDouble, expected.2) - XCTAssertNil(run.testString) - } - XCTAssertNil(expectationIterator.next()) - - let attrView = attrStrSlice.runs - verifyAttributes(attrView[\.testInt], string: attrStr, expectation: [("lo", 1), (" Wo", nil)]) - verifyAttributes(attrView[\.testDouble], string: attrStr, expectation: [("lo ", nil), ("Wo", 2.0)]) - verifyAttributes(attrView[\.testString], string: attrStr, expectation: [("lo Wo", nil)]) - verifyAttributes(attrView[\.testInt, \.testDouble], string: attrStr, expectation: [("lo", 1, nil), (" ", nil, nil), ("Wo", nil, 2.0)]) - } - - // MARK: - Attribute Tests - - func testSimpleAttribute() { - let attrStr = AttributedString("Foo", attributes: AttributeContainer().testInt(42)) - let (value, range) = attrStr.runs[\.testInt][attrStr.startIndex] - XCTAssertEqual(value, 42) - XCTAssertEqual(range, attrStr.startIndex ..< attrStr.endIndex) - } - - func testConstructorAttribute() { - // TODO: Re-evaluate whether we want these. - let attrStr = AttributedString("Hello", attributes: AttributeContainer().testString("Helvetica").testInt(2)) - var expected = AttributedString("Hello") - expected.testString = "Helvetica" - expected.testInt = 2 - XCTAssertEqual(attrStr, expected) - } - - func testAddAndRemoveAttribute() { - let attr : Int = 42 - let attr2 : Double = 1.0 - var attrStr = AttributedString("Test") - attrStr.testInt = attr - attrStr.testDouble = attr2 - - let expected1 = AttributedString("Test", attributes: AttributeContainer().testInt(attr).testDouble(attr2)) - XCTAssertEqual(attrStr, expected1) - - attrStr.testDouble = nil - - let expected2 = AttributedString("Test", attributes: AttributeContainer().testInt(attr)) - XCTAssertEqual(attrStr, expected2) - } - - func testAddingAndRemovingAttribute() { - let container = AttributeContainer().testInt(1).testDouble(2.2) - let attrStr = AttributedString("Test").mergingAttributes(container) - let expected = AttributedString("Test", attributes: AttributeContainer().testInt(1).testDouble(2.2)) - XCTAssertEqual(attrStr, expected) - var doubleRemoved = attrStr - doubleRemoved.testDouble = nil - XCTAssertEqual(doubleRemoved, AttributedString("Test", attributes: AttributeContainer().testInt(1))) - } - - func testScopedAttributes() { - var str = AttributedString("Hello, world", attributes: AttributeContainer().testInt(2).testDouble(3.4)) - XCTAssertEqual(str.test.testInt, 2) - XCTAssertEqual(str.test.testDouble, 3.4) - XCTAssertEqual(str.runs[str.runs.startIndex].test.testInt, 2) - - str.test.testInt = 4 - XCTAssertEqual(str, AttributedString("Hello, world", attributes: AttributeContainer.testInt(4).testDouble(3.4))) - - let range = str.startIndex ..< str.characters.index(after: str.startIndex) - str[range].test.testBool = true - XCTAssertNil(str.test.testBool) - XCTAssertNotNil(str[range].test.testBool) - XCTAssertTrue(str[range].test.testBool!) - } - - func testRunAttributes() { - var str = AttributedString("String", attributes: .init().testString("test1")) - str += "None" - str += AttributedString("String+Int", attributes: .init().testString("test2").testInt(42)) - - let attributes = str.runs.map { $0.attributes } - XCTAssertEqual(attributes.count, 3) - XCTAssertEqual(attributes[0], .init().testString("test1")) - XCTAssertEqual(attributes[1], .init()) - XCTAssertEqual(attributes[2], .init().testString("test2").testInt(42)) - } - - // MARK: - Comparison Tests - - func testAttributedStringEquality() { - XCTAssertEqual(AttributedString(), AttributedString()) - XCTAssertEqual(AttributedString("abc"), AttributedString("abc")) - XCTAssertEqual(AttributedString("abc", attributes: AttributeContainer().testInt(1)), AttributedString("abc", attributes: AttributeContainer().testInt(1))) - XCTAssertNotEqual(AttributedString("abc", attributes: AttributeContainer().testInt(1)), AttributedString("abc", attributes: AttributeContainer().testInt(2))) - XCTAssertNotEqual(AttributedString("abc", attributes: AttributeContainer().testInt(1)), AttributedString("def", attributes: AttributeContainer().testInt(1))) - - var a = AttributedString("abc", attributes: AttributeContainer().testInt(1)) - a += AttributedString("def", attributes: AttributeContainer().testInt(1)) - XCTAssertEqual(a, AttributedString("abcdef", attributes: AttributeContainer().testInt(1))) - - a = AttributedString("ab", attributes: AttributeContainer().testInt(1)) - a += AttributedString("cdef", attributes: AttributeContainer().testInt(2)) - var b = AttributedString("abcd", attributes: AttributeContainer().testInt(1)) - b += AttributedString("ef", attributes: AttributeContainer().testInt(2)) - XCTAssertNotEqual(a, b) - - a = AttributedString("abc") - a += AttributedString("defghi", attributes: AttributeContainer().testInt(2)) - a += "jkl" - b = AttributedString("abc") - b += AttributedString("def", attributes: AttributeContainer().testInt(2)) - b += "ghijkl" - XCTAssertNotEqual(a, b) - } - - func testAttributedSubstringEquality() { - let emptyStr = AttributedString("01234567890123456789") - - let index0 = emptyStr.characters.startIndex - let index5 = emptyStr.characters.index(index0, offsetBy: 5) - let index10 = emptyStr.characters.index(index0, offsetBy: 10) - let index20 = emptyStr.characters.index(index0, offsetBy: 20) - - var singleAttrStr = emptyStr - singleAttrStr[index0 ..< index10].testInt = 1 - - var halfhalfStr = emptyStr - halfhalfStr[index0 ..< index10].testInt = 1 - halfhalfStr[index10 ..< index20].testDouble = 2.0 - - XCTAssertEqual(emptyStr[index0 ..< index0], emptyStr[index0 ..< index0]) - XCTAssertEqual(emptyStr[index0 ..< index5], emptyStr[index0 ..< index5]) - XCTAssertEqual(emptyStr[index0 ..< index20], emptyStr[index0 ..< index20]) - XCTAssertEqual(singleAttrStr[index0 ..< index20], singleAttrStr[index0 ..< index20]) - XCTAssertEqual(halfhalfStr[index0 ..< index20], halfhalfStr[index0 ..< index20]) - - XCTAssertEqual(emptyStr[index0 ..< index10], singleAttrStr[index10 ..< index20]) - XCTAssertEqual(halfhalfStr[index0 ..< index10], singleAttrStr[index0 ..< index10]) - - XCTAssertNotEqual(emptyStr[index0 ..< index10], singleAttrStr[index0 ..< index10]) - XCTAssertNotEqual(emptyStr[index0 ..< index10], singleAttrStr[index0 ..< index20]) - - XCTAssertTrue(emptyStr[index0 ..< index5] == AttributedString("01234")) - } - - func testRunEquality() { - var attrStr = AttributedString("Hello", attributes: AttributeContainer().testInt(1)) - attrStr += AttributedString(" ") - attrStr += AttributedString("World", attributes: AttributeContainer().testInt(2)) - - var attrStr2 = AttributedString("Hello", attributes: AttributeContainer().testInt(2)) - attrStr2 += AttributedString("_") - attrStr2 += AttributedString("World", attributes: AttributeContainer().testInt(2)) - attrStr2 += AttributedString("Hello", attributes: AttributeContainer().testInt(1)) - - var attrStr3 = AttributedString("Hel", attributes: AttributeContainer().testInt(1)) - attrStr3 += AttributedString("lo W") - attrStr3 += AttributedString("orld", attributes: AttributeContainer().testInt(2)) - - func run(_ num: Int, in str: AttributedString) -> AttributedString.Runs.Run { - return str.runs[str.runs.index(str.runs.startIndex, offsetBy: num)] - } - - // Same string, same range, different attributes - XCTAssertNotEqual(run(0, in: attrStr), run(0, in: attrStr2)) - - // Different strings, same range, same attributes - XCTAssertEqual(run(1, in: attrStr), run(1, in: attrStr2)) - - // Same string, same range, same attributes - XCTAssertEqual(run(2, in: attrStr), run(2, in: attrStr2)) - - // Different string, different range, same attributes - XCTAssertEqual(run(2, in: attrStr), run(0, in: attrStr2)) - - // Same string, different range, same attributes - XCTAssertEqual(run(0, in: attrStr), run(3, in: attrStr2)) - - // A runs collection of the same order but different run lengths - XCTAssertNotEqual(attrStr.runs, attrStr3.runs) - } - - func testSubstringRunEquality() { - var attrStr = AttributedString("Hello", attributes: AttributeContainer().testInt(1)) - attrStr += AttributedString(" ") - attrStr += AttributedString("World", attributes: AttributeContainer().testInt(2)) - - var attrStr2 = AttributedString("Hello", attributes: AttributeContainer().testInt(2)) - attrStr2 += AttributedString("_") - attrStr2 += AttributedString("World", attributes: AttributeContainer().testInt(2)) - - XCTAssertEqual(attrStr[attrStr.runs.last!.range].runs, attrStr2[attrStr2.runs.first!.range].runs) - XCTAssertEqual(attrStr[attrStr.runs.last!.range].runs, attrStr2[attrStr2.runs.last!.range].runs) - - let rangeA = attrStr.runs.first!.range.upperBound ..< attrStr.endIndex - let rangeB = attrStr2.runs.first!.range.upperBound ..< attrStr.endIndex - let rangeC = attrStr.startIndex ..< attrStr.runs.last!.range.lowerBound - let rangeD = attrStr.runs.first!.range - XCTAssertEqual(attrStr[rangeA].runs, attrStr2[rangeB].runs) - XCTAssertNotEqual(attrStr[rangeC].runs, attrStr2[rangeB].runs) - XCTAssertNotEqual(attrStr[rangeD].runs, attrStr2[rangeB].runs) - - // Test starting/ending runs that only differ outside of the range do not prevent equality - attrStr2[attrStr.runs.first!.range].testInt = 1 - attrStr2.characters.insert(contentsOf: "123", at: attrStr.startIndex) - attrStr2.characters.append(contentsOf: "45") - let rangeE = attrStr.startIndex ..< attrStr.endIndex - let rangeF = attrStr2.characters.index(attrStr2.startIndex, offsetBy: 3) ..< attrStr2.characters.index(attrStr2.startIndex, offsetBy: 14) - XCTAssertEqual(attrStr[rangeE].runs, attrStr2[rangeF].runs) - } - - // MARK: - Mutation Tests - - func testDirectMutationCopyOnWrite() { - var attrStr = AttributedString("ABC") - let copy = attrStr - attrStr += "D" - - XCTAssertEqual(copy, AttributedString("ABC")) - XCTAssertNotEqual(attrStr, copy) - } - - func testAttributeMutationCopyOnWrite() { - var attrStr = AttributedString("ABC") - let copy = attrStr - attrStr.testInt = 1 - - XCTAssertNotEqual(attrStr, copy) - } - - func testSliceAttributeMutation() { - let attr : Int = 42 - let attr2 : Double = 1.0 - - var attrStr = AttributedString("Hello World", attributes: AttributeContainer().testInt(attr)) - let copy = attrStr - - let chars = attrStr.characters - let start = chars.startIndex - let end = chars.index(start, offsetBy: 5) - attrStr[start ..< end].testDouble = attr2 - - var expected = AttributedString("Hello", attributes: AttributeContainer().testInt(attr).testDouble(attr2)) - expected += AttributedString(" World", attributes: AttributeContainer().testInt(attr)) - XCTAssertEqual(attrStr, expected) - - XCTAssertNotEqual(copy, attrStr) - } - - func testEnumerationAttributeMutation() { - var attrStr = AttributedString("A", attributes: AttributeContainer().testInt(1)) - attrStr += AttributedString("B", attributes: AttributeContainer().testDouble(2.0)) - attrStr += AttributedString("C", attributes: AttributeContainer().testInt(3)) - - for (attr, range) in attrStr.runs[\.testInt] { - if let _ = attr { - attrStr[range].testInt = nil - } - } - - var expected = AttributedString("A") - expected += AttributedString("B", attributes: AttributeContainer().testDouble(2.0)) - expected += "C" - XCTAssertEqual(expected, attrStr) - } - - func testMutateMultipleAttributes() { - var attrStr = AttributedString("A", attributes: AttributeContainer().testInt(1).testBool(true)) - attrStr += AttributedString("B", attributes: AttributeContainer().testInt(1).testDouble(2)) - attrStr += AttributedString("C", attributes: AttributeContainer().testDouble(2).testBool(false)) - - // Test removal - let removal1 = attrStr.transformingAttributes(\.testInt, \.testDouble, \.testBool) { - $0.value = nil - $1.value = nil - $2.value = nil - } - let removal1expected = AttributedString("ABC") - XCTAssertEqual(removal1expected, removal1) - - // Test change value, same attribute. - let changeSame1 = attrStr.transformingAttributes(\.testInt, \.testDouble, \.testBool) { - if let _ = $0.value { - $0.value = 42 - } - if let _ = $1.value { - $1.value = 3 - } - if let boolean = $2.value { - $2.value = !boolean - } - } - var changeSame1expected = AttributedString("A", attributes: AttributeContainer().testInt(42).testBool(false)) - changeSame1expected += AttributedString("B", attributes: AttributeContainer().testInt(42).testDouble(3)) - changeSame1expected += AttributedString("C", attributes: AttributeContainer().testDouble(3).testBool(true)) - XCTAssertEqual(changeSame1expected, changeSame1) - - // Test change value, different attribute - let changeDifferent1 = attrStr.transformingAttributes(\.testInt, \.testDouble, \.testBool) { - if let _ = $0.value { - $0.replace(with: AttributeScopes.TestAttributes.TestDoubleAttribute.self, value: 2) - } - if let _ = $1.value { - $1.replace(with: AttributeScopes.TestAttributes.TestBoolAttribute.self, value: false) - } - if let _ = $2.value { - $2.replace(with: AttributeScopes.TestAttributes.TestIntAttribute.self, value: 42) - } - } - - var changeDifferent1expected = AttributedString("A", attributes: AttributeContainer().testDouble(2).testInt(42)) - changeDifferent1expected += AttributedString("B", attributes: AttributeContainer().testDouble(2).testBool(false)) - changeDifferent1expected += AttributedString("C", attributes: AttributeContainer().testBool(false).testInt(42)) - XCTAssertEqual(changeDifferent1expected, changeDifferent1) - - // Test change range - var changeRange1First = true - let changeRange1 = attrStr.transformingAttributes(\.testInt, \.testDouble, \.testBool) { - if changeRange1First { - let range = $0.range - let extendedRange = range.lowerBound ..< attrStr.characters.index(after: range.upperBound) - $0.range = extendedRange - $1.range = extendedRange - $2.range = extendedRange - changeRange1First = false - } - } - var changeRange1expected = AttributedString("A", attributes: AttributeContainer().testInt(1).testBool(true)) - changeRange1expected += AttributedString("B", attributes: AttributeContainer().testInt(1).testBool(true)) - changeRange1expected += AttributedString("C", attributes: AttributeContainer().testDouble(2).testBool(false)) - XCTAssertEqual(changeRange1expected, changeRange1) - } - - func testMutateAttributes() { - var attrStr = AttributedString("A", attributes: AttributeContainer().testInt(1).testBool(true)) - attrStr += AttributedString("B", attributes: AttributeContainer().testInt(1).testDouble(2)) - attrStr += AttributedString("C", attributes: AttributeContainer().testDouble(2).testBool(false)) - - // Test removal - let removal1 = attrStr.transformingAttributes(\.testInt) { - $0.value = nil - } - var removal1expected = AttributedString("A", attributes: AttributeContainer().testBool(true)) - removal1expected += AttributedString("B", attributes: AttributeContainer().testDouble(2)) - removal1expected += AttributedString("C", attributes: AttributeContainer().testDouble(2).testBool(false)) - XCTAssertEqual(removal1expected, removal1) - - // Test change value, same attribute. - let changeSame1 = attrStr.transformingAttributes(\.testBool) { - if let boolean = $0.value { - $0.value = !boolean - } - } - var changeSame1expected = AttributedString("A", attributes: AttributeContainer().testInt(1).testBool(false)) - changeSame1expected += AttributedString("B", attributes: AttributeContainer().testInt(1).testDouble(2)) - changeSame1expected += AttributedString("C", attributes: AttributeContainer().testDouble(2).testBool(true)) - XCTAssertEqual(changeSame1expected, changeSame1) - - // Test change value, different attribute - let changeDifferent1 = attrStr.transformingAttributes(\.testBool) { - if let value = $0.value { - $0.replace(with: AttributeScopes.TestAttributes.TestDoubleAttribute.self, value: (value ? 42 : 43)) - } - } - var changeDifferent1expected = AttributedString("A", attributes: AttributeContainer().testInt(1).testDouble(42)) - changeDifferent1expected += AttributedString("B", attributes: AttributeContainer().testInt(1).testDouble(2)) - changeDifferent1expected += AttributedString("C", attributes: AttributeContainer().testDouble(43)) - XCTAssertEqual(changeDifferent1expected, changeDifferent1) - - // Test change range - let changeRange1 = attrStr.transformingAttributes(\.testInt) { - if let _ = $0.value { - // Shorten the range by one. - $0.range = $0.range.lowerBound ..< attrStr.characters.index(before: $0.range.upperBound) - } - } - var changeRange1expected = AttributedString("A", attributes: AttributeContainer().testInt(1).testBool(true)) - changeRange1expected += AttributedString("B", attributes: AttributeContainer().testDouble(2)) - changeRange1expected += AttributedString("C", attributes: AttributeContainer().testDouble(2).testBool(false)) - XCTAssertEqual(changeRange1expected, changeRange1) - - // Now try extending it - let changeRange2 = attrStr.transformingAttributes(\.testInt) { - if let _ = $0.value { - // Extend the range by one. - $0.range = $0.range.lowerBound ..< attrStr.characters.index(after: $0.range.upperBound) - } - } - var changeRange2expected = AttributedString("A", attributes: AttributeContainer().testInt(1).testBool(true)) - changeRange2expected += AttributedString("B", attributes: AttributeContainer().testInt(1).testDouble(2)) - changeRange2expected += AttributedString("C", attributes: AttributeContainer().testInt(1).testDouble(2).testBool(false)) - XCTAssertEqual(changeRange2expected, changeRange2) - } - - func testReplaceAttributes() { - var attrStr = AttributedString("A", attributes: AttributeContainer().testInt(1).testBool(true)) - attrStr += AttributedString("B", attributes: AttributeContainer().testInt(1).testDouble(2)) - attrStr += AttributedString("C", attributes: AttributeContainer().testDouble(2).testBool(false)) - - // Test removal - let removal1Find = AttributeContainer().testInt(1) - let removal1Replace = AttributeContainer() - var removal1 = attrStr - removal1.replaceAttributes(removal1Find, with: removal1Replace) - - var removal1expected = AttributedString("A", attributes: AttributeContainer().testBool(true)) - removal1expected += AttributedString("B", attributes: AttributeContainer().testDouble(2)) - removal1expected += AttributedString("C", attributes: AttributeContainer().testDouble(2).testBool(false)) - XCTAssertEqual(removal1expected, removal1) - - // Test change value, same attribute. - let changeSame1Find = AttributeContainer().testBool(false) - let changeSame1Replace = AttributeContainer().testBool(true) - var changeSame1 = attrStr - changeSame1.replaceAttributes(changeSame1Find, with: changeSame1Replace) - - var changeSame1expected = AttributedString("A", attributes: AttributeContainer().testInt(1).testBool(true)) - changeSame1expected += AttributedString("B", attributes: AttributeContainer().testInt(1).testDouble(2)) - changeSame1expected += AttributedString("C", attributes: AttributeContainer().testDouble(2).testBool(true)) - XCTAssertEqual(changeSame1expected, changeSame1) - - // Test change value, different attribute - let changeDifferent1Find = AttributeContainer().testBool(false) - let changeDifferent1Replace = AttributeContainer().testDouble(43) - var changeDifferent1 = attrStr - changeDifferent1.replaceAttributes(changeDifferent1Find, with: changeDifferent1Replace) - - var changeDifferent1expected = AttributedString("A", attributes: AttributeContainer().testInt(1).testBool(true)) - changeDifferent1expected += AttributedString("B", attributes: AttributeContainer().testInt(1).testDouble(2)) - changeDifferent1expected += AttributedString("C", attributes: AttributeContainer().testDouble(43)) - XCTAssertEqual(changeDifferent1expected, changeDifferent1) - } - - - func testSliceMutation() { - var attrStr = AttributedString("Hello World", attributes: AttributeContainer().testInt(1)) - let start = attrStr.characters.index(attrStr.startIndex, offsetBy: 6) - attrStr.replaceSubrange(start ..< attrStr.characters.index(start, offsetBy:5), with: AttributedString("Goodbye", attributes: AttributeContainer().testInt(2))) - - var expected = AttributedString("Hello ", attributes: AttributeContainer().testInt(1)) - expected += AttributedString("Goodbye", attributes: AttributeContainer().testInt(2)) - XCTAssertEqual(attrStr, expected) - XCTAssertNotEqual(attrStr, AttributedString("Hello Goodbye", attributes: AttributeContainer().testInt(1))) - } - - func testOverlappingSliceMutation() { - var attrStr = AttributedString("Hello, world!") - attrStr[attrStr.range(of: "Hello")!].testInt = 1 - attrStr[attrStr.range(of: "world")!].testInt = 2 - attrStr[attrStr.range(of: "o, wo")!].testBool = true - - var expected = AttributedString("Hell", attributes: AttributeContainer().testInt(1)) - expected += AttributedString("o", attributes: AttributeContainer().testInt(1).testBool(true)) - expected += AttributedString(", ", attributes: AttributeContainer().testBool(true)) - expected += AttributedString("wo", attributes: AttributeContainer().testBool(true).testInt(2)) - expected += AttributedString("rld", attributes: AttributeContainer().testInt(2)) - expected += AttributedString("!") - XCTAssertEqual(attrStr, expected) - } - - func testCharacters_replaceSubrange() { - var attrStr = AttributedString("Hello World", attributes: AttributeContainer().testInt(1)) - attrStr.characters.replaceSubrange(attrStr.range(of: " ")!, with: " Good ") - - let expected = AttributedString("Hello Good World", attributes: AttributeContainer().testInt(1)) - XCTAssertEqual(expected, attrStr) - } - - func testCharactersMutation_append() { - var attrStr = AttributedString("Hello World", attributes: AttributeContainer().testInt(1)) - attrStr.characters.append(contentsOf: " Goodbye") - - let expected = AttributedString("Hello World Goodbye", attributes: AttributeContainer().testInt(1)) - XCTAssertEqual(expected, attrStr) - } - - func testUnicodeScalars_replaceSubrange() { - var attrStr = AttributedString("La Cafe\u{301}", attributes: AttributeContainer().testInt(1)) - let unicode = attrStr.unicodeScalars - attrStr.unicodeScalars.replaceSubrange(unicode.index(unicode.startIndex, offsetBy: 3) ..< unicode.index(unicode.startIndex, offsetBy: 7), with: "Ole".unicodeScalars) - - let expected = AttributedString("La Ole\u{301}", attributes: AttributeContainer().testInt(1)) - XCTAssertEqual(expected, attrStr) - } - - func testUnicodeScalarsMutation_append() { - var attrStr = AttributedString("Cafe", attributes: AttributeContainer().testInt(1)) - attrStr.unicodeScalars.append("\u{301}") - - let expected = AttributedString("Cafe\u{301}", attributes: AttributeContainer().testInt(1)) - XCTAssertEqual(expected, attrStr) - } - - func testSubCharacterAttributeSetting() { - var attrStr = AttributedString("Cafe\u{301}", attributes: AttributeContainer().testInt(1)) - let cafRange = attrStr.characters.startIndex ..< attrStr.characters.index(attrStr.characters.startIndex, offsetBy: 3) - let eRange = cafRange.upperBound ..< attrStr.unicodeScalars.index(after: cafRange.upperBound) - let accentRange = eRange.upperBound ..< attrStr.unicodeScalars.endIndex - attrStr[cafRange].testDouble = 1.5 - attrStr[eRange].testDouble = 2.5 - attrStr[accentRange].testDouble = 3.5 - - var expected = AttributedString("Caf", attributes: AttributeContainer().testInt(1).testDouble(1.5)) - expected += AttributedString("e", attributes: AttributeContainer().testInt(1).testDouble(2.5)) - expected += AttributedString("\u{301}", attributes: AttributeContainer().testInt(1).testDouble(3.5)) - XCTAssertEqual(expected, attrStr) - } - - func testReplaceSubrange_rangeExpression() { - var attrStr = AttributedString("Hello World", attributes: AttributeContainer().testInt(1)) - - // Test with PartialRange, which conforms to RangeExpression but is not a Range - let rangeOfHello = ...attrStr.characters.index(attrStr.startIndex, offsetBy: 4) - attrStr.replaceSubrange(rangeOfHello, with: AttributedString("Goodbye")) - - var expected = AttributedString("Goodbye") - expected += AttributedString(" World", attributes: AttributeContainer().testInt(1)) - XCTAssertEqual(attrStr, expected) - } - - func testSettingAttributes() { - var attrStr = AttributedString("Hello World", attributes: .init().testInt(1)) - attrStr += AttributedString(". My name is Foundation!", attributes: .init().testBool(true)) - - let result = attrStr.settingAttributes(.init().testBool(false)) - - let expected = AttributedString("Hello World. My name is Foundation!", attributes: .init().testBool(false)) - XCTAssertEqual(result, expected) - } - - func testAddAttributedString() { - let attrStr = AttributedString("Hello ", attributes: .init().testInt(1)) - let attrStr2 = AttributedString("World", attributes: .init().testInt(2)) - let original = AttributedString(attrStr) - let original2 = AttributedString(attrStr2) - - var concat = AttributedString("Hello ", attributes: .init().testInt(1)) - concat += AttributedString("World", attributes: .init().testInt(2)) - let combine = attrStr + attrStr2 - XCTAssertEqual(attrStr, original) - XCTAssertEqual(attrStr2, original2) - XCTAssertEqual(String(combine.characters), "Hello World") - XCTAssertEqual(String(concat.characters), "Hello World") - - let testInts = [1, 2] - for str in [concat, combine] { - var i = 0 - for run in str.runs { - XCTAssertEqual(run.testInt, testInts[i]) - i += 1 - } - } - } - - func testReplaceSubrangeWithSubstrings() { - let baseString = AttributedString("A", attributes: .init().testInt(1)) - + AttributedString("B", attributes: .init().testInt(2)) - + AttributedString("C", attributes: .init().testInt(3)) - + AttributedString("D", attributes: .init().testInt(4)) - + AttributedString("E", attributes: .init().testInt(5)) - - let substring = baseString[ baseString.characters.index(after: baseString.startIndex) ..< baseString.characters.index(before: baseString.endIndex) ] - - var targetString = AttributedString("XYZ", attributes: .init().testString("foo")) - targetString.replaceSubrange(targetString.characters.index(after: targetString.startIndex) ..< targetString.characters.index(before: targetString.endIndex), with: substring) - - var expected = AttributedString("X", attributes: .init().testString("foo")) - + AttributedString("B", attributes: .init().testInt(2)) - + AttributedString("C", attributes: .init().testInt(3)) - + AttributedString("D", attributes: .init().testInt(4)) - + AttributedString("Z", attributes: .init().testString("foo")) - - XCTAssertEqual(targetString, expected) - - targetString = AttributedString("XYZ", attributes: .init().testString("foo")) - targetString.append(substring) - expected = AttributedString("XYZ", attributes: .init().testString("foo")) - + AttributedString("B", attributes: .init().testInt(2)) - + AttributedString("C", attributes: .init().testInt(3)) - + AttributedString("D", attributes: .init().testInt(4)) - - XCTAssertEqual(targetString, expected) - } - - func assertStringIsCoalesced(_ str: AttributedString) { - var prev: AttributedString.Runs.Run? - for run in str.runs { - if let prev = prev { - XCTAssertNotEqual(prev._attributes, run._attributes) - } - prev = run - } - } - - func testCoalescing() { - let str = AttributedString("Hello", attributes: .init().testInt(1)) - let appendSame = str + AttributedString("World", attributes: .init().testInt(1)) - let appendDifferent = str + AttributedString("World", attributes: .init().testInt(2)) - - assertStringIsCoalesced(str) - assertStringIsCoalesced(appendSame) - assertStringIsCoalesced(appendDifferent) - XCTAssertEqual(appendSame.runs.count, 1) - XCTAssertEqual(appendDifferent.runs.count, 2) - - // Ensure replacing whole string keeps coalesced - var str2 = str - str2.replaceSubrange(str2.startIndex ..< str2.endIndex, with: AttributedString("Hello", attributes: .init().testInt(2))) - assertStringIsCoalesced(str2) - XCTAssertEqual(str2.runs.count, 1) - - // Ensure replacing subranges splits runs and doesn't coalesce when not equal - var str3 = str - str3.replaceSubrange(str3.characters.index(after: str3.startIndex) ..< str3.endIndex, with: AttributedString("ello", attributes: .init().testInt(2))) - assertStringIsCoalesced(str3) - XCTAssertEqual(str3.runs.count, 2) - - var str4 = str - str4.replaceSubrange(str4.startIndex ..< str4.characters.index(before: str4.endIndex), with: AttributedString("Hell", attributes: .init().testInt(2))) - assertStringIsCoalesced(str4) - XCTAssertEqual(str4.runs.count, 2) - - var str5 = str - str5.replaceSubrange(str5.characters.index(after: str5.startIndex) ..< str5.characters.index(before: str4.endIndex), with: AttributedString("ell", attributes: .init().testInt(2))) - assertStringIsCoalesced(str5) - XCTAssertEqual(str5.runs.count, 3) - - // Ensure changing attributes back to match bordering runs coalesces with edge of subrange - var str6 = str5 - str6.replaceSubrange(str6.characters.index(after: str6.startIndex) ..< str6.endIndex, with: AttributedString("ello", attributes: .init().testInt(1))) - assertStringIsCoalesced(str6) - XCTAssertEqual(str6.runs.count, 1) - - var str7 = str5 - str7.replaceSubrange(str7.startIndex ..< str7.characters.index(before: str7.endIndex), with: AttributedString("Hell", attributes: .init().testInt(1))) - assertStringIsCoalesced(str7) - XCTAssertEqual(str7.runs.count, 1) - - var str8 = str5 - str8.replaceSubrange(str8.characters.index(after: str8.startIndex) ..< str8.characters.index(before: str8.endIndex), with: AttributedString("ell", attributes: .init().testInt(1))) - assertStringIsCoalesced(str8) - XCTAssertEqual(str8.runs.count, 1) - - var str9 = str5 - str9.testInt = 1 - assertStringIsCoalesced(str9) - XCTAssertEqual(str9.runs.count, 1) - - var str10 = str5 - str10[str10.characters.index(after: str10.startIndex) ..< str10.characters.index(before: str10.endIndex)].testInt = 1 - assertStringIsCoalesced(str10) - XCTAssertEqual(str10.runs.count, 1) - } - - func testReplaceWithEmptyElements() { - var str = AttributedString("Hello, world") - let range = str.startIndex ..< str.characters.index(str.startIndex, offsetBy: 5) - str.characters.replaceSubrange(range, with: []) - - XCTAssertEqual(str, AttributedString(", world")) - } - - func testDescription() { - let string = AttributedString("A", attributes: .init().testInt(1)) - + AttributedString("B", attributes: .init().testInt(2)) - + AttributedString("C", attributes: .init().testInt(3)) - + AttributedString("D", attributes: .init().testInt(4)) - + AttributedString("E", attributes: .init().testInt(5)) - - let desc = String(describing: string) - let expected = """ -A { -\tTestInt = 1 -} -B { -\tTestInt = 2 -} -C { -\tTestInt = 3 -} -D { -\tTestInt = 4 -} -E { -\tTestInt = 5 -} -""" - XCTAssertEqual(desc, expected) - - let runsDesc = String(describing: string.runs) - XCTAssertEqual(runsDesc, expected) - } - - func testContainerDescription() { - let cont = AttributeContainer().testBool(false).testInt(1).testDouble(2.0).testString("3") - - let desc = String(describing: cont) - - // Don't get bitten by any potential changes in the hashing algorithm. - XCTAssertTrue(desc.hasPrefix("{\n")) - XCTAssertTrue(desc.hasSuffix("\n}")) - XCTAssertTrue(desc.contains("\tTestDouble = 2.0\n")) - XCTAssertTrue(desc.contains("\tTestInt = 1\n")) - XCTAssertTrue(desc.contains("\tTestString = 3\n")) - XCTAssertTrue(desc.contains("\tTestBool = false\n")) - } - - func testRunAndSubstringDescription() { - let string = AttributedString("A", attributes: .init().testInt(1)) - + AttributedString("B", attributes: .init().testInt(2)) - + AttributedString("C", attributes: .init().testInt(3)) - + AttributedString("D", attributes: .init().testInt(4)) - + AttributedString("E", attributes: .init().testInt(5)) - - print(string.runs) - - let runsDescs = string.runs.map() { String(describing: $0) } - let expected = [ """ -A { -\tTestInt = 1 -} -""", """ -B { -\tTestInt = 2 -} -""", """ -C { -\tTestInt = 3 -} -""", """ -D { -\tTestInt = 4 -} -""", """ -E { -\tTestInt = 5 -} -"""] - XCTAssertEqual(runsDescs, expected) - - let subDescs = string.runs.map() { String(describing: string[$0.range]) } - XCTAssertEqual(subDescs, expected) - } - - func testReplacingAttributes() { - var str = AttributedString("Hello", attributes: .init().testInt(2)) - str += AttributedString("World", attributes: .init().testString("Test")) - - var result = str.replacingAttributes(.init().testInt(2).testString("NotTest"), with: .init().testBool(false)) - XCTAssertEqual(result, str) - - result = str.replacingAttributes(.init().testInt(2), with: .init().testBool(false)) - var expected = AttributedString("Hello", attributes: .init().testBool(false)) - expected += AttributedString("World", attributes: .init().testString("Test")) - XCTAssertEqual(result, expected) - } - - func testScopedAttributeContainer() { - var str = AttributedString("Hello, world") - - XCTAssertNil(str.test.testInt) - XCTAssertNil(str.testInt) - str.test.testInt = 2 - XCTAssertEqual(str.test.testInt, 2) - XCTAssertEqual(str.testInt, 2) - str.test.testInt = nil - XCTAssertNil(str.test.testInt) - XCTAssertNil(str.testInt) - - let range = str.startIndex ..< str.index(str.startIndex, offsetByCharacters: 5) - let otherRange = range.upperBound ..< str.endIndex - - str[range].test.testBool = true - XCTAssertEqual(str[range].test.testBool, true) - XCTAssertEqual(str[range].testBool, true) - XCTAssertNil(str.test.testBool) - XCTAssertNil(str.testBool) - str[range].test.testBool = nil - XCTAssertNil(str[range].test.testBool) - XCTAssertNil(str[range].testBool) - XCTAssertNil(str.test.testBool) - XCTAssertNil(str.testBool) - - str.test.testBool = true - str[range].test.testBool = nil - XCTAssertNil(str[range].test.testBool) - XCTAssertNil(str[range].testBool) - XCTAssertNil(str.test.testBool) - XCTAssertNil(str.testBool) - XCTAssertEqual(str[otherRange].test.testBool, true) - XCTAssertEqual(str[otherRange].testBool, true) - } - - func testMergeAttributes() { - let originalAttributes = AttributeContainer.testInt(2).testBool(true) - let newAttributes = AttributeContainer.testString("foo") - let overlappingAttributes = AttributeContainer.testInt(3).testDouble(4.3) - let str = AttributedString("Hello, world", attributes: originalAttributes) - - XCTAssertEqual(str.mergingAttributes(newAttributes, mergePolicy: .keepNew), AttributedString("Hello, world", attributes: newAttributes.testInt(2).testBool(true))) - XCTAssertEqual(str.mergingAttributes(newAttributes, mergePolicy: .keepCurrent), AttributedString("Hello, world", attributes: newAttributes.testInt(2).testBool(true))) - XCTAssertEqual(str.mergingAttributes(overlappingAttributes, mergePolicy: .keepNew), AttributedString("Hello, world", attributes: overlappingAttributes.testBool(true))) - XCTAssertEqual(str.mergingAttributes(overlappingAttributes, mergePolicy: .keepCurrent), AttributedString("Hello, world", attributes: originalAttributes.testDouble(4.3))) - } - - func testMergeAttributeContainers() { - let originalAttributes = AttributeContainer.testInt(2).testBool(true) - let newAttributes = AttributeContainer.testString("foo") - let overlappingAttributes = AttributeContainer.testInt(3).testDouble(4.3) - - XCTAssertEqual(originalAttributes.merging(newAttributes, mergePolicy: .keepNew), newAttributes.testInt(2).testBool(true)) - XCTAssertEqual(originalAttributes.merging(newAttributes, mergePolicy: .keepCurrent), newAttributes.testInt(2).testBool(true)) - XCTAssertEqual(originalAttributes.merging(overlappingAttributes, mergePolicy: .keepNew), overlappingAttributes.testBool(true)) - XCTAssertEqual(originalAttributes.merging(overlappingAttributes, mergePolicy: .keepCurrent), originalAttributes.testDouble(4.3)) - } - - func testChangingSingleCharacterUTF8Length() { - var attrstr = AttributedString("\u{1F3BA}\u{1F3BA}") // UTF-8 Length of 8 - attrstr.characters[attrstr.startIndex] = "A" // Changes UTF-8 Length to 5 - XCTAssertEqual(attrstr.runs.count, 1) - let runRange = attrstr.runs.first!.range - let substring = String(attrstr[runRange].characters) - XCTAssertEqual(substring, "A\u{1F3BA}") - } - - // MARK: - Substring Tests - - func testSubstringBase() { - let str = AttributedString("Hello World", attributes: .init().testInt(1)) - var substr = str[str.startIndex ..< str.characters.index(str.startIndex, offsetBy: 5)] - XCTAssertEqual(substr.base, str) - substr.testInt = 3 - XCTAssertNotEqual(substr.base, str) - - var str2 = AttributedString("Hello World", attributes: .init().testInt(1)) - let range = str2.startIndex ..< str2.characters.index(str2.startIndex, offsetBy: 5) - XCTAssertEqual(str2[range].base, str2) - str2[range].testInt = 3 - XCTAssertEqual(str2[range].base, str2) - } - - func testSubstringGetAttribute() { - let str = AttributedString("Hello World", attributes: .init().testInt(1)) - let range = str.startIndex ..< str.characters.index(str.startIndex, offsetBy: 5) - XCTAssertEqual(str[range].testInt, 1) - XCTAssertNil(str[range].testString) - - var str2 = AttributedString("Hel", attributes: .init().testInt(1)) - str2 += AttributedString("lo World", attributes: .init().testInt(2).testBool(true)) - let range2 = str2.startIndex ..< str2.characters.index(str2.startIndex, offsetBy: 5) - XCTAssertNil(str2[range2].testInt) - XCTAssertNil(str2[range2].testBool) - } - - func testSubstringDescription() { - var str = AttributedString("Hello", attributes: .init().testInt(2)) - str += " " - str += AttributedString("World", attributes: .init().testInt(3)) - - for run in str.runs { - let desc = str[run.range].description - XCTAssertFalse(desc.isEmpty) - } - } - - func testSubstringEquality() { - let str = AttributedString("") - let range = str.startIndex ..< str.endIndex - XCTAssertEqual(str[range], str[range]) - - let str2 = "A" + AttributedString("A", attributes: .init().testInt(2)) - let substringA = str2[str2.startIndex ..< str2.index(afterCharacter: str2.startIndex)] - let substringB = str2[str2.index(afterCharacter: str2.startIndex) ..< str2.endIndex] - XCTAssertNotEqual(substringA, substringB) - XCTAssertEqual(substringA, substringA) - XCTAssertEqual(substringB, substringB) - } - - // MARK: - Coding Tests - - struct CodableType : Codable { - // One of potentially many different values being encoded: - @CodableConfiguration(from: \.test) - var attributedString = AttributedString() - } - - func testJSONEncoding() throws { - let encoder = JSONEncoder() - var attrStr = AttributedString("Hello", attributes: AttributeContainer().testBool(true).testString("blue").testInt(1)) - attrStr += AttributedString(" World", attributes: AttributeContainer().testInt(2).testDouble(3.0).testString("http://www.apple.com")) - - let c = CodableType(attributedString: attrStr) - let json = try encoder.encode(c) - - let decoder = JSONDecoder() - let decoded = try decoder.decode(CodableType.self, from: json) - XCTAssertEqual(decoded.attributedString, attrStr) - } - - func testDecodingThenConvertingToNSAttributedString() throws { - let encoder = JSONEncoder() - var attrStr = AttributedString("Hello", attributes: AttributeContainer().testBool(true)) - attrStr += AttributedString(" World", attributes: AttributeContainer().testInt(2)) - let c = CodableType(attributedString: attrStr) - let json = try encoder.encode(c) - - let decoder = JSONDecoder() - let decoded = try decoder.decode(CodableType.self, from: json) - let decodedns = try NSAttributedString(decoded.attributedString, including: AttributeScopes.TestAttributes.self) - let ns = try NSAttributedString(attrStr, including: AttributeScopes.TestAttributes.self) - XCTAssertEqual(ns, decodedns) - } - - func testCustomAttributeCoding() throws { - struct MyAttributes : AttributeScope { - var customCodable : AttributeScopes.TestAttributes.CustomCodableAttribute - } - - struct CodableType : Codable { - @CodableConfiguration(from: MyAttributes.self) - var attributedString = AttributedString() - } - - let encoder = JSONEncoder() - var attrStr = AttributedString("Hello") - attrStr[AttributeScopes.TestAttributes.CustomCodableAttribute.self] = .init(inner: 42) - - let c = CodableType(attributedString: attrStr) - let json = try encoder.encode(c) - - let decoder = JSONDecoder() - let decoded = try decoder.decode(CodableType.self, from: json) - XCTAssertEqual(decoded.attributedString, attrStr) - } - - func testCustomCodableTypeWithCodableAttributedString() throws { - struct MyType : Codable, Equatable { - var other: NonCodableType - var str: AttributedString - - init(other: NonCodableType, str: AttributedString) { - self.other = other - self.str = str - } - - enum Keys : CodingKey { - case other - case str - } - - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: Keys.self) - other = NonCodableType(inner: try container.decode(Int.self, forKey: .other)) - str = try container.decode(AttributedString.self, forKey: .str, configuration: AttributeScopes.TestAttributes.self) - } - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: Keys.self) - try container.encode(other.inner, forKey: .other) - try container.encode(str, forKey: .str, configuration: AttributeScopes.TestAttributes.self) - } - } - - var container = AttributeContainer() - container.testInt = 3 - let type = MyType(other: NonCodableType(inner: 2), str: AttributedString("Hello World", attributes: container)) - - let encoder = JSONEncoder() - let data = try encoder.encode(type) - let decoder = JSONDecoder() - let decoded = try decoder.decode(MyType.self, from: data) - XCTAssertEqual(type, decoded) - } - - func testCodingErrorsPropogateUpToCallSite() { - enum CustomAttribute : CodableAttributedStringKey { - typealias Value = String - static var name = "CustomAttribute" - - static func encode(_ value: Value, to encoder: Encoder) throws { - throw TestError.encodingError - } - - static func decode(from decoder: Decoder) throws -> Value { - throw TestError.decodingError - } - } - - struct CustomScope : AttributeScope { - var custom: CustomAttribute - } - - struct Obj : Codable { - @CodableConfiguration(from: CustomScope.self) var str = AttributedString() - } - - var str = AttributedString("Hello, world") - str[CustomAttribute.self] = "test" - let encoder = JSONEncoder() - XCTAssertThrowsError(try encoder.encode(Obj(str: str)), "Attribute encoding error did not throw at call site") { err in - XCTAssert(err is TestError, "Encoding did not throw the proper error") - } - } - - func testEncodeWithPartiallyCodableScope() throws { - enum NonCodableAttribute : AttributedStringKey { - typealias Value = Int - static var name = "NonCodableAttributes" - } - struct PartialCodableScope : AttributeScope { - var codableAttr : AttributeScopes.TestAttributes.TestIntAttribute - var nonCodableAttr : NonCodableAttribute - } - struct Obj : Codable { - @CodableConfiguration(from: PartialCodableScope.self) var str = AttributedString() - } - - var str = AttributedString("Hello, world") - str[AttributeScopes.TestAttributes.TestIntAttribute.self] = 2 - str[NonCodableAttribute.self] = 3 - - let encoder = JSONEncoder() - let data = try encoder.encode(Obj(str: str)) - let decoder = JSONDecoder() - let decoded = try decoder.decode(Obj.self, from: data) - - var expected = str - expected[NonCodableAttribute.self] = nil - XCTAssertEqual(decoded.str, expected) - } - - func testAutomaticCoding() throws { - struct Obj : Codable, Equatable { - @CodableConfiguration(from: AttributeScopes.TestAttributes.self) var attrStr = AttributedString() - @CodableConfiguration(from: AttributeScopes.TestAttributes.self) var optAttrStr : AttributedString? = nil - @CodableConfiguration(from: AttributeScopes.TestAttributes.self) var attrStrArr = [AttributedString]() - @CodableConfiguration(from: AttributeScopes.TestAttributes.self) var optAttrStrArr = [AttributedString?]() - - public init(testValueWithNils: Bool) { - attrStr = AttributedString("Test") - attrStr.testString = "TestAttr" - - attrStrArr = [attrStr, attrStr] - if testValueWithNils { - optAttrStr = nil - optAttrStrArr = [nil, attrStr, nil] - } else { - optAttrStr = attrStr - optAttrStrArr = [attrStr, attrStr] - } - } - } - - // nil - do { - let val = Obj(testValueWithNils: true) - let encoder = JSONEncoder() - let data = try encoder.encode(val) - print(String(data: data, encoding: .utf8)!) - let decoder = JSONDecoder() - let decoded = try decoder.decode(Obj.self, from: data) - - XCTAssertEqual(decoded, val) - } - - // non-nil - do { - let val = Obj(testValueWithNils: false) - let encoder = JSONEncoder() - let data = try encoder.encode(val) - print(String(data: data, encoding: .utf8)!) - let decoder = JSONDecoder() - let decoded = try decoder.decode(Obj.self, from: data) - - XCTAssertEqual(decoded, val) - } - - } - - - func testManualCoding() throws { - struct Obj : Codable, Equatable { - var attrStr : AttributedString - var optAttrStr : AttributedString? - var attrStrArr : [AttributedString] - var optAttrStrArr : [AttributedString?] - - public init(testValueWithNils: Bool) { - attrStr = AttributedString("Test") - attrStr.testString = "TestAttr" - - attrStrArr = [attrStr, attrStr] - if testValueWithNils { - optAttrStr = nil - optAttrStrArr = [nil, attrStr, nil] - } else { - optAttrStr = attrStr - optAttrStrArr = [attrStr, attrStr] - } - } - - enum Keys : CodingKey { - case attrStr - case optAttrStr - case attrStrArr - case optAttrStrArr - } - - func encode(to encoder: Encoder) throws { - var c = encoder.container(keyedBy: Keys.self) - try c.encode(attrStr, forKey: .attrStr, configuration: AttributeScopes.TestAttributes.self) - try c.encodeIfPresent(optAttrStr, forKey: .optAttrStr, configuration: AttributeScopes.TestAttributes.self) - try c.encode(attrStrArr, forKey: .attrStrArr, configuration: AttributeScopes.TestAttributes.self) - try c.encode(optAttrStrArr, forKey: .optAttrStrArr, configuration: AttributeScopes.TestAttributes.self) - } - - init(from decoder: Decoder) throws { - let c = try decoder.container(keyedBy: Keys.self) - attrStr = try c.decode(AttributedString.self, forKey: .attrStr, configuration: AttributeScopes.TestAttributes.self) - optAttrStr = try c.decodeIfPresent(AttributedString.self, forKey: .optAttrStr, configuration: AttributeScopes.TestAttributes.self) - attrStrArr = try c.decode([AttributedString].self, forKey: .attrStrArr, configuration: AttributeScopes.TestAttributes.self) - optAttrStrArr = try c.decode([AttributedString?].self, forKey: .optAttrStrArr, configuration: AttributeScopes.TestAttributes.self) - } - } - - // nil - do { - let val = Obj(testValueWithNils: true) - let encoder = JSONEncoder() - let data = try encoder.encode(val) - print(String(data: data, encoding: .utf8)!) - let decoder = JSONDecoder() - let decoded = try decoder.decode(Obj.self, from: data) - - XCTAssertEqual(decoded, val) - } - - // non-nil - do { - let val = Obj(testValueWithNils: false) - let encoder = JSONEncoder() - let data = try encoder.encode(val) - print(String(data: data, encoding: .utf8)!) - let decoder = JSONDecoder() - let decoded = try decoder.decode(Obj.self, from: data) - - XCTAssertEqual(decoded, val) - } - - } - - func testDecodingCorruptedData() throws { - let jsonStrings = [ - "{\"attributedString\": 2}", - "{\"attributedString\": []}", - "{\"attributedString\": [\"Test\"]}", - "{\"attributedString\": [\"Test\", 0]}", - "{\"attributedString\": [\"\", {}, \"Test\", {}]}", - "{\"attributedString\": [\"Test\", {}, \"\", {}]}", - "{\"attributedString\": [\"\", {\"TestInt\": 1}]}", - "{\"attributedString\": {}}", - "{\"attributedString\": {\"attributeTable\": []}}", - "{\"attributedString\": {\"runs\": []}}", - "{\"attributedString\": {\"runs\": [], \"attributeTable\": []}}", - "{\"attributedString\": {\"runs\": [\"\"], \"attributeTable\": []}}", - "{\"attributedString\": {\"runs\": [\"\", 1], \"attributeTable\": []}}", - "{\"attributedString\": {\"runs\": [\"\", {}, \"Test\", {}], \"attributeTable\": []}}", - "{\"attributedString\": {\"runs\": \"Test\", {}, \"\", {}, \"attributeTable\": []}}", - ] - - let decoder = JSONDecoder() - for string in jsonStrings { - XCTAssertThrowsError(try decoder.decode(CodableType.self, from: string.data(using: .utf8)!), "Corrupt data did not throw error for json data: \(string)") { err in - XCTAssertTrue(err is DecodingError, "Decoding threw an error that was not a DecodingError") - } - } - } - - func testCodableRawRepresentableAttribute() throws { - struct Attribute : CodableAttributedStringKey { - static let name = "MyAttribute" - enum Value: String, Codable, Hashable { - case one = "one" - case two = "two" - case three = "three" - } - } - - struct Scope : AttributeScope { - let attribute: Attribute - } - - struct Object : Codable { - @CodableConfiguration(from: Scope.self) - var str = AttributedString() - } - - var str = AttributedString("Test") - str[Attribute.self] = .two - let encoder = JSONEncoder() - let encoded = try encoder.encode(Object(str: str)) - let decoder = JSONDecoder() - let decoded = try decoder.decode(Object.self, from: encoded) - XCTAssertEqual(decoded.str[Attribute.self], .two) - } - - func testContainerEncoding() throws { - struct ContainerContainer : Codable { - @CodableConfiguration(from: AttributeScopes.TestAttributes.self) var container = AttributeContainer() - } - let obj = ContainerContainer(container: AttributeContainer().testInt(1).testBool(true)) - let encoder = JSONEncoder() - let data = try encoder.encode(obj) - print(String(data: data, encoding: .utf8)!) - let decoder = JSONDecoder() - let decoded = try decoder.decode(ContainerContainer.self, from: data) - - XCTAssertEqual(obj.container, decoded.container) - } - - func testDefaultAttributesCoding() throws { - struct DefaultContainer : Codable, Equatable { - var str : AttributedString - } - - let cont = DefaultContainer(str: AttributedString("Hello", attributes: .init().link(URL(string: "http://apple.com")!))) - let encoder = JSONEncoder() - let encoded = try encoder.encode(cont) - let decoder = JSONDecoder() - let decoded = try decoder.decode(DefaultContainer.self, from: encoded) - XCTAssertEqual(cont, decoded) - } - - // MARK: - Conversion Tests - - func testConversionToObjC() throws { - var ourString = AttributedString("Hello", attributes: AttributeContainer().testInt(2)) - ourString += AttributedString(" ") - ourString += AttributedString("World", attributes: AttributeContainer().testString("Courier")) - let ourObjCString = try NSAttributedString(ourString, including: AttributeScopes.TestAttributes.self) - let theirString = NSMutableAttributedString(string: "Hello World") - theirString.addAttributes([.testInt: NSNumber(value: 2)], range: NSMakeRange(0, 5)) - theirString.addAttributes([.testString: "Courier"], range: NSMakeRange(6, 5)) - XCTAssertEqual(theirString, ourObjCString) - } - - func testConversionFromObjC() throws { - let nsString = NSMutableAttributedString(string: "Hello!") - let rangeA = NSMakeRange(0, 3) - let rangeB = NSMakeRange(3, 3) - nsString.addAttribute(.testString, value: "Courier", range: rangeA) - nsString.addAttribute(.testBool, value: NSNumber(value: true), range: rangeB) - let convertedString = try AttributedString(nsString, including: AttributeScopes.TestAttributes.self) - var string = AttributedString("Hel") - string.testString = "Courier" - string += AttributedString("lo!", attributes: AttributeContainer().testBool(true)) - XCTAssertEqual(string, convertedString) - } - - func testRoundTripConversion_boxed() throws { - struct MyCustomType : Hashable { - var num: Int - var str: String - } - - enum MyCustomAttribute : AttributedStringKey { - typealias Value = MyCustomType - static let name = "MyCustomAttribute" - } - - struct MyCustomScope : AttributeScope { - let attr : MyCustomAttribute - } - - let customVal = MyCustomType(num: 2, str: "test") - var attrString = AttributedString("Hello world") - attrString[MyCustomAttribute.self] = customVal - let nsString = try NSAttributedString(attrString, including: MyCustomScope.self) - let converted = try AttributedString(nsString, including: MyCustomScope.self) - - XCTAssertEqual(converted[MyCustomAttribute.self], customVal) - } - - func testRoundTripConversion_customConversion() throws { - struct MyCustomType : Hashable { } - - enum MyCustomAttribute : ObjectiveCConvertibleAttributedStringKey { - typealias Value = MyCustomType - static let name = "MyCustomAttribute" - - static func objectiveCValue(for value: Value) throws -> NSUUID { NSUUID() } - static func value(for object: NSUUID) throws -> Value { MyCustomType() } - } - - struct MyCustomScope : AttributeScope { - let attr : MyCustomAttribute - } - - let customVal = MyCustomType() - var attrString = AttributedString("Hello world") - attrString[MyCustomAttribute.self] = customVal - let nsString = try NSAttributedString(attrString, including: MyCustomScope.self) - - XCTAssertTrue(nsString.attribute(.init(MyCustomAttribute.name), at: 0, effectiveRange: nil) is NSUUID) - - let converted = try AttributedString(nsString, including: MyCustomScope.self) - XCTAssertEqual(converted[MyCustomAttribute.self], customVal) - } - - func testIncompleteConversionFromObjC() throws { - struct TestStringAttributeOnly : AttributeScope { - var testString: AttributeScopes.TestAttributes.TestStringAttribute // Missing TestBoolAttribute - } - - let nsString = NSMutableAttributedString(string: "Hello!") - let rangeA = NSMakeRange(0, 3) - let rangeB = NSMakeRange(3, 3) - nsString.addAttribute(.testString, value: "Courier", range: rangeA) - nsString.addAttribute(.testBool, value: NSNumber(value: true), range: rangeB) - let converted = try AttributedString(nsString, including: TestStringAttributeOnly.self) - - var expected = AttributedString("Hel", attributes: AttributeContainer().testString("Courier")) - expected += AttributedString("lo!") - XCTAssertEqual(converted, expected) - } - - func testIncompleteConversionToObjC() throws { - struct TestStringAttributeOnly : AttributeScope { - var testString: AttributeScopes.TestAttributes.TestStringAttribute // Missing TestBoolAttribute - } - - var attrStr = AttributedString("Hello ", attributes: .init().testBool(false)) - attrStr += AttributedString("world", attributes: .init().testString("Testing")) - let converted = try NSAttributedString(attrStr, including: TestStringAttributeOnly.self) - - let attrs = converted.attributes(at: 0, effectiveRange: nil) - XCTAssertFalse(attrs.keys.contains(.testBool)) - } - - func testConversionNestedScope() throws { - struct SuperScope : AttributeScope { - var subscope : SubScope - var testString: AttributeScopes.TestAttributes.TestStringAttribute - } - - struct SubScope : AttributeScope { - var testBool : AttributeScopes.TestAttributes.TestBoolAttribute - } - - let nsString = NSMutableAttributedString(string: "Hello!") - let rangeA = NSMakeRange(0, 3) - let rangeB = NSMakeRange(3, 3) - nsString.addAttribute(.testString, value: "Courier", range: rangeA) - nsString.addAttribute(.testBool, value: NSNumber(value: true), range: rangeB) - let converted = try AttributedString(nsString, including: SuperScope.self) - - var expected = AttributedString("Hel", attributes: AttributeContainer().testString("Courier")) - expected += AttributedString("lo!", attributes: AttributeContainer().testBool(true)) - XCTAssertEqual(converted, expected) - } - - func testConversionAttributeContainers() throws { - let container = AttributeContainer.testInt(2).testDouble(3.1).testString("Hello") - - let dictionary = try Dictionary(container, including: \.test) - let expected: [NSAttributedString.Key: Any] = [ - .testInt: 2, - .testDouble: 3.1, - .testString: "Hello" - ] - XCTAssertEqual(dictionary.keys, expected.keys) - for key in expected.keys { - XCTAssertTrue(__equalAttributes(dictionary[key], expected[key])) - } - - let container2 = try AttributeContainer(dictionary, including: \.test) - XCTAssertEqual(container, container2) - } - - func testConversionFromInvalidObjectiveCValueTypes() throws { - let nsStr = NSAttributedString(string: "Hello", attributes: [.testInt : "I am not an Int"]) - XCTAssertThrowsError(try AttributedString(nsStr, including: AttributeScopes.TestAttributes.self)) - - struct ConvertibleAttribute: ObjectiveCConvertibleAttributedStringKey { - struct Value : Hashable { - var subValue: String - } - typealias ObjectiveCValue = NSString - static var name = "Convertible" - - static func objectiveCValue(for value: Value) throws -> NSString { - return value.subValue as NSString - } - - static func value(for object: NSString) throws -> Value { - return Value(subValue: object as String) - } - } - struct Scope : AttributeScope { - let convertible: ConvertibleAttribute - } - - let nsStr2 = NSAttributedString(string: "Hello", attributes: [NSAttributedString.Key(ConvertibleAttribute.name) : 12345]) - XCTAssertThrowsError(try AttributedString(nsStr2, including: Scope.self)) - } - - func testConversionToUTF16() throws { - // Ensure that we're correctly using UTF16 offsets with NSAS and UTF8 offsets with AS without mixing the two - let multiByteCharacters = ["\u{2029}", "\u{1D11E}", "\u{1D122}", "\u{1F91A}\u{1F3FB}"] - - for str in multiByteCharacters { - let attrStr = AttributedString(str, attributes: .init().testInt(2)) - let nsStr = NSAttributedString(string: str, attributes: [.testInt: 2]) - - let convertedAttrStr = try AttributedString(nsStr, including: AttributeScopes.TestAttributes.self) - XCTAssertEqual(str.utf8.count, convertedAttrStr._guts.runs[0].length) - XCTAssertEqual(attrStr, convertedAttrStr) - - let convertedNSStr = try NSAttributedString(attrStr, including: AttributeScopes.TestAttributes.self) - XCTAssertEqual(nsStr, convertedNSStr) - } - } - - #if os(macOS) - func testConversionWithoutScope() throws { - // Ensure simple conversion works (no errors when loading AppKit/UIKit/SwiftUI) - let attrStr = AttributedString() - let nsStr = NSAttributedString(attrStr) - XCTAssertEqual(nsStr, NSAttributedString(string: "")) - let attrStrReverse = AttributedString(nsStr) - XCTAssertEqual(attrStrReverse, attrStr) - - // Ensure foundation attributes are converted - let attrStr2 = AttributedString("Hello", attributes: .init().link(URL(string: "http://apple.com")!)) - let nsStr2 = NSAttributedString(attrStr2) - XCTAssertEqual(nsStr2, NSAttributedString(string: "Hello", attributes: [.link : URL(string: "http://apple.com")! as NSURL])) - let attrStr2Reverse = AttributedString(nsStr2) - XCTAssertEqual(attrStr2Reverse, attrStr2) - - // Ensure accessibility attributes are converted - if let handle = dlopen("/System/Library/Frameworks/Accessibility.framework/Accessibility", RTLD_FIRST) { - let attributedString = AttributedString("Hello") - #if os(macOS) - let attributeName = "AXIPANotation" - #else - let attributeName = "UIAccessibilitySpeechAttributeIPANotation" - #endif - attributedString._guts.runs[0].attributes.contents[attributeName] = "abc" - let nsAttributedString = NSAttributedString(attributedString) - XCTAssertEqual(nsAttributedString, NSAttributedString(string: "Hello", attributes: [NSAttributedString.Key(attributeName) : "abc"])) - let attributedStringReverse = AttributedString(nsAttributedString) - XCTAssertEqual(attributedStringReverse, attributedString) - dlclose(handle) - } - - #if (os(macOS) && !targetEnvironment(macCatalyst)) - // Ensure AppKit attributes are converted - if let handle = dlopen("/var/lib/swift/libswiftAppKit.dylib", RTLD_FIRST) { - let attrStr3 = AttributedString("Hello") - attrStr3._guts.runs[0].attributes.contents["NSKern"] = CGFloat(2.3) - let nsStr3 = NSAttributedString(attrStr3) - XCTAssertEqual(nsStr3, NSAttributedString(string: "Hello", attributes: [NSAttributedString.Key("NSKern") : CGFloat(2.3)])) - let attrStr3Reverse = AttributedString(nsStr3) - XCTAssertEqual(attrStr3Reverse, attrStr3) - dlclose(handle) - } - #endif - - #if (!os(macOS) || targetEnvironment(macCatalyst)) - // Ensure UIKit attributes are converted - #if !os(macOS) - let handle = dlopen("/usr/lib/swift/libswiftUIKit.dylib", RTLD_FIRST) - #else - let handle = dlopen("/System/iOSSupport/usr/lib/swift/libswiftUIKit.dylib", RTLD_FIRST) - #endif - if let loadedHandle = handle { - let attrStr4 = AttributedString("Hello") - attrStr4._guts.runs[0].attributes.contents["NSKern"] = CGFloat(2.3) - let nsStr4 = NSAttributedString(attrStr4) - XCTAssertEqual(nsStr4, NSAttributedString(string: "Hello", attributes: [NSAttributedString.Key("NSKern") : CGFloat(2.3)])) - let attrStr4Reverse = AttributedString(nsStr4) - XCTAssertEqual(attrStr4Reverse, attrStr4) - dlclose(loadedHandle) - } - #endif - - // Ensure SwiftUI attributes are converted - if let handle = dlopen("/System/Library/Frameworks/SwiftUI.framework/SwiftUI", RTLD_FIRST) { - let attrStr5 = AttributedString("Hello") - attrStr5._guts.runs[0].attributes.contents["SwiftUI.Kern"] = CGFloat(2.3) - let nsStr5 = NSAttributedString(attrStr5) - XCTAssertEqual(nsStr5, NSAttributedString(string: "Hello", attributes: [NSAttributedString.Key("SwiftUI.Kern") : CGFloat(2.3)])) - let attrStr5Reverse = AttributedString(nsStr5) - XCTAssertEqual(attrStr5Reverse, attrStr5) - dlclose(handle) - } - - // Ensure attributes that throw are dropped - enum Attribute : ObjectiveCConvertibleAttributedStringKey { - static var name = "TestAttribute" - typealias Value = Int - typealias ObjectiveCValue = NSString - - static func objectiveCValue(for value: Int) throws -> NSString { - throw TestError.conversionError - } - - static func value(for object: NSString) throws -> Int { - throw TestError.conversionError - } - } - - struct Scope : AttributeScope { - var test: Attribute - var other: AttributeScopes.TestAttributes - } - - var container = AttributeContainer() - container.testInt = 2 - container[Attribute.self] = 3 - let str = AttributedString("Hello", attributes: container) - let result = try? NSAttributedString(str, scope: Scope.self, options: .dropThrowingAttributes) // The same call that the no-scope initializer will make - XCTAssertEqual(result, NSAttributedString(string: "Hello", attributes: [NSAttributedString.Key("TestInt") : 2])) - } - #endif - - func testConversionIncludingOnly() throws { - let str = AttributedString("Hello, world", attributes: .init().testInt(2).link(URL(string: "http://apple.com")!)) - let nsStr = try NSAttributedString(str, including: \.test) - XCTAssertEqual(nsStr, NSAttributedString(string: "Hello, world", attributes: [.testInt: 2])) - } - - func testConversionCoalescing() throws { - let nsStr = NSMutableAttributedString("Hello, world") - nsStr.setAttributes([.link : NSURL(string: "http://apple.com")!, .testInt : NSNumber(integerLiteral: 2)], range: NSRange(location: 0, length: 6)) - nsStr.setAttributes([.testInt : NSNumber(integerLiteral: 2)], range: NSRange(location: 6, length: 6)) - let attrStr = try AttributedString(nsStr, including: \.test) - XCTAssertEqual(attrStr.runs.count, 1) - XCTAssertEqual(attrStr.runs.first!.range, attrStr.startIndex ..< attrStr.endIndex) - XCTAssertEqual(attrStr.testInt, 2) - XCTAssertNil(attrStr.link) - } - - // MARK: - View Tests - - func testCharViewIndexing_backwardsFromEndIndex() { - let testString = AttributedString("abcdefghi") - let testChars = testString.characters - let testIndex = testChars.index(testChars.endIndex, offsetBy: -1) - XCTAssertEqual(testChars[testIndex], "i") - } - - func testAttrViewIndexing() { - var attrStr = AttributedString("A") - attrStr += "B" - attrStr += "C" - attrStr += "D" - - let attrStrRuns = attrStr.runs - - var i = 0 - var curIdx = attrStrRuns.startIndex - while curIdx < attrStrRuns.endIndex { - i += 1 - curIdx = attrStrRuns.index(after: curIdx) - } - XCTAssertEqual(i, 1) - XCTAssertEqual(attrStrRuns.count, 1) - } - - func testUnicodeScalarsViewIndexing() { - let attrStr = AttributedString("Cafe\u{301}", attributes: AttributeContainer().testInt(1)) - let unicode = attrStr.unicodeScalars - XCTAssertEqual(unicode[unicode.index(before: unicode.endIndex)], "\u{301}") - XCTAssertEqual(unicode[unicode.index(unicode.endIndex, offsetBy: -2)], "e") - } - - func testUnicodeScalarsSlicing() { - let attrStr = AttributedString("Cafe\u{301}", attributes: AttributeContainer().testInt(1)) - let range = attrStr.startIndex ..< attrStr.endIndex - let substringScalars = attrStr[range].unicodeScalars - let slicedScalars = attrStr.unicodeScalars[range] - - let expected: [UnicodeScalar] = ["C", "a", "f", "e", "\u{301}"] - XCTAssertEqual(substringScalars.count, expected.count) - XCTAssertEqual(slicedScalars.count, expected.count) - var indexA = substringScalars.startIndex - var indexB = slicedScalars.startIndex - var indexExpect = expected.startIndex - while indexA != substringScalars.endIndex && indexB != slicedScalars.endIndex { - XCTAssertEqual(substringScalars[indexA], expected[indexExpect]) - XCTAssertEqual(slicedScalars[indexB], expected[indexExpect]) - indexA = substringScalars.index(after: indexA) - indexB = slicedScalars.index(after: indexB) - indexExpect = expected.index(after: indexExpect) - } - } - - // MARK: - Other Tests - - func testInitWithSequence() { - let expected = AttributedString("Hello World", attributes: AttributeContainer().testInt(2)) - let sequence: [Character] = ["H", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d"] - - let container = AttributeContainer().testInt(2) - let attrStr = AttributedString(sequence, attributes: container) - XCTAssertEqual(attrStr, expected) - - let attrStr2 = AttributedString(sequence, attributes: AttributeContainer().testInt(2)) - XCTAssertEqual(attrStr2, expected) - - let attrStr3 = AttributedString(sequence, attributes: AttributeContainer().testInt(2)) - XCTAssertEqual(attrStr3, expected) - } - - func testLongestEffectiveRangeOfAttribute() { - var str = AttributedString("Abc") - str += AttributedString("def", attributes: AttributeContainer.testInt(2).testString("World")) - str += AttributedString("ghi", attributes: AttributeContainer.testInt(2).testBool(true)) - str += AttributedString("jkl", attributes: AttributeContainer.testInt(2).testDouble(3.0)) - str += AttributedString("mno", attributes: AttributeContainer.testString("Hello")) - - let idx = str.characters.index(str.startIndex, offsetBy: 7) - let expectedRange = str.characters.index(str.startIndex, offsetBy: 3) ..< str.characters.index(str.startIndex, offsetBy: 12) - let (value, range) = str.runs[\.testInt][idx] - - XCTAssertEqual(value, 2) - XCTAssertEqual(range, expectedRange) - } - - func testAttributeContainer() { - var container = AttributeContainer().testBool(true).testInt(1) - XCTAssertEqual(container.testBool, true) - XCTAssertNil(container.testString) - - let attrString = AttributedString("Hello", attributes: container) - for run in attrString.runs { - XCTAssertEqual("Hello", String(attrString.characters[run.range])) - XCTAssertEqual(run.testBool, true) - XCTAssertEqual(run.testInt, 1) - } - - container.testBool = nil - XCTAssertNil(container.testBool) - } - - func testAttributeContainerEquality() { - let containerA = AttributeContainer().testInt(2).testString("test") - let containerB = AttributeContainer().testInt(2).testString("test") - let containerC = AttributeContainer().testInt(3).testString("test") - let containerD = AttributeContainer.testInt(4) - var containerE = AttributeContainer() - containerE.testInt = 4 - - XCTAssertEqual(containerA, containerB) - XCTAssertNotEqual(containerB, containerC) - XCTAssertNotEqual(containerC, containerD) - XCTAssertEqual(containerD, containerE) - } - - func testAttributeContainerSetOnSubstring() { - let container = AttributeContainer().testBool(true).testInt(1) - - var attrString = AttributedString("Hello world", attributes: container) - - let container2 = AttributeContainer().testString("yellow") - attrString[attrString.startIndex.. () throws -> Void)] { - var tests = [ - ("testEmptyEnumeration", testEmptyEnumeration), - ("testSimpleEnumeration", testSimpleEnumeration), - ("testSliceEnumeration", testSliceEnumeration), - ("testSimpleAttribute", testSimpleAttribute), - ("testConstructorAttribute", testConstructorAttribute), - ("testAddAndRemoveAttribute", testAddAndRemoveAttribute), - ("testAddingAndRemovingAttribute", testAddingAndRemovingAttribute), - ("testScopedAttributes", testScopedAttributes), - ("testRunAttributes", testRunAttributes), - ("testAttributedStringEquality", testAttributedStringEquality), - ("testAttributedSubstringEquality", testAttributedSubstringEquality), - ("testRunEquality", testRunEquality), - ("testSubstringRunEquality", testSubstringRunEquality), - ("testDirectMutationCopyOnWrite", testDirectMutationCopyOnWrite), - ("testAttributeMutationCopyOnWrite", testAttributeMutationCopyOnWrite), - ("testSliceAttributeMutation", testSliceAttributeMutation), - ("testEnumerationAttributeMutation", testEnumerationAttributeMutation), - ("testMutateMultipleAttributes", testMutateMultipleAttributes), - ("testMutateAttributes", testMutateAttributes), - ("testReplaceAttributes", testReplaceAttributes), - ("testSliceMutation", testSliceMutation), - ("testOverlappingSliceMutation", testOverlappingSliceMutation), - ("testCharacters_replaceSubrange", testCharacters_replaceSubrange), - ("testCharactersMutation_append", testCharactersMutation_append), - ("testUnicodeScalars_replaceSubrange", testUnicodeScalars_replaceSubrange), - ("testUnicodeScalarsMutation_append", testUnicodeScalarsMutation_append), - ("testSubCharacterAttributeSetting", testSubCharacterAttributeSetting), - ("testReplaceSubrange_rangeExpression", testReplaceSubrange_rangeExpression), - ("testSettingAttributes", testSettingAttributes), - ("testAddAttributedString", testAddAttributedString), - ("testReplaceSubrangeWithSubstrings", testReplaceSubrangeWithSubstrings), - ("testCoalescing", testCoalescing), - ("testReplaceWithEmptyElements", testReplaceWithEmptyElements), - ("testDescription", testDescription), - ("testContainerDescription", testContainerDescription), - ("testRunAndSubstringDescription", testRunAndSubstringDescription), - ("testReplacingAttributes", testReplacingAttributes), - ("testScopedAttributeContainer", testScopedAttributeContainer), - ("testMergeAttributes", testMergeAttributes), - ("testMergeAttributeContainers", testMergeAttributeContainers), - ("testChangingSingleCharacterUTF8Length", testChangingSingleCharacterUTF8Length), - ("testSubstringBase", testSubstringBase), - ("testSubstringGetAttribute", testSubstringGetAttribute), - ("testSubstringDescription", testSubstringDescription), - ("testSubstringEquality", testSubstringEquality), - ("testJSONEncoding", testJSONEncoding), - ("testDecodingThenConvertingToNSAttributedString", testDecodingThenConvertingToNSAttributedString), - ("testCustomAttributeCoding", testCustomAttributeCoding), - ("testCustomCodableTypeWithCodableAttributedString", testCustomCodableTypeWithCodableAttributedString), - ("testCodingErrorsPropogateUpToCallSite", testCodingErrorsPropogateUpToCallSite), - ("testEncodeWithPartiallyCodableScope", testEncodeWithPartiallyCodableScope), - ("testAutomaticCoding", testAutomaticCoding), - ("testManualCoding", testManualCoding), - ("testDecodingCorruptedData", testDecodingCorruptedData), - ("testCodableRawRepresentableAttribute", testCodableRawRepresentableAttribute), - ("testContainerEncoding", testContainerEncoding), - ("testDefaultAttributesCoding", testDefaultAttributesCoding), - ("testConversionToObjC", testConversionToObjC), - ("testConversionFromObjC", testConversionFromObjC), - ("testRoundTripConversion_boxed", testRoundTripConversion_boxed), - ("testRoundTripConversion_customConversion", testRoundTripConversion_customConversion), - ("testIncompleteConversionFromObjC", testIncompleteConversionFromObjC), - ("testIncompleteConversionToObjC", testIncompleteConversionToObjC), - ("testConversionNestedScope", testConversionNestedScope), - ("testConversionAttributeContainers", testConversionAttributeContainers), - ("testConversionFromInvalidObjectiveCValueTypes", testConversionFromInvalidObjectiveCValueTypes), - ("testConversionToUTF16", testConversionToUTF16), - ("testConversionIncludingOnly", testConversionIncludingOnly), - ("testConversionCoalescing", testConversionCoalescing), - ("testCharViewIndexing_backwardsFromEndIndex", testCharViewIndexing_backwardsFromEndIndex), - ("testAttrViewIndexing", testAttrViewIndexing), - ("testUnicodeScalarsViewIndexing", testUnicodeScalarsViewIndexing), - ("testUnicodeScalarsSlicing", testUnicodeScalarsSlicing), - ("testInitWithSequence", testInitWithSequence), - ("testLongestEffectiveRangeOfAttribute", testLongestEffectiveRangeOfAttribute), - ("testAttributeContainer", testAttributeContainer), - ("testAttributeContainerEquality", testAttributeContainerEquality), - ("testAttributeContainerSetOnSubstring", testAttributeContainerSetOnSubstring), - ("testSlice", testSlice), - ("testCreateStringsFromCharactersWithUnicodeScalarIndexes", testCreateStringsFromCharactersWithUnicodeScalarIndexes), - ("testSettingAttributeOnSlice", testSettingAttributeOnSlice), - ("testExpressibleByStringLiteral", testExpressibleByStringLiteral), - ("testHashing", testHashing), - ("testUTF16String", testUTF16String), - ("testPlusOperators", testPlusOperators), - ("testSearch", testSearch), - ("testSubstringSearch", testSubstringSearch), - ("testIndexConversion", testIndexConversion), - ("testRangeConversion", testRangeConversion), - ("testScopedCopy", testScopedCopy), - ("testAssignDifferentSubstring", testAssignDifferentSubstring), - ("testCOWDuringSubstringMutation", testCOWDuringSubstringMutation), - ("testAssignDifferentCharacterView", testAssignDifferentCharacterView), - ("testCOWDuringCharactersMutation", testCOWDuringCharactersMutation), - ("testAssignDifferentUnicodeScalarView", testAssignDifferentUnicodeScalarView), - ("testCOWDuringUnicodeScalarsMutation", testCOWDuringUnicodeScalarsMutation) - ] - - #if os(macOS) - tests.append(("testConversionWithoutScope", testConversionWithoutScope)) - #endif - - return tests - } - -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -fileprivate extension AttributedString { - var string : String { - return _guts.string - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -fileprivate extension AttributedSubstring { - var string: Substring { - return _guts.string[_range._stringRange] - } -} diff --git a/Tests/Foundation/TestAttributedStringCOW.swift b/Tests/Foundation/TestAttributedStringCOW.swift deleted file mode 100644 index abd14354a2..0000000000 --- a/Tests/Foundation/TestAttributedStringCOW.swift +++ /dev/null @@ -1,182 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT - #if canImport(SwiftFoundation) && !DEPLOYMENT_RUNTIME_OBJC - @testable import SwiftFoundation - #else - @testable import Foundation - #endif -#endif - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributedStringProtocol { - fileprivate mutating func genericSetAttribute() { - self.testInt = 3 - } -} - -/// Tests for `AttributedString` to confirm expected CoW behavior -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -final class TestAttributedStringCOW: XCTestCase { - - // MARK: - Utility Functions - - func createAttributedString() -> AttributedString { - var str = AttributedString("Hello", attributes: container) - str += AttributedString(" ") - str += AttributedString("World", attributes: containerB) - return str - } - - func assertCOWCopy(file: StaticString = #file, line: UInt = #line, _ operation: (inout AttributedString) -> Void) { - let str = createAttributedString() - var copy = str - operation(©) - XCTAssertNotEqual(str, copy, "Mutation operation did not copy when multiple references exist", file: file, line: line) - } - - func assertCOWNoCopy(file: StaticString = #file, line: UInt = #line, _ operation: (inout AttributedString) -> Void) { - var str = createAttributedString() - let gutsPtr = Unmanaged.passUnretained(str._guts) - operation(&str) - let newGutsPtr = Unmanaged.passUnretained(str._guts) - XCTAssertEqual(gutsPtr.toOpaque(), newGutsPtr.toOpaque(), "Mutation operation copied when only one reference exists", file: file, line: line) - } - - func assertCOWBehavior(file: StaticString = #file, line: UInt = #line, _ operation: (inout AttributedString) -> Void) { - assertCOWCopy(file: file, line: line, operation) - assertCOWNoCopy(file: file, line: line, operation) - } - - func makeSubrange(_ str: AttributedString) -> Range { - return str.characters.index(str.startIndex, offsetBy: 2).. () throws -> Void)] { - return [ - ("testTopLevelType", testTopLevelType), - ("testSubstring", testSubstring), - ("testCharacters", testCharacters), - ("testUnicodeScalars", testUnicodeScalars), - ("testGenericProtocol", testGenericProtocol) - ] - } -} diff --git a/Tests/Foundation/TestAttributedStringPerformance.swift b/Tests/Foundation/TestAttributedStringPerformance.swift deleted file mode 100644 index 2f73a27c31..0000000000 --- a/Tests/Foundation/TestAttributedStringPerformance.swift +++ /dev/null @@ -1,428 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT - #if canImport(SwiftFoundation) && !DEPLOYMENT_RUNTIME_OBJC - @testable import SwiftFoundation - #else - @testable import Foundation - #endif -#endif - -/// Performance tests for `AttributedString` and its associated objects -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -final class TestAttributedStringPerformance: XCTestCase { - - /// Set to true to record a baseline for equivalent operations on `NSAttributedString` - static let runWithNSAttributedString = false - - func createLongString() -> AttributedString { - var str = AttributedString(String(repeating: "a", count: 10000), attributes: AttributeContainer().testInt(1)) - str += AttributedString(String(repeating: "b", count: 10000), attributes: AttributeContainer().testInt(2)) - str += AttributedString(String(repeating: "c", count: 10000), attributes: AttributeContainer().testInt(3)) - return str - } - - func createManyAttributesString() -> AttributedString { - var str = AttributedString("a") - for i in 0..<10000 { - str += AttributedString("a", attributes: AttributeContainer().testInt(i)) - } - return str - } - - func createLongNSString() -> NSMutableAttributedString { - let str = NSMutableAttributedString(string: String(repeating: "a", count: 10000), attributes: [.testInt: NSNumber(1)]) - str.append(NSMutableAttributedString(string: String(repeating: "b", count: 10000), attributes: [.testInt: NSNumber(2)])) - str.append(NSMutableAttributedString(string: String(repeating: "c", count: 10000), attributes: [.testInt: NSNumber(3)])) - return str - } - - func createManyAttributesNSString() -> NSMutableAttributedString { - let str = NSMutableAttributedString(string: "a") - for i in 0..<10000 { - str.append(NSAttributedString(string: "a", attributes: [.testInt: NSNumber(value: i)])) - } - return str - } - - // MARK: - String Manipulation - - func testInsertIntoLongString() { - var str = createLongString() - let idx = str.characters.index(str.startIndex, offsetBy: str.characters.count / 2) - let toInsert = AttributedString(String(repeating: "c", count: str.characters.count)) - - let strNS = createLongNSString() - let idxNS = str.characters.count / 2 - let toInsertNS = NSAttributedString(string: String(repeating: "c", count: str.characters.count)) - - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - strNS.insert(toInsertNS, at: idxNS) - } else { - str.insert(toInsert, at: idx) - } - } - } - - func testReplaceSubrangeOfLongString() { - var str = createLongString() - let start = str.characters.index(str.startIndex, offsetBy: str.characters.count / 2) - let range = start ... str.characters.index(start, offsetBy: 10) - let toInsert = AttributedString(String(repeating: "d", count: str.characters.count / 2), attributes: AttributeContainer().testDouble(2.5)) - - let strNS = createLongNSString() - let startNS = strNS.string.count / 2 - let rangeNS = NSRange(location: startNS, length: 10) - let toInsertNS = NSAttributedString(string: String(repeating: "d", count: strNS.string.count / 2), attributes: [.testDouble: NSNumber(value: 2.5)]) - - - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - strNS.replaceCharacters(in: rangeNS, with: toInsertNS) - } else { - str.replaceSubrange(range, with: toInsert) - } - } - } - - // MARK: - Attribute Manipulation - - func testSetAttribute() { - var str = createManyAttributesString() - let strNS = createManyAttributesNSString() - - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - strNS.addAttributes([.testDouble: NSNumber(value: 1.5)], range: NSRange(location: 0, length: strNS.string.count)) - } else { - str.testDouble = 1.5 - } - } - } - - func testGetAttribute() { - let str = createManyAttributesString() - let strNS = createManyAttributesNSString() - - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - strNS.enumerateAttribute(.testDouble, in: NSRange(location: 0, length: strNS.string.count), options: []) { (attr, range, pointer) in - let _ = attr - } - } else { - let _ = str.testDouble - } - } - } - - func testSetAttributeSubrange() { - var str = createManyAttributesString() - let range = str.characters.index(str.startIndex, offsetBy: str.characters.count / 2)... - - let strNS = createManyAttributesNSString() - let rangeNS = NSRange(location: 0, length: str.characters.count / 2) - - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - strNS.addAttributes([.testDouble: NSNumber(value: 1.5)], range: rangeNS) - } else { - str[range].testDouble = 1.5 - } - } - } - - func testGetAttributeSubrange() { - let str = createManyAttributesString() - let range = str.characters.index(str.startIndex, offsetBy: str.characters.count / 2)... - - let strNS = createManyAttributesNSString() - let rangeNS = NSRange(location: 0, length: str.characters.count / 2) - - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - strNS.enumerateAttribute(.testDouble, in: rangeNS, options: []) { (attr, range, pointer) in - let _ = attr - } - } else { - let _ = str[range].testDouble - } - } - } - - func testModifyAttributes() { - let str = createManyAttributesString() - let strNS = createManyAttributesNSString() - - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - strNS.enumerateAttribute(.testInt, in: NSRange(location: 0, length: strNS.string.count), options: []) { (val, range, pointer) in - if let value = val as? NSNumber { - strNS.addAttributes([.testInt: NSNumber(value: value.intValue + 2)], range: range) - } - } - } else { - let _ = str.transformingAttributes(\.testInt) { transformer in - if let val = transformer.value { - transformer.value = val + 2 - } - } - } - } - } - - func testReplaceAttributes() { - var str = createManyAttributesString() - let old = AttributeContainer().testInt(100) - let new = AttributeContainer().testDouble(100.5) - - let strNS = createManyAttributesNSString() - - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - strNS.enumerateAttribute(.testInt, in: NSRange(location: 0, length: strNS.string.count), options: []) { (val, range, pointer) in - if let value = val as? NSNumber, value == 100 { - strNS.removeAttribute(.testInt, range: range) - strNS.addAttribute(.testDouble, value: NSNumber(value: 100.5), range: range) - } - } - } else { - str.replaceAttributes(old, with: new) - } - } - } - - func testMergeMultipleAttributes() throws { - var str = createManyAttributesString() - let new = AttributeContainer().testDouble(1.5).testString("test") - - let strNS = createManyAttributesNSString() - let newNS: [NSAttributedString.Key: Any] = [.testDouble: NSNumber(value: 1.5), .testString: "test"] - - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - strNS.addAttributes(newNS, range: NSRange(location: 0, length: strNS.string.count)) - } else { - str.mergeAttributes(new) - } - } - } - - func testSetMultipleAttributes() throws { - var str = createManyAttributesString() - let new = AttributeContainer().testDouble(1.5).testString("test") - - let strNS = createManyAttributesNSString() - let rangeNS = NSRange(location: 0, length: str.characters.count / 2) - let newNS: [NSAttributedString.Key: Any] = [.testDouble: NSNumber(value: 1.5), .testString: "test"] - - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - strNS.setAttributes(newNS, range: rangeNS) - } else { - str.setAttributes(new) - } - } - } - - // MARK: - Attribute Enumeration - - func testEnumerateAttributes() { - let str = createManyAttributesString() - let strNS = createManyAttributesNSString() - - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - strNS.enumerateAttributes(in: NSRange(location: 0, length: strNS.string.count), options: []) { (attrs, range, pointer) in - - } - } else { - for _ in str.runs { - - } - } - } - } - - func testEnumerateAttributesSlice() { - let str = createManyAttributesString() - let strNS = createManyAttributesNSString() - - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - strNS.enumerateAttribute(.testInt, in: NSRange(location: 0, length: strNS.string.count), options: []) { (val, range, pointer) in - - } - } else { - for (_, _) in str.runs[\.testInt] { - - } - } - } - } - - // MARK: - NSAS Conversion - - func testConvertToNSAS() throws { - guard !TestAttributedStringPerformance.runWithNSAttributedString else { - throw XCTSkip("Test disabled for NSAS") - } - - let str = createManyAttributesString() - - self.measure { - let _ = try! NSAttributedString(str, including: AttributeScopes.TestAttributes.self) - } - } - - func testConvertFromNSAS() throws { - guard !TestAttributedStringPerformance.runWithNSAttributedString else { - throw XCTSkip("Test disabled for NSAS") - } - - let str = createManyAttributesString() - let ns = try NSAttributedString(str, including: AttributeScopes.TestAttributes.self) - - self.measure { - let _ = try! AttributedString(ns, including: AttributeScopes.TestAttributes.self) - } - } - - // MARK: - Encoding and Decoding - - func testEncode() throws { - struct CodableType: Codable { - @CodableConfiguration(from: AttributeScopes.TestAttributes.self) - var str = AttributedString() - } - - let str = createManyAttributesString() - let codableType = CodableType(str: str) - let encoder = JSONEncoder() - - let ns = createManyAttributesNSString() - - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - let _ = try! NSKeyedArchiver.archivedData(withRootObject: ns, requiringSecureCoding: false) - } else { - let _ = try! encoder.encode(codableType) - } - } - } - - func testDecode() throws { - struct CodableType: Codable { - @CodableConfiguration(from: AttributeScopes.TestAttributes.self) - var str = AttributedString() - } - - let str = createManyAttributesString() - let codableType = CodableType(str: str) - let encoder = JSONEncoder() - let data = try encoder.encode(codableType) - let decoder = JSONDecoder() - - let dataNS: Data - if TestAttributedStringPerformance.runWithNSAttributedString { - let ns = createManyAttributesNSString() - dataNS = try NSKeyedArchiver.archivedData(withRootObject: ns, requiringSecureCoding: false) - } else { - dataNS = Data() - } - - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - let _ = try! NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(dataNS) - } else { - let _ = try! decoder.decode(CodableType.self, from: data) - } - } - } - - // MARK: - Other - - func testCreateLongString() { - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - let _ = createLongNSString() - } else { - let _ = createLongString() - } - } - } - - func testCreateManyAttributesString() { - self.measure { - if TestAttributedStringPerformance.runWithNSAttributedString { - let _ = createManyAttributesNSString() - } else { - let _ = createManyAttributesString() - } - } - } - - func testEquality() throws { - guard !TestAttributedStringPerformance.runWithNSAttributedString else { - throw XCTSkip("Test disabled for NSAS") - } - - let str = createManyAttributesString() - let str2 = createManyAttributesString() - - self.measure { - _ = str == str2 - } - } - - func testSubstringEquality() throws { - guard !TestAttributedStringPerformance.runWithNSAttributedString else { - throw XCTSkip("Test disabled for NSAS") - } - - let str = createManyAttributesString() - let str2 = createManyAttributesString() - let range = str.characters.index(str.startIndex, offsetBy: str.characters.count / 2)... - let substring = str[range] - let substring2 = str2[range] - - self.measure { - _ = substring == substring2 - } - } - - static var allTests: [(String, (TestAttributedStringPerformance) -> () throws -> Void)] { - return [ - ("testInsertIntoLongString", testInsertIntoLongString), - ("testReplaceSubrangeOfLongString", testReplaceSubrangeOfLongString), - ("testSetAttribute", testSetAttribute), - ("testGetAttribute", testGetAttribute), - ("testSetAttributeSubrange", testSetAttributeSubrange), - ("testGetAttributeSubrange", testGetAttributeSubrange), - ("testModifyAttributes", testModifyAttributes), - ("testReplaceAttributes", testReplaceAttributes), - ("testMergeMultipleAttributes", testMergeMultipleAttributes), - ("testSetMultipleAttributes", testSetMultipleAttributes), - ("testEnumerateAttributes", testEnumerateAttributes), - ("testEnumerateAttributesSlice", testEnumerateAttributesSlice), - ("testConvertToNSAS", testConvertToNSAS), - ("testConvertFromNSAS", testConvertFromNSAS), - ("testEncode", testEncode), - ("testDecode", testDecode), - ("testCreateLongString", testCreateLongString), - ("testCreateManyAttributesString", testCreateManyAttributesString), - ("testEquality", testEquality), - ("testSubstringEquality", testSubstringEquality) - ] - } -} diff --git a/Tests/Foundation/TestAttributedStringSupport.swift b/Tests/Foundation/TestAttributedStringSupport.swift deleted file mode 100644 index f38a5cd25b..0000000000 --- a/Tests/Foundation/TestAttributedStringSupport.swift +++ /dev/null @@ -1,144 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2020 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT - #if canImport(SwiftFoundation) && !DEPLOYMENT_RUNTIME_OBJC - @testable import SwiftFoundation - #else - @testable import Foundation - #endif -#endif - -extension NSAttributedString.Key { - static let testInt = NSAttributedString.Key("TestInt") - static let testString = NSAttributedString.Key("TestString") - static let testDouble = NSAttributedString.Key("TestDouble") - static let testBool = NSAttributedString.Key("TestBool") - static let link: NSAttributedString.Key = .init(rawValue: "NSLink") -} - -struct Color : Hashable, Codable { - let name: String - - static let black: Color = Color(name: "black") - static let blue: Color = Color(name: "black") - static let white: Color = Color(name: "white") -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributeScopes.TestAttributes { - - enum TestIntAttribute: CodableAttributedStringKey, MarkdownDecodableAttributedStringKey { - typealias Value = Int - static let name = "TestInt" - } - - enum TestStringAttribute: CodableAttributedStringKey, MarkdownDecodableAttributedStringKey { - typealias Value = String - static let name = "TestString" - } - - enum TestDoubleAttribute: CodableAttributedStringKey, MarkdownDecodableAttributedStringKey { - typealias Value = Double - static let name = "TestDouble" - } - - enum TestBoolAttribute: CodableAttributedStringKey, MarkdownDecodableAttributedStringKey { - typealias Value = Bool - static let name = "TestBool" - } - - enum TestForegroundColorAttribute: CodableAttributedStringKey, MarkdownDecodableAttributedStringKey { - typealias Value = Color - static let name = "ForegroundColor" - } - - enum TestBackgroundColorAttribute: CodableAttributedStringKey, MarkdownDecodableAttributedStringKey { - typealias Value = Color - static let name = "BackgroundColor" - } - - #if false - @frozen enum MisspelledAttribute : CodableAttributedStringKey, FixableAttribute { - typealias Value = Bool - static let name = "Misspelled" - - public static func fixAttribute(in string: inout AttributedString) { - let words = string.characters.subranges { - !$0.isWhitespace && !$0.isPunctuation - } - - // First make sure that no non-words are marked as misspelled - let nonWords = RangeSet(string.startIndex ..< string.endIndex).subtracting(words) - string[nonWords].misspelled = nil - - // Then make sure that any word ranges containing the attribute span the entire word - for (misspelled, range) in string.runs[\.misspelledAttribute] { - if let misspelled = misspelled, misspelled { - let fullRange = words.ranges[words.ranges.firstIndex { $0.contains(range.lowerBound) }!] - string[fullRange].misspelled = true - } - } - } - } - #endif - - enum NonCodableAttribute : AttributedStringKey { - typealias Value = NonCodableType - static let name = "NonCodable" - } - - enum CustomCodableAttribute : CodableAttributedStringKey { - typealias Value = NonCodableType - static let name = "NonCodableConvertible" - - static func encode(_ value: NonCodableType, to encoder: Encoder) throws { - var c = encoder.singleValueContainer() - try c.encode(value.inner) - } - - static func decode(from decoder: Decoder) throws -> NonCodableType { - let c = try decoder.singleValueContainer() - let inner = try c.decode(Int.self) - return NonCodableType(inner: inner) - } - } - -} - -struct NonCodableType : Hashable { - var inner : Int -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributeScopes { - var test: TestAttributes.Type { TestAttributes.self } - - struct TestAttributes : AttributeScope { - var testInt : TestIntAttribute - var testString : TestStringAttribute - var testDouble : TestDoubleAttribute - var testBool : TestBoolAttribute - var foregroundColor: TestForegroundColorAttribute - var backgroundColor: TestBackgroundColorAttribute - #if false - var misspelled : MisspelledAttribute - #endif - } -} - -@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) -extension AttributeDynamicLookup { - subscript(dynamicMember keyPath: KeyPath) -> T { - get { self[T.self] } - } -} From a5079cb32a903ad72c71cb0c6e98cc218ee80114 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 15 Feb 2024 13:43:50 -0800 Subject: [PATCH 034/198] Fix a Locale bug --- Sources/Foundation/NSLocale.swift | 2 +- Sources/Foundation/NSString.swift | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Sources/Foundation/NSLocale.swift b/Sources/Foundation/NSLocale.swift index 2f30114aee..03dcc4970e 100644 --- a/Sources/Foundation/NSLocale.swift +++ b/Sources/Foundation/NSLocale.swift @@ -470,7 +470,7 @@ extension NSLocale { extension NSLocale : _SwiftBridgeable { typealias SwiftType = Locale internal var _swiftObject: Locale { - return Locale(identifier: self.localeIdentifier) + return _locale } } diff --git a/Sources/Foundation/NSString.swift b/Sources/Foundation/NSString.swift index bbfbdb93fe..4ce6cbf9bc 100644 --- a/Sources/Foundation/NSString.swift +++ b/Sources/Foundation/NSString.swift @@ -1296,7 +1296,11 @@ extension NSString { public convenience init(format: String, locale: AnyObject?, arguments argList: CVaListPointer) { let str: CFString if let loc = locale { - if type(of: loc) === NSLocale.self || type(of: loc) === NSDictionary.self { + if type(of: loc) === NSLocale.self { + // Create a CFLocaleRef + let cf = (loc as! NSLocale)._cfObject + str = CFStringCreateWithFormatAndArguments(kCFAllocatorSystemDefault, unsafeBitCast(cf, to: CFDictionary.self), format._cfObject, argList) + } else if type(of: loc) === NSDictionary.self { str = CFStringCreateWithFormatAndArguments(kCFAllocatorSystemDefault, unsafeBitCast(loc, to: CFDictionary.self), format._cfObject, argList) } else { fatalError("locale parameter must be a NSLocale or a NSDictionary") From ad4867bb1814c41bbe5721d18abc51ae4519c9bf Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 15 Feb 2024 13:45:05 -0800 Subject: [PATCH 035/198] Move Data support to NSData --- Sources/Foundation/Data.swift | 70 --------------------------------- Sources/Foundation/NSData.swift | 65 ++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 70 deletions(-) delete mode 100644 Sources/Foundation/Data.swift diff --git a/Sources/Foundation/Data.swift b/Sources/Foundation/Data.swift deleted file mode 100644 index 961c7aa47d..0000000000 --- a/Sources/Foundation/Data.swift +++ /dev/null @@ -1,70 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -extension Data { - @available(*, unavailable, renamed: "copyBytes(to:count:)") - public func getBytes(_ buffer: UnsafeMutablePointerVoid, length: Int) { } - - @available(*, unavailable, renamed: "copyBytes(to:from:)") - public func getBytes(_ buffer: UnsafeMutablePointerVoid, range: NSRange) { } -} - -extension Data { - // Temporary until SwiftFoundation supports this - public init(contentsOf url: URL, options: ReadingOptions = []) throws { - self = try .init(contentsOf: url.path, options: options) - } - - public func write(to url: URL, options: WritingOptions = []) throws { - try write(to: url.path, options: options) - } -} - -extension Data { - public init(referencing d: NSData) { - self = Data(d) - } -} - -extension Data : _ObjectiveCBridgeable { - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSData { - return self.withUnsafeBytes { - NSData(bytes: $0.baseAddress, length: $0.count) - } - } - - public static func _forceBridgeFromObjectiveC(_ input: NSData, result: inout Data?) { - // We must copy the input because it might be mutable; just like storing a value type in ObjC - result = Data(input) - } - - public static func _conditionallyBridgeFromObjectiveC(_ input: NSData, result: inout Data?) -> Bool { - // We must copy the input because it might be mutable; just like storing a value type in ObjC - result = Data(input) - return true - } - -// @_effects(readonly) - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSData?) -> Data { - guard let src = source else { return Data() } - return Data(src) - } -} - -extension NSData : _HasCustomAnyHashableRepresentation { - // Must be @nonobjc to avoid infinite recursion during bridging. - @nonobjc - public func _toCustomAnyHashable() -> AnyHashable? { - return AnyHashable(Data._unconditionallyBridgeFromObjectiveC(self)) - } -} diff --git a/Sources/Foundation/NSData.swift b/Sources/Foundation/NSData.swift index 53ac05f48d..0247cd9cc9 100644 --- a/Sources/Foundation/NSData.swift +++ b/Sources/Foundation/NSData.swift @@ -1205,3 +1205,68 @@ extension NSData { } } } + +// MARK: - Temporary URL support + +extension Data { + // Temporary until SwiftFoundation supports this + public init(contentsOf url: URL, options: ReadingOptions = []) throws { + self = try .init(contentsOf: url.path, options: options) + } + + public func write(to url: URL, options: WritingOptions = []) throws { + try write(to: url.path, options: options) + } +} + +// MARK: - Bridging + +extension Data { + @available(*, unavailable, renamed: "copyBytes(to:count:)") + public func getBytes(_ buffer: UnsafeMutablePointerVoid, length: Int) { } + + @available(*, unavailable, renamed: "copyBytes(to:from:)") + public func getBytes(_ buffer: UnsafeMutablePointerVoid, range: NSRange) { } +} + + +extension Data { + public init(referencing d: NSData) { + self = Data(d) + } +} + +extension Data : _ObjectiveCBridgeable { + @_semantics("convertToObjectiveC") + public func _bridgeToObjectiveC() -> NSData { + return self.withUnsafeBytes { + NSData(bytes: $0.baseAddress, length: $0.count) + } + } + + public static func _forceBridgeFromObjectiveC(_ input: NSData, result: inout Data?) { + // We must copy the input because it might be mutable; just like storing a value type in ObjC + result = Data(input) + } + + public static func _conditionallyBridgeFromObjectiveC(_ input: NSData, result: inout Data?) -> Bool { + // We must copy the input because it might be mutable; just like storing a value type in ObjC + result = Data(input) + return true + } + +// @_effects(readonly) + public static func _unconditionallyBridgeFromObjectiveC(_ source: NSData?) -> Data { + guard let src = source else { return Data() } + return Data(src) + } +} + +extension NSData : _HasCustomAnyHashableRepresentation { + // Must be @nonobjc to avoid infinite recursion during bridging. + @nonobjc + public func _toCustomAnyHashable() -> AnyHashable? { + return AnyHashable(Data._unconditionallyBridgeFromObjectiveC(self)) + } +} + From 7dcee5ef9273676d545b8c3eb7b6c6d4965f2dc7 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Fri, 16 Feb 2024 13:47:23 -0800 Subject: [PATCH 036/198] Use Context to get package directory for relative paths in unicode data --- Package.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Package.swift b/Package.swift index 170393a09a..2823960bfc 100644 --- a/Package.swift +++ b/Package.swift @@ -11,10 +11,10 @@ let buildSettings: [CSetting] = [ .define("DEPLOYMENT_ENABLE_LIBDISPATCH"), .define("HAVE_STRUCT_TIMESPEC"), .define("_GNU_SOURCE", .when(platforms: [.linux, .android])), - .define("CF_CHARACTERSET_UNICODE_DATA_L", to: "\"Sources/CoreFoundation/CFUnicodeData-L.mapping\""), - .define("CF_CHARACTERSET_UNICODE_DATA_B", to: "\"Sources/CoreFoundation/CFUnicodeData-B.mapping\""), - .define("CF_CHARACTERSET_UNICHAR_DB", to: "\"Sources/CoreFoundation/CFUniCharPropertyDatabase.data\""), - .define("CF_CHARACTERSET_BITMAP", to: "\"Sources/CoreFoundation/CFCharacterSetBitmaps.bitmap\""), + .define("CF_CHARACTERSET_UNICODE_DATA_L", to: "\"\(Context.packageDirectory)/Sources/CoreFoundation/CFUnicodeData-L.mapping\""), + .define("CF_CHARACTERSET_UNICODE_DATA_B", to: "\"\(Context.packageDirectory)/Sources/CoreFoundation/CFUnicodeData-B.mapping\""), + .define("CF_CHARACTERSET_UNICHAR_DB", to: "\"\(Context.packageDirectory)/Sources/CoreFoundation/CFUniCharPropertyDatabase.data\""), + .define("CF_CHARACTERSET_BITMAP", to: "\"\(Context.packageDirectory)/Sources/CoreFoundation/CFCharacterSetBitmaps.bitmap\""), .unsafeFlags([ "-Wno-shorten-64-to-32", "-Wno-deprecated-declarations", From 3b4b7b4658e04cd575d3d7885040f178f2f004f9 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 15 Feb 2024 14:58:18 -0800 Subject: [PATCH 037/198] Use FoundationEssentials Calendar, TimeZone, DateComponents --- Sources/CoreFoundation/CFCalendar.c | 11 - .../include/ForSwiftFoundationOnly.h | 15 - Sources/Foundation/Calendar.swift | 1202 ----------------- Sources/Foundation/DateComponents.swift | 416 +----- Sources/Foundation/DateFormatter.swift | 13 +- Sources/Foundation/NSCalendar.swift | 1118 ++++----------- Sources/Foundation/NSDate.swift | 6 + Sources/Foundation/NSDateComponents.swift | 376 +----- Sources/Foundation/NSLocale.swift | 6 +- Sources/Foundation/NSSwiftRuntime.swift | 16 +- Sources/Foundation/NSTimeZone.swift | 249 ++-- Sources/Foundation/TimeZone.swift | 308 ----- Tests/Foundation/TestNSCalendar.swift | 6 +- 13 files changed, 467 insertions(+), 3275 deletions(-) delete mode 100644 Sources/Foundation/Calendar.swift delete mode 100644 Sources/Foundation/TimeZone.swift diff --git a/Sources/CoreFoundation/CFCalendar.c b/Sources/CoreFoundation/CFCalendar.c index 54ece0c9d7..f4342411bb 100644 --- a/Sources/CoreFoundation/CFCalendar.c +++ b/Sources/CoreFoundation/CFCalendar.c @@ -750,14 +750,12 @@ CFCalendarRef _CFCalendarCreateCopy(CFAllocatorRef allocator, CFCalendarRef cale } CFStringRef CFCalendarGetIdentifier(CFCalendarRef calendar) { - CF_SWIFT_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, CFStringRef, calendar, NSCalendar.calendarIdentifier); CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, CFStringRef, (NSCalendar *)calendar, calendarIdentifier); __CFGenericValidateType(calendar, CFCalendarGetTypeID()); return calendar->_identifier; } CFLocaleRef CFCalendarCopyLocale(CFCalendarRef calendar) { - CF_SWIFT_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, CFLocaleRef, calendar, NSCalendar.copyLocale); CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, CFLocaleRef, (NSCalendar *)calendar, _copyLocale); __CFGenericValidateType(calendar, CFCalendarGetTypeID()); return CFLocaleCreateCopy(CFGetAllocator(calendar->_locale), calendar->_locale); @@ -765,7 +763,6 @@ CFLocaleRef CFCalendarCopyLocale(CFCalendarRef calendar) { void CFCalendarSetLocale(CFCalendarRef calendar, CFLocaleRef locale) { ICU_LOG(" // CFCalendarSetLocale enter\n"); - CF_SWIFT_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, void, calendar, NSCalendar.setLocale, locale); CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, void, (NSCalendar *)calendar, setLocale:(NSLocale *)locale); __CFGenericValidateType(calendar, CFCalendarGetTypeID()); __CFGenericValidateType(locale, CFLocaleGetTypeID()); @@ -824,7 +821,6 @@ void CFCalendarSetLocale(CFCalendarRef calendar, CFLocaleRef locale) { } CFTimeZoneRef CFCalendarCopyTimeZone(CFCalendarRef calendar) { - CF_SWIFT_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, CFTimeZoneRef, calendar, NSCalendar.copyTimeZone); CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, CFTimeZoneRef, (NSCalendar *)calendar, _copyTimeZone); __CFGenericValidateType(calendar, CFCalendarGetTypeID()); return (CFTimeZoneRef)CFRetain(calendar->_tz); @@ -832,7 +828,6 @@ CFTimeZoneRef CFCalendarCopyTimeZone(CFCalendarRef calendar) { void CFCalendarSetTimeZone(CFCalendarRef calendar, CFTimeZoneRef tz) { ICU_LOG(" // CFCalendarSetTimeZone enter\n"); - CF_SWIFT_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, void, calendar, NSCalendar.setTimeZone, tz); CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, void, (NSCalendar *)calendar, setTimeZone:(NSTimeZone *)tz); __CFGenericValidateType(calendar, CFCalendarGetTypeID()); if (tz) __CFGenericValidateType(tz, CFTimeZoneGetTypeID()); @@ -845,7 +840,6 @@ void CFCalendarSetTimeZone(CFCalendarRef calendar, CFTimeZoneRef tz) { } CFIndex CFCalendarGetFirstWeekday(CFCalendarRef calendar) { - CF_SWIFT_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, CFIndex, calendar, NSCalendar.firstWeekday); CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, CFIndex, (NSCalendar *)calendar, firstWeekday); __CFGenericValidateType(calendar, CFCalendarGetTypeID()); return calendar->_firstWeekday; @@ -853,7 +847,6 @@ CFIndex CFCalendarGetFirstWeekday(CFCalendarRef calendar) { void CFCalendarSetFirstWeekday(CFCalendarRef calendar, CFIndex wkdy) { ICU_LOG(" // CFCalendarSetFirstWeekday enter\n"); - CF_SWIFT_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, void, calendar, NSCalendar.setFirstWeekday, wkdy); CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, void, (NSCalendar *)calendar, setFirstWeekday:(NSUInteger)wkdy); __CFGenericValidateType(calendar, CFCalendarGetTypeID()); calendar->_firstWeekday = wkdy; @@ -866,7 +859,6 @@ void CFCalendarSetFirstWeekday(CFCalendarRef calendar, CFIndex wkdy) { } CFIndex CFCalendarGetMinimumDaysInFirstWeek(CFCalendarRef calendar) { - CF_SWIFT_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, CFIndex, calendar, NSCalendar.minimumDaysInFirstWeek); CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, CFIndex, (NSCalendar *)calendar, minimumDaysInFirstWeek); __CFGenericValidateType(calendar, CFCalendarGetTypeID()); return calendar->_minDaysInFirstWeek; @@ -874,7 +866,6 @@ CFIndex CFCalendarGetMinimumDaysInFirstWeek(CFCalendarRef calendar) { void CFCalendarSetMinimumDaysInFirstWeek(CFCalendarRef calendar, CFIndex mwd) { ICU_LOG(" // CFCalendarSetMinimumDaysInFirstWeek enter\n"); - CF_SWIFT_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, void, calendar, NSCalendar.setMinimumDaysInFirstWeek, mwd); CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, void, (NSCalendar *)calendar, setMinimumDaysInFirstWeek:(NSUInteger)mwd); __CFGenericValidateType(calendar, CFCalendarGetTypeID()); calendar->_minDaysInFirstWeek = mwd; @@ -887,7 +878,6 @@ void CFCalendarSetMinimumDaysInFirstWeek(CFCalendarRef calendar, CFIndex mwd) { } CFDateRef CFCalendarCopyGregorianStartDate(CFCalendarRef calendar) { - CF_SWIFT_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, CFDateRef, calendar, NSCalendar.copyGregorianStartDate); CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, CFDateRef, (NSCalendar *)calendar, _copyGregorianStartDate); __CFGenericValidateType(calendar, CFCalendarGetTypeID()); return calendar->_gregorianStart ? (CFDateRef)CFRetain(calendar->_gregorianStart) : NULL; @@ -895,7 +885,6 @@ CFDateRef CFCalendarCopyGregorianStartDate(CFCalendarRef calendar) { void CFCalendarSetGregorianStartDate(CFCalendarRef calendar, CFDateRef _Nullable date) { ICU_LOG(" // CFCalendarSetGregorianStartDate enter\n"); - CF_SWIFT_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, void, calendar, NSCalendar.setGregorianStartDate, date); CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCalendar, void, (NSCalendar *)calendar, _setGregorianStartDate:(NSDate *)date); __CFGenericValidateType(calendar, CFCalendarGetTypeID()); if (date) __CFGenericValidateType(date, CFDateGetTypeID()); diff --git a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h index 12bc78da28..42d6a73c89 100644 --- a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h @@ -240,20 +240,6 @@ struct _NSDataBridge { void (*_Nonnull replaceBytes)(CFTypeRef obj, CFRange range, const void *_Nullable newBytes, CFIndex newLength); }; -struct _NSCalendarBridge { - _Nonnull CFTypeRef (*_Nonnull calendarIdentifier)(CFTypeRef obj); - _Nullable CFTypeRef (*_Nonnull copyLocale)(CFTypeRef obj); - void (*_Nonnull setLocale)(CFTypeRef obj, CFTypeRef _Nullable locale); - _Nonnull CFTypeRef (*_Nonnull copyTimeZone)(CFTypeRef obj); - void (*_Nonnull setTimeZone)(CFTypeRef obj, CFTypeRef _Nonnull timeZone); - CFIndex (*_Nonnull firstWeekday)(CFTypeRef obj); - void (*_Nonnull setFirstWeekday)(CFTypeRef obj, CFIndex firstWeekday); - CFIndex (*_Nonnull minimumDaysInFirstWeek)(CFTypeRef obj); - void (*_Nonnull setMinimumDaysInFirstWeek)(CFTypeRef obj, CFIndex minimumDays); - _Nullable CFTypeRef (*_Nonnull copyGregorianStartDate)(CFTypeRef obj); - void (*_Nonnull setGregorianStartDate)(CFTypeRef obj, CFTypeRef _Nullable date); -}; - struct _NSURLBridge { Boolean (*_Nonnull copyResourcePropertyForKey)(CFTypeRef url, CFStringRef key, CFTypeRef _Nullable *_Nullable propertyValueTypeRefPtr, CFErrorRef *error); CFDictionaryRef _Nullable (*_Nonnull copyResourcePropertiesForKeys)(CFTypeRef url, CFArrayRef keys, CFErrorRef *error); @@ -282,7 +268,6 @@ struct _CFSwiftBridge { struct _NSMutableCharacterSetBridge NSMutableCharacterSet; struct _NSNumberBridge NSNumber; struct _NSDataBridge NSData; - struct _NSCalendarBridge NSCalendar; struct _NSURLBridge NSURL; }; diff --git a/Sources/Foundation/Calendar.swift b/Sources/Foundation/Calendar.swift deleted file mode 100644 index 73fcf3196f..0000000000 --- a/Sources/Foundation/Calendar.swift +++ /dev/null @@ -1,1202 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_implementationOnly import _CoreFoundation - -internal func __NSCalendarIsAutoupdating(_ calendar: NSCalendar) -> Bool { - return false -} - -internal func __NSCalendarCurrent() -> NSCalendar { - return _NSCopyOnWriteCalendar(backingCalendar: CFCalendarCopyCurrent()._nsObject) -} - -internal func __NSCalendarInit(_ identifier: String) -> NSCalendar? { - return NSCalendar(identifier: NSCalendar.Identifier(rawValue: identifier)) -} - -/** - `Calendar` encapsulates information about systems of reckoning time in which the beginning, length, and divisions of a year are defined. It provides information about the calendar and support for calendrical computations such as determining the range of a given calendrical unit and adding units to a given absolute time. - */ -public struct Calendar : Hashable, Equatable, ReferenceConvertible, _MutableBoxing { - public typealias ReferenceType = NSCalendar - - private var _autoupdating: Bool - internal var _handle: _MutableHandle - - // Temporary until we replace this struct - public typealias Identifier = FoundationEssentials.Calendar.Identifier - - /// An enumeration for the various components of a calendar date. - /// - /// Several `Calendar` APIs use either a single unit or a set of units as input to a search algorithm. - /// - /// - seealso: `DateComponents` - public enum Component { - case era - case year - case month - case day - case hour - case minute - case second - case weekday - case weekdayOrdinal - case quarter - case weekOfMonth - case weekOfYear - case yearForWeekOfYear - case nanosecond - case calendar - case timeZone - } - - /// Returns the user's current calendar. - /// - /// This calendar does not track changes that the user makes to their preferences. - public static var current: Calendar { - return Calendar(adoptingReference: __NSCalendarCurrent(), autoupdating: false) - } - - /// A Calendar that tracks changes to user's preferred calendar. - /// - /// If mutated, this calendar will no longer track the user's preferred calendar. - /// - /// - note: The autoupdating Calendar will only compare equal to another autoupdating Calendar. - public static var autoupdatingCurrent: Calendar { - // swift-corelibs-foundation does not yet support autoupdating, but we can return the current calendar (which will not change). - return Calendar(adoptingReference: __NSCalendarCurrent(), autoupdating: true) - } - - - // MARK: - - // MARK: init - - /// Returns a new Calendar. - /// - /// - parameter identifier: The kind of calendar to use. - public init(identifier: Identifier) { - let result = __NSCalendarInit(Calendar._toNSCalendarIdentifier(identifier).rawValue)! - _handle = _MutableHandle(adoptingReference: result) - _autoupdating = false - } - - // MARK: - - // MARK: Bridging - - internal init(reference: NSCalendar) { - _handle = _MutableHandle(reference: reference) - if __NSCalendarIsAutoupdating(reference) { - _autoupdating = true - } else { - _autoupdating = false - } - } - - private init(adoptingReference reference: NSCalendar, autoupdating: Bool) { - _handle = _MutableHandle(adoptingReference: reference) - _autoupdating = autoupdating - } - - // MARK: - - // - - /// The identifier of the calendar. - public var identifier: Identifier { - return Calendar._fromNSCalendarIdentifier(_handle.map({ $0.calendarIdentifier })) - } - - /// The locale of the calendar. - public var locale: Locale? { - get { - return _handle.map { $0.locale } - } - set { - _applyMutation { $0.locale = newValue } - } - } - - /// The time zone of the calendar. - public var timeZone: TimeZone { - get { - return _handle.map { $0.timeZone } - } - set { - _applyMutation { $0.timeZone = newValue } - } - } - - /// The first weekday of the calendar. - public var firstWeekday: Int { - get { - return _handle.map { $0.firstWeekday } - } - set { - _applyMutation { $0.firstWeekday = newValue } - } - } - - /// The number of minimum days in the first week. - public var minimumDaysInFirstWeek: Int { - get { - return _handle.map { $0.minimumDaysInFirstWeek } - } - set { - _applyMutation { $0.minimumDaysInFirstWeek = newValue } - } - } - - /// A list of eras in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["BC", "AD"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var eraSymbols: [String] { - return _handle.map { $0.eraSymbols } - } - - /// A list of longer-named eras in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Before Christ", "Anno Domini"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var longEraSymbols: [String] { - return _handle.map { $0.longEraSymbols } - } - - /// A list of months in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var monthSymbols: [String] { - return _handle.map { $0.monthSymbols } - } - - /// A list of shorter-named months in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var shortMonthSymbols: [String] { - return _handle.map { $0.shortMonthSymbols } - } - - /// A list of very-shortly-named months in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var veryShortMonthSymbols: [String] { - return _handle.map { $0.veryShortMonthSymbols } - } - - /// A list of standalone months in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var standaloneMonthSymbols: [String] { - return _handle.map { $0.standaloneMonthSymbols } - } - - /// A list of shorter-named standalone months in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var shortStandaloneMonthSymbols: [String] { - return _handle.map { $0.shortStandaloneMonthSymbols } - } - - /// A list of very-shortly-named standalone months in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var veryShortStandaloneMonthSymbols: [String] { - return _handle.map { $0.veryShortStandaloneMonthSymbols } - } - - /// A list of weekdays in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var weekdaySymbols: [String] { - return _handle.map { $0.weekdaySymbols } - } - - /// A list of shorter-named weekdays in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var shortWeekdaySymbols: [String] { - return _handle.map { $0.shortWeekdaySymbols } - } - - /// A list of very-shortly-named weekdays in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["S", "M", "T", "W", "T", "F", "S"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var veryShortWeekdaySymbols: [String] { - return _handle.map { $0.veryShortWeekdaySymbols } - } - - /// A list of standalone weekday names in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var standaloneWeekdaySymbols: [String] { - return _handle.map { $0.standaloneWeekdaySymbols } - } - - /// A list of shorter-named standalone weekdays in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var shortStandaloneWeekdaySymbols: [String] { - return _handle.map { $0.shortStandaloneWeekdaySymbols } - } - - /// A list of very-shortly-named weekdays in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["S", "M", "T", "W", "T", "F", "S"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var veryShortStandaloneWeekdaySymbols: [String] { - return _handle.map { $0.veryShortStandaloneWeekdaySymbols } - } - - /// A list of quarter names in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var quarterSymbols: [String] { - return _handle.map { $0.quarterSymbols } - } - - /// A list of shorter-named quarters in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Q1", "Q2", "Q3", "Q4"]`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var shortQuarterSymbols: [String] { - return _handle.map { $0.shortQuarterSymbols } - } - - /// A list of standalone quarter names in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var standaloneQuarterSymbols: [String] { - return _handle.map { $0.standaloneQuarterSymbols } - } - - /// A list of shorter-named standalone quarters in this calendar, localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `["Q1", "Q2", "Q3", "Q4"]`. - /// - note: Stand-alone properties are for use in places like calendar headers. Non-stand-alone properties are for use in context (for example, "Saturday, November 12th"). - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var shortStandaloneQuarterSymbols: [String] { - return _handle.map { $0.shortStandaloneQuarterSymbols } - } - - /// The symbol used to represent "AM", localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `"AM"`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var amSymbol: String { - return _handle.map { $0.amSymbol } - } - - /// The symbol used to represent "PM", localized to the Calendar's `locale`. - /// - /// For example, for English in the Gregorian calendar, returns `"PM"`. - /// - /// - note: By default, Calendars have no locale set. If you wish to receive a localized answer, be sure to set the `locale` property first - most likely to `Locale.autoupdatingCurrent`. - public var pmSymbol: String { - return _handle.map { $0.pmSymbol } - } - - // MARK: - - // - - /// Returns the minimum range limits of the values that a given component can take on in the receiver. - /// - /// As an example, in the Gregorian calendar the minimum range of values for the Day component is 1-28. - /// - parameter component: A component to calculate a range for. - /// - returns: The range, or nil if it could not be calculated. - public func minimumRange(of component: Component) -> Range? { - return _handle.map { Range($0.minimumRange(of: Calendar._toCalendarUnit([component]))) } - } - - /// The maximum range limits of the values that a given component can take on in the receive - /// - /// As an example, in the Gregorian calendar the maximum range of values for the Day component is 1-31. - /// - parameter component: A component to calculate a range for. - /// - returns: The range, or nil if it could not be calculated. - public func maximumRange(of component: Component) -> Range? { - return _handle.map { Range($0.maximumRange(of: Calendar._toCalendarUnit([component]))) } - } - - - @available(*, unavailable, message: "use range(of:in:for:) instead") - public func range(of smaller: NSCalendar.Unit, in larger: NSCalendar.Unit, for date: Date) -> NSRange { - fatalError() - } - - /// Returns the range of absolute time values that a smaller calendar component (such as a day) can take on in a larger calendar component (such as a month) that includes a specified absolute time. - /// - /// You can use this method to calculate, for example, the range the `day` component can take on in the `month` in which `date` lies. - /// - parameter smaller: The smaller calendar component. - /// - parameter larger: The larger calendar component. - /// - parameter date: The absolute time for which the calculation is performed. - /// - returns: The range of absolute time values smaller can take on in larger at the time specified by date. Returns `nil` if larger is not logically bigger than smaller in the calendar, or the given combination of components does not make sense (or is a computation which is undefined). - public func range(of smaller: Component, in larger: Component, for date: Date) -> Range? { - return _handle.map { Range($0.range(of: Calendar._toCalendarUnit([smaller]), in: Calendar._toCalendarUnit([larger]), for: date)) } - } - - /// Returns, via two inout parameters, the starting time and duration of a given calendar component that contains a given date. - /// - /// - seealso: `range(of:for:)` - /// - seealso: `dateInterval(of:for:)` - /// - parameter component: A calendar component. - /// - parameter start: Upon return, the starting time of the calendar component that contains the date. - /// - parameter interval: Upon return, the duration of the calendar component that contains the date. - /// - parameter date: The specified date. - /// - returns: `true` if the starting time and duration of a component could be calculated, otherwise `false`. - public func dateInterval(of component: Component, start: inout Date, interval: inout TimeInterval, for date: Date) -> Bool { - if let result = _handle.map({ $0.range(of: Calendar._toCalendarUnit([component]), for: date)}) { - start = result.start - interval = result.duration - return true - } else { - return false - } - } - - /// Returns the starting time and duration of a given calendar component that contains a given date. - /// - /// - parameter component: A calendar component. - /// - parameter date: The specified date. - /// - returns: A new `DateInterval` if the starting time and duration of a component could be calculated, otherwise `nil`. - public func dateInterval(of component: Component, for date: Date) -> DateInterval? { - var start: Date = Date(timeIntervalSinceReferenceDate: 0) - var interval: TimeInterval = 0 - if self.dateInterval(of: component, start: &start, interval: &interval, for: date) { - return DateInterval(start: start, duration: interval) - } else { - return nil - } - } - - /// Returns, for a given absolute time, the ordinal number of a smaller calendar component (such as a day) within a specified larger calendar component (such as a week). - /// - /// The ordinality is in most cases not the same as the decomposed value of the component. Typically return values are 1 and greater. For example, the time 00:45 is in the first hour of the day, and for components `hour` and `day` respectively, the result would be 1. An exception is the week-in-month calculation, which returns 0 for days before the first week in the month containing the date. - /// - /// - note: Some computations can take a relatively long time. - /// - parameter smaller: The smaller calendar component. - /// - parameter larger: The larger calendar component. - /// - parameter date: The absolute time for which the calculation is performed. - /// - returns: The ordinal number of smaller within larger at the time specified by date. Returns `nil` if larger is not logically bigger than smaller in the calendar, or the given combination of components does not make sense (or is a computation which is undefined). - public func ordinality(of smaller: Component, in larger: Component, for date: Date) -> Int? { - let result = _handle.map { $0.ordinality(of: Calendar._toCalendarUnit([smaller]), in: Calendar._toCalendarUnit([larger]), for: date) } - if result == NSNotFound { return nil } - return result - } - - // MARK: - - // - - @available(*, unavailable, message: "use dateComponents(_:from:) instead") - public func getEra(_ eraValuePointer: UnsafeMutablePointer?, year yearValuePointer: UnsafeMutablePointer?, month monthValuePointer: UnsafeMutablePointer?, day dayValuePointer: UnsafeMutablePointer?, from date: Date) { fatalError() } - - @available(*, unavailable, message: "use dateComponents(_:from:) instead") - public func getEra(_ eraValuePointer: UnsafeMutablePointer?, yearForWeekOfYear yearValuePointer: UnsafeMutablePointer?, weekOfYear weekValuePointer: UnsafeMutablePointer?, weekday weekdayValuePointer: UnsafeMutablePointer?, from date: Date) { fatalError() } - - @available(*, unavailable, message: "use dateComponents(_:from:) instead") - public func getHour(_ hourValuePointer: UnsafeMutablePointer?, minute minuteValuePointer: UnsafeMutablePointer?, second secondValuePointer: UnsafeMutablePointer?, nanosecond nanosecondValuePointer: UnsafeMutablePointer?, from date: Date) { fatalError() } - - // MARK: - - // - - - @available(*, unavailable, message: "use date(byAdding:to:wrappingComponents:) instead") - public func date(byAdding unit: NSCalendar.Unit, value: Int, to date: Date, options: NSCalendar.Options = []) -> Date? { fatalError() } - - /// Returns a new `Date` representing the date calculated by adding components to a given date. - /// - /// - parameter components: A set of values to add to the date. - /// - parameter date: The starting date. - /// - parameter wrappingComponents: If `true`, the component should be incremented and wrap around to zero/one on overflow, and should not cause higher components to be incremented. The default value is `false`. - /// - returns: A new date, or nil if a date could not be calculated with the given input. - public func date(byAdding components: DateComponents, to date: Date, wrappingComponents: Bool = false) -> Date? { - return _handle.map { $0.date(byAdding: components, to: date, options: wrappingComponents ? [.wrapComponents] : []) } - } - - - @available(*, unavailable, message: "use date(byAdding:to:wrappingComponents:) instead") - public func date(byAdding comps: DateComponents, to date: Date, options opts: NSCalendar.Options = []) -> Date? { fatalError() } - - /// Returns a new `Date` representing the date calculated by adding an amount of a specific component to a given date. - /// - /// - parameter component: A single component to add. - /// - parameter value: The value of the specified component to add. - /// - parameter date: The starting date. - /// - parameter wrappingComponents: If `true`, the component should be incremented and wrap around to zero/one on overflow, and should not cause higher components to be incremented. The default value is `false`. - /// - returns: A new date, or nil if a date could not be calculated with the given input. - public func date(byAdding component: Component, value: Int, to date: Date, wrappingComponents: Bool = false) -> Date? { - return _handle.map { $0.date(byAdding: Calendar._toCalendarUnit([component]), value: value, to: date, options: wrappingComponents ? [.wrapComponents] : []) } - } - - /// Returns a date created from the specified components. - /// - /// - parameter components: Used as input to the search algorithm for finding a corresponding date. - /// - returns: A new `Date`, or nil if a date could not be found which matches the components. - public func date(from components: DateComponents) -> Date? { - return _handle.map { $0.date(from: components) } - } - - @available(*, unavailable, renamed: "dateComponents(_:from:)") - public func components(_ unitFlags: NSCalendar.Unit, from date: Date) -> DateComponents { fatalError() } - - /// Returns all the date components of a date, using the calendar time zone. - /// - /// - note: If you want "date information in a given time zone" in order to display it, you should use `DateFormatter` to format the date. - /// - parameter date: The `Date` to use. - /// - returns: The date components of the specified date. - public func dateComponents(_ components: Set, from date: Date) -> DateComponents { - return _handle.map { $0.components(Calendar._toCalendarUnit(components), from: date) } - } - - - @available(*, unavailable, renamed: "dateComponents(in:from:)") - public func components(in timezone: TimeZone, from date: Date) -> DateComponents { fatalError() } - - /// Returns all the date components of a date, as if in a given time zone (instead of the `Calendar` time zone). - /// - /// The time zone overrides the time zone of the `Calendar` for the purposes of this calculation. - /// - note: If you want "date information in a given time zone" in order to display it, you should use `DateFormatter` to format the date. - /// - parameter timeZone: The `TimeZone` to use. - /// - parameter date: The `Date` to use. - /// - returns: All components, calculated using the `Calendar` and `TimeZone`. - public func dateComponents(in timeZone: TimeZone, from date: Date) -> DateComponents { - return _handle.map { $0.components(in: timeZone, from: date) } - } - - @available(*, unavailable, renamed: "dateComponents(_:from:to:)") - public func components(_ unitFlags: NSCalendar.Unit, from startingDate: Date, to resultDate: Date, options opts: NSCalendar.Options = []) -> DateComponents { fatalError() } - - /// Returns the difference between two dates. - /// - /// - parameter components: Which components to compare. - /// - parameter start: The starting date. - /// - parameter end: The ending date. - /// - returns: The result of calculating the difference from start to end. - public func dateComponents(_ components: Set, from start: Date, to end: Date) -> DateComponents { - return _handle.map { $0.components(Calendar._toCalendarUnit(components), from: start, to: end, options: []) } - } - - @available(*, unavailable, renamed: "dateComponents(_:from:to:)") - public func components(_ unitFlags: NSCalendar.Unit, from startingDateComp: DateComponents, to resultDateComp: DateComponents, options: NSCalendar.Options = []) -> DateComponents { fatalError() } - - /// Returns the difference between two dates specified as `DateComponents`. - /// - /// For components which are not specified in each `DateComponents`, but required to specify an absolute date, the base value of the component is assumed. For example, for an `DateComponents` with just a `year` and a `month` specified, a `day` of 1, and an `hour`, `minute`, `second`, and `nanosecond` of 0 are assumed. - /// Calendrical calculations with unspecified `year` or `year` value prior to the start of a calendar are not advised. - /// For each `DateComponents`, if its `timeZone` property is set, that time zone is used for it. If the `calendar` property is set, that is used rather than the receiving calendar, and if both the `calendar` and `timeZone` are set, the `timeZone` property value overrides the time zone of the `calendar` property. - /// - /// - parameter components: Which components to compare. - /// - parameter start: The starting date components. - /// - parameter end: The ending date components. - /// - returns: The result of calculating the difference from start to end. - public func dateComponents(_ components: Set, from start: DateComponents, to end: DateComponents) -> DateComponents { - return _handle.map { $0.components(Calendar._toCalendarUnit(components), from: start, to: end, options: []) } - } - - - /// Returns the value for one component of a date. - /// - /// - parameter component: The component to calculate. - /// - parameter date: The date to use. - /// - returns: The value for the component. - public func component(_ component: Component, from date: Date) -> Int { - return _handle.map { $0.component(Calendar._toCalendarUnit([component]), from: date) } - } - - - @available(*, unavailable, message: "Use date(from:) instead") - public func date(era: Int, year: Int, month: Int, day: Int, hour: Int, minute: Int, second: Int, nanosecond: Int) -> Date? { fatalError() } - - - @available(*, unavailable, message: "Use date(from:) instead") - public func date(era: Int, yearForWeekOfYear: Int, weekOfYear: Int, weekday: Int, hour: Int, minute: Int, second: Int, nanosecond: Int) -> Date? { fatalError() } - - - /// Returns the first moment of a given Date, as a Date. - /// - /// For example, pass in `Date()`, if you want the start of today. - /// If there were two midnights, it returns the first. If there was none, it returns the first moment that did exist. - /// - parameter date: The date to search. - /// - returns: The first moment of the given date. - public func startOfDay(for date: Date) -> Date { - return _handle.map { $0.startOfDay(for: date) } - } - - - @available(*, unavailable, renamed: "compare(_:to:toGranularity:)") - public func compare(_ date1: Date, to date2: Date, toUnitGranularity unit: NSCalendar.Unit) -> ComparisonResult { fatalError() } - - - /// Compares the given dates down to the given component, reporting them `orderedSame` if they are the same in the given component and all larger components, otherwise either `orderedAscending` or `orderedDescending`. - /// - /// - parameter date1: A date to compare. - /// - parameter date2: A date to compare. - /// - parameter component: A granularity to compare. For example, pass `.hour` to check if two dates are in the same hour. - public func compare(_ date1: Date, to date2: Date, toGranularity component: Component) -> ComparisonResult { - return _handle.map { $0.compare(date1, to: date2, toUnitGranularity: Calendar._toCalendarUnit([component])) } - } - - - @available(*, unavailable, renamed: "isDate(_:equalTo:toGranularity:)") - public func isDate(_ date1: Date, equalTo date2: Date, toUnitGranularity unit: NSCalendar.Unit) -> Bool { fatalError() } - - /// Compares the given dates down to the given component, reporting them equal if they are the same in the given component and all larger components. - /// - /// - parameter date1: A date to compare. - /// - parameter date2: A date to compare. - /// - parameter component: A granularity to compare. For example, pass `.hour` to check if two dates are in the same hour. - /// - returns: `true` if the given date is within tomorrow. - public func isDate(_ date1: Date, equalTo date2: Date, toGranularity component: Component) -> Bool { - return _handle.map { $0.isDate(date1, equalTo: date2, toUnitGranularity: Calendar._toCalendarUnit([component])) } - } - - - /// Returns `true` if the given date is within the same day as another date, as defined by the calendar and calendar's locale. - /// - /// - parameter date1: A date to check for containment. - /// - parameter date2: A date to check for containment. - /// - returns: `true` if `date1` and `date2` are in the same day. - public func isDate(_ date1: Date, inSameDayAs date2: Date) -> Bool { - return _handle.map { $0.isDate(date1, inSameDayAs: date2) } - } - - - /// Returns `true` if the given date is within today, as defined by the calendar and calendar's locale. - /// - /// - parameter date: The specified date. - /// - returns: `true` if the given date is within today. - public func isDateInToday(_ date: Date) -> Bool { - return _handle.map { $0.isDateInToday(date) } - } - - - /// Returns `true` if the given date is within yesterday, as defined by the calendar and calendar's locale. - /// - /// - parameter date: The specified date. - /// - returns: `true` if the given date is within yesterday. - public func isDateInYesterday(_ date: Date) -> Bool { - return _handle.map { $0.isDateInYesterday(date) } - } - - - /// Returns `true` if the given date is within tomorrow, as defined by the calendar and calendar's locale. - /// - /// - parameter date: The specified date. - /// - returns: `true` if the given date is within tomorrow. - public func isDateInTomorrow(_ date: Date) -> Bool { - return _handle.map { $0.isDateInTomorrow(date) } - } - - - /// Returns `true` if the given date is within a weekend period, as defined by the calendar and calendar's locale. - /// - /// - parameter date: The specified date. - /// - returns: `true` if the given date is within a weekend. - public func isDateInWeekend(_ date: Date) -> Bool { - return _handle.map { $0.isDateInWeekend(date) } - } - - - /// Find the range of the weekend around the given date, returned via two by-reference parameters. - /// - /// Note that a given entire day within a calendar is not necessarily all in a weekend or not; weekends can start in the middle of a day in some calendars and locales. - /// - seealso: `dateIntervalOfWeekend(containing:)` - /// - parameter date: The date at which to start the search. - /// - parameter start: When the result is `true`, set - /// - returns: `true` if a date range could be found, and `false` if the date is not in a weekend. - public func dateIntervalOfWeekend(containing date: Date, start: inout Date, interval: inout TimeInterval) -> Bool { - if let result = _handle.map({ $0.range(ofWeekendContaining: date) }) { - start = result.start - interval = result.duration - return true - } else { - return false - } - } - - /// Returns a `DateInterval` of the weekend contained by the given date, or nil if the date is not in a weekend. - /// - /// - parameter date: The date contained in the weekend. - /// - returns: A `DateInterval`, or nil if the date is not in a weekend. - public func dateIntervalOfWeekend(containing date: Date) -> DateInterval? { - return _handle.map({ $0.range(ofWeekendContaining: date) }) - } - - /// Returns the range of the next weekend via two inout parameters. The weekend starts strictly after the given date. - /// - /// If `direction` is `.backward`, then finds the previous weekend range strictly before the given date. - /// - /// Note that a given entire Day within a calendar is not necessarily all in a weekend or not; weekends can start in the middle of a day in some calendars and locales. - /// - parameter date: The date at which to begin the search. - /// - parameter direction: Which direction in time to search. The default value is `.forward`. - /// - returns: A `DateInterval`, or nil if the weekend could not be found. - public func nextWeekend(startingAfter date: Date, start: inout Date, interval: inout TimeInterval, direction: SearchDirection = .forward) -> Bool { - // The implementation actually overrides previousKeepSmaller and nextKeepSmaller with matchNext, always - but strict still trumps all. - if let result = _handle.map({ $0.nextWeekendAfter(date, options: direction == .backward ? [.searchBackwards] : []) }) { - start = result.start - interval = result.duration - return true - } else { - return false - } - } - - /// Returns a `DateInterval` of the next weekend, which starts strictly after the given date. - /// - /// If `direction` is `.backward`, then finds the previous weekend range strictly before the given date. - /// - /// Note that a given entire Day within a calendar is not necessarily all in a weekend or not; weekends can start in the middle of a day in some calendars and locales. - /// - parameter date: The date at which to begin the search. - /// - parameter direction: Which direction in time to search. The default value is `.forward`. - /// - returns: A `DateInterval`, or nil if weekends do not exist in the specific calendar or locale. - public func nextWeekend(startingAfter date: Date, direction: SearchDirection = .forward) -> DateInterval? { - // The implementation actually overrides previousKeepSmaller and nextKeepSmaller with matchNext, always - but strict still trumps all. - return _handle.map({ $0.nextWeekendAfter(date, options: direction == .backward ? [.searchBackwards] : []) }) - } - - // MARK: - - // MARK: Searching - - /// The direction in time to search. - public enum SearchDirection { - /// Search for a date later in time than the start date. - case forward - - /// Search for a date earlier in time than the start date. - case backward - } - - /// Determines which result to use when a time is repeated on a day in a calendar (for example, during a daylight saving transition when the times between 2:00am and 3:00am may happen twice). - public enum RepeatedTimePolicy { - /// If there are two or more matching times (all the components are the same, including isLeapMonth) before the end of the next instance of the next higher component to the highest specified component, then the algorithm will return the first occurrence. - case first - - /// If there are two or more matching times (all the components are the same, including isLeapMonth) before the end of the next instance of the next higher component to the highest specified component, then the algorithm will return the last occurrence. - case last - } - - /// A hint to the search algorithm to control the method used for searching for dates. - public enum MatchingPolicy { - /// If there is no matching time before the end of the next instance of the next higher component to the highest specified component in the `DateComponents` argument, the algorithm will return the next existing time which exists. - /// - /// For example, during a daylight saving transition there may be no 2:37am. The result would then be 3:00am, if that does exist. - case nextTime - - /// If specified, and there is no matching time before the end of the next instance of the next higher component to the highest specified component in the `DateComponents` argument, the method will return the next existing value of the missing component and preserves the lower components' values (e.g., no 2:37am results in 3:37am, if that exists). - case nextTimePreservingSmallerComponents - - /// If there is no matching time before the end of the next instance of the next higher component to the highest specified component in the `DateComponents` argument, the algorithm will return the previous existing value of the missing component and preserves the lower components' values. - /// - /// For example, during a daylight saving transition there may be no 2:37am. The result would then be 1:37am, if that does exist. - case previousTimePreservingSmallerComponents - - /// If specified, the algorithm travels as far forward or backward as necessary looking for a match. - /// - /// For example, if searching for Feb 29 in the Gregorian calendar, the algorithm may choose March 1 instead (for example, if the year is not a leap year). If you wish to find the next Feb 29 without the algorithm adjusting the next higher component in the specified `DateComponents`, then use the `strict` option. - /// - note: There are ultimately implementation-defined limits in how far distant the search will go. - case strict - } - - @available(*, unavailable, message: "use nextWeekend(startingAfter:matching:matchingPolicy:repeatedTimePolicy:direction:using:) instead") - public func enumerateDates(startingAfter start: Date, matching comps: DateComponents, options opts: NSCalendar.Options = [], using block: (Date?, Bool, UnsafeMutablePointer) -> Swift.Void) { - fatalError() - } - - /// Computes the dates which match (or most closely match) a given set of components, and calls the closure once for each of them, until the enumeration is stopped. - /// - /// There will be at least one intervening date which does not match all the components (or the given date itself must not match) between the given date and any result. - /// - /// If `direction` is set to `.backward`, this method finds the previous match before the given date. The intent is that the same matches as for a `.forward` search will be found (that is, if you are enumerating forwards or backwards for each hour with minute "27", the seconds in the date you will get in forwards search would obviously be 00, and the same will be true in a backwards search in order to implement this rule. Similarly for DST backwards jumps which repeats times, you'll get the first match by default, where "first" is defined from the point of view of searching forwards. So, when searching backwards looking for a particular hour, with no minute and second specified, you don't get a minute and second of 59:59 for the matching hour (which would be the nominal first match within a given hour, given the other rules here, when searching backwards). - /// - /// If an exact match is not possible, and requested with the `strict` option, nil is passed to the closure and the enumeration ends. (Logically, since an exact match searches indefinitely into the future, if no match is found there's no point in continuing the enumeration.) - /// - /// Result dates have an integer number of seconds (as if 0 was specified for the nanoseconds property of the `DateComponents` matching parameter), unless a value was set in the nanoseconds property, in which case the result date will have that number of nanoseconds (or as close as possible with floating point numbers). - /// - /// The enumeration is stopped by setting `stop` to `true` in the closure and returning. It is not necessary to set `stop` to `false` to keep the enumeration going. - /// - parameter start: The `Date` at which to start the search. - /// - parameter components: The `DateComponents` to use as input to the search algorithm. - /// - parameter matchingPolicy: Determines the behavior of the search algorithm when the input produces an ambiguous result. - /// - parameter repeatedTimePolicy: Determines the behavior of the search algorithm when the input produces a time that occurs twice on a particular day. - /// - parameter direction: Which direction in time to search. The default value is `.forward`, which means later in time. - /// - parameter block: A closure that is called with search results. - public func enumerateDates(startingAfter start: Date, matching components: DateComponents, matchingPolicy: MatchingPolicy, repeatedTimePolicy: RepeatedTimePolicy = .first, direction: SearchDirection = .forward, using block: (_ result: Date?, _ exactMatch: Bool, _ stop: inout Bool) -> Void) { - _handle.map { - $0.enumerateDates(startingAfter: start, matching: components, options: Calendar._toCalendarOptions(matchingPolicy: matchingPolicy, repeatedTimePolicy: repeatedTimePolicy, direction: direction)) { (result, exactMatch, stop) in - var stopv = false - block(result, exactMatch, &stopv) - if stopv { - stop.pointee = true - } - } - } - } - - - @available(*, unavailable, message: "use nextDate(after:matching:matchingPolicy:repeatedTimePolicy:direction:) instead") - public func nextDate(after date: Date, matching comps: DateComponents, options: NSCalendar.Options = []) -> Date? { fatalError() } - - /// Computes the next date which matches (or most closely matches) a given set of components. - /// - /// The general semantics follow those of the `enumerateDates` function. - /// To compute a sequence of results, use the `enumerateDates` function, rather than looping and calling this method with the previous loop iteration's result. - /// - parameter date: The starting date. - /// - parameter components: The components to search for. - /// - parameter matchingPolicy: Specifies the technique the search algorithm uses to find results. Default value is `.nextTime`. - /// - parameter repeatedTimePolicy: Specifies the behavior when multiple matches are found. Default value is `.first`. - /// - parameter direction: Specifies the direction in time to search. Default is `.forward`. - /// - returns: A `Date` representing the result of the search, or `nil` if a result could not be found. - public func nextDate(after date: Date, matching components: DateComponents, matchingPolicy: MatchingPolicy, repeatedTimePolicy: RepeatedTimePolicy = .first, direction: SearchDirection = .forward) -> Date? { - return _handle.map { $0.nextDate(after: date, matching: components, options: Calendar._toCalendarOptions(matchingPolicy: matchingPolicy, repeatedTimePolicy: repeatedTimePolicy, direction: direction)) } - } - - @available(*, unavailable, message: "use nextDate(after:matching:matchingPolicy:repeatedTimePolicy:direction:) instead") - public func nextDate(after date: Date, matchingHour hourValue: Int, minute minuteValue: Int, second secondValue: Int, options: NSCalendar.Options = []) -> Date? { fatalError() } - - // MARK: - - // - - @available(*, unavailable, renamed: "date(bySetting:value:of:)") - public func date(bySettingUnit unit: NSCalendar.Unit, value v: Int, of date: Date, options opts: NSCalendar.Options = []) -> Date? { fatalError() } - - /// Returns a new `Date` representing the date calculated by setting a specific component to a given time, and trying to keep lower components the same. If the component already has that value, this may result in a date which is the same as the given date. - /// - /// Changing a component's value often will require higher or coupled components to change as well. For example, setting the Weekday to Thursday usually will require the Day component to change its value, and possibly the Month and Year as well. - /// If no such time exists, the next available time is returned (which could, for example, be in a different day, week, month, ... than the nominal target date). Setting a component to something which would be inconsistent forces other components to change; for example, setting the Weekday to Thursday probably shifts the Day and possibly Month and Year. - /// The exact behavior of this method is implementation-defined. For example, if changing the weekday to Thursday, does that move forward to the next, backward to the previous, or to the nearest Thursday? The algorithm will try to produce a result which is in the next-larger component to the one given (there's a table of this mapping at the top of this document). So for the "set to Thursday" example, find the Thursday in the Week in which the given date resides (which could be a forwards or backwards move, and not necessarily the nearest Thursday). For more control over the exact behavior, use `nextDate(after:matching:matchingPolicy:behavior:direction:)`. - public func date(bySetting component: Component, value: Int, of date: Date) -> Date? { - return _handle.map { $0.date(bySettingUnit: Calendar._toCalendarUnit([component]), value: value, of: date, options: []) } - } - - - @available(*, unavailable, message: "use date(bySettingHour:minute:second:of:matchingPolicy:repeatedTimePolicy:direction:) instead") - public func date(bySettingHour h: Int, minute m: Int, second s: Int, of date: Date, options opts: NSCalendar.Options = []) -> Date? { fatalError() } - - /// Returns a new `Date` representing the date calculated by setting hour, minute, and second to a given time on a specified `Date`. - /// - /// If no such time exists, the next available time is returned (which could, for example, be in a different day than the nominal target date). - /// The intent is to return a date on the same day as the original date argument. This may result in a date which is backward than the given date, of course. - /// - parameter hour: A specified hour. - /// - parameter minute: A specified minute. - /// - parameter second: A specified second. - /// - parameter date: The date to start calculation with. - /// - parameter matchingPolicy: Specifies the technique the search algorithm uses to find results. Default value is `.nextTime`. - /// - parameter repeatedTimePolicy: Specifies the behavior when multiple matches are found. Default value is `.first`. - /// - parameter direction: Specifies the direction in time to search. Default is `.forward`. - /// - returns: A `Date` representing the result of the search, or `nil` if a result could not be found. - public func date(bySettingHour hour: Int, minute: Int, second: Int, of date: Date, matchingPolicy: MatchingPolicy = .nextTime, repeatedTimePolicy: RepeatedTimePolicy = .first, direction: SearchDirection = .forward) -> Date? { - return _handle.map { $0.date(bySettingHour: hour, minute: minute, second: second, of: date, options: Calendar._toCalendarOptions(matchingPolicy: matchingPolicy, repeatedTimePolicy: repeatedTimePolicy, direction: direction)) } - } - - /// Determine if the `Date` has all of the specified `DateComponents`. - /// - /// It may be useful to test the return value of `nextDate(after:matching:matchingPolicy:behavior:direction:)` to find out if the components were obeyed or if the method had to fudge the result value due to missing time (for example, a daylight saving time transition). - /// - /// - returns: `true` if the date matches all of the components, otherwise `false`. - public func date(_ date: Date, matchesComponents components: DateComponents) -> Bool { - return _handle.map { $0.date(date, matchesComponents: components) } - } - - // MARK: - - - public func hash(into hasher: inout Hasher) { - // We implement hash ourselves, because we need to make sure autoupdating calendars have the same hash - if _autoupdating { - hasher.combine(false) - } else { - hasher.combine(true) - hasher.combine(_handle.map { $0 }) - } - } - - public static func ==(lhs: Calendar, rhs: Calendar) -> Bool { - if lhs._autoupdating || rhs._autoupdating { - return lhs._autoupdating == rhs._autoupdating - } else { - // NSCalendar's isEqual is broken (27019864) so we must implement this ourselves - return lhs.identifier == rhs.identifier && - lhs.locale == rhs.locale && - lhs.timeZone == rhs.timeZone && - lhs.firstWeekday == rhs.firstWeekday && - lhs.minimumDaysInFirstWeek == rhs.minimumDaysInFirstWeek - } - } - - // MARK: - - // MARK: Conversion Functions - - /// Turn our more-specific options into the big bucket option set of NSCalendar - internal static func _toCalendarOptions(matchingPolicy: MatchingPolicy, repeatedTimePolicy: RepeatedTimePolicy, direction: SearchDirection) -> NSCalendar.Options { - var result: NSCalendar.Options = [] - - switch matchingPolicy { - case .nextTime: - result.insert(.matchNextTime) - case .nextTimePreservingSmallerComponents: - result.insert(.matchNextTimePreservingSmallerUnits) - case .previousTimePreservingSmallerComponents: - result.insert(.matchPreviousTimePreservingSmallerUnits) - case .strict: - result.insert(.matchStrictly) - } - - switch repeatedTimePolicy { - case .first: - result.insert(.matchFirst) - case .last: - result.insert(.matchLast) - } - - switch direction { - case .backward: - result.insert(.searchBackwards) - case .forward: - break - } - - return result - } - - internal static func _toCalendarUnit(_ units: Set) -> NSCalendar.Unit { - let unitMap: [Component : NSCalendar.Unit] = - [.era: .era, - .year: .year, - .month: .month, - .day: .day, - .hour: .hour, - .minute: .minute, - .second: .second, - .weekday: .weekday, - .weekdayOrdinal: .weekdayOrdinal, - .quarter: .quarter, - .weekOfMonth: .weekOfMonth, - .weekOfYear: .weekOfYear, - .yearForWeekOfYear: .yearForWeekOfYear, - .nanosecond: .nanosecond, - .calendar: .calendar, - .timeZone: .timeZone] - - var result = NSCalendar.Unit() - for u in units { - result.insert(unitMap[u]!) - } - return result - } - - internal static func _fromCalendarUnit(_ unit: NSCalendar.Unit) -> Component { - switch unit { - case .era: - return .era - case .year: - return .year - case .month: - return .month - case .day: - return .day - case .hour: - return .hour - case .minute: - return .minute - case .second: - return .second - case .weekday: - return .weekday - case .weekdayOrdinal: - return .weekdayOrdinal - case .quarter: - return .quarter - case .weekOfMonth: - return .weekOfMonth - case .weekOfYear: - return .weekOfYear - case .yearForWeekOfYear: - return .yearForWeekOfYear - case .nanosecond: - return .nanosecond - case .calendar: - return .calendar - case .timeZone: - return .timeZone - default: - fatalError() - } - } - - internal static func _fromCalendarUnits(_ units: NSCalendar.Unit) -> Set { - var result = Set() - if units.contains(.era) { - result.insert(.era) - } - - if units.contains(.year) { - result.insert(.year) - } - - if units.contains(.month) { - result.insert(.month) - } - - if units.contains(.day) { - result.insert(.day) - } - - if units.contains(.hour) { - result.insert(.hour) - } - - if units.contains(.minute) { - result.insert(.minute) - } - - if units.contains(.second) { - result.insert(.second) - } - - if units.contains(.weekday) { - result.insert(.weekday) - } - - if units.contains(.weekdayOrdinal) { - result.insert(.weekdayOrdinal) - } - - if units.contains(.quarter) { - result.insert(.quarter) - } - - if units.contains(.weekOfMonth) { - result.insert(.weekOfMonth) - } - - if units.contains(.weekOfYear) { - result.insert(.weekOfYear) - } - - if units.contains(.yearForWeekOfYear) { - result.insert(.yearForWeekOfYear) - } - - if units.contains(.nanosecond) { - result.insert(.nanosecond) - } - - if units.contains(.calendar) { - result.insert(.calendar) - } - - if units.contains(.timeZone) { - result.insert(.timeZone) - } - - return result - } - - internal static func _toNSCalendarIdentifier(_ identifier: Identifier) -> NSCalendar.Identifier { - if #available(macOS 10.10, iOS 8.0, *) { - let identifierMap: [Identifier : NSCalendar.Identifier] = - [.gregorian: .gregorian, - .buddhist: .buddhist, - .chinese: .chinese, - .coptic: .coptic, - .ethiopicAmeteMihret: .ethiopicAmeteMihret, - .ethiopicAmeteAlem: .ethiopicAmeteAlem, - .hebrew: .hebrew, - .iso8601: .ISO8601, - .indian: .indian, - .islamic: .islamic, - .islamicCivil: .islamicCivil, - .japanese: .japanese, - .persian: .persian, - .republicOfChina: .republicOfChina, - .islamicTabular: .islamicTabular, - .islamicUmmAlQura: .islamicUmmAlQura] - return identifierMap[identifier]! - } else { - let identifierMap: [Identifier : NSCalendar.Identifier] = - [.gregorian: .gregorian, - .buddhist: .buddhist, - .chinese: .chinese, - .coptic: .coptic, - .ethiopicAmeteMihret: .ethiopicAmeteMihret, - .ethiopicAmeteAlem: .ethiopicAmeteAlem, - .hebrew: .hebrew, - .iso8601: .ISO8601, - .indian: .indian, - .islamic: .islamic, - .islamicCivil: .islamicCivil, - .japanese: .japanese, - .persian: .persian, - .republicOfChina: .republicOfChina] - return identifierMap[identifier]! - } - } - - internal static func _fromNSCalendarIdentifier(_ identifier: NSCalendar.Identifier) -> Identifier { - if #available(macOS 10.10, iOS 8.0, *) { - let identifierMap: [NSCalendar.Identifier : Identifier] = - [.gregorian: .gregorian, - .buddhist: .buddhist, - .chinese: .chinese, - .coptic: .coptic, - .ethiopicAmeteMihret: .ethiopicAmeteMihret, - .ethiopicAmeteAlem: .ethiopicAmeteAlem, - .hebrew: .hebrew, - .ISO8601: .iso8601, - .indian: .indian, - .islamic: .islamic, - .islamicCivil: .islamicCivil, - .japanese: .japanese, - .persian: .persian, - .republicOfChina: .republicOfChina, - .islamicTabular: .islamicTabular, - .islamicUmmAlQura: .islamicUmmAlQura] - return identifierMap[identifier]! - } else { - let identifierMap: [NSCalendar.Identifier : Identifier] = - [.gregorian: .gregorian, - .buddhist: .buddhist, - .chinese: .chinese, - .coptic: .coptic, - .ethiopicAmeteMihret: .ethiopicAmeteMihret, - .ethiopicAmeteAlem: .ethiopicAmeteAlem, - .hebrew: .hebrew, - .ISO8601: .iso8601, - .indian: .indian, - .islamic: .islamic, - .islamicCivil: .islamicCivil, - .japanese: .japanese, - .persian: .persian, - .republicOfChina: .republicOfChina] - return identifierMap[identifier]! - } - } -} - -extension Calendar : CustomDebugStringConvertible, CustomStringConvertible, CustomReflectable { - private var _kindDescription : String { - if self == .autoupdatingCurrent { - return "autoupdatingCurrent" - } else if self == .current { - return "current" - } else { - return "fixed" - } - } - - public var description: String { - return "\(identifier) (\(_kindDescription))" - } - - public var debugDescription: String { - return "\(identifier) (\(_kindDescription))" - } - - public var customMirror: Mirror { - let children: [(label: String?, value: Any)] = [ - (label: "identifier", value: identifier), - (label: "kind", value: _kindDescription), - (label: "locale", value: locale as Any), - (label: "timeZone", value: timeZone), - (label: "firstWeekday", value: firstWeekday), - (label: "minimumDaysInFirstWeek", value: minimumDaysInFirstWeek) - ] - return Mirror(self, children: children, displayStyle: .struct) - } -} - -extension Calendar: _ObjectiveCBridgeable { - public typealias _ObjectType = NSCalendar - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSCalendar { - return _handle._copiedReference() - } - - public static func _forceBridgeFromObjectiveC(_ input: NSCalendar, result: inout Calendar?) { - if !_conditionallyBridgeFromObjectiveC(input, result: &result) { - fatalError("Unable to bridge \(NSCalendar.self) to \(self)") - } - } - - @discardableResult - public static func _conditionallyBridgeFromObjectiveC(_ input: NSCalendar, result: inout Calendar?) -> Bool { - result = Calendar(reference: input) - return true - } - - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSCalendar?) -> Calendar { - var result: Calendar? = nil - _forceBridgeFromObjectiveC(source!, result: &result) - return result! - } -} - -extension Calendar : Codable { - private enum CodingKeys : Int, CodingKey { - case identifier - case locale - case timeZone - case firstWeekday - case minimumDaysInFirstWeek - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let identifierString = try container.decode(String.self, forKey: .identifier) - let identifier = Calendar._fromNSCalendarIdentifier(NSCalendar.Identifier(rawValue: identifierString)) - self.init(identifier: identifier) - - self.locale = try container.decodeIfPresent(Locale.self, forKey: .locale) - self.timeZone = try container.decode(TimeZone.self, forKey: .timeZone) - self.firstWeekday = try container.decode(Int.self, forKey: .firstWeekday) - self.minimumDaysInFirstWeek = try container.decode(Int.self, forKey: .minimumDaysInFirstWeek) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - - let identifier = Calendar._toNSCalendarIdentifier(self.identifier).rawValue - try container.encode(identifier, forKey: .identifier) - try container.encode(self.locale, forKey: .locale) - try container.encode(self.timeZone, forKey: .timeZone) - try container.encode(self.firstWeekday, forKey: .firstWeekday) - try container.encode(self.minimumDaysInFirstWeek, forKey: .minimumDaysInFirstWeek) - } -} diff --git a/Sources/Foundation/DateComponents.swift b/Sources/Foundation/DateComponents.swift index 114b6c6e90..6c5258b6bd 100644 --- a/Sources/Foundation/DateComponents.swift +++ b/Sources/Foundation/DateComponents.swift @@ -12,341 +12,11 @@ @_implementationOnly import _CoreFoundation -/** - `DateComponents` encapsulates the components of a date in an extendable, structured manner. - - It is used to specify a date by providing the temporal components that make up a date and time in a particular calendar: hour, minutes, seconds, day, month, year, and so on. It can also be used to specify a duration of time, for example, 5 hours and 16 minutes. A `DateComponents` is not required to define all the component fields. - - When a new instance of `DateComponents` is created, the date components are set to `nil`. - */ -public struct DateComponents : ReferenceConvertible, Hashable, Equatable, Sendable, _MutableBoxing { +extension DateComponents : ReferenceConvertible { public typealias ReferenceType = NSDateComponents - internal var _handle: _MutableHandle - - /// Initialize a `DateComponents`, optionally specifying values for its fields. - public init(calendar: Calendar? = nil, - timeZone: TimeZone? = nil, - era: Int? = nil, - year: Int? = nil, - month: Int? = nil, - day: Int? = nil, - hour: Int? = nil, - minute: Int? = nil, - second: Int? = nil, - nanosecond: Int? = nil, - weekday: Int? = nil, - weekdayOrdinal: Int? = nil, - quarter: Int? = nil, - weekOfMonth: Int? = nil, - weekOfYear: Int? = nil, - yearForWeekOfYear: Int? = nil) { - _handle = _MutableHandle(adoptingReference: NSDateComponents()) - if let _calendar = calendar { self.calendar = _calendar } - if let _timeZone = timeZone { self.timeZone = _timeZone } - if let _era = era { self.era = _era } - if let _year = year { self.year = _year } - if let _month = month { self.month = _month } - if let _day = day { self.day = _day } - if let _hour = hour { self.hour = _hour } - if let _minute = minute { self.minute = _minute } - if let _second = second { self.second = _second } - if let _nanosecond = nanosecond { self.nanosecond = _nanosecond } - if let _weekday = weekday { self.weekday = _weekday } - if let _weekdayOrdinal = weekdayOrdinal { self.weekdayOrdinal = _weekdayOrdinal } - if let _quarter = quarter { self.quarter = _quarter } - if let _weekOfMonth = weekOfMonth { self.weekOfMonth = _weekOfMonth } - if let _weekOfYear = weekOfYear { self.weekOfYear = _weekOfYear } - if let _yearForWeekOfYear = yearForWeekOfYear { self.yearForWeekOfYear = _yearForWeekOfYear } - } - - - // MARK: - Properties - - /// Translate from the NSDateComponentUndefined value into a proper Swift optional - private func _getter(_ x : Int) -> Int? { return x == NSDateComponentUndefined ? nil : x } - - /// Translate from the proper Swift optional value into an NSDateComponentUndefined - private func _setter(_ x : Int?) -> Int { if let xx = x { return xx } else { return NSDateComponentUndefined } } - - /// The `Calendar` used to interpret the other values in this structure. - /// - /// - note: API which uses `DateComponents` may have different behavior if this value is `nil`. For example, assuming the current calendar or ignoring certain values. - public var calendar: Calendar? { - get { return _handle.map { $0.calendar } } - set { _applyMutation { $0.calendar = newValue } } - } - - /// A time zone. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var timeZone: TimeZone? { - get { return _handle.map { $0.timeZone } } - set { _applyMutation { $0.timeZone = newValue } } - } - - /// An era or count of eras. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var era: Int? { - get { return _handle.map { _getter($0.era) } } - set { - let value = _setter(newValue) - _applyMutation { $0.era = value } - } - } - - /// A year or count of years. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var year: Int? { - get { return _handle.map { _getter($0.year) } } - set { - let value = _setter(newValue) - _applyMutation { $0.year = value } - } - } - - /// A month or count of months. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var month: Int? { - get { return _handle.map { _getter($0.month) } } - set { - let value = _setter(newValue) - _applyMutation { $0.month = value } - } - } - - /// A day or count of days. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var day: Int? { - get { return _handle.map { _getter($0.day) } } - set { - let value = _setter(newValue) - _applyMutation { $0.day = value } - } - } - - /// An hour or count of hours. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var hour: Int? { - get { return _handle.map { _getter($0.hour) } } - set { - let value = _setter(newValue) - _applyMutation { $0.hour = value } - } - } - - /// A minute or count of minutes. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var minute: Int? { - get { return _handle.map { _getter($0.minute) } } - set { - let value = _setter(newValue) - _applyMutation { $0.minute = value } - } - } - - /// A second or count of seconds. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var second: Int? { - get { return _handle.map { _getter($0.second) } } - set { - let value = _setter(newValue) - _applyMutation { $0.second = value } - } - } - - /// A nanosecond or count of nanoseconds. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var nanosecond: Int? { - get { return _handle.map { _getter($0.nanosecond) } } - set { - let value = _setter(newValue) - _applyMutation { $0.nanosecond = value } - } - } - - /// A weekday or count of weekdays. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var weekday: Int? { - get { return _handle.map { _getter($0.weekday) } } - set { - let value = _setter(newValue) - _applyMutation { $0.weekday = value } - } - } - - /// A weekday ordinal or count of weekday ordinals. - /// Weekday ordinal units represent the position of the weekday within the next larger calendar unit, such as the month. For example, 2 is the weekday ordinal unit for the second Friday of the month./// - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var weekdayOrdinal: Int? { - get { return _handle.map { _getter($0.weekdayOrdinal) } } - set { - let value = _setter(newValue) - _applyMutation { $0.weekdayOrdinal = value } - } - } - - /// A quarter or count of quarters. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var quarter: Int? { - get { return _handle.map { _getter($0.quarter) } } - set { - let value = _setter(newValue) - _applyMutation { $0.quarter = value } - } - } - - /// A week of the month or a count of weeks of the month. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var weekOfMonth: Int? { - get { return _handle.map { _getter($0.weekOfMonth) } } - set { - let value = _setter(newValue) - _applyMutation { $0.weekOfMonth = value } - } - } - - /// A week of the year or count of the weeks of the year. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var weekOfYear: Int? { - get { return _handle.map { _getter($0.weekOfYear) } } - set { - let value = _setter(newValue) - _applyMutation { $0.weekOfYear = value } - } - } - - /// The ISO 8601 week-numbering year of the receiver. - /// - /// The Gregorian calendar defines a week to have 7 days, and a year to have 365 days, or 366 in a leap year. However, neither 365 or 366 divide evenly into a 7 day week, so it is often the case that the last week of a year ends on a day in the next year, and the first week of a year begins in the preceding year. To reconcile this, ISO 8601 defines a week-numbering year, consisting of either 52 or 53 full weeks (364 or 371 days), such that the first week of a year is designated to be the week containing the first Thursday of the year. - /// - /// You can use the yearForWeekOfYear property with the weekOfYear and weekday properties to get the date corresponding to a particular weekday of a given week of a year. For example, the 6th day of the 53rd week of the year 2005 (ISO 2005-W53-6) corresponds to Sat 1 January 2005 on the Gregorian calendar. - /// - note: This value is interpreted in the context of the calendar in which it is used. - public var yearForWeekOfYear: Int? { - get { return _handle.map { _getter($0.yearForWeekOfYear) } } - set { - let value = _setter(newValue) - _applyMutation { $0.yearForWeekOfYear = value } - } - } - - /// Set to true if these components represent a leap month. - public var isLeapMonth: Bool? { - get { return _handle.map { $0.leapMonthSet ? $0.isLeapMonth : nil } } - set { - _applyMutation { - // Technically, the underlying class does not support setting isLeapMonth to nil, but it could - so we leave the API consistent. - if let b = newValue { - $0.isLeapMonth = b - } else { - $0.isLeapMonth = false - } - } - } - } - - /// Returns a `Date` calculated from the current components using the `calendar` property. - public var date: Date? { - if let d = _handle.map({$0.date}) { - return d as Date - } else { - return nil - } - } - - // MARK: - Generic Setter/Getters - - /// Set the value of one of the properties, using an enumeration value instead of a property name. - /// - /// The calendar and timeZone and isLeapMonth properties cannot be set by this method. - public mutating func setValue(_ value: Int?, for component: Calendar.Component) { - let _value = _setter(value) - _applyMutation { - $0.setValue(_value, forComponent: Calendar._toCalendarUnit([component])) - } - } - - /// Returns the value of one of the properties, using an enumeration value instead of a property name. - /// - /// The calendar and timeZone and isLeapMonth property values cannot be retrieved by this method. - public func value(for component: Calendar.Component) -> Int? { - return _handle.map { - $0.value(forComponent: Calendar._toCalendarUnit([component])) - } - } - - // MARK: - - - /// Returns true if the combination of properties which have been set in the receiver is a date which exists in the `calendar` property. - /// - /// This method is not appropriate for use on `DateComponents` values which are specifying relative quantities of calendar components. - /// - /// Except for some trivial cases (e.g., 'seconds' should be 0 - 59 in any calendar), this method is not necessarily cheap. - /// - /// If the time zone property is set in the `DateComponents`, it is used. - /// - /// The calendar property must be set, or the result is always `false`. - public var isValidDate: Bool { - return _handle.map { $0.isValidDate } - } - - /// Returns true if the combination of properties which have been set in the receiver is a date which exists in the specified `Calendar`. - /// - /// This method is not appropriate for use on `DateComponents` values which are specifying relative quantities of calendar components. - /// - /// Except for some trivial cases (e.g., 'seconds' should be 0 - 59 in any calendar), this method is not necessarily cheap. - /// - /// If the time zone property is set in the `DateComponents`, it is used. - public func isValidDate(in calendar: Calendar) -> Bool { - return _handle.map { $0.isValidDate(in: calendar) } - } - - // MARK: - - - public func hash(into hasher: inout Hasher) { - hasher.combine(_handle.map { $0 }) - } - - public static func ==(lhs: DateComponents, rhs: DateComponents) -> Bool { - // Don't copy references here; no one should be storing anything - return lhs._handle._uncopiedReference().isEqual(rhs._handle._uncopiedReference()) - } - - // MARK: - Bridging Helpers - internal init(reference: NSDateComponents) { - _handle = _MutableHandle(reference: reference) - } -} - -extension DateComponents : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - public var description: String { - return _handle.map { $0.description } - } - - public var debugDescription: String { - return _handle.map { $0.debugDescription } - } - - public var customMirror: Mirror { - var c: [(label: String?, value: Any)] = [] - if let r = calendar { c.append((label: "calendar", value: r)) } - if let r = timeZone { c.append((label: "timeZone", value: r)) } - if let r = era { c.append((label: "era", value: r)) } - if let r = year { c.append((label: "year", value: r)) } - if let r = month { c.append((label: "month", value: r)) } - if let r = day { c.append((label: "day", value: r)) } - if let r = hour { c.append((label: "hour", value: r)) } - if let r = minute { c.append((label: "minute", value: r)) } - if let r = second { c.append((label: "second", value: r)) } - if let r = nanosecond { c.append((label: "nanosecond", value: r)) } - if let r = weekday { c.append((label: "weekday", value: r)) } - if let r = weekdayOrdinal { c.append((label: "weekdayOrdinal", value: r)) } - if let r = quarter { c.append((label: "quarter", value: r)) } - if let r = weekOfMonth { c.append((label: "weekOfMonth", value: r)) } - if let r = weekOfYear { c.append((label: "weekOfYear", value: r)) } - if let r = yearForWeekOfYear { c.append((label: "yearForWeekOfYear", value: r)) } - if let r = isLeapMonth { c.append((label: "isLeapMonth", value: r)) } - return Mirror(self, children: c, displayStyle: .struct) + self = reference._components } } @@ -363,7 +33,7 @@ extension DateComponents : _ObjectiveCBridgeable { @_semantics("convertToObjectiveC") public func _bridgeToObjectiveC() -> NSDateComponents { - return _handle._copiedReference() + NSDateComponents(components: self) } public static func _forceBridgeFromObjectiveC(_ dateComponents: NSDateComponents, result: inout DateComponents?) { @@ -384,86 +54,6 @@ extension DateComponents : _ObjectiveCBridgeable { } } -extension DateComponents : Codable { - private enum CodingKeys : Int, CodingKey { - case calendar - case timeZone - case era - case year - case month - case day - case hour - case minute - case second - case nanosecond - case weekday - case weekdayOrdinal - case quarter - case weekOfMonth - case weekOfYear - case yearForWeekOfYear - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let calendar = try container.decodeIfPresent(Calendar.self, forKey: .calendar) - let timeZone = try container.decodeIfPresent(TimeZone.self, forKey: .timeZone) - let era = try container.decodeIfPresent(Int.self, forKey: .era) - let year = try container.decodeIfPresent(Int.self, forKey: .year) - let month = try container.decodeIfPresent(Int.self, forKey: .month) - let day = try container.decodeIfPresent(Int.self, forKey: .day) - let hour = try container.decodeIfPresent(Int.self, forKey: .hour) - let minute = try container.decodeIfPresent(Int.self, forKey: .minute) - let second = try container.decodeIfPresent(Int.self, forKey: .second) - let nanosecond = try container.decodeIfPresent(Int.self, forKey: .nanosecond) - - let weekday = try container.decodeIfPresent(Int.self, forKey: .weekday) - let weekdayOrdinal = try container.decodeIfPresent(Int.self, forKey: .weekdayOrdinal) - let quarter = try container.decodeIfPresent(Int.self, forKey: .quarter) - let weekOfMonth = try container.decodeIfPresent(Int.self, forKey: .weekOfMonth) - let weekOfYear = try container.decodeIfPresent(Int.self, forKey: .weekOfYear) - let yearForWeekOfYear = try container.decodeIfPresent(Int.self, forKey: .yearForWeekOfYear) - - self.init(calendar: calendar, - timeZone: timeZone, - era: era, - year: year, - month: month, - day: day, - hour: hour, - minute: minute, - second: second, - nanosecond: nanosecond, - weekday: weekday, - weekdayOrdinal: weekdayOrdinal, - quarter: quarter, - weekOfMonth: weekOfMonth, - weekOfYear: weekOfYear, - yearForWeekOfYear: yearForWeekOfYear) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(self.calendar, forKey: .calendar) - try container.encodeIfPresent(self.timeZone, forKey: .timeZone) - try container.encodeIfPresent(self.era, forKey: .era) - try container.encodeIfPresent(self.year, forKey: .year) - try container.encodeIfPresent(self.month, forKey: .month) - try container.encodeIfPresent(self.day, forKey: .day) - try container.encodeIfPresent(self.hour, forKey: .hour) - try container.encodeIfPresent(self.minute, forKey: .minute) - try container.encodeIfPresent(self.second, forKey: .second) - try container.encodeIfPresent(self.nanosecond, forKey: .nanosecond) - - try container.encodeIfPresent(self.weekday, forKey: .weekday) - try container.encodeIfPresent(self.weekdayOrdinal, forKey: .weekdayOrdinal) - try container.encodeIfPresent(self.quarter, forKey: .quarter) - try container.encodeIfPresent(self.weekOfMonth, forKey: .weekOfMonth) - try container.encodeIfPresent(self.weekOfYear, forKey: .weekOfYear) - try container.encodeIfPresent(self.yearForWeekOfYear, forKey: .yearForWeekOfYear) - } -} - extension DateComponents : _NSBridgeable { typealias NSType = NSDateComponents var _nsObject: NSType { return _bridgeToObjectiveC() } diff --git a/Sources/Foundation/DateFormatter.swift b/Sources/Foundation/DateFormatter.swift index 191f56bba5..a793896274 100644 --- a/Sources/Foundation/DateFormatter.swift +++ b/Sources/Foundation/DateFormatter.swift @@ -8,6 +8,7 @@ // @_implementationOnly import _CoreFoundation +@_spi(SwiftCorelibsFoundation) import FoundationEssentials open class DateFormatter : Formatter { typealias CFType = CFDateFormatter @@ -151,7 +152,7 @@ open class DateFormatter : Formatter { _setFormatterAttribute(formatter, attributeName: kCFDateFormatterIsLenient, value: isLenient._cfObject) _setFormatterAttribute(formatter, attributeName: kCFDateFormatterTimeZone, value: _timeZone?._cfObject) if let ident = _calendar?.identifier { - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterCalendarName, value: Calendar._toNSCalendarIdentifier(ident).rawValue._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterCalendarName, value: ident._cfCalendarIdentifier._cfObject) } else { _setFormatterAttribute(formatter, attributeName: kCFDateFormatterCalendarName, value: nil) } @@ -229,7 +230,10 @@ open class DateFormatter : Formatter { open var timeZone: TimeZone! { get { guard let tz = _timeZone else { - return (CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterTimeZone) as! NSTimeZone)._swiftObject + // The returned value is a CFTimeZone + let property = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterTimeZone) + let propertyTZ = unsafeBitCast(property, to: CFTimeZone.self) + return propertyTZ._swiftObject } return tz } @@ -242,7 +246,10 @@ open class DateFormatter : Formatter { open var calendar: Calendar! { get { guard let calendar = _calendar else { - return (CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterCalendar) as! NSCalendar)._swiftObject + // The returned value is a CFCalendar + let property = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterCalendar) + let propertyCalendar = unsafeBitCast(property, to: CFCalendar.self) + return propertyCalendar._swiftObject } return calendar } diff --git a/Sources/Foundation/NSCalendar.swift b/Sources/Foundation/NSCalendar.swift index 4529b9d7cc..066fb85552 100644 --- a/Sources/Foundation/NSCalendar.swift +++ b/Sources/Foundation/NSCalendar.swift @@ -8,6 +8,7 @@ // @_implementationOnly import _CoreFoundation +@_spi(SwiftCorelibsFoundation) @_exported import FoundationEssentials internal let kCFCalendarUnitEra = CFCalendarUnit.era internal let kCFCalendarUnitYear = CFCalendarUnit.year @@ -28,13 +29,8 @@ internal func _CFCalendarUnitRawValue(_ unit: CFCalendarUnit) -> CFOptionFlags { return unit.rawValue } -internal let kCFDateFormatterNoStyle = CFDateFormatterStyle.noStyle -internal let kCFDateFormatterShortStyle = CFDateFormatterStyle.shortStyle -internal let kCFDateFormatterMediumStyle = CFDateFormatterStyle.mediumStyle -internal let kCFDateFormatterLongStyle = CFDateFormatterStyle.longStyle -internal let kCFDateFormatterFullStyle = CFDateFormatterStyle.fullStyle - extension NSCalendar { + // This is not the same as Calendar.Identifier due to a spelling difference in ISO8601 public struct Identifier : RawRepresentable, Equatable, Hashable, Comparable { public private(set) var rawValue: String public init(_ rawValue: String) { @@ -44,6 +40,49 @@ extension NSCalendar { public init(rawValue: String) { self.rawValue = rawValue } + + init(_ id: Calendar.Identifier) { + switch id { + case .gregorian: self = .gregorian + case .buddhist: self = .buddhist + case .chinese: self = .chinese + case .coptic: self = .coptic + case .ethiopicAmeteMihret: self = .ethiopicAmeteMihret + case .ethiopicAmeteAlem: self = .ethiopicAmeteAlem + case .hebrew: self = .hebrew + case .iso8601: self = .ISO8601 + case .indian: self = .indian + case .islamic: self = .islamic + case .islamicCivil: self = .islamicCivil + case .japanese: self = .japanese + case .persian: self = .persian + case .republicOfChina: self = .republicOfChina + case .islamicTabular: self = .islamicTabular + case .islamicUmmAlQura: self = .islamicUmmAlQura + } + } + + init?(string: String) { + switch string { + case "gregorian": self = .gregorian + case "buddhist": self = .buddhist + case "chinese": self = .chinese + case "coptic": self = .coptic + case "ethiopic": self = .ethiopicAmeteMihret + case "ethiopic-amete-alem": self = .ethiopicAmeteAlem + case "hebrew": self = .hebrew + case "iso8601": self = .ISO8601 + case "indian": self = .indian + case "islamic": self = .islamic + case "islamic-civil": self = .islamicCivil + case "japanese": self = .japanese + case "persian": self = .persian + case "roc": self = .republicOfChina + case "islamic-tbla": self = .islamicTabular + case "islamic-umalqura": self = .islamicUmmAlQura + default: return nil + } + } public static let gregorian = NSCalendar.Identifier("gregorian") public static let buddhist = NSCalendar.Identifier("buddhist") @@ -61,7 +100,31 @@ extension NSCalendar { public static let republicOfChina = NSCalendar.Identifier("roc") public static let islamicTabular = NSCalendar.Identifier("islamic-tbla") public static let islamicUmmAlQura = NSCalendar.Identifier("islamic-umalqura") + + var _calendarIdentifier: Calendar.Identifier { + switch self { + case .gregorian: .gregorian + case .buddhist: .buddhist + case .chinese: .chinese + case .coptic: .coptic + case .ethiopicAmeteMihret: .ethiopicAmeteMihret + case .ethiopicAmeteAlem: .ethiopicAmeteAlem + case .hebrew: .hebrew + case .ISO8601: .iso8601 + case .indian: .indian + case .islamic: .islamic + case .islamicCivil: .islamicCivil + case .japanese: .japanese + case .persian: .persian + case .republicOfChina: .republicOfChina + case .islamicTabular: .islamicTabular + case .islamicUmmAlQura: .islamicUmmAlQura + default: + fatalError("Unknown Calendar identifier") + } + } } + public struct Unit: OptionSet { public let rawValue: UInt @@ -90,6 +153,61 @@ extension NSCalendar { internal var _cfValue: CFCalendarUnit { return CFCalendarUnit(rawValue: self.rawValue) } + + internal var _calendarComponent: Calendar.Component { + switch self { + case .era: + .era + case .year: + .year + case .month: + .month + case .day: + .day + case .hour: + .hour + case .minute: + .minute + case .second: + .second + case .weekday: + .weekday + case .weekdayOrdinal: + .weekdayOrdinal + case .quarter: + .quarter + case .weekOfMonth: + .weekOfMonth + case .weekOfYear: + .weekOfYear + case .yearForWeekOfYear: + .yearForWeekOfYear + default: + fatalError() + } + } + + internal var _calendarComponents: Set { + var result = Set() + if self.contains(.era) { result.insert(.era) } + if self.contains(.year) { result.insert(.year) } + if self.contains(.month) { result.insert(.month) } + if self.contains(.day) { result.insert(.day) } + if self.contains(.hour) { result.insert(.hour) } + if self.contains(.minute) { result.insert(.minute) } + if self.contains(.second) { result.insert(.second) } + if self.contains(.weekday) { result.insert(.weekday) } + if self.contains(.weekdayOrdinal) { result.insert(.weekdayOrdinal) } + if self.contains(.quarter) { result.insert(.quarter) } + if self.contains(.weekOfMonth) { result.insert(.weekOfMonth) } + if self.contains(.weekOfYear) { result.insert(.weekOfYear) } + if self.contains(.yearForWeekOfYear) { result.insert(.yearForWeekOfYear) } + if self.contains(.nanosecond) { result.insert(.nanosecond) } + if self.contains(.calendar) { result.insert(.calendar) } + if self.contains(.timeZone) { result.insert(.timeZone) } + return result + } + } public struct Options : OptionSet { @@ -114,21 +232,10 @@ extension NSCalendar.Identifier { } open class NSCalendar : NSObject, NSCopying, NSSecureCoding { - typealias CFType = CFCalendar - private var _base = _CFInfo(typeID: CFCalendarGetTypeID()) - private var _identifier: UnsafeMutableRawPointer? = nil - private var _locale: UnsafeMutableRawPointer? = nil - private var _tz: UnsafeMutableRawPointer? = nil - private var _firstWeekday: Int = 0 - private var _minDaysInFirstWeek: Int = 0 - private var _gregorianStart: UnsafeMutableRawPointer? = nil - private var _cal: UnsafeMutableRawPointer? = nil - private var _userSet_firstWeekday: Bool = false - private var _userSet_minDaysInFirstWeek: Bool = false - private var _userSet_gregorianStart: Bool = false - - internal var _cfObject: CFType { - return unsafeBitCast(self, to: CFCalendar.self) + var _calendar: Calendar + + internal init(calendar: Calendar) { + _calendar = calendar } public convenience required init?(coder aDecoder: NSCoder) { @@ -139,7 +246,10 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { return nil } - self.init(identifier: NSCalendar.Identifier.init(rawValue: calendarIdentifier._swiftObject)) + guard let id = Identifier(string: calendarIdentifier._swiftObject) else { + return nil + } + self.init(identifier: id) if aDecoder.containsValue(forKey: "NS.timezone") { if let timeZone = aDecoder.decodeObject(of: NSTimeZone.self, forKey: "NS.timezone") { @@ -202,25 +312,17 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { } public /*not inherited*/ init?(identifier calendarIdentifierConstant: Identifier) { + _calendar = Calendar(identifier: calendarIdentifierConstant._calendarIdentifier) super.init() - if !_CFCalendarInitWithIdentifier(_cfObject, calendarIdentifierConstant.rawValue._cfObject) { - return nil - } } public init?(calendarIdentifier ident: Identifier) { - super.init() - if !_CFCalendarInitWithIdentifier(_cfObject, ident.rawValue._cfObject) { - return nil - } - } - - internal override init() { + _calendar = Calendar(identifier: ident._calendarIdentifier) super.init() } open override var hash: Int { - return Int(bitPattern: CFHash(_cfObject)) + _calendar.hashValue } open override func isEqual(_ value: Any?) -> Bool { @@ -228,64 +330,51 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { return true } - if let calendar = __SwiftValue.fetch(value as AnyObject) as? NSCalendar { - return calendar.calendarIdentifier == calendarIdentifier && - calendar.timeZone == timeZone && - calendar.locale == locale && - calendar.firstWeekday == firstWeekday && - calendar.minimumDaysInFirstWeek == minimumDaysInFirstWeek && - calendar.gregorianStartDate == gregorianStartDate - } + guard let calendar = value as? NSCalendar else { return false } - return false + return _calendar == calendar._calendar } open override var description: String { - return CFCopyDescription(_cfObject)._swiftObject + _calendar.description } - deinit { - _CFDeinit(self) - } - open var calendarIdentifier: Identifier { - get { - return Identifier(rawValue: CFCalendarGetIdentifier(_cfObject)._swiftObject) - } + Identifier(_calendar.identifier) } - /*@NSCopying*/ open var locale: Locale? { + open var locale: Locale? { get { - return CFCalendarCopyLocale(_cfObject)._swiftObject + _calendar.locale } set { - CFCalendarSetLocale(_cfObject, newValue?._cfObject) + _calendar.locale = newValue } } - /*@NSCopying*/ open var timeZone: TimeZone { + open var timeZone: TimeZone { get { - return CFCalendarCopyTimeZone(_cfObject)._swiftObject + _calendar.timeZone } set { - CFCalendarSetTimeZone(_cfObject, newValue._cfObject) + _calendar.timeZone = newValue } } open var firstWeekday: Int { get { - return CFCalendarGetFirstWeekday(_cfObject) + _calendar.firstWeekday } set { - CFCalendarSetFirstWeekday(_cfObject, CFIndex(newValue)) + _calendar.firstWeekday = newValue } } open var minimumDaysInFirstWeek: Int { get { - return CFCalendarGetMinimumDaysInFirstWeek(_cfObject) + _calendar.minimumDaysInFirstWeek } set { - CFCalendarSetMinimumDaysInFirstWeek(_cfObject, CFIndex(newValue)) + _calendar.minimumDaysInFirstWeek = newValue } } @@ -299,131 +388,102 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { } } - // Methods to return component name strings localized to the calendar's locale - - private final func _symbols(_ key: CFString) -> [String] { - let dateFormatter = CFDateFormatterCreate(kCFAllocatorSystemDefault, locale?._cfObject, kCFDateFormatterNoStyle, kCFDateFormatterNoStyle) - CFDateFormatterSetProperty(dateFormatter, kCFDateFormatterCalendarKey, _cfObject) - let result = (CFDateFormatterCopyProperty(dateFormatter, key) as! NSArray)._swiftObject - return result.map { - return ($0 as! NSString)._swiftObject - } - } - - private final func _symbol(_ key: CFString) -> String { - let dateFormatter = CFDateFormatterCreate(kCFAllocatorSystemDefault, locale?._bridgeToObjectiveC()._cfObject, kCFDateFormatterNoStyle, kCFDateFormatterNoStyle) - CFDateFormatterSetProperty(dateFormatter, kCFDateFormatterCalendarKey, self._cfObject) - return (CFDateFormatterCopyProperty(dateFormatter, key) as! NSString)._swiftObject - } - open var eraSymbols: [String] { - return _symbols(kCFDateFormatterEraSymbolsKey) + return _calendar.eraSymbols } open var longEraSymbols: [String] { - return _symbols(kCFDateFormatterLongEraSymbolsKey) + _calendar.longEraSymbols } open var monthSymbols: [String] { - return _symbols(kCFDateFormatterMonthSymbolsKey) + _calendar.monthSymbols } open var shortMonthSymbols: [String] { - return _symbols(kCFDateFormatterShortMonthSymbolsKey) + _calendar.shortMonthSymbols } open var veryShortMonthSymbols: [String] { - return _symbols(kCFDateFormatterVeryShortMonthSymbolsKey) + _calendar.veryShortMonthSymbols } open var standaloneMonthSymbols: [String] { - return _symbols(kCFDateFormatterStandaloneMonthSymbolsKey) + _calendar.standaloneMonthSymbols } open var shortStandaloneMonthSymbols: [String] { - return _symbols(kCFDateFormatterShortStandaloneMonthSymbolsKey) + _calendar.shortStandaloneMonthSymbols } open var veryShortStandaloneMonthSymbols: [String] { - return _symbols(kCFDateFormatterVeryShortStandaloneMonthSymbolsKey) + _calendar.veryShortStandaloneMonthSymbols } open var weekdaySymbols: [String] { - return _symbols(kCFDateFormatterWeekdaySymbolsKey) + _calendar.weekdaySymbols } open var shortWeekdaySymbols: [String] { - return _symbols(kCFDateFormatterShortWeekdaySymbolsKey) + _calendar.shortWeekdaySymbols } open var veryShortWeekdaySymbols: [String] { - return _symbols(kCFDateFormatterVeryShortWeekdaySymbolsKey) + _calendar.veryShortWeekdaySymbols } open var standaloneWeekdaySymbols: [String] { - return _symbols(kCFDateFormatterStandaloneWeekdaySymbolsKey) + _calendar.standaloneWeekdaySymbols } open var shortStandaloneWeekdaySymbols: [String] { - return _symbols(kCFDateFormatterShortStandaloneWeekdaySymbolsKey) + _calendar.shortStandaloneWeekdaySymbols } open var veryShortStandaloneWeekdaySymbols: [String] { - return _symbols(kCFDateFormatterVeryShortStandaloneWeekdaySymbolsKey) + _calendar.veryShortStandaloneWeekdaySymbols } open var quarterSymbols: [String] { - return _symbols(kCFDateFormatterQuarterSymbolsKey) + _calendar.quarterSymbols } open var shortQuarterSymbols: [String] { - return _symbols(kCFDateFormatterShortQuarterSymbolsKey) + _calendar.shortQuarterSymbols } open var standaloneQuarterSymbols: [String] { - return _symbols(kCFDateFormatterStandaloneQuarterSymbolsKey) + _calendar.standaloneQuarterSymbols } open var shortStandaloneQuarterSymbols: [String] { - return _symbols(kCFDateFormatterShortStandaloneQuarterSymbolsKey) + _calendar.shortStandaloneQuarterSymbols } open var amSymbol: String { - return _symbol(kCFDateFormatterAMSymbolKey) + _calendar.amSymbol } open var pmSymbol: String { - return _symbol(kCFDateFormatterPMSymbolKey) + _calendar.pmSymbol } // Calendrical calculations open func minimumRange(of unit: Unit) -> NSRange { - let r = CFCalendarGetMinimumRangeOfUnit(self._cfObject, unit._cfValue) - if (r.location == kCFNotFound) { - return NSRange(location: NSNotFound, length: NSNotFound) - } - return NSRange(location: r.location, length: r.length) + _toNSRange(_calendar.minimumRange(of: unit._calendarComponent)) } open func maximumRange(of unit: Unit) -> NSRange { - let r = CFCalendarGetMaximumRangeOfUnit(_cfObject, unit._cfValue) - if r.location == kCFNotFound { - return NSRange(location: NSNotFound, length: NSNotFound) - } - return NSRange(location: r.location, length: r.length) + _toNSRange(_calendar.maximumRange(of: unit._calendarComponent)) } open func range(of smaller: Unit, in larger: Unit, for date: Date) -> NSRange { - let r = CFCalendarGetRangeOfUnit(_cfObject, smaller._cfValue, larger._cfValue, date.timeIntervalSinceReferenceDate) - if r.location == kCFNotFound { - return NSRange(location: NSNotFound, length: NSNotFound) - } - return NSRange(location: r.location, length: r.length) + _toNSRange(_calendar.range(of: smaller._calendarComponent, in: larger._calendarComponent, for: date)) } open func ordinality(of smaller: Unit, in larger: Unit, for date: Date) -> Int { - return Int(CFCalendarGetOrdinalityOfUnit(_cfObject, smaller._cfValue, larger._cfValue, date.timeIntervalSinceReferenceDate)) + _calendar.ordinality(of: smaller._calendarComponent, in: larger._calendarComponent, for: date) ?? NSNotFound } /// Revised API for avoiding usage of AutoreleasingUnsafeMutablePointer. @@ -433,223 +493,25 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { /// - Experiment: This is a draft API currently under consideration for official import into Foundation as a suitable alternative /// - Note: Since this API is under consideration it may be either removed or revised in the near future open func range(of unit: Unit, for date: Date) -> DateInterval? { - var start: CFAbsoluteTime = 0.0 - var ti: CFTimeInterval = 0.0 - let res: Bool = withUnsafeMutablePointer(to: &start) { startp in - withUnsafeMutablePointer(to: &ti) { tip in - return CFCalendarGetTimeRangeOfUnit(_cfObject, unit._cfValue, date.timeIntervalSinceReferenceDate, startp, tip) - } - } - - if res { - return DateInterval(start: Date(timeIntervalSinceReferenceDate: start), duration: ti) - } - return nil + _calendar.dateInterval(of: unit._calendarComponent, for: date) } - - private func _convert(_ comp: Int?, type: String, vector: inout [Int32], compDesc: inout [Int8]) { - if let component = comp { - vector.append(Int32(component)) - compDesc.append(Int8(type.utf8[type.utf8.startIndex])) - } - } - - private func _convert(_ comp: Bool?, type: String, vector: inout [Int32], compDesc: inout [Int8]) { - if let component = comp { - vector.append(Int32(component ? 0 : 1)) - compDesc.append(Int8(type.utf8[type.utf8.startIndex])) - } - } - - private func _convert(_ comps: DateComponents) -> (Array, Array) { - var vector = [Int32]() - var compDesc = [Int8]() - _convert(comps.era, type: "G", vector: &vector, compDesc: &compDesc) - _convert(comps.year, type: "y", vector: &vector, compDesc: &compDesc) - _convert(comps.quarter, type: "Q", vector: &vector, compDesc: &compDesc) - if comps.weekOfYear != NSDateComponentUndefined { - _convert(comps.weekOfYear, type: "w", vector: &vector, compDesc: &compDesc) - } else { - // _convert(comps.week, type: "^", vector: &vector, compDesc: &compDesc) - } - _convert(comps.month, type: "M", vector: &vector, compDesc: &compDesc) - _convert(comps.weekOfMonth, type: "W", vector: &vector, compDesc: &compDesc) - _convert(comps.yearForWeekOfYear, type: "Y", vector: &vector, compDesc: &compDesc) - _convert(comps.weekday, type: "E", vector: &vector, compDesc: &compDesc) - _convert(comps.weekdayOrdinal, type: "F", vector: &vector, compDesc: &compDesc) - _convert(comps.isLeapMonth, type: "l", vector: &vector, compDesc: &compDesc) - _convert(comps.day, type: "d", vector: &vector, compDesc: &compDesc) - _convert(comps.hour, type: "H", vector: &vector, compDesc: &compDesc) - _convert(comps.minute, type: "m", vector: &vector, compDesc: &compDesc) - _convert(comps.second, type: "s", vector: &vector, compDesc: &compDesc) - _convert(comps.nanosecond, type: "#", vector: &vector, compDesc: &compDesc) - compDesc.append(0) - return (vector, compDesc) - } - - open func date(from comps: DateComponents) -> Date? { - var (vector, compDesc) = _convert(comps) - - let oldTz = self.timeZone - self.timeZone = comps.timeZone ?? timeZone - var at: CFAbsoluteTime = 0.0 - let res: Bool = withUnsafeMutablePointer(to: &at) { t in - return vector.withUnsafeMutableBufferPointer { (vectorBuffer: inout UnsafeMutableBufferPointer) in - return _CFCalendarComposeAbsoluteTimeV(_cfObject, t, compDesc, vectorBuffer.baseAddress!, Int32(vectorBuffer.count)) - } - } - - self.timeZone = oldTz - if res { - return Date(timeIntervalSinceReferenceDate: at) - } else { - return nil - } - } - - private func _setup(_ unitFlags: Unit, field: Unit, type: String, compDesc: inout [Int8]) { - if unitFlags.contains(field) { - compDesc.append(Int8(type.utf8[type.utf8.startIndex])) - } - } - - private func _setup(_ unitFlags: Unit, addIsLeapMonth: Bool = true) -> [Int8] { - var compDesc = [Int8]() - _setup(unitFlags, field: .era, type: "G", compDesc: &compDesc) - _setup(unitFlags, field: .year, type: "y", compDesc: &compDesc) - _setup(unitFlags, field: .quarter, type: "Q", compDesc: &compDesc) - _setup(unitFlags, field: .weekOfYear, type: "w", compDesc: &compDesc) - _setup(unitFlags, field: .month, type: "M", compDesc: &compDesc) - if addIsLeapMonth { - _setup(unitFlags, field: .month, type: "l", compDesc: &compDesc) - } - _setup(unitFlags, field: .weekOfMonth, type: "W", compDesc: &compDesc) - _setup(unitFlags, field: .yearForWeekOfYear, type: "Y", compDesc: &compDesc) - _setup(unitFlags, field: .weekday, type: "E", compDesc: &compDesc) - _setup(unitFlags, field: .weekdayOrdinal, type: "F", compDesc: &compDesc) - _setup(unitFlags, field: .day, type: "d", compDesc: &compDesc) - _setup(unitFlags, field: .hour, type: "H", compDesc: &compDesc) - _setup(unitFlags, field: .minute, type: "m", compDesc: &compDesc) - _setup(unitFlags, field: .second, type: "s", compDesc: &compDesc) - _setup(unitFlags, field: .nanosecond, type: "#", compDesc: &compDesc) - compDesc.append(0) - return compDesc - } - - private func _setComp(_ unitFlags: Unit, field: Unit, vector: [Int32], compIndex: inout Int, setter: (Int32) -> Void) { - if unitFlags.contains(field) { - setter(vector[compIndex]) - compIndex += 1 - } - } - - private func _components(_ unitFlags: Unit, vector: [Int32], addIsLeapMonth: Bool = true) -> DateComponents { - var compIdx = 0 - var comps = DateComponents() - _setComp(unitFlags, field: .era, vector: vector, compIndex: &compIdx) { comps.era = Int($0) } - _setComp(unitFlags, field: .year, vector: vector, compIndex: &compIdx) { comps.year = Int($0) } - _setComp(unitFlags, field: .quarter, vector: vector, compIndex: &compIdx) { comps.quarter = Int($0) } - _setComp(unitFlags, field: .weekOfYear, vector: vector, compIndex: &compIdx) { comps.weekOfYear = Int($0) } - _setComp(unitFlags, field: .month, vector: vector, compIndex: &compIdx) { comps.month = Int($0) } - if addIsLeapMonth { - _setComp(unitFlags, field: .month, vector: vector, compIndex: &compIdx) { comps.isLeapMonth = $0 != 0 } - } - _setComp(unitFlags, field: .weekOfMonth, vector: vector, compIndex: &compIdx) { comps.weekOfMonth = Int($0) } - _setComp(unitFlags, field: .yearForWeekOfYear, vector: vector, compIndex: &compIdx) { comps.yearForWeekOfYear = Int($0) } - _setComp(unitFlags, field: .weekday, vector: vector, compIndex: &compIdx) { comps.weekday = Int($0) } - _setComp(unitFlags, field: .weekdayOrdinal, vector: vector, compIndex: &compIdx) { comps.weekdayOrdinal = Int($0) } - _setComp(unitFlags, field: .day, vector: vector, compIndex: &compIdx) { comps.day = Int($0) } - _setComp(unitFlags, field: .hour, vector: vector, compIndex: &compIdx) { comps.hour = Int($0) } - _setComp(unitFlags, field: .minute, vector: vector, compIndex: &compIdx) { comps.minute = Int($0) } - _setComp(unitFlags, field: .second, vector: vector, compIndex: &compIdx) { comps.second = Int($0) } - _setComp(unitFlags, field: .nanosecond, vector: vector, compIndex: &compIdx) { comps.nanosecond = Int($0) } - - if unitFlags.contains(.calendar) { - comps.calendar = self._swiftObject - } - if unitFlags.contains(.timeZone) { - comps.timeZone = timeZone - } - return comps + open func date(from comps: DateComponents) -> Date? { + _calendar.date(from: comps) } /// - Experiment: This is a draft API currently under consideration for official import into Foundation as a suitable alternative /// The Darwin version is not nullable but this one is since the conversion from the date and unit flags can potentially return nil open func components(_ unitFlags: Unit, from date: Date) -> DateComponents { - let compDesc = _setup(unitFlags) - - // _CFCalendarDecomposeAbsoluteTimeV requires a bit of a funky vector layout; which does not express well in swift; this is the closest I can come up with to the required format - // int32_t ints[20]; - // int32_t *vector[20] = {&ints[0], &ints[1], &ints[2], &ints[3], &ints[4], &ints[5], &ints[6], &ints[7], &ints[8], &ints[9], &ints[10], &ints[11], &ints[12], &ints[13], &ints[14], &ints[15], &ints[16], &ints[17], &ints[18], &ints[19]}; - var ints = [Int32](repeating: 0, count: 20) - let res = ints.withUnsafeMutableBufferPointer { (intArrayBuffer: inout UnsafeMutableBufferPointer) -> Bool in - var vector: [UnsafeMutablePointer] = (0..<20).map { idx in - intArrayBuffer.baseAddress!.advanced(by: idx) - } - - return vector.withUnsafeMutableBufferPointer { (vecBuffer: inout UnsafeMutableBufferPointer>) in - return _CFCalendarDecomposeAbsoluteTimeV(_cfObject, date.timeIntervalSinceReferenceDate, compDesc, vecBuffer.baseAddress!, Int32(compDesc.count - 1)) - } - } - if res { - return _components(unitFlags, vector: ints) - } - - fatalError() + _calendar.dateComponents(unitFlags._calendarComponents, from: date) } open func date(byAdding comps: DateComponents, to date: Date, options opts: Options = []) -> Date? { - var (vector, compDesc) = _convert(comps) - var at: CFAbsoluteTime = date.timeIntervalSinceReferenceDate - - let res: Bool = withUnsafeMutablePointer(to: &at) { t in - let count = Int32(vector.count) - return vector.withUnsafeMutableBufferPointer { (vectorBuffer: inout UnsafeMutableBufferPointer) in - return _CFCalendarAddComponentsV(_cfObject, t, CFOptionFlags(opts.rawValue), compDesc, vectorBuffer.baseAddress!, count) - } - } - - if res { - return Date(timeIntervalSinceReferenceDate: at) - } - - return nil + _calendar.date(byAdding: comps, to: date, wrappingComponents: opts.contains(.wrapComponents)) } open func components(_ unitFlags: Unit, from startingDate: Date, to resultDate: Date, options opts: Options = []) -> DateComponents { - let validUnitFlags: NSCalendar.Unit = [ - .era, .year, .month, .day, .hour, .minute, .second, .nanosecond, .weekOfYear, .weekOfMonth, .yearForWeekOfYear, .weekday, .weekdayOrdinal ] - - let invalidUnitFlags: NSCalendar.Unit = [ .quarter, .timeZone, .calendar] - - // Mask off the unsupported fields - let newUnitFlags = Unit(rawValue: unitFlags.rawValue & validUnitFlags.rawValue) - let compDesc = _setup(newUnitFlags, addIsLeapMonth: false) - var ints = [Int32](repeating: 0, count: 20) - let res = ints.withUnsafeMutableBufferPointer { (intArrayBuffer: inout UnsafeMutableBufferPointer) -> Bool in - var vector: [UnsafeMutablePointer] = (0..<20).map { idx in - return intArrayBuffer.baseAddress!.advanced(by: idx) - } - - let count = Int32(vector.count) - return vector.withUnsafeMutableBufferPointer { (vecBuffer: inout UnsafeMutableBufferPointer>) in - return _CFCalendarGetComponentDifferenceV(_cfObject, startingDate.timeIntervalSinceReferenceDate, resultDate.timeIntervalSinceReferenceDate, CFOptionFlags(opts.rawValue), compDesc, vecBuffer.baseAddress!, count) - } - } - if res { - let emptyUnitFlags = Unit(rawValue: unitFlags.rawValue & invalidUnitFlags.rawValue) - var components = _components(newUnitFlags, vector: ints, addIsLeapMonth: false) - - // quarter always gets set to zero if requested in the output - if emptyUnitFlags.contains(.quarter) { - components.quarter = 0 - } - // isLeapMonth is always set - components.isLeapMonth = false - return components - } - fatalError() + _calendar.dateComponents(unitFlags._calendarComponents, from: startingDate, to: resultDate) } /* @@ -696,7 +558,7 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { */ open func component(_ unit: Unit, from date: Date) -> Int { let comps = components(unit, from: date) - if let res = comps.value(for: Calendar._fromCalendarUnit(unit)) { + if let res = comps.value(for: unit._calendarComponent) { return res } else { return NSDateComponentUndefined @@ -743,7 +605,7 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { If there were two midnights, it returns the first. If there was none, it returns the first moment that did exist. */ open func startOfDay(for date: Date) -> Date { - return range(of: .day, for: date)!.start + _calendar.startOfDay(for: date) } /* @@ -754,175 +616,56 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { /// - Experiment: This is a draft API currently under consideration for official import into Foundation as a suitable alternative /// The Darwin version is not nullable but this one is since the conversion from the date and unit flags can potentially return nil open func components(in timezone: TimeZone, from date: Date) -> DateComponents { - let oldTz = self.timeZone - self.timeZone = timezone - let comps = components([.era, .year, .month, .day, .hour, .minute, .second, .nanosecond, .weekday, .weekdayOrdinal, .quarter, .weekOfMonth, .weekOfYear, .yearForWeekOfYear, .calendar, .timeZone], from: date) - self.timeZone = oldTz - return comps + _calendar.dateComponents(in: timezone, from: date) } /* This API compares the given dates down to the given unit, reporting them equal if they are the same in the given unit and all larger units, otherwise either less than or greater than. */ open func compare(_ date1: Date, to date2: Date, toUnitGranularity unit: Unit) -> ComparisonResult { - switch (unit) { - case .calendar: - return .orderedSame - case .timeZone: - return .orderedSame - case .day: fallthrough - case .hour: - let range = self.range(of: unit, for: date1) - let ats = range!.start.timeIntervalSinceReferenceDate - let at2 = date2.timeIntervalSinceReferenceDate - if ats <= at2 && at2 < ats + range!.duration { - return .orderedSame - } - if at2 < ats { - return .orderedDescending - } - return .orderedAscending - case .minute: - var int1 = 0.0 - var int2 = 0.0 - modf(date1.timeIntervalSinceReferenceDate, &int1) - modf(date2.timeIntervalSinceReferenceDate, &int2) - int1 = floor(int1 / 60.0) - int2 = floor(int2 / 60.0) - if int1 == int2 { - return .orderedSame - } - if int2 < int1 { - return .orderedDescending - } - return .orderedAscending - case .second: - var int1 = 0.0 - var int2 = 0.0 - modf(date1.timeIntervalSinceReferenceDate, &int1) - modf(date2.timeIntervalSinceReferenceDate, &int2) - if int1 == int2 { - return .orderedSame - } - if int2 < int1 { - return .orderedDescending - } - return .orderedAscending - case .nanosecond: - var int1 = 0.0 - var int2 = 0.0 - let frac1 = modf(date1.timeIntervalSinceReferenceDate, &int1) - let frac2 = modf(date2.timeIntervalSinceReferenceDate, &int2) - int1 = floor(frac1 * 1000000000.0) - int2 = floor(frac2 * 1000000000.0) - if int1 == int2 { - return .orderedSame - } - if int2 < int1 { - return .orderedDescending - } - return .orderedAscending - default: - break - } - - let calendarUnits1: [Unit] = [.era, .year, .month, .day] - let calendarUnits2: [Unit] = [.era, .year, .month, .weekdayOrdinal, .day] - let calendarUnits3: [Unit] = [.era, .year, .month, .weekOfMonth, .weekday] - let calendarUnits4: [Unit] = [.era, .yearForWeekOfYear, .weekOfYear, .weekday] - var units: [Unit] - if unit == .yearForWeekOfYear || unit == .weekOfYear { - units = calendarUnits4 - } else if unit == .weekdayOrdinal { - units = calendarUnits2 - } else if unit == .weekday || unit == .weekOfMonth { - units = calendarUnits3 - } else { - units = calendarUnits1 - } - - // TODO: verify that the return value here is never going to be nil; it seems like it may - thusly making the return value here optional which would result in sadness and regret - let reducedUnits = units.reduce(Unit()) { $0.union($1) } - let comp1 = components(reducedUnits, from: date1) - let comp2 = components(reducedUnits, from: date2) - - for testedUnit in units { - let value1 = comp1.value(for: Calendar._fromCalendarUnit(testedUnit)) - let value2 = comp2.value(for: Calendar._fromCalendarUnit(testedUnit)) - if value1! > value2! { - return .orderedDescending - } else if value1! < value2! { - return .orderedAscending - } - if testedUnit == .month && calendarIdentifier == .chinese { - if let leap1 = comp1.isLeapMonth { - if let leap2 = comp2.isLeapMonth { - if !leap1 && leap2 { - return .orderedAscending - } else if leap1 && !leap2 { - return .orderedDescending - } - } - } - - } - if testedUnit == unit { - return .orderedSame - } - } - return .orderedSame + _calendar.compare(date1, to: date2, toGranularity: unit._calendarComponent) } /* This API compares the given dates down to the given unit, reporting them equal if they are the same in the given unit and all larger units. */ open func isDate(_ date1: Date, equalTo date2: Date, toUnitGranularity unit: Unit) -> Bool { - return compare(date1, to: date2, toUnitGranularity: unit) == .orderedSame + _calendar.isDate(date1, equalTo: date2, toGranularity: unit._calendarComponent) } /* This API compares the Days of the given dates, reporting them equal if they are in the same Day. */ open func isDate(_ date1: Date, inSameDayAs date2: Date) -> Bool { - return compare(date1, to: date2, toUnitGranularity: .day) == .orderedSame + _calendar.isDate(date1, inSameDayAs: date2) } /* This API reports if the date is within "today". */ open func isDateInToday(_ date: Date) -> Bool { - return compare(date, to: Date(), toUnitGranularity: .day) == .orderedSame + _calendar.isDateInToday(date) } /* This API reports if the date is within "yesterday". */ open func isDateInYesterday(_ date: Date) -> Bool { - if let interval = range(of: .day, for: Date()) { - let inYesterday = interval.start - 60.0 - return compare(date, to: inYesterday, toUnitGranularity: .day) == .orderedSame - } else { - return false - } + _calendar.isDateInYesterday(date) } /* This API reports if the date is within "tomorrow". */ open func isDateInTomorrow(_ date: Date) -> Bool { - if let interval = range(of: .day, for: Date()) { - let inTomorrow = interval.end + 60.0 - return compare(date, to: inTomorrow, toUnitGranularity: .day) == .orderedSame - } else { - return false - } + _calendar.isDateInTomorrow(date) } /* This API reports if the date is within a weekend period, as defined by the calendar and calendar's locale. */ open func isDateInWeekend(_ date: Date) -> Bool { - return _CFCalendarIsDateInWeekend(_cfObject, date._cfObject) + _calendar.isDateInWeekend(date) } /// Revised API for avoiding usage of AutoreleasingUnsafeMutablePointer. @@ -955,32 +698,7 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { /// - Experiment: This is a draft API currently under consideration for official import into Foundation as a suitable alternative /// - Note: Since this API is under consideration it may be either removed or revised in the near future open func nextWeekendAfter(_ date: Date, options: Options) -> DateInterval? { - var range = _CFCalendarWeekendRange() - let res = withUnsafeMutablePointer(to: &range) { rangep in - return _CFCalendarGetNextWeekend(_cfObject, rangep) - } - if res { - var comp = DateComponents() - comp.weekday = range.start - if let nextStart = nextDate(after: date, matching: comp, options: options.union(.matchNextTime)) { - let start = startOfDay(for: nextStart + range.onsetTime) - comp.weekday = range.end - if let nextEnd = nextDate(after: start, matching: comp, options: .matchNextTime) { - var end = nextEnd - if range.ceaseTime > 0 { - end = end + range.ceaseTime - } else { - if let dayEnd = self.range(of: .day, for: end) { - end = startOfDay(for: dayEnd.end) - } else { - return nil - } - } - return DateInterval(start: start, end: end) - } - } - } - return nil + _calendar.nextWeekend(startingAfter: date, direction: options.contains(.searchBackwards) ? .backward : .forward) } /* @@ -991,24 +709,7 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { No options are currently defined; pass 0. */ open func components(_ unitFlags: Unit, from startingDateComp: DateComponents, to resultDateComp: DateComponents, options: Options = []) -> DateComponents { - var startDate: Date? - var toDate: Date? - if let startCalendar = startingDateComp.calendar { - startDate = startCalendar.date(from: startingDateComp) - } else { - startDate = date(from: startingDateComp) - } - if let toCalendar = resultDateComp.calendar { - toDate = toCalendar.date(from: resultDateComp) - } else { - toDate = date(from: resultDateComp) - } - if let start = startDate { - if let end = toDate { - return components(unitFlags, from: start, to: end, options: options) - } - } - fatalError() + _calendar.dateComponents(unitFlags._calendarComponents, from: startingDateComp, to: resultDateComp) } /* @@ -1017,7 +718,7 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { */ open func date(byAdding unit: Unit, value: Int, to date: Date, options: Options = []) -> Date? { var comps = DateComponents() - comps.setValue(value, for: Calendar._fromCalendarUnit(unit)) + comps.setValue(value, for: unit._calendarComponent) return self.date(byAdding: comps, to: date, options: options) } @@ -1048,18 +749,16 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { return } - withoutActuallyEscaping(block) { (nonescapingBlock) in - _CFCalendarEnumerateDates(_cfObject, start._cfObject, comps._createCFDateComponents(), CFOptionFlags(opts.rawValue)) { (cfDate, exact, stop) in - guard let cfDate = cfDate else { - stop.pointee = true - return - } - var ourStop: ObjCBool = false - nonescapingBlock(cfDate._swiftObject, exact, &ourStop) - if ourStop.boolValue { - stop.pointee = true - } + let (matchingPolicy, repeatedTimePolicy, direction) = _fromNSCalendarOptions(opts) + _calendar.enumerateDates(startingAfter: start, matching: comps, matchingPolicy: matchingPolicy, repeatedTimePolicy: repeatedTimePolicy, direction: direction) { result, exactMatch, stop in + let ptr = UnsafeMutablePointer.allocate(capacity: 1) + ptr.initialize(to: ObjCBool(false)) + block(result, exactMatch, ptr) + if ptr.pointee.boolValue { + stop = true } + ptr.deinitialize(count: 1) + ptr.deallocate() } } @@ -1097,12 +796,8 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { To compute a sequence of results, use the -enumerateDatesStartingAfterDate:... method above, rather than looping and calling this method with the previous loop iteration's result. */ open func nextDate(after date: Date, matching comps: DateComponents, options: Options = []) -> Date? { - var result: Date? - enumerateDates(startingAfter: date, matching: comps, options: options) { date, exactMatch, stop in - result = date - stop.pointee = true - } - return result + let (matchingPolicy, repeatedTimePolicy, direction) = _fromNSCalendarOptions(options) + return _calendar.nextDate(after: date, matching: comps, matchingPolicy: matchingPolicy, repeatedTimePolicy: repeatedTimePolicy, direction: direction) } /* @@ -1111,9 +806,10 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { To compute a sequence of results, use the -enumerateDatesStartingAfterDate:... method above, rather than looping and calling this method with the previous loop iteration's result. */ open func nextDate(after date: Date, matching unit: Unit, value: Int, options: Options = []) -> Date? { - var comps = DateComponents() - comps.setValue(value, for: Calendar._fromCalendarUnit(unit)) - return nextDate(after:date, matching: comps, options: options) + let (matchingPolicy, repeatedTimePolicy, direction) = _fromNSCalendarOptions(options) + var dc = DateComponents() + dc.setValue(value, for: unit._calendarComponent) + return _calendar.nextDate(after: date, matching: dc, matchingPolicy: matchingPolicy, repeatedTimePolicy: repeatedTimePolicy, direction: direction) } /* @@ -1122,11 +818,9 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { To compute a sequence of results, use the -enumerateDatesStartingAfterDate:... method above, rather than looping and calling this method with the previous loop iteration's result. */ open func nextDate(after date: Date, matchingHour hourValue: Int, minute minuteValue: Int, second secondValue: Int, options: Options = []) -> Date? { - var comps = DateComponents() - comps.hour = hourValue - comps.minute = minuteValue - comps.second = secondValue - return nextDate(after: date, matching: comps, options: options) + let (matchingPolicy, repeatedTimePolicy, direction) = _fromNSCalendarOptions(options) + let dc = DateComponents(hour: hourValue, minute: minuteValue, second: secondValue) + return _calendar.nextDate(after: date, matching: dc, matchingPolicy: matchingPolicy, repeatedTimePolicy: repeatedTimePolicy, direction: direction) } /* @@ -1136,16 +830,18 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { The specific behaviors here are as yet unspecified; for example, if I change the weekday to Thursday, does that move forward to the next, backward to the previous, or to the nearest Thursday? A likely rule is that the algorithm will try to produce a result which is in the next-larger unit to the one given (there's a table of this mapping at the top of this document). So for the "set to Thursday" example, find the Thursday in the Week in which the given date resides (which could be a forwards or backwards move, and not necessarily the nearest Thursday). For forwards or backwards behavior, one can use the -nextDateAfterDate:matchingUnit:value:options: method above. */ open func date(bySettingUnit unit: Unit, value v: Int, of date: Date, options opts: Options = []) -> Date? { - let currentValue = component(unit, from: date) - if currentValue == v { + let (matchingPolicy, repeatedTimePolicy, direction) = _fromNSCalendarOptions(opts) + let current = _calendar.component(unit._calendarComponent, from: date) + if current == v { return date } - var targetComp = DateComponents() - targetComp.setValue(v, for: Calendar._fromCalendarUnit(unit)) + + var target = DateComponents() + target.setValue(v, for: unit._calendarComponent) var result: Date? - enumerateDates(startingAfter: date, matching: targetComp, options: .matchNextTime) { date, match, stop in + _calendar.enumerateDates(startingAfter: date, matching: target, matchingPolicy: matchingPolicy, repeatedTimePolicy: repeatedTimePolicy, direction: direction) { date, exactMatch, stop in result = date - stop.pointee = true + stop = true } return result } @@ -1156,25 +852,8 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { The intent is to return a date on the same day as the original date argument. This may result in a date which is earlier than the given date, of course. */ open func date(bySettingHour h: Int, minute m: Int, second s: Int, of date: Date, options opts: Options = []) -> Date? { - if let range = range(of: .day, for: date) { - var comps = DateComponents() - comps.hour = h - comps.minute = m - comps.second = s - var options: Options = .matchNextTime - options.formUnion(opts.contains(.matchLast) ? .matchLast : .matchFirst) - if opts.contains(.matchStrictly) { - options.formUnion(.matchStrictly) - } - if let result = nextDate(after: range.start - 0.5, matching: comps, options: options) { - if result.compare(range.start) == .orderedAscending { - return nextDate(after: range.start, matching: comps, options: options) - } - return result - } - - } - return nil + let (matchingPolicy, repeatedTimePolicy, direction) = _fromNSCalendarOptions(opts) + return _calendar.date(bySettingHour: h, minute: m, second: s, of: date, matchingPolicy: matchingPolicy, repeatedTimePolicy: repeatedTimePolicy, direction: direction) } /* @@ -1182,202 +861,11 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { It is useful to test the return value of the -nextDateAfterDate:matchingUnit:value:options:, to find out if the components were obeyed or if the method had to fudge the result value due to missing time. */ open func date(_ date: Date, matchesComponents components: DateComponents) -> Bool { - let units: [Unit] = [.era, .year, .month, .day, .hour, .minute, .second, .weekday, .weekdayOrdinal, .quarter, .weekOfMonth, .weekOfYear, .yearForWeekOfYear, .nanosecond] - var unitFlags: Unit = [] - for unit in units { - if components.value(for: Calendar._fromCalendarUnit(unit)) != NSDateComponentUndefined { - unitFlags.formUnion(unit) - } - } - if unitFlags == [] { - if components.isLeapMonth != nil { - let comp = self.components(.month, from: date) - if let leap = comp.isLeapMonth { - return leap - } - return false - } - } - let comp = self.components(unitFlags, from: date) - var compareComp = comp - var tempComp = components - tempComp.isLeapMonth = comp.isLeapMonth - if let nanosecond = comp.value(for: .nanosecond) { - if labs(numericCast(nanosecond - tempComp.value(for: .nanosecond)!)) > 500 { - return false - } else { - compareComp.nanosecond = 0 - tempComp.nanosecond = 0 - } - return tempComp == compareComp - } - return false + _calendar.date(date, matchesComponents: components) } } -/// MARK: Current calendar. - -internal class _NSCopyOnWriteCalendar: NSCalendar { - private let lock = NSLock() - private var needsLocking_isMutated: Bool - private var needsLocking_backingCalendar: NSCalendar - override var _cfObject: CFCalendar { - copyBackingCalendarIfNeededWithMutation { _ in } - return self.backingCalendar._cfObject - } - - var backingCalendar: NSCalendar { - lock.lock() - let it = needsLocking_backingCalendar - lock.unlock() - return it - } - - init(backingCalendar: NSCalendar) { - self.needsLocking_isMutated = false - self.needsLocking_backingCalendar = backingCalendar - super.init() - } - - public convenience required init?(coder aDecoder: NSCoder) { - fatalError() // Encoding - } - - override var classForCoder: AnyClass { return NSCalendar.self } - - override func encode(with aCoder: NSCoder) { - backingCalendar.encode(with: aCoder) - } - - override func copy(with zone: NSZone? = nil) -> Any { - return backingCalendar.copy(with: zone) - } - - // -- Mutating the current calendar - - private func copyBackingCalendarIfNeededWithMutation(_ block: (NSCalendar) -> Void) { - lock.lock() - if !needsLocking_isMutated { - needsLocking_isMutated = true - needsLocking_backingCalendar = needsLocking_backingCalendar.copy() as! NSCalendar - } - block(needsLocking_backingCalendar) - lock.unlock() - } - - override var firstWeekday: Int { - get { return backingCalendar.firstWeekday } - set { - copyBackingCalendarIfNeededWithMutation { - $0.firstWeekday = newValue - } - } - } - - override var locale: Locale? { - get { return backingCalendar.locale } - set { - copyBackingCalendarIfNeededWithMutation { - $0.locale = newValue - } - } - } - - override var timeZone: TimeZone { - get { return backingCalendar.timeZone } - set { - copyBackingCalendarIfNeededWithMutation { - $0.timeZone = newValue - } - } - } - - override var minimumDaysInFirstWeek: Int { - get { return backingCalendar.minimumDaysInFirstWeek } - set { - copyBackingCalendarIfNeededWithMutation { - $0.minimumDaysInFirstWeek = newValue - } - } - } - - override var gregorianStartDate: Date? { - get { return backingCalendar.gregorianStartDate } - set { - copyBackingCalendarIfNeededWithMutation { - $0.gregorianStartDate = newValue - } - } - } - - override func isEqual(_ value: Any?) -> Bool { - return backingCalendar.isEqual(value) - } - - override var hash: Int { - return backingCalendar.hashValue - } - - // Delegation: - - override var calendarIdentifier: NSCalendar.Identifier { - return backingCalendar.calendarIdentifier - } - - override func minimumRange(of unit: NSCalendar.Unit) -> NSRange { - return backingCalendar.minimumRange(of: unit) - } - - override func maximumRange(of unit: NSCalendar.Unit) -> NSRange { - return backingCalendar.maximumRange(of: unit) - } - - override func range(of smaller: NSCalendar.Unit, in larger: NSCalendar.Unit, for date: Date) -> NSRange { - return backingCalendar.range(of: smaller, in: larger, for: date) - } - - override func ordinality(of smaller: NSCalendar.Unit, in larger: NSCalendar.Unit, for date: Date) -> Int { - return backingCalendar.ordinality(of: smaller, in: larger, for: date) - } - - override func range(of unit: NSCalendar.Unit, for date: Date) -> DateInterval? { - return backingCalendar.range(of: unit, for: date) - } - - override func date(from comps: DateComponents) -> Date? { - return backingCalendar.date(from: comps) - } - - override func component(_ unit: NSCalendar.Unit, from date: Date) -> Int { - return backingCalendar.component(unit, from: date) - } - - override func date(byAdding comps: DateComponents, to date: Date, options opts: NSCalendar.Options = []) -> Date? { - return backingCalendar.date(byAdding: comps, to: date, options: opts) - } - - override func components(_ unitFlags: NSCalendar.Unit, from startingDateComp: DateComponents, to resultDateComp: DateComponents, options: NSCalendar.Options = []) -> DateComponents { - return backingCalendar.components(unitFlags, from: startingDateComp, to: resultDateComp, options: options) - } - - override func components(_ unitFlags: Unit, from startingDate: Date, to resultDate: Date, options opts: Options = []) -> DateComponents { - return backingCalendar.components(unitFlags, from: startingDate, to: resultDate, options: opts) - } - - override func nextWeekendAfter(_ date: Date, options: NSCalendar.Options) -> DateInterval? { - return backingCalendar.nextWeekendAfter(date, options: options) - } - - override func isDateInWeekend(_ date: Date) -> Bool { - return backingCalendar.isDateInWeekend(date) - } - - override func enumerateDates(startingAfter start: Date, matching comps: DateComponents, options opts: NSCalendar.Options = [], using block: (Date?, Bool, UnsafeMutablePointer) -> Void) { - return backingCalendar.enumerateDates(startingAfter: start, matching: comps, options: opts, using: block) - } -} - #if !os(WASI) // This notification is posted through [NSNotificationCenter defaultCenter] // when the system day changes. Register with "nil" as the object of this @@ -1397,7 +885,7 @@ extension NSNotification.Name { extension NSCalendar: _SwiftBridgeable { typealias SwiftType = Calendar - var _swiftObject: SwiftType { return Calendar(reference: self) } + var _swiftObject: SwiftType { _calendar } } extension Calendar: _NSBridgeable { typealias NSType = NSCalendar @@ -1420,113 +908,93 @@ extension NSCalendar : _StructTypeBridgeable { } } -// CF Bridging: - -internal func _CFSwiftCalendarGetCalendarIdentifier(_ calendar: CFTypeRef) -> Unmanaged { -// It is tempting to just: -// return Unmanaged.passUnretained(unsafeBitCast(calendar, to: NSCalendar.self).calendarIdentifier.rawValue._cfObject) -// The problem is that Swift will then release the ._cfObject from under us. It needs to be retained, but Swift objects do not necessarily have a way to retain that CFObject to be alive for the caller because, outside of ObjC, there is no autorelease pool to save us from this. This is a problem with the fact that we're bridging a Get function; Copy functions of course just return +1 and live happily. -// So, the solution here is to canonicalize to one of the CFString constants, which are immortal. If someone is using a nonstandard calendar identifier, well, this will currently explode :( TODO. - let result: CFString - switch unsafeBitCast(calendar, to: NSCalendar.self).calendarIdentifier { - case .gregorian: - result = kCFCalendarIdentifierGregorian - case .buddhist: - result = kCFCalendarIdentifierBuddhist - case .chinese: - result = kCFCalendarIdentifierChinese - case .coptic: - result = kCFCalendarIdentifierCoptic - case .ethiopicAmeteMihret: - result = kCFCalendarIdentifierEthiopicAmeteMihret - case .ethiopicAmeteAlem: - result = kCFCalendarIdentifierEthiopicAmeteAlem - case .hebrew: - result = kCFCalendarIdentifierHebrew - case .ISO8601: - result = kCFCalendarIdentifierISO8601 - case .indian: - result = kCFCalendarIdentifierIndian - case .islamic: - result = kCFCalendarIdentifierIslamic - case .islamicCivil: - result = kCFCalendarIdentifierIslamicCivil - case .japanese: - result = kCFCalendarIdentifierJapanese - case .persian: - result = kCFCalendarIdentifierPersian - case .republicOfChina: - result = kCFCalendarIdentifierRepublicOfChina - case .islamicTabular: - result = kCFCalendarIdentifierIslamicTabular - case .islamicUmmAlQura: - result = kCFCalendarIdentifierIslamicUmmAlQura - default: - fatalError("Calendars returning a non-system calendar identifier in Swift Foundation are not supported.") - } - - return Unmanaged.passUnretained(result) -} - -internal func _CFSwiftCalendarCopyLocale(_ calendar: CFTypeRef) -> Unmanaged? { - if let locale = unsafeBitCast(calendar, to: NSCalendar.self).locale { - return Unmanaged.passRetained(locale._cfObject) +private func _toNSRange(_ range: Range?) -> NSRange { + if let r = range { + return NSRange(location: r.lowerBound, length: r.upperBound - r.lowerBound) } else { - return nil + return NSRange(location: NSNotFound, length: NSNotFound) } } -internal func _CFSwiftCalendarSetLocale(_ calendar: CFTypeRef, _ locale: CFTypeRef?) { - let calendar = unsafeBitCast(calendar, to: NSCalendar.self) - if let locale = locale { - calendar.locale = unsafeBitCast(locale, to: NSLocale.self)._swiftObject +private func _fromNSCalendarOptions(_ options: NSCalendar.Options) -> (matchingPolicy: Calendar.MatchingPolicy, repeatedTimePolicy: Calendar.RepeatedTimePolicy, direction: Calendar.SearchDirection) { + + let matchingPolicy: Calendar.MatchingPolicy + let repeatedTimePolicy: Calendar.RepeatedTimePolicy + let direction: Calendar.SearchDirection + + if options.contains(.matchNextTime) { + matchingPolicy = .nextTime + } else if options.contains(.matchNextTimePreservingSmallerUnits) { + matchingPolicy = .nextTimePreservingSmallerComponents + } else if options.contains(.matchPreviousTimePreservingSmallerUnits) { + matchingPolicy = .previousTimePreservingSmallerComponents + } else if options.contains(.matchStrictly) { + matchingPolicy = .strict } else { - calendar.locale = nil + // Default + matchingPolicy = .nextTime } -} - -internal func _CFSwiftCalendarCopyTimeZone(_ calendar: CFTypeRef) -> Unmanaged { - return Unmanaged.passRetained(unsafeBitCast(calendar, to: NSCalendar.self).timeZone._cfObject) -} -internal func _CFSwiftCalendarSetTimeZone(_ calendar: CFTypeRef, _ timeZone: CFTypeRef) { - let calendar = unsafeBitCast(calendar, to: NSCalendar.self) - calendar.timeZone = unsafeBitCast(timeZone, to: NSTimeZone.self)._swiftObject -} + if options.contains(.matchFirst) { + repeatedTimePolicy = .first + } else if options.contains(.matchLast) { + repeatedTimePolicy = .last + } else { + // Default + repeatedTimePolicy = .first + } -internal func _CFSwiftCalendarGetFirstWeekday(_ calendar: CFTypeRef) -> CFIndex { - let calendar = unsafeBitCast(calendar, to: NSCalendar.self) - return calendar.firstWeekday -} + if options.contains(.searchBackwards) { + direction = .backward + } else { + direction = .forward + } -internal func _CFSwiftCalendarSetFirstWeekday(_ calendar: CFTypeRef, _ firstWeekday: CFIndex) { - let calendar = unsafeBitCast(calendar, to: NSCalendar.self) - calendar.firstWeekday = firstWeekday + return (matchingPolicy, repeatedTimePolicy, direction) } -internal func _CFSwiftCalendarGetMinimumDaysInFirstWeek(_ calendar: CFTypeRef) -> CFIndex { - let calendar = unsafeBitCast(calendar, to: NSCalendar.self) - return calendar.minimumDaysInFirstWeek -} +// MARK: - Bridging -internal func _CFSwiftCalendarSetMinimumDaysInFirstWeek(_ calendar: CFTypeRef, _ minimumDaysInFirstWeek: CFIndex) { - let calendar = unsafeBitCast(calendar, to: NSCalendar.self) - calendar.minimumDaysInFirstWeek = minimumDaysInFirstWeek +extension Calendar : ReferenceConvertible { + public typealias ReferenceType = NSCalendar } -internal func _CFSwiftCalendarCopyGregorianStartDate(_ calendar: CFTypeRef) -> Unmanaged? { - if let date = unsafeBitCast(calendar, to: NSCalendar.self).gregorianStartDate { - return Unmanaged.passRetained(date._cfObject) - } else { - return nil +extension Calendar: _ObjectiveCBridgeable { + public typealias _ObjectType = NSCalendar + + @_semantics("convertToObjectiveC") + public func _bridgeToObjectiveC() -> NSCalendar { + NSCalendar(calendar: self) + } + + public static func _forceBridgeFromObjectiveC(_ input: NSCalendar, result: inout Calendar?) { + if !_conditionallyBridgeFromObjectiveC(input, result: &result) { + fatalError("Unable to bridge \(NSCalendar.self) to \(self)") + } + } + + @discardableResult + public static func _conditionallyBridgeFromObjectiveC(_ input: NSCalendar, result: inout Calendar?) -> Bool { + result = input._calendar + return true + } + + public static func _unconditionallyBridgeFromObjectiveC(_ source: NSCalendar?) -> Calendar { + var result: Calendar? = nil + _forceBridgeFromObjectiveC(source!, result: &result) + return result! } } -internal func _CFSwiftCalendarSetGregorianStartDate(_ calendar: CFTypeRef, _ date: CFTypeRef?) { - let calendar = unsafeBitCast(calendar, to: NSCalendar.self) - if let date = date { - calendar.gregorianStartDate = unsafeBitCast(date, to: NSDate.self)._swiftObject - } else { - calendar.gregorianStartDate = nil +extension NSCalendar { + internal var _cfObject: CFCalendar { + let cf = CFCalendarCreateWithIdentifier(nil, calendarIdentifier._calendarIdentifier._cfCalendarIdentifier._cfObject)! + CFCalendarSetTimeZone(cf, timeZone._cfObject) + if let l = locale { + CFCalendarSetLocale(cf, l._cfObject) + } + CFCalendarSetFirstWeekday(cf, firstWeekday) + CFCalendarSetMinimumDaysInFirstWeek(cf, minimumDaysInFirstWeek) + return cf } } diff --git a/Sources/Foundation/NSDate.swift b/Sources/Foundation/NSDate.swift index 63f1fd3fdb..2d9da87b8a 100644 --- a/Sources/Foundation/NSDate.swift +++ b/Sources/Foundation/NSDate.swift @@ -11,6 +11,12 @@ public typealias TimeInterval = Double +internal let kCFDateFormatterNoStyle = CFDateFormatterStyle.noStyle +internal let kCFDateFormatterShortStyle = CFDateFormatterStyle.shortStyle +internal let kCFDateFormatterMediumStyle = CFDateFormatterStyle.mediumStyle +internal let kCFDateFormatterLongStyle = CFDateFormatterStyle.longStyle +internal let kCFDateFormatterFullStyle = CFDateFormatterStyle.fullStyle + public var NSTimeIntervalSince1970: Double { return 978307200.0 } diff --git a/Sources/Foundation/NSDateComponents.swift b/Sources/Foundation/NSDateComponents.swift index 6a1c3e0819..1e89a3a434 100644 --- a/Sources/Foundation/NSDateComponents.swift +++ b/Sources/Foundation/NSDateComponents.swift @@ -7,6 +7,7 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +@_exported import FoundationEssentials @_implementationOnly import _CoreFoundation @@ -31,118 +32,24 @@ public var NSDateComponentUndefined: Int = Int.max open class NSDateComponents: NSObject, NSCopying, NSSecureCoding { - internal var _calendar: Calendar? - internal var _timeZone: TimeZone? - internal var _values = [Int](repeating: NSDateComponentUndefined, count: 19) + internal var _components: DateComponents + + internal init(components: DateComponents) { + _components = components + } + public override init() { + _components = DateComponents() super.init() } open override var hash: Int { - var hasher = Hasher() - var mask = 0 - // The list of fields fed to the hasher here must be exactly - // the same as the ones compared in isEqual(_:) (modulo - // ordering). - // - // Given that NSDateComponents instances usually only have a - // few fields present, it makes sense to only hash those, as - // an optimization. We keep track of the fields hashed in the - // mask value, which we also feed to the hasher to make sure - // any two unequal values produce different hash encodings. - // - // FIXME: Why not just feed _values, calendar & timeZone to - // the hasher? - if let calendar = calendar { - hasher.combine(calendar) - mask |= 1 << 0 - } - if let timeZone = timeZone { - hasher.combine(timeZone) - mask |= 1 << 1 - } - if era != NSDateComponentUndefined { - hasher.combine(era) - mask |= 1 << 2 - } - if year != NSDateComponentUndefined { - hasher.combine(year) - mask |= 1 << 3 - } - if quarter != NSDateComponentUndefined { - hasher.combine(quarter) - mask |= 1 << 4 - } - if month != NSDateComponentUndefined { - hasher.combine(month) - mask |= 1 << 5 - } - if day != NSDateComponentUndefined { - hasher.combine(day) - mask |= 1 << 6 - } - if hour != NSDateComponentUndefined { - hasher.combine(hour) - mask |= 1 << 7 - } - if minute != NSDateComponentUndefined { - hasher.combine(minute) - mask |= 1 << 8 - } - if second != NSDateComponentUndefined { - hasher.combine(second) - mask |= 1 << 9 - } - if nanosecond != NSDateComponentUndefined { - hasher.combine(nanosecond) - mask |= 1 << 10 - } - if weekOfYear != NSDateComponentUndefined { - hasher.combine(weekOfYear) - mask |= 1 << 11 - } - if weekOfMonth != NSDateComponentUndefined { - hasher.combine(weekOfMonth) - mask |= 1 << 12 - } - if yearForWeekOfYear != NSDateComponentUndefined { - hasher.combine(yearForWeekOfYear) - mask |= 1 << 13 - } - if weekday != NSDateComponentUndefined { - hasher.combine(weekday) - mask |= 1 << 14 - } - if weekdayOrdinal != NSDateComponentUndefined { - hasher.combine(weekdayOrdinal) - mask |= 1 << 15 - } - hasher.combine(isLeapMonth) - hasher.combine(mask) - return hasher.finalize() + _components.hashValue } open override func isEqual(_ object: Any?) -> Bool { guard let other = object as? NSDateComponents else { return false } - // FIXME: Why not just compare _values, calendar & timeZone? - return self === other - || (era == other.era - && year == other.year - && quarter == other.quarter - && month == other.month - && day == other.day - && hour == other.hour - && minute == other.minute - && second == other.second - && nanosecond == other.nanosecond - && weekOfYear == other.weekOfYear - && weekOfMonth == other.weekOfMonth - && yearForWeekOfYear == other.yearForWeekOfYear - && weekday == other.weekday - && weekdayOrdinal == other.weekdayOrdinal - && isLeapMonth == other.isLeapMonth - && calendar == other.calendar - && timeZone == other.timeZone) + return _components == other._components } public convenience required init?(coder aDecoder: NSCoder) { @@ -220,7 +127,7 @@ open class NSDateComponents: NSObject, NSCopying, NSSecureCoding { newObj.weekday = weekday newObj.weekdayOrdinal = weekdayOrdinal newObj.quarter = quarter - if leapMonthSet { + if let isLeapMonth = _components.isLeapMonth { newObj.isLeapMonth = isLeapMonth } return newObj @@ -228,162 +135,151 @@ open class NSDateComponents: NSObject, NSCopying, NSSecureCoding { /*@NSCopying*/ open var calendar: Calendar? { get { - return _calendar + _components.calendar } set { - if let val = newValue { - _calendar = val - } else { - _calendar = nil - } + _components.calendar = newValue } } /*@NSCopying*/ open var timeZone: TimeZone? open var era: Int { get { - return _values[0] + _components.era ?? NSDateComponentUndefined } set { - _values[0] = newValue + _components.era = newValue } } open var year: Int { get { - return _values[1] + _components.year ?? NSDateComponentUndefined } set { - _values[1] = newValue + _components.year = newValue } } open var month: Int { get { - return _values[2] + _components.month ?? NSDateComponentUndefined } set { - _values[2] = newValue + _components.month = newValue } } open var day: Int { get { - return _values[3] + _components.day ?? NSDateComponentUndefined } set { - _values[3] = newValue + _components.day = newValue } } open var hour: Int { get { - return _values[4] + _components.hour ?? NSDateComponentUndefined } set { - _values[4] = newValue + _components.hour = newValue } } open var minute: Int { get { - return _values[5] + _components.minute ?? NSDateComponentUndefined } set { - _values[5] = newValue + _components.minute = newValue } } open var second: Int { get { - return _values[6] + _components.second ?? NSDateComponentUndefined } set { - _values[6] = newValue + _components.second = newValue } } open var weekday: Int { get { - return _values[8] + _components.weekday ?? NSDateComponentUndefined } set { - _values[8] = newValue + _components.weekday = newValue } } open var weekdayOrdinal: Int { get { - return _values[9] + _components.weekdayOrdinal ?? NSDateComponentUndefined } set { - _values[9] = newValue + _components.weekdayOrdinal = newValue } } open var quarter: Int { get { - return _values[10] + _components.quarter ?? NSDateComponentUndefined } set { - _values[10] = newValue + _components.quarter = newValue } } open var nanosecond: Int { get { - return _values[11] + _components.nanosecond ?? NSDateComponentUndefined } set { - _values[11] = newValue + _components.nanosecond = newValue } } open var weekOfYear: Int { get { - return _values[12] + _components.weekOfYear ?? NSDateComponentUndefined } set { - _values[12] = newValue + _components.weekOfYear = newValue } } open var weekOfMonth: Int { get { - return _values[13] + _components.weekOfMonth ?? NSDateComponentUndefined } set { - _values[13] = newValue + _components.weekOfMonth = newValue } } open var yearForWeekOfYear: Int { get { - return _values[14] + _components.yearForWeekOfYear ?? NSDateComponentUndefined } set { - _values[14] = newValue + _components.yearForWeekOfYear = newValue } } open var isLeapMonth: Bool { get { - return _values[15] == 1 + _components.isLeapMonth ?? false } set { - _values[15] = newValue ? 1 : 0 + _components.isLeapMonth = newValue } } - internal var leapMonthSet: Bool { - return _values[15] != NSDateComponentUndefined - } - /*@NSCopying*/ open var date: Date? { - if let tz = timeZone { - calendar?.timeZone = tz - } - return calendar?.date(from: self._swiftObject) + _components.date } /* @@ -391,42 +287,7 @@ open class NSDateComponents: NSObject, NSCopying, NSSecureCoding { The calendar and timeZone and isLeapMonth properties cannot be set by this method. */ open func setValue(_ value: Int, forComponent unit: NSCalendar.Unit) { - switch unit { - case .era: - era = value - case .year: - year = value - case .month: - month = value - case .day: - day = value - case .hour: - hour = value - case .minute: - minute = value - case .second: - second = value - case .nanosecond: - nanosecond = value - case .weekday: - weekday = value - case .weekdayOrdinal: - weekdayOrdinal = value - case .quarter: - quarter = value - case .weekOfMonth: - weekOfMonth = value - case .weekOfYear: - weekOfYear = value - case .yearForWeekOfYear: - yearForWeekOfYear = value - case .calendar: - print(".Calendar cannot be set via \(#function)") - case .timeZone: - print(".TimeZone cannot be set via \(#function)") - default: - break - } + _components.setValue(value, for: unit._calendarComponent) } /* @@ -434,39 +295,7 @@ open class NSDateComponents: NSObject, NSCopying, NSSecureCoding { The calendar and timeZone and isLeapMonth property values cannot be gotten by this method. */ open func value(forComponent unit: NSCalendar.Unit) -> Int { - switch unit { - case .era: - return era - case .year: - return year - case .month: - return month - case .day: - return day - case .hour: - return hour - case .minute: - return minute - case .second: - return second - case .nanosecond: - return nanosecond - case .weekday: - return weekday - case .weekdayOrdinal: - return weekdayOrdinal - case .quarter: - return quarter - case .weekOfMonth: - return weekOfMonth - case .weekOfYear: - return weekOfYear - case .yearForWeekOfYear: - return yearForWeekOfYear - default: - break - } - return NSDateComponentUndefined + _components.value(for: unit._calendarComponent) ?? NSDateComponentUndefined } /* @@ -477,10 +306,7 @@ open class NSDateComponents: NSObject, NSCopying, NSSecureCoding { The calendar property must be set, or NO is returned. */ open var isValidDate: Bool { - if let cal = calendar { - return isValidDate(in: cal) - } - return false + _components.isValidDate } /* @@ -490,114 +316,12 @@ open class NSDateComponents: NSObject, NSCopying, NSSecureCoding { If the time zone property is set in the NSDateComponents object, it is used. */ open func isValidDate(in calendar: Calendar) -> Bool { - var cal = calendar - if let tz = timeZone { - cal.timeZone = tz - } - let ns = nanosecond - if ns != NSDateComponentUndefined && 1000 * 1000 * 1000 <= ns { - return false - } - if ns != NSDateComponentUndefined && 0 < ns { - nanosecond = 0 - } - let d = calendar.date(from: self._swiftObject) - if ns != NSDateComponentUndefined && 0 < ns { - nanosecond = ns - } - if let date = d { - let all: NSCalendar.Unit = [.era, .year, .month, .day, .hour, .minute, .second, .weekday, .weekdayOrdinal, .quarter, .weekOfMonth, .weekOfYear, .yearForWeekOfYear] - let comps = cal._bridgeToObjectiveC().components(all, from: date) - var val = era - if val != NSDateComponentUndefined { - if comps.era != val { - return false - } - } - val = year - if val != NSDateComponentUndefined { - if comps.year != val { - return false - } - } - val = month - if val != NSDateComponentUndefined { - if comps.month != val { - return false - } - } - if leapMonthSet { - if comps.isLeapMonth != isLeapMonth { - return false - } - } - val = day - if val != NSDateComponentUndefined { - if comps.day != val { - return false - } - } - val = hour - if val != NSDateComponentUndefined { - if comps.hour != val { - return false - } - } - val = minute - if val != NSDateComponentUndefined { - if comps.minute != val { - return false - } - } - val = second - if val != NSDateComponentUndefined { - if comps.second != val { - return false - } - } - val = weekday - if val != NSDateComponentUndefined { - if comps.weekday != val { - return false - } - } - val = weekdayOrdinal - if val != NSDateComponentUndefined { - if comps.weekdayOrdinal != val { - return false - } - } - val = quarter - if val != NSDateComponentUndefined { - if comps.quarter != val { - return false - } - } - val = weekOfMonth - if val != NSDateComponentUndefined { - if comps.weekOfMonth != val { - return false - } - } - val = weekOfYear - if val != NSDateComponentUndefined { - if comps.weekOfYear != val { - return false - } - } - val = yearForWeekOfYear - if val != NSDateComponentUndefined { - if comps.yearForWeekOfYear != val { - return false - } - } - - return true - } - return false + _components.isValidDate(in: calendar) } } +// MARK: - Bridging + extension NSDateComponents: _SwiftBridgeable { typealias SwiftType = DateComponents var _swiftObject: SwiftType { return DateComponents(reference: self) } diff --git a/Sources/Foundation/NSLocale.swift b/Sources/Foundation/NSLocale.swift index 03dcc4970e..5522789029 100644 --- a/Sources/Foundation/NSLocale.swift +++ b/Sources/Foundation/NSLocale.swift @@ -211,8 +211,10 @@ open class NSLocale: NSObject, NSCopying, NSSecureCoding { } func localizedString(forCalendarIdentifier calendarIdentifier: String) -> String? { - let id = Calendar._fromNSCalendarIdentifier(.init(calendarIdentifier)) - return _locale.localizedString(for: id) + guard let id = NSCalendar.Identifier(string: calendarIdentifier) else { + return nil + } + return _locale.localizedString(for: id._calendarIdentifier) } func localizedString(forCollationIdentifier collationIdentifier: String) -> String? { diff --git a/Sources/Foundation/NSSwiftRuntime.swift b/Sources/Foundation/NSSwiftRuntime.swift index f3521beaaa..d3300878ad 100644 --- a/Sources/Foundation/NSSwiftRuntime.swift +++ b/Sources/Foundation/NSSwiftRuntime.swift @@ -178,8 +178,6 @@ internal func __CFInitializeSwift() { _CFRuntimeBridgeTypeToClass(CFDataGetTypeID(), unsafeBitCast(NSData.self, to: UnsafeRawPointer.self)) _CFRuntimeBridgeTypeToClass(CFDateGetTypeID(), unsafeBitCast(NSDate.self, to: UnsafeRawPointer.self)) _CFRuntimeBridgeTypeToClass(CFURLGetTypeID(), unsafeBitCast(NSURL.self, to: UnsafeRawPointer.self)) - _CFRuntimeBridgeTypeToClass(CFCalendarGetTypeID(), unsafeBitCast(NSCalendar.self, to: UnsafeRawPointer.self)) - _CFRuntimeBridgeTypeToClass(CFTimeZoneGetTypeID(), unsafeBitCast(NSTimeZone.self, to: UnsafeRawPointer.self)) _CFRuntimeBridgeTypeToClass(CFCharacterSetGetTypeID(), unsafeBitCast(_NSCFCharacterSet.self, to: UnsafeRawPointer.self)) _CFRuntimeBridgeTypeToClass(_CFKeyedArchiverUIDGetTypeID(), unsafeBitCast(_NSKeyedArchiverUID.self, to: UnsafeRawPointer.self)) @@ -294,19 +292,7 @@ internal func __CFInitializeSwift() { __CFSwiftBridge.NSData.increaseLengthBy = _CFSwiftDataIncreaseLength __CFSwiftBridge.NSData.appendBytes = _CFSwiftDataAppendBytes __CFSwiftBridge.NSData.replaceBytes = _CFSwiftDataReplaceBytes - - __CFSwiftBridge.NSCalendar.calendarIdentifier = _CFSwiftCalendarGetCalendarIdentifier - __CFSwiftBridge.NSCalendar.copyLocale = _CFSwiftCalendarCopyLocale - __CFSwiftBridge.NSCalendar.setLocale = _CFSwiftCalendarSetLocale - __CFSwiftBridge.NSCalendar.copyTimeZone = _CFSwiftCalendarCopyTimeZone - __CFSwiftBridge.NSCalendar.setTimeZone = _CFSwiftCalendarSetTimeZone - __CFSwiftBridge.NSCalendar.firstWeekday = _CFSwiftCalendarGetFirstWeekday - __CFSwiftBridge.NSCalendar.setFirstWeekday = _CFSwiftCalendarSetFirstWeekday - __CFSwiftBridge.NSCalendar.minimumDaysInFirstWeek = _CFSwiftCalendarGetMinimumDaysInFirstWeek - __CFSwiftBridge.NSCalendar.setMinimumDaysInFirstWeek = _CFSwiftCalendarSetMinimumDaysInFirstWeek - __CFSwiftBridge.NSCalendar.copyGregorianStartDate = _CFSwiftCalendarCopyGregorianStartDate - __CFSwiftBridge.NSCalendar.setGregorianStartDate = _CFSwiftCalendarSetGregorianStartDate - + // __CFDefaultEightBitStringEncoding = UInt32(kCFStringEncodingUTF8) #if !os(WASI) diff --git a/Sources/Foundation/NSTimeZone.swift b/Sources/Foundation/NSTimeZone.swift index 4249de32d1..9a26a520f3 100644 --- a/Sources/Foundation/NSTimeZone.swift +++ b/Sources/Foundation/NSTimeZone.swift @@ -7,37 +7,32 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // - @_implementationOnly import _CoreFoundation +@_spi(SwiftCorelibsFoundation) @_exported import FoundationEssentials open class NSTimeZone : NSObject, NSCopying, NSSecureCoding, NSCoding { - typealias CFType = CFTimeZone - private var _base = _CFInfo(typeID: CFTimeZoneGetTypeID()) - private var _name: UnsafeMutableRawPointer? = nil - private var _data: UnsafeMutableRawPointer? = nil - private var _periods: UnsafeMutableRawPointer? = nil - private var _periodCnt = Int32(0) + var _timeZone: TimeZone - internal final var _cfObject: CFType { - return unsafeBitCast(self, to: CFType.self) + init(_timeZone tz: TimeZone) { + _timeZone = tz } - // Primary creation method is +timeZoneWithName:; the - // data-taking variants should rarely be used directly public convenience init?(name tzName: String) { self.init(name: tzName, data: nil) } public init?(name tzName: String, data aData: Data?) { - super.init() - /* From https://developer.apple.com/documentation/foundation/nstimezone/1387250-init: "Discussion As of macOS 10.6, the underlying implementation of this method has been changed to ignore the specified data parameter." */ - if !_CFTimeZoneInit(_cfObject, tzName._cfObject, nil) { + if let tz = TimeZone(identifier: tzName) { + _timeZone = tz + } else { return nil } + + super.init() } public convenience required init?(coder aDecoder: NSCoder) { @@ -55,7 +50,7 @@ open class NSTimeZone : NSObject, NSCopying, NSSecureCoding, NSCoding { } open override var hash: Int { - return Int(bitPattern: CFHash(_cfObject)) + _timeZone.hashValue } open override func isEqual(_ object: Any?) -> Bool { @@ -64,44 +59,22 @@ open class NSTimeZone : NSObject, NSCopying, NSSecureCoding, NSCoding { } open override var description: String { - return CFCopyDescription(_cfObject)._swiftObject - } - - deinit { - _CFDeinit(self) - } - - // `init(forSecondsFromGMT:)` is not a failable initializer, so we need a designated initializer that isn't failable. - internal init(_name tzName: String) { - super.init() - _CFTimeZoneInit(_cfObject, tzName._cfObject, nil) + _timeZone.description } // Time zones created with this never have daylight savings and the // offset is constant no matter the date; the name and abbreviation // do NOT follow the POSIX convention (of minutes-west). public convenience init(forSecondsFromGMT seconds: Int) { - let sign = seconds < 0 ? "-" : "+" - let absoluteValue = abs(seconds) - var minutes = absoluteValue / 60 - if (absoluteValue % 60) >= 30 { minutes += 1 } - var hours = minutes / 60 - minutes %= 60 - hours = min(hours, 99) // Two digits only; leave CF to enforce actual max offset. - let mm = minutes < 10 ? "0\(minutes)" : "\(minutes)" - let hh = hours < 10 ? "0\(hours)" : "\(hours)" - self.init(_name: "GMT" + sign + hh + mm) + let tz = TimeZone(secondsFromGMT: seconds)! + self.init(_timeZone: tz) } public convenience init?(abbreviation: String) { - let abbr = abbreviation._cfObject - let possibleName: NSString? = withExtendedLifetime(abbr) { - return unsafeBitCast(CFDictionaryGetValue(CFTimeZoneCopyAbbreviationDictionary(), unsafeBitCast(abbr, to: UnsafeRawPointer.self)), to: NSString?.self) - } - guard let name = possibleName else { + guard let tz = TimeZone(abbreviation: abbreviation) else { return nil } - self.init(name: name._swiftObject , data: nil) + self.init(_timeZone: tz) } open func encode(with aCoder: NSCoder) { @@ -126,216 +99,186 @@ open class NSTimeZone : NSObject, NSCopying, NSSecureCoding, NSCoding { } open var name: String { - guard type(of: self) === NSTimeZone.self else { - NSRequiresConcreteImplementation() - } - return CFTimeZoneGetName(_cfObject)._swiftObject + _timeZone.identifier } open var data: Data { - guard type(of: self) === NSTimeZone.self else { - NSRequiresConcreteImplementation() - } - return CFTimeZoneGetData(_cfObject)._swiftObject + TimeZone._dataFromTZFile(_timeZone.identifier) } - + open func secondsFromGMT(for aDate: Date) -> Int { - guard type(of: self) === NSTimeZone.self else { - NSRequiresConcreteImplementation() - } - return Int(CFTimeZoneGetSecondsFromGMT(_cfObject, aDate.timeIntervalSinceReferenceDate)) + _timeZone.secondsFromGMT(for: aDate) } open func abbreviation(for aDate: Date) -> String? { - guard type(of: self) === NSTimeZone.self else { - NSRequiresConcreteImplementation() - } - return CFTimeZoneCopyAbbreviation(_cfObject, aDate.timeIntervalSinceReferenceDate)._swiftObject + _timeZone.abbreviation(for: aDate) } open func isDaylightSavingTime(for aDate: Date) -> Bool { - guard type(of: self) === NSTimeZone.self else { - NSRequiresConcreteImplementation() - } - return CFTimeZoneIsDaylightSavingTime(_cfObject, aDate.timeIntervalSinceReferenceDate) + _timeZone.isDaylightSavingTime(for: aDate) } open func daylightSavingTimeOffset(for aDate: Date) -> TimeInterval { - guard type(of: self) === NSTimeZone.self else { - NSRequiresConcreteImplementation() - } - return CFTimeZoneGetDaylightSavingTimeOffset(_cfObject, aDate.timeIntervalSinceReferenceDate) + _timeZone.daylightSavingTimeOffset(for: aDate) } open func nextDaylightSavingTimeTransition(after aDate: Date) -> Date? { - guard type(of: self) === NSTimeZone.self else { - NSRequiresConcreteImplementation() - } - let ti = CFTimeZoneGetNextDaylightSavingTimeTransition(_cfObject, aDate.timeIntervalSinceReferenceDate) - guard ti > 0 else { return nil } - return Date(timeIntervalSinceReferenceDate: ti) + _timeZone.nextDaylightSavingTimeTransition(after: aDate) } open class var system: TimeZone { - return CFTimeZoneCopySystem()._swiftObject + TimeZone.current } open class func resetSystemTimeZone() { + let _ = TimeZone._resetSystemTimeZone() + // Also reset CF's system time zone CFTimeZoneResetSystem() } open class var `default`: TimeZone { get { - return CFTimeZoneCopyDefault()._swiftObject + // This assumes that the behavior of CFTimeZoneCopyDefault is the same as FoundationEssential's default, when no default has been set + TimeZone._default } set { + TimeZone._default = newValue + // Need to reset the default in two places since CFTimeZone does not call up to Swift on this platform CFTimeZoneSetDefault(newValue._cfObject) } } open class var local: TimeZone { - return TimeZone(adoptingReference: __NSLocalTimeZone.shared, autoupdating: true) + TimeZone.autoupdatingCurrent } open class var knownTimeZoneNames: [String] { - guard let knownNames = CFTimeZoneCopyKnownNames() else { return [] } - return knownNames._nsObject._bridgeToSwift() as! [String] + TimeZone.knownTimeZoneIdentifiers } open class var abbreviationDictionary: [String : String] { get { - guard let dictionary = CFTimeZoneCopyAbbreviationDictionary() else { return [:] } - return dictionary._nsObject._bridgeToSwift() as! [String : String] + TimeZone.abbreviationDictionary } set { - CFTimeZoneSetAbbreviationDictionary(newValue._cfObject) + TimeZone.abbreviationDictionary = newValue } } open class var timeZoneDataVersion: String { - return __CFTimeZoneCopyDataVersionString()._swiftObject + TimeZone.timeZoneDataVersion } open var secondsFromGMT: Int { - let currentDate = Date() - return secondsFromGMT(for: currentDate) + _timeZone.secondsFromGMT() } /// The abbreviation for the receiver, such as "EDT" (Eastern Daylight Time). (read-only) /// /// This invokes `abbreviationForDate:` with the current date as the argument. open var abbreviation: String? { - let currentDate = Date() - return abbreviation(for: currentDate) + _timeZone.abbreviation() } open var isDaylightSavingTime: Bool { - let currentDate = Date() - return isDaylightSavingTime(for: currentDate) + _timeZone.isDaylightSavingTime() } open var daylightSavingTimeOffset: TimeInterval { - let currentDate = Date() - return daylightSavingTimeOffset(for: currentDate) + _timeZone.daylightSavingTimeOffset() } /*@NSCopying*/ open var nextDaylightSavingTimeTransition: Date? { - let currentDate = Date() - return nextDaylightSavingTimeTransition(after: currentDate) + _timeZone.nextDaylightSavingTimeTransition } open func isEqual(to aTimeZone: TimeZone) -> Bool { - return CFEqual(self._cfObject, aTimeZone._cfObject) + self._timeZone == aTimeZone } open func localizedName(_ style: NameStyle, locale: Locale?) -> String? { - let cfStyle = CFTimeZoneNameStyle(rawValue: style.rawValue)! - return CFTimeZoneCopyLocalizedName(self._cfObject, cfStyle, locale?._cfObject ?? CFLocaleCopyCurrent())._swiftObject + _timeZone.localizedName(for: style, locale: locale) } } +extension NSTimeZone { + public typealias NameStyle = TimeZone.NameStyle +} + +extension NSNotification.Name { + public static let NSSystemTimeZoneDidChange = NSNotification.Name(rawValue: kCFTimeZoneSystemTimeZoneDidChangeNotification._swiftObject) +} + +// MARK: - Bridging + extension NSTimeZone: _SwiftBridgeable { typealias SwiftType = TimeZone - var _swiftObject: TimeZone { return TimeZone(reference: self) } + var _swiftObject: TimeZone { + _timeZone + } + + var _cfObject : CFTimeZone { + let name = self.name + let tz = CFTimeZoneCreateWithName(nil, name._cfObject, true)! + return tz + } } extension CFTimeZone : _SwiftBridgeable, _NSBridgeable { typealias NSType = NSTimeZone - var _nsObject : NSTimeZone { return unsafeBitCast(self, to: NSTimeZone.self) } - var _swiftObject: TimeZone { return _nsObject._swiftObject } + var _nsObject : NSTimeZone { + let name = CFTimeZoneGetName(self)._swiftObject + let tz = TimeZone(identifier: name)! + return NSTimeZone(_timeZone: tz) + } + + var _swiftObject: TimeZone { + return _nsObject._swiftObject + } } extension TimeZone : _NSBridgeable { typealias NSType = NSTimeZone typealias CFType = CFTimeZone - var _nsObject : NSTimeZone { return _bridgeToObjectiveC() } - var _cfObject : CFTimeZone { return _nsObject._cfObject } -} - -extension NSTimeZone { - - public enum NameStyle : Int { - case standard // Central Standard Time - case shortStandard // CST - case daylightSaving // Central Daylight Time - case shortDaylightSaving // CDT - case generic // Central Time - case shortGeneric // CT + var _nsObject : NSTimeZone { + return _bridgeToObjectiveC() + } + + var _cfObject : CFTimeZone { + _nsObject._cfObject } - } -extension NSNotification.Name { - public static let NSSystemTimeZoneDidChange = NSNotification.Name(rawValue: kCFTimeZoneSystemTimeZoneDidChangeNotification._swiftObject) +extension TimeZone : ReferenceConvertible { + public typealias ReferenceType = NSTimeZone } -internal class __NSLocalTimeZone: NSTimeZone { - static var shared = __NSLocalTimeZone() - - private init() { - super.init(_name: "GMT+0000") - } - - public convenience required init?(coder aDecoder: NSCoder) { - // We do not encode details of the local time zone, merely the placeholder object. - self.init() - } - - override func encode(with aCoder: NSCoder) { - // We do not encode details of the local time zone, merely the placeholder object. +extension TimeZone : _ObjectiveCBridgeable { + public static func _isBridgedToObjectiveC() -> Bool { + return true } - private var system: NSTimeZone { - return NSTimeZone.system._nsObject + @_semantics("convertToObjectiveC") + public func _bridgeToObjectiveC() -> NSTimeZone { + NSTimeZone(_timeZone: self) } - override var name: String { return system.name } - override var data: Data { return system.data } - override func secondsFromGMT(for aDate: Date) -> Int { - return system.secondsFromGMT(for: aDate) - } - override func abbreviation(for aDate: Date) -> String? { - return system.abbreviation(for: aDate) - } - override func isDaylightSavingTime(for aDate: Date) -> Bool { - return system.isDaylightSavingTime(for: aDate) + public static func _forceBridgeFromObjectiveC(_ input: NSTimeZone, result: inout TimeZone?) { + if !_conditionallyBridgeFromObjectiveC(input, result: &result) { + fatalError("Unable to bridge \(NSTimeZone.self) to \(self)") + } } - override func daylightSavingTimeOffset(for aDate: Date) -> TimeInterval { - return system.daylightSavingTimeOffset(for: aDate) - } - override func nextDaylightSavingTimeTransition(after aDate: Date) -> Date? { - return system.nextDaylightSavingTimeTransition(after: aDate) - } - override func localizedName(_ style: NSTimeZone.NameStyle, locale: Locale?) -> String? { - return system.localizedName(style, locale: locale) - } - override var description: String { - return "Local Time Zone (\(system.description))" + public static func _conditionallyBridgeFromObjectiveC(_ input: NSTimeZone, result: inout TimeZone?) -> Bool { + result = input._timeZone + return true } - override func copy(with zone: NSZone? = nil) -> Any { - return self + public static func _unconditionallyBridgeFromObjectiveC(_ source: NSTimeZone?) -> TimeZone { + var result: TimeZone? = nil + _forceBridgeFromObjectiveC(source!, result: &result) + return result! } } + diff --git a/Sources/Foundation/TimeZone.swift b/Sources/Foundation/TimeZone.swift deleted file mode 100644 index 4d76cb9adc..0000000000 --- a/Sources/Foundation/TimeZone.swift +++ /dev/null @@ -1,308 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - - -internal func __NSTimeZoneIsAutoupdating(_ timezone: NSTimeZone) -> Bool { - return false -} - -internal func __NSTimeZoneAutoupdating() -> NSTimeZone { - return NSTimeZone.local._nsObject -} - -internal func __NSTimeZoneCurrent() -> NSTimeZone { - return NSTimeZone.system._nsObject -} - -/** - `TimeZone` defines the behavior of a time zone. Time zone values represent geopolitical regions. Consequently, these values have names for these regions. Time zone values also represent a temporal offset, either plus or minus, from Greenwich Mean Time (GMT) and an abbreviation (such as PST for Pacific Standard Time). - - `TimeZone` provides two static functions to get time zone values: `current` and `autoupdatingCurrent`. The `autoupdatingCurrent` time zone automatically tracks updates made by the user. - - Note that time zone database entries such as “America/Los_Angeles” are IDs, not names. An example of a time zone name is “Pacific Daylight Time”. Although many `TimeZone` functions include the word “name”, they refer to IDs. - - Cocoa does not provide any API to change the time zone of the computer, or of other applications. - */ -public struct TimeZone : Hashable, Equatable, ReferenceConvertible { - public typealias ReferenceType = NSTimeZone - - internal var _wrapped : NSTimeZone - internal var _autoupdating : Bool - - /// The time zone currently used by the system. - public static var current : TimeZone { - return TimeZone(adoptingReference: __NSTimeZoneCurrent(), autoupdating: false) - } - - /// The time zone currently used by the system, automatically updating to the user's current preference. - /// - /// If this time zone is mutated, then it no longer tracks the system time zone. - /// - /// The autoupdating time zone only compares equal to itself. - public static var autoupdatingCurrent : TimeZone { - return NSTimeZone.local - } - - // MARK: - - // - - /// Returns a time zone initialized with a given identifier. - /// - /// An example identifier is "America/Los_Angeles". - /// - /// If `identifier` is an unknown identifier, then returns `nil`. - public init?(identifier: String) { - if let r = NSTimeZone(name: identifier) { - _wrapped = r - _autoupdating = false - } else { - return nil - } - } - - @available(*, unavailable, renamed: "init(secondsFromGMT:)") - public init(forSecondsFromGMT seconds: Int) { fatalError() } - - /// Returns a time zone initialized with a specific number of seconds from GMT. - /// - /// Time zones created with this never have daylight savings and the offset is constant no matter the date. The identifier and abbreviation do NOT follow the POSIX convention (of minutes-west). - /// - /// - parameter seconds: The number of seconds from GMT. - /// - returns: A time zone, or `nil` if a valid time zone could not be created from `seconds`. - public init?(secondsFromGMT seconds: Int) { - // Seconds boundaries check should actually be placed in NSTimeZone.init(forSecondsFromGMT:) which should return - // nil if the check fails. However, NSTimeZone.init(forSecondsFromGMT:) is not a failable initializer, so it - // cannot return nil. - // It is not a failable initializer because we want to have parity with Darwin's NSTimeZone, which is - // Objective-C and has a wrong _Nonnull annotation. - if (seconds < -18 * 3600 || 18 * 3600 < seconds) { return nil } - - _wrapped = NSTimeZone(forSecondsFromGMT: seconds) - _autoupdating = false - } - - /// Returns a time zone identified by a given abbreviation. - /// - /// In general, you are discouraged from using abbreviations except for unique instances such as “GMT”. Time Zone abbreviations are not standardized and so a given abbreviation may have multiple meanings—for example, “EST” refers to Eastern Time in both the United States and Australia - /// - /// - parameter abbreviation: The abbreviation for the time zone. - /// - returns: A time zone identified by abbreviation determined by resolving the abbreviation to a identifier using the abbreviation dictionary and then returning the time zone for that identifier. Returns `nil` if there is no match for abbreviation. - public init?(abbreviation: String) { - if let r = NSTimeZone(abbreviation: abbreviation) { - _wrapped = r - _autoupdating = false - } else { - return nil - } - } - - internal init(reference: NSTimeZone) { - if __NSTimeZoneIsAutoupdating(reference) { - // we can't copy this or we lose its auto-ness (27048257) - // fortunately it's immutable - _autoupdating = true - _wrapped = reference - } else { - _autoupdating = false - _wrapped = reference.copy() as! NSTimeZone - } - } - - internal init(adoptingReference reference: NSTimeZone, autoupdating: Bool) { - // this path is only used for types we do not need to copy (we are adopting the ref) - _wrapped = reference - _autoupdating = autoupdating - } - - // MARK: - - // - - @available(*, unavailable, renamed: "identifier") - public var name: String { fatalError() } - - /// The geopolitical region identifier that identifies the time zone. - public var identifier: String { - return _wrapped.name - } - - @available(*, unavailable, message: "use the identifier instead") - public var data: Data { fatalError() } - - /// The current difference in seconds between the time zone and Greenwich Mean Time. - /// - /// - parameter date: The date to use for the calculation. The default value is the current date. - public func secondsFromGMT(for date: Date = Date()) -> Int { - return _wrapped.secondsFromGMT(for: date) - } - - /// Returns the abbreviation for the time zone at a given date. - /// - /// Note that the abbreviation may be different at different dates. For example, during daylight saving time the US/Eastern time zone has an abbreviation of “EDT.” At other times, its abbreviation is “EST.” - /// - parameter date: The date to use for the calculation. The default value is the current date. - public func abbreviation(for date: Date = Date()) -> String? { - return _wrapped.abbreviation(for: date) - } - - /// Returns a Boolean value that indicates whether the receiver uses daylight saving time at a given date. - /// - /// - parameter date: The date to use for the calculation. The default value is the current date. - public func isDaylightSavingTime(for date: Date = Date()) -> Bool { - return _wrapped.isDaylightSavingTime(for: date) - } - - /// Returns the daylight saving time offset for a given date. - /// - /// - parameter date: The date to use for the calculation. The default value is the current date. - public func daylightSavingTimeOffset(for date: Date = Date()) -> TimeInterval { - return _wrapped.daylightSavingTimeOffset(for: date) - } - - /// Returns the next daylight saving time transition after a given date. - /// - /// - parameter date: A date. - /// - returns: The next daylight saving time transition after `date`. Depending on the time zone, this function may return a change of the time zone's offset from GMT. Returns `nil` if the time zone of the receiver does not observe daylight savings time as of `date`. - public func nextDaylightSavingTimeTransition(after date: Date) -> Date? { - return _wrapped.nextDaylightSavingTimeTransition(after: date) - } - - /// Returns an array of strings listing the identifier of all the time zones known to the system. - public static var knownTimeZoneIdentifiers : [String] { - return NSTimeZone.knownTimeZoneNames - } - - /// Returns the mapping of abbreviations to time zone identifiers. - public static var abbreviationDictionary : [String : String] { - get { - return NSTimeZone.abbreviationDictionary - } - set { - NSTimeZone.abbreviationDictionary = newValue - } - } - - /// Returns the time zone data version. - public static var timeZoneDataVersion : String { - return NSTimeZone.timeZoneDataVersion - } - - /// Returns the date of the next (after the current instant) daylight saving time transition for the time zone. Depending on the time zone, the value of this property may represent a change of the time zone's offset from GMT. Returns `nil` if the time zone does not currently observe daylight saving time. - public var nextDaylightSavingTimeTransition: Date? { - return _wrapped.nextDaylightSavingTimeTransition - } - - @available(*, unavailable, renamed: "localizedName(for:locale:)") - public func localizedName(_ style: NSTimeZone.NameStyle, locale: Locale?) -> String? { fatalError() } - - /// Returns the name of the receiver localized for a given locale. - public func localizedName(for style: NSTimeZone.NameStyle, locale: Locale?) -> String? { - return _wrapped.localizedName(style, locale: locale) - } - - // MARK: - - - public func hash(into hasher: inout Hasher) { - if _autoupdating { - hasher.combine(false) - } else { - hasher.combine(true) - hasher.combine(_wrapped) - } - } - - public static func ==(lhs: TimeZone, rhs: TimeZone) -> Bool { - if lhs._autoupdating || rhs._autoupdating { - return lhs._autoupdating == rhs._autoupdating - } else { - return lhs._wrapped.isEqual(rhs._wrapped) - } - } -} - -extension TimeZone : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - private var _kindDescription : String { - if (self == TimeZone.current) { - return "current" - } else { - return "fixed" - } - } - - public var customMirror : Mirror { - var c: [(label: String?, value: Any)] = [] - c.append((label: "identifier", value: identifier)) - c.append((label: "kind", value: _kindDescription)) - c.append((label: "abbreviation", value: abbreviation() as Any)) - c.append((label: "secondsFromGMT", value: secondsFromGMT())) - c.append((label: "isDaylightSavingTime", value: isDaylightSavingTime())) - return Mirror(self, children: c, displayStyle: .struct) - } - - public var description: String { - return "\(identifier) (\(_kindDescription))" - } - - public var debugDescription : String { - return "\(identifier) (\(_kindDescription))" - } -} - -extension TimeZone : _ObjectiveCBridgeable { - public static func _isBridgedToObjectiveC() -> Bool { - return true - } - - @_semantics("convertToObjectiveC") - public func _bridgeToObjectiveC() -> NSTimeZone { - // _wrapped is immutable - return _wrapped - } - - public static func _forceBridgeFromObjectiveC(_ input: NSTimeZone, result: inout TimeZone?) { - if !_conditionallyBridgeFromObjectiveC(input, result: &result) { - fatalError("Unable to bridge \(NSTimeZone.self) to \(self)") - } - } - - public static func _conditionallyBridgeFromObjectiveC(_ input: NSTimeZone, result: inout TimeZone?) -> Bool { - result = TimeZone(reference: input) - return true - } - - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSTimeZone?) -> TimeZone { - var result: TimeZone? = nil - _forceBridgeFromObjectiveC(source!, result: &result) - return result! - } -} - -extension TimeZone : Codable { - private enum CodingKeys : Int, CodingKey { - case identifier - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let identifier = try container.decode(String.self, forKey: .identifier) - - guard let timeZone = TimeZone(identifier: identifier) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, - debugDescription: "Invalid TimeZone identifier.")) - } - - self = timeZone - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(self.identifier, forKey: .identifier) - } -} diff --git a/Tests/Foundation/TestNSCalendar.swift b/Tests/Foundation/TestNSCalendar.swift index 8a223bed78..4be671bb0a 100644 --- a/Tests/Foundation/TestNSCalendar.swift +++ b/Tests/Foundation/TestNSCalendar.swift @@ -526,9 +526,11 @@ class TestNSCalendar: XCTestCase { calendarWithoutTimeZone.locale = calendar.locale let timeZone = calendar.timeZone + var returned = calendarWithoutTimeZone.components(in: timeZone, from: date) - let returned = calendarWithoutTimeZone.components(in: timeZone, from: date) as NSDateComponents - XCTAssertEqual(components, returned) + // This test does not account for dayOfYear + returned.dayOfYear = nil + XCTAssertEqual(components, returned as NSDateComponents) } } From 100517e7a09ee9db5eed832e4f71b0722cb6bace Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Sat, 17 Feb 2024 11:15:45 -0800 Subject: [PATCH 038/198] Remove obsolete Mirror test --- Tests/Foundation/TestTimeZone.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Tests/Foundation/TestTimeZone.swift b/Tests/Foundation/TestTimeZone.swift index 5e15c00026..58ef80b109 100644 --- a/Tests/Foundation/TestTimeZone.swift +++ b/Tests/Foundation/TestTimeZone.swift @@ -176,7 +176,6 @@ class TestTimeZone: XCTestCase { } XCTAssertNotNil(children["identifier"]) - XCTAssertNotNil(children["kind"]) XCTAssertNotNil(children["secondsFromGMT"]) XCTAssertNotNil(children["isDaylightSavingTime"]) } From 3e128d5415d67c40f3dca21f482613737eb841be Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Wed, 21 Feb 2024 17:56:54 -0800 Subject: [PATCH 039/198] Use module bundle instead of main, for swiftpm compatibility --- Tests/Foundation/TestBundle.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Foundation/TestBundle.swift b/Tests/Foundation/TestBundle.swift index 12d138659f..9bd6dbf6cc 100644 --- a/Tests/Foundation/TestBundle.swift +++ b/Tests/Foundation/TestBundle.swift @@ -24,7 +24,7 @@ internal func testBundle() -> Bundle { } fatalError("Cant find test bundle") #else - return Bundle.main + return Bundle.module #endif } From 53857d5e1f4381a72705569f8edc740ee9d9254b Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 22 Feb 2024 12:23:27 -0800 Subject: [PATCH 040/198] Fix bundle access, Calendar bridging --- Sources/Foundation/NSCalendar.swift | 87 ++++++++++++++++------------- Tests/Foundation/TestNSData.swift | 6 +- Tests/Foundation/Utilities.swift | 4 +- 3 files changed, 54 insertions(+), 43 deletions(-) diff --git a/Sources/Foundation/NSCalendar.swift b/Sources/Foundation/NSCalendar.swift index 066fb85552..3703832a4f 100644 --- a/Sources/Foundation/NSCalendar.swift +++ b/Sources/Foundation/NSCalendar.swift @@ -883,31 +883,6 @@ extension NSNotification.Name { #endif -extension NSCalendar: _SwiftBridgeable { - typealias SwiftType = Calendar - var _swiftObject: SwiftType { _calendar } -} -extension Calendar: _NSBridgeable { - typealias NSType = NSCalendar - typealias CFType = CFCalendar - var _nsObject: NSCalendar { return _bridgeToObjectiveC() } - var _cfObject: CFCalendar { return _nsObject._cfObject } -} - -extension CFCalendar : _NSBridgeable, _SwiftBridgeable { - typealias NSType = NSCalendar - internal var _nsObject: NSType { return unsafeBitCast(self, to: NSType.self) } - internal var _swiftObject: Calendar { return _nsObject._swiftObject } -} - -extension NSCalendar : _StructTypeBridgeable { - public typealias _StructType = Calendar - - public func _bridgeToSwift() -> Calendar { - return Calendar._unconditionallyBridgeFromObjectiveC(self) - } -} - private func _toNSRange(_ range: Range?) -> NSRange { if let r = range { return NSRange(location: r.lowerBound, length: r.upperBound - r.lowerBound) @@ -955,6 +930,55 @@ private func _fromNSCalendarOptions(_ options: NSCalendar.Options) -> (matchingP // MARK: - Bridging +extension CFCalendar : _NSBridgeable, _SwiftBridgeable { + typealias NSType = NSCalendar + internal var _nsObject: NSType { + let id = CFCalendarGetIdentifier(self)!._swiftObject + let ns = NSCalendar(identifier: .init(string: id)!)! + ns.timeZone = CFCalendarCopyTimeZone(self)._swiftObject + ns.firstWeekday = CFCalendarGetFirstWeekday(self) + ns.minimumDaysInFirstWeek = CFCalendarGetMinimumDaysInFirstWeek(self) + return ns + } + internal var _swiftObject: Calendar { + return _nsObject._swiftObject + } +} + +extension NSCalendar { + internal var _cfObject: CFCalendar { + let cf = CFCalendarCreateWithIdentifier(nil, calendarIdentifier._calendarIdentifier._cfCalendarIdentifier._cfObject)! + CFCalendarSetTimeZone(cf, timeZone._cfObject) + if let l = locale { + CFCalendarSetLocale(cf, l._cfObject) + } + CFCalendarSetFirstWeekday(cf, firstWeekday) + CFCalendarSetMinimumDaysInFirstWeek(cf, minimumDaysInFirstWeek) + return cf + } +} + +extension NSCalendar: _SwiftBridgeable { + typealias SwiftType = Calendar + var _swiftObject: SwiftType { _calendar } +} + +extension NSCalendar : _StructTypeBridgeable { + public typealias _StructType = Calendar + + public func _bridgeToSwift() -> Calendar { + return Calendar._unconditionallyBridgeFromObjectiveC(self) + } +} + +extension Calendar: _NSBridgeable { + typealias NSType = NSCalendar + typealias CFType = CFCalendar + var _nsObject: NSCalendar { return _bridgeToObjectiveC() } + var _cfObject: CFCalendar { return _nsObject._cfObject } +} + + extension Calendar : ReferenceConvertible { public typealias ReferenceType = NSCalendar } @@ -985,16 +1009,3 @@ extension Calendar: _ObjectiveCBridgeable { return result! } } - -extension NSCalendar { - internal var _cfObject: CFCalendar { - let cf = CFCalendarCreateWithIdentifier(nil, calendarIdentifier._calendarIdentifier._cfCalendarIdentifier._cfObject)! - CFCalendarSetTimeZone(cf, timeZone._cfObject) - if let l = locale { - CFCalendarSetLocale(cf, l._cfObject) - } - CFCalendarSetFirstWeekday(cf, firstWeekday) - CFCalendarSetMinimumDaysInFirstWeek(cf, minimumDaysInFirstWeek) - return cf - } -} diff --git a/Tests/Foundation/TestNSData.swift b/Tests/Foundation/TestNSData.swift index d31180d135..325d89329a 100644 --- a/Tests/Foundation/TestNSData.swift +++ b/Tests/Foundation/TestNSData.swift @@ -550,7 +550,7 @@ class TestNSData: XCTestCase { } func test_writeToURLOptions() { - let saveData = try! Data(contentsOf: Bundle.main.url(forResource: "Test", withExtension: "plist")!) + let saveData = try! Data(contentsOf: Bundle.module.url(forResource: "Test", withExtension: "plist")!) let savePath = URL(fileURLWithPath: NSTemporaryDirectory() + "Test1.plist") do { try saveData.write(to: savePath, options: .atomic) @@ -1092,7 +1092,7 @@ class TestNSData: XCTestCase { } func test_initNSMutableDataContentsOf() { - let testDir = Bundle.main.resourcePath + let testDir = Bundle.module.resourcePath let filename = testDir!.appending("/NSStringTestData.txt") let url = URL(fileURLWithPath: filename) @@ -1695,7 +1695,7 @@ extension TestNSData { } func test_contentsOfFile() { - let testDir = Bundle.main.resourcePath + let testDir = Bundle.module.resourcePath let filename = testDir!.appending("/NSStringTestData.txt") let contents = NSData(contentsOfFile: filename) diff --git a/Tests/Foundation/Utilities.swift b/Tests/Foundation/Utilities.swift index 3e9272fd4d..d21f576231 100644 --- a/Tests/Foundation/Utilities.swift +++ b/Tests/Foundation/Utilities.swift @@ -215,7 +215,7 @@ func expectNoChanges(_ check: @autoclosure () -> T, by differe extension Fixture where ValueType: NSObject & NSCoding { func loadEach(handler: (ValueType, FixtureVariant) throws -> Void) throws { - try self.loadEach(fixtureRepository: try XCTUnwrap(Bundle.main.url(forResource: "Fixtures", withExtension: nil)), handler: handler) + try self.loadEach(fixtureRepository: try XCTUnwrap(Bundle.module.url(forResource: "Fixtures", withExtension: nil)), handler: handler) } func assertLoadedValuesMatch(_ matchHandler: (ValueType, ValueType) -> Bool = { $0 == $1 }) throws { @@ -679,7 +679,7 @@ public func withTemporaryDirectory(functionName: String = #function, block: ( // Create the temporary directory as one level so that it doesnt leave a directory hierarchy on the filesystem // eg tmp dir will be something like: /tmp/TestFoundation-test_name-BE16B2FF-37FA-4F70-8A84-923D1CC2A860 - let testBundleName = Bundle.main.infoDictionary!["CFBundleName"] as! String + let testBundleName = Bundle.module.infoDictionary!["CFBundleName"] as! String let fname = testBundleName + "-" + String(functionName[.. Date: Fri, 1 Mar 2024 11:31:46 -0800 Subject: [PATCH 041/198] Don't use SWIFT_CORELIBS_FOUNDATION_HAS_THREADS in header file --- Package.swift | 8 ++++-- Sources/CoreFoundation/CFPlatform.c | 28 +++++++++++++++++-- .../include/ForSwiftFoundationOnly.h | 2 -- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/Package.swift b/Package.swift index 2823960bfc..61826b6828 100644 --- a/Package.swift +++ b/Package.swift @@ -10,6 +10,7 @@ let buildSettings: [CSetting] = [ .define("DEPLOYMENT_RUNTIME_SWIFT"), .define("DEPLOYMENT_ENABLE_LIBDISPATCH"), .define("HAVE_STRUCT_TIMESPEC"), + .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS"), .define("_GNU_SOURCE", .when(platforms: [.linux, .android])), .define("CF_CHARACTERSET_UNICODE_DATA_L", to: "\"\(Context.packageDirectory)/Sources/CoreFoundation/CFUnicodeData-L.mapping\""), .define("CF_CHARACTERSET_UNICODE_DATA_B", to: "\"\(Context.packageDirectory)/Sources/CoreFoundation/CFUnicodeData-B.mapping\""), @@ -43,6 +44,7 @@ let interfaceBuildSettings: [CSetting] = [ .define("DEPLOYMENT_RUNTIME_SWIFT"), .define("DEPLOYMENT_ENABLE_LIBDISPATCH"), .define("HAVE_STRUCT_TIMESPEC"), + .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS"), .define("_GNU_SOURCE", .when(platforms: [.linux, .android])), .unsafeFlags([ "-Wno-shorten-64-to-32", @@ -90,7 +92,7 @@ let package = Package( "_CoreFoundation" ], path: "Sources/Foundation", - swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT")] + swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT"), .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS")] ), .target( name: "FoundationXML", @@ -101,7 +103,7 @@ let package = Package( "_CFXMLInterface" ], path: "Sources/FoundationXML", - swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT")] + swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT"), .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS")] ), .target( name: "FoundationNetworking", @@ -112,7 +114,7 @@ let package = Package( "_CFURLSessionInterface" ], path: "Sources/FoundationNetworking", - swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT")] + swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT"), .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS")] ), .target( name: "_CoreFoundation", diff --git a/Sources/CoreFoundation/CFPlatform.c b/Sources/CoreFoundation/CFPlatform.c index ba1d1ef8ec..f29378fff4 100644 --- a/Sources/CoreFoundation/CFPlatform.c +++ b/Sources/CoreFoundation/CFPlatform.c @@ -1664,8 +1664,6 @@ CF_PRIVATE int asprintf(char **ret, const char *format, ...) { extern void *swift_retain(void *); extern void swift_release(void *); -#if SWIFT_CORELIBS_FOUNDATION_HAS_THREADS - #if TARGET_OS_WIN32 typedef struct _CFThreadSpecificData { CFTypeRef value; @@ -1677,6 +1675,7 @@ typedef struct _CFThreadSpecificData { __stdcall #endif static void _CFThreadSpecificDestructor(void *ctx) { +#if SWIFT_CORELIBS_FOUNDATION_HAS_THREADS #if TARGET_OS_WIN32 _CFThreadSpecificData *data = (_CFThreadSpecificData *)ctx; FlsSetValue(data->key, NULL); @@ -1685,9 +1684,11 @@ static void _CFThreadSpecificDestructor(void *ctx) { #else swift_release(ctx); #endif +#endif } _CFThreadSpecificKey _CFThreadSpecificKeyCreate() { +#if SWIFT_CORELIBS_FOUNDATION_HAS_THREADS _CFThreadSpecificKey key; #if TARGET_OS_WIN32 key = FlsAlloc(_CFThreadSpecificDestructor); @@ -1695,9 +1696,13 @@ _CFThreadSpecificKey _CFThreadSpecificKeyCreate() { pthread_key_create(&key, &_CFThreadSpecificDestructor); #endif return key; +#else + return 0; +#endif } CFTypeRef _Nullable _CFThreadSpecificGet(_CFThreadSpecificKey key) { +#if SWIFT_CORELIBS_FOUNDATION_HAS_THREADS #if TARGET_OS_WIN32 _CFThreadSpecificData *data = (_CFThreadSpecificData *)FlsGetValue(key); if (data == NULL) { @@ -1707,12 +1712,16 @@ CFTypeRef _Nullable _CFThreadSpecificGet(_CFThreadSpecificKey key) { #else return (CFTypeRef)pthread_getspecific(key); #endif +#else + return NULL; +#endif } void _CFThreadSpecificSet(_CFThreadSpecificKey key, CFTypeRef _Nullable value) { // Intentionally not calling `swift_release` for previous value. // OperationQueue uses these API (through NSThreadSpecific), and balances // retain count manually. +#if SWIFT_CORELIBS_FOUNDATION_HAS_THREADS #if TARGET_OS_WIN32 free(FlsGetValue(key)); @@ -1737,9 +1746,12 @@ void _CFThreadSpecificSet(_CFThreadSpecificKey key, CFTypeRef _Nullable value) { pthread_setspecific(key, NULL); } #endif +#else +#endif } _CFThreadRef _CFThreadCreate(const _CFThreadAttributes attrs, void *_Nullable (* _Nonnull startfn)(void *_Nullable), void *_CF_RESTRICT _Nullable context) { +#if SWIFT_CORELIBS_FOUNDATION_HAS_THREADS #if TARGET_OS_WIN32 DWORD dwCreationFlags = 0; DWORD dwStackSize = 0; @@ -1760,9 +1772,13 @@ _CFThreadRef _CFThreadCreate(const _CFThreadAttributes attrs, void *_Nullable (* pthread_create(&thread, &attrs, startfn, context); return thread; #endif +#else + return NULL; +#endif } CF_CROSS_PLATFORM_EXPORT int _CFThreadSetName(_CFThreadRef thread, const char *_Nonnull name) { +#if SWIFT_CORELIBS_FOUNDATION_HAS_THREADS #if TARGET_OS_MAC if (pthread_equal(pthread_self(), thread)) { return pthread_setname_np(name); @@ -1793,9 +1809,13 @@ CF_CROSS_PLATFORM_EXPORT int _CFThreadSetName(_CFThreadRef thread, const char *_ pthread_set_name_np(thread, name); return 0; #endif +#else + return -1; +#endif } CF_CROSS_PLATFORM_EXPORT int _CFThreadGetName(char *buf, int length) { +#if SWIFT_CORELIBS_FOUNDATION_HAS_THREADS #if TARGET_OS_MAC return pthread_getname_np(pthread_self(), buf, length); #elif TARGET_OS_ANDROID @@ -1843,8 +1863,10 @@ CF_CROSS_PLATFORM_EXPORT int _CFThreadGetName(char *buf, int length) { return 0; #endif return -1; +#else + return -1; +#endif } -#endif // SWIFT_CORELIBS_FOUNDATION_HAS_THREADS CF_EXPORT char **_CFEnviron(void) { #if TARGET_OS_MAC diff --git a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h index 22de168980..a91e7800c8 100644 --- a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h @@ -410,7 +410,6 @@ CF_EXPORT CFHashCode __CFHashDouble(double d); CF_CROSS_PLATFORM_EXPORT void CFSortIndexes(CFIndex *indexBuffer, CFIndex count, CFOptionFlags opts, CFComparisonResult (^cmp)(CFIndex, CFIndex)); #endif -#if SWIFT_CORELIBS_FOUNDATION_HAS_THREADS CF_EXPORT CFTypeRef _Nullable _CFThreadSpecificGet(_CFThreadSpecificKey key); CF_EXPORT void _CFThreadSpecificSet(_CFThreadSpecificKey key, CFTypeRef _Nullable value); CF_EXPORT _CFThreadSpecificKey _CFThreadSpecificKeyCreate(void); @@ -419,7 +418,6 @@ CF_EXPORT _CFThreadRef _CFThreadCreate(const _CFThreadAttributes attrs, void *_N CF_CROSS_PLATFORM_EXPORT int _CFThreadSetName(_CFThreadRef thread, const char *_Nonnull name); CF_CROSS_PLATFORM_EXPORT int _CFThreadGetName(char *_Nonnull buf, int length); -#endif CF_EXPORT Boolean _CFCharacterSetIsLongCharacterMember(CFCharacterSetRef theSet, UTF32Char theChar); CF_EXPORT CFCharacterSetRef _CFCharacterSetCreateCopy(CFAllocatorRef alloc, CFCharacterSetRef theSet); From 431e76573990306b171fcf77df6a7af334f143ef Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Fri, 1 Mar 2024 11:46:55 -0800 Subject: [PATCH 042/198] Build xdgTestHelper --- Package.swift | 12 +- Sources/xdgTestHelper/main.swift | 285 ++++++++++++++++++++++++++++++ Tests/Foundation/TestBundle.swift | 5 +- 3 files changed, 296 insertions(+), 6 deletions(-) create mode 100644 Sources/xdgTestHelper/main.swift diff --git a/Package.swift b/Package.swift index 61826b6828..627d1de433 100644 --- a/Package.swift +++ b/Package.swift @@ -72,7 +72,7 @@ let package = Package( .library(name: "Foundation", targets: ["Foundation"]), .library(name: "FoundationXML", targets: ["FoundationXML"]), .library(name: "FoundationNetworking", targets: ["FoundationNetworking"]), - .executable(name: "plutil", targets: ["plutil"]) + .executable(name: "plutil", targets: ["plutil"]), ], dependencies: [ .package( @@ -162,6 +162,13 @@ let package = Package( name: "plutil", dependencies: ["Foundation"] ), + .executableTarget( + name: "xdgTestHelper", + dependencies: [ + "Foundation", + "FoundationNetworking" + ] + ), .target( // swift-corelibs-foundation has a copy of XCTest's sources so: // (1) we do not depend on the toolchain's XCTest, which depends on toolchain's Foundation, which we cannot pull in at the same time as a Foundation package @@ -179,7 +186,8 @@ let package = Package( "Foundation", "FoundationXML", "FoundationNetworking", - "XCTest" + "XCTest", + "xdgTestHelper" ], resources: [ .copy("Foundation/Resources") diff --git a/Sources/xdgTestHelper/main.swift b/Sources/xdgTestHelper/main.swift new file mode 100644 index 0000000000..ef761cdb6e --- /dev/null +++ b/Sources/xdgTestHelper/main.swift @@ -0,0 +1,285 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2017 - 2018 Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// + +#if !DEPLOYMENT_RUNTIME_OBJC && canImport(SwiftFoundation) && canImport(SwiftFoundationNetworking) && canImport(SwiftFoundationXML) +import SwiftFoundation +import SwiftFoundationNetworking +import SwiftFoundationXML +#else +import Foundation +#if canImport(FoundationNetworking) +import FoundationNetworking +#endif +#endif +#if os(Windows) +import WinSDK +#endif + +enum HelperCheckStatus : Int32 { + case ok = 0 + case fail = 1 + case cookieStorageNil = 20 + case cookieStorePathWrong +} + + +class XDGCheck { + static func run() -> Never { + let storage = HTTPCookieStorage.shared + let properties: [HTTPCookiePropertyKey: String] = [ + .name: "TestCookie", + .value: "Test @#$%^$&*99", + .path: "/", + .domain: "example.com", + ] + + guard let simpleCookie = HTTPCookie(properties: properties) else { + exit(HelperCheckStatus.cookieStorageNil.rawValue) + } + guard let rawValue = getenv("XDG_DATA_HOME"), let xdg_data_home = String(utf8String: rawValue) else { + exit(HelperCheckStatus.fail.rawValue) + } + + storage.setCookie(simpleCookie) + let fm = FileManager.default + + guard let bundleName = Bundle.main.infoDictionary?["CFBundleName"] as? String else { + exit(HelperCheckStatus.fail.rawValue) + } + let destPath = xdg_data_home + "/" + bundleName + "/.cookies.shared" + var isDir: ObjCBool = false + let exists = fm.fileExists(atPath: destPath, isDirectory: &isDir) + if (!exists) { + print("Expected cookie path: ", destPath) + exit(HelperCheckStatus.cookieStorePathWrong.rawValue) + } + exit(HelperCheckStatus.ok.rawValue) + } +} + +#if !os(Windows) +// ----- + +// Used by TestProcess: test_interrupt(), test_suspend_resume() +func signalTest() { + + var signalSet = sigset_t() + sigemptyset(&signalSet) + sigaddset(&signalSet, SIGTERM) + sigaddset(&signalSet, SIGCONT) + sigaddset(&signalSet, SIGINT) + sigaddset(&signalSet, SIGALRM) + guard sigprocmask(SIG_BLOCK, &signalSet, nil) == 0 else { + fatalError("Cant block signals") + } + // Timeout + alarm(3) + + // On Linux, print() doesnt currently flush the output over the pipe so use + // write() for now. On macOS, print() works fine. + write(1, "Ready\n", 6) + + while true { + var receivedSignal: Int32 = 0 + let ret = sigwait(&signalSet, &receivedSignal) + guard ret == 0 else { + fatalError("sigwait() failed") + } + switch receivedSignal { + case SIGINT: + write(1, "Signal: SIGINT\n", 15) + + case SIGCONT: + write(1, "Signal: SIGCONT\n", 16) + + case SIGTERM: + print("Terminated") + exit(99) + + case SIGALRM: + print("Timedout") + exit(127) + + default: + let msg = "Unexpected signal: \(receivedSignal)" + fatalError(msg) + } + } +} +#endif + +// ----- + +#if !DEPLOYMENT_RUNTIME_OBJC +struct NSURLForPrintTest { + enum Method: String { + case NSSearchPath + case FileManagerDotURLFor + case FileManagerDotURLsFor + } + + enum Identifier: String { + case desktop + case download + case publicShare + case documents + case music + case pictures + case videos + } + + let method: Method + let identifier: Identifier + + func run() { + let directory: FileManager.SearchPathDirectory + + switch identifier { + case .desktop: + directory = .desktopDirectory + case .download: + directory = .downloadsDirectory + case .publicShare: + directory = .sharedPublicDirectory + case .documents: + directory = .documentDirectory + case .music: + directory = .musicDirectory + case .pictures: + directory = .picturesDirectory + case .videos: + directory = .moviesDirectory + } + + switch method { + case .NSSearchPath: + print(NSSearchPathForDirectoriesInDomains(directory, .userDomainMask, true).first!) + case .FileManagerDotURLFor: + print(try! FileManager.default.url(for: directory, in: .userDomainMask, appropriateFor: nil, create: false).path) + case .FileManagerDotURLsFor: + print(FileManager.default.urls(for: directory, in: .userDomainMask).first!.path) + } + } +} +#endif + +// Simple implementation of /bin/cat +func cat(_ args: ArraySlice.Iterator) { + var exitCode: Int32 = 0 + + func catFile(_ name: String) { + do { + guard let fh = name == "-" ? FileHandle.standardInput : FileHandle(forReadingAtPath: name) else { + FileHandle.standardError.write(Data("cat: \(name): No such file or directory\n".utf8)) + exitCode = 1 + return + } + while let data = try fh.readToEnd() { + try FileHandle.standardOutput.write(contentsOf: data) + } + } + catch { print(error) } + } + + var args = args + let arg = args.next() ?? "-" + catFile(arg) + while let arg = args.next() { + catFile(arg) + } + exit(exitCode) +} + +#if !os(Windows) +func printOpenFileDescriptors() { + let reasonableMaxFD: CInt + #if os(Linux) || os(macOS) + reasonableMaxFD = getdtablesize() + #else + reasonableMaxFD = 4096 + #endif + for fd in 0.. ") + } + + let test = NSURLForPrintTest(method: method, identifier: identifier) + test.run() +#endif + +#if !os(Windows) +case "--signal-test": + signalTest() + +case "--print-open-file-descriptors": + printOpenFileDescriptors() + +case "--pgrp": + print("pgrp: \(getpgrp())") + +#endif + +default: + fatalError("These arguments are not recognized. Only run this from a unit test.") +} diff --git a/Tests/Foundation/TestBundle.swift b/Tests/Foundation/TestBundle.swift index 9bd6dbf6cc..339662fed0 100644 --- a/Tests/Foundation/TestBundle.swift +++ b/Tests/Foundation/TestBundle.swift @@ -43,10 +43,7 @@ internal func testBundleName() -> String { } internal func xdgTestHelperURL() -> URL { - guard let url = testBundle().url(forAuxiliaryExecutable: "xdgTestHelper") else { - fatalError("Cant find xdgTestHelper") - } - return url + testBundle().bundleURL.deletingLastPathComponent().appendingPathComponent("xdgTestHelper") } From 4f91b6d16dd7edaa0e2b4168f0656265d032a284 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Fri, 1 Mar 2024 12:06:46 -0800 Subject: [PATCH 043/198] Fix some issues with Calendar identifier bridging --- Sources/Foundation/NSCalendar.swift | 62 +++++++++++++---------------- Sources/Foundation/NSLocale.swift | 4 +- 2 files changed, 30 insertions(+), 36 deletions(-) diff --git a/Sources/Foundation/NSCalendar.swift b/Sources/Foundation/NSCalendar.swift index 3703832a4f..3ab8b16c65 100644 --- a/Sources/Foundation/NSCalendar.swift +++ b/Sources/Foundation/NSCalendar.swift @@ -101,7 +101,7 @@ extension NSCalendar { public static let islamicTabular = NSCalendar.Identifier("islamic-tbla") public static let islamicUmmAlQura = NSCalendar.Identifier("islamic-umalqura") - var _calendarIdentifier: Calendar.Identifier { + var _calendarIdentifier: Calendar.Identifier? { switch self { case .gregorian: .gregorian case .buddhist: .buddhist @@ -119,8 +119,7 @@ extension NSCalendar { case .republicOfChina: .republicOfChina case .islamicTabular: .islamicTabular case .islamicUmmAlQura: .islamicUmmAlQura - default: - fatalError("Unknown Calendar identifier") + default: nil } } } @@ -156,34 +155,23 @@ extension NSCalendar { internal var _calendarComponent: Calendar.Component { switch self { - case .era: - .era - case .year: - .year - case .month: - .month - case .day: - .day - case .hour: - .hour - case .minute: - .minute - case .second: - .second - case .weekday: - .weekday - case .weekdayOrdinal: - .weekdayOrdinal - case .quarter: - .quarter - case .weekOfMonth: - .weekOfMonth - case .weekOfYear: - .weekOfYear - case .yearForWeekOfYear: - .yearForWeekOfYear - default: - fatalError() + case .era: .era + case .year: .year + case .month: .month + case .day: .day + case .hour: .hour + case .minute: .minute + case .second: .second + case .weekday: .weekday + case .weekdayOrdinal: .weekdayOrdinal + case .quarter: .quarter + case .weekOfMonth: .weekOfMonth + case .weekOfYear: .weekOfYear + case .yearForWeekOfYear: .yearForWeekOfYear + case .calendar: .calendar + case .timeZone: .timeZone + case .nanosecond: .nanosecond + default: fatalError("Unknown component \(self)") } } @@ -312,12 +300,18 @@ open class NSCalendar : NSObject, NSCopying, NSSecureCoding { } public /*not inherited*/ init?(identifier calendarIdentifierConstant: Identifier) { - _calendar = Calendar(identifier: calendarIdentifierConstant._calendarIdentifier) + guard let id = calendarIdentifierConstant._calendarIdentifier else { + return nil + } + _calendar = Calendar(identifier: id) super.init() } public init?(calendarIdentifier ident: Identifier) { - _calendar = Calendar(identifier: ident._calendarIdentifier) + guard let id = ident._calendarIdentifier else { + return nil + } + _calendar = Calendar(identifier: id) super.init() } @@ -947,7 +941,7 @@ extension CFCalendar : _NSBridgeable, _SwiftBridgeable { extension NSCalendar { internal var _cfObject: CFCalendar { - let cf = CFCalendarCreateWithIdentifier(nil, calendarIdentifier._calendarIdentifier._cfCalendarIdentifier._cfObject)! + let cf = CFCalendarCreateWithIdentifier(nil, calendarIdentifier._calendarIdentifier!._cfCalendarIdentifier._cfObject)! CFCalendarSetTimeZone(cf, timeZone._cfObject) if let l = locale { CFCalendarSetLocale(cf, l._cfObject) diff --git a/Sources/Foundation/NSLocale.swift b/Sources/Foundation/NSLocale.swift index 5522789029..8318d9808b 100644 --- a/Sources/Foundation/NSLocale.swift +++ b/Sources/Foundation/NSLocale.swift @@ -211,10 +211,10 @@ open class NSLocale: NSObject, NSCopying, NSSecureCoding { } func localizedString(forCalendarIdentifier calendarIdentifier: String) -> String? { - guard let id = NSCalendar.Identifier(string: calendarIdentifier) else { + guard let id = NSCalendar.Identifier(string: calendarIdentifier), let id = id._calendarIdentifier else { return nil } - return _locale.localizedString(for: id._calendarIdentifier) + return _locale.localizedString(for: id) } func localizedString(forCollationIdentifier collationIdentifier: String) -> String? { From fa7a2d144965cd3e2002f1703717c7bb23f43a26 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Mon, 4 Mar 2024 10:04:39 -0800 Subject: [PATCH 044/198] Work towards fixing Data tests --- Sources/Foundation/NSData.swift | 30 +++++++++++++++++++++++++++ Tests/Foundation/HTTPServer.swift | 10 ++++----- Tests/Foundation/TestFileHandle.swift | 2 -- Tests/Foundation/TestNSData.swift | 6 +++--- Tests/Foundation/TestXMLParser.swift | 2 +- 5 files changed, 39 insertions(+), 11 deletions(-) diff --git a/Sources/Foundation/NSData.swift b/Sources/Foundation/NSData.swift index ff3b5055e6..1a40ef711d 100644 --- a/Sources/Foundation/NSData.swift +++ b/Sources/Foundation/NSData.swift @@ -1272,3 +1272,33 @@ extension NSData : _HasCustomAnyHashableRepresentation { } } +// MARK: - +// Temporary extension on Data until this implementation lands in swift-foundation +extension Data { + /// Find the given `Data` in the content of this `Data`. + /// + /// - parameter dataToFind: The data to be searched for. + /// - parameter options: Options for the search. Default value is `[]`. + /// - parameter range: The range of this data in which to perform the search. Default value is `nil`, which means the entire content of this data. + /// - returns: A `Range` specifying the location of the found data, or nil if a match could not be found. + /// - precondition: `range` must be in the bounds of the Data. + public func range(of dataToFind: Data, options: Data.SearchOptions = [], in range: Range? = nil) -> Range? { + let nsRange : NSRange + if let r = range { + nsRange = NSRange(location: r.lowerBound - startIndex, length: r.upperBound - r.lowerBound) + } else { + nsRange = NSRange(location: 0, length: count) + } + + let ns = self as NSData + var opts = NSData.SearchOptions() + if options.contains(.anchored) { opts.insert(.anchored) } + if options.contains(.backwards) { opts.insert(.backwards) } + + let result = ns.range(of: dataToFind, options: opts, in: nsRange) + if result.location == NSNotFound { + return nil + } + return (result.location + startIndex)..<((result.location + startIndex) + result.length) + } +} diff --git a/Tests/Foundation/HTTPServer.swift b/Tests/Foundation/HTTPServer.swift index 5af9fb9c52..fca1d73061 100644 --- a/Tests/Foundation/HTTPServer.swift +++ b/Tests/Foundation/HTTPServer.swift @@ -320,9 +320,9 @@ class _HTTPServer: CustomStringConvertible { public func request() throws -> _HTTPRequest { var reader = _SocketDataReader(socket: tcpSocket) - let headerData = try reader.readBlockSeparated(by: _HTTPUtils.CRLF2.data(using: .ascii)!) + let headerData = try reader.readBlockSeparated(by: _HTTPUtils.CRLF2.data(using: .utf8)!) - guard let headerString = String(bytes: headerData, encoding: .ascii) else { + guard let headerString = String(bytes: headerData, encoding: .utf8) else { throw InternalServerError.requestTooShort } var request = try _HTTPRequest(header: headerString) @@ -347,14 +347,14 @@ class _HTTPServer: CustomStringConvertible { // There maybe some part of the body in the initial data - let bodySeparator = _HTTPUtils.CRLF.data(using: .ascii)! + let bodySeparator = _HTTPUtils.CRLF.data(using: .utf8)! var messageData = Data() var finished = false while !finished { let chunkSizeData = try reader.readBlockSeparated(by: bodySeparator) // Should now have \r\n - guard let number = String(bytes: chunkSizeData, encoding: .ascii), let chunkSize = Int(number, radix: 16) else { + guard let number = String(bytes: chunkSizeData, encoding: .utf8), let chunkSize = Int(number, radix: 16) else { throw InternalServerError.requestTooShort } if chunkSize == 0 { @@ -676,7 +676,7 @@ public class TestURLSessionServer: CustomStringConvertible { // Serve this directly as binary data to avoid any String encoding conversions. if let url = testBundle().url(forResource: "NSString-ISO-8859-1-data", withExtension: "txt"), let content = try? Data(contentsOf: url) { - var responseData = "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=ISO-8859-1\r\nContent-Length: \(content.count)\r\n\r\n".data(using: .ascii)! + var responseData = "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=ISO-8859-1\r\nContent-Length: \(content.count)\r\n\r\n".data(using: .utf8)! responseData.append(content) try httpServer.tcpSocket.writeRawData(responseData) } else { diff --git a/Tests/Foundation/TestFileHandle.swift b/Tests/Foundation/TestFileHandle.swift index 5416c41c4e..b2cf202c20 100644 --- a/Tests/Foundation/TestFileHandle.swift +++ b/Tests/Foundation/TestFileHandle.swift @@ -162,12 +162,10 @@ class TestFileHandle : XCTestCase { override func tearDown() { for handle in allHandles { - print("Closing \(handle)…") try? handle.close() } for url in allTemporaryFileURLs { - print("Deleting \(url)…") try? FileManager.default.removeItem(at: url) } diff --git a/Tests/Foundation/TestNSData.swift b/Tests/Foundation/TestNSData.swift index 325d89329a..4d8b72d814 100644 --- a/Tests/Foundation/TestNSData.swift +++ b/Tests/Foundation/TestNSData.swift @@ -4596,7 +4596,7 @@ extension TestNSData { if index < data.endIndex { found.append(data[index.. Date: Tue, 12 Mar 2024 17:03:36 -0700 Subject: [PATCH 045/198] Drop CocoaError from SCL-F, it is now in swift-foundation --- Sources/Foundation/NSError.swift | 212 ++++-------------- .../URLSession/NetworkingSpecific.swift | 13 +- 2 files changed, 58 insertions(+), 167 deletions(-) diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index 4ccb70f912..6ec53488a8 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -230,29 +230,6 @@ public struct _CFErrorSPIForFoundationXMLUseOnly { } } -/// Describes an error that provides localized messages describing why -/// an error occurred and provides more information about the error. -public protocol LocalizedError : Error { - /// A localized message describing what error occurred. - var errorDescription: String? { get } - - /// A localized message describing the reason for the failure. - var failureReason: String? { get } - - /// A localized message describing how one might recover from the failure. - var recoverySuggestion: String? { get } - - /// A localized message providing "help" text if the user requests help. - var helpAnchor: String? { get } -} - -public extension LocalizedError { - var errorDescription: String? { return nil } - var failureReason: String? { return nil } - var recoverySuggestion: String? { return nil } - var helpAnchor: String? { return nil } -} - /// Class that implements the informal protocol /// NSErrorRecoveryAttempting, which is used by NSError when it /// attempts recovery from an error. @@ -299,36 +276,6 @@ public extension RecoverableError { } } -/// Describes an error type that specifically provides a domain, code, -/// and user-info dictionary. -public protocol CustomNSError : Error { - /// The domain of the error. - static var errorDomain: String { get } - - /// The error code within the given domain. - var errorCode: Int { get } - - /// The user-info dictionary. - var errorUserInfo: [String : Any] { get } -} - -public extension CustomNSError { - /// Default domain of the error. - static var errorDomain: String { - return String(reflecting: self) - } - - /// The error code within the given domain. - var errorCode: Int { - return _getDefaultErrorCode(self) - } - - /// The default user-info dictionary. - var errorUserInfo: [String : Any] { - return [:] - } -} - /// Convert an arbitrary fixed-width integer to an Int, reinterpreting /// signed -> unsigned if needed but trapping if the result is otherwise /// not expressible. @@ -608,76 +555,55 @@ extension _BridgedStoredNSError { } } -/// Describes errors within the Cocoa error domain. -public struct CocoaError : _BridgedStoredNSError { - public let _nsError: NSError - - public init(_nsError error: NSError) { - precondition(error.domain == NSCocoaErrorDomain) - self._nsError = error - } - - public static var _nsErrorDomain: String { return NSCocoaErrorDomain } - - /// The error code itself. - public struct Code : RawRepresentable, Hashable, _ErrorCodeProtocol { - public typealias _ErrorType = CocoaError - - public let rawValue: Int - - public init(rawValue: Int) { - self.rawValue = rawValue - } - - public static var fileNoSuchFile: CocoaError.Code { return CocoaError.Code(rawValue: 4) } - public static var fileLocking: CocoaError.Code { return CocoaError.Code(rawValue: 255) } - public static var fileReadUnknown: CocoaError.Code { return CocoaError.Code(rawValue: 256) } - public static var fileReadNoPermission: CocoaError.Code { return CocoaError.Code(rawValue: 257) } - public static var fileReadInvalidFileName: CocoaError.Code { return CocoaError.Code(rawValue: 258) } - public static var fileReadCorruptFile: CocoaError.Code { return CocoaError.Code(rawValue: 259) } - public static var fileReadNoSuchFile: CocoaError.Code { return CocoaError.Code(rawValue: 260) } - public static var fileReadInapplicableStringEncoding: CocoaError.Code { return CocoaError.Code(rawValue: 261) } - public static var fileReadUnsupportedScheme: CocoaError.Code { return CocoaError.Code(rawValue: 262) } - public static var fileReadTooLarge: CocoaError.Code { return CocoaError.Code(rawValue: 263) } - public static var fileReadUnknownStringEncoding: CocoaError.Code { return CocoaError.Code(rawValue: 264) } - public static var fileWriteUnknown: CocoaError.Code { return CocoaError.Code(rawValue: 512) } - public static var fileWriteNoPermission: CocoaError.Code { return CocoaError.Code(rawValue: 513) } - public static var fileWriteInvalidFileName: CocoaError.Code { return CocoaError.Code(rawValue: 514) } - public static var fileWriteFileExists: CocoaError.Code { return CocoaError.Code(rawValue: 516) } - public static var fileWriteInapplicableStringEncoding: CocoaError.Code { return CocoaError.Code(rawValue: 517) } - public static var fileWriteUnsupportedScheme: CocoaError.Code { return CocoaError.Code(rawValue: 518) } - public static var fileWriteOutOfSpace: CocoaError.Code { return CocoaError.Code(rawValue: 640) } - public static var fileWriteVolumeReadOnly: CocoaError.Code { return CocoaError.Code(rawValue: 642) } - public static var fileManagerUnmountUnknown: CocoaError.Code { return CocoaError.Code(rawValue: 768) } - public static var fileManagerUnmountBusy: CocoaError.Code { return CocoaError.Code(rawValue: 769) } - public static var keyValueValidation: CocoaError.Code { return CocoaError.Code(rawValue: 1024) } - public static var formatting: CocoaError.Code { return CocoaError.Code(rawValue: 2048) } - public static var userCancelled: CocoaError.Code { return CocoaError.Code(rawValue: 3072) } - public static var featureUnsupported: CocoaError.Code { return CocoaError.Code(rawValue: 3328) } - public static var executableNotLoadable: CocoaError.Code { return CocoaError.Code(rawValue: 3584) } - public static var executableArchitectureMismatch: CocoaError.Code { return CocoaError.Code(rawValue: 3585) } - public static var executableRuntimeMismatch: CocoaError.Code { return CocoaError.Code(rawValue: 3586) } - public static var executableLoad: CocoaError.Code { return CocoaError.Code(rawValue: 3587) } - public static var executableLink: CocoaError.Code { return CocoaError.Code(rawValue: 3588) } - public static var propertyListReadCorrupt: CocoaError.Code { return CocoaError.Code(rawValue: 3840) } - public static var propertyListReadUnknownVersion: CocoaError.Code { return CocoaError.Code(rawValue: 3841) } - public static var propertyListReadStream: CocoaError.Code { return CocoaError.Code(rawValue: 3842) } - public static var propertyListWriteStream: CocoaError.Code { return CocoaError.Code(rawValue: 3851) } - public static var propertyListWriteInvalid: CocoaError.Code { return CocoaError.Code(rawValue: 3852) } - public static var xpcConnectionInterrupted: CocoaError.Code { return CocoaError.Code(rawValue: 4097) } - public static var xpcConnectionInvalid: CocoaError.Code { return CocoaError.Code(rawValue: 4099) } - public static var xpcConnectionReplyInvalid: CocoaError.Code { return CocoaError.Code(rawValue: 4101) } - public static var ubiquitousFileUnavailable: CocoaError.Code { return CocoaError.Code(rawValue: 4353) } - public static var ubiquitousFileNotUploadedDueToQuota: CocoaError.Code { return CocoaError.Code(rawValue: 4354) } - public static var ubiquitousFileUbiquityServerNotAvailable: CocoaError.Code { return CocoaError.Code(rawValue: 4355) } - public static var userActivityHandoffFailed: CocoaError.Code { return CocoaError.Code(rawValue: 4608) } - public static var userActivityConnectionUnavailable: CocoaError.Code { return CocoaError.Code(rawValue: 4609) } - public static var userActivityRemoteApplicationTimedOut: CocoaError.Code { return CocoaError.Code(rawValue: 4610) } - public static var userActivityHandoffUserInfoTooLarge: CocoaError.Code { return CocoaError.Code(rawValue: 4611) } - public static var coderReadCorrupt: CocoaError.Code { return CocoaError.Code(rawValue: 4864) } - public static var coderValueNotFound: CocoaError.Code { return CocoaError.Code(rawValue: 4865) } - public static var coderInvalidValue: CocoaError.Code { return CocoaError.Code(rawValue: 4866) } - } +extension CocoaError.Code { + public static var fileNoSuchFile: CocoaError.Code { return CocoaError.Code(rawValue: 4) } + public static var fileLocking: CocoaError.Code { return CocoaError.Code(rawValue: 255) } + public static var fileReadUnknown: CocoaError.Code { return CocoaError.Code(rawValue: 256) } + public static var fileReadNoPermission: CocoaError.Code { return CocoaError.Code(rawValue: 257) } + public static var fileReadInvalidFileName: CocoaError.Code { return CocoaError.Code(rawValue: 258) } + public static var fileReadCorruptFile: CocoaError.Code { return CocoaError.Code(rawValue: 259) } + public static var fileReadNoSuchFile: CocoaError.Code { return CocoaError.Code(rawValue: 260) } + public static var fileReadInapplicableStringEncoding: CocoaError.Code { return CocoaError.Code(rawValue: 261) } + public static var fileReadUnsupportedScheme: CocoaError.Code { return CocoaError.Code(rawValue: 262) } + public static var fileReadTooLarge: CocoaError.Code { return CocoaError.Code(rawValue: 263) } + public static var fileReadUnknownStringEncoding: CocoaError.Code { return CocoaError.Code(rawValue: 264) } + public static var fileWriteUnknown: CocoaError.Code { return CocoaError.Code(rawValue: 512) } + public static var fileWriteNoPermission: CocoaError.Code { return CocoaError.Code(rawValue: 513) } + public static var fileWriteInvalidFileName: CocoaError.Code { return CocoaError.Code(rawValue: 514) } + public static var fileWriteFileExists: CocoaError.Code { return CocoaError.Code(rawValue: 516) } + public static var fileWriteInapplicableStringEncoding: CocoaError.Code { return CocoaError.Code(rawValue: 517) } + public static var fileWriteUnsupportedScheme: CocoaError.Code { return CocoaError.Code(rawValue: 518) } + public static var fileWriteOutOfSpace: CocoaError.Code { return CocoaError.Code(rawValue: 640) } + public static var fileWriteVolumeReadOnly: CocoaError.Code { return CocoaError.Code(rawValue: 642) } + public static var fileManagerUnmountUnknown: CocoaError.Code { return CocoaError.Code(rawValue: 768) } + public static var fileManagerUnmountBusy: CocoaError.Code { return CocoaError.Code(rawValue: 769) } + public static var keyValueValidation: CocoaError.Code { return CocoaError.Code(rawValue: 1024) } + public static var formatting: CocoaError.Code { return CocoaError.Code(rawValue: 2048) } + public static var userCancelled: CocoaError.Code { return CocoaError.Code(rawValue: 3072) } + public static var featureUnsupported: CocoaError.Code { return CocoaError.Code(rawValue: 3328) } + public static var executableNotLoadable: CocoaError.Code { return CocoaError.Code(rawValue: 3584) } + public static var executableArchitectureMismatch: CocoaError.Code { return CocoaError.Code(rawValue: 3585) } + public static var executableRuntimeMismatch: CocoaError.Code { return CocoaError.Code(rawValue: 3586) } + public static var executableLoad: CocoaError.Code { return CocoaError.Code(rawValue: 3587) } + public static var executableLink: CocoaError.Code { return CocoaError.Code(rawValue: 3588) } + public static var propertyListReadCorrupt: CocoaError.Code { return CocoaError.Code(rawValue: 3840) } + public static var propertyListReadUnknownVersion: CocoaError.Code { return CocoaError.Code(rawValue: 3841) } + public static var propertyListReadStream: CocoaError.Code { return CocoaError.Code(rawValue: 3842) } + public static var propertyListWriteStream: CocoaError.Code { return CocoaError.Code(rawValue: 3851) } + public static var propertyListWriteInvalid: CocoaError.Code { return CocoaError.Code(rawValue: 3852) } + public static var xpcConnectionInterrupted: CocoaError.Code { return CocoaError.Code(rawValue: 4097) } + public static var xpcConnectionInvalid: CocoaError.Code { return CocoaError.Code(rawValue: 4099) } + public static var xpcConnectionReplyInvalid: CocoaError.Code { return CocoaError.Code(rawValue: 4101) } + public static var ubiquitousFileUnavailable: CocoaError.Code { return CocoaError.Code(rawValue: 4353) } + public static var ubiquitousFileNotUploadedDueToQuota: CocoaError.Code { return CocoaError.Code(rawValue: 4354) } + public static var ubiquitousFileUbiquityServerNotAvailable: CocoaError.Code { return CocoaError.Code(rawValue: 4355) } + public static var userActivityHandoffFailed: CocoaError.Code { return CocoaError.Code(rawValue: 4608) } + public static var userActivityConnectionUnavailable: CocoaError.Code { return CocoaError.Code(rawValue: 4609) } + public static var userActivityRemoteApplicationTimedOut: CocoaError.Code { return CocoaError.Code(rawValue: 4610) } + public static var userActivityHandoffUserInfoTooLarge: CocoaError.Code { return CocoaError.Code(rawValue: 4611) } + public static var coderReadCorrupt: CocoaError.Code { return CocoaError.Code(rawValue: 4864) } + public static var coderValueNotFound: CocoaError.Code { return CocoaError.Code(rawValue: 4865) } + public static var coderInvalidValue: CocoaError.Code { return CocoaError.Code(rawValue: 4866) } } internal extension CocoaError { @@ -717,46 +643,6 @@ internal extension CocoaError { ] } -public extension CocoaError { - private var _nsUserInfo: [String: Any] { - return _nsError.userInfo - } - - /// The file path associated with the error, if any. - var filePath: String? { - return _nsUserInfo[NSFilePathErrorKey] as? String - } - - /// The string encoding associated with this error, if any. - var stringEncoding: String.Encoding? { - return (_nsUserInfo[NSStringEncodingErrorKey] as? NSNumber) - .map { String.Encoding(rawValue: $0.uintValue) } - } - - /// The underlying error behind this error, if any. - var underlying: Error? { - return _nsUserInfo[NSUnderlyingErrorKey] as? Error - } - - /// The URL associated with this error, if any. - var url: URL? { - return _nsUserInfo[NSURLErrorKey] as? URL - } -} - -extension CocoaError { - public static func error(_ code: CocoaError.Code, userInfo: [AnyHashable: Any]? = nil, url: URL? = nil) -> Error { - var info: [String: Any] = userInfo as? [String: Any] ?? [:] - if let url = url { - info[NSURLErrorKey] = url - } - return NSError(domain: NSCocoaErrorDomain, code: code.rawValue, userInfo: info) - } -} - -extension CocoaError.Code { -} - extension CocoaError { public static var fileNoSuchFile: CocoaError.Code { return .fileNoSuchFile } public static var fileLocking: CocoaError.Code { return .fileLocking } diff --git a/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift b/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift index e099f42d9f..48e1a9e578 100644 --- a/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift +++ b/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift @@ -12,6 +12,8 @@ import SwiftFoundation import Foundation #endif +@_spi(SwiftCorelibsFoundation) import FoundationEssentials + internal func NSUnimplemented(_ fn: String = #function, file: StaticString = #file, line: UInt = #line) -> Never { #if os(Android) NSLog("\(fn) is not yet implemented. \(file):\(line)") @@ -39,14 +41,17 @@ class _NSNonfileURLContentLoader: _NSNonfileURLContentLoading { required init() {} @usableFromInline - func contentsOf(url: URL) throws -> (result: NSData, textEncodingNameIfAvailable: String?) { + func contentsOf(url: Foundation.URL) throws -> (result: NSData, textEncodingNameIfAvailable: String?) { func cocoaError(with error: Error? = nil) -> Error { - var userInfo: [String: Any] = [:] - if let error = error { + var userInfo: [String: AnyHashable] = [:] + if let error = error as? AnyHashable { userInfo[NSUnderlyingErrorKey] = error } - return CocoaError.error(.fileReadUnknown, userInfo: userInfo, url: url) + // Temporary workaround for lack of URL in swift-foundation + // TODO: Replace with argument + let feURL = FoundationEssentials.URL(path: url.path) + return CocoaError.error(.fileReadUnknown, userInfo: userInfo, url: feURL) } var urlResponse: URLResponse? From e14125117016a18ee4ce999391f86ef83daf8ffe Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Wed, 13 Mar 2024 10:59:40 -0700 Subject: [PATCH 046/198] Remove duplicate error codes --- Sources/Foundation/NSError.swift | 36 +------------------------------- 1 file changed, 1 insertion(+), 35 deletions(-) diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index 6ec53488a8..8405341264 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -556,41 +556,7 @@ extension _BridgedStoredNSError { } extension CocoaError.Code { - public static var fileNoSuchFile: CocoaError.Code { return CocoaError.Code(rawValue: 4) } - public static var fileLocking: CocoaError.Code { return CocoaError.Code(rawValue: 255) } - public static var fileReadUnknown: CocoaError.Code { return CocoaError.Code(rawValue: 256) } - public static var fileReadNoPermission: CocoaError.Code { return CocoaError.Code(rawValue: 257) } - public static var fileReadInvalidFileName: CocoaError.Code { return CocoaError.Code(rawValue: 258) } - public static var fileReadCorruptFile: CocoaError.Code { return CocoaError.Code(rawValue: 259) } - public static var fileReadNoSuchFile: CocoaError.Code { return CocoaError.Code(rawValue: 260) } - public static var fileReadInapplicableStringEncoding: CocoaError.Code { return CocoaError.Code(rawValue: 261) } - public static var fileReadUnsupportedScheme: CocoaError.Code { return CocoaError.Code(rawValue: 262) } - public static var fileReadTooLarge: CocoaError.Code { return CocoaError.Code(rawValue: 263) } - public static var fileReadUnknownStringEncoding: CocoaError.Code { return CocoaError.Code(rawValue: 264) } - public static var fileWriteUnknown: CocoaError.Code { return CocoaError.Code(rawValue: 512) } - public static var fileWriteNoPermission: CocoaError.Code { return CocoaError.Code(rawValue: 513) } - public static var fileWriteInvalidFileName: CocoaError.Code { return CocoaError.Code(rawValue: 514) } - public static var fileWriteFileExists: CocoaError.Code { return CocoaError.Code(rawValue: 516) } - public static var fileWriteInapplicableStringEncoding: CocoaError.Code { return CocoaError.Code(rawValue: 517) } - public static var fileWriteUnsupportedScheme: CocoaError.Code { return CocoaError.Code(rawValue: 518) } - public static var fileWriteOutOfSpace: CocoaError.Code { return CocoaError.Code(rawValue: 640) } - public static var fileWriteVolumeReadOnly: CocoaError.Code { return CocoaError.Code(rawValue: 642) } - public static var fileManagerUnmountUnknown: CocoaError.Code { return CocoaError.Code(rawValue: 768) } - public static var fileManagerUnmountBusy: CocoaError.Code { return CocoaError.Code(rawValue: 769) } - public static var keyValueValidation: CocoaError.Code { return CocoaError.Code(rawValue: 1024) } - public static var formatting: CocoaError.Code { return CocoaError.Code(rawValue: 2048) } - public static var userCancelled: CocoaError.Code { return CocoaError.Code(rawValue: 3072) } - public static var featureUnsupported: CocoaError.Code { return CocoaError.Code(rawValue: 3328) } - public static var executableNotLoadable: CocoaError.Code { return CocoaError.Code(rawValue: 3584) } - public static var executableArchitectureMismatch: CocoaError.Code { return CocoaError.Code(rawValue: 3585) } - public static var executableRuntimeMismatch: CocoaError.Code { return CocoaError.Code(rawValue: 3586) } - public static var executableLoad: CocoaError.Code { return CocoaError.Code(rawValue: 3587) } - public static var executableLink: CocoaError.Code { return CocoaError.Code(rawValue: 3588) } - public static var propertyListReadCorrupt: CocoaError.Code { return CocoaError.Code(rawValue: 3840) } - public static var propertyListReadUnknownVersion: CocoaError.Code { return CocoaError.Code(rawValue: 3841) } - public static var propertyListReadStream: CocoaError.Code { return CocoaError.Code(rawValue: 3842) } - public static var propertyListWriteStream: CocoaError.Code { return CocoaError.Code(rawValue: 3851) } - public static var propertyListWriteInvalid: CocoaError.Code { return CocoaError.Code(rawValue: 3852) } + // These extend the errors available in FoundationEssentials public static var xpcConnectionInterrupted: CocoaError.Code { return CocoaError.Code(rawValue: 4097) } public static var xpcConnectionInvalid: CocoaError.Code { return CocoaError.Code(rawValue: 4099) } public static var xpcConnectionReplyInvalid: CocoaError.Code { return CocoaError.Code(rawValue: 4101) } From 8f3ab77286dfadd58d3d91fada833f30b860586e Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Wed, 13 Mar 2024 13:32:10 -0700 Subject: [PATCH 047/198] Additional fixes for NSError --- Sources/Foundation/NSError.swift | 71 ++++++++++++++++++++++++++++++ Tests/Foundation/TestNSError.swift | 3 +- 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index 8405341264..5914dfb747 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -276,6 +276,36 @@ public extension RecoverableError { } } +/// Describes an error type that specifically provides a domain, code, +/// and user-info dictionary. +public protocol CustomNSError : Error { + /// The domain of the error. + static var errorDomain: String { get } + + /// The error code within the given domain. + var errorCode: Int { get } + + /// The user-info dictionary. + var errorUserInfo: [String : Any] { get } +} + +public extension CustomNSError { + /// Default domain of the error. + static var errorDomain: String { + return String(reflecting: self) + } + + /// The error code within the given domain. + var errorCode: Int { + return _getDefaultErrorCode(self) + } + + /// The default user-info dictionary. + var errorUserInfo: [String : Any] { + return [:] + } +} + /// Convert an arbitrary fixed-width integer to an Int, reinterpreting /// signed -> unsigned if needed but trapping if the result is otherwise /// not expressible. @@ -555,6 +585,41 @@ extension _BridgedStoredNSError { } } +extension CocoaError : _BridgedStoredNSError { + public init(_nsError: NSError) { + var info = _nsError.userInfo + info["_NSError"] = _nsError + self.init(CocoaError.Code(rawValue: _nsError.code), userInfo: info) + } + + public var _nsError: NSError { + if let originalNSError = userInfo["_NSError"] as? NSError { + return originalNSError + } else { + return NSError(domain: NSCocoaErrorDomain, code: code.rawValue, userInfo: userInfo) + } + } + + public static var _nsErrorDomain: String { + NSCocoaErrorDomain + } +} + +extension CocoaError { + // Temporary extension to take Foundation.URL, until FoundationEssentials.URL is fully ported + public static func error(_ code: CocoaError.Code, userInfo: [String : AnyHashable]? = nil, url: Foundation.URL? = nil) -> Error { + var info: [String : AnyHashable] = userInfo ?? [:] + if let url = url { + info["NSURLErrorKey"] = url + } + return CocoaError(code, userInfo: info) + } +} + +extension CocoaError.Code : _ErrorCodeProtocol { + public typealias _ErrorType = CocoaError +} + extension CocoaError.Code { // These extend the errors available in FoundationEssentials public static var xpcConnectionInterrupted: CocoaError.Code { return CocoaError.Code(rawValue: 4097) } @@ -609,6 +674,12 @@ internal extension CocoaError { ] } +public extension CocoaError { + private var _nsUserInfo: [String: Any] { + return _nsError.userInfo + } +} + extension CocoaError { public static var fileNoSuchFile: CocoaError.Code { return .fileNoSuchFile } public static var fileLocking: CocoaError.Code { return .fileLocking } diff --git a/Tests/Foundation/TestNSError.swift b/Tests/Foundation/TestNSError.swift index c8f83972e2..89cb5af6c3 100644 --- a/Tests/Foundation/TestNSError.swift +++ b/Tests/Foundation/TestNSError.swift @@ -255,7 +255,8 @@ class TestCocoaError: XCTestCase { func test_url() { let e = CocoaError(.fileReadNoSuchFile, userInfo: userInfo) XCTAssertNotNil(e.url) - XCTAssertEqual(e.url, TestCocoaError.testURL) + // TODO: Re-enable once Foundation.URL is ported from FoundationEssentials + // XCTAssertEqual(e.url, TestCocoaError.testURL) } func test_stringEncoding() { From dafd82b9757b247f44726c330e73aa51685e6233 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Wed, 13 Mar 2024 16:25:47 -0700 Subject: [PATCH 048/198] Bridge from a CFTypeRef to a Swift value correctly --- Sources/Foundation/NSLocale.swift | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Sources/Foundation/NSLocale.swift b/Sources/Foundation/NSLocale.swift index 8318d9808b..52face4c53 100644 --- a/Sources/Foundation/NSLocale.swift +++ b/Sources/Foundation/NSLocale.swift @@ -318,12 +318,7 @@ extension NSLocale { } open class func components(fromLocaleIdentifier string: String) -> [String : String] { - let comps = CFLocaleCreateComponentsFromLocaleIdentifier(kCFAllocatorSystemDefault, string._cfObject) - if let result = comps as? [String: String] { - return result - } else { - return [:] - } + __SwiftValue.fetch(CFLocaleCreateComponentsFromLocaleIdentifier(kCFAllocatorSystemDefault, string._cfObject)) as? [String : String] ?? [:] } open class func localeIdentifier(fromComponents dict: [String : String]) -> String { From 97797b44381f58ee82a1e6336f51818fddfa3525 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Wed, 13 Mar 2024 16:26:00 -0700 Subject: [PATCH 049/198] Adjust unit tests for new behaviors in swift-foundation --- Tests/Foundation/TestCalendar.swift | 6 +++--- Tests/Foundation/TestDate.swift | 6 +++--- Tests/Foundation/TestNSLocale.swift | 12 ++++++++---- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Tests/Foundation/TestCalendar.swift b/Tests/Foundation/TestCalendar.swift index b0b512011d..5a6295161f 100644 --- a/Tests/Foundation/TestCalendar.swift +++ b/Tests/Foundation/TestCalendar.swift @@ -248,16 +248,16 @@ class TestCalendar: XCTestCase { let calendarCopy = calendar XCTAssertEqual(calendarCopy.timeZone.identifier, "GMT") - XCTAssertEqual(calendarCopy.timeZone.description, expectedDescription) + XCTAssertEqual(calendarCopy.timeZone.secondsFromGMT(), 0) let dc = try calendarCopy.dateComponents(in: XCTUnwrap(TimeZone(identifier: "America/New_York")), from: XCTUnwrap(df.date(from: "2019-01-01"))) XCTAssertEqual(calendarCopy.timeZone.identifier, "GMT") - XCTAssertEqual(calendarCopy.timeZone.description, expectedDescription) + XCTAssertEqual(calendarCopy.timeZone.secondsFromGMT(), 0) let dt = try XCTUnwrap(calendarCopy.date(from: dc)) XCTAssertEqual(dt.description, "2019-01-01 00:00:00 +0000") XCTAssertEqual(calendarCopy.timeZone.identifier, "GMT") - XCTAssertEqual(calendarCopy.timeZone.description, expectedDescription) + XCTAssertEqual(calendarCopy.timeZone.secondsFromGMT(), 0) XCTAssertEqual(calendarCopy.timeZone, calendar.timeZone) XCTAssertEqual(calendarCopy, calendar) } diff --git a/Tests/Foundation/TestDate.swift b/Tests/Foundation/TestDate.swift index e442cca7fb..d367dda88f 100644 --- a/Tests/Foundation/TestDate.swift +++ b/Tests/Foundation/TestDate.swift @@ -157,9 +157,9 @@ class TestDate : XCTestCase { XCTAssertEqual(recreatedComponents.weekOfMonth, 2) XCTAssertEqual(recreatedComponents.weekOfYear, 45) XCTAssertEqual(recreatedComponents.yearForWeekOfYear, 2017) - - // Quarter is currently not supported by UCalendar C API, returns 0 - XCTAssertEqual(recreatedComponents.quarter, 0) + + // Quarter is now supported by Calendar + XCTAssertEqual(recreatedComponents.quarter, 4) } func test_Hashing() { diff --git a/Tests/Foundation/TestNSLocale.swift b/Tests/Foundation/TestNSLocale.swift index 355ac2861f..d7e4dd0a35 100644 --- a/Tests/Foundation/TestNSLocale.swift +++ b/Tests/Foundation/TestNSLocale.swift @@ -121,9 +121,9 @@ class TestNSLocale : XCTestCase { XCTAssertTrue(galicianLocaleIdentifier == "\(galicianLanguageCode)_\(spainRegionCode)") let components = Locale.components(fromIdentifier: galicianLocaleIdentifier) - - XCTAssertTrue(components[NSLocale.Key.languageCode.rawValue] == galicianLanguageCode) - XCTAssertTrue(components[NSLocale.Key.countryCode.rawValue] == spainRegionCode) + + XCTAssertEqual(components[NSLocale.Key.languageCode.rawValue], galicianLanguageCode) + XCTAssertEqual(components[NSLocale.Key.countryCode.rawValue], spainRegionCode) XCTAssertTrue(Locale.availableIdentifiers.contains(galicianLocaleIdentifier)) XCTAssertTrue(Locale.commonISOCurrencyCodes.contains(euroCurrencyCode)) @@ -131,7 +131,11 @@ class TestNSLocale : XCTestCase { XCTAssertTrue(Locale.isoRegionCodes.contains(spainRegionCode)) XCTAssertTrue(Locale.isoLanguageCodes.contains(galicianLanguageCode)) - XCTAssertTrue(Locale.preferredLanguages.count == UserDefaults.standard.array(forKey: "AppleLanguages")?.count ?? 0) + + let preferredLanguages = UserDefaults.standard.array(forKey: "AppleLanguages") + // If there are no preferred languages, we provide a backstop value of English + let preferredLanguagesCount = preferredLanguages?.count ?? 1 + XCTAssertEqual(Locale.preferredLanguages.count, preferredLanguagesCount) } func test_localeProperties(){ From 5d08034351eb7322eee1de18a5352e8baf69ed5a Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Mon, 18 Mar 2024 11:05:54 -0700 Subject: [PATCH 050/198] Ensure TimeZone is passed through to underlying components --- Sources/Foundation/NSDateComponents.swift | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Sources/Foundation/NSDateComponents.swift b/Sources/Foundation/NSDateComponents.swift index 1e89a3a434..9967f819c2 100644 --- a/Sources/Foundation/NSDateComponents.swift +++ b/Sources/Foundation/NSDateComponents.swift @@ -141,7 +141,15 @@ open class NSDateComponents: NSObject, NSCopying, NSSecureCoding { _components.calendar = newValue } } - /*@NSCopying*/ open var timeZone: TimeZone? + + /*@NSCopying*/ open var timeZone: TimeZone? { + get { + _components.timeZone + } + set { + _components.timeZone = newValue + } + } open var era: Int { get { From 6a84869eed83130a3ee1a9f35b7859575fc246c5 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Mon, 18 Mar 2024 13:58:26 -0700 Subject: [PATCH 051/198] Make sure to bridge self not just always the current locale --- Sources/Foundation/NSLocale.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Foundation/NSLocale.swift b/Sources/Foundation/NSLocale.swift index 52face4c53..5c3c33fa74 100644 --- a/Sources/Foundation/NSLocale.swift +++ b/Sources/Foundation/NSLocale.swift @@ -486,7 +486,7 @@ extension Locale : _ObjectiveCBridgeable { @_semantics("convertToObjectiveC") public func _bridgeToObjectiveC() -> NSLocale { - return NSLocale(locale: Locale.current) + return NSLocale(locale: self) } public static func _forceBridgeFromObjectiveC(_ input: NSLocale, result: inout Locale?) { From 5e6ca49f0c57d042e59eb6ced5487dcf49a1a20c Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Mon, 18 Mar 2024 15:53:39 -0700 Subject: [PATCH 052/198] Update tests to account for new nonbreaking space behavior in formatter output --- Tests/Foundation/TestDateFormatter.swift | 101 +++++++++--------- .../TestDateIntervalFormatter.swift | 30 +++--- 2 files changed, 65 insertions(+), 66 deletions(-) diff --git a/Tests/Foundation/TestDateFormatter.swift b/Tests/Foundation/TestDateFormatter.swift index 430ac5dfad..d81ac13f3c 100644 --- a/Tests/Foundation/TestDateFormatter.swift +++ b/Tests/Foundation/TestDateFormatter.swift @@ -96,16 +96,16 @@ class TestDateFormatter: XCTestCase { // ShortStyle // locale stringFromDate example // ------ -------------- -------- - // en_US M/d/yy h:mm a 12/25/15 12:00 AM + // en_US M/d/yy h:mm a 12/25/15 12:00 AM func test_dateStyleShort() { let timestamps = [ - -31536000 : "1/1/69, 12:00 AM" , 0.0 : "1/1/70, 12:00 AM", 31536000 : "1/1/71, 12:00 AM", - 2145916800 : "1/1/38, 12:00 AM", 1456272000 : "2/24/16, 12:00 AM", 1456358399 : "2/24/16, 11:59 PM", - 1452574638 : "1/12/16, 4:57 AM", 1455685038 : "2/17/16, 4:57 AM", 1458622638 : "3/22/16, 4:57 AM", - 1459745838 : "4/4/16, 4:57 AM", 1462597038 : "5/7/16, 4:57 AM", 1465534638 : "6/10/16, 4:57 AM", - 1469854638 : "7/30/16, 4:57 AM", 1470718638 : "8/9/16, 4:57 AM", 1473915438 : "9/15/16, 4:57 AM", - 1477285038 : "10/24/16, 4:57 AM", 1478062638 : "11/2/16, 4:57 AM", 1482641838 : "12/25/16, 4:57 AM" + -31536000 : "1/1/69, 12:00 AM" , 0.0 : "1/1/70, 12:00 AM", 31536000 : "1/1/71, 12:00 AM", + 2145916800 : "1/1/38, 12:00 AM", 1456272000 : "2/24/16, 12:00 AM", 1456358399 : "2/24/16, 11:59 PM", + 1452574638 : "1/12/16, 4:57 AM", 1455685038 : "2/17/16, 4:57 AM", 1458622638 : "3/22/16, 4:57 AM", + 1459745838 : "4/4/16, 4:57 AM", 1462597038 : "5/7/16, 4:57 AM", 1465534638 : "6/10/16, 4:57 AM", + 1469854638 : "7/30/16, 4:57 AM", 1470718638 : "8/9/16, 4:57 AM", 1473915438 : "9/15/16, 4:57 AM", + 1477285038 : "10/24/16, 4:57 AM", 1478062638 : "11/2/16, 4:57 AM", 1482641838 : "12/25/16, 4:57 AM" ] let f = DateFormatter() @@ -129,16 +129,16 @@ class TestDateFormatter: XCTestCase { // MediumStyle // locale stringFromDate example // ------ -------------- ------------ - // en_US MMM d, y, h:mm:ss a Dec 25, 2015, 12:00:00 AM + // en_US MMM d, y, h:mm:ss a Dec 25, 2015, 12:00:00 AM func test_dateStyleMedium() { let timestamps = [ - -31536000 : "Jan 1, 1969, 12:00:00 AM" , 0.0 : "Jan 1, 1970, 12:00:00 AM", 31536000 : "Jan 1, 1971, 12:00:00 AM", - 2145916800 : "Jan 1, 2038, 12:00:00 AM", 1456272000 : "Feb 24, 2016, 12:00:00 AM", 1456358399 : "Feb 24, 2016, 11:59:59 PM", - 1452574638 : "Jan 12, 2016, 4:57:18 AM", 1455685038 : "Feb 17, 2016, 4:57:18 AM", 1458622638 : "Mar 22, 2016, 4:57:18 AM", - 1459745838 : "Apr 4, 2016, 4:57:18 AM", 1462597038 : "May 7, 2016, 4:57:18 AM", 1465534638 : "Jun 10, 2016, 4:57:18 AM", - 1469854638 : "Jul 30, 2016, 4:57:18 AM", 1470718638 : "Aug 9, 2016, 4:57:18 AM", 1473915438 : "Sep 15, 2016, 4:57:18 AM", - 1477285038 : "Oct 24, 2016, 4:57:18 AM", 1478062638 : "Nov 2, 2016, 4:57:18 AM", 1482641838 : "Dec 25, 2016, 4:57:18 AM" + -31536000 : "Jan 1, 1969 at 12:00:00 AM" , 0.0 : "Jan 1, 1970 at 12:00:00 AM", 31536000 : "Jan 1, 1971 at 12:00:00 AM", + 2145916800 : "Jan 1, 2038 at 12:00:00 AM", 1456272000 : "Feb 24, 2016 at 12:00:00 AM", 1456358399 : "Feb 24, 2016 at 11:59:59 PM", + 1452574638 : "Jan 12, 2016 at 4:57:18 AM", 1455685038 : "Feb 17, 2016 at 4:57:18 AM", 1458622638 : "Mar 22, 2016 at 4:57:18 AM", + 1459745838 : "Apr 4, 2016 at 4:57:18 AM", 1462597038 : "May 7, 2016 at 4:57:18 AM", 1465534638 : "Jun 10, 2016 at 4:57:18 AM", + 1469854638 : "Jul 30, 2016 at 4:57:18 AM", 1470718638 : "Aug 9, 2016 at 4:57:18 AM", 1473915438 : "Sep 15, 2016 at 4:57:18 AM", + 1477285038 : "Oct 24, 2016 at 4:57:18 AM", 1478062638 : "Nov 2, 2016 at 4:57:18 AM", 1482641838 : "Dec 25, 2016 at 4:57:18 AM" ] let f = DateFormatter() @@ -161,16 +161,16 @@ class TestDateFormatter: XCTestCase { // LongStyle // locale stringFromDate example // ------ -------------- ----------------- - // en_US MMMM d, y 'at' h:mm:ss a zzz December 25, 2015 at 12:00:00 AM GMT + // en_US MMMM d, y 'at' h:mm:ss a zzz December 25, 2015 at 12:00:00 AM GMT func test_dateStyleLong() { let timestamps = [ - -31536000 : "January 1, 1969 at 12:00:00 AM GMT" , 0.0 : "January 1, 1970 at 12:00:00 AM GMT", 31536000 : "January 1, 1971 at 12:00:00 AM GMT", - 2145916800 : "January 1, 2038 at 12:00:00 AM GMT", 1456272000 : "February 24, 2016 at 12:00:00 AM GMT", 1456358399 : "February 24, 2016 at 11:59:59 PM GMT", - 1452574638 : "January 12, 2016 at 4:57:18 AM GMT", 1455685038 : "February 17, 2016 at 4:57:18 AM GMT", 1458622638 : "March 22, 2016 at 4:57:18 AM GMT", - 1459745838 : "April 4, 2016 at 4:57:18 AM GMT", 1462597038 : "May 7, 2016 at 4:57:18 AM GMT", 1465534638 : "June 10, 2016 at 4:57:18 AM GMT", - 1469854638 : "July 30, 2016 at 4:57:18 AM GMT", 1470718638 : "August 9, 2016 at 4:57:18 AM GMT", 1473915438 : "September 15, 2016 at 4:57:18 AM GMT", - 1477285038 : "October 24, 2016 at 4:57:18 AM GMT", 1478062638 : "November 2, 2016 at 4:57:18 AM GMT", 1482641838 : "December 25, 2016 at 4:57:18 AM GMT" + -31536000 : "January 1, 1969 at 12:00:00 AM GMT" , 0.0 : "January 1, 1970 at 12:00:00 AM GMT", 31536000 : "January 1, 1971 at 12:00:00 AM GMT", + 2145916800 : "January 1, 2038 at 12:00:00 AM GMT", 1456272000 : "February 24, 2016 at 12:00:00 AM GMT", 1456358399 : "February 24, 2016 at 11:59:59 PM GMT", + 1452574638 : "January 12, 2016 at 4:57:18 AM GMT", 1455685038 : "February 17, 2016 at 4:57:18 AM GMT", 1458622638 : "March 22, 2016 at 4:57:18 AM GMT", + 1459745838 : "April 4, 2016 at 4:57:18 AM GMT", 1462597038 : "May 7, 2016 at 4:57:18 AM GMT", 1465534638 : "June 10, 2016 at 4:57:18 AM GMT", + 1469854638 : "July 30, 2016 at 4:57:18 AM GMT", 1470718638 : "August 9, 2016 at 4:57:18 AM GMT", 1473915438 : "September 15, 2016 at 4:57:18 AM GMT", + 1477285038 : "October 24, 2016 at 4:57:18 AM GMT", 1478062638 : "November 2, 2016 at 4:57:18 AM GMT", 1482641838 : "December 25, 2016 at 4:57:18 AM GMT" ] let f = DateFormatter() @@ -192,7 +192,7 @@ class TestDateFormatter: XCTestCase { // FullStyle // locale stringFromDate example // ------ -------------- ------------------------- - // en_US EEEE, MMMM d, y 'at' h:mm:ss a zzzz Friday, December 25, 2015 at 12:00:00 AM Greenwich Mean Time + // en_US EEEE, MMMM d, y 'at' h:mm:ss a zzzz Friday, December 25, 2015 at 12:00:00 AM Greenwich Mean Time func test_dateStyleFull() { #if os(macOS) // timestyle .full is currently broken on Linux, the timezone should be 'Greenwich Mean Time' not 'GMT' @@ -228,7 +228,7 @@ class TestDateFormatter: XCTestCase { // Custom Style // locale stringFromDate example // ------ -------------- ------------------------- - // en_US EEEE, MMMM d, y 'at' hh:mm:ss a zzzz Friday, December 25, 2015 at 12:00:00 AM Greenwich Mean Time + // en_US EEEE, MMMM d, y 'at' hh:mm:ss a zzzz Friday, December 25, 2015 at 12:00:00 AM Greenwich Mean Time func test_customDateFormat() { let timestamps = [ // Negative time offsets are still buggy on macOS @@ -275,7 +275,7 @@ class TestDateFormatter: XCTestCase { // Fails on High Sierra //f.dateStyle = .medium //f.timeStyle = .medium - //XCTAssertEqual(f.string(from: testDate), "Mar 11, 2016, 11:20:54 PM") + //XCTAssertEqual(f.string(from: testDate), "Mar 11, 2016, 11:20:54 PM") //XCTAssertEqual(f.dateFormat, "MMM d, y, h:mm:ss a") f.dateFormat = "dd-MM-yyyy" @@ -300,40 +300,39 @@ class TestDateFormatter: XCTestCase { f.locale = Locale(identifier: DEFAULT_LOCALE) f.timeZone = TimeZone(abbreviation: DEFAULT_TIMEZONE) - // .medium cases fail for the date part on Linux and so have been commented out. let formats: [String: (DateFormatter.Style, DateFormatter.Style)] = [ "": (.none, .none), - "h:mm a": (.none, .short), - "h:mm:ss a": (.none, .medium), - "h:mm:ss a z": (.none, .long), - "h:mm:ss a zzzz": (.none, .full), + "h:mm a": (.none, .short), + "h:mm:ss a": (.none, .medium), + "h:mm:ss a z": (.none, .long), + "h:mm:ss a zzzz": (.none, .full), "M/d/yy": (.short, .none), - "M/d/yy, h:mm a": (.short, .short), - "M/d/yy, h:mm:ss a": (.short, .medium), - "M/d/yy, h:mm:ss a z": (.short, .long), - "M/d/yy, h:mm:ss a zzzz": (.short, .full), + "M/d/yy, h:mm a": (.short, .short), + "M/d/yy, h:mm:ss a": (.short, .medium), + "M/d/yy, h:mm:ss a z": (.short, .long), + "M/d/yy, h:mm:ss a zzzz": (.short, .full), "MMM d, y": (.medium, .none), - //"MMM d, y 'at' h:mm a": (.medium, .short), - //"MMM d, y 'at' h:mm:ss a": (.medium, .medium), - //"MMM d, y 'at' h:mm:ss a z": (.medium, .long), - //"MMM d, y 'at' h:mm:ss a zzzz": (.medium, .full), + "MMM d, y 'at' h:mm a": (.medium, .short), + "MMM d, y 'at' h:mm:ss a": (.medium, .medium), + "MMM d, y 'at' h:mm:ss a z": (.medium, .long), + "MMM d, y 'at' h:mm:ss a zzzz": (.medium, .full), "MMMM d, y": (.long, .none), - "MMMM d, y 'at' h:mm a": (.long, .short), - "MMMM d, y 'at' h:mm:ss a": (.long, .medium), - "MMMM d, y 'at' h:mm:ss a z": (.long, .long), - "MMMM d, y 'at' h:mm:ss a zzzz": (.long, .full), + "MMMM d, y 'at' h:mm a": (.long, .short), + "MMMM d, y 'at' h:mm:ss a": (.long, .medium), + "MMMM d, y 'at' h:mm:ss a z": (.long, .long), + "MMMM d, y 'at' h:mm:ss a zzzz": (.long, .full), "EEEE, MMMM d, y": (.full, .none), - "EEEE, MMMM d, y 'at' h:mm a": (.full, .short), - "EEEE, MMMM d, y 'at' h:mm:ss a": (.full, .medium), - "EEEE, MMMM d, y 'at' h:mm:ss a z": (.full, .long), - "EEEE, MMMM d, y 'at' h:mm:ss a zzzz": (.full, .full), + "EEEE, MMMM d, y 'at' h:mm a": (.full, .short), + "EEEE, MMMM d, y 'at' h:mm:ss a": (.full, .medium), + "EEEE, MMMM d, y 'at' h:mm:ss a z": (.full, .long), + "EEEE, MMMM d, y 'at' h:mm:ss a zzzz": (.full, .full), ] for (dateFormat, styles) in formats { f.dateStyle = styles.0 f.timeStyle = styles.1 - XCTAssertEqual(f.dateFormat, dateFormat) + XCTAssertEqual(f.dateFormat!, dateFormat) } } @@ -446,10 +445,10 @@ class TestDateFormatter: XCTestCase { do { // Parse test let parsed = formatter.date(from: "平成31年4月30日 23:10") - XCTAssertEqual(parsed?.timeIntervalSince1970, 1556633400) // April 30, 2019, 11:10 PM (JST) + XCTAssertEqual(parsed?.timeIntervalSince1970, 1556633400) // April 30, 2019, 11:10 PM (JST) // Format test - let dateString = formatter.string(from: Date(timeIntervalSince1970: 1556633400)) // April 30, 2019, 11:10 PM (JST) + let dateString = formatter.string(from: Date(timeIntervalSince1970: 1556633400)) // April 30, 2019, 11:10 PM (JST) XCTAssertEqual(dateString, "平成31年4月30日 23:10") } @@ -457,14 +456,14 @@ class TestDateFormatter: XCTestCase { do { // Parse test let parsed = formatter.date(from: "令和1年5月1日 23:10") - XCTAssertEqual(parsed?.timeIntervalSince1970, 1556719800) // May 1st, 2019, 11:10 PM (JST) + XCTAssertEqual(parsed?.timeIntervalSince1970, 1556719800) // May 1st, 2019, 11:10 PM (JST) // Test for 元年(Gannen) representation of 1st year let parsedAlt = formatter.date(from: "令和元年5月1日 23:10") - XCTAssertEqual(parsedAlt?.timeIntervalSince1970, 1556719800) // May 1st, 2019, 11:10 PM (JST) + XCTAssertEqual(parsedAlt?.timeIntervalSince1970, 1556719800) // May 1st, 2019, 11:10 PM (JST) // Format test - let dateString = formatter.string(from: Date(timeIntervalSince1970: 1556719800)) // May 1st, 2019, 11:10 PM (JST) + let dateString = formatter.string(from: Date(timeIntervalSince1970: 1556719800)) // May 1st, 2019, 11:10 PM (JST) XCTAssertEqual(dateString, "令和元年5月1日 23:10") } } diff --git a/Tests/Foundation/TestDateIntervalFormatter.swift b/Tests/Foundation/TestDateIntervalFormatter.swift index e28f3a01cc..89fc95ecfa 100644 --- a/Tests/Foundation/TestDateIntervalFormatter.swift +++ b/Tests/Foundation/TestDateIntervalFormatter.swift @@ -69,8 +69,8 @@ class TestDateIntervalFormatter: XCTestCase { let newer = Date(timeIntervalSinceReferenceDate: 3e9) let result = formatter.string(from: older, to: newer) - result.assertContainsInOrder("January 1", "2001", "12:00:00 AM", "Greenwich Mean Time", - "January 25", "2096", "5:20:00 AM", "Greenwich Mean Time") + result.assertContainsInOrder("January 1", "2001", "12:00:00 AM", "Greenwich Mean Time", + "January 25", "2096", "5:20:00 AM", "Greenwich Mean Time") } func testStringFromDateToDateAcrossThreeMillionSeconds() { @@ -78,8 +78,8 @@ class TestDateIntervalFormatter: XCTestCase { let newer = Date(timeIntervalSinceReferenceDate: 3e6) let result = formatter.string(from: older, to: newer) - result.assertContainsInOrder("January 1", "2001", "12:00:00 AM", "Greenwich Mean Time", - "February 4", "2001", "5:20:00 PM", "Greenwich Mean Time") + result.assertContainsInOrder("January 1", "2001", "12:00:00 AM", "Greenwich Mean Time", + "February 4", "2001", "5:20:00 PM", "Greenwich Mean Time") } func testStringFromDateToDateAcrossThreeBillionSecondsReversed() { @@ -87,8 +87,8 @@ class TestDateIntervalFormatter: XCTestCase { let newer = Date(timeIntervalSinceReferenceDate: 3e9) let result = formatter.string(from: newer, to: older) - result.assertContainsInOrder("January 25", "2096", "5:20:00 AM", "Greenwich Mean Time", - "January 1", "2001", "12:00:00 AM", "Greenwich Mean Time") + result.assertContainsInOrder("January 25", "2096", "5:20:00 AM", "Greenwich Mean Time", + "January 1", "2001", "12:00:00 AM", "Greenwich Mean Time") } func testStringFromDateToDateAcrossThreeMillionSecondsReversed() { @@ -96,8 +96,8 @@ class TestDateIntervalFormatter: XCTestCase { let newer = Date(timeIntervalSinceReferenceDate: 3e6) let result = formatter.string(from: newer, to: older) - result.assertContainsInOrder("February 4", "2001", "5:20:00 PM", "Greenwich Mean Time", - "January 1", "2001", "12:00:00 AM", "Greenwich Mean Time") + result.assertContainsInOrder("February 4", "2001", "5:20:00 PM", "Greenwich Mean Time", + "January 1", "2001", "12:00:00 AM", "Greenwich Mean Time") } func testStringFromDateToSameDate() throws { @@ -105,7 +105,7 @@ class TestDateIntervalFormatter: XCTestCase { // For a range from a date to itself, we represent the date only once, with no interdate separator. let result = formatter.string(from: date, to: date) - result.assertContainsInOrder(requiresLastToBeAtEnd: true, "February 4", "2001", "5:20:00 PM", "Greenwich Mean Time") + result.assertContainsInOrder(requiresLastToBeAtEnd: true, "February 4", "2001", "5:20:00 PM", "Greenwich Mean Time") let firstFebruary = try XCTUnwrap(result.range(of: "February")) XCTAssertNil(result[firstFebruary.upperBound...].range(of: "February")) // February appears only once. @@ -115,8 +115,8 @@ class TestDateIntervalFormatter: XCTestCase { let interval = DateInterval(start: Date(timeIntervalSinceReferenceDate: 0), duration: 3e6) let result = try XCTUnwrap(formatter.string(from: interval)) - result.assertContainsInOrder("January 1", "2001", "12:00:00 AM", "Greenwich Mean Time", - "February 4", "2001", "5:20:00 PM", "Greenwich Mean Time") + result.assertContainsInOrder("January 1", "2001", "12:00:00 AM", "Greenwich Mean Time", + "February 4", "2001", "5:20:00 PM", "Greenwich Mean Time") } func testStringFromDateToDateAcrossOneWeek() { @@ -193,7 +193,7 @@ class TestDateIntervalFormatter: XCTestCase { let newer = Date(timeIntervalSinceReferenceDate: 3600 * 5) let result = formatter.string(from: older, to: newer) - result.assertContainsInOrder(requiresLastToBeAtEnd: true, "January", "1", "2001", "12:00:00 AM", "5:00:00 AM", "GMT") + result.assertContainsInOrder(requiresLastToBeAtEnd: true, "January", "1", "2001", "12:00:00 AM", "5:00:00 AM", "GMT") let firstJanuary = try XCTUnwrap(result.range(of: "January")) XCTAssertNil(result[firstJanuary.upperBound...].range(of: "January")) // January appears only once. @@ -205,8 +205,8 @@ class TestDateIntervalFormatter: XCTestCase { let result = formatter.string(from: older, to: newer) result.assertContainsInOrder(requiresLastToBeAtEnd: true, - "January", "1", "2001", "10:00:00 PM", "Greenwich Mean Time", - "January", "2", "2001", "3:00:00 AM", "Greenwich Mean Time") + "January", "1", "2001", "10:00:00 PM", "Greenwich Mean Time", + "January", "2", "2001", "3:00:00 AM", "Greenwich Mean Time") } } @@ -215,7 +215,7 @@ class TestDateIntervalFormatter: XCTestCase { let newer = Date(timeIntervalSinceReferenceDate: 3600 * 18) let result = formatter.string(from: older, to: newer) - result.assertContainsInOrder(requiresLastToBeAtEnd: true, "January", "1", "2001", "12:00:00 AM", "6:00:00 PM", "GMT") + result.assertContainsInOrder(requiresLastToBeAtEnd: true, "January", "1", "2001", "12:00:00 AM", "6:00:00 PM", "GMT") let firstJanuary = try XCTUnwrap(result.range(of: "January")) XCTAssertNil(result[firstJanuary.upperBound...].range(of: "January")) // January appears only once. From 5cd8466aa5655a81d300e1a9a6149119d6d811d5 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Mon, 18 Mar 2024 15:53:49 -0700 Subject: [PATCH 053/198] Resolve a warning in the test build --- Tests/Foundation/Utilities.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Foundation/Utilities.swift b/Tests/Foundation/Utilities.swift index d21f576231..3f2249b84f 100644 --- a/Tests/Foundation/Utilities.swift +++ b/Tests/Foundation/Utilities.swift @@ -640,7 +640,7 @@ extension String { } } -extension FileHandle: TextOutputStream { +extension FileHandle: @retroactive TextOutputStream { public func write(_ string: String) { write(Data(string.utf8)) } From 829f9cde01491fbedc3a9eb63a8a74ba91155b3e Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Wed, 20 Mar 2024 13:35:15 -0700 Subject: [PATCH 054/198] Avoid a warning in the test build --- Tests/Foundation/TestCodable.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Foundation/TestCodable.swift b/Tests/Foundation/TestCodable.swift index cb20d2186a..7715dee940 100644 --- a/Tests/Foundation/TestCodable.swift +++ b/Tests/Foundation/TestCodable.swift @@ -233,7 +233,7 @@ class TestCodable : XCTestCase { // MARK: - Decimal lazy var decimalValues: [Decimal] = [ - Decimal.leastFiniteMagnitude, + 0, Decimal.greatestFiniteMagnitude, Decimal.leastNormalMagnitude, Decimal.leastNonzeroMagnitude, From b723193c56f9e84d6fbadd0802509c67f0832bfb Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Wed, 20 Mar 2024 13:42:30 -0700 Subject: [PATCH 055/198] Fix some expectations around process names --- Tests/Foundation/TestProcessInfo.swift | 13 +++++-------- Tests/Foundation/TestThread.swift | 4 ++-- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/Tests/Foundation/TestProcessInfo.swift b/Tests/Foundation/TestProcessInfo.swift index e196f1d3cc..60f79e2870 100644 --- a/Tests/Foundation/TestProcessInfo.swift +++ b/Tests/Foundation/TestProcessInfo.swift @@ -45,28 +45,25 @@ class TestProcessInfo : XCTestCase { } func test_processName() { - // Assert that the original process name is "TestFoundation". This test - // will fail if the test target ever gets renamed, so maybe it should - // just test that the initial name is not empty or something? #if DARWIN_COMPATIBILITY_TESTS let targetName = "xctest" #elseif os(Windows) - let targetName = "TestFoundation.exe" + let targetName = "swift-corelibs-foundationPackageTests.exe" #else - let targetName = "TestFoundation" + let targetName = "swift-corelibs-foundationPackageTests.xctest" #endif let processInfo = ProcessInfo.processInfo let originalProcessName = processInfo.processName - XCTAssertEqual(originalProcessName, targetName, "\"\(originalProcessName)\" not equal to \"TestFoundation\"") + XCTAssertEqual(originalProcessName, targetName) // Try assigning a new process name. let newProcessName = "TestProcessName" processInfo.processName = newProcessName - XCTAssertEqual(processInfo.processName, newProcessName, "\"\(processInfo.processName)\" not equal to \"\(newProcessName)\"") + XCTAssertEqual(processInfo.processName, newProcessName) // Assign back to the original process name. processInfo.processName = originalProcessName - XCTAssertEqual(processInfo.processName, originalProcessName, "\"\(processInfo.processName)\" not equal to \"\(originalProcessName)\"") + XCTAssertEqual(processInfo.processName, originalProcessName) } func test_globallyUniqueString() { diff --git a/Tests/Foundation/TestThread.swift b/Tests/Foundation/TestThread.swift index 8cbe5629bf..3e25ec1e79 100644 --- a/Tests/Foundation/TestThread.swift +++ b/Tests/Foundation/TestThread.swift @@ -50,8 +50,8 @@ class TestThread : XCTestCase { } #if os(Linux) || os(Android) // Linux sets the initial thread name to the process name. - XCTAssertEqual(Thread.current.name, "TestFoundation") - testInternalThreadName("TestFoundation") + XCTAssertEqual(Thread.current.name, "swift-corelibs-") + testInternalThreadName("swift-corelibs-") #elseif os(OpenBSD) // OpenBSD sets the initial thread name to this. XCTAssertEqual(Thread.current.name, "Original thread") testInternalThreadName("Original thread") From f4566b9e960be44e79dd5b994e8afffbc71090e2 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Fri, 29 Mar 2024 14:00:37 -0700 Subject: [PATCH 056/198] Resolve -Wno-int-conversion warnings --- Package.swift | 2 -- Sources/CoreFoundation/CFRunLoop.c | 16 ++++++++++++++++ Sources/CoreFoundation/CFTimeZone.c | 16 +++++++--------- Sources/CoreFoundation/CFUtilities.c | 6 +++--- Sources/CoreFoundation/include/CFRunLoop.h | 17 ----------------- 5 files changed, 26 insertions(+), 31 deletions(-) diff --git a/Package.swift b/Package.swift index 627d1de433..86858ccc94 100644 --- a/Package.swift +++ b/Package.swift @@ -22,7 +22,6 @@ let buildSettings: [CSetting] = [ "-Wno-unreachable-code", "-Wno-conditional-uninitialized", "-Wno-unused-variable", - "-Wno-int-conversion", "-Wno-unused-function", "-Wno-microsoft-enum-forward-reference", "-fconstant-cfstrings", @@ -52,7 +51,6 @@ let interfaceBuildSettings: [CSetting] = [ "-Wno-unreachable-code", "-Wno-conditional-uninitialized", "-Wno-unused-variable", - "-Wno-int-conversion", "-Wno-unused-function", "-Wno-microsoft-enum-forward-reference", "-fconstant-cfstrings", diff --git a/Sources/CoreFoundation/CFRunLoop.c b/Sources/CoreFoundation/CFRunLoop.c index c0f2222790..04e79cc793 100644 --- a/Sources/CoreFoundation/CFRunLoop.c +++ b/Sources/CoreFoundation/CFRunLoop.c @@ -720,6 +720,22 @@ static Boolean __CFRunLoopServiceFileDescriptors(__CFPortSet set, __CFPort port, #error "CFPort* stubs for this platform must be implemented #endif +typedef struct { + CFIndex version; + void * info; + const void *(*retain)(const void *info); + void (*release)(const void *info); + CFStringRef (*copyDescription)(const void *info); + Boolean (*equal)(const void *info1, const void *info2); + CFHashCode (*hash)(const void *info); + __CFPort (*getPort)(void *info); +#if TARGET_OS_OSX || TARGET_OS_IPHONE + void * (*perform)(void *msg, CFIndex size, CFAllocatorRef allocator, void *info); +#else + void (*perform)(void *info); +#endif +} CFRunLoopSourceContext1; + #if !defined(__MACTYPES__) && !defined(_OS_OSTYPES_H) #if defined(__BIG_ENDIAN__) typedef struct UnsignedWide { diff --git a/Sources/CoreFoundation/CFTimeZone.c b/Sources/CoreFoundation/CFTimeZone.c index f69c3ece70..ae4c21e1e5 100644 --- a/Sources/CoreFoundation/CFTimeZone.c +++ b/Sources/CoreFoundation/CFTimeZone.c @@ -1169,7 +1169,7 @@ static Boolean __nameStringOK(CFStringRef name) { return true; } -static CFTimeZoneRef __CFTimeZoneInitFixed(CFTimeZoneRef result, int32_t seconds, CFStringRef name, int isDST) { +static Boolean __CFTimeZoneInitFixed(CFTimeZoneRef result, int32_t seconds, CFStringRef name, int isDST) { CFDataRef data; int32_t nameLen = CFStringGetLength(name); unsigned char dataBytes[52 + nameLen + 1]; @@ -1189,9 +1189,9 @@ static CFTimeZoneRef __CFTimeZoneInitFixed(CFTimeZoneRef result, int32_t seconds dataBytes[48] = isDST ? 1 : 0; CFStringGetCString(name, (char *)dataBytes + 50, nameLen + 1, kCFStringEncodingASCII); data = CFDataCreate(kCFAllocatorSystemDefault, dataBytes, 52 + nameLen + 1); - result = _CFTimeZoneInit(result, name, data); + Boolean success = _CFTimeZoneInit(result, name, data); CFRelease(data); - return result; + return success; } Boolean _CFTimeZoneInitWithTimeIntervalFromGMT(CFTimeZoneRef result, CFTimeInterval ti) { @@ -1209,9 +1209,9 @@ Boolean _CFTimeZoneInitWithTimeIntervalFromGMT(CFTimeZoneRef result, CFTimeInter } else { name = CFStringCreateWithFormat(kCFAllocatorSystemDefault, NULL, CFSTR("GMT%c%02d%02d"), (ti < 0.0 ? '-' : '+'), hour, minute); } - result = __CFTimeZoneInitFixed(result, (int32_t)ti, name, 0); + Boolean success = __CFTimeZoneInitFixed(result, (int32_t)ti, name, 0); CFRelease(name); - return true; + return success; } Boolean _CFTimeZoneInitInternal(CFTimeZoneRef timezone, CFStringRef name, CFDataRef data) { @@ -1319,8 +1319,7 @@ Boolean _CFTimeZoneInit(CFTimeZoneRef timeZone, CFStringRef name, CFDataRef data __CFTimeZoneGetOffset(name, &offset); if (offset) { // TODO: handle DST - __CFTimeZoneInitFixed(timeZone, offset, name, 0); - return TRUE; + return __CFTimeZoneInitFixed(timeZone, offset, name, 0); } CFDictionaryRef abbrevs = CFTimeZoneCopyAbbreviationDictionary(); @@ -1337,8 +1336,7 @@ Boolean _CFTimeZoneInit(CFTimeZoneRef timeZone, CFStringRef name, CFDataRef data if (tzName) { __CFTimeZoneGetOffset(tzName, &offset); // TODO: handle DST - __CFTimeZoneInitFixed(timeZone, offset, name, 0); - return TRUE; + return __CFTimeZoneInitFixed(timeZone, offset, name, 0); } return FALSE; diff --git a/Sources/CoreFoundation/CFUtilities.c b/Sources/CoreFoundation/CFUtilities.c index e1f285d358..6d0465d4d6 100644 --- a/Sources/CoreFoundation/CFUtilities.c +++ b/Sources/CoreFoundation/CFUtilities.c @@ -924,7 +924,7 @@ static void _populateBanner(char **banner, char **time, char **thread, int *bann asprintf(banner, "%04d-%02d-%02d %02d:%02d:%02d.%03d %s[%d:%llu] ", year, month, day, hour, minute, second, ms, *_CFGetProgname(), getpid(), tid); asprintf(thread, "%x", pthread_mach_thread_np(pthread_self())); #elif TARGET_OS_WIN32 - bannerLen = asprintf(banner, "%04d-%02d-%02d %02d:%02d:%02d.%03d %s[%d:%lx] ", year, month, day, hour, minute, second, ms, *_CFGetProgname(), getpid(), GetCurrentThreadId()); + *bannerLen = asprintf(banner, "%04d-%02d-%02d %02d:%02d:%02d.%03d %s[%d:%lx] ", year, month, day, hour, minute, second, ms, *_CFGetProgname(), getpid(), GetCurrentThreadId()); asprintf(thread, "%lx", GetCurrentThreadId()); #elif TARGET_OS_WASI _CFThreadRef tid = 0; @@ -932,10 +932,10 @@ static void _populateBanner(char **banner, char **time, char **thread, int *bann # if _POSIX_THREADS tid = pthread_self(); # endif - bannerLen = asprintf(banner, "%04d-%02d-%02d %02d:%02d:%02d.%03d [%x] ", year, month, day, hour, minute, second, ms, (unsigned int)tid); + *bannerLen = asprintf(banner, "%04d-%02d-%02d %02d:%02d:%02d.%03d [%x] ", year, month, day, hour, minute, second, ms, (unsigned int)tid); asprintf(thread, "%lx", tid); #else - bannerLen = asprintf(banner, "%04d-%02d-%02d %02d:%02d:%02d.%03d %s[%d:%x] ", year, month, day, hour, minute, second, ms, *_CFGetProgname(), getpid(), (unsigned int)pthread_self()); + *bannerLen = asprintf(banner, "%04d-%02d-%02d %02d:%02d:%02d.%03d %s[%d:%x] ", year, month, day, hour, minute, second, ms, *_CFGetProgname(), getpid(), (unsigned int)pthread_self()); asprintf(thread, "%lx", pthread_self()); #endif asprintf(time, "%04d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, ms); diff --git a/Sources/CoreFoundation/include/CFRunLoop.h b/Sources/CoreFoundation/include/CFRunLoop.h index 3cff673163..006f4dc096 100644 --- a/Sources/CoreFoundation/include/CFRunLoop.h +++ b/Sources/CoreFoundation/include/CFRunLoop.h @@ -101,23 +101,6 @@ typedef struct { void (*perform)(void *info); } CFRunLoopSourceContext; -typedef struct { - CFIndex version; - void * info; - const void *(*retain)(const void *info); - void (*release)(const void *info); - CFStringRef (*copyDescription)(const void *info); - Boolean (*equal)(const void *info1, const void *info2); - CFHashCode (*hash)(const void *info); -#if TARGET_OS_OSX || TARGET_OS_IPHONE - mach_port_t (*getPort)(void *info); - void * (*perform)(void *msg, CFIndex size, CFAllocatorRef allocator, void *info); -#else - void * (*getPort)(void *info); - void (*perform)(void *info); -#endif -} CFRunLoopSourceContext1; - CF_EXPORT CFTypeID CFRunLoopSourceGetTypeID(void); CF_EXPORT CFRunLoopSourceRef CFRunLoopSourceCreate(CFAllocatorRef allocator, CFIndex order, CFRunLoopSourceContext *context); From cd9a1a23ecb02f39276785e7443a4e0bc80d7038 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Fri, 29 Mar 2024 14:02:09 -0700 Subject: [PATCH 057/198] Make package SCF depend on Apple swift-foundation repo --- Package.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Package.swift b/Package.swift index 86858ccc94..1ec8514a1a 100644 --- a/Package.swift +++ b/Package.swift @@ -77,8 +77,8 @@ let package = Package( url: "https://github.com/apple/swift-foundation-icu", exact: "0.0.5"), .package( - url: "https://github.com/parkera/swift-foundation", - branch: "scf-package" + url: "https://github.com/apple/swift-foundation", + revision: "543bd69d7dc6a077e1fae856002cf0d169bb9652" ), ], targets: [ From 31c93c7302746f49ddf5a98bd6f2a120baceef69 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Mon, 1 Apr 2024 15:09:20 -0700 Subject: [PATCH 058/198] Fix Package test failures for Linux * Fix TestURL linux failures * Fix FileManagerTests - delete failing tests covered by swift-foundation, disable platform specific and XFail tests * Update availability / skipping of TestURLSession tests * Update TestNSString test availability * Delete incorrect NSString test * Fix NSOrderedSet tests * Fix NSError tests * Fix some NSData tests * Fix TestCocoaError issues * Fix TestOperationQueue test availability * Fix TestNSDateComponents failures * Fix TestBundle failures * Fix TestProcess failures * Fix TestDateFormatter failures * Fix TestHTTPCookieStorage failures * Remove all constant allTests declarations * Fix TestNSData test failures * Remove remainder of allTests conditional logic --- Sources/Foundation/NSError.swift | 4 +- Sources/Foundation/NSOrderedSet.swift | 2 +- Sources/xdgTestHelper/main.swift | 4 +- Tests/Foundation/TestAffineTransform.swift | 24 -- Tests/Foundation/TestBridging.swift | 8 - Tests/Foundation/TestBundle.swift | 40 +- Tests/Foundation/TestByteCountFormatter.swift | 27 -- Tests/Foundation/TestCachedURLResponse.swift | 15 - Tests/Foundation/TestCalendar.swift | 23 -- Tests/Foundation/TestCharacterSet.swift | 30 -- Tests/Foundation/TestCodable.swift | 25 -- Tests/Foundation/TestDataURLProtocol.swift | 8 - Tests/Foundation/TestDate.swift | 23 -- Tests/Foundation/TestDateComponents.swift | 7 - Tests/Foundation/TestDateFormatter.swift | 39 +- Tests/Foundation/TestDateInterval.swift | 18 - .../TestDateIntervalFormatter.swift | 26 -- Tests/Foundation/TestDecimal.swift | 38 -- Tests/Foundation/TestDimension.swift | 6 - Tests/Foundation/TestEnergyFormatter.swift | 11 - Tests/Foundation/TestFileHandle.swift | 47 +-- Tests/Foundation/TestFileManager.swift | 187 +-------- Tests/Foundation/TestHTTPCookie.swift | 28 -- Tests/Foundation/TestHTTPCookieStorage.swift | 18 +- Tests/Foundation/TestHTTPURLResponse.swift | 38 -- Tests/Foundation/TestHost.swift | 9 - .../Foundation/TestISO8601DateFormatter.swift | 12 - Tests/Foundation/TestIndexPath.swift | 57 --- Tests/Foundation/TestIndexSet.swift | 53 --- Tests/Foundation/TestJSONEncoder.swift | 65 --- Tests/Foundation/TestJSONSerialization.swift | 142 ------- Tests/Foundation/TestLengthFormatter.swift | 12 - Tests/Foundation/TestMassFormatter.swift | 11 - Tests/Foundation/TestMeasurement.swift | 6 - Tests/Foundation/TestNSArray.swift | 40 -- Tests/Foundation/TestNSAttributedString.swift | 53 --- Tests/Foundation/TestNSCache.swift | 13 - Tests/Foundation/TestNSCalendar.swift | 33 -- .../Foundation/TestNSCompoundPredicate.swift | 15 - Tests/Foundation/TestNSData.swift | 380 +----------------- Tests/Foundation/TestNSDateComponents.swift | 37 +- Tests/Foundation/TestNSDictionary.swift | 18 - Tests/Foundation/TestNSError.swift | 64 +-- Tests/Foundation/TestNSGeometry.swift | 54 --- Tests/Foundation/TestNSKeyedArchiver.swift | 27 -- Tests/Foundation/TestNSKeyedUnarchiver.swift | 16 +- Tests/Foundation/TestNSLocale.swift | 11 - Tests/Foundation/TestNSLock.swift | 12 - Tests/Foundation/TestNSNull.swift | 8 - Tests/Foundation/TestNSNumber.swift | 32 -- Tests/Foundation/TestNSNumberBridging.swift | 20 - Tests/Foundation/TestNSOrderedSet.swift | 38 -- Tests/Foundation/TestNSPredicate.swift | 15 - Tests/Foundation/TestNSRange.swift | 17 - .../Foundation/TestNSRegularExpression.swift | 15 - Tests/Foundation/TestNSSet.swift | 24 -- Tests/Foundation/TestNSSortDescriptor.swift | 10 - Tests/Foundation/TestNSString.swift | 162 +------- .../Foundation/TestNSTextCheckingResult.swift | 10 - Tests/Foundation/TestNSURL.swift | 12 - Tests/Foundation/TestNSURLRequest.swift | 21 - Tests/Foundation/TestNSUUID.swift | 11 - Tests/Foundation/TestNSValue.swift | 15 - Tests/Foundation/TestNotification.swift | 8 - Tests/Foundation/TestNotificationCenter.swift | 15 - Tests/Foundation/TestNotificationQueue.swift | 15 - Tests/Foundation/TestNumberFormatter.swift | 66 --- Tests/Foundation/TestObjCRuntime.swift | 13 - Tests/Foundation/TestOperationQueue.swift | 41 +- .../Foundation/TestPersonNameComponents.swift | 8 - Tests/Foundation/TestPipe.swift | 14 - Tests/Foundation/TestProcess.swift | 57 +-- Tests/Foundation/TestProcessInfo.swift | 16 - Tests/Foundation/TestProgress.swift | 20 - Tests/Foundation/TestProgressFraction.swift | 15 +- .../Foundation/TestPropertyListEncoder.swift | 9 - .../TestPropertyListSerialization.swift | 9 - Tests/Foundation/TestRunLoop.swift | 13 - Tests/Foundation/TestScanner.swift | 17 - Tests/Foundation/TestSocketPort.swift | 8 - Tests/Foundation/TestStream.swift | 21 - Tests/Foundation/TestThread.swift | 47 +-- Tests/Foundation/TestTimeZone.swift | 36 +- Tests/Foundation/TestTimer.swift | 9 - Tests/Foundation/TestURL.swift | 54 +-- Tests/Foundation/TestURLCache.swift | 17 - Tests/Foundation/TestURLComponents.swift | 16 - Tests/Foundation/TestURLCredential.swift | 9 - .../Foundation/TestURLCredentialStorage.swift | 42 -- Tests/Foundation/TestURLProtectionSpace.swift | 16 - Tests/Foundation/TestURLProtocol.swift | 12 - Tests/Foundation/TestURLRequest.swift | 19 - Tests/Foundation/TestURLResponse.swift | 21 - Tests/Foundation/TestURLSession.swift | 137 +++---- Tests/Foundation/TestURLSessionFTP.swift | 20 +- Tests/Foundation/TestUUID.swift | 11 - Tests/Foundation/TestUnit.swift | 6 - Tests/Foundation/TestUnitConverter.swift | 10 - .../TestUnitInformationStorage.swift | 4 - Tests/Foundation/TestUnitVolume.swift | 6 - Tests/Foundation/TestUserDefaults.swift | 40 -- Tests/Foundation/TestXMLDocument.swift | 47 +-- Tests/Foundation/TestXMLParser.swift | 10 - 103 files changed, 179 insertions(+), 3021 deletions(-) diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index 5914dfb747..a88899463a 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -45,7 +45,7 @@ public let NSDebugDescriptionErrorKey = "NSDebugDescription" // Other standard keys in userInfo, for various error codes public let NSStringEncodingErrorKey: String = "NSStringEncodingErrorKey" public let NSURLErrorKey: String = "NSURL" -public let NSFilePathErrorKey: String = "NSFilePathErrorKey" +public let NSFilePathErrorKey: String = "NSFilePath" open class NSError : NSObject, NSCopying, NSSecureCoding, NSCoding { typealias CFType = CFError @@ -610,7 +610,7 @@ extension CocoaError { public static func error(_ code: CocoaError.Code, userInfo: [String : AnyHashable]? = nil, url: Foundation.URL? = nil) -> Error { var info: [String : AnyHashable] = userInfo ?? [:] if let url = url { - info["NSURLErrorKey"] = url + info[NSURLErrorKey] = url } return CocoaError(code, userInfo: info) } diff --git a/Sources/Foundation/NSOrderedSet.swift b/Sources/Foundation/NSOrderedSet.swift index 908206956a..6c99947516 100644 --- a/Sources/Foundation/NSOrderedSet.swift +++ b/Sources/Foundation/NSOrderedSet.swift @@ -277,7 +277,7 @@ open class NSOrderedSet: NSObject, NSCopying, NSMutableCopying, NSSecureCoding, } open func enumerateObjects(at s: IndexSet, options opts: NSEnumerationOptions = [], using block: (Any, Int, UnsafeMutablePointer) -> Swift.Void) { - _orderedStorage.enumerateObjects(options: opts, using: block) + _orderedStorage.enumerateObjects(at: s, options: opts, using: block) } open func index(ofObjectPassingTest predicate: (Any, Int, UnsafeMutablePointer) -> Bool) -> Int { diff --git a/Sources/xdgTestHelper/main.swift b/Sources/xdgTestHelper/main.swift index ef761cdb6e..d515a63f04 100644 --- a/Sources/xdgTestHelper/main.swift +++ b/Sources/xdgTestHelper/main.swift @@ -49,9 +49,7 @@ class XDGCheck { storage.setCookie(simpleCookie) let fm = FileManager.default - guard let bundleName = Bundle.main.infoDictionary?["CFBundleName"] as? String else { - exit(HelperCheckStatus.fail.rawValue) - } + let bundleName = Bundle.main.bundlePath.split(separator: "/").last!.prefix(while: { $0 != "." }) let destPath = xdg_data_home + "/" + bundleName + "/.cookies.shared" var isDir: ObjCBool = false let exists = fm.fileExists(atPath: destPath, isDirectory: &isDir) diff --git a/Tests/Foundation/TestAffineTransform.swift b/Tests/Foundation/TestAffineTransform.swift index ccf7076e96..91da165db4 100644 --- a/Tests/Foundation/TestAffineTransform.swift +++ b/Tests/Foundation/TestAffineTransform.swift @@ -27,30 +27,6 @@ public struct Vector { class TestAffineTransform: XCTestCase { private let accuracyThreshold: CGFloat = 0.001 - - static var allTests: [(String, (TestAffineTransform) -> () throws -> Void)] { - return [ - ("testConstruction", testConstruction), - ("testBridging", testBridging), - ("testEqualityHashing", testEqualityHashing), - ("testVectorTransformations", testVectorTransformations), - ("testIdentityConstruction", testIdentityConstruction), - ("testIdentity", testIdentity), - ("testTranslationConstruction", testTranslationConstruction), - ("testTranslation", testTranslation), - ("testScalingConstruction", testScalingConstruction), - ("testScaling", testScaling), - ("testRotationConstruction", testRotationConstruction), - ("testRotation", testRotation), - ("testTranslationScaling", testTranslationScaling), - ("testTranslationRotation", testTranslationRotation), - ("testScalingRotation", testScalingRotation), - ("testInversion", testInversion), - ("testPrependTransform", testPrependTransform), - ("testAppendTransform", testAppendTransform), - ("testNSCoding", testNSCoding), - ] - } } // MARK: - Helper diff --git a/Tests/Foundation/TestBridging.swift b/Tests/Foundation/TestBridging.swift index 63ad1c09aa..63deb1db2c 100644 --- a/Tests/Foundation/TestBridging.swift +++ b/Tests/Foundation/TestBridging.swift @@ -23,14 +23,6 @@ struct StructWithDescriptionAndDebugDescription: } class TestBridging : XCTestCase { - static var allTests: [(String, (TestBridging) -> () throws -> Void)] { - return [ - ("testBridgedDescription", testBridgedDescription), - ("testDynamicCast", testDynamicCast), - ("testConstantsImmortal", testConstantsImmortal), - ] - } - func testBridgedDescription() throws { #if canImport(Foundation) && canImport(SwiftFoundation) /* diff --git a/Tests/Foundation/TestBundle.swift b/Tests/Foundation/TestBundle.swift index 339662fed0..3e94ba4aee 100644 --- a/Tests/Foundation/TestBundle.swift +++ b/Tests/Foundation/TestBundle.swift @@ -15,7 +15,7 @@ #endif #endif -internal func testBundle() -> Bundle { +internal func testBundle(executable: Bool = false) -> Bundle { #if DARWIN_COMPATIBILITY_TESTS for bundle in Bundle.allBundles { if let bundleId = bundle.bundleIdentifier, bundleId == "org.swift.DarwinCompatibilityTests", bundle.resourcePath != nil { @@ -24,7 +24,7 @@ internal func testBundle() -> Bundle { } fatalError("Cant find test bundle") #else - return Bundle.module + return executable ? Bundle.main : Bundle.module #endif } @@ -474,13 +474,13 @@ class TestBundle : XCTestCase { } func test_bundleLoad() { - let bundle = testBundle() + let bundle = testBundle(executable: true) let _ = bundle.load() XCTAssertTrue(bundle.isLoaded) } func test_bundleLoadWithError() { - let bundleValid = testBundle() + let bundleValid = testBundle(executable: true) // Test valid load using loadAndReturnError do { @@ -503,7 +503,7 @@ class TestBundle : XCTestCase { } func test_bundlePreflight() { - XCTAssertNoThrow(try testBundle().preflight()) + XCTAssertNoThrow(try testBundle(executable: true).preflight()) try! _withEachPlaygroundLayout { (playground) in let bundle = Bundle(path: playground.bundlePath)! @@ -514,7 +514,7 @@ class TestBundle : XCTestCase { } func test_bundleFindExecutable() { - XCTAssertNotNil(testBundle().executableURL) + XCTAssertNotNil(testBundle(executable: true).executableURL) _withEachPlaygroundLayout { (playground) in let bundle = Bundle(path: playground.bundlePath)! @@ -564,32 +564,6 @@ class TestBundle : XCTestCase { #endif func test_bundleForClass() { - XCTAssertEqual(testBundle(), Bundle(for: type(of: self))) - } - - static var allTests: [(String, (TestBundle) -> () throws -> Void)] { - var tests: [(String, (TestBundle) -> () throws -> Void)] = [ - ("test_paths", test_paths), - ("test_resources", test_resources), - ("test_infoPlist", test_infoPlist), - ("test_localizations", test_localizations), - ("test_URLsForResourcesWithExtension", test_URLsForResourcesWithExtension), - ("test_bundleLoad", test_bundleLoad), - ("test_bundleLoadWithError", test_bundleLoadWithError), - ("test_bundleWithInvalidPath", test_bundleWithInvalidPath), - ("test_bundlePreflight", testExpectedToFailOnWindows(test_bundlePreflight, "Preflight checks aren't supported for DLLs")), - ("test_bundleFindExecutable", test_bundleFindExecutable), - ("test_bundleFindAuxiliaryExecutables", test_bundleFindAuxiliaryExecutables), - ("test_bundleForClass", testExpectedToFailOnWindows(test_bundleForClass, "Functionality not yet implemented on Windows. SR-XXXX")), - ] - - #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT - tests.append(contentsOf: [ - ("test_mainBundleExecutableURL", test_mainBundleExecutableURL), - ("test_bundleReverseBundleLookup", test_bundleReverseBundleLookup), - ]) - #endif - - return tests + XCTAssertEqual(testBundle(executable: true), Bundle(for: type(of: self))) } } diff --git a/Tests/Foundation/TestByteCountFormatter.swift b/Tests/Foundation/TestByteCountFormatter.swift index 5a7b92418a..d35c779aed 100644 --- a/Tests/Foundation/TestByteCountFormatter.swift +++ b/Tests/Foundation/TestByteCountFormatter.swift @@ -455,31 +455,4 @@ class TestByteCountFormatter : XCTestCase { } } } - - static var allTests: [(String, (TestByteCountFormatter) -> () throws -> Void)] { - return [ - ("test_DefaultValues", test_DefaultValues), - ("test_zeroBytes", test_zeroBytes), - ("test_oneByte", test_oneByte), - ("test_allowedUnitsKBGB", test_allowedUnitsKBGB), - ("test_allowedUnitsMBGB", test_allowedUnitsMBGB), - ("test_adaptiveFalseAllowedUnitsKBMBGB", test_adaptiveFalseAllowedUnitsKBMBGB), - ("test_allowedUnitsKBMBGB", test_allowedUnitsKBMBGB), - ("test_allowedUnitsBytesGB", test_allowedUnitsBytesGB), - ("test_allowedUnitsGB", test_allowedUnitsGB), - ("test_adaptiveFalseAllowedUnitsGB", test_adaptiveFalseAllowedUnitsGB), - ("test_numberOnly", test_numberOnly), - ("test_unitOnly", test_unitOnly), - ("test_isAdaptiveFalse", test_isAdaptiveFalse), - ("test_isAdaptiveTrue", test_isAdaptiveTrue), - ("test_zeroPadsFractionDigitsTrue", test_zeroPadsFractionDigitsTrue), - ("test_isAdaptiveFalseZeroPadsFractionDigitsTrue", test_isAdaptiveFalseZeroPadsFractionDigitsTrue), - ("test_countStyleDecimal", test_countStyleDecimal), - ("test_countStyleBinary", test_countStyleBinary), - ("test_largeByteValues", test_largeByteValues), - ("test_negativeByteValues", test_negativeByteValues), - ("test_unarchivingFixtures", test_unarchivingFixtures), - ] - } - } diff --git a/Tests/Foundation/TestCachedURLResponse.swift b/Tests/Foundation/TestCachedURLResponse.swift index da0b10f4e2..a82c225006 100644 --- a/Tests/Foundation/TestCachedURLResponse.swift +++ b/Tests/Foundation/TestCachedURLResponse.swift @@ -188,19 +188,4 @@ class TestCachedURLResponse : XCTestCase { XCTAssertNotEqual(cachedResponse1.hash, cachedResponse3.hash) XCTAssertNotEqual(cachedResponse2.hash, cachedResponse3.hash) } - - static var allTests: [(String, (TestCachedURLResponse) -> () throws -> Void)] { - return [ - ("test_copy", test_copy), - ("test_initDefaultUserInfoAndStoragePolicy", test_initDefaultUserInfoAndStoragePolicy), - ("test_initDefaultUserInfo", test_initDefaultUserInfo), - ("test_initWithoutDefaults", test_initWithoutDefaults), - ("test_equalWithTheSameInstance", test_equalWithTheSameInstance), - ("test_equalWithUnrelatedObject", test_equalWithUnrelatedObject), - ("test_equalCheckingResponse", test_equalCheckingResponse), - ("test_equalCheckingData", test_equalCheckingData), - ("test_equalCheckingStoragePolicy", test_equalCheckingStoragePolicy), - ("test_hash", test_hash), - ] - } } diff --git a/Tests/Foundation/TestCalendar.swift b/Tests/Foundation/TestCalendar.swift index 5a6295161f..61960d4695 100644 --- a/Tests/Foundation/TestCalendar.swift +++ b/Tests/Foundation/TestCalendar.swift @@ -287,27 +287,4 @@ class TestCalendar: XCTestCase { XCTAssertNil(next) } } - - static var allTests: [(String, (TestCalendar) -> () throws -> Void)] { - return [ - ("test_allCalendars", test_allCalendars), - ("test_gettingDatesOnGregorianCalendar", test_gettingDatesOnGregorianCalendar ), - ("test_gettingDatesOnHebrewCalendar", test_gettingDatesOnHebrewCalendar ), - ("test_gettingDatesOnChineseCalendar", test_gettingDatesOnChineseCalendar), - ("test_gettingDatesOnISO8601Calendar", test_gettingDatesOnISO8601Calendar), - ("test_gettingDatesOnPersianCalendar", test_gettingDatesOnPersianCalendar), - ("test_gettingDatesOnJapaneseCalendar", test_gettingDatesOnJapaneseCalendar), - ("test_copy",test_copy), - ("test_addingDates", test_addingDates), - ("test_datesNotOnWeekend", test_datesNotOnWeekend), - ("test_datesOnWeekend", test_datesOnWeekend), - ("test_customMirror", test_customMirror), - ("test_ampmSymbols", test_ampmSymbols), - ("test_currentCalendarRRstability", test_currentCalendarRRstability), - ("test_hashing", test_hashing), - ("test_dateFromDoesntMutate", test_dateFromDoesntMutate), - ("test_sr10638", test_sr10638), - ("test_nextDate", test_nextDate), - ] - } } diff --git a/Tests/Foundation/TestCharacterSet.swift b/Tests/Foundation/TestCharacterSet.swift index 33962d1876..893a314a85 100644 --- a/Tests/Foundation/TestCharacterSet.swift +++ b/Tests/Foundation/TestCharacterSet.swift @@ -370,34 +370,4 @@ class TestCharacterSet : XCTestCase { try fixture.assertValueRoundtripsInCoder() } } - - static var allTests: [(String, (TestCharacterSet) -> () throws -> Void)] { - return [ - ("testBasicConstruction", testBasicConstruction), - ("testMutability_copyOnWrite", testMutability_copyOnWrite), - ("testRanges", testRanges), - ("testInsertAndRemove", testInsertAndRemove), - ("testBasics", testBasics), - ("testClosedRanges_SR_2988", testClosedRanges_SR_2988), - ("test_Predefines", test_Predefines), - ("test_Range", test_Range), - ("test_String", test_String), - ("test_Bitmap", test_Bitmap), - ("test_AnnexPlanes", test_AnnexPlanes), - ("test_Planes", test_Planes), - ("test_InlineBuffer", test_InlineBuffer), - ("test_Equatable", test_Equatable), - ("test_Subtracting", test_Subtracting), - ("test_SubtractEmptySet", test_SubtractEmptySet), - ("test_SubtractNonEmptySet", test_SubtractNonEmptySet), - ("test_SymmetricDifference", test_SymmetricDifference), - ("test_formUnion", test_formUnion), - ("test_union", test_union), - ("test_SR5971", test_SR5971), - ("test_hashing", test_hashing), - ("test_codingRoundtrip", test_codingRoundtrip), - ] - } - - } diff --git a/Tests/Foundation/TestCodable.swift b/Tests/Foundation/TestCodable.swift index 7715dee940..4e1ce56527 100644 --- a/Tests/Foundation/TestCodable.swift +++ b/Tests/Foundation/TestCodable.swift @@ -547,28 +547,3 @@ class TestCodable : XCTestCase { } } } - -extension TestCodable { - static var allTests: [(String, (TestCodable) -> () throws -> Void)] { - return [ - ("test_PersonNameComponents_JSON", test_PersonNameComponents_JSON), - ("test_UUID_JSON", test_UUID_JSON), - ("test_URL_JSON", test_URL_JSON), - ("test_NSRange_JSON", test_NSRange_JSON), - ("test_Locale_JSON", test_Locale_JSON), - ("test_IndexSet_JSON", test_IndexSet_JSON), - ("test_IndexPath_JSON", test_IndexPath_JSON), - ("test_AffineTransform_JSON", test_AffineTransform_JSON), - ("test_Decimal_JSON", test_Decimal_JSON), - ("test_CGPoint_JSON", test_CGPoint_JSON), - ("test_CGSize_JSON", test_CGSize_JSON), - ("test_CGRect_JSON", test_CGRect_JSON), - ("test_CharacterSet_JSON", test_CharacterSet_JSON), - ("test_TimeZone_JSON", test_TimeZone_JSON), - ("test_Calendar_JSON", test_Calendar_JSON), - ("test_DateComponents_JSON", test_DateComponents_JSON), - ("test_Measurement_JSON", test_Measurement_JSON), - ("test_URLComponents_JSON", test_URLComponents_JSON), - ] - } -} diff --git a/Tests/Foundation/TestDataURLProtocol.swift b/Tests/Foundation/TestDataURLProtocol.swift index c92a072212..62a8d94d83 100644 --- a/Tests/Foundation/TestDataURLProtocol.swift +++ b/Tests/Foundation/TestDataURLProtocol.swift @@ -147,12 +147,4 @@ class TestDataURLProtocol: XCTestCase { XCTAssertNil(delegate.response, "Unexpected URLResponse for \(urlString)") } } - - static var allTests: [(String, (TestDataURLProtocol) -> () throws -> Void)] { - let tests = [ - ("test_validURIs", test_validURIs), - ("test_invalidURIs", test_invalidURIs), - ] - return tests - } } diff --git a/Tests/Foundation/TestDate.swift b/Tests/Foundation/TestDate.swift index d367dda88f..ed068ab172 100644 --- a/Tests/Foundation/TestDate.swift +++ b/Tests/Foundation/TestDate.swift @@ -16,29 +16,6 @@ func dateWithString(_ str: String) -> Date { } class TestDate : XCTestCase { - - static var allTests: [(String, (TestDate) -> () throws -> Void)] { - return [ - ("test_BasicConstruction", test_BasicConstruction), - ("test_InitTimeIntervalSince1970", test_InitTimeIntervalSince1970), - ("test_InitTimeIntervalSinceSinceDate", test_InitTimeIntervalSinceSinceDate), - ("test_TimeIntervalSinceSinceDate", test_TimeIntervalSinceSinceDate), - ("test_descriptionWithLocale", test_descriptionWithLocale), - ("test_DistantFuture", test_DistantFuture), - ("test_DistantPast", test_DistantPast), - ("test_DateByAddingTimeInterval", test_DateByAddingTimeInterval), - ("test_EarlierDate", test_EarlierDate), - ("test_LaterDate", test_LaterDate), - ("test_Compare", test_Compare), - ("test_IsEqualToDate", test_IsEqualToDate), - ("test_timeIntervalSinceReferenceDate", test_timeIntervalSinceReferenceDate), - ("test_recreateDateComponentsFromDate", test_recreateDateComponentsFromDate), - ("test_Hashing", test_Hashing), - ("test_advancedBy", test_advancedBy), - ("test_distanceTo", test_distanceTo), - ] - } - func test_BasicConstruction() { let d = Date() XCTAssert(d.timeIntervalSince1970 != 0) diff --git a/Tests/Foundation/TestDateComponents.swift b/Tests/Foundation/TestDateComponents.swift index 9ae7f9cf08..87d1bb8ac7 100644 --- a/Tests/Foundation/TestDateComponents.swift +++ b/Tests/Foundation/TestDateComponents.swift @@ -116,11 +116,4 @@ class TestDateComponents: XCTestCase { dc.nanosecond = 6 XCTAssertTrue(dc.isValidDate) } - - static var allTests: [(String, (TestDateComponents) -> () throws -> Void)] { - return [ - ("test_hash", test_hash), - ("test_isValidDate", test_isValidDate), - ] - } } diff --git a/Tests/Foundation/TestDateFormatter.swift b/Tests/Foundation/TestDateFormatter.swift index d81ac13f3c..c495831303 100644 --- a/Tests/Foundation/TestDateFormatter.swift +++ b/Tests/Foundation/TestDateFormatter.swift @@ -12,27 +12,6 @@ class TestDateFormatter: XCTestCase { let DEFAULT_LOCALE = "en_US_POSIX" let DEFAULT_TIMEZONE = "GMT" - static var allTests : [(String, (TestDateFormatter) -> () throws -> Void)] { - return [ - ("test_BasicConstruction", test_BasicConstruction), - ("test_dateStyleShort", test_dateStyleShort), - //("test_dateStyleMedium", test_dateStyleMedium), - ("test_dateStyleLong", test_dateStyleLong), - ("test_dateStyleFull", test_dateStyleFull), - ("test_customDateFormat", test_customDateFormat), - ("test_setLocalizedDateFormatFromTemplate", test_setLocalizedDateFormatFromTemplate), - ("test_dateFormatString", test_dateFormatString), - ("test_setLocaleToNil", test_setLocaleToNil), - ("test_setTimeZoneToNil", test_setTimeZoneToNil), - ("test_setTimeZone", test_setTimeZone), - ("test_expectedTimeZone", test_expectedTimeZone), - ("test_dateFrom", test_dateFrom), - ("test_dateParseAndFormatWithJapaneseCalendar", test_dateParseAndFormatWithJapaneseCalendar), - ("test_orderOfPropertySetters", test_orderOfPropertySetters), - ("test_copy_sr14108", test_copy_sr14108), - ] - } - func test_BasicConstruction() { let symbolDictionaryOne = ["eraSymbols" : ["BC", "AD"], @@ -130,8 +109,9 @@ class TestDateFormatter: XCTestCase { // locale stringFromDate example // ------ -------------- ------------ // en_US MMM d, y, h:mm:ss a Dec 25, 2015, 12:00:00 AM - func test_dateStyleMedium() { - + func test_dateStyleMedium() throws { + throw XCTSkip() + #if false let timestamps = [ -31536000 : "Jan 1, 1969 at 12:00:00 AM" , 0.0 : "Jan 1, 1970 at 12:00:00 AM", 31536000 : "Jan 1, 1971 at 12:00:00 AM", 2145916800 : "Jan 1, 2038 at 12:00:00 AM", 1456272000 : "Feb 24, 2016 at 12:00:00 AM", 1456358399 : "Feb 24, 2016 at 11:59:59 PM", @@ -154,7 +134,7 @@ class TestDateFormatter: XCTestCase { XCTAssertEqual(sf, stringResult) } - + #endif } @@ -397,17 +377,22 @@ class TestDateFormatter: XCTestCase { // it would benefit from a more specific test that fails when // TimeZone.current is GMT as well. // (ex. TestTimeZone.test_systemTimeZoneName) + + func abbreviation(for tz: TimeZone) -> String? { + let isDST = tz.daylightSavingTimeOffset(for: now) != 0.0 + return tz.localizedName(for: isDST ? .shortDaylightSaving : .shortStandard , locale: f.locale) + } f.timeZone = TimeZone.current - XCTAssertEqual(f.string(from: now), TimeZone.current.abbreviation()) + XCTAssertEqual(f.string(from: now), abbreviation(for: TimeZone.current)) // Case 2: New York f.timeZone = newYork - XCTAssertEqual(f.string(from: now), newYork.abbreviation()) + XCTAssertEqual(f.string(from: now), abbreviation(for: newYork)) // Case 3: Los Angeles f.timeZone = losAngeles - XCTAssertEqual(f.string(from: now), losAngeles.abbreviation()) + XCTAssertEqual(f.string(from: now), abbreviation(for: losAngeles)) } func test_dateFrom() throws { diff --git a/Tests/Foundation/TestDateInterval.swift b/Tests/Foundation/TestDateInterval.swift index 5f9fc575eb..1198673cbf 100644 --- a/Tests/Foundation/TestDateInterval.swift +++ b/Tests/Foundation/TestDateInterval.swift @@ -8,24 +8,6 @@ // class TestDateInterval: XCTestCase { - static var allTests: [(String, (TestDateInterval) -> () throws -> Void)] { - return [ - ("test_defaultInitializer", test_defaultInitializer), - ("test_startEndInitializer", test_startEndInitializer), - ("test_startDurationInitializer", test_startDurationInitializer), - ("test_compareDifferentStarts", test_compareDifferentStarts), - ("test_compareDifferentDurations", test_compareDifferentDurations), - ("test_compareSame", test_compareSame), - ("test_comparisonOperators", test_comparisonOperators), - ("test_intersects", test_intersects), - ("test_intersection", test_intersection), - ("test_intersectionZeroDuration", test_intersectionZeroDuration), - ("test_intersectionNil", test_intersectionNil), - ("test_contains", test_contains), - ("test_hashing", test_hashing), - ] - } - func test_defaultInitializer() { let dateInterval = DateInterval() XCTAssertEqual(dateInterval.duration, 0) diff --git a/Tests/Foundation/TestDateIntervalFormatter.swift b/Tests/Foundation/TestDateIntervalFormatter.swift index 89fc95ecfa..61278e005f 100644 --- a/Tests/Foundation/TestDateIntervalFormatter.swift +++ b/Tests/Foundation/TestDateIntervalFormatter.swift @@ -283,30 +283,4 @@ class TestDateIntervalFormatter: XCTestCase { } } } - - static var allTests: [(String, (TestDateIntervalFormatter) -> () throws -> Void)] { - var tests: [(String, (TestDateIntervalFormatter) -> () throws -> Void)] = [ - ("testStringFromDateToDateAcrossThreeBillionSeconds", testStringFromDateToDateAcrossThreeBillionSeconds), - ("testStringFromDateToDateAcrossThreeMillionSeconds", testStringFromDateToDateAcrossThreeMillionSeconds), - ("testStringFromDateToDateAcrossThreeBillionSecondsReversed", testStringFromDateToDateAcrossThreeBillionSecondsReversed), - ("testStringFromDateToDateAcrossThreeMillionSecondsReversed", testStringFromDateToDateAcrossThreeMillionSecondsReversed), - ("testStringFromDateToSameDate", testStringFromDateToSameDate), - ("testStringFromDateIntervalAcrossThreeMillionSeconds", testStringFromDateIntervalAcrossThreeMillionSeconds), - ("testStringFromDateToDateAcrossOneWeek", testStringFromDateToDateAcrossOneWeek), - ("testStringFromDateToDateAcrossSixtyDays", testStringFromDateToDateAcrossSixtyDays), - ("testStringFromDateToDateAcrossFiveHours", testStringFromDateToDateAcrossFiveHours), - ("testStringFromDateToDateAcrossEighteenHours", testStringFromDateToDateAcrossEighteenHours), - ("testCodingRoundtrip", testCodingRoundtrip), - ("testDecodingFixtures", testDecodingFixtures), - ] - - #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT && (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) - tests.append(contentsOf: [ - ("testStringFromDateToDateAcrossOneWeekWithMonthMinimization", testStringFromDateToDateAcrossOneWeekWithMonthMinimization), - ("testStringFromDateToDateAcrossSixtyDaysWithMonthMinimization", testStringFromDateToDateAcrossSixtyDaysWithMonthMinimization), - ]) - #endif - - return tests - } } diff --git a/Tests/Foundation/TestDecimal.swift b/Tests/Foundation/TestDecimal.swift index eaf48a2f64..d8f39cebc7 100644 --- a/Tests/Foundation/TestDecimal.swift +++ b/Tests/Foundation/TestDecimal.swift @@ -1529,42 +1529,4 @@ class TestDecimal: XCTestCase { XCTAssertEqual(NSDecimalNumber(decimal:d).intValue, intValue) } } - - static var allTests : [(String, (TestDecimal) -> () throws -> Void)] { - return [ - ("test_NSDecimalNumberInit", test_NSDecimalNumberInit), - ("test_AdditionWithNormalization", test_AdditionWithNormalization), - ("test_BasicConstruction", test_BasicConstruction), - ("test_Constants", test_Constants), - ("test_Description", test_Description), - ("test_ExplicitConstruction", test_ExplicitConstruction), - ("test_Maths", test_Maths), - ("test_Misc", test_Misc), - ("test_MultiplicationOverflow", test_MultiplicationOverflow), - ("test_NaNInput", test_NaNInput), - ("test_NegativeAndZeroMultiplication", test_NegativeAndZeroMultiplication), - ("test_Normalise", test_Normalise), - ("test_NSDecimal", test_NSDecimal), - ("test_PositivePowers", test_PositivePowers), - ("test_RepeatingDivision", test_RepeatingDivision), - ("test_Round", test_Round), - ("test_ScanDecimal", test_ScanDecimal), - ("test_Significand", test_Significand), - ("test_SimpleMultiplication", test_SimpleMultiplication), - ("test_SmallerNumbers", test_SmallerNumbers), - ("test_Strideable", test_Strideable), - ("test_ULP", test_ULP), - ("test_ZeroPower", test_ZeroPower), - ("test_parseDouble", test_parseDouble), - ("test_doubleValue", test_doubleValue), - ("test_NSDecimalNumberValues", test_NSDecimalNumberValues), - ("test_bridging", test_bridging), - ("test_stringWithLocale", test_stringWithLocale), - ("test_NSDecimalString", test_NSDecimalString), - ("test_multiplyingByPowerOf10", test_multiplyingByPowerOf10), - ("test_initExactly", test_initExactly), - ("test_NSNumberEquality", test_NSNumberEquality), - ("test_intValue", test_intValue), - ] - } } diff --git a/Tests/Foundation/TestDimension.swift b/Tests/Foundation/TestDimension.swift index 07c508823d..6870108681 100644 --- a/Tests/Foundation/TestDimension.swift +++ b/Tests/Foundation/TestDimension.swift @@ -23,10 +23,4 @@ class TestDimension: XCTestCase { XCTAssertNotNil(decoded) XCTAssertEqual(original, decoded) } - - static var allTests: [(String, (TestDimension) -> () throws -> Void)] { - return [ - ("test_encodeDecode", test_encodeDecode), - ] - } } diff --git a/Tests/Foundation/TestEnergyFormatter.swift b/Tests/Foundation/TestEnergyFormatter.swift index 4a6de35b04..9d29a7867c 100644 --- a/Tests/Foundation/TestEnergyFormatter.swift +++ b/Tests/Foundation/TestEnergyFormatter.swift @@ -10,17 +10,6 @@ class TestEnergyFormatter: XCTestCase { let formatter: EnergyFormatter = EnergyFormatter() - static var allTests: [(String, (TestEnergyFormatter) -> () throws -> Void)] { - return [ - ("test_stringFromJoulesJoulesRegion", test_stringFromJoulesJoulesRegion), - ("test_stringFromJoulesCaloriesRegion", test_stringFromJoulesCaloriesRegion), - ("test_stringFromJoulesCaloriesRegionFoodEnergyUse", test_stringFromJoulesCaloriesRegionFoodEnergyUse), - ("test_stringFromValue", test_stringFromValue), - ("test_unitStringFromValue", test_unitStringFromValue), - ("test_unitStringFromJoules", test_unitStringFromJoules) - ] - } - override func setUp() { formatter.numberFormatter.locale = Locale(identifier: "en_US") formatter.isForFoodEnergyUse = false diff --git a/Tests/Foundation/TestFileHandle.swift b/Tests/Foundation/TestFileHandle.swift index b2cf202c20..5c4ac2d3c8 100644 --- a/Tests/Foundation/TestFileHandle.swift +++ b/Tests/Foundation/TestFileHandle.swift @@ -536,7 +536,9 @@ class TestFileHandle : XCTestCase { wait(for: [done], timeout: 10) } - func test_readWriteHandlers() { + func test_readWriteHandlers() throws { + throw XCTSkip(" sporadically times out") + #if false for _ in 0..<100 { let pipe = Pipe() let write = pipe.fileHandleForWriting @@ -574,9 +576,11 @@ class TestFileHandle : XCTestCase { XCTAssertEqual(result, .success, "Waiting on the semaphore should not have had time to time out") XCTAssertTrue(notificationReceived, "Notification should be sent") } + #endif } #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT && !os(Windows) + // SR-13822 - closeOnDealloc doesnt work on Windows and so this test is disabled there. func test_closeOnDealloc() throws { try withTemporaryDirectory() { (url, path) in let data = try XCTUnwrap("hello".data(using: .utf8)) @@ -618,45 +622,4 @@ class TestFileHandle : XCTestCase { #endif XCTAssertNoThrow(try fh.synchronize()) } - - static var allTests : [(String, (TestFileHandle) -> () throws -> ())] { - var tests: [(String, (TestFileHandle) -> () throws -> ())] = [ - ("testReadUpToCount", testReadUpToCount), - ("testReadToEnd", testReadToEnd), - ("testWritingWithData", testWritingWithData), - ("testWritingWithBuffer", testWritingWithBuffer), - ("testWritingWithMultiregionData", testWritingWithMultiregionData), - ("test_constants", test_constants), - ("test_truncateFile", test_truncateFile), - ("test_truncate", test_truncate), - ("test_readabilityHandlerCloseFileRace", test_readabilityHandlerCloseFileRace), - ("test_readabilityHandlerCloseFileRaceWithError", test_readabilityHandlerCloseFileRaceWithError), - ("test_availableData", test_availableData), - ("test_readToEndOfFileInBackgroundAndNotify", test_readToEndOfFileInBackgroundAndNotify), - ("test_readToEndOfFileAndNotify", test_readToEndOfFileAndNotify), - ("test_readToEndOfFileAndNotify_readError", test_readToEndOfFileAndNotify_readError), - ("test_waitForDataInBackgroundAndNotify", test_waitForDataInBackgroundAndNotify), - /* ⚠️ */ ("test_readWriteHandlers", testExpectedToFail(test_readWriteHandlers, - /* ⚠️ */ " sporadically times out")), - ("testSynchronizeOnSpecialFile", testSynchronizeOnSpecialFile), - ] - -#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT - tests.append(contentsOf: [ - ("test_fileDescriptor", test_fileDescriptor), - ("test_nullDevice", test_nullDevice), - ("testHandleCreationAndCleanup", testHandleCreationAndCleanup), - ("testOffset", testOffset), - ]) - - #if !os(Windows) - tests.append(contentsOf: [ - /* ⚠️ SR-13822 - closeOnDealloc doesnt work on Windows and so this test is disabled there. */ - ("test_closeOnDealloc", test_closeOnDealloc), - ]) - #endif -#endif - - return tests - } } diff --git a/Tests/Foundation/TestFileManager.swift b/Tests/Foundation/TestFileManager.swift index a20c133340..5e202ea911 100644 --- a/Tests/Foundation/TestFileManager.swift +++ b/Tests/Foundation/TestFileManager.swift @@ -211,124 +211,6 @@ class TestFileManager : XCTestCase { try? fm.removeItem(atPath: tmpDir.path) } - func test_isReadableFile() { - let fm = FileManager.default - let path = NSTemporaryDirectory() + "test_isReadableFile\(NSUUID().uuidString)" - defer { - try? fm.removeItem(atPath: path) - } - - do { - // create test file - XCTAssertTrue(fm.createFile(atPath: path, contents: Data())) - - // test unReadable if file has no permissions - try fm.setAttributes([.posixPermissions : NSNumber(value: Int16(0o0000))], ofItemAtPath: path) -#if os(Windows) - // Files are always readable on Windows - XCTAssertTrue(fm.isReadableFile(atPath: path)) -#else - XCTAssertFalse(fm.isReadableFile(atPath: path)) -#endif - - // test readable if file has read permissions - try fm.setAttributes([.posixPermissions : NSNumber(value: Int16(0o0400))], ofItemAtPath: path) - XCTAssertTrue(fm.isReadableFile(atPath: path)) - } catch let e { - XCTFail("\(e)") - } - } - - func test_isWritableFile() { - let fm = FileManager.default - let path = NSTemporaryDirectory() + "test_isWritableFile\(NSUUID().uuidString)" - defer { - try? fm.removeItem(atPath: path) - } - - do { - // create test file - XCTAssertTrue(fm.createFile(atPath: path, contents: Data())) - - // test unWritable if file has no permissions - try fm.setAttributes([.posixPermissions : NSNumber(value: Int16(0o0000))], ofItemAtPath: path) - XCTAssertFalse(fm.isWritableFile(atPath: path)) - - // test writable if file has write permissions - try fm.setAttributes([.posixPermissions : NSNumber(value: Int16(0o0200))], ofItemAtPath: path) - XCTAssertTrue(fm.isWritableFile(atPath: path)) - } catch let e { - XCTFail("\(e)") - } - } - - func test_isExecutableFile() { - let fm = FileManager.default - let path = NSTemporaryDirectory() + "test_isExecutableFile\(NSUUID().uuidString)" - let exePath = path + ".exe" - defer { - try? fm.removeItem(atPath: path) - try? fm.removeItem(atPath: exePath) - } - - do { - // create test file - XCTAssertTrue(fm.createFile(atPath: path, contents: Data())) - - // test unExecutable if file has no permissions - try fm.setAttributes([.posixPermissions : NSNumber(value: Int16(0o0000))], ofItemAtPath: path) - XCTAssertFalse(fm.isExecutableFile(atPath: path)) - -#if os(Windows) - // test unExecutable even if file has an `exe` extension - try fm.copyItem(atPath: path, toPath: exePath) - XCTAssertFalse(fm.isExecutableFile(atPath: exePath)) -#else - // test executable if file has execute permissions - try fm.setAttributes([.posixPermissions : NSNumber(value: Int16(0o0100))], ofItemAtPath: path) - XCTAssertTrue(fm.isExecutableFile(atPath: path)) -#endif - - // test against the test bundle itself - let testFoundationBinary = try XCTUnwrap(testBundle().path(forAuxiliaryExecutable: "TestFoundation")) - XCTAssertTrue(fm.isExecutableFile(atPath: testFoundationBinary)) - } catch let e { - XCTFail("\(e)") - } - } - - func test_isDeletableFile() { - let fm = FileManager.default - - do { - let dir_path = NSTemporaryDirectory() + "/test_isDeletableFile_dir/" - defer { - try? fm.removeItem(atPath: dir_path) - } - let file_path = dir_path + "test_isDeletableFile\(NSUUID().uuidString)" - // create test directory - try fm.createDirectory(atPath: dir_path, withIntermediateDirectories: true) - // create test file - XCTAssertTrue(fm.createFile(atPath: file_path, contents: Data())) - - // test undeletable if parent directory has no permissions - try fm.setAttributes([.posixPermissions : NSNumber(value: Int16(0o0000))], ofItemAtPath: dir_path) - XCTAssertFalse(fm.isDeletableFile(atPath: file_path)) - - // test deletable if parent directory has all necessary permissions - try fm.setAttributes([.posixPermissions : NSNumber(value: Int16(0o0755))], ofItemAtPath: dir_path) - XCTAssertTrue(fm.isDeletableFile(atPath: file_path)) - } - catch { XCTFail("\(error)") } - - // test against known undeletable file -#if os(Windows) - XCTAssertFalse(fm.isDeletableFile(atPath: "NUL")) -#else - XCTAssertFalse(fm.isDeletableFile(atPath: "/dev/null")) -#endif - } - func test_fileAttributes() throws { let fm = FileManager.default let path = NSTemporaryDirectory() + "test_fileAttributes\(NSUUID().uuidString)" @@ -1786,6 +1668,8 @@ VIDEOS=StopgapVideos } func test_replacement() throws { + throw XCTSkip("This test is disabled due to https://github.com/apple/swift-corelibs-foundation/issues/3327") + #if false let fm = FileManager.default let a = writableTestDirectoryURL.appendingPathComponent("a") @@ -1908,9 +1792,13 @@ VIDEOS=StopgapVideos try fm._replaceItem(at: a, withItemAt: b, backupItemName: backupItemName, options: options, allowPlatformSpecificSyscalls: false) } #endif + #endif } func test_windowsPaths() throws { + #if !os(Windows) + throw XCTSkip("This test is only enabled on Windows") + #else let fm = FileManager.default let tmpPath = writableTestDirectoryURL.path do { @@ -1961,6 +1849,7 @@ VIDEOS=StopgapVideos for path in paths { try checkPath(path: path) } + #endif } /** @@ -2029,66 +1918,4 @@ VIDEOS=StopgapVideos super.tearDown() } - - static var allTests: [(String, (TestFileManager) -> () throws -> Void)] { - var tests: [(String, (TestFileManager) -> () throws -> Void)] = [ - ("test_createDirectory", test_createDirectory ), - ("test_createFile", test_createFile ), - ("test_moveFile", test_moveFile), - ("test_fileSystemRepresentation", test_fileSystemRepresentation), - ("test_fileExists", test_fileExists), - ("test_isReadableFile", test_isReadableFile), - ("test_isWritableFile", test_isWritableFile), - ("test_isExecutableFile", test_isExecutableFile), - ("test_isDeletableFile", test_isDeletableFile), - ("test_fileAttributes", test_fileAttributes), - ("test_fileSystemAttributes", test_fileSystemAttributes), - ("test_setFileAttributes", test_setFileAttributes), - ("test_directoryEnumerator", test_directoryEnumerator), - ("test_pathEnumerator",test_pathEnumerator), - ("test_contentsOfDirectoryAtPath", test_contentsOfDirectoryAtPath), - ("test_contentsOfDirectoryEnumeration", test_contentsOfDirectoryEnumeration), - ("test_subpathsOfDirectoryAtPath", test_subpathsOfDirectoryAtPath), - ("test_copyItemAtPathToPath", test_copyItemAtPathToPath), - ("test_linkItemAtPathToPath", testExpectedToFailOnAndroid(test_linkItemAtPathToPath, "Android doesn't allow hard links")), - ("test_resolvingSymlinksInPath", test_resolvingSymlinksInPath), - ("test_homedirectoryForUser", test_homedirectoryForUser), - ("test_temporaryDirectoryForUser", test_temporaryDirectoryForUser), - ("test_creatingDirectoryWithShortIntermediatePath", test_creatingDirectoryWithShortIntermediatePath), - ("test_mountedVolumeURLs", test_mountedVolumeURLs), - ("test_copyItemsPermissions", test_copyItemsPermissions), - ("test_emptyFilename", test_emptyFilename), - ("test_getRelationship", test_getRelationship), - ("test_displayNames", test_displayNames), - ("test_getItemReplacementDirectory", test_getItemReplacementDirectory), - ("test_contentsEqual", test_contentsEqual), - ("test_setInvalidFileAttributes", test_setInvalidFileAttributes), - /* ⚠️ */ ("test_replacement", testExpectedToFail(test_replacement, - /* ⚠️ */ " Re-enable Foundation test TestFileManager.test_replacement")), - /* ⚠️ */("test_concurrentGetItemReplacementDirectory", testExpectedToFail(test_concurrentGetItemReplacementDirectory, "Intermittent SEGFAULT: rdar://84519512")), - ("test_NSTemporaryDirectory", test_NSTemporaryDirectory), - ] - - #if !DEPLOYMENT_RUNTIME_OBJC && NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT && !os(Android) - tests.append(contentsOf: [ - ("test_xdgStopgapsCoverAllConstants", test_xdgStopgapsCoverAllConstants), - ("test_parseXDGConfiguration", test_parseXDGConfiguration), - ("test_xdgURLSelection", test_xdgURLSelection), - ]) - #endif - - #if !DEPLOYMENT_RUNTIME_OBJC && !os(Android) && !os(Windows) - tests.append(contentsOf: [ - ("test_fetchXDGPathsFromHelper", test_fetchXDGPathsFromHelper), - ]) - #endif - - #if os(Windows) - tests.append(contentsOf: [ - ("test_windowsPaths", test_windowsPaths), - ]) - #endif - - return tests - } } diff --git a/Tests/Foundation/TestHTTPCookie.swift b/Tests/Foundation/TestHTTPCookie.swift index b234779882..812c4639b3 100644 --- a/Tests/Foundation/TestHTTPCookie.swift +++ b/Tests/Foundation/TestHTTPCookie.swift @@ -8,34 +8,6 @@ // class TestHTTPCookie: XCTestCase { - - static var allTests: [(String, (TestHTTPCookie) -> () throws -> Void)] { - return [ - ("test_BasicConstruction", test_BasicConstruction), - ("test_cookieDomainCanonicalization", test_cookieDomainCanonicalization), - ("test_RequestHeaderFields", test_RequestHeaderFields), - ("test_cookiesWithResponseHeader1cookie", test_cookiesWithResponseHeader1cookie), - ("test_cookiesWithResponseHeader0cookies", test_cookiesWithResponseHeader0cookies), - ("test_cookiesWithResponseHeader2cookies", test_cookiesWithResponseHeader2cookies), - ("test_cookiesWithResponseHeaderNoDomain", test_cookiesWithResponseHeaderNoDomain), - ("test_cookiesWithResponseHeaderNoPathNoDomain", test_cookiesWithResponseHeaderNoPathNoDomain), - ("test_cookiesWithResponseHeaderNoNameValue", test_cookiesWithResponseHeaderNoNameValue), - ("test_cookiesWithResponseHeaderNoName", test_cookiesWithResponseHeaderNoName), - ("test_cookiesWithResponseHeaderEmptyName", test_cookiesWithResponseHeaderEmptyName), - ("test_cookiesWithResponseHeaderNoValue", test_cookiesWithResponseHeaderNoValue), - ("test_cookiesWithResponseHeaderAttributeWithoutNameIsIgnored", test_cookiesWithResponseHeaderAttributeWithoutNameIsIgnored), - ("test_cookiesWithResponseHeaderValuelessAttributes", test_cookiesWithResponseHeaderValuelessAttributes), - ("test_cookiesWithResponseHeaderValuedAttributes", test_cookiesWithResponseHeaderValuedAttributes), - ("test_cookiesWithResponseHeaderInvalidPath", test_cookiesWithResponseHeaderInvalidPath), - ("test_cookiesWithResponseHeaderWithEqualsInValue", test_cookiesWithResponseHeaderWithEqualsInValue), - ("test_cookiesWithResponseHeaderSecondCookieInvalidToken", test_cookiesWithResponseHeaderSecondCookieInvalidToken), - ("test_cookieExpiresDateFormats", test_cookieExpiresDateFormats), - ("test_cookiesWithExpiresAsLastAttribute", test_cookiesWithExpiresAsLastAttribute), - ("test_cookiesWithResponseHeaderTrimsNames", test_cookiesWithResponseHeaderTrimsNames), - ("test_httpCookieWithSubstring", test_httpCookieWithSubstring), - ] - } - func test_BasicConstruction() { let invalidVersionZeroCookie = HTTPCookie(properties: [ .name: "TestCookie", diff --git a/Tests/Foundation/TestHTTPCookieStorage.swift b/Tests/Foundation/TestHTTPCookieStorage.swift index 619022eae0..64582842e2 100644 --- a/Tests/Foundation/TestHTTPCookieStorage.swift +++ b/Tests/Foundation/TestHTTPCookieStorage.swift @@ -320,7 +320,7 @@ class TestHTTPCookieStorage: XCTestCase { storage.setCookie(testCookie) XCTAssertEqual(storage.cookies!.count, 1) let destPath: String - let bundleName = "/" + testBundleName() + let bundleName = "/" + Bundle.main.bundlePath.split(separator: "/").last!.prefix(while: { $0 != "." }) if let xdg_data_home = getenv("XDG_DATA_HOME") { destPath = String(utf8String: xdg_data_home)! + bundleName + "/.cookies.shared" } else { @@ -385,20 +385,4 @@ class TestHTTPCookieStorage: XCTestCase { XCTAssertEqual(result, [cookie, cookie3, cookie2]) } - - static var allTests: [(String, (TestHTTPCookieStorage) -> () throws -> Void)] { - return [ - ("test_sharedCookieStorageAccessedFromMultipleThreads", test_sharedCookieStorageAccessedFromMultipleThreads), - ("test_BasicStorageAndRetrieval", test_BasicStorageAndRetrieval), - ("test_deleteCookie", test_deleteCookie), - ("test_removeCookies", test_removeCookies), - ("test_cookiesForURL", test_cookiesForURL), - ("test_cookiesForURLWithMainDocumentURL", test_cookiesForURLWithMainDocumentURL), - ("test_cookieInXDGSpecPath", test_cookieInXDGSpecPath), - ("test_descriptionCookie", test_descriptionCookie), - ("test_cookieDomainMatching", test_cookieDomainMatching), - ("test_sorting", test_sorting), - ] - } - } diff --git a/Tests/Foundation/TestHTTPURLResponse.swift b/Tests/Foundation/TestHTTPURLResponse.swift index dc3bc8c77c..41a6a52e4c 100644 --- a/Tests/Foundation/TestHTTPURLResponse.swift +++ b/Tests/Foundation/TestHTTPURLResponse.swift @@ -247,42 +247,4 @@ class TestHTTPURLResponse: XCTestCase { XCTAssertEqual(responseA.textEncodingName, responseB.textEncodingName, "Archived then unarchived http url response must be equal.") XCTAssertEqual(responseA.suggestedFilename, responseB.suggestedFilename, "Archived then unarchived http url response must be equal.") } - - static var allTests: [(String, (TestHTTPURLResponse) -> () throws -> Void)] { - return [ - ("test_URL_and_status_1", test_URL_and_status_1), - ("test_URL_and_status_2", test_URL_and_status_2), - - ("test_headerFields_1", test_headerFields_1), - ("test_headerFields_2", test_headerFields_2), - ("test_headerFields_3", test_headerFields_3), - - ("test_contentLength_available_1", test_contentLength_available_1), - ("test_contentLength_available_2", test_contentLength_available_2), - ("test_contentLength_available_3", test_contentLength_available_3), - ("test_contentLength_available_4", test_contentLength_available_4), - ("test_contentLength_notAvailable", test_contentLength_notAvailable), - ("test_contentLength_withTransferEncoding", test_contentLength_withTransferEncoding), - ("test_contentLength_withContentEncoding", test_contentLength_withContentEncoding), - ("test_contentLength_withContentEncodingAndTransferEncoding", test_contentLength_withContentEncodingAndTransferEncoding), - ("test_contentLength_withContentEncodingAndTransferEncoding_2", test_contentLength_withContentEncodingAndTransferEncoding_2), - - ("test_suggestedFilename_notAvailable_1", test_suggestedFilename_notAvailable_1), - ("test_suggestedFilename_notAvailable_2", test_suggestedFilename_notAvailable_2), - - ("test_suggestedFilename_1", test_suggestedFilename_1), - ("test_suggestedFilename_2", test_suggestedFilename_2), - ("test_suggestedFilename_3", test_suggestedFilename_3), - ("test_suggestedFilename_4", test_suggestedFilename_4), - ("test_suggestedFilename_removeSlashes_1", test_suggestedFilename_removeSlashes_1), - ("test_suggestedFilename_removeSlashes_2", test_suggestedFilename_removeSlashes_2), - - ("test_MIMETypeAndCharacterEncoding_1", test_MIMETypeAndCharacterEncoding_1), - ("test_MIMETypeAndCharacterEncoding_2", test_MIMETypeAndCharacterEncoding_2), - ("test_MIMETypeAndCharacterEncoding_3", test_MIMETypeAndCharacterEncoding_3), - - ("test_fieldCapitalisation", test_fieldCapitalisation), - ("test_NSCoding", test_NSCoding), - ] - } } diff --git a/Tests/Foundation/TestHost.swift b/Tests/Foundation/TestHost.swift index 2a78d13920..db15ecfcca 100644 --- a/Tests/Foundation/TestHost.swift +++ b/Tests/Foundation/TestHost.swift @@ -8,15 +8,6 @@ // class TestHost: XCTestCase { - - static var allTests: [(String, (TestHost) -> () throws -> Void)] { - return [ - ("test_addressesDoNotGrow", test_addressesDoNotGrow), - ("test_isEqual", test_isEqual), - ("test_localNamesNonEmpty", test_localNamesNonEmpty), - ] - } - // SR-6391 func test_addressesDoNotGrow() { let local = Host.current() diff --git a/Tests/Foundation/TestISO8601DateFormatter.swift b/Tests/Foundation/TestISO8601DateFormatter.swift index e1fdd2d614..2c333682ca 100644 --- a/Tests/Foundation/TestISO8601DateFormatter.swift +++ b/Tests/Foundation/TestISO8601DateFormatter.swift @@ -348,16 +348,4 @@ class TestISO8601DateFormatter: XCTestCase { XCTAssertFalse(original.formatOptions.contains(.withFractionalSeconds)) XCTAssertTrue(copied.formatOptions.contains(.withFractionalSeconds)) } - - static var allTests : [(String, (TestISO8601DateFormatter) -> () throws -> Void)] { - - return [ - ("test_stringFromDate", test_stringFromDate), - ("test_dateFromString", test_dateFromString), - ("test_stringFromDateClass", test_stringFromDateClass), - ("test_codingRoundtrip", test_codingRoundtrip), - ("test_loadingFixtures", test_loadingFixtures), - ("test_copy", test_copy), - ] - } } diff --git a/Tests/Foundation/TestIndexPath.swift b/Tests/Foundation/TestIndexPath.swift index 14aeb4cd42..91203fb2a8 100644 --- a/Tests/Foundation/TestIndexPath.swift +++ b/Tests/Foundation/TestIndexPath.swift @@ -763,61 +763,4 @@ class TestIndexPath: XCTestCase { try fixture.assertLoadedValuesMatch() } } - - static var allTests: [(String, (TestIndexPath) -> () throws -> Void)] { - return [ - ("testEmpty", testEmpty), - ("testSingleIndex", testSingleIndex), - ("testTwoIndexes", testTwoIndexes), - ("testManyIndexes", testManyIndexes), - ("testCreateFromSequence", testCreateFromSequence), - ("testCreateFromLiteral", testCreateFromLiteral), - ("testDropLast", testDropLast), - ("testDropLastFromEmpty", testDropLastFromEmpty), - ("testDropLastFromSingle", testDropLastFromSingle), - ("testDropLastFromPair", testDropLastFromPair), - ("testDropLastFromTriple", testDropLastFromTriple), - ("testStartEndIndex", testStartEndIndex), - ("testIterator", testIterator), - ("testIndexing", testIndexing), - ("testCompare", testCompare), - ("testHashing", testHashing), - ("testEquality", testEquality), - ("testSubscripting", testSubscripting), - ("testAppending", testAppending), - ("testAppendEmpty", testAppendEmpty), - ("testAppendEmptyIndexPath", testAppendEmptyIndexPath), - ("testAppendManyIndexPath", testAppendManyIndexPath), - ("testAppendEmptyIndexPathToSingle", testAppendEmptyIndexPathToSingle), - ("testAppendSingleIndexPath", testAppendSingleIndexPath), - ("testAppendSingleIndexPathToSingle", testAppendSingleIndexPathToSingle), - ("testAppendPairIndexPath", testAppendPairIndexPath), - ("testAppendManyIndexPathToEmpty", testAppendManyIndexPathToEmpty), - ("testAppendByOperator", testAppendByOperator), - ("testAppendArray", testAppendArray), - ("testRanges", testRanges), - ("testRangeFromEmpty", testRangeFromEmpty), - ("testRangeFromSingle", testRangeFromSingle), - ("testRangeFromPair", testRangeFromPair), - ("testRangeFromMany", testRangeFromMany), - ("testRangeReplacementSingle", testRangeReplacementSingle), - ("testRangeReplacementPair", testRangeReplacementPair), - ("testMoreRanges", testMoreRanges), - ("testIteration", testIteration), - ("testDescription", testDescription), - ("testBridgeToObjC", testBridgeToObjC), - ("testForceBridgeFromObjC", testForceBridgeFromObjC), - ("testConditionalBridgeFromObjC", testConditionalBridgeFromObjC), - ("testUnconditionalBridgeFromObjC", testUnconditionalBridgeFromObjC), - ("testObjcBridgeType", testObjcBridgeType), - ("test_AnyHashableContainingIndexPath", test_AnyHashableContainingIndexPath), - ("test_AnyHashableCreatedFromNSIndexPath", test_AnyHashableCreatedFromNSIndexPath), - ("test_unconditionallyBridgeFromObjectiveC", test_unconditionallyBridgeFromObjectiveC), - ("test_slice_1ary", test_slice_1ary), - ("test_copy", test_copy), - ("testCodingRoundtrip", testCodingRoundtrip), - ("testLoadedValuesMatch", testLoadedValuesMatch), - ] - } - } diff --git a/Tests/Foundation/TestIndexSet.swift b/Tests/Foundation/TestIndexSet.swift index 641c8aac5b..256a1cc5b5 100644 --- a/Tests/Foundation/TestIndexSet.swift +++ b/Tests/Foundation/TestIndexSet.swift @@ -1269,57 +1269,4 @@ class TestIndexSet : XCTestCase { let sample10 = IndexSet() XCTAssertEqual(sample9.hashValue, sample10.hashValue) } - - static var allTests: [(String, (TestIndexSet) -> () throws -> Void)] { - return [ - ("test_BasicConstruction", test_BasicConstruction), - ("test_enumeration", test_enumeration), - ("test_sequenceType", test_sequenceType), - ("test_removal", test_removal), - ("test_addition", test_addition), - ("test_setAlgebra", test_setAlgebra), - ("test_copy", test_copy), - ("test_BasicConstruction", test_BasicConstruction), - ("test_copy", test_copy), - ("test_enumeration", test_enumeration), - ("test_sequenceType", test_sequenceType), - ("test_removal", test_removal), - ("test_addition", test_addition), - ("test_setAlgebra", test_setAlgebra), - ("testEnumeration", testEnumeration), - ("testSubsequence", testSubsequence), - ("testIndexRange", testIndexRange), - ("testMutation", testMutation), - ("testContainsAndIntersects", testContainsAndIntersects), - ("testContainsIndexSet", testContainsIndexSet), - ("testIteration", testIteration), - ("testRangeIteration", testRangeIteration), - ("testSubrangeIteration", testSubrangeIteration), - ("testSlicing", testSlicing), - ("testEmptyIteration", testEmptyIteration), - ("testSubsequences", testSubsequences), - ("testFiltering", testFiltering), - ("testFilteringRanges", testFilteringRanges), - ("testShift", testShift), - ("testSymmetricDifference", testSymmetricDifference), - ("testIntersection", testIntersection), - ("testUnion", testUnion), - ("test_findIndex", test_findIndex), - ("testIndexingPerformance", testIndexingPerformance), - ("test_AnyHashableContainingIndexSet", test_AnyHashableContainingIndexSet), - ("test_AnyHashableCreatedFromNSIndexSet", test_AnyHashableCreatedFromNSIndexSet), - ("test_unconditionallyBridgeFromObjectiveC", test_unconditionallyBridgeFromObjectiveC), - ("testInsertNonOverlapping", testInsertNonOverlapping), - ("testInsertOverlapping", testInsertOverlapping), - ("testInsertOverlappingExtend", testInsertOverlappingExtend), - ("testInsertOverlappingMultiple", testInsertOverlappingMultiple), - ("testRemoveNonOverlapping", testRemoveNonOverlapping), - ("testRemoveOverlapping", testRemoveOverlapping), - ("testRemoveSplitting", testRemoveSplitting), - ("testCodingRoundtrip", testCodingRoundtrip), - ("testLoadedValuesMatch", testLoadedValuesMatch), - ("testHashValue", testHashValue), - ] - } - } diff --git a/Tests/Foundation/TestJSONEncoder.swift b/Tests/Foundation/TestJSONEncoder.swift index b208e4f188..0616cac689 100644 --- a/Tests/Foundation/TestJSONEncoder.swift +++ b/Tests/Foundation/TestJSONEncoder.swift @@ -1589,68 +1589,3 @@ fileprivate struct JSON: Equatable { } } } - -// MARK: - Run Tests - -extension TestJSONEncoder { - static var allTests: [(String, (TestJSONEncoder) -> () throws -> Void)] { - return [ - ("test_encodingTopLevelFragments", test_encodingTopLevelFragments), - ("test_encodingTopLevelEmptyStruct", test_encodingTopLevelEmptyStruct), - ("test_encodingTopLevelEmptyClass", test_encodingTopLevelEmptyClass), - ("test_encodingTopLevelSingleValueEnum", test_encodingTopLevelSingleValueEnum), - ("test_encodingTopLevelSingleValueStruct", test_encodingTopLevelSingleValueStruct), - ("test_encodingTopLevelSingleValueClass", test_encodingTopLevelSingleValueClass), - ("test_encodingTopLevelStructuredStruct", test_encodingTopLevelStructuredStruct), - ("test_encodingTopLevelStructuredClass", test_encodingTopLevelStructuredClass), - ("test_encodingTopLevelStructuredSingleStruct", test_encodingTopLevelStructuredSingleStruct), - ("test_encodingTopLevelStructuredSingleClass", test_encodingTopLevelStructuredSingleClass), - ("test_encodingTopLevelDeepStructuredType", test_encodingTopLevelDeepStructuredType), - ("test_encodingOutputFormattingDefault", test_encodingOutputFormattingDefault), - ("test_encodingOutputFormattingPrettyPrinted", test_encodingOutputFormattingPrettyPrinted), - ("test_encodingOutputFormattingSortedKeys", test_encodingOutputFormattingSortedKeys), - ("test_encodingOutputFormattingPrettyPrintedSortedKeys", test_encodingOutputFormattingPrettyPrintedSortedKeys), - ("test_encodingDate", test_encodingDate), - ("test_encodingDateSecondsSince1970", test_encodingDateSecondsSince1970), - ("test_encodingDateMillisecondsSince1970", test_encodingDateMillisecondsSince1970), - ("test_encodingDateISO8601", test_encodingDateISO8601), - ("test_encodingDateFormatted", test_encodingDateFormatted), - ("test_encodingDateCustom", test_encodingDateCustom), - ("test_encodingDateCustomEmpty", test_encodingDateCustomEmpty), - ("test_encodingBase64Data", test_encodingBase64Data), - ("test_encodingCustomData", test_encodingCustomData), - ("test_encodingCustomDataEmpty", test_encodingCustomDataEmpty), - ("test_encodingNonConformingFloats", test_encodingNonConformingFloats), - ("test_encodingNonConformingFloatStrings", test_encodingNonConformingFloatStrings), - ("test_encodeDecodeNumericTypesBaseline", test_encodeDecodeNumericTypesBaseline), - ("test_nestedContainerCodingPaths", test_nestedContainerCodingPaths), - ("test_superEncoderCodingPaths", test_superEncoderCodingPaths), - ("test_notFoundSuperDecoder", test_notFoundSuperDecoder), - ("test_childTypeDecoder", test_childTypeDecoder), - ("test_codingOfBool", test_codingOfBool), - ("test_codingOfNil", test_codingOfNil), - ("test_codingOfInt8", test_codingOfInt8), - ("test_codingOfUInt8", test_codingOfUInt8), - ("test_codingOfInt16", test_codingOfInt16), - ("test_codingOfUInt16", test_codingOfUInt16), - ("test_codingOfInt32", test_codingOfInt32), - ("test_codingOfUInt32", test_codingOfUInt32), - ("test_codingOfInt64", test_codingOfInt64), - ("test_codingOfUInt64", test_codingOfUInt64), - ("test_codingOfInt", test_codingOfInt), - ("test_codingOfUInt", test_codingOfUInt), - ("test_codingOfFloat", test_codingOfFloat), - ("test_codingOfDouble", test_codingOfDouble), - ("test_codingOfDecimal", test_codingOfDecimal), - ("test_codingOfString", test_codingOfString), - ("test_codingOfURL", test_codingOfURL), - ("test_codingOfUIntMinMax", test_codingOfUIntMinMax), - ("test_numericLimits", test_numericLimits), - ("test_snake_case_encoding", test_snake_case_encoding), - ("test_dictionary_snake_case_decoding", test_dictionary_snake_case_decoding), - ("test_dictionary_snake_case_encoding", test_dictionary_snake_case_encoding), - ("test_OutputFormattingValues", test_OutputFormattingValues), - ("test_SR17581_codingEmptyDictionaryWithNonstringKeyDoesRoundtrip", test_SR17581_codingEmptyDictionaryWithNonstringKeyDoesRoundtrip), - ] - } -} diff --git a/Tests/Foundation/TestJSONSerialization.swift b/Tests/Foundation/TestJSONSerialization.swift index 02f7399d85..19ca8423c1 100644 --- a/Tests/Foundation/TestJSONSerialization.swift +++ b/Tests/Foundation/TestJSONSerialization.swift @@ -14,26 +14,10 @@ class TestJSONSerialization : XCTestCase { .utf16, .utf16BigEndian, .utf32LittleEndian, .utf32BigEndian ] - - static var allTests: [(String, (TestJSONSerialization) -> () throws -> Void)] { - return JSONObjectWithDataTests - + deserializationTests - + isValidJSONObjectTests - + serializationTests - } - } //MARK: - JSONObjectWithData extension TestJSONSerialization { - - class var JSONObjectWithDataTests: [(String, (TestJSONSerialization) -> () throws -> Void)] { - return [ - ("test_JSONObjectWithData_emptyObject", test_JSONObjectWithData_emptyObject), - ("test_JSONObjectWithData_encodingDetection", test_JSONObjectWithData_encodingDetection), - ] - } - func test_JSONObjectWithData_emptyObject() { var bytes: [UInt8] = [0x7B, 0x7D] let subject = bytes.withUnsafeMutableBufferPointer { @@ -85,87 +69,6 @@ extension TestJSONSerialization { } static var objectType = ObjectType.data - class var deserializationTests: [(String, (TestJSONSerialization) -> () throws -> Void)] { - return [ - //Deserialization with Data - ("test_deserialize_emptyObject_withData", test_deserialize_emptyObject_withData), - ("test_deserialize_multiStringObject_withData", test_deserialize_multiStringObject_withData), - ("test_deserialize_stringWithSpacesAtStart_withData", test_deserialize_stringWithSpacesAtStart_withData), - ("test_deserialize_highlyNestedArray_withData", test_deserialize_highlyNestedObject_withData), - - ("test_deserialize_emptyArray_withData", test_deserialize_emptyArray_withData), - ("test_deserialize_multiStringArray_withData", test_deserialize_multiStringArray_withData), - ("test_deserialize_unicodeString_withData", test_deserialize_unicodeString_withData), - ("test_deserialize_highlyNestedArray_withData", test_deserialize_highlyNestedArray_withData), - - ("test_deserialize_values_withData", test_deserialize_values_withData), - ("test_deserialize_values_as_reference_types_withData", test_deserialize_values_as_reference_types_withData), - ("test_deserialize_numbers_withData", test_deserialize_numbers_withData), - ("test_deserialize_numberWithLeadingZero_withData", test_deserialize_numberWithLeadingZero_withData), - ("test_deserialize_numberThatIsntRepresentableInSwift_withData", test_deserialize_numberThatIsntRepresentableInSwift_withData), - ("test_deserialize_numbers_as_reference_types_withData", test_deserialize_numbers_as_reference_types_withData), - - ("test_deserialize_simpleEscapeSequences_withData", test_deserialize_simpleEscapeSequences_withData), - ("test_deserialize_unicodeEscapeSequence_withData", test_deserialize_unicodeEscapeSequence_withData), - ("test_deserialize_unicodeSurrogatePairEscapeSequence_withData", test_deserialize_unicodeSurrogatePairEscapeSequence_withData), - ("test_deserialize_allowFragments_withData", test_deserialize_allowFragments_withData), - ("test_deserialize_unescapedControlCharactersWithData", test_deserialize_unescapedControlCharactersWithData), - ("test_deserialize_unescapedReversedSolidusWithData", test_deserialize_unescapedReversedSolidusWithData), - - ("test_deserialize_unterminatedObjectString_withData", test_deserialize_unterminatedObjectString_withData), - ("test_deserialize_missingObjectKey_withData", test_deserialize_missingObjectKey_withData), - ("test_deserialize_unexpectedEndOfFile_withData", test_deserialize_unexpectedEndOfFile_withData), - ("test_deserialize_invalidValueInObject_withData", test_deserialize_invalidValueInObject_withData), - ("test_deserialize_invalidValueIncorrectSeparatorInObject_withData", test_deserialize_invalidValueIncorrectSeparatorInObject_withData), - ("test_deserialize_invalidValueInArray_withData", test_deserialize_invalidValueInArray_withData), - ("test_deserialize_badlyFormedArray_withData", test_deserialize_badlyFormedArray_withData), - ("test_deserialize_invalidEscapeSequence_withData", test_deserialize_invalidEscapeSequence_withData), - ("test_deserialize_unicodeMissingLeadingSurrogate_withData", test_deserialize_unicodeMissingLeadingSurrogate_withData), - ("test_deserialize_unicodeMissingTrailingSurrogate_withData", test_deserialize_unicodeMissingTrailingSurrogate_withData), - - //Deserialization with Stream - ("test_deserialize_emptyObject_withStream", test_deserialize_emptyObject_withStream), - ("test_deserialize_multiStringObject_withStream", test_deserialize_multiStringObject_withStream), - ("test_deserialize_stringWithSpacesAtStart_withStream", test_deserialize_stringWithSpacesAtStart_withStream), - ("test_deserialize_highlyNestedObject_withStream", test_deserialize_highlyNestedObject_withStream), - - ("test_deserialize_emptyArray_withStream", test_deserialize_emptyArray_withStream), - ("test_deserialize_multiStringArray_withStream", test_deserialize_multiStringArray_withStream), - ("test_deserialize_unicodeString_withStream", test_deserialize_unicodeString_withStream), - ("test_deserialize_highlyNestedArray_withStream", test_deserialize_highlyNestedArray_withStream), - - ("test_deserialize_values_withStream", test_deserialize_values_withStream), - ("test_deserialize_values_as_reference_types_withStream", test_deserialize_values_as_reference_types_withStream), - ("test_deserialize_numbers_withStream", test_deserialize_numbers_withStream), - ("test_deserialize_numberWithLeadingZero_withStream", test_deserialize_numberWithLeadingZero_withStream), - ("test_deserialize_numberThatIsntRepresentableInSwift_withStream", test_deserialize_numberThatIsntRepresentableInSwift_withStream), - ("test_deserialize_numbers_as_reference_types_withStream", test_deserialize_numbers_as_reference_types_withStream), - - ("test_deserialize_simpleEscapeSequences_withStream", test_deserialize_simpleEscapeSequences_withStream), - ("test_deserialize_unicodeEscapeSequence_withStream", test_deserialize_unicodeEscapeSequence_withStream), - ("test_deserialize_unicodeSurrogatePairEscapeSequence_withStream", test_deserialize_unicodeSurrogatePairEscapeSequence_withStream), - ("test_deserialize_allowFragments_withStream", test_deserialize_allowFragments_withStream), - ("test_deserialize_unescapedControlCharactersWithStream", test_deserialize_unescapedControlCharactersWithStream), - ("test_deserialize_unescapedReversedSolidusWithStream", test_deserialize_unescapedReversedSolidusWithStream), - - ("test_deserialize_unterminatedObjectString_withStream", test_deserialize_unterminatedObjectString_withStream), - ("test_deserialize_missingObjectKey_withStream", test_deserialize_missingObjectKey_withStream), - ("test_deserialize_unexpectedEndOfFile_withStream", test_deserialize_unexpectedEndOfFile_withStream), - ("test_deserialize_invalidValueInObject_withStream", test_deserialize_invalidValueInObject_withStream), - ("test_deserialize_invalidValueIncorrectSeparatorInObject_withStream", test_deserialize_invalidValueIncorrectSeparatorInObject_withStream), - ("test_deserialize_invalidValueInArray_withStream", test_deserialize_invalidValueInArray_withStream), - ("test_deserialize_badlyFormedArray_withStream", test_deserialize_badlyFormedArray_withStream), - ("test_deserialize_invalidEscapeSequence_withStream", test_deserialize_invalidEscapeSequence_withStream), - ("test_deserialize_unicodeMissingLeadingSurrogate_withStream", test_deserialize_unicodeMissingLeadingSurrogate_withStream), - ("test_deserialize_unicodeMissingTrailingSurrogate_withStream", test_deserialize_unicodeMissingTrailingSurrogate_withStream), - ("test_JSONObjectWithStream_withFile", test_JSONObjectWithStream_withFile), - ("test_JSONObjectWithStream_withURL", test_JSONObjectWithStream_withURL), - - ("test_bailOnDeepValidStructure", test_bailOnDeepValidStructure), - ("test_bailOnDeepInvalidStructure", test_bailOnDeepInvalidStructure), - ] - } - func test_deserialize_emptyObject_withData() { deserialize_emptyObject(objectType: .data) } @@ -968,15 +871,6 @@ extension TestJSONSerialization { // MARK: - isValidJSONObjectTests extension TestJSONSerialization { - - class var isValidJSONObjectTests: [(String, (TestJSONSerialization) -> () throws -> Void)] { - return [ - ("test_isValidJSONObjectTrue", test_isValidJSONObjectTrue), - ("test_isValidJSONObjectFalse", test_isValidJSONObjectFalse), - ("test_validNumericJSONObjects", test_validNumericJSONObjects) - ] - } - func test_isValidJSONObjectTrue() { let trueJSON: [Any] = [ // [] @@ -1104,42 +998,6 @@ extension TestJSONSerialization { // MARK: - serializationTests extension TestJSONSerialization { - - class var serializationTests: [(String, (TestJSONSerialization) -> () throws -> Void)] { - return [ - ("test_serialize_emptyObject", test_serialize_emptyObject), - ("test_serialize_null", test_serialize_null), - ("test_serialize_complexObject", test_serialize_complexObject), - ("test_nested_array", test_nested_array), - ("test_nested_dictionary", test_nested_dictionary), - ("test_serialize_number", test_serialize_number), - ("test_serialize_IntMax", test_serialize_IntMax), - ("test_serialize_IntMin", test_serialize_IntMin), - ("test_serialize_UIntMax", test_serialize_UIntMax), - ("test_serialize_UIntMin", test_serialize_UIntMin), - ("test_serialize_8BitSizes", test_serialize_8BitSizes), - ("test_serialize_16BitSizes", test_serialize_16BitSizes), - ("test_serialize_32BitSizes", test_serialize_32BitSizes), - ("test_serialize_64BitSizes", test_serialize_64BitSizes), - ("test_serialize_Float", test_serialize_Float), - ("test_serialize_Double", test_serialize_Double), - ("test_serialize_Decimal", test_serialize_Decimal), - ("test_serialize_NSDecimalNumber", test_serialize_NSDecimalNumber), - ("test_serialize_stringEscaping", test_serialize_stringEscaping), - ("test_serialize_fragments", test_serialize_fragments), - ("test_serialize_withoutEscapingSlashes", test_serialize_withoutEscapingSlashes), - ("test_jsonReadingOffTheEndOfBuffers", test_jsonReadingOffTheEndOfBuffers), - ("test_jsonObjectToOutputStreamBuffer", test_jsonObjectToOutputStreamBuffer), - ("test_jsonObjectToOutputStreamFile", test_jsonObjectToOutputStreamFile), - ("test_jsonObjectToOutputStreamInsufficientBuffer", test_jsonObjectToOutputStreamInsufficientBuffer), - ("test_booleanJSONObject", test_booleanJSONObject), - ("test_serialize_dictionaryWithDecimal", test_serialize_dictionaryWithDecimal), - ("test_serializeDecimalNumberJSONObject", test_serializeDecimalNumberJSONObject), - ("test_serializeSortedKeys", test_serializeSortedKeys), - ("test_serializePrettyPrinted", test_serializePrettyPrinted), - ] - } - func trySerialize(_ obj: Any, options: JSONSerialization.WritingOptions = []) throws -> String { let data = try JSONSerialization.data(withJSONObject: obj, options: options) guard let string = String(data: data, encoding: .utf8) else { diff --git a/Tests/Foundation/TestLengthFormatter.swift b/Tests/Foundation/TestLengthFormatter.swift index a3e130e9b8..97faeabd3d 100644 --- a/Tests/Foundation/TestLengthFormatter.swift +++ b/Tests/Foundation/TestLengthFormatter.swift @@ -10,18 +10,6 @@ class TestLengthFormatter: XCTestCase { let formatter: LengthFormatter = LengthFormatter() - static var allTests: [(String, (TestLengthFormatter) -> () throws -> Void)] { - return [ - ("test_stringFromMetersUS", test_stringFromMetersUS), - ("test_stringFromMetersUSPersonHeight", test_stringFromMetersUSPersonHeight), - ("test_stringFromMetersMetric", test_stringFromMetersMetric), - ("test_stringFromMetersMetricPersonHeight", test_stringFromMetersMetricPersonHeight), - ("test_stringFromValue", test_stringFromValue), - ("test_unitStringFromMeters", test_unitStringFromMeters), - ("test_unitStringFromValue", test_unitStringFromValue) - ] - } - override func setUp() { formatter.numberFormatter.locale = Locale(identifier: "en_US") formatter.isForPersonHeightUse = false diff --git a/Tests/Foundation/TestMassFormatter.swift b/Tests/Foundation/TestMassFormatter.swift index b9adcf023f..6359ec605e 100644 --- a/Tests/Foundation/TestMassFormatter.swift +++ b/Tests/Foundation/TestMassFormatter.swift @@ -10,17 +10,6 @@ class TestMassFormatter: XCTestCase { let formatter: MassFormatter = MassFormatter() - static var allTests: [(String, (TestMassFormatter) -> () throws -> Void)] { - return [ - ("test_stringFromKilogramsImperialRegion", test_stringFromKilogramsImperialRegion), - ("test_stringFromKilogramsMetricRegion", test_stringFromKilogramsMetricRegion), - ("test_stringFromKilogramsMetricRegionPersonMassUse", test_stringFromKilogramsMetricRegionPersonMassUse), - ("test_stringFromValue", test_stringFromValue), - ("test_unitStringFromKilograms", test_unitStringFromKilograms), - ("test_unitStringFromValue", test_unitStringFromValue), - ] - } - override func setUp() { formatter.numberFormatter.locale = Locale(identifier: "en_US") formatter.isForPersonMassUse = false diff --git a/Tests/Foundation/TestMeasurement.swift b/Tests/Foundation/TestMeasurement.swift index 97143b4014..ec93bf1832 100644 --- a/Tests/Foundation/TestMeasurement.swift +++ b/Tests/Foundation/TestMeasurement.swift @@ -88,10 +88,4 @@ class TestMeasurement: XCTestCase { try fixture.assertLoadedValuesMatch() } } - - static let allTests = [ - ("testHashing", testHashing), - ("testCodingRoundtrip", testCodingRoundtrip), - ("testLoadedValuesMatch", testLoadedValuesMatch), - ] } diff --git a/Tests/Foundation/TestNSArray.swift b/Tests/Foundation/TestNSArray.swift index 18475ee185..c05e6d2be2 100644 --- a/Tests/Foundation/TestNSArray.swift +++ b/Tests/Foundation/TestNSArray.swift @@ -8,46 +8,6 @@ // class TestNSArray : XCTestCase { - - static var allTests: [(String, (TestNSArray) -> () throws -> Void)] { - var tests: [(String, (TestNSArray) -> () throws -> Void)] = [ - ("test_BasicConstruction", test_BasicConstruction), - ("test_constructors", test_constructors), - ("test_constructorWithCopyItems", test_constructorWithCopyItems), - ("test_enumeration", test_enumeration), - ("test_enumerationUsingBlock", test_enumerationUsingBlock), - ("test_sequenceType", test_sequenceType), - ("test_objectAtIndex", test_objectAtIndex), - ("test_binarySearch", test_binarySearch), - ("test_binarySearchFringeCases", test_binarySearchFringeCases), - ("test_replaceObjectsInRange_withObjectsFrom", test_replaceObjectsInRange_withObjectsFrom), - ("test_replaceObjectsInRange_withObjectsFrom_range", test_replaceObjectsInRange_withObjectsFrom_range), - ("test_replaceObjectAtIndex", test_replaceObjectAtIndex), - ("test_removeObjectsInArray", test_removeObjectsInArray), - ("test_sortedArrayUsingComparator", test_sortedArrayUsingComparator), - ("test_sortedArrayWithOptionsUsingComparator", test_sortedArrayWithOptionsUsingComparator), - ("test_arrayReplacement", test_arrayReplacement), - ("test_arrayReplaceObjectsInRangeFromRange", test_arrayReplaceObjectsInRangeFromRange), - ("test_sortUsingFunction", test_sortUsingFunction), - ("test_sortUsingComparator", test_sortUsingComparator), - ("test_equality", test_equality), - ("test_copying", test_copying), - ("test_mutableCopying", test_mutableCopying), - ("test_writeToFile", test_writeToFile), - ("test_initWithContentsOfFile", test_initWithContentsOfFile), - ("test_initMutableWithContentsOfFile", test_initMutableWithContentsOfFile), - ("test_initMutableWithContentsOfURL", test_initMutableWithContentsOfURL), - ("test_readWriteURL", test_readWriteURL), - ("test_insertObjectAtIndex", test_insertObjectAtIndex), - ("test_insertObjectsAtIndexes", test_insertObjectsAtIndexes), - ("test_replaceObjectsAtIndexesWithObjects", test_replaceObjectsAtIndexesWithObjects), - ("test_pathsMatchingExtensions", test_pathsMatchingExtensions), - ("test_customMirror", test_customMirror), - ] - - return tests - } - func test_BasicConstruction() { let array = NSArray() let array2 : NSArray = ["foo", "bar"] diff --git a/Tests/Foundation/TestNSAttributedString.swift b/Tests/Foundation/TestNSAttributedString.swift index 2d7ecf730f..18e1ff2a3f 100644 --- a/Tests/Foundation/TestNSAttributedString.swift +++ b/Tests/Foundation/TestNSAttributedString.swift @@ -300,24 +300,6 @@ class TestNSAttributedString : XCTestCase { XCTAssertEqual(string, unarchived, "Object loaded from \(variant) didn't match fixture.") } } - - static var allTests: [(String, (TestNSAttributedString) -> () throws -> Void)] { - return [ - ("test_initWithString", test_initWithString), - ("test_initWithStringAndAttributes", test_initWithStringAndAttributes), - ("test_initWithAttributedString", test_initWithAttributedString), - ("test_attributedSubstring", test_attributedSubstring), - ("test_longestEffectiveRange", test_longestEffectiveRange), - ("test_enumerateAttributeWithName", test_enumerateAttributeWithName), - ("test_enumerateAttributes", test_enumerateAttributes), - ("test_copy", test_copy), - ("test_mutableCopy", test_mutableCopy), - ("test_isEqual", test_isEqual), - ("test_archivingRoundtrip", test_archivingRoundtrip), - ("test_unarchivingFixtures", test_unarchivingFixtures), - ] - } - } fileprivate extension TestNSAttributedString { @@ -954,39 +936,4 @@ class TestNSMutableAttributedString : XCTestCase { } """) } - - static var allTests: [(String, (TestNSMutableAttributedString) -> () throws -> Void)] { - return [ - ("test_initWithString", test_initWithString), - ("test_initWithStringAndAttributes", test_initWithStringAndAttributes), - ("test_initWithAttributedString", test_initWithAttributedString), - ("test_addAttribute", test_addAttribute), - ("test_addAttributes", test_addAttributes), - ("test_setAttributes", test_setAttributes), - ("test_replaceCharactersWithString", test_replaceCharactersWithString), - ("test_replaceCharactersWithAttributedString", test_replaceCharactersWithAttributedString), - ("test_insert", test_insert), - ("test_append", test_append), - ("test_deleteCharacters", test_deleteCharacters), - ("test_setAttributedString", test_setAttributedString), - ("test_archivingRoundtrip", test_archivingRoundtrip), - ("test_unarchivingFixtures", test_unarchivingFixtures), - ("test_direct_attribute_enumeration_with_extend_attributed_replace", test_direct_attribute_enumeration_with_extend_attributed_replace), - ("test_reverse_attribute_enumeration_with_extend_attributed_replace", test_reverse_attribute_enumeration_with_extend_attributed_replace), - ("test_direct_attributes_enumeration_with_extend_attributed_replace", test_direct_attributes_enumeration_with_extend_attributed_replace), - ("test_reverse_attributes_enumeration_with_extend_attributed_replace", test_reverse_attributes_enumeration_with_extend_attributed_replace), - ("test_direct_attribute_enumeration_with_reduct_attributed_replace", test_direct_attribute_enumeration_with_reduct_attributed_replace), - ("test_reverse_attribute_enumeration_with_reduct_attributed_replace", test_reverse_attribute_enumeration_with_reduct_attributed_replace), - ("test_direct_attributes_enumeration_with_reduct_attributed_replace", test_direct_attributes_enumeration_with_reduct_attributed_replace), - ("test_reverse_attributes_enumeration_with_reduct_attributed_replace", test_reverse_attributes_enumeration_with_reduct_attributed_replace), - ("test_direct_attribute_enumeration_with_extend_replace", test_direct_attribute_enumeration_with_extend_replace), - ("test_reverse_attribute_enumeration_with_extend_replace", test_reverse_attribute_enumeration_with_extend_replace), - ("test_direct_attributes_enumeration_with_extend_replace", test_direct_attributes_enumeration_with_extend_replace), - ("test_reverse_attributes_enumeration_with_extend_replace", test_reverse_attributes_enumeration_with_extend_replace), - ("test_direct_attribute_enumeration_with_reduct_replace", test_direct_attribute_enumeration_with_reduct_replace), - ("test_reverse_attribute_enumeration_with_reduct_replace", test_reverse_attribute_enumeration_with_reduct_replace), - ("test_direct_attributes_enumeration_with_reduct_replace", test_direct_attributes_enumeration_with_reduct_replace), - ("test_reverse_attributes_enumeration_with_reduct_replace", test_reverse_attributes_enumeration_with_reduct_replace) - ] - } } diff --git a/Tests/Foundation/TestNSCache.swift b/Tests/Foundation/TestNSCache.swift index 65cd24bffe..058d78e95f 100644 --- a/Tests/Foundation/TestNSCache.swift +++ b/Tests/Foundation/TestNSCache.swift @@ -8,19 +8,6 @@ // class TestNSCache : XCTestCase { - - static var allTests: [(String, (TestNSCache) -> () throws -> Void)] { - return [ - ("test_setWithUnmutableKeys", test_setWithUnmutableKeys), - ("test_setWithMutableKeys", test_setWithMutableKeys), - ("test_costLimit", test_costLimit), - ("test_countLimit", test_countLimit), - ("test_hashableKey", test_hashableKey), - ("test_nonHashableKey", test_nonHashableKey), - ("test_objectCorrectlyReleased", test_objectCorrectlyReleased) - ] - } - func test_setWithUnmutableKeys() { let cache = NSCache() diff --git a/Tests/Foundation/TestNSCalendar.swift b/Tests/Foundation/TestNSCalendar.swift index 4be671bb0a..bd8eb047ed 100644 --- a/Tests/Foundation/TestNSCalendar.swift +++ b/Tests/Foundation/TestNSCalendar.swift @@ -877,37 +877,4 @@ class TestNSCalendar: XCTestCase { } } } - - static var allTests: [(String, (TestNSCalendar) -> () throws -> Void)] { - return [ - ("test_initWithCalendarIdentifier", test_initWithCalendarIdentifier), - ("test_calendarWithIdentifier", test_calendarWithIdentifier), - ("test_calendarOptions", test_calendarOptions), - ("test_isEqualWithDifferentWaysToCreateCalendar", test_isEqualWithDifferentWaysToCreateCalendar), - ("test_isEqual", test_isEqual), - ("test_isEqualCurrentCalendar", test_isEqualCurrentCalendar), - ("test_isEqualAutoUpdatingCurrentCalendar", test_isEqualAutoUpdatingCurrentCalendar), - ("test_copy", test_copy), - ("test_copyCurrentCalendar", test_copyCurrentCalendar), - ("test_next50MonthsFromDate", test_next50MonthsFromDate), - ("test_dateByAddingUnit_withWrapOption", test_dateByAddingUnit_withWrapOption), - ("test_getEra_year_month_day_fromDate", test_getEra_year_month_day_fromDate), - ("test_getEra_yearForWeekOfYear_weekOfYear_weekday_fromDate", test_getEra_yearForWeekOfYear_weekOfYear_weekday_fromDate), - ("test_getHour_minute_second_nanoseconds_fromDate", test_getHour_minute_second_nanoseconds_fromDate), - ("test_component_fromDate", test_component_fromDate), - ("test_dateWithYear_month_day_hour_minute_second_nanosecond", test_dateWithYear_month_day_hour_minute_second_nanosecond), - ("test_dateWithYearForWeekOfYear_weekOfYear_weekday_hour_minute_second_nanosecond", test_dateWithYearForWeekOfYear_weekOfYear_weekday_hour_minute_second_nanosecond), - ("test_startOfDayForDate", test_startOfDayForDate), - ("test_componentsInTimeZone_fromDate", test_componentsInTimeZone_fromDate), - ("test_compareDate_toDate_toUnitGranularity", test_compareDate_toDate_toUnitGranularity), - ("test_isDate_equalToDate_toUnitGranularity", test_isDate_equalToDate_toUnitGranularity), - ("test_isDateInToday", test_isDateInToday), - ("test_isDateInYesterday", test_isDateInYesterday), - ("test_isDateInTomorrow", test_isDateInTomorrow), - ("test_isDateInWeekend", test_isDateInWeekend), - ("test_rangeOfWeekendStartDate_interval_containingDate", test_rangeOfWeekendStartDate_interval_containingDate), - ("test_enumerateDatesStartingAfterDate_chineseEra_matchYearOne", test_enumerateDatesStartingAfterDate_chineseEra_matchYearOne), - ("test_enumerateDatesStartingAfterDate_ensureStrictlyIncreasingResults_minuteSecondClearing", test_enumerateDatesStartingAfterDate_ensureStrictlyIncreasingResults_minuteSecondClearing), - ] - } } diff --git a/Tests/Foundation/TestNSCompoundPredicate.swift b/Tests/Foundation/TestNSCompoundPredicate.swift index 23407d6339..e0b09fee55 100644 --- a/Tests/Foundation/TestNSCompoundPredicate.swift +++ b/Tests/Foundation/TestNSCompoundPredicate.swift @@ -8,21 +8,6 @@ // class TestNSCompoundPredicate: XCTestCase { - - static var allTests: [(String, (TestNSCompoundPredicate) -> () throws -> Void)] { - return [ - ("test_NotPredicate", test_NotPredicate), - ("test_AndPredicateWithNoSubpredicates", test_AndPredicateWithNoSubpredicates), - ("test_AndPredicateWithOneSubpredicate", test_AndPredicateWithOneSubpredicate), - ("test_AndPredicateWithMultipleSubpredicates", test_AndPredicateWithMultipleSubpredicates), - ("test_OrPredicateWithNoSubpredicates", test_OrPredicateWithNoSubpredicates), - ("test_OrPredicateWithOneSubpredicate", test_OrPredicateWithOneSubpredicate), - ("test_OrPredicateWithMultipleSubpredicates", test_OrPredicateWithMultipleSubpredicates), - ("test_OrPredicateShortCircuits", test_OrPredicateShortCircuits), - ("test_AndPredicateShortCircuits", test_AndPredicateShortCircuits), - ] - } - private func eval(_ predicate: NSPredicate, object: NSObject = NSObject()) -> Bool { return predicate.evaluate(with: object, substitutionVariables: nil) } diff --git a/Tests/Foundation/TestNSData.swift b/Tests/Foundation/TestNSData.swift index 4d8b72d814..26e96c98d9 100644 --- a/Tests/Foundation/TestNSData.swift +++ b/Tests/Foundation/TestNSData.swift @@ -180,375 +180,6 @@ class TestNSData: XCTestCase { } } - static var allTests: [(String, (TestNSData) -> () throws -> Void)] { - return [ - ("testBasicConstruction", testBasicConstruction), - ("test_base64Data_medium", test_base64Data_medium), - ("test_base64Data_small", test_base64Data_small), - ("test_base64DataDecode_medium", test_base64DataDecode_medium), - ("test_base64DataDecode_small", test_base64DataDecode_small), - ("test_openingNonExistentFile", test_openingNonExistentFile), - ("test_contentsOfFile", test_contentsOfFile), - ("test_contentsOfZeroFile", test_contentsOfZeroFile), - ("test_wrongSizedFile", test_wrongSizedFile), - //("test_contentsOfURL", test_contentsOfURL), - ("test_basicReadWrite", test_basicReadWrite), - ("test_bufferSizeCalculation", test_bufferSizeCalculation), - ("test_dataHash", test_dataHash), - ("test_genericBuffers", test_genericBuffers), - ("test_writeFailure", test_writeFailure), - ("testBridgingDefault", testBridgingDefault), - ("testBridgingMutable", testBridgingMutable), - ("testCopyBytes_oversized", testCopyBytes_oversized), - ("testCopyBytes_ranges", testCopyBytes_ranges), - ("testCopyBytes_undersized", testCopyBytes_undersized), - ("testCopyBytes", testCopyBytes), - ("testCustomDeallocator", testCustomDeallocator), - ("testDataInSet", testDataInSet), - ("testFirstRangeEmptyData", testFirstRangeEmptyData), - ("testLastRangeEmptyData", testLastRangeEmptyData), - ("testEquality", testEquality), - ("testGenericAlgorithms", testGenericAlgorithms), - ("testInitializationWithArray", testInitializationWithArray), - ("testInsertData", testInsertData), - ("testLoops", testLoops), - ("testMutableData", testMutableData), - ("testRange", testRange), - ("testReplaceSubrange", testReplaceSubrange), - ("testReplaceSubrange2", testReplaceSubrange2), - ("testReplaceSubrange3", testReplaceSubrange3), - ("testReplaceSubrange4", testReplaceSubrange4), - ("testReplaceSubrange5", testReplaceSubrange5), - - ("test_description", test_description), - ("test_emptyDescription", test_emptyDescription), - ("test_longDescription", test_longDescription), - ("test_debugDescription", test_debugDescription), - ("test_longDebugDescription", test_longDebugDescription), - ("test_limitDebugDescription", test_limitDebugDescription), - ("test_edgeDebugDescription", test_edgeDebugDescription), - ("test_writeToURLOptions", test_writeToURLOptions), - ("test_writeToURLPermissions", test_writeToURLPermissions), - ("test_writeToURLPermissionsWithAtomic", test_writeToURLPermissionsWithAtomic), - ("test_writeToURLSpecialFile", test_writeToURLSpecialFile), - ("test_edgeNoCopyDescription", test_edgeNoCopyDescription), - ("test_initializeWithBase64EncodedDataGetsDecodedData", test_initializeWithBase64EncodedDataGetsDecodedData), - ("test_initializeWithBase64EncodedDataWithNonBase64CharacterIsNil", test_initializeWithBase64EncodedDataWithNonBase64CharacterIsNil), - ("test_initializeWithBase64EncodedDataWithNonBase64CharacterWithOptionToAllowItSkipsCharacter", test_initializeWithBase64EncodedDataWithNonBase64CharacterWithOptionToAllowItSkipsCharacter), - ("test_base64EncodedDataGetsEncodedText", test_base64EncodedDataGetsEncodedText), - ("test_base64EncodeEmptyData", test_base64EncodeEmptyData), - ("test_base64EncodedDataWithOptionToInsertCarriageReturnContainsCarriageReturn", test_base64EncodedDataWithOptionToInsertCarriageReturnContainsCarriageReturn), - ("test_base64EncodedDataWithOptionToInsertLineFeedsContainsLineFeed", test_base64EncodedDataWithOptionToInsertLineFeedsContainsLineFeed), - ("test_base64EncodedDataWithOptionToInsertCarriageReturnAndLineFeedContainsBoth", test_base64EncodedDataWithOptionToInsertCarriageReturnAndLineFeedContainsBoth), - ("test_base64EncodeDoesNotAddLineSeparatorsWhenStringFitsInLine", test_base64EncodeDoesNotAddLineSeparatorsWhenStringFitsInLine), - ("test_base64EncodeAddsLineSeparatorsWhenStringDoesNotFitInLine", test_base64EncodeAddsLineSeparatorsWhenStringDoesNotFitInLine), - ("test_base64EncodedStringGetsEncodedText", test_base64EncodedStringGetsEncodedText), - ("test_initializeWithBase64EncodedStringGetsDecodedData", test_initializeWithBase64EncodedStringGetsDecodedData), - ("test_base64DecodeWithPadding1", test_base64DecodeWithPadding1), - ("test_base64DecodeWithPadding2", test_base64DecodeWithPadding2), - ("test_rangeOfData", test_rangeOfData), - ("test_sr10689_rangeOfDataProtocol", test_sr10689_rangeOfDataProtocol), - ("test_initNSMutableData()", test_initNSMutableData), - ("test_initNSMutableDataWithLength", test_initNSMutableDataWithLength), - ("test_initNSMutableDataWithCapacity", test_initNSMutableDataWithCapacity), - ("test_initNSMutableDataFromData", test_initNSMutableDataFromData), - ("test_initNSMutableDataFromBytes", test_initNSMutableDataFromBytes), - ("test_initNSMutableDataContentsOf", test_initNSMutableDataContentsOf), - ("test_initNSMutableDataBase64", test_initNSMutableDataBase64), - ("test_replaceBytes", test_replaceBytes), - ("test_replaceBytesWithNil", test_replaceBytesWithNil), - ("test_initDataWithCapacity", test_initDataWithCapacity), - ("test_initDataWithCount", test_initDataWithCount), - ("test_emptyStringToData", test_emptyStringToData), - ("test_repeatingValueInitialization", test_repeatingValueInitialization), - - ("test_sliceAppending", test_sliceAppending), - ("test_replaceSubrange", test_replaceSubrange), - ("test_sliceWithUnsafeBytes", test_sliceWithUnsafeBytes), - ("test_sliceIteration", test_sliceIteration), - - ("test_validateMutation_withUnsafeMutableBytes", test_validateMutation_withUnsafeMutableBytes), - ("test_validateMutation_appendBytes", test_validateMutation_appendBytes), - ("test_validateMutation_appendData", test_validateMutation_appendData), - ("test_validateMutation_appendBuffer", test_validateMutation_appendBuffer), - ("test_validateMutation_appendSequence", test_validateMutation_appendSequence), - ("test_validateMutation_appendContentsOf", test_validateMutation_appendContentsOf), - ("test_validateMutation_resetBytes", test_validateMutation_resetBytes), - ("test_validateMutation_replaceSubrange", test_validateMutation_replaceSubrange), - ("test_validateMutation_replaceSubrangeRange", test_validateMutation_replaceSubrangeRange), - ("test_validateMutation_replaceSubrangeWithBuffer", test_validateMutation_replaceSubrangeWithBuffer), - ("test_validateMutation_replaceSubrangeWithCollection", test_validateMutation_replaceSubrangeWithCollection), - ("test_validateMutation_replaceSubrangeWithBytes", test_validateMutation_replaceSubrangeWithBytes), - ("test_validateMutation_slice_withUnsafeMutableBytes", test_validateMutation_slice_withUnsafeMutableBytes), - ("test_validateMutation_slice_appendBytes", test_validateMutation_slice_appendBytes), - ("test_validateMutation_slice_appendData", test_validateMutation_slice_appendData), - ("test_validateMutation_slice_appendBuffer", test_validateMutation_slice_appendBuffer), - ("test_validateMutation_slice_appendSequence", test_validateMutation_slice_appendSequence), - ("test_validateMutation_slice_appendContentsOf", test_validateMutation_slice_appendContentsOf), - ("test_validateMutation_slice_resetBytes", test_validateMutation_slice_resetBytes), - ("test_validateMutation_slice_replaceSubrange", test_validateMutation_slice_replaceSubrange), - ("test_validateMutation_slice_replaceSubrangeRange", test_validateMutation_slice_replaceSubrangeRange), - ("test_validateMutation_slice_replaceSubrangeWithBuffer", test_validateMutation_slice_replaceSubrangeWithBuffer), - ("test_validateMutation_slice_replaceSubrangeWithCollection", test_validateMutation_slice_replaceSubrangeWithCollection), - ("test_validateMutation_slice_replaceSubrangeWithBytes", test_validateMutation_slice_replaceSubrangeWithBytes), - ("test_validateMutation_cow_withUnsafeMutableBytes", test_validateMutation_cow_withUnsafeMutableBytes), - ("test_validateMutation_cow_appendBytes", test_validateMutation_cow_appendBytes), - ("test_validateMutation_cow_appendData", test_validateMutation_cow_appendData), - ("test_validateMutation_cow_appendBuffer", test_validateMutation_cow_appendBuffer), - ("test_validateMutation_cow_appendSequence", test_validateMutation_cow_appendSequence), - ("test_validateMutation_cow_appendContentsOf", test_validateMutation_cow_appendContentsOf), - ("test_validateMutation_cow_resetBytes", test_validateMutation_cow_resetBytes), - ("test_validateMutation_cow_replaceSubrange", test_validateMutation_cow_replaceSubrange), - ("test_validateMutation_cow_replaceSubrangeRange", test_validateMutation_cow_replaceSubrangeRange), - ("test_validateMutation_cow_replaceSubrangeWithBuffer", test_validateMutation_cow_replaceSubrangeWithBuffer), - ("test_validateMutation_cow_replaceSubrangeWithCollection", test_validateMutation_cow_replaceSubrangeWithCollection), - ("test_validateMutation_cow_replaceSubrangeWithBytes", test_validateMutation_cow_replaceSubrangeWithBytes), - ("test_validateMutation_slice_cow_withUnsafeMutableBytes", test_validateMutation_slice_cow_withUnsafeMutableBytes), - ("test_validateMutation_slice_cow_appendBytes", test_validateMutation_slice_cow_appendBytes), - ("test_validateMutation_slice_cow_appendData", test_validateMutation_slice_cow_appendData), - ("test_validateMutation_slice_cow_appendBuffer", test_validateMutation_slice_cow_appendBuffer), - ("test_validateMutation_slice_cow_appendSequence", test_validateMutation_slice_cow_appendSequence), - ("test_validateMutation_slice_cow_appendContentsOf", test_validateMutation_slice_cow_appendContentsOf), - ("test_validateMutation_slice_cow_resetBytes", test_validateMutation_slice_cow_resetBytes), - ("test_validateMutation_slice_cow_replaceSubrange", test_validateMutation_slice_cow_replaceSubrange), - ("test_validateMutation_slice_cow_replaceSubrangeRange", test_validateMutation_slice_cow_replaceSubrangeRange), - ("test_validateMutation_slice_cow_replaceSubrangeWithBuffer", test_validateMutation_slice_cow_replaceSubrangeWithBuffer), - ("test_validateMutation_slice_cow_replaceSubrangeWithCollection", test_validateMutation_slice_cow_replaceSubrangeWithCollection), - ("test_validateMutation_slice_cow_replaceSubrangeWithBytes", test_validateMutation_slice_cow_replaceSubrangeWithBytes), - ("test_validateMutation_immutableBacking_withUnsafeMutableBytes", test_validateMutation_immutableBacking_withUnsafeMutableBytes), - ("test_validateMutation_immutableBacking_appendBytes", test_validateMutation_immutableBacking_appendBytes), - ("test_validateMutation_immutableBacking_appendData", test_validateMutation_immutableBacking_appendData), - ("test_validateMutation_immutableBacking_appendBuffer", test_validateMutation_immutableBacking_appendBuffer), - ("test_validateMutation_immutableBacking_appendSequence", test_validateMutation_immutableBacking_appendSequence), - ("test_validateMutation_immutableBacking_appendContentsOf", test_validateMutation_immutableBacking_appendContentsOf), - ("test_validateMutation_immutableBacking_resetBytes", test_validateMutation_immutableBacking_resetBytes), - ("test_validateMutation_immutableBacking_replaceSubrange", test_validateMutation_immutableBacking_replaceSubrange), - ("test_validateMutation_immutableBacking_replaceSubrangeRange", test_validateMutation_immutableBacking_replaceSubrangeRange), - ("test_validateMutation_immutableBacking_replaceSubrangeWithBuffer", test_validateMutation_immutableBacking_replaceSubrangeWithBuffer), - ("test_validateMutation_immutableBacking_replaceSubrangeWithCollection", test_validateMutation_immutableBacking_replaceSubrangeWithCollection), - ("test_validateMutation_immutableBacking_replaceSubrangeWithBytes", test_validateMutation_immutableBacking_replaceSubrangeWithBytes), - ("test_validateMutation_slice_immutableBacking_withUnsafeMutableBytes", test_validateMutation_slice_immutableBacking_withUnsafeMutableBytes), - ("test_validateMutation_slice_immutableBacking_appendBytes", test_validateMutation_slice_immutableBacking_appendBytes), - ("test_validateMutation_slice_immutableBacking_appendData", test_validateMutation_slice_immutableBacking_appendData), - ("test_validateMutation_slice_immutableBacking_appendBuffer", test_validateMutation_slice_immutableBacking_appendBuffer), - ("test_validateMutation_slice_immutableBacking_appendSequence", test_validateMutation_slice_immutableBacking_appendSequence), - ("test_validateMutation_slice_immutableBacking_appendContentsOf", test_validateMutation_slice_immutableBacking_appendContentsOf), - ("test_validateMutation_slice_immutableBacking_resetBytes", test_validateMutation_slice_immutableBacking_resetBytes), - ("test_validateMutation_slice_immutableBacking_replaceSubrange", test_validateMutation_slice_immutableBacking_replaceSubrange), - ("test_validateMutation_slice_immutableBacking_replaceSubrangeRange", test_validateMutation_slice_immutableBacking_replaceSubrangeRange), - ("test_validateMutation_slice_immutableBacking_replaceSubrangeWithBuffer", test_validateMutation_slice_immutableBacking_replaceSubrangeWithBuffer), - ("test_validateMutation_slice_immutableBacking_replaceSubrangeWithCollection", test_validateMutation_slice_immutableBacking_replaceSubrangeWithCollection), - ("test_validateMutation_slice_immutableBacking_replaceSubrangeWithBytes", test_validateMutation_slice_immutableBacking_replaceSubrangeWithBytes), - ("test_validateMutation_cow_immutableBacking_withUnsafeMutableBytes", test_validateMutation_cow_immutableBacking_withUnsafeMutableBytes), - ("test_validateMutation_cow_immutableBacking_appendBytes", test_validateMutation_cow_immutableBacking_appendBytes), - ("test_validateMutation_cow_immutableBacking_appendData", test_validateMutation_cow_immutableBacking_appendData), - ("test_validateMutation_cow_immutableBacking_appendBuffer", test_validateMutation_cow_immutableBacking_appendBuffer), - ("test_validateMutation_cow_immutableBacking_appendSequence", test_validateMutation_cow_immutableBacking_appendSequence), - ("test_validateMutation_cow_immutableBacking_appendContentsOf", test_validateMutation_cow_immutableBacking_appendContentsOf), - ("test_validateMutation_cow_immutableBacking_resetBytes", test_validateMutation_cow_immutableBacking_resetBytes), - ("test_validateMutation_cow_immutableBacking_replaceSubrange", test_validateMutation_cow_immutableBacking_replaceSubrange), - ("test_validateMutation_cow_immutableBacking_replaceSubrangeRange", test_validateMutation_cow_immutableBacking_replaceSubrangeRange), - ("test_validateMutation_cow_immutableBacking_replaceSubrangeWithBuffer", test_validateMutation_cow_immutableBacking_replaceSubrangeWithBuffer), - ("test_validateMutation_cow_immutableBacking_replaceSubrangeWithCollection", test_validateMutation_cow_immutableBacking_replaceSubrangeWithCollection), - ("test_validateMutation_cow_immutableBacking_replaceSubrangeWithBytes", test_validateMutation_cow_immutableBacking_replaceSubrangeWithBytes), - ("test_validateMutation_slice_cow_immutableBacking_withUnsafeMutableBytes", test_validateMutation_slice_cow_immutableBacking_withUnsafeMutableBytes), - ("test_validateMutation_slice_cow_immutableBacking_appendBytes", test_validateMutation_slice_cow_immutableBacking_appendBytes), - ("test_validateMutation_slice_cow_immutableBacking_appendData", test_validateMutation_slice_cow_immutableBacking_appendData), - ("test_validateMutation_slice_cow_immutableBacking_appendBuffer", test_validateMutation_slice_cow_immutableBacking_appendBuffer), - ("test_validateMutation_slice_cow_immutableBacking_appendSequence", test_validateMutation_slice_cow_immutableBacking_appendSequence), - ("test_validateMutation_slice_cow_immutableBacking_appendContentsOf", test_validateMutation_slice_cow_immutableBacking_appendContentsOf), - ("test_validateMutation_slice_cow_immutableBacking_resetBytes", test_validateMutation_slice_cow_immutableBacking_resetBytes), - ("test_validateMutation_slice_cow_immutableBacking_replaceSubrange", test_validateMutation_slice_cow_immutableBacking_replaceSubrange), - ("test_validateMutation_slice_cow_immutableBacking_replaceSubrangeRange", test_validateMutation_slice_cow_immutableBacking_replaceSubrangeRange), - ("test_validateMutation_slice_cow_immutableBacking_replaceSubrangeWithBuffer", test_validateMutation_slice_cow_immutableBacking_replaceSubrangeWithBuffer), - ("test_validateMutation_slice_cow_immutableBacking_replaceSubrangeWithCollection", test_validateMutation_slice_cow_immutableBacking_replaceSubrangeWithCollection), - ("test_validateMutation_slice_cow_immutableBacking_replaceSubrangeWithBytes", test_validateMutation_slice_cow_immutableBacking_replaceSubrangeWithBytes), - ("test_validateMutation_mutableBacking_withUnsafeMutableBytes", test_validateMutation_mutableBacking_withUnsafeMutableBytes), - ("test_validateMutation_mutableBacking_appendBytes", test_validateMutation_mutableBacking_appendBytes), - ("test_validateMutation_mutableBacking_appendData", test_validateMutation_mutableBacking_appendData), - ("test_validateMutation_mutableBacking_appendBuffer", test_validateMutation_mutableBacking_appendBuffer), - ("test_validateMutation_mutableBacking_appendSequence", test_validateMutation_mutableBacking_appendSequence), - ("test_validateMutation_mutableBacking_appendContentsOf", test_validateMutation_mutableBacking_appendContentsOf), - ("test_validateMutation_mutableBacking_resetBytes", test_validateMutation_mutableBacking_resetBytes), - ("test_validateMutation_mutableBacking_replaceSubrange", test_validateMutation_mutableBacking_replaceSubrange), - ("test_validateMutation_mutableBacking_replaceSubrangeRange", test_validateMutation_mutableBacking_replaceSubrangeRange), - ("test_validateMutation_mutableBacking_replaceSubrangeWithBuffer", test_validateMutation_mutableBacking_replaceSubrangeWithBuffer), - ("test_validateMutation_mutableBacking_replaceSubrangeWithCollection", test_validateMutation_mutableBacking_replaceSubrangeWithCollection), - ("test_validateMutation_mutableBacking_replaceSubrangeWithBytes", test_validateMutation_mutableBacking_replaceSubrangeWithBytes), - ("test_validateMutation_slice_mutableBacking_withUnsafeMutableBytes", test_validateMutation_slice_mutableBacking_withUnsafeMutableBytes), - ("test_validateMutation_slice_mutableBacking_appendBytes", test_validateMutation_slice_mutableBacking_appendBytes), - ("test_validateMutation_slice_mutableBacking_appendData", test_validateMutation_slice_mutableBacking_appendData), - ("test_validateMutation_slice_mutableBacking_appendBuffer", test_validateMutation_slice_mutableBacking_appendBuffer), - ("test_validateMutation_slice_mutableBacking_appendSequence", test_validateMutation_slice_mutableBacking_appendSequence), - ("test_validateMutation_slice_mutableBacking_appendContentsOf", test_validateMutation_slice_mutableBacking_appendContentsOf), - ("test_validateMutation_slice_mutableBacking_resetBytes", test_validateMutation_slice_mutableBacking_resetBytes), - ("test_validateMutation_slice_mutableBacking_replaceSubrange", test_validateMutation_slice_mutableBacking_replaceSubrange), - ("test_validateMutation_slice_mutableBacking_replaceSubrangeRange", test_validateMutation_slice_mutableBacking_replaceSubrangeRange), - ("test_validateMutation_slice_mutableBacking_replaceSubrangeWithBuffer", test_validateMutation_slice_mutableBacking_replaceSubrangeWithBuffer), - ("test_validateMutation_slice_mutableBacking_replaceSubrangeWithCollection", test_validateMutation_slice_mutableBacking_replaceSubrangeWithCollection), - ("test_validateMutation_slice_mutableBacking_replaceSubrangeWithBytes", test_validateMutation_slice_mutableBacking_replaceSubrangeWithBytes), - ("test_validateMutation_cow_mutableBacking_withUnsafeMutableBytes", test_validateMutation_cow_mutableBacking_withUnsafeMutableBytes), - ("test_validateMutation_cow_mutableBacking_appendBytes", test_validateMutation_cow_mutableBacking_appendBytes), - ("test_validateMutation_cow_mutableBacking_appendData", test_validateMutation_cow_mutableBacking_appendData), - ("test_validateMutation_cow_mutableBacking_appendBuffer", test_validateMutation_cow_mutableBacking_appendBuffer), - ("test_validateMutation_cow_mutableBacking_appendSequence", test_validateMutation_cow_mutableBacking_appendSequence), - ("test_validateMutation_cow_mutableBacking_appendContentsOf", test_validateMutation_cow_mutableBacking_appendContentsOf), - ("test_validateMutation_cow_mutableBacking_resetBytes", test_validateMutation_cow_mutableBacking_resetBytes), - ("test_validateMutation_cow_mutableBacking_replaceSubrange", test_validateMutation_cow_mutableBacking_replaceSubrange), - ("test_validateMutation_cow_mutableBacking_replaceSubrangeRange", test_validateMutation_cow_mutableBacking_replaceSubrangeRange), - ("test_validateMutation_cow_mutableBacking_replaceSubrangeWithBuffer", test_validateMutation_cow_mutableBacking_replaceSubrangeWithBuffer), - ("test_validateMutation_cow_mutableBacking_replaceSubrangeWithCollection", test_validateMutation_cow_mutableBacking_replaceSubrangeWithCollection), - ("test_validateMutation_cow_mutableBacking_replaceSubrangeWithBytes", test_validateMutation_cow_mutableBacking_replaceSubrangeWithBytes), - ("test_validateMutation_slice_cow_mutableBacking_withUnsafeMutableBytes", test_validateMutation_slice_cow_mutableBacking_withUnsafeMutableBytes), - ("test_validateMutation_slice_cow_mutableBacking_appendBytes", test_validateMutation_slice_cow_mutableBacking_appendBytes), - ("test_validateMutation_slice_cow_mutableBacking_appendData", test_validateMutation_slice_cow_mutableBacking_appendData), - ("test_validateMutation_slice_cow_mutableBacking_appendBuffer", test_validateMutation_slice_cow_mutableBacking_appendBuffer), - ("test_validateMutation_slice_cow_mutableBacking_appendSequence", test_validateMutation_slice_cow_mutableBacking_appendSequence), - ("test_validateMutation_slice_cow_mutableBacking_appendContentsOf", test_validateMutation_slice_cow_mutableBacking_appendContentsOf), - ("test_validateMutation_slice_cow_mutableBacking_resetBytes", test_validateMutation_slice_cow_mutableBacking_resetBytes), - ("test_validateMutation_slice_cow_mutableBacking_replaceSubrange", test_validateMutation_slice_cow_mutableBacking_replaceSubrange), - ("test_validateMutation_slice_cow_mutableBacking_replaceSubrangeRange", test_validateMutation_slice_cow_mutableBacking_replaceSubrangeRange), - ("test_validateMutation_slice_cow_mutableBacking_replaceSubrangeWithBuffer", test_validateMutation_slice_cow_mutableBacking_replaceSubrangeWithBuffer), - ("test_validateMutation_slice_cow_mutableBacking_replaceSubrangeWithCollection", test_validateMutation_slice_cow_mutableBacking_replaceSubrangeWithCollection), - ("test_validateMutation_slice_cow_mutableBacking_replaceSubrangeWithBytes", test_validateMutation_slice_cow_mutableBacking_replaceSubrangeWithBytes), - ("test_validateMutation_customBacking_withUnsafeMutableBytes", test_validateMutation_customBacking_withUnsafeMutableBytes), -// ("test_validateMutation_customBacking_appendBytes", test_validateMutation_customBacking_appendBytes), -// ("test_validateMutation_customBacking_appendData", test_validateMutation_customBacking_appendData), -// ("test_validateMutation_customBacking_appendBuffer", test_validateMutation_customBacking_appendBuffer), -// ("test_validateMutation_customBacking_appendSequence", test_validateMutation_customBacking_appendSequence), -// ("test_validateMutation_customBacking_appendContentsOf", test_validateMutation_customBacking_appendContentsOf), -// ("test_validateMutation_customBacking_resetBytes", test_validateMutation_customBacking_resetBytes), -// ("test_validateMutation_customBacking_replaceSubrange", test_validateMutation_customBacking_replaceSubrange), -// ("test_validateMutation_customBacking_replaceSubrangeRange", test_validateMutation_customBacking_replaceSubrangeRange), -// ("test_validateMutation_customBacking_replaceSubrangeWithBuffer", test_validateMutation_customBacking_replaceSubrangeWithBuffer), -// ("test_validateMutation_customBacking_replaceSubrangeWithCollection", test_validateMutation_customBacking_replaceSubrangeWithCollection), -// ("test_validateMutation_customBacking_replaceSubrangeWithBytes", test_validateMutation_customBacking_replaceSubrangeWithBytes), -// ("test_validateMutation_slice_customBacking_withUnsafeMutableBytes", test_validateMutation_slice_customBacking_withUnsafeMutableBytes), -// ("test_validateMutation_slice_customBacking_appendBytes", test_validateMutation_slice_customBacking_appendBytes), -// ("test_validateMutation_slice_customBacking_appendData", test_validateMutation_slice_customBacking_appendData), -// ("test_validateMutation_slice_customBacking_appendBuffer", test_validateMutation_slice_customBacking_appendBuffer), -// ("test_validateMutation_slice_customBacking_appendSequence", test_validateMutation_slice_customBacking_appendSequence), -// ("test_validateMutation_slice_customBacking_appendContentsOf", test_validateMutation_slice_customBacking_appendContentsOf), -// ("test_validateMutation_slice_customBacking_resetBytes", test_validateMutation_slice_customBacking_resetBytes), -// ("test_validateMutation_slice_customBacking_replaceSubrange", test_validateMutation_slice_customBacking_replaceSubrange), -// ("test_validateMutation_slice_customBacking_replaceSubrangeRange", test_validateMutation_slice_customBacking_replaceSubrangeRange), -// ("test_validateMutation_slice_customBacking_replaceSubrangeWithBuffer", test_validateMutation_slice_customBacking_replaceSubrangeWithBuffer), -// ("test_validateMutation_slice_customBacking_replaceSubrangeWithCollection", test_validateMutation_slice_customBacking_replaceSubrangeWithCollection), -// ("test_validateMutation_slice_customBacking_replaceSubrangeWithBytes", test_validateMutation_slice_customBacking_replaceSubrangeWithBytes), -// ("test_validateMutation_cow_customBacking_withUnsafeMutableBytes", test_validateMutation_cow_customBacking_withUnsafeMutableBytes), -// ("test_validateMutation_cow_customBacking_appendBytes", test_validateMutation_cow_customBacking_appendBytes), -// ("test_validateMutation_cow_customBacking_appendData", test_validateMutation_cow_customBacking_appendData), -// ("test_validateMutation_cow_customBacking_appendBuffer", test_validateMutation_cow_customBacking_appendBuffer), -// ("test_validateMutation_cow_customBacking_appendSequence", test_validateMutation_cow_customBacking_appendSequence), -// ("test_validateMutation_cow_customBacking_appendContentsOf", test_validateMutation_cow_customBacking_appendContentsOf), -// ("test_validateMutation_cow_customBacking_resetBytes", test_validateMutation_cow_customBacking_resetBytes), -// ("test_validateMutation_cow_customBacking_replaceSubrange", test_validateMutation_cow_customBacking_replaceSubrange), -// ("test_validateMutation_cow_customBacking_replaceSubrangeRange", test_validateMutation_cow_customBacking_replaceSubrangeRange), -// ("test_validateMutation_cow_customBacking_replaceSubrangeWithBuffer", test_validateMutation_cow_customBacking_replaceSubrangeWithBuffer), -// ("test_validateMutation_cow_customBacking_replaceSubrangeWithCollection", test_validateMutation_cow_customBacking_replaceSubrangeWithCollection), -// ("test_validateMutation_cow_customBacking_replaceSubrangeWithBytes", test_validateMutation_cow_customBacking_replaceSubrangeWithBytes), -// ("test_validateMutation_slice_cow_customBacking_withUnsafeMutableBytes", test_validateMutation_slice_cow_customBacking_withUnsafeMutableBytes), -// ("test_validateMutation_slice_cow_customBacking_appendBytes", test_validateMutation_slice_cow_customBacking_appendBytes), -// ("test_validateMutation_slice_cow_customBacking_appendData", test_validateMutation_slice_cow_customBacking_appendData), -// ("test_validateMutation_slice_cow_customBacking_appendBuffer", test_validateMutation_slice_cow_customBacking_appendBuffer), -// ("test_validateMutation_slice_cow_customBacking_appendSequence", test_validateMutation_slice_cow_customBacking_appendSequence), -// ("test_validateMutation_slice_cow_customBacking_appendContentsOf", test_validateMutation_slice_cow_customBacking_appendContentsOf), -// ("test_validateMutation_slice_cow_customBacking_resetBytes", test_validateMutation_slice_cow_customBacking_resetBytes), -// ("test_validateMutation_slice_cow_customBacking_replaceSubrange", test_validateMutation_slice_cow_customBacking_replaceSubrange), -// ("test_validateMutation_slice_cow_customBacking_replaceSubrangeRange", test_validateMutation_slice_cow_customBacking_replaceSubrangeRange), -// ("test_validateMutation_slice_cow_customBacking_replaceSubrangeWithBuffer", test_validateMutation_slice_cow_customBacking_replaceSubrangeWithBuffer), -// ("test_validateMutation_slice_cow_customBacking_replaceSubrangeWithCollection", test_validateMutation_slice_cow_customBacking_replaceSubrangeWithCollection), -// ("test_validateMutation_slice_cow_customBacking_replaceSubrangeWithBytes", test_validateMutation_slice_cow_customBacking_replaceSubrangeWithBytes), -// ("test_validateMutation_customMutableBacking_withUnsafeMutableBytes", test_validateMutation_customMutableBacking_withUnsafeMutableBytes), -// ("test_validateMutation_customMutableBacking_appendBytes", test_validateMutation_customMutableBacking_appendBytes), -// ("test_validateMutation_customMutableBacking_appendData", test_validateMutation_customMutableBacking_appendData), -// ("test_validateMutation_customMutableBacking_appendBuffer", test_validateMutation_customMutableBacking_appendBuffer), -// ("test_validateMutation_customMutableBacking_appendSequence", test_validateMutation_customMutableBacking_appendSequence), -// ("test_validateMutation_customMutableBacking_appendContentsOf", test_validateMutation_customMutableBacking_appendContentsOf), -// ("test_validateMutation_customMutableBacking_resetBytes", test_validateMutation_customMutableBacking_resetBytes), -// ("test_validateMutation_customMutableBacking_replaceSubrange", test_validateMutation_customMutableBacking_replaceSubrange), -// ("test_validateMutation_customMutableBacking_replaceSubrangeRange", test_validateMutation_customMutableBacking_replaceSubrangeRange), -// ("test_validateMutation_customMutableBacking_replaceSubrangeWithBuffer", test_validateMutation_customMutableBacking_replaceSubrangeWithBuffer), -// ("test_validateMutation_customMutableBacking_replaceSubrangeWithCollection", test_validateMutation_customMutableBacking_replaceSubrangeWithCollection), -// ("test_validateMutation_customMutableBacking_replaceSubrangeWithBytes", test_validateMutation_customMutableBacking_replaceSubrangeWithBytes), -// ("test_validateMutation_slice_customMutableBacking_withUnsafeMutableBytes", test_validateMutation_slice_customMutableBacking_withUnsafeMutableBytes), -// ("test_validateMutation_slice_customMutableBacking_appendBytes", test_validateMutation_slice_customMutableBacking_appendBytes), -// ("test_validateMutation_slice_customMutableBacking_appendData", test_validateMutation_slice_customMutableBacking_appendData), -// ("test_validateMutation_slice_customMutableBacking_appendBuffer", test_validateMutation_slice_customMutableBacking_appendBuffer), -// ("test_validateMutation_slice_customMutableBacking_appendSequence", test_validateMutation_slice_customMutableBacking_appendSequence), -// ("test_validateMutation_slice_customMutableBacking_appendContentsOf", test_validateMutation_slice_customMutableBacking_appendContentsOf), -// ("test_validateMutation_slice_customMutableBacking_resetBytes", test_validateMutation_slice_customMutableBacking_resetBytes), -// ("test_validateMutation_slice_customMutableBacking_replaceSubrange", test_validateMutation_slice_customMutableBacking_replaceSubrange), -// ("test_validateMutation_slice_customMutableBacking_replaceSubrangeRange", test_validateMutation_slice_customMutableBacking_replaceSubrangeRange), -// ("test_validateMutation_slice_customMutableBacking_replaceSubrangeWithBuffer", test_validateMutation_slice_customMutableBacking_replaceSubrangeWithBuffer), -// ("test_validateMutation_slice_customMutableBacking_replaceSubrangeWithCollection", test_validateMutation_slice_customMutableBacking_replaceSubrangeWithCollection), -// ("test_validateMutation_slice_customMutableBacking_replaceSubrangeWithBytes", test_validateMutation_slice_customMutableBacking_replaceSubrangeWithBytes), -// ("test_validateMutation_cow_customMutableBacking_withUnsafeMutableBytes", test_validateMutation_cow_customMutableBacking_withUnsafeMutableBytes), -// ("test_validateMutation_cow_customMutableBacking_appendBytes", test_validateMutation_cow_customMutableBacking_appendBytes), -// ("test_validateMutation_cow_customMutableBacking_appendData", test_validateMutation_cow_customMutableBacking_appendData), -// ("test_validateMutation_cow_customMutableBacking_appendBuffer", test_validateMutation_cow_customMutableBacking_appendBuffer), -// ("test_validateMutation_cow_customMutableBacking_appendSequence", test_validateMutation_cow_customMutableBacking_appendSequence), -// ("test_validateMutation_cow_customMutableBacking_appendContentsOf", test_validateMutation_cow_customMutableBacking_appendContentsOf), -// ("test_validateMutation_cow_customMutableBacking_resetBytes", test_validateMutation_cow_customMutableBacking_resetBytes), -// ("test_validateMutation_cow_customMutableBacking_replaceSubrange", test_validateMutation_cow_customMutableBacking_replaceSubrange), -// ("test_validateMutation_cow_customMutableBacking_replaceSubrangeRange", test_validateMutation_cow_customMutableBacking_replaceSubrangeRange), -// ("test_validateMutation_cow_customMutableBacking_replaceSubrangeWithBuffer", test_validateMutation_cow_customMutableBacking_replaceSubrangeWithBuffer), -// ("test_validateMutation_cow_customMutableBacking_replaceSubrangeWithCollection", test_validateMutation_cow_customMutableBacking_replaceSubrangeWithCollection), -// ("test_validateMutation_cow_customMutableBacking_replaceSubrangeWithBytes", test_validateMutation_cow_customMutableBacking_replaceSubrangeWithBytes), -// ("test_validateMutation_slice_cow_customMutableBacking_withUnsafeMutableBytes", test_validateMutation_slice_cow_customMutableBacking_withUnsafeMutableBytes), -// ("test_validateMutation_slice_cow_customMutableBacking_appendBytes", test_validateMutation_slice_cow_customMutableBacking_appendBytes), -// ("test_validateMutation_slice_cow_customMutableBacking_appendData", test_validateMutation_slice_cow_customMutableBacking_appendData), -// ("test_validateMutation_slice_cow_customMutableBacking_appendBuffer", test_validateMutation_slice_cow_customMutableBacking_appendBuffer), -// ("test_validateMutation_slice_cow_customMutableBacking_appendSequence", test_validateMutation_slice_cow_customMutableBacking_appendSequence), -// ("test_validateMutation_slice_cow_customMutableBacking_appendContentsOf", test_validateMutation_slice_cow_customMutableBacking_appendContentsOf), -// ("test_validateMutation_slice_cow_customMutableBacking_resetBytes", test_validateMutation_slice_cow_customMutableBacking_resetBytes), -// ("test_validateMutation_slice_cow_customMutableBacking_replaceSubrange", test_validateMutation_slice_cow_customMutableBacking_replaceSubrange), -// ("test_validateMutation_slice_cow_customMutableBacking_replaceSubrangeRange", test_validateMutation_slice_cow_customMutableBacking_replaceSubrangeRange), -// ("test_validateMutation_slice_cow_customMutableBacking_replaceSubrangeWithBuffer", test_validateMutation_slice_cow_customMutableBacking_replaceSubrangeWithBuffer), -// ("test_validateMutation_slice_cow_customMutableBacking_replaceSubrangeWithCollection", test_validateMutation_slice_cow_customMutableBacking_replaceSubrangeWithCollection), -// ("test_validateMutation_slice_cow_customMutableBacking_replaceSubrangeWithBytes", test_validateMutation_slice_cow_customMutableBacking_replaceSubrangeWithBytes), - ("test_sliceHash", test_sliceHash), - ("test_slice_resize_growth", test_slice_resize_growth), -// ("test_sliceEnumeration", test_sliceEnumeration), - ("test_sliceInsertion", test_sliceInsertion), - ("test_sliceDeletion", test_sliceDeletion), - ("test_validateMutation_slice_withUnsafeMutableBytes_lengthLessThanLowerBound", test_validateMutation_slice_withUnsafeMutableBytes_lengthLessThanLowerBound), - ("test_validateMutation_slice_immutableBacking_withUnsafeMutableBytes_lengthLessThanLowerBound", test_validateMutation_slice_immutableBacking_withUnsafeMutableBytes_lengthLessThanLowerBound), - ("test_validateMutation_slice_mutableBacking_withUnsafeMutableBytes_lengthLessThanLowerBound", test_validateMutation_slice_mutableBacking_withUnsafeMutableBytes_lengthLessThanLowerBound), - ("test_validateMutation_slice_customBacking_withUnsafeMutableBytes_lengthLessThanLowerBound", test_validateMutation_slice_customBacking_withUnsafeMutableBytes_lengthLessThanLowerBound), - ("test_validateMutation_slice_customMutableBacking_withUnsafeMutableBytes_lengthLessThanLowerBound", - test_validateMutation_slice_customMutableBacking_withUnsafeMutableBytes_lengthLessThanLowerBound), - ("test_nskeyedarchiving", test_nskeyedarchiving), - ("test_discontiguousEnumerateBytes", test_discontiguousEnumerateBytes), - ("testBridgingCustom", testBridgingCustom), - ("testCustomData", testCustomData), - ("test_doubleDeallocation", test_doubleDeallocation), - ("test_rangeZoo", test_rangeZoo), - ("test_sliceIndexing", test_sliceIndexing), - ("test_sliceEquality", test_sliceEquality), - ("test_sliceEquality2", test_sliceEquality2), - ("test_splittingHttp", test_splittingHttp), - ("test_map", test_map), - ("test_dropFirst", test_dropFirst), - ("test_dropFirst2", test_dropFirst2), - ("test_copyBytes1", test_copyBytes1), - ("test_copyBytes2", test_copyBytes2), - ("test_sliceOfSliceViaRangeExpression", test_sliceOfSliceViaRangeExpression), - ("test_appendingSlices", test_appendingSlices), - ("test_appendingNonContiguousSequence_exactCount", test_appendingNonContiguousSequence_exactCount), - ("test_appendingNonContiguousSequence_underestimatedCount", test_appendingNonContiguousSequence_underestimatedCount), - ("test_sequenceInitializers", test_sequenceInitializers), - ("test_reversedDataInit", test_reversedDataInit), - ("test_replaceSubrangeReferencingMutable", test_replaceSubrangeReferencingMutable), - ("test_replaceSubrangeReferencingImmutable", test_replaceSubrangeReferencingImmutable), - ("test_rangeOfSlice", test_rangeOfSlice), - ("test_nsdataSequence", test_nsdataSequence), - ("test_dispatchSequence", test_dispatchSequence), - ("test_Data_increaseCount", test_Data_increaseCount), - ("test_Data_decreaseCount", test_Data_decreaseCount), - ] - } - func test_writeToURLOptions() { let saveData = try! Data(contentsOf: Bundle.module.url(forResource: "Test", withExtension: "plist")!) let savePath = URL(fileURLWithPath: NSTemporaryDirectory() + "Test1.plist") @@ -1724,7 +1355,7 @@ extension TestNSData { var zeroIdx = contents.range(of: Data([0]), in: NSMakeRange(0, contents.length)).location if zeroIdx == NSNotFound { zeroIdx = contents.length } if let str = String(bytesNoCopy: ptr, length: zeroIdx, encoding: .ascii, freeWhenDone: false) { - XCTAssertTrue(str.hasSuffix("TestFoundation")) + XCTAssertTrue(str.hasSuffix(".xctest")) } else { XCTFail("Cant create String") } @@ -1740,8 +1371,11 @@ extension TestNSData { #endif } - func test_wrongSizedFile() { + func test_wrongSizedFile() throws { #if os(Linux) + guard FileManager.default.fileExists(atPath: "/sys/kernel/profiling") else { + throw XCTSkip("/sys/kernel/profiling doesn't exist") + } // Some files in /sys report a non-zero st_size often bigger than the contents guard let data = NSData.init(contentsOfFile: "/sys/kernel/profiling") else { XCTFail("Cant read /sys/kernel/profiling") @@ -1827,10 +1461,8 @@ extension TestNSData { do { try data.write(to: url, options: [.withoutOverwriting]) XCTAssertTrue(false, "Should have thrown") - } catch let error as NSError { - XCTAssertEqual(error.code, CocoaError.fileWriteFileExists.rawValue) } catch { - XCTFail("unexpected error") + XCTAssertEqual((error as NSError).code, CocoaError.fileWriteFileExists.rawValue) } try? FileManager.default.removeItem(at: url) diff --git a/Tests/Foundation/TestNSDateComponents.swift b/Tests/Foundation/TestNSDateComponents.swift index 03649f0a18..c1ea6111fa 100644 --- a/Tests/Foundation/TestNSDateComponents.swift +++ b/Tests/Foundation/TestNSDateComponents.swift @@ -148,7 +148,6 @@ class TestNSDateComponents: XCTestCase { let diff1 = calendar.dateComponents([.month, .year, .day], from: date1, to: date2) XCTAssertEqual(diff1.year, 1) XCTAssertEqual(diff1.month, 5) - XCTAssertEqual(diff1.isLeapMonth, false) XCTAssertEqual(diff1.day, 20) XCTAssertNil(diff1.era) XCTAssertNil(diff1.yearForWeekOfYear) @@ -166,33 +165,27 @@ class TestNSDateComponents: XCTestCase { let diff2 = calendar.dateComponents([.weekOfMonth], from: date2, to: date1) XCTAssertEqual(diff2.weekOfMonth, -76) - XCTAssertEqual(diff2.isLeapMonth, false) let diff3 = calendar.dateComponents([.weekday], from: date2, to: date1) XCTAssertEqual(diff3.weekday, -536) - XCTAssertEqual(diff3.isLeapMonth, false) let diff4 = calendar.dateComponents([.weekday, .weekOfMonth], from: date1, to: date2) XCTAssertEqual(diff4.weekday, 4) XCTAssertEqual(diff4.weekOfMonth, 76) - XCTAssertEqual(diff4.isLeapMonth, false) let diff5 = calendar.dateComponents([.weekday, .weekOfYear], from: date1, to: date2) XCTAssertEqual(diff5.weekday, 4) XCTAssertEqual(diff5.weekOfYear, 76) - XCTAssertEqual(diff5.isLeapMonth, false) let diff6 = calendar.dateComponents([.month, .weekOfMonth], from: date1, to: date2) XCTAssertEqual(diff6.month, 17) XCTAssertEqual(diff6.weekOfMonth, 2) - XCTAssertEqual(diff6.isLeapMonth, false) let diff7 = calendar.dateComponents([.weekOfYear, .weekOfMonth], from: date2, to: date1) XCTAssertEqual(diff7.weekOfYear, -76) XCTAssertEqual(diff7.weekOfMonth, 0) - XCTAssertEqual(diff7.isLeapMonth, false) - let diff8 = calendar.dateComponents([.era, .quarter, .year, .month, .day, .hour, .minute, .second, .nanosecond, .calendar, .timeZone], from: date2, to: date3) + let diff8 = calendar.dateComponents([.era, .quarter, .year, .month, .day, .hour, .minute, .second, .nanosecond, .calendar, .timeZone, .isLeapMonth], from: date2, to: date3) XCTAssertEqual(diff8.era, 0) XCTAssertEqual(diff8.year, 315) XCTAssertEqual(diff8.quarter, 0) @@ -202,11 +195,11 @@ class TestNSDateComponents: XCTestCase { XCTAssertEqual(diff8.minute, 46) XCTAssertEqual(diff8.second, 40) XCTAssertEqual(diff8.nanosecond, 0) - XCTAssertEqual(diff8.isLeapMonth, false) - XCTAssertNil(diff8.calendar) + XCTAssertNil(diff8.isLeapMonth) + XCTAssertEqual(diff8.calendar, calendar) XCTAssertNil(diff8.timeZone) - let diff9 = calendar.dateComponents([.era, .quarter, .year, .month, .day, .hour, .minute, .second, .nanosecond, .calendar, .timeZone], from: date4, to: date3) + let diff9 = calendar.dateComponents([.era, .quarter, .year, .month, .day, .hour, .minute, .second, .nanosecond, .calendar, .timeZone, .isLeapMonth], from: date4, to: date3) XCTAssertEqual(diff9.era, 0) XCTAssertEqual(diff9.year, 0) XCTAssertEqual(diff9.quarter, 0) @@ -216,8 +209,8 @@ class TestNSDateComponents: XCTestCase { XCTAssertEqual(diff9.minute, 0) XCTAssertEqual(diff9.second, -1) XCTAssertEqual(diff9.nanosecond, 0) - XCTAssertEqual(diff9.isLeapMonth, false) - XCTAssertNil(diff9.calendar) + XCTAssertNil(diff9.isLeapMonth) + XCTAssertEqual(diff9.calendar, calendar) XCTAssertNil(diff9.timeZone) } @@ -235,22 +228,22 @@ class TestNSDateComponents: XCTestCase { calendar.timeZone = try XCTUnwrap(TimeZone(abbreviation: "UTC")) let diff1 = calendar.dateComponents([.nanosecond], from: date1, to: date2) - XCTAssertEqual(diff1.nanosecond, 1230003) + XCTAssertEqual(diff1.nanosecond, 1230001) let diff2 = calendar.dateComponents([.nanosecond], from: date1, to: date2) - XCTAssertEqual(diff2.nanosecond, 1230003) + XCTAssertEqual(diff2.nanosecond, 1230001) let diff3 = calendar.dateComponents([.day, .minute, .second, .nanosecond], from: date2, to: date3) XCTAssertEqual(diff3.day, 3) XCTAssertEqual(diff3.minute, 16) XCTAssertEqual(diff3.second, 40) - XCTAssertEqual(diff3.nanosecond, 455549949) + XCTAssertEqual(diff3.nanosecond, 455549955) let diff4 = calendar.dateComponents([.day, .minute, .second, .nanosecond], from: date3, to: date2) XCTAssertEqual(diff4.day, -3) XCTAssertEqual(diff4.minute, -16) XCTAssertEqual(diff4.second, -40) - XCTAssertEqual(diff4.nanosecond, -455549950) + XCTAssertEqual(diff4.nanosecond, -455549955) } func test_currentCalendar() { @@ -268,14 +261,4 @@ class TestNSDateComponents: XCTestCase { XCTAssertEqual(Calendar.current.compare(d1, to: d2, toGranularity: .weekday), .orderedAscending) XCTAssertEqual(Calendar.current.compare(d2, to: d1, toGranularity: .weekday), .orderedDescending) } - - static var allTests: [(String, (TestNSDateComponents) -> () throws -> Void)] { - return [ - ("test_hash", test_hash), - ("test_copyNSDateComponents", test_copyNSDateComponents), - ("test_dateDifferenceComponents", test_dateDifferenceComponents), - ("test_nanoseconds", test_nanoseconds), - ("test_currentCalendar", test_currentCalendar), - ] - } } diff --git a/Tests/Foundation/TestNSDictionary.swift b/Tests/Foundation/TestNSDictionary.swift index 629d758cf7..9829ef4091 100644 --- a/Tests/Foundation/TestNSDictionary.swift +++ b/Tests/Foundation/TestNSDictionary.swift @@ -254,22 +254,4 @@ class TestNSDictionary : XCTestCase { dictionary[3 as NSNumber] = "k" XCTAssertEqual(dictionary[3 as NSNumber] as? String, "k") } - - static var allTests: [(String, (TestNSDictionary) -> () throws -> Void)] { - return [ - ("test_BasicConstruction", test_BasicConstruction), - ("test_ArrayConstruction", test_ArrayConstruction), - ("test_description", test_description), - ("test_enumeration", test_enumeration), - ("test_equality", test_equality), - ("test_copying", test_copying), - ("test_mutableCopying", test_mutableCopying), - ("test_writeToFile", test_writeToFile), - ("test_initWithContentsOfFile", test_initWithContentsOfFile), - ("test_settingWithStringKey", test_settingWithStringKey), - ("test_valueForKey", test_valueForKey), - ("test_valueForKeyWithNestedDict", test_valueForKeyWithNestedDict), - ("test_sharedKeySets", test_sharedKeySets), - ] - } } diff --git a/Tests/Foundation/TestNSError.swift b/Tests/Foundation/TestNSError.swift index 89cb5af6c3..d597fb0a99 100644 --- a/Tests/Foundation/TestNSError.swift +++ b/Tests/Foundation/TestNSError.swift @@ -12,32 +12,6 @@ struct SwiftCustomNSError: Error, CustomNSError { class TestNSError : XCTestCase { - static var allTests: [(String, (TestNSError) -> () throws -> Void)] { - var tests: [(String, (TestNSError) -> () throws -> Void)] = [ - ("test_LocalizedError_errorDescription", test_LocalizedError_errorDescription), - ("test_NSErrorAsError_localizedDescription", test_NSErrorAsError_localizedDescription), - ("test_NSError_inDictionary", test_NSError_inDictionary), - ("test_CustomNSError_domain", test_CustomNSError_domain), - ("test_CustomNSError_userInfo", test_CustomNSError_userInfo), - ("test_CustomNSError_errorCode", test_CustomNSError_errorCode), - ("test_CustomNSError_errorCodeRawInt", test_CustomNSError_errorCodeRawInt), - ("test_CustomNSError_errorCodeRawUInt", test_CustomNSError_errorCodeRawUInt), - ("test_errorConvenience", test_errorConvenience), - ] - - #if !canImport(ObjectiveC) || DARWIN_COMPATIBILITY_TESTS - tests.append(contentsOf: [ - ("test_ConvertErrorToNSError_domain", test_ConvertErrorToNSError_domain), - ("test_ConvertErrorToNSError_errorCode", test_ConvertErrorToNSError_errorCode), - ("test_ConvertErrorToNSError_errorCodeRawInt", test_ConvertErrorToNSError_errorCodeRawInt), - ("test_ConvertErrorToNSError_errorCodeRawUInt", test_ConvertErrorToNSError_errorCodeRawUInt), - ("test_ConvertErrorToNSError_errorCodeWithAssosiatedValue", test_ConvertErrorToNSError_errorCodeWithAssosiatedValue), - ]) - #endif - - return tests - } - func test_LocalizedError_errorDescription() { struct Error : LocalizedError { var errorDescription: String? { return "error description" } @@ -106,14 +80,11 @@ class TestNSError : XCTestCase { func test_errorConvenience() { let error = CocoaError.error(.fileReadNoSuchFile, url: URL(fileURLWithPath: #file)) - if let nsError = error as? NSError { - XCTAssertEqual(nsError._domain, NSCocoaErrorDomain) - XCTAssertEqual(nsError._code, CocoaError.fileReadNoSuchFile.rawValue) - if let filePath = nsError.userInfo[NSURLErrorKey] as? URL { - XCTAssertEqual(filePath, URL(fileURLWithPath: #file)) - } else { - XCTFail() - } + let nsError = error as NSError + XCTAssertEqual(nsError._domain, NSCocoaErrorDomain) + XCTAssertEqual(nsError._code, CocoaError.fileReadNoSuchFile.rawValue) + if let filePath = nsError.userInfo[NSURLErrorKey] as? URL { + XCTAssertEqual(filePath, URL(fileURLWithPath: #file)) } else { XCTFail() } @@ -179,15 +150,6 @@ class TestNSError : XCTestCase { } class TestURLError: XCTestCase { - - static var allTests: [(String, (TestURLError) -> () throws -> Void)] { - return [ - ("test_errorCode", TestURLError.test_errorCode), - ("test_failingURL", TestURLError.test_failingURL), - ("test_failingURLString", TestURLError.test_failingURLString), - ] - } - static let testURL = URL(string: "https://swift.org")! let userInfo: [String: Any] = [ NSURLErrorFailingURLErrorKey: TestURLError.testURL, @@ -214,22 +176,12 @@ class TestURLError: XCTestCase { class TestCocoaError: XCTestCase { - static var allTests: [(String, (TestCocoaError) -> () throws -> Void)] { - return [ - ("test_errorCode", TestCocoaError.test_errorCode), - ("test_filePath", TestCocoaError.test_filePath), - ("test_url", TestCocoaError.test_url), - ("test_stringEncoding", TestCocoaError.test_stringEncoding), - ("test_underlying", TestCocoaError.test_underlying), - ] - } - static let testURL = URL(string: "file:///")! let userInfo: [String: Any] = [ NSURLErrorKey: TestCocoaError.testURL, NSFilePathErrorKey: TestCocoaError.testURL.path, NSUnderlyingErrorKey: POSIXError(.EACCES), - NSStringEncodingErrorKey: String.Encoding.utf16.rawValue, + NSStringEncodingErrorKey: Int(String.Encoding.utf16.rawValue), ] func test_errorCode() { @@ -253,9 +205,9 @@ class TestCocoaError: XCTestCase { } func test_url() { - let e = CocoaError(.fileReadNoSuchFile, userInfo: userInfo) - XCTAssertNotNil(e.url) // TODO: Re-enable once Foundation.URL is ported from FoundationEssentials + // let e = CocoaError(.fileReadNoSuchFile, userInfo: userInfo) + // XCTAssertNotNil(e.url) // XCTAssertEqual(e.url, TestCocoaError.testURL) } diff --git a/Tests/Foundation/TestNSGeometry.swift b/Tests/Foundation/TestNSGeometry.swift index 365f6331e9..a9b921c1a3 100644 --- a/Tests/Foundation/TestNSGeometry.swift +++ b/Tests/Foundation/TestNSGeometry.swift @@ -31,60 +31,6 @@ private func assertEqual(_ rect: CGRect, } class TestNSGeometry : XCTestCase { - - static var allTests: [(String, (TestNSGeometry) -> () throws -> Void)] { - return [ - ("test_CGFloat_BasicConstruction", test_CGFloat_BasicConstruction), - ("test_CGFloat_Equality", test_CGFloat_Equality), - ("test_CGFloat_LessThanOrEqual", test_CGFloat_LessThanOrEqual), - ("test_CGFloat_GreaterThanOrEqual", test_CGFloat_GreaterThanOrEqual), - ("test_CGPoint_BasicConstruction", test_CGPoint_BasicConstruction), - ("test_CGPoint_ExtendedConstruction", test_CGPoint_ExtendedConstruction), - ("test_CGSize_BasicConstruction", test_CGSize_BasicConstruction), - ("test_CGSize_ExtendedConstruction", test_CGSize_ExtendedConstruction), - ("test_CGRect_BasicConstruction", test_CGRect_BasicConstruction), - ("test_CGRect_ExtendedConstruction", test_CGRect_ExtendedConstruction), - ("test_CGRect_SpecialValues", test_CGRect_SpecialValues), - ("test_CGRect_IsNull", test_CGRect_IsNull), - ("test_CGRect_IsInfinite", test_CGRect_IsInfinite), - ("test_CGRect_IsEmpty", test_CGRect_IsEmpty), - ("test_CGRect_Equatable", test_CGRect_Equatable), - ("test_CGRect_CalculatedGeometricProperties", test_CGRect_CalculatedGeometricProperties), - ("test_CGRect_Standardized", test_CGRect_Standardized), - ("test_CGRect_Integral", test_CGRect_Integral), - ("test_CGRect_ContainsPoint", test_CGRect_ContainsPoint), - ("test_CGRect_ContainsRect", test_CGRect_ContainsRect), - ("test_CGRect_Union", test_CGRect_Union), - ("test_CGRect_Intersection", test_CGRect_Intersection), - ("test_CGRect_Intersects", test_CGRect_Intersects), - ("test_CGRect_OffsetBy", test_CGRect_OffsetBy), - ("test_CGRect_Divide", test_CGRect_Divide), - ("test_CGRect_InsetBy", test_CGRect_InsetBy), - ("test_NSEdgeInsets_BasicConstruction", test_NSEdgeInsets_BasicConstruction), - ("test_NSEdgeInsetsEqual", test_NSEdgeInsetsEqual), - ("test_NSMakePoint", test_NSMakePoint), - ("test_NSMakeSize", test_NSMakeSize), - ("test_NSMakeRect", test_NSMakeRect), - ("test_NSEdgeInsetsMake", test_NSEdgeInsetsMake), - ("test_NSUnionRect", test_NSUnionRect), - ("test_NSIntersectionRect", test_NSIntersectionRect), - ("test_NSOffsetRect", test_NSOffsetRect), - ("test_NSPointInRect", test_NSPointInRect), - ("test_NSMouseInRect", test_NSMouseInRect), - ("test_NSContainsRect", test_NSContainsRect), - ("test_NSIntersectsRect", test_NSIntersectsRect), - ("test_NSIntegralRect", test_NSIntegralRect), - ("test_NSIntegralRectWithOptions", test_NSIntegralRectWithOptions), - ("test_NSDivideRect", test_NSDivideRect), - ("test_EncodeToNSString", test_EncodeToNSString), - ("test_EncodeNegativeToNSString", test_EncodeNegativeToNSString), - ("test_DecodeFromNSString", test_DecodeFromNSString), - ("test_DecodeEmptyStrings", test_DecodeEmptyStrings), - ("test_DecodeNegativeFromNSString", test_DecodeNegativeFromNSString), - ("test_DecodeGarbageFromNSString", test_DecodeGarbageFromNSString), - ] - } - func test_CGFloat_BasicConstruction() { XCTAssertEqual(CGFloat().native, 0.0) XCTAssertEqual(CGFloat(Double(3.0)).native, 3.0) diff --git a/Tests/Foundation/TestNSKeyedArchiver.swift b/Tests/Foundation/TestNSKeyedArchiver.swift index b51dfe608d..64bfb40ce8 100644 --- a/Tests/Foundation/TestNSKeyedArchiver.swift +++ b/Tests/Foundation/TestNSKeyedArchiver.swift @@ -78,33 +78,6 @@ public class UserClass : NSObject, NSSecureCoding { } class TestNSKeyedArchiver : XCTestCase { - static var allTests: [(String, (TestNSKeyedArchiver) -> () throws -> Void)] { - return [ - ("test_archive_array", test_archive_array), - ("test_archive_charptr", test_archive_charptr), - ("test_archive_concrete_value", test_archive_concrete_value), - ("test_archive_dictionary", test_archive_dictionary), - ("test_archive_generic_objc", test_archive_generic_objc), - ("test_archive_locale", test_archive_locale), - ("test_archive_string", test_archive_string), - ("test_archive_mutable_array", test_archive_mutable_array), - ("test_archive_mutable_dictionary", test_archive_mutable_dictionary), - ("test_archive_ns_user_class", test_archive_ns_user_class), - ("test_archive_nspoint", test_archive_nspoint), - ("test_archive_nsrange", test_archive_nsrange), - ("test_archive_nsrect", test_archive_nsrect), - ("test_archive_null", test_archive_null), - ("test_archive_set", test_archive_set), - ("test_archive_url", test_archive_url), - ("test_archive_user_class", test_archive_user_class), - ("test_archive_uuid_bvref", test_archive_uuid_byref), - ("test_archive_uuid_byvalue", test_archive_uuid_byvalue), - ("test_archive_unhashable", test_archive_unhashable), - ("test_archiveRootObject_String", test_archiveRootObject_String), - ("test_archiveRootObject_URLRequest()", test_archiveRootObject_URLRequest), - ] - } - private func test_archive(_ encode: (NSKeyedArchiver) -> Bool, decode: (NSKeyedUnarchiver) -> Bool) { // Archiving using custom NSMutableData instance diff --git a/Tests/Foundation/TestNSKeyedUnarchiver.swift b/Tests/Foundation/TestNSKeyedUnarchiver.swift index 35a6ff90ed..dc1e3f97fc 100644 --- a/Tests/Foundation/TestNSKeyedUnarchiver.swift +++ b/Tests/Foundation/TestNSKeyedUnarchiver.swift @@ -8,21 +8,6 @@ // class TestNSKeyedUnarchiver : XCTestCase { - static var allTests: [(String, (TestNSKeyedUnarchiver) -> () throws -> Void)] { - return [ - ("test_unarchive_array", test_unarchive_array), - ("test_unarchive_complex", test_unarchive_complex), - ("test_unarchive_concrete_value", test_unarchive_concrete_value), - // ("test_unarchive_notification", test_unarchive_notification), // does not yet support isEqual() - ("test_unarchive_nsedgeinsets_value", test_unarchive_nsedgeinsets_value), - ("test_unarchive_nsrange_value", test_unarchive_nsrange_value), - ("test_unarchive_nsrect", test_unarchive_nsrect_value), - ("test_unarchive_ordered_set", test_unarchive_ordered_set), - ("test_unarchive_url", test_unarchive_url), - ("test_unarchive_uuid", test_unarchive_uuid), - ] - } - private enum SecureTest { case skip case performWithDefaultClass @@ -99,6 +84,7 @@ class TestNSKeyedUnarchiver : XCTestCase { } } +// does not yet support isEqual() // func test_unarchive_notification() throws { // let notification = Notification(name: Notification.Name(rawValue:"notification-name"), object: "notification-object".bridge(), // userInfo: ["notification-key": "notification-val"]) diff --git a/Tests/Foundation/TestNSLocale.swift b/Tests/Foundation/TestNSLocale.swift index d7e4dd0a35..83ee503c22 100644 --- a/Tests/Foundation/TestNSLocale.swift +++ b/Tests/Foundation/TestNSLocale.swift @@ -8,17 +8,6 @@ // class TestNSLocale : XCTestCase { - static var allTests: [(String, (TestNSLocale) -> () throws -> Void)] { - return [ - ("test_constants", test_constants), - ("test_Identifier", test_Identifier), - ("test_copy", test_copy), - ("test_hash", test_hash), - ("test_staticProperties", test_staticProperties), - ("test_localeProperties", test_localeProperties), - ] - } - func test_Identifier() { // Current locale identifier should not be empty // Or things like NumberFormatter spellOut style won't work diff --git a/Tests/Foundation/TestNSLock.swift b/Tests/Foundation/TestNSLock.swift index 58a1b00060..70bca31a73 100644 --- a/Tests/Foundation/TestNSLock.swift +++ b/Tests/Foundation/TestNSLock.swift @@ -8,18 +8,6 @@ // class TestNSLock: XCTestCase { - static var allTests: [(String, (TestNSLock) -> () throws -> Void)] { - return [ - - ("test_lockWait", test_lockWait), - ("test_threadsAndLocks", test_threadsAndLocks), - ("test_recursiveLock", test_recursiveLock), - ("test_withLock", test_withLock), - - ] - } - - func test_lockWait() { let condition = NSCondition() let lock = NSLock() diff --git a/Tests/Foundation/TestNSNull.swift b/Tests/Foundation/TestNSNull.swift index 82268379af..ebd97700a1 100644 --- a/Tests/Foundation/TestNSNull.swift +++ b/Tests/Foundation/TestNSNull.swift @@ -8,14 +8,6 @@ // class TestNSNull : XCTestCase { - - static var allTests: [(String, (TestNSNull) -> () throws -> Void)] { - return [ - ("test_alwaysEqual", test_alwaysEqual), - ("test_description", test_description), - ] - } - func test_alwaysEqual() { let null_1 = NSNull() let null_2 = NSNull() diff --git a/Tests/Foundation/TestNSNumber.swift b/Tests/Foundation/TestNSNumber.swift index 7bcd453ecc..00238b4947 100644 --- a/Tests/Foundation/TestNSNumber.swift +++ b/Tests/Foundation/TestNSNumber.swift @@ -8,38 +8,6 @@ // class TestNSNumber : XCTestCase { - static var allTests: [(String, (TestNSNumber) -> () throws -> Void)] { - return [ - ("test_NumberWithBool", test_NumberWithBool ), - ("test_CFBoolean", test_CFBoolean ), - ("test_numberWithChar", test_numberWithChar ), - ("test_numberWithUnsignedChar", test_numberWithUnsignedChar ), - ("test_numberWithShort", test_numberWithShort ), - ("test_numberWithUnsignedShort", test_numberWithUnsignedShort ), - ("test_numberWithLong", test_numberWithLong ), - ("test_numberWithUnsignedLong", test_numberWithUnsignedLong ), - ("test_numberWithLongLong", test_numberWithLongLong ), - ("test_numberWithUnsignedLongLong", test_numberWithUnsignedLongLong ), - ("test_numberWithInt", test_numberWithInt ), - ("test_numberWithUInt", test_numberWithUInt ), - ("test_numberWithFloat", test_numberWithFloat ), - ("test_numberWithDouble", test_numberWithDouble ), - ("test_compareNumberWithBool", test_compareNumberWithBool ), - ("test_compareNumberWithChar", test_compareNumberWithChar ), - ("test_compareNumberWithUnsignedChar", test_compareNumberWithUnsignedChar ), - ("test_compareNumberWithShort", test_compareNumberWithShort ), - ("test_compareNumberWithFloat", test_compareNumberWithFloat ), - ("test_compareNumberWithDouble", test_compareNumberWithDouble ), - ("test_description", test_description ), - ("test_descriptionWithLocale", test_descriptionWithLocale ), - ("test_objCType", test_objCType ), - ("test_stringValue", test_stringValue), - ("test_Equals", test_Equals), - ("test_boolValue", test_boolValue), - ("test_hash", test_hash), - ] - } - func test_NumberWithBool() { XCTAssertEqual(NSNumber(value: true).boolValue, true) XCTAssertEqual(NSNumber(value: true).int8Value, Int8(1)) diff --git a/Tests/Foundation/TestNSNumberBridging.swift b/Tests/Foundation/TestNSNumberBridging.swift index 814a4793f5..4d7dd8bae5 100644 --- a/Tests/Foundation/TestNSNumberBridging.swift +++ b/Tests/Foundation/TestNSNumberBridging.swift @@ -8,26 +8,6 @@ // class TestNSNumberBridging : XCTestCase { - static var allTests: [(String, (TestNSNumberBridging) -> () throws -> Void)] { - return [ - ("testNSNumberBridgeFromInt8", testNSNumberBridgeFromInt8), - ("testNSNumberBridgeFromUInt8", testNSNumberBridgeFromUInt8), - ("testNSNumberBridgeFromInt16", testNSNumberBridgeFromInt16), - ("testNSNumberBridgeFromUInt16", testNSNumberBridgeFromUInt16), - ("testNSNumberBridgeFromInt32", testNSNumberBridgeFromInt32), - ("testNSNumberBridgeFromUInt32", testNSNumberBridgeFromUInt32), - ("testNSNumberBridgeFromInt64", testNSNumberBridgeFromInt64), - ("testNSNumberBridgeFromUInt64", testNSNumberBridgeFromUInt64), - ("testNSNumberBridgeFromInt", testNSNumberBridgeFromInt), - ("testNSNumberBridgeFromUInt", testNSNumberBridgeFromUInt), - ("testNSNumberBridgeFromFloat", testNSNumberBridgeFromFloat), - ("testNSNumberBridgeFromDouble", testNSNumberBridgeFromDouble), - ("test_numericBitPatterns_to_floatingPointTypes", test_numericBitPatterns_to_floatingPointTypes), - ("testNSNumberBridgeAnyHashable", testNSNumberBridgeAnyHashable), - ("testNSNumberToBool", testNSNumberToBool), - ] - } - func testFloat(_ lhs: Float?, _ rhs: Float?, file: String = #file, line: UInt = #line) { let message = "\(file):\(line) \(String(describing: lhs)) != \(String(describing: rhs)) Float" if let lhsValue = lhs { diff --git a/Tests/Foundation/TestNSOrderedSet.swift b/Tests/Foundation/TestNSOrderedSet.swift index 7cbe517b9d..94100275e5 100644 --- a/Tests/Foundation/TestNSOrderedSet.swift +++ b/Tests/Foundation/TestNSOrderedSet.swift @@ -504,42 +504,4 @@ class TestNSOrderedSet : XCTestCase { try fixture.assertLoadedValuesMatch() } } - - static var allTests: [(String, (TestNSOrderedSet) -> () throws -> Void)] { - return [ - ("test_BasicConstruction", test_BasicConstruction), - ("test_Enumeration", test_Enumeration), - ("test_Uniqueness", test_Uniqueness), - ("test_reversedEnumeration", test_reversedEnumeration), - ("test_reversedOrderedSet", test_reversedOrderedSet), - ("test_reversedEmpty", test_reversedEmpty), - ("test_ObjectAtIndex", test_ObjectAtIndex), - ("test_ObjectsAtIndexes", test_ObjectsAtIndexes), - ("test_FirstAndLastObjects", test_FirstAndLastObjects), - ("test_AddObject", test_AddObject), - ("test_AddObjects", test_AddObjects), - ("test_RemoveAllObjects", test_RemoveAllObjects), - ("test_RemoveObject", test_RemoveObject), - ("test_RemoveObjectAtIndex", test_RemoveObjectAtIndex), - ("test_IsEqualToOrderedSet", test_IsEqualToOrderedSet), - ("test_Subsets", test_Subsets), - ("test_ReplaceObject", test_ReplaceObject), - ("test_ExchangeObjects", test_ExchangeObjects), - ("test_MoveObjects", test_MoveObjects), - ("test_InsertObjects", test_InsertObjects), - ("test_Insert", test_Insert), - ("test_SetObjectAtIndex", test_SetObjectAtIndex), - ("test_RemoveObjectsInRange", test_RemoveObjectsInRange), - ("test_ReplaceObjectsAtIndexes", test_ReplaceObjectsAtIndexes), - ("test_Intersection", test_Intersection), - ("test_Subtraction", test_Subtraction), - ("test_Union", test_Union), - ("test_Initializers", test_Initializers), - ("test_Sorting", test_Sorting), - ("test_reversedEnumerationMutable", test_reversedEnumerationMutable), - ("test_reversedOrderedSetMutable", test_reversedOrderedSetMutable), - ("test_codingRoundtrip", test_codingRoundtrip), - ("test_loadedValuesMatch", test_loadedValuesMatch), - ] - } } diff --git a/Tests/Foundation/TestNSPredicate.swift b/Tests/Foundation/TestNSPredicate.swift index 985ebe7481..9d57f9d0b2 100644 --- a/Tests/Foundation/TestNSPredicate.swift +++ b/Tests/Foundation/TestNSPredicate.swift @@ -8,21 +8,6 @@ // class TestNSPredicate: XCTestCase { - - static var allTests : [(String, (TestNSPredicate) -> () throws -> Void)] { - return [ - ("test_BooleanPredicate", test_BooleanPredicate), - ("test_BlockPredicateWithoutVariableBindings", test_BlockPredicateWithoutVariableBindings), - ("test_filterNSArray", test_filterNSArray), - ("test_filterNSMutableArray", test_filterNSMutableArray), - ("test_filterNSSet", test_filterNSSet), - ("test_filterNSMutableSet", test_filterNSMutableSet), - ("test_filterNSOrderedSet", test_filterNSOrderedSet), - ("test_filterNSMutableOrderedSet", test_filterNSMutableOrderedSet), - ("test_copy", test_copy), - ] - } - func test_BooleanPredicate() { let truePredicate = NSPredicate(value: true) let falsePredicate = NSPredicate(value: false) diff --git a/Tests/Foundation/TestNSRange.swift b/Tests/Foundation/TestNSRange.swift index a140b6443c..9298e93b9c 100644 --- a/Tests/Foundation/TestNSRange.swift +++ b/Tests/Foundation/TestNSRange.swift @@ -8,23 +8,6 @@ // class TestNSRange : XCTestCase { - - static var allTests: [(String, (TestNSRange) -> () throws -> Void)] { - return [ - ("test_NSRangeFromString", test_NSRangeFromString ), - ("test_NSRangeBridging", test_NSRangeBridging), - ("test_NSMaxRange", test_NSMaxRange), - ("test_NSLocationInRange", test_NSLocationInRange), - ("test_NSEqualRanges", test_NSEqualRanges), - ("test_NSUnionRange", test_NSUnionRange), - ("test_NSIntersectionRange", test_NSIntersectionRange), - ("test_NSStringFromRange", test_NSStringFromRange), - ("test_init_region_in_ascii_string", test_init_region_in_ascii_string), - ("test_init_region_in_unicode_string", test_init_region_in_unicode_string), - ("test_hashing", test_hashing), - ] - } - func test_NSRangeFromString() { let emptyRangeStrings = [ "", diff --git a/Tests/Foundation/TestNSRegularExpression.swift b/Tests/Foundation/TestNSRegularExpression.swift index 5769de3eb3..9c3a4c2564 100644 --- a/Tests/Foundation/TestNSRegularExpression.swift +++ b/Tests/Foundation/TestNSRegularExpression.swift @@ -8,21 +8,6 @@ // class TestNSRegularExpression : XCTestCase { - - static var allTests : [(String, (TestNSRegularExpression) -> () throws -> Void)] { - return [ - ("test_simpleRegularExpressions", test_simpleRegularExpressions), - ("test_regularExpressionReplacement", test_regularExpressionReplacement), - ("test_complexRegularExpressions", test_complexRegularExpressions), - ("test_Equal", test_Equal), - ("test_NSCoding", test_NSCoding), - ("test_defaultOptions", test_defaultOptions), - ("test_badPattern", test_badPattern), - ("test_unicodeNamedGroup", test_unicodeNamedGroup), - ("test_conflictingNamedGroups", test_conflictingNamedGroups), - ] - } - func simpleRegularExpressionTestWithPattern(_ patternString: String, target searchString: String, looking: Bool, match: Bool, file: StaticString = #file, line: UInt = #line) { do { let str = NSString(string: searchString) diff --git a/Tests/Foundation/TestNSSet.swift b/Tests/Foundation/TestNSSet.swift index 34edd05a18..cf29b942ec 100644 --- a/Tests/Foundation/TestNSSet.swift +++ b/Tests/Foundation/TestNSSet.swift @@ -293,28 +293,4 @@ class TestNSSet : XCTestCase { try fixture.assertLoadedValuesMatch() } } - - static var allTests: [(String, (TestNSSet) -> () throws -> Void)] { - return [ - ("test_BasicConstruction", test_BasicConstruction), - ("testInitWithSet", testInitWithSet), - ("test_enumeration", test_enumeration), - ("test_sequenceType", test_sequenceType), - ("test_setOperations", test_setOperations), - ("test_equality", test_equality), - ("test_copying", test_copying), - ("test_mutableCopying", test_mutableCopying), - ("test_CountedSetBasicConstruction", test_CountedSetBasicConstruction), - ("test_CountedSetObjectCount", test_CountedSetObjectCount), - ("test_CountedSetAddObject", test_CountedSetAddObject), - ("test_CountedSetRemoveObject", test_CountedSetRemoveObject), - ("test_CountedSetCopying", test_CountedSetCopying), - ("test_mutablesetWithDictionary", test_mutablesetWithDictionary), - ("test_Subsets", test_Subsets), - ("test_description", test_description), - ("test_codingRoundtrip", test_codingRoundtrip), - ("test_loadedValuesMatch", test_loadedValuesMatch), - ] - } - } diff --git a/Tests/Foundation/TestNSSortDescriptor.swift b/Tests/Foundation/TestNSSortDescriptor.swift index 39f1a2eb46..c8cfc515d4 100644 --- a/Tests/Foundation/TestNSSortDescriptor.swift +++ b/Tests/Foundation/TestNSSortDescriptor.swift @@ -223,15 +223,5 @@ class TestNSSortDescriptor: XCTestCase { } } - - static var allTests: [(String, (TestNSSortDescriptor) -> () throws -> Void)] { - return [ - ("testComparable", testComparable), - ("testBuiltinComparableObject", testBuiltinComparableObject), - ("testBuiltinComparableBridgeable", testBuiltinComparableBridgeable), - ("testComparatorSorting", testComparatorSorting), - ("testSortingContainers", testSortingContainers), - ] - } } #endif diff --git a/Tests/Foundation/TestNSString.swift b/Tests/Foundation/TestNSString.swift index 2b000b0abb..b3e24278a3 100644 --- a/Tests/Foundation/TestNSString.swift +++ b/Tests/Foundation/TestNSString.swift @@ -316,7 +316,9 @@ class TestNSString: LoopbackServerTest { XCTAssertNil(string) } - func test_FromContentsOfURL() { + func test_FromContentsOfURL() throws { + throw XCTSkip("Test is flaky in CI: https://bugs.swift.org/browse/SR-10514") + #if false guard let testFileURL = testBundle().url(forResource: "NSStringTestData", withExtension: "txt") else { XCTFail("URL for NSStringTestData.txt is nil") return @@ -354,6 +356,7 @@ class TestNSString: LoopbackServerTest { return } XCTAssertEqual(zeroString, "Some\u{00}text\u{00}with\u{00}NUL\u{00}bytes\u{00}instead\u{00}of\u{00}spaces.\u{00}\n") + #endif } func test_FromContentOfFileUsedEncodingIgnored() { @@ -585,7 +588,9 @@ class TestNSString: LoopbackServerTest { } func test_completePathIntoString() throws { - + #if os(Windows) + throw XCTSkip("This test is not supported on Windows") + #else // Check all strings start with a common prefix func startWith(_ prefix: String, strings: [String]) -> Bool { return strings.contains { !$0.hasPrefix(prefix) } == false @@ -784,6 +789,7 @@ class TestNSString: LoopbackServerTest { } #endif } + #endif } @@ -1420,66 +1426,6 @@ class TestNSString: LoopbackServerTest { XCTAssertEqual(str4.replacingOccurrences(of: "\n\r", with: " "), "Hello\r\rworld.") } - func test_replacingOccurrencesInSubclass() { - // NSMutableString doesnt subclasss correctly -#if !DARWIN_COMPATIBILITY_TESTS - class TestMutableString: NSMutableString { - private var wrapped: NSMutableString - var replaceCharactersCount: Int = 0 - - override var length: Int { - return wrapped.length - } - - override func character(at index: Int) -> unichar { - return wrapped.character(at: index) - } - - override func replaceCharacters(in range: NSRange, with aString: String) { - defer { replaceCharactersCount += 1 } - wrapped.replaceCharacters(in: range, with: aString) - } - - override func mutableCopy(with zone: NSZone? = nil) -> Any { - return wrapped.mutableCopy() - } - - required init(stringLiteral value: StaticString) { - wrapped = .init(stringLiteral: value) - super.init(stringLiteral: value) - } - - required init(capacity: Int) { - fatalError("init(capacity:) has not been implemented") - } - - required init(string aString: String) { - fatalError("init(string:) has not been implemented") - } - - required convenience init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - required init(characters: UnsafePointer, length: Int) { - fatalError("init(characters:length:) has not been implemented") - } - - required convenience init(extendedGraphemeClusterLiteral value: StaticString) { - fatalError("init(extendedGraphemeClusterLiteral:) has not been implemented") - } - - required convenience init(unicodeScalarLiteral value: StaticString) { - fatalError("init(unicodeScalarLiteral:) has not been implemented") - } - } - - let testString = TestMutableString(stringLiteral: "ababab") - XCTAssertEqual(testString.replacingOccurrences(of: "ab", with: "xx"), "xxxxxx") - XCTAssertEqual(testString.replaceCharactersCount, 3) -#endif - } - func test_fileSystemRepresentation() { let name = "☃" as NSString @@ -1779,96 +1725,4 @@ class TestNSString: LoopbackServerTest { XCTAssertNotNil(str) XCTAssertEqual(str?.isEmpty, true) } - - static var allTests: [(String, (TestNSString) -> () throws -> Void)] { - var tests = [ - ("test_initData", test_initData), - ("test_boolValue", test_boolValue ), - ("test_BridgeConstruction", test_BridgeConstruction), - ("test_bridging", test_bridging), - ("test_integerValue", test_integerValue ), - ("test_intValue", test_intValue ), - ("test_doubleValue", test_doubleValue), - ("test_isEqualToStringWithSwiftString", test_isEqualToStringWithSwiftString ), - ("test_isEqualToObjectWithNSString", test_isEqualToObjectWithNSString ), - ("test_isNotEqualToObjectWithNSNumber", test_isNotEqualToObjectWithNSNumber ), - ("test_FromASCIIData", test_FromASCIIData ), - ("test_FromUTF8Data", test_FromUTF8Data ), - ("test_FromMalformedUTF8Data", test_FromMalformedUTF8Data ), - ("test_FromASCIINSData", test_FromASCIINSData ), - ("test_FromUTF8NSData", test_FromUTF8NSData ), - ("test_FromMalformedUTF8NSData", test_FromMalformedUTF8NSData ), - ("test_FromNullTerminatedCStringInASCII", test_FromNullTerminatedCStringInASCII ), - ("test_FromNullTerminatedCStringInUTF8", test_FromNullTerminatedCStringInUTF8 ), - ("test_FromMalformedNullTerminatedCStringInUTF8", test_FromMalformedNullTerminatedCStringInUTF8 ), - ("test_uppercaseString", test_uppercaseString ), - ("test_lowercaseString", test_lowercaseString ), - ("test_capitalizedString", test_capitalizedString ), - ("test_longLongValue", test_longLongValue ), - ("test_rangeOfCharacterFromSet", test_rangeOfCharacterFromSet ), - ("test_CFStringCreateMutableCopy", test_CFStringCreateMutableCopy), - - /* ⚠️ */ ("test_FromContentsOfURL", testExpectedToFail(test_FromContentsOfURL, - /* ⚠️ */ "test_FromContentsOfURL is flaky on CI, with unclear causes. https://bugs.swift.org/browse/SR-10514")), - - ("test_FromContentOfFileUsedEncodingIgnored", test_FromContentOfFileUsedEncodingIgnored), - ("test_FromContentOfFileUsedEncodingUTF8", test_FromContentOfFileUsedEncodingUTF8), - ("test_FromContentsOfURLUsedEncodingUTF16BE", test_FromContentsOfURLUsedEncodingUTF16BE), - ("test_FromContentsOfURLUsedEncodingUTF16LE", test_FromContentsOfURLUsedEncodingUTF16LE), - ("test_FromContentsOfURLUsedEncodingUTF32BE", test_FromContentsOfURLUsedEncodingUTF32BE), - ("test_FromContentsOfURLUsedEncodingUTF32LE", test_FromContentsOfURLUsedEncodingUTF32LE), - ("test_FromContentOfFile",test_FromContentOfFile), - ("test_writeToURLHasBOM_UTF32", test_writeToURLHasBOM_UTF32), - ("test_swiftStringUTF16", test_swiftStringUTF16), - ("test_stringByTrimmingCharactersInSet", test_stringByTrimmingCharactersInSet), - ("test_initializeWithFormat", test_initializeWithFormat), - ("test_initializeWithFormat2", test_initializeWithFormat2), - ("test_initializeWithFormat3", test_initializeWithFormat3), - ("test_initializeWithFormat4", test_initializeWithFormat4), - ("test_appendingPathComponent", test_appendingPathComponent), - ("test_deletingLastPathComponent", test_deletingLastPathComponent), - ("test_getCString_simple", test_getCString_simple), - ("test_getCString_nonASCII_withASCIIAccessor", test_getCString_nonASCII_withASCIIAccessor), - ("test_NSHomeDirectoryForUser", test_NSHomeDirectoryForUser), - ("test_resolvingSymlinksInPath", test_resolvingSymlinksInPath), - ("test_expandingTildeInPath", test_expandingTildeInPath), - ("test_standardizingPath", test_standardizingPath), - ("test_addingPercentEncoding", test_addingPercentEncoding), - ("test_removingPercentEncodingInLatin", test_removingPercentEncodingInLatin), - ("test_removingPercentEncodingInNonLatin", test_removingPercentEncodingInNonLatin), - ("test_removingPersentEncodingWithoutEncoding", test_removingPersentEncodingWithoutEncoding), - ("test_addingPercentEncodingAndBack", test_addingPercentEncodingAndBack), - ("test_stringByAppendingPathExtension", test_stringByAppendingPathExtension), - ("test_deletingPathExtension", test_deletingPathExtension), - ("test_ExternalRepresentation", test_ExternalRepresentation), - ("test_mutableStringConstructor", test_mutableStringConstructor), - ("test_emptyStringPrefixAndSuffix",test_emptyStringPrefixAndSuffix), - ("test_reflection", test_reflection), - ("test_replacingOccurrences", test_replacingOccurrences), - ("test_getLineStart", test_getLineStart), - ("test_substringWithRange", test_substringWithRange), - ("test_substringFromCFString", test_substringFromCFString), - ("test_createCopy", test_createCopy), - ("test_commonPrefix", test_commonPrefix), - ("test_lineRangeFor", test_lineRangeFor), - ("test_fileSystemRepresentation", test_fileSystemRepresentation), - ("test_enumerateSubstrings", test_enumerateSubstrings), - ("test_paragraphRange", test_paragraphRange), - ("test_initStringWithNSString", test_initStringWithNSString), - ("test_initString_utf8StringWithArrayInput", test_initString_utf8StringWithArrayInput), - ("test_initString_utf8StringWithStringInput", test_initString_utf8StringWithStringInput), - ("test_initString_utf8StringWithInoutConversion", test_initString_utf8StringWithInoutConversion), - ("test_initString_cStringWithArrayInput", test_initString_cStringWithArrayInput), - ("test_initString_cStringWithStringInput", test_initString_cStringWithStringInput), - ("test_initString_cStringWithInoutConversion", test_initString_cStringWithInoutConversion), - ] - -#if !os(Windows) - // Tests that dont currently work on windows - tests += [ - ("test_completePathIntoString", test_completePathIntoString), - ] -#endif - return tests - } } diff --git a/Tests/Foundation/TestNSTextCheckingResult.swift b/Tests/Foundation/TestNSTextCheckingResult.swift index 743f49cc9e..725790276a 100644 --- a/Tests/Foundation/TestNSTextCheckingResult.swift +++ b/Tests/Foundation/TestNSTextCheckingResult.swift @@ -131,14 +131,4 @@ class TestNSTextCheckingResult: XCTestCase { try fixture.assertLoadedValuesMatch(areEqual(_:_:)) } } - - static var allTests: [(String, (TestNSTextCheckingResult) -> () throws -> Void)] { - return [ - ("test_textCheckingResult", test_textCheckingResult), - ("test_multipleMatches", test_multipleMatches), - ("test_rangeWithName", test_rangeWithName), - ("test_codingRoundtrip", test_codingRoundtrip), - ("test_loadedVauesMatch", test_loadedVauesMatch), - ] - } } diff --git a/Tests/Foundation/TestNSURL.swift b/Tests/Foundation/TestNSURL.swift index 1ce46dd5af..7af2ac5d3d 100644 --- a/Tests/Foundation/TestNSURL.swift +++ b/Tests/Foundation/TestNSURL.swift @@ -69,16 +69,4 @@ class TestNSURL: XCTestCase { XCTAssertEqual(NSURL(fileURLWithPath: "/path/../file", isDirectory: false).resolvingSymlinksInPath?.absoluteString, "file:///file") XCTAssertEqual(NSURL(fileURLWithPath: "/path/to/./file/..", isDirectory: false).resolvingSymlinksInPath?.absoluteString, "file:///path/to") } - - static var allTests: [(String, (TestNSURL) -> () throws -> Void)] { - let tests: [(String, (TestNSURL) -> () throws -> Void)] = [ - ("test_absoluteString", test_absoluteString), - ("test_pathComponents", test_pathComponents), - ("test_standardized", test_standardized), - ("test_standardizingPath", test_standardizingPath), - ("test_resolvingSymlinksInPath", test_resolvingSymlinksInPath), - ] - - return tests - } } diff --git a/Tests/Foundation/TestNSURLRequest.swift b/Tests/Foundation/TestNSURLRequest.swift index 1bd2641b1d..49f1afd76c 100644 --- a/Tests/Foundation/TestNSURLRequest.swift +++ b/Tests/Foundation/TestNSURLRequest.swift @@ -8,27 +8,6 @@ // class TestNSURLRequest : XCTestCase { - - static var allTests: [(String, (TestNSURLRequest) -> () throws -> Void)] { - return [ - ("test_construction", test_construction), - ("test_mutableConstruction", test_mutableConstruction), - ("test_headerFields", test_headerFields), - ("test_copy", test_copy), - ("test_mutableCopy_1", test_mutableCopy_1), - ("test_mutableCopy_2", test_mutableCopy_2), - ("test_mutableCopy_3", test_mutableCopy_3), - ("test_hash", test_hash), - ("test_NSCoding_1", test_NSCoding_1), - ("test_NSCoding_2", test_NSCoding_2), - ("test_NSCoding_3", test_NSCoding_3), - ("test_methodNormalization", test_methodNormalization), - ("test_description", test_description), - ("test_invalidHeaderValues", test_invalidHeaderValues), - ("test_validLineFoldedHeaderValues", test_validLineFoldedHeaderValues), - ] - } - let url = URL(string: "http://swift.org")! func test_construction() { diff --git a/Tests/Foundation/TestNSUUID.swift b/Tests/Foundation/TestNSUUID.swift index 47a17fe7ca..22241b2de6 100644 --- a/Tests/Foundation/TestNSUUID.swift +++ b/Tests/Foundation/TestNSUUID.swift @@ -8,17 +8,6 @@ // class TestNSUUID : XCTestCase { - - static var allTests: [(String, (TestNSUUID) -> () throws -> Void)] { - return [ - ("test_Equality", test_Equality), - ("test_InvalidUUID", test_InvalidUUID), - ("test_uuidString", test_uuidString), - ("test_description", test_description), - ("test_NSCoding", test_NSCoding), - ] - } - func test_Equality() { let uuidA = NSUUID(uuidString: "E621E1F8-C36C-495A-93FC-0C247A3E6E5F") let uuidB = NSUUID(uuidString: "e621e1f8-c36c-495a-93fc-0c247a3e6e5f") diff --git a/Tests/Foundation/TestNSValue.swift b/Tests/Foundation/TestNSValue.swift index 40321d0655..da9dea5302 100644 --- a/Tests/Foundation/TestNSValue.swift +++ b/Tests/Foundation/TestNSValue.swift @@ -8,21 +8,6 @@ // class TestNSValue : XCTestCase { - static var allTests: [(String, (TestNSValue) -> () throws -> Void)] { - return [ - ( "test_valueWithLong", test_valueWithLong ), - ( "test_valueWithCGPoint", test_valueWithCGPoint ), - ( "test_valueWithCGSize", test_valueWithCGSize ), - ( "test_valueWithCGRect", test_valueWithCGRect ), - ( "test_valueWithNSEdgeInsets", test_valueWithNSEdgeInsets ), - ( "test_valueWithNSRange", test_valueWithNSRange ), - ( "test_valueWithShortArray", test_valueWithShortArray ), - ( "test_valueWithULongLongArray", test_valueWithULongLongArray ), - ( "test_valueWithCharPtr", test_valueWithULongLongArray ), - ( "test_isEqual", test_isEqual ), - ] - } - func test_valueWithCGPoint() { let point = CGPoint(x: CGFloat(1.0), y: CGFloat(2.0234)) let value = NSValue(point: point) diff --git a/Tests/Foundation/TestNotification.swift b/Tests/Foundation/TestNotification.swift index 00f20303d7..c2d9fe7d58 100644 --- a/Tests/Foundation/TestNotification.swift +++ b/Tests/Foundation/TestNotification.swift @@ -8,14 +8,6 @@ // class TestNotification : XCTestCase { - - static var allTests: [(String, (TestNotification) -> () throws -> Void)] { - return [ - ("test_customReflection", test_customReflection), - ("test_NotificationNameInit", test_NotificationNameInit), - ] - } - func test_customReflection() { let someName = "somenotifname" let targetObject = NSObject() diff --git a/Tests/Foundation/TestNotificationCenter.swift b/Tests/Foundation/TestNotificationCenter.swift index c94b109044..3b74dcf463 100644 --- a/Tests/Foundation/TestNotificationCenter.swift +++ b/Tests/Foundation/TestNotificationCenter.swift @@ -8,21 +8,6 @@ // class TestNotificationCenter : XCTestCase { - static var allTests: [(String, (TestNotificationCenter) -> () throws -> Void)] { - return [ - ("test_defaultCenter", test_defaultCenter), - ("test_postNotification", test_postNotification), - ("test_postNotificationForObject", test_postNotificationForObject), - ("test_postMultipleNotifications", test_postMultipleNotifications), - ("test_addObserverForNilName", test_addObserverForNilName), - ("test_removeObserver", test_removeObserver), - ("test_observeOnPostingQueue", test_observeOnPostingQueue), - ("test_observeOnSpecificQueuePostFromMainQueue", test_observeOnSpecificQueuePostFromMainQueue), - ("test_observeOnSpecificQueuePostFromObservedQueue", test_observeOnSpecificQueuePostFromObservedQueue), - ("test_observeOnSpecificQueuePostFromUnrelatedQueue", test_observeOnSpecificQueuePostFromUnrelatedQueue), - ] - } - func test_defaultCenter() { let defaultCenter1 = NotificationCenter.default let defaultCenter2 = NotificationCenter.default diff --git a/Tests/Foundation/TestNotificationQueue.swift b/Tests/Foundation/TestNotificationQueue.swift index be26af0ef2..7474e84178 100644 --- a/Tests/Foundation/TestNotificationQueue.swift +++ b/Tests/Foundation/TestNotificationQueue.swift @@ -8,21 +8,6 @@ // class TestNotificationQueue : XCTestCase { - static var allTests : [(String, (TestNotificationQueue) -> () throws -> Void)] { - return [ - ("test_defaultQueue", test_defaultQueue), - ("test_postNowToDefaultQueueWithoutCoalescing", test_postNowToDefaultQueueWithoutCoalescing), - ("test_postNowToDefaultQueueWithCoalescing", test_postNowToDefaultQueueWithCoalescing), - ("test_postNowToCustomQueue", test_postNowToCustomQueue), - ("test_postNowForDefaultRunLoopMode", test_postNowForDefaultRunLoopMode), - ("test_notificationQueueLifecycle", test_notificationQueueLifecycle), - ("test_postAsapToDefaultQueue", test_postAsapToDefaultQueue), - ("test_postAsapToDefaultQueueWithCoalescingOnNameAndSender", test_postAsapToDefaultQueueWithCoalescingOnNameAndSender), - ("test_postAsapToDefaultQueueWithCoalescingOnNameOrSender", test_postAsapToDefaultQueueWithCoalescingOnNameOrSender), - ("test_postIdleToDefaultQueue", test_postIdleToDefaultQueue), - ] - } - func test_defaultQueue() { let defaultQueue1 = NotificationQueue.default let defaultQueue2 = NotificationQueue.default diff --git a/Tests/Foundation/TestNumberFormatter.swift b/Tests/Foundation/TestNumberFormatter.swift index 1e8619fc06..5560d643d5 100644 --- a/Tests/Foundation/TestNumberFormatter.swift +++ b/Tests/Foundation/TestNumberFormatter.swift @@ -1203,70 +1203,4 @@ class TestNumberFormatter: XCTestCase { __assert(\.numberStyle, original: .percent, copy: .decimal) __assert(\.format, original: "#,##0%;0%;#,##0%", copy: "#,##0.###;0;#,##0.###") } - - static var allTests: [(String, (TestNumberFormatter) -> () throws -> Void)] { - return [ - ("test_defaultPropertyValues", test_defaultPropertyValues), - ("test_defaultDecimalPropertyValues", test_defaultDecimalPropertyValues), - ("test_defaultCurrencyPropertyValues", test_defaultCurrencyPropertyValues), - ("test_defaultPercentPropertyValues", test_defaultPercentPropertyValues), - ("test_defaultScientificPropertyValues", test_defaultScientificPropertyValues), - ("test_defaultSpelloutPropertyValues", test_defaultSpelloutPropertyValues), - ("test_defaultOrdinalPropertyValues", test_defaultOrdinalPropertyValues), - ("test_defaultCurrencyISOCodePropertyValues", test_defaultCurrencyISOCodePropertyValues), - ("test_defaultCurrencyPluralPropertyValues", test_defaultCurrencyPluralPropertyValues), - ("test_defaultCurrenyAccountingPropertyValues", test_defaultCurrenyAccountingPropertyValues), - ("test_currencyCode", test_currencyCode), - ("test_decimalSeparator", test_decimalSeparator), - ("test_currencyDecimalSeparator", test_currencyDecimalSeparator), - ("test_alwaysShowDecimalSeparator", test_alwaysShowDecimalSeparator), - ("test_groupingSeparator", test_groupingSeparator), - ("test_percentSymbol", test_percentSymbol), - ("test_zeroSymbol", test_zeroSymbol), - ("test_notANumberSymbol", test_notANumberSymbol), - ("test_positiveInfinitySymbol", test_positiveInfinitySymbol), - ("test_minusSignSymbol", test_minusSignSymbol), - ("test_plusSignSymbol", test_plusSignSymbol), - ("test_currencySymbol", test_currencySymbol), - ("test_exponentSymbol", test_exponentSymbol), - ("test_decimalMinimumIntegerDigits", test_decimalMinimumIntegerDigits), - ("test_currencyMinimumIntegerDigits", test_currencyMinimumIntegerDigits), - ("test_percentMinimumIntegerDigits", test_percentMinimumIntegerDigits), - ("test_scientificMinimumIntegerDigits", test_scientificMinimumIntegerDigits), - ("test_spellOutMinimumIntegerDigits", test_spellOutMinimumIntegerDigits), - ("test_ordinalMinimumIntegerDigits", test_ordinalMinimumIntegerDigits), - ("test_currencyPluralMinimumIntegerDigits", test_currencyPluralMinimumIntegerDigits), - ("test_currencyISOCodeMinimumIntegerDigits", test_currencyISOCodeMinimumIntegerDigits), - ("test_currencyAccountingMinimumIntegerDigits", test_currencyAccountingMinimumIntegerDigits), - ("test_maximumIntegerDigits", test_maximumIntegerDigits), - ("test_minimumFractionDigits", test_minimumFractionDigits), - ("test_maximumFractionDigits", test_maximumFractionDigits), - ("test_groupingSize", test_groupingSize), - ("test_secondaryGroupingSize", test_secondaryGroupingSize), - ("test_roundingMode", test_roundingMode), - ("test_roundingIncrement", test_roundingIncrement), - ("test_formatWidth", test_formatWidth), - ("test_formatPosition", test_formatPosition), - ("test_multiplier", test_multiplier), - ("test_positivePrefix", test_positivePrefix), - ("test_positiveSuffix", test_positiveSuffix), - ("test_negativePrefix", test_negativePrefix), - ("test_negativeSuffix", test_negativeSuffix), - ("test_internationalCurrencySymbol", test_internationalCurrencySymbol), - ("test_currencyGroupingSeparator", test_currencyGroupingSeparator), - ("test_lenient", test_lenient), - ("test_minimumSignificantDigits", test_minimumSignificantDigits), - ("test_maximumSignificantDigits", test_maximumSignificantDigits), - ("test_stringFor", test_stringFor), - ("test_numberFrom", test_numberFrom), - ("test_en_US_initialValues", test_en_US_initialValues), - ("test_pt_BR_initialValues", test_pt_BR_initialValues), - ("test_changingLocale", test_changingLocale), - ("test_settingFormat", test_settingFormat), - ("test_usingFormat", test_usingFormat), - ("test_propertyChanges", test_propertyChanges), - ("test_scientificStrings", test_scientificStrings), - ("test_copy", test_copy), - ] - } } diff --git a/Tests/Foundation/TestObjCRuntime.swift b/Tests/Foundation/TestObjCRuntime.swift index c189708ca5..6751405a3f 100644 --- a/Tests/Foundation/TestObjCRuntime.swift +++ b/Tests/Foundation/TestObjCRuntime.swift @@ -26,19 +26,6 @@ struct SwiftStruct {} enum SwiftEnum {} class TestObjCRuntime: XCTestCase { - static var allTests: [(String, (TestObjCRuntime) -> () throws -> Void)] { - var tests: [(String, (TestObjCRuntime) -> () throws -> Void)] = [ - ("testStringFromClass", testStringFromClass), - ("testClassFromString", testClassFromString), - ] - - #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT - tests.append(("testClassesRenamedByAPINotes", testClassesRenamedByAPINotes)) - #endif - - return tests - } - func testStringFromClass() { let name = testBundleName() XCTAssertEqual(NSStringFromClass(NSObject.self), "NSObject") diff --git a/Tests/Foundation/TestOperationQueue.swift b/Tests/Foundation/TestOperationQueue.swift index b3a67c707c..2fe6d6a9b4 100644 --- a/Tests/Foundation/TestOperationQueue.swift +++ b/Tests/Foundation/TestOperationQueue.swift @@ -10,42 +10,6 @@ import Dispatch class TestOperationQueue : XCTestCase { - static var allTests: [(String, (TestOperationQueue) -> () throws -> Void)] { - return [ - ("test_OperationPriorities", test_OperationPriorities), - ("test_OperationCount", test_OperationCount), - ("test_AsyncOperation", test_AsyncOperation), - ("test_SyncOperationWithoutAQueue", test_SyncOperationWithoutAQueue), - ("test_isExecutingWorks", test_isExecutingWorks), - ("test_MainQueueGetter", test_MainQueueGetter), - ("test_CancelOneOperation", test_CancelOneOperation), - ("test_CancelOperationsOfSpecificQueuePriority", test_CancelOperationsOfSpecificQueuePriority), - ("test_CurrentQueueOnMainQueue", test_CurrentQueueOnMainQueue), - ("test_CurrentQueueOnBackgroundQueue", test_CurrentQueueOnBackgroundQueue), - ("test_CurrentQueueOnBackgroundQueueWithSelfCancel", test_CurrentQueueOnBackgroundQueueWithSelfCancel), - ("test_CurrentQueueWithCustomUnderlyingQueue", test_CurrentQueueWithCustomUnderlyingQueue), - ("test_CurrentQueueWithUnderlyingQueueResetToNil", test_CurrentQueueWithUnderlyingQueueResetToNil), - ("test_isSuspended", test_isSuspended), - ("test_OperationDependencyCount", test_OperationDependencyCount), - ("test_CancelDependency", test_CancelDependency), - ("test_Deadlock", test_Deadlock), - ("test_CancelOutOfQueue", test_CancelOutOfQueue), - ("test_CrossQueueDependency", test_CrossQueueDependency), - ("test_CancelWhileSuspended", test_CancelWhileSuspended), - ("test_OperationOrder", test_OperationOrder), - ("test_OperationOrder2", test_OperationOrder2), - ("test_ExecutionOrder", test_ExecutionOrder), - ("test_WaitUntilFinished", test_WaitUntilFinished), - ("test_OperationWaitUntilFinished", test_OperationWaitUntilFinished), - /* ⚠️ */ ("test_CustomOperationReady", testExpectedToFail(test_CustomOperationReady, "Flaky test: https://bugs.swift.org/browse/SR-14657")), - ("test_DependencyCycleBreak", test_DependencyCycleBreak), - ("test_Lifecycle", test_Lifecycle), - ("test_ConcurrentOperations", test_ConcurrentOperations), - ("test_ConcurrentOperationsWithDependenciesAndCompletions", test_ConcurrentOperationsWithDependenciesAndCompletions), - ("test_BlockOperationAddExecutionBlock", test_BlockOperationAddExecutionBlock), - ] - } - func test_OperationCount() { let queue = OperationQueue() let op1 = BlockOperation(block: { Thread.sleep(forTimeInterval: 2) }) @@ -590,7 +554,9 @@ class TestOperationQueue : XCTestCase { XCTAssertEqual(queue1.operationCount, 0) } - func test_CustomOperationReady() { + func test_CustomOperationReady() throws { + throw XCTSkip("Flaky test: https://bugs.swift.org/browse/SR-14657") + #if false class CustomOperation: Operation { private var _isReady = false @@ -624,6 +590,7 @@ class TestOperationQueue : XCTestCase { op1.setIsReady() queue1.waitUntilAllOperationsAreFinished() XCTAssertEqual(queue1.operationCount, 0) + #endif } func test_DependencyCycleBreak() { diff --git a/Tests/Foundation/TestPersonNameComponents.swift b/Tests/Foundation/TestPersonNameComponents.swift index ffbfae6662..c1904a4c15 100644 --- a/Tests/Foundation/TestPersonNameComponents.swift +++ b/Tests/Foundation/TestPersonNameComponents.swift @@ -38,14 +38,6 @@ private func assert(equal: Bool, } class TestPersonNameComponents : XCTestCase { - - static var allTests: [(String, (TestPersonNameComponents) -> () throws -> Void)] { - return [ - ("testCopy", testCopy), - ("testEquality", testEquality), - ] - } - func testCopy() { let original = NSPersonNameComponents() original.givenName = "Maria" diff --git a/Tests/Foundation/TestPipe.swift b/Tests/Foundation/TestPipe.swift index 9906fe4a4f..ef35fdf762 100644 --- a/Tests/Foundation/TestPipe.swift +++ b/Tests/Foundation/TestPipe.swift @@ -18,20 +18,6 @@ class TestPipe: XCTestCase { - - static var allTests: [(String, (TestPipe) -> () throws -> Void)] { - var tests: [(String, (TestPipe) -> () throws -> Void)] = [ - ("test_Pipe", test_Pipe), - ] - -#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT - tests.append(contentsOf: [ - ("test_MaxPipes", test_MaxPipes), - ]) -#endif - return tests - } - #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT func test_MaxPipes() { // Try and create enough pipes to exhaust the process's limits. 1024 is a reasonable diff --git a/Tests/Foundation/TestProcess.swift b/Tests/Foundation/TestProcess.swift index 642456d541..7d34cddaa8 100644 --- a/Tests/Foundation/TestProcess.swift +++ b/Tests/Foundation/TestProcess.swift @@ -389,7 +389,10 @@ class TestProcess : XCTestCase { XCTAssertEqual(process.terminationStatus, SIGTERM) } - func test_interrupt() { + func test_interrupt() throws { + #if os(Windows) + throw XCTSkip("Windows does not have signals") + #else let helper = _SignalHelperRunner() do { try helper.start() @@ -426,6 +429,7 @@ class TestProcess : XCTestCase { XCTAssertEqual(terminationReason, Process.TerminationReason.exit) let status = helper.process.terminationStatus XCTAssertEqual(status, 99) + #endif } func test_terminate() { @@ -442,7 +446,10 @@ class TestProcess : XCTestCase { } - func test_suspend_resume() { + func test_suspend_resume() throws { + #if os(Windows) + throw XCTSkip("Windows does not have signals") + #else let helper = _SignalHelperRunner() do { try helper.start() @@ -494,6 +501,7 @@ class TestProcess : XCTestCase { XCTAssertFalse(helper.process.suspend()) XCTAssertTrue(helper.process.resume()) XCTAssertTrue(helper.process.resume()) + #endif } @@ -563,7 +571,7 @@ class TestProcess : XCTestCase { func test_plutil() throws { let task = Process() - guard let url = testBundle().url(forAuxiliaryExecutable: "plutil") else { + guard let url = testBundle(executable: true).url(forAuxiliaryExecutable: "plutil") else { throw Error.ExternalBinaryNotFound("plutil") } @@ -836,49 +844,6 @@ class TestProcess : XCTestCase { XCTAssertNotEqual(parentPgrp, childPgrp, "Child process group \(parentPgrp) should not equal parent process group \(childPgrp)") } #endif - - static var allTests: [(String, (TestProcess) -> () throws -> Void)] { - var tests = [ - ("test_exit0" , test_exit0), - ("test_exit1" , test_exit1), - ("test_exit100" , test_exit100), - ("test_sleep2", test_sleep2), - ("test_terminationReason_uncaughtSignal", test_terminationReason_uncaughtSignal), - ("test_pipe_stdin", test_pipe_stdin), - ("test_pipe_stdout", test_pipe_stdout), - ("test_pipe_stderr", test_pipe_stderr), - ("test_current_working_directory", test_current_working_directory), - ("test_pipe_stdout_and_stderr_same_pipe", test_pipe_stdout_and_stderr_same_pipe), - ("test_file_stdout", test_file_stdout), - ("test_passthrough_environment", test_passthrough_environment), - ("test_no_environment", test_no_environment), - ("test_custom_environment", test_custom_environment), - ("test_run", test_run), - ("test_preStartEndState", test_preStartEndState), - ("test_terminate", test_terminate), - ("test_redirect_stdin_using_null", test_redirect_stdin_using_null), - ("test_redirect_stdout_using_null", test_redirect_stdout_using_null), - ("test_redirect_stdin_stdout_using_null", test_redirect_stdin_stdout_using_null), - ("test_redirect_stderr_using_null", test_redirect_stderr_using_null), - ("test_redirect_all_using_null", test_redirect_all_using_null), - ("test_redirect_all_using_nil", test_redirect_all_using_nil), - ("test_plutil", test_plutil), - ("test_currentDirectory", test_currentDirectory), - ("test_pipeCloseBeforeLaunch", test_pipeCloseBeforeLaunch), - ("test_multiProcesses", test_multiProcesses), - ] - -#if !os(Windows) - // Windows doesn't have signals - tests += [ - ("test_interrupt", test_interrupt), - ("test_suspend_resume", test_suspend_resume), - ("test_fileDescriptorsAreNotInherited", test_fileDescriptorsAreNotInherited), - ("test_processGroup", test_processGroup), - ] -#endif - return tests - } } private enum Error: Swift.Error { diff --git a/Tests/Foundation/TestProcessInfo.swift b/Tests/Foundation/TestProcessInfo.swift index 60f79e2870..c948d4bb14 100644 --- a/Tests/Foundation/TestProcessInfo.swift +++ b/Tests/Foundation/TestProcessInfo.swift @@ -161,20 +161,4 @@ class TestProcessInfo : XCTestCase { } } #endif - - - static var allTests: [(String, (TestProcessInfo) -> () throws -> Void)] { - var tests: [(String, (TestProcessInfo) -> () throws -> ())] = [ - ("test_operatingSystemVersion", test_operatingSystemVersion ), - ("test_processName", test_processName ), - ("test_globallyUniqueString", test_globallyUniqueString ), - ("test_environment", test_environment), - ] - -#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT && os(Linux) - tests.append(contentsOf: [ ("test_cfquota_parsing", test_cfquota_parsing) ]) -#endif - - return tests - } } diff --git a/Tests/Foundation/TestProgress.swift b/Tests/Foundation/TestProgress.swift index 5709f99d80..ff6992ecea 100644 --- a/Tests/Foundation/TestProgress.swift +++ b/Tests/Foundation/TestProgress.swift @@ -10,26 +10,6 @@ import Dispatch class TestProgress : XCTestCase { - static var allTests: [(String, (TestProgress) -> () throws -> Void)] { - return [ - ("test_totalCompletedChangeAffectsFractionCompleted", test_totalCompletedChangeAffectsFractionCompleted), - ("test_multipleChildren", test_multipleChildren), - ("test_indeterminateChildrenAffectFractionCompleted", test_indeterminateChildrenAffectFractionCompleted), - ("test_indeterminateChildrenAffectFractionCompleted2", test_indeterminateChildrenAffectFractionCompleted2), - ("test_childCompletionFinishesGroups", test_childCompletionFinishesGroups), - ("test_childrenAffectFractionCompleted_explicit", test_childrenAffectFractionCompleted_explicit), - ("test_childrenAffectFractionCompleted_explicit_partial", test_childrenAffectFractionCompleted_explicit_partial), - ("test_childrenAffectFractionCompleted_explicit_child_already_complete", test_childrenAffectFractionCompleted_explicit_child_already_complete), - ("test_grandchildrenAffectFractionCompleted", test_grandchildrenAffectFractionCompleted), - ("test_grandchildrenAffectFractionCompleted_explicit", test_grandchildrenAffectFractionCompleted_explicit), - ("test_mixedExplicitAndImplicitChildren", test_mixedExplicitAndImplicitChildren), - ("test_notReturningNaN", test_notReturningNaN), - ("test_handlers", test_handlers), - ("test_alreadyCancelled", test_alreadyCancelled), - ("test_userInfo", test_userInfo), - ] - } - func test_totalCompletedChangeAffectsFractionCompleted() { let parent = Progress(parent: nil) parent.totalUnitCount = 100 diff --git a/Tests/Foundation/TestProgressFraction.swift b/Tests/Foundation/TestProgressFraction.swift index b3c9f72c38..fbd8bb2192 100644 --- a/Tests/Foundation/TestProgressFraction.swift +++ b/Tests/Foundation/TestProgressFraction.swift @@ -17,20 +17,7 @@ class TestProgressFraction : XCTestCase { -#if !NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT // _ProgressFraction is an internal type - static let allTests: [(String, (TestProgressFraction) -> () throws -> Void)] = [] -#else - static let allTests: [(String, (TestProgressFraction) -> () throws -> Void)] = [ - ("test_equal", test_equal ), - ("test_subtract", test_subtract), - ("test_multiply", test_multiply), - ("test_simplify", test_simplify), - ("test_overflow", test_overflow), - ("test_addOverflow", test_addOverflow), - ("test_andAndSubtractOverflow", test_andAndSubtractOverflow), - ("test_fractionFromDouble", test_fractionFromDouble), - ("test_unnecessaryOverflow", test_unnecessaryOverflow), - ] +#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT // _ProgressFraction is an internal type func test_equal() { let f1 = _ProgressFraction(completed: 5, total: 10) diff --git a/Tests/Foundation/TestPropertyListEncoder.swift b/Tests/Foundation/TestPropertyListEncoder.swift index 96e548a130..475b08c187 100644 --- a/Tests/Foundation/TestPropertyListEncoder.swift +++ b/Tests/Foundation/TestPropertyListEncoder.swift @@ -8,15 +8,6 @@ // class TestPropertyListEncoder : XCTestCase { - static var allTests: [(String, (TestPropertyListEncoder) -> () throws -> Void)] { - return [ - ("test_basicEncodeDecode", test_basicEncodeDecode), - ("test_xmlDecoder", test_xmlDecoder), - ] - } -} - -extension TestPropertyListEncoder { class TestBaseClass: Codable { enum IntEnum: Int, Codable, Equatable { case one = 1 diff --git a/Tests/Foundation/TestPropertyListSerialization.swift b/Tests/Foundation/TestPropertyListSerialization.swift index 37b51c7411..a0fc36892f 100644 --- a/Tests/Foundation/TestPropertyListSerialization.swift +++ b/Tests/Foundation/TestPropertyListSerialization.swift @@ -8,15 +8,6 @@ // class TestPropertyListSerialization : XCTestCase { - static var allTests: [(String, (TestPropertyListSerialization) -> () throws -> Void)] { - return [ - ("test_BasicConstruction", test_BasicConstruction), - ("test_decodeData", test_decodeData), - ("test_decodeStream", test_decodeStream), - ("test_decodeEmptyData", test_decodeEmptyData), - ] - } - func test_BasicConstruction() { let dict = NSMutableDictionary(capacity: 0) // dict["foo"] = "bar" diff --git a/Tests/Foundation/TestRunLoop.swift b/Tests/Foundation/TestRunLoop.swift index 1797374ba9..b51853b482 100644 --- a/Tests/Foundation/TestRunLoop.swift +++ b/Tests/Foundation/TestRunLoop.swift @@ -159,19 +159,6 @@ class TestRunLoop : XCTestCase { XCTAssertTrue(timerFired, "Time should fire already") } - - static var allTests : [(String, (TestRunLoop) -> () throws -> Void)] { - return [ - ("test_constants", test_constants), - ("test_runLoopInit", test_runLoopInit), - ("test_commonModes", test_commonModes), - ("test_runLoopRunMode", test_runLoopRunMode), - ("test_runLoopLimitDate", test_runLoopLimitDate), - ("test_runLoopPoll", test_runLoopPoll), - ("test_addingRemovingPorts", test_addingRemovingPorts), - ("test_mainDispatchQueueCallout", test_mainDispatchQueueCallout) - ] - } } class TestPort: Port { diff --git a/Tests/Foundation/TestScanner.swift b/Tests/Foundation/TestScanner.swift index f5426f3144..ff51a27c23 100644 --- a/Tests/Foundation/TestScanner.swift +++ b/Tests/Foundation/TestScanner.swift @@ -512,21 +512,4 @@ class TestScanner : XCTestCase { // Check a normal scanner has no locale set XCTAssertNil(Scanner(string: "foo").locale) } - - static var allTests: [(String, (TestScanner) -> () throws -> Void)] { - return [ - ("testScanFloatingPoint", testScanFloatingPoint), - ("testHexRepresentation", testHexRepresentation), - ("testHexFloatingPoint", testHexFloatingPoint), - ("testUInt64", testUInt64), - ("testInt64", testInt64), - ("testInt32", testInt32), - ("testScanCharacter", testScanCharacter), - ("testScanString", testScanString), - ("testScanUpToString", testScanUpToString), - ("testScanCharactersFromSet", testScanCharactersFromSet), - ("testScanUpToCharactersFromSet", testScanUpToCharactersFromSet), - ("testLocalizedScanner", testLocalizedScanner), - ] - } } diff --git a/Tests/Foundation/TestSocketPort.swift b/Tests/Foundation/TestSocketPort.swift index 32366ea510..296a3dd21b 100644 --- a/Tests/Foundation/TestSocketPort.swift +++ b/Tests/Foundation/TestSocketPort.swift @@ -105,12 +105,4 @@ class TestSocketPort : XCTestCase { waitForExpectations(timeout: 5.5) } } - - static var allTests: [(String, (TestSocketPort) -> () throws -> Void)] { - return [ - ("testRemoteSocketPortsAreUniqued", testRemoteSocketPortsAreUniqued), - ("testInitPicksATCPPort", testInitPicksATCPPort), - ("testSendingOneMessageRemoteToLocal", testSendingOneMessageRemoteToLocal), - ] - } } diff --git a/Tests/Foundation/TestStream.swift b/Tests/Foundation/TestStream.swift index d1c97d9644..c7ce024502 100644 --- a/Tests/Foundation/TestStream.swift +++ b/Tests/Foundation/TestStream.swift @@ -264,27 +264,6 @@ class TestStream : XCTestCase { XCTAssertEqual(.error, outputStream!.streamStatus) } - static var allTests: [(String, (TestStream) -> () throws -> Void)] { - var tests: [(String, (TestStream) -> () throws -> Void)] = [ - ("test_InputStreamWithData", test_InputStreamWithData), - ("test_InputStreamWithUrl", test_InputStreamWithUrl), - ("test_InputStreamWithFile", test_InputStreamWithFile), - ("test_InputStreamHasBytesAvailable", test_InputStreamHasBytesAvailable), - ("test_InputStreamInvalidPath", test_InputStreamInvalidPath), - ("test_outputStreamCreationToFile", test_outputStreamCreationToFile), - ("test_outputStreamCreationToBuffer", test_outputStreamCreationToBuffer), - ("test_outputStreamCreationWithUrl", test_outputStreamCreationWithUrl), - ("test_outputStreamCreationToMemory", test_outputStreamCreationToMemory), - ("test_outputStreamHasSpaceAvailable", test_outputStreamHasSpaceAvailable), - ("test_ouputStreamWithInvalidPath", test_ouputStreamWithInvalidPath), - ] - - #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT - tests.append(("test_InputStreamSeekToPosition", test_InputStreamSeekToPosition)) - #endif - return tests - } - private func createTestFile(_ path: String, _contents: Data) -> String? { let tempDir = NSTemporaryDirectory() + "TestFoundation_Playground_" + NSUUID().uuidString + "/" do { diff --git a/Tests/Foundation/TestThread.swift b/Tests/Foundation/TestThread.swift index 3e25ec1e79..1cdbcb9b75 100644 --- a/Tests/Foundation/TestThread.swift +++ b/Tests/Foundation/TestThread.swift @@ -101,19 +101,29 @@ class TestThread : XCTestCase { XCTAssertTrue(ok, "NSCondition wait timed out") } - func test_callStackSymbols() { + func test_callStackSymbols() throws { + #if os(Android) || os(OpenBSD) + throw XCTSkip("Android/OpenBSD doesn't support backtraces at the moment.") + #else let symbols = Thread.callStackSymbols XCTAssertTrue(symbols.count > 0) XCTAssertTrue(symbols.count <= 128) + #endif } - func test_callStackReturnAddresses() { + func test_callStackReturnAddresses() throws { + #if os(Android) || os(OpenBSD) + throw XCTSkip("Android/OpenBSD doesn't support backtraces at the moment.") + #else let addresses = Thread.callStackReturnAddresses XCTAssertTrue(addresses.count > 0) XCTAssertTrue(addresses.count <= 128) + #endif } - func test_sleepForTimeInterval() { + func test_sleepForTimeInterval() throws { + throw XCTSkip("https://bugs.swift.org/browse/SR-15817") + #if false let measureOversleep = { (timeInterval: TimeInterval) -> TimeInterval in let start = Date() Thread.sleep(forTimeInterval: timeInterval) @@ -134,9 +144,12 @@ class TestThread : XCTestCase { let oversleep3 = measureOversleep(TimeInterval(1.0)) XCTAssertTrue(allowedOversleepRange.contains(oversleep3), "Oversleep \(oversleep3) is not in expected range \(allowedOversleepRange)") + #endif } - func test_sleepUntilDate() { + func test_sleepUntilDate() throws { + throw XCTSkip("https://bugs.swift.org/browse/SR-15489") + #if false let measureOversleep = { (date: Date) -> TimeInterval in Thread.sleep(until: date) return -date.timeIntervalSinceNow @@ -152,30 +165,6 @@ class TestThread : XCTestCase { let oversleep3 = measureOversleep(Date(timeIntervalSinceNow: 1.0)) XCTAssertTrue(allowedOversleepRange.contains(oversleep3), "Oversleep \(oversleep3) is not in expected range \(allowedOversleepRange)") - } - - static var allTests: [(String, (TestThread) -> () throws -> Void)] { - let tests: [(String, (TestThread) -> () throws -> Void)] = [ - ("test_currentThread", test_currentThread), - ("test_threadStart", test_threadStart), - ("test_mainThread", test_mainThread), - ("test_callStackSymbols", testExpectedToFailOnOpenBSD( - testExpectedToFailOnAndroid( - test_callStackSymbols, - "Android doesn't support backtraces at the moment."), - "And not currently on OpenBSD.")), - ("test_callStackReturnAddresses", testExpectedToFailOnOpenBSD( - testExpectedToFailOnAndroid( - test_callStackReturnAddresses, - "Android doesn't support backtraces at the moment."), - "And not currently on OpenBSD.")), - ("test_sleepForTimeInterval", - testExpectedToFail(test_sleepForTimeInterval, "https://bugs.swift.org/browse/SR-15817")), - ("test_sleepUntilDate", - testExpectedToFail(test_sleepUntilDate, "https://bugs.swift.org/browse/SR-15489")), - ("test_threadName", test_threadName), - ] - - return tests + #endif } } diff --git a/Tests/Foundation/TestTimeZone.swift b/Tests/Foundation/TestTimeZone.swift index 58ef80b109..0fd100bfc7 100644 --- a/Tests/Foundation/TestTimeZone.swift +++ b/Tests/Foundation/TestTimeZone.swift @@ -31,7 +31,9 @@ class TestTimeZone: XCTestCase { XCTAssertEqual(abbreviation1, abbreviation2, "\(abbreviation1 as Optional) should be equal to \(abbreviation2 as Optional)") } - func test_abbreviationDictionary() { + func test_abbreviationDictionary() throws { + throw XCTSkip("Disabled because `CFTimeZoneSetAbbreviationDictionary()` attempts to release non-CF objects while removing values from `__CFTimeZoneCache`") + #if false let oldDictionary = TimeZone.abbreviationDictionary let newDictionary = [ "UTC": "UTC", @@ -44,6 +46,7 @@ class TestTimeZone: XCTestCase { XCTAssertEqual(TimeZone.abbreviationDictionary, newDictionary) TimeZone.abbreviationDictionary = oldDictionary XCTAssertEqual(TimeZone.abbreviationDictionary, oldDictionary) + #endif } func test_changingDefaultTimeZone() { @@ -264,35 +267,4 @@ class TestTimeZone: XCTestCase { XCTAssertFalse(eukv.isDaylightSavingTime(for: dateNoDST)) XCTAssertTrue(eukv.isDaylightSavingTime(for: dateDST)) } - - static var allTests: [(String, (TestTimeZone) -> () throws -> Void)] { - var tests: [(String, (TestTimeZone) -> () throws -> Void)] = [ - ("test_abbreviation", test_abbreviation), - - // Disabled because `CFTimeZoneSetAbbreviationDictionary()` attempts - // to release non-CF objects while removing values from - // `__CFTimeZoneCache` - // ("test_abbreviationDictionary", test_abbreviationDictionary), - - ("test_changingDefaultTimeZone", test_changingDefaultTimeZone), - ("test_computedPropertiesMatchMethodReturnValues", test_computedPropertiesMatchMethodReturnValues), - ("test_initializingTimeZoneWithOffset", test_initializingTimeZoneWithOffset), - ("test_initializingTimeZoneWithAbbreviation", test_initializingTimeZoneWithAbbreviation), - ("test_localizedName", test_localizedName), - ("test_customMirror", test_tz_customMirror), - ("test_knownTimeZones", test_knownTimeZones), - ("test_systemTimeZoneName", test_systemTimeZoneName), - ("test_autoupdatingTimeZone", test_autoupdatingTimeZone), - ("test_nextDaylightSavingTimeTransition", test_nextDaylightSavingTimeTransition), - ("test_isDaylightSavingTime", test_isDaylightSavingTime), - ] - - #if !os(Windows) - tests.append(contentsOf: [ - ("test_systemTimeZoneUsesSystemTime", test_systemTimeZoneUsesSystemTime), - ]) - #endif - - return tests - } } diff --git a/Tests/Foundation/TestTimer.swift b/Tests/Foundation/TestTimer.swift index bb6d50b667..8aa23be8aa 100644 --- a/Tests/Foundation/TestTimer.swift +++ b/Tests/Foundation/TestTimer.swift @@ -8,15 +8,6 @@ // class TestTimer : XCTestCase { - static var allTests : [(String, (TestTimer) -> () throws -> Void)] { - return [ - ("test_timerInit", test_timerInit), - ("test_timerTickOnce", test_timerTickOnce), - ("test_timerRepeats", test_timerRepeats), - ("test_timerInvalidate", test_timerInvalidate), - ] - } - func test_timerInit() { let fireDate = Date() let timeInterval: TimeInterval = 0.3 diff --git a/Tests/Foundation/TestURL.swift b/Tests/Foundation/TestURL.swift index b0d90812d8..f4d24543a7 100644 --- a/Tests/Foundation/TestURL.swift +++ b/Tests/Foundation/TestURL.swift @@ -591,20 +591,28 @@ class TestURL : XCTestCase { XCTAssertEqual(result, URL(fileURLWithPath: writableTestDirectoryURL.path + "/destination").resolvingSymlinksInPath()) } - func test_resolvingSymlinksInPathShouldRemovePrivatePrefix() { + func test_resolvingSymlinksInPathShouldRemovePrivatePrefix() throws { + #if !canImport(Darwin) + throw XCTSkip("This test is only supported on Darwin") + #else // NOTE: this test only works on Darwin, since the code that removes // /private relies on /private/tmp existing. let url = URL(fileURLWithPath: "/private/tmp") let result = url.resolvingSymlinksInPath() XCTAssertEqual(result, URL(fileURLWithPath: "/tmp")) + #endif } - func test_resolvingSymlinksInPathShouldNotRemovePrivatePrefixIfOnlyComponent() { + func test_resolvingSymlinksInPathShouldNotRemovePrivatePrefixIfOnlyComponent() throws { + #if !canImport(Darwin) + throw XCTSkip("This test is only supported on Darwin") + #else // NOTE: this test only works on Darwin, since only there /tmp is // symlinked to /private/tmp. let url = URL(fileURLWithPath: "/tmp/..") let result = url.resolvingSymlinksInPath() XCTAssertEqual(result, URL(fileURLWithPath: "/private")) + #endif } func test_resolvingSymlinksInPathShouldNotChangeNonFileURLs() throws { @@ -791,46 +799,4 @@ class TestURL : XCTestCase { super.tearDown() } - - static var allTests: [(String, (TestURL) -> () throws -> Void)] { - var tests: [(String, (TestURL) -> () throws -> Void)] = [ - ("test_URLStrings", test_URLStrings), - ("test_fileURLWithPath_relativeTo", test_fileURLWithPath_relativeTo ), - ("test_relativeFilePath", test_relativeFilePath), - // TODO: these tests fail on linux, more investigation is needed - ("test_fileURLWithPath", test_fileURLWithPath), - ("test_fileURLWithPath_isDirectory", test_fileURLWithPath_isDirectory), - ("test_URLByResolvingSymlinksInPathShouldRemoveDuplicatedPathSeparators", test_URLByResolvingSymlinksInPathShouldRemoveDuplicatedPathSeparators), - ("test_URLByResolvingSymlinksInPathShouldRemoveSingleDotsBetweenSeparators", test_URLByResolvingSymlinksInPathShouldRemoveSingleDotsBetweenSeparators), - ("test_URLByResolvingSymlinksInPathShouldCompressDoubleDotsBetweenSeparators", test_URLByResolvingSymlinksInPathShouldCompressDoubleDotsBetweenSeparators), - ("test_URLByResolvingSymlinksInPathShouldUseTheCurrentDirectory", test_URLByResolvingSymlinksInPathShouldUseTheCurrentDirectory), - ("test_resolvingSymlinksInPathShouldAppendTrailingSlashWhenExistingDirectory", test_resolvingSymlinksInPathShouldAppendTrailingSlashWhenExistingDirectory), - ("test_resolvingSymlinksInPathShouldResolveSymlinks", test_resolvingSymlinksInPathShouldResolveSymlinks), - ("test_resolvingSymlinksInPathShouldNotChangeNonFileURLs", test_resolvingSymlinksInPathShouldNotChangeNonFileURLs), - ("test_resolvingSymlinksInPathShouldNotChangePathlessURLs", test_resolvingSymlinksInPathShouldNotChangePathlessURLs), - ("test_reachable", test_reachable), - ("test_copy", test_copy), - ("test_itemNSCoding", test_itemNSCoding), - ("test_dataRepresentation", test_dataRepresentation), - ("test_description", test_description), - ("test_URLResourceValues", testExpectedToFail(test_URLResourceValues, - "test_URLResourceValues: Except for .nameKey, we have no testable attributes that work in the environment Swift CI uses, for now. SR-XXXX")), - ] - -#if os(Windows) - tests.append(contentsOf: [ - ("test_WindowsPathSeparator", test_WindowsPathSeparator), - ("test_WindowsPathSeparator2", test_WindowsPathSeparator2), - ]) -#endif - -#if canImport(Darwin) - tests += [ - ("test_resolvingSymlinksInPathShouldRemovePrivatePrefix", test_resolvingSymlinksInPathShouldRemovePrivatePrefix), - ("test_resolvingSymlinksInPathShouldNotRemovePrivatePrefixIfOnlyComponent", test_resolvingSymlinksInPathShouldNotRemovePrivatePrefixIfOnlyComponent), - ] -#endif - - return tests - } } diff --git a/Tests/Foundation/TestURLCache.swift b/Tests/Foundation/TestURLCache.swift index f5f2164fa4..b2db7dbde7 100644 --- a/Tests/Foundation/TestURLCache.swift +++ b/Tests/Foundation/TestURLCache.swift @@ -237,23 +237,6 @@ class TestURLCache : XCTestCase { // ----- - static var allTests: [(String, (TestURLCache) -> () throws -> Void)] { - return [ - ("testStorageRoundtrip", testStorageRoundtrip), - ("testStoragePolicy", testStoragePolicy), - ("testNoDiskUsageIfDisabled", testNoDiskUsageIfDisabled), - ("testShrinkingDiskCapacityEvictsItems", testShrinkingDiskCapacityEvictsItems), - ("testNoMemoryUsageIfDisabled", testNoMemoryUsageIfDisabled), - ("testShrinkingMemoryCapacityEvictsItems", testShrinkingMemoryCapacityEvictsItems), - ("testRemovingOne", testRemovingOne), - ("testRemovingAll", testRemovingAll), - ("testRemovingSince", testRemovingSince), - ("testStoringTwiceOnlyHasOneEntry", testStoringTwiceOnlyHasOneEntry), - ] - } - - // ----- - func cache(memoryCapacity: Int = 0, diskCapacity: Int = 0) throws -> URLCache { try FileManager.default.createDirectory(at: writableTestDirectoryURL, withIntermediateDirectories: true) return URLCache(memoryCapacity: memoryCapacity, diskCapacity: diskCapacity, diskPath: writableTestDirectoryURL.path) diff --git a/Tests/Foundation/TestURLComponents.swift b/Tests/Foundation/TestURLComponents.swift index 9aa86eea43..c781ac315e 100644 --- a/Tests/Foundation/TestURLComponents.swift +++ b/Tests/Foundation/TestURLComponents.swift @@ -278,20 +278,4 @@ class TestURLComponents: XCTestCase { let c6 = URLComponents(string: "http://swift.org:80/foo/b%20r") XCTAssertEqual(c6?.percentEncodedPath, "/foo/b%20r") } - - static var allTests: [(String, (TestURLComponents) -> () throws -> Void)] { - return [ - ("test_queryItems", test_queryItems), - ("test_percentEncodedQueryItems", test_percentEncodedQueryItems), - ("test_string", test_string), - ("test_port", test_portSetter), - ("test_url", test_url), - ("test_copy", test_copy), - ("test_hash", test_hash), - ("test_createURLWithComponents", test_createURLWithComponents), - ("test_createURLWithComponentsPercentEncoded", test_createURLWithComponentsPercentEncoded), - ("test_path", test_path), - ("test_percentEncodedPath", test_percentEncodedPath), - ] - } } diff --git a/Tests/Foundation/TestURLCredential.swift b/Tests/Foundation/TestURLCredential.swift index eb33366996..c3269f83f8 100644 --- a/Tests/Foundation/TestURLCredential.swift +++ b/Tests/Foundation/TestURLCredential.swift @@ -8,15 +8,6 @@ // class TestURLCredential : XCTestCase { - - static var allTests: [(String, (TestURLCredential) -> () throws -> Void)] { - return [ - ("test_construction", test_construction), - ("test_copy", test_copy), - ("test_NSCoding", test_NSCoding) - ] - } - func test_construction() { let credential = URLCredential(user: "swiftUser", password: "swiftPassword", persistence: .forSession) XCTAssertEqual(credential.user, "swiftUser") diff --git a/Tests/Foundation/TestURLCredentialStorage.swift b/Tests/Foundation/TestURLCredentialStorage.swift index 36705458d7..c100006b3b 100644 --- a/Tests/Foundation/TestURLCredentialStorage.swift +++ b/Tests/Foundation/TestURLCredentialStorage.swift @@ -527,46 +527,4 @@ class TestURLCredentialStorage : XCTestCase { storage.remove(credential, for: space) } - - - static var allTests: [(String, (TestURLCredentialStorage) -> () throws -> Void)] { - var tests: [(String, (TestURLCredentialStorage) -> () throws -> Void)] = [ - ("test_storageStartsEmpty", test_storageStartsEmpty), - ("test_sessionCredentialGetsReturnedForTheRightProtectionSpace", test_sessionCredentialGetsReturnedForTheRightProtectionSpace), - ("test_sessionCredentialDoesNotGetReturnedForTheWrongProtectionSpace", test_sessionCredentialDoesNotGetReturnedForTheWrongProtectionSpace), - ("test_sessionCredentialBecomesDefaultForProtectionSpace", test_sessionCredentialBecomesDefaultForProtectionSpace), - ("test_sessionCredentialGetsReturnedAsDefaultIfSetAsDefaultForSpace", test_sessionCredentialGetsReturnedAsDefaultIfSetAsDefaultForSpace), - ("test_sessionCredentialGetsReturnedIfSetAsDefaultForSpace", test_sessionCredentialGetsReturnedIfSetAsDefaultForSpace), - ("test_sessionCredentialDoesNotGetReturnedIfSetAsDefaultForOtherSpace", test_sessionCredentialDoesNotGetReturnedIfSetAsDefaultForOtherSpace), - ("test_sessionCredentialDoesNotGetReturnedWhenNotAddedAsDefault", test_sessionCredentialDoesNotGetReturnedWhenNotAddedAsDefault), - ("test_sessionCredentialCanBeRemovedFromSpace", test_sessionCredentialCanBeRemovedFromSpace), - ("test_sessionDefaultCredentialCanBeRemovedFromSpace", test_sessionDefaultCredentialCanBeRemovedFromSpace), - ("test_storageCanRemoveArbitraryCredentialWithoutFailing", test_storageCanRemoveArbitraryCredentialWithoutFailing), - ("test_storageWillNotSaveCredentialsWithoutPersistence", test_storageWillNotSaveCredentialsWithoutPersistence), - ("test_storageWillSendNotificationWhenAddingNewCredential", test_storageWillSendNotificationWhenAddingNewCredential), - ("test_storageWillSendNotificationWhenAddingExistingCredentialToDifferentSpace", test_storageWillSendNotificationWhenAddingExistingCredentialToDifferentSpace), - ("test_storageWillNotSendNotificationWhenAddingExistingCredential", test_storageWillNotSendNotificationWhenAddingExistingCredential), - ("test_storageWillSendNotificationWhenAddingNewDefaultCredential", test_storageWillSendNotificationWhenAddingNewDefaultCredential), - ("test_storageWillNotSendNotificationWhenAddingExistingDefaultCredential", test_storageWillNotSendNotificationWhenAddingExistingDefaultCredential), - ("test_storageWillSendNotificationWhenAddingDifferentDefaultCredential", test_storageWillSendNotificationWhenAddingDifferentDefaultCredential), - ("test_storageWillSendNotificationWhenRemovingExistingCredential", test_storageWillSendNotificationWhenRemovingExistingCredential), - ("test_storageWillNotSendNotificationWhenRemovingExistingCredentialInOtherSpace", test_storageWillNotSendNotificationWhenRemovingExistingCredentialInOtherSpace), - ("test_storageWillSendNotificationWhenRemovingDefaultNotification", test_storageWillSendNotificationWhenRemovingDefaultNotification), - ("test_taskBasedGetCredentialsReturnsCredentialsForSpace", test_taskBasedGetCredentialsReturnsCredentialsForSpace), - ("test_taskBasedSetCredentialStoresGivenCredentials", test_taskBasedSetCredentialStoresGivenCredentials), - ("test_taskBasedRemoveCredentialDeletesCredentialsFromSpace", test_taskBasedRemoveCredentialDeletesCredentialsFromSpace), - ("test_taskBasedGetDefaultCredentialReturnsTheDefaultCredential", test_taskBasedGetDefaultCredentialReturnsTheDefaultCredential), - ("test_taskBasedSetDefaultCredentialStoresTheDefaultCredential", test_taskBasedSetDefaultCredentialStoresTheDefaultCredential), - ] - - #if NS_FOUNDATION_NETWORKING_URLCREDENTIALSTORAGE_SYNCHRONIZABLE_ALLOWED - // See these test methods for why they aren't added by default. - tests.append(contentsOf: [ - ("test_synchronizableCredentialCanBeRemovedWithRightOptions", test_synchronizableCredentialCanBeRemovedWithRightOptions), - ("test_synchronizableCredentialWillNotBeRemovedWithoutRightOptions", test_synchronizableCredentialWillNotBeRemovedWithoutRightOptions), - ]) - #endif - - return tests - } } diff --git a/Tests/Foundation/TestURLProtectionSpace.swift b/Tests/Foundation/TestURLProtectionSpace.swift index 88c4c1ecff..9ffbe11fae 100644 --- a/Tests/Foundation/TestURLProtectionSpace.swift +++ b/Tests/Foundation/TestURLProtectionSpace.swift @@ -18,22 +18,6 @@ #endif class TestURLProtectionSpace : XCTestCase { - - static var allTests: [(String, (TestURLProtectionSpace) -> () throws -> Void)] { - var tests: [(String, (TestURLProtectionSpace) -> () throws -> ())] = [ - ("test_description", test_description), - ] - - #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT - tests.append(contentsOf: [ - ("test_createWithHTTPURLresponse", test_createWithHTTPURLresponse), - ("test_challenge", test_challenge), - ]) - #endif - - return tests - } - func test_description() { var space = URLProtectionSpace( host: "apple.com", diff --git a/Tests/Foundation/TestURLProtocol.swift b/Tests/Foundation/TestURLProtocol.swift index c1543d385a..ef1246b4c5 100644 --- a/Tests/Foundation/TestURLProtocol.swift +++ b/Tests/Foundation/TestURLProtocol.swift @@ -8,18 +8,6 @@ // class TestURLProtocol : LoopbackServerTest { - - static var allTests: [(String, (TestURLProtocol) -> () throws -> Void)] { - return [ - ("test_interceptResponse", test_interceptResponse), - ("test_interceptRequest", test_interceptRequest), - ("test_multipleCustomProtocols", test_multipleCustomProtocols), - ("test_customProtocolResponseWithDelegate", test_customProtocolResponseWithDelegate), - ("test_customProtocolSetDataInResponseWithDelegate", test_customProtocolSetDataInResponseWithDelegate), - ("test_finishLoadingWithNoResponse", test_finishLoadingWithNoResponse), - ] - } - func test_interceptResponse() { let urlString = "http://127.0.0.1:\(TestURLProtocol.serverPort)/USA" let url = URL(string: urlString)! diff --git a/Tests/Foundation/TestURLRequest.swift b/Tests/Foundation/TestURLRequest.swift index af74ed9456..4189ed175a 100644 --- a/Tests/Foundation/TestURLRequest.swift +++ b/Tests/Foundation/TestURLRequest.swift @@ -8,25 +8,6 @@ // class TestURLRequest : XCTestCase { - - static var allTests: [(String, (TestURLRequest) -> () throws -> Void)] { - return [ - ("test_construction", test_construction), - ("test_mutableConstruction", test_mutableConstruction), - ("test_headerFields", test_headerFields), - ("test_copy", test_copy), - ("test_mutableCopy_1", test_mutableCopy_1), - ("test_mutableCopy_2", test_mutableCopy_2), - ("test_mutableCopy_3", test_mutableCopy_3), - ("test_hash", test_hash), - ("test_methodNormalization", test_methodNormalization), - ("test_description", test_description), - ("test_relativeURL", test_relativeURL), - ("test_invalidHeaderValues", test_invalidHeaderValues), - ("test_validLineFoldedHeaderValues", test_validLineFoldedHeaderValues), - ] - } - let url = URL(string: "http://swift.org")! func test_construction() { diff --git a/Tests/Foundation/TestURLResponse.swift b/Tests/Foundation/TestURLResponse.swift index d3310355c2..d0d5b69d26 100644 --- a/Tests/Foundation/TestURLResponse.swift +++ b/Tests/Foundation/TestURLResponse.swift @@ -176,25 +176,4 @@ class TestURLResponse : XCTestCase { XCTAssertNotEqual(response1.hash, response3.hash) XCTAssertNotEqual(response2.hash, response3.hash) } - - static var allTests: [(String, (TestURLResponse) -> () throws -> Void)] { - return [ - ("test_URL", test_URL), - ("test_MIMEType", test_MIMEType), - ("test_ExpectedContentLength", test_ExpectedContentLength), - ("test_TextEncodingName", test_TextEncodingName), - ("test_suggestedFilename_1", test_suggestedFilename_1), - ("test_suggestedFilename_2", test_suggestedFilename_2), - ("test_suggestedFilename_3", test_suggestedFilename_3), - ("test_copywithzone", test_copyWithZone), - ("test_NSCoding", test_NSCoding), - ("test_equalWithTheSameInstance", test_equalWithTheSameInstance), - ("test_equalWithUnrelatedObject", test_equalWithUnrelatedObject), - ("test_equalCheckingURL", test_equalCheckingURL), - ("test_equalCheckingMimeType", test_equalCheckingMimeType), - ("test_equalCheckingExpectedContentLength", test_equalCheckingExpectedContentLength), - ("test_equalCheckingTextEncodingName", test_equalCheckingTextEncodingName), - ("test_hash", test_hash), - ] - } } diff --git a/Tests/Foundation/TestURLSession.swift b/Tests/Foundation/TestURLSession.swift index 8c04855589..76e0d11b9a 100644 --- a/Tests/Foundation/TestURLSession.swift +++ b/Tests/Foundation/TestURLSession.swift @@ -94,6 +94,8 @@ class TestURLSession: LoopbackServerTest { } func test_dataTaskWithHttpInputStream() throws { + throw XCTSkip("This test is disabled (Flaky test)") + #if false let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/jsonBody" let url = try XCTUnwrap(URL(string: urlString)) @@ -181,6 +183,7 @@ class TestURLSession: LoopbackServerTest { XCTAssertEqual(delegate.callbacks, callBacks) } } + #endif } func test_dataTaskWithHTTPBodyRedirect() { @@ -388,6 +391,8 @@ class TestURLSession: LoopbackServerTest { } func test_suspendResumeTask() throws { + throw XCTSkip("This test is disabled (occasionally breaks)") + #if false let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/get" let url = try XCTUnwrap(URL(string: urlString)) @@ -422,6 +427,7 @@ class TestURLSession: LoopbackServerTest { XCTAssertEqual(task.state, .running) waitForExpectations(timeout: 3) + #endif } @@ -858,6 +864,8 @@ class TestURLSession: LoopbackServerTest { } func test_httpRedirectionChainInheritsTimeoutInterval() throws { + throw XCTSkip("This test is disabled (https://bugs.swift.org/browse/SR-14433)") + #if false let redirectCount = 4 let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/redirect/\(redirectCount)" let url = try XCTUnwrap(URL(string: urlString)) @@ -882,9 +890,12 @@ class TestURLSession: LoopbackServerTest { let httpResponse = delegate.response as? HTTPURLResponse XCTAssertEqual(httpResponse?.statusCode, 200, ".statusCode for \(method)") } + #endif } func test_httpRedirectionExceededMaxRedirects() throws { + throw XCTSkip("This test is disabled (https://bugs.swift.org/browse/SR-14433)") + #if false let expectedMaxRedirects = 20 let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/redirect/99" let url = try XCTUnwrap(URL(string: urlString)) @@ -924,6 +935,7 @@ class TestURLSession: LoopbackServerTest { XCTAssertEqual(lastResponse?.statusCode, 302) XCTAssertEqual(lastRequest?.url, exceededCountUrl) } + #endif } func test_willPerformRedirect() throws { @@ -980,7 +992,9 @@ class TestURLSession: LoopbackServerTest { } } - func test_http0_9SimpleResponses() { + func test_http0_9SimpleResponses() throws { + throw XCTSkip("This test is disabled (breaks on Ubuntu 20.04)") + #if false for brokenCity in ["Pompeii", "Sodom"] { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/LandOfTheLostCities/\(brokenCity)" let url = URL(string: urlString)! @@ -1005,6 +1019,7 @@ class TestURLSession: LoopbackServerTest { task.resume() waitForExpectations(timeout: 12) } + #endif } func test_outOfRangeButCorrectlyFormattedHTTPCode() { @@ -1168,6 +1183,8 @@ class TestURLSession: LoopbackServerTest { } func test_requestWithNonEmptyBody() throws { + throw XCTSkip("This test is disabled (started failing for no readily available reason)") + #if false let bodyData = try XCTUnwrap("This is a request body".data(using: .utf8)) for method in httpMethods { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/" + method.lowercased() @@ -1244,10 +1261,13 @@ class TestURLSession: LoopbackServerTest { XCTAssertEqual(delegate.callbacks, callBacks) } } + #endif } func test_concurrentRequests() throws { + throw XCTSkip("This test is disabled (Intermittent SEGFAULT: rdar://84519512)") + #if false let tasks = 10 let syncQ = dispatchQueueMake("test_dataTaskWithURL.syncQ") var dataTasks: [DataTask] = [] @@ -1276,6 +1296,7 @@ class TestURLSession: LoopbackServerTest { XCTAssertFalse(task.error) XCTAssertEqual(task.capital, "Kathmandu", "test_dataTaskWithURLRequest returned an unexpected result") } + #endif } func emptyCookieStorage(storage: HTTPCookieStorage?) { @@ -1612,6 +1633,8 @@ class TestURLSession: LoopbackServerTest { } func test_getAllTasks() throws { + throw XCTSkip("This test is disabled (this causes later ones to crash)") + #if false let expect = expectation(description: "Tasks URLSession.getAllTasks") let session = URLSession(configuration: .default) @@ -1657,9 +1680,12 @@ class TestURLSession: LoopbackServerTest { } waitForExpectations(timeout: 20) + #endif } func test_getTasksWithCompletion() throws { + throw XCTSkip("This test is disabled (Flaky tests)") + #if false let expect = expectation(description: "Test URLSession.getTasksWithCompletion") let session = URLSession(configuration: .default) @@ -1705,9 +1731,12 @@ class TestURLSession: LoopbackServerTest { } waitForExpectations(timeout: 20) + #endif } func test_noDoubleCallbackWhenCancellingAndProtocolFailsFast() throws { + throw XCTSkip("This test is disabled (Crashes nondeterministically: https://bugs.swift.org/browse/SR-11310)") + #if false let urlString = "failfast://bogus" var callbackCount = 0 let callback1 = expectation(description: "Callback call #1") @@ -1734,9 +1763,12 @@ class TestURLSession: LoopbackServerTest { task.resume() session.invalidateAndCancel() waitForExpectations(timeout: 1) + #endif } func test_cancelledTasksCannotBeResumed() throws { + throw XCTSkip("This test is disabled (breaks on Ubuntu 18.04)") + #if false let url = try XCTUnwrap(URL(string: "http://127.0.0.1:\(TestURLSession.serverPort)/Nepal")) let session = URLSession(configuration: .default, delegate: nil, delegateQueue: nil) let task = session.dataTask(with: url) @@ -1751,8 +1783,11 @@ class TestURLSession: LoopbackServerTest { } waitForExpectations(timeout: 1) + #endif } - func test_invalidResumeDataForDownloadTask() { + func test_invalidResumeDataForDownloadTask() throws { + throw XCTSkip("This test is disabled (Crashes nondeterministically: https://bugs.swift.org/browse/SR-11353)") + #if false let done = expectation(description: "Invalid resume data for download task (with completion block)") URLSession.shared.downloadTask(withResumeData: Data()) { (url, response, error) in XCTAssertNil(url) @@ -1774,10 +1809,12 @@ class TestURLSession: LoopbackServerTest { }) } waitForExpectations(timeout: 20) + #endif } func test_simpleUploadWithDelegateProvidingInputStream() throws { - + throw XCTSkip("This test is disabled (Times out frequently: https://bugs.swift.org/browse/SR-11343)") + #if false let fileData = Data(count: 16 * 1024) for method in httpMethods { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/" + method.lowercased() @@ -1855,11 +1892,12 @@ class TestURLSession: LoopbackServerTest { XCTAssertEqual(delegate.callbacks.count, callBacks.count, "Callback count for \(method)") XCTAssertEqual(delegate.callbacks, callBacks, "Callbacks for \(method)") } + #endif } #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT func test_webSocket() async throws { - guard #available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) else { return } + guard #available(macOS 12, iOS 13.0, watchOS 6.0, tvOS 13.0, *) else { return } guard URLSessionWebSocketTask.supportsWebSockets else { print("libcurl lacks WebSockets support, skipping \(#function)") return @@ -1913,7 +1951,7 @@ class TestURLSession: LoopbackServerTest { } func test_webSocketSpecificProtocol() async throws { - guard #available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) else { return } + guard #available(macOS 12, iOS 13.0, watchOS 6.0, tvOS 13.0, *) else { return } guard URLSessionWebSocketTask.supportsWebSockets else { print("libcurl lacks WebSockets support, skipping \(#function)") return @@ -1943,7 +1981,7 @@ class TestURLSession: LoopbackServerTest { } func test_webSocketAbruptClose() async throws { - guard #available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) else { return } + guard #available(macOS 12, iOS 13.0, watchOS 6.0, tvOS 13.0, *) else { return } guard URLSessionWebSocketTask.supportsWebSockets else { print("libcurl lacks WebSockets support, skipping \(#function)") return @@ -1983,7 +2021,7 @@ class TestURLSession: LoopbackServerTest { } func test_webSocketSemiAbruptClose() async throws { - guard #available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) else { return } + guard #available(macOS 12, iOS 13.0, watchOS 6.0, tvOS 13.0, *) else { return } guard URLSessionWebSocketTask.supportsWebSockets else { print("libcurl lacks WebSockets support, skipping \(#function)") return @@ -2024,91 +2062,6 @@ class TestURLSession: LoopbackServerTest { XCTAssertEqual(task.closeReason, nil) } #endif - - static var allTests: [(String, (TestURLSession) -> () throws -> Void)] { - var retVal = [ - ("test_dataTaskWithURL", test_dataTaskWithURL), - ("test_dataTaskWithURLRequest", test_dataTaskWithURLRequest), - ("test_dataTaskWithURLCompletionHandler", test_dataTaskWithURLCompletionHandler), - ("test_dataTaskWithURLRequestCompletionHandler", test_dataTaskWithURLRequestCompletionHandler), - /* ⚠️ */ ("test_dataTaskWithHttpInputStream", testExpectedToFail(test_dataTaskWithHttpInputStream, "Flaky test")), - ("test_dataTaskWithHTTPBodyRedirect", test_dataTaskWithHTTPBodyRedirect), - ("test_gzippedDataTask", test_gzippedDataTask), - ("test_downloadTaskWithURL", test_downloadTaskWithURL), - ("test_downloadTaskWithURLRequest", test_downloadTaskWithURLRequest), - ("test_downloadTaskWithRequestAndHandler", test_downloadTaskWithRequestAndHandler), - ("test_downloadTaskWithURLAndHandler", test_downloadTaskWithURLAndHandler), - ("test_gzippedDownloadTask", test_gzippedDownloadTask), - ("test_finishTaskAndInvalidate", test_finishTasksAndInvalidate), - ("test_taskError", test_taskError), - ("test_taskCopy", test_taskCopy), - ("test_cancelTask", test_cancelTask), - ("test_unhandledURLProtocol", test_unhandledURLProtocol), - ("test_requestToNilURL", test_requestToNilURL), - /* ⚠️ */ ("test_suspendResumeTask", testExpectedToFail(test_suspendResumeTask, "Occasionally breaks")), - ("test_taskTimeout", test_taskTimeout), - ("test_verifyRequestHeaders", test_verifyRequestHeaders), - ("test_verifyHttpAdditionalHeaders", test_verifyHttpAdditionalHeaders), - ("test_timeoutInterval", test_timeoutInterval), - ("test_httpRedirectionWithCode300", test_httpRedirectionWithCode300), - ("test_httpRedirectionWithCode301_302", test_httpRedirectionWithCode301_302), - ("test_httpRedirectionWithCode303", test_httpRedirectionWithCode303), - ("test_httpRedirectionWithCode304", test_httpRedirectionWithCode304), - ("test_httpRedirectionWithCode305_308", test_httpRedirectionWithCode305_308), - ("test_httpRedirectDontFollowUsingNil", test_httpRedirectDontFollowUsingNil), - ("test_httpRedirectDontFollowIgnoringHandler", test_httpRedirectDontFollowIgnoringHandler), - ("test_httpRedirectionWithCompleteRelativePath", test_httpRedirectionWithCompleteRelativePath), - ("test_httpRedirectionWithInCompleteRelativePath", test_httpRedirectionWithInCompleteRelativePath), - ("test_httpRedirectionWithDefaultPort", test_httpRedirectionWithDefaultPort), - ("test_httpRedirectionWithEncodedQuery", test_httpRedirectionWithEncodedQuery), - ("test_httpRedirectionTimeout", test_httpRedirectionTimeout), - /* ⚠️ */ ("test_httpRedirectionChainInheritsTimeoutInterval", testExpectedToFail(test_httpRedirectionChainInheritsTimeoutInterval, "Flaky on Linux CI: https://bugs.swift.org/browse/SR-14433")), - /* ⚠️ */ ("test_httpRedirectionExceededMaxRedirects", testExpectedToFail(test_httpRedirectionExceededMaxRedirects, "Flaky on Linux CI: https://bugs.swift.org/browse/SR-14433")), - ("test_willPerformRedirect", test_willPerformRedirect), - ("test_httpNotFound", test_httpNotFound), - /* ⚠️ */ ("test_http0_9SimpleResponses", testExpectedToFail(test_http0_9SimpleResponses, "Breaks on Ubunut20.04")), - ("test_outOfRangeButCorrectlyFormattedHTTPCode", test_outOfRangeButCorrectlyFormattedHTTPCode), - ("test_missingContentLengthButStillABody", test_missingContentLengthButStillABody), - ("test_illegalHTTPServerResponses", test_illegalHTTPServerResponses), - ("test_dataTaskWithSharedDelegate", test_dataTaskWithSharedDelegate), - ("test_simpleUploadWithDelegate", test_simpleUploadWithDelegate), - ("test_requestWithEmptyBody", test_requestWithEmptyBody), - /* ⚠️ */ ("test_requestWithNonEmptyBody", testExpectedToFail(test_requestWithNonEmptyBody, "Started failing for no readily available reason.")), - /* ⚠️ */ ("test_concurrentRequests", testExpectedToFail(test_concurrentRequests, "Intermittent SEGFAULT: rdar://84519512")), - ("test_disableCookiesStorage", test_disableCookiesStorage), - ("test_cookiesStorage", test_cookiesStorage), - ("test_cookieStorageForEphemeralConfiguration", test_cookieStorageForEphemeralConfiguration), - ("test_previouslySetCookiesAreSentInLaterRequests", test_previouslySetCookiesAreSentInLaterRequests), - ("test_setCookieHeadersCanBeIgnored", test_setCookieHeadersCanBeIgnored), - ("test_initURLSessionConfiguration", test_initURLSessionConfiguration), - ("test_basicAuthRequest", test_basicAuthRequest), - ("test_redirectionWithSetCookies", test_redirectionWithSetCookies), - ("test_postWithEmptyBody", test_postWithEmptyBody), - ("test_basicAuthWithUnauthorizedHeader", test_basicAuthWithUnauthorizedHeader), - ("test_checkErrorTypeAfterInvalidateAndCancel", test_checkErrorTypeAfterInvalidateAndCancel), - ("test_taskCountAfterInvalidateAndCancel", test_taskCountAfterInvalidateAndCancel), - ("test_sessionDelegateAfterInvalidateAndCancel", test_sessionDelegateAfterInvalidateAndCancel), - /* ⚠️ */ ("test_getAllTasks", testExpectedToFail(test_getAllTasks, "This test causes later ones to crash")), - /* ⚠️ */ ("test_getTasksWithCompletion", testExpectedToFail(test_getTasksWithCompletion, "Flaky tests")), - /* ⚠️ */ ("test_invalidResumeDataForDownloadTask", - /* ⚠️ */ testExpectedToFail(test_invalidResumeDataForDownloadTask, "This test crashes nondeterministically: https://bugs.swift.org/browse/SR-11353")), - /* ⚠️ */ ("test_simpleUploadWithDelegateProvidingInputStream", - /* ⚠️ */ testExpectedToFail(test_simpleUploadWithDelegateProvidingInputStream, "This test times out frequently: https://bugs.swift.org/browse/SR-11343")), - /* ⚠️ */ ("test_noDoubleCallbackWhenCancellingAndProtocolFailsFast", - /* ⚠️ */ testExpectedToFail(test_noDoubleCallbackWhenCancellingAndProtocolFailsFast, "This test crashes nondeterministically: https://bugs.swift.org/browse/SR-11310")), - /* ⚠️ */ ("test_cancelledTasksCannotBeResumed", testExpectedToFail(test_cancelledTasksCannotBeResumed, "Breaks on Ubuntu 18.04")), - ] - if #available(macOS 12.0, *) { - retVal.append(contentsOf: [ - ("test_webSocket", asyncTest(test_webSocket)), - ("test_webSocketSpecificProtocol", asyncTest(test_webSocketSpecificProtocol)), - ("test_webSocketAbruptClose", asyncTest(test_webSocketAbruptClose)), - ("test_webSocketSemiAbruptClose", asyncTest(test_webSocketSemiAbruptClose)), - ]) - } - return retVal - } - } class SharedDelegate: NSObject { diff --git a/Tests/Foundation/TestURLSessionFTP.swift b/Tests/Foundation/TestURLSessionFTP.swift index 5c045eaa14..ffc1e7fa89 100644 --- a/Tests/Foundation/TestURLSessionFTP.swift +++ b/Tests/Foundation/TestURLSessionFTP.swift @@ -10,16 +10,6 @@ #if !os(Windows) class TestURLSessionFTP : LoopbackFTPServerTest { - - static var allTests: [(String, (TestURLSessionFTP) -> () throws -> Void)] { - return [ - /* ⚠️ */ ("test_ftpDataTask", testExpectedToFail(test_ftpDataTask, - /* ⚠️ */ " non-deterministic SEGFAULT in TestURLSessionFTP.test_ftpDataTask")), - /* ⚠️ */ ("test_ftpDataTaskDelegate", testExpectedToFail(test_ftpDataTaskDelegate, - /* ⚠️ */ " non-deterministic SEGFAULT in TestURLSessionFTP.test_ftpDataTask")), - ] - } - let saveString = """ FTP implementation to test FTP upload, download and data tasks. Instead of sending a file, @@ -29,7 +19,9 @@ class TestURLSessionFTP : LoopbackFTPServerTest { as part of the header.\r\n """ - func test_ftpDataTask() { + func test_ftpDataTask() throws { + throw XCTSkip(" non-deterministic SEGFAULT in TestURLSessionFTP.test_ftpDataTask") + #if false #if !DARWIN_COMPATIBILITY_TESTS let ftpURL = "ftp://127.0.0.1:\(TestURLSessionFTP.serverPort)/test.txt" let req = URLRequest(url: URL(string: ftpURL)!) @@ -45,9 +37,12 @@ class TestURLSessionFTP : LoopbackFTPServerTest { dataTask1.resume() waitForExpectations(timeout: 60) #endif + #endif } - func test_ftpDataTaskDelegate() { + func test_ftpDataTaskDelegate() throws { + throw XCTSkip(" non-deterministic SEGFAULT in TestURLSessionFTP.test_ftpDataTask") + #if false let urlString = "ftp://127.0.0.1:\(TestURLSessionFTP.serverPort)/test.txt" let url = URL(string: urlString)! let dataTask = FTPDataTask(with: expectation(description: "data task")) @@ -56,6 +51,7 @@ class TestURLSessionFTP : LoopbackFTPServerTest { if !dataTask.error { XCTAssertNotNil(dataTask.fileData) } + #endif } } diff --git a/Tests/Foundation/TestUUID.swift b/Tests/Foundation/TestUUID.swift index 99d4d6d3b2..9f862b7ecd 100644 --- a/Tests/Foundation/TestUUID.swift +++ b/Tests/Foundation/TestUUID.swift @@ -9,17 +9,6 @@ class TestUUID : XCTestCase { - static var allTests: [(String, (TestUUID) -> () throws -> Void)] { - return [ - ("test_UUIDEquality", test_UUIDEquality), - ("test_UUIDInvalid", test_UUIDInvalid), - ("test_UUIDuuidString", test_UUIDuuidString), - ("test_UUIDdescription", test_UUIDdescription), - ("test_UUIDNSCoding", test_UUIDNSCoding), - ("test_hash", test_hash), - ] - } - func test_UUIDEquality() { let uuidA = UUID(uuidString: "E621E1F8-C36C-495A-93FC-0C247A3E6E5F") let uuidB = UUID(uuidString: "e621e1f8-c36c-495a-93fc-0c247a3e6e5f") diff --git a/Tests/Foundation/TestUnit.swift b/Tests/Foundation/TestUnit.swift index 47d179e2d9..186d3d72cf 100644 --- a/Tests/Foundation/TestUnit.swift +++ b/Tests/Foundation/TestUnit.swift @@ -86,10 +86,4 @@ class TestUnit: XCTestCase { testEquality(ofDimensionSubclass: UnitTemperature.self) testEquality(ofDimensionSubclass: UnitVolume.self) } - - static var allTests: [(String, (TestUnit) -> () throws -> Void)] { - return [ - ("test_equality", test_equality), - ] - } } diff --git a/Tests/Foundation/TestUnitConverter.swift b/Tests/Foundation/TestUnitConverter.swift index c790742276..79786b5f67 100644 --- a/Tests/Foundation/TestUnitConverter.swift +++ b/Tests/Foundation/TestUnitConverter.swift @@ -8,16 +8,6 @@ // class TestUnitConverter: XCTestCase { - - static var allTests: [(String, (TestUnitConverter) -> () throws -> Void)] { - return [ - ("test_baseUnit", test_linearity), - ("test_linearity", test_linearity), - ("test_bijectivity", test_bijectivity), - ("test_equality", test_equality), - ] - } - func test_baseUnit() { XCTAssertEqual(UnitAcceleration.baseUnit().symbol, UnitAcceleration.metersPerSecondSquared.symbol) diff --git a/Tests/Foundation/TestUnitInformationStorage.swift b/Tests/Foundation/TestUnitInformationStorage.swift index 6d95767396..4710dce958 100644 --- a/Tests/Foundation/TestUnitInformationStorage.swift +++ b/Tests/Foundation/TestUnitInformationStorage.swift @@ -33,8 +33,4 @@ class TestUnitInformationStorage: XCTestCase { "Conversion from bits to gibibits" ) } - - static let allTests = [ - ("testUnitInformationStorage", testUnitInformationStorage), - ] } diff --git a/Tests/Foundation/TestUnitVolume.swift b/Tests/Foundation/TestUnitVolume.swift index 294e559421..1ecd42dde3 100644 --- a/Tests/Foundation/TestUnitVolume.swift +++ b/Tests/Foundation/TestUnitVolume.swift @@ -67,10 +67,4 @@ class TestUnitVolume: XCTestCase { let teaspoons = Measurement(value: 1, unit: UnitVolume.teaspoons) XCTAssertEqual(teaspoons.converted(to: .cubicInches).value, 0.3, accuracy: 0.001, "Conversion from teaspoons to cubicInches") } - - static let allTests = [ - ("testMetricVolumeConversions", testMetricVolumeConversions), - ("testMetricToImperialVolumeConversion", testMetricToImperialVolumeConversion), - ("testImperialVolumeConversions", testImperialVolumeConversions), - ] } diff --git a/Tests/Foundation/TestUserDefaults.swift b/Tests/Foundation/TestUserDefaults.swift index 6b46675be9..28aa2c277a 100644 --- a/Tests/Foundation/TestUserDefaults.swift +++ b/Tests/Foundation/TestUserDefaults.swift @@ -8,46 +8,6 @@ // class TestUserDefaults : XCTestCase { - static var allTests : [(String, (TestUserDefaults) -> () throws -> ())] { - return [ - ("test_createUserDefaults", test_createUserDefaults ), - ("test_getRegisteredDefaultItem", test_getRegisteredDefaultItem ), - ("test_getRegisteredDefaultItem_NSString", test_getRegisteredDefaultItem_NSString ), - ("test_getRegisteredDefaultItem_String", test_getRegisteredDefaultItem_String ), - ("test_getRegisteredDefaultItem_NSURL", test_getRegisteredDefaultItem_NSURL ), - ("test_getRegisteredDefaultItem_URL", test_getRegisteredDefaultItem_URL ), - ("test_getRegisteredDefaultItem_NSData", test_getRegisteredDefaultItem_NSData ), - ("test_getRegisteredDefaultItem_Data)", test_getRegisteredDefaultItem_Data ), - ("test_getRegisteredDefaultItem_BoolFromString", test_getRegisteredDefaultItem_BoolFromString ), - ("test_getRegisteredDefaultItem_IntFromString", test_getRegisteredDefaultItem_IntFromString ), - ("test_getRegisteredDefaultItem_DoubleFromString", test_getRegisteredDefaultItem_DoubleFromString ), - ("test_setValue_NSString", test_setValue_NSString ), - ("test_setValue_String", test_setValue_String ), - ("test_setValue_NSURL", test_setValue_NSURL ), - ("test_setValue_URL", test_setValue_URL ), - ("test_setValue_NSData", test_setValue_NSData ), - ("test_setValue_Data", test_setValue_Data ), - ("test_setValue_BoolFromString", test_setValue_BoolFromString ), - ("test_setValue_IntFromBool", test_setValue_IntFromBool ), - ("test_setValue_IntFromFloat", test_setValue_IntFromFloat ), - ("test_setValue_IntFromDouble", test_setValue_IntFromDouble ), - ("test_setValue_IntFromString", test_setValue_IntFromString ), - ("test_setValue_FloatFromBool", test_setValue_FloatFromBool ), - ("test_setValue_FloatFromInt", test_setValue_FloatFromInt ), - ("test_setValue_FloatFromDouble", test_setValue_FloatFromDouble ), - ("test_setValue_FloatFromString", test_setValue_FloatFromString ), - ("test_setValue_DoubleFromBool", test_setValue_DoubleFromBool ), - ("test_setValue_DoubleFromInt", test_setValue_DoubleFromInt ), - ("test_setValue_DoubleFromFloat", test_setValue_DoubleFromFloat ), - ("test_setValue_DoubleFromString", test_setValue_DoubleFromString ), - ("test_setValue_StringFromBool", test_setValue_StringFromBool ), - ("test_setValue_StringFromInt", test_setValue_StringFromInt ), - ("test_setValue_StringFromFloat", test_setValue_StringFromFloat ), - ("test_setValue_StringFromDouble", test_setValue_StringFromDouble ), - ("test_volatileDomains", test_volatileDomains), - ("test_persistentDomain", test_persistentDomain ), - ] - } func test_createUserDefaults() { let defaults = UserDefaults.standard diff --git a/Tests/Foundation/TestXMLDocument.swift b/Tests/Foundation/TestXMLDocument.swift index a417e1624e..5dcbf888df 100644 --- a/Tests/Foundation/TestXMLDocument.swift +++ b/Tests/Foundation/TestXMLDocument.swift @@ -67,6 +67,8 @@ class TestXMLDocument : LoopbackServerTest { } func test_xpath() throws { + throw XCTSkip("https://bugs.swift.org/browse/SR-10098") + #if false let doc = XMLDocument(rootElement: nil) let foo = XMLElement(name: "foo") let bar1 = XMLElement(name: "bar") @@ -116,6 +118,7 @@ class TestXMLDocument : LoopbackServerTest { } else { XCTAssert(false, "propNode should have existed, but was nil") } + #endif } func test_elementCreation() { @@ -396,6 +399,8 @@ class TestXMLDocument : LoopbackServerTest { } func test_validation_success() throws { + throw XCTSkip(#" Could not build URI for external subset "http://127.0.0.1:-2/DTDs/PropertyList-1.0.dtd""#) + #if false let validString = " ]>Hello world" do { let doc = try XMLDocument(xmlString: validString, options: []) @@ -415,9 +420,12 @@ class TestXMLDocument : LoopbackServerTest { } catch let nsError as NSError { XCTFail("\(nsError.userInfo)") } + #endif } func test_validation_failure() throws { + throw XCTSkip(" XCTAssert in last catch block fails") + #if false let xmlString = " ]>not empty" do { let doc = try XMLDocument(xmlString: xmlString, options: []) @@ -438,6 +446,7 @@ class TestXMLDocument : LoopbackServerTest { } catch let error as NSError { XCTAssert((error.userInfo[NSLocalizedDescriptionKey] as! String).contains("Element true was declared EMPTY this one has content")) } + #endif } func test_dtd() throws { @@ -723,44 +732,6 @@ class TestXMLDocument : LoopbackServerTest { XCTAssertEqual(children[2].stringValue, " some more text") } } - - static var allTests: [(String, (TestXMLDocument) -> () throws -> Void)] { - return [ - ("test_basicCreation", test_basicCreation), - ("test_nextPreviousNode", test_nextPreviousNode), - // Disabled because of https://bugs.swift.org/browse/SR-10098 - // ("test_xpath", test_xpath), - ("test_elementCreation", test_elementCreation), - ("test_elementChildren", test_elementChildren), - ("test_stringValue", test_stringValue), - ("test_objectValue", test_objectValue), - ("test_attributes", test_attributes), - ("test_attributesWithNamespace", test_attributesWithNamespace), - ("test_comments", test_comments), - ("test_processingInstruction", test_processingInstruction), - ("test_parseXMLString", test_parseXMLString), - ("test_prefixes", test_prefixes), - /* ⚠️ */ ("test_validation_success", testExpectedToFail(test_validation_success, - /* ⚠️ */ #" Could not build URI for external subset "http://127.0.0.1:-2/DTDs/PropertyList-1.0.dtd""#)), - /* ⚠️ */ ("test_validation_failure", testExpectedToFail(test_validation_failure, - /* ⚠️ */ " XCTAssert in last catch block fails")), - ("test_dtd", test_dtd), - ("test_documentWithDTD", test_documentWithDTD), - ("test_dtd_attributes", test_dtd_attributes), - ("test_documentWithEncodingSetDoesntCrash", test_documentWithEncodingSetDoesntCrash), - ("test_nodeFindingWithNamespaces", test_nodeFindingWithNamespaces), - ("test_createElement", test_createElement), - ("test_addNamespace", test_addNamespace), - ("test_removeNamespace", test_removeNamespace), - ("test_optionPreserveAll", test_optionPreserveAll), - ("test_rootElementRetainsDocument", test_rootElementRetainsDocument), - ("test_nodeKinds", test_nodeKinds), - ("test_nodeNames", test_nodeNames), - ("test_creatingAnEmptyDocumentAndNode", test_creatingAnEmptyDocumentAndNode), - ("test_creatingAnEmptyDTD", test_creatingAnEmptyDTD), - ("test_parsingCDataSections", test_parsingCDataSections), - ] - } } fileprivate extension XMLNode { diff --git a/Tests/Foundation/TestXMLParser.swift b/Tests/Foundation/TestXMLParser.swift index e37bd0e2bf..c98741eb38 100644 --- a/Tests/Foundation/TestXMLParser.swift +++ b/Tests/Foundation/TestXMLParser.swift @@ -60,16 +60,6 @@ class XMLParserDelegateEventStream: NSObject, XMLParserDelegate { class TestXMLParser : XCTestCase { - static var allTests: [(String, (TestXMLParser) -> () throws -> Void)] { - return [ - ("test_withData", test_withData), - ("test_withDataEncodings", test_withDataEncodings), - ("test_withDataOptions", test_withDataOptions), - ("test_sr9758_abortParsing", test_sr9758_abortParsing), - ("test_sr10157_swappedElementNames", test_sr10157_swappedElementNames), - ] - } - // Helper method to embed the correct encoding in the XML header static func xmlUnderTest(encoding: String.Encoding? = nil) -> String { let xmlUnderTest = "bar" From 5b64137af3e33601198f5d0a6ef8fbefbfd172db Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Tue, 2 Apr 2024 16:47:40 -0700 Subject: [PATCH 059/198] Update swift-foundation/swift-foundation-icu dependencies (#4935) --- Package.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Package.swift b/Package.swift index 1ec8514a1a..8281db2793 100644 --- a/Package.swift +++ b/Package.swift @@ -75,10 +75,10 @@ let package = Package( dependencies: [ .package( url: "https://github.com/apple/swift-foundation-icu", - exact: "0.0.5"), + from: "0.0.5"), .package( url: "https://github.com/apple/swift-foundation", - revision: "543bd69d7dc6a077e1fae856002cf0d169bb9652" + revision: "30fcfba9548682c3574e7b55f569233fd996bf40" ), ], targets: [ From 52d9d71168fe11092808401dfe331c9b972af771 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Wed, 24 Apr 2024 16:45:05 -0700 Subject: [PATCH 060/198] Remove SCF version of IndexPath (#4938) --- Sources/Foundation/IndexPath.swift | 710 +-------------------------- Sources/Foundation/NSIndexPath.swift | 2 +- 2 files changed, 7 insertions(+), 705 deletions(-) diff --git a/Sources/Foundation/IndexPath.swift b/Sources/Foundation/IndexPath.swift index ccc3667ca8..5aef6c1b56 100644 --- a/Sources/Foundation/IndexPath.swift +++ b/Sources/Foundation/IndexPath.swift @@ -26,687 +26,28 @@ import _SwiftFoundationOverlayShims #endif -/** - `IndexPath` represents the path to a specific node in a tree of nested array collections. - - Each index in an index path represents the index into an array of children from one node in the tree to another, deeper, node. - */ -public struct IndexPath : ReferenceConvertible, Equatable, Hashable, MutableCollection, RandomAccessCollection, Comparable, ExpressibleByArrayLiteral { - public typealias ReferenceType = NSIndexPath - public typealias Element = Int - public typealias Index = Array.Index - public typealias Indices = DefaultIndices - - fileprivate enum Storage : ExpressibleByArrayLiteral { - typealias Element = Int - case empty - case single(Int) - case pair(Int, Int) - case array([Int]) - - init(arrayLiteral elements: Int...) { - self.init(elements) - } - - init(_ elements: [Int]) { - switch elements.count { - case 0: - self = .empty - case 1: - self = .single(elements[0]) - case 2: - self = .pair(elements[0], elements[1]) - default: - self = .array(elements) - } - } - - func dropLast() -> Storage { - switch self { - case .empty: - return .empty - case .single: - return .empty - case .pair(let first, _): - return .single(first) - case .array(let indexes): - switch indexes.count { - case 3: - return .pair(indexes[0], indexes[1]) - default: - return .array(Array(indexes.dropLast())) - } - } - } - - mutating func append(_ other: Int) { - switch self { - case .empty: - self = .single(other) - case .single(let first): - self = .pair(first, other) - case .pair(let first, let second): - self = .array([first, second, other]) - case .array(let indexes): - self = .array(indexes + [other]) - } - } - - mutating func append(contentsOf other: Storage) { - switch self { - case .empty: - switch other { - case .empty: - // DO NOTHING - break - case .single(let rhsIndex): - self = .single(rhsIndex) - case .pair(let rhsFirst, let rhsSecond): - self = .pair(rhsFirst, rhsSecond) - case .array(let rhsIndexes): - self = .array(rhsIndexes) - } - case .single(let lhsIndex): - switch other { - case .empty: - // DO NOTHING - break - case .single(let rhsIndex): - self = .pair(lhsIndex, rhsIndex) - case .pair(let rhsFirst, let rhsSecond): - self = .array([lhsIndex, rhsFirst, rhsSecond]) - case .array(let rhsIndexes): - self = .array([lhsIndex] + rhsIndexes) - } - case .pair(let lhsFirst, let lhsSecond): - switch other { - case .empty: - // DO NOTHING - break - case .single(let rhsIndex): - self = .array([lhsFirst, lhsSecond, rhsIndex]) - case .pair(let rhsFirst, let rhsSecond): - self = .array([lhsFirst, lhsSecond, rhsFirst, rhsSecond]) - case .array(let rhsIndexes): - self = .array([lhsFirst, lhsSecond] + rhsIndexes) - } - case .array(let lhsIndexes): - switch other { - case .empty: - // DO NOTHING - break - case .single(let rhsIndex): - self = .array(lhsIndexes + [rhsIndex]) - case .pair(let rhsFirst, let rhsSecond): - self = .array(lhsIndexes + [rhsFirst, rhsSecond]) - case .array(let rhsIndexes): - self = .array(lhsIndexes + rhsIndexes) - } - } - } - - mutating func append(contentsOf other: [Int]) { - switch self { - case .empty: - switch other.count { - case 0: - // DO NOTHING - break - case 1: - self = .single(other[0]) - case 2: - self = .pair(other[0], other[1]) - default: - self = .array(other) - } - case .single(let first): - switch other.count { - case 0: - // DO NOTHING - break - case 1: - self = .pair(first, other[0]) - default: - self = .array([first] + other) - } - case .pair(let first, let second): - switch other.count { - case 0: - // DO NOTHING - break - default: - self = .array([first, second] + other) - } - case .array(let indexes): - self = .array(indexes + other) - } - } - - subscript(_ index: Int) -> Int { - get { - switch self { - case .empty: - fatalError("index \(index) out of bounds of count 0") - case .single(let first): - precondition(index == 0, "index \(index) out of bounds of count 1") - return first - case .pair(let first, let second): - precondition(index >= 0 && index < 2, "index \(index) out of bounds of count 2") - return index == 0 ? first : second - case .array(let indexes): - return indexes[index] - } - } - set { - switch self { - case .empty: - fatalError("index \(index) out of bounds of count 0") - case .single: - precondition(index == 0, "index \(index) out of bounds of count 1") - self = .single(newValue) - case .pair(let first, let second): - precondition(index >= 0 && index < 2, "index \(index) out of bounds of count 2") - if index == 0 { - self = .pair(newValue, second) - } else { - self = .pair(first, newValue) - } - case .array(var indexes): - indexes[index] = newValue - self = .array(indexes) - } - } - } - - subscript(range: Range) -> Storage { - get { - switch self { - case .empty: - switch (range.lowerBound, range.upperBound) { - case (0, 0): - return .empty - default: - fatalError("range \(range) is out of bounds of count 0") - } - case .single(let index): - switch (range.lowerBound, range.upperBound) { - case (0, 0): fallthrough - case (1, 1): - return .empty - case (0, 1): - return .single(index) - default: - fatalError("range \(range) is out of bounds of count 1") - } - case .pair(let first, let second): - switch (range.lowerBound, range.upperBound) { - case (0, 0): - fallthrough - case (1, 1): - fallthrough - case (2, 2): - return .empty - case (0, 1): - return .single(first) - case (1, 2): - return .single(second) - case (0, 2): - return self - default: - fatalError("range \(range) is out of bounds of count 2") - } - case .array(let indexes): - let slice = indexes[range] - switch slice.count { - case 0: - return .empty - case 1: - return .single(slice.first!) - case 2: - return .pair(slice.first!, slice.last!) - default: - return .array(Array(slice)) - } - } - } - set { - switch self { - case .empty: - precondition(range.lowerBound == 0 && range.upperBound == 0, "range \(range) is out of bounds of count 0") - self = newValue - case .single(let index): - switch (range.lowerBound, range.upperBound, newValue) { - case (0, 0, .empty): - fallthrough - case (1, 1, .empty): - break - case (0, 0, .single(let other)): - self = .pair(other, index) - case (0, 0, .pair(let first, let second)): - self = .array([first, second, index]) - case (0, 0, .array(let other)): - self = .array(other + [index]) - case (0, 1, .empty): - fallthrough - case (0, 1, .single): - fallthrough - case (0, 1, .pair): - fallthrough - case (0, 1, .array): - self = newValue - case (1, 1, .single(let other)): - self = .pair(index, other) - case (1, 1, .pair(let first, let second)): - self = .array([index, first, second]) - case (1, 1, .array(let other)): - self = .array([index] + other) - default: - fatalError("range \(range) is out of bounds of count 1") - } - case .pair(let first, let second): - switch (range.lowerBound, range.upperBound) { - case (0, 0): - switch newValue { - case .empty: - break - case .single(let other): - self = .array([other, first, second]) - case .pair(let otherFirst, let otherSecond): - self = .array([otherFirst, otherSecond, first, second]) - case .array(let other): - self = .array(other + [first, second]) - } - case (0, 1): - switch newValue { - case .empty: - self = .single(second) - case .single(let other): - self = .pair(other, second) - case .pair(let otherFirst, let otherSecond): - self = .array([otherFirst, otherSecond, second]) - case .array(let other): - self = .array(other + [second]) - } - case (0, 2): - self = newValue - case (1, 2): - switch newValue { - case .empty: - self = .single(first) - case .single(let other): - self = .pair(first, other) - case .pair(let otherFirst, let otherSecond): - self = .array([first, otherFirst, otherSecond]) - case .array(let other): - self = .array([first] + other) - } - case (2, 2): - switch newValue { - case .empty: - break - case .single(let other): - self = .array([first, second, other]) - case .pair(let otherFirst, let otherSecond): - self = .array([first, second, otherFirst, otherSecond]) - case .array(let other): - self = .array([first, second] + other) - } - default: - fatalError("range \(range) is out of bounds of count 2") - } - case .array(let indexes): - var newIndexes = indexes - newIndexes.removeSubrange(range) - switch newValue { - case .empty: - break - case .single(let index): - newIndexes.insert(index, at: range.lowerBound) - case .pair(let first, let second): - newIndexes.insert(first, at: range.lowerBound) - newIndexes.insert(second, at: range.lowerBound + 1) - case .array(let other): - newIndexes.insert(contentsOf: other, at: range.lowerBound) - } - self = Storage(newIndexes) - } - } - } - - var count: Int { - switch self { - case .empty: - return 0 - case .single: - return 1 - case .pair: - return 2 - case .array(let indexes): - return indexes.count - } - } - - var startIndex: Int { - return 0 - } - - var endIndex: Int { - return count - } - - var allValues: [Int] { - switch self { - case .empty: return [] - case .single(let index): return [index] - case .pair(let first, let second): return [first, second] - case .array(let indexes): return indexes - } - } - - func index(before i: Int) -> Int { - return i - 1 - } - - func index(after i: Int) -> Int { - return i + 1 - } - - var description: String { - switch self { - case .empty: - return "[]" - case .single(let index): - return "[\(index)]" - case .pair(let first, let second): - return "[\(first), \(second)]" - case .array(let indexes): - return indexes.description - } - } - - func withUnsafeBufferPointer(_ body: (UnsafeBufferPointer) throws -> R) rethrows -> R { - switch self { - case .empty: - return try body(UnsafeBufferPointer(start: nil, count: 0)) - case .single(var index): - return try withUnsafePointer(to: &index) { (start) throws -> R in - return try body(UnsafeBufferPointer(start: start, count: 1)) - } - case .pair(let first, let second): - var pair = (first, second) - return try withUnsafeBytes(of: &pair) { (rawBuffer: UnsafeRawBufferPointer) throws -> R in - return try body(UnsafeBufferPointer(start: rawBuffer.baseAddress?.assumingMemoryBound(to: Int.self), count: 2)) - } - case .array(let indexes): - return try indexes.withUnsafeBufferPointer(body) - } - } - - var debugDescription: String { return description } - - static func +(_ lhs: Storage, _ rhs: Storage) -> Storage { - var res = lhs - res.append(contentsOf: rhs) - return res - } - - static func +(_ lhs: Storage, _ rhs: [Int]) -> Storage { - var res = lhs - res.append(contentsOf: rhs) - return res - } - - static func ==(_ lhs: Storage, _ rhs: Storage) -> Bool { - switch (lhs, rhs) { - case (.empty, .empty): - return true - case (.single(let lhsIndex), .single(let rhsIndex)): - return lhsIndex == rhsIndex - case (.pair(let lhsFirst, let lhsSecond), .pair(let rhsFirst, let rhsSecond)): - return lhsFirst == rhsFirst && lhsSecond == rhsSecond - case (.array(let lhsIndexes), .array(let rhsIndexes)): - return lhsIndexes == rhsIndexes - default: - return false - } - } - } - - fileprivate var _indexes : Storage - - /// Initialize an empty index path. - public init() { - _indexes = [] - } - - /// Initialize with a sequence of integers. - public init(indexes: ElementSequence) - where ElementSequence.Iterator.Element == Element { - _indexes = Storage(indexes.map { $0 }) - } - - /// Initialize with an array literal. - public init(arrayLiteral indexes: Element...) { - _indexes = Storage(indexes) - } - - /// Initialize with an array of elements. - public init(indexes: Array) { - _indexes = Storage(indexes) - } - - fileprivate init(storage: Storage) { - _indexes = storage - } - - /// Initialize with a single element. - public init(index: Element) { - _indexes = [index] - } - - /// Return a new `IndexPath` containing all but the last element. - public func dropLast() -> IndexPath { - return IndexPath(storage: _indexes.dropLast()) - } - - /// Append an `IndexPath` to `self`. - public mutating func append(_ other: IndexPath) { - _indexes.append(contentsOf: other._indexes) - } - - /// Append a single element to `self`. - public mutating func append(_ other: Element) { - _indexes.append(other) - } - - /// Append an array of elements to `self`. - public mutating func append(_ other: Array) { - _indexes.append(contentsOf: other) - } - - /// Return a new `IndexPath` containing the elements in self and the elements in `other`. - public func appending(_ other: Element) -> IndexPath { - var result = _indexes - result.append(other) - return IndexPath(storage: result) - } - - /// Return a new `IndexPath` containing the elements in self and the elements in `other`. - public func appending(_ other: IndexPath) -> IndexPath { - return IndexPath(storage: _indexes + other._indexes) - } - - /// Return a new `IndexPath` containing the elements in self and the elements in `other`. - public func appending(_ other: Array) -> IndexPath { - return IndexPath(storage: _indexes + other) - } - - public subscript(index: Index) -> Element { - get { - return _indexes[index] - } - set { - _indexes[index] = newValue - } - } - - public subscript(range: Range) -> IndexPath { - get { - return IndexPath(storage: _indexes[range]) - } - set { - _indexes[range] = newValue._indexes - } - } - - public func makeIterator() -> IndexingIterator { - return IndexingIterator(_elements: self) - } - - public var count: Int { - return _indexes.count - } - - public var startIndex: Index { - return _indexes.startIndex - } - - public var endIndex: Index { - return _indexes.endIndex - } - - public func index(before i: Index) -> Index { - return _indexes.index(before: i) - } - - public func index(after i: Index) -> Index { - return _indexes.index(after: i) - } - - /// Sorting an array of `IndexPath` using this comparison results in an array representing nodes in depth-first traversal order. - public func compare(_ other: IndexPath) -> ComparisonResult { - let thisLength = count - let otherLength = other.count - let length = Swift.min(thisLength, otherLength) - for idx in 0.. otherValue { - return .orderedDescending - } - } - if thisLength > otherLength { - return .orderedDescending - } else if thisLength < otherLength { - return .orderedAscending - } - return .orderedSame - } - - public func hash(into hasher: inout Hasher) { - // Note: We compare all indices in ==, so for proper hashing, we must - // also feed them all to the hasher. - // - // To ensure we have unique hash encodings in nested hashing contexts, - // we combine the count of indices as well as the indices themselves. - // (This matches what Array does.) - switch _indexes { - case .empty: - hasher.combine(0) - case let .single(index): - hasher.combine(1) - hasher.combine(index) - case let .pair(first, second): - hasher.combine(2) - hasher.combine(first) - hasher.combine(second) - case let .array(indexes): - hasher.combine(indexes.count) - for index in indexes { - hasher.combine(index) - } - } - } - +extension IndexPath : ReferenceConvertible { // MARK: - Bridging Helpers + public typealias ReferenceType = NSIndexPath fileprivate init(nsIndexPath: ReferenceType) { let count = nsIndexPath.length switch count { case 0: - _indexes = [] + self.init() case 1: - _indexes = .single(nsIndexPath.index(atPosition: 0)) - case 2: - _indexes = .pair(nsIndexPath.index(atPosition: 0), nsIndexPath.index(atPosition: 1)) + self.init(index: nsIndexPath.index(atPosition: 0)) default: let indexes = Array(unsafeUninitializedCapacity: count) { buf, initializedCount in nsIndexPath.getIndexes(buf.baseAddress!, range: NSRange(location: 0, length: count)) initializedCount = count } - _indexes = .array(indexes) + self.init(indexes: indexes) } } fileprivate func makeReference() -> ReferenceType { - switch _indexes { - case .empty: - return ReferenceType() - case .single(let index): - return ReferenceType(index: index) - case .pair(let first, let second): - return _NSIndexPathCreateFromIndexes(first, second) as! ReferenceType - default: - return _indexes.withUnsafeBufferPointer { - return ReferenceType(indexes: $0.baseAddress, length: $0.count) - } - } - } - - public static func ==(lhs: IndexPath, rhs: IndexPath) -> Bool { - return lhs._indexes == rhs._indexes - } - - public static func +(lhs: IndexPath, rhs: IndexPath) -> IndexPath { - return lhs.appending(rhs) - } - - public static func +=(lhs: inout IndexPath, rhs: IndexPath) { - lhs.append(rhs) - } - - public static func <(lhs: IndexPath, rhs: IndexPath) -> Bool { - return lhs.compare(rhs) == .orderedAscending - } - - public static func <=(lhs: IndexPath, rhs: IndexPath) -> Bool { - let order = lhs.compare(rhs) - return order == .orderedAscending || order == .orderedSame - } - - public static func >(lhs: IndexPath, rhs: IndexPath) -> Bool { - return lhs.compare(rhs) == .orderedDescending - } - - public static func >=(lhs: IndexPath, rhs: IndexPath) -> Bool { - let order = lhs.compare(rhs) - return order == .orderedDescending || order == .orderedSame - } -} - -extension IndexPath : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - public var description: String { - return _indexes.description - } - - public var debugDescription: String { - return _indexes.debugDescription - } - - public var customMirror: Mirror { - return Mirror(self, unlabeledChildren: self, displayStyle: .collection) + ReferenceType(indexes: Array(self)) } } @@ -742,42 +83,3 @@ extension NSIndexPath : _HasCustomAnyHashableRepresentation { return AnyHashable(IndexPath(nsIndexPath: self)) } } - -extension IndexPath : Codable { - private enum CodingKeys : Int, CodingKey { - case indexes - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - var indexesContainer = try container.nestedUnkeyedContainer(forKey: .indexes) - - var indexes = [Int]() - if let count = indexesContainer.count { - indexes.reserveCapacity(count) - } - - while !indexesContainer.isAtEnd { - let index = try indexesContainer.decode(Int.self) - indexes.append(index) - } - - self.init(indexes: indexes) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - var indexesContainer = container.nestedUnkeyedContainer(forKey: .indexes) - switch self._indexes { - case .empty: - break - case .single(let index): - try indexesContainer.encode(index) - case .pair(let first, let second): - try indexesContainer.encode(first) - try indexesContainer.encode(second) - case .array(let indexes): - try indexesContainer.encode(contentsOf: indexes) - } - } -} diff --git a/Sources/Foundation/NSIndexPath.swift b/Sources/Foundation/NSIndexPath.swift index 9f5dc5acf2..9464d780c4 100644 --- a/Sources/Foundation/NSIndexPath.swift +++ b/Sources/Foundation/NSIndexPath.swift @@ -24,7 +24,7 @@ open class NSIndexPath : NSObject, NSCopying, NSSecureCoding { } } - private init(indexes: [Int]) { + internal init(indexes: [Int]) { _indexes = indexes } From 595a0d503bcb8411ecd3a2c1c23d443f091ae9a4 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Wed, 24 Apr 2024 16:45:27 -0700 Subject: [PATCH 061/198] Remove SCF version of PropertyListEncoder/PropertyListDecoder (#4939) * Remove SCF version of PropertyListEncoder/PropertyListDecoder * Update swift-foundation dependency * Delete empty file --- Package.swift | 2 +- Sources/Foundation/PropertyListEncoder.swift | 1833 ----------------- .../PropertyListSerialization.swift | 7 +- 3 files changed, 2 insertions(+), 1840 deletions(-) delete mode 100644 Sources/Foundation/PropertyListEncoder.swift diff --git a/Package.swift b/Package.swift index 8281db2793..002119673f 100644 --- a/Package.swift +++ b/Package.swift @@ -78,7 +78,7 @@ let package = Package( from: "0.0.5"), .package( url: "https://github.com/apple/swift-foundation", - revision: "30fcfba9548682c3574e7b55f569233fd996bf40" + revision: "512befd01fc17c2c9cfe2ecdfec568f342c19d36" ), ], targets: [ diff --git a/Sources/Foundation/PropertyListEncoder.swift b/Sources/Foundation/PropertyListEncoder.swift deleted file mode 100644 index 473810313e..0000000000 --- a/Sources/Foundation/PropertyListEncoder.swift +++ /dev/null @@ -1,1833 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2019 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -@_implementationOnly import _CoreFoundation - -//===----------------------------------------------------------------------===// -// Plist Encoder -//===----------------------------------------------------------------------===// - -/// `PropertyListEncoder` facilitates the encoding of `Encodable` values into property lists. -// NOTE: older overlays had Foundation.PropertyListEncoder as the ObjC -// name. The two must coexist, so it was renamed. The old name must not -// be used in the new runtime. _TtC10Foundation20_PropertyListEncoder -// is the mangled name for Foundation._PropertyListEncoder. -// @_objcRuntimeName(_TtC10Foundation20_PropertyListEncoder) -open class PropertyListEncoder { - - // MARK: - Options - - /// The output format to write the property list data in. Defaults to `.binary`. - open var outputFormat: PropertyListSerialization.PropertyListFormat = .binary - - /// Contextual user-provided information for use during encoding. - open var userInfo: [CodingUserInfoKey : Any] = [:] - - /// Options set on the top-level encoder to pass down the encoding hierarchy. - fileprivate struct _Options { - let outputFormat: PropertyListSerialization.PropertyListFormat - let userInfo: [CodingUserInfoKey : Any] - } - - /// The options set on the top-level encoder. - fileprivate var options: _Options { - return _Options(outputFormat: outputFormat, userInfo: userInfo) - } - - // MARK: - Constructing a Property List Encoder - - /// Initializes `self` with default strategies. - public init() {} - - // MARK: - Encoding Values - - /// Encodes the given top-level value and returns its property list representation. - /// - /// - parameter value: The value to encode. - /// - returns: A new `Data` value containing the encoded property list data. - /// - throws: `EncodingError.invalidValue` if a non-conforming floating-point value is encountered during encoding, and the encoding strategy is `.throw`. - /// - throws: An error if any value throws an error during encoding. - open func encode(_ value: Value) throws -> Data { - let topLevel = try encodeToTopLevelContainer(value) - if topLevel is NSNumber { - throw EncodingError.invalidValue(value, - EncodingError.Context(codingPath: [], - debugDescription: "Top-level \(Value.self) encoded as number property list fragment.")) - } else if topLevel is NSString { - throw EncodingError.invalidValue(value, - EncodingError.Context(codingPath: [], - debugDescription: "Top-level \(Value.self) encoded as string property list fragment.")) - } else if topLevel is NSDate { - throw EncodingError.invalidValue(value, - EncodingError.Context(codingPath: [], - debugDescription: "Top-level \(Value.self) encoded as date property list fragment.")) - } - - do { - return try PropertyListSerialization.data(fromPropertyList: topLevel, format: self.outputFormat, options: 0) - } catch { - throw EncodingError.invalidValue(value, - EncodingError.Context(codingPath: [], debugDescription: "Unable to encode the given top-level value as a property list", underlyingError: error)) - } - } - - /// Encodes the given top-level value and returns its plist-type representation. - /// - /// - parameter value: The value to encode. - /// - returns: A new top-level array or dictionary representing the value. - /// - throws: `EncodingError.invalidValue` if a non-conforming floating-point value is encountered during encoding, and the encoding strategy is `.throw`. - /// - throws: An error if any value throws an error during encoding. - internal func encodeToTopLevelContainer(_ value: Value) throws -> Any { - let encoder = __PlistEncoder(options: self.options) - guard let topLevel = try encoder.box_(value) else { - throw EncodingError.invalidValue(value, - EncodingError.Context(codingPath: [], - debugDescription: "Top-level \(Value.self) did not encode any values.")) - } - - return topLevel - } -} - -// MARK: - __PlistEncoder - -// NOTE: older overlays called this class _PlistEncoder. The two must -// coexist without a conflicting ObjC class name, so it was renamed. -// The old name must not be used in the new runtime. -fileprivate class __PlistEncoder : Encoder { - // MARK: Properties - - /// The encoder's storage. - fileprivate var storage: _PlistEncodingStorage - - /// Options set on the top-level encoder. - fileprivate let options: PropertyListEncoder._Options - - /// The path to the current point in encoding. - fileprivate(set) public var codingPath: [CodingKey] - - /// Contextual user-provided information for use during encoding. - public var userInfo: [CodingUserInfoKey : Any] { - return self.options.userInfo - } - - // MARK: - Initialization - - /// Initializes `self` with the given top-level encoder options. - fileprivate init(options: PropertyListEncoder._Options, codingPath: [CodingKey] = []) { - self.options = options - self.storage = _PlistEncodingStorage() - self.codingPath = codingPath - } - - /// Returns whether a new element can be encoded at this coding path. - /// - /// `true` if an element has not yet been encoded at this coding path; `false` otherwise. - fileprivate var canEncodeNewValue: Bool { - // Every time a new value gets encoded, the key it's encoded for is pushed onto the coding path (even if it's a nil key from an unkeyed container). - // At the same time, every time a container is requested, a new value gets pushed onto the storage stack. - // If there are more values on the storage stack than on the coding path, it means the value is requesting more than one container, which violates the precondition. - // - // This means that anytime something that can request a new container goes onto the stack, we MUST push a key onto the coding path. - // Things which will not request containers do not need to have the coding path extended for them (but it doesn't matter if it is, because they will not reach here). - return self.storage.count == self.codingPath.count - } - - // MARK: - Encoder Methods - public func container(keyedBy: Key.Type) -> KeyedEncodingContainer { - // If an existing keyed container was already requested, return that one. - let topContainer: NSMutableDictionary - if self.canEncodeNewValue { - // We haven't yet pushed a container at this level; do so here. - topContainer = self.storage.pushKeyedContainer() - } else { - guard let container = self.storage.containers.last as? NSMutableDictionary else { - preconditionFailure("Attempt to push new keyed encoding container when already previously encoded at this path.") - } - - topContainer = container - } - - let container = _PlistKeyedEncodingContainer(referencing: self, codingPath: self.codingPath, wrapping: topContainer) - return KeyedEncodingContainer(container) - } - - public func unkeyedContainer() -> UnkeyedEncodingContainer { - // If an existing unkeyed container was already requested, return that one. - let topContainer: NSMutableArray - if self.canEncodeNewValue { - // We haven't yet pushed a container at this level; do so here. - topContainer = self.storage.pushUnkeyedContainer() - } else { - guard let container = self.storage.containers.last as? NSMutableArray else { - preconditionFailure("Attempt to push new unkeyed encoding container when already previously encoded at this path.") - } - - topContainer = container - } - - return _PlistUnkeyedEncodingContainer(referencing: self, codingPath: self.codingPath, wrapping: topContainer) - } - - public func singleValueContainer() -> SingleValueEncodingContainer { - return self - } -} - -// MARK: - Encoding Storage and Containers - -fileprivate struct _PlistEncodingStorage { - // MARK: Properties - - /// The container stack. - /// Elements may be any one of the plist types (NSNumber, NSString, NSDate, NSArray, NSDictionary). - private(set) fileprivate var containers: [NSObject] = [] - - // MARK: - Initialization - - /// Initializes `self` with no containers. - fileprivate init() {} - - // MARK: - Modifying the Stack - - fileprivate var count: Int { - return self.containers.count - } - - fileprivate mutating func pushKeyedContainer() -> NSMutableDictionary { - let dictionary = NSMutableDictionary() - self.containers.append(dictionary) - return dictionary - } - - fileprivate mutating func pushUnkeyedContainer() -> NSMutableArray { - let array = NSMutableArray() - self.containers.append(array) - return array - } - - fileprivate mutating func push(container: __owned NSObject) { - self.containers.append(container) - } - - fileprivate mutating func popContainer() -> NSObject { - precondition(!self.containers.isEmpty, "Empty container stack.") - return self.containers.popLast()! - } -} - -// MARK: - Encoding Containers - -fileprivate struct _PlistKeyedEncodingContainer : KeyedEncodingContainerProtocol { - typealias Key = K - - // MARK: Properties - - /// A reference to the encoder we're writing to. - private let encoder: __PlistEncoder - - /// A reference to the container we're writing to. - private let container: NSMutableDictionary - - /// The path of coding keys taken to get to this point in encoding. - private(set) public var codingPath: [CodingKey] - - // MARK: - Initialization - - /// Initializes `self` with the given references. - fileprivate init(referencing encoder: __PlistEncoder, codingPath: [CodingKey], wrapping container: NSMutableDictionary) { - self.encoder = encoder - self.codingPath = codingPath - self.container = container - } - - // MARK: - KeyedEncodingContainerProtocol Methods - - public mutating func encodeNil(forKey key: Key) throws { self.container[key.stringValue] = _plistNullNSString } - public mutating func encode(_ value: Bool, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: Int, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: Int8, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: Int16, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: Int32, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: Int64, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: UInt, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: UInt8, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: UInt16, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: UInt32, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: UInt64, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: String, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: Float, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - public mutating func encode(_ value: Double, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } - - public mutating func encode(_ value: T, forKey key: Key) throws { - self.encoder.codingPath.append(key) - defer { self.encoder.codingPath.removeLast() } - self.container[key.stringValue] = try self.encoder.box(value) - } - - public mutating func nestedContainer(keyedBy keyType: NestedKey.Type, forKey key: Key) -> KeyedEncodingContainer { - let dictionary = NSMutableDictionary() - self.container[key.stringValue] = dictionary - - self.codingPath.append(key) - defer { self.codingPath.removeLast() } - - let container = _PlistKeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: dictionary) - return KeyedEncodingContainer(container) - } - - public mutating func nestedUnkeyedContainer(forKey key: Key) -> UnkeyedEncodingContainer { - let array = NSMutableArray() - self.container[key.stringValue] = array - - self.codingPath.append(key) - defer { self.codingPath.removeLast() } - return _PlistUnkeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: array) - } - - public mutating func superEncoder() -> Encoder { - return __PlistReferencingEncoder(referencing: self.encoder, at: _PlistKey.super, wrapping: self.container) - } - - public mutating func superEncoder(forKey key: Key) -> Encoder { - return __PlistReferencingEncoder(referencing: self.encoder, at: key, wrapping: self.container) - } -} - -fileprivate struct _PlistUnkeyedEncodingContainer : UnkeyedEncodingContainer { - // MARK: Properties - - /// A reference to the encoder we're writing to. - private let encoder: __PlistEncoder - - /// A reference to the container we're writing to. - private let container: NSMutableArray - - /// The path of coding keys taken to get to this point in encoding. - private(set) public var codingPath: [CodingKey] - - /// The number of elements encoded into the container. - public var count: Int { - return self.container.count - } - - // MARK: - Initialization - - /// Initializes `self` with the given references. - fileprivate init(referencing encoder: __PlistEncoder, codingPath: [CodingKey], wrapping container: NSMutableArray) { - self.encoder = encoder - self.codingPath = codingPath - self.container = container - } - - // MARK: - UnkeyedEncodingContainer Methods - - public mutating func encodeNil() throws { self.container.add(_plistNullNSString) } - public mutating func encode(_ value: Bool) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int8) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int16) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int32) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Int64) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt8) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt16) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt32) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: UInt64) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Float) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: Double) throws { self.container.add(self.encoder.box(value)) } - public mutating func encode(_ value: String) throws { self.container.add(self.encoder.box(value)) } - - public mutating func encode(_ value: T) throws { - self.encoder.codingPath.append(_PlistKey(index: self.count)) - defer { self.encoder.codingPath.removeLast() } - self.container.add(try self.encoder.box(value)) - } - - public mutating func nestedContainer(keyedBy keyType: NestedKey.Type) -> KeyedEncodingContainer { - self.codingPath.append(_PlistKey(index: self.count)) - defer { self.codingPath.removeLast() } - - let dictionary = NSMutableDictionary() - self.container.add(dictionary) - - let container = _PlistKeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: dictionary) - return KeyedEncodingContainer(container) - } - - public mutating func nestedUnkeyedContainer() -> UnkeyedEncodingContainer { - self.codingPath.append(_PlistKey(index: self.count)) - defer { self.codingPath.removeLast() } - - let array = NSMutableArray() - self.container.add(array) - return _PlistUnkeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: array) - } - - public mutating func superEncoder() -> Encoder { - return __PlistReferencingEncoder(referencing: self.encoder, at: self.container.count, wrapping: self.container) - } -} - -extension __PlistEncoder : SingleValueEncodingContainer { - // MARK: - SingleValueEncodingContainer Methods - - private func assertCanEncodeNewValue() { - precondition(self.canEncodeNewValue, "Attempt to encode value through single value container when previously value already encoded.") - } - - public func encodeNil() throws { - assertCanEncodeNewValue() - self.storage.push(container: _plistNullNSString) - } - - public func encode(_ value: Bool) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int8) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int16) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int32) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Int64) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt8) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt16) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt32) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: UInt64) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: String) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Float) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: Double) throws { - assertCanEncodeNewValue() - self.storage.push(container: self.box(value)) - } - - public func encode(_ value: T) throws { - assertCanEncodeNewValue() - try self.storage.push(container: self.box(value)) - } -} - -// MARK: - Concrete Value Representations - -extension __PlistEncoder { - - /// Returns the given value boxed in a container appropriate for pushing onto the container stack. - fileprivate func box(_ value: Bool) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: Int) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: Int8) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: Int16) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: Int32) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: Int64) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: UInt) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: UInt8) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: UInt16) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: UInt32) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: UInt64) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: Float) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: Double) -> NSObject { return NSNumber(value: value) } - fileprivate func box(_ value: String) -> NSObject { return NSString(string: value) } - - fileprivate func box(_ value: T) throws -> NSObject { - return try self.box_(value) ?? NSDictionary() - } - - fileprivate func box_(_ value: T) throws -> NSObject? { - if T.self == Date.self || T.self == NSDate.self { - // PropertyListSerialization handles NSDate directly. - return (value as! NSDate) - } else if T.self == Data.self || T.self == NSData.self { - // PropertyListSerialization handles NSData directly. - return (value as! NSData) - } - - // The value should request a container from the __PlistEncoder. - let depth = self.storage.count - do { - try value.encode(to: self) - } catch let error { - // If the value pushed a container before throwing, pop it back off to restore state. - if self.storage.count > depth { - let _ = self.storage.popContainer() - } - - throw error - } - - // The top container should be a new container. - guard self.storage.count > depth else { - return nil - } - - return self.storage.popContainer() - } -} - -// MARK: - __PlistReferencingEncoder - -/// __PlistReferencingEncoder is a special subclass of __PlistEncoder which has its own storage, but references the contents of a different encoder. -/// It's used in superEncoder(), which returns a new encoder for encoding a superclass -- the lifetime of the encoder should not escape the scope it's created in, but it doesn't necessarily know when it's done being used (to write to the original container). -// NOTE: older overlays called this class _PlistReferencingEncoder. -// The two must coexist without a conflicting ObjC class name, so it -// was renamed. The old name must not be used in the new runtime. -fileprivate class __PlistReferencingEncoder : __PlistEncoder { - // MARK: Reference types. - - /// The type of container we're referencing. - private enum Reference { - /// Referencing a specific index in an array container. - case array(NSMutableArray, Int) - - /// Referencing a specific key in a dictionary container. - case dictionary(NSMutableDictionary, String) - } - - // MARK: - Properties - - /// The encoder we're referencing. - private let encoder: __PlistEncoder - - /// The container reference itself. - private let reference: Reference - - // MARK: - Initialization - - /// Initializes `self` by referencing the given array container in the given encoder. - fileprivate init(referencing encoder: __PlistEncoder, at index: Int, wrapping array: NSMutableArray) { - self.encoder = encoder - self.reference = .array(array, index) - super.init(options: encoder.options, codingPath: encoder.codingPath) - - self.codingPath.append(_PlistKey(index: index)) - } - - /// Initializes `self` by referencing the given dictionary container in the given encoder. - fileprivate init(referencing encoder: __PlistEncoder, at key: CodingKey, wrapping dictionary: NSMutableDictionary) { - self.encoder = encoder - self.reference = .dictionary(dictionary, key.stringValue) - super.init(options: encoder.options, codingPath: encoder.codingPath) - - self.codingPath.append(key) - } - - // MARK: - Coding Path Operations - - fileprivate override var canEncodeNewValue: Bool { - // With a regular encoder, the storage and coding path grow together. - // A referencing encoder, however, inherits its parents coding path, as well as the key it was created for. - // We have to take this into account. - return self.storage.count == self.codingPath.count - self.encoder.codingPath.count - 1 - } - - // MARK: - Deinitialization - - // Finalizes `self` by writing the contents of our storage to the referenced encoder's storage. - deinit { - let value: Any - switch self.storage.count { - case 0: value = NSDictionary() - case 1: value = self.storage.popContainer() - default: fatalError("Referencing encoder deallocated with multiple containers on stack.") - } - - switch self.reference { - case .array(let array, let index): - array.insert(value, at: index) - - case .dictionary(let dictionary, let key): - dictionary[NSString(string: key)] = value - } - } -} - -//===----------------------------------------------------------------------===// -// Plist Decoder -//===----------------------------------------------------------------------===// - -/// `PropertyListDecoder` facilitates the decoding of property list values into semantic `Decodable` types. -// NOTE: older overlays had Foundation.PropertyListDecoder as the ObjC -// name. The two must coexist, so it was renamed. The old name must not -// be used in the new runtime. _TtC10Foundation20_PropertyListDecoder -// is the mangled name for Foundation._PropertyListDecoder. -@_objcRuntimeName(_TtC10Foundation20_PropertyListDecoder) -open class PropertyListDecoder { - // MARK: Options - - /// Contextual user-provided information for use during decoding. - open var userInfo: [CodingUserInfoKey : Any] = [:] - - /// Options set on the top-level encoder to pass down the decoding hierarchy. - fileprivate struct _Options { - let userInfo: [CodingUserInfoKey : Any] - } - - /// The options set on the top-level decoder. - fileprivate var options: _Options { - return _Options(userInfo: userInfo) - } - - // MARK: - Constructing a Property List Decoder - - /// Initializes `self` with default strategies. - public init() {} - - // MARK: - Decoding Values - - /// Decodes a top-level value of the given type from the given property list representation. - /// - /// - parameter type: The type of the value to decode. - /// - parameter data: The data to decode from. - /// - returns: A value of the requested type. - /// - throws: `DecodingError.dataCorrupted` if values requested from the payload are corrupted, or if the given data is not a valid property list. - /// - throws: An error if any value throws an error during decoding. - open func decode(_ type: T.Type, from data: Data) throws -> T { - var format: PropertyListSerialization.PropertyListFormat = .binary - return try decode(type, from: data, format: &format) - } - - /// Decodes a top-level value of the given type from the given property list representation. - /// - /// - parameter type: The type of the value to decode. - /// - parameter data: The data to decode from. - /// - parameter format: The parsed property list format. - /// - returns: A value of the requested type along with the detected format of the property list. - /// - throws: `DecodingError.dataCorrupted` if values requested from the payload are corrupted, or if the given data is not a valid property list. - /// - throws: An error if any value throws an error during decoding. - open func decode(_ type: T.Type, from data: Data, format: inout PropertyListSerialization.PropertyListFormat) throws -> T { - let topLevel: Any - do { - topLevel = try PropertyListSerialization.propertyList(from: data, options: [], format: &format) - } catch { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: [], debugDescription: "The given data was not a valid property list.", underlyingError: error)) - } - - return try decode(type, fromTopLevel: topLevel) - } - - /// Decodes a top-level value of the given type from the given property list container (top-level array or dictionary). - /// - /// - parameter type: The type of the value to decode. - /// - parameter container: The top-level plist container. - /// - returns: A value of the requested type. - /// - throws: `DecodingError.dataCorrupted` if values requested from the payload are corrupted, or if the given data is not a valid property list. - /// - throws: An error if any value throws an error during decoding. - internal func decode(_ type: T.Type, fromTopLevel container: Any) throws -> T { - let decoder = __PlistDecoder(referencing: container, options: self.options) - guard let value = try decoder.unbox(container, as: type) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: [], debugDescription: "The given data did not contain a top-level value.")) - } - - return value - } -} - -// MARK: - __PlistDecoder - -// NOTE: older overlays called this class _PlistDecoder. The two must -// coexist without a conflicting ObjC class name, so it was renamed. -// The old name must not be used in the new runtime. -fileprivate class __PlistDecoder : Decoder { - // MARK: Properties - - /// The decoder's storage. - fileprivate var storage: _PlistDecodingStorage - - /// Options set on the top-level decoder. - fileprivate let options: PropertyListDecoder._Options - - /// The path to the current point in encoding. - fileprivate(set) public var codingPath: [CodingKey] - - /// Contextual user-provided information for use during encoding. - public var userInfo: [CodingUserInfoKey : Any] { - return self.options.userInfo - } - - // MARK: - Initialization - - /// Initializes `self` with the given top-level container and options. - fileprivate init(referencing container: Any, at codingPath: [CodingKey] = [], options: PropertyListDecoder._Options) { - self.storage = _PlistDecodingStorage() - self.storage.push(container: container) - self.codingPath = codingPath - self.options = options - } - - // MARK: - Decoder Methods - - public func container(keyedBy type: Key.Type) throws -> KeyedDecodingContainer { - guard !(self.storage.topContainer is NSNull) else { - throw DecodingError.valueNotFound(KeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get keyed decoding container -- found null value instead.")) - } - - guard let topContainer = self.storage.topContainer as? [String : Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: self.storage.topContainer) - } - - let container = _PlistKeyedDecodingContainer(referencing: self, wrapping: topContainer) - return KeyedDecodingContainer(container) - } - - public func unkeyedContainer() throws -> UnkeyedDecodingContainer { - guard !(self.storage.topContainer is NSNull) else { - throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get unkeyed decoding container -- found null value instead.")) - } - - guard let topContainer = self.storage.topContainer as? [Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: self.storage.topContainer) - } - - return _PlistUnkeyedDecodingContainer(referencing: self, wrapping: topContainer) - } - - public func singleValueContainer() throws -> SingleValueDecodingContainer { - return self - } -} - -// MARK: - Decoding Storage - -fileprivate struct _PlistDecodingStorage { - // MARK: Properties - - /// The container stack. - /// Elements may be any one of the plist types (NSNumber, Date, String, Array, [String : Any]). - private(set) fileprivate var containers: [Any] = [] - - // MARK: - Initialization - - /// Initializes `self` with no containers. - fileprivate init() {} - - // MARK: - Modifying the Stack - - fileprivate var count: Int { - return self.containers.count - } - - fileprivate var topContainer: Any { - precondition(!self.containers.isEmpty, "Empty container stack.") - return self.containers.last! - } - - fileprivate mutating func push(container: __owned Any) { - self.containers.append(container) - } - - fileprivate mutating func popContainer() { - precondition(!self.containers.isEmpty, "Empty container stack.") - self.containers.removeLast() - } -} - -// MARK: Decoding Containers - -fileprivate struct _PlistKeyedDecodingContainer : KeyedDecodingContainerProtocol { - typealias Key = K - - // MARK: Properties - - /// A reference to the decoder we're reading from. - private let decoder: __PlistDecoder - - /// A reference to the container we're reading from. - private let container: [String : Any] - - /// The path of coding keys taken to get to this point in decoding. - private(set) public var codingPath: [CodingKey] - - // MARK: - Initialization - - /// Initializes `self` by referencing the given decoder and container. - fileprivate init(referencing decoder: __PlistDecoder, wrapping container: [String : Any]) { - self.decoder = decoder - self.container = container - self.codingPath = decoder.codingPath - } - - // MARK: - KeyedDecodingContainerProtocol Methods - - public var allKeys: [Key] { - return self.container.keys.compactMap { Key(stringValue: $0) } - } - - public func contains(_ key: Key) -> Bool { - return self.container[key.stringValue] != nil - } - - public func decodeNil(forKey key: Key) throws -> Bool { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - guard let value = entry as? String else { - return false - } - - return value == _plistNull - } - - public func decode(_ type: Bool.Type, forKey key: Key) throws -> Bool { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Bool.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int.Type, forKey key: Key) throws -> Int { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int8.Type, forKey key: Key) throws -> Int8 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int8.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int16.Type, forKey key: Key) throws -> Int16 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int16.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int32.Type, forKey key: Key) throws -> Int32 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int32.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Int64.Type, forKey key: Key) throws -> Int64 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Int64.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt.Type, forKey key: Key) throws -> UInt { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt8.Type, forKey key: Key) throws -> UInt8 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt8.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt16.Type, forKey key: Key) throws -> UInt16 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt16.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt32.Type, forKey key: Key) throws -> UInt32 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt32.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: UInt64.Type, forKey key: Key) throws -> UInt64 { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: UInt64.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Float.Type, forKey key: Key) throws -> Float { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - guard let value = try self.decoder.unbox(entry, as: Float.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: Double.Type, forKey key: Key) throws -> Double { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: Double.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: String.Type, forKey key: Key) throws -> String { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: String.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func decode(_ type: T.Type, forKey key: Key) throws -> T { - guard let entry = self.container[key.stringValue] else { - throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) - } - - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = try self.decoder.unbox(entry, as: type) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) - } - - return value - } - - public func nestedContainer(keyedBy type: NestedKey.Type, forKey key: Key) throws -> KeyedDecodingContainer { - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = self.container[key.stringValue] else { - throw DecodingError.valueNotFound(KeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get nested keyed container -- no value found for key \"\(key.stringValue)\"")) - } - - guard let dictionary = value as? [String : Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: value) - } - - let container = _PlistKeyedDecodingContainer(referencing: self.decoder, wrapping: dictionary) - return KeyedDecodingContainer(container) - } - - public func nestedUnkeyedContainer(forKey key: Key) throws -> UnkeyedDecodingContainer { - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - guard let value = self.container[key.stringValue] else { - throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get nested unkeyed container -- no value found for key \"\(key.stringValue)\"")) - } - - guard let array = value as? [Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: value) - } - - return _PlistUnkeyedDecodingContainer(referencing: self.decoder, wrapping: array) - } - - private func _superDecoder(forKey key: __owned CodingKey) throws -> Decoder { - self.decoder.codingPath.append(key) - defer { self.decoder.codingPath.removeLast() } - - let value: Any = self.container[key.stringValue] ?? NSNull() - return __PlistDecoder(referencing: value, at: self.decoder.codingPath, options: self.decoder.options) - } - - public func superDecoder() throws -> Decoder { - return try _superDecoder(forKey: _PlistKey.super) - } - - public func superDecoder(forKey key: Key) throws -> Decoder { - return try _superDecoder(forKey: key) - } -} - -fileprivate struct _PlistUnkeyedDecodingContainer : UnkeyedDecodingContainer { - // MARK: Properties - - /// A reference to the decoder we're reading from. - private let decoder: __PlistDecoder - - /// A reference to the container we're reading from. - private let container: [Any] - - /// The path of coding keys taken to get to this point in decoding. - private(set) public var codingPath: [CodingKey] - - /// The index of the element we're about to decode. - private(set) public var currentIndex: Int - - // MARK: - Initialization - - /// Initializes `self` by referencing the given decoder and container. - fileprivate init(referencing decoder: __PlistDecoder, wrapping container: [Any]) { - self.decoder = decoder - self.container = container - self.codingPath = decoder.codingPath - self.currentIndex = 0 - } - - // MARK: - UnkeyedDecodingContainer Methods - - public var count: Int? { - return self.container.count - } - - public var isAtEnd: Bool { - return self.currentIndex >= self.count! - } - - public mutating func decodeNil() throws -> Bool { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(Any?.self, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - if self.container[self.currentIndex] is NSNull { - self.currentIndex += 1 - return true - } else { - return false - } - } - - public mutating func decode(_ type: Bool.Type) throws -> Bool { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Bool.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int.Type) throws -> Int { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int8.Type) throws -> Int8 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int8.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int16.Type) throws -> Int16 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int16.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int32.Type) throws -> Int32 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int32.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Int64.Type) throws -> Int64 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int64.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt.Type) throws -> UInt { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt8.Type) throws -> UInt8 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt8.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt16.Type) throws -> UInt16 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt16.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt32.Type) throws -> UInt32 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt32.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: UInt64.Type) throws -> UInt64 { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt64.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Float.Type) throws -> Float { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Float.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: Double.Type) throws -> Double { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Double.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: String.Type) throws -> String { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: String.self) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func decode(_ type: T.Type) throws -> T { - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) - } - - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: type) else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) - } - - self.currentIndex += 1 - return decoded - } - - public mutating func nestedContainer(keyedBy type: NestedKey.Type) throws -> KeyedDecodingContainer { - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(KeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get nested keyed container -- unkeyed container is at end.")) - } - - let value = self.container[self.currentIndex] - guard !(value is NSNull) else { - throw DecodingError.valueNotFound(KeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get keyed decoding container -- found null value instead.")) - } - - guard let dictionary = value as? [String : Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: value) - } - - self.currentIndex += 1 - let container = _PlistKeyedDecodingContainer(referencing: self.decoder, wrapping: dictionary) - return KeyedDecodingContainer(container) - } - - public mutating func nestedUnkeyedContainer() throws -> UnkeyedDecodingContainer { - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get nested unkeyed container -- unkeyed container is at end.")) - } - - let value = self.container[self.currentIndex] - guard !(value is NSNull) else { - throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, - DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get keyed decoding container -- found null value instead.")) - } - - guard let array = value as? [Any] else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: value) - } - - self.currentIndex += 1 - return _PlistUnkeyedDecodingContainer(referencing: self.decoder, wrapping: array) - } - - public mutating func superDecoder() throws -> Decoder { - self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) - defer { self.decoder.codingPath.removeLast() } - - guard !self.isAtEnd else { - throw DecodingError.valueNotFound(Decoder.self, DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Cannot get superDecoder() -- unkeyed container is at end.")) - } - - let value = self.container[self.currentIndex] - self.currentIndex += 1 - return __PlistDecoder(referencing: value, at: self.decoder.codingPath, options: self.decoder.options) - } -} - -extension __PlistDecoder : SingleValueDecodingContainer { - // MARK: SingleValueDecodingContainer Methods - - private func expectNonNull(_ type: T.Type) throws { - guard !self.decodeNil() else { - throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "Expected \(type) but found null value instead.")) - } - } - - public func decodeNil() -> Bool { - guard let string = self.storage.topContainer as? String else { - return false - } - - return string == _plistNull - } - - public func decode(_ type: Bool.Type) throws -> Bool { - try expectNonNull(Bool.self) - return try self.unbox(self.storage.topContainer, as: Bool.self)! - } - - public func decode(_ type: Int.Type) throws -> Int { - try expectNonNull(Int.self) - return try self.unbox(self.storage.topContainer, as: Int.self)! - } - - public func decode(_ type: Int8.Type) throws -> Int8 { - try expectNonNull(Int8.self) - return try self.unbox(self.storage.topContainer, as: Int8.self)! - } - - public func decode(_ type: Int16.Type) throws -> Int16 { - try expectNonNull(Int16.self) - return try self.unbox(self.storage.topContainer, as: Int16.self)! - } - - public func decode(_ type: Int32.Type) throws -> Int32 { - try expectNonNull(Int32.self) - return try self.unbox(self.storage.topContainer, as: Int32.self)! - } - - public func decode(_ type: Int64.Type) throws -> Int64 { - try expectNonNull(Int64.self) - return try self.unbox(self.storage.topContainer, as: Int64.self)! - } - - public func decode(_ type: UInt.Type) throws -> UInt { - try expectNonNull(UInt.self) - return try self.unbox(self.storage.topContainer, as: UInt.self)! - } - - public func decode(_ type: UInt8.Type) throws -> UInt8 { - try expectNonNull(UInt8.self) - return try self.unbox(self.storage.topContainer, as: UInt8.self)! - } - - public func decode(_ type: UInt16.Type) throws -> UInt16 { - try expectNonNull(UInt16.self) - return try self.unbox(self.storage.topContainer, as: UInt16.self)! - } - - public func decode(_ type: UInt32.Type) throws -> UInt32 { - try expectNonNull(UInt32.self) - return try self.unbox(self.storage.topContainer, as: UInt32.self)! - } - - public func decode(_ type: UInt64.Type) throws -> UInt64 { - try expectNonNull(UInt64.self) - return try self.unbox(self.storage.topContainer, as: UInt64.self)! - } - - public func decode(_ type: Float.Type) throws -> Float { - try expectNonNull(Float.self) - return try self.unbox(self.storage.topContainer, as: Float.self)! - } - - public func decode(_ type: Double.Type) throws -> Double { - try expectNonNull(Double.self) - return try self.unbox(self.storage.topContainer, as: Double.self)! - } - - public func decode(_ type: String.Type) throws -> String { - try expectNonNull(String.self) - return try self.unbox(self.storage.topContainer, as: String.self)! - } - - public func decode(_ type: T.Type) throws -> T { - try expectNonNull(type) - return try self.unbox(self.storage.topContainer, as: type)! - } -} - -// MARK: - Concrete Value Representations - -extension __PlistDecoder { - /// Returns the given value unboxed from a container. - fileprivate func unbox(_ value: Any, as type: Bool.Type) throws -> Bool? { - if let string = value as? String, string == _plistNull { return nil } - - if let number = value as? NSNumber { - // TODO: Add a flag to coerce non-boolean numbers into Bools? - if number === NSNumber(booleanLiteral: true) { - return true - } else if number === NSNumber(booleanLiteral: false) { - return false - } - - /* FIXME: If swift-corelibs-foundation doesn't change to use NSNumber, this code path will need to be included and tested: - } else if let bool = value as? Bool { - return bool - */ - - } - - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - fileprivate func unbox(_ value: Any, as type: Int.Type) throws -> Int? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int = number.intValue - guard NSNumber(value: int) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return int - } - - fileprivate func unbox(_ value: Any, as type: Int8.Type) throws -> Int8? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int8 = number.int8Value - guard NSNumber(value: int8) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return int8 - } - - fileprivate func unbox(_ value: Any, as type: Int16.Type) throws -> Int16? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int16 = number.int16Value - guard NSNumber(value: int16) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return int16 - } - - fileprivate func unbox(_ value: Any, as type: Int32.Type) throws -> Int32? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int32 = number.int32Value - guard NSNumber(value: int32) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return int32 - } - - fileprivate func unbox(_ value: Any, as type: Int64.Type) throws -> Int64? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let int64 = number.int64Value - guard NSNumber(value: int64) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return int64 - } - - fileprivate func unbox(_ value: Any, as type: UInt.Type) throws -> UInt? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint = number.uintValue - guard NSNumber(value: uint) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return uint - } - - fileprivate func unbox(_ value: Any, as type: UInt8.Type) throws -> UInt8? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint8 = number.uint8Value - guard NSNumber(value: uint8) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return uint8 - } - - fileprivate func unbox(_ value: Any, as type: UInt16.Type) throws -> UInt16? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint16 = number.uint16Value - guard NSNumber(value: uint16) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return uint16 - } - - fileprivate func unbox(_ value: Any, as type: UInt32.Type) throws -> UInt32? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint32 = number.uint32Value - guard NSNumber(value: uint32) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return uint32 - } - - fileprivate func unbox(_ value: Any, as type: UInt64.Type) throws -> UInt64? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let uint64 = number.uint64Value - guard NSNumber(value: uint64) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return uint64 - } - - fileprivate func unbox(_ value: Any, as type: Float.Type) throws -> Float? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let float = number.floatValue - guard NSNumber(value: float) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return float - } - - fileprivate func unbox(_ value: Any, as type: Double.Type) throws -> Double? { - if let string = value as? String, string == _plistNull { return nil } - - guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - let double = number.doubleValue - guard NSNumber(value: double) == number else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) - } - - return double - } - - fileprivate func unbox(_ value: Any, as type: String.Type) throws -> String? { - guard let string = value as? String else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - return string == _plistNull ? nil : string - } - - fileprivate func unbox(_ value: Any, as type: Date.Type) throws -> Date? { - if let string = value as? String, string == _plistNull { return nil } - - guard let date = value as? Date else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - return date - } - - fileprivate func unbox(_ value: Any, as type: Data.Type) throws -> Data? { - if let string = value as? String, string == _plistNull { return nil } - - guard let data = value as? Data else { - throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) - } - - return data - } - - fileprivate func unbox(_ value: Any, as type: T.Type) throws -> T? { - if type == Date.self || type == NSDate.self { - return try self.unbox(value, as: Date.self) as? T - } else if type == Data.self || type == NSData.self { - return try self.unbox(value, as: Data.self) as? T - } else { - self.storage.push(container: value) - defer { self.storage.popContainer() } - return try type.init(from: self) - } - } -} - -//===----------------------------------------------------------------------===// -// Shared Plist Null Representation -//===----------------------------------------------------------------------===// - -// Since plists do not support null values by default, we will encode them as "$null". -fileprivate let _plistNull = "$null" -fileprivate let _plistNullNSString = NSString(string: _plistNull) - -//===----------------------------------------------------------------------===// -// Shared Key Types -//===----------------------------------------------------------------------===// - -fileprivate struct _PlistKey : CodingKey { - public var stringValue: String - public var intValue: Int? - - public init?(stringValue: String) { - self.stringValue = stringValue - self.intValue = nil - } - - public init?(intValue: Int) { - self.stringValue = "\(intValue)" - self.intValue = intValue - } - - fileprivate init(index: Int) { - self.stringValue = "Index \(index)" - self.intValue = index - } - - fileprivate static let `super` = _PlistKey(stringValue: "super")! -} diff --git a/Sources/Foundation/PropertyListSerialization.swift b/Sources/Foundation/PropertyListSerialization.swift index 1ca5015b50..9cdb861057 100644 --- a/Sources/Foundation/PropertyListSerialization.swift +++ b/Sources/Foundation/PropertyListSerialization.swift @@ -23,12 +23,7 @@ extension PropertyListSerialization { public static let mutableContainersAndLeaves = MutabilityOptions(rawValue: 2) } - public enum PropertyListFormat : UInt { - - case openStep = 1 - case xml = 100 - case binary = 200 - } + public typealias PropertyListFormat = PropertyListDecoder.PropertyListFormat public typealias ReadOptions = MutabilityOptions public typealias WriteOptions = Int From 9494d4b3ba7ea8e775475aa978b4d227d8d0137d Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Thu, 2 May 2024 08:09:36 -0700 Subject: [PATCH 062/198] Remove ProcessInfo in favor of swift-foundation's implementation (#4945) --- Package.swift | 2 +- Sources/Foundation/ProcessInfo.swift | 361 +------------------------ Tests/Foundation/TestProcessInfo.swift | 33 +-- 3 files changed, 3 insertions(+), 393 deletions(-) diff --git a/Package.swift b/Package.swift index 002119673f..bb4990394b 100644 --- a/Package.swift +++ b/Package.swift @@ -78,7 +78,7 @@ let package = Package( from: "0.0.5"), .package( url: "https://github.com/apple/swift-foundation", - revision: "512befd01fc17c2c9cfe2ecdfec568f342c19d36" + revision: "7eb8b598ad8f77ac743b2decc97d56bf350aedee" ), ], targets: [ diff --git a/Sources/Foundation/ProcessInfo.swift b/Sources/Foundation/ProcessInfo.swift index 4c5a483dd1..e7928d53cd 100644 --- a/Sources/Foundation/ProcessInfo.swift +++ b/Sources/Foundation/ProcessInfo.swift @@ -1,6 +1,6 @@ // This source file is part of the Swift.org open source project // -// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors +// Copyright (c) 2014 - 2024 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See http://swift.org/LICENSE.txt for license information @@ -8,365 +8,6 @@ // @_implementationOnly import _CoreFoundation -#if os(Windows) -import WinSDK -#endif - -public struct OperatingSystemVersion { - public var majorVersion: Int - public var minorVersion: Int - public var patchVersion: Int - public init() { - self.init(majorVersion: 0, minorVersion: 0, patchVersion: 0) - } - - public init(majorVersion: Int, minorVersion: Int, patchVersion: Int) { - self.majorVersion = majorVersion - self.minorVersion = minorVersion - self.patchVersion = patchVersion - } -} - - - -open class ProcessInfo: NSObject { - - public static let processInfo = ProcessInfo() - - internal override init() { - - } - - open var environment: [String : String] { - let equalSign = Character("=") - let strEncoding = String.defaultCStringEncoding - let envp = _CFEnviron() - var env: [String : String] = [:] - var idx = 0 - - while let entry = envp.advanced(by: idx).pointee { - if let entry = String(cString: entry, encoding: strEncoding), - let i = entry.firstIndex(of: equalSign) { - let key = String(entry.prefix(upTo: i)) - let value = String(entry.suffix(from: i).dropFirst()) - env[key] = value - } - idx += 1 - } - return env - } - - open var arguments: [String] { - return CommandLine.arguments // seems reasonable to flip the script here... - } - - open var hostName: String { - if let name = Host.current().name { - return name - } else { - return "localhost" - } - } - - open var processName: String = _CFProcessNameString()._swiftObject - - open var processIdentifier: Int32 { -#if os(Windows) - return Int32(GetProcessId(GetCurrentProcess())) -#else - return Int32(getpid()) -#endif - } - - open var globallyUniqueString: String { - let uuid = CFUUIDCreate(kCFAllocatorSystemDefault) - return CFUUIDCreateString(kCFAllocatorSystemDefault, uuid)._swiftObject - } - -#if os(Windows) - internal var _rawOperatingSystemVersionInfo: RTL_OSVERSIONINFOEXW? { - guard let ntdll = ("ntdll.dll".withCString(encodedAs: UTF16.self) { - LoadLibraryExW($0, nil, DWORD(LOAD_LIBRARY_SEARCH_SYSTEM32)) - }) else { - return nil - } - defer { FreeLibrary(ntdll) } - typealias RTLGetVersionTy = @convention(c) (UnsafeMutablePointer) -> NTSTATUS - guard let pfnRTLGetVersion = unsafeBitCast(GetProcAddress(ntdll, "RtlGetVersion"), to: Optional.self) else { - return nil - } - var osVersionInfo = RTL_OSVERSIONINFOEXW() - osVersionInfo.dwOSVersionInfoSize = DWORD(MemoryLayout.size) - guard pfnRTLGetVersion(&osVersionInfo) == 0 else { - return nil - } - return osVersionInfo - } -#endif - - internal lazy var _operatingSystemVersionString: String = { -#if canImport(Darwin) - // Just use CoreFoundation on Darwin - return CFCopySystemVersionString()?._swiftObject ?? "Darwin" -#elseif os(Linux) - // Try to parse a `PRETTY_NAME` out of `/etc/os-release`. - if let osReleaseContents = try? String(contentsOf: URL(fileURLWithPath: "/etc/os-release", isDirectory: false)), - let name = osReleaseContents.split(separator: "\n").first(where: { $0.hasPrefix("PRETTY_NAME=") }) - { - // This is extremely simplistic but manages to work for all known cases. - return String(name.dropFirst("PRETTY_NAME=".count).trimmingCharacters(in: .init(charactersIn: "\""))) - } - - // Okay, we can't get a distro name, so try for generic info. - var versionString = "Linux" - - // Try to get a release version number from `uname -r`. - var utsNameBuffer = utsname() - if uname(&utsNameBuffer) == 0 { - let release = withUnsafePointer(to: &utsNameBuffer.release.0) { String(cString: $0) } - if !release.isEmpty { - versionString += " \(release)" - } - } - - return versionString -#elseif os(Windows) - var versionString = "Windows" - - guard let osVersionInfo = self._rawOperatingSystemVersionInfo else { - return versionString - } - - // Windows has no canonical way to turn the fairly complex `RTL_OSVERSIONINFOW` version info into a string. We - // do our best here to construct something consistent. Unfortunately, to provide a useful result, this requires - // hardcoding several of the somewhat ambiguous values in the table provided here: - // https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ns-wdm-_osversioninfoexw#remarks - switch (osVersionInfo.dwMajorVersion, osVersionInfo.dwMinorVersion) { - case (5, 0): versionString += " 2000" - case (5, 1): versionString += " XP" - case (5, 2) where osVersionInfo.wProductType == VER_NT_WORKSTATION: versionString += " XP Professional x64" - case (5, 2) where osVersionInfo.wSuiteMask == VER_SUITE_WH_SERVER: versionString += " Home Server" - case (5, 2): versionString += " Server 2003" - case (6, 0) where osVersionInfo.wProductType == VER_NT_WORKSTATION: versionString += " Vista" - case (6, 0): versionString += " Server 2008" - case (6, 1) where osVersionInfo.wProductType == VER_NT_WORKSTATION: versionString += " 7" - case (6, 1): versionString += " Server 2008 R2" - case (6, 2) where osVersionInfo.wProductType == VER_NT_WORKSTATION: versionString += " 8" - case (6, 2): versionString += " Server 2012" - case (6, 3) where osVersionInfo.wProductType == VER_NT_WORKSTATION: versionString += " 8.1" - case (6, 3): versionString += " Server 2012 R2" // We assume the "10,0" numbers in the table for this are a typo - case (10, 0) where osVersionInfo.wProductType == VER_NT_WORKSTATION: versionString += " 10" - case (10, 0): versionString += " Server 2019" // The table gives identical values for 2016 and 2019, so we just assume 2019 here - case let (maj, min): versionString += " \(maj).\(min)" // If all else fails, just give the raw version number - } - versionString += " (build \(osVersionInfo.dwBuildNumber))" - // For now we ignore the `szCSDVersion`, `wServicePackMajor`, and `wServicePackMinor` values. - return versionString -#elseif os(FreeBSD) - // Try to get a release version from `uname -r`. - var versionString = "FreeBSD" - var utsNameBuffer = utsname() - if uname(&utsNameBuffer) == 0 { - let release = withUnsafePointer(to: &utsNameBuffer.release.0) { String(cString: $0) } - if !release.isEmpty { - versionString += " \(release)" - } - } - return versionString -#elseif os(OpenBSD) - // TODO: `uname -r` probably works here too. - return "OpenBSD" -#elseif os(Android) - /// In theory, we need to do something like this: - /// - /// var versionString = "Android" - /// let property = String(unsafeUninitializedCapacity: PROP_VALUE_MAX) { buf in - /// __system_property_get("ro.build.description", buf.baseAddress!) - /// } - /// if !property.isEmpty { - /// versionString += " \(property)" - /// } - /// return versionString - return "Android" -#elseif os(PS4) - return "PS4" -#elseif os(Cygwin) - // TODO: `uname -r` probably works here too. - return "Cygwin" -#elseif os(Haiku) - return "Haiku" -#elseif os(WASI) - return "WASI" -#else - // On other systems at least return something. - return "Unknown" -#endif - }() - open var operatingSystemVersionString: String { return _operatingSystemVersionString } - - open var operatingSystemVersion: OperatingSystemVersion { - // The following fallback values match Darwin Foundation - let fallbackMajor = -1 - let fallbackMinor = 0 - let fallbackPatch = 0 - let versionString: String - -#if canImport(Darwin) - guard let systemVersionDictionary = _CFCopySystemVersionDictionary() else { - return OperatingSystemVersion(majorVersion: fallbackMajor, minorVersion: fallbackMinor, patchVersion: fallbackPatch) - } - - let productVersionKey = unsafeBitCast(_kCFSystemVersionProductVersionKey, to: UnsafeRawPointer.self) - guard let productVersion = unsafeBitCast(CFDictionaryGetValue(systemVersionDictionary, productVersionKey), to: NSString?.self) else { - return OperatingSystemVersion(majorVersion: fallbackMajor, minorVersion: fallbackMinor, patchVersion: fallbackPatch) - } - versionString = productVersion._swiftObject -#elseif os(Windows) - guard let osVersionInfo = self._rawOperatingSystemVersionInfo else { - return OperatingSystemVersion(majorVersion: fallbackMajor, minorVersion: fallbackMinor, patchVersion: fallbackPatch) - } - - return OperatingSystemVersion( - majorVersion: Int(osVersionInfo.dwMajorVersion), - minorVersion: Int(osVersionInfo.dwMinorVersion), - patchVersion: Int(osVersionInfo.dwBuildNumber) - ) -#elseif os(Linux) || os(FreeBSD) || os(OpenBSD) || os(Android) - var utsNameBuffer = utsname() - guard uname(&utsNameBuffer) == 0 else { - return OperatingSystemVersion(majorVersion: fallbackMajor, minorVersion: fallbackMinor, patchVersion: fallbackPatch) - } - let release = withUnsafePointer(to: &utsNameBuffer.release.0) { - return String(cString: $0) - } - let idx = release.firstIndex(of: "-") ?? release.endIndex - versionString = String(release[.. Bool { - let ourVersion = operatingSystemVersion - if ourVersion.majorVersion < version.majorVersion { - return false - } - if ourVersion.majorVersion > version.majorVersion { - return true - } - if ourVersion.minorVersion < version.minorVersion { - return false - } - if ourVersion.minorVersion > version.minorVersion { - return true - } - if ourVersion.patchVersion < version.patchVersion { - return false - } - if ourVersion.patchVersion > version.patchVersion { - return true - } - return true - } - - open var systemUptime: TimeInterval { - return CFGetSystemUptime() - } - - open var userName: String { - return NSUserName() - } - - open var fullUserName: String { - return NSFullUserName() - } - - -#if os(Linux) - // Support for CFS quotas for cpu count as used by Docker. - // Based on swift-nio code, https://github.com/apple/swift-nio/pull/1518 - private static let cfsQuotaPath = "/sys/fs/cgroup/cpu/cpu.cfs_quota_us" - private static let cfsPeriodPath = "/sys/fs/cgroup/cpu/cpu.cfs_period_us" - private static let cpuSetPath = "/sys/fs/cgroup/cpuset/cpuset.cpus" - - private static func firstLineOfFile(path: String) throws -> Substring { - // TODO: Replace with URL version once that is available in FoundationEssentials - let data = try Data(contentsOf: path) - if let string = String(data: data, encoding: .utf8), let line = string.split(separator: "\n").first { - return line - } else { - return "" - } - } - - // These are internal access for testing - static func countCoreIds(cores: Substring) -> Int? { - let ids = cores.split(separator: "-", maxSplits: 1) - guard let first = ids.first.flatMap({ Int($0, radix: 10) }), - let last = ids.last.flatMap({ Int($0, radix: 10) }), - last >= first - else { - return nil - } - return 1 + last - first - } - - static func coreCount(cpuset cpusetPath: String) -> Int? { - guard let cpuset = try? firstLineOfFile(path: cpusetPath).split(separator: ","), - !cpuset.isEmpty - else { return nil } - if let first = cpuset.first, let count = countCoreIds(cores: first) { - return count - } else { - return nil - } - } - - static func coreCount(quota quotaPath: String, period periodPath: String) -> Int? { - guard let quota = try? Int(firstLineOfFile(path: quotaPath)), - quota > 0 - else { return nil } - guard let period = try? Int(firstLineOfFile(path: periodPath)), - period > 0 - else { return nil } - - return (quota - 1 + period) / period // always round up if fractional CPU quota requested - } - - private static func coreCount() -> Int? { - if let quota = coreCount(quota: cfsQuotaPath, period: cfsPeriodPath) { - return quota - } else if let cpusetCount = coreCount(cpuset: cpuSetPath) { - return cpusetCount - } else { - return nil - } - } -#endif -} // SPI for TestFoundation internal extension ProcessInfo { diff --git a/Tests/Foundation/TestProcessInfo.swift b/Tests/Foundation/TestProcessInfo.swift index c948d4bb14..fdfdb3ca6a 100644 --- a/Tests/Foundation/TestProcessInfo.swift +++ b/Tests/Foundation/TestProcessInfo.swift @@ -70,7 +70,7 @@ class TestProcessInfo : XCTestCase { let uuid = ProcessInfo.processInfo.globallyUniqueString let parts = uuid.components(separatedBy: "-") - XCTAssertEqual(parts.count, 5) + XCTAssertEqual(parts.count, 7) XCTAssertEqual(parts[0].utf16.count, 8) XCTAssertEqual(parts[1].utf16.count, 4) XCTAssertEqual(parts[2].utf16.count, 4) @@ -130,35 +130,4 @@ class TestProcessInfo : XCTestCase { XCTAssertEqual(env["var4"], "x=") XCTAssertEqual(env["var5"], "=x=") } - - -#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT && os(Linux) - func test_cfquota_parsing() throws { - - let tests = [ - ("50000", "100000", 1), - ("100000", "100000", 1), - ("100000\n", "100000", 1), - ("100000", "100000\n", 1), - ("150000", "100000", 2), - ("200000", "100000", 2), - ("-1", "100000", nil), - ("100000", "-1", nil), - ("", "100000", nil), - ("100000", "", nil), - ("100000", "0", nil) - ] - - try withTemporaryDirectory() { (_, tempDirPath) -> Void in - try tests.forEach { quota, period, count in - let (fd1, quotaPath) = try _NSCreateTemporaryFile(tempDirPath + "/quota") - FileHandle(fileDescriptor: fd1, closeOnDealloc: true).write(quota) - - let (fd2, periodPath) = try _NSCreateTemporaryFile(tempDirPath + "/period") - FileHandle(fileDescriptor: fd2, closeOnDealloc: true).write(period) - XCTAssertEqual(ProcessInfo.coreCount(quota: quotaPath, period: periodPath), count) - } - } - } -#endif } From d8f1bfe732298f1abebfcfb648a44cbc00295402 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Mon, 6 May 2024 10:34:40 -0700 Subject: [PATCH 063/198] Remove String APIs implemented in swift-foundation (#4946) --- Sources/Foundation/NSStringAPI.swift | 137 --------------------------- 1 file changed, 137 deletions(-) diff --git a/Sources/Foundation/NSStringAPI.swift b/Sources/Foundation/NSStringAPI.swift index 00b5d08bca..f7b65b5278 100644 --- a/Sources/Foundation/NSStringAPI.swift +++ b/Sources/Foundation/NSStringAPI.swift @@ -669,47 +669,6 @@ extension StringProtocol { return _ns.canBeConverted(to: encoding.rawValue) } - // @property NSString* capitalizedString - - /// A copy of the string with each word changed to its corresponding - /// capitalized spelling. - /// - /// This property performs the canonical (non-localized) mapping. It is - /// suitable for programming operations that require stable results not - /// depending on the current locale. - /// - /// A capitalized string is a string with the first character in each word - /// changed to its corresponding uppercase value, and all remaining - /// characters set to their corresponding lowercase values. A "word" is any - /// sequence of characters delimited by spaces, tabs, or line terminators. - /// Some common word delimiting punctuation isn't considered, so this - /// property may not generally produce the desired results for multiword - /// strings. See the `getLineStart(_:end:contentsEnd:for:)` method for - /// additional information. - /// - /// Case transformations aren’t guaranteed to be symmetrical or to produce - /// strings of the same lengths as the originals. - public var capitalized: String { - return _ns.capitalized as String - } - - // @property (readonly, copy) NSString *localizedCapitalizedString NS_AVAILABLE(10_11, 9_0); - - /// A capitalized representation of the string that is produced - /// using the current locale. - @available(macOS 10.11, iOS 9.0, *) - public var localizedCapitalized: String { - return _ns.localizedCapitalized - } - - // - (NSString *)capitalizedStringWithLocale:(Locale *)locale - - /// Returns a capitalized representation of the string - /// using the specified locale. - public func capitalized(with locale: Locale?) -> String { - return _ns.capitalized(with: locale) as String - } - // - (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString /// Returns the result of invoking `compare:options:` with @@ -863,44 +822,6 @@ extension StringProtocol { return _ns.components(separatedBy: separator) } - // - (NSArray *)componentsSeparatedByString:(NSString *)separator - - /// Returns an array containing substrings from the string that have been - /// divided by the given separator. - /// - /// The substrings in the resulting array appear in the same order as the - /// original string. Adjacent occurrences of the separator string produce - /// empty strings in the result. Similarly, if the string begins or ends - /// with the separator, the first or last substring, respectively, is empty. - /// The following example shows this behavior: - /// - /// let list1 = "Karin, Carrie, David" - /// let items1 = list1.components(separatedBy: ", ") - /// // ["Karin", "Carrie", "David"] - /// - /// // Beginning with the separator: - /// let list2 = ", Norman, Stanley, Fletcher" - /// let items2 = list2.components(separatedBy: ", ") - /// // ["", "Norman", "Stanley", "Fletcher" - /// - /// If the list has no separators, the array contains only the original - /// string itself. - /// - /// let name = "Karin" - /// let list = name.components(separatedBy: ", ") - /// // ["Karin"] - /// - /// - Parameter separator: The separator string. - /// - Returns: An array containing substrings that have been divided from the - /// string using `separator`. - // FIXME(strings): now when String conforms to Collection, this can be - // replaced by split(separator:maxSplits:omittingEmptySubsequences:) - public func components< - T : StringProtocol - >(separatedBy separator: T) -> [String] { - return _ns.components(separatedBy: separator._ephemeralString) - } - // - (const char *)cStringUsingEncoding:(NSStringEncoding)encoding /// Returns a representation of the string as a C string @@ -1022,24 +943,6 @@ extension StringProtocol { //===--- Omitted for consistency with API review results 5/20/2014 ------===// // @property long long longLongValue - // @property (readonly, copy) NSString *localizedLowercase NS_AVAILABLE(10_11, 9_0); - - /// A lowercase version of the string that is produced using the current - /// locale. - @available(macOS 10.11, iOS 9.0, *) - public var localizedLowercase: String { - return _ns.localizedLowercase - } - - // - (NSString *)lowercaseStringWithLocale:(Locale *)locale - - /// Returns a version of the string with all letters - /// converted to lowercase, taking into account the specified - /// locale. - public func lowercased(with locale: Locale?) -> String { - return _ns.lowercased(with: locale) - } - // - (NSUInteger)maximumLengthOfBytesUsingEncoding:(NSStringEncoding)enc /// Returns the maximum number of bytes needed to store the @@ -1262,24 +1165,6 @@ extension StringProtocol { return _ns.trimmingCharacters(in: set) } - // @property (readonly, copy) NSString *localizedUppercaseString NS_AVAILABLE(10_11, 9_0); - - /// An uppercase version of the string that is produced using the current - /// locale. - @available(macOS 10.11, iOS 9.0, *) - public var localizedUppercase: String { - return _ns.localizedUppercase as String - } - - // - (NSString *)uppercaseStringWithLocale:(Locale *)locale - - /// Returns a version of the string with all letters - /// converted to uppercase, taking into account the specified - /// locale. - public func uppercased(with locale: Locale?) -> String { - return _ns.uppercased(with: locale) - } - //===--- Omitted due to redundancy with "utf8" property -----------------===// // - (const char *)UTF8String @@ -1569,17 +1454,6 @@ extension StringProtocol { // @property BOOL absolutePath; // - (BOOL)isEqualToString:(NSString *)aString - // - (NSRange)lineRangeForRange:(NSRange)aRange - - /// Returns the range of characters representing the line or lines - /// containing a given range. - public func lineRange< - R : RangeExpression - >(for aRange: R) -> Range where R.Bound == Index { - return _toRange(_ns.lineRange( - for: _toRelativeNSRange(aRange.relative(to: self)))) - } - #if !DEPLOYMENT_RUNTIME_SWIFT // - (NSArray *) // linguisticTagsInRange:(NSRange)range @@ -1617,17 +1491,6 @@ extension StringProtocol { return result as! [String] } - - // - (NSRange)paragraphRangeForRange:(NSRange)aRange - - /// Returns the range of characters representing the - /// paragraph or paragraphs containing a given range. - public func paragraphRange< - R : RangeExpression - >(for aRange: R) -> Range where R.Bound == Index { - return _toRange( - _ns.paragraphRange(for: _toRelativeNSRange(aRange.relative(to: self)))) - } #endif // - (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)aSet From d3871a5db757c734563b09bdece19e274255e7ad Mon Sep 17 00:00:00 2001 From: Alexander Smarus Date: Sun, 12 May 2024 23:12:12 +0300 Subject: [PATCH 064/198] [Windows] Use `fd_set` according to Winsock2 specifics Fixes https://github.com/apple/swift/issues/73532. On Windows, socket handles in a `fd_set` are not represented as bit flags as in Berkeley sockets. While we have no `fd_set` dynamic growth in this implementation, the `FD_SETSIZE` defined as 1024 in `CoreFoundation_Prefix.h` should be enough for majority of tasks. --- CoreFoundation/RunLoop.subproj/CFSocket.c | 80 +++++++++++++++++++-- Tests/Foundation/Tests/TestSocketPort.swift | 44 ++++++++++++ 2 files changed, 118 insertions(+), 6 deletions(-) diff --git a/CoreFoundation/RunLoop.subproj/CFSocket.c b/CoreFoundation/RunLoop.subproj/CFSocket.c index 357dab6838..475d99c574 100644 --- a/CoreFoundation/RunLoop.subproj/CFSocket.c +++ b/CoreFoundation/RunLoop.subproj/CFSocket.c @@ -213,13 +213,30 @@ CF_INLINE int __CFSocketLastError(void) { } CF_INLINE CFIndex __CFSocketFdGetSize(CFDataRef fdSet) { +#if TARGET_OS_WIN32 + if (CFDataGetLength(fdSet) == 0) { + return 0; + } + return FD_SETSIZE; +#else return NBBY * CFDataGetLength(fdSet); +#endif } CF_INLINE Boolean __CFSocketFdSet(CFSocketNativeHandle sock, CFMutableDataRef fdSet) { /* returns true if a change occurred, false otherwise */ Boolean retval = false; if (INVALID_SOCKET != sock && 0 <= sock) { + fd_set *fds; +#if TARGET_OS_WIN32 + if (CFDataGetLength(fdSet) == 0) { + CFDataIncreaseLength(fdSet, sizeof(fd_set)); + fds = (fd_set *)CFDataGetMutableBytePtr(fdSet); + FD_ZERO(fds); + } else { + fds = (fd_set *)CFDataGetMutableBytePtr(fdSet); + } +#else CFIndex numFds = NBBY * CFDataGetLength(fdSet); fd_mask *fds_bits; if (sock >= numFds) { @@ -230,9 +247,11 @@ CF_INLINE Boolean __CFSocketFdSet(CFSocketNativeHandle sock, CFMutableDataRef fd } else { fds_bits = (fd_mask *)CFDataGetMutableBytePtr(fdSet); } - if (!FD_ISSET(sock, (fd_set *)fds_bits)) { + fds = (fd_set *)fds_bits; +#endif + if (!FD_ISSET(sock, fds)) { retval = true; - FD_SET(sock, (fd_set *)fds_bits); + FD_SET(sock, fds); } } return retval; @@ -416,6 +435,15 @@ CF_INLINE Boolean __CFSocketFdClr(CFSocketNativeHandle sock, CFMutableDataRef fd /* returns true if a change occurred, false otherwise */ Boolean retval = false; if (INVALID_SOCKET != sock && 0 <= sock) { +#if TARGET_OS_WIN32 + if (CFDataGetLength(fdSet) > 0) { + fd_set *fds = (fd_set *)CFDataGetMutableBytePtr(fdSet); + if (FD_ISSET(sock, fds)) { + retval = true; + FD_CLR(sock, fds); + } + } +#else CFIndex numFds = NBBY * CFDataGetLength(fdSet); fd_mask *fds_bits; if (sock < numFds) { @@ -425,6 +453,7 @@ CF_INLINE Boolean __CFSocketFdClr(CFSocketNativeHandle sock, CFMutableDataRef fd FD_CLR(sock, (fd_set *)fds_bits); } } +#endif } return retval; } @@ -1188,6 +1217,27 @@ static void clearInvalidFileDescriptors(CFMutableDataRef d) { if (d) { +#if TARGET_OS_WIN32 + if (CFDataGetLength(d) == 0) { + return; + } + + fd_set *fds = (fd_set *)CFDataGetMutableBytePtr(d); + fd_set invalidFds; + FD_ZERO(&invalidFds); + // Gather all invalid sockets into invalidFds set + for (u_int idx = 0; idx < fds->fd_count; idx++) { + SOCKET socket = fds->fd_array[idx]; + if (! __CFNativeSocketIsValid(socket)) { + FD_SET(socket, &invalidFds); + } + } + // Remove invalid sockets from source set + for (u_int idx = 0; idx < invalidFds.fd_count; idx++) { + SOCKET socket = invalidFds.fd_array[idx]; + FD_CLR(socket, fds); + } +#else SInt32 count = __CFSocketFdGetSize(d); fd_set* s = (fd_set*) CFDataGetMutableBytePtr(d); for (SInt32 idx = 0; idx < count; idx++) { @@ -1196,14 +1246,13 @@ clearInvalidFileDescriptors(CFMutableDataRef d) FD_CLR(idx, s); } } +#endif } } static void -manageSelectError() +manageSelectError(SInt32 selectError) { - SInt32 selectError = __CFSocketLastError(); - __CFSOCKETLOG("socket manager received error %ld from select", (long)selectError); if (EBADF == selectError) { @@ -1263,8 +1312,15 @@ static void *__CFSocketManager(void * arg) SInt32 nrfds, maxnrfds, fdentries = 1; SInt32 rfds, wfds; fd_set *exceptfds = NULL; +#if TARGET_OS_WIN32 + fd_set *writefds = (fd_set *)CFAllocatorAllocate(kCFAllocatorSystemDefault, sizeof(fd_set), 0); + fd_set *readfds = (fd_set *)CFAllocatorAllocate(kCFAllocatorSystemDefault, sizeof(fd_set), 0); + FD_ZERO(writefds); + FD_ZERO(readfds); +#else fd_set *writefds = (fd_set *)CFAllocatorAllocate(kCFAllocatorSystemDefault, fdentries * sizeof(fd_mask), 0); fd_set *readfds = (fd_set *)CFAllocatorAllocate(kCFAllocatorSystemDefault, fdentries * sizeof(fd_mask), 0); +#endif fd_set *tempfds; SInt32 idx, cnt; uint8_t buffer[256]; @@ -1290,6 +1346,11 @@ static void *__CFSocketManager(void * arg) free(readBuffer); free(writeBuffer); #endif + +#if TARGET_OS_WIN32 + // This parameter is ignored by `select` from Winsock2 API + maxnrfds = INT_MAX; +#else rfds = __CFSocketFdGetSize(__CFReadSocketsFds); wfds = __CFSocketFdGetSize(__CFWriteSocketsFds); maxnrfds = __CFMax(rfds, wfds); @@ -1300,6 +1361,7 @@ static void *__CFSocketManager(void * arg) } memset(writefds, 0, fdentries * sizeof(fd_mask)); memset(readfds, 0, fdentries * sizeof(fd_mask)); +#endif CFDataGetBytes(__CFWriteSocketsFds, CFRangeMake(0, CFDataGetLength(__CFWriteSocketsFds)), (UInt8 *)writefds); CFDataGetBytes(__CFReadSocketsFds, CFRangeMake(0, CFDataGetLength(__CFReadSocketsFds)), (UInt8 *)readfds); @@ -1345,7 +1407,13 @@ static void *__CFSocketManager(void * arg) } #endif + SInt32 error = 0; nrfds = select(maxnrfds, readfds, writefds, exceptfds, pTimeout); + if (nrfds < 0) { + // Store error as early as possible, as the code below could + // reset it and make late check unreliable. + error = __CFSocketLastError(); + } #if defined(LOG_CFSOCKET) && defined(DEBUG_POLLING_SELECT) __CFSOCKETLOG("socket manager woke from select, ret=%ld", (long)nrfds); @@ -1434,7 +1502,7 @@ static void *__CFSocketManager(void * arg) } if (0 > nrfds) { - manageSelectError(); + manageSelectError(error); continue; } if (FD_ISSET(__CFWakeupSocketPair[1], readfds)) { diff --git a/Tests/Foundation/Tests/TestSocketPort.swift b/Tests/Foundation/Tests/TestSocketPort.swift index 32366ea510..b620e5e4aa 100644 --- a/Tests/Foundation/Tests/TestSocketPort.swift +++ b/Tests/Foundation/Tests/TestSocketPort.swift @@ -106,11 +106,55 @@ class TestSocketPort : XCTestCase { } } + func testSendingMultipleMessagesRemoteToLocal() throws { + var localPorts = [SocketPort]() + var remotePorts = [SocketPort]() + var delegates = [TestPortDelegateWithBlock]() + + let data = Data("I cannot weave".utf8) + + for _ in 0..<128 { + let local = try XCTUnwrap(SocketPort(tcpPort: 0)) + let tcpPort = try UInt16(XCTUnwrap(tcpOrUdpPort(of: local))) + let remote = try XCTUnwrap(SocketPort(remoteWithTCPPort: tcpPort, host: "localhost")) + + let received = expectation(description: "Message received") + + let localDelegate = TestPortDelegateWithBlock { message in + XCTAssertEqual(message.components as? [AnyHashable], [data as NSData]) + received.fulfill() + } + + localPorts.append(local) + remotePorts.append(remote) + delegates.append(localDelegate) + + local.setDelegate(localDelegate) + local.schedule(in: .main, forMode: .default) + remote.schedule(in: .main, forMode: .default) + } + + withExtendedLifetime(delegates) { + for remote in remotePorts { + let sent = remote.send(before: Date(timeIntervalSinceNow: 5), components: NSMutableArray(array: [data]), from: nil, reserved: 0) + XCTAssertTrue(sent) + } + waitForExpectations(timeout: 5.0) + } + + for port in localPorts + remotePorts { + port.setDelegate(nil) + port.remove(from: .main, forMode: .default) + port.invalidate() + } + } + static var allTests: [(String, (TestSocketPort) -> () throws -> Void)] { return [ ("testRemoteSocketPortsAreUniqued", testRemoteSocketPortsAreUniqued), ("testInitPicksATCPPort", testInitPicksATCPPort), ("testSendingOneMessageRemoteToLocal", testSendingOneMessageRemoteToLocal), + ("testSendingMultipleMessagesRemoteToLocal", testSendingMultipleMessagesRemoteToLocal), ] } } From 6e5d9621896b0c431f34f3e7e86f64aa23d3a4c1 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Tue, 14 May 2024 16:47:24 -0700 Subject: [PATCH 065/198] Remove Collections+DataProtocol and some CocoaError extensions (#4956) --- .../Foundation/Collections+DataProtocol.swift | 61 ------------------- Sources/Foundation/NSError.swift | 59 ------------------ 2 files changed, 120 deletions(-) delete mode 100644 Sources/Foundation/Collections+DataProtocol.swift diff --git a/Sources/Foundation/Collections+DataProtocol.swift b/Sources/Foundation/Collections+DataProtocol.swift deleted file mode 100644 index 1829df4e4b..0000000000 --- a/Sources/Foundation/Collections+DataProtocol.swift +++ /dev/null @@ -1,61 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2018 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -//===--- DataProtocol -----------------------------------------------------===// - -extension Array: DataProtocol where Element == UInt8 { - public var regions: CollectionOfOne> { - return CollectionOfOne(self) - } -} - -extension ArraySlice: DataProtocol where Element == UInt8 { - public var regions: CollectionOfOne> { - return CollectionOfOne(self) - } -} - -extension ContiguousArray: DataProtocol where Element == UInt8 { - public var regions: CollectionOfOne> { - return CollectionOfOne(self) - } -} - -// FIXME: This currently crashes compilation in the Late Inliner. -// extension CollectionOfOne : DataProtocol where Element == UInt8 { -// public typealias Regions = CollectionOfOne -// -// public var regions: CollectionOfOne { -// return CollectionOfOne(Data(self)) -// } -// } - -extension EmptyCollection : DataProtocol where Element == UInt8 { - public var regions: EmptyCollection { - return EmptyCollection() - } -} - -extension Repeated: DataProtocol where Element == UInt8 { - public typealias Regions = Repeated - - public var regions: Repeated { - guard self.count > 0 else { return repeatElement(Data(), count: 0) } - return repeatElement(Data(CollectionOfOne(self.first!)), count: self.count) - } -} - -//===--- MutableDataProtocol ----------------------------------------------===// - -extension Array: MutableDataProtocol where Element == UInt8 { } - -extension ContiguousArray: MutableDataProtocol where Element == UInt8 { } diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index a88899463a..583a74cb4f 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -681,41 +681,6 @@ public extension CocoaError { } extension CocoaError { - public static var fileNoSuchFile: CocoaError.Code { return .fileNoSuchFile } - public static var fileLocking: CocoaError.Code { return .fileLocking } - public static var fileReadUnknown: CocoaError.Code { return .fileReadUnknown } - public static var fileReadNoPermission: CocoaError.Code { return .fileReadNoPermission } - public static var fileReadInvalidFileName: CocoaError.Code { return .fileReadInvalidFileName } - public static var fileReadCorruptFile: CocoaError.Code { return .fileReadCorruptFile } - public static var fileReadNoSuchFile: CocoaError.Code { return .fileReadNoSuchFile } - public static var fileReadInapplicableStringEncoding: CocoaError.Code { return .fileReadInapplicableStringEncoding } - public static var fileReadUnsupportedScheme: CocoaError.Code { return .fileReadUnsupportedScheme } - public static var fileReadTooLarge: CocoaError.Code { return .fileReadTooLarge } - public static var fileReadUnknownStringEncoding: CocoaError.Code { return .fileReadUnknownStringEncoding } - public static var fileWriteUnknown: CocoaError.Code { return .fileWriteUnknown } - public static var fileWriteNoPermission: CocoaError.Code { return .fileWriteNoPermission } - public static var fileWriteInvalidFileName: CocoaError.Code { return .fileWriteInvalidFileName } - public static var fileWriteFileExists: CocoaError.Code { return .fileWriteFileExists } - public static var fileWriteInapplicableStringEncoding: CocoaError.Code { return .fileWriteInapplicableStringEncoding } - public static var fileWriteUnsupportedScheme: CocoaError.Code { return .fileWriteUnsupportedScheme } - public static var fileWriteOutOfSpace: CocoaError.Code { return .fileWriteOutOfSpace } - public static var fileWriteVolumeReadOnly: CocoaError.Code { return .fileWriteVolumeReadOnly } - public static var fileManagerUnmountUnknown: CocoaError.Code { return .fileManagerUnmountUnknown } - public static var fileManagerUnmountBusy: CocoaError.Code { return .fileManagerUnmountBusy } - public static var keyValueValidation: CocoaError.Code { return .keyValueValidation } - public static var formatting: CocoaError.Code { return .formatting } - public static var userCancelled: CocoaError.Code { return .userCancelled } - public static var featureUnsupported: CocoaError.Code { return .featureUnsupported } - public static var executableNotLoadable: CocoaError.Code { return .executableNotLoadable } - public static var executableArchitectureMismatch: CocoaError.Code { return .executableArchitectureMismatch } - public static var executableRuntimeMismatch: CocoaError.Code { return .executableRuntimeMismatch } - public static var executableLoad: CocoaError.Code { return .executableLoad } - public static var executableLink: CocoaError.Code { return .executableLink } - public static var propertyListReadCorrupt: CocoaError.Code { return .propertyListReadCorrupt } - public static var propertyListReadUnknownVersion: CocoaError.Code { return .propertyListReadUnknownVersion } - public static var propertyListReadStream: CocoaError.Code { return .propertyListReadStream } - public static var propertyListWriteStream: CocoaError.Code { return .propertyListWriteStream } - public static var propertyListWriteInvalid: CocoaError.Code { return .propertyListWriteInvalid } public static var xpcConnectionInterrupted: CocoaError.Code { return .xpcConnectionInterrupted } public static var xpcConnectionInvalid: CocoaError.Code { return .xpcConnectionInvalid } public static var xpcConnectionReplyInvalid: CocoaError.Code { return .xpcConnectionReplyInvalid } @@ -732,26 +697,6 @@ extension CocoaError { } extension CocoaError { - public var isCoderError: Bool { - return code.rawValue >= 4864 && code.rawValue <= 4991 - } - - public var isExecutableError: Bool { - return code.rawValue >= 3584 && code.rawValue <= 3839 - } - - public var isFileError: Bool { - return code.rawValue >= 0 && code.rawValue <= 1023 - } - - public var isFormattingError: Bool { - return code.rawValue >= 2048 && code.rawValue <= 2559 - } - - public var isPropertyListError: Bool { - return code.rawValue >= 3840 && code.rawValue <= 4095 - } - public var isUbiquitousFileError: Bool { return code.rawValue >= 4352 && code.rawValue <= 4607 } @@ -760,10 +705,6 @@ extension CocoaError { return code.rawValue >= 4608 && code.rawValue <= 4863 } - public var isValidationError: Bool { - return code.rawValue >= 1024 && code.rawValue <= 2047 - } - public var isXPCConnectionError: Bool { return code.rawValue >= 4096 && code.rawValue <= 4224 } From cc5704df4a3dbcee529f4f305264d247eed0f879 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Tue, 14 May 2024 16:47:57 -0700 Subject: [PATCH 066/198] Remove URL in favor of swift-foundation's URL (#4955) * Remove URL in favor of swift-foundation's URL * Update swift-foundation dependency hash --- Package.swift | 2 +- Sources/Foundation/FileManager.swift | 6 +- Sources/Foundation/NSArray.swift | 2 +- Sources/Foundation/NSCharacterSet.swift | 2 +- Sources/Foundation/NSData.swift | 13 - Sources/Foundation/NSDictionary.swift | 4 +- Sources/Foundation/NSError.swift | 32 +- Sources/Foundation/NSString.swift | 3 +- Sources/Foundation/NSURL.swift | 4 +- Sources/Foundation/NSURLComponents.swift | 2 +- Sources/Foundation/URL.swift | 561 +----------------- Sources/Foundation/URLComponents.swift | 364 +----------- .../URLSession/NetworkingSpecific.swift | 7 +- Tests/Foundation/TestBundle.swift | 44 +- Tests/Foundation/TestDataURLProtocol.swift | 1 - Tests/Foundation/TestFileManager.swift | 154 +---- Tests/Foundation/TestURL.swift | 13 +- Tests/Foundation/TestURLSession.swift | 6 +- 18 files changed, 122 insertions(+), 1098 deletions(-) diff --git a/Package.swift b/Package.swift index bb4990394b..3f082ecaa2 100644 --- a/Package.swift +++ b/Package.swift @@ -78,7 +78,7 @@ let package = Package( from: "0.0.5"), .package( url: "https://github.com/apple/swift-foundation", - revision: "7eb8b598ad8f77ac743b2decc97d56bf350aedee" + revision: "e991656bd02af48530811f1871b3351961b75d29" ), ], targets: [ diff --git a/Sources/Foundation/FileManager.swift b/Sources/Foundation/FileManager.swift index b36e7a369f..a78ef93386 100644 --- a/Sources/Foundation/FileManager.swift +++ b/Sources/Foundation/FileManager.swift @@ -972,7 +972,7 @@ open class FileManager : NSObject { isDirectory.boolValue { for language in _preferredLanguages { let stringsFile = dotLocalized.appendingPathComponent(language).appendingPathExtension("strings") - if let data = try? Data(contentsOf: stringsFile.path), + if let data = try? Data(contentsOf: stringsFile), let plist = (try? PropertyListSerialization.propertyList(from: data, format: nil)) as? NSDictionary { let localizedName = (plist[nameWithoutExtension] as? NSString)?._swiftObject @@ -1034,13 +1034,13 @@ open class FileManager : NSObject { /* These methods are provided here for compatibility. The corresponding methods on NSData which return NSErrors should be regarded as the primary method of creating a file from an NSData or retrieving the contents of a file as an NSData. */ open func contents(atPath path: String) -> Data? { - return try? Data(contentsOf: path) + return try? Data(contentsOf: URL(fileURLWithPath: path)) } @discardableResult open func createFile(atPath path: String, contents data: Data?, attributes attr: [FileAttributeKey : Any]? = nil) -> Bool { do { - try (data ?? Data()).write(to: path, options: .atomic) + try (data ?? Data()).write(to: URL(fileURLWithPath: path), options: .atomic) if let attr = attr { try self.setAttributes(attr, ofItemAtPath: path) } diff --git a/Sources/Foundation/NSArray.swift b/Sources/Foundation/NSArray.swift index 5488dc404b..0c71b26436 100644 --- a/Sources/Foundation/NSArray.swift +++ b/Sources/Foundation/NSArray.swift @@ -458,7 +458,7 @@ open class NSArray : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCo open func write(to url: URL, atomically: Bool) -> Bool { do { let pListData = try PropertyListSerialization.data(fromPropertyList: self, format: .xml, options: 0) - try pListData.write(to: url.path, options: atomically ? .atomic : []) + try pListData.write(to: url, options: atomically ? .atomic : []) return true } catch { return false diff --git a/Sources/Foundation/NSCharacterSet.swift b/Sources/Foundation/NSCharacterSet.swift index c94cc791c8..08090529e7 100644 --- a/Sources/Foundation/NSCharacterSet.swift +++ b/Sources/Foundation/NSCharacterSet.swift @@ -186,7 +186,7 @@ open class NSCharacterSet : NSObject, NSCopying, NSMutableCopying, NSSecureCodin public convenience init?(contentsOfFile fName: String) { do { - let data = try Data(contentsOf: fName) + let data = try Data(contentsOf: URL(fileURLWithPath: fName)) self.init(bitmapRepresentation: data) } catch { return nil diff --git a/Sources/Foundation/NSData.swift b/Sources/Foundation/NSData.swift index 18a7c71010..b2e4095882 100644 --- a/Sources/Foundation/NSData.swift +++ b/Sources/Foundation/NSData.swift @@ -1202,19 +1202,6 @@ extension NSData { } } -// MARK: - Temporary URL support - -extension Data { - // Temporary until SwiftFoundation supports this - public init(contentsOf url: URL, options: ReadingOptions = []) throws { - self = try .init(contentsOf: url.path, options: options) - } - - public func write(to url: URL, options: WritingOptions = []) throws { - try write(to: url.path, options: options) - } -} - // MARK: - Bridging extension Data { diff --git a/Sources/Foundation/NSDictionary.swift b/Sources/Foundation/NSDictionary.swift index 378e254831..47b147fb91 100644 --- a/Sources/Foundation/NSDictionary.swift +++ b/Sources/Foundation/NSDictionary.swift @@ -82,7 +82,7 @@ open class NSDictionary : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, @available(*, deprecated) public convenience init?(contentsOf url: URL) { do { - guard let plistDoc = try? Data(contentsOf: url.path) else { return nil } + guard let plistDoc = try? Data(contentsOf: url) else { return nil } let plistDict = try PropertyListSerialization.propertyList(from: plistDoc, options: [], format: nil) as? Dictionary guard let plistDictionary = plistDict else { return nil } self.init(dictionary: plistDictionary) @@ -509,7 +509,7 @@ open class NSDictionary : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, open func write(to url: URL, atomically: Bool) -> Bool { do { let pListData = try PropertyListSerialization.data(fromPropertyList: self, format: .xml, options: 0) - try pListData.write(to: url.path, options: atomically ? .atomic : []) + try pListData.write(to: url, options: atomically ? .atomic : []) return true } catch { return false diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index 583a74cb4f..5fc309e1c6 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -605,17 +605,6 @@ extension CocoaError : _BridgedStoredNSError { } } -extension CocoaError { - // Temporary extension to take Foundation.URL, until FoundationEssentials.URL is fully ported - public static func error(_ code: CocoaError.Code, userInfo: [String : AnyHashable]? = nil, url: Foundation.URL? = nil) -> Error { - var info: [String : AnyHashable] = userInfo ?? [:] - if let url = url { - info[NSURLErrorKey] = url - } - return CocoaError(code, userInfo: info) - } -} - extension CocoaError.Code : _ErrorCodeProtocol { public typealias _ErrorType = CocoaError } @@ -710,6 +699,27 @@ extension CocoaError { } } +extension CocoaError: _ObjectiveCBridgeable { + public func _bridgeToObjectiveC() -> NSError { + return self._nsError + } + + public static func _forceBridgeFromObjectiveC(_ x: NSError, result: inout CocoaError?) { + result = _unconditionallyBridgeFromObjectiveC(x) + } + + public static func _conditionallyBridgeFromObjectiveC(_ x: NSError, result: inout CocoaError?) -> Bool { + result = CocoaError(_nsError: x) + return true + } + + public static func _unconditionallyBridgeFromObjectiveC(_ source: NSError?) -> CocoaError { + var result: CocoaError? + _forceBridgeFromObjectiveC(source!, result: &result) + return result! + } +} + /// Describes errors in the URL error domain. public struct URLError : _BridgedStoredNSError { public let _nsError: NSError diff --git a/Sources/Foundation/NSString.swift b/Sources/Foundation/NSString.swift index cadfdd73a3..aabefdfecb 100644 --- a/Sources/Foundation/NSString.swift +++ b/Sources/Foundation/NSString.swift @@ -1259,8 +1259,7 @@ extension NSString { internal func _writeTo(_ url: URL, _ useAuxiliaryFile: Bool, _ enc: UInt) throws { var data = Data() try _getExternalRepresentation(&data, url, enc) - // TODO: Use URL version when that is ready - try data.write(to: url.path, options: useAuxiliaryFile ? .atomic : []) + try data.write(to: url, options: useAuxiliaryFile ? .atomic : []) } open func write(to url: URL, atomically useAuxiliaryFile: Bool, encoding enc: UInt) throws { diff --git a/Sources/Foundation/NSURL.swift b/Sources/Foundation/NSURL.swift index 71b4a2eabd..3b0ed15c8a 100644 --- a/Sources/Foundation/NSURL.swift +++ b/Sources/Foundation/NSURL.swift @@ -1024,7 +1024,7 @@ extension NSURL { extension NSURL: _SwiftBridgeable { typealias SwiftType = URL - internal var _swiftObject: SwiftType { return URL(reference: self) } + internal var _swiftObject: SwiftType { return self as URL } } extension CFURL : _NSBridgeable, _SwiftBridgeable { @@ -1037,7 +1037,7 @@ extension CFURL : _NSBridgeable, _SwiftBridgeable { extension URL : _NSBridgeable { typealias NSType = NSURL typealias CFType = CFURL - internal var _nsObject: NSType { return self.reference } + internal var _nsObject: NSType { return self as NSURL } internal var _cfObject: CFType { return _nsObject._cfObject } } diff --git a/Sources/Foundation/NSURLComponents.swift b/Sources/Foundation/NSURLComponents.swift index e65e948005..470b9f3bc8 100644 --- a/Sources/Foundation/NSURLComponents.swift +++ b/Sources/Foundation/NSURLComponents.swift @@ -82,7 +82,7 @@ open class NSURLComponents: NSObject, NSCopying { // Returns a URL created from the NSURLComponents. If the NSURLComponents has an authority component (user, password, host or port) and a path component, then the path must either begin with "/" or be an empty string. If the NSURLComponents does not have an authority component (user, password, host or port) and has a path component, the path component must not start with "//". If those requirements are not met, nil is returned. open var url: URL? { guard let result = _CFURLComponentsCopyURL(_components) else { return nil } - return unsafeBitCast(result, to: URL.self) + return result._swiftObject } // Returns a URL created from the NSURLComponents relative to a base URL. If the NSURLComponents has an authority component (user, password, host or port) and a path component, then the path must either begin with "/" or be an empty string. If the NSURLComponents does not have an authority component (user, password, host or port) and has a path component, the path component must not start with "//". If those requirements are not met, nil is returned. diff --git a/Sources/Foundation/URL.swift b/Sources/Foundation/URL.swift index 9ef15f9ba8..3a215add2c 100644 --- a/Sources/Foundation/URL.swift +++ b/Sources/Foundation/URL.swift @@ -418,492 +418,18 @@ public struct URLResourceValues { } -private class URLBox { - let url: NSURL - init(url: NSURL) { - self.url = url - } -} - -/** - A URL is a type that can potentially contain the location of a resource on a remote server, the path of a local file on disk, or even an arbitrary piece of encoded data. - - You can construct URLs and access their parts. For URLs that represent local files, you can also manipulate properties of those files directly, such as changing the file's last modification date. Finally, you can pass URLs to other APIs to retrieve the contents of those URLs. For example, you can use the URLSession classes to access the contents of remote resources, as described in URL Session Programming Guide. - - URLs are the preferred way to refer to local files. Most objects that read data from or write data to a file have methods that accept a URL instead of a pathname as the file reference. For example, you can get the contents of a local file URL as `String` by calling `func init(contentsOf:encoding) throws`, or as a `Data` by calling `func init(contentsOf:options) throws`. -*/ -public struct URL : ReferenceConvertible, Equatable { - public typealias ReferenceType = NSURL - - private enum Storage { - case directImmutable(NSURL) - case boxedRequiresCopyOnWrite(URLBox) - - func copy() -> Storage { - switch self { - case .directImmutable(_): return self - case .boxedRequiresCopyOnWrite(let box): return .boxedRequiresCopyOnWrite(URLBox(url: box.url.copy() as! NSURL)) - } - } - - var readableURL: NSURL { - switch self { - case .directImmutable(let url): return url - case .boxedRequiresCopyOnWrite(let box): return box.url - } - } - - mutating func fetchOrCreateMutableURL() -> NSURL { - switch self { - case .directImmutable(let url): return url - case .boxedRequiresCopyOnWrite(let storage): - var box = storage - if isKnownUniquelyReferenced(&box) { - return box.url - } else { - self = copy() - return self.readableURL - } - } - } - - init(_ url: NSURL) { - if url.isFileURL { - self = .boxedRequiresCopyOnWrite(URLBox(url: url)) - } else { - self = .directImmutable(url) - } - } - } - - private var _storage: Storage! - fileprivate var _url : NSURL { - get { - return _storage.readableURL - } - set { - _storage = Storage(newValue) - } - } - fileprivate var _writableURL: NSURL { - mutating get { return _storage.fetchOrCreateMutableURL() } - } - - /// Initialize with string. - /// - /// Returns `nil` if a `URL` cannot be formed with the string (for example, if the string contains characters that are illegal in a URL, or is an empty string). - public init?(string: String) { - guard !string.isEmpty, let inner = NSURL(string: string) else { return nil } - _url = URL._converted(from: inner) - } - - /// Initialize with string, relative to another URL. - /// - /// Returns `nil` if a `URL` cannot be formed with the string (for example, if the string contains characters that are illegal in a URL, or is an empty string). - public init?(string: String, relativeTo url: URL?) { - guard !string.isEmpty, let inner = NSURL(string: string, relativeTo: url) else { return nil } - _url = URL._converted(from: inner) - } - - /// Initializes a newly created file URL referencing the local file or directory at path, relative to a base URL. - /// - /// If an empty string is used for the path, then the path is assumed to be ".". - /// - note: This function avoids an extra file system access to check if the file URL is a directory. You should use it if you know the answer already. - public init(fileURLWithPath path: String, isDirectory: Bool, relativeTo base: URL?) { - _url = URL._converted(from: NSURL(fileURLWithPath: path.isEmpty ? "." : path, isDirectory: isDirectory, relativeTo: base)) - } - - /// Initializes a newly created file URL referencing the local file or directory at path, relative to a base URL. - /// - /// If an empty string is used for the path, then the path is assumed to be ".". - public init(fileURLWithPath path: String, relativeTo base: URL?) { - _url = URL._converted(from: NSURL(fileURLWithPath: path.isEmpty ? "." : path, relativeTo: base)) - } - - /// Initializes a newly created file URL referencing the local file or directory at path. - /// - /// If an empty string is used for the path, then the path is assumed to be ".". - /// - note: This function avoids an extra file system access to check if the file URL is a directory. You should use it if you know the answer already. - public init(fileURLWithPath path: String, isDirectory: Bool) { - _url = URL._converted(from: NSURL(fileURLWithPath: path.isEmpty ? "." : path, isDirectory: isDirectory)) - } - - /// Initializes a newly created file URL referencing the local file or directory at path. - /// - /// If an empty string is used for the path, then the path is assumed to be ".". - public init(fileURLWithPath path: String) { - _url = URL._converted(from: NSURL(fileURLWithPath: path.isEmpty ? "." : path)) - } - - /// Initializes a newly created URL using the contents of the given data, relative to a base URL. - /// - /// If the data representation is not a legal URL string as ASCII bytes, the URL object may not behave as expected. If the URL cannot be formed then this will return nil. - public init?(dataRepresentation: Data, relativeTo url: URL?, isAbsolute: Bool = false) { - guard !dataRepresentation.isEmpty else { return nil } - - if isAbsolute { - _url = URL._converted(from: NSURL(absoluteURLWithDataRepresentation: dataRepresentation, relativeTo: url)) - } else { - _url = URL._converted(from: NSURL(dataRepresentation: dataRepresentation, relativeTo: url)) - } - } - - /// Initializes a newly created URL referencing the local file or directory at the file system representation of the path. File system representation is a null-terminated C string with canonical UTF-8 encoding. - public init(fileURLWithFileSystemRepresentation path: UnsafePointer, isDirectory: Bool, relativeTo baseURL: URL?) { - _url = URL._converted(from: NSURL(fileURLWithFileSystemRepresentation: path, isDirectory: isDirectory, relativeTo: baseURL)) - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(_url) - } - - // MARK: - - - /// Returns the data representation of the URL's relativeString. - /// - /// If the URL was initialized with `init?(dataRepresentation:relativeTo:isAbsolute:)`, the data representation returned are the same bytes as those used at initialization; otherwise, the data representation returned are the bytes of the `relativeString` encoded with UTF8 string encoding. - public var dataRepresentation: Data { - return _url.dataRepresentation - } - - // MARK: - - - // Future implementation note: - // NSURL (really CFURL, which provides its implementation) has quite a few quirks in its processing of some more esoteric (and some not so esoteric) strings. We would like to move much of this over to the more modern NSURLComponents, but binary compat concerns have made this difficult. - // Hopefully soon, we can replace some of the below delegation to NSURL with delegation to NSURLComponents instead. It cannot be done piecemeal, because otherwise we will get inconsistent results from the API. - - /// Returns the absolute string for the URL. - public var absoluteString: String { - return _url.absoluteString - } - - /// The relative portion of a URL. - /// - /// If `baseURL` is nil, or if the receiver is itself absolute, this is the same as `absoluteString`. - public var relativeString: String { - return _url.relativeString - } - - /// Returns the base URL. - /// - /// If the URL is itself absolute, then this value is nil. - public var baseURL: URL? { - return _url.baseURL - } - - /// Returns the absolute URL. - /// - /// If the URL is itself absolute, this will return self. - public var absoluteURL: URL { - if let url = _url.absoluteURL { - return url - } else { - // This should never fail for non-file reference URLs - return self - } - } - - // MARK: - - - /// Returns the scheme of the URL. - public var scheme: String? { - return _url.scheme - } - - /// Returns true if the scheme is `file:`. - public var isFileURL: Bool { - return _url.isFileURL - } - +extension URL { // This thing was never really part of the URL specs @available(*, unavailable, message: "Use `path`, `query`, and `fragment` instead") public var resourceSpecifier: String { fatalError() } - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the host component of the URL; otherwise it returns nil. - /// - /// - note: This function will resolve against the base `URL`. - public var host: String? { - return _url.host - } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the port component of the URL; otherwise it returns nil. - /// - /// - note: This function will resolve against the base `URL`. - public var port: Int? { - return _url.port?.intValue - } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the user component of the URL; otherwise it returns nil. - /// - /// - note: This function will resolve against the base `URL`. - public var user: String? { - return _url.user - } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the password component of the URL; otherwise it returns nil. - /// - /// - note: This function will resolve against the base `URL`. - public var password: String? { - return _url.password - } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the path component of the URL; otherwise it returns an empty string. - /// - /// If the URL contains a parameter string, it is appended to the path with a `;`. - /// - note: This function will resolve against the base `URL`. - /// - returns: The path, or an empty string if the URL has an empty path. - public var path: String { - if let parameterString = _url.parameterString { - if let path = _url.path { - return path + ";" + parameterString - } else { - return ";" + parameterString - } - } else if let path = _url.path { - return path - } else { - return "" - } - } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the relative path of the URL; otherwise it returns nil. - /// - /// This is the same as path if baseURL is nil. - /// If the URL contains a parameter string, it is appended to the path with a `;`. - /// - /// - note: This function will resolve against the base `URL`. - /// - returns: The relative path, or an empty string if the URL has an empty path. - public var relativePath: String { - if let parameterString = _url.parameterString { - if let path = _url.relativePath { - return path + ";" + parameterString - } else { - return ";" + parameterString - } - } else if let path = _url.relativePath { - return path - } else { - return "" - } - } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the fragment component of the URL; otherwise it returns nil. - /// - /// - note: This function will resolve against the base `URL`. - public var fragment: String? { - return _url.fragment - } @available(*, unavailable, message: "use the 'path' property") public var parameterString: String? { fatalError() } - - /// If the URL conforms to RFC 1808 (the most common form of URL), returns the query of the URL; otherwise it returns nil. - /// - /// - note: This function will resolve against the base `URL`. - public var query: String? { - return _url.query - } - - /// Returns true if the URL path represents a directory. - public var hasDirectoryPath: Bool { - return _url.hasDirectoryPath - } - - /// Passes the URL's path in file system representation to `block`. - /// - /// File system representation is a null-terminated C string with canonical UTF-8 encoding. - /// - note: The pointer is not valid outside the context of the block. - public func withUnsafeFileSystemRepresentation(_ block: (UnsafePointer?) throws -> ResultType) rethrows -> ResultType { - let fsRep = _url.fileSystemRepresentation - defer { fsRep.deallocate() } - return try block(fsRep) - } - - // MARK: - - // MARK: Path manipulation - - /// Returns the path components of the URL, or an empty array if the path is an empty string. - public var pathComponents: [String] { - // In accordance with our above change to never return a nil path, here we return an empty array. - return _url.pathComponents ?? [] - } - - /// Returns the last path component of the URL, or an empty string if the path is an empty string. - public var lastPathComponent: String { - return _url.lastPathComponent ?? "" - } - - /// Returns the path extension of the URL, or an empty string if the path is an empty string. - public var pathExtension: String { - return _url.pathExtension ?? "" - } - - /// Returns a URL constructed by appending the given path component to self. - /// - /// - parameter pathComponent: The path component to add. - /// - parameter isDirectory: If `true`, then a trailing `/` is added to the resulting path. - public func appendingPathComponent(_ pathComponent: String, isDirectory: Bool) -> URL { - if let result = _url.appendingPathComponent(pathComponent, isDirectory: isDirectory) { - return result - } else { - // Now we need to do something more expensive - if var c = URLComponents(url: self, resolvingAgainstBaseURL: true) { - let path = c.path._stringByAppendingPathComponent(pathComponent) - c.path = isDirectory ? path + "/" : path - - if let result = c.url { - return result - } else { - // Couldn't get url from components - // Ultimate fallback: - return self - } - } else { - return self - } - } - } - - /// Returns a URL constructed by appending the given path component to self. - /// - /// - note: This function performs a file system operation to determine if the path component is a directory. If so, it will append a trailing `/`. If you know in advance that the path component is a directory or not, then use `func appendingPathComponent(_:isDirectory:)`. - /// - parameter pathComponent: The path component to add. - public func appendingPathComponent(_ pathComponent: String) -> URL { - if let result = _url.appendingPathComponent(pathComponent) { - return result - } else { - // Now we need to do something more expensive - if var c = URLComponents(url: self, resolvingAgainstBaseURL: true) { - c.path = c.path._stringByAppendingPathComponent(pathComponent) - - if let result = c.url { - return result - } else { - // Couldn't get url from components - // Ultimate fallback: - return self - } - } else { - // Ultimate fallback: - return self - } - } - } - - /// Returns a URL constructed by removing the last path component of self. - /// - /// This function may either remove a path component or append `/..`. - /// - /// If the URL has an empty path (e.g., `http://www.example.com`), then this function will return the URL unchanged. - public func deletingLastPathComponent() -> URL { - // This is a slight behavior change from NSURL, but better than returning "http://www.example.com../". - guard !path.isEmpty, let result = _url.deletingLastPathComponent else { return self } - return result - } - - /// Returns a URL constructed by appending the given path extension to self. - /// - /// If the URL has an empty path (e.g., `http://www.example.com`), then this function will return the URL unchanged. - /// - /// Certain special characters (for example, Unicode Right-To-Left marks) cannot be used as path extensions. If any of those are contained in `pathExtension`, the function will return the URL unchanged. - /// - parameter pathExtension: The extension to append. - public func appendingPathExtension(_ pathExtension: String) -> URL { - guard !path.isEmpty, let result = _url.appendingPathExtension(pathExtension) else { return self } - return result - } - - /// Returns a URL constructed by removing any path extension. - /// - /// If the URL has an empty path (e.g., `http://www.example.com`), then this function will return the URL unchanged. - public func deletingPathExtension() -> URL { - guard !path.isEmpty, let result = _url.deletingPathExtension else { return self } - return result - } - - /// Appends a path component to the URL. - /// - /// - parameter pathComponent: The path component to add. - /// - parameter isDirectory: Use `true` if the resulting path is a directory. - public mutating func appendPathComponent(_ pathComponent: String, isDirectory: Bool) { - self = appendingPathComponent(pathComponent, isDirectory: isDirectory) - } - - /// Appends a path component to the URL. - /// - /// - note: This function performs a file system operation to determine if the path component is a directory. If so, it will append a trailing `/`. If you know in advance that the path component is a directory or not, then use `func appendingPathComponent(_:isDirectory:)`. - /// - parameter pathComponent: The path component to add. - public mutating func appendPathComponent(_ pathComponent: String) { - self = appendingPathComponent(pathComponent) - } - - /// Appends the given path extension to self. - /// - /// If the URL has an empty path (e.g., `http://www.example.com`), then this function will do nothing. - /// Certain special characters (for example, Unicode Right-To-Left marks) cannot be used as path extensions. If any of those are contained in `pathExtension`, the function will return the URL unchanged. - /// - parameter pathExtension: The extension to append. - public mutating func appendPathExtension(_ pathExtension: String) { - self = appendingPathExtension(pathExtension) - } - - /// Removes the last path component from self. - /// - /// This function may either remove a path component or append `/..`. - /// - /// If the URL has an empty path (e.g., `http://www.example.com`), then this function will do nothing. - public mutating func deleteLastPathComponent() { - self = deletingLastPathComponent() - } - - - /// Removes any path extension from self. - /// - /// If the URL has an empty path (e.g., `http://www.example.com`), then this function will do nothing. - public mutating func deletePathExtension() { - self = deletingPathExtension() - } - - /// Returns a `URL` with any instances of ".." or "." removed from its path. - public var standardized : URL { - // The NSURL API can only return nil in case of file reference URL, which we should not be - guard let result = _url.standardized else { return self } - return result - } - - /// Standardizes the path of a file URL. - /// - /// If the `isFileURL` is false, this method does nothing. - public mutating func standardize() { - self = self.standardized - } - - /// Standardizes the path of a file URL. - /// - /// If the `isFileURL` is false, this method returns `self`. - public var standardizedFileURL : URL { - // NSURL should not return nil here unless this is a file reference URL, which should be impossible - guard let result = _url.standardizingPath else { return self } - return result - } - - /// Resolves any symlinks in the path of a file URL. - /// - /// If the `isFileURL` is false, this method returns `self`. - public func resolvingSymlinksInPath() -> URL { - // NSURL should not return nil here unless this is a file reference URL, which should be impossible - guard let result = _url.resolvingSymlinksInPath else { return self } - return result - } - - /// Resolves any symlinks in the path of a file URL. - /// - /// If the `isFileURL` is false, this method does nothing. - public mutating func resolveSymlinksInPath() { - self = self.resolvingSymlinksInPath() - } // MARK: - Resource Values @@ -913,7 +439,9 @@ public struct URL : ReferenceConvertible, Equatable { /// /// `URLResourceValues` keeps track of which of its properties have been set. Those values are the ones used by this function to determine which properties to write. public mutating func setResourceValues(_ values: URLResourceValues) throws { - try _writableURL.setResourceValues(values._values) + var ns = self as NSURL + try ns.setResourceValues(values._values) + self = ns as URL } /// Return a collection of resource values identified by the given resource keys. @@ -924,7 +452,7 @@ public struct URL : ReferenceConvertible, Equatable { /// /// Only the values for the keys specified in `keys` will be populated. public func resourceValues(forKeys keys: Set) throws -> URLResourceValues { - return URLResourceValues(keys: keys, values: try _url.resourceValues(forKeys: Array(keys))) + return URLResourceValues(keys: keys, values: try (self as NSURL).resourceValues(forKeys: Array(keys))) } /// Sets a temporary resource value on the URL object. @@ -933,55 +461,45 @@ public struct URL : ReferenceConvertible, Equatable { /// /// To remove a temporary resource value from the URL object, use `func removeCachedResourceValue(forKey:)`. Care should be taken to ensure the key that identifies a temporary resource value is unique and does not conflict with system defined keys (using reverse domain name notation in your temporary resource value keys is recommended). This method is currently applicable only to URLs for file system resources. public mutating func setTemporaryResourceValue(_ value : Any, forKey key: URLResourceKey) { - _writableURL.setTemporaryResourceValue(value, forKey: key) + var ns = self as NSURL + ns.setTemporaryResourceValue(value, forKey: key) + self = ns as URL } /// Removes all cached resource values and all temporary resource values from the URL object. /// /// This method is currently applicable only to URLs for file system resources. public mutating func removeAllCachedResourceValues() { - _writableURL.removeAllCachedResourceValues() + var ns = self as NSURL + ns.removeAllCachedResourceValues() + self = ns as URL } /// Removes the cached resource value identified by a given resource value key from the URL object. /// /// Removing a cached resource value may remove other cached resource values because some resource values are cached as a set of values, and because some resource values depend on other resource values (temporary resource values have no dependencies). This method is currently applicable only to URLs for file system resources. public mutating func removeCachedResourceValue(forKey key: URLResourceKey) { - _writableURL.removeCachedResourceValue(forKey: key) + var ns = self as NSURL + ns.removeCachedResourceValue(forKey: key) + self = ns as URL } /// Returns whether the URL's resource exists and is reachable. /// /// This method synchronously checks if the resource's backing store is reachable. Checking reachability is appropriate when making decisions that do not require other immediate operations on the resource, e.g. periodic maintenance of UI state that depends on the existence of a specific document. When performing operations such as opening a file or copying resource properties, it is more efficient to simply try the operation and handle failures. This method is currently applicable only to URLs for file system resources. For other URL types, `false` is returned. public func checkResourceIsReachable() throws -> Bool { - return try _url.checkResourceIsReachable() - } - - // MARK: - Bridging Support - - /// We must not store an NSURL without running it through this function. This makes sure that we do not hold a file reference URL, which changes the nullability of many NSURL functions. - internal static func _converted(from url: NSURL) -> NSURL { - // On Linux, there's nothing to convert because file reference URLs are not supported. - return url - } - - internal init(reference: NSURL) { - _url = URL._converted(from: reference).copy() as! NSURL - } - - internal var reference : NSURL { - return _url + return try (self as NSURL).checkResourceIsReachable() } +} - public static func ==(lhs: URL, rhs: URL) -> Bool { - return lhs.reference.isEqual(rhs.reference) - } +extension URL : ReferenceConvertible { + public typealias ReferenceType = NSURL } extension URL : _ObjectiveCBridgeable { @_semantics("convertToObjectiveC") public func _bridgeToObjectiveC() -> NSURL { - return _url + return NSURL(string: self.absoluteString, relativeTo: self.baseURL)! } public static func _forceBridgeFromObjectiveC(_ source: NSURL, result: inout URL?) { @@ -991,7 +509,7 @@ extension URL : _ObjectiveCBridgeable { } public static func _conditionallyBridgeFromObjectiveC(_ source: NSURL, result: inout URL?) -> Bool { - result = URL(reference: source) + result = URL(string: source.absoluteString, relativeTo: source.baseURL) return true } @@ -1002,51 +520,12 @@ extension URL : _ObjectiveCBridgeable { } } -extension URL : CustomStringConvertible, CustomDebugStringConvertible { - public var description: String { - return _url.description - } - - public var debugDescription: String { - return _url.debugDescription - } -} - extension URL : CustomPlaygroundDisplayConvertible { public var playgroundDescription: Any { return absoluteString } } -extension URL : Codable { - private enum CodingKeys : Int, CodingKey { - case base - case relative - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let relative = try container.decode(String.self, forKey: .relative) - let base = try container.decodeIfPresent(URL.self, forKey: .base) - - guard let url = URL(string: relative, relativeTo: base) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, - debugDescription: "Invalid URL string.")) - } - - self = url - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(self.relativeString, forKey: .relative) - if let base = self.baseURL { - try container.encode(base, forKey: .base) - } - } -} - - //===----------------------------------------------------------------------===// // File references, for playgrounds. //===----------------------------------------------------------------------===// diff --git a/Sources/Foundation/URLComponents.swift b/Sources/Foundation/URLComponents.swift index 2755bf7e7a..4d3857c935 100644 --- a/Sources/Foundation/URLComponents.swift +++ b/Sources/Foundation/URLComponents.swift @@ -7,333 +7,18 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // - -/// A structure designed to parse URLs based on RFC 3986 and to construct URLs from their constituent parts. -/// -/// Its behavior differs subtly from the `URL` struct, which conforms to older RFCs. However, you can easily obtain a `URL` based on the contents of a `URLComponents` or vice versa. -public struct URLComponents : ReferenceConvertible, Hashable, Equatable, _MutableBoxing { +extension URLComponents : ReferenceConvertible { public typealias ReferenceType = NSURLComponents - - internal var _handle: _MutableHandle - - /// Initialize with all components undefined. - public init() { - _handle = _MutableHandle(adoptingReference: NSURLComponents()) - } - - /// Initialize with the components of a URL. - /// - /// If resolvingAgainstBaseURL is `true` and url is a relative URL, the components of url.absoluteURL are used. If the url string from the URL is malformed, nil is returned. - public init?(url: URL, resolvingAgainstBaseURL resolve: Bool) { - guard let result = NSURLComponents(url: url, resolvingAgainstBaseURL: resolve) else { return nil } - _handle = _MutableHandle(adoptingReference: result) - } - - /// Initialize with a URL string. - /// - /// If the URLString is malformed, nil is returned. - public init?(string: String) { - guard let result = NSURLComponents(string: string) else { return nil } - _handle = _MutableHandle(adoptingReference: result) - } - - /// Returns a URL created from the URLComponents. - /// - /// If the URLComponents has an authority component (user, password, host or port) and a path component, then the path must either begin with "/" or be an empty string. If the URLComponents does not have an authority component (user, password, host or port) and has a path component, the path component must not start with "//". If those requirements are not met, nil is returned. - public var url: URL? { - return _handle.map { $0.url } - } - - /// Returns a URL created from the URLComponents relative to a base URL. - /// - /// If the URLComponents has an authority component (user, password, host or port) and a path component, then the path must either begin with "/" or be an empty string. If the URLComponents does not have an authority component (user, password, host or port) and has a path component, the path component must not start with "//". If those requirements are not met, nil is returned. - public func url(relativeTo base: URL?) -> URL? { - return _handle.map { $0.url(relativeTo: base) } - } - - // Returns a URL string created from the URLComponents. If the URLComponents has an authority component (user, password, host or port) and a path component, then the path must either begin with "/" or be an empty string. If the URLComponents does not have an authority component (user, password, host or port) and has a path component, the path component must not start with "//". If those requirements are not met, nil is returned. - public var string: String? { - return _handle.map { $0.string } - } - - /// The scheme subcomponent of the URL. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - /// Attempting to set the scheme with an invalid scheme string will cause an exception. - public var scheme: String? { - get { return _handle.map { $0.scheme } } - set { _applyMutation { $0.scheme = newValue } } - } - - /// The user subcomponent of the URL. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - /// - /// Warning: IETF STD 66 (rfc3986) says the use of the format "user:password" in the userinfo subcomponent of a URI is deprecated because passing authentication information in clear text has proven to be a security risk. However, there are cases where this practice is still needed, and so the user and password components and methods are provided. - public var user: String? { - get { return _handle.map { $0.user } } - set { _applyMutation { $0.user = newValue } } - } - - /// The password subcomponent of the URL. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - /// - /// Warning: IETF STD 66 (rfc3986) says the use of the format "user:password" in the userinfo subcomponent of a URI is deprecated because passing authentication information in clear text has proven to be a security risk. However, there are cases where this practice is still needed, and so the user and password components and methods are provided. - public var password: String? { - get { return _handle.map { $0.password } } - set { _applyMutation { $0.password = newValue } } - } - - /// The host subcomponent. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - public var host: String? { - get { return _handle.map { $0.host } } - set { _applyMutation { $0.host = newValue } } - } - - /// The port subcomponent. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - /// Attempting to set a negative port number will cause a fatal error. - public var port: Int? { - get { return _handle.map { $0.port?.intValue } } - set { _applyMutation { $0.port = newValue != nil ? NSNumber(value: newValue!) : nil as NSNumber?} } - } - - /// The path subcomponent. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - public var path: String { - get { - return _handle.map { $0.path } ?? "" - } - set { - _applyMutation { $0.path = newValue } - } - } - - /// The query subcomponent. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - public var query: String? { - get { return _handle.map { $0.query } } - set { _applyMutation { $0.query = newValue } } - } - - /// The fragment subcomponent. - /// - /// The getter for this property removes any percent encoding this component may have (if the component allows percent encoding). Setting this property assumes the subcomponent or component string is not percent encoded and will add percent encoding (if the component allows percent encoding). - public var fragment: String? { - get { return _handle.map { $0.fragment } } - set { _applyMutation { $0.fragment = newValue } } - } - - - /// The user subcomponent, percent-encoded. - /// - /// The getter for this property retains any percent encoding this component may have. Setting this properties assumes the component string is already correctly percent encoded. Attempting to set an incorrectly percent encoded string will cause a `fatalError`. Although ';' is a legal path character, it is recommended that it be percent-encoded for best compatibility with `URL` (`String.addingPercentEncoding(withAllowedCharacters:)` will percent-encode any ';' characters if you pass `CharacterSet.urlUserAllowed`). - public var percentEncodedUser: String? { - get { return _handle.map { $0.percentEncodedUser } } - set { _applyMutation { $0.percentEncodedUser = newValue } } - } - - /// The password subcomponent, percent-encoded. - /// - /// The getter for this property retains any percent encoding this component may have. Setting this properties assumes the component string is already correctly percent encoded. Attempting to set an incorrectly percent encoded string will cause a `fatalError`. Although ';' is a legal path character, it is recommended that it be percent-encoded for best compatibility with `URL` (`String.addingPercentEncoding(withAllowedCharacters:)` will percent-encode any ';' characters if you pass `CharacterSet.urlPasswordAllowed`). - public var percentEncodedPassword: String? { - get { return _handle.map { $0.percentEncodedPassword } } - set { _applyMutation { $0.percentEncodedPassword = newValue } } - } - - /// The host subcomponent, percent-encoded. - /// - /// The getter for this property retains any percent encoding this component may have. Setting this properties assumes the component string is already correctly percent encoded. Attempting to set an incorrectly percent encoded string will cause a `fatalError`. Although ';' is a legal path character, it is recommended that it be percent-encoded for best compatibility with `URL` (`String.addingPercentEncoding(withAllowedCharacters:)` will percent-encode any ';' characters if you pass `CharacterSet.urlHostAllowed`). - public var percentEncodedHost: String? { - get { return _handle.map { $0.percentEncodedHost } } - set { _applyMutation { $0.percentEncodedHost = newValue } } - } - - /// The path subcomponent, percent-encoded. - /// - /// The getter for this property retains any percent encoding this component may have. Setting this properties assumes the component string is already correctly percent encoded. Attempting to set an incorrectly percent encoded string will cause a `fatalError`. Although ';' is a legal path character, it is recommended that it be percent-encoded for best compatibility with `URL` (`String.addingPercentEncoding(withAllowedCharacters:)` will percent-encode any ';' characters if you pass `CharacterSet.urlPathAllowed`). - public var percentEncodedPath: String { - get { - return _handle.map { $0.percentEncodedPath } ?? "" - } - set { - _applyMutation { $0.percentEncodedPath = newValue } - } - } - - /// The query subcomponent, percent-encoded. - /// - /// The getter for this property retains any percent encoding this component may have. Setting this properties assumes the component string is already correctly percent encoded. Attempting to set an incorrectly percent encoded string will cause a `fatalError`. Although ';' is a legal path character, it is recommended that it be percent-encoded for best compatibility with `URL` (`String.addingPercentEncoding(withAllowedCharacters:)` will percent-encode any ';' characters if you pass `CharacterSet.urlQueryAllowed`). - public var percentEncodedQuery: String? { - get { return _handle.map { $0.percentEncodedQuery } } - set { _applyMutation { $0.percentEncodedQuery = newValue } } - } - - /// The fragment subcomponent, percent-encoded. - /// - /// The getter for this property retains any percent encoding this component may have. Setting this properties assumes the component string is already correctly percent encoded. Attempting to set an incorrectly percent encoded string will cause a `fatalError`. Although ';' is a legal path character, it is recommended that it be percent-encoded for best compatibility with `URL` (`String.addingPercentEncoding(withAllowedCharacters:)` will percent-encode any ';' characters if you pass `CharacterSet.urlFragmentAllowed`). - public var percentEncodedFragment: String? { - get { return _handle.map { $0.percentEncodedFragment } } - set { _applyMutation { $0.percentEncodedFragment = newValue } } - } - - private func _toStringRange(_ r : NSRange) -> Range? { - guard let s = self.string, r.location != NSNotFound else { return nil } - let start = String.Index(utf16Offset: r.location, in: s) - let end = String.Index(utf16Offset: r.location + r.length, in: s) - return start..? { - return _toStringRange(_handle.map { $0.rangeOfScheme }) - } - - /// Returns the character range of the user in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - public var rangeOfUser: Range? { - return _toStringRange(_handle.map { $0.rangeOfUser}) - } - - /// Returns the character range of the password in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - public var rangeOfPassword: Range? { - return _toStringRange(_handle.map { $0.rangeOfPassword}) - } - - /// Returns the character range of the host in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - public var rangeOfHost: Range? { - return _toStringRange(_handle.map { $0.rangeOfHost}) - } - - /// Returns the character range of the port in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - public var rangeOfPort: Range? { - return _toStringRange(_handle.map { $0.rangeOfPort}) - } - - /// Returns the character range of the path in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - public var rangeOfPath: Range? { - return _toStringRange(_handle.map { $0.rangeOfPath}) - } - - /// Returns the character range of the query in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - public var rangeOfQuery: Range? { - return _toStringRange(_handle.map { $0.rangeOfQuery}) - } - - /// Returns the character range of the fragment in the string returned by `var string`. - /// - /// If the component does not exist, nil is returned. - /// - note: Zero length components are legal. For example, the URL string "scheme://:@/?#" has a zero length user, password, host, query and fragment; the URL strings "scheme:" and "" both have a zero length path. - public var rangeOfFragment: Range? { - return _toStringRange(_handle.map { $0.rangeOfFragment}) - } - - /// Returns an array of query items for this `URLComponents`, in the order in which they appear in the original query string. - /// - /// Each `URLQueryItem` represents a single key-value pair, - /// - /// Note that a name may appear more than once in a single query string, so the name values are not guaranteed to be unique. If the `URLComponents` has an empty query component, returns an empty array. If the `URLComponents` has no query component, returns nil. - /// - /// The setter combines an array containing any number of `URLQueryItem`s, each of which represents a single key-value pair, into a query string and sets the `URLComponents` query property. Passing an empty array sets the query component of the `URLComponents` to an empty string. Passing nil removes the query component of the `URLComponents`. - /// - /// - note: If a name-value pair in a query is empty (i.e. the query string starts with '&', ends with '&', or has "&&" within it), you get a `URLQueryItem` with a zero-length name and and a nil value. If a query's name-value pair has nothing before the equals sign, you get a zero-length name. If a query's name-value pair has nothing after the equals sign, you get a zero-length value. If a query's name-value pair has no equals sign, the query name-value pair string is the name and you get a nil value. - public var queryItems: [URLQueryItem]? { - get { return _handle.map { $0.queryItems } } - set { _applyMutation { $0.queryItems = newValue } } - } - - /// Returns an array of query items for this `URLComponents`, in the order in which they appear in the original query string. Any percent-encoding in a query item name or value is retained - /// - /// The setter combines an array containing any number of `URLQueryItem`s, each of which represents a single key-value pair, into a query string and sets the `URLComponents` query property. This property assumes the query item names and values are already correctly percent-encoded, and that the query item names do not contain the query item delimiter characters '&' and '='. Attempting to set an incorrectly percent-encoded query item or a query item name with the query item delimiter characters '&' and '=' will cause a `fatalError`. - public var percentEncodedQueryItems: [URLQueryItem]? { - get { return _handle.map { $0.percentEncodedQueryItems } } - set { _applyMutation { $0.percentEncodedQueryItems = newValue } } - } - -public func hash(into hasher: inout Hasher) { - hasher.combine(_handle.map { $0 }) - } - - // MARK: - Bridging - - fileprivate init(reference: NSURLComponents) { - _handle = _MutableHandle(reference: reference) - } - - public static func ==(lhs: URLComponents, rhs: URLComponents) -> Bool { - // Don't copy references here; no one should be storing anything - return lhs._handle._uncopiedReference().isEqual(rhs._handle._uncopiedReference()) - } -} - -extension URLComponents : CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - public var description: String { - if let u = url { - return u.description - } else { - return self.customMirror.children.reduce("") { - $0.appending("\($1.label ?? ""): \($1.value) ") - } - } - } - - public var debugDescription: String { - return self.description - } - - public var customMirror: Mirror { - var c: [(label: String?, value: Any)] = [] - - if let s = self.scheme { c.append((label: "scheme", value: s)) } - if let u = self.user { c.append((label: "user", value: u)) } - if let pw = self.password { c.append((label: "password", value: pw)) } - if let h = self.host { c.append((label: "host", value: h)) } - if let p = self.port { c.append((label: "port", value: p)) } - - c.append((label: "path", value: self.path)) - if #available(macOS 10.10, iOS 8.0, *) { - if let qi = self.queryItems { c.append((label: "queryItems", value: qi )) } - } - if let f = self.fragment { c.append((label: "fragment", value: f)) } - let m = Mirror(self, children: c, displayStyle: .struct) - return m - } } extension NSURLComponents : _SwiftBridgeable { typealias SwiftType = URLComponents - internal var _swiftObject: SwiftType { return URLComponents(reference: self) } + internal var _swiftObject: SwiftType { return URLComponents(string: self.string!)! } } extension URLComponents : _NSBridgeable { typealias NSType = NSURLComponents - internal var _nsObject: NSType { return _handle._copiedReference() } + internal var _nsObject: NSType { return NSURLComponents(string: self.string!)! } } extension URLComponents : _ObjectiveCBridgeable { @@ -345,7 +30,7 @@ extension URLComponents : _ObjectiveCBridgeable { @_semantics("convertToObjectiveC") public func _bridgeToObjectiveC() -> NSURLComponents { - return _handle._copiedReference() + return _nsObject } public static func _forceBridgeFromObjectiveC(_ x: NSURLComponents, result: inout URLComponents?) { @@ -355,7 +40,7 @@ extension URLComponents : _ObjectiveCBridgeable { } public static func _conditionallyBridgeFromObjectiveC(_ x: NSURLComponents, result: inout URLComponents?) -> Bool { - result = URLComponents(reference: x) + result = x._swiftObject return true } @@ -365,42 +50,3 @@ extension URLComponents : _ObjectiveCBridgeable { return result! } } - -extension URLComponents : Codable { - private enum CodingKeys : Int, CodingKey { - case scheme - case user - case password - case host - case port - case path - case query - case fragment - } - - public init(from decoder: Decoder) throws { - self.init() - - let container = try decoder.container(keyedBy: CodingKeys.self) - self.scheme = try container.decodeIfPresent(String.self, forKey: .scheme) - self.user = try container.decodeIfPresent(String.self, forKey: .user) - self.password = try container.decodeIfPresent(String.self, forKey: .password) - self.host = try container.decodeIfPresent(String.self, forKey: .host) - self.port = try container.decodeIfPresent(Int.self, forKey: .port) - self.path = try container.decode(String.self, forKey: .path) - self.query = try container.decodeIfPresent(String.self, forKey: .query) - self.fragment = try container.decodeIfPresent(String.self, forKey: .fragment) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(self.scheme, forKey: .scheme) - try container.encodeIfPresent(self.user, forKey: .user) - try container.encodeIfPresent(self.password, forKey: .password) - try container.encodeIfPresent(self.host, forKey: .host) - try container.encodeIfPresent(self.port, forKey: .port) - try container.encode(self.path, forKey: .path) - try container.encodeIfPresent(self.query, forKey: .query) - try container.encodeIfPresent(self.fragment, forKey: .fragment) - } -} diff --git a/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift b/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift index 48e1a9e578..7fde05a297 100644 --- a/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift +++ b/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift @@ -41,17 +41,14 @@ class _NSNonfileURLContentLoader: _NSNonfileURLContentLoading { required init() {} @usableFromInline - func contentsOf(url: Foundation.URL) throws -> (result: NSData, textEncodingNameIfAvailable: String?) { + func contentsOf(url: URL) throws -> (result: NSData, textEncodingNameIfAvailable: String?) { func cocoaError(with error: Error? = nil) -> Error { var userInfo: [String: AnyHashable] = [:] if let error = error as? AnyHashable { userInfo[NSUnderlyingErrorKey] = error } - // Temporary workaround for lack of URL in swift-foundation - // TODO: Replace with argument - let feURL = FoundationEssentials.URL(path: url.path) - return CocoaError.error(.fileReadUnknown, userInfo: userInfo, url: feURL) + return CocoaError.error(.fileReadUnknown, userInfo: userInfo, url: url) } var urlResponse: URLResponse? diff --git a/Tests/Foundation/TestBundle.swift b/Tests/Foundation/TestBundle.swift index 3e94ba4aee..4590bafab7 100644 --- a/Tests/Foundation/TestBundle.swift +++ b/Tests/Foundation/TestBundle.swift @@ -52,7 +52,7 @@ class BundlePlayground { case library case executable - var pathExtension: String { + var pathExtension: String? { switch self { case .library: #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) @@ -66,16 +66,16 @@ class BundlePlayground { #if os(Windows) return "exe" #else - return "" + return nil #endif } } - var flatPathExtension: String { + var flatPathExtension: String? { #if os(Windows) return self.pathExtension #else - return "" + return nil #endif } @@ -209,15 +209,22 @@ class BundlePlayground { // Make a main and an auxiliary executable: self.mainExecutableURL = bundleURL .appendingPathComponent(bundleName) - .appendingPathExtension(executableType.flatPathExtension) + + if let ext = executableType.flatPathExtension { + self.mainExecutableURL.appendPathExtension(ext) + } guard FileManager.default.createFile(atPath: mainExecutableURL.path, contents: nil) else { return false } - let auxiliaryExecutableURL = bundleURL + var auxiliaryExecutableURL = bundleURL .appendingPathComponent(auxiliaryExecutableName) - .appendingPathExtension(executableType.flatPathExtension) + + if let ext = executableType.flatPathExtension { + auxiliaryExecutableURL.appendPathExtension(ext) + } + guard FileManager.default.createFile(atPath: auxiliaryExecutableURL.path, contents: nil) else { return false } @@ -256,14 +263,20 @@ class BundlePlayground { self.mainExecutableURL = temporaryDirectory .appendingPathComponent(executableType.fhsPrefix) .appendingPathComponent(executableType.nonFlatFilePrefix + bundleName) - .appendingPathExtension(executableType.pathExtension) + + if let ext = executableType.pathExtension { + self.mainExecutableURL.appendPathExtension(ext) + } guard FileManager.default.createFile(atPath: mainExecutableURL.path, contents: nil) else { return false } let executablesDirectory = temporaryDirectory.appendingPathComponent("libexec").appendingPathComponent("\(bundleName).executables") try FileManager.default.createDirectory(atPath: executablesDirectory.path, withIntermediateDirectories: true, attributes: nil) - let auxiliaryExecutableURL = executablesDirectory + var auxiliaryExecutableURL = executablesDirectory .appendingPathComponent(executableType.nonFlatFilePrefix + auxiliaryExecutableName) - .appendingPathExtension(executableType.pathExtension) + + if let ext = executableType.pathExtension { + auxiliaryExecutableURL.appendPathExtension(ext) + } guard FileManager.default.createFile(atPath: auxiliaryExecutableURL.path, contents: nil) else { return false } // Make a .resources directory in …/share: @@ -297,7 +310,10 @@ class BundlePlayground { // Make a main executable: self.mainExecutableURL = temporaryDirectory .appendingPathComponent(executableType.nonFlatFilePrefix + bundleName) - .appendingPathExtension(executableType.pathExtension) + + if let ext = executableType.pathExtension { + self.mainExecutableURL.appendPathExtension(ext) + } guard FileManager.default.createFile(atPath: mainExecutableURL.path, contents: nil) else { return false } // Make a .resources directory: @@ -305,9 +321,11 @@ class BundlePlayground { try FileManager.default.createDirectory(atPath: resourcesDirectory.path, withIntermediateDirectories: false, attributes: nil) // Make an auxiliary executable: - let auxiliaryExecutableURL = resourcesDirectory + var auxiliaryExecutableURL = resourcesDirectory .appendingPathComponent(executableType.nonFlatFilePrefix + auxiliaryExecutableName) - .appendingPathExtension(executableType.pathExtension) + if let ext = executableType.pathExtension { + auxiliaryExecutableURL.appendPathExtension(ext) + } guard FileManager.default.createFile(atPath: auxiliaryExecutableURL.path, contents: nil) else { return false } // Put some resources in the bundle diff --git a/Tests/Foundation/TestDataURLProtocol.swift b/Tests/Foundation/TestDataURLProtocol.swift index 62a8d94d83..6ba3e5f501 100644 --- a/Tests/Foundation/TestDataURLProtocol.swift +++ b/Tests/Foundation/TestDataURLProtocol.swift @@ -115,7 +115,6 @@ class TestDataURLProtocol: XCTestCase { XCTAssertEqual(expectedProperties.expectedContentLength, response.expectedContentLength, "\(urlString) has incorrect content Length") XCTAssertEqual(expectedProperties.mimeType, response.mimeType, "\(urlString) has incorrect mime type") XCTAssertEqual(expectedProperties.textEncodingName, response.textEncodingName, "\(urlString) has incorrect encoding") - XCTAssertEqual("Unknown", response.suggestedFilename) let encoding = encodings[response.textEncodingName ?? "us-ascii"] ?? .ascii if let data = delegate.data, let string = String(data: data, encoding: encoding) { diff --git a/Tests/Foundation/TestFileManager.swift b/Tests/Foundation/TestFileManager.swift index 5e202ea911..9d431f6f47 100644 --- a/Tests/Foundation/TestFileManager.swift +++ b/Tests/Foundation/TestFileManager.swift @@ -1224,120 +1224,6 @@ class TestFileManager : XCTestCase { #if !DEPLOYMENT_RUNTIME_OBJC && !os(Android) // XDG tests require swift-corelibs-foundation - #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT // These are white box tests for the internals of XDG parsing: - func test_xdgStopgapsCoverAllConstants() { - let stopgaps = _XDGUserDirectory.stopgapDefaultDirectoryURLs - for directory in _XDGUserDirectory.allDirectories { - XCTAssertNotNil(stopgaps[directory]) - } - } - - func test_parseXDGConfiguration() { - let home = URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true) - - let assertConfigurationProduces = { (configuration: String, paths: [_XDGUserDirectory: String]) in - XCTAssertEqual(_XDGUserDirectory.userDirectories(fromConfiguration: configuration).mapValues({ $0.absoluteURL.path }), - paths.mapValues({ URL(fileURLWithPath: $0, isDirectory: true, relativeTo: home).absoluteURL.path })) - } - - assertConfigurationProduces("", [:]) - - // Test partial configuration and paths relative to home. - assertConfigurationProduces( -""" -DESKTOP=/xdg_test/Desktop -MUSIC=/xdg_test/Music -PICTURES=Pictures -""", [ .desktop: "/xdg_test/Desktop", - .music: "/xdg_test/Music", - .pictures: "Pictures" ]) - - // Test full configuration with XDG_…_DIR syntax, duplicate keys and varying indentation - // 'XDG_MUSIC_DIR' is duplicated, below. - assertConfigurationProduces( -""" - XDG_MUSIC_DIR=ShouldNotBeUsedUseTheOneBelowInstead - - XDG_DESKTOP_DIR=Desktop - XDG_DOWNLOAD_DIR=Download - XDG_PUBLICSHARE_DIR=Public -XDG_DOCUMENTS_DIR=Documents - XDG_MUSIC_DIR=Music -XDG_PICTURES_DIR=Pictures - XDG_VIDEOS_DIR=Videos -""", [ .desktop: "Desktop", - .download: "Download", - .publicShare: "Public", - .documents: "Documents", - .music: "Music", - .pictures: "Pictures", - .videos: "Videos" ]) - - // Same, without XDG…DIR. - assertConfigurationProduces( -""" - MUSIC=ShouldNotBeUsedUseTheOneBelowInstead - - DESKTOP=Desktop - DOWNLOAD=Download - PUBLICSHARE=Public -DOCUMENTS=Documents - MUSIC=Music -PICTURES=Pictures - VIDEOS=Videos -""", [ .desktop: "Desktop", - .download: "Download", - .publicShare: "Public", - .documents: "Documents", - .music: "Music", - .pictures: "Pictures", - .videos: "Videos" ]) - - assertConfigurationProduces( -""" - DESKTOP=/home/Desktop -This configuration file has an invalid syntax. -""", [:]) - } - - func test_xdgURLSelection() { - let home = URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true) - - let configuration = _XDGUserDirectory.userDirectories(fromConfiguration: -""" -DESKTOP=UserDesktop -""" - ) - - let osDefaults = _XDGUserDirectory.userDirectories(fromConfiguration: -""" -DESKTOP=SystemDesktop -PUBLICSHARE=SystemPublicShare -""" - ) - - let stopgaps = _XDGUserDirectory.userDirectories(fromConfiguration: -""" -DESKTOP=StopgapDesktop -DOWNLOAD=StopgapDownload -PUBLICSHARE=StopgapPublicShare -DOCUMENTS=StopgapDocuments -MUSIC=StopgapMusic -PICTURES=StopgapPictures -VIDEOS=StopgapVideos -""" - ) - - let assertSameAbsolutePath = { (lhs: URL, rhs: URL) in - XCTAssertEqual(lhs.absoluteURL.path, rhs.absoluteURL.path) - } - - assertSameAbsolutePath(_XDGUserDirectory.desktop.url(userConfiguration: configuration, osDefaultConfiguration: osDefaults, stopgaps: stopgaps), home.appendingPathComponent("UserDesktop")) - assertSameAbsolutePath(_XDGUserDirectory.publicShare.url(userConfiguration: configuration, osDefaultConfiguration: osDefaults, stopgaps: stopgaps), home.appendingPathComponent("SystemPublicShare")) - assertSameAbsolutePath(_XDGUserDirectory.music.url(userConfiguration: configuration, osDefaultConfiguration: osDefaults, stopgaps: stopgaps), home.appendingPathComponent("StopgapMusic")) - } - #endif // NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT - // This test below is a black box test, and does not require @testable import. #if !os(Android) @@ -1413,81 +1299,81 @@ VIDEOS=StopgapVideos XCTAssertNil(NSHomeDirectoryForUser("")) XCTAssertThrowsError(try fm.contentsOfDirectory(atPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertNil(fm.enumerator(atPath: "")) XCTAssertNil(fm.subpaths(atPath: "")) XCTAssertThrowsError(try fm.subpathsOfDirectory(atPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertThrowsError(try fm.createDirectory(atPath: "", withIntermediateDirectories: true)) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertFalse(fm.createFile(atPath: "", contents: Data())) XCTAssertThrowsError(try fm.removeItem(atPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertThrowsError(try fm.copyItem(atPath: "", toPath: "/tmp/t")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertThrowsError(try fm.copyItem(atPath: "", toPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertThrowsError(try fm.copyItem(atPath: "/tmp/t", toPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.moveItem(atPath: "", toPath: "/tmp/t")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertThrowsError(try fm.moveItem(atPath: "", toPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertThrowsError(try fm.moveItem(atPath: "/tmp/t", toPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertThrowsError(try fm.linkItem(atPath: "", toPath: "/tmp/t")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertThrowsError(try fm.linkItem(atPath: "", toPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertThrowsError(try fm.linkItem(atPath: "/tmp/t", toPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.createSymbolicLink(atPath: "", withDestinationPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertThrowsError(try fm.createSymbolicLink(atPath: "", withDestinationPath: "/tmp/t")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertThrowsError(try fm.createSymbolicLink(atPath: "/tmp/t", withDestinationPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertThrowsError(try fm.destinationOfSymbolicLink(atPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertFalse(fm.fileExists(atPath: "")) @@ -1498,15 +1384,15 @@ VIDEOS=StopgapVideos XCTAssertTrue(fm.isDeletableFile(atPath: "")) XCTAssertThrowsError(try fm.attributesOfItem(atPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertThrowsError(try fm.attributesOfFileSystem(forPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } XCTAssertThrowsError(try fm.setAttributes([:], ofItemAtPath: "")) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } diff --git a/Tests/Foundation/TestURL.swift b/Tests/Foundation/TestURL.swift index f4d24543a7..b392afe7a2 100644 --- a/Tests/Foundation/TestURL.swift +++ b/Tests/Foundation/TestURL.swift @@ -195,10 +195,10 @@ class TestURL : XCTestCase { result["absoluteString"] = url.absoluteString result["absoluteURLString"] = url.absoluteURL.relativeString result["scheme"] = url.scheme ?? kNullString - result["host"] = url.host ?? kNullString + result["host"] = url.host(percentEncoded: false) ?? kNullString result["port"] = url.port ?? kNullString - result["user"] = url.user ?? kNullString + result["user"] = url.user(percentEncoded: false) ?? kNullString result["password"] = url.password ?? kNullString result["path"] = url.path result["query"] = url.query ?? kNullString @@ -272,6 +272,8 @@ class TestURL : XCTestCase { } } + // TODO: Disabled until it is updated to the new parser in swift-foundation + #if false func test_URLStrings() { for obj in getTestData()! { let testDict = obj as! [String: Any] @@ -325,6 +327,7 @@ class TestURL : XCTestCase { } } } + #endif static let gBaseTemporaryDirectoryPath = (NSTemporaryDirectory() as NSString).appendingPathComponent("org.swift.foundation.TestFoundation.TestURL.\(ProcessInfo.processInfo.processIdentifier)") static var gBaseCurrentWorkingDirectoryPath : String { @@ -525,19 +528,19 @@ class TestURL : XCTestCase { func test_URLByResolvingSymlinksInPathShouldRemoveDuplicatedPathSeparators() { let url = URL(fileURLWithPath: "//foo///bar////baz/") let result = url.resolvingSymlinksInPath() - XCTAssertEqual(result, URL(fileURLWithPath: "/foo/bar/baz")) + XCTAssertEqual(result, URL(fileURLWithPath: "/foo/bar/baz/")) } func test_URLByResolvingSymlinksInPathShouldRemoveSingleDotsBetweenSeparators() { let url = URL(fileURLWithPath: "/./foo/./.bar/./baz/./") let result = url.resolvingSymlinksInPath() - XCTAssertEqual(result, URL(fileURLWithPath: "/foo/.bar/baz")) + XCTAssertEqual(result, URL(fileURLWithPath: "/foo/.bar/baz/")) } func test_URLByResolvingSymlinksInPathShouldCompressDoubleDotsBetweenSeparators() { let url = URL(fileURLWithPath: "/foo/../..bar/../baz/") let result = url.resolvingSymlinksInPath() - XCTAssertEqual(result, URL(fileURLWithPath: "/baz")) + XCTAssertEqual(result, URL(fileURLWithPath: "/baz/")) } func test_URLByResolvingSymlinksInPathShouldUseTheCurrentDirectory() throws { diff --git a/Tests/Foundation/TestURLSession.swift b/Tests/Foundation/TestURLSession.swift index 76e0d11b9a..eae38404df 100644 --- a/Tests/Foundation/TestURLSession.swift +++ b/Tests/Foundation/TestURLSession.swift @@ -297,7 +297,7 @@ class TestURLSession: LoopbackServerTest { } func test_taskError() { - let urlString = "http://127.0.0.1:-1/Nepal" + let urlString = "http://127.0.0.0:999999/Nepal" let url = URL(string: urlString)! let session = URLSession(configuration: URLSessionConfiguration.default, delegate: nil, @@ -504,10 +504,10 @@ class TestURLSession: LoopbackServerTest { func test_timeoutInterval() { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 10 - let urlString = "http://127.0.0.1:-1/Peru" + let urlString = "http://127.0.0.1:999999/Peru" let session = URLSession(configuration: config, delegate: nil, delegateQueue: nil) let expect = expectation(description: "GET \(urlString): will timeout") - var req = URLRequest(url: URL(string: "http://127.0.0.1:-1/Peru")!) + var req = URLRequest(url: URL(string: "http://127.0.0.1:999999/Peru")!) req.timeoutInterval = 1 let task = session.dataTask(with: req) { (data, _, error) -> Void in defer { expect.fulfill() } From a9ffa779b1fdaa767c9c6ea28acfca32f7efe460 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Tue, 7 May 2024 12:08:14 -0700 Subject: [PATCH 067/198] CoreFoundation modularization and packaging improvements --- Package.swift | 57 +- Sources/CoreFoundation/CFCharacterSet.c | 89 +- Sources/CoreFoundation/CFCharacterSetData.S | 40 - Sources/CoreFoundation/CFDate.c | 12 - Sources/CoreFoundation/CFRunLoop.c | 33 +- Sources/CoreFoundation/CFRuntime.c | 10 +- Sources/CoreFoundation/CFTimeZone.c | 2 +- Sources/CoreFoundation/CFUniChar.c | 752 +- .../CFUniCharPropertyDatabase.S | 40 - .../CFUniCharPropertyDatabase.data | Bin 45092 -> 0 bytes .../CoreFoundation/CFUnicodeData-B.mapping | Bin 97208 -> 0 bytes .../CoreFoundation/CFUnicodeData-L.mapping | Bin 97208 -> 0 bytes Sources/CoreFoundation/CFUnicodeData.S | 54 - .../CoreFoundation/CFUnicodeDecomposition.c | 77 +- .../CoreFoundation/CFUnicodePrecomposition.c | 49 +- Sources/CoreFoundation/include/CFBase.h | 60 +- Sources/CoreFoundation/include/CFBigNumber.h | 3 +- Sources/CoreFoundation/include/CFBundlePriv.h | 9 - .../CoreFoundation/include/CFMessagePort.h | 3 - Sources/CoreFoundation/include/CFOverflow.h | 27 +- Sources/CoreFoundation/include/CFRunLoop.h | 28 + .../CoreFoundation/include/CFString_Private.h | 25 - Sources/CoreFoundation/include/CFUniChar.h | 10 +- .../include/CFUnicodeDecomposition.h | 4 +- .../include/CFUnicodePrecomposition.h | 3 - .../include/ForFoundationOnly.h | 63 - .../include/ForSwiftFoundationOnly.h | 4 +- .../CFBundle_SplitFileName.h | 0 .../CFICUConverters.h | 0 .../CFICULogging.h | 0 .../internalInclude/CFInternal.h | 33 +- .../internalInclude/CFUniCharBitmapData.h | 15 + .../internalInclude/CFUniCharBitmapData.inc.h | 14705 ++++++++++++++++ ...niCharCompatibilityDecompositionData.inc.h | 2644 +++ .../CFUniCharDecompositionData.inc.h | 1557 ++ .../CFUniCharPrecompositionData.inc.h | 287 + .../CFUniCharPriv.h | 0 .../CFUniCharPropertyDatabase.inc.h | 1495 ++ .../CFUnicodeCaseMapping-B.inc.h | 1811 ++ .../CFUnicodeCaseMapping-L.inc.h | 1811 ++ .../internalInclude/CFUnicodeData-B.inc.h | 6233 +++++++ .../internalInclude/CFUnicodeData-L.inc.h | 6233 +++++++ .../CoreFoundation_Prefix.h | 35 +- Sources/CoreFoundation/module.map | 2 +- Sources/CoreFoundation/module.modulemap | 2 +- 45 files changed, 37102 insertions(+), 1215 deletions(-) delete mode 100644 Sources/CoreFoundation/CFCharacterSetData.S delete mode 100644 Sources/CoreFoundation/CFUniCharPropertyDatabase.S delete mode 100644 Sources/CoreFoundation/CFUniCharPropertyDatabase.data delete mode 100644 Sources/CoreFoundation/CFUnicodeData-B.mapping delete mode 100644 Sources/CoreFoundation/CFUnicodeData-L.mapping delete mode 100644 Sources/CoreFoundation/CFUnicodeData.S rename Sources/CoreFoundation/{include => internalInclude}/CFBundle_SplitFileName.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFICUConverters.h (100%) rename Sources/CoreFoundation/{include => internalInclude}/CFICULogging.h (100%) create mode 100644 Sources/CoreFoundation/internalInclude/CFUniCharBitmapData.h create mode 100644 Sources/CoreFoundation/internalInclude/CFUniCharBitmapData.inc.h create mode 100644 Sources/CoreFoundation/internalInclude/CFUniCharCompatibilityDecompositionData.inc.h create mode 100644 Sources/CoreFoundation/internalInclude/CFUniCharDecompositionData.inc.h create mode 100644 Sources/CoreFoundation/internalInclude/CFUniCharPrecompositionData.inc.h rename Sources/CoreFoundation/{include => internalInclude}/CFUniCharPriv.h (100%) create mode 100644 Sources/CoreFoundation/internalInclude/CFUniCharPropertyDatabase.inc.h create mode 100644 Sources/CoreFoundation/internalInclude/CFUnicodeCaseMapping-B.inc.h create mode 100644 Sources/CoreFoundation/internalInclude/CFUnicodeCaseMapping-L.inc.h create mode 100644 Sources/CoreFoundation/internalInclude/CFUnicodeData-B.inc.h create mode 100644 Sources/CoreFoundation/internalInclude/CFUnicodeData-L.inc.h rename Sources/CoreFoundation/{include => internalInclude}/CoreFoundation_Prefix.h (91%) diff --git a/Package.swift b/Package.swift index 3f082ecaa2..4639d21068 100644 --- a/Package.swift +++ b/Package.swift @@ -3,19 +3,15 @@ import PackageDescription -let buildSettings: [CSetting] = [ +let coreFoundationBuildSettings: [CSetting] = [ .headerSearchPath("internalInclude"), .define("DEBUG", .when(configuration: .debug)), .define("CF_BUILDING_CF"), - .define("DEPLOYMENT_RUNTIME_SWIFT"), .define("DEPLOYMENT_ENABLE_LIBDISPATCH"), + .define("DEPLOYMENT_RUNTIME_SWIFT"), .define("HAVE_STRUCT_TIMESPEC"), .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS"), .define("_GNU_SOURCE", .when(platforms: [.linux, .android])), - .define("CF_CHARACTERSET_UNICODE_DATA_L", to: "\"\(Context.packageDirectory)/Sources/CoreFoundation/CFUnicodeData-L.mapping\""), - .define("CF_CHARACTERSET_UNICODE_DATA_B", to: "\"\(Context.packageDirectory)/Sources/CoreFoundation/CFUnicodeData-B.mapping\""), - .define("CF_CHARACTERSET_UNICHAR_DB", to: "\"\(Context.packageDirectory)/Sources/CoreFoundation/CFUniCharPropertyDatabase.data\""), - .define("CF_CHARACTERSET_BITMAP", to: "\"\(Context.packageDirectory)/Sources/CoreFoundation/CFCharacterSetBitmaps.bitmap\""), .unsafeFlags([ "-Wno-shorten-64-to-32", "-Wno-deprecated-declarations", @@ -29,6 +25,8 @@ let buildSettings: [CSetting] = [ "-fdollars-in-identifiers", "-fno-common", "-fcf-runtime-abi=swift", + "-include", + "\(Context.packageDirectory)/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h", // /EHsc for Windows ]), .unsafeFlags(["-I/usr/lib/swift"], .when(platforms: [.linux, .android])) // dispatch @@ -40,7 +38,6 @@ let interfaceBuildSettings: [CSetting] = [ .headerSearchPath("../CoreFoundation/include"), .define("DEBUG", .when(configuration: .debug)), .define("CF_BUILDING_CF"), - .define("DEPLOYMENT_RUNTIME_SWIFT"), .define("DEPLOYMENT_ENABLE_LIBDISPATCH"), .define("HAVE_STRUCT_TIMESPEC"), .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS"), @@ -63,9 +60,15 @@ let interfaceBuildSettings: [CSetting] = [ .unsafeFlags(["-I/usr/lib/swift"], .when(platforms: [.linux, .android])) // dispatch ] +let swiftBuildSettings: [SwiftSetting] = [ + .define("DEPLOYMENT_RUNTIME_SWIFT"), + .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS"), +] + let package = Package( name: "swift-corelibs-foundation", - platforms: [.macOS("13.3"), .iOS("16.4"), .tvOS("16.4"), .watchOS("9.4")], + // Deployment target note: This package only builds for non-Darwin targets. + platforms: [.macOS("99.9")], products: [ .library(name: "Foundation", targets: ["Foundation"]), .library(name: "FoundationXML", targets: ["FoundationXML"]), @@ -75,7 +78,8 @@ let package = Package( dependencies: [ .package( url: "https://github.com/apple/swift-foundation-icu", - from: "0.0.5"), + from: "0.0.5" + ), .package( url: "https://github.com/apple/swift-foundation", revision: "e991656bd02af48530811f1871b3351961b75d29" @@ -90,29 +94,29 @@ let package = Package( "_CoreFoundation" ], path: "Sources/Foundation", - swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT"), .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS")] + swiftSettings: swiftBuildSettings ), .target( name: "FoundationXML", dependencies: [ .product(name: "FoundationEssentials", package: "swift-foundation"), - "Foundation", + .targetItem(name: "Foundation", condition: nil), "_CoreFoundation", "_CFXMLInterface" ], path: "Sources/FoundationXML", - swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT"), .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS")] + swiftSettings: swiftBuildSettings ), .target( name: "FoundationNetworking", dependencies: [ .product(name: "FoundationEssentials", package: "swift-foundation"), - "Foundation", + .targetItem(name: "Foundation", condition: nil), "_CoreFoundation", "_CFURLSessionInterface" ], path: "Sources/FoundationNetworking", - swiftSettings: [.define("DEPLOYMENT_RUNTIME_SWIFT"), .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS")] + swiftSettings:swiftBuildSettings ), .target( name: "_CoreFoundation", @@ -120,7 +124,7 @@ let package = Package( .product(name: "FoundationICU", package: "swift-foundation-icu"), ], path: "Sources/CoreFoundation", - cSettings: buildSettings + cSettings: coreFoundationBuildSettings ), .target( name: "_CFXMLInterface", @@ -158,13 +162,16 @@ let package = Package( ), .executableTarget( name: "plutil", - dependencies: ["Foundation"] + dependencies: [ + .targetItem(name: "Foundation", condition: nil) + ] ), .executableTarget( name: "xdgTestHelper", dependencies: [ - "Foundation", - "FoundationNetworking" + .targetItem(name: "Foundation", condition: nil), + .targetItem(name: "FoundationXML", condition: nil), + .targetItem(name: "FoundationNetworking", condition: nil) ] ), .target( @@ -172,19 +179,19 @@ let package = Package( // (1) we do not depend on the toolchain's XCTest, which depends on toolchain's Foundation, which we cannot pull in at the same time as a Foundation package // (2) we do not depend on a swift-corelibs-xctest Swift package, which depends on Foundation, which causes a circular dependency in swiftpm // We believe Foundation is the only project that needs to take this rather drastic measure. - name: "XCTest", + name: "XCTest", dependencies: [ - "Foundation" - ], + .targetItem(name: "Foundation", condition: nil) + ], path: "Sources/XCTest" ), .testTarget( name: "TestFoundation", dependencies: [ - "Foundation", - "FoundationXML", - "FoundationNetworking", - "XCTest", + .targetItem(name: "Foundation", condition: nil), + .targetItem(name: "FoundationXML", condition: nil), + .targetItem(name: "FoundationNetworking", condition: nil), + .targetItem(name: "XCTest", condition: .when(platforms: [.linux])), "xdgTestHelper" ], resources: [ diff --git a/Sources/CoreFoundation/CFCharacterSet.c b/Sources/CoreFoundation/CFCharacterSet.c index 3213beb5ba..8a65277d5f 100644 --- a/Sources/CoreFoundation/CFCharacterSet.c +++ b/Sources/CoreFoundation/CFCharacterSet.c @@ -19,8 +19,9 @@ #include "CFUniCharPriv.h" #include #include +#include "CFPriv.h" #include - +#include #define BITSPERBYTE 8 /* (CHAR_BIT * sizeof(unsigned char)) */ #define LOG_BPB 3 @@ -104,6 +105,12 @@ enum { __kCFCharSetClassCompactBitmap = 4, }; +#define __CFCSetInfoFlagVariantHighBit (6) +#define __CFCSetInfoFlagVariantLowBit (4) +#define __CFCSetInfoFlagInvertedBit (3) +#define __CFCSetInfoFlagHasHashBit (2) +#define __CFCSetInfoFlagIsMutableBit (0) + /* Inline accessor macros for _base._info */ CF_INLINE Boolean __CFCSetIsMutable(CFCharacterSetRef cset) { @@ -111,50 +118,50 @@ CF_INLINE Boolean __CFCSetIsMutable(CFCharacterSetRef cset) { } CF_INLINE Boolean __CFCSetIsBuiltin(CFCharacterSetRef cset) { - return __CFRuntimeGetValue(cset, 6, 4) == __kCFCharSetClassBuiltin; + return __CFRuntimeGetValue(cset, __CFCSetInfoFlagVariantHighBit, __CFCSetInfoFlagVariantLowBit) == __kCFCharSetClassBuiltin; } CF_INLINE Boolean __CFCSetIsRange(CFCharacterSetRef cset) { - return __CFRuntimeGetValue(cset, 6, 4) == __kCFCharSetClassRange; + return __CFRuntimeGetValue(cset, __CFCSetInfoFlagVariantHighBit, __CFCSetInfoFlagVariantLowBit) == __kCFCharSetClassRange; } CF_INLINE Boolean __CFCSetIsString(CFCharacterSetRef cset) { - return __CFRuntimeGetValue(cset, 6, 4) == __kCFCharSetClassString; + return __CFRuntimeGetValue(cset, __CFCSetInfoFlagVariantHighBit, __CFCSetInfoFlagVariantLowBit) == __kCFCharSetClassString; } CF_INLINE Boolean __CFCSetIsBitmap(CFCharacterSetRef cset) { - return __CFRuntimeGetValue(cset, 6, 4) == __kCFCharSetClassBitmap; + return __CFRuntimeGetValue(cset, __CFCSetInfoFlagVariantHighBit, __CFCSetInfoFlagVariantLowBit) == __kCFCharSetClassBitmap; } CF_INLINE Boolean __CFCSetIsCompactBitmap(CFCharacterSetRef cset) { - return __CFRuntimeGetValue(cset, 6, 4) == __kCFCharSetClassCompactBitmap; + return __CFRuntimeGetValue(cset, __CFCSetInfoFlagVariantHighBit, __CFCSetInfoFlagVariantLowBit) == __kCFCharSetClassCompactBitmap; } CF_INLINE UInt32 __CFCSetClassType(CFCharacterSetRef cset) { - return __CFRuntimeGetValue(cset, 6, 4); + return __CFRuntimeGetValue(cset, __CFCSetInfoFlagVariantHighBit, __CFCSetInfoFlagVariantLowBit); } CF_INLINE Boolean __CFCSetIsInverted(CFCharacterSetRef cset) { - return __CFRuntimeGetFlag(cset, 3); + return __CFRuntimeGetFlag(cset, __CFCSetInfoFlagInvertedBit); } CF_INLINE Boolean __CFCSetHasHashValue(CFCharacterSetRef cset) { - return __CFRuntimeGetFlag(cset, 2); + return __CFRuntimeGetFlag(cset, __CFCSetInfoFlagHasHashBit); } CF_INLINE void __CFCSetPutIsMutable(CFMutableCharacterSetRef cset, Boolean isMutable) { - __CFRuntimeSetFlag(cset, 0, isMutable); + __CFRuntimeSetFlag(cset, __CFCSetInfoFlagIsMutableBit, isMutable); } CF_INLINE void __CFCSetPutIsInverted(CFMutableCharacterSetRef cset, Boolean isInverted) { - __CFRuntimeSetFlag(cset, 3, isInverted); + __CFRuntimeSetFlag(cset, __CFCSetInfoFlagInvertedBit, isInverted); } CF_INLINE void __CFCSetPutHasHashValue(CFMutableCharacterSetRef cset, Boolean hasHash) { - __CFRuntimeSetFlag(cset, 2, hasHash); + __CFRuntimeSetFlag(cset, __CFCSetInfoFlagHasHashBit, hasHash); } CF_INLINE void __CFCSetPutClassType(CFMutableCharacterSetRef cset, UInt32 classType) { - __CFRuntimeSetValue(cset, 6, 4, classType); + __CFRuntimeSetValue(cset, __CFCSetInfoFlagVariantHighBit, __CFCSetInfoFlagVariantLowBit, classType); } CF_PRIVATE Boolean __CFCharacterSetIsMutable(CFCharacterSetRef cset) { @@ -181,13 +188,13 @@ CF_INLINE void __CFCSetPutCompactBitmapBits(CFMutableCharacterSetRef cset, uint8 /* Validation funcs */ - CF_INLINE void __CFCSetValidateBuiltinType(CFCharacterSetPredefinedSet type, const char *func) { if (type < __kCFFirstBuiltinSetID || type > __kCFLastBuiltinSetID) { CFLog(__kCFLogAssertion, CFSTR("%s: Unknown builtin type %ld"), func, (long)type); HALT_MSG("Unknown builtin CFCharacterSet type"); } } + CF_INLINE void __CFCSetValidateTypeAndMutability(CFCharacterSetRef cset, const char *func) { __CFGenericValidateType(cset, _kCFRuntimeIDCFCharacterSet); if (!__CFCSetIsMutable(cset)) { @@ -196,11 +203,18 @@ CF_INLINE void __CFCSetValidateTypeAndMutability(CFCharacterSetRef cset, const c } } -CF_INLINE void __CFCSetValidateRange(CFRange theRange, const char *func) { - if (theRange.location < UCHAR_MIN_VALUE || theRange.location > UCHAR_MAX_VALUE || theRange.length > UCHAR_MAX_VALUE + 1 || theRange.location + theRange.length < UCHAR_MIN_VALUE || theRange.location + theRange.length > UCHAR_MAX_VALUE + 1) { +bool _CFCharacterSetIsValidRange(CFRange theRange) { + return theRange.location >= UCHAR_MIN_VALUE && theRange.location <= UCHAR_MAX_VALUE && theRange.length <= UCHAR_MAX_VALUE + 1 && theRange.location + theRange.length >= UCHAR_MIN_VALUE && theRange.location + theRange.length <= UCHAR_MAX_VALUE + 1; +} + +CF_INLINE Boolean __CFCSetValidateRange(CFRange theRange, const char *func) { + if (!_CFCharacterSetIsValidRange(theRange)) { CFLog(__kCFLogAssertion, CFSTR("%s: Range (location: %ld, length: %ld) outside of valid Unicode range (0x0 - 0x10FFFF)"), func, (long)theRange.location, (long)theRange.length); - HALT_MSG("CFCharacterSet range is outside of valid Unicode range (0x0 - 0x10FFFF)"); + HALT_MSG("CFCharacterSet range is outside of valid Unicode range (0x0 - 0x10FFFF)"); + + return false; } + return true; } /* Inline utility funcs @@ -524,7 +538,7 @@ static void __CFCheckForExpandedSet(CFCharacterSetRef cset) { static bool warnedOnce = false; if (0 > __CFNumberOfPlanesForLogging) { - const char *envVar = __CFgetenv("CFCharacterSetCheckForExpandedSet"); + const char *envVar = getenv("CFCharacterSetCheckForExpandedSet"); long value = (envVar ? strtol_l(envVar, NULL, 0, NULL) : 0); __CFNumberOfPlanesForLogging = (int8_t)(((value > 0) && (value <= 16)) ? value : 0); } @@ -1394,9 +1408,12 @@ CFCharacterSetRef CFCharacterSetGetPredefined(CFCharacterSetPredefinedSet theSet return cset; } + #if DEPLOYMENT_RUNTIME_SWIFT Boolean _CFCharacterSetInitWithCharactersInRange(CFMutableCharacterSetRef cset, CFRange theRange) { - __CFCSetValidateRange(theRange, __PRETTY_FUNCTION__); + if (!__CFCSetValidateRange(theRange, __PRETTY_FUNCTION__)) { + return false; + } if (theRange.length) { if (!__CFCSetGenericInit(cset, __kCFCharSetClassRange, false)) return false; @@ -1412,7 +1429,9 @@ Boolean _CFCharacterSetInitWithCharactersInRange(CFMutableCharacterSetRef cset, #endif CFCharacterSetRef CFCharacterSetCreateWithCharactersInRange(CFAllocatorRef allocator, CFRange theRange) { - __CFCSetValidateRange(theRange, __PRETTY_FUNCTION__); + if (!__CFCSetValidateRange(theRange, __PRETTY_FUNCTION__)) { + return NULL; + } CFMutableCharacterSetRef cset; @@ -1634,7 +1653,6 @@ CFCharacterSetRef CFCharacterSetCreateWithBitmapRepresentation(CFAllocatorRef al CFCharacterSetRef CFCharacterSetCreateInvertedSet(CFAllocatorRef alloc, CFCharacterSetRef theSet) { CFMutableCharacterSetRef cset; - CF_OBJC_RETAINED_FUNCDISPATCHV(_kCFRuntimeIDCFCharacterSet, CFCharacterSetRef , (NSCharacterSet *)theSet, invertedSet); cset = CFCharacterSetCreateMutableCopy(alloc, theSet); @@ -2002,7 +2020,7 @@ Boolean CFCharacterSetHasMemberInPlane(CFCharacterSetRef theSet, CFIndex thePlan } CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCharacterSet, Boolean, (NSCharacterSet *)theSet, hasMemberInPlane:(uint8_t)thePlane); - + if (__CFCSetIsEmpty(theSet)) { return (isInverted ? TRUE : FALSE); } else if (__CFCSetIsBuiltin(theSet)) { @@ -2080,7 +2098,7 @@ Boolean CFCharacterSetHasMemberInPlane(CFCharacterSetRef theSet, CFIndex thePlan CFDataRef CFCharacterSetCreateBitmapRepresentation(CFAllocatorRef alloc, CFCharacterSetRef theSet) { CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCharacterSet, CFDataRef , (NSCharacterSet *)theSet, _retainedBitmapRepresentation); - + __CFGenericValidateType(theSet, _kCFRuntimeIDCFCharacterSet); bool isAnnexInverted = (__CFCSetAnnexIsInverted(theSet) != 0); @@ -2280,9 +2298,11 @@ CFDataRef CFCharacterSetCreateBitmapRepresentation(CFAllocatorRef alloc, CFChara /*** MutableCharacterSet functions ***/ void CFCharacterSetAddCharactersInRange(CFMutableCharacterSetRef theSet, CFRange theRange) { CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCharacterSet, void, (NSMutableCharacterSet *)theSet, addCharactersInRange:NSMakeRange(theRange.location, theRange.length)); - + __CFCSetValidateTypeAndMutability(theSet, __PRETTY_FUNCTION__); - __CFCSetValidateRange(theRange, __PRETTY_FUNCTION__); + if (!__CFCSetValidateRange(theRange, __PRETTY_FUNCTION__)) { + return; + } if (__CFCSetIsBuiltin((CFCharacterSetRef)theSet) && !__CFCSetIsMutable((CFCharacterSetRef)theSet) && !__CFCSetIsInverted((CFCharacterSetRef)theSet)) { CFCharacterSetRef sharedSet = CFCharacterSetGetPredefined(__CFCSetBuiltinType((CFCharacterSetRef)theSet)); @@ -2347,9 +2367,11 @@ void CFCharacterSetAddCharactersInRange(CFMutableCharacterSetRef theSet, CFRange void CFCharacterSetRemoveCharactersInRange(CFMutableCharacterSetRef theSet, CFRange theRange) { CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCharacterSet, void, (NSMutableCharacterSet *)theSet, removeCharactersInRange:NSMakeRange(theRange.location, theRange.length)); - + __CFCSetValidateTypeAndMutability(theSet, __PRETTY_FUNCTION__); - __CFCSetValidateRange(theRange, __PRETTY_FUNCTION__); + if (!__CFCSetValidateRange(theRange, __PRETTY_FUNCTION__)) { + return; + } if (__CFCSetIsBuiltin((CFCharacterSetRef)theSet) && !__CFCSetIsMutable((CFCharacterSetRef)theSet) && !__CFCSetIsInverted((CFCharacterSetRef)theSet)) { CFCharacterSetRef sharedSet = CFCharacterSetGetPredefined(__CFCSetBuiltinType((CFCharacterSetRef)theSet)); @@ -2423,7 +2445,7 @@ void CFCharacterSetAddCharactersInString(CFMutableCharacterSetRef theSet, CFStr BOOL hasSurrogate = NO; CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCharacterSet, void, (NSMutableCharacterSet *)theSet, addCharactersInString:(NSString *)theString); - + __CFCSetValidateTypeAndMutability(theSet, __PRETTY_FUNCTION__); if (__CFCSetIsBuiltin((CFCharacterSetRef)theSet) && !__CFCSetIsMutable((CFCharacterSetRef)theSet) && !__CFCSetIsInverted((CFCharacterSetRef)theSet)) { @@ -2516,7 +2538,7 @@ void CFCharacterSetRemoveCharactersInString(CFMutableCharacterSetRef theSet, CFS BOOL hasSurrogate = NO; CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCharacterSet, void, (NSMutableCharacterSet *)theSet, removeCharactersInString:(NSString *)theString); - + __CFCSetValidateTypeAndMutability(theSet, __PRETTY_FUNCTION__); if (__CFCSetIsBuiltin((CFCharacterSetRef)theSet) && !__CFCSetIsMutable((CFCharacterSetRef)theSet) && !__CFCSetIsInverted((CFCharacterSetRef)theSet)) { @@ -2601,7 +2623,7 @@ void CFCharacterSetUnion(CFMutableCharacterSetRef theSet, CFCharacterSetRef theO CFCharacterSetRef expandedSet = NULL; CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCharacterSet, void, (NSMutableCharacterSet *)theSet, formUnionWithCharacterSet:(NSCharacterSet *)theOtherSet); - + __CFCSetValidateTypeAndMutability(theSet, __PRETTY_FUNCTION__); if (__CFCSetIsBuiltin((CFCharacterSetRef)theSet) && !__CFCSetIsMutable((CFCharacterSetRef)theSet) && !__CFCSetIsInverted((CFCharacterSetRef)theSet)) { @@ -2738,7 +2760,7 @@ void CFCharacterSetIntersect(CFMutableCharacterSetRef theSet, CFCharacterSetRef CFCharacterSetRef expandedSet = NULL; CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCharacterSet, void, (NSMutableCharacterSet *)theSet, formIntersectionWithCharacterSet:(NSCharacterSet *)theOtherSet); - + __CFCSetValidateTypeAndMutability(theSet, __PRETTY_FUNCTION__); if (__CFCSetIsBuiltin((CFCharacterSetRef)theSet) && !__CFCSetIsMutable((CFCharacterSetRef)theSet) && !__CFCSetIsInverted((CFCharacterSetRef)theSet)) { @@ -2981,7 +3003,7 @@ void CFCharacterSetIntersect(CFMutableCharacterSetRef theSet, CFCharacterSetRef void CFCharacterSetInvert(CFMutableCharacterSetRef theSet) { CF_OBJC_FUNCDISPATCHV(_kCFRuntimeIDCFCharacterSet, void, (NSMutableCharacterSet *)theSet, invert); - + __CFCSetValidateTypeAndMutability(theSet, __PRETTY_FUNCTION__); if (__CFCSetIsBuiltin((CFCharacterSetRef)theSet) && !__CFCSetIsMutable((CFCharacterSetRef)theSet) && !__CFCSetIsInverted((CFCharacterSetRef)theSet)) { @@ -3060,7 +3082,6 @@ void _CFCharacterSetFast(CFMutableCharacterSetRef theSet) { } } } - /* Keyed-coding support */ CFCharacterSetKeyedCodingType _CFCharacterSetGetKeyedCodingType(CFCharacterSetRef cset) { @@ -3072,7 +3093,7 @@ CFCharacterSetKeyedCodingType _CFCharacterSetGetKeyedCodingType(CFCharacterSetRe case __kCFCharSetClassString: // We have to check if we have non-BMP here if (!__CFCSetHasNonBMPPlane(cset) && !__CFCSetAnnexIsInverted(cset)) return kCFCharacterSetKeyedCodingTypeString; // BMP only. we can archive the string - /* fallthrough */ + CF_FALLTHROUGH; default: return kCFCharacterSetKeyedCodingTypeBitmap; diff --git a/Sources/CoreFoundation/CFCharacterSetData.S b/Sources/CoreFoundation/CFCharacterSetData.S deleted file mode 100644 index 9de953675c..0000000000 --- a/Sources/CoreFoundation/CFCharacterSetData.S +++ /dev/null @@ -1,40 +0,0 @@ -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// - -#include "CFAsmMacros.h" - -#if defined(__ELF__) -.section .rodata -#elif defined(__wasm__) -.section .data.characterset_bitmap_data,"",@ -#endif - - .global _C_LABEL(__CFCharacterSetBitmapData) -_C_LABEL(__CFCharacterSetBitmapData): - .incbin CF_CHARACTERSET_BITMAP -#if defined(__wasm__) - .size _C_LABEL(__CFCharacterSetBitmapData), . - _C_LABEL(__CFCharacterSetBitmapData) -#endif - - .global _C_LABEL(__CFCharacterSetBitmapDataEnd) -_C_LABEL(__CFCharacterSetBitmapDataEnd): - .byte 0 -#if defined(__wasm__) - .size _C_LABEL(__CFCharacterSetBitmapDataEnd), . - _C_LABEL(__CFCharacterSetBitmapDataEnd) -#endif - - .global _C_LABEL(__CFCharacterSetBitmapDataSize) -_C_LABEL(__CFCharacterSetBitmapDataSize): - .int _C_LABEL(__CFCharacterSetBitmapDataEnd) - _C_LABEL(__CFCharacterSetBitmapData) -#if defined(__wasm__) - .size _C_LABEL(__CFCharacterSetBitmapDataSize), . - _C_LABEL(__CFCharacterSetBitmapDataSize) -#endif - -NO_EXEC_STACK_DIRECTIVE -SAFESEH_REGISTRATION_DIRECTIVE diff --git a/Sources/CoreFoundation/CFDate.c b/Sources/CoreFoundation/CFDate.c index f13677336d..58957d1ca9 100644 --- a/Sources/CoreFoundation/CFDate.c +++ b/Sources/CoreFoundation/CFDate.c @@ -73,18 +73,6 @@ CF_PRIVATE uint64_t __CFTSRToNanoseconds(uint64_t tsr) { return ns; } -#if __HAS_DISPATCH__ -CF_PRIVATE dispatch_time_t __CFTSRToDispatchTime(uint64_t tsr) { - uint64_t tsrInNanoseconds = __CFTSRToNanoseconds(tsr); - - // It's important to clamp this value to INT64_MAX or it will become interpreted by dispatch_time as a relative value instead of absolute time - if (tsrInNanoseconds > INT64_MAX - 1) tsrInNanoseconds = INT64_MAX - 1; - - // 2nd argument of dispatch_time is a value in nanoseconds, but tsr does not equal nanoseconds on all platforms. - return dispatch_time(1, (int64_t)tsrInNanoseconds); -} -#endif - #if TARGET_OS_WIN32 CFAbsoluteTime CFAbsoluteTimeGetCurrent(void) { SYSTEMTIME stTime; diff --git a/Sources/CoreFoundation/CFRunLoop.c b/Sources/CoreFoundation/CFRunLoop.c index 04e79cc793..91299fc530 100644 --- a/Sources/CoreFoundation/CFRunLoop.c +++ b/Sources/CoreFoundation/CFRunLoop.c @@ -234,7 +234,6 @@ typedef int kern_return_t; // In order to reuse most of the code across Mach and Windows v1 RunLoopSources, we define a // simple abstraction layer spanning Mach ports and Windows HANDLES #if TARGET_OS_MAC -typedef mach_port_t __CFPort; #define CFPORT_NULL MACH_PORT_NULL typedef mach_port_t __CFPortSet; @@ -322,7 +321,6 @@ CF_INLINE void __CFPortSetFree(__CFPortSet portSet) { #elif TARGET_OS_WIN32 || TARGET_OS_CYGWIN -typedef HANDLE __CFPort; #define CFPORT_NULL NULL // A simple dynamic array of HANDLEs, which grows to a high-water mark @@ -412,8 +410,6 @@ static kern_return_t __CFPortSetRemove(__CFPort port, __CFPortSet portSet) { } #elif TARGET_OS_LINUX -// eventfd/timerfd descriptor -typedef int __CFPort; #define CFPORT_NULL -1 #define MACH_PORT_NULL CFPORT_NULL @@ -462,7 +458,6 @@ CF_INLINE void __CFPortSetFree(__CFPortSet portSet) { #include #include -typedef uint64_t __CFPort; #define CFPORT_NULL ((__CFPort)-1) // _dispatch_get_main_queue_port_4CF is a uint64_t, i.e., a __CFPort. @@ -720,22 +715,6 @@ static Boolean __CFRunLoopServiceFileDescriptors(__CFPortSet set, __CFPort port, #error "CFPort* stubs for this platform must be implemented #endif -typedef struct { - CFIndex version; - void * info; - const void *(*retain)(const void *info); - void (*release)(const void *info); - CFStringRef (*copyDescription)(const void *info); - Boolean (*equal)(const void *info1, const void *info2); - CFHashCode (*hash)(const void *info); - __CFPort (*getPort)(void *info); -#if TARGET_OS_OSX || TARGET_OS_IPHONE - void * (*perform)(void *msg, CFIndex size, CFAllocatorRef allocator, void *info); -#else - void (*perform)(void *info); -#endif -} CFRunLoopSourceContext1; - #if !defined(__MACTYPES__) && !defined(_OS_OSTYPES_H) #if defined(__BIG_ENDIAN__) typedef struct UnsignedWide { @@ -2301,6 +2280,18 @@ static Boolean __CFRunLoopDoSources0(CFRunLoopRef rl, CFRunLoopModeRef rlm, Bool CF_INLINE void __CFRunLoopDebugInfoForRunLoopSource(CFRunLoopSourceRef rls) { } +#if __HAS_DISPATCH__ +CF_PRIVATE dispatch_time_t __CFTSRToDispatchTime(uint64_t tsr) { + uint64_t tsrInNanoseconds = __CFTSRToNanoseconds(tsr); + + // It's important to clamp this value to INT64_MAX or it will become interpreted by dispatch_time as a relative value instead of absolute time + if (tsrInNanoseconds > INT64_MAX - 1) tsrInNanoseconds = INT64_MAX - 1; + + // 2nd argument of dispatch_time is a value in nanoseconds, but tsr does not equal nanoseconds on all platforms. + return dispatch_time(1, (int64_t)tsrInNanoseconds); +} +#endif + // msg, size and reply are unused on Windows #if TARGET_OS_MAC static Boolean __CFRunLoopDoSource1(CFRunLoopRef rl, CFRunLoopModeRef rlm, CFRunLoopSourceRef rls, mach_msg_header_t *msg, CFIndex size, mach_msg_header_t **reply) __attribute__((noinline)); diff --git a/Sources/CoreFoundation/CFRuntime.c b/Sources/CoreFoundation/CFRuntime.c index 53beff42e1..4b770d62d1 100644 --- a/Sources/CoreFoundation/CFRuntime.c +++ b/Sources/CoreFoundation/CFRuntime.c @@ -182,13 +182,6 @@ static const CFRuntimeClass __CFTypeClass = { }; #endif //__cplusplus -#if !__OBJC2__ -// __attribute__((__cleanup__())) fails to link on 32 bit Mac -CF_PRIVATE void objc_terminate(void) { - abort(); -} -#endif - // the lock does not protect most reading of these; we just leak the old table to allow read-only accesses to continue to work static os_unfair_lock __CFBigRuntimeFunnel = OS_UNFAIR_LOCK_INIT; @@ -839,8 +832,7 @@ CF_PRIVATE void __CFTypeCollectionRelease(CFAllocatorRef allocator, const void * static CFLock_t __CFRuntimeExternRefCountTableLock = CFLockInit; #endif -#if DEPLOYMENT_RUNTIME_SWIFT -// using CFGetRetainCount is very dangerous; there is no real reason to use it in the swift version of CF. +#if DEPLOYMENT_RUNTIME_SWIFT && !TARGET_OS_MAC #else static uint64_t __CFGetFullRetainCount(CFTypeRef cf) { if (NULL == cf) { CRSetCrashLogMessage("*** __CFGetFullRetainCount() called with NULL ***"); HALT; } diff --git a/Sources/CoreFoundation/CFTimeZone.c b/Sources/CoreFoundation/CFTimeZone.c index ae4c21e1e5..24f6d7384d 100644 --- a/Sources/CoreFoundation/CFTimeZone.c +++ b/Sources/CoreFoundation/CFTimeZone.c @@ -1344,7 +1344,7 @@ Boolean _CFTimeZoneInit(CFTimeZoneRef timeZone, CFStringRef name, CFDataRef data #if !TARGET_OS_ANDROID && !TARGET_OS_WASI if (!__tzZoneInfo) __InitTZStrings(); - if (!__tzZoneInfo) return NULL; + if (!__tzZoneInfo) return false; baseURL = CFURLCreateWithFileSystemPath(kCFAllocatorSystemDefault, __tzZoneInfo, kCFURLPOSIXPathStyle, true); #endif diff --git a/Sources/CoreFoundation/CFUniChar.c b/Sources/CoreFoundation/CFUniChar.c index 3b51d495da..910a99ad49 100644 --- a/Sources/CoreFoundation/CFUniChar.c +++ b/Sources/CoreFoundation/CFUniChar.c @@ -10,41 +10,20 @@ #include "CFBase.h" #include "CFByteOrder.h" -#include "CFBase.h" #include "CFInternal.h" -#include "CFUniChar.h" +#include "CFUniChar.h" #include "CFStringEncodingConverterExt.h" #include "CFUnicodeDecomposition.h" #include "CFUniCharPriv.h" -#if TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI -#include -#include -#include -#include -#include -#include -#include -#endif -#if TARGET_OS_MAC -#include -#endif - -#if TARGET_OS_WIN32 -extern void _CFGetFrameworkPath(wchar_t *path, int maxLength); -#endif - -#if TARGET_OS_MAC -#define __kCFCharacterSetDir "/System/Library/CoreServices" -#elif TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI -#define __kCFCharacterSetDir "/usr/local/share/CoreFoundation" -#elif TARGET_OS_WIN32 -#define __kCFCharacterSetDir "\\Windows\\CoreFoundation" -#endif -#if TARGET_OS_MAC -#define USE_MACHO_SEGMENT 1 -#elif DEPLOYMENT_RUNTIME_SWIFT && (TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WIN32 || TARGET_OS_WASI) -#define USE_RAW_SYMBOL 1 +#include "CFUniCharBitmapData.inc.h" +#include "CFUniCharPropertyDatabase.inc.h" +#if __LITTLE_ENDIAN__ +#include "CFUnicodeCaseMapping-L.inc.h" +#include "CFUnicodeData-L.inc.h" +#else +#include "CFUnicodeCaseMapping-B.inc.h" +#include "CFUnicodeData-B.inc.h" #endif enum { @@ -57,321 +36,6 @@ enum { CF_INLINE uint32_t __CFUniCharMapExternalSetToInternalIndex(uint32_t cset) { return ((kCFUniCharFirstInternalSet <= cset) ? ((cset - kCFUniCharFirstInternalSet) + kCFUniCharLastExternalSet) : cset) - kCFUniCharFirstBitmapSet; } CF_INLINE uint32_t __CFUniCharMapCompatibilitySetID(uint32_t cset) { return ((cset == kCFUniCharControlCharacterSet) ? kCFUniCharControlAndFormatterCharacterSet : (((cset > kCFUniCharLastExternalSet) && (cset < kCFUniCharFirstInternalSet)) ? ((cset - kCFUniCharLastExternalSet) + kCFUniCharFirstInternalSet) : cset)); } -#if TARGET_OS_MAC && USE_MACHO_SEGMENT -#include -#include -#include - -extern const void* unicode_csbitmaps_section_start __asm("section$start$__UNICODE$__csbitmaps"); -extern const void* unicode_csbitmaps_section_end __asm("section$end$__UNICODE$__csbitmaps"); -extern const void* unicode_properties_section_start __asm("section$start$__UNICODE$__properties"); -extern const void* unicode_properties_section_end __asm("section$end$__UNICODE$__properties"); -extern const void* unicode_data_section_start __asm("section$start$__UNICODE$__data"); -extern const void* unicode_data_section_end __asm("section$end$__UNICODE$__data"); - -static const void *__CFGetSectDataPtr(const char *segname, const char *sectname, uint64_t *sizep) { - // special case three common sections to have fast access - if ( strcmp(segname, "__UNICODE") == 0 ) { - if ( strcmp(sectname, "__csbitmaps") == 0) { - if (sizep) *sizep = &unicode_csbitmaps_section_end - &unicode_csbitmaps_section_start; - return &unicode_csbitmaps_section_start; - } - else if ( strcmp(sectname, "__properties") == 0 ) { - if (sizep) *sizep = &unicode_properties_section_end - &unicode_properties_section_start; - return &unicode_properties_section_start; - } - else if ( strcmp(sectname, "__data") == 0 ) { - if (sizep) *sizep = &unicode_data_section_end - &unicode_data_section_start; - return &unicode_data_section_start; - } - } - - uint32_t idx, cnt = _dyld_image_count(); - for (idx = 0; idx < cnt; idx++) { - void *mh = (void *)_dyld_get_image_header(idx); - if (mh != &_mh_dylib_header) continue; -#if TARGET_RT_64_BIT - const struct section_64 *sect = getsectbynamefromheader_64((struct mach_header_64 *)mh, segname, sectname); -#else - const struct section *sect = getsectbynamefromheader((struct mach_header *)mh, segname, sectname); -#endif - if (!sect) break; - if (sizep) *sizep = (uint64_t)sect->size; - return (char *)sect->addr + _dyld_get_image_vmaddr_slide(idx); - } - if (sizep) *sizep = 0ULL; - return NULL; -} -#endif - -#if !USE_MACHO_SEGMENT - -// Memory map the file - -#if TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI -CF_INLINE void __CFUniCharCharacterSetPath(char *cpath) { -#elif TARGET_OS_WIN32 -CF_INLINE void __CFUniCharCharacterSetPath(wchar_t *wpath) { -#else -#error Unknown or unspecified DEPLOYMENT_TARGET -#endif -#if TARGET_OS_MAC - strlcpy(cpath, __kCFCharacterSetDir, MAXPATHLEN); -#elif TARGET_OS_LINUX || TARGET_OS_BSD - strlcpy(cpath, __kCFCharacterSetDir, MAXPATHLEN); -#elif TARGET_OS_WIN32 - wchar_t frameworkPath[MAXPATHLEN]; - _CFGetFrameworkPath(frameworkPath, MAXPATHLEN); - wcsncpy(wpath, frameworkPath, MAXPATHLEN); - wcsncat(wpath, L"\\CoreFoundation.resources\\", MAXPATHLEN - wcslen(wpath)); -#else - strlcpy(cpath, __kCFCharacterSetDir, MAXPATHLEN); - strlcat(cpath, "/CharacterSets/", MAXPATHLEN); -#endif -} - -#if TARGET_OS_WIN32 -#define MAX_BITMAP_STATE 512 -// -// If a string is placed into this array, then it has been previously -// determined that the bitmap-file cannot be found. Thus, we make -// the assumption it won't be there in future calls and we avoid -// hitting the disk un-necessarily. This assumption isn't 100% -// correct, as bitmap-files can be added. We would have to re-start -// the application in order to pick-up the new bitmap info. -// -// We should probably re-visit this. -// -static wchar_t *mappedBitmapState[MAX_BITMAP_STATE]; -static int __nNumStateEntries = -1; -CRITICAL_SECTION __bitmapStateLock = {0}; - -bool __GetBitmapStateForName(const wchar_t *bitmapName) { - if (NULL == __bitmapStateLock.DebugInfo) - InitializeCriticalSection(&__bitmapStateLock); - EnterCriticalSection(&__bitmapStateLock); - if (__nNumStateEntries >= 0) { - for (int i = 0; i < __nNumStateEntries; i++) { - if (wcscmp(mappedBitmapState[i], bitmapName) == 0) { - LeaveCriticalSection(&__bitmapStateLock); - return true; - } - } - } - LeaveCriticalSection(&__bitmapStateLock); - return false; -} -void __AddBitmapStateForName(const wchar_t *bitmapName) { - if (NULL == __bitmapStateLock.DebugInfo) - InitializeCriticalSection(&__bitmapStateLock); - EnterCriticalSection(&__bitmapStateLock); - __nNumStateEntries++; - mappedBitmapState[__nNumStateEntries] = (wchar_t *)malloc((lstrlenW(bitmapName)+1) * sizeof(wchar_t)); - lstrcpyW(mappedBitmapState[__nNumStateEntries], bitmapName); - LeaveCriticalSection(&__bitmapStateLock); -} -#endif - -#if TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI -static bool __CFUniCharLoadBytesFromFile(const char *fileName, const void **bytes, int64_t *fileSize) { -#elif TARGET_OS_WIN32 -static bool __CFUniCharLoadBytesFromFile(const wchar_t *fileName, const void **bytes, int64_t *fileSize) { -#else -#error Unknown or unspecified DEPLOYMENT_TARGET -#endif -#if TARGET_OS_WIN32 - HANDLE bitmapFileHandle = NULL; - HANDLE mappingHandle = NULL; - - if (__GetBitmapStateForName(fileName)) { - // The fileName has been tried in the past, so just return false - // and move on. - *bytes = NULL; - return false; - } - mappingHandle = OpenFileMappingW(FILE_MAP_READ, TRUE, fileName); - if (NULL == mappingHandle) { - if ((bitmapFileHandle = CreateFileW(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { - // We tried to get the bitmap file for mapping, but it's not there. Add to list of non-existent bitmap-files so - // we don't have to try this again in the future. - __AddBitmapStateForName(fileName); - return false; - } - mappingHandle = CreateFileMapping(bitmapFileHandle, NULL, PAGE_READONLY, 0, 0, NULL); - CloseHandle(bitmapFileHandle); - if (!mappingHandle) return false; - } - - *bytes = MapViewOfFileEx(mappingHandle, FILE_MAP_READ, 0, 0, 0, 0); - - if (NULL != fileSize) { - MEMORY_BASIC_INFORMATION memoryInfo; - - if (0 == VirtualQueryEx(mappingHandle, *bytes, &memoryInfo, sizeof(memoryInfo))) { - *fileSize = 0; // This indicates no checking. Is it right ? - } else { - *fileSize = memoryInfo.RegionSize; - } - } - - CloseHandle(mappingHandle); - - return (*bytes ? true : false); -#else - struct stat statBuf; - int fd = -1; - - if ((fd = open(fileName, O_RDONLY, 0)) < 0) { - return false; - } - if (fstat(fd, &statBuf) < 0 || (*bytes = mmap(0, statBuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) == (void *)-1) { - close(fd); - return false; - } - close(fd); - - if (NULL != fileSize) *fileSize = statBuf.st_size; - - return true; -#endif -} - -#endif // USE_MACHO_SEGMENT - - -#if TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI -#if !defined(CF_UNICHAR_BITMAP_FILE) -#if USE_MACHO_SEGMENT -#define CF_UNICHAR_BITMAP_FILE "__csbitmaps" -#else -#define CF_UNICHAR_BITMAP_FILE "/CFCharacterSetBitmaps.bitmap" -#endif -#endif -#elif TARGET_OS_WIN32 -#if !defined(CF_UNICHAR_BITMAP_FILE) -#define CF_UNICHAR_BITMAP_FILE L"CFCharacterSetBitmaps.bitmap" -#endif -#else -#error Unknown or unspecified DEPLOYMENT_TARGET -#endif - -#if TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI -#if __CF_BIG_ENDIAN__ -#if USE_MACHO_SEGMENT -#define MAPPING_TABLE_FILE "__data" -#else -#define MAPPING_TABLE_FILE "/CFUnicodeData-B.mapping" -#endif -#else -#if USE_MACHO_SEGMENT -#define MAPPING_TABLE_FILE "__data" -#else -#define MAPPING_TABLE_FILE "/CFUnicodeData-L.mapping" -#endif -#endif -#elif TARGET_OS_WIN32 -#if __CF_BIG_ENDIAN__ -#if USE_MACHO_SEGMENT -#define MAPPING_TABLE_FILE "__data" -#else -#define MAPPING_TABLE_FILE L"CFUnicodeData-B.mapping" -#endif -#else -#if USE_MACHO_SEGMENT -#define MAPPING_TABLE_FILE "__data" -#else -#define MAPPING_TABLE_FILE L"CFUnicodeData-L.mapping" -#endif -#endif -#else -#error Unknown or unspecified DEPLOYMENT_TARGET -#endif - -#if TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI -#if USE_MACHO_SEGMENT -#define PROP_DB_FILE "__properties" -#else -#define PROP_DB_FILE "/CFUniCharPropertyDatabase.data" -#endif -#elif TARGET_OS_WIN32 -#if USE_MACHO_SEGMENT -#define PROP_DB_FILE "__properties" -#else -#define PROP_DB_FILE L"CFUniCharPropertyDatabase.data" -#endif -#else -#error Unknown or unspecified DEPLOYMENT_TARGET -#endif - -#if __CF_BIG_ENDIAN__ -#define CF_UNICODE_DATA_SYM __CFUnicodeDataB -#else -#define CF_UNICODE_DATA_SYM __CFUnicodeDataL -#endif - -#if TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI -static bool __CFUniCharLoadFile(const char *bitmapName, const void **bytes, int64_t *fileSize) { -#if USE_MACHO_SEGMENT - *bytes = __CFGetSectDataPtr("__UNICODE", bitmapName, NULL); - - if (NULL != fileSize) *fileSize = 0; - - return *bytes ? true : false; -#elif USE_RAW_SYMBOL - extern void *__CFCharacterSetBitmapData; - extern void *CF_UNICODE_DATA_SYM; - extern void *__CFUniCharPropertyDatabase; - - if (strcmp(bitmapName, CF_UNICHAR_BITMAP_FILE) == 0) { - *bytes = &__CFCharacterSetBitmapData; - } else if (strcmp(bitmapName, MAPPING_TABLE_FILE) == 0) { - *bytes = &CF_UNICODE_DATA_SYM; - } else if (strcmp(bitmapName, PROP_DB_FILE) == 0) { - *bytes = &__CFUniCharPropertyDatabase; - } - - if (NULL != fileSize) *fileSize = 0; - - return *bytes ? true : false; -#else - char cpath[MAXPATHLEN]; - __CFUniCharCharacterSetPath(cpath); - strlcat(cpath, bitmapName, MAXPATHLEN); - Boolean needToFree = false; - const char *possiblyFrameworkRootedCPath = CFPathRelativeToAppleFrameworksRoot(cpath, &needToFree); - bool result = __CFUniCharLoadBytesFromFile(possiblyFrameworkRootedCPath, bytes, fileSize); - if (needToFree) free((void *)possiblyFrameworkRootedCPath); - return result; -#endif -} -#elif TARGET_OS_WIN32 -static bool __CFUniCharLoadFile(const wchar_t *bitmapName, const void **bytes, int64_t *fileSize) { -#if USE_RAW_SYMBOL - extern void *__CFCharacterSetBitmapData; - extern void *CF_UNICODE_DATA_SYM; - extern void *__CFUniCharPropertyDatabase; - - if (wcscmp(bitmapName, CF_UNICHAR_BITMAP_FILE) == 0) { - *bytes = &__CFCharacterSetBitmapData; - } else if (wcscmp(bitmapName, MAPPING_TABLE_FILE) == 0) { - *bytes = &CF_UNICODE_DATA_SYM; - } else if (wcscmp(bitmapName, PROP_DB_FILE) == 0) { - *bytes = &__CFUniCharPropertyDatabase; - } - - if (NULL != fileSize) *fileSize = 0; - - return *bytes ? true : false; -#else - wchar_t wpath[MAXPATHLEN]; - __CFUniCharCharacterSetPath(wpath); - wcsncat(wpath, bitmapName, MAXPATHLEN); - return __CFUniCharLoadBytesFromFile(wpath, bytes, fileSize); -#endif -} -#else -#error Unknown or unspecified DEPLOYMENT_TARGET -#endif // Bitmap functions /* @@ -392,122 +56,6 @@ CF_INLINE bool isWhitespaceAndNewline(UTF32Char theChar, uint16_t charset, const return ((isWhitespace(theChar, charset, data) || isNewline(theChar, charset, data)) ? true : false); } -#if USE_MACHO_SEGMENT -CF_INLINE bool __CFSimpleFileSizeVerification(const void *bytes, int64_t fileSize) { return true; } -#elif 1 -// __CFSimpleFileSizeVerification is broken -static bool __CFSimpleFileSizeVerification(const void *bytes, int64_t fileSize) { return true; } -#else -static bool __CFSimpleFileSizeVerification(const void *bytes, int64_t fileSize) { - bool result = true; - - if (fileSize > 0) { - if ((sizeof(uint32_t) * 2) > fileSize) { - result = false; - } else { - uint32_t headerSize = CFSwapInt32BigToHost(*((uint32_t *)((char *)bytes + 4))); - - if ((headerSize < (sizeof(uint32_t) * 4)) || (headerSize > fileSize)) { - result = false; - } else { - const uint32_t *lastElement = (uint32_t *)(((uint8_t *)bytes) + headerSize) - 2; - - if ((headerSize + CFSwapInt32BigToHost(lastElement[0]) + CFSwapInt32BigToHost(lastElement[1])) > headerSize) result = false; - } - } - } - - if (!result) CFLog(kCFLogLevelCritical, CFSTR("File size verification for Unicode database file failed.")); - - return result; -} -#endif // USE_MACHO_SEGMENT - -typedef struct { - uint32_t _numPlanes; - const uint8_t **_planes; -} __CFUniCharBitmapData; - -static char __CFUniCharUnicodeVersionString[8] = {0, 0, 0, 0, 0, 0, 0, 0}; - -static uint32_t __CFUniCharNumberOfBitmaps = 0; -static __CFUniCharBitmapData *__CFUniCharBitmapDataArray = NULL; - -static os_unfair_lock __CFUniCharBitmapLock = OS_UNFAIR_LOCK_INIT; - -static bool __CFUniCharLoadBitmapData(void) { - __CFUniCharBitmapData *array; - uint32_t headerSize; - uint32_t bitmapSize; - int numPlanes; - uint8_t currentPlane; - const void *bytes; - const void *bitmapBase; - const void *bitmap; - int idx, bitmapIndex; - int64_t fileSize; - - os_unfair_lock_lock(&__CFUniCharBitmapLock); - - if (__CFUniCharBitmapDataArray || !__CFUniCharLoadFile(CF_UNICHAR_BITMAP_FILE, &bytes, &fileSize) || !__CFSimpleFileSizeVerification(bytes, fileSize)) { - os_unfair_lock_unlock(&__CFUniCharBitmapLock); - return false; - } - - for (idx = 0;idx < 4 && ((const uint8_t *)bytes)[idx];idx++) { - __CFUniCharUnicodeVersionString[idx * 2] = ((const uint8_t *)bytes)[idx]; - __CFUniCharUnicodeVersionString[idx * 2 + 1] = '.'; - } - __CFUniCharUnicodeVersionString[(idx < 4 ? idx * 2 - 1 : 7)] = '\0'; - - headerSize = CFSwapInt32BigToHost(*((uint32_t *)((char *)bytes + 4))); - - bitmapBase = (uint8_t *)bytes + headerSize; - bytes = (uint8_t *)bytes + (sizeof(uint32_t) * 2); - headerSize -= (sizeof(uint32_t) * 2); - - __CFUniCharNumberOfBitmaps = headerSize / (sizeof(uint32_t) * 2); - - array = (__CFUniCharBitmapData *)CFAllocatorAllocate(kCFAllocatorSystemDefault, sizeof(__CFUniCharBitmapData) * __CFUniCharNumberOfBitmaps, 0); - - for (idx = 0;idx < (int)__CFUniCharNumberOfBitmaps;idx++) { - bitmap = (uint8_t *)bitmapBase + CFSwapInt32BigToHost(*((uint32_t *)bytes)); bytes = (uint8_t *)bytes + sizeof(uint32_t); - bitmapSize = CFSwapInt32BigToHost(*((uint32_t *)bytes)); bytes = (uint8_t *)bytes + sizeof(uint32_t); - - numPlanes = bitmapSize / (8 * 1024); - numPlanes = *(const uint8_t *)((char *)bitmap + (((numPlanes - 1) * ((8 * 1024) + 1)) - 1)) + 1; - array[idx]._planes = (const uint8_t **)CFAllocatorAllocate(kCFAllocatorSystemDefault, sizeof(const void *) * numPlanes, 0); - array[idx]._numPlanes = numPlanes; - - currentPlane = 0; - for (bitmapIndex = 0;bitmapIndex < numPlanes;bitmapIndex++) { - if (bitmapIndex == currentPlane) { - array[idx]._planes[bitmapIndex] = (const uint8_t *)bitmap; - bitmap = (uint8_t *)bitmap + (8 * 1024); -#if defined (__cplusplus) - currentPlane = *(((const uint8_t*&)bitmap)++); -#else - currentPlane = *((const uint8_t *)bitmap++); -#endif - - } else { - array[idx]._planes[bitmapIndex] = NULL; - } - } - } - - __CFUniCharBitmapDataArray = array; - - os_unfair_lock_unlock(&__CFUniCharBitmapLock); - - return true; -} - -CF_PRIVATE const char *__CFUniCharGetUnicodeVersionString(void) { - if (NULL == __CFUniCharBitmapDataArray) __CFUniCharLoadBitmapData(); - return __CFUniCharUnicodeVersionString; -} - bool CFUniCharIsMemberOf(UTF32Char theChar, uint32_t charset) { charset = __CFUniCharMapCompatibilitySetID(charset); @@ -524,10 +72,8 @@ bool CFUniCharIsMemberOf(UTF32Char theChar, uint32_t charset) { default: { uint32_t tableIndex = __CFUniCharMapExternalSetToInternalIndex(charset); - if (NULL == __CFUniCharBitmapDataArray) __CFUniCharLoadBitmapData(); - if (tableIndex < __CFUniCharNumberOfBitmaps) { - __CFUniCharBitmapData *data = __CFUniCharBitmapDataArray + tableIndex; + const __CFUniCharBitmapData *data = __CFUniCharBitmapDataArray + tableIndex; uint8_t planeNo = (theChar >> 16) & 0xFF; // The bitmap data for kCFUniCharIllegalCharacterSet is actually LEGAL set less Plane 14 ~ 16 @@ -557,7 +103,6 @@ bool CFUniCharIsMemberOf(UTF32Char theChar, uint32_t charset) { } const uint8_t *CFUniCharGetBitmapPtrForPlane(uint32_t charset, uint32_t plane) { - if (NULL == __CFUniCharBitmapDataArray) __CFUniCharLoadBitmapData(); charset = __CFUniCharMapCompatibilitySetID(charset); @@ -565,7 +110,7 @@ const uint8_t *CFUniCharGetBitmapPtrForPlane(uint32_t charset, uint32_t plane) { uint32_t tableIndex = __CFUniCharMapExternalSetToInternalIndex(charset); if (tableIndex < __CFUniCharNumberOfBitmaps) { - __CFUniCharBitmapData *data = __CFUniCharBitmapDataArray + tableIndex; + const __CFUniCharBitmapData *data = __CFUniCharBitmapDataArray + tableIndex; return (plane < data->_numPlanes ? data->_planes[plane] : NULL); } @@ -580,33 +125,33 @@ CF_PRIVATE uint8_t CFUniCharGetBitmapForPlane(uint32_t charset, uint32_t plane, if (src) { if (isInverted) { #if defined (__cplusplus) - while (numBytes-- > 0) *(((uint8_t *&)bitmap)++) = ~(*(src++)); + while (numBytes-- > 0) *(((uint8_t *&)bitmap)++) = ~(*(src++)); #else - while (numBytes-- > 0) *((uint8_t *)bitmap++) = ~(*(src++)); + while (numBytes-- > 0) *((uint8_t *)bitmap++) = ~(*(src++)); #endif } else { #if defined (__cplusplus) while (numBytes-- > 0) *(((uint8_t *&)bitmap)++) = *(src++); #else - while (numBytes-- > 0) *((uint8_t *)bitmap++) = *(src++); + while (numBytes-- > 0) *((uint8_t *)bitmap++) = *(src++); #endif } return kCFUniCharBitmapFilled; } else if (charset == kCFUniCharIllegalCharacterSet) { - __CFUniCharBitmapData *data = __CFUniCharBitmapDataArray + __CFUniCharMapExternalSetToInternalIndex(__CFUniCharMapCompatibilitySetID(charset)); + const __CFUniCharBitmapData *data = __CFUniCharBitmapDataArray + __CFUniCharMapExternalSetToInternalIndex(__CFUniCharMapCompatibilitySetID(charset)); if (plane < data->_numPlanes && (src = data->_planes[plane])) { if (isInverted) { -#if defined (__cplusplus) - while (numBytes-- > 0) *(((uint8_t *&)bitmap)++) = *(src++); +#if defined (__cplusplus) + while (numBytes-- > 0) *(((uint8_t *&)bitmap)++) = *(src++); #else - while (numBytes-- > 0) *((uint8_t *)bitmap++) = *(src++); + while (numBytes-- > 0) *((uint8_t *)bitmap++) = *(src++); #endif } else { -#if defined (__cplusplus) +#if defined (__cplusplus) while (numBytes-- > 0) *(((uint8_t *&)bitmap)++) = ~(*(src++)); #else - while (numBytes-- > 0) *((uint8_t *)bitmap++) = ~(*(src++)); + while (numBytes-- > 0) *((uint8_t *)bitmap++) = ~(*(src++)); #endif } return kCFUniCharBitmapFilled; @@ -616,15 +161,15 @@ CF_PRIVATE uint8_t CFUniCharGetBitmapForPlane(uint32_t charset, uint32_t plane, uint8_t otherRange = (isInverted ? (uint8_t)0 : (uint8_t)0xFF); #if defined (__cplusplus) - *(((uint8_t *&)bitmap)++) = 0x02; // UE0001 LANGUAGE TAG + *(((uint8_t *&)bitmap)++) = 0x02; // UE0001 LANGUAGE TAG #else - *((uint8_t *)bitmap++) = 0x02; // UE0001 LANGUAGE TAG + *((uint8_t *)bitmap++) = 0x02; // UE0001 LANGUAGE TAG #endif for (idx = 1;idx < numBytes;idx++) { -#if defined (__cplusplus) - *(((uint8_t *&)bitmap)++) = ((idx >= (0x20 / 8) && (idx < (0x80 / 8))) ? asciiRange : otherRange); +#if defined (__cplusplus) + *(((uint8_t *&)bitmap)++) = ((idx >= (0x20 / 8) && (idx < (0x80 / 8))) ? asciiRange : otherRange); #else - *((uint8_t *)bitmap++) = ((idx >= (0x20 / 8) && (idx < (0x80 / 8))) ? asciiRange : otherRange); + *((uint8_t *)bitmap++) = ((idx >= (0x20 / 8) && (idx < (0x80 / 8))) ? asciiRange : otherRange); #endif } return kCFUniCharBitmapFilled; @@ -635,9 +180,9 @@ CF_PRIVATE uint8_t CFUniCharGetBitmapForPlane(uint32_t charset, uint32_t plane, while (numBytes-- > 0) { _CFUnalignedStore32(bitmap, value); #if defined (__cplusplus) - bitmap = (uint8_t *)bitmap + sizeof(uint32_t); + bitmap = (uint8_t *)bitmap + sizeof(uint32_t); #else - bitmap += sizeof(uint32_t); + bitmap += sizeof(uint32_t); #endif } *(((uint8_t *)bitmap) - 5) = (isInverted ? 0x3F : 0xC0); // 0xFFFE & 0xFFFF @@ -711,71 +256,32 @@ CF_PRIVATE uint32_t CFUniCharGetNumberOfPlanes(uint32_t charset) { } else { uint32_t numPlanes; - if (NULL == __CFUniCharBitmapDataArray) __CFUniCharLoadBitmapData(); - numPlanes = __CFUniCharBitmapDataArray[__CFUniCharMapExternalSetToInternalIndex(__CFUniCharMapCompatibilitySetID(charset))]._numPlanes; return numPlanes; } } -// Mapping data loading -static const void **__CFUniCharMappingTables = NULL; - -static os_unfair_lock __CFUniCharMappingTableLock = OS_UNFAIR_LOCK_INIT; - +/* +type: + kCFUniCharToLowercase = 0 + kCFUniCharToUppercase = 1 + kCFUniCharToTitlecase = 2 + kCFUniCharCaseFold + kCFUniCharCanonicalDecompMapping + kCFUniCharCanonicalPrecompMapping + kCFUniCharCompatibilityDecompMapping + +This order follows that specified by the `mapping` array in UnicodeData/MergeFiles.xml. +*/ CF_PRIVATE const void *CFUniCharGetMappingData(uint32_t type) { - os_unfair_lock_lock(&__CFUniCharMappingTableLock); - - if (NULL == __CFUniCharMappingTables) { - const void *bytes; - const void *bodyBase; - int32_t headerSize; - size_t idx, count; - int64_t fileSize; - - if (!__CFUniCharLoadFile(MAPPING_TABLE_FILE, &bytes, &fileSize) || !__CFSimpleFileSizeVerification(bytes, fileSize)) { - os_unfair_lock_unlock(&__CFUniCharMappingTableLock); - return NULL; - } - -#if defined (__cplusplus) - bytes = (uint8_t *)bytes + 4; // Skip Unicode version - headerSize = *((uint8_t *)bytes); bytes = (uint8_t *)bytes + sizeof(uint32_t); -#else - bytes += 4; // Skip Unicode version - headerSize = _CFUnalignedLoad32(bytes); - bytes += sizeof(uint32_t); -#endif - headerSize -= (sizeof(uint32_t) * 2); - bodyBase = (char *)bytes + headerSize; - - count = headerSize / sizeof(uint32_t); - - __CFUniCharMappingTables = (const void **)CFAllocatorAllocate(kCFAllocatorSystemDefault, sizeof(const void *) * count, 0); - - for (idx = 0;idx < count;idx++) { -#if defined (__cplusplus) - __CFUniCharMappingTables[idx] = (char *)bodyBase + *((uint32_t *)bytes); bytes = (uint8_t *)bytes + sizeof(uint32_t); -#else - __CFUniCharMappingTables[idx] = (char *)bodyBase + _CFUnalignedLoad32(bytes); - bytes += sizeof(uint32_t); -#endif - } - } - - os_unfair_lock_unlock(&__CFUniCharMappingTableLock); - return __CFUniCharMappingTables[type]; } // Case mapping functions #define DO_SPECIAL_CASE_MAPPING 1 -static uint32_t *__CFUniCharCaseMappingTableCounts = NULL; -static uint32_t **__CFUniCharCaseMappingTable = NULL; -static const uint32_t **__CFUniCharCaseMappingExtraTable = NULL; typedef struct { uint32_t _key; @@ -795,7 +301,7 @@ static uint32_t __CFUniCharGetMappedCase(const __CFUniCharCaseMappings *theTable p = theTable; q = p + (numElem-1); while (p <= q) { - divider = p + ((q - p) >> 1); /* divide by 2 */ + divider = p + ((q - p) >> 1); /* divide by 2 */ if (character < READ_KEY(divider)) { q = divider - 1; } else if (character > READ_KEY(divider)) { p = divider + 1; } else { return READ_VALUE(divider); } @@ -806,54 +312,22 @@ static uint32_t __CFUniCharGetMappedCase(const __CFUniCharCaseMappings *theTable #undef READ_VALUE } -#define NUM_CASE_MAP_DATA (kCFUniCharCaseFold + 1) - -static bool __CFUniCharLoadCaseMappingTable(void) { - uint32_t *countArray; - int idx; - - if (NULL == __CFUniCharMappingTables) (void)CFUniCharGetMappingData(kCFUniCharToLowercase); - if (NULL == __CFUniCharMappingTables) return false; - - os_unfair_lock_lock(&__CFUniCharMappingTableLock); - - if (__CFUniCharCaseMappingTableCounts) { - os_unfair_lock_unlock(&__CFUniCharMappingTableLock); - return true; - } - - countArray = (uint32_t *)CFAllocatorAllocate(kCFAllocatorSystemDefault, sizeof(uint32_t) * NUM_CASE_MAP_DATA + sizeof(uint32_t *) * NUM_CASE_MAP_DATA * 2, 0); - __CFUniCharCaseMappingTable = (uint32_t **)((char *)countArray + sizeof(uint32_t) * NUM_CASE_MAP_DATA); - __CFUniCharCaseMappingExtraTable = (const uint32_t **)__CFUniCharCaseMappingTable + NUM_CASE_MAP_DATA; - - for (idx = 0;idx < NUM_CASE_MAP_DATA;idx++) { - countArray[idx] = _CFUnalignedLoad32(__CFUniCharMappingTables[idx]) / (sizeof(uint32_t) * 2); - __CFUniCharCaseMappingTable[idx] = ((uint32_t *)__CFUniCharMappingTables[idx]) + 1; - __CFUniCharCaseMappingExtraTable[idx] = (const uint32_t *)((char *)__CFUniCharCaseMappingTable[idx] + _CFUnalignedLoad32(__CFUniCharMappingTables[idx])); - } - - __CFUniCharCaseMappingTableCounts = countArray; - - os_unfair_lock_unlock(&__CFUniCharMappingTableLock); - return true; -} - #if __CF_BIG_ENDIAN__ -#define TURKISH_LANG_CODE (0x7472) // tr -#define LITHUANIAN_LANG_CODE (0x6C74) // lt -#define AZERI_LANG_CODE (0x617A) // az -#define DUTCH_LANG_CODE (0x6E6C) // nl -#define GREEK_LANG_CODE (0x656C) // el +#define TURKISH_LANG_CODE (0x7472) // tr +#define LITHUANIAN_LANG_CODE (0x6C74) // lt +#define AZERI_LANG_CODE (0x617A) // az +#define DUTCH_LANG_CODE (0x6E6C) // nl +#define GREEK_LANG_CODE (0x656C) // el #else -#define TURKISH_LANG_CODE (0x7274) // tr -#define LITHUANIAN_LANG_CODE (0x746C) // lt -#define AZERI_LANG_CODE (0x7A61) // az -#define DUTCH_LANG_CODE (0x6C6E) // nl -#define GREEK_LANG_CODE (0x6C65) // el +#define TURKISH_LANG_CODE (0x7274) // tr +#define LITHUANIAN_LANG_CODE (0x746C) // lt +#define AZERI_LANG_CODE (0x7A61) // az +#define DUTCH_LANG_CODE (0x6C6E) // nl +#define GREEK_LANG_CODE (0x6C65) // el #endif -CFIndex CFUniCharMapCaseTo(UTF32Char theChar, UTF16Char *convertedChar, CFIndex maxLength, uint32_t ctype, uint32_t flags, const uint8_t *langCode) { - __CFUniCharBitmapData *data; +CFIndex CFUniCharMapCaseTo(UTF32Char theChar, UTF16Char *convertedChar, CFIndex maxLength, _CFUniCharCasemapType ctype, uint32_t flags, const uint8_t *langCode) { + const __CFUniCharBitmapData *data; uint8_t planeNo = (theChar >> 16) & 0xFF; caseFoldRetry: @@ -982,24 +456,24 @@ CFIndex CFUniCharMapCaseTo(UTF32Char theChar, UTF16Char *convertedChar, CFIndex } break; - case DUTCH_LANG_CODE: - if ((theChar == 0x004A) || (theChar == 0x006A)) { + case DUTCH_LANG_CODE: + if ((theChar == 0x004A) || (theChar == 0x006A)) { *convertedChar = (((ctype == kCFUniCharToUppercase) || (ctype == kCFUniCharToTitlecase) || (kCFUniCharCaseMapDutchDigraph & flags)) ? 0x004A : 0x006A); return 1; - } - break; + } + break; default: break; } } #endif // DO_SPECIAL_CASE_MAPPING - if (NULL == __CFUniCharBitmapDataArray) __CFUniCharLoadBitmapData(); - data = __CFUniCharBitmapDataArray + __CFUniCharMapExternalSetToInternalIndex(__CFUniCharMapCompatibilitySetID(ctype + kCFUniCharHasNonSelfLowercaseCharacterSet)); - if (planeNo < data->_numPlanes && data->_planes[planeNo] && CFUniCharIsMemberOfBitmap(theChar, data->_planes[planeNo]) && (__CFUniCharCaseMappingTableCounts || __CFUniCharLoadCaseMappingTable())) { - uint32_t value = __CFUniCharGetMappedCase((const __CFUniCharCaseMappings *)__CFUniCharCaseMappingTable[ctype], __CFUniCharCaseMappingTableCounts[ctype], theChar); + if (planeNo < data->_numPlanes && data->_planes[planeNo] && CFUniCharIsMemberOfBitmap(theChar, data->_planes[planeNo])) { + _CLANG_ANALYZER_ASSERT(ctype >= 0 && ctype < __CFUniCharCaseMappingTableCount); + uint32_t const * const table = __CFUniCharCaseMappingTable[ctype]; + uint32_t value = __CFUniCharGetMappedCase((const __CFUniCharCaseMappings *) table, __CFUniCharCaseMappingTableCounts[ctype], theChar); if (!value && ctype == kCFUniCharToTitlecase) { value = __CFUniCharGetMappedCase((const __CFUniCharCaseMappings *)__CFUniCharCaseMappingTable[kCFUniCharToUppercase], __CFUniCharCaseMappingTableCounts[kCFUniCharToUppercase], theChar); @@ -1202,14 +676,14 @@ CF_PRIVATE uint32_t CFUniCharGetConditionalCaseMappingFlags(UTF32Char theChar, U } } } else if (*((const uint16_t *)langCode) == DUTCH_LANG_CODE) { - if (kCFUniCharCaseMapDutchDigraph & lastFlags) { - return (((theChar == 0x006A) || (theChar == 0x004A)) ? kCFUniCharCaseMapDutchDigraph : 0); - } else { - if ((type == kCFUniCharToTitlecase) && ((theChar == 0x0069) || (theChar == 0x0049))) { - return (((++currentIndex < length) && ((buffer[currentIndex] == 0x006A) || (buffer[currentIndex] == 0x004A))) ? kCFUniCharCaseMapDutchDigraph : 0); - } - } - } + if (kCFUniCharCaseMapDutchDigraph & lastFlags) { + return (((theChar == 0x006A) || (theChar == 0x004A)) ? kCFUniCharCaseMapDutchDigraph : 0); + } else { + if ((type == kCFUniCharToTitlecase) && ((theChar == 0x0069) || (theChar == 0x0049))) { + return (((++currentIndex < length) && ((buffer[currentIndex] == 0x006A) || (buffer[currentIndex] == 0x004A))) ? kCFUniCharCaseMapDutchDigraph : 0); + } + } + } if (kCFUniCharCaseMapGreekTonos & lastFlags) { // still searching for tonos if (CFUniCharIsMemberOf(theChar, kCFUniCharNonBaseCharacterSet)) { @@ -1224,73 +698,8 @@ CF_PRIVATE uint32_t CFUniCharGetConditionalCaseMappingFlags(UTF32Char theChar, U } // Unicode property database -static __CFUniCharBitmapData *__CFUniCharUnicodePropertyTable = NULL; -static int __CFUniCharUnicodePropertyTableCount = 0; const void *CFUniCharGetUnicodePropertyDataForPlane(uint32_t propertyType, uint32_t plane) { - static dispatch_once_t once = 0; - dispatch_once(&once, ^{ - __CFUniCharBitmapData *table; - const void *bytes; - const void *bodyBase; - const void *planeBase; - int headerSize; - int idx, count; - int planeIndex, planeCount; - int planeSize; - int64_t fileSize; - - if (!__CFUniCharLoadFile(PROP_DB_FILE, &bytes, &fileSize) || !__CFSimpleFileSizeVerification(bytes, fileSize)) { - CRSetCrashLogMessage("unichar property database is corrupted or missing"); - HALT; - } - -#if defined (__cplusplus) - bytes = (uint8_t*)bytes + 4; // Skip Unicode version - headerSize = CFSwapInt32BigToHost(*((uint32_t *)bytes)); bytes = (uint8_t *)bytes + sizeof(uint32_t); -#else - bytes += 4; // Skip Unicode version - headerSize = _CFUnalignedLoad32BE(bytes); - bytes += sizeof(uint32_t); -#endif - - headerSize -= (sizeof(uint32_t) * 2); - bodyBase = (char *)bytes + headerSize; - - count = headerSize / sizeof(uint32_t); - __CFUniCharUnicodePropertyTableCount = count; - - table = (__CFUniCharBitmapData *)CFAllocatorAllocate(kCFAllocatorSystemDefault, sizeof(__CFUniCharBitmapData) * count, 0); - - for (idx = 0;idx < count;idx++) { - planeCount = *((const uint8_t *)bodyBase); - planeBase = (char *)bodyBase + planeCount + (planeCount % 4 ? 4 - (planeCount % 4) : 0); - table[idx]._planes = (const uint8_t **)CFAllocatorAllocate(kCFAllocatorSystemDefault, sizeof(const void *) * planeCount, 0); - - for (planeIndex = 0;planeIndex < planeCount;planeIndex++) { - if ((planeSize = ((const uint8_t *)bodyBase)[planeIndex + 1])) { - table[idx]._planes[planeIndex] = (const uint8_t *)planeBase; -#if defined (__cplusplus) - planeBase = (char*)planeBase + (planeSize * 256); -#else - planeBase += (planeSize * 256); -#endif - } else { - table[idx]._planes[planeIndex] = NULL; - } - } - - table[idx]._numPlanes = planeCount; -#if defined (__cplusplus) - bodyBase = (const uint8_t *)bodyBase + (CFSwapInt32BigToHost(*(uint32_t *)bytes)); - ((uint32_t *&)bytes) ++; -#else - bodyBase += _CFUnalignedLoad32BE(bytes++); -#endif - } - - __CFUniCharUnicodePropertyTable = table; - }); return (plane < __CFUniCharUnicodePropertyTable[propertyType]._numPlanes ? __CFUniCharUnicodePropertyTable[propertyType]._planes[plane] : NULL); } @@ -1316,9 +725,9 @@ CF_PRIVATE uint32_t CFUniCharGetUnicodeProperty(UTF32Char character, uint32_t pr */ /* * Copyright 2001 Unicode, Inc. - * + * * Disclaimer - * + * * This source code is provided as is by Unicode, Inc. No claims are * made as to fitness for any particular purpose. No warranties of any * kind are expressed or implied. The recipient agrees to determine @@ -1326,9 +735,9 @@ CF_PRIVATE uint32_t CFUniCharGetUnicodeProperty(UTF32Char character, uint32_t pr * purchased on magnetic or optical media from Unicode, Inc., the * sole remedy for any claim will be exchange of defective media * within 90 days of receipt. - * + * * Limitations on Rights to Redistribute This Code - * + * * Unicode, Inc. hereby grants the right to freely use the information * supplied in this file in the creation of products supporting the * Unicode Standard, and to make copies of this file in any form @@ -1369,7 +778,7 @@ bool CFUniCharFillDestinationBuffer(const UTF32Char *src, CFIndex srcLength, voi uint8_t *dstBuffer = (uint8_t *)*dst; uint16_t bytesToWrite = 0; const UTF32Char byteMask = 0xBF; - const UTF32Char byteMark = 0x80; + const UTF32Char byteMark = 0x80; static const uint8_t firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; while (srcLength-- > 0) { @@ -1395,11 +804,14 @@ bool CFUniCharFillDestinationBuffer(const UTF32Char *src, CFIndex srcLength, voi if (usedLength > dstLength) return false; dstBuffer += bytesToWrite; - switch (bytesToWrite) { /* note: everything falls through. */ - case 4: *--dstBuffer = (currentChar | byteMark) & byteMask; currentChar >>= 6; - case 3: *--dstBuffer = (currentChar | byteMark) & byteMask; currentChar >>= 6; - case 2: *--dstBuffer = (currentChar | byteMark) & byteMask; currentChar >>= 6; - case 1: *--dstBuffer = currentChar | firstByteMark[bytesToWrite]; + switch (bytesToWrite) { /* note: everything falls through. */ + case 4: *--dstBuffer = (currentChar | byteMark) & byteMask; currentChar >>= 6; + CF_FALLTHROUGH; + case 3: *--dstBuffer = (currentChar | byteMark) & byteMask; currentChar >>= 6; + CF_FALLTHROUGH; + case 2: *--dstBuffer = (currentChar | byteMark) & byteMask; currentChar >>= 6; + CF_FALLTHROUGH; + case 1: *--dstBuffer = currentChar | firstByteMark[bytesToWrite]; } dstBuffer += bytesToWrite; } @@ -1427,5 +839,3 @@ bool CFUniCharFillDestinationBuffer(const UTF32Char *src, CFIndex srcLength, voi return true; } -#undef USE_MACHO_SEGMENT - diff --git a/Sources/CoreFoundation/CFUniCharPropertyDatabase.S b/Sources/CoreFoundation/CFUniCharPropertyDatabase.S deleted file mode 100644 index ef818bbf43..0000000000 --- a/Sources/CoreFoundation/CFUniCharPropertyDatabase.S +++ /dev/null @@ -1,40 +0,0 @@ -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// - -#include "CFAsmMacros.h" - -#if defined(__ELF__) -.section .rodata -#elif defined(__wasm__) -.section .data.unichar_property_database,"",@ -#endif - - .global _C_LABEL(__CFUniCharPropertyDatabase) -_C_LABEL(__CFUniCharPropertyDatabase): - .incbin CF_CHARACTERSET_UNICHAR_DB -#if defined(__wasm__) - .size _C_LABEL(__CFUniCharPropertyDatabase), . - _C_LABEL(__CFUniCharPropertyDatabase) -#endif - - .global _C_LABEL(__CFUniCharPropertyDatabaseEnd) -_C_LABEL(__CFUniCharPropertyDatabaseEnd): - .byte 0 -#if defined(__wasm__) - .size _C_LABEL(__CFUniCharPropertyDatabaseEnd), . - _C_LABEL(__CFUniCharPropertyDatabaseEnd) -#endif - - .global _C_LABEL(__CFUniCharPropertyDatabaseSize) -_C_LABEL(__CFUniCharPropertyDatabaseSize): - .int _C_LABEL(__CFUniCharPropertyDatabaseEnd) - _C_LABEL(__CFUniCharPropertyDatabase) -#if defined(__wasm__) - .size _C_LABEL(__CFUniCharPropertyDatabaseSize), . - _C_LABEL(__CFUniCharPropertyDatabaseSize) -#endif - -NO_EXEC_STACK_DIRECTIVE -SAFESEH_REGISTRATION_DIRECTIVE diff --git a/Sources/CoreFoundation/CFUniCharPropertyDatabase.data b/Sources/CoreFoundation/CFUniCharPropertyDatabase.data deleted file mode 100644 index 14a5a7131ab9a20330df6922ac03cfe8df109408..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45092 zcmeHQTaz3&74Dwho!Qy!#*S^Uoj~HmPPisGu^|bN3xSaQ0N(fkd7z5NJn)8#U*{h{ zZBbLM6t%VG_=%suIY+l6wOTEy)wkUh%joD_zjLHkcTe{??>~C@u&S!-RrSSwRsH?? z>aBY)tm@U?{=s^4xIKF5_~hlPx`sNh+_-t`2S2Q;+o&Piox4@_sv3;izgGR|$FILp zIOM&mdb2wBwdXr%&rk7l_w=dxB*t!6V?$cm{_k82c02S(5^!<;{fig)r?jXqoWn(M zcU2cYi?pcl(^;o(Wg=j{p(%JW@ygS+TMtHt{I8~0M(yoSf< zy*J;&BY@l>XxGVomodm#W>L}My*tOg@}cnrf8gOU7ES~HL5lbXf$)8 zTVr;V09DP_h?E#9c|;EtiqIND1t*0yns}NtoHbaaAfp*1ojw3IuJINa=-cHFH1@_% ziq#Kk|M*E@8_JhGexo3`{-$gy{$Kt&3W|y6f2-2f$u<~TG6FGf@Nd4clXf>=}nrAeyZJ6&DGy81+*SL zjsB2>9^eWiD4(g&KC+r1yW~xaF*yv~BCFq0tFspVRP1NXd%LNi3=p?ia%?pknCk8% zW5**?xQ~Gbw=q@lG-U#orQGW-Z;s87cxObdDT?9rIpJ``ef(&g+@WU9fq(*6^xY)g z;=&@S=-bM=MsV`{ireBc&rHn+EfA5~s3hVlKes%_5)qW3O+cZ5cn{$3% z*O)!bx|m{|Y@m0*p-p4i>GeeqmFerEsD0$tnIE(3NQn3RpR?!BzWXj-zo+KmVNVCM zG^f>P=A;W_`PJ(87`F`Lw7POCFAw1|wN_MieAqstY(sFO9CRpI*B(O$>%cO)7#~Ey zG{|KPUDken*{UX|DLL(Fp7xKvr~(1yu7Q_M(EPh+z6T;gIZ zHf>WU-@4+9W$1M@N!kMg+Z%t@wT`m`+s;!2=x^RrZ^8Vs>$Jw83Go*9?-*b|V~ zd>JUc&`U7~c@^-guBE2O@k4KeIJ}f0UBAxwPCO--%c#3vFDYw!YiUV<{a8;=;jjbI ze^0R~9sITko4hIP`szsDKq~9m^y0pDHgFPwsQpa#rjxS*TOIu^JIlnP1k_c%0xDOc znN|SjZl=(R!4g~QxZlEyV`A2~fvxqu_TghL+q+rAKl^a|&fQnlues~`{)77McYgBI zpZ)w7zpUSV?^h4s|DbwQ!RhSruYdF5M<4(8cfXf!7&p65nyeC>PwUS<|HBu5{8I^E z%*U4pfBx$0Bh_9yfqxA{4Mcx(0=x=-`6TX64mXFJ&Ax7O{+UCE6m@o(Y>09h$d1cL zc(*0u!weiDnEid6jA|c0@Ks-LYvU{BF1ga1Z?99QGUyNS;=3M-JoQl2Ob>xrkKC}J z8hWkZNn*5W&uaSR42+iiOasB3z~Q}0T92zW=+oaSv+YrXSHZU1gUx|;JRBr8FLL1@ zKeu~(;BcMjG*4YZ*^`Gigk2MPaG57zY>EtN~6%@~KGtw~Ld z8hu#WQ0ELCUopMD-1ytAREHi6T(R;M(aZR#iC&-*NQDg>I{o8gT;atV+XOd)HHLla!zh&fl&UK=e>O>L$JwO#twl3elo5HVJjl7OjG2Mm*`A~RN#)Zx_JYsN4H zB9Ooca-c{;g!)b+ADl-MDj2S^JLYCfpgrk#!It|XbX}Td(e z=vuVha>t=FY;FmTLgx@X;4T79snQ-IScbdxU0b-vml@*?;*oMVZf_E4kE?TSR~bSg z%gGQ*AX0$)$3zP?B3(ASEo6%m%(q9y%>o5VUoe@jO%05;IUIp-wgV;%Hxw)uHCr)@&=zqxi9Ml zo`fFLvn+b-BA#mP10eAoEd7HYl17dgTXWtO5sIYfenhtHb0$ z(ma@>X!r zDk+zCPs1Gp9AJC=B};gQHqEm_3B2D$7hari(b^nW66{J!P$*V)i=Tx&ofXSJR-qT3edOecm>G@G+7u9Z)UtMo6K0f zrlsLvNEOr$ti5Z(SOuw6eRL)tVMqkfB{(s#6O4ixqzKEd`IN|5Bg!~6ZT^DnA$!9# zK$@3SF9QYdjnAxgtqTh-pcjX=`NX|hG~vle1f`^H{ifQ~?4L)1@6yF{4gBvXp+_tJ z^n)Wfv8e|-L;SwUs%6*Q3?Zk7RdBLy03ilMg#WB6#$CaW;8x~WaQ7d){Z5U)fh&gz zeoa@`@0Rmd*YEk9!SD6z`h!Px{g|Zin?343`nay~r+c4#`Wa+SKd1YW1U;`rWL?X2 z0LXHLV*)wQN9y@tAQ(fsU7N=#4Qj}^Vc)cuhE+zA22SND!e7Z;>;_YTKOn<~vl5%E zRE^e;^*e}Od|L70t8RpLS)kl z$*w0cNV$LJrzDlG?3u{Af{_Czwn;Fz84)84negRD*kdFBjA>ph47==-S{Y~L5B>=b zLDIp*$nvdaPNC-)Nb&*vsdFj4^!y7YiS%a8Q_^v8X>f?}(2ftg}IWOthqB#wWj@y9jHlG)5GA zNQA{jR}tkG6}jlScIAi50(C-%V3&_U}3R}!wI5>l^G_m4@{FMQP6fQ_eDh1RLtX0Y6bn}p}5diQ?8zI z3ac(U@OLwc*8MmT<{CxpA^GUU;a}`<&j&J3%f5xd@)pjlDz`ZoM%L*LYJtC+>(raS z0-sj#L%^dWc__hrODdcODup$2qflT8I(+|Cr3$hy0 z``&c`Wq)1TnP`e@qwEU{invrO-cG74{inIFJqRw?+**bd}+ z2L<4hnv`o3Tc3@jhDTr9BH_v{p=ZD%%!O1rq~h^p*JPRVy^!6!)zrCEoQ|gp>dX3} P`l)Lz?_DoV=hplGQs_CP diff --git a/Sources/CoreFoundation/CFUnicodeData-B.mapping b/Sources/CoreFoundation/CFUnicodeData-B.mapping deleted file mode 100644 index b4c4eec62e9d3dc95db7e30cbb07dcdd1004fe96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97208 zcmbsSdz@8c|2Y1yeV9r{Mw4tAGfhoN%_Nm1q(+h?B>~dgdF-lueqoDbN})C=l6KK-{U#gn!RS$zFvp5*4~%>KDJqtCQ%d> z`SMSraZz;njZxJ7_9(j6_seslX#F3y5A(yeu_(HVrR>gA*@Nxalc(`&wr4M%&TH6# zy?F+&Wk>emnY@mj*q3MVdUj?%p3NJ04jof;E^lHN_UC!LnO!-6=kpd`z*~7CZ{tPu ze4>ka2QT5BT*ys)hhK9MH}hR?;bLy(d;Eq=xQ*}gTQ22xF5`Dx&K>-K-*W|b@ zmE6UT_#;>GCw|PIxthEA34h@l{>o4J8`p9V*HKKO&-o|Ub1%Q(U);dI`6d71M*bT` zvG70N#^Ovc$t+f4Wme$Dg|WZ2ZW8JqJsw&3wRfvtEVPvXgJ%~RNh@;6pW zc^hj-`5J3ac^d0Lc^NyC@-cQ6%D>pTly|Z7DBoh|Q=Y{xr2L9qOnDW%l$Y^x zUcoEbjaRWdd$1?fNvs#IVQ;F7SRY=;zPz6Ocmr>wypQ$g%^bj6cq`?1>~=xj$2*MW zb?h$Q&3kw+2gRazIPSs5_j3pz;85GU@dK4To7&$Cp&vF8|`$3#DWo|E_jCvytR{CptO z##8yCaX9|z#xpq6I2`vZ!ebRKKy+RJXA;RIjnM{EX|UPGjq-K4TlG9%El|6TjwW zZsAsb!)?@GV%zy0ckp}e zBl9AK;{Fv+Fv%=dqP`HX!UI^92Qr%nu^JDiz7W?J;?MJpmBRGqrD6bNu`61O;LS7}*RpKR%9&v*C&-{oX3 z<`lliGOCw^x=g&!sa#6+nOMeYT+R$XpgKu>#&!Ih>-hyY@JnvwS5yxP^^i~x3H6ZJ z%5S)h-*P*@;|_k$o&15j_#@?i`SX|e3FpVepWMy8l=q2$co+Yr{+QUud!i^Q|C8r1 z#&f9-l3keKc}!BDOlI+XR-!(ctjr5pg%|MvUd*bzga`6cX7e&0#LHQYSMXq7N%fO# z!b2#Jlj6(^VymO zJca5n*@lH|OLdr3AIZ8rl|^*EOxELRtk3p5is~fUfE{==)l0G=JF*egO|qDsSVHxa zY|PF)hUzHUjaRWdd$1?3W-ngD-n^E5cpdxldiLWDREJ4*m{fm2DP(3DZ{Df=xDcABduH)xi&o8)v zUveYA;wFC0%~aRPtyI^^ZB*CE?Nryv9sHg<`2%A(Rkl8$l)p#&-cnGUAmo<1OYw|FrcsOhE z2+oJDafwo3kg6_g|ptm}9Z`_lO_>w30kKc2!H*oHTj=Ym+@-B9wKAd$H?_p=&%d>eO&!O{k*0~(SE*#ABct5*x2+!vOynsWa zC}(0UGJR3b^Nev4<9vbQpEH?BPN6)=DPtw3DIapCvI<|MyvUixs?1P+b<0pi&%&1zC`}zEM^hae~CQIQU4|KFh{+Yn7CZ?ml5|| z^Oq6#T=SO^_gwRr5%*m4ml5||^Oq6#T=SO^_gwRr5%*m4ml5||^Oq6#T=SO^_gwRr z5%*m4ml5||^Oq6#T=SO^_gwRr5%*m4ml5||^Oq6#T=SO^_gwRr5%*m4ml5||^Oq6# zT=SO^_gwRrd64EWGmPdhGo0oxGlJ$XGm_>nGm7Rf^AOEnW;D%T=3$z@%ov)#%p){^ znXxo~nMY~Z_Tjxq{Eod}p5JN>1QMe2%L) zkstGUuI40u!WX!Plldv9a4pOD8Pie4RV^2EXT<+{yX;fp2ja7w|{E&7WdX?jQV_ ze{whX@)!QaU->tG<3CZ9HzpS4tl}g5m}9w`kMa|a;~GB3Px(04@(F&%C%KMK@pF#n zdOpoB_zXAjS$@e0+{own71c}5CaRa5uc=;gHdDRiY@vF|*-G`2^9|KY&Nix-oNuXK za<)^wLuqVs+XLfsa|q+Q@!N;LiLjK zE7eQRZ&WWid#GM=ey4iLG2eOWCC7Z{sh1q{ou@u>!u+a_oPVi4a`r`0eiV!HV~jJw zB(qqFm05-QW`0%bm-*Q|h}C#7b9e}=GnX}ZC~NXCrg%7O@d)PeNcyAs1+2|N)?r;1 zu^#L5C^q2HY{*6|W(gbf7&hUtY|3VA&g0mE$Fn6*U@M-;lXx;)^AxsWTbA-vw&Q7R z&(qm~XRssBWG9}*&ODpv@LYD`dF;ybc>yovMZB1o@KRpJ%XtN_WH(;L?(D&yyqdju z4SVxi_ThEx%j?;XH}FQ@#QwaQ19%H>yXgk7gkovJM-uE{j>j64qm5*5@%iiY?iMC-7LdVpE>T zW;}__c`}bF(WJD$bUcrnlAr96+9^L$>(3)!39crCAD zA9m+;?7_b5$?JJF`>_{q;58h^fgH|39KpdH$@@8qL--IM;Ajrz!+elWatxp1BOK4M ze43B)8II$#e2f$LIG^JaoXUxOk_qve!E^HVpe}Ag55$#{tG!_+hW;c31g;&w@DeO+qqp$}( zkHVhxJPNO-=TX>;j<@g{I^M$GbR31((s2~_q2n#Qj*hpmFCAB*{3vu>h4Q2DUdoTc z`*=UazeqnTGA~8W<3;AB$h;S=rg<;=gyy|y4b6Mer!? zblqF@1@*ro*F8n=@=NN2MXq~_T=y2~Q$_k=k$Eq2-CJbdi^Q{NGsUxL3&pc&E5)JeF}bWrEF^WOHWmI96f{R_5`n!j?RMC$K78 z@j#x)Y@Wn}crvT8H4o+~%wZcI!nUl=Qs(kh)?hmx%F|er?RgkaXNnzoIL}}$cH|K} zlX>jKBY76{DW8f9cs6VE92W9i)?pXc<#{Y(SJvbCl&8fP@F-r$2E2$z^J2>1;!7xh zi!Ws{FJlQWXJcML`CNPz<#GHv_J~DC%DZBD91qId;@*_6#eFDGi~CZ3#=~*;<4u&G z@o@Y%G8}h*k5doDw^05U-)noA=ldAud7$lsIGFcy2p`~3>SM*jIGiImlB4(#NAqEh z;UgT&M>&p<@o_%EC;1e|^JzZAXQ|&6KgWrDo|E_jCvytRsE-v-<%^ug45xDjXL1&2 z^CiyV%bd$ss4k0Nqk1fUo$9doO{%}*x2W!l-{wNT!$o|Ti}@ax@O>`jGA`!_T)_{y zk{@vuKjvzF!ZrMqYxx=1@pG={7u>)vxshLS6TjwWZsGTIpHch+-Cq>%<}XoH)+QE} zwPh(!Wjo6Mvi6ksWgRHr%R2H*cB1?)>r8oFb`H;F7oNwil)q&cP~MhZMEP2F3FT?o zWxSkM@Je>$RqW0l?8&Ryi`TF>uVo)z$G*It138F;c|V8n0S@JZ9LC`s!I2!rhbX_w zt4w~C$*(f`RVKgEbz)JvE{j-?^?4K<@Mtz6yT3piNk`|Y=xTM7; zEiP$sNsCKbT+-r_7MHZRq{SsIE@^Q|i%VKu(&Ca9m$bN~#U(8+X>m!5OIlpg;*u7Z zba#qNx+ldYEiP$sNsCKbT+-r_7MHZRq{SuOk2mlRI`5_LqVrw)9)0Hy-fMgx#V;*> zY4J;oUwR0|FD-s)@k@{7C_bd0gug3ZY4J*nS6aN%;*=Jrv^b^3DJ@Rv5T|GOEGO_e zPUQ2P#1}Z3Q&`3{r}9Nk^LKhNLwz(oo#FYV1oJaP_pMCOnpYzzhMwCbU zvIbA$p*)#2*_wy(6sFjQ zhqEnfv6M&fROYcAkK}30XL}a#bk=4E7V-?%VMo^GnJi)_*5g^M&(1uGXLB~!@g;uF zIb6?|`32{417G2ne3cvd8o%N^ZsP0wns0D3-{cm~=T^SOZ@7Tl_%^@gLT=|f{Emyb zgYWWtF6K_Y#~-+ayZAnT} z#W#Bb#W(voif{Hrif{Jw6yNMg6yNL@D8AW~DZbfLD8AWc6yNML#W#B@#W(v!if{Hb zif?v?;+s94;+s8#;+s8_;+s8-;+ri$v&A=CerAhrw*1T%-<0D@iA&0HrNkxWxKiSh za$G5KNja{RxTG9cN?cNoDLw*FDRq+)mws&q#rkz)TVBOdcIT<= z!FKG)(|9%8vlmb2HSECNJcHM=Bm3}7UdK-C%d>brJF_3p<_$cDH}YKG#4ha5^LR76 zasbcgExdrY@e@CvV5|yKc` zmCo_eZFG*0Zl`m6rT^mK;aT#~eHB$6FKj2QT;1B$eySS1+@+1DlRs5MBb2nG>7k6L* zkX3mQvw1M9@et-Pm(_VFYtU;Iv6?)bDSB-pR*PPfh~?315wU!_c8t|#UDly%#aIzt zBgX2}wPCCQ8?hlvSWMS|vBq@m7xF6RnlILr$FVtGUt zN_iK%oUZ9(SMmy~t5`SoV0WscSWl{-STCxZSZ`j(KD?fNc?0|LCf>-K*`K#?0Ofz| zR?7F-9lV=&@m}6TuZ@KIi4Am(AD;L9wh!h59KvCIkfS(~W9gnJ_89l@DL%>Z_7C$p zfgz61+dh#ma1y6*GN&@l8Jte{F0om3j}m*C?ondyRbsDm9^c}8zRlnH9v5>-g-faK zV#_N0fXj_nRJfArEVhd3E4G^IDz=8|DYlmCD7KEDaXr;fYy;Iz>`RX3S5z;tuepg^ zxS8K@E7gB&8^7are$O5Jfjjvlck!pVg+f%#`2(v54w3UY|!(ea0KHAxl`yW7wGLGv0*Fs6ONBFs=^cr^LKYM|D{2 z9z3oNc`7AwyH~9H8 zRG-ED*x&eBhWhkcK>Qxtdvc(083)_Xc_n_o@r!)W_$7uq48MQ4=iQDYjKlVkoI~{) z*RSGZjbG!l_6yt9V|upp_i4^^PtkEC%unKG_NV@k&>s?a@gM3B33--qT#0=glZc{9 zoNjC$6EirBGig2(vuHjOvpwzrzGVCe=Wr}vruj^$?}T|wyu!z*&J*S>@fyuzVjlI8 zgt{+3&Nn#T_)R{|`81D-w`l$n3pjyq(>x{?Qol*O!{@n(FYw(87jv@ldz?c3BVoQ1 z?^8cY=p%`#Tt@SrSWa;!h0o^)tis-_1Yy z3)NNPH->q4osjsQe{ru?)Wn*_93IO<*p$`TjJa%1{ULcA4`mDL6UpOw7+X@mNS?sM z*^0GzB9EXtPwF4ZlX)atGoR`{S->`|&9*G0`cLXF$x~UE&d13j%HL!?wr73n56Pq0 zfem;Dk7h?U)40avoH0PWIx_S^_;w!>N$A}2k*O80opNoim<$dyL%D?2ZRHw=3s6La=b0S~hBu?RErdh@pIh7es;|xyc zEY9RhoXwXxhp%uhU*oHMo%8r6-{4!E&$qdN`atp>s{iD>RQJjEsNR$BQ=KQ5QGF*r zpt??e$d9;?A9EEy;c9-$HT;Zg`8n6|3$Evv+`zB6kzaEY)wS2ItV8Bjs%x)RMM-t- zHL582J$LX2?&Oc$#h>{Tf8lQa#$Wk6_wY~t!N0hd|L||_Pj;=eh`tl@R z&y(4Yt$71a;f-v=o7k59S<0JvDhIF~Z{caYmF;;OPv`CIz&m&b?_@{b#WU$Vo7IW; z@GRcT&b*Ijb0E**AfC&??85tb9*3|iAK>{M$_x0QAd6qls+e_(l)rh-$2qGxmhw2y z`8a0{$5B4#IWOcmU*$bcd7bBcoU@KkQhw*TZpc~B@s#Iz&c`_$_zdNHp7U|eMoyr- z&vQP`*~E$bn$L4HCvgj3;8srNH=M$4EaSIKb33O}edN8!9h^pWl9%C5PN#awo55Y2 zNp+Jqi$8HT)lc3_+|4;uM|m&vSI(t+%6o--_$t*^-fR4W^Y|xU=U%=+^_BM)|K$Rz zv%I$>>qo5({fQo*`!hX0cQ@5#?l1hCztaA>zeQ1=_=fYWmtxA#uX*Ad&Wm~Cn=GXG zhVx*a_?9ca;k=gjAiHyz_WOQ{))qQ?V9!_dDO)qVc4Y{F)2%H!Ca$Fl`b zp!&`~k?K1CWUA-yoxMZA=k@N!6~B-_E;uC&fSiZr;axIfw&!KL_&x4&j3w%HbTwksQH?IEoK*G#}v@KFYCt zjN|xtJc_FE3Fh!gR_9Z!!SM|F@wCT>=l?t>@&!)f6i#NEWqgrSnc+0f;B?O7Ouod~ ze3^6j3g_}QzRK4*k8kn~zQy@`n+y037xG;$;(J`o_ql}2xRf7oIX~nIe#Djhn5*~+ zSMyV@;b&aS&$*6Ya6P}|27bkj{FexAI$V<9FQ7@416Na3_D{F8<7)_zQRQ zH~z}sxrcx95B|ly{D*&YAOE$+EV9O|3S)GAS`cSdCg}RKAjxcI(e-ITC5mrBWx75s z$YF|y@NiaVE#}hoeL)T8@lYPg+HAl=9?d#z$hvIAA{MhAOIV+cc@&Rf6Sm~BJb_Kw zip}V}UC^8-@i?B$7HrMq>AYRgh8@_J&btMr?8sB;yj#$Yop>6ZcMHyuui^QfYkV=g zB%&xhzw?YQWmn_yyv{eioEI3^=7q*rvKxEzDqhR(?86?sjy>6zSMz%IVn1HP8+aq% z;7xp!{kfDka~TJ4Id9;7_{FDA>Wf_&r@`6zrw`Q1BNA zdcJizi1j#_NAZ4!cnx7AKEM#4p$u^e*A>Td7@Ki8kK+is-YOW$5U)`@kqy}cui*;}@te%+IE5izWejmj^CnK^&3uu!a2ju8hIeo} z@8S&J!4Iee0P$<5IuDc7>W1;hAp*R-~;r)?yt}*LfX}*daf6;1+ThS-Hc#e3Y|Uysg$J_@bEq#DAHq^r zr@maA%XX|meYyBhwr5SA&coP&DW1W@>2;psT0E0SuoIn!iqGPaluyO^JevhPhqZYw z3)zKrcpmGrD~otO>+u5C=Y>3q7qI~^=Fz-_4S6XW@iLm=;>%gWE7+LM3&rxeSpSc= zqW&LuzAEl*yL>HnUs^0ri`|bF%g$cH9>jsXpM&`ThwwoTN z#u=Q>S)9q2s4o=1%sG68bNL$8SMlpqSH*8qJr%!2byWN|)lcy|T*!C1i0^SR-{%r8 z<5GUW<@}H<_z_p~W3J*ST+L6phM#dQKj%7r!S(!-8>kM8H}Y$4;udbE`_AI;>3*~L z2mZp{;Z*6rRWnZ|F+R^Y%~wf+FEB~-R+7ajtVHuyQkiL1p?NGhfG@Ht&1cDh%rKkg zwd5eqU^SZGl7l&mIW*5Dhwvp)nk<{Nx@+m$g1=Qb4YEzs_3aP)9)S-Bl)TRDbQbchpsYm^-)DrsIFR>qFdyI$KFFaQ&S4zM5qyZF_%KKF z5su-b9LvWzj!*D$KE)^bG{;BQ`?|lcL-Uv}qIpc$=h1AyMr=s)nl9!sY|LhC%H!Ca z$Fl`bU`w9JRy>&}@f5bExTM7;EiUO&ic4Bt(&Ca9m$bN~#U(8+X>m!5OIlpg;*u7Z zw78_jB`q##aY>6yT3piNk`|Y=xTM7;EiP$sNsCKbT+-r_7MHZRq{SsIF6r(Rmvm2x zOIlpg;*u7Zw78_jB`q##aY^66e!P=+@NVA4`*<(KEiGhH$KEvlYfzNXyU*IH8;bf*+#uqu2uW&A3 z$BlevZZQs!1VuFP%Jmom50@n!CyzLYVaxzl(T^`(q?&7IDBs4r#iXnV9ud=&ke^ngr0ZC{O9URnW6OjGvbh|FJ*?&JYNW*(!ylzE&>D89Mo zHS;8wQk-+mZ)QA~Q@nFO;4@r7anIGqG84Fx;-C8wCvp|#LGH(##MP7!xu0+{*HB*M ze#$bgrTobKj8nOe@+9|jPUCuJ_ywnP1849{&g4eU;#Zu_O?-)8a}GE2Wp3eIZl(Oo z{f4h{8|7i{x17iAl#jXJ@eS^vyv+Tc^SP7qGxrBB;4aG3+#fAJ3ab^&_g^uZ=fC1K zzkekXQCKJSS9p`nJpPqsyLtPo63y3Nxin9I)u8$L>rk4PziQHa{B;=3!@joGY8SGU zb$BZ4vK@+^IT#SU!1Gk7#RvLW@ceT~?O#njLCm9R4#Q(xP649{T`p37s| zg-xmM_BCTyHs|>~ju)^6FXZvOh%I?BPv9lAW-r-bQ2DZ}YgVTx^eI7?ZJ){c5V*m`s3@iZRE_RQz$^kP-g+RIF@NBD+{GpQk?->-T05Nl znajAF)($6sp|!)wU%7(6@k8$6O8(A|_y&-etzH~UG7Z}w9Z-|X=e-|VL;zS+-Ee6ydW_-0R__+~#x@y(t{@y&jo z;+s8*;+y>f#W#C0#W#Bj#W%Z*;+vhO_-0R~_-4OI@y(t_@y*Uqe6y!he6wdze6wd# ze6wd!e6!_ew)ket&usC{mY*qcNja{RxTG9cN?cNoD z99K$QQsKD7C8cgs;*wG~DRD`uo0Pbu)J;lUQtBopE-7`B5|@;^Nr_8J-K4}NrEXH< zl2SJ*aY?D0l(?kSO-fu+>ZV^eYp>hzDz;^Jma+#=Wly%_)jW;8*q+z$boOQkUduDs zhaGtx&tzYA;`Ka>{n(i|@NC}5b9fWaWq)?z%{-3-*p;{NeBR0ncpER|?YxM0@M7M{ zOL!MA<=woD_waJw%PV*vuZ*lWx7IphUB+0%IO{RN`b_dDX0ZV)@n}|NLsnrU9>8K& zWeE>tV`lRh9>gZB#$$Ofn=*&ZcnF)bI*(&6Td)R?=b>!LnmmDru@zH1k%#jn*5b)L zf~}dyQ+OoXFrRH%z*5%csdPRMuknVjxNEzpv#*ZUEM@z8%2yR%F<(>u-}mKf0J?Zw z2iu&Fqptt?S$J(YQPue33fuaft`E!i&HW!e1n41cfUF;RPeVE@+{72kLI|FJDRCTv$TA@}!NzDC8*%5@!D?uk@WV^=w7^FI0thC@8?Jk;V3@9hd7j@`5@(L`RBxh{f8Te{YNnDKayepQ4IUL z7cbx6y?FWl?#0XZAHyg8{1M9Wg0URWNBK0z@fkkGXZbiM@CiQ0CmHsCiedlp4Ewtm zFW=w2c=`U%GVDKrVSo4H<@>uAFPLiVUcBH%PU1AazzipII;U_3%Q%y1&f-*t{a<9* ze;UL78HW9*GwknPynKK6;^q6h7cbvGyw{iX^OudC*UI1PtHkggUlqESF5kY$;|?@_ z*LVdN8z02*p5DP!U*+4wdu-K>Cjb7=_VRo1!`(B-{QL-pd+;L} z?!gNf?!oIY+=JI+xCeKSTz(IJG{Zf3BZhnM5{7&5V;Jti!?`x}oSXHL&|e1om2c=@ zr}-LM;Ug^l&-dkhIs8oils_i)-u*w5yXD*DTDj(U|If;MU@w2Cy{~I4>|0^jzJFWz zK5P%iG~oYP-uG^Ge4*c6UEy^MeQ^Kw>;1in_Ibs7tm5HlK)Y4D!s{{M!f zd`rR>fu%@9F!&-(shBXZ0T)uXp4#OINdK^S?E?)z1G{YJIaV}p2AkO7$ z0K~a`4S+b8uK{Srum(V^%hv!L&#(sI1co&L&MoC@08VCD18@q%8i2M8YXDAVSOXvj z%GUs#&auX4FsuPMljC?6ALH44oaZvE0T9>nH2~)`tO2-?VGY2=3~K-`Wmp4nIl~%& zD;eg+{FJW&=)tfCKn|3z0l0>fjO9=H8UQ&_z6L-pl&=A}fn|Pv6T=z+@h@Kka0_2F zzKvlGz#R;00PbQ~18@(+8i4y4)&LA*SOaiBLmzm6;XVHcIhVuvDn~N(gNGR2^B=o7}^<82ZiI4DaPH(icLpEM|=Iy}aKnW#~7{ z8T!qK4E@IWzr5e9W_ZnS4MV?K%g}Guu_o6u^qURpQVhaZ`Mp6u-}g~F*}fdxfA0<6 z`+wh;*ZW|P>usAn4t*g!F2t_<-azcil_TNaVE^w=gx`_tYrlT<-|u7p^L?r39)1?) zCTtHn)N(!5a`pXkvns4qVdV<{ulv`o_&tRc)~T>=g+&$CtFV5BM^*TL-M?GK?=gqv z&$D}lJu2*3;nfxPs_>c$|F8Ss_@CdCc&Wna|1%b!^6kNpBNdMcpZ!)omfPhz*Z+4M z9vimr-)H}0!v1ncSpW0b@O?$h|NGdmE$kQaX8&XNe;*$Ej<5ZB^}mnvefWI1@?%(5 z;mZFRhsTEP!EhWEkBQ9Xf4{D+_&%Hi_ix|7EsVqVP(PmgezSaEehv(ZPx)9M%)0k~ zw(Ey&dfR7V+`s(u4#T(MT19S0p(j;h=t-V)^d777eX7l9DXVcAbGV$<`2lM%^sJiv zkj`PzN;-!{AJI81`k47#&D#8gb-0FdJNlIM8G2j;e$Iwm&tiVT#@xUr{E|(%iOu;n zTW~X5atm8A^u&|+4O{bDw&8Y`(u*`vJMLh6e$Niv$&UPiow$pg`6JKa&+Nj`Te~v! z)(aSV>qY#HmoW6$%lId+;9hp)U+m7%bJbS#4?}$SQJkzYDesH17{xpmXFn#WR>GSK zQGbRWEbg&Nyp@%CJFDu?(DaypARll3^8 z4LFBKb1ob5RW{;07V{03a6TJz0gvHAHsK;R=VBhmC2YZ^Jf6#W0#~pVSMo%z;z?Z1 zlevbixt6DL9oum|PvZu*=SH5+P3*wU?8L1+i`&?l+j%y3FkB1n3{n>ywvmpntn76PoZ)FqS#-_ZT&3Ok~ z@J_bmU2Mg>c@pnoYu?K?oXAo>&vu-}_MFWQ{E!{FlAZVwJ98D!p?((YLj5e(mHJuv z=LD?bMaG|&ntQJ0W&Dg+a2>nxb9U!?_T(4r#SQGujqJm(*q58wk6-gfZjPHPZs7oK z|W|`v4PxK8pQ_l2M*yb+lTT;4&zT8!CyIwzi~AG;28eN zvD{l){@+)}{^H}tf7|{f|KWK4%V(&s#U_MP4kuFb#U?S%$xN_}Nls-Jr%_*vO{cyV zo5?DiO?@pkhx%Gt8tJK$G^LP;7U^UL?!Cb%`F61FxM13x{nEG6732SgE59M;| zbFmdXj4PSqDjv?&ti?4vf@_)2b=22l>sg;0coa9X0XI?Kifv}Y(kQl-jkt})+|Cm2 zVB@%0@fhx66Wf2{vE0q3w*Sgz+~b;}jeCuV-d8Wbt~r(AT17vK{lNjwEaBSYUR}Vw zUg81U_i`xzrq_zXy+UG`@xL4%BE}K)O=1+29L-96m{mBYR4h2nIGY((<8 zYj758a(1aX<#OX%{D65}!F;O2cx|p^9jdc<5!G3|ezKE~Is9(gpa5cL!JdX>wmKX6eUc&Xfj9>5yZeTZl$?n|9p8Sfvs1L+@ zQy+-;;a2wLH|)o4ypi9sKX-5d^?~@U+{xSd1MlQ6-pwC*FZF@=K>p0Z+|42Ug+r-7 z#D`ITh>xKD5Ff=qIoc&<9gbmLj%5+Yu^u01eLl&B9M3Rs&oIo-1RqJDPT~`JEGMx! zC-Wkf@nTNpC7i}fIh`S1Ga2GFn;~9v=sXvn%aCWUGUVAjhIxL2VV>tR%@OO7I{M}s)`ScUR^V`iYOQZO&40*K2 z%aNz@51z%n?83hp^8Q~s?$A#TzLs&`%p`ANCCdLq72eLO9K>us%4&R;Ih@4mOtS{3 zvnF3>$}NRFNYwK3W+mpa3iDZ&wVBO2RKJNLR%d;l$Ob%_4cUgpY|F;<{1Qzfw;pWD z7@ITB7WAYNEtzC1X7MD3<7mywY{M$0QKFOwupPs3wdaBCz;JvWsm~-jF&t-S9?Wy- zyp!m{L)ew!_%C2CFJg_-C~*l7;2R+s9HJC&sZUAE)|CJV|w(7|-MQ4Aom=0*~iJwk(YjlXwCrvz6^-4Dp}J zlQ@kb52mv<40$n^rF@kkKjyI=-{5JS&-Prv)47o9F|mkea4|b_3DsL- zDLa)qhw&_~U}vu6*<8hQxSHp34ZCnH&*M6FjYo;~Jf9nQ0XI?|CN@#OOKhh8li12j zxQ&-`J1;AZ5<7S~ck&9`ckxR8#BSWptN1Isa}Rs)5B4mL5_@?y|7I`#%WF!bWW?T# z^IF=F-zOd=EAcv3VP96|^~`2JR^tuK;f<`$n^=SWS(7(2#R05EeI=PkeI=RC+gO{o zmqy7tyn{u&ll6HQ8}ROUlx)a*Sj>CbnD?;>2eK&#u{j5`1@C7|4q+=kz>_$Xt@$9^ za2QKDob5P*?KzSiIEo$l5Ib=+JM&?l!!hi_N7$8Pc>y2gMI6UV_!uwamK+fP` z&g2lz;!w`!FuueQoWoIknWH(EWB3Zk@>P!GYkZvZ;!*NRzRvM{gU|3yPT+h_gk8`+$bNN1B<aV^(z9Y5!KuIC1R!HwL&P5hFZ zxshA>6}NE{xASZ6;AZaR7VhHKxNA6m!`QfaC@n1Hh#yw+`+&3J^$s-(kLt9 z4~%mcll+mD_!Fz}XIACzc$AgRUs#R5GKashI`^;!e`ihp!4&^wt?)WL^TO-!%nz@_ zmquB&nP43%!mJ`@u|6xY0V}g1tHh(MVjjT8tZI7`9>}K5W^*3I7OcjWJeaMR6OXb^ z;vsC!>bAFGE=yU1?RY5LGZl}rI`D9IWG&k}@d$Qi9?#*C?84gdD61(L#ei7^P z5*G0?*5ehd&u%=5-Ps@>W%cCI?8Sz*_huvZVKMu%g#FlJ})(1z{|OiS8@@%`T1gA#U<=+`%?Dca`xm3Ud@&4#Z|n9 ztJymqWv$`0T+2STuj6%G&%WHi>$#ErxQRD#GjEJXSzCEi+w$w2g8s(ajBhp$?*R@l z-p*T$!}Gt@cn5DYp2gdZck&M7aGZA<@8Vs?-qS0%+xREmV;qiuU}==Kn}hf(2Xhba z=N}xxy?lUwb147igQZcWh{G7?a3(o|eo!!yRXB=O`4F=?n$`F)b2x_8`3P%pENk*n zrZ|qZ_!#r}IP>`gYx7Cg;ZrQ)c-H6BY`|yOkk7K16WEx~u?Z)#DW7L^PGSqbz?PiM zR-D39H;LPgC-Xa&aR;aJd;5pKzteacf8ccPvi$*CBNm1E-(4D2nn~xw zO5yMQYCMN~jOX%q<5&5I@jU)%|M2|w8o$B6j34IT#`9@ySY*H2Q7oz*XN-yHKmR|d zUSvZ*w+5rIQCsifalHK&(Dh=ag`CMn3~^b^5SJwkaakHgb&_1p1Gs|OT*)G?VtuY= zTdrX{uI1@m$1}K|-ME3>xslg%6Z>&9Z{Swm$Zfod+o^w5+QD16lecph@8C}y$lV;o zUpa((_yGUlFz)4W{>|z9mowr~<%phtW%E{N7L(k>N|Ya!t8g=`atpI5-j%EId*)EQ zD_5s@SFYisIF61*P3%|Kyf--@iW+XPy=D|O>BJN}vljn9rtSkgs-kV<_?)ww1PE0` z#E{)&3B6>K(0lK_cL*Kny$HgBfQSvGgA|b_9Rxv91O)`77Xd*9tXNS|5avHGgr&UI;Pz$%+7ReKZj$||H7P(8OwYBj9iYH!g!LA+c7h1U>?WJdKVva%=7m! zuVY?ie8_m*F;Bag&oM*d@CnBZzk>N4GwKU`(lO6f!vgG=`pkIBF-z`X9OdQsGYV2( z{w69T-Z6vx7;wx;ZHGUInOPbW9J3;TiH_+;yJv(PGweq!B~g{2+Sg8I)Wwhsa2F zOly@t?3g|uV+zN49#dH_H>Ocf-(gwDOl9cHC`Wmtu{@G*85JD!(yv(2F^kkLl^nBd z7*=-7>zP=^G2>svs*ag31*8jg8Q^-+`K*Zf+JdEpY)c1*`Fk@qV- zG{3H6CXvq>^(Y7Vl~JGak=Gdw*uIXtA$f8L8#!j--`JS-RXq!~;iuT%F%t`72iE@pJ90c~ z?@p|*cJAz$Iplvv7uxGIcD4D_jpO@=xI1}K341uEi|V(hV|qS@>Ex60wU=YY(El=e zlQ(M5J{;$L>`VI{z<$)rM(odaa^L{R3|6@YI;QVdVJ^E+HD9W$$@?LA2`r8=C^j7TR02`BJxAWwV3S|!6nq| zFSwNcruCPR-;HrOa@~Ixz(9Wu#H>vk$ za4pB7`d&x9R>$?^i}Gy)?eH~jbWHmUe9Pw5CdL!B>t^yx`MQPWcj8u#XCQ84{L}Gn z=Q!%)4#&(Zi#y3iEWa1`v7a0GF6Eht z?>VOBRoqW`R4?z-A8X(TwCfT)VEe^~)blCggN!%IgG1Eg1N?}3oP-}UzQ2TrX;0l-kWY2-D*3PW{@nKGYivjL zah>uO$1iCAT=*sRp?>rg$EES<2IX&#H(7rJ-l89>-+fK_qwyQce-po@-6r67^B~Np}x=HuWWZQ{>FJG6YsE|^7D7cEboAS z(4SV~pOkA6-sQMY;9s17zQ?~A2NmCQ%rgm?L0-*ui^Qu?? z$&bvZkoL-q!&k5%{i8j`Q_c@CK)cYdGZQ#JGM;CK=+F1CFnL@Ni{L{nLB9QpC6PSO zEXDOgF)Yn_Q^!??I5eHx;j$8Fm88=`R@~;n8#i3Y@{yQJ5lgC=V2EL3n@pr66ziolFk^IW6 zL;cOgy5y_crylJy4(pR|PhkVb(GWHy-?aTkbTk==bg;<X2!htp4r;0W4zH;zQL$0+h( zDvlAkGZ`*$Ywj-X1^ux?&Q0+F!=Ko~eMf@!1UB<1AH@Hxi2fj9%V;7pF=GR`7Tn&b1RdYEnV=LPIZOr?2w^dkMcEb&X6 z*FMIVIqw$4SFkm{N`9%m=i2@`kMSoz@oN}|^HK8`a6VLfEqrwSlDUZdQ~NF^|31eh z$oQ1G)aKzb#-jl7a+{B@b3L@4cm;V`4p-tfTxG|B)#T|2;x`y~)sNPo+U-rohj?6z zL0o6Yi}k4eZoofrBinC`Z(&W`M7}dVXKp4>ci**KJh=qAE5I8 zfX(L*@de_8HlGiX&lW=>9G9bi^&D`Z|Nk$FmVP?INCYOcjl1=N(g1{o?{w!iy2NwZ@A} z5w|Pnv&_#T?z8HLm)Tw&yn>7m_v5+Gd=Z1FxCFk6C2<~>s%>Hz_wJX*g;<8^i!m9O zVi=cW3a-FZT!m@)2A0J)u^g_$^0)yj;#*h=H)CboidAqsR>hrI9pA>9xCd+DUaW)f zBF}+h_G5kg0C^r1^C33GL&$TX82Zuu#&`sq;3uf(B*(ECl6Uu;<0<3hUOLUhoWbRI z4maTiFtJFXB2O^fPYu#3=7P>fVdS_lRRSpKARqI1#hr63phEXWe_Tc$zr7 zW6G|;91)l2(eAyRjJwS+7q-RR*a!3AID9PP@}AATmzVYS;p0s2kNNN=e1iE+FhB7k zd=lTp0+jnxe2RE8#^G)(7;)!*iSfjDF~B(Q!ywz&^aSE6n27Z;gd?#Ksys=KDVGlm z6CcGQcnpi;*H{cQu{hTcQCI?_u_WflQrHMfV=F9!oiQ0lVHhW43QoaPYnrue#LZTU z>E#%IhhurBAIA!)@>h(wvAwYp@sC&;?_d?KS5=OxsQRylYTxSE5NqH7tch=6E&K~> zbDqnMb+8TAMQy(xK8N+K4N&df5I12X+=Y$t5H@j4hbOS9cOB*4Yeua4XiltpXn~`# zCG{7BtvH|lf~{HZ6t=-Xu`SbcU_0VD*q%5QJ75ZSM74LPi2JzOqcidE*aiQ_uAG-u z58d!7?2gLo9@qJCRBZ>dTQCwH5+@rZpP&*4Mb6bBO12{5tLh)`e_e{cuslP2G!&BX0UtT*7>nV=3ym zma*I|Tu!_cU&oWU0zbo*n1QRf{!)Fec1)$p_y%hHS>s*LyZ7FVxJ51yuO-%g*Kr-z z5Z7Z<+VLaX`S&(< z!`-+8_n^x24%dGzac{&enH~2Lt6kn@zVh)s;sLlH)h_R&^5FxPzk>(3UR1q)$n?W_ z5I5o>$5bwZA2DC;`!PO?hw*hhg5&Tg%MHd)y!#sW-Z4~sJmQA4;R#~Z|EFAs-oulq zaqtw^BL(m@@mxGZoCVLaJ(ceqixk``b`Gs|LSKkC+pGg^!{L&md_n=YtT*^ zdGKX?jOj-(FXy{T__%l9;p+XtaQcJZA5>e2`H34N=l|i8u>g{ndVesS{K$yoI-xKY z@cEzxFpXBQO z!D!WQDl$Im{Xq>KZ&~h}lCWIFZCW176RW){5Ytce{($G*Zbqeun@FDM{lQqqkBll2 zx5a9#irRm*h}*I*R%g2pum<-5I=-6T{g#_ii}`;L*T&zmPQ-0RKh3C%YR`JyhpFA` zBmF?{4?G*9+M$tmU*YQg!8p}J6XN>V6xCkMA}-I*T)jUSPk!qC0q-|ly+7c-&ei*a znzyiZ#BE;$+j!3{+>ExwONrazVQkOzSFi*Ah#ehMOZnG{`@)*o8C4$6{}Wqa*NEF` z5_XHYo#|&8-K{;C{|j+X$JBO_^M4oRLoe~ zMl-z=jv>B+W4W(YzKx5xy_E;!iItZVkp8dt2RxT?GdTbExr&n_Zr?&Undv?8S>g>i zg;;qrm2t5LM%d3qoW}H>IGyJ@K77tGbz^Y`vGzBU>z~~?E8_N7eLjzhIsd1w==^6)?qmG~R|8%Xt0>8tR-t#F}?+>Q8AzqE@cWS;y$<~;tnf? zTUoCgZo_ok&U78;j)*&4d9{=2+RrYYgK8Xl+k0Q=X6(lP#CuTVGUxx98*wi_kNbF@ zkrUq~zKNXwdA{N5{lP5d6X*X~+U^Iayga~uxDLwrkoX23)87Cs{_^tS9#GTL&PqN$xcnXi=X`Y*? z|D5rjpSXH|z;hEa*0SE|RK95X*3{v2`VsD6Io{o5S;)iI40 z;BUn5;GKx;9nbGfSAPG&^PrFLPp-e!AMf%UNO}Ah_p=%=IRDRk3hz0l@ledbv6#tn zUm@rJ`PuLR)3yFXVvWQ9c+Zhsy+7c2lFK6kv$!}q5qH5Jbcx9yy+3G@hJK!}Yd+`y zCF?O74`B@cgIQSa6lRUM%fgt=doJbb{lW5@#M$v7=5S0?EteCi=geF@uP2`}IsdQH z^gK+zhur_KX8g*`8*$&riI3x4%*Xo_@+$KQ$24n?oc~u)zk1KGLggsH^D3?P6z0M> zd;$w%6^xI#JYMpCFUI#jc@AxO_UCi0nxU8nB%axjXJNjg$TMSaJ*oAi){|PEXKCJi zsrgd#rRMW&S3gst-<|Q6lUhz{Ir+c&TApXm-f~jQNi8QezmuJwj)X>PIjQBOW=JhB zbv(UM$I}^9W|K@A?F?Knr<)oIAn$NRX zZ@N@m3;mdGRUB<&skoSpWgTJ%ds`K2`--LF7#mB)*=;O&X6nU#tZG;7U-cmsYrl%6 zVr@sURIG9+mWs7q#j*ja9R00|wH?J$ag2?n;-WT|4T-h>0Ba-k5vx6|RIKeP zmWov_#Zs~M(-^hgr>#v;`x|6!imKPaR>hjHSSrqLW2rpX^2!gXSj#DvinW|#sk~Qt zl`m4U%Bxr^=DD{Q%htr&?ntX*ZC9~WtnDh6ZBWaPvMSc`Dwc}1o?@w3>nWCP?ex)B z#hR{IwnNpw@>nX?aVVCGbsUPNV)aACQn8Lpu~e+~Q7n0f=9QCogP!X5D!2NHRGbAn zqmFZ;RdI}srDBy=^QG!F4pq-m`<2?Stc6-G-Ku<1to-@k`cmsltuM8{yoNgd2Uf)@ zpJJ(4%PIcf@`PS2KW4ht|N4<`5i4!vO+RA&*4hBIo&MG))I+`IZ+N8l8?Fxjy}-tctV^sbt!u3tt;elePTSOcxr2|kx7(_`QM}K3;yt+ zF40>~v6eq(J@+43j^Dob^2<|k-beHGoknd(-$m5=`fj4~kl(KN#uYDS8Gl6^m$UPw z)=NXJ*WSjJZLHA8qSld@DReo(p`<0jN^ea|vPs?e0 zGQYKgRmVj;ddDFZYdMuu2CUVs-&=pMmbNyts(!Q`9iLRJ?I@OtV{I(SNpE@sYe{R9 zM@BP0nm*u3?(4e}`u>9#x5LIZzGyvYrJc20)?$3B@}a&wX%|oG&6E1^q+UD=S`)1y zE9LU$(+@n4BJVe|%Fp<$=ChyA8`f=)%$90QHuj&5`t)Rfp6t(){dux|8B0CHwzpE} zUfcmGPpsxs9?yBmeq)dDp&YT4!&5QSv)AXtcCynCvQszNng0J?vhg9L-)VXdme0Zd za{K+RDnlz3E-7HE}ne5qw5k$^BeA`Ap@r z%c}W`IX-XwsM!AO{+K*zX`Kl+yl6>^0 z4}PTnt!b4%P~nl@d@ZN>|65-5saQ5c)!PuO;usrC#oDjt%jS0eP^)51SNy;E+K*zX z`K4_vFA{5icdd$5Z;H{;@en%NuT-q|Rjl<|T8IB9Ryh^R*4B~#iB&GesDJy~s~`HS z*UnmA<9llvT0TSB#F_nsSO3iORLtUzVyT$zc(GK>3@=7+dyG@w_Rt&G3Zcd|sc}u^P%IU*o)=5bW!~}J zwkl?_Q7jc}J;hS7W+=wMUZhNceUJ3UEiE^YST@2!HkK`HJj|+C%PE!@Q1$z#RWYF# zOT}7F^Z&QJ7Ep}(H_pBCoP4CS3fZ2c`j(1W+>51Rw&TT8F$;LHR9wi$==CG1e)PXs zR$|B9vN`)rKf z{X$;r<9tt&S(+WBjGl`5Z!eaLYugyT`xmW0mygz`?|AF6FHglIr-_-J{l4YFlv3q98bksPq9?2^%ZOVC498L)cO@s z>sPWW)_RJiVy&-O>mT5w^`+LYiCVvwRk7AnjJ}n8w7k^v4N=QCvMSc{inaVr1Ua0JZ)=t75IESSr@~inaa@J}mF$r&J!veOA@0VjaIc_Q;_AyB^zNo1U(fg}m5r zjj}Q}d(%0`cxJI?wPv%%TC-boSaVu)Sre>@){wQ3HOX4oTEtq^TFhG9TEbe=TFT0` zf>+)$)?{l>Yr3_UwYRm8wXe0GwZB#Ep!!og$fvEk{!l#FI>f5$L`@&|NUz;gr)ody zIyn44(^<~9`9Cr39Nc5$xv2G|+DNJ`CF_|DsO3jLioJZ$_O|{f*8C$j);Oj0HGce0 zmDA>pr}9oQ>v?&l{VTt;|KohLo?^{cESK=na#G7lmJ9y#AGKY@TK+H}EibkF2|n8H zK|bmqlK$b%*YcV#*YeSNQtL^rx0(;jd-b9HP9mHS!M|+061D!u|H$%* zuM#tMCC;d9Zkot*?wHC4#wsN29&97rs*|dDaN1AFjPPaC*)9reu zx}Dy~+SjV6))>Hk+O;**fV*Yr;Q~9Xa z)>mk!jdxk!w(7jfawV=mGTg+NFu4-uI6YffTUpy!+gUqUJ6XA3@z(2R?O~<D5{=8T!9%Eyvc)X3JV(QUbUMj9{FQCz**poPl{^Ttu_u6`^1zqjgmwEf#wm4i0(%1awXX@64N zIbfXJOZdFYXPK3MGg5J$6h1}yq&_k)|8`>D>U<>sj^X3`_^_PkcI*3m?_n<={+-Bt z%$Ehq@d+E}EbE-@%crBY2M*;UhgpYPM_5N9+ws<8U!L!w*4uAYto0SsSM=}5ueHkWduFq)q>Nx>LX#%YCFOnL9#HLH2j*-f0yL^~%j z7HMN&c2n4)4SA-X)6uyikIC-p+9I#X={|{%o7`>@j5B_>JQgw~+{&0_T$jG?D~$cH z2=nRdJhOVj)w#Kt$>wUzE6w&^#4;?m7{mOm5qZu%cOG{YRy3vD9a!7MyVtRvslgw8 z=oz--tK>bCj`p#?X#VX$8R}$km;5{Vk-?urM$Cl3A7(@FXLBg9&KwVXXf6cKnQPAH=4N2Mxg9uY{tTQq z51ea`8`$pn0y~_?0*^a+1Noe$ftF6QKr3fe;F_~KaNXG!xb18Y{OFq-eAl-i_=#^( z@VIYD@TzZR@SbmN@V0MbFw?gqINY~8IMVk{aI|kef_Z{@gHHyZ3Kj^)1rvgy zU}CUPuvoA}uz0X!FdR$`rUcW16@!(7m4a1*HG{Q-wSskm4TFt?je<>rErYFtt%7ZW zoq}D0J%hc1>A~K?0l}w(1A~Kt2ZASq{{*j7p9lFf$7t&Gm}%hrNxhylO#)%l)Tv~e z1*%iWb*SU>re&b5Y3;N%ZJf^3_f_h98h6guO=o8Ub$-M2c4DaaA54GeE_MI285Bq{ zgPqEJg}DapP?vW2gRdjDGb5dLW)#o(#_&bxae?XFg+DYCorz`xzjbsd@TNKJWSS$+ z19LQxg*N)YoDP(soz9qxfu`m%{qdUf8SS;!eB<0V-#QP?cY&<5-2wA!Aer_%YwiY` znS0K^wBu#kaVzb(jdpy3cFa#Zwx%81I0FLXoq>S~wC7dY^K;tsd)o5{-(25J-vZzB zzD2&-z9qgFd@Fq~`quhh_HFdN;@jcd?Az_z;(N!p)wj>L&3C}}sqe7wr0#F ziZ=a%Ha$d}W}!`w)20PYLnn!LJ!Kj@WogR`v|(4;@N?6_8ErZ_V@>D4tF+-w+Au3^ zc$+qiHv^o)wBs-4X{Q`*_a|-EjW)Z_Pil-Y6P$5oVqk7yRbX>qbzn0xpF;oNN58*9 zpZ|gWzJq>#mOg%iK7G?)$o~s{`j)?r|JOkIK*d0XK&3$EK-WN*KsU@UM{~-G=z`k?(!~V03E1&tx`wvl$N|d8J?X`#YddJk_{8c;Pk|Wtn-9R?V@`R}$ z2vD8`(=ZUCOkw(dP18J3*R*iU(D&P$)`5zIFw2Y& z%%R<1VH}v`bPn`!x&-<K?=8P3BoTmd5ok4+T z=D7F^ZUP`e!uny{NGZ?zxj*$|MZvi-}9ID z|3rPCr@mWJ-`D*W{9jV%-}tNhzoXvo_#61|`kVMO{LTD7``i0F_%Hjf`mgvu_kZud z?f=35qp1~mgZ}caX%zUxvFYw||-Rz#96=duCwZm>Cv0ZN>z?qn`eze{7(C z9HM_*pnq(ne|$v$xJdulN&nbI|M-Ib@g@D^C;G?F)Z1b5YbbT|4f!;TdRWYMmXLQX znLeC6YsK^t9MkWV_Yd;(B)O5@)OB)_8&8oJ-Hu=e*F6eV^l;Kt4F+ zgVUFCTp$mgr7vEg?_G7?;olRP=g`Mp`nc;ijod8cWOmcq&28GbkCS`!Z#T*ebhDCQ zIm}2mj~V0U^N;qA^^ft7V?Fws8_jyzST85*J;r)ZupWKQjbXi5*2~3ud08(%eJl&- z^d~u|7o)FLT(tJw~hK(O&x3}Csxr%{q)c5 zW|J>> z8S`Hww{DVKx5%yE$gMlk=wdYnNe;5Gun+ab$D-GH;|h)C`KNI zIF4fEP1o4OlG-bImb1<12x>hVYFaTNQ0jQV?$I;%>3HKvY+Q|7VkCogqT zfa9;mu{Ys(M{peDC|?QoTatC2qP|P9>}ZyYqrOTre++FB%{Ft=4rSS9WwzOn`ltMX zq15$!>N$pO=VBWRso!#JzY5!LM7>h(z%c4?fvFlAYN~~Ln(CopiLWLuO`MmwEOCC~ z*2FW3Clk*lo=&`wcq-%z`9oPkSwpd*?4d%Tq)_2dkxd+d?}-w?n%^KZf28{S?|A`k8Cy zgXHfXa`y)6k@j{S~noM^6bVz|c1$u&+cu4#&JO;eO>nlfC|By&wu zo@<&4T+>wNnx+QVFzva9>A*Ei53XVQaShX-YnY*2!wlmZ<}}wZU(%oU)0aM_?>z8r z4!-T%8vK|t?4k@GvF|^8r-Fa7->K|3!d3G$u9~NFrS%+FS~DokOiDA0@;py@W^*xB`2TE3lU+<;#@v70UT4<($h^^*pYsU*k$_K38H3DE&f8&j=7)O!=2^wY`+9 z?PXk{E$0gDb&hHUN41i&ucGX$xw3wPE9*5}jlId$*jkQg9Y?gDW7@zmZRCpkEv~pX zah0~2tF$c~=~j+(TX1-AXK-}zP;gT4_u!r&wHrJd{44l(bkXP#pF+_Mqm!Z=M;D1c z7=0-ET=eQlIS&L^4XHChPmbGlwqghYz`82jcY!f~W`816^5_>%MXzYpD zd9m~P?@zPW&)zWmk?hB_AISb89_7DI;3qli=V+XxL5?QaG{==3S94s;aUHMm`674W z+(qJ|;-ceX;3 z4fhN84-W_r3=azr504Cw3Xcho4UZ2`2tN~^6n;ItBD^mAXLwV1b9hU5Yj|6Ddw559 zXLwim?eOmKp71;2z2SY~cf;?6_lMsPe-J(p{xEznd?@^J_;C10_-Oc(@Uige@R{(r z@cHn?@TKtO@RjiA;cMYv!+(c=3*QUh31@_V4`+rShW}yzBiR3F_CJpOPh|g-S@$gK zUSQqNSobRHUgth`37@5W^gLxbA3aam#C@%vrqlb1PdX*y=e;LaV&}_usD8-CGifH#@{g+|3IGE zxZBwe&rsYQe9?(#39gR!Y1HwKM80d~PC$;=eFpiil^a36Yo)(eaQUtkS9`|2%=V}s z_X?K7t5^X)$4Yn&tKfC4hF`Ir-gtxcd3NL8M2^?Jh2!yS<}cvc%tV&wd6e%ttc83x z%C{5wZj^5?^4%!!{lG;$LdHP| zEVf^VrsTJ5xdP_*k&$OQ(fsx*SHdQGJn}3jr`nBYIXQPB&v0_;xOnE3Q^(bYzjNce zJ-KM_Tw1RkPQVU4yLrGP7oJbXm*V(1j`-3@dE?7qZ44vNmf};8{l}*|#(5djh$%;W zS>)MLd^w~%@#V2GRzS)XUlE&PC8T`um62yn@l}y>##f_0Ls*@-CDuTmJ;m3=wx~Ni z${SxBDQ|ooOvk#cr{(J*#~EMW;h`BeV16%bh<&gT_Ql35*9rNqtJ?*eVpnX&{QlSi z2VqMbf~`1CmA^GH{U*K*%d0$X+0PT$4)bGs<`2gXI2t?R80^G+`bB(a*3UTNoljrfT6RUn#5dVfNiB&JFi2LDc;vV=0rsEn^eZGnG&-k^d z@~uPqXZ(7OkNz0Hf%tXYh^kMrKjen2hnuz;}U&Z%vE`EUX z@BsBi{|zi9naG#m`$)b74`4U^5UG#gKS+HfxNI+h|NE?dYm_zG8e`=EQ@2X9FE2EI1U*{6UZx5 z5hozyX~IM-iO)DD^cYSeChrm^V=;Udi{lg=ic?Yhi(m>)!&ID(Y4{v!|1(hgpNZQ4 zEY$v=N9}($YX2{w_CLq&|3zZ$|0UG^UqN# z3vm!GLe=+TB(D>eppIiH4oCWz&KC*lU#fqdzo+SxNV`0T`eU?NsJy9z`U5QTH8G0m zF~ zNcj`(l36KsDz79ehkPhl&J!`4{P8gETt`GrhRq@0T}M7#`@ubr`&wG`GSE{!@) z-g7q;CIWHuZMe0AXoa4QhODvCPi7Vhatcd5a63da7iB;G?<4a;y`YY$v z#A>(;tK(}}16N^9@*oe^V?EAeiS?25LSh3{c^ca7HA4DRVoSEG^;+Q?Y)$`Ihi!=8 z!nU{t+u?R>kJ@hs+=Cr)A9lk1*clIC7d(Vr@i2D7Pp~_lz#i1&DeOr()Nbj-XRsIZ zb^N`FFJd3&x5vK3pJ6}dU%~#A^BN9d`d2uRVs zD)z!O?2U{UNvbEti=@6-9{VBVMN)sPhy$<^4rIHrNImh~$|McKTsRoXo1`I_7l&d# z9ESOEI2J(aiRWACscEk1{|f6@%>iZih%&O+)t>3Pb@ zc#$+4$@`=ikakI$gN$cMFXC`~2}k0~$at3Y3ex^buOjW6G?#L6K1rH~lkqj2it}+g zF2I?%5NG2ed=VET<6P1boQF$s0WQPExEvW*l3vFZxB^$>N_-Pn;d)$+^vk3-a0{-% z?f53{!nL>u*Wo@~kMzr=4M@LC+K7knEu>#2Z9@8G(q^PzCT&6bWztq;JWASz7jQe$ z|B`m#Rosc!aTn76lHSH!xEsGku1`!YVHZ5Q0>X}iN?hwU7ys){n!BC zN3}E8CmI)$4q#*a5S!pZRQn&oX7~{{$B(fE9!BNG5p0D=u{C~zZSWW>UyfrtJb~@; zQ|y2zQF(L39}<;W_M$=TZ4}0sG=b?1z`IKYoVFyUWNplXL}@e^+r3 zevZn+Yd8e2qw?_!DM?0zd_~ew>S>JL*?!FI01h^ zN7bCXJ9naFOp+$6=uPAF)P2VrR6#Qx1v6iIsdn! zo{~BLx0;5W|646Y&i}18VJ;;9k~#nL8;T~G^FPgPk~#nDx8jpI|F_P-$9Z6z54jF# z^AtXT6)`{7!Y7e&Be?+5PRU#sw9)>!E@-m{3nKj_IUdRL5PeHCXy8nq> zZ}8i8CYkGv9kuVkeO4JUlCM& zOyf71)K8}4ZF~+@&KdXsXY$)f+RiMD!{<@;G#i!YFQD>w4vxnc`RyRa`{b8U?e{Xj z=~EM5!KU~sG9D+-(?LWjGv{<1T!i-{{$dD<1t@Hpwgbt)6AXt8hE6#@+Y^ztJ-n*YKM>jqpu8f@|?p zT!&|IJ-@NTIGwx!r{YF_Tc;qtg?n%ls=sW;?{N#ip`-TMirsM=s$XnJjaxfV?Yt8i z&y#nd>iungJ4fxe8#mw{R35#9U*cYVGiM?0!zK7GZpQccw>Y%?e!PtDqn7`G-_j|J z2T=X~LrlekSQQUpXZ(oY*irxfnBT$~gNIRhas=1nQG5?SL5(lRkn>9Naa8@BK;`SF z_z+KWzR8KFFfX1)jSpwA3ZBKrcn(|Rd3*^k;Bvf(t90t4GFUHMo_~YtF|5eAUJEN> zU961ta2e;rySNM@1=d;Z`IS-=pTb%gjkPfb>tGhFi-}kdvtoVB zh7B+l8)9~BggLM=Qm-jZka07mDdxsz$N{D_N9rl11*T(5B=1sMA^k3;HPT;F+F)O7 zi~X=2_Q&=(06QRgn$i)U#!fg0JL6#Nf4zyja0K?mk(iF7uop7U zrSwMfETs?j#J>1A_QQPGACKYy`~(N$r}#9U!a;Z*2jgcr1h3#wq+g~C!|OO4=?5tz zFdj!@07oHtl`nS~DNe&XI30h-=dc6Lz>YW*JK-#R4xh&vI2)hG7jQ1l!Fl*1&c~N<1-^`{aUR!c z%J`&laJMXE7?@mT;caaV#ZPIhJ7oT#o8DuXA0bdRf8s zR2Ww>{axMaave&)PvxeV?qpJ3r2nM)ki1XzBl}O~d6JtQqmlegjlst-3)1eXS@B8C zhH)5+v{!0&q@Sebz$DDc54F)wskxB$NzIM4Ln@usO~c2q0_H`=o7Bg#2J#n@`^_hKb{4=dvbSOpJaRs0yM;ZdxP$FT;U#F}^p zYvFmUjhC2?wEl**K+Tp#wX>g#wQXtRpXQL zR^w9?YJ5`uYJ7@8jZeyBjZd+t@k#lt@hK;2e9DCypK_zdCw7pk@kx2k^BPzEgy%Kx zzsU0%AN?wo=QVT{lgjfNpZ3f18lUzz8nr*}_k7wP@7a7gkoRRi?T6=DK5d`(X1=`0 zb1k3x(KDDICq)?_{Wq28H9qyDXPM4;m&&-L@gbFQN%wcDj7u6HQW=*tKBO`(HCNs- zF6rN7N@ZMXuJSQ1={_%&ajAJXWL#=f3mKPmKak3}r0e!n#wA_Hr!p?-{vefcN!L-S zuROXBOMUgx{Y2_q#|$XJbjGXx+CSr!{wPL)MFRn($EBzZZsf<^x z-$ur(30&`_GG2|TfQ(nVZ%bvodUYT&UbWKp8L!%?pE6zz{vKCxJ*9eH&A&yU`g?=r zmf#xhOM2s*9A7qEi=}ZLs{Yq=-}WtTV0+51jaUWW;=WM*a})N%&D;mv!YyoH?Youo zAH{7f-xjx1PR>)QJ7^D$XFIV7?n2cU@6CNG_iikOd$0_?gJIl@jMJ(6Q1$#Sa^6XO z4=dt+tc<)T@>RtTQ1yBMYa;K9e6{f)*2P0uA3wr|$a{2OW8^)$uPO2#-ABTt9>tdU z3AV;#KI7Bz9LElL0y`t`(S2&Clf)V~PZ9UR)5Lx74A*mS;8}bV&*3^ej~nm;zJ(WY z6JEkC_!(})%eVut;4Zw18qYq*ckmkS!|SMV?F)P#zr+Lh6&}PJ_%YtZBX|ox!LRW+ zeuF3QTl^Hi!;|UHl&Z!XNN&yp8wpN6f&VFcW{q`}iw9z~As8-obzHcjS85*I$pM84u_mX$}rS z7e^q2kZ%n7iN_=7Yaiow8s}@@6pUd!nTGsOs&5u@zV^*Q&ey(|k@K~0F7mv}Hy?B0 zV$8|(<(LasVs6So`=>G3`e^?&&ey*6$obkwd#63leA+oJAN!-7)1HVnzCDBfF;@PzsPx;Dl}=O`9?(y zmWeX{SmeCz&y8W%`14{4=EGFx=f^abFNkG{6Oi+^zc7|3E`}9YzBF>)_9r9fZGS3q z-q!DBrE%WY?_8yE-u5#trB!2l^!qf<+y2^EgZ1kn=WTxjtpQmx&_BX>iEKmPV zt4mD3POFCL z8FJqDzmA;u{mL`W`~KC)dEdVVIq&<|Voy}Q@jlDH5qq&+sNkq-uK@`&ij7lDd&AZ<3iea<||((pz@XTzF+yudEZaJPn(4F_q56QCvx8R|AoA# z@!!L##LCwQ{)5w86J>BZy2#%TMJa!0U^LFeEI13Z;qyKdl^tjMO;j%AJx!GInfEkN z%4gowMCC``(?k_O-qS?IA@6CT;_+1s;#{_qh`gtXN0yPSOOQYobr7kCgUPZ z!Nr({OHg^g6f58|tc1%^`Tsgr!xdNqc~28n3s+%XT+MX#gExp9;Tmj;Z(<8v%ly{3 zj#&L+J$Aqi9Jl(zM&@_Nx0v1&HzC&#X`8VhZoz@LHOfQ{#%<9iY6Na)y>ZC-KWYMU z{*QVFIsZpZM$Z3HQ*bv%kn?}kbbJSAAm{(6S;+Z6YBqBIkD7y=|D)7jIR8hzf}H=O z<|60+sMnD5f7Al}5Emim|0wmJLmbaCJ( z+hI$`MAIMdx3acI`r-XH*0$Dm*7o=;^E+5OT02=g<5cE%u~L6tO#OLMf6)_}PyKoJ zw5D5oA^rY-Z)+cGUu!>Pytv=rI>1Uhc+y$NXVd+TDvs zSV!V>%pYYPZ5?ABi_@7u&N|*Y!8#FVGXELtB;_15$iNmK25hihc6P( zu+GGniDy}#$LEP>Te%O7UQEn=s3-TK(TsohxexW^J~W!~>;5a&SFLlc^KcvUU$f4) zF0d}dUCdu(U2I)qU5Y!HzsyQM^J4m$=L%%}yT8)93g07MZGFSK#`-3H$o#d|b$F0? zy>)|iqm}#6XvWj~+=qH{AL_|{s3-TK(dU@YeW>SlWc<9p!+IXK5MQufv|h4)hDVuy z*?I+!5MQ-^j-L=;vtF;o-vkqXL3{$gw0?z*@Aq$5Z{jiHTh^~p{rns2x7P2h-=oHl zAFQ|O&mD+=#7_7VcEO*q8~%bl@K;R7->^5{!M^xA_QyYPApVJrbNBD!5c~@nAMgK- z8ZYkQD9peyn29>h`>6i;fO36`53T=L|9#{GjhBow4>Vp*Mva&B`v*RZpdaaH52A1e zYP_W1Jcz;Bm<8uxR;0f?$cC?AERydJvg2!*13BM6$cc+E7cRlvxD4~)>-ZS1M2*L* zQRDF%)OfrWH6E`=jmI1DN!)}5kbHUY6w+@V#3A|rpdivu9>n8r4B$H$#C@26=!201F}c{U8ZH!oo*c9_(Gt7t0 zF+XzNiz$FDF%DZ{JhsLlw!uVfi-oWq7RL5i6gyyX?1&|?6PCu#n2cR81-oJzcEfVm z-DhGdU=OT}J+T_5V@>RZb+9+q$3Cpr2>W6a?1#;;KeoUD*a`xDsE*)i@W|;5=N5ui<)}j~j6TZo-AQ1sCBqT#P$#3GTwBxEq(@JGdP8 z;p_MwuE6(kB_6<4co0|PNB9OF#x-~p-^63M7EjctN9P{A` z%#WX90X&Iucnah3GzReuCgNEvgy*m@p2wni0gK~BEQyz}G=7H3co|dh3Z~&zEQgOf5UXVgT0aauPl9$`>!kmko&JJgYYi%hvHv29RJ3Vcn?Qo z29Cu{9FO;r>-z@}a1uU5?iU{XgH!QeoMsIFoRP`Gb@oFCxn6$gBG<7GefR?Uk?Y=v zQONb~!)SaJV{jg3!TFdK7h*Q#y7yr$F2(G)9CP3b%!#Wo7rueHk^6*)d2k&*h8r+1 zzJ-tDX3U3M@d@0H`Ee&ciEm>8+=EZyUW`MoZyy%K{TPp2k3I|_*Rc&AzL@Hi$R*G~@%<0&kHTo3+VclQ}3Me*o;d=^CAMG+81F##$`$w|b(l0=NvJkq9P_hM8u4WIWjZmoCCUx@sGRne80U_%fR(M=iGDdtNWt-RCiZb zch|4FXBlT_%Nip;zm_#Y{@qvB6f@Wi-@|?I1Kbz+cVJm_`~+LzXV?#ct;pp4hsLhjcxUT+IKAg{ND+^1!{-|61~DC7OkLhjEp-tR2z ziW89gvW)jT3wt5&cNTI#mhpaPVSnWP&O+|PGT!ej9E!Z(S;+lY#`~RxqmcJI3%T#g zc)zpoXypCQLhiS+X*eFI<0PDc$Ky<#g0pZM&c>O@`<;bzkoP+aPsVw88lH@2;wg9z zo{Hz=X?PKyj+f#YcmEATS(KDZp8#H-Nxe>JYgYtVUrExwG`q4WKEd=qa#=lOh0_J zxHT@u>d5<>MKzH3H;ZcFgIEV2!n*h{*25*Z8!pBAxD5BiN3ant$ENrw?u#q1B|e62 za3!|K$8kSgg`M#UJP4n}Vtfj_7@`{AkBiGJOG zf8_a7-WhA+0Z88E2VxN(gv^KXgOT}B-USP>7`MT$xGi===1X~Z+zt=nIHR!_@_Z;i zl=CLf^4`Hd!M?$MwDbJ?2L}WPqT@G+eyNrZ=07cPC^~M#&~Y4&j@t-qfQJ=SjL%4x z9fwiqIE+Te;c#>uj-X%1;Yf5Gj$%FYxBO^yyvJZO9E z;BCR%gA35y?g-u)yeqg6omY1U?+M-;T!cKg%68@U`IU=zaJ`@Xg>`!MCxP?e7HN4XzEQu`Am%!EEro z;QQE(?H>d`41N^+7} z4E_}S8GEsPUGNt?l;vN8CCKYld1-Kc@V6lU4k>z;?fg5WXf^WhkfIlme}@#ULH-?5 z^fL1AkfK+Se}@#kj{G~M=*?6rSHSay`#e_#xzBS|k^4Kh1#(~Ksv-AtZcF5T&25F; zueq&}`!rXG+>f~;mnMb)@kmq}DSL8XH+YNcX=5|M( zx4Au#=Y6g|@?6a|z+!BO%%j|%$b8A|h0KfG-bntrMo7-N#z>yICP;3%rbu47W=KxC zeXtMii+!;<_QMv~A6w!8Y=r}{H4efyI2haF5NwA-u{{pM4#>|XxsEsj_rt@m6OP3F zaTIpO(RcvzdXhU3kHCZQNIV#Mz07sNqp=vrU{@TA-S8Ofj>lpT9EUw|JRX7*uoq6m zLva%J#^bOLPR71?JodvAus@!N18@os#Hlz4Pr|`C4Ts=#9Evk=7|z7uI15MMY&;D4 zxhgjj=i(@whoh0#>D=LX3Lb%{;*oe79#xQPdM+M~=iwM$zpLO_+y;-qZSh!Sm)tnq zfa9?gC*T5{hS12_jC!nwEv=ixFu8JFWJxB^ebm3SJi!qbu0`P>=E>wNA^d=}5b=kaWO z5zoPw@LYTa&%;;oe0&Wrz}N9Yd;>4SH}PV82QR@iUW)JGW%wapj-TKa_$gkApW#*b zIbMxl;5GOaUW?!0b@&}#kKf}B_yf+zAMr-~32(xm@n-x5Z^89=E6&H;@J777nBOtL z1?cnV4s3&WVq3fmef})O_INk?{J94^;=SneXAyS7`_SjlV(g6fqtBlQ(C5#C==0|x z^!f8J`utgf#kdr^;xg=pk6?FPjy>>E?1?MT=g(u<3s<7gpU1H`uEIX}1op)zu^&E# zK7XFW0k|4{{ydL9e_p`B_#zI$HR$u_6&!}IqR*e#a0I@NK7Zc8k@zP1{CNjQ+n^7MVfw!u>iYb73_vp zu{&;oJ+K<~#4VBUA78r__QI|4P%OmWScH71*4paGcWSNO2K(W**dJ@)0Nf4-Voe-` zwQw-jM!rXT?e;hn>mc8wy>R}LG!s5&F4BapX$Nw{Q{69zM`4?yoU!pmDh34=z zn!`6}4&S0Ve23=nJ(|N0XbwN3IsAm?@H3jjI&_}@g68onI?qecTuRYg)}y)nhUW4+ zn#&((E`OrA{Dsc*ztMdDgXXgV&F3F9pE5L`ax|YDl21B?$sxTRl0&*Cl0&){l0&*Sl0$lXB!_ez zB!~2l$oQx0BIBRl2^s(N&dB(u>mlQx-US)|^sdPGr*}ujJ-r7q?&*Fj8yWX>BV^pujgfIrH$lcd-4q%3bTee!)B7Ofp57N3_jGe)+|w

&~YA!j`Lu2 zoQI&}JQN-0VdyvyN5^>tI?jio<2(`_=TYc5k4DG&aCDrHK*#w=bexYu$N6Y$N5C$`IDZ4j`vh_ zyiY>Mdm1|4(~;*-dImb~GtqIMg^v4dblm5l<31Oi_w&&4KN+3(r=auxROI=SJ`K&~ zbTpSU&|J<$b2$sm$D^U!?GNAtM=&F4ZipNr6ZE=KdY1kLACG@r}R zd@e`xxdP4SN;IFV(0r~&^SK7i=UOzM>(G3zNAtM>&1XKE&y8q4H=+65jOKF-n$N9h zKDVLy+>Yk60L|wPG@m=seC|T?S%~IyH=55qXg>F%`7A>7xev`}F`Cc)Xg&|1`8%vdS&8QJIGWEYG@mEXe4a$}c?!+v zX*8c_(0ran^LY-G@rN8eBMFxc^A!REt*dn%_oEAlST7+56$O&G@lR9d_F|;`3TMDV>F*n(0o2c z^Z5+T=W{flFVK9xMDzIy&F5=0pKs87zD4u-4$bF#G@l>Pe11gp`3cSEXEdL6Xg z(;dyH2bxb$G@nDze0rhz9E#@C8_lN=nonOepMGdQ{n2~|p!p0$^BIKZGZ@Wh2%67O zG@oH;KEu&`Mxgl|hUPO8&1V#v&uBEC!_j<>K=U~g&F3gIpQF)y#-RC(Me{iZ&F5G& zpK)kD~oWr=j_rj^=X)n$MYNK4+o%oQ>vl4w}!o zXg=qm`J9jDa{-#qg=jt(q4`{l=5q;}&!uQSm!bJwj^=X(n$MMJK3AdnT#e>)4Vurj zXg=4W`CO0Ya|4>sd^DdM(R^+~^SK$#=N2@dThV-OL-V;E&1V6c&mCw!ccS^+RgfxZ zjSKm`sE&9q-}ibYF2bwuKD-(i<286cUW*Ulb@(7&j}PGu_%P1LC3qt)MZV`hvkdvJ z|I8zJ3ogf7@lm`DSK#gV7%sq-#eA1LKF;!;xC-yWCvYJ?iFe~ucn>~}_u@0S2%qKq zYPZ7YSYCpwaVb8J%kTw!1YgAExCS4^mv9BXjE~_fxDsE*$MH4fZwzE!NB$N;<_&xj z-$ecvLFO%d8sEle@Ev>>-^J%}Ew08iK93oE0kilbzK3h@eS8T&z?bnuuBQrqRGg~% zJARCB<0tqleu`=Q3`_8H%-|OV6?uM%=J^$x=htYS-=KMZi{|+qn&@{)p!J z6PoAGXrAlPJbyv+{1wf!1kJM)&2xQmMV`O0Y@WZPdH#Xs`6rs^Uud3xqj~-Z&2vM@ z^BtYzLOfGusi#GrJ#>XSNfX=l*D(ozXlG zK=V8h&GR5M&x6rCyP$a%qj`2k^X!J^*&WTZ2byP3G|xlOJbR&e9*XAK8_ly1nrB}$ z&wgm0{n0!JgggfpSL8Ve&2uoC=MXf{p=h4N&^(71ROC4V&GRrc&yi@JqtHA@qj?^V z=6M8~=aFchN1=HhjpjK9&2uc8=P_uW$D(M}eQ&~38lh8b;p?OY6^PGX^ITOuu7Mka5G|xF`o^#PW=b?F?jOKX? zn&+u#o~NOCo{r{u2Ab!YXr5=Gd7h2tc@CQAxoDo}p?RK<=6L~{=Y=89i;64qyco^% z5;V_C(L66h^Sm6*^NNCsJg-Fayb8_pYBbMl&^)h2^Slnt^LjMT8_+!Gqj}zl=6MsE z=gnxIx1f36ispG6n&<6ko(qaA^1Op(^Sl$y^DZ>cg=n64qj}zg=6Nrg=c173eJq>j zVl>bD(L5hO^L!A^^C2|PhtWKjpm{Du^IV4J`3Rclax~9J(L7h6c|L~bxf0FuaWv0W zXr51?c|M8e`4pPx(`cU0pm{!v=J_0&=jxE>^Tic;zJTWWBAVwKG|!jNJYPohe5D{& z^&@;0KgKusxv3StiLLQ1Y=duOTYLxG;k(!#*J1}uV@J&3ewf8h_#WEd`)Ge3p#6P_ z_V*Fm-^XZwpP>DHiuU&z+TZ7Be_x>eeTnw>724m|Xn)_J{e6q}_Z`~b_h^4Vp#A-b z_V*Lo-_K}&>(KswLHqj^?XLvwuN3WXJ=))IXn((>{r!RV_b1xlUub`Sqy7B{?Qa9x z-#=)7WoUopXn#4RzjY}-Z`K$KunAVdeX%OG#A?_Jw?vM!ZYyk#TO<9gD@6WXv91Wa zVRh_|+h7me7JFh1sq%9?vJ}7KmV`W4Y_aD?T*~n>-IqYJ+Q6;dc6(N>)i_v!N%zIHASzh z8G2p&px3o8dR@)Y>uP~sS4;G|TA|m~8ojPI=ykP2uctkFJsr^N>4;uWC-gcxqvzih zJ+DL1^EnhfpFZe$^h1x|A3gp6^!S6&;|@lTI}|r(W(E<>;Da`d{cK(Fgc^t!G>uj^`b9$$lA-?ixVU58%Z_2~88 zfX?Ij=yl$RUgu5dbuK`!=MMCG?nJL=A$lEmqt|f{dL8$o*Rcq_j>YJ8+>c(z1L$=; zh+fA-=yg1dUdIyjI+mi>u?)SAN6_n7j$X&3=yj|>uj4WFI##0B@i=-NtB~s`;rHK) z-bQ}^t>|5>f@!RZS=<8O$7=W?^80T^yk3;>`)@^`BESDu^f~hTZ$)1szpPU9HP+E7A4#%E2 z0(qYKzEDXo9Em*Fd|#-fH`jFl_Q8X&FLuFx==JqyT)eIUEPEZtq31stJ@4bu^SuH& z&r;@FblLIh{3vZukUEv?Ds9O3Snh#)@_mtua4-H|0rR$WZ@v$+6E-SHO<|su zHs-vq#U=%*V;I-crkqC#d41x0JPS&hFISLbDf5Nzt1KvO&idxqBKh9Rg3^}kw-w9G z8@@Napp2-G@C(o}K$+@&Ej>c|yBzDI!*aMHno;U#y!Q-$Oo`3@xzw2=j=l@HpV8gG> zlU7)Qt+5ojUpA~q&S%4K$n$B#@7NyyK%PSz{=|;>7jpk>_#63LXR3ZGRdws&7C|;8 z>l-7V9j(vjH0g6=ozIbStc~mWd?xpf???Jxr1woK#bcTLp`PO@dW})q_2P zTywQ?l(YC7j$HSad^X$PTS#0J>|J3EK5trsF{r`kgKI3MET-_;+r$N_)OM`f?o7(E z3R7eFJC#p`<7~f~UBhynAmi%q5o})SbG-jj_}p&&%}S~P`&#OgYc=GvxRoVtW8LO` z@$B;bU*D5Xet&`YqBquE|1hN+#q}*IQ}XIFsk^-=#jM;mgu*!S4D|V1k*#&t*{+zv z=W8qH7oRzy!SQGK=*Vw?{Xx$9?C} z#^Q3+I%68gu;D)ZYRu+^IoNQs;x)%ClDf-ek<>#L@j2nRCF?r`L%uwFD%P8^`uR@Uu5uJ;(R?r~z>W5v41i}iRN`OEpokJpvIJ^wu1o_{Vb=bw+u z`RC+v{&~5ae{L@4pI;mokMB002d-1kLp{EFT=jVBan%0Re${>)>sXKdYV6y3?B9Ak zhV^(H>+x9DsBkXN6WSD%zu z_q8JSGdZvB>q}gJLSFsEyt>b@*k)>8{iMA5w7mNCy!wp1`pmrgti1Z{y!xEH`rN#_ zuW6ja=J%$*2bL6m@50~x`Y)wEQO{?+-blHCauH=2utozy;*B9p1tLN3X$*b4Mt8bTAubEf(gkqny^XgP<<;@w-b(3Yzcavq#d6Q+% zdy{3(eUoL*f0JddVUuO9W0PgBWs_yDXOm^FX_IBHYm;TJZIfmD&zpCCx4wUW#P8Pk z@08S9oHrJ6n|Xn(N}jm7?~)1Rm4 z9E|r8Zy8i9hkM6+J=q@a760x-vh4hGzi?0ZcOR1Fa1Z!*AChGbkXSny+pS>PV^5-l zd7sSp87$kkbJ}zCTGeY+uT{NPufuCquT>ofwT;H&*jcwfwLi5#wLja~AAKeBnZ6R~ zE0K1Iv`eI~MEXjkuSEJv^qlCgvL5?&eeAmz^$8U2Z$5jmu|Ax7U&>GlKi~HMiYoWB zzdzaPZOT8Cm%{Ron5Ho2lkMyAgHX4_Pf)y0kL5bG z@7F0yLfx@hMzQ@Xp>CUxDa$GDANzCJ{>{QRp7#ohW953!WmTx#Ce}T#I0hb%=Tfqt znR(oJ-X8yrP~x?|$+GA0JSEPl{C?v)x4%X4yndqC?^=p;%VWmzbX~k2>t6f26x+x7 z8RvuN=ej#7_G=#*is$Ba-$RM}xsPM;9>xBjrnryWo##&mU&VJQwsV{3?RNL|JgvLm zW0dzp-M-Ajaj>1|@e#%St@B!$thbHZJ#W{=;`9*Q{pcdgp_4Rqey$Ee-WwF!bkha4H%2Y)$0(m)JJgF4#WUA=oj{7=cb;Q+I|GZ_L#JH+4gFC zwS8FTGa$)wqSw%ZVtaLdokVdQWAPfh@o!$o&HkJxEGPGe`?%fx9G|(Ai4^;Fo;Y5U zD4t)RyyE%T*9?mD*5j+~)O*k4Sf4|2yZ5HrU);xb);*5Lb38mJ+o|g<{epwh@iw0! zlvxzV#l9KO7p&u64G>>#01h>*H~)$KzU$$F&}hYds#m7?arC$6;`8OZ5BoO**%eYRqZrNTu+|W z-lBZO|0`%jX}p=~upDI`CGDbX!gBP*upE6UEJrz3vj65D8rE;_zF~dyV2{n(^=7#V z#dc~tWqv2x-evn$+w&Tev{&1!?bY^bd+klxhhqQgc6GbD-EH=xZjW_!*}mPTu2a{O zd$L|#uWnPfGq;lU>N4{yX|J|d+pF7|bIE#jnR%DUoJ;mo*Y6*e)n)GIWV_n0+ONj# zUa!kuFVC~2ow{A!u5Rb~m&_yey48Nwezkkh{ato{b$_?HpSqvApW0q+ueNtx{@A;0 zdyU2R)@|RDVtciJwY}O#ZLhXJgkpPjySiQ7ZgIQXpW2_sW7^(j3(vVNr&74*6Wzvg zsy_Cm3<~vrdG-Ez^#OVHfq8ZIOZsbs_N_c~5y(aaT>iKwI*j{a~wpZJ$?bY_p zD7IJItL@eHYJ2TX@jkJ=+Fot1wpZJ$?VV>X=g&8n|80Ib2b?$d_iyva_5U_s8i#${ z?m2jV>iKD0Z{6bY)$_A%e%9Sj-A~<5^V_;?X+&|JsPjafC+dFcoN}CPr?ykusqNHu z%_z20+o|o;c51sg-nO-!x;@s_W%qTPy8J(RKDp2T^f~pv^?Y((cn#`#I}f}Lb-j9i znm=Ex+fHq#wp062$Ip8Hn7JIs$a>GPUF}ERu5r8lSnMbEsc{~;zBk4F)&14|)wYeo zvby|l^TGDb!uFWE+CILnsLT8ulk~4H|J(S)^N-qY^YiM$y8e_w6zk#nl+?rXDS2)3 zzVWrm{e3NRSzY$E$Ypieb97l<_8eVSmmMdU<9IoKF2`|n{9KOX=-hN!-QU+tmo@h9 zzV>gQ>b~l=tM|I+qxPfjuU?n^{a?L4umAryKKXOXITC*calQMgA2xi}Tz*U3UHE_1MPa#k$7!*4@W_t=lg49s7!HT(<69iFNai*X4fkTHPM& zu}$p9^_$n@zOJ{#HrAbI_Gj6=9^0EuJg3d;_U$>l-u7|qH?O-K+gNvA+h@E-;uyL< z)?-$-`?tFN#Pyy-{5jP1@n_NhuI_Q;&!@JDb^D2R+xRm=JfHk}d@bgxrpK|0 zb^DBU`?T)3SvIf7W4S)RZr}Fn`dE+JPpoUKdtB>okLMKIy59cday(XS@3QwM`xl z^=@~aeZ~Eq6M6NN|CZY9T#|L0^_Q&MyidoC{*!H?UfGxD;5ojwvHzrl=tRaek&Kh~(=0*HGLGqqxT+jJet|!CF zI`gZt&Nx@r$)~bT&XslML}lG^kNrFLvF`ZCx?>;fj(e;-=CSU0$2wzOSs#*DADUMm zmRBF1S09mAKP<04GOs?WqVC@<@cmZ*Zb33mj*t7h-D|gBuR}c#x2wf-x46xHxYv@l zQQNw&*J7P9YjrY(@k;*R=Q8B@6PO1c-#VX5-&nt7V}1068|(i6q}ZO%qgU2vWjEFb P`~M?DpW`^URy+JZkaa8G zvJ306E9?y!+e^}_zWN6vuw_OT*<@y zf=9TDN4c8ExQ55MmM6H5C%K-dxPhm+k>Al>70z%ozvmX7<(K?{TX~LO@kegsPu$L* zxr67qlfQ5mf92Qwjl20f_wWMu@=w}5;Uf3*FCO6E{FeXWLH8|HS%Nx?VOLr~4(hTK(W;a=|JejeaK9^zph z;ZYvrah~8wp5keK$20t%XZZuq@kjp5UwA&Nwn2nb+JFj34Udf!iin(|-bMqQr%j|Ip5=F zoWK=)pPzFgSMmdX!4J8blevadxRz77j?=iF)472&xREoti63z@zv4IC!@bL zd60*Am`8Y&$9SA4c#@}hn&0sZzvo&0z;pbOzcT*s|AQC!C(rXD|Kfl69RFc|{>$eX zGKSDFqaTfYkO?+o1~z6!Hen_{#LR5UEPR+**^HO*5oTj^Ud~6Eoh^6;A7c(a&MWx@ zbFvJt;_b}Evb>siFgMHb8s5okS)SMNE?&>Oc>^o(MpooayoY&Mi8u3J-opEMEAMAs zR%Sj{VSc8u0IRYftFaKPvoLG02y3z^Yq1z>vpDOp1naUS>#-E;vossw11DND+zQPfF zl_U8YNAY!z<{KQtH#wGXaU9>~c)r7T`5q_meNN;DoWu_~nNv8G(>R?oIFlc77H4w~ zKjvJ1!g-v}1^ko?xrmFogiE=M%lR2s@N=%@SNwvjxSDIYmg~5l8@Q31xS3n{CAV@L zw{r(~au>hmZhpf(+{=C3&jb9H2YHBxd4xxKjK_I`CwYpe`5n*jd!FSFJjWmT6MyD; z{=#4R8-M2?yud$sk$>@T{)hkYUxrM6zGd=#%?!-QOw7zI%*xA{jh8b!uV4;d$(+23 zxp*~m^BP{u>v%nH;ElYAd3ZB#;jPTee9X@REXYDE%pxqxVl2)QEXh(V&D(f8Td^!# z^A5IQIkx4UY{&9!&%4-xce5iauoEk?Gw)#+R$^D)%Wk}n-FZKsWM%eX6+Xo@_GDG| zVm0<=b@pKm_GL{z&02hhwfQXTupjI4Io4x;*5~tVz!&%cUt~iL;Db!E5eKp{2eAnU z^C1plQx4_CoL(iA@^g$4Co#bfnSqm;kyDt7Q<<65n1$1sl{0u5XEGZ<;^myh?3~Rj zIEOj-F|XuY=Hw^5iu0I@^LaHFFgHKtHC)JRxroEy@hMJXPkzW=oXp;w!akhJ zzMRIVIi1gN2A}0j_TxuoX2CF&*NOc6a17Xxsa#0h^M)j-*E}g za4Em%GM?pf{=m<8jw|>hKj%-paJAPr{FCQ-k-zXS{>s1k8~?*mdAttG>3K7^b2NAG z4esO^?&6#Lnq#?}Z}A(B;~u`vy&TVde24q_E)VcMe#;3w$oF}O6M2{)@CYaIC_m&e zPUdk=;R#OVNlxP_PUmUP;CGzKGyI6(a~98XHh-k#qSIKjF`u$Mc-eU$}t3 z@>BlCh5Vh1_y-sB0+;YlF6Bjj#{X~y|KaESm*E!2)m!{LWd>$sCT3<9X60qf#><(V zS1<>!WKLeiT)djOc@3}Sb-bQ8@J8OmJiM8=@K)w!KIUfu7Gxn7W)T);F&1YDmSicG z=4~v)+gX-(upIAXdEUjlS%DRK4=eFr-pBh{nN^s^s;tK9tihVB#oDaHx~#|gY`_QD zkPosE8?y-?VpBfMW_*Or`6yfPF+R>G*pjW-nr+yY?bx0j*pZ#snO)eG-PoN^vIn1H zPxfMO_F-Q>&1d*5`|&yU=kt7lFLD5r9LPZ&%pn}gmpF_sb2wk&2)@dZe2t^{I!E&j zj^Ue}z(XEd6ZwJVN&JwLIfYX>jng@UGx-r`aW?1hW6tF#oX7cGz)!i5i@2CexRlGd zoS$(8Kj%t*!Bt$%HC)SeT+a>M$W7eLE&P&O`4zWuJ9ls=ckyfP<~Q8Kz1+wBJiu>x zkcW7fM|hOSc$_DAlBal@-|-B;=UM*1bNrD%@n@drFZ`9i@pt~g3;dH8`4|7@fA|mo zW!76gf4bG{Sw_sp1TSX>W@koT!A#7-%)F9Wcs+CS242M*nTt2^YUW{X-pp%QlzCZ< z`BI}XYd2g z^mIIh#{Bhg116r*SdoatS}-Qug37KE>sn&kgL!jqJru?9I*W!!2CRJ>15< z+|GUM%l&+sr+Jv)@d(ebAHU~wJj)Zjz-Ra;pXEjN=U;rDfAbd>&i6m(v5GUkK2?Gz zSe6a)IsUQ-Tk$EjW>2jq18eg}*5OU8%RH>dn^~W?umNx71I){Y%*O|rpN&|6jaiUQScng? zFq^UnA7)WDV=+F$;%v?me3T{Gf~EKvOY?EIWGl927w5Ix@cElPj$72ot{D`wSn{)Uv z=kgQI<9sgQr(DQIT+Ah0%4J;6&$xo0b0xpvDz4@luH`ze=LT-%CT`{ye#x!;ircuI zJGhg(_%(O)8}8v=?&E$Q;I}-;Lp;nQJj!GIo@e<3&+$BeVdbg5AEtV~%c`u#>a4+< zti{@_!@8`;`fR`l*pLsh5gW4!A7WEJ%w~Lq&G{%>@G(BlC)kp$*qUwFmhIS{9oUhb z*qL3}mEAaiNe<*74(1RJmW)T);F&1YDmSicG=4~v?J6Mi)vOMqN-K@ZhyoZ%|FYn|1tjsD*V^vmT zb=F`_)?#heVO`c^eKz0&Y{&=Mh>h8V53wm9W-~s*=6sYb_!uAO6Ku&=Y|S=o%XVzf z4(!NI?949g%5Ln=C;2S<@j3SA^L*BE=LNoKc>t3f$Uz*;Asot=_zFkxRkm|H8O7Hv zkLDX3%eOd=Z*x4~;k$f~6Zk$S@&iudhn&nQoXTmO&KaD^_I{s_*n+dzinH03bJ&@4 zIf0+>CC=k}oX^J2Z!F-azTQGE;$kl0QZD0ie#RC2oU6E+YdD5$IndWz$C2)@_1s|n zMsDJ7{GIv!_4xSLo zXJIyA5kA1V+`~_}m-D!f^SPf3cz~bsTQ1~5F5)3B=3y@35iaFXF5@vS=W%|<6I{WQ z{G6w_lBf9vzvC*N;c9-*H9X6;{DJFuj_dg&H}EHJs1^W4l|xP`y+Oa8{K{GDI% z4{qZHZs(ue!He9!Am8U9PUK;Jz$2W*qx_J^IGM*eg(o{DePq9?x^)_4dp4{#^Wmlemf>ay2J&4X1D|r*a*qaXqJV17~m} zXL1ui;%3g`7S86EoWrgBm|t-&xA7Bh=REGe2mZYalXJO_#)#7D*tzm`z*i&3o-)>F(V5z6N@l2i!uv~F)NGnGL~RAmgMCu z#q2E2D|j1oune!{?aaxtyoz@)7t8T#-pSl7&ue%WujSpmjum)4EAj^3!y8$NH}PKP z;eEWB_wyE3=B=#4yi8+0R;7kEWYMm4EbaM+kE=L0(VA&&!>Vk{YHY{qY|k3(z?#(K zhFXljR&DBWLmfKb5$dul>rsyz>Qj#!8c>fL9$*hPq#idsNIh<7#9nMnJ#J`1J#Ki2 zdfd>IdfcGPjr6#o8TGi~5$bV6bAC#lQgn#^NgVdCmDV5O7d*;UJjT^L&NV#2wLHmn zJjM0Y=Y|c`=Z1~c=Y~zx=Z4KZ%PrLBhA*kl4O^+t4PWsmZlgXoY^Odq?BFllNquhE zMSX7gn)=+ZoBG_ahx**Gm-^hWkNVu8(~bV-0qS#uPB;382kEI!cqVcVB=P|>Fu_dp zV=BtR%)E?Qc{#K33OZayS272$VoqMoT)c+4c^$9i4Rm;kZsLu+nR$3CZ(%;>WdY`A zAr@p27G^OPWeFB%DVF4IEX~^)Kd$azS<82_9PeUzR%8WM;yt{N_p&nYXBw-p8mqDf ztFsnsvNjX`Uzc?(*JnLGzy^Gf4cVBD_z;`$VK(I>Y{o~~oR6^upWx$c#g=Tt)@;YN z?7;Ty#E$I3&g{mne3A}Z(NpZfUhK&}?9Hdym;LxG`|~-zz~}iQQ$=~@l$8kJ$kI@9?jz2M@$I*HIZ26aTf8(!~|KtV!#f$t8 z|K`8^hmi-N2V$g~4GHRIgMK#B&4$d>%?AB!q?--;*+@4VvQsx3^s|v}Ht1&~-E7d$ zM!MOcpN(|0K|dSmW`lk<(#;0_Y;-gAvypB#=w~CnY{*Z&Y|za{df8BzdfA|xjr6iX zHyi0?LrLmogKjp`%Ld(Sq?Zl4*+?fF^s0yH|Hgf(iI1d;(FBrPfdBEU&VAPmN_m|#045iLIyiA>W7*1Vzc#V&8 z6urIK6c>2-MUdOUJIGqm>mdwm|f zPLH1CyFTxHW$12wPrheahaTRi^PRzY&u9RrS{_KRx1&LvVcF~X;B|d8jB_l%O#N^) zJYH}470%-bR=0jM7g_fDKR6E%IWG{LABd`Fa8AO{IsI_Z5l8yrpd*f+rj9t$sRq4j zq*D!g)kvor^s3P)W)2~Pt~d;}tSb)s;z(B<^u>{`IOvO`xxCEnbi_eV9O;O|XzGZA zo;cDG2R(75BMy4vNJkv>#F36TyhR;t7)Kp(>d&bo4&yB^<2zi=_~-Oze2+TfFo8Pa z@IF^^B6Y;!1FoW;IMNfR)Ds6?aik{>Q@D;(sV5H8s3#87sV5FIs3#6HsV5G);z&0g zMo>2$^wW`UI_RgPZH)grw=@3pf6e&o?q>Yw`G$JrNQWHua6k3P(YHLnLp(?wayU#K za?m43C#Xk`bjaZ(b;v=F9O;mQ9y!t>2R(A6Lk@c6=qJYa*Uyaq`_EI49R0!<`5WW= z{R02sU%bdN4n{dM`u^lqEX!QHgIBX0bMsDK!}7eAckw#j&Ffi#H?Sga09<>hR_?0k$@@Nwqg z6TFhG*phA7n(f$@9oU|o*pXe>ncdixPqI6oVh{FWPxfJNKFz*-me24x_T%&H&lmXu zlN`WTIGnF?1YhGwzRpp6gQNK-$M7wV<=Y&`cQ~H!@m;>p3H*Q)`5`B93MX?Kr*a0T z^CQmWY|i4xoWoBzm-9J~pK<{gaUqv*F_&>EKjU(K&J|q6FSv%QxsGeOf$O=68@Yv> zxs_k?E3V{rZsShw;Md&6Z@8O#xrh6?kKghD5Ah(6@Gy_@C{OS>Pw^zb<7s}+GyH*P z`6JKqXa2-rc%HxUSN_4@`6n;%FJ9z-_&5LMKa4VYd}s1}feB_}MrL7V>X3sTInp5q zJ#wT&4tnHBhaB|Ckq$ZNks}>)&?84W2R(A6Lk@c6NQWHs z$WcD#WdY`AAr@p27N!n4=#e8Ga?m43I^>{7j&#UDj~un49yw}FJ#y5BdgQ1r^~g~> z>XD=N)FVe7s7H=;$U%=B>5zjSInp5qJ#wT&4tnHBhaB|Ckq$ZNks}>)&?84W{7j&#UDj~wZcgC053AqPEj zq(csRXD-%)FVejsYi}p zVs^V)pBQwCkv=i#6eE3N&?!dx#Gq4*^oc>I80iy(PBGFa2AyK0PYgQ6NS_#Vijh7s z=oBM;V$dl@`oy49jP!{?rx@uIgHAEhCkCBjq)!Yw#YmqRbc&HaG3XQ{ePYllM*75{ zQ;hV9L8ln$6N64M(kBL;Vx&(DI>ktz7<7t}J~8MNBYk4fDMtFlpi_+Wi9x3r=@Wxa zG14anonoX<3_8U~pBQwCkv=i#6eE3N&?!dx#Gq4*^oc>I80iy(PBGFa2AyK0PYgQ6 zNS_#Vijh7s=oBM;V$dl@`oy49jP!{?rx@uIgHAEhj|LrSq#q4B(nvoVbfl4fH0Vep z{bXbOw7nE%*@M}m6tOcuV8jw$sD|jIe9g6@fzmlb-b20@Os|F z8+kMH@K)Z!e9X%N%+EqB$RaGvVl2uMEY4Ca$=g_(x3diIU|HVDa=eS>S%G)+9#-VN zti=0yAFHr3t1^w%S&cPWgSA0P5B6$@liJCV{E}E z_&8g!CEKty+p#S>usu7mBfGFOyRj>uWOqKr9_+=Q?8DxCntk~!pW$=t$LHCfFY*N@ zIe>#WkV80_FL5Ye<}kj(;e3@N_!>v@b&ld29L+a5hGUt-L+UMh=qJW87vE-Xj_0*} zhw*>^2b{;&D_KkX@@n41+|0vkcr){|DD$xx^RqY$ zumlUTBnz<=3$rwf@HUp=-MpO@Se6xe2k&7yR^pw!m*uIijPBz7tjt=h!rDw@9ad#s zR%1O@XMHy0^&YPe@)668c%!HOjrpkMCUi*6@DLxf+?07OKg=gAw`51QVkfp{XSQJ% zwq;kgV>h;EcXr^D?7^jcip$uO8`z5**_)f#hnv}#`}j2XQ(qV^P+u7SWIvwabNrrq z!*G$$^Dhoy0sp;87UDn_;UE^{V3yzzmf}#}#+P_Ihw%=+%sV-pckvZg;0WHsS9vc- z@_xR?DjdbCe4W)fnywEd-k|fhi7|9NAn_($2S|*i^Z$vr=)8Yo92@g(KE&~Ken0UJ zo!3vi%SZVhA7k8_KEe0diWAv}AFv%Ku>(J3Cr)M;PGL7r<&&Jor#PLxID>sSlddr& zKH{^S#pgJi&vOo6+nX_W za4=uuP`=Dze1*gLDo5}&j^yhc#Wy&bZ*mOZ;#j`TaeRm4`5xcp`<%cJIFTQ65~px7 zr*SH0a5_KYOwQ&ke#|-igmXEc^Y|$ja1j@B2^Vu2m+~_%=jU9(FSwGcxr%GKhU>YG z8@Yj-xrtwL3%}x4Zs#`c!8E6hTGXEPU)BJCkLi4|2D$V}}bHI`L-(U_nGXERQ0Y~P4 zgE`>H{BJM^9GU+O=71yfzrh@EWd1jp1CGr926MoX`QI>?=6}N{H2)js(fn_iPxHTF z0nPu0Pig))ETsA0u!!b=!(y8M4NGYLH!P+3-(U_nGXERQ0Y~P4!)G-A8&=T#Z}^<% zf5S?e{|)AVBlEvu6${WDaAf{BtfBeeu$Jb3gE`>H{BJM^9O-?7?l-DR-EUN#)mW3d z-$?Hpbia|_H}$$#?;CW#k={4xej~ka(EUbw-=O=A^u9s&8|i(6?l;o=2HkI@_YJz= zNbehTzmeWI=zb%;Z_xclZK(T=+OaJ=Q1=_@eS_{d()$M8Z>0APx?k~+?@tb*?l&63 z!F-9j-$?Hpbia|_H|TyNy>HO{Mta|%`;GLzLH8T!eS_{d()$M8Z>0APy5C6e8+5;s z-Z$ueqXN?$x4gbD#DXls!Ysz3EWzR|#gf$fhSJpghO*TA2HkI@_YLJ)fx6%59#-VN zti=0yAFHr3t1^w%S&cPWgSA3u^}K0@7Z z^eCJ2F}C0ne4MS=l5NSLIljmjnB)Ks;y@1J zV7|nm9Klzp?+rTNNZ%VqQx6-~Q0E)Q@@?vUqjxx-@9|x}&k6j16Zs)0aSA7M8mDpw zr&FIB7EqrX7IF!7y3sN&3)O$H!@cr%-2We>Vx_E z$XtDx#9lOCADOEU=IbMK^}&37WUf9;rMdcGzCJQnAI#TB=IVp_`p8^;Fkc^;s}JVu zBXjk^e0^lDKA5kM%+&|;^^v*yV7@*wS0BvRi{BiVXs$k(uaC^t2lMrjx%yzfJ~CGy z%-2We>Vx_E=p~x3kIdBv^YxLr`e433GFKnW*GJ~+gZcW%TzxQKADOEU=IbMK^}&37 zWUfA#uaC^t2lMrjx%yzfJ~CGyR`Cs*uaC^t2lMrjx%yzfJ~CGy*3n#jFkc^;s}JVu zBXjk^e0^lDKA5kM%+&|;^^v*yV7@*wS0BvRN9O8-`TEFQeK21inX3=x>mzgZ!F+vW zu0EKrkIdBv^YxLr`e433GFKnW*GJ~+gZcVs8qL>7=IVp_`p8^;Fkc^;s}JVuBXjk^ ze0^lDKA5kM%+&|;^^v*yV7@*wS0BvRN9O8-`TEFQeK21inX3;+IiKe1BXjk^e0^lD zKA5kM%+-gJG*=(Y*GJ~+gZcW%TzxQKADOEU=IbMK^}&37WUfA#uaC^t2lMrjx%yzf zJ~CGy%-0KD-QS*S#v#%gCb*6nsFTW&k(-%`I;ccuZsXO|JtcBe@07TPI;X_7)Hx-t zqrNFo2b-`QAL5;C%JO`ecTsO1?xx;6RA6&fWYLU~C*o1E7$X*Ef+d)N zC7F?>n2DvCnYS?u%P=c%=VdI*Y`lY)Q*Z8iWR%pKyB--O_2#ZeMoGQ7>yc6NZsueK zUd4*c#d~-)_2$l3M@hZ8>%mb{Z|-_HM9vmer^Lkd{4NT*Wtje2Mjk@z>b?VNO zHK;pJ)}-z{S&MmDoB3FW`B|3*SdRr+pM}_fh4}!Ba1ZBlFF)Zv&f|X0r{3K4!zigY z_nt;kQg7}$VwBXIdvBvCd6gTc$~WPgYG=3HxIh=q~1K} z&XaocpgT|M&BHY6&4cbdsW%V0^Q7K9=+2XR^PoFV>dk}hJgGMiy7Q#oJm}7odh?(= zPwLHs?mVeC54!WD-aP2elX~-@J5TD(gYG=3HxIh=q~1K}&XaocpgT|M&4cbdsW%V0 z^Q7K9=+2XR^PoFV>dk}hJgGMiy7Q#oJm}7odh?(=PwLG>W$m@zJm}7odh?(=PwLHs z?mVeC54!WD-aP2elX~-@J5TD(gYG=3HxIh=q~1K}&XaocpgT|M&4cbdsW%V0^Q7K9 z=+2XR^PoFV>dk}hJgGMiy7Q#oJm}7odh?(=PwLHs?mVeC54!WD-aP2elX~-@J5TD( zgYG=3HxIh=q~1K}&XaocpgT|M&4cbdsW%V0^Q7K9=+2XR^PoFV>dk}hJgGPL1J-N} zMTAMcdC;9F_2xl$p46KM-FZ@P9(3nPy?M}`C-vq*cb?Rn2i~@#oY0%6jYn{Jxi^n=ReT)6Jgl73t2^=|$#nnQ z?U$y19bI93?mO-fQ^w2j{<&oQxl6a%l)jC&Fm+q4V#;_q-sY0=HkWP_e;hw%;>W_J zkK@Ne{BgX^rFHSgmmYhU9ygaBhadRdrN`C(yoBRWp)X9SAN=3t`1A4l*!cIk zbekIfIG298K9c&l-v7tC_%`wS_|au&5_c(as}grIDfKULYx2MA^)K=Jd4@x_ z^G{-pLy^up)mq1{OJCMm2fcObeTri@rZ4NQgYG)@e#Nm{(wFtkLFb%$zu?%ob&ic2 z72krXMn$KRYE*P8sYXSol4?|RDyc?Ar;=(^bSkMvMW>Q#RCFq-Mn$KRYE*P8sYXSo zl4?}q_tA@1qqrD)IYh#f^$zsYWG!AFa4i ziQh*nZdCkAH7YulRHLF(Ni`}ul~kjmQ%N-{I+awTqEksVDms-^qoPwuH7YulRHLF( zNi`}ul~kjmQ%N-{I+fJ5zhSp}E$(snG6!-v2k{jS<_Heqs~pOajIaH@M%#vXd)ubA zw{2>B+ora+ZEAblrna|jYJ1zJwjV{;@1ob~`du`duHQv((Dl1$3|+sA;%k4d-$i5T z`d#!EUB64c&rH01eC;pZKEC!BZy#U#i?@%j{l(kI*Z$(|ZJXLYzV;VyA7A^M&JQ?) zlQ@$f@*_^>EKcEUPURfN*Zw}HZByIZHnqKNQ`_4%wY_aq+uJs^y=_z5+cvfRJo+|E zUF%!!>n*UH+43T0b=0vg#Oqh_a_d)fi{&-E!g72~?@G6`F17wV-)B8*>y7i0VyyaeOd z;7-@3UW3QigyYxX@ipQ2Skud|`1lfcYD<05>W*RYaXR+W@j3o@Q~KxP<8i!v={OvJ zd@=oV@o_O;zH~f{KaP)Y?fr^%oi=6HbmR4x*2N#k>*GID@Bd?b{EHjC*ti*tja$I@ zICyD&+yYMYd%13zdf)0p^iQI;<5qmUdXfG+|96HX{&OvHE%s6)f2o0AWxeh^)rRZf zQ*HQS#%=gI#%=gY#?AIp{>(2JH`<@_Qp5NEr?qLN^_Zafh+Bq+?neznq7h|c8Jf`l zGc@(Dcs~zdA)k+r1Mz;2j|1_3j*kQJevXd=@qUhv1Mz;2j|1_3j*kO(Fg_04$@n;M z7vtkV1;)pLdpLskGCmI6&-ge{h4FEqD&ylob;iemnv9PFwHY4=>M}kK)MtDgc!2S7 zAink=9|!E$R0Hr39B9Y*IM9Ld zalqpz)c|y1d>rV;_&D$+EKFXOq#@Rg1xjuiAuHh$6ae?*cxyW*S zoLR#7IJ1nu^E1ZBo6p_Ou_kq{FFxMH=lbH~%{s=%8|V5`#~ZVdspHL;jE^_ltdEa3 z@wvYEc(aS~@g_dk7awopbA9nSzxZ5Ve7re8`yh3^iC-IZ_i<;x;@1Z5qyK$9u=f9a z9Dl#Z$EA*Lcf0lRaUp)bX5Xb=6WDhtJw{Tm4K98C_-n+^1IebW4f8r&75wQbpPA!^QM2DeCg&-w?MiD(=C*4;dG0n``>QgGX3kc zO1E{oZPIO0jp)`yk#Av(k;1r~eMd`PVXPV;A z$IJ0Hm%OwtHvV<#HNvHj z{IfA`(l4!#e>Qfk?B|y4{FC@1{+Iu+V*H$DH8a!qef(S|v6k7mp4sX9Kh=$Hq^G?J z$AQ#ym(9#=c?&&fNjNT~eulXgkop<+75xlLY^NV@3CD?$mphrCju)XIzh+@NZiJ%T z%i?t02qn3nrRn$)%J5s3? z4u4=ho?`?4$cFrxjd-3-_zRozS2p8sY|h`=f`9UHUSvx;6o%IPn{D|Yw&%a>NYDD> z<6n<8Q6nP2giS>RU#96Gc)@#3!h9uj3dx4Vd~_b_2&*zLDd36W?VXPTkmy2>fkao@_la(_&lBC5mrv3@ zPV}ICn|O+a*^~Bdq8IJcL~q)ci9WOs6MbplC7xzkK12I3@ht7TL_glm=V+fL`qREj zJWu;5@d7JzBGdQ*?W@Gcw2u;VY2PHiWF2m$eU$i$4Y-XBxt)!;gZ4>cC+&;GF4_l) zuj#%|+fDa*+BbAxr|n@&?xp)SZ6DpIY5Uop2k1UcJ4p9s+9A3R(+<;pmv)3bc$Ds| z#4);$5+~`tNt~klBypPV3#Xuc|MLv}wxrRTs=HQINH-dy6R%L}~6O@`1uOvJDC?YqQF^jabHcTm}PiI*+M zdu=%FtHcP}M~RWNZxZoqefuO4zlOFi(#%}P?^lp8a~;25K_Y%0=RQxwbLZ~sMEo4h zeVq81?%PECn%jMvwu$b`L_DvZhg;~rOvLlrc^N;C%FmrF$X#^bCgLYA?$bm>_hljj z-G_-Rbl)Yi(|wk>g6^wC4wmB$EYAwOn+>V&OgzX+Y)qYJ;$c>13#RcgR^#KW!M?1; zr&)(zupU>j0nMJq?{S)l=TIBb3~Ky$=q2KLRPSk!*v)4AhRtaPHGZ$aL_ClBI1jKT zzh!G4WLw7bsqJ}`9eIqMd7NE&g57zNJ$Q;eX+|~lW<0Ojmu6MNGmPg}`_as5=+Ah5 z^#z(;jsH%)L_EhjkY-rJV8-*TLur;Z{yX&&@m%Y0nq`guPPD|I9LfBd9WPjbqgjw+ zScqd;nB%yTEy-eoMQIj-_eYSi}0uS&P|OhgYy3bFcxg zWJBg;BVNTO%*Cd>n$4J-&3)Z#*n-#cabCxkyq>My?gqByjcm`G*pYeI+3jv-SKh+z z*5Aq=%*&q4$KK4(zAV6JSdjf#i2YfZenupUZ~%*PAd7J@i*qPTa2QK+I7@K^OLL?@ z$88+NG8}FF?Ht3h9Lqa6j^#L>ck*49=LFuxiM*SWe4PrM%!-_9{XLw{N}S1iIg9sk z4)5n&R^~ib;R2>{A**sRt8po-b2)2p1#5C8YjG88a}Dco9qV!f>v5AmSAA|_18(I5 z+{T97!3VjEjkueQxra@-&)0c~2iTMc`7jT&8IST29%pl&g1{me~t zr=PWnCz+EyXkI$;6wON~dh%NK;`Qv!8`+0>*q68PY3AiK%&6a-8MXe4B0g4%>4gJMsf| z<|KCIhwRSD?BV{I!k(PU-kiq1oX%%BgZ(&@{rM4J;4BW{Y!2ic4(7)k%DEiIPdJ?O zID+#zk_$MBpK>%8ats%7EEjW}Kj#vT=Tg4QWt_m}oXF2Oi7PnScAs-9S8_VP;7qRK zEUxApuHjs+NG9o)@b{D!-^hkLk}`?!w>xSt1kfQR`lkMbao^AJz+Fi-Oc&+sVE@)*zY zIDhizJi+rk$zOSjzwHS9%zc2@XrS~66{Kj1Tow@l3ujK`L|B=L>^!_7>;QXogA4$aL;l2MzB0dkF*Vm2D z!{=vw9=;&s^YDckpNIGUBWdw@c<(=wmX+RrBykx_GaJiTe>uxCJInD3mS+xnpOLgH z>HS60a?<;XB(9?O6G`M^W$UkI8gsK6uc0m@?Rt8jki-r2{ve4P>3u=cZlY_GX?f^< zK+dH$A+&-1rtQMR>RF}7!M zcC@|(JF_IavJ|_sG<)zi_GB44Kb*Lo&J8EZ(tDkx-9hhhl2(r1+a&EyI)9v2o&$In z2l8$Xwp|4dWkn9N{vHlzC63^|9Lf7QiuZFgD|3wPs&FjRIL`X29M5Wem(@9ewK&o3 zYI73naI*DvIhFM|o%K1B4LQs09^@Q0;#}(+a~_*;0UzQ*HsxYI%%yyU%Wd~4S6F_G zEBORhF}}{R#^>YfBePz<{s<2 za38z!0K4%ZyYn!gG?~Q0X*;bP4ZU`hK0 zhRh*t7!!P%89AJp`3kdg1her~X6H!e;A_muQOw2HnVX||E#Khv9K##=Ci8GCZ{b_a zOT9_(8Z_-~dhMAuo?dgNy~Cn>m&N%WOESLJT$=H<<}#efviyMMIEm%?A@Am7R^${` z;#A(pX{^lYOydkz<4o4zN36wJti#!?$2n}kkJ*rO*(h^Je8MK2$EMcLXEVzS*xd3$ zwy?a2k6T{MmX?>WHJ7q2m(la~D$Cj4@}+CjUs&#Fc@;a`el@#VUc>H|*RhA?_3UYR z1AANENYDSPY+_%_o9UcUl`VY6@|Wz#t?bXQ_yV_a0Jn1>cW|(;yOUloRN2j;)_=oc z*6-nP%X>M3`#6&O82%JIJ5F?wB4_yuH+o9;+I^*tz5^ixPck-JC5-(ZeezAWkGIZVeViR?qW6WW=-y4ZSG@B9$;%8 zWH%mWcOK=FJkB0G$)|Xly?KUxc$Uxb9G~S+9KiET@>dS#?;OGl9L9@$nSXN@|KV(g zEdKkM;K$6!!_3Sh%*vz8#$(LRGt9y7nUiOki$5?oixse4nGhA{Wjs*a@yYsnWgMT_ zfH$%s^RN+bVH4(MQ|4zg7G!f4W(yYO<1EgWEXmd^&2}uq4lK(~EXN)!&!>1dd$A&W zvl9FAK0eLLe3ohK$7<})8hoC$IEHmNf%Q0x4LFAlIhTz%k4?CMO}UWGxR}kklr8=r zw(dGQitGRX_{{7kNN}ftU0B=~cXxO91PcKYf;)@56?aN;clYA%UK|P(TC9bZ(%mh!=u;%k7Fl1iCyqCcEwBB4KHI4yo%9y z4P)>I_Qspo7jI*Kyn_Sr9uCI)I21qPaQqWT;Ab3#UvLcmh2!uWPC$zXxYZ_6-|%B6 z%hm(kGgG+5j;9#!#>+h{I|vKZvFu=c*3h!!;KC)A9oHBS>o>RT_;`7`WryI{#+ID` zt1&(y{?XpD6JbPO%TA1=hgo(KEIY=slj7d7mYobgkF)ILICYw3r$DExWv9f@?v|Yj zZ%12pYW%sEWv9W?qbxfuc4fQY;k$X39f~7JZ#wKldefsj(y~1m8pEH%U>>%c0X>T? zJ0sR>ZP`A29c9^>@cd}Y&Ws(#^IkKa4x>H7TLH_?hF;Q{9nZ9}>>QZ7GxY_#lFnTC zmF?ul3+zW898=e_^Wv`hy#I_pH?V9!{?x&;^W#!KAkc zw!)(L+hofwh6UzWc5#eaVA&<`uSJ$!5-0Vy>{2*vfMu7)r9&*c44xio*=5oFy=9lv zboReI-k4z774Shbp08+nTg$G5?FL(RWgJR6s$dxDtBPk>e>FTxIjN3+&bI6tc#Gw0 zVpuE7u7%0juiAKr<5C9`bA0P!KGIVUiw?Ey`dE|Y8{id=OGBK<_8Q?mj#pzmhfOfu zK+A552U)%uzGHuyV;`1pfx{g}u zJQ9zyKcny)`867IQjW&phFO+97Q4>3>~T1U@-rSU-~?R2dMDzEPL@3h`>}tMF^v72 zg1uS)RGdb8Fb(;G5qmn$ryk6}OlINik>fiDqbMJ9F)Qnx zhi^Hq^Dz_kZ2{Jxd@sb*q-PN>$HjPn{au2mXh)XfQR?wBRDS$`r%B&({6s$gh=Vxp zD{v$Gu@cL0TvuTq%FAkeNpY2@3TQTJ{HALVfy( zb4b@GJj;InfxmG6`BO3N;AhM*$g;oS49ewScsRzg|HgTg@2}X5_V6E#r(Ar)BD9zP zVhN6i{+K2X+PIQ(uRr9v%JFyM4c6zz(UhMc^sxP4+|KcegC#lsaj_Qr9}jDj{`feN z^JNHLWqk>-9Qm3M4>#s~k1c2qlVNYxlM;VsdMeCGex=4UeL1gVDav_TY=hrnM-0WO zm=2pzKhont(&@ni*dIS`q~7Jn7xg$lV{Ot~5KnX53gJ^MjP=RyBDjeCEQ-NRI6q?-ERN;a?-IBg zOJavsoS(4=md2UX-!j;Ra$FXtU^#q`<*_dHwgNuJia4F)R|!W`UMpii@}~-ZM|rD? zz9`Pm*n{#`9dpHSe%5%(T}_R1P>VO^|;^{@%n$JW>YCu2jLf{m~o z<*+dZun8WfJT^tO)6Fp6P|nX-9$R1x`P34FX!ly-8_IKQ9Kd<1jj=5@r5$RANhnY4 zaW;mbO?eK-;@APN(*Nj)aVK+r#+{VQ&ZvCvf=|fD2>h4w(iKaR?~&Mt~#;nwnp16a2j=?V23x`tji%C*v?Kjz^WB z3D^!NqRP=EEJXdDj6ZQ+n}X>$?@q-AI1QUnzNVw<=L}T8_InJ)nVOEXZ~*7S*{J@@ z98|kM7w=O3=HXeKk1B@?&=bx17*!q@;VSw=i?J}}atUt2rKomb8TO={{(!-KI3Ht4 z{1Mal<$R1@T#0HgR^eS-jURCh)?oc>u^g_$bCmb>xP@}M0aZ>n;vm|OP1ut1x*1h& zw_q8{=~h%Z-G&WlH@D+&xB~}_<$R3gDVMu&4DLpi(>-{I_Gd4u9omOyaX+g39zgX+ z58@jhb|-KNE8%6lUeF0#!9^uGA7h$woR6_MUdQSUoWKpd z)XE9m#H&M{z%8uE`flSCO#e66AzWvAaSGGSPA!I z6+DPl@i11yqgWk(!Wwu2YvL)ag=erfp2IqL0p};-I~Z}S5exAOuET4XHz~iBhxzap z*5nVA?_e#whx=0STX?u1AL2oLjC)h^TZEd9&#_oqetQtxT;?|iu`T|J?eJ|J>u7uY z9mDWFhT});w{_&cBJV5hlS7m=ybA zGE5ib1d`((mP>)18J`j-V=Ao4^wc(78Ci8Epq^kEEU!hV<;Qx>Klf;vxRMfDr9q52KkQRj^u7)1XeCkA6K)b(d> ztd4n5{foTV0`p-n^y3iBkHfHlv7oUK=8o?K3S)FM{S!RHd`0mA7Q^rmCr}(;6PLhu zSQ3L9(Lce(SQ?9A8LWn7u?v>NAFw?BffXo0S#aI<}UaW@eusUwT z8h8|IVydR}Pf-1++L)TS4%R2Gi@mWPs{dLa-*P@}fESprA%4V0n2_;}aUyXOEI`~8 z^J6nykInIE3MbG4-xIgQKd}`Cb6#$Z-(ef{VOtEtcDOo~6KIdGFbscXd^m=39`AtJ zup{1Ld?)Ng+!@~%p?`v3F#_XqzVC`N+zTKVVNx6Y2zF z@L%Fy7)-yiH#Tfbe+7NSeKAm!{tC7u?vLt!4#2}W5GUgxe45?~491GB>962(;-T1s zco;_Fa2$*Qe1s$LF^Fiv=Fj8=W*EOmoBrHP^s)c5jI;41>z{+W3pjzfc&EJ+ zn1^A^HyBh%L(kk(!_i5E7SL37vlXm5)a^0Jc#d@{}B4v|>Di@%>KVEIuJVho9+(p2zBV0n?VG zzk<5{xrA|vFXL0zcLitAPG7}Ycnx`(*1nDlng0fE7|#6zyj_v|2bh}aw=op&U`D)) zZSWp8#QS)R{?N}@o$WoqzZm}zN8=-Gz;)PT#rOof7jgnmaSHJ>^x|_&5yAZfRKMyM ztU&w{m*XpZg|BgSSMDEZd=V$`2JaHT#Wbb3e}Eb3cmIy7iaCLI*ogQ&)?xYwj3NGr zOYjq_pZ*8#!#{Cy2`BIwL#WqZ@Gs)OunzY<{>J^KoWNH+MEnn)$8Xpf|HV}F_pL9q zS7@WIKONL{fD0qgjr}nQM`JL0N;`o#Sco_-=Ig=vAA4YYELfWJKkE7+0iMK!c)1Mc zfBeF7iLpnNo*$4;Wt~7$oPx>l1mlxqan5%sP}dzPF%(nbY}TI|YY?ZwA($5X;di(J zLoo~egmhTBr=A~h9^*REgA0khxUQlT$bi{nES?`YvDYy^tVf&)<5qD3nQ=IA7Mz7y zv2axi$tv ze2vX8UwO{|SZ<)6ACMkwiFL6R4sPxQTH~q~PN0pkExu)XJ9H{=e*)LFE{z`t-H>Uwt& z-s!;kA2W4y0zsE;$av~JRIB7E(Y*A+Zlmd89x$T0X;vUeW|492W*dc4DM*5 z=La0m&Q4&QVjPd(vz`gK5GSI}-;>adlX3A>&i@$6`ljM^#!thEI2{+^4BXa0&ks1? z5zkbNv+w}U#^*Q(OGR@2M?GJehv`Rh{>N}!fE#cjX2L~y02kv6T!OkkwGcn^QXBHcLuV`O(HuoABmufklF_56VIDeGB-A8;+E8qN71&-8Kv>#+mz2FxAh z1U6!8mfM8waWigV{1&_t?F6=BB;&VXy)m5sQO^r^U}xNk5x5K2;BFj;doa;hJwKrT zM!XMoe`7yp#{(FN2XPD@!kcX8Fg_wag7!Gh|M-RR$FLpoPZ*BJv2$N1Z~|` z6c(HL)HlC#C z2b9ynPT(4@BfgGD@CJrX*7F0}d%T7DhB<-T=#J|I?%-L*-^KlS4}Zt|_%qXg#%ojb z{DA8r%Hu=4GTI3|!Z-LBXHL`e1M(H0V$$h)en7uytP^;Sp~Nq+*bF^C;CSFmyoIlD zFuukw-|P7S*N-#x{D9*#(Fwf8iL>Kz68A0Ea|X@}we_5V z<4c?dzhPPoTB7F+j+GcgF%_o6l9(QOF)L7>$CZ|gdw!sACP>HVGR8H=$BInPhLusv zNi8R}oYef)QPZWSOHG%WUPqI$E^0oh`K0EP|4rBYe1|4>KB@Vn=98M<+>CFJTA$Q> zQu9fzPilUt{Rv0yPe;^pQp-s#CpCWrYP!^Psp(SFduTF7q2`mCPij8--*nC2hgkDT z%_lXV)bs&nyi{Bs-Kca+#la?)inE(oRwUMX!;Olye#KI891}~$2}~?2nYe?oGHSaz z9#XNkt5_=5dK62=N{3>pSnE|RtD@4;*{E3SQ7jc}J&L8`Y$le~h_!qdV|CQ=Rengt zN~dC}SnE|R6)RnerDAQT25P-sjr@&X>~#!n3aj^wz{{|Wr$1$-~tn_NS)Nu_(9cQWSN^MuFerZ0{KdJH}Ret_kUTS%%<)xOF zd|M)R|M|v4tcsOB#Zs~6Q~cljY9AEKpFqd&sWB_fw_?4oE>D>8&yA`tT94|FR5_L^ z$5Q*NmTqD_xRrZp6yB zFJdi^i5cJCs5q&KrP>WmSGyqNVjFETDV#mKU<}ubb>iB3q+CQmS z>rpHftKC&BvzhT#jk%09joE^!0}QeeLp7t~#tbz~eBF4&$ls>N&YwLVe;32xHx@Le zG^R49Hl{OXH2RFWjQNZw@gRe|$*_!JKf@2kO~wN8**-%tV=7~6V>)9lW7QDK41+9V zY>F8fN-_A1Gw>$E35J6VCyk0VzDfet!*GbU+o@rH?yqP`!X=~eg+KpBRrM#W7T zZZn)QUPOIA;J^3*|E`djzx!dRWvp*(Vr*$FhdUU0GQ=2r<5q^@4BL#Fu6PE6*1OQS z%(&9H&NvOV-YiLIs~CbpsS6BojPZ;i#)QVC#uCO-#xlmT#tKHYt63cpLJfAI`3$@&O1`E(ydr3R()426)W9} zrQ*CMmeq-sjtJvLRJwmN)-*=`Pps`ImYS~Pq*&H6c|RKG*2-|=6pbSaiC%yDUH)ci`Prc3ohw4C}OQn8j(9J@T} z(D;_dc1C?aOyk2?uM9V;AEQ|P7^zt6Q7jc}yNab^9Vf-IF=oa-M#U;Wilt)Br&x9& z9Xd|>KAG%_IQi_b%9i@^(dB#wLZmCvGz-`RIK$Vmd(ug z{zk=GPO(%!OUtRBC3QWa>knN|NX1%@VyRfiNwHKt`|tSumo8oZXnk@R`>pksC)V=q zjf&%$SRN(T{yjD-*8VG&iZ!3&|K@j@Sn9h3O0T|4ARV@=^|_3SwI0P%vDTwlD%N@w z|F=H1Pg^sO`TpD%N%tOT}7Fu~e+(6ia=lK>MNZ6iBsO znosSPRGi7gvaX4vjEXg%VtEafo{vVwN{3>pSo10VZ+@jivD9}7ln#BDKrZDtX?^;h zom8y#D3*$~9>r3z)}vS|&SYY#dL&hk{)@GoV!4U=wVlmI#oCTysaW$V{%?MliKV7% zy_zmn?zNoCsZ^}-ivOFg^(dB_?lQ65!k};c$`lM1?@4Mswo$Rtt5_(8wVYz9>mB-gQn8j(EOp(b<)xPQGhWN*H!9Y0 zilt&Lr&#LxPRmOzUySiuzPM4bmQyShYdOVI*L7N6YWZ@E*Yf3!inW|#sq0P6FExKP zGhcP1V$G*m>UvT0OU+-;%vay2So0~Cij^+Kas`8yYfh|mNzErU{WOEtFEw8~Ghch7 zV$H8uD%Ns}k_8RHv6j0ubhjfsqjjTwv?jXq;0V`gI(V^(7}V|HT>V@_i( zV{T&}V_suEqw+!fuY8bU#&BZ?V@G2rV`roCLCYy0WLIOPv752Gv4=6rsC?7;PO2Xp z{XgTizV!@J)0NNq4uIn63|dZVIjQ`Vn!cJ)^Xq#Nid7!uMx$a)KVhb;ozn7ZKmJqm zA7Z*>j4J=~f>E*7qxbeTUhRtJSAG0Xjh~j0 zwhLz%XBsaVuNkixUB3UDKdv#vn8}#MSjt$@SlL+3Sej&LyX{R}+gQqsFJtUr#&4t5Yiw`qVC-biD^2{H@pt1p<9p*j#@j)>U%Z`iJi{3 zcw&8F)d2D#aI0C)4=!zPA3#=^Y+;Ad!h*|s_|G&AZwh#m|w${20zX^g==3|ell zQSU=&IlT`d6>E9LvMlY-@I?Gi?Il4&K=uU=eIM& zUaQu(^Tu8q53`HJ_WgI*X=1Ns&)dPV_mZ!oo`Kx9v&7z0|7ItOeTI_2Nf3KZNaG}m zZR4{#Nn)S56>;3L*Ayk3oU!*3Iyn3dBg=Qftk{L=*|3|FD)t%H2q%8*y@W}uPxq|m zGN0}>%y)ugueFytNn_jIEl%#(bHsfoee5~nFQ;tmJ?!FK#OfY)30H9Jz3Xzsx;I^( z3m4r>u0*VR$(2#}eyd>Yy@3f^WB(_cM~%pm9=E3vX+ARRmRc~m$wdcO@4~&-mkX z+uR=+?rCnl_q4Yja;^Rg*VDgpZ|sX5#no$dH;wl@Z(47tH-p#b&FIbK&F;vw6n|n|oV&+j+yh?Y-gNF5a%*2ydkKkoUazoA`? zz4gcnx8m3xt(V;2{bWa2Z@7<|-_wmR=XbZtdV26>{3z=K_Yxa>Vywn?FYfa7vHl`Y zMv^E0aL;L=y_&Bb9kqV+9OoaSbkK9r%1b_7@?5uSd2U(X?0eQt@@s|X znf15*-1^6UVZ|fw4tajF@{xa+J)f-Fp3m05_E)~1?${g2$4%s8D)KQk`PhJbZ0PA? z_xD8D1IW)i5HODpHHP1D{wZt{awZb*UwZ=8owZ*mGwZpZ+ zwac~9wa2x|b;xzjb=-B{b=q~ob;dQ#b=I}nb;WhnmE7%ef9Fo%F6eIPF5zxPp1R4? zAo4T;d76+sO+lWfBu~?kr|HSl%;aen@-#Pjnuk0sM4lEVPfL-frODGu=kqo;D^=Ta%|9$kUGGX*cq;J9&D6JpGwGJxZR&B~Q$_IC1f2l@7pe0xN`y(Qm%V|y0+n#`_hWnh~**~eP!Usv|6fWs>q>{D{Pvz3wU z!zNCMGujgOqOYb-M>ia$Gy8YC8K)HHif3ouMn=85aU6mX5EBjab zwf)A<>O8cwIgjkTd_6y(li!){+C#m+O`U&9ecwVozf2u}F zUBpw&Q`A%3)56or)6&zL^g5(B1?lyWFS$u?9n#y4dgLOlDM_oBW1ok#)+Mdo?d*J& zIfs*;^0}Ms-C}#cu)WP}?-JX4=uP6jyZ6|X3-Ir-sZn}%OkCKk! zq@#^{sb?qowTta%534T4R z33b1jr=iu()5z-TX=;t}G_xjt9M_9omYzp04&lPozD_Gtae_y1tIOeTI5{mb!e+ z73_}VPU618v9&q2_uQ%7KXZJax;^ga9OK{J+1wx9x!j-KdECEpysvV+>vO#CyNkLX zaLk{%%eY@~+~2vYx<9#Vy1%$ zINldLjjiYG%OBK}?8j-2-9`4{1!@12`mvh&ag_RTjry^M`f-f|HmHM%b z`tdXM;{o;KSL(+bj@xmLQxA^KGwNBC-OrlKdgigMdX&3p%2|ENSx-BY`#tIXKzh#G z75TN6O8inwWqy67s`Z?5;c+)rd)cO3a877vH{#bv8e3OsONOwW z3wF4bkg|}N@*GNeenC0#IuZQhMOS`xBGP(kcjH%7dhiP=QT+M^<$-fTd%L&Qk#t<6 zZ5c{Cf15V^j=jr%YtP`u@%Oz&HtQ%@6XD0OrkW#}XI za|Y#TnJ3H&@^r8gQl9pBXxk}MXFZWtLC(=dsh<_8pH(Si=c$`5shi={&F+-9XP&;+ zFzV=d%F8F}=l7JY$CRxnl&#+>TkqIj4D+Rl6&$JZRkUX^giTCFnN-Q zeJI2_OR&yr9RD_~w+F|1CdWAr>rTu%W|Q{9tiL4dug-C8%Qm7ohO<1StRBA7Ry$uA zE6O)5GA_tCGvmgLmolEucqQY-jMp+=$msI9eQ|y9d?CIBzD&N%zAV11zEZyO zzKXs|zRJF;zG}YezS_R-zV^N_Uk6{bucNQ0FUHr~*UQ((*VotI*UvY=H_$iSH^>+8 z4fZ|s4e>qljqr`~jr5K7jq#21jrEQ9P4_+a&G0?({oq^gTkYH6TjSg4Tj$&4+vF`Q1s`Jwe&ML79C{nf-%)>`nTyFT9pFm_AM%`Z$T`<0Pg} zla)SAHu^Mq>C@z+Pg8_GO;P$ZW$4qCr4Q4DK1@^kFm36>bfOQ_nLbPp`Y=)SVJ^~# zc|d*IPhC1k-TCTW@7nI&==zB?Y$FZF*!BnS1s7ky^bTjc0ea0N=rxa|r!|V6)@V{Q zhSZEDJ>y8vczV+l=uJUg;Y)@ozqC?bb8e@=v9ADPi!VVv00>kHmRRO z`sb4VdGxmD)7xG^4{aemv_Z|#;}wioDBj6q-sbt zhFT#fLe7Mo3^^MzBV;E3J{M9YLA3-Y5}ZkJD8XSo$-mCxsRUIL)<{@2Va##_Y&U6dkjA(%#tK)lAzGw&^V!SL*s?U4-E-T5SlPFQE1Z8WT7QOONN#TEgf1W zv|MP}(DI=bLMw(=@z3zz`~UL)xIf&BJ_y&Jh*;OxQtOy7$%~t)swCf;pOT|^d z=D8yC7sTXP7E@w5OpVnsE$Z1nf45=tdsnf)BYhmxGyVi}TiZE_8Ij+=vNGXm%z|ey z8=l1+cn)*nJIsUp4waP;KOpIKHnWpm*v=O0#OqF5u`BU5`wIIh&SLsN z?%i-d${B^_@e*$3xL?NIsJ{_if!FZ_@;e>>-`{(F&-kNE|A=$(6Y_k`{({R4}#DSqYN%{^|q zo+4+&}+XZlnZP^8pbl8Qk8Wu*2CGz(`b}P)n_|~ZM(gwF-TilNAQ01jPp2RSWV7YKqx$l5le@E2% zI-%Cn8MU4+$nz^Z0=1s5sP**6(r(_h#0I2iA%?U3B5X{&7=I^Tf;uisu@mt!Y)kwD zw#Vhz5r4!kxB??^C3eMCIEejQjf;raV0T=LqZz*rmk_VVp11*{aU;gyChUcqu{UnP zKDZV8<2D?D+i@iBz;)!)P8?6X3n$=iOvm>2;6&oRI0^S5f9GWH$7#d|a5^5u8F&a) zf9LZzG0iDb2WZq3ba^(>Kc=r|evubp-o-NqneurZD?t}&i5zA-5#$-ujE zNWM6kF)!)Nf|Oq;D^gBf`H=tYg8Yy6&?$tpQ?4RNIdzI+PvTNYd34Gk<;1Cqv|mm& zWdEJ&I2fDaP);3fk^k&y{^!S@sB+gE3t=BDjD4{P_QRssAB*7tq&>9qry==gPe+cgJp)zGzekRfJrmVl%)&0jvoR9qpw0_(QSHP$)PBsz zXk36gUo6DlxEe=roOMzhMZVZL79Fg}bQexwdJs-xd@xSMI5>@R9S>(PJwB5Eb_iC( z1jdBMM5uHo#%wH?1gjG#H73Ja#K}?VPlqztrZ;B5+0362 z=aNnzE+Ec~Eto&MF*jBq&V$;|e5m8>$I6%=t6)LYd7%*M_!mZ=$Js@Y=UR4Adm zsvZr*FT{iJZ{{0}Dt|*T9EYOvV;HJFjmK}ym)l2RTTUKy*|d8YOzg+F#O*TwUwhFW z3ovUK7Q}E=d(i>aUUbAF*a_8MbjD)X1&d<@hOpkQm=Gf|F?PeG*d3E&52TCkL}6-- zM!M=wPYlHvOpm?Li@h-;>Fk4}I1zi`B#g$%7=u%= zH%`UAI1T&bbR0-JXW$V09*5&h9Er1V49>>!I0q-;T%3yYa0brDS-1e_;zC@2i*PY6 z#$~t!f5fG@3YXzp`~f%Ma@>qR;x=4?J8>oM!Bw~)SK}dEgGX^KaxLRpho^8op2ZD# z0XO1h+=SO~Gv354cn7!QecXl*aXUW29rzq~VtLBjF06pNQT1;RR>Hlgc5xr7UEGgV z@c^p5KZt4<4q**Ej5YBHsy-h@)!$>NcKs);i^oyz`UzCKeiGHLpTdTC8XMsmY>a17 z?aMiAisw=7$OUYU7g6o}C2WtEF$}Mu>ho3XfY(s%>vimeH&ExVo2c{DEmS*m8`bXK zL7iXkqS}XhsP^DK_Q0P}=Z6OvjSsOWKEfD$jJ@y)>b(0D``|NFd-WXq;R{r|^a~Ea zmpBk#p&t|Eq`jkl^u{;jTOa(La^4r;6A#Y)f9V~9I!;k}I1YK}H|OQ=sQK2@2VBB8 z40JI|M%XrHM+b|b3(KM#n`01;#$cR;ad0Wd#l090%hu;xP1q4bFcK5s2uz5xF%hoA z#P|@CpuVA)6v=Qq8R}c{$?*%Oz?2Q?2jF*@3X5TCERSih6{f`q{0>K8DDK2`cnZ_w z6ZGKCCYJ3*Z&S<8fUlcbc1CoXTec75V$SA(Y&aaV<7do)iCbBA zPSiK`a$zydjrx{e9_)#E@osDS8TbtS_zv^qH!OfLZRl^{KrDpAurPkaBB*cM6~&OY z^fxd$7RP#60^4Ir?1iQ97?#GkVe~t&2$sc~SPt`bwCwU&2rJ-NtcY{468?ylaSv9( zhgcP#VKw}{6a5m5+u5>fV0NsD87OD9Fbr#>z71Rlw_#m8i}mmt*2lZp026n!?1q>E z8(|@AjFHin-2`*Sa2<<9uo;%b=2#Y6U{!31&9N1>#MZbT+u*2PT*u;gY=`&wHdcFl zj$xRFZ(oI@7dv2f?1+BsgcGqd&cH6%mv3D~;1KMJ8!-|OVK;n>-SIBpu@}F{8vKm?vB)sX9)R_6AWpzRcmM~ZJ)C|F zCcvSX42NMs9FD^jH20b_6?_Qy$B zdkoh#7>QG`9N+Yriuy+UG}O0%rsL4@T;HI+75_b6!I{W~hdm36PU89otKb~eH+|+} zf1HPla6We6+dK;}8W-X=T!ibUaQ^`HTQ*B@0pIFbikop6?!X^#I^XD7j@74g{{Tm!SK?({h5cr6-Gsw&4W^rI*=unpuERaJ9)H0NSbq-p53mhx!Z6&75x51<;#Pcv z+wcQ!N1Jcw?7-Ey6Yt_Ke1N-g_B_tdI1l&YdfbPr=W~9>TX+B;;6co?fb%ov!^2nr zk6c6;!V&lmN8)=Ng-vlZHp4O49LM4)9EYQEJdVQ&I2|YA44i~BaWXE(DYy)0 zp!#{=qxx?%F&@ssyG>|UF+TAe%!6|=1m|G^&U5oo{lEp778fE9$L&R!qdDy=`kT_O zqWXin*!_oosErn%{d3TTE(}ID#={^?fWep;<6tt3izzW4ros3aiXrI11eg&MVrEQ) z+4x*rV$6j}knef8lVU+khD9+smc$fT7E@wHOodf3HP*y5SQpb`L;Mb#VkmN7-klD) z-|SA0;e2k|gWOjR&Vbw}c4fp~=)=C433(3W%8Y|C3l77q$bDj0HXM!FaUAAA?gzVa z;uOq<-2Zju#+jH0=U`r(kNJ@M*e*XV#r(J&3*bsDh-mW%i?(~hnKKCUd0M{11loWwp^94Ze!Xv9NdQX4b|VQ zic<&CKH)v)tB()(oMi*#8JE)#pI{?=hK=zBHo=$J6klUAe1pyLH*A6LuqA%LR`>~9 zR0^yJ1r7 zj>)hG{=;^o@L!BZ{$AYai7t%6Anb*4us6oTKFGI4oW7V4`yt<0ar$FY9DvDjAg07Y zm>LITT9*|x1U)XxJrsS6AC77t0;u+31gd=)iE1B4;Y{Mu*u6gO61s@TVkGf6Y)w2K zbv~Yex*nLQ>Gaztq5AQYQP&4k@bYx}fvD@SX{hUo>6o(%?G?sjzVETj0NN`|$e+^B z!U6Q-XX7&Zdvj2~K{FS(H=w=3Tg3CRDDBn))OFiJjG$k)2y>F&#TZRGm*6j?YbgfN zpIU}V>(URzdCa#Q!?`Z`5!F7fK(&u6QSIX@e9m>-YW%?Z)?i6oi*s7i55!Km9-s83 zABZ;V--stk|0Zn2{F^Zy>D+>u$&am=6}Mq_+>SYM2j<3|$lvEXyO6)ncXnd|+=GR1 zFBZXl$h%U`ek_3puoND|GI$8f;bE+RN3aqe#VU9VtKm;r1CL`ZJb`uaB-X=I*Z@ys zBbVhmgH7=)w!m}Pn(61UE%5~mBff|oh%ey}^ye<)k9Y-nug1QLtMMAH#p}p>L-q~i zy&?N1^4^er3wdwIzKy&$WZyyF8?x^r?+w}akoSh{`^bAk_Rq+BL-qsYy&?M{^4^gB z2zhVFevBvZ3G&{M{S?pOGdzpW@f^Ou^Y{y1z?aDTMfNM?eIolc@*a`>EAsx3{RVk& z$bO4I<8Sx?f5(UT4jOA! zUXuL}@?Mht4S6rg{ueuw54tHGL3?0hcXY5Py08!V8jT96@^$7soO^ z9!_L@e4K(II2{wI(qOHdhssPGvEW}&xlWn zefSI0GvRB@jBhauz9Su3@dIYVPnaG5#2m=qM7VO|SImX~vfkY2c5~jwIJ{Gl7em}u zP(Dn;ct0k0TTXsVi3Kn<(+grc<}ZX9hznyD<}ZTTiHl+$<}Zf%7+)LYum@hmD7=EvcpZDu~%^9Kdfl0<9p+8Ho;# zLN|`aU>t*SaV*BiahM>;a*fBtL6&<0CTILaOo@{)HBQE~I0Zv-DyGM2=*8)nk@d{L z%=kTK!9XJH=Zn~nK!4(7+XSP=|SQZ^nKsw*?2_Rvd)ea0qV4VYmYWxD!X>E*y=!k-x!m_TYHjixY7lPR9K>6%XKa zJc!@pA)JMWaSk5Ad3Y2Tus_Fe3Gq+343Fb-Jb^2ieiGNPKc{d#<4@y8JcFC@EN;bf z$UCpjdEAK?kat;~i?|mr;eNb~2k{CXX1!PO81Xecj@R)d<8R;@you)-e+w^?p4-Ut zch?={y;tWh^4_a+4|(6!xsUhoXXHIs*8_Zn5AiAEAK`O+jJ(h4JVD-Lb)Mp{_zd6T zbNn4&;CuW9KjKULgY~__FZde2;;;BGzCm84biKtO{0-yc?-+vbFcH4Tr1$|-;73f2 zpYS{U1JmQ5m;payCj5d~@h{AQe`9X^iuv##EP&szF#e0ha3Oy@K)Y`*!de);iuQVy zWq-!3HvI~0h^^L99~s{oi>~AT4n{hb-4+`VN8n^)Jwz|bOO!U2MhDBH3(K=TH&((R ztQu@p2*&D6PmVP)1=hxtSQk@aeN2sfE78e-kAo~bBkJ!kd`Q0AneZBB#=DpW$!|L= z-p6c6zS`N5e6@36E_KO~Z!J3YuxGGk*Ecr6LBtJ>jf{ijFn;M%Ln;To;aHh93 zwlcOhw!wi+Z)}Kq4?13wp9%YO+ z_B6)eD5m!^_BQr0_QjD*?`Q099AF%XW0*e3IM_JEI26Y+eVB2$F<=~llbJr!I0`2b zk2a3MDa2!q<8U1Dc;f_|OFYpy38xcJHcr7c#8ZvajMI%Xa1+zNH_kN9GS0?rOrK+% zYn*4Ck6W0&z_`%3$ha8yGJT10Defa)X8ggp-1s9NX8H=_N<2cm%DCFN#<&&_GJTzK zy>WwaBk~v{#Ck~FsxHu8xA@#+Hk5e%ODeq1K z{2mkHEKG!RFfq=>7yo>qqJ{G_SSP&m!A$)>`@fjAu7g!WuVljM; z#qkZ6z~8VWzQa=Z0ZZd2EQ5byS^R?K@NX=S|6m3D7b~L8Z-iDt7goj~tb%c{D#pWV z7=qO?A=bdeSQC?CEliHJF(uZ))L0kOVm%DS`j{RYpcflrMr?$curX%ACYTMIVh(JE zxv)9r!4{YgTVj4}g$1!S7REMMG>+wJizTofmd5s24#Th_hGP}%fYn*9Bi6)DSQ|TI zUF?GOF#;Q6S8R-t*c7{AbL@^Su?M!sC~S+-*dBXgIL2T{?1i1NH%4F|jKsd!9s6Mv z_Q#$$0DIv;?1O`_9}dO=I0OgbP#l88a2O8900wX*j=<44635~w9FL=MB96hyI2Nbk zIGm2-@q3(rvv4BL!AUp|C*uN~f{Sn}F2QNI45#CAoPjIwdt8MxaShJGbvPS0;2hk9 zb8!pK!)-Vpci;ltg$r>HF2a4d7!TkQJcLW}2rk28_yZot<#-Z*#M8I}&*DlvkE`$^ zuExu_2Cw2;ypHSeCa%ZZxB>6tM!b)k@BwbdN4N!_;8uKw+wcW$$CtPRU*k@EgS+rI z+>P&W4}QSC_zCynpST~t-~s#_58^*~2>->yXvgLH3te~=gYX!}!JjZ59>)+ofeG;> zCdN~k6i;JvJcB9mET+bDm=@1tC|s%Wqg8F@hMivXIK-TV{Lqa zb@3Ohk1w$yzQV@%8k^#;*c{(rOMHv1@i%OXzhirRhvE1hJI3Yu3%lS)jKojagXw=@ zH2#S(_!)cS7wn6FVSoG^2jW*8jQ`+J{D#BvUmStfKlHQF#xdyNICS9z{D0luXSCGR zqxbO{j!08_SCrm+?{Mh7cLk(M?;r>w*b6G6pkM_AL6DAshz%8c$KJu-Q0(&8`~8mD zWA1sl&suk_=hgEf>$8*W>?He_N#@KXb56k}m>sXjQ*kNgz-5>dZ^m4>0(0Z7m%bGU&YG!I#$6quqwWV z)$kpxj_+X&`~Yj>M_3C#!P)>Zt7r(%I_!ZX2Z?FM=hYj% ztMDzn4d2Dv@dLaAKgK)pDBgviVu?jwb)o~Bj z!oA4#{0XPw&o~Qz!MXS=F2LV#5&n*svHTx+W$r}5KXGO5 zM9veqn)&&8sDxX#lLauz_j3g?8y3Q*Oe&1cun6)9O0p=n!eUsIdd0CAmcWXo6PdNK z0@lI8r4z}zSP1LkaF(kd*#Iju-Vm!`Bb<+o@gi)3g=x1b7QtqiADd$VY=OD4CFa3a zm=jxLF3iN!unnG$Z80yl!+h8g&tW~Ca42@hmTY&I$gYvyBDKYV+K+?K{uzw+!w|F|&O!U(T(lpCqWv%o?T6u5j_K!NMI3?L zf}b3Tey%tQx%ECd8k^%7Y>8vB1&+gWaXfNse{up=z=_xzr{TKX{9S_g;tbq~vv3p6 z!Ta$7+=_E?JI=$Mcp>h_`M3uc;6A(v_v1o5fEVKHT_|nK5BbPCk;UN#uKjzAzeo0f^f5j*9H#~&D<1_dNK8Jte3wQ!w!sOroocFRJk18fJ(DT?S=y@nR zdLB9zJ+I}!N|+NpKjuQukGawFT^{s&cN%*BJsmyotSE4k3Q$t0Q+M@^!cqu=yPt3(dXQnpwGEA#Ua=Xy?!=FuO}_g z>u5_HhOKZow#M@?6Gvbh9Eojl6t=_B*dE7V2ONtX@qFxr2XB(EHskLhpB5h~DpZF?zq-BJ_T@#rPOrg5K|TDSE%#W$68G zm!tQ)U4h>3b|reh+g11iUX9-Gb`5&J+qLNZZcEVn-L6CLce@_F-|YtUez&FQ{cbm+ z_q#2_kMSn_1aC&~cUz9$@3sQH-|ZIkez#lE``uQe_q(k^?{~Wmzs1|p``zxq<9H{o z#JiB+>Q3H`JY$f#8tdR1tcz>09^QlXaUC|m_1F;a#YVUR8{n?tZE+X2!`;{(AHWW{2Rq_k?1cNUGd_r2a6j@4NajP> z4G&;DJ+ecnJI9v)CV>!vXj_4#XF55Wa|m@g*FBuOiQY zWWI*y;_EmR592U=1Bc_AcpkokBk)}uiSOYk{0P_Z68sp~;wQKnkKk6i>?p2h{8L%gh#bsz_N9mt7Z2Xdj;f!yeIAP;&SI1RlHoQ_@x@}k#)eCTx`KYAS~fL;d* zqSt{!=yjkldL1Z&UI&Vz*MVZ_b)YzU9Vmfb2TG#n^)t}(`kCl?y%c(0KMOstpN*c^ zOQYxYGU$1|EP7rqho0BVqv!Ps=y|;&dS0)Dp4Tg*=k+S+dA%xnUay9p*Q=xF^&04T zy(W5IuZ5o1Yoq7&I_P=5E_zkG@qtuKF!d4nxpx& zK=Wyd=Fe8HDCC7|mq}n#(z8F6W}T3`KJphUPLH z&E-5aml0?#Bhg$&p}CAka~Xr?G8WC{d^DGFXfET?TqdBoOhj{;gyu3C&1DLj%TzR% zX=pCf(OhPrxy(d!nT6&u8_i`7n#%=fE_2ab=ApS)on$HR}pIgv;ZbkE1iRQBk&F3~WpWD%V?nHCB3(aK>n!`G@ z-`Au4z7g%``_O*gg!c1hw4b-2{ks+I-)(6BZb$of2im_o(f-|q_U~@Ae;+{mcMsaX zd(r;ghxYG&v|kUP{rNE3pO2vZ`6$|-kD>kfINF~F(f)iA?Z>CkemsQs31{9KJph92iXpt<~r=5id(65p&*(=AvA}=Xbwfu{x631e{r<`OQ8K<67Byp z(EdLY?f|+ym|Bo@hV! zLi@Q7+RuH_e(s0%bAPm-2cZ2t5bftdXg?1|`*{f3&*z~1d@kD0L(zU7hW7Jtw4cvI z`*{S~&m+-(9)r=$Hn1MTmb==o9h%R2G@pCXd^Vu@Y((?956x#2n$Ko5pZn2#wxIcJ zMf2H)=Cd8mX9t?kPBfogXg<5qd>%ma*@Nb@7tLoMn$Lr1KKs#p9zydufadcsn$II> zK98dLJcj1;IGWEvG@mEXe4a$}c?!+v5Sq`^Xg<%N`8G@rN8eBMFxc^A#+Jv5*9(R@BY^Z5|X z=OZ+qkI{TSLGw9+=5rLy=TkJF&(M56NAvjt&F4!rpRdq-zDD!;2F>SNG@tL#e7;BX zIfmx*1Del|XgAOeCngGp9W|?4bglWq4_jM^J#+S(-h688JbUXG@lk|J}uFFTA}&0M)S!; z^J#D>`3y$$8G`0>4w}!oXg)*He1@U<3`g@h56x!;n$Jiy zpHXN&qtSfEp!tkN^En^QXB?W(cr>30Xg(9sd?um!Oh)sWg61<7&1V{#&vZ1O8E8H; z(R^m1`OHT1nSsQZ%0%(R`Mn`P_u& zb2FOHax|Y6Xg;@~`P_=;vl7i`6`Id&Xg;^2`P_l#b0?b5U1&acqxq~x^I3!Dvlh+g z9;}n(`j7nnNOA-6Jalp+F2noK-+|qPJRhChjLY$UT!CAV|3jPHiaa-++=l$$*yMIx zg*)&z+=)C-o!o_Y;BLGVA3&b3PVT|GaWAgMefU!bpC98|#`h!7T_+#Hb$9^RJ$d*pfSv#|kBhP^+-@qsFP4suh-@-%q zHa?B-AkT>>-^Fa~&wI%8+?ns=EBFB(!w>N=euO;#o%u1ofuEpx9zpXwistz#n&)R| zo}Z(6eu3usC7S0~Xr5oAd47ZD`7N5~cW9p9qj?@f^ZWtL^G7t#<7l2gp?Us{=J^Yn z=dWme|AXfF7n1dvL(LD2^dFDs+EP&=&5Y4j?nrC4&&mw4^MbSKq zp?MZZ^DKepSrX0j3^dO((L76`d7g#lc{ZA7X*AC=Xr5)!JjvlW_WYc$VHG|x6@o^8=Q+o5^3NAv7}=GhU=vlE(U zXEe_)Xr5isJiDQJc1QEi{?2L&2t!<=WsO7^Uyp;pm~l&^BjfdIU3D#44UUyG|%(VJjbDVjz{yH zfaW<7&2ti(=VUa`DQKQk(LAT2c}_?3oPp*!6U}oLn&)gZ&pBwG7od60Mf048=6NBS z=X^BJ1!$fZp?NMu^Sl_%a}k>7Vl>Z7&^#|i^Slhr^KvxLE6_ZzMDx4~>wB&uh>; zuSN4*g64T0n&!O??LlihvvB+>L~&kbmv8__)PL-X8( z=D8Wo^L{kXEoh!w(LA@Id2UDZ+=1q~6U}oMn&)mb&j-*v_n>+1Mf2Q;=J_C+=YBNL zhtNC^pm{!w=J^Pk=c8zzkD+-!j^=p~&GQK~&nMA5pF;CIgy#7)n&&fUp3mZYEdLz7 zk1t|v-Z#C3b?{}Zi?3ikd==~CYuEr^$A)+q8{r$+7~jMu_!ipU+h}|5pzXbjw)Y;| z-uq~KAE51hh_?3;+TO=#d!L}~9YNbWinjMD+TLeqd!M82eSx<3CEDIsXnS9y?R|r` z_buAqcW8UxqwO6-+xr1+??<$~<7j(7q3!*Qw)YF#-mhqTzoG5@j<)v)+TNdNdneHL z{)4vn7uw$6XnTq8_#fQdhsM7+Ox>TE4ZUwN1HHd7J9;16sp$QSInetibE5YT=0fjd z%Z+U@4|?C-Y3TiRr=$1L)B-0D2!|L2QGC(EBC}qxU}+LGJ@Cir(*8 z481S2IC{Tj3G_b4lIZ=4XQ1~To{3Yi6#D%2S-2X{#;I5ay&ttKy1(Vo`}r!N`&R|s zud3*NRYUiyI=Wvq(EX~3?pG~zziOlVRR`U#y6Aq@NB5@zx<3uk{b_{mPZM-MnxWg@ z2HmcX==O9*x2G$*9o^CO_dwU*6J39AbiIAh_4Y&8I}lyZV01m_pz9fm_Rny%Uq+z) zG7???XtZC>N4H}fn)`TkdnTa$GYRdN$>?@XLAPrvx?R)IewmJL-wbs7W}(|R8|{}l zXun*5ZtpyFdoM)uosVw!0yN)+Xs(OU<9IQ;{g>Kz1$sPRiSE}` z=zd*|?$@pFD5u1ELl26VrcqWg6tx?juC{kjP~j&DZyZ#lYuE71MB1>L_} z(c^d}x}U4i{k#p`&(-MutU>o@ExJGJ(EV7C?#I38er!PZV6!ID@OOJO-I zjpeZ%R=|o_5vyP&td5nj7FNN!SQQ&!HS}|y>evTsVB4_Z~pMaflB6h_|*d3Q*PxPN8^u{FiMgOs%_fO_We;2<14&-+m3*z(qK4T#~#QehO z?_(ChlKfs{Q9Q!$lovyP2e&xh!~7ChdMwu+EHj`gv;6P%GiGt*C!;H zWL5NcJgZ@sr5rE#8NXLq1N|M#ns}W3tA#mOt~UC+>2}EW!1g#A zJK*`)5hq|LoQ%Ej7W%I@e$VzF<43)H-}3|dzUN2uea~_9ea}zm`<|cC_dUO$?|Xhl z-}n56zVG=Recw|$kx1msNF?->$Yf+CWF3ii%%sh9nf1A@^mJZ7zIOaP($6A&-6Zxf z@Hu44hq5L74AR%5|C1)=LgaH!{=4))^?AJ6f9I z)M(ptMCOjH9GMZxZ_1|Xw~ut6$7D|=E@9yMnV7}EbtUDYNUkHP@$PvOiMk9gFzjI1 z#IQ1QwbSw?5{nsjMvh>+_-*0T`U*ws3$}^I3rE(&n$*ua)Me+g4h@)=btuEK4$Mkq zr>#~PhA_|ZtZi}b^7CImllJ+A#Hd)=>Dw6EM$?@?HCCQY+4&t9dN4SzF9YXI&w-wQ zQ`uT}n)NanIRB-ODUQu_nd35D_W0v?PmkB5?D6L@X*nF99P8=nmYruE%k^XBP@mUC zYMym0hv~dF(#u+QdFxnq8$&tN_t-z#z`5S@eQI9Ndhv2t&VF!kJZO3R|1iv9x`XqB zS<7MBxzurRJZRZIbzkhKYGwb=p(fL^4(@Zv!m@)|Xvo68cHDl`hLIuP#?iPLyR7Y1 zj;2+K%1#eu+YM#g4rSX9W!DkPt|ydTS17x_Posf@%Z*Q z9^WR%$Du!8}`NZnzQGZ(9a`dWzRQZy4QtJ9uq5%jg|Q>EM151!_wvP zv9i~S&<@{?rORGl!gRhPOP8m_%AUhQooTW1^jLXDtUNPTo)s(4j+N)c$`{1Sb7SRs zv9i}Rw;}86vnkUYc<$?@Lusb-EJ#9m79?>M!!-;%KjSkmsT}z2_w@c{iU_;i`ygin|GUHEjF--b_@`F;3wncs*{m-(IebeZ3ZPnY?<_;lIr91$CL zTjS$yZ+zTsj*q+D@o~33KJNC%$K8kcxcd=J)N><;lJOEoa20PmE3H_wLj6 zGyDEq=6!H_`owAfmihhr^z_QHI{XfPdOE*_pDy!z_~|mgiJva>emh;}xAD_uejh(w zp2v$Y>^r}cpDy!T`ROvhm!B>liS5gRSUY2Rs4%p{@7Jfx$)5j~55?N=7wd<~v32pA z`sroATKsSMcvSAiYm(I_+B0}=tP^S3!Sk=ykMz9jxaVB;e5;;owF!gE@Ul*6d!Y>t zgY8+iz3`d}uch!B3a_2;nhCF!@EQrPjqsWXuZ8d$2*-Xn=EJcb>g_4;&$`3$?J;bd zvmzaL8{JoRU)6n8_tpJyU$su8{Sfv~!{EMJwmr2ywLP^x>)4)cc|6;ex<0j@T2F0D zZA)!SZA)#(_Ch(dtD)^ql&R|d9o~D9E)SsGjiDcdf8!kGSY5)%8XA0sf#)ex=WoY( zCeY^(eO5CypJxCQ??h$iTh}`GFz{TX&j=>AMdOxvCer6HeU>vdZv*lirO#ZZmVE}D zW;>fAc}_D`*Ls$n_Ys5hT@TMIrpi3O=rf?HZFL^cE2idIe{(eMHdt1kmrQJl#?|e$ zF3*AbY-xH~=Y7raC_|WU+tyR}&vm;^VH(d|rs{g#bJ;MRXD8F!7+)@4b{V(NK5^NH z7~D_Sp^Gs`Mf1U2O@JwsE zPAI!wp$}XipVy?8Gc(s4w%hgd>}qNVdA!89`|t!qIHuz5hH1`!nZfPixzkj;ucOD7 z>kR$rw6H&x-S^iR+>UU3hU3BQbJ|)4+qI217~D4Zo9Bzu%ejnwz_Ycf_IZ{!wT$h0 zob!xt%IA>haZ~l2=XN{aW!+B8u4^yD+fmuJ%)@@Lp4;&rgUegyIo{NC>p0)-cAD*2 zCzPG%v1>cwcnIUxv+Tav=a!vjJuaV zB;TE<#$A`w{X0qd4BXGtQ=ivp$7no!E=1F*y76(__Ol(^R@)AGy>lJvI@If+f8#hF z%H3mS*BPd>Yw5D>7Ao^kduku4?I^pRT9@15I<2o^aGNb#KTK2mILxygriFT8n$yi7 z)U_O@g}Px{k+T1MuIBtuww-WHSU;4z$I9+|m_CE@2nP2vUJmV@Y?|vZkC_bigW3=3 zwy5(x=A5t2SLdtSrf!#7e;|YP)%t3EwZ2+EjB^i2YFyoinhe%gkE`hnqhf>m*p|V4 zvptU!$9;XcjPt|s$l>h0u&H)EPVBGo3~pc7*x>fq)+`2(Ti37FQ`>eumgh1!e`KWX zg=MT~+4Z}T`o%P@z*ez9%)(|vT=%vjlTi+>N*jjR{x`NZj- z!?a;!qe#zNPWPOpwo^M+4()1a+j3~%a#)AuupY}{U6#Z8EQfVk4(qk;uwKi~b9*d@ z^=eqJ<*;7MVZD~adM$_bS`O>A9M)@lVZD~add=12&fGjNguz@b$ESyBVfw|%e~y`% z)brSxm7NS3)b9#(BEv$4Fnuy*{!fGdiy=|*)PKH9hu8DjE+y z9gPQHj>fafZ!D$S$tvHSr>65Ac}l(u|8MpDj-xVz_0)RGciSng@3`%%_4yt=RbQ>I z)>rGR^|cEF-U`I2JL>#UR>y7IdFnKEI^W}`rmNG{dFp(=&reNP$N7Ff zRbQ>I)>r3q|3GTGI?ng_DY;J|wVXPg@AXsT>Nxigq{h{D)pj+^cYhssf7>uvPo1yM zSLe57@H;7Wzt#F`yUM){DP7)imsgi}p3AArsmrPL)%t3Er^Wl;aqDXstZ&)+9T=>y zwy)M#>!|hB`W+dpug+KJtMeV4uePVQr(vDecie&dEfUihxIZJM^BgbDYqlHqj>_F* z#6nB zdTKqjUg&S@T2GxH%IdhwI!_({-<+RZ=6`#h`hRtP^0;sx)a~{-a6i=P>h@{;c(H6f zwVql}ZAa}t%ke&QJoJ&}4$*wI9d*8j`L^R=JE2Vt$C1;!Fu1(Byt=$vw_-G|j-Tv! zuzuBOe#l*|AFeCvIQNC6+E>R<)<0qUgVxKsU9FkcgP}Kr<#2wo9L`T(lYHH%%X=+y zTpjmX!0{BoIa~|ewota6aITM+Z8J=_P0RM1L)LOw zm($~A+jCt`59OfkgtCUR>$U8Bmks4m$M(arVO^n)7hOASay2YM(bO4U*gj(`x*)D zgx7`j!|`u99K)7Fj-edZ>$vT!L)d=Hp^k=fIF_6r`qpxoZdg7Iv=jP2 z)C>I+w$pl{zUBDz__CpYY~QxR_Pb0d`??70H81PMx5s($*QWjHG>6d7)(`8oY#q1h zRR;Gxls!*dcJP>V-2HI9UMFoc>@)Ynr`rkrWF6PpiNQ9UuCCMeobG(5*;d#NkBNBM zzooKni_@~U=d`SC+Hbb+yig8pxeadP^9*5{^}I&;en%be7TGyXk6X4vRNz_jRz}4gP^=4ye@`{On2nd`kU1O8uNm{ftZf zd`taoOZ{9+{Y*x6)X3SmHWiXePiW*v2y=dc|fc@FjgKED-Vv9heYMV1Y!F{ z(0;OiT;BQayY0FkYCY$xgWK-lJeP5K>jtgsxcg$+KAX>ax-#sH2G?Jm4<22=W$(iY lW$(`k<*T{pB$WL=DU`V%Jzait&cEgNS!t*> 16) & 0xFF)))); @@ -146,11 +93,12 @@ static CFIndex __CFUniCharRecursivelyDecomposeCharacter(UTF32Char character, UTF uint32_t value = __CFUniCharGetMappedValue((const __CFUniCharDecomposeMappings *)__CFUniCharDecompositionTable, __CFUniCharDecompositionTableLength, character); CFIndex length = CFUniCharConvertFlagToCount(value); UTF32Char firstChar = value & 0xFFFFFF; - UTF32Char *mappings = (length > 1 ? __CFUniCharMultipleDecompositionTable + firstChar : &firstChar); + const UTF32Char * firstMappings = (length > 1 ? __CFUniCharMultipleDecompositionTable + firstChar : &firstChar); CFIndex usedLength = 0; if (maxBufferLength < length) return 0; + UTF32Char *mappings = (UTF32Char *)firstMappings; if (value & kCFUniCharRecursiveDecompositionFlag) { usedLength = __CFUniCharRecursivelyDecomposeCharacter(*mappings, convertedChars, maxBufferLength - length); @@ -178,7 +126,6 @@ static CFIndex __CFUniCharRecursivelyDecomposeCharacter(UTF32Char character, UTF #define HANGUL_NCOUNT (HANGUL_VCOUNT * HANGUL_TCOUNT) CFIndex CFUniCharDecomposeCharacter(UTF32Char character, UTF32Char *convertedChars, CFIndex maxBufferLength) { - __CFUniCharLoadDecompositionTable(); if (character >= HANGUL_SBASE && character <= (HANGUL_SBASE + HANGUL_SCOUNT)) { CFIndex length; @@ -217,8 +164,6 @@ bool CFUniCharDecomposeWithErrorLocation(const UTF16Char *src, CFIndex length, C // kCFNotFound indicates an insufficiently sized buffer, which is the default failure case. if (charIndex) *charIndex = kCFNotFound; - __CFUniCharLoadDecompositionTable(); - while ((length - segmentLength) > 0) { currentChar = *(src++); @@ -353,15 +298,13 @@ CF_INLINE void __CFUniCharMoveBufferFromEnd1(UTF32Char *convertedChars, CFIndex while (convertedChars > limit) *(--dstP) = *(--convertedChars); } -CF_PRIVATE CFIndex CFUniCharCompatibilityDecompose(UTF32Char *convertedChars, CFIndex length, CFIndex maxBufferLength) { +CFIndex CFUniCharCompatibilityDecompose(UTF32Char *convertedChars, CFIndex length, CFIndex maxBufferLength) { UTF32Char currentChar; UTF32Char buffer[MAX_COMP_DECOMP_LEN]; const UTF32Char *bufferP; const UTF32Char *limit = convertedChars + length; CFIndex filledLength; - if (NULL == __CFUniCharCompatibilityDecompositionTable) __CFUniCharLoadCompatibilityDecompositionTable(); - while (convertedChars < limit) { currentChar = *convertedChars; diff --git a/Sources/CoreFoundation/CFUnicodePrecomposition.c b/Sources/CoreFoundation/CFUnicodePrecomposition.c index fe2d34603f..1a5664ce74 100644 --- a/Sources/CoreFoundation/CFUnicodePrecomposition.c +++ b/Sources/CoreFoundation/CFUnicodePrecomposition.c @@ -15,46 +15,17 @@ #include "CFUnicodePrecomposition.h" #include "CFInternal.h" #include "CFUniCharPriv.h" +#include "CFUniCharPrecompositionData.inc.h" +#include "CFUniCharBitmapData.inc.h" +#include "CFUniCharPropertyDatabase.inc.h" // Canonical Precomposition -static UTF32Char *__CFUniCharPrecompSourceTable = NULL; -static uint32_t __CFUniCharPrecompositionTableLength = 0; -static uint16_t *__CFUniCharBMPPrecompDestinationTable = NULL; -static uint32_t *__CFUniCharNonBMPPrecompDestinationTable = NULL; -static const uint8_t *__CFUniCharNonBaseBitmapForBMP_P = NULL; // Adding _P so the symbol name is different from the one in CFUnicodeDecomposition.c -static const uint8_t *__CFUniCharCombiningClassForBMP = NULL; - -static CFLock_t __CFUniCharPrecompositionTableLock = CFLockInit; - -static void __CFUniCharLoadPrecompositionTable(void) { - - __CFLock(&__CFUniCharPrecompositionTableLock); - - if (NULL == __CFUniCharPrecompSourceTable) { - const uint32_t *bytes = (const uint32_t *)CFUniCharGetMappingData(kCFUniCharCanonicalPrecompMapping); - uint32_t bmpMappingLength; - - if (NULL == bytes) { - __CFUnlock(&__CFUniCharPrecompositionTableLock); - return; - } - - __CFUniCharPrecompositionTableLength = *(bytes++); - bmpMappingLength = *(bytes++); - __CFUniCharPrecompSourceTable = (UTF32Char *)bytes; - __CFUniCharBMPPrecompDestinationTable = (uint16_t *)((intptr_t)bytes + (__CFUniCharPrecompositionTableLength * sizeof(UTF32Char) * 2)); - __CFUniCharNonBMPPrecompDestinationTable = (uint32_t *)(((intptr_t)__CFUniCharBMPPrecompDestinationTable) + bmpMappingLength); - - __CFUniCharNonBaseBitmapForBMP_P = CFUniCharGetBitmapPtrForPlane(kCFUniCharNonBaseCharacterSet, 0); - __CFUniCharCombiningClassForBMP = (const uint8_t *)CFUniCharGetUnicodePropertyDataForPlane(kCFUniCharCombiningProperty, 0); - } - - __CFUnlock(&__CFUniCharPrecompositionTableLock); -} +static const uint8_t *__CFUniCharNonBaseBitmapForBMP_P = (const uint8_t *)__CFUniCharNonBaseCharacterSetBitmapPlane0; // Adding _P so the symbol name is different from the one in CFUnicodeDecomposition.c +static const uint8_t *__CFUniCharCombiningClassForBMP = (const uint8_t *)__CFUniCharCombiningPriorityTablePlane0; // Adding _P so the symbol name is different from the one in CFUnicodeDecomposition.c -#define __CFUniCharIsNonBaseCharacter __CFUniCharIsNonBaseCharacter_P +#define __CFUniCharIsNonBaseCharacter __CFUniCharIsNonBaseCharacter_P CF_INLINE bool __CFUniCharIsNonBaseCharacter(UTF32Char character) { return CFUniCharIsMemberOfBitmap(character, (character < 0x10000 ? __CFUniCharNonBaseBitmapForBMP_P : CFUniCharGetBitmapPtrForPlane(kCFUniCharNonBaseCharacterSet, ((character >> 16) & 0xFF)))); } @@ -73,7 +44,7 @@ static UTF16Char __CFUniCharGetMappedBMPValue(const __CFUniCharPrecomposeBMPMapp p = theTable; q = p + (numElem-1); while (p <= q) { - divider = p + ((q - p) >> 1); /* divide by 2 */ + divider = p + ((q - p) >> 1); /* divide by 2 */ if (character < divider->_key) { q = divider - 1; } else if (character > divider->_key) { p = divider + 1; } else { return divider->_value; } @@ -95,7 +66,7 @@ static uint32_t __CFUniCharGetMappedValue_P(const __CFUniCharPrecomposeMappings p = theTable; q = p + (numElem-1); while (p <= q) { - divider = p + ((q - p) >> 1); /* divide by 2 */ + divider = p + ((q - p) >> 1); /* divide by 2 */ if (character < divider->_key) { q = divider - 1; } else if (character > divider->_key) { p = divider + 1; } else { return divider->_value; } @@ -107,8 +78,6 @@ CF_PRIVATE UTF32Char CFUniCharPrecomposeCharacter(UTF32Char base, UTF32Char combining) { uint32_t value; - if (NULL == __CFUniCharPrecompSourceTable) __CFUniCharLoadPrecompositionTable(); - if (!(value = __CFUniCharGetMappedValue_P((const __CFUniCharPrecomposeMappings *)__CFUniCharPrecompSourceTable, __CFUniCharPrecompositionTableLength, combining))) return 0xFFFD; // We don't have precomposition in non-BMP @@ -148,8 +117,6 @@ bool CFUniCharPrecompose(const UTF16Char *characters, CFIndex length, CFIndex *c bool currentBaseIsBMP = true; bool isPrecomposed; - if (NULL == __CFUniCharPrecompSourceTable) __CFUniCharLoadPrecompositionTable(); - while (length > 0) { currentChar = *(characters++); --length; diff --git a/Sources/CoreFoundation/include/CFBase.h b/Sources/CoreFoundation/include/CFBase.h index 6f42ca3790..e73dd5a3a7 100644 --- a/Sources/CoreFoundation/include/CFBase.h +++ b/Sources/CoreFoundation/include/CFBase.h @@ -7,8 +7,6 @@ See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors */ -#include "CoreFoundation_Prefix.h" - #if !defined(__COREFOUNDATION_CFBASE__) #define __COREFOUNDATION_CFBASE__ 1 @@ -67,14 +65,14 @@ #include -#if __BLOCKS__ && (TARGET_OS_OSX || TARGET_OS_IPHONE) -#include "Block.h" -#endif - #if (TARGET_OS_OSX || TARGET_OS_IPHONE) && !DEPLOYMENT_RUNTIME_SWIFT #include #endif +#if TARGET_OS_MAC +#include +#endif + #if !defined(__MACTYPES__) #if !defined(_OS_OSTYPES_H) typedef bool Boolean; @@ -161,20 +159,6 @@ CF_EXTERN_C_BEGIN #define FALSE 0 #endif -#if !defined(CF_INLINE) - #if defined(__GNUC__) && (__GNUC__ == 4) && !defined(DEBUG) - #define CF_INLINE static __inline__ __attribute__((always_inline)) - #elif defined(__GNUC__) - #define CF_INLINE static __inline__ - #elif defined(__cplusplus) - #define CF_INLINE static inline - #elif defined(_MSC_VER) - #define CF_INLINE static __inline - #elif TARGET_OS_WIN32 - #define CF_INLINE static __inline__ - #endif -#endif - // Marks functions which return a CF type that needs to be released by the caller but whose names are not consistent with CoreFoundation naming rules. The recommended fix to this is to rename the functions, but this macro can be used to let the clang static analyzer know of any exceptions that cannot be fixed. // This macro is ONLY to be used in exceptional circumstances, not to annotate functions which conform to the CoreFoundation naming rules. #ifndef CF_RETURNS_RETAINED @@ -238,23 +222,6 @@ CF_EXTERN_C_BEGIN #if __has_attribute(objc_bridge) && __has_feature(objc_bridge_id) && __has_feature(objc_bridge_id_on_typedefs) -#ifdef __OBJC__ -@class NSArray; -@class NSAttributedString; -@class NSString; -@class NSNull; -@class NSCharacterSet; -@class NSData; -@class NSDate; -@class NSTimeZone; -@class NSDictionary; -@class NSError; -@class NSLocale; -@class NSNumber; -@class NSSet; -@class NSURL; -#endif - #define CF_BRIDGED_TYPE(T) __attribute__((objc_bridge(T))) #define CF_BRIDGED_MUTABLE_TYPE(T) __attribute__((objc_bridge_mutable(T))) #define CF_RELATED_TYPE(T,C,I) __attribute__((objc_bridge_related(T,C,I))) @@ -318,6 +285,12 @@ CF_EXTERN_C_BEGIN #define CF_WARN_UNUSED_RESULT #endif +#if __has_attribute(fallthrough) +#define CF_FALLTHROUGH __attribute__((fallthrough)) +#else +#define CF_FALLTHROUGH +#endif + #if !__has_feature(objc_generics_variance) #ifndef __covariant #define __covariant @@ -327,6 +300,19 @@ CF_EXTERN_C_BEGIN #endif #endif +#if !defined(CF_INLINE) + #if defined(__GNUC__) && (__GNUC__ == 4) && !defined(DEBUG) + #define CF_INLINE static __inline__ __attribute__((always_inline)) + #elif defined(__GNUC__) + #define CF_INLINE static __inline__ + #elif defined(__cplusplus) + #define CF_INLINE static inline + #elif defined(_MSC_VER) + #define CF_INLINE static __inline + #elif TARGET_OS_WIN32 + #define CF_INLINE static __inline__ + #endif +#endif CF_EXPORT double kCFCoreFoundationVersionNumber; diff --git a/Sources/CoreFoundation/include/CFBigNumber.h b/Sources/CoreFoundation/include/CFBigNumber.h index b7154dcb6c..f04a168118 100644 --- a/Sources/CoreFoundation/include/CFBigNumber.h +++ b/Sources/CoreFoundation/include/CFBigNumber.h @@ -10,10 +10,11 @@ #if !defined(__COREFOUNDATION_CFBIGNUMBER__) #define __COREFOUNDATION_CFBIGNUMBER__ 1 +#include + #include "CFBase.h" #include "CFNumber.h" - // Base 1 billion number: each digit represents 0 to 999999999 typedef struct { uint32_t digits[5]; diff --git a/Sources/CoreFoundation/include/CFBundlePriv.h b/Sources/CoreFoundation/include/CFBundlePriv.h index b1250f7ce8..1a823b3183 100644 --- a/Sources/CoreFoundation/include/CFBundlePriv.h +++ b/Sources/CoreFoundation/include/CFBundlePriv.h @@ -261,15 +261,6 @@ CFURLRef /* Nullable */ _CFBundleCopyWrappedBundleURL(CFBundleRef bundle) API_AV CF_EXPORT CFURLRef /* Nullable */ _CFBundleCopyWrapperContainerURL(CFBundleRef bundle) API_AVAILABLE(macos(10.16), ios(14.0), watchos(7.0), tvos(14.0)); -#if TARGET_OS_OSX || TARGET_OS_IPHONE -#include -CF_EXPORT -void _CFBundleSetupXPCBootstrap(xpc_object_t bootstrap) API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)); - -CF_EXPORT -void _CFBundleSetupXPCBootstrapWithLanguages(xpc_object_t bootstrap, CFArrayRef appleLanguages) API_AVAILABLE(macos(10.16), ios(14.0), watchos(7.0), tvos(14.0)); -#endif - #if TARGET_OS_MAC CF_EXPORT cpu_type_t _CFBundleGetPreferredExecutableArchitecture(CFBundleRef bundle) API_AVAILABLE(macos(10.16)) API_UNAVAILABLE(ios, watchos, tvos); diff --git a/Sources/CoreFoundation/include/CFMessagePort.h b/Sources/CoreFoundation/include/CFMessagePort.h index e0615e4615..3a6af82e6d 100644 --- a/Sources/CoreFoundation/include/CFMessagePort.h +++ b/Sources/CoreFoundation/include/CFMessagePort.h @@ -13,7 +13,6 @@ #include "CFString.h" #include "CFRunLoop.h" #include "CFData.h" -#include CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN @@ -60,8 +59,6 @@ CF_EXPORT SInt32 CFMessagePortSendRequest(CFMessagePortRef remote, SInt32 msgid, CF_EXPORT CFRunLoopSourceRef CFMessagePortCreateRunLoopSource(CFAllocatorRef allocator, CFMessagePortRef local, CFIndex order); -CF_EXPORT void CFMessagePortSetDispatchQueue(CFMessagePortRef ms, dispatch_queue_t queue) API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); - CF_EXTERN_C_END CF_IMPLICIT_BRIDGING_DISABLED diff --git a/Sources/CoreFoundation/include/CFOverflow.h b/Sources/CoreFoundation/include/CFOverflow.h index 800b33174b..daa1c9a188 100644 --- a/Sources/CoreFoundation/include/CFOverflow.h +++ b/Sources/CoreFoundation/include/CFOverflow.h @@ -9,28 +9,23 @@ #ifndef CFOverflow_h #define CFOverflow_h -#include "CoreFoundation_Prefix.h" #include "CFBase.h" -#if __has_include() -#include -#else - static bool __os_warn_unused(bool x) __attribute__((__warn_unused_result__)); - static bool __os_warn_unused(bool x) { return x; } +static bool __os_warn_unused(bool x) __attribute__((__warn_unused_result__)); +static bool __os_warn_unused(bool x) { return x; } - #if __has_builtin(__builtin_add_overflow) && \ - __has_builtin(__builtin_sub_overflow) && \ - __has_builtin(__builtin_mul_overflow) +#if __has_builtin(__builtin_add_overflow) && \ +__has_builtin(__builtin_sub_overflow) && \ +__has_builtin(__builtin_mul_overflow) - #define os_add_overflow(a, b, res) __os_warn_unused(__builtin_add_overflow((a), (b), (res))) - #define os_sub_overflow(a, b, res) __os_warn_unused(__builtin_sub_overflow((a), (b), (res))) - #define os_mul_overflow(a, b, res) __os_warn_unused(__builtin_mul_overflow((a), (b), (res))) + #define os_add_overflow(a, b, res) __os_warn_unused(__builtin_add_overflow((a), (b), (res))) + #define os_sub_overflow(a, b, res) __os_warn_unused(__builtin_sub_overflow((a), (b), (res))) + #define os_mul_overflow(a, b, res) __os_warn_unused(__builtin_mul_overflow((a), (b), (res))) - #else - #error Missing compiler support for overflow checking - #endif -#endif // __has_include() +#else + #error Missing compiler support for overflow checking +#endif typedef CF_ENUM(uint8_t, _CFOverflowResult) { _CFOverflowResultOK = 0, diff --git a/Sources/CoreFoundation/include/CFRunLoop.h b/Sources/CoreFoundation/include/CFRunLoop.h index 006f4dc096..e3cf929e8b 100644 --- a/Sources/CoreFoundation/include/CFRunLoop.h +++ b/Sources/CoreFoundation/include/CFRunLoop.h @@ -101,6 +101,34 @@ typedef struct { void (*perform)(void *info); } CFRunLoopSourceContext; +#if TARGET_OS_MAC +typedef mach_port_t __CFPort; +#elif TARGET_OS_WIN32 || TARGET_OS_CYGWIN +typedef HANDLE __CFPort; +#elif TARGET_OS_LINUX +typedef int __CFPort; // eventfd/timerfd descriptor +#elif TARGET_OS_BSD +typedef uint64_t __CFPort; +#else +typedef void * __CFPort; +#endif + +typedef struct { + CFIndex version; + void * info; + const void *(*retain)(const void *info); + void (*release)(const void *info); + CFStringRef (*copyDescription)(const void *info); + Boolean (*equal)(const void *info1, const void *info2); + CFHashCode (*hash)(const void *info); + __CFPort (*getPort)(void *info); +#if TARGET_OS_OSX || TARGET_OS_IPHONE + void * (*perform)(void *msg, CFIndex size, CFAllocatorRef allocator, void *info); +#else + void (*perform)(void *info); +#endif +} CFRunLoopSourceContext1; + CF_EXPORT CFTypeID CFRunLoopSourceGetTypeID(void); CF_EXPORT CFRunLoopSourceRef CFRunLoopSourceCreate(CFAllocatorRef allocator, CFIndex order, CFRunLoopSourceContext *context); diff --git a/Sources/CoreFoundation/include/CFString_Private.h b/Sources/CoreFoundation/include/CFString_Private.h index 3214c364a4..2f5a03306b 100644 --- a/Sources/CoreFoundation/include/CFString_Private.h +++ b/Sources/CoreFoundation/include/CFString_Private.h @@ -17,31 +17,6 @@ CF_EXPORT CFStringRef _Nullable _CFStringCreateTaggedPointerString(const uint8_t // Not all languages or regions use the vocative case, so very often, this will return \c givenName as-is. CF_EXPORT CFStringRef _Nullable _CFStringCopyVocativeCaseOfGivenName(CFStringRef givenName, CFLocaleRef locale) API_UNAVAILABLE(macos, ios, watchos, tvos); -#if __OBJC__ - -/* - Should only be used by CFString or Swift String. - Preconditions: - • buffer is guaranteed to be TAGGED_STRING_CONTAINER_LEN bytes - • str is guaranteed to be tagged - - No encoding conversion will be done, you're expected to already know that you wanted ascii/utf8/latin1 - - Adding additional arguments to this function should be done with care; it's intentionally minimal to avoid pushing a stack frame. - */ -CF_EXPORT CFIndex _NSTaggedPointerStringGetBytes(CFStringRef str, uint8_t * _Nullable buffer) - API_UNAVAILABLE(macos, ios, watchos, tvos); - -/* - Should only be used by CFString or Swift String. - Preconditions: - • str is guaranteed to be tagged - */ -CF_EXPORT CFIndex _NSTaggedPointerStringGetLength(CFStringRef str) - API_UNAVAILABLE(macos, ios, watchos, tvos); - -#endif - /* If a process is loading strings manually from an Apple bundle, that process should use this call to ensure that any Markdown is parsed and inflected before using the string. If a process is using CFCopyLocalizedString…, CFBundleCopyLocalizedString, or the Foundation counterparts, this step is unnecessary, as those calls will do it for you if needed. diff --git a/Sources/CoreFoundation/include/CFUniChar.h b/Sources/CoreFoundation/include/CFUniChar.h index 9501e0efe7..ace5a8c423 100644 --- a/Sources/CoreFoundation/include/CFUniChar.h +++ b/Sources/CoreFoundation/include/CFUniChar.h @@ -16,8 +16,8 @@ CF_EXTERN_C_BEGIN -#define kCFUniCharBitShiftForByte (3) -#define kCFUniCharBitShiftForMask (7) +#define kCFUniCharBitShiftForByte (3) +#define kCFUniCharBitShiftForMask (7) CF_INLINE bool CFUniCharIsSurrogateHighCharacter(UniChar character) { return ((character >= 0xD800UL) && (character <= 0xDBFFUL) ? true : false); @@ -92,12 +92,12 @@ enum { kCFUniCharBitmapAll = (uint8_t)1 }; -enum { +typedef enum { kCFUniCharToLowercase = 0, kCFUniCharToUppercase, kCFUniCharToTitlecase, kCFUniCharCaseFold -}; +} _CFUniCharCasemapType; enum { kCFUniCharCaseMapFinalSigma = (1UL << 0), @@ -107,7 +107,7 @@ enum { kCFUniCharCaseMapGreekTonos = (1UL << 4) }; -CF_EXPORT CFIndex CFUniCharMapCaseTo(UTF32Char theChar, UTF16Char *convertedChar, CFIndex maxLength, uint32_t ctype, uint32_t flags, const uint8_t *langCode); +CF_EXPORT CFIndex CFUniCharMapCaseTo(UTF32Char theChar, UTF16Char *convertedChar, CFIndex maxLength, _CFUniCharCasemapType ctype, uint32_t flags, const uint8_t *langCode); enum { kCFUniCharBiDiPropertyON = 0, diff --git a/Sources/CoreFoundation/include/CFUnicodeDecomposition.h b/Sources/CoreFoundation/include/CFUnicodeDecomposition.h index 572753260f..0bded1f6c0 100644 --- a/Sources/CoreFoundation/include/CFUnicodeDecomposition.h +++ b/Sources/CoreFoundation/include/CFUnicodeDecomposition.h @@ -2,7 +2,6 @@ CFUnicodeDecomposition.h CoreFoundation - Created by aki on Wed Oct 03 2001. Copyright (c) 2001-2019, Apple Inc. and the Swift project authors Portions Copyright (c) 2014-2019, Apple Inc. and the Swift project authors @@ -19,13 +18,12 @@ CF_EXTERN_C_BEGIN CF_INLINE bool CFUniCharIsDecomposableCharacter(UTF32Char character, bool isHFSPlusCanonical) { - if (isHFSPlusCanonical && !isHFSPlusCanonical) return false; // hack to get rid of "unused" warning + if (isHFSPlusCanonical && !isHFSPlusCanonical) return false; // hack to get rid of "unused" warning if (character < 0x80) return false; return CFUniCharIsMemberOf(character, kCFUniCharHFSPlusDecomposableCharacterSet); } CF_EXPORT CFIndex CFUniCharDecomposeCharacter(UTF32Char character, UTF32Char *convertedChars, CFIndex maxBufferLength); - CF_EXPORT bool CFUniCharDecompose(const UTF16Char *src, CFIndex length, CFIndex *consumedLength, void *dst, CFIndex maxLength, CFIndex *filledLength, bool needToReorder, uint32_t dstFormat, bool isHFSPlus); CF_EXPORT bool CFUniCharDecomposeWithErrorLocation(const UTF16Char *src, CFIndex length, CFIndex *consumedLength, void *dst, CFIndex maxLength, CFIndex *filledLength, bool needToReorder, uint32_t dstFormat, bool isHFSPlus, CFIndex *charIndex); diff --git a/Sources/CoreFoundation/include/CFUnicodePrecomposition.h b/Sources/CoreFoundation/include/CFUnicodePrecomposition.h index 8c48141df4..64533e323a 100644 --- a/Sources/CoreFoundation/include/CFUnicodePrecomposition.h +++ b/Sources/CoreFoundation/include/CFUnicodePrecomposition.h @@ -2,7 +2,6 @@ CFUnicodePrecomposition.h CoreFoundation - Created by aki on Wed Oct 03 2001. Copyright (c) 2001-2019, Apple Inc. and the Swift project authors Portions Copyright (c) 2014-2019, Apple Inc. and the Swift project authors @@ -17,9 +16,7 @@ #include "CFUniChar.h" CF_EXTERN_C_BEGIN - CF_EXPORT bool CFUniCharPrecompose(const UTF16Char *characters, CFIndex length, CFIndex *consumedLength, UTF16Char *precomposed, CFIndex maxLength, CFIndex *filledLength); - CF_EXTERN_C_END #endif /* ! __COREFOUNDATION_CFUNICODEPRECOMPOSITION__ */ diff --git a/Sources/CoreFoundation/include/ForFoundationOnly.h b/Sources/CoreFoundation/include/ForFoundationOnly.h index a92f1e62b2..533f22f50a 100644 --- a/Sources/CoreFoundation/include/ForFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForFoundationOnly.h @@ -57,10 +57,6 @@ CF_IMPLICIT_BRIDGING_DISABLED #include #endif -#if (INCLUDE_OBJC || TARGET_OS_MAC || TARGET_OS_WIN32) && !DEPLOYMENT_RUNTIME_SWIFT -#include -#endif - #if __BLOCKS__ /* These functions implement standard error handling for reallocation. Their parameters match their unsafe variants (realloc/CFAllocatorReallocate). They differ from reallocf as they provide a chance for you to clean up a buffers contents (in addition to freeing the buffer, etc.) @@ -77,28 +73,7 @@ typedef CF_ENUM(CFOptionFlags, _CFAllocatorHint) { _CFAllocatorHintZeroWhenAllocating = 1 }; -// Arguments to these are id, but this header is non-Objc -#ifdef __OBJC__ -#define NSISARGTYPE id _Nullable -#else #define NSISARGTYPE void * _Nullable -#define BOOL bool -#endif - -CF_EXPORT BOOL _NSIsNSArray(NSISARGTYPE arg); -CF_EXPORT BOOL _NSIsNSData(NSISARGTYPE arg); -CF_EXPORT BOOL _NSIsNSDate(NSISARGTYPE arg); -CF_EXPORT BOOL _NSIsNSDictionary(NSISARGTYPE arg); -CF_EXPORT BOOL _NSIsNSObject(NSISARGTYPE arg); -CF_EXPORT BOOL _NSIsNSOrderedSet(NSISARGTYPE arg); -CF_EXPORT BOOL _NSIsNSNumber(NSISARGTYPE arg); -CF_EXPORT BOOL _NSIsNSSet(NSISARGTYPE arg); -CF_EXPORT BOOL _NSIsNSString(NSISARGTYPE arg); -CF_EXPORT BOOL _NSIsNSTimeZone(NSISARGTYPE arg); -CF_EXPORT BOOL _NSIsNSValue(NSISARGTYPE arg); -CF_EXPORT BOOL _NSIsNSCFConstantString(NSISARGTYPE arg); -CF_EXPORT BOOL _NSIsNSIndexSet(NSISARGTYPE arg); -CF_EXPORT BOOL _NSIsNSAttributedString(NSISARGTYPE arg); #pragma mark - CFBundle @@ -814,44 +789,6 @@ CF_EXPORT void *_CFCreateArrayStorage(size_t numPointers, Boolean zeroed, size_t _CF_EXPORT_SCOPE_END -#if __OBJC__ - -#define _scoped_id_array(N, C, Z, S) \ - size_t N ## _count__ = (C); \ - if (N ## _count__ > LONG_MAX / sizeof(id)) { \ - CFStringRef reason = CFStringCreateWithFormat(NULL, NULL, CFSTR("*** attempt to create a temporary id buffer which is too large or with a negative count (%lu) -- possibly data is corrupt"), N ## _count__); \ - NSException *e = [NSException exceptionWithName:NSGenericException reason:(NSString *)reason userInfo:nil]; \ - CFRelease(reason); \ - @throw e; \ - } \ - Boolean N ## _is_stack__ = (N ## _count__ <= 256) && (S); \ - if (N ## _count__ == 0) { \ - N ## _count__ = 1; \ - } \ - id N ## _scopedbuffer__ [N ## _is_stack__ ? N ## _count__ : 1]; \ - if (N ## _is_stack__ && (Z)) { \ - memset(N ## _scopedbuffer__, 0, N ## _count__ * sizeof(id)); \ - } \ - size_t N ## _unused__; \ - id * __attribute__((cleanup(_scoped_id_array_cleanup))) N ## _mallocbuffer__ = N ## _is_stack__ ? NULL : (id *)_CFCreateArrayStorage(N ## _count__, (Z), & N ## _unused__); \ - id * N = N ## _is_stack__ ? N ## _scopedbuffer__ : N ## _mallocbuffer__; \ - do {} while (0) - -// These macros create an array that is 1) either stack or buffer allocated, depending on size, and 2) automatically cleaned up at the end of the lexical scope it is declared in. -#define scoped_id_array(N, C) _scoped_id_array(N, C, false, true) -#define scoped_and_zeroed_id_array(N, C) _scoped_id_array(N, C, true, true) - -#define scoped_heap_id_array(N, C) _scoped_id_array(N, C, false, false) - -// This macro either returns the buffer while simultaneously passing responsibility for freeing it to the caller, or it returns NULL if the buffer exists on the stack, and therefore can't pass ownership. -#define try_adopt_scoped_id_array(N) (N ## _mallocbuffer__ ? ({id *tmp = N ## _mallocbuffer__; N ## _mallocbuffer__ = NULL; tmp;}) : NULL) - -CF_INLINE void _scoped_id_array_cleanup(id _Nonnull * _Nullable * _Nonnull mallocedbuffer) { - // Maybe be NULL, but free(NULL) is well defined as a no-op. - free(*mallocedbuffer); -} -#endif - // Define NS_DIRECT / NS_DIRECT_MEMBERS Internally for CoreFoundation. #ifndef NS_DIRECT diff --git a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h index 3b795a1ae7..f60cb44f4a 100644 --- a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h @@ -339,8 +339,8 @@ CF_EXPORT struct _NSCFXMLBridgeUntyped __NSCFXMLBridgeUntyped; CF_EXPORT struct _CFSwiftBridge __CFSwiftBridge; -CF_PRIVATE void *_Nullable _CFSwiftRetain(void *_Nullable t); -CF_PRIVATE void _CFSwiftRelease(void *_Nullable t); +CF_EXPORT void *_Nullable _CFSwiftRetain(void *_Nullable t); +CF_EXPORT void _CFSwiftRelease(void *_Nullable t); CF_EXPORT void _CFRuntimeBridgeTypeToClass(CFTypeID type, const void *isa); diff --git a/Sources/CoreFoundation/include/CFBundle_SplitFileName.h b/Sources/CoreFoundation/internalInclude/CFBundle_SplitFileName.h similarity index 100% rename from Sources/CoreFoundation/include/CFBundle_SplitFileName.h rename to Sources/CoreFoundation/internalInclude/CFBundle_SplitFileName.h diff --git a/Sources/CoreFoundation/include/CFICUConverters.h b/Sources/CoreFoundation/internalInclude/CFICUConverters.h similarity index 100% rename from Sources/CoreFoundation/include/CFICUConverters.h rename to Sources/CoreFoundation/internalInclude/CFICUConverters.h diff --git a/Sources/CoreFoundation/include/CFICULogging.h b/Sources/CoreFoundation/internalInclude/CFICULogging.h similarity index 100% rename from Sources/CoreFoundation/include/CFICULogging.h rename to Sources/CoreFoundation/internalInclude/CFICULogging.h diff --git a/Sources/CoreFoundation/internalInclude/CFInternal.h b/Sources/CoreFoundation/internalInclude/CFInternal.h index e17dd9ddd8..5b9f109060 100644 --- a/Sources/CoreFoundation/internalInclude/CFInternal.h +++ b/Sources/CoreFoundation/internalInclude/CFInternal.h @@ -10,7 +10,6 @@ /* NOT TO BE USED OUTSIDE CF! */ -#include "CoreFoundation_Prefix.h" #if !CF_BUILDING_CF #error The header file CFInternal.h is for the exclusive use of CoreFoundation. No other project should include it. @@ -19,6 +18,7 @@ #if !defined(__COREFOUNDATION_CFINTERNAL__) #define __COREFOUNDATION_CFINTERNAL__ 1 +#include "CFBase.h" #include "CFTargetConditionals.h" #define __CF_COMPILE_YEAR__ (__DATE__[7] * 1000 + __DATE__[8] * 100 + __DATE__[9] * 10 + __DATE__[10] - 53328) @@ -434,9 +434,6 @@ extern uint64_t __CFTimeIntervalToTSR(CFTimeInterval ti); extern CFTimeInterval __CFTSRToTimeInterval(uint64_t tsr); // use this instead of attempting to subtract mach_absolute_time() directly, because that can underflow and give an unexpected answer CF_PRIVATE CFTimeInterval __CFTimeIntervalUntilTSR(uint64_t tsr); -#if __HAS_DISPATCH__ -CF_PRIVATE dispatch_time_t __CFTSRToDispatchTime(uint64_t tsr); -#endif CF_PRIVATE uint64_t __CFTSRToNanoseconds(uint64_t tsr); extern CFStringRef __CFCopyFormattingDescription(CFTypeRef cf, CFDictionaryRef formatOptions); @@ -1246,13 +1243,6 @@ CF_PRIVATE Boolean __CFInitialized; CF_PRIVATE _Atomic(bool) __CFMainThreadHasExited; CF_PRIVATE const CFStringRef __kCFLocaleCollatorID; -#if __OBJC__ -#import -@interface NSArray (CFBufferAdoption) -- (instancetype)_initByAdoptingBuffer:(id *)buffer count:(NSUInteger)count size:(size_t)size; -@end -#endif - CF_EXTERN_C_END @@ -1329,5 +1319,26 @@ CF_INLINE uint64_t _CFUnalignedLoad64BE(const void *ptr) { return result; } +// MARK: - Atomics + +#if TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WIN32 || TARGET_OS_WASI +// Implemented in CFPlatform.c +CF_EXPORT bool OSAtomicCompareAndSwapPtr(void *oldp, void *newp, void *volatile *dst); +CF_EXPORT bool OSAtomicCompareAndSwapLong(long oldl, long newl, long volatile *dst); +CF_EXPORT bool OSAtomicCompareAndSwapPtrBarrier(void *oldp, void *newp, void *volatile *dst); +CF_EXPORT bool OSAtomicCompareAndSwap64Barrier( int64_t __oldValue, int64_t __newValue, volatile int64_t *__theValue ); + +CF_EXPORT int32_t OSAtomicDecrement32Barrier(volatile int32_t *dst); +CF_EXPORT int32_t OSAtomicIncrement32Barrier(volatile int32_t *dst); +CF_EXPORT int32_t OSAtomicIncrement32(volatile int32_t *theValue); +CF_EXPORT int32_t OSAtomicDecrement32(volatile int32_t *theValue); + +CF_EXPORT int32_t OSAtomicAdd32( int32_t theAmount, volatile int32_t *theValue ); +CF_EXPORT int32_t OSAtomicAdd32Barrier( int32_t theAmount, volatile int32_t *theValue ); +CF_EXPORT bool OSAtomicCompareAndSwap32Barrier( int32_t oldValue, int32_t newValue, volatile int32_t *theValue ); + +CF_EXPORT void OSMemoryBarrier(); +#endif + #endif /* ! __COREFOUNDATION_CFINTERNAL__ */ diff --git a/Sources/CoreFoundation/internalInclude/CFUniCharBitmapData.h b/Sources/CoreFoundation/internalInclude/CFUniCharBitmapData.h new file mode 100644 index 0000000000..ae36e9a1e8 --- /dev/null +++ b/Sources/CoreFoundation/internalInclude/CFUniCharBitmapData.h @@ -0,0 +1,15 @@ +/* + CFUniCharBitmapData.h + Copyright (c) 1999-2021, Apple Inc. and the Swift project authors. All rights reserved. + This file is generated. Don't touch this file directly. +*/ + +#ifndef _cfunichar_bitmap_data_h +#define _cfunichar_bitmap_data_h + +typedef struct { + uint32_t _numPlanes; + uint8_t const * const * const _planes; +} __CFUniCharBitmapData; + +#endif /* _cfunichar_bitmap_data_h */ diff --git a/Sources/CoreFoundation/internalInclude/CFUniCharBitmapData.inc.h b/Sources/CoreFoundation/internalInclude/CFUniCharBitmapData.inc.h new file mode 100644 index 0000000000..40e7f10af4 --- /dev/null +++ b/Sources/CoreFoundation/internalInclude/CFUniCharBitmapData.inc.h @@ -0,0 +1,14705 @@ +/* + CFUniCharBitmapData.inc.h + Copyright (c) 1999-2021, Apple Inc. and the Swift project authors. All rights reserved. + This file is generated. Don't touch this file directly. +*/ +#include "CFUniCharBitmapData.h" + +static uint8_t const __CFUniCharLetterCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x04, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0x03, 0x00, 0x1F, 0x50, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xBC, 0x40, 0xD7, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xB6, 0x00, 0xFF, 0xFF, 0xFF, 0x87, 0x07, 0x00, + 0x00, 0x00, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x9F, 0xFF, 0xFD, 0x00, 0x9C, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x24, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x7E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFE, 0xFF, 0xEF, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xC5, 0xF3, 0x9F, 0x79, 0x80, 0xB0, 0x0F, 0x00, 0x03, 0x50, + 0xEE, 0x87, 0xF9, 0xFF, 0xFF, 0xFD, 0x6D, 0xD3, 0x87, 0x39, 0x02, 0x5E, 0x00, 0x00, 0x3F, 0x00, 0xEE, 0xBF, 0xFB, 0xFF, 0xFF, 0xFD, 0xED, 0xF3, 0xBF, 0x3B, 0x01, 0x00, 0x0F, 0x00, 0x00, 0xFE, + 0xEE, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0xF3, 0x9F, 0x39, 0xE0, 0xB0, 0x0F, 0x00, 0x02, 0x00, 0xEC, 0xC7, 0x3D, 0xD6, 0x18, 0xC7, 0xFF, 0xC3, 0xC7, 0x3D, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xFF, 0xF3, 0xDF, 0x3D, 0x60, 0x27, 0x0F, 0x00, 0x00, 0x00, 0xEF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xEF, 0xF3, 0xDF, 0x3D, 0x60, 0x60, 0x0F, 0x00, 0x0E, 0x00, + 0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7D, 0xF0, 0x80, 0x0F, 0x00, 0x00, 0xFC, 0xEE, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFB, 0x2F, 0x7F, 0x84, 0x5F, 0xFF, 0x00, 0x00, 0x0C, 0x00, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xF7, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0x3F, 0x5F, 0x7F, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0xA0, 0xC2, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0xFE, 0xFF, 0xDF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x7F, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x7F, 0x3D, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFE, 0x01, + 0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xDF, 0x0D, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xB8, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x0F, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xE0, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x5F, 0xDC, 0x1F, 0xCF, 0x0F, 0xFF, 0x1F, 0xDC, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0x84, 0xFC, 0x2F, 0x3E, 0x50, 0xBD, 0xFF, 0xF3, 0xE0, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF8, 0x0F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0xFF, 0x7F, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3E, 0x18, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xE6, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, + 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x1F, 0xFF, 0xFF, 0x00, 0x0C, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xEB, 0x03, 0x00, 0x00, 0xFC, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x10, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xE8, + 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x7C, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x38, 0xFF, 0xFF, 0x7C, 0x00, + 0x7E, 0x7E, 0x7E, 0x00, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x37, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0xF8, 0xE0, 0xFF, 0xFD, 0x7F, 0x5F, 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFC, 0xFC, 0xFC, 0x1C, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharLetterCharacterSetBitmapPlane1[] = { + 0xFF, 0xEF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xB7, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, 0xFD, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xF7, 0xFF, 0xF7, 0xB7, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x91, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x37, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6F, 0xF0, 0xEF, 0xFE, 0xFF, 0xFF, 0x3F, 0x87, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x04, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xDE, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xBD, 0xFF, 0xBF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, + 0xEF, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0xFB, 0x9F, 0x39, 0x81, 0xE0, 0xCF, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x01, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0x0F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80, + 0x7F, 0xF2, 0x6F, 0xFF, 0xFF, 0xFF, 0xBF, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1B, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x23, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xB4, 0xFF, 0x00, 0x00, 0x00, 0xBF, 0xFD, 0xFF, 0xFF, 0xFF, 0x7F, 0xFB, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x6F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x27, 0x00, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x1F, 0xFF, 0x01, 0xFF, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE3, 0x07, 0xF8, 0xE7, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x64, 0xDE, 0xFF, 0xEB, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0xE7, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7B, 0x5F, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xF7, + 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xF7, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x20, 0x00, 0x10, 0x00, 0x00, 0xF8, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0xFF, 0xFF, 0xF9, 0xDB, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0x3F, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x6F, 0xFF, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEF, 0xFF, 0xFF, 0xFF, 0x96, 0xFE, 0xF7, 0x0A, 0x84, 0xEA, 0x96, 0xAA, 0x96, 0xF7, 0xF7, 0x5E, 0xFF, 0xFB, 0xFF, 0x0F, 0xEE, 0xFB, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharLetterCharacterSetBitmapPlane2[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharLetterCharacterSetBitmapPlane3[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharLetterCharacterSetBitmapPlane14[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharLetterCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharLetterCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharLetterCharacterSetBitmapPlane1, + (uint8_t const * const)&__CFUniCharLetterCharacterSetBitmapPlane2, + (uint8_t const * const)&__CFUniCharLetterCharacterSetBitmapPlane3, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)&__CFUniCharLetterCharacterSetBitmapPlane14, +}; + +static uint32_t const __CFUniCharLetterCharacterSetBitmapPlaneCount = 15; +static uint8_t const __CFUniCharDecimalDigitCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharDecimalDigitCharacterSetBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharDecimalDigitCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharDecimalDigitCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharDecimalDigitCharacterSetBitmapPlane1, +}; + +static uint32_t const __CFUniCharDecimalDigitCharacterSetBitmapPlaneCount = 2; +static uint8_t const __CFUniCharLowercaseLetterCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x7F, 0xFF, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0xAB, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xD4, 0x29, 0x31, 0x24, 0x4E, 0x2A, 0x2D, 0x51, 0xE6, 0x40, 0x52, 0x55, 0xB5, 0xAA, 0xAA, 0x29, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFA, 0x93, 0x85, 0xAA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x7F, 0xE3, 0xAA, 0xAA, 0xAA, 0x2F, 0x19, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0x02, 0xA8, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x54, 0xD5, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xEA, 0xBF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xFF, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x3F, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xDF, 0x40, 0xDC, 0x00, 0xCF, 0x00, 0xFF, 0x00, 0xDC, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xC4, 0x08, 0x00, 0x00, 0x80, 0x10, 0x32, 0xC0, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x15, 0xDA, 0x0F, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x1A, 0x50, 0x08, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x2A, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xAA, 0xAB, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xFE, 0x95, 0xAA, 0x50, 0xBA, 0xAA, 0xAA, 0x82, 0xA0, 0xAA, 0x0A, 0x05, 0xAA, 0x02, 0x00, 0x00, 0x40, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharLowercaseLetterCharacterSetBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xDF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xEB, 0xEF, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xF7, 0x03, 0x00, 0x00, 0xF0, + 0xFF, 0xFF, 0xDF, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFD, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xF7, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFB, 0xFF, 0x7F, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharLowercaseLetterCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharLowercaseLetterCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharLowercaseLetterCharacterSetBitmapPlane1, +}; + +static uint32_t const __CFUniCharLowercaseLetterCharacterSetBitmapPlaneCount = 2; +static uint8_t const __CFUniCharUppercaseLetterCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x2B, 0xD6, 0xCE, 0xDB, 0xB1, 0xD5, 0xD2, 0xAE, 0x11, 0xB0, 0xAD, 0xAA, 0x4A, 0x55, 0x55, 0xD6, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x6C, 0x7A, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x80, 0x40, 0xD7, 0xFE, 0xFF, 0xFB, 0x0F, 0x00, 0x00, 0x00, 0x80, 0x1C, 0x55, 0x55, 0x55, 0x90, 0xE6, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x01, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xAB, 0x2A, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x40, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x00, 0xFF, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x3F, 0x00, 0xAA, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x0F, 0x00, 0x1F, 0x00, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x84, 0x38, 0x27, 0x3E, 0x50, 0x3D, 0x0F, 0xC0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xEA, 0x25, 0xC0, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x28, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x00, 0x00, 0x55, 0x55, 0x55, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x6A, 0x55, 0x28, 0x45, 0x55, 0x55, 0x7D, 0x5F, 0x55, 0xF5, 0x02, 0x41, 0x01, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharUppercaseLetterCharacterSetBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF7, 0xFF, 0xF7, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xD0, 0x64, 0xDE, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, + 0xB0, 0xE7, 0xDF, 0x1F, 0x00, 0x00, 0x00, 0x7B, 0x5F, 0xFC, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharUppercaseLetterCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharUppercaseLetterCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharUppercaseLetterCharacterSetBitmapPlane1, +}; + +static uint32_t const __CFUniCharUppercaseLetterCharacterSetBitmapPlaneCount = 2; +static uint8_t const __CFUniCharTitlecaseLetterCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x09, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharTitlecaseLetterCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharTitlecaseLetterCharacterSetBitmapPlane0, +}; + +static uint32_t const __CFUniCharTitlecaseLetterCharacterSetBitmapPlaneCount = 1; +static uint8_t const __CFUniCharAlphanumericCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x2C, 0x76, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0x03, 0x00, 0x1F, 0x50, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xBC, 0x40, 0xD7, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xB6, 0x00, 0xFF, 0xFF, 0xFF, 0x87, 0x07, 0x00, + 0x00, 0x00, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x9F, 0xFF, 0xFD, 0xFF, 0x9F, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x24, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x7E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFE, 0xFF, 0xEF, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xC5, 0xF3, 0x9F, 0x79, 0x80, 0xB0, 0xCF, 0xFF, 0xF3, 0x53, + 0xEE, 0x87, 0xF9, 0xFF, 0xFF, 0xFD, 0x6D, 0xD3, 0x87, 0x39, 0x02, 0x5E, 0xC0, 0xFF, 0x3F, 0x00, 0xEE, 0xBF, 0xFB, 0xFF, 0xFF, 0xFD, 0xED, 0xF3, 0xBF, 0x3B, 0x01, 0x00, 0xCF, 0xFF, 0x00, 0xFE, + 0xEE, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0xF3, 0x9F, 0x39, 0xE0, 0xB0, 0xCF, 0xFF, 0xFE, 0x00, 0xEC, 0xC7, 0x3D, 0xD6, 0x18, 0xC7, 0xFF, 0xC3, 0xC7, 0x3D, 0x81, 0x00, 0xC0, 0xFF, 0x07, 0x00, + 0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xFF, 0xF3, 0xDF, 0x3D, 0x60, 0x27, 0xCF, 0xFF, 0x00, 0x7F, 0xEF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xEF, 0xF3, 0xDF, 0x3D, 0x60, 0x60, 0xCF, 0xFF, 0x0E, 0x00, + 0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7D, 0xF0, 0xFF, 0xCF, 0xFF, 0xFF, 0xFD, 0xEE, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFB, 0x2F, 0x7F, 0x84, 0x5F, 0xFF, 0xC0, 0xFF, 0x0C, 0x00, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x7F, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xF7, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0x3F, 0x5F, 0x7F, 0xFF, 0xF3, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xAF, 0xC2, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0xFE, 0xFF, 0xDF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x7F, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x7F, 0x3D, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x00, 0xFE, 0xFF, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF, 0x01, + 0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xDF, 0x0D, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0xFF, 0x03, 0xFF, 0x03, + 0x00, 0xB8, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x0F, 0xFF, 0x0F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0x03, 0xFF, 0x03, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0x03, 0x00, 0xF8, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x5F, 0xDC, 0x1F, 0xCF, 0x0F, 0xFF, 0x1F, 0xDC, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0x83, 0xFF, 0x03, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0x84, 0xFC, 0x2F, 0x3E, 0x50, 0xBD, 0xFF, 0xF3, 0xE0, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF8, 0x0F, 0x20, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0xFF, 0x7F, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3E, 0x1F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xE6, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, + 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xEB, 0x03, 0x00, 0x00, 0xFC, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x10, 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xE8, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0x3F, 0xFF, 0x03, 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x38, 0xFF, 0xFF, 0x7C, 0x00, + 0x7E, 0x7E, 0x7E, 0x00, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x37, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0xF8, 0xE0, 0xFF, 0xFD, 0x7F, 0x5F, 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, + 0x00, 0x00, 0xFF, 0x03, 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFC, 0xFC, 0xFC, 0x1C, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharAlphanumericCharacterSetBitmapPlane1[] = { + 0xFF, 0xEF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xB7, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xF7, 0xFF, 0xF7, 0xB7, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x91, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x37, 0xF8, + 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x6F, 0xF0, 0xEF, 0xFE, 0xFF, 0xFF, 0x3F, 0x87, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0xFF, 0xFF, 0x7F, 0xF8, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFC, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x04, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xDE, 0xFF, 0x17, 0xFE, 0xFF, 0x1F, 0x00, + 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xBD, 0xFF, 0xBF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x03, + 0xEF, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0xFB, 0x9F, 0x39, 0x81, 0xE0, 0xCF, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xC3, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x01, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x11, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0x0F, 0xFF, 0x0F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x80, + 0x7F, 0xF2, 0x6F, 0xFF, 0xFF, 0xFF, 0xBF, 0xF9, 0x0F, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1B, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x23, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0x1F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xB4, 0xFF, 0x00, 0xFF, 0x03, 0xBF, 0xFD, 0xFF, 0xFF, 0xFF, 0x7F, 0xFB, 0x01, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0x07, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x0F, 0x00, 0xFF, 0xFB, 0xFB, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x6F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x27, 0x00, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x1F, 0xFF, 0x01, 0xFF, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE3, 0x07, 0xF8, 0xE7, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x64, 0xDE, 0xFF, 0xEB, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0xE7, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7B, 0x5F, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xF7, + 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xF7, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x20, 0x00, 0x10, 0x00, 0x00, 0xF8, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0xFF, 0xFF, 0xF9, 0xDB, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0x3F, 0xFF, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x6F, 0xFF, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEF, 0xFF, 0xFF, 0xFF, 0x96, 0xFE, 0xF7, 0x0A, 0x84, 0xEA, 0x96, 0xAA, 0x96, 0xF7, 0xF7, 0x5E, 0xFF, 0xFB, 0xFF, 0x0F, 0xEE, 0xFB, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharAlphanumericCharacterSetBitmapPlane2[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharAlphanumericCharacterSetBitmapPlane3[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharAlphanumericCharacterSetBitmapPlane14[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharAlphanumericCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharAlphanumericCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharAlphanumericCharacterSetBitmapPlane1, + (uint8_t const * const)&__CFUniCharAlphanumericCharacterSetBitmapPlane2, + (uint8_t const * const)&__CFUniCharAlphanumericCharacterSetBitmapPlane3, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)&__CFUniCharAlphanumericCharacterSetBitmapPlane14, +}; + +static uint32_t const __CFUniCharAlphanumericCharacterSetBitmapPlaneCount = 15; +static uint8_t const __CFUniCharLegalCharacterSetBitmapPlane0[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xD7, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x87, 0x1F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x4F, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x7F, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xC5, 0xF3, 0x9F, 0x79, 0x80, 0xB0, 0xCF, 0xFF, 0xFF, 0x7F, + 0xEE, 0x87, 0xF9, 0xFF, 0xFF, 0xFD, 0x6D, 0xD3, 0x87, 0x39, 0x02, 0x5E, 0xC0, 0xFF, 0x7F, 0x00, 0xEE, 0xBF, 0xFB, 0xFF, 0xFF, 0xFD, 0xED, 0xF3, 0xBF, 0x3B, 0x01, 0x00, 0xCF, 0xFF, 0x03, 0xFE, + 0xEE, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0xF3, 0x9F, 0x39, 0xE0, 0xB0, 0xCF, 0xFF, 0xFF, 0x00, 0xEC, 0xC7, 0x3D, 0xD6, 0x18, 0xC7, 0xFF, 0xC3, 0xC7, 0x3D, 0x81, 0x00, 0xC0, 0xFF, 0xFF, 0x07, + 0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xFF, 0xF3, 0xDF, 0x3D, 0x60, 0x27, 0xCF, 0xFF, 0x80, 0xFF, 0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xEF, 0xF3, 0xDF, 0x3D, 0x60, 0x60, 0xCF, 0xFF, 0x0E, 0x00, + 0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFD, 0xF0, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xEE, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFB, 0x2F, 0x7F, 0x84, 0x5F, 0xFF, 0xC0, 0xFF, 0x1C, 0x00, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xF7, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0x3F, 0x5F, 0x7F, 0xFF, 0xF3, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x7F, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x7F, 0x3D, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xDF, 0x0D, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x03, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x0F, 0xFF, 0x0F, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0x03, 0xFF, 0x03, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xDF, 0xFF, 0xCF, 0xEF, 0xFF, 0xFF, 0xDC, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xF3, 0xFF, 0xFF, 0x7F, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x01, 0x80, 0xFF, 0xFF, 0x7F, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0x0F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xEB, 0x03, 0x00, 0x00, 0xFC, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xC0, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0x3F, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x7F, 0x00, + 0x7E, 0x7E, 0x7E, 0x00, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0xF8, 0xE0, 0xFF, 0xFF, 0x7F, 0x5F, 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x7F, 0x0F, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFC, 0xFC, 0xFC, 0x1C, 0x7F, 0x7F, 0x00, 0x3E, +}; +static uint8_t const __CFUniCharLegalCharacterSetBitmapPlane1[] = { + 0xFF, 0xEF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xB7, 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x1F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x80, 0xFF, 0xF7, 0xFF, 0xF7, 0xB7, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x91, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x37, 0xF8, + 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x6F, 0xF0, 0xEF, 0xFE, 0xFF, 0xFF, 0x3F, 0x87, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0x7F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFE, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x03, 0x1E, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFC, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x20, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0x1F, 0x00, + 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xBD, 0xFF, 0xBF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x03, + 0xEF, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0xFB, 0x9F, 0x39, 0x81, 0xE0, 0xCF, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0x03, 0xFF, 0x1F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0x0F, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x80, + 0x7F, 0xF2, 0x6F, 0xFF, 0xFF, 0xFF, 0xBF, 0xF9, 0x7F, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xB4, 0xFF, 0x00, 0xFF, 0x03, 0xBF, 0xFD, 0xFF, 0xFF, 0xFF, 0x7F, 0xFB, 0x01, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01, + 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x80, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFB, 0xFB, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x6F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x27, 0x00, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x1F, 0xFF, 0x01, 0xFF, 0xF3, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x0F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x64, 0xDE, 0xFF, 0xEB, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0xE7, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7B, 0x5F, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xF8, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0xFF, 0xFF, 0xF9, 0xDB, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0x3F, 0xFF, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x83, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x6F, 0xFF, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEF, 0xFF, 0xFF, 0xFF, 0x96, 0xFE, 0xF7, 0x0A, 0x84, 0xEA, 0x96, 0xAA, 0x96, 0xF7, 0xF7, 0x5E, 0xFF, 0xFB, 0xFF, 0x0F, 0xEE, 0xFB, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0x7F, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, + 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x01, 0x03, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0x1F, 0xFF, 0x1F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0x0F, 0x01, 0x00, + 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0x3F, 0xFF, 0x1F, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x3F, 0xC0, 0xFF, 0x0F, 0xFF, 0x01, 0xFF, 0x01, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharLegalCharacterSetBitmapPlane2[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharLegalCharacterSetBitmapPlane3[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharLegalCharacterSetBitmapPlane14[] = { + 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharLegalCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharLegalCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharLegalCharacterSetBitmapPlane1, + (uint8_t const * const)&__CFUniCharLegalCharacterSetBitmapPlane2, + (uint8_t const * const)&__CFUniCharLegalCharacterSetBitmapPlane3, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)&__CFUniCharLegalCharacterSetBitmapPlane14, +}; + +static uint32_t const __CFUniCharLegalCharacterSetBitmapPlaneCount = 15; +static uint8_t const __CFUniCharPunctuationCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0xEE, 0xF7, 0x00, 0x8C, 0x01, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0xC0, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, + 0x00, 0x36, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x17, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xEF, 0xFF, 0xFB, 0x7F, 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0F, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x30, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0E, 0xFF, 0xF3, 0xFF, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x0B, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEE, 0xF7, 0x00, 0x8C, 0x01, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00, 0xA8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharPunctuationCharacterSetBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x21, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharPunctuationCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharPunctuationCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharPunctuationCharacterSetBitmapPlane1, +}; + +static uint32_t const __CFUniCharPunctuationCharacterSetBitmapPlaneCount = 2; +static uint8_t const __CFUniCharSymbolAndOperatorCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x70, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xD3, 0x13, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0xFC, 0xFF, 0xE0, 0xAF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0xC9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x60, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0E, 0x00, 0xE8, 0xFC, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xBF, 0xDF, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x03, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0x60, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7B, 0x03, 0xD0, 0xC1, 0xAF, 0x42, 0x00, 0x0C, 0x1F, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xCF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0x0F, + 0x10, 0x00, 0x0C, 0x00, 0x01, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x7F, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x08, 0x00, 0x70, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x30, +}; +static uint8_t const __CFUniCharSymbolAndOperatorCharacterSetBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x73, 0xFF, 0x1F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1C, 0x00, 0x00, 0x18, 0xF0, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xDF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0x7F, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, + 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x01, 0x03, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0x1F, 0xFF, 0x1F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0x0F, 0x01, 0x00, + 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0x3F, 0xFF, 0x1F, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x3F, 0xC0, 0xFF, 0x0F, 0xFF, 0x01, 0xFF, 0x01, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharSymbolAndOperatorCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharSymbolAndOperatorCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharSymbolAndOperatorCharacterSetBitmapPlane1, +}; + +static uint32_t const __CFUniCharSymbolAndOperatorCharacterSetBitmapPlaneCount = 2; +static uint8_t const __CFUniCharControlAndFormatterBitmapPlane0[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3F, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, +}; +static uint8_t const __CFUniCharControlAndFormatterBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharControlAndFormatterBitmapPlane14[] = { + 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharControlAndFormatterBitmap[] = { + (uint8_t const * const)&__CFUniCharControlAndFormatterBitmapPlane0, + (uint8_t const * const)&__CFUniCharControlAndFormatterBitmapPlane1, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)&__CFUniCharControlAndFormatterBitmapPlane14, +}; + +static uint32_t const __CFUniCharControlAndFormatterBitmapPlaneCount = 15; +static uint8_t const __CFUniCharHasMirroredMappingBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x50, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x3F, 0x62, 0xBC, 0x57, 0xF8, 0x0F, 0xFA, 0xFF, 0x1F, 0x3C, 0x80, 0xF5, 0xCF, 0xFF, 0xFF, 0xFF, 0x9F, 0x07, 0x01, 0xCC, 0xFF, 0xFF, 0xC1, 0x00, 0x3E, 0xC3, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, + 0x00, 0x0F, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x3B, 0x78, 0x70, 0xFC, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xF9, 0xFD, 0xFF, 0x00, 0x01, 0x3F, 0xC2, 0x37, 0x1F, 0x3A, 0x03, 0xF0, 0x33, + 0x00, 0xFC, 0xFF, 0xDF, 0x53, 0x7A, 0x30, 0x70, 0x00, 0x00, 0x80, 0x01, 0x30, 0xBC, 0x19, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x50, 0x7C, 0x70, 0x88, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3C, 0x36, 0x00, 0x30, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xF3, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x50, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xA8, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharHasMirroredMappingBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharHasMirroredMappingBitmap[] = { + (uint8_t const * const)&__CFUniCharHasMirroredMappingBitmapPlane0, + (uint8_t const * const)&__CFUniCharHasMirroredMappingBitmapPlane1, +}; + +static uint32_t const __CFUniCharHasMirroredMappingBitmapPlaneCount = 2; +static uint8_t const __CFUniCharStrongRightToLeftCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x49, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x29, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xE0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x60, 0xC0, 0x00, 0xFC, + 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x30, 0xDC, + 0xFF, 0xFF, 0x3F, 0x04, 0x10, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharStrongRightToLeftCharacterSetBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x91, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x08, 0xFF, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEF, 0xFF, 0xFF, 0xFF, 0x96, 0xFE, 0xF7, 0x0A, 0x84, 0xEA, 0x96, 0xAA, 0x96, 0xF7, 0xF7, 0x5E, 0xFF, 0xFB, 0xFF, 0x0F, 0xEE, 0xFB, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharStrongRightToLeftCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharStrongRightToLeftCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharStrongRightToLeftCharacterSetBitmapPlane1, +}; + +static uint32_t const __CFUniCharStrongRightToLeftCharacterSetBitmapPlaneCount = 2; +static uint8_t const __CFUniCharNonBaseCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x9F, 0x9F, 0x3D, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x20, + 0x00, 0x00, 0xC0, 0xFB, 0xEF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xFF, 0xFF, 0xFE, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x9F, 0x39, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x40, + 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x87, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xBF, 0x3B, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xFC, + 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x9F, 0x39, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC7, 0x3D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xDF, 0x3D, 0x60, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xDF, 0x3D, 0x60, 0x00, 0x0C, 0x00, 0x08, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xDF, 0x3D, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x5F, 0xFF, 0x00, 0x00, 0x0C, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0x07, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0x1F, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xA0, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xDF, 0xE0, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0xC0, 0xC3, 0x9D, 0x3F, 0x1E, 0x00, 0xFC, 0xBF, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x0F, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x07, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x21, 0x90, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF7, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x44, 0x08, 0x00, 0x00, 0xF8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x80, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xC1, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x37, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharNonBaseCharacterSetBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x9F, 0x39, 0x80, 0x00, 0xCC, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0xFF, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x79, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFC, 0x11, 0x00, 0x00, 0x00, + 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7B, 0x80, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xB4, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xC7, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE3, 0x07, 0xF8, 0xE7, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x20, 0x00, 0x10, 0x00, 0x00, 0xF8, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0xFF, 0xFF, 0xF9, 0xDB, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharNonBaseCharacterSetBitmapPlane14[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharNonBaseCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharNonBaseCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharNonBaseCharacterSetBitmapPlane1, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)&__CFUniCharNonBaseCharacterSetBitmapPlane14, +}; + +static uint32_t const __CFUniCharNonBaseCharacterSetBitmapPlaneCount = 15; +static uint8_t const __CFUniCharCaseIgnorableCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x30, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3F, 0x00, 0xFF, 0x17, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xBF, 0xFF, 0x3D, 0x00, 0x00, + 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x24, + 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xFE, 0x21, 0xFE, 0x00, 0x0C, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x20, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x40, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xBE, 0x21, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xFC, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x1E, 0x20, 0x60, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xC1, 0x3D, 0x60, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x40, 0x30, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1E, 0x20, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0x07, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0x1F, 0x40, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xA0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xDF, 0xE0, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFD, 0x66, 0x00, 0x00, 0x00, 0xC3, 0x01, 0x00, 0x1E, 0x00, 0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x3F, 0x40, 0xFE, 0x8F, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7F, 0xE5, 0x1F, 0xF8, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x17, 0x04, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xA3, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFD, 0x21, 0x10, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x03, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0x60, + 0x00, 0xF8, 0x00, 0x02, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xFF, 0x02, 0x80, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x3E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF7, 0xBF, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x03, + 0x44, 0x08, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x80, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x33, 0x00, 0x80, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x66, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xC1, 0x02, 0x00, 0x00, 0x20, 0x00, 0x30, 0x58, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0E, +}; +static uint8_t const __CFUniCharCaseIgnorableCharacterSetBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x80, 0xEF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xD3, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF8, 0x07, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x85, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xB0, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xA7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0xBC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0C, 0x01, 0x00, 0x00, 0x00, + 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x79, 0x80, 0x00, 0x7E, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFC, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xB4, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x6F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xF8, 0xFF, 0xE7, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x20, 0x00, 0x10, 0x00, 0x00, 0xF8, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0xFF, 0xFF, 0xF9, 0xDB, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharCaseIgnorableCharacterSetBitmapPlane14[] = { + 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharCaseIgnorableCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharCaseIgnorableCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharCaseIgnorableCharacterSetBitmapPlane1, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)&__CFUniCharCaseIgnorableCharacterSetBitmapPlane14, +}; + +static uint32_t const __CFUniCharCaseIgnorableCharacterSetBitmapPlaneCount = 15; +static uint8_t const __CFUniCharCanonicalDecomposableCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0xFF, 0x7E, 0x3E, 0xBF, 0xFF, 0x7E, 0xBE, + 0xFF, 0xFF, 0xFC, 0xFF, 0x3F, 0xFF, 0xF1, 0x7E, 0xF8, 0xF1, 0xF3, 0xFF, 0x3F, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xDF, 0xCF, 0xFF, 0x31, 0xFF, + 0xFF, 0xFF, 0xFF, 0xCF, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0xE0, 0xD7, 0x01, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x7C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8B, 0x70, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x8B, 0x70, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0xCF, 0xFC, 0xFC, 0xFC, 0x3F, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x84, 0x10, 0x00, 0x02, 0x68, 0x01, 0x02, 0x00, 0x08, 0x20, 0x84, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x55, 0x04, 0x00, 0x00, 0x00, 0x00, 0x28, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x5F, 0xDE, 0xFF, 0xCF, 0xEF, 0xFF, 0xFF, 0xDC, 0x3F, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x40, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x12, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x92, 0x02, 0x00, 0x00, 0x05, 0xE0, 0x33, 0x03, 0x33, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x3C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x55, 0x55, 0xA5, 0x02, 0xDB, 0x36, 0x00, 0x00, 0x10, 0x40, 0x00, 0x50, 0x55, 0x55, 0xA5, 0x02, 0xDB, 0x36, 0x00, 0x00, 0x90, 0x47, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x3F, 0xE5, 0x7F, 0x65, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xA0, 0x00, 0xFC, 0x7F, 0x5F, 0xDB, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharCanonicalDecomposableCharacterSetBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharCanonicalDecomposableCharacterSetBitmapPlane2[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharCanonicalDecomposableCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharCanonicalDecomposableCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharCanonicalDecomposableCharacterSetBitmapPlane1, + (uint8_t const * const)&__CFUniCharCanonicalDecomposableCharacterSetBitmapPlane2, +}; + +static uint32_t const __CFUniCharCanonicalDecomposableCharacterSetBitmapPlaneCount = 3; +static uint8_t const __CFUniCharCompatibilityDecomposableCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x85, 0x3C, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x80, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x3F, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x37, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xF7, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0xFC, 0x07, 0x82, 0x00, 0x70, 0x80, 0xD8, 0x50, 0x80, 0x03, 0x80, 0x80, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x7F, 0xFF, 0x1F, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEF, 0xFE, 0x6F, 0x3E, 0x17, 0xB1, 0xFB, 0xFB, 0xE1, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0xF8, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F, + 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x9F, 0xFF, 0xF7, 0xFF, 0x7F, 0x0F, 0xD7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFC, 0xFC, 0xFC, 0x1C, 0x7F, 0x7F, 0x00, 0x00, +}; +static uint8_t const __CFUniCharCompatibilityDecomposableCharacterSetBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x64, 0xDE, 0xFF, 0xEB, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0xE7, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7B, 0x5F, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEF, 0xFF, 0xFF, 0xFF, 0x96, 0xFE, 0xF7, 0x0A, 0x84, 0xEA, 0x96, 0xAA, 0x96, 0xF7, 0xF7, 0x5E, 0xFF, 0xFB, 0xFF, 0x0F, 0xEE, 0xFB, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharCompatibilityDecomposableCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharCompatibilityDecomposableCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharCompatibilityDecomposableCharacterSetBitmapPlane1, +}; + +static uint32_t const __CFUniCharCompatibilityDecomposableCharacterSetBitmapPlaneCount = 2; +static uint8_t const __CFUniCharHasNonSelfUppercaseMappingBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x7F, 0xFF, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x54, 0x55, 0xAB, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xD4, 0x29, 0x11, 0x24, 0x46, 0x2A, 0x21, 0x51, 0xA2, 0x60, 0x5B, 0x55, 0xB5, 0xAA, 0xAA, 0x2D, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xA8, 0xAA, 0x0A, 0x90, 0x85, 0xAA, 0xDF, 0x1A, 0x6B, 0x9F, 0x26, 0x20, 0x8D, 0x1F, 0x04, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x7F, 0xE3, 0xAA, 0xAA, 0xAA, 0x2F, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0x02, 0xA8, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x54, 0xD5, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xEA, 0x0F, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xFF, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x50, 0xDC, 0x10, 0xCF, 0x00, 0xFF, 0x00, 0xDC, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x15, 0x48, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x0A, 0x50, 0x08, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x2A, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xAA, 0xA8, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x94, 0xAA, 0x10, 0x9A, 0xAA, 0xAA, 0x02, 0xA0, 0xAA, 0x0A, 0x05, 0x82, 0x02, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharHasNonSelfUppercaseMappingBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharHasNonSelfUppercaseMappingBitmap[] = { + (uint8_t const * const)&__CFUniCharHasNonSelfUppercaseMappingBitmapPlane0, + (uint8_t const * const)&__CFUniCharHasNonSelfUppercaseMappingBitmapPlane1, +}; + +static uint32_t const __CFUniCharHasNonSelfUppercaseMappingBitmapPlaneCount = 2; +static uint8_t const __CFUniCharHasNonSelfTitlecaseMappingBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x7F, 0xFF, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x54, 0x55, 0xAB, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xD4, 0x29, 0x11, 0x24, 0x46, 0x2A, 0x21, 0x51, 0xA2, 0xF0, 0x5F, 0x55, 0xB5, 0xAA, 0xAA, 0x2F, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xA8, 0xAA, 0x0A, 0x90, 0x85, 0xAA, 0xDF, 0x1A, 0x6B, 0x9F, 0x26, 0x20, 0x8D, 0x1F, 0x04, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x7F, 0xE3, 0xAA, 0xAA, 0xAA, 0x2F, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0x02, 0xA8, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x54, 0xD5, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xEA, 0x0F, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xFF, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x50, 0xDC, 0x10, 0xCF, 0x00, 0xFF, 0x00, 0xDC, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x15, 0x48, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x0A, 0x50, 0x08, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x2A, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xAA, 0xA8, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x94, 0xAA, 0x10, 0x9A, 0xAA, 0xAA, 0x02, 0xA0, 0xAA, 0x0A, 0x05, 0x82, 0x02, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharHasNonSelfTitlecaseMappingBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharHasNonSelfTitlecaseMappingBitmap[] = { + (uint8_t const * const)&__CFUniCharHasNonSelfTitlecaseMappingBitmapPlane0, + (uint8_t const * const)&__CFUniCharHasNonSelfTitlecaseMappingBitmapPlane1, +}; + +static uint32_t const __CFUniCharHasNonSelfTitlecaseMappingBitmapPlaneCount = 2; +static uint8_t const __CFUniCharHasNonSelfLowercaseMappingBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x2B, 0xD6, 0xCE, 0xDB, 0xB1, 0xD5, 0xD2, 0xAE, 0x11, 0xB0, 0xAD, 0xAA, 0x4A, 0x55, 0x55, 0xD6, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x6C, 0x7A, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x80, 0x40, 0xD7, 0xFE, 0xFF, 0xFB, 0x0F, 0x00, 0x00, 0x00, 0x80, 0x00, 0x55, 0x55, 0x55, 0x90, 0xE6, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x01, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xAB, 0x2A, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x40, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x00, 0xFF, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x3F, 0x00, 0xAA, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x0F, 0x00, 0x1F, 0x00, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xEA, 0x25, 0xC0, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x28, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x00, 0x00, 0x55, 0x55, 0x55, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x6A, 0x55, 0x28, 0x45, 0x55, 0x55, 0x7D, 0x5F, 0x55, 0xF5, 0x02, 0x41, 0x01, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharHasNonSelfLowercaseMappingBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF7, 0xFF, 0xF7, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharHasNonSelfLowercaseMappingBitmap[] = { + (uint8_t const * const)&__CFUniCharHasNonSelfLowercaseMappingBitmapPlane0, + (uint8_t const * const)&__CFUniCharHasNonSelfLowercaseMappingBitmapPlane1, +}; + +static uint32_t const __CFUniCharHasNonSelfLowercaseMappingBitmapPlaneCount = 2; +static uint8_t const __CFUniCharHasNonSelfCaseFoldingMappingBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x63, 0x00, 0x00, 0x00, 0x23, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0x50, 0xDC, 0x10, 0xCC, 0x00, 0xDC, 0x00, 0xDC, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharHasNonSelfCaseFoldingMappingBitmap[] = { + (uint8_t const * const)&__CFUniCharHasNonSelfCaseFoldingMappingBitmapPlane0, +}; + +static uint32_t const __CFUniCharHasNonSelfCaseFoldingMappingBitmapPlaneCount = 1; +static uint8_t const __CFUniCharGraphemeExtendCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x9F, 0x9F, 0x3D, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x20, + 0x00, 0x00, 0xC0, 0xFB, 0xEF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xFE, 0x21, 0xFE, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x1E, 0x20, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x40, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xBE, 0x21, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xFC, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x1E, 0x20, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xC1, 0x3D, 0x60, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x44, 0x30, 0x60, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x1E, 0x20, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x5C, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0x07, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0x1F, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xA0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xDF, 0xE0, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFD, 0x66, 0x00, 0x00, 0x00, 0xC3, 0x01, 0x00, 0x1E, 0x00, 0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x3F, 0x40, 0xFE, 0x0F, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7F, 0xE5, 0x1F, 0xF8, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x17, 0x04, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xA3, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFD, 0x21, 0x10, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF7, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x44, 0x08, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x80, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x33, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x66, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xC1, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharGraphemeExtendCharacterSetBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x80, 0xEF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xD3, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF8, 0x07, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0x00, 0x80, 0x00, 0xC0, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x5C, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xA5, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3C, 0xB0, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xA7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0xBC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x58, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0C, 0x01, 0x00, 0x00, 0x00, + 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x79, 0x80, 0x00, 0x7E, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFC, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xB4, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xC3, 0x07, 0xF8, 0xE7, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x20, 0x00, 0x10, 0x00, 0x00, 0xF8, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0xFF, 0xFF, 0xF9, 0xDB, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharGraphemeExtendCharacterSetBitmapPlane14[] = { + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharGraphemeExtendCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharGraphemeExtendCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharGraphemeExtendCharacterSetBitmapPlane1, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)NULL, + (uint8_t const * const)&__CFUniCharGraphemeExtendCharacterSetBitmapPlane14, +}; + +static uint32_t const __CFUniCharGraphemeExtendCharacterSetBitmapPlaneCount = 15; +static uint8_t const __CFUniCharHfsPlusDecomposableCharacterSetBitmapPlane0[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0xFF, 0x7E, 0x3E, 0xBF, 0xFF, 0x7E, 0xBE, + 0xFF, 0xFF, 0xFC, 0xFF, 0x3F, 0xFF, 0xF1, 0x7E, 0xF8, 0xF1, 0xF3, 0xFF, 0x3F, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xDF, 0xCF, 0xFF, 0x31, 0xFF, + 0xFF, 0xFF, 0xFF, 0xCF, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0xE0, 0xD7, 0x01, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x7C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8B, 0x70, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x8B, 0x70, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0xCF, 0xFC, 0xFC, 0xFC, 0x3F, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x12, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x84, 0x10, 0x00, 0x02, 0x68, 0x01, 0x02, 0x00, 0x08, 0x20, 0x84, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x55, 0x04, 0x00, 0x00, 0x00, 0x00, 0x28, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x5F, 0xDE, 0xFF, 0xCF, 0xEF, 0xFF, 0xFF, 0xDC, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x55, 0x55, 0xA5, 0x02, 0xDB, 0x36, 0x00, 0x00, 0x10, 0x40, 0x00, 0x50, 0x55, 0x55, 0xA5, 0x02, 0xDB, 0x36, 0x00, 0x00, 0x90, 0x47, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xA0, 0x00, 0xFC, 0x7F, 0x5F, 0xDB, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const __CFUniCharHfsPlusDecomposableCharacterSetBitmapPlane1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static uint8_t const * const __CFUniCharHfsPlusDecomposableCharacterSetBitmap[] = { + (uint8_t const * const)&__CFUniCharHfsPlusDecomposableCharacterSetBitmapPlane0, + (uint8_t const * const)&__CFUniCharHfsPlusDecomposableCharacterSetBitmapPlane1, +}; + +static uint32_t const __CFUniCharHfsPlusDecomposableCharacterSetBitmapPlaneCount = 2; +static char const * const __CFUniCharUnicodeVersionString = "15.0.0"; + +static uint32_t const __CFUniCharNumberOfBitmaps = 22; +static __CFUniCharBitmapData const __CFUniCharBitmapDataArray[] = { + { ._numPlanes = __CFUniCharDecimalDigitCharacterSetBitmapPlaneCount, ._planes = __CFUniCharDecimalDigitCharacterSetBitmap }, + { ._numPlanes = __CFUniCharLetterCharacterSetBitmapPlaneCount, ._planes = __CFUniCharLetterCharacterSetBitmap }, + { ._numPlanes = __CFUniCharLowercaseLetterCharacterSetBitmapPlaneCount, ._planes = __CFUniCharLowercaseLetterCharacterSetBitmap }, + { ._numPlanes = __CFUniCharUppercaseLetterCharacterSetBitmapPlaneCount, ._planes = __CFUniCharUppercaseLetterCharacterSetBitmap }, + { ._numPlanes = __CFUniCharNonBaseCharacterSetBitmapPlaneCount, ._planes = __CFUniCharNonBaseCharacterSetBitmap }, + { ._numPlanes = __CFUniCharCanonicalDecomposableCharacterSetBitmapPlaneCount, ._planes = __CFUniCharCanonicalDecomposableCharacterSetBitmap }, + { ._numPlanes = __CFUniCharAlphanumericCharacterSetBitmapPlaneCount, ._planes = __CFUniCharAlphanumericCharacterSetBitmap }, + { ._numPlanes = __CFUniCharPunctuationCharacterSetBitmapPlaneCount, ._planes = __CFUniCharPunctuationCharacterSetBitmap }, + { ._numPlanes = __CFUniCharLegalCharacterSetBitmapPlaneCount, ._planes = __CFUniCharLegalCharacterSetBitmap }, + { ._numPlanes = __CFUniCharTitlecaseLetterCharacterSetBitmapPlaneCount, ._planes = __CFUniCharTitlecaseLetterCharacterSetBitmap }, + { ._numPlanes = __CFUniCharSymbolAndOperatorCharacterSetBitmapPlaneCount, ._planes = __CFUniCharSymbolAndOperatorCharacterSetBitmap }, + { ._numPlanes = __CFUniCharCompatibilityDecomposableCharacterSetBitmapPlaneCount, ._planes = __CFUniCharCompatibilityDecomposableCharacterSetBitmap }, + { ._numPlanes = __CFUniCharHfsPlusDecomposableCharacterSetBitmapPlaneCount, ._planes = __CFUniCharHfsPlusDecomposableCharacterSetBitmap }, + { ._numPlanes = __CFUniCharStrongRightToLeftCharacterSetBitmapPlaneCount, ._planes = __CFUniCharStrongRightToLeftCharacterSetBitmap }, + { ._numPlanes = __CFUniCharHasNonSelfLowercaseMappingBitmapPlaneCount, ._planes = __CFUniCharHasNonSelfLowercaseMappingBitmap }, + { ._numPlanes = __CFUniCharHasNonSelfUppercaseMappingBitmapPlaneCount, ._planes = __CFUniCharHasNonSelfUppercaseMappingBitmap }, + { ._numPlanes = __CFUniCharHasNonSelfTitlecaseMappingBitmapPlaneCount, ._planes = __CFUniCharHasNonSelfTitlecaseMappingBitmap }, + { ._numPlanes = __CFUniCharHasNonSelfCaseFoldingMappingBitmapPlaneCount, ._planes = __CFUniCharHasNonSelfCaseFoldingMappingBitmap }, + { ._numPlanes = __CFUniCharHasMirroredMappingBitmapPlaneCount, ._planes = __CFUniCharHasMirroredMappingBitmap }, + { ._numPlanes = __CFUniCharControlAndFormatterBitmapPlaneCount, ._planes = __CFUniCharControlAndFormatterBitmap }, + { ._numPlanes = __CFUniCharCaseIgnorableCharacterSetBitmapPlaneCount, ._planes = __CFUniCharCaseIgnorableCharacterSetBitmap }, + { ._numPlanes = __CFUniCharGraphemeExtendCharacterSetBitmapPlaneCount, ._planes = __CFUniCharGraphemeExtendCharacterSetBitmap }, +}; + diff --git a/Sources/CoreFoundation/internalInclude/CFUniCharCompatibilityDecompositionData.inc.h b/Sources/CoreFoundation/internalInclude/CFUniCharCompatibilityDecompositionData.inc.h new file mode 100644 index 0000000000..7a5d45605e --- /dev/null +++ b/Sources/CoreFoundation/internalInclude/CFUniCharCompatibilityDecompositionData.inc.h @@ -0,0 +1,2644 @@ +/* + CFUniCharCompatibilityDecompositionData.inc.h + Created: 2023-04-24 17:51:26 +0000 + Copyright (c) 2002 Apple Computer Inc. All rights reserved. + This file is generated. Don't touch this file directly. +*/ +static UTF32Char const __CFUniCharCompatibilityDecompositionTable[] = { + 0x000000A0, 0x01000020, 0x000000A8, 0x02000000, + 0x000000AA, 0x01000061, 0x000000AF, 0x02000002, + 0x000000B2, 0x01000032, 0x000000B3, 0x01000033, + 0x000000B4, 0x02000004, 0x000000B5, 0x010003BC, + 0x000000B8, 0x02000006, 0x000000B9, 0x01000031, + 0x000000BA, 0x0100006F, 0x000000BC, 0x03000008, + 0x000000BD, 0x0300000B, 0x000000BE, 0x0300000E, + 0x00000132, 0x02000011, 0x00000133, 0x02000013, + 0x0000013F, 0x02000015, 0x00000140, 0x02000017, + 0x00000149, 0x02000019, 0x0000017F, 0x01000073, + 0x000001C4, 0x0200001B, 0x000001C5, 0x0200001D, + 0x000001C6, 0x0200001F, 0x000001C7, 0x02000021, + 0x000001C8, 0x02000023, 0x000001C9, 0x02000025, + 0x000001CA, 0x02000027, 0x000001CB, 0x02000029, + 0x000001CC, 0x0200002B, 0x000001F1, 0x0200002D, + 0x000001F2, 0x0200002F, 0x000001F3, 0x02000031, + 0x000002B0, 0x01000068, 0x000002B1, 0x01000266, + 0x000002B2, 0x0100006A, 0x000002B3, 0x01000072, + 0x000002B4, 0x01000279, 0x000002B5, 0x0100027B, + 0x000002B6, 0x01000281, 0x000002B7, 0x01000077, + 0x000002B8, 0x01000079, 0x000002D8, 0x02000033, + 0x000002D9, 0x02000035, 0x000002DA, 0x02000037, + 0x000002DB, 0x02000039, 0x000002DC, 0x0200003B, + 0x000002DD, 0x0200003D, 0x000002E0, 0x01000263, + 0x000002E1, 0x0100006C, 0x000002E2, 0x01000073, + 0x000002E3, 0x01000078, 0x000002E4, 0x01000295, + 0x0000037A, 0x0200003F, 0x00000384, 0x02000041, + 0x000003D0, 0x010003B2, 0x000003D1, 0x010003B8, + 0x000003D2, 0x010003A5, 0x000003D5, 0x010003C6, + 0x000003D6, 0x010003C0, 0x000003F0, 0x010003BA, + 0x000003F1, 0x010003C1, 0x000003F2, 0x010003C2, + 0x000003F4, 0x01000398, 0x000003F5, 0x010003B5, + 0x000003F9, 0x010003A3, 0x00000587, 0x02000043, + 0x00000675, 0x02000045, 0x00000676, 0x02000047, + 0x00000677, 0x02000049, 0x00000678, 0x0200004B, + 0x00000E33, 0x0200004D, 0x00000EB3, 0x0200004F, + 0x00000EDC, 0x02000051, 0x00000EDD, 0x02000053, + 0x00000F0C, 0x01000F0B, 0x00000F77, 0x02000055, + 0x00000F79, 0x02000057, 0x000010FC, 0x010010DC, + 0x00001D2C, 0x01000041, 0x00001D2D, 0x010000C6, + 0x00001D2E, 0x01000042, 0x00001D30, 0x01000044, + 0x00001D31, 0x01000045, 0x00001D32, 0x0100018E, + 0x00001D33, 0x01000047, 0x00001D34, 0x01000048, + 0x00001D35, 0x01000049, 0x00001D36, 0x0100004A, + 0x00001D37, 0x0100004B, 0x00001D38, 0x0100004C, + 0x00001D39, 0x0100004D, 0x00001D3A, 0x0100004E, + 0x00001D3C, 0x0100004F, 0x00001D3D, 0x01000222, + 0x00001D3E, 0x01000050, 0x00001D3F, 0x01000052, + 0x00001D40, 0x01000054, 0x00001D41, 0x01000055, + 0x00001D42, 0x01000057, 0x00001D43, 0x01000061, + 0x00001D44, 0x01000250, 0x00001D45, 0x01000251, + 0x00001D46, 0x01001D02, 0x00001D47, 0x01000062, + 0x00001D48, 0x01000064, 0x00001D49, 0x01000065, + 0x00001D4A, 0x01000259, 0x00001D4B, 0x0100025B, + 0x00001D4C, 0x0100025C, 0x00001D4D, 0x01000067, + 0x00001D4F, 0x0100006B, 0x00001D50, 0x0100006D, + 0x00001D51, 0x0100014B, 0x00001D52, 0x0100006F, + 0x00001D53, 0x01000254, 0x00001D54, 0x01001D16, + 0x00001D55, 0x01001D17, 0x00001D56, 0x01000070, + 0x00001D57, 0x01000074, 0x00001D58, 0x01000075, + 0x00001D59, 0x01001D1D, 0x00001D5A, 0x0100026F, + 0x00001D5B, 0x01000076, 0x00001D5C, 0x01001D25, + 0x00001D5D, 0x010003B2, 0x00001D5E, 0x010003B3, + 0x00001D5F, 0x010003B4, 0x00001D60, 0x010003C6, + 0x00001D61, 0x010003C7, 0x00001D62, 0x01000069, + 0x00001D63, 0x01000072, 0x00001D64, 0x01000075, + 0x00001D65, 0x01000076, 0x00001D66, 0x010003B2, + 0x00001D67, 0x010003B3, 0x00001D68, 0x010003C1, + 0x00001D69, 0x010003C6, 0x00001D6A, 0x010003C7, + 0x00001D78, 0x0100043D, 0x00001D9B, 0x01000252, + 0x00001D9C, 0x01000063, 0x00001D9D, 0x01000255, + 0x00001D9E, 0x010000F0, 0x00001D9F, 0x0100025C, + 0x00001DA0, 0x01000066, 0x00001DA1, 0x0100025F, + 0x00001DA2, 0x01000261, 0x00001DA3, 0x01000265, + 0x00001DA4, 0x01000268, 0x00001DA5, 0x01000269, + 0x00001DA6, 0x0100026A, 0x00001DA7, 0x01001D7B, + 0x00001DA8, 0x0100029D, 0x00001DA9, 0x0100026D, + 0x00001DAA, 0x01001D85, 0x00001DAB, 0x0100029F, + 0x00001DAC, 0x01000271, 0x00001DAD, 0x01000270, + 0x00001DAE, 0x01000272, 0x00001DAF, 0x01000273, + 0x00001DB0, 0x01000274, 0x00001DB1, 0x01000275, + 0x00001DB2, 0x01000278, 0x00001DB3, 0x01000282, + 0x00001DB4, 0x01000283, 0x00001DB5, 0x010001AB, + 0x00001DB6, 0x01000289, 0x00001DB7, 0x0100028A, + 0x00001DB8, 0x01001D1C, 0x00001DB9, 0x0100028B, + 0x00001DBA, 0x0100028C, 0x00001DBB, 0x0100007A, + 0x00001DBC, 0x01000290, 0x00001DBD, 0x01000291, + 0x00001DBE, 0x01000292, 0x00001DBF, 0x010003B8, + 0x00001E9A, 0x02000059, 0x00001FBD, 0x0200005B, + 0x00001FBF, 0x0200005D, 0x00001FC0, 0x0200005F, + 0x00001FFE, 0x02000061, 0x00002002, 0x01000020, + 0x00002003, 0x01000020, 0x00002004, 0x01000020, + 0x00002005, 0x01000020, 0x00002006, 0x01000020, + 0x00002007, 0x01000020, 0x00002008, 0x01000020, + 0x00002009, 0x01000020, 0x0000200A, 0x01000020, + 0x00002011, 0x01002010, 0x00002017, 0x02000063, + 0x00002024, 0x0100002E, 0x00002025, 0x02000065, + 0x00002026, 0x03000067, 0x0000202F, 0x01000020, + 0x00002033, 0x0200006A, 0x00002034, 0x0300006C, + 0x00002036, 0x0200006F, 0x00002037, 0x03000071, + 0x0000203C, 0x02000074, 0x0000203E, 0x02000076, + 0x00002047, 0x02000078, 0x00002048, 0x0200007A, + 0x00002049, 0x0200007C, 0x00002057, 0x0400007E, + 0x0000205F, 0x01000020, 0x00002070, 0x01000030, + 0x00002071, 0x01000069, 0x00002074, 0x01000034, + 0x00002075, 0x01000035, 0x00002076, 0x01000036, + 0x00002077, 0x01000037, 0x00002078, 0x01000038, + 0x00002079, 0x01000039, 0x0000207A, 0x0100002B, + 0x0000207B, 0x01002212, 0x0000207C, 0x0100003D, + 0x0000207D, 0x01000028, 0x0000207E, 0x01000029, + 0x0000207F, 0x0100006E, 0x00002080, 0x01000030, + 0x00002081, 0x01000031, 0x00002082, 0x01000032, + 0x00002083, 0x01000033, 0x00002084, 0x01000034, + 0x00002085, 0x01000035, 0x00002086, 0x01000036, + 0x00002087, 0x01000037, 0x00002088, 0x01000038, + 0x00002089, 0x01000039, 0x0000208A, 0x0100002B, + 0x0000208B, 0x01002212, 0x0000208C, 0x0100003D, + 0x0000208D, 0x01000028, 0x0000208E, 0x01000029, + 0x00002090, 0x01000061, 0x00002091, 0x01000065, + 0x00002092, 0x0100006F, 0x00002093, 0x01000078, + 0x00002094, 0x01000259, 0x00002095, 0x01000068, + 0x00002096, 0x0100006B, 0x00002097, 0x0100006C, + 0x00002098, 0x0100006D, 0x00002099, 0x0100006E, + 0x0000209A, 0x01000070, 0x0000209B, 0x01000073, + 0x0000209C, 0x01000074, 0x000020A8, 0x02000082, + 0x00002100, 0x03000084, 0x00002101, 0x03000087, + 0x00002102, 0x01000043, 0x00002103, 0x0200008A, + 0x00002105, 0x0300008C, 0x00002106, 0x0300008F, + 0x00002107, 0x01000190, 0x00002109, 0x02000092, + 0x0000210A, 0x01000067, 0x0000210B, 0x01000048, + 0x0000210C, 0x01000048, 0x0000210D, 0x01000048, + 0x0000210E, 0x01000068, 0x0000210F, 0x01000127, + 0x00002110, 0x01000049, 0x00002111, 0x01000049, + 0x00002112, 0x0100004C, 0x00002113, 0x0100006C, + 0x00002115, 0x0100004E, 0x00002116, 0x02000094, + 0x00002119, 0x01000050, 0x0000211A, 0x01000051, + 0x0000211B, 0x01000052, 0x0000211C, 0x01000052, + 0x0000211D, 0x01000052, 0x00002120, 0x02000096, + 0x00002121, 0x03000098, 0x00002122, 0x0200009B, + 0x00002124, 0x0100005A, 0x00002128, 0x0100005A, + 0x0000212C, 0x01000042, 0x0000212D, 0x01000043, + 0x0000212F, 0x01000065, 0x00002130, 0x01000045, + 0x00002131, 0x01000046, 0x00002133, 0x0100004D, + 0x00002134, 0x0100006F, 0x00002135, 0x010005D0, + 0x00002136, 0x010005D1, 0x00002137, 0x010005D2, + 0x00002138, 0x010005D3, 0x00002139, 0x01000069, + 0x0000213B, 0x0300009D, 0x0000213C, 0x010003C0, + 0x0000213D, 0x010003B3, 0x0000213E, 0x01000393, + 0x0000213F, 0x010003A0, 0x00002140, 0x01002211, + 0x00002145, 0x01000044, 0x00002146, 0x01000064, + 0x00002147, 0x01000065, 0x00002148, 0x01000069, + 0x00002149, 0x0100006A, 0x00002150, 0x030000A0, + 0x00002151, 0x030000A3, 0x00002152, 0x040000A6, + 0x00002153, 0x030000AA, 0x00002154, 0x030000AD, + 0x00002155, 0x030000B0, 0x00002156, 0x030000B3, + 0x00002157, 0x030000B6, 0x00002158, 0x030000B9, + 0x00002159, 0x030000BC, 0x0000215A, 0x030000BF, + 0x0000215B, 0x030000C2, 0x0000215C, 0x030000C5, + 0x0000215D, 0x030000C8, 0x0000215E, 0x030000CB, + 0x0000215F, 0x020000CE, 0x00002160, 0x01000049, + 0x00002161, 0x020000D0, 0x00002162, 0x030000D2, + 0x00002163, 0x020000D5, 0x00002164, 0x01000056, + 0x00002165, 0x020000D7, 0x00002166, 0x030000D9, + 0x00002167, 0x040000DC, 0x00002168, 0x020000E0, + 0x00002169, 0x01000058, 0x0000216A, 0x020000E2, + 0x0000216B, 0x030000E4, 0x0000216C, 0x0100004C, + 0x0000216D, 0x01000043, 0x0000216E, 0x01000044, + 0x0000216F, 0x0100004D, 0x00002170, 0x01000069, + 0x00002171, 0x020000E7, 0x00002172, 0x030000E9, + 0x00002173, 0x020000EC, 0x00002174, 0x01000076, + 0x00002175, 0x020000EE, 0x00002176, 0x030000F0, + 0x00002177, 0x040000F3, 0x00002178, 0x020000F7, + 0x00002179, 0x01000078, 0x0000217A, 0x020000F9, + 0x0000217B, 0x030000FB, 0x0000217C, 0x0100006C, + 0x0000217D, 0x01000063, 0x0000217E, 0x01000064, + 0x0000217F, 0x0100006D, 0x00002189, 0x030000FE, + 0x0000222C, 0x02000101, 0x0000222D, 0x03000103, + 0x0000222F, 0x02000106, 0x00002230, 0x03000108, + 0x00002460, 0x01000031, 0x00002461, 0x01000032, + 0x00002462, 0x01000033, 0x00002463, 0x01000034, + 0x00002464, 0x01000035, 0x00002465, 0x01000036, + 0x00002466, 0x01000037, 0x00002467, 0x01000038, + 0x00002468, 0x01000039, 0x00002469, 0x0200010B, + 0x0000246A, 0x0200010D, 0x0000246B, 0x0200010F, + 0x0000246C, 0x02000111, 0x0000246D, 0x02000113, + 0x0000246E, 0x02000115, 0x0000246F, 0x02000117, + 0x00002470, 0x02000119, 0x00002471, 0x0200011B, + 0x00002472, 0x0200011D, 0x00002473, 0x0200011F, + 0x00002474, 0x03000121, 0x00002475, 0x03000124, + 0x00002476, 0x03000127, 0x00002477, 0x0300012A, + 0x00002478, 0x0300012D, 0x00002479, 0x03000130, + 0x0000247A, 0x03000133, 0x0000247B, 0x03000136, + 0x0000247C, 0x03000139, 0x0000247D, 0x0400013C, + 0x0000247E, 0x04000140, 0x0000247F, 0x04000144, + 0x00002480, 0x04000148, 0x00002481, 0x0400014C, + 0x00002482, 0x04000150, 0x00002483, 0x04000154, + 0x00002484, 0x04000158, 0x00002485, 0x0400015C, + 0x00002486, 0x04000160, 0x00002487, 0x04000164, + 0x00002488, 0x02000168, 0x00002489, 0x0200016A, + 0x0000248A, 0x0200016C, 0x0000248B, 0x0200016E, + 0x0000248C, 0x02000170, 0x0000248D, 0x02000172, + 0x0000248E, 0x02000174, 0x0000248F, 0x02000176, + 0x00002490, 0x02000178, 0x00002491, 0x0300017A, + 0x00002492, 0x0300017D, 0x00002493, 0x03000180, + 0x00002494, 0x03000183, 0x00002495, 0x03000186, + 0x00002496, 0x03000189, 0x00002497, 0x0300018C, + 0x00002498, 0x0300018F, 0x00002499, 0x03000192, + 0x0000249A, 0x03000195, 0x0000249B, 0x03000198, + 0x0000249C, 0x0300019B, 0x0000249D, 0x0300019E, + 0x0000249E, 0x030001A1, 0x0000249F, 0x030001A4, + 0x000024A0, 0x030001A7, 0x000024A1, 0x030001AA, + 0x000024A2, 0x030001AD, 0x000024A3, 0x030001B0, + 0x000024A4, 0x030001B3, 0x000024A5, 0x030001B6, + 0x000024A6, 0x030001B9, 0x000024A7, 0x030001BC, + 0x000024A8, 0x030001BF, 0x000024A9, 0x030001C2, + 0x000024AA, 0x030001C5, 0x000024AB, 0x030001C8, + 0x000024AC, 0x030001CB, 0x000024AD, 0x030001CE, + 0x000024AE, 0x030001D1, 0x000024AF, 0x030001D4, + 0x000024B0, 0x030001D7, 0x000024B1, 0x030001DA, + 0x000024B2, 0x030001DD, 0x000024B3, 0x030001E0, + 0x000024B4, 0x030001E3, 0x000024B5, 0x030001E6, + 0x000024B6, 0x01000041, 0x000024B7, 0x01000042, + 0x000024B8, 0x01000043, 0x000024B9, 0x01000044, + 0x000024BA, 0x01000045, 0x000024BB, 0x01000046, + 0x000024BC, 0x01000047, 0x000024BD, 0x01000048, + 0x000024BE, 0x01000049, 0x000024BF, 0x0100004A, + 0x000024C0, 0x0100004B, 0x000024C1, 0x0100004C, + 0x000024C2, 0x0100004D, 0x000024C3, 0x0100004E, + 0x000024C4, 0x0100004F, 0x000024C5, 0x01000050, + 0x000024C6, 0x01000051, 0x000024C7, 0x01000052, + 0x000024C8, 0x01000053, 0x000024C9, 0x01000054, + 0x000024CA, 0x01000055, 0x000024CB, 0x01000056, + 0x000024CC, 0x01000057, 0x000024CD, 0x01000058, + 0x000024CE, 0x01000059, 0x000024CF, 0x0100005A, + 0x000024D0, 0x01000061, 0x000024D1, 0x01000062, + 0x000024D2, 0x01000063, 0x000024D3, 0x01000064, + 0x000024D4, 0x01000065, 0x000024D5, 0x01000066, + 0x000024D6, 0x01000067, 0x000024D7, 0x01000068, + 0x000024D8, 0x01000069, 0x000024D9, 0x0100006A, + 0x000024DA, 0x0100006B, 0x000024DB, 0x0100006C, + 0x000024DC, 0x0100006D, 0x000024DD, 0x0100006E, + 0x000024DE, 0x0100006F, 0x000024DF, 0x01000070, + 0x000024E0, 0x01000071, 0x000024E1, 0x01000072, + 0x000024E2, 0x01000073, 0x000024E3, 0x01000074, + 0x000024E4, 0x01000075, 0x000024E5, 0x01000076, + 0x000024E6, 0x01000077, 0x000024E7, 0x01000078, + 0x000024E8, 0x01000079, 0x000024E9, 0x0100007A, + 0x000024EA, 0x01000030, 0x00002A0C, 0x040001E9, + 0x00002A74, 0x030001ED, 0x00002A75, 0x020001F0, + 0x00002A76, 0x030001F2, 0x00002C7C, 0x0100006A, + 0x00002C7D, 0x01000056, 0x00002D6F, 0x01002D61, + 0x00002E9F, 0x01006BCD, 0x00002EF3, 0x01009F9F, + 0x00002F00, 0x01004E00, 0x00002F01, 0x01004E28, + 0x00002F02, 0x01004E36, 0x00002F03, 0x01004E3F, + 0x00002F04, 0x01004E59, 0x00002F05, 0x01004E85, + 0x00002F06, 0x01004E8C, 0x00002F07, 0x01004EA0, + 0x00002F08, 0x01004EBA, 0x00002F09, 0x0100513F, + 0x00002F0A, 0x01005165, 0x00002F0B, 0x0100516B, + 0x00002F0C, 0x01005182, 0x00002F0D, 0x01005196, + 0x00002F0E, 0x010051AB, 0x00002F0F, 0x010051E0, + 0x00002F10, 0x010051F5, 0x00002F11, 0x01005200, + 0x00002F12, 0x0100529B, 0x00002F13, 0x010052F9, + 0x00002F14, 0x01005315, 0x00002F15, 0x0100531A, + 0x00002F16, 0x01005338, 0x00002F17, 0x01005341, + 0x00002F18, 0x0100535C, 0x00002F19, 0x01005369, + 0x00002F1A, 0x01005382, 0x00002F1B, 0x010053B6, + 0x00002F1C, 0x010053C8, 0x00002F1D, 0x010053E3, + 0x00002F1E, 0x010056D7, 0x00002F1F, 0x0100571F, + 0x00002F20, 0x010058EB, 0x00002F21, 0x01005902, + 0x00002F22, 0x0100590A, 0x00002F23, 0x01005915, + 0x00002F24, 0x01005927, 0x00002F25, 0x01005973, + 0x00002F26, 0x01005B50, 0x00002F27, 0x01005B80, + 0x00002F28, 0x01005BF8, 0x00002F29, 0x01005C0F, + 0x00002F2A, 0x01005C22, 0x00002F2B, 0x01005C38, + 0x00002F2C, 0x01005C6E, 0x00002F2D, 0x01005C71, + 0x00002F2E, 0x01005DDB, 0x00002F2F, 0x01005DE5, + 0x00002F30, 0x01005DF1, 0x00002F31, 0x01005DFE, + 0x00002F32, 0x01005E72, 0x00002F33, 0x01005E7A, + 0x00002F34, 0x01005E7F, 0x00002F35, 0x01005EF4, + 0x00002F36, 0x01005EFE, 0x00002F37, 0x01005F0B, + 0x00002F38, 0x01005F13, 0x00002F39, 0x01005F50, + 0x00002F3A, 0x01005F61, 0x00002F3B, 0x01005F73, + 0x00002F3C, 0x01005FC3, 0x00002F3D, 0x01006208, + 0x00002F3E, 0x01006236, 0x00002F3F, 0x0100624B, + 0x00002F40, 0x0100652F, 0x00002F41, 0x01006534, + 0x00002F42, 0x01006587, 0x00002F43, 0x01006597, + 0x00002F44, 0x010065A4, 0x00002F45, 0x010065B9, + 0x00002F46, 0x010065E0, 0x00002F47, 0x010065E5, + 0x00002F48, 0x010066F0, 0x00002F49, 0x01006708, + 0x00002F4A, 0x01006728, 0x00002F4B, 0x01006B20, + 0x00002F4C, 0x01006B62, 0x00002F4D, 0x01006B79, + 0x00002F4E, 0x01006BB3, 0x00002F4F, 0x01006BCB, + 0x00002F50, 0x01006BD4, 0x00002F51, 0x01006BDB, + 0x00002F52, 0x01006C0F, 0x00002F53, 0x01006C14, + 0x00002F54, 0x01006C34, 0x00002F55, 0x0100706B, + 0x00002F56, 0x0100722A, 0x00002F57, 0x01007236, + 0x00002F58, 0x0100723B, 0x00002F59, 0x0100723F, + 0x00002F5A, 0x01007247, 0x00002F5B, 0x01007259, + 0x00002F5C, 0x0100725B, 0x00002F5D, 0x010072AC, + 0x00002F5E, 0x01007384, 0x00002F5F, 0x01007389, + 0x00002F60, 0x010074DC, 0x00002F61, 0x010074E6, + 0x00002F62, 0x01007518, 0x00002F63, 0x0100751F, + 0x00002F64, 0x01007528, 0x00002F65, 0x01007530, + 0x00002F66, 0x0100758B, 0x00002F67, 0x01007592, + 0x00002F68, 0x01007676, 0x00002F69, 0x0100767D, + 0x00002F6A, 0x010076AE, 0x00002F6B, 0x010076BF, + 0x00002F6C, 0x010076EE, 0x00002F6D, 0x010077DB, + 0x00002F6E, 0x010077E2, 0x00002F6F, 0x010077F3, + 0x00002F70, 0x0100793A, 0x00002F71, 0x010079B8, + 0x00002F72, 0x010079BE, 0x00002F73, 0x01007A74, + 0x00002F74, 0x01007ACB, 0x00002F75, 0x01007AF9, + 0x00002F76, 0x01007C73, 0x00002F77, 0x01007CF8, + 0x00002F78, 0x01007F36, 0x00002F79, 0x01007F51, + 0x00002F7A, 0x01007F8A, 0x00002F7B, 0x01007FBD, + 0x00002F7C, 0x01008001, 0x00002F7D, 0x0100800C, + 0x00002F7E, 0x01008012, 0x00002F7F, 0x01008033, + 0x00002F80, 0x0100807F, 0x00002F81, 0x01008089, + 0x00002F82, 0x010081E3, 0x00002F83, 0x010081EA, + 0x00002F84, 0x010081F3, 0x00002F85, 0x010081FC, + 0x00002F86, 0x0100820C, 0x00002F87, 0x0100821B, + 0x00002F88, 0x0100821F, 0x00002F89, 0x0100826E, + 0x00002F8A, 0x01008272, 0x00002F8B, 0x01008278, + 0x00002F8C, 0x0100864D, 0x00002F8D, 0x0100866B, + 0x00002F8E, 0x01008840, 0x00002F8F, 0x0100884C, + 0x00002F90, 0x01008863, 0x00002F91, 0x0100897E, + 0x00002F92, 0x0100898B, 0x00002F93, 0x010089D2, + 0x00002F94, 0x01008A00, 0x00002F95, 0x01008C37, + 0x00002F96, 0x01008C46, 0x00002F97, 0x01008C55, + 0x00002F98, 0x01008C78, 0x00002F99, 0x01008C9D, + 0x00002F9A, 0x01008D64, 0x00002F9B, 0x01008D70, + 0x00002F9C, 0x01008DB3, 0x00002F9D, 0x01008EAB, + 0x00002F9E, 0x01008ECA, 0x00002F9F, 0x01008F9B, + 0x00002FA0, 0x01008FB0, 0x00002FA1, 0x01008FB5, + 0x00002FA2, 0x01009091, 0x00002FA3, 0x01009149, + 0x00002FA4, 0x010091C6, 0x00002FA5, 0x010091CC, + 0x00002FA6, 0x010091D1, 0x00002FA7, 0x01009577, + 0x00002FA8, 0x01009580, 0x00002FA9, 0x0100961C, + 0x00002FAA, 0x010096B6, 0x00002FAB, 0x010096B9, + 0x00002FAC, 0x010096E8, 0x00002FAD, 0x01009751, + 0x00002FAE, 0x0100975E, 0x00002FAF, 0x01009762, + 0x00002FB0, 0x01009769, 0x00002FB1, 0x010097CB, + 0x00002FB2, 0x010097ED, 0x00002FB3, 0x010097F3, + 0x00002FB4, 0x01009801, 0x00002FB5, 0x010098A8, + 0x00002FB6, 0x010098DB, 0x00002FB7, 0x010098DF, + 0x00002FB8, 0x01009996, 0x00002FB9, 0x01009999, + 0x00002FBA, 0x010099AC, 0x00002FBB, 0x01009AA8, + 0x00002FBC, 0x01009AD8, 0x00002FBD, 0x01009ADF, + 0x00002FBE, 0x01009B25, 0x00002FBF, 0x01009B2F, + 0x00002FC0, 0x01009B32, 0x00002FC1, 0x01009B3C, + 0x00002FC2, 0x01009B5A, 0x00002FC3, 0x01009CE5, + 0x00002FC4, 0x01009E75, 0x00002FC5, 0x01009E7F, + 0x00002FC6, 0x01009EA5, 0x00002FC7, 0x01009EBB, + 0x00002FC8, 0x01009EC3, 0x00002FC9, 0x01009ECD, + 0x00002FCA, 0x01009ED1, 0x00002FCB, 0x01009EF9, + 0x00002FCC, 0x01009EFD, 0x00002FCD, 0x01009F0E, + 0x00002FCE, 0x01009F13, 0x00002FCF, 0x01009F20, + 0x00002FD0, 0x01009F3B, 0x00002FD1, 0x01009F4A, + 0x00002FD2, 0x01009F52, 0x00002FD3, 0x01009F8D, + 0x00002FD4, 0x01009F9C, 0x00002FD5, 0x01009FA0, + 0x00003000, 0x01000020, 0x00003036, 0x01003012, + 0x00003038, 0x01005341, 0x00003039, 0x01005344, + 0x0000303A, 0x01005345, 0x0000309B, 0x020001F5, + 0x0000309C, 0x020001F7, 0x0000309F, 0x020001F9, + 0x000030FF, 0x020001FB, 0x00003131, 0x01001100, + 0x00003132, 0x01001101, 0x00003133, 0x010011AA, + 0x00003134, 0x01001102, 0x00003135, 0x010011AC, + 0x00003136, 0x010011AD, 0x00003137, 0x01001103, + 0x00003138, 0x01001104, 0x00003139, 0x01001105, + 0x0000313A, 0x010011B0, 0x0000313B, 0x010011B1, + 0x0000313C, 0x010011B2, 0x0000313D, 0x010011B3, + 0x0000313E, 0x010011B4, 0x0000313F, 0x010011B5, + 0x00003140, 0x0100111A, 0x00003141, 0x01001106, + 0x00003142, 0x01001107, 0x00003143, 0x01001108, + 0x00003144, 0x01001121, 0x00003145, 0x01001109, + 0x00003146, 0x0100110A, 0x00003147, 0x0100110B, + 0x00003148, 0x0100110C, 0x00003149, 0x0100110D, + 0x0000314A, 0x0100110E, 0x0000314B, 0x0100110F, + 0x0000314C, 0x01001110, 0x0000314D, 0x01001111, + 0x0000314E, 0x01001112, 0x0000314F, 0x01001161, + 0x00003150, 0x01001162, 0x00003151, 0x01001163, + 0x00003152, 0x01001164, 0x00003153, 0x01001165, + 0x00003154, 0x01001166, 0x00003155, 0x01001167, + 0x00003156, 0x01001168, 0x00003157, 0x01001169, + 0x00003158, 0x0100116A, 0x00003159, 0x0100116B, + 0x0000315A, 0x0100116C, 0x0000315B, 0x0100116D, + 0x0000315C, 0x0100116E, 0x0000315D, 0x0100116F, + 0x0000315E, 0x01001170, 0x0000315F, 0x01001171, + 0x00003160, 0x01001172, 0x00003161, 0x01001173, + 0x00003162, 0x01001174, 0x00003163, 0x01001175, + 0x00003164, 0x01001160, 0x00003165, 0x01001114, + 0x00003166, 0x01001115, 0x00003167, 0x010011C7, + 0x00003168, 0x010011C8, 0x00003169, 0x010011CC, + 0x0000316A, 0x010011CE, 0x0000316B, 0x010011D3, + 0x0000316C, 0x010011D7, 0x0000316D, 0x010011D9, + 0x0000316E, 0x0100111C, 0x0000316F, 0x010011DD, + 0x00003170, 0x010011DF, 0x00003171, 0x0100111D, + 0x00003172, 0x0100111E, 0x00003173, 0x01001120, + 0x00003174, 0x01001122, 0x00003175, 0x01001123, + 0x00003176, 0x01001127, 0x00003177, 0x01001129, + 0x00003178, 0x0100112B, 0x00003179, 0x0100112C, + 0x0000317A, 0x0100112D, 0x0000317B, 0x0100112E, + 0x0000317C, 0x0100112F, 0x0000317D, 0x01001132, + 0x0000317E, 0x01001136, 0x0000317F, 0x01001140, + 0x00003180, 0x01001147, 0x00003181, 0x0100114C, + 0x00003182, 0x010011F1, 0x00003183, 0x010011F2, + 0x00003184, 0x01001157, 0x00003185, 0x01001158, + 0x00003186, 0x01001159, 0x00003187, 0x01001184, + 0x00003188, 0x01001185, 0x00003189, 0x01001188, + 0x0000318A, 0x01001191, 0x0000318B, 0x01001192, + 0x0000318C, 0x01001194, 0x0000318D, 0x0100119E, + 0x0000318E, 0x010011A1, 0x00003192, 0x01004E00, + 0x00003193, 0x01004E8C, 0x00003194, 0x01004E09, + 0x00003195, 0x010056DB, 0x00003196, 0x01004E0A, + 0x00003197, 0x01004E2D, 0x00003198, 0x01004E0B, + 0x00003199, 0x01007532, 0x0000319A, 0x01004E59, + 0x0000319B, 0x01004E19, 0x0000319C, 0x01004E01, + 0x0000319D, 0x01005929, 0x0000319E, 0x01005730, + 0x0000319F, 0x01004EBA, 0x00003200, 0x030001FD, + 0x00003201, 0x03000200, 0x00003202, 0x03000203, + 0x00003203, 0x03000206, 0x00003204, 0x03000209, + 0x00003205, 0x0300020C, 0x00003206, 0x0300020F, + 0x00003207, 0x03000212, 0x00003208, 0x03000215, + 0x00003209, 0x03000218, 0x0000320A, 0x0300021B, + 0x0000320B, 0x0300021E, 0x0000320C, 0x03000221, + 0x0000320D, 0x03000224, 0x0000320E, 0x04000227, + 0x0000320F, 0x0400022B, 0x00003210, 0x0400022F, + 0x00003211, 0x04000233, 0x00003212, 0x04000237, + 0x00003213, 0x0400023B, 0x00003214, 0x0400023F, + 0x00003215, 0x04000243, 0x00003216, 0x04000247, + 0x00003217, 0x0400024B, 0x00003218, 0x0400024F, + 0x00003219, 0x04000253, 0x0000321A, 0x04000257, + 0x0000321B, 0x0400025B, 0x0000321C, 0x0400025F, + 0x0000321D, 0x07000263, 0x0000321E, 0x0600026A, + 0x00003220, 0x03000270, 0x00003221, 0x03000273, + 0x00003222, 0x03000276, 0x00003223, 0x03000279, + 0x00003224, 0x0300027C, 0x00003225, 0x0300027F, + 0x00003226, 0x03000282, 0x00003227, 0x03000285, + 0x00003228, 0x03000288, 0x00003229, 0x0300028B, + 0x0000322A, 0x0300028E, 0x0000322B, 0x03000291, + 0x0000322C, 0x03000294, 0x0000322D, 0x03000297, + 0x0000322E, 0x0300029A, 0x0000322F, 0x0300029D, + 0x00003230, 0x030002A0, 0x00003231, 0x030002A3, + 0x00003232, 0x030002A6, 0x00003233, 0x030002A9, + 0x00003234, 0x030002AC, 0x00003235, 0x030002AF, + 0x00003236, 0x030002B2, 0x00003237, 0x030002B5, + 0x00003238, 0x030002B8, 0x00003239, 0x030002BB, + 0x0000323A, 0x030002BE, 0x0000323B, 0x030002C1, + 0x0000323C, 0x030002C4, 0x0000323D, 0x030002C7, + 0x0000323E, 0x030002CA, 0x0000323F, 0x030002CD, + 0x00003240, 0x030002D0, 0x00003241, 0x030002D3, + 0x00003242, 0x030002D6, 0x00003243, 0x030002D9, + 0x00003244, 0x0100554F, 0x00003245, 0x01005E7C, + 0x00003246, 0x01006587, 0x00003247, 0x01007B8F, + 0x00003250, 0x030002DC, 0x00003251, 0x020002DF, + 0x00003252, 0x020002E1, 0x00003253, 0x020002E3, + 0x00003254, 0x020002E5, 0x00003255, 0x020002E7, + 0x00003256, 0x020002E9, 0x00003257, 0x020002EB, + 0x00003258, 0x020002ED, 0x00003259, 0x020002EF, + 0x0000325A, 0x020002F1, 0x0000325B, 0x020002F3, + 0x0000325C, 0x020002F5, 0x0000325D, 0x020002F7, + 0x0000325E, 0x020002F9, 0x0000325F, 0x020002FB, + 0x00003260, 0x01001100, 0x00003261, 0x01001102, + 0x00003262, 0x01001103, 0x00003263, 0x01001105, + 0x00003264, 0x01001106, 0x00003265, 0x01001107, + 0x00003266, 0x01001109, 0x00003267, 0x0100110B, + 0x00003268, 0x0100110C, 0x00003269, 0x0100110E, + 0x0000326A, 0x0100110F, 0x0000326B, 0x01001110, + 0x0000326C, 0x01001111, 0x0000326D, 0x01001112, + 0x0000326E, 0x020002FD, 0x0000326F, 0x020002FF, + 0x00003270, 0x02000301, 0x00003271, 0x02000303, + 0x00003272, 0x02000305, 0x00003273, 0x02000307, + 0x00003274, 0x02000309, 0x00003275, 0x0200030B, + 0x00003276, 0x0200030D, 0x00003277, 0x0200030F, + 0x00003278, 0x02000311, 0x00003279, 0x02000313, + 0x0000327A, 0x02000315, 0x0000327B, 0x02000317, + 0x0000327C, 0x05000319, 0x0000327D, 0x0400031E, + 0x0000327E, 0x02000322, 0x00003280, 0x01004E00, + 0x00003281, 0x01004E8C, 0x00003282, 0x01004E09, + 0x00003283, 0x010056DB, 0x00003284, 0x01004E94, + 0x00003285, 0x0100516D, 0x00003286, 0x01004E03, + 0x00003287, 0x0100516B, 0x00003288, 0x01004E5D, + 0x00003289, 0x01005341, 0x0000328A, 0x01006708, + 0x0000328B, 0x0100706B, 0x0000328C, 0x01006C34, + 0x0000328D, 0x01006728, 0x0000328E, 0x010091D1, + 0x0000328F, 0x0100571F, 0x00003290, 0x010065E5, + 0x00003291, 0x0100682A, 0x00003292, 0x01006709, + 0x00003293, 0x0100793E, 0x00003294, 0x0100540D, + 0x00003295, 0x01007279, 0x00003296, 0x01008CA1, + 0x00003297, 0x0100795D, 0x00003298, 0x010052B4, + 0x00003299, 0x010079D8, 0x0000329A, 0x01007537, + 0x0000329B, 0x01005973, 0x0000329C, 0x01009069, + 0x0000329D, 0x0100512A, 0x0000329E, 0x01005370, + 0x0000329F, 0x01006CE8, 0x000032A0, 0x01009805, + 0x000032A1, 0x01004F11, 0x000032A2, 0x01005199, + 0x000032A3, 0x01006B63, 0x000032A4, 0x01004E0A, + 0x000032A5, 0x01004E2D, 0x000032A6, 0x01004E0B, + 0x000032A7, 0x01005DE6, 0x000032A8, 0x010053F3, + 0x000032A9, 0x0100533B, 0x000032AA, 0x01005B97, + 0x000032AB, 0x01005B66, 0x000032AC, 0x010076E3, + 0x000032AD, 0x01004F01, 0x000032AE, 0x01008CC7, + 0x000032AF, 0x01005354, 0x000032B0, 0x0100591C, + 0x000032B1, 0x02000324, 0x000032B2, 0x02000326, + 0x000032B3, 0x02000328, 0x000032B4, 0x0200032A, + 0x000032B5, 0x0200032C, 0x000032B6, 0x0200032E, + 0x000032B7, 0x02000330, 0x000032B8, 0x02000332, + 0x000032B9, 0x02000334, 0x000032BA, 0x02000336, + 0x000032BB, 0x02000338, 0x000032BC, 0x0200033A, + 0x000032BD, 0x0200033C, 0x000032BE, 0x0200033E, + 0x000032BF, 0x02000340, 0x000032C0, 0x02000342, + 0x000032C1, 0x02000344, 0x000032C2, 0x02000346, + 0x000032C3, 0x02000348, 0x000032C4, 0x0200034A, + 0x000032C5, 0x0200034C, 0x000032C6, 0x0200034E, + 0x000032C7, 0x02000350, 0x000032C8, 0x02000352, + 0x000032C9, 0x03000354, 0x000032CA, 0x03000357, + 0x000032CB, 0x0300035A, 0x000032CC, 0x0200035D, + 0x000032CD, 0x0300035F, 0x000032CE, 0x02000362, + 0x000032CF, 0x03000364, 0x000032D0, 0x010030A2, + 0x000032D1, 0x010030A4, 0x000032D2, 0x010030A6, + 0x000032D3, 0x010030A8, 0x000032D4, 0x010030AA, + 0x000032D5, 0x010030AB, 0x000032D6, 0x010030AD, + 0x000032D7, 0x010030AF, 0x000032D8, 0x010030B1, + 0x000032D9, 0x010030B3, 0x000032DA, 0x010030B5, + 0x000032DB, 0x010030B7, 0x000032DC, 0x010030B9, + 0x000032DD, 0x010030BB, 0x000032DE, 0x010030BD, + 0x000032DF, 0x010030BF, 0x000032E0, 0x010030C1, + 0x000032E1, 0x010030C4, 0x000032E2, 0x010030C6, + 0x000032E3, 0x010030C8, 0x000032E4, 0x010030CA, + 0x000032E5, 0x010030CB, 0x000032E6, 0x010030CC, + 0x000032E7, 0x010030CD, 0x000032E8, 0x010030CE, + 0x000032E9, 0x010030CF, 0x000032EA, 0x010030D2, + 0x000032EB, 0x010030D5, 0x000032EC, 0x010030D8, + 0x000032ED, 0x010030DB, 0x000032EE, 0x010030DE, + 0x000032EF, 0x010030DF, 0x000032F0, 0x010030E0, + 0x000032F1, 0x010030E1, 0x000032F2, 0x010030E2, + 0x000032F3, 0x010030E4, 0x000032F4, 0x010030E6, + 0x000032F5, 0x010030E8, 0x000032F6, 0x010030E9, + 0x000032F7, 0x010030EA, 0x000032F8, 0x010030EB, + 0x000032F9, 0x010030EC, 0x000032FA, 0x010030ED, + 0x000032FB, 0x010030EF, 0x000032FC, 0x010030F0, + 0x000032FD, 0x010030F1, 0x000032FE, 0x010030F2, + 0x000032FF, 0x02000367, 0x00003300, 0x04000369, + 0x00003301, 0x0400036D, 0x00003302, 0x04000371, + 0x00003303, 0x03000375, 0x00003304, 0x04000378, + 0x00003305, 0x0300037C, 0x00003306, 0x0300037F, + 0x00003307, 0x05000382, 0x00003308, 0x04000387, + 0x00003309, 0x0300038B, 0x0000330A, 0x0300038E, + 0x0000330B, 0x03000391, 0x0000330C, 0x04000394, + 0x0000330D, 0x04000398, 0x0000330E, 0x0300039C, + 0x0000330F, 0x0300039F, 0x00003310, 0x020003A2, + 0x00003311, 0x030003A4, 0x00003312, 0x040003A7, + 0x00003313, 0x040003AB, 0x00003314, 0x020003AF, + 0x00003315, 0x050003B1, 0x00003316, 0x060003B6, + 0x00003317, 0x050003BC, 0x00003318, 0x030003C1, + 0x00003319, 0x050003C4, 0x0000331A, 0x050003C9, + 0x0000331B, 0x040003CE, 0x0000331C, 0x030003D2, + 0x0000331D, 0x030003D5, 0x0000331E, 0x030003D8, + 0x0000331F, 0x040003DB, 0x00003320, 0x050003DF, + 0x00003321, 0x040003E4, 0x00003322, 0x030003E8, + 0x00003323, 0x030003EB, 0x00003324, 0x030003EE, + 0x00003325, 0x020003F1, 0x00003326, 0x020003F3, + 0x00003327, 0x020003F5, 0x00003328, 0x020003F7, + 0x00003329, 0x030003F9, 0x0000332A, 0x030003FC, + 0x0000332B, 0x050003FF, 0x0000332C, 0x03000404, + 0x0000332D, 0x04000407, 0x0000332E, 0x0500040B, + 0x0000332F, 0x03000410, 0x00003330, 0x02000413, + 0x00003331, 0x02000415, 0x00003332, 0x05000417, + 0x00003333, 0x0400041C, 0x00003334, 0x05000420, + 0x00003335, 0x03000425, 0x00003336, 0x05000428, + 0x00003337, 0x0200042D, 0x00003338, 0x0300042F, + 0x00003339, 0x03000432, 0x0000333A, 0x03000435, + 0x0000333B, 0x03000438, 0x0000333C, 0x0300043B, + 0x0000333D, 0x0400043E, 0x0000333E, 0x03000442, + 0x0000333F, 0x02000445, 0x00003340, 0x03000447, + 0x00003341, 0x0300044A, 0x00003342, 0x0300044D, + 0x00003343, 0x04000450, 0x00003344, 0x03000454, + 0x00003345, 0x03000457, 0x00003346, 0x0300045A, + 0x00003347, 0x0500045D, 0x00003348, 0x04000462, + 0x00003349, 0x02000466, 0x0000334A, 0x05000468, + 0x0000334B, 0x0200046D, 0x0000334C, 0x0400046F, + 0x0000334D, 0x04000473, 0x0000334E, 0x03000477, + 0x0000334F, 0x0300047A, 0x00003350, 0x0300047D, + 0x00003351, 0x04000480, 0x00003352, 0x02000484, + 0x00003353, 0x03000486, 0x00003354, 0x04000489, + 0x00003355, 0x0200048D, 0x00003356, 0x0500048F, + 0x00003357, 0x03000494, 0x00003358, 0x02000497, + 0x00003359, 0x02000499, 0x0000335A, 0x0200049B, + 0x0000335B, 0x0200049D, 0x0000335C, 0x0200049F, + 0x0000335D, 0x020004A1, 0x0000335E, 0x020004A3, + 0x0000335F, 0x020004A5, 0x00003360, 0x020004A7, + 0x00003361, 0x020004A9, 0x00003362, 0x030004AB, + 0x00003363, 0x030004AE, 0x00003364, 0x030004B1, + 0x00003365, 0x030004B4, 0x00003366, 0x030004B7, + 0x00003367, 0x030004BA, 0x00003368, 0x030004BD, + 0x00003369, 0x030004C0, 0x0000336A, 0x030004C3, + 0x0000336B, 0x030004C6, 0x0000336C, 0x030004C9, + 0x0000336D, 0x030004CC, 0x0000336E, 0x030004CF, + 0x0000336F, 0x030004D2, 0x00003370, 0x030004D5, + 0x00003371, 0x030004D8, 0x00003372, 0x020004DB, + 0x00003373, 0x020004DD, 0x00003374, 0x030004DF, + 0x00003375, 0x020004E2, 0x00003376, 0x020004E4, + 0x00003377, 0x020004E6, 0x00003378, 0x030004E8, + 0x00003379, 0x030004EB, 0x0000337A, 0x020004EE, + 0x0000337B, 0x020004F0, 0x0000337C, 0x020004F2, + 0x0000337D, 0x020004F4, 0x0000337E, 0x020004F6, + 0x0000337F, 0x040004F8, 0x00003380, 0x020004FC, + 0x00003381, 0x020004FE, 0x00003382, 0x02000500, + 0x00003383, 0x02000502, 0x00003384, 0x02000504, + 0x00003385, 0x02000506, 0x00003386, 0x02000508, + 0x00003387, 0x0200050A, 0x00003388, 0x0300050C, + 0x00003389, 0x0400050F, 0x0000338A, 0x02000513, + 0x0000338B, 0x02000515, 0x0000338C, 0x02000517, + 0x0000338D, 0x02000519, 0x0000338E, 0x0200051B, + 0x0000338F, 0x0200051D, 0x00003390, 0x0200051F, + 0x00003391, 0x03000521, 0x00003392, 0x03000524, + 0x00003393, 0x03000527, 0x00003394, 0x0300052A, + 0x00003395, 0x0200052D, 0x00003396, 0x0200052F, + 0x00003397, 0x02000531, 0x00003398, 0x02000533, + 0x00003399, 0x02000535, 0x0000339A, 0x02000537, + 0x0000339B, 0x02000539, 0x0000339C, 0x0200053B, + 0x0000339D, 0x0200053D, 0x0000339E, 0x0200053F, + 0x0000339F, 0x03000541, 0x000033A0, 0x03000544, + 0x000033A1, 0x02000547, 0x000033A2, 0x03000549, + 0x000033A3, 0x0300054C, 0x000033A4, 0x0300054F, + 0x000033A5, 0x02000552, 0x000033A6, 0x03000554, + 0x000033A7, 0x03000557, 0x000033A8, 0x0400055A, + 0x000033A9, 0x0200055E, 0x000033AA, 0x03000560, + 0x000033AB, 0x03000563, 0x000033AC, 0x03000566, + 0x000033AD, 0x03000569, 0x000033AE, 0x0500056C, + 0x000033AF, 0x06000571, 0x000033B0, 0x02000577, + 0x000033B1, 0x02000579, 0x000033B2, 0x0200057B, + 0x000033B3, 0x0200057D, 0x000033B4, 0x0200057F, + 0x000033B5, 0x02000581, 0x000033B6, 0x02000583, + 0x000033B7, 0x02000585, 0x000033B8, 0x02000587, + 0x000033B9, 0x02000589, 0x000033BA, 0x0200058B, + 0x000033BB, 0x0200058D, 0x000033BC, 0x0200058F, + 0x000033BD, 0x02000591, 0x000033BE, 0x02000593, + 0x000033BF, 0x02000595, 0x000033C0, 0x02000597, + 0x000033C1, 0x02000599, 0x000033C2, 0x0400059B, + 0x000033C3, 0x0200059F, 0x000033C4, 0x020005A1, + 0x000033C5, 0x020005A3, 0x000033C6, 0x040005A5, + 0x000033C7, 0x030005A9, 0x000033C8, 0x020005AC, + 0x000033C9, 0x020005AE, 0x000033CA, 0x020005B0, + 0x000033CB, 0x020005B2, 0x000033CC, 0x020005B4, + 0x000033CD, 0x020005B6, 0x000033CE, 0x020005B8, + 0x000033CF, 0x020005BA, 0x000033D0, 0x020005BC, + 0x000033D1, 0x020005BE, 0x000033D2, 0x030005C0, + 0x000033D3, 0x020005C3, 0x000033D4, 0x020005C5, + 0x000033D5, 0x030005C7, 0x000033D6, 0x030005CA, + 0x000033D7, 0x020005CD, 0x000033D8, 0x040005CF, + 0x000033D9, 0x030005D3, 0x000033DA, 0x020005D6, + 0x000033DB, 0x020005D8, 0x000033DC, 0x020005DA, + 0x000033DD, 0x020005DC, 0x000033DE, 0x030005DE, + 0x000033DF, 0x030005E1, 0x000033E0, 0x020005E4, + 0x000033E1, 0x020005E6, 0x000033E2, 0x020005E8, + 0x000033E3, 0x020005EA, 0x000033E4, 0x020005EC, + 0x000033E5, 0x020005EE, 0x000033E6, 0x020005F0, + 0x000033E7, 0x020005F2, 0x000033E8, 0x020005F4, + 0x000033E9, 0x030005F6, 0x000033EA, 0x030005F9, + 0x000033EB, 0x030005FC, 0x000033EC, 0x030005FF, + 0x000033ED, 0x03000602, 0x000033EE, 0x03000605, + 0x000033EF, 0x03000608, 0x000033F0, 0x0300060B, + 0x000033F1, 0x0300060E, 0x000033F2, 0x03000611, + 0x000033F3, 0x03000614, 0x000033F4, 0x03000617, + 0x000033F5, 0x0300061A, 0x000033F6, 0x0300061D, + 0x000033F7, 0x03000620, 0x000033F8, 0x03000623, + 0x000033F9, 0x03000626, 0x000033FA, 0x03000629, + 0x000033FB, 0x0300062C, 0x000033FC, 0x0300062F, + 0x000033FD, 0x03000632, 0x000033FE, 0x03000635, + 0x000033FF, 0x03000638, 0x0000A69C, 0x0100044A, + 0x0000A69D, 0x0100044C, 0x0000A770, 0x0100A76F, + 0x0000A7F2, 0x01000043, 0x0000A7F3, 0x01000046, + 0x0000A7F4, 0x01000051, 0x0000A7F8, 0x01000126, + 0x0000A7F9, 0x01000153, 0x0000AB5C, 0x0100A727, + 0x0000AB5D, 0x0100AB37, 0x0000AB5E, 0x0100026B, + 0x0000AB5F, 0x0100AB52, 0x0000AB69, 0x0100028D, + 0x0000FB00, 0x0200063B, 0x0000FB01, 0x0200063D, + 0x0000FB02, 0x0200063F, 0x0000FB03, 0x03000641, + 0x0000FB04, 0x03000644, 0x0000FB05, 0x42000647, + 0x0000FB06, 0x02000649, 0x0000FB13, 0x0200064B, + 0x0000FB14, 0x0200064D, 0x0000FB15, 0x0200064F, + 0x0000FB16, 0x02000651, 0x0000FB17, 0x02000653, + 0x0000FB20, 0x010005E2, 0x0000FB21, 0x010005D0, + 0x0000FB22, 0x010005D3, 0x0000FB23, 0x010005D4, + 0x0000FB24, 0x010005DB, 0x0000FB25, 0x010005DC, + 0x0000FB26, 0x010005DD, 0x0000FB27, 0x010005E8, + 0x0000FB28, 0x010005EA, 0x0000FB29, 0x0100002B, + 0x0000FB4F, 0x02000655, 0x0000FB50, 0x01000671, + 0x0000FB51, 0x01000671, 0x0000FB52, 0x0100067B, + 0x0000FB53, 0x0100067B, 0x0000FB54, 0x0100067B, + 0x0000FB55, 0x0100067B, 0x0000FB56, 0x0100067E, + 0x0000FB57, 0x0100067E, 0x0000FB58, 0x0100067E, + 0x0000FB59, 0x0100067E, 0x0000FB5A, 0x01000680, + 0x0000FB5B, 0x01000680, 0x0000FB5C, 0x01000680, + 0x0000FB5D, 0x01000680, 0x0000FB5E, 0x0100067A, + 0x0000FB5F, 0x0100067A, 0x0000FB60, 0x0100067A, + 0x0000FB61, 0x0100067A, 0x0000FB62, 0x0100067F, + 0x0000FB63, 0x0100067F, 0x0000FB64, 0x0100067F, + 0x0000FB65, 0x0100067F, 0x0000FB66, 0x01000679, + 0x0000FB67, 0x01000679, 0x0000FB68, 0x01000679, + 0x0000FB69, 0x01000679, 0x0000FB6A, 0x010006A4, + 0x0000FB6B, 0x010006A4, 0x0000FB6C, 0x010006A4, + 0x0000FB6D, 0x010006A4, 0x0000FB6E, 0x010006A6, + 0x0000FB6F, 0x010006A6, 0x0000FB70, 0x010006A6, + 0x0000FB71, 0x010006A6, 0x0000FB72, 0x01000684, + 0x0000FB73, 0x01000684, 0x0000FB74, 0x01000684, + 0x0000FB75, 0x01000684, 0x0000FB76, 0x01000683, + 0x0000FB77, 0x01000683, 0x0000FB78, 0x01000683, + 0x0000FB79, 0x01000683, 0x0000FB7A, 0x01000686, + 0x0000FB7B, 0x01000686, 0x0000FB7C, 0x01000686, + 0x0000FB7D, 0x01000686, 0x0000FB7E, 0x01000687, + 0x0000FB7F, 0x01000687, 0x0000FB80, 0x01000687, + 0x0000FB81, 0x01000687, 0x0000FB82, 0x0100068D, + 0x0000FB83, 0x0100068D, 0x0000FB84, 0x0100068C, + 0x0000FB85, 0x0100068C, 0x0000FB86, 0x0100068E, + 0x0000FB87, 0x0100068E, 0x0000FB88, 0x01000688, + 0x0000FB89, 0x01000688, 0x0000FB8A, 0x01000698, + 0x0000FB8B, 0x01000698, 0x0000FB8C, 0x01000691, + 0x0000FB8D, 0x01000691, 0x0000FB8E, 0x010006A9, + 0x0000FB8F, 0x010006A9, 0x0000FB90, 0x010006A9, + 0x0000FB91, 0x010006A9, 0x0000FB92, 0x010006AF, + 0x0000FB93, 0x010006AF, 0x0000FB94, 0x010006AF, + 0x0000FB95, 0x010006AF, 0x0000FB96, 0x010006B3, + 0x0000FB97, 0x010006B3, 0x0000FB98, 0x010006B3, + 0x0000FB99, 0x010006B3, 0x0000FB9A, 0x010006B1, + 0x0000FB9B, 0x010006B1, 0x0000FB9C, 0x010006B1, + 0x0000FB9D, 0x010006B1, 0x0000FB9E, 0x010006BA, + 0x0000FB9F, 0x010006BA, 0x0000FBA0, 0x010006BB, + 0x0000FBA1, 0x010006BB, 0x0000FBA2, 0x010006BB, + 0x0000FBA3, 0x010006BB, 0x0000FBA4, 0x010006C0, + 0x0000FBA5, 0x010006C0, 0x0000FBA6, 0x010006C1, + 0x0000FBA7, 0x010006C1, 0x0000FBA8, 0x010006C1, + 0x0000FBA9, 0x010006C1, 0x0000FBAA, 0x010006BE, + 0x0000FBAB, 0x010006BE, 0x0000FBAC, 0x010006BE, + 0x0000FBAD, 0x010006BE, 0x0000FBAE, 0x010006D2, + 0x0000FBAF, 0x010006D2, 0x0000FBB0, 0x010006D3, + 0x0000FBB1, 0x010006D3, 0x0000FBD3, 0x010006AD, + 0x0000FBD4, 0x010006AD, 0x0000FBD5, 0x010006AD, + 0x0000FBD6, 0x010006AD, 0x0000FBD7, 0x010006C7, + 0x0000FBD8, 0x010006C7, 0x0000FBD9, 0x010006C6, + 0x0000FBDA, 0x010006C6, 0x0000FBDB, 0x010006C8, + 0x0000FBDC, 0x010006C8, 0x0000FBDD, 0x41000677, + 0x0000FBDE, 0x010006CB, 0x0000FBDF, 0x010006CB, + 0x0000FBE0, 0x010006C5, 0x0000FBE1, 0x010006C5, + 0x0000FBE2, 0x010006C9, 0x0000FBE3, 0x010006C9, + 0x0000FBE4, 0x010006D0, 0x0000FBE5, 0x010006D0, + 0x0000FBE6, 0x010006D0, 0x0000FBE7, 0x010006D0, + 0x0000FBE8, 0x01000649, 0x0000FBE9, 0x01000649, + 0x0000FBEA, 0x02000657, 0x0000FBEB, 0x02000659, + 0x0000FBEC, 0x0200065B, 0x0000FBED, 0x0200065D, + 0x0000FBEE, 0x0200065F, 0x0000FBEF, 0x02000661, + 0x0000FBF0, 0x02000663, 0x0000FBF1, 0x02000665, + 0x0000FBF2, 0x02000667, 0x0000FBF3, 0x02000669, + 0x0000FBF4, 0x0200066B, 0x0000FBF5, 0x0200066D, + 0x0000FBF6, 0x0200066F, 0x0000FBF7, 0x02000671, + 0x0000FBF8, 0x02000673, 0x0000FBF9, 0x02000675, + 0x0000FBFA, 0x02000677, 0x0000FBFB, 0x02000679, + 0x0000FBFC, 0x010006CC, 0x0000FBFD, 0x010006CC, + 0x0000FBFE, 0x010006CC, 0x0000FBFF, 0x010006CC, + 0x0000FC00, 0x0200067B, 0x0000FC01, 0x0200067D, + 0x0000FC02, 0x0200067F, 0x0000FC03, 0x02000681, + 0x0000FC04, 0x02000683, 0x0000FC05, 0x02000685, + 0x0000FC06, 0x02000687, 0x0000FC07, 0x02000689, + 0x0000FC08, 0x0200068B, 0x0000FC09, 0x0200068D, + 0x0000FC0A, 0x0200068F, 0x0000FC0B, 0x02000691, + 0x0000FC0C, 0x02000693, 0x0000FC0D, 0x02000695, + 0x0000FC0E, 0x02000697, 0x0000FC0F, 0x02000699, + 0x0000FC10, 0x0200069B, 0x0000FC11, 0x0200069D, + 0x0000FC12, 0x0200069F, 0x0000FC13, 0x020006A1, + 0x0000FC14, 0x020006A3, 0x0000FC15, 0x020006A5, + 0x0000FC16, 0x020006A7, 0x0000FC17, 0x020006A9, + 0x0000FC18, 0x020006AB, 0x0000FC19, 0x020006AD, + 0x0000FC1A, 0x020006AF, 0x0000FC1B, 0x020006B1, + 0x0000FC1C, 0x020006B3, 0x0000FC1D, 0x020006B5, + 0x0000FC1E, 0x020006B7, 0x0000FC1F, 0x020006B9, + 0x0000FC20, 0x020006BB, 0x0000FC21, 0x020006BD, + 0x0000FC22, 0x020006BF, 0x0000FC23, 0x020006C1, + 0x0000FC24, 0x020006C3, 0x0000FC25, 0x020006C5, + 0x0000FC26, 0x020006C7, 0x0000FC27, 0x020006C9, + 0x0000FC28, 0x020006CB, 0x0000FC29, 0x020006CD, + 0x0000FC2A, 0x020006CF, 0x0000FC2B, 0x020006D1, + 0x0000FC2C, 0x020006D3, 0x0000FC2D, 0x020006D5, + 0x0000FC2E, 0x020006D7, 0x0000FC2F, 0x020006D9, + 0x0000FC30, 0x020006DB, 0x0000FC31, 0x020006DD, + 0x0000FC32, 0x020006DF, 0x0000FC33, 0x020006E1, + 0x0000FC34, 0x020006E3, 0x0000FC35, 0x020006E5, + 0x0000FC36, 0x020006E7, 0x0000FC37, 0x020006E9, + 0x0000FC38, 0x020006EB, 0x0000FC39, 0x020006ED, + 0x0000FC3A, 0x020006EF, 0x0000FC3B, 0x020006F1, + 0x0000FC3C, 0x020006F3, 0x0000FC3D, 0x020006F5, + 0x0000FC3E, 0x020006F7, 0x0000FC3F, 0x020006F9, + 0x0000FC40, 0x020006FB, 0x0000FC41, 0x020006FD, + 0x0000FC42, 0x020006FF, 0x0000FC43, 0x02000701, + 0x0000FC44, 0x02000703, 0x0000FC45, 0x02000705, + 0x0000FC46, 0x02000707, 0x0000FC47, 0x02000709, + 0x0000FC48, 0x0200070B, 0x0000FC49, 0x0200070D, + 0x0000FC4A, 0x0200070F, 0x0000FC4B, 0x02000711, + 0x0000FC4C, 0x02000713, 0x0000FC4D, 0x02000715, + 0x0000FC4E, 0x02000717, 0x0000FC4F, 0x02000719, + 0x0000FC50, 0x0200071B, 0x0000FC51, 0x0200071D, + 0x0000FC52, 0x0200071F, 0x0000FC53, 0x02000721, + 0x0000FC54, 0x02000723, 0x0000FC55, 0x02000725, + 0x0000FC56, 0x02000727, 0x0000FC57, 0x02000729, + 0x0000FC58, 0x0200072B, 0x0000FC59, 0x0200072D, + 0x0000FC5A, 0x0200072F, 0x0000FC5B, 0x02000731, + 0x0000FC5C, 0x02000733, 0x0000FC5D, 0x02000735, + 0x0000FC5E, 0x03000737, 0x0000FC5F, 0x0300073A, + 0x0000FC60, 0x0300073D, 0x0000FC61, 0x03000740, + 0x0000FC62, 0x03000743, 0x0000FC63, 0x03000746, + 0x0000FC64, 0x02000749, 0x0000FC65, 0x0200074B, + 0x0000FC66, 0x0200074D, 0x0000FC67, 0x0200074F, + 0x0000FC68, 0x02000751, 0x0000FC69, 0x02000753, + 0x0000FC6A, 0x02000755, 0x0000FC6B, 0x02000757, + 0x0000FC6C, 0x02000759, 0x0000FC6D, 0x0200075B, + 0x0000FC6E, 0x0200075D, 0x0000FC6F, 0x0200075F, + 0x0000FC70, 0x02000761, 0x0000FC71, 0x02000763, + 0x0000FC72, 0x02000765, 0x0000FC73, 0x02000767, + 0x0000FC74, 0x02000769, 0x0000FC75, 0x0200076B, + 0x0000FC76, 0x0200076D, 0x0000FC77, 0x0200076F, + 0x0000FC78, 0x02000771, 0x0000FC79, 0x02000773, + 0x0000FC7A, 0x02000775, 0x0000FC7B, 0x02000777, + 0x0000FC7C, 0x02000779, 0x0000FC7D, 0x0200077B, + 0x0000FC7E, 0x0200077D, 0x0000FC7F, 0x0200077F, + 0x0000FC80, 0x02000781, 0x0000FC81, 0x02000783, + 0x0000FC82, 0x02000785, 0x0000FC83, 0x02000787, + 0x0000FC84, 0x02000789, 0x0000FC85, 0x0200078B, + 0x0000FC86, 0x0200078D, 0x0000FC87, 0x0200078F, + 0x0000FC88, 0x02000791, 0x0000FC89, 0x02000793, + 0x0000FC8A, 0x02000795, 0x0000FC8B, 0x02000797, + 0x0000FC8C, 0x02000799, 0x0000FC8D, 0x0200079B, + 0x0000FC8E, 0x0200079D, 0x0000FC8F, 0x0200079F, + 0x0000FC90, 0x020007A1, 0x0000FC91, 0x020007A3, + 0x0000FC92, 0x020007A5, 0x0000FC93, 0x020007A7, + 0x0000FC94, 0x020007A9, 0x0000FC95, 0x020007AB, + 0x0000FC96, 0x020007AD, 0x0000FC97, 0x020007AF, + 0x0000FC98, 0x020007B1, 0x0000FC99, 0x020007B3, + 0x0000FC9A, 0x020007B5, 0x0000FC9B, 0x020007B7, + 0x0000FC9C, 0x020007B9, 0x0000FC9D, 0x020007BB, + 0x0000FC9E, 0x020007BD, 0x0000FC9F, 0x020007BF, + 0x0000FCA0, 0x020007C1, 0x0000FCA1, 0x020007C3, + 0x0000FCA2, 0x020007C5, 0x0000FCA3, 0x020007C7, + 0x0000FCA4, 0x020007C9, 0x0000FCA5, 0x020007CB, + 0x0000FCA6, 0x020007CD, 0x0000FCA7, 0x020007CF, + 0x0000FCA8, 0x020007D1, 0x0000FCA9, 0x020007D3, + 0x0000FCAA, 0x020007D5, 0x0000FCAB, 0x020007D7, + 0x0000FCAC, 0x020007D9, 0x0000FCAD, 0x020007DB, + 0x0000FCAE, 0x020007DD, 0x0000FCAF, 0x020007DF, + 0x0000FCB0, 0x020007E1, 0x0000FCB1, 0x020007E3, + 0x0000FCB2, 0x020007E5, 0x0000FCB3, 0x020007E7, + 0x0000FCB4, 0x020007E9, 0x0000FCB5, 0x020007EB, + 0x0000FCB6, 0x020007ED, 0x0000FCB7, 0x020007EF, + 0x0000FCB8, 0x020007F1, 0x0000FCB9, 0x020007F3, + 0x0000FCBA, 0x020007F5, 0x0000FCBB, 0x020007F7, + 0x0000FCBC, 0x020007F9, 0x0000FCBD, 0x020007FB, + 0x0000FCBE, 0x020007FD, 0x0000FCBF, 0x020007FF, + 0x0000FCC0, 0x02000801, 0x0000FCC1, 0x02000803, + 0x0000FCC2, 0x02000805, 0x0000FCC3, 0x02000807, + 0x0000FCC4, 0x02000809, 0x0000FCC5, 0x0200080B, + 0x0000FCC6, 0x0200080D, 0x0000FCC7, 0x0200080F, + 0x0000FCC8, 0x02000811, 0x0000FCC9, 0x02000813, + 0x0000FCCA, 0x02000815, 0x0000FCCB, 0x02000817, + 0x0000FCCC, 0x02000819, 0x0000FCCD, 0x0200081B, + 0x0000FCCE, 0x0200081D, 0x0000FCCF, 0x0200081F, + 0x0000FCD0, 0x02000821, 0x0000FCD1, 0x02000823, + 0x0000FCD2, 0x02000825, 0x0000FCD3, 0x02000827, + 0x0000FCD4, 0x02000829, 0x0000FCD5, 0x0200082B, + 0x0000FCD6, 0x0200082D, 0x0000FCD7, 0x0200082F, + 0x0000FCD8, 0x02000831, 0x0000FCD9, 0x02000833, + 0x0000FCDA, 0x02000835, 0x0000FCDB, 0x02000837, + 0x0000FCDC, 0x02000839, 0x0000FCDD, 0x0200083B, + 0x0000FCDE, 0x0200083D, 0x0000FCDF, 0x0200083F, + 0x0000FCE0, 0x02000841, 0x0000FCE1, 0x02000843, + 0x0000FCE2, 0x02000845, 0x0000FCE3, 0x02000847, + 0x0000FCE4, 0x02000849, 0x0000FCE5, 0x0200084B, + 0x0000FCE6, 0x0200084D, 0x0000FCE7, 0x0200084F, + 0x0000FCE8, 0x02000851, 0x0000FCE9, 0x02000853, + 0x0000FCEA, 0x02000855, 0x0000FCEB, 0x02000857, + 0x0000FCEC, 0x02000859, 0x0000FCED, 0x0200085B, + 0x0000FCEE, 0x0200085D, 0x0000FCEF, 0x0200085F, + 0x0000FCF0, 0x02000861, 0x0000FCF1, 0x02000863, + 0x0000FCF2, 0x03000865, 0x0000FCF3, 0x03000868, + 0x0000FCF4, 0x0300086B, 0x0000FCF5, 0x0200086E, + 0x0000FCF6, 0x02000870, 0x0000FCF7, 0x02000872, + 0x0000FCF8, 0x02000874, 0x0000FCF9, 0x02000876, + 0x0000FCFA, 0x02000878, 0x0000FCFB, 0x0200087A, + 0x0000FCFC, 0x0200087C, 0x0000FCFD, 0x0200087E, + 0x0000FCFE, 0x02000880, 0x0000FCFF, 0x02000882, + 0x0000FD00, 0x02000884, 0x0000FD01, 0x02000886, + 0x0000FD02, 0x02000888, 0x0000FD03, 0x0200088A, + 0x0000FD04, 0x0200088C, 0x0000FD05, 0x0200088E, + 0x0000FD06, 0x02000890, 0x0000FD07, 0x02000892, + 0x0000FD08, 0x02000894, 0x0000FD09, 0x02000896, + 0x0000FD0A, 0x02000898, 0x0000FD0B, 0x0200089A, + 0x0000FD0C, 0x0200089C, 0x0000FD0D, 0x0200089E, + 0x0000FD0E, 0x020008A0, 0x0000FD0F, 0x020008A2, + 0x0000FD10, 0x020008A4, 0x0000FD11, 0x020008A6, + 0x0000FD12, 0x020008A8, 0x0000FD13, 0x020008AA, + 0x0000FD14, 0x020008AC, 0x0000FD15, 0x020008AE, + 0x0000FD16, 0x020008B0, 0x0000FD17, 0x020008B2, + 0x0000FD18, 0x020008B4, 0x0000FD19, 0x020008B6, + 0x0000FD1A, 0x020008B8, 0x0000FD1B, 0x020008BA, + 0x0000FD1C, 0x020008BC, 0x0000FD1D, 0x020008BE, + 0x0000FD1E, 0x020008C0, 0x0000FD1F, 0x020008C2, + 0x0000FD20, 0x020008C4, 0x0000FD21, 0x020008C6, + 0x0000FD22, 0x020008C8, 0x0000FD23, 0x020008CA, + 0x0000FD24, 0x020008CC, 0x0000FD25, 0x020008CE, + 0x0000FD26, 0x020008D0, 0x0000FD27, 0x020008D2, + 0x0000FD28, 0x020008D4, 0x0000FD29, 0x020008D6, + 0x0000FD2A, 0x020008D8, 0x0000FD2B, 0x020008DA, + 0x0000FD2C, 0x020008DC, 0x0000FD2D, 0x020008DE, + 0x0000FD2E, 0x020008E0, 0x0000FD2F, 0x020008E2, + 0x0000FD30, 0x020008E4, 0x0000FD31, 0x020008E6, + 0x0000FD32, 0x020008E8, 0x0000FD33, 0x020008EA, + 0x0000FD34, 0x020008EC, 0x0000FD35, 0x020008EE, + 0x0000FD36, 0x020008F0, 0x0000FD37, 0x020008F2, + 0x0000FD38, 0x020008F4, 0x0000FD39, 0x020008F6, + 0x0000FD3A, 0x020008F8, 0x0000FD3B, 0x020008FA, + 0x0000FD3C, 0x020008FC, 0x0000FD3D, 0x020008FE, + 0x0000FD50, 0x03000900, 0x0000FD51, 0x03000903, + 0x0000FD52, 0x03000906, 0x0000FD53, 0x03000909, + 0x0000FD54, 0x0300090C, 0x0000FD55, 0x0300090F, + 0x0000FD56, 0x03000912, 0x0000FD57, 0x03000915, + 0x0000FD58, 0x03000918, 0x0000FD59, 0x0300091B, + 0x0000FD5A, 0x0300091E, 0x0000FD5B, 0x03000921, + 0x0000FD5C, 0x03000924, 0x0000FD5D, 0x03000927, + 0x0000FD5E, 0x0300092A, 0x0000FD5F, 0x0300092D, + 0x0000FD60, 0x03000930, 0x0000FD61, 0x03000933, + 0x0000FD62, 0x03000936, 0x0000FD63, 0x03000939, + 0x0000FD64, 0x0300093C, 0x0000FD65, 0x0300093F, + 0x0000FD66, 0x03000942, 0x0000FD67, 0x03000945, + 0x0000FD68, 0x03000948, 0x0000FD69, 0x0300094B, + 0x0000FD6A, 0x0300094E, 0x0000FD6B, 0x03000951, + 0x0000FD6C, 0x03000954, 0x0000FD6D, 0x03000957, + 0x0000FD6E, 0x0300095A, 0x0000FD6F, 0x0300095D, + 0x0000FD70, 0x03000960, 0x0000FD71, 0x03000963, + 0x0000FD72, 0x03000966, 0x0000FD73, 0x03000969, + 0x0000FD74, 0x0300096C, 0x0000FD75, 0x0300096F, + 0x0000FD76, 0x03000972, 0x0000FD77, 0x03000975, + 0x0000FD78, 0x03000978, 0x0000FD79, 0x0300097B, + 0x0000FD7A, 0x0300097E, 0x0000FD7B, 0x03000981, + 0x0000FD7C, 0x03000984, 0x0000FD7D, 0x03000987, + 0x0000FD7E, 0x0300098A, 0x0000FD7F, 0x0300098D, + 0x0000FD80, 0x03000990, 0x0000FD81, 0x03000993, + 0x0000FD82, 0x03000996, 0x0000FD83, 0x03000999, + 0x0000FD84, 0x0300099C, 0x0000FD85, 0x0300099F, + 0x0000FD86, 0x030009A2, 0x0000FD87, 0x030009A5, + 0x0000FD88, 0x030009A8, 0x0000FD89, 0x030009AB, + 0x0000FD8A, 0x030009AE, 0x0000FD8B, 0x030009B1, + 0x0000FD8C, 0x030009B4, 0x0000FD8D, 0x030009B7, + 0x0000FD8E, 0x030009BA, 0x0000FD8F, 0x030009BD, + 0x0000FD92, 0x030009C0, 0x0000FD93, 0x030009C3, + 0x0000FD94, 0x030009C6, 0x0000FD95, 0x030009C9, + 0x0000FD96, 0x030009CC, 0x0000FD97, 0x030009CF, + 0x0000FD98, 0x030009D2, 0x0000FD99, 0x030009D5, + 0x0000FD9A, 0x030009D8, 0x0000FD9B, 0x030009DB, + 0x0000FD9C, 0x030009DE, 0x0000FD9D, 0x030009E1, + 0x0000FD9E, 0x030009E4, 0x0000FD9F, 0x030009E7, + 0x0000FDA0, 0x030009EA, 0x0000FDA1, 0x030009ED, + 0x0000FDA2, 0x030009F0, 0x0000FDA3, 0x030009F3, + 0x0000FDA4, 0x030009F6, 0x0000FDA5, 0x030009F9, + 0x0000FDA6, 0x030009FC, 0x0000FDA7, 0x030009FF, + 0x0000FDA8, 0x03000A02, 0x0000FDA9, 0x03000A05, + 0x0000FDAA, 0x03000A08, 0x0000FDAB, 0x03000A0B, + 0x0000FDAC, 0x03000A0E, 0x0000FDAD, 0x03000A11, + 0x0000FDAE, 0x03000A14, 0x0000FDAF, 0x03000A17, + 0x0000FDB0, 0x03000A1A, 0x0000FDB1, 0x03000A1D, + 0x0000FDB2, 0x03000A20, 0x0000FDB3, 0x03000A23, + 0x0000FDB4, 0x03000A26, 0x0000FDB5, 0x03000A29, + 0x0000FDB6, 0x03000A2C, 0x0000FDB7, 0x03000A2F, + 0x0000FDB8, 0x03000A32, 0x0000FDB9, 0x03000A35, + 0x0000FDBA, 0x03000A38, 0x0000FDBB, 0x03000A3B, + 0x0000FDBC, 0x03000A3E, 0x0000FDBD, 0x03000A41, + 0x0000FDBE, 0x03000A44, 0x0000FDBF, 0x03000A47, + 0x0000FDC0, 0x03000A4A, 0x0000FDC1, 0x03000A4D, + 0x0000FDC2, 0x03000A50, 0x0000FDC3, 0x03000A53, + 0x0000FDC4, 0x03000A56, 0x0000FDC5, 0x03000A59, + 0x0000FDC6, 0x03000A5C, 0x0000FDC7, 0x03000A5F, + 0x0000FDF0, 0x03000A62, 0x0000FDF1, 0x03000A65, + 0x0000FDF2, 0x04000A68, 0x0000FDF3, 0x04000A6C, + 0x0000FDF4, 0x04000A70, 0x0000FDF5, 0x04000A74, + 0x0000FDF6, 0x04000A78, 0x0000FDF7, 0x04000A7C, + 0x0000FDF8, 0x04000A80, 0x0000FDF9, 0x03000A84, + 0x0000FDFA, 0x12000A87, 0x0000FDFB, 0x08000A99, + 0x0000FDFC, 0x04000AA1, 0x0000FE10, 0x0100002C, + 0x0000FE11, 0x01003001, 0x0000FE12, 0x01003002, + 0x0000FE13, 0x0100003A, 0x0000FE14, 0x0100003B, + 0x0000FE15, 0x01000021, 0x0000FE16, 0x0100003F, + 0x0000FE17, 0x01003016, 0x0000FE18, 0x01003017, + 0x0000FE19, 0x41002026, 0x0000FE30, 0x41002025, + 0x0000FE31, 0x01002014, 0x0000FE32, 0x01002013, + 0x0000FE33, 0x0100005F, 0x0000FE34, 0x0100005F, + 0x0000FE35, 0x01000028, 0x0000FE36, 0x01000029, + 0x0000FE37, 0x0100007B, 0x0000FE38, 0x0100007D, + 0x0000FE39, 0x01003014, 0x0000FE3A, 0x01003015, + 0x0000FE3B, 0x01003010, 0x0000FE3C, 0x01003011, + 0x0000FE3D, 0x0100300A, 0x0000FE3E, 0x0100300B, + 0x0000FE3F, 0x01003008, 0x0000FE40, 0x01003009, + 0x0000FE41, 0x0100300C, 0x0000FE42, 0x0100300D, + 0x0000FE43, 0x0100300E, 0x0000FE44, 0x0100300F, + 0x0000FE47, 0x0100005B, 0x0000FE48, 0x0100005D, + 0x0000FE49, 0x4100203E, 0x0000FE4A, 0x4100203E, + 0x0000FE4B, 0x4100203E, 0x0000FE4C, 0x4100203E, + 0x0000FE4D, 0x0100005F, 0x0000FE4E, 0x0100005F, + 0x0000FE4F, 0x0100005F, 0x0000FE50, 0x0100002C, + 0x0000FE51, 0x01003001, 0x0000FE52, 0x0100002E, + 0x0000FE54, 0x0100003B, 0x0000FE55, 0x0100003A, + 0x0000FE56, 0x0100003F, 0x0000FE57, 0x01000021, + 0x0000FE58, 0x01002014, 0x0000FE59, 0x01000028, + 0x0000FE5A, 0x01000029, 0x0000FE5B, 0x0100007B, + 0x0000FE5C, 0x0100007D, 0x0000FE5D, 0x01003014, + 0x0000FE5E, 0x01003015, 0x0000FE5F, 0x01000023, + 0x0000FE60, 0x01000026, 0x0000FE61, 0x0100002A, + 0x0000FE62, 0x0100002B, 0x0000FE63, 0x0100002D, + 0x0000FE64, 0x0100003C, 0x0000FE65, 0x0100003E, + 0x0000FE66, 0x0100003D, 0x0000FE68, 0x0100005C, + 0x0000FE69, 0x01000024, 0x0000FE6A, 0x01000025, + 0x0000FE6B, 0x01000040, 0x0000FE70, 0x02000AA5, + 0x0000FE71, 0x02000AA7, 0x0000FE72, 0x02000AA9, + 0x0000FE74, 0x02000AAB, 0x0000FE76, 0x02000AAD, + 0x0000FE77, 0x02000AAF, 0x0000FE78, 0x02000AB1, + 0x0000FE79, 0x02000AB3, 0x0000FE7A, 0x02000AB5, + 0x0000FE7B, 0x02000AB7, 0x0000FE7C, 0x02000AB9, + 0x0000FE7D, 0x02000ABB, 0x0000FE7E, 0x02000ABD, + 0x0000FE7F, 0x02000ABF, 0x0000FE80, 0x01000621, + 0x0000FE81, 0x01000622, 0x0000FE82, 0x01000622, + 0x0000FE83, 0x01000623, 0x0000FE84, 0x01000623, + 0x0000FE85, 0x01000624, 0x0000FE86, 0x01000624, + 0x0000FE87, 0x01000625, 0x0000FE88, 0x01000625, + 0x0000FE89, 0x01000626, 0x0000FE8A, 0x01000626, + 0x0000FE8B, 0x01000626, 0x0000FE8C, 0x01000626, + 0x0000FE8D, 0x01000627, 0x0000FE8E, 0x01000627, + 0x0000FE8F, 0x01000628, 0x0000FE90, 0x01000628, + 0x0000FE91, 0x01000628, 0x0000FE92, 0x01000628, + 0x0000FE93, 0x01000629, 0x0000FE94, 0x01000629, + 0x0000FE95, 0x0100062A, 0x0000FE96, 0x0100062A, + 0x0000FE97, 0x0100062A, 0x0000FE98, 0x0100062A, + 0x0000FE99, 0x0100062B, 0x0000FE9A, 0x0100062B, + 0x0000FE9B, 0x0100062B, 0x0000FE9C, 0x0100062B, + 0x0000FE9D, 0x0100062C, 0x0000FE9E, 0x0100062C, + 0x0000FE9F, 0x0100062C, 0x0000FEA0, 0x0100062C, + 0x0000FEA1, 0x0100062D, 0x0000FEA2, 0x0100062D, + 0x0000FEA3, 0x0100062D, 0x0000FEA4, 0x0100062D, + 0x0000FEA5, 0x0100062E, 0x0000FEA6, 0x0100062E, + 0x0000FEA7, 0x0100062E, 0x0000FEA8, 0x0100062E, + 0x0000FEA9, 0x0100062F, 0x0000FEAA, 0x0100062F, + 0x0000FEAB, 0x01000630, 0x0000FEAC, 0x01000630, + 0x0000FEAD, 0x01000631, 0x0000FEAE, 0x01000631, + 0x0000FEAF, 0x01000632, 0x0000FEB0, 0x01000632, + 0x0000FEB1, 0x01000633, 0x0000FEB2, 0x01000633, + 0x0000FEB3, 0x01000633, 0x0000FEB4, 0x01000633, + 0x0000FEB5, 0x01000634, 0x0000FEB6, 0x01000634, + 0x0000FEB7, 0x01000634, 0x0000FEB8, 0x01000634, + 0x0000FEB9, 0x01000635, 0x0000FEBA, 0x01000635, + 0x0000FEBB, 0x01000635, 0x0000FEBC, 0x01000635, + 0x0000FEBD, 0x01000636, 0x0000FEBE, 0x01000636, + 0x0000FEBF, 0x01000636, 0x0000FEC0, 0x01000636, + 0x0000FEC1, 0x01000637, 0x0000FEC2, 0x01000637, + 0x0000FEC3, 0x01000637, 0x0000FEC4, 0x01000637, + 0x0000FEC5, 0x01000638, 0x0000FEC6, 0x01000638, + 0x0000FEC7, 0x01000638, 0x0000FEC8, 0x01000638, + 0x0000FEC9, 0x01000639, 0x0000FECA, 0x01000639, + 0x0000FECB, 0x01000639, 0x0000FECC, 0x01000639, + 0x0000FECD, 0x0100063A, 0x0000FECE, 0x0100063A, + 0x0000FECF, 0x0100063A, 0x0000FED0, 0x0100063A, + 0x0000FED1, 0x01000641, 0x0000FED2, 0x01000641, + 0x0000FED3, 0x01000641, 0x0000FED4, 0x01000641, + 0x0000FED5, 0x01000642, 0x0000FED6, 0x01000642, + 0x0000FED7, 0x01000642, 0x0000FED8, 0x01000642, + 0x0000FED9, 0x01000643, 0x0000FEDA, 0x01000643, + 0x0000FEDB, 0x01000643, 0x0000FEDC, 0x01000643, + 0x0000FEDD, 0x01000644, 0x0000FEDE, 0x01000644, + 0x0000FEDF, 0x01000644, 0x0000FEE0, 0x01000644, + 0x0000FEE1, 0x01000645, 0x0000FEE2, 0x01000645, + 0x0000FEE3, 0x01000645, 0x0000FEE4, 0x01000645, + 0x0000FEE5, 0x01000646, 0x0000FEE6, 0x01000646, + 0x0000FEE7, 0x01000646, 0x0000FEE8, 0x01000646, + 0x0000FEE9, 0x01000647, 0x0000FEEA, 0x01000647, + 0x0000FEEB, 0x01000647, 0x0000FEEC, 0x01000647, + 0x0000FEED, 0x01000648, 0x0000FEEE, 0x01000648, + 0x0000FEEF, 0x01000649, 0x0000FEF0, 0x01000649, + 0x0000FEF1, 0x0100064A, 0x0000FEF2, 0x0100064A, + 0x0000FEF3, 0x0100064A, 0x0000FEF4, 0x0100064A, + 0x0000FEF5, 0x02000AC1, 0x0000FEF6, 0x02000AC3, + 0x0000FEF7, 0x02000AC5, 0x0000FEF8, 0x02000AC7, + 0x0000FEF9, 0x02000AC9, 0x0000FEFA, 0x02000ACB, + 0x0000FEFB, 0x02000ACD, 0x0000FEFC, 0x02000ACF, + 0x0000FF01, 0x01000021, 0x0000FF02, 0x01000022, + 0x0000FF03, 0x01000023, 0x0000FF04, 0x01000024, + 0x0000FF05, 0x01000025, 0x0000FF06, 0x01000026, + 0x0000FF07, 0x01000027, 0x0000FF08, 0x01000028, + 0x0000FF09, 0x01000029, 0x0000FF0A, 0x0100002A, + 0x0000FF0B, 0x0100002B, 0x0000FF0C, 0x0100002C, + 0x0000FF0D, 0x0100002D, 0x0000FF0E, 0x0100002E, + 0x0000FF0F, 0x0100002F, 0x0000FF10, 0x01000030, + 0x0000FF11, 0x01000031, 0x0000FF12, 0x01000032, + 0x0000FF13, 0x01000033, 0x0000FF14, 0x01000034, + 0x0000FF15, 0x01000035, 0x0000FF16, 0x01000036, + 0x0000FF17, 0x01000037, 0x0000FF18, 0x01000038, + 0x0000FF19, 0x01000039, 0x0000FF1A, 0x0100003A, + 0x0000FF1B, 0x0100003B, 0x0000FF1C, 0x0100003C, + 0x0000FF1D, 0x0100003D, 0x0000FF1E, 0x0100003E, + 0x0000FF1F, 0x0100003F, 0x0000FF20, 0x01000040, + 0x0000FF21, 0x01000041, 0x0000FF22, 0x01000042, + 0x0000FF23, 0x01000043, 0x0000FF24, 0x01000044, + 0x0000FF25, 0x01000045, 0x0000FF26, 0x01000046, + 0x0000FF27, 0x01000047, 0x0000FF28, 0x01000048, + 0x0000FF29, 0x01000049, 0x0000FF2A, 0x0100004A, + 0x0000FF2B, 0x0100004B, 0x0000FF2C, 0x0100004C, + 0x0000FF2D, 0x0100004D, 0x0000FF2E, 0x0100004E, + 0x0000FF2F, 0x0100004F, 0x0000FF30, 0x01000050, + 0x0000FF31, 0x01000051, 0x0000FF32, 0x01000052, + 0x0000FF33, 0x01000053, 0x0000FF34, 0x01000054, + 0x0000FF35, 0x01000055, 0x0000FF36, 0x01000056, + 0x0000FF37, 0x01000057, 0x0000FF38, 0x01000058, + 0x0000FF39, 0x01000059, 0x0000FF3A, 0x0100005A, + 0x0000FF3B, 0x0100005B, 0x0000FF3C, 0x0100005C, + 0x0000FF3D, 0x0100005D, 0x0000FF3E, 0x0100005E, + 0x0000FF3F, 0x0100005F, 0x0000FF40, 0x01000060, + 0x0000FF41, 0x01000061, 0x0000FF42, 0x01000062, + 0x0000FF43, 0x01000063, 0x0000FF44, 0x01000064, + 0x0000FF45, 0x01000065, 0x0000FF46, 0x01000066, + 0x0000FF47, 0x01000067, 0x0000FF48, 0x01000068, + 0x0000FF49, 0x01000069, 0x0000FF4A, 0x0100006A, + 0x0000FF4B, 0x0100006B, 0x0000FF4C, 0x0100006C, + 0x0000FF4D, 0x0100006D, 0x0000FF4E, 0x0100006E, + 0x0000FF4F, 0x0100006F, 0x0000FF50, 0x01000070, + 0x0000FF51, 0x01000071, 0x0000FF52, 0x01000072, + 0x0000FF53, 0x01000073, 0x0000FF54, 0x01000074, + 0x0000FF55, 0x01000075, 0x0000FF56, 0x01000076, + 0x0000FF57, 0x01000077, 0x0000FF58, 0x01000078, + 0x0000FF59, 0x01000079, 0x0000FF5A, 0x0100007A, + 0x0000FF5B, 0x0100007B, 0x0000FF5C, 0x0100007C, + 0x0000FF5D, 0x0100007D, 0x0000FF5E, 0x0100007E, + 0x0000FF5F, 0x01002985, 0x0000FF60, 0x01002986, + 0x0000FF61, 0x01003002, 0x0000FF62, 0x0100300C, + 0x0000FF63, 0x0100300D, 0x0000FF64, 0x01003001, + 0x0000FF65, 0x010030FB, 0x0000FF66, 0x010030F2, + 0x0000FF67, 0x010030A1, 0x0000FF68, 0x010030A3, + 0x0000FF69, 0x010030A5, 0x0000FF6A, 0x010030A7, + 0x0000FF6B, 0x010030A9, 0x0000FF6C, 0x010030E3, + 0x0000FF6D, 0x010030E5, 0x0000FF6E, 0x010030E7, + 0x0000FF6F, 0x010030C3, 0x0000FF70, 0x010030FC, + 0x0000FF71, 0x010030A2, 0x0000FF72, 0x010030A4, + 0x0000FF73, 0x010030A6, 0x0000FF74, 0x010030A8, + 0x0000FF75, 0x010030AA, 0x0000FF76, 0x010030AB, + 0x0000FF77, 0x010030AD, 0x0000FF78, 0x010030AF, + 0x0000FF79, 0x010030B1, 0x0000FF7A, 0x010030B3, + 0x0000FF7B, 0x010030B5, 0x0000FF7C, 0x010030B7, + 0x0000FF7D, 0x010030B9, 0x0000FF7E, 0x010030BB, + 0x0000FF7F, 0x010030BD, 0x0000FF80, 0x010030BF, + 0x0000FF81, 0x010030C1, 0x0000FF82, 0x010030C4, + 0x0000FF83, 0x010030C6, 0x0000FF84, 0x010030C8, + 0x0000FF85, 0x010030CA, 0x0000FF86, 0x010030CB, + 0x0000FF87, 0x010030CC, 0x0000FF88, 0x010030CD, + 0x0000FF89, 0x010030CE, 0x0000FF8A, 0x010030CF, + 0x0000FF8B, 0x010030D2, 0x0000FF8C, 0x010030D5, + 0x0000FF8D, 0x010030D8, 0x0000FF8E, 0x010030DB, + 0x0000FF8F, 0x010030DE, 0x0000FF90, 0x010030DF, + 0x0000FF91, 0x010030E0, 0x0000FF92, 0x010030E1, + 0x0000FF93, 0x010030E2, 0x0000FF94, 0x010030E4, + 0x0000FF95, 0x010030E6, 0x0000FF96, 0x010030E8, + 0x0000FF97, 0x010030E9, 0x0000FF98, 0x010030EA, + 0x0000FF99, 0x010030EB, 0x0000FF9A, 0x010030EC, + 0x0000FF9B, 0x010030ED, 0x0000FF9C, 0x010030EF, + 0x0000FF9D, 0x010030F3, 0x0000FF9E, 0x01003099, + 0x0000FF9F, 0x0100309A, 0x0000FFA0, 0x41003164, + 0x0000FFA1, 0x41003131, 0x0000FFA2, 0x41003132, + 0x0000FFA3, 0x41003133, 0x0000FFA4, 0x41003134, + 0x0000FFA5, 0x41003135, 0x0000FFA6, 0x41003136, + 0x0000FFA7, 0x41003137, 0x0000FFA8, 0x41003138, + 0x0000FFA9, 0x41003139, 0x0000FFAA, 0x4100313A, + 0x0000FFAB, 0x4100313B, 0x0000FFAC, 0x4100313C, + 0x0000FFAD, 0x4100313D, 0x0000FFAE, 0x4100313E, + 0x0000FFAF, 0x4100313F, 0x0000FFB0, 0x41003140, + 0x0000FFB1, 0x41003141, 0x0000FFB2, 0x41003142, + 0x0000FFB3, 0x41003143, 0x0000FFB4, 0x41003144, + 0x0000FFB5, 0x41003145, 0x0000FFB6, 0x41003146, + 0x0000FFB7, 0x41003147, 0x0000FFB8, 0x41003148, + 0x0000FFB9, 0x41003149, 0x0000FFBA, 0x4100314A, + 0x0000FFBB, 0x4100314B, 0x0000FFBC, 0x4100314C, + 0x0000FFBD, 0x4100314D, 0x0000FFBE, 0x4100314E, + 0x0000FFC2, 0x4100314F, 0x0000FFC3, 0x41003150, + 0x0000FFC4, 0x41003151, 0x0000FFC5, 0x41003152, + 0x0000FFC6, 0x41003153, 0x0000FFC7, 0x41003154, + 0x0000FFCA, 0x41003155, 0x0000FFCB, 0x41003156, + 0x0000FFCC, 0x41003157, 0x0000FFCD, 0x41003158, + 0x0000FFCE, 0x41003159, 0x0000FFCF, 0x4100315A, + 0x0000FFD2, 0x4100315B, 0x0000FFD3, 0x4100315C, + 0x0000FFD4, 0x4100315D, 0x0000FFD5, 0x4100315E, + 0x0000FFD6, 0x4100315F, 0x0000FFD7, 0x41003160, + 0x0000FFDA, 0x41003161, 0x0000FFDB, 0x41003162, + 0x0000FFDC, 0x41003163, 0x0000FFE0, 0x010000A2, + 0x0000FFE1, 0x010000A3, 0x0000FFE2, 0x010000AC, + 0x0000FFE3, 0x410000AF, 0x0000FFE4, 0x010000A6, + 0x0000FFE5, 0x010000A5, 0x0000FFE6, 0x010020A9, + 0x0000FFE8, 0x01002502, 0x0000FFE9, 0x01002190, + 0x0000FFEA, 0x01002191, 0x0000FFEB, 0x01002192, + 0x0000FFEC, 0x01002193, 0x0000FFED, 0x010025A0, + 0x0000FFEE, 0x010025CB, 0x00010781, 0x010002D0, + 0x00010782, 0x010002D1, 0x00010783, 0x010000E6, + 0x00010784, 0x01000299, 0x00010785, 0x01000253, + 0x00010787, 0x010002A3, 0x00010788, 0x0100AB66, + 0x00010789, 0x010002A5, 0x0001078A, 0x010002A4, + 0x0001078B, 0x01000256, 0x0001078C, 0x01000257, + 0x0001078D, 0x01001D91, 0x0001078E, 0x01000258, + 0x0001078F, 0x0100025E, 0x00010790, 0x010002A9, + 0x00010791, 0x01000264, 0x00010792, 0x01000262, + 0x00010793, 0x01000260, 0x00010794, 0x0100029B, + 0x00010795, 0x01000127, 0x00010796, 0x0100029C, + 0x00010797, 0x01000267, 0x00010798, 0x01000284, + 0x00010799, 0x010002AA, 0x0001079A, 0x010002AB, + 0x0001079B, 0x0100026C, 0x0001079C, 0x8101DF04, + 0x0001079D, 0x0100A78E, 0x0001079E, 0x0100026E, + 0x0001079F, 0x8101DF05, 0x000107A0, 0x0100028E, + 0x000107A1, 0x8101DF06, 0x000107A2, 0x010000F8, + 0x000107A3, 0x01000276, 0x000107A4, 0x01000277, + 0x000107A5, 0x01000071, 0x000107A6, 0x0100027A, + 0x000107A7, 0x8101DF08, 0x000107A8, 0x0100027D, + 0x000107A9, 0x0100027E, 0x000107AA, 0x01000280, + 0x000107AB, 0x010002A8, 0x000107AC, 0x010002A6, + 0x000107AD, 0x0100AB67, 0x000107AE, 0x010002A7, + 0x000107AF, 0x01000288, 0x000107B0, 0x01002C71, + 0x000107B2, 0x0100028F, 0x000107B3, 0x010002A1, + 0x000107B4, 0x010002A2, 0x000107B5, 0x01000298, + 0x000107B6, 0x010001C0, 0x000107B7, 0x010001C1, + 0x000107B8, 0x010001C2, 0x000107B9, 0x8101DF0A, + 0x000107BA, 0x8101DF1E, 0x0001D400, 0x01000041, + 0x0001D401, 0x01000042, 0x0001D402, 0x01000043, + 0x0001D403, 0x01000044, 0x0001D404, 0x01000045, + 0x0001D405, 0x01000046, 0x0001D406, 0x01000047, + 0x0001D407, 0x01000048, 0x0001D408, 0x01000049, + 0x0001D409, 0x0100004A, 0x0001D40A, 0x0100004B, + 0x0001D40B, 0x0100004C, 0x0001D40C, 0x0100004D, + 0x0001D40D, 0x0100004E, 0x0001D40E, 0x0100004F, + 0x0001D40F, 0x01000050, 0x0001D410, 0x01000051, + 0x0001D411, 0x01000052, 0x0001D412, 0x01000053, + 0x0001D413, 0x01000054, 0x0001D414, 0x01000055, + 0x0001D415, 0x01000056, 0x0001D416, 0x01000057, + 0x0001D417, 0x01000058, 0x0001D418, 0x01000059, + 0x0001D419, 0x0100005A, 0x0001D41A, 0x01000061, + 0x0001D41B, 0x01000062, 0x0001D41C, 0x01000063, + 0x0001D41D, 0x01000064, 0x0001D41E, 0x01000065, + 0x0001D41F, 0x01000066, 0x0001D420, 0x01000067, + 0x0001D421, 0x01000068, 0x0001D422, 0x01000069, + 0x0001D423, 0x0100006A, 0x0001D424, 0x0100006B, + 0x0001D425, 0x0100006C, 0x0001D426, 0x0100006D, + 0x0001D427, 0x0100006E, 0x0001D428, 0x0100006F, + 0x0001D429, 0x01000070, 0x0001D42A, 0x01000071, + 0x0001D42B, 0x01000072, 0x0001D42C, 0x01000073, + 0x0001D42D, 0x01000074, 0x0001D42E, 0x01000075, + 0x0001D42F, 0x01000076, 0x0001D430, 0x01000077, + 0x0001D431, 0x01000078, 0x0001D432, 0x01000079, + 0x0001D433, 0x0100007A, 0x0001D434, 0x01000041, + 0x0001D435, 0x01000042, 0x0001D436, 0x01000043, + 0x0001D437, 0x01000044, 0x0001D438, 0x01000045, + 0x0001D439, 0x01000046, 0x0001D43A, 0x01000047, + 0x0001D43B, 0x01000048, 0x0001D43C, 0x01000049, + 0x0001D43D, 0x0100004A, 0x0001D43E, 0x0100004B, + 0x0001D43F, 0x0100004C, 0x0001D440, 0x0100004D, + 0x0001D441, 0x0100004E, 0x0001D442, 0x0100004F, + 0x0001D443, 0x01000050, 0x0001D444, 0x01000051, + 0x0001D445, 0x01000052, 0x0001D446, 0x01000053, + 0x0001D447, 0x01000054, 0x0001D448, 0x01000055, + 0x0001D449, 0x01000056, 0x0001D44A, 0x01000057, + 0x0001D44B, 0x01000058, 0x0001D44C, 0x01000059, + 0x0001D44D, 0x0100005A, 0x0001D44E, 0x01000061, + 0x0001D44F, 0x01000062, 0x0001D450, 0x01000063, + 0x0001D451, 0x01000064, 0x0001D452, 0x01000065, + 0x0001D453, 0x01000066, 0x0001D454, 0x01000067, + 0x0001D456, 0x01000069, 0x0001D457, 0x0100006A, + 0x0001D458, 0x0100006B, 0x0001D459, 0x0100006C, + 0x0001D45A, 0x0100006D, 0x0001D45B, 0x0100006E, + 0x0001D45C, 0x0100006F, 0x0001D45D, 0x01000070, + 0x0001D45E, 0x01000071, 0x0001D45F, 0x01000072, + 0x0001D460, 0x01000073, 0x0001D461, 0x01000074, + 0x0001D462, 0x01000075, 0x0001D463, 0x01000076, + 0x0001D464, 0x01000077, 0x0001D465, 0x01000078, + 0x0001D466, 0x01000079, 0x0001D467, 0x0100007A, + 0x0001D468, 0x01000041, 0x0001D469, 0x01000042, + 0x0001D46A, 0x01000043, 0x0001D46B, 0x01000044, + 0x0001D46C, 0x01000045, 0x0001D46D, 0x01000046, + 0x0001D46E, 0x01000047, 0x0001D46F, 0x01000048, + 0x0001D470, 0x01000049, 0x0001D471, 0x0100004A, + 0x0001D472, 0x0100004B, 0x0001D473, 0x0100004C, + 0x0001D474, 0x0100004D, 0x0001D475, 0x0100004E, + 0x0001D476, 0x0100004F, 0x0001D477, 0x01000050, + 0x0001D478, 0x01000051, 0x0001D479, 0x01000052, + 0x0001D47A, 0x01000053, 0x0001D47B, 0x01000054, + 0x0001D47C, 0x01000055, 0x0001D47D, 0x01000056, + 0x0001D47E, 0x01000057, 0x0001D47F, 0x01000058, + 0x0001D480, 0x01000059, 0x0001D481, 0x0100005A, + 0x0001D482, 0x01000061, 0x0001D483, 0x01000062, + 0x0001D484, 0x01000063, 0x0001D485, 0x01000064, + 0x0001D486, 0x01000065, 0x0001D487, 0x01000066, + 0x0001D488, 0x01000067, 0x0001D489, 0x01000068, + 0x0001D48A, 0x01000069, 0x0001D48B, 0x0100006A, + 0x0001D48C, 0x0100006B, 0x0001D48D, 0x0100006C, + 0x0001D48E, 0x0100006D, 0x0001D48F, 0x0100006E, + 0x0001D490, 0x0100006F, 0x0001D491, 0x01000070, + 0x0001D492, 0x01000071, 0x0001D493, 0x01000072, + 0x0001D494, 0x01000073, 0x0001D495, 0x01000074, + 0x0001D496, 0x01000075, 0x0001D497, 0x01000076, + 0x0001D498, 0x01000077, 0x0001D499, 0x01000078, + 0x0001D49A, 0x01000079, 0x0001D49B, 0x0100007A, + 0x0001D49C, 0x01000041, 0x0001D49E, 0x01000043, + 0x0001D49F, 0x01000044, 0x0001D4A2, 0x01000047, + 0x0001D4A5, 0x0100004A, 0x0001D4A6, 0x0100004B, + 0x0001D4A9, 0x0100004E, 0x0001D4AA, 0x0100004F, + 0x0001D4AB, 0x01000050, 0x0001D4AC, 0x01000051, + 0x0001D4AE, 0x01000053, 0x0001D4AF, 0x01000054, + 0x0001D4B0, 0x01000055, 0x0001D4B1, 0x01000056, + 0x0001D4B2, 0x01000057, 0x0001D4B3, 0x01000058, + 0x0001D4B4, 0x01000059, 0x0001D4B5, 0x0100005A, + 0x0001D4B6, 0x01000061, 0x0001D4B7, 0x01000062, + 0x0001D4B8, 0x01000063, 0x0001D4B9, 0x01000064, + 0x0001D4BB, 0x01000066, 0x0001D4BD, 0x01000068, + 0x0001D4BE, 0x01000069, 0x0001D4BF, 0x0100006A, + 0x0001D4C0, 0x0100006B, 0x0001D4C1, 0x0100006C, + 0x0001D4C2, 0x0100006D, 0x0001D4C3, 0x0100006E, + 0x0001D4C5, 0x01000070, 0x0001D4C6, 0x01000071, + 0x0001D4C7, 0x01000072, 0x0001D4C8, 0x01000073, + 0x0001D4C9, 0x01000074, 0x0001D4CA, 0x01000075, + 0x0001D4CB, 0x01000076, 0x0001D4CC, 0x01000077, + 0x0001D4CD, 0x01000078, 0x0001D4CE, 0x01000079, + 0x0001D4CF, 0x0100007A, 0x0001D4D0, 0x01000041, + 0x0001D4D1, 0x01000042, 0x0001D4D2, 0x01000043, + 0x0001D4D3, 0x01000044, 0x0001D4D4, 0x01000045, + 0x0001D4D5, 0x01000046, 0x0001D4D6, 0x01000047, + 0x0001D4D7, 0x01000048, 0x0001D4D8, 0x01000049, + 0x0001D4D9, 0x0100004A, 0x0001D4DA, 0x0100004B, + 0x0001D4DB, 0x0100004C, 0x0001D4DC, 0x0100004D, + 0x0001D4DD, 0x0100004E, 0x0001D4DE, 0x0100004F, + 0x0001D4DF, 0x01000050, 0x0001D4E0, 0x01000051, + 0x0001D4E1, 0x01000052, 0x0001D4E2, 0x01000053, + 0x0001D4E3, 0x01000054, 0x0001D4E4, 0x01000055, + 0x0001D4E5, 0x01000056, 0x0001D4E6, 0x01000057, + 0x0001D4E7, 0x01000058, 0x0001D4E8, 0x01000059, + 0x0001D4E9, 0x0100005A, 0x0001D4EA, 0x01000061, + 0x0001D4EB, 0x01000062, 0x0001D4EC, 0x01000063, + 0x0001D4ED, 0x01000064, 0x0001D4EE, 0x01000065, + 0x0001D4EF, 0x01000066, 0x0001D4F0, 0x01000067, + 0x0001D4F1, 0x01000068, 0x0001D4F2, 0x01000069, + 0x0001D4F3, 0x0100006A, 0x0001D4F4, 0x0100006B, + 0x0001D4F5, 0x0100006C, 0x0001D4F6, 0x0100006D, + 0x0001D4F7, 0x0100006E, 0x0001D4F8, 0x0100006F, + 0x0001D4F9, 0x01000070, 0x0001D4FA, 0x01000071, + 0x0001D4FB, 0x01000072, 0x0001D4FC, 0x01000073, + 0x0001D4FD, 0x01000074, 0x0001D4FE, 0x01000075, + 0x0001D4FF, 0x01000076, 0x0001D500, 0x01000077, + 0x0001D501, 0x01000078, 0x0001D502, 0x01000079, + 0x0001D503, 0x0100007A, 0x0001D504, 0x01000041, + 0x0001D505, 0x01000042, 0x0001D507, 0x01000044, + 0x0001D508, 0x01000045, 0x0001D509, 0x01000046, + 0x0001D50A, 0x01000047, 0x0001D50D, 0x0100004A, + 0x0001D50E, 0x0100004B, 0x0001D50F, 0x0100004C, + 0x0001D510, 0x0100004D, 0x0001D511, 0x0100004E, + 0x0001D512, 0x0100004F, 0x0001D513, 0x01000050, + 0x0001D514, 0x01000051, 0x0001D516, 0x01000053, + 0x0001D517, 0x01000054, 0x0001D518, 0x01000055, + 0x0001D519, 0x01000056, 0x0001D51A, 0x01000057, + 0x0001D51B, 0x01000058, 0x0001D51C, 0x01000059, + 0x0001D51E, 0x01000061, 0x0001D51F, 0x01000062, + 0x0001D520, 0x01000063, 0x0001D521, 0x01000064, + 0x0001D522, 0x01000065, 0x0001D523, 0x01000066, + 0x0001D524, 0x01000067, 0x0001D525, 0x01000068, + 0x0001D526, 0x01000069, 0x0001D527, 0x0100006A, + 0x0001D528, 0x0100006B, 0x0001D529, 0x0100006C, + 0x0001D52A, 0x0100006D, 0x0001D52B, 0x0100006E, + 0x0001D52C, 0x0100006F, 0x0001D52D, 0x01000070, + 0x0001D52E, 0x01000071, 0x0001D52F, 0x01000072, + 0x0001D530, 0x01000073, 0x0001D531, 0x01000074, + 0x0001D532, 0x01000075, 0x0001D533, 0x01000076, + 0x0001D534, 0x01000077, 0x0001D535, 0x01000078, + 0x0001D536, 0x01000079, 0x0001D537, 0x0100007A, + 0x0001D538, 0x01000041, 0x0001D539, 0x01000042, + 0x0001D53B, 0x01000044, 0x0001D53C, 0x01000045, + 0x0001D53D, 0x01000046, 0x0001D53E, 0x01000047, + 0x0001D540, 0x01000049, 0x0001D541, 0x0100004A, + 0x0001D542, 0x0100004B, 0x0001D543, 0x0100004C, + 0x0001D544, 0x0100004D, 0x0001D546, 0x0100004F, + 0x0001D54A, 0x01000053, 0x0001D54B, 0x01000054, + 0x0001D54C, 0x01000055, 0x0001D54D, 0x01000056, + 0x0001D54E, 0x01000057, 0x0001D54F, 0x01000058, + 0x0001D550, 0x01000059, 0x0001D552, 0x01000061, + 0x0001D553, 0x01000062, 0x0001D554, 0x01000063, + 0x0001D555, 0x01000064, 0x0001D556, 0x01000065, + 0x0001D557, 0x01000066, 0x0001D558, 0x01000067, + 0x0001D559, 0x01000068, 0x0001D55A, 0x01000069, + 0x0001D55B, 0x0100006A, 0x0001D55C, 0x0100006B, + 0x0001D55D, 0x0100006C, 0x0001D55E, 0x0100006D, + 0x0001D55F, 0x0100006E, 0x0001D560, 0x0100006F, + 0x0001D561, 0x01000070, 0x0001D562, 0x01000071, + 0x0001D563, 0x01000072, 0x0001D564, 0x01000073, + 0x0001D565, 0x01000074, 0x0001D566, 0x01000075, + 0x0001D567, 0x01000076, 0x0001D568, 0x01000077, + 0x0001D569, 0x01000078, 0x0001D56A, 0x01000079, + 0x0001D56B, 0x0100007A, 0x0001D56C, 0x01000041, + 0x0001D56D, 0x01000042, 0x0001D56E, 0x01000043, + 0x0001D56F, 0x01000044, 0x0001D570, 0x01000045, + 0x0001D571, 0x01000046, 0x0001D572, 0x01000047, + 0x0001D573, 0x01000048, 0x0001D574, 0x01000049, + 0x0001D575, 0x0100004A, 0x0001D576, 0x0100004B, + 0x0001D577, 0x0100004C, 0x0001D578, 0x0100004D, + 0x0001D579, 0x0100004E, 0x0001D57A, 0x0100004F, + 0x0001D57B, 0x01000050, 0x0001D57C, 0x01000051, + 0x0001D57D, 0x01000052, 0x0001D57E, 0x01000053, + 0x0001D57F, 0x01000054, 0x0001D580, 0x01000055, + 0x0001D581, 0x01000056, 0x0001D582, 0x01000057, + 0x0001D583, 0x01000058, 0x0001D584, 0x01000059, + 0x0001D585, 0x0100005A, 0x0001D586, 0x01000061, + 0x0001D587, 0x01000062, 0x0001D588, 0x01000063, + 0x0001D589, 0x01000064, 0x0001D58A, 0x01000065, + 0x0001D58B, 0x01000066, 0x0001D58C, 0x01000067, + 0x0001D58D, 0x01000068, 0x0001D58E, 0x01000069, + 0x0001D58F, 0x0100006A, 0x0001D590, 0x0100006B, + 0x0001D591, 0x0100006C, 0x0001D592, 0x0100006D, + 0x0001D593, 0x0100006E, 0x0001D594, 0x0100006F, + 0x0001D595, 0x01000070, 0x0001D596, 0x01000071, + 0x0001D597, 0x01000072, 0x0001D598, 0x01000073, + 0x0001D599, 0x01000074, 0x0001D59A, 0x01000075, + 0x0001D59B, 0x01000076, 0x0001D59C, 0x01000077, + 0x0001D59D, 0x01000078, 0x0001D59E, 0x01000079, + 0x0001D59F, 0x0100007A, 0x0001D5A0, 0x01000041, + 0x0001D5A1, 0x01000042, 0x0001D5A2, 0x01000043, + 0x0001D5A3, 0x01000044, 0x0001D5A4, 0x01000045, + 0x0001D5A5, 0x01000046, 0x0001D5A6, 0x01000047, + 0x0001D5A7, 0x01000048, 0x0001D5A8, 0x01000049, + 0x0001D5A9, 0x0100004A, 0x0001D5AA, 0x0100004B, + 0x0001D5AB, 0x0100004C, 0x0001D5AC, 0x0100004D, + 0x0001D5AD, 0x0100004E, 0x0001D5AE, 0x0100004F, + 0x0001D5AF, 0x01000050, 0x0001D5B0, 0x01000051, + 0x0001D5B1, 0x01000052, 0x0001D5B2, 0x01000053, + 0x0001D5B3, 0x01000054, 0x0001D5B4, 0x01000055, + 0x0001D5B5, 0x01000056, 0x0001D5B6, 0x01000057, + 0x0001D5B7, 0x01000058, 0x0001D5B8, 0x01000059, + 0x0001D5B9, 0x0100005A, 0x0001D5BA, 0x01000061, + 0x0001D5BB, 0x01000062, 0x0001D5BC, 0x01000063, + 0x0001D5BD, 0x01000064, 0x0001D5BE, 0x01000065, + 0x0001D5BF, 0x01000066, 0x0001D5C0, 0x01000067, + 0x0001D5C1, 0x01000068, 0x0001D5C2, 0x01000069, + 0x0001D5C3, 0x0100006A, 0x0001D5C4, 0x0100006B, + 0x0001D5C5, 0x0100006C, 0x0001D5C6, 0x0100006D, + 0x0001D5C7, 0x0100006E, 0x0001D5C8, 0x0100006F, + 0x0001D5C9, 0x01000070, 0x0001D5CA, 0x01000071, + 0x0001D5CB, 0x01000072, 0x0001D5CC, 0x01000073, + 0x0001D5CD, 0x01000074, 0x0001D5CE, 0x01000075, + 0x0001D5CF, 0x01000076, 0x0001D5D0, 0x01000077, + 0x0001D5D1, 0x01000078, 0x0001D5D2, 0x01000079, + 0x0001D5D3, 0x0100007A, 0x0001D5D4, 0x01000041, + 0x0001D5D5, 0x01000042, 0x0001D5D6, 0x01000043, + 0x0001D5D7, 0x01000044, 0x0001D5D8, 0x01000045, + 0x0001D5D9, 0x01000046, 0x0001D5DA, 0x01000047, + 0x0001D5DB, 0x01000048, 0x0001D5DC, 0x01000049, + 0x0001D5DD, 0x0100004A, 0x0001D5DE, 0x0100004B, + 0x0001D5DF, 0x0100004C, 0x0001D5E0, 0x0100004D, + 0x0001D5E1, 0x0100004E, 0x0001D5E2, 0x0100004F, + 0x0001D5E3, 0x01000050, 0x0001D5E4, 0x01000051, + 0x0001D5E5, 0x01000052, 0x0001D5E6, 0x01000053, + 0x0001D5E7, 0x01000054, 0x0001D5E8, 0x01000055, + 0x0001D5E9, 0x01000056, 0x0001D5EA, 0x01000057, + 0x0001D5EB, 0x01000058, 0x0001D5EC, 0x01000059, + 0x0001D5ED, 0x0100005A, 0x0001D5EE, 0x01000061, + 0x0001D5EF, 0x01000062, 0x0001D5F0, 0x01000063, + 0x0001D5F1, 0x01000064, 0x0001D5F2, 0x01000065, + 0x0001D5F3, 0x01000066, 0x0001D5F4, 0x01000067, + 0x0001D5F5, 0x01000068, 0x0001D5F6, 0x01000069, + 0x0001D5F7, 0x0100006A, 0x0001D5F8, 0x0100006B, + 0x0001D5F9, 0x0100006C, 0x0001D5FA, 0x0100006D, + 0x0001D5FB, 0x0100006E, 0x0001D5FC, 0x0100006F, + 0x0001D5FD, 0x01000070, 0x0001D5FE, 0x01000071, + 0x0001D5FF, 0x01000072, 0x0001D600, 0x01000073, + 0x0001D601, 0x01000074, 0x0001D602, 0x01000075, + 0x0001D603, 0x01000076, 0x0001D604, 0x01000077, + 0x0001D605, 0x01000078, 0x0001D606, 0x01000079, + 0x0001D607, 0x0100007A, 0x0001D608, 0x01000041, + 0x0001D609, 0x01000042, 0x0001D60A, 0x01000043, + 0x0001D60B, 0x01000044, 0x0001D60C, 0x01000045, + 0x0001D60D, 0x01000046, 0x0001D60E, 0x01000047, + 0x0001D60F, 0x01000048, 0x0001D610, 0x01000049, + 0x0001D611, 0x0100004A, 0x0001D612, 0x0100004B, + 0x0001D613, 0x0100004C, 0x0001D614, 0x0100004D, + 0x0001D615, 0x0100004E, 0x0001D616, 0x0100004F, + 0x0001D617, 0x01000050, 0x0001D618, 0x01000051, + 0x0001D619, 0x01000052, 0x0001D61A, 0x01000053, + 0x0001D61B, 0x01000054, 0x0001D61C, 0x01000055, + 0x0001D61D, 0x01000056, 0x0001D61E, 0x01000057, + 0x0001D61F, 0x01000058, 0x0001D620, 0x01000059, + 0x0001D621, 0x0100005A, 0x0001D622, 0x01000061, + 0x0001D623, 0x01000062, 0x0001D624, 0x01000063, + 0x0001D625, 0x01000064, 0x0001D626, 0x01000065, + 0x0001D627, 0x01000066, 0x0001D628, 0x01000067, + 0x0001D629, 0x01000068, 0x0001D62A, 0x01000069, + 0x0001D62B, 0x0100006A, 0x0001D62C, 0x0100006B, + 0x0001D62D, 0x0100006C, 0x0001D62E, 0x0100006D, + 0x0001D62F, 0x0100006E, 0x0001D630, 0x0100006F, + 0x0001D631, 0x01000070, 0x0001D632, 0x01000071, + 0x0001D633, 0x01000072, 0x0001D634, 0x01000073, + 0x0001D635, 0x01000074, 0x0001D636, 0x01000075, + 0x0001D637, 0x01000076, 0x0001D638, 0x01000077, + 0x0001D639, 0x01000078, 0x0001D63A, 0x01000079, + 0x0001D63B, 0x0100007A, 0x0001D63C, 0x01000041, + 0x0001D63D, 0x01000042, 0x0001D63E, 0x01000043, + 0x0001D63F, 0x01000044, 0x0001D640, 0x01000045, + 0x0001D641, 0x01000046, 0x0001D642, 0x01000047, + 0x0001D643, 0x01000048, 0x0001D644, 0x01000049, + 0x0001D645, 0x0100004A, 0x0001D646, 0x0100004B, + 0x0001D647, 0x0100004C, 0x0001D648, 0x0100004D, + 0x0001D649, 0x0100004E, 0x0001D64A, 0x0100004F, + 0x0001D64B, 0x01000050, 0x0001D64C, 0x01000051, + 0x0001D64D, 0x01000052, 0x0001D64E, 0x01000053, + 0x0001D64F, 0x01000054, 0x0001D650, 0x01000055, + 0x0001D651, 0x01000056, 0x0001D652, 0x01000057, + 0x0001D653, 0x01000058, 0x0001D654, 0x01000059, + 0x0001D655, 0x0100005A, 0x0001D656, 0x01000061, + 0x0001D657, 0x01000062, 0x0001D658, 0x01000063, + 0x0001D659, 0x01000064, 0x0001D65A, 0x01000065, + 0x0001D65B, 0x01000066, 0x0001D65C, 0x01000067, + 0x0001D65D, 0x01000068, 0x0001D65E, 0x01000069, + 0x0001D65F, 0x0100006A, 0x0001D660, 0x0100006B, + 0x0001D661, 0x0100006C, 0x0001D662, 0x0100006D, + 0x0001D663, 0x0100006E, 0x0001D664, 0x0100006F, + 0x0001D665, 0x01000070, 0x0001D666, 0x01000071, + 0x0001D667, 0x01000072, 0x0001D668, 0x01000073, + 0x0001D669, 0x01000074, 0x0001D66A, 0x01000075, + 0x0001D66B, 0x01000076, 0x0001D66C, 0x01000077, + 0x0001D66D, 0x01000078, 0x0001D66E, 0x01000079, + 0x0001D66F, 0x0100007A, 0x0001D670, 0x01000041, + 0x0001D671, 0x01000042, 0x0001D672, 0x01000043, + 0x0001D673, 0x01000044, 0x0001D674, 0x01000045, + 0x0001D675, 0x01000046, 0x0001D676, 0x01000047, + 0x0001D677, 0x01000048, 0x0001D678, 0x01000049, + 0x0001D679, 0x0100004A, 0x0001D67A, 0x0100004B, + 0x0001D67B, 0x0100004C, 0x0001D67C, 0x0100004D, + 0x0001D67D, 0x0100004E, 0x0001D67E, 0x0100004F, + 0x0001D67F, 0x01000050, 0x0001D680, 0x01000051, + 0x0001D681, 0x01000052, 0x0001D682, 0x01000053, + 0x0001D683, 0x01000054, 0x0001D684, 0x01000055, + 0x0001D685, 0x01000056, 0x0001D686, 0x01000057, + 0x0001D687, 0x01000058, 0x0001D688, 0x01000059, + 0x0001D689, 0x0100005A, 0x0001D68A, 0x01000061, + 0x0001D68B, 0x01000062, 0x0001D68C, 0x01000063, + 0x0001D68D, 0x01000064, 0x0001D68E, 0x01000065, + 0x0001D68F, 0x01000066, 0x0001D690, 0x01000067, + 0x0001D691, 0x01000068, 0x0001D692, 0x01000069, + 0x0001D693, 0x0100006A, 0x0001D694, 0x0100006B, + 0x0001D695, 0x0100006C, 0x0001D696, 0x0100006D, + 0x0001D697, 0x0100006E, 0x0001D698, 0x0100006F, + 0x0001D699, 0x01000070, 0x0001D69A, 0x01000071, + 0x0001D69B, 0x01000072, 0x0001D69C, 0x01000073, + 0x0001D69D, 0x01000074, 0x0001D69E, 0x01000075, + 0x0001D69F, 0x01000076, 0x0001D6A0, 0x01000077, + 0x0001D6A1, 0x01000078, 0x0001D6A2, 0x01000079, + 0x0001D6A3, 0x0100007A, 0x0001D6A4, 0x01000131, + 0x0001D6A5, 0x01000237, 0x0001D6A8, 0x01000391, + 0x0001D6A9, 0x01000392, 0x0001D6AA, 0x01000393, + 0x0001D6AB, 0x01000394, 0x0001D6AC, 0x01000395, + 0x0001D6AD, 0x01000396, 0x0001D6AE, 0x01000397, + 0x0001D6AF, 0x01000398, 0x0001D6B0, 0x01000399, + 0x0001D6B1, 0x0100039A, 0x0001D6B2, 0x0100039B, + 0x0001D6B3, 0x0100039C, 0x0001D6B4, 0x0100039D, + 0x0001D6B5, 0x0100039E, 0x0001D6B6, 0x0100039F, + 0x0001D6B7, 0x010003A0, 0x0001D6B8, 0x010003A1, + 0x0001D6B9, 0x410003F4, 0x0001D6BA, 0x010003A3, + 0x0001D6BB, 0x010003A4, 0x0001D6BC, 0x010003A5, + 0x0001D6BD, 0x010003A6, 0x0001D6BE, 0x010003A7, + 0x0001D6BF, 0x010003A8, 0x0001D6C0, 0x010003A9, + 0x0001D6C1, 0x01002207, 0x0001D6C2, 0x010003B1, + 0x0001D6C3, 0x010003B2, 0x0001D6C4, 0x010003B3, + 0x0001D6C5, 0x010003B4, 0x0001D6C6, 0x010003B5, + 0x0001D6C7, 0x010003B6, 0x0001D6C8, 0x010003B7, + 0x0001D6C9, 0x010003B8, 0x0001D6CA, 0x010003B9, + 0x0001D6CB, 0x010003BA, 0x0001D6CC, 0x010003BB, + 0x0001D6CD, 0x010003BC, 0x0001D6CE, 0x010003BD, + 0x0001D6CF, 0x010003BE, 0x0001D6D0, 0x010003BF, + 0x0001D6D1, 0x010003C0, 0x0001D6D2, 0x010003C1, + 0x0001D6D3, 0x010003C2, 0x0001D6D4, 0x010003C3, + 0x0001D6D5, 0x010003C4, 0x0001D6D6, 0x010003C5, + 0x0001D6D7, 0x010003C6, 0x0001D6D8, 0x010003C7, + 0x0001D6D9, 0x010003C8, 0x0001D6DA, 0x010003C9, + 0x0001D6DB, 0x01002202, 0x0001D6DC, 0x410003F5, + 0x0001D6DD, 0x410003D1, 0x0001D6DE, 0x410003F0, + 0x0001D6DF, 0x410003D5, 0x0001D6E0, 0x410003F1, + 0x0001D6E1, 0x410003D6, 0x0001D6E2, 0x01000391, + 0x0001D6E3, 0x01000392, 0x0001D6E4, 0x01000393, + 0x0001D6E5, 0x01000394, 0x0001D6E6, 0x01000395, + 0x0001D6E7, 0x01000396, 0x0001D6E8, 0x01000397, + 0x0001D6E9, 0x01000398, 0x0001D6EA, 0x01000399, + 0x0001D6EB, 0x0100039A, 0x0001D6EC, 0x0100039B, + 0x0001D6ED, 0x0100039C, 0x0001D6EE, 0x0100039D, + 0x0001D6EF, 0x0100039E, 0x0001D6F0, 0x0100039F, + 0x0001D6F1, 0x010003A0, 0x0001D6F2, 0x010003A1, + 0x0001D6F3, 0x410003F4, 0x0001D6F4, 0x010003A3, + 0x0001D6F5, 0x010003A4, 0x0001D6F6, 0x010003A5, + 0x0001D6F7, 0x010003A6, 0x0001D6F8, 0x010003A7, + 0x0001D6F9, 0x010003A8, 0x0001D6FA, 0x010003A9, + 0x0001D6FB, 0x01002207, 0x0001D6FC, 0x010003B1, + 0x0001D6FD, 0x010003B2, 0x0001D6FE, 0x010003B3, + 0x0001D6FF, 0x010003B4, 0x0001D700, 0x010003B5, + 0x0001D701, 0x010003B6, 0x0001D702, 0x010003B7, + 0x0001D703, 0x010003B8, 0x0001D704, 0x010003B9, + 0x0001D705, 0x010003BA, 0x0001D706, 0x010003BB, + 0x0001D707, 0x010003BC, 0x0001D708, 0x010003BD, + 0x0001D709, 0x010003BE, 0x0001D70A, 0x010003BF, + 0x0001D70B, 0x010003C0, 0x0001D70C, 0x010003C1, + 0x0001D70D, 0x010003C2, 0x0001D70E, 0x010003C3, + 0x0001D70F, 0x010003C4, 0x0001D710, 0x010003C5, + 0x0001D711, 0x010003C6, 0x0001D712, 0x010003C7, + 0x0001D713, 0x010003C8, 0x0001D714, 0x010003C9, + 0x0001D715, 0x01002202, 0x0001D716, 0x410003F5, + 0x0001D717, 0x410003D1, 0x0001D718, 0x410003F0, + 0x0001D719, 0x410003D5, 0x0001D71A, 0x410003F1, + 0x0001D71B, 0x410003D6, 0x0001D71C, 0x01000391, + 0x0001D71D, 0x01000392, 0x0001D71E, 0x01000393, + 0x0001D71F, 0x01000394, 0x0001D720, 0x01000395, + 0x0001D721, 0x01000396, 0x0001D722, 0x01000397, + 0x0001D723, 0x01000398, 0x0001D724, 0x01000399, + 0x0001D725, 0x0100039A, 0x0001D726, 0x0100039B, + 0x0001D727, 0x0100039C, 0x0001D728, 0x0100039D, + 0x0001D729, 0x0100039E, 0x0001D72A, 0x0100039F, + 0x0001D72B, 0x010003A0, 0x0001D72C, 0x010003A1, + 0x0001D72D, 0x410003F4, 0x0001D72E, 0x010003A3, + 0x0001D72F, 0x010003A4, 0x0001D730, 0x010003A5, + 0x0001D731, 0x010003A6, 0x0001D732, 0x010003A7, + 0x0001D733, 0x010003A8, 0x0001D734, 0x010003A9, + 0x0001D735, 0x01002207, 0x0001D736, 0x010003B1, + 0x0001D737, 0x010003B2, 0x0001D738, 0x010003B3, + 0x0001D739, 0x010003B4, 0x0001D73A, 0x010003B5, + 0x0001D73B, 0x010003B6, 0x0001D73C, 0x010003B7, + 0x0001D73D, 0x010003B8, 0x0001D73E, 0x010003B9, + 0x0001D73F, 0x010003BA, 0x0001D740, 0x010003BB, + 0x0001D741, 0x010003BC, 0x0001D742, 0x010003BD, + 0x0001D743, 0x010003BE, 0x0001D744, 0x010003BF, + 0x0001D745, 0x010003C0, 0x0001D746, 0x010003C1, + 0x0001D747, 0x010003C2, 0x0001D748, 0x010003C3, + 0x0001D749, 0x010003C4, 0x0001D74A, 0x010003C5, + 0x0001D74B, 0x010003C6, 0x0001D74C, 0x010003C7, + 0x0001D74D, 0x010003C8, 0x0001D74E, 0x010003C9, + 0x0001D74F, 0x01002202, 0x0001D750, 0x410003F5, + 0x0001D751, 0x410003D1, 0x0001D752, 0x410003F0, + 0x0001D753, 0x410003D5, 0x0001D754, 0x410003F1, + 0x0001D755, 0x410003D6, 0x0001D756, 0x01000391, + 0x0001D757, 0x01000392, 0x0001D758, 0x01000393, + 0x0001D759, 0x01000394, 0x0001D75A, 0x01000395, + 0x0001D75B, 0x01000396, 0x0001D75C, 0x01000397, + 0x0001D75D, 0x01000398, 0x0001D75E, 0x01000399, + 0x0001D75F, 0x0100039A, 0x0001D760, 0x0100039B, + 0x0001D761, 0x0100039C, 0x0001D762, 0x0100039D, + 0x0001D763, 0x0100039E, 0x0001D764, 0x0100039F, + 0x0001D765, 0x010003A0, 0x0001D766, 0x010003A1, + 0x0001D767, 0x410003F4, 0x0001D768, 0x010003A3, + 0x0001D769, 0x010003A4, 0x0001D76A, 0x010003A5, + 0x0001D76B, 0x010003A6, 0x0001D76C, 0x010003A7, + 0x0001D76D, 0x010003A8, 0x0001D76E, 0x010003A9, + 0x0001D76F, 0x01002207, 0x0001D770, 0x010003B1, + 0x0001D771, 0x010003B2, 0x0001D772, 0x010003B3, + 0x0001D773, 0x010003B4, 0x0001D774, 0x010003B5, + 0x0001D775, 0x010003B6, 0x0001D776, 0x010003B7, + 0x0001D777, 0x010003B8, 0x0001D778, 0x010003B9, + 0x0001D779, 0x010003BA, 0x0001D77A, 0x010003BB, + 0x0001D77B, 0x010003BC, 0x0001D77C, 0x010003BD, + 0x0001D77D, 0x010003BE, 0x0001D77E, 0x010003BF, + 0x0001D77F, 0x010003C0, 0x0001D780, 0x010003C1, + 0x0001D781, 0x010003C2, 0x0001D782, 0x010003C3, + 0x0001D783, 0x010003C4, 0x0001D784, 0x010003C5, + 0x0001D785, 0x010003C6, 0x0001D786, 0x010003C7, + 0x0001D787, 0x010003C8, 0x0001D788, 0x010003C9, + 0x0001D789, 0x01002202, 0x0001D78A, 0x410003F5, + 0x0001D78B, 0x410003D1, 0x0001D78C, 0x410003F0, + 0x0001D78D, 0x410003D5, 0x0001D78E, 0x410003F1, + 0x0001D78F, 0x410003D6, 0x0001D790, 0x01000391, + 0x0001D791, 0x01000392, 0x0001D792, 0x01000393, + 0x0001D793, 0x01000394, 0x0001D794, 0x01000395, + 0x0001D795, 0x01000396, 0x0001D796, 0x01000397, + 0x0001D797, 0x01000398, 0x0001D798, 0x01000399, + 0x0001D799, 0x0100039A, 0x0001D79A, 0x0100039B, + 0x0001D79B, 0x0100039C, 0x0001D79C, 0x0100039D, + 0x0001D79D, 0x0100039E, 0x0001D79E, 0x0100039F, + 0x0001D79F, 0x010003A0, 0x0001D7A0, 0x010003A1, + 0x0001D7A1, 0x410003F4, 0x0001D7A2, 0x010003A3, + 0x0001D7A3, 0x010003A4, 0x0001D7A4, 0x010003A5, + 0x0001D7A5, 0x010003A6, 0x0001D7A6, 0x010003A7, + 0x0001D7A7, 0x010003A8, 0x0001D7A8, 0x010003A9, + 0x0001D7A9, 0x01002207, 0x0001D7AA, 0x010003B1, + 0x0001D7AB, 0x010003B2, 0x0001D7AC, 0x010003B3, + 0x0001D7AD, 0x010003B4, 0x0001D7AE, 0x010003B5, + 0x0001D7AF, 0x010003B6, 0x0001D7B0, 0x010003B7, + 0x0001D7B1, 0x010003B8, 0x0001D7B2, 0x010003B9, + 0x0001D7B3, 0x010003BA, 0x0001D7B4, 0x010003BB, + 0x0001D7B5, 0x010003BC, 0x0001D7B6, 0x010003BD, + 0x0001D7B7, 0x010003BE, 0x0001D7B8, 0x010003BF, + 0x0001D7B9, 0x010003C0, 0x0001D7BA, 0x010003C1, + 0x0001D7BB, 0x010003C2, 0x0001D7BC, 0x010003C3, + 0x0001D7BD, 0x010003C4, 0x0001D7BE, 0x010003C5, + 0x0001D7BF, 0x010003C6, 0x0001D7C0, 0x010003C7, + 0x0001D7C1, 0x010003C8, 0x0001D7C2, 0x010003C9, + 0x0001D7C3, 0x01002202, 0x0001D7C4, 0x410003F5, + 0x0001D7C5, 0x410003D1, 0x0001D7C6, 0x410003F0, + 0x0001D7C7, 0x410003D5, 0x0001D7C8, 0x410003F1, + 0x0001D7C9, 0x410003D6, 0x0001D7CA, 0x010003DC, + 0x0001D7CB, 0x010003DD, 0x0001D7CE, 0x01000030, + 0x0001D7CF, 0x01000031, 0x0001D7D0, 0x01000032, + 0x0001D7D1, 0x01000033, 0x0001D7D2, 0x01000034, + 0x0001D7D3, 0x01000035, 0x0001D7D4, 0x01000036, + 0x0001D7D5, 0x01000037, 0x0001D7D6, 0x01000038, + 0x0001D7D7, 0x01000039, 0x0001D7D8, 0x01000030, + 0x0001D7D9, 0x01000031, 0x0001D7DA, 0x01000032, + 0x0001D7DB, 0x01000033, 0x0001D7DC, 0x01000034, + 0x0001D7DD, 0x01000035, 0x0001D7DE, 0x01000036, + 0x0001D7DF, 0x01000037, 0x0001D7E0, 0x01000038, + 0x0001D7E1, 0x01000039, 0x0001D7E2, 0x01000030, + 0x0001D7E3, 0x01000031, 0x0001D7E4, 0x01000032, + 0x0001D7E5, 0x01000033, 0x0001D7E6, 0x01000034, + 0x0001D7E7, 0x01000035, 0x0001D7E8, 0x01000036, + 0x0001D7E9, 0x01000037, 0x0001D7EA, 0x01000038, + 0x0001D7EB, 0x01000039, 0x0001D7EC, 0x01000030, + 0x0001D7ED, 0x01000031, 0x0001D7EE, 0x01000032, + 0x0001D7EF, 0x01000033, 0x0001D7F0, 0x01000034, + 0x0001D7F1, 0x01000035, 0x0001D7F2, 0x01000036, + 0x0001D7F3, 0x01000037, 0x0001D7F4, 0x01000038, + 0x0001D7F5, 0x01000039, 0x0001D7F6, 0x01000030, + 0x0001D7F7, 0x01000031, 0x0001D7F8, 0x01000032, + 0x0001D7F9, 0x01000033, 0x0001D7FA, 0x01000034, + 0x0001D7FB, 0x01000035, 0x0001D7FC, 0x01000036, + 0x0001D7FD, 0x01000037, 0x0001D7FE, 0x01000038, + 0x0001D7FF, 0x01000039, 0x0001E030, 0x01000430, + 0x0001E031, 0x01000431, 0x0001E032, 0x01000432, + 0x0001E033, 0x01000433, 0x0001E034, 0x01000434, + 0x0001E035, 0x01000435, 0x0001E036, 0x01000436, + 0x0001E037, 0x01000437, 0x0001E038, 0x01000438, + 0x0001E039, 0x0100043A, 0x0001E03A, 0x0100043B, + 0x0001E03B, 0x0100043C, 0x0001E03C, 0x0100043E, + 0x0001E03D, 0x0100043F, 0x0001E03E, 0x01000440, + 0x0001E03F, 0x01000441, 0x0001E040, 0x01000442, + 0x0001E041, 0x01000443, 0x0001E042, 0x01000444, + 0x0001E043, 0x01000445, 0x0001E044, 0x01000446, + 0x0001E045, 0x01000447, 0x0001E046, 0x01000448, + 0x0001E047, 0x0100044B, 0x0001E048, 0x0100044D, + 0x0001E049, 0x0100044E, 0x0001E04A, 0x0100A689, + 0x0001E04B, 0x010004D9, 0x0001E04C, 0x01000456, + 0x0001E04D, 0x01000458, 0x0001E04E, 0x010004E9, + 0x0001E04F, 0x010004AF, 0x0001E050, 0x010004CF, + 0x0001E051, 0x01000430, 0x0001E052, 0x01000431, + 0x0001E053, 0x01000432, 0x0001E054, 0x01000433, + 0x0001E055, 0x01000434, 0x0001E056, 0x01000435, + 0x0001E057, 0x01000436, 0x0001E058, 0x01000437, + 0x0001E059, 0x01000438, 0x0001E05A, 0x0100043A, + 0x0001E05B, 0x0100043B, 0x0001E05C, 0x0100043E, + 0x0001E05D, 0x0100043F, 0x0001E05E, 0x01000441, + 0x0001E05F, 0x01000443, 0x0001E060, 0x01000444, + 0x0001E061, 0x01000445, 0x0001E062, 0x01000446, + 0x0001E063, 0x01000447, 0x0001E064, 0x01000448, + 0x0001E065, 0x0100044A, 0x0001E066, 0x0100044B, + 0x0001E067, 0x01000491, 0x0001E068, 0x01000456, + 0x0001E069, 0x01000455, 0x0001E06A, 0x0100045F, + 0x0001E06B, 0x010004AB, 0x0001E06C, 0x0100A651, + 0x0001E06D, 0x010004B1, 0x0001EE00, 0x01000627, + 0x0001EE01, 0x01000628, 0x0001EE02, 0x0100062C, + 0x0001EE03, 0x0100062F, 0x0001EE05, 0x01000648, + 0x0001EE06, 0x01000632, 0x0001EE07, 0x0100062D, + 0x0001EE08, 0x01000637, 0x0001EE09, 0x0100064A, + 0x0001EE0A, 0x01000643, 0x0001EE0B, 0x01000644, + 0x0001EE0C, 0x01000645, 0x0001EE0D, 0x01000646, + 0x0001EE0E, 0x01000633, 0x0001EE0F, 0x01000639, + 0x0001EE10, 0x01000641, 0x0001EE11, 0x01000635, + 0x0001EE12, 0x01000642, 0x0001EE13, 0x01000631, + 0x0001EE14, 0x01000634, 0x0001EE15, 0x0100062A, + 0x0001EE16, 0x0100062B, 0x0001EE17, 0x0100062E, + 0x0001EE18, 0x01000630, 0x0001EE19, 0x01000636, + 0x0001EE1A, 0x01000638, 0x0001EE1B, 0x0100063A, + 0x0001EE1C, 0x0100066E, 0x0001EE1D, 0x010006BA, + 0x0001EE1E, 0x010006A1, 0x0001EE1F, 0x0100066F, + 0x0001EE21, 0x01000628, 0x0001EE22, 0x0100062C, + 0x0001EE24, 0x01000647, 0x0001EE27, 0x0100062D, + 0x0001EE29, 0x0100064A, 0x0001EE2A, 0x01000643, + 0x0001EE2B, 0x01000644, 0x0001EE2C, 0x01000645, + 0x0001EE2D, 0x01000646, 0x0001EE2E, 0x01000633, + 0x0001EE2F, 0x01000639, 0x0001EE30, 0x01000641, + 0x0001EE31, 0x01000635, 0x0001EE32, 0x01000642, + 0x0001EE34, 0x01000634, 0x0001EE35, 0x0100062A, + 0x0001EE36, 0x0100062B, 0x0001EE37, 0x0100062E, + 0x0001EE39, 0x01000636, 0x0001EE3B, 0x0100063A, + 0x0001EE42, 0x0100062C, 0x0001EE47, 0x0100062D, + 0x0001EE49, 0x0100064A, 0x0001EE4B, 0x01000644, + 0x0001EE4D, 0x01000646, 0x0001EE4E, 0x01000633, + 0x0001EE4F, 0x01000639, 0x0001EE51, 0x01000635, + 0x0001EE52, 0x01000642, 0x0001EE54, 0x01000634, + 0x0001EE57, 0x0100062E, 0x0001EE59, 0x01000636, + 0x0001EE5B, 0x0100063A, 0x0001EE5D, 0x010006BA, + 0x0001EE5F, 0x0100066F, 0x0001EE61, 0x01000628, + 0x0001EE62, 0x0100062C, 0x0001EE64, 0x01000647, + 0x0001EE67, 0x0100062D, 0x0001EE68, 0x01000637, + 0x0001EE69, 0x0100064A, 0x0001EE6A, 0x01000643, + 0x0001EE6C, 0x01000645, 0x0001EE6D, 0x01000646, + 0x0001EE6E, 0x01000633, 0x0001EE6F, 0x01000639, + 0x0001EE70, 0x01000641, 0x0001EE71, 0x01000635, + 0x0001EE72, 0x01000642, 0x0001EE74, 0x01000634, + 0x0001EE75, 0x0100062A, 0x0001EE76, 0x0100062B, + 0x0001EE77, 0x0100062E, 0x0001EE79, 0x01000636, + 0x0001EE7A, 0x01000638, 0x0001EE7B, 0x0100063A, + 0x0001EE7C, 0x0100066E, 0x0001EE7E, 0x010006A1, + 0x0001EE80, 0x01000627, 0x0001EE81, 0x01000628, + 0x0001EE82, 0x0100062C, 0x0001EE83, 0x0100062F, + 0x0001EE84, 0x01000647, 0x0001EE85, 0x01000648, + 0x0001EE86, 0x01000632, 0x0001EE87, 0x0100062D, + 0x0001EE88, 0x01000637, 0x0001EE89, 0x0100064A, + 0x0001EE8B, 0x01000644, 0x0001EE8C, 0x01000645, + 0x0001EE8D, 0x01000646, 0x0001EE8E, 0x01000633, + 0x0001EE8F, 0x01000639, 0x0001EE90, 0x01000641, + 0x0001EE91, 0x01000635, 0x0001EE92, 0x01000642, + 0x0001EE93, 0x01000631, 0x0001EE94, 0x01000634, + 0x0001EE95, 0x0100062A, 0x0001EE96, 0x0100062B, + 0x0001EE97, 0x0100062E, 0x0001EE98, 0x01000630, + 0x0001EE99, 0x01000636, 0x0001EE9A, 0x01000638, + 0x0001EE9B, 0x0100063A, 0x0001EEA1, 0x01000628, + 0x0001EEA2, 0x0100062C, 0x0001EEA3, 0x0100062F, + 0x0001EEA5, 0x01000648, 0x0001EEA6, 0x01000632, + 0x0001EEA7, 0x0100062D, 0x0001EEA8, 0x01000637, + 0x0001EEA9, 0x0100064A, 0x0001EEAB, 0x01000644, + 0x0001EEAC, 0x01000645, 0x0001EEAD, 0x01000646, + 0x0001EEAE, 0x01000633, 0x0001EEAF, 0x01000639, + 0x0001EEB0, 0x01000641, 0x0001EEB1, 0x01000635, + 0x0001EEB2, 0x01000642, 0x0001EEB3, 0x01000631, + 0x0001EEB4, 0x01000634, 0x0001EEB5, 0x0100062A, + 0x0001EEB6, 0x0100062B, 0x0001EEB7, 0x0100062E, + 0x0001EEB8, 0x01000630, 0x0001EEB9, 0x01000636, + 0x0001EEBA, 0x01000638, 0x0001EEBB, 0x0100063A, + 0x0001F100, 0x02000AD1, 0x0001F101, 0x02000AD3, + 0x0001F102, 0x02000AD5, 0x0001F103, 0x02000AD7, + 0x0001F104, 0x02000AD9, 0x0001F105, 0x02000ADB, + 0x0001F106, 0x02000ADD, 0x0001F107, 0x02000ADF, + 0x0001F108, 0x02000AE1, 0x0001F109, 0x02000AE3, + 0x0001F10A, 0x02000AE5, 0x0001F110, 0x03000AE7, + 0x0001F111, 0x03000AEA, 0x0001F112, 0x03000AED, + 0x0001F113, 0x03000AF0, 0x0001F114, 0x03000AF3, + 0x0001F115, 0x03000AF6, 0x0001F116, 0x03000AF9, + 0x0001F117, 0x03000AFC, 0x0001F118, 0x03000AFF, + 0x0001F119, 0x03000B02, 0x0001F11A, 0x03000B05, + 0x0001F11B, 0x03000B08, 0x0001F11C, 0x03000B0B, + 0x0001F11D, 0x03000B0E, 0x0001F11E, 0x03000B11, + 0x0001F11F, 0x03000B14, 0x0001F120, 0x03000B17, + 0x0001F121, 0x03000B1A, 0x0001F122, 0x03000B1D, + 0x0001F123, 0x03000B20, 0x0001F124, 0x03000B23, + 0x0001F125, 0x03000B26, 0x0001F126, 0x03000B29, + 0x0001F127, 0x03000B2C, 0x0001F128, 0x03000B2F, + 0x0001F129, 0x03000B32, 0x0001F12A, 0x03000B35, + 0x0001F12B, 0x01000043, 0x0001F12C, 0x01000052, + 0x0001F12D, 0x02000B38, 0x0001F12E, 0x02000B3A, + 0x0001F130, 0x01000041, 0x0001F131, 0x01000042, + 0x0001F132, 0x01000043, 0x0001F133, 0x01000044, + 0x0001F134, 0x01000045, 0x0001F135, 0x01000046, + 0x0001F136, 0x01000047, 0x0001F137, 0x01000048, + 0x0001F138, 0x01000049, 0x0001F139, 0x0100004A, + 0x0001F13A, 0x0100004B, 0x0001F13B, 0x0100004C, + 0x0001F13C, 0x0100004D, 0x0001F13D, 0x0100004E, + 0x0001F13E, 0x0100004F, 0x0001F13F, 0x01000050, + 0x0001F140, 0x01000051, 0x0001F141, 0x01000052, + 0x0001F142, 0x01000053, 0x0001F143, 0x01000054, + 0x0001F144, 0x01000055, 0x0001F145, 0x01000056, + 0x0001F146, 0x01000057, 0x0001F147, 0x01000058, + 0x0001F148, 0x01000059, 0x0001F149, 0x0100005A, + 0x0001F14A, 0x02000B3C, 0x0001F14B, 0x02000B3E, + 0x0001F14C, 0x02000B40, 0x0001F14D, 0x02000B42, + 0x0001F14E, 0x03000B44, 0x0001F14F, 0x02000B47, + 0x0001F16A, 0x02000B49, 0x0001F16B, 0x02000B4B, + 0x0001F16C, 0x02000B4D, 0x0001F190, 0x02000B4F, + 0x0001F200, 0x02000B51, 0x0001F201, 0x02000B53, + 0x0001F202, 0x010030B5, 0x0001F210, 0x0100624B, + 0x0001F211, 0x01005B57, 0x0001F212, 0x010053CC, + 0x0001F213, 0x010030C7, 0x0001F214, 0x01004E8C, + 0x0001F215, 0x0100591A, 0x0001F216, 0x010089E3, + 0x0001F217, 0x01005929, 0x0001F218, 0x01004EA4, + 0x0001F219, 0x01006620, 0x0001F21A, 0x01007121, + 0x0001F21B, 0x01006599, 0x0001F21C, 0x0100524D, + 0x0001F21D, 0x01005F8C, 0x0001F21E, 0x0100518D, + 0x0001F21F, 0x010065B0, 0x0001F220, 0x0100521D, + 0x0001F221, 0x01007D42, 0x0001F222, 0x0100751F, + 0x0001F223, 0x01008CA9, 0x0001F224, 0x010058F0, + 0x0001F225, 0x01005439, 0x0001F226, 0x01006F14, + 0x0001F227, 0x01006295, 0x0001F228, 0x01006355, + 0x0001F229, 0x01004E00, 0x0001F22A, 0x01004E09, + 0x0001F22B, 0x0100904A, 0x0001F22C, 0x01005DE6, + 0x0001F22D, 0x01004E2D, 0x0001F22E, 0x010053F3, + 0x0001F22F, 0x01006307, 0x0001F230, 0x01008D70, + 0x0001F231, 0x01006253, 0x0001F232, 0x01007981, + 0x0001F233, 0x01007A7A, 0x0001F234, 0x01005408, + 0x0001F235, 0x01006E80, 0x0001F236, 0x01006709, + 0x0001F237, 0x01006708, 0x0001F238, 0x01007533, + 0x0001F239, 0x01005272, 0x0001F23A, 0x010055B6, + 0x0001F23B, 0x0100914D, 0x0001F240, 0x03000B55, + 0x0001F241, 0x03000B58, 0x0001F242, 0x03000B5B, + 0x0001F243, 0x03000B5E, 0x0001F244, 0x03000B61, + 0x0001F245, 0x03000B64, 0x0001F246, 0x03000B67, + 0x0001F247, 0x03000B6A, 0x0001F248, 0x03000B6D, + 0x0001F250, 0x01005F97, 0x0001F251, 0x010053EF, + 0x0001FBF0, 0x01000030, 0x0001FBF1, 0x01000031, + 0x0001FBF2, 0x01000032, 0x0001FBF3, 0x01000033, + 0x0001FBF4, 0x01000034, 0x0001FBF5, 0x01000035, + 0x0001FBF6, 0x01000036, 0x0001FBF7, 0x01000037, + 0x0001FBF8, 0x01000038, 0x0001FBF9, 0x01000039, +}; + +static UTF32Char const __CFUniCharCompatibilityMultipleDecompositionTable[] = { + 0x00000020, 0x00000308, 0x00000020, 0x00000304, + 0x00000020, 0x00000301, 0x00000020, 0x00000327, + 0x00000031, 0x00002044, 0x00000034, 0x00000031, + 0x00002044, 0x00000032, 0x00000033, 0x00002044, + 0x00000034, 0x00000049, 0x0000004A, 0x00000069, + 0x0000006A, 0x0000004C, 0x000000B7, 0x0000006C, + 0x000000B7, 0x000002BC, 0x0000006E, 0x00000044, + 0x0000017D, 0x00000044, 0x0000017E, 0x00000064, + 0x0000017E, 0x0000004C, 0x0000004A, 0x0000004C, + 0x0000006A, 0x0000006C, 0x0000006A, 0x0000004E, + 0x0000004A, 0x0000004E, 0x0000006A, 0x0000006E, + 0x0000006A, 0x00000044, 0x0000005A, 0x00000044, + 0x0000007A, 0x00000064, 0x0000007A, 0x00000020, + 0x00000306, 0x00000020, 0x00000307, 0x00000020, + 0x0000030A, 0x00000020, 0x00000328, 0x00000020, + 0x00000303, 0x00000020, 0x0000030B, 0x00000020, + 0x00000345, 0x00000020, 0x00000301, 0x00000565, + 0x00000582, 0x00000627, 0x00000674, 0x00000648, + 0x00000674, 0x000006C7, 0x00000674, 0x0000064A, + 0x00000674, 0x00000E4D, 0x00000E32, 0x00000ECD, + 0x00000EB2, 0x00000EAB, 0x00000E99, 0x00000EAB, + 0x00000EA1, 0x00000FB2, 0x00000F81, 0x00000FB3, + 0x00000F81, 0x00000061, 0x000002BE, 0x00000020, + 0x00000313, 0x00000020, 0x00000313, 0x00000020, + 0x00000342, 0x00000020, 0x00000314, 0x00000020, + 0x00000333, 0x0000002E, 0x0000002E, 0x0000002E, + 0x0000002E, 0x0000002E, 0x00002032, 0x00002032, + 0x00002032, 0x00002032, 0x00002032, 0x00002035, + 0x00002035, 0x00002035, 0x00002035, 0x00002035, + 0x00000021, 0x00000021, 0x00000020, 0x00000305, + 0x0000003F, 0x0000003F, 0x0000003F, 0x00000021, + 0x00000021, 0x0000003F, 0x00002032, 0x00002032, + 0x00002032, 0x00002032, 0x00000052, 0x00000073, + 0x00000061, 0x0000002F, 0x00000063, 0x00000061, + 0x0000002F, 0x00000073, 0x000000B0, 0x00000043, + 0x00000063, 0x0000002F, 0x0000006F, 0x00000063, + 0x0000002F, 0x00000075, 0x000000B0, 0x00000046, + 0x0000004E, 0x0000006F, 0x00000053, 0x0000004D, + 0x00000054, 0x00000045, 0x0000004C, 0x00000054, + 0x0000004D, 0x00000046, 0x00000041, 0x00000058, + 0x00000031, 0x00002044, 0x00000037, 0x00000031, + 0x00002044, 0x00000039, 0x00000031, 0x00002044, + 0x00000031, 0x00000030, 0x00000031, 0x00002044, + 0x00000033, 0x00000032, 0x00002044, 0x00000033, + 0x00000031, 0x00002044, 0x00000035, 0x00000032, + 0x00002044, 0x00000035, 0x00000033, 0x00002044, + 0x00000035, 0x00000034, 0x00002044, 0x00000035, + 0x00000031, 0x00002044, 0x00000036, 0x00000035, + 0x00002044, 0x00000036, 0x00000031, 0x00002044, + 0x00000038, 0x00000033, 0x00002044, 0x00000038, + 0x00000035, 0x00002044, 0x00000038, 0x00000037, + 0x00002044, 0x00000038, 0x00000031, 0x00002044, + 0x00000049, 0x00000049, 0x00000049, 0x00000049, + 0x00000049, 0x00000049, 0x00000056, 0x00000056, + 0x00000049, 0x00000056, 0x00000049, 0x00000049, + 0x00000056, 0x00000049, 0x00000049, 0x00000049, + 0x00000049, 0x00000058, 0x00000058, 0x00000049, + 0x00000058, 0x00000049, 0x00000049, 0x00000069, + 0x00000069, 0x00000069, 0x00000069, 0x00000069, + 0x00000069, 0x00000076, 0x00000076, 0x00000069, + 0x00000076, 0x00000069, 0x00000069, 0x00000076, + 0x00000069, 0x00000069, 0x00000069, 0x00000069, + 0x00000078, 0x00000078, 0x00000069, 0x00000078, + 0x00000069, 0x00000069, 0x00000030, 0x00002044, + 0x00000033, 0x0000222B, 0x0000222B, 0x0000222B, + 0x0000222B, 0x0000222B, 0x0000222E, 0x0000222E, + 0x0000222E, 0x0000222E, 0x0000222E, 0x00000031, + 0x00000030, 0x00000031, 0x00000031, 0x00000031, + 0x00000032, 0x00000031, 0x00000033, 0x00000031, + 0x00000034, 0x00000031, 0x00000035, 0x00000031, + 0x00000036, 0x00000031, 0x00000037, 0x00000031, + 0x00000038, 0x00000031, 0x00000039, 0x00000032, + 0x00000030, 0x00000028, 0x00000031, 0x00000029, + 0x00000028, 0x00000032, 0x00000029, 0x00000028, + 0x00000033, 0x00000029, 0x00000028, 0x00000034, + 0x00000029, 0x00000028, 0x00000035, 0x00000029, + 0x00000028, 0x00000036, 0x00000029, 0x00000028, + 0x00000037, 0x00000029, 0x00000028, 0x00000038, + 0x00000029, 0x00000028, 0x00000039, 0x00000029, + 0x00000028, 0x00000031, 0x00000030, 0x00000029, + 0x00000028, 0x00000031, 0x00000031, 0x00000029, + 0x00000028, 0x00000031, 0x00000032, 0x00000029, + 0x00000028, 0x00000031, 0x00000033, 0x00000029, + 0x00000028, 0x00000031, 0x00000034, 0x00000029, + 0x00000028, 0x00000031, 0x00000035, 0x00000029, + 0x00000028, 0x00000031, 0x00000036, 0x00000029, + 0x00000028, 0x00000031, 0x00000037, 0x00000029, + 0x00000028, 0x00000031, 0x00000038, 0x00000029, + 0x00000028, 0x00000031, 0x00000039, 0x00000029, + 0x00000028, 0x00000032, 0x00000030, 0x00000029, + 0x00000031, 0x0000002E, 0x00000032, 0x0000002E, + 0x00000033, 0x0000002E, 0x00000034, 0x0000002E, + 0x00000035, 0x0000002E, 0x00000036, 0x0000002E, + 0x00000037, 0x0000002E, 0x00000038, 0x0000002E, + 0x00000039, 0x0000002E, 0x00000031, 0x00000030, + 0x0000002E, 0x00000031, 0x00000031, 0x0000002E, + 0x00000031, 0x00000032, 0x0000002E, 0x00000031, + 0x00000033, 0x0000002E, 0x00000031, 0x00000034, + 0x0000002E, 0x00000031, 0x00000035, 0x0000002E, + 0x00000031, 0x00000036, 0x0000002E, 0x00000031, + 0x00000037, 0x0000002E, 0x00000031, 0x00000038, + 0x0000002E, 0x00000031, 0x00000039, 0x0000002E, + 0x00000032, 0x00000030, 0x0000002E, 0x00000028, + 0x00000061, 0x00000029, 0x00000028, 0x00000062, + 0x00000029, 0x00000028, 0x00000063, 0x00000029, + 0x00000028, 0x00000064, 0x00000029, 0x00000028, + 0x00000065, 0x00000029, 0x00000028, 0x00000066, + 0x00000029, 0x00000028, 0x00000067, 0x00000029, + 0x00000028, 0x00000068, 0x00000029, 0x00000028, + 0x00000069, 0x00000029, 0x00000028, 0x0000006A, + 0x00000029, 0x00000028, 0x0000006B, 0x00000029, + 0x00000028, 0x0000006C, 0x00000029, 0x00000028, + 0x0000006D, 0x00000029, 0x00000028, 0x0000006E, + 0x00000029, 0x00000028, 0x0000006F, 0x00000029, + 0x00000028, 0x00000070, 0x00000029, 0x00000028, + 0x00000071, 0x00000029, 0x00000028, 0x00000072, + 0x00000029, 0x00000028, 0x00000073, 0x00000029, + 0x00000028, 0x00000074, 0x00000029, 0x00000028, + 0x00000075, 0x00000029, 0x00000028, 0x00000076, + 0x00000029, 0x00000028, 0x00000077, 0x00000029, + 0x00000028, 0x00000078, 0x00000029, 0x00000028, + 0x00000079, 0x00000029, 0x00000028, 0x0000007A, + 0x00000029, 0x0000222B, 0x0000222B, 0x0000222B, + 0x0000222B, 0x0000003A, 0x0000003A, 0x0000003D, + 0x0000003D, 0x0000003D, 0x0000003D, 0x0000003D, + 0x0000003D, 0x00000020, 0x00003099, 0x00000020, + 0x0000309A, 0x00003088, 0x0000308A, 0x000030B3, + 0x000030C8, 0x00000028, 0x00001100, 0x00000029, + 0x00000028, 0x00001102, 0x00000029, 0x00000028, + 0x00001103, 0x00000029, 0x00000028, 0x00001105, + 0x00000029, 0x00000028, 0x00001106, 0x00000029, + 0x00000028, 0x00001107, 0x00000029, 0x00000028, + 0x00001109, 0x00000029, 0x00000028, 0x0000110B, + 0x00000029, 0x00000028, 0x0000110C, 0x00000029, + 0x00000028, 0x0000110E, 0x00000029, 0x00000028, + 0x0000110F, 0x00000029, 0x00000028, 0x00001110, + 0x00000029, 0x00000028, 0x00001111, 0x00000029, + 0x00000028, 0x00001112, 0x00000029, 0x00000028, + 0x00001100, 0x00001161, 0x00000029, 0x00000028, + 0x00001102, 0x00001161, 0x00000029, 0x00000028, + 0x00001103, 0x00001161, 0x00000029, 0x00000028, + 0x00001105, 0x00001161, 0x00000029, 0x00000028, + 0x00001106, 0x00001161, 0x00000029, 0x00000028, + 0x00001107, 0x00001161, 0x00000029, 0x00000028, + 0x00001109, 0x00001161, 0x00000029, 0x00000028, + 0x0000110B, 0x00001161, 0x00000029, 0x00000028, + 0x0000110C, 0x00001161, 0x00000029, 0x00000028, + 0x0000110E, 0x00001161, 0x00000029, 0x00000028, + 0x0000110F, 0x00001161, 0x00000029, 0x00000028, + 0x00001110, 0x00001161, 0x00000029, 0x00000028, + 0x00001111, 0x00001161, 0x00000029, 0x00000028, + 0x00001112, 0x00001161, 0x00000029, 0x00000028, + 0x0000110C, 0x0000116E, 0x00000029, 0x00000028, + 0x0000110B, 0x00001169, 0x0000110C, 0x00001165, + 0x000011AB, 0x00000029, 0x00000028, 0x0000110B, + 0x00001169, 0x00001112, 0x0000116E, 0x00000029, + 0x00000028, 0x00004E00, 0x00000029, 0x00000028, + 0x00004E8C, 0x00000029, 0x00000028, 0x00004E09, + 0x00000029, 0x00000028, 0x000056DB, 0x00000029, + 0x00000028, 0x00004E94, 0x00000029, 0x00000028, + 0x0000516D, 0x00000029, 0x00000028, 0x00004E03, + 0x00000029, 0x00000028, 0x0000516B, 0x00000029, + 0x00000028, 0x00004E5D, 0x00000029, 0x00000028, + 0x00005341, 0x00000029, 0x00000028, 0x00006708, + 0x00000029, 0x00000028, 0x0000706B, 0x00000029, + 0x00000028, 0x00006C34, 0x00000029, 0x00000028, + 0x00006728, 0x00000029, 0x00000028, 0x000091D1, + 0x00000029, 0x00000028, 0x0000571F, 0x00000029, + 0x00000028, 0x000065E5, 0x00000029, 0x00000028, + 0x0000682A, 0x00000029, 0x00000028, 0x00006709, + 0x00000029, 0x00000028, 0x0000793E, 0x00000029, + 0x00000028, 0x0000540D, 0x00000029, 0x00000028, + 0x00007279, 0x00000029, 0x00000028, 0x00008CA1, + 0x00000029, 0x00000028, 0x0000795D, 0x00000029, + 0x00000028, 0x000052B4, 0x00000029, 0x00000028, + 0x00004EE3, 0x00000029, 0x00000028, 0x0000547C, + 0x00000029, 0x00000028, 0x00005B66, 0x00000029, + 0x00000028, 0x000076E3, 0x00000029, 0x00000028, + 0x00004F01, 0x00000029, 0x00000028, 0x00008CC7, + 0x00000029, 0x00000028, 0x00005354, 0x00000029, + 0x00000028, 0x0000796D, 0x00000029, 0x00000028, + 0x00004F11, 0x00000029, 0x00000028, 0x000081EA, + 0x00000029, 0x00000028, 0x000081F3, 0x00000029, + 0x00000050, 0x00000054, 0x00000045, 0x00000032, + 0x00000031, 0x00000032, 0x00000032, 0x00000032, + 0x00000033, 0x00000032, 0x00000034, 0x00000032, + 0x00000035, 0x00000032, 0x00000036, 0x00000032, + 0x00000037, 0x00000032, 0x00000038, 0x00000032, + 0x00000039, 0x00000033, 0x00000030, 0x00000033, + 0x00000031, 0x00000033, 0x00000032, 0x00000033, + 0x00000033, 0x00000033, 0x00000034, 0x00000033, + 0x00000035, 0x00001100, 0x00001161, 0x00001102, + 0x00001161, 0x00001103, 0x00001161, 0x00001105, + 0x00001161, 0x00001106, 0x00001161, 0x00001107, + 0x00001161, 0x00001109, 0x00001161, 0x0000110B, + 0x00001161, 0x0000110C, 0x00001161, 0x0000110E, + 0x00001161, 0x0000110F, 0x00001161, 0x00001110, + 0x00001161, 0x00001111, 0x00001161, 0x00001112, + 0x00001161, 0x0000110E, 0x00001161, 0x000011B7, + 0x00001100, 0x00001169, 0x0000110C, 0x0000116E, + 0x0000110B, 0x00001174, 0x0000110B, 0x0000116E, + 0x00000033, 0x00000036, 0x00000033, 0x00000037, + 0x00000033, 0x00000038, 0x00000033, 0x00000039, + 0x00000034, 0x00000030, 0x00000034, 0x00000031, + 0x00000034, 0x00000032, 0x00000034, 0x00000033, + 0x00000034, 0x00000034, 0x00000034, 0x00000035, + 0x00000034, 0x00000036, 0x00000034, 0x00000037, + 0x00000034, 0x00000038, 0x00000034, 0x00000039, + 0x00000035, 0x00000030, 0x00000031, 0x00006708, + 0x00000032, 0x00006708, 0x00000033, 0x00006708, + 0x00000034, 0x00006708, 0x00000035, 0x00006708, + 0x00000036, 0x00006708, 0x00000037, 0x00006708, + 0x00000038, 0x00006708, 0x00000039, 0x00006708, + 0x00000031, 0x00000030, 0x00006708, 0x00000031, + 0x00000031, 0x00006708, 0x00000031, 0x00000032, + 0x00006708, 0x00000048, 0x00000067, 0x00000065, + 0x00000072, 0x00000067, 0x00000065, 0x00000056, + 0x0000004C, 0x00000054, 0x00000044, 0x00004EE4, + 0x0000548C, 0x000030A2, 0x000030D1, 0x000030FC, + 0x000030C8, 0x000030A2, 0x000030EB, 0x000030D5, + 0x000030A1, 0x000030A2, 0x000030F3, 0x000030DA, + 0x000030A2, 0x000030A2, 0x000030FC, 0x000030EB, + 0x000030A4, 0x000030CB, 0x000030F3, 0x000030B0, + 0x000030A4, 0x000030F3, 0x000030C1, 0x000030A6, + 0x000030A9, 0x000030F3, 0x000030A8, 0x000030B9, + 0x000030AF, 0x000030FC, 0x000030C9, 0x000030A8, + 0x000030FC, 0x000030AB, 0x000030FC, 0x000030AA, + 0x000030F3, 0x000030B9, 0x000030AA, 0x000030FC, + 0x000030E0, 0x000030AB, 0x000030A4, 0x000030EA, + 0x000030AB, 0x000030E9, 0x000030C3, 0x000030C8, + 0x000030AB, 0x000030ED, 0x000030EA, 0x000030FC, + 0x000030AC, 0x000030ED, 0x000030F3, 0x000030AC, + 0x000030F3, 0x000030DE, 0x000030AE, 0x000030AC, + 0x000030AE, 0x000030CB, 0x000030FC, 0x000030AD, + 0x000030E5, 0x000030EA, 0x000030FC, 0x000030AE, + 0x000030EB, 0x000030C0, 0x000030FC, 0x000030AD, + 0x000030ED, 0x000030AD, 0x000030ED, 0x000030B0, + 0x000030E9, 0x000030E0, 0x000030AD, 0x000030ED, + 0x000030E1, 0x000030FC, 0x000030C8, 0x000030EB, + 0x000030AD, 0x000030ED, 0x000030EF, 0x000030C3, + 0x000030C8, 0x000030B0, 0x000030E9, 0x000030E0, + 0x000030B0, 0x000030E9, 0x000030E0, 0x000030C8, + 0x000030F3, 0x000030AF, 0x000030EB, 0x000030BC, + 0x000030A4, 0x000030ED, 0x000030AF, 0x000030ED, + 0x000030FC, 0x000030CD, 0x000030B1, 0x000030FC, + 0x000030B9, 0x000030B3, 0x000030EB, 0x000030CA, + 0x000030B3, 0x000030FC, 0x000030DD, 0x000030B5, + 0x000030A4, 0x000030AF, 0x000030EB, 0x000030B5, + 0x000030F3, 0x000030C1, 0x000030FC, 0x000030E0, + 0x000030B7, 0x000030EA, 0x000030F3, 0x000030B0, + 0x000030BB, 0x000030F3, 0x000030C1, 0x000030BB, + 0x000030F3, 0x000030C8, 0x000030C0, 0x000030FC, + 0x000030B9, 0x000030C7, 0x000030B7, 0x000030C9, + 0x000030EB, 0x000030C8, 0x000030F3, 0x000030CA, + 0x000030CE, 0x000030CE, 0x000030C3, 0x000030C8, + 0x000030CF, 0x000030A4, 0x000030C4, 0x000030D1, + 0x000030FC, 0x000030BB, 0x000030F3, 0x000030C8, + 0x000030D1, 0x000030FC, 0x000030C4, 0x000030D0, + 0x000030FC, 0x000030EC, 0x000030EB, 0x000030D4, + 0x000030A2, 0x000030B9, 0x000030C8, 0x000030EB, + 0x000030D4, 0x000030AF, 0x000030EB, 0x000030D4, + 0x000030B3, 0x000030D3, 0x000030EB, 0x000030D5, + 0x000030A1, 0x000030E9, 0x000030C3, 0x000030C9, + 0x000030D5, 0x000030A3, 0x000030FC, 0x000030C8, + 0x000030D6, 0x000030C3, 0x000030B7, 0x000030A7, + 0x000030EB, 0x000030D5, 0x000030E9, 0x000030F3, + 0x000030D8, 0x000030AF, 0x000030BF, 0x000030FC, + 0x000030EB, 0x000030DA, 0x000030BD, 0x000030DA, + 0x000030CB, 0x000030D2, 0x000030D8, 0x000030EB, + 0x000030C4, 0x000030DA, 0x000030F3, 0x000030B9, + 0x000030DA, 0x000030FC, 0x000030B8, 0x000030D9, + 0x000030FC, 0x000030BF, 0x000030DD, 0x000030A4, + 0x000030F3, 0x000030C8, 0x000030DC, 0x000030EB, + 0x000030C8, 0x000030DB, 0x000030F3, 0x000030DD, + 0x000030F3, 0x000030C9, 0x000030DB, 0x000030FC, + 0x000030EB, 0x000030DB, 0x000030FC, 0x000030F3, + 0x000030DE, 0x000030A4, 0x000030AF, 0x000030ED, + 0x000030DE, 0x000030A4, 0x000030EB, 0x000030DE, + 0x000030C3, 0x000030CF, 0x000030DE, 0x000030EB, + 0x000030AF, 0x000030DE, 0x000030F3, 0x000030B7, + 0x000030E7, 0x000030F3, 0x000030DF, 0x000030AF, + 0x000030ED, 0x000030F3, 0x000030DF, 0x000030EA, + 0x000030DF, 0x000030EA, 0x000030D0, 0x000030FC, + 0x000030EB, 0x000030E1, 0x000030AC, 0x000030E1, + 0x000030AC, 0x000030C8, 0x000030F3, 0x000030E1, + 0x000030FC, 0x000030C8, 0x000030EB, 0x000030E4, + 0x000030FC, 0x000030C9, 0x000030E4, 0x000030FC, + 0x000030EB, 0x000030E6, 0x000030A2, 0x000030F3, + 0x000030EA, 0x000030C3, 0x000030C8, 0x000030EB, + 0x000030EA, 0x000030E9, 0x000030EB, 0x000030D4, + 0x000030FC, 0x000030EB, 0x000030FC, 0x000030D6, + 0x000030EB, 0x000030EC, 0x000030E0, 0x000030EC, + 0x000030F3, 0x000030C8, 0x000030B2, 0x000030F3, + 0x000030EF, 0x000030C3, 0x000030C8, 0x00000030, + 0x000070B9, 0x00000031, 0x000070B9, 0x00000032, + 0x000070B9, 0x00000033, 0x000070B9, 0x00000034, + 0x000070B9, 0x00000035, 0x000070B9, 0x00000036, + 0x000070B9, 0x00000037, 0x000070B9, 0x00000038, + 0x000070B9, 0x00000039, 0x000070B9, 0x00000031, + 0x00000030, 0x000070B9, 0x00000031, 0x00000031, + 0x000070B9, 0x00000031, 0x00000032, 0x000070B9, + 0x00000031, 0x00000033, 0x000070B9, 0x00000031, + 0x00000034, 0x000070B9, 0x00000031, 0x00000035, + 0x000070B9, 0x00000031, 0x00000036, 0x000070B9, + 0x00000031, 0x00000037, 0x000070B9, 0x00000031, + 0x00000038, 0x000070B9, 0x00000031, 0x00000039, + 0x000070B9, 0x00000032, 0x00000030, 0x000070B9, + 0x00000032, 0x00000031, 0x000070B9, 0x00000032, + 0x00000032, 0x000070B9, 0x00000032, 0x00000033, + 0x000070B9, 0x00000032, 0x00000034, 0x000070B9, + 0x00000068, 0x00000050, 0x00000061, 0x00000064, + 0x00000061, 0x00000041, 0x00000055, 0x00000062, + 0x00000061, 0x00000072, 0x0000006F, 0x00000056, + 0x00000070, 0x00000063, 0x00000064, 0x0000006D, + 0x00000064, 0x0000006D, 0x000000B2, 0x00000064, + 0x0000006D, 0x000000B3, 0x00000049, 0x00000055, + 0x00005E73, 0x00006210, 0x0000662D, 0x0000548C, + 0x00005927, 0x00006B63, 0x0000660E, 0x00006CBB, + 0x0000682A, 0x00005F0F, 0x00004F1A, 0x0000793E, + 0x00000070, 0x00000041, 0x0000006E, 0x00000041, + 0x000003BC, 0x00000041, 0x0000006D, 0x00000041, + 0x0000006B, 0x00000041, 0x0000004B, 0x00000042, + 0x0000004D, 0x00000042, 0x00000047, 0x00000042, + 0x00000063, 0x00000061, 0x0000006C, 0x0000006B, + 0x00000063, 0x00000061, 0x0000006C, 0x00000070, + 0x00000046, 0x0000006E, 0x00000046, 0x000003BC, + 0x00000046, 0x000003BC, 0x00000067, 0x0000006D, + 0x00000067, 0x0000006B, 0x00000067, 0x00000048, + 0x0000007A, 0x0000006B, 0x00000048, 0x0000007A, + 0x0000004D, 0x00000048, 0x0000007A, 0x00000047, + 0x00000048, 0x0000007A, 0x00000054, 0x00000048, + 0x0000007A, 0x000003BC, 0x00002113, 0x0000006D, + 0x00002113, 0x00000064, 0x00002113, 0x0000006B, + 0x00002113, 0x00000066, 0x0000006D, 0x0000006E, + 0x0000006D, 0x000003BC, 0x0000006D, 0x0000006D, + 0x0000006D, 0x00000063, 0x0000006D, 0x0000006B, + 0x0000006D, 0x0000006D, 0x0000006D, 0x000000B2, + 0x00000063, 0x0000006D, 0x000000B2, 0x0000006D, + 0x000000B2, 0x0000006B, 0x0000006D, 0x000000B2, + 0x0000006D, 0x0000006D, 0x000000B3, 0x00000063, + 0x0000006D, 0x000000B3, 0x0000006D, 0x000000B3, + 0x0000006B, 0x0000006D, 0x000000B3, 0x0000006D, + 0x00002215, 0x00000073, 0x0000006D, 0x00002215, + 0x00000073, 0x000000B2, 0x00000050, 0x00000061, + 0x0000006B, 0x00000050, 0x00000061, 0x0000004D, + 0x00000050, 0x00000061, 0x00000047, 0x00000050, + 0x00000061, 0x00000072, 0x00000061, 0x00000064, + 0x00000072, 0x00000061, 0x00000064, 0x00002215, + 0x00000073, 0x00000072, 0x00000061, 0x00000064, + 0x00002215, 0x00000073, 0x000000B2, 0x00000070, + 0x00000073, 0x0000006E, 0x00000073, 0x000003BC, + 0x00000073, 0x0000006D, 0x00000073, 0x00000070, + 0x00000056, 0x0000006E, 0x00000056, 0x000003BC, + 0x00000056, 0x0000006D, 0x00000056, 0x0000006B, + 0x00000056, 0x0000004D, 0x00000056, 0x00000070, + 0x00000057, 0x0000006E, 0x00000057, 0x000003BC, + 0x00000057, 0x0000006D, 0x00000057, 0x0000006B, + 0x00000057, 0x0000004D, 0x00000057, 0x0000006B, + 0x000003A9, 0x0000004D, 0x000003A9, 0x00000061, + 0x0000002E, 0x0000006D, 0x0000002E, 0x00000042, + 0x00000071, 0x00000063, 0x00000063, 0x00000063, + 0x00000064, 0x00000043, 0x00002215, 0x0000006B, + 0x00000067, 0x00000043, 0x0000006F, 0x0000002E, + 0x00000064, 0x00000042, 0x00000047, 0x00000079, + 0x00000068, 0x00000061, 0x00000048, 0x00000050, + 0x00000069, 0x0000006E, 0x0000004B, 0x0000004B, + 0x0000004B, 0x0000004D, 0x0000006B, 0x00000074, + 0x0000006C, 0x0000006D, 0x0000006C, 0x0000006E, + 0x0000006C, 0x0000006F, 0x00000067, 0x0000006C, + 0x00000078, 0x0000006D, 0x00000062, 0x0000006D, + 0x00000069, 0x0000006C, 0x0000006D, 0x0000006F, + 0x0000006C, 0x00000050, 0x00000048, 0x00000070, + 0x0000002E, 0x0000006D, 0x0000002E, 0x00000050, + 0x00000050, 0x0000004D, 0x00000050, 0x00000052, + 0x00000073, 0x00000072, 0x00000053, 0x00000076, + 0x00000057, 0x00000062, 0x00000056, 0x00002215, + 0x0000006D, 0x00000041, 0x00002215, 0x0000006D, + 0x00000031, 0x000065E5, 0x00000032, 0x000065E5, + 0x00000033, 0x000065E5, 0x00000034, 0x000065E5, + 0x00000035, 0x000065E5, 0x00000036, 0x000065E5, + 0x00000037, 0x000065E5, 0x00000038, 0x000065E5, + 0x00000039, 0x000065E5, 0x00000031, 0x00000030, + 0x000065E5, 0x00000031, 0x00000031, 0x000065E5, + 0x00000031, 0x00000032, 0x000065E5, 0x00000031, + 0x00000033, 0x000065E5, 0x00000031, 0x00000034, + 0x000065E5, 0x00000031, 0x00000035, 0x000065E5, + 0x00000031, 0x00000036, 0x000065E5, 0x00000031, + 0x00000037, 0x000065E5, 0x00000031, 0x00000038, + 0x000065E5, 0x00000031, 0x00000039, 0x000065E5, + 0x00000032, 0x00000030, 0x000065E5, 0x00000032, + 0x00000031, 0x000065E5, 0x00000032, 0x00000032, + 0x000065E5, 0x00000032, 0x00000033, 0x000065E5, + 0x00000032, 0x00000034, 0x000065E5, 0x00000032, + 0x00000035, 0x000065E5, 0x00000032, 0x00000036, + 0x000065E5, 0x00000032, 0x00000037, 0x000065E5, + 0x00000032, 0x00000038, 0x000065E5, 0x00000032, + 0x00000039, 0x000065E5, 0x00000033, 0x00000030, + 0x000065E5, 0x00000033, 0x00000031, 0x000065E5, + 0x00000067, 0x00000061, 0x0000006C, 0x00000066, + 0x00000066, 0x00000066, 0x00000069, 0x00000066, + 0x0000006C, 0x00000066, 0x00000066, 0x00000069, + 0x00000066, 0x00000066, 0x0000006C, 0x0000017F, + 0x00000074, 0x00000073, 0x00000074, 0x00000574, + 0x00000576, 0x00000574, 0x00000565, 0x00000574, + 0x0000056B, 0x0000057E, 0x00000576, 0x00000574, + 0x0000056D, 0x000005D0, 0x000005DC, 0x00000626, + 0x00000627, 0x00000626, 0x00000627, 0x00000626, + 0x000006D5, 0x00000626, 0x000006D5, 0x00000626, + 0x00000648, 0x00000626, 0x00000648, 0x00000626, + 0x000006C7, 0x00000626, 0x000006C7, 0x00000626, + 0x000006C6, 0x00000626, 0x000006C6, 0x00000626, + 0x000006C8, 0x00000626, 0x000006C8, 0x00000626, + 0x000006D0, 0x00000626, 0x000006D0, 0x00000626, + 0x000006D0, 0x00000626, 0x00000649, 0x00000626, + 0x00000649, 0x00000626, 0x00000649, 0x00000626, + 0x0000062C, 0x00000626, 0x0000062D, 0x00000626, + 0x00000645, 0x00000626, 0x00000649, 0x00000626, + 0x0000064A, 0x00000628, 0x0000062C, 0x00000628, + 0x0000062D, 0x00000628, 0x0000062E, 0x00000628, + 0x00000645, 0x00000628, 0x00000649, 0x00000628, + 0x0000064A, 0x0000062A, 0x0000062C, 0x0000062A, + 0x0000062D, 0x0000062A, 0x0000062E, 0x0000062A, + 0x00000645, 0x0000062A, 0x00000649, 0x0000062A, + 0x0000064A, 0x0000062B, 0x0000062C, 0x0000062B, + 0x00000645, 0x0000062B, 0x00000649, 0x0000062B, + 0x0000064A, 0x0000062C, 0x0000062D, 0x0000062C, + 0x00000645, 0x0000062D, 0x0000062C, 0x0000062D, + 0x00000645, 0x0000062E, 0x0000062C, 0x0000062E, + 0x0000062D, 0x0000062E, 0x00000645, 0x00000633, + 0x0000062C, 0x00000633, 0x0000062D, 0x00000633, + 0x0000062E, 0x00000633, 0x00000645, 0x00000635, + 0x0000062D, 0x00000635, 0x00000645, 0x00000636, + 0x0000062C, 0x00000636, 0x0000062D, 0x00000636, + 0x0000062E, 0x00000636, 0x00000645, 0x00000637, + 0x0000062D, 0x00000637, 0x00000645, 0x00000638, + 0x00000645, 0x00000639, 0x0000062C, 0x00000639, + 0x00000645, 0x0000063A, 0x0000062C, 0x0000063A, + 0x00000645, 0x00000641, 0x0000062C, 0x00000641, + 0x0000062D, 0x00000641, 0x0000062E, 0x00000641, + 0x00000645, 0x00000641, 0x00000649, 0x00000641, + 0x0000064A, 0x00000642, 0x0000062D, 0x00000642, + 0x00000645, 0x00000642, 0x00000649, 0x00000642, + 0x0000064A, 0x00000643, 0x00000627, 0x00000643, + 0x0000062C, 0x00000643, 0x0000062D, 0x00000643, + 0x0000062E, 0x00000643, 0x00000644, 0x00000643, + 0x00000645, 0x00000643, 0x00000649, 0x00000643, + 0x0000064A, 0x00000644, 0x0000062C, 0x00000644, + 0x0000062D, 0x00000644, 0x0000062E, 0x00000644, + 0x00000645, 0x00000644, 0x00000649, 0x00000644, + 0x0000064A, 0x00000645, 0x0000062C, 0x00000645, + 0x0000062D, 0x00000645, 0x0000062E, 0x00000645, + 0x00000645, 0x00000645, 0x00000649, 0x00000645, + 0x0000064A, 0x00000646, 0x0000062C, 0x00000646, + 0x0000062D, 0x00000646, 0x0000062E, 0x00000646, + 0x00000645, 0x00000646, 0x00000649, 0x00000646, + 0x0000064A, 0x00000647, 0x0000062C, 0x00000647, + 0x00000645, 0x00000647, 0x00000649, 0x00000647, + 0x0000064A, 0x0000064A, 0x0000062C, 0x0000064A, + 0x0000062D, 0x0000064A, 0x0000062E, 0x0000064A, + 0x00000645, 0x0000064A, 0x00000649, 0x0000064A, + 0x0000064A, 0x00000630, 0x00000670, 0x00000631, + 0x00000670, 0x00000649, 0x00000670, 0x00000020, + 0x0000064C, 0x00000651, 0x00000020, 0x0000064D, + 0x00000651, 0x00000020, 0x0000064E, 0x00000651, + 0x00000020, 0x0000064F, 0x00000651, 0x00000020, + 0x00000650, 0x00000651, 0x00000020, 0x00000651, + 0x00000670, 0x00000626, 0x00000631, 0x00000626, + 0x00000632, 0x00000626, 0x00000645, 0x00000626, + 0x00000646, 0x00000626, 0x00000649, 0x00000626, + 0x0000064A, 0x00000628, 0x00000631, 0x00000628, + 0x00000632, 0x00000628, 0x00000645, 0x00000628, + 0x00000646, 0x00000628, 0x00000649, 0x00000628, + 0x0000064A, 0x0000062A, 0x00000631, 0x0000062A, + 0x00000632, 0x0000062A, 0x00000645, 0x0000062A, + 0x00000646, 0x0000062A, 0x00000649, 0x0000062A, + 0x0000064A, 0x0000062B, 0x00000631, 0x0000062B, + 0x00000632, 0x0000062B, 0x00000645, 0x0000062B, + 0x00000646, 0x0000062B, 0x00000649, 0x0000062B, + 0x0000064A, 0x00000641, 0x00000649, 0x00000641, + 0x0000064A, 0x00000642, 0x00000649, 0x00000642, + 0x0000064A, 0x00000643, 0x00000627, 0x00000643, + 0x00000644, 0x00000643, 0x00000645, 0x00000643, + 0x00000649, 0x00000643, 0x0000064A, 0x00000644, + 0x00000645, 0x00000644, 0x00000649, 0x00000644, + 0x0000064A, 0x00000645, 0x00000627, 0x00000645, + 0x00000645, 0x00000646, 0x00000631, 0x00000646, + 0x00000632, 0x00000646, 0x00000645, 0x00000646, + 0x00000646, 0x00000646, 0x00000649, 0x00000646, + 0x0000064A, 0x00000649, 0x00000670, 0x0000064A, + 0x00000631, 0x0000064A, 0x00000632, 0x0000064A, + 0x00000645, 0x0000064A, 0x00000646, 0x0000064A, + 0x00000649, 0x0000064A, 0x0000064A, 0x00000626, + 0x0000062C, 0x00000626, 0x0000062D, 0x00000626, + 0x0000062E, 0x00000626, 0x00000645, 0x00000626, + 0x00000647, 0x00000628, 0x0000062C, 0x00000628, + 0x0000062D, 0x00000628, 0x0000062E, 0x00000628, + 0x00000645, 0x00000628, 0x00000647, 0x0000062A, + 0x0000062C, 0x0000062A, 0x0000062D, 0x0000062A, + 0x0000062E, 0x0000062A, 0x00000645, 0x0000062A, + 0x00000647, 0x0000062B, 0x00000645, 0x0000062C, + 0x0000062D, 0x0000062C, 0x00000645, 0x0000062D, + 0x0000062C, 0x0000062D, 0x00000645, 0x0000062E, + 0x0000062C, 0x0000062E, 0x00000645, 0x00000633, + 0x0000062C, 0x00000633, 0x0000062D, 0x00000633, + 0x0000062E, 0x00000633, 0x00000645, 0x00000635, + 0x0000062D, 0x00000635, 0x0000062E, 0x00000635, + 0x00000645, 0x00000636, 0x0000062C, 0x00000636, + 0x0000062D, 0x00000636, 0x0000062E, 0x00000636, + 0x00000645, 0x00000637, 0x0000062D, 0x00000638, + 0x00000645, 0x00000639, 0x0000062C, 0x00000639, + 0x00000645, 0x0000063A, 0x0000062C, 0x0000063A, + 0x00000645, 0x00000641, 0x0000062C, 0x00000641, + 0x0000062D, 0x00000641, 0x0000062E, 0x00000641, + 0x00000645, 0x00000642, 0x0000062D, 0x00000642, + 0x00000645, 0x00000643, 0x0000062C, 0x00000643, + 0x0000062D, 0x00000643, 0x0000062E, 0x00000643, + 0x00000644, 0x00000643, 0x00000645, 0x00000644, + 0x0000062C, 0x00000644, 0x0000062D, 0x00000644, + 0x0000062E, 0x00000644, 0x00000645, 0x00000644, + 0x00000647, 0x00000645, 0x0000062C, 0x00000645, + 0x0000062D, 0x00000645, 0x0000062E, 0x00000645, + 0x00000645, 0x00000646, 0x0000062C, 0x00000646, + 0x0000062D, 0x00000646, 0x0000062E, 0x00000646, + 0x00000645, 0x00000646, 0x00000647, 0x00000647, + 0x0000062C, 0x00000647, 0x00000645, 0x00000647, + 0x00000670, 0x0000064A, 0x0000062C, 0x0000064A, + 0x0000062D, 0x0000064A, 0x0000062E, 0x0000064A, + 0x00000645, 0x0000064A, 0x00000647, 0x00000626, + 0x00000645, 0x00000626, 0x00000647, 0x00000628, + 0x00000645, 0x00000628, 0x00000647, 0x0000062A, + 0x00000645, 0x0000062A, 0x00000647, 0x0000062B, + 0x00000645, 0x0000062B, 0x00000647, 0x00000633, + 0x00000645, 0x00000633, 0x00000647, 0x00000634, + 0x00000645, 0x00000634, 0x00000647, 0x00000643, + 0x00000644, 0x00000643, 0x00000645, 0x00000644, + 0x00000645, 0x00000646, 0x00000645, 0x00000646, + 0x00000647, 0x0000064A, 0x00000645, 0x0000064A, + 0x00000647, 0x00000640, 0x0000064E, 0x00000651, + 0x00000640, 0x0000064F, 0x00000651, 0x00000640, + 0x00000650, 0x00000651, 0x00000637, 0x00000649, + 0x00000637, 0x0000064A, 0x00000639, 0x00000649, + 0x00000639, 0x0000064A, 0x0000063A, 0x00000649, + 0x0000063A, 0x0000064A, 0x00000633, 0x00000649, + 0x00000633, 0x0000064A, 0x00000634, 0x00000649, + 0x00000634, 0x0000064A, 0x0000062D, 0x00000649, + 0x0000062D, 0x0000064A, 0x0000062C, 0x00000649, + 0x0000062C, 0x0000064A, 0x0000062E, 0x00000649, + 0x0000062E, 0x0000064A, 0x00000635, 0x00000649, + 0x00000635, 0x0000064A, 0x00000636, 0x00000649, + 0x00000636, 0x0000064A, 0x00000634, 0x0000062C, + 0x00000634, 0x0000062D, 0x00000634, 0x0000062E, + 0x00000634, 0x00000645, 0x00000634, 0x00000631, + 0x00000633, 0x00000631, 0x00000635, 0x00000631, + 0x00000636, 0x00000631, 0x00000637, 0x00000649, + 0x00000637, 0x0000064A, 0x00000639, 0x00000649, + 0x00000639, 0x0000064A, 0x0000063A, 0x00000649, + 0x0000063A, 0x0000064A, 0x00000633, 0x00000649, + 0x00000633, 0x0000064A, 0x00000634, 0x00000649, + 0x00000634, 0x0000064A, 0x0000062D, 0x00000649, + 0x0000062D, 0x0000064A, 0x0000062C, 0x00000649, + 0x0000062C, 0x0000064A, 0x0000062E, 0x00000649, + 0x0000062E, 0x0000064A, 0x00000635, 0x00000649, + 0x00000635, 0x0000064A, 0x00000636, 0x00000649, + 0x00000636, 0x0000064A, 0x00000634, 0x0000062C, + 0x00000634, 0x0000062D, 0x00000634, 0x0000062E, + 0x00000634, 0x00000645, 0x00000634, 0x00000631, + 0x00000633, 0x00000631, 0x00000635, 0x00000631, + 0x00000636, 0x00000631, 0x00000634, 0x0000062C, + 0x00000634, 0x0000062D, 0x00000634, 0x0000062E, + 0x00000634, 0x00000645, 0x00000633, 0x00000647, + 0x00000634, 0x00000647, 0x00000637, 0x00000645, + 0x00000633, 0x0000062C, 0x00000633, 0x0000062D, + 0x00000633, 0x0000062E, 0x00000634, 0x0000062C, + 0x00000634, 0x0000062D, 0x00000634, 0x0000062E, + 0x00000637, 0x00000645, 0x00000638, 0x00000645, + 0x00000627, 0x0000064B, 0x00000627, 0x0000064B, + 0x0000062A, 0x0000062C, 0x00000645, 0x0000062A, + 0x0000062D, 0x0000062C, 0x0000062A, 0x0000062D, + 0x0000062C, 0x0000062A, 0x0000062D, 0x00000645, + 0x0000062A, 0x0000062E, 0x00000645, 0x0000062A, + 0x00000645, 0x0000062C, 0x0000062A, 0x00000645, + 0x0000062D, 0x0000062A, 0x00000645, 0x0000062E, + 0x0000062C, 0x00000645, 0x0000062D, 0x0000062C, + 0x00000645, 0x0000062D, 0x0000062D, 0x00000645, + 0x0000064A, 0x0000062D, 0x00000645, 0x00000649, + 0x00000633, 0x0000062D, 0x0000062C, 0x00000633, + 0x0000062C, 0x0000062D, 0x00000633, 0x0000062C, + 0x00000649, 0x00000633, 0x00000645, 0x0000062D, + 0x00000633, 0x00000645, 0x0000062D, 0x00000633, + 0x00000645, 0x0000062C, 0x00000633, 0x00000645, + 0x00000645, 0x00000633, 0x00000645, 0x00000645, + 0x00000635, 0x0000062D, 0x0000062D, 0x00000635, + 0x0000062D, 0x0000062D, 0x00000635, 0x00000645, + 0x00000645, 0x00000634, 0x0000062D, 0x00000645, + 0x00000634, 0x0000062D, 0x00000645, 0x00000634, + 0x0000062C, 0x0000064A, 0x00000634, 0x00000645, + 0x0000062E, 0x00000634, 0x00000645, 0x0000062E, + 0x00000634, 0x00000645, 0x00000645, 0x00000634, + 0x00000645, 0x00000645, 0x00000636, 0x0000062D, + 0x00000649, 0x00000636, 0x0000062E, 0x00000645, + 0x00000636, 0x0000062E, 0x00000645, 0x00000637, + 0x00000645, 0x0000062D, 0x00000637, 0x00000645, + 0x0000062D, 0x00000637, 0x00000645, 0x00000645, + 0x00000637, 0x00000645, 0x0000064A, 0x00000639, + 0x0000062C, 0x00000645, 0x00000639, 0x00000645, + 0x00000645, 0x00000639, 0x00000645, 0x00000645, + 0x00000639, 0x00000645, 0x00000649, 0x0000063A, + 0x00000645, 0x00000645, 0x0000063A, 0x00000645, + 0x0000064A, 0x0000063A, 0x00000645, 0x00000649, + 0x00000641, 0x0000062E, 0x00000645, 0x00000641, + 0x0000062E, 0x00000645, 0x00000642, 0x00000645, + 0x0000062D, 0x00000642, 0x00000645, 0x00000645, + 0x00000644, 0x0000062D, 0x00000645, 0x00000644, + 0x0000062D, 0x0000064A, 0x00000644, 0x0000062D, + 0x00000649, 0x00000644, 0x0000062C, 0x0000062C, + 0x00000644, 0x0000062C, 0x0000062C, 0x00000644, + 0x0000062E, 0x00000645, 0x00000644, 0x0000062E, + 0x00000645, 0x00000644, 0x00000645, 0x0000062D, + 0x00000644, 0x00000645, 0x0000062D, 0x00000645, + 0x0000062D, 0x0000062C, 0x00000645, 0x0000062D, + 0x00000645, 0x00000645, 0x0000062D, 0x0000064A, + 0x00000645, 0x0000062C, 0x0000062D, 0x00000645, + 0x0000062C, 0x00000645, 0x00000645, 0x0000062E, + 0x0000062C, 0x00000645, 0x0000062E, 0x00000645, + 0x00000645, 0x0000062C, 0x0000062E, 0x00000647, + 0x00000645, 0x0000062C, 0x00000647, 0x00000645, + 0x00000645, 0x00000646, 0x0000062D, 0x00000645, + 0x00000646, 0x0000062D, 0x00000649, 0x00000646, + 0x0000062C, 0x00000645, 0x00000646, 0x0000062C, + 0x00000645, 0x00000646, 0x0000062C, 0x00000649, + 0x00000646, 0x00000645, 0x0000064A, 0x00000646, + 0x00000645, 0x00000649, 0x0000064A, 0x00000645, + 0x00000645, 0x0000064A, 0x00000645, 0x00000645, + 0x00000628, 0x0000062E, 0x0000064A, 0x0000062A, + 0x0000062C, 0x0000064A, 0x0000062A, 0x0000062C, + 0x00000649, 0x0000062A, 0x0000062E, 0x0000064A, + 0x0000062A, 0x0000062E, 0x00000649, 0x0000062A, + 0x00000645, 0x0000064A, 0x0000062A, 0x00000645, + 0x00000649, 0x0000062C, 0x00000645, 0x0000064A, + 0x0000062C, 0x0000062D, 0x00000649, 0x0000062C, + 0x00000645, 0x00000649, 0x00000633, 0x0000062E, + 0x00000649, 0x00000635, 0x0000062D, 0x0000064A, + 0x00000634, 0x0000062D, 0x0000064A, 0x00000636, + 0x0000062D, 0x0000064A, 0x00000644, 0x0000062C, + 0x0000064A, 0x00000644, 0x00000645, 0x0000064A, + 0x0000064A, 0x0000062D, 0x0000064A, 0x0000064A, + 0x0000062C, 0x0000064A, 0x0000064A, 0x00000645, + 0x0000064A, 0x00000645, 0x00000645, 0x0000064A, + 0x00000642, 0x00000645, 0x0000064A, 0x00000646, + 0x0000062D, 0x0000064A, 0x00000642, 0x00000645, + 0x0000062D, 0x00000644, 0x0000062D, 0x00000645, + 0x00000639, 0x00000645, 0x0000064A, 0x00000643, + 0x00000645, 0x0000064A, 0x00000646, 0x0000062C, + 0x0000062D, 0x00000645, 0x0000062E, 0x0000064A, + 0x00000644, 0x0000062C, 0x00000645, 0x00000643, + 0x00000645, 0x00000645, 0x00000644, 0x0000062C, + 0x00000645, 0x00000646, 0x0000062C, 0x0000062D, + 0x0000062C, 0x0000062D, 0x0000064A, 0x0000062D, + 0x0000062C, 0x0000064A, 0x00000645, 0x0000062C, + 0x0000064A, 0x00000641, 0x00000645, 0x0000064A, + 0x00000628, 0x0000062D, 0x0000064A, 0x00000643, + 0x00000645, 0x00000645, 0x00000639, 0x0000062C, + 0x00000645, 0x00000635, 0x00000645, 0x00000645, + 0x00000633, 0x0000062E, 0x0000064A, 0x00000646, + 0x0000062C, 0x0000064A, 0x00000635, 0x00000644, + 0x000006D2, 0x00000642, 0x00000644, 0x000006D2, + 0x00000627, 0x00000644, 0x00000644, 0x00000647, + 0x00000627, 0x00000643, 0x00000628, 0x00000631, + 0x00000645, 0x0000062D, 0x00000645, 0x0000062F, + 0x00000635, 0x00000644, 0x00000639, 0x00000645, + 0x00000631, 0x00000633, 0x00000648, 0x00000644, + 0x00000639, 0x00000644, 0x0000064A, 0x00000647, + 0x00000648, 0x00000633, 0x00000644, 0x00000645, + 0x00000635, 0x00000644, 0x00000649, 0x00000635, + 0x00000644, 0x00000649, 0x00000020, 0x00000627, + 0x00000644, 0x00000644, 0x00000647, 0x00000020, + 0x00000639, 0x00000644, 0x0000064A, 0x00000647, + 0x00000020, 0x00000648, 0x00000633, 0x00000644, + 0x00000645, 0x0000062C, 0x00000644, 0x00000020, + 0x0000062C, 0x00000644, 0x00000627, 0x00000644, + 0x00000647, 0x00000631, 0x000006CC, 0x00000627, + 0x00000644, 0x00000020, 0x0000064B, 0x00000640, + 0x0000064B, 0x00000020, 0x0000064C, 0x00000020, + 0x0000064D, 0x00000020, 0x0000064E, 0x00000640, + 0x0000064E, 0x00000020, 0x0000064F, 0x00000640, + 0x0000064F, 0x00000020, 0x00000650, 0x00000640, + 0x00000650, 0x00000020, 0x00000651, 0x00000640, + 0x00000651, 0x00000020, 0x00000652, 0x00000640, + 0x00000652, 0x00000644, 0x00000622, 0x00000644, + 0x00000622, 0x00000644, 0x00000623, 0x00000644, + 0x00000623, 0x00000644, 0x00000625, 0x00000644, + 0x00000625, 0x00000644, 0x00000627, 0x00000644, + 0x00000627, 0x00000030, 0x0000002E, 0x00000030, + 0x0000002C, 0x00000031, 0x0000002C, 0x00000032, + 0x0000002C, 0x00000033, 0x0000002C, 0x00000034, + 0x0000002C, 0x00000035, 0x0000002C, 0x00000036, + 0x0000002C, 0x00000037, 0x0000002C, 0x00000038, + 0x0000002C, 0x00000039, 0x0000002C, 0x00000028, + 0x00000041, 0x00000029, 0x00000028, 0x00000042, + 0x00000029, 0x00000028, 0x00000043, 0x00000029, + 0x00000028, 0x00000044, 0x00000029, 0x00000028, + 0x00000045, 0x00000029, 0x00000028, 0x00000046, + 0x00000029, 0x00000028, 0x00000047, 0x00000029, + 0x00000028, 0x00000048, 0x00000029, 0x00000028, + 0x00000049, 0x00000029, 0x00000028, 0x0000004A, + 0x00000029, 0x00000028, 0x0000004B, 0x00000029, + 0x00000028, 0x0000004C, 0x00000029, 0x00000028, + 0x0000004D, 0x00000029, 0x00000028, 0x0000004E, + 0x00000029, 0x00000028, 0x0000004F, 0x00000029, + 0x00000028, 0x00000050, 0x00000029, 0x00000028, + 0x00000051, 0x00000029, 0x00000028, 0x00000052, + 0x00000029, 0x00000028, 0x00000053, 0x00000029, + 0x00000028, 0x00000054, 0x00000029, 0x00000028, + 0x00000055, 0x00000029, 0x00000028, 0x00000056, + 0x00000029, 0x00000028, 0x00000057, 0x00000029, + 0x00000028, 0x00000058, 0x00000029, 0x00000028, + 0x00000059, 0x00000029, 0x00000028, 0x0000005A, + 0x00000029, 0x00003014, 0x00000053, 0x00003015, + 0x00000043, 0x00000044, 0x00000057, 0x0000005A, + 0x00000048, 0x00000056, 0x0000004D, 0x00000056, + 0x00000053, 0x00000044, 0x00000053, 0x00000053, + 0x00000050, 0x00000050, 0x00000056, 0x00000057, + 0x00000043, 0x0000004D, 0x00000043, 0x0000004D, + 0x00000044, 0x0000004D, 0x00000052, 0x00000044, + 0x0000004A, 0x0000307B, 0x0000304B, 0x000030B3, + 0x000030B3, 0x00003014, 0x0000672C, 0x00003015, + 0x00003014, 0x00004E09, 0x00003015, 0x00003014, + 0x00004E8C, 0x00003015, 0x00003014, 0x00005B89, + 0x00003015, 0x00003014, 0x000070B9, 0x00003015, + 0x00003014, 0x00006253, 0x00003015, 0x00003014, + 0x000076D7, 0x00003015, 0x00003014, 0x000052DD, + 0x00003015, 0x00003014, 0x00006557, 0x00003015, +}; + +static uint32_t const __CFUniCharCompatibilityDecompositionTableLength = 3796; + diff --git a/Sources/CoreFoundation/internalInclude/CFUniCharDecompositionData.inc.h b/Sources/CoreFoundation/internalInclude/CFUniCharDecompositionData.inc.h new file mode 100644 index 0000000000..4d8bd33229 --- /dev/null +++ b/Sources/CoreFoundation/internalInclude/CFUniCharDecompositionData.inc.h @@ -0,0 +1,1557 @@ +/* + CFUniCharDecompositionData.inc.h + Copyright (c) 1999-2021, Apple Inc. and the Swift project authors. All rights reserved. + This file is generated. Don't touch this file directly. +*/ +static UTF32Char const __CFUniCharDecompositionTable[] = { + 0x000000C0, 0x02000000, 0x000000C1, 0x02000002, + 0x000000C2, 0x02000004, 0x000000C3, 0x02000006, + 0x000000C4, 0x02000008, 0x000000C5, 0x0200000A, + 0x000000C7, 0x0200000C, 0x000000C8, 0x0200000E, + 0x000000C9, 0x02000010, 0x000000CA, 0x02000012, + 0x000000CB, 0x02000014, 0x000000CC, 0x02000016, + 0x000000CD, 0x02000018, 0x000000CE, 0x0200001A, + 0x000000CF, 0x0200001C, 0x000000D1, 0x0200001E, + 0x000000D2, 0x02000020, 0x000000D3, 0x02000022, + 0x000000D4, 0x02000024, 0x000000D5, 0x02000026, + 0x000000D6, 0x02000028, 0x000000D9, 0x0200002A, + 0x000000DA, 0x0200002C, 0x000000DB, 0x0200002E, + 0x000000DC, 0x02000030, 0x000000DD, 0x02000032, + 0x000000E0, 0x02000034, 0x000000E1, 0x02000036, + 0x000000E2, 0x02000038, 0x000000E3, 0x0200003A, + 0x000000E4, 0x0200003C, 0x000000E5, 0x0200003E, + 0x000000E7, 0x02000040, 0x000000E8, 0x02000042, + 0x000000E9, 0x02000044, 0x000000EA, 0x02000046, + 0x000000EB, 0x02000048, 0x000000EC, 0x0200004A, + 0x000000ED, 0x0200004C, 0x000000EE, 0x0200004E, + 0x000000EF, 0x02000050, 0x000000F1, 0x02000052, + 0x000000F2, 0x02000054, 0x000000F3, 0x02000056, + 0x000000F4, 0x02000058, 0x000000F5, 0x0200005A, + 0x000000F6, 0x0200005C, 0x000000F9, 0x0200005E, + 0x000000FA, 0x02000060, 0x000000FB, 0x02000062, + 0x000000FC, 0x02000064, 0x000000FD, 0x02000066, + 0x000000FF, 0x02000068, 0x00000100, 0x0200006A, + 0x00000101, 0x0200006C, 0x00000102, 0x0200006E, + 0x00000103, 0x02000070, 0x00000104, 0x02000072, + 0x00000105, 0x02000074, 0x00000106, 0x02000076, + 0x00000107, 0x02000078, 0x00000108, 0x0200007A, + 0x00000109, 0x0200007C, 0x0000010A, 0x0200007E, + 0x0000010B, 0x02000080, 0x0000010C, 0x02000082, + 0x0000010D, 0x02000084, 0x0000010E, 0x02000086, + 0x0000010F, 0x02000088, 0x00000112, 0x0200008A, + 0x00000113, 0x0200008C, 0x00000114, 0x0200008E, + 0x00000115, 0x02000090, 0x00000116, 0x02000092, + 0x00000117, 0x02000094, 0x00000118, 0x02000096, + 0x00000119, 0x02000098, 0x0000011A, 0x0200009A, + 0x0000011B, 0x0200009C, 0x0000011C, 0x0200009E, + 0x0000011D, 0x020000A0, 0x0000011E, 0x020000A2, + 0x0000011F, 0x020000A4, 0x00000120, 0x020000A6, + 0x00000121, 0x020000A8, 0x00000122, 0x020000AA, + 0x00000123, 0x020000AC, 0x00000124, 0x020000AE, + 0x00000125, 0x020000B0, 0x00000128, 0x020000B2, + 0x00000129, 0x020000B4, 0x0000012A, 0x020000B6, + 0x0000012B, 0x020000B8, 0x0000012C, 0x020000BA, + 0x0000012D, 0x020000BC, 0x0000012E, 0x020000BE, + 0x0000012F, 0x020000C0, 0x00000130, 0x020000C2, + 0x00000134, 0x020000C4, 0x00000135, 0x020000C6, + 0x00000136, 0x020000C8, 0x00000137, 0x020000CA, + 0x00000139, 0x020000CC, 0x0000013A, 0x020000CE, + 0x0000013B, 0x020000D0, 0x0000013C, 0x020000D2, + 0x0000013D, 0x020000D4, 0x0000013E, 0x020000D6, + 0x00000143, 0x020000D8, 0x00000144, 0x020000DA, + 0x00000145, 0x020000DC, 0x00000146, 0x020000DE, + 0x00000147, 0x020000E0, 0x00000148, 0x020000E2, + 0x0000014C, 0x020000E4, 0x0000014D, 0x020000E6, + 0x0000014E, 0x020000E8, 0x0000014F, 0x020000EA, + 0x00000150, 0x020000EC, 0x00000151, 0x020000EE, + 0x00000154, 0x020000F0, 0x00000155, 0x020000F2, + 0x00000156, 0x020000F4, 0x00000157, 0x020000F6, + 0x00000158, 0x020000F8, 0x00000159, 0x020000FA, + 0x0000015A, 0x020000FC, 0x0000015B, 0x020000FE, + 0x0000015C, 0x02000100, 0x0000015D, 0x02000102, + 0x0000015E, 0x02000104, 0x0000015F, 0x02000106, + 0x00000160, 0x02000108, 0x00000161, 0x0200010A, + 0x00000162, 0x0200010C, 0x00000163, 0x0200010E, + 0x00000164, 0x02000110, 0x00000165, 0x02000112, + 0x00000168, 0x02000114, 0x00000169, 0x02000116, + 0x0000016A, 0x02000118, 0x0000016B, 0x0200011A, + 0x0000016C, 0x0200011C, 0x0000016D, 0x0200011E, + 0x0000016E, 0x02000120, 0x0000016F, 0x02000122, + 0x00000170, 0x02000124, 0x00000171, 0x02000126, + 0x00000172, 0x02000128, 0x00000173, 0x0200012A, + 0x00000174, 0x0200012C, 0x00000175, 0x0200012E, + 0x00000176, 0x02000130, 0x00000177, 0x02000132, + 0x00000178, 0x02000134, 0x00000179, 0x02000136, + 0x0000017A, 0x02000138, 0x0000017B, 0x0200013A, + 0x0000017C, 0x0200013C, 0x0000017D, 0x0200013E, + 0x0000017E, 0x02000140, 0x000001A0, 0x02000142, + 0x000001A1, 0x02000144, 0x000001AF, 0x02000146, + 0x000001B0, 0x02000148, 0x000001CD, 0x0200014A, + 0x000001CE, 0x0200014C, 0x000001CF, 0x0200014E, + 0x000001D0, 0x02000150, 0x000001D1, 0x02000152, + 0x000001D2, 0x02000154, 0x000001D3, 0x02000156, + 0x000001D4, 0x02000158, 0x000001D5, 0x4200015A, + 0x000001D6, 0x4200015C, 0x000001D7, 0x4200015E, + 0x000001D8, 0x42000160, 0x000001D9, 0x42000162, + 0x000001DA, 0x42000164, 0x000001DB, 0x42000166, + 0x000001DC, 0x42000168, 0x000001DE, 0x4200016A, + 0x000001DF, 0x4200016C, 0x000001E0, 0x4200016E, + 0x000001E1, 0x42000170, 0x000001E2, 0x02000172, + 0x000001E3, 0x02000174, 0x000001E6, 0x02000176, + 0x000001E7, 0x02000178, 0x000001E8, 0x0200017A, + 0x000001E9, 0x0200017C, 0x000001EA, 0x0200017E, + 0x000001EB, 0x02000180, 0x000001EC, 0x42000182, + 0x000001ED, 0x42000184, 0x000001EE, 0x02000186, + 0x000001EF, 0x02000188, 0x000001F0, 0x0200018A, + 0x000001F4, 0x0200018C, 0x000001F5, 0x0200018E, + 0x000001F8, 0x02000190, 0x000001F9, 0x02000192, + 0x000001FA, 0x42000194, 0x000001FB, 0x42000196, + 0x000001FC, 0x02000198, 0x000001FD, 0x0200019A, + 0x000001FE, 0x0200019C, 0x000001FF, 0x0200019E, + 0x00000200, 0x020001A0, 0x00000201, 0x020001A2, + 0x00000202, 0x020001A4, 0x00000203, 0x020001A6, + 0x00000204, 0x020001A8, 0x00000205, 0x020001AA, + 0x00000206, 0x020001AC, 0x00000207, 0x020001AE, + 0x00000208, 0x020001B0, 0x00000209, 0x020001B2, + 0x0000020A, 0x020001B4, 0x0000020B, 0x020001B6, + 0x0000020C, 0x020001B8, 0x0000020D, 0x020001BA, + 0x0000020E, 0x020001BC, 0x0000020F, 0x020001BE, + 0x00000210, 0x020001C0, 0x00000211, 0x020001C2, + 0x00000212, 0x020001C4, 0x00000213, 0x020001C6, + 0x00000214, 0x020001C8, 0x00000215, 0x020001CA, + 0x00000216, 0x020001CC, 0x00000217, 0x020001CE, + 0x00000218, 0x020001D0, 0x00000219, 0x020001D2, + 0x0000021A, 0x020001D4, 0x0000021B, 0x020001D6, + 0x0000021E, 0x020001D8, 0x0000021F, 0x020001DA, + 0x00000226, 0x020001DC, 0x00000227, 0x020001DE, + 0x00000228, 0x020001E0, 0x00000229, 0x020001E2, + 0x0000022A, 0x420001E4, 0x0000022B, 0x420001E6, + 0x0000022C, 0x420001E8, 0x0000022D, 0x420001EA, + 0x0000022E, 0x020001EC, 0x0000022F, 0x020001EE, + 0x00000230, 0x420001F0, 0x00000231, 0x420001F2, + 0x00000232, 0x020001F4, 0x00000233, 0x020001F6, + 0x00000340, 0x01000300, 0x00000341, 0x01000301, + 0x00000343, 0x01000313, 0x00000344, 0x020001F8, + 0x00000374, 0x010002B9, 0x0000037E, 0x0100003B, + 0x00000385, 0x020001FA, 0x00000386, 0x020001FC, + 0x00000387, 0x010000B7, 0x00000388, 0x020001FE, + 0x00000389, 0x02000200, 0x0000038A, 0x02000202, + 0x0000038C, 0x02000204, 0x0000038E, 0x02000206, + 0x0000038F, 0x02000208, 0x00000390, 0x4200020A, + 0x000003AA, 0x0200020C, 0x000003AB, 0x0200020E, + 0x000003AC, 0x02000210, 0x000003AD, 0x02000212, + 0x000003AE, 0x02000214, 0x000003AF, 0x02000216, + 0x000003B0, 0x42000218, 0x000003CA, 0x0200021A, + 0x000003CB, 0x0200021C, 0x000003CC, 0x0200021E, + 0x000003CD, 0x02000220, 0x000003CE, 0x02000222, + 0x000003D3, 0x02000224, 0x000003D4, 0x02000226, + 0x00000400, 0x02000228, 0x00000401, 0x0200022A, + 0x00000403, 0x0200022C, 0x00000407, 0x0200022E, + 0x0000040C, 0x02000230, 0x0000040D, 0x02000232, + 0x0000040E, 0x02000234, 0x00000419, 0x02000236, + 0x00000439, 0x02000238, 0x00000450, 0x0200023A, + 0x00000451, 0x0200023C, 0x00000453, 0x0200023E, + 0x00000457, 0x02000240, 0x0000045C, 0x02000242, + 0x0000045D, 0x02000244, 0x0000045E, 0x02000246, + 0x00000476, 0x02000248, 0x00000477, 0x0200024A, + 0x000004C1, 0x0200024C, 0x000004C2, 0x0200024E, + 0x000004D0, 0x02000250, 0x000004D1, 0x02000252, + 0x000004D2, 0x02000254, 0x000004D3, 0x02000256, + 0x000004D6, 0x02000258, 0x000004D7, 0x0200025A, + 0x000004DA, 0x0200025C, 0x000004DB, 0x0200025E, + 0x000004DC, 0x02000260, 0x000004DD, 0x02000262, + 0x000004DE, 0x02000264, 0x000004DF, 0x02000266, + 0x000004E2, 0x02000268, 0x000004E3, 0x0200026A, + 0x000004E4, 0x0200026C, 0x000004E5, 0x0200026E, + 0x000004E6, 0x02000270, 0x000004E7, 0x02000272, + 0x000004EA, 0x02000274, 0x000004EB, 0x02000276, + 0x000004EC, 0x02000278, 0x000004ED, 0x0200027A, + 0x000004EE, 0x0200027C, 0x000004EF, 0x0200027E, + 0x000004F0, 0x02000280, 0x000004F1, 0x02000282, + 0x000004F2, 0x02000284, 0x000004F3, 0x02000286, + 0x000004F4, 0x02000288, 0x000004F5, 0x0200028A, + 0x000004F8, 0x0200028C, 0x000004F9, 0x0200028E, + 0x00000622, 0x02000290, 0x00000623, 0x02000292, + 0x00000624, 0x02000294, 0x00000625, 0x02000296, + 0x00000626, 0x02000298, 0x000006C0, 0x0200029A, + 0x000006C2, 0x0200029C, 0x000006D3, 0x0200029E, + 0x00000929, 0x020002A0, 0x00000931, 0x020002A2, + 0x00000934, 0x020002A4, 0x00000958, 0x020002A6, + 0x00000959, 0x020002A8, 0x0000095A, 0x020002AA, + 0x0000095B, 0x020002AC, 0x0000095C, 0x020002AE, + 0x0000095D, 0x020002B0, 0x0000095E, 0x020002B2, + 0x0000095F, 0x020002B4, 0x000009CB, 0x020002B6, + 0x000009CC, 0x020002B8, 0x000009DC, 0x020002BA, + 0x000009DD, 0x020002BC, 0x000009DF, 0x020002BE, + 0x00000A33, 0x020002C0, 0x00000A36, 0x020002C2, + 0x00000A59, 0x020002C4, 0x00000A5A, 0x020002C6, + 0x00000A5B, 0x020002C8, 0x00000A5E, 0x020002CA, + 0x00000B48, 0x020002CC, 0x00000B4B, 0x020002CE, + 0x00000B4C, 0x020002D0, 0x00000B5C, 0x020002D2, + 0x00000B5D, 0x020002D4, 0x00000B94, 0x020002D6, + 0x00000BCA, 0x020002D8, 0x00000BCB, 0x020002DA, + 0x00000BCC, 0x020002DC, 0x00000C48, 0x020002DE, + 0x00000CC0, 0x020002E0, 0x00000CC7, 0x020002E2, + 0x00000CC8, 0x020002E4, 0x00000CCA, 0x020002E6, + 0x00000CCB, 0x420002E8, 0x00000D4A, 0x020002EA, + 0x00000D4B, 0x020002EC, 0x00000D4C, 0x020002EE, + 0x00000DDA, 0x020002F0, 0x00000DDC, 0x020002F2, + 0x00000DDD, 0x420002F4, 0x00000DDE, 0x020002F6, + 0x00000F43, 0x020002F8, 0x00000F4D, 0x020002FA, + 0x00000F52, 0x020002FC, 0x00000F57, 0x020002FE, + 0x00000F5C, 0x02000300, 0x00000F69, 0x02000302, + 0x00000F73, 0x02000304, 0x00000F75, 0x02000306, + 0x00000F76, 0x02000308, 0x00000F78, 0x0200030A, + 0x00000F81, 0x0200030C, 0x00000F93, 0x0200030E, + 0x00000F9D, 0x02000310, 0x00000FA2, 0x02000312, + 0x00000FA7, 0x02000314, 0x00000FAC, 0x02000316, + 0x00000FB9, 0x02000318, 0x00001026, 0x0200031A, + 0x00001B06, 0x0200031C, 0x00001B08, 0x0200031E, + 0x00001B0A, 0x02000320, 0x00001B0C, 0x02000322, + 0x00001B0E, 0x02000324, 0x00001B12, 0x02000326, + 0x00001B3B, 0x02000328, 0x00001B3D, 0x0200032A, + 0x00001B40, 0x0200032C, 0x00001B41, 0x0200032E, + 0x00001B43, 0x02000330, 0x00001E00, 0x02000332, + 0x00001E01, 0x02000334, 0x00001E02, 0x02000336, + 0x00001E03, 0x02000338, 0x00001E04, 0x0200033A, + 0x00001E05, 0x0200033C, 0x00001E06, 0x0200033E, + 0x00001E07, 0x02000340, 0x00001E08, 0x42000342, + 0x00001E09, 0x42000344, 0x00001E0A, 0x02000346, + 0x00001E0B, 0x02000348, 0x00001E0C, 0x0200034A, + 0x00001E0D, 0x0200034C, 0x00001E0E, 0x0200034E, + 0x00001E0F, 0x02000350, 0x00001E10, 0x02000352, + 0x00001E11, 0x02000354, 0x00001E12, 0x02000356, + 0x00001E13, 0x02000358, 0x00001E14, 0x4200035A, + 0x00001E15, 0x4200035C, 0x00001E16, 0x4200035E, + 0x00001E17, 0x42000360, 0x00001E18, 0x02000362, + 0x00001E19, 0x02000364, 0x00001E1A, 0x02000366, + 0x00001E1B, 0x02000368, 0x00001E1C, 0x4200036A, + 0x00001E1D, 0x4200036C, 0x00001E1E, 0x0200036E, + 0x00001E1F, 0x02000370, 0x00001E20, 0x02000372, + 0x00001E21, 0x02000374, 0x00001E22, 0x02000376, + 0x00001E23, 0x02000378, 0x00001E24, 0x0200037A, + 0x00001E25, 0x0200037C, 0x00001E26, 0x0200037E, + 0x00001E27, 0x02000380, 0x00001E28, 0x02000382, + 0x00001E29, 0x02000384, 0x00001E2A, 0x02000386, + 0x00001E2B, 0x02000388, 0x00001E2C, 0x0200038A, + 0x00001E2D, 0x0200038C, 0x00001E2E, 0x4200038E, + 0x00001E2F, 0x42000390, 0x00001E30, 0x02000392, + 0x00001E31, 0x02000394, 0x00001E32, 0x02000396, + 0x00001E33, 0x02000398, 0x00001E34, 0x0200039A, + 0x00001E35, 0x0200039C, 0x00001E36, 0x0200039E, + 0x00001E37, 0x020003A0, 0x00001E38, 0x420003A2, + 0x00001E39, 0x420003A4, 0x00001E3A, 0x020003A6, + 0x00001E3B, 0x020003A8, 0x00001E3C, 0x020003AA, + 0x00001E3D, 0x020003AC, 0x00001E3E, 0x020003AE, + 0x00001E3F, 0x020003B0, 0x00001E40, 0x020003B2, + 0x00001E41, 0x020003B4, 0x00001E42, 0x020003B6, + 0x00001E43, 0x020003B8, 0x00001E44, 0x020003BA, + 0x00001E45, 0x020003BC, 0x00001E46, 0x020003BE, + 0x00001E47, 0x020003C0, 0x00001E48, 0x020003C2, + 0x00001E49, 0x020003C4, 0x00001E4A, 0x020003C6, + 0x00001E4B, 0x020003C8, 0x00001E4C, 0x420003CA, + 0x00001E4D, 0x420003CC, 0x00001E4E, 0x420003CE, + 0x00001E4F, 0x420003D0, 0x00001E50, 0x420003D2, + 0x00001E51, 0x420003D4, 0x00001E52, 0x420003D6, + 0x00001E53, 0x420003D8, 0x00001E54, 0x020003DA, + 0x00001E55, 0x020003DC, 0x00001E56, 0x020003DE, + 0x00001E57, 0x020003E0, 0x00001E58, 0x020003E2, + 0x00001E59, 0x020003E4, 0x00001E5A, 0x020003E6, + 0x00001E5B, 0x020003E8, 0x00001E5C, 0x420003EA, + 0x00001E5D, 0x420003EC, 0x00001E5E, 0x020003EE, + 0x00001E5F, 0x020003F0, 0x00001E60, 0x020003F2, + 0x00001E61, 0x020003F4, 0x00001E62, 0x020003F6, + 0x00001E63, 0x020003F8, 0x00001E64, 0x420003FA, + 0x00001E65, 0x420003FC, 0x00001E66, 0x420003FE, + 0x00001E67, 0x42000400, 0x00001E68, 0x42000402, + 0x00001E69, 0x42000404, 0x00001E6A, 0x02000406, + 0x00001E6B, 0x02000408, 0x00001E6C, 0x0200040A, + 0x00001E6D, 0x0200040C, 0x00001E6E, 0x0200040E, + 0x00001E6F, 0x02000410, 0x00001E70, 0x02000412, + 0x00001E71, 0x02000414, 0x00001E72, 0x02000416, + 0x00001E73, 0x02000418, 0x00001E74, 0x0200041A, + 0x00001E75, 0x0200041C, 0x00001E76, 0x0200041E, + 0x00001E77, 0x02000420, 0x00001E78, 0x42000422, + 0x00001E79, 0x42000424, 0x00001E7A, 0x42000426, + 0x00001E7B, 0x42000428, 0x00001E7C, 0x0200042A, + 0x00001E7D, 0x0200042C, 0x00001E7E, 0x0200042E, + 0x00001E7F, 0x02000430, 0x00001E80, 0x02000432, + 0x00001E81, 0x02000434, 0x00001E82, 0x02000436, + 0x00001E83, 0x02000438, 0x00001E84, 0x0200043A, + 0x00001E85, 0x0200043C, 0x00001E86, 0x0200043E, + 0x00001E87, 0x02000440, 0x00001E88, 0x02000442, + 0x00001E89, 0x02000444, 0x00001E8A, 0x02000446, + 0x00001E8B, 0x02000448, 0x00001E8C, 0x0200044A, + 0x00001E8D, 0x0200044C, 0x00001E8E, 0x0200044E, + 0x00001E8F, 0x02000450, 0x00001E90, 0x02000452, + 0x00001E91, 0x02000454, 0x00001E92, 0x02000456, + 0x00001E93, 0x02000458, 0x00001E94, 0x0200045A, + 0x00001E95, 0x0200045C, 0x00001E96, 0x0200045E, + 0x00001E97, 0x02000460, 0x00001E98, 0x02000462, + 0x00001E99, 0x02000464, 0x00001E9B, 0x02000466, + 0x00001EA0, 0x02000468, 0x00001EA1, 0x0200046A, + 0x00001EA2, 0x0200046C, 0x00001EA3, 0x0200046E, + 0x00001EA4, 0x42000470, 0x00001EA5, 0x42000472, + 0x00001EA6, 0x42000474, 0x00001EA7, 0x42000476, + 0x00001EA8, 0x42000478, 0x00001EA9, 0x4200047A, + 0x00001EAA, 0x4200047C, 0x00001EAB, 0x4200047E, + 0x00001EAC, 0x42000480, 0x00001EAD, 0x42000482, + 0x00001EAE, 0x42000484, 0x00001EAF, 0x42000486, + 0x00001EB0, 0x42000488, 0x00001EB1, 0x4200048A, + 0x00001EB2, 0x4200048C, 0x00001EB3, 0x4200048E, + 0x00001EB4, 0x42000490, 0x00001EB5, 0x42000492, + 0x00001EB6, 0x42000494, 0x00001EB7, 0x42000496, + 0x00001EB8, 0x02000498, 0x00001EB9, 0x0200049A, + 0x00001EBA, 0x0200049C, 0x00001EBB, 0x0200049E, + 0x00001EBC, 0x020004A0, 0x00001EBD, 0x020004A2, + 0x00001EBE, 0x420004A4, 0x00001EBF, 0x420004A6, + 0x00001EC0, 0x420004A8, 0x00001EC1, 0x420004AA, + 0x00001EC2, 0x420004AC, 0x00001EC3, 0x420004AE, + 0x00001EC4, 0x420004B0, 0x00001EC5, 0x420004B2, + 0x00001EC6, 0x420004B4, 0x00001EC7, 0x420004B6, + 0x00001EC8, 0x020004B8, 0x00001EC9, 0x020004BA, + 0x00001ECA, 0x020004BC, 0x00001ECB, 0x020004BE, + 0x00001ECC, 0x020004C0, 0x00001ECD, 0x020004C2, + 0x00001ECE, 0x020004C4, 0x00001ECF, 0x020004C6, + 0x00001ED0, 0x420004C8, 0x00001ED1, 0x420004CA, + 0x00001ED2, 0x420004CC, 0x00001ED3, 0x420004CE, + 0x00001ED4, 0x420004D0, 0x00001ED5, 0x420004D2, + 0x00001ED6, 0x420004D4, 0x00001ED7, 0x420004D6, + 0x00001ED8, 0x420004D8, 0x00001ED9, 0x420004DA, + 0x00001EDA, 0x420004DC, 0x00001EDB, 0x420004DE, + 0x00001EDC, 0x420004E0, 0x00001EDD, 0x420004E2, + 0x00001EDE, 0x420004E4, 0x00001EDF, 0x420004E6, + 0x00001EE0, 0x420004E8, 0x00001EE1, 0x420004EA, + 0x00001EE2, 0x420004EC, 0x00001EE3, 0x420004EE, + 0x00001EE4, 0x020004F0, 0x00001EE5, 0x020004F2, + 0x00001EE6, 0x020004F4, 0x00001EE7, 0x020004F6, + 0x00001EE8, 0x420004F8, 0x00001EE9, 0x420004FA, + 0x00001EEA, 0x420004FC, 0x00001EEB, 0x420004FE, + 0x00001EEC, 0x42000500, 0x00001EED, 0x42000502, + 0x00001EEE, 0x42000504, 0x00001EEF, 0x42000506, + 0x00001EF0, 0x42000508, 0x00001EF1, 0x4200050A, + 0x00001EF2, 0x0200050C, 0x00001EF3, 0x0200050E, + 0x00001EF4, 0x02000510, 0x00001EF5, 0x02000512, + 0x00001EF6, 0x02000514, 0x00001EF7, 0x02000516, + 0x00001EF8, 0x02000518, 0x00001EF9, 0x0200051A, + 0x00001F00, 0x0200051C, 0x00001F01, 0x0200051E, + 0x00001F02, 0x42000520, 0x00001F03, 0x42000522, + 0x00001F04, 0x42000524, 0x00001F05, 0x42000526, + 0x00001F06, 0x42000528, 0x00001F07, 0x4200052A, + 0x00001F08, 0x0200052C, 0x00001F09, 0x0200052E, + 0x00001F0A, 0x42000530, 0x00001F0B, 0x42000532, + 0x00001F0C, 0x42000534, 0x00001F0D, 0x42000536, + 0x00001F0E, 0x42000538, 0x00001F0F, 0x4200053A, + 0x00001F10, 0x0200053C, 0x00001F11, 0x0200053E, + 0x00001F12, 0x42000540, 0x00001F13, 0x42000542, + 0x00001F14, 0x42000544, 0x00001F15, 0x42000546, + 0x00001F18, 0x02000548, 0x00001F19, 0x0200054A, + 0x00001F1A, 0x4200054C, 0x00001F1B, 0x4200054E, + 0x00001F1C, 0x42000550, 0x00001F1D, 0x42000552, + 0x00001F20, 0x02000554, 0x00001F21, 0x02000556, + 0x00001F22, 0x42000558, 0x00001F23, 0x4200055A, + 0x00001F24, 0x4200055C, 0x00001F25, 0x4200055E, + 0x00001F26, 0x42000560, 0x00001F27, 0x42000562, + 0x00001F28, 0x02000564, 0x00001F29, 0x02000566, + 0x00001F2A, 0x42000568, 0x00001F2B, 0x4200056A, + 0x00001F2C, 0x4200056C, 0x00001F2D, 0x4200056E, + 0x00001F2E, 0x42000570, 0x00001F2F, 0x42000572, + 0x00001F30, 0x02000574, 0x00001F31, 0x02000576, + 0x00001F32, 0x42000578, 0x00001F33, 0x4200057A, + 0x00001F34, 0x4200057C, 0x00001F35, 0x4200057E, + 0x00001F36, 0x42000580, 0x00001F37, 0x42000582, + 0x00001F38, 0x02000584, 0x00001F39, 0x02000586, + 0x00001F3A, 0x42000588, 0x00001F3B, 0x4200058A, + 0x00001F3C, 0x4200058C, 0x00001F3D, 0x4200058E, + 0x00001F3E, 0x42000590, 0x00001F3F, 0x42000592, + 0x00001F40, 0x02000594, 0x00001F41, 0x02000596, + 0x00001F42, 0x42000598, 0x00001F43, 0x4200059A, + 0x00001F44, 0x4200059C, 0x00001F45, 0x4200059E, + 0x00001F48, 0x020005A0, 0x00001F49, 0x020005A2, + 0x00001F4A, 0x420005A4, 0x00001F4B, 0x420005A6, + 0x00001F4C, 0x420005A8, 0x00001F4D, 0x420005AA, + 0x00001F50, 0x020005AC, 0x00001F51, 0x020005AE, + 0x00001F52, 0x420005B0, 0x00001F53, 0x420005B2, + 0x00001F54, 0x420005B4, 0x00001F55, 0x420005B6, + 0x00001F56, 0x420005B8, 0x00001F57, 0x420005BA, + 0x00001F59, 0x020005BC, 0x00001F5B, 0x420005BE, + 0x00001F5D, 0x420005C0, 0x00001F5F, 0x420005C2, + 0x00001F60, 0x020005C4, 0x00001F61, 0x020005C6, + 0x00001F62, 0x420005C8, 0x00001F63, 0x420005CA, + 0x00001F64, 0x420005CC, 0x00001F65, 0x420005CE, + 0x00001F66, 0x420005D0, 0x00001F67, 0x420005D2, + 0x00001F68, 0x020005D4, 0x00001F69, 0x020005D6, + 0x00001F6A, 0x420005D8, 0x00001F6B, 0x420005DA, + 0x00001F6C, 0x420005DC, 0x00001F6D, 0x420005DE, + 0x00001F6E, 0x420005E0, 0x00001F6F, 0x420005E2, + 0x00001F70, 0x020005E4, 0x00001F71, 0x410003AC, + 0x00001F72, 0x020005E6, 0x00001F73, 0x410003AD, + 0x00001F74, 0x020005E8, 0x00001F75, 0x410003AE, + 0x00001F76, 0x020005EA, 0x00001F77, 0x410003AF, + 0x00001F78, 0x020005EC, 0x00001F79, 0x410003CC, + 0x00001F7A, 0x020005EE, 0x00001F7B, 0x410003CD, + 0x00001F7C, 0x020005F0, 0x00001F7D, 0x410003CE, + 0x00001F80, 0x420005F2, 0x00001F81, 0x420005F4, + 0x00001F82, 0x420005F6, 0x00001F83, 0x420005F8, + 0x00001F84, 0x420005FA, 0x00001F85, 0x420005FC, + 0x00001F86, 0x420005FE, 0x00001F87, 0x42000600, + 0x00001F88, 0x42000602, 0x00001F89, 0x42000604, + 0x00001F8A, 0x42000606, 0x00001F8B, 0x42000608, + 0x00001F8C, 0x4200060A, 0x00001F8D, 0x4200060C, + 0x00001F8E, 0x4200060E, 0x00001F8F, 0x42000610, + 0x00001F90, 0x42000612, 0x00001F91, 0x42000614, + 0x00001F92, 0x42000616, 0x00001F93, 0x42000618, + 0x00001F94, 0x4200061A, 0x00001F95, 0x4200061C, + 0x00001F96, 0x4200061E, 0x00001F97, 0x42000620, + 0x00001F98, 0x42000622, 0x00001F99, 0x42000624, + 0x00001F9A, 0x42000626, 0x00001F9B, 0x42000628, + 0x00001F9C, 0x4200062A, 0x00001F9D, 0x4200062C, + 0x00001F9E, 0x4200062E, 0x00001F9F, 0x42000630, + 0x00001FA0, 0x42000632, 0x00001FA1, 0x42000634, + 0x00001FA2, 0x42000636, 0x00001FA3, 0x42000638, + 0x00001FA4, 0x4200063A, 0x00001FA5, 0x4200063C, + 0x00001FA6, 0x4200063E, 0x00001FA7, 0x42000640, + 0x00001FA8, 0x42000642, 0x00001FA9, 0x42000644, + 0x00001FAA, 0x42000646, 0x00001FAB, 0x42000648, + 0x00001FAC, 0x4200064A, 0x00001FAD, 0x4200064C, + 0x00001FAE, 0x4200064E, 0x00001FAF, 0x42000650, + 0x00001FB0, 0x02000652, 0x00001FB1, 0x02000654, + 0x00001FB2, 0x42000656, 0x00001FB3, 0x02000658, + 0x00001FB4, 0x4200065A, 0x00001FB6, 0x0200065C, + 0x00001FB7, 0x4200065E, 0x00001FB8, 0x02000660, + 0x00001FB9, 0x02000662, 0x00001FBA, 0x02000664, + 0x00001FBB, 0x41000386, 0x00001FBC, 0x02000666, + 0x00001FBE, 0x010003B9, 0x00001FC1, 0x02000668, + 0x00001FC2, 0x4200066A, 0x00001FC3, 0x0200066C, + 0x00001FC4, 0x4200066E, 0x00001FC6, 0x02000670, + 0x00001FC7, 0x42000672, 0x00001FC8, 0x02000674, + 0x00001FC9, 0x41000388, 0x00001FCA, 0x02000676, + 0x00001FCB, 0x41000389, 0x00001FCC, 0x02000678, + 0x00001FCD, 0x0200067A, 0x00001FCE, 0x0200067C, + 0x00001FCF, 0x0200067E, 0x00001FD0, 0x02000680, + 0x00001FD1, 0x02000682, 0x00001FD2, 0x42000684, + 0x00001FD3, 0x41000390, 0x00001FD6, 0x02000686, + 0x00001FD7, 0x42000688, 0x00001FD8, 0x0200068A, + 0x00001FD9, 0x0200068C, 0x00001FDA, 0x0200068E, + 0x00001FDB, 0x4100038A, 0x00001FDD, 0x02000690, + 0x00001FDE, 0x02000692, 0x00001FDF, 0x02000694, + 0x00001FE0, 0x02000696, 0x00001FE1, 0x02000698, + 0x00001FE2, 0x4200069A, 0x00001FE3, 0x410003B0, + 0x00001FE4, 0x0200069C, 0x00001FE5, 0x0200069E, + 0x00001FE6, 0x020006A0, 0x00001FE7, 0x420006A2, + 0x00001FE8, 0x020006A4, 0x00001FE9, 0x020006A6, + 0x00001FEA, 0x020006A8, 0x00001FEB, 0x4100038E, + 0x00001FEC, 0x020006AA, 0x00001FED, 0x020006AC, + 0x00001FEE, 0x41000385, 0x00001FEF, 0x01000060, + 0x00001FF2, 0x420006AE, 0x00001FF3, 0x020006B0, + 0x00001FF4, 0x420006B2, 0x00001FF6, 0x020006B4, + 0x00001FF7, 0x420006B6, 0x00001FF8, 0x020006B8, + 0x00001FF9, 0x4100038C, 0x00001FFA, 0x020006BA, + 0x00001FFB, 0x4100038F, 0x00001FFC, 0x020006BC, + 0x00001FFD, 0x010000B4, 0x00002000, 0x01002002, + 0x00002001, 0x01002003, 0x00002126, 0x010003A9, + 0x0000212A, 0x0100004B, 0x0000212B, 0x410000C5, + 0x0000219A, 0x020006BE, 0x0000219B, 0x020006C0, + 0x000021AE, 0x020006C2, 0x000021CD, 0x020006C4, + 0x000021CE, 0x020006C6, 0x000021CF, 0x020006C8, + 0x00002204, 0x020006CA, 0x00002209, 0x020006CC, + 0x0000220C, 0x020006CE, 0x00002224, 0x020006D0, + 0x00002226, 0x020006D2, 0x00002241, 0x020006D4, + 0x00002244, 0x020006D6, 0x00002247, 0x020006D8, + 0x00002249, 0x020006DA, 0x00002260, 0x020006DC, + 0x00002262, 0x020006DE, 0x0000226D, 0x020006E0, + 0x0000226E, 0x020006E2, 0x0000226F, 0x020006E4, + 0x00002270, 0x020006E6, 0x00002271, 0x020006E8, + 0x00002274, 0x020006EA, 0x00002275, 0x020006EC, + 0x00002278, 0x020006EE, 0x00002279, 0x020006F0, + 0x00002280, 0x020006F2, 0x00002281, 0x020006F4, + 0x00002284, 0x020006F6, 0x00002285, 0x020006F8, + 0x00002288, 0x020006FA, 0x00002289, 0x020006FC, + 0x000022AC, 0x020006FE, 0x000022AD, 0x02000700, + 0x000022AE, 0x02000702, 0x000022AF, 0x02000704, + 0x000022E0, 0x02000706, 0x000022E1, 0x02000708, + 0x000022E2, 0x0200070A, 0x000022E3, 0x0200070C, + 0x000022EA, 0x0200070E, 0x000022EB, 0x02000710, + 0x000022EC, 0x02000712, 0x000022ED, 0x02000714, + 0x00002329, 0x01003008, 0x0000232A, 0x01003009, + 0x00002ADC, 0x02000716, 0x0000304C, 0x02000718, + 0x0000304E, 0x0200071A, 0x00003050, 0x0200071C, + 0x00003052, 0x0200071E, 0x00003054, 0x02000720, + 0x00003056, 0x02000722, 0x00003058, 0x02000724, + 0x0000305A, 0x02000726, 0x0000305C, 0x02000728, + 0x0000305E, 0x0200072A, 0x00003060, 0x0200072C, + 0x00003062, 0x0200072E, 0x00003065, 0x02000730, + 0x00003067, 0x02000732, 0x00003069, 0x02000734, + 0x00003070, 0x02000736, 0x00003071, 0x02000738, + 0x00003073, 0x0200073A, 0x00003074, 0x0200073C, + 0x00003076, 0x0200073E, 0x00003077, 0x02000740, + 0x00003079, 0x02000742, 0x0000307A, 0x02000744, + 0x0000307C, 0x02000746, 0x0000307D, 0x02000748, + 0x00003094, 0x0200074A, 0x0000309E, 0x0200074C, + 0x000030AC, 0x0200074E, 0x000030AE, 0x02000750, + 0x000030B0, 0x02000752, 0x000030B2, 0x02000754, + 0x000030B4, 0x02000756, 0x000030B6, 0x02000758, + 0x000030B8, 0x0200075A, 0x000030BA, 0x0200075C, + 0x000030BC, 0x0200075E, 0x000030BE, 0x02000760, + 0x000030C0, 0x02000762, 0x000030C2, 0x02000764, + 0x000030C5, 0x02000766, 0x000030C7, 0x02000768, + 0x000030C9, 0x0200076A, 0x000030D0, 0x0200076C, + 0x000030D1, 0x0200076E, 0x000030D3, 0x02000770, + 0x000030D4, 0x02000772, 0x000030D6, 0x02000774, + 0x000030D7, 0x02000776, 0x000030D9, 0x02000778, + 0x000030DA, 0x0200077A, 0x000030DC, 0x0200077C, + 0x000030DD, 0x0200077E, 0x000030F4, 0x02000780, + 0x000030F7, 0x02000782, 0x000030F8, 0x02000784, + 0x000030F9, 0x02000786, 0x000030FA, 0x02000788, + 0x000030FE, 0x0200078A, 0x0000F900, 0x01008C48, + 0x0000F901, 0x010066F4, 0x0000F902, 0x01008ECA, + 0x0000F903, 0x01008CC8, 0x0000F904, 0x01006ED1, + 0x0000F905, 0x01004E32, 0x0000F906, 0x010053E5, + 0x0000F907, 0x01009F9C, 0x0000F908, 0x01009F9C, + 0x0000F909, 0x01005951, 0x0000F90A, 0x010091D1, + 0x0000F90B, 0x01005587, 0x0000F90C, 0x01005948, + 0x0000F90D, 0x010061F6, 0x0000F90E, 0x01007669, + 0x0000F90F, 0x01007F85, 0x0000F910, 0x0100863F, + 0x0000F911, 0x010087BA, 0x0000F912, 0x010088F8, + 0x0000F913, 0x0100908F, 0x0000F914, 0x01006A02, + 0x0000F915, 0x01006D1B, 0x0000F916, 0x010070D9, + 0x0000F917, 0x010073DE, 0x0000F918, 0x0100843D, + 0x0000F919, 0x0100916A, 0x0000F91A, 0x010099F1, + 0x0000F91B, 0x01004E82, 0x0000F91C, 0x01005375, + 0x0000F91D, 0x01006B04, 0x0000F91E, 0x0100721B, + 0x0000F91F, 0x0100862D, 0x0000F920, 0x01009E1E, + 0x0000F921, 0x01005D50, 0x0000F922, 0x01006FEB, + 0x0000F923, 0x010085CD, 0x0000F924, 0x01008964, + 0x0000F925, 0x010062C9, 0x0000F926, 0x010081D8, + 0x0000F927, 0x0100881F, 0x0000F928, 0x01005ECA, + 0x0000F929, 0x01006717, 0x0000F92A, 0x01006D6A, + 0x0000F92B, 0x010072FC, 0x0000F92C, 0x010090CE, + 0x0000F92D, 0x01004F86, 0x0000F92E, 0x010051B7, + 0x0000F92F, 0x010052DE, 0x0000F930, 0x010064C4, + 0x0000F931, 0x01006AD3, 0x0000F932, 0x01007210, + 0x0000F933, 0x010076E7, 0x0000F934, 0x01008001, + 0x0000F935, 0x01008606, 0x0000F936, 0x0100865C, + 0x0000F937, 0x01008DEF, 0x0000F938, 0x01009732, + 0x0000F939, 0x01009B6F, 0x0000F93A, 0x01009DFA, + 0x0000F93B, 0x0100788C, 0x0000F93C, 0x0100797F, + 0x0000F93D, 0x01007DA0, 0x0000F93E, 0x010083C9, + 0x0000F93F, 0x01009304, 0x0000F940, 0x01009E7F, + 0x0000F941, 0x01008AD6, 0x0000F942, 0x010058DF, + 0x0000F943, 0x01005F04, 0x0000F944, 0x01007C60, + 0x0000F945, 0x0100807E, 0x0000F946, 0x01007262, + 0x0000F947, 0x010078CA, 0x0000F948, 0x01008CC2, + 0x0000F949, 0x010096F7, 0x0000F94A, 0x010058D8, + 0x0000F94B, 0x01005C62, 0x0000F94C, 0x01006A13, + 0x0000F94D, 0x01006DDA, 0x0000F94E, 0x01006F0F, + 0x0000F94F, 0x01007D2F, 0x0000F950, 0x01007E37, + 0x0000F951, 0x0100964B, 0x0000F952, 0x010052D2, + 0x0000F953, 0x0100808B, 0x0000F954, 0x010051DC, + 0x0000F955, 0x010051CC, 0x0000F956, 0x01007A1C, + 0x0000F957, 0x01007DBE, 0x0000F958, 0x010083F1, + 0x0000F959, 0x01009675, 0x0000F95A, 0x01008B80, + 0x0000F95B, 0x010062CF, 0x0000F95C, 0x01006A02, + 0x0000F95D, 0x01008AFE, 0x0000F95E, 0x01004E39, + 0x0000F95F, 0x01005BE7, 0x0000F960, 0x01006012, + 0x0000F961, 0x01007387, 0x0000F962, 0x01007570, + 0x0000F963, 0x01005317, 0x0000F964, 0x010078FB, + 0x0000F965, 0x01004FBF, 0x0000F966, 0x01005FA9, + 0x0000F967, 0x01004E0D, 0x0000F968, 0x01006CCC, + 0x0000F969, 0x01006578, 0x0000F96A, 0x01007D22, + 0x0000F96B, 0x010053C3, 0x0000F96C, 0x0100585E, + 0x0000F96D, 0x01007701, 0x0000F96E, 0x01008449, + 0x0000F96F, 0x01008AAA, 0x0000F970, 0x01006BBA, + 0x0000F971, 0x01008FB0, 0x0000F972, 0x01006C88, + 0x0000F973, 0x010062FE, 0x0000F974, 0x010082E5, + 0x0000F975, 0x010063A0, 0x0000F976, 0x01007565, + 0x0000F977, 0x01004EAE, 0x0000F978, 0x01005169, + 0x0000F979, 0x010051C9, 0x0000F97A, 0x01006881, + 0x0000F97B, 0x01007CE7, 0x0000F97C, 0x0100826F, + 0x0000F97D, 0x01008AD2, 0x0000F97E, 0x010091CF, + 0x0000F97F, 0x010052F5, 0x0000F980, 0x01005442, + 0x0000F981, 0x01005973, 0x0000F982, 0x01005EEC, + 0x0000F983, 0x010065C5, 0x0000F984, 0x01006FFE, + 0x0000F985, 0x0100792A, 0x0000F986, 0x010095AD, + 0x0000F987, 0x01009A6A, 0x0000F988, 0x01009E97, + 0x0000F989, 0x01009ECE, 0x0000F98A, 0x0100529B, + 0x0000F98B, 0x010066C6, 0x0000F98C, 0x01006B77, + 0x0000F98D, 0x01008F62, 0x0000F98E, 0x01005E74, + 0x0000F98F, 0x01006190, 0x0000F990, 0x01006200, + 0x0000F991, 0x0100649A, 0x0000F992, 0x01006F23, + 0x0000F993, 0x01007149, 0x0000F994, 0x01007489, + 0x0000F995, 0x010079CA, 0x0000F996, 0x01007DF4, + 0x0000F997, 0x0100806F, 0x0000F998, 0x01008F26, + 0x0000F999, 0x010084EE, 0x0000F99A, 0x01009023, + 0x0000F99B, 0x0100934A, 0x0000F99C, 0x01005217, + 0x0000F99D, 0x010052A3, 0x0000F99E, 0x010054BD, + 0x0000F99F, 0x010070C8, 0x0000F9A0, 0x010088C2, + 0x0000F9A1, 0x01008AAA, 0x0000F9A2, 0x01005EC9, + 0x0000F9A3, 0x01005FF5, 0x0000F9A4, 0x0100637B, + 0x0000F9A5, 0x01006BAE, 0x0000F9A6, 0x01007C3E, + 0x0000F9A7, 0x01007375, 0x0000F9A8, 0x01004EE4, + 0x0000F9A9, 0x010056F9, 0x0000F9AA, 0x01005BE7, + 0x0000F9AB, 0x01005DBA, 0x0000F9AC, 0x0100601C, + 0x0000F9AD, 0x010073B2, 0x0000F9AE, 0x01007469, + 0x0000F9AF, 0x01007F9A, 0x0000F9B0, 0x01008046, + 0x0000F9B1, 0x01009234, 0x0000F9B2, 0x010096F6, + 0x0000F9B3, 0x01009748, 0x0000F9B4, 0x01009818, + 0x0000F9B5, 0x01004F8B, 0x0000F9B6, 0x010079AE, + 0x0000F9B7, 0x010091B4, 0x0000F9B8, 0x010096B8, + 0x0000F9B9, 0x010060E1, 0x0000F9BA, 0x01004E86, + 0x0000F9BB, 0x010050DA, 0x0000F9BC, 0x01005BEE, + 0x0000F9BD, 0x01005C3F, 0x0000F9BE, 0x01006599, + 0x0000F9BF, 0x01006A02, 0x0000F9C0, 0x010071CE, + 0x0000F9C1, 0x01007642, 0x0000F9C2, 0x010084FC, + 0x0000F9C3, 0x0100907C, 0x0000F9C4, 0x01009F8D, + 0x0000F9C5, 0x01006688, 0x0000F9C6, 0x0100962E, + 0x0000F9C7, 0x01005289, 0x0000F9C8, 0x0100677B, + 0x0000F9C9, 0x010067F3, 0x0000F9CA, 0x01006D41, + 0x0000F9CB, 0x01006E9C, 0x0000F9CC, 0x01007409, + 0x0000F9CD, 0x01007559, 0x0000F9CE, 0x0100786B, + 0x0000F9CF, 0x01007D10, 0x0000F9D0, 0x0100985E, + 0x0000F9D1, 0x0100516D, 0x0000F9D2, 0x0100622E, + 0x0000F9D3, 0x01009678, 0x0000F9D4, 0x0100502B, + 0x0000F9D5, 0x01005D19, 0x0000F9D6, 0x01006DEA, + 0x0000F9D7, 0x01008F2A, 0x0000F9D8, 0x01005F8B, + 0x0000F9D9, 0x01006144, 0x0000F9DA, 0x01006817, + 0x0000F9DB, 0x01007387, 0x0000F9DC, 0x01009686, + 0x0000F9DD, 0x01005229, 0x0000F9DE, 0x0100540F, + 0x0000F9DF, 0x01005C65, 0x0000F9E0, 0x01006613, + 0x0000F9E1, 0x0100674E, 0x0000F9E2, 0x010068A8, + 0x0000F9E3, 0x01006CE5, 0x0000F9E4, 0x01007406, + 0x0000F9E5, 0x010075E2, 0x0000F9E6, 0x01007F79, + 0x0000F9E7, 0x010088CF, 0x0000F9E8, 0x010088E1, + 0x0000F9E9, 0x010091CC, 0x0000F9EA, 0x010096E2, + 0x0000F9EB, 0x0100533F, 0x0000F9EC, 0x01006EBA, + 0x0000F9ED, 0x0100541D, 0x0000F9EE, 0x010071D0, + 0x0000F9EF, 0x01007498, 0x0000F9F0, 0x010085FA, + 0x0000F9F1, 0x010096A3, 0x0000F9F2, 0x01009C57, + 0x0000F9F3, 0x01009E9F, 0x0000F9F4, 0x01006797, + 0x0000F9F5, 0x01006DCB, 0x0000F9F6, 0x010081E8, + 0x0000F9F7, 0x01007ACB, 0x0000F9F8, 0x01007B20, + 0x0000F9F9, 0x01007C92, 0x0000F9FA, 0x010072C0, + 0x0000F9FB, 0x01007099, 0x0000F9FC, 0x01008B58, + 0x0000F9FD, 0x01004EC0, 0x0000F9FE, 0x01008336, + 0x0000F9FF, 0x0100523A, 0x0000FA00, 0x01005207, + 0x0000FA01, 0x01005EA6, 0x0000FA02, 0x010062D3, + 0x0000FA03, 0x01007CD6, 0x0000FA04, 0x01005B85, + 0x0000FA05, 0x01006D1E, 0x0000FA06, 0x010066B4, + 0x0000FA07, 0x01008F3B, 0x0000FA08, 0x0100884C, + 0x0000FA09, 0x0100964D, 0x0000FA0A, 0x0100898B, + 0x0000FA0B, 0x01005ED3, 0x0000FA0C, 0x01005140, + 0x0000FA0D, 0x010055C0, 0x0000FA10, 0x0100585A, + 0x0000FA12, 0x01006674, 0x0000FA15, 0x010051DE, + 0x0000FA16, 0x0100732A, 0x0000FA17, 0x010076CA, + 0x0000FA18, 0x0100793C, 0x0000FA19, 0x0100795E, + 0x0000FA1A, 0x01007965, 0x0000FA1B, 0x0100798F, + 0x0000FA1C, 0x01009756, 0x0000FA1D, 0x01007CBE, + 0x0000FA1E, 0x01007FBD, 0x0000FA20, 0x01008612, + 0x0000FA22, 0x01008AF8, 0x0000FA25, 0x01009038, + 0x0000FA26, 0x010090FD, 0x0000FA2A, 0x010098EF, + 0x0000FA2B, 0x010098FC, 0x0000FA2C, 0x01009928, + 0x0000FA2D, 0x01009DB4, 0x0000FA2E, 0x010090DE, + 0x0000FA2F, 0x010096B7, 0x0000FA30, 0x01004FAE, + 0x0000FA31, 0x010050E7, 0x0000FA32, 0x0100514D, + 0x0000FA33, 0x010052C9, 0x0000FA34, 0x010052E4, + 0x0000FA35, 0x01005351, 0x0000FA36, 0x0100559D, + 0x0000FA37, 0x01005606, 0x0000FA38, 0x01005668, + 0x0000FA39, 0x01005840, 0x0000FA3A, 0x010058A8, + 0x0000FA3B, 0x01005C64, 0x0000FA3C, 0x01005C6E, + 0x0000FA3D, 0x01006094, 0x0000FA3E, 0x01006168, + 0x0000FA3F, 0x0100618E, 0x0000FA40, 0x010061F2, + 0x0000FA41, 0x0100654F, 0x0000FA42, 0x010065E2, + 0x0000FA43, 0x01006691, 0x0000FA44, 0x01006885, + 0x0000FA45, 0x01006D77, 0x0000FA46, 0x01006E1A, + 0x0000FA47, 0x01006F22, 0x0000FA48, 0x0100716E, + 0x0000FA49, 0x0100722B, 0x0000FA4A, 0x01007422, + 0x0000FA4B, 0x01007891, 0x0000FA4C, 0x0100793E, + 0x0000FA4D, 0x01007949, 0x0000FA4E, 0x01007948, + 0x0000FA4F, 0x01007950, 0x0000FA50, 0x01007956, + 0x0000FA51, 0x0100795D, 0x0000FA52, 0x0100798D, + 0x0000FA53, 0x0100798E, 0x0000FA54, 0x01007A40, + 0x0000FA55, 0x01007A81, 0x0000FA56, 0x01007BC0, + 0x0000FA57, 0x01007DF4, 0x0000FA58, 0x01007E09, + 0x0000FA59, 0x01007E41, 0x0000FA5A, 0x01007F72, + 0x0000FA5B, 0x01008005, 0x0000FA5C, 0x010081ED, + 0x0000FA5D, 0x01008279, 0x0000FA5E, 0x01008279, + 0x0000FA5F, 0x01008457, 0x0000FA60, 0x01008910, + 0x0000FA61, 0x01008996, 0x0000FA62, 0x01008B01, + 0x0000FA63, 0x01008B39, 0x0000FA64, 0x01008CD3, + 0x0000FA65, 0x01008D08, 0x0000FA66, 0x01008FB6, + 0x0000FA67, 0x01009038, 0x0000FA68, 0x010096E3, + 0x0000FA69, 0x010097FF, 0x0000FA6A, 0x0100983B, + 0x0000FA6B, 0x01006075, 0x0000FA6C, 0x810242EE, + 0x0000FA6D, 0x01008218, 0x0000FA70, 0x01004E26, + 0x0000FA71, 0x010051B5, 0x0000FA72, 0x01005168, + 0x0000FA73, 0x01004F80, 0x0000FA74, 0x01005145, + 0x0000FA75, 0x01005180, 0x0000FA76, 0x010052C7, + 0x0000FA77, 0x010052FA, 0x0000FA78, 0x0100559D, + 0x0000FA79, 0x01005555, 0x0000FA7A, 0x01005599, + 0x0000FA7B, 0x010055E2, 0x0000FA7C, 0x0100585A, + 0x0000FA7D, 0x010058B3, 0x0000FA7E, 0x01005944, + 0x0000FA7F, 0x01005954, 0x0000FA80, 0x01005A62, + 0x0000FA81, 0x01005B28, 0x0000FA82, 0x01005ED2, + 0x0000FA83, 0x01005ED9, 0x0000FA84, 0x01005F69, + 0x0000FA85, 0x01005FAD, 0x0000FA86, 0x010060D8, + 0x0000FA87, 0x0100614E, 0x0000FA88, 0x01006108, + 0x0000FA89, 0x0100618E, 0x0000FA8A, 0x01006160, + 0x0000FA8B, 0x010061F2, 0x0000FA8C, 0x01006234, + 0x0000FA8D, 0x010063C4, 0x0000FA8E, 0x0100641C, + 0x0000FA8F, 0x01006452, 0x0000FA90, 0x01006556, + 0x0000FA91, 0x01006674, 0x0000FA92, 0x01006717, + 0x0000FA93, 0x0100671B, 0x0000FA94, 0x01006756, + 0x0000FA95, 0x01006B79, 0x0000FA96, 0x01006BBA, + 0x0000FA97, 0x01006D41, 0x0000FA98, 0x01006EDB, + 0x0000FA99, 0x01006ECB, 0x0000FA9A, 0x01006F22, + 0x0000FA9B, 0x0100701E, 0x0000FA9C, 0x0100716E, + 0x0000FA9D, 0x010077A7, 0x0000FA9E, 0x01007235, + 0x0000FA9F, 0x010072AF, 0x0000FAA0, 0x0100732A, + 0x0000FAA1, 0x01007471, 0x0000FAA2, 0x01007506, + 0x0000FAA3, 0x0100753B, 0x0000FAA4, 0x0100761D, + 0x0000FAA5, 0x0100761F, 0x0000FAA6, 0x010076CA, + 0x0000FAA7, 0x010076DB, 0x0000FAA8, 0x010076F4, + 0x0000FAA9, 0x0100774A, 0x0000FAAA, 0x01007740, + 0x0000FAAB, 0x010078CC, 0x0000FAAC, 0x01007AB1, + 0x0000FAAD, 0x01007BC0, 0x0000FAAE, 0x01007C7B, + 0x0000FAAF, 0x01007D5B, 0x0000FAB0, 0x01007DF4, + 0x0000FAB1, 0x01007F3E, 0x0000FAB2, 0x01008005, + 0x0000FAB3, 0x01008352, 0x0000FAB4, 0x010083EF, + 0x0000FAB5, 0x01008779, 0x0000FAB6, 0x01008941, + 0x0000FAB7, 0x01008986, 0x0000FAB8, 0x01008996, + 0x0000FAB9, 0x01008ABF, 0x0000FABA, 0x01008AF8, + 0x0000FABB, 0x01008ACB, 0x0000FABC, 0x01008B01, + 0x0000FABD, 0x01008AFE, 0x0000FABE, 0x01008AED, + 0x0000FABF, 0x01008B39, 0x0000FAC0, 0x01008B8A, + 0x0000FAC1, 0x01008D08, 0x0000FAC2, 0x01008F38, + 0x0000FAC3, 0x01009072, 0x0000FAC4, 0x01009199, + 0x0000FAC5, 0x01009276, 0x0000FAC6, 0x0100967C, + 0x0000FAC7, 0x010096E3, 0x0000FAC8, 0x01009756, + 0x0000FAC9, 0x010097DB, 0x0000FACA, 0x010097FF, + 0x0000FACB, 0x0100980B, 0x0000FACC, 0x0100983B, + 0x0000FACD, 0x01009B12, 0x0000FACE, 0x01009F9C, + 0x0000FACF, 0x8102284A, 0x0000FAD0, 0x81022844, + 0x0000FAD1, 0x810233D5, 0x0000FAD2, 0x01003B9D, + 0x0000FAD3, 0x01004018, 0x0000FAD4, 0x01004039, + 0x0000FAD5, 0x81025249, 0x0000FAD6, 0x81025CD0, + 0x0000FAD7, 0x81027ED3, 0x0000FAD8, 0x01009F43, + 0x0000FAD9, 0x01009F8E, 0x0000FB1D, 0x0200078C, + 0x0000FB1F, 0x0200078E, 0x0000FB2A, 0x02000790, + 0x0000FB2B, 0x02000792, 0x0000FB2C, 0x42000794, + 0x0000FB2D, 0x42000796, 0x0000FB2E, 0x02000798, + 0x0000FB2F, 0x0200079A, 0x0000FB30, 0x0200079C, + 0x0000FB31, 0x0200079E, 0x0000FB32, 0x020007A0, + 0x0000FB33, 0x020007A2, 0x0000FB34, 0x020007A4, + 0x0000FB35, 0x020007A6, 0x0000FB36, 0x020007A8, + 0x0000FB38, 0x020007AA, 0x0000FB39, 0x020007AC, + 0x0000FB3A, 0x020007AE, 0x0000FB3B, 0x020007B0, + 0x0000FB3C, 0x020007B2, 0x0000FB3E, 0x020007B4, + 0x0000FB40, 0x020007B6, 0x0000FB41, 0x020007B8, + 0x0000FB43, 0x020007BA, 0x0000FB44, 0x020007BC, + 0x0000FB46, 0x020007BE, 0x0000FB47, 0x020007C0, + 0x0000FB48, 0x020007C2, 0x0000FB49, 0x020007C4, + 0x0000FB4A, 0x020007C6, 0x0000FB4B, 0x020007C8, + 0x0000FB4C, 0x020007CA, 0x0000FB4D, 0x020007CC, + 0x0000FB4E, 0x020007CE, 0x0001109A, 0x820007D0, + 0x0001109C, 0x820007D2, 0x000110AB, 0x820007D4, + 0x0001112E, 0x820007D6, 0x0001112F, 0x820007D8, + 0x0001134B, 0x820007DA, 0x0001134C, 0x820007DC, + 0x000114BB, 0x820007DE, 0x000114BC, 0x820007E0, + 0x000114BE, 0x820007E2, 0x000115BA, 0x820007E4, + 0x000115BB, 0x820007E6, 0x00011938, 0x820007E8, + 0x0001D15E, 0x820007EA, 0x0001D15F, 0x820007EC, + 0x0001D160, 0xC20007EE, 0x0001D161, 0xC20007F0, + 0x0001D162, 0xC20007F2, 0x0001D163, 0xC20007F4, + 0x0001D164, 0xC20007F6, 0x0001D1BB, 0x820007F8, + 0x0001D1BC, 0x820007FA, 0x0001D1BD, 0xC20007FC, + 0x0001D1BE, 0xC20007FE, 0x0001D1BF, 0xC2000800, + 0x0001D1C0, 0xC2000802, 0x0002F800, 0x01004E3D, + 0x0002F801, 0x01004E38, 0x0002F802, 0x01004E41, + 0x0002F803, 0x81020122, 0x0002F804, 0x01004F60, + 0x0002F805, 0x01004FAE, 0x0002F806, 0x01004FBB, + 0x0002F807, 0x01005002, 0x0002F808, 0x0100507A, + 0x0002F809, 0x01005099, 0x0002F80A, 0x010050E7, + 0x0002F80B, 0x010050CF, 0x0002F80C, 0x0100349E, + 0x0002F80D, 0x8102063A, 0x0002F80E, 0x0100514D, + 0x0002F80F, 0x01005154, 0x0002F810, 0x01005164, + 0x0002F811, 0x01005177, 0x0002F812, 0x8102051C, + 0x0002F813, 0x010034B9, 0x0002F814, 0x01005167, + 0x0002F815, 0x0100518D, 0x0002F816, 0x8102054B, + 0x0002F817, 0x01005197, 0x0002F818, 0x010051A4, + 0x0002F819, 0x01004ECC, 0x0002F81A, 0x010051AC, + 0x0002F81B, 0x010051B5, 0x0002F81C, 0x810291DF, + 0x0002F81D, 0x010051F5, 0x0002F81E, 0x01005203, + 0x0002F81F, 0x010034DF, 0x0002F820, 0x0100523B, + 0x0002F821, 0x01005246, 0x0002F822, 0x01005272, + 0x0002F823, 0x01005277, 0x0002F824, 0x01003515, + 0x0002F825, 0x010052C7, 0x0002F826, 0x010052C9, + 0x0002F827, 0x010052E4, 0x0002F828, 0x010052FA, + 0x0002F829, 0x01005305, 0x0002F82A, 0x01005306, + 0x0002F82B, 0x01005317, 0x0002F82C, 0x01005349, + 0x0002F82D, 0x01005351, 0x0002F82E, 0x0100535A, + 0x0002F82F, 0x01005373, 0x0002F830, 0x0100537D, + 0x0002F831, 0x0100537F, 0x0002F832, 0x0100537F, + 0x0002F833, 0x0100537F, 0x0002F834, 0x81020A2C, + 0x0002F835, 0x01007070, 0x0002F836, 0x010053CA, + 0x0002F837, 0x010053DF, 0x0002F838, 0x81020B63, + 0x0002F839, 0x010053EB, 0x0002F83A, 0x010053F1, + 0x0002F83B, 0x01005406, 0x0002F83C, 0x0100549E, + 0x0002F83D, 0x01005438, 0x0002F83E, 0x01005448, + 0x0002F83F, 0x01005468, 0x0002F840, 0x010054A2, + 0x0002F841, 0x010054F6, 0x0002F842, 0x01005510, + 0x0002F843, 0x01005553, 0x0002F844, 0x01005563, + 0x0002F845, 0x01005584, 0x0002F846, 0x01005584, + 0x0002F847, 0x01005599, 0x0002F848, 0x010055AB, + 0x0002F849, 0x010055B3, 0x0002F84A, 0x010055C2, + 0x0002F84B, 0x01005716, 0x0002F84C, 0x01005606, + 0x0002F84D, 0x01005717, 0x0002F84E, 0x01005651, + 0x0002F84F, 0x01005674, 0x0002F850, 0x01005207, + 0x0002F851, 0x010058EE, 0x0002F852, 0x010057CE, + 0x0002F853, 0x010057F4, 0x0002F854, 0x0100580D, + 0x0002F855, 0x0100578B, 0x0002F856, 0x01005832, + 0x0002F857, 0x01005831, 0x0002F858, 0x010058AC, + 0x0002F859, 0x810214E4, 0x0002F85A, 0x010058F2, + 0x0002F85B, 0x010058F7, 0x0002F85C, 0x01005906, + 0x0002F85D, 0x0100591A, 0x0002F85E, 0x01005922, + 0x0002F85F, 0x01005962, 0x0002F860, 0x810216A8, + 0x0002F861, 0x810216EA, 0x0002F862, 0x010059EC, + 0x0002F863, 0x01005A1B, 0x0002F864, 0x01005A27, + 0x0002F865, 0x010059D8, 0x0002F866, 0x01005A66, + 0x0002F867, 0x010036EE, 0x0002F868, 0x010036FC, + 0x0002F869, 0x01005B08, 0x0002F86A, 0x01005B3E, + 0x0002F86B, 0x01005B3E, 0x0002F86C, 0x810219C8, + 0x0002F86D, 0x01005BC3, 0x0002F86E, 0x01005BD8, + 0x0002F86F, 0x01005BE7, 0x0002F870, 0x01005BF3, + 0x0002F871, 0x81021B18, 0x0002F872, 0x01005BFF, + 0x0002F873, 0x01005C06, 0x0002F874, 0x01005F53, + 0x0002F875, 0x01005C22, 0x0002F876, 0x01003781, + 0x0002F877, 0x01005C60, 0x0002F878, 0x01005C6E, + 0x0002F879, 0x01005CC0, 0x0002F87A, 0x01005C8D, + 0x0002F87B, 0x81021DE4, 0x0002F87C, 0x01005D43, + 0x0002F87D, 0x81021DE6, 0x0002F87E, 0x01005D6E, + 0x0002F87F, 0x01005D6B, 0x0002F880, 0x01005D7C, + 0x0002F881, 0x01005DE1, 0x0002F882, 0x01005DE2, + 0x0002F883, 0x0100382F, 0x0002F884, 0x01005DFD, + 0x0002F885, 0x01005E28, 0x0002F886, 0x01005E3D, + 0x0002F887, 0x01005E69, 0x0002F888, 0x01003862, + 0x0002F889, 0x81022183, 0x0002F88A, 0x0100387C, + 0x0002F88B, 0x01005EB0, 0x0002F88C, 0x01005EB3, + 0x0002F88D, 0x01005EB6, 0x0002F88E, 0x01005ECA, + 0x0002F88F, 0x8102A392, 0x0002F890, 0x01005EFE, + 0x0002F891, 0x81022331, 0x0002F892, 0x81022331, + 0x0002F893, 0x01008201, 0x0002F894, 0x01005F22, + 0x0002F895, 0x01005F22, 0x0002F896, 0x010038C7, + 0x0002F897, 0x810232B8, 0x0002F898, 0x810261DA, + 0x0002F899, 0x01005F62, 0x0002F89A, 0x01005F6B, + 0x0002F89B, 0x010038E3, 0x0002F89C, 0x01005F9A, + 0x0002F89D, 0x01005FCD, 0x0002F89E, 0x01005FD7, + 0x0002F89F, 0x01005FF9, 0x0002F8A0, 0x01006081, + 0x0002F8A1, 0x0100393A, 0x0002F8A2, 0x0100391C, + 0x0002F8A3, 0x01006094, 0x0002F8A4, 0x810226D4, + 0x0002F8A5, 0x010060C7, 0x0002F8A6, 0x01006148, + 0x0002F8A7, 0x0100614C, 0x0002F8A8, 0x0100614E, + 0x0002F8A9, 0x0100614C, 0x0002F8AA, 0x0100617A, + 0x0002F8AB, 0x0100618E, 0x0002F8AC, 0x010061B2, + 0x0002F8AD, 0x010061A4, 0x0002F8AE, 0x010061AF, + 0x0002F8AF, 0x010061DE, 0x0002F8B0, 0x010061F2, + 0x0002F8B1, 0x010061F6, 0x0002F8B2, 0x01006210, + 0x0002F8B3, 0x0100621B, 0x0002F8B4, 0x0100625D, + 0x0002F8B5, 0x010062B1, 0x0002F8B6, 0x010062D4, + 0x0002F8B7, 0x01006350, 0x0002F8B8, 0x81022B0C, + 0x0002F8B9, 0x0100633D, 0x0002F8BA, 0x010062FC, + 0x0002F8BB, 0x01006368, 0x0002F8BC, 0x01006383, + 0x0002F8BD, 0x010063E4, 0x0002F8BE, 0x81022BF1, + 0x0002F8BF, 0x01006422, 0x0002F8C0, 0x010063C5, + 0x0002F8C1, 0x010063A9, 0x0002F8C2, 0x01003A2E, + 0x0002F8C3, 0x01006469, 0x0002F8C4, 0x0100647E, + 0x0002F8C5, 0x0100649D, 0x0002F8C6, 0x01006477, + 0x0002F8C7, 0x01003A6C, 0x0002F8C8, 0x0100654F, + 0x0002F8C9, 0x0100656C, 0x0002F8CA, 0x8102300A, + 0x0002F8CB, 0x010065E3, 0x0002F8CC, 0x010066F8, + 0x0002F8CD, 0x01006649, 0x0002F8CE, 0x01003B19, + 0x0002F8CF, 0x01006691, 0x0002F8D0, 0x01003B08, + 0x0002F8D1, 0x01003AE4, 0x0002F8D2, 0x01005192, + 0x0002F8D3, 0x01005195, 0x0002F8D4, 0x01006700, + 0x0002F8D5, 0x0100669C, 0x0002F8D6, 0x010080AD, + 0x0002F8D7, 0x010043D9, 0x0002F8D8, 0x01006717, + 0x0002F8D9, 0x0100671B, 0x0002F8DA, 0x01006721, + 0x0002F8DB, 0x0100675E, 0x0002F8DC, 0x01006753, + 0x0002F8DD, 0x810233C3, 0x0002F8DE, 0x01003B49, + 0x0002F8DF, 0x010067FA, 0x0002F8E0, 0x01006785, + 0x0002F8E1, 0x01006852, 0x0002F8E2, 0x01006885, + 0x0002F8E3, 0x8102346D, 0x0002F8E4, 0x0100688E, + 0x0002F8E5, 0x0100681F, 0x0002F8E6, 0x01006914, + 0x0002F8E7, 0x01003B9D, 0x0002F8E8, 0x01006942, + 0x0002F8E9, 0x010069A3, 0x0002F8EA, 0x010069EA, + 0x0002F8EB, 0x01006AA8, 0x0002F8EC, 0x810236A3, + 0x0002F8ED, 0x01006ADB, 0x0002F8EE, 0x01003C18, + 0x0002F8EF, 0x01006B21, 0x0002F8F0, 0x810238A7, + 0x0002F8F1, 0x01006B54, 0x0002F8F2, 0x01003C4E, + 0x0002F8F3, 0x01006B72, 0x0002F8F4, 0x01006B9F, + 0x0002F8F5, 0x01006BBA, 0x0002F8F6, 0x01006BBB, + 0x0002F8F7, 0x81023A8D, 0x0002F8F8, 0x81021D0B, + 0x0002F8F9, 0x81023AFA, 0x0002F8FA, 0x01006C4E, + 0x0002F8FB, 0x81023CBC, 0x0002F8FC, 0x01006CBF, + 0x0002F8FD, 0x01006CCD, 0x0002F8FE, 0x01006C67, + 0x0002F8FF, 0x01006D16, 0x0002F900, 0x01006D3E, + 0x0002F901, 0x01006D77, 0x0002F902, 0x01006D41, + 0x0002F903, 0x01006D69, 0x0002F904, 0x01006D78, + 0x0002F905, 0x01006D85, 0x0002F906, 0x81023D1E, + 0x0002F907, 0x01006D34, 0x0002F908, 0x01006E2F, + 0x0002F909, 0x01006E6E, 0x0002F90A, 0x01003D33, + 0x0002F90B, 0x01006ECB, 0x0002F90C, 0x01006EC7, + 0x0002F90D, 0x81023ED1, 0x0002F90E, 0x01006DF9, + 0x0002F90F, 0x01006F6E, 0x0002F910, 0x81023F5E, + 0x0002F911, 0x81023F8E, 0x0002F912, 0x01006FC6, + 0x0002F913, 0x01007039, 0x0002F914, 0x0100701E, + 0x0002F915, 0x0100701B, 0x0002F916, 0x01003D96, + 0x0002F917, 0x0100704A, 0x0002F918, 0x0100707D, + 0x0002F919, 0x01007077, 0x0002F91A, 0x010070AD, + 0x0002F91B, 0x81020525, 0x0002F91C, 0x01007145, + 0x0002F91D, 0x81024263, 0x0002F91E, 0x0100719C, + 0x0002F91F, 0x810243AB, 0x0002F920, 0x01007228, + 0x0002F921, 0x01007235, 0x0002F922, 0x01007250, + 0x0002F923, 0x81024608, 0x0002F924, 0x01007280, + 0x0002F925, 0x01007295, 0x0002F926, 0x81024735, + 0x0002F927, 0x81024814, 0x0002F928, 0x0100737A, + 0x0002F929, 0x0100738B, 0x0002F92A, 0x01003EAC, + 0x0002F92B, 0x010073A5, 0x0002F92C, 0x01003EB8, + 0x0002F92D, 0x01003EB8, 0x0002F92E, 0x01007447, + 0x0002F92F, 0x0100745C, 0x0002F930, 0x01007471, + 0x0002F931, 0x01007485, 0x0002F932, 0x010074CA, + 0x0002F933, 0x01003F1B, 0x0002F934, 0x01007524, + 0x0002F935, 0x81024C36, 0x0002F936, 0x0100753E, + 0x0002F937, 0x81024C92, 0x0002F938, 0x01007570, + 0x0002F939, 0x8102219F, 0x0002F93A, 0x01007610, + 0x0002F93B, 0x81024FA1, 0x0002F93C, 0x81024FB8, + 0x0002F93D, 0x81025044, 0x0002F93E, 0x01003FFC, + 0x0002F93F, 0x01004008, 0x0002F940, 0x010076F4, + 0x0002F941, 0x810250F3, 0x0002F942, 0x810250F2, + 0x0002F943, 0x81025119, 0x0002F944, 0x81025133, + 0x0002F945, 0x0100771E, 0x0002F946, 0x0100771F, + 0x0002F947, 0x0100771F, 0x0002F948, 0x0100774A, + 0x0002F949, 0x01004039, 0x0002F94A, 0x0100778B, + 0x0002F94B, 0x01004046, 0x0002F94C, 0x01004096, + 0x0002F94D, 0x8102541D, 0x0002F94E, 0x0100784E, + 0x0002F94F, 0x0100788C, 0x0002F950, 0x010078CC, + 0x0002F951, 0x010040E3, 0x0002F952, 0x81025626, + 0x0002F953, 0x01007956, 0x0002F954, 0x8102569A, + 0x0002F955, 0x810256C5, 0x0002F956, 0x0100798F, + 0x0002F957, 0x010079EB, 0x0002F958, 0x0100412F, + 0x0002F959, 0x01007A40, 0x0002F95A, 0x01007A4A, + 0x0002F95B, 0x01007A4F, 0x0002F95C, 0x8102597C, + 0x0002F95D, 0x81025AA7, 0x0002F95E, 0x81025AA7, + 0x0002F95F, 0x01007AEE, 0x0002F960, 0x01004202, + 0x0002F961, 0x81025BAB, 0x0002F962, 0x01007BC6, + 0x0002F963, 0x01007BC9, 0x0002F964, 0x01004227, + 0x0002F965, 0x81025C80, 0x0002F966, 0x01007CD2, + 0x0002F967, 0x010042A0, 0x0002F968, 0x01007CE8, + 0x0002F969, 0x01007CE3, 0x0002F96A, 0x01007D00, + 0x0002F96B, 0x81025F86, 0x0002F96C, 0x01007D63, + 0x0002F96D, 0x01004301, 0x0002F96E, 0x01007DC7, + 0x0002F96F, 0x01007E02, 0x0002F970, 0x01007E45, + 0x0002F971, 0x01004334, 0x0002F972, 0x81026228, + 0x0002F973, 0x81026247, 0x0002F974, 0x01004359, + 0x0002F975, 0x810262D9, 0x0002F976, 0x01007F7A, + 0x0002F977, 0x8102633E, 0x0002F978, 0x01007F95, + 0x0002F979, 0x01007FFA, 0x0002F97A, 0x01008005, + 0x0002F97B, 0x810264DA, 0x0002F97C, 0x81026523, + 0x0002F97D, 0x01008060, 0x0002F97E, 0x810265A8, + 0x0002F97F, 0x01008070, 0x0002F980, 0x8102335F, + 0x0002F981, 0x010043D5, 0x0002F982, 0x010080B2, + 0x0002F983, 0x01008103, 0x0002F984, 0x0100440B, + 0x0002F985, 0x0100813E, 0x0002F986, 0x01005AB5, + 0x0002F987, 0x810267A7, 0x0002F988, 0x810267B5, + 0x0002F989, 0x81023393, 0x0002F98A, 0x8102339C, + 0x0002F98B, 0x01008201, 0x0002F98C, 0x01008204, + 0x0002F98D, 0x01008F9E, 0x0002F98E, 0x0100446B, + 0x0002F98F, 0x01008291, 0x0002F990, 0x0100828B, + 0x0002F991, 0x0100829D, 0x0002F992, 0x010052B3, + 0x0002F993, 0x010082B1, 0x0002F994, 0x010082B3, + 0x0002F995, 0x010082BD, 0x0002F996, 0x010082E6, + 0x0002F997, 0x81026B3C, 0x0002F998, 0x010082E5, + 0x0002F999, 0x0100831D, 0x0002F99A, 0x01008363, + 0x0002F99B, 0x010083AD, 0x0002F99C, 0x01008323, + 0x0002F99D, 0x010083BD, 0x0002F99E, 0x010083E7, + 0x0002F99F, 0x01008457, 0x0002F9A0, 0x01008353, + 0x0002F9A1, 0x010083CA, 0x0002F9A2, 0x010083CC, + 0x0002F9A3, 0x010083DC, 0x0002F9A4, 0x81026C36, + 0x0002F9A5, 0x81026D6B, 0x0002F9A6, 0x81026CD5, + 0x0002F9A7, 0x0100452B, 0x0002F9A8, 0x010084F1, + 0x0002F9A9, 0x010084F3, 0x0002F9AA, 0x01008516, + 0x0002F9AB, 0x810273CA, 0x0002F9AC, 0x01008564, + 0x0002F9AD, 0x81026F2C, 0x0002F9AE, 0x0100455D, + 0x0002F9AF, 0x01004561, 0x0002F9B0, 0x81026FB1, + 0x0002F9B1, 0x810270D2, 0x0002F9B2, 0x0100456B, + 0x0002F9B3, 0x01008650, 0x0002F9B4, 0x0100865C, + 0x0002F9B5, 0x01008667, 0x0002F9B6, 0x01008669, + 0x0002F9B7, 0x010086A9, 0x0002F9B8, 0x01008688, + 0x0002F9B9, 0x0100870E, 0x0002F9BA, 0x010086E2, + 0x0002F9BB, 0x01008779, 0x0002F9BC, 0x01008728, + 0x0002F9BD, 0x0100876B, 0x0002F9BE, 0x01008786, + 0x0002F9BF, 0x010045D7, 0x0002F9C0, 0x010087E1, + 0x0002F9C1, 0x01008801, 0x0002F9C2, 0x010045F9, + 0x0002F9C3, 0x01008860, 0x0002F9C4, 0x01008863, + 0x0002F9C5, 0x81027667, 0x0002F9C6, 0x010088D7, + 0x0002F9C7, 0x010088DE, 0x0002F9C8, 0x01004635, + 0x0002F9C9, 0x010088FA, 0x0002F9CA, 0x010034BB, + 0x0002F9CB, 0x810278AE, 0x0002F9CC, 0x81027966, + 0x0002F9CD, 0x010046BE, 0x0002F9CE, 0x010046C7, + 0x0002F9CF, 0x01008AA0, 0x0002F9D0, 0x01008AED, + 0x0002F9D1, 0x01008B8A, 0x0002F9D2, 0x01008C55, + 0x0002F9D3, 0x81027CA8, 0x0002F9D4, 0x01008CAB, + 0x0002F9D5, 0x01008CC1, 0x0002F9D6, 0x01008D1B, + 0x0002F9D7, 0x01008D77, 0x0002F9D8, 0x81027F2F, + 0x0002F9D9, 0x81020804, 0x0002F9DA, 0x01008DCB, + 0x0002F9DB, 0x01008DBC, 0x0002F9DC, 0x01008DF0, + 0x0002F9DD, 0x810208DE, 0x0002F9DE, 0x01008ED4, + 0x0002F9DF, 0x01008F38, 0x0002F9E0, 0x810285D2, + 0x0002F9E1, 0x810285ED, 0x0002F9E2, 0x01009094, + 0x0002F9E3, 0x010090F1, 0x0002F9E4, 0x01009111, + 0x0002F9E5, 0x8102872E, 0x0002F9E6, 0x0100911B, + 0x0002F9E7, 0x01009238, 0x0002F9E8, 0x010092D7, + 0x0002F9E9, 0x010092D8, 0x0002F9EA, 0x0100927C, + 0x0002F9EB, 0x010093F9, 0x0002F9EC, 0x01009415, + 0x0002F9ED, 0x81028BFA, 0x0002F9EE, 0x0100958B, + 0x0002F9EF, 0x01004995, 0x0002F9F0, 0x010095B7, + 0x0002F9F1, 0x81028D77, 0x0002F9F2, 0x010049E6, + 0x0002F9F3, 0x010096C3, 0x0002F9F4, 0x01005DB2, + 0x0002F9F5, 0x01009723, 0x0002F9F6, 0x81029145, + 0x0002F9F7, 0x8102921A, 0x0002F9F8, 0x01004A6E, + 0x0002F9F9, 0x01004A76, 0x0002F9FA, 0x010097E0, + 0x0002F9FB, 0x8102940A, 0x0002F9FC, 0x01004AB2, + 0x0002F9FD, 0x81029496, 0x0002F9FE, 0x0100980B, + 0x0002F9FF, 0x0100980B, 0x0002FA00, 0x01009829, + 0x0002FA01, 0x810295B6, 0x0002FA02, 0x010098E2, + 0x0002FA03, 0x01004B33, 0x0002FA04, 0x01009929, + 0x0002FA05, 0x010099A7, 0x0002FA06, 0x010099C2, + 0x0002FA07, 0x010099FE, 0x0002FA08, 0x01004BCE, + 0x0002FA09, 0x81029B30, 0x0002FA0A, 0x01009B12, + 0x0002FA0B, 0x01009C40, 0x0002FA0C, 0x01009CFD, + 0x0002FA0D, 0x01004CCE, 0x0002FA0E, 0x01004CED, + 0x0002FA0F, 0x01009D67, 0x0002FA10, 0x8102A0CE, + 0x0002FA11, 0x01004CF8, 0x0002FA12, 0x8102A105, + 0x0002FA13, 0x8102A20E, 0x0002FA14, 0x8102A291, + 0x0002FA15, 0x01009EBB, 0x0002FA16, 0x01004D56, + 0x0002FA17, 0x01009EF9, 0x0002FA18, 0x01009EFE, + 0x0002FA19, 0x01009F05, 0x0002FA1A, 0x01009F0F, + 0x0002FA1B, 0x01009F16, 0x0002FA1C, 0x01009F3B, + 0x0002FA1D, 0x8102A600, +}; + +static UTF32Char const __CFUniCharMultipleDecompositionTable[] = { + 0x00000041, 0x00000300, 0x00000041, 0x00000301, + 0x00000041, 0x00000302, 0x00000041, 0x00000303, + 0x00000041, 0x00000308, 0x00000041, 0x0000030A, + 0x00000043, 0x00000327, 0x00000045, 0x00000300, + 0x00000045, 0x00000301, 0x00000045, 0x00000302, + 0x00000045, 0x00000308, 0x00000049, 0x00000300, + 0x00000049, 0x00000301, 0x00000049, 0x00000302, + 0x00000049, 0x00000308, 0x0000004E, 0x00000303, + 0x0000004F, 0x00000300, 0x0000004F, 0x00000301, + 0x0000004F, 0x00000302, 0x0000004F, 0x00000303, + 0x0000004F, 0x00000308, 0x00000055, 0x00000300, + 0x00000055, 0x00000301, 0x00000055, 0x00000302, + 0x00000055, 0x00000308, 0x00000059, 0x00000301, + 0x00000061, 0x00000300, 0x00000061, 0x00000301, + 0x00000061, 0x00000302, 0x00000061, 0x00000303, + 0x00000061, 0x00000308, 0x00000061, 0x0000030A, + 0x00000063, 0x00000327, 0x00000065, 0x00000300, + 0x00000065, 0x00000301, 0x00000065, 0x00000302, + 0x00000065, 0x00000308, 0x00000069, 0x00000300, + 0x00000069, 0x00000301, 0x00000069, 0x00000302, + 0x00000069, 0x00000308, 0x0000006E, 0x00000303, + 0x0000006F, 0x00000300, 0x0000006F, 0x00000301, + 0x0000006F, 0x00000302, 0x0000006F, 0x00000303, + 0x0000006F, 0x00000308, 0x00000075, 0x00000300, + 0x00000075, 0x00000301, 0x00000075, 0x00000302, + 0x00000075, 0x00000308, 0x00000079, 0x00000301, + 0x00000079, 0x00000308, 0x00000041, 0x00000304, + 0x00000061, 0x00000304, 0x00000041, 0x00000306, + 0x00000061, 0x00000306, 0x00000041, 0x00000328, + 0x00000061, 0x00000328, 0x00000043, 0x00000301, + 0x00000063, 0x00000301, 0x00000043, 0x00000302, + 0x00000063, 0x00000302, 0x00000043, 0x00000307, + 0x00000063, 0x00000307, 0x00000043, 0x0000030C, + 0x00000063, 0x0000030C, 0x00000044, 0x0000030C, + 0x00000064, 0x0000030C, 0x00000045, 0x00000304, + 0x00000065, 0x00000304, 0x00000045, 0x00000306, + 0x00000065, 0x00000306, 0x00000045, 0x00000307, + 0x00000065, 0x00000307, 0x00000045, 0x00000328, + 0x00000065, 0x00000328, 0x00000045, 0x0000030C, + 0x00000065, 0x0000030C, 0x00000047, 0x00000302, + 0x00000067, 0x00000302, 0x00000047, 0x00000306, + 0x00000067, 0x00000306, 0x00000047, 0x00000307, + 0x00000067, 0x00000307, 0x00000047, 0x00000327, + 0x00000067, 0x00000327, 0x00000048, 0x00000302, + 0x00000068, 0x00000302, 0x00000049, 0x00000303, + 0x00000069, 0x00000303, 0x00000049, 0x00000304, + 0x00000069, 0x00000304, 0x00000049, 0x00000306, + 0x00000069, 0x00000306, 0x00000049, 0x00000328, + 0x00000069, 0x00000328, 0x00000049, 0x00000307, + 0x0000004A, 0x00000302, 0x0000006A, 0x00000302, + 0x0000004B, 0x00000327, 0x0000006B, 0x00000327, + 0x0000004C, 0x00000301, 0x0000006C, 0x00000301, + 0x0000004C, 0x00000327, 0x0000006C, 0x00000327, + 0x0000004C, 0x0000030C, 0x0000006C, 0x0000030C, + 0x0000004E, 0x00000301, 0x0000006E, 0x00000301, + 0x0000004E, 0x00000327, 0x0000006E, 0x00000327, + 0x0000004E, 0x0000030C, 0x0000006E, 0x0000030C, + 0x0000004F, 0x00000304, 0x0000006F, 0x00000304, + 0x0000004F, 0x00000306, 0x0000006F, 0x00000306, + 0x0000004F, 0x0000030B, 0x0000006F, 0x0000030B, + 0x00000052, 0x00000301, 0x00000072, 0x00000301, + 0x00000052, 0x00000327, 0x00000072, 0x00000327, + 0x00000052, 0x0000030C, 0x00000072, 0x0000030C, + 0x00000053, 0x00000301, 0x00000073, 0x00000301, + 0x00000053, 0x00000302, 0x00000073, 0x00000302, + 0x00000053, 0x00000327, 0x00000073, 0x00000327, + 0x00000053, 0x0000030C, 0x00000073, 0x0000030C, + 0x00000054, 0x00000327, 0x00000074, 0x00000327, + 0x00000054, 0x0000030C, 0x00000074, 0x0000030C, + 0x00000055, 0x00000303, 0x00000075, 0x00000303, + 0x00000055, 0x00000304, 0x00000075, 0x00000304, + 0x00000055, 0x00000306, 0x00000075, 0x00000306, + 0x00000055, 0x0000030A, 0x00000075, 0x0000030A, + 0x00000055, 0x0000030B, 0x00000075, 0x0000030B, + 0x00000055, 0x00000328, 0x00000075, 0x00000328, + 0x00000057, 0x00000302, 0x00000077, 0x00000302, + 0x00000059, 0x00000302, 0x00000079, 0x00000302, + 0x00000059, 0x00000308, 0x0000005A, 0x00000301, + 0x0000007A, 0x00000301, 0x0000005A, 0x00000307, + 0x0000007A, 0x00000307, 0x0000005A, 0x0000030C, + 0x0000007A, 0x0000030C, 0x0000004F, 0x0000031B, + 0x0000006F, 0x0000031B, 0x00000055, 0x0000031B, + 0x00000075, 0x0000031B, 0x00000041, 0x0000030C, + 0x00000061, 0x0000030C, 0x00000049, 0x0000030C, + 0x00000069, 0x0000030C, 0x0000004F, 0x0000030C, + 0x0000006F, 0x0000030C, 0x00000055, 0x0000030C, + 0x00000075, 0x0000030C, 0x000000DC, 0x00000304, + 0x000000FC, 0x00000304, 0x000000DC, 0x00000301, + 0x000000FC, 0x00000301, 0x000000DC, 0x0000030C, + 0x000000FC, 0x0000030C, 0x000000DC, 0x00000300, + 0x000000FC, 0x00000300, 0x000000C4, 0x00000304, + 0x000000E4, 0x00000304, 0x00000226, 0x00000304, + 0x00000227, 0x00000304, 0x000000C6, 0x00000304, + 0x000000E6, 0x00000304, 0x00000047, 0x0000030C, + 0x00000067, 0x0000030C, 0x0000004B, 0x0000030C, + 0x0000006B, 0x0000030C, 0x0000004F, 0x00000328, + 0x0000006F, 0x00000328, 0x000001EA, 0x00000304, + 0x000001EB, 0x00000304, 0x000001B7, 0x0000030C, + 0x00000292, 0x0000030C, 0x0000006A, 0x0000030C, + 0x00000047, 0x00000301, 0x00000067, 0x00000301, + 0x0000004E, 0x00000300, 0x0000006E, 0x00000300, + 0x000000C5, 0x00000301, 0x000000E5, 0x00000301, + 0x000000C6, 0x00000301, 0x000000E6, 0x00000301, + 0x000000D8, 0x00000301, 0x000000F8, 0x00000301, + 0x00000041, 0x0000030F, 0x00000061, 0x0000030F, + 0x00000041, 0x00000311, 0x00000061, 0x00000311, + 0x00000045, 0x0000030F, 0x00000065, 0x0000030F, + 0x00000045, 0x00000311, 0x00000065, 0x00000311, + 0x00000049, 0x0000030F, 0x00000069, 0x0000030F, + 0x00000049, 0x00000311, 0x00000069, 0x00000311, + 0x0000004F, 0x0000030F, 0x0000006F, 0x0000030F, + 0x0000004F, 0x00000311, 0x0000006F, 0x00000311, + 0x00000052, 0x0000030F, 0x00000072, 0x0000030F, + 0x00000052, 0x00000311, 0x00000072, 0x00000311, + 0x00000055, 0x0000030F, 0x00000075, 0x0000030F, + 0x00000055, 0x00000311, 0x00000075, 0x00000311, + 0x00000053, 0x00000326, 0x00000073, 0x00000326, + 0x00000054, 0x00000326, 0x00000074, 0x00000326, + 0x00000048, 0x0000030C, 0x00000068, 0x0000030C, + 0x00000041, 0x00000307, 0x00000061, 0x00000307, + 0x00000045, 0x00000327, 0x00000065, 0x00000327, + 0x000000D6, 0x00000304, 0x000000F6, 0x00000304, + 0x000000D5, 0x00000304, 0x000000F5, 0x00000304, + 0x0000004F, 0x00000307, 0x0000006F, 0x00000307, + 0x0000022E, 0x00000304, 0x0000022F, 0x00000304, + 0x00000059, 0x00000304, 0x00000079, 0x00000304, + 0x00000308, 0x00000301, 0x000000A8, 0x00000301, + 0x00000391, 0x00000301, 0x00000395, 0x00000301, + 0x00000397, 0x00000301, 0x00000399, 0x00000301, + 0x0000039F, 0x00000301, 0x000003A5, 0x00000301, + 0x000003A9, 0x00000301, 0x000003CA, 0x00000301, + 0x00000399, 0x00000308, 0x000003A5, 0x00000308, + 0x000003B1, 0x00000301, 0x000003B5, 0x00000301, + 0x000003B7, 0x00000301, 0x000003B9, 0x00000301, + 0x000003CB, 0x00000301, 0x000003B9, 0x00000308, + 0x000003C5, 0x00000308, 0x000003BF, 0x00000301, + 0x000003C5, 0x00000301, 0x000003C9, 0x00000301, + 0x000003D2, 0x00000301, 0x000003D2, 0x00000308, + 0x00000415, 0x00000300, 0x00000415, 0x00000308, + 0x00000413, 0x00000301, 0x00000406, 0x00000308, + 0x0000041A, 0x00000301, 0x00000418, 0x00000300, + 0x00000423, 0x00000306, 0x00000418, 0x00000306, + 0x00000438, 0x00000306, 0x00000435, 0x00000300, + 0x00000435, 0x00000308, 0x00000433, 0x00000301, + 0x00000456, 0x00000308, 0x0000043A, 0x00000301, + 0x00000438, 0x00000300, 0x00000443, 0x00000306, + 0x00000474, 0x0000030F, 0x00000475, 0x0000030F, + 0x00000416, 0x00000306, 0x00000436, 0x00000306, + 0x00000410, 0x00000306, 0x00000430, 0x00000306, + 0x00000410, 0x00000308, 0x00000430, 0x00000308, + 0x00000415, 0x00000306, 0x00000435, 0x00000306, + 0x000004D8, 0x00000308, 0x000004D9, 0x00000308, + 0x00000416, 0x00000308, 0x00000436, 0x00000308, + 0x00000417, 0x00000308, 0x00000437, 0x00000308, + 0x00000418, 0x00000304, 0x00000438, 0x00000304, + 0x00000418, 0x00000308, 0x00000438, 0x00000308, + 0x0000041E, 0x00000308, 0x0000043E, 0x00000308, + 0x000004E8, 0x00000308, 0x000004E9, 0x00000308, + 0x0000042D, 0x00000308, 0x0000044D, 0x00000308, + 0x00000423, 0x00000304, 0x00000443, 0x00000304, + 0x00000423, 0x00000308, 0x00000443, 0x00000308, + 0x00000423, 0x0000030B, 0x00000443, 0x0000030B, + 0x00000427, 0x00000308, 0x00000447, 0x00000308, + 0x0000042B, 0x00000308, 0x0000044B, 0x00000308, + 0x00000627, 0x00000653, 0x00000627, 0x00000654, + 0x00000648, 0x00000654, 0x00000627, 0x00000655, + 0x0000064A, 0x00000654, 0x000006D5, 0x00000654, + 0x000006C1, 0x00000654, 0x000006D2, 0x00000654, + 0x00000928, 0x0000093C, 0x00000930, 0x0000093C, + 0x00000933, 0x0000093C, 0x00000915, 0x0000093C, + 0x00000916, 0x0000093C, 0x00000917, 0x0000093C, + 0x0000091C, 0x0000093C, 0x00000921, 0x0000093C, + 0x00000922, 0x0000093C, 0x0000092B, 0x0000093C, + 0x0000092F, 0x0000093C, 0x000009C7, 0x000009BE, + 0x000009C7, 0x000009D7, 0x000009A1, 0x000009BC, + 0x000009A2, 0x000009BC, 0x000009AF, 0x000009BC, + 0x00000A32, 0x00000A3C, 0x00000A38, 0x00000A3C, + 0x00000A16, 0x00000A3C, 0x00000A17, 0x00000A3C, + 0x00000A1C, 0x00000A3C, 0x00000A2B, 0x00000A3C, + 0x00000B47, 0x00000B56, 0x00000B47, 0x00000B3E, + 0x00000B47, 0x00000B57, 0x00000B21, 0x00000B3C, + 0x00000B22, 0x00000B3C, 0x00000B92, 0x00000BD7, + 0x00000BC6, 0x00000BBE, 0x00000BC7, 0x00000BBE, + 0x00000BC6, 0x00000BD7, 0x00000C46, 0x00000C56, + 0x00000CBF, 0x00000CD5, 0x00000CC6, 0x00000CD5, + 0x00000CC6, 0x00000CD6, 0x00000CC6, 0x00000CC2, + 0x00000CCA, 0x00000CD5, 0x00000D46, 0x00000D3E, + 0x00000D47, 0x00000D3E, 0x00000D46, 0x00000D57, + 0x00000DD9, 0x00000DCA, 0x00000DD9, 0x00000DCF, + 0x00000DDC, 0x00000DCA, 0x00000DD9, 0x00000DDF, + 0x00000F42, 0x00000FB7, 0x00000F4C, 0x00000FB7, + 0x00000F51, 0x00000FB7, 0x00000F56, 0x00000FB7, + 0x00000F5B, 0x00000FB7, 0x00000F40, 0x00000FB5, + 0x00000F71, 0x00000F72, 0x00000F71, 0x00000F74, + 0x00000FB2, 0x00000F80, 0x00000FB3, 0x00000F80, + 0x00000F71, 0x00000F80, 0x00000F92, 0x00000FB7, + 0x00000F9C, 0x00000FB7, 0x00000FA1, 0x00000FB7, + 0x00000FA6, 0x00000FB7, 0x00000FAB, 0x00000FB7, + 0x00000F90, 0x00000FB5, 0x00001025, 0x0000102E, + 0x00001B05, 0x00001B35, 0x00001B07, 0x00001B35, + 0x00001B09, 0x00001B35, 0x00001B0B, 0x00001B35, + 0x00001B0D, 0x00001B35, 0x00001B11, 0x00001B35, + 0x00001B3A, 0x00001B35, 0x00001B3C, 0x00001B35, + 0x00001B3E, 0x00001B35, 0x00001B3F, 0x00001B35, + 0x00001B42, 0x00001B35, 0x00000041, 0x00000325, + 0x00000061, 0x00000325, 0x00000042, 0x00000307, + 0x00000062, 0x00000307, 0x00000042, 0x00000323, + 0x00000062, 0x00000323, 0x00000042, 0x00000331, + 0x00000062, 0x00000331, 0x000000C7, 0x00000301, + 0x000000E7, 0x00000301, 0x00000044, 0x00000307, + 0x00000064, 0x00000307, 0x00000044, 0x00000323, + 0x00000064, 0x00000323, 0x00000044, 0x00000331, + 0x00000064, 0x00000331, 0x00000044, 0x00000327, + 0x00000064, 0x00000327, 0x00000044, 0x0000032D, + 0x00000064, 0x0000032D, 0x00000112, 0x00000300, + 0x00000113, 0x00000300, 0x00000112, 0x00000301, + 0x00000113, 0x00000301, 0x00000045, 0x0000032D, + 0x00000065, 0x0000032D, 0x00000045, 0x00000330, + 0x00000065, 0x00000330, 0x00000228, 0x00000306, + 0x00000229, 0x00000306, 0x00000046, 0x00000307, + 0x00000066, 0x00000307, 0x00000047, 0x00000304, + 0x00000067, 0x00000304, 0x00000048, 0x00000307, + 0x00000068, 0x00000307, 0x00000048, 0x00000323, + 0x00000068, 0x00000323, 0x00000048, 0x00000308, + 0x00000068, 0x00000308, 0x00000048, 0x00000327, + 0x00000068, 0x00000327, 0x00000048, 0x0000032E, + 0x00000068, 0x0000032E, 0x00000049, 0x00000330, + 0x00000069, 0x00000330, 0x000000CF, 0x00000301, + 0x000000EF, 0x00000301, 0x0000004B, 0x00000301, + 0x0000006B, 0x00000301, 0x0000004B, 0x00000323, + 0x0000006B, 0x00000323, 0x0000004B, 0x00000331, + 0x0000006B, 0x00000331, 0x0000004C, 0x00000323, + 0x0000006C, 0x00000323, 0x00001E36, 0x00000304, + 0x00001E37, 0x00000304, 0x0000004C, 0x00000331, + 0x0000006C, 0x00000331, 0x0000004C, 0x0000032D, + 0x0000006C, 0x0000032D, 0x0000004D, 0x00000301, + 0x0000006D, 0x00000301, 0x0000004D, 0x00000307, + 0x0000006D, 0x00000307, 0x0000004D, 0x00000323, + 0x0000006D, 0x00000323, 0x0000004E, 0x00000307, + 0x0000006E, 0x00000307, 0x0000004E, 0x00000323, + 0x0000006E, 0x00000323, 0x0000004E, 0x00000331, + 0x0000006E, 0x00000331, 0x0000004E, 0x0000032D, + 0x0000006E, 0x0000032D, 0x000000D5, 0x00000301, + 0x000000F5, 0x00000301, 0x000000D5, 0x00000308, + 0x000000F5, 0x00000308, 0x0000014C, 0x00000300, + 0x0000014D, 0x00000300, 0x0000014C, 0x00000301, + 0x0000014D, 0x00000301, 0x00000050, 0x00000301, + 0x00000070, 0x00000301, 0x00000050, 0x00000307, + 0x00000070, 0x00000307, 0x00000052, 0x00000307, + 0x00000072, 0x00000307, 0x00000052, 0x00000323, + 0x00000072, 0x00000323, 0x00001E5A, 0x00000304, + 0x00001E5B, 0x00000304, 0x00000052, 0x00000331, + 0x00000072, 0x00000331, 0x00000053, 0x00000307, + 0x00000073, 0x00000307, 0x00000053, 0x00000323, + 0x00000073, 0x00000323, 0x0000015A, 0x00000307, + 0x0000015B, 0x00000307, 0x00000160, 0x00000307, + 0x00000161, 0x00000307, 0x00001E62, 0x00000307, + 0x00001E63, 0x00000307, 0x00000054, 0x00000307, + 0x00000074, 0x00000307, 0x00000054, 0x00000323, + 0x00000074, 0x00000323, 0x00000054, 0x00000331, + 0x00000074, 0x00000331, 0x00000054, 0x0000032D, + 0x00000074, 0x0000032D, 0x00000055, 0x00000324, + 0x00000075, 0x00000324, 0x00000055, 0x00000330, + 0x00000075, 0x00000330, 0x00000055, 0x0000032D, + 0x00000075, 0x0000032D, 0x00000168, 0x00000301, + 0x00000169, 0x00000301, 0x0000016A, 0x00000308, + 0x0000016B, 0x00000308, 0x00000056, 0x00000303, + 0x00000076, 0x00000303, 0x00000056, 0x00000323, + 0x00000076, 0x00000323, 0x00000057, 0x00000300, + 0x00000077, 0x00000300, 0x00000057, 0x00000301, + 0x00000077, 0x00000301, 0x00000057, 0x00000308, + 0x00000077, 0x00000308, 0x00000057, 0x00000307, + 0x00000077, 0x00000307, 0x00000057, 0x00000323, + 0x00000077, 0x00000323, 0x00000058, 0x00000307, + 0x00000078, 0x00000307, 0x00000058, 0x00000308, + 0x00000078, 0x00000308, 0x00000059, 0x00000307, + 0x00000079, 0x00000307, 0x0000005A, 0x00000302, + 0x0000007A, 0x00000302, 0x0000005A, 0x00000323, + 0x0000007A, 0x00000323, 0x0000005A, 0x00000331, + 0x0000007A, 0x00000331, 0x00000068, 0x00000331, + 0x00000074, 0x00000308, 0x00000077, 0x0000030A, + 0x00000079, 0x0000030A, 0x0000017F, 0x00000307, + 0x00000041, 0x00000323, 0x00000061, 0x00000323, + 0x00000041, 0x00000309, 0x00000061, 0x00000309, + 0x000000C2, 0x00000301, 0x000000E2, 0x00000301, + 0x000000C2, 0x00000300, 0x000000E2, 0x00000300, + 0x000000C2, 0x00000309, 0x000000E2, 0x00000309, + 0x000000C2, 0x00000303, 0x000000E2, 0x00000303, + 0x00001EA0, 0x00000302, 0x00001EA1, 0x00000302, + 0x00000102, 0x00000301, 0x00000103, 0x00000301, + 0x00000102, 0x00000300, 0x00000103, 0x00000300, + 0x00000102, 0x00000309, 0x00000103, 0x00000309, + 0x00000102, 0x00000303, 0x00000103, 0x00000303, + 0x00001EA0, 0x00000306, 0x00001EA1, 0x00000306, + 0x00000045, 0x00000323, 0x00000065, 0x00000323, + 0x00000045, 0x00000309, 0x00000065, 0x00000309, + 0x00000045, 0x00000303, 0x00000065, 0x00000303, + 0x000000CA, 0x00000301, 0x000000EA, 0x00000301, + 0x000000CA, 0x00000300, 0x000000EA, 0x00000300, + 0x000000CA, 0x00000309, 0x000000EA, 0x00000309, + 0x000000CA, 0x00000303, 0x000000EA, 0x00000303, + 0x00001EB8, 0x00000302, 0x00001EB9, 0x00000302, + 0x00000049, 0x00000309, 0x00000069, 0x00000309, + 0x00000049, 0x00000323, 0x00000069, 0x00000323, + 0x0000004F, 0x00000323, 0x0000006F, 0x00000323, + 0x0000004F, 0x00000309, 0x0000006F, 0x00000309, + 0x000000D4, 0x00000301, 0x000000F4, 0x00000301, + 0x000000D4, 0x00000300, 0x000000F4, 0x00000300, + 0x000000D4, 0x00000309, 0x000000F4, 0x00000309, + 0x000000D4, 0x00000303, 0x000000F4, 0x00000303, + 0x00001ECC, 0x00000302, 0x00001ECD, 0x00000302, + 0x000001A0, 0x00000301, 0x000001A1, 0x00000301, + 0x000001A0, 0x00000300, 0x000001A1, 0x00000300, + 0x000001A0, 0x00000309, 0x000001A1, 0x00000309, + 0x000001A0, 0x00000303, 0x000001A1, 0x00000303, + 0x000001A0, 0x00000323, 0x000001A1, 0x00000323, + 0x00000055, 0x00000323, 0x00000075, 0x00000323, + 0x00000055, 0x00000309, 0x00000075, 0x00000309, + 0x000001AF, 0x00000301, 0x000001B0, 0x00000301, + 0x000001AF, 0x00000300, 0x000001B0, 0x00000300, + 0x000001AF, 0x00000309, 0x000001B0, 0x00000309, + 0x000001AF, 0x00000303, 0x000001B0, 0x00000303, + 0x000001AF, 0x00000323, 0x000001B0, 0x00000323, + 0x00000059, 0x00000300, 0x00000079, 0x00000300, + 0x00000059, 0x00000323, 0x00000079, 0x00000323, + 0x00000059, 0x00000309, 0x00000079, 0x00000309, + 0x00000059, 0x00000303, 0x00000079, 0x00000303, + 0x000003B1, 0x00000313, 0x000003B1, 0x00000314, + 0x00001F00, 0x00000300, 0x00001F01, 0x00000300, + 0x00001F00, 0x00000301, 0x00001F01, 0x00000301, + 0x00001F00, 0x00000342, 0x00001F01, 0x00000342, + 0x00000391, 0x00000313, 0x00000391, 0x00000314, + 0x00001F08, 0x00000300, 0x00001F09, 0x00000300, + 0x00001F08, 0x00000301, 0x00001F09, 0x00000301, + 0x00001F08, 0x00000342, 0x00001F09, 0x00000342, + 0x000003B5, 0x00000313, 0x000003B5, 0x00000314, + 0x00001F10, 0x00000300, 0x00001F11, 0x00000300, + 0x00001F10, 0x00000301, 0x00001F11, 0x00000301, + 0x00000395, 0x00000313, 0x00000395, 0x00000314, + 0x00001F18, 0x00000300, 0x00001F19, 0x00000300, + 0x00001F18, 0x00000301, 0x00001F19, 0x00000301, + 0x000003B7, 0x00000313, 0x000003B7, 0x00000314, + 0x00001F20, 0x00000300, 0x00001F21, 0x00000300, + 0x00001F20, 0x00000301, 0x00001F21, 0x00000301, + 0x00001F20, 0x00000342, 0x00001F21, 0x00000342, + 0x00000397, 0x00000313, 0x00000397, 0x00000314, + 0x00001F28, 0x00000300, 0x00001F29, 0x00000300, + 0x00001F28, 0x00000301, 0x00001F29, 0x00000301, + 0x00001F28, 0x00000342, 0x00001F29, 0x00000342, + 0x000003B9, 0x00000313, 0x000003B9, 0x00000314, + 0x00001F30, 0x00000300, 0x00001F31, 0x00000300, + 0x00001F30, 0x00000301, 0x00001F31, 0x00000301, + 0x00001F30, 0x00000342, 0x00001F31, 0x00000342, + 0x00000399, 0x00000313, 0x00000399, 0x00000314, + 0x00001F38, 0x00000300, 0x00001F39, 0x00000300, + 0x00001F38, 0x00000301, 0x00001F39, 0x00000301, + 0x00001F38, 0x00000342, 0x00001F39, 0x00000342, + 0x000003BF, 0x00000313, 0x000003BF, 0x00000314, + 0x00001F40, 0x00000300, 0x00001F41, 0x00000300, + 0x00001F40, 0x00000301, 0x00001F41, 0x00000301, + 0x0000039F, 0x00000313, 0x0000039F, 0x00000314, + 0x00001F48, 0x00000300, 0x00001F49, 0x00000300, + 0x00001F48, 0x00000301, 0x00001F49, 0x00000301, + 0x000003C5, 0x00000313, 0x000003C5, 0x00000314, + 0x00001F50, 0x00000300, 0x00001F51, 0x00000300, + 0x00001F50, 0x00000301, 0x00001F51, 0x00000301, + 0x00001F50, 0x00000342, 0x00001F51, 0x00000342, + 0x000003A5, 0x00000314, 0x00001F59, 0x00000300, + 0x00001F59, 0x00000301, 0x00001F59, 0x00000342, + 0x000003C9, 0x00000313, 0x000003C9, 0x00000314, + 0x00001F60, 0x00000300, 0x00001F61, 0x00000300, + 0x00001F60, 0x00000301, 0x00001F61, 0x00000301, + 0x00001F60, 0x00000342, 0x00001F61, 0x00000342, + 0x000003A9, 0x00000313, 0x000003A9, 0x00000314, + 0x00001F68, 0x00000300, 0x00001F69, 0x00000300, + 0x00001F68, 0x00000301, 0x00001F69, 0x00000301, + 0x00001F68, 0x00000342, 0x00001F69, 0x00000342, + 0x000003B1, 0x00000300, 0x000003B5, 0x00000300, + 0x000003B7, 0x00000300, 0x000003B9, 0x00000300, + 0x000003BF, 0x00000300, 0x000003C5, 0x00000300, + 0x000003C9, 0x00000300, 0x00001F00, 0x00000345, + 0x00001F01, 0x00000345, 0x00001F02, 0x00000345, + 0x00001F03, 0x00000345, 0x00001F04, 0x00000345, + 0x00001F05, 0x00000345, 0x00001F06, 0x00000345, + 0x00001F07, 0x00000345, 0x00001F08, 0x00000345, + 0x00001F09, 0x00000345, 0x00001F0A, 0x00000345, + 0x00001F0B, 0x00000345, 0x00001F0C, 0x00000345, + 0x00001F0D, 0x00000345, 0x00001F0E, 0x00000345, + 0x00001F0F, 0x00000345, 0x00001F20, 0x00000345, + 0x00001F21, 0x00000345, 0x00001F22, 0x00000345, + 0x00001F23, 0x00000345, 0x00001F24, 0x00000345, + 0x00001F25, 0x00000345, 0x00001F26, 0x00000345, + 0x00001F27, 0x00000345, 0x00001F28, 0x00000345, + 0x00001F29, 0x00000345, 0x00001F2A, 0x00000345, + 0x00001F2B, 0x00000345, 0x00001F2C, 0x00000345, + 0x00001F2D, 0x00000345, 0x00001F2E, 0x00000345, + 0x00001F2F, 0x00000345, 0x00001F60, 0x00000345, + 0x00001F61, 0x00000345, 0x00001F62, 0x00000345, + 0x00001F63, 0x00000345, 0x00001F64, 0x00000345, + 0x00001F65, 0x00000345, 0x00001F66, 0x00000345, + 0x00001F67, 0x00000345, 0x00001F68, 0x00000345, + 0x00001F69, 0x00000345, 0x00001F6A, 0x00000345, + 0x00001F6B, 0x00000345, 0x00001F6C, 0x00000345, + 0x00001F6D, 0x00000345, 0x00001F6E, 0x00000345, + 0x00001F6F, 0x00000345, 0x000003B1, 0x00000306, + 0x000003B1, 0x00000304, 0x00001F70, 0x00000345, + 0x000003B1, 0x00000345, 0x000003AC, 0x00000345, + 0x000003B1, 0x00000342, 0x00001FB6, 0x00000345, + 0x00000391, 0x00000306, 0x00000391, 0x00000304, + 0x00000391, 0x00000300, 0x00000391, 0x00000345, + 0x000000A8, 0x00000342, 0x00001F74, 0x00000345, + 0x000003B7, 0x00000345, 0x000003AE, 0x00000345, + 0x000003B7, 0x00000342, 0x00001FC6, 0x00000345, + 0x00000395, 0x00000300, 0x00000397, 0x00000300, + 0x00000397, 0x00000345, 0x00001FBF, 0x00000300, + 0x00001FBF, 0x00000301, 0x00001FBF, 0x00000342, + 0x000003B9, 0x00000306, 0x000003B9, 0x00000304, + 0x000003CA, 0x00000300, 0x000003B9, 0x00000342, + 0x000003CA, 0x00000342, 0x00000399, 0x00000306, + 0x00000399, 0x00000304, 0x00000399, 0x00000300, + 0x00001FFE, 0x00000300, 0x00001FFE, 0x00000301, + 0x00001FFE, 0x00000342, 0x000003C5, 0x00000306, + 0x000003C5, 0x00000304, 0x000003CB, 0x00000300, + 0x000003C1, 0x00000313, 0x000003C1, 0x00000314, + 0x000003C5, 0x00000342, 0x000003CB, 0x00000342, + 0x000003A5, 0x00000306, 0x000003A5, 0x00000304, + 0x000003A5, 0x00000300, 0x000003A1, 0x00000314, + 0x000000A8, 0x00000300, 0x00001F7C, 0x00000345, + 0x000003C9, 0x00000345, 0x000003CE, 0x00000345, + 0x000003C9, 0x00000342, 0x00001FF6, 0x00000345, + 0x0000039F, 0x00000300, 0x000003A9, 0x00000300, + 0x000003A9, 0x00000345, 0x00002190, 0x00000338, + 0x00002192, 0x00000338, 0x00002194, 0x00000338, + 0x000021D0, 0x00000338, 0x000021D4, 0x00000338, + 0x000021D2, 0x00000338, 0x00002203, 0x00000338, + 0x00002208, 0x00000338, 0x0000220B, 0x00000338, + 0x00002223, 0x00000338, 0x00002225, 0x00000338, + 0x0000223C, 0x00000338, 0x00002243, 0x00000338, + 0x00002245, 0x00000338, 0x00002248, 0x00000338, + 0x0000003D, 0x00000338, 0x00002261, 0x00000338, + 0x0000224D, 0x00000338, 0x0000003C, 0x00000338, + 0x0000003E, 0x00000338, 0x00002264, 0x00000338, + 0x00002265, 0x00000338, 0x00002272, 0x00000338, + 0x00002273, 0x00000338, 0x00002276, 0x00000338, + 0x00002277, 0x00000338, 0x0000227A, 0x00000338, + 0x0000227B, 0x00000338, 0x00002282, 0x00000338, + 0x00002283, 0x00000338, 0x00002286, 0x00000338, + 0x00002287, 0x00000338, 0x000022A2, 0x00000338, + 0x000022A8, 0x00000338, 0x000022A9, 0x00000338, + 0x000022AB, 0x00000338, 0x0000227C, 0x00000338, + 0x0000227D, 0x00000338, 0x00002291, 0x00000338, + 0x00002292, 0x00000338, 0x000022B2, 0x00000338, + 0x000022B3, 0x00000338, 0x000022B4, 0x00000338, + 0x000022B5, 0x00000338, 0x00002ADD, 0x00000338, + 0x0000304B, 0x00003099, 0x0000304D, 0x00003099, + 0x0000304F, 0x00003099, 0x00003051, 0x00003099, + 0x00003053, 0x00003099, 0x00003055, 0x00003099, + 0x00003057, 0x00003099, 0x00003059, 0x00003099, + 0x0000305B, 0x00003099, 0x0000305D, 0x00003099, + 0x0000305F, 0x00003099, 0x00003061, 0x00003099, + 0x00003064, 0x00003099, 0x00003066, 0x00003099, + 0x00003068, 0x00003099, 0x0000306F, 0x00003099, + 0x0000306F, 0x0000309A, 0x00003072, 0x00003099, + 0x00003072, 0x0000309A, 0x00003075, 0x00003099, + 0x00003075, 0x0000309A, 0x00003078, 0x00003099, + 0x00003078, 0x0000309A, 0x0000307B, 0x00003099, + 0x0000307B, 0x0000309A, 0x00003046, 0x00003099, + 0x0000309D, 0x00003099, 0x000030AB, 0x00003099, + 0x000030AD, 0x00003099, 0x000030AF, 0x00003099, + 0x000030B1, 0x00003099, 0x000030B3, 0x00003099, + 0x000030B5, 0x00003099, 0x000030B7, 0x00003099, + 0x000030B9, 0x00003099, 0x000030BB, 0x00003099, + 0x000030BD, 0x00003099, 0x000030BF, 0x00003099, + 0x000030C1, 0x00003099, 0x000030C4, 0x00003099, + 0x000030C6, 0x00003099, 0x000030C8, 0x00003099, + 0x000030CF, 0x00003099, 0x000030CF, 0x0000309A, + 0x000030D2, 0x00003099, 0x000030D2, 0x0000309A, + 0x000030D5, 0x00003099, 0x000030D5, 0x0000309A, + 0x000030D8, 0x00003099, 0x000030D8, 0x0000309A, + 0x000030DB, 0x00003099, 0x000030DB, 0x0000309A, + 0x000030A6, 0x00003099, 0x000030EF, 0x00003099, + 0x000030F0, 0x00003099, 0x000030F1, 0x00003099, + 0x000030F2, 0x00003099, 0x000030FD, 0x00003099, + 0x000005D9, 0x000005B4, 0x000005F2, 0x000005B7, + 0x000005E9, 0x000005C1, 0x000005E9, 0x000005C2, + 0x0000FB49, 0x000005C1, 0x0000FB49, 0x000005C2, + 0x000005D0, 0x000005B7, 0x000005D0, 0x000005B8, + 0x000005D0, 0x000005BC, 0x000005D1, 0x000005BC, + 0x000005D2, 0x000005BC, 0x000005D3, 0x000005BC, + 0x000005D4, 0x000005BC, 0x000005D5, 0x000005BC, + 0x000005D6, 0x000005BC, 0x000005D8, 0x000005BC, + 0x000005D9, 0x000005BC, 0x000005DA, 0x000005BC, + 0x000005DB, 0x000005BC, 0x000005DC, 0x000005BC, + 0x000005DE, 0x000005BC, 0x000005E0, 0x000005BC, + 0x000005E1, 0x000005BC, 0x000005E3, 0x000005BC, + 0x000005E4, 0x000005BC, 0x000005E6, 0x000005BC, + 0x000005E7, 0x000005BC, 0x000005E8, 0x000005BC, + 0x000005E9, 0x000005BC, 0x000005EA, 0x000005BC, + 0x000005D5, 0x000005B9, 0x000005D1, 0x000005BF, + 0x000005DB, 0x000005BF, 0x000005E4, 0x000005BF, + 0x00011099, 0x000110BA, 0x0001109B, 0x000110BA, + 0x000110A5, 0x000110BA, 0x00011131, 0x00011127, + 0x00011132, 0x00011127, 0x00011347, 0x0001133E, + 0x00011347, 0x00011357, 0x000114B9, 0x000114BA, + 0x000114B9, 0x000114B0, 0x000114B9, 0x000114BD, + 0x000115B8, 0x000115AF, 0x000115B9, 0x000115AF, + 0x00011935, 0x00011930, 0x0001D157, 0x0001D165, + 0x0001D158, 0x0001D165, 0x0001D15F, 0x0001D16E, + 0x0001D15F, 0x0001D16F, 0x0001D15F, 0x0001D170, + 0x0001D15F, 0x0001D171, 0x0001D15F, 0x0001D172, + 0x0001D1B9, 0x0001D165, 0x0001D1BA, 0x0001D165, + 0x0001D1BB, 0x0001D16E, 0x0001D1BC, 0x0001D16E, + 0x0001D1BB, 0x0001D16F, 0x0001D1BC, 0x0001D16F, +}; + +static uint32_t const __CFUniCharDecompositionTableLength = 2061; + diff --git a/Sources/CoreFoundation/internalInclude/CFUniCharPrecompositionData.inc.h b/Sources/CoreFoundation/internalInclude/CFUniCharPrecompositionData.inc.h new file mode 100644 index 0000000000..916713b76a --- /dev/null +++ b/Sources/CoreFoundation/internalInclude/CFUniCharPrecompositionData.inc.h @@ -0,0 +1,287 @@ +/* + CFUniCharPrecompositionData.inc.h + Copyright (c) 1999-2021, Apple Inc. and the Swift project authors. All rights reserved. + This file is generated. Don't touch this file directly. +*/ +static UTF32Char const __CFUniCharPrecompSourceTable[] = { + 0x00000300, 0x00540000, 0x00000301, 0x00750054, + 0x00000302, 0x002000C9, 0x00000303, 0x001C00E9, + 0x00000304, 0x002C0105, 0x00000306, 0x00200131, + 0x00000307, 0x002E0151, 0x00000308, 0x0036017F, + 0x00000309, 0x001801B5, 0x0000030A, 0x000601CD, + 0x0000030B, 0x000601D3, 0x0000030C, 0x002501D9, + 0x0000030F, 0x000E01FE, 0x00000311, 0x000C020C, + 0x00000313, 0x000E0218, 0x00000314, 0x00100226, + 0x0000031B, 0x00040236, 0x00000323, 0x002A023A, + 0x00000324, 0x00020264, 0x00000325, 0x00020266, + 0x00000326, 0x00040268, 0x00000327, 0x0016026C, + 0x00000328, 0x000A0282, 0x0000032D, 0x000C028C, + 0x0000032E, 0x00020298, 0x00000330, 0x0006029A, + 0x00000331, 0x001102A0, 0x00000338, 0x002C02B1, + 0x00000342, 0x001D02DD, 0x00000345, 0x003F02FA, + 0x00000653, 0x00010339, 0x00000654, 0x0006033A, + 0x00000655, 0x00010340, 0x0000093C, 0x00030341, + 0x000009BE, 0x00010344, 0x000009D7, 0x00010345, + 0x00000B3E, 0x00010346, 0x00000B56, 0x00010347, + 0x00000B57, 0x00010348, 0x00000BBE, 0x00020349, + 0x00000BD7, 0x0002034B, 0x00000C56, 0x0001034D, + 0x00000CC2, 0x0001034E, 0x00000CD5, 0x0003034F, + 0x00000CD6, 0x00010352, 0x00000D3E, 0x00020353, + 0x00000D57, 0x00010355, 0x00000DCA, 0x00020356, + 0x00000DCF, 0x00010358, 0x00000DDF, 0x00010359, + 0x0000102E, 0x0001035A, 0x00001B35, 0x000B035B, + 0x00003099, 0x00300366, 0x0000309A, 0x000A0396, + 0x000110BA, 0x80030000, 0x00011127, 0x80020006, + 0x0001133E, 0x8001000A, 0x00011357, 0x8001000C, + 0x000114B0, 0x8001000E, 0x000114BA, 0x80010010, + 0x000114BD, 0x80010012, 0x000115AF, 0x80020014, + 0x00011930, 0x80010018, +}; + +static uint16_t const __CFUniCharBMPPrecompDestinationTable[] = { + 0x0041, 0x00C0, 0x0045, 0x00C8, 0x0049, 0x00CC, 0x004E, 0x01F8, + 0x004F, 0x00D2, 0x0055, 0x00D9, 0x0057, 0x1E80, 0x0059, 0x1EF2, + 0x0061, 0x00E0, 0x0065, 0x00E8, 0x0069, 0x00EC, 0x006E, 0x01F9, + 0x006F, 0x00F2, 0x0075, 0x00F9, 0x0077, 0x1E81, 0x0079, 0x1EF3, + 0x00A8, 0x1FED, 0x00C2, 0x1EA6, 0x00CA, 0x1EC0, 0x00D4, 0x1ED2, + 0x00DC, 0x01DB, 0x00E2, 0x1EA7, 0x00EA, 0x1EC1, 0x00F4, 0x1ED3, + 0x00FC, 0x01DC, 0x0102, 0x1EB0, 0x0103, 0x1EB1, 0x0112, 0x1E14, + 0x0113, 0x1E15, 0x014C, 0x1E50, 0x014D, 0x1E51, 0x01A0, 0x1EDC, + 0x01A1, 0x1EDD, 0x01AF, 0x1EEA, 0x01B0, 0x1EEB, 0x0391, 0x1FBA, + 0x0395, 0x1FC8, 0x0397, 0x1FCA, 0x0399, 0x1FDA, 0x039F, 0x1FF8, + 0x03A5, 0x1FEA, 0x03A9, 0x1FFA, 0x03B1, 0x1F70, 0x03B5, 0x1F72, + 0x03B7, 0x1F74, 0x03B9, 0x1F76, 0x03BF, 0x1F78, 0x03C5, 0x1F7A, + 0x03C9, 0x1F7C, 0x03CA, 0x1FD2, 0x03CB, 0x1FE2, 0x0415, 0x0400, + 0x0418, 0x040D, 0x0435, 0x0450, 0x0438, 0x045D, 0x1F00, 0x1F02, + 0x1F01, 0x1F03, 0x1F08, 0x1F0A, 0x1F09, 0x1F0B, 0x1F10, 0x1F12, + 0x1F11, 0x1F13, 0x1F18, 0x1F1A, 0x1F19, 0x1F1B, 0x1F20, 0x1F22, + 0x1F21, 0x1F23, 0x1F28, 0x1F2A, 0x1F29, 0x1F2B, 0x1F30, 0x1F32, + 0x1F31, 0x1F33, 0x1F38, 0x1F3A, 0x1F39, 0x1F3B, 0x1F40, 0x1F42, + 0x1F41, 0x1F43, 0x1F48, 0x1F4A, 0x1F49, 0x1F4B, 0x1F50, 0x1F52, + 0x1F51, 0x1F53, 0x1F59, 0x1F5B, 0x1F60, 0x1F62, 0x1F61, 0x1F63, + 0x1F68, 0x1F6A, 0x1F69, 0x1F6B, 0x1FBF, 0x1FCD, 0x1FFE, 0x1FDD, + 0x0041, 0x00C1, 0x0043, 0x0106, 0x0045, 0x00C9, 0x0047, 0x01F4, + 0x0049, 0x00CD, 0x004B, 0x1E30, 0x004C, 0x0139, 0x004D, 0x1E3E, + 0x004E, 0x0143, 0x004F, 0x00D3, 0x0050, 0x1E54, 0x0052, 0x0154, + 0x0053, 0x015A, 0x0055, 0x00DA, 0x0057, 0x1E82, 0x0059, 0x00DD, + 0x005A, 0x0179, 0x0061, 0x00E1, 0x0063, 0x0107, 0x0065, 0x00E9, + 0x0067, 0x01F5, 0x0069, 0x00ED, 0x006B, 0x1E31, 0x006C, 0x013A, + 0x006D, 0x1E3F, 0x006E, 0x0144, 0x006F, 0x00F3, 0x0070, 0x1E55, + 0x0072, 0x0155, 0x0073, 0x015B, 0x0075, 0x00FA, 0x0077, 0x1E83, + 0x0079, 0x00FD, 0x007A, 0x017A, 0x00A8, 0x0385, 0x00C2, 0x1EA4, + 0x00C5, 0x01FA, 0x00C6, 0x01FC, 0x00C7, 0x1E08, 0x00CA, 0x1EBE, + 0x00CF, 0x1E2E, 0x00D4, 0x1ED0, 0x00D5, 0x1E4C, 0x00D8, 0x01FE, + 0x00DC, 0x01D7, 0x00E2, 0x1EA5, 0x00E5, 0x01FB, 0x00E6, 0x01FD, + 0x00E7, 0x1E09, 0x00EA, 0x1EBF, 0x00EF, 0x1E2F, 0x00F4, 0x1ED1, + 0x00F5, 0x1E4D, 0x00F8, 0x01FF, 0x00FC, 0x01D8, 0x0102, 0x1EAE, + 0x0103, 0x1EAF, 0x0112, 0x1E16, 0x0113, 0x1E17, 0x014C, 0x1E52, + 0x014D, 0x1E53, 0x0168, 0x1E78, 0x0169, 0x1E79, 0x01A0, 0x1EDA, + 0x01A1, 0x1EDB, 0x01AF, 0x1EE8, 0x01B0, 0x1EE9, 0x0391, 0x0386, + 0x0395, 0x0388, 0x0397, 0x0389, 0x0399, 0x038A, 0x039F, 0x038C, + 0x03A5, 0x038E, 0x03A9, 0x038F, 0x03B1, 0x03AC, 0x03B5, 0x03AD, + 0x03B7, 0x03AE, 0x03B9, 0x03AF, 0x03BF, 0x03CC, 0x03C5, 0x03CD, + 0x03C9, 0x03CE, 0x03CA, 0x0390, 0x03CB, 0x03B0, 0x03D2, 0x03D3, + 0x0413, 0x0403, 0x041A, 0x040C, 0x0433, 0x0453, 0x043A, 0x045C, + 0x1F00, 0x1F04, 0x1F01, 0x1F05, 0x1F08, 0x1F0C, 0x1F09, 0x1F0D, + 0x1F10, 0x1F14, 0x1F11, 0x1F15, 0x1F18, 0x1F1C, 0x1F19, 0x1F1D, + 0x1F20, 0x1F24, 0x1F21, 0x1F25, 0x1F28, 0x1F2C, 0x1F29, 0x1F2D, + 0x1F30, 0x1F34, 0x1F31, 0x1F35, 0x1F38, 0x1F3C, 0x1F39, 0x1F3D, + 0x1F40, 0x1F44, 0x1F41, 0x1F45, 0x1F48, 0x1F4C, 0x1F49, 0x1F4D, + 0x1F50, 0x1F54, 0x1F51, 0x1F55, 0x1F59, 0x1F5D, 0x1F60, 0x1F64, + 0x1F61, 0x1F65, 0x1F68, 0x1F6C, 0x1F69, 0x1F6D, 0x1FBF, 0x1FCE, + 0x1FFE, 0x1FDE, 0x0041, 0x00C2, 0x0043, 0x0108, 0x0045, 0x00CA, + 0x0047, 0x011C, 0x0048, 0x0124, 0x0049, 0x00CE, 0x004A, 0x0134, + 0x004F, 0x00D4, 0x0053, 0x015C, 0x0055, 0x00DB, 0x0057, 0x0174, + 0x0059, 0x0176, 0x005A, 0x1E90, 0x0061, 0x00E2, 0x0063, 0x0109, + 0x0065, 0x00EA, 0x0067, 0x011D, 0x0068, 0x0125, 0x0069, 0x00EE, + 0x006A, 0x0135, 0x006F, 0x00F4, 0x0073, 0x015D, 0x0075, 0x00FB, + 0x0077, 0x0175, 0x0079, 0x0177, 0x007A, 0x1E91, 0x1EA0, 0x1EAC, + 0x1EA1, 0x1EAD, 0x1EB8, 0x1EC6, 0x1EB9, 0x1EC7, 0x1ECC, 0x1ED8, + 0x1ECD, 0x1ED9, 0x0041, 0x00C3, 0x0045, 0x1EBC, 0x0049, 0x0128, + 0x004E, 0x00D1, 0x004F, 0x00D5, 0x0055, 0x0168, 0x0056, 0x1E7C, + 0x0059, 0x1EF8, 0x0061, 0x00E3, 0x0065, 0x1EBD, 0x0069, 0x0129, + 0x006E, 0x00F1, 0x006F, 0x00F5, 0x0075, 0x0169, 0x0076, 0x1E7D, + 0x0079, 0x1EF9, 0x00C2, 0x1EAA, 0x00CA, 0x1EC4, 0x00D4, 0x1ED6, + 0x00E2, 0x1EAB, 0x00EA, 0x1EC5, 0x00F4, 0x1ED7, 0x0102, 0x1EB4, + 0x0103, 0x1EB5, 0x01A0, 0x1EE0, 0x01A1, 0x1EE1, 0x01AF, 0x1EEE, + 0x01B0, 0x1EEF, 0x0041, 0x0100, 0x0045, 0x0112, 0x0047, 0x1E20, + 0x0049, 0x012A, 0x004F, 0x014C, 0x0055, 0x016A, 0x0059, 0x0232, + 0x0061, 0x0101, 0x0065, 0x0113, 0x0067, 0x1E21, 0x0069, 0x012B, + 0x006F, 0x014D, 0x0075, 0x016B, 0x0079, 0x0233, 0x00C4, 0x01DE, + 0x00C6, 0x01E2, 0x00D5, 0x022C, 0x00D6, 0x022A, 0x00DC, 0x01D5, + 0x00E4, 0x01DF, 0x00E6, 0x01E3, 0x00F5, 0x022D, 0x00F6, 0x022B, + 0x00FC, 0x01D6, 0x01EA, 0x01EC, 0x01EB, 0x01ED, 0x0226, 0x01E0, + 0x0227, 0x01E1, 0x022E, 0x0230, 0x022F, 0x0231, 0x0391, 0x1FB9, + 0x0399, 0x1FD9, 0x03A5, 0x1FE9, 0x03B1, 0x1FB1, 0x03B9, 0x1FD1, + 0x03C5, 0x1FE1, 0x0418, 0x04E2, 0x0423, 0x04EE, 0x0438, 0x04E3, + 0x0443, 0x04EF, 0x1E36, 0x1E38, 0x1E37, 0x1E39, 0x1E5A, 0x1E5C, + 0x1E5B, 0x1E5D, 0x0041, 0x0102, 0x0045, 0x0114, 0x0047, 0x011E, + 0x0049, 0x012C, 0x004F, 0x014E, 0x0055, 0x016C, 0x0061, 0x0103, + 0x0065, 0x0115, 0x0067, 0x011F, 0x0069, 0x012D, 0x006F, 0x014F, + 0x0075, 0x016D, 0x0228, 0x1E1C, 0x0229, 0x1E1D, 0x0391, 0x1FB8, + 0x0399, 0x1FD8, 0x03A5, 0x1FE8, 0x03B1, 0x1FB0, 0x03B9, 0x1FD0, + 0x03C5, 0x1FE0, 0x0410, 0x04D0, 0x0415, 0x04D6, 0x0416, 0x04C1, + 0x0418, 0x0419, 0x0423, 0x040E, 0x0430, 0x04D1, 0x0435, 0x04D7, + 0x0436, 0x04C2, 0x0438, 0x0439, 0x0443, 0x045E, 0x1EA0, 0x1EB6, + 0x1EA1, 0x1EB7, 0x0041, 0x0226, 0x0042, 0x1E02, 0x0043, 0x010A, + 0x0044, 0x1E0A, 0x0045, 0x0116, 0x0046, 0x1E1E, 0x0047, 0x0120, + 0x0048, 0x1E22, 0x0049, 0x0130, 0x004D, 0x1E40, 0x004E, 0x1E44, + 0x004F, 0x022E, 0x0050, 0x1E56, 0x0052, 0x1E58, 0x0053, 0x1E60, + 0x0054, 0x1E6A, 0x0057, 0x1E86, 0x0058, 0x1E8A, 0x0059, 0x1E8E, + 0x005A, 0x017B, 0x0061, 0x0227, 0x0062, 0x1E03, 0x0063, 0x010B, + 0x0064, 0x1E0B, 0x0065, 0x0117, 0x0066, 0x1E1F, 0x0067, 0x0121, + 0x0068, 0x1E23, 0x006D, 0x1E41, 0x006E, 0x1E45, 0x006F, 0x022F, + 0x0070, 0x1E57, 0x0072, 0x1E59, 0x0073, 0x1E61, 0x0074, 0x1E6B, + 0x0077, 0x1E87, 0x0078, 0x1E8B, 0x0079, 0x1E8F, 0x007A, 0x017C, + 0x015A, 0x1E64, 0x015B, 0x1E65, 0x0160, 0x1E66, 0x0161, 0x1E67, + 0x017F, 0x1E9B, 0x1E62, 0x1E68, 0x1E63, 0x1E69, 0x0041, 0x00C4, + 0x0045, 0x00CB, 0x0048, 0x1E26, 0x0049, 0x00CF, 0x004F, 0x00D6, + 0x0055, 0x00DC, 0x0057, 0x1E84, 0x0058, 0x1E8C, 0x0059, 0x0178, + 0x0061, 0x00E4, 0x0065, 0x00EB, 0x0068, 0x1E27, 0x0069, 0x00EF, + 0x006F, 0x00F6, 0x0074, 0x1E97, 0x0075, 0x00FC, 0x0077, 0x1E85, + 0x0078, 0x1E8D, 0x0079, 0x00FF, 0x00D5, 0x1E4E, 0x00F5, 0x1E4F, + 0x016A, 0x1E7A, 0x016B, 0x1E7B, 0x0399, 0x03AA, 0x03A5, 0x03AB, + 0x03B9, 0x03CA, 0x03C5, 0x03CB, 0x03D2, 0x03D4, 0x0406, 0x0407, + 0x0410, 0x04D2, 0x0415, 0x0401, 0x0416, 0x04DC, 0x0417, 0x04DE, + 0x0418, 0x04E4, 0x041E, 0x04E6, 0x0423, 0x04F0, 0x0427, 0x04F4, + 0x042B, 0x04F8, 0x042D, 0x04EC, 0x0430, 0x04D3, 0x0435, 0x0451, + 0x0436, 0x04DD, 0x0437, 0x04DF, 0x0438, 0x04E5, 0x043E, 0x04E7, + 0x0443, 0x04F1, 0x0447, 0x04F5, 0x044B, 0x04F9, 0x044D, 0x04ED, + 0x0456, 0x0457, 0x04D8, 0x04DA, 0x04D9, 0x04DB, 0x04E8, 0x04EA, + 0x04E9, 0x04EB, 0x0041, 0x1EA2, 0x0045, 0x1EBA, 0x0049, 0x1EC8, + 0x004F, 0x1ECE, 0x0055, 0x1EE6, 0x0059, 0x1EF6, 0x0061, 0x1EA3, + 0x0065, 0x1EBB, 0x0069, 0x1EC9, 0x006F, 0x1ECF, 0x0075, 0x1EE7, + 0x0079, 0x1EF7, 0x00C2, 0x1EA8, 0x00CA, 0x1EC2, 0x00D4, 0x1ED4, + 0x00E2, 0x1EA9, 0x00EA, 0x1EC3, 0x00F4, 0x1ED5, 0x0102, 0x1EB2, + 0x0103, 0x1EB3, 0x01A0, 0x1EDE, 0x01A1, 0x1EDF, 0x01AF, 0x1EEC, + 0x01B0, 0x1EED, 0x0041, 0x00C5, 0x0055, 0x016E, 0x0061, 0x00E5, + 0x0075, 0x016F, 0x0077, 0x1E98, 0x0079, 0x1E99, 0x004F, 0x0150, + 0x0055, 0x0170, 0x006F, 0x0151, 0x0075, 0x0171, 0x0423, 0x04F2, + 0x0443, 0x04F3, 0x0041, 0x01CD, 0x0043, 0x010C, 0x0044, 0x010E, + 0x0045, 0x011A, 0x0047, 0x01E6, 0x0048, 0x021E, 0x0049, 0x01CF, + 0x004B, 0x01E8, 0x004C, 0x013D, 0x004E, 0x0147, 0x004F, 0x01D1, + 0x0052, 0x0158, 0x0053, 0x0160, 0x0054, 0x0164, 0x0055, 0x01D3, + 0x005A, 0x017D, 0x0061, 0x01CE, 0x0063, 0x010D, 0x0064, 0x010F, + 0x0065, 0x011B, 0x0067, 0x01E7, 0x0068, 0x021F, 0x0069, 0x01D0, + 0x006A, 0x01F0, 0x006B, 0x01E9, 0x006C, 0x013E, 0x006E, 0x0148, + 0x006F, 0x01D2, 0x0072, 0x0159, 0x0073, 0x0161, 0x0074, 0x0165, + 0x0075, 0x01D4, 0x007A, 0x017E, 0x00DC, 0x01D9, 0x00FC, 0x01DA, + 0x01B7, 0x01EE, 0x0292, 0x01EF, 0x0041, 0x0200, 0x0045, 0x0204, + 0x0049, 0x0208, 0x004F, 0x020C, 0x0052, 0x0210, 0x0055, 0x0214, + 0x0061, 0x0201, 0x0065, 0x0205, 0x0069, 0x0209, 0x006F, 0x020D, + 0x0072, 0x0211, 0x0075, 0x0215, 0x0474, 0x0476, 0x0475, 0x0477, + 0x0041, 0x0202, 0x0045, 0x0206, 0x0049, 0x020A, 0x004F, 0x020E, + 0x0052, 0x0212, 0x0055, 0x0216, 0x0061, 0x0203, 0x0065, 0x0207, + 0x0069, 0x020B, 0x006F, 0x020F, 0x0072, 0x0213, 0x0075, 0x0217, + 0x0391, 0x1F08, 0x0395, 0x1F18, 0x0397, 0x1F28, 0x0399, 0x1F38, + 0x039F, 0x1F48, 0x03A9, 0x1F68, 0x03B1, 0x1F00, 0x03B5, 0x1F10, + 0x03B7, 0x1F20, 0x03B9, 0x1F30, 0x03BF, 0x1F40, 0x03C1, 0x1FE4, + 0x03C5, 0x1F50, 0x03C9, 0x1F60, 0x0391, 0x1F09, 0x0395, 0x1F19, + 0x0397, 0x1F29, 0x0399, 0x1F39, 0x039F, 0x1F49, 0x03A1, 0x1FEC, + 0x03A5, 0x1F59, 0x03A9, 0x1F69, 0x03B1, 0x1F01, 0x03B5, 0x1F11, + 0x03B7, 0x1F21, 0x03B9, 0x1F31, 0x03BF, 0x1F41, 0x03C1, 0x1FE5, + 0x03C5, 0x1F51, 0x03C9, 0x1F61, 0x004F, 0x01A0, 0x0055, 0x01AF, + 0x006F, 0x01A1, 0x0075, 0x01B0, 0x0041, 0x1EA0, 0x0042, 0x1E04, + 0x0044, 0x1E0C, 0x0045, 0x1EB8, 0x0048, 0x1E24, 0x0049, 0x1ECA, + 0x004B, 0x1E32, 0x004C, 0x1E36, 0x004D, 0x1E42, 0x004E, 0x1E46, + 0x004F, 0x1ECC, 0x0052, 0x1E5A, 0x0053, 0x1E62, 0x0054, 0x1E6C, + 0x0055, 0x1EE4, 0x0056, 0x1E7E, 0x0057, 0x1E88, 0x0059, 0x1EF4, + 0x005A, 0x1E92, 0x0061, 0x1EA1, 0x0062, 0x1E05, 0x0064, 0x1E0D, + 0x0065, 0x1EB9, 0x0068, 0x1E25, 0x0069, 0x1ECB, 0x006B, 0x1E33, + 0x006C, 0x1E37, 0x006D, 0x1E43, 0x006E, 0x1E47, 0x006F, 0x1ECD, + 0x0072, 0x1E5B, 0x0073, 0x1E63, 0x0074, 0x1E6D, 0x0075, 0x1EE5, + 0x0076, 0x1E7F, 0x0077, 0x1E89, 0x0079, 0x1EF5, 0x007A, 0x1E93, + 0x01A0, 0x1EE2, 0x01A1, 0x1EE3, 0x01AF, 0x1EF0, 0x01B0, 0x1EF1, + 0x0055, 0x1E72, 0x0075, 0x1E73, 0x0041, 0x1E00, 0x0061, 0x1E01, + 0x0053, 0x0218, 0x0054, 0x021A, 0x0073, 0x0219, 0x0074, 0x021B, + 0x0043, 0x00C7, 0x0044, 0x1E10, 0x0045, 0x0228, 0x0047, 0x0122, + 0x0048, 0x1E28, 0x004B, 0x0136, 0x004C, 0x013B, 0x004E, 0x0145, + 0x0052, 0x0156, 0x0053, 0x015E, 0x0054, 0x0162, 0x0063, 0x00E7, + 0x0064, 0x1E11, 0x0065, 0x0229, 0x0067, 0x0123, 0x0068, 0x1E29, + 0x006B, 0x0137, 0x006C, 0x013C, 0x006E, 0x0146, 0x0072, 0x0157, + 0x0073, 0x015F, 0x0074, 0x0163, 0x0041, 0x0104, 0x0045, 0x0118, + 0x0049, 0x012E, 0x004F, 0x01EA, 0x0055, 0x0172, 0x0061, 0x0105, + 0x0065, 0x0119, 0x0069, 0x012F, 0x006F, 0x01EB, 0x0075, 0x0173, + 0x0044, 0x1E12, 0x0045, 0x1E18, 0x004C, 0x1E3C, 0x004E, 0x1E4A, + 0x0054, 0x1E70, 0x0055, 0x1E76, 0x0064, 0x1E13, 0x0065, 0x1E19, + 0x006C, 0x1E3D, 0x006E, 0x1E4B, 0x0074, 0x1E71, 0x0075, 0x1E77, + 0x0048, 0x1E2A, 0x0068, 0x1E2B, 0x0045, 0x1E1A, 0x0049, 0x1E2C, + 0x0055, 0x1E74, 0x0065, 0x1E1B, 0x0069, 0x1E2D, 0x0075, 0x1E75, + 0x0042, 0x1E06, 0x0044, 0x1E0E, 0x004B, 0x1E34, 0x004C, 0x1E3A, + 0x004E, 0x1E48, 0x0052, 0x1E5E, 0x0054, 0x1E6E, 0x005A, 0x1E94, + 0x0062, 0x1E07, 0x0064, 0x1E0F, 0x0068, 0x1E96, 0x006B, 0x1E35, + 0x006C, 0x1E3B, 0x006E, 0x1E49, 0x0072, 0x1E5F, 0x0074, 0x1E6F, + 0x007A, 0x1E95, 0x003C, 0x226E, 0x003D, 0x2260, 0x003E, 0x226F, + 0x2190, 0x219A, 0x2192, 0x219B, 0x2194, 0x21AE, 0x21D0, 0x21CD, + 0x21D2, 0x21CF, 0x21D4, 0x21CE, 0x2203, 0x2204, 0x2208, 0x2209, + 0x220B, 0x220C, 0x2223, 0x2224, 0x2225, 0x2226, 0x223C, 0x2241, + 0x2243, 0x2244, 0x2245, 0x2247, 0x2248, 0x2249, 0x224D, 0x226D, + 0x2261, 0x2262, 0x2264, 0x2270, 0x2265, 0x2271, 0x2272, 0x2274, + 0x2273, 0x2275, 0x2276, 0x2278, 0x2277, 0x2279, 0x227A, 0x2280, + 0x227B, 0x2281, 0x227C, 0x22E0, 0x227D, 0x22E1, 0x2282, 0x2284, + 0x2283, 0x2285, 0x2286, 0x2288, 0x2287, 0x2289, 0x2291, 0x22E2, + 0x2292, 0x22E3, 0x22A2, 0x22AC, 0x22A8, 0x22AD, 0x22A9, 0x22AE, + 0x22AB, 0x22AF, 0x22B2, 0x22EA, 0x22B3, 0x22EB, 0x22B4, 0x22EC, + 0x22B5, 0x22ED, 0x00A8, 0x1FC1, 0x03B1, 0x1FB6, 0x03B7, 0x1FC6, + 0x03B9, 0x1FD6, 0x03C5, 0x1FE6, 0x03C9, 0x1FF6, 0x03CA, 0x1FD7, + 0x03CB, 0x1FE7, 0x1F00, 0x1F06, 0x1F01, 0x1F07, 0x1F08, 0x1F0E, + 0x1F09, 0x1F0F, 0x1F20, 0x1F26, 0x1F21, 0x1F27, 0x1F28, 0x1F2E, + 0x1F29, 0x1F2F, 0x1F30, 0x1F36, 0x1F31, 0x1F37, 0x1F38, 0x1F3E, + 0x1F39, 0x1F3F, 0x1F50, 0x1F56, 0x1F51, 0x1F57, 0x1F59, 0x1F5F, + 0x1F60, 0x1F66, 0x1F61, 0x1F67, 0x1F68, 0x1F6E, 0x1F69, 0x1F6F, + 0x1FBF, 0x1FCF, 0x1FFE, 0x1FDF, 0x0391, 0x1FBC, 0x0397, 0x1FCC, + 0x03A9, 0x1FFC, 0x03AC, 0x1FB4, 0x03AE, 0x1FC4, 0x03B1, 0x1FB3, + 0x03B7, 0x1FC3, 0x03C9, 0x1FF3, 0x03CE, 0x1FF4, 0x1F00, 0x1F80, + 0x1F01, 0x1F81, 0x1F02, 0x1F82, 0x1F03, 0x1F83, 0x1F04, 0x1F84, + 0x1F05, 0x1F85, 0x1F06, 0x1F86, 0x1F07, 0x1F87, 0x1F08, 0x1F88, + 0x1F09, 0x1F89, 0x1F0A, 0x1F8A, 0x1F0B, 0x1F8B, 0x1F0C, 0x1F8C, + 0x1F0D, 0x1F8D, 0x1F0E, 0x1F8E, 0x1F0F, 0x1F8F, 0x1F20, 0x1F90, + 0x1F21, 0x1F91, 0x1F22, 0x1F92, 0x1F23, 0x1F93, 0x1F24, 0x1F94, + 0x1F25, 0x1F95, 0x1F26, 0x1F96, 0x1F27, 0x1F97, 0x1F28, 0x1F98, + 0x1F29, 0x1F99, 0x1F2A, 0x1F9A, 0x1F2B, 0x1F9B, 0x1F2C, 0x1F9C, + 0x1F2D, 0x1F9D, 0x1F2E, 0x1F9E, 0x1F2F, 0x1F9F, 0x1F60, 0x1FA0, + 0x1F61, 0x1FA1, 0x1F62, 0x1FA2, 0x1F63, 0x1FA3, 0x1F64, 0x1FA4, + 0x1F65, 0x1FA5, 0x1F66, 0x1FA6, 0x1F67, 0x1FA7, 0x1F68, 0x1FA8, + 0x1F69, 0x1FA9, 0x1F6A, 0x1FAA, 0x1F6B, 0x1FAB, 0x1F6C, 0x1FAC, + 0x1F6D, 0x1FAD, 0x1F6E, 0x1FAE, 0x1F6F, 0x1FAF, 0x1F70, 0x1FB2, + 0x1F74, 0x1FC2, 0x1F7C, 0x1FF2, 0x1FB6, 0x1FB7, 0x1FC6, 0x1FC7, + 0x1FF6, 0x1FF7, 0x0627, 0x0622, 0x0627, 0x0623, 0x0648, 0x0624, + 0x064A, 0x0626, 0x06C1, 0x06C2, 0x06D2, 0x06D3, 0x06D5, 0x06C0, + 0x0627, 0x0625, 0x0928, 0x0929, 0x0930, 0x0931, 0x0933, 0x0934, + 0x09C7, 0x09CB, 0x09C7, 0x09CC, 0x0B47, 0x0B4B, 0x0B47, 0x0B48, + 0x0B47, 0x0B4C, 0x0BC6, 0x0BCA, 0x0BC7, 0x0BCB, 0x0B92, 0x0B94, + 0x0BC6, 0x0BCC, 0x0C46, 0x0C48, 0x0CC6, 0x0CCA, 0x0CBF, 0x0CC0, + 0x0CC6, 0x0CC7, 0x0CCA, 0x0CCB, 0x0CC6, 0x0CC8, 0x0D46, 0x0D4A, + 0x0D47, 0x0D4B, 0x0D46, 0x0D4C, 0x0DD9, 0x0DDA, 0x0DDC, 0x0DDD, + 0x0DD9, 0x0DDC, 0x0DD9, 0x0DDE, 0x1025, 0x1026, 0x1B05, 0x1B06, + 0x1B07, 0x1B08, 0x1B09, 0x1B0A, 0x1B0B, 0x1B0C, 0x1B0D, 0x1B0E, + 0x1B11, 0x1B12, 0x1B3A, 0x1B3B, 0x1B3C, 0x1B3D, 0x1B3E, 0x1B40, + 0x1B3F, 0x1B41, 0x1B42, 0x1B43, 0x3046, 0x3094, 0x304B, 0x304C, + 0x304D, 0x304E, 0x304F, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, + 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, + 0x305D, 0x305E, 0x305F, 0x3060, 0x3061, 0x3062, 0x3064, 0x3065, + 0x3066, 0x3067, 0x3068, 0x3069, 0x306F, 0x3070, 0x3072, 0x3073, + 0x3075, 0x3076, 0x3078, 0x3079, 0x307B, 0x307C, 0x309D, 0x309E, + 0x30A6, 0x30F4, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, + 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, 0x30B8, + 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, 0x30C0, + 0x30C1, 0x30C2, 0x30C4, 0x30C5, 0x30C6, 0x30C7, 0x30C8, 0x30C9, + 0x30CF, 0x30D0, 0x30D2, 0x30D3, 0x30D5, 0x30D6, 0x30D8, 0x30D9, + 0x30DB, 0x30DC, 0x30EF, 0x30F7, 0x30F0, 0x30F8, 0x30F1, 0x30F9, + 0x30F2, 0x30FA, 0x30FD, 0x30FE, 0x306F, 0x3071, 0x3072, 0x3074, + 0x3075, 0x3077, 0x3078, 0x307A, 0x307B, 0x307D, 0x30CF, 0x30D1, + 0x30D2, 0x30D4, 0x30D5, 0x30D7, 0x30D8, 0x30DA, 0x30DB, 0x30DD, +}; + +static uint32_t const __CFUniCharNonBMPPrecompDestinationTable[] = { + 0x00011099, 0x0001109A, 0x0001109B, 0x0001109C, + 0x000110A5, 0x000110AB, 0x00011131, 0x0001112E, + 0x00011132, 0x0001112F, 0x00011347, 0x0001134B, + 0x00011347, 0x0001134C, 0x000114B9, 0x000114BC, + 0x000114B9, 0x000114BB, 0x000114B9, 0x000114BE, + 0x000115B8, 0x000115BA, 0x000115B9, 0x000115BB, + 0x00011935, 0x00011938, +}; + +static uint32_t const __CFUniCharPrecompositionTableLength = 63; + diff --git a/Sources/CoreFoundation/include/CFUniCharPriv.h b/Sources/CoreFoundation/internalInclude/CFUniCharPriv.h similarity index 100% rename from Sources/CoreFoundation/include/CFUniCharPriv.h rename to Sources/CoreFoundation/internalInclude/CFUniCharPriv.h diff --git a/Sources/CoreFoundation/internalInclude/CFUniCharPropertyDatabase.inc.h b/Sources/CoreFoundation/internalInclude/CFUniCharPropertyDatabase.inc.h new file mode 100644 index 0000000000..a292d98362 --- /dev/null +++ b/Sources/CoreFoundation/internalInclude/CFUniCharPropertyDatabase.inc.h @@ -0,0 +1,1495 @@ +/* + CFUniCharPropertyDatabase.inc.h + Copyright (c) 1999-2021, Apple Inc. and the Swift project authors. All rights reserved. + This file is generated. Don't touch this file directly. +*/ +#include "CFUniCharBitmapData.h" + +static uint32_t const __CFUniCharBidiPropertyTableCount = 15; +static uint8_t const __CFUniCharBidiPropertyPlane0[] = { + 0x13, 0x01, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x01, 0x01, 0x23, 0x24, 0x01, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x01, 0x2D, + 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x00, 0x33, 0x00, 0x01, 0x00, 0x00, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x3E, 0x01, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x45, 0x05, 0x46, 0x47, 0x48, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0B, 0x0D, 0x0B, 0x0C, 0x0D, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0D, 0x0D, 0x0D, 0x0B, + 0x0C, 0x00, 0x00, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x07, 0x08, 0x07, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0D, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x07, 0x00, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x09, 0x09, 0x04, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x09, 0x02, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x02, 0x06, + 0x02, 0x06, 0x06, 0x02, 0x06, 0x06, 0x02, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x05, 0x09, 0x09, 0x05, 0x07, 0x05, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x09, 0x03, 0x03, 0x05, 0x05, 0x05, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x00, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x05, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x06, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x06, 0x06, 0x06, 0x02, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x02, 0x06, 0x06, 0x06, 0x02, 0x06, 0x06, 0x06, 0x06, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x06, 0x06, 0x02, 0x02, 0x02, 0x02, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x02, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x03, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x06, 0x01, 0x01, 0x01, + 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, + 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x01, 0x01, 0x06, 0x01, + 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, + 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, + 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, + 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x06, 0x06, + 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, + 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x09, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x06, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, + 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x0C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x01, 0x06, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x0A, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, + 0x06, 0x01, 0x06, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x01, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x06, 0x01, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, + 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0A, 0x0A, 0x0A, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0D, 0x11, 0x0F, 0x12, 0x10, 0x0E, 0x07, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x04, 0x01, 0x01, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x00, 0x00, 0x00, 0x01, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, + 0x0C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, + 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x06, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x08, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09, 0x09, 0x00, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x0A, + 0x01, 0x00, 0x00, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x07, 0x08, 0x07, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x09, 0x09, 0x00, 0x00, 0x00, 0x09, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, +}; + +static uint8_t const __CFUniCharBidiPropertyPlane1[] = { + 0x01, 0x13, 0x14, 0x15, 0x01, 0x01, 0x01, 0x01, 0x02, 0x16, 0x17, 0x18, 0x02, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x01, 0x27, 0x28, 0x29, 0x2A, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2C, 0x2D, 0x01, 0x01, 0x01, 0x2E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2F, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x30, 0x01, 0x31, 0x32, 0x33, 0x01, 0x01, 0x34, 0x35, 0x01, 0x01, 0x36, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x37, 0x38, 0x39, 0x01, 0x3A, 0x01, 0x01, 0x01, 0x3B, 0x3C, 0x01, 0x01, 0x3D, 0x3E, 0x3F, 0x01, 0x40, 0x41, 0x42, 0x00, 0x00, 0x00, 0x43, 0x44, 0x45, 0x00, 0x46, 0x47, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x06, 0x06, 0x06, 0x02, 0x06, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x06, 0x06, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x06, 0x06, 0x02, 0x02, 0x02, 0x02, 0x06, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x06, 0x06, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x06, 0x06, 0x06, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, + 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, + 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, + 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, + 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x01, 0x01, 0x06, 0x06, 0x06, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x06, + 0x06, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x06, + 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x01, 0x06, + 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x06, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, + 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x06, 0x01, + 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x06, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x06, 0x01, 0x06, 0x06, 0x01, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x06, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x01, + 0x0A, 0x0A, 0x0A, 0x0A, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x06, 0x06, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x01, 0x06, 0x06, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x05, 0x05, 0x05, 0x05, 0x01, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x01, 0x05, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05, 0x01, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x05, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x05, 0x01, 0x05, 0x01, 0x05, 0x01, 0x05, 0x05, 0x05, 0x01, 0x05, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05, 0x01, 0x05, 0x01, 0x05, 0x01, 0x05, 0x01, 0x05, + 0x01, 0x05, 0x05, 0x01, 0x05, 0x01, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x05, 0x01, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x01, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x05, 0x05, 0x05, 0x01, 0x05, 0x05, 0x05, 0x05, 0x05, 0x01, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +}; + +static uint8_t const __CFUniCharBidiPropertyPlane14[] = { + 0x13, 0x14, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x0A, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +}; + +static uint8_t const * const __CFUniCharBidiProperty[15] = { + __CFUniCharBidiPropertyPlane0, + __CFUniCharBidiPropertyPlane1, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + __CFUniCharBidiPropertyPlane14, + +}; + +static uint32_t const __CFUniCharCombiningPriorityTableCount = 2; +static uint8_t const __CFUniCharCombiningPriorityTablePlane0[] = { + 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x19, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x1C, 0x1D, 0x1E, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, + 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE8, 0xDC, 0xDC, 0xDC, 0xDC, 0xE8, 0xD8, 0xDC, 0xDC, 0xDC, 0xDC, + 0xDC, 0xCA, 0xCA, 0xDC, 0xDC, 0xDC, 0xDC, 0xCA, 0xCA, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0x01, 0x01, 0x01, 0x01, 0x01, 0xDC, 0xDC, 0xDC, 0xDC, 0xE6, 0xE6, 0xE6, + 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xF0, 0xE6, 0xDC, 0xDC, 0xDC, 0xE6, 0xE6, 0xE6, 0xDC, 0xDC, 0x00, 0xE6, 0xE6, 0xE6, 0xDC, 0xDC, 0xDC, 0xDC, 0xE6, 0xE8, 0xDC, 0xDC, 0xE6, 0xE9, 0xEA, 0xEA, 0xE9, + 0xEA, 0xEA, 0xE9, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xE6, 0xE6, 0xE6, 0xE6, 0xDC, 0xE6, 0xE6, 0xE6, 0xDE, 0xDC, 0xE6, 0xE6, 0xE6, 0xE6, + 0xE6, 0xE6, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xE6, 0xE6, 0xDC, 0xE6, 0xE6, 0xDE, 0xE4, 0xE6, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x13, 0x14, 0x15, 0x16, 0x00, 0x17, + 0x00, 0x18, 0x19, 0x00, 0xE6, 0xDC, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x1E, 0x1F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0xE6, 0xE6, 0xDC, 0xDC, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xDC, 0xE6, 0xE6, 0xDC, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0xE6, + 0xE6, 0xE6, 0xE6, 0xDC, 0xE6, 0x00, 0x00, 0xE6, 0xE6, 0x00, 0xDC, 0xE6, 0xE6, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xDC, 0xE6, 0xE6, 0xDC, 0xE6, 0xE6, 0xDC, 0xDC, 0xDC, 0xE6, 0xDC, 0xDC, 0xE6, 0xDC, 0xE6, + 0xE6, 0xE6, 0xDC, 0xE6, 0xDC, 0xE6, 0xDC, 0xE6, 0xDC, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xDC, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, + 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0xE6, 0xE6, 0xE6, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xDC, 0xDC, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xDC, 0xDC, 0xDC, 0xE6, 0xE6, 0xE6, 0xE6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, + 0xE6, 0xE6, 0x00, 0xDC, 0xE6, 0xE6, 0xDC, 0xE6, 0xE6, 0xDC, 0xE6, 0xE6, 0xE6, 0xDC, 0xDC, 0xDC, 0x1B, 0x1C, 0x1D, 0xE6, 0xE6, 0xE6, 0xDC, 0xE6, 0xE6, 0xDC, 0xDC, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xE6, 0xDC, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x67, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x6B, 0x6B, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x76, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x7A, 0x7A, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x00, 0xDC, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x82, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x82, 0x82, 0x00, 0x00, + 0x82, 0x00, 0xE6, 0xE6, 0x09, 0x00, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xE6, 0xDC, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0xDC, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xE6, 0xE6, 0xDC, 0x00, 0xDC, + 0xDC, 0xE6, 0xE6, 0xDC, 0xDC, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xDC, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xDC, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0x00, 0x01, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xE6, 0xE6, 0xDC, 0xDC, 0xDC, 0xDC, + 0xE6, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE6, 0xE6, 0xDC, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xDC, 0xE6, 0xE6, 0xEA, 0xD6, 0xDC, 0xCA, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, + 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE8, 0xE4, 0xE4, 0xDC, 0xDA, 0xE6, 0xE9, 0xDC, 0xE6, 0xDC, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0x01, 0x01, 0xE6, 0xE6, 0xE6, 0xE6, 0x01, 0x01, 0x01, 0xE6, 0xE6, 0x00, 0x00, 0x00, + 0x00, 0xE6, 0x00, 0x00, 0x00, 0x01, 0x01, 0xE6, 0xDC, 0xE6, 0x01, 0x01, 0xDC, 0xDC, 0xDC, 0xDC, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xE4, 0xE8, 0xDE, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xDC, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x00, 0xE6, 0xE6, 0xDC, 0x00, 0x00, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, + 0x00, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +static uint8_t const __CFUniCharCombiningPriorityTablePlane1[] = { + 0x00, 0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x00, 0x13, 0x14, 0x00, 0x15, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x17, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x1D, 0x1E, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x00, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x01, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xDC, 0xDC, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xDC, 0xE6, 0xE6, 0xE6, 0xDC, 0xE6, 0xDC, 0xDC, 0xDC, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE6, 0xDC, 0xE6, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xD8, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0xE2, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, + 0xDC, 0xDC, 0xDC, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xDC, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, + 0xE6, 0xE6, 0x00, 0xE6, 0xE6, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE8, 0xDC, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +static uint8_t const * const __CFUniCharCombiningPriorityTable[2] = { + __CFUniCharCombiningPriorityTablePlane0, + __CFUniCharCombiningPriorityTablePlane1, + +}; + +static uint32_t const __CFUniCharUnicodePropertyTableCount = 2; +static __CFUniCharBitmapData const __CFUniCharUnicodePropertyTable[] = { + { ._numPlanes = __CFUniCharCombiningPriorityTableCount, ._planes = __CFUniCharCombiningPriorityTable }, + { ._numPlanes = __CFUniCharBidiPropertyTableCount, ._planes = __CFUniCharBidiProperty }, +}; + diff --git a/Sources/CoreFoundation/internalInclude/CFUnicodeCaseMapping-B.inc.h b/Sources/CoreFoundation/internalInclude/CFUnicodeCaseMapping-B.inc.h new file mode 100644 index 0000000000..5defe41728 --- /dev/null +++ b/Sources/CoreFoundation/internalInclude/CFUnicodeCaseMapping-B.inc.h @@ -0,0 +1,1811 @@ +/* + CFUnicodeCaseMapping-B.inc.h + Copyright (c) 1999-2021, Apple Inc. and the Swift project authors. All rights reserved. + This file is generated. Don't touch this file directly. +*/ + +#if __BIG_ENDIAN__ + +static uint32_t const __CFUniCharToUppercaseMappingTable[] = { + 0x61000000, 0x41000001, 0x62000000, 0x42000001, + 0x63000000, 0x43000001, 0x64000000, 0x44000001, + 0x65000000, 0x45000001, 0x66000000, 0x46000001, + 0x67000000, 0x47000001, 0x68000000, 0x48000001, + 0x69000000, 0x49000001, 0x6A000000, 0x4A000001, + 0x6B000000, 0x4B000001, 0x6C000000, 0x4C000001, + 0x6D000000, 0x4D000001, 0x6E000000, 0x4E000001, + 0x6F000000, 0x4F000001, 0x70000000, 0x50000001, + 0x71000000, 0x51000001, 0x72000000, 0x52000001, + 0x73000000, 0x53000001, 0x74000000, 0x54000001, + 0x75000000, 0x55000001, 0x76000000, 0x56000001, + 0x77000000, 0x57000001, 0x78000000, 0x58000001, + 0x79000000, 0x59000001, 0x7A000000, 0x5A000001, + 0xB5000000, 0x9C030001, 0xDF000000, 0x00000002, + 0xE0000000, 0xC0000001, 0xE1000000, 0xC1000001, + 0xE2000000, 0xC2000001, 0xE3000000, 0xC3000001, + 0xE4000000, 0xC4000001, 0xE5000000, 0xC5000001, + 0xE6000000, 0xC6000001, 0xE7000000, 0xC7000001, + 0xE8000000, 0xC8000001, 0xE9000000, 0xC9000001, + 0xEA000000, 0xCA000001, 0xEB000000, 0xCB000001, + 0xEC000000, 0xCC000001, 0xED000000, 0xCD000001, + 0xEE000000, 0xCE000001, 0xEF000000, 0xCF000001, + 0xF0000000, 0xD0000001, 0xF1000000, 0xD1000001, + 0xF2000000, 0xD2000001, 0xF3000000, 0xD3000001, + 0xF4000000, 0xD4000001, 0xF5000000, 0xD5000001, + 0xF6000000, 0xD6000001, 0xF8000000, 0xD8000001, + 0xF9000000, 0xD9000001, 0xFA000000, 0xDA000001, + 0xFB000000, 0xDB000001, 0xFC000000, 0xDC000001, + 0xFD000000, 0xDD000001, 0xFE000000, 0xDE000001, + 0xFF000000, 0x78010001, 0x01010000, 0x00010001, + 0x03010000, 0x02010001, 0x05010000, 0x04010001, + 0x07010000, 0x06010001, 0x09010000, 0x08010001, + 0x0B010000, 0x0A010001, 0x0D010000, 0x0C010001, + 0x0F010000, 0x0E010001, 0x11010000, 0x10010001, + 0x13010000, 0x12010001, 0x15010000, 0x14010001, + 0x17010000, 0x16010001, 0x19010000, 0x18010001, + 0x1B010000, 0x1A010001, 0x1D010000, 0x1C010001, + 0x1F010000, 0x1E010001, 0x21010000, 0x20010001, + 0x23010000, 0x22010001, 0x25010000, 0x24010001, + 0x27010000, 0x26010001, 0x29010000, 0x28010001, + 0x2B010000, 0x2A010001, 0x2D010000, 0x2C010001, + 0x2F010000, 0x2E010001, 0x31010000, 0x49000001, + 0x33010000, 0x32010001, 0x35010000, 0x34010001, + 0x37010000, 0x36010001, 0x3A010000, 0x39010001, + 0x3C010000, 0x3B010001, 0x3E010000, 0x3D010001, + 0x40010000, 0x3F010001, 0x42010000, 0x41010001, + 0x44010000, 0x43010001, 0x46010000, 0x45010001, + 0x48010000, 0x47010001, 0x49010000, 0x02000002, + 0x4B010000, 0x4A010001, 0x4D010000, 0x4C010001, + 0x4F010000, 0x4E010001, 0x51010000, 0x50010001, + 0x53010000, 0x52010001, 0x55010000, 0x54010001, + 0x57010000, 0x56010001, 0x59010000, 0x58010001, + 0x5B010000, 0x5A010001, 0x5D010000, 0x5C010001, + 0x5F010000, 0x5E010001, 0x61010000, 0x60010001, + 0x63010000, 0x62010001, 0x65010000, 0x64010001, + 0x67010000, 0x66010001, 0x69010000, 0x68010001, + 0x6B010000, 0x6A010001, 0x6D010000, 0x6C010001, + 0x6F010000, 0x6E010001, 0x71010000, 0x70010001, + 0x73010000, 0x72010001, 0x75010000, 0x74010001, + 0x77010000, 0x76010001, 0x7A010000, 0x79010001, + 0x7C010000, 0x7B010001, 0x7E010000, 0x7D010001, + 0x7F010000, 0x53000001, 0x80010000, 0x43020001, + 0x83010000, 0x82010001, 0x85010000, 0x84010001, + 0x88010000, 0x87010001, 0x8C010000, 0x8B010001, + 0x92010000, 0x91010001, 0x95010000, 0xF6010001, + 0x99010000, 0x98010001, 0x9A010000, 0x3D020001, + 0x9E010000, 0x20020001, 0xA1010000, 0xA0010001, + 0xA3010000, 0xA2010001, 0xA5010000, 0xA4010001, + 0xA8010000, 0xA7010001, 0xAD010000, 0xAC010001, + 0xB0010000, 0xAF010001, 0xB4010000, 0xB3010001, + 0xB6010000, 0xB5010001, 0xB9010000, 0xB8010001, + 0xBD010000, 0xBC010001, 0xBF010000, 0xF7010001, + 0xC5010000, 0xC4010001, 0xC6010000, 0xC4010001, + 0xC8010000, 0xC7010001, 0xC9010000, 0xC7010001, + 0xCB010000, 0xCA010001, 0xCC010000, 0xCA010001, + 0xCE010000, 0xCD010001, 0xD0010000, 0xCF010001, + 0xD2010000, 0xD1010001, 0xD4010000, 0xD3010001, + 0xD6010000, 0xD5010001, 0xD8010000, 0xD7010001, + 0xDA010000, 0xD9010001, 0xDC010000, 0xDB010001, + 0xDD010000, 0x8E010001, 0xDF010000, 0xDE010001, + 0xE1010000, 0xE0010001, 0xE3010000, 0xE2010001, + 0xE5010000, 0xE4010001, 0xE7010000, 0xE6010001, + 0xE9010000, 0xE8010001, 0xEB010000, 0xEA010001, + 0xED010000, 0xEC010001, 0xEF010000, 0xEE010001, + 0xF0010000, 0x04000002, 0xF2010000, 0xF1010001, + 0xF3010000, 0xF1010001, 0xF5010000, 0xF4010001, + 0xF9010000, 0xF8010001, 0xFB010000, 0xFA010001, + 0xFD010000, 0xFC010001, 0xFF010000, 0xFE010001, + 0x01020000, 0x00020001, 0x03020000, 0x02020001, + 0x05020000, 0x04020001, 0x07020000, 0x06020001, + 0x09020000, 0x08020001, 0x0B020000, 0x0A020001, + 0x0D020000, 0x0C020001, 0x0F020000, 0x0E020001, + 0x11020000, 0x10020001, 0x13020000, 0x12020001, + 0x15020000, 0x14020001, 0x17020000, 0x16020001, + 0x19020000, 0x18020001, 0x1B020000, 0x1A020001, + 0x1D020000, 0x1C020001, 0x1F020000, 0x1E020001, + 0x23020000, 0x22020001, 0x25020000, 0x24020001, + 0x27020000, 0x26020001, 0x29020000, 0x28020001, + 0x2B020000, 0x2A020001, 0x2D020000, 0x2C020001, + 0x2F020000, 0x2E020001, 0x31020000, 0x30020001, + 0x33020000, 0x32020001, 0x3C020000, 0x3B020001, + 0x3F020000, 0x7E2C0001, 0x40020000, 0x7F2C0001, + 0x42020000, 0x41020001, 0x47020000, 0x46020001, + 0x49020000, 0x48020001, 0x4B020000, 0x4A020001, + 0x4D020000, 0x4C020001, 0x4F020000, 0x4E020001, + 0x50020000, 0x6F2C0001, 0x51020000, 0x6D2C0001, + 0x52020000, 0x702C0001, 0x53020000, 0x81010001, + 0x54020000, 0x86010001, 0x56020000, 0x89010001, + 0x57020000, 0x8A010001, 0x59020000, 0x8F010001, + 0x5B020000, 0x90010001, 0x5C020000, 0xABA70001, + 0x60020000, 0x93010001, 0x61020000, 0xACA70001, + 0x63020000, 0x94010001, 0x65020000, 0x8DA70001, + 0x66020000, 0xAAA70001, 0x68020000, 0x97010001, + 0x69020000, 0x96010001, 0x6A020000, 0xAEA70001, + 0x6B020000, 0x622C0001, 0x6C020000, 0xADA70001, + 0x6F020000, 0x9C010001, 0x71020000, 0x6E2C0001, + 0x72020000, 0x9D010001, 0x75020000, 0x9F010001, + 0x7D020000, 0x642C0001, 0x80020000, 0xA6010001, + 0x82020000, 0xC5A70001, 0x83020000, 0xA9010001, + 0x87020000, 0xB1A70001, 0x88020000, 0xAE010001, + 0x89020000, 0x44020001, 0x8A020000, 0xB1010001, + 0x8B020000, 0xB2010001, 0x8C020000, 0x45020001, + 0x92020000, 0xB7010001, 0x9D020000, 0xB2A70001, + 0x9E020000, 0xB0A70001, 0x45030000, 0x99030001, + 0x71030000, 0x70030001, 0x73030000, 0x72030001, + 0x77030000, 0x76030001, 0x7B030000, 0xFD030001, + 0x7C030000, 0xFE030001, 0x7D030000, 0xFF030001, + 0x90030000, 0x06000003, 0xAC030000, 0x86030001, + 0xAD030000, 0x88030001, 0xAE030000, 0x89030001, + 0xAF030000, 0x8A030001, 0xB0030000, 0x09000003, + 0xB1030000, 0x91030001, 0xB2030000, 0x92030001, + 0xB3030000, 0x93030001, 0xB4030000, 0x94030001, + 0xB5030000, 0x95030001, 0xB6030000, 0x96030001, + 0xB7030000, 0x97030001, 0xB8030000, 0x98030001, + 0xB9030000, 0x99030001, 0xBA030000, 0x9A030001, + 0xBB030000, 0x9B030001, 0xBC030000, 0x9C030001, + 0xBD030000, 0x9D030001, 0xBE030000, 0x9E030001, + 0xBF030000, 0x9F030001, 0xC0030000, 0xA0030001, + 0xC1030000, 0xA1030001, 0xC2030000, 0xA3030001, + 0xC3030000, 0xA3030001, 0xC4030000, 0xA4030001, + 0xC5030000, 0xA5030001, 0xC6030000, 0xA6030001, + 0xC7030000, 0xA7030001, 0xC8030000, 0xA8030001, + 0xC9030000, 0xA9030001, 0xCA030000, 0xAA030001, + 0xCB030000, 0xAB030001, 0xCC030000, 0x8C030001, + 0xCD030000, 0x8E030001, 0xCE030000, 0x8F030001, + 0xD0030000, 0x92030001, 0xD1030000, 0x98030001, + 0xD5030000, 0xA6030001, 0xD6030000, 0xA0030001, + 0xD7030000, 0xCF030001, 0xD9030000, 0xD8030001, + 0xDB030000, 0xDA030001, 0xDD030000, 0xDC030001, + 0xDF030000, 0xDE030001, 0xE1030000, 0xE0030001, + 0xE3030000, 0xE2030001, 0xE5030000, 0xE4030001, + 0xE7030000, 0xE6030001, 0xE9030000, 0xE8030001, + 0xEB030000, 0xEA030001, 0xED030000, 0xEC030001, + 0xEF030000, 0xEE030001, 0xF0030000, 0x9A030001, + 0xF1030000, 0xA1030001, 0xF2030000, 0xF9030001, + 0xF3030000, 0x7F030001, 0xF5030000, 0x95030001, + 0xF8030000, 0xF7030001, 0xFB030000, 0xFA030001, + 0x30040000, 0x10040001, 0x31040000, 0x11040001, + 0x32040000, 0x12040001, 0x33040000, 0x13040001, + 0x34040000, 0x14040001, 0x35040000, 0x15040001, + 0x36040000, 0x16040001, 0x37040000, 0x17040001, + 0x38040000, 0x18040001, 0x39040000, 0x19040001, + 0x3A040000, 0x1A040001, 0x3B040000, 0x1B040001, + 0x3C040000, 0x1C040001, 0x3D040000, 0x1D040001, + 0x3E040000, 0x1E040001, 0x3F040000, 0x1F040001, + 0x40040000, 0x20040001, 0x41040000, 0x21040001, + 0x42040000, 0x22040001, 0x43040000, 0x23040001, + 0x44040000, 0x24040001, 0x45040000, 0x25040001, + 0x46040000, 0x26040001, 0x47040000, 0x27040001, + 0x48040000, 0x28040001, 0x49040000, 0x29040001, + 0x4A040000, 0x2A040001, 0x4B040000, 0x2B040001, + 0x4C040000, 0x2C040001, 0x4D040000, 0x2D040001, + 0x4E040000, 0x2E040001, 0x4F040000, 0x2F040001, + 0x50040000, 0x00040001, 0x51040000, 0x01040001, + 0x52040000, 0x02040001, 0x53040000, 0x03040001, + 0x54040000, 0x04040001, 0x55040000, 0x05040001, + 0x56040000, 0x06040001, 0x57040000, 0x07040001, + 0x58040000, 0x08040001, 0x59040000, 0x09040001, + 0x5A040000, 0x0A040001, 0x5B040000, 0x0B040001, + 0x5C040000, 0x0C040001, 0x5D040000, 0x0D040001, + 0x5E040000, 0x0E040001, 0x5F040000, 0x0F040001, + 0x61040000, 0x60040001, 0x63040000, 0x62040001, + 0x65040000, 0x64040001, 0x67040000, 0x66040001, + 0x69040000, 0x68040001, 0x6B040000, 0x6A040001, + 0x6D040000, 0x6C040001, 0x6F040000, 0x6E040001, + 0x71040000, 0x70040001, 0x73040000, 0x72040001, + 0x75040000, 0x74040001, 0x77040000, 0x76040001, + 0x79040000, 0x78040001, 0x7B040000, 0x7A040001, + 0x7D040000, 0x7C040001, 0x7F040000, 0x7E040001, + 0x81040000, 0x80040001, 0x8B040000, 0x8A040001, + 0x8D040000, 0x8C040001, 0x8F040000, 0x8E040001, + 0x91040000, 0x90040001, 0x93040000, 0x92040001, + 0x95040000, 0x94040001, 0x97040000, 0x96040001, + 0x99040000, 0x98040001, 0x9B040000, 0x9A040001, + 0x9D040000, 0x9C040001, 0x9F040000, 0x9E040001, + 0xA1040000, 0xA0040001, 0xA3040000, 0xA2040001, + 0xA5040000, 0xA4040001, 0xA7040000, 0xA6040001, + 0xA9040000, 0xA8040001, 0xAB040000, 0xAA040001, + 0xAD040000, 0xAC040001, 0xAF040000, 0xAE040001, + 0xB1040000, 0xB0040001, 0xB3040000, 0xB2040001, + 0xB5040000, 0xB4040001, 0xB7040000, 0xB6040001, + 0xB9040000, 0xB8040001, 0xBB040000, 0xBA040001, + 0xBD040000, 0xBC040001, 0xBF040000, 0xBE040001, + 0xC2040000, 0xC1040001, 0xC4040000, 0xC3040001, + 0xC6040000, 0xC5040001, 0xC8040000, 0xC7040001, + 0xCA040000, 0xC9040001, 0xCC040000, 0xCB040001, + 0xCE040000, 0xCD040001, 0xCF040000, 0xC0040001, + 0xD1040000, 0xD0040001, 0xD3040000, 0xD2040001, + 0xD5040000, 0xD4040001, 0xD7040000, 0xD6040001, + 0xD9040000, 0xD8040001, 0xDB040000, 0xDA040001, + 0xDD040000, 0xDC040001, 0xDF040000, 0xDE040001, + 0xE1040000, 0xE0040001, 0xE3040000, 0xE2040001, + 0xE5040000, 0xE4040001, 0xE7040000, 0xE6040001, + 0xE9040000, 0xE8040001, 0xEB040000, 0xEA040001, + 0xED040000, 0xEC040001, 0xEF040000, 0xEE040001, + 0xF1040000, 0xF0040001, 0xF3040000, 0xF2040001, + 0xF5040000, 0xF4040001, 0xF7040000, 0xF6040001, + 0xF9040000, 0xF8040001, 0xFB040000, 0xFA040001, + 0xFD040000, 0xFC040001, 0xFF040000, 0xFE040001, + 0x01050000, 0x00050001, 0x03050000, 0x02050001, + 0x05050000, 0x04050001, 0x07050000, 0x06050001, + 0x09050000, 0x08050001, 0x0B050000, 0x0A050001, + 0x0D050000, 0x0C050001, 0x0F050000, 0x0E050001, + 0x11050000, 0x10050001, 0x13050000, 0x12050001, + 0x15050000, 0x14050001, 0x17050000, 0x16050001, + 0x19050000, 0x18050001, 0x1B050000, 0x1A050001, + 0x1D050000, 0x1C050001, 0x1F050000, 0x1E050001, + 0x21050000, 0x20050001, 0x23050000, 0x22050001, + 0x25050000, 0x24050001, 0x27050000, 0x26050001, + 0x29050000, 0x28050001, 0x2B050000, 0x2A050001, + 0x2D050000, 0x2C050001, 0x2F050000, 0x2E050001, + 0x61050000, 0x31050001, 0x62050000, 0x32050001, + 0x63050000, 0x33050001, 0x64050000, 0x34050001, + 0x65050000, 0x35050001, 0x66050000, 0x36050001, + 0x67050000, 0x37050001, 0x68050000, 0x38050001, + 0x69050000, 0x39050001, 0x6A050000, 0x3A050001, + 0x6B050000, 0x3B050001, 0x6C050000, 0x3C050001, + 0x6D050000, 0x3D050001, 0x6E050000, 0x3E050001, + 0x6F050000, 0x3F050001, 0x70050000, 0x40050001, + 0x71050000, 0x41050001, 0x72050000, 0x42050001, + 0x73050000, 0x43050001, 0x74050000, 0x44050001, + 0x75050000, 0x45050001, 0x76050000, 0x46050001, + 0x77050000, 0x47050001, 0x78050000, 0x48050001, + 0x79050000, 0x49050001, 0x7A050000, 0x4A050001, + 0x7B050000, 0x4B050001, 0x7C050000, 0x4C050001, + 0x7D050000, 0x4D050001, 0x7E050000, 0x4E050001, + 0x7F050000, 0x4F050001, 0x80050000, 0x50050001, + 0x81050000, 0x51050001, 0x82050000, 0x52050001, + 0x83050000, 0x53050001, 0x84050000, 0x54050001, + 0x85050000, 0x55050001, 0x86050000, 0x56050001, + 0x87050000, 0x0C000002, 0xD0100000, 0x901C0001, + 0xD1100000, 0x911C0001, 0xD2100000, 0x921C0001, + 0xD3100000, 0x931C0001, 0xD4100000, 0x941C0001, + 0xD5100000, 0x951C0001, 0xD6100000, 0x961C0001, + 0xD7100000, 0x971C0001, 0xD8100000, 0x981C0001, + 0xD9100000, 0x991C0001, 0xDA100000, 0x9A1C0001, + 0xDB100000, 0x9B1C0001, 0xDC100000, 0x9C1C0001, + 0xDD100000, 0x9D1C0001, 0xDE100000, 0x9E1C0001, + 0xDF100000, 0x9F1C0001, 0xE0100000, 0xA01C0001, + 0xE1100000, 0xA11C0001, 0xE2100000, 0xA21C0001, + 0xE3100000, 0xA31C0001, 0xE4100000, 0xA41C0001, + 0xE5100000, 0xA51C0001, 0xE6100000, 0xA61C0001, + 0xE7100000, 0xA71C0001, 0xE8100000, 0xA81C0001, + 0xE9100000, 0xA91C0001, 0xEA100000, 0xAA1C0001, + 0xEB100000, 0xAB1C0001, 0xEC100000, 0xAC1C0001, + 0xED100000, 0xAD1C0001, 0xEE100000, 0xAE1C0001, + 0xEF100000, 0xAF1C0001, 0xF0100000, 0xB01C0001, + 0xF1100000, 0xB11C0001, 0xF2100000, 0xB21C0001, + 0xF3100000, 0xB31C0001, 0xF4100000, 0xB41C0001, + 0xF5100000, 0xB51C0001, 0xF6100000, 0xB61C0001, + 0xF7100000, 0xB71C0001, 0xF8100000, 0xB81C0001, + 0xF9100000, 0xB91C0001, 0xFA100000, 0xBA1C0001, + 0xFD100000, 0xBD1C0001, 0xFE100000, 0xBE1C0001, + 0xFF100000, 0xBF1C0001, 0xF8130000, 0xF0130001, + 0xF9130000, 0xF1130001, 0xFA130000, 0xF2130001, + 0xFB130000, 0xF3130001, 0xFC130000, 0xF4130001, + 0xFD130000, 0xF5130001, 0x801C0000, 0x12040001, + 0x811C0000, 0x14040001, 0x821C0000, 0x1E040001, + 0x831C0000, 0x21040001, 0x841C0000, 0x22040001, + 0x851C0000, 0x22040001, 0x861C0000, 0x2A040001, + 0x871C0000, 0x62040001, 0x881C0000, 0x4AA60001, + 0x791D0000, 0x7DA70001, 0x7D1D0000, 0x632C0001, + 0x8E1D0000, 0xC6A70001, 0x011E0000, 0x001E0001, + 0x031E0000, 0x021E0001, 0x051E0000, 0x041E0001, + 0x071E0000, 0x061E0001, 0x091E0000, 0x081E0001, + 0x0B1E0000, 0x0A1E0001, 0x0D1E0000, 0x0C1E0001, + 0x0F1E0000, 0x0E1E0001, 0x111E0000, 0x101E0001, + 0x131E0000, 0x121E0001, 0x151E0000, 0x141E0001, + 0x171E0000, 0x161E0001, 0x191E0000, 0x181E0001, + 0x1B1E0000, 0x1A1E0001, 0x1D1E0000, 0x1C1E0001, + 0x1F1E0000, 0x1E1E0001, 0x211E0000, 0x201E0001, + 0x231E0000, 0x221E0001, 0x251E0000, 0x241E0001, + 0x271E0000, 0x261E0001, 0x291E0000, 0x281E0001, + 0x2B1E0000, 0x2A1E0001, 0x2D1E0000, 0x2C1E0001, + 0x2F1E0000, 0x2E1E0001, 0x311E0000, 0x301E0001, + 0x331E0000, 0x321E0001, 0x351E0000, 0x341E0001, + 0x371E0000, 0x361E0001, 0x391E0000, 0x381E0001, + 0x3B1E0000, 0x3A1E0001, 0x3D1E0000, 0x3C1E0001, + 0x3F1E0000, 0x3E1E0001, 0x411E0000, 0x401E0001, + 0x431E0000, 0x421E0001, 0x451E0000, 0x441E0001, + 0x471E0000, 0x461E0001, 0x491E0000, 0x481E0001, + 0x4B1E0000, 0x4A1E0001, 0x4D1E0000, 0x4C1E0001, + 0x4F1E0000, 0x4E1E0001, 0x511E0000, 0x501E0001, + 0x531E0000, 0x521E0001, 0x551E0000, 0x541E0001, + 0x571E0000, 0x561E0001, 0x591E0000, 0x581E0001, + 0x5B1E0000, 0x5A1E0001, 0x5D1E0000, 0x5C1E0001, + 0x5F1E0000, 0x5E1E0001, 0x611E0000, 0x601E0001, + 0x631E0000, 0x621E0001, 0x651E0000, 0x641E0001, + 0x671E0000, 0x661E0001, 0x691E0000, 0x681E0001, + 0x6B1E0000, 0x6A1E0001, 0x6D1E0000, 0x6C1E0001, + 0x6F1E0000, 0x6E1E0001, 0x711E0000, 0x701E0001, + 0x731E0000, 0x721E0001, 0x751E0000, 0x741E0001, + 0x771E0000, 0x761E0001, 0x791E0000, 0x781E0001, + 0x7B1E0000, 0x7A1E0001, 0x7D1E0000, 0x7C1E0001, + 0x7F1E0000, 0x7E1E0001, 0x811E0000, 0x801E0001, + 0x831E0000, 0x821E0001, 0x851E0000, 0x841E0001, + 0x871E0000, 0x861E0001, 0x891E0000, 0x881E0001, + 0x8B1E0000, 0x8A1E0001, 0x8D1E0000, 0x8C1E0001, + 0x8F1E0000, 0x8E1E0001, 0x911E0000, 0x901E0001, + 0x931E0000, 0x921E0001, 0x951E0000, 0x941E0001, + 0x961E0000, 0x0E000002, 0x971E0000, 0x10000002, + 0x981E0000, 0x12000002, 0x991E0000, 0x14000002, + 0x9A1E0000, 0x16000002, 0x9B1E0000, 0x601E0001, + 0xA11E0000, 0xA01E0001, 0xA31E0000, 0xA21E0001, + 0xA51E0000, 0xA41E0001, 0xA71E0000, 0xA61E0001, + 0xA91E0000, 0xA81E0001, 0xAB1E0000, 0xAA1E0001, + 0xAD1E0000, 0xAC1E0001, 0xAF1E0000, 0xAE1E0001, + 0xB11E0000, 0xB01E0001, 0xB31E0000, 0xB21E0001, + 0xB51E0000, 0xB41E0001, 0xB71E0000, 0xB61E0001, + 0xB91E0000, 0xB81E0001, 0xBB1E0000, 0xBA1E0001, + 0xBD1E0000, 0xBC1E0001, 0xBF1E0000, 0xBE1E0001, + 0xC11E0000, 0xC01E0001, 0xC31E0000, 0xC21E0001, + 0xC51E0000, 0xC41E0001, 0xC71E0000, 0xC61E0001, + 0xC91E0000, 0xC81E0001, 0xCB1E0000, 0xCA1E0001, + 0xCD1E0000, 0xCC1E0001, 0xCF1E0000, 0xCE1E0001, + 0xD11E0000, 0xD01E0001, 0xD31E0000, 0xD21E0001, + 0xD51E0000, 0xD41E0001, 0xD71E0000, 0xD61E0001, + 0xD91E0000, 0xD81E0001, 0xDB1E0000, 0xDA1E0001, + 0xDD1E0000, 0xDC1E0001, 0xDF1E0000, 0xDE1E0001, + 0xE11E0000, 0xE01E0001, 0xE31E0000, 0xE21E0001, + 0xE51E0000, 0xE41E0001, 0xE71E0000, 0xE61E0001, + 0xE91E0000, 0xE81E0001, 0xEB1E0000, 0xEA1E0001, + 0xED1E0000, 0xEC1E0001, 0xEF1E0000, 0xEE1E0001, + 0xF11E0000, 0xF01E0001, 0xF31E0000, 0xF21E0001, + 0xF51E0000, 0xF41E0001, 0xF71E0000, 0xF61E0001, + 0xF91E0000, 0xF81E0001, 0xFB1E0000, 0xFA1E0001, + 0xFD1E0000, 0xFC1E0001, 0xFF1E0000, 0xFE1E0001, + 0x001F0000, 0x081F0001, 0x011F0000, 0x091F0001, + 0x021F0000, 0x0A1F0001, 0x031F0000, 0x0B1F0001, + 0x041F0000, 0x0C1F0001, 0x051F0000, 0x0D1F0001, + 0x061F0000, 0x0E1F0001, 0x071F0000, 0x0F1F0001, + 0x101F0000, 0x181F0001, 0x111F0000, 0x191F0001, + 0x121F0000, 0x1A1F0001, 0x131F0000, 0x1B1F0001, + 0x141F0000, 0x1C1F0001, 0x151F0000, 0x1D1F0001, + 0x201F0000, 0x281F0001, 0x211F0000, 0x291F0001, + 0x221F0000, 0x2A1F0001, 0x231F0000, 0x2B1F0001, + 0x241F0000, 0x2C1F0001, 0x251F0000, 0x2D1F0001, + 0x261F0000, 0x2E1F0001, 0x271F0000, 0x2F1F0001, + 0x301F0000, 0x381F0001, 0x311F0000, 0x391F0001, + 0x321F0000, 0x3A1F0001, 0x331F0000, 0x3B1F0001, + 0x341F0000, 0x3C1F0001, 0x351F0000, 0x3D1F0001, + 0x361F0000, 0x3E1F0001, 0x371F0000, 0x3F1F0001, + 0x401F0000, 0x481F0001, 0x411F0000, 0x491F0001, + 0x421F0000, 0x4A1F0001, 0x431F0000, 0x4B1F0001, + 0x441F0000, 0x4C1F0001, 0x451F0000, 0x4D1F0001, + 0x501F0000, 0x18000002, 0x511F0000, 0x591F0001, + 0x521F0000, 0x1A000003, 0x531F0000, 0x5B1F0001, + 0x541F0000, 0x1D000003, 0x551F0000, 0x5D1F0001, + 0x561F0000, 0x20000003, 0x571F0000, 0x5F1F0001, + 0x601F0000, 0x681F0001, 0x611F0000, 0x691F0001, + 0x621F0000, 0x6A1F0001, 0x631F0000, 0x6B1F0001, + 0x641F0000, 0x6C1F0001, 0x651F0000, 0x6D1F0001, + 0x661F0000, 0x6E1F0001, 0x671F0000, 0x6F1F0001, + 0x701F0000, 0xBA1F0001, 0x711F0000, 0xBB1F0001, + 0x721F0000, 0xC81F0001, 0x731F0000, 0xC91F0001, + 0x741F0000, 0xCA1F0001, 0x751F0000, 0xCB1F0001, + 0x761F0000, 0xDA1F0001, 0x771F0000, 0xDB1F0001, + 0x781F0000, 0xF81F0001, 0x791F0000, 0xF91F0001, + 0x7A1F0000, 0xEA1F0001, 0x7B1F0000, 0xEB1F0001, + 0x7C1F0000, 0xFA1F0001, 0x7D1F0000, 0xFB1F0001, + 0x801F0000, 0x23000002, 0x811F0000, 0x25000002, + 0x821F0000, 0x27000002, 0x831F0000, 0x29000002, + 0x841F0000, 0x2B000002, 0x851F0000, 0x2D000002, + 0x861F0000, 0x2F000002, 0x871F0000, 0x31000002, + 0x881F0000, 0x33000002, 0x891F0000, 0x35000002, + 0x8A1F0000, 0x37000002, 0x8B1F0000, 0x39000002, + 0x8C1F0000, 0x3B000002, 0x8D1F0000, 0x3D000002, + 0x8E1F0000, 0x3F000002, 0x8F1F0000, 0x41000002, + 0x901F0000, 0x43000002, 0x911F0000, 0x45000002, + 0x921F0000, 0x47000002, 0x931F0000, 0x49000002, + 0x941F0000, 0x4B000002, 0x951F0000, 0x4D000002, + 0x961F0000, 0x4F000002, 0x971F0000, 0x51000002, + 0x981F0000, 0x53000002, 0x991F0000, 0x55000002, + 0x9A1F0000, 0x57000002, 0x9B1F0000, 0x59000002, + 0x9C1F0000, 0x5B000002, 0x9D1F0000, 0x5D000002, + 0x9E1F0000, 0x5F000002, 0x9F1F0000, 0x61000002, + 0xA01F0000, 0x63000002, 0xA11F0000, 0x65000002, + 0xA21F0000, 0x67000002, 0xA31F0000, 0x69000002, + 0xA41F0000, 0x6B000002, 0xA51F0000, 0x6D000002, + 0xA61F0000, 0x6F000002, 0xA71F0000, 0x71000002, + 0xA81F0000, 0x73000002, 0xA91F0000, 0x75000002, + 0xAA1F0000, 0x77000002, 0xAB1F0000, 0x79000002, + 0xAC1F0000, 0x7B000002, 0xAD1F0000, 0x7D000002, + 0xAE1F0000, 0x7F000002, 0xAF1F0000, 0x81000002, + 0xB01F0000, 0xB81F0001, 0xB11F0000, 0xB91F0001, + 0xB21F0000, 0x83000002, 0xB31F0000, 0x85000002, + 0xB41F0000, 0x87000002, 0xB61F0000, 0x89000002, + 0xB71F0000, 0x8B000003, 0xBC1F0000, 0x8E000002, + 0xBE1F0000, 0x99030001, 0xC21F0000, 0x90000002, + 0xC31F0000, 0x92000002, 0xC41F0000, 0x94000002, + 0xC61F0000, 0x96000002, 0xC71F0000, 0x98000003, + 0xCC1F0000, 0x9B000002, 0xD01F0000, 0xD81F0001, + 0xD11F0000, 0xD91F0001, 0xD21F0000, 0x9D000003, + 0xD31F0000, 0xA0000003, 0xD61F0000, 0xA3000002, + 0xD71F0000, 0xA5000003, 0xE01F0000, 0xE81F0001, + 0xE11F0000, 0xE91F0001, 0xE21F0000, 0xA8000003, + 0xE31F0000, 0xAB000003, 0xE41F0000, 0xAE000002, + 0xE51F0000, 0xEC1F0001, 0xE61F0000, 0xB0000002, + 0xE71F0000, 0xB2000003, 0xF21F0000, 0xB5000002, + 0xF31F0000, 0xB7000002, 0xF41F0000, 0xB9000002, + 0xF61F0000, 0xBB000002, 0xF71F0000, 0xBD000003, + 0xFC1F0000, 0xC0000002, 0x4E210000, 0x32210001, + 0x70210000, 0x60210001, 0x71210000, 0x61210001, + 0x72210000, 0x62210001, 0x73210000, 0x63210001, + 0x74210000, 0x64210001, 0x75210000, 0x65210001, + 0x76210000, 0x66210001, 0x77210000, 0x67210001, + 0x78210000, 0x68210001, 0x79210000, 0x69210001, + 0x7A210000, 0x6A210001, 0x7B210000, 0x6B210001, + 0x7C210000, 0x6C210001, 0x7D210000, 0x6D210001, + 0x7E210000, 0x6E210001, 0x7F210000, 0x6F210001, + 0x84210000, 0x83210001, 0xD0240000, 0xB6240001, + 0xD1240000, 0xB7240001, 0xD2240000, 0xB8240001, + 0xD3240000, 0xB9240001, 0xD4240000, 0xBA240001, + 0xD5240000, 0xBB240001, 0xD6240000, 0xBC240001, + 0xD7240000, 0xBD240001, 0xD8240000, 0xBE240001, + 0xD9240000, 0xBF240001, 0xDA240000, 0xC0240001, + 0xDB240000, 0xC1240001, 0xDC240000, 0xC2240001, + 0xDD240000, 0xC3240001, 0xDE240000, 0xC4240001, + 0xDF240000, 0xC5240001, 0xE0240000, 0xC6240001, + 0xE1240000, 0xC7240001, 0xE2240000, 0xC8240001, + 0xE3240000, 0xC9240001, 0xE4240000, 0xCA240001, + 0xE5240000, 0xCB240001, 0xE6240000, 0xCC240001, + 0xE7240000, 0xCD240001, 0xE8240000, 0xCE240001, + 0xE9240000, 0xCF240001, 0x302C0000, 0x002C0001, + 0x312C0000, 0x012C0001, 0x322C0000, 0x022C0001, + 0x332C0000, 0x032C0001, 0x342C0000, 0x042C0001, + 0x352C0000, 0x052C0001, 0x362C0000, 0x062C0001, + 0x372C0000, 0x072C0001, 0x382C0000, 0x082C0001, + 0x392C0000, 0x092C0001, 0x3A2C0000, 0x0A2C0001, + 0x3B2C0000, 0x0B2C0001, 0x3C2C0000, 0x0C2C0001, + 0x3D2C0000, 0x0D2C0001, 0x3E2C0000, 0x0E2C0001, + 0x3F2C0000, 0x0F2C0001, 0x402C0000, 0x102C0001, + 0x412C0000, 0x112C0001, 0x422C0000, 0x122C0001, + 0x432C0000, 0x132C0001, 0x442C0000, 0x142C0001, + 0x452C0000, 0x152C0001, 0x462C0000, 0x162C0001, + 0x472C0000, 0x172C0001, 0x482C0000, 0x182C0001, + 0x492C0000, 0x192C0001, 0x4A2C0000, 0x1A2C0001, + 0x4B2C0000, 0x1B2C0001, 0x4C2C0000, 0x1C2C0001, + 0x4D2C0000, 0x1D2C0001, 0x4E2C0000, 0x1E2C0001, + 0x4F2C0000, 0x1F2C0001, 0x502C0000, 0x202C0001, + 0x512C0000, 0x212C0001, 0x522C0000, 0x222C0001, + 0x532C0000, 0x232C0001, 0x542C0000, 0x242C0001, + 0x552C0000, 0x252C0001, 0x562C0000, 0x262C0001, + 0x572C0000, 0x272C0001, 0x582C0000, 0x282C0001, + 0x592C0000, 0x292C0001, 0x5A2C0000, 0x2A2C0001, + 0x5B2C0000, 0x2B2C0001, 0x5C2C0000, 0x2C2C0001, + 0x5D2C0000, 0x2D2C0001, 0x5E2C0000, 0x2E2C0001, + 0x5F2C0000, 0x2F2C0001, 0x612C0000, 0x602C0001, + 0x652C0000, 0x3A020001, 0x662C0000, 0x3E020001, + 0x682C0000, 0x672C0001, 0x6A2C0000, 0x692C0001, + 0x6C2C0000, 0x6B2C0001, 0x732C0000, 0x722C0001, + 0x762C0000, 0x752C0001, 0x812C0000, 0x802C0001, + 0x832C0000, 0x822C0001, 0x852C0000, 0x842C0001, + 0x872C0000, 0x862C0001, 0x892C0000, 0x882C0001, + 0x8B2C0000, 0x8A2C0001, 0x8D2C0000, 0x8C2C0001, + 0x8F2C0000, 0x8E2C0001, 0x912C0000, 0x902C0001, + 0x932C0000, 0x922C0001, 0x952C0000, 0x942C0001, + 0x972C0000, 0x962C0001, 0x992C0000, 0x982C0001, + 0x9B2C0000, 0x9A2C0001, 0x9D2C0000, 0x9C2C0001, + 0x9F2C0000, 0x9E2C0001, 0xA12C0000, 0xA02C0001, + 0xA32C0000, 0xA22C0001, 0xA52C0000, 0xA42C0001, + 0xA72C0000, 0xA62C0001, 0xA92C0000, 0xA82C0001, + 0xAB2C0000, 0xAA2C0001, 0xAD2C0000, 0xAC2C0001, + 0xAF2C0000, 0xAE2C0001, 0xB12C0000, 0xB02C0001, + 0xB32C0000, 0xB22C0001, 0xB52C0000, 0xB42C0001, + 0xB72C0000, 0xB62C0001, 0xB92C0000, 0xB82C0001, + 0xBB2C0000, 0xBA2C0001, 0xBD2C0000, 0xBC2C0001, + 0xBF2C0000, 0xBE2C0001, 0xC12C0000, 0xC02C0001, + 0xC32C0000, 0xC22C0001, 0xC52C0000, 0xC42C0001, + 0xC72C0000, 0xC62C0001, 0xC92C0000, 0xC82C0001, + 0xCB2C0000, 0xCA2C0001, 0xCD2C0000, 0xCC2C0001, + 0xCF2C0000, 0xCE2C0001, 0xD12C0000, 0xD02C0001, + 0xD32C0000, 0xD22C0001, 0xD52C0000, 0xD42C0001, + 0xD72C0000, 0xD62C0001, 0xD92C0000, 0xD82C0001, + 0xDB2C0000, 0xDA2C0001, 0xDD2C0000, 0xDC2C0001, + 0xDF2C0000, 0xDE2C0001, 0xE12C0000, 0xE02C0001, + 0xE32C0000, 0xE22C0001, 0xEC2C0000, 0xEB2C0001, + 0xEE2C0000, 0xED2C0001, 0xF32C0000, 0xF22C0001, + 0x002D0000, 0xA0100001, 0x012D0000, 0xA1100001, + 0x022D0000, 0xA2100001, 0x032D0000, 0xA3100001, + 0x042D0000, 0xA4100001, 0x052D0000, 0xA5100001, + 0x062D0000, 0xA6100001, 0x072D0000, 0xA7100001, + 0x082D0000, 0xA8100001, 0x092D0000, 0xA9100001, + 0x0A2D0000, 0xAA100001, 0x0B2D0000, 0xAB100001, + 0x0C2D0000, 0xAC100001, 0x0D2D0000, 0xAD100001, + 0x0E2D0000, 0xAE100001, 0x0F2D0000, 0xAF100001, + 0x102D0000, 0xB0100001, 0x112D0000, 0xB1100001, + 0x122D0000, 0xB2100001, 0x132D0000, 0xB3100001, + 0x142D0000, 0xB4100001, 0x152D0000, 0xB5100001, + 0x162D0000, 0xB6100001, 0x172D0000, 0xB7100001, + 0x182D0000, 0xB8100001, 0x192D0000, 0xB9100001, + 0x1A2D0000, 0xBA100001, 0x1B2D0000, 0xBB100001, + 0x1C2D0000, 0xBC100001, 0x1D2D0000, 0xBD100001, + 0x1E2D0000, 0xBE100001, 0x1F2D0000, 0xBF100001, + 0x202D0000, 0xC0100001, 0x212D0000, 0xC1100001, + 0x222D0000, 0xC2100001, 0x232D0000, 0xC3100001, + 0x242D0000, 0xC4100001, 0x252D0000, 0xC5100001, + 0x272D0000, 0xC7100001, 0x2D2D0000, 0xCD100001, + 0x41A60000, 0x40A60001, 0x43A60000, 0x42A60001, + 0x45A60000, 0x44A60001, 0x47A60000, 0x46A60001, + 0x49A60000, 0x48A60001, 0x4BA60000, 0x4AA60001, + 0x4DA60000, 0x4CA60001, 0x4FA60000, 0x4EA60001, + 0x51A60000, 0x50A60001, 0x53A60000, 0x52A60001, + 0x55A60000, 0x54A60001, 0x57A60000, 0x56A60001, + 0x59A60000, 0x58A60001, 0x5BA60000, 0x5AA60001, + 0x5DA60000, 0x5CA60001, 0x5FA60000, 0x5EA60001, + 0x61A60000, 0x60A60001, 0x63A60000, 0x62A60001, + 0x65A60000, 0x64A60001, 0x67A60000, 0x66A60001, + 0x69A60000, 0x68A60001, 0x6BA60000, 0x6AA60001, + 0x6DA60000, 0x6CA60001, 0x81A60000, 0x80A60001, + 0x83A60000, 0x82A60001, 0x85A60000, 0x84A60001, + 0x87A60000, 0x86A60001, 0x89A60000, 0x88A60001, + 0x8BA60000, 0x8AA60001, 0x8DA60000, 0x8CA60001, + 0x8FA60000, 0x8EA60001, 0x91A60000, 0x90A60001, + 0x93A60000, 0x92A60001, 0x95A60000, 0x94A60001, + 0x97A60000, 0x96A60001, 0x99A60000, 0x98A60001, + 0x9BA60000, 0x9AA60001, 0x23A70000, 0x22A70001, + 0x25A70000, 0x24A70001, 0x27A70000, 0x26A70001, + 0x29A70000, 0x28A70001, 0x2BA70000, 0x2AA70001, + 0x2DA70000, 0x2CA70001, 0x2FA70000, 0x2EA70001, + 0x33A70000, 0x32A70001, 0x35A70000, 0x34A70001, + 0x37A70000, 0x36A70001, 0x39A70000, 0x38A70001, + 0x3BA70000, 0x3AA70001, 0x3DA70000, 0x3CA70001, + 0x3FA70000, 0x3EA70001, 0x41A70000, 0x40A70001, + 0x43A70000, 0x42A70001, 0x45A70000, 0x44A70001, + 0x47A70000, 0x46A70001, 0x49A70000, 0x48A70001, + 0x4BA70000, 0x4AA70001, 0x4DA70000, 0x4CA70001, + 0x4FA70000, 0x4EA70001, 0x51A70000, 0x50A70001, + 0x53A70000, 0x52A70001, 0x55A70000, 0x54A70001, + 0x57A70000, 0x56A70001, 0x59A70000, 0x58A70001, + 0x5BA70000, 0x5AA70001, 0x5DA70000, 0x5CA70001, + 0x5FA70000, 0x5EA70001, 0x61A70000, 0x60A70001, + 0x63A70000, 0x62A70001, 0x65A70000, 0x64A70001, + 0x67A70000, 0x66A70001, 0x69A70000, 0x68A70001, + 0x6BA70000, 0x6AA70001, 0x6DA70000, 0x6CA70001, + 0x6FA70000, 0x6EA70001, 0x7AA70000, 0x79A70001, + 0x7CA70000, 0x7BA70001, 0x7FA70000, 0x7EA70001, + 0x81A70000, 0x80A70001, 0x83A70000, 0x82A70001, + 0x85A70000, 0x84A70001, 0x87A70000, 0x86A70001, + 0x8CA70000, 0x8BA70001, 0x91A70000, 0x90A70001, + 0x93A70000, 0x92A70001, 0x94A70000, 0xC4A70001, + 0x97A70000, 0x96A70001, 0x99A70000, 0x98A70001, + 0x9BA70000, 0x9AA70001, 0x9DA70000, 0x9CA70001, + 0x9FA70000, 0x9EA70001, 0xA1A70000, 0xA0A70001, + 0xA3A70000, 0xA2A70001, 0xA5A70000, 0xA4A70001, + 0xA7A70000, 0xA6A70001, 0xA9A70000, 0xA8A70001, + 0xB5A70000, 0xB4A70001, 0xB7A70000, 0xB6A70001, + 0xB9A70000, 0xB8A70001, 0xBBA70000, 0xBAA70001, + 0xBDA70000, 0xBCA70001, 0xBFA70000, 0xBEA70001, + 0xC1A70000, 0xC0A70001, 0xC3A70000, 0xC2A70001, + 0xC8A70000, 0xC7A70001, 0xCAA70000, 0xC9A70001, + 0xD1A70000, 0xD0A70001, 0xD7A70000, 0xD6A70001, + 0xD9A70000, 0xD8A70001, 0xF6A70000, 0xF5A70001, + 0x53AB0000, 0xB3A70001, 0x70AB0000, 0xA0130001, + 0x71AB0000, 0xA1130001, 0x72AB0000, 0xA2130001, + 0x73AB0000, 0xA3130001, 0x74AB0000, 0xA4130001, + 0x75AB0000, 0xA5130001, 0x76AB0000, 0xA6130001, + 0x77AB0000, 0xA7130001, 0x78AB0000, 0xA8130001, + 0x79AB0000, 0xA9130001, 0x7AAB0000, 0xAA130001, + 0x7BAB0000, 0xAB130001, 0x7CAB0000, 0xAC130001, + 0x7DAB0000, 0xAD130001, 0x7EAB0000, 0xAE130001, + 0x7FAB0000, 0xAF130001, 0x80AB0000, 0xB0130001, + 0x81AB0000, 0xB1130001, 0x82AB0000, 0xB2130001, + 0x83AB0000, 0xB3130001, 0x84AB0000, 0xB4130001, + 0x85AB0000, 0xB5130001, 0x86AB0000, 0xB6130001, + 0x87AB0000, 0xB7130001, 0x88AB0000, 0xB8130001, + 0x89AB0000, 0xB9130001, 0x8AAB0000, 0xBA130001, + 0x8BAB0000, 0xBB130001, 0x8CAB0000, 0xBC130001, + 0x8DAB0000, 0xBD130001, 0x8EAB0000, 0xBE130001, + 0x8FAB0000, 0xBF130001, 0x90AB0000, 0xC0130001, + 0x91AB0000, 0xC1130001, 0x92AB0000, 0xC2130001, + 0x93AB0000, 0xC3130001, 0x94AB0000, 0xC4130001, + 0x95AB0000, 0xC5130001, 0x96AB0000, 0xC6130001, + 0x97AB0000, 0xC7130001, 0x98AB0000, 0xC8130001, + 0x99AB0000, 0xC9130001, 0x9AAB0000, 0xCA130001, + 0x9BAB0000, 0xCB130001, 0x9CAB0000, 0xCC130001, + 0x9DAB0000, 0xCD130001, 0x9EAB0000, 0xCE130001, + 0x9FAB0000, 0xCF130001, 0xA0AB0000, 0xD0130001, + 0xA1AB0000, 0xD1130001, 0xA2AB0000, 0xD2130001, + 0xA3AB0000, 0xD3130001, 0xA4AB0000, 0xD4130001, + 0xA5AB0000, 0xD5130001, 0xA6AB0000, 0xD6130001, + 0xA7AB0000, 0xD7130001, 0xA8AB0000, 0xD8130001, + 0xA9AB0000, 0xD9130001, 0xAAAB0000, 0xDA130001, + 0xABAB0000, 0xDB130001, 0xACAB0000, 0xDC130001, + 0xADAB0000, 0xDD130001, 0xAEAB0000, 0xDE130001, + 0xAFAB0000, 0xDF130001, 0xB0AB0000, 0xE0130001, + 0xB1AB0000, 0xE1130001, 0xB2AB0000, 0xE2130001, + 0xB3AB0000, 0xE3130001, 0xB4AB0000, 0xE4130001, + 0xB5AB0000, 0xE5130001, 0xB6AB0000, 0xE6130001, + 0xB7AB0000, 0xE7130001, 0xB8AB0000, 0xE8130001, + 0xB9AB0000, 0xE9130001, 0xBAAB0000, 0xEA130001, + 0xBBAB0000, 0xEB130001, 0xBCAB0000, 0xEC130001, + 0xBDAB0000, 0xED130001, 0xBEAB0000, 0xEE130001, + 0xBFAB0000, 0xEF130001, 0x00FB0000, 0xC2000002, + 0x01FB0000, 0xC4000002, 0x02FB0000, 0xC6000002, + 0x03FB0000, 0xC8000003, 0x04FB0000, 0xCB000003, + 0x05FB0000, 0xCE000002, 0x06FB0000, 0xD0000002, + 0x13FB0000, 0xD2000002, 0x14FB0000, 0xD4000002, + 0x15FB0000, 0xD6000002, 0x16FB0000, 0xD8000002, + 0x17FB0000, 0xDA000002, 0x41FF0000, 0x21FF0001, + 0x42FF0000, 0x22FF0001, 0x43FF0000, 0x23FF0001, + 0x44FF0000, 0x24FF0001, 0x45FF0000, 0x25FF0001, + 0x46FF0000, 0x26FF0001, 0x47FF0000, 0x27FF0001, + 0x48FF0000, 0x28FF0001, 0x49FF0000, 0x29FF0001, + 0x4AFF0000, 0x2AFF0001, 0x4BFF0000, 0x2BFF0001, + 0x4CFF0000, 0x2CFF0001, 0x4DFF0000, 0x2DFF0001, + 0x4EFF0000, 0x2EFF0001, 0x4FFF0000, 0x2FFF0001, + 0x50FF0000, 0x30FF0001, 0x51FF0000, 0x31FF0001, + 0x52FF0000, 0x32FF0001, 0x53FF0000, 0x33FF0001, + 0x54FF0000, 0x34FF0001, 0x55FF0000, 0x35FF0001, + 0x56FF0000, 0x36FF0001, 0x57FF0000, 0x37FF0001, + 0x58FF0000, 0x38FF0001, 0x59FF0000, 0x39FF0001, + 0x5AFF0000, 0x3AFF0001, 0x28040100, 0x00040181, + 0x29040100, 0x01040181, 0x2A040100, 0x02040181, + 0x2B040100, 0x03040181, 0x2C040100, 0x04040181, + 0x2D040100, 0x05040181, 0x2E040100, 0x06040181, + 0x2F040100, 0x07040181, 0x30040100, 0x08040181, + 0x31040100, 0x09040181, 0x32040100, 0x0A040181, + 0x33040100, 0x0B040181, 0x34040100, 0x0C040181, + 0x35040100, 0x0D040181, 0x36040100, 0x0E040181, + 0x37040100, 0x0F040181, 0x38040100, 0x10040181, + 0x39040100, 0x11040181, 0x3A040100, 0x12040181, + 0x3B040100, 0x13040181, 0x3C040100, 0x14040181, + 0x3D040100, 0x15040181, 0x3E040100, 0x16040181, + 0x3F040100, 0x17040181, 0x40040100, 0x18040181, + 0x41040100, 0x19040181, 0x42040100, 0x1A040181, + 0x43040100, 0x1B040181, 0x44040100, 0x1C040181, + 0x45040100, 0x1D040181, 0x46040100, 0x1E040181, + 0x47040100, 0x1F040181, 0x48040100, 0x20040181, + 0x49040100, 0x21040181, 0x4A040100, 0x22040181, + 0x4B040100, 0x23040181, 0x4C040100, 0x24040181, + 0x4D040100, 0x25040181, 0x4E040100, 0x26040181, + 0x4F040100, 0x27040181, 0xD8040100, 0xB0040181, + 0xD9040100, 0xB1040181, 0xDA040100, 0xB2040181, + 0xDB040100, 0xB3040181, 0xDC040100, 0xB4040181, + 0xDD040100, 0xB5040181, 0xDE040100, 0xB6040181, + 0xDF040100, 0xB7040181, 0xE0040100, 0xB8040181, + 0xE1040100, 0xB9040181, 0xE2040100, 0xBA040181, + 0xE3040100, 0xBB040181, 0xE4040100, 0xBC040181, + 0xE5040100, 0xBD040181, 0xE6040100, 0xBE040181, + 0xE7040100, 0xBF040181, 0xE8040100, 0xC0040181, + 0xE9040100, 0xC1040181, 0xEA040100, 0xC2040181, + 0xEB040100, 0xC3040181, 0xEC040100, 0xC4040181, + 0xED040100, 0xC5040181, 0xEE040100, 0xC6040181, + 0xEF040100, 0xC7040181, 0xF0040100, 0xC8040181, + 0xF1040100, 0xC9040181, 0xF2040100, 0xCA040181, + 0xF3040100, 0xCB040181, 0xF4040100, 0xCC040181, + 0xF5040100, 0xCD040181, 0xF6040100, 0xCE040181, + 0xF7040100, 0xCF040181, 0xF8040100, 0xD0040181, + 0xF9040100, 0xD1040181, 0xFA040100, 0xD2040181, + 0xFB040100, 0xD3040181, 0x97050100, 0x70050181, + 0x98050100, 0x71050181, 0x99050100, 0x72050181, + 0x9A050100, 0x73050181, 0x9B050100, 0x74050181, + 0x9C050100, 0x75050181, 0x9D050100, 0x76050181, + 0x9E050100, 0x77050181, 0x9F050100, 0x78050181, + 0xA0050100, 0x79050181, 0xA1050100, 0x7A050181, + 0xA3050100, 0x7C050181, 0xA4050100, 0x7D050181, + 0xA5050100, 0x7E050181, 0xA6050100, 0x7F050181, + 0xA7050100, 0x80050181, 0xA8050100, 0x81050181, + 0xA9050100, 0x82050181, 0xAA050100, 0x83050181, + 0xAB050100, 0x84050181, 0xAC050100, 0x85050181, + 0xAD050100, 0x86050181, 0xAE050100, 0x87050181, + 0xAF050100, 0x88050181, 0xB0050100, 0x89050181, + 0xB1050100, 0x8A050181, 0xB3050100, 0x8C050181, + 0xB4050100, 0x8D050181, 0xB5050100, 0x8E050181, + 0xB6050100, 0x8F050181, 0xB7050100, 0x90050181, + 0xB8050100, 0x91050181, 0xB9050100, 0x92050181, + 0xBB050100, 0x94050181, 0xBC050100, 0x95050181, + 0xC00C0100, 0x800C0181, 0xC10C0100, 0x810C0181, + 0xC20C0100, 0x820C0181, 0xC30C0100, 0x830C0181, + 0xC40C0100, 0x840C0181, 0xC50C0100, 0x850C0181, + 0xC60C0100, 0x860C0181, 0xC70C0100, 0x870C0181, + 0xC80C0100, 0x880C0181, 0xC90C0100, 0x890C0181, + 0xCA0C0100, 0x8A0C0181, 0xCB0C0100, 0x8B0C0181, + 0xCC0C0100, 0x8C0C0181, 0xCD0C0100, 0x8D0C0181, + 0xCE0C0100, 0x8E0C0181, 0xCF0C0100, 0x8F0C0181, + 0xD00C0100, 0x900C0181, 0xD10C0100, 0x910C0181, + 0xD20C0100, 0x920C0181, 0xD30C0100, 0x930C0181, + 0xD40C0100, 0x940C0181, 0xD50C0100, 0x950C0181, + 0xD60C0100, 0x960C0181, 0xD70C0100, 0x970C0181, + 0xD80C0100, 0x980C0181, 0xD90C0100, 0x990C0181, + 0xDA0C0100, 0x9A0C0181, 0xDB0C0100, 0x9B0C0181, + 0xDC0C0100, 0x9C0C0181, 0xDD0C0100, 0x9D0C0181, + 0xDE0C0100, 0x9E0C0181, 0xDF0C0100, 0x9F0C0181, + 0xE00C0100, 0xA00C0181, 0xE10C0100, 0xA10C0181, + 0xE20C0100, 0xA20C0181, 0xE30C0100, 0xA30C0181, + 0xE40C0100, 0xA40C0181, 0xE50C0100, 0xA50C0181, + 0xE60C0100, 0xA60C0181, 0xE70C0100, 0xA70C0181, + 0xE80C0100, 0xA80C0181, 0xE90C0100, 0xA90C0181, + 0xEA0C0100, 0xAA0C0181, 0xEB0C0100, 0xAB0C0181, + 0xEC0C0100, 0xAC0C0181, 0xED0C0100, 0xAD0C0181, + 0xEE0C0100, 0xAE0C0181, 0xEF0C0100, 0xAF0C0181, + 0xF00C0100, 0xB00C0181, 0xF10C0100, 0xB10C0181, + 0xF20C0100, 0xB20C0181, 0xC0180100, 0xA0180181, + 0xC1180100, 0xA1180181, 0xC2180100, 0xA2180181, + 0xC3180100, 0xA3180181, 0xC4180100, 0xA4180181, + 0xC5180100, 0xA5180181, 0xC6180100, 0xA6180181, + 0xC7180100, 0xA7180181, 0xC8180100, 0xA8180181, + 0xC9180100, 0xA9180181, 0xCA180100, 0xAA180181, + 0xCB180100, 0xAB180181, 0xCC180100, 0xAC180181, + 0xCD180100, 0xAD180181, 0xCE180100, 0xAE180181, + 0xCF180100, 0xAF180181, 0xD0180100, 0xB0180181, + 0xD1180100, 0xB1180181, 0xD2180100, 0xB2180181, + 0xD3180100, 0xB3180181, 0xD4180100, 0xB4180181, + 0xD5180100, 0xB5180181, 0xD6180100, 0xB6180181, + 0xD7180100, 0xB7180181, 0xD8180100, 0xB8180181, + 0xD9180100, 0xB9180181, 0xDA180100, 0xBA180181, + 0xDB180100, 0xBB180181, 0xDC180100, 0xBC180181, + 0xDD180100, 0xBD180181, 0xDE180100, 0xBE180181, + 0xDF180100, 0xBF180181, 0x606E0100, 0x406E0181, + 0x616E0100, 0x416E0181, 0x626E0100, 0x426E0181, + 0x636E0100, 0x436E0181, 0x646E0100, 0x446E0181, + 0x656E0100, 0x456E0181, 0x666E0100, 0x466E0181, + 0x676E0100, 0x476E0181, 0x686E0100, 0x486E0181, + 0x696E0100, 0x496E0181, 0x6A6E0100, 0x4A6E0181, + 0x6B6E0100, 0x4B6E0181, 0x6C6E0100, 0x4C6E0181, + 0x6D6E0100, 0x4D6E0181, 0x6E6E0100, 0x4E6E0181, + 0x6F6E0100, 0x4F6E0181, 0x706E0100, 0x506E0181, + 0x716E0100, 0x516E0181, 0x726E0100, 0x526E0181, + 0x736E0100, 0x536E0181, 0x746E0100, 0x546E0181, + 0x756E0100, 0x556E0181, 0x766E0100, 0x566E0181, + 0x776E0100, 0x576E0181, 0x786E0100, 0x586E0181, + 0x796E0100, 0x596E0181, 0x7A6E0100, 0x5A6E0181, + 0x7B6E0100, 0x5B6E0181, 0x7C6E0100, 0x5C6E0181, + 0x7D6E0100, 0x5D6E0181, 0x7E6E0100, 0x5E6E0181, + 0x7F6E0100, 0x5F6E0181, 0x22E90100, 0x00E90181, + 0x23E90100, 0x01E90181, 0x24E90100, 0x02E90181, + 0x25E90100, 0x03E90181, 0x26E90100, 0x04E90181, + 0x27E90100, 0x05E90181, 0x28E90100, 0x06E90181, + 0x29E90100, 0x07E90181, 0x2AE90100, 0x08E90181, + 0x2BE90100, 0x09E90181, 0x2CE90100, 0x0AE90181, + 0x2DE90100, 0x0BE90181, 0x2EE90100, 0x0CE90181, + 0x2FE90100, 0x0DE90181, 0x30E90100, 0x0EE90181, + 0x31E90100, 0x0FE90181, 0x32E90100, 0x10E90181, + 0x33E90100, 0x11E90181, 0x34E90100, 0x12E90181, + 0x35E90100, 0x13E90181, 0x36E90100, 0x14E90181, + 0x37E90100, 0x15E90181, 0x38E90100, 0x16E90181, + 0x39E90100, 0x17E90181, 0x3AE90100, 0x18E90181, + 0x3BE90100, 0x19E90181, 0x3CE90100, 0x1AE90181, + 0x3DE90100, 0x1BE90181, 0x3EE90100, 0x1CE90181, + 0x3FE90100, 0x1DE90181, 0x40E90100, 0x1EE90181, + 0x41E90100, 0x1FE90181, 0x42E90100, 0x20E90181, + 0x43E90100, 0x21E90181, +}; + +static uint32_t const __CFUniCharToUppercaseMappingTableCount = 1525; + +static uint32_t const __CFUniCharToUppercaseMappingExtraTable[] = { + 0x53000000, 0x53000000, 0xBC020000, 0x4E000000, + 0x4A000000, 0x0C030000, 0x99030000, 0x08030000, + 0x01030000, 0xA5030000, 0x08030000, 0x01030000, + 0x35050000, 0x52050000, 0x48000000, 0x31030000, + 0x54000000, 0x08030000, 0x57000000, 0x0A030000, + 0x59000000, 0x0A030000, 0x41000000, 0xBE020000, + 0xA5030000, 0x13030000, 0xA5030000, 0x13030000, + 0x00030000, 0xA5030000, 0x13030000, 0x01030000, + 0xA5030000, 0x13030000, 0x42030000, 0x081F0000, + 0x99030000, 0x091F0000, 0x99030000, 0x0A1F0000, + 0x99030000, 0x0B1F0000, 0x99030000, 0x0C1F0000, + 0x99030000, 0x0D1F0000, 0x99030000, 0x0E1F0000, + 0x99030000, 0x0F1F0000, 0x99030000, 0x081F0000, + 0x99030000, 0x091F0000, 0x99030000, 0x0A1F0000, + 0x99030000, 0x0B1F0000, 0x99030000, 0x0C1F0000, + 0x99030000, 0x0D1F0000, 0x99030000, 0x0E1F0000, + 0x99030000, 0x0F1F0000, 0x99030000, 0x281F0000, + 0x99030000, 0x291F0000, 0x99030000, 0x2A1F0000, + 0x99030000, 0x2B1F0000, 0x99030000, 0x2C1F0000, + 0x99030000, 0x2D1F0000, 0x99030000, 0x2E1F0000, + 0x99030000, 0x2F1F0000, 0x99030000, 0x281F0000, + 0x99030000, 0x291F0000, 0x99030000, 0x2A1F0000, + 0x99030000, 0x2B1F0000, 0x99030000, 0x2C1F0000, + 0x99030000, 0x2D1F0000, 0x99030000, 0x2E1F0000, + 0x99030000, 0x2F1F0000, 0x99030000, 0x681F0000, + 0x99030000, 0x691F0000, 0x99030000, 0x6A1F0000, + 0x99030000, 0x6B1F0000, 0x99030000, 0x6C1F0000, + 0x99030000, 0x6D1F0000, 0x99030000, 0x6E1F0000, + 0x99030000, 0x6F1F0000, 0x99030000, 0x681F0000, + 0x99030000, 0x691F0000, 0x99030000, 0x6A1F0000, + 0x99030000, 0x6B1F0000, 0x99030000, 0x6C1F0000, + 0x99030000, 0x6D1F0000, 0x99030000, 0x6E1F0000, + 0x99030000, 0x6F1F0000, 0x99030000, 0xBA1F0000, + 0x99030000, 0x91030000, 0x99030000, 0x86030000, + 0x99030000, 0x91030000, 0x42030000, 0x91030000, + 0x42030000, 0x99030000, 0x91030000, 0x99030000, + 0xCA1F0000, 0x99030000, 0x97030000, 0x99030000, + 0x89030000, 0x99030000, 0x97030000, 0x42030000, + 0x97030000, 0x42030000, 0x99030000, 0x97030000, + 0x99030000, 0x99030000, 0x08030000, 0x00030000, + 0x99030000, 0x08030000, 0x01030000, 0x99030000, + 0x42030000, 0x99030000, 0x08030000, 0x42030000, + 0xA5030000, 0x08030000, 0x00030000, 0xA5030000, + 0x08030000, 0x01030000, 0xA1030000, 0x13030000, + 0xA5030000, 0x42030000, 0xA5030000, 0x08030000, + 0x42030000, 0xFA1F0000, 0x99030000, 0xA9030000, + 0x99030000, 0x8F030000, 0x99030000, 0xA9030000, + 0x42030000, 0xA9030000, 0x42030000, 0x99030000, + 0xA9030000, 0x99030000, 0x46000000, 0x46000000, + 0x46000000, 0x49000000, 0x46000000, 0x4C000000, + 0x46000000, 0x46000000, 0x49000000, 0x46000000, + 0x46000000, 0x4C000000, 0x53000000, 0x54000000, + 0x53000000, 0x54000000, 0x44050000, 0x46050000, + 0x44050000, 0x35050000, 0x44050000, 0x3B050000, + 0x4E050000, 0x46050000, 0x44050000, 0x3D050000, +}; + +static uint32_t const __CFUniCharToUppercaseMappingExtraTableCount = 110; + +static uint32_t const __CFUniCharToTitlecaseMappingTable[] = { + 0xDF000000, 0x00000002, 0xC4010000, 0xC5010001, + 0xC5010000, 0xC5010001, 0xC6010000, 0xC5010001, + 0xC7010000, 0xC8010001, 0xC8010000, 0xC8010001, + 0xC9010000, 0xC8010001, 0xCA010000, 0xCB010001, + 0xCB010000, 0xCB010001, 0xCC010000, 0xCB010001, + 0xF1010000, 0xF2010001, 0xF2010000, 0xF2010001, + 0xF3010000, 0xF2010001, 0x87050000, 0x02000002, + 0xD0100000, 0xD0100001, 0xD1100000, 0xD1100001, + 0xD2100000, 0xD2100001, 0xD3100000, 0xD3100001, + 0xD4100000, 0xD4100001, 0xD5100000, 0xD5100001, + 0xD6100000, 0xD6100001, 0xD7100000, 0xD7100001, + 0xD8100000, 0xD8100001, 0xD9100000, 0xD9100001, + 0xDA100000, 0xDA100001, 0xDB100000, 0xDB100001, + 0xDC100000, 0xDC100001, 0xDD100000, 0xDD100001, + 0xDE100000, 0xDE100001, 0xDF100000, 0xDF100001, + 0xE0100000, 0xE0100001, 0xE1100000, 0xE1100001, + 0xE2100000, 0xE2100001, 0xE3100000, 0xE3100001, + 0xE4100000, 0xE4100001, 0xE5100000, 0xE5100001, + 0xE6100000, 0xE6100001, 0xE7100000, 0xE7100001, + 0xE8100000, 0xE8100001, 0xE9100000, 0xE9100001, + 0xEA100000, 0xEA100001, 0xEB100000, 0xEB100001, + 0xEC100000, 0xEC100001, 0xED100000, 0xED100001, + 0xEE100000, 0xEE100001, 0xEF100000, 0xEF100001, + 0xF0100000, 0xF0100001, 0xF1100000, 0xF1100001, + 0xF2100000, 0xF2100001, 0xF3100000, 0xF3100001, + 0xF4100000, 0xF4100001, 0xF5100000, 0xF5100001, + 0xF6100000, 0xF6100001, 0xF7100000, 0xF7100001, + 0xF8100000, 0xF8100001, 0xF9100000, 0xF9100001, + 0xFA100000, 0xFA100001, 0xFD100000, 0xFD100001, + 0xFE100000, 0xFE100001, 0xFF100000, 0xFF100001, + 0x801F0000, 0x881F0001, 0x811F0000, 0x891F0001, + 0x821F0000, 0x8A1F0001, 0x831F0000, 0x8B1F0001, + 0x841F0000, 0x8C1F0001, 0x851F0000, 0x8D1F0001, + 0x861F0000, 0x8E1F0001, 0x871F0000, 0x8F1F0001, + 0x881F0000, 0x881F0001, 0x891F0000, 0x891F0001, + 0x8A1F0000, 0x8A1F0001, 0x8B1F0000, 0x8B1F0001, + 0x8C1F0000, 0x8C1F0001, 0x8D1F0000, 0x8D1F0001, + 0x8E1F0000, 0x8E1F0001, 0x8F1F0000, 0x8F1F0001, + 0x901F0000, 0x981F0001, 0x911F0000, 0x991F0001, + 0x921F0000, 0x9A1F0001, 0x931F0000, 0x9B1F0001, + 0x941F0000, 0x9C1F0001, 0x951F0000, 0x9D1F0001, + 0x961F0000, 0x9E1F0001, 0x971F0000, 0x9F1F0001, + 0x981F0000, 0x981F0001, 0x991F0000, 0x991F0001, + 0x9A1F0000, 0x9A1F0001, 0x9B1F0000, 0x9B1F0001, + 0x9C1F0000, 0x9C1F0001, 0x9D1F0000, 0x9D1F0001, + 0x9E1F0000, 0x9E1F0001, 0x9F1F0000, 0x9F1F0001, + 0xA01F0000, 0xA81F0001, 0xA11F0000, 0xA91F0001, + 0xA21F0000, 0xAA1F0001, 0xA31F0000, 0xAB1F0001, + 0xA41F0000, 0xAC1F0001, 0xA51F0000, 0xAD1F0001, + 0xA61F0000, 0xAE1F0001, 0xA71F0000, 0xAF1F0001, + 0xA81F0000, 0xA81F0001, 0xA91F0000, 0xA91F0001, + 0xAA1F0000, 0xAA1F0001, 0xAB1F0000, 0xAB1F0001, + 0xAC1F0000, 0xAC1F0001, 0xAD1F0000, 0xAD1F0001, + 0xAE1F0000, 0xAE1F0001, 0xAF1F0000, 0xAF1F0001, + 0xB21F0000, 0x04000002, 0xB31F0000, 0xBC1F0001, + 0xB41F0000, 0x06000002, 0xB71F0000, 0x08000003, + 0xBC1F0000, 0xBC1F0001, 0xC21F0000, 0x0B000002, + 0xC31F0000, 0xCC1F0001, 0xC41F0000, 0x0D000002, + 0xC71F0000, 0x0F000003, 0xCC1F0000, 0xCC1F0001, + 0xF21F0000, 0x12000002, 0xF31F0000, 0xFC1F0001, + 0xF41F0000, 0x14000002, 0xF71F0000, 0x16000003, + 0xFC1F0000, 0xFC1F0001, 0x00FB0000, 0x19000002, + 0x01FB0000, 0x1B000002, 0x02FB0000, 0x1D000002, + 0x03FB0000, 0x1F000003, 0x04FB0000, 0x22000003, + 0x05FB0000, 0x25000002, 0x06FB0000, 0x27000002, + 0x13FB0000, 0x29000002, 0x14FB0000, 0x2B000002, + 0x15FB0000, 0x2D000002, 0x16FB0000, 0x2F000002, + 0x17FB0000, 0x31000002, +}; + +static uint32_t const __CFUniCharToTitlecaseMappingTableCount = 135; + +static uint32_t const __CFUniCharToTitlecaseMappingExtraTable[] = { + 0x53000000, 0x73000000, 0x35050000, 0x82050000, + 0xBA1F0000, 0x45030000, 0x86030000, 0x45030000, + 0x91030000, 0x42030000, 0x45030000, 0xCA1F0000, + 0x45030000, 0x89030000, 0x45030000, 0x97030000, + 0x42030000, 0x45030000, 0xFA1F0000, 0x45030000, + 0x8F030000, 0x45030000, 0xA9030000, 0x42030000, + 0x45030000, 0x46000000, 0x66000000, 0x46000000, + 0x69000000, 0x46000000, 0x6C000000, 0x46000000, + 0x66000000, 0x69000000, 0x46000000, 0x66000000, + 0x6C000000, 0x53000000, 0x74000000, 0x53000000, + 0x74000000, 0x44050000, 0x76050000, 0x44050000, + 0x65050000, 0x44050000, 0x6B050000, 0x4E050000, + 0x76050000, 0x44050000, 0x6D050000, +}; + +static uint32_t const __CFUniCharToTitlecaseMappingExtraTableCount = 25; + +static uint32_t const __CFUniCharToLowercaseMappingTable[] = { + 0x41000000, 0x61000001, 0x42000000, 0x62000001, + 0x43000000, 0x63000001, 0x44000000, 0x64000001, + 0x45000000, 0x65000001, 0x46000000, 0x66000001, + 0x47000000, 0x67000001, 0x48000000, 0x68000001, + 0x49000000, 0x69000001, 0x4A000000, 0x6A000001, + 0x4B000000, 0x6B000001, 0x4C000000, 0x6C000001, + 0x4D000000, 0x6D000001, 0x4E000000, 0x6E000001, + 0x4F000000, 0x6F000001, 0x50000000, 0x70000001, + 0x51000000, 0x71000001, 0x52000000, 0x72000001, + 0x53000000, 0x73000001, 0x54000000, 0x74000001, + 0x55000000, 0x75000001, 0x56000000, 0x76000001, + 0x57000000, 0x77000001, 0x58000000, 0x78000001, + 0x59000000, 0x79000001, 0x5A000000, 0x7A000001, + 0xC0000000, 0xE0000001, 0xC1000000, 0xE1000001, + 0xC2000000, 0xE2000001, 0xC3000000, 0xE3000001, + 0xC4000000, 0xE4000001, 0xC5000000, 0xE5000001, + 0xC6000000, 0xE6000001, 0xC7000000, 0xE7000001, + 0xC8000000, 0xE8000001, 0xC9000000, 0xE9000001, + 0xCA000000, 0xEA000001, 0xCB000000, 0xEB000001, + 0xCC000000, 0xEC000001, 0xCD000000, 0xED000001, + 0xCE000000, 0xEE000001, 0xCF000000, 0xEF000001, + 0xD0000000, 0xF0000001, 0xD1000000, 0xF1000001, + 0xD2000000, 0xF2000001, 0xD3000000, 0xF3000001, + 0xD4000000, 0xF4000001, 0xD5000000, 0xF5000001, + 0xD6000000, 0xF6000001, 0xD8000000, 0xF8000001, + 0xD9000000, 0xF9000001, 0xDA000000, 0xFA000001, + 0xDB000000, 0xFB000001, 0xDC000000, 0xFC000001, + 0xDD000000, 0xFD000001, 0xDE000000, 0xFE000001, + 0x00010000, 0x01010001, 0x02010000, 0x03010001, + 0x04010000, 0x05010001, 0x06010000, 0x07010001, + 0x08010000, 0x09010001, 0x0A010000, 0x0B010001, + 0x0C010000, 0x0D010001, 0x0E010000, 0x0F010001, + 0x10010000, 0x11010001, 0x12010000, 0x13010001, + 0x14010000, 0x15010001, 0x16010000, 0x17010001, + 0x18010000, 0x19010001, 0x1A010000, 0x1B010001, + 0x1C010000, 0x1D010001, 0x1E010000, 0x1F010001, + 0x20010000, 0x21010001, 0x22010000, 0x23010001, + 0x24010000, 0x25010001, 0x26010000, 0x27010001, + 0x28010000, 0x29010001, 0x2A010000, 0x2B010001, + 0x2C010000, 0x2D010001, 0x2E010000, 0x2F010001, + 0x30010000, 0x00000002, 0x32010000, 0x33010001, + 0x34010000, 0x35010001, 0x36010000, 0x37010001, + 0x39010000, 0x3A010001, 0x3B010000, 0x3C010001, + 0x3D010000, 0x3E010001, 0x3F010000, 0x40010001, + 0x41010000, 0x42010001, 0x43010000, 0x44010001, + 0x45010000, 0x46010001, 0x47010000, 0x48010001, + 0x4A010000, 0x4B010001, 0x4C010000, 0x4D010001, + 0x4E010000, 0x4F010001, 0x50010000, 0x51010001, + 0x52010000, 0x53010001, 0x54010000, 0x55010001, + 0x56010000, 0x57010001, 0x58010000, 0x59010001, + 0x5A010000, 0x5B010001, 0x5C010000, 0x5D010001, + 0x5E010000, 0x5F010001, 0x60010000, 0x61010001, + 0x62010000, 0x63010001, 0x64010000, 0x65010001, + 0x66010000, 0x67010001, 0x68010000, 0x69010001, + 0x6A010000, 0x6B010001, 0x6C010000, 0x6D010001, + 0x6E010000, 0x6F010001, 0x70010000, 0x71010001, + 0x72010000, 0x73010001, 0x74010000, 0x75010001, + 0x76010000, 0x77010001, 0x78010000, 0xFF000001, + 0x79010000, 0x7A010001, 0x7B010000, 0x7C010001, + 0x7D010000, 0x7E010001, 0x81010000, 0x53020001, + 0x82010000, 0x83010001, 0x84010000, 0x85010001, + 0x86010000, 0x54020001, 0x87010000, 0x88010001, + 0x89010000, 0x56020001, 0x8A010000, 0x57020001, + 0x8B010000, 0x8C010001, 0x8E010000, 0xDD010001, + 0x8F010000, 0x59020001, 0x90010000, 0x5B020001, + 0x91010000, 0x92010001, 0x93010000, 0x60020001, + 0x94010000, 0x63020001, 0x96010000, 0x69020001, + 0x97010000, 0x68020001, 0x98010000, 0x99010001, + 0x9C010000, 0x6F020001, 0x9D010000, 0x72020001, + 0x9F010000, 0x75020001, 0xA0010000, 0xA1010001, + 0xA2010000, 0xA3010001, 0xA4010000, 0xA5010001, + 0xA6010000, 0x80020001, 0xA7010000, 0xA8010001, + 0xA9010000, 0x83020001, 0xAC010000, 0xAD010001, + 0xAE010000, 0x88020001, 0xAF010000, 0xB0010001, + 0xB1010000, 0x8A020001, 0xB2010000, 0x8B020001, + 0xB3010000, 0xB4010001, 0xB5010000, 0xB6010001, + 0xB7010000, 0x92020001, 0xB8010000, 0xB9010001, + 0xBC010000, 0xBD010001, 0xC4010000, 0xC6010001, + 0xC5010000, 0xC6010001, 0xC7010000, 0xC9010001, + 0xC8010000, 0xC9010001, 0xCA010000, 0xCC010001, + 0xCB010000, 0xCC010001, 0xCD010000, 0xCE010001, + 0xCF010000, 0xD0010001, 0xD1010000, 0xD2010001, + 0xD3010000, 0xD4010001, 0xD5010000, 0xD6010001, + 0xD7010000, 0xD8010001, 0xD9010000, 0xDA010001, + 0xDB010000, 0xDC010001, 0xDE010000, 0xDF010001, + 0xE0010000, 0xE1010001, 0xE2010000, 0xE3010001, + 0xE4010000, 0xE5010001, 0xE6010000, 0xE7010001, + 0xE8010000, 0xE9010001, 0xEA010000, 0xEB010001, + 0xEC010000, 0xED010001, 0xEE010000, 0xEF010001, + 0xF1010000, 0xF3010001, 0xF2010000, 0xF3010001, + 0xF4010000, 0xF5010001, 0xF6010000, 0x95010001, + 0xF7010000, 0xBF010001, 0xF8010000, 0xF9010001, + 0xFA010000, 0xFB010001, 0xFC010000, 0xFD010001, + 0xFE010000, 0xFF010001, 0x00020000, 0x01020001, + 0x02020000, 0x03020001, 0x04020000, 0x05020001, + 0x06020000, 0x07020001, 0x08020000, 0x09020001, + 0x0A020000, 0x0B020001, 0x0C020000, 0x0D020001, + 0x0E020000, 0x0F020001, 0x10020000, 0x11020001, + 0x12020000, 0x13020001, 0x14020000, 0x15020001, + 0x16020000, 0x17020001, 0x18020000, 0x19020001, + 0x1A020000, 0x1B020001, 0x1C020000, 0x1D020001, + 0x1E020000, 0x1F020001, 0x20020000, 0x9E010001, + 0x22020000, 0x23020001, 0x24020000, 0x25020001, + 0x26020000, 0x27020001, 0x28020000, 0x29020001, + 0x2A020000, 0x2B020001, 0x2C020000, 0x2D020001, + 0x2E020000, 0x2F020001, 0x30020000, 0x31020001, + 0x32020000, 0x33020001, 0x3A020000, 0x652C0001, + 0x3B020000, 0x3C020001, 0x3D020000, 0x9A010001, + 0x3E020000, 0x662C0001, 0x41020000, 0x42020001, + 0x43020000, 0x80010001, 0x44020000, 0x89020001, + 0x45020000, 0x8C020001, 0x46020000, 0x47020001, + 0x48020000, 0x49020001, 0x4A020000, 0x4B020001, + 0x4C020000, 0x4D020001, 0x4E020000, 0x4F020001, + 0x70030000, 0x71030001, 0x72030000, 0x73030001, + 0x76030000, 0x77030001, 0x7F030000, 0xF3030001, + 0x86030000, 0xAC030001, 0x88030000, 0xAD030001, + 0x89030000, 0xAE030001, 0x8A030000, 0xAF030001, + 0x8C030000, 0xCC030001, 0x8E030000, 0xCD030001, + 0x8F030000, 0xCE030001, 0x91030000, 0xB1030001, + 0x92030000, 0xB2030001, 0x93030000, 0xB3030001, + 0x94030000, 0xB4030001, 0x95030000, 0xB5030001, + 0x96030000, 0xB6030001, 0x97030000, 0xB7030001, + 0x98030000, 0xB8030001, 0x99030000, 0xB9030001, + 0x9A030000, 0xBA030001, 0x9B030000, 0xBB030001, + 0x9C030000, 0xBC030001, 0x9D030000, 0xBD030001, + 0x9E030000, 0xBE030001, 0x9F030000, 0xBF030001, + 0xA0030000, 0xC0030001, 0xA1030000, 0xC1030001, + 0xA3030000, 0xC3030001, 0xA4030000, 0xC4030001, + 0xA5030000, 0xC5030001, 0xA6030000, 0xC6030001, + 0xA7030000, 0xC7030001, 0xA8030000, 0xC8030001, + 0xA9030000, 0xC9030001, 0xAA030000, 0xCA030001, + 0xAB030000, 0xCB030001, 0xCF030000, 0xD7030001, + 0xD8030000, 0xD9030001, 0xDA030000, 0xDB030001, + 0xDC030000, 0xDD030001, 0xDE030000, 0xDF030001, + 0xE0030000, 0xE1030001, 0xE2030000, 0xE3030001, + 0xE4030000, 0xE5030001, 0xE6030000, 0xE7030001, + 0xE8030000, 0xE9030001, 0xEA030000, 0xEB030001, + 0xEC030000, 0xED030001, 0xEE030000, 0xEF030001, + 0xF4030000, 0xB8030001, 0xF7030000, 0xF8030001, + 0xF9030000, 0xF2030001, 0xFA030000, 0xFB030001, + 0xFD030000, 0x7B030001, 0xFE030000, 0x7C030001, + 0xFF030000, 0x7D030001, 0x00040000, 0x50040001, + 0x01040000, 0x51040001, 0x02040000, 0x52040001, + 0x03040000, 0x53040001, 0x04040000, 0x54040001, + 0x05040000, 0x55040001, 0x06040000, 0x56040001, + 0x07040000, 0x57040001, 0x08040000, 0x58040001, + 0x09040000, 0x59040001, 0x0A040000, 0x5A040001, + 0x0B040000, 0x5B040001, 0x0C040000, 0x5C040001, + 0x0D040000, 0x5D040001, 0x0E040000, 0x5E040001, + 0x0F040000, 0x5F040001, 0x10040000, 0x30040001, + 0x11040000, 0x31040001, 0x12040000, 0x32040001, + 0x13040000, 0x33040001, 0x14040000, 0x34040001, + 0x15040000, 0x35040001, 0x16040000, 0x36040001, + 0x17040000, 0x37040001, 0x18040000, 0x38040001, + 0x19040000, 0x39040001, 0x1A040000, 0x3A040001, + 0x1B040000, 0x3B040001, 0x1C040000, 0x3C040001, + 0x1D040000, 0x3D040001, 0x1E040000, 0x3E040001, + 0x1F040000, 0x3F040001, 0x20040000, 0x40040001, + 0x21040000, 0x41040001, 0x22040000, 0x42040001, + 0x23040000, 0x43040001, 0x24040000, 0x44040001, + 0x25040000, 0x45040001, 0x26040000, 0x46040001, + 0x27040000, 0x47040001, 0x28040000, 0x48040001, + 0x29040000, 0x49040001, 0x2A040000, 0x4A040001, + 0x2B040000, 0x4B040001, 0x2C040000, 0x4C040001, + 0x2D040000, 0x4D040001, 0x2E040000, 0x4E040001, + 0x2F040000, 0x4F040001, 0x60040000, 0x61040001, + 0x62040000, 0x63040001, 0x64040000, 0x65040001, + 0x66040000, 0x67040001, 0x68040000, 0x69040001, + 0x6A040000, 0x6B040001, 0x6C040000, 0x6D040001, + 0x6E040000, 0x6F040001, 0x70040000, 0x71040001, + 0x72040000, 0x73040001, 0x74040000, 0x75040001, + 0x76040000, 0x77040001, 0x78040000, 0x79040001, + 0x7A040000, 0x7B040001, 0x7C040000, 0x7D040001, + 0x7E040000, 0x7F040001, 0x80040000, 0x81040001, + 0x8A040000, 0x8B040001, 0x8C040000, 0x8D040001, + 0x8E040000, 0x8F040001, 0x90040000, 0x91040001, + 0x92040000, 0x93040001, 0x94040000, 0x95040001, + 0x96040000, 0x97040001, 0x98040000, 0x99040001, + 0x9A040000, 0x9B040001, 0x9C040000, 0x9D040001, + 0x9E040000, 0x9F040001, 0xA0040000, 0xA1040001, + 0xA2040000, 0xA3040001, 0xA4040000, 0xA5040001, + 0xA6040000, 0xA7040001, 0xA8040000, 0xA9040001, + 0xAA040000, 0xAB040001, 0xAC040000, 0xAD040001, + 0xAE040000, 0xAF040001, 0xB0040000, 0xB1040001, + 0xB2040000, 0xB3040001, 0xB4040000, 0xB5040001, + 0xB6040000, 0xB7040001, 0xB8040000, 0xB9040001, + 0xBA040000, 0xBB040001, 0xBC040000, 0xBD040001, + 0xBE040000, 0xBF040001, 0xC0040000, 0xCF040001, + 0xC1040000, 0xC2040001, 0xC3040000, 0xC4040001, + 0xC5040000, 0xC6040001, 0xC7040000, 0xC8040001, + 0xC9040000, 0xCA040001, 0xCB040000, 0xCC040001, + 0xCD040000, 0xCE040001, 0xD0040000, 0xD1040001, + 0xD2040000, 0xD3040001, 0xD4040000, 0xD5040001, + 0xD6040000, 0xD7040001, 0xD8040000, 0xD9040001, + 0xDA040000, 0xDB040001, 0xDC040000, 0xDD040001, + 0xDE040000, 0xDF040001, 0xE0040000, 0xE1040001, + 0xE2040000, 0xE3040001, 0xE4040000, 0xE5040001, + 0xE6040000, 0xE7040001, 0xE8040000, 0xE9040001, + 0xEA040000, 0xEB040001, 0xEC040000, 0xED040001, + 0xEE040000, 0xEF040001, 0xF0040000, 0xF1040001, + 0xF2040000, 0xF3040001, 0xF4040000, 0xF5040001, + 0xF6040000, 0xF7040001, 0xF8040000, 0xF9040001, + 0xFA040000, 0xFB040001, 0xFC040000, 0xFD040001, + 0xFE040000, 0xFF040001, 0x00050000, 0x01050001, + 0x02050000, 0x03050001, 0x04050000, 0x05050001, + 0x06050000, 0x07050001, 0x08050000, 0x09050001, + 0x0A050000, 0x0B050001, 0x0C050000, 0x0D050001, + 0x0E050000, 0x0F050001, 0x10050000, 0x11050001, + 0x12050000, 0x13050001, 0x14050000, 0x15050001, + 0x16050000, 0x17050001, 0x18050000, 0x19050001, + 0x1A050000, 0x1B050001, 0x1C050000, 0x1D050001, + 0x1E050000, 0x1F050001, 0x20050000, 0x21050001, + 0x22050000, 0x23050001, 0x24050000, 0x25050001, + 0x26050000, 0x27050001, 0x28050000, 0x29050001, + 0x2A050000, 0x2B050001, 0x2C050000, 0x2D050001, + 0x2E050000, 0x2F050001, 0x31050000, 0x61050001, + 0x32050000, 0x62050001, 0x33050000, 0x63050001, + 0x34050000, 0x64050001, 0x35050000, 0x65050001, + 0x36050000, 0x66050001, 0x37050000, 0x67050001, + 0x38050000, 0x68050001, 0x39050000, 0x69050001, + 0x3A050000, 0x6A050001, 0x3B050000, 0x6B050001, + 0x3C050000, 0x6C050001, 0x3D050000, 0x6D050001, + 0x3E050000, 0x6E050001, 0x3F050000, 0x6F050001, + 0x40050000, 0x70050001, 0x41050000, 0x71050001, + 0x42050000, 0x72050001, 0x43050000, 0x73050001, + 0x44050000, 0x74050001, 0x45050000, 0x75050001, + 0x46050000, 0x76050001, 0x47050000, 0x77050001, + 0x48050000, 0x78050001, 0x49050000, 0x79050001, + 0x4A050000, 0x7A050001, 0x4B050000, 0x7B050001, + 0x4C050000, 0x7C050001, 0x4D050000, 0x7D050001, + 0x4E050000, 0x7E050001, 0x4F050000, 0x7F050001, + 0x50050000, 0x80050001, 0x51050000, 0x81050001, + 0x52050000, 0x82050001, 0x53050000, 0x83050001, + 0x54050000, 0x84050001, 0x55050000, 0x85050001, + 0x56050000, 0x86050001, 0xA0100000, 0x002D0001, + 0xA1100000, 0x012D0001, 0xA2100000, 0x022D0001, + 0xA3100000, 0x032D0001, 0xA4100000, 0x042D0001, + 0xA5100000, 0x052D0001, 0xA6100000, 0x062D0001, + 0xA7100000, 0x072D0001, 0xA8100000, 0x082D0001, + 0xA9100000, 0x092D0001, 0xAA100000, 0x0A2D0001, + 0xAB100000, 0x0B2D0001, 0xAC100000, 0x0C2D0001, + 0xAD100000, 0x0D2D0001, 0xAE100000, 0x0E2D0001, + 0xAF100000, 0x0F2D0001, 0xB0100000, 0x102D0001, + 0xB1100000, 0x112D0001, 0xB2100000, 0x122D0001, + 0xB3100000, 0x132D0001, 0xB4100000, 0x142D0001, + 0xB5100000, 0x152D0001, 0xB6100000, 0x162D0001, + 0xB7100000, 0x172D0001, 0xB8100000, 0x182D0001, + 0xB9100000, 0x192D0001, 0xBA100000, 0x1A2D0001, + 0xBB100000, 0x1B2D0001, 0xBC100000, 0x1C2D0001, + 0xBD100000, 0x1D2D0001, 0xBE100000, 0x1E2D0001, + 0xBF100000, 0x1F2D0001, 0xC0100000, 0x202D0001, + 0xC1100000, 0x212D0001, 0xC2100000, 0x222D0001, + 0xC3100000, 0x232D0001, 0xC4100000, 0x242D0001, + 0xC5100000, 0x252D0001, 0xC7100000, 0x272D0001, + 0xCD100000, 0x2D2D0001, 0xA0130000, 0x70AB0001, + 0xA1130000, 0x71AB0001, 0xA2130000, 0x72AB0001, + 0xA3130000, 0x73AB0001, 0xA4130000, 0x74AB0001, + 0xA5130000, 0x75AB0001, 0xA6130000, 0x76AB0001, + 0xA7130000, 0x77AB0001, 0xA8130000, 0x78AB0001, + 0xA9130000, 0x79AB0001, 0xAA130000, 0x7AAB0001, + 0xAB130000, 0x7BAB0001, 0xAC130000, 0x7CAB0001, + 0xAD130000, 0x7DAB0001, 0xAE130000, 0x7EAB0001, + 0xAF130000, 0x7FAB0001, 0xB0130000, 0x80AB0001, + 0xB1130000, 0x81AB0001, 0xB2130000, 0x82AB0001, + 0xB3130000, 0x83AB0001, 0xB4130000, 0x84AB0001, + 0xB5130000, 0x85AB0001, 0xB6130000, 0x86AB0001, + 0xB7130000, 0x87AB0001, 0xB8130000, 0x88AB0001, + 0xB9130000, 0x89AB0001, 0xBA130000, 0x8AAB0001, + 0xBB130000, 0x8BAB0001, 0xBC130000, 0x8CAB0001, + 0xBD130000, 0x8DAB0001, 0xBE130000, 0x8EAB0001, + 0xBF130000, 0x8FAB0001, 0xC0130000, 0x90AB0001, + 0xC1130000, 0x91AB0001, 0xC2130000, 0x92AB0001, + 0xC3130000, 0x93AB0001, 0xC4130000, 0x94AB0001, + 0xC5130000, 0x95AB0001, 0xC6130000, 0x96AB0001, + 0xC7130000, 0x97AB0001, 0xC8130000, 0x98AB0001, + 0xC9130000, 0x99AB0001, 0xCA130000, 0x9AAB0001, + 0xCB130000, 0x9BAB0001, 0xCC130000, 0x9CAB0001, + 0xCD130000, 0x9DAB0001, 0xCE130000, 0x9EAB0001, + 0xCF130000, 0x9FAB0001, 0xD0130000, 0xA0AB0001, + 0xD1130000, 0xA1AB0001, 0xD2130000, 0xA2AB0001, + 0xD3130000, 0xA3AB0001, 0xD4130000, 0xA4AB0001, + 0xD5130000, 0xA5AB0001, 0xD6130000, 0xA6AB0001, + 0xD7130000, 0xA7AB0001, 0xD8130000, 0xA8AB0001, + 0xD9130000, 0xA9AB0001, 0xDA130000, 0xAAAB0001, + 0xDB130000, 0xABAB0001, 0xDC130000, 0xACAB0001, + 0xDD130000, 0xADAB0001, 0xDE130000, 0xAEAB0001, + 0xDF130000, 0xAFAB0001, 0xE0130000, 0xB0AB0001, + 0xE1130000, 0xB1AB0001, 0xE2130000, 0xB2AB0001, + 0xE3130000, 0xB3AB0001, 0xE4130000, 0xB4AB0001, + 0xE5130000, 0xB5AB0001, 0xE6130000, 0xB6AB0001, + 0xE7130000, 0xB7AB0001, 0xE8130000, 0xB8AB0001, + 0xE9130000, 0xB9AB0001, 0xEA130000, 0xBAAB0001, + 0xEB130000, 0xBBAB0001, 0xEC130000, 0xBCAB0001, + 0xED130000, 0xBDAB0001, 0xEE130000, 0xBEAB0001, + 0xEF130000, 0xBFAB0001, 0xF0130000, 0xF8130001, + 0xF1130000, 0xF9130001, 0xF2130000, 0xFA130001, + 0xF3130000, 0xFB130001, 0xF4130000, 0xFC130001, + 0xF5130000, 0xFD130001, 0x901C0000, 0xD0100001, + 0x911C0000, 0xD1100001, 0x921C0000, 0xD2100001, + 0x931C0000, 0xD3100001, 0x941C0000, 0xD4100001, + 0x951C0000, 0xD5100001, 0x961C0000, 0xD6100001, + 0x971C0000, 0xD7100001, 0x981C0000, 0xD8100001, + 0x991C0000, 0xD9100001, 0x9A1C0000, 0xDA100001, + 0x9B1C0000, 0xDB100001, 0x9C1C0000, 0xDC100001, + 0x9D1C0000, 0xDD100001, 0x9E1C0000, 0xDE100001, + 0x9F1C0000, 0xDF100001, 0xA01C0000, 0xE0100001, + 0xA11C0000, 0xE1100001, 0xA21C0000, 0xE2100001, + 0xA31C0000, 0xE3100001, 0xA41C0000, 0xE4100001, + 0xA51C0000, 0xE5100001, 0xA61C0000, 0xE6100001, + 0xA71C0000, 0xE7100001, 0xA81C0000, 0xE8100001, + 0xA91C0000, 0xE9100001, 0xAA1C0000, 0xEA100001, + 0xAB1C0000, 0xEB100001, 0xAC1C0000, 0xEC100001, + 0xAD1C0000, 0xED100001, 0xAE1C0000, 0xEE100001, + 0xAF1C0000, 0xEF100001, 0xB01C0000, 0xF0100001, + 0xB11C0000, 0xF1100001, 0xB21C0000, 0xF2100001, + 0xB31C0000, 0xF3100001, 0xB41C0000, 0xF4100001, + 0xB51C0000, 0xF5100001, 0xB61C0000, 0xF6100001, + 0xB71C0000, 0xF7100001, 0xB81C0000, 0xF8100001, + 0xB91C0000, 0xF9100001, 0xBA1C0000, 0xFA100001, + 0xBD1C0000, 0xFD100001, 0xBE1C0000, 0xFE100001, + 0xBF1C0000, 0xFF100001, 0x001E0000, 0x011E0001, + 0x021E0000, 0x031E0001, 0x041E0000, 0x051E0001, + 0x061E0000, 0x071E0001, 0x081E0000, 0x091E0001, + 0x0A1E0000, 0x0B1E0001, 0x0C1E0000, 0x0D1E0001, + 0x0E1E0000, 0x0F1E0001, 0x101E0000, 0x111E0001, + 0x121E0000, 0x131E0001, 0x141E0000, 0x151E0001, + 0x161E0000, 0x171E0001, 0x181E0000, 0x191E0001, + 0x1A1E0000, 0x1B1E0001, 0x1C1E0000, 0x1D1E0001, + 0x1E1E0000, 0x1F1E0001, 0x201E0000, 0x211E0001, + 0x221E0000, 0x231E0001, 0x241E0000, 0x251E0001, + 0x261E0000, 0x271E0001, 0x281E0000, 0x291E0001, + 0x2A1E0000, 0x2B1E0001, 0x2C1E0000, 0x2D1E0001, + 0x2E1E0000, 0x2F1E0001, 0x301E0000, 0x311E0001, + 0x321E0000, 0x331E0001, 0x341E0000, 0x351E0001, + 0x361E0000, 0x371E0001, 0x381E0000, 0x391E0001, + 0x3A1E0000, 0x3B1E0001, 0x3C1E0000, 0x3D1E0001, + 0x3E1E0000, 0x3F1E0001, 0x401E0000, 0x411E0001, + 0x421E0000, 0x431E0001, 0x441E0000, 0x451E0001, + 0x461E0000, 0x471E0001, 0x481E0000, 0x491E0001, + 0x4A1E0000, 0x4B1E0001, 0x4C1E0000, 0x4D1E0001, + 0x4E1E0000, 0x4F1E0001, 0x501E0000, 0x511E0001, + 0x521E0000, 0x531E0001, 0x541E0000, 0x551E0001, + 0x561E0000, 0x571E0001, 0x581E0000, 0x591E0001, + 0x5A1E0000, 0x5B1E0001, 0x5C1E0000, 0x5D1E0001, + 0x5E1E0000, 0x5F1E0001, 0x601E0000, 0x611E0001, + 0x621E0000, 0x631E0001, 0x641E0000, 0x651E0001, + 0x661E0000, 0x671E0001, 0x681E0000, 0x691E0001, + 0x6A1E0000, 0x6B1E0001, 0x6C1E0000, 0x6D1E0001, + 0x6E1E0000, 0x6F1E0001, 0x701E0000, 0x711E0001, + 0x721E0000, 0x731E0001, 0x741E0000, 0x751E0001, + 0x761E0000, 0x771E0001, 0x781E0000, 0x791E0001, + 0x7A1E0000, 0x7B1E0001, 0x7C1E0000, 0x7D1E0001, + 0x7E1E0000, 0x7F1E0001, 0x801E0000, 0x811E0001, + 0x821E0000, 0x831E0001, 0x841E0000, 0x851E0001, + 0x861E0000, 0x871E0001, 0x881E0000, 0x891E0001, + 0x8A1E0000, 0x8B1E0001, 0x8C1E0000, 0x8D1E0001, + 0x8E1E0000, 0x8F1E0001, 0x901E0000, 0x911E0001, + 0x921E0000, 0x931E0001, 0x941E0000, 0x951E0001, + 0x9E1E0000, 0xDF000001, 0xA01E0000, 0xA11E0001, + 0xA21E0000, 0xA31E0001, 0xA41E0000, 0xA51E0001, + 0xA61E0000, 0xA71E0001, 0xA81E0000, 0xA91E0001, + 0xAA1E0000, 0xAB1E0001, 0xAC1E0000, 0xAD1E0001, + 0xAE1E0000, 0xAF1E0001, 0xB01E0000, 0xB11E0001, + 0xB21E0000, 0xB31E0001, 0xB41E0000, 0xB51E0001, + 0xB61E0000, 0xB71E0001, 0xB81E0000, 0xB91E0001, + 0xBA1E0000, 0xBB1E0001, 0xBC1E0000, 0xBD1E0001, + 0xBE1E0000, 0xBF1E0001, 0xC01E0000, 0xC11E0001, + 0xC21E0000, 0xC31E0001, 0xC41E0000, 0xC51E0001, + 0xC61E0000, 0xC71E0001, 0xC81E0000, 0xC91E0001, + 0xCA1E0000, 0xCB1E0001, 0xCC1E0000, 0xCD1E0001, + 0xCE1E0000, 0xCF1E0001, 0xD01E0000, 0xD11E0001, + 0xD21E0000, 0xD31E0001, 0xD41E0000, 0xD51E0001, + 0xD61E0000, 0xD71E0001, 0xD81E0000, 0xD91E0001, + 0xDA1E0000, 0xDB1E0001, 0xDC1E0000, 0xDD1E0001, + 0xDE1E0000, 0xDF1E0001, 0xE01E0000, 0xE11E0001, + 0xE21E0000, 0xE31E0001, 0xE41E0000, 0xE51E0001, + 0xE61E0000, 0xE71E0001, 0xE81E0000, 0xE91E0001, + 0xEA1E0000, 0xEB1E0001, 0xEC1E0000, 0xED1E0001, + 0xEE1E0000, 0xEF1E0001, 0xF01E0000, 0xF11E0001, + 0xF21E0000, 0xF31E0001, 0xF41E0000, 0xF51E0001, + 0xF61E0000, 0xF71E0001, 0xF81E0000, 0xF91E0001, + 0xFA1E0000, 0xFB1E0001, 0xFC1E0000, 0xFD1E0001, + 0xFE1E0000, 0xFF1E0001, 0x081F0000, 0x001F0001, + 0x091F0000, 0x011F0001, 0x0A1F0000, 0x021F0001, + 0x0B1F0000, 0x031F0001, 0x0C1F0000, 0x041F0001, + 0x0D1F0000, 0x051F0001, 0x0E1F0000, 0x061F0001, + 0x0F1F0000, 0x071F0001, 0x181F0000, 0x101F0001, + 0x191F0000, 0x111F0001, 0x1A1F0000, 0x121F0001, + 0x1B1F0000, 0x131F0001, 0x1C1F0000, 0x141F0001, + 0x1D1F0000, 0x151F0001, 0x281F0000, 0x201F0001, + 0x291F0000, 0x211F0001, 0x2A1F0000, 0x221F0001, + 0x2B1F0000, 0x231F0001, 0x2C1F0000, 0x241F0001, + 0x2D1F0000, 0x251F0001, 0x2E1F0000, 0x261F0001, + 0x2F1F0000, 0x271F0001, 0x381F0000, 0x301F0001, + 0x391F0000, 0x311F0001, 0x3A1F0000, 0x321F0001, + 0x3B1F0000, 0x331F0001, 0x3C1F0000, 0x341F0001, + 0x3D1F0000, 0x351F0001, 0x3E1F0000, 0x361F0001, + 0x3F1F0000, 0x371F0001, 0x481F0000, 0x401F0001, + 0x491F0000, 0x411F0001, 0x4A1F0000, 0x421F0001, + 0x4B1F0000, 0x431F0001, 0x4C1F0000, 0x441F0001, + 0x4D1F0000, 0x451F0001, 0x591F0000, 0x511F0001, + 0x5B1F0000, 0x531F0001, 0x5D1F0000, 0x551F0001, + 0x5F1F0000, 0x571F0001, 0x681F0000, 0x601F0001, + 0x691F0000, 0x611F0001, 0x6A1F0000, 0x621F0001, + 0x6B1F0000, 0x631F0001, 0x6C1F0000, 0x641F0001, + 0x6D1F0000, 0x651F0001, 0x6E1F0000, 0x661F0001, + 0x6F1F0000, 0x671F0001, 0x881F0000, 0x801F0001, + 0x891F0000, 0x811F0001, 0x8A1F0000, 0x821F0001, + 0x8B1F0000, 0x831F0001, 0x8C1F0000, 0x841F0001, + 0x8D1F0000, 0x851F0001, 0x8E1F0000, 0x861F0001, + 0x8F1F0000, 0x871F0001, 0x981F0000, 0x901F0001, + 0x991F0000, 0x911F0001, 0x9A1F0000, 0x921F0001, + 0x9B1F0000, 0x931F0001, 0x9C1F0000, 0x941F0001, + 0x9D1F0000, 0x951F0001, 0x9E1F0000, 0x961F0001, + 0x9F1F0000, 0x971F0001, 0xA81F0000, 0xA01F0001, + 0xA91F0000, 0xA11F0001, 0xAA1F0000, 0xA21F0001, + 0xAB1F0000, 0xA31F0001, 0xAC1F0000, 0xA41F0001, + 0xAD1F0000, 0xA51F0001, 0xAE1F0000, 0xA61F0001, + 0xAF1F0000, 0xA71F0001, 0xB81F0000, 0xB01F0001, + 0xB91F0000, 0xB11F0001, 0xBA1F0000, 0x701F0001, + 0xBB1F0000, 0x711F0001, 0xBC1F0000, 0xB31F0001, + 0xC81F0000, 0x721F0001, 0xC91F0000, 0x731F0001, + 0xCA1F0000, 0x741F0001, 0xCB1F0000, 0x751F0001, + 0xCC1F0000, 0xC31F0001, 0xD81F0000, 0xD01F0001, + 0xD91F0000, 0xD11F0001, 0xDA1F0000, 0x761F0001, + 0xDB1F0000, 0x771F0001, 0xE81F0000, 0xE01F0001, + 0xE91F0000, 0xE11F0001, 0xEA1F0000, 0x7A1F0001, + 0xEB1F0000, 0x7B1F0001, 0xEC1F0000, 0xE51F0001, + 0xF81F0000, 0x781F0001, 0xF91F0000, 0x791F0001, + 0xFA1F0000, 0x7C1F0001, 0xFB1F0000, 0x7D1F0001, + 0xFC1F0000, 0xF31F0001, 0x26210000, 0xC9030001, + 0x2A210000, 0x6B000001, 0x2B210000, 0xE5000001, + 0x32210000, 0x4E210001, 0x60210000, 0x70210001, + 0x61210000, 0x71210001, 0x62210000, 0x72210001, + 0x63210000, 0x73210001, 0x64210000, 0x74210001, + 0x65210000, 0x75210001, 0x66210000, 0x76210001, + 0x67210000, 0x77210001, 0x68210000, 0x78210001, + 0x69210000, 0x79210001, 0x6A210000, 0x7A210001, + 0x6B210000, 0x7B210001, 0x6C210000, 0x7C210001, + 0x6D210000, 0x7D210001, 0x6E210000, 0x7E210001, + 0x6F210000, 0x7F210001, 0x83210000, 0x84210001, + 0xB6240000, 0xD0240001, 0xB7240000, 0xD1240001, + 0xB8240000, 0xD2240001, 0xB9240000, 0xD3240001, + 0xBA240000, 0xD4240001, 0xBB240000, 0xD5240001, + 0xBC240000, 0xD6240001, 0xBD240000, 0xD7240001, + 0xBE240000, 0xD8240001, 0xBF240000, 0xD9240001, + 0xC0240000, 0xDA240001, 0xC1240000, 0xDB240001, + 0xC2240000, 0xDC240001, 0xC3240000, 0xDD240001, + 0xC4240000, 0xDE240001, 0xC5240000, 0xDF240001, + 0xC6240000, 0xE0240001, 0xC7240000, 0xE1240001, + 0xC8240000, 0xE2240001, 0xC9240000, 0xE3240001, + 0xCA240000, 0xE4240001, 0xCB240000, 0xE5240001, + 0xCC240000, 0xE6240001, 0xCD240000, 0xE7240001, + 0xCE240000, 0xE8240001, 0xCF240000, 0xE9240001, + 0x002C0000, 0x302C0001, 0x012C0000, 0x312C0001, + 0x022C0000, 0x322C0001, 0x032C0000, 0x332C0001, + 0x042C0000, 0x342C0001, 0x052C0000, 0x352C0001, + 0x062C0000, 0x362C0001, 0x072C0000, 0x372C0001, + 0x082C0000, 0x382C0001, 0x092C0000, 0x392C0001, + 0x0A2C0000, 0x3A2C0001, 0x0B2C0000, 0x3B2C0001, + 0x0C2C0000, 0x3C2C0001, 0x0D2C0000, 0x3D2C0001, + 0x0E2C0000, 0x3E2C0001, 0x0F2C0000, 0x3F2C0001, + 0x102C0000, 0x402C0001, 0x112C0000, 0x412C0001, + 0x122C0000, 0x422C0001, 0x132C0000, 0x432C0001, + 0x142C0000, 0x442C0001, 0x152C0000, 0x452C0001, + 0x162C0000, 0x462C0001, 0x172C0000, 0x472C0001, + 0x182C0000, 0x482C0001, 0x192C0000, 0x492C0001, + 0x1A2C0000, 0x4A2C0001, 0x1B2C0000, 0x4B2C0001, + 0x1C2C0000, 0x4C2C0001, 0x1D2C0000, 0x4D2C0001, + 0x1E2C0000, 0x4E2C0001, 0x1F2C0000, 0x4F2C0001, + 0x202C0000, 0x502C0001, 0x212C0000, 0x512C0001, + 0x222C0000, 0x522C0001, 0x232C0000, 0x532C0001, + 0x242C0000, 0x542C0001, 0x252C0000, 0x552C0001, + 0x262C0000, 0x562C0001, 0x272C0000, 0x572C0001, + 0x282C0000, 0x582C0001, 0x292C0000, 0x592C0001, + 0x2A2C0000, 0x5A2C0001, 0x2B2C0000, 0x5B2C0001, + 0x2C2C0000, 0x5C2C0001, 0x2D2C0000, 0x5D2C0001, + 0x2E2C0000, 0x5E2C0001, 0x2F2C0000, 0x5F2C0001, + 0x602C0000, 0x612C0001, 0x622C0000, 0x6B020001, + 0x632C0000, 0x7D1D0001, 0x642C0000, 0x7D020001, + 0x672C0000, 0x682C0001, 0x692C0000, 0x6A2C0001, + 0x6B2C0000, 0x6C2C0001, 0x6D2C0000, 0x51020001, + 0x6E2C0000, 0x71020001, 0x6F2C0000, 0x50020001, + 0x702C0000, 0x52020001, 0x722C0000, 0x732C0001, + 0x752C0000, 0x762C0001, 0x7E2C0000, 0x3F020001, + 0x7F2C0000, 0x40020001, 0x802C0000, 0x812C0001, + 0x822C0000, 0x832C0001, 0x842C0000, 0x852C0001, + 0x862C0000, 0x872C0001, 0x882C0000, 0x892C0001, + 0x8A2C0000, 0x8B2C0001, 0x8C2C0000, 0x8D2C0001, + 0x8E2C0000, 0x8F2C0001, 0x902C0000, 0x912C0001, + 0x922C0000, 0x932C0001, 0x942C0000, 0x952C0001, + 0x962C0000, 0x972C0001, 0x982C0000, 0x992C0001, + 0x9A2C0000, 0x9B2C0001, 0x9C2C0000, 0x9D2C0001, + 0x9E2C0000, 0x9F2C0001, 0xA02C0000, 0xA12C0001, + 0xA22C0000, 0xA32C0001, 0xA42C0000, 0xA52C0001, + 0xA62C0000, 0xA72C0001, 0xA82C0000, 0xA92C0001, + 0xAA2C0000, 0xAB2C0001, 0xAC2C0000, 0xAD2C0001, + 0xAE2C0000, 0xAF2C0001, 0xB02C0000, 0xB12C0001, + 0xB22C0000, 0xB32C0001, 0xB42C0000, 0xB52C0001, + 0xB62C0000, 0xB72C0001, 0xB82C0000, 0xB92C0001, + 0xBA2C0000, 0xBB2C0001, 0xBC2C0000, 0xBD2C0001, + 0xBE2C0000, 0xBF2C0001, 0xC02C0000, 0xC12C0001, + 0xC22C0000, 0xC32C0001, 0xC42C0000, 0xC52C0001, + 0xC62C0000, 0xC72C0001, 0xC82C0000, 0xC92C0001, + 0xCA2C0000, 0xCB2C0001, 0xCC2C0000, 0xCD2C0001, + 0xCE2C0000, 0xCF2C0001, 0xD02C0000, 0xD12C0001, + 0xD22C0000, 0xD32C0001, 0xD42C0000, 0xD52C0001, + 0xD62C0000, 0xD72C0001, 0xD82C0000, 0xD92C0001, + 0xDA2C0000, 0xDB2C0001, 0xDC2C0000, 0xDD2C0001, + 0xDE2C0000, 0xDF2C0001, 0xE02C0000, 0xE12C0001, + 0xE22C0000, 0xE32C0001, 0xEB2C0000, 0xEC2C0001, + 0xED2C0000, 0xEE2C0001, 0xF22C0000, 0xF32C0001, + 0x40A60000, 0x41A60001, 0x42A60000, 0x43A60001, + 0x44A60000, 0x45A60001, 0x46A60000, 0x47A60001, + 0x48A60000, 0x49A60001, 0x4AA60000, 0x4BA60001, + 0x4CA60000, 0x4DA60001, 0x4EA60000, 0x4FA60001, + 0x50A60000, 0x51A60001, 0x52A60000, 0x53A60001, + 0x54A60000, 0x55A60001, 0x56A60000, 0x57A60001, + 0x58A60000, 0x59A60001, 0x5AA60000, 0x5BA60001, + 0x5CA60000, 0x5DA60001, 0x5EA60000, 0x5FA60001, + 0x60A60000, 0x61A60001, 0x62A60000, 0x63A60001, + 0x64A60000, 0x65A60001, 0x66A60000, 0x67A60001, + 0x68A60000, 0x69A60001, 0x6AA60000, 0x6BA60001, + 0x6CA60000, 0x6DA60001, 0x80A60000, 0x81A60001, + 0x82A60000, 0x83A60001, 0x84A60000, 0x85A60001, + 0x86A60000, 0x87A60001, 0x88A60000, 0x89A60001, + 0x8AA60000, 0x8BA60001, 0x8CA60000, 0x8DA60001, + 0x8EA60000, 0x8FA60001, 0x90A60000, 0x91A60001, + 0x92A60000, 0x93A60001, 0x94A60000, 0x95A60001, + 0x96A60000, 0x97A60001, 0x98A60000, 0x99A60001, + 0x9AA60000, 0x9BA60001, 0x22A70000, 0x23A70001, + 0x24A70000, 0x25A70001, 0x26A70000, 0x27A70001, + 0x28A70000, 0x29A70001, 0x2AA70000, 0x2BA70001, + 0x2CA70000, 0x2DA70001, 0x2EA70000, 0x2FA70001, + 0x32A70000, 0x33A70001, 0x34A70000, 0x35A70001, + 0x36A70000, 0x37A70001, 0x38A70000, 0x39A70001, + 0x3AA70000, 0x3BA70001, 0x3CA70000, 0x3DA70001, + 0x3EA70000, 0x3FA70001, 0x40A70000, 0x41A70001, + 0x42A70000, 0x43A70001, 0x44A70000, 0x45A70001, + 0x46A70000, 0x47A70001, 0x48A70000, 0x49A70001, + 0x4AA70000, 0x4BA70001, 0x4CA70000, 0x4DA70001, + 0x4EA70000, 0x4FA70001, 0x50A70000, 0x51A70001, + 0x52A70000, 0x53A70001, 0x54A70000, 0x55A70001, + 0x56A70000, 0x57A70001, 0x58A70000, 0x59A70001, + 0x5AA70000, 0x5BA70001, 0x5CA70000, 0x5DA70001, + 0x5EA70000, 0x5FA70001, 0x60A70000, 0x61A70001, + 0x62A70000, 0x63A70001, 0x64A70000, 0x65A70001, + 0x66A70000, 0x67A70001, 0x68A70000, 0x69A70001, + 0x6AA70000, 0x6BA70001, 0x6CA70000, 0x6DA70001, + 0x6EA70000, 0x6FA70001, 0x79A70000, 0x7AA70001, + 0x7BA70000, 0x7CA70001, 0x7DA70000, 0x791D0001, + 0x7EA70000, 0x7FA70001, 0x80A70000, 0x81A70001, + 0x82A70000, 0x83A70001, 0x84A70000, 0x85A70001, + 0x86A70000, 0x87A70001, 0x8BA70000, 0x8CA70001, + 0x8DA70000, 0x65020001, 0x90A70000, 0x91A70001, + 0x92A70000, 0x93A70001, 0x96A70000, 0x97A70001, + 0x98A70000, 0x99A70001, 0x9AA70000, 0x9BA70001, + 0x9CA70000, 0x9DA70001, 0x9EA70000, 0x9FA70001, + 0xA0A70000, 0xA1A70001, 0xA2A70000, 0xA3A70001, + 0xA4A70000, 0xA5A70001, 0xA6A70000, 0xA7A70001, + 0xA8A70000, 0xA9A70001, 0xAAA70000, 0x66020001, + 0xABA70000, 0x5C020001, 0xACA70000, 0x61020001, + 0xADA70000, 0x6C020001, 0xAEA70000, 0x6A020001, + 0xB0A70000, 0x9E020001, 0xB1A70000, 0x87020001, + 0xB2A70000, 0x9D020001, 0xB3A70000, 0x53AB0001, + 0xB4A70000, 0xB5A70001, 0xB6A70000, 0xB7A70001, + 0xB8A70000, 0xB9A70001, 0xBAA70000, 0xBBA70001, + 0xBCA70000, 0xBDA70001, 0xBEA70000, 0xBFA70001, + 0xC0A70000, 0xC1A70001, 0xC2A70000, 0xC3A70001, + 0xC4A70000, 0x94A70001, 0xC5A70000, 0x82020001, + 0xC6A70000, 0x8E1D0001, 0xC7A70000, 0xC8A70001, + 0xC9A70000, 0xCAA70001, 0xD0A70000, 0xD1A70001, + 0xD6A70000, 0xD7A70001, 0xD8A70000, 0xD9A70001, + 0xF5A70000, 0xF6A70001, 0x21FF0000, 0x41FF0001, + 0x22FF0000, 0x42FF0001, 0x23FF0000, 0x43FF0001, + 0x24FF0000, 0x44FF0001, 0x25FF0000, 0x45FF0001, + 0x26FF0000, 0x46FF0001, 0x27FF0000, 0x47FF0001, + 0x28FF0000, 0x48FF0001, 0x29FF0000, 0x49FF0001, + 0x2AFF0000, 0x4AFF0001, 0x2BFF0000, 0x4BFF0001, + 0x2CFF0000, 0x4CFF0001, 0x2DFF0000, 0x4DFF0001, + 0x2EFF0000, 0x4EFF0001, 0x2FFF0000, 0x4FFF0001, + 0x30FF0000, 0x50FF0001, 0x31FF0000, 0x51FF0001, + 0x32FF0000, 0x52FF0001, 0x33FF0000, 0x53FF0001, + 0x34FF0000, 0x54FF0001, 0x35FF0000, 0x55FF0001, + 0x36FF0000, 0x56FF0001, 0x37FF0000, 0x57FF0001, + 0x38FF0000, 0x58FF0001, 0x39FF0000, 0x59FF0001, + 0x3AFF0000, 0x5AFF0001, 0x00040100, 0x28040181, + 0x01040100, 0x29040181, 0x02040100, 0x2A040181, + 0x03040100, 0x2B040181, 0x04040100, 0x2C040181, + 0x05040100, 0x2D040181, 0x06040100, 0x2E040181, + 0x07040100, 0x2F040181, 0x08040100, 0x30040181, + 0x09040100, 0x31040181, 0x0A040100, 0x32040181, + 0x0B040100, 0x33040181, 0x0C040100, 0x34040181, + 0x0D040100, 0x35040181, 0x0E040100, 0x36040181, + 0x0F040100, 0x37040181, 0x10040100, 0x38040181, + 0x11040100, 0x39040181, 0x12040100, 0x3A040181, + 0x13040100, 0x3B040181, 0x14040100, 0x3C040181, + 0x15040100, 0x3D040181, 0x16040100, 0x3E040181, + 0x17040100, 0x3F040181, 0x18040100, 0x40040181, + 0x19040100, 0x41040181, 0x1A040100, 0x42040181, + 0x1B040100, 0x43040181, 0x1C040100, 0x44040181, + 0x1D040100, 0x45040181, 0x1E040100, 0x46040181, + 0x1F040100, 0x47040181, 0x20040100, 0x48040181, + 0x21040100, 0x49040181, 0x22040100, 0x4A040181, + 0x23040100, 0x4B040181, 0x24040100, 0x4C040181, + 0x25040100, 0x4D040181, 0x26040100, 0x4E040181, + 0x27040100, 0x4F040181, 0xB0040100, 0xD8040181, + 0xB1040100, 0xD9040181, 0xB2040100, 0xDA040181, + 0xB3040100, 0xDB040181, 0xB4040100, 0xDC040181, + 0xB5040100, 0xDD040181, 0xB6040100, 0xDE040181, + 0xB7040100, 0xDF040181, 0xB8040100, 0xE0040181, + 0xB9040100, 0xE1040181, 0xBA040100, 0xE2040181, + 0xBB040100, 0xE3040181, 0xBC040100, 0xE4040181, + 0xBD040100, 0xE5040181, 0xBE040100, 0xE6040181, + 0xBF040100, 0xE7040181, 0xC0040100, 0xE8040181, + 0xC1040100, 0xE9040181, 0xC2040100, 0xEA040181, + 0xC3040100, 0xEB040181, 0xC4040100, 0xEC040181, + 0xC5040100, 0xED040181, 0xC6040100, 0xEE040181, + 0xC7040100, 0xEF040181, 0xC8040100, 0xF0040181, + 0xC9040100, 0xF1040181, 0xCA040100, 0xF2040181, + 0xCB040100, 0xF3040181, 0xCC040100, 0xF4040181, + 0xCD040100, 0xF5040181, 0xCE040100, 0xF6040181, + 0xCF040100, 0xF7040181, 0xD0040100, 0xF8040181, + 0xD1040100, 0xF9040181, 0xD2040100, 0xFA040181, + 0xD3040100, 0xFB040181, 0x70050100, 0x97050181, + 0x71050100, 0x98050181, 0x72050100, 0x99050181, + 0x73050100, 0x9A050181, 0x74050100, 0x9B050181, + 0x75050100, 0x9C050181, 0x76050100, 0x9D050181, + 0x77050100, 0x9E050181, 0x78050100, 0x9F050181, + 0x79050100, 0xA0050181, 0x7A050100, 0xA1050181, + 0x7C050100, 0xA3050181, 0x7D050100, 0xA4050181, + 0x7E050100, 0xA5050181, 0x7F050100, 0xA6050181, + 0x80050100, 0xA7050181, 0x81050100, 0xA8050181, + 0x82050100, 0xA9050181, 0x83050100, 0xAA050181, + 0x84050100, 0xAB050181, 0x85050100, 0xAC050181, + 0x86050100, 0xAD050181, 0x87050100, 0xAE050181, + 0x88050100, 0xAF050181, 0x89050100, 0xB0050181, + 0x8A050100, 0xB1050181, 0x8C050100, 0xB3050181, + 0x8D050100, 0xB4050181, 0x8E050100, 0xB5050181, + 0x8F050100, 0xB6050181, 0x90050100, 0xB7050181, + 0x91050100, 0xB8050181, 0x92050100, 0xB9050181, + 0x94050100, 0xBB050181, 0x95050100, 0xBC050181, + 0x800C0100, 0xC00C0181, 0x810C0100, 0xC10C0181, + 0x820C0100, 0xC20C0181, 0x830C0100, 0xC30C0181, + 0x840C0100, 0xC40C0181, 0x850C0100, 0xC50C0181, + 0x860C0100, 0xC60C0181, 0x870C0100, 0xC70C0181, + 0x880C0100, 0xC80C0181, 0x890C0100, 0xC90C0181, + 0x8A0C0100, 0xCA0C0181, 0x8B0C0100, 0xCB0C0181, + 0x8C0C0100, 0xCC0C0181, 0x8D0C0100, 0xCD0C0181, + 0x8E0C0100, 0xCE0C0181, 0x8F0C0100, 0xCF0C0181, + 0x900C0100, 0xD00C0181, 0x910C0100, 0xD10C0181, + 0x920C0100, 0xD20C0181, 0x930C0100, 0xD30C0181, + 0x940C0100, 0xD40C0181, 0x950C0100, 0xD50C0181, + 0x960C0100, 0xD60C0181, 0x970C0100, 0xD70C0181, + 0x980C0100, 0xD80C0181, 0x990C0100, 0xD90C0181, + 0x9A0C0100, 0xDA0C0181, 0x9B0C0100, 0xDB0C0181, + 0x9C0C0100, 0xDC0C0181, 0x9D0C0100, 0xDD0C0181, + 0x9E0C0100, 0xDE0C0181, 0x9F0C0100, 0xDF0C0181, + 0xA00C0100, 0xE00C0181, 0xA10C0100, 0xE10C0181, + 0xA20C0100, 0xE20C0181, 0xA30C0100, 0xE30C0181, + 0xA40C0100, 0xE40C0181, 0xA50C0100, 0xE50C0181, + 0xA60C0100, 0xE60C0181, 0xA70C0100, 0xE70C0181, + 0xA80C0100, 0xE80C0181, 0xA90C0100, 0xE90C0181, + 0xAA0C0100, 0xEA0C0181, 0xAB0C0100, 0xEB0C0181, + 0xAC0C0100, 0xEC0C0181, 0xAD0C0100, 0xED0C0181, + 0xAE0C0100, 0xEE0C0181, 0xAF0C0100, 0xEF0C0181, + 0xB00C0100, 0xF00C0181, 0xB10C0100, 0xF10C0181, + 0xB20C0100, 0xF20C0181, 0xA0180100, 0xC0180181, + 0xA1180100, 0xC1180181, 0xA2180100, 0xC2180181, + 0xA3180100, 0xC3180181, 0xA4180100, 0xC4180181, + 0xA5180100, 0xC5180181, 0xA6180100, 0xC6180181, + 0xA7180100, 0xC7180181, 0xA8180100, 0xC8180181, + 0xA9180100, 0xC9180181, 0xAA180100, 0xCA180181, + 0xAB180100, 0xCB180181, 0xAC180100, 0xCC180181, + 0xAD180100, 0xCD180181, 0xAE180100, 0xCE180181, + 0xAF180100, 0xCF180181, 0xB0180100, 0xD0180181, + 0xB1180100, 0xD1180181, 0xB2180100, 0xD2180181, + 0xB3180100, 0xD3180181, 0xB4180100, 0xD4180181, + 0xB5180100, 0xD5180181, 0xB6180100, 0xD6180181, + 0xB7180100, 0xD7180181, 0xB8180100, 0xD8180181, + 0xB9180100, 0xD9180181, 0xBA180100, 0xDA180181, + 0xBB180100, 0xDB180181, 0xBC180100, 0xDC180181, + 0xBD180100, 0xDD180181, 0xBE180100, 0xDE180181, + 0xBF180100, 0xDF180181, 0x406E0100, 0x606E0181, + 0x416E0100, 0x616E0181, 0x426E0100, 0x626E0181, + 0x436E0100, 0x636E0181, 0x446E0100, 0x646E0181, + 0x456E0100, 0x656E0181, 0x466E0100, 0x666E0181, + 0x476E0100, 0x676E0181, 0x486E0100, 0x686E0181, + 0x496E0100, 0x696E0181, 0x4A6E0100, 0x6A6E0181, + 0x4B6E0100, 0x6B6E0181, 0x4C6E0100, 0x6C6E0181, + 0x4D6E0100, 0x6D6E0181, 0x4E6E0100, 0x6E6E0181, + 0x4F6E0100, 0x6F6E0181, 0x506E0100, 0x706E0181, + 0x516E0100, 0x716E0181, 0x526E0100, 0x726E0181, + 0x536E0100, 0x736E0181, 0x546E0100, 0x746E0181, + 0x556E0100, 0x756E0181, 0x566E0100, 0x766E0181, + 0x576E0100, 0x776E0181, 0x586E0100, 0x786E0181, + 0x596E0100, 0x796E0181, 0x5A6E0100, 0x7A6E0181, + 0x5B6E0100, 0x7B6E0181, 0x5C6E0100, 0x7C6E0181, + 0x5D6E0100, 0x7D6E0181, 0x5E6E0100, 0x7E6E0181, + 0x5F6E0100, 0x7F6E0181, 0x00E90100, 0x22E90181, + 0x01E90100, 0x23E90181, 0x02E90100, 0x24E90181, + 0x03E90100, 0x25E90181, 0x04E90100, 0x26E90181, + 0x05E90100, 0x27E90181, 0x06E90100, 0x28E90181, + 0x07E90100, 0x29E90181, 0x08E90100, 0x2AE90181, + 0x09E90100, 0x2BE90181, 0x0AE90100, 0x2CE90181, + 0x0BE90100, 0x2DE90181, 0x0CE90100, 0x2EE90181, + 0x0DE90100, 0x2FE90181, 0x0EE90100, 0x30E90181, + 0x0FE90100, 0x31E90181, 0x10E90100, 0x32E90181, + 0x11E90100, 0x33E90181, 0x12E90100, 0x34E90181, + 0x13E90100, 0x35E90181, 0x14E90100, 0x36E90181, + 0x15E90100, 0x37E90181, 0x16E90100, 0x38E90181, + 0x17E90100, 0x39E90181, 0x18E90100, 0x3AE90181, + 0x19E90100, 0x3BE90181, 0x1AE90100, 0x3CE90181, + 0x1BE90100, 0x3DE90181, 0x1CE90100, 0x3EE90181, + 0x1DE90100, 0x3FE90181, 0x1EE90100, 0x40E90181, + 0x1FE90100, 0x41E90181, 0x20E90100, 0x42E90181, + 0x21E90100, 0x43E90181, +}; + +static uint32_t const __CFUniCharToLowercaseMappingTableCount = 1433; + +static uint32_t const __CFUniCharToLowercaseMappingExtraTable[] = { + 0x69000000, 0x07030000, +}; + +static uint32_t const __CFUniCharToLowercaseMappingExtraTableCount = 1; + +static uint32_t const __CFUniCharCaseFoldMappingTable[] = { + 0xB5000000, 0xBC030001, 0xDF000000, 0x00000002, + 0x49010000, 0x02000002, 0x7F010000, 0x73000001, + 0xF0010000, 0x04000002, 0x45030000, 0xB9030001, + 0x90030000, 0x06000003, 0xB0030000, 0x09000003, + 0xC2030000, 0xC3030001, 0xD0030000, 0xB2030001, + 0xD1030000, 0xB8030001, 0xD5030000, 0xC6030001, + 0xD6030000, 0xC0030001, 0xF0030000, 0xBA030001, + 0xF1030000, 0xC1030001, 0xF5030000, 0xB5030001, + 0x87050000, 0x0C000002, 0x961E0000, 0x0E000002, + 0x971E0000, 0x10000002, 0x981E0000, 0x12000002, + 0x991E0000, 0x14000002, 0x9A1E0000, 0x16000002, + 0x9B1E0000, 0x611E0001, 0x9E1E0000, 0x18000002, + 0x501F0000, 0x1A000002, 0x521F0000, 0x1C000003, + 0x541F0000, 0x1F000003, 0x561F0000, 0x22000003, + 0x801F0000, 0x25000002, 0x811F0000, 0x27000002, + 0x821F0000, 0x29000002, 0x831F0000, 0x2B000002, + 0x841F0000, 0x2D000002, 0x851F0000, 0x2F000002, + 0x861F0000, 0x31000002, 0x871F0000, 0x33000002, + 0x881F0000, 0x35000002, 0x891F0000, 0x37000002, + 0x8A1F0000, 0x39000002, 0x8B1F0000, 0x3B000002, + 0x8C1F0000, 0x3D000002, 0x8D1F0000, 0x3F000002, + 0x8E1F0000, 0x41000002, 0x8F1F0000, 0x43000002, + 0x901F0000, 0x45000002, 0x911F0000, 0x47000002, + 0x921F0000, 0x49000002, 0x931F0000, 0x4B000002, + 0x941F0000, 0x4D000002, 0x951F0000, 0x4F000002, + 0x961F0000, 0x51000002, 0x971F0000, 0x53000002, + 0x981F0000, 0x55000002, 0x991F0000, 0x57000002, + 0x9A1F0000, 0x59000002, 0x9B1F0000, 0x5B000002, + 0x9C1F0000, 0x5D000002, 0x9D1F0000, 0x5F000002, + 0x9E1F0000, 0x61000002, 0x9F1F0000, 0x63000002, + 0xA01F0000, 0x65000002, 0xA11F0000, 0x67000002, + 0xA21F0000, 0x69000002, 0xA31F0000, 0x6B000002, + 0xA41F0000, 0x6D000002, 0xA51F0000, 0x6F000002, + 0xA61F0000, 0x71000002, 0xA71F0000, 0x73000002, + 0xA81F0000, 0x75000002, 0xA91F0000, 0x77000002, + 0xAA1F0000, 0x79000002, 0xAB1F0000, 0x7B000002, + 0xAC1F0000, 0x7D000002, 0xAD1F0000, 0x7F000002, + 0xAE1F0000, 0x81000002, 0xAF1F0000, 0x83000002, + 0xB21F0000, 0x85000002, 0xB31F0000, 0x87000002, + 0xB41F0000, 0x89000002, 0xB61F0000, 0x8B000002, + 0xB71F0000, 0x8D000003, 0xBC1F0000, 0x90000002, + 0xBE1F0000, 0xB9030001, 0xC21F0000, 0x92000002, + 0xC31F0000, 0x94000002, 0xC41F0000, 0x96000002, + 0xC61F0000, 0x98000002, 0xC71F0000, 0x9A000003, + 0xCC1F0000, 0x9D000002, 0xD21F0000, 0x9F000003, + 0xD31F0000, 0xA2000003, 0xD61F0000, 0xA5000002, + 0xD71F0000, 0xA7000003, 0xE21F0000, 0xAA000003, + 0xE31F0000, 0xAD000003, 0xE41F0000, 0xB0000002, + 0xE61F0000, 0xB2000002, 0xE71F0000, 0xB4000003, + 0xF21F0000, 0xB7000002, 0xF31F0000, 0xB9000002, + 0xF41F0000, 0xBB000002, 0xF61F0000, 0xBD000002, + 0xF71F0000, 0xBF000003, 0xFC1F0000, 0xC2000002, + 0x00FB0000, 0xC4000002, 0x01FB0000, 0xC6000002, + 0x02FB0000, 0xC8000002, 0x03FB0000, 0xCA000003, + 0x04FB0000, 0xCD000003, 0x05FB0000, 0xD0000002, + 0x06FB0000, 0xD2000002, 0x13FB0000, 0xD4000002, + 0x14FB0000, 0xD6000002, 0x15FB0000, 0xD8000002, + 0x16FB0000, 0xDA000002, 0x17FB0000, 0xDC000002, +}; + +static uint32_t const __CFUniCharCaseFoldMappingTableCount = 116; + +static uint32_t const __CFUniCharCaseFoldMappingExtraTable[] = { + 0x73000000, 0x73000000, 0xBC020000, 0x6E000000, + 0x6A000000, 0x0C030000, 0xB9030000, 0x08030000, + 0x01030000, 0xC5030000, 0x08030000, 0x01030000, + 0x65050000, 0x82050000, 0x68000000, 0x31030000, + 0x74000000, 0x08030000, 0x77000000, 0x0A030000, + 0x79000000, 0x0A030000, 0x61000000, 0xBE020000, + 0x73000000, 0x73000000, 0xC5030000, 0x13030000, + 0xC5030000, 0x13030000, 0x00030000, 0xC5030000, + 0x13030000, 0x01030000, 0xC5030000, 0x13030000, + 0x42030000, 0x001F0000, 0xB9030000, 0x011F0000, + 0xB9030000, 0x021F0000, 0xB9030000, 0x031F0000, + 0xB9030000, 0x041F0000, 0xB9030000, 0x051F0000, + 0xB9030000, 0x061F0000, 0xB9030000, 0x071F0000, + 0xB9030000, 0x001F0000, 0xB9030000, 0x011F0000, + 0xB9030000, 0x021F0000, 0xB9030000, 0x031F0000, + 0xB9030000, 0x041F0000, 0xB9030000, 0x051F0000, + 0xB9030000, 0x061F0000, 0xB9030000, 0x071F0000, + 0xB9030000, 0x201F0000, 0xB9030000, 0x211F0000, + 0xB9030000, 0x221F0000, 0xB9030000, 0x231F0000, + 0xB9030000, 0x241F0000, 0xB9030000, 0x251F0000, + 0xB9030000, 0x261F0000, 0xB9030000, 0x271F0000, + 0xB9030000, 0x201F0000, 0xB9030000, 0x211F0000, + 0xB9030000, 0x221F0000, 0xB9030000, 0x231F0000, + 0xB9030000, 0x241F0000, 0xB9030000, 0x251F0000, + 0xB9030000, 0x261F0000, 0xB9030000, 0x271F0000, + 0xB9030000, 0x601F0000, 0xB9030000, 0x611F0000, + 0xB9030000, 0x621F0000, 0xB9030000, 0x631F0000, + 0xB9030000, 0x641F0000, 0xB9030000, 0x651F0000, + 0xB9030000, 0x661F0000, 0xB9030000, 0x671F0000, + 0xB9030000, 0x601F0000, 0xB9030000, 0x611F0000, + 0xB9030000, 0x621F0000, 0xB9030000, 0x631F0000, + 0xB9030000, 0x641F0000, 0xB9030000, 0x651F0000, + 0xB9030000, 0x661F0000, 0xB9030000, 0x671F0000, + 0xB9030000, 0x701F0000, 0xB9030000, 0xB1030000, + 0xB9030000, 0xAC030000, 0xB9030000, 0xB1030000, + 0x42030000, 0xB1030000, 0x42030000, 0xB9030000, + 0xB1030000, 0xB9030000, 0x741F0000, 0xB9030000, + 0xB7030000, 0xB9030000, 0xAE030000, 0xB9030000, + 0xB7030000, 0x42030000, 0xB7030000, 0x42030000, + 0xB9030000, 0xB7030000, 0xB9030000, 0xB9030000, + 0x08030000, 0x00030000, 0xB9030000, 0x08030000, + 0x01030000, 0xB9030000, 0x42030000, 0xB9030000, + 0x08030000, 0x42030000, 0xC5030000, 0x08030000, + 0x00030000, 0xC5030000, 0x08030000, 0x01030000, + 0xC1030000, 0x13030000, 0xC5030000, 0x42030000, + 0xC5030000, 0x08030000, 0x42030000, 0x7C1F0000, + 0xB9030000, 0xC9030000, 0xB9030000, 0xCE030000, + 0xB9030000, 0xC9030000, 0x42030000, 0xC9030000, + 0x42030000, 0xB9030000, 0xC9030000, 0xB9030000, + 0x66000000, 0x66000000, 0x66000000, 0x69000000, + 0x66000000, 0x6C000000, 0x66000000, 0x66000000, + 0x69000000, 0x66000000, 0x66000000, 0x6C000000, + 0x73000000, 0x74000000, 0x73000000, 0x74000000, + 0x74050000, 0x76050000, 0x74050000, 0x65050000, + 0x74050000, 0x6B050000, 0x7E050000, 0x76050000, + 0x74050000, 0x6D050000, +}; + +static uint32_t const __CFUniCharCaseFoldMappingExtraTableCount = 111; + +static uint32_t const __CFUniCharCaseMappingTableCount = 4; +static uint32_t const * const __CFUniCharCaseMappingTable[] = { + __CFUniCharToLowercaseMappingTable, + __CFUniCharToUppercaseMappingTable, + __CFUniCharToTitlecaseMappingTable, + __CFUniCharCaseFoldMappingTable, +}; + +static uint32_t __CFUniCharCaseMappingTableCounts[] = { + __CFUniCharToLowercaseMappingTableCount, + __CFUniCharToUppercaseMappingTableCount, + __CFUniCharToTitlecaseMappingTableCount, + __CFUniCharCaseFoldMappingTableCount, +}; + +static uint32_t const __CFUniCharCaseMappingExtraTableCount = 4; +static uint32_t const * const __CFUniCharCaseMappingExtraTable[] = { + __CFUniCharToLowercaseMappingExtraTable, + __CFUniCharToUppercaseMappingExtraTable, + __CFUniCharToTitlecaseMappingExtraTable, + __CFUniCharCaseFoldMappingExtraTable, +}; + +static uint32_t __CFUniCharCaseMappingExtraTableCounts[] = { + __CFUniCharToLowercaseMappingExtraTableCount, + __CFUniCharToUppercaseMappingExtraTableCount, + __CFUniCharToTitlecaseMappingExtraTableCount, + __CFUniCharCaseFoldMappingExtraTableCount, +}; + +#endif // __BIG_ENDIAN__ + diff --git a/Sources/CoreFoundation/internalInclude/CFUnicodeCaseMapping-L.inc.h b/Sources/CoreFoundation/internalInclude/CFUnicodeCaseMapping-L.inc.h new file mode 100644 index 0000000000..bde08a4819 --- /dev/null +++ b/Sources/CoreFoundation/internalInclude/CFUnicodeCaseMapping-L.inc.h @@ -0,0 +1,1811 @@ +/* + CFUnicodeCaseMapping-L.inc.h + Copyright (c) 1999-2021, Apple Inc. and the Swift project authors. All rights reserved. + This file is generated. Don't touch this file directly. +*/ + +#if __LITTLE_ENDIAN__ + +static uint32_t const __CFUniCharToUppercaseMappingTable[] = { + 0x00000061, 0x01000041, 0x00000062, 0x01000042, + 0x00000063, 0x01000043, 0x00000064, 0x01000044, + 0x00000065, 0x01000045, 0x00000066, 0x01000046, + 0x00000067, 0x01000047, 0x00000068, 0x01000048, + 0x00000069, 0x01000049, 0x0000006A, 0x0100004A, + 0x0000006B, 0x0100004B, 0x0000006C, 0x0100004C, + 0x0000006D, 0x0100004D, 0x0000006E, 0x0100004E, + 0x0000006F, 0x0100004F, 0x00000070, 0x01000050, + 0x00000071, 0x01000051, 0x00000072, 0x01000052, + 0x00000073, 0x01000053, 0x00000074, 0x01000054, + 0x00000075, 0x01000055, 0x00000076, 0x01000056, + 0x00000077, 0x01000057, 0x00000078, 0x01000058, + 0x00000079, 0x01000059, 0x0000007A, 0x0100005A, + 0x000000B5, 0x0100039C, 0x000000DF, 0x02000000, + 0x000000E0, 0x010000C0, 0x000000E1, 0x010000C1, + 0x000000E2, 0x010000C2, 0x000000E3, 0x010000C3, + 0x000000E4, 0x010000C4, 0x000000E5, 0x010000C5, + 0x000000E6, 0x010000C6, 0x000000E7, 0x010000C7, + 0x000000E8, 0x010000C8, 0x000000E9, 0x010000C9, + 0x000000EA, 0x010000CA, 0x000000EB, 0x010000CB, + 0x000000EC, 0x010000CC, 0x000000ED, 0x010000CD, + 0x000000EE, 0x010000CE, 0x000000EF, 0x010000CF, + 0x000000F0, 0x010000D0, 0x000000F1, 0x010000D1, + 0x000000F2, 0x010000D2, 0x000000F3, 0x010000D3, + 0x000000F4, 0x010000D4, 0x000000F5, 0x010000D5, + 0x000000F6, 0x010000D6, 0x000000F8, 0x010000D8, + 0x000000F9, 0x010000D9, 0x000000FA, 0x010000DA, + 0x000000FB, 0x010000DB, 0x000000FC, 0x010000DC, + 0x000000FD, 0x010000DD, 0x000000FE, 0x010000DE, + 0x000000FF, 0x01000178, 0x00000101, 0x01000100, + 0x00000103, 0x01000102, 0x00000105, 0x01000104, + 0x00000107, 0x01000106, 0x00000109, 0x01000108, + 0x0000010B, 0x0100010A, 0x0000010D, 0x0100010C, + 0x0000010F, 0x0100010E, 0x00000111, 0x01000110, + 0x00000113, 0x01000112, 0x00000115, 0x01000114, + 0x00000117, 0x01000116, 0x00000119, 0x01000118, + 0x0000011B, 0x0100011A, 0x0000011D, 0x0100011C, + 0x0000011F, 0x0100011E, 0x00000121, 0x01000120, + 0x00000123, 0x01000122, 0x00000125, 0x01000124, + 0x00000127, 0x01000126, 0x00000129, 0x01000128, + 0x0000012B, 0x0100012A, 0x0000012D, 0x0100012C, + 0x0000012F, 0x0100012E, 0x00000131, 0x01000049, + 0x00000133, 0x01000132, 0x00000135, 0x01000134, + 0x00000137, 0x01000136, 0x0000013A, 0x01000139, + 0x0000013C, 0x0100013B, 0x0000013E, 0x0100013D, + 0x00000140, 0x0100013F, 0x00000142, 0x01000141, + 0x00000144, 0x01000143, 0x00000146, 0x01000145, + 0x00000148, 0x01000147, 0x00000149, 0x02000002, + 0x0000014B, 0x0100014A, 0x0000014D, 0x0100014C, + 0x0000014F, 0x0100014E, 0x00000151, 0x01000150, + 0x00000153, 0x01000152, 0x00000155, 0x01000154, + 0x00000157, 0x01000156, 0x00000159, 0x01000158, + 0x0000015B, 0x0100015A, 0x0000015D, 0x0100015C, + 0x0000015F, 0x0100015E, 0x00000161, 0x01000160, + 0x00000163, 0x01000162, 0x00000165, 0x01000164, + 0x00000167, 0x01000166, 0x00000169, 0x01000168, + 0x0000016B, 0x0100016A, 0x0000016D, 0x0100016C, + 0x0000016F, 0x0100016E, 0x00000171, 0x01000170, + 0x00000173, 0x01000172, 0x00000175, 0x01000174, + 0x00000177, 0x01000176, 0x0000017A, 0x01000179, + 0x0000017C, 0x0100017B, 0x0000017E, 0x0100017D, + 0x0000017F, 0x01000053, 0x00000180, 0x01000243, + 0x00000183, 0x01000182, 0x00000185, 0x01000184, + 0x00000188, 0x01000187, 0x0000018C, 0x0100018B, + 0x00000192, 0x01000191, 0x00000195, 0x010001F6, + 0x00000199, 0x01000198, 0x0000019A, 0x0100023D, + 0x0000019E, 0x01000220, 0x000001A1, 0x010001A0, + 0x000001A3, 0x010001A2, 0x000001A5, 0x010001A4, + 0x000001A8, 0x010001A7, 0x000001AD, 0x010001AC, + 0x000001B0, 0x010001AF, 0x000001B4, 0x010001B3, + 0x000001B6, 0x010001B5, 0x000001B9, 0x010001B8, + 0x000001BD, 0x010001BC, 0x000001BF, 0x010001F7, + 0x000001C5, 0x010001C4, 0x000001C6, 0x010001C4, + 0x000001C8, 0x010001C7, 0x000001C9, 0x010001C7, + 0x000001CB, 0x010001CA, 0x000001CC, 0x010001CA, + 0x000001CE, 0x010001CD, 0x000001D0, 0x010001CF, + 0x000001D2, 0x010001D1, 0x000001D4, 0x010001D3, + 0x000001D6, 0x010001D5, 0x000001D8, 0x010001D7, + 0x000001DA, 0x010001D9, 0x000001DC, 0x010001DB, + 0x000001DD, 0x0100018E, 0x000001DF, 0x010001DE, + 0x000001E1, 0x010001E0, 0x000001E3, 0x010001E2, + 0x000001E5, 0x010001E4, 0x000001E7, 0x010001E6, + 0x000001E9, 0x010001E8, 0x000001EB, 0x010001EA, + 0x000001ED, 0x010001EC, 0x000001EF, 0x010001EE, + 0x000001F0, 0x02000004, 0x000001F2, 0x010001F1, + 0x000001F3, 0x010001F1, 0x000001F5, 0x010001F4, + 0x000001F9, 0x010001F8, 0x000001FB, 0x010001FA, + 0x000001FD, 0x010001FC, 0x000001FF, 0x010001FE, + 0x00000201, 0x01000200, 0x00000203, 0x01000202, + 0x00000205, 0x01000204, 0x00000207, 0x01000206, + 0x00000209, 0x01000208, 0x0000020B, 0x0100020A, + 0x0000020D, 0x0100020C, 0x0000020F, 0x0100020E, + 0x00000211, 0x01000210, 0x00000213, 0x01000212, + 0x00000215, 0x01000214, 0x00000217, 0x01000216, + 0x00000219, 0x01000218, 0x0000021B, 0x0100021A, + 0x0000021D, 0x0100021C, 0x0000021F, 0x0100021E, + 0x00000223, 0x01000222, 0x00000225, 0x01000224, + 0x00000227, 0x01000226, 0x00000229, 0x01000228, + 0x0000022B, 0x0100022A, 0x0000022D, 0x0100022C, + 0x0000022F, 0x0100022E, 0x00000231, 0x01000230, + 0x00000233, 0x01000232, 0x0000023C, 0x0100023B, + 0x0000023F, 0x01002C7E, 0x00000240, 0x01002C7F, + 0x00000242, 0x01000241, 0x00000247, 0x01000246, + 0x00000249, 0x01000248, 0x0000024B, 0x0100024A, + 0x0000024D, 0x0100024C, 0x0000024F, 0x0100024E, + 0x00000250, 0x01002C6F, 0x00000251, 0x01002C6D, + 0x00000252, 0x01002C70, 0x00000253, 0x01000181, + 0x00000254, 0x01000186, 0x00000256, 0x01000189, + 0x00000257, 0x0100018A, 0x00000259, 0x0100018F, + 0x0000025B, 0x01000190, 0x0000025C, 0x0100A7AB, + 0x00000260, 0x01000193, 0x00000261, 0x0100A7AC, + 0x00000263, 0x01000194, 0x00000265, 0x0100A78D, + 0x00000266, 0x0100A7AA, 0x00000268, 0x01000197, + 0x00000269, 0x01000196, 0x0000026A, 0x0100A7AE, + 0x0000026B, 0x01002C62, 0x0000026C, 0x0100A7AD, + 0x0000026F, 0x0100019C, 0x00000271, 0x01002C6E, + 0x00000272, 0x0100019D, 0x00000275, 0x0100019F, + 0x0000027D, 0x01002C64, 0x00000280, 0x010001A6, + 0x00000282, 0x0100A7C5, 0x00000283, 0x010001A9, + 0x00000287, 0x0100A7B1, 0x00000288, 0x010001AE, + 0x00000289, 0x01000244, 0x0000028A, 0x010001B1, + 0x0000028B, 0x010001B2, 0x0000028C, 0x01000245, + 0x00000292, 0x010001B7, 0x0000029D, 0x0100A7B2, + 0x0000029E, 0x0100A7B0, 0x00000345, 0x01000399, + 0x00000371, 0x01000370, 0x00000373, 0x01000372, + 0x00000377, 0x01000376, 0x0000037B, 0x010003FD, + 0x0000037C, 0x010003FE, 0x0000037D, 0x010003FF, + 0x00000390, 0x03000006, 0x000003AC, 0x01000386, + 0x000003AD, 0x01000388, 0x000003AE, 0x01000389, + 0x000003AF, 0x0100038A, 0x000003B0, 0x03000009, + 0x000003B1, 0x01000391, 0x000003B2, 0x01000392, + 0x000003B3, 0x01000393, 0x000003B4, 0x01000394, + 0x000003B5, 0x01000395, 0x000003B6, 0x01000396, + 0x000003B7, 0x01000397, 0x000003B8, 0x01000398, + 0x000003B9, 0x01000399, 0x000003BA, 0x0100039A, + 0x000003BB, 0x0100039B, 0x000003BC, 0x0100039C, + 0x000003BD, 0x0100039D, 0x000003BE, 0x0100039E, + 0x000003BF, 0x0100039F, 0x000003C0, 0x010003A0, + 0x000003C1, 0x010003A1, 0x000003C2, 0x010003A3, + 0x000003C3, 0x010003A3, 0x000003C4, 0x010003A4, + 0x000003C5, 0x010003A5, 0x000003C6, 0x010003A6, + 0x000003C7, 0x010003A7, 0x000003C8, 0x010003A8, + 0x000003C9, 0x010003A9, 0x000003CA, 0x010003AA, + 0x000003CB, 0x010003AB, 0x000003CC, 0x0100038C, + 0x000003CD, 0x0100038E, 0x000003CE, 0x0100038F, + 0x000003D0, 0x01000392, 0x000003D1, 0x01000398, + 0x000003D5, 0x010003A6, 0x000003D6, 0x010003A0, + 0x000003D7, 0x010003CF, 0x000003D9, 0x010003D8, + 0x000003DB, 0x010003DA, 0x000003DD, 0x010003DC, + 0x000003DF, 0x010003DE, 0x000003E1, 0x010003E0, + 0x000003E3, 0x010003E2, 0x000003E5, 0x010003E4, + 0x000003E7, 0x010003E6, 0x000003E9, 0x010003E8, + 0x000003EB, 0x010003EA, 0x000003ED, 0x010003EC, + 0x000003EF, 0x010003EE, 0x000003F0, 0x0100039A, + 0x000003F1, 0x010003A1, 0x000003F2, 0x010003F9, + 0x000003F3, 0x0100037F, 0x000003F5, 0x01000395, + 0x000003F8, 0x010003F7, 0x000003FB, 0x010003FA, + 0x00000430, 0x01000410, 0x00000431, 0x01000411, + 0x00000432, 0x01000412, 0x00000433, 0x01000413, + 0x00000434, 0x01000414, 0x00000435, 0x01000415, + 0x00000436, 0x01000416, 0x00000437, 0x01000417, + 0x00000438, 0x01000418, 0x00000439, 0x01000419, + 0x0000043A, 0x0100041A, 0x0000043B, 0x0100041B, + 0x0000043C, 0x0100041C, 0x0000043D, 0x0100041D, + 0x0000043E, 0x0100041E, 0x0000043F, 0x0100041F, + 0x00000440, 0x01000420, 0x00000441, 0x01000421, + 0x00000442, 0x01000422, 0x00000443, 0x01000423, + 0x00000444, 0x01000424, 0x00000445, 0x01000425, + 0x00000446, 0x01000426, 0x00000447, 0x01000427, + 0x00000448, 0x01000428, 0x00000449, 0x01000429, + 0x0000044A, 0x0100042A, 0x0000044B, 0x0100042B, + 0x0000044C, 0x0100042C, 0x0000044D, 0x0100042D, + 0x0000044E, 0x0100042E, 0x0000044F, 0x0100042F, + 0x00000450, 0x01000400, 0x00000451, 0x01000401, + 0x00000452, 0x01000402, 0x00000453, 0x01000403, + 0x00000454, 0x01000404, 0x00000455, 0x01000405, + 0x00000456, 0x01000406, 0x00000457, 0x01000407, + 0x00000458, 0x01000408, 0x00000459, 0x01000409, + 0x0000045A, 0x0100040A, 0x0000045B, 0x0100040B, + 0x0000045C, 0x0100040C, 0x0000045D, 0x0100040D, + 0x0000045E, 0x0100040E, 0x0000045F, 0x0100040F, + 0x00000461, 0x01000460, 0x00000463, 0x01000462, + 0x00000465, 0x01000464, 0x00000467, 0x01000466, + 0x00000469, 0x01000468, 0x0000046B, 0x0100046A, + 0x0000046D, 0x0100046C, 0x0000046F, 0x0100046E, + 0x00000471, 0x01000470, 0x00000473, 0x01000472, + 0x00000475, 0x01000474, 0x00000477, 0x01000476, + 0x00000479, 0x01000478, 0x0000047B, 0x0100047A, + 0x0000047D, 0x0100047C, 0x0000047F, 0x0100047E, + 0x00000481, 0x01000480, 0x0000048B, 0x0100048A, + 0x0000048D, 0x0100048C, 0x0000048F, 0x0100048E, + 0x00000491, 0x01000490, 0x00000493, 0x01000492, + 0x00000495, 0x01000494, 0x00000497, 0x01000496, + 0x00000499, 0x01000498, 0x0000049B, 0x0100049A, + 0x0000049D, 0x0100049C, 0x0000049F, 0x0100049E, + 0x000004A1, 0x010004A0, 0x000004A3, 0x010004A2, + 0x000004A5, 0x010004A4, 0x000004A7, 0x010004A6, + 0x000004A9, 0x010004A8, 0x000004AB, 0x010004AA, + 0x000004AD, 0x010004AC, 0x000004AF, 0x010004AE, + 0x000004B1, 0x010004B0, 0x000004B3, 0x010004B2, + 0x000004B5, 0x010004B4, 0x000004B7, 0x010004B6, + 0x000004B9, 0x010004B8, 0x000004BB, 0x010004BA, + 0x000004BD, 0x010004BC, 0x000004BF, 0x010004BE, + 0x000004C2, 0x010004C1, 0x000004C4, 0x010004C3, + 0x000004C6, 0x010004C5, 0x000004C8, 0x010004C7, + 0x000004CA, 0x010004C9, 0x000004CC, 0x010004CB, + 0x000004CE, 0x010004CD, 0x000004CF, 0x010004C0, + 0x000004D1, 0x010004D0, 0x000004D3, 0x010004D2, + 0x000004D5, 0x010004D4, 0x000004D7, 0x010004D6, + 0x000004D9, 0x010004D8, 0x000004DB, 0x010004DA, + 0x000004DD, 0x010004DC, 0x000004DF, 0x010004DE, + 0x000004E1, 0x010004E0, 0x000004E3, 0x010004E2, + 0x000004E5, 0x010004E4, 0x000004E7, 0x010004E6, + 0x000004E9, 0x010004E8, 0x000004EB, 0x010004EA, + 0x000004ED, 0x010004EC, 0x000004EF, 0x010004EE, + 0x000004F1, 0x010004F0, 0x000004F3, 0x010004F2, + 0x000004F5, 0x010004F4, 0x000004F7, 0x010004F6, + 0x000004F9, 0x010004F8, 0x000004FB, 0x010004FA, + 0x000004FD, 0x010004FC, 0x000004FF, 0x010004FE, + 0x00000501, 0x01000500, 0x00000503, 0x01000502, + 0x00000505, 0x01000504, 0x00000507, 0x01000506, + 0x00000509, 0x01000508, 0x0000050B, 0x0100050A, + 0x0000050D, 0x0100050C, 0x0000050F, 0x0100050E, + 0x00000511, 0x01000510, 0x00000513, 0x01000512, + 0x00000515, 0x01000514, 0x00000517, 0x01000516, + 0x00000519, 0x01000518, 0x0000051B, 0x0100051A, + 0x0000051D, 0x0100051C, 0x0000051F, 0x0100051E, + 0x00000521, 0x01000520, 0x00000523, 0x01000522, + 0x00000525, 0x01000524, 0x00000527, 0x01000526, + 0x00000529, 0x01000528, 0x0000052B, 0x0100052A, + 0x0000052D, 0x0100052C, 0x0000052F, 0x0100052E, + 0x00000561, 0x01000531, 0x00000562, 0x01000532, + 0x00000563, 0x01000533, 0x00000564, 0x01000534, + 0x00000565, 0x01000535, 0x00000566, 0x01000536, + 0x00000567, 0x01000537, 0x00000568, 0x01000538, + 0x00000569, 0x01000539, 0x0000056A, 0x0100053A, + 0x0000056B, 0x0100053B, 0x0000056C, 0x0100053C, + 0x0000056D, 0x0100053D, 0x0000056E, 0x0100053E, + 0x0000056F, 0x0100053F, 0x00000570, 0x01000540, + 0x00000571, 0x01000541, 0x00000572, 0x01000542, + 0x00000573, 0x01000543, 0x00000574, 0x01000544, + 0x00000575, 0x01000545, 0x00000576, 0x01000546, + 0x00000577, 0x01000547, 0x00000578, 0x01000548, + 0x00000579, 0x01000549, 0x0000057A, 0x0100054A, + 0x0000057B, 0x0100054B, 0x0000057C, 0x0100054C, + 0x0000057D, 0x0100054D, 0x0000057E, 0x0100054E, + 0x0000057F, 0x0100054F, 0x00000580, 0x01000550, + 0x00000581, 0x01000551, 0x00000582, 0x01000552, + 0x00000583, 0x01000553, 0x00000584, 0x01000554, + 0x00000585, 0x01000555, 0x00000586, 0x01000556, + 0x00000587, 0x0200000C, 0x000010D0, 0x01001C90, + 0x000010D1, 0x01001C91, 0x000010D2, 0x01001C92, + 0x000010D3, 0x01001C93, 0x000010D4, 0x01001C94, + 0x000010D5, 0x01001C95, 0x000010D6, 0x01001C96, + 0x000010D7, 0x01001C97, 0x000010D8, 0x01001C98, + 0x000010D9, 0x01001C99, 0x000010DA, 0x01001C9A, + 0x000010DB, 0x01001C9B, 0x000010DC, 0x01001C9C, + 0x000010DD, 0x01001C9D, 0x000010DE, 0x01001C9E, + 0x000010DF, 0x01001C9F, 0x000010E0, 0x01001CA0, + 0x000010E1, 0x01001CA1, 0x000010E2, 0x01001CA2, + 0x000010E3, 0x01001CA3, 0x000010E4, 0x01001CA4, + 0x000010E5, 0x01001CA5, 0x000010E6, 0x01001CA6, + 0x000010E7, 0x01001CA7, 0x000010E8, 0x01001CA8, + 0x000010E9, 0x01001CA9, 0x000010EA, 0x01001CAA, + 0x000010EB, 0x01001CAB, 0x000010EC, 0x01001CAC, + 0x000010ED, 0x01001CAD, 0x000010EE, 0x01001CAE, + 0x000010EF, 0x01001CAF, 0x000010F0, 0x01001CB0, + 0x000010F1, 0x01001CB1, 0x000010F2, 0x01001CB2, + 0x000010F3, 0x01001CB3, 0x000010F4, 0x01001CB4, + 0x000010F5, 0x01001CB5, 0x000010F6, 0x01001CB6, + 0x000010F7, 0x01001CB7, 0x000010F8, 0x01001CB8, + 0x000010F9, 0x01001CB9, 0x000010FA, 0x01001CBA, + 0x000010FD, 0x01001CBD, 0x000010FE, 0x01001CBE, + 0x000010FF, 0x01001CBF, 0x000013F8, 0x010013F0, + 0x000013F9, 0x010013F1, 0x000013FA, 0x010013F2, + 0x000013FB, 0x010013F3, 0x000013FC, 0x010013F4, + 0x000013FD, 0x010013F5, 0x00001C80, 0x01000412, + 0x00001C81, 0x01000414, 0x00001C82, 0x0100041E, + 0x00001C83, 0x01000421, 0x00001C84, 0x01000422, + 0x00001C85, 0x01000422, 0x00001C86, 0x0100042A, + 0x00001C87, 0x01000462, 0x00001C88, 0x0100A64A, + 0x00001D79, 0x0100A77D, 0x00001D7D, 0x01002C63, + 0x00001D8E, 0x0100A7C6, 0x00001E01, 0x01001E00, + 0x00001E03, 0x01001E02, 0x00001E05, 0x01001E04, + 0x00001E07, 0x01001E06, 0x00001E09, 0x01001E08, + 0x00001E0B, 0x01001E0A, 0x00001E0D, 0x01001E0C, + 0x00001E0F, 0x01001E0E, 0x00001E11, 0x01001E10, + 0x00001E13, 0x01001E12, 0x00001E15, 0x01001E14, + 0x00001E17, 0x01001E16, 0x00001E19, 0x01001E18, + 0x00001E1B, 0x01001E1A, 0x00001E1D, 0x01001E1C, + 0x00001E1F, 0x01001E1E, 0x00001E21, 0x01001E20, + 0x00001E23, 0x01001E22, 0x00001E25, 0x01001E24, + 0x00001E27, 0x01001E26, 0x00001E29, 0x01001E28, + 0x00001E2B, 0x01001E2A, 0x00001E2D, 0x01001E2C, + 0x00001E2F, 0x01001E2E, 0x00001E31, 0x01001E30, + 0x00001E33, 0x01001E32, 0x00001E35, 0x01001E34, + 0x00001E37, 0x01001E36, 0x00001E39, 0x01001E38, + 0x00001E3B, 0x01001E3A, 0x00001E3D, 0x01001E3C, + 0x00001E3F, 0x01001E3E, 0x00001E41, 0x01001E40, + 0x00001E43, 0x01001E42, 0x00001E45, 0x01001E44, + 0x00001E47, 0x01001E46, 0x00001E49, 0x01001E48, + 0x00001E4B, 0x01001E4A, 0x00001E4D, 0x01001E4C, + 0x00001E4F, 0x01001E4E, 0x00001E51, 0x01001E50, + 0x00001E53, 0x01001E52, 0x00001E55, 0x01001E54, + 0x00001E57, 0x01001E56, 0x00001E59, 0x01001E58, + 0x00001E5B, 0x01001E5A, 0x00001E5D, 0x01001E5C, + 0x00001E5F, 0x01001E5E, 0x00001E61, 0x01001E60, + 0x00001E63, 0x01001E62, 0x00001E65, 0x01001E64, + 0x00001E67, 0x01001E66, 0x00001E69, 0x01001E68, + 0x00001E6B, 0x01001E6A, 0x00001E6D, 0x01001E6C, + 0x00001E6F, 0x01001E6E, 0x00001E71, 0x01001E70, + 0x00001E73, 0x01001E72, 0x00001E75, 0x01001E74, + 0x00001E77, 0x01001E76, 0x00001E79, 0x01001E78, + 0x00001E7B, 0x01001E7A, 0x00001E7D, 0x01001E7C, + 0x00001E7F, 0x01001E7E, 0x00001E81, 0x01001E80, + 0x00001E83, 0x01001E82, 0x00001E85, 0x01001E84, + 0x00001E87, 0x01001E86, 0x00001E89, 0x01001E88, + 0x00001E8B, 0x01001E8A, 0x00001E8D, 0x01001E8C, + 0x00001E8F, 0x01001E8E, 0x00001E91, 0x01001E90, + 0x00001E93, 0x01001E92, 0x00001E95, 0x01001E94, + 0x00001E96, 0x0200000E, 0x00001E97, 0x02000010, + 0x00001E98, 0x02000012, 0x00001E99, 0x02000014, + 0x00001E9A, 0x02000016, 0x00001E9B, 0x01001E60, + 0x00001EA1, 0x01001EA0, 0x00001EA3, 0x01001EA2, + 0x00001EA5, 0x01001EA4, 0x00001EA7, 0x01001EA6, + 0x00001EA9, 0x01001EA8, 0x00001EAB, 0x01001EAA, + 0x00001EAD, 0x01001EAC, 0x00001EAF, 0x01001EAE, + 0x00001EB1, 0x01001EB0, 0x00001EB3, 0x01001EB2, + 0x00001EB5, 0x01001EB4, 0x00001EB7, 0x01001EB6, + 0x00001EB9, 0x01001EB8, 0x00001EBB, 0x01001EBA, + 0x00001EBD, 0x01001EBC, 0x00001EBF, 0x01001EBE, + 0x00001EC1, 0x01001EC0, 0x00001EC3, 0x01001EC2, + 0x00001EC5, 0x01001EC4, 0x00001EC7, 0x01001EC6, + 0x00001EC9, 0x01001EC8, 0x00001ECB, 0x01001ECA, + 0x00001ECD, 0x01001ECC, 0x00001ECF, 0x01001ECE, + 0x00001ED1, 0x01001ED0, 0x00001ED3, 0x01001ED2, + 0x00001ED5, 0x01001ED4, 0x00001ED7, 0x01001ED6, + 0x00001ED9, 0x01001ED8, 0x00001EDB, 0x01001EDA, + 0x00001EDD, 0x01001EDC, 0x00001EDF, 0x01001EDE, + 0x00001EE1, 0x01001EE0, 0x00001EE3, 0x01001EE2, + 0x00001EE5, 0x01001EE4, 0x00001EE7, 0x01001EE6, + 0x00001EE9, 0x01001EE8, 0x00001EEB, 0x01001EEA, + 0x00001EED, 0x01001EEC, 0x00001EEF, 0x01001EEE, + 0x00001EF1, 0x01001EF0, 0x00001EF3, 0x01001EF2, + 0x00001EF5, 0x01001EF4, 0x00001EF7, 0x01001EF6, + 0x00001EF9, 0x01001EF8, 0x00001EFB, 0x01001EFA, + 0x00001EFD, 0x01001EFC, 0x00001EFF, 0x01001EFE, + 0x00001F00, 0x01001F08, 0x00001F01, 0x01001F09, + 0x00001F02, 0x01001F0A, 0x00001F03, 0x01001F0B, + 0x00001F04, 0x01001F0C, 0x00001F05, 0x01001F0D, + 0x00001F06, 0x01001F0E, 0x00001F07, 0x01001F0F, + 0x00001F10, 0x01001F18, 0x00001F11, 0x01001F19, + 0x00001F12, 0x01001F1A, 0x00001F13, 0x01001F1B, + 0x00001F14, 0x01001F1C, 0x00001F15, 0x01001F1D, + 0x00001F20, 0x01001F28, 0x00001F21, 0x01001F29, + 0x00001F22, 0x01001F2A, 0x00001F23, 0x01001F2B, + 0x00001F24, 0x01001F2C, 0x00001F25, 0x01001F2D, + 0x00001F26, 0x01001F2E, 0x00001F27, 0x01001F2F, + 0x00001F30, 0x01001F38, 0x00001F31, 0x01001F39, + 0x00001F32, 0x01001F3A, 0x00001F33, 0x01001F3B, + 0x00001F34, 0x01001F3C, 0x00001F35, 0x01001F3D, + 0x00001F36, 0x01001F3E, 0x00001F37, 0x01001F3F, + 0x00001F40, 0x01001F48, 0x00001F41, 0x01001F49, + 0x00001F42, 0x01001F4A, 0x00001F43, 0x01001F4B, + 0x00001F44, 0x01001F4C, 0x00001F45, 0x01001F4D, + 0x00001F50, 0x02000018, 0x00001F51, 0x01001F59, + 0x00001F52, 0x0300001A, 0x00001F53, 0x01001F5B, + 0x00001F54, 0x0300001D, 0x00001F55, 0x01001F5D, + 0x00001F56, 0x03000020, 0x00001F57, 0x01001F5F, + 0x00001F60, 0x01001F68, 0x00001F61, 0x01001F69, + 0x00001F62, 0x01001F6A, 0x00001F63, 0x01001F6B, + 0x00001F64, 0x01001F6C, 0x00001F65, 0x01001F6D, + 0x00001F66, 0x01001F6E, 0x00001F67, 0x01001F6F, + 0x00001F70, 0x01001FBA, 0x00001F71, 0x01001FBB, + 0x00001F72, 0x01001FC8, 0x00001F73, 0x01001FC9, + 0x00001F74, 0x01001FCA, 0x00001F75, 0x01001FCB, + 0x00001F76, 0x01001FDA, 0x00001F77, 0x01001FDB, + 0x00001F78, 0x01001FF8, 0x00001F79, 0x01001FF9, + 0x00001F7A, 0x01001FEA, 0x00001F7B, 0x01001FEB, + 0x00001F7C, 0x01001FFA, 0x00001F7D, 0x01001FFB, + 0x00001F80, 0x02000023, 0x00001F81, 0x02000025, + 0x00001F82, 0x02000027, 0x00001F83, 0x02000029, + 0x00001F84, 0x0200002B, 0x00001F85, 0x0200002D, + 0x00001F86, 0x0200002F, 0x00001F87, 0x02000031, + 0x00001F88, 0x02000033, 0x00001F89, 0x02000035, + 0x00001F8A, 0x02000037, 0x00001F8B, 0x02000039, + 0x00001F8C, 0x0200003B, 0x00001F8D, 0x0200003D, + 0x00001F8E, 0x0200003F, 0x00001F8F, 0x02000041, + 0x00001F90, 0x02000043, 0x00001F91, 0x02000045, + 0x00001F92, 0x02000047, 0x00001F93, 0x02000049, + 0x00001F94, 0x0200004B, 0x00001F95, 0x0200004D, + 0x00001F96, 0x0200004F, 0x00001F97, 0x02000051, + 0x00001F98, 0x02000053, 0x00001F99, 0x02000055, + 0x00001F9A, 0x02000057, 0x00001F9B, 0x02000059, + 0x00001F9C, 0x0200005B, 0x00001F9D, 0x0200005D, + 0x00001F9E, 0x0200005F, 0x00001F9F, 0x02000061, + 0x00001FA0, 0x02000063, 0x00001FA1, 0x02000065, + 0x00001FA2, 0x02000067, 0x00001FA3, 0x02000069, + 0x00001FA4, 0x0200006B, 0x00001FA5, 0x0200006D, + 0x00001FA6, 0x0200006F, 0x00001FA7, 0x02000071, + 0x00001FA8, 0x02000073, 0x00001FA9, 0x02000075, + 0x00001FAA, 0x02000077, 0x00001FAB, 0x02000079, + 0x00001FAC, 0x0200007B, 0x00001FAD, 0x0200007D, + 0x00001FAE, 0x0200007F, 0x00001FAF, 0x02000081, + 0x00001FB0, 0x01001FB8, 0x00001FB1, 0x01001FB9, + 0x00001FB2, 0x02000083, 0x00001FB3, 0x02000085, + 0x00001FB4, 0x02000087, 0x00001FB6, 0x02000089, + 0x00001FB7, 0x0300008B, 0x00001FBC, 0x0200008E, + 0x00001FBE, 0x01000399, 0x00001FC2, 0x02000090, + 0x00001FC3, 0x02000092, 0x00001FC4, 0x02000094, + 0x00001FC6, 0x02000096, 0x00001FC7, 0x03000098, + 0x00001FCC, 0x0200009B, 0x00001FD0, 0x01001FD8, + 0x00001FD1, 0x01001FD9, 0x00001FD2, 0x0300009D, + 0x00001FD3, 0x030000A0, 0x00001FD6, 0x020000A3, + 0x00001FD7, 0x030000A5, 0x00001FE0, 0x01001FE8, + 0x00001FE1, 0x01001FE9, 0x00001FE2, 0x030000A8, + 0x00001FE3, 0x030000AB, 0x00001FE4, 0x020000AE, + 0x00001FE5, 0x01001FEC, 0x00001FE6, 0x020000B0, + 0x00001FE7, 0x030000B2, 0x00001FF2, 0x020000B5, + 0x00001FF3, 0x020000B7, 0x00001FF4, 0x020000B9, + 0x00001FF6, 0x020000BB, 0x00001FF7, 0x030000BD, + 0x00001FFC, 0x020000C0, 0x0000214E, 0x01002132, + 0x00002170, 0x01002160, 0x00002171, 0x01002161, + 0x00002172, 0x01002162, 0x00002173, 0x01002163, + 0x00002174, 0x01002164, 0x00002175, 0x01002165, + 0x00002176, 0x01002166, 0x00002177, 0x01002167, + 0x00002178, 0x01002168, 0x00002179, 0x01002169, + 0x0000217A, 0x0100216A, 0x0000217B, 0x0100216B, + 0x0000217C, 0x0100216C, 0x0000217D, 0x0100216D, + 0x0000217E, 0x0100216E, 0x0000217F, 0x0100216F, + 0x00002184, 0x01002183, 0x000024D0, 0x010024B6, + 0x000024D1, 0x010024B7, 0x000024D2, 0x010024B8, + 0x000024D3, 0x010024B9, 0x000024D4, 0x010024BA, + 0x000024D5, 0x010024BB, 0x000024D6, 0x010024BC, + 0x000024D7, 0x010024BD, 0x000024D8, 0x010024BE, + 0x000024D9, 0x010024BF, 0x000024DA, 0x010024C0, + 0x000024DB, 0x010024C1, 0x000024DC, 0x010024C2, + 0x000024DD, 0x010024C3, 0x000024DE, 0x010024C4, + 0x000024DF, 0x010024C5, 0x000024E0, 0x010024C6, + 0x000024E1, 0x010024C7, 0x000024E2, 0x010024C8, + 0x000024E3, 0x010024C9, 0x000024E4, 0x010024CA, + 0x000024E5, 0x010024CB, 0x000024E6, 0x010024CC, + 0x000024E7, 0x010024CD, 0x000024E8, 0x010024CE, + 0x000024E9, 0x010024CF, 0x00002C30, 0x01002C00, + 0x00002C31, 0x01002C01, 0x00002C32, 0x01002C02, + 0x00002C33, 0x01002C03, 0x00002C34, 0x01002C04, + 0x00002C35, 0x01002C05, 0x00002C36, 0x01002C06, + 0x00002C37, 0x01002C07, 0x00002C38, 0x01002C08, + 0x00002C39, 0x01002C09, 0x00002C3A, 0x01002C0A, + 0x00002C3B, 0x01002C0B, 0x00002C3C, 0x01002C0C, + 0x00002C3D, 0x01002C0D, 0x00002C3E, 0x01002C0E, + 0x00002C3F, 0x01002C0F, 0x00002C40, 0x01002C10, + 0x00002C41, 0x01002C11, 0x00002C42, 0x01002C12, + 0x00002C43, 0x01002C13, 0x00002C44, 0x01002C14, + 0x00002C45, 0x01002C15, 0x00002C46, 0x01002C16, + 0x00002C47, 0x01002C17, 0x00002C48, 0x01002C18, + 0x00002C49, 0x01002C19, 0x00002C4A, 0x01002C1A, + 0x00002C4B, 0x01002C1B, 0x00002C4C, 0x01002C1C, + 0x00002C4D, 0x01002C1D, 0x00002C4E, 0x01002C1E, + 0x00002C4F, 0x01002C1F, 0x00002C50, 0x01002C20, + 0x00002C51, 0x01002C21, 0x00002C52, 0x01002C22, + 0x00002C53, 0x01002C23, 0x00002C54, 0x01002C24, + 0x00002C55, 0x01002C25, 0x00002C56, 0x01002C26, + 0x00002C57, 0x01002C27, 0x00002C58, 0x01002C28, + 0x00002C59, 0x01002C29, 0x00002C5A, 0x01002C2A, + 0x00002C5B, 0x01002C2B, 0x00002C5C, 0x01002C2C, + 0x00002C5D, 0x01002C2D, 0x00002C5E, 0x01002C2E, + 0x00002C5F, 0x01002C2F, 0x00002C61, 0x01002C60, + 0x00002C65, 0x0100023A, 0x00002C66, 0x0100023E, + 0x00002C68, 0x01002C67, 0x00002C6A, 0x01002C69, + 0x00002C6C, 0x01002C6B, 0x00002C73, 0x01002C72, + 0x00002C76, 0x01002C75, 0x00002C81, 0x01002C80, + 0x00002C83, 0x01002C82, 0x00002C85, 0x01002C84, + 0x00002C87, 0x01002C86, 0x00002C89, 0x01002C88, + 0x00002C8B, 0x01002C8A, 0x00002C8D, 0x01002C8C, + 0x00002C8F, 0x01002C8E, 0x00002C91, 0x01002C90, + 0x00002C93, 0x01002C92, 0x00002C95, 0x01002C94, + 0x00002C97, 0x01002C96, 0x00002C99, 0x01002C98, + 0x00002C9B, 0x01002C9A, 0x00002C9D, 0x01002C9C, + 0x00002C9F, 0x01002C9E, 0x00002CA1, 0x01002CA0, + 0x00002CA3, 0x01002CA2, 0x00002CA5, 0x01002CA4, + 0x00002CA7, 0x01002CA6, 0x00002CA9, 0x01002CA8, + 0x00002CAB, 0x01002CAA, 0x00002CAD, 0x01002CAC, + 0x00002CAF, 0x01002CAE, 0x00002CB1, 0x01002CB0, + 0x00002CB3, 0x01002CB2, 0x00002CB5, 0x01002CB4, + 0x00002CB7, 0x01002CB6, 0x00002CB9, 0x01002CB8, + 0x00002CBB, 0x01002CBA, 0x00002CBD, 0x01002CBC, + 0x00002CBF, 0x01002CBE, 0x00002CC1, 0x01002CC0, + 0x00002CC3, 0x01002CC2, 0x00002CC5, 0x01002CC4, + 0x00002CC7, 0x01002CC6, 0x00002CC9, 0x01002CC8, + 0x00002CCB, 0x01002CCA, 0x00002CCD, 0x01002CCC, + 0x00002CCF, 0x01002CCE, 0x00002CD1, 0x01002CD0, + 0x00002CD3, 0x01002CD2, 0x00002CD5, 0x01002CD4, + 0x00002CD7, 0x01002CD6, 0x00002CD9, 0x01002CD8, + 0x00002CDB, 0x01002CDA, 0x00002CDD, 0x01002CDC, + 0x00002CDF, 0x01002CDE, 0x00002CE1, 0x01002CE0, + 0x00002CE3, 0x01002CE2, 0x00002CEC, 0x01002CEB, + 0x00002CEE, 0x01002CED, 0x00002CF3, 0x01002CF2, + 0x00002D00, 0x010010A0, 0x00002D01, 0x010010A1, + 0x00002D02, 0x010010A2, 0x00002D03, 0x010010A3, + 0x00002D04, 0x010010A4, 0x00002D05, 0x010010A5, + 0x00002D06, 0x010010A6, 0x00002D07, 0x010010A7, + 0x00002D08, 0x010010A8, 0x00002D09, 0x010010A9, + 0x00002D0A, 0x010010AA, 0x00002D0B, 0x010010AB, + 0x00002D0C, 0x010010AC, 0x00002D0D, 0x010010AD, + 0x00002D0E, 0x010010AE, 0x00002D0F, 0x010010AF, + 0x00002D10, 0x010010B0, 0x00002D11, 0x010010B1, + 0x00002D12, 0x010010B2, 0x00002D13, 0x010010B3, + 0x00002D14, 0x010010B4, 0x00002D15, 0x010010B5, + 0x00002D16, 0x010010B6, 0x00002D17, 0x010010B7, + 0x00002D18, 0x010010B8, 0x00002D19, 0x010010B9, + 0x00002D1A, 0x010010BA, 0x00002D1B, 0x010010BB, + 0x00002D1C, 0x010010BC, 0x00002D1D, 0x010010BD, + 0x00002D1E, 0x010010BE, 0x00002D1F, 0x010010BF, + 0x00002D20, 0x010010C0, 0x00002D21, 0x010010C1, + 0x00002D22, 0x010010C2, 0x00002D23, 0x010010C3, + 0x00002D24, 0x010010C4, 0x00002D25, 0x010010C5, + 0x00002D27, 0x010010C7, 0x00002D2D, 0x010010CD, + 0x0000A641, 0x0100A640, 0x0000A643, 0x0100A642, + 0x0000A645, 0x0100A644, 0x0000A647, 0x0100A646, + 0x0000A649, 0x0100A648, 0x0000A64B, 0x0100A64A, + 0x0000A64D, 0x0100A64C, 0x0000A64F, 0x0100A64E, + 0x0000A651, 0x0100A650, 0x0000A653, 0x0100A652, + 0x0000A655, 0x0100A654, 0x0000A657, 0x0100A656, + 0x0000A659, 0x0100A658, 0x0000A65B, 0x0100A65A, + 0x0000A65D, 0x0100A65C, 0x0000A65F, 0x0100A65E, + 0x0000A661, 0x0100A660, 0x0000A663, 0x0100A662, + 0x0000A665, 0x0100A664, 0x0000A667, 0x0100A666, + 0x0000A669, 0x0100A668, 0x0000A66B, 0x0100A66A, + 0x0000A66D, 0x0100A66C, 0x0000A681, 0x0100A680, + 0x0000A683, 0x0100A682, 0x0000A685, 0x0100A684, + 0x0000A687, 0x0100A686, 0x0000A689, 0x0100A688, + 0x0000A68B, 0x0100A68A, 0x0000A68D, 0x0100A68C, + 0x0000A68F, 0x0100A68E, 0x0000A691, 0x0100A690, + 0x0000A693, 0x0100A692, 0x0000A695, 0x0100A694, + 0x0000A697, 0x0100A696, 0x0000A699, 0x0100A698, + 0x0000A69B, 0x0100A69A, 0x0000A723, 0x0100A722, + 0x0000A725, 0x0100A724, 0x0000A727, 0x0100A726, + 0x0000A729, 0x0100A728, 0x0000A72B, 0x0100A72A, + 0x0000A72D, 0x0100A72C, 0x0000A72F, 0x0100A72E, + 0x0000A733, 0x0100A732, 0x0000A735, 0x0100A734, + 0x0000A737, 0x0100A736, 0x0000A739, 0x0100A738, + 0x0000A73B, 0x0100A73A, 0x0000A73D, 0x0100A73C, + 0x0000A73F, 0x0100A73E, 0x0000A741, 0x0100A740, + 0x0000A743, 0x0100A742, 0x0000A745, 0x0100A744, + 0x0000A747, 0x0100A746, 0x0000A749, 0x0100A748, + 0x0000A74B, 0x0100A74A, 0x0000A74D, 0x0100A74C, + 0x0000A74F, 0x0100A74E, 0x0000A751, 0x0100A750, + 0x0000A753, 0x0100A752, 0x0000A755, 0x0100A754, + 0x0000A757, 0x0100A756, 0x0000A759, 0x0100A758, + 0x0000A75B, 0x0100A75A, 0x0000A75D, 0x0100A75C, + 0x0000A75F, 0x0100A75E, 0x0000A761, 0x0100A760, + 0x0000A763, 0x0100A762, 0x0000A765, 0x0100A764, + 0x0000A767, 0x0100A766, 0x0000A769, 0x0100A768, + 0x0000A76B, 0x0100A76A, 0x0000A76D, 0x0100A76C, + 0x0000A76F, 0x0100A76E, 0x0000A77A, 0x0100A779, + 0x0000A77C, 0x0100A77B, 0x0000A77F, 0x0100A77E, + 0x0000A781, 0x0100A780, 0x0000A783, 0x0100A782, + 0x0000A785, 0x0100A784, 0x0000A787, 0x0100A786, + 0x0000A78C, 0x0100A78B, 0x0000A791, 0x0100A790, + 0x0000A793, 0x0100A792, 0x0000A794, 0x0100A7C4, + 0x0000A797, 0x0100A796, 0x0000A799, 0x0100A798, + 0x0000A79B, 0x0100A79A, 0x0000A79D, 0x0100A79C, + 0x0000A79F, 0x0100A79E, 0x0000A7A1, 0x0100A7A0, + 0x0000A7A3, 0x0100A7A2, 0x0000A7A5, 0x0100A7A4, + 0x0000A7A7, 0x0100A7A6, 0x0000A7A9, 0x0100A7A8, + 0x0000A7B5, 0x0100A7B4, 0x0000A7B7, 0x0100A7B6, + 0x0000A7B9, 0x0100A7B8, 0x0000A7BB, 0x0100A7BA, + 0x0000A7BD, 0x0100A7BC, 0x0000A7BF, 0x0100A7BE, + 0x0000A7C1, 0x0100A7C0, 0x0000A7C3, 0x0100A7C2, + 0x0000A7C8, 0x0100A7C7, 0x0000A7CA, 0x0100A7C9, + 0x0000A7D1, 0x0100A7D0, 0x0000A7D7, 0x0100A7D6, + 0x0000A7D9, 0x0100A7D8, 0x0000A7F6, 0x0100A7F5, + 0x0000AB53, 0x0100A7B3, 0x0000AB70, 0x010013A0, + 0x0000AB71, 0x010013A1, 0x0000AB72, 0x010013A2, + 0x0000AB73, 0x010013A3, 0x0000AB74, 0x010013A4, + 0x0000AB75, 0x010013A5, 0x0000AB76, 0x010013A6, + 0x0000AB77, 0x010013A7, 0x0000AB78, 0x010013A8, + 0x0000AB79, 0x010013A9, 0x0000AB7A, 0x010013AA, + 0x0000AB7B, 0x010013AB, 0x0000AB7C, 0x010013AC, + 0x0000AB7D, 0x010013AD, 0x0000AB7E, 0x010013AE, + 0x0000AB7F, 0x010013AF, 0x0000AB80, 0x010013B0, + 0x0000AB81, 0x010013B1, 0x0000AB82, 0x010013B2, + 0x0000AB83, 0x010013B3, 0x0000AB84, 0x010013B4, + 0x0000AB85, 0x010013B5, 0x0000AB86, 0x010013B6, + 0x0000AB87, 0x010013B7, 0x0000AB88, 0x010013B8, + 0x0000AB89, 0x010013B9, 0x0000AB8A, 0x010013BA, + 0x0000AB8B, 0x010013BB, 0x0000AB8C, 0x010013BC, + 0x0000AB8D, 0x010013BD, 0x0000AB8E, 0x010013BE, + 0x0000AB8F, 0x010013BF, 0x0000AB90, 0x010013C0, + 0x0000AB91, 0x010013C1, 0x0000AB92, 0x010013C2, + 0x0000AB93, 0x010013C3, 0x0000AB94, 0x010013C4, + 0x0000AB95, 0x010013C5, 0x0000AB96, 0x010013C6, + 0x0000AB97, 0x010013C7, 0x0000AB98, 0x010013C8, + 0x0000AB99, 0x010013C9, 0x0000AB9A, 0x010013CA, + 0x0000AB9B, 0x010013CB, 0x0000AB9C, 0x010013CC, + 0x0000AB9D, 0x010013CD, 0x0000AB9E, 0x010013CE, + 0x0000AB9F, 0x010013CF, 0x0000ABA0, 0x010013D0, + 0x0000ABA1, 0x010013D1, 0x0000ABA2, 0x010013D2, + 0x0000ABA3, 0x010013D3, 0x0000ABA4, 0x010013D4, + 0x0000ABA5, 0x010013D5, 0x0000ABA6, 0x010013D6, + 0x0000ABA7, 0x010013D7, 0x0000ABA8, 0x010013D8, + 0x0000ABA9, 0x010013D9, 0x0000ABAA, 0x010013DA, + 0x0000ABAB, 0x010013DB, 0x0000ABAC, 0x010013DC, + 0x0000ABAD, 0x010013DD, 0x0000ABAE, 0x010013DE, + 0x0000ABAF, 0x010013DF, 0x0000ABB0, 0x010013E0, + 0x0000ABB1, 0x010013E1, 0x0000ABB2, 0x010013E2, + 0x0000ABB3, 0x010013E3, 0x0000ABB4, 0x010013E4, + 0x0000ABB5, 0x010013E5, 0x0000ABB6, 0x010013E6, + 0x0000ABB7, 0x010013E7, 0x0000ABB8, 0x010013E8, + 0x0000ABB9, 0x010013E9, 0x0000ABBA, 0x010013EA, + 0x0000ABBB, 0x010013EB, 0x0000ABBC, 0x010013EC, + 0x0000ABBD, 0x010013ED, 0x0000ABBE, 0x010013EE, + 0x0000ABBF, 0x010013EF, 0x0000FB00, 0x020000C2, + 0x0000FB01, 0x020000C4, 0x0000FB02, 0x020000C6, + 0x0000FB03, 0x030000C8, 0x0000FB04, 0x030000CB, + 0x0000FB05, 0x020000CE, 0x0000FB06, 0x020000D0, + 0x0000FB13, 0x020000D2, 0x0000FB14, 0x020000D4, + 0x0000FB15, 0x020000D6, 0x0000FB16, 0x020000D8, + 0x0000FB17, 0x020000DA, 0x0000FF41, 0x0100FF21, + 0x0000FF42, 0x0100FF22, 0x0000FF43, 0x0100FF23, + 0x0000FF44, 0x0100FF24, 0x0000FF45, 0x0100FF25, + 0x0000FF46, 0x0100FF26, 0x0000FF47, 0x0100FF27, + 0x0000FF48, 0x0100FF28, 0x0000FF49, 0x0100FF29, + 0x0000FF4A, 0x0100FF2A, 0x0000FF4B, 0x0100FF2B, + 0x0000FF4C, 0x0100FF2C, 0x0000FF4D, 0x0100FF2D, + 0x0000FF4E, 0x0100FF2E, 0x0000FF4F, 0x0100FF2F, + 0x0000FF50, 0x0100FF30, 0x0000FF51, 0x0100FF31, + 0x0000FF52, 0x0100FF32, 0x0000FF53, 0x0100FF33, + 0x0000FF54, 0x0100FF34, 0x0000FF55, 0x0100FF35, + 0x0000FF56, 0x0100FF36, 0x0000FF57, 0x0100FF37, + 0x0000FF58, 0x0100FF38, 0x0000FF59, 0x0100FF39, + 0x0000FF5A, 0x0100FF3A, 0x00010428, 0x81010400, + 0x00010429, 0x81010401, 0x0001042A, 0x81010402, + 0x0001042B, 0x81010403, 0x0001042C, 0x81010404, + 0x0001042D, 0x81010405, 0x0001042E, 0x81010406, + 0x0001042F, 0x81010407, 0x00010430, 0x81010408, + 0x00010431, 0x81010409, 0x00010432, 0x8101040A, + 0x00010433, 0x8101040B, 0x00010434, 0x8101040C, + 0x00010435, 0x8101040D, 0x00010436, 0x8101040E, + 0x00010437, 0x8101040F, 0x00010438, 0x81010410, + 0x00010439, 0x81010411, 0x0001043A, 0x81010412, + 0x0001043B, 0x81010413, 0x0001043C, 0x81010414, + 0x0001043D, 0x81010415, 0x0001043E, 0x81010416, + 0x0001043F, 0x81010417, 0x00010440, 0x81010418, + 0x00010441, 0x81010419, 0x00010442, 0x8101041A, + 0x00010443, 0x8101041B, 0x00010444, 0x8101041C, + 0x00010445, 0x8101041D, 0x00010446, 0x8101041E, + 0x00010447, 0x8101041F, 0x00010448, 0x81010420, + 0x00010449, 0x81010421, 0x0001044A, 0x81010422, + 0x0001044B, 0x81010423, 0x0001044C, 0x81010424, + 0x0001044D, 0x81010425, 0x0001044E, 0x81010426, + 0x0001044F, 0x81010427, 0x000104D8, 0x810104B0, + 0x000104D9, 0x810104B1, 0x000104DA, 0x810104B2, + 0x000104DB, 0x810104B3, 0x000104DC, 0x810104B4, + 0x000104DD, 0x810104B5, 0x000104DE, 0x810104B6, + 0x000104DF, 0x810104B7, 0x000104E0, 0x810104B8, + 0x000104E1, 0x810104B9, 0x000104E2, 0x810104BA, + 0x000104E3, 0x810104BB, 0x000104E4, 0x810104BC, + 0x000104E5, 0x810104BD, 0x000104E6, 0x810104BE, + 0x000104E7, 0x810104BF, 0x000104E8, 0x810104C0, + 0x000104E9, 0x810104C1, 0x000104EA, 0x810104C2, + 0x000104EB, 0x810104C3, 0x000104EC, 0x810104C4, + 0x000104ED, 0x810104C5, 0x000104EE, 0x810104C6, + 0x000104EF, 0x810104C7, 0x000104F0, 0x810104C8, + 0x000104F1, 0x810104C9, 0x000104F2, 0x810104CA, + 0x000104F3, 0x810104CB, 0x000104F4, 0x810104CC, + 0x000104F5, 0x810104CD, 0x000104F6, 0x810104CE, + 0x000104F7, 0x810104CF, 0x000104F8, 0x810104D0, + 0x000104F9, 0x810104D1, 0x000104FA, 0x810104D2, + 0x000104FB, 0x810104D3, 0x00010597, 0x81010570, + 0x00010598, 0x81010571, 0x00010599, 0x81010572, + 0x0001059A, 0x81010573, 0x0001059B, 0x81010574, + 0x0001059C, 0x81010575, 0x0001059D, 0x81010576, + 0x0001059E, 0x81010577, 0x0001059F, 0x81010578, + 0x000105A0, 0x81010579, 0x000105A1, 0x8101057A, + 0x000105A3, 0x8101057C, 0x000105A4, 0x8101057D, + 0x000105A5, 0x8101057E, 0x000105A6, 0x8101057F, + 0x000105A7, 0x81010580, 0x000105A8, 0x81010581, + 0x000105A9, 0x81010582, 0x000105AA, 0x81010583, + 0x000105AB, 0x81010584, 0x000105AC, 0x81010585, + 0x000105AD, 0x81010586, 0x000105AE, 0x81010587, + 0x000105AF, 0x81010588, 0x000105B0, 0x81010589, + 0x000105B1, 0x8101058A, 0x000105B3, 0x8101058C, + 0x000105B4, 0x8101058D, 0x000105B5, 0x8101058E, + 0x000105B6, 0x8101058F, 0x000105B7, 0x81010590, + 0x000105B8, 0x81010591, 0x000105B9, 0x81010592, + 0x000105BB, 0x81010594, 0x000105BC, 0x81010595, + 0x00010CC0, 0x81010C80, 0x00010CC1, 0x81010C81, + 0x00010CC2, 0x81010C82, 0x00010CC3, 0x81010C83, + 0x00010CC4, 0x81010C84, 0x00010CC5, 0x81010C85, + 0x00010CC6, 0x81010C86, 0x00010CC7, 0x81010C87, + 0x00010CC8, 0x81010C88, 0x00010CC9, 0x81010C89, + 0x00010CCA, 0x81010C8A, 0x00010CCB, 0x81010C8B, + 0x00010CCC, 0x81010C8C, 0x00010CCD, 0x81010C8D, + 0x00010CCE, 0x81010C8E, 0x00010CCF, 0x81010C8F, + 0x00010CD0, 0x81010C90, 0x00010CD1, 0x81010C91, + 0x00010CD2, 0x81010C92, 0x00010CD3, 0x81010C93, + 0x00010CD4, 0x81010C94, 0x00010CD5, 0x81010C95, + 0x00010CD6, 0x81010C96, 0x00010CD7, 0x81010C97, + 0x00010CD8, 0x81010C98, 0x00010CD9, 0x81010C99, + 0x00010CDA, 0x81010C9A, 0x00010CDB, 0x81010C9B, + 0x00010CDC, 0x81010C9C, 0x00010CDD, 0x81010C9D, + 0x00010CDE, 0x81010C9E, 0x00010CDF, 0x81010C9F, + 0x00010CE0, 0x81010CA0, 0x00010CE1, 0x81010CA1, + 0x00010CE2, 0x81010CA2, 0x00010CE3, 0x81010CA3, + 0x00010CE4, 0x81010CA4, 0x00010CE5, 0x81010CA5, + 0x00010CE6, 0x81010CA6, 0x00010CE7, 0x81010CA7, + 0x00010CE8, 0x81010CA8, 0x00010CE9, 0x81010CA9, + 0x00010CEA, 0x81010CAA, 0x00010CEB, 0x81010CAB, + 0x00010CEC, 0x81010CAC, 0x00010CED, 0x81010CAD, + 0x00010CEE, 0x81010CAE, 0x00010CEF, 0x81010CAF, + 0x00010CF0, 0x81010CB0, 0x00010CF1, 0x81010CB1, + 0x00010CF2, 0x81010CB2, 0x000118C0, 0x810118A0, + 0x000118C1, 0x810118A1, 0x000118C2, 0x810118A2, + 0x000118C3, 0x810118A3, 0x000118C4, 0x810118A4, + 0x000118C5, 0x810118A5, 0x000118C6, 0x810118A6, + 0x000118C7, 0x810118A7, 0x000118C8, 0x810118A8, + 0x000118C9, 0x810118A9, 0x000118CA, 0x810118AA, + 0x000118CB, 0x810118AB, 0x000118CC, 0x810118AC, + 0x000118CD, 0x810118AD, 0x000118CE, 0x810118AE, + 0x000118CF, 0x810118AF, 0x000118D0, 0x810118B0, + 0x000118D1, 0x810118B1, 0x000118D2, 0x810118B2, + 0x000118D3, 0x810118B3, 0x000118D4, 0x810118B4, + 0x000118D5, 0x810118B5, 0x000118D6, 0x810118B6, + 0x000118D7, 0x810118B7, 0x000118D8, 0x810118B8, + 0x000118D9, 0x810118B9, 0x000118DA, 0x810118BA, + 0x000118DB, 0x810118BB, 0x000118DC, 0x810118BC, + 0x000118DD, 0x810118BD, 0x000118DE, 0x810118BE, + 0x000118DF, 0x810118BF, 0x00016E60, 0x81016E40, + 0x00016E61, 0x81016E41, 0x00016E62, 0x81016E42, + 0x00016E63, 0x81016E43, 0x00016E64, 0x81016E44, + 0x00016E65, 0x81016E45, 0x00016E66, 0x81016E46, + 0x00016E67, 0x81016E47, 0x00016E68, 0x81016E48, + 0x00016E69, 0x81016E49, 0x00016E6A, 0x81016E4A, + 0x00016E6B, 0x81016E4B, 0x00016E6C, 0x81016E4C, + 0x00016E6D, 0x81016E4D, 0x00016E6E, 0x81016E4E, + 0x00016E6F, 0x81016E4F, 0x00016E70, 0x81016E50, + 0x00016E71, 0x81016E51, 0x00016E72, 0x81016E52, + 0x00016E73, 0x81016E53, 0x00016E74, 0x81016E54, + 0x00016E75, 0x81016E55, 0x00016E76, 0x81016E56, + 0x00016E77, 0x81016E57, 0x00016E78, 0x81016E58, + 0x00016E79, 0x81016E59, 0x00016E7A, 0x81016E5A, + 0x00016E7B, 0x81016E5B, 0x00016E7C, 0x81016E5C, + 0x00016E7D, 0x81016E5D, 0x00016E7E, 0x81016E5E, + 0x00016E7F, 0x81016E5F, 0x0001E922, 0x8101E900, + 0x0001E923, 0x8101E901, 0x0001E924, 0x8101E902, + 0x0001E925, 0x8101E903, 0x0001E926, 0x8101E904, + 0x0001E927, 0x8101E905, 0x0001E928, 0x8101E906, + 0x0001E929, 0x8101E907, 0x0001E92A, 0x8101E908, + 0x0001E92B, 0x8101E909, 0x0001E92C, 0x8101E90A, + 0x0001E92D, 0x8101E90B, 0x0001E92E, 0x8101E90C, + 0x0001E92F, 0x8101E90D, 0x0001E930, 0x8101E90E, + 0x0001E931, 0x8101E90F, 0x0001E932, 0x8101E910, + 0x0001E933, 0x8101E911, 0x0001E934, 0x8101E912, + 0x0001E935, 0x8101E913, 0x0001E936, 0x8101E914, + 0x0001E937, 0x8101E915, 0x0001E938, 0x8101E916, + 0x0001E939, 0x8101E917, 0x0001E93A, 0x8101E918, + 0x0001E93B, 0x8101E919, 0x0001E93C, 0x8101E91A, + 0x0001E93D, 0x8101E91B, 0x0001E93E, 0x8101E91C, + 0x0001E93F, 0x8101E91D, 0x0001E940, 0x8101E91E, + 0x0001E941, 0x8101E91F, 0x0001E942, 0x8101E920, + 0x0001E943, 0x8101E921, +}; + +static uint32_t const __CFUniCharToUppercaseMappingTableCount = 1525; + +static uint32_t const __CFUniCharToUppercaseMappingExtraTable[] = { + 0x00000053, 0x00000053, 0x000002BC, 0x0000004E, + 0x0000004A, 0x0000030C, 0x00000399, 0x00000308, + 0x00000301, 0x000003A5, 0x00000308, 0x00000301, + 0x00000535, 0x00000552, 0x00000048, 0x00000331, + 0x00000054, 0x00000308, 0x00000057, 0x0000030A, + 0x00000059, 0x0000030A, 0x00000041, 0x000002BE, + 0x000003A5, 0x00000313, 0x000003A5, 0x00000313, + 0x00000300, 0x000003A5, 0x00000313, 0x00000301, + 0x000003A5, 0x00000313, 0x00000342, 0x00001F08, + 0x00000399, 0x00001F09, 0x00000399, 0x00001F0A, + 0x00000399, 0x00001F0B, 0x00000399, 0x00001F0C, + 0x00000399, 0x00001F0D, 0x00000399, 0x00001F0E, + 0x00000399, 0x00001F0F, 0x00000399, 0x00001F08, + 0x00000399, 0x00001F09, 0x00000399, 0x00001F0A, + 0x00000399, 0x00001F0B, 0x00000399, 0x00001F0C, + 0x00000399, 0x00001F0D, 0x00000399, 0x00001F0E, + 0x00000399, 0x00001F0F, 0x00000399, 0x00001F28, + 0x00000399, 0x00001F29, 0x00000399, 0x00001F2A, + 0x00000399, 0x00001F2B, 0x00000399, 0x00001F2C, + 0x00000399, 0x00001F2D, 0x00000399, 0x00001F2E, + 0x00000399, 0x00001F2F, 0x00000399, 0x00001F28, + 0x00000399, 0x00001F29, 0x00000399, 0x00001F2A, + 0x00000399, 0x00001F2B, 0x00000399, 0x00001F2C, + 0x00000399, 0x00001F2D, 0x00000399, 0x00001F2E, + 0x00000399, 0x00001F2F, 0x00000399, 0x00001F68, + 0x00000399, 0x00001F69, 0x00000399, 0x00001F6A, + 0x00000399, 0x00001F6B, 0x00000399, 0x00001F6C, + 0x00000399, 0x00001F6D, 0x00000399, 0x00001F6E, + 0x00000399, 0x00001F6F, 0x00000399, 0x00001F68, + 0x00000399, 0x00001F69, 0x00000399, 0x00001F6A, + 0x00000399, 0x00001F6B, 0x00000399, 0x00001F6C, + 0x00000399, 0x00001F6D, 0x00000399, 0x00001F6E, + 0x00000399, 0x00001F6F, 0x00000399, 0x00001FBA, + 0x00000399, 0x00000391, 0x00000399, 0x00000386, + 0x00000399, 0x00000391, 0x00000342, 0x00000391, + 0x00000342, 0x00000399, 0x00000391, 0x00000399, + 0x00001FCA, 0x00000399, 0x00000397, 0x00000399, + 0x00000389, 0x00000399, 0x00000397, 0x00000342, + 0x00000397, 0x00000342, 0x00000399, 0x00000397, + 0x00000399, 0x00000399, 0x00000308, 0x00000300, + 0x00000399, 0x00000308, 0x00000301, 0x00000399, + 0x00000342, 0x00000399, 0x00000308, 0x00000342, + 0x000003A5, 0x00000308, 0x00000300, 0x000003A5, + 0x00000308, 0x00000301, 0x000003A1, 0x00000313, + 0x000003A5, 0x00000342, 0x000003A5, 0x00000308, + 0x00000342, 0x00001FFA, 0x00000399, 0x000003A9, + 0x00000399, 0x0000038F, 0x00000399, 0x000003A9, + 0x00000342, 0x000003A9, 0x00000342, 0x00000399, + 0x000003A9, 0x00000399, 0x00000046, 0x00000046, + 0x00000046, 0x00000049, 0x00000046, 0x0000004C, + 0x00000046, 0x00000046, 0x00000049, 0x00000046, + 0x00000046, 0x0000004C, 0x00000053, 0x00000054, + 0x00000053, 0x00000054, 0x00000544, 0x00000546, + 0x00000544, 0x00000535, 0x00000544, 0x0000053B, + 0x0000054E, 0x00000546, 0x00000544, 0x0000053D, +}; + +static uint32_t const __CFUniCharToUppercaseMappingExtraTableCount = 110; + +static uint32_t const __CFUniCharToTitlecaseMappingTable[] = { + 0x000000DF, 0x02000000, 0x000001C4, 0x010001C5, + 0x000001C5, 0x010001C5, 0x000001C6, 0x010001C5, + 0x000001C7, 0x010001C8, 0x000001C8, 0x010001C8, + 0x000001C9, 0x010001C8, 0x000001CA, 0x010001CB, + 0x000001CB, 0x010001CB, 0x000001CC, 0x010001CB, + 0x000001F1, 0x010001F2, 0x000001F2, 0x010001F2, + 0x000001F3, 0x010001F2, 0x00000587, 0x02000002, + 0x000010D0, 0x010010D0, 0x000010D1, 0x010010D1, + 0x000010D2, 0x010010D2, 0x000010D3, 0x010010D3, + 0x000010D4, 0x010010D4, 0x000010D5, 0x010010D5, + 0x000010D6, 0x010010D6, 0x000010D7, 0x010010D7, + 0x000010D8, 0x010010D8, 0x000010D9, 0x010010D9, + 0x000010DA, 0x010010DA, 0x000010DB, 0x010010DB, + 0x000010DC, 0x010010DC, 0x000010DD, 0x010010DD, + 0x000010DE, 0x010010DE, 0x000010DF, 0x010010DF, + 0x000010E0, 0x010010E0, 0x000010E1, 0x010010E1, + 0x000010E2, 0x010010E2, 0x000010E3, 0x010010E3, + 0x000010E4, 0x010010E4, 0x000010E5, 0x010010E5, + 0x000010E6, 0x010010E6, 0x000010E7, 0x010010E7, + 0x000010E8, 0x010010E8, 0x000010E9, 0x010010E9, + 0x000010EA, 0x010010EA, 0x000010EB, 0x010010EB, + 0x000010EC, 0x010010EC, 0x000010ED, 0x010010ED, + 0x000010EE, 0x010010EE, 0x000010EF, 0x010010EF, + 0x000010F0, 0x010010F0, 0x000010F1, 0x010010F1, + 0x000010F2, 0x010010F2, 0x000010F3, 0x010010F3, + 0x000010F4, 0x010010F4, 0x000010F5, 0x010010F5, + 0x000010F6, 0x010010F6, 0x000010F7, 0x010010F7, + 0x000010F8, 0x010010F8, 0x000010F9, 0x010010F9, + 0x000010FA, 0x010010FA, 0x000010FD, 0x010010FD, + 0x000010FE, 0x010010FE, 0x000010FF, 0x010010FF, + 0x00001F80, 0x01001F88, 0x00001F81, 0x01001F89, + 0x00001F82, 0x01001F8A, 0x00001F83, 0x01001F8B, + 0x00001F84, 0x01001F8C, 0x00001F85, 0x01001F8D, + 0x00001F86, 0x01001F8E, 0x00001F87, 0x01001F8F, + 0x00001F88, 0x01001F88, 0x00001F89, 0x01001F89, + 0x00001F8A, 0x01001F8A, 0x00001F8B, 0x01001F8B, + 0x00001F8C, 0x01001F8C, 0x00001F8D, 0x01001F8D, + 0x00001F8E, 0x01001F8E, 0x00001F8F, 0x01001F8F, + 0x00001F90, 0x01001F98, 0x00001F91, 0x01001F99, + 0x00001F92, 0x01001F9A, 0x00001F93, 0x01001F9B, + 0x00001F94, 0x01001F9C, 0x00001F95, 0x01001F9D, + 0x00001F96, 0x01001F9E, 0x00001F97, 0x01001F9F, + 0x00001F98, 0x01001F98, 0x00001F99, 0x01001F99, + 0x00001F9A, 0x01001F9A, 0x00001F9B, 0x01001F9B, + 0x00001F9C, 0x01001F9C, 0x00001F9D, 0x01001F9D, + 0x00001F9E, 0x01001F9E, 0x00001F9F, 0x01001F9F, + 0x00001FA0, 0x01001FA8, 0x00001FA1, 0x01001FA9, + 0x00001FA2, 0x01001FAA, 0x00001FA3, 0x01001FAB, + 0x00001FA4, 0x01001FAC, 0x00001FA5, 0x01001FAD, + 0x00001FA6, 0x01001FAE, 0x00001FA7, 0x01001FAF, + 0x00001FA8, 0x01001FA8, 0x00001FA9, 0x01001FA9, + 0x00001FAA, 0x01001FAA, 0x00001FAB, 0x01001FAB, + 0x00001FAC, 0x01001FAC, 0x00001FAD, 0x01001FAD, + 0x00001FAE, 0x01001FAE, 0x00001FAF, 0x01001FAF, + 0x00001FB2, 0x02000004, 0x00001FB3, 0x01001FBC, + 0x00001FB4, 0x02000006, 0x00001FB7, 0x03000008, + 0x00001FBC, 0x01001FBC, 0x00001FC2, 0x0200000B, + 0x00001FC3, 0x01001FCC, 0x00001FC4, 0x0200000D, + 0x00001FC7, 0x0300000F, 0x00001FCC, 0x01001FCC, + 0x00001FF2, 0x02000012, 0x00001FF3, 0x01001FFC, + 0x00001FF4, 0x02000014, 0x00001FF7, 0x03000016, + 0x00001FFC, 0x01001FFC, 0x0000FB00, 0x02000019, + 0x0000FB01, 0x0200001B, 0x0000FB02, 0x0200001D, + 0x0000FB03, 0x0300001F, 0x0000FB04, 0x03000022, + 0x0000FB05, 0x02000025, 0x0000FB06, 0x02000027, + 0x0000FB13, 0x02000029, 0x0000FB14, 0x0200002B, + 0x0000FB15, 0x0200002D, 0x0000FB16, 0x0200002F, + 0x0000FB17, 0x02000031, +}; + +static uint32_t const __CFUniCharToTitlecaseMappingTableCount = 135; + +static uint32_t const __CFUniCharToTitlecaseMappingExtraTable[] = { + 0x00000053, 0x00000073, 0x00000535, 0x00000582, + 0x00001FBA, 0x00000345, 0x00000386, 0x00000345, + 0x00000391, 0x00000342, 0x00000345, 0x00001FCA, + 0x00000345, 0x00000389, 0x00000345, 0x00000397, + 0x00000342, 0x00000345, 0x00001FFA, 0x00000345, + 0x0000038F, 0x00000345, 0x000003A9, 0x00000342, + 0x00000345, 0x00000046, 0x00000066, 0x00000046, + 0x00000069, 0x00000046, 0x0000006C, 0x00000046, + 0x00000066, 0x00000069, 0x00000046, 0x00000066, + 0x0000006C, 0x00000053, 0x00000074, 0x00000053, + 0x00000074, 0x00000544, 0x00000576, 0x00000544, + 0x00000565, 0x00000544, 0x0000056B, 0x0000054E, + 0x00000576, 0x00000544, 0x0000056D, +}; + +static uint32_t const __CFUniCharToTitlecaseMappingExtraTableCount = 25; + +static uint32_t const __CFUniCharToLowercaseMappingTable[] = { + 0x00000041, 0x01000061, 0x00000042, 0x01000062, + 0x00000043, 0x01000063, 0x00000044, 0x01000064, + 0x00000045, 0x01000065, 0x00000046, 0x01000066, + 0x00000047, 0x01000067, 0x00000048, 0x01000068, + 0x00000049, 0x01000069, 0x0000004A, 0x0100006A, + 0x0000004B, 0x0100006B, 0x0000004C, 0x0100006C, + 0x0000004D, 0x0100006D, 0x0000004E, 0x0100006E, + 0x0000004F, 0x0100006F, 0x00000050, 0x01000070, + 0x00000051, 0x01000071, 0x00000052, 0x01000072, + 0x00000053, 0x01000073, 0x00000054, 0x01000074, + 0x00000055, 0x01000075, 0x00000056, 0x01000076, + 0x00000057, 0x01000077, 0x00000058, 0x01000078, + 0x00000059, 0x01000079, 0x0000005A, 0x0100007A, + 0x000000C0, 0x010000E0, 0x000000C1, 0x010000E1, + 0x000000C2, 0x010000E2, 0x000000C3, 0x010000E3, + 0x000000C4, 0x010000E4, 0x000000C5, 0x010000E5, + 0x000000C6, 0x010000E6, 0x000000C7, 0x010000E7, + 0x000000C8, 0x010000E8, 0x000000C9, 0x010000E9, + 0x000000CA, 0x010000EA, 0x000000CB, 0x010000EB, + 0x000000CC, 0x010000EC, 0x000000CD, 0x010000ED, + 0x000000CE, 0x010000EE, 0x000000CF, 0x010000EF, + 0x000000D0, 0x010000F0, 0x000000D1, 0x010000F1, + 0x000000D2, 0x010000F2, 0x000000D3, 0x010000F3, + 0x000000D4, 0x010000F4, 0x000000D5, 0x010000F5, + 0x000000D6, 0x010000F6, 0x000000D8, 0x010000F8, + 0x000000D9, 0x010000F9, 0x000000DA, 0x010000FA, + 0x000000DB, 0x010000FB, 0x000000DC, 0x010000FC, + 0x000000DD, 0x010000FD, 0x000000DE, 0x010000FE, + 0x00000100, 0x01000101, 0x00000102, 0x01000103, + 0x00000104, 0x01000105, 0x00000106, 0x01000107, + 0x00000108, 0x01000109, 0x0000010A, 0x0100010B, + 0x0000010C, 0x0100010D, 0x0000010E, 0x0100010F, + 0x00000110, 0x01000111, 0x00000112, 0x01000113, + 0x00000114, 0x01000115, 0x00000116, 0x01000117, + 0x00000118, 0x01000119, 0x0000011A, 0x0100011B, + 0x0000011C, 0x0100011D, 0x0000011E, 0x0100011F, + 0x00000120, 0x01000121, 0x00000122, 0x01000123, + 0x00000124, 0x01000125, 0x00000126, 0x01000127, + 0x00000128, 0x01000129, 0x0000012A, 0x0100012B, + 0x0000012C, 0x0100012D, 0x0000012E, 0x0100012F, + 0x00000130, 0x02000000, 0x00000132, 0x01000133, + 0x00000134, 0x01000135, 0x00000136, 0x01000137, + 0x00000139, 0x0100013A, 0x0000013B, 0x0100013C, + 0x0000013D, 0x0100013E, 0x0000013F, 0x01000140, + 0x00000141, 0x01000142, 0x00000143, 0x01000144, + 0x00000145, 0x01000146, 0x00000147, 0x01000148, + 0x0000014A, 0x0100014B, 0x0000014C, 0x0100014D, + 0x0000014E, 0x0100014F, 0x00000150, 0x01000151, + 0x00000152, 0x01000153, 0x00000154, 0x01000155, + 0x00000156, 0x01000157, 0x00000158, 0x01000159, + 0x0000015A, 0x0100015B, 0x0000015C, 0x0100015D, + 0x0000015E, 0x0100015F, 0x00000160, 0x01000161, + 0x00000162, 0x01000163, 0x00000164, 0x01000165, + 0x00000166, 0x01000167, 0x00000168, 0x01000169, + 0x0000016A, 0x0100016B, 0x0000016C, 0x0100016D, + 0x0000016E, 0x0100016F, 0x00000170, 0x01000171, + 0x00000172, 0x01000173, 0x00000174, 0x01000175, + 0x00000176, 0x01000177, 0x00000178, 0x010000FF, + 0x00000179, 0x0100017A, 0x0000017B, 0x0100017C, + 0x0000017D, 0x0100017E, 0x00000181, 0x01000253, + 0x00000182, 0x01000183, 0x00000184, 0x01000185, + 0x00000186, 0x01000254, 0x00000187, 0x01000188, + 0x00000189, 0x01000256, 0x0000018A, 0x01000257, + 0x0000018B, 0x0100018C, 0x0000018E, 0x010001DD, + 0x0000018F, 0x01000259, 0x00000190, 0x0100025B, + 0x00000191, 0x01000192, 0x00000193, 0x01000260, + 0x00000194, 0x01000263, 0x00000196, 0x01000269, + 0x00000197, 0x01000268, 0x00000198, 0x01000199, + 0x0000019C, 0x0100026F, 0x0000019D, 0x01000272, + 0x0000019F, 0x01000275, 0x000001A0, 0x010001A1, + 0x000001A2, 0x010001A3, 0x000001A4, 0x010001A5, + 0x000001A6, 0x01000280, 0x000001A7, 0x010001A8, + 0x000001A9, 0x01000283, 0x000001AC, 0x010001AD, + 0x000001AE, 0x01000288, 0x000001AF, 0x010001B0, + 0x000001B1, 0x0100028A, 0x000001B2, 0x0100028B, + 0x000001B3, 0x010001B4, 0x000001B5, 0x010001B6, + 0x000001B7, 0x01000292, 0x000001B8, 0x010001B9, + 0x000001BC, 0x010001BD, 0x000001C4, 0x010001C6, + 0x000001C5, 0x010001C6, 0x000001C7, 0x010001C9, + 0x000001C8, 0x010001C9, 0x000001CA, 0x010001CC, + 0x000001CB, 0x010001CC, 0x000001CD, 0x010001CE, + 0x000001CF, 0x010001D0, 0x000001D1, 0x010001D2, + 0x000001D3, 0x010001D4, 0x000001D5, 0x010001D6, + 0x000001D7, 0x010001D8, 0x000001D9, 0x010001DA, + 0x000001DB, 0x010001DC, 0x000001DE, 0x010001DF, + 0x000001E0, 0x010001E1, 0x000001E2, 0x010001E3, + 0x000001E4, 0x010001E5, 0x000001E6, 0x010001E7, + 0x000001E8, 0x010001E9, 0x000001EA, 0x010001EB, + 0x000001EC, 0x010001ED, 0x000001EE, 0x010001EF, + 0x000001F1, 0x010001F3, 0x000001F2, 0x010001F3, + 0x000001F4, 0x010001F5, 0x000001F6, 0x01000195, + 0x000001F7, 0x010001BF, 0x000001F8, 0x010001F9, + 0x000001FA, 0x010001FB, 0x000001FC, 0x010001FD, + 0x000001FE, 0x010001FF, 0x00000200, 0x01000201, + 0x00000202, 0x01000203, 0x00000204, 0x01000205, + 0x00000206, 0x01000207, 0x00000208, 0x01000209, + 0x0000020A, 0x0100020B, 0x0000020C, 0x0100020D, + 0x0000020E, 0x0100020F, 0x00000210, 0x01000211, + 0x00000212, 0x01000213, 0x00000214, 0x01000215, + 0x00000216, 0x01000217, 0x00000218, 0x01000219, + 0x0000021A, 0x0100021B, 0x0000021C, 0x0100021D, + 0x0000021E, 0x0100021F, 0x00000220, 0x0100019E, + 0x00000222, 0x01000223, 0x00000224, 0x01000225, + 0x00000226, 0x01000227, 0x00000228, 0x01000229, + 0x0000022A, 0x0100022B, 0x0000022C, 0x0100022D, + 0x0000022E, 0x0100022F, 0x00000230, 0x01000231, + 0x00000232, 0x01000233, 0x0000023A, 0x01002C65, + 0x0000023B, 0x0100023C, 0x0000023D, 0x0100019A, + 0x0000023E, 0x01002C66, 0x00000241, 0x01000242, + 0x00000243, 0x01000180, 0x00000244, 0x01000289, + 0x00000245, 0x0100028C, 0x00000246, 0x01000247, + 0x00000248, 0x01000249, 0x0000024A, 0x0100024B, + 0x0000024C, 0x0100024D, 0x0000024E, 0x0100024F, + 0x00000370, 0x01000371, 0x00000372, 0x01000373, + 0x00000376, 0x01000377, 0x0000037F, 0x010003F3, + 0x00000386, 0x010003AC, 0x00000388, 0x010003AD, + 0x00000389, 0x010003AE, 0x0000038A, 0x010003AF, + 0x0000038C, 0x010003CC, 0x0000038E, 0x010003CD, + 0x0000038F, 0x010003CE, 0x00000391, 0x010003B1, + 0x00000392, 0x010003B2, 0x00000393, 0x010003B3, + 0x00000394, 0x010003B4, 0x00000395, 0x010003B5, + 0x00000396, 0x010003B6, 0x00000397, 0x010003B7, + 0x00000398, 0x010003B8, 0x00000399, 0x010003B9, + 0x0000039A, 0x010003BA, 0x0000039B, 0x010003BB, + 0x0000039C, 0x010003BC, 0x0000039D, 0x010003BD, + 0x0000039E, 0x010003BE, 0x0000039F, 0x010003BF, + 0x000003A0, 0x010003C0, 0x000003A1, 0x010003C1, + 0x000003A3, 0x010003C3, 0x000003A4, 0x010003C4, + 0x000003A5, 0x010003C5, 0x000003A6, 0x010003C6, + 0x000003A7, 0x010003C7, 0x000003A8, 0x010003C8, + 0x000003A9, 0x010003C9, 0x000003AA, 0x010003CA, + 0x000003AB, 0x010003CB, 0x000003CF, 0x010003D7, + 0x000003D8, 0x010003D9, 0x000003DA, 0x010003DB, + 0x000003DC, 0x010003DD, 0x000003DE, 0x010003DF, + 0x000003E0, 0x010003E1, 0x000003E2, 0x010003E3, + 0x000003E4, 0x010003E5, 0x000003E6, 0x010003E7, + 0x000003E8, 0x010003E9, 0x000003EA, 0x010003EB, + 0x000003EC, 0x010003ED, 0x000003EE, 0x010003EF, + 0x000003F4, 0x010003B8, 0x000003F7, 0x010003F8, + 0x000003F9, 0x010003F2, 0x000003FA, 0x010003FB, + 0x000003FD, 0x0100037B, 0x000003FE, 0x0100037C, + 0x000003FF, 0x0100037D, 0x00000400, 0x01000450, + 0x00000401, 0x01000451, 0x00000402, 0x01000452, + 0x00000403, 0x01000453, 0x00000404, 0x01000454, + 0x00000405, 0x01000455, 0x00000406, 0x01000456, + 0x00000407, 0x01000457, 0x00000408, 0x01000458, + 0x00000409, 0x01000459, 0x0000040A, 0x0100045A, + 0x0000040B, 0x0100045B, 0x0000040C, 0x0100045C, + 0x0000040D, 0x0100045D, 0x0000040E, 0x0100045E, + 0x0000040F, 0x0100045F, 0x00000410, 0x01000430, + 0x00000411, 0x01000431, 0x00000412, 0x01000432, + 0x00000413, 0x01000433, 0x00000414, 0x01000434, + 0x00000415, 0x01000435, 0x00000416, 0x01000436, + 0x00000417, 0x01000437, 0x00000418, 0x01000438, + 0x00000419, 0x01000439, 0x0000041A, 0x0100043A, + 0x0000041B, 0x0100043B, 0x0000041C, 0x0100043C, + 0x0000041D, 0x0100043D, 0x0000041E, 0x0100043E, + 0x0000041F, 0x0100043F, 0x00000420, 0x01000440, + 0x00000421, 0x01000441, 0x00000422, 0x01000442, + 0x00000423, 0x01000443, 0x00000424, 0x01000444, + 0x00000425, 0x01000445, 0x00000426, 0x01000446, + 0x00000427, 0x01000447, 0x00000428, 0x01000448, + 0x00000429, 0x01000449, 0x0000042A, 0x0100044A, + 0x0000042B, 0x0100044B, 0x0000042C, 0x0100044C, + 0x0000042D, 0x0100044D, 0x0000042E, 0x0100044E, + 0x0000042F, 0x0100044F, 0x00000460, 0x01000461, + 0x00000462, 0x01000463, 0x00000464, 0x01000465, + 0x00000466, 0x01000467, 0x00000468, 0x01000469, + 0x0000046A, 0x0100046B, 0x0000046C, 0x0100046D, + 0x0000046E, 0x0100046F, 0x00000470, 0x01000471, + 0x00000472, 0x01000473, 0x00000474, 0x01000475, + 0x00000476, 0x01000477, 0x00000478, 0x01000479, + 0x0000047A, 0x0100047B, 0x0000047C, 0x0100047D, + 0x0000047E, 0x0100047F, 0x00000480, 0x01000481, + 0x0000048A, 0x0100048B, 0x0000048C, 0x0100048D, + 0x0000048E, 0x0100048F, 0x00000490, 0x01000491, + 0x00000492, 0x01000493, 0x00000494, 0x01000495, + 0x00000496, 0x01000497, 0x00000498, 0x01000499, + 0x0000049A, 0x0100049B, 0x0000049C, 0x0100049D, + 0x0000049E, 0x0100049F, 0x000004A0, 0x010004A1, + 0x000004A2, 0x010004A3, 0x000004A4, 0x010004A5, + 0x000004A6, 0x010004A7, 0x000004A8, 0x010004A9, + 0x000004AA, 0x010004AB, 0x000004AC, 0x010004AD, + 0x000004AE, 0x010004AF, 0x000004B0, 0x010004B1, + 0x000004B2, 0x010004B3, 0x000004B4, 0x010004B5, + 0x000004B6, 0x010004B7, 0x000004B8, 0x010004B9, + 0x000004BA, 0x010004BB, 0x000004BC, 0x010004BD, + 0x000004BE, 0x010004BF, 0x000004C0, 0x010004CF, + 0x000004C1, 0x010004C2, 0x000004C3, 0x010004C4, + 0x000004C5, 0x010004C6, 0x000004C7, 0x010004C8, + 0x000004C9, 0x010004CA, 0x000004CB, 0x010004CC, + 0x000004CD, 0x010004CE, 0x000004D0, 0x010004D1, + 0x000004D2, 0x010004D3, 0x000004D4, 0x010004D5, + 0x000004D6, 0x010004D7, 0x000004D8, 0x010004D9, + 0x000004DA, 0x010004DB, 0x000004DC, 0x010004DD, + 0x000004DE, 0x010004DF, 0x000004E0, 0x010004E1, + 0x000004E2, 0x010004E3, 0x000004E4, 0x010004E5, + 0x000004E6, 0x010004E7, 0x000004E8, 0x010004E9, + 0x000004EA, 0x010004EB, 0x000004EC, 0x010004ED, + 0x000004EE, 0x010004EF, 0x000004F0, 0x010004F1, + 0x000004F2, 0x010004F3, 0x000004F4, 0x010004F5, + 0x000004F6, 0x010004F7, 0x000004F8, 0x010004F9, + 0x000004FA, 0x010004FB, 0x000004FC, 0x010004FD, + 0x000004FE, 0x010004FF, 0x00000500, 0x01000501, + 0x00000502, 0x01000503, 0x00000504, 0x01000505, + 0x00000506, 0x01000507, 0x00000508, 0x01000509, + 0x0000050A, 0x0100050B, 0x0000050C, 0x0100050D, + 0x0000050E, 0x0100050F, 0x00000510, 0x01000511, + 0x00000512, 0x01000513, 0x00000514, 0x01000515, + 0x00000516, 0x01000517, 0x00000518, 0x01000519, + 0x0000051A, 0x0100051B, 0x0000051C, 0x0100051D, + 0x0000051E, 0x0100051F, 0x00000520, 0x01000521, + 0x00000522, 0x01000523, 0x00000524, 0x01000525, + 0x00000526, 0x01000527, 0x00000528, 0x01000529, + 0x0000052A, 0x0100052B, 0x0000052C, 0x0100052D, + 0x0000052E, 0x0100052F, 0x00000531, 0x01000561, + 0x00000532, 0x01000562, 0x00000533, 0x01000563, + 0x00000534, 0x01000564, 0x00000535, 0x01000565, + 0x00000536, 0x01000566, 0x00000537, 0x01000567, + 0x00000538, 0x01000568, 0x00000539, 0x01000569, + 0x0000053A, 0x0100056A, 0x0000053B, 0x0100056B, + 0x0000053C, 0x0100056C, 0x0000053D, 0x0100056D, + 0x0000053E, 0x0100056E, 0x0000053F, 0x0100056F, + 0x00000540, 0x01000570, 0x00000541, 0x01000571, + 0x00000542, 0x01000572, 0x00000543, 0x01000573, + 0x00000544, 0x01000574, 0x00000545, 0x01000575, + 0x00000546, 0x01000576, 0x00000547, 0x01000577, + 0x00000548, 0x01000578, 0x00000549, 0x01000579, + 0x0000054A, 0x0100057A, 0x0000054B, 0x0100057B, + 0x0000054C, 0x0100057C, 0x0000054D, 0x0100057D, + 0x0000054E, 0x0100057E, 0x0000054F, 0x0100057F, + 0x00000550, 0x01000580, 0x00000551, 0x01000581, + 0x00000552, 0x01000582, 0x00000553, 0x01000583, + 0x00000554, 0x01000584, 0x00000555, 0x01000585, + 0x00000556, 0x01000586, 0x000010A0, 0x01002D00, + 0x000010A1, 0x01002D01, 0x000010A2, 0x01002D02, + 0x000010A3, 0x01002D03, 0x000010A4, 0x01002D04, + 0x000010A5, 0x01002D05, 0x000010A6, 0x01002D06, + 0x000010A7, 0x01002D07, 0x000010A8, 0x01002D08, + 0x000010A9, 0x01002D09, 0x000010AA, 0x01002D0A, + 0x000010AB, 0x01002D0B, 0x000010AC, 0x01002D0C, + 0x000010AD, 0x01002D0D, 0x000010AE, 0x01002D0E, + 0x000010AF, 0x01002D0F, 0x000010B0, 0x01002D10, + 0x000010B1, 0x01002D11, 0x000010B2, 0x01002D12, + 0x000010B3, 0x01002D13, 0x000010B4, 0x01002D14, + 0x000010B5, 0x01002D15, 0x000010B6, 0x01002D16, + 0x000010B7, 0x01002D17, 0x000010B8, 0x01002D18, + 0x000010B9, 0x01002D19, 0x000010BA, 0x01002D1A, + 0x000010BB, 0x01002D1B, 0x000010BC, 0x01002D1C, + 0x000010BD, 0x01002D1D, 0x000010BE, 0x01002D1E, + 0x000010BF, 0x01002D1F, 0x000010C0, 0x01002D20, + 0x000010C1, 0x01002D21, 0x000010C2, 0x01002D22, + 0x000010C3, 0x01002D23, 0x000010C4, 0x01002D24, + 0x000010C5, 0x01002D25, 0x000010C7, 0x01002D27, + 0x000010CD, 0x01002D2D, 0x000013A0, 0x0100AB70, + 0x000013A1, 0x0100AB71, 0x000013A2, 0x0100AB72, + 0x000013A3, 0x0100AB73, 0x000013A4, 0x0100AB74, + 0x000013A5, 0x0100AB75, 0x000013A6, 0x0100AB76, + 0x000013A7, 0x0100AB77, 0x000013A8, 0x0100AB78, + 0x000013A9, 0x0100AB79, 0x000013AA, 0x0100AB7A, + 0x000013AB, 0x0100AB7B, 0x000013AC, 0x0100AB7C, + 0x000013AD, 0x0100AB7D, 0x000013AE, 0x0100AB7E, + 0x000013AF, 0x0100AB7F, 0x000013B0, 0x0100AB80, + 0x000013B1, 0x0100AB81, 0x000013B2, 0x0100AB82, + 0x000013B3, 0x0100AB83, 0x000013B4, 0x0100AB84, + 0x000013B5, 0x0100AB85, 0x000013B6, 0x0100AB86, + 0x000013B7, 0x0100AB87, 0x000013B8, 0x0100AB88, + 0x000013B9, 0x0100AB89, 0x000013BA, 0x0100AB8A, + 0x000013BB, 0x0100AB8B, 0x000013BC, 0x0100AB8C, + 0x000013BD, 0x0100AB8D, 0x000013BE, 0x0100AB8E, + 0x000013BF, 0x0100AB8F, 0x000013C0, 0x0100AB90, + 0x000013C1, 0x0100AB91, 0x000013C2, 0x0100AB92, + 0x000013C3, 0x0100AB93, 0x000013C4, 0x0100AB94, + 0x000013C5, 0x0100AB95, 0x000013C6, 0x0100AB96, + 0x000013C7, 0x0100AB97, 0x000013C8, 0x0100AB98, + 0x000013C9, 0x0100AB99, 0x000013CA, 0x0100AB9A, + 0x000013CB, 0x0100AB9B, 0x000013CC, 0x0100AB9C, + 0x000013CD, 0x0100AB9D, 0x000013CE, 0x0100AB9E, + 0x000013CF, 0x0100AB9F, 0x000013D0, 0x0100ABA0, + 0x000013D1, 0x0100ABA1, 0x000013D2, 0x0100ABA2, + 0x000013D3, 0x0100ABA3, 0x000013D4, 0x0100ABA4, + 0x000013D5, 0x0100ABA5, 0x000013D6, 0x0100ABA6, + 0x000013D7, 0x0100ABA7, 0x000013D8, 0x0100ABA8, + 0x000013D9, 0x0100ABA9, 0x000013DA, 0x0100ABAA, + 0x000013DB, 0x0100ABAB, 0x000013DC, 0x0100ABAC, + 0x000013DD, 0x0100ABAD, 0x000013DE, 0x0100ABAE, + 0x000013DF, 0x0100ABAF, 0x000013E0, 0x0100ABB0, + 0x000013E1, 0x0100ABB1, 0x000013E2, 0x0100ABB2, + 0x000013E3, 0x0100ABB3, 0x000013E4, 0x0100ABB4, + 0x000013E5, 0x0100ABB5, 0x000013E6, 0x0100ABB6, + 0x000013E7, 0x0100ABB7, 0x000013E8, 0x0100ABB8, + 0x000013E9, 0x0100ABB9, 0x000013EA, 0x0100ABBA, + 0x000013EB, 0x0100ABBB, 0x000013EC, 0x0100ABBC, + 0x000013ED, 0x0100ABBD, 0x000013EE, 0x0100ABBE, + 0x000013EF, 0x0100ABBF, 0x000013F0, 0x010013F8, + 0x000013F1, 0x010013F9, 0x000013F2, 0x010013FA, + 0x000013F3, 0x010013FB, 0x000013F4, 0x010013FC, + 0x000013F5, 0x010013FD, 0x00001C90, 0x010010D0, + 0x00001C91, 0x010010D1, 0x00001C92, 0x010010D2, + 0x00001C93, 0x010010D3, 0x00001C94, 0x010010D4, + 0x00001C95, 0x010010D5, 0x00001C96, 0x010010D6, + 0x00001C97, 0x010010D7, 0x00001C98, 0x010010D8, + 0x00001C99, 0x010010D9, 0x00001C9A, 0x010010DA, + 0x00001C9B, 0x010010DB, 0x00001C9C, 0x010010DC, + 0x00001C9D, 0x010010DD, 0x00001C9E, 0x010010DE, + 0x00001C9F, 0x010010DF, 0x00001CA0, 0x010010E0, + 0x00001CA1, 0x010010E1, 0x00001CA2, 0x010010E2, + 0x00001CA3, 0x010010E3, 0x00001CA4, 0x010010E4, + 0x00001CA5, 0x010010E5, 0x00001CA6, 0x010010E6, + 0x00001CA7, 0x010010E7, 0x00001CA8, 0x010010E8, + 0x00001CA9, 0x010010E9, 0x00001CAA, 0x010010EA, + 0x00001CAB, 0x010010EB, 0x00001CAC, 0x010010EC, + 0x00001CAD, 0x010010ED, 0x00001CAE, 0x010010EE, + 0x00001CAF, 0x010010EF, 0x00001CB0, 0x010010F0, + 0x00001CB1, 0x010010F1, 0x00001CB2, 0x010010F2, + 0x00001CB3, 0x010010F3, 0x00001CB4, 0x010010F4, + 0x00001CB5, 0x010010F5, 0x00001CB6, 0x010010F6, + 0x00001CB7, 0x010010F7, 0x00001CB8, 0x010010F8, + 0x00001CB9, 0x010010F9, 0x00001CBA, 0x010010FA, + 0x00001CBD, 0x010010FD, 0x00001CBE, 0x010010FE, + 0x00001CBF, 0x010010FF, 0x00001E00, 0x01001E01, + 0x00001E02, 0x01001E03, 0x00001E04, 0x01001E05, + 0x00001E06, 0x01001E07, 0x00001E08, 0x01001E09, + 0x00001E0A, 0x01001E0B, 0x00001E0C, 0x01001E0D, + 0x00001E0E, 0x01001E0F, 0x00001E10, 0x01001E11, + 0x00001E12, 0x01001E13, 0x00001E14, 0x01001E15, + 0x00001E16, 0x01001E17, 0x00001E18, 0x01001E19, + 0x00001E1A, 0x01001E1B, 0x00001E1C, 0x01001E1D, + 0x00001E1E, 0x01001E1F, 0x00001E20, 0x01001E21, + 0x00001E22, 0x01001E23, 0x00001E24, 0x01001E25, + 0x00001E26, 0x01001E27, 0x00001E28, 0x01001E29, + 0x00001E2A, 0x01001E2B, 0x00001E2C, 0x01001E2D, + 0x00001E2E, 0x01001E2F, 0x00001E30, 0x01001E31, + 0x00001E32, 0x01001E33, 0x00001E34, 0x01001E35, + 0x00001E36, 0x01001E37, 0x00001E38, 0x01001E39, + 0x00001E3A, 0x01001E3B, 0x00001E3C, 0x01001E3D, + 0x00001E3E, 0x01001E3F, 0x00001E40, 0x01001E41, + 0x00001E42, 0x01001E43, 0x00001E44, 0x01001E45, + 0x00001E46, 0x01001E47, 0x00001E48, 0x01001E49, + 0x00001E4A, 0x01001E4B, 0x00001E4C, 0x01001E4D, + 0x00001E4E, 0x01001E4F, 0x00001E50, 0x01001E51, + 0x00001E52, 0x01001E53, 0x00001E54, 0x01001E55, + 0x00001E56, 0x01001E57, 0x00001E58, 0x01001E59, + 0x00001E5A, 0x01001E5B, 0x00001E5C, 0x01001E5D, + 0x00001E5E, 0x01001E5F, 0x00001E60, 0x01001E61, + 0x00001E62, 0x01001E63, 0x00001E64, 0x01001E65, + 0x00001E66, 0x01001E67, 0x00001E68, 0x01001E69, + 0x00001E6A, 0x01001E6B, 0x00001E6C, 0x01001E6D, + 0x00001E6E, 0x01001E6F, 0x00001E70, 0x01001E71, + 0x00001E72, 0x01001E73, 0x00001E74, 0x01001E75, + 0x00001E76, 0x01001E77, 0x00001E78, 0x01001E79, + 0x00001E7A, 0x01001E7B, 0x00001E7C, 0x01001E7D, + 0x00001E7E, 0x01001E7F, 0x00001E80, 0x01001E81, + 0x00001E82, 0x01001E83, 0x00001E84, 0x01001E85, + 0x00001E86, 0x01001E87, 0x00001E88, 0x01001E89, + 0x00001E8A, 0x01001E8B, 0x00001E8C, 0x01001E8D, + 0x00001E8E, 0x01001E8F, 0x00001E90, 0x01001E91, + 0x00001E92, 0x01001E93, 0x00001E94, 0x01001E95, + 0x00001E9E, 0x010000DF, 0x00001EA0, 0x01001EA1, + 0x00001EA2, 0x01001EA3, 0x00001EA4, 0x01001EA5, + 0x00001EA6, 0x01001EA7, 0x00001EA8, 0x01001EA9, + 0x00001EAA, 0x01001EAB, 0x00001EAC, 0x01001EAD, + 0x00001EAE, 0x01001EAF, 0x00001EB0, 0x01001EB1, + 0x00001EB2, 0x01001EB3, 0x00001EB4, 0x01001EB5, + 0x00001EB6, 0x01001EB7, 0x00001EB8, 0x01001EB9, + 0x00001EBA, 0x01001EBB, 0x00001EBC, 0x01001EBD, + 0x00001EBE, 0x01001EBF, 0x00001EC0, 0x01001EC1, + 0x00001EC2, 0x01001EC3, 0x00001EC4, 0x01001EC5, + 0x00001EC6, 0x01001EC7, 0x00001EC8, 0x01001EC9, + 0x00001ECA, 0x01001ECB, 0x00001ECC, 0x01001ECD, + 0x00001ECE, 0x01001ECF, 0x00001ED0, 0x01001ED1, + 0x00001ED2, 0x01001ED3, 0x00001ED4, 0x01001ED5, + 0x00001ED6, 0x01001ED7, 0x00001ED8, 0x01001ED9, + 0x00001EDA, 0x01001EDB, 0x00001EDC, 0x01001EDD, + 0x00001EDE, 0x01001EDF, 0x00001EE0, 0x01001EE1, + 0x00001EE2, 0x01001EE3, 0x00001EE4, 0x01001EE5, + 0x00001EE6, 0x01001EE7, 0x00001EE8, 0x01001EE9, + 0x00001EEA, 0x01001EEB, 0x00001EEC, 0x01001EED, + 0x00001EEE, 0x01001EEF, 0x00001EF0, 0x01001EF1, + 0x00001EF2, 0x01001EF3, 0x00001EF4, 0x01001EF5, + 0x00001EF6, 0x01001EF7, 0x00001EF8, 0x01001EF9, + 0x00001EFA, 0x01001EFB, 0x00001EFC, 0x01001EFD, + 0x00001EFE, 0x01001EFF, 0x00001F08, 0x01001F00, + 0x00001F09, 0x01001F01, 0x00001F0A, 0x01001F02, + 0x00001F0B, 0x01001F03, 0x00001F0C, 0x01001F04, + 0x00001F0D, 0x01001F05, 0x00001F0E, 0x01001F06, + 0x00001F0F, 0x01001F07, 0x00001F18, 0x01001F10, + 0x00001F19, 0x01001F11, 0x00001F1A, 0x01001F12, + 0x00001F1B, 0x01001F13, 0x00001F1C, 0x01001F14, + 0x00001F1D, 0x01001F15, 0x00001F28, 0x01001F20, + 0x00001F29, 0x01001F21, 0x00001F2A, 0x01001F22, + 0x00001F2B, 0x01001F23, 0x00001F2C, 0x01001F24, + 0x00001F2D, 0x01001F25, 0x00001F2E, 0x01001F26, + 0x00001F2F, 0x01001F27, 0x00001F38, 0x01001F30, + 0x00001F39, 0x01001F31, 0x00001F3A, 0x01001F32, + 0x00001F3B, 0x01001F33, 0x00001F3C, 0x01001F34, + 0x00001F3D, 0x01001F35, 0x00001F3E, 0x01001F36, + 0x00001F3F, 0x01001F37, 0x00001F48, 0x01001F40, + 0x00001F49, 0x01001F41, 0x00001F4A, 0x01001F42, + 0x00001F4B, 0x01001F43, 0x00001F4C, 0x01001F44, + 0x00001F4D, 0x01001F45, 0x00001F59, 0x01001F51, + 0x00001F5B, 0x01001F53, 0x00001F5D, 0x01001F55, + 0x00001F5F, 0x01001F57, 0x00001F68, 0x01001F60, + 0x00001F69, 0x01001F61, 0x00001F6A, 0x01001F62, + 0x00001F6B, 0x01001F63, 0x00001F6C, 0x01001F64, + 0x00001F6D, 0x01001F65, 0x00001F6E, 0x01001F66, + 0x00001F6F, 0x01001F67, 0x00001F88, 0x01001F80, + 0x00001F89, 0x01001F81, 0x00001F8A, 0x01001F82, + 0x00001F8B, 0x01001F83, 0x00001F8C, 0x01001F84, + 0x00001F8D, 0x01001F85, 0x00001F8E, 0x01001F86, + 0x00001F8F, 0x01001F87, 0x00001F98, 0x01001F90, + 0x00001F99, 0x01001F91, 0x00001F9A, 0x01001F92, + 0x00001F9B, 0x01001F93, 0x00001F9C, 0x01001F94, + 0x00001F9D, 0x01001F95, 0x00001F9E, 0x01001F96, + 0x00001F9F, 0x01001F97, 0x00001FA8, 0x01001FA0, + 0x00001FA9, 0x01001FA1, 0x00001FAA, 0x01001FA2, + 0x00001FAB, 0x01001FA3, 0x00001FAC, 0x01001FA4, + 0x00001FAD, 0x01001FA5, 0x00001FAE, 0x01001FA6, + 0x00001FAF, 0x01001FA7, 0x00001FB8, 0x01001FB0, + 0x00001FB9, 0x01001FB1, 0x00001FBA, 0x01001F70, + 0x00001FBB, 0x01001F71, 0x00001FBC, 0x01001FB3, + 0x00001FC8, 0x01001F72, 0x00001FC9, 0x01001F73, + 0x00001FCA, 0x01001F74, 0x00001FCB, 0x01001F75, + 0x00001FCC, 0x01001FC3, 0x00001FD8, 0x01001FD0, + 0x00001FD9, 0x01001FD1, 0x00001FDA, 0x01001F76, + 0x00001FDB, 0x01001F77, 0x00001FE8, 0x01001FE0, + 0x00001FE9, 0x01001FE1, 0x00001FEA, 0x01001F7A, + 0x00001FEB, 0x01001F7B, 0x00001FEC, 0x01001FE5, + 0x00001FF8, 0x01001F78, 0x00001FF9, 0x01001F79, + 0x00001FFA, 0x01001F7C, 0x00001FFB, 0x01001F7D, + 0x00001FFC, 0x01001FF3, 0x00002126, 0x010003C9, + 0x0000212A, 0x0100006B, 0x0000212B, 0x010000E5, + 0x00002132, 0x0100214E, 0x00002160, 0x01002170, + 0x00002161, 0x01002171, 0x00002162, 0x01002172, + 0x00002163, 0x01002173, 0x00002164, 0x01002174, + 0x00002165, 0x01002175, 0x00002166, 0x01002176, + 0x00002167, 0x01002177, 0x00002168, 0x01002178, + 0x00002169, 0x01002179, 0x0000216A, 0x0100217A, + 0x0000216B, 0x0100217B, 0x0000216C, 0x0100217C, + 0x0000216D, 0x0100217D, 0x0000216E, 0x0100217E, + 0x0000216F, 0x0100217F, 0x00002183, 0x01002184, + 0x000024B6, 0x010024D0, 0x000024B7, 0x010024D1, + 0x000024B8, 0x010024D2, 0x000024B9, 0x010024D3, + 0x000024BA, 0x010024D4, 0x000024BB, 0x010024D5, + 0x000024BC, 0x010024D6, 0x000024BD, 0x010024D7, + 0x000024BE, 0x010024D8, 0x000024BF, 0x010024D9, + 0x000024C0, 0x010024DA, 0x000024C1, 0x010024DB, + 0x000024C2, 0x010024DC, 0x000024C3, 0x010024DD, + 0x000024C4, 0x010024DE, 0x000024C5, 0x010024DF, + 0x000024C6, 0x010024E0, 0x000024C7, 0x010024E1, + 0x000024C8, 0x010024E2, 0x000024C9, 0x010024E3, + 0x000024CA, 0x010024E4, 0x000024CB, 0x010024E5, + 0x000024CC, 0x010024E6, 0x000024CD, 0x010024E7, + 0x000024CE, 0x010024E8, 0x000024CF, 0x010024E9, + 0x00002C00, 0x01002C30, 0x00002C01, 0x01002C31, + 0x00002C02, 0x01002C32, 0x00002C03, 0x01002C33, + 0x00002C04, 0x01002C34, 0x00002C05, 0x01002C35, + 0x00002C06, 0x01002C36, 0x00002C07, 0x01002C37, + 0x00002C08, 0x01002C38, 0x00002C09, 0x01002C39, + 0x00002C0A, 0x01002C3A, 0x00002C0B, 0x01002C3B, + 0x00002C0C, 0x01002C3C, 0x00002C0D, 0x01002C3D, + 0x00002C0E, 0x01002C3E, 0x00002C0F, 0x01002C3F, + 0x00002C10, 0x01002C40, 0x00002C11, 0x01002C41, + 0x00002C12, 0x01002C42, 0x00002C13, 0x01002C43, + 0x00002C14, 0x01002C44, 0x00002C15, 0x01002C45, + 0x00002C16, 0x01002C46, 0x00002C17, 0x01002C47, + 0x00002C18, 0x01002C48, 0x00002C19, 0x01002C49, + 0x00002C1A, 0x01002C4A, 0x00002C1B, 0x01002C4B, + 0x00002C1C, 0x01002C4C, 0x00002C1D, 0x01002C4D, + 0x00002C1E, 0x01002C4E, 0x00002C1F, 0x01002C4F, + 0x00002C20, 0x01002C50, 0x00002C21, 0x01002C51, + 0x00002C22, 0x01002C52, 0x00002C23, 0x01002C53, + 0x00002C24, 0x01002C54, 0x00002C25, 0x01002C55, + 0x00002C26, 0x01002C56, 0x00002C27, 0x01002C57, + 0x00002C28, 0x01002C58, 0x00002C29, 0x01002C59, + 0x00002C2A, 0x01002C5A, 0x00002C2B, 0x01002C5B, + 0x00002C2C, 0x01002C5C, 0x00002C2D, 0x01002C5D, + 0x00002C2E, 0x01002C5E, 0x00002C2F, 0x01002C5F, + 0x00002C60, 0x01002C61, 0x00002C62, 0x0100026B, + 0x00002C63, 0x01001D7D, 0x00002C64, 0x0100027D, + 0x00002C67, 0x01002C68, 0x00002C69, 0x01002C6A, + 0x00002C6B, 0x01002C6C, 0x00002C6D, 0x01000251, + 0x00002C6E, 0x01000271, 0x00002C6F, 0x01000250, + 0x00002C70, 0x01000252, 0x00002C72, 0x01002C73, + 0x00002C75, 0x01002C76, 0x00002C7E, 0x0100023F, + 0x00002C7F, 0x01000240, 0x00002C80, 0x01002C81, + 0x00002C82, 0x01002C83, 0x00002C84, 0x01002C85, + 0x00002C86, 0x01002C87, 0x00002C88, 0x01002C89, + 0x00002C8A, 0x01002C8B, 0x00002C8C, 0x01002C8D, + 0x00002C8E, 0x01002C8F, 0x00002C90, 0x01002C91, + 0x00002C92, 0x01002C93, 0x00002C94, 0x01002C95, + 0x00002C96, 0x01002C97, 0x00002C98, 0x01002C99, + 0x00002C9A, 0x01002C9B, 0x00002C9C, 0x01002C9D, + 0x00002C9E, 0x01002C9F, 0x00002CA0, 0x01002CA1, + 0x00002CA2, 0x01002CA3, 0x00002CA4, 0x01002CA5, + 0x00002CA6, 0x01002CA7, 0x00002CA8, 0x01002CA9, + 0x00002CAA, 0x01002CAB, 0x00002CAC, 0x01002CAD, + 0x00002CAE, 0x01002CAF, 0x00002CB0, 0x01002CB1, + 0x00002CB2, 0x01002CB3, 0x00002CB4, 0x01002CB5, + 0x00002CB6, 0x01002CB7, 0x00002CB8, 0x01002CB9, + 0x00002CBA, 0x01002CBB, 0x00002CBC, 0x01002CBD, + 0x00002CBE, 0x01002CBF, 0x00002CC0, 0x01002CC1, + 0x00002CC2, 0x01002CC3, 0x00002CC4, 0x01002CC5, + 0x00002CC6, 0x01002CC7, 0x00002CC8, 0x01002CC9, + 0x00002CCA, 0x01002CCB, 0x00002CCC, 0x01002CCD, + 0x00002CCE, 0x01002CCF, 0x00002CD0, 0x01002CD1, + 0x00002CD2, 0x01002CD3, 0x00002CD4, 0x01002CD5, + 0x00002CD6, 0x01002CD7, 0x00002CD8, 0x01002CD9, + 0x00002CDA, 0x01002CDB, 0x00002CDC, 0x01002CDD, + 0x00002CDE, 0x01002CDF, 0x00002CE0, 0x01002CE1, + 0x00002CE2, 0x01002CE3, 0x00002CEB, 0x01002CEC, + 0x00002CED, 0x01002CEE, 0x00002CF2, 0x01002CF3, + 0x0000A640, 0x0100A641, 0x0000A642, 0x0100A643, + 0x0000A644, 0x0100A645, 0x0000A646, 0x0100A647, + 0x0000A648, 0x0100A649, 0x0000A64A, 0x0100A64B, + 0x0000A64C, 0x0100A64D, 0x0000A64E, 0x0100A64F, + 0x0000A650, 0x0100A651, 0x0000A652, 0x0100A653, + 0x0000A654, 0x0100A655, 0x0000A656, 0x0100A657, + 0x0000A658, 0x0100A659, 0x0000A65A, 0x0100A65B, + 0x0000A65C, 0x0100A65D, 0x0000A65E, 0x0100A65F, + 0x0000A660, 0x0100A661, 0x0000A662, 0x0100A663, + 0x0000A664, 0x0100A665, 0x0000A666, 0x0100A667, + 0x0000A668, 0x0100A669, 0x0000A66A, 0x0100A66B, + 0x0000A66C, 0x0100A66D, 0x0000A680, 0x0100A681, + 0x0000A682, 0x0100A683, 0x0000A684, 0x0100A685, + 0x0000A686, 0x0100A687, 0x0000A688, 0x0100A689, + 0x0000A68A, 0x0100A68B, 0x0000A68C, 0x0100A68D, + 0x0000A68E, 0x0100A68F, 0x0000A690, 0x0100A691, + 0x0000A692, 0x0100A693, 0x0000A694, 0x0100A695, + 0x0000A696, 0x0100A697, 0x0000A698, 0x0100A699, + 0x0000A69A, 0x0100A69B, 0x0000A722, 0x0100A723, + 0x0000A724, 0x0100A725, 0x0000A726, 0x0100A727, + 0x0000A728, 0x0100A729, 0x0000A72A, 0x0100A72B, + 0x0000A72C, 0x0100A72D, 0x0000A72E, 0x0100A72F, + 0x0000A732, 0x0100A733, 0x0000A734, 0x0100A735, + 0x0000A736, 0x0100A737, 0x0000A738, 0x0100A739, + 0x0000A73A, 0x0100A73B, 0x0000A73C, 0x0100A73D, + 0x0000A73E, 0x0100A73F, 0x0000A740, 0x0100A741, + 0x0000A742, 0x0100A743, 0x0000A744, 0x0100A745, + 0x0000A746, 0x0100A747, 0x0000A748, 0x0100A749, + 0x0000A74A, 0x0100A74B, 0x0000A74C, 0x0100A74D, + 0x0000A74E, 0x0100A74F, 0x0000A750, 0x0100A751, + 0x0000A752, 0x0100A753, 0x0000A754, 0x0100A755, + 0x0000A756, 0x0100A757, 0x0000A758, 0x0100A759, + 0x0000A75A, 0x0100A75B, 0x0000A75C, 0x0100A75D, + 0x0000A75E, 0x0100A75F, 0x0000A760, 0x0100A761, + 0x0000A762, 0x0100A763, 0x0000A764, 0x0100A765, + 0x0000A766, 0x0100A767, 0x0000A768, 0x0100A769, + 0x0000A76A, 0x0100A76B, 0x0000A76C, 0x0100A76D, + 0x0000A76E, 0x0100A76F, 0x0000A779, 0x0100A77A, + 0x0000A77B, 0x0100A77C, 0x0000A77D, 0x01001D79, + 0x0000A77E, 0x0100A77F, 0x0000A780, 0x0100A781, + 0x0000A782, 0x0100A783, 0x0000A784, 0x0100A785, + 0x0000A786, 0x0100A787, 0x0000A78B, 0x0100A78C, + 0x0000A78D, 0x01000265, 0x0000A790, 0x0100A791, + 0x0000A792, 0x0100A793, 0x0000A796, 0x0100A797, + 0x0000A798, 0x0100A799, 0x0000A79A, 0x0100A79B, + 0x0000A79C, 0x0100A79D, 0x0000A79E, 0x0100A79F, + 0x0000A7A0, 0x0100A7A1, 0x0000A7A2, 0x0100A7A3, + 0x0000A7A4, 0x0100A7A5, 0x0000A7A6, 0x0100A7A7, + 0x0000A7A8, 0x0100A7A9, 0x0000A7AA, 0x01000266, + 0x0000A7AB, 0x0100025C, 0x0000A7AC, 0x01000261, + 0x0000A7AD, 0x0100026C, 0x0000A7AE, 0x0100026A, + 0x0000A7B0, 0x0100029E, 0x0000A7B1, 0x01000287, + 0x0000A7B2, 0x0100029D, 0x0000A7B3, 0x0100AB53, + 0x0000A7B4, 0x0100A7B5, 0x0000A7B6, 0x0100A7B7, + 0x0000A7B8, 0x0100A7B9, 0x0000A7BA, 0x0100A7BB, + 0x0000A7BC, 0x0100A7BD, 0x0000A7BE, 0x0100A7BF, + 0x0000A7C0, 0x0100A7C1, 0x0000A7C2, 0x0100A7C3, + 0x0000A7C4, 0x0100A794, 0x0000A7C5, 0x01000282, + 0x0000A7C6, 0x01001D8E, 0x0000A7C7, 0x0100A7C8, + 0x0000A7C9, 0x0100A7CA, 0x0000A7D0, 0x0100A7D1, + 0x0000A7D6, 0x0100A7D7, 0x0000A7D8, 0x0100A7D9, + 0x0000A7F5, 0x0100A7F6, 0x0000FF21, 0x0100FF41, + 0x0000FF22, 0x0100FF42, 0x0000FF23, 0x0100FF43, + 0x0000FF24, 0x0100FF44, 0x0000FF25, 0x0100FF45, + 0x0000FF26, 0x0100FF46, 0x0000FF27, 0x0100FF47, + 0x0000FF28, 0x0100FF48, 0x0000FF29, 0x0100FF49, + 0x0000FF2A, 0x0100FF4A, 0x0000FF2B, 0x0100FF4B, + 0x0000FF2C, 0x0100FF4C, 0x0000FF2D, 0x0100FF4D, + 0x0000FF2E, 0x0100FF4E, 0x0000FF2F, 0x0100FF4F, + 0x0000FF30, 0x0100FF50, 0x0000FF31, 0x0100FF51, + 0x0000FF32, 0x0100FF52, 0x0000FF33, 0x0100FF53, + 0x0000FF34, 0x0100FF54, 0x0000FF35, 0x0100FF55, + 0x0000FF36, 0x0100FF56, 0x0000FF37, 0x0100FF57, + 0x0000FF38, 0x0100FF58, 0x0000FF39, 0x0100FF59, + 0x0000FF3A, 0x0100FF5A, 0x00010400, 0x81010428, + 0x00010401, 0x81010429, 0x00010402, 0x8101042A, + 0x00010403, 0x8101042B, 0x00010404, 0x8101042C, + 0x00010405, 0x8101042D, 0x00010406, 0x8101042E, + 0x00010407, 0x8101042F, 0x00010408, 0x81010430, + 0x00010409, 0x81010431, 0x0001040A, 0x81010432, + 0x0001040B, 0x81010433, 0x0001040C, 0x81010434, + 0x0001040D, 0x81010435, 0x0001040E, 0x81010436, + 0x0001040F, 0x81010437, 0x00010410, 0x81010438, + 0x00010411, 0x81010439, 0x00010412, 0x8101043A, + 0x00010413, 0x8101043B, 0x00010414, 0x8101043C, + 0x00010415, 0x8101043D, 0x00010416, 0x8101043E, + 0x00010417, 0x8101043F, 0x00010418, 0x81010440, + 0x00010419, 0x81010441, 0x0001041A, 0x81010442, + 0x0001041B, 0x81010443, 0x0001041C, 0x81010444, + 0x0001041D, 0x81010445, 0x0001041E, 0x81010446, + 0x0001041F, 0x81010447, 0x00010420, 0x81010448, + 0x00010421, 0x81010449, 0x00010422, 0x8101044A, + 0x00010423, 0x8101044B, 0x00010424, 0x8101044C, + 0x00010425, 0x8101044D, 0x00010426, 0x8101044E, + 0x00010427, 0x8101044F, 0x000104B0, 0x810104D8, + 0x000104B1, 0x810104D9, 0x000104B2, 0x810104DA, + 0x000104B3, 0x810104DB, 0x000104B4, 0x810104DC, + 0x000104B5, 0x810104DD, 0x000104B6, 0x810104DE, + 0x000104B7, 0x810104DF, 0x000104B8, 0x810104E0, + 0x000104B9, 0x810104E1, 0x000104BA, 0x810104E2, + 0x000104BB, 0x810104E3, 0x000104BC, 0x810104E4, + 0x000104BD, 0x810104E5, 0x000104BE, 0x810104E6, + 0x000104BF, 0x810104E7, 0x000104C0, 0x810104E8, + 0x000104C1, 0x810104E9, 0x000104C2, 0x810104EA, + 0x000104C3, 0x810104EB, 0x000104C4, 0x810104EC, + 0x000104C5, 0x810104ED, 0x000104C6, 0x810104EE, + 0x000104C7, 0x810104EF, 0x000104C8, 0x810104F0, + 0x000104C9, 0x810104F1, 0x000104CA, 0x810104F2, + 0x000104CB, 0x810104F3, 0x000104CC, 0x810104F4, + 0x000104CD, 0x810104F5, 0x000104CE, 0x810104F6, + 0x000104CF, 0x810104F7, 0x000104D0, 0x810104F8, + 0x000104D1, 0x810104F9, 0x000104D2, 0x810104FA, + 0x000104D3, 0x810104FB, 0x00010570, 0x81010597, + 0x00010571, 0x81010598, 0x00010572, 0x81010599, + 0x00010573, 0x8101059A, 0x00010574, 0x8101059B, + 0x00010575, 0x8101059C, 0x00010576, 0x8101059D, + 0x00010577, 0x8101059E, 0x00010578, 0x8101059F, + 0x00010579, 0x810105A0, 0x0001057A, 0x810105A1, + 0x0001057C, 0x810105A3, 0x0001057D, 0x810105A4, + 0x0001057E, 0x810105A5, 0x0001057F, 0x810105A6, + 0x00010580, 0x810105A7, 0x00010581, 0x810105A8, + 0x00010582, 0x810105A9, 0x00010583, 0x810105AA, + 0x00010584, 0x810105AB, 0x00010585, 0x810105AC, + 0x00010586, 0x810105AD, 0x00010587, 0x810105AE, + 0x00010588, 0x810105AF, 0x00010589, 0x810105B0, + 0x0001058A, 0x810105B1, 0x0001058C, 0x810105B3, + 0x0001058D, 0x810105B4, 0x0001058E, 0x810105B5, + 0x0001058F, 0x810105B6, 0x00010590, 0x810105B7, + 0x00010591, 0x810105B8, 0x00010592, 0x810105B9, + 0x00010594, 0x810105BB, 0x00010595, 0x810105BC, + 0x00010C80, 0x81010CC0, 0x00010C81, 0x81010CC1, + 0x00010C82, 0x81010CC2, 0x00010C83, 0x81010CC3, + 0x00010C84, 0x81010CC4, 0x00010C85, 0x81010CC5, + 0x00010C86, 0x81010CC6, 0x00010C87, 0x81010CC7, + 0x00010C88, 0x81010CC8, 0x00010C89, 0x81010CC9, + 0x00010C8A, 0x81010CCA, 0x00010C8B, 0x81010CCB, + 0x00010C8C, 0x81010CCC, 0x00010C8D, 0x81010CCD, + 0x00010C8E, 0x81010CCE, 0x00010C8F, 0x81010CCF, + 0x00010C90, 0x81010CD0, 0x00010C91, 0x81010CD1, + 0x00010C92, 0x81010CD2, 0x00010C93, 0x81010CD3, + 0x00010C94, 0x81010CD4, 0x00010C95, 0x81010CD5, + 0x00010C96, 0x81010CD6, 0x00010C97, 0x81010CD7, + 0x00010C98, 0x81010CD8, 0x00010C99, 0x81010CD9, + 0x00010C9A, 0x81010CDA, 0x00010C9B, 0x81010CDB, + 0x00010C9C, 0x81010CDC, 0x00010C9D, 0x81010CDD, + 0x00010C9E, 0x81010CDE, 0x00010C9F, 0x81010CDF, + 0x00010CA0, 0x81010CE0, 0x00010CA1, 0x81010CE1, + 0x00010CA2, 0x81010CE2, 0x00010CA3, 0x81010CE3, + 0x00010CA4, 0x81010CE4, 0x00010CA5, 0x81010CE5, + 0x00010CA6, 0x81010CE6, 0x00010CA7, 0x81010CE7, + 0x00010CA8, 0x81010CE8, 0x00010CA9, 0x81010CE9, + 0x00010CAA, 0x81010CEA, 0x00010CAB, 0x81010CEB, + 0x00010CAC, 0x81010CEC, 0x00010CAD, 0x81010CED, + 0x00010CAE, 0x81010CEE, 0x00010CAF, 0x81010CEF, + 0x00010CB0, 0x81010CF0, 0x00010CB1, 0x81010CF1, + 0x00010CB2, 0x81010CF2, 0x000118A0, 0x810118C0, + 0x000118A1, 0x810118C1, 0x000118A2, 0x810118C2, + 0x000118A3, 0x810118C3, 0x000118A4, 0x810118C4, + 0x000118A5, 0x810118C5, 0x000118A6, 0x810118C6, + 0x000118A7, 0x810118C7, 0x000118A8, 0x810118C8, + 0x000118A9, 0x810118C9, 0x000118AA, 0x810118CA, + 0x000118AB, 0x810118CB, 0x000118AC, 0x810118CC, + 0x000118AD, 0x810118CD, 0x000118AE, 0x810118CE, + 0x000118AF, 0x810118CF, 0x000118B0, 0x810118D0, + 0x000118B1, 0x810118D1, 0x000118B2, 0x810118D2, + 0x000118B3, 0x810118D3, 0x000118B4, 0x810118D4, + 0x000118B5, 0x810118D5, 0x000118B6, 0x810118D6, + 0x000118B7, 0x810118D7, 0x000118B8, 0x810118D8, + 0x000118B9, 0x810118D9, 0x000118BA, 0x810118DA, + 0x000118BB, 0x810118DB, 0x000118BC, 0x810118DC, + 0x000118BD, 0x810118DD, 0x000118BE, 0x810118DE, + 0x000118BF, 0x810118DF, 0x00016E40, 0x81016E60, + 0x00016E41, 0x81016E61, 0x00016E42, 0x81016E62, + 0x00016E43, 0x81016E63, 0x00016E44, 0x81016E64, + 0x00016E45, 0x81016E65, 0x00016E46, 0x81016E66, + 0x00016E47, 0x81016E67, 0x00016E48, 0x81016E68, + 0x00016E49, 0x81016E69, 0x00016E4A, 0x81016E6A, + 0x00016E4B, 0x81016E6B, 0x00016E4C, 0x81016E6C, + 0x00016E4D, 0x81016E6D, 0x00016E4E, 0x81016E6E, + 0x00016E4F, 0x81016E6F, 0x00016E50, 0x81016E70, + 0x00016E51, 0x81016E71, 0x00016E52, 0x81016E72, + 0x00016E53, 0x81016E73, 0x00016E54, 0x81016E74, + 0x00016E55, 0x81016E75, 0x00016E56, 0x81016E76, + 0x00016E57, 0x81016E77, 0x00016E58, 0x81016E78, + 0x00016E59, 0x81016E79, 0x00016E5A, 0x81016E7A, + 0x00016E5B, 0x81016E7B, 0x00016E5C, 0x81016E7C, + 0x00016E5D, 0x81016E7D, 0x00016E5E, 0x81016E7E, + 0x00016E5F, 0x81016E7F, 0x0001E900, 0x8101E922, + 0x0001E901, 0x8101E923, 0x0001E902, 0x8101E924, + 0x0001E903, 0x8101E925, 0x0001E904, 0x8101E926, + 0x0001E905, 0x8101E927, 0x0001E906, 0x8101E928, + 0x0001E907, 0x8101E929, 0x0001E908, 0x8101E92A, + 0x0001E909, 0x8101E92B, 0x0001E90A, 0x8101E92C, + 0x0001E90B, 0x8101E92D, 0x0001E90C, 0x8101E92E, + 0x0001E90D, 0x8101E92F, 0x0001E90E, 0x8101E930, + 0x0001E90F, 0x8101E931, 0x0001E910, 0x8101E932, + 0x0001E911, 0x8101E933, 0x0001E912, 0x8101E934, + 0x0001E913, 0x8101E935, 0x0001E914, 0x8101E936, + 0x0001E915, 0x8101E937, 0x0001E916, 0x8101E938, + 0x0001E917, 0x8101E939, 0x0001E918, 0x8101E93A, + 0x0001E919, 0x8101E93B, 0x0001E91A, 0x8101E93C, + 0x0001E91B, 0x8101E93D, 0x0001E91C, 0x8101E93E, + 0x0001E91D, 0x8101E93F, 0x0001E91E, 0x8101E940, + 0x0001E91F, 0x8101E941, 0x0001E920, 0x8101E942, + 0x0001E921, 0x8101E943, +}; + +static uint32_t const __CFUniCharToLowercaseMappingTableCount = 1433; + +static uint32_t const __CFUniCharToLowercaseMappingExtraTable[] = { + 0x00000069, 0x00000307, +}; + +static uint32_t const __CFUniCharToLowercaseMappingExtraTableCount = 1; + +static uint32_t const __CFUniCharCaseFoldMappingTable[] = { + 0x000000B5, 0x010003BC, 0x000000DF, 0x02000000, + 0x00000149, 0x02000002, 0x0000017F, 0x01000073, + 0x000001F0, 0x02000004, 0x00000345, 0x010003B9, + 0x00000390, 0x03000006, 0x000003B0, 0x03000009, + 0x000003C2, 0x010003C3, 0x000003D0, 0x010003B2, + 0x000003D1, 0x010003B8, 0x000003D5, 0x010003C6, + 0x000003D6, 0x010003C0, 0x000003F0, 0x010003BA, + 0x000003F1, 0x010003C1, 0x000003F5, 0x010003B5, + 0x00000587, 0x0200000C, 0x00001E96, 0x0200000E, + 0x00001E97, 0x02000010, 0x00001E98, 0x02000012, + 0x00001E99, 0x02000014, 0x00001E9A, 0x02000016, + 0x00001E9B, 0x01001E61, 0x00001E9E, 0x02000018, + 0x00001F50, 0x0200001A, 0x00001F52, 0x0300001C, + 0x00001F54, 0x0300001F, 0x00001F56, 0x03000022, + 0x00001F80, 0x02000025, 0x00001F81, 0x02000027, + 0x00001F82, 0x02000029, 0x00001F83, 0x0200002B, + 0x00001F84, 0x0200002D, 0x00001F85, 0x0200002F, + 0x00001F86, 0x02000031, 0x00001F87, 0x02000033, + 0x00001F88, 0x02000035, 0x00001F89, 0x02000037, + 0x00001F8A, 0x02000039, 0x00001F8B, 0x0200003B, + 0x00001F8C, 0x0200003D, 0x00001F8D, 0x0200003F, + 0x00001F8E, 0x02000041, 0x00001F8F, 0x02000043, + 0x00001F90, 0x02000045, 0x00001F91, 0x02000047, + 0x00001F92, 0x02000049, 0x00001F93, 0x0200004B, + 0x00001F94, 0x0200004D, 0x00001F95, 0x0200004F, + 0x00001F96, 0x02000051, 0x00001F97, 0x02000053, + 0x00001F98, 0x02000055, 0x00001F99, 0x02000057, + 0x00001F9A, 0x02000059, 0x00001F9B, 0x0200005B, + 0x00001F9C, 0x0200005D, 0x00001F9D, 0x0200005F, + 0x00001F9E, 0x02000061, 0x00001F9F, 0x02000063, + 0x00001FA0, 0x02000065, 0x00001FA1, 0x02000067, + 0x00001FA2, 0x02000069, 0x00001FA3, 0x0200006B, + 0x00001FA4, 0x0200006D, 0x00001FA5, 0x0200006F, + 0x00001FA6, 0x02000071, 0x00001FA7, 0x02000073, + 0x00001FA8, 0x02000075, 0x00001FA9, 0x02000077, + 0x00001FAA, 0x02000079, 0x00001FAB, 0x0200007B, + 0x00001FAC, 0x0200007D, 0x00001FAD, 0x0200007F, + 0x00001FAE, 0x02000081, 0x00001FAF, 0x02000083, + 0x00001FB2, 0x02000085, 0x00001FB3, 0x02000087, + 0x00001FB4, 0x02000089, 0x00001FB6, 0x0200008B, + 0x00001FB7, 0x0300008D, 0x00001FBC, 0x02000090, + 0x00001FBE, 0x010003B9, 0x00001FC2, 0x02000092, + 0x00001FC3, 0x02000094, 0x00001FC4, 0x02000096, + 0x00001FC6, 0x02000098, 0x00001FC7, 0x0300009A, + 0x00001FCC, 0x0200009D, 0x00001FD2, 0x0300009F, + 0x00001FD3, 0x030000A2, 0x00001FD6, 0x020000A5, + 0x00001FD7, 0x030000A7, 0x00001FE2, 0x030000AA, + 0x00001FE3, 0x030000AD, 0x00001FE4, 0x020000B0, + 0x00001FE6, 0x020000B2, 0x00001FE7, 0x030000B4, + 0x00001FF2, 0x020000B7, 0x00001FF3, 0x020000B9, + 0x00001FF4, 0x020000BB, 0x00001FF6, 0x020000BD, + 0x00001FF7, 0x030000BF, 0x00001FFC, 0x020000C2, + 0x0000FB00, 0x020000C4, 0x0000FB01, 0x020000C6, + 0x0000FB02, 0x020000C8, 0x0000FB03, 0x030000CA, + 0x0000FB04, 0x030000CD, 0x0000FB05, 0x020000D0, + 0x0000FB06, 0x020000D2, 0x0000FB13, 0x020000D4, + 0x0000FB14, 0x020000D6, 0x0000FB15, 0x020000D8, + 0x0000FB16, 0x020000DA, 0x0000FB17, 0x020000DC, +}; + +static uint32_t const __CFUniCharCaseFoldMappingTableCount = 116; + +static uint32_t const __CFUniCharCaseFoldMappingExtraTable[] = { + 0x00000073, 0x00000073, 0x000002BC, 0x0000006E, + 0x0000006A, 0x0000030C, 0x000003B9, 0x00000308, + 0x00000301, 0x000003C5, 0x00000308, 0x00000301, + 0x00000565, 0x00000582, 0x00000068, 0x00000331, + 0x00000074, 0x00000308, 0x00000077, 0x0000030A, + 0x00000079, 0x0000030A, 0x00000061, 0x000002BE, + 0x00000073, 0x00000073, 0x000003C5, 0x00000313, + 0x000003C5, 0x00000313, 0x00000300, 0x000003C5, + 0x00000313, 0x00000301, 0x000003C5, 0x00000313, + 0x00000342, 0x00001F00, 0x000003B9, 0x00001F01, + 0x000003B9, 0x00001F02, 0x000003B9, 0x00001F03, + 0x000003B9, 0x00001F04, 0x000003B9, 0x00001F05, + 0x000003B9, 0x00001F06, 0x000003B9, 0x00001F07, + 0x000003B9, 0x00001F00, 0x000003B9, 0x00001F01, + 0x000003B9, 0x00001F02, 0x000003B9, 0x00001F03, + 0x000003B9, 0x00001F04, 0x000003B9, 0x00001F05, + 0x000003B9, 0x00001F06, 0x000003B9, 0x00001F07, + 0x000003B9, 0x00001F20, 0x000003B9, 0x00001F21, + 0x000003B9, 0x00001F22, 0x000003B9, 0x00001F23, + 0x000003B9, 0x00001F24, 0x000003B9, 0x00001F25, + 0x000003B9, 0x00001F26, 0x000003B9, 0x00001F27, + 0x000003B9, 0x00001F20, 0x000003B9, 0x00001F21, + 0x000003B9, 0x00001F22, 0x000003B9, 0x00001F23, + 0x000003B9, 0x00001F24, 0x000003B9, 0x00001F25, + 0x000003B9, 0x00001F26, 0x000003B9, 0x00001F27, + 0x000003B9, 0x00001F60, 0x000003B9, 0x00001F61, + 0x000003B9, 0x00001F62, 0x000003B9, 0x00001F63, + 0x000003B9, 0x00001F64, 0x000003B9, 0x00001F65, + 0x000003B9, 0x00001F66, 0x000003B9, 0x00001F67, + 0x000003B9, 0x00001F60, 0x000003B9, 0x00001F61, + 0x000003B9, 0x00001F62, 0x000003B9, 0x00001F63, + 0x000003B9, 0x00001F64, 0x000003B9, 0x00001F65, + 0x000003B9, 0x00001F66, 0x000003B9, 0x00001F67, + 0x000003B9, 0x00001F70, 0x000003B9, 0x000003B1, + 0x000003B9, 0x000003AC, 0x000003B9, 0x000003B1, + 0x00000342, 0x000003B1, 0x00000342, 0x000003B9, + 0x000003B1, 0x000003B9, 0x00001F74, 0x000003B9, + 0x000003B7, 0x000003B9, 0x000003AE, 0x000003B9, + 0x000003B7, 0x00000342, 0x000003B7, 0x00000342, + 0x000003B9, 0x000003B7, 0x000003B9, 0x000003B9, + 0x00000308, 0x00000300, 0x000003B9, 0x00000308, + 0x00000301, 0x000003B9, 0x00000342, 0x000003B9, + 0x00000308, 0x00000342, 0x000003C5, 0x00000308, + 0x00000300, 0x000003C5, 0x00000308, 0x00000301, + 0x000003C1, 0x00000313, 0x000003C5, 0x00000342, + 0x000003C5, 0x00000308, 0x00000342, 0x00001F7C, + 0x000003B9, 0x000003C9, 0x000003B9, 0x000003CE, + 0x000003B9, 0x000003C9, 0x00000342, 0x000003C9, + 0x00000342, 0x000003B9, 0x000003C9, 0x000003B9, + 0x00000066, 0x00000066, 0x00000066, 0x00000069, + 0x00000066, 0x0000006C, 0x00000066, 0x00000066, + 0x00000069, 0x00000066, 0x00000066, 0x0000006C, + 0x00000073, 0x00000074, 0x00000073, 0x00000074, + 0x00000574, 0x00000576, 0x00000574, 0x00000565, + 0x00000574, 0x0000056B, 0x0000057E, 0x00000576, + 0x00000574, 0x0000056D, +}; + +static uint32_t const __CFUniCharCaseFoldMappingExtraTableCount = 111; + +static uint32_t const __CFUniCharCaseMappingTableCount = 4; +static uint32_t const * const __CFUniCharCaseMappingTable[] = { + __CFUniCharToLowercaseMappingTable, + __CFUniCharToUppercaseMappingTable, + __CFUniCharToTitlecaseMappingTable, + __CFUniCharCaseFoldMappingTable, +}; + +static uint32_t __CFUniCharCaseMappingTableCounts[] = { + __CFUniCharToLowercaseMappingTableCount, + __CFUniCharToUppercaseMappingTableCount, + __CFUniCharToTitlecaseMappingTableCount, + __CFUniCharCaseFoldMappingTableCount, +}; + +static uint32_t const __CFUniCharCaseMappingExtraTableCount = 4; +static uint32_t const * const __CFUniCharCaseMappingExtraTable[] = { + __CFUniCharToLowercaseMappingExtraTable, + __CFUniCharToUppercaseMappingExtraTable, + __CFUniCharToTitlecaseMappingExtraTable, + __CFUniCharCaseFoldMappingExtraTable, +}; + +static uint32_t __CFUniCharCaseMappingExtraTableCounts[] = { + __CFUniCharToLowercaseMappingExtraTableCount, + __CFUniCharToUppercaseMappingExtraTableCount, + __CFUniCharToTitlecaseMappingExtraTableCount, + __CFUniCharCaseFoldMappingExtraTableCount, +}; + +#endif // __LITTLE_ENDIAN__ + diff --git a/Sources/CoreFoundation/internalInclude/CFUnicodeData-B.inc.h b/Sources/CoreFoundation/internalInclude/CFUnicodeData-B.inc.h new file mode 100644 index 0000000000..34a86f344b --- /dev/null +++ b/Sources/CoreFoundation/internalInclude/CFUnicodeData-B.inc.h @@ -0,0 +1,6233 @@ +/* + CFUnicodeData-B.inc.h + Created: 2023-04-24 17:51:27 +0000 + Copyright (c) 2002 Apple Computer Inc. All rights reserved. + This file is generated. Don't touch this file directly. +*/ + +#if __BIG_ENDIAN__ + +static uint32_t const __CFUniCharLowercaseMappingTable[] = { + 0xC82C0000, 0x41000000, 0x61000001, 0x42000000, + 0x62000001, 0x43000000, 0x63000001, 0x44000000, + 0x64000001, 0x45000000, 0x65000001, 0x46000000, + 0x66000001, 0x47000000, 0x67000001, 0x48000000, + 0x68000001, 0x49000000, 0x69000001, 0x4A000000, + 0x6A000001, 0x4B000000, 0x6B000001, 0x4C000000, + 0x6C000001, 0x4D000000, 0x6D000001, 0x4E000000, + 0x6E000001, 0x4F000000, 0x6F000001, 0x50000000, + 0x70000001, 0x51000000, 0x71000001, 0x52000000, + 0x72000001, 0x53000000, 0x73000001, 0x54000000, + 0x74000001, 0x55000000, 0x75000001, 0x56000000, + 0x76000001, 0x57000000, 0x77000001, 0x58000000, + 0x78000001, 0x59000000, 0x79000001, 0x5A000000, + 0x7A000001, 0xC0000000, 0xE0000001, 0xC1000000, + 0xE1000001, 0xC2000000, 0xE2000001, 0xC3000000, + 0xE3000001, 0xC4000000, 0xE4000001, 0xC5000000, + 0xE5000001, 0xC6000000, 0xE6000001, 0xC7000000, + 0xE7000001, 0xC8000000, 0xE8000001, 0xC9000000, + 0xE9000001, 0xCA000000, 0xEA000001, 0xCB000000, + 0xEB000001, 0xCC000000, 0xEC000001, 0xCD000000, + 0xED000001, 0xCE000000, 0xEE000001, 0xCF000000, + 0xEF000001, 0xD0000000, 0xF0000001, 0xD1000000, + 0xF1000001, 0xD2000000, 0xF2000001, 0xD3000000, + 0xF3000001, 0xD4000000, 0xF4000001, 0xD5000000, + 0xF5000001, 0xD6000000, 0xF6000001, 0xD8000000, + 0xF8000001, 0xD9000000, 0xF9000001, 0xDA000000, + 0xFA000001, 0xDB000000, 0xFB000001, 0xDC000000, + 0xFC000001, 0xDD000000, 0xFD000001, 0xDE000000, + 0xFE000001, 0x00010000, 0x01010001, 0x02010000, + 0x03010001, 0x04010000, 0x05010001, 0x06010000, + 0x07010001, 0x08010000, 0x09010001, 0x0A010000, + 0x0B010001, 0x0C010000, 0x0D010001, 0x0E010000, + 0x0F010001, 0x10010000, 0x11010001, 0x12010000, + 0x13010001, 0x14010000, 0x15010001, 0x16010000, + 0x17010001, 0x18010000, 0x19010001, 0x1A010000, + 0x1B010001, 0x1C010000, 0x1D010001, 0x1E010000, + 0x1F010001, 0x20010000, 0x21010001, 0x22010000, + 0x23010001, 0x24010000, 0x25010001, 0x26010000, + 0x27010001, 0x28010000, 0x29010001, 0x2A010000, + 0x2B010001, 0x2C010000, 0x2D010001, 0x2E010000, + 0x2F010001, 0x30010000, 0x00000002, 0x32010000, + 0x33010001, 0x34010000, 0x35010001, 0x36010000, + 0x37010001, 0x39010000, 0x3A010001, 0x3B010000, + 0x3C010001, 0x3D010000, 0x3E010001, 0x3F010000, + 0x40010001, 0x41010000, 0x42010001, 0x43010000, + 0x44010001, 0x45010000, 0x46010001, 0x47010000, + 0x48010001, 0x4A010000, 0x4B010001, 0x4C010000, + 0x4D010001, 0x4E010000, 0x4F010001, 0x50010000, + 0x51010001, 0x52010000, 0x53010001, 0x54010000, + 0x55010001, 0x56010000, 0x57010001, 0x58010000, + 0x59010001, 0x5A010000, 0x5B010001, 0x5C010000, + 0x5D010001, 0x5E010000, 0x5F010001, 0x60010000, + 0x61010001, 0x62010000, 0x63010001, 0x64010000, + 0x65010001, 0x66010000, 0x67010001, 0x68010000, + 0x69010001, 0x6A010000, 0x6B010001, 0x6C010000, + 0x6D010001, 0x6E010000, 0x6F010001, 0x70010000, + 0x71010001, 0x72010000, 0x73010001, 0x74010000, + 0x75010001, 0x76010000, 0x77010001, 0x78010000, + 0xFF000001, 0x79010000, 0x7A010001, 0x7B010000, + 0x7C010001, 0x7D010000, 0x7E010001, 0x81010000, + 0x53020001, 0x82010000, 0x83010001, 0x84010000, + 0x85010001, 0x86010000, 0x54020001, 0x87010000, + 0x88010001, 0x89010000, 0x56020001, 0x8A010000, + 0x57020001, 0x8B010000, 0x8C010001, 0x8E010000, + 0xDD010001, 0x8F010000, 0x59020001, 0x90010000, + 0x5B020001, 0x91010000, 0x92010001, 0x93010000, + 0x60020001, 0x94010000, 0x63020001, 0x96010000, + 0x69020001, 0x97010000, 0x68020001, 0x98010000, + 0x99010001, 0x9C010000, 0x6F020001, 0x9D010000, + 0x72020001, 0x9F010000, 0x75020001, 0xA0010000, + 0xA1010001, 0xA2010000, 0xA3010001, 0xA4010000, + 0xA5010001, 0xA6010000, 0x80020001, 0xA7010000, + 0xA8010001, 0xA9010000, 0x83020001, 0xAC010000, + 0xAD010001, 0xAE010000, 0x88020001, 0xAF010000, + 0xB0010001, 0xB1010000, 0x8A020001, 0xB2010000, + 0x8B020001, 0xB3010000, 0xB4010001, 0xB5010000, + 0xB6010001, 0xB7010000, 0x92020001, 0xB8010000, + 0xB9010001, 0xBC010000, 0xBD010001, 0xC4010000, + 0xC6010001, 0xC5010000, 0xC6010001, 0xC7010000, + 0xC9010001, 0xC8010000, 0xC9010001, 0xCA010000, + 0xCC010001, 0xCB010000, 0xCC010001, 0xCD010000, + 0xCE010001, 0xCF010000, 0xD0010001, 0xD1010000, + 0xD2010001, 0xD3010000, 0xD4010001, 0xD5010000, + 0xD6010001, 0xD7010000, 0xD8010001, 0xD9010000, + 0xDA010001, 0xDB010000, 0xDC010001, 0xDE010000, + 0xDF010001, 0xE0010000, 0xE1010001, 0xE2010000, + 0xE3010001, 0xE4010000, 0xE5010001, 0xE6010000, + 0xE7010001, 0xE8010000, 0xE9010001, 0xEA010000, + 0xEB010001, 0xEC010000, 0xED010001, 0xEE010000, + 0xEF010001, 0xF1010000, 0xF3010001, 0xF2010000, + 0xF3010001, 0xF4010000, 0xF5010001, 0xF6010000, + 0x95010001, 0xF7010000, 0xBF010001, 0xF8010000, + 0xF9010001, 0xFA010000, 0xFB010001, 0xFC010000, + 0xFD010001, 0xFE010000, 0xFF010001, 0x00020000, + 0x01020001, 0x02020000, 0x03020001, 0x04020000, + 0x05020001, 0x06020000, 0x07020001, 0x08020000, + 0x09020001, 0x0A020000, 0x0B020001, 0x0C020000, + 0x0D020001, 0x0E020000, 0x0F020001, 0x10020000, + 0x11020001, 0x12020000, 0x13020001, 0x14020000, + 0x15020001, 0x16020000, 0x17020001, 0x18020000, + 0x19020001, 0x1A020000, 0x1B020001, 0x1C020000, + 0x1D020001, 0x1E020000, 0x1F020001, 0x20020000, + 0x9E010001, 0x22020000, 0x23020001, 0x24020000, + 0x25020001, 0x26020000, 0x27020001, 0x28020000, + 0x29020001, 0x2A020000, 0x2B020001, 0x2C020000, + 0x2D020001, 0x2E020000, 0x2F020001, 0x30020000, + 0x31020001, 0x32020000, 0x33020001, 0x3A020000, + 0x652C0001, 0x3B020000, 0x3C020001, 0x3D020000, + 0x9A010001, 0x3E020000, 0x662C0001, 0x41020000, + 0x42020001, 0x43020000, 0x80010001, 0x44020000, + 0x89020001, 0x45020000, 0x8C020001, 0x46020000, + 0x47020001, 0x48020000, 0x49020001, 0x4A020000, + 0x4B020001, 0x4C020000, 0x4D020001, 0x4E020000, + 0x4F020001, 0x70030000, 0x71030001, 0x72030000, + 0x73030001, 0x76030000, 0x77030001, 0x7F030000, + 0xF3030001, 0x86030000, 0xAC030001, 0x88030000, + 0xAD030001, 0x89030000, 0xAE030001, 0x8A030000, + 0xAF030001, 0x8C030000, 0xCC030001, 0x8E030000, + 0xCD030001, 0x8F030000, 0xCE030001, 0x91030000, + 0xB1030001, 0x92030000, 0xB2030001, 0x93030000, + 0xB3030001, 0x94030000, 0xB4030001, 0x95030000, + 0xB5030001, 0x96030000, 0xB6030001, 0x97030000, + 0xB7030001, 0x98030000, 0xB8030001, 0x99030000, + 0xB9030001, 0x9A030000, 0xBA030001, 0x9B030000, + 0xBB030001, 0x9C030000, 0xBC030001, 0x9D030000, + 0xBD030001, 0x9E030000, 0xBE030001, 0x9F030000, + 0xBF030001, 0xA0030000, 0xC0030001, 0xA1030000, + 0xC1030001, 0xA3030000, 0xC3030001, 0xA4030000, + 0xC4030001, 0xA5030000, 0xC5030001, 0xA6030000, + 0xC6030001, 0xA7030000, 0xC7030001, 0xA8030000, + 0xC8030001, 0xA9030000, 0xC9030001, 0xAA030000, + 0xCA030001, 0xAB030000, 0xCB030001, 0xCF030000, + 0xD7030001, 0xD8030000, 0xD9030001, 0xDA030000, + 0xDB030001, 0xDC030000, 0xDD030001, 0xDE030000, + 0xDF030001, 0xE0030000, 0xE1030001, 0xE2030000, + 0xE3030001, 0xE4030000, 0xE5030001, 0xE6030000, + 0xE7030001, 0xE8030000, 0xE9030001, 0xEA030000, + 0xEB030001, 0xEC030000, 0xED030001, 0xEE030000, + 0xEF030001, 0xF4030000, 0xB8030001, 0xF7030000, + 0xF8030001, 0xF9030000, 0xF2030001, 0xFA030000, + 0xFB030001, 0xFD030000, 0x7B030001, 0xFE030000, + 0x7C030001, 0xFF030000, 0x7D030001, 0x00040000, + 0x50040001, 0x01040000, 0x51040001, 0x02040000, + 0x52040001, 0x03040000, 0x53040001, 0x04040000, + 0x54040001, 0x05040000, 0x55040001, 0x06040000, + 0x56040001, 0x07040000, 0x57040001, 0x08040000, + 0x58040001, 0x09040000, 0x59040001, 0x0A040000, + 0x5A040001, 0x0B040000, 0x5B040001, 0x0C040000, + 0x5C040001, 0x0D040000, 0x5D040001, 0x0E040000, + 0x5E040001, 0x0F040000, 0x5F040001, 0x10040000, + 0x30040001, 0x11040000, 0x31040001, 0x12040000, + 0x32040001, 0x13040000, 0x33040001, 0x14040000, + 0x34040001, 0x15040000, 0x35040001, 0x16040000, + 0x36040001, 0x17040000, 0x37040001, 0x18040000, + 0x38040001, 0x19040000, 0x39040001, 0x1A040000, + 0x3A040001, 0x1B040000, 0x3B040001, 0x1C040000, + 0x3C040001, 0x1D040000, 0x3D040001, 0x1E040000, + 0x3E040001, 0x1F040000, 0x3F040001, 0x20040000, + 0x40040001, 0x21040000, 0x41040001, 0x22040000, + 0x42040001, 0x23040000, 0x43040001, 0x24040000, + 0x44040001, 0x25040000, 0x45040001, 0x26040000, + 0x46040001, 0x27040000, 0x47040001, 0x28040000, + 0x48040001, 0x29040000, 0x49040001, 0x2A040000, + 0x4A040001, 0x2B040000, 0x4B040001, 0x2C040000, + 0x4C040001, 0x2D040000, 0x4D040001, 0x2E040000, + 0x4E040001, 0x2F040000, 0x4F040001, 0x60040000, + 0x61040001, 0x62040000, 0x63040001, 0x64040000, + 0x65040001, 0x66040000, 0x67040001, 0x68040000, + 0x69040001, 0x6A040000, 0x6B040001, 0x6C040000, + 0x6D040001, 0x6E040000, 0x6F040001, 0x70040000, + 0x71040001, 0x72040000, 0x73040001, 0x74040000, + 0x75040001, 0x76040000, 0x77040001, 0x78040000, + 0x79040001, 0x7A040000, 0x7B040001, 0x7C040000, + 0x7D040001, 0x7E040000, 0x7F040001, 0x80040000, + 0x81040001, 0x8A040000, 0x8B040001, 0x8C040000, + 0x8D040001, 0x8E040000, 0x8F040001, 0x90040000, + 0x91040001, 0x92040000, 0x93040001, 0x94040000, + 0x95040001, 0x96040000, 0x97040001, 0x98040000, + 0x99040001, 0x9A040000, 0x9B040001, 0x9C040000, + 0x9D040001, 0x9E040000, 0x9F040001, 0xA0040000, + 0xA1040001, 0xA2040000, 0xA3040001, 0xA4040000, + 0xA5040001, 0xA6040000, 0xA7040001, 0xA8040000, + 0xA9040001, 0xAA040000, 0xAB040001, 0xAC040000, + 0xAD040001, 0xAE040000, 0xAF040001, 0xB0040000, + 0xB1040001, 0xB2040000, 0xB3040001, 0xB4040000, + 0xB5040001, 0xB6040000, 0xB7040001, 0xB8040000, + 0xB9040001, 0xBA040000, 0xBB040001, 0xBC040000, + 0xBD040001, 0xBE040000, 0xBF040001, 0xC0040000, + 0xCF040001, 0xC1040000, 0xC2040001, 0xC3040000, + 0xC4040001, 0xC5040000, 0xC6040001, 0xC7040000, + 0xC8040001, 0xC9040000, 0xCA040001, 0xCB040000, + 0xCC040001, 0xCD040000, 0xCE040001, 0xD0040000, + 0xD1040001, 0xD2040000, 0xD3040001, 0xD4040000, + 0xD5040001, 0xD6040000, 0xD7040001, 0xD8040000, + 0xD9040001, 0xDA040000, 0xDB040001, 0xDC040000, + 0xDD040001, 0xDE040000, 0xDF040001, 0xE0040000, + 0xE1040001, 0xE2040000, 0xE3040001, 0xE4040000, + 0xE5040001, 0xE6040000, 0xE7040001, 0xE8040000, + 0xE9040001, 0xEA040000, 0xEB040001, 0xEC040000, + 0xED040001, 0xEE040000, 0xEF040001, 0xF0040000, + 0xF1040001, 0xF2040000, 0xF3040001, 0xF4040000, + 0xF5040001, 0xF6040000, 0xF7040001, 0xF8040000, + 0xF9040001, 0xFA040000, 0xFB040001, 0xFC040000, + 0xFD040001, 0xFE040000, 0xFF040001, 0x00050000, + 0x01050001, 0x02050000, 0x03050001, 0x04050000, + 0x05050001, 0x06050000, 0x07050001, 0x08050000, + 0x09050001, 0x0A050000, 0x0B050001, 0x0C050000, + 0x0D050001, 0x0E050000, 0x0F050001, 0x10050000, + 0x11050001, 0x12050000, 0x13050001, 0x14050000, + 0x15050001, 0x16050000, 0x17050001, 0x18050000, + 0x19050001, 0x1A050000, 0x1B050001, 0x1C050000, + 0x1D050001, 0x1E050000, 0x1F050001, 0x20050000, + 0x21050001, 0x22050000, 0x23050001, 0x24050000, + 0x25050001, 0x26050000, 0x27050001, 0x28050000, + 0x29050001, 0x2A050000, 0x2B050001, 0x2C050000, + 0x2D050001, 0x2E050000, 0x2F050001, 0x31050000, + 0x61050001, 0x32050000, 0x62050001, 0x33050000, + 0x63050001, 0x34050000, 0x64050001, 0x35050000, + 0x65050001, 0x36050000, 0x66050001, 0x37050000, + 0x67050001, 0x38050000, 0x68050001, 0x39050000, + 0x69050001, 0x3A050000, 0x6A050001, 0x3B050000, + 0x6B050001, 0x3C050000, 0x6C050001, 0x3D050000, + 0x6D050001, 0x3E050000, 0x6E050001, 0x3F050000, + 0x6F050001, 0x40050000, 0x70050001, 0x41050000, + 0x71050001, 0x42050000, 0x72050001, 0x43050000, + 0x73050001, 0x44050000, 0x74050001, 0x45050000, + 0x75050001, 0x46050000, 0x76050001, 0x47050000, + 0x77050001, 0x48050000, 0x78050001, 0x49050000, + 0x79050001, 0x4A050000, 0x7A050001, 0x4B050000, + 0x7B050001, 0x4C050000, 0x7C050001, 0x4D050000, + 0x7D050001, 0x4E050000, 0x7E050001, 0x4F050000, + 0x7F050001, 0x50050000, 0x80050001, 0x51050000, + 0x81050001, 0x52050000, 0x82050001, 0x53050000, + 0x83050001, 0x54050000, 0x84050001, 0x55050000, + 0x85050001, 0x56050000, 0x86050001, 0xA0100000, + 0x002D0001, 0xA1100000, 0x012D0001, 0xA2100000, + 0x022D0001, 0xA3100000, 0x032D0001, 0xA4100000, + 0x042D0001, 0xA5100000, 0x052D0001, 0xA6100000, + 0x062D0001, 0xA7100000, 0x072D0001, 0xA8100000, + 0x082D0001, 0xA9100000, 0x092D0001, 0xAA100000, + 0x0A2D0001, 0xAB100000, 0x0B2D0001, 0xAC100000, + 0x0C2D0001, 0xAD100000, 0x0D2D0001, 0xAE100000, + 0x0E2D0001, 0xAF100000, 0x0F2D0001, 0xB0100000, + 0x102D0001, 0xB1100000, 0x112D0001, 0xB2100000, + 0x122D0001, 0xB3100000, 0x132D0001, 0xB4100000, + 0x142D0001, 0xB5100000, 0x152D0001, 0xB6100000, + 0x162D0001, 0xB7100000, 0x172D0001, 0xB8100000, + 0x182D0001, 0xB9100000, 0x192D0001, 0xBA100000, + 0x1A2D0001, 0xBB100000, 0x1B2D0001, 0xBC100000, + 0x1C2D0001, 0xBD100000, 0x1D2D0001, 0xBE100000, + 0x1E2D0001, 0xBF100000, 0x1F2D0001, 0xC0100000, + 0x202D0001, 0xC1100000, 0x212D0001, 0xC2100000, + 0x222D0001, 0xC3100000, 0x232D0001, 0xC4100000, + 0x242D0001, 0xC5100000, 0x252D0001, 0xC7100000, + 0x272D0001, 0xCD100000, 0x2D2D0001, 0xA0130000, + 0x70AB0001, 0xA1130000, 0x71AB0001, 0xA2130000, + 0x72AB0001, 0xA3130000, 0x73AB0001, 0xA4130000, + 0x74AB0001, 0xA5130000, 0x75AB0001, 0xA6130000, + 0x76AB0001, 0xA7130000, 0x77AB0001, 0xA8130000, + 0x78AB0001, 0xA9130000, 0x79AB0001, 0xAA130000, + 0x7AAB0001, 0xAB130000, 0x7BAB0001, 0xAC130000, + 0x7CAB0001, 0xAD130000, 0x7DAB0001, 0xAE130000, + 0x7EAB0001, 0xAF130000, 0x7FAB0001, 0xB0130000, + 0x80AB0001, 0xB1130000, 0x81AB0001, 0xB2130000, + 0x82AB0001, 0xB3130000, 0x83AB0001, 0xB4130000, + 0x84AB0001, 0xB5130000, 0x85AB0001, 0xB6130000, + 0x86AB0001, 0xB7130000, 0x87AB0001, 0xB8130000, + 0x88AB0001, 0xB9130000, 0x89AB0001, 0xBA130000, + 0x8AAB0001, 0xBB130000, 0x8BAB0001, 0xBC130000, + 0x8CAB0001, 0xBD130000, 0x8DAB0001, 0xBE130000, + 0x8EAB0001, 0xBF130000, 0x8FAB0001, 0xC0130000, + 0x90AB0001, 0xC1130000, 0x91AB0001, 0xC2130000, + 0x92AB0001, 0xC3130000, 0x93AB0001, 0xC4130000, + 0x94AB0001, 0xC5130000, 0x95AB0001, 0xC6130000, + 0x96AB0001, 0xC7130000, 0x97AB0001, 0xC8130000, + 0x98AB0001, 0xC9130000, 0x99AB0001, 0xCA130000, + 0x9AAB0001, 0xCB130000, 0x9BAB0001, 0xCC130000, + 0x9CAB0001, 0xCD130000, 0x9DAB0001, 0xCE130000, + 0x9EAB0001, 0xCF130000, 0x9FAB0001, 0xD0130000, + 0xA0AB0001, 0xD1130000, 0xA1AB0001, 0xD2130000, + 0xA2AB0001, 0xD3130000, 0xA3AB0001, 0xD4130000, + 0xA4AB0001, 0xD5130000, 0xA5AB0001, 0xD6130000, + 0xA6AB0001, 0xD7130000, 0xA7AB0001, 0xD8130000, + 0xA8AB0001, 0xD9130000, 0xA9AB0001, 0xDA130000, + 0xAAAB0001, 0xDB130000, 0xABAB0001, 0xDC130000, + 0xACAB0001, 0xDD130000, 0xADAB0001, 0xDE130000, + 0xAEAB0001, 0xDF130000, 0xAFAB0001, 0xE0130000, + 0xB0AB0001, 0xE1130000, 0xB1AB0001, 0xE2130000, + 0xB2AB0001, 0xE3130000, 0xB3AB0001, 0xE4130000, + 0xB4AB0001, 0xE5130000, 0xB5AB0001, 0xE6130000, + 0xB6AB0001, 0xE7130000, 0xB7AB0001, 0xE8130000, + 0xB8AB0001, 0xE9130000, 0xB9AB0001, 0xEA130000, + 0xBAAB0001, 0xEB130000, 0xBBAB0001, 0xEC130000, + 0xBCAB0001, 0xED130000, 0xBDAB0001, 0xEE130000, + 0xBEAB0001, 0xEF130000, 0xBFAB0001, 0xF0130000, + 0xF8130001, 0xF1130000, 0xF9130001, 0xF2130000, + 0xFA130001, 0xF3130000, 0xFB130001, 0xF4130000, + 0xFC130001, 0xF5130000, 0xFD130001, 0x901C0000, + 0xD0100001, 0x911C0000, 0xD1100001, 0x921C0000, + 0xD2100001, 0x931C0000, 0xD3100001, 0x941C0000, + 0xD4100001, 0x951C0000, 0xD5100001, 0x961C0000, + 0xD6100001, 0x971C0000, 0xD7100001, 0x981C0000, + 0xD8100001, 0x991C0000, 0xD9100001, 0x9A1C0000, + 0xDA100001, 0x9B1C0000, 0xDB100001, 0x9C1C0000, + 0xDC100001, 0x9D1C0000, 0xDD100001, 0x9E1C0000, + 0xDE100001, 0x9F1C0000, 0xDF100001, 0xA01C0000, + 0xE0100001, 0xA11C0000, 0xE1100001, 0xA21C0000, + 0xE2100001, 0xA31C0000, 0xE3100001, 0xA41C0000, + 0xE4100001, 0xA51C0000, 0xE5100001, 0xA61C0000, + 0xE6100001, 0xA71C0000, 0xE7100001, 0xA81C0000, + 0xE8100001, 0xA91C0000, 0xE9100001, 0xAA1C0000, + 0xEA100001, 0xAB1C0000, 0xEB100001, 0xAC1C0000, + 0xEC100001, 0xAD1C0000, 0xED100001, 0xAE1C0000, + 0xEE100001, 0xAF1C0000, 0xEF100001, 0xB01C0000, + 0xF0100001, 0xB11C0000, 0xF1100001, 0xB21C0000, + 0xF2100001, 0xB31C0000, 0xF3100001, 0xB41C0000, + 0xF4100001, 0xB51C0000, 0xF5100001, 0xB61C0000, + 0xF6100001, 0xB71C0000, 0xF7100001, 0xB81C0000, + 0xF8100001, 0xB91C0000, 0xF9100001, 0xBA1C0000, + 0xFA100001, 0xBD1C0000, 0xFD100001, 0xBE1C0000, + 0xFE100001, 0xBF1C0000, 0xFF100001, 0x001E0000, + 0x011E0001, 0x021E0000, 0x031E0001, 0x041E0000, + 0x051E0001, 0x061E0000, 0x071E0001, 0x081E0000, + 0x091E0001, 0x0A1E0000, 0x0B1E0001, 0x0C1E0000, + 0x0D1E0001, 0x0E1E0000, 0x0F1E0001, 0x101E0000, + 0x111E0001, 0x121E0000, 0x131E0001, 0x141E0000, + 0x151E0001, 0x161E0000, 0x171E0001, 0x181E0000, + 0x191E0001, 0x1A1E0000, 0x1B1E0001, 0x1C1E0000, + 0x1D1E0001, 0x1E1E0000, 0x1F1E0001, 0x201E0000, + 0x211E0001, 0x221E0000, 0x231E0001, 0x241E0000, + 0x251E0001, 0x261E0000, 0x271E0001, 0x281E0000, + 0x291E0001, 0x2A1E0000, 0x2B1E0001, 0x2C1E0000, + 0x2D1E0001, 0x2E1E0000, 0x2F1E0001, 0x301E0000, + 0x311E0001, 0x321E0000, 0x331E0001, 0x341E0000, + 0x351E0001, 0x361E0000, 0x371E0001, 0x381E0000, + 0x391E0001, 0x3A1E0000, 0x3B1E0001, 0x3C1E0000, + 0x3D1E0001, 0x3E1E0000, 0x3F1E0001, 0x401E0000, + 0x411E0001, 0x421E0000, 0x431E0001, 0x441E0000, + 0x451E0001, 0x461E0000, 0x471E0001, 0x481E0000, + 0x491E0001, 0x4A1E0000, 0x4B1E0001, 0x4C1E0000, + 0x4D1E0001, 0x4E1E0000, 0x4F1E0001, 0x501E0000, + 0x511E0001, 0x521E0000, 0x531E0001, 0x541E0000, + 0x551E0001, 0x561E0000, 0x571E0001, 0x581E0000, + 0x591E0001, 0x5A1E0000, 0x5B1E0001, 0x5C1E0000, + 0x5D1E0001, 0x5E1E0000, 0x5F1E0001, 0x601E0000, + 0x611E0001, 0x621E0000, 0x631E0001, 0x641E0000, + 0x651E0001, 0x661E0000, 0x671E0001, 0x681E0000, + 0x691E0001, 0x6A1E0000, 0x6B1E0001, 0x6C1E0000, + 0x6D1E0001, 0x6E1E0000, 0x6F1E0001, 0x701E0000, + 0x711E0001, 0x721E0000, 0x731E0001, 0x741E0000, + 0x751E0001, 0x761E0000, 0x771E0001, 0x781E0000, + 0x791E0001, 0x7A1E0000, 0x7B1E0001, 0x7C1E0000, + 0x7D1E0001, 0x7E1E0000, 0x7F1E0001, 0x801E0000, + 0x811E0001, 0x821E0000, 0x831E0001, 0x841E0000, + 0x851E0001, 0x861E0000, 0x871E0001, 0x881E0000, + 0x891E0001, 0x8A1E0000, 0x8B1E0001, 0x8C1E0000, + 0x8D1E0001, 0x8E1E0000, 0x8F1E0001, 0x901E0000, + 0x911E0001, 0x921E0000, 0x931E0001, 0x941E0000, + 0x951E0001, 0x9E1E0000, 0xDF000001, 0xA01E0000, + 0xA11E0001, 0xA21E0000, 0xA31E0001, 0xA41E0000, + 0xA51E0001, 0xA61E0000, 0xA71E0001, 0xA81E0000, + 0xA91E0001, 0xAA1E0000, 0xAB1E0001, 0xAC1E0000, + 0xAD1E0001, 0xAE1E0000, 0xAF1E0001, 0xB01E0000, + 0xB11E0001, 0xB21E0000, 0xB31E0001, 0xB41E0000, + 0xB51E0001, 0xB61E0000, 0xB71E0001, 0xB81E0000, + 0xB91E0001, 0xBA1E0000, 0xBB1E0001, 0xBC1E0000, + 0xBD1E0001, 0xBE1E0000, 0xBF1E0001, 0xC01E0000, + 0xC11E0001, 0xC21E0000, 0xC31E0001, 0xC41E0000, + 0xC51E0001, 0xC61E0000, 0xC71E0001, 0xC81E0000, + 0xC91E0001, 0xCA1E0000, 0xCB1E0001, 0xCC1E0000, + 0xCD1E0001, 0xCE1E0000, 0xCF1E0001, 0xD01E0000, + 0xD11E0001, 0xD21E0000, 0xD31E0001, 0xD41E0000, + 0xD51E0001, 0xD61E0000, 0xD71E0001, 0xD81E0000, + 0xD91E0001, 0xDA1E0000, 0xDB1E0001, 0xDC1E0000, + 0xDD1E0001, 0xDE1E0000, 0xDF1E0001, 0xE01E0000, + 0xE11E0001, 0xE21E0000, 0xE31E0001, 0xE41E0000, + 0xE51E0001, 0xE61E0000, 0xE71E0001, 0xE81E0000, + 0xE91E0001, 0xEA1E0000, 0xEB1E0001, 0xEC1E0000, + 0xED1E0001, 0xEE1E0000, 0xEF1E0001, 0xF01E0000, + 0xF11E0001, 0xF21E0000, 0xF31E0001, 0xF41E0000, + 0xF51E0001, 0xF61E0000, 0xF71E0001, 0xF81E0000, + 0xF91E0001, 0xFA1E0000, 0xFB1E0001, 0xFC1E0000, + 0xFD1E0001, 0xFE1E0000, 0xFF1E0001, 0x081F0000, + 0x001F0001, 0x091F0000, 0x011F0001, 0x0A1F0000, + 0x021F0001, 0x0B1F0000, 0x031F0001, 0x0C1F0000, + 0x041F0001, 0x0D1F0000, 0x051F0001, 0x0E1F0000, + 0x061F0001, 0x0F1F0000, 0x071F0001, 0x181F0000, + 0x101F0001, 0x191F0000, 0x111F0001, 0x1A1F0000, + 0x121F0001, 0x1B1F0000, 0x131F0001, 0x1C1F0000, + 0x141F0001, 0x1D1F0000, 0x151F0001, 0x281F0000, + 0x201F0001, 0x291F0000, 0x211F0001, 0x2A1F0000, + 0x221F0001, 0x2B1F0000, 0x231F0001, 0x2C1F0000, + 0x241F0001, 0x2D1F0000, 0x251F0001, 0x2E1F0000, + 0x261F0001, 0x2F1F0000, 0x271F0001, 0x381F0000, + 0x301F0001, 0x391F0000, 0x311F0001, 0x3A1F0000, + 0x321F0001, 0x3B1F0000, 0x331F0001, 0x3C1F0000, + 0x341F0001, 0x3D1F0000, 0x351F0001, 0x3E1F0000, + 0x361F0001, 0x3F1F0000, 0x371F0001, 0x481F0000, + 0x401F0001, 0x491F0000, 0x411F0001, 0x4A1F0000, + 0x421F0001, 0x4B1F0000, 0x431F0001, 0x4C1F0000, + 0x441F0001, 0x4D1F0000, 0x451F0001, 0x591F0000, + 0x511F0001, 0x5B1F0000, 0x531F0001, 0x5D1F0000, + 0x551F0001, 0x5F1F0000, 0x571F0001, 0x681F0000, + 0x601F0001, 0x691F0000, 0x611F0001, 0x6A1F0000, + 0x621F0001, 0x6B1F0000, 0x631F0001, 0x6C1F0000, + 0x641F0001, 0x6D1F0000, 0x651F0001, 0x6E1F0000, + 0x661F0001, 0x6F1F0000, 0x671F0001, 0x881F0000, + 0x801F0001, 0x891F0000, 0x811F0001, 0x8A1F0000, + 0x821F0001, 0x8B1F0000, 0x831F0001, 0x8C1F0000, + 0x841F0001, 0x8D1F0000, 0x851F0001, 0x8E1F0000, + 0x861F0001, 0x8F1F0000, 0x871F0001, 0x981F0000, + 0x901F0001, 0x991F0000, 0x911F0001, 0x9A1F0000, + 0x921F0001, 0x9B1F0000, 0x931F0001, 0x9C1F0000, + 0x941F0001, 0x9D1F0000, 0x951F0001, 0x9E1F0000, + 0x961F0001, 0x9F1F0000, 0x971F0001, 0xA81F0000, + 0xA01F0001, 0xA91F0000, 0xA11F0001, 0xAA1F0000, + 0xA21F0001, 0xAB1F0000, 0xA31F0001, 0xAC1F0000, + 0xA41F0001, 0xAD1F0000, 0xA51F0001, 0xAE1F0000, + 0xA61F0001, 0xAF1F0000, 0xA71F0001, 0xB81F0000, + 0xB01F0001, 0xB91F0000, 0xB11F0001, 0xBA1F0000, + 0x701F0001, 0xBB1F0000, 0x711F0001, 0xBC1F0000, + 0xB31F0001, 0xC81F0000, 0x721F0001, 0xC91F0000, + 0x731F0001, 0xCA1F0000, 0x741F0001, 0xCB1F0000, + 0x751F0001, 0xCC1F0000, 0xC31F0001, 0xD81F0000, + 0xD01F0001, 0xD91F0000, 0xD11F0001, 0xDA1F0000, + 0x761F0001, 0xDB1F0000, 0x771F0001, 0xE81F0000, + 0xE01F0001, 0xE91F0000, 0xE11F0001, 0xEA1F0000, + 0x7A1F0001, 0xEB1F0000, 0x7B1F0001, 0xEC1F0000, + 0xE51F0001, 0xF81F0000, 0x781F0001, 0xF91F0000, + 0x791F0001, 0xFA1F0000, 0x7C1F0001, 0xFB1F0000, + 0x7D1F0001, 0xFC1F0000, 0xF31F0001, 0x26210000, + 0xC9030001, 0x2A210000, 0x6B000001, 0x2B210000, + 0xE5000001, 0x32210000, 0x4E210001, 0x60210000, + 0x70210001, 0x61210000, 0x71210001, 0x62210000, + 0x72210001, 0x63210000, 0x73210001, 0x64210000, + 0x74210001, 0x65210000, 0x75210001, 0x66210000, + 0x76210001, 0x67210000, 0x77210001, 0x68210000, + 0x78210001, 0x69210000, 0x79210001, 0x6A210000, + 0x7A210001, 0x6B210000, 0x7B210001, 0x6C210000, + 0x7C210001, 0x6D210000, 0x7D210001, 0x6E210000, + 0x7E210001, 0x6F210000, 0x7F210001, 0x83210000, + 0x84210001, 0xB6240000, 0xD0240001, 0xB7240000, + 0xD1240001, 0xB8240000, 0xD2240001, 0xB9240000, + 0xD3240001, 0xBA240000, 0xD4240001, 0xBB240000, + 0xD5240001, 0xBC240000, 0xD6240001, 0xBD240000, + 0xD7240001, 0xBE240000, 0xD8240001, 0xBF240000, + 0xD9240001, 0xC0240000, 0xDA240001, 0xC1240000, + 0xDB240001, 0xC2240000, 0xDC240001, 0xC3240000, + 0xDD240001, 0xC4240000, 0xDE240001, 0xC5240000, + 0xDF240001, 0xC6240000, 0xE0240001, 0xC7240000, + 0xE1240001, 0xC8240000, 0xE2240001, 0xC9240000, + 0xE3240001, 0xCA240000, 0xE4240001, 0xCB240000, + 0xE5240001, 0xCC240000, 0xE6240001, 0xCD240000, + 0xE7240001, 0xCE240000, 0xE8240001, 0xCF240000, + 0xE9240001, 0x002C0000, 0x302C0001, 0x012C0000, + 0x312C0001, 0x022C0000, 0x322C0001, 0x032C0000, + 0x332C0001, 0x042C0000, 0x342C0001, 0x052C0000, + 0x352C0001, 0x062C0000, 0x362C0001, 0x072C0000, + 0x372C0001, 0x082C0000, 0x382C0001, 0x092C0000, + 0x392C0001, 0x0A2C0000, 0x3A2C0001, 0x0B2C0000, + 0x3B2C0001, 0x0C2C0000, 0x3C2C0001, 0x0D2C0000, + 0x3D2C0001, 0x0E2C0000, 0x3E2C0001, 0x0F2C0000, + 0x3F2C0001, 0x102C0000, 0x402C0001, 0x112C0000, + 0x412C0001, 0x122C0000, 0x422C0001, 0x132C0000, + 0x432C0001, 0x142C0000, 0x442C0001, 0x152C0000, + 0x452C0001, 0x162C0000, 0x462C0001, 0x172C0000, + 0x472C0001, 0x182C0000, 0x482C0001, 0x192C0000, + 0x492C0001, 0x1A2C0000, 0x4A2C0001, 0x1B2C0000, + 0x4B2C0001, 0x1C2C0000, 0x4C2C0001, 0x1D2C0000, + 0x4D2C0001, 0x1E2C0000, 0x4E2C0001, 0x1F2C0000, + 0x4F2C0001, 0x202C0000, 0x502C0001, 0x212C0000, + 0x512C0001, 0x222C0000, 0x522C0001, 0x232C0000, + 0x532C0001, 0x242C0000, 0x542C0001, 0x252C0000, + 0x552C0001, 0x262C0000, 0x562C0001, 0x272C0000, + 0x572C0001, 0x282C0000, 0x582C0001, 0x292C0000, + 0x592C0001, 0x2A2C0000, 0x5A2C0001, 0x2B2C0000, + 0x5B2C0001, 0x2C2C0000, 0x5C2C0001, 0x2D2C0000, + 0x5D2C0001, 0x2E2C0000, 0x5E2C0001, 0x2F2C0000, + 0x5F2C0001, 0x602C0000, 0x612C0001, 0x622C0000, + 0x6B020001, 0x632C0000, 0x7D1D0001, 0x642C0000, + 0x7D020001, 0x672C0000, 0x682C0001, 0x692C0000, + 0x6A2C0001, 0x6B2C0000, 0x6C2C0001, 0x6D2C0000, + 0x51020001, 0x6E2C0000, 0x71020001, 0x6F2C0000, + 0x50020001, 0x702C0000, 0x52020001, 0x722C0000, + 0x732C0001, 0x752C0000, 0x762C0001, 0x7E2C0000, + 0x3F020001, 0x7F2C0000, 0x40020001, 0x802C0000, + 0x812C0001, 0x822C0000, 0x832C0001, 0x842C0000, + 0x852C0001, 0x862C0000, 0x872C0001, 0x882C0000, + 0x892C0001, 0x8A2C0000, 0x8B2C0001, 0x8C2C0000, + 0x8D2C0001, 0x8E2C0000, 0x8F2C0001, 0x902C0000, + 0x912C0001, 0x922C0000, 0x932C0001, 0x942C0000, + 0x952C0001, 0x962C0000, 0x972C0001, 0x982C0000, + 0x992C0001, 0x9A2C0000, 0x9B2C0001, 0x9C2C0000, + 0x9D2C0001, 0x9E2C0000, 0x9F2C0001, 0xA02C0000, + 0xA12C0001, 0xA22C0000, 0xA32C0001, 0xA42C0000, + 0xA52C0001, 0xA62C0000, 0xA72C0001, 0xA82C0000, + 0xA92C0001, 0xAA2C0000, 0xAB2C0001, 0xAC2C0000, + 0xAD2C0001, 0xAE2C0000, 0xAF2C0001, 0xB02C0000, + 0xB12C0001, 0xB22C0000, 0xB32C0001, 0xB42C0000, + 0xB52C0001, 0xB62C0000, 0xB72C0001, 0xB82C0000, + 0xB92C0001, 0xBA2C0000, 0xBB2C0001, 0xBC2C0000, + 0xBD2C0001, 0xBE2C0000, 0xBF2C0001, 0xC02C0000, + 0xC12C0001, 0xC22C0000, 0xC32C0001, 0xC42C0000, + 0xC52C0001, 0xC62C0000, 0xC72C0001, 0xC82C0000, + 0xC92C0001, 0xCA2C0000, 0xCB2C0001, 0xCC2C0000, + 0xCD2C0001, 0xCE2C0000, 0xCF2C0001, 0xD02C0000, + 0xD12C0001, 0xD22C0000, 0xD32C0001, 0xD42C0000, + 0xD52C0001, 0xD62C0000, 0xD72C0001, 0xD82C0000, + 0xD92C0001, 0xDA2C0000, 0xDB2C0001, 0xDC2C0000, + 0xDD2C0001, 0xDE2C0000, 0xDF2C0001, 0xE02C0000, + 0xE12C0001, 0xE22C0000, 0xE32C0001, 0xEB2C0000, + 0xEC2C0001, 0xED2C0000, 0xEE2C0001, 0xF22C0000, + 0xF32C0001, 0x40A60000, 0x41A60001, 0x42A60000, + 0x43A60001, 0x44A60000, 0x45A60001, 0x46A60000, + 0x47A60001, 0x48A60000, 0x49A60001, 0x4AA60000, + 0x4BA60001, 0x4CA60000, 0x4DA60001, 0x4EA60000, + 0x4FA60001, 0x50A60000, 0x51A60001, 0x52A60000, + 0x53A60001, 0x54A60000, 0x55A60001, 0x56A60000, + 0x57A60001, 0x58A60000, 0x59A60001, 0x5AA60000, + 0x5BA60001, 0x5CA60000, 0x5DA60001, 0x5EA60000, + 0x5FA60001, 0x60A60000, 0x61A60001, 0x62A60000, + 0x63A60001, 0x64A60000, 0x65A60001, 0x66A60000, + 0x67A60001, 0x68A60000, 0x69A60001, 0x6AA60000, + 0x6BA60001, 0x6CA60000, 0x6DA60001, 0x80A60000, + 0x81A60001, 0x82A60000, 0x83A60001, 0x84A60000, + 0x85A60001, 0x86A60000, 0x87A60001, 0x88A60000, + 0x89A60001, 0x8AA60000, 0x8BA60001, 0x8CA60000, + 0x8DA60001, 0x8EA60000, 0x8FA60001, 0x90A60000, + 0x91A60001, 0x92A60000, 0x93A60001, 0x94A60000, + 0x95A60001, 0x96A60000, 0x97A60001, 0x98A60000, + 0x99A60001, 0x9AA60000, 0x9BA60001, 0x22A70000, + 0x23A70001, 0x24A70000, 0x25A70001, 0x26A70000, + 0x27A70001, 0x28A70000, 0x29A70001, 0x2AA70000, + 0x2BA70001, 0x2CA70000, 0x2DA70001, 0x2EA70000, + 0x2FA70001, 0x32A70000, 0x33A70001, 0x34A70000, + 0x35A70001, 0x36A70000, 0x37A70001, 0x38A70000, + 0x39A70001, 0x3AA70000, 0x3BA70001, 0x3CA70000, + 0x3DA70001, 0x3EA70000, 0x3FA70001, 0x40A70000, + 0x41A70001, 0x42A70000, 0x43A70001, 0x44A70000, + 0x45A70001, 0x46A70000, 0x47A70001, 0x48A70000, + 0x49A70001, 0x4AA70000, 0x4BA70001, 0x4CA70000, + 0x4DA70001, 0x4EA70000, 0x4FA70001, 0x50A70000, + 0x51A70001, 0x52A70000, 0x53A70001, 0x54A70000, + 0x55A70001, 0x56A70000, 0x57A70001, 0x58A70000, + 0x59A70001, 0x5AA70000, 0x5BA70001, 0x5CA70000, + 0x5DA70001, 0x5EA70000, 0x5FA70001, 0x60A70000, + 0x61A70001, 0x62A70000, 0x63A70001, 0x64A70000, + 0x65A70001, 0x66A70000, 0x67A70001, 0x68A70000, + 0x69A70001, 0x6AA70000, 0x6BA70001, 0x6CA70000, + 0x6DA70001, 0x6EA70000, 0x6FA70001, 0x79A70000, + 0x7AA70001, 0x7BA70000, 0x7CA70001, 0x7DA70000, + 0x791D0001, 0x7EA70000, 0x7FA70001, 0x80A70000, + 0x81A70001, 0x82A70000, 0x83A70001, 0x84A70000, + 0x85A70001, 0x86A70000, 0x87A70001, 0x8BA70000, + 0x8CA70001, 0x8DA70000, 0x65020001, 0x90A70000, + 0x91A70001, 0x92A70000, 0x93A70001, 0x96A70000, + 0x97A70001, 0x98A70000, 0x99A70001, 0x9AA70000, + 0x9BA70001, 0x9CA70000, 0x9DA70001, 0x9EA70000, + 0x9FA70001, 0xA0A70000, 0xA1A70001, 0xA2A70000, + 0xA3A70001, 0xA4A70000, 0xA5A70001, 0xA6A70000, + 0xA7A70001, 0xA8A70000, 0xA9A70001, 0xAAA70000, + 0x66020001, 0xABA70000, 0x5C020001, 0xACA70000, + 0x61020001, 0xADA70000, 0x6C020001, 0xAEA70000, + 0x6A020001, 0xB0A70000, 0x9E020001, 0xB1A70000, + 0x87020001, 0xB2A70000, 0x9D020001, 0xB3A70000, + 0x53AB0001, 0xB4A70000, 0xB5A70001, 0xB6A70000, + 0xB7A70001, 0xB8A70000, 0xB9A70001, 0xBAA70000, + 0xBBA70001, 0xBCA70000, 0xBDA70001, 0xBEA70000, + 0xBFA70001, 0xC0A70000, 0xC1A70001, 0xC2A70000, + 0xC3A70001, 0xC4A70000, 0x94A70001, 0xC5A70000, + 0x82020001, 0xC6A70000, 0x8E1D0001, 0xC7A70000, + 0xC8A70001, 0xC9A70000, 0xCAA70001, 0xD0A70000, + 0xD1A70001, 0xD6A70000, 0xD7A70001, 0xD8A70000, + 0xD9A70001, 0xF5A70000, 0xF6A70001, 0x21FF0000, + 0x41FF0001, 0x22FF0000, 0x42FF0001, 0x23FF0000, + 0x43FF0001, 0x24FF0000, 0x44FF0001, 0x25FF0000, + 0x45FF0001, 0x26FF0000, 0x46FF0001, 0x27FF0000, + 0x47FF0001, 0x28FF0000, 0x48FF0001, 0x29FF0000, + 0x49FF0001, 0x2AFF0000, 0x4AFF0001, 0x2BFF0000, + 0x4BFF0001, 0x2CFF0000, 0x4CFF0001, 0x2DFF0000, + 0x4DFF0001, 0x2EFF0000, 0x4EFF0001, 0x2FFF0000, + 0x4FFF0001, 0x30FF0000, 0x50FF0001, 0x31FF0000, + 0x51FF0001, 0x32FF0000, 0x52FF0001, 0x33FF0000, + 0x53FF0001, 0x34FF0000, 0x54FF0001, 0x35FF0000, + 0x55FF0001, 0x36FF0000, 0x56FF0001, 0x37FF0000, + 0x57FF0001, 0x38FF0000, 0x58FF0001, 0x39FF0000, + 0x59FF0001, 0x3AFF0000, 0x5AFF0001, 0x00040100, + 0x28040181, 0x01040100, 0x29040181, 0x02040100, + 0x2A040181, 0x03040100, 0x2B040181, 0x04040100, + 0x2C040181, 0x05040100, 0x2D040181, 0x06040100, + 0x2E040181, 0x07040100, 0x2F040181, 0x08040100, + 0x30040181, 0x09040100, 0x31040181, 0x0A040100, + 0x32040181, 0x0B040100, 0x33040181, 0x0C040100, + 0x34040181, 0x0D040100, 0x35040181, 0x0E040100, + 0x36040181, 0x0F040100, 0x37040181, 0x10040100, + 0x38040181, 0x11040100, 0x39040181, 0x12040100, + 0x3A040181, 0x13040100, 0x3B040181, 0x14040100, + 0x3C040181, 0x15040100, 0x3D040181, 0x16040100, + 0x3E040181, 0x17040100, 0x3F040181, 0x18040100, + 0x40040181, 0x19040100, 0x41040181, 0x1A040100, + 0x42040181, 0x1B040100, 0x43040181, 0x1C040100, + 0x44040181, 0x1D040100, 0x45040181, 0x1E040100, + 0x46040181, 0x1F040100, 0x47040181, 0x20040100, + 0x48040181, 0x21040100, 0x49040181, 0x22040100, + 0x4A040181, 0x23040100, 0x4B040181, 0x24040100, + 0x4C040181, 0x25040100, 0x4D040181, 0x26040100, + 0x4E040181, 0x27040100, 0x4F040181, 0xB0040100, + 0xD8040181, 0xB1040100, 0xD9040181, 0xB2040100, + 0xDA040181, 0xB3040100, 0xDB040181, 0xB4040100, + 0xDC040181, 0xB5040100, 0xDD040181, 0xB6040100, + 0xDE040181, 0xB7040100, 0xDF040181, 0xB8040100, + 0xE0040181, 0xB9040100, 0xE1040181, 0xBA040100, + 0xE2040181, 0xBB040100, 0xE3040181, 0xBC040100, + 0xE4040181, 0xBD040100, 0xE5040181, 0xBE040100, + 0xE6040181, 0xBF040100, 0xE7040181, 0xC0040100, + 0xE8040181, 0xC1040100, 0xE9040181, 0xC2040100, + 0xEA040181, 0xC3040100, 0xEB040181, 0xC4040100, + 0xEC040181, 0xC5040100, 0xED040181, 0xC6040100, + 0xEE040181, 0xC7040100, 0xEF040181, 0xC8040100, + 0xF0040181, 0xC9040100, 0xF1040181, 0xCA040100, + 0xF2040181, 0xCB040100, 0xF3040181, 0xCC040100, + 0xF4040181, 0xCD040100, 0xF5040181, 0xCE040100, + 0xF6040181, 0xCF040100, 0xF7040181, 0xD0040100, + 0xF8040181, 0xD1040100, 0xF9040181, 0xD2040100, + 0xFA040181, 0xD3040100, 0xFB040181, 0x70050100, + 0x97050181, 0x71050100, 0x98050181, 0x72050100, + 0x99050181, 0x73050100, 0x9A050181, 0x74050100, + 0x9B050181, 0x75050100, 0x9C050181, 0x76050100, + 0x9D050181, 0x77050100, 0x9E050181, 0x78050100, + 0x9F050181, 0x79050100, 0xA0050181, 0x7A050100, + 0xA1050181, 0x7C050100, 0xA3050181, 0x7D050100, + 0xA4050181, 0x7E050100, 0xA5050181, 0x7F050100, + 0xA6050181, 0x80050100, 0xA7050181, 0x81050100, + 0xA8050181, 0x82050100, 0xA9050181, 0x83050100, + 0xAA050181, 0x84050100, 0xAB050181, 0x85050100, + 0xAC050181, 0x86050100, 0xAD050181, 0x87050100, + 0xAE050181, 0x88050100, 0xAF050181, 0x89050100, + 0xB0050181, 0x8A050100, 0xB1050181, 0x8C050100, + 0xB3050181, 0x8D050100, 0xB4050181, 0x8E050100, + 0xB5050181, 0x8F050100, 0xB6050181, 0x90050100, + 0xB7050181, 0x91050100, 0xB8050181, 0x92050100, + 0xB9050181, 0x94050100, 0xBB050181, 0x95050100, + 0xBC050181, 0x800C0100, 0xC00C0181, 0x810C0100, + 0xC10C0181, 0x820C0100, 0xC20C0181, 0x830C0100, + 0xC30C0181, 0x840C0100, 0xC40C0181, 0x850C0100, + 0xC50C0181, 0x860C0100, 0xC60C0181, 0x870C0100, + 0xC70C0181, 0x880C0100, 0xC80C0181, 0x890C0100, + 0xC90C0181, 0x8A0C0100, 0xCA0C0181, 0x8B0C0100, + 0xCB0C0181, 0x8C0C0100, 0xCC0C0181, 0x8D0C0100, + 0xCD0C0181, 0x8E0C0100, 0xCE0C0181, 0x8F0C0100, + 0xCF0C0181, 0x900C0100, 0xD00C0181, 0x910C0100, + 0xD10C0181, 0x920C0100, 0xD20C0181, 0x930C0100, + 0xD30C0181, 0x940C0100, 0xD40C0181, 0x950C0100, + 0xD50C0181, 0x960C0100, 0xD60C0181, 0x970C0100, + 0xD70C0181, 0x980C0100, 0xD80C0181, 0x990C0100, + 0xD90C0181, 0x9A0C0100, 0xDA0C0181, 0x9B0C0100, + 0xDB0C0181, 0x9C0C0100, 0xDC0C0181, 0x9D0C0100, + 0xDD0C0181, 0x9E0C0100, 0xDE0C0181, 0x9F0C0100, + 0xDF0C0181, 0xA00C0100, 0xE00C0181, 0xA10C0100, + 0xE10C0181, 0xA20C0100, 0xE20C0181, 0xA30C0100, + 0xE30C0181, 0xA40C0100, 0xE40C0181, 0xA50C0100, + 0xE50C0181, 0xA60C0100, 0xE60C0181, 0xA70C0100, + 0xE70C0181, 0xA80C0100, 0xE80C0181, 0xA90C0100, + 0xE90C0181, 0xAA0C0100, 0xEA0C0181, 0xAB0C0100, + 0xEB0C0181, 0xAC0C0100, 0xEC0C0181, 0xAD0C0100, + 0xED0C0181, 0xAE0C0100, 0xEE0C0181, 0xAF0C0100, + 0xEF0C0181, 0xB00C0100, 0xF00C0181, 0xB10C0100, + 0xF10C0181, 0xB20C0100, 0xF20C0181, 0xA0180100, + 0xC0180181, 0xA1180100, 0xC1180181, 0xA2180100, + 0xC2180181, 0xA3180100, 0xC3180181, 0xA4180100, + 0xC4180181, 0xA5180100, 0xC5180181, 0xA6180100, + 0xC6180181, 0xA7180100, 0xC7180181, 0xA8180100, + 0xC8180181, 0xA9180100, 0xC9180181, 0xAA180100, + 0xCA180181, 0xAB180100, 0xCB180181, 0xAC180100, + 0xCC180181, 0xAD180100, 0xCD180181, 0xAE180100, + 0xCE180181, 0xAF180100, 0xCF180181, 0xB0180100, + 0xD0180181, 0xB1180100, 0xD1180181, 0xB2180100, + 0xD2180181, 0xB3180100, 0xD3180181, 0xB4180100, + 0xD4180181, 0xB5180100, 0xD5180181, 0xB6180100, + 0xD6180181, 0xB7180100, 0xD7180181, 0xB8180100, + 0xD8180181, 0xB9180100, 0xD9180181, 0xBA180100, + 0xDA180181, 0xBB180100, 0xDB180181, 0xBC180100, + 0xDC180181, 0xBD180100, 0xDD180181, 0xBE180100, + 0xDE180181, 0xBF180100, 0xDF180181, 0x406E0100, + 0x606E0181, 0x416E0100, 0x616E0181, 0x426E0100, + 0x626E0181, 0x436E0100, 0x636E0181, 0x446E0100, + 0x646E0181, 0x456E0100, 0x656E0181, 0x466E0100, + 0x666E0181, 0x476E0100, 0x676E0181, 0x486E0100, + 0x686E0181, 0x496E0100, 0x696E0181, 0x4A6E0100, + 0x6A6E0181, 0x4B6E0100, 0x6B6E0181, 0x4C6E0100, + 0x6C6E0181, 0x4D6E0100, 0x6D6E0181, 0x4E6E0100, + 0x6E6E0181, 0x4F6E0100, 0x6F6E0181, 0x506E0100, + 0x706E0181, 0x516E0100, 0x716E0181, 0x526E0100, + 0x726E0181, 0x536E0100, 0x736E0181, 0x546E0100, + 0x746E0181, 0x556E0100, 0x756E0181, 0x566E0100, + 0x766E0181, 0x576E0100, 0x776E0181, 0x586E0100, + 0x786E0181, 0x596E0100, 0x796E0181, 0x5A6E0100, + 0x7A6E0181, 0x5B6E0100, 0x7B6E0181, 0x5C6E0100, + 0x7C6E0181, 0x5D6E0100, 0x7D6E0181, 0x5E6E0100, + 0x7E6E0181, 0x5F6E0100, 0x7F6E0181, 0x00E90100, + 0x22E90181, 0x01E90100, 0x23E90181, 0x02E90100, + 0x24E90181, 0x03E90100, 0x25E90181, 0x04E90100, + 0x26E90181, 0x05E90100, 0x27E90181, 0x06E90100, + 0x28E90181, 0x07E90100, 0x29E90181, 0x08E90100, + 0x2AE90181, 0x09E90100, 0x2BE90181, 0x0AE90100, + 0x2CE90181, 0x0BE90100, 0x2DE90181, 0x0CE90100, + 0x2EE90181, 0x0DE90100, 0x2FE90181, 0x0EE90100, + 0x30E90181, 0x0FE90100, 0x31E90181, 0x10E90100, + 0x32E90181, 0x11E90100, 0x33E90181, 0x12E90100, + 0x34E90181, 0x13E90100, 0x35E90181, 0x14E90100, + 0x36E90181, 0x15E90100, 0x37E90181, 0x16E90100, + 0x38E90181, 0x17E90100, 0x39E90181, 0x18E90100, + 0x3AE90181, 0x19E90100, 0x3BE90181, 0x1AE90100, + 0x3CE90181, 0x1BE90100, 0x3DE90181, 0x1CE90100, + 0x3EE90181, 0x1DE90100, 0x3FE90181, 0x1EE90100, + 0x40E90181, 0x1FE90100, 0x41E90181, 0x20E90100, + 0x42E90181, 0x21E90100, 0x43E90181, 0x69000000, + 0x07030000, +}; + +static uint32_t const __CFUniCharLowercaseMappingTableLength = 1434; + +static uint32_t const __CFUniCharUppercaseMappingTable[] = { + 0xA82F0000, 0x61000000, 0x41000001, 0x62000000, + 0x42000001, 0x63000000, 0x43000001, 0x64000000, + 0x44000001, 0x65000000, 0x45000001, 0x66000000, + 0x46000001, 0x67000000, 0x47000001, 0x68000000, + 0x48000001, 0x69000000, 0x49000001, 0x6A000000, + 0x4A000001, 0x6B000000, 0x4B000001, 0x6C000000, + 0x4C000001, 0x6D000000, 0x4D000001, 0x6E000000, + 0x4E000001, 0x6F000000, 0x4F000001, 0x70000000, + 0x50000001, 0x71000000, 0x51000001, 0x72000000, + 0x52000001, 0x73000000, 0x53000001, 0x74000000, + 0x54000001, 0x75000000, 0x55000001, 0x76000000, + 0x56000001, 0x77000000, 0x57000001, 0x78000000, + 0x58000001, 0x79000000, 0x59000001, 0x7A000000, + 0x5A000001, 0xB5000000, 0x9C030001, 0xDF000000, + 0x00000002, 0xE0000000, 0xC0000001, 0xE1000000, + 0xC1000001, 0xE2000000, 0xC2000001, 0xE3000000, + 0xC3000001, 0xE4000000, 0xC4000001, 0xE5000000, + 0xC5000001, 0xE6000000, 0xC6000001, 0xE7000000, + 0xC7000001, 0xE8000000, 0xC8000001, 0xE9000000, + 0xC9000001, 0xEA000000, 0xCA000001, 0xEB000000, + 0xCB000001, 0xEC000000, 0xCC000001, 0xED000000, + 0xCD000001, 0xEE000000, 0xCE000001, 0xEF000000, + 0xCF000001, 0xF0000000, 0xD0000001, 0xF1000000, + 0xD1000001, 0xF2000000, 0xD2000001, 0xF3000000, + 0xD3000001, 0xF4000000, 0xD4000001, 0xF5000000, + 0xD5000001, 0xF6000000, 0xD6000001, 0xF8000000, + 0xD8000001, 0xF9000000, 0xD9000001, 0xFA000000, + 0xDA000001, 0xFB000000, 0xDB000001, 0xFC000000, + 0xDC000001, 0xFD000000, 0xDD000001, 0xFE000000, + 0xDE000001, 0xFF000000, 0x78010001, 0x01010000, + 0x00010001, 0x03010000, 0x02010001, 0x05010000, + 0x04010001, 0x07010000, 0x06010001, 0x09010000, + 0x08010001, 0x0B010000, 0x0A010001, 0x0D010000, + 0x0C010001, 0x0F010000, 0x0E010001, 0x11010000, + 0x10010001, 0x13010000, 0x12010001, 0x15010000, + 0x14010001, 0x17010000, 0x16010001, 0x19010000, + 0x18010001, 0x1B010000, 0x1A010001, 0x1D010000, + 0x1C010001, 0x1F010000, 0x1E010001, 0x21010000, + 0x20010001, 0x23010000, 0x22010001, 0x25010000, + 0x24010001, 0x27010000, 0x26010001, 0x29010000, + 0x28010001, 0x2B010000, 0x2A010001, 0x2D010000, + 0x2C010001, 0x2F010000, 0x2E010001, 0x31010000, + 0x49000001, 0x33010000, 0x32010001, 0x35010000, + 0x34010001, 0x37010000, 0x36010001, 0x3A010000, + 0x39010001, 0x3C010000, 0x3B010001, 0x3E010000, + 0x3D010001, 0x40010000, 0x3F010001, 0x42010000, + 0x41010001, 0x44010000, 0x43010001, 0x46010000, + 0x45010001, 0x48010000, 0x47010001, 0x49010000, + 0x02000002, 0x4B010000, 0x4A010001, 0x4D010000, + 0x4C010001, 0x4F010000, 0x4E010001, 0x51010000, + 0x50010001, 0x53010000, 0x52010001, 0x55010000, + 0x54010001, 0x57010000, 0x56010001, 0x59010000, + 0x58010001, 0x5B010000, 0x5A010001, 0x5D010000, + 0x5C010001, 0x5F010000, 0x5E010001, 0x61010000, + 0x60010001, 0x63010000, 0x62010001, 0x65010000, + 0x64010001, 0x67010000, 0x66010001, 0x69010000, + 0x68010001, 0x6B010000, 0x6A010001, 0x6D010000, + 0x6C010001, 0x6F010000, 0x6E010001, 0x71010000, + 0x70010001, 0x73010000, 0x72010001, 0x75010000, + 0x74010001, 0x77010000, 0x76010001, 0x7A010000, + 0x79010001, 0x7C010000, 0x7B010001, 0x7E010000, + 0x7D010001, 0x7F010000, 0x53000001, 0x80010000, + 0x43020001, 0x83010000, 0x82010001, 0x85010000, + 0x84010001, 0x88010000, 0x87010001, 0x8C010000, + 0x8B010001, 0x92010000, 0x91010001, 0x95010000, + 0xF6010001, 0x99010000, 0x98010001, 0x9A010000, + 0x3D020001, 0x9E010000, 0x20020001, 0xA1010000, + 0xA0010001, 0xA3010000, 0xA2010001, 0xA5010000, + 0xA4010001, 0xA8010000, 0xA7010001, 0xAD010000, + 0xAC010001, 0xB0010000, 0xAF010001, 0xB4010000, + 0xB3010001, 0xB6010000, 0xB5010001, 0xB9010000, + 0xB8010001, 0xBD010000, 0xBC010001, 0xBF010000, + 0xF7010001, 0xC5010000, 0xC4010001, 0xC6010000, + 0xC4010001, 0xC8010000, 0xC7010001, 0xC9010000, + 0xC7010001, 0xCB010000, 0xCA010001, 0xCC010000, + 0xCA010001, 0xCE010000, 0xCD010001, 0xD0010000, + 0xCF010001, 0xD2010000, 0xD1010001, 0xD4010000, + 0xD3010001, 0xD6010000, 0xD5010001, 0xD8010000, + 0xD7010001, 0xDA010000, 0xD9010001, 0xDC010000, + 0xDB010001, 0xDD010000, 0x8E010001, 0xDF010000, + 0xDE010001, 0xE1010000, 0xE0010001, 0xE3010000, + 0xE2010001, 0xE5010000, 0xE4010001, 0xE7010000, + 0xE6010001, 0xE9010000, 0xE8010001, 0xEB010000, + 0xEA010001, 0xED010000, 0xEC010001, 0xEF010000, + 0xEE010001, 0xF0010000, 0x04000002, 0xF2010000, + 0xF1010001, 0xF3010000, 0xF1010001, 0xF5010000, + 0xF4010001, 0xF9010000, 0xF8010001, 0xFB010000, + 0xFA010001, 0xFD010000, 0xFC010001, 0xFF010000, + 0xFE010001, 0x01020000, 0x00020001, 0x03020000, + 0x02020001, 0x05020000, 0x04020001, 0x07020000, + 0x06020001, 0x09020000, 0x08020001, 0x0B020000, + 0x0A020001, 0x0D020000, 0x0C020001, 0x0F020000, + 0x0E020001, 0x11020000, 0x10020001, 0x13020000, + 0x12020001, 0x15020000, 0x14020001, 0x17020000, + 0x16020001, 0x19020000, 0x18020001, 0x1B020000, + 0x1A020001, 0x1D020000, 0x1C020001, 0x1F020000, + 0x1E020001, 0x23020000, 0x22020001, 0x25020000, + 0x24020001, 0x27020000, 0x26020001, 0x29020000, + 0x28020001, 0x2B020000, 0x2A020001, 0x2D020000, + 0x2C020001, 0x2F020000, 0x2E020001, 0x31020000, + 0x30020001, 0x33020000, 0x32020001, 0x3C020000, + 0x3B020001, 0x3F020000, 0x7E2C0001, 0x40020000, + 0x7F2C0001, 0x42020000, 0x41020001, 0x47020000, + 0x46020001, 0x49020000, 0x48020001, 0x4B020000, + 0x4A020001, 0x4D020000, 0x4C020001, 0x4F020000, + 0x4E020001, 0x50020000, 0x6F2C0001, 0x51020000, + 0x6D2C0001, 0x52020000, 0x702C0001, 0x53020000, + 0x81010001, 0x54020000, 0x86010001, 0x56020000, + 0x89010001, 0x57020000, 0x8A010001, 0x59020000, + 0x8F010001, 0x5B020000, 0x90010001, 0x5C020000, + 0xABA70001, 0x60020000, 0x93010001, 0x61020000, + 0xACA70001, 0x63020000, 0x94010001, 0x65020000, + 0x8DA70001, 0x66020000, 0xAAA70001, 0x68020000, + 0x97010001, 0x69020000, 0x96010001, 0x6A020000, + 0xAEA70001, 0x6B020000, 0x622C0001, 0x6C020000, + 0xADA70001, 0x6F020000, 0x9C010001, 0x71020000, + 0x6E2C0001, 0x72020000, 0x9D010001, 0x75020000, + 0x9F010001, 0x7D020000, 0x642C0001, 0x80020000, + 0xA6010001, 0x82020000, 0xC5A70001, 0x83020000, + 0xA9010001, 0x87020000, 0xB1A70001, 0x88020000, + 0xAE010001, 0x89020000, 0x44020001, 0x8A020000, + 0xB1010001, 0x8B020000, 0xB2010001, 0x8C020000, + 0x45020001, 0x92020000, 0xB7010001, 0x9D020000, + 0xB2A70001, 0x9E020000, 0xB0A70001, 0x45030000, + 0x99030001, 0x71030000, 0x70030001, 0x73030000, + 0x72030001, 0x77030000, 0x76030001, 0x7B030000, + 0xFD030001, 0x7C030000, 0xFE030001, 0x7D030000, + 0xFF030001, 0x90030000, 0x06000003, 0xAC030000, + 0x86030001, 0xAD030000, 0x88030001, 0xAE030000, + 0x89030001, 0xAF030000, 0x8A030001, 0xB0030000, + 0x09000003, 0xB1030000, 0x91030001, 0xB2030000, + 0x92030001, 0xB3030000, 0x93030001, 0xB4030000, + 0x94030001, 0xB5030000, 0x95030001, 0xB6030000, + 0x96030001, 0xB7030000, 0x97030001, 0xB8030000, + 0x98030001, 0xB9030000, 0x99030001, 0xBA030000, + 0x9A030001, 0xBB030000, 0x9B030001, 0xBC030000, + 0x9C030001, 0xBD030000, 0x9D030001, 0xBE030000, + 0x9E030001, 0xBF030000, 0x9F030001, 0xC0030000, + 0xA0030001, 0xC1030000, 0xA1030001, 0xC2030000, + 0xA3030001, 0xC3030000, 0xA3030001, 0xC4030000, + 0xA4030001, 0xC5030000, 0xA5030001, 0xC6030000, + 0xA6030001, 0xC7030000, 0xA7030001, 0xC8030000, + 0xA8030001, 0xC9030000, 0xA9030001, 0xCA030000, + 0xAA030001, 0xCB030000, 0xAB030001, 0xCC030000, + 0x8C030001, 0xCD030000, 0x8E030001, 0xCE030000, + 0x8F030001, 0xD0030000, 0x92030001, 0xD1030000, + 0x98030001, 0xD5030000, 0xA6030001, 0xD6030000, + 0xA0030001, 0xD7030000, 0xCF030001, 0xD9030000, + 0xD8030001, 0xDB030000, 0xDA030001, 0xDD030000, + 0xDC030001, 0xDF030000, 0xDE030001, 0xE1030000, + 0xE0030001, 0xE3030000, 0xE2030001, 0xE5030000, + 0xE4030001, 0xE7030000, 0xE6030001, 0xE9030000, + 0xE8030001, 0xEB030000, 0xEA030001, 0xED030000, + 0xEC030001, 0xEF030000, 0xEE030001, 0xF0030000, + 0x9A030001, 0xF1030000, 0xA1030001, 0xF2030000, + 0xF9030001, 0xF3030000, 0x7F030001, 0xF5030000, + 0x95030001, 0xF8030000, 0xF7030001, 0xFB030000, + 0xFA030001, 0x30040000, 0x10040001, 0x31040000, + 0x11040001, 0x32040000, 0x12040001, 0x33040000, + 0x13040001, 0x34040000, 0x14040001, 0x35040000, + 0x15040001, 0x36040000, 0x16040001, 0x37040000, + 0x17040001, 0x38040000, 0x18040001, 0x39040000, + 0x19040001, 0x3A040000, 0x1A040001, 0x3B040000, + 0x1B040001, 0x3C040000, 0x1C040001, 0x3D040000, + 0x1D040001, 0x3E040000, 0x1E040001, 0x3F040000, + 0x1F040001, 0x40040000, 0x20040001, 0x41040000, + 0x21040001, 0x42040000, 0x22040001, 0x43040000, + 0x23040001, 0x44040000, 0x24040001, 0x45040000, + 0x25040001, 0x46040000, 0x26040001, 0x47040000, + 0x27040001, 0x48040000, 0x28040001, 0x49040000, + 0x29040001, 0x4A040000, 0x2A040001, 0x4B040000, + 0x2B040001, 0x4C040000, 0x2C040001, 0x4D040000, + 0x2D040001, 0x4E040000, 0x2E040001, 0x4F040000, + 0x2F040001, 0x50040000, 0x00040001, 0x51040000, + 0x01040001, 0x52040000, 0x02040001, 0x53040000, + 0x03040001, 0x54040000, 0x04040001, 0x55040000, + 0x05040001, 0x56040000, 0x06040001, 0x57040000, + 0x07040001, 0x58040000, 0x08040001, 0x59040000, + 0x09040001, 0x5A040000, 0x0A040001, 0x5B040000, + 0x0B040001, 0x5C040000, 0x0C040001, 0x5D040000, + 0x0D040001, 0x5E040000, 0x0E040001, 0x5F040000, + 0x0F040001, 0x61040000, 0x60040001, 0x63040000, + 0x62040001, 0x65040000, 0x64040001, 0x67040000, + 0x66040001, 0x69040000, 0x68040001, 0x6B040000, + 0x6A040001, 0x6D040000, 0x6C040001, 0x6F040000, + 0x6E040001, 0x71040000, 0x70040001, 0x73040000, + 0x72040001, 0x75040000, 0x74040001, 0x77040000, + 0x76040001, 0x79040000, 0x78040001, 0x7B040000, + 0x7A040001, 0x7D040000, 0x7C040001, 0x7F040000, + 0x7E040001, 0x81040000, 0x80040001, 0x8B040000, + 0x8A040001, 0x8D040000, 0x8C040001, 0x8F040000, + 0x8E040001, 0x91040000, 0x90040001, 0x93040000, + 0x92040001, 0x95040000, 0x94040001, 0x97040000, + 0x96040001, 0x99040000, 0x98040001, 0x9B040000, + 0x9A040001, 0x9D040000, 0x9C040001, 0x9F040000, + 0x9E040001, 0xA1040000, 0xA0040001, 0xA3040000, + 0xA2040001, 0xA5040000, 0xA4040001, 0xA7040000, + 0xA6040001, 0xA9040000, 0xA8040001, 0xAB040000, + 0xAA040001, 0xAD040000, 0xAC040001, 0xAF040000, + 0xAE040001, 0xB1040000, 0xB0040001, 0xB3040000, + 0xB2040001, 0xB5040000, 0xB4040001, 0xB7040000, + 0xB6040001, 0xB9040000, 0xB8040001, 0xBB040000, + 0xBA040001, 0xBD040000, 0xBC040001, 0xBF040000, + 0xBE040001, 0xC2040000, 0xC1040001, 0xC4040000, + 0xC3040001, 0xC6040000, 0xC5040001, 0xC8040000, + 0xC7040001, 0xCA040000, 0xC9040001, 0xCC040000, + 0xCB040001, 0xCE040000, 0xCD040001, 0xCF040000, + 0xC0040001, 0xD1040000, 0xD0040001, 0xD3040000, + 0xD2040001, 0xD5040000, 0xD4040001, 0xD7040000, + 0xD6040001, 0xD9040000, 0xD8040001, 0xDB040000, + 0xDA040001, 0xDD040000, 0xDC040001, 0xDF040000, + 0xDE040001, 0xE1040000, 0xE0040001, 0xE3040000, + 0xE2040001, 0xE5040000, 0xE4040001, 0xE7040000, + 0xE6040001, 0xE9040000, 0xE8040001, 0xEB040000, + 0xEA040001, 0xED040000, 0xEC040001, 0xEF040000, + 0xEE040001, 0xF1040000, 0xF0040001, 0xF3040000, + 0xF2040001, 0xF5040000, 0xF4040001, 0xF7040000, + 0xF6040001, 0xF9040000, 0xF8040001, 0xFB040000, + 0xFA040001, 0xFD040000, 0xFC040001, 0xFF040000, + 0xFE040001, 0x01050000, 0x00050001, 0x03050000, + 0x02050001, 0x05050000, 0x04050001, 0x07050000, + 0x06050001, 0x09050000, 0x08050001, 0x0B050000, + 0x0A050001, 0x0D050000, 0x0C050001, 0x0F050000, + 0x0E050001, 0x11050000, 0x10050001, 0x13050000, + 0x12050001, 0x15050000, 0x14050001, 0x17050000, + 0x16050001, 0x19050000, 0x18050001, 0x1B050000, + 0x1A050001, 0x1D050000, 0x1C050001, 0x1F050000, + 0x1E050001, 0x21050000, 0x20050001, 0x23050000, + 0x22050001, 0x25050000, 0x24050001, 0x27050000, + 0x26050001, 0x29050000, 0x28050001, 0x2B050000, + 0x2A050001, 0x2D050000, 0x2C050001, 0x2F050000, + 0x2E050001, 0x61050000, 0x31050001, 0x62050000, + 0x32050001, 0x63050000, 0x33050001, 0x64050000, + 0x34050001, 0x65050000, 0x35050001, 0x66050000, + 0x36050001, 0x67050000, 0x37050001, 0x68050000, + 0x38050001, 0x69050000, 0x39050001, 0x6A050000, + 0x3A050001, 0x6B050000, 0x3B050001, 0x6C050000, + 0x3C050001, 0x6D050000, 0x3D050001, 0x6E050000, + 0x3E050001, 0x6F050000, 0x3F050001, 0x70050000, + 0x40050001, 0x71050000, 0x41050001, 0x72050000, + 0x42050001, 0x73050000, 0x43050001, 0x74050000, + 0x44050001, 0x75050000, 0x45050001, 0x76050000, + 0x46050001, 0x77050000, 0x47050001, 0x78050000, + 0x48050001, 0x79050000, 0x49050001, 0x7A050000, + 0x4A050001, 0x7B050000, 0x4B050001, 0x7C050000, + 0x4C050001, 0x7D050000, 0x4D050001, 0x7E050000, + 0x4E050001, 0x7F050000, 0x4F050001, 0x80050000, + 0x50050001, 0x81050000, 0x51050001, 0x82050000, + 0x52050001, 0x83050000, 0x53050001, 0x84050000, + 0x54050001, 0x85050000, 0x55050001, 0x86050000, + 0x56050001, 0x87050000, 0x0C000002, 0xD0100000, + 0x901C0001, 0xD1100000, 0x911C0001, 0xD2100000, + 0x921C0001, 0xD3100000, 0x931C0001, 0xD4100000, + 0x941C0001, 0xD5100000, 0x951C0001, 0xD6100000, + 0x961C0001, 0xD7100000, 0x971C0001, 0xD8100000, + 0x981C0001, 0xD9100000, 0x991C0001, 0xDA100000, + 0x9A1C0001, 0xDB100000, 0x9B1C0001, 0xDC100000, + 0x9C1C0001, 0xDD100000, 0x9D1C0001, 0xDE100000, + 0x9E1C0001, 0xDF100000, 0x9F1C0001, 0xE0100000, + 0xA01C0001, 0xE1100000, 0xA11C0001, 0xE2100000, + 0xA21C0001, 0xE3100000, 0xA31C0001, 0xE4100000, + 0xA41C0001, 0xE5100000, 0xA51C0001, 0xE6100000, + 0xA61C0001, 0xE7100000, 0xA71C0001, 0xE8100000, + 0xA81C0001, 0xE9100000, 0xA91C0001, 0xEA100000, + 0xAA1C0001, 0xEB100000, 0xAB1C0001, 0xEC100000, + 0xAC1C0001, 0xED100000, 0xAD1C0001, 0xEE100000, + 0xAE1C0001, 0xEF100000, 0xAF1C0001, 0xF0100000, + 0xB01C0001, 0xF1100000, 0xB11C0001, 0xF2100000, + 0xB21C0001, 0xF3100000, 0xB31C0001, 0xF4100000, + 0xB41C0001, 0xF5100000, 0xB51C0001, 0xF6100000, + 0xB61C0001, 0xF7100000, 0xB71C0001, 0xF8100000, + 0xB81C0001, 0xF9100000, 0xB91C0001, 0xFA100000, + 0xBA1C0001, 0xFD100000, 0xBD1C0001, 0xFE100000, + 0xBE1C0001, 0xFF100000, 0xBF1C0001, 0xF8130000, + 0xF0130001, 0xF9130000, 0xF1130001, 0xFA130000, + 0xF2130001, 0xFB130000, 0xF3130001, 0xFC130000, + 0xF4130001, 0xFD130000, 0xF5130001, 0x801C0000, + 0x12040001, 0x811C0000, 0x14040001, 0x821C0000, + 0x1E040001, 0x831C0000, 0x21040001, 0x841C0000, + 0x22040001, 0x851C0000, 0x22040001, 0x861C0000, + 0x2A040001, 0x871C0000, 0x62040001, 0x881C0000, + 0x4AA60001, 0x791D0000, 0x7DA70001, 0x7D1D0000, + 0x632C0001, 0x8E1D0000, 0xC6A70001, 0x011E0000, + 0x001E0001, 0x031E0000, 0x021E0001, 0x051E0000, + 0x041E0001, 0x071E0000, 0x061E0001, 0x091E0000, + 0x081E0001, 0x0B1E0000, 0x0A1E0001, 0x0D1E0000, + 0x0C1E0001, 0x0F1E0000, 0x0E1E0001, 0x111E0000, + 0x101E0001, 0x131E0000, 0x121E0001, 0x151E0000, + 0x141E0001, 0x171E0000, 0x161E0001, 0x191E0000, + 0x181E0001, 0x1B1E0000, 0x1A1E0001, 0x1D1E0000, + 0x1C1E0001, 0x1F1E0000, 0x1E1E0001, 0x211E0000, + 0x201E0001, 0x231E0000, 0x221E0001, 0x251E0000, + 0x241E0001, 0x271E0000, 0x261E0001, 0x291E0000, + 0x281E0001, 0x2B1E0000, 0x2A1E0001, 0x2D1E0000, + 0x2C1E0001, 0x2F1E0000, 0x2E1E0001, 0x311E0000, + 0x301E0001, 0x331E0000, 0x321E0001, 0x351E0000, + 0x341E0001, 0x371E0000, 0x361E0001, 0x391E0000, + 0x381E0001, 0x3B1E0000, 0x3A1E0001, 0x3D1E0000, + 0x3C1E0001, 0x3F1E0000, 0x3E1E0001, 0x411E0000, + 0x401E0001, 0x431E0000, 0x421E0001, 0x451E0000, + 0x441E0001, 0x471E0000, 0x461E0001, 0x491E0000, + 0x481E0001, 0x4B1E0000, 0x4A1E0001, 0x4D1E0000, + 0x4C1E0001, 0x4F1E0000, 0x4E1E0001, 0x511E0000, + 0x501E0001, 0x531E0000, 0x521E0001, 0x551E0000, + 0x541E0001, 0x571E0000, 0x561E0001, 0x591E0000, + 0x581E0001, 0x5B1E0000, 0x5A1E0001, 0x5D1E0000, + 0x5C1E0001, 0x5F1E0000, 0x5E1E0001, 0x611E0000, + 0x601E0001, 0x631E0000, 0x621E0001, 0x651E0000, + 0x641E0001, 0x671E0000, 0x661E0001, 0x691E0000, + 0x681E0001, 0x6B1E0000, 0x6A1E0001, 0x6D1E0000, + 0x6C1E0001, 0x6F1E0000, 0x6E1E0001, 0x711E0000, + 0x701E0001, 0x731E0000, 0x721E0001, 0x751E0000, + 0x741E0001, 0x771E0000, 0x761E0001, 0x791E0000, + 0x781E0001, 0x7B1E0000, 0x7A1E0001, 0x7D1E0000, + 0x7C1E0001, 0x7F1E0000, 0x7E1E0001, 0x811E0000, + 0x801E0001, 0x831E0000, 0x821E0001, 0x851E0000, + 0x841E0001, 0x871E0000, 0x861E0001, 0x891E0000, + 0x881E0001, 0x8B1E0000, 0x8A1E0001, 0x8D1E0000, + 0x8C1E0001, 0x8F1E0000, 0x8E1E0001, 0x911E0000, + 0x901E0001, 0x931E0000, 0x921E0001, 0x951E0000, + 0x941E0001, 0x961E0000, 0x0E000002, 0x971E0000, + 0x10000002, 0x981E0000, 0x12000002, 0x991E0000, + 0x14000002, 0x9A1E0000, 0x16000002, 0x9B1E0000, + 0x601E0001, 0xA11E0000, 0xA01E0001, 0xA31E0000, + 0xA21E0001, 0xA51E0000, 0xA41E0001, 0xA71E0000, + 0xA61E0001, 0xA91E0000, 0xA81E0001, 0xAB1E0000, + 0xAA1E0001, 0xAD1E0000, 0xAC1E0001, 0xAF1E0000, + 0xAE1E0001, 0xB11E0000, 0xB01E0001, 0xB31E0000, + 0xB21E0001, 0xB51E0000, 0xB41E0001, 0xB71E0000, + 0xB61E0001, 0xB91E0000, 0xB81E0001, 0xBB1E0000, + 0xBA1E0001, 0xBD1E0000, 0xBC1E0001, 0xBF1E0000, + 0xBE1E0001, 0xC11E0000, 0xC01E0001, 0xC31E0000, + 0xC21E0001, 0xC51E0000, 0xC41E0001, 0xC71E0000, + 0xC61E0001, 0xC91E0000, 0xC81E0001, 0xCB1E0000, + 0xCA1E0001, 0xCD1E0000, 0xCC1E0001, 0xCF1E0000, + 0xCE1E0001, 0xD11E0000, 0xD01E0001, 0xD31E0000, + 0xD21E0001, 0xD51E0000, 0xD41E0001, 0xD71E0000, + 0xD61E0001, 0xD91E0000, 0xD81E0001, 0xDB1E0000, + 0xDA1E0001, 0xDD1E0000, 0xDC1E0001, 0xDF1E0000, + 0xDE1E0001, 0xE11E0000, 0xE01E0001, 0xE31E0000, + 0xE21E0001, 0xE51E0000, 0xE41E0001, 0xE71E0000, + 0xE61E0001, 0xE91E0000, 0xE81E0001, 0xEB1E0000, + 0xEA1E0001, 0xED1E0000, 0xEC1E0001, 0xEF1E0000, + 0xEE1E0001, 0xF11E0000, 0xF01E0001, 0xF31E0000, + 0xF21E0001, 0xF51E0000, 0xF41E0001, 0xF71E0000, + 0xF61E0001, 0xF91E0000, 0xF81E0001, 0xFB1E0000, + 0xFA1E0001, 0xFD1E0000, 0xFC1E0001, 0xFF1E0000, + 0xFE1E0001, 0x001F0000, 0x081F0001, 0x011F0000, + 0x091F0001, 0x021F0000, 0x0A1F0001, 0x031F0000, + 0x0B1F0001, 0x041F0000, 0x0C1F0001, 0x051F0000, + 0x0D1F0001, 0x061F0000, 0x0E1F0001, 0x071F0000, + 0x0F1F0001, 0x101F0000, 0x181F0001, 0x111F0000, + 0x191F0001, 0x121F0000, 0x1A1F0001, 0x131F0000, + 0x1B1F0001, 0x141F0000, 0x1C1F0001, 0x151F0000, + 0x1D1F0001, 0x201F0000, 0x281F0001, 0x211F0000, + 0x291F0001, 0x221F0000, 0x2A1F0001, 0x231F0000, + 0x2B1F0001, 0x241F0000, 0x2C1F0001, 0x251F0000, + 0x2D1F0001, 0x261F0000, 0x2E1F0001, 0x271F0000, + 0x2F1F0001, 0x301F0000, 0x381F0001, 0x311F0000, + 0x391F0001, 0x321F0000, 0x3A1F0001, 0x331F0000, + 0x3B1F0001, 0x341F0000, 0x3C1F0001, 0x351F0000, + 0x3D1F0001, 0x361F0000, 0x3E1F0001, 0x371F0000, + 0x3F1F0001, 0x401F0000, 0x481F0001, 0x411F0000, + 0x491F0001, 0x421F0000, 0x4A1F0001, 0x431F0000, + 0x4B1F0001, 0x441F0000, 0x4C1F0001, 0x451F0000, + 0x4D1F0001, 0x501F0000, 0x18000002, 0x511F0000, + 0x591F0001, 0x521F0000, 0x1A000003, 0x531F0000, + 0x5B1F0001, 0x541F0000, 0x1D000003, 0x551F0000, + 0x5D1F0001, 0x561F0000, 0x20000003, 0x571F0000, + 0x5F1F0001, 0x601F0000, 0x681F0001, 0x611F0000, + 0x691F0001, 0x621F0000, 0x6A1F0001, 0x631F0000, + 0x6B1F0001, 0x641F0000, 0x6C1F0001, 0x651F0000, + 0x6D1F0001, 0x661F0000, 0x6E1F0001, 0x671F0000, + 0x6F1F0001, 0x701F0000, 0xBA1F0001, 0x711F0000, + 0xBB1F0001, 0x721F0000, 0xC81F0001, 0x731F0000, + 0xC91F0001, 0x741F0000, 0xCA1F0001, 0x751F0000, + 0xCB1F0001, 0x761F0000, 0xDA1F0001, 0x771F0000, + 0xDB1F0001, 0x781F0000, 0xF81F0001, 0x791F0000, + 0xF91F0001, 0x7A1F0000, 0xEA1F0001, 0x7B1F0000, + 0xEB1F0001, 0x7C1F0000, 0xFA1F0001, 0x7D1F0000, + 0xFB1F0001, 0x801F0000, 0x23000002, 0x811F0000, + 0x25000002, 0x821F0000, 0x27000002, 0x831F0000, + 0x29000002, 0x841F0000, 0x2B000002, 0x851F0000, + 0x2D000002, 0x861F0000, 0x2F000002, 0x871F0000, + 0x31000002, 0x881F0000, 0x33000002, 0x891F0000, + 0x35000002, 0x8A1F0000, 0x37000002, 0x8B1F0000, + 0x39000002, 0x8C1F0000, 0x3B000002, 0x8D1F0000, + 0x3D000002, 0x8E1F0000, 0x3F000002, 0x8F1F0000, + 0x41000002, 0x901F0000, 0x43000002, 0x911F0000, + 0x45000002, 0x921F0000, 0x47000002, 0x931F0000, + 0x49000002, 0x941F0000, 0x4B000002, 0x951F0000, + 0x4D000002, 0x961F0000, 0x4F000002, 0x971F0000, + 0x51000002, 0x981F0000, 0x53000002, 0x991F0000, + 0x55000002, 0x9A1F0000, 0x57000002, 0x9B1F0000, + 0x59000002, 0x9C1F0000, 0x5B000002, 0x9D1F0000, + 0x5D000002, 0x9E1F0000, 0x5F000002, 0x9F1F0000, + 0x61000002, 0xA01F0000, 0x63000002, 0xA11F0000, + 0x65000002, 0xA21F0000, 0x67000002, 0xA31F0000, + 0x69000002, 0xA41F0000, 0x6B000002, 0xA51F0000, + 0x6D000002, 0xA61F0000, 0x6F000002, 0xA71F0000, + 0x71000002, 0xA81F0000, 0x73000002, 0xA91F0000, + 0x75000002, 0xAA1F0000, 0x77000002, 0xAB1F0000, + 0x79000002, 0xAC1F0000, 0x7B000002, 0xAD1F0000, + 0x7D000002, 0xAE1F0000, 0x7F000002, 0xAF1F0000, + 0x81000002, 0xB01F0000, 0xB81F0001, 0xB11F0000, + 0xB91F0001, 0xB21F0000, 0x83000002, 0xB31F0000, + 0x85000002, 0xB41F0000, 0x87000002, 0xB61F0000, + 0x89000002, 0xB71F0000, 0x8B000003, 0xBC1F0000, + 0x8E000002, 0xBE1F0000, 0x99030001, 0xC21F0000, + 0x90000002, 0xC31F0000, 0x92000002, 0xC41F0000, + 0x94000002, 0xC61F0000, 0x96000002, 0xC71F0000, + 0x98000003, 0xCC1F0000, 0x9B000002, 0xD01F0000, + 0xD81F0001, 0xD11F0000, 0xD91F0001, 0xD21F0000, + 0x9D000003, 0xD31F0000, 0xA0000003, 0xD61F0000, + 0xA3000002, 0xD71F0000, 0xA5000003, 0xE01F0000, + 0xE81F0001, 0xE11F0000, 0xE91F0001, 0xE21F0000, + 0xA8000003, 0xE31F0000, 0xAB000003, 0xE41F0000, + 0xAE000002, 0xE51F0000, 0xEC1F0001, 0xE61F0000, + 0xB0000002, 0xE71F0000, 0xB2000003, 0xF21F0000, + 0xB5000002, 0xF31F0000, 0xB7000002, 0xF41F0000, + 0xB9000002, 0xF61F0000, 0xBB000002, 0xF71F0000, + 0xBD000003, 0xFC1F0000, 0xC0000002, 0x4E210000, + 0x32210001, 0x70210000, 0x60210001, 0x71210000, + 0x61210001, 0x72210000, 0x62210001, 0x73210000, + 0x63210001, 0x74210000, 0x64210001, 0x75210000, + 0x65210001, 0x76210000, 0x66210001, 0x77210000, + 0x67210001, 0x78210000, 0x68210001, 0x79210000, + 0x69210001, 0x7A210000, 0x6A210001, 0x7B210000, + 0x6B210001, 0x7C210000, 0x6C210001, 0x7D210000, + 0x6D210001, 0x7E210000, 0x6E210001, 0x7F210000, + 0x6F210001, 0x84210000, 0x83210001, 0xD0240000, + 0xB6240001, 0xD1240000, 0xB7240001, 0xD2240000, + 0xB8240001, 0xD3240000, 0xB9240001, 0xD4240000, + 0xBA240001, 0xD5240000, 0xBB240001, 0xD6240000, + 0xBC240001, 0xD7240000, 0xBD240001, 0xD8240000, + 0xBE240001, 0xD9240000, 0xBF240001, 0xDA240000, + 0xC0240001, 0xDB240000, 0xC1240001, 0xDC240000, + 0xC2240001, 0xDD240000, 0xC3240001, 0xDE240000, + 0xC4240001, 0xDF240000, 0xC5240001, 0xE0240000, + 0xC6240001, 0xE1240000, 0xC7240001, 0xE2240000, + 0xC8240001, 0xE3240000, 0xC9240001, 0xE4240000, + 0xCA240001, 0xE5240000, 0xCB240001, 0xE6240000, + 0xCC240001, 0xE7240000, 0xCD240001, 0xE8240000, + 0xCE240001, 0xE9240000, 0xCF240001, 0x302C0000, + 0x002C0001, 0x312C0000, 0x012C0001, 0x322C0000, + 0x022C0001, 0x332C0000, 0x032C0001, 0x342C0000, + 0x042C0001, 0x352C0000, 0x052C0001, 0x362C0000, + 0x062C0001, 0x372C0000, 0x072C0001, 0x382C0000, + 0x082C0001, 0x392C0000, 0x092C0001, 0x3A2C0000, + 0x0A2C0001, 0x3B2C0000, 0x0B2C0001, 0x3C2C0000, + 0x0C2C0001, 0x3D2C0000, 0x0D2C0001, 0x3E2C0000, + 0x0E2C0001, 0x3F2C0000, 0x0F2C0001, 0x402C0000, + 0x102C0001, 0x412C0000, 0x112C0001, 0x422C0000, + 0x122C0001, 0x432C0000, 0x132C0001, 0x442C0000, + 0x142C0001, 0x452C0000, 0x152C0001, 0x462C0000, + 0x162C0001, 0x472C0000, 0x172C0001, 0x482C0000, + 0x182C0001, 0x492C0000, 0x192C0001, 0x4A2C0000, + 0x1A2C0001, 0x4B2C0000, 0x1B2C0001, 0x4C2C0000, + 0x1C2C0001, 0x4D2C0000, 0x1D2C0001, 0x4E2C0000, + 0x1E2C0001, 0x4F2C0000, 0x1F2C0001, 0x502C0000, + 0x202C0001, 0x512C0000, 0x212C0001, 0x522C0000, + 0x222C0001, 0x532C0000, 0x232C0001, 0x542C0000, + 0x242C0001, 0x552C0000, 0x252C0001, 0x562C0000, + 0x262C0001, 0x572C0000, 0x272C0001, 0x582C0000, + 0x282C0001, 0x592C0000, 0x292C0001, 0x5A2C0000, + 0x2A2C0001, 0x5B2C0000, 0x2B2C0001, 0x5C2C0000, + 0x2C2C0001, 0x5D2C0000, 0x2D2C0001, 0x5E2C0000, + 0x2E2C0001, 0x5F2C0000, 0x2F2C0001, 0x612C0000, + 0x602C0001, 0x652C0000, 0x3A020001, 0x662C0000, + 0x3E020001, 0x682C0000, 0x672C0001, 0x6A2C0000, + 0x692C0001, 0x6C2C0000, 0x6B2C0001, 0x732C0000, + 0x722C0001, 0x762C0000, 0x752C0001, 0x812C0000, + 0x802C0001, 0x832C0000, 0x822C0001, 0x852C0000, + 0x842C0001, 0x872C0000, 0x862C0001, 0x892C0000, + 0x882C0001, 0x8B2C0000, 0x8A2C0001, 0x8D2C0000, + 0x8C2C0001, 0x8F2C0000, 0x8E2C0001, 0x912C0000, + 0x902C0001, 0x932C0000, 0x922C0001, 0x952C0000, + 0x942C0001, 0x972C0000, 0x962C0001, 0x992C0000, + 0x982C0001, 0x9B2C0000, 0x9A2C0001, 0x9D2C0000, + 0x9C2C0001, 0x9F2C0000, 0x9E2C0001, 0xA12C0000, + 0xA02C0001, 0xA32C0000, 0xA22C0001, 0xA52C0000, + 0xA42C0001, 0xA72C0000, 0xA62C0001, 0xA92C0000, + 0xA82C0001, 0xAB2C0000, 0xAA2C0001, 0xAD2C0000, + 0xAC2C0001, 0xAF2C0000, 0xAE2C0001, 0xB12C0000, + 0xB02C0001, 0xB32C0000, 0xB22C0001, 0xB52C0000, + 0xB42C0001, 0xB72C0000, 0xB62C0001, 0xB92C0000, + 0xB82C0001, 0xBB2C0000, 0xBA2C0001, 0xBD2C0000, + 0xBC2C0001, 0xBF2C0000, 0xBE2C0001, 0xC12C0000, + 0xC02C0001, 0xC32C0000, 0xC22C0001, 0xC52C0000, + 0xC42C0001, 0xC72C0000, 0xC62C0001, 0xC92C0000, + 0xC82C0001, 0xCB2C0000, 0xCA2C0001, 0xCD2C0000, + 0xCC2C0001, 0xCF2C0000, 0xCE2C0001, 0xD12C0000, + 0xD02C0001, 0xD32C0000, 0xD22C0001, 0xD52C0000, + 0xD42C0001, 0xD72C0000, 0xD62C0001, 0xD92C0000, + 0xD82C0001, 0xDB2C0000, 0xDA2C0001, 0xDD2C0000, + 0xDC2C0001, 0xDF2C0000, 0xDE2C0001, 0xE12C0000, + 0xE02C0001, 0xE32C0000, 0xE22C0001, 0xEC2C0000, + 0xEB2C0001, 0xEE2C0000, 0xED2C0001, 0xF32C0000, + 0xF22C0001, 0x002D0000, 0xA0100001, 0x012D0000, + 0xA1100001, 0x022D0000, 0xA2100001, 0x032D0000, + 0xA3100001, 0x042D0000, 0xA4100001, 0x052D0000, + 0xA5100001, 0x062D0000, 0xA6100001, 0x072D0000, + 0xA7100001, 0x082D0000, 0xA8100001, 0x092D0000, + 0xA9100001, 0x0A2D0000, 0xAA100001, 0x0B2D0000, + 0xAB100001, 0x0C2D0000, 0xAC100001, 0x0D2D0000, + 0xAD100001, 0x0E2D0000, 0xAE100001, 0x0F2D0000, + 0xAF100001, 0x102D0000, 0xB0100001, 0x112D0000, + 0xB1100001, 0x122D0000, 0xB2100001, 0x132D0000, + 0xB3100001, 0x142D0000, 0xB4100001, 0x152D0000, + 0xB5100001, 0x162D0000, 0xB6100001, 0x172D0000, + 0xB7100001, 0x182D0000, 0xB8100001, 0x192D0000, + 0xB9100001, 0x1A2D0000, 0xBA100001, 0x1B2D0000, + 0xBB100001, 0x1C2D0000, 0xBC100001, 0x1D2D0000, + 0xBD100001, 0x1E2D0000, 0xBE100001, 0x1F2D0000, + 0xBF100001, 0x202D0000, 0xC0100001, 0x212D0000, + 0xC1100001, 0x222D0000, 0xC2100001, 0x232D0000, + 0xC3100001, 0x242D0000, 0xC4100001, 0x252D0000, + 0xC5100001, 0x272D0000, 0xC7100001, 0x2D2D0000, + 0xCD100001, 0x41A60000, 0x40A60001, 0x43A60000, + 0x42A60001, 0x45A60000, 0x44A60001, 0x47A60000, + 0x46A60001, 0x49A60000, 0x48A60001, 0x4BA60000, + 0x4AA60001, 0x4DA60000, 0x4CA60001, 0x4FA60000, + 0x4EA60001, 0x51A60000, 0x50A60001, 0x53A60000, + 0x52A60001, 0x55A60000, 0x54A60001, 0x57A60000, + 0x56A60001, 0x59A60000, 0x58A60001, 0x5BA60000, + 0x5AA60001, 0x5DA60000, 0x5CA60001, 0x5FA60000, + 0x5EA60001, 0x61A60000, 0x60A60001, 0x63A60000, + 0x62A60001, 0x65A60000, 0x64A60001, 0x67A60000, + 0x66A60001, 0x69A60000, 0x68A60001, 0x6BA60000, + 0x6AA60001, 0x6DA60000, 0x6CA60001, 0x81A60000, + 0x80A60001, 0x83A60000, 0x82A60001, 0x85A60000, + 0x84A60001, 0x87A60000, 0x86A60001, 0x89A60000, + 0x88A60001, 0x8BA60000, 0x8AA60001, 0x8DA60000, + 0x8CA60001, 0x8FA60000, 0x8EA60001, 0x91A60000, + 0x90A60001, 0x93A60000, 0x92A60001, 0x95A60000, + 0x94A60001, 0x97A60000, 0x96A60001, 0x99A60000, + 0x98A60001, 0x9BA60000, 0x9AA60001, 0x23A70000, + 0x22A70001, 0x25A70000, 0x24A70001, 0x27A70000, + 0x26A70001, 0x29A70000, 0x28A70001, 0x2BA70000, + 0x2AA70001, 0x2DA70000, 0x2CA70001, 0x2FA70000, + 0x2EA70001, 0x33A70000, 0x32A70001, 0x35A70000, + 0x34A70001, 0x37A70000, 0x36A70001, 0x39A70000, + 0x38A70001, 0x3BA70000, 0x3AA70001, 0x3DA70000, + 0x3CA70001, 0x3FA70000, 0x3EA70001, 0x41A70000, + 0x40A70001, 0x43A70000, 0x42A70001, 0x45A70000, + 0x44A70001, 0x47A70000, 0x46A70001, 0x49A70000, + 0x48A70001, 0x4BA70000, 0x4AA70001, 0x4DA70000, + 0x4CA70001, 0x4FA70000, 0x4EA70001, 0x51A70000, + 0x50A70001, 0x53A70000, 0x52A70001, 0x55A70000, + 0x54A70001, 0x57A70000, 0x56A70001, 0x59A70000, + 0x58A70001, 0x5BA70000, 0x5AA70001, 0x5DA70000, + 0x5CA70001, 0x5FA70000, 0x5EA70001, 0x61A70000, + 0x60A70001, 0x63A70000, 0x62A70001, 0x65A70000, + 0x64A70001, 0x67A70000, 0x66A70001, 0x69A70000, + 0x68A70001, 0x6BA70000, 0x6AA70001, 0x6DA70000, + 0x6CA70001, 0x6FA70000, 0x6EA70001, 0x7AA70000, + 0x79A70001, 0x7CA70000, 0x7BA70001, 0x7FA70000, + 0x7EA70001, 0x81A70000, 0x80A70001, 0x83A70000, + 0x82A70001, 0x85A70000, 0x84A70001, 0x87A70000, + 0x86A70001, 0x8CA70000, 0x8BA70001, 0x91A70000, + 0x90A70001, 0x93A70000, 0x92A70001, 0x94A70000, + 0xC4A70001, 0x97A70000, 0x96A70001, 0x99A70000, + 0x98A70001, 0x9BA70000, 0x9AA70001, 0x9DA70000, + 0x9CA70001, 0x9FA70000, 0x9EA70001, 0xA1A70000, + 0xA0A70001, 0xA3A70000, 0xA2A70001, 0xA5A70000, + 0xA4A70001, 0xA7A70000, 0xA6A70001, 0xA9A70000, + 0xA8A70001, 0xB5A70000, 0xB4A70001, 0xB7A70000, + 0xB6A70001, 0xB9A70000, 0xB8A70001, 0xBBA70000, + 0xBAA70001, 0xBDA70000, 0xBCA70001, 0xBFA70000, + 0xBEA70001, 0xC1A70000, 0xC0A70001, 0xC3A70000, + 0xC2A70001, 0xC8A70000, 0xC7A70001, 0xCAA70000, + 0xC9A70001, 0xD1A70000, 0xD0A70001, 0xD7A70000, + 0xD6A70001, 0xD9A70000, 0xD8A70001, 0xF6A70000, + 0xF5A70001, 0x53AB0000, 0xB3A70001, 0x70AB0000, + 0xA0130001, 0x71AB0000, 0xA1130001, 0x72AB0000, + 0xA2130001, 0x73AB0000, 0xA3130001, 0x74AB0000, + 0xA4130001, 0x75AB0000, 0xA5130001, 0x76AB0000, + 0xA6130001, 0x77AB0000, 0xA7130001, 0x78AB0000, + 0xA8130001, 0x79AB0000, 0xA9130001, 0x7AAB0000, + 0xAA130001, 0x7BAB0000, 0xAB130001, 0x7CAB0000, + 0xAC130001, 0x7DAB0000, 0xAD130001, 0x7EAB0000, + 0xAE130001, 0x7FAB0000, 0xAF130001, 0x80AB0000, + 0xB0130001, 0x81AB0000, 0xB1130001, 0x82AB0000, + 0xB2130001, 0x83AB0000, 0xB3130001, 0x84AB0000, + 0xB4130001, 0x85AB0000, 0xB5130001, 0x86AB0000, + 0xB6130001, 0x87AB0000, 0xB7130001, 0x88AB0000, + 0xB8130001, 0x89AB0000, 0xB9130001, 0x8AAB0000, + 0xBA130001, 0x8BAB0000, 0xBB130001, 0x8CAB0000, + 0xBC130001, 0x8DAB0000, 0xBD130001, 0x8EAB0000, + 0xBE130001, 0x8FAB0000, 0xBF130001, 0x90AB0000, + 0xC0130001, 0x91AB0000, 0xC1130001, 0x92AB0000, + 0xC2130001, 0x93AB0000, 0xC3130001, 0x94AB0000, + 0xC4130001, 0x95AB0000, 0xC5130001, 0x96AB0000, + 0xC6130001, 0x97AB0000, 0xC7130001, 0x98AB0000, + 0xC8130001, 0x99AB0000, 0xC9130001, 0x9AAB0000, + 0xCA130001, 0x9BAB0000, 0xCB130001, 0x9CAB0000, + 0xCC130001, 0x9DAB0000, 0xCD130001, 0x9EAB0000, + 0xCE130001, 0x9FAB0000, 0xCF130001, 0xA0AB0000, + 0xD0130001, 0xA1AB0000, 0xD1130001, 0xA2AB0000, + 0xD2130001, 0xA3AB0000, 0xD3130001, 0xA4AB0000, + 0xD4130001, 0xA5AB0000, 0xD5130001, 0xA6AB0000, + 0xD6130001, 0xA7AB0000, 0xD7130001, 0xA8AB0000, + 0xD8130001, 0xA9AB0000, 0xD9130001, 0xAAAB0000, + 0xDA130001, 0xABAB0000, 0xDB130001, 0xACAB0000, + 0xDC130001, 0xADAB0000, 0xDD130001, 0xAEAB0000, + 0xDE130001, 0xAFAB0000, 0xDF130001, 0xB0AB0000, + 0xE0130001, 0xB1AB0000, 0xE1130001, 0xB2AB0000, + 0xE2130001, 0xB3AB0000, 0xE3130001, 0xB4AB0000, + 0xE4130001, 0xB5AB0000, 0xE5130001, 0xB6AB0000, + 0xE6130001, 0xB7AB0000, 0xE7130001, 0xB8AB0000, + 0xE8130001, 0xB9AB0000, 0xE9130001, 0xBAAB0000, + 0xEA130001, 0xBBAB0000, 0xEB130001, 0xBCAB0000, + 0xEC130001, 0xBDAB0000, 0xED130001, 0xBEAB0000, + 0xEE130001, 0xBFAB0000, 0xEF130001, 0x00FB0000, + 0xC2000002, 0x01FB0000, 0xC4000002, 0x02FB0000, + 0xC6000002, 0x03FB0000, 0xC8000003, 0x04FB0000, + 0xCB000003, 0x05FB0000, 0xCE000002, 0x06FB0000, + 0xD0000002, 0x13FB0000, 0xD2000002, 0x14FB0000, + 0xD4000002, 0x15FB0000, 0xD6000002, 0x16FB0000, + 0xD8000002, 0x17FB0000, 0xDA000002, 0x41FF0000, + 0x21FF0001, 0x42FF0000, 0x22FF0001, 0x43FF0000, + 0x23FF0001, 0x44FF0000, 0x24FF0001, 0x45FF0000, + 0x25FF0001, 0x46FF0000, 0x26FF0001, 0x47FF0000, + 0x27FF0001, 0x48FF0000, 0x28FF0001, 0x49FF0000, + 0x29FF0001, 0x4AFF0000, 0x2AFF0001, 0x4BFF0000, + 0x2BFF0001, 0x4CFF0000, 0x2CFF0001, 0x4DFF0000, + 0x2DFF0001, 0x4EFF0000, 0x2EFF0001, 0x4FFF0000, + 0x2FFF0001, 0x50FF0000, 0x30FF0001, 0x51FF0000, + 0x31FF0001, 0x52FF0000, 0x32FF0001, 0x53FF0000, + 0x33FF0001, 0x54FF0000, 0x34FF0001, 0x55FF0000, + 0x35FF0001, 0x56FF0000, 0x36FF0001, 0x57FF0000, + 0x37FF0001, 0x58FF0000, 0x38FF0001, 0x59FF0000, + 0x39FF0001, 0x5AFF0000, 0x3AFF0001, 0x28040100, + 0x00040181, 0x29040100, 0x01040181, 0x2A040100, + 0x02040181, 0x2B040100, 0x03040181, 0x2C040100, + 0x04040181, 0x2D040100, 0x05040181, 0x2E040100, + 0x06040181, 0x2F040100, 0x07040181, 0x30040100, + 0x08040181, 0x31040100, 0x09040181, 0x32040100, + 0x0A040181, 0x33040100, 0x0B040181, 0x34040100, + 0x0C040181, 0x35040100, 0x0D040181, 0x36040100, + 0x0E040181, 0x37040100, 0x0F040181, 0x38040100, + 0x10040181, 0x39040100, 0x11040181, 0x3A040100, + 0x12040181, 0x3B040100, 0x13040181, 0x3C040100, + 0x14040181, 0x3D040100, 0x15040181, 0x3E040100, + 0x16040181, 0x3F040100, 0x17040181, 0x40040100, + 0x18040181, 0x41040100, 0x19040181, 0x42040100, + 0x1A040181, 0x43040100, 0x1B040181, 0x44040100, + 0x1C040181, 0x45040100, 0x1D040181, 0x46040100, + 0x1E040181, 0x47040100, 0x1F040181, 0x48040100, + 0x20040181, 0x49040100, 0x21040181, 0x4A040100, + 0x22040181, 0x4B040100, 0x23040181, 0x4C040100, + 0x24040181, 0x4D040100, 0x25040181, 0x4E040100, + 0x26040181, 0x4F040100, 0x27040181, 0xD8040100, + 0xB0040181, 0xD9040100, 0xB1040181, 0xDA040100, + 0xB2040181, 0xDB040100, 0xB3040181, 0xDC040100, + 0xB4040181, 0xDD040100, 0xB5040181, 0xDE040100, + 0xB6040181, 0xDF040100, 0xB7040181, 0xE0040100, + 0xB8040181, 0xE1040100, 0xB9040181, 0xE2040100, + 0xBA040181, 0xE3040100, 0xBB040181, 0xE4040100, + 0xBC040181, 0xE5040100, 0xBD040181, 0xE6040100, + 0xBE040181, 0xE7040100, 0xBF040181, 0xE8040100, + 0xC0040181, 0xE9040100, 0xC1040181, 0xEA040100, + 0xC2040181, 0xEB040100, 0xC3040181, 0xEC040100, + 0xC4040181, 0xED040100, 0xC5040181, 0xEE040100, + 0xC6040181, 0xEF040100, 0xC7040181, 0xF0040100, + 0xC8040181, 0xF1040100, 0xC9040181, 0xF2040100, + 0xCA040181, 0xF3040100, 0xCB040181, 0xF4040100, + 0xCC040181, 0xF5040100, 0xCD040181, 0xF6040100, + 0xCE040181, 0xF7040100, 0xCF040181, 0xF8040100, + 0xD0040181, 0xF9040100, 0xD1040181, 0xFA040100, + 0xD2040181, 0xFB040100, 0xD3040181, 0x97050100, + 0x70050181, 0x98050100, 0x71050181, 0x99050100, + 0x72050181, 0x9A050100, 0x73050181, 0x9B050100, + 0x74050181, 0x9C050100, 0x75050181, 0x9D050100, + 0x76050181, 0x9E050100, 0x77050181, 0x9F050100, + 0x78050181, 0xA0050100, 0x79050181, 0xA1050100, + 0x7A050181, 0xA3050100, 0x7C050181, 0xA4050100, + 0x7D050181, 0xA5050100, 0x7E050181, 0xA6050100, + 0x7F050181, 0xA7050100, 0x80050181, 0xA8050100, + 0x81050181, 0xA9050100, 0x82050181, 0xAA050100, + 0x83050181, 0xAB050100, 0x84050181, 0xAC050100, + 0x85050181, 0xAD050100, 0x86050181, 0xAE050100, + 0x87050181, 0xAF050100, 0x88050181, 0xB0050100, + 0x89050181, 0xB1050100, 0x8A050181, 0xB3050100, + 0x8C050181, 0xB4050100, 0x8D050181, 0xB5050100, + 0x8E050181, 0xB6050100, 0x8F050181, 0xB7050100, + 0x90050181, 0xB8050100, 0x91050181, 0xB9050100, + 0x92050181, 0xBB050100, 0x94050181, 0xBC050100, + 0x95050181, 0xC00C0100, 0x800C0181, 0xC10C0100, + 0x810C0181, 0xC20C0100, 0x820C0181, 0xC30C0100, + 0x830C0181, 0xC40C0100, 0x840C0181, 0xC50C0100, + 0x850C0181, 0xC60C0100, 0x860C0181, 0xC70C0100, + 0x870C0181, 0xC80C0100, 0x880C0181, 0xC90C0100, + 0x890C0181, 0xCA0C0100, 0x8A0C0181, 0xCB0C0100, + 0x8B0C0181, 0xCC0C0100, 0x8C0C0181, 0xCD0C0100, + 0x8D0C0181, 0xCE0C0100, 0x8E0C0181, 0xCF0C0100, + 0x8F0C0181, 0xD00C0100, 0x900C0181, 0xD10C0100, + 0x910C0181, 0xD20C0100, 0x920C0181, 0xD30C0100, + 0x930C0181, 0xD40C0100, 0x940C0181, 0xD50C0100, + 0x950C0181, 0xD60C0100, 0x960C0181, 0xD70C0100, + 0x970C0181, 0xD80C0100, 0x980C0181, 0xD90C0100, + 0x990C0181, 0xDA0C0100, 0x9A0C0181, 0xDB0C0100, + 0x9B0C0181, 0xDC0C0100, 0x9C0C0181, 0xDD0C0100, + 0x9D0C0181, 0xDE0C0100, 0x9E0C0181, 0xDF0C0100, + 0x9F0C0181, 0xE00C0100, 0xA00C0181, 0xE10C0100, + 0xA10C0181, 0xE20C0100, 0xA20C0181, 0xE30C0100, + 0xA30C0181, 0xE40C0100, 0xA40C0181, 0xE50C0100, + 0xA50C0181, 0xE60C0100, 0xA60C0181, 0xE70C0100, + 0xA70C0181, 0xE80C0100, 0xA80C0181, 0xE90C0100, + 0xA90C0181, 0xEA0C0100, 0xAA0C0181, 0xEB0C0100, + 0xAB0C0181, 0xEC0C0100, 0xAC0C0181, 0xED0C0100, + 0xAD0C0181, 0xEE0C0100, 0xAE0C0181, 0xEF0C0100, + 0xAF0C0181, 0xF00C0100, 0xB00C0181, 0xF10C0100, + 0xB10C0181, 0xF20C0100, 0xB20C0181, 0xC0180100, + 0xA0180181, 0xC1180100, 0xA1180181, 0xC2180100, + 0xA2180181, 0xC3180100, 0xA3180181, 0xC4180100, + 0xA4180181, 0xC5180100, 0xA5180181, 0xC6180100, + 0xA6180181, 0xC7180100, 0xA7180181, 0xC8180100, + 0xA8180181, 0xC9180100, 0xA9180181, 0xCA180100, + 0xAA180181, 0xCB180100, 0xAB180181, 0xCC180100, + 0xAC180181, 0xCD180100, 0xAD180181, 0xCE180100, + 0xAE180181, 0xCF180100, 0xAF180181, 0xD0180100, + 0xB0180181, 0xD1180100, 0xB1180181, 0xD2180100, + 0xB2180181, 0xD3180100, 0xB3180181, 0xD4180100, + 0xB4180181, 0xD5180100, 0xB5180181, 0xD6180100, + 0xB6180181, 0xD7180100, 0xB7180181, 0xD8180100, + 0xB8180181, 0xD9180100, 0xB9180181, 0xDA180100, + 0xBA180181, 0xDB180100, 0xBB180181, 0xDC180100, + 0xBC180181, 0xDD180100, 0xBD180181, 0xDE180100, + 0xBE180181, 0xDF180100, 0xBF180181, 0x606E0100, + 0x406E0181, 0x616E0100, 0x416E0181, 0x626E0100, + 0x426E0181, 0x636E0100, 0x436E0181, 0x646E0100, + 0x446E0181, 0x656E0100, 0x456E0181, 0x666E0100, + 0x466E0181, 0x676E0100, 0x476E0181, 0x686E0100, + 0x486E0181, 0x696E0100, 0x496E0181, 0x6A6E0100, + 0x4A6E0181, 0x6B6E0100, 0x4B6E0181, 0x6C6E0100, + 0x4C6E0181, 0x6D6E0100, 0x4D6E0181, 0x6E6E0100, + 0x4E6E0181, 0x6F6E0100, 0x4F6E0181, 0x706E0100, + 0x506E0181, 0x716E0100, 0x516E0181, 0x726E0100, + 0x526E0181, 0x736E0100, 0x536E0181, 0x746E0100, + 0x546E0181, 0x756E0100, 0x556E0181, 0x766E0100, + 0x566E0181, 0x776E0100, 0x576E0181, 0x786E0100, + 0x586E0181, 0x796E0100, 0x596E0181, 0x7A6E0100, + 0x5A6E0181, 0x7B6E0100, 0x5B6E0181, 0x7C6E0100, + 0x5C6E0181, 0x7D6E0100, 0x5D6E0181, 0x7E6E0100, + 0x5E6E0181, 0x7F6E0100, 0x5F6E0181, 0x22E90100, + 0x00E90181, 0x23E90100, 0x01E90181, 0x24E90100, + 0x02E90181, 0x25E90100, 0x03E90181, 0x26E90100, + 0x04E90181, 0x27E90100, 0x05E90181, 0x28E90100, + 0x06E90181, 0x29E90100, 0x07E90181, 0x2AE90100, + 0x08E90181, 0x2BE90100, 0x09E90181, 0x2CE90100, + 0x0AE90181, 0x2DE90100, 0x0BE90181, 0x2EE90100, + 0x0CE90181, 0x2FE90100, 0x0DE90181, 0x30E90100, + 0x0EE90181, 0x31E90100, 0x0FE90181, 0x32E90100, + 0x10E90181, 0x33E90100, 0x11E90181, 0x34E90100, + 0x12E90181, 0x35E90100, 0x13E90181, 0x36E90100, + 0x14E90181, 0x37E90100, 0x15E90181, 0x38E90100, + 0x16E90181, 0x39E90100, 0x17E90181, 0x3AE90100, + 0x18E90181, 0x3BE90100, 0x19E90181, 0x3CE90100, + 0x1AE90181, 0x3DE90100, 0x1BE90181, 0x3EE90100, + 0x1CE90181, 0x3FE90100, 0x1DE90181, 0x40E90100, + 0x1EE90181, 0x41E90100, 0x1FE90181, 0x42E90100, + 0x20E90181, 0x43E90100, 0x21E90181, 0x53000000, + 0x53000000, 0xBC020000, 0x4E000000, 0x4A000000, + 0x0C030000, 0x99030000, 0x08030000, 0x01030000, + 0xA5030000, 0x08030000, 0x01030000, 0x35050000, + 0x52050000, 0x48000000, 0x31030000, 0x54000000, + 0x08030000, 0x57000000, 0x0A030000, 0x59000000, + 0x0A030000, 0x41000000, 0xBE020000, 0xA5030000, + 0x13030000, 0xA5030000, 0x13030000, 0x00030000, + 0xA5030000, 0x13030000, 0x01030000, 0xA5030000, + 0x13030000, 0x42030000, 0x081F0000, 0x99030000, + 0x091F0000, 0x99030000, 0x0A1F0000, 0x99030000, + 0x0B1F0000, 0x99030000, 0x0C1F0000, 0x99030000, + 0x0D1F0000, 0x99030000, 0x0E1F0000, 0x99030000, + 0x0F1F0000, 0x99030000, 0x081F0000, 0x99030000, + 0x091F0000, 0x99030000, 0x0A1F0000, 0x99030000, + 0x0B1F0000, 0x99030000, 0x0C1F0000, 0x99030000, + 0x0D1F0000, 0x99030000, 0x0E1F0000, 0x99030000, + 0x0F1F0000, 0x99030000, 0x281F0000, 0x99030000, + 0x291F0000, 0x99030000, 0x2A1F0000, 0x99030000, + 0x2B1F0000, 0x99030000, 0x2C1F0000, 0x99030000, + 0x2D1F0000, 0x99030000, 0x2E1F0000, 0x99030000, + 0x2F1F0000, 0x99030000, 0x281F0000, 0x99030000, + 0x291F0000, 0x99030000, 0x2A1F0000, 0x99030000, + 0x2B1F0000, 0x99030000, 0x2C1F0000, 0x99030000, + 0x2D1F0000, 0x99030000, 0x2E1F0000, 0x99030000, + 0x2F1F0000, 0x99030000, 0x681F0000, 0x99030000, + 0x691F0000, 0x99030000, 0x6A1F0000, 0x99030000, + 0x6B1F0000, 0x99030000, 0x6C1F0000, 0x99030000, + 0x6D1F0000, 0x99030000, 0x6E1F0000, 0x99030000, + 0x6F1F0000, 0x99030000, 0x681F0000, 0x99030000, + 0x691F0000, 0x99030000, 0x6A1F0000, 0x99030000, + 0x6B1F0000, 0x99030000, 0x6C1F0000, 0x99030000, + 0x6D1F0000, 0x99030000, 0x6E1F0000, 0x99030000, + 0x6F1F0000, 0x99030000, 0xBA1F0000, 0x99030000, + 0x91030000, 0x99030000, 0x86030000, 0x99030000, + 0x91030000, 0x42030000, 0x91030000, 0x42030000, + 0x99030000, 0x91030000, 0x99030000, 0xCA1F0000, + 0x99030000, 0x97030000, 0x99030000, 0x89030000, + 0x99030000, 0x97030000, 0x42030000, 0x97030000, + 0x42030000, 0x99030000, 0x97030000, 0x99030000, + 0x99030000, 0x08030000, 0x00030000, 0x99030000, + 0x08030000, 0x01030000, 0x99030000, 0x42030000, + 0x99030000, 0x08030000, 0x42030000, 0xA5030000, + 0x08030000, 0x00030000, 0xA5030000, 0x08030000, + 0x01030000, 0xA1030000, 0x13030000, 0xA5030000, + 0x42030000, 0xA5030000, 0x08030000, 0x42030000, + 0xFA1F0000, 0x99030000, 0xA9030000, 0x99030000, + 0x8F030000, 0x99030000, 0xA9030000, 0x42030000, + 0xA9030000, 0x42030000, 0x99030000, 0xA9030000, + 0x99030000, 0x46000000, 0x46000000, 0x46000000, + 0x49000000, 0x46000000, 0x4C000000, 0x46000000, + 0x46000000, 0x49000000, 0x46000000, 0x46000000, + 0x4C000000, 0x53000000, 0x54000000, 0x53000000, + 0x54000000, 0x44050000, 0x46050000, 0x44050000, + 0x35050000, 0x44050000, 0x3B050000, 0x4E050000, + 0x46050000, 0x44050000, 0x3D050000, +}; + +static uint32_t const __CFUniCharUppercaseMappingTableLength = 1635; + +static uint32_t const __CFUniCharTitlecaseMappingTable[] = { + 0x38040000, 0xDF000000, 0x00000002, 0xC4010000, + 0xC5010001, 0xC5010000, 0xC5010001, 0xC6010000, + 0xC5010001, 0xC7010000, 0xC8010001, 0xC8010000, + 0xC8010001, 0xC9010000, 0xC8010001, 0xCA010000, + 0xCB010001, 0xCB010000, 0xCB010001, 0xCC010000, + 0xCB010001, 0xF1010000, 0xF2010001, 0xF2010000, + 0xF2010001, 0xF3010000, 0xF2010001, 0x87050000, + 0x02000002, 0xD0100000, 0xD0100001, 0xD1100000, + 0xD1100001, 0xD2100000, 0xD2100001, 0xD3100000, + 0xD3100001, 0xD4100000, 0xD4100001, 0xD5100000, + 0xD5100001, 0xD6100000, 0xD6100001, 0xD7100000, + 0xD7100001, 0xD8100000, 0xD8100001, 0xD9100000, + 0xD9100001, 0xDA100000, 0xDA100001, 0xDB100000, + 0xDB100001, 0xDC100000, 0xDC100001, 0xDD100000, + 0xDD100001, 0xDE100000, 0xDE100001, 0xDF100000, + 0xDF100001, 0xE0100000, 0xE0100001, 0xE1100000, + 0xE1100001, 0xE2100000, 0xE2100001, 0xE3100000, + 0xE3100001, 0xE4100000, 0xE4100001, 0xE5100000, + 0xE5100001, 0xE6100000, 0xE6100001, 0xE7100000, + 0xE7100001, 0xE8100000, 0xE8100001, 0xE9100000, + 0xE9100001, 0xEA100000, 0xEA100001, 0xEB100000, + 0xEB100001, 0xEC100000, 0xEC100001, 0xED100000, + 0xED100001, 0xEE100000, 0xEE100001, 0xEF100000, + 0xEF100001, 0xF0100000, 0xF0100001, 0xF1100000, + 0xF1100001, 0xF2100000, 0xF2100001, 0xF3100000, + 0xF3100001, 0xF4100000, 0xF4100001, 0xF5100000, + 0xF5100001, 0xF6100000, 0xF6100001, 0xF7100000, + 0xF7100001, 0xF8100000, 0xF8100001, 0xF9100000, + 0xF9100001, 0xFA100000, 0xFA100001, 0xFD100000, + 0xFD100001, 0xFE100000, 0xFE100001, 0xFF100000, + 0xFF100001, 0x801F0000, 0x881F0001, 0x811F0000, + 0x891F0001, 0x821F0000, 0x8A1F0001, 0x831F0000, + 0x8B1F0001, 0x841F0000, 0x8C1F0001, 0x851F0000, + 0x8D1F0001, 0x861F0000, 0x8E1F0001, 0x871F0000, + 0x8F1F0001, 0x881F0000, 0x881F0001, 0x891F0000, + 0x891F0001, 0x8A1F0000, 0x8A1F0001, 0x8B1F0000, + 0x8B1F0001, 0x8C1F0000, 0x8C1F0001, 0x8D1F0000, + 0x8D1F0001, 0x8E1F0000, 0x8E1F0001, 0x8F1F0000, + 0x8F1F0001, 0x901F0000, 0x981F0001, 0x911F0000, + 0x991F0001, 0x921F0000, 0x9A1F0001, 0x931F0000, + 0x9B1F0001, 0x941F0000, 0x9C1F0001, 0x951F0000, + 0x9D1F0001, 0x961F0000, 0x9E1F0001, 0x971F0000, + 0x9F1F0001, 0x981F0000, 0x981F0001, 0x991F0000, + 0x991F0001, 0x9A1F0000, 0x9A1F0001, 0x9B1F0000, + 0x9B1F0001, 0x9C1F0000, 0x9C1F0001, 0x9D1F0000, + 0x9D1F0001, 0x9E1F0000, 0x9E1F0001, 0x9F1F0000, + 0x9F1F0001, 0xA01F0000, 0xA81F0001, 0xA11F0000, + 0xA91F0001, 0xA21F0000, 0xAA1F0001, 0xA31F0000, + 0xAB1F0001, 0xA41F0000, 0xAC1F0001, 0xA51F0000, + 0xAD1F0001, 0xA61F0000, 0xAE1F0001, 0xA71F0000, + 0xAF1F0001, 0xA81F0000, 0xA81F0001, 0xA91F0000, + 0xA91F0001, 0xAA1F0000, 0xAA1F0001, 0xAB1F0000, + 0xAB1F0001, 0xAC1F0000, 0xAC1F0001, 0xAD1F0000, + 0xAD1F0001, 0xAE1F0000, 0xAE1F0001, 0xAF1F0000, + 0xAF1F0001, 0xB21F0000, 0x04000002, 0xB31F0000, + 0xBC1F0001, 0xB41F0000, 0x06000002, 0xB71F0000, + 0x08000003, 0xBC1F0000, 0xBC1F0001, 0xC21F0000, + 0x0B000002, 0xC31F0000, 0xCC1F0001, 0xC41F0000, + 0x0D000002, 0xC71F0000, 0x0F000003, 0xCC1F0000, + 0xCC1F0001, 0xF21F0000, 0x12000002, 0xF31F0000, + 0xFC1F0001, 0xF41F0000, 0x14000002, 0xF71F0000, + 0x16000003, 0xFC1F0000, 0xFC1F0001, 0x00FB0000, + 0x19000002, 0x01FB0000, 0x1B000002, 0x02FB0000, + 0x1D000002, 0x03FB0000, 0x1F000003, 0x04FB0000, + 0x22000003, 0x05FB0000, 0x25000002, 0x06FB0000, + 0x27000002, 0x13FB0000, 0x29000002, 0x14FB0000, + 0x2B000002, 0x15FB0000, 0x2D000002, 0x16FB0000, + 0x2F000002, 0x17FB0000, 0x31000002, 0x53000000, + 0x73000000, 0x35050000, 0x82050000, 0xBA1F0000, + 0x45030000, 0x86030000, 0x45030000, 0x91030000, + 0x42030000, 0x45030000, 0xCA1F0000, 0x45030000, + 0x89030000, 0x45030000, 0x97030000, 0x42030000, + 0x45030000, 0xFA1F0000, 0x45030000, 0x8F030000, + 0x45030000, 0xA9030000, 0x42030000, 0x45030000, + 0x46000000, 0x66000000, 0x46000000, 0x69000000, + 0x46000000, 0x6C000000, 0x46000000, 0x66000000, + 0x69000000, 0x46000000, 0x66000000, 0x6C000000, + 0x53000000, 0x74000000, 0x53000000, 0x74000000, + 0x44050000, 0x76050000, 0x44050000, 0x65050000, + 0x44050000, 0x6B050000, 0x4E050000, 0x76050000, + 0x44050000, 0x6D050000, +}; + +static uint32_t const __CFUniCharTitlecaseMappingTableLength = 161; + +static uint32_t const __CFUniCharCasefoldMappingTable[] = { + 0xA0030000, 0xB5000000, 0xBC030001, 0xDF000000, + 0x00000002, 0x49010000, 0x02000002, 0x7F010000, + 0x73000001, 0xF0010000, 0x04000002, 0x45030000, + 0xB9030001, 0x90030000, 0x06000003, 0xB0030000, + 0x09000003, 0xC2030000, 0xC3030001, 0xD0030000, + 0xB2030001, 0xD1030000, 0xB8030001, 0xD5030000, + 0xC6030001, 0xD6030000, 0xC0030001, 0xF0030000, + 0xBA030001, 0xF1030000, 0xC1030001, 0xF5030000, + 0xB5030001, 0x87050000, 0x0C000002, 0x961E0000, + 0x0E000002, 0x971E0000, 0x10000002, 0x981E0000, + 0x12000002, 0x991E0000, 0x14000002, 0x9A1E0000, + 0x16000002, 0x9B1E0000, 0x611E0001, 0x9E1E0000, + 0x18000002, 0x501F0000, 0x1A000002, 0x521F0000, + 0x1C000003, 0x541F0000, 0x1F000003, 0x561F0000, + 0x22000003, 0x801F0000, 0x25000002, 0x811F0000, + 0x27000002, 0x821F0000, 0x29000002, 0x831F0000, + 0x2B000002, 0x841F0000, 0x2D000002, 0x851F0000, + 0x2F000002, 0x861F0000, 0x31000002, 0x871F0000, + 0x33000002, 0x881F0000, 0x35000002, 0x891F0000, + 0x37000002, 0x8A1F0000, 0x39000002, 0x8B1F0000, + 0x3B000002, 0x8C1F0000, 0x3D000002, 0x8D1F0000, + 0x3F000002, 0x8E1F0000, 0x41000002, 0x8F1F0000, + 0x43000002, 0x901F0000, 0x45000002, 0x911F0000, + 0x47000002, 0x921F0000, 0x49000002, 0x931F0000, + 0x4B000002, 0x941F0000, 0x4D000002, 0x951F0000, + 0x4F000002, 0x961F0000, 0x51000002, 0x971F0000, + 0x53000002, 0x981F0000, 0x55000002, 0x991F0000, + 0x57000002, 0x9A1F0000, 0x59000002, 0x9B1F0000, + 0x5B000002, 0x9C1F0000, 0x5D000002, 0x9D1F0000, + 0x5F000002, 0x9E1F0000, 0x61000002, 0x9F1F0000, + 0x63000002, 0xA01F0000, 0x65000002, 0xA11F0000, + 0x67000002, 0xA21F0000, 0x69000002, 0xA31F0000, + 0x6B000002, 0xA41F0000, 0x6D000002, 0xA51F0000, + 0x6F000002, 0xA61F0000, 0x71000002, 0xA71F0000, + 0x73000002, 0xA81F0000, 0x75000002, 0xA91F0000, + 0x77000002, 0xAA1F0000, 0x79000002, 0xAB1F0000, + 0x7B000002, 0xAC1F0000, 0x7D000002, 0xAD1F0000, + 0x7F000002, 0xAE1F0000, 0x81000002, 0xAF1F0000, + 0x83000002, 0xB21F0000, 0x85000002, 0xB31F0000, + 0x87000002, 0xB41F0000, 0x89000002, 0xB61F0000, + 0x8B000002, 0xB71F0000, 0x8D000003, 0xBC1F0000, + 0x90000002, 0xBE1F0000, 0xB9030001, 0xC21F0000, + 0x92000002, 0xC31F0000, 0x94000002, 0xC41F0000, + 0x96000002, 0xC61F0000, 0x98000002, 0xC71F0000, + 0x9A000003, 0xCC1F0000, 0x9D000002, 0xD21F0000, + 0x9F000003, 0xD31F0000, 0xA2000003, 0xD61F0000, + 0xA5000002, 0xD71F0000, 0xA7000003, 0xE21F0000, + 0xAA000003, 0xE31F0000, 0xAD000003, 0xE41F0000, + 0xB0000002, 0xE61F0000, 0xB2000002, 0xE71F0000, + 0xB4000003, 0xF21F0000, 0xB7000002, 0xF31F0000, + 0xB9000002, 0xF41F0000, 0xBB000002, 0xF61F0000, + 0xBD000002, 0xF71F0000, 0xBF000003, 0xFC1F0000, + 0xC2000002, 0x00FB0000, 0xC4000002, 0x01FB0000, + 0xC6000002, 0x02FB0000, 0xC8000002, 0x03FB0000, + 0xCA000003, 0x04FB0000, 0xCD000003, 0x05FB0000, + 0xD0000002, 0x06FB0000, 0xD2000002, 0x13FB0000, + 0xD4000002, 0x14FB0000, 0xD6000002, 0x15FB0000, + 0xD8000002, 0x16FB0000, 0xDA000002, 0x17FB0000, + 0xDC000002, 0x73000000, 0x73000000, 0xBC020000, + 0x6E000000, 0x6A000000, 0x0C030000, 0xB9030000, + 0x08030000, 0x01030000, 0xC5030000, 0x08030000, + 0x01030000, 0x65050000, 0x82050000, 0x68000000, + 0x31030000, 0x74000000, 0x08030000, 0x77000000, + 0x0A030000, 0x79000000, 0x0A030000, 0x61000000, + 0xBE020000, 0x73000000, 0x73000000, 0xC5030000, + 0x13030000, 0xC5030000, 0x13030000, 0x00030000, + 0xC5030000, 0x13030000, 0x01030000, 0xC5030000, + 0x13030000, 0x42030000, 0x001F0000, 0xB9030000, + 0x011F0000, 0xB9030000, 0x021F0000, 0xB9030000, + 0x031F0000, 0xB9030000, 0x041F0000, 0xB9030000, + 0x051F0000, 0xB9030000, 0x061F0000, 0xB9030000, + 0x071F0000, 0xB9030000, 0x001F0000, 0xB9030000, + 0x011F0000, 0xB9030000, 0x021F0000, 0xB9030000, + 0x031F0000, 0xB9030000, 0x041F0000, 0xB9030000, + 0x051F0000, 0xB9030000, 0x061F0000, 0xB9030000, + 0x071F0000, 0xB9030000, 0x201F0000, 0xB9030000, + 0x211F0000, 0xB9030000, 0x221F0000, 0xB9030000, + 0x231F0000, 0xB9030000, 0x241F0000, 0xB9030000, + 0x251F0000, 0xB9030000, 0x261F0000, 0xB9030000, + 0x271F0000, 0xB9030000, 0x201F0000, 0xB9030000, + 0x211F0000, 0xB9030000, 0x221F0000, 0xB9030000, + 0x231F0000, 0xB9030000, 0x241F0000, 0xB9030000, + 0x251F0000, 0xB9030000, 0x261F0000, 0xB9030000, + 0x271F0000, 0xB9030000, 0x601F0000, 0xB9030000, + 0x611F0000, 0xB9030000, 0x621F0000, 0xB9030000, + 0x631F0000, 0xB9030000, 0x641F0000, 0xB9030000, + 0x651F0000, 0xB9030000, 0x661F0000, 0xB9030000, + 0x671F0000, 0xB9030000, 0x601F0000, 0xB9030000, + 0x611F0000, 0xB9030000, 0x621F0000, 0xB9030000, + 0x631F0000, 0xB9030000, 0x641F0000, 0xB9030000, + 0x651F0000, 0xB9030000, 0x661F0000, 0xB9030000, + 0x671F0000, 0xB9030000, 0x701F0000, 0xB9030000, + 0xB1030000, 0xB9030000, 0xAC030000, 0xB9030000, + 0xB1030000, 0x42030000, 0xB1030000, 0x42030000, + 0xB9030000, 0xB1030000, 0xB9030000, 0x741F0000, + 0xB9030000, 0xB7030000, 0xB9030000, 0xAE030000, + 0xB9030000, 0xB7030000, 0x42030000, 0xB7030000, + 0x42030000, 0xB9030000, 0xB7030000, 0xB9030000, + 0xB9030000, 0x08030000, 0x00030000, 0xB9030000, + 0x08030000, 0x01030000, 0xB9030000, 0x42030000, + 0xB9030000, 0x08030000, 0x42030000, 0xC5030000, + 0x08030000, 0x00030000, 0xC5030000, 0x08030000, + 0x01030000, 0xC1030000, 0x13030000, 0xC5030000, + 0x42030000, 0xC5030000, 0x08030000, 0x42030000, + 0x7C1F0000, 0xB9030000, 0xC9030000, 0xB9030000, + 0xCE030000, 0xB9030000, 0xC9030000, 0x42030000, + 0xC9030000, 0x42030000, 0xB9030000, 0xC9030000, + 0xB9030000, 0x66000000, 0x66000000, 0x66000000, + 0x69000000, 0x66000000, 0x6C000000, 0x66000000, + 0x66000000, 0x69000000, 0x66000000, 0x66000000, + 0x6C000000, 0x73000000, 0x74000000, 0x73000000, + 0x74000000, 0x74050000, 0x76050000, 0x74050000, + 0x65050000, 0x74050000, 0x6B050000, 0x7E050000, + 0x76050000, 0x74050000, 0x6D050000, +}; + +static uint32_t const __CFUniCharCasefoldMappingTableLength = 227; + +static uint32_t const __CFUniCharCanonicalDecompositionMappingTable[] = { + 0x68400000, 0xC0000000, 0x00000002, 0xC1000000, + 0x02000002, 0xC2000000, 0x04000002, 0xC3000000, + 0x06000002, 0xC4000000, 0x08000002, 0xC5000000, + 0x0A000002, 0xC7000000, 0x0C000002, 0xC8000000, + 0x0E000002, 0xC9000000, 0x10000002, 0xCA000000, + 0x12000002, 0xCB000000, 0x14000002, 0xCC000000, + 0x16000002, 0xCD000000, 0x18000002, 0xCE000000, + 0x1A000002, 0xCF000000, 0x1C000002, 0xD1000000, + 0x1E000002, 0xD2000000, 0x20000002, 0xD3000000, + 0x22000002, 0xD4000000, 0x24000002, 0xD5000000, + 0x26000002, 0xD6000000, 0x28000002, 0xD9000000, + 0x2A000002, 0xDA000000, 0x2C000002, 0xDB000000, + 0x2E000002, 0xDC000000, 0x30000002, 0xDD000000, + 0x32000002, 0xE0000000, 0x34000002, 0xE1000000, + 0x36000002, 0xE2000000, 0x38000002, 0xE3000000, + 0x3A000002, 0xE4000000, 0x3C000002, 0xE5000000, + 0x3E000002, 0xE7000000, 0x40000002, 0xE8000000, + 0x42000002, 0xE9000000, 0x44000002, 0xEA000000, + 0x46000002, 0xEB000000, 0x48000002, 0xEC000000, + 0x4A000002, 0xED000000, 0x4C000002, 0xEE000000, + 0x4E000002, 0xEF000000, 0x50000002, 0xF1000000, + 0x52000002, 0xF2000000, 0x54000002, 0xF3000000, + 0x56000002, 0xF4000000, 0x58000002, 0xF5000000, + 0x5A000002, 0xF6000000, 0x5C000002, 0xF9000000, + 0x5E000002, 0xFA000000, 0x60000002, 0xFB000000, + 0x62000002, 0xFC000000, 0x64000002, 0xFD000000, + 0x66000002, 0xFF000000, 0x68000002, 0x00010000, + 0x6A000002, 0x01010000, 0x6C000002, 0x02010000, + 0x6E000002, 0x03010000, 0x70000002, 0x04010000, + 0x72000002, 0x05010000, 0x74000002, 0x06010000, + 0x76000002, 0x07010000, 0x78000002, 0x08010000, + 0x7A000002, 0x09010000, 0x7C000002, 0x0A010000, + 0x7E000002, 0x0B010000, 0x80000002, 0x0C010000, + 0x82000002, 0x0D010000, 0x84000002, 0x0E010000, + 0x86000002, 0x0F010000, 0x88000002, 0x12010000, + 0x8A000002, 0x13010000, 0x8C000002, 0x14010000, + 0x8E000002, 0x15010000, 0x90000002, 0x16010000, + 0x92000002, 0x17010000, 0x94000002, 0x18010000, + 0x96000002, 0x19010000, 0x98000002, 0x1A010000, + 0x9A000002, 0x1B010000, 0x9C000002, 0x1C010000, + 0x9E000002, 0x1D010000, 0xA0000002, 0x1E010000, + 0xA2000002, 0x1F010000, 0xA4000002, 0x20010000, + 0xA6000002, 0x21010000, 0xA8000002, 0x22010000, + 0xAA000002, 0x23010000, 0xAC000002, 0x24010000, + 0xAE000002, 0x25010000, 0xB0000002, 0x28010000, + 0xB2000002, 0x29010000, 0xB4000002, 0x2A010000, + 0xB6000002, 0x2B010000, 0xB8000002, 0x2C010000, + 0xBA000002, 0x2D010000, 0xBC000002, 0x2E010000, + 0xBE000002, 0x2F010000, 0xC0000002, 0x30010000, + 0xC2000002, 0x34010000, 0xC4000002, 0x35010000, + 0xC6000002, 0x36010000, 0xC8000002, 0x37010000, + 0xCA000002, 0x39010000, 0xCC000002, 0x3A010000, + 0xCE000002, 0x3B010000, 0xD0000002, 0x3C010000, + 0xD2000002, 0x3D010000, 0xD4000002, 0x3E010000, + 0xD6000002, 0x43010000, 0xD8000002, 0x44010000, + 0xDA000002, 0x45010000, 0xDC000002, 0x46010000, + 0xDE000002, 0x47010000, 0xE0000002, 0x48010000, + 0xE2000002, 0x4C010000, 0xE4000002, 0x4D010000, + 0xE6000002, 0x4E010000, 0xE8000002, 0x4F010000, + 0xEA000002, 0x50010000, 0xEC000002, 0x51010000, + 0xEE000002, 0x54010000, 0xF0000002, 0x55010000, + 0xF2000002, 0x56010000, 0xF4000002, 0x57010000, + 0xF6000002, 0x58010000, 0xF8000002, 0x59010000, + 0xFA000002, 0x5A010000, 0xFC000002, 0x5B010000, + 0xFE000002, 0x5C010000, 0x00010002, 0x5D010000, + 0x02010002, 0x5E010000, 0x04010002, 0x5F010000, + 0x06010002, 0x60010000, 0x08010002, 0x61010000, + 0x0A010002, 0x62010000, 0x0C010002, 0x63010000, + 0x0E010002, 0x64010000, 0x10010002, 0x65010000, + 0x12010002, 0x68010000, 0x14010002, 0x69010000, + 0x16010002, 0x6A010000, 0x18010002, 0x6B010000, + 0x1A010002, 0x6C010000, 0x1C010002, 0x6D010000, + 0x1E010002, 0x6E010000, 0x20010002, 0x6F010000, + 0x22010002, 0x70010000, 0x24010002, 0x71010000, + 0x26010002, 0x72010000, 0x28010002, 0x73010000, + 0x2A010002, 0x74010000, 0x2C010002, 0x75010000, + 0x2E010002, 0x76010000, 0x30010002, 0x77010000, + 0x32010002, 0x78010000, 0x34010002, 0x79010000, + 0x36010002, 0x7A010000, 0x38010002, 0x7B010000, + 0x3A010002, 0x7C010000, 0x3C010002, 0x7D010000, + 0x3E010002, 0x7E010000, 0x40010002, 0xA0010000, + 0x42010002, 0xA1010000, 0x44010002, 0xAF010000, + 0x46010002, 0xB0010000, 0x48010002, 0xCD010000, + 0x4A010002, 0xCE010000, 0x4C010002, 0xCF010000, + 0x4E010002, 0xD0010000, 0x50010002, 0xD1010000, + 0x52010002, 0xD2010000, 0x54010002, 0xD3010000, + 0x56010002, 0xD4010000, 0x58010002, 0xD5010000, + 0x5A010042, 0xD6010000, 0x5C010042, 0xD7010000, + 0x5E010042, 0xD8010000, 0x60010042, 0xD9010000, + 0x62010042, 0xDA010000, 0x64010042, 0xDB010000, + 0x66010042, 0xDC010000, 0x68010042, 0xDE010000, + 0x6A010042, 0xDF010000, 0x6C010042, 0xE0010000, + 0x6E010042, 0xE1010000, 0x70010042, 0xE2010000, + 0x72010002, 0xE3010000, 0x74010002, 0xE6010000, + 0x76010002, 0xE7010000, 0x78010002, 0xE8010000, + 0x7A010002, 0xE9010000, 0x7C010002, 0xEA010000, + 0x7E010002, 0xEB010000, 0x80010002, 0xEC010000, + 0x82010042, 0xED010000, 0x84010042, 0xEE010000, + 0x86010002, 0xEF010000, 0x88010002, 0xF0010000, + 0x8A010002, 0xF4010000, 0x8C010002, 0xF5010000, + 0x8E010002, 0xF8010000, 0x90010002, 0xF9010000, + 0x92010002, 0xFA010000, 0x94010042, 0xFB010000, + 0x96010042, 0xFC010000, 0x98010002, 0xFD010000, + 0x9A010002, 0xFE010000, 0x9C010002, 0xFF010000, + 0x9E010002, 0x00020000, 0xA0010002, 0x01020000, + 0xA2010002, 0x02020000, 0xA4010002, 0x03020000, + 0xA6010002, 0x04020000, 0xA8010002, 0x05020000, + 0xAA010002, 0x06020000, 0xAC010002, 0x07020000, + 0xAE010002, 0x08020000, 0xB0010002, 0x09020000, + 0xB2010002, 0x0A020000, 0xB4010002, 0x0B020000, + 0xB6010002, 0x0C020000, 0xB8010002, 0x0D020000, + 0xBA010002, 0x0E020000, 0xBC010002, 0x0F020000, + 0xBE010002, 0x10020000, 0xC0010002, 0x11020000, + 0xC2010002, 0x12020000, 0xC4010002, 0x13020000, + 0xC6010002, 0x14020000, 0xC8010002, 0x15020000, + 0xCA010002, 0x16020000, 0xCC010002, 0x17020000, + 0xCE010002, 0x18020000, 0xD0010002, 0x19020000, + 0xD2010002, 0x1A020000, 0xD4010002, 0x1B020000, + 0xD6010002, 0x1E020000, 0xD8010002, 0x1F020000, + 0xDA010002, 0x26020000, 0xDC010002, 0x27020000, + 0xDE010002, 0x28020000, 0xE0010002, 0x29020000, + 0xE2010002, 0x2A020000, 0xE4010042, 0x2B020000, + 0xE6010042, 0x2C020000, 0xE8010042, 0x2D020000, + 0xEA010042, 0x2E020000, 0xEC010002, 0x2F020000, + 0xEE010002, 0x30020000, 0xF0010042, 0x31020000, + 0xF2010042, 0x32020000, 0xF4010002, 0x33020000, + 0xF6010002, 0x40030000, 0x00030001, 0x41030000, + 0x01030001, 0x43030000, 0x13030001, 0x44030000, + 0xF8010002, 0x74030000, 0xB9020001, 0x7E030000, + 0x3B000001, 0x85030000, 0xFA010002, 0x86030000, + 0xFC010002, 0x87030000, 0xB7000001, 0x88030000, + 0xFE010002, 0x89030000, 0x00020002, 0x8A030000, + 0x02020002, 0x8C030000, 0x04020002, 0x8E030000, + 0x06020002, 0x8F030000, 0x08020002, 0x90030000, + 0x0A020042, 0xAA030000, 0x0C020002, 0xAB030000, + 0x0E020002, 0xAC030000, 0x10020002, 0xAD030000, + 0x12020002, 0xAE030000, 0x14020002, 0xAF030000, + 0x16020002, 0xB0030000, 0x18020042, 0xCA030000, + 0x1A020002, 0xCB030000, 0x1C020002, 0xCC030000, + 0x1E020002, 0xCD030000, 0x20020002, 0xCE030000, + 0x22020002, 0xD3030000, 0x24020002, 0xD4030000, + 0x26020002, 0x00040000, 0x28020002, 0x01040000, + 0x2A020002, 0x03040000, 0x2C020002, 0x07040000, + 0x2E020002, 0x0C040000, 0x30020002, 0x0D040000, + 0x32020002, 0x0E040000, 0x34020002, 0x19040000, + 0x36020002, 0x39040000, 0x38020002, 0x50040000, + 0x3A020002, 0x51040000, 0x3C020002, 0x53040000, + 0x3E020002, 0x57040000, 0x40020002, 0x5C040000, + 0x42020002, 0x5D040000, 0x44020002, 0x5E040000, + 0x46020002, 0x76040000, 0x48020002, 0x77040000, + 0x4A020002, 0xC1040000, 0x4C020002, 0xC2040000, + 0x4E020002, 0xD0040000, 0x50020002, 0xD1040000, + 0x52020002, 0xD2040000, 0x54020002, 0xD3040000, + 0x56020002, 0xD6040000, 0x58020002, 0xD7040000, + 0x5A020002, 0xDA040000, 0x5C020002, 0xDB040000, + 0x5E020002, 0xDC040000, 0x60020002, 0xDD040000, + 0x62020002, 0xDE040000, 0x64020002, 0xDF040000, + 0x66020002, 0xE2040000, 0x68020002, 0xE3040000, + 0x6A020002, 0xE4040000, 0x6C020002, 0xE5040000, + 0x6E020002, 0xE6040000, 0x70020002, 0xE7040000, + 0x72020002, 0xEA040000, 0x74020002, 0xEB040000, + 0x76020002, 0xEC040000, 0x78020002, 0xED040000, + 0x7A020002, 0xEE040000, 0x7C020002, 0xEF040000, + 0x7E020002, 0xF0040000, 0x80020002, 0xF1040000, + 0x82020002, 0xF2040000, 0x84020002, 0xF3040000, + 0x86020002, 0xF4040000, 0x88020002, 0xF5040000, + 0x8A020002, 0xF8040000, 0x8C020002, 0xF9040000, + 0x8E020002, 0x22060000, 0x90020002, 0x23060000, + 0x92020002, 0x24060000, 0x94020002, 0x25060000, + 0x96020002, 0x26060000, 0x98020002, 0xC0060000, + 0x9A020002, 0xC2060000, 0x9C020002, 0xD3060000, + 0x9E020002, 0x29090000, 0xA0020002, 0x31090000, + 0xA2020002, 0x34090000, 0xA4020002, 0x58090000, + 0xA6020002, 0x59090000, 0xA8020002, 0x5A090000, + 0xAA020002, 0x5B090000, 0xAC020002, 0x5C090000, + 0xAE020002, 0x5D090000, 0xB0020002, 0x5E090000, + 0xB2020002, 0x5F090000, 0xB4020002, 0xCB090000, + 0xB6020002, 0xCC090000, 0xB8020002, 0xDC090000, + 0xBA020002, 0xDD090000, 0xBC020002, 0xDF090000, + 0xBE020002, 0x330A0000, 0xC0020002, 0x360A0000, + 0xC2020002, 0x590A0000, 0xC4020002, 0x5A0A0000, + 0xC6020002, 0x5B0A0000, 0xC8020002, 0x5E0A0000, + 0xCA020002, 0x480B0000, 0xCC020002, 0x4B0B0000, + 0xCE020002, 0x4C0B0000, 0xD0020002, 0x5C0B0000, + 0xD2020002, 0x5D0B0000, 0xD4020002, 0x940B0000, + 0xD6020002, 0xCA0B0000, 0xD8020002, 0xCB0B0000, + 0xDA020002, 0xCC0B0000, 0xDC020002, 0x480C0000, + 0xDE020002, 0xC00C0000, 0xE0020002, 0xC70C0000, + 0xE2020002, 0xC80C0000, 0xE4020002, 0xCA0C0000, + 0xE6020002, 0xCB0C0000, 0xE8020042, 0x4A0D0000, + 0xEA020002, 0x4B0D0000, 0xEC020002, 0x4C0D0000, + 0xEE020002, 0xDA0D0000, 0xF0020002, 0xDC0D0000, + 0xF2020002, 0xDD0D0000, 0xF4020042, 0xDE0D0000, + 0xF6020002, 0x430F0000, 0xF8020002, 0x4D0F0000, + 0xFA020002, 0x520F0000, 0xFC020002, 0x570F0000, + 0xFE020002, 0x5C0F0000, 0x00030002, 0x690F0000, + 0x02030002, 0x730F0000, 0x04030002, 0x750F0000, + 0x06030002, 0x760F0000, 0x08030002, 0x780F0000, + 0x0A030002, 0x810F0000, 0x0C030002, 0x930F0000, + 0x0E030002, 0x9D0F0000, 0x10030002, 0xA20F0000, + 0x12030002, 0xA70F0000, 0x14030002, 0xAC0F0000, + 0x16030002, 0xB90F0000, 0x18030002, 0x26100000, + 0x1A030002, 0x061B0000, 0x1C030002, 0x081B0000, + 0x1E030002, 0x0A1B0000, 0x20030002, 0x0C1B0000, + 0x22030002, 0x0E1B0000, 0x24030002, 0x121B0000, + 0x26030002, 0x3B1B0000, 0x28030002, 0x3D1B0000, + 0x2A030002, 0x401B0000, 0x2C030002, 0x411B0000, + 0x2E030002, 0x431B0000, 0x30030002, 0x001E0000, + 0x32030002, 0x011E0000, 0x34030002, 0x021E0000, + 0x36030002, 0x031E0000, 0x38030002, 0x041E0000, + 0x3A030002, 0x051E0000, 0x3C030002, 0x061E0000, + 0x3E030002, 0x071E0000, 0x40030002, 0x081E0000, + 0x42030042, 0x091E0000, 0x44030042, 0x0A1E0000, + 0x46030002, 0x0B1E0000, 0x48030002, 0x0C1E0000, + 0x4A030002, 0x0D1E0000, 0x4C030002, 0x0E1E0000, + 0x4E030002, 0x0F1E0000, 0x50030002, 0x101E0000, + 0x52030002, 0x111E0000, 0x54030002, 0x121E0000, + 0x56030002, 0x131E0000, 0x58030002, 0x141E0000, + 0x5A030042, 0x151E0000, 0x5C030042, 0x161E0000, + 0x5E030042, 0x171E0000, 0x60030042, 0x181E0000, + 0x62030002, 0x191E0000, 0x64030002, 0x1A1E0000, + 0x66030002, 0x1B1E0000, 0x68030002, 0x1C1E0000, + 0x6A030042, 0x1D1E0000, 0x6C030042, 0x1E1E0000, + 0x6E030002, 0x1F1E0000, 0x70030002, 0x201E0000, + 0x72030002, 0x211E0000, 0x74030002, 0x221E0000, + 0x76030002, 0x231E0000, 0x78030002, 0x241E0000, + 0x7A030002, 0x251E0000, 0x7C030002, 0x261E0000, + 0x7E030002, 0x271E0000, 0x80030002, 0x281E0000, + 0x82030002, 0x291E0000, 0x84030002, 0x2A1E0000, + 0x86030002, 0x2B1E0000, 0x88030002, 0x2C1E0000, + 0x8A030002, 0x2D1E0000, 0x8C030002, 0x2E1E0000, + 0x8E030042, 0x2F1E0000, 0x90030042, 0x301E0000, + 0x92030002, 0x311E0000, 0x94030002, 0x321E0000, + 0x96030002, 0x331E0000, 0x98030002, 0x341E0000, + 0x9A030002, 0x351E0000, 0x9C030002, 0x361E0000, + 0x9E030002, 0x371E0000, 0xA0030002, 0x381E0000, + 0xA2030042, 0x391E0000, 0xA4030042, 0x3A1E0000, + 0xA6030002, 0x3B1E0000, 0xA8030002, 0x3C1E0000, + 0xAA030002, 0x3D1E0000, 0xAC030002, 0x3E1E0000, + 0xAE030002, 0x3F1E0000, 0xB0030002, 0x401E0000, + 0xB2030002, 0x411E0000, 0xB4030002, 0x421E0000, + 0xB6030002, 0x431E0000, 0xB8030002, 0x441E0000, + 0xBA030002, 0x451E0000, 0xBC030002, 0x461E0000, + 0xBE030002, 0x471E0000, 0xC0030002, 0x481E0000, + 0xC2030002, 0x491E0000, 0xC4030002, 0x4A1E0000, + 0xC6030002, 0x4B1E0000, 0xC8030002, 0x4C1E0000, + 0xCA030042, 0x4D1E0000, 0xCC030042, 0x4E1E0000, + 0xCE030042, 0x4F1E0000, 0xD0030042, 0x501E0000, + 0xD2030042, 0x511E0000, 0xD4030042, 0x521E0000, + 0xD6030042, 0x531E0000, 0xD8030042, 0x541E0000, + 0xDA030002, 0x551E0000, 0xDC030002, 0x561E0000, + 0xDE030002, 0x571E0000, 0xE0030002, 0x581E0000, + 0xE2030002, 0x591E0000, 0xE4030002, 0x5A1E0000, + 0xE6030002, 0x5B1E0000, 0xE8030002, 0x5C1E0000, + 0xEA030042, 0x5D1E0000, 0xEC030042, 0x5E1E0000, + 0xEE030002, 0x5F1E0000, 0xF0030002, 0x601E0000, + 0xF2030002, 0x611E0000, 0xF4030002, 0x621E0000, + 0xF6030002, 0x631E0000, 0xF8030002, 0x641E0000, + 0xFA030042, 0x651E0000, 0xFC030042, 0x661E0000, + 0xFE030042, 0x671E0000, 0x00040042, 0x681E0000, + 0x02040042, 0x691E0000, 0x04040042, 0x6A1E0000, + 0x06040002, 0x6B1E0000, 0x08040002, 0x6C1E0000, + 0x0A040002, 0x6D1E0000, 0x0C040002, 0x6E1E0000, + 0x0E040002, 0x6F1E0000, 0x10040002, 0x701E0000, + 0x12040002, 0x711E0000, 0x14040002, 0x721E0000, + 0x16040002, 0x731E0000, 0x18040002, 0x741E0000, + 0x1A040002, 0x751E0000, 0x1C040002, 0x761E0000, + 0x1E040002, 0x771E0000, 0x20040002, 0x781E0000, + 0x22040042, 0x791E0000, 0x24040042, 0x7A1E0000, + 0x26040042, 0x7B1E0000, 0x28040042, 0x7C1E0000, + 0x2A040002, 0x7D1E0000, 0x2C040002, 0x7E1E0000, + 0x2E040002, 0x7F1E0000, 0x30040002, 0x801E0000, + 0x32040002, 0x811E0000, 0x34040002, 0x821E0000, + 0x36040002, 0x831E0000, 0x38040002, 0x841E0000, + 0x3A040002, 0x851E0000, 0x3C040002, 0x861E0000, + 0x3E040002, 0x871E0000, 0x40040002, 0x881E0000, + 0x42040002, 0x891E0000, 0x44040002, 0x8A1E0000, + 0x46040002, 0x8B1E0000, 0x48040002, 0x8C1E0000, + 0x4A040002, 0x8D1E0000, 0x4C040002, 0x8E1E0000, + 0x4E040002, 0x8F1E0000, 0x50040002, 0x901E0000, + 0x52040002, 0x911E0000, 0x54040002, 0x921E0000, + 0x56040002, 0x931E0000, 0x58040002, 0x941E0000, + 0x5A040002, 0x951E0000, 0x5C040002, 0x961E0000, + 0x5E040002, 0x971E0000, 0x60040002, 0x981E0000, + 0x62040002, 0x991E0000, 0x64040002, 0x9B1E0000, + 0x66040002, 0xA01E0000, 0x68040002, 0xA11E0000, + 0x6A040002, 0xA21E0000, 0x6C040002, 0xA31E0000, + 0x6E040002, 0xA41E0000, 0x70040042, 0xA51E0000, + 0x72040042, 0xA61E0000, 0x74040042, 0xA71E0000, + 0x76040042, 0xA81E0000, 0x78040042, 0xA91E0000, + 0x7A040042, 0xAA1E0000, 0x7C040042, 0xAB1E0000, + 0x7E040042, 0xAC1E0000, 0x80040042, 0xAD1E0000, + 0x82040042, 0xAE1E0000, 0x84040042, 0xAF1E0000, + 0x86040042, 0xB01E0000, 0x88040042, 0xB11E0000, + 0x8A040042, 0xB21E0000, 0x8C040042, 0xB31E0000, + 0x8E040042, 0xB41E0000, 0x90040042, 0xB51E0000, + 0x92040042, 0xB61E0000, 0x94040042, 0xB71E0000, + 0x96040042, 0xB81E0000, 0x98040002, 0xB91E0000, + 0x9A040002, 0xBA1E0000, 0x9C040002, 0xBB1E0000, + 0x9E040002, 0xBC1E0000, 0xA0040002, 0xBD1E0000, + 0xA2040002, 0xBE1E0000, 0xA4040042, 0xBF1E0000, + 0xA6040042, 0xC01E0000, 0xA8040042, 0xC11E0000, + 0xAA040042, 0xC21E0000, 0xAC040042, 0xC31E0000, + 0xAE040042, 0xC41E0000, 0xB0040042, 0xC51E0000, + 0xB2040042, 0xC61E0000, 0xB4040042, 0xC71E0000, + 0xB6040042, 0xC81E0000, 0xB8040002, 0xC91E0000, + 0xBA040002, 0xCA1E0000, 0xBC040002, 0xCB1E0000, + 0xBE040002, 0xCC1E0000, 0xC0040002, 0xCD1E0000, + 0xC2040002, 0xCE1E0000, 0xC4040002, 0xCF1E0000, + 0xC6040002, 0xD01E0000, 0xC8040042, 0xD11E0000, + 0xCA040042, 0xD21E0000, 0xCC040042, 0xD31E0000, + 0xCE040042, 0xD41E0000, 0xD0040042, 0xD51E0000, + 0xD2040042, 0xD61E0000, 0xD4040042, 0xD71E0000, + 0xD6040042, 0xD81E0000, 0xD8040042, 0xD91E0000, + 0xDA040042, 0xDA1E0000, 0xDC040042, 0xDB1E0000, + 0xDE040042, 0xDC1E0000, 0xE0040042, 0xDD1E0000, + 0xE2040042, 0xDE1E0000, 0xE4040042, 0xDF1E0000, + 0xE6040042, 0xE01E0000, 0xE8040042, 0xE11E0000, + 0xEA040042, 0xE21E0000, 0xEC040042, 0xE31E0000, + 0xEE040042, 0xE41E0000, 0xF0040002, 0xE51E0000, + 0xF2040002, 0xE61E0000, 0xF4040002, 0xE71E0000, + 0xF6040002, 0xE81E0000, 0xF8040042, 0xE91E0000, + 0xFA040042, 0xEA1E0000, 0xFC040042, 0xEB1E0000, + 0xFE040042, 0xEC1E0000, 0x00050042, 0xED1E0000, + 0x02050042, 0xEE1E0000, 0x04050042, 0xEF1E0000, + 0x06050042, 0xF01E0000, 0x08050042, 0xF11E0000, + 0x0A050042, 0xF21E0000, 0x0C050002, 0xF31E0000, + 0x0E050002, 0xF41E0000, 0x10050002, 0xF51E0000, + 0x12050002, 0xF61E0000, 0x14050002, 0xF71E0000, + 0x16050002, 0xF81E0000, 0x18050002, 0xF91E0000, + 0x1A050002, 0x001F0000, 0x1C050002, 0x011F0000, + 0x1E050002, 0x021F0000, 0x20050042, 0x031F0000, + 0x22050042, 0x041F0000, 0x24050042, 0x051F0000, + 0x26050042, 0x061F0000, 0x28050042, 0x071F0000, + 0x2A050042, 0x081F0000, 0x2C050002, 0x091F0000, + 0x2E050002, 0x0A1F0000, 0x30050042, 0x0B1F0000, + 0x32050042, 0x0C1F0000, 0x34050042, 0x0D1F0000, + 0x36050042, 0x0E1F0000, 0x38050042, 0x0F1F0000, + 0x3A050042, 0x101F0000, 0x3C050002, 0x111F0000, + 0x3E050002, 0x121F0000, 0x40050042, 0x131F0000, + 0x42050042, 0x141F0000, 0x44050042, 0x151F0000, + 0x46050042, 0x181F0000, 0x48050002, 0x191F0000, + 0x4A050002, 0x1A1F0000, 0x4C050042, 0x1B1F0000, + 0x4E050042, 0x1C1F0000, 0x50050042, 0x1D1F0000, + 0x52050042, 0x201F0000, 0x54050002, 0x211F0000, + 0x56050002, 0x221F0000, 0x58050042, 0x231F0000, + 0x5A050042, 0x241F0000, 0x5C050042, 0x251F0000, + 0x5E050042, 0x261F0000, 0x60050042, 0x271F0000, + 0x62050042, 0x281F0000, 0x64050002, 0x291F0000, + 0x66050002, 0x2A1F0000, 0x68050042, 0x2B1F0000, + 0x6A050042, 0x2C1F0000, 0x6C050042, 0x2D1F0000, + 0x6E050042, 0x2E1F0000, 0x70050042, 0x2F1F0000, + 0x72050042, 0x301F0000, 0x74050002, 0x311F0000, + 0x76050002, 0x321F0000, 0x78050042, 0x331F0000, + 0x7A050042, 0x341F0000, 0x7C050042, 0x351F0000, + 0x7E050042, 0x361F0000, 0x80050042, 0x371F0000, + 0x82050042, 0x381F0000, 0x84050002, 0x391F0000, + 0x86050002, 0x3A1F0000, 0x88050042, 0x3B1F0000, + 0x8A050042, 0x3C1F0000, 0x8C050042, 0x3D1F0000, + 0x8E050042, 0x3E1F0000, 0x90050042, 0x3F1F0000, + 0x92050042, 0x401F0000, 0x94050002, 0x411F0000, + 0x96050002, 0x421F0000, 0x98050042, 0x431F0000, + 0x9A050042, 0x441F0000, 0x9C050042, 0x451F0000, + 0x9E050042, 0x481F0000, 0xA0050002, 0x491F0000, + 0xA2050002, 0x4A1F0000, 0xA4050042, 0x4B1F0000, + 0xA6050042, 0x4C1F0000, 0xA8050042, 0x4D1F0000, + 0xAA050042, 0x501F0000, 0xAC050002, 0x511F0000, + 0xAE050002, 0x521F0000, 0xB0050042, 0x531F0000, + 0xB2050042, 0x541F0000, 0xB4050042, 0x551F0000, + 0xB6050042, 0x561F0000, 0xB8050042, 0x571F0000, + 0xBA050042, 0x591F0000, 0xBC050002, 0x5B1F0000, + 0xBE050042, 0x5D1F0000, 0xC0050042, 0x5F1F0000, + 0xC2050042, 0x601F0000, 0xC4050002, 0x611F0000, + 0xC6050002, 0x621F0000, 0xC8050042, 0x631F0000, + 0xCA050042, 0x641F0000, 0xCC050042, 0x651F0000, + 0xCE050042, 0x661F0000, 0xD0050042, 0x671F0000, + 0xD2050042, 0x681F0000, 0xD4050002, 0x691F0000, + 0xD6050002, 0x6A1F0000, 0xD8050042, 0x6B1F0000, + 0xDA050042, 0x6C1F0000, 0xDC050042, 0x6D1F0000, + 0xDE050042, 0x6E1F0000, 0xE0050042, 0x6F1F0000, + 0xE2050042, 0x701F0000, 0xE4050002, 0x711F0000, + 0xAC030041, 0x721F0000, 0xE6050002, 0x731F0000, + 0xAD030041, 0x741F0000, 0xE8050002, 0x751F0000, + 0xAE030041, 0x761F0000, 0xEA050002, 0x771F0000, + 0xAF030041, 0x781F0000, 0xEC050002, 0x791F0000, + 0xCC030041, 0x7A1F0000, 0xEE050002, 0x7B1F0000, + 0xCD030041, 0x7C1F0000, 0xF0050002, 0x7D1F0000, + 0xCE030041, 0x801F0000, 0xF2050042, 0x811F0000, + 0xF4050042, 0x821F0000, 0xF6050042, 0x831F0000, + 0xF8050042, 0x841F0000, 0xFA050042, 0x851F0000, + 0xFC050042, 0x861F0000, 0xFE050042, 0x871F0000, + 0x00060042, 0x881F0000, 0x02060042, 0x891F0000, + 0x04060042, 0x8A1F0000, 0x06060042, 0x8B1F0000, + 0x08060042, 0x8C1F0000, 0x0A060042, 0x8D1F0000, + 0x0C060042, 0x8E1F0000, 0x0E060042, 0x8F1F0000, + 0x10060042, 0x901F0000, 0x12060042, 0x911F0000, + 0x14060042, 0x921F0000, 0x16060042, 0x931F0000, + 0x18060042, 0x941F0000, 0x1A060042, 0x951F0000, + 0x1C060042, 0x961F0000, 0x1E060042, 0x971F0000, + 0x20060042, 0x981F0000, 0x22060042, 0x991F0000, + 0x24060042, 0x9A1F0000, 0x26060042, 0x9B1F0000, + 0x28060042, 0x9C1F0000, 0x2A060042, 0x9D1F0000, + 0x2C060042, 0x9E1F0000, 0x2E060042, 0x9F1F0000, + 0x30060042, 0xA01F0000, 0x32060042, 0xA11F0000, + 0x34060042, 0xA21F0000, 0x36060042, 0xA31F0000, + 0x38060042, 0xA41F0000, 0x3A060042, 0xA51F0000, + 0x3C060042, 0xA61F0000, 0x3E060042, 0xA71F0000, + 0x40060042, 0xA81F0000, 0x42060042, 0xA91F0000, + 0x44060042, 0xAA1F0000, 0x46060042, 0xAB1F0000, + 0x48060042, 0xAC1F0000, 0x4A060042, 0xAD1F0000, + 0x4C060042, 0xAE1F0000, 0x4E060042, 0xAF1F0000, + 0x50060042, 0xB01F0000, 0x52060002, 0xB11F0000, + 0x54060002, 0xB21F0000, 0x56060042, 0xB31F0000, + 0x58060002, 0xB41F0000, 0x5A060042, 0xB61F0000, + 0x5C060002, 0xB71F0000, 0x5E060042, 0xB81F0000, + 0x60060002, 0xB91F0000, 0x62060002, 0xBA1F0000, + 0x64060002, 0xBB1F0000, 0x86030041, 0xBC1F0000, + 0x66060002, 0xBE1F0000, 0xB9030001, 0xC11F0000, + 0x68060002, 0xC21F0000, 0x6A060042, 0xC31F0000, + 0x6C060002, 0xC41F0000, 0x6E060042, 0xC61F0000, + 0x70060002, 0xC71F0000, 0x72060042, 0xC81F0000, + 0x74060002, 0xC91F0000, 0x88030041, 0xCA1F0000, + 0x76060002, 0xCB1F0000, 0x89030041, 0xCC1F0000, + 0x78060002, 0xCD1F0000, 0x7A060002, 0xCE1F0000, + 0x7C060002, 0xCF1F0000, 0x7E060002, 0xD01F0000, + 0x80060002, 0xD11F0000, 0x82060002, 0xD21F0000, + 0x84060042, 0xD31F0000, 0x90030041, 0xD61F0000, + 0x86060002, 0xD71F0000, 0x88060042, 0xD81F0000, + 0x8A060002, 0xD91F0000, 0x8C060002, 0xDA1F0000, + 0x8E060002, 0xDB1F0000, 0x8A030041, 0xDD1F0000, + 0x90060002, 0xDE1F0000, 0x92060002, 0xDF1F0000, + 0x94060002, 0xE01F0000, 0x96060002, 0xE11F0000, + 0x98060002, 0xE21F0000, 0x9A060042, 0xE31F0000, + 0xB0030041, 0xE41F0000, 0x9C060002, 0xE51F0000, + 0x9E060002, 0xE61F0000, 0xA0060002, 0xE71F0000, + 0xA2060042, 0xE81F0000, 0xA4060002, 0xE91F0000, + 0xA6060002, 0xEA1F0000, 0xA8060002, 0xEB1F0000, + 0x8E030041, 0xEC1F0000, 0xAA060002, 0xED1F0000, + 0xAC060002, 0xEE1F0000, 0x85030041, 0xEF1F0000, + 0x60000001, 0xF21F0000, 0xAE060042, 0xF31F0000, + 0xB0060002, 0xF41F0000, 0xB2060042, 0xF61F0000, + 0xB4060002, 0xF71F0000, 0xB6060042, 0xF81F0000, + 0xB8060002, 0xF91F0000, 0x8C030041, 0xFA1F0000, + 0xBA060002, 0xFB1F0000, 0x8F030041, 0xFC1F0000, + 0xBC060002, 0xFD1F0000, 0xB4000001, 0x00200000, + 0x02200001, 0x01200000, 0x03200001, 0x26210000, + 0xA9030001, 0x2A210000, 0x4B000001, 0x2B210000, + 0xC5000041, 0x9A210000, 0xBE060002, 0x9B210000, + 0xC0060002, 0xAE210000, 0xC2060002, 0xCD210000, + 0xC4060002, 0xCE210000, 0xC6060002, 0xCF210000, + 0xC8060002, 0x04220000, 0xCA060002, 0x09220000, + 0xCC060002, 0x0C220000, 0xCE060002, 0x24220000, + 0xD0060002, 0x26220000, 0xD2060002, 0x41220000, + 0xD4060002, 0x44220000, 0xD6060002, 0x47220000, + 0xD8060002, 0x49220000, 0xDA060002, 0x60220000, + 0xDC060002, 0x62220000, 0xDE060002, 0x6D220000, + 0xE0060002, 0x6E220000, 0xE2060002, 0x6F220000, + 0xE4060002, 0x70220000, 0xE6060002, 0x71220000, + 0xE8060002, 0x74220000, 0xEA060002, 0x75220000, + 0xEC060002, 0x78220000, 0xEE060002, 0x79220000, + 0xF0060002, 0x80220000, 0xF2060002, 0x81220000, + 0xF4060002, 0x84220000, 0xF6060002, 0x85220000, + 0xF8060002, 0x88220000, 0xFA060002, 0x89220000, + 0xFC060002, 0xAC220000, 0xFE060002, 0xAD220000, + 0x00070002, 0xAE220000, 0x02070002, 0xAF220000, + 0x04070002, 0xE0220000, 0x06070002, 0xE1220000, + 0x08070002, 0xE2220000, 0x0A070002, 0xE3220000, + 0x0C070002, 0xEA220000, 0x0E070002, 0xEB220000, + 0x10070002, 0xEC220000, 0x12070002, 0xED220000, + 0x14070002, 0x29230000, 0x08300001, 0x2A230000, + 0x09300001, 0xDC2A0000, 0x16070002, 0x4C300000, + 0x18070002, 0x4E300000, 0x1A070002, 0x50300000, + 0x1C070002, 0x52300000, 0x1E070002, 0x54300000, + 0x20070002, 0x56300000, 0x22070002, 0x58300000, + 0x24070002, 0x5A300000, 0x26070002, 0x5C300000, + 0x28070002, 0x5E300000, 0x2A070002, 0x60300000, + 0x2C070002, 0x62300000, 0x2E070002, 0x65300000, + 0x30070002, 0x67300000, 0x32070002, 0x69300000, + 0x34070002, 0x70300000, 0x36070002, 0x71300000, + 0x38070002, 0x73300000, 0x3A070002, 0x74300000, + 0x3C070002, 0x76300000, 0x3E070002, 0x77300000, + 0x40070002, 0x79300000, 0x42070002, 0x7A300000, + 0x44070002, 0x7C300000, 0x46070002, 0x7D300000, + 0x48070002, 0x94300000, 0x4A070002, 0x9E300000, + 0x4C070002, 0xAC300000, 0x4E070002, 0xAE300000, + 0x50070002, 0xB0300000, 0x52070002, 0xB2300000, + 0x54070002, 0xB4300000, 0x56070002, 0xB6300000, + 0x58070002, 0xB8300000, 0x5A070002, 0xBA300000, + 0x5C070002, 0xBC300000, 0x5E070002, 0xBE300000, + 0x60070002, 0xC0300000, 0x62070002, 0xC2300000, + 0x64070002, 0xC5300000, 0x66070002, 0xC7300000, + 0x68070002, 0xC9300000, 0x6A070002, 0xD0300000, + 0x6C070002, 0xD1300000, 0x6E070002, 0xD3300000, + 0x70070002, 0xD4300000, 0x72070002, 0xD6300000, + 0x74070002, 0xD7300000, 0x76070002, 0xD9300000, + 0x78070002, 0xDA300000, 0x7A070002, 0xDC300000, + 0x7C070002, 0xDD300000, 0x7E070002, 0xF4300000, + 0x80070002, 0xF7300000, 0x82070002, 0xF8300000, + 0x84070002, 0xF9300000, 0x86070002, 0xFA300000, + 0x88070002, 0xFE300000, 0x8A070002, 0x00F90000, + 0x488C0001, 0x01F90000, 0xF4660001, 0x02F90000, + 0xCA8E0001, 0x03F90000, 0xC88C0001, 0x04F90000, + 0xD16E0001, 0x05F90000, 0x324E0001, 0x06F90000, + 0xE5530001, 0x07F90000, 0x9C9F0001, 0x08F90000, + 0x9C9F0001, 0x09F90000, 0x51590001, 0x0AF90000, + 0xD1910001, 0x0BF90000, 0x87550001, 0x0CF90000, + 0x48590001, 0x0DF90000, 0xF6610001, 0x0EF90000, + 0x69760001, 0x0FF90000, 0x857F0001, 0x10F90000, + 0x3F860001, 0x11F90000, 0xBA870001, 0x12F90000, + 0xF8880001, 0x13F90000, 0x8F900001, 0x14F90000, + 0x026A0001, 0x15F90000, 0x1B6D0001, 0x16F90000, + 0xD9700001, 0x17F90000, 0xDE730001, 0x18F90000, + 0x3D840001, 0x19F90000, 0x6A910001, 0x1AF90000, + 0xF1990001, 0x1BF90000, 0x824E0001, 0x1CF90000, + 0x75530001, 0x1DF90000, 0x046B0001, 0x1EF90000, + 0x1B720001, 0x1FF90000, 0x2D860001, 0x20F90000, + 0x1E9E0001, 0x21F90000, 0x505D0001, 0x22F90000, + 0xEB6F0001, 0x23F90000, 0xCD850001, 0x24F90000, + 0x64890001, 0x25F90000, 0xC9620001, 0x26F90000, + 0xD8810001, 0x27F90000, 0x1F880001, 0x28F90000, + 0xCA5E0001, 0x29F90000, 0x17670001, 0x2AF90000, + 0x6A6D0001, 0x2BF90000, 0xFC720001, 0x2CF90000, + 0xCE900001, 0x2DF90000, 0x864F0001, 0x2EF90000, + 0xB7510001, 0x2FF90000, 0xDE520001, 0x30F90000, + 0xC4640001, 0x31F90000, 0xD36A0001, 0x32F90000, + 0x10720001, 0x33F90000, 0xE7760001, 0x34F90000, + 0x01800001, 0x35F90000, 0x06860001, 0x36F90000, + 0x5C860001, 0x37F90000, 0xEF8D0001, 0x38F90000, + 0x32970001, 0x39F90000, 0x6F9B0001, 0x3AF90000, + 0xFA9D0001, 0x3BF90000, 0x8C780001, 0x3CF90000, + 0x7F790001, 0x3DF90000, 0xA07D0001, 0x3EF90000, + 0xC9830001, 0x3FF90000, 0x04930001, 0x40F90000, + 0x7F9E0001, 0x41F90000, 0xD68A0001, 0x42F90000, + 0xDF580001, 0x43F90000, 0x045F0001, 0x44F90000, + 0x607C0001, 0x45F90000, 0x7E800001, 0x46F90000, + 0x62720001, 0x47F90000, 0xCA780001, 0x48F90000, + 0xC28C0001, 0x49F90000, 0xF7960001, 0x4AF90000, + 0xD8580001, 0x4BF90000, 0x625C0001, 0x4CF90000, + 0x136A0001, 0x4DF90000, 0xDA6D0001, 0x4EF90000, + 0x0F6F0001, 0x4FF90000, 0x2F7D0001, 0x50F90000, + 0x377E0001, 0x51F90000, 0x4B960001, 0x52F90000, + 0xD2520001, 0x53F90000, 0x8B800001, 0x54F90000, + 0xDC510001, 0x55F90000, 0xCC510001, 0x56F90000, + 0x1C7A0001, 0x57F90000, 0xBE7D0001, 0x58F90000, + 0xF1830001, 0x59F90000, 0x75960001, 0x5AF90000, + 0x808B0001, 0x5BF90000, 0xCF620001, 0x5CF90000, + 0x026A0001, 0x5DF90000, 0xFE8A0001, 0x5EF90000, + 0x394E0001, 0x5FF90000, 0xE75B0001, 0x60F90000, + 0x12600001, 0x61F90000, 0x87730001, 0x62F90000, + 0x70750001, 0x63F90000, 0x17530001, 0x64F90000, + 0xFB780001, 0x65F90000, 0xBF4F0001, 0x66F90000, + 0xA95F0001, 0x67F90000, 0x0D4E0001, 0x68F90000, + 0xCC6C0001, 0x69F90000, 0x78650001, 0x6AF90000, + 0x227D0001, 0x6BF90000, 0xC3530001, 0x6CF90000, + 0x5E580001, 0x6DF90000, 0x01770001, 0x6EF90000, + 0x49840001, 0x6FF90000, 0xAA8A0001, 0x70F90000, + 0xBA6B0001, 0x71F90000, 0xB08F0001, 0x72F90000, + 0x886C0001, 0x73F90000, 0xFE620001, 0x74F90000, + 0xE5820001, 0x75F90000, 0xA0630001, 0x76F90000, + 0x65750001, 0x77F90000, 0xAE4E0001, 0x78F90000, + 0x69510001, 0x79F90000, 0xC9510001, 0x7AF90000, + 0x81680001, 0x7BF90000, 0xE77C0001, 0x7CF90000, + 0x6F820001, 0x7DF90000, 0xD28A0001, 0x7EF90000, + 0xCF910001, 0x7FF90000, 0xF5520001, 0x80F90000, + 0x42540001, 0x81F90000, 0x73590001, 0x82F90000, + 0xEC5E0001, 0x83F90000, 0xC5650001, 0x84F90000, + 0xFE6F0001, 0x85F90000, 0x2A790001, 0x86F90000, + 0xAD950001, 0x87F90000, 0x6A9A0001, 0x88F90000, + 0x979E0001, 0x89F90000, 0xCE9E0001, 0x8AF90000, + 0x9B520001, 0x8BF90000, 0xC6660001, 0x8CF90000, + 0x776B0001, 0x8DF90000, 0x628F0001, 0x8EF90000, + 0x745E0001, 0x8FF90000, 0x90610001, 0x90F90000, + 0x00620001, 0x91F90000, 0x9A640001, 0x92F90000, + 0x236F0001, 0x93F90000, 0x49710001, 0x94F90000, + 0x89740001, 0x95F90000, 0xCA790001, 0x96F90000, + 0xF47D0001, 0x97F90000, 0x6F800001, 0x98F90000, + 0x268F0001, 0x99F90000, 0xEE840001, 0x9AF90000, + 0x23900001, 0x9BF90000, 0x4A930001, 0x9CF90000, + 0x17520001, 0x9DF90000, 0xA3520001, 0x9EF90000, + 0xBD540001, 0x9FF90000, 0xC8700001, 0xA0F90000, + 0xC2880001, 0xA1F90000, 0xAA8A0001, 0xA2F90000, + 0xC95E0001, 0xA3F90000, 0xF55F0001, 0xA4F90000, + 0x7B630001, 0xA5F90000, 0xAE6B0001, 0xA6F90000, + 0x3E7C0001, 0xA7F90000, 0x75730001, 0xA8F90000, + 0xE44E0001, 0xA9F90000, 0xF9560001, 0xAAF90000, + 0xE75B0001, 0xABF90000, 0xBA5D0001, 0xACF90000, + 0x1C600001, 0xADF90000, 0xB2730001, 0xAEF90000, + 0x69740001, 0xAFF90000, 0x9A7F0001, 0xB0F90000, + 0x46800001, 0xB1F90000, 0x34920001, 0xB2F90000, + 0xF6960001, 0xB3F90000, 0x48970001, 0xB4F90000, + 0x18980001, 0xB5F90000, 0x8B4F0001, 0xB6F90000, + 0xAE790001, 0xB7F90000, 0xB4910001, 0xB8F90000, + 0xB8960001, 0xB9F90000, 0xE1600001, 0xBAF90000, + 0x864E0001, 0xBBF90000, 0xDA500001, 0xBCF90000, + 0xEE5B0001, 0xBDF90000, 0x3F5C0001, 0xBEF90000, + 0x99650001, 0xBFF90000, 0x026A0001, 0xC0F90000, + 0xCE710001, 0xC1F90000, 0x42760001, 0xC2F90000, + 0xFC840001, 0xC3F90000, 0x7C900001, 0xC4F90000, + 0x8D9F0001, 0xC5F90000, 0x88660001, 0xC6F90000, + 0x2E960001, 0xC7F90000, 0x89520001, 0xC8F90000, + 0x7B670001, 0xC9F90000, 0xF3670001, 0xCAF90000, + 0x416D0001, 0xCBF90000, 0x9C6E0001, 0xCCF90000, + 0x09740001, 0xCDF90000, 0x59750001, 0xCEF90000, + 0x6B780001, 0xCFF90000, 0x107D0001, 0xD0F90000, + 0x5E980001, 0xD1F90000, 0x6D510001, 0xD2F90000, + 0x2E620001, 0xD3F90000, 0x78960001, 0xD4F90000, + 0x2B500001, 0xD5F90000, 0x195D0001, 0xD6F90000, + 0xEA6D0001, 0xD7F90000, 0x2A8F0001, 0xD8F90000, + 0x8B5F0001, 0xD9F90000, 0x44610001, 0xDAF90000, + 0x17680001, 0xDBF90000, 0x87730001, 0xDCF90000, + 0x86960001, 0xDDF90000, 0x29520001, 0xDEF90000, + 0x0F540001, 0xDFF90000, 0x655C0001, 0xE0F90000, + 0x13660001, 0xE1F90000, 0x4E670001, 0xE2F90000, + 0xA8680001, 0xE3F90000, 0xE56C0001, 0xE4F90000, + 0x06740001, 0xE5F90000, 0xE2750001, 0xE6F90000, + 0x797F0001, 0xE7F90000, 0xCF880001, 0xE8F90000, + 0xE1880001, 0xE9F90000, 0xCC910001, 0xEAF90000, + 0xE2960001, 0xEBF90000, 0x3F530001, 0xECF90000, + 0xBA6E0001, 0xEDF90000, 0x1D540001, 0xEEF90000, + 0xD0710001, 0xEFF90000, 0x98740001, 0xF0F90000, + 0xFA850001, 0xF1F90000, 0xA3960001, 0xF2F90000, + 0x579C0001, 0xF3F90000, 0x9F9E0001, 0xF4F90000, + 0x97670001, 0xF5F90000, 0xCB6D0001, 0xF6F90000, + 0xE8810001, 0xF7F90000, 0xCB7A0001, 0xF8F90000, + 0x207B0001, 0xF9F90000, 0x927C0001, 0xFAF90000, + 0xC0720001, 0xFBF90000, 0x99700001, 0xFCF90000, + 0x588B0001, 0xFDF90000, 0xC04E0001, 0xFEF90000, + 0x36830001, 0xFFF90000, 0x3A520001, 0x00FA0000, + 0x07520001, 0x01FA0000, 0xA65E0001, 0x02FA0000, + 0xD3620001, 0x03FA0000, 0xD67C0001, 0x04FA0000, + 0x855B0001, 0x05FA0000, 0x1E6D0001, 0x06FA0000, + 0xB4660001, 0x07FA0000, 0x3B8F0001, 0x08FA0000, + 0x4C880001, 0x09FA0000, 0x4D960001, 0x0AFA0000, + 0x8B890001, 0x0BFA0000, 0xD35E0001, 0x0CFA0000, + 0x40510001, 0x0DFA0000, 0xC0550001, 0x10FA0000, + 0x5A580001, 0x12FA0000, 0x74660001, 0x15FA0000, + 0xDE510001, 0x16FA0000, 0x2A730001, 0x17FA0000, + 0xCA760001, 0x18FA0000, 0x3C790001, 0x19FA0000, + 0x5E790001, 0x1AFA0000, 0x65790001, 0x1BFA0000, + 0x8F790001, 0x1CFA0000, 0x56970001, 0x1DFA0000, + 0xBE7C0001, 0x1EFA0000, 0xBD7F0001, 0x20FA0000, + 0x12860001, 0x22FA0000, 0xF88A0001, 0x25FA0000, + 0x38900001, 0x26FA0000, 0xFD900001, 0x2AFA0000, + 0xEF980001, 0x2BFA0000, 0xFC980001, 0x2CFA0000, + 0x28990001, 0x2DFA0000, 0xB49D0001, 0x2EFA0000, + 0xDE900001, 0x2FFA0000, 0xB7960001, 0x30FA0000, + 0xAE4F0001, 0x31FA0000, 0xE7500001, 0x32FA0000, + 0x4D510001, 0x33FA0000, 0xC9520001, 0x34FA0000, + 0xE4520001, 0x35FA0000, 0x51530001, 0x36FA0000, + 0x9D550001, 0x37FA0000, 0x06560001, 0x38FA0000, + 0x68560001, 0x39FA0000, 0x40580001, 0x3AFA0000, + 0xA8580001, 0x3BFA0000, 0x645C0001, 0x3CFA0000, + 0x6E5C0001, 0x3DFA0000, 0x94600001, 0x3EFA0000, + 0x68610001, 0x3FFA0000, 0x8E610001, 0x40FA0000, + 0xF2610001, 0x41FA0000, 0x4F650001, 0x42FA0000, + 0xE2650001, 0x43FA0000, 0x91660001, 0x44FA0000, + 0x85680001, 0x45FA0000, 0x776D0001, 0x46FA0000, + 0x1A6E0001, 0x47FA0000, 0x226F0001, 0x48FA0000, + 0x6E710001, 0x49FA0000, 0x2B720001, 0x4AFA0000, + 0x22740001, 0x4BFA0000, 0x91780001, 0x4CFA0000, + 0x3E790001, 0x4DFA0000, 0x49790001, 0x4EFA0000, + 0x48790001, 0x4FFA0000, 0x50790001, 0x50FA0000, + 0x56790001, 0x51FA0000, 0x5D790001, 0x52FA0000, + 0x8D790001, 0x53FA0000, 0x8E790001, 0x54FA0000, + 0x407A0001, 0x55FA0000, 0x817A0001, 0x56FA0000, + 0xC07B0001, 0x57FA0000, 0xF47D0001, 0x58FA0000, + 0x097E0001, 0x59FA0000, 0x417E0001, 0x5AFA0000, + 0x727F0001, 0x5BFA0000, 0x05800001, 0x5CFA0000, + 0xED810001, 0x5DFA0000, 0x79820001, 0x5EFA0000, + 0x79820001, 0x5FFA0000, 0x57840001, 0x60FA0000, + 0x10890001, 0x61FA0000, 0x96890001, 0x62FA0000, + 0x018B0001, 0x63FA0000, 0x398B0001, 0x64FA0000, + 0xD38C0001, 0x65FA0000, 0x088D0001, 0x66FA0000, + 0xB68F0001, 0x67FA0000, 0x38900001, 0x68FA0000, + 0xE3960001, 0x69FA0000, 0xFF970001, 0x6AFA0000, + 0x3B980001, 0x6BFA0000, 0x75600001, 0x6CFA0000, + 0xEE420281, 0x6DFA0000, 0x18820001, 0x70FA0000, + 0x264E0001, 0x71FA0000, 0xB5510001, 0x72FA0000, + 0x68510001, 0x73FA0000, 0x804F0001, 0x74FA0000, + 0x45510001, 0x75FA0000, 0x80510001, 0x76FA0000, + 0xC7520001, 0x77FA0000, 0xFA520001, 0x78FA0000, + 0x9D550001, 0x79FA0000, 0x55550001, 0x7AFA0000, + 0x99550001, 0x7BFA0000, 0xE2550001, 0x7CFA0000, + 0x5A580001, 0x7DFA0000, 0xB3580001, 0x7EFA0000, + 0x44590001, 0x7FFA0000, 0x54590001, 0x80FA0000, + 0x625A0001, 0x81FA0000, 0x285B0001, 0x82FA0000, + 0xD25E0001, 0x83FA0000, 0xD95E0001, 0x84FA0000, + 0x695F0001, 0x85FA0000, 0xAD5F0001, 0x86FA0000, + 0xD8600001, 0x87FA0000, 0x4E610001, 0x88FA0000, + 0x08610001, 0x89FA0000, 0x8E610001, 0x8AFA0000, + 0x60610001, 0x8BFA0000, 0xF2610001, 0x8CFA0000, + 0x34620001, 0x8DFA0000, 0xC4630001, 0x8EFA0000, + 0x1C640001, 0x8FFA0000, 0x52640001, 0x90FA0000, + 0x56650001, 0x91FA0000, 0x74660001, 0x92FA0000, + 0x17670001, 0x93FA0000, 0x1B670001, 0x94FA0000, + 0x56670001, 0x95FA0000, 0x796B0001, 0x96FA0000, + 0xBA6B0001, 0x97FA0000, 0x416D0001, 0x98FA0000, + 0xDB6E0001, 0x99FA0000, 0xCB6E0001, 0x9AFA0000, + 0x226F0001, 0x9BFA0000, 0x1E700001, 0x9CFA0000, + 0x6E710001, 0x9DFA0000, 0xA7770001, 0x9EFA0000, + 0x35720001, 0x9FFA0000, 0xAF720001, 0xA0FA0000, + 0x2A730001, 0xA1FA0000, 0x71740001, 0xA2FA0000, + 0x06750001, 0xA3FA0000, 0x3B750001, 0xA4FA0000, + 0x1D760001, 0xA5FA0000, 0x1F760001, 0xA6FA0000, + 0xCA760001, 0xA7FA0000, 0xDB760001, 0xA8FA0000, + 0xF4760001, 0xA9FA0000, 0x4A770001, 0xAAFA0000, + 0x40770001, 0xABFA0000, 0xCC780001, 0xACFA0000, + 0xB17A0001, 0xADFA0000, 0xC07B0001, 0xAEFA0000, + 0x7B7C0001, 0xAFFA0000, 0x5B7D0001, 0xB0FA0000, + 0xF47D0001, 0xB1FA0000, 0x3E7F0001, 0xB2FA0000, + 0x05800001, 0xB3FA0000, 0x52830001, 0xB4FA0000, + 0xEF830001, 0xB5FA0000, 0x79870001, 0xB6FA0000, + 0x41890001, 0xB7FA0000, 0x86890001, 0xB8FA0000, + 0x96890001, 0xB9FA0000, 0xBF8A0001, 0xBAFA0000, + 0xF88A0001, 0xBBFA0000, 0xCB8A0001, 0xBCFA0000, + 0x018B0001, 0xBDFA0000, 0xFE8A0001, 0xBEFA0000, + 0xED8A0001, 0xBFFA0000, 0x398B0001, 0xC0FA0000, + 0x8A8B0001, 0xC1FA0000, 0x088D0001, 0xC2FA0000, + 0x388F0001, 0xC3FA0000, 0x72900001, 0xC4FA0000, + 0x99910001, 0xC5FA0000, 0x76920001, 0xC6FA0000, + 0x7C960001, 0xC7FA0000, 0xE3960001, 0xC8FA0000, + 0x56970001, 0xC9FA0000, 0xDB970001, 0xCAFA0000, + 0xFF970001, 0xCBFA0000, 0x0B980001, 0xCCFA0000, + 0x3B980001, 0xCDFA0000, 0x129B0001, 0xCEFA0000, + 0x9C9F0001, 0xCFFA0000, 0x4A280281, 0xD0FA0000, + 0x44280281, 0xD1FA0000, 0xD5330281, 0xD2FA0000, + 0x9D3B0001, 0xD3FA0000, 0x18400001, 0xD4FA0000, + 0x39400001, 0xD5FA0000, 0x49520281, 0xD6FA0000, + 0xD05C0281, 0xD7FA0000, 0xD37E0281, 0xD8FA0000, + 0x439F0001, 0xD9FA0000, 0x8E9F0001, 0x1DFB0000, + 0x8C070002, 0x1FFB0000, 0x8E070002, 0x2AFB0000, + 0x90070002, 0x2BFB0000, 0x92070002, 0x2CFB0000, + 0x94070042, 0x2DFB0000, 0x96070042, 0x2EFB0000, + 0x98070002, 0x2FFB0000, 0x9A070002, 0x30FB0000, + 0x9C070002, 0x31FB0000, 0x9E070002, 0x32FB0000, + 0xA0070002, 0x33FB0000, 0xA2070002, 0x34FB0000, + 0xA4070002, 0x35FB0000, 0xA6070002, 0x36FB0000, + 0xA8070002, 0x38FB0000, 0xAA070002, 0x39FB0000, + 0xAC070002, 0x3AFB0000, 0xAE070002, 0x3BFB0000, + 0xB0070002, 0x3CFB0000, 0xB2070002, 0x3EFB0000, + 0xB4070002, 0x40FB0000, 0xB6070002, 0x41FB0000, + 0xB8070002, 0x43FB0000, 0xBA070002, 0x44FB0000, + 0xBC070002, 0x46FB0000, 0xBE070002, 0x47FB0000, + 0xC0070002, 0x48FB0000, 0xC2070002, 0x49FB0000, + 0xC4070002, 0x4AFB0000, 0xC6070002, 0x4BFB0000, + 0xC8070002, 0x4CFB0000, 0xCA070002, 0x4DFB0000, + 0xCC070002, 0x4EFB0000, 0xCE070002, 0x9A100100, + 0xD0070082, 0x9C100100, 0xD2070082, 0xAB100100, + 0xD4070082, 0x2E110100, 0xD6070082, 0x2F110100, + 0xD8070082, 0x4B130100, 0xDA070082, 0x4C130100, + 0xDC070082, 0xBB140100, 0xDE070082, 0xBC140100, + 0xE0070082, 0xBE140100, 0xE2070082, 0xBA150100, + 0xE4070082, 0xBB150100, 0xE6070082, 0x38190100, + 0xE8070082, 0x5ED10100, 0xEA070082, 0x5FD10100, + 0xEC070082, 0x60D10100, 0xEE0700C2, 0x61D10100, + 0xF00700C2, 0x62D10100, 0xF20700C2, 0x63D10100, + 0xF40700C2, 0x64D10100, 0xF60700C2, 0xBBD10100, + 0xF8070082, 0xBCD10100, 0xFA070082, 0xBDD10100, + 0xFC0700C2, 0xBED10100, 0xFE0700C2, 0xBFD10100, + 0x000800C2, 0xC0D10100, 0x020800C2, 0x00F80200, + 0x3D4E0001, 0x01F80200, 0x384E0001, 0x02F80200, + 0x414E0001, 0x03F80200, 0x22010281, 0x04F80200, + 0x604F0001, 0x05F80200, 0xAE4F0001, 0x06F80200, + 0xBB4F0001, 0x07F80200, 0x02500001, 0x08F80200, + 0x7A500001, 0x09F80200, 0x99500001, 0x0AF80200, + 0xE7500001, 0x0BF80200, 0xCF500001, 0x0CF80200, + 0x9E340001, 0x0DF80200, 0x3A060281, 0x0EF80200, + 0x4D510001, 0x0FF80200, 0x54510001, 0x10F80200, + 0x64510001, 0x11F80200, 0x77510001, 0x12F80200, + 0x1C050281, 0x13F80200, 0xB9340001, 0x14F80200, + 0x67510001, 0x15F80200, 0x8D510001, 0x16F80200, + 0x4B050281, 0x17F80200, 0x97510001, 0x18F80200, + 0xA4510001, 0x19F80200, 0xCC4E0001, 0x1AF80200, + 0xAC510001, 0x1BF80200, 0xB5510001, 0x1CF80200, + 0xDF910281, 0x1DF80200, 0xF5510001, 0x1EF80200, + 0x03520001, 0x1FF80200, 0xDF340001, 0x20F80200, + 0x3B520001, 0x21F80200, 0x46520001, 0x22F80200, + 0x72520001, 0x23F80200, 0x77520001, 0x24F80200, + 0x15350001, 0x25F80200, 0xC7520001, 0x26F80200, + 0xC9520001, 0x27F80200, 0xE4520001, 0x28F80200, + 0xFA520001, 0x29F80200, 0x05530001, 0x2AF80200, + 0x06530001, 0x2BF80200, 0x17530001, 0x2CF80200, + 0x49530001, 0x2DF80200, 0x51530001, 0x2EF80200, + 0x5A530001, 0x2FF80200, 0x73530001, 0x30F80200, + 0x7D530001, 0x31F80200, 0x7F530001, 0x32F80200, + 0x7F530001, 0x33F80200, 0x7F530001, 0x34F80200, + 0x2C0A0281, 0x35F80200, 0x70700001, 0x36F80200, + 0xCA530001, 0x37F80200, 0xDF530001, 0x38F80200, + 0x630B0281, 0x39F80200, 0xEB530001, 0x3AF80200, + 0xF1530001, 0x3BF80200, 0x06540001, 0x3CF80200, + 0x9E540001, 0x3DF80200, 0x38540001, 0x3EF80200, + 0x48540001, 0x3FF80200, 0x68540001, 0x40F80200, + 0xA2540001, 0x41F80200, 0xF6540001, 0x42F80200, + 0x10550001, 0x43F80200, 0x53550001, 0x44F80200, + 0x63550001, 0x45F80200, 0x84550001, 0x46F80200, + 0x84550001, 0x47F80200, 0x99550001, 0x48F80200, + 0xAB550001, 0x49F80200, 0xB3550001, 0x4AF80200, + 0xC2550001, 0x4BF80200, 0x16570001, 0x4CF80200, + 0x06560001, 0x4DF80200, 0x17570001, 0x4EF80200, + 0x51560001, 0x4FF80200, 0x74560001, 0x50F80200, + 0x07520001, 0x51F80200, 0xEE580001, 0x52F80200, + 0xCE570001, 0x53F80200, 0xF4570001, 0x54F80200, + 0x0D580001, 0x55F80200, 0x8B570001, 0x56F80200, + 0x32580001, 0x57F80200, 0x31580001, 0x58F80200, + 0xAC580001, 0x59F80200, 0xE4140281, 0x5AF80200, + 0xF2580001, 0x5BF80200, 0xF7580001, 0x5CF80200, + 0x06590001, 0x5DF80200, 0x1A590001, 0x5EF80200, + 0x22590001, 0x5FF80200, 0x62590001, 0x60F80200, + 0xA8160281, 0x61F80200, 0xEA160281, 0x62F80200, + 0xEC590001, 0x63F80200, 0x1B5A0001, 0x64F80200, + 0x275A0001, 0x65F80200, 0xD8590001, 0x66F80200, + 0x665A0001, 0x67F80200, 0xEE360001, 0x68F80200, + 0xFC360001, 0x69F80200, 0x085B0001, 0x6AF80200, + 0x3E5B0001, 0x6BF80200, 0x3E5B0001, 0x6CF80200, + 0xC8190281, 0x6DF80200, 0xC35B0001, 0x6EF80200, + 0xD85B0001, 0x6FF80200, 0xE75B0001, 0x70F80200, + 0xF35B0001, 0x71F80200, 0x181B0281, 0x72F80200, + 0xFF5B0001, 0x73F80200, 0x065C0001, 0x74F80200, + 0x535F0001, 0x75F80200, 0x225C0001, 0x76F80200, + 0x81370001, 0x77F80200, 0x605C0001, 0x78F80200, + 0x6E5C0001, 0x79F80200, 0xC05C0001, 0x7AF80200, + 0x8D5C0001, 0x7BF80200, 0xE41D0281, 0x7CF80200, + 0x435D0001, 0x7DF80200, 0xE61D0281, 0x7EF80200, + 0x6E5D0001, 0x7FF80200, 0x6B5D0001, 0x80F80200, + 0x7C5D0001, 0x81F80200, 0xE15D0001, 0x82F80200, + 0xE25D0001, 0x83F80200, 0x2F380001, 0x84F80200, + 0xFD5D0001, 0x85F80200, 0x285E0001, 0x86F80200, + 0x3D5E0001, 0x87F80200, 0x695E0001, 0x88F80200, + 0x62380001, 0x89F80200, 0x83210281, 0x8AF80200, + 0x7C380001, 0x8BF80200, 0xB05E0001, 0x8CF80200, + 0xB35E0001, 0x8DF80200, 0xB65E0001, 0x8EF80200, + 0xCA5E0001, 0x8FF80200, 0x92A30281, 0x90F80200, + 0xFE5E0001, 0x91F80200, 0x31230281, 0x92F80200, + 0x31230281, 0x93F80200, 0x01820001, 0x94F80200, + 0x225F0001, 0x95F80200, 0x225F0001, 0x96F80200, + 0xC7380001, 0x97F80200, 0xB8320281, 0x98F80200, + 0xDA610281, 0x99F80200, 0x625F0001, 0x9AF80200, + 0x6B5F0001, 0x9BF80200, 0xE3380001, 0x9CF80200, + 0x9A5F0001, 0x9DF80200, 0xCD5F0001, 0x9EF80200, + 0xD75F0001, 0x9FF80200, 0xF95F0001, 0xA0F80200, + 0x81600001, 0xA1F80200, 0x3A390001, 0xA2F80200, + 0x1C390001, 0xA3F80200, 0x94600001, 0xA4F80200, + 0xD4260281, 0xA5F80200, 0xC7600001, 0xA6F80200, + 0x48610001, 0xA7F80200, 0x4C610001, 0xA8F80200, + 0x4E610001, 0xA9F80200, 0x4C610001, 0xAAF80200, + 0x7A610001, 0xABF80200, 0x8E610001, 0xACF80200, + 0xB2610001, 0xADF80200, 0xA4610001, 0xAEF80200, + 0xAF610001, 0xAFF80200, 0xDE610001, 0xB0F80200, + 0xF2610001, 0xB1F80200, 0xF6610001, 0xB2F80200, + 0x10620001, 0xB3F80200, 0x1B620001, 0xB4F80200, + 0x5D620001, 0xB5F80200, 0xB1620001, 0xB6F80200, + 0xD4620001, 0xB7F80200, 0x50630001, 0xB8F80200, + 0x0C2B0281, 0xB9F80200, 0x3D630001, 0xBAF80200, + 0xFC620001, 0xBBF80200, 0x68630001, 0xBCF80200, + 0x83630001, 0xBDF80200, 0xE4630001, 0xBEF80200, + 0xF12B0281, 0xBFF80200, 0x22640001, 0xC0F80200, + 0xC5630001, 0xC1F80200, 0xA9630001, 0xC2F80200, + 0x2E3A0001, 0xC3F80200, 0x69640001, 0xC4F80200, + 0x7E640001, 0xC5F80200, 0x9D640001, 0xC6F80200, + 0x77640001, 0xC7F80200, 0x6C3A0001, 0xC8F80200, + 0x4F650001, 0xC9F80200, 0x6C650001, 0xCAF80200, + 0x0A300281, 0xCBF80200, 0xE3650001, 0xCCF80200, + 0xF8660001, 0xCDF80200, 0x49660001, 0xCEF80200, + 0x193B0001, 0xCFF80200, 0x91660001, 0xD0F80200, + 0x083B0001, 0xD1F80200, 0xE43A0001, 0xD2F80200, + 0x92510001, 0xD3F80200, 0x95510001, 0xD4F80200, + 0x00670001, 0xD5F80200, 0x9C660001, 0xD6F80200, + 0xAD800001, 0xD7F80200, 0xD9430001, 0xD8F80200, + 0x17670001, 0xD9F80200, 0x1B670001, 0xDAF80200, + 0x21670001, 0xDBF80200, 0x5E670001, 0xDCF80200, + 0x53670001, 0xDDF80200, 0xC3330281, 0xDEF80200, + 0x493B0001, 0xDFF80200, 0xFA670001, 0xE0F80200, + 0x85670001, 0xE1F80200, 0x52680001, 0xE2F80200, + 0x85680001, 0xE3F80200, 0x6D340281, 0xE4F80200, + 0x8E680001, 0xE5F80200, 0x1F680001, 0xE6F80200, + 0x14690001, 0xE7F80200, 0x9D3B0001, 0xE8F80200, + 0x42690001, 0xE9F80200, 0xA3690001, 0xEAF80200, + 0xEA690001, 0xEBF80200, 0xA86A0001, 0xECF80200, + 0xA3360281, 0xEDF80200, 0xDB6A0001, 0xEEF80200, + 0x183C0001, 0xEFF80200, 0x216B0001, 0xF0F80200, + 0xA7380281, 0xF1F80200, 0x546B0001, 0xF2F80200, + 0x4E3C0001, 0xF3F80200, 0x726B0001, 0xF4F80200, + 0x9F6B0001, 0xF5F80200, 0xBA6B0001, 0xF6F80200, + 0xBB6B0001, 0xF7F80200, 0x8D3A0281, 0xF8F80200, + 0x0B1D0281, 0xF9F80200, 0xFA3A0281, 0xFAF80200, + 0x4E6C0001, 0xFBF80200, 0xBC3C0281, 0xFCF80200, + 0xBF6C0001, 0xFDF80200, 0xCD6C0001, 0xFEF80200, + 0x676C0001, 0xFFF80200, 0x166D0001, 0x00F90200, + 0x3E6D0001, 0x01F90200, 0x776D0001, 0x02F90200, + 0x416D0001, 0x03F90200, 0x696D0001, 0x04F90200, + 0x786D0001, 0x05F90200, 0x856D0001, 0x06F90200, + 0x1E3D0281, 0x07F90200, 0x346D0001, 0x08F90200, + 0x2F6E0001, 0x09F90200, 0x6E6E0001, 0x0AF90200, + 0x333D0001, 0x0BF90200, 0xCB6E0001, 0x0CF90200, + 0xC76E0001, 0x0DF90200, 0xD13E0281, 0x0EF90200, + 0xF96D0001, 0x0FF90200, 0x6E6F0001, 0x10F90200, + 0x5E3F0281, 0x11F90200, 0x8E3F0281, 0x12F90200, + 0xC66F0001, 0x13F90200, 0x39700001, 0x14F90200, + 0x1E700001, 0x15F90200, 0x1B700001, 0x16F90200, + 0x963D0001, 0x17F90200, 0x4A700001, 0x18F90200, + 0x7D700001, 0x19F90200, 0x77700001, 0x1AF90200, + 0xAD700001, 0x1BF90200, 0x25050281, 0x1CF90200, + 0x45710001, 0x1DF90200, 0x63420281, 0x1EF90200, + 0x9C710001, 0x1FF90200, 0xAB430281, 0x20F90200, + 0x28720001, 0x21F90200, 0x35720001, 0x22F90200, + 0x50720001, 0x23F90200, 0x08460281, 0x24F90200, + 0x80720001, 0x25F90200, 0x95720001, 0x26F90200, + 0x35470281, 0x27F90200, 0x14480281, 0x28F90200, + 0x7A730001, 0x29F90200, 0x8B730001, 0x2AF90200, + 0xAC3E0001, 0x2BF90200, 0xA5730001, 0x2CF90200, + 0xB83E0001, 0x2DF90200, 0xB83E0001, 0x2EF90200, + 0x47740001, 0x2FF90200, 0x5C740001, 0x30F90200, + 0x71740001, 0x31F90200, 0x85740001, 0x32F90200, + 0xCA740001, 0x33F90200, 0x1B3F0001, 0x34F90200, + 0x24750001, 0x35F90200, 0x364C0281, 0x36F90200, + 0x3E750001, 0x37F90200, 0x924C0281, 0x38F90200, + 0x70750001, 0x39F90200, 0x9F210281, 0x3AF90200, + 0x10760001, 0x3BF90200, 0xA14F0281, 0x3CF90200, + 0xB84F0281, 0x3DF90200, 0x44500281, 0x3EF90200, + 0xFC3F0001, 0x3FF90200, 0x08400001, 0x40F90200, + 0xF4760001, 0x41F90200, 0xF3500281, 0x42F90200, + 0xF2500281, 0x43F90200, 0x19510281, 0x44F90200, + 0x33510281, 0x45F90200, 0x1E770001, 0x46F90200, + 0x1F770001, 0x47F90200, 0x1F770001, 0x48F90200, + 0x4A770001, 0x49F90200, 0x39400001, 0x4AF90200, + 0x8B770001, 0x4BF90200, 0x46400001, 0x4CF90200, + 0x96400001, 0x4DF90200, 0x1D540281, 0x4EF90200, + 0x4E780001, 0x4FF90200, 0x8C780001, 0x50F90200, + 0xCC780001, 0x51F90200, 0xE3400001, 0x52F90200, + 0x26560281, 0x53F90200, 0x56790001, 0x54F90200, + 0x9A560281, 0x55F90200, 0xC5560281, 0x56F90200, + 0x8F790001, 0x57F90200, 0xEB790001, 0x58F90200, + 0x2F410001, 0x59F90200, 0x407A0001, 0x5AF90200, + 0x4A7A0001, 0x5BF90200, 0x4F7A0001, 0x5CF90200, + 0x7C590281, 0x5DF90200, 0xA75A0281, 0x5EF90200, + 0xA75A0281, 0x5FF90200, 0xEE7A0001, 0x60F90200, + 0x02420001, 0x61F90200, 0xAB5B0281, 0x62F90200, + 0xC67B0001, 0x63F90200, 0xC97B0001, 0x64F90200, + 0x27420001, 0x65F90200, 0x805C0281, 0x66F90200, + 0xD27C0001, 0x67F90200, 0xA0420001, 0x68F90200, + 0xE87C0001, 0x69F90200, 0xE37C0001, 0x6AF90200, + 0x007D0001, 0x6BF90200, 0x865F0281, 0x6CF90200, + 0x637D0001, 0x6DF90200, 0x01430001, 0x6EF90200, + 0xC77D0001, 0x6FF90200, 0x027E0001, 0x70F90200, + 0x457E0001, 0x71F90200, 0x34430001, 0x72F90200, + 0x28620281, 0x73F90200, 0x47620281, 0x74F90200, + 0x59430001, 0x75F90200, 0xD9620281, 0x76F90200, + 0x7A7F0001, 0x77F90200, 0x3E630281, 0x78F90200, + 0x957F0001, 0x79F90200, 0xFA7F0001, 0x7AF90200, + 0x05800001, 0x7BF90200, 0xDA640281, 0x7CF90200, + 0x23650281, 0x7DF90200, 0x60800001, 0x7EF90200, + 0xA8650281, 0x7FF90200, 0x70800001, 0x80F90200, + 0x5F330281, 0x81F90200, 0xD5430001, 0x82F90200, + 0xB2800001, 0x83F90200, 0x03810001, 0x84F90200, + 0x0B440001, 0x85F90200, 0x3E810001, 0x86F90200, + 0xB55A0001, 0x87F90200, 0xA7670281, 0x88F90200, + 0xB5670281, 0x89F90200, 0x93330281, 0x8AF90200, + 0x9C330281, 0x8BF90200, 0x01820001, 0x8CF90200, + 0x04820001, 0x8DF90200, 0x9E8F0001, 0x8EF90200, + 0x6B440001, 0x8FF90200, 0x91820001, 0x90F90200, + 0x8B820001, 0x91F90200, 0x9D820001, 0x92F90200, + 0xB3520001, 0x93F90200, 0xB1820001, 0x94F90200, + 0xB3820001, 0x95F90200, 0xBD820001, 0x96F90200, + 0xE6820001, 0x97F90200, 0x3C6B0281, 0x98F90200, + 0xE5820001, 0x99F90200, 0x1D830001, 0x9AF90200, + 0x63830001, 0x9BF90200, 0xAD830001, 0x9CF90200, + 0x23830001, 0x9DF90200, 0xBD830001, 0x9EF90200, + 0xE7830001, 0x9FF90200, 0x57840001, 0xA0F90200, + 0x53830001, 0xA1F90200, 0xCA830001, 0xA2F90200, + 0xCC830001, 0xA3F90200, 0xDC830001, 0xA4F90200, + 0x366C0281, 0xA5F90200, 0x6B6D0281, 0xA6F90200, + 0xD56C0281, 0xA7F90200, 0x2B450001, 0xA8F90200, + 0xF1840001, 0xA9F90200, 0xF3840001, 0xAAF90200, + 0x16850001, 0xABF90200, 0xCA730281, 0xACF90200, + 0x64850001, 0xADF90200, 0x2C6F0281, 0xAEF90200, + 0x5D450001, 0xAFF90200, 0x61450001, 0xB0F90200, + 0xB16F0281, 0xB1F90200, 0xD2700281, 0xB2F90200, + 0x6B450001, 0xB3F90200, 0x50860001, 0xB4F90200, + 0x5C860001, 0xB5F90200, 0x67860001, 0xB6F90200, + 0x69860001, 0xB7F90200, 0xA9860001, 0xB8F90200, + 0x88860001, 0xB9F90200, 0x0E870001, 0xBAF90200, + 0xE2860001, 0xBBF90200, 0x79870001, 0xBCF90200, + 0x28870001, 0xBDF90200, 0x6B870001, 0xBEF90200, + 0x86870001, 0xBFF90200, 0xD7450001, 0xC0F90200, + 0xE1870001, 0xC1F90200, 0x01880001, 0xC2F90200, + 0xF9450001, 0xC3F90200, 0x60880001, 0xC4F90200, + 0x63880001, 0xC5F90200, 0x67760281, 0xC6F90200, + 0xD7880001, 0xC7F90200, 0xDE880001, 0xC8F90200, + 0x35460001, 0xC9F90200, 0xFA880001, 0xCAF90200, + 0xBB340001, 0xCBF90200, 0xAE780281, 0xCCF90200, + 0x66790281, 0xCDF90200, 0xBE460001, 0xCEF90200, + 0xC7460001, 0xCFF90200, 0xA08A0001, 0xD0F90200, + 0xED8A0001, 0xD1F90200, 0x8A8B0001, 0xD2F90200, + 0x558C0001, 0xD3F90200, 0xA87C0281, 0xD4F90200, + 0xAB8C0001, 0xD5F90200, 0xC18C0001, 0xD6F90200, + 0x1B8D0001, 0xD7F90200, 0x778D0001, 0xD8F90200, + 0x2F7F0281, 0xD9F90200, 0x04080281, 0xDAF90200, + 0xCB8D0001, 0xDBF90200, 0xBC8D0001, 0xDCF90200, + 0xF08D0001, 0xDDF90200, 0xDE080281, 0xDEF90200, + 0xD48E0001, 0xDFF90200, 0x388F0001, 0xE0F90200, + 0xD2850281, 0xE1F90200, 0xED850281, 0xE2F90200, + 0x94900001, 0xE3F90200, 0xF1900001, 0xE4F90200, + 0x11910001, 0xE5F90200, 0x2E870281, 0xE6F90200, + 0x1B910001, 0xE7F90200, 0x38920001, 0xE8F90200, + 0xD7920001, 0xE9F90200, 0xD8920001, 0xEAF90200, + 0x7C920001, 0xEBF90200, 0xF9930001, 0xECF90200, + 0x15940001, 0xEDF90200, 0xFA8B0281, 0xEEF90200, + 0x8B950001, 0xEFF90200, 0x95490001, 0xF0F90200, + 0xB7950001, 0xF1F90200, 0x778D0281, 0xF2F90200, + 0xE6490001, 0xF3F90200, 0xC3960001, 0xF4F90200, + 0xB25D0001, 0xF5F90200, 0x23970001, 0xF6F90200, + 0x45910281, 0xF7F90200, 0x1A920281, 0xF8F90200, + 0x6E4A0001, 0xF9F90200, 0x764A0001, 0xFAF90200, + 0xE0970001, 0xFBF90200, 0x0A940281, 0xFCF90200, + 0xB24A0001, 0xFDF90200, 0x96940281, 0xFEF90200, + 0x0B980001, 0xFFF90200, 0x0B980001, 0x00FA0200, + 0x29980001, 0x01FA0200, 0xB6950281, 0x02FA0200, + 0xE2980001, 0x03FA0200, 0x334B0001, 0x04FA0200, + 0x29990001, 0x05FA0200, 0xA7990001, 0x06FA0200, + 0xC2990001, 0x07FA0200, 0xFE990001, 0x08FA0200, + 0xCE4B0001, 0x09FA0200, 0x309B0281, 0x0AFA0200, + 0x129B0001, 0x0BFA0200, 0x409C0001, 0x0CFA0200, + 0xFD9C0001, 0x0DFA0200, 0xCE4C0001, 0x0EFA0200, + 0xED4C0001, 0x0FFA0200, 0x679D0001, 0x10FA0200, + 0xCEA00281, 0x11FA0200, 0xF84C0001, 0x12FA0200, + 0x05A10281, 0x13FA0200, 0x0EA20281, 0x14FA0200, + 0x91A20281, 0x15FA0200, 0xBB9E0001, 0x16FA0200, + 0x564D0001, 0x17FA0200, 0xF99E0001, 0x18FA0200, + 0xFE9E0001, 0x19FA0200, 0x059F0001, 0x1AFA0200, + 0x0F9F0001, 0x1BFA0200, 0x169F0001, 0x1CFA0200, + 0x3B9F0001, 0x1DFA0200, 0x00A60281, 0x41000000, + 0x00030000, 0x41000000, 0x01030000, 0x41000000, + 0x02030000, 0x41000000, 0x03030000, 0x41000000, + 0x08030000, 0x41000000, 0x0A030000, 0x43000000, + 0x27030000, 0x45000000, 0x00030000, 0x45000000, + 0x01030000, 0x45000000, 0x02030000, 0x45000000, + 0x08030000, 0x49000000, 0x00030000, 0x49000000, + 0x01030000, 0x49000000, 0x02030000, 0x49000000, + 0x08030000, 0x4E000000, 0x03030000, 0x4F000000, + 0x00030000, 0x4F000000, 0x01030000, 0x4F000000, + 0x02030000, 0x4F000000, 0x03030000, 0x4F000000, + 0x08030000, 0x55000000, 0x00030000, 0x55000000, + 0x01030000, 0x55000000, 0x02030000, 0x55000000, + 0x08030000, 0x59000000, 0x01030000, 0x61000000, + 0x00030000, 0x61000000, 0x01030000, 0x61000000, + 0x02030000, 0x61000000, 0x03030000, 0x61000000, + 0x08030000, 0x61000000, 0x0A030000, 0x63000000, + 0x27030000, 0x65000000, 0x00030000, 0x65000000, + 0x01030000, 0x65000000, 0x02030000, 0x65000000, + 0x08030000, 0x69000000, 0x00030000, 0x69000000, + 0x01030000, 0x69000000, 0x02030000, 0x69000000, + 0x08030000, 0x6E000000, 0x03030000, 0x6F000000, + 0x00030000, 0x6F000000, 0x01030000, 0x6F000000, + 0x02030000, 0x6F000000, 0x03030000, 0x6F000000, + 0x08030000, 0x75000000, 0x00030000, 0x75000000, + 0x01030000, 0x75000000, 0x02030000, 0x75000000, + 0x08030000, 0x79000000, 0x01030000, 0x79000000, + 0x08030000, 0x41000000, 0x04030000, 0x61000000, + 0x04030000, 0x41000000, 0x06030000, 0x61000000, + 0x06030000, 0x41000000, 0x28030000, 0x61000000, + 0x28030000, 0x43000000, 0x01030000, 0x63000000, + 0x01030000, 0x43000000, 0x02030000, 0x63000000, + 0x02030000, 0x43000000, 0x07030000, 0x63000000, + 0x07030000, 0x43000000, 0x0C030000, 0x63000000, + 0x0C030000, 0x44000000, 0x0C030000, 0x64000000, + 0x0C030000, 0x45000000, 0x04030000, 0x65000000, + 0x04030000, 0x45000000, 0x06030000, 0x65000000, + 0x06030000, 0x45000000, 0x07030000, 0x65000000, + 0x07030000, 0x45000000, 0x28030000, 0x65000000, + 0x28030000, 0x45000000, 0x0C030000, 0x65000000, + 0x0C030000, 0x47000000, 0x02030000, 0x67000000, + 0x02030000, 0x47000000, 0x06030000, 0x67000000, + 0x06030000, 0x47000000, 0x07030000, 0x67000000, + 0x07030000, 0x47000000, 0x27030000, 0x67000000, + 0x27030000, 0x48000000, 0x02030000, 0x68000000, + 0x02030000, 0x49000000, 0x03030000, 0x69000000, + 0x03030000, 0x49000000, 0x04030000, 0x69000000, + 0x04030000, 0x49000000, 0x06030000, 0x69000000, + 0x06030000, 0x49000000, 0x28030000, 0x69000000, + 0x28030000, 0x49000000, 0x07030000, 0x4A000000, + 0x02030000, 0x6A000000, 0x02030000, 0x4B000000, + 0x27030000, 0x6B000000, 0x27030000, 0x4C000000, + 0x01030000, 0x6C000000, 0x01030000, 0x4C000000, + 0x27030000, 0x6C000000, 0x27030000, 0x4C000000, + 0x0C030000, 0x6C000000, 0x0C030000, 0x4E000000, + 0x01030000, 0x6E000000, 0x01030000, 0x4E000000, + 0x27030000, 0x6E000000, 0x27030000, 0x4E000000, + 0x0C030000, 0x6E000000, 0x0C030000, 0x4F000000, + 0x04030000, 0x6F000000, 0x04030000, 0x4F000000, + 0x06030000, 0x6F000000, 0x06030000, 0x4F000000, + 0x0B030000, 0x6F000000, 0x0B030000, 0x52000000, + 0x01030000, 0x72000000, 0x01030000, 0x52000000, + 0x27030000, 0x72000000, 0x27030000, 0x52000000, + 0x0C030000, 0x72000000, 0x0C030000, 0x53000000, + 0x01030000, 0x73000000, 0x01030000, 0x53000000, + 0x02030000, 0x73000000, 0x02030000, 0x53000000, + 0x27030000, 0x73000000, 0x27030000, 0x53000000, + 0x0C030000, 0x73000000, 0x0C030000, 0x54000000, + 0x27030000, 0x74000000, 0x27030000, 0x54000000, + 0x0C030000, 0x74000000, 0x0C030000, 0x55000000, + 0x03030000, 0x75000000, 0x03030000, 0x55000000, + 0x04030000, 0x75000000, 0x04030000, 0x55000000, + 0x06030000, 0x75000000, 0x06030000, 0x55000000, + 0x0A030000, 0x75000000, 0x0A030000, 0x55000000, + 0x0B030000, 0x75000000, 0x0B030000, 0x55000000, + 0x28030000, 0x75000000, 0x28030000, 0x57000000, + 0x02030000, 0x77000000, 0x02030000, 0x59000000, + 0x02030000, 0x79000000, 0x02030000, 0x59000000, + 0x08030000, 0x5A000000, 0x01030000, 0x7A000000, + 0x01030000, 0x5A000000, 0x07030000, 0x7A000000, + 0x07030000, 0x5A000000, 0x0C030000, 0x7A000000, + 0x0C030000, 0x4F000000, 0x1B030000, 0x6F000000, + 0x1B030000, 0x55000000, 0x1B030000, 0x75000000, + 0x1B030000, 0x41000000, 0x0C030000, 0x61000000, + 0x0C030000, 0x49000000, 0x0C030000, 0x69000000, + 0x0C030000, 0x4F000000, 0x0C030000, 0x6F000000, + 0x0C030000, 0x55000000, 0x0C030000, 0x75000000, + 0x0C030000, 0xDC000000, 0x04030000, 0xFC000000, + 0x04030000, 0xDC000000, 0x01030000, 0xFC000000, + 0x01030000, 0xDC000000, 0x0C030000, 0xFC000000, + 0x0C030000, 0xDC000000, 0x00030000, 0xFC000000, + 0x00030000, 0xC4000000, 0x04030000, 0xE4000000, + 0x04030000, 0x26020000, 0x04030000, 0x27020000, + 0x04030000, 0xC6000000, 0x04030000, 0xE6000000, + 0x04030000, 0x47000000, 0x0C030000, 0x67000000, + 0x0C030000, 0x4B000000, 0x0C030000, 0x6B000000, + 0x0C030000, 0x4F000000, 0x28030000, 0x6F000000, + 0x28030000, 0xEA010000, 0x04030000, 0xEB010000, + 0x04030000, 0xB7010000, 0x0C030000, 0x92020000, + 0x0C030000, 0x6A000000, 0x0C030000, 0x47000000, + 0x01030000, 0x67000000, 0x01030000, 0x4E000000, + 0x00030000, 0x6E000000, 0x00030000, 0xC5000000, + 0x01030000, 0xE5000000, 0x01030000, 0xC6000000, + 0x01030000, 0xE6000000, 0x01030000, 0xD8000000, + 0x01030000, 0xF8000000, 0x01030000, 0x41000000, + 0x0F030000, 0x61000000, 0x0F030000, 0x41000000, + 0x11030000, 0x61000000, 0x11030000, 0x45000000, + 0x0F030000, 0x65000000, 0x0F030000, 0x45000000, + 0x11030000, 0x65000000, 0x11030000, 0x49000000, + 0x0F030000, 0x69000000, 0x0F030000, 0x49000000, + 0x11030000, 0x69000000, 0x11030000, 0x4F000000, + 0x0F030000, 0x6F000000, 0x0F030000, 0x4F000000, + 0x11030000, 0x6F000000, 0x11030000, 0x52000000, + 0x0F030000, 0x72000000, 0x0F030000, 0x52000000, + 0x11030000, 0x72000000, 0x11030000, 0x55000000, + 0x0F030000, 0x75000000, 0x0F030000, 0x55000000, + 0x11030000, 0x75000000, 0x11030000, 0x53000000, + 0x26030000, 0x73000000, 0x26030000, 0x54000000, + 0x26030000, 0x74000000, 0x26030000, 0x48000000, + 0x0C030000, 0x68000000, 0x0C030000, 0x41000000, + 0x07030000, 0x61000000, 0x07030000, 0x45000000, + 0x27030000, 0x65000000, 0x27030000, 0xD6000000, + 0x04030000, 0xF6000000, 0x04030000, 0xD5000000, + 0x04030000, 0xF5000000, 0x04030000, 0x4F000000, + 0x07030000, 0x6F000000, 0x07030000, 0x2E020000, + 0x04030000, 0x2F020000, 0x04030000, 0x59000000, + 0x04030000, 0x79000000, 0x04030000, 0x08030000, + 0x01030000, 0xA8000000, 0x01030000, 0x91030000, + 0x01030000, 0x95030000, 0x01030000, 0x97030000, + 0x01030000, 0x99030000, 0x01030000, 0x9F030000, + 0x01030000, 0xA5030000, 0x01030000, 0xA9030000, + 0x01030000, 0xCA030000, 0x01030000, 0x99030000, + 0x08030000, 0xA5030000, 0x08030000, 0xB1030000, + 0x01030000, 0xB5030000, 0x01030000, 0xB7030000, + 0x01030000, 0xB9030000, 0x01030000, 0xCB030000, + 0x01030000, 0xB9030000, 0x08030000, 0xC5030000, + 0x08030000, 0xBF030000, 0x01030000, 0xC5030000, + 0x01030000, 0xC9030000, 0x01030000, 0xD2030000, + 0x01030000, 0xD2030000, 0x08030000, 0x15040000, + 0x00030000, 0x15040000, 0x08030000, 0x13040000, + 0x01030000, 0x06040000, 0x08030000, 0x1A040000, + 0x01030000, 0x18040000, 0x00030000, 0x23040000, + 0x06030000, 0x18040000, 0x06030000, 0x38040000, + 0x06030000, 0x35040000, 0x00030000, 0x35040000, + 0x08030000, 0x33040000, 0x01030000, 0x56040000, + 0x08030000, 0x3A040000, 0x01030000, 0x38040000, + 0x00030000, 0x43040000, 0x06030000, 0x74040000, + 0x0F030000, 0x75040000, 0x0F030000, 0x16040000, + 0x06030000, 0x36040000, 0x06030000, 0x10040000, + 0x06030000, 0x30040000, 0x06030000, 0x10040000, + 0x08030000, 0x30040000, 0x08030000, 0x15040000, + 0x06030000, 0x35040000, 0x06030000, 0xD8040000, + 0x08030000, 0xD9040000, 0x08030000, 0x16040000, + 0x08030000, 0x36040000, 0x08030000, 0x17040000, + 0x08030000, 0x37040000, 0x08030000, 0x18040000, + 0x04030000, 0x38040000, 0x04030000, 0x18040000, + 0x08030000, 0x38040000, 0x08030000, 0x1E040000, + 0x08030000, 0x3E040000, 0x08030000, 0xE8040000, + 0x08030000, 0xE9040000, 0x08030000, 0x2D040000, + 0x08030000, 0x4D040000, 0x08030000, 0x23040000, + 0x04030000, 0x43040000, 0x04030000, 0x23040000, + 0x08030000, 0x43040000, 0x08030000, 0x23040000, + 0x0B030000, 0x43040000, 0x0B030000, 0x27040000, + 0x08030000, 0x47040000, 0x08030000, 0x2B040000, + 0x08030000, 0x4B040000, 0x08030000, 0x27060000, + 0x53060000, 0x27060000, 0x54060000, 0x48060000, + 0x54060000, 0x27060000, 0x55060000, 0x4A060000, + 0x54060000, 0xD5060000, 0x54060000, 0xC1060000, + 0x54060000, 0xD2060000, 0x54060000, 0x28090000, + 0x3C090000, 0x30090000, 0x3C090000, 0x33090000, + 0x3C090000, 0x15090000, 0x3C090000, 0x16090000, + 0x3C090000, 0x17090000, 0x3C090000, 0x1C090000, + 0x3C090000, 0x21090000, 0x3C090000, 0x22090000, + 0x3C090000, 0x2B090000, 0x3C090000, 0x2F090000, + 0x3C090000, 0xC7090000, 0xBE090000, 0xC7090000, + 0xD7090000, 0xA1090000, 0xBC090000, 0xA2090000, + 0xBC090000, 0xAF090000, 0xBC090000, 0x320A0000, + 0x3C0A0000, 0x380A0000, 0x3C0A0000, 0x160A0000, + 0x3C0A0000, 0x170A0000, 0x3C0A0000, 0x1C0A0000, + 0x3C0A0000, 0x2B0A0000, 0x3C0A0000, 0x470B0000, + 0x560B0000, 0x470B0000, 0x3E0B0000, 0x470B0000, + 0x570B0000, 0x210B0000, 0x3C0B0000, 0x220B0000, + 0x3C0B0000, 0x920B0000, 0xD70B0000, 0xC60B0000, + 0xBE0B0000, 0xC70B0000, 0xBE0B0000, 0xC60B0000, + 0xD70B0000, 0x460C0000, 0x560C0000, 0xBF0C0000, + 0xD50C0000, 0xC60C0000, 0xD50C0000, 0xC60C0000, + 0xD60C0000, 0xC60C0000, 0xC20C0000, 0xCA0C0000, + 0xD50C0000, 0x460D0000, 0x3E0D0000, 0x470D0000, + 0x3E0D0000, 0x460D0000, 0x570D0000, 0xD90D0000, + 0xCA0D0000, 0xD90D0000, 0xCF0D0000, 0xDC0D0000, + 0xCA0D0000, 0xD90D0000, 0xDF0D0000, 0x420F0000, + 0xB70F0000, 0x4C0F0000, 0xB70F0000, 0x510F0000, + 0xB70F0000, 0x560F0000, 0xB70F0000, 0x5B0F0000, + 0xB70F0000, 0x400F0000, 0xB50F0000, 0x710F0000, + 0x720F0000, 0x710F0000, 0x740F0000, 0xB20F0000, + 0x800F0000, 0xB30F0000, 0x800F0000, 0x710F0000, + 0x800F0000, 0x920F0000, 0xB70F0000, 0x9C0F0000, + 0xB70F0000, 0xA10F0000, 0xB70F0000, 0xA60F0000, + 0xB70F0000, 0xAB0F0000, 0xB70F0000, 0x900F0000, + 0xB50F0000, 0x25100000, 0x2E100000, 0x051B0000, + 0x351B0000, 0x071B0000, 0x351B0000, 0x091B0000, + 0x351B0000, 0x0B1B0000, 0x351B0000, 0x0D1B0000, + 0x351B0000, 0x111B0000, 0x351B0000, 0x3A1B0000, + 0x351B0000, 0x3C1B0000, 0x351B0000, 0x3E1B0000, + 0x351B0000, 0x3F1B0000, 0x351B0000, 0x421B0000, + 0x351B0000, 0x41000000, 0x25030000, 0x61000000, + 0x25030000, 0x42000000, 0x07030000, 0x62000000, + 0x07030000, 0x42000000, 0x23030000, 0x62000000, + 0x23030000, 0x42000000, 0x31030000, 0x62000000, + 0x31030000, 0xC7000000, 0x01030000, 0xE7000000, + 0x01030000, 0x44000000, 0x07030000, 0x64000000, + 0x07030000, 0x44000000, 0x23030000, 0x64000000, + 0x23030000, 0x44000000, 0x31030000, 0x64000000, + 0x31030000, 0x44000000, 0x27030000, 0x64000000, + 0x27030000, 0x44000000, 0x2D030000, 0x64000000, + 0x2D030000, 0x12010000, 0x00030000, 0x13010000, + 0x00030000, 0x12010000, 0x01030000, 0x13010000, + 0x01030000, 0x45000000, 0x2D030000, 0x65000000, + 0x2D030000, 0x45000000, 0x30030000, 0x65000000, + 0x30030000, 0x28020000, 0x06030000, 0x29020000, + 0x06030000, 0x46000000, 0x07030000, 0x66000000, + 0x07030000, 0x47000000, 0x04030000, 0x67000000, + 0x04030000, 0x48000000, 0x07030000, 0x68000000, + 0x07030000, 0x48000000, 0x23030000, 0x68000000, + 0x23030000, 0x48000000, 0x08030000, 0x68000000, + 0x08030000, 0x48000000, 0x27030000, 0x68000000, + 0x27030000, 0x48000000, 0x2E030000, 0x68000000, + 0x2E030000, 0x49000000, 0x30030000, 0x69000000, + 0x30030000, 0xCF000000, 0x01030000, 0xEF000000, + 0x01030000, 0x4B000000, 0x01030000, 0x6B000000, + 0x01030000, 0x4B000000, 0x23030000, 0x6B000000, + 0x23030000, 0x4B000000, 0x31030000, 0x6B000000, + 0x31030000, 0x4C000000, 0x23030000, 0x6C000000, + 0x23030000, 0x361E0000, 0x04030000, 0x371E0000, + 0x04030000, 0x4C000000, 0x31030000, 0x6C000000, + 0x31030000, 0x4C000000, 0x2D030000, 0x6C000000, + 0x2D030000, 0x4D000000, 0x01030000, 0x6D000000, + 0x01030000, 0x4D000000, 0x07030000, 0x6D000000, + 0x07030000, 0x4D000000, 0x23030000, 0x6D000000, + 0x23030000, 0x4E000000, 0x07030000, 0x6E000000, + 0x07030000, 0x4E000000, 0x23030000, 0x6E000000, + 0x23030000, 0x4E000000, 0x31030000, 0x6E000000, + 0x31030000, 0x4E000000, 0x2D030000, 0x6E000000, + 0x2D030000, 0xD5000000, 0x01030000, 0xF5000000, + 0x01030000, 0xD5000000, 0x08030000, 0xF5000000, + 0x08030000, 0x4C010000, 0x00030000, 0x4D010000, + 0x00030000, 0x4C010000, 0x01030000, 0x4D010000, + 0x01030000, 0x50000000, 0x01030000, 0x70000000, + 0x01030000, 0x50000000, 0x07030000, 0x70000000, + 0x07030000, 0x52000000, 0x07030000, 0x72000000, + 0x07030000, 0x52000000, 0x23030000, 0x72000000, + 0x23030000, 0x5A1E0000, 0x04030000, 0x5B1E0000, + 0x04030000, 0x52000000, 0x31030000, 0x72000000, + 0x31030000, 0x53000000, 0x07030000, 0x73000000, + 0x07030000, 0x53000000, 0x23030000, 0x73000000, + 0x23030000, 0x5A010000, 0x07030000, 0x5B010000, + 0x07030000, 0x60010000, 0x07030000, 0x61010000, + 0x07030000, 0x621E0000, 0x07030000, 0x631E0000, + 0x07030000, 0x54000000, 0x07030000, 0x74000000, + 0x07030000, 0x54000000, 0x23030000, 0x74000000, + 0x23030000, 0x54000000, 0x31030000, 0x74000000, + 0x31030000, 0x54000000, 0x2D030000, 0x74000000, + 0x2D030000, 0x55000000, 0x24030000, 0x75000000, + 0x24030000, 0x55000000, 0x30030000, 0x75000000, + 0x30030000, 0x55000000, 0x2D030000, 0x75000000, + 0x2D030000, 0x68010000, 0x01030000, 0x69010000, + 0x01030000, 0x6A010000, 0x08030000, 0x6B010000, + 0x08030000, 0x56000000, 0x03030000, 0x76000000, + 0x03030000, 0x56000000, 0x23030000, 0x76000000, + 0x23030000, 0x57000000, 0x00030000, 0x77000000, + 0x00030000, 0x57000000, 0x01030000, 0x77000000, + 0x01030000, 0x57000000, 0x08030000, 0x77000000, + 0x08030000, 0x57000000, 0x07030000, 0x77000000, + 0x07030000, 0x57000000, 0x23030000, 0x77000000, + 0x23030000, 0x58000000, 0x07030000, 0x78000000, + 0x07030000, 0x58000000, 0x08030000, 0x78000000, + 0x08030000, 0x59000000, 0x07030000, 0x79000000, + 0x07030000, 0x5A000000, 0x02030000, 0x7A000000, + 0x02030000, 0x5A000000, 0x23030000, 0x7A000000, + 0x23030000, 0x5A000000, 0x31030000, 0x7A000000, + 0x31030000, 0x68000000, 0x31030000, 0x74000000, + 0x08030000, 0x77000000, 0x0A030000, 0x79000000, + 0x0A030000, 0x7F010000, 0x07030000, 0x41000000, + 0x23030000, 0x61000000, 0x23030000, 0x41000000, + 0x09030000, 0x61000000, 0x09030000, 0xC2000000, + 0x01030000, 0xE2000000, 0x01030000, 0xC2000000, + 0x00030000, 0xE2000000, 0x00030000, 0xC2000000, + 0x09030000, 0xE2000000, 0x09030000, 0xC2000000, + 0x03030000, 0xE2000000, 0x03030000, 0xA01E0000, + 0x02030000, 0xA11E0000, 0x02030000, 0x02010000, + 0x01030000, 0x03010000, 0x01030000, 0x02010000, + 0x00030000, 0x03010000, 0x00030000, 0x02010000, + 0x09030000, 0x03010000, 0x09030000, 0x02010000, + 0x03030000, 0x03010000, 0x03030000, 0xA01E0000, + 0x06030000, 0xA11E0000, 0x06030000, 0x45000000, + 0x23030000, 0x65000000, 0x23030000, 0x45000000, + 0x09030000, 0x65000000, 0x09030000, 0x45000000, + 0x03030000, 0x65000000, 0x03030000, 0xCA000000, + 0x01030000, 0xEA000000, 0x01030000, 0xCA000000, + 0x00030000, 0xEA000000, 0x00030000, 0xCA000000, + 0x09030000, 0xEA000000, 0x09030000, 0xCA000000, + 0x03030000, 0xEA000000, 0x03030000, 0xB81E0000, + 0x02030000, 0xB91E0000, 0x02030000, 0x49000000, + 0x09030000, 0x69000000, 0x09030000, 0x49000000, + 0x23030000, 0x69000000, 0x23030000, 0x4F000000, + 0x23030000, 0x6F000000, 0x23030000, 0x4F000000, + 0x09030000, 0x6F000000, 0x09030000, 0xD4000000, + 0x01030000, 0xF4000000, 0x01030000, 0xD4000000, + 0x00030000, 0xF4000000, 0x00030000, 0xD4000000, + 0x09030000, 0xF4000000, 0x09030000, 0xD4000000, + 0x03030000, 0xF4000000, 0x03030000, 0xCC1E0000, + 0x02030000, 0xCD1E0000, 0x02030000, 0xA0010000, + 0x01030000, 0xA1010000, 0x01030000, 0xA0010000, + 0x00030000, 0xA1010000, 0x00030000, 0xA0010000, + 0x09030000, 0xA1010000, 0x09030000, 0xA0010000, + 0x03030000, 0xA1010000, 0x03030000, 0xA0010000, + 0x23030000, 0xA1010000, 0x23030000, 0x55000000, + 0x23030000, 0x75000000, 0x23030000, 0x55000000, + 0x09030000, 0x75000000, 0x09030000, 0xAF010000, + 0x01030000, 0xB0010000, 0x01030000, 0xAF010000, + 0x00030000, 0xB0010000, 0x00030000, 0xAF010000, + 0x09030000, 0xB0010000, 0x09030000, 0xAF010000, + 0x03030000, 0xB0010000, 0x03030000, 0xAF010000, + 0x23030000, 0xB0010000, 0x23030000, 0x59000000, + 0x00030000, 0x79000000, 0x00030000, 0x59000000, + 0x23030000, 0x79000000, 0x23030000, 0x59000000, + 0x09030000, 0x79000000, 0x09030000, 0x59000000, + 0x03030000, 0x79000000, 0x03030000, 0xB1030000, + 0x13030000, 0xB1030000, 0x14030000, 0x001F0000, + 0x00030000, 0x011F0000, 0x00030000, 0x001F0000, + 0x01030000, 0x011F0000, 0x01030000, 0x001F0000, + 0x42030000, 0x011F0000, 0x42030000, 0x91030000, + 0x13030000, 0x91030000, 0x14030000, 0x081F0000, + 0x00030000, 0x091F0000, 0x00030000, 0x081F0000, + 0x01030000, 0x091F0000, 0x01030000, 0x081F0000, + 0x42030000, 0x091F0000, 0x42030000, 0xB5030000, + 0x13030000, 0xB5030000, 0x14030000, 0x101F0000, + 0x00030000, 0x111F0000, 0x00030000, 0x101F0000, + 0x01030000, 0x111F0000, 0x01030000, 0x95030000, + 0x13030000, 0x95030000, 0x14030000, 0x181F0000, + 0x00030000, 0x191F0000, 0x00030000, 0x181F0000, + 0x01030000, 0x191F0000, 0x01030000, 0xB7030000, + 0x13030000, 0xB7030000, 0x14030000, 0x201F0000, + 0x00030000, 0x211F0000, 0x00030000, 0x201F0000, + 0x01030000, 0x211F0000, 0x01030000, 0x201F0000, + 0x42030000, 0x211F0000, 0x42030000, 0x97030000, + 0x13030000, 0x97030000, 0x14030000, 0x281F0000, + 0x00030000, 0x291F0000, 0x00030000, 0x281F0000, + 0x01030000, 0x291F0000, 0x01030000, 0x281F0000, + 0x42030000, 0x291F0000, 0x42030000, 0xB9030000, + 0x13030000, 0xB9030000, 0x14030000, 0x301F0000, + 0x00030000, 0x311F0000, 0x00030000, 0x301F0000, + 0x01030000, 0x311F0000, 0x01030000, 0x301F0000, + 0x42030000, 0x311F0000, 0x42030000, 0x99030000, + 0x13030000, 0x99030000, 0x14030000, 0x381F0000, + 0x00030000, 0x391F0000, 0x00030000, 0x381F0000, + 0x01030000, 0x391F0000, 0x01030000, 0x381F0000, + 0x42030000, 0x391F0000, 0x42030000, 0xBF030000, + 0x13030000, 0xBF030000, 0x14030000, 0x401F0000, + 0x00030000, 0x411F0000, 0x00030000, 0x401F0000, + 0x01030000, 0x411F0000, 0x01030000, 0x9F030000, + 0x13030000, 0x9F030000, 0x14030000, 0x481F0000, + 0x00030000, 0x491F0000, 0x00030000, 0x481F0000, + 0x01030000, 0x491F0000, 0x01030000, 0xC5030000, + 0x13030000, 0xC5030000, 0x14030000, 0x501F0000, + 0x00030000, 0x511F0000, 0x00030000, 0x501F0000, + 0x01030000, 0x511F0000, 0x01030000, 0x501F0000, + 0x42030000, 0x511F0000, 0x42030000, 0xA5030000, + 0x14030000, 0x591F0000, 0x00030000, 0x591F0000, + 0x01030000, 0x591F0000, 0x42030000, 0xC9030000, + 0x13030000, 0xC9030000, 0x14030000, 0x601F0000, + 0x00030000, 0x611F0000, 0x00030000, 0x601F0000, + 0x01030000, 0x611F0000, 0x01030000, 0x601F0000, + 0x42030000, 0x611F0000, 0x42030000, 0xA9030000, + 0x13030000, 0xA9030000, 0x14030000, 0x681F0000, + 0x00030000, 0x691F0000, 0x00030000, 0x681F0000, + 0x01030000, 0x691F0000, 0x01030000, 0x681F0000, + 0x42030000, 0x691F0000, 0x42030000, 0xB1030000, + 0x00030000, 0xB5030000, 0x00030000, 0xB7030000, + 0x00030000, 0xB9030000, 0x00030000, 0xBF030000, + 0x00030000, 0xC5030000, 0x00030000, 0xC9030000, + 0x00030000, 0x001F0000, 0x45030000, 0x011F0000, + 0x45030000, 0x021F0000, 0x45030000, 0x031F0000, + 0x45030000, 0x041F0000, 0x45030000, 0x051F0000, + 0x45030000, 0x061F0000, 0x45030000, 0x071F0000, + 0x45030000, 0x081F0000, 0x45030000, 0x091F0000, + 0x45030000, 0x0A1F0000, 0x45030000, 0x0B1F0000, + 0x45030000, 0x0C1F0000, 0x45030000, 0x0D1F0000, + 0x45030000, 0x0E1F0000, 0x45030000, 0x0F1F0000, + 0x45030000, 0x201F0000, 0x45030000, 0x211F0000, + 0x45030000, 0x221F0000, 0x45030000, 0x231F0000, + 0x45030000, 0x241F0000, 0x45030000, 0x251F0000, + 0x45030000, 0x261F0000, 0x45030000, 0x271F0000, + 0x45030000, 0x281F0000, 0x45030000, 0x291F0000, + 0x45030000, 0x2A1F0000, 0x45030000, 0x2B1F0000, + 0x45030000, 0x2C1F0000, 0x45030000, 0x2D1F0000, + 0x45030000, 0x2E1F0000, 0x45030000, 0x2F1F0000, + 0x45030000, 0x601F0000, 0x45030000, 0x611F0000, + 0x45030000, 0x621F0000, 0x45030000, 0x631F0000, + 0x45030000, 0x641F0000, 0x45030000, 0x651F0000, + 0x45030000, 0x661F0000, 0x45030000, 0x671F0000, + 0x45030000, 0x681F0000, 0x45030000, 0x691F0000, + 0x45030000, 0x6A1F0000, 0x45030000, 0x6B1F0000, + 0x45030000, 0x6C1F0000, 0x45030000, 0x6D1F0000, + 0x45030000, 0x6E1F0000, 0x45030000, 0x6F1F0000, + 0x45030000, 0xB1030000, 0x06030000, 0xB1030000, + 0x04030000, 0x701F0000, 0x45030000, 0xB1030000, + 0x45030000, 0xAC030000, 0x45030000, 0xB1030000, + 0x42030000, 0xB61F0000, 0x45030000, 0x91030000, + 0x06030000, 0x91030000, 0x04030000, 0x91030000, + 0x00030000, 0x91030000, 0x45030000, 0xA8000000, + 0x42030000, 0x741F0000, 0x45030000, 0xB7030000, + 0x45030000, 0xAE030000, 0x45030000, 0xB7030000, + 0x42030000, 0xC61F0000, 0x45030000, 0x95030000, + 0x00030000, 0x97030000, 0x00030000, 0x97030000, + 0x45030000, 0xBF1F0000, 0x00030000, 0xBF1F0000, + 0x01030000, 0xBF1F0000, 0x42030000, 0xB9030000, + 0x06030000, 0xB9030000, 0x04030000, 0xCA030000, + 0x00030000, 0xB9030000, 0x42030000, 0xCA030000, + 0x42030000, 0x99030000, 0x06030000, 0x99030000, + 0x04030000, 0x99030000, 0x00030000, 0xFE1F0000, + 0x00030000, 0xFE1F0000, 0x01030000, 0xFE1F0000, + 0x42030000, 0xC5030000, 0x06030000, 0xC5030000, + 0x04030000, 0xCB030000, 0x00030000, 0xC1030000, + 0x13030000, 0xC1030000, 0x14030000, 0xC5030000, + 0x42030000, 0xCB030000, 0x42030000, 0xA5030000, + 0x06030000, 0xA5030000, 0x04030000, 0xA5030000, + 0x00030000, 0xA1030000, 0x14030000, 0xA8000000, + 0x00030000, 0x7C1F0000, 0x45030000, 0xC9030000, + 0x45030000, 0xCE030000, 0x45030000, 0xC9030000, + 0x42030000, 0xF61F0000, 0x45030000, 0x9F030000, + 0x00030000, 0xA9030000, 0x00030000, 0xA9030000, + 0x45030000, 0x90210000, 0x38030000, 0x92210000, + 0x38030000, 0x94210000, 0x38030000, 0xD0210000, + 0x38030000, 0xD4210000, 0x38030000, 0xD2210000, + 0x38030000, 0x03220000, 0x38030000, 0x08220000, + 0x38030000, 0x0B220000, 0x38030000, 0x23220000, + 0x38030000, 0x25220000, 0x38030000, 0x3C220000, + 0x38030000, 0x43220000, 0x38030000, 0x45220000, + 0x38030000, 0x48220000, 0x38030000, 0x3D000000, + 0x38030000, 0x61220000, 0x38030000, 0x4D220000, + 0x38030000, 0x3C000000, 0x38030000, 0x3E000000, + 0x38030000, 0x64220000, 0x38030000, 0x65220000, + 0x38030000, 0x72220000, 0x38030000, 0x73220000, + 0x38030000, 0x76220000, 0x38030000, 0x77220000, + 0x38030000, 0x7A220000, 0x38030000, 0x7B220000, + 0x38030000, 0x82220000, 0x38030000, 0x83220000, + 0x38030000, 0x86220000, 0x38030000, 0x87220000, + 0x38030000, 0xA2220000, 0x38030000, 0xA8220000, + 0x38030000, 0xA9220000, 0x38030000, 0xAB220000, + 0x38030000, 0x7C220000, 0x38030000, 0x7D220000, + 0x38030000, 0x91220000, 0x38030000, 0x92220000, + 0x38030000, 0xB2220000, 0x38030000, 0xB3220000, + 0x38030000, 0xB4220000, 0x38030000, 0xB5220000, + 0x38030000, 0xDD2A0000, 0x38030000, 0x4B300000, + 0x99300000, 0x4D300000, 0x99300000, 0x4F300000, + 0x99300000, 0x51300000, 0x99300000, 0x53300000, + 0x99300000, 0x55300000, 0x99300000, 0x57300000, + 0x99300000, 0x59300000, 0x99300000, 0x5B300000, + 0x99300000, 0x5D300000, 0x99300000, 0x5F300000, + 0x99300000, 0x61300000, 0x99300000, 0x64300000, + 0x99300000, 0x66300000, 0x99300000, 0x68300000, + 0x99300000, 0x6F300000, 0x99300000, 0x6F300000, + 0x9A300000, 0x72300000, 0x99300000, 0x72300000, + 0x9A300000, 0x75300000, 0x99300000, 0x75300000, + 0x9A300000, 0x78300000, 0x99300000, 0x78300000, + 0x9A300000, 0x7B300000, 0x99300000, 0x7B300000, + 0x9A300000, 0x46300000, 0x99300000, 0x9D300000, + 0x99300000, 0xAB300000, 0x99300000, 0xAD300000, + 0x99300000, 0xAF300000, 0x99300000, 0xB1300000, + 0x99300000, 0xB3300000, 0x99300000, 0xB5300000, + 0x99300000, 0xB7300000, 0x99300000, 0xB9300000, + 0x99300000, 0xBB300000, 0x99300000, 0xBD300000, + 0x99300000, 0xBF300000, 0x99300000, 0xC1300000, + 0x99300000, 0xC4300000, 0x99300000, 0xC6300000, + 0x99300000, 0xC8300000, 0x99300000, 0xCF300000, + 0x99300000, 0xCF300000, 0x9A300000, 0xD2300000, + 0x99300000, 0xD2300000, 0x9A300000, 0xD5300000, + 0x99300000, 0xD5300000, 0x9A300000, 0xD8300000, + 0x99300000, 0xD8300000, 0x9A300000, 0xDB300000, + 0x99300000, 0xDB300000, 0x9A300000, 0xA6300000, + 0x99300000, 0xEF300000, 0x99300000, 0xF0300000, + 0x99300000, 0xF1300000, 0x99300000, 0xF2300000, + 0x99300000, 0xFD300000, 0x99300000, 0xD9050000, + 0xB4050000, 0xF2050000, 0xB7050000, 0xE9050000, + 0xC1050000, 0xE9050000, 0xC2050000, 0x49FB0000, + 0xC1050000, 0x49FB0000, 0xC2050000, 0xD0050000, + 0xB7050000, 0xD0050000, 0xB8050000, 0xD0050000, + 0xBC050000, 0xD1050000, 0xBC050000, 0xD2050000, + 0xBC050000, 0xD3050000, 0xBC050000, 0xD4050000, + 0xBC050000, 0xD5050000, 0xBC050000, 0xD6050000, + 0xBC050000, 0xD8050000, 0xBC050000, 0xD9050000, + 0xBC050000, 0xDA050000, 0xBC050000, 0xDB050000, + 0xBC050000, 0xDC050000, 0xBC050000, 0xDE050000, + 0xBC050000, 0xE0050000, 0xBC050000, 0xE1050000, + 0xBC050000, 0xE3050000, 0xBC050000, 0xE4050000, + 0xBC050000, 0xE6050000, 0xBC050000, 0xE7050000, + 0xBC050000, 0xE8050000, 0xBC050000, 0xE9050000, + 0xBC050000, 0xEA050000, 0xBC050000, 0xD5050000, + 0xB9050000, 0xD1050000, 0xBF050000, 0xDB050000, + 0xBF050000, 0xE4050000, 0xBF050000, 0x99100100, + 0xBA100100, 0x9B100100, 0xBA100100, 0xA5100100, + 0xBA100100, 0x31110100, 0x27110100, 0x32110100, + 0x27110100, 0x47130100, 0x3E130100, 0x47130100, + 0x57130100, 0xB9140100, 0xBA140100, 0xB9140100, + 0xB0140100, 0xB9140100, 0xBD140100, 0xB8150100, + 0xAF150100, 0xB9150100, 0xAF150100, 0x35190100, + 0x30190100, 0x57D10100, 0x65D10100, 0x58D10100, + 0x65D10100, 0x5FD10100, 0x6ED10100, 0x5FD10100, + 0x6FD10100, 0x5FD10100, 0x70D10100, 0x5FD10100, + 0x71D10100, 0x5FD10100, 0x72D10100, 0xB9D10100, + 0x65D10100, 0xBAD10100, 0x65D10100, 0xBBD10100, + 0x6ED10100, 0xBCD10100, 0x6ED10100, 0xBBD10100, + 0x6FD10100, 0xBCD10100, 0x6FD10100, +}; + +static uint32_t const __CFUniCharCanonicalDecompositionMappingTableLength = 3087; + +static uint32_t const __CFUniCharCanonicalPrecompositionMappingTable[] = { + 0x3F000000, 0x800E0000, 0x00030000, 0x00005400, + 0x01030000, 0x54007500, 0x02030000, 0xC9002000, + 0x03030000, 0xE9001C00, 0x04030000, 0x05012C00, + 0x06030000, 0x31012000, 0x07030000, 0x51012E00, + 0x08030000, 0x7F013600, 0x09030000, 0xB5011800, + 0x0A030000, 0xCD010600, 0x0B030000, 0xD3010600, + 0x0C030000, 0xD9012500, 0x0F030000, 0xFE010E00, + 0x11030000, 0x0C020C00, 0x13030000, 0x18020E00, + 0x14030000, 0x26021000, 0x1B030000, 0x36020400, + 0x23030000, 0x3A022A00, 0x24030000, 0x64020200, + 0x25030000, 0x66020200, 0x26030000, 0x68020400, + 0x27030000, 0x6C021600, 0x28030000, 0x82020A00, + 0x2D030000, 0x8C020C00, 0x2E030000, 0x98020200, + 0x30030000, 0x9A020600, 0x31030000, 0xA0021100, + 0x38030000, 0xB1022C00, 0x42030000, 0xDD021D00, + 0x45030000, 0xFA023F00, 0x53060000, 0x39030100, + 0x54060000, 0x3A030600, 0x55060000, 0x40030100, + 0x3C090000, 0x41030300, 0xBE090000, 0x44030100, + 0xD7090000, 0x45030100, 0x3E0B0000, 0x46030100, + 0x560B0000, 0x47030100, 0x570B0000, 0x48030100, + 0xBE0B0000, 0x49030200, 0xD70B0000, 0x4B030200, + 0x560C0000, 0x4D030100, 0xC20C0000, 0x4E030100, + 0xD50C0000, 0x4F030300, 0xD60C0000, 0x52030100, + 0x3E0D0000, 0x53030200, 0x570D0000, 0x55030100, + 0xCA0D0000, 0x56030200, 0xCF0D0000, 0x58030100, + 0xDF0D0000, 0x59030100, 0x2E100000, 0x5A030100, + 0x351B0000, 0x5B030B00, 0x99300000, 0x66033000, + 0x9A300000, 0x96030A00, 0xBA100100, 0x00000380, + 0x27110100, 0x06000280, 0x3E130100, 0x0A000180, + 0x57130100, 0x0C000180, 0xB0140100, 0x0E000180, + 0xBA140100, 0x10000180, 0xBD140100, 0x12000180, + 0xAF150100, 0x14000280, 0x30190100, 0x18000180, + 0xC0004100, 0xC8004500, 0xCC004900, 0xF8014E00, + 0xD2004F00, 0xD9005500, 0x801E5700, 0xF21E5900, + 0xE0006100, 0xE8006500, 0xEC006900, 0xF9016E00, + 0xF2006F00, 0xF9007500, 0x811E7700, 0xF31E7900, + 0xED1FA800, 0xA61EC200, 0xC01ECA00, 0xD21ED400, + 0xDB01DC00, 0xA71EE200, 0xC11EEA00, 0xD31EF400, + 0xDC01FC00, 0xB01E0201, 0xB11E0301, 0x141E1201, + 0x151E1301, 0x501E4C01, 0x511E4D01, 0xDC1EA001, + 0xDD1EA101, 0xEA1EAF01, 0xEB1EB001, 0xBA1F9103, + 0xC81F9503, 0xCA1F9703, 0xDA1F9903, 0xF81F9F03, + 0xEA1FA503, 0xFA1FA903, 0x701FB103, 0x721FB503, + 0x741FB703, 0x761FB903, 0x781FBF03, 0x7A1FC503, + 0x7C1FC903, 0xD21FCA03, 0xE21FCB03, 0x00041504, + 0x0D041804, 0x50043504, 0x5D043804, 0x021F001F, + 0x031F011F, 0x0A1F081F, 0x0B1F091F, 0x121F101F, + 0x131F111F, 0x1A1F181F, 0x1B1F191F, 0x221F201F, + 0x231F211F, 0x2A1F281F, 0x2B1F291F, 0x321F301F, + 0x331F311F, 0x3A1F381F, 0x3B1F391F, 0x421F401F, + 0x431F411F, 0x4A1F481F, 0x4B1F491F, 0x521F501F, + 0x531F511F, 0x5B1F591F, 0x621F601F, 0x631F611F, + 0x6A1F681F, 0x6B1F691F, 0xCD1FBF1F, 0xDD1FFE1F, + 0xC1004100, 0x06014300, 0xC9004500, 0xF4014700, + 0xCD004900, 0x301E4B00, 0x39014C00, 0x3E1E4D00, + 0x43014E00, 0xD3004F00, 0x541E5000, 0x54015200, + 0x5A015300, 0xDA005500, 0x821E5700, 0xDD005900, + 0x79015A00, 0xE1006100, 0x07016300, 0xE9006500, + 0xF5016700, 0xED006900, 0x311E6B00, 0x3A016C00, + 0x3F1E6D00, 0x44016E00, 0xF3006F00, 0x551E7000, + 0x55017200, 0x5B017300, 0xFA007500, 0x831E7700, + 0xFD007900, 0x7A017A00, 0x8503A800, 0xA41EC200, + 0xFA01C500, 0xFC01C600, 0x081EC700, 0xBE1ECA00, + 0x2E1ECF00, 0xD01ED400, 0x4C1ED500, 0xFE01D800, + 0xD701DC00, 0xA51EE200, 0xFB01E500, 0xFD01E600, + 0x091EE700, 0xBF1EEA00, 0x2F1EEF00, 0xD11EF400, + 0x4D1EF500, 0xFF01F800, 0xD801FC00, 0xAE1E0201, + 0xAF1E0301, 0x161E1201, 0x171E1301, 0x521E4C01, + 0x531E4D01, 0x781E6801, 0x791E6901, 0xDA1EA001, + 0xDB1EA101, 0xE81EAF01, 0xE91EB001, 0x86039103, + 0x88039503, 0x89039703, 0x8A039903, 0x8C039F03, + 0x8E03A503, 0x8F03A903, 0xAC03B103, 0xAD03B503, + 0xAE03B703, 0xAF03B903, 0xCC03BF03, 0xCD03C503, + 0xCE03C903, 0x9003CA03, 0xB003CB03, 0xD303D203, + 0x03041304, 0x0C041A04, 0x53043304, 0x5C043A04, + 0x041F001F, 0x051F011F, 0x0C1F081F, 0x0D1F091F, + 0x141F101F, 0x151F111F, 0x1C1F181F, 0x1D1F191F, + 0x241F201F, 0x251F211F, 0x2C1F281F, 0x2D1F291F, + 0x341F301F, 0x351F311F, 0x3C1F381F, 0x3D1F391F, + 0x441F401F, 0x451F411F, 0x4C1F481F, 0x4D1F491F, + 0x541F501F, 0x551F511F, 0x5D1F591F, 0x641F601F, + 0x651F611F, 0x6C1F681F, 0x6D1F691F, 0xCE1FBF1F, + 0xDE1FFE1F, 0xC2004100, 0x08014300, 0xCA004500, + 0x1C014700, 0x24014800, 0xCE004900, 0x34014A00, + 0xD4004F00, 0x5C015300, 0xDB005500, 0x74015700, + 0x76015900, 0x901E5A00, 0xE2006100, 0x09016300, + 0xEA006500, 0x1D016700, 0x25016800, 0xEE006900, + 0x35016A00, 0xF4006F00, 0x5D017300, 0xFB007500, + 0x75017700, 0x77017900, 0x911E7A00, 0xAC1EA01E, + 0xAD1EA11E, 0xC61EB81E, 0xC71EB91E, 0xD81ECC1E, + 0xD91ECD1E, 0xC3004100, 0xBC1E4500, 0x28014900, + 0xD1004E00, 0xD5004F00, 0x68015500, 0x7C1E5600, + 0xF81E5900, 0xE3006100, 0xBD1E6500, 0x29016900, + 0xF1006E00, 0xF5006F00, 0x69017500, 0x7D1E7600, + 0xF91E7900, 0xAA1EC200, 0xC41ECA00, 0xD61ED400, + 0xAB1EE200, 0xC51EEA00, 0xD71EF400, 0xB41E0201, + 0xB51E0301, 0xE01EA001, 0xE11EA101, 0xEE1EAF01, + 0xEF1EB001, 0x00014100, 0x12014500, 0x201E4700, + 0x2A014900, 0x4C014F00, 0x6A015500, 0x32025900, + 0x01016100, 0x13016500, 0x211E6700, 0x2B016900, + 0x4D016F00, 0x6B017500, 0x33027900, 0xDE01C400, + 0xE201C600, 0x2C02D500, 0x2A02D600, 0xD501DC00, + 0xDF01E400, 0xE301E600, 0x2D02F500, 0x2B02F600, + 0xD601FC00, 0xEC01EA01, 0xED01EB01, 0xE0012602, + 0xE1012702, 0x30022E02, 0x31022F02, 0xB91F9103, + 0xD91F9903, 0xE91FA503, 0xB11FB103, 0xD11FB903, + 0xE11FC503, 0xE2041804, 0xEE042304, 0xE3043804, + 0xEF044304, 0x381E361E, 0x391E371E, 0x5C1E5A1E, + 0x5D1E5B1E, 0x02014100, 0x14014500, 0x1E014700, + 0x2C014900, 0x4E014F00, 0x6C015500, 0x03016100, + 0x15016500, 0x1F016700, 0x2D016900, 0x4F016F00, + 0x6D017500, 0x1C1E2802, 0x1D1E2902, 0xB81F9103, + 0xD81F9903, 0xE81FA503, 0xB01FB103, 0xD01FB903, + 0xE01FC503, 0xD0041004, 0xD6041504, 0xC1041604, + 0x19041804, 0x0E042304, 0xD1043004, 0xD7043504, + 0xC2043604, 0x39043804, 0x5E044304, 0xB61EA01E, + 0xB71EA11E, 0x26024100, 0x021E4200, 0x0A014300, + 0x0A1E4400, 0x16014500, 0x1E1E4600, 0x20014700, + 0x221E4800, 0x30014900, 0x401E4D00, 0x441E4E00, + 0x2E024F00, 0x561E5000, 0x581E5200, 0x601E5300, + 0x6A1E5400, 0x861E5700, 0x8A1E5800, 0x8E1E5900, + 0x7B015A00, 0x27026100, 0x031E6200, 0x0B016300, + 0x0B1E6400, 0x17016500, 0x1F1E6600, 0x21016700, + 0x231E6800, 0x411E6D00, 0x451E6E00, 0x2F026F00, + 0x571E7000, 0x591E7200, 0x611E7300, 0x6B1E7400, + 0x871E7700, 0x8B1E7800, 0x8F1E7900, 0x7C017A00, + 0x641E5A01, 0x651E5B01, 0x661E6001, 0x671E6101, + 0x9B1E7F01, 0x681E621E, 0x691E631E, 0xC4004100, + 0xCB004500, 0x261E4800, 0xCF004900, 0xD6004F00, + 0xDC005500, 0x841E5700, 0x8C1E5800, 0x78015900, + 0xE4006100, 0xEB006500, 0x271E6800, 0xEF006900, + 0xF6006F00, 0x971E7400, 0xFC007500, 0x851E7700, + 0x8D1E7800, 0xFF007900, 0x4E1ED500, 0x4F1EF500, + 0x7A1E6A01, 0x7B1E6B01, 0xAA039903, 0xAB03A503, + 0xCA03B903, 0xCB03C503, 0xD403D203, 0x07040604, + 0xD2041004, 0x01041504, 0xDC041604, 0xDE041704, + 0xE4041804, 0xE6041E04, 0xF0042304, 0xF4042704, + 0xF8042B04, 0xEC042D04, 0xD3043004, 0x51043504, + 0xDD043604, 0xDF043704, 0xE5043804, 0xE7043E04, + 0xF1044304, 0xF5044704, 0xF9044B04, 0xED044D04, + 0x57045604, 0xDA04D804, 0xDB04D904, 0xEA04E804, + 0xEB04E904, 0xA21E4100, 0xBA1E4500, 0xC81E4900, + 0xCE1E4F00, 0xE61E5500, 0xF61E5900, 0xA31E6100, + 0xBB1E6500, 0xC91E6900, 0xCF1E6F00, 0xE71E7500, + 0xF71E7900, 0xA81EC200, 0xC21ECA00, 0xD41ED400, + 0xA91EE200, 0xC31EEA00, 0xD51EF400, 0xB21E0201, + 0xB31E0301, 0xDE1EA001, 0xDF1EA101, 0xEC1EAF01, + 0xED1EB001, 0xC5004100, 0x6E015500, 0xE5006100, + 0x6F017500, 0x981E7700, 0x991E7900, 0x50014F00, + 0x70015500, 0x51016F00, 0x71017500, 0xF2042304, + 0xF3044304, 0xCD014100, 0x0C014300, 0x0E014400, + 0x1A014500, 0xE6014700, 0x1E024800, 0xCF014900, + 0xE8014B00, 0x3D014C00, 0x47014E00, 0xD1014F00, + 0x58015200, 0x60015300, 0x64015400, 0xD3015500, + 0x7D015A00, 0xCE016100, 0x0D016300, 0x0F016400, + 0x1B016500, 0xE7016700, 0x1F026800, 0xD0016900, + 0xF0016A00, 0xE9016B00, 0x3E016C00, 0x48016E00, + 0xD2016F00, 0x59017200, 0x61017300, 0x65017400, + 0xD4017500, 0x7E017A00, 0xD901DC00, 0xDA01FC00, + 0xEE01B701, 0xEF019202, 0x00024100, 0x04024500, + 0x08024900, 0x0C024F00, 0x10025200, 0x14025500, + 0x01026100, 0x05026500, 0x09026900, 0x0D026F00, + 0x11027200, 0x15027500, 0x76047404, 0x77047504, + 0x02024100, 0x06024500, 0x0A024900, 0x0E024F00, + 0x12025200, 0x16025500, 0x03026100, 0x07026500, + 0x0B026900, 0x0F026F00, 0x13027200, 0x17027500, + 0x081F9103, 0x181F9503, 0x281F9703, 0x381F9903, + 0x481F9F03, 0x681FA903, 0x001FB103, 0x101FB503, + 0x201FB703, 0x301FB903, 0x401FBF03, 0xE41FC103, + 0x501FC503, 0x601FC903, 0x091F9103, 0x191F9503, + 0x291F9703, 0x391F9903, 0x491F9F03, 0xEC1FA103, + 0x591FA503, 0x691FA903, 0x011FB103, 0x111FB503, + 0x211FB703, 0x311FB903, 0x411FBF03, 0xE51FC103, + 0x511FC503, 0x611FC903, 0xA0014F00, 0xAF015500, + 0xA1016F00, 0xB0017500, 0xA01E4100, 0x041E4200, + 0x0C1E4400, 0xB81E4500, 0x241E4800, 0xCA1E4900, + 0x321E4B00, 0x361E4C00, 0x421E4D00, 0x461E4E00, + 0xCC1E4F00, 0x5A1E5200, 0x621E5300, 0x6C1E5400, + 0xE41E5500, 0x7E1E5600, 0x881E5700, 0xF41E5900, + 0x921E5A00, 0xA11E6100, 0x051E6200, 0x0D1E6400, + 0xB91E6500, 0x251E6800, 0xCB1E6900, 0x331E6B00, + 0x371E6C00, 0x431E6D00, 0x471E6E00, 0xCD1E6F00, + 0x5B1E7200, 0x631E7300, 0x6D1E7400, 0xE51E7500, + 0x7F1E7600, 0x891E7700, 0xF51E7900, 0x931E7A00, + 0xE21EA001, 0xE31EA101, 0xF01EAF01, 0xF11EB001, + 0x721E5500, 0x731E7500, 0x001E4100, 0x011E6100, + 0x18025300, 0x1A025400, 0x19027300, 0x1B027400, + 0xC7004300, 0x101E4400, 0x28024500, 0x22014700, + 0x281E4800, 0x36014B00, 0x3B014C00, 0x45014E00, + 0x56015200, 0x5E015300, 0x62015400, 0xE7006300, + 0x111E6400, 0x29026500, 0x23016700, 0x291E6800, + 0x37016B00, 0x3C016C00, 0x46016E00, 0x57017200, + 0x5F017300, 0x63017400, 0x04014100, 0x18014500, + 0x2E014900, 0xEA014F00, 0x72015500, 0x05016100, + 0x19016500, 0x2F016900, 0xEB016F00, 0x73017500, + 0x121E4400, 0x181E4500, 0x3C1E4C00, 0x4A1E4E00, + 0x701E5400, 0x761E5500, 0x131E6400, 0x191E6500, + 0x3D1E6C00, 0x4B1E6E00, 0x711E7400, 0x771E7500, + 0x2A1E4800, 0x2B1E6800, 0x1A1E4500, 0x2C1E4900, + 0x741E5500, 0x1B1E6500, 0x2D1E6900, 0x751E7500, + 0x061E4200, 0x0E1E4400, 0x341E4B00, 0x3A1E4C00, + 0x481E4E00, 0x5E1E5200, 0x6E1E5400, 0x941E5A00, + 0x071E6200, 0x0F1E6400, 0x961E6800, 0x351E6B00, + 0x3B1E6C00, 0x491E6E00, 0x5F1E7200, 0x6F1E7400, + 0x951E7A00, 0x6E223C00, 0x60223D00, 0x6F223E00, + 0x9A219021, 0x9B219221, 0xAE219421, 0xCD21D021, + 0xCF21D221, 0xCE21D421, 0x04220322, 0x09220822, + 0x0C220B22, 0x24222322, 0x26222522, 0x41223C22, + 0x44224322, 0x47224522, 0x49224822, 0x6D224D22, + 0x62226122, 0x70226422, 0x71226522, 0x74227222, + 0x75227322, 0x78227622, 0x79227722, 0x80227A22, + 0x81227B22, 0xE0227C22, 0xE1227D22, 0x84228222, + 0x85228322, 0x88228622, 0x89228722, 0xE2229122, + 0xE3229222, 0xAC22A222, 0xAD22A822, 0xAE22A922, + 0xAF22AB22, 0xEA22B222, 0xEB22B322, 0xEC22B422, + 0xED22B522, 0xC11FA800, 0xB61FB103, 0xC61FB703, + 0xD61FB903, 0xE61FC503, 0xF61FC903, 0xD71FCA03, + 0xE71FCB03, 0x061F001F, 0x071F011F, 0x0E1F081F, + 0x0F1F091F, 0x261F201F, 0x271F211F, 0x2E1F281F, + 0x2F1F291F, 0x361F301F, 0x371F311F, 0x3E1F381F, + 0x3F1F391F, 0x561F501F, 0x571F511F, 0x5F1F591F, + 0x661F601F, 0x671F611F, 0x6E1F681F, 0x6F1F691F, + 0xCF1FBF1F, 0xDF1FFE1F, 0xBC1F9103, 0xCC1F9703, + 0xFC1FA903, 0xB41FAC03, 0xC41FAE03, 0xB31FB103, + 0xC31FB703, 0xF31FC903, 0xF41FCE03, 0x801F001F, + 0x811F011F, 0x821F021F, 0x831F031F, 0x841F041F, + 0x851F051F, 0x861F061F, 0x871F071F, 0x881F081F, + 0x891F091F, 0x8A1F0A1F, 0x8B1F0B1F, 0x8C1F0C1F, + 0x8D1F0D1F, 0x8E1F0E1F, 0x8F1F0F1F, 0x901F201F, + 0x911F211F, 0x921F221F, 0x931F231F, 0x941F241F, + 0x951F251F, 0x961F261F, 0x971F271F, 0x981F281F, + 0x991F291F, 0x9A1F2A1F, 0x9B1F2B1F, 0x9C1F2C1F, + 0x9D1F2D1F, 0x9E1F2E1F, 0x9F1F2F1F, 0xA01F601F, + 0xA11F611F, 0xA21F621F, 0xA31F631F, 0xA41F641F, + 0xA51F651F, 0xA61F661F, 0xA71F671F, 0xA81F681F, + 0xA91F691F, 0xAA1F6A1F, 0xAB1F6B1F, 0xAC1F6C1F, + 0xAD1F6D1F, 0xAE1F6E1F, 0xAF1F6F1F, 0xB21F701F, + 0xC21F741F, 0xF21F7C1F, 0xB71FB61F, 0xC71FC61F, + 0xF71FF61F, 0x22062706, 0x23062706, 0x24064806, + 0x26064A06, 0xC206C106, 0xD306D206, 0xC006D506, + 0x25062706, 0x29092809, 0x31093009, 0x34093309, + 0xCB09C709, 0xCC09C709, 0x4B0B470B, 0x480B470B, + 0x4C0B470B, 0xCA0BC60B, 0xCB0BC70B, 0x940B920B, + 0xCC0BC60B, 0x480C460C, 0xCA0CC60C, 0xC00CBF0C, + 0xC70CC60C, 0xCB0CCA0C, 0xC80CC60C, 0x4A0D460D, + 0x4B0D470D, 0x4C0D460D, 0xDA0DD90D, 0xDD0DDC0D, + 0xDC0DD90D, 0xDE0DD90D, 0x26102510, 0x061B051B, + 0x081B071B, 0x0A1B091B, 0x0C1B0B1B, 0x0E1B0D1B, + 0x121B111B, 0x3B1B3A1B, 0x3D1B3C1B, 0x401B3E1B, + 0x411B3F1B, 0x431B421B, 0x94304630, 0x4C304B30, + 0x4E304D30, 0x50304F30, 0x52305130, 0x54305330, + 0x56305530, 0x58305730, 0x5A305930, 0x5C305B30, + 0x5E305D30, 0x60305F30, 0x62306130, 0x65306430, + 0x67306630, 0x69306830, 0x70306F30, 0x73307230, + 0x76307530, 0x79307830, 0x7C307B30, 0x9E309D30, + 0xF430A630, 0xAC30AB30, 0xAE30AD30, 0xB030AF30, + 0xB230B130, 0xB430B330, 0xB630B530, 0xB830B730, + 0xBA30B930, 0xBC30BB30, 0xBE30BD30, 0xC030BF30, + 0xC230C130, 0xC530C430, 0xC730C630, 0xC930C830, + 0xD030CF30, 0xD330D230, 0xD630D530, 0xD930D830, + 0xDC30DB30, 0xF730EF30, 0xF830F030, 0xF930F130, + 0xFA30F230, 0xFE30FD30, 0x71306F30, 0x74307230, + 0x77307530, 0x7A307830, 0x7D307B30, 0xD130CF30, + 0xD430D230, 0xD730D530, 0xDA30D830, 0xDD30DB30, + 0x99100100, 0x9A100100, 0x9B100100, 0x9C100100, + 0xA5100100, 0xAB100100, 0x31110100, 0x2E110100, + 0x32110100, 0x2F110100, 0x47130100, 0x4B130100, + 0x47130100, 0x4C130100, 0xB9140100, 0xBC140100, + 0xB9140100, 0xBB140100, 0xB9140100, 0xBE140100, + 0xB8150100, 0xBA150100, 0xB9150100, 0xBB150100, + 0x35190100, 0x38190100, +}; + +static uint32_t const __CFUniCharCanonicalPrecompositionMappingTableLength = 541; + +static uint32_t const __CFUniCharCompatibilityDecompositionMappingTable[] = { + 0xA0760000, 0xA0000000, 0x20000001, 0xA8000000, + 0x00000002, 0xAA000000, 0x61000001, 0xAF000000, + 0x02000002, 0xB2000000, 0x32000001, 0xB3000000, + 0x33000001, 0xB4000000, 0x04000002, 0xB5000000, + 0xBC030001, 0xB8000000, 0x06000002, 0xB9000000, + 0x31000001, 0xBA000000, 0x6F000001, 0xBC000000, + 0x08000003, 0xBD000000, 0x0B000003, 0xBE000000, + 0x0E000003, 0x32010000, 0x11000002, 0x33010000, + 0x13000002, 0x3F010000, 0x15000002, 0x40010000, + 0x17000002, 0x49010000, 0x19000002, 0x7F010000, + 0x73000001, 0xC4010000, 0x1B000002, 0xC5010000, + 0x1D000002, 0xC6010000, 0x1F000002, 0xC7010000, + 0x21000002, 0xC8010000, 0x23000002, 0xC9010000, + 0x25000002, 0xCA010000, 0x27000002, 0xCB010000, + 0x29000002, 0xCC010000, 0x2B000002, 0xF1010000, + 0x2D000002, 0xF2010000, 0x2F000002, 0xF3010000, + 0x31000002, 0xB0020000, 0x68000001, 0xB1020000, + 0x66020001, 0xB2020000, 0x6A000001, 0xB3020000, + 0x72000001, 0xB4020000, 0x79020001, 0xB5020000, + 0x7B020001, 0xB6020000, 0x81020001, 0xB7020000, + 0x77000001, 0xB8020000, 0x79000001, 0xD8020000, + 0x33000002, 0xD9020000, 0x35000002, 0xDA020000, + 0x37000002, 0xDB020000, 0x39000002, 0xDC020000, + 0x3B000002, 0xDD020000, 0x3D000002, 0xE0020000, + 0x63020001, 0xE1020000, 0x6C000001, 0xE2020000, + 0x73000001, 0xE3020000, 0x78000001, 0xE4020000, + 0x95020001, 0x7A030000, 0x3F000002, 0x84030000, + 0x41000002, 0xD0030000, 0xB2030001, 0xD1030000, + 0xB8030001, 0xD2030000, 0xA5030001, 0xD5030000, + 0xC6030001, 0xD6030000, 0xC0030001, 0xF0030000, + 0xBA030001, 0xF1030000, 0xC1030001, 0xF2030000, + 0xC2030001, 0xF4030000, 0x98030001, 0xF5030000, + 0xB5030001, 0xF9030000, 0xA3030001, 0x87050000, + 0x43000002, 0x75060000, 0x45000002, 0x76060000, + 0x47000002, 0x77060000, 0x49000002, 0x78060000, + 0x4B000002, 0x330E0000, 0x4D000002, 0xB30E0000, + 0x4F000002, 0xDC0E0000, 0x51000002, 0xDD0E0000, + 0x53000002, 0x0C0F0000, 0x0B0F0001, 0x770F0000, + 0x55000002, 0x790F0000, 0x57000002, 0xFC100000, + 0xDC100001, 0x2C1D0000, 0x41000001, 0x2D1D0000, + 0xC6000001, 0x2E1D0000, 0x42000001, 0x301D0000, + 0x44000001, 0x311D0000, 0x45000001, 0x321D0000, + 0x8E010001, 0x331D0000, 0x47000001, 0x341D0000, + 0x48000001, 0x351D0000, 0x49000001, 0x361D0000, + 0x4A000001, 0x371D0000, 0x4B000001, 0x381D0000, + 0x4C000001, 0x391D0000, 0x4D000001, 0x3A1D0000, + 0x4E000001, 0x3C1D0000, 0x4F000001, 0x3D1D0000, + 0x22020001, 0x3E1D0000, 0x50000001, 0x3F1D0000, + 0x52000001, 0x401D0000, 0x54000001, 0x411D0000, + 0x55000001, 0x421D0000, 0x57000001, 0x431D0000, + 0x61000001, 0x441D0000, 0x50020001, 0x451D0000, + 0x51020001, 0x461D0000, 0x021D0001, 0x471D0000, + 0x62000001, 0x481D0000, 0x64000001, 0x491D0000, + 0x65000001, 0x4A1D0000, 0x59020001, 0x4B1D0000, + 0x5B020001, 0x4C1D0000, 0x5C020001, 0x4D1D0000, + 0x67000001, 0x4F1D0000, 0x6B000001, 0x501D0000, + 0x6D000001, 0x511D0000, 0x4B010001, 0x521D0000, + 0x6F000001, 0x531D0000, 0x54020001, 0x541D0000, + 0x161D0001, 0x551D0000, 0x171D0001, 0x561D0000, + 0x70000001, 0x571D0000, 0x74000001, 0x581D0000, + 0x75000001, 0x591D0000, 0x1D1D0001, 0x5A1D0000, + 0x6F020001, 0x5B1D0000, 0x76000001, 0x5C1D0000, + 0x251D0001, 0x5D1D0000, 0xB2030001, 0x5E1D0000, + 0xB3030001, 0x5F1D0000, 0xB4030001, 0x601D0000, + 0xC6030001, 0x611D0000, 0xC7030001, 0x621D0000, + 0x69000001, 0x631D0000, 0x72000001, 0x641D0000, + 0x75000001, 0x651D0000, 0x76000001, 0x661D0000, + 0xB2030001, 0x671D0000, 0xB3030001, 0x681D0000, + 0xC1030001, 0x691D0000, 0xC6030001, 0x6A1D0000, + 0xC7030001, 0x781D0000, 0x3D040001, 0x9B1D0000, + 0x52020001, 0x9C1D0000, 0x63000001, 0x9D1D0000, + 0x55020001, 0x9E1D0000, 0xF0000001, 0x9F1D0000, + 0x5C020001, 0xA01D0000, 0x66000001, 0xA11D0000, + 0x5F020001, 0xA21D0000, 0x61020001, 0xA31D0000, + 0x65020001, 0xA41D0000, 0x68020001, 0xA51D0000, + 0x69020001, 0xA61D0000, 0x6A020001, 0xA71D0000, + 0x7B1D0001, 0xA81D0000, 0x9D020001, 0xA91D0000, + 0x6D020001, 0xAA1D0000, 0x851D0001, 0xAB1D0000, + 0x9F020001, 0xAC1D0000, 0x71020001, 0xAD1D0000, + 0x70020001, 0xAE1D0000, 0x72020001, 0xAF1D0000, + 0x73020001, 0xB01D0000, 0x74020001, 0xB11D0000, + 0x75020001, 0xB21D0000, 0x78020001, 0xB31D0000, + 0x82020001, 0xB41D0000, 0x83020001, 0xB51D0000, + 0xAB010001, 0xB61D0000, 0x89020001, 0xB71D0000, + 0x8A020001, 0xB81D0000, 0x1C1D0001, 0xB91D0000, + 0x8B020001, 0xBA1D0000, 0x8C020001, 0xBB1D0000, + 0x7A000001, 0xBC1D0000, 0x90020001, 0xBD1D0000, + 0x91020001, 0xBE1D0000, 0x92020001, 0xBF1D0000, + 0xB8030001, 0x9A1E0000, 0x59000002, 0xBD1F0000, + 0x5B000002, 0xBF1F0000, 0x5D000002, 0xC01F0000, + 0x5F000002, 0xFE1F0000, 0x61000002, 0x02200000, + 0x20000001, 0x03200000, 0x20000001, 0x04200000, + 0x20000001, 0x05200000, 0x20000001, 0x06200000, + 0x20000001, 0x07200000, 0x20000001, 0x08200000, + 0x20000001, 0x09200000, 0x20000001, 0x0A200000, + 0x20000001, 0x11200000, 0x10200001, 0x17200000, + 0x63000002, 0x24200000, 0x2E000001, 0x25200000, + 0x65000002, 0x26200000, 0x67000003, 0x2F200000, + 0x20000001, 0x33200000, 0x6A000002, 0x34200000, + 0x6C000003, 0x36200000, 0x6F000002, 0x37200000, + 0x71000003, 0x3C200000, 0x74000002, 0x3E200000, + 0x76000002, 0x47200000, 0x78000002, 0x48200000, + 0x7A000002, 0x49200000, 0x7C000002, 0x57200000, + 0x7E000004, 0x5F200000, 0x20000001, 0x70200000, + 0x30000001, 0x71200000, 0x69000001, 0x74200000, + 0x34000001, 0x75200000, 0x35000001, 0x76200000, + 0x36000001, 0x77200000, 0x37000001, 0x78200000, + 0x38000001, 0x79200000, 0x39000001, 0x7A200000, + 0x2B000001, 0x7B200000, 0x12220001, 0x7C200000, + 0x3D000001, 0x7D200000, 0x28000001, 0x7E200000, + 0x29000001, 0x7F200000, 0x6E000001, 0x80200000, + 0x30000001, 0x81200000, 0x31000001, 0x82200000, + 0x32000001, 0x83200000, 0x33000001, 0x84200000, + 0x34000001, 0x85200000, 0x35000001, 0x86200000, + 0x36000001, 0x87200000, 0x37000001, 0x88200000, + 0x38000001, 0x89200000, 0x39000001, 0x8A200000, + 0x2B000001, 0x8B200000, 0x12220001, 0x8C200000, + 0x3D000001, 0x8D200000, 0x28000001, 0x8E200000, + 0x29000001, 0x90200000, 0x61000001, 0x91200000, + 0x65000001, 0x92200000, 0x6F000001, 0x93200000, + 0x78000001, 0x94200000, 0x59020001, 0x95200000, + 0x68000001, 0x96200000, 0x6B000001, 0x97200000, + 0x6C000001, 0x98200000, 0x6D000001, 0x99200000, + 0x6E000001, 0x9A200000, 0x70000001, 0x9B200000, + 0x73000001, 0x9C200000, 0x74000001, 0xA8200000, + 0x82000002, 0x00210000, 0x84000003, 0x01210000, + 0x87000003, 0x02210000, 0x43000001, 0x03210000, + 0x8A000002, 0x05210000, 0x8C000003, 0x06210000, + 0x8F000003, 0x07210000, 0x90010001, 0x09210000, + 0x92000002, 0x0A210000, 0x67000001, 0x0B210000, + 0x48000001, 0x0C210000, 0x48000001, 0x0D210000, + 0x48000001, 0x0E210000, 0x68000001, 0x0F210000, + 0x27010001, 0x10210000, 0x49000001, 0x11210000, + 0x49000001, 0x12210000, 0x4C000001, 0x13210000, + 0x6C000001, 0x15210000, 0x4E000001, 0x16210000, + 0x94000002, 0x19210000, 0x50000001, 0x1A210000, + 0x51000001, 0x1B210000, 0x52000001, 0x1C210000, + 0x52000001, 0x1D210000, 0x52000001, 0x20210000, + 0x96000002, 0x21210000, 0x98000003, 0x22210000, + 0x9B000002, 0x24210000, 0x5A000001, 0x28210000, + 0x5A000001, 0x2C210000, 0x42000001, 0x2D210000, + 0x43000001, 0x2F210000, 0x65000001, 0x30210000, + 0x45000001, 0x31210000, 0x46000001, 0x33210000, + 0x4D000001, 0x34210000, 0x6F000001, 0x35210000, + 0xD0050001, 0x36210000, 0xD1050001, 0x37210000, + 0xD2050001, 0x38210000, 0xD3050001, 0x39210000, + 0x69000001, 0x3B210000, 0x9D000003, 0x3C210000, + 0xC0030001, 0x3D210000, 0xB3030001, 0x3E210000, + 0x93030001, 0x3F210000, 0xA0030001, 0x40210000, + 0x11220001, 0x45210000, 0x44000001, 0x46210000, + 0x64000001, 0x47210000, 0x65000001, 0x48210000, + 0x69000001, 0x49210000, 0x6A000001, 0x50210000, + 0xA0000003, 0x51210000, 0xA3000003, 0x52210000, + 0xA6000004, 0x53210000, 0xAA000003, 0x54210000, + 0xAD000003, 0x55210000, 0xB0000003, 0x56210000, + 0xB3000003, 0x57210000, 0xB6000003, 0x58210000, + 0xB9000003, 0x59210000, 0xBC000003, 0x5A210000, + 0xBF000003, 0x5B210000, 0xC2000003, 0x5C210000, + 0xC5000003, 0x5D210000, 0xC8000003, 0x5E210000, + 0xCB000003, 0x5F210000, 0xCE000002, 0x60210000, + 0x49000001, 0x61210000, 0xD0000002, 0x62210000, + 0xD2000003, 0x63210000, 0xD5000002, 0x64210000, + 0x56000001, 0x65210000, 0xD7000002, 0x66210000, + 0xD9000003, 0x67210000, 0xDC000004, 0x68210000, + 0xE0000002, 0x69210000, 0x58000001, 0x6A210000, + 0xE2000002, 0x6B210000, 0xE4000003, 0x6C210000, + 0x4C000001, 0x6D210000, 0x43000001, 0x6E210000, + 0x44000001, 0x6F210000, 0x4D000001, 0x70210000, + 0x69000001, 0x71210000, 0xE7000002, 0x72210000, + 0xE9000003, 0x73210000, 0xEC000002, 0x74210000, + 0x76000001, 0x75210000, 0xEE000002, 0x76210000, + 0xF0000003, 0x77210000, 0xF3000004, 0x78210000, + 0xF7000002, 0x79210000, 0x78000001, 0x7A210000, + 0xF9000002, 0x7B210000, 0xFB000003, 0x7C210000, + 0x6C000001, 0x7D210000, 0x63000001, 0x7E210000, + 0x64000001, 0x7F210000, 0x6D000001, 0x89210000, + 0xFE000003, 0x2C220000, 0x01010002, 0x2D220000, + 0x03010003, 0x2F220000, 0x06010002, 0x30220000, + 0x08010003, 0x60240000, 0x31000001, 0x61240000, + 0x32000001, 0x62240000, 0x33000001, 0x63240000, + 0x34000001, 0x64240000, 0x35000001, 0x65240000, + 0x36000001, 0x66240000, 0x37000001, 0x67240000, + 0x38000001, 0x68240000, 0x39000001, 0x69240000, + 0x0B010002, 0x6A240000, 0x0D010002, 0x6B240000, + 0x0F010002, 0x6C240000, 0x11010002, 0x6D240000, + 0x13010002, 0x6E240000, 0x15010002, 0x6F240000, + 0x17010002, 0x70240000, 0x19010002, 0x71240000, + 0x1B010002, 0x72240000, 0x1D010002, 0x73240000, + 0x1F010002, 0x74240000, 0x21010003, 0x75240000, + 0x24010003, 0x76240000, 0x27010003, 0x77240000, + 0x2A010003, 0x78240000, 0x2D010003, 0x79240000, + 0x30010003, 0x7A240000, 0x33010003, 0x7B240000, + 0x36010003, 0x7C240000, 0x39010003, 0x7D240000, + 0x3C010004, 0x7E240000, 0x40010004, 0x7F240000, + 0x44010004, 0x80240000, 0x48010004, 0x81240000, + 0x4C010004, 0x82240000, 0x50010004, 0x83240000, + 0x54010004, 0x84240000, 0x58010004, 0x85240000, + 0x5C010004, 0x86240000, 0x60010004, 0x87240000, + 0x64010004, 0x88240000, 0x68010002, 0x89240000, + 0x6A010002, 0x8A240000, 0x6C010002, 0x8B240000, + 0x6E010002, 0x8C240000, 0x70010002, 0x8D240000, + 0x72010002, 0x8E240000, 0x74010002, 0x8F240000, + 0x76010002, 0x90240000, 0x78010002, 0x91240000, + 0x7A010003, 0x92240000, 0x7D010003, 0x93240000, + 0x80010003, 0x94240000, 0x83010003, 0x95240000, + 0x86010003, 0x96240000, 0x89010003, 0x97240000, + 0x8C010003, 0x98240000, 0x8F010003, 0x99240000, + 0x92010003, 0x9A240000, 0x95010003, 0x9B240000, + 0x98010003, 0x9C240000, 0x9B010003, 0x9D240000, + 0x9E010003, 0x9E240000, 0xA1010003, 0x9F240000, + 0xA4010003, 0xA0240000, 0xA7010003, 0xA1240000, + 0xAA010003, 0xA2240000, 0xAD010003, 0xA3240000, + 0xB0010003, 0xA4240000, 0xB3010003, 0xA5240000, + 0xB6010003, 0xA6240000, 0xB9010003, 0xA7240000, + 0xBC010003, 0xA8240000, 0xBF010003, 0xA9240000, + 0xC2010003, 0xAA240000, 0xC5010003, 0xAB240000, + 0xC8010003, 0xAC240000, 0xCB010003, 0xAD240000, + 0xCE010003, 0xAE240000, 0xD1010003, 0xAF240000, + 0xD4010003, 0xB0240000, 0xD7010003, 0xB1240000, + 0xDA010003, 0xB2240000, 0xDD010003, 0xB3240000, + 0xE0010003, 0xB4240000, 0xE3010003, 0xB5240000, + 0xE6010003, 0xB6240000, 0x41000001, 0xB7240000, + 0x42000001, 0xB8240000, 0x43000001, 0xB9240000, + 0x44000001, 0xBA240000, 0x45000001, 0xBB240000, + 0x46000001, 0xBC240000, 0x47000001, 0xBD240000, + 0x48000001, 0xBE240000, 0x49000001, 0xBF240000, + 0x4A000001, 0xC0240000, 0x4B000001, 0xC1240000, + 0x4C000001, 0xC2240000, 0x4D000001, 0xC3240000, + 0x4E000001, 0xC4240000, 0x4F000001, 0xC5240000, + 0x50000001, 0xC6240000, 0x51000001, 0xC7240000, + 0x52000001, 0xC8240000, 0x53000001, 0xC9240000, + 0x54000001, 0xCA240000, 0x55000001, 0xCB240000, + 0x56000001, 0xCC240000, 0x57000001, 0xCD240000, + 0x58000001, 0xCE240000, 0x59000001, 0xCF240000, + 0x5A000001, 0xD0240000, 0x61000001, 0xD1240000, + 0x62000001, 0xD2240000, 0x63000001, 0xD3240000, + 0x64000001, 0xD4240000, 0x65000001, 0xD5240000, + 0x66000001, 0xD6240000, 0x67000001, 0xD7240000, + 0x68000001, 0xD8240000, 0x69000001, 0xD9240000, + 0x6A000001, 0xDA240000, 0x6B000001, 0xDB240000, + 0x6C000001, 0xDC240000, 0x6D000001, 0xDD240000, + 0x6E000001, 0xDE240000, 0x6F000001, 0xDF240000, + 0x70000001, 0xE0240000, 0x71000001, 0xE1240000, + 0x72000001, 0xE2240000, 0x73000001, 0xE3240000, + 0x74000001, 0xE4240000, 0x75000001, 0xE5240000, + 0x76000001, 0xE6240000, 0x77000001, 0xE7240000, + 0x78000001, 0xE8240000, 0x79000001, 0xE9240000, + 0x7A000001, 0xEA240000, 0x30000001, 0x0C2A0000, + 0xE9010004, 0x742A0000, 0xED010003, 0x752A0000, + 0xF0010002, 0x762A0000, 0xF2010003, 0x7C2C0000, + 0x6A000001, 0x7D2C0000, 0x56000001, 0x6F2D0000, + 0x612D0001, 0x9F2E0000, 0xCD6B0001, 0xF32E0000, + 0x9F9F0001, 0x002F0000, 0x004E0001, 0x012F0000, + 0x284E0001, 0x022F0000, 0x364E0001, 0x032F0000, + 0x3F4E0001, 0x042F0000, 0x594E0001, 0x052F0000, + 0x854E0001, 0x062F0000, 0x8C4E0001, 0x072F0000, + 0xA04E0001, 0x082F0000, 0xBA4E0001, 0x092F0000, + 0x3F510001, 0x0A2F0000, 0x65510001, 0x0B2F0000, + 0x6B510001, 0x0C2F0000, 0x82510001, 0x0D2F0000, + 0x96510001, 0x0E2F0000, 0xAB510001, 0x0F2F0000, + 0xE0510001, 0x102F0000, 0xF5510001, 0x112F0000, + 0x00520001, 0x122F0000, 0x9B520001, 0x132F0000, + 0xF9520001, 0x142F0000, 0x15530001, 0x152F0000, + 0x1A530001, 0x162F0000, 0x38530001, 0x172F0000, + 0x41530001, 0x182F0000, 0x5C530001, 0x192F0000, + 0x69530001, 0x1A2F0000, 0x82530001, 0x1B2F0000, + 0xB6530001, 0x1C2F0000, 0xC8530001, 0x1D2F0000, + 0xE3530001, 0x1E2F0000, 0xD7560001, 0x1F2F0000, + 0x1F570001, 0x202F0000, 0xEB580001, 0x212F0000, + 0x02590001, 0x222F0000, 0x0A590001, 0x232F0000, + 0x15590001, 0x242F0000, 0x27590001, 0x252F0000, + 0x73590001, 0x262F0000, 0x505B0001, 0x272F0000, + 0x805B0001, 0x282F0000, 0xF85B0001, 0x292F0000, + 0x0F5C0001, 0x2A2F0000, 0x225C0001, 0x2B2F0000, + 0x385C0001, 0x2C2F0000, 0x6E5C0001, 0x2D2F0000, + 0x715C0001, 0x2E2F0000, 0xDB5D0001, 0x2F2F0000, + 0xE55D0001, 0x302F0000, 0xF15D0001, 0x312F0000, + 0xFE5D0001, 0x322F0000, 0x725E0001, 0x332F0000, + 0x7A5E0001, 0x342F0000, 0x7F5E0001, 0x352F0000, + 0xF45E0001, 0x362F0000, 0xFE5E0001, 0x372F0000, + 0x0B5F0001, 0x382F0000, 0x135F0001, 0x392F0000, + 0x505F0001, 0x3A2F0000, 0x615F0001, 0x3B2F0000, + 0x735F0001, 0x3C2F0000, 0xC35F0001, 0x3D2F0000, + 0x08620001, 0x3E2F0000, 0x36620001, 0x3F2F0000, + 0x4B620001, 0x402F0000, 0x2F650001, 0x412F0000, + 0x34650001, 0x422F0000, 0x87650001, 0x432F0000, + 0x97650001, 0x442F0000, 0xA4650001, 0x452F0000, + 0xB9650001, 0x462F0000, 0xE0650001, 0x472F0000, + 0xE5650001, 0x482F0000, 0xF0660001, 0x492F0000, + 0x08670001, 0x4A2F0000, 0x28670001, 0x4B2F0000, + 0x206B0001, 0x4C2F0000, 0x626B0001, 0x4D2F0000, + 0x796B0001, 0x4E2F0000, 0xB36B0001, 0x4F2F0000, + 0xCB6B0001, 0x502F0000, 0xD46B0001, 0x512F0000, + 0xDB6B0001, 0x522F0000, 0x0F6C0001, 0x532F0000, + 0x146C0001, 0x542F0000, 0x346C0001, 0x552F0000, + 0x6B700001, 0x562F0000, 0x2A720001, 0x572F0000, + 0x36720001, 0x582F0000, 0x3B720001, 0x592F0000, + 0x3F720001, 0x5A2F0000, 0x47720001, 0x5B2F0000, + 0x59720001, 0x5C2F0000, 0x5B720001, 0x5D2F0000, + 0xAC720001, 0x5E2F0000, 0x84730001, 0x5F2F0000, + 0x89730001, 0x602F0000, 0xDC740001, 0x612F0000, + 0xE6740001, 0x622F0000, 0x18750001, 0x632F0000, + 0x1F750001, 0x642F0000, 0x28750001, 0x652F0000, + 0x30750001, 0x662F0000, 0x8B750001, 0x672F0000, + 0x92750001, 0x682F0000, 0x76760001, 0x692F0000, + 0x7D760001, 0x6A2F0000, 0xAE760001, 0x6B2F0000, + 0xBF760001, 0x6C2F0000, 0xEE760001, 0x6D2F0000, + 0xDB770001, 0x6E2F0000, 0xE2770001, 0x6F2F0000, + 0xF3770001, 0x702F0000, 0x3A790001, 0x712F0000, + 0xB8790001, 0x722F0000, 0xBE790001, 0x732F0000, + 0x747A0001, 0x742F0000, 0xCB7A0001, 0x752F0000, + 0xF97A0001, 0x762F0000, 0x737C0001, 0x772F0000, + 0xF87C0001, 0x782F0000, 0x367F0001, 0x792F0000, + 0x517F0001, 0x7A2F0000, 0x8A7F0001, 0x7B2F0000, + 0xBD7F0001, 0x7C2F0000, 0x01800001, 0x7D2F0000, + 0x0C800001, 0x7E2F0000, 0x12800001, 0x7F2F0000, + 0x33800001, 0x802F0000, 0x7F800001, 0x812F0000, + 0x89800001, 0x822F0000, 0xE3810001, 0x832F0000, + 0xEA810001, 0x842F0000, 0xF3810001, 0x852F0000, + 0xFC810001, 0x862F0000, 0x0C820001, 0x872F0000, + 0x1B820001, 0x882F0000, 0x1F820001, 0x892F0000, + 0x6E820001, 0x8A2F0000, 0x72820001, 0x8B2F0000, + 0x78820001, 0x8C2F0000, 0x4D860001, 0x8D2F0000, + 0x6B860001, 0x8E2F0000, 0x40880001, 0x8F2F0000, + 0x4C880001, 0x902F0000, 0x63880001, 0x912F0000, + 0x7E890001, 0x922F0000, 0x8B890001, 0x932F0000, + 0xD2890001, 0x942F0000, 0x008A0001, 0x952F0000, + 0x378C0001, 0x962F0000, 0x468C0001, 0x972F0000, + 0x558C0001, 0x982F0000, 0x788C0001, 0x992F0000, + 0x9D8C0001, 0x9A2F0000, 0x648D0001, 0x9B2F0000, + 0x708D0001, 0x9C2F0000, 0xB38D0001, 0x9D2F0000, + 0xAB8E0001, 0x9E2F0000, 0xCA8E0001, 0x9F2F0000, + 0x9B8F0001, 0xA02F0000, 0xB08F0001, 0xA12F0000, + 0xB58F0001, 0xA22F0000, 0x91900001, 0xA32F0000, + 0x49910001, 0xA42F0000, 0xC6910001, 0xA52F0000, + 0xCC910001, 0xA62F0000, 0xD1910001, 0xA72F0000, + 0x77950001, 0xA82F0000, 0x80950001, 0xA92F0000, + 0x1C960001, 0xAA2F0000, 0xB6960001, 0xAB2F0000, + 0xB9960001, 0xAC2F0000, 0xE8960001, 0xAD2F0000, + 0x51970001, 0xAE2F0000, 0x5E970001, 0xAF2F0000, + 0x62970001, 0xB02F0000, 0x69970001, 0xB12F0000, + 0xCB970001, 0xB22F0000, 0xED970001, 0xB32F0000, + 0xF3970001, 0xB42F0000, 0x01980001, 0xB52F0000, + 0xA8980001, 0xB62F0000, 0xDB980001, 0xB72F0000, + 0xDF980001, 0xB82F0000, 0x96990001, 0xB92F0000, + 0x99990001, 0xBA2F0000, 0xAC990001, 0xBB2F0000, + 0xA89A0001, 0xBC2F0000, 0xD89A0001, 0xBD2F0000, + 0xDF9A0001, 0xBE2F0000, 0x259B0001, 0xBF2F0000, + 0x2F9B0001, 0xC02F0000, 0x329B0001, 0xC12F0000, + 0x3C9B0001, 0xC22F0000, 0x5A9B0001, 0xC32F0000, + 0xE59C0001, 0xC42F0000, 0x759E0001, 0xC52F0000, + 0x7F9E0001, 0xC62F0000, 0xA59E0001, 0xC72F0000, + 0xBB9E0001, 0xC82F0000, 0xC39E0001, 0xC92F0000, + 0xCD9E0001, 0xCA2F0000, 0xD19E0001, 0xCB2F0000, + 0xF99E0001, 0xCC2F0000, 0xFD9E0001, 0xCD2F0000, + 0x0E9F0001, 0xCE2F0000, 0x139F0001, 0xCF2F0000, + 0x209F0001, 0xD02F0000, 0x3B9F0001, 0xD12F0000, + 0x4A9F0001, 0xD22F0000, 0x529F0001, 0xD32F0000, + 0x8D9F0001, 0xD42F0000, 0x9C9F0001, 0xD52F0000, + 0xA09F0001, 0x00300000, 0x20000001, 0x36300000, + 0x12300001, 0x38300000, 0x41530001, 0x39300000, + 0x44530001, 0x3A300000, 0x45530001, 0x9B300000, + 0xF5010002, 0x9C300000, 0xF7010002, 0x9F300000, + 0xF9010002, 0xFF300000, 0xFB010002, 0x31310000, + 0x00110001, 0x32310000, 0x01110001, 0x33310000, + 0xAA110001, 0x34310000, 0x02110001, 0x35310000, + 0xAC110001, 0x36310000, 0xAD110001, 0x37310000, + 0x03110001, 0x38310000, 0x04110001, 0x39310000, + 0x05110001, 0x3A310000, 0xB0110001, 0x3B310000, + 0xB1110001, 0x3C310000, 0xB2110001, 0x3D310000, + 0xB3110001, 0x3E310000, 0xB4110001, 0x3F310000, + 0xB5110001, 0x40310000, 0x1A110001, 0x41310000, + 0x06110001, 0x42310000, 0x07110001, 0x43310000, + 0x08110001, 0x44310000, 0x21110001, 0x45310000, + 0x09110001, 0x46310000, 0x0A110001, 0x47310000, + 0x0B110001, 0x48310000, 0x0C110001, 0x49310000, + 0x0D110001, 0x4A310000, 0x0E110001, 0x4B310000, + 0x0F110001, 0x4C310000, 0x10110001, 0x4D310000, + 0x11110001, 0x4E310000, 0x12110001, 0x4F310000, + 0x61110001, 0x50310000, 0x62110001, 0x51310000, + 0x63110001, 0x52310000, 0x64110001, 0x53310000, + 0x65110001, 0x54310000, 0x66110001, 0x55310000, + 0x67110001, 0x56310000, 0x68110001, 0x57310000, + 0x69110001, 0x58310000, 0x6A110001, 0x59310000, + 0x6B110001, 0x5A310000, 0x6C110001, 0x5B310000, + 0x6D110001, 0x5C310000, 0x6E110001, 0x5D310000, + 0x6F110001, 0x5E310000, 0x70110001, 0x5F310000, + 0x71110001, 0x60310000, 0x72110001, 0x61310000, + 0x73110001, 0x62310000, 0x74110001, 0x63310000, + 0x75110001, 0x64310000, 0x60110001, 0x65310000, + 0x14110001, 0x66310000, 0x15110001, 0x67310000, + 0xC7110001, 0x68310000, 0xC8110001, 0x69310000, + 0xCC110001, 0x6A310000, 0xCE110001, 0x6B310000, + 0xD3110001, 0x6C310000, 0xD7110001, 0x6D310000, + 0xD9110001, 0x6E310000, 0x1C110001, 0x6F310000, + 0xDD110001, 0x70310000, 0xDF110001, 0x71310000, + 0x1D110001, 0x72310000, 0x1E110001, 0x73310000, + 0x20110001, 0x74310000, 0x22110001, 0x75310000, + 0x23110001, 0x76310000, 0x27110001, 0x77310000, + 0x29110001, 0x78310000, 0x2B110001, 0x79310000, + 0x2C110001, 0x7A310000, 0x2D110001, 0x7B310000, + 0x2E110001, 0x7C310000, 0x2F110001, 0x7D310000, + 0x32110001, 0x7E310000, 0x36110001, 0x7F310000, + 0x40110001, 0x80310000, 0x47110001, 0x81310000, + 0x4C110001, 0x82310000, 0xF1110001, 0x83310000, + 0xF2110001, 0x84310000, 0x57110001, 0x85310000, + 0x58110001, 0x86310000, 0x59110001, 0x87310000, + 0x84110001, 0x88310000, 0x85110001, 0x89310000, + 0x88110001, 0x8A310000, 0x91110001, 0x8B310000, + 0x92110001, 0x8C310000, 0x94110001, 0x8D310000, + 0x9E110001, 0x8E310000, 0xA1110001, 0x92310000, + 0x004E0001, 0x93310000, 0x8C4E0001, 0x94310000, + 0x094E0001, 0x95310000, 0xDB560001, 0x96310000, + 0x0A4E0001, 0x97310000, 0x2D4E0001, 0x98310000, + 0x0B4E0001, 0x99310000, 0x32750001, 0x9A310000, + 0x594E0001, 0x9B310000, 0x194E0001, 0x9C310000, + 0x014E0001, 0x9D310000, 0x29590001, 0x9E310000, + 0x30570001, 0x9F310000, 0xBA4E0001, 0x00320000, + 0xFD010003, 0x01320000, 0x00020003, 0x02320000, + 0x03020003, 0x03320000, 0x06020003, 0x04320000, + 0x09020003, 0x05320000, 0x0C020003, 0x06320000, + 0x0F020003, 0x07320000, 0x12020003, 0x08320000, + 0x15020003, 0x09320000, 0x18020003, 0x0A320000, + 0x1B020003, 0x0B320000, 0x1E020003, 0x0C320000, + 0x21020003, 0x0D320000, 0x24020003, 0x0E320000, + 0x27020004, 0x0F320000, 0x2B020004, 0x10320000, + 0x2F020004, 0x11320000, 0x33020004, 0x12320000, + 0x37020004, 0x13320000, 0x3B020004, 0x14320000, + 0x3F020004, 0x15320000, 0x43020004, 0x16320000, + 0x47020004, 0x17320000, 0x4B020004, 0x18320000, + 0x4F020004, 0x19320000, 0x53020004, 0x1A320000, + 0x57020004, 0x1B320000, 0x5B020004, 0x1C320000, + 0x5F020004, 0x1D320000, 0x63020007, 0x1E320000, + 0x6A020006, 0x20320000, 0x70020003, 0x21320000, + 0x73020003, 0x22320000, 0x76020003, 0x23320000, + 0x79020003, 0x24320000, 0x7C020003, 0x25320000, + 0x7F020003, 0x26320000, 0x82020003, 0x27320000, + 0x85020003, 0x28320000, 0x88020003, 0x29320000, + 0x8B020003, 0x2A320000, 0x8E020003, 0x2B320000, + 0x91020003, 0x2C320000, 0x94020003, 0x2D320000, + 0x97020003, 0x2E320000, 0x9A020003, 0x2F320000, + 0x9D020003, 0x30320000, 0xA0020003, 0x31320000, + 0xA3020003, 0x32320000, 0xA6020003, 0x33320000, + 0xA9020003, 0x34320000, 0xAC020003, 0x35320000, + 0xAF020003, 0x36320000, 0xB2020003, 0x37320000, + 0xB5020003, 0x38320000, 0xB8020003, 0x39320000, + 0xBB020003, 0x3A320000, 0xBE020003, 0x3B320000, + 0xC1020003, 0x3C320000, 0xC4020003, 0x3D320000, + 0xC7020003, 0x3E320000, 0xCA020003, 0x3F320000, + 0xCD020003, 0x40320000, 0xD0020003, 0x41320000, + 0xD3020003, 0x42320000, 0xD6020003, 0x43320000, + 0xD9020003, 0x44320000, 0x4F550001, 0x45320000, + 0x7C5E0001, 0x46320000, 0x87650001, 0x47320000, + 0x8F7B0001, 0x50320000, 0xDC020003, 0x51320000, + 0xDF020002, 0x52320000, 0xE1020002, 0x53320000, + 0xE3020002, 0x54320000, 0xE5020002, 0x55320000, + 0xE7020002, 0x56320000, 0xE9020002, 0x57320000, + 0xEB020002, 0x58320000, 0xED020002, 0x59320000, + 0xEF020002, 0x5A320000, 0xF1020002, 0x5B320000, + 0xF3020002, 0x5C320000, 0xF5020002, 0x5D320000, + 0xF7020002, 0x5E320000, 0xF9020002, 0x5F320000, + 0xFB020002, 0x60320000, 0x00110001, 0x61320000, + 0x02110001, 0x62320000, 0x03110001, 0x63320000, + 0x05110001, 0x64320000, 0x06110001, 0x65320000, + 0x07110001, 0x66320000, 0x09110001, 0x67320000, + 0x0B110001, 0x68320000, 0x0C110001, 0x69320000, + 0x0E110001, 0x6A320000, 0x0F110001, 0x6B320000, + 0x10110001, 0x6C320000, 0x11110001, 0x6D320000, + 0x12110001, 0x6E320000, 0xFD020002, 0x6F320000, + 0xFF020002, 0x70320000, 0x01030002, 0x71320000, + 0x03030002, 0x72320000, 0x05030002, 0x73320000, + 0x07030002, 0x74320000, 0x09030002, 0x75320000, + 0x0B030002, 0x76320000, 0x0D030002, 0x77320000, + 0x0F030002, 0x78320000, 0x11030002, 0x79320000, + 0x13030002, 0x7A320000, 0x15030002, 0x7B320000, + 0x17030002, 0x7C320000, 0x19030005, 0x7D320000, + 0x1E030004, 0x7E320000, 0x22030002, 0x80320000, + 0x004E0001, 0x81320000, 0x8C4E0001, 0x82320000, + 0x094E0001, 0x83320000, 0xDB560001, 0x84320000, + 0x944E0001, 0x85320000, 0x6D510001, 0x86320000, + 0x034E0001, 0x87320000, 0x6B510001, 0x88320000, + 0x5D4E0001, 0x89320000, 0x41530001, 0x8A320000, + 0x08670001, 0x8B320000, 0x6B700001, 0x8C320000, + 0x346C0001, 0x8D320000, 0x28670001, 0x8E320000, + 0xD1910001, 0x8F320000, 0x1F570001, 0x90320000, + 0xE5650001, 0x91320000, 0x2A680001, 0x92320000, + 0x09670001, 0x93320000, 0x3E790001, 0x94320000, + 0x0D540001, 0x95320000, 0x79720001, 0x96320000, + 0xA18C0001, 0x97320000, 0x5D790001, 0x98320000, + 0xB4520001, 0x99320000, 0xD8790001, 0x9A320000, + 0x37750001, 0x9B320000, 0x73590001, 0x9C320000, + 0x69900001, 0x9D320000, 0x2A510001, 0x9E320000, + 0x70530001, 0x9F320000, 0xE86C0001, 0xA0320000, + 0x05980001, 0xA1320000, 0x114F0001, 0xA2320000, + 0x99510001, 0xA3320000, 0x636B0001, 0xA4320000, + 0x0A4E0001, 0xA5320000, 0x2D4E0001, 0xA6320000, + 0x0B4E0001, 0xA7320000, 0xE65D0001, 0xA8320000, + 0xF3530001, 0xA9320000, 0x3B530001, 0xAA320000, + 0x975B0001, 0xAB320000, 0x665B0001, 0xAC320000, + 0xE3760001, 0xAD320000, 0x014F0001, 0xAE320000, + 0xC78C0001, 0xAF320000, 0x54530001, 0xB0320000, + 0x1C590001, 0xB1320000, 0x24030002, 0xB2320000, + 0x26030002, 0xB3320000, 0x28030002, 0xB4320000, + 0x2A030002, 0xB5320000, 0x2C030002, 0xB6320000, + 0x2E030002, 0xB7320000, 0x30030002, 0xB8320000, + 0x32030002, 0xB9320000, 0x34030002, 0xBA320000, + 0x36030002, 0xBB320000, 0x38030002, 0xBC320000, + 0x3A030002, 0xBD320000, 0x3C030002, 0xBE320000, + 0x3E030002, 0xBF320000, 0x40030002, 0xC0320000, + 0x42030002, 0xC1320000, 0x44030002, 0xC2320000, + 0x46030002, 0xC3320000, 0x48030002, 0xC4320000, + 0x4A030002, 0xC5320000, 0x4C030002, 0xC6320000, + 0x4E030002, 0xC7320000, 0x50030002, 0xC8320000, + 0x52030002, 0xC9320000, 0x54030003, 0xCA320000, + 0x57030003, 0xCB320000, 0x5A030003, 0xCC320000, + 0x5D030002, 0xCD320000, 0x5F030003, 0xCE320000, + 0x62030002, 0xCF320000, 0x64030003, 0xD0320000, + 0xA2300001, 0xD1320000, 0xA4300001, 0xD2320000, + 0xA6300001, 0xD3320000, 0xA8300001, 0xD4320000, + 0xAA300001, 0xD5320000, 0xAB300001, 0xD6320000, + 0xAD300001, 0xD7320000, 0xAF300001, 0xD8320000, + 0xB1300001, 0xD9320000, 0xB3300001, 0xDA320000, + 0xB5300001, 0xDB320000, 0xB7300001, 0xDC320000, + 0xB9300001, 0xDD320000, 0xBB300001, 0xDE320000, + 0xBD300001, 0xDF320000, 0xBF300001, 0xE0320000, + 0xC1300001, 0xE1320000, 0xC4300001, 0xE2320000, + 0xC6300001, 0xE3320000, 0xC8300001, 0xE4320000, + 0xCA300001, 0xE5320000, 0xCB300001, 0xE6320000, + 0xCC300001, 0xE7320000, 0xCD300001, 0xE8320000, + 0xCE300001, 0xE9320000, 0xCF300001, 0xEA320000, + 0xD2300001, 0xEB320000, 0xD5300001, 0xEC320000, + 0xD8300001, 0xED320000, 0xDB300001, 0xEE320000, + 0xDE300001, 0xEF320000, 0xDF300001, 0xF0320000, + 0xE0300001, 0xF1320000, 0xE1300001, 0xF2320000, + 0xE2300001, 0xF3320000, 0xE4300001, 0xF4320000, + 0xE6300001, 0xF5320000, 0xE8300001, 0xF6320000, + 0xE9300001, 0xF7320000, 0xEA300001, 0xF8320000, + 0xEB300001, 0xF9320000, 0xEC300001, 0xFA320000, + 0xED300001, 0xFB320000, 0xEF300001, 0xFC320000, + 0xF0300001, 0xFD320000, 0xF1300001, 0xFE320000, + 0xF2300001, 0xFF320000, 0x67030002, 0x00330000, + 0x69030004, 0x01330000, 0x6D030004, 0x02330000, + 0x71030004, 0x03330000, 0x75030003, 0x04330000, + 0x78030004, 0x05330000, 0x7C030003, 0x06330000, + 0x7F030003, 0x07330000, 0x82030005, 0x08330000, + 0x87030004, 0x09330000, 0x8B030003, 0x0A330000, + 0x8E030003, 0x0B330000, 0x91030003, 0x0C330000, + 0x94030004, 0x0D330000, 0x98030004, 0x0E330000, + 0x9C030003, 0x0F330000, 0x9F030003, 0x10330000, + 0xA2030002, 0x11330000, 0xA4030003, 0x12330000, + 0xA7030004, 0x13330000, 0xAB030004, 0x14330000, + 0xAF030002, 0x15330000, 0xB1030005, 0x16330000, + 0xB6030006, 0x17330000, 0xBC030005, 0x18330000, + 0xC1030003, 0x19330000, 0xC4030005, 0x1A330000, + 0xC9030005, 0x1B330000, 0xCE030004, 0x1C330000, + 0xD2030003, 0x1D330000, 0xD5030003, 0x1E330000, + 0xD8030003, 0x1F330000, 0xDB030004, 0x20330000, + 0xDF030005, 0x21330000, 0xE4030004, 0x22330000, + 0xE8030003, 0x23330000, 0xEB030003, 0x24330000, + 0xEE030003, 0x25330000, 0xF1030002, 0x26330000, + 0xF3030002, 0x27330000, 0xF5030002, 0x28330000, + 0xF7030002, 0x29330000, 0xF9030003, 0x2A330000, + 0xFC030003, 0x2B330000, 0xFF030005, 0x2C330000, + 0x04040003, 0x2D330000, 0x07040004, 0x2E330000, + 0x0B040005, 0x2F330000, 0x10040003, 0x30330000, + 0x13040002, 0x31330000, 0x15040002, 0x32330000, + 0x17040005, 0x33330000, 0x1C040004, 0x34330000, + 0x20040005, 0x35330000, 0x25040003, 0x36330000, + 0x28040005, 0x37330000, 0x2D040002, 0x38330000, + 0x2F040003, 0x39330000, 0x32040003, 0x3A330000, + 0x35040003, 0x3B330000, 0x38040003, 0x3C330000, + 0x3B040003, 0x3D330000, 0x3E040004, 0x3E330000, + 0x42040003, 0x3F330000, 0x45040002, 0x40330000, + 0x47040003, 0x41330000, 0x4A040003, 0x42330000, + 0x4D040003, 0x43330000, 0x50040004, 0x44330000, + 0x54040003, 0x45330000, 0x57040003, 0x46330000, + 0x5A040003, 0x47330000, 0x5D040005, 0x48330000, + 0x62040004, 0x49330000, 0x66040002, 0x4A330000, + 0x68040005, 0x4B330000, 0x6D040002, 0x4C330000, + 0x6F040004, 0x4D330000, 0x73040004, 0x4E330000, + 0x77040003, 0x4F330000, 0x7A040003, 0x50330000, + 0x7D040003, 0x51330000, 0x80040004, 0x52330000, + 0x84040002, 0x53330000, 0x86040003, 0x54330000, + 0x89040004, 0x55330000, 0x8D040002, 0x56330000, + 0x8F040005, 0x57330000, 0x94040003, 0x58330000, + 0x97040002, 0x59330000, 0x99040002, 0x5A330000, + 0x9B040002, 0x5B330000, 0x9D040002, 0x5C330000, + 0x9F040002, 0x5D330000, 0xA1040002, 0x5E330000, + 0xA3040002, 0x5F330000, 0xA5040002, 0x60330000, + 0xA7040002, 0x61330000, 0xA9040002, 0x62330000, + 0xAB040003, 0x63330000, 0xAE040003, 0x64330000, + 0xB1040003, 0x65330000, 0xB4040003, 0x66330000, + 0xB7040003, 0x67330000, 0xBA040003, 0x68330000, + 0xBD040003, 0x69330000, 0xC0040003, 0x6A330000, + 0xC3040003, 0x6B330000, 0xC6040003, 0x6C330000, + 0xC9040003, 0x6D330000, 0xCC040003, 0x6E330000, + 0xCF040003, 0x6F330000, 0xD2040003, 0x70330000, + 0xD5040003, 0x71330000, 0xD8040003, 0x72330000, + 0xDB040002, 0x73330000, 0xDD040002, 0x74330000, + 0xDF040003, 0x75330000, 0xE2040002, 0x76330000, + 0xE4040002, 0x77330000, 0xE6040002, 0x78330000, + 0xE8040003, 0x79330000, 0xEB040003, 0x7A330000, + 0xEE040002, 0x7B330000, 0xF0040002, 0x7C330000, + 0xF2040002, 0x7D330000, 0xF4040002, 0x7E330000, + 0xF6040002, 0x7F330000, 0xF8040004, 0x80330000, + 0xFC040002, 0x81330000, 0xFE040002, 0x82330000, + 0x00050002, 0x83330000, 0x02050002, 0x84330000, + 0x04050002, 0x85330000, 0x06050002, 0x86330000, + 0x08050002, 0x87330000, 0x0A050002, 0x88330000, + 0x0C050003, 0x89330000, 0x0F050004, 0x8A330000, + 0x13050002, 0x8B330000, 0x15050002, 0x8C330000, + 0x17050002, 0x8D330000, 0x19050002, 0x8E330000, + 0x1B050002, 0x8F330000, 0x1D050002, 0x90330000, + 0x1F050002, 0x91330000, 0x21050003, 0x92330000, + 0x24050003, 0x93330000, 0x27050003, 0x94330000, + 0x2A050003, 0x95330000, 0x2D050002, 0x96330000, + 0x2F050002, 0x97330000, 0x31050002, 0x98330000, + 0x33050002, 0x99330000, 0x35050002, 0x9A330000, + 0x37050002, 0x9B330000, 0x39050002, 0x9C330000, + 0x3B050002, 0x9D330000, 0x3D050002, 0x9E330000, + 0x3F050002, 0x9F330000, 0x41050003, 0xA0330000, + 0x44050003, 0xA1330000, 0x47050002, 0xA2330000, + 0x49050003, 0xA3330000, 0x4C050003, 0xA4330000, + 0x4F050003, 0xA5330000, 0x52050002, 0xA6330000, + 0x54050003, 0xA7330000, 0x57050003, 0xA8330000, + 0x5A050004, 0xA9330000, 0x5E050002, 0xAA330000, + 0x60050003, 0xAB330000, 0x63050003, 0xAC330000, + 0x66050003, 0xAD330000, 0x69050003, 0xAE330000, + 0x6C050005, 0xAF330000, 0x71050006, 0xB0330000, + 0x77050002, 0xB1330000, 0x79050002, 0xB2330000, + 0x7B050002, 0xB3330000, 0x7D050002, 0xB4330000, + 0x7F050002, 0xB5330000, 0x81050002, 0xB6330000, + 0x83050002, 0xB7330000, 0x85050002, 0xB8330000, + 0x87050002, 0xB9330000, 0x89050002, 0xBA330000, + 0x8B050002, 0xBB330000, 0x8D050002, 0xBC330000, + 0x8F050002, 0xBD330000, 0x91050002, 0xBE330000, + 0x93050002, 0xBF330000, 0x95050002, 0xC0330000, + 0x97050002, 0xC1330000, 0x99050002, 0xC2330000, + 0x9B050004, 0xC3330000, 0x9F050002, 0xC4330000, + 0xA1050002, 0xC5330000, 0xA3050002, 0xC6330000, + 0xA5050004, 0xC7330000, 0xA9050003, 0xC8330000, + 0xAC050002, 0xC9330000, 0xAE050002, 0xCA330000, + 0xB0050002, 0xCB330000, 0xB2050002, 0xCC330000, + 0xB4050002, 0xCD330000, 0xB6050002, 0xCE330000, + 0xB8050002, 0xCF330000, 0xBA050002, 0xD0330000, + 0xBC050002, 0xD1330000, 0xBE050002, 0xD2330000, + 0xC0050003, 0xD3330000, 0xC3050002, 0xD4330000, + 0xC5050002, 0xD5330000, 0xC7050003, 0xD6330000, + 0xCA050003, 0xD7330000, 0xCD050002, 0xD8330000, + 0xCF050004, 0xD9330000, 0xD3050003, 0xDA330000, + 0xD6050002, 0xDB330000, 0xD8050002, 0xDC330000, + 0xDA050002, 0xDD330000, 0xDC050002, 0xDE330000, + 0xDE050003, 0xDF330000, 0xE1050003, 0xE0330000, + 0xE4050002, 0xE1330000, 0xE6050002, 0xE2330000, + 0xE8050002, 0xE3330000, 0xEA050002, 0xE4330000, + 0xEC050002, 0xE5330000, 0xEE050002, 0xE6330000, + 0xF0050002, 0xE7330000, 0xF2050002, 0xE8330000, + 0xF4050002, 0xE9330000, 0xF6050003, 0xEA330000, + 0xF9050003, 0xEB330000, 0xFC050003, 0xEC330000, + 0xFF050003, 0xED330000, 0x02060003, 0xEE330000, + 0x05060003, 0xEF330000, 0x08060003, 0xF0330000, + 0x0B060003, 0xF1330000, 0x0E060003, 0xF2330000, + 0x11060003, 0xF3330000, 0x14060003, 0xF4330000, + 0x17060003, 0xF5330000, 0x1A060003, 0xF6330000, + 0x1D060003, 0xF7330000, 0x20060003, 0xF8330000, + 0x23060003, 0xF9330000, 0x26060003, 0xFA330000, + 0x29060003, 0xFB330000, 0x2C060003, 0xFC330000, + 0x2F060003, 0xFD330000, 0x32060003, 0xFE330000, + 0x35060003, 0xFF330000, 0x38060003, 0x9CA60000, + 0x4A040001, 0x9DA60000, 0x4C040001, 0x70A70000, + 0x6FA70001, 0xF2A70000, 0x43000001, 0xF3A70000, + 0x46000001, 0xF4A70000, 0x51000001, 0xF8A70000, + 0x26010001, 0xF9A70000, 0x53010001, 0x5CAB0000, + 0x27A70001, 0x5DAB0000, 0x37AB0001, 0x5EAB0000, + 0x6B020001, 0x5FAB0000, 0x52AB0001, 0x69AB0000, + 0x8D020001, 0x00FB0000, 0x3B060002, 0x01FB0000, + 0x3D060002, 0x02FB0000, 0x3F060002, 0x03FB0000, + 0x41060003, 0x04FB0000, 0x44060003, 0x05FB0000, + 0x47060042, 0x06FB0000, 0x49060002, 0x13FB0000, + 0x4B060002, 0x14FB0000, 0x4D060002, 0x15FB0000, + 0x4F060002, 0x16FB0000, 0x51060002, 0x17FB0000, + 0x53060002, 0x20FB0000, 0xE2050001, 0x21FB0000, + 0xD0050001, 0x22FB0000, 0xD3050001, 0x23FB0000, + 0xD4050001, 0x24FB0000, 0xDB050001, 0x25FB0000, + 0xDC050001, 0x26FB0000, 0xDD050001, 0x27FB0000, + 0xE8050001, 0x28FB0000, 0xEA050001, 0x29FB0000, + 0x2B000001, 0x4FFB0000, 0x55060002, 0x50FB0000, + 0x71060001, 0x51FB0000, 0x71060001, 0x52FB0000, + 0x7B060001, 0x53FB0000, 0x7B060001, 0x54FB0000, + 0x7B060001, 0x55FB0000, 0x7B060001, 0x56FB0000, + 0x7E060001, 0x57FB0000, 0x7E060001, 0x58FB0000, + 0x7E060001, 0x59FB0000, 0x7E060001, 0x5AFB0000, + 0x80060001, 0x5BFB0000, 0x80060001, 0x5CFB0000, + 0x80060001, 0x5DFB0000, 0x80060001, 0x5EFB0000, + 0x7A060001, 0x5FFB0000, 0x7A060001, 0x60FB0000, + 0x7A060001, 0x61FB0000, 0x7A060001, 0x62FB0000, + 0x7F060001, 0x63FB0000, 0x7F060001, 0x64FB0000, + 0x7F060001, 0x65FB0000, 0x7F060001, 0x66FB0000, + 0x79060001, 0x67FB0000, 0x79060001, 0x68FB0000, + 0x79060001, 0x69FB0000, 0x79060001, 0x6AFB0000, + 0xA4060001, 0x6BFB0000, 0xA4060001, 0x6CFB0000, + 0xA4060001, 0x6DFB0000, 0xA4060001, 0x6EFB0000, + 0xA6060001, 0x6FFB0000, 0xA6060001, 0x70FB0000, + 0xA6060001, 0x71FB0000, 0xA6060001, 0x72FB0000, + 0x84060001, 0x73FB0000, 0x84060001, 0x74FB0000, + 0x84060001, 0x75FB0000, 0x84060001, 0x76FB0000, + 0x83060001, 0x77FB0000, 0x83060001, 0x78FB0000, + 0x83060001, 0x79FB0000, 0x83060001, 0x7AFB0000, + 0x86060001, 0x7BFB0000, 0x86060001, 0x7CFB0000, + 0x86060001, 0x7DFB0000, 0x86060001, 0x7EFB0000, + 0x87060001, 0x7FFB0000, 0x87060001, 0x80FB0000, + 0x87060001, 0x81FB0000, 0x87060001, 0x82FB0000, + 0x8D060001, 0x83FB0000, 0x8D060001, 0x84FB0000, + 0x8C060001, 0x85FB0000, 0x8C060001, 0x86FB0000, + 0x8E060001, 0x87FB0000, 0x8E060001, 0x88FB0000, + 0x88060001, 0x89FB0000, 0x88060001, 0x8AFB0000, + 0x98060001, 0x8BFB0000, 0x98060001, 0x8CFB0000, + 0x91060001, 0x8DFB0000, 0x91060001, 0x8EFB0000, + 0xA9060001, 0x8FFB0000, 0xA9060001, 0x90FB0000, + 0xA9060001, 0x91FB0000, 0xA9060001, 0x92FB0000, + 0xAF060001, 0x93FB0000, 0xAF060001, 0x94FB0000, + 0xAF060001, 0x95FB0000, 0xAF060001, 0x96FB0000, + 0xB3060001, 0x97FB0000, 0xB3060001, 0x98FB0000, + 0xB3060001, 0x99FB0000, 0xB3060001, 0x9AFB0000, + 0xB1060001, 0x9BFB0000, 0xB1060001, 0x9CFB0000, + 0xB1060001, 0x9DFB0000, 0xB1060001, 0x9EFB0000, + 0xBA060001, 0x9FFB0000, 0xBA060001, 0xA0FB0000, + 0xBB060001, 0xA1FB0000, 0xBB060001, 0xA2FB0000, + 0xBB060001, 0xA3FB0000, 0xBB060001, 0xA4FB0000, + 0xC0060001, 0xA5FB0000, 0xC0060001, 0xA6FB0000, + 0xC1060001, 0xA7FB0000, 0xC1060001, 0xA8FB0000, + 0xC1060001, 0xA9FB0000, 0xC1060001, 0xAAFB0000, + 0xBE060001, 0xABFB0000, 0xBE060001, 0xACFB0000, + 0xBE060001, 0xADFB0000, 0xBE060001, 0xAEFB0000, + 0xD2060001, 0xAFFB0000, 0xD2060001, 0xB0FB0000, + 0xD3060001, 0xB1FB0000, 0xD3060001, 0xD3FB0000, + 0xAD060001, 0xD4FB0000, 0xAD060001, 0xD5FB0000, + 0xAD060001, 0xD6FB0000, 0xAD060001, 0xD7FB0000, + 0xC7060001, 0xD8FB0000, 0xC7060001, 0xD9FB0000, + 0xC6060001, 0xDAFB0000, 0xC6060001, 0xDBFB0000, + 0xC8060001, 0xDCFB0000, 0xC8060001, 0xDDFB0000, + 0x77060041, 0xDEFB0000, 0xCB060001, 0xDFFB0000, + 0xCB060001, 0xE0FB0000, 0xC5060001, 0xE1FB0000, + 0xC5060001, 0xE2FB0000, 0xC9060001, 0xE3FB0000, + 0xC9060001, 0xE4FB0000, 0xD0060001, 0xE5FB0000, + 0xD0060001, 0xE6FB0000, 0xD0060001, 0xE7FB0000, + 0xD0060001, 0xE8FB0000, 0x49060001, 0xE9FB0000, + 0x49060001, 0xEAFB0000, 0x57060002, 0xEBFB0000, + 0x59060002, 0xECFB0000, 0x5B060002, 0xEDFB0000, + 0x5D060002, 0xEEFB0000, 0x5F060002, 0xEFFB0000, + 0x61060002, 0xF0FB0000, 0x63060002, 0xF1FB0000, + 0x65060002, 0xF2FB0000, 0x67060002, 0xF3FB0000, + 0x69060002, 0xF4FB0000, 0x6B060002, 0xF5FB0000, + 0x6D060002, 0xF6FB0000, 0x6F060002, 0xF7FB0000, + 0x71060002, 0xF8FB0000, 0x73060002, 0xF9FB0000, + 0x75060002, 0xFAFB0000, 0x77060002, 0xFBFB0000, + 0x79060002, 0xFCFB0000, 0xCC060001, 0xFDFB0000, + 0xCC060001, 0xFEFB0000, 0xCC060001, 0xFFFB0000, + 0xCC060001, 0x00FC0000, 0x7B060002, 0x01FC0000, + 0x7D060002, 0x02FC0000, 0x7F060002, 0x03FC0000, + 0x81060002, 0x04FC0000, 0x83060002, 0x05FC0000, + 0x85060002, 0x06FC0000, 0x87060002, 0x07FC0000, + 0x89060002, 0x08FC0000, 0x8B060002, 0x09FC0000, + 0x8D060002, 0x0AFC0000, 0x8F060002, 0x0BFC0000, + 0x91060002, 0x0CFC0000, 0x93060002, 0x0DFC0000, + 0x95060002, 0x0EFC0000, 0x97060002, 0x0FFC0000, + 0x99060002, 0x10FC0000, 0x9B060002, 0x11FC0000, + 0x9D060002, 0x12FC0000, 0x9F060002, 0x13FC0000, + 0xA1060002, 0x14FC0000, 0xA3060002, 0x15FC0000, + 0xA5060002, 0x16FC0000, 0xA7060002, 0x17FC0000, + 0xA9060002, 0x18FC0000, 0xAB060002, 0x19FC0000, + 0xAD060002, 0x1AFC0000, 0xAF060002, 0x1BFC0000, + 0xB1060002, 0x1CFC0000, 0xB3060002, 0x1DFC0000, + 0xB5060002, 0x1EFC0000, 0xB7060002, 0x1FFC0000, + 0xB9060002, 0x20FC0000, 0xBB060002, 0x21FC0000, + 0xBD060002, 0x22FC0000, 0xBF060002, 0x23FC0000, + 0xC1060002, 0x24FC0000, 0xC3060002, 0x25FC0000, + 0xC5060002, 0x26FC0000, 0xC7060002, 0x27FC0000, + 0xC9060002, 0x28FC0000, 0xCB060002, 0x29FC0000, + 0xCD060002, 0x2AFC0000, 0xCF060002, 0x2BFC0000, + 0xD1060002, 0x2CFC0000, 0xD3060002, 0x2DFC0000, + 0xD5060002, 0x2EFC0000, 0xD7060002, 0x2FFC0000, + 0xD9060002, 0x30FC0000, 0xDB060002, 0x31FC0000, + 0xDD060002, 0x32FC0000, 0xDF060002, 0x33FC0000, + 0xE1060002, 0x34FC0000, 0xE3060002, 0x35FC0000, + 0xE5060002, 0x36FC0000, 0xE7060002, 0x37FC0000, + 0xE9060002, 0x38FC0000, 0xEB060002, 0x39FC0000, + 0xED060002, 0x3AFC0000, 0xEF060002, 0x3BFC0000, + 0xF1060002, 0x3CFC0000, 0xF3060002, 0x3DFC0000, + 0xF5060002, 0x3EFC0000, 0xF7060002, 0x3FFC0000, + 0xF9060002, 0x40FC0000, 0xFB060002, 0x41FC0000, + 0xFD060002, 0x42FC0000, 0xFF060002, 0x43FC0000, + 0x01070002, 0x44FC0000, 0x03070002, 0x45FC0000, + 0x05070002, 0x46FC0000, 0x07070002, 0x47FC0000, + 0x09070002, 0x48FC0000, 0x0B070002, 0x49FC0000, + 0x0D070002, 0x4AFC0000, 0x0F070002, 0x4BFC0000, + 0x11070002, 0x4CFC0000, 0x13070002, 0x4DFC0000, + 0x15070002, 0x4EFC0000, 0x17070002, 0x4FFC0000, + 0x19070002, 0x50FC0000, 0x1B070002, 0x51FC0000, + 0x1D070002, 0x52FC0000, 0x1F070002, 0x53FC0000, + 0x21070002, 0x54FC0000, 0x23070002, 0x55FC0000, + 0x25070002, 0x56FC0000, 0x27070002, 0x57FC0000, + 0x29070002, 0x58FC0000, 0x2B070002, 0x59FC0000, + 0x2D070002, 0x5AFC0000, 0x2F070002, 0x5BFC0000, + 0x31070002, 0x5CFC0000, 0x33070002, 0x5DFC0000, + 0x35070002, 0x5EFC0000, 0x37070003, 0x5FFC0000, + 0x3A070003, 0x60FC0000, 0x3D070003, 0x61FC0000, + 0x40070003, 0x62FC0000, 0x43070003, 0x63FC0000, + 0x46070003, 0x64FC0000, 0x49070002, 0x65FC0000, + 0x4B070002, 0x66FC0000, 0x4D070002, 0x67FC0000, + 0x4F070002, 0x68FC0000, 0x51070002, 0x69FC0000, + 0x53070002, 0x6AFC0000, 0x55070002, 0x6BFC0000, + 0x57070002, 0x6CFC0000, 0x59070002, 0x6DFC0000, + 0x5B070002, 0x6EFC0000, 0x5D070002, 0x6FFC0000, + 0x5F070002, 0x70FC0000, 0x61070002, 0x71FC0000, + 0x63070002, 0x72FC0000, 0x65070002, 0x73FC0000, + 0x67070002, 0x74FC0000, 0x69070002, 0x75FC0000, + 0x6B070002, 0x76FC0000, 0x6D070002, 0x77FC0000, + 0x6F070002, 0x78FC0000, 0x71070002, 0x79FC0000, + 0x73070002, 0x7AFC0000, 0x75070002, 0x7BFC0000, + 0x77070002, 0x7CFC0000, 0x79070002, 0x7DFC0000, + 0x7B070002, 0x7EFC0000, 0x7D070002, 0x7FFC0000, + 0x7F070002, 0x80FC0000, 0x81070002, 0x81FC0000, + 0x83070002, 0x82FC0000, 0x85070002, 0x83FC0000, + 0x87070002, 0x84FC0000, 0x89070002, 0x85FC0000, + 0x8B070002, 0x86FC0000, 0x8D070002, 0x87FC0000, + 0x8F070002, 0x88FC0000, 0x91070002, 0x89FC0000, + 0x93070002, 0x8AFC0000, 0x95070002, 0x8BFC0000, + 0x97070002, 0x8CFC0000, 0x99070002, 0x8DFC0000, + 0x9B070002, 0x8EFC0000, 0x9D070002, 0x8FFC0000, + 0x9F070002, 0x90FC0000, 0xA1070002, 0x91FC0000, + 0xA3070002, 0x92FC0000, 0xA5070002, 0x93FC0000, + 0xA7070002, 0x94FC0000, 0xA9070002, 0x95FC0000, + 0xAB070002, 0x96FC0000, 0xAD070002, 0x97FC0000, + 0xAF070002, 0x98FC0000, 0xB1070002, 0x99FC0000, + 0xB3070002, 0x9AFC0000, 0xB5070002, 0x9BFC0000, + 0xB7070002, 0x9CFC0000, 0xB9070002, 0x9DFC0000, + 0xBB070002, 0x9EFC0000, 0xBD070002, 0x9FFC0000, + 0xBF070002, 0xA0FC0000, 0xC1070002, 0xA1FC0000, + 0xC3070002, 0xA2FC0000, 0xC5070002, 0xA3FC0000, + 0xC7070002, 0xA4FC0000, 0xC9070002, 0xA5FC0000, + 0xCB070002, 0xA6FC0000, 0xCD070002, 0xA7FC0000, + 0xCF070002, 0xA8FC0000, 0xD1070002, 0xA9FC0000, + 0xD3070002, 0xAAFC0000, 0xD5070002, 0xABFC0000, + 0xD7070002, 0xACFC0000, 0xD9070002, 0xADFC0000, + 0xDB070002, 0xAEFC0000, 0xDD070002, 0xAFFC0000, + 0xDF070002, 0xB0FC0000, 0xE1070002, 0xB1FC0000, + 0xE3070002, 0xB2FC0000, 0xE5070002, 0xB3FC0000, + 0xE7070002, 0xB4FC0000, 0xE9070002, 0xB5FC0000, + 0xEB070002, 0xB6FC0000, 0xED070002, 0xB7FC0000, + 0xEF070002, 0xB8FC0000, 0xF1070002, 0xB9FC0000, + 0xF3070002, 0xBAFC0000, 0xF5070002, 0xBBFC0000, + 0xF7070002, 0xBCFC0000, 0xF9070002, 0xBDFC0000, + 0xFB070002, 0xBEFC0000, 0xFD070002, 0xBFFC0000, + 0xFF070002, 0xC0FC0000, 0x01080002, 0xC1FC0000, + 0x03080002, 0xC2FC0000, 0x05080002, 0xC3FC0000, + 0x07080002, 0xC4FC0000, 0x09080002, 0xC5FC0000, + 0x0B080002, 0xC6FC0000, 0x0D080002, 0xC7FC0000, + 0x0F080002, 0xC8FC0000, 0x11080002, 0xC9FC0000, + 0x13080002, 0xCAFC0000, 0x15080002, 0xCBFC0000, + 0x17080002, 0xCCFC0000, 0x19080002, 0xCDFC0000, + 0x1B080002, 0xCEFC0000, 0x1D080002, 0xCFFC0000, + 0x1F080002, 0xD0FC0000, 0x21080002, 0xD1FC0000, + 0x23080002, 0xD2FC0000, 0x25080002, 0xD3FC0000, + 0x27080002, 0xD4FC0000, 0x29080002, 0xD5FC0000, + 0x2B080002, 0xD6FC0000, 0x2D080002, 0xD7FC0000, + 0x2F080002, 0xD8FC0000, 0x31080002, 0xD9FC0000, + 0x33080002, 0xDAFC0000, 0x35080002, 0xDBFC0000, + 0x37080002, 0xDCFC0000, 0x39080002, 0xDDFC0000, + 0x3B080002, 0xDEFC0000, 0x3D080002, 0xDFFC0000, + 0x3F080002, 0xE0FC0000, 0x41080002, 0xE1FC0000, + 0x43080002, 0xE2FC0000, 0x45080002, 0xE3FC0000, + 0x47080002, 0xE4FC0000, 0x49080002, 0xE5FC0000, + 0x4B080002, 0xE6FC0000, 0x4D080002, 0xE7FC0000, + 0x4F080002, 0xE8FC0000, 0x51080002, 0xE9FC0000, + 0x53080002, 0xEAFC0000, 0x55080002, 0xEBFC0000, + 0x57080002, 0xECFC0000, 0x59080002, 0xEDFC0000, + 0x5B080002, 0xEEFC0000, 0x5D080002, 0xEFFC0000, + 0x5F080002, 0xF0FC0000, 0x61080002, 0xF1FC0000, + 0x63080002, 0xF2FC0000, 0x65080003, 0xF3FC0000, + 0x68080003, 0xF4FC0000, 0x6B080003, 0xF5FC0000, + 0x6E080002, 0xF6FC0000, 0x70080002, 0xF7FC0000, + 0x72080002, 0xF8FC0000, 0x74080002, 0xF9FC0000, + 0x76080002, 0xFAFC0000, 0x78080002, 0xFBFC0000, + 0x7A080002, 0xFCFC0000, 0x7C080002, 0xFDFC0000, + 0x7E080002, 0xFEFC0000, 0x80080002, 0xFFFC0000, + 0x82080002, 0x00FD0000, 0x84080002, 0x01FD0000, + 0x86080002, 0x02FD0000, 0x88080002, 0x03FD0000, + 0x8A080002, 0x04FD0000, 0x8C080002, 0x05FD0000, + 0x8E080002, 0x06FD0000, 0x90080002, 0x07FD0000, + 0x92080002, 0x08FD0000, 0x94080002, 0x09FD0000, + 0x96080002, 0x0AFD0000, 0x98080002, 0x0BFD0000, + 0x9A080002, 0x0CFD0000, 0x9C080002, 0x0DFD0000, + 0x9E080002, 0x0EFD0000, 0xA0080002, 0x0FFD0000, + 0xA2080002, 0x10FD0000, 0xA4080002, 0x11FD0000, + 0xA6080002, 0x12FD0000, 0xA8080002, 0x13FD0000, + 0xAA080002, 0x14FD0000, 0xAC080002, 0x15FD0000, + 0xAE080002, 0x16FD0000, 0xB0080002, 0x17FD0000, + 0xB2080002, 0x18FD0000, 0xB4080002, 0x19FD0000, + 0xB6080002, 0x1AFD0000, 0xB8080002, 0x1BFD0000, + 0xBA080002, 0x1CFD0000, 0xBC080002, 0x1DFD0000, + 0xBE080002, 0x1EFD0000, 0xC0080002, 0x1FFD0000, + 0xC2080002, 0x20FD0000, 0xC4080002, 0x21FD0000, + 0xC6080002, 0x22FD0000, 0xC8080002, 0x23FD0000, + 0xCA080002, 0x24FD0000, 0xCC080002, 0x25FD0000, + 0xCE080002, 0x26FD0000, 0xD0080002, 0x27FD0000, + 0xD2080002, 0x28FD0000, 0xD4080002, 0x29FD0000, + 0xD6080002, 0x2AFD0000, 0xD8080002, 0x2BFD0000, + 0xDA080002, 0x2CFD0000, 0xDC080002, 0x2DFD0000, + 0xDE080002, 0x2EFD0000, 0xE0080002, 0x2FFD0000, + 0xE2080002, 0x30FD0000, 0xE4080002, 0x31FD0000, + 0xE6080002, 0x32FD0000, 0xE8080002, 0x33FD0000, + 0xEA080002, 0x34FD0000, 0xEC080002, 0x35FD0000, + 0xEE080002, 0x36FD0000, 0xF0080002, 0x37FD0000, + 0xF2080002, 0x38FD0000, 0xF4080002, 0x39FD0000, + 0xF6080002, 0x3AFD0000, 0xF8080002, 0x3BFD0000, + 0xFA080002, 0x3CFD0000, 0xFC080002, 0x3DFD0000, + 0xFE080002, 0x50FD0000, 0x00090003, 0x51FD0000, + 0x03090003, 0x52FD0000, 0x06090003, 0x53FD0000, + 0x09090003, 0x54FD0000, 0x0C090003, 0x55FD0000, + 0x0F090003, 0x56FD0000, 0x12090003, 0x57FD0000, + 0x15090003, 0x58FD0000, 0x18090003, 0x59FD0000, + 0x1B090003, 0x5AFD0000, 0x1E090003, 0x5BFD0000, + 0x21090003, 0x5CFD0000, 0x24090003, 0x5DFD0000, + 0x27090003, 0x5EFD0000, 0x2A090003, 0x5FFD0000, + 0x2D090003, 0x60FD0000, 0x30090003, 0x61FD0000, + 0x33090003, 0x62FD0000, 0x36090003, 0x63FD0000, + 0x39090003, 0x64FD0000, 0x3C090003, 0x65FD0000, + 0x3F090003, 0x66FD0000, 0x42090003, 0x67FD0000, + 0x45090003, 0x68FD0000, 0x48090003, 0x69FD0000, + 0x4B090003, 0x6AFD0000, 0x4E090003, 0x6BFD0000, + 0x51090003, 0x6CFD0000, 0x54090003, 0x6DFD0000, + 0x57090003, 0x6EFD0000, 0x5A090003, 0x6FFD0000, + 0x5D090003, 0x70FD0000, 0x60090003, 0x71FD0000, + 0x63090003, 0x72FD0000, 0x66090003, 0x73FD0000, + 0x69090003, 0x74FD0000, 0x6C090003, 0x75FD0000, + 0x6F090003, 0x76FD0000, 0x72090003, 0x77FD0000, + 0x75090003, 0x78FD0000, 0x78090003, 0x79FD0000, + 0x7B090003, 0x7AFD0000, 0x7E090003, 0x7BFD0000, + 0x81090003, 0x7CFD0000, 0x84090003, 0x7DFD0000, + 0x87090003, 0x7EFD0000, 0x8A090003, 0x7FFD0000, + 0x8D090003, 0x80FD0000, 0x90090003, 0x81FD0000, + 0x93090003, 0x82FD0000, 0x96090003, 0x83FD0000, + 0x99090003, 0x84FD0000, 0x9C090003, 0x85FD0000, + 0x9F090003, 0x86FD0000, 0xA2090003, 0x87FD0000, + 0xA5090003, 0x88FD0000, 0xA8090003, 0x89FD0000, + 0xAB090003, 0x8AFD0000, 0xAE090003, 0x8BFD0000, + 0xB1090003, 0x8CFD0000, 0xB4090003, 0x8DFD0000, + 0xB7090003, 0x8EFD0000, 0xBA090003, 0x8FFD0000, + 0xBD090003, 0x92FD0000, 0xC0090003, 0x93FD0000, + 0xC3090003, 0x94FD0000, 0xC6090003, 0x95FD0000, + 0xC9090003, 0x96FD0000, 0xCC090003, 0x97FD0000, + 0xCF090003, 0x98FD0000, 0xD2090003, 0x99FD0000, + 0xD5090003, 0x9AFD0000, 0xD8090003, 0x9BFD0000, + 0xDB090003, 0x9CFD0000, 0xDE090003, 0x9DFD0000, + 0xE1090003, 0x9EFD0000, 0xE4090003, 0x9FFD0000, + 0xE7090003, 0xA0FD0000, 0xEA090003, 0xA1FD0000, + 0xED090003, 0xA2FD0000, 0xF0090003, 0xA3FD0000, + 0xF3090003, 0xA4FD0000, 0xF6090003, 0xA5FD0000, + 0xF9090003, 0xA6FD0000, 0xFC090003, 0xA7FD0000, + 0xFF090003, 0xA8FD0000, 0x020A0003, 0xA9FD0000, + 0x050A0003, 0xAAFD0000, 0x080A0003, 0xABFD0000, + 0x0B0A0003, 0xACFD0000, 0x0E0A0003, 0xADFD0000, + 0x110A0003, 0xAEFD0000, 0x140A0003, 0xAFFD0000, + 0x170A0003, 0xB0FD0000, 0x1A0A0003, 0xB1FD0000, + 0x1D0A0003, 0xB2FD0000, 0x200A0003, 0xB3FD0000, + 0x230A0003, 0xB4FD0000, 0x260A0003, 0xB5FD0000, + 0x290A0003, 0xB6FD0000, 0x2C0A0003, 0xB7FD0000, + 0x2F0A0003, 0xB8FD0000, 0x320A0003, 0xB9FD0000, + 0x350A0003, 0xBAFD0000, 0x380A0003, 0xBBFD0000, + 0x3B0A0003, 0xBCFD0000, 0x3E0A0003, 0xBDFD0000, + 0x410A0003, 0xBEFD0000, 0x440A0003, 0xBFFD0000, + 0x470A0003, 0xC0FD0000, 0x4A0A0003, 0xC1FD0000, + 0x4D0A0003, 0xC2FD0000, 0x500A0003, 0xC3FD0000, + 0x530A0003, 0xC4FD0000, 0x560A0003, 0xC5FD0000, + 0x590A0003, 0xC6FD0000, 0x5C0A0003, 0xC7FD0000, + 0x5F0A0003, 0xF0FD0000, 0x620A0003, 0xF1FD0000, + 0x650A0003, 0xF2FD0000, 0x680A0004, 0xF3FD0000, + 0x6C0A0004, 0xF4FD0000, 0x700A0004, 0xF5FD0000, + 0x740A0004, 0xF6FD0000, 0x780A0004, 0xF7FD0000, + 0x7C0A0004, 0xF8FD0000, 0x800A0004, 0xF9FD0000, + 0x840A0003, 0xFAFD0000, 0x870A0012, 0xFBFD0000, + 0x990A0008, 0xFCFD0000, 0xA10A0004, 0x10FE0000, + 0x2C000001, 0x11FE0000, 0x01300001, 0x12FE0000, + 0x02300001, 0x13FE0000, 0x3A000001, 0x14FE0000, + 0x3B000001, 0x15FE0000, 0x21000001, 0x16FE0000, + 0x3F000001, 0x17FE0000, 0x16300001, 0x18FE0000, + 0x17300001, 0x19FE0000, 0x26200041, 0x30FE0000, + 0x25200041, 0x31FE0000, 0x14200001, 0x32FE0000, + 0x13200001, 0x33FE0000, 0x5F000001, 0x34FE0000, + 0x5F000001, 0x35FE0000, 0x28000001, 0x36FE0000, + 0x29000001, 0x37FE0000, 0x7B000001, 0x38FE0000, + 0x7D000001, 0x39FE0000, 0x14300001, 0x3AFE0000, + 0x15300001, 0x3BFE0000, 0x10300001, 0x3CFE0000, + 0x11300001, 0x3DFE0000, 0x0A300001, 0x3EFE0000, + 0x0B300001, 0x3FFE0000, 0x08300001, 0x40FE0000, + 0x09300001, 0x41FE0000, 0x0C300001, 0x42FE0000, + 0x0D300001, 0x43FE0000, 0x0E300001, 0x44FE0000, + 0x0F300001, 0x47FE0000, 0x5B000001, 0x48FE0000, + 0x5D000001, 0x49FE0000, 0x3E200041, 0x4AFE0000, + 0x3E200041, 0x4BFE0000, 0x3E200041, 0x4CFE0000, + 0x3E200041, 0x4DFE0000, 0x5F000001, 0x4EFE0000, + 0x5F000001, 0x4FFE0000, 0x5F000001, 0x50FE0000, + 0x2C000001, 0x51FE0000, 0x01300001, 0x52FE0000, + 0x2E000001, 0x54FE0000, 0x3B000001, 0x55FE0000, + 0x3A000001, 0x56FE0000, 0x3F000001, 0x57FE0000, + 0x21000001, 0x58FE0000, 0x14200001, 0x59FE0000, + 0x28000001, 0x5AFE0000, 0x29000001, 0x5BFE0000, + 0x7B000001, 0x5CFE0000, 0x7D000001, 0x5DFE0000, + 0x14300001, 0x5EFE0000, 0x15300001, 0x5FFE0000, + 0x23000001, 0x60FE0000, 0x26000001, 0x61FE0000, + 0x2A000001, 0x62FE0000, 0x2B000001, 0x63FE0000, + 0x2D000001, 0x64FE0000, 0x3C000001, 0x65FE0000, + 0x3E000001, 0x66FE0000, 0x3D000001, 0x68FE0000, + 0x5C000001, 0x69FE0000, 0x24000001, 0x6AFE0000, + 0x25000001, 0x6BFE0000, 0x40000001, 0x70FE0000, + 0xA50A0002, 0x71FE0000, 0xA70A0002, 0x72FE0000, + 0xA90A0002, 0x74FE0000, 0xAB0A0002, 0x76FE0000, + 0xAD0A0002, 0x77FE0000, 0xAF0A0002, 0x78FE0000, + 0xB10A0002, 0x79FE0000, 0xB30A0002, 0x7AFE0000, + 0xB50A0002, 0x7BFE0000, 0xB70A0002, 0x7CFE0000, + 0xB90A0002, 0x7DFE0000, 0xBB0A0002, 0x7EFE0000, + 0xBD0A0002, 0x7FFE0000, 0xBF0A0002, 0x80FE0000, + 0x21060001, 0x81FE0000, 0x22060001, 0x82FE0000, + 0x22060001, 0x83FE0000, 0x23060001, 0x84FE0000, + 0x23060001, 0x85FE0000, 0x24060001, 0x86FE0000, + 0x24060001, 0x87FE0000, 0x25060001, 0x88FE0000, + 0x25060001, 0x89FE0000, 0x26060001, 0x8AFE0000, + 0x26060001, 0x8BFE0000, 0x26060001, 0x8CFE0000, + 0x26060001, 0x8DFE0000, 0x27060001, 0x8EFE0000, + 0x27060001, 0x8FFE0000, 0x28060001, 0x90FE0000, + 0x28060001, 0x91FE0000, 0x28060001, 0x92FE0000, + 0x28060001, 0x93FE0000, 0x29060001, 0x94FE0000, + 0x29060001, 0x95FE0000, 0x2A060001, 0x96FE0000, + 0x2A060001, 0x97FE0000, 0x2A060001, 0x98FE0000, + 0x2A060001, 0x99FE0000, 0x2B060001, 0x9AFE0000, + 0x2B060001, 0x9BFE0000, 0x2B060001, 0x9CFE0000, + 0x2B060001, 0x9DFE0000, 0x2C060001, 0x9EFE0000, + 0x2C060001, 0x9FFE0000, 0x2C060001, 0xA0FE0000, + 0x2C060001, 0xA1FE0000, 0x2D060001, 0xA2FE0000, + 0x2D060001, 0xA3FE0000, 0x2D060001, 0xA4FE0000, + 0x2D060001, 0xA5FE0000, 0x2E060001, 0xA6FE0000, + 0x2E060001, 0xA7FE0000, 0x2E060001, 0xA8FE0000, + 0x2E060001, 0xA9FE0000, 0x2F060001, 0xAAFE0000, + 0x2F060001, 0xABFE0000, 0x30060001, 0xACFE0000, + 0x30060001, 0xADFE0000, 0x31060001, 0xAEFE0000, + 0x31060001, 0xAFFE0000, 0x32060001, 0xB0FE0000, + 0x32060001, 0xB1FE0000, 0x33060001, 0xB2FE0000, + 0x33060001, 0xB3FE0000, 0x33060001, 0xB4FE0000, + 0x33060001, 0xB5FE0000, 0x34060001, 0xB6FE0000, + 0x34060001, 0xB7FE0000, 0x34060001, 0xB8FE0000, + 0x34060001, 0xB9FE0000, 0x35060001, 0xBAFE0000, + 0x35060001, 0xBBFE0000, 0x35060001, 0xBCFE0000, + 0x35060001, 0xBDFE0000, 0x36060001, 0xBEFE0000, + 0x36060001, 0xBFFE0000, 0x36060001, 0xC0FE0000, + 0x36060001, 0xC1FE0000, 0x37060001, 0xC2FE0000, + 0x37060001, 0xC3FE0000, 0x37060001, 0xC4FE0000, + 0x37060001, 0xC5FE0000, 0x38060001, 0xC6FE0000, + 0x38060001, 0xC7FE0000, 0x38060001, 0xC8FE0000, + 0x38060001, 0xC9FE0000, 0x39060001, 0xCAFE0000, + 0x39060001, 0xCBFE0000, 0x39060001, 0xCCFE0000, + 0x39060001, 0xCDFE0000, 0x3A060001, 0xCEFE0000, + 0x3A060001, 0xCFFE0000, 0x3A060001, 0xD0FE0000, + 0x3A060001, 0xD1FE0000, 0x41060001, 0xD2FE0000, + 0x41060001, 0xD3FE0000, 0x41060001, 0xD4FE0000, + 0x41060001, 0xD5FE0000, 0x42060001, 0xD6FE0000, + 0x42060001, 0xD7FE0000, 0x42060001, 0xD8FE0000, + 0x42060001, 0xD9FE0000, 0x43060001, 0xDAFE0000, + 0x43060001, 0xDBFE0000, 0x43060001, 0xDCFE0000, + 0x43060001, 0xDDFE0000, 0x44060001, 0xDEFE0000, + 0x44060001, 0xDFFE0000, 0x44060001, 0xE0FE0000, + 0x44060001, 0xE1FE0000, 0x45060001, 0xE2FE0000, + 0x45060001, 0xE3FE0000, 0x45060001, 0xE4FE0000, + 0x45060001, 0xE5FE0000, 0x46060001, 0xE6FE0000, + 0x46060001, 0xE7FE0000, 0x46060001, 0xE8FE0000, + 0x46060001, 0xE9FE0000, 0x47060001, 0xEAFE0000, + 0x47060001, 0xEBFE0000, 0x47060001, 0xECFE0000, + 0x47060001, 0xEDFE0000, 0x48060001, 0xEEFE0000, + 0x48060001, 0xEFFE0000, 0x49060001, 0xF0FE0000, + 0x49060001, 0xF1FE0000, 0x4A060001, 0xF2FE0000, + 0x4A060001, 0xF3FE0000, 0x4A060001, 0xF4FE0000, + 0x4A060001, 0xF5FE0000, 0xC10A0002, 0xF6FE0000, + 0xC30A0002, 0xF7FE0000, 0xC50A0002, 0xF8FE0000, + 0xC70A0002, 0xF9FE0000, 0xC90A0002, 0xFAFE0000, + 0xCB0A0002, 0xFBFE0000, 0xCD0A0002, 0xFCFE0000, + 0xCF0A0002, 0x01FF0000, 0x21000001, 0x02FF0000, + 0x22000001, 0x03FF0000, 0x23000001, 0x04FF0000, + 0x24000001, 0x05FF0000, 0x25000001, 0x06FF0000, + 0x26000001, 0x07FF0000, 0x27000001, 0x08FF0000, + 0x28000001, 0x09FF0000, 0x29000001, 0x0AFF0000, + 0x2A000001, 0x0BFF0000, 0x2B000001, 0x0CFF0000, + 0x2C000001, 0x0DFF0000, 0x2D000001, 0x0EFF0000, + 0x2E000001, 0x0FFF0000, 0x2F000001, 0x10FF0000, + 0x30000001, 0x11FF0000, 0x31000001, 0x12FF0000, + 0x32000001, 0x13FF0000, 0x33000001, 0x14FF0000, + 0x34000001, 0x15FF0000, 0x35000001, 0x16FF0000, + 0x36000001, 0x17FF0000, 0x37000001, 0x18FF0000, + 0x38000001, 0x19FF0000, 0x39000001, 0x1AFF0000, + 0x3A000001, 0x1BFF0000, 0x3B000001, 0x1CFF0000, + 0x3C000001, 0x1DFF0000, 0x3D000001, 0x1EFF0000, + 0x3E000001, 0x1FFF0000, 0x3F000001, 0x20FF0000, + 0x40000001, 0x21FF0000, 0x41000001, 0x22FF0000, + 0x42000001, 0x23FF0000, 0x43000001, 0x24FF0000, + 0x44000001, 0x25FF0000, 0x45000001, 0x26FF0000, + 0x46000001, 0x27FF0000, 0x47000001, 0x28FF0000, + 0x48000001, 0x29FF0000, 0x49000001, 0x2AFF0000, + 0x4A000001, 0x2BFF0000, 0x4B000001, 0x2CFF0000, + 0x4C000001, 0x2DFF0000, 0x4D000001, 0x2EFF0000, + 0x4E000001, 0x2FFF0000, 0x4F000001, 0x30FF0000, + 0x50000001, 0x31FF0000, 0x51000001, 0x32FF0000, + 0x52000001, 0x33FF0000, 0x53000001, 0x34FF0000, + 0x54000001, 0x35FF0000, 0x55000001, 0x36FF0000, + 0x56000001, 0x37FF0000, 0x57000001, 0x38FF0000, + 0x58000001, 0x39FF0000, 0x59000001, 0x3AFF0000, + 0x5A000001, 0x3BFF0000, 0x5B000001, 0x3CFF0000, + 0x5C000001, 0x3DFF0000, 0x5D000001, 0x3EFF0000, + 0x5E000001, 0x3FFF0000, 0x5F000001, 0x40FF0000, + 0x60000001, 0x41FF0000, 0x61000001, 0x42FF0000, + 0x62000001, 0x43FF0000, 0x63000001, 0x44FF0000, + 0x64000001, 0x45FF0000, 0x65000001, 0x46FF0000, + 0x66000001, 0x47FF0000, 0x67000001, 0x48FF0000, + 0x68000001, 0x49FF0000, 0x69000001, 0x4AFF0000, + 0x6A000001, 0x4BFF0000, 0x6B000001, 0x4CFF0000, + 0x6C000001, 0x4DFF0000, 0x6D000001, 0x4EFF0000, + 0x6E000001, 0x4FFF0000, 0x6F000001, 0x50FF0000, + 0x70000001, 0x51FF0000, 0x71000001, 0x52FF0000, + 0x72000001, 0x53FF0000, 0x73000001, 0x54FF0000, + 0x74000001, 0x55FF0000, 0x75000001, 0x56FF0000, + 0x76000001, 0x57FF0000, 0x77000001, 0x58FF0000, + 0x78000001, 0x59FF0000, 0x79000001, 0x5AFF0000, + 0x7A000001, 0x5BFF0000, 0x7B000001, 0x5CFF0000, + 0x7C000001, 0x5DFF0000, 0x7D000001, 0x5EFF0000, + 0x7E000001, 0x5FFF0000, 0x85290001, 0x60FF0000, + 0x86290001, 0x61FF0000, 0x02300001, 0x62FF0000, + 0x0C300001, 0x63FF0000, 0x0D300001, 0x64FF0000, + 0x01300001, 0x65FF0000, 0xFB300001, 0x66FF0000, + 0xF2300001, 0x67FF0000, 0xA1300001, 0x68FF0000, + 0xA3300001, 0x69FF0000, 0xA5300001, 0x6AFF0000, + 0xA7300001, 0x6BFF0000, 0xA9300001, 0x6CFF0000, + 0xE3300001, 0x6DFF0000, 0xE5300001, 0x6EFF0000, + 0xE7300001, 0x6FFF0000, 0xC3300001, 0x70FF0000, + 0xFC300001, 0x71FF0000, 0xA2300001, 0x72FF0000, + 0xA4300001, 0x73FF0000, 0xA6300001, 0x74FF0000, + 0xA8300001, 0x75FF0000, 0xAA300001, 0x76FF0000, + 0xAB300001, 0x77FF0000, 0xAD300001, 0x78FF0000, + 0xAF300001, 0x79FF0000, 0xB1300001, 0x7AFF0000, + 0xB3300001, 0x7BFF0000, 0xB5300001, 0x7CFF0000, + 0xB7300001, 0x7DFF0000, 0xB9300001, 0x7EFF0000, + 0xBB300001, 0x7FFF0000, 0xBD300001, 0x80FF0000, + 0xBF300001, 0x81FF0000, 0xC1300001, 0x82FF0000, + 0xC4300001, 0x83FF0000, 0xC6300001, 0x84FF0000, + 0xC8300001, 0x85FF0000, 0xCA300001, 0x86FF0000, + 0xCB300001, 0x87FF0000, 0xCC300001, 0x88FF0000, + 0xCD300001, 0x89FF0000, 0xCE300001, 0x8AFF0000, + 0xCF300001, 0x8BFF0000, 0xD2300001, 0x8CFF0000, + 0xD5300001, 0x8DFF0000, 0xD8300001, 0x8EFF0000, + 0xDB300001, 0x8FFF0000, 0xDE300001, 0x90FF0000, + 0xDF300001, 0x91FF0000, 0xE0300001, 0x92FF0000, + 0xE1300001, 0x93FF0000, 0xE2300001, 0x94FF0000, + 0xE4300001, 0x95FF0000, 0xE6300001, 0x96FF0000, + 0xE8300001, 0x97FF0000, 0xE9300001, 0x98FF0000, + 0xEA300001, 0x99FF0000, 0xEB300001, 0x9AFF0000, + 0xEC300001, 0x9BFF0000, 0xED300001, 0x9CFF0000, + 0xEF300001, 0x9DFF0000, 0xF3300001, 0x9EFF0000, + 0x99300001, 0x9FFF0000, 0x9A300001, 0xA0FF0000, + 0x64310041, 0xA1FF0000, 0x31310041, 0xA2FF0000, + 0x32310041, 0xA3FF0000, 0x33310041, 0xA4FF0000, + 0x34310041, 0xA5FF0000, 0x35310041, 0xA6FF0000, + 0x36310041, 0xA7FF0000, 0x37310041, 0xA8FF0000, + 0x38310041, 0xA9FF0000, 0x39310041, 0xAAFF0000, + 0x3A310041, 0xABFF0000, 0x3B310041, 0xACFF0000, + 0x3C310041, 0xADFF0000, 0x3D310041, 0xAEFF0000, + 0x3E310041, 0xAFFF0000, 0x3F310041, 0xB0FF0000, + 0x40310041, 0xB1FF0000, 0x41310041, 0xB2FF0000, + 0x42310041, 0xB3FF0000, 0x43310041, 0xB4FF0000, + 0x44310041, 0xB5FF0000, 0x45310041, 0xB6FF0000, + 0x46310041, 0xB7FF0000, 0x47310041, 0xB8FF0000, + 0x48310041, 0xB9FF0000, 0x49310041, 0xBAFF0000, + 0x4A310041, 0xBBFF0000, 0x4B310041, 0xBCFF0000, + 0x4C310041, 0xBDFF0000, 0x4D310041, 0xBEFF0000, + 0x4E310041, 0xC2FF0000, 0x4F310041, 0xC3FF0000, + 0x50310041, 0xC4FF0000, 0x51310041, 0xC5FF0000, + 0x52310041, 0xC6FF0000, 0x53310041, 0xC7FF0000, + 0x54310041, 0xCAFF0000, 0x55310041, 0xCBFF0000, + 0x56310041, 0xCCFF0000, 0x57310041, 0xCDFF0000, + 0x58310041, 0xCEFF0000, 0x59310041, 0xCFFF0000, + 0x5A310041, 0xD2FF0000, 0x5B310041, 0xD3FF0000, + 0x5C310041, 0xD4FF0000, 0x5D310041, 0xD5FF0000, + 0x5E310041, 0xD6FF0000, 0x5F310041, 0xD7FF0000, + 0x60310041, 0xDAFF0000, 0x61310041, 0xDBFF0000, + 0x62310041, 0xDCFF0000, 0x63310041, 0xE0FF0000, + 0xA2000001, 0xE1FF0000, 0xA3000001, 0xE2FF0000, + 0xAC000001, 0xE3FF0000, 0xAF000041, 0xE4FF0000, + 0xA6000001, 0xE5FF0000, 0xA5000001, 0xE6FF0000, + 0xA9200001, 0xE8FF0000, 0x02250001, 0xE9FF0000, + 0x90210001, 0xEAFF0000, 0x91210001, 0xEBFF0000, + 0x92210001, 0xECFF0000, 0x93210001, 0xEDFF0000, + 0xA0250001, 0xEEFF0000, 0xCB250001, 0x81070100, + 0xD0020001, 0x82070100, 0xD1020001, 0x83070100, + 0xE6000001, 0x84070100, 0x99020001, 0x85070100, + 0x53020001, 0x87070100, 0xA3020001, 0x88070100, + 0x66AB0001, 0x89070100, 0xA5020001, 0x8A070100, + 0xA4020001, 0x8B070100, 0x56020001, 0x8C070100, + 0x57020001, 0x8D070100, 0x911D0001, 0x8E070100, + 0x58020001, 0x8F070100, 0x5E020001, 0x90070100, + 0xA9020001, 0x91070100, 0x64020001, 0x92070100, + 0x62020001, 0x93070100, 0x60020001, 0x94070100, + 0x9B020001, 0x95070100, 0x27010001, 0x96070100, + 0x9C020001, 0x97070100, 0x67020001, 0x98070100, + 0x84020001, 0x99070100, 0xAA020001, 0x9A070100, + 0xAB020001, 0x9B070100, 0x6C020001, 0x9C070100, + 0x04DF0181, 0x9D070100, 0x8EA70001, 0x9E070100, + 0x6E020001, 0x9F070100, 0x05DF0181, 0xA0070100, + 0x8E020001, 0xA1070100, 0x06DF0181, 0xA2070100, + 0xF8000001, 0xA3070100, 0x76020001, 0xA4070100, + 0x77020001, 0xA5070100, 0x71000001, 0xA6070100, + 0x7A020001, 0xA7070100, 0x08DF0181, 0xA8070100, + 0x7D020001, 0xA9070100, 0x7E020001, 0xAA070100, + 0x80020001, 0xAB070100, 0xA8020001, 0xAC070100, + 0xA6020001, 0xAD070100, 0x67AB0001, 0xAE070100, + 0xA7020001, 0xAF070100, 0x88020001, 0xB0070100, + 0x712C0001, 0xB2070100, 0x8F020001, 0xB3070100, + 0xA1020001, 0xB4070100, 0xA2020001, 0xB5070100, + 0x98020001, 0xB6070100, 0xC0010001, 0xB7070100, + 0xC1010001, 0xB8070100, 0xC2010001, 0xB9070100, + 0x0ADF0181, 0xBA070100, 0x1EDF0181, 0x00D40100, + 0x41000001, 0x01D40100, 0x42000001, 0x02D40100, + 0x43000001, 0x03D40100, 0x44000001, 0x04D40100, + 0x45000001, 0x05D40100, 0x46000001, 0x06D40100, + 0x47000001, 0x07D40100, 0x48000001, 0x08D40100, + 0x49000001, 0x09D40100, 0x4A000001, 0x0AD40100, + 0x4B000001, 0x0BD40100, 0x4C000001, 0x0CD40100, + 0x4D000001, 0x0DD40100, 0x4E000001, 0x0ED40100, + 0x4F000001, 0x0FD40100, 0x50000001, 0x10D40100, + 0x51000001, 0x11D40100, 0x52000001, 0x12D40100, + 0x53000001, 0x13D40100, 0x54000001, 0x14D40100, + 0x55000001, 0x15D40100, 0x56000001, 0x16D40100, + 0x57000001, 0x17D40100, 0x58000001, 0x18D40100, + 0x59000001, 0x19D40100, 0x5A000001, 0x1AD40100, + 0x61000001, 0x1BD40100, 0x62000001, 0x1CD40100, + 0x63000001, 0x1DD40100, 0x64000001, 0x1ED40100, + 0x65000001, 0x1FD40100, 0x66000001, 0x20D40100, + 0x67000001, 0x21D40100, 0x68000001, 0x22D40100, + 0x69000001, 0x23D40100, 0x6A000001, 0x24D40100, + 0x6B000001, 0x25D40100, 0x6C000001, 0x26D40100, + 0x6D000001, 0x27D40100, 0x6E000001, 0x28D40100, + 0x6F000001, 0x29D40100, 0x70000001, 0x2AD40100, + 0x71000001, 0x2BD40100, 0x72000001, 0x2CD40100, + 0x73000001, 0x2DD40100, 0x74000001, 0x2ED40100, + 0x75000001, 0x2FD40100, 0x76000001, 0x30D40100, + 0x77000001, 0x31D40100, 0x78000001, 0x32D40100, + 0x79000001, 0x33D40100, 0x7A000001, 0x34D40100, + 0x41000001, 0x35D40100, 0x42000001, 0x36D40100, + 0x43000001, 0x37D40100, 0x44000001, 0x38D40100, + 0x45000001, 0x39D40100, 0x46000001, 0x3AD40100, + 0x47000001, 0x3BD40100, 0x48000001, 0x3CD40100, + 0x49000001, 0x3DD40100, 0x4A000001, 0x3ED40100, + 0x4B000001, 0x3FD40100, 0x4C000001, 0x40D40100, + 0x4D000001, 0x41D40100, 0x4E000001, 0x42D40100, + 0x4F000001, 0x43D40100, 0x50000001, 0x44D40100, + 0x51000001, 0x45D40100, 0x52000001, 0x46D40100, + 0x53000001, 0x47D40100, 0x54000001, 0x48D40100, + 0x55000001, 0x49D40100, 0x56000001, 0x4AD40100, + 0x57000001, 0x4BD40100, 0x58000001, 0x4CD40100, + 0x59000001, 0x4DD40100, 0x5A000001, 0x4ED40100, + 0x61000001, 0x4FD40100, 0x62000001, 0x50D40100, + 0x63000001, 0x51D40100, 0x64000001, 0x52D40100, + 0x65000001, 0x53D40100, 0x66000001, 0x54D40100, + 0x67000001, 0x56D40100, 0x69000001, 0x57D40100, + 0x6A000001, 0x58D40100, 0x6B000001, 0x59D40100, + 0x6C000001, 0x5AD40100, 0x6D000001, 0x5BD40100, + 0x6E000001, 0x5CD40100, 0x6F000001, 0x5DD40100, + 0x70000001, 0x5ED40100, 0x71000001, 0x5FD40100, + 0x72000001, 0x60D40100, 0x73000001, 0x61D40100, + 0x74000001, 0x62D40100, 0x75000001, 0x63D40100, + 0x76000001, 0x64D40100, 0x77000001, 0x65D40100, + 0x78000001, 0x66D40100, 0x79000001, 0x67D40100, + 0x7A000001, 0x68D40100, 0x41000001, 0x69D40100, + 0x42000001, 0x6AD40100, 0x43000001, 0x6BD40100, + 0x44000001, 0x6CD40100, 0x45000001, 0x6DD40100, + 0x46000001, 0x6ED40100, 0x47000001, 0x6FD40100, + 0x48000001, 0x70D40100, 0x49000001, 0x71D40100, + 0x4A000001, 0x72D40100, 0x4B000001, 0x73D40100, + 0x4C000001, 0x74D40100, 0x4D000001, 0x75D40100, + 0x4E000001, 0x76D40100, 0x4F000001, 0x77D40100, + 0x50000001, 0x78D40100, 0x51000001, 0x79D40100, + 0x52000001, 0x7AD40100, 0x53000001, 0x7BD40100, + 0x54000001, 0x7CD40100, 0x55000001, 0x7DD40100, + 0x56000001, 0x7ED40100, 0x57000001, 0x7FD40100, + 0x58000001, 0x80D40100, 0x59000001, 0x81D40100, + 0x5A000001, 0x82D40100, 0x61000001, 0x83D40100, + 0x62000001, 0x84D40100, 0x63000001, 0x85D40100, + 0x64000001, 0x86D40100, 0x65000001, 0x87D40100, + 0x66000001, 0x88D40100, 0x67000001, 0x89D40100, + 0x68000001, 0x8AD40100, 0x69000001, 0x8BD40100, + 0x6A000001, 0x8CD40100, 0x6B000001, 0x8DD40100, + 0x6C000001, 0x8ED40100, 0x6D000001, 0x8FD40100, + 0x6E000001, 0x90D40100, 0x6F000001, 0x91D40100, + 0x70000001, 0x92D40100, 0x71000001, 0x93D40100, + 0x72000001, 0x94D40100, 0x73000001, 0x95D40100, + 0x74000001, 0x96D40100, 0x75000001, 0x97D40100, + 0x76000001, 0x98D40100, 0x77000001, 0x99D40100, + 0x78000001, 0x9AD40100, 0x79000001, 0x9BD40100, + 0x7A000001, 0x9CD40100, 0x41000001, 0x9ED40100, + 0x43000001, 0x9FD40100, 0x44000001, 0xA2D40100, + 0x47000001, 0xA5D40100, 0x4A000001, 0xA6D40100, + 0x4B000001, 0xA9D40100, 0x4E000001, 0xAAD40100, + 0x4F000001, 0xABD40100, 0x50000001, 0xACD40100, + 0x51000001, 0xAED40100, 0x53000001, 0xAFD40100, + 0x54000001, 0xB0D40100, 0x55000001, 0xB1D40100, + 0x56000001, 0xB2D40100, 0x57000001, 0xB3D40100, + 0x58000001, 0xB4D40100, 0x59000001, 0xB5D40100, + 0x5A000001, 0xB6D40100, 0x61000001, 0xB7D40100, + 0x62000001, 0xB8D40100, 0x63000001, 0xB9D40100, + 0x64000001, 0xBBD40100, 0x66000001, 0xBDD40100, + 0x68000001, 0xBED40100, 0x69000001, 0xBFD40100, + 0x6A000001, 0xC0D40100, 0x6B000001, 0xC1D40100, + 0x6C000001, 0xC2D40100, 0x6D000001, 0xC3D40100, + 0x6E000001, 0xC5D40100, 0x70000001, 0xC6D40100, + 0x71000001, 0xC7D40100, 0x72000001, 0xC8D40100, + 0x73000001, 0xC9D40100, 0x74000001, 0xCAD40100, + 0x75000001, 0xCBD40100, 0x76000001, 0xCCD40100, + 0x77000001, 0xCDD40100, 0x78000001, 0xCED40100, + 0x79000001, 0xCFD40100, 0x7A000001, 0xD0D40100, + 0x41000001, 0xD1D40100, 0x42000001, 0xD2D40100, + 0x43000001, 0xD3D40100, 0x44000001, 0xD4D40100, + 0x45000001, 0xD5D40100, 0x46000001, 0xD6D40100, + 0x47000001, 0xD7D40100, 0x48000001, 0xD8D40100, + 0x49000001, 0xD9D40100, 0x4A000001, 0xDAD40100, + 0x4B000001, 0xDBD40100, 0x4C000001, 0xDCD40100, + 0x4D000001, 0xDDD40100, 0x4E000001, 0xDED40100, + 0x4F000001, 0xDFD40100, 0x50000001, 0xE0D40100, + 0x51000001, 0xE1D40100, 0x52000001, 0xE2D40100, + 0x53000001, 0xE3D40100, 0x54000001, 0xE4D40100, + 0x55000001, 0xE5D40100, 0x56000001, 0xE6D40100, + 0x57000001, 0xE7D40100, 0x58000001, 0xE8D40100, + 0x59000001, 0xE9D40100, 0x5A000001, 0xEAD40100, + 0x61000001, 0xEBD40100, 0x62000001, 0xECD40100, + 0x63000001, 0xEDD40100, 0x64000001, 0xEED40100, + 0x65000001, 0xEFD40100, 0x66000001, 0xF0D40100, + 0x67000001, 0xF1D40100, 0x68000001, 0xF2D40100, + 0x69000001, 0xF3D40100, 0x6A000001, 0xF4D40100, + 0x6B000001, 0xF5D40100, 0x6C000001, 0xF6D40100, + 0x6D000001, 0xF7D40100, 0x6E000001, 0xF8D40100, + 0x6F000001, 0xF9D40100, 0x70000001, 0xFAD40100, + 0x71000001, 0xFBD40100, 0x72000001, 0xFCD40100, + 0x73000001, 0xFDD40100, 0x74000001, 0xFED40100, + 0x75000001, 0xFFD40100, 0x76000001, 0x00D50100, + 0x77000001, 0x01D50100, 0x78000001, 0x02D50100, + 0x79000001, 0x03D50100, 0x7A000001, 0x04D50100, + 0x41000001, 0x05D50100, 0x42000001, 0x07D50100, + 0x44000001, 0x08D50100, 0x45000001, 0x09D50100, + 0x46000001, 0x0AD50100, 0x47000001, 0x0DD50100, + 0x4A000001, 0x0ED50100, 0x4B000001, 0x0FD50100, + 0x4C000001, 0x10D50100, 0x4D000001, 0x11D50100, + 0x4E000001, 0x12D50100, 0x4F000001, 0x13D50100, + 0x50000001, 0x14D50100, 0x51000001, 0x16D50100, + 0x53000001, 0x17D50100, 0x54000001, 0x18D50100, + 0x55000001, 0x19D50100, 0x56000001, 0x1AD50100, + 0x57000001, 0x1BD50100, 0x58000001, 0x1CD50100, + 0x59000001, 0x1ED50100, 0x61000001, 0x1FD50100, + 0x62000001, 0x20D50100, 0x63000001, 0x21D50100, + 0x64000001, 0x22D50100, 0x65000001, 0x23D50100, + 0x66000001, 0x24D50100, 0x67000001, 0x25D50100, + 0x68000001, 0x26D50100, 0x69000001, 0x27D50100, + 0x6A000001, 0x28D50100, 0x6B000001, 0x29D50100, + 0x6C000001, 0x2AD50100, 0x6D000001, 0x2BD50100, + 0x6E000001, 0x2CD50100, 0x6F000001, 0x2DD50100, + 0x70000001, 0x2ED50100, 0x71000001, 0x2FD50100, + 0x72000001, 0x30D50100, 0x73000001, 0x31D50100, + 0x74000001, 0x32D50100, 0x75000001, 0x33D50100, + 0x76000001, 0x34D50100, 0x77000001, 0x35D50100, + 0x78000001, 0x36D50100, 0x79000001, 0x37D50100, + 0x7A000001, 0x38D50100, 0x41000001, 0x39D50100, + 0x42000001, 0x3BD50100, 0x44000001, 0x3CD50100, + 0x45000001, 0x3DD50100, 0x46000001, 0x3ED50100, + 0x47000001, 0x40D50100, 0x49000001, 0x41D50100, + 0x4A000001, 0x42D50100, 0x4B000001, 0x43D50100, + 0x4C000001, 0x44D50100, 0x4D000001, 0x46D50100, + 0x4F000001, 0x4AD50100, 0x53000001, 0x4BD50100, + 0x54000001, 0x4CD50100, 0x55000001, 0x4DD50100, + 0x56000001, 0x4ED50100, 0x57000001, 0x4FD50100, + 0x58000001, 0x50D50100, 0x59000001, 0x52D50100, + 0x61000001, 0x53D50100, 0x62000001, 0x54D50100, + 0x63000001, 0x55D50100, 0x64000001, 0x56D50100, + 0x65000001, 0x57D50100, 0x66000001, 0x58D50100, + 0x67000001, 0x59D50100, 0x68000001, 0x5AD50100, + 0x69000001, 0x5BD50100, 0x6A000001, 0x5CD50100, + 0x6B000001, 0x5DD50100, 0x6C000001, 0x5ED50100, + 0x6D000001, 0x5FD50100, 0x6E000001, 0x60D50100, + 0x6F000001, 0x61D50100, 0x70000001, 0x62D50100, + 0x71000001, 0x63D50100, 0x72000001, 0x64D50100, + 0x73000001, 0x65D50100, 0x74000001, 0x66D50100, + 0x75000001, 0x67D50100, 0x76000001, 0x68D50100, + 0x77000001, 0x69D50100, 0x78000001, 0x6AD50100, + 0x79000001, 0x6BD50100, 0x7A000001, 0x6CD50100, + 0x41000001, 0x6DD50100, 0x42000001, 0x6ED50100, + 0x43000001, 0x6FD50100, 0x44000001, 0x70D50100, + 0x45000001, 0x71D50100, 0x46000001, 0x72D50100, + 0x47000001, 0x73D50100, 0x48000001, 0x74D50100, + 0x49000001, 0x75D50100, 0x4A000001, 0x76D50100, + 0x4B000001, 0x77D50100, 0x4C000001, 0x78D50100, + 0x4D000001, 0x79D50100, 0x4E000001, 0x7AD50100, + 0x4F000001, 0x7BD50100, 0x50000001, 0x7CD50100, + 0x51000001, 0x7DD50100, 0x52000001, 0x7ED50100, + 0x53000001, 0x7FD50100, 0x54000001, 0x80D50100, + 0x55000001, 0x81D50100, 0x56000001, 0x82D50100, + 0x57000001, 0x83D50100, 0x58000001, 0x84D50100, + 0x59000001, 0x85D50100, 0x5A000001, 0x86D50100, + 0x61000001, 0x87D50100, 0x62000001, 0x88D50100, + 0x63000001, 0x89D50100, 0x64000001, 0x8AD50100, + 0x65000001, 0x8BD50100, 0x66000001, 0x8CD50100, + 0x67000001, 0x8DD50100, 0x68000001, 0x8ED50100, + 0x69000001, 0x8FD50100, 0x6A000001, 0x90D50100, + 0x6B000001, 0x91D50100, 0x6C000001, 0x92D50100, + 0x6D000001, 0x93D50100, 0x6E000001, 0x94D50100, + 0x6F000001, 0x95D50100, 0x70000001, 0x96D50100, + 0x71000001, 0x97D50100, 0x72000001, 0x98D50100, + 0x73000001, 0x99D50100, 0x74000001, 0x9AD50100, + 0x75000001, 0x9BD50100, 0x76000001, 0x9CD50100, + 0x77000001, 0x9DD50100, 0x78000001, 0x9ED50100, + 0x79000001, 0x9FD50100, 0x7A000001, 0xA0D50100, + 0x41000001, 0xA1D50100, 0x42000001, 0xA2D50100, + 0x43000001, 0xA3D50100, 0x44000001, 0xA4D50100, + 0x45000001, 0xA5D50100, 0x46000001, 0xA6D50100, + 0x47000001, 0xA7D50100, 0x48000001, 0xA8D50100, + 0x49000001, 0xA9D50100, 0x4A000001, 0xAAD50100, + 0x4B000001, 0xABD50100, 0x4C000001, 0xACD50100, + 0x4D000001, 0xADD50100, 0x4E000001, 0xAED50100, + 0x4F000001, 0xAFD50100, 0x50000001, 0xB0D50100, + 0x51000001, 0xB1D50100, 0x52000001, 0xB2D50100, + 0x53000001, 0xB3D50100, 0x54000001, 0xB4D50100, + 0x55000001, 0xB5D50100, 0x56000001, 0xB6D50100, + 0x57000001, 0xB7D50100, 0x58000001, 0xB8D50100, + 0x59000001, 0xB9D50100, 0x5A000001, 0xBAD50100, + 0x61000001, 0xBBD50100, 0x62000001, 0xBCD50100, + 0x63000001, 0xBDD50100, 0x64000001, 0xBED50100, + 0x65000001, 0xBFD50100, 0x66000001, 0xC0D50100, + 0x67000001, 0xC1D50100, 0x68000001, 0xC2D50100, + 0x69000001, 0xC3D50100, 0x6A000001, 0xC4D50100, + 0x6B000001, 0xC5D50100, 0x6C000001, 0xC6D50100, + 0x6D000001, 0xC7D50100, 0x6E000001, 0xC8D50100, + 0x6F000001, 0xC9D50100, 0x70000001, 0xCAD50100, + 0x71000001, 0xCBD50100, 0x72000001, 0xCCD50100, + 0x73000001, 0xCDD50100, 0x74000001, 0xCED50100, + 0x75000001, 0xCFD50100, 0x76000001, 0xD0D50100, + 0x77000001, 0xD1D50100, 0x78000001, 0xD2D50100, + 0x79000001, 0xD3D50100, 0x7A000001, 0xD4D50100, + 0x41000001, 0xD5D50100, 0x42000001, 0xD6D50100, + 0x43000001, 0xD7D50100, 0x44000001, 0xD8D50100, + 0x45000001, 0xD9D50100, 0x46000001, 0xDAD50100, + 0x47000001, 0xDBD50100, 0x48000001, 0xDCD50100, + 0x49000001, 0xDDD50100, 0x4A000001, 0xDED50100, + 0x4B000001, 0xDFD50100, 0x4C000001, 0xE0D50100, + 0x4D000001, 0xE1D50100, 0x4E000001, 0xE2D50100, + 0x4F000001, 0xE3D50100, 0x50000001, 0xE4D50100, + 0x51000001, 0xE5D50100, 0x52000001, 0xE6D50100, + 0x53000001, 0xE7D50100, 0x54000001, 0xE8D50100, + 0x55000001, 0xE9D50100, 0x56000001, 0xEAD50100, + 0x57000001, 0xEBD50100, 0x58000001, 0xECD50100, + 0x59000001, 0xEDD50100, 0x5A000001, 0xEED50100, + 0x61000001, 0xEFD50100, 0x62000001, 0xF0D50100, + 0x63000001, 0xF1D50100, 0x64000001, 0xF2D50100, + 0x65000001, 0xF3D50100, 0x66000001, 0xF4D50100, + 0x67000001, 0xF5D50100, 0x68000001, 0xF6D50100, + 0x69000001, 0xF7D50100, 0x6A000001, 0xF8D50100, + 0x6B000001, 0xF9D50100, 0x6C000001, 0xFAD50100, + 0x6D000001, 0xFBD50100, 0x6E000001, 0xFCD50100, + 0x6F000001, 0xFDD50100, 0x70000001, 0xFED50100, + 0x71000001, 0xFFD50100, 0x72000001, 0x00D60100, + 0x73000001, 0x01D60100, 0x74000001, 0x02D60100, + 0x75000001, 0x03D60100, 0x76000001, 0x04D60100, + 0x77000001, 0x05D60100, 0x78000001, 0x06D60100, + 0x79000001, 0x07D60100, 0x7A000001, 0x08D60100, + 0x41000001, 0x09D60100, 0x42000001, 0x0AD60100, + 0x43000001, 0x0BD60100, 0x44000001, 0x0CD60100, + 0x45000001, 0x0DD60100, 0x46000001, 0x0ED60100, + 0x47000001, 0x0FD60100, 0x48000001, 0x10D60100, + 0x49000001, 0x11D60100, 0x4A000001, 0x12D60100, + 0x4B000001, 0x13D60100, 0x4C000001, 0x14D60100, + 0x4D000001, 0x15D60100, 0x4E000001, 0x16D60100, + 0x4F000001, 0x17D60100, 0x50000001, 0x18D60100, + 0x51000001, 0x19D60100, 0x52000001, 0x1AD60100, + 0x53000001, 0x1BD60100, 0x54000001, 0x1CD60100, + 0x55000001, 0x1DD60100, 0x56000001, 0x1ED60100, + 0x57000001, 0x1FD60100, 0x58000001, 0x20D60100, + 0x59000001, 0x21D60100, 0x5A000001, 0x22D60100, + 0x61000001, 0x23D60100, 0x62000001, 0x24D60100, + 0x63000001, 0x25D60100, 0x64000001, 0x26D60100, + 0x65000001, 0x27D60100, 0x66000001, 0x28D60100, + 0x67000001, 0x29D60100, 0x68000001, 0x2AD60100, + 0x69000001, 0x2BD60100, 0x6A000001, 0x2CD60100, + 0x6B000001, 0x2DD60100, 0x6C000001, 0x2ED60100, + 0x6D000001, 0x2FD60100, 0x6E000001, 0x30D60100, + 0x6F000001, 0x31D60100, 0x70000001, 0x32D60100, + 0x71000001, 0x33D60100, 0x72000001, 0x34D60100, + 0x73000001, 0x35D60100, 0x74000001, 0x36D60100, + 0x75000001, 0x37D60100, 0x76000001, 0x38D60100, + 0x77000001, 0x39D60100, 0x78000001, 0x3AD60100, + 0x79000001, 0x3BD60100, 0x7A000001, 0x3CD60100, + 0x41000001, 0x3DD60100, 0x42000001, 0x3ED60100, + 0x43000001, 0x3FD60100, 0x44000001, 0x40D60100, + 0x45000001, 0x41D60100, 0x46000001, 0x42D60100, + 0x47000001, 0x43D60100, 0x48000001, 0x44D60100, + 0x49000001, 0x45D60100, 0x4A000001, 0x46D60100, + 0x4B000001, 0x47D60100, 0x4C000001, 0x48D60100, + 0x4D000001, 0x49D60100, 0x4E000001, 0x4AD60100, + 0x4F000001, 0x4BD60100, 0x50000001, 0x4CD60100, + 0x51000001, 0x4DD60100, 0x52000001, 0x4ED60100, + 0x53000001, 0x4FD60100, 0x54000001, 0x50D60100, + 0x55000001, 0x51D60100, 0x56000001, 0x52D60100, + 0x57000001, 0x53D60100, 0x58000001, 0x54D60100, + 0x59000001, 0x55D60100, 0x5A000001, 0x56D60100, + 0x61000001, 0x57D60100, 0x62000001, 0x58D60100, + 0x63000001, 0x59D60100, 0x64000001, 0x5AD60100, + 0x65000001, 0x5BD60100, 0x66000001, 0x5CD60100, + 0x67000001, 0x5DD60100, 0x68000001, 0x5ED60100, + 0x69000001, 0x5FD60100, 0x6A000001, 0x60D60100, + 0x6B000001, 0x61D60100, 0x6C000001, 0x62D60100, + 0x6D000001, 0x63D60100, 0x6E000001, 0x64D60100, + 0x6F000001, 0x65D60100, 0x70000001, 0x66D60100, + 0x71000001, 0x67D60100, 0x72000001, 0x68D60100, + 0x73000001, 0x69D60100, 0x74000001, 0x6AD60100, + 0x75000001, 0x6BD60100, 0x76000001, 0x6CD60100, + 0x77000001, 0x6DD60100, 0x78000001, 0x6ED60100, + 0x79000001, 0x6FD60100, 0x7A000001, 0x70D60100, + 0x41000001, 0x71D60100, 0x42000001, 0x72D60100, + 0x43000001, 0x73D60100, 0x44000001, 0x74D60100, + 0x45000001, 0x75D60100, 0x46000001, 0x76D60100, + 0x47000001, 0x77D60100, 0x48000001, 0x78D60100, + 0x49000001, 0x79D60100, 0x4A000001, 0x7AD60100, + 0x4B000001, 0x7BD60100, 0x4C000001, 0x7CD60100, + 0x4D000001, 0x7DD60100, 0x4E000001, 0x7ED60100, + 0x4F000001, 0x7FD60100, 0x50000001, 0x80D60100, + 0x51000001, 0x81D60100, 0x52000001, 0x82D60100, + 0x53000001, 0x83D60100, 0x54000001, 0x84D60100, + 0x55000001, 0x85D60100, 0x56000001, 0x86D60100, + 0x57000001, 0x87D60100, 0x58000001, 0x88D60100, + 0x59000001, 0x89D60100, 0x5A000001, 0x8AD60100, + 0x61000001, 0x8BD60100, 0x62000001, 0x8CD60100, + 0x63000001, 0x8DD60100, 0x64000001, 0x8ED60100, + 0x65000001, 0x8FD60100, 0x66000001, 0x90D60100, + 0x67000001, 0x91D60100, 0x68000001, 0x92D60100, + 0x69000001, 0x93D60100, 0x6A000001, 0x94D60100, + 0x6B000001, 0x95D60100, 0x6C000001, 0x96D60100, + 0x6D000001, 0x97D60100, 0x6E000001, 0x98D60100, + 0x6F000001, 0x99D60100, 0x70000001, 0x9AD60100, + 0x71000001, 0x9BD60100, 0x72000001, 0x9CD60100, + 0x73000001, 0x9DD60100, 0x74000001, 0x9ED60100, + 0x75000001, 0x9FD60100, 0x76000001, 0xA0D60100, + 0x77000001, 0xA1D60100, 0x78000001, 0xA2D60100, + 0x79000001, 0xA3D60100, 0x7A000001, 0xA4D60100, + 0x31010001, 0xA5D60100, 0x37020001, 0xA8D60100, + 0x91030001, 0xA9D60100, 0x92030001, 0xAAD60100, + 0x93030001, 0xABD60100, 0x94030001, 0xACD60100, + 0x95030001, 0xADD60100, 0x96030001, 0xAED60100, + 0x97030001, 0xAFD60100, 0x98030001, 0xB0D60100, + 0x99030001, 0xB1D60100, 0x9A030001, 0xB2D60100, + 0x9B030001, 0xB3D60100, 0x9C030001, 0xB4D60100, + 0x9D030001, 0xB5D60100, 0x9E030001, 0xB6D60100, + 0x9F030001, 0xB7D60100, 0xA0030001, 0xB8D60100, + 0xA1030001, 0xB9D60100, 0xF4030041, 0xBAD60100, + 0xA3030001, 0xBBD60100, 0xA4030001, 0xBCD60100, + 0xA5030001, 0xBDD60100, 0xA6030001, 0xBED60100, + 0xA7030001, 0xBFD60100, 0xA8030001, 0xC0D60100, + 0xA9030001, 0xC1D60100, 0x07220001, 0xC2D60100, + 0xB1030001, 0xC3D60100, 0xB2030001, 0xC4D60100, + 0xB3030001, 0xC5D60100, 0xB4030001, 0xC6D60100, + 0xB5030001, 0xC7D60100, 0xB6030001, 0xC8D60100, + 0xB7030001, 0xC9D60100, 0xB8030001, 0xCAD60100, + 0xB9030001, 0xCBD60100, 0xBA030001, 0xCCD60100, + 0xBB030001, 0xCDD60100, 0xBC030001, 0xCED60100, + 0xBD030001, 0xCFD60100, 0xBE030001, 0xD0D60100, + 0xBF030001, 0xD1D60100, 0xC0030001, 0xD2D60100, + 0xC1030001, 0xD3D60100, 0xC2030001, 0xD4D60100, + 0xC3030001, 0xD5D60100, 0xC4030001, 0xD6D60100, + 0xC5030001, 0xD7D60100, 0xC6030001, 0xD8D60100, + 0xC7030001, 0xD9D60100, 0xC8030001, 0xDAD60100, + 0xC9030001, 0xDBD60100, 0x02220001, 0xDCD60100, + 0xF5030041, 0xDDD60100, 0xD1030041, 0xDED60100, + 0xF0030041, 0xDFD60100, 0xD5030041, 0xE0D60100, + 0xF1030041, 0xE1D60100, 0xD6030041, 0xE2D60100, + 0x91030001, 0xE3D60100, 0x92030001, 0xE4D60100, + 0x93030001, 0xE5D60100, 0x94030001, 0xE6D60100, + 0x95030001, 0xE7D60100, 0x96030001, 0xE8D60100, + 0x97030001, 0xE9D60100, 0x98030001, 0xEAD60100, + 0x99030001, 0xEBD60100, 0x9A030001, 0xECD60100, + 0x9B030001, 0xEDD60100, 0x9C030001, 0xEED60100, + 0x9D030001, 0xEFD60100, 0x9E030001, 0xF0D60100, + 0x9F030001, 0xF1D60100, 0xA0030001, 0xF2D60100, + 0xA1030001, 0xF3D60100, 0xF4030041, 0xF4D60100, + 0xA3030001, 0xF5D60100, 0xA4030001, 0xF6D60100, + 0xA5030001, 0xF7D60100, 0xA6030001, 0xF8D60100, + 0xA7030001, 0xF9D60100, 0xA8030001, 0xFAD60100, + 0xA9030001, 0xFBD60100, 0x07220001, 0xFCD60100, + 0xB1030001, 0xFDD60100, 0xB2030001, 0xFED60100, + 0xB3030001, 0xFFD60100, 0xB4030001, 0x00D70100, + 0xB5030001, 0x01D70100, 0xB6030001, 0x02D70100, + 0xB7030001, 0x03D70100, 0xB8030001, 0x04D70100, + 0xB9030001, 0x05D70100, 0xBA030001, 0x06D70100, + 0xBB030001, 0x07D70100, 0xBC030001, 0x08D70100, + 0xBD030001, 0x09D70100, 0xBE030001, 0x0AD70100, + 0xBF030001, 0x0BD70100, 0xC0030001, 0x0CD70100, + 0xC1030001, 0x0DD70100, 0xC2030001, 0x0ED70100, + 0xC3030001, 0x0FD70100, 0xC4030001, 0x10D70100, + 0xC5030001, 0x11D70100, 0xC6030001, 0x12D70100, + 0xC7030001, 0x13D70100, 0xC8030001, 0x14D70100, + 0xC9030001, 0x15D70100, 0x02220001, 0x16D70100, + 0xF5030041, 0x17D70100, 0xD1030041, 0x18D70100, + 0xF0030041, 0x19D70100, 0xD5030041, 0x1AD70100, + 0xF1030041, 0x1BD70100, 0xD6030041, 0x1CD70100, + 0x91030001, 0x1DD70100, 0x92030001, 0x1ED70100, + 0x93030001, 0x1FD70100, 0x94030001, 0x20D70100, + 0x95030001, 0x21D70100, 0x96030001, 0x22D70100, + 0x97030001, 0x23D70100, 0x98030001, 0x24D70100, + 0x99030001, 0x25D70100, 0x9A030001, 0x26D70100, + 0x9B030001, 0x27D70100, 0x9C030001, 0x28D70100, + 0x9D030001, 0x29D70100, 0x9E030001, 0x2AD70100, + 0x9F030001, 0x2BD70100, 0xA0030001, 0x2CD70100, + 0xA1030001, 0x2DD70100, 0xF4030041, 0x2ED70100, + 0xA3030001, 0x2FD70100, 0xA4030001, 0x30D70100, + 0xA5030001, 0x31D70100, 0xA6030001, 0x32D70100, + 0xA7030001, 0x33D70100, 0xA8030001, 0x34D70100, + 0xA9030001, 0x35D70100, 0x07220001, 0x36D70100, + 0xB1030001, 0x37D70100, 0xB2030001, 0x38D70100, + 0xB3030001, 0x39D70100, 0xB4030001, 0x3AD70100, + 0xB5030001, 0x3BD70100, 0xB6030001, 0x3CD70100, + 0xB7030001, 0x3DD70100, 0xB8030001, 0x3ED70100, + 0xB9030001, 0x3FD70100, 0xBA030001, 0x40D70100, + 0xBB030001, 0x41D70100, 0xBC030001, 0x42D70100, + 0xBD030001, 0x43D70100, 0xBE030001, 0x44D70100, + 0xBF030001, 0x45D70100, 0xC0030001, 0x46D70100, + 0xC1030001, 0x47D70100, 0xC2030001, 0x48D70100, + 0xC3030001, 0x49D70100, 0xC4030001, 0x4AD70100, + 0xC5030001, 0x4BD70100, 0xC6030001, 0x4CD70100, + 0xC7030001, 0x4DD70100, 0xC8030001, 0x4ED70100, + 0xC9030001, 0x4FD70100, 0x02220001, 0x50D70100, + 0xF5030041, 0x51D70100, 0xD1030041, 0x52D70100, + 0xF0030041, 0x53D70100, 0xD5030041, 0x54D70100, + 0xF1030041, 0x55D70100, 0xD6030041, 0x56D70100, + 0x91030001, 0x57D70100, 0x92030001, 0x58D70100, + 0x93030001, 0x59D70100, 0x94030001, 0x5AD70100, + 0x95030001, 0x5BD70100, 0x96030001, 0x5CD70100, + 0x97030001, 0x5DD70100, 0x98030001, 0x5ED70100, + 0x99030001, 0x5FD70100, 0x9A030001, 0x60D70100, + 0x9B030001, 0x61D70100, 0x9C030001, 0x62D70100, + 0x9D030001, 0x63D70100, 0x9E030001, 0x64D70100, + 0x9F030001, 0x65D70100, 0xA0030001, 0x66D70100, + 0xA1030001, 0x67D70100, 0xF4030041, 0x68D70100, + 0xA3030001, 0x69D70100, 0xA4030001, 0x6AD70100, + 0xA5030001, 0x6BD70100, 0xA6030001, 0x6CD70100, + 0xA7030001, 0x6DD70100, 0xA8030001, 0x6ED70100, + 0xA9030001, 0x6FD70100, 0x07220001, 0x70D70100, + 0xB1030001, 0x71D70100, 0xB2030001, 0x72D70100, + 0xB3030001, 0x73D70100, 0xB4030001, 0x74D70100, + 0xB5030001, 0x75D70100, 0xB6030001, 0x76D70100, + 0xB7030001, 0x77D70100, 0xB8030001, 0x78D70100, + 0xB9030001, 0x79D70100, 0xBA030001, 0x7AD70100, + 0xBB030001, 0x7BD70100, 0xBC030001, 0x7CD70100, + 0xBD030001, 0x7DD70100, 0xBE030001, 0x7ED70100, + 0xBF030001, 0x7FD70100, 0xC0030001, 0x80D70100, + 0xC1030001, 0x81D70100, 0xC2030001, 0x82D70100, + 0xC3030001, 0x83D70100, 0xC4030001, 0x84D70100, + 0xC5030001, 0x85D70100, 0xC6030001, 0x86D70100, + 0xC7030001, 0x87D70100, 0xC8030001, 0x88D70100, + 0xC9030001, 0x89D70100, 0x02220001, 0x8AD70100, + 0xF5030041, 0x8BD70100, 0xD1030041, 0x8CD70100, + 0xF0030041, 0x8DD70100, 0xD5030041, 0x8ED70100, + 0xF1030041, 0x8FD70100, 0xD6030041, 0x90D70100, + 0x91030001, 0x91D70100, 0x92030001, 0x92D70100, + 0x93030001, 0x93D70100, 0x94030001, 0x94D70100, + 0x95030001, 0x95D70100, 0x96030001, 0x96D70100, + 0x97030001, 0x97D70100, 0x98030001, 0x98D70100, + 0x99030001, 0x99D70100, 0x9A030001, 0x9AD70100, + 0x9B030001, 0x9BD70100, 0x9C030001, 0x9CD70100, + 0x9D030001, 0x9DD70100, 0x9E030001, 0x9ED70100, + 0x9F030001, 0x9FD70100, 0xA0030001, 0xA0D70100, + 0xA1030001, 0xA1D70100, 0xF4030041, 0xA2D70100, + 0xA3030001, 0xA3D70100, 0xA4030001, 0xA4D70100, + 0xA5030001, 0xA5D70100, 0xA6030001, 0xA6D70100, + 0xA7030001, 0xA7D70100, 0xA8030001, 0xA8D70100, + 0xA9030001, 0xA9D70100, 0x07220001, 0xAAD70100, + 0xB1030001, 0xABD70100, 0xB2030001, 0xACD70100, + 0xB3030001, 0xADD70100, 0xB4030001, 0xAED70100, + 0xB5030001, 0xAFD70100, 0xB6030001, 0xB0D70100, + 0xB7030001, 0xB1D70100, 0xB8030001, 0xB2D70100, + 0xB9030001, 0xB3D70100, 0xBA030001, 0xB4D70100, + 0xBB030001, 0xB5D70100, 0xBC030001, 0xB6D70100, + 0xBD030001, 0xB7D70100, 0xBE030001, 0xB8D70100, + 0xBF030001, 0xB9D70100, 0xC0030001, 0xBAD70100, + 0xC1030001, 0xBBD70100, 0xC2030001, 0xBCD70100, + 0xC3030001, 0xBDD70100, 0xC4030001, 0xBED70100, + 0xC5030001, 0xBFD70100, 0xC6030001, 0xC0D70100, + 0xC7030001, 0xC1D70100, 0xC8030001, 0xC2D70100, + 0xC9030001, 0xC3D70100, 0x02220001, 0xC4D70100, + 0xF5030041, 0xC5D70100, 0xD1030041, 0xC6D70100, + 0xF0030041, 0xC7D70100, 0xD5030041, 0xC8D70100, + 0xF1030041, 0xC9D70100, 0xD6030041, 0xCAD70100, + 0xDC030001, 0xCBD70100, 0xDD030001, 0xCED70100, + 0x30000001, 0xCFD70100, 0x31000001, 0xD0D70100, + 0x32000001, 0xD1D70100, 0x33000001, 0xD2D70100, + 0x34000001, 0xD3D70100, 0x35000001, 0xD4D70100, + 0x36000001, 0xD5D70100, 0x37000001, 0xD6D70100, + 0x38000001, 0xD7D70100, 0x39000001, 0xD8D70100, + 0x30000001, 0xD9D70100, 0x31000001, 0xDAD70100, + 0x32000001, 0xDBD70100, 0x33000001, 0xDCD70100, + 0x34000001, 0xDDD70100, 0x35000001, 0xDED70100, + 0x36000001, 0xDFD70100, 0x37000001, 0xE0D70100, + 0x38000001, 0xE1D70100, 0x39000001, 0xE2D70100, + 0x30000001, 0xE3D70100, 0x31000001, 0xE4D70100, + 0x32000001, 0xE5D70100, 0x33000001, 0xE6D70100, + 0x34000001, 0xE7D70100, 0x35000001, 0xE8D70100, + 0x36000001, 0xE9D70100, 0x37000001, 0xEAD70100, + 0x38000001, 0xEBD70100, 0x39000001, 0xECD70100, + 0x30000001, 0xEDD70100, 0x31000001, 0xEED70100, + 0x32000001, 0xEFD70100, 0x33000001, 0xF0D70100, + 0x34000001, 0xF1D70100, 0x35000001, 0xF2D70100, + 0x36000001, 0xF3D70100, 0x37000001, 0xF4D70100, + 0x38000001, 0xF5D70100, 0x39000001, 0xF6D70100, + 0x30000001, 0xF7D70100, 0x31000001, 0xF8D70100, + 0x32000001, 0xF9D70100, 0x33000001, 0xFAD70100, + 0x34000001, 0xFBD70100, 0x35000001, 0xFCD70100, + 0x36000001, 0xFDD70100, 0x37000001, 0xFED70100, + 0x38000001, 0xFFD70100, 0x39000001, 0x30E00100, + 0x30040001, 0x31E00100, 0x31040001, 0x32E00100, + 0x32040001, 0x33E00100, 0x33040001, 0x34E00100, + 0x34040001, 0x35E00100, 0x35040001, 0x36E00100, + 0x36040001, 0x37E00100, 0x37040001, 0x38E00100, + 0x38040001, 0x39E00100, 0x3A040001, 0x3AE00100, + 0x3B040001, 0x3BE00100, 0x3C040001, 0x3CE00100, + 0x3E040001, 0x3DE00100, 0x3F040001, 0x3EE00100, + 0x40040001, 0x3FE00100, 0x41040001, 0x40E00100, + 0x42040001, 0x41E00100, 0x43040001, 0x42E00100, + 0x44040001, 0x43E00100, 0x45040001, 0x44E00100, + 0x46040001, 0x45E00100, 0x47040001, 0x46E00100, + 0x48040001, 0x47E00100, 0x4B040001, 0x48E00100, + 0x4D040001, 0x49E00100, 0x4E040001, 0x4AE00100, + 0x89A60001, 0x4BE00100, 0xD9040001, 0x4CE00100, + 0x56040001, 0x4DE00100, 0x58040001, 0x4EE00100, + 0xE9040001, 0x4FE00100, 0xAF040001, 0x50E00100, + 0xCF040001, 0x51E00100, 0x30040001, 0x52E00100, + 0x31040001, 0x53E00100, 0x32040001, 0x54E00100, + 0x33040001, 0x55E00100, 0x34040001, 0x56E00100, + 0x35040001, 0x57E00100, 0x36040001, 0x58E00100, + 0x37040001, 0x59E00100, 0x38040001, 0x5AE00100, + 0x3A040001, 0x5BE00100, 0x3B040001, 0x5CE00100, + 0x3E040001, 0x5DE00100, 0x3F040001, 0x5EE00100, + 0x41040001, 0x5FE00100, 0x43040001, 0x60E00100, + 0x44040001, 0x61E00100, 0x45040001, 0x62E00100, + 0x46040001, 0x63E00100, 0x47040001, 0x64E00100, + 0x48040001, 0x65E00100, 0x4A040001, 0x66E00100, + 0x4B040001, 0x67E00100, 0x91040001, 0x68E00100, + 0x56040001, 0x69E00100, 0x55040001, 0x6AE00100, + 0x5F040001, 0x6BE00100, 0xAB040001, 0x6CE00100, + 0x51A60001, 0x6DE00100, 0xB1040001, 0x00EE0100, + 0x27060001, 0x01EE0100, 0x28060001, 0x02EE0100, + 0x2C060001, 0x03EE0100, 0x2F060001, 0x05EE0100, + 0x48060001, 0x06EE0100, 0x32060001, 0x07EE0100, + 0x2D060001, 0x08EE0100, 0x37060001, 0x09EE0100, + 0x4A060001, 0x0AEE0100, 0x43060001, 0x0BEE0100, + 0x44060001, 0x0CEE0100, 0x45060001, 0x0DEE0100, + 0x46060001, 0x0EEE0100, 0x33060001, 0x0FEE0100, + 0x39060001, 0x10EE0100, 0x41060001, 0x11EE0100, + 0x35060001, 0x12EE0100, 0x42060001, 0x13EE0100, + 0x31060001, 0x14EE0100, 0x34060001, 0x15EE0100, + 0x2A060001, 0x16EE0100, 0x2B060001, 0x17EE0100, + 0x2E060001, 0x18EE0100, 0x30060001, 0x19EE0100, + 0x36060001, 0x1AEE0100, 0x38060001, 0x1BEE0100, + 0x3A060001, 0x1CEE0100, 0x6E060001, 0x1DEE0100, + 0xBA060001, 0x1EEE0100, 0xA1060001, 0x1FEE0100, + 0x6F060001, 0x21EE0100, 0x28060001, 0x22EE0100, + 0x2C060001, 0x24EE0100, 0x47060001, 0x27EE0100, + 0x2D060001, 0x29EE0100, 0x4A060001, 0x2AEE0100, + 0x43060001, 0x2BEE0100, 0x44060001, 0x2CEE0100, + 0x45060001, 0x2DEE0100, 0x46060001, 0x2EEE0100, + 0x33060001, 0x2FEE0100, 0x39060001, 0x30EE0100, + 0x41060001, 0x31EE0100, 0x35060001, 0x32EE0100, + 0x42060001, 0x34EE0100, 0x34060001, 0x35EE0100, + 0x2A060001, 0x36EE0100, 0x2B060001, 0x37EE0100, + 0x2E060001, 0x39EE0100, 0x36060001, 0x3BEE0100, + 0x3A060001, 0x42EE0100, 0x2C060001, 0x47EE0100, + 0x2D060001, 0x49EE0100, 0x4A060001, 0x4BEE0100, + 0x44060001, 0x4DEE0100, 0x46060001, 0x4EEE0100, + 0x33060001, 0x4FEE0100, 0x39060001, 0x51EE0100, + 0x35060001, 0x52EE0100, 0x42060001, 0x54EE0100, + 0x34060001, 0x57EE0100, 0x2E060001, 0x59EE0100, + 0x36060001, 0x5BEE0100, 0x3A060001, 0x5DEE0100, + 0xBA060001, 0x5FEE0100, 0x6F060001, 0x61EE0100, + 0x28060001, 0x62EE0100, 0x2C060001, 0x64EE0100, + 0x47060001, 0x67EE0100, 0x2D060001, 0x68EE0100, + 0x37060001, 0x69EE0100, 0x4A060001, 0x6AEE0100, + 0x43060001, 0x6CEE0100, 0x45060001, 0x6DEE0100, + 0x46060001, 0x6EEE0100, 0x33060001, 0x6FEE0100, + 0x39060001, 0x70EE0100, 0x41060001, 0x71EE0100, + 0x35060001, 0x72EE0100, 0x42060001, 0x74EE0100, + 0x34060001, 0x75EE0100, 0x2A060001, 0x76EE0100, + 0x2B060001, 0x77EE0100, 0x2E060001, 0x79EE0100, + 0x36060001, 0x7AEE0100, 0x38060001, 0x7BEE0100, + 0x3A060001, 0x7CEE0100, 0x6E060001, 0x7EEE0100, + 0xA1060001, 0x80EE0100, 0x27060001, 0x81EE0100, + 0x28060001, 0x82EE0100, 0x2C060001, 0x83EE0100, + 0x2F060001, 0x84EE0100, 0x47060001, 0x85EE0100, + 0x48060001, 0x86EE0100, 0x32060001, 0x87EE0100, + 0x2D060001, 0x88EE0100, 0x37060001, 0x89EE0100, + 0x4A060001, 0x8BEE0100, 0x44060001, 0x8CEE0100, + 0x45060001, 0x8DEE0100, 0x46060001, 0x8EEE0100, + 0x33060001, 0x8FEE0100, 0x39060001, 0x90EE0100, + 0x41060001, 0x91EE0100, 0x35060001, 0x92EE0100, + 0x42060001, 0x93EE0100, 0x31060001, 0x94EE0100, + 0x34060001, 0x95EE0100, 0x2A060001, 0x96EE0100, + 0x2B060001, 0x97EE0100, 0x2E060001, 0x98EE0100, + 0x30060001, 0x99EE0100, 0x36060001, 0x9AEE0100, + 0x38060001, 0x9BEE0100, 0x3A060001, 0xA1EE0100, + 0x28060001, 0xA2EE0100, 0x2C060001, 0xA3EE0100, + 0x2F060001, 0xA5EE0100, 0x48060001, 0xA6EE0100, + 0x32060001, 0xA7EE0100, 0x2D060001, 0xA8EE0100, + 0x37060001, 0xA9EE0100, 0x4A060001, 0xABEE0100, + 0x44060001, 0xACEE0100, 0x45060001, 0xADEE0100, + 0x46060001, 0xAEEE0100, 0x33060001, 0xAFEE0100, + 0x39060001, 0xB0EE0100, 0x41060001, 0xB1EE0100, + 0x35060001, 0xB2EE0100, 0x42060001, 0xB3EE0100, + 0x31060001, 0xB4EE0100, 0x34060001, 0xB5EE0100, + 0x2A060001, 0xB6EE0100, 0x2B060001, 0xB7EE0100, + 0x2E060001, 0xB8EE0100, 0x30060001, 0xB9EE0100, + 0x36060001, 0xBAEE0100, 0x38060001, 0xBBEE0100, + 0x3A060001, 0x00F10100, 0xD10A0002, 0x01F10100, + 0xD30A0002, 0x02F10100, 0xD50A0002, 0x03F10100, + 0xD70A0002, 0x04F10100, 0xD90A0002, 0x05F10100, + 0xDB0A0002, 0x06F10100, 0xDD0A0002, 0x07F10100, + 0xDF0A0002, 0x08F10100, 0xE10A0002, 0x09F10100, + 0xE30A0002, 0x0AF10100, 0xE50A0002, 0x10F10100, + 0xE70A0003, 0x11F10100, 0xEA0A0003, 0x12F10100, + 0xED0A0003, 0x13F10100, 0xF00A0003, 0x14F10100, + 0xF30A0003, 0x15F10100, 0xF60A0003, 0x16F10100, + 0xF90A0003, 0x17F10100, 0xFC0A0003, 0x18F10100, + 0xFF0A0003, 0x19F10100, 0x020B0003, 0x1AF10100, + 0x050B0003, 0x1BF10100, 0x080B0003, 0x1CF10100, + 0x0B0B0003, 0x1DF10100, 0x0E0B0003, 0x1EF10100, + 0x110B0003, 0x1FF10100, 0x140B0003, 0x20F10100, + 0x170B0003, 0x21F10100, 0x1A0B0003, 0x22F10100, + 0x1D0B0003, 0x23F10100, 0x200B0003, 0x24F10100, + 0x230B0003, 0x25F10100, 0x260B0003, 0x26F10100, + 0x290B0003, 0x27F10100, 0x2C0B0003, 0x28F10100, + 0x2F0B0003, 0x29F10100, 0x320B0003, 0x2AF10100, + 0x350B0003, 0x2BF10100, 0x43000001, 0x2CF10100, + 0x52000001, 0x2DF10100, 0x380B0002, 0x2EF10100, + 0x3A0B0002, 0x30F10100, 0x41000001, 0x31F10100, + 0x42000001, 0x32F10100, 0x43000001, 0x33F10100, + 0x44000001, 0x34F10100, 0x45000001, 0x35F10100, + 0x46000001, 0x36F10100, 0x47000001, 0x37F10100, + 0x48000001, 0x38F10100, 0x49000001, 0x39F10100, + 0x4A000001, 0x3AF10100, 0x4B000001, 0x3BF10100, + 0x4C000001, 0x3CF10100, 0x4D000001, 0x3DF10100, + 0x4E000001, 0x3EF10100, 0x4F000001, 0x3FF10100, + 0x50000001, 0x40F10100, 0x51000001, 0x41F10100, + 0x52000001, 0x42F10100, 0x53000001, 0x43F10100, + 0x54000001, 0x44F10100, 0x55000001, 0x45F10100, + 0x56000001, 0x46F10100, 0x57000001, 0x47F10100, + 0x58000001, 0x48F10100, 0x59000001, 0x49F10100, + 0x5A000001, 0x4AF10100, 0x3C0B0002, 0x4BF10100, + 0x3E0B0002, 0x4CF10100, 0x400B0002, 0x4DF10100, + 0x420B0002, 0x4EF10100, 0x440B0003, 0x4FF10100, + 0x470B0002, 0x6AF10100, 0x490B0002, 0x6BF10100, + 0x4B0B0002, 0x6CF10100, 0x4D0B0002, 0x90F10100, + 0x4F0B0002, 0x00F20100, 0x510B0002, 0x01F20100, + 0x530B0002, 0x02F20100, 0xB5300001, 0x10F20100, + 0x4B620001, 0x11F20100, 0x575B0001, 0x12F20100, + 0xCC530001, 0x13F20100, 0xC7300001, 0x14F20100, + 0x8C4E0001, 0x15F20100, 0x1A590001, 0x16F20100, + 0xE3890001, 0x17F20100, 0x29590001, 0x18F20100, + 0xA44E0001, 0x19F20100, 0x20660001, 0x1AF20100, + 0x21710001, 0x1BF20100, 0x99650001, 0x1CF20100, + 0x4D520001, 0x1DF20100, 0x8C5F0001, 0x1EF20100, + 0x8D510001, 0x1FF20100, 0xB0650001, 0x20F20100, + 0x1D520001, 0x21F20100, 0x427D0001, 0x22F20100, + 0x1F750001, 0x23F20100, 0xA98C0001, 0x24F20100, + 0xF0580001, 0x25F20100, 0x39540001, 0x26F20100, + 0x146F0001, 0x27F20100, 0x95620001, 0x28F20100, + 0x55630001, 0x29F20100, 0x004E0001, 0x2AF20100, + 0x094E0001, 0x2BF20100, 0x4A900001, 0x2CF20100, + 0xE65D0001, 0x2DF20100, 0x2D4E0001, 0x2EF20100, + 0xF3530001, 0x2FF20100, 0x07630001, 0x30F20100, + 0x708D0001, 0x31F20100, 0x53620001, 0x32F20100, + 0x81790001, 0x33F20100, 0x7A7A0001, 0x34F20100, + 0x08540001, 0x35F20100, 0x806E0001, 0x36F20100, + 0x09670001, 0x37F20100, 0x08670001, 0x38F20100, + 0x33750001, 0x39F20100, 0x72520001, 0x3AF20100, + 0xB6550001, 0x3BF20100, 0x4D910001, 0x40F20100, + 0x550B0003, 0x41F20100, 0x580B0003, 0x42F20100, + 0x5B0B0003, 0x43F20100, 0x5E0B0003, 0x44F20100, + 0x610B0003, 0x45F20100, 0x640B0003, 0x46F20100, + 0x670B0003, 0x47F20100, 0x6A0B0003, 0x48F20100, + 0x6D0B0003, 0x50F20100, 0x975F0001, 0x51F20100, + 0xEF530001, 0xF0FB0100, 0x30000001, 0xF1FB0100, + 0x31000001, 0xF2FB0100, 0x32000001, 0xF3FB0100, + 0x33000001, 0xF4FB0100, 0x34000001, 0xF5FB0100, + 0x35000001, 0xF6FB0100, 0x36000001, 0xF7FB0100, + 0x37000001, 0xF8FB0100, 0x38000001, 0xF9FB0100, + 0x39000001, 0x20000000, 0x08030000, 0x20000000, + 0x04030000, 0x20000000, 0x01030000, 0x20000000, + 0x27030000, 0x31000000, 0x44200000, 0x34000000, + 0x31000000, 0x44200000, 0x32000000, 0x33000000, + 0x44200000, 0x34000000, 0x49000000, 0x4A000000, + 0x69000000, 0x6A000000, 0x4C000000, 0xB7000000, + 0x6C000000, 0xB7000000, 0xBC020000, 0x6E000000, + 0x44000000, 0x7D010000, 0x44000000, 0x7E010000, + 0x64000000, 0x7E010000, 0x4C000000, 0x4A000000, + 0x4C000000, 0x6A000000, 0x6C000000, 0x6A000000, + 0x4E000000, 0x4A000000, 0x4E000000, 0x6A000000, + 0x6E000000, 0x6A000000, 0x44000000, 0x5A000000, + 0x44000000, 0x7A000000, 0x64000000, 0x7A000000, + 0x20000000, 0x06030000, 0x20000000, 0x07030000, + 0x20000000, 0x0A030000, 0x20000000, 0x28030000, + 0x20000000, 0x03030000, 0x20000000, 0x0B030000, + 0x20000000, 0x45030000, 0x20000000, 0x01030000, + 0x65050000, 0x82050000, 0x27060000, 0x74060000, + 0x48060000, 0x74060000, 0xC7060000, 0x74060000, + 0x4A060000, 0x74060000, 0x4D0E0000, 0x320E0000, + 0xCD0E0000, 0xB20E0000, 0xAB0E0000, 0x990E0000, + 0xAB0E0000, 0xA10E0000, 0xB20F0000, 0x810F0000, + 0xB30F0000, 0x810F0000, 0x61000000, 0xBE020000, + 0x20000000, 0x13030000, 0x20000000, 0x13030000, + 0x20000000, 0x42030000, 0x20000000, 0x14030000, + 0x20000000, 0x33030000, 0x2E000000, 0x2E000000, + 0x2E000000, 0x2E000000, 0x2E000000, 0x32200000, + 0x32200000, 0x32200000, 0x32200000, 0x32200000, + 0x35200000, 0x35200000, 0x35200000, 0x35200000, + 0x35200000, 0x21000000, 0x21000000, 0x20000000, + 0x05030000, 0x3F000000, 0x3F000000, 0x3F000000, + 0x21000000, 0x21000000, 0x3F000000, 0x32200000, + 0x32200000, 0x32200000, 0x32200000, 0x52000000, + 0x73000000, 0x61000000, 0x2F000000, 0x63000000, + 0x61000000, 0x2F000000, 0x73000000, 0xB0000000, + 0x43000000, 0x63000000, 0x2F000000, 0x6F000000, + 0x63000000, 0x2F000000, 0x75000000, 0xB0000000, + 0x46000000, 0x4E000000, 0x6F000000, 0x53000000, + 0x4D000000, 0x54000000, 0x45000000, 0x4C000000, + 0x54000000, 0x4D000000, 0x46000000, 0x41000000, + 0x58000000, 0x31000000, 0x44200000, 0x37000000, + 0x31000000, 0x44200000, 0x39000000, 0x31000000, + 0x44200000, 0x31000000, 0x30000000, 0x31000000, + 0x44200000, 0x33000000, 0x32000000, 0x44200000, + 0x33000000, 0x31000000, 0x44200000, 0x35000000, + 0x32000000, 0x44200000, 0x35000000, 0x33000000, + 0x44200000, 0x35000000, 0x34000000, 0x44200000, + 0x35000000, 0x31000000, 0x44200000, 0x36000000, + 0x35000000, 0x44200000, 0x36000000, 0x31000000, + 0x44200000, 0x38000000, 0x33000000, 0x44200000, + 0x38000000, 0x35000000, 0x44200000, 0x38000000, + 0x37000000, 0x44200000, 0x38000000, 0x31000000, + 0x44200000, 0x49000000, 0x49000000, 0x49000000, + 0x49000000, 0x49000000, 0x49000000, 0x56000000, + 0x56000000, 0x49000000, 0x56000000, 0x49000000, + 0x49000000, 0x56000000, 0x49000000, 0x49000000, + 0x49000000, 0x49000000, 0x58000000, 0x58000000, + 0x49000000, 0x58000000, 0x49000000, 0x49000000, + 0x69000000, 0x69000000, 0x69000000, 0x69000000, + 0x69000000, 0x69000000, 0x76000000, 0x76000000, + 0x69000000, 0x76000000, 0x69000000, 0x69000000, + 0x76000000, 0x69000000, 0x69000000, 0x69000000, + 0x69000000, 0x78000000, 0x78000000, 0x69000000, + 0x78000000, 0x69000000, 0x69000000, 0x30000000, + 0x44200000, 0x33000000, 0x2B220000, 0x2B220000, + 0x2B220000, 0x2B220000, 0x2B220000, 0x2E220000, + 0x2E220000, 0x2E220000, 0x2E220000, 0x2E220000, + 0x31000000, 0x30000000, 0x31000000, 0x31000000, + 0x31000000, 0x32000000, 0x31000000, 0x33000000, + 0x31000000, 0x34000000, 0x31000000, 0x35000000, + 0x31000000, 0x36000000, 0x31000000, 0x37000000, + 0x31000000, 0x38000000, 0x31000000, 0x39000000, + 0x32000000, 0x30000000, 0x28000000, 0x31000000, + 0x29000000, 0x28000000, 0x32000000, 0x29000000, + 0x28000000, 0x33000000, 0x29000000, 0x28000000, + 0x34000000, 0x29000000, 0x28000000, 0x35000000, + 0x29000000, 0x28000000, 0x36000000, 0x29000000, + 0x28000000, 0x37000000, 0x29000000, 0x28000000, + 0x38000000, 0x29000000, 0x28000000, 0x39000000, + 0x29000000, 0x28000000, 0x31000000, 0x30000000, + 0x29000000, 0x28000000, 0x31000000, 0x31000000, + 0x29000000, 0x28000000, 0x31000000, 0x32000000, + 0x29000000, 0x28000000, 0x31000000, 0x33000000, + 0x29000000, 0x28000000, 0x31000000, 0x34000000, + 0x29000000, 0x28000000, 0x31000000, 0x35000000, + 0x29000000, 0x28000000, 0x31000000, 0x36000000, + 0x29000000, 0x28000000, 0x31000000, 0x37000000, + 0x29000000, 0x28000000, 0x31000000, 0x38000000, + 0x29000000, 0x28000000, 0x31000000, 0x39000000, + 0x29000000, 0x28000000, 0x32000000, 0x30000000, + 0x29000000, 0x31000000, 0x2E000000, 0x32000000, + 0x2E000000, 0x33000000, 0x2E000000, 0x34000000, + 0x2E000000, 0x35000000, 0x2E000000, 0x36000000, + 0x2E000000, 0x37000000, 0x2E000000, 0x38000000, + 0x2E000000, 0x39000000, 0x2E000000, 0x31000000, + 0x30000000, 0x2E000000, 0x31000000, 0x31000000, + 0x2E000000, 0x31000000, 0x32000000, 0x2E000000, + 0x31000000, 0x33000000, 0x2E000000, 0x31000000, + 0x34000000, 0x2E000000, 0x31000000, 0x35000000, + 0x2E000000, 0x31000000, 0x36000000, 0x2E000000, + 0x31000000, 0x37000000, 0x2E000000, 0x31000000, + 0x38000000, 0x2E000000, 0x31000000, 0x39000000, + 0x2E000000, 0x32000000, 0x30000000, 0x2E000000, + 0x28000000, 0x61000000, 0x29000000, 0x28000000, + 0x62000000, 0x29000000, 0x28000000, 0x63000000, + 0x29000000, 0x28000000, 0x64000000, 0x29000000, + 0x28000000, 0x65000000, 0x29000000, 0x28000000, + 0x66000000, 0x29000000, 0x28000000, 0x67000000, + 0x29000000, 0x28000000, 0x68000000, 0x29000000, + 0x28000000, 0x69000000, 0x29000000, 0x28000000, + 0x6A000000, 0x29000000, 0x28000000, 0x6B000000, + 0x29000000, 0x28000000, 0x6C000000, 0x29000000, + 0x28000000, 0x6D000000, 0x29000000, 0x28000000, + 0x6E000000, 0x29000000, 0x28000000, 0x6F000000, + 0x29000000, 0x28000000, 0x70000000, 0x29000000, + 0x28000000, 0x71000000, 0x29000000, 0x28000000, + 0x72000000, 0x29000000, 0x28000000, 0x73000000, + 0x29000000, 0x28000000, 0x74000000, 0x29000000, + 0x28000000, 0x75000000, 0x29000000, 0x28000000, + 0x76000000, 0x29000000, 0x28000000, 0x77000000, + 0x29000000, 0x28000000, 0x78000000, 0x29000000, + 0x28000000, 0x79000000, 0x29000000, 0x28000000, + 0x7A000000, 0x29000000, 0x2B220000, 0x2B220000, + 0x2B220000, 0x2B220000, 0x3A000000, 0x3A000000, + 0x3D000000, 0x3D000000, 0x3D000000, 0x3D000000, + 0x3D000000, 0x3D000000, 0x20000000, 0x99300000, + 0x20000000, 0x9A300000, 0x88300000, 0x8A300000, + 0xB3300000, 0xC8300000, 0x28000000, 0x00110000, + 0x29000000, 0x28000000, 0x02110000, 0x29000000, + 0x28000000, 0x03110000, 0x29000000, 0x28000000, + 0x05110000, 0x29000000, 0x28000000, 0x06110000, + 0x29000000, 0x28000000, 0x07110000, 0x29000000, + 0x28000000, 0x09110000, 0x29000000, 0x28000000, + 0x0B110000, 0x29000000, 0x28000000, 0x0C110000, + 0x29000000, 0x28000000, 0x0E110000, 0x29000000, + 0x28000000, 0x0F110000, 0x29000000, 0x28000000, + 0x10110000, 0x29000000, 0x28000000, 0x11110000, + 0x29000000, 0x28000000, 0x12110000, 0x29000000, + 0x28000000, 0x00110000, 0x61110000, 0x29000000, + 0x28000000, 0x02110000, 0x61110000, 0x29000000, + 0x28000000, 0x03110000, 0x61110000, 0x29000000, + 0x28000000, 0x05110000, 0x61110000, 0x29000000, + 0x28000000, 0x06110000, 0x61110000, 0x29000000, + 0x28000000, 0x07110000, 0x61110000, 0x29000000, + 0x28000000, 0x09110000, 0x61110000, 0x29000000, + 0x28000000, 0x0B110000, 0x61110000, 0x29000000, + 0x28000000, 0x0C110000, 0x61110000, 0x29000000, + 0x28000000, 0x0E110000, 0x61110000, 0x29000000, + 0x28000000, 0x0F110000, 0x61110000, 0x29000000, + 0x28000000, 0x10110000, 0x61110000, 0x29000000, + 0x28000000, 0x11110000, 0x61110000, 0x29000000, + 0x28000000, 0x12110000, 0x61110000, 0x29000000, + 0x28000000, 0x0C110000, 0x6E110000, 0x29000000, + 0x28000000, 0x0B110000, 0x69110000, 0x0C110000, + 0x65110000, 0xAB110000, 0x29000000, 0x28000000, + 0x0B110000, 0x69110000, 0x12110000, 0x6E110000, + 0x29000000, 0x28000000, 0x004E0000, 0x29000000, + 0x28000000, 0x8C4E0000, 0x29000000, 0x28000000, + 0x094E0000, 0x29000000, 0x28000000, 0xDB560000, + 0x29000000, 0x28000000, 0x944E0000, 0x29000000, + 0x28000000, 0x6D510000, 0x29000000, 0x28000000, + 0x034E0000, 0x29000000, 0x28000000, 0x6B510000, + 0x29000000, 0x28000000, 0x5D4E0000, 0x29000000, + 0x28000000, 0x41530000, 0x29000000, 0x28000000, + 0x08670000, 0x29000000, 0x28000000, 0x6B700000, + 0x29000000, 0x28000000, 0x346C0000, 0x29000000, + 0x28000000, 0x28670000, 0x29000000, 0x28000000, + 0xD1910000, 0x29000000, 0x28000000, 0x1F570000, + 0x29000000, 0x28000000, 0xE5650000, 0x29000000, + 0x28000000, 0x2A680000, 0x29000000, 0x28000000, + 0x09670000, 0x29000000, 0x28000000, 0x3E790000, + 0x29000000, 0x28000000, 0x0D540000, 0x29000000, + 0x28000000, 0x79720000, 0x29000000, 0x28000000, + 0xA18C0000, 0x29000000, 0x28000000, 0x5D790000, + 0x29000000, 0x28000000, 0xB4520000, 0x29000000, + 0x28000000, 0xE34E0000, 0x29000000, 0x28000000, + 0x7C540000, 0x29000000, 0x28000000, 0x665B0000, + 0x29000000, 0x28000000, 0xE3760000, 0x29000000, + 0x28000000, 0x014F0000, 0x29000000, 0x28000000, + 0xC78C0000, 0x29000000, 0x28000000, 0x54530000, + 0x29000000, 0x28000000, 0x6D790000, 0x29000000, + 0x28000000, 0x114F0000, 0x29000000, 0x28000000, + 0xEA810000, 0x29000000, 0x28000000, 0xF3810000, + 0x29000000, 0x50000000, 0x54000000, 0x45000000, + 0x32000000, 0x31000000, 0x32000000, 0x32000000, + 0x32000000, 0x33000000, 0x32000000, 0x34000000, + 0x32000000, 0x35000000, 0x32000000, 0x36000000, + 0x32000000, 0x37000000, 0x32000000, 0x38000000, + 0x32000000, 0x39000000, 0x33000000, 0x30000000, + 0x33000000, 0x31000000, 0x33000000, 0x32000000, + 0x33000000, 0x33000000, 0x33000000, 0x34000000, + 0x33000000, 0x35000000, 0x00110000, 0x61110000, + 0x02110000, 0x61110000, 0x03110000, 0x61110000, + 0x05110000, 0x61110000, 0x06110000, 0x61110000, + 0x07110000, 0x61110000, 0x09110000, 0x61110000, + 0x0B110000, 0x61110000, 0x0C110000, 0x61110000, + 0x0E110000, 0x61110000, 0x0F110000, 0x61110000, + 0x10110000, 0x61110000, 0x11110000, 0x61110000, + 0x12110000, 0x61110000, 0x0E110000, 0x61110000, + 0xB7110000, 0x00110000, 0x69110000, 0x0C110000, + 0x6E110000, 0x0B110000, 0x74110000, 0x0B110000, + 0x6E110000, 0x33000000, 0x36000000, 0x33000000, + 0x37000000, 0x33000000, 0x38000000, 0x33000000, + 0x39000000, 0x34000000, 0x30000000, 0x34000000, + 0x31000000, 0x34000000, 0x32000000, 0x34000000, + 0x33000000, 0x34000000, 0x34000000, 0x34000000, + 0x35000000, 0x34000000, 0x36000000, 0x34000000, + 0x37000000, 0x34000000, 0x38000000, 0x34000000, + 0x39000000, 0x35000000, 0x30000000, 0x31000000, + 0x08670000, 0x32000000, 0x08670000, 0x33000000, + 0x08670000, 0x34000000, 0x08670000, 0x35000000, + 0x08670000, 0x36000000, 0x08670000, 0x37000000, + 0x08670000, 0x38000000, 0x08670000, 0x39000000, + 0x08670000, 0x31000000, 0x30000000, 0x08670000, + 0x31000000, 0x31000000, 0x08670000, 0x31000000, + 0x32000000, 0x08670000, 0x48000000, 0x67000000, + 0x65000000, 0x72000000, 0x67000000, 0x65000000, + 0x56000000, 0x4C000000, 0x54000000, 0x44000000, + 0xE44E0000, 0x8C540000, 0xA2300000, 0xD1300000, + 0xFC300000, 0xC8300000, 0xA2300000, 0xEB300000, + 0xD5300000, 0xA1300000, 0xA2300000, 0xF3300000, + 0xDA300000, 0xA2300000, 0xA2300000, 0xFC300000, + 0xEB300000, 0xA4300000, 0xCB300000, 0xF3300000, + 0xB0300000, 0xA4300000, 0xF3300000, 0xC1300000, + 0xA6300000, 0xA9300000, 0xF3300000, 0xA8300000, + 0xB9300000, 0xAF300000, 0xFC300000, 0xC9300000, + 0xA8300000, 0xFC300000, 0xAB300000, 0xFC300000, + 0xAA300000, 0xF3300000, 0xB9300000, 0xAA300000, + 0xFC300000, 0xE0300000, 0xAB300000, 0xA4300000, + 0xEA300000, 0xAB300000, 0xE9300000, 0xC3300000, + 0xC8300000, 0xAB300000, 0xED300000, 0xEA300000, + 0xFC300000, 0xAC300000, 0xED300000, 0xF3300000, + 0xAC300000, 0xF3300000, 0xDE300000, 0xAE300000, + 0xAC300000, 0xAE300000, 0xCB300000, 0xFC300000, + 0xAD300000, 0xE5300000, 0xEA300000, 0xFC300000, + 0xAE300000, 0xEB300000, 0xC0300000, 0xFC300000, + 0xAD300000, 0xED300000, 0xAD300000, 0xED300000, + 0xB0300000, 0xE9300000, 0xE0300000, 0xAD300000, + 0xED300000, 0xE1300000, 0xFC300000, 0xC8300000, + 0xEB300000, 0xAD300000, 0xED300000, 0xEF300000, + 0xC3300000, 0xC8300000, 0xB0300000, 0xE9300000, + 0xE0300000, 0xB0300000, 0xE9300000, 0xE0300000, + 0xC8300000, 0xF3300000, 0xAF300000, 0xEB300000, + 0xBC300000, 0xA4300000, 0xED300000, 0xAF300000, + 0xED300000, 0xFC300000, 0xCD300000, 0xB1300000, + 0xFC300000, 0xB9300000, 0xB3300000, 0xEB300000, + 0xCA300000, 0xB3300000, 0xFC300000, 0xDD300000, + 0xB5300000, 0xA4300000, 0xAF300000, 0xEB300000, + 0xB5300000, 0xF3300000, 0xC1300000, 0xFC300000, + 0xE0300000, 0xB7300000, 0xEA300000, 0xF3300000, + 0xB0300000, 0xBB300000, 0xF3300000, 0xC1300000, + 0xBB300000, 0xF3300000, 0xC8300000, 0xC0300000, + 0xFC300000, 0xB9300000, 0xC7300000, 0xB7300000, + 0xC9300000, 0xEB300000, 0xC8300000, 0xF3300000, + 0xCA300000, 0xCE300000, 0xCE300000, 0xC3300000, + 0xC8300000, 0xCF300000, 0xA4300000, 0xC4300000, + 0xD1300000, 0xFC300000, 0xBB300000, 0xF3300000, + 0xC8300000, 0xD1300000, 0xFC300000, 0xC4300000, + 0xD0300000, 0xFC300000, 0xEC300000, 0xEB300000, + 0xD4300000, 0xA2300000, 0xB9300000, 0xC8300000, + 0xEB300000, 0xD4300000, 0xAF300000, 0xEB300000, + 0xD4300000, 0xB3300000, 0xD3300000, 0xEB300000, + 0xD5300000, 0xA1300000, 0xE9300000, 0xC3300000, + 0xC9300000, 0xD5300000, 0xA3300000, 0xFC300000, + 0xC8300000, 0xD6300000, 0xC3300000, 0xB7300000, + 0xA7300000, 0xEB300000, 0xD5300000, 0xE9300000, + 0xF3300000, 0xD8300000, 0xAF300000, 0xBF300000, + 0xFC300000, 0xEB300000, 0xDA300000, 0xBD300000, + 0xDA300000, 0xCB300000, 0xD2300000, 0xD8300000, + 0xEB300000, 0xC4300000, 0xDA300000, 0xF3300000, + 0xB9300000, 0xDA300000, 0xFC300000, 0xB8300000, + 0xD9300000, 0xFC300000, 0xBF300000, 0xDD300000, + 0xA4300000, 0xF3300000, 0xC8300000, 0xDC300000, + 0xEB300000, 0xC8300000, 0xDB300000, 0xF3300000, + 0xDD300000, 0xF3300000, 0xC9300000, 0xDB300000, + 0xFC300000, 0xEB300000, 0xDB300000, 0xFC300000, + 0xF3300000, 0xDE300000, 0xA4300000, 0xAF300000, + 0xED300000, 0xDE300000, 0xA4300000, 0xEB300000, + 0xDE300000, 0xC3300000, 0xCF300000, 0xDE300000, + 0xEB300000, 0xAF300000, 0xDE300000, 0xF3300000, + 0xB7300000, 0xE7300000, 0xF3300000, 0xDF300000, + 0xAF300000, 0xED300000, 0xF3300000, 0xDF300000, + 0xEA300000, 0xDF300000, 0xEA300000, 0xD0300000, + 0xFC300000, 0xEB300000, 0xE1300000, 0xAC300000, + 0xE1300000, 0xAC300000, 0xC8300000, 0xF3300000, + 0xE1300000, 0xFC300000, 0xC8300000, 0xEB300000, + 0xE4300000, 0xFC300000, 0xC9300000, 0xE4300000, + 0xFC300000, 0xEB300000, 0xE6300000, 0xA2300000, + 0xF3300000, 0xEA300000, 0xC3300000, 0xC8300000, + 0xEB300000, 0xEA300000, 0xE9300000, 0xEB300000, + 0xD4300000, 0xFC300000, 0xEB300000, 0xFC300000, + 0xD6300000, 0xEB300000, 0xEC300000, 0xE0300000, + 0xEC300000, 0xF3300000, 0xC8300000, 0xB2300000, + 0xF3300000, 0xEF300000, 0xC3300000, 0xC8300000, + 0x30000000, 0xB9700000, 0x31000000, 0xB9700000, + 0x32000000, 0xB9700000, 0x33000000, 0xB9700000, + 0x34000000, 0xB9700000, 0x35000000, 0xB9700000, + 0x36000000, 0xB9700000, 0x37000000, 0xB9700000, + 0x38000000, 0xB9700000, 0x39000000, 0xB9700000, + 0x31000000, 0x30000000, 0xB9700000, 0x31000000, + 0x31000000, 0xB9700000, 0x31000000, 0x32000000, + 0xB9700000, 0x31000000, 0x33000000, 0xB9700000, + 0x31000000, 0x34000000, 0xB9700000, 0x31000000, + 0x35000000, 0xB9700000, 0x31000000, 0x36000000, + 0xB9700000, 0x31000000, 0x37000000, 0xB9700000, + 0x31000000, 0x38000000, 0xB9700000, 0x31000000, + 0x39000000, 0xB9700000, 0x32000000, 0x30000000, + 0xB9700000, 0x32000000, 0x31000000, 0xB9700000, + 0x32000000, 0x32000000, 0xB9700000, 0x32000000, + 0x33000000, 0xB9700000, 0x32000000, 0x34000000, + 0xB9700000, 0x68000000, 0x50000000, 0x61000000, + 0x64000000, 0x61000000, 0x41000000, 0x55000000, + 0x62000000, 0x61000000, 0x72000000, 0x6F000000, + 0x56000000, 0x70000000, 0x63000000, 0x64000000, + 0x6D000000, 0x64000000, 0x6D000000, 0xB2000000, + 0x64000000, 0x6D000000, 0xB3000000, 0x49000000, + 0x55000000, 0x735E0000, 0x10620000, 0x2D660000, + 0x8C540000, 0x27590000, 0x636B0000, 0x0E660000, + 0xBB6C0000, 0x2A680000, 0x0F5F0000, 0x1A4F0000, + 0x3E790000, 0x70000000, 0x41000000, 0x6E000000, + 0x41000000, 0xBC030000, 0x41000000, 0x6D000000, + 0x41000000, 0x6B000000, 0x41000000, 0x4B000000, + 0x42000000, 0x4D000000, 0x42000000, 0x47000000, + 0x42000000, 0x63000000, 0x61000000, 0x6C000000, + 0x6B000000, 0x63000000, 0x61000000, 0x6C000000, + 0x70000000, 0x46000000, 0x6E000000, 0x46000000, + 0xBC030000, 0x46000000, 0xBC030000, 0x67000000, + 0x6D000000, 0x67000000, 0x6B000000, 0x67000000, + 0x48000000, 0x7A000000, 0x6B000000, 0x48000000, + 0x7A000000, 0x4D000000, 0x48000000, 0x7A000000, + 0x47000000, 0x48000000, 0x7A000000, 0x54000000, + 0x48000000, 0x7A000000, 0xBC030000, 0x13210000, + 0x6D000000, 0x13210000, 0x64000000, 0x13210000, + 0x6B000000, 0x13210000, 0x66000000, 0x6D000000, + 0x6E000000, 0x6D000000, 0xBC030000, 0x6D000000, + 0x6D000000, 0x6D000000, 0x63000000, 0x6D000000, + 0x6B000000, 0x6D000000, 0x6D000000, 0x6D000000, + 0xB2000000, 0x63000000, 0x6D000000, 0xB2000000, + 0x6D000000, 0xB2000000, 0x6B000000, 0x6D000000, + 0xB2000000, 0x6D000000, 0x6D000000, 0xB3000000, + 0x63000000, 0x6D000000, 0xB3000000, 0x6D000000, + 0xB3000000, 0x6B000000, 0x6D000000, 0xB3000000, + 0x6D000000, 0x15220000, 0x73000000, 0x6D000000, + 0x15220000, 0x73000000, 0xB2000000, 0x50000000, + 0x61000000, 0x6B000000, 0x50000000, 0x61000000, + 0x4D000000, 0x50000000, 0x61000000, 0x47000000, + 0x50000000, 0x61000000, 0x72000000, 0x61000000, + 0x64000000, 0x72000000, 0x61000000, 0x64000000, + 0x15220000, 0x73000000, 0x72000000, 0x61000000, + 0x64000000, 0x15220000, 0x73000000, 0xB2000000, + 0x70000000, 0x73000000, 0x6E000000, 0x73000000, + 0xBC030000, 0x73000000, 0x6D000000, 0x73000000, + 0x70000000, 0x56000000, 0x6E000000, 0x56000000, + 0xBC030000, 0x56000000, 0x6D000000, 0x56000000, + 0x6B000000, 0x56000000, 0x4D000000, 0x56000000, + 0x70000000, 0x57000000, 0x6E000000, 0x57000000, + 0xBC030000, 0x57000000, 0x6D000000, 0x57000000, + 0x6B000000, 0x57000000, 0x4D000000, 0x57000000, + 0x6B000000, 0xA9030000, 0x4D000000, 0xA9030000, + 0x61000000, 0x2E000000, 0x6D000000, 0x2E000000, + 0x42000000, 0x71000000, 0x63000000, 0x63000000, + 0x63000000, 0x64000000, 0x43000000, 0x15220000, + 0x6B000000, 0x67000000, 0x43000000, 0x6F000000, + 0x2E000000, 0x64000000, 0x42000000, 0x47000000, + 0x79000000, 0x68000000, 0x61000000, 0x48000000, + 0x50000000, 0x69000000, 0x6E000000, 0x4B000000, + 0x4B000000, 0x4B000000, 0x4D000000, 0x6B000000, + 0x74000000, 0x6C000000, 0x6D000000, 0x6C000000, + 0x6E000000, 0x6C000000, 0x6F000000, 0x67000000, + 0x6C000000, 0x78000000, 0x6D000000, 0x62000000, + 0x6D000000, 0x69000000, 0x6C000000, 0x6D000000, + 0x6F000000, 0x6C000000, 0x50000000, 0x48000000, + 0x70000000, 0x2E000000, 0x6D000000, 0x2E000000, + 0x50000000, 0x50000000, 0x4D000000, 0x50000000, + 0x52000000, 0x73000000, 0x72000000, 0x53000000, + 0x76000000, 0x57000000, 0x62000000, 0x56000000, + 0x15220000, 0x6D000000, 0x41000000, 0x15220000, + 0x6D000000, 0x31000000, 0xE5650000, 0x32000000, + 0xE5650000, 0x33000000, 0xE5650000, 0x34000000, + 0xE5650000, 0x35000000, 0xE5650000, 0x36000000, + 0xE5650000, 0x37000000, 0xE5650000, 0x38000000, + 0xE5650000, 0x39000000, 0xE5650000, 0x31000000, + 0x30000000, 0xE5650000, 0x31000000, 0x31000000, + 0xE5650000, 0x31000000, 0x32000000, 0xE5650000, + 0x31000000, 0x33000000, 0xE5650000, 0x31000000, + 0x34000000, 0xE5650000, 0x31000000, 0x35000000, + 0xE5650000, 0x31000000, 0x36000000, 0xE5650000, + 0x31000000, 0x37000000, 0xE5650000, 0x31000000, + 0x38000000, 0xE5650000, 0x31000000, 0x39000000, + 0xE5650000, 0x32000000, 0x30000000, 0xE5650000, + 0x32000000, 0x31000000, 0xE5650000, 0x32000000, + 0x32000000, 0xE5650000, 0x32000000, 0x33000000, + 0xE5650000, 0x32000000, 0x34000000, 0xE5650000, + 0x32000000, 0x35000000, 0xE5650000, 0x32000000, + 0x36000000, 0xE5650000, 0x32000000, 0x37000000, + 0xE5650000, 0x32000000, 0x38000000, 0xE5650000, + 0x32000000, 0x39000000, 0xE5650000, 0x33000000, + 0x30000000, 0xE5650000, 0x33000000, 0x31000000, + 0xE5650000, 0x67000000, 0x61000000, 0x6C000000, + 0x66000000, 0x66000000, 0x66000000, 0x69000000, + 0x66000000, 0x6C000000, 0x66000000, 0x66000000, + 0x69000000, 0x66000000, 0x66000000, 0x6C000000, + 0x7F010000, 0x74000000, 0x73000000, 0x74000000, + 0x74050000, 0x76050000, 0x74050000, 0x65050000, + 0x74050000, 0x6B050000, 0x7E050000, 0x76050000, + 0x74050000, 0x6D050000, 0xD0050000, 0xDC050000, + 0x26060000, 0x27060000, 0x26060000, 0x27060000, + 0x26060000, 0xD5060000, 0x26060000, 0xD5060000, + 0x26060000, 0x48060000, 0x26060000, 0x48060000, + 0x26060000, 0xC7060000, 0x26060000, 0xC7060000, + 0x26060000, 0xC6060000, 0x26060000, 0xC6060000, + 0x26060000, 0xC8060000, 0x26060000, 0xC8060000, + 0x26060000, 0xD0060000, 0x26060000, 0xD0060000, + 0x26060000, 0xD0060000, 0x26060000, 0x49060000, + 0x26060000, 0x49060000, 0x26060000, 0x49060000, + 0x26060000, 0x2C060000, 0x26060000, 0x2D060000, + 0x26060000, 0x45060000, 0x26060000, 0x49060000, + 0x26060000, 0x4A060000, 0x28060000, 0x2C060000, + 0x28060000, 0x2D060000, 0x28060000, 0x2E060000, + 0x28060000, 0x45060000, 0x28060000, 0x49060000, + 0x28060000, 0x4A060000, 0x2A060000, 0x2C060000, + 0x2A060000, 0x2D060000, 0x2A060000, 0x2E060000, + 0x2A060000, 0x45060000, 0x2A060000, 0x49060000, + 0x2A060000, 0x4A060000, 0x2B060000, 0x2C060000, + 0x2B060000, 0x45060000, 0x2B060000, 0x49060000, + 0x2B060000, 0x4A060000, 0x2C060000, 0x2D060000, + 0x2C060000, 0x45060000, 0x2D060000, 0x2C060000, + 0x2D060000, 0x45060000, 0x2E060000, 0x2C060000, + 0x2E060000, 0x2D060000, 0x2E060000, 0x45060000, + 0x33060000, 0x2C060000, 0x33060000, 0x2D060000, + 0x33060000, 0x2E060000, 0x33060000, 0x45060000, + 0x35060000, 0x2D060000, 0x35060000, 0x45060000, + 0x36060000, 0x2C060000, 0x36060000, 0x2D060000, + 0x36060000, 0x2E060000, 0x36060000, 0x45060000, + 0x37060000, 0x2D060000, 0x37060000, 0x45060000, + 0x38060000, 0x45060000, 0x39060000, 0x2C060000, + 0x39060000, 0x45060000, 0x3A060000, 0x2C060000, + 0x3A060000, 0x45060000, 0x41060000, 0x2C060000, + 0x41060000, 0x2D060000, 0x41060000, 0x2E060000, + 0x41060000, 0x45060000, 0x41060000, 0x49060000, + 0x41060000, 0x4A060000, 0x42060000, 0x2D060000, + 0x42060000, 0x45060000, 0x42060000, 0x49060000, + 0x42060000, 0x4A060000, 0x43060000, 0x27060000, + 0x43060000, 0x2C060000, 0x43060000, 0x2D060000, + 0x43060000, 0x2E060000, 0x43060000, 0x44060000, + 0x43060000, 0x45060000, 0x43060000, 0x49060000, + 0x43060000, 0x4A060000, 0x44060000, 0x2C060000, + 0x44060000, 0x2D060000, 0x44060000, 0x2E060000, + 0x44060000, 0x45060000, 0x44060000, 0x49060000, + 0x44060000, 0x4A060000, 0x45060000, 0x2C060000, + 0x45060000, 0x2D060000, 0x45060000, 0x2E060000, + 0x45060000, 0x45060000, 0x45060000, 0x49060000, + 0x45060000, 0x4A060000, 0x46060000, 0x2C060000, + 0x46060000, 0x2D060000, 0x46060000, 0x2E060000, + 0x46060000, 0x45060000, 0x46060000, 0x49060000, + 0x46060000, 0x4A060000, 0x47060000, 0x2C060000, + 0x47060000, 0x45060000, 0x47060000, 0x49060000, + 0x47060000, 0x4A060000, 0x4A060000, 0x2C060000, + 0x4A060000, 0x2D060000, 0x4A060000, 0x2E060000, + 0x4A060000, 0x45060000, 0x4A060000, 0x49060000, + 0x4A060000, 0x4A060000, 0x30060000, 0x70060000, + 0x31060000, 0x70060000, 0x49060000, 0x70060000, + 0x20000000, 0x4C060000, 0x51060000, 0x20000000, + 0x4D060000, 0x51060000, 0x20000000, 0x4E060000, + 0x51060000, 0x20000000, 0x4F060000, 0x51060000, + 0x20000000, 0x50060000, 0x51060000, 0x20000000, + 0x51060000, 0x70060000, 0x26060000, 0x31060000, + 0x26060000, 0x32060000, 0x26060000, 0x45060000, + 0x26060000, 0x46060000, 0x26060000, 0x49060000, + 0x26060000, 0x4A060000, 0x28060000, 0x31060000, + 0x28060000, 0x32060000, 0x28060000, 0x45060000, + 0x28060000, 0x46060000, 0x28060000, 0x49060000, + 0x28060000, 0x4A060000, 0x2A060000, 0x31060000, + 0x2A060000, 0x32060000, 0x2A060000, 0x45060000, + 0x2A060000, 0x46060000, 0x2A060000, 0x49060000, + 0x2A060000, 0x4A060000, 0x2B060000, 0x31060000, + 0x2B060000, 0x32060000, 0x2B060000, 0x45060000, + 0x2B060000, 0x46060000, 0x2B060000, 0x49060000, + 0x2B060000, 0x4A060000, 0x41060000, 0x49060000, + 0x41060000, 0x4A060000, 0x42060000, 0x49060000, + 0x42060000, 0x4A060000, 0x43060000, 0x27060000, + 0x43060000, 0x44060000, 0x43060000, 0x45060000, + 0x43060000, 0x49060000, 0x43060000, 0x4A060000, + 0x44060000, 0x45060000, 0x44060000, 0x49060000, + 0x44060000, 0x4A060000, 0x45060000, 0x27060000, + 0x45060000, 0x45060000, 0x46060000, 0x31060000, + 0x46060000, 0x32060000, 0x46060000, 0x45060000, + 0x46060000, 0x46060000, 0x46060000, 0x49060000, + 0x46060000, 0x4A060000, 0x49060000, 0x70060000, + 0x4A060000, 0x31060000, 0x4A060000, 0x32060000, + 0x4A060000, 0x45060000, 0x4A060000, 0x46060000, + 0x4A060000, 0x49060000, 0x4A060000, 0x4A060000, + 0x26060000, 0x2C060000, 0x26060000, 0x2D060000, + 0x26060000, 0x2E060000, 0x26060000, 0x45060000, + 0x26060000, 0x47060000, 0x28060000, 0x2C060000, + 0x28060000, 0x2D060000, 0x28060000, 0x2E060000, + 0x28060000, 0x45060000, 0x28060000, 0x47060000, + 0x2A060000, 0x2C060000, 0x2A060000, 0x2D060000, + 0x2A060000, 0x2E060000, 0x2A060000, 0x45060000, + 0x2A060000, 0x47060000, 0x2B060000, 0x45060000, + 0x2C060000, 0x2D060000, 0x2C060000, 0x45060000, + 0x2D060000, 0x2C060000, 0x2D060000, 0x45060000, + 0x2E060000, 0x2C060000, 0x2E060000, 0x45060000, + 0x33060000, 0x2C060000, 0x33060000, 0x2D060000, + 0x33060000, 0x2E060000, 0x33060000, 0x45060000, + 0x35060000, 0x2D060000, 0x35060000, 0x2E060000, + 0x35060000, 0x45060000, 0x36060000, 0x2C060000, + 0x36060000, 0x2D060000, 0x36060000, 0x2E060000, + 0x36060000, 0x45060000, 0x37060000, 0x2D060000, + 0x38060000, 0x45060000, 0x39060000, 0x2C060000, + 0x39060000, 0x45060000, 0x3A060000, 0x2C060000, + 0x3A060000, 0x45060000, 0x41060000, 0x2C060000, + 0x41060000, 0x2D060000, 0x41060000, 0x2E060000, + 0x41060000, 0x45060000, 0x42060000, 0x2D060000, + 0x42060000, 0x45060000, 0x43060000, 0x2C060000, + 0x43060000, 0x2D060000, 0x43060000, 0x2E060000, + 0x43060000, 0x44060000, 0x43060000, 0x45060000, + 0x44060000, 0x2C060000, 0x44060000, 0x2D060000, + 0x44060000, 0x2E060000, 0x44060000, 0x45060000, + 0x44060000, 0x47060000, 0x45060000, 0x2C060000, + 0x45060000, 0x2D060000, 0x45060000, 0x2E060000, + 0x45060000, 0x45060000, 0x46060000, 0x2C060000, + 0x46060000, 0x2D060000, 0x46060000, 0x2E060000, + 0x46060000, 0x45060000, 0x46060000, 0x47060000, + 0x47060000, 0x2C060000, 0x47060000, 0x45060000, + 0x47060000, 0x70060000, 0x4A060000, 0x2C060000, + 0x4A060000, 0x2D060000, 0x4A060000, 0x2E060000, + 0x4A060000, 0x45060000, 0x4A060000, 0x47060000, + 0x26060000, 0x45060000, 0x26060000, 0x47060000, + 0x28060000, 0x45060000, 0x28060000, 0x47060000, + 0x2A060000, 0x45060000, 0x2A060000, 0x47060000, + 0x2B060000, 0x45060000, 0x2B060000, 0x47060000, + 0x33060000, 0x45060000, 0x33060000, 0x47060000, + 0x34060000, 0x45060000, 0x34060000, 0x47060000, + 0x43060000, 0x44060000, 0x43060000, 0x45060000, + 0x44060000, 0x45060000, 0x46060000, 0x45060000, + 0x46060000, 0x47060000, 0x4A060000, 0x45060000, + 0x4A060000, 0x47060000, 0x40060000, 0x4E060000, + 0x51060000, 0x40060000, 0x4F060000, 0x51060000, + 0x40060000, 0x50060000, 0x51060000, 0x37060000, + 0x49060000, 0x37060000, 0x4A060000, 0x39060000, + 0x49060000, 0x39060000, 0x4A060000, 0x3A060000, + 0x49060000, 0x3A060000, 0x4A060000, 0x33060000, + 0x49060000, 0x33060000, 0x4A060000, 0x34060000, + 0x49060000, 0x34060000, 0x4A060000, 0x2D060000, + 0x49060000, 0x2D060000, 0x4A060000, 0x2C060000, + 0x49060000, 0x2C060000, 0x4A060000, 0x2E060000, + 0x49060000, 0x2E060000, 0x4A060000, 0x35060000, + 0x49060000, 0x35060000, 0x4A060000, 0x36060000, + 0x49060000, 0x36060000, 0x4A060000, 0x34060000, + 0x2C060000, 0x34060000, 0x2D060000, 0x34060000, + 0x2E060000, 0x34060000, 0x45060000, 0x34060000, + 0x31060000, 0x33060000, 0x31060000, 0x35060000, + 0x31060000, 0x36060000, 0x31060000, 0x37060000, + 0x49060000, 0x37060000, 0x4A060000, 0x39060000, + 0x49060000, 0x39060000, 0x4A060000, 0x3A060000, + 0x49060000, 0x3A060000, 0x4A060000, 0x33060000, + 0x49060000, 0x33060000, 0x4A060000, 0x34060000, + 0x49060000, 0x34060000, 0x4A060000, 0x2D060000, + 0x49060000, 0x2D060000, 0x4A060000, 0x2C060000, + 0x49060000, 0x2C060000, 0x4A060000, 0x2E060000, + 0x49060000, 0x2E060000, 0x4A060000, 0x35060000, + 0x49060000, 0x35060000, 0x4A060000, 0x36060000, + 0x49060000, 0x36060000, 0x4A060000, 0x34060000, + 0x2C060000, 0x34060000, 0x2D060000, 0x34060000, + 0x2E060000, 0x34060000, 0x45060000, 0x34060000, + 0x31060000, 0x33060000, 0x31060000, 0x35060000, + 0x31060000, 0x36060000, 0x31060000, 0x34060000, + 0x2C060000, 0x34060000, 0x2D060000, 0x34060000, + 0x2E060000, 0x34060000, 0x45060000, 0x33060000, + 0x47060000, 0x34060000, 0x47060000, 0x37060000, + 0x45060000, 0x33060000, 0x2C060000, 0x33060000, + 0x2D060000, 0x33060000, 0x2E060000, 0x34060000, + 0x2C060000, 0x34060000, 0x2D060000, 0x34060000, + 0x2E060000, 0x37060000, 0x45060000, 0x38060000, + 0x45060000, 0x27060000, 0x4B060000, 0x27060000, + 0x4B060000, 0x2A060000, 0x2C060000, 0x45060000, + 0x2A060000, 0x2D060000, 0x2C060000, 0x2A060000, + 0x2D060000, 0x2C060000, 0x2A060000, 0x2D060000, + 0x45060000, 0x2A060000, 0x2E060000, 0x45060000, + 0x2A060000, 0x45060000, 0x2C060000, 0x2A060000, + 0x45060000, 0x2D060000, 0x2A060000, 0x45060000, + 0x2E060000, 0x2C060000, 0x45060000, 0x2D060000, + 0x2C060000, 0x45060000, 0x2D060000, 0x2D060000, + 0x45060000, 0x4A060000, 0x2D060000, 0x45060000, + 0x49060000, 0x33060000, 0x2D060000, 0x2C060000, + 0x33060000, 0x2C060000, 0x2D060000, 0x33060000, + 0x2C060000, 0x49060000, 0x33060000, 0x45060000, + 0x2D060000, 0x33060000, 0x45060000, 0x2D060000, + 0x33060000, 0x45060000, 0x2C060000, 0x33060000, + 0x45060000, 0x45060000, 0x33060000, 0x45060000, + 0x45060000, 0x35060000, 0x2D060000, 0x2D060000, + 0x35060000, 0x2D060000, 0x2D060000, 0x35060000, + 0x45060000, 0x45060000, 0x34060000, 0x2D060000, + 0x45060000, 0x34060000, 0x2D060000, 0x45060000, + 0x34060000, 0x2C060000, 0x4A060000, 0x34060000, + 0x45060000, 0x2E060000, 0x34060000, 0x45060000, + 0x2E060000, 0x34060000, 0x45060000, 0x45060000, + 0x34060000, 0x45060000, 0x45060000, 0x36060000, + 0x2D060000, 0x49060000, 0x36060000, 0x2E060000, + 0x45060000, 0x36060000, 0x2E060000, 0x45060000, + 0x37060000, 0x45060000, 0x2D060000, 0x37060000, + 0x45060000, 0x2D060000, 0x37060000, 0x45060000, + 0x45060000, 0x37060000, 0x45060000, 0x4A060000, + 0x39060000, 0x2C060000, 0x45060000, 0x39060000, + 0x45060000, 0x45060000, 0x39060000, 0x45060000, + 0x45060000, 0x39060000, 0x45060000, 0x49060000, + 0x3A060000, 0x45060000, 0x45060000, 0x3A060000, + 0x45060000, 0x4A060000, 0x3A060000, 0x45060000, + 0x49060000, 0x41060000, 0x2E060000, 0x45060000, + 0x41060000, 0x2E060000, 0x45060000, 0x42060000, + 0x45060000, 0x2D060000, 0x42060000, 0x45060000, + 0x45060000, 0x44060000, 0x2D060000, 0x45060000, + 0x44060000, 0x2D060000, 0x4A060000, 0x44060000, + 0x2D060000, 0x49060000, 0x44060000, 0x2C060000, + 0x2C060000, 0x44060000, 0x2C060000, 0x2C060000, + 0x44060000, 0x2E060000, 0x45060000, 0x44060000, + 0x2E060000, 0x45060000, 0x44060000, 0x45060000, + 0x2D060000, 0x44060000, 0x45060000, 0x2D060000, + 0x45060000, 0x2D060000, 0x2C060000, 0x45060000, + 0x2D060000, 0x45060000, 0x45060000, 0x2D060000, + 0x4A060000, 0x45060000, 0x2C060000, 0x2D060000, + 0x45060000, 0x2C060000, 0x45060000, 0x45060000, + 0x2E060000, 0x2C060000, 0x45060000, 0x2E060000, + 0x45060000, 0x45060000, 0x2C060000, 0x2E060000, + 0x47060000, 0x45060000, 0x2C060000, 0x47060000, + 0x45060000, 0x45060000, 0x46060000, 0x2D060000, + 0x45060000, 0x46060000, 0x2D060000, 0x49060000, + 0x46060000, 0x2C060000, 0x45060000, 0x46060000, + 0x2C060000, 0x45060000, 0x46060000, 0x2C060000, + 0x49060000, 0x46060000, 0x45060000, 0x4A060000, + 0x46060000, 0x45060000, 0x49060000, 0x4A060000, + 0x45060000, 0x45060000, 0x4A060000, 0x45060000, + 0x45060000, 0x28060000, 0x2E060000, 0x4A060000, + 0x2A060000, 0x2C060000, 0x4A060000, 0x2A060000, + 0x2C060000, 0x49060000, 0x2A060000, 0x2E060000, + 0x4A060000, 0x2A060000, 0x2E060000, 0x49060000, + 0x2A060000, 0x45060000, 0x4A060000, 0x2A060000, + 0x45060000, 0x49060000, 0x2C060000, 0x45060000, + 0x4A060000, 0x2C060000, 0x2D060000, 0x49060000, + 0x2C060000, 0x45060000, 0x49060000, 0x33060000, + 0x2E060000, 0x49060000, 0x35060000, 0x2D060000, + 0x4A060000, 0x34060000, 0x2D060000, 0x4A060000, + 0x36060000, 0x2D060000, 0x4A060000, 0x44060000, + 0x2C060000, 0x4A060000, 0x44060000, 0x45060000, + 0x4A060000, 0x4A060000, 0x2D060000, 0x4A060000, + 0x4A060000, 0x2C060000, 0x4A060000, 0x4A060000, + 0x45060000, 0x4A060000, 0x45060000, 0x45060000, + 0x4A060000, 0x42060000, 0x45060000, 0x4A060000, + 0x46060000, 0x2D060000, 0x4A060000, 0x42060000, + 0x45060000, 0x2D060000, 0x44060000, 0x2D060000, + 0x45060000, 0x39060000, 0x45060000, 0x4A060000, + 0x43060000, 0x45060000, 0x4A060000, 0x46060000, + 0x2C060000, 0x2D060000, 0x45060000, 0x2E060000, + 0x4A060000, 0x44060000, 0x2C060000, 0x45060000, + 0x43060000, 0x45060000, 0x45060000, 0x44060000, + 0x2C060000, 0x45060000, 0x46060000, 0x2C060000, + 0x2D060000, 0x2C060000, 0x2D060000, 0x4A060000, + 0x2D060000, 0x2C060000, 0x4A060000, 0x45060000, + 0x2C060000, 0x4A060000, 0x41060000, 0x45060000, + 0x4A060000, 0x28060000, 0x2D060000, 0x4A060000, + 0x43060000, 0x45060000, 0x45060000, 0x39060000, + 0x2C060000, 0x45060000, 0x35060000, 0x45060000, + 0x45060000, 0x33060000, 0x2E060000, 0x4A060000, + 0x46060000, 0x2C060000, 0x4A060000, 0x35060000, + 0x44060000, 0xD2060000, 0x42060000, 0x44060000, + 0xD2060000, 0x27060000, 0x44060000, 0x44060000, + 0x47060000, 0x27060000, 0x43060000, 0x28060000, + 0x31060000, 0x45060000, 0x2D060000, 0x45060000, + 0x2F060000, 0x35060000, 0x44060000, 0x39060000, + 0x45060000, 0x31060000, 0x33060000, 0x48060000, + 0x44060000, 0x39060000, 0x44060000, 0x4A060000, + 0x47060000, 0x48060000, 0x33060000, 0x44060000, + 0x45060000, 0x35060000, 0x44060000, 0x49060000, + 0x35060000, 0x44060000, 0x49060000, 0x20000000, + 0x27060000, 0x44060000, 0x44060000, 0x47060000, + 0x20000000, 0x39060000, 0x44060000, 0x4A060000, + 0x47060000, 0x20000000, 0x48060000, 0x33060000, + 0x44060000, 0x45060000, 0x2C060000, 0x44060000, + 0x20000000, 0x2C060000, 0x44060000, 0x27060000, + 0x44060000, 0x47060000, 0x31060000, 0xCC060000, + 0x27060000, 0x44060000, 0x20000000, 0x4B060000, + 0x40060000, 0x4B060000, 0x20000000, 0x4C060000, + 0x20000000, 0x4D060000, 0x20000000, 0x4E060000, + 0x40060000, 0x4E060000, 0x20000000, 0x4F060000, + 0x40060000, 0x4F060000, 0x20000000, 0x50060000, + 0x40060000, 0x50060000, 0x20000000, 0x51060000, + 0x40060000, 0x51060000, 0x20000000, 0x52060000, + 0x40060000, 0x52060000, 0x44060000, 0x22060000, + 0x44060000, 0x22060000, 0x44060000, 0x23060000, + 0x44060000, 0x23060000, 0x44060000, 0x25060000, + 0x44060000, 0x25060000, 0x44060000, 0x27060000, + 0x44060000, 0x27060000, 0x30000000, 0x2E000000, + 0x30000000, 0x2C000000, 0x31000000, 0x2C000000, + 0x32000000, 0x2C000000, 0x33000000, 0x2C000000, + 0x34000000, 0x2C000000, 0x35000000, 0x2C000000, + 0x36000000, 0x2C000000, 0x37000000, 0x2C000000, + 0x38000000, 0x2C000000, 0x39000000, 0x2C000000, + 0x28000000, 0x41000000, 0x29000000, 0x28000000, + 0x42000000, 0x29000000, 0x28000000, 0x43000000, + 0x29000000, 0x28000000, 0x44000000, 0x29000000, + 0x28000000, 0x45000000, 0x29000000, 0x28000000, + 0x46000000, 0x29000000, 0x28000000, 0x47000000, + 0x29000000, 0x28000000, 0x48000000, 0x29000000, + 0x28000000, 0x49000000, 0x29000000, 0x28000000, + 0x4A000000, 0x29000000, 0x28000000, 0x4B000000, + 0x29000000, 0x28000000, 0x4C000000, 0x29000000, + 0x28000000, 0x4D000000, 0x29000000, 0x28000000, + 0x4E000000, 0x29000000, 0x28000000, 0x4F000000, + 0x29000000, 0x28000000, 0x50000000, 0x29000000, + 0x28000000, 0x51000000, 0x29000000, 0x28000000, + 0x52000000, 0x29000000, 0x28000000, 0x53000000, + 0x29000000, 0x28000000, 0x54000000, 0x29000000, + 0x28000000, 0x55000000, 0x29000000, 0x28000000, + 0x56000000, 0x29000000, 0x28000000, 0x57000000, + 0x29000000, 0x28000000, 0x58000000, 0x29000000, + 0x28000000, 0x59000000, 0x29000000, 0x28000000, + 0x5A000000, 0x29000000, 0x14300000, 0x53000000, + 0x15300000, 0x43000000, 0x44000000, 0x57000000, + 0x5A000000, 0x48000000, 0x56000000, 0x4D000000, + 0x56000000, 0x53000000, 0x44000000, 0x53000000, + 0x53000000, 0x50000000, 0x50000000, 0x56000000, + 0x57000000, 0x43000000, 0x4D000000, 0x43000000, + 0x4D000000, 0x44000000, 0x4D000000, 0x52000000, + 0x44000000, 0x4A000000, 0x7B300000, 0x4B300000, + 0xB3300000, 0xB3300000, 0x14300000, 0x2C670000, + 0x15300000, 0x14300000, 0x094E0000, 0x15300000, + 0x14300000, 0x8C4E0000, 0x15300000, 0x14300000, + 0x895B0000, 0x15300000, 0x14300000, 0xB9700000, + 0x15300000, 0x14300000, 0x53620000, 0x15300000, + 0x14300000, 0xD7760000, 0x15300000, 0x14300000, + 0xDD520000, 0x15300000, 0x14300000, 0x57650000, + 0x15300000, +}; + +static uint32_t const __CFUniCharCompatibilityDecompositionMappingTableLength = 5260; + +static void const * const __CFUniCharMappingTables[] = { + __CFUniCharLowercaseMappingTable, + __CFUniCharUppercaseMappingTable, + __CFUniCharTitlecaseMappingTable, + __CFUniCharCasefoldMappingTable, + __CFUniCharCanonicalDecompositionMappingTable, + __CFUniCharCanonicalPrecompositionMappingTable, + __CFUniCharCompatibilityDecompositionMappingTable, +}; + +#endif // __BIG_ENDIAN__ + diff --git a/Sources/CoreFoundation/internalInclude/CFUnicodeData-L.inc.h b/Sources/CoreFoundation/internalInclude/CFUnicodeData-L.inc.h new file mode 100644 index 0000000000..b1347cd004 --- /dev/null +++ b/Sources/CoreFoundation/internalInclude/CFUnicodeData-L.inc.h @@ -0,0 +1,6233 @@ +/* + CFUnicodeData-L.inc.h + Created: 2023-04-24 17:51:27 +0000 + Copyright (c) 2002 Apple Computer Inc. All rights reserved. + This file is generated. Don't touch this file directly. +*/ + +#if __LITTLE_ENDIAN__ + +static uint32_t const __CFUniCharLowercaseMappingTable[] = { + 0x00002CC8, 0x00000041, 0x01000061, 0x00000042, + 0x01000062, 0x00000043, 0x01000063, 0x00000044, + 0x01000064, 0x00000045, 0x01000065, 0x00000046, + 0x01000066, 0x00000047, 0x01000067, 0x00000048, + 0x01000068, 0x00000049, 0x01000069, 0x0000004A, + 0x0100006A, 0x0000004B, 0x0100006B, 0x0000004C, + 0x0100006C, 0x0000004D, 0x0100006D, 0x0000004E, + 0x0100006E, 0x0000004F, 0x0100006F, 0x00000050, + 0x01000070, 0x00000051, 0x01000071, 0x00000052, + 0x01000072, 0x00000053, 0x01000073, 0x00000054, + 0x01000074, 0x00000055, 0x01000075, 0x00000056, + 0x01000076, 0x00000057, 0x01000077, 0x00000058, + 0x01000078, 0x00000059, 0x01000079, 0x0000005A, + 0x0100007A, 0x000000C0, 0x010000E0, 0x000000C1, + 0x010000E1, 0x000000C2, 0x010000E2, 0x000000C3, + 0x010000E3, 0x000000C4, 0x010000E4, 0x000000C5, + 0x010000E5, 0x000000C6, 0x010000E6, 0x000000C7, + 0x010000E7, 0x000000C8, 0x010000E8, 0x000000C9, + 0x010000E9, 0x000000CA, 0x010000EA, 0x000000CB, + 0x010000EB, 0x000000CC, 0x010000EC, 0x000000CD, + 0x010000ED, 0x000000CE, 0x010000EE, 0x000000CF, + 0x010000EF, 0x000000D0, 0x010000F0, 0x000000D1, + 0x010000F1, 0x000000D2, 0x010000F2, 0x000000D3, + 0x010000F3, 0x000000D4, 0x010000F4, 0x000000D5, + 0x010000F5, 0x000000D6, 0x010000F6, 0x000000D8, + 0x010000F8, 0x000000D9, 0x010000F9, 0x000000DA, + 0x010000FA, 0x000000DB, 0x010000FB, 0x000000DC, + 0x010000FC, 0x000000DD, 0x010000FD, 0x000000DE, + 0x010000FE, 0x00000100, 0x01000101, 0x00000102, + 0x01000103, 0x00000104, 0x01000105, 0x00000106, + 0x01000107, 0x00000108, 0x01000109, 0x0000010A, + 0x0100010B, 0x0000010C, 0x0100010D, 0x0000010E, + 0x0100010F, 0x00000110, 0x01000111, 0x00000112, + 0x01000113, 0x00000114, 0x01000115, 0x00000116, + 0x01000117, 0x00000118, 0x01000119, 0x0000011A, + 0x0100011B, 0x0000011C, 0x0100011D, 0x0000011E, + 0x0100011F, 0x00000120, 0x01000121, 0x00000122, + 0x01000123, 0x00000124, 0x01000125, 0x00000126, + 0x01000127, 0x00000128, 0x01000129, 0x0000012A, + 0x0100012B, 0x0000012C, 0x0100012D, 0x0000012E, + 0x0100012F, 0x00000130, 0x02000000, 0x00000132, + 0x01000133, 0x00000134, 0x01000135, 0x00000136, + 0x01000137, 0x00000139, 0x0100013A, 0x0000013B, + 0x0100013C, 0x0000013D, 0x0100013E, 0x0000013F, + 0x01000140, 0x00000141, 0x01000142, 0x00000143, + 0x01000144, 0x00000145, 0x01000146, 0x00000147, + 0x01000148, 0x0000014A, 0x0100014B, 0x0000014C, + 0x0100014D, 0x0000014E, 0x0100014F, 0x00000150, + 0x01000151, 0x00000152, 0x01000153, 0x00000154, + 0x01000155, 0x00000156, 0x01000157, 0x00000158, + 0x01000159, 0x0000015A, 0x0100015B, 0x0000015C, + 0x0100015D, 0x0000015E, 0x0100015F, 0x00000160, + 0x01000161, 0x00000162, 0x01000163, 0x00000164, + 0x01000165, 0x00000166, 0x01000167, 0x00000168, + 0x01000169, 0x0000016A, 0x0100016B, 0x0000016C, + 0x0100016D, 0x0000016E, 0x0100016F, 0x00000170, + 0x01000171, 0x00000172, 0x01000173, 0x00000174, + 0x01000175, 0x00000176, 0x01000177, 0x00000178, + 0x010000FF, 0x00000179, 0x0100017A, 0x0000017B, + 0x0100017C, 0x0000017D, 0x0100017E, 0x00000181, + 0x01000253, 0x00000182, 0x01000183, 0x00000184, + 0x01000185, 0x00000186, 0x01000254, 0x00000187, + 0x01000188, 0x00000189, 0x01000256, 0x0000018A, + 0x01000257, 0x0000018B, 0x0100018C, 0x0000018E, + 0x010001DD, 0x0000018F, 0x01000259, 0x00000190, + 0x0100025B, 0x00000191, 0x01000192, 0x00000193, + 0x01000260, 0x00000194, 0x01000263, 0x00000196, + 0x01000269, 0x00000197, 0x01000268, 0x00000198, + 0x01000199, 0x0000019C, 0x0100026F, 0x0000019D, + 0x01000272, 0x0000019F, 0x01000275, 0x000001A0, + 0x010001A1, 0x000001A2, 0x010001A3, 0x000001A4, + 0x010001A5, 0x000001A6, 0x01000280, 0x000001A7, + 0x010001A8, 0x000001A9, 0x01000283, 0x000001AC, + 0x010001AD, 0x000001AE, 0x01000288, 0x000001AF, + 0x010001B0, 0x000001B1, 0x0100028A, 0x000001B2, + 0x0100028B, 0x000001B3, 0x010001B4, 0x000001B5, + 0x010001B6, 0x000001B7, 0x01000292, 0x000001B8, + 0x010001B9, 0x000001BC, 0x010001BD, 0x000001C4, + 0x010001C6, 0x000001C5, 0x010001C6, 0x000001C7, + 0x010001C9, 0x000001C8, 0x010001C9, 0x000001CA, + 0x010001CC, 0x000001CB, 0x010001CC, 0x000001CD, + 0x010001CE, 0x000001CF, 0x010001D0, 0x000001D1, + 0x010001D2, 0x000001D3, 0x010001D4, 0x000001D5, + 0x010001D6, 0x000001D7, 0x010001D8, 0x000001D9, + 0x010001DA, 0x000001DB, 0x010001DC, 0x000001DE, + 0x010001DF, 0x000001E0, 0x010001E1, 0x000001E2, + 0x010001E3, 0x000001E4, 0x010001E5, 0x000001E6, + 0x010001E7, 0x000001E8, 0x010001E9, 0x000001EA, + 0x010001EB, 0x000001EC, 0x010001ED, 0x000001EE, + 0x010001EF, 0x000001F1, 0x010001F3, 0x000001F2, + 0x010001F3, 0x000001F4, 0x010001F5, 0x000001F6, + 0x01000195, 0x000001F7, 0x010001BF, 0x000001F8, + 0x010001F9, 0x000001FA, 0x010001FB, 0x000001FC, + 0x010001FD, 0x000001FE, 0x010001FF, 0x00000200, + 0x01000201, 0x00000202, 0x01000203, 0x00000204, + 0x01000205, 0x00000206, 0x01000207, 0x00000208, + 0x01000209, 0x0000020A, 0x0100020B, 0x0000020C, + 0x0100020D, 0x0000020E, 0x0100020F, 0x00000210, + 0x01000211, 0x00000212, 0x01000213, 0x00000214, + 0x01000215, 0x00000216, 0x01000217, 0x00000218, + 0x01000219, 0x0000021A, 0x0100021B, 0x0000021C, + 0x0100021D, 0x0000021E, 0x0100021F, 0x00000220, + 0x0100019E, 0x00000222, 0x01000223, 0x00000224, + 0x01000225, 0x00000226, 0x01000227, 0x00000228, + 0x01000229, 0x0000022A, 0x0100022B, 0x0000022C, + 0x0100022D, 0x0000022E, 0x0100022F, 0x00000230, + 0x01000231, 0x00000232, 0x01000233, 0x0000023A, + 0x01002C65, 0x0000023B, 0x0100023C, 0x0000023D, + 0x0100019A, 0x0000023E, 0x01002C66, 0x00000241, + 0x01000242, 0x00000243, 0x01000180, 0x00000244, + 0x01000289, 0x00000245, 0x0100028C, 0x00000246, + 0x01000247, 0x00000248, 0x01000249, 0x0000024A, + 0x0100024B, 0x0000024C, 0x0100024D, 0x0000024E, + 0x0100024F, 0x00000370, 0x01000371, 0x00000372, + 0x01000373, 0x00000376, 0x01000377, 0x0000037F, + 0x010003F3, 0x00000386, 0x010003AC, 0x00000388, + 0x010003AD, 0x00000389, 0x010003AE, 0x0000038A, + 0x010003AF, 0x0000038C, 0x010003CC, 0x0000038E, + 0x010003CD, 0x0000038F, 0x010003CE, 0x00000391, + 0x010003B1, 0x00000392, 0x010003B2, 0x00000393, + 0x010003B3, 0x00000394, 0x010003B4, 0x00000395, + 0x010003B5, 0x00000396, 0x010003B6, 0x00000397, + 0x010003B7, 0x00000398, 0x010003B8, 0x00000399, + 0x010003B9, 0x0000039A, 0x010003BA, 0x0000039B, + 0x010003BB, 0x0000039C, 0x010003BC, 0x0000039D, + 0x010003BD, 0x0000039E, 0x010003BE, 0x0000039F, + 0x010003BF, 0x000003A0, 0x010003C0, 0x000003A1, + 0x010003C1, 0x000003A3, 0x010003C3, 0x000003A4, + 0x010003C4, 0x000003A5, 0x010003C5, 0x000003A6, + 0x010003C6, 0x000003A7, 0x010003C7, 0x000003A8, + 0x010003C8, 0x000003A9, 0x010003C9, 0x000003AA, + 0x010003CA, 0x000003AB, 0x010003CB, 0x000003CF, + 0x010003D7, 0x000003D8, 0x010003D9, 0x000003DA, + 0x010003DB, 0x000003DC, 0x010003DD, 0x000003DE, + 0x010003DF, 0x000003E0, 0x010003E1, 0x000003E2, + 0x010003E3, 0x000003E4, 0x010003E5, 0x000003E6, + 0x010003E7, 0x000003E8, 0x010003E9, 0x000003EA, + 0x010003EB, 0x000003EC, 0x010003ED, 0x000003EE, + 0x010003EF, 0x000003F4, 0x010003B8, 0x000003F7, + 0x010003F8, 0x000003F9, 0x010003F2, 0x000003FA, + 0x010003FB, 0x000003FD, 0x0100037B, 0x000003FE, + 0x0100037C, 0x000003FF, 0x0100037D, 0x00000400, + 0x01000450, 0x00000401, 0x01000451, 0x00000402, + 0x01000452, 0x00000403, 0x01000453, 0x00000404, + 0x01000454, 0x00000405, 0x01000455, 0x00000406, + 0x01000456, 0x00000407, 0x01000457, 0x00000408, + 0x01000458, 0x00000409, 0x01000459, 0x0000040A, + 0x0100045A, 0x0000040B, 0x0100045B, 0x0000040C, + 0x0100045C, 0x0000040D, 0x0100045D, 0x0000040E, + 0x0100045E, 0x0000040F, 0x0100045F, 0x00000410, + 0x01000430, 0x00000411, 0x01000431, 0x00000412, + 0x01000432, 0x00000413, 0x01000433, 0x00000414, + 0x01000434, 0x00000415, 0x01000435, 0x00000416, + 0x01000436, 0x00000417, 0x01000437, 0x00000418, + 0x01000438, 0x00000419, 0x01000439, 0x0000041A, + 0x0100043A, 0x0000041B, 0x0100043B, 0x0000041C, + 0x0100043C, 0x0000041D, 0x0100043D, 0x0000041E, + 0x0100043E, 0x0000041F, 0x0100043F, 0x00000420, + 0x01000440, 0x00000421, 0x01000441, 0x00000422, + 0x01000442, 0x00000423, 0x01000443, 0x00000424, + 0x01000444, 0x00000425, 0x01000445, 0x00000426, + 0x01000446, 0x00000427, 0x01000447, 0x00000428, + 0x01000448, 0x00000429, 0x01000449, 0x0000042A, + 0x0100044A, 0x0000042B, 0x0100044B, 0x0000042C, + 0x0100044C, 0x0000042D, 0x0100044D, 0x0000042E, + 0x0100044E, 0x0000042F, 0x0100044F, 0x00000460, + 0x01000461, 0x00000462, 0x01000463, 0x00000464, + 0x01000465, 0x00000466, 0x01000467, 0x00000468, + 0x01000469, 0x0000046A, 0x0100046B, 0x0000046C, + 0x0100046D, 0x0000046E, 0x0100046F, 0x00000470, + 0x01000471, 0x00000472, 0x01000473, 0x00000474, + 0x01000475, 0x00000476, 0x01000477, 0x00000478, + 0x01000479, 0x0000047A, 0x0100047B, 0x0000047C, + 0x0100047D, 0x0000047E, 0x0100047F, 0x00000480, + 0x01000481, 0x0000048A, 0x0100048B, 0x0000048C, + 0x0100048D, 0x0000048E, 0x0100048F, 0x00000490, + 0x01000491, 0x00000492, 0x01000493, 0x00000494, + 0x01000495, 0x00000496, 0x01000497, 0x00000498, + 0x01000499, 0x0000049A, 0x0100049B, 0x0000049C, + 0x0100049D, 0x0000049E, 0x0100049F, 0x000004A0, + 0x010004A1, 0x000004A2, 0x010004A3, 0x000004A4, + 0x010004A5, 0x000004A6, 0x010004A7, 0x000004A8, + 0x010004A9, 0x000004AA, 0x010004AB, 0x000004AC, + 0x010004AD, 0x000004AE, 0x010004AF, 0x000004B0, + 0x010004B1, 0x000004B2, 0x010004B3, 0x000004B4, + 0x010004B5, 0x000004B6, 0x010004B7, 0x000004B8, + 0x010004B9, 0x000004BA, 0x010004BB, 0x000004BC, + 0x010004BD, 0x000004BE, 0x010004BF, 0x000004C0, + 0x010004CF, 0x000004C1, 0x010004C2, 0x000004C3, + 0x010004C4, 0x000004C5, 0x010004C6, 0x000004C7, + 0x010004C8, 0x000004C9, 0x010004CA, 0x000004CB, + 0x010004CC, 0x000004CD, 0x010004CE, 0x000004D0, + 0x010004D1, 0x000004D2, 0x010004D3, 0x000004D4, + 0x010004D5, 0x000004D6, 0x010004D7, 0x000004D8, + 0x010004D9, 0x000004DA, 0x010004DB, 0x000004DC, + 0x010004DD, 0x000004DE, 0x010004DF, 0x000004E0, + 0x010004E1, 0x000004E2, 0x010004E3, 0x000004E4, + 0x010004E5, 0x000004E6, 0x010004E7, 0x000004E8, + 0x010004E9, 0x000004EA, 0x010004EB, 0x000004EC, + 0x010004ED, 0x000004EE, 0x010004EF, 0x000004F0, + 0x010004F1, 0x000004F2, 0x010004F3, 0x000004F4, + 0x010004F5, 0x000004F6, 0x010004F7, 0x000004F8, + 0x010004F9, 0x000004FA, 0x010004FB, 0x000004FC, + 0x010004FD, 0x000004FE, 0x010004FF, 0x00000500, + 0x01000501, 0x00000502, 0x01000503, 0x00000504, + 0x01000505, 0x00000506, 0x01000507, 0x00000508, + 0x01000509, 0x0000050A, 0x0100050B, 0x0000050C, + 0x0100050D, 0x0000050E, 0x0100050F, 0x00000510, + 0x01000511, 0x00000512, 0x01000513, 0x00000514, + 0x01000515, 0x00000516, 0x01000517, 0x00000518, + 0x01000519, 0x0000051A, 0x0100051B, 0x0000051C, + 0x0100051D, 0x0000051E, 0x0100051F, 0x00000520, + 0x01000521, 0x00000522, 0x01000523, 0x00000524, + 0x01000525, 0x00000526, 0x01000527, 0x00000528, + 0x01000529, 0x0000052A, 0x0100052B, 0x0000052C, + 0x0100052D, 0x0000052E, 0x0100052F, 0x00000531, + 0x01000561, 0x00000532, 0x01000562, 0x00000533, + 0x01000563, 0x00000534, 0x01000564, 0x00000535, + 0x01000565, 0x00000536, 0x01000566, 0x00000537, + 0x01000567, 0x00000538, 0x01000568, 0x00000539, + 0x01000569, 0x0000053A, 0x0100056A, 0x0000053B, + 0x0100056B, 0x0000053C, 0x0100056C, 0x0000053D, + 0x0100056D, 0x0000053E, 0x0100056E, 0x0000053F, + 0x0100056F, 0x00000540, 0x01000570, 0x00000541, + 0x01000571, 0x00000542, 0x01000572, 0x00000543, + 0x01000573, 0x00000544, 0x01000574, 0x00000545, + 0x01000575, 0x00000546, 0x01000576, 0x00000547, + 0x01000577, 0x00000548, 0x01000578, 0x00000549, + 0x01000579, 0x0000054A, 0x0100057A, 0x0000054B, + 0x0100057B, 0x0000054C, 0x0100057C, 0x0000054D, + 0x0100057D, 0x0000054E, 0x0100057E, 0x0000054F, + 0x0100057F, 0x00000550, 0x01000580, 0x00000551, + 0x01000581, 0x00000552, 0x01000582, 0x00000553, + 0x01000583, 0x00000554, 0x01000584, 0x00000555, + 0x01000585, 0x00000556, 0x01000586, 0x000010A0, + 0x01002D00, 0x000010A1, 0x01002D01, 0x000010A2, + 0x01002D02, 0x000010A3, 0x01002D03, 0x000010A4, + 0x01002D04, 0x000010A5, 0x01002D05, 0x000010A6, + 0x01002D06, 0x000010A7, 0x01002D07, 0x000010A8, + 0x01002D08, 0x000010A9, 0x01002D09, 0x000010AA, + 0x01002D0A, 0x000010AB, 0x01002D0B, 0x000010AC, + 0x01002D0C, 0x000010AD, 0x01002D0D, 0x000010AE, + 0x01002D0E, 0x000010AF, 0x01002D0F, 0x000010B0, + 0x01002D10, 0x000010B1, 0x01002D11, 0x000010B2, + 0x01002D12, 0x000010B3, 0x01002D13, 0x000010B4, + 0x01002D14, 0x000010B5, 0x01002D15, 0x000010B6, + 0x01002D16, 0x000010B7, 0x01002D17, 0x000010B8, + 0x01002D18, 0x000010B9, 0x01002D19, 0x000010BA, + 0x01002D1A, 0x000010BB, 0x01002D1B, 0x000010BC, + 0x01002D1C, 0x000010BD, 0x01002D1D, 0x000010BE, + 0x01002D1E, 0x000010BF, 0x01002D1F, 0x000010C0, + 0x01002D20, 0x000010C1, 0x01002D21, 0x000010C2, + 0x01002D22, 0x000010C3, 0x01002D23, 0x000010C4, + 0x01002D24, 0x000010C5, 0x01002D25, 0x000010C7, + 0x01002D27, 0x000010CD, 0x01002D2D, 0x000013A0, + 0x0100AB70, 0x000013A1, 0x0100AB71, 0x000013A2, + 0x0100AB72, 0x000013A3, 0x0100AB73, 0x000013A4, + 0x0100AB74, 0x000013A5, 0x0100AB75, 0x000013A6, + 0x0100AB76, 0x000013A7, 0x0100AB77, 0x000013A8, + 0x0100AB78, 0x000013A9, 0x0100AB79, 0x000013AA, + 0x0100AB7A, 0x000013AB, 0x0100AB7B, 0x000013AC, + 0x0100AB7C, 0x000013AD, 0x0100AB7D, 0x000013AE, + 0x0100AB7E, 0x000013AF, 0x0100AB7F, 0x000013B0, + 0x0100AB80, 0x000013B1, 0x0100AB81, 0x000013B2, + 0x0100AB82, 0x000013B3, 0x0100AB83, 0x000013B4, + 0x0100AB84, 0x000013B5, 0x0100AB85, 0x000013B6, + 0x0100AB86, 0x000013B7, 0x0100AB87, 0x000013B8, + 0x0100AB88, 0x000013B9, 0x0100AB89, 0x000013BA, + 0x0100AB8A, 0x000013BB, 0x0100AB8B, 0x000013BC, + 0x0100AB8C, 0x000013BD, 0x0100AB8D, 0x000013BE, + 0x0100AB8E, 0x000013BF, 0x0100AB8F, 0x000013C0, + 0x0100AB90, 0x000013C1, 0x0100AB91, 0x000013C2, + 0x0100AB92, 0x000013C3, 0x0100AB93, 0x000013C4, + 0x0100AB94, 0x000013C5, 0x0100AB95, 0x000013C6, + 0x0100AB96, 0x000013C7, 0x0100AB97, 0x000013C8, + 0x0100AB98, 0x000013C9, 0x0100AB99, 0x000013CA, + 0x0100AB9A, 0x000013CB, 0x0100AB9B, 0x000013CC, + 0x0100AB9C, 0x000013CD, 0x0100AB9D, 0x000013CE, + 0x0100AB9E, 0x000013CF, 0x0100AB9F, 0x000013D0, + 0x0100ABA0, 0x000013D1, 0x0100ABA1, 0x000013D2, + 0x0100ABA2, 0x000013D3, 0x0100ABA3, 0x000013D4, + 0x0100ABA4, 0x000013D5, 0x0100ABA5, 0x000013D6, + 0x0100ABA6, 0x000013D7, 0x0100ABA7, 0x000013D8, + 0x0100ABA8, 0x000013D9, 0x0100ABA9, 0x000013DA, + 0x0100ABAA, 0x000013DB, 0x0100ABAB, 0x000013DC, + 0x0100ABAC, 0x000013DD, 0x0100ABAD, 0x000013DE, + 0x0100ABAE, 0x000013DF, 0x0100ABAF, 0x000013E0, + 0x0100ABB0, 0x000013E1, 0x0100ABB1, 0x000013E2, + 0x0100ABB2, 0x000013E3, 0x0100ABB3, 0x000013E4, + 0x0100ABB4, 0x000013E5, 0x0100ABB5, 0x000013E6, + 0x0100ABB6, 0x000013E7, 0x0100ABB7, 0x000013E8, + 0x0100ABB8, 0x000013E9, 0x0100ABB9, 0x000013EA, + 0x0100ABBA, 0x000013EB, 0x0100ABBB, 0x000013EC, + 0x0100ABBC, 0x000013ED, 0x0100ABBD, 0x000013EE, + 0x0100ABBE, 0x000013EF, 0x0100ABBF, 0x000013F0, + 0x010013F8, 0x000013F1, 0x010013F9, 0x000013F2, + 0x010013FA, 0x000013F3, 0x010013FB, 0x000013F4, + 0x010013FC, 0x000013F5, 0x010013FD, 0x00001C90, + 0x010010D0, 0x00001C91, 0x010010D1, 0x00001C92, + 0x010010D2, 0x00001C93, 0x010010D3, 0x00001C94, + 0x010010D4, 0x00001C95, 0x010010D5, 0x00001C96, + 0x010010D6, 0x00001C97, 0x010010D7, 0x00001C98, + 0x010010D8, 0x00001C99, 0x010010D9, 0x00001C9A, + 0x010010DA, 0x00001C9B, 0x010010DB, 0x00001C9C, + 0x010010DC, 0x00001C9D, 0x010010DD, 0x00001C9E, + 0x010010DE, 0x00001C9F, 0x010010DF, 0x00001CA0, + 0x010010E0, 0x00001CA1, 0x010010E1, 0x00001CA2, + 0x010010E2, 0x00001CA3, 0x010010E3, 0x00001CA4, + 0x010010E4, 0x00001CA5, 0x010010E5, 0x00001CA6, + 0x010010E6, 0x00001CA7, 0x010010E7, 0x00001CA8, + 0x010010E8, 0x00001CA9, 0x010010E9, 0x00001CAA, + 0x010010EA, 0x00001CAB, 0x010010EB, 0x00001CAC, + 0x010010EC, 0x00001CAD, 0x010010ED, 0x00001CAE, + 0x010010EE, 0x00001CAF, 0x010010EF, 0x00001CB0, + 0x010010F0, 0x00001CB1, 0x010010F1, 0x00001CB2, + 0x010010F2, 0x00001CB3, 0x010010F3, 0x00001CB4, + 0x010010F4, 0x00001CB5, 0x010010F5, 0x00001CB6, + 0x010010F6, 0x00001CB7, 0x010010F7, 0x00001CB8, + 0x010010F8, 0x00001CB9, 0x010010F9, 0x00001CBA, + 0x010010FA, 0x00001CBD, 0x010010FD, 0x00001CBE, + 0x010010FE, 0x00001CBF, 0x010010FF, 0x00001E00, + 0x01001E01, 0x00001E02, 0x01001E03, 0x00001E04, + 0x01001E05, 0x00001E06, 0x01001E07, 0x00001E08, + 0x01001E09, 0x00001E0A, 0x01001E0B, 0x00001E0C, + 0x01001E0D, 0x00001E0E, 0x01001E0F, 0x00001E10, + 0x01001E11, 0x00001E12, 0x01001E13, 0x00001E14, + 0x01001E15, 0x00001E16, 0x01001E17, 0x00001E18, + 0x01001E19, 0x00001E1A, 0x01001E1B, 0x00001E1C, + 0x01001E1D, 0x00001E1E, 0x01001E1F, 0x00001E20, + 0x01001E21, 0x00001E22, 0x01001E23, 0x00001E24, + 0x01001E25, 0x00001E26, 0x01001E27, 0x00001E28, + 0x01001E29, 0x00001E2A, 0x01001E2B, 0x00001E2C, + 0x01001E2D, 0x00001E2E, 0x01001E2F, 0x00001E30, + 0x01001E31, 0x00001E32, 0x01001E33, 0x00001E34, + 0x01001E35, 0x00001E36, 0x01001E37, 0x00001E38, + 0x01001E39, 0x00001E3A, 0x01001E3B, 0x00001E3C, + 0x01001E3D, 0x00001E3E, 0x01001E3F, 0x00001E40, + 0x01001E41, 0x00001E42, 0x01001E43, 0x00001E44, + 0x01001E45, 0x00001E46, 0x01001E47, 0x00001E48, + 0x01001E49, 0x00001E4A, 0x01001E4B, 0x00001E4C, + 0x01001E4D, 0x00001E4E, 0x01001E4F, 0x00001E50, + 0x01001E51, 0x00001E52, 0x01001E53, 0x00001E54, + 0x01001E55, 0x00001E56, 0x01001E57, 0x00001E58, + 0x01001E59, 0x00001E5A, 0x01001E5B, 0x00001E5C, + 0x01001E5D, 0x00001E5E, 0x01001E5F, 0x00001E60, + 0x01001E61, 0x00001E62, 0x01001E63, 0x00001E64, + 0x01001E65, 0x00001E66, 0x01001E67, 0x00001E68, + 0x01001E69, 0x00001E6A, 0x01001E6B, 0x00001E6C, + 0x01001E6D, 0x00001E6E, 0x01001E6F, 0x00001E70, + 0x01001E71, 0x00001E72, 0x01001E73, 0x00001E74, + 0x01001E75, 0x00001E76, 0x01001E77, 0x00001E78, + 0x01001E79, 0x00001E7A, 0x01001E7B, 0x00001E7C, + 0x01001E7D, 0x00001E7E, 0x01001E7F, 0x00001E80, + 0x01001E81, 0x00001E82, 0x01001E83, 0x00001E84, + 0x01001E85, 0x00001E86, 0x01001E87, 0x00001E88, + 0x01001E89, 0x00001E8A, 0x01001E8B, 0x00001E8C, + 0x01001E8D, 0x00001E8E, 0x01001E8F, 0x00001E90, + 0x01001E91, 0x00001E92, 0x01001E93, 0x00001E94, + 0x01001E95, 0x00001E9E, 0x010000DF, 0x00001EA0, + 0x01001EA1, 0x00001EA2, 0x01001EA3, 0x00001EA4, + 0x01001EA5, 0x00001EA6, 0x01001EA7, 0x00001EA8, + 0x01001EA9, 0x00001EAA, 0x01001EAB, 0x00001EAC, + 0x01001EAD, 0x00001EAE, 0x01001EAF, 0x00001EB0, + 0x01001EB1, 0x00001EB2, 0x01001EB3, 0x00001EB4, + 0x01001EB5, 0x00001EB6, 0x01001EB7, 0x00001EB8, + 0x01001EB9, 0x00001EBA, 0x01001EBB, 0x00001EBC, + 0x01001EBD, 0x00001EBE, 0x01001EBF, 0x00001EC0, + 0x01001EC1, 0x00001EC2, 0x01001EC3, 0x00001EC4, + 0x01001EC5, 0x00001EC6, 0x01001EC7, 0x00001EC8, + 0x01001EC9, 0x00001ECA, 0x01001ECB, 0x00001ECC, + 0x01001ECD, 0x00001ECE, 0x01001ECF, 0x00001ED0, + 0x01001ED1, 0x00001ED2, 0x01001ED3, 0x00001ED4, + 0x01001ED5, 0x00001ED6, 0x01001ED7, 0x00001ED8, + 0x01001ED9, 0x00001EDA, 0x01001EDB, 0x00001EDC, + 0x01001EDD, 0x00001EDE, 0x01001EDF, 0x00001EE0, + 0x01001EE1, 0x00001EE2, 0x01001EE3, 0x00001EE4, + 0x01001EE5, 0x00001EE6, 0x01001EE7, 0x00001EE8, + 0x01001EE9, 0x00001EEA, 0x01001EEB, 0x00001EEC, + 0x01001EED, 0x00001EEE, 0x01001EEF, 0x00001EF0, + 0x01001EF1, 0x00001EF2, 0x01001EF3, 0x00001EF4, + 0x01001EF5, 0x00001EF6, 0x01001EF7, 0x00001EF8, + 0x01001EF9, 0x00001EFA, 0x01001EFB, 0x00001EFC, + 0x01001EFD, 0x00001EFE, 0x01001EFF, 0x00001F08, + 0x01001F00, 0x00001F09, 0x01001F01, 0x00001F0A, + 0x01001F02, 0x00001F0B, 0x01001F03, 0x00001F0C, + 0x01001F04, 0x00001F0D, 0x01001F05, 0x00001F0E, + 0x01001F06, 0x00001F0F, 0x01001F07, 0x00001F18, + 0x01001F10, 0x00001F19, 0x01001F11, 0x00001F1A, + 0x01001F12, 0x00001F1B, 0x01001F13, 0x00001F1C, + 0x01001F14, 0x00001F1D, 0x01001F15, 0x00001F28, + 0x01001F20, 0x00001F29, 0x01001F21, 0x00001F2A, + 0x01001F22, 0x00001F2B, 0x01001F23, 0x00001F2C, + 0x01001F24, 0x00001F2D, 0x01001F25, 0x00001F2E, + 0x01001F26, 0x00001F2F, 0x01001F27, 0x00001F38, + 0x01001F30, 0x00001F39, 0x01001F31, 0x00001F3A, + 0x01001F32, 0x00001F3B, 0x01001F33, 0x00001F3C, + 0x01001F34, 0x00001F3D, 0x01001F35, 0x00001F3E, + 0x01001F36, 0x00001F3F, 0x01001F37, 0x00001F48, + 0x01001F40, 0x00001F49, 0x01001F41, 0x00001F4A, + 0x01001F42, 0x00001F4B, 0x01001F43, 0x00001F4C, + 0x01001F44, 0x00001F4D, 0x01001F45, 0x00001F59, + 0x01001F51, 0x00001F5B, 0x01001F53, 0x00001F5D, + 0x01001F55, 0x00001F5F, 0x01001F57, 0x00001F68, + 0x01001F60, 0x00001F69, 0x01001F61, 0x00001F6A, + 0x01001F62, 0x00001F6B, 0x01001F63, 0x00001F6C, + 0x01001F64, 0x00001F6D, 0x01001F65, 0x00001F6E, + 0x01001F66, 0x00001F6F, 0x01001F67, 0x00001F88, + 0x01001F80, 0x00001F89, 0x01001F81, 0x00001F8A, + 0x01001F82, 0x00001F8B, 0x01001F83, 0x00001F8C, + 0x01001F84, 0x00001F8D, 0x01001F85, 0x00001F8E, + 0x01001F86, 0x00001F8F, 0x01001F87, 0x00001F98, + 0x01001F90, 0x00001F99, 0x01001F91, 0x00001F9A, + 0x01001F92, 0x00001F9B, 0x01001F93, 0x00001F9C, + 0x01001F94, 0x00001F9D, 0x01001F95, 0x00001F9E, + 0x01001F96, 0x00001F9F, 0x01001F97, 0x00001FA8, + 0x01001FA0, 0x00001FA9, 0x01001FA1, 0x00001FAA, + 0x01001FA2, 0x00001FAB, 0x01001FA3, 0x00001FAC, + 0x01001FA4, 0x00001FAD, 0x01001FA5, 0x00001FAE, + 0x01001FA6, 0x00001FAF, 0x01001FA7, 0x00001FB8, + 0x01001FB0, 0x00001FB9, 0x01001FB1, 0x00001FBA, + 0x01001F70, 0x00001FBB, 0x01001F71, 0x00001FBC, + 0x01001FB3, 0x00001FC8, 0x01001F72, 0x00001FC9, + 0x01001F73, 0x00001FCA, 0x01001F74, 0x00001FCB, + 0x01001F75, 0x00001FCC, 0x01001FC3, 0x00001FD8, + 0x01001FD0, 0x00001FD9, 0x01001FD1, 0x00001FDA, + 0x01001F76, 0x00001FDB, 0x01001F77, 0x00001FE8, + 0x01001FE0, 0x00001FE9, 0x01001FE1, 0x00001FEA, + 0x01001F7A, 0x00001FEB, 0x01001F7B, 0x00001FEC, + 0x01001FE5, 0x00001FF8, 0x01001F78, 0x00001FF9, + 0x01001F79, 0x00001FFA, 0x01001F7C, 0x00001FFB, + 0x01001F7D, 0x00001FFC, 0x01001FF3, 0x00002126, + 0x010003C9, 0x0000212A, 0x0100006B, 0x0000212B, + 0x010000E5, 0x00002132, 0x0100214E, 0x00002160, + 0x01002170, 0x00002161, 0x01002171, 0x00002162, + 0x01002172, 0x00002163, 0x01002173, 0x00002164, + 0x01002174, 0x00002165, 0x01002175, 0x00002166, + 0x01002176, 0x00002167, 0x01002177, 0x00002168, + 0x01002178, 0x00002169, 0x01002179, 0x0000216A, + 0x0100217A, 0x0000216B, 0x0100217B, 0x0000216C, + 0x0100217C, 0x0000216D, 0x0100217D, 0x0000216E, + 0x0100217E, 0x0000216F, 0x0100217F, 0x00002183, + 0x01002184, 0x000024B6, 0x010024D0, 0x000024B7, + 0x010024D1, 0x000024B8, 0x010024D2, 0x000024B9, + 0x010024D3, 0x000024BA, 0x010024D4, 0x000024BB, + 0x010024D5, 0x000024BC, 0x010024D6, 0x000024BD, + 0x010024D7, 0x000024BE, 0x010024D8, 0x000024BF, + 0x010024D9, 0x000024C0, 0x010024DA, 0x000024C1, + 0x010024DB, 0x000024C2, 0x010024DC, 0x000024C3, + 0x010024DD, 0x000024C4, 0x010024DE, 0x000024C5, + 0x010024DF, 0x000024C6, 0x010024E0, 0x000024C7, + 0x010024E1, 0x000024C8, 0x010024E2, 0x000024C9, + 0x010024E3, 0x000024CA, 0x010024E4, 0x000024CB, + 0x010024E5, 0x000024CC, 0x010024E6, 0x000024CD, + 0x010024E7, 0x000024CE, 0x010024E8, 0x000024CF, + 0x010024E9, 0x00002C00, 0x01002C30, 0x00002C01, + 0x01002C31, 0x00002C02, 0x01002C32, 0x00002C03, + 0x01002C33, 0x00002C04, 0x01002C34, 0x00002C05, + 0x01002C35, 0x00002C06, 0x01002C36, 0x00002C07, + 0x01002C37, 0x00002C08, 0x01002C38, 0x00002C09, + 0x01002C39, 0x00002C0A, 0x01002C3A, 0x00002C0B, + 0x01002C3B, 0x00002C0C, 0x01002C3C, 0x00002C0D, + 0x01002C3D, 0x00002C0E, 0x01002C3E, 0x00002C0F, + 0x01002C3F, 0x00002C10, 0x01002C40, 0x00002C11, + 0x01002C41, 0x00002C12, 0x01002C42, 0x00002C13, + 0x01002C43, 0x00002C14, 0x01002C44, 0x00002C15, + 0x01002C45, 0x00002C16, 0x01002C46, 0x00002C17, + 0x01002C47, 0x00002C18, 0x01002C48, 0x00002C19, + 0x01002C49, 0x00002C1A, 0x01002C4A, 0x00002C1B, + 0x01002C4B, 0x00002C1C, 0x01002C4C, 0x00002C1D, + 0x01002C4D, 0x00002C1E, 0x01002C4E, 0x00002C1F, + 0x01002C4F, 0x00002C20, 0x01002C50, 0x00002C21, + 0x01002C51, 0x00002C22, 0x01002C52, 0x00002C23, + 0x01002C53, 0x00002C24, 0x01002C54, 0x00002C25, + 0x01002C55, 0x00002C26, 0x01002C56, 0x00002C27, + 0x01002C57, 0x00002C28, 0x01002C58, 0x00002C29, + 0x01002C59, 0x00002C2A, 0x01002C5A, 0x00002C2B, + 0x01002C5B, 0x00002C2C, 0x01002C5C, 0x00002C2D, + 0x01002C5D, 0x00002C2E, 0x01002C5E, 0x00002C2F, + 0x01002C5F, 0x00002C60, 0x01002C61, 0x00002C62, + 0x0100026B, 0x00002C63, 0x01001D7D, 0x00002C64, + 0x0100027D, 0x00002C67, 0x01002C68, 0x00002C69, + 0x01002C6A, 0x00002C6B, 0x01002C6C, 0x00002C6D, + 0x01000251, 0x00002C6E, 0x01000271, 0x00002C6F, + 0x01000250, 0x00002C70, 0x01000252, 0x00002C72, + 0x01002C73, 0x00002C75, 0x01002C76, 0x00002C7E, + 0x0100023F, 0x00002C7F, 0x01000240, 0x00002C80, + 0x01002C81, 0x00002C82, 0x01002C83, 0x00002C84, + 0x01002C85, 0x00002C86, 0x01002C87, 0x00002C88, + 0x01002C89, 0x00002C8A, 0x01002C8B, 0x00002C8C, + 0x01002C8D, 0x00002C8E, 0x01002C8F, 0x00002C90, + 0x01002C91, 0x00002C92, 0x01002C93, 0x00002C94, + 0x01002C95, 0x00002C96, 0x01002C97, 0x00002C98, + 0x01002C99, 0x00002C9A, 0x01002C9B, 0x00002C9C, + 0x01002C9D, 0x00002C9E, 0x01002C9F, 0x00002CA0, + 0x01002CA1, 0x00002CA2, 0x01002CA3, 0x00002CA4, + 0x01002CA5, 0x00002CA6, 0x01002CA7, 0x00002CA8, + 0x01002CA9, 0x00002CAA, 0x01002CAB, 0x00002CAC, + 0x01002CAD, 0x00002CAE, 0x01002CAF, 0x00002CB0, + 0x01002CB1, 0x00002CB2, 0x01002CB3, 0x00002CB4, + 0x01002CB5, 0x00002CB6, 0x01002CB7, 0x00002CB8, + 0x01002CB9, 0x00002CBA, 0x01002CBB, 0x00002CBC, + 0x01002CBD, 0x00002CBE, 0x01002CBF, 0x00002CC0, + 0x01002CC1, 0x00002CC2, 0x01002CC3, 0x00002CC4, + 0x01002CC5, 0x00002CC6, 0x01002CC7, 0x00002CC8, + 0x01002CC9, 0x00002CCA, 0x01002CCB, 0x00002CCC, + 0x01002CCD, 0x00002CCE, 0x01002CCF, 0x00002CD0, + 0x01002CD1, 0x00002CD2, 0x01002CD3, 0x00002CD4, + 0x01002CD5, 0x00002CD6, 0x01002CD7, 0x00002CD8, + 0x01002CD9, 0x00002CDA, 0x01002CDB, 0x00002CDC, + 0x01002CDD, 0x00002CDE, 0x01002CDF, 0x00002CE0, + 0x01002CE1, 0x00002CE2, 0x01002CE3, 0x00002CEB, + 0x01002CEC, 0x00002CED, 0x01002CEE, 0x00002CF2, + 0x01002CF3, 0x0000A640, 0x0100A641, 0x0000A642, + 0x0100A643, 0x0000A644, 0x0100A645, 0x0000A646, + 0x0100A647, 0x0000A648, 0x0100A649, 0x0000A64A, + 0x0100A64B, 0x0000A64C, 0x0100A64D, 0x0000A64E, + 0x0100A64F, 0x0000A650, 0x0100A651, 0x0000A652, + 0x0100A653, 0x0000A654, 0x0100A655, 0x0000A656, + 0x0100A657, 0x0000A658, 0x0100A659, 0x0000A65A, + 0x0100A65B, 0x0000A65C, 0x0100A65D, 0x0000A65E, + 0x0100A65F, 0x0000A660, 0x0100A661, 0x0000A662, + 0x0100A663, 0x0000A664, 0x0100A665, 0x0000A666, + 0x0100A667, 0x0000A668, 0x0100A669, 0x0000A66A, + 0x0100A66B, 0x0000A66C, 0x0100A66D, 0x0000A680, + 0x0100A681, 0x0000A682, 0x0100A683, 0x0000A684, + 0x0100A685, 0x0000A686, 0x0100A687, 0x0000A688, + 0x0100A689, 0x0000A68A, 0x0100A68B, 0x0000A68C, + 0x0100A68D, 0x0000A68E, 0x0100A68F, 0x0000A690, + 0x0100A691, 0x0000A692, 0x0100A693, 0x0000A694, + 0x0100A695, 0x0000A696, 0x0100A697, 0x0000A698, + 0x0100A699, 0x0000A69A, 0x0100A69B, 0x0000A722, + 0x0100A723, 0x0000A724, 0x0100A725, 0x0000A726, + 0x0100A727, 0x0000A728, 0x0100A729, 0x0000A72A, + 0x0100A72B, 0x0000A72C, 0x0100A72D, 0x0000A72E, + 0x0100A72F, 0x0000A732, 0x0100A733, 0x0000A734, + 0x0100A735, 0x0000A736, 0x0100A737, 0x0000A738, + 0x0100A739, 0x0000A73A, 0x0100A73B, 0x0000A73C, + 0x0100A73D, 0x0000A73E, 0x0100A73F, 0x0000A740, + 0x0100A741, 0x0000A742, 0x0100A743, 0x0000A744, + 0x0100A745, 0x0000A746, 0x0100A747, 0x0000A748, + 0x0100A749, 0x0000A74A, 0x0100A74B, 0x0000A74C, + 0x0100A74D, 0x0000A74E, 0x0100A74F, 0x0000A750, + 0x0100A751, 0x0000A752, 0x0100A753, 0x0000A754, + 0x0100A755, 0x0000A756, 0x0100A757, 0x0000A758, + 0x0100A759, 0x0000A75A, 0x0100A75B, 0x0000A75C, + 0x0100A75D, 0x0000A75E, 0x0100A75F, 0x0000A760, + 0x0100A761, 0x0000A762, 0x0100A763, 0x0000A764, + 0x0100A765, 0x0000A766, 0x0100A767, 0x0000A768, + 0x0100A769, 0x0000A76A, 0x0100A76B, 0x0000A76C, + 0x0100A76D, 0x0000A76E, 0x0100A76F, 0x0000A779, + 0x0100A77A, 0x0000A77B, 0x0100A77C, 0x0000A77D, + 0x01001D79, 0x0000A77E, 0x0100A77F, 0x0000A780, + 0x0100A781, 0x0000A782, 0x0100A783, 0x0000A784, + 0x0100A785, 0x0000A786, 0x0100A787, 0x0000A78B, + 0x0100A78C, 0x0000A78D, 0x01000265, 0x0000A790, + 0x0100A791, 0x0000A792, 0x0100A793, 0x0000A796, + 0x0100A797, 0x0000A798, 0x0100A799, 0x0000A79A, + 0x0100A79B, 0x0000A79C, 0x0100A79D, 0x0000A79E, + 0x0100A79F, 0x0000A7A0, 0x0100A7A1, 0x0000A7A2, + 0x0100A7A3, 0x0000A7A4, 0x0100A7A5, 0x0000A7A6, + 0x0100A7A7, 0x0000A7A8, 0x0100A7A9, 0x0000A7AA, + 0x01000266, 0x0000A7AB, 0x0100025C, 0x0000A7AC, + 0x01000261, 0x0000A7AD, 0x0100026C, 0x0000A7AE, + 0x0100026A, 0x0000A7B0, 0x0100029E, 0x0000A7B1, + 0x01000287, 0x0000A7B2, 0x0100029D, 0x0000A7B3, + 0x0100AB53, 0x0000A7B4, 0x0100A7B5, 0x0000A7B6, + 0x0100A7B7, 0x0000A7B8, 0x0100A7B9, 0x0000A7BA, + 0x0100A7BB, 0x0000A7BC, 0x0100A7BD, 0x0000A7BE, + 0x0100A7BF, 0x0000A7C0, 0x0100A7C1, 0x0000A7C2, + 0x0100A7C3, 0x0000A7C4, 0x0100A794, 0x0000A7C5, + 0x01000282, 0x0000A7C6, 0x01001D8E, 0x0000A7C7, + 0x0100A7C8, 0x0000A7C9, 0x0100A7CA, 0x0000A7D0, + 0x0100A7D1, 0x0000A7D6, 0x0100A7D7, 0x0000A7D8, + 0x0100A7D9, 0x0000A7F5, 0x0100A7F6, 0x0000FF21, + 0x0100FF41, 0x0000FF22, 0x0100FF42, 0x0000FF23, + 0x0100FF43, 0x0000FF24, 0x0100FF44, 0x0000FF25, + 0x0100FF45, 0x0000FF26, 0x0100FF46, 0x0000FF27, + 0x0100FF47, 0x0000FF28, 0x0100FF48, 0x0000FF29, + 0x0100FF49, 0x0000FF2A, 0x0100FF4A, 0x0000FF2B, + 0x0100FF4B, 0x0000FF2C, 0x0100FF4C, 0x0000FF2D, + 0x0100FF4D, 0x0000FF2E, 0x0100FF4E, 0x0000FF2F, + 0x0100FF4F, 0x0000FF30, 0x0100FF50, 0x0000FF31, + 0x0100FF51, 0x0000FF32, 0x0100FF52, 0x0000FF33, + 0x0100FF53, 0x0000FF34, 0x0100FF54, 0x0000FF35, + 0x0100FF55, 0x0000FF36, 0x0100FF56, 0x0000FF37, + 0x0100FF57, 0x0000FF38, 0x0100FF58, 0x0000FF39, + 0x0100FF59, 0x0000FF3A, 0x0100FF5A, 0x00010400, + 0x81010428, 0x00010401, 0x81010429, 0x00010402, + 0x8101042A, 0x00010403, 0x8101042B, 0x00010404, + 0x8101042C, 0x00010405, 0x8101042D, 0x00010406, + 0x8101042E, 0x00010407, 0x8101042F, 0x00010408, + 0x81010430, 0x00010409, 0x81010431, 0x0001040A, + 0x81010432, 0x0001040B, 0x81010433, 0x0001040C, + 0x81010434, 0x0001040D, 0x81010435, 0x0001040E, + 0x81010436, 0x0001040F, 0x81010437, 0x00010410, + 0x81010438, 0x00010411, 0x81010439, 0x00010412, + 0x8101043A, 0x00010413, 0x8101043B, 0x00010414, + 0x8101043C, 0x00010415, 0x8101043D, 0x00010416, + 0x8101043E, 0x00010417, 0x8101043F, 0x00010418, + 0x81010440, 0x00010419, 0x81010441, 0x0001041A, + 0x81010442, 0x0001041B, 0x81010443, 0x0001041C, + 0x81010444, 0x0001041D, 0x81010445, 0x0001041E, + 0x81010446, 0x0001041F, 0x81010447, 0x00010420, + 0x81010448, 0x00010421, 0x81010449, 0x00010422, + 0x8101044A, 0x00010423, 0x8101044B, 0x00010424, + 0x8101044C, 0x00010425, 0x8101044D, 0x00010426, + 0x8101044E, 0x00010427, 0x8101044F, 0x000104B0, + 0x810104D8, 0x000104B1, 0x810104D9, 0x000104B2, + 0x810104DA, 0x000104B3, 0x810104DB, 0x000104B4, + 0x810104DC, 0x000104B5, 0x810104DD, 0x000104B6, + 0x810104DE, 0x000104B7, 0x810104DF, 0x000104B8, + 0x810104E0, 0x000104B9, 0x810104E1, 0x000104BA, + 0x810104E2, 0x000104BB, 0x810104E3, 0x000104BC, + 0x810104E4, 0x000104BD, 0x810104E5, 0x000104BE, + 0x810104E6, 0x000104BF, 0x810104E7, 0x000104C0, + 0x810104E8, 0x000104C1, 0x810104E9, 0x000104C2, + 0x810104EA, 0x000104C3, 0x810104EB, 0x000104C4, + 0x810104EC, 0x000104C5, 0x810104ED, 0x000104C6, + 0x810104EE, 0x000104C7, 0x810104EF, 0x000104C8, + 0x810104F0, 0x000104C9, 0x810104F1, 0x000104CA, + 0x810104F2, 0x000104CB, 0x810104F3, 0x000104CC, + 0x810104F4, 0x000104CD, 0x810104F5, 0x000104CE, + 0x810104F6, 0x000104CF, 0x810104F7, 0x000104D0, + 0x810104F8, 0x000104D1, 0x810104F9, 0x000104D2, + 0x810104FA, 0x000104D3, 0x810104FB, 0x00010570, + 0x81010597, 0x00010571, 0x81010598, 0x00010572, + 0x81010599, 0x00010573, 0x8101059A, 0x00010574, + 0x8101059B, 0x00010575, 0x8101059C, 0x00010576, + 0x8101059D, 0x00010577, 0x8101059E, 0x00010578, + 0x8101059F, 0x00010579, 0x810105A0, 0x0001057A, + 0x810105A1, 0x0001057C, 0x810105A3, 0x0001057D, + 0x810105A4, 0x0001057E, 0x810105A5, 0x0001057F, + 0x810105A6, 0x00010580, 0x810105A7, 0x00010581, + 0x810105A8, 0x00010582, 0x810105A9, 0x00010583, + 0x810105AA, 0x00010584, 0x810105AB, 0x00010585, + 0x810105AC, 0x00010586, 0x810105AD, 0x00010587, + 0x810105AE, 0x00010588, 0x810105AF, 0x00010589, + 0x810105B0, 0x0001058A, 0x810105B1, 0x0001058C, + 0x810105B3, 0x0001058D, 0x810105B4, 0x0001058E, + 0x810105B5, 0x0001058F, 0x810105B6, 0x00010590, + 0x810105B7, 0x00010591, 0x810105B8, 0x00010592, + 0x810105B9, 0x00010594, 0x810105BB, 0x00010595, + 0x810105BC, 0x00010C80, 0x81010CC0, 0x00010C81, + 0x81010CC1, 0x00010C82, 0x81010CC2, 0x00010C83, + 0x81010CC3, 0x00010C84, 0x81010CC4, 0x00010C85, + 0x81010CC5, 0x00010C86, 0x81010CC6, 0x00010C87, + 0x81010CC7, 0x00010C88, 0x81010CC8, 0x00010C89, + 0x81010CC9, 0x00010C8A, 0x81010CCA, 0x00010C8B, + 0x81010CCB, 0x00010C8C, 0x81010CCC, 0x00010C8D, + 0x81010CCD, 0x00010C8E, 0x81010CCE, 0x00010C8F, + 0x81010CCF, 0x00010C90, 0x81010CD0, 0x00010C91, + 0x81010CD1, 0x00010C92, 0x81010CD2, 0x00010C93, + 0x81010CD3, 0x00010C94, 0x81010CD4, 0x00010C95, + 0x81010CD5, 0x00010C96, 0x81010CD6, 0x00010C97, + 0x81010CD7, 0x00010C98, 0x81010CD8, 0x00010C99, + 0x81010CD9, 0x00010C9A, 0x81010CDA, 0x00010C9B, + 0x81010CDB, 0x00010C9C, 0x81010CDC, 0x00010C9D, + 0x81010CDD, 0x00010C9E, 0x81010CDE, 0x00010C9F, + 0x81010CDF, 0x00010CA0, 0x81010CE0, 0x00010CA1, + 0x81010CE1, 0x00010CA2, 0x81010CE2, 0x00010CA3, + 0x81010CE3, 0x00010CA4, 0x81010CE4, 0x00010CA5, + 0x81010CE5, 0x00010CA6, 0x81010CE6, 0x00010CA7, + 0x81010CE7, 0x00010CA8, 0x81010CE8, 0x00010CA9, + 0x81010CE9, 0x00010CAA, 0x81010CEA, 0x00010CAB, + 0x81010CEB, 0x00010CAC, 0x81010CEC, 0x00010CAD, + 0x81010CED, 0x00010CAE, 0x81010CEE, 0x00010CAF, + 0x81010CEF, 0x00010CB0, 0x81010CF0, 0x00010CB1, + 0x81010CF1, 0x00010CB2, 0x81010CF2, 0x000118A0, + 0x810118C0, 0x000118A1, 0x810118C1, 0x000118A2, + 0x810118C2, 0x000118A3, 0x810118C3, 0x000118A4, + 0x810118C4, 0x000118A5, 0x810118C5, 0x000118A6, + 0x810118C6, 0x000118A7, 0x810118C7, 0x000118A8, + 0x810118C8, 0x000118A9, 0x810118C9, 0x000118AA, + 0x810118CA, 0x000118AB, 0x810118CB, 0x000118AC, + 0x810118CC, 0x000118AD, 0x810118CD, 0x000118AE, + 0x810118CE, 0x000118AF, 0x810118CF, 0x000118B0, + 0x810118D0, 0x000118B1, 0x810118D1, 0x000118B2, + 0x810118D2, 0x000118B3, 0x810118D3, 0x000118B4, + 0x810118D4, 0x000118B5, 0x810118D5, 0x000118B6, + 0x810118D6, 0x000118B7, 0x810118D7, 0x000118B8, + 0x810118D8, 0x000118B9, 0x810118D9, 0x000118BA, + 0x810118DA, 0x000118BB, 0x810118DB, 0x000118BC, + 0x810118DC, 0x000118BD, 0x810118DD, 0x000118BE, + 0x810118DE, 0x000118BF, 0x810118DF, 0x00016E40, + 0x81016E60, 0x00016E41, 0x81016E61, 0x00016E42, + 0x81016E62, 0x00016E43, 0x81016E63, 0x00016E44, + 0x81016E64, 0x00016E45, 0x81016E65, 0x00016E46, + 0x81016E66, 0x00016E47, 0x81016E67, 0x00016E48, + 0x81016E68, 0x00016E49, 0x81016E69, 0x00016E4A, + 0x81016E6A, 0x00016E4B, 0x81016E6B, 0x00016E4C, + 0x81016E6C, 0x00016E4D, 0x81016E6D, 0x00016E4E, + 0x81016E6E, 0x00016E4F, 0x81016E6F, 0x00016E50, + 0x81016E70, 0x00016E51, 0x81016E71, 0x00016E52, + 0x81016E72, 0x00016E53, 0x81016E73, 0x00016E54, + 0x81016E74, 0x00016E55, 0x81016E75, 0x00016E56, + 0x81016E76, 0x00016E57, 0x81016E77, 0x00016E58, + 0x81016E78, 0x00016E59, 0x81016E79, 0x00016E5A, + 0x81016E7A, 0x00016E5B, 0x81016E7B, 0x00016E5C, + 0x81016E7C, 0x00016E5D, 0x81016E7D, 0x00016E5E, + 0x81016E7E, 0x00016E5F, 0x81016E7F, 0x0001E900, + 0x8101E922, 0x0001E901, 0x8101E923, 0x0001E902, + 0x8101E924, 0x0001E903, 0x8101E925, 0x0001E904, + 0x8101E926, 0x0001E905, 0x8101E927, 0x0001E906, + 0x8101E928, 0x0001E907, 0x8101E929, 0x0001E908, + 0x8101E92A, 0x0001E909, 0x8101E92B, 0x0001E90A, + 0x8101E92C, 0x0001E90B, 0x8101E92D, 0x0001E90C, + 0x8101E92E, 0x0001E90D, 0x8101E92F, 0x0001E90E, + 0x8101E930, 0x0001E90F, 0x8101E931, 0x0001E910, + 0x8101E932, 0x0001E911, 0x8101E933, 0x0001E912, + 0x8101E934, 0x0001E913, 0x8101E935, 0x0001E914, + 0x8101E936, 0x0001E915, 0x8101E937, 0x0001E916, + 0x8101E938, 0x0001E917, 0x8101E939, 0x0001E918, + 0x8101E93A, 0x0001E919, 0x8101E93B, 0x0001E91A, + 0x8101E93C, 0x0001E91B, 0x8101E93D, 0x0001E91C, + 0x8101E93E, 0x0001E91D, 0x8101E93F, 0x0001E91E, + 0x8101E940, 0x0001E91F, 0x8101E941, 0x0001E920, + 0x8101E942, 0x0001E921, 0x8101E943, 0x00000069, + 0x00000307, +}; + +static uint32_t const __CFUniCharLowercaseMappingTableLength = 1434; + +static uint32_t const __CFUniCharUppercaseMappingTable[] = { + 0x00002FA8, 0x00000061, 0x01000041, 0x00000062, + 0x01000042, 0x00000063, 0x01000043, 0x00000064, + 0x01000044, 0x00000065, 0x01000045, 0x00000066, + 0x01000046, 0x00000067, 0x01000047, 0x00000068, + 0x01000048, 0x00000069, 0x01000049, 0x0000006A, + 0x0100004A, 0x0000006B, 0x0100004B, 0x0000006C, + 0x0100004C, 0x0000006D, 0x0100004D, 0x0000006E, + 0x0100004E, 0x0000006F, 0x0100004F, 0x00000070, + 0x01000050, 0x00000071, 0x01000051, 0x00000072, + 0x01000052, 0x00000073, 0x01000053, 0x00000074, + 0x01000054, 0x00000075, 0x01000055, 0x00000076, + 0x01000056, 0x00000077, 0x01000057, 0x00000078, + 0x01000058, 0x00000079, 0x01000059, 0x0000007A, + 0x0100005A, 0x000000B5, 0x0100039C, 0x000000DF, + 0x02000000, 0x000000E0, 0x010000C0, 0x000000E1, + 0x010000C1, 0x000000E2, 0x010000C2, 0x000000E3, + 0x010000C3, 0x000000E4, 0x010000C4, 0x000000E5, + 0x010000C5, 0x000000E6, 0x010000C6, 0x000000E7, + 0x010000C7, 0x000000E8, 0x010000C8, 0x000000E9, + 0x010000C9, 0x000000EA, 0x010000CA, 0x000000EB, + 0x010000CB, 0x000000EC, 0x010000CC, 0x000000ED, + 0x010000CD, 0x000000EE, 0x010000CE, 0x000000EF, + 0x010000CF, 0x000000F0, 0x010000D0, 0x000000F1, + 0x010000D1, 0x000000F2, 0x010000D2, 0x000000F3, + 0x010000D3, 0x000000F4, 0x010000D4, 0x000000F5, + 0x010000D5, 0x000000F6, 0x010000D6, 0x000000F8, + 0x010000D8, 0x000000F9, 0x010000D9, 0x000000FA, + 0x010000DA, 0x000000FB, 0x010000DB, 0x000000FC, + 0x010000DC, 0x000000FD, 0x010000DD, 0x000000FE, + 0x010000DE, 0x000000FF, 0x01000178, 0x00000101, + 0x01000100, 0x00000103, 0x01000102, 0x00000105, + 0x01000104, 0x00000107, 0x01000106, 0x00000109, + 0x01000108, 0x0000010B, 0x0100010A, 0x0000010D, + 0x0100010C, 0x0000010F, 0x0100010E, 0x00000111, + 0x01000110, 0x00000113, 0x01000112, 0x00000115, + 0x01000114, 0x00000117, 0x01000116, 0x00000119, + 0x01000118, 0x0000011B, 0x0100011A, 0x0000011D, + 0x0100011C, 0x0000011F, 0x0100011E, 0x00000121, + 0x01000120, 0x00000123, 0x01000122, 0x00000125, + 0x01000124, 0x00000127, 0x01000126, 0x00000129, + 0x01000128, 0x0000012B, 0x0100012A, 0x0000012D, + 0x0100012C, 0x0000012F, 0x0100012E, 0x00000131, + 0x01000049, 0x00000133, 0x01000132, 0x00000135, + 0x01000134, 0x00000137, 0x01000136, 0x0000013A, + 0x01000139, 0x0000013C, 0x0100013B, 0x0000013E, + 0x0100013D, 0x00000140, 0x0100013F, 0x00000142, + 0x01000141, 0x00000144, 0x01000143, 0x00000146, + 0x01000145, 0x00000148, 0x01000147, 0x00000149, + 0x02000002, 0x0000014B, 0x0100014A, 0x0000014D, + 0x0100014C, 0x0000014F, 0x0100014E, 0x00000151, + 0x01000150, 0x00000153, 0x01000152, 0x00000155, + 0x01000154, 0x00000157, 0x01000156, 0x00000159, + 0x01000158, 0x0000015B, 0x0100015A, 0x0000015D, + 0x0100015C, 0x0000015F, 0x0100015E, 0x00000161, + 0x01000160, 0x00000163, 0x01000162, 0x00000165, + 0x01000164, 0x00000167, 0x01000166, 0x00000169, + 0x01000168, 0x0000016B, 0x0100016A, 0x0000016D, + 0x0100016C, 0x0000016F, 0x0100016E, 0x00000171, + 0x01000170, 0x00000173, 0x01000172, 0x00000175, + 0x01000174, 0x00000177, 0x01000176, 0x0000017A, + 0x01000179, 0x0000017C, 0x0100017B, 0x0000017E, + 0x0100017D, 0x0000017F, 0x01000053, 0x00000180, + 0x01000243, 0x00000183, 0x01000182, 0x00000185, + 0x01000184, 0x00000188, 0x01000187, 0x0000018C, + 0x0100018B, 0x00000192, 0x01000191, 0x00000195, + 0x010001F6, 0x00000199, 0x01000198, 0x0000019A, + 0x0100023D, 0x0000019E, 0x01000220, 0x000001A1, + 0x010001A0, 0x000001A3, 0x010001A2, 0x000001A5, + 0x010001A4, 0x000001A8, 0x010001A7, 0x000001AD, + 0x010001AC, 0x000001B0, 0x010001AF, 0x000001B4, + 0x010001B3, 0x000001B6, 0x010001B5, 0x000001B9, + 0x010001B8, 0x000001BD, 0x010001BC, 0x000001BF, + 0x010001F7, 0x000001C5, 0x010001C4, 0x000001C6, + 0x010001C4, 0x000001C8, 0x010001C7, 0x000001C9, + 0x010001C7, 0x000001CB, 0x010001CA, 0x000001CC, + 0x010001CA, 0x000001CE, 0x010001CD, 0x000001D0, + 0x010001CF, 0x000001D2, 0x010001D1, 0x000001D4, + 0x010001D3, 0x000001D6, 0x010001D5, 0x000001D8, + 0x010001D7, 0x000001DA, 0x010001D9, 0x000001DC, + 0x010001DB, 0x000001DD, 0x0100018E, 0x000001DF, + 0x010001DE, 0x000001E1, 0x010001E0, 0x000001E3, + 0x010001E2, 0x000001E5, 0x010001E4, 0x000001E7, + 0x010001E6, 0x000001E9, 0x010001E8, 0x000001EB, + 0x010001EA, 0x000001ED, 0x010001EC, 0x000001EF, + 0x010001EE, 0x000001F0, 0x02000004, 0x000001F2, + 0x010001F1, 0x000001F3, 0x010001F1, 0x000001F5, + 0x010001F4, 0x000001F9, 0x010001F8, 0x000001FB, + 0x010001FA, 0x000001FD, 0x010001FC, 0x000001FF, + 0x010001FE, 0x00000201, 0x01000200, 0x00000203, + 0x01000202, 0x00000205, 0x01000204, 0x00000207, + 0x01000206, 0x00000209, 0x01000208, 0x0000020B, + 0x0100020A, 0x0000020D, 0x0100020C, 0x0000020F, + 0x0100020E, 0x00000211, 0x01000210, 0x00000213, + 0x01000212, 0x00000215, 0x01000214, 0x00000217, + 0x01000216, 0x00000219, 0x01000218, 0x0000021B, + 0x0100021A, 0x0000021D, 0x0100021C, 0x0000021F, + 0x0100021E, 0x00000223, 0x01000222, 0x00000225, + 0x01000224, 0x00000227, 0x01000226, 0x00000229, + 0x01000228, 0x0000022B, 0x0100022A, 0x0000022D, + 0x0100022C, 0x0000022F, 0x0100022E, 0x00000231, + 0x01000230, 0x00000233, 0x01000232, 0x0000023C, + 0x0100023B, 0x0000023F, 0x01002C7E, 0x00000240, + 0x01002C7F, 0x00000242, 0x01000241, 0x00000247, + 0x01000246, 0x00000249, 0x01000248, 0x0000024B, + 0x0100024A, 0x0000024D, 0x0100024C, 0x0000024F, + 0x0100024E, 0x00000250, 0x01002C6F, 0x00000251, + 0x01002C6D, 0x00000252, 0x01002C70, 0x00000253, + 0x01000181, 0x00000254, 0x01000186, 0x00000256, + 0x01000189, 0x00000257, 0x0100018A, 0x00000259, + 0x0100018F, 0x0000025B, 0x01000190, 0x0000025C, + 0x0100A7AB, 0x00000260, 0x01000193, 0x00000261, + 0x0100A7AC, 0x00000263, 0x01000194, 0x00000265, + 0x0100A78D, 0x00000266, 0x0100A7AA, 0x00000268, + 0x01000197, 0x00000269, 0x01000196, 0x0000026A, + 0x0100A7AE, 0x0000026B, 0x01002C62, 0x0000026C, + 0x0100A7AD, 0x0000026F, 0x0100019C, 0x00000271, + 0x01002C6E, 0x00000272, 0x0100019D, 0x00000275, + 0x0100019F, 0x0000027D, 0x01002C64, 0x00000280, + 0x010001A6, 0x00000282, 0x0100A7C5, 0x00000283, + 0x010001A9, 0x00000287, 0x0100A7B1, 0x00000288, + 0x010001AE, 0x00000289, 0x01000244, 0x0000028A, + 0x010001B1, 0x0000028B, 0x010001B2, 0x0000028C, + 0x01000245, 0x00000292, 0x010001B7, 0x0000029D, + 0x0100A7B2, 0x0000029E, 0x0100A7B0, 0x00000345, + 0x01000399, 0x00000371, 0x01000370, 0x00000373, + 0x01000372, 0x00000377, 0x01000376, 0x0000037B, + 0x010003FD, 0x0000037C, 0x010003FE, 0x0000037D, + 0x010003FF, 0x00000390, 0x03000006, 0x000003AC, + 0x01000386, 0x000003AD, 0x01000388, 0x000003AE, + 0x01000389, 0x000003AF, 0x0100038A, 0x000003B0, + 0x03000009, 0x000003B1, 0x01000391, 0x000003B2, + 0x01000392, 0x000003B3, 0x01000393, 0x000003B4, + 0x01000394, 0x000003B5, 0x01000395, 0x000003B6, + 0x01000396, 0x000003B7, 0x01000397, 0x000003B8, + 0x01000398, 0x000003B9, 0x01000399, 0x000003BA, + 0x0100039A, 0x000003BB, 0x0100039B, 0x000003BC, + 0x0100039C, 0x000003BD, 0x0100039D, 0x000003BE, + 0x0100039E, 0x000003BF, 0x0100039F, 0x000003C0, + 0x010003A0, 0x000003C1, 0x010003A1, 0x000003C2, + 0x010003A3, 0x000003C3, 0x010003A3, 0x000003C4, + 0x010003A4, 0x000003C5, 0x010003A5, 0x000003C6, + 0x010003A6, 0x000003C7, 0x010003A7, 0x000003C8, + 0x010003A8, 0x000003C9, 0x010003A9, 0x000003CA, + 0x010003AA, 0x000003CB, 0x010003AB, 0x000003CC, + 0x0100038C, 0x000003CD, 0x0100038E, 0x000003CE, + 0x0100038F, 0x000003D0, 0x01000392, 0x000003D1, + 0x01000398, 0x000003D5, 0x010003A6, 0x000003D6, + 0x010003A0, 0x000003D7, 0x010003CF, 0x000003D9, + 0x010003D8, 0x000003DB, 0x010003DA, 0x000003DD, + 0x010003DC, 0x000003DF, 0x010003DE, 0x000003E1, + 0x010003E0, 0x000003E3, 0x010003E2, 0x000003E5, + 0x010003E4, 0x000003E7, 0x010003E6, 0x000003E9, + 0x010003E8, 0x000003EB, 0x010003EA, 0x000003ED, + 0x010003EC, 0x000003EF, 0x010003EE, 0x000003F0, + 0x0100039A, 0x000003F1, 0x010003A1, 0x000003F2, + 0x010003F9, 0x000003F3, 0x0100037F, 0x000003F5, + 0x01000395, 0x000003F8, 0x010003F7, 0x000003FB, + 0x010003FA, 0x00000430, 0x01000410, 0x00000431, + 0x01000411, 0x00000432, 0x01000412, 0x00000433, + 0x01000413, 0x00000434, 0x01000414, 0x00000435, + 0x01000415, 0x00000436, 0x01000416, 0x00000437, + 0x01000417, 0x00000438, 0x01000418, 0x00000439, + 0x01000419, 0x0000043A, 0x0100041A, 0x0000043B, + 0x0100041B, 0x0000043C, 0x0100041C, 0x0000043D, + 0x0100041D, 0x0000043E, 0x0100041E, 0x0000043F, + 0x0100041F, 0x00000440, 0x01000420, 0x00000441, + 0x01000421, 0x00000442, 0x01000422, 0x00000443, + 0x01000423, 0x00000444, 0x01000424, 0x00000445, + 0x01000425, 0x00000446, 0x01000426, 0x00000447, + 0x01000427, 0x00000448, 0x01000428, 0x00000449, + 0x01000429, 0x0000044A, 0x0100042A, 0x0000044B, + 0x0100042B, 0x0000044C, 0x0100042C, 0x0000044D, + 0x0100042D, 0x0000044E, 0x0100042E, 0x0000044F, + 0x0100042F, 0x00000450, 0x01000400, 0x00000451, + 0x01000401, 0x00000452, 0x01000402, 0x00000453, + 0x01000403, 0x00000454, 0x01000404, 0x00000455, + 0x01000405, 0x00000456, 0x01000406, 0x00000457, + 0x01000407, 0x00000458, 0x01000408, 0x00000459, + 0x01000409, 0x0000045A, 0x0100040A, 0x0000045B, + 0x0100040B, 0x0000045C, 0x0100040C, 0x0000045D, + 0x0100040D, 0x0000045E, 0x0100040E, 0x0000045F, + 0x0100040F, 0x00000461, 0x01000460, 0x00000463, + 0x01000462, 0x00000465, 0x01000464, 0x00000467, + 0x01000466, 0x00000469, 0x01000468, 0x0000046B, + 0x0100046A, 0x0000046D, 0x0100046C, 0x0000046F, + 0x0100046E, 0x00000471, 0x01000470, 0x00000473, + 0x01000472, 0x00000475, 0x01000474, 0x00000477, + 0x01000476, 0x00000479, 0x01000478, 0x0000047B, + 0x0100047A, 0x0000047D, 0x0100047C, 0x0000047F, + 0x0100047E, 0x00000481, 0x01000480, 0x0000048B, + 0x0100048A, 0x0000048D, 0x0100048C, 0x0000048F, + 0x0100048E, 0x00000491, 0x01000490, 0x00000493, + 0x01000492, 0x00000495, 0x01000494, 0x00000497, + 0x01000496, 0x00000499, 0x01000498, 0x0000049B, + 0x0100049A, 0x0000049D, 0x0100049C, 0x0000049F, + 0x0100049E, 0x000004A1, 0x010004A0, 0x000004A3, + 0x010004A2, 0x000004A5, 0x010004A4, 0x000004A7, + 0x010004A6, 0x000004A9, 0x010004A8, 0x000004AB, + 0x010004AA, 0x000004AD, 0x010004AC, 0x000004AF, + 0x010004AE, 0x000004B1, 0x010004B0, 0x000004B3, + 0x010004B2, 0x000004B5, 0x010004B4, 0x000004B7, + 0x010004B6, 0x000004B9, 0x010004B8, 0x000004BB, + 0x010004BA, 0x000004BD, 0x010004BC, 0x000004BF, + 0x010004BE, 0x000004C2, 0x010004C1, 0x000004C4, + 0x010004C3, 0x000004C6, 0x010004C5, 0x000004C8, + 0x010004C7, 0x000004CA, 0x010004C9, 0x000004CC, + 0x010004CB, 0x000004CE, 0x010004CD, 0x000004CF, + 0x010004C0, 0x000004D1, 0x010004D0, 0x000004D3, + 0x010004D2, 0x000004D5, 0x010004D4, 0x000004D7, + 0x010004D6, 0x000004D9, 0x010004D8, 0x000004DB, + 0x010004DA, 0x000004DD, 0x010004DC, 0x000004DF, + 0x010004DE, 0x000004E1, 0x010004E0, 0x000004E3, + 0x010004E2, 0x000004E5, 0x010004E4, 0x000004E7, + 0x010004E6, 0x000004E9, 0x010004E8, 0x000004EB, + 0x010004EA, 0x000004ED, 0x010004EC, 0x000004EF, + 0x010004EE, 0x000004F1, 0x010004F0, 0x000004F3, + 0x010004F2, 0x000004F5, 0x010004F4, 0x000004F7, + 0x010004F6, 0x000004F9, 0x010004F8, 0x000004FB, + 0x010004FA, 0x000004FD, 0x010004FC, 0x000004FF, + 0x010004FE, 0x00000501, 0x01000500, 0x00000503, + 0x01000502, 0x00000505, 0x01000504, 0x00000507, + 0x01000506, 0x00000509, 0x01000508, 0x0000050B, + 0x0100050A, 0x0000050D, 0x0100050C, 0x0000050F, + 0x0100050E, 0x00000511, 0x01000510, 0x00000513, + 0x01000512, 0x00000515, 0x01000514, 0x00000517, + 0x01000516, 0x00000519, 0x01000518, 0x0000051B, + 0x0100051A, 0x0000051D, 0x0100051C, 0x0000051F, + 0x0100051E, 0x00000521, 0x01000520, 0x00000523, + 0x01000522, 0x00000525, 0x01000524, 0x00000527, + 0x01000526, 0x00000529, 0x01000528, 0x0000052B, + 0x0100052A, 0x0000052D, 0x0100052C, 0x0000052F, + 0x0100052E, 0x00000561, 0x01000531, 0x00000562, + 0x01000532, 0x00000563, 0x01000533, 0x00000564, + 0x01000534, 0x00000565, 0x01000535, 0x00000566, + 0x01000536, 0x00000567, 0x01000537, 0x00000568, + 0x01000538, 0x00000569, 0x01000539, 0x0000056A, + 0x0100053A, 0x0000056B, 0x0100053B, 0x0000056C, + 0x0100053C, 0x0000056D, 0x0100053D, 0x0000056E, + 0x0100053E, 0x0000056F, 0x0100053F, 0x00000570, + 0x01000540, 0x00000571, 0x01000541, 0x00000572, + 0x01000542, 0x00000573, 0x01000543, 0x00000574, + 0x01000544, 0x00000575, 0x01000545, 0x00000576, + 0x01000546, 0x00000577, 0x01000547, 0x00000578, + 0x01000548, 0x00000579, 0x01000549, 0x0000057A, + 0x0100054A, 0x0000057B, 0x0100054B, 0x0000057C, + 0x0100054C, 0x0000057D, 0x0100054D, 0x0000057E, + 0x0100054E, 0x0000057F, 0x0100054F, 0x00000580, + 0x01000550, 0x00000581, 0x01000551, 0x00000582, + 0x01000552, 0x00000583, 0x01000553, 0x00000584, + 0x01000554, 0x00000585, 0x01000555, 0x00000586, + 0x01000556, 0x00000587, 0x0200000C, 0x000010D0, + 0x01001C90, 0x000010D1, 0x01001C91, 0x000010D2, + 0x01001C92, 0x000010D3, 0x01001C93, 0x000010D4, + 0x01001C94, 0x000010D5, 0x01001C95, 0x000010D6, + 0x01001C96, 0x000010D7, 0x01001C97, 0x000010D8, + 0x01001C98, 0x000010D9, 0x01001C99, 0x000010DA, + 0x01001C9A, 0x000010DB, 0x01001C9B, 0x000010DC, + 0x01001C9C, 0x000010DD, 0x01001C9D, 0x000010DE, + 0x01001C9E, 0x000010DF, 0x01001C9F, 0x000010E0, + 0x01001CA0, 0x000010E1, 0x01001CA1, 0x000010E2, + 0x01001CA2, 0x000010E3, 0x01001CA3, 0x000010E4, + 0x01001CA4, 0x000010E5, 0x01001CA5, 0x000010E6, + 0x01001CA6, 0x000010E7, 0x01001CA7, 0x000010E8, + 0x01001CA8, 0x000010E9, 0x01001CA9, 0x000010EA, + 0x01001CAA, 0x000010EB, 0x01001CAB, 0x000010EC, + 0x01001CAC, 0x000010ED, 0x01001CAD, 0x000010EE, + 0x01001CAE, 0x000010EF, 0x01001CAF, 0x000010F0, + 0x01001CB0, 0x000010F1, 0x01001CB1, 0x000010F2, + 0x01001CB2, 0x000010F3, 0x01001CB3, 0x000010F4, + 0x01001CB4, 0x000010F5, 0x01001CB5, 0x000010F6, + 0x01001CB6, 0x000010F7, 0x01001CB7, 0x000010F8, + 0x01001CB8, 0x000010F9, 0x01001CB9, 0x000010FA, + 0x01001CBA, 0x000010FD, 0x01001CBD, 0x000010FE, + 0x01001CBE, 0x000010FF, 0x01001CBF, 0x000013F8, + 0x010013F0, 0x000013F9, 0x010013F1, 0x000013FA, + 0x010013F2, 0x000013FB, 0x010013F3, 0x000013FC, + 0x010013F4, 0x000013FD, 0x010013F5, 0x00001C80, + 0x01000412, 0x00001C81, 0x01000414, 0x00001C82, + 0x0100041E, 0x00001C83, 0x01000421, 0x00001C84, + 0x01000422, 0x00001C85, 0x01000422, 0x00001C86, + 0x0100042A, 0x00001C87, 0x01000462, 0x00001C88, + 0x0100A64A, 0x00001D79, 0x0100A77D, 0x00001D7D, + 0x01002C63, 0x00001D8E, 0x0100A7C6, 0x00001E01, + 0x01001E00, 0x00001E03, 0x01001E02, 0x00001E05, + 0x01001E04, 0x00001E07, 0x01001E06, 0x00001E09, + 0x01001E08, 0x00001E0B, 0x01001E0A, 0x00001E0D, + 0x01001E0C, 0x00001E0F, 0x01001E0E, 0x00001E11, + 0x01001E10, 0x00001E13, 0x01001E12, 0x00001E15, + 0x01001E14, 0x00001E17, 0x01001E16, 0x00001E19, + 0x01001E18, 0x00001E1B, 0x01001E1A, 0x00001E1D, + 0x01001E1C, 0x00001E1F, 0x01001E1E, 0x00001E21, + 0x01001E20, 0x00001E23, 0x01001E22, 0x00001E25, + 0x01001E24, 0x00001E27, 0x01001E26, 0x00001E29, + 0x01001E28, 0x00001E2B, 0x01001E2A, 0x00001E2D, + 0x01001E2C, 0x00001E2F, 0x01001E2E, 0x00001E31, + 0x01001E30, 0x00001E33, 0x01001E32, 0x00001E35, + 0x01001E34, 0x00001E37, 0x01001E36, 0x00001E39, + 0x01001E38, 0x00001E3B, 0x01001E3A, 0x00001E3D, + 0x01001E3C, 0x00001E3F, 0x01001E3E, 0x00001E41, + 0x01001E40, 0x00001E43, 0x01001E42, 0x00001E45, + 0x01001E44, 0x00001E47, 0x01001E46, 0x00001E49, + 0x01001E48, 0x00001E4B, 0x01001E4A, 0x00001E4D, + 0x01001E4C, 0x00001E4F, 0x01001E4E, 0x00001E51, + 0x01001E50, 0x00001E53, 0x01001E52, 0x00001E55, + 0x01001E54, 0x00001E57, 0x01001E56, 0x00001E59, + 0x01001E58, 0x00001E5B, 0x01001E5A, 0x00001E5D, + 0x01001E5C, 0x00001E5F, 0x01001E5E, 0x00001E61, + 0x01001E60, 0x00001E63, 0x01001E62, 0x00001E65, + 0x01001E64, 0x00001E67, 0x01001E66, 0x00001E69, + 0x01001E68, 0x00001E6B, 0x01001E6A, 0x00001E6D, + 0x01001E6C, 0x00001E6F, 0x01001E6E, 0x00001E71, + 0x01001E70, 0x00001E73, 0x01001E72, 0x00001E75, + 0x01001E74, 0x00001E77, 0x01001E76, 0x00001E79, + 0x01001E78, 0x00001E7B, 0x01001E7A, 0x00001E7D, + 0x01001E7C, 0x00001E7F, 0x01001E7E, 0x00001E81, + 0x01001E80, 0x00001E83, 0x01001E82, 0x00001E85, + 0x01001E84, 0x00001E87, 0x01001E86, 0x00001E89, + 0x01001E88, 0x00001E8B, 0x01001E8A, 0x00001E8D, + 0x01001E8C, 0x00001E8F, 0x01001E8E, 0x00001E91, + 0x01001E90, 0x00001E93, 0x01001E92, 0x00001E95, + 0x01001E94, 0x00001E96, 0x0200000E, 0x00001E97, + 0x02000010, 0x00001E98, 0x02000012, 0x00001E99, + 0x02000014, 0x00001E9A, 0x02000016, 0x00001E9B, + 0x01001E60, 0x00001EA1, 0x01001EA0, 0x00001EA3, + 0x01001EA2, 0x00001EA5, 0x01001EA4, 0x00001EA7, + 0x01001EA6, 0x00001EA9, 0x01001EA8, 0x00001EAB, + 0x01001EAA, 0x00001EAD, 0x01001EAC, 0x00001EAF, + 0x01001EAE, 0x00001EB1, 0x01001EB0, 0x00001EB3, + 0x01001EB2, 0x00001EB5, 0x01001EB4, 0x00001EB7, + 0x01001EB6, 0x00001EB9, 0x01001EB8, 0x00001EBB, + 0x01001EBA, 0x00001EBD, 0x01001EBC, 0x00001EBF, + 0x01001EBE, 0x00001EC1, 0x01001EC0, 0x00001EC3, + 0x01001EC2, 0x00001EC5, 0x01001EC4, 0x00001EC7, + 0x01001EC6, 0x00001EC9, 0x01001EC8, 0x00001ECB, + 0x01001ECA, 0x00001ECD, 0x01001ECC, 0x00001ECF, + 0x01001ECE, 0x00001ED1, 0x01001ED0, 0x00001ED3, + 0x01001ED2, 0x00001ED5, 0x01001ED4, 0x00001ED7, + 0x01001ED6, 0x00001ED9, 0x01001ED8, 0x00001EDB, + 0x01001EDA, 0x00001EDD, 0x01001EDC, 0x00001EDF, + 0x01001EDE, 0x00001EE1, 0x01001EE0, 0x00001EE3, + 0x01001EE2, 0x00001EE5, 0x01001EE4, 0x00001EE7, + 0x01001EE6, 0x00001EE9, 0x01001EE8, 0x00001EEB, + 0x01001EEA, 0x00001EED, 0x01001EEC, 0x00001EEF, + 0x01001EEE, 0x00001EF1, 0x01001EF0, 0x00001EF3, + 0x01001EF2, 0x00001EF5, 0x01001EF4, 0x00001EF7, + 0x01001EF6, 0x00001EF9, 0x01001EF8, 0x00001EFB, + 0x01001EFA, 0x00001EFD, 0x01001EFC, 0x00001EFF, + 0x01001EFE, 0x00001F00, 0x01001F08, 0x00001F01, + 0x01001F09, 0x00001F02, 0x01001F0A, 0x00001F03, + 0x01001F0B, 0x00001F04, 0x01001F0C, 0x00001F05, + 0x01001F0D, 0x00001F06, 0x01001F0E, 0x00001F07, + 0x01001F0F, 0x00001F10, 0x01001F18, 0x00001F11, + 0x01001F19, 0x00001F12, 0x01001F1A, 0x00001F13, + 0x01001F1B, 0x00001F14, 0x01001F1C, 0x00001F15, + 0x01001F1D, 0x00001F20, 0x01001F28, 0x00001F21, + 0x01001F29, 0x00001F22, 0x01001F2A, 0x00001F23, + 0x01001F2B, 0x00001F24, 0x01001F2C, 0x00001F25, + 0x01001F2D, 0x00001F26, 0x01001F2E, 0x00001F27, + 0x01001F2F, 0x00001F30, 0x01001F38, 0x00001F31, + 0x01001F39, 0x00001F32, 0x01001F3A, 0x00001F33, + 0x01001F3B, 0x00001F34, 0x01001F3C, 0x00001F35, + 0x01001F3D, 0x00001F36, 0x01001F3E, 0x00001F37, + 0x01001F3F, 0x00001F40, 0x01001F48, 0x00001F41, + 0x01001F49, 0x00001F42, 0x01001F4A, 0x00001F43, + 0x01001F4B, 0x00001F44, 0x01001F4C, 0x00001F45, + 0x01001F4D, 0x00001F50, 0x02000018, 0x00001F51, + 0x01001F59, 0x00001F52, 0x0300001A, 0x00001F53, + 0x01001F5B, 0x00001F54, 0x0300001D, 0x00001F55, + 0x01001F5D, 0x00001F56, 0x03000020, 0x00001F57, + 0x01001F5F, 0x00001F60, 0x01001F68, 0x00001F61, + 0x01001F69, 0x00001F62, 0x01001F6A, 0x00001F63, + 0x01001F6B, 0x00001F64, 0x01001F6C, 0x00001F65, + 0x01001F6D, 0x00001F66, 0x01001F6E, 0x00001F67, + 0x01001F6F, 0x00001F70, 0x01001FBA, 0x00001F71, + 0x01001FBB, 0x00001F72, 0x01001FC8, 0x00001F73, + 0x01001FC9, 0x00001F74, 0x01001FCA, 0x00001F75, + 0x01001FCB, 0x00001F76, 0x01001FDA, 0x00001F77, + 0x01001FDB, 0x00001F78, 0x01001FF8, 0x00001F79, + 0x01001FF9, 0x00001F7A, 0x01001FEA, 0x00001F7B, + 0x01001FEB, 0x00001F7C, 0x01001FFA, 0x00001F7D, + 0x01001FFB, 0x00001F80, 0x02000023, 0x00001F81, + 0x02000025, 0x00001F82, 0x02000027, 0x00001F83, + 0x02000029, 0x00001F84, 0x0200002B, 0x00001F85, + 0x0200002D, 0x00001F86, 0x0200002F, 0x00001F87, + 0x02000031, 0x00001F88, 0x02000033, 0x00001F89, + 0x02000035, 0x00001F8A, 0x02000037, 0x00001F8B, + 0x02000039, 0x00001F8C, 0x0200003B, 0x00001F8D, + 0x0200003D, 0x00001F8E, 0x0200003F, 0x00001F8F, + 0x02000041, 0x00001F90, 0x02000043, 0x00001F91, + 0x02000045, 0x00001F92, 0x02000047, 0x00001F93, + 0x02000049, 0x00001F94, 0x0200004B, 0x00001F95, + 0x0200004D, 0x00001F96, 0x0200004F, 0x00001F97, + 0x02000051, 0x00001F98, 0x02000053, 0x00001F99, + 0x02000055, 0x00001F9A, 0x02000057, 0x00001F9B, + 0x02000059, 0x00001F9C, 0x0200005B, 0x00001F9D, + 0x0200005D, 0x00001F9E, 0x0200005F, 0x00001F9F, + 0x02000061, 0x00001FA0, 0x02000063, 0x00001FA1, + 0x02000065, 0x00001FA2, 0x02000067, 0x00001FA3, + 0x02000069, 0x00001FA4, 0x0200006B, 0x00001FA5, + 0x0200006D, 0x00001FA6, 0x0200006F, 0x00001FA7, + 0x02000071, 0x00001FA8, 0x02000073, 0x00001FA9, + 0x02000075, 0x00001FAA, 0x02000077, 0x00001FAB, + 0x02000079, 0x00001FAC, 0x0200007B, 0x00001FAD, + 0x0200007D, 0x00001FAE, 0x0200007F, 0x00001FAF, + 0x02000081, 0x00001FB0, 0x01001FB8, 0x00001FB1, + 0x01001FB9, 0x00001FB2, 0x02000083, 0x00001FB3, + 0x02000085, 0x00001FB4, 0x02000087, 0x00001FB6, + 0x02000089, 0x00001FB7, 0x0300008B, 0x00001FBC, + 0x0200008E, 0x00001FBE, 0x01000399, 0x00001FC2, + 0x02000090, 0x00001FC3, 0x02000092, 0x00001FC4, + 0x02000094, 0x00001FC6, 0x02000096, 0x00001FC7, + 0x03000098, 0x00001FCC, 0x0200009B, 0x00001FD0, + 0x01001FD8, 0x00001FD1, 0x01001FD9, 0x00001FD2, + 0x0300009D, 0x00001FD3, 0x030000A0, 0x00001FD6, + 0x020000A3, 0x00001FD7, 0x030000A5, 0x00001FE0, + 0x01001FE8, 0x00001FE1, 0x01001FE9, 0x00001FE2, + 0x030000A8, 0x00001FE3, 0x030000AB, 0x00001FE4, + 0x020000AE, 0x00001FE5, 0x01001FEC, 0x00001FE6, + 0x020000B0, 0x00001FE7, 0x030000B2, 0x00001FF2, + 0x020000B5, 0x00001FF3, 0x020000B7, 0x00001FF4, + 0x020000B9, 0x00001FF6, 0x020000BB, 0x00001FF7, + 0x030000BD, 0x00001FFC, 0x020000C0, 0x0000214E, + 0x01002132, 0x00002170, 0x01002160, 0x00002171, + 0x01002161, 0x00002172, 0x01002162, 0x00002173, + 0x01002163, 0x00002174, 0x01002164, 0x00002175, + 0x01002165, 0x00002176, 0x01002166, 0x00002177, + 0x01002167, 0x00002178, 0x01002168, 0x00002179, + 0x01002169, 0x0000217A, 0x0100216A, 0x0000217B, + 0x0100216B, 0x0000217C, 0x0100216C, 0x0000217D, + 0x0100216D, 0x0000217E, 0x0100216E, 0x0000217F, + 0x0100216F, 0x00002184, 0x01002183, 0x000024D0, + 0x010024B6, 0x000024D1, 0x010024B7, 0x000024D2, + 0x010024B8, 0x000024D3, 0x010024B9, 0x000024D4, + 0x010024BA, 0x000024D5, 0x010024BB, 0x000024D6, + 0x010024BC, 0x000024D7, 0x010024BD, 0x000024D8, + 0x010024BE, 0x000024D9, 0x010024BF, 0x000024DA, + 0x010024C0, 0x000024DB, 0x010024C1, 0x000024DC, + 0x010024C2, 0x000024DD, 0x010024C3, 0x000024DE, + 0x010024C4, 0x000024DF, 0x010024C5, 0x000024E0, + 0x010024C6, 0x000024E1, 0x010024C7, 0x000024E2, + 0x010024C8, 0x000024E3, 0x010024C9, 0x000024E4, + 0x010024CA, 0x000024E5, 0x010024CB, 0x000024E6, + 0x010024CC, 0x000024E7, 0x010024CD, 0x000024E8, + 0x010024CE, 0x000024E9, 0x010024CF, 0x00002C30, + 0x01002C00, 0x00002C31, 0x01002C01, 0x00002C32, + 0x01002C02, 0x00002C33, 0x01002C03, 0x00002C34, + 0x01002C04, 0x00002C35, 0x01002C05, 0x00002C36, + 0x01002C06, 0x00002C37, 0x01002C07, 0x00002C38, + 0x01002C08, 0x00002C39, 0x01002C09, 0x00002C3A, + 0x01002C0A, 0x00002C3B, 0x01002C0B, 0x00002C3C, + 0x01002C0C, 0x00002C3D, 0x01002C0D, 0x00002C3E, + 0x01002C0E, 0x00002C3F, 0x01002C0F, 0x00002C40, + 0x01002C10, 0x00002C41, 0x01002C11, 0x00002C42, + 0x01002C12, 0x00002C43, 0x01002C13, 0x00002C44, + 0x01002C14, 0x00002C45, 0x01002C15, 0x00002C46, + 0x01002C16, 0x00002C47, 0x01002C17, 0x00002C48, + 0x01002C18, 0x00002C49, 0x01002C19, 0x00002C4A, + 0x01002C1A, 0x00002C4B, 0x01002C1B, 0x00002C4C, + 0x01002C1C, 0x00002C4D, 0x01002C1D, 0x00002C4E, + 0x01002C1E, 0x00002C4F, 0x01002C1F, 0x00002C50, + 0x01002C20, 0x00002C51, 0x01002C21, 0x00002C52, + 0x01002C22, 0x00002C53, 0x01002C23, 0x00002C54, + 0x01002C24, 0x00002C55, 0x01002C25, 0x00002C56, + 0x01002C26, 0x00002C57, 0x01002C27, 0x00002C58, + 0x01002C28, 0x00002C59, 0x01002C29, 0x00002C5A, + 0x01002C2A, 0x00002C5B, 0x01002C2B, 0x00002C5C, + 0x01002C2C, 0x00002C5D, 0x01002C2D, 0x00002C5E, + 0x01002C2E, 0x00002C5F, 0x01002C2F, 0x00002C61, + 0x01002C60, 0x00002C65, 0x0100023A, 0x00002C66, + 0x0100023E, 0x00002C68, 0x01002C67, 0x00002C6A, + 0x01002C69, 0x00002C6C, 0x01002C6B, 0x00002C73, + 0x01002C72, 0x00002C76, 0x01002C75, 0x00002C81, + 0x01002C80, 0x00002C83, 0x01002C82, 0x00002C85, + 0x01002C84, 0x00002C87, 0x01002C86, 0x00002C89, + 0x01002C88, 0x00002C8B, 0x01002C8A, 0x00002C8D, + 0x01002C8C, 0x00002C8F, 0x01002C8E, 0x00002C91, + 0x01002C90, 0x00002C93, 0x01002C92, 0x00002C95, + 0x01002C94, 0x00002C97, 0x01002C96, 0x00002C99, + 0x01002C98, 0x00002C9B, 0x01002C9A, 0x00002C9D, + 0x01002C9C, 0x00002C9F, 0x01002C9E, 0x00002CA1, + 0x01002CA0, 0x00002CA3, 0x01002CA2, 0x00002CA5, + 0x01002CA4, 0x00002CA7, 0x01002CA6, 0x00002CA9, + 0x01002CA8, 0x00002CAB, 0x01002CAA, 0x00002CAD, + 0x01002CAC, 0x00002CAF, 0x01002CAE, 0x00002CB1, + 0x01002CB0, 0x00002CB3, 0x01002CB2, 0x00002CB5, + 0x01002CB4, 0x00002CB7, 0x01002CB6, 0x00002CB9, + 0x01002CB8, 0x00002CBB, 0x01002CBA, 0x00002CBD, + 0x01002CBC, 0x00002CBF, 0x01002CBE, 0x00002CC1, + 0x01002CC0, 0x00002CC3, 0x01002CC2, 0x00002CC5, + 0x01002CC4, 0x00002CC7, 0x01002CC6, 0x00002CC9, + 0x01002CC8, 0x00002CCB, 0x01002CCA, 0x00002CCD, + 0x01002CCC, 0x00002CCF, 0x01002CCE, 0x00002CD1, + 0x01002CD0, 0x00002CD3, 0x01002CD2, 0x00002CD5, + 0x01002CD4, 0x00002CD7, 0x01002CD6, 0x00002CD9, + 0x01002CD8, 0x00002CDB, 0x01002CDA, 0x00002CDD, + 0x01002CDC, 0x00002CDF, 0x01002CDE, 0x00002CE1, + 0x01002CE0, 0x00002CE3, 0x01002CE2, 0x00002CEC, + 0x01002CEB, 0x00002CEE, 0x01002CED, 0x00002CF3, + 0x01002CF2, 0x00002D00, 0x010010A0, 0x00002D01, + 0x010010A1, 0x00002D02, 0x010010A2, 0x00002D03, + 0x010010A3, 0x00002D04, 0x010010A4, 0x00002D05, + 0x010010A5, 0x00002D06, 0x010010A6, 0x00002D07, + 0x010010A7, 0x00002D08, 0x010010A8, 0x00002D09, + 0x010010A9, 0x00002D0A, 0x010010AA, 0x00002D0B, + 0x010010AB, 0x00002D0C, 0x010010AC, 0x00002D0D, + 0x010010AD, 0x00002D0E, 0x010010AE, 0x00002D0F, + 0x010010AF, 0x00002D10, 0x010010B0, 0x00002D11, + 0x010010B1, 0x00002D12, 0x010010B2, 0x00002D13, + 0x010010B3, 0x00002D14, 0x010010B4, 0x00002D15, + 0x010010B5, 0x00002D16, 0x010010B6, 0x00002D17, + 0x010010B7, 0x00002D18, 0x010010B8, 0x00002D19, + 0x010010B9, 0x00002D1A, 0x010010BA, 0x00002D1B, + 0x010010BB, 0x00002D1C, 0x010010BC, 0x00002D1D, + 0x010010BD, 0x00002D1E, 0x010010BE, 0x00002D1F, + 0x010010BF, 0x00002D20, 0x010010C0, 0x00002D21, + 0x010010C1, 0x00002D22, 0x010010C2, 0x00002D23, + 0x010010C3, 0x00002D24, 0x010010C4, 0x00002D25, + 0x010010C5, 0x00002D27, 0x010010C7, 0x00002D2D, + 0x010010CD, 0x0000A641, 0x0100A640, 0x0000A643, + 0x0100A642, 0x0000A645, 0x0100A644, 0x0000A647, + 0x0100A646, 0x0000A649, 0x0100A648, 0x0000A64B, + 0x0100A64A, 0x0000A64D, 0x0100A64C, 0x0000A64F, + 0x0100A64E, 0x0000A651, 0x0100A650, 0x0000A653, + 0x0100A652, 0x0000A655, 0x0100A654, 0x0000A657, + 0x0100A656, 0x0000A659, 0x0100A658, 0x0000A65B, + 0x0100A65A, 0x0000A65D, 0x0100A65C, 0x0000A65F, + 0x0100A65E, 0x0000A661, 0x0100A660, 0x0000A663, + 0x0100A662, 0x0000A665, 0x0100A664, 0x0000A667, + 0x0100A666, 0x0000A669, 0x0100A668, 0x0000A66B, + 0x0100A66A, 0x0000A66D, 0x0100A66C, 0x0000A681, + 0x0100A680, 0x0000A683, 0x0100A682, 0x0000A685, + 0x0100A684, 0x0000A687, 0x0100A686, 0x0000A689, + 0x0100A688, 0x0000A68B, 0x0100A68A, 0x0000A68D, + 0x0100A68C, 0x0000A68F, 0x0100A68E, 0x0000A691, + 0x0100A690, 0x0000A693, 0x0100A692, 0x0000A695, + 0x0100A694, 0x0000A697, 0x0100A696, 0x0000A699, + 0x0100A698, 0x0000A69B, 0x0100A69A, 0x0000A723, + 0x0100A722, 0x0000A725, 0x0100A724, 0x0000A727, + 0x0100A726, 0x0000A729, 0x0100A728, 0x0000A72B, + 0x0100A72A, 0x0000A72D, 0x0100A72C, 0x0000A72F, + 0x0100A72E, 0x0000A733, 0x0100A732, 0x0000A735, + 0x0100A734, 0x0000A737, 0x0100A736, 0x0000A739, + 0x0100A738, 0x0000A73B, 0x0100A73A, 0x0000A73D, + 0x0100A73C, 0x0000A73F, 0x0100A73E, 0x0000A741, + 0x0100A740, 0x0000A743, 0x0100A742, 0x0000A745, + 0x0100A744, 0x0000A747, 0x0100A746, 0x0000A749, + 0x0100A748, 0x0000A74B, 0x0100A74A, 0x0000A74D, + 0x0100A74C, 0x0000A74F, 0x0100A74E, 0x0000A751, + 0x0100A750, 0x0000A753, 0x0100A752, 0x0000A755, + 0x0100A754, 0x0000A757, 0x0100A756, 0x0000A759, + 0x0100A758, 0x0000A75B, 0x0100A75A, 0x0000A75D, + 0x0100A75C, 0x0000A75F, 0x0100A75E, 0x0000A761, + 0x0100A760, 0x0000A763, 0x0100A762, 0x0000A765, + 0x0100A764, 0x0000A767, 0x0100A766, 0x0000A769, + 0x0100A768, 0x0000A76B, 0x0100A76A, 0x0000A76D, + 0x0100A76C, 0x0000A76F, 0x0100A76E, 0x0000A77A, + 0x0100A779, 0x0000A77C, 0x0100A77B, 0x0000A77F, + 0x0100A77E, 0x0000A781, 0x0100A780, 0x0000A783, + 0x0100A782, 0x0000A785, 0x0100A784, 0x0000A787, + 0x0100A786, 0x0000A78C, 0x0100A78B, 0x0000A791, + 0x0100A790, 0x0000A793, 0x0100A792, 0x0000A794, + 0x0100A7C4, 0x0000A797, 0x0100A796, 0x0000A799, + 0x0100A798, 0x0000A79B, 0x0100A79A, 0x0000A79D, + 0x0100A79C, 0x0000A79F, 0x0100A79E, 0x0000A7A1, + 0x0100A7A0, 0x0000A7A3, 0x0100A7A2, 0x0000A7A5, + 0x0100A7A4, 0x0000A7A7, 0x0100A7A6, 0x0000A7A9, + 0x0100A7A8, 0x0000A7B5, 0x0100A7B4, 0x0000A7B7, + 0x0100A7B6, 0x0000A7B9, 0x0100A7B8, 0x0000A7BB, + 0x0100A7BA, 0x0000A7BD, 0x0100A7BC, 0x0000A7BF, + 0x0100A7BE, 0x0000A7C1, 0x0100A7C0, 0x0000A7C3, + 0x0100A7C2, 0x0000A7C8, 0x0100A7C7, 0x0000A7CA, + 0x0100A7C9, 0x0000A7D1, 0x0100A7D0, 0x0000A7D7, + 0x0100A7D6, 0x0000A7D9, 0x0100A7D8, 0x0000A7F6, + 0x0100A7F5, 0x0000AB53, 0x0100A7B3, 0x0000AB70, + 0x010013A0, 0x0000AB71, 0x010013A1, 0x0000AB72, + 0x010013A2, 0x0000AB73, 0x010013A3, 0x0000AB74, + 0x010013A4, 0x0000AB75, 0x010013A5, 0x0000AB76, + 0x010013A6, 0x0000AB77, 0x010013A7, 0x0000AB78, + 0x010013A8, 0x0000AB79, 0x010013A9, 0x0000AB7A, + 0x010013AA, 0x0000AB7B, 0x010013AB, 0x0000AB7C, + 0x010013AC, 0x0000AB7D, 0x010013AD, 0x0000AB7E, + 0x010013AE, 0x0000AB7F, 0x010013AF, 0x0000AB80, + 0x010013B0, 0x0000AB81, 0x010013B1, 0x0000AB82, + 0x010013B2, 0x0000AB83, 0x010013B3, 0x0000AB84, + 0x010013B4, 0x0000AB85, 0x010013B5, 0x0000AB86, + 0x010013B6, 0x0000AB87, 0x010013B7, 0x0000AB88, + 0x010013B8, 0x0000AB89, 0x010013B9, 0x0000AB8A, + 0x010013BA, 0x0000AB8B, 0x010013BB, 0x0000AB8C, + 0x010013BC, 0x0000AB8D, 0x010013BD, 0x0000AB8E, + 0x010013BE, 0x0000AB8F, 0x010013BF, 0x0000AB90, + 0x010013C0, 0x0000AB91, 0x010013C1, 0x0000AB92, + 0x010013C2, 0x0000AB93, 0x010013C3, 0x0000AB94, + 0x010013C4, 0x0000AB95, 0x010013C5, 0x0000AB96, + 0x010013C6, 0x0000AB97, 0x010013C7, 0x0000AB98, + 0x010013C8, 0x0000AB99, 0x010013C9, 0x0000AB9A, + 0x010013CA, 0x0000AB9B, 0x010013CB, 0x0000AB9C, + 0x010013CC, 0x0000AB9D, 0x010013CD, 0x0000AB9E, + 0x010013CE, 0x0000AB9F, 0x010013CF, 0x0000ABA0, + 0x010013D0, 0x0000ABA1, 0x010013D1, 0x0000ABA2, + 0x010013D2, 0x0000ABA3, 0x010013D3, 0x0000ABA4, + 0x010013D4, 0x0000ABA5, 0x010013D5, 0x0000ABA6, + 0x010013D6, 0x0000ABA7, 0x010013D7, 0x0000ABA8, + 0x010013D8, 0x0000ABA9, 0x010013D9, 0x0000ABAA, + 0x010013DA, 0x0000ABAB, 0x010013DB, 0x0000ABAC, + 0x010013DC, 0x0000ABAD, 0x010013DD, 0x0000ABAE, + 0x010013DE, 0x0000ABAF, 0x010013DF, 0x0000ABB0, + 0x010013E0, 0x0000ABB1, 0x010013E1, 0x0000ABB2, + 0x010013E2, 0x0000ABB3, 0x010013E3, 0x0000ABB4, + 0x010013E4, 0x0000ABB5, 0x010013E5, 0x0000ABB6, + 0x010013E6, 0x0000ABB7, 0x010013E7, 0x0000ABB8, + 0x010013E8, 0x0000ABB9, 0x010013E9, 0x0000ABBA, + 0x010013EA, 0x0000ABBB, 0x010013EB, 0x0000ABBC, + 0x010013EC, 0x0000ABBD, 0x010013ED, 0x0000ABBE, + 0x010013EE, 0x0000ABBF, 0x010013EF, 0x0000FB00, + 0x020000C2, 0x0000FB01, 0x020000C4, 0x0000FB02, + 0x020000C6, 0x0000FB03, 0x030000C8, 0x0000FB04, + 0x030000CB, 0x0000FB05, 0x020000CE, 0x0000FB06, + 0x020000D0, 0x0000FB13, 0x020000D2, 0x0000FB14, + 0x020000D4, 0x0000FB15, 0x020000D6, 0x0000FB16, + 0x020000D8, 0x0000FB17, 0x020000DA, 0x0000FF41, + 0x0100FF21, 0x0000FF42, 0x0100FF22, 0x0000FF43, + 0x0100FF23, 0x0000FF44, 0x0100FF24, 0x0000FF45, + 0x0100FF25, 0x0000FF46, 0x0100FF26, 0x0000FF47, + 0x0100FF27, 0x0000FF48, 0x0100FF28, 0x0000FF49, + 0x0100FF29, 0x0000FF4A, 0x0100FF2A, 0x0000FF4B, + 0x0100FF2B, 0x0000FF4C, 0x0100FF2C, 0x0000FF4D, + 0x0100FF2D, 0x0000FF4E, 0x0100FF2E, 0x0000FF4F, + 0x0100FF2F, 0x0000FF50, 0x0100FF30, 0x0000FF51, + 0x0100FF31, 0x0000FF52, 0x0100FF32, 0x0000FF53, + 0x0100FF33, 0x0000FF54, 0x0100FF34, 0x0000FF55, + 0x0100FF35, 0x0000FF56, 0x0100FF36, 0x0000FF57, + 0x0100FF37, 0x0000FF58, 0x0100FF38, 0x0000FF59, + 0x0100FF39, 0x0000FF5A, 0x0100FF3A, 0x00010428, + 0x81010400, 0x00010429, 0x81010401, 0x0001042A, + 0x81010402, 0x0001042B, 0x81010403, 0x0001042C, + 0x81010404, 0x0001042D, 0x81010405, 0x0001042E, + 0x81010406, 0x0001042F, 0x81010407, 0x00010430, + 0x81010408, 0x00010431, 0x81010409, 0x00010432, + 0x8101040A, 0x00010433, 0x8101040B, 0x00010434, + 0x8101040C, 0x00010435, 0x8101040D, 0x00010436, + 0x8101040E, 0x00010437, 0x8101040F, 0x00010438, + 0x81010410, 0x00010439, 0x81010411, 0x0001043A, + 0x81010412, 0x0001043B, 0x81010413, 0x0001043C, + 0x81010414, 0x0001043D, 0x81010415, 0x0001043E, + 0x81010416, 0x0001043F, 0x81010417, 0x00010440, + 0x81010418, 0x00010441, 0x81010419, 0x00010442, + 0x8101041A, 0x00010443, 0x8101041B, 0x00010444, + 0x8101041C, 0x00010445, 0x8101041D, 0x00010446, + 0x8101041E, 0x00010447, 0x8101041F, 0x00010448, + 0x81010420, 0x00010449, 0x81010421, 0x0001044A, + 0x81010422, 0x0001044B, 0x81010423, 0x0001044C, + 0x81010424, 0x0001044D, 0x81010425, 0x0001044E, + 0x81010426, 0x0001044F, 0x81010427, 0x000104D8, + 0x810104B0, 0x000104D9, 0x810104B1, 0x000104DA, + 0x810104B2, 0x000104DB, 0x810104B3, 0x000104DC, + 0x810104B4, 0x000104DD, 0x810104B5, 0x000104DE, + 0x810104B6, 0x000104DF, 0x810104B7, 0x000104E0, + 0x810104B8, 0x000104E1, 0x810104B9, 0x000104E2, + 0x810104BA, 0x000104E3, 0x810104BB, 0x000104E4, + 0x810104BC, 0x000104E5, 0x810104BD, 0x000104E6, + 0x810104BE, 0x000104E7, 0x810104BF, 0x000104E8, + 0x810104C0, 0x000104E9, 0x810104C1, 0x000104EA, + 0x810104C2, 0x000104EB, 0x810104C3, 0x000104EC, + 0x810104C4, 0x000104ED, 0x810104C5, 0x000104EE, + 0x810104C6, 0x000104EF, 0x810104C7, 0x000104F0, + 0x810104C8, 0x000104F1, 0x810104C9, 0x000104F2, + 0x810104CA, 0x000104F3, 0x810104CB, 0x000104F4, + 0x810104CC, 0x000104F5, 0x810104CD, 0x000104F6, + 0x810104CE, 0x000104F7, 0x810104CF, 0x000104F8, + 0x810104D0, 0x000104F9, 0x810104D1, 0x000104FA, + 0x810104D2, 0x000104FB, 0x810104D3, 0x00010597, + 0x81010570, 0x00010598, 0x81010571, 0x00010599, + 0x81010572, 0x0001059A, 0x81010573, 0x0001059B, + 0x81010574, 0x0001059C, 0x81010575, 0x0001059D, + 0x81010576, 0x0001059E, 0x81010577, 0x0001059F, + 0x81010578, 0x000105A0, 0x81010579, 0x000105A1, + 0x8101057A, 0x000105A3, 0x8101057C, 0x000105A4, + 0x8101057D, 0x000105A5, 0x8101057E, 0x000105A6, + 0x8101057F, 0x000105A7, 0x81010580, 0x000105A8, + 0x81010581, 0x000105A9, 0x81010582, 0x000105AA, + 0x81010583, 0x000105AB, 0x81010584, 0x000105AC, + 0x81010585, 0x000105AD, 0x81010586, 0x000105AE, + 0x81010587, 0x000105AF, 0x81010588, 0x000105B0, + 0x81010589, 0x000105B1, 0x8101058A, 0x000105B3, + 0x8101058C, 0x000105B4, 0x8101058D, 0x000105B5, + 0x8101058E, 0x000105B6, 0x8101058F, 0x000105B7, + 0x81010590, 0x000105B8, 0x81010591, 0x000105B9, + 0x81010592, 0x000105BB, 0x81010594, 0x000105BC, + 0x81010595, 0x00010CC0, 0x81010C80, 0x00010CC1, + 0x81010C81, 0x00010CC2, 0x81010C82, 0x00010CC3, + 0x81010C83, 0x00010CC4, 0x81010C84, 0x00010CC5, + 0x81010C85, 0x00010CC6, 0x81010C86, 0x00010CC7, + 0x81010C87, 0x00010CC8, 0x81010C88, 0x00010CC9, + 0x81010C89, 0x00010CCA, 0x81010C8A, 0x00010CCB, + 0x81010C8B, 0x00010CCC, 0x81010C8C, 0x00010CCD, + 0x81010C8D, 0x00010CCE, 0x81010C8E, 0x00010CCF, + 0x81010C8F, 0x00010CD0, 0x81010C90, 0x00010CD1, + 0x81010C91, 0x00010CD2, 0x81010C92, 0x00010CD3, + 0x81010C93, 0x00010CD4, 0x81010C94, 0x00010CD5, + 0x81010C95, 0x00010CD6, 0x81010C96, 0x00010CD7, + 0x81010C97, 0x00010CD8, 0x81010C98, 0x00010CD9, + 0x81010C99, 0x00010CDA, 0x81010C9A, 0x00010CDB, + 0x81010C9B, 0x00010CDC, 0x81010C9C, 0x00010CDD, + 0x81010C9D, 0x00010CDE, 0x81010C9E, 0x00010CDF, + 0x81010C9F, 0x00010CE0, 0x81010CA0, 0x00010CE1, + 0x81010CA1, 0x00010CE2, 0x81010CA2, 0x00010CE3, + 0x81010CA3, 0x00010CE4, 0x81010CA4, 0x00010CE5, + 0x81010CA5, 0x00010CE6, 0x81010CA6, 0x00010CE7, + 0x81010CA7, 0x00010CE8, 0x81010CA8, 0x00010CE9, + 0x81010CA9, 0x00010CEA, 0x81010CAA, 0x00010CEB, + 0x81010CAB, 0x00010CEC, 0x81010CAC, 0x00010CED, + 0x81010CAD, 0x00010CEE, 0x81010CAE, 0x00010CEF, + 0x81010CAF, 0x00010CF0, 0x81010CB0, 0x00010CF1, + 0x81010CB1, 0x00010CF2, 0x81010CB2, 0x000118C0, + 0x810118A0, 0x000118C1, 0x810118A1, 0x000118C2, + 0x810118A2, 0x000118C3, 0x810118A3, 0x000118C4, + 0x810118A4, 0x000118C5, 0x810118A5, 0x000118C6, + 0x810118A6, 0x000118C7, 0x810118A7, 0x000118C8, + 0x810118A8, 0x000118C9, 0x810118A9, 0x000118CA, + 0x810118AA, 0x000118CB, 0x810118AB, 0x000118CC, + 0x810118AC, 0x000118CD, 0x810118AD, 0x000118CE, + 0x810118AE, 0x000118CF, 0x810118AF, 0x000118D0, + 0x810118B0, 0x000118D1, 0x810118B1, 0x000118D2, + 0x810118B2, 0x000118D3, 0x810118B3, 0x000118D4, + 0x810118B4, 0x000118D5, 0x810118B5, 0x000118D6, + 0x810118B6, 0x000118D7, 0x810118B7, 0x000118D8, + 0x810118B8, 0x000118D9, 0x810118B9, 0x000118DA, + 0x810118BA, 0x000118DB, 0x810118BB, 0x000118DC, + 0x810118BC, 0x000118DD, 0x810118BD, 0x000118DE, + 0x810118BE, 0x000118DF, 0x810118BF, 0x00016E60, + 0x81016E40, 0x00016E61, 0x81016E41, 0x00016E62, + 0x81016E42, 0x00016E63, 0x81016E43, 0x00016E64, + 0x81016E44, 0x00016E65, 0x81016E45, 0x00016E66, + 0x81016E46, 0x00016E67, 0x81016E47, 0x00016E68, + 0x81016E48, 0x00016E69, 0x81016E49, 0x00016E6A, + 0x81016E4A, 0x00016E6B, 0x81016E4B, 0x00016E6C, + 0x81016E4C, 0x00016E6D, 0x81016E4D, 0x00016E6E, + 0x81016E4E, 0x00016E6F, 0x81016E4F, 0x00016E70, + 0x81016E50, 0x00016E71, 0x81016E51, 0x00016E72, + 0x81016E52, 0x00016E73, 0x81016E53, 0x00016E74, + 0x81016E54, 0x00016E75, 0x81016E55, 0x00016E76, + 0x81016E56, 0x00016E77, 0x81016E57, 0x00016E78, + 0x81016E58, 0x00016E79, 0x81016E59, 0x00016E7A, + 0x81016E5A, 0x00016E7B, 0x81016E5B, 0x00016E7C, + 0x81016E5C, 0x00016E7D, 0x81016E5D, 0x00016E7E, + 0x81016E5E, 0x00016E7F, 0x81016E5F, 0x0001E922, + 0x8101E900, 0x0001E923, 0x8101E901, 0x0001E924, + 0x8101E902, 0x0001E925, 0x8101E903, 0x0001E926, + 0x8101E904, 0x0001E927, 0x8101E905, 0x0001E928, + 0x8101E906, 0x0001E929, 0x8101E907, 0x0001E92A, + 0x8101E908, 0x0001E92B, 0x8101E909, 0x0001E92C, + 0x8101E90A, 0x0001E92D, 0x8101E90B, 0x0001E92E, + 0x8101E90C, 0x0001E92F, 0x8101E90D, 0x0001E930, + 0x8101E90E, 0x0001E931, 0x8101E90F, 0x0001E932, + 0x8101E910, 0x0001E933, 0x8101E911, 0x0001E934, + 0x8101E912, 0x0001E935, 0x8101E913, 0x0001E936, + 0x8101E914, 0x0001E937, 0x8101E915, 0x0001E938, + 0x8101E916, 0x0001E939, 0x8101E917, 0x0001E93A, + 0x8101E918, 0x0001E93B, 0x8101E919, 0x0001E93C, + 0x8101E91A, 0x0001E93D, 0x8101E91B, 0x0001E93E, + 0x8101E91C, 0x0001E93F, 0x8101E91D, 0x0001E940, + 0x8101E91E, 0x0001E941, 0x8101E91F, 0x0001E942, + 0x8101E920, 0x0001E943, 0x8101E921, 0x00000053, + 0x00000053, 0x000002BC, 0x0000004E, 0x0000004A, + 0x0000030C, 0x00000399, 0x00000308, 0x00000301, + 0x000003A5, 0x00000308, 0x00000301, 0x00000535, + 0x00000552, 0x00000048, 0x00000331, 0x00000054, + 0x00000308, 0x00000057, 0x0000030A, 0x00000059, + 0x0000030A, 0x00000041, 0x000002BE, 0x000003A5, + 0x00000313, 0x000003A5, 0x00000313, 0x00000300, + 0x000003A5, 0x00000313, 0x00000301, 0x000003A5, + 0x00000313, 0x00000342, 0x00001F08, 0x00000399, + 0x00001F09, 0x00000399, 0x00001F0A, 0x00000399, + 0x00001F0B, 0x00000399, 0x00001F0C, 0x00000399, + 0x00001F0D, 0x00000399, 0x00001F0E, 0x00000399, + 0x00001F0F, 0x00000399, 0x00001F08, 0x00000399, + 0x00001F09, 0x00000399, 0x00001F0A, 0x00000399, + 0x00001F0B, 0x00000399, 0x00001F0C, 0x00000399, + 0x00001F0D, 0x00000399, 0x00001F0E, 0x00000399, + 0x00001F0F, 0x00000399, 0x00001F28, 0x00000399, + 0x00001F29, 0x00000399, 0x00001F2A, 0x00000399, + 0x00001F2B, 0x00000399, 0x00001F2C, 0x00000399, + 0x00001F2D, 0x00000399, 0x00001F2E, 0x00000399, + 0x00001F2F, 0x00000399, 0x00001F28, 0x00000399, + 0x00001F29, 0x00000399, 0x00001F2A, 0x00000399, + 0x00001F2B, 0x00000399, 0x00001F2C, 0x00000399, + 0x00001F2D, 0x00000399, 0x00001F2E, 0x00000399, + 0x00001F2F, 0x00000399, 0x00001F68, 0x00000399, + 0x00001F69, 0x00000399, 0x00001F6A, 0x00000399, + 0x00001F6B, 0x00000399, 0x00001F6C, 0x00000399, + 0x00001F6D, 0x00000399, 0x00001F6E, 0x00000399, + 0x00001F6F, 0x00000399, 0x00001F68, 0x00000399, + 0x00001F69, 0x00000399, 0x00001F6A, 0x00000399, + 0x00001F6B, 0x00000399, 0x00001F6C, 0x00000399, + 0x00001F6D, 0x00000399, 0x00001F6E, 0x00000399, + 0x00001F6F, 0x00000399, 0x00001FBA, 0x00000399, + 0x00000391, 0x00000399, 0x00000386, 0x00000399, + 0x00000391, 0x00000342, 0x00000391, 0x00000342, + 0x00000399, 0x00000391, 0x00000399, 0x00001FCA, + 0x00000399, 0x00000397, 0x00000399, 0x00000389, + 0x00000399, 0x00000397, 0x00000342, 0x00000397, + 0x00000342, 0x00000399, 0x00000397, 0x00000399, + 0x00000399, 0x00000308, 0x00000300, 0x00000399, + 0x00000308, 0x00000301, 0x00000399, 0x00000342, + 0x00000399, 0x00000308, 0x00000342, 0x000003A5, + 0x00000308, 0x00000300, 0x000003A5, 0x00000308, + 0x00000301, 0x000003A1, 0x00000313, 0x000003A5, + 0x00000342, 0x000003A5, 0x00000308, 0x00000342, + 0x00001FFA, 0x00000399, 0x000003A9, 0x00000399, + 0x0000038F, 0x00000399, 0x000003A9, 0x00000342, + 0x000003A9, 0x00000342, 0x00000399, 0x000003A9, + 0x00000399, 0x00000046, 0x00000046, 0x00000046, + 0x00000049, 0x00000046, 0x0000004C, 0x00000046, + 0x00000046, 0x00000049, 0x00000046, 0x00000046, + 0x0000004C, 0x00000053, 0x00000054, 0x00000053, + 0x00000054, 0x00000544, 0x00000546, 0x00000544, + 0x00000535, 0x00000544, 0x0000053B, 0x0000054E, + 0x00000546, 0x00000544, 0x0000053D, +}; + +static uint32_t const __CFUniCharUppercaseMappingTableLength = 1635; + +static uint32_t const __CFUniCharTitlecaseMappingTable[] = { + 0x00000438, 0x000000DF, 0x02000000, 0x000001C4, + 0x010001C5, 0x000001C5, 0x010001C5, 0x000001C6, + 0x010001C5, 0x000001C7, 0x010001C8, 0x000001C8, + 0x010001C8, 0x000001C9, 0x010001C8, 0x000001CA, + 0x010001CB, 0x000001CB, 0x010001CB, 0x000001CC, + 0x010001CB, 0x000001F1, 0x010001F2, 0x000001F2, + 0x010001F2, 0x000001F3, 0x010001F2, 0x00000587, + 0x02000002, 0x000010D0, 0x010010D0, 0x000010D1, + 0x010010D1, 0x000010D2, 0x010010D2, 0x000010D3, + 0x010010D3, 0x000010D4, 0x010010D4, 0x000010D5, + 0x010010D5, 0x000010D6, 0x010010D6, 0x000010D7, + 0x010010D7, 0x000010D8, 0x010010D8, 0x000010D9, + 0x010010D9, 0x000010DA, 0x010010DA, 0x000010DB, + 0x010010DB, 0x000010DC, 0x010010DC, 0x000010DD, + 0x010010DD, 0x000010DE, 0x010010DE, 0x000010DF, + 0x010010DF, 0x000010E0, 0x010010E0, 0x000010E1, + 0x010010E1, 0x000010E2, 0x010010E2, 0x000010E3, + 0x010010E3, 0x000010E4, 0x010010E4, 0x000010E5, + 0x010010E5, 0x000010E6, 0x010010E6, 0x000010E7, + 0x010010E7, 0x000010E8, 0x010010E8, 0x000010E9, + 0x010010E9, 0x000010EA, 0x010010EA, 0x000010EB, + 0x010010EB, 0x000010EC, 0x010010EC, 0x000010ED, + 0x010010ED, 0x000010EE, 0x010010EE, 0x000010EF, + 0x010010EF, 0x000010F0, 0x010010F0, 0x000010F1, + 0x010010F1, 0x000010F2, 0x010010F2, 0x000010F3, + 0x010010F3, 0x000010F4, 0x010010F4, 0x000010F5, + 0x010010F5, 0x000010F6, 0x010010F6, 0x000010F7, + 0x010010F7, 0x000010F8, 0x010010F8, 0x000010F9, + 0x010010F9, 0x000010FA, 0x010010FA, 0x000010FD, + 0x010010FD, 0x000010FE, 0x010010FE, 0x000010FF, + 0x010010FF, 0x00001F80, 0x01001F88, 0x00001F81, + 0x01001F89, 0x00001F82, 0x01001F8A, 0x00001F83, + 0x01001F8B, 0x00001F84, 0x01001F8C, 0x00001F85, + 0x01001F8D, 0x00001F86, 0x01001F8E, 0x00001F87, + 0x01001F8F, 0x00001F88, 0x01001F88, 0x00001F89, + 0x01001F89, 0x00001F8A, 0x01001F8A, 0x00001F8B, + 0x01001F8B, 0x00001F8C, 0x01001F8C, 0x00001F8D, + 0x01001F8D, 0x00001F8E, 0x01001F8E, 0x00001F8F, + 0x01001F8F, 0x00001F90, 0x01001F98, 0x00001F91, + 0x01001F99, 0x00001F92, 0x01001F9A, 0x00001F93, + 0x01001F9B, 0x00001F94, 0x01001F9C, 0x00001F95, + 0x01001F9D, 0x00001F96, 0x01001F9E, 0x00001F97, + 0x01001F9F, 0x00001F98, 0x01001F98, 0x00001F99, + 0x01001F99, 0x00001F9A, 0x01001F9A, 0x00001F9B, + 0x01001F9B, 0x00001F9C, 0x01001F9C, 0x00001F9D, + 0x01001F9D, 0x00001F9E, 0x01001F9E, 0x00001F9F, + 0x01001F9F, 0x00001FA0, 0x01001FA8, 0x00001FA1, + 0x01001FA9, 0x00001FA2, 0x01001FAA, 0x00001FA3, + 0x01001FAB, 0x00001FA4, 0x01001FAC, 0x00001FA5, + 0x01001FAD, 0x00001FA6, 0x01001FAE, 0x00001FA7, + 0x01001FAF, 0x00001FA8, 0x01001FA8, 0x00001FA9, + 0x01001FA9, 0x00001FAA, 0x01001FAA, 0x00001FAB, + 0x01001FAB, 0x00001FAC, 0x01001FAC, 0x00001FAD, + 0x01001FAD, 0x00001FAE, 0x01001FAE, 0x00001FAF, + 0x01001FAF, 0x00001FB2, 0x02000004, 0x00001FB3, + 0x01001FBC, 0x00001FB4, 0x02000006, 0x00001FB7, + 0x03000008, 0x00001FBC, 0x01001FBC, 0x00001FC2, + 0x0200000B, 0x00001FC3, 0x01001FCC, 0x00001FC4, + 0x0200000D, 0x00001FC7, 0x0300000F, 0x00001FCC, + 0x01001FCC, 0x00001FF2, 0x02000012, 0x00001FF3, + 0x01001FFC, 0x00001FF4, 0x02000014, 0x00001FF7, + 0x03000016, 0x00001FFC, 0x01001FFC, 0x0000FB00, + 0x02000019, 0x0000FB01, 0x0200001B, 0x0000FB02, + 0x0200001D, 0x0000FB03, 0x0300001F, 0x0000FB04, + 0x03000022, 0x0000FB05, 0x02000025, 0x0000FB06, + 0x02000027, 0x0000FB13, 0x02000029, 0x0000FB14, + 0x0200002B, 0x0000FB15, 0x0200002D, 0x0000FB16, + 0x0200002F, 0x0000FB17, 0x02000031, 0x00000053, + 0x00000073, 0x00000535, 0x00000582, 0x00001FBA, + 0x00000345, 0x00000386, 0x00000345, 0x00000391, + 0x00000342, 0x00000345, 0x00001FCA, 0x00000345, + 0x00000389, 0x00000345, 0x00000397, 0x00000342, + 0x00000345, 0x00001FFA, 0x00000345, 0x0000038F, + 0x00000345, 0x000003A9, 0x00000342, 0x00000345, + 0x00000046, 0x00000066, 0x00000046, 0x00000069, + 0x00000046, 0x0000006C, 0x00000046, 0x00000066, + 0x00000069, 0x00000046, 0x00000066, 0x0000006C, + 0x00000053, 0x00000074, 0x00000053, 0x00000074, + 0x00000544, 0x00000576, 0x00000544, 0x00000565, + 0x00000544, 0x0000056B, 0x0000054E, 0x00000576, + 0x00000544, 0x0000056D, +}; + +static uint32_t const __CFUniCharTitlecaseMappingTableLength = 161; + +static uint32_t const __CFUniCharCasefoldMappingTable[] = { + 0x000003A0, 0x000000B5, 0x010003BC, 0x000000DF, + 0x02000000, 0x00000149, 0x02000002, 0x0000017F, + 0x01000073, 0x000001F0, 0x02000004, 0x00000345, + 0x010003B9, 0x00000390, 0x03000006, 0x000003B0, + 0x03000009, 0x000003C2, 0x010003C3, 0x000003D0, + 0x010003B2, 0x000003D1, 0x010003B8, 0x000003D5, + 0x010003C6, 0x000003D6, 0x010003C0, 0x000003F0, + 0x010003BA, 0x000003F1, 0x010003C1, 0x000003F5, + 0x010003B5, 0x00000587, 0x0200000C, 0x00001E96, + 0x0200000E, 0x00001E97, 0x02000010, 0x00001E98, + 0x02000012, 0x00001E99, 0x02000014, 0x00001E9A, + 0x02000016, 0x00001E9B, 0x01001E61, 0x00001E9E, + 0x02000018, 0x00001F50, 0x0200001A, 0x00001F52, + 0x0300001C, 0x00001F54, 0x0300001F, 0x00001F56, + 0x03000022, 0x00001F80, 0x02000025, 0x00001F81, + 0x02000027, 0x00001F82, 0x02000029, 0x00001F83, + 0x0200002B, 0x00001F84, 0x0200002D, 0x00001F85, + 0x0200002F, 0x00001F86, 0x02000031, 0x00001F87, + 0x02000033, 0x00001F88, 0x02000035, 0x00001F89, + 0x02000037, 0x00001F8A, 0x02000039, 0x00001F8B, + 0x0200003B, 0x00001F8C, 0x0200003D, 0x00001F8D, + 0x0200003F, 0x00001F8E, 0x02000041, 0x00001F8F, + 0x02000043, 0x00001F90, 0x02000045, 0x00001F91, + 0x02000047, 0x00001F92, 0x02000049, 0x00001F93, + 0x0200004B, 0x00001F94, 0x0200004D, 0x00001F95, + 0x0200004F, 0x00001F96, 0x02000051, 0x00001F97, + 0x02000053, 0x00001F98, 0x02000055, 0x00001F99, + 0x02000057, 0x00001F9A, 0x02000059, 0x00001F9B, + 0x0200005B, 0x00001F9C, 0x0200005D, 0x00001F9D, + 0x0200005F, 0x00001F9E, 0x02000061, 0x00001F9F, + 0x02000063, 0x00001FA0, 0x02000065, 0x00001FA1, + 0x02000067, 0x00001FA2, 0x02000069, 0x00001FA3, + 0x0200006B, 0x00001FA4, 0x0200006D, 0x00001FA5, + 0x0200006F, 0x00001FA6, 0x02000071, 0x00001FA7, + 0x02000073, 0x00001FA8, 0x02000075, 0x00001FA9, + 0x02000077, 0x00001FAA, 0x02000079, 0x00001FAB, + 0x0200007B, 0x00001FAC, 0x0200007D, 0x00001FAD, + 0x0200007F, 0x00001FAE, 0x02000081, 0x00001FAF, + 0x02000083, 0x00001FB2, 0x02000085, 0x00001FB3, + 0x02000087, 0x00001FB4, 0x02000089, 0x00001FB6, + 0x0200008B, 0x00001FB7, 0x0300008D, 0x00001FBC, + 0x02000090, 0x00001FBE, 0x010003B9, 0x00001FC2, + 0x02000092, 0x00001FC3, 0x02000094, 0x00001FC4, + 0x02000096, 0x00001FC6, 0x02000098, 0x00001FC7, + 0x0300009A, 0x00001FCC, 0x0200009D, 0x00001FD2, + 0x0300009F, 0x00001FD3, 0x030000A2, 0x00001FD6, + 0x020000A5, 0x00001FD7, 0x030000A7, 0x00001FE2, + 0x030000AA, 0x00001FE3, 0x030000AD, 0x00001FE4, + 0x020000B0, 0x00001FE6, 0x020000B2, 0x00001FE7, + 0x030000B4, 0x00001FF2, 0x020000B7, 0x00001FF3, + 0x020000B9, 0x00001FF4, 0x020000BB, 0x00001FF6, + 0x020000BD, 0x00001FF7, 0x030000BF, 0x00001FFC, + 0x020000C2, 0x0000FB00, 0x020000C4, 0x0000FB01, + 0x020000C6, 0x0000FB02, 0x020000C8, 0x0000FB03, + 0x030000CA, 0x0000FB04, 0x030000CD, 0x0000FB05, + 0x020000D0, 0x0000FB06, 0x020000D2, 0x0000FB13, + 0x020000D4, 0x0000FB14, 0x020000D6, 0x0000FB15, + 0x020000D8, 0x0000FB16, 0x020000DA, 0x0000FB17, + 0x020000DC, 0x00000073, 0x00000073, 0x000002BC, + 0x0000006E, 0x0000006A, 0x0000030C, 0x000003B9, + 0x00000308, 0x00000301, 0x000003C5, 0x00000308, + 0x00000301, 0x00000565, 0x00000582, 0x00000068, + 0x00000331, 0x00000074, 0x00000308, 0x00000077, + 0x0000030A, 0x00000079, 0x0000030A, 0x00000061, + 0x000002BE, 0x00000073, 0x00000073, 0x000003C5, + 0x00000313, 0x000003C5, 0x00000313, 0x00000300, + 0x000003C5, 0x00000313, 0x00000301, 0x000003C5, + 0x00000313, 0x00000342, 0x00001F00, 0x000003B9, + 0x00001F01, 0x000003B9, 0x00001F02, 0x000003B9, + 0x00001F03, 0x000003B9, 0x00001F04, 0x000003B9, + 0x00001F05, 0x000003B9, 0x00001F06, 0x000003B9, + 0x00001F07, 0x000003B9, 0x00001F00, 0x000003B9, + 0x00001F01, 0x000003B9, 0x00001F02, 0x000003B9, + 0x00001F03, 0x000003B9, 0x00001F04, 0x000003B9, + 0x00001F05, 0x000003B9, 0x00001F06, 0x000003B9, + 0x00001F07, 0x000003B9, 0x00001F20, 0x000003B9, + 0x00001F21, 0x000003B9, 0x00001F22, 0x000003B9, + 0x00001F23, 0x000003B9, 0x00001F24, 0x000003B9, + 0x00001F25, 0x000003B9, 0x00001F26, 0x000003B9, + 0x00001F27, 0x000003B9, 0x00001F20, 0x000003B9, + 0x00001F21, 0x000003B9, 0x00001F22, 0x000003B9, + 0x00001F23, 0x000003B9, 0x00001F24, 0x000003B9, + 0x00001F25, 0x000003B9, 0x00001F26, 0x000003B9, + 0x00001F27, 0x000003B9, 0x00001F60, 0x000003B9, + 0x00001F61, 0x000003B9, 0x00001F62, 0x000003B9, + 0x00001F63, 0x000003B9, 0x00001F64, 0x000003B9, + 0x00001F65, 0x000003B9, 0x00001F66, 0x000003B9, + 0x00001F67, 0x000003B9, 0x00001F60, 0x000003B9, + 0x00001F61, 0x000003B9, 0x00001F62, 0x000003B9, + 0x00001F63, 0x000003B9, 0x00001F64, 0x000003B9, + 0x00001F65, 0x000003B9, 0x00001F66, 0x000003B9, + 0x00001F67, 0x000003B9, 0x00001F70, 0x000003B9, + 0x000003B1, 0x000003B9, 0x000003AC, 0x000003B9, + 0x000003B1, 0x00000342, 0x000003B1, 0x00000342, + 0x000003B9, 0x000003B1, 0x000003B9, 0x00001F74, + 0x000003B9, 0x000003B7, 0x000003B9, 0x000003AE, + 0x000003B9, 0x000003B7, 0x00000342, 0x000003B7, + 0x00000342, 0x000003B9, 0x000003B7, 0x000003B9, + 0x000003B9, 0x00000308, 0x00000300, 0x000003B9, + 0x00000308, 0x00000301, 0x000003B9, 0x00000342, + 0x000003B9, 0x00000308, 0x00000342, 0x000003C5, + 0x00000308, 0x00000300, 0x000003C5, 0x00000308, + 0x00000301, 0x000003C1, 0x00000313, 0x000003C5, + 0x00000342, 0x000003C5, 0x00000308, 0x00000342, + 0x00001F7C, 0x000003B9, 0x000003C9, 0x000003B9, + 0x000003CE, 0x000003B9, 0x000003C9, 0x00000342, + 0x000003C9, 0x00000342, 0x000003B9, 0x000003C9, + 0x000003B9, 0x00000066, 0x00000066, 0x00000066, + 0x00000069, 0x00000066, 0x0000006C, 0x00000066, + 0x00000066, 0x00000069, 0x00000066, 0x00000066, + 0x0000006C, 0x00000073, 0x00000074, 0x00000073, + 0x00000074, 0x00000574, 0x00000576, 0x00000574, + 0x00000565, 0x00000574, 0x0000056B, 0x0000057E, + 0x00000576, 0x00000574, 0x0000056D, +}; + +static uint32_t const __CFUniCharCasefoldMappingTableLength = 227; + +static uint32_t const __CFUniCharCanonicalDecompositionMappingTable[] = { + 0x00004068, 0x000000C0, 0x02000000, 0x000000C1, + 0x02000002, 0x000000C2, 0x02000004, 0x000000C3, + 0x02000006, 0x000000C4, 0x02000008, 0x000000C5, + 0x0200000A, 0x000000C7, 0x0200000C, 0x000000C8, + 0x0200000E, 0x000000C9, 0x02000010, 0x000000CA, + 0x02000012, 0x000000CB, 0x02000014, 0x000000CC, + 0x02000016, 0x000000CD, 0x02000018, 0x000000CE, + 0x0200001A, 0x000000CF, 0x0200001C, 0x000000D1, + 0x0200001E, 0x000000D2, 0x02000020, 0x000000D3, + 0x02000022, 0x000000D4, 0x02000024, 0x000000D5, + 0x02000026, 0x000000D6, 0x02000028, 0x000000D9, + 0x0200002A, 0x000000DA, 0x0200002C, 0x000000DB, + 0x0200002E, 0x000000DC, 0x02000030, 0x000000DD, + 0x02000032, 0x000000E0, 0x02000034, 0x000000E1, + 0x02000036, 0x000000E2, 0x02000038, 0x000000E3, + 0x0200003A, 0x000000E4, 0x0200003C, 0x000000E5, + 0x0200003E, 0x000000E7, 0x02000040, 0x000000E8, + 0x02000042, 0x000000E9, 0x02000044, 0x000000EA, + 0x02000046, 0x000000EB, 0x02000048, 0x000000EC, + 0x0200004A, 0x000000ED, 0x0200004C, 0x000000EE, + 0x0200004E, 0x000000EF, 0x02000050, 0x000000F1, + 0x02000052, 0x000000F2, 0x02000054, 0x000000F3, + 0x02000056, 0x000000F4, 0x02000058, 0x000000F5, + 0x0200005A, 0x000000F6, 0x0200005C, 0x000000F9, + 0x0200005E, 0x000000FA, 0x02000060, 0x000000FB, + 0x02000062, 0x000000FC, 0x02000064, 0x000000FD, + 0x02000066, 0x000000FF, 0x02000068, 0x00000100, + 0x0200006A, 0x00000101, 0x0200006C, 0x00000102, + 0x0200006E, 0x00000103, 0x02000070, 0x00000104, + 0x02000072, 0x00000105, 0x02000074, 0x00000106, + 0x02000076, 0x00000107, 0x02000078, 0x00000108, + 0x0200007A, 0x00000109, 0x0200007C, 0x0000010A, + 0x0200007E, 0x0000010B, 0x02000080, 0x0000010C, + 0x02000082, 0x0000010D, 0x02000084, 0x0000010E, + 0x02000086, 0x0000010F, 0x02000088, 0x00000112, + 0x0200008A, 0x00000113, 0x0200008C, 0x00000114, + 0x0200008E, 0x00000115, 0x02000090, 0x00000116, + 0x02000092, 0x00000117, 0x02000094, 0x00000118, + 0x02000096, 0x00000119, 0x02000098, 0x0000011A, + 0x0200009A, 0x0000011B, 0x0200009C, 0x0000011C, + 0x0200009E, 0x0000011D, 0x020000A0, 0x0000011E, + 0x020000A2, 0x0000011F, 0x020000A4, 0x00000120, + 0x020000A6, 0x00000121, 0x020000A8, 0x00000122, + 0x020000AA, 0x00000123, 0x020000AC, 0x00000124, + 0x020000AE, 0x00000125, 0x020000B0, 0x00000128, + 0x020000B2, 0x00000129, 0x020000B4, 0x0000012A, + 0x020000B6, 0x0000012B, 0x020000B8, 0x0000012C, + 0x020000BA, 0x0000012D, 0x020000BC, 0x0000012E, + 0x020000BE, 0x0000012F, 0x020000C0, 0x00000130, + 0x020000C2, 0x00000134, 0x020000C4, 0x00000135, + 0x020000C6, 0x00000136, 0x020000C8, 0x00000137, + 0x020000CA, 0x00000139, 0x020000CC, 0x0000013A, + 0x020000CE, 0x0000013B, 0x020000D0, 0x0000013C, + 0x020000D2, 0x0000013D, 0x020000D4, 0x0000013E, + 0x020000D6, 0x00000143, 0x020000D8, 0x00000144, + 0x020000DA, 0x00000145, 0x020000DC, 0x00000146, + 0x020000DE, 0x00000147, 0x020000E0, 0x00000148, + 0x020000E2, 0x0000014C, 0x020000E4, 0x0000014D, + 0x020000E6, 0x0000014E, 0x020000E8, 0x0000014F, + 0x020000EA, 0x00000150, 0x020000EC, 0x00000151, + 0x020000EE, 0x00000154, 0x020000F0, 0x00000155, + 0x020000F2, 0x00000156, 0x020000F4, 0x00000157, + 0x020000F6, 0x00000158, 0x020000F8, 0x00000159, + 0x020000FA, 0x0000015A, 0x020000FC, 0x0000015B, + 0x020000FE, 0x0000015C, 0x02000100, 0x0000015D, + 0x02000102, 0x0000015E, 0x02000104, 0x0000015F, + 0x02000106, 0x00000160, 0x02000108, 0x00000161, + 0x0200010A, 0x00000162, 0x0200010C, 0x00000163, + 0x0200010E, 0x00000164, 0x02000110, 0x00000165, + 0x02000112, 0x00000168, 0x02000114, 0x00000169, + 0x02000116, 0x0000016A, 0x02000118, 0x0000016B, + 0x0200011A, 0x0000016C, 0x0200011C, 0x0000016D, + 0x0200011E, 0x0000016E, 0x02000120, 0x0000016F, + 0x02000122, 0x00000170, 0x02000124, 0x00000171, + 0x02000126, 0x00000172, 0x02000128, 0x00000173, + 0x0200012A, 0x00000174, 0x0200012C, 0x00000175, + 0x0200012E, 0x00000176, 0x02000130, 0x00000177, + 0x02000132, 0x00000178, 0x02000134, 0x00000179, + 0x02000136, 0x0000017A, 0x02000138, 0x0000017B, + 0x0200013A, 0x0000017C, 0x0200013C, 0x0000017D, + 0x0200013E, 0x0000017E, 0x02000140, 0x000001A0, + 0x02000142, 0x000001A1, 0x02000144, 0x000001AF, + 0x02000146, 0x000001B0, 0x02000148, 0x000001CD, + 0x0200014A, 0x000001CE, 0x0200014C, 0x000001CF, + 0x0200014E, 0x000001D0, 0x02000150, 0x000001D1, + 0x02000152, 0x000001D2, 0x02000154, 0x000001D3, + 0x02000156, 0x000001D4, 0x02000158, 0x000001D5, + 0x4200015A, 0x000001D6, 0x4200015C, 0x000001D7, + 0x4200015E, 0x000001D8, 0x42000160, 0x000001D9, + 0x42000162, 0x000001DA, 0x42000164, 0x000001DB, + 0x42000166, 0x000001DC, 0x42000168, 0x000001DE, + 0x4200016A, 0x000001DF, 0x4200016C, 0x000001E0, + 0x4200016E, 0x000001E1, 0x42000170, 0x000001E2, + 0x02000172, 0x000001E3, 0x02000174, 0x000001E6, + 0x02000176, 0x000001E7, 0x02000178, 0x000001E8, + 0x0200017A, 0x000001E9, 0x0200017C, 0x000001EA, + 0x0200017E, 0x000001EB, 0x02000180, 0x000001EC, + 0x42000182, 0x000001ED, 0x42000184, 0x000001EE, + 0x02000186, 0x000001EF, 0x02000188, 0x000001F0, + 0x0200018A, 0x000001F4, 0x0200018C, 0x000001F5, + 0x0200018E, 0x000001F8, 0x02000190, 0x000001F9, + 0x02000192, 0x000001FA, 0x42000194, 0x000001FB, + 0x42000196, 0x000001FC, 0x02000198, 0x000001FD, + 0x0200019A, 0x000001FE, 0x0200019C, 0x000001FF, + 0x0200019E, 0x00000200, 0x020001A0, 0x00000201, + 0x020001A2, 0x00000202, 0x020001A4, 0x00000203, + 0x020001A6, 0x00000204, 0x020001A8, 0x00000205, + 0x020001AA, 0x00000206, 0x020001AC, 0x00000207, + 0x020001AE, 0x00000208, 0x020001B0, 0x00000209, + 0x020001B2, 0x0000020A, 0x020001B4, 0x0000020B, + 0x020001B6, 0x0000020C, 0x020001B8, 0x0000020D, + 0x020001BA, 0x0000020E, 0x020001BC, 0x0000020F, + 0x020001BE, 0x00000210, 0x020001C0, 0x00000211, + 0x020001C2, 0x00000212, 0x020001C4, 0x00000213, + 0x020001C6, 0x00000214, 0x020001C8, 0x00000215, + 0x020001CA, 0x00000216, 0x020001CC, 0x00000217, + 0x020001CE, 0x00000218, 0x020001D0, 0x00000219, + 0x020001D2, 0x0000021A, 0x020001D4, 0x0000021B, + 0x020001D6, 0x0000021E, 0x020001D8, 0x0000021F, + 0x020001DA, 0x00000226, 0x020001DC, 0x00000227, + 0x020001DE, 0x00000228, 0x020001E0, 0x00000229, + 0x020001E2, 0x0000022A, 0x420001E4, 0x0000022B, + 0x420001E6, 0x0000022C, 0x420001E8, 0x0000022D, + 0x420001EA, 0x0000022E, 0x020001EC, 0x0000022F, + 0x020001EE, 0x00000230, 0x420001F0, 0x00000231, + 0x420001F2, 0x00000232, 0x020001F4, 0x00000233, + 0x020001F6, 0x00000340, 0x01000300, 0x00000341, + 0x01000301, 0x00000343, 0x01000313, 0x00000344, + 0x020001F8, 0x00000374, 0x010002B9, 0x0000037E, + 0x0100003B, 0x00000385, 0x020001FA, 0x00000386, + 0x020001FC, 0x00000387, 0x010000B7, 0x00000388, + 0x020001FE, 0x00000389, 0x02000200, 0x0000038A, + 0x02000202, 0x0000038C, 0x02000204, 0x0000038E, + 0x02000206, 0x0000038F, 0x02000208, 0x00000390, + 0x4200020A, 0x000003AA, 0x0200020C, 0x000003AB, + 0x0200020E, 0x000003AC, 0x02000210, 0x000003AD, + 0x02000212, 0x000003AE, 0x02000214, 0x000003AF, + 0x02000216, 0x000003B0, 0x42000218, 0x000003CA, + 0x0200021A, 0x000003CB, 0x0200021C, 0x000003CC, + 0x0200021E, 0x000003CD, 0x02000220, 0x000003CE, + 0x02000222, 0x000003D3, 0x02000224, 0x000003D4, + 0x02000226, 0x00000400, 0x02000228, 0x00000401, + 0x0200022A, 0x00000403, 0x0200022C, 0x00000407, + 0x0200022E, 0x0000040C, 0x02000230, 0x0000040D, + 0x02000232, 0x0000040E, 0x02000234, 0x00000419, + 0x02000236, 0x00000439, 0x02000238, 0x00000450, + 0x0200023A, 0x00000451, 0x0200023C, 0x00000453, + 0x0200023E, 0x00000457, 0x02000240, 0x0000045C, + 0x02000242, 0x0000045D, 0x02000244, 0x0000045E, + 0x02000246, 0x00000476, 0x02000248, 0x00000477, + 0x0200024A, 0x000004C1, 0x0200024C, 0x000004C2, + 0x0200024E, 0x000004D0, 0x02000250, 0x000004D1, + 0x02000252, 0x000004D2, 0x02000254, 0x000004D3, + 0x02000256, 0x000004D6, 0x02000258, 0x000004D7, + 0x0200025A, 0x000004DA, 0x0200025C, 0x000004DB, + 0x0200025E, 0x000004DC, 0x02000260, 0x000004DD, + 0x02000262, 0x000004DE, 0x02000264, 0x000004DF, + 0x02000266, 0x000004E2, 0x02000268, 0x000004E3, + 0x0200026A, 0x000004E4, 0x0200026C, 0x000004E5, + 0x0200026E, 0x000004E6, 0x02000270, 0x000004E7, + 0x02000272, 0x000004EA, 0x02000274, 0x000004EB, + 0x02000276, 0x000004EC, 0x02000278, 0x000004ED, + 0x0200027A, 0x000004EE, 0x0200027C, 0x000004EF, + 0x0200027E, 0x000004F0, 0x02000280, 0x000004F1, + 0x02000282, 0x000004F2, 0x02000284, 0x000004F3, + 0x02000286, 0x000004F4, 0x02000288, 0x000004F5, + 0x0200028A, 0x000004F8, 0x0200028C, 0x000004F9, + 0x0200028E, 0x00000622, 0x02000290, 0x00000623, + 0x02000292, 0x00000624, 0x02000294, 0x00000625, + 0x02000296, 0x00000626, 0x02000298, 0x000006C0, + 0x0200029A, 0x000006C2, 0x0200029C, 0x000006D3, + 0x0200029E, 0x00000929, 0x020002A0, 0x00000931, + 0x020002A2, 0x00000934, 0x020002A4, 0x00000958, + 0x020002A6, 0x00000959, 0x020002A8, 0x0000095A, + 0x020002AA, 0x0000095B, 0x020002AC, 0x0000095C, + 0x020002AE, 0x0000095D, 0x020002B0, 0x0000095E, + 0x020002B2, 0x0000095F, 0x020002B4, 0x000009CB, + 0x020002B6, 0x000009CC, 0x020002B8, 0x000009DC, + 0x020002BA, 0x000009DD, 0x020002BC, 0x000009DF, + 0x020002BE, 0x00000A33, 0x020002C0, 0x00000A36, + 0x020002C2, 0x00000A59, 0x020002C4, 0x00000A5A, + 0x020002C6, 0x00000A5B, 0x020002C8, 0x00000A5E, + 0x020002CA, 0x00000B48, 0x020002CC, 0x00000B4B, + 0x020002CE, 0x00000B4C, 0x020002D0, 0x00000B5C, + 0x020002D2, 0x00000B5D, 0x020002D4, 0x00000B94, + 0x020002D6, 0x00000BCA, 0x020002D8, 0x00000BCB, + 0x020002DA, 0x00000BCC, 0x020002DC, 0x00000C48, + 0x020002DE, 0x00000CC0, 0x020002E0, 0x00000CC7, + 0x020002E2, 0x00000CC8, 0x020002E4, 0x00000CCA, + 0x020002E6, 0x00000CCB, 0x420002E8, 0x00000D4A, + 0x020002EA, 0x00000D4B, 0x020002EC, 0x00000D4C, + 0x020002EE, 0x00000DDA, 0x020002F0, 0x00000DDC, + 0x020002F2, 0x00000DDD, 0x420002F4, 0x00000DDE, + 0x020002F6, 0x00000F43, 0x020002F8, 0x00000F4D, + 0x020002FA, 0x00000F52, 0x020002FC, 0x00000F57, + 0x020002FE, 0x00000F5C, 0x02000300, 0x00000F69, + 0x02000302, 0x00000F73, 0x02000304, 0x00000F75, + 0x02000306, 0x00000F76, 0x02000308, 0x00000F78, + 0x0200030A, 0x00000F81, 0x0200030C, 0x00000F93, + 0x0200030E, 0x00000F9D, 0x02000310, 0x00000FA2, + 0x02000312, 0x00000FA7, 0x02000314, 0x00000FAC, + 0x02000316, 0x00000FB9, 0x02000318, 0x00001026, + 0x0200031A, 0x00001B06, 0x0200031C, 0x00001B08, + 0x0200031E, 0x00001B0A, 0x02000320, 0x00001B0C, + 0x02000322, 0x00001B0E, 0x02000324, 0x00001B12, + 0x02000326, 0x00001B3B, 0x02000328, 0x00001B3D, + 0x0200032A, 0x00001B40, 0x0200032C, 0x00001B41, + 0x0200032E, 0x00001B43, 0x02000330, 0x00001E00, + 0x02000332, 0x00001E01, 0x02000334, 0x00001E02, + 0x02000336, 0x00001E03, 0x02000338, 0x00001E04, + 0x0200033A, 0x00001E05, 0x0200033C, 0x00001E06, + 0x0200033E, 0x00001E07, 0x02000340, 0x00001E08, + 0x42000342, 0x00001E09, 0x42000344, 0x00001E0A, + 0x02000346, 0x00001E0B, 0x02000348, 0x00001E0C, + 0x0200034A, 0x00001E0D, 0x0200034C, 0x00001E0E, + 0x0200034E, 0x00001E0F, 0x02000350, 0x00001E10, + 0x02000352, 0x00001E11, 0x02000354, 0x00001E12, + 0x02000356, 0x00001E13, 0x02000358, 0x00001E14, + 0x4200035A, 0x00001E15, 0x4200035C, 0x00001E16, + 0x4200035E, 0x00001E17, 0x42000360, 0x00001E18, + 0x02000362, 0x00001E19, 0x02000364, 0x00001E1A, + 0x02000366, 0x00001E1B, 0x02000368, 0x00001E1C, + 0x4200036A, 0x00001E1D, 0x4200036C, 0x00001E1E, + 0x0200036E, 0x00001E1F, 0x02000370, 0x00001E20, + 0x02000372, 0x00001E21, 0x02000374, 0x00001E22, + 0x02000376, 0x00001E23, 0x02000378, 0x00001E24, + 0x0200037A, 0x00001E25, 0x0200037C, 0x00001E26, + 0x0200037E, 0x00001E27, 0x02000380, 0x00001E28, + 0x02000382, 0x00001E29, 0x02000384, 0x00001E2A, + 0x02000386, 0x00001E2B, 0x02000388, 0x00001E2C, + 0x0200038A, 0x00001E2D, 0x0200038C, 0x00001E2E, + 0x4200038E, 0x00001E2F, 0x42000390, 0x00001E30, + 0x02000392, 0x00001E31, 0x02000394, 0x00001E32, + 0x02000396, 0x00001E33, 0x02000398, 0x00001E34, + 0x0200039A, 0x00001E35, 0x0200039C, 0x00001E36, + 0x0200039E, 0x00001E37, 0x020003A0, 0x00001E38, + 0x420003A2, 0x00001E39, 0x420003A4, 0x00001E3A, + 0x020003A6, 0x00001E3B, 0x020003A8, 0x00001E3C, + 0x020003AA, 0x00001E3D, 0x020003AC, 0x00001E3E, + 0x020003AE, 0x00001E3F, 0x020003B0, 0x00001E40, + 0x020003B2, 0x00001E41, 0x020003B4, 0x00001E42, + 0x020003B6, 0x00001E43, 0x020003B8, 0x00001E44, + 0x020003BA, 0x00001E45, 0x020003BC, 0x00001E46, + 0x020003BE, 0x00001E47, 0x020003C0, 0x00001E48, + 0x020003C2, 0x00001E49, 0x020003C4, 0x00001E4A, + 0x020003C6, 0x00001E4B, 0x020003C8, 0x00001E4C, + 0x420003CA, 0x00001E4D, 0x420003CC, 0x00001E4E, + 0x420003CE, 0x00001E4F, 0x420003D0, 0x00001E50, + 0x420003D2, 0x00001E51, 0x420003D4, 0x00001E52, + 0x420003D6, 0x00001E53, 0x420003D8, 0x00001E54, + 0x020003DA, 0x00001E55, 0x020003DC, 0x00001E56, + 0x020003DE, 0x00001E57, 0x020003E0, 0x00001E58, + 0x020003E2, 0x00001E59, 0x020003E4, 0x00001E5A, + 0x020003E6, 0x00001E5B, 0x020003E8, 0x00001E5C, + 0x420003EA, 0x00001E5D, 0x420003EC, 0x00001E5E, + 0x020003EE, 0x00001E5F, 0x020003F0, 0x00001E60, + 0x020003F2, 0x00001E61, 0x020003F4, 0x00001E62, + 0x020003F6, 0x00001E63, 0x020003F8, 0x00001E64, + 0x420003FA, 0x00001E65, 0x420003FC, 0x00001E66, + 0x420003FE, 0x00001E67, 0x42000400, 0x00001E68, + 0x42000402, 0x00001E69, 0x42000404, 0x00001E6A, + 0x02000406, 0x00001E6B, 0x02000408, 0x00001E6C, + 0x0200040A, 0x00001E6D, 0x0200040C, 0x00001E6E, + 0x0200040E, 0x00001E6F, 0x02000410, 0x00001E70, + 0x02000412, 0x00001E71, 0x02000414, 0x00001E72, + 0x02000416, 0x00001E73, 0x02000418, 0x00001E74, + 0x0200041A, 0x00001E75, 0x0200041C, 0x00001E76, + 0x0200041E, 0x00001E77, 0x02000420, 0x00001E78, + 0x42000422, 0x00001E79, 0x42000424, 0x00001E7A, + 0x42000426, 0x00001E7B, 0x42000428, 0x00001E7C, + 0x0200042A, 0x00001E7D, 0x0200042C, 0x00001E7E, + 0x0200042E, 0x00001E7F, 0x02000430, 0x00001E80, + 0x02000432, 0x00001E81, 0x02000434, 0x00001E82, + 0x02000436, 0x00001E83, 0x02000438, 0x00001E84, + 0x0200043A, 0x00001E85, 0x0200043C, 0x00001E86, + 0x0200043E, 0x00001E87, 0x02000440, 0x00001E88, + 0x02000442, 0x00001E89, 0x02000444, 0x00001E8A, + 0x02000446, 0x00001E8B, 0x02000448, 0x00001E8C, + 0x0200044A, 0x00001E8D, 0x0200044C, 0x00001E8E, + 0x0200044E, 0x00001E8F, 0x02000450, 0x00001E90, + 0x02000452, 0x00001E91, 0x02000454, 0x00001E92, + 0x02000456, 0x00001E93, 0x02000458, 0x00001E94, + 0x0200045A, 0x00001E95, 0x0200045C, 0x00001E96, + 0x0200045E, 0x00001E97, 0x02000460, 0x00001E98, + 0x02000462, 0x00001E99, 0x02000464, 0x00001E9B, + 0x02000466, 0x00001EA0, 0x02000468, 0x00001EA1, + 0x0200046A, 0x00001EA2, 0x0200046C, 0x00001EA3, + 0x0200046E, 0x00001EA4, 0x42000470, 0x00001EA5, + 0x42000472, 0x00001EA6, 0x42000474, 0x00001EA7, + 0x42000476, 0x00001EA8, 0x42000478, 0x00001EA9, + 0x4200047A, 0x00001EAA, 0x4200047C, 0x00001EAB, + 0x4200047E, 0x00001EAC, 0x42000480, 0x00001EAD, + 0x42000482, 0x00001EAE, 0x42000484, 0x00001EAF, + 0x42000486, 0x00001EB0, 0x42000488, 0x00001EB1, + 0x4200048A, 0x00001EB2, 0x4200048C, 0x00001EB3, + 0x4200048E, 0x00001EB4, 0x42000490, 0x00001EB5, + 0x42000492, 0x00001EB6, 0x42000494, 0x00001EB7, + 0x42000496, 0x00001EB8, 0x02000498, 0x00001EB9, + 0x0200049A, 0x00001EBA, 0x0200049C, 0x00001EBB, + 0x0200049E, 0x00001EBC, 0x020004A0, 0x00001EBD, + 0x020004A2, 0x00001EBE, 0x420004A4, 0x00001EBF, + 0x420004A6, 0x00001EC0, 0x420004A8, 0x00001EC1, + 0x420004AA, 0x00001EC2, 0x420004AC, 0x00001EC3, + 0x420004AE, 0x00001EC4, 0x420004B0, 0x00001EC5, + 0x420004B2, 0x00001EC6, 0x420004B4, 0x00001EC7, + 0x420004B6, 0x00001EC8, 0x020004B8, 0x00001EC9, + 0x020004BA, 0x00001ECA, 0x020004BC, 0x00001ECB, + 0x020004BE, 0x00001ECC, 0x020004C0, 0x00001ECD, + 0x020004C2, 0x00001ECE, 0x020004C4, 0x00001ECF, + 0x020004C6, 0x00001ED0, 0x420004C8, 0x00001ED1, + 0x420004CA, 0x00001ED2, 0x420004CC, 0x00001ED3, + 0x420004CE, 0x00001ED4, 0x420004D0, 0x00001ED5, + 0x420004D2, 0x00001ED6, 0x420004D4, 0x00001ED7, + 0x420004D6, 0x00001ED8, 0x420004D8, 0x00001ED9, + 0x420004DA, 0x00001EDA, 0x420004DC, 0x00001EDB, + 0x420004DE, 0x00001EDC, 0x420004E0, 0x00001EDD, + 0x420004E2, 0x00001EDE, 0x420004E4, 0x00001EDF, + 0x420004E6, 0x00001EE0, 0x420004E8, 0x00001EE1, + 0x420004EA, 0x00001EE2, 0x420004EC, 0x00001EE3, + 0x420004EE, 0x00001EE4, 0x020004F0, 0x00001EE5, + 0x020004F2, 0x00001EE6, 0x020004F4, 0x00001EE7, + 0x020004F6, 0x00001EE8, 0x420004F8, 0x00001EE9, + 0x420004FA, 0x00001EEA, 0x420004FC, 0x00001EEB, + 0x420004FE, 0x00001EEC, 0x42000500, 0x00001EED, + 0x42000502, 0x00001EEE, 0x42000504, 0x00001EEF, + 0x42000506, 0x00001EF0, 0x42000508, 0x00001EF1, + 0x4200050A, 0x00001EF2, 0x0200050C, 0x00001EF3, + 0x0200050E, 0x00001EF4, 0x02000510, 0x00001EF5, + 0x02000512, 0x00001EF6, 0x02000514, 0x00001EF7, + 0x02000516, 0x00001EF8, 0x02000518, 0x00001EF9, + 0x0200051A, 0x00001F00, 0x0200051C, 0x00001F01, + 0x0200051E, 0x00001F02, 0x42000520, 0x00001F03, + 0x42000522, 0x00001F04, 0x42000524, 0x00001F05, + 0x42000526, 0x00001F06, 0x42000528, 0x00001F07, + 0x4200052A, 0x00001F08, 0x0200052C, 0x00001F09, + 0x0200052E, 0x00001F0A, 0x42000530, 0x00001F0B, + 0x42000532, 0x00001F0C, 0x42000534, 0x00001F0D, + 0x42000536, 0x00001F0E, 0x42000538, 0x00001F0F, + 0x4200053A, 0x00001F10, 0x0200053C, 0x00001F11, + 0x0200053E, 0x00001F12, 0x42000540, 0x00001F13, + 0x42000542, 0x00001F14, 0x42000544, 0x00001F15, + 0x42000546, 0x00001F18, 0x02000548, 0x00001F19, + 0x0200054A, 0x00001F1A, 0x4200054C, 0x00001F1B, + 0x4200054E, 0x00001F1C, 0x42000550, 0x00001F1D, + 0x42000552, 0x00001F20, 0x02000554, 0x00001F21, + 0x02000556, 0x00001F22, 0x42000558, 0x00001F23, + 0x4200055A, 0x00001F24, 0x4200055C, 0x00001F25, + 0x4200055E, 0x00001F26, 0x42000560, 0x00001F27, + 0x42000562, 0x00001F28, 0x02000564, 0x00001F29, + 0x02000566, 0x00001F2A, 0x42000568, 0x00001F2B, + 0x4200056A, 0x00001F2C, 0x4200056C, 0x00001F2D, + 0x4200056E, 0x00001F2E, 0x42000570, 0x00001F2F, + 0x42000572, 0x00001F30, 0x02000574, 0x00001F31, + 0x02000576, 0x00001F32, 0x42000578, 0x00001F33, + 0x4200057A, 0x00001F34, 0x4200057C, 0x00001F35, + 0x4200057E, 0x00001F36, 0x42000580, 0x00001F37, + 0x42000582, 0x00001F38, 0x02000584, 0x00001F39, + 0x02000586, 0x00001F3A, 0x42000588, 0x00001F3B, + 0x4200058A, 0x00001F3C, 0x4200058C, 0x00001F3D, + 0x4200058E, 0x00001F3E, 0x42000590, 0x00001F3F, + 0x42000592, 0x00001F40, 0x02000594, 0x00001F41, + 0x02000596, 0x00001F42, 0x42000598, 0x00001F43, + 0x4200059A, 0x00001F44, 0x4200059C, 0x00001F45, + 0x4200059E, 0x00001F48, 0x020005A0, 0x00001F49, + 0x020005A2, 0x00001F4A, 0x420005A4, 0x00001F4B, + 0x420005A6, 0x00001F4C, 0x420005A8, 0x00001F4D, + 0x420005AA, 0x00001F50, 0x020005AC, 0x00001F51, + 0x020005AE, 0x00001F52, 0x420005B0, 0x00001F53, + 0x420005B2, 0x00001F54, 0x420005B4, 0x00001F55, + 0x420005B6, 0x00001F56, 0x420005B8, 0x00001F57, + 0x420005BA, 0x00001F59, 0x020005BC, 0x00001F5B, + 0x420005BE, 0x00001F5D, 0x420005C0, 0x00001F5F, + 0x420005C2, 0x00001F60, 0x020005C4, 0x00001F61, + 0x020005C6, 0x00001F62, 0x420005C8, 0x00001F63, + 0x420005CA, 0x00001F64, 0x420005CC, 0x00001F65, + 0x420005CE, 0x00001F66, 0x420005D0, 0x00001F67, + 0x420005D2, 0x00001F68, 0x020005D4, 0x00001F69, + 0x020005D6, 0x00001F6A, 0x420005D8, 0x00001F6B, + 0x420005DA, 0x00001F6C, 0x420005DC, 0x00001F6D, + 0x420005DE, 0x00001F6E, 0x420005E0, 0x00001F6F, + 0x420005E2, 0x00001F70, 0x020005E4, 0x00001F71, + 0x410003AC, 0x00001F72, 0x020005E6, 0x00001F73, + 0x410003AD, 0x00001F74, 0x020005E8, 0x00001F75, + 0x410003AE, 0x00001F76, 0x020005EA, 0x00001F77, + 0x410003AF, 0x00001F78, 0x020005EC, 0x00001F79, + 0x410003CC, 0x00001F7A, 0x020005EE, 0x00001F7B, + 0x410003CD, 0x00001F7C, 0x020005F0, 0x00001F7D, + 0x410003CE, 0x00001F80, 0x420005F2, 0x00001F81, + 0x420005F4, 0x00001F82, 0x420005F6, 0x00001F83, + 0x420005F8, 0x00001F84, 0x420005FA, 0x00001F85, + 0x420005FC, 0x00001F86, 0x420005FE, 0x00001F87, + 0x42000600, 0x00001F88, 0x42000602, 0x00001F89, + 0x42000604, 0x00001F8A, 0x42000606, 0x00001F8B, + 0x42000608, 0x00001F8C, 0x4200060A, 0x00001F8D, + 0x4200060C, 0x00001F8E, 0x4200060E, 0x00001F8F, + 0x42000610, 0x00001F90, 0x42000612, 0x00001F91, + 0x42000614, 0x00001F92, 0x42000616, 0x00001F93, + 0x42000618, 0x00001F94, 0x4200061A, 0x00001F95, + 0x4200061C, 0x00001F96, 0x4200061E, 0x00001F97, + 0x42000620, 0x00001F98, 0x42000622, 0x00001F99, + 0x42000624, 0x00001F9A, 0x42000626, 0x00001F9B, + 0x42000628, 0x00001F9C, 0x4200062A, 0x00001F9D, + 0x4200062C, 0x00001F9E, 0x4200062E, 0x00001F9F, + 0x42000630, 0x00001FA0, 0x42000632, 0x00001FA1, + 0x42000634, 0x00001FA2, 0x42000636, 0x00001FA3, + 0x42000638, 0x00001FA4, 0x4200063A, 0x00001FA5, + 0x4200063C, 0x00001FA6, 0x4200063E, 0x00001FA7, + 0x42000640, 0x00001FA8, 0x42000642, 0x00001FA9, + 0x42000644, 0x00001FAA, 0x42000646, 0x00001FAB, + 0x42000648, 0x00001FAC, 0x4200064A, 0x00001FAD, + 0x4200064C, 0x00001FAE, 0x4200064E, 0x00001FAF, + 0x42000650, 0x00001FB0, 0x02000652, 0x00001FB1, + 0x02000654, 0x00001FB2, 0x42000656, 0x00001FB3, + 0x02000658, 0x00001FB4, 0x4200065A, 0x00001FB6, + 0x0200065C, 0x00001FB7, 0x4200065E, 0x00001FB8, + 0x02000660, 0x00001FB9, 0x02000662, 0x00001FBA, + 0x02000664, 0x00001FBB, 0x41000386, 0x00001FBC, + 0x02000666, 0x00001FBE, 0x010003B9, 0x00001FC1, + 0x02000668, 0x00001FC2, 0x4200066A, 0x00001FC3, + 0x0200066C, 0x00001FC4, 0x4200066E, 0x00001FC6, + 0x02000670, 0x00001FC7, 0x42000672, 0x00001FC8, + 0x02000674, 0x00001FC9, 0x41000388, 0x00001FCA, + 0x02000676, 0x00001FCB, 0x41000389, 0x00001FCC, + 0x02000678, 0x00001FCD, 0x0200067A, 0x00001FCE, + 0x0200067C, 0x00001FCF, 0x0200067E, 0x00001FD0, + 0x02000680, 0x00001FD1, 0x02000682, 0x00001FD2, + 0x42000684, 0x00001FD3, 0x41000390, 0x00001FD6, + 0x02000686, 0x00001FD7, 0x42000688, 0x00001FD8, + 0x0200068A, 0x00001FD9, 0x0200068C, 0x00001FDA, + 0x0200068E, 0x00001FDB, 0x4100038A, 0x00001FDD, + 0x02000690, 0x00001FDE, 0x02000692, 0x00001FDF, + 0x02000694, 0x00001FE0, 0x02000696, 0x00001FE1, + 0x02000698, 0x00001FE2, 0x4200069A, 0x00001FE3, + 0x410003B0, 0x00001FE4, 0x0200069C, 0x00001FE5, + 0x0200069E, 0x00001FE6, 0x020006A0, 0x00001FE7, + 0x420006A2, 0x00001FE8, 0x020006A4, 0x00001FE9, + 0x020006A6, 0x00001FEA, 0x020006A8, 0x00001FEB, + 0x4100038E, 0x00001FEC, 0x020006AA, 0x00001FED, + 0x020006AC, 0x00001FEE, 0x41000385, 0x00001FEF, + 0x01000060, 0x00001FF2, 0x420006AE, 0x00001FF3, + 0x020006B0, 0x00001FF4, 0x420006B2, 0x00001FF6, + 0x020006B4, 0x00001FF7, 0x420006B6, 0x00001FF8, + 0x020006B8, 0x00001FF9, 0x4100038C, 0x00001FFA, + 0x020006BA, 0x00001FFB, 0x4100038F, 0x00001FFC, + 0x020006BC, 0x00001FFD, 0x010000B4, 0x00002000, + 0x01002002, 0x00002001, 0x01002003, 0x00002126, + 0x010003A9, 0x0000212A, 0x0100004B, 0x0000212B, + 0x410000C5, 0x0000219A, 0x020006BE, 0x0000219B, + 0x020006C0, 0x000021AE, 0x020006C2, 0x000021CD, + 0x020006C4, 0x000021CE, 0x020006C6, 0x000021CF, + 0x020006C8, 0x00002204, 0x020006CA, 0x00002209, + 0x020006CC, 0x0000220C, 0x020006CE, 0x00002224, + 0x020006D0, 0x00002226, 0x020006D2, 0x00002241, + 0x020006D4, 0x00002244, 0x020006D6, 0x00002247, + 0x020006D8, 0x00002249, 0x020006DA, 0x00002260, + 0x020006DC, 0x00002262, 0x020006DE, 0x0000226D, + 0x020006E0, 0x0000226E, 0x020006E2, 0x0000226F, + 0x020006E4, 0x00002270, 0x020006E6, 0x00002271, + 0x020006E8, 0x00002274, 0x020006EA, 0x00002275, + 0x020006EC, 0x00002278, 0x020006EE, 0x00002279, + 0x020006F0, 0x00002280, 0x020006F2, 0x00002281, + 0x020006F4, 0x00002284, 0x020006F6, 0x00002285, + 0x020006F8, 0x00002288, 0x020006FA, 0x00002289, + 0x020006FC, 0x000022AC, 0x020006FE, 0x000022AD, + 0x02000700, 0x000022AE, 0x02000702, 0x000022AF, + 0x02000704, 0x000022E0, 0x02000706, 0x000022E1, + 0x02000708, 0x000022E2, 0x0200070A, 0x000022E3, + 0x0200070C, 0x000022EA, 0x0200070E, 0x000022EB, + 0x02000710, 0x000022EC, 0x02000712, 0x000022ED, + 0x02000714, 0x00002329, 0x01003008, 0x0000232A, + 0x01003009, 0x00002ADC, 0x02000716, 0x0000304C, + 0x02000718, 0x0000304E, 0x0200071A, 0x00003050, + 0x0200071C, 0x00003052, 0x0200071E, 0x00003054, + 0x02000720, 0x00003056, 0x02000722, 0x00003058, + 0x02000724, 0x0000305A, 0x02000726, 0x0000305C, + 0x02000728, 0x0000305E, 0x0200072A, 0x00003060, + 0x0200072C, 0x00003062, 0x0200072E, 0x00003065, + 0x02000730, 0x00003067, 0x02000732, 0x00003069, + 0x02000734, 0x00003070, 0x02000736, 0x00003071, + 0x02000738, 0x00003073, 0x0200073A, 0x00003074, + 0x0200073C, 0x00003076, 0x0200073E, 0x00003077, + 0x02000740, 0x00003079, 0x02000742, 0x0000307A, + 0x02000744, 0x0000307C, 0x02000746, 0x0000307D, + 0x02000748, 0x00003094, 0x0200074A, 0x0000309E, + 0x0200074C, 0x000030AC, 0x0200074E, 0x000030AE, + 0x02000750, 0x000030B0, 0x02000752, 0x000030B2, + 0x02000754, 0x000030B4, 0x02000756, 0x000030B6, + 0x02000758, 0x000030B8, 0x0200075A, 0x000030BA, + 0x0200075C, 0x000030BC, 0x0200075E, 0x000030BE, + 0x02000760, 0x000030C0, 0x02000762, 0x000030C2, + 0x02000764, 0x000030C5, 0x02000766, 0x000030C7, + 0x02000768, 0x000030C9, 0x0200076A, 0x000030D0, + 0x0200076C, 0x000030D1, 0x0200076E, 0x000030D3, + 0x02000770, 0x000030D4, 0x02000772, 0x000030D6, + 0x02000774, 0x000030D7, 0x02000776, 0x000030D9, + 0x02000778, 0x000030DA, 0x0200077A, 0x000030DC, + 0x0200077C, 0x000030DD, 0x0200077E, 0x000030F4, + 0x02000780, 0x000030F7, 0x02000782, 0x000030F8, + 0x02000784, 0x000030F9, 0x02000786, 0x000030FA, + 0x02000788, 0x000030FE, 0x0200078A, 0x0000F900, + 0x01008C48, 0x0000F901, 0x010066F4, 0x0000F902, + 0x01008ECA, 0x0000F903, 0x01008CC8, 0x0000F904, + 0x01006ED1, 0x0000F905, 0x01004E32, 0x0000F906, + 0x010053E5, 0x0000F907, 0x01009F9C, 0x0000F908, + 0x01009F9C, 0x0000F909, 0x01005951, 0x0000F90A, + 0x010091D1, 0x0000F90B, 0x01005587, 0x0000F90C, + 0x01005948, 0x0000F90D, 0x010061F6, 0x0000F90E, + 0x01007669, 0x0000F90F, 0x01007F85, 0x0000F910, + 0x0100863F, 0x0000F911, 0x010087BA, 0x0000F912, + 0x010088F8, 0x0000F913, 0x0100908F, 0x0000F914, + 0x01006A02, 0x0000F915, 0x01006D1B, 0x0000F916, + 0x010070D9, 0x0000F917, 0x010073DE, 0x0000F918, + 0x0100843D, 0x0000F919, 0x0100916A, 0x0000F91A, + 0x010099F1, 0x0000F91B, 0x01004E82, 0x0000F91C, + 0x01005375, 0x0000F91D, 0x01006B04, 0x0000F91E, + 0x0100721B, 0x0000F91F, 0x0100862D, 0x0000F920, + 0x01009E1E, 0x0000F921, 0x01005D50, 0x0000F922, + 0x01006FEB, 0x0000F923, 0x010085CD, 0x0000F924, + 0x01008964, 0x0000F925, 0x010062C9, 0x0000F926, + 0x010081D8, 0x0000F927, 0x0100881F, 0x0000F928, + 0x01005ECA, 0x0000F929, 0x01006717, 0x0000F92A, + 0x01006D6A, 0x0000F92B, 0x010072FC, 0x0000F92C, + 0x010090CE, 0x0000F92D, 0x01004F86, 0x0000F92E, + 0x010051B7, 0x0000F92F, 0x010052DE, 0x0000F930, + 0x010064C4, 0x0000F931, 0x01006AD3, 0x0000F932, + 0x01007210, 0x0000F933, 0x010076E7, 0x0000F934, + 0x01008001, 0x0000F935, 0x01008606, 0x0000F936, + 0x0100865C, 0x0000F937, 0x01008DEF, 0x0000F938, + 0x01009732, 0x0000F939, 0x01009B6F, 0x0000F93A, + 0x01009DFA, 0x0000F93B, 0x0100788C, 0x0000F93C, + 0x0100797F, 0x0000F93D, 0x01007DA0, 0x0000F93E, + 0x010083C9, 0x0000F93F, 0x01009304, 0x0000F940, + 0x01009E7F, 0x0000F941, 0x01008AD6, 0x0000F942, + 0x010058DF, 0x0000F943, 0x01005F04, 0x0000F944, + 0x01007C60, 0x0000F945, 0x0100807E, 0x0000F946, + 0x01007262, 0x0000F947, 0x010078CA, 0x0000F948, + 0x01008CC2, 0x0000F949, 0x010096F7, 0x0000F94A, + 0x010058D8, 0x0000F94B, 0x01005C62, 0x0000F94C, + 0x01006A13, 0x0000F94D, 0x01006DDA, 0x0000F94E, + 0x01006F0F, 0x0000F94F, 0x01007D2F, 0x0000F950, + 0x01007E37, 0x0000F951, 0x0100964B, 0x0000F952, + 0x010052D2, 0x0000F953, 0x0100808B, 0x0000F954, + 0x010051DC, 0x0000F955, 0x010051CC, 0x0000F956, + 0x01007A1C, 0x0000F957, 0x01007DBE, 0x0000F958, + 0x010083F1, 0x0000F959, 0x01009675, 0x0000F95A, + 0x01008B80, 0x0000F95B, 0x010062CF, 0x0000F95C, + 0x01006A02, 0x0000F95D, 0x01008AFE, 0x0000F95E, + 0x01004E39, 0x0000F95F, 0x01005BE7, 0x0000F960, + 0x01006012, 0x0000F961, 0x01007387, 0x0000F962, + 0x01007570, 0x0000F963, 0x01005317, 0x0000F964, + 0x010078FB, 0x0000F965, 0x01004FBF, 0x0000F966, + 0x01005FA9, 0x0000F967, 0x01004E0D, 0x0000F968, + 0x01006CCC, 0x0000F969, 0x01006578, 0x0000F96A, + 0x01007D22, 0x0000F96B, 0x010053C3, 0x0000F96C, + 0x0100585E, 0x0000F96D, 0x01007701, 0x0000F96E, + 0x01008449, 0x0000F96F, 0x01008AAA, 0x0000F970, + 0x01006BBA, 0x0000F971, 0x01008FB0, 0x0000F972, + 0x01006C88, 0x0000F973, 0x010062FE, 0x0000F974, + 0x010082E5, 0x0000F975, 0x010063A0, 0x0000F976, + 0x01007565, 0x0000F977, 0x01004EAE, 0x0000F978, + 0x01005169, 0x0000F979, 0x010051C9, 0x0000F97A, + 0x01006881, 0x0000F97B, 0x01007CE7, 0x0000F97C, + 0x0100826F, 0x0000F97D, 0x01008AD2, 0x0000F97E, + 0x010091CF, 0x0000F97F, 0x010052F5, 0x0000F980, + 0x01005442, 0x0000F981, 0x01005973, 0x0000F982, + 0x01005EEC, 0x0000F983, 0x010065C5, 0x0000F984, + 0x01006FFE, 0x0000F985, 0x0100792A, 0x0000F986, + 0x010095AD, 0x0000F987, 0x01009A6A, 0x0000F988, + 0x01009E97, 0x0000F989, 0x01009ECE, 0x0000F98A, + 0x0100529B, 0x0000F98B, 0x010066C6, 0x0000F98C, + 0x01006B77, 0x0000F98D, 0x01008F62, 0x0000F98E, + 0x01005E74, 0x0000F98F, 0x01006190, 0x0000F990, + 0x01006200, 0x0000F991, 0x0100649A, 0x0000F992, + 0x01006F23, 0x0000F993, 0x01007149, 0x0000F994, + 0x01007489, 0x0000F995, 0x010079CA, 0x0000F996, + 0x01007DF4, 0x0000F997, 0x0100806F, 0x0000F998, + 0x01008F26, 0x0000F999, 0x010084EE, 0x0000F99A, + 0x01009023, 0x0000F99B, 0x0100934A, 0x0000F99C, + 0x01005217, 0x0000F99D, 0x010052A3, 0x0000F99E, + 0x010054BD, 0x0000F99F, 0x010070C8, 0x0000F9A0, + 0x010088C2, 0x0000F9A1, 0x01008AAA, 0x0000F9A2, + 0x01005EC9, 0x0000F9A3, 0x01005FF5, 0x0000F9A4, + 0x0100637B, 0x0000F9A5, 0x01006BAE, 0x0000F9A6, + 0x01007C3E, 0x0000F9A7, 0x01007375, 0x0000F9A8, + 0x01004EE4, 0x0000F9A9, 0x010056F9, 0x0000F9AA, + 0x01005BE7, 0x0000F9AB, 0x01005DBA, 0x0000F9AC, + 0x0100601C, 0x0000F9AD, 0x010073B2, 0x0000F9AE, + 0x01007469, 0x0000F9AF, 0x01007F9A, 0x0000F9B0, + 0x01008046, 0x0000F9B1, 0x01009234, 0x0000F9B2, + 0x010096F6, 0x0000F9B3, 0x01009748, 0x0000F9B4, + 0x01009818, 0x0000F9B5, 0x01004F8B, 0x0000F9B6, + 0x010079AE, 0x0000F9B7, 0x010091B4, 0x0000F9B8, + 0x010096B8, 0x0000F9B9, 0x010060E1, 0x0000F9BA, + 0x01004E86, 0x0000F9BB, 0x010050DA, 0x0000F9BC, + 0x01005BEE, 0x0000F9BD, 0x01005C3F, 0x0000F9BE, + 0x01006599, 0x0000F9BF, 0x01006A02, 0x0000F9C0, + 0x010071CE, 0x0000F9C1, 0x01007642, 0x0000F9C2, + 0x010084FC, 0x0000F9C3, 0x0100907C, 0x0000F9C4, + 0x01009F8D, 0x0000F9C5, 0x01006688, 0x0000F9C6, + 0x0100962E, 0x0000F9C7, 0x01005289, 0x0000F9C8, + 0x0100677B, 0x0000F9C9, 0x010067F3, 0x0000F9CA, + 0x01006D41, 0x0000F9CB, 0x01006E9C, 0x0000F9CC, + 0x01007409, 0x0000F9CD, 0x01007559, 0x0000F9CE, + 0x0100786B, 0x0000F9CF, 0x01007D10, 0x0000F9D0, + 0x0100985E, 0x0000F9D1, 0x0100516D, 0x0000F9D2, + 0x0100622E, 0x0000F9D3, 0x01009678, 0x0000F9D4, + 0x0100502B, 0x0000F9D5, 0x01005D19, 0x0000F9D6, + 0x01006DEA, 0x0000F9D7, 0x01008F2A, 0x0000F9D8, + 0x01005F8B, 0x0000F9D9, 0x01006144, 0x0000F9DA, + 0x01006817, 0x0000F9DB, 0x01007387, 0x0000F9DC, + 0x01009686, 0x0000F9DD, 0x01005229, 0x0000F9DE, + 0x0100540F, 0x0000F9DF, 0x01005C65, 0x0000F9E0, + 0x01006613, 0x0000F9E1, 0x0100674E, 0x0000F9E2, + 0x010068A8, 0x0000F9E3, 0x01006CE5, 0x0000F9E4, + 0x01007406, 0x0000F9E5, 0x010075E2, 0x0000F9E6, + 0x01007F79, 0x0000F9E7, 0x010088CF, 0x0000F9E8, + 0x010088E1, 0x0000F9E9, 0x010091CC, 0x0000F9EA, + 0x010096E2, 0x0000F9EB, 0x0100533F, 0x0000F9EC, + 0x01006EBA, 0x0000F9ED, 0x0100541D, 0x0000F9EE, + 0x010071D0, 0x0000F9EF, 0x01007498, 0x0000F9F0, + 0x010085FA, 0x0000F9F1, 0x010096A3, 0x0000F9F2, + 0x01009C57, 0x0000F9F3, 0x01009E9F, 0x0000F9F4, + 0x01006797, 0x0000F9F5, 0x01006DCB, 0x0000F9F6, + 0x010081E8, 0x0000F9F7, 0x01007ACB, 0x0000F9F8, + 0x01007B20, 0x0000F9F9, 0x01007C92, 0x0000F9FA, + 0x010072C0, 0x0000F9FB, 0x01007099, 0x0000F9FC, + 0x01008B58, 0x0000F9FD, 0x01004EC0, 0x0000F9FE, + 0x01008336, 0x0000F9FF, 0x0100523A, 0x0000FA00, + 0x01005207, 0x0000FA01, 0x01005EA6, 0x0000FA02, + 0x010062D3, 0x0000FA03, 0x01007CD6, 0x0000FA04, + 0x01005B85, 0x0000FA05, 0x01006D1E, 0x0000FA06, + 0x010066B4, 0x0000FA07, 0x01008F3B, 0x0000FA08, + 0x0100884C, 0x0000FA09, 0x0100964D, 0x0000FA0A, + 0x0100898B, 0x0000FA0B, 0x01005ED3, 0x0000FA0C, + 0x01005140, 0x0000FA0D, 0x010055C0, 0x0000FA10, + 0x0100585A, 0x0000FA12, 0x01006674, 0x0000FA15, + 0x010051DE, 0x0000FA16, 0x0100732A, 0x0000FA17, + 0x010076CA, 0x0000FA18, 0x0100793C, 0x0000FA19, + 0x0100795E, 0x0000FA1A, 0x01007965, 0x0000FA1B, + 0x0100798F, 0x0000FA1C, 0x01009756, 0x0000FA1D, + 0x01007CBE, 0x0000FA1E, 0x01007FBD, 0x0000FA20, + 0x01008612, 0x0000FA22, 0x01008AF8, 0x0000FA25, + 0x01009038, 0x0000FA26, 0x010090FD, 0x0000FA2A, + 0x010098EF, 0x0000FA2B, 0x010098FC, 0x0000FA2C, + 0x01009928, 0x0000FA2D, 0x01009DB4, 0x0000FA2E, + 0x010090DE, 0x0000FA2F, 0x010096B7, 0x0000FA30, + 0x01004FAE, 0x0000FA31, 0x010050E7, 0x0000FA32, + 0x0100514D, 0x0000FA33, 0x010052C9, 0x0000FA34, + 0x010052E4, 0x0000FA35, 0x01005351, 0x0000FA36, + 0x0100559D, 0x0000FA37, 0x01005606, 0x0000FA38, + 0x01005668, 0x0000FA39, 0x01005840, 0x0000FA3A, + 0x010058A8, 0x0000FA3B, 0x01005C64, 0x0000FA3C, + 0x01005C6E, 0x0000FA3D, 0x01006094, 0x0000FA3E, + 0x01006168, 0x0000FA3F, 0x0100618E, 0x0000FA40, + 0x010061F2, 0x0000FA41, 0x0100654F, 0x0000FA42, + 0x010065E2, 0x0000FA43, 0x01006691, 0x0000FA44, + 0x01006885, 0x0000FA45, 0x01006D77, 0x0000FA46, + 0x01006E1A, 0x0000FA47, 0x01006F22, 0x0000FA48, + 0x0100716E, 0x0000FA49, 0x0100722B, 0x0000FA4A, + 0x01007422, 0x0000FA4B, 0x01007891, 0x0000FA4C, + 0x0100793E, 0x0000FA4D, 0x01007949, 0x0000FA4E, + 0x01007948, 0x0000FA4F, 0x01007950, 0x0000FA50, + 0x01007956, 0x0000FA51, 0x0100795D, 0x0000FA52, + 0x0100798D, 0x0000FA53, 0x0100798E, 0x0000FA54, + 0x01007A40, 0x0000FA55, 0x01007A81, 0x0000FA56, + 0x01007BC0, 0x0000FA57, 0x01007DF4, 0x0000FA58, + 0x01007E09, 0x0000FA59, 0x01007E41, 0x0000FA5A, + 0x01007F72, 0x0000FA5B, 0x01008005, 0x0000FA5C, + 0x010081ED, 0x0000FA5D, 0x01008279, 0x0000FA5E, + 0x01008279, 0x0000FA5F, 0x01008457, 0x0000FA60, + 0x01008910, 0x0000FA61, 0x01008996, 0x0000FA62, + 0x01008B01, 0x0000FA63, 0x01008B39, 0x0000FA64, + 0x01008CD3, 0x0000FA65, 0x01008D08, 0x0000FA66, + 0x01008FB6, 0x0000FA67, 0x01009038, 0x0000FA68, + 0x010096E3, 0x0000FA69, 0x010097FF, 0x0000FA6A, + 0x0100983B, 0x0000FA6B, 0x01006075, 0x0000FA6C, + 0x810242EE, 0x0000FA6D, 0x01008218, 0x0000FA70, + 0x01004E26, 0x0000FA71, 0x010051B5, 0x0000FA72, + 0x01005168, 0x0000FA73, 0x01004F80, 0x0000FA74, + 0x01005145, 0x0000FA75, 0x01005180, 0x0000FA76, + 0x010052C7, 0x0000FA77, 0x010052FA, 0x0000FA78, + 0x0100559D, 0x0000FA79, 0x01005555, 0x0000FA7A, + 0x01005599, 0x0000FA7B, 0x010055E2, 0x0000FA7C, + 0x0100585A, 0x0000FA7D, 0x010058B3, 0x0000FA7E, + 0x01005944, 0x0000FA7F, 0x01005954, 0x0000FA80, + 0x01005A62, 0x0000FA81, 0x01005B28, 0x0000FA82, + 0x01005ED2, 0x0000FA83, 0x01005ED9, 0x0000FA84, + 0x01005F69, 0x0000FA85, 0x01005FAD, 0x0000FA86, + 0x010060D8, 0x0000FA87, 0x0100614E, 0x0000FA88, + 0x01006108, 0x0000FA89, 0x0100618E, 0x0000FA8A, + 0x01006160, 0x0000FA8B, 0x010061F2, 0x0000FA8C, + 0x01006234, 0x0000FA8D, 0x010063C4, 0x0000FA8E, + 0x0100641C, 0x0000FA8F, 0x01006452, 0x0000FA90, + 0x01006556, 0x0000FA91, 0x01006674, 0x0000FA92, + 0x01006717, 0x0000FA93, 0x0100671B, 0x0000FA94, + 0x01006756, 0x0000FA95, 0x01006B79, 0x0000FA96, + 0x01006BBA, 0x0000FA97, 0x01006D41, 0x0000FA98, + 0x01006EDB, 0x0000FA99, 0x01006ECB, 0x0000FA9A, + 0x01006F22, 0x0000FA9B, 0x0100701E, 0x0000FA9C, + 0x0100716E, 0x0000FA9D, 0x010077A7, 0x0000FA9E, + 0x01007235, 0x0000FA9F, 0x010072AF, 0x0000FAA0, + 0x0100732A, 0x0000FAA1, 0x01007471, 0x0000FAA2, + 0x01007506, 0x0000FAA3, 0x0100753B, 0x0000FAA4, + 0x0100761D, 0x0000FAA5, 0x0100761F, 0x0000FAA6, + 0x010076CA, 0x0000FAA7, 0x010076DB, 0x0000FAA8, + 0x010076F4, 0x0000FAA9, 0x0100774A, 0x0000FAAA, + 0x01007740, 0x0000FAAB, 0x010078CC, 0x0000FAAC, + 0x01007AB1, 0x0000FAAD, 0x01007BC0, 0x0000FAAE, + 0x01007C7B, 0x0000FAAF, 0x01007D5B, 0x0000FAB0, + 0x01007DF4, 0x0000FAB1, 0x01007F3E, 0x0000FAB2, + 0x01008005, 0x0000FAB3, 0x01008352, 0x0000FAB4, + 0x010083EF, 0x0000FAB5, 0x01008779, 0x0000FAB6, + 0x01008941, 0x0000FAB7, 0x01008986, 0x0000FAB8, + 0x01008996, 0x0000FAB9, 0x01008ABF, 0x0000FABA, + 0x01008AF8, 0x0000FABB, 0x01008ACB, 0x0000FABC, + 0x01008B01, 0x0000FABD, 0x01008AFE, 0x0000FABE, + 0x01008AED, 0x0000FABF, 0x01008B39, 0x0000FAC0, + 0x01008B8A, 0x0000FAC1, 0x01008D08, 0x0000FAC2, + 0x01008F38, 0x0000FAC3, 0x01009072, 0x0000FAC4, + 0x01009199, 0x0000FAC5, 0x01009276, 0x0000FAC6, + 0x0100967C, 0x0000FAC7, 0x010096E3, 0x0000FAC8, + 0x01009756, 0x0000FAC9, 0x010097DB, 0x0000FACA, + 0x010097FF, 0x0000FACB, 0x0100980B, 0x0000FACC, + 0x0100983B, 0x0000FACD, 0x01009B12, 0x0000FACE, + 0x01009F9C, 0x0000FACF, 0x8102284A, 0x0000FAD0, + 0x81022844, 0x0000FAD1, 0x810233D5, 0x0000FAD2, + 0x01003B9D, 0x0000FAD3, 0x01004018, 0x0000FAD4, + 0x01004039, 0x0000FAD5, 0x81025249, 0x0000FAD6, + 0x81025CD0, 0x0000FAD7, 0x81027ED3, 0x0000FAD8, + 0x01009F43, 0x0000FAD9, 0x01009F8E, 0x0000FB1D, + 0x0200078C, 0x0000FB1F, 0x0200078E, 0x0000FB2A, + 0x02000790, 0x0000FB2B, 0x02000792, 0x0000FB2C, + 0x42000794, 0x0000FB2D, 0x42000796, 0x0000FB2E, + 0x02000798, 0x0000FB2F, 0x0200079A, 0x0000FB30, + 0x0200079C, 0x0000FB31, 0x0200079E, 0x0000FB32, + 0x020007A0, 0x0000FB33, 0x020007A2, 0x0000FB34, + 0x020007A4, 0x0000FB35, 0x020007A6, 0x0000FB36, + 0x020007A8, 0x0000FB38, 0x020007AA, 0x0000FB39, + 0x020007AC, 0x0000FB3A, 0x020007AE, 0x0000FB3B, + 0x020007B0, 0x0000FB3C, 0x020007B2, 0x0000FB3E, + 0x020007B4, 0x0000FB40, 0x020007B6, 0x0000FB41, + 0x020007B8, 0x0000FB43, 0x020007BA, 0x0000FB44, + 0x020007BC, 0x0000FB46, 0x020007BE, 0x0000FB47, + 0x020007C0, 0x0000FB48, 0x020007C2, 0x0000FB49, + 0x020007C4, 0x0000FB4A, 0x020007C6, 0x0000FB4B, + 0x020007C8, 0x0000FB4C, 0x020007CA, 0x0000FB4D, + 0x020007CC, 0x0000FB4E, 0x020007CE, 0x0001109A, + 0x820007D0, 0x0001109C, 0x820007D2, 0x000110AB, + 0x820007D4, 0x0001112E, 0x820007D6, 0x0001112F, + 0x820007D8, 0x0001134B, 0x820007DA, 0x0001134C, + 0x820007DC, 0x000114BB, 0x820007DE, 0x000114BC, + 0x820007E0, 0x000114BE, 0x820007E2, 0x000115BA, + 0x820007E4, 0x000115BB, 0x820007E6, 0x00011938, + 0x820007E8, 0x0001D15E, 0x820007EA, 0x0001D15F, + 0x820007EC, 0x0001D160, 0xC20007EE, 0x0001D161, + 0xC20007F0, 0x0001D162, 0xC20007F2, 0x0001D163, + 0xC20007F4, 0x0001D164, 0xC20007F6, 0x0001D1BB, + 0x820007F8, 0x0001D1BC, 0x820007FA, 0x0001D1BD, + 0xC20007FC, 0x0001D1BE, 0xC20007FE, 0x0001D1BF, + 0xC2000800, 0x0001D1C0, 0xC2000802, 0x0002F800, + 0x01004E3D, 0x0002F801, 0x01004E38, 0x0002F802, + 0x01004E41, 0x0002F803, 0x81020122, 0x0002F804, + 0x01004F60, 0x0002F805, 0x01004FAE, 0x0002F806, + 0x01004FBB, 0x0002F807, 0x01005002, 0x0002F808, + 0x0100507A, 0x0002F809, 0x01005099, 0x0002F80A, + 0x010050E7, 0x0002F80B, 0x010050CF, 0x0002F80C, + 0x0100349E, 0x0002F80D, 0x8102063A, 0x0002F80E, + 0x0100514D, 0x0002F80F, 0x01005154, 0x0002F810, + 0x01005164, 0x0002F811, 0x01005177, 0x0002F812, + 0x8102051C, 0x0002F813, 0x010034B9, 0x0002F814, + 0x01005167, 0x0002F815, 0x0100518D, 0x0002F816, + 0x8102054B, 0x0002F817, 0x01005197, 0x0002F818, + 0x010051A4, 0x0002F819, 0x01004ECC, 0x0002F81A, + 0x010051AC, 0x0002F81B, 0x010051B5, 0x0002F81C, + 0x810291DF, 0x0002F81D, 0x010051F5, 0x0002F81E, + 0x01005203, 0x0002F81F, 0x010034DF, 0x0002F820, + 0x0100523B, 0x0002F821, 0x01005246, 0x0002F822, + 0x01005272, 0x0002F823, 0x01005277, 0x0002F824, + 0x01003515, 0x0002F825, 0x010052C7, 0x0002F826, + 0x010052C9, 0x0002F827, 0x010052E4, 0x0002F828, + 0x010052FA, 0x0002F829, 0x01005305, 0x0002F82A, + 0x01005306, 0x0002F82B, 0x01005317, 0x0002F82C, + 0x01005349, 0x0002F82D, 0x01005351, 0x0002F82E, + 0x0100535A, 0x0002F82F, 0x01005373, 0x0002F830, + 0x0100537D, 0x0002F831, 0x0100537F, 0x0002F832, + 0x0100537F, 0x0002F833, 0x0100537F, 0x0002F834, + 0x81020A2C, 0x0002F835, 0x01007070, 0x0002F836, + 0x010053CA, 0x0002F837, 0x010053DF, 0x0002F838, + 0x81020B63, 0x0002F839, 0x010053EB, 0x0002F83A, + 0x010053F1, 0x0002F83B, 0x01005406, 0x0002F83C, + 0x0100549E, 0x0002F83D, 0x01005438, 0x0002F83E, + 0x01005448, 0x0002F83F, 0x01005468, 0x0002F840, + 0x010054A2, 0x0002F841, 0x010054F6, 0x0002F842, + 0x01005510, 0x0002F843, 0x01005553, 0x0002F844, + 0x01005563, 0x0002F845, 0x01005584, 0x0002F846, + 0x01005584, 0x0002F847, 0x01005599, 0x0002F848, + 0x010055AB, 0x0002F849, 0x010055B3, 0x0002F84A, + 0x010055C2, 0x0002F84B, 0x01005716, 0x0002F84C, + 0x01005606, 0x0002F84D, 0x01005717, 0x0002F84E, + 0x01005651, 0x0002F84F, 0x01005674, 0x0002F850, + 0x01005207, 0x0002F851, 0x010058EE, 0x0002F852, + 0x010057CE, 0x0002F853, 0x010057F4, 0x0002F854, + 0x0100580D, 0x0002F855, 0x0100578B, 0x0002F856, + 0x01005832, 0x0002F857, 0x01005831, 0x0002F858, + 0x010058AC, 0x0002F859, 0x810214E4, 0x0002F85A, + 0x010058F2, 0x0002F85B, 0x010058F7, 0x0002F85C, + 0x01005906, 0x0002F85D, 0x0100591A, 0x0002F85E, + 0x01005922, 0x0002F85F, 0x01005962, 0x0002F860, + 0x810216A8, 0x0002F861, 0x810216EA, 0x0002F862, + 0x010059EC, 0x0002F863, 0x01005A1B, 0x0002F864, + 0x01005A27, 0x0002F865, 0x010059D8, 0x0002F866, + 0x01005A66, 0x0002F867, 0x010036EE, 0x0002F868, + 0x010036FC, 0x0002F869, 0x01005B08, 0x0002F86A, + 0x01005B3E, 0x0002F86B, 0x01005B3E, 0x0002F86C, + 0x810219C8, 0x0002F86D, 0x01005BC3, 0x0002F86E, + 0x01005BD8, 0x0002F86F, 0x01005BE7, 0x0002F870, + 0x01005BF3, 0x0002F871, 0x81021B18, 0x0002F872, + 0x01005BFF, 0x0002F873, 0x01005C06, 0x0002F874, + 0x01005F53, 0x0002F875, 0x01005C22, 0x0002F876, + 0x01003781, 0x0002F877, 0x01005C60, 0x0002F878, + 0x01005C6E, 0x0002F879, 0x01005CC0, 0x0002F87A, + 0x01005C8D, 0x0002F87B, 0x81021DE4, 0x0002F87C, + 0x01005D43, 0x0002F87D, 0x81021DE6, 0x0002F87E, + 0x01005D6E, 0x0002F87F, 0x01005D6B, 0x0002F880, + 0x01005D7C, 0x0002F881, 0x01005DE1, 0x0002F882, + 0x01005DE2, 0x0002F883, 0x0100382F, 0x0002F884, + 0x01005DFD, 0x0002F885, 0x01005E28, 0x0002F886, + 0x01005E3D, 0x0002F887, 0x01005E69, 0x0002F888, + 0x01003862, 0x0002F889, 0x81022183, 0x0002F88A, + 0x0100387C, 0x0002F88B, 0x01005EB0, 0x0002F88C, + 0x01005EB3, 0x0002F88D, 0x01005EB6, 0x0002F88E, + 0x01005ECA, 0x0002F88F, 0x8102A392, 0x0002F890, + 0x01005EFE, 0x0002F891, 0x81022331, 0x0002F892, + 0x81022331, 0x0002F893, 0x01008201, 0x0002F894, + 0x01005F22, 0x0002F895, 0x01005F22, 0x0002F896, + 0x010038C7, 0x0002F897, 0x810232B8, 0x0002F898, + 0x810261DA, 0x0002F899, 0x01005F62, 0x0002F89A, + 0x01005F6B, 0x0002F89B, 0x010038E3, 0x0002F89C, + 0x01005F9A, 0x0002F89D, 0x01005FCD, 0x0002F89E, + 0x01005FD7, 0x0002F89F, 0x01005FF9, 0x0002F8A0, + 0x01006081, 0x0002F8A1, 0x0100393A, 0x0002F8A2, + 0x0100391C, 0x0002F8A3, 0x01006094, 0x0002F8A4, + 0x810226D4, 0x0002F8A5, 0x010060C7, 0x0002F8A6, + 0x01006148, 0x0002F8A7, 0x0100614C, 0x0002F8A8, + 0x0100614E, 0x0002F8A9, 0x0100614C, 0x0002F8AA, + 0x0100617A, 0x0002F8AB, 0x0100618E, 0x0002F8AC, + 0x010061B2, 0x0002F8AD, 0x010061A4, 0x0002F8AE, + 0x010061AF, 0x0002F8AF, 0x010061DE, 0x0002F8B0, + 0x010061F2, 0x0002F8B1, 0x010061F6, 0x0002F8B2, + 0x01006210, 0x0002F8B3, 0x0100621B, 0x0002F8B4, + 0x0100625D, 0x0002F8B5, 0x010062B1, 0x0002F8B6, + 0x010062D4, 0x0002F8B7, 0x01006350, 0x0002F8B8, + 0x81022B0C, 0x0002F8B9, 0x0100633D, 0x0002F8BA, + 0x010062FC, 0x0002F8BB, 0x01006368, 0x0002F8BC, + 0x01006383, 0x0002F8BD, 0x010063E4, 0x0002F8BE, + 0x81022BF1, 0x0002F8BF, 0x01006422, 0x0002F8C0, + 0x010063C5, 0x0002F8C1, 0x010063A9, 0x0002F8C2, + 0x01003A2E, 0x0002F8C3, 0x01006469, 0x0002F8C4, + 0x0100647E, 0x0002F8C5, 0x0100649D, 0x0002F8C6, + 0x01006477, 0x0002F8C7, 0x01003A6C, 0x0002F8C8, + 0x0100654F, 0x0002F8C9, 0x0100656C, 0x0002F8CA, + 0x8102300A, 0x0002F8CB, 0x010065E3, 0x0002F8CC, + 0x010066F8, 0x0002F8CD, 0x01006649, 0x0002F8CE, + 0x01003B19, 0x0002F8CF, 0x01006691, 0x0002F8D0, + 0x01003B08, 0x0002F8D1, 0x01003AE4, 0x0002F8D2, + 0x01005192, 0x0002F8D3, 0x01005195, 0x0002F8D4, + 0x01006700, 0x0002F8D5, 0x0100669C, 0x0002F8D6, + 0x010080AD, 0x0002F8D7, 0x010043D9, 0x0002F8D8, + 0x01006717, 0x0002F8D9, 0x0100671B, 0x0002F8DA, + 0x01006721, 0x0002F8DB, 0x0100675E, 0x0002F8DC, + 0x01006753, 0x0002F8DD, 0x810233C3, 0x0002F8DE, + 0x01003B49, 0x0002F8DF, 0x010067FA, 0x0002F8E0, + 0x01006785, 0x0002F8E1, 0x01006852, 0x0002F8E2, + 0x01006885, 0x0002F8E3, 0x8102346D, 0x0002F8E4, + 0x0100688E, 0x0002F8E5, 0x0100681F, 0x0002F8E6, + 0x01006914, 0x0002F8E7, 0x01003B9D, 0x0002F8E8, + 0x01006942, 0x0002F8E9, 0x010069A3, 0x0002F8EA, + 0x010069EA, 0x0002F8EB, 0x01006AA8, 0x0002F8EC, + 0x810236A3, 0x0002F8ED, 0x01006ADB, 0x0002F8EE, + 0x01003C18, 0x0002F8EF, 0x01006B21, 0x0002F8F0, + 0x810238A7, 0x0002F8F1, 0x01006B54, 0x0002F8F2, + 0x01003C4E, 0x0002F8F3, 0x01006B72, 0x0002F8F4, + 0x01006B9F, 0x0002F8F5, 0x01006BBA, 0x0002F8F6, + 0x01006BBB, 0x0002F8F7, 0x81023A8D, 0x0002F8F8, + 0x81021D0B, 0x0002F8F9, 0x81023AFA, 0x0002F8FA, + 0x01006C4E, 0x0002F8FB, 0x81023CBC, 0x0002F8FC, + 0x01006CBF, 0x0002F8FD, 0x01006CCD, 0x0002F8FE, + 0x01006C67, 0x0002F8FF, 0x01006D16, 0x0002F900, + 0x01006D3E, 0x0002F901, 0x01006D77, 0x0002F902, + 0x01006D41, 0x0002F903, 0x01006D69, 0x0002F904, + 0x01006D78, 0x0002F905, 0x01006D85, 0x0002F906, + 0x81023D1E, 0x0002F907, 0x01006D34, 0x0002F908, + 0x01006E2F, 0x0002F909, 0x01006E6E, 0x0002F90A, + 0x01003D33, 0x0002F90B, 0x01006ECB, 0x0002F90C, + 0x01006EC7, 0x0002F90D, 0x81023ED1, 0x0002F90E, + 0x01006DF9, 0x0002F90F, 0x01006F6E, 0x0002F910, + 0x81023F5E, 0x0002F911, 0x81023F8E, 0x0002F912, + 0x01006FC6, 0x0002F913, 0x01007039, 0x0002F914, + 0x0100701E, 0x0002F915, 0x0100701B, 0x0002F916, + 0x01003D96, 0x0002F917, 0x0100704A, 0x0002F918, + 0x0100707D, 0x0002F919, 0x01007077, 0x0002F91A, + 0x010070AD, 0x0002F91B, 0x81020525, 0x0002F91C, + 0x01007145, 0x0002F91D, 0x81024263, 0x0002F91E, + 0x0100719C, 0x0002F91F, 0x810243AB, 0x0002F920, + 0x01007228, 0x0002F921, 0x01007235, 0x0002F922, + 0x01007250, 0x0002F923, 0x81024608, 0x0002F924, + 0x01007280, 0x0002F925, 0x01007295, 0x0002F926, + 0x81024735, 0x0002F927, 0x81024814, 0x0002F928, + 0x0100737A, 0x0002F929, 0x0100738B, 0x0002F92A, + 0x01003EAC, 0x0002F92B, 0x010073A5, 0x0002F92C, + 0x01003EB8, 0x0002F92D, 0x01003EB8, 0x0002F92E, + 0x01007447, 0x0002F92F, 0x0100745C, 0x0002F930, + 0x01007471, 0x0002F931, 0x01007485, 0x0002F932, + 0x010074CA, 0x0002F933, 0x01003F1B, 0x0002F934, + 0x01007524, 0x0002F935, 0x81024C36, 0x0002F936, + 0x0100753E, 0x0002F937, 0x81024C92, 0x0002F938, + 0x01007570, 0x0002F939, 0x8102219F, 0x0002F93A, + 0x01007610, 0x0002F93B, 0x81024FA1, 0x0002F93C, + 0x81024FB8, 0x0002F93D, 0x81025044, 0x0002F93E, + 0x01003FFC, 0x0002F93F, 0x01004008, 0x0002F940, + 0x010076F4, 0x0002F941, 0x810250F3, 0x0002F942, + 0x810250F2, 0x0002F943, 0x81025119, 0x0002F944, + 0x81025133, 0x0002F945, 0x0100771E, 0x0002F946, + 0x0100771F, 0x0002F947, 0x0100771F, 0x0002F948, + 0x0100774A, 0x0002F949, 0x01004039, 0x0002F94A, + 0x0100778B, 0x0002F94B, 0x01004046, 0x0002F94C, + 0x01004096, 0x0002F94D, 0x8102541D, 0x0002F94E, + 0x0100784E, 0x0002F94F, 0x0100788C, 0x0002F950, + 0x010078CC, 0x0002F951, 0x010040E3, 0x0002F952, + 0x81025626, 0x0002F953, 0x01007956, 0x0002F954, + 0x8102569A, 0x0002F955, 0x810256C5, 0x0002F956, + 0x0100798F, 0x0002F957, 0x010079EB, 0x0002F958, + 0x0100412F, 0x0002F959, 0x01007A40, 0x0002F95A, + 0x01007A4A, 0x0002F95B, 0x01007A4F, 0x0002F95C, + 0x8102597C, 0x0002F95D, 0x81025AA7, 0x0002F95E, + 0x81025AA7, 0x0002F95F, 0x01007AEE, 0x0002F960, + 0x01004202, 0x0002F961, 0x81025BAB, 0x0002F962, + 0x01007BC6, 0x0002F963, 0x01007BC9, 0x0002F964, + 0x01004227, 0x0002F965, 0x81025C80, 0x0002F966, + 0x01007CD2, 0x0002F967, 0x010042A0, 0x0002F968, + 0x01007CE8, 0x0002F969, 0x01007CE3, 0x0002F96A, + 0x01007D00, 0x0002F96B, 0x81025F86, 0x0002F96C, + 0x01007D63, 0x0002F96D, 0x01004301, 0x0002F96E, + 0x01007DC7, 0x0002F96F, 0x01007E02, 0x0002F970, + 0x01007E45, 0x0002F971, 0x01004334, 0x0002F972, + 0x81026228, 0x0002F973, 0x81026247, 0x0002F974, + 0x01004359, 0x0002F975, 0x810262D9, 0x0002F976, + 0x01007F7A, 0x0002F977, 0x8102633E, 0x0002F978, + 0x01007F95, 0x0002F979, 0x01007FFA, 0x0002F97A, + 0x01008005, 0x0002F97B, 0x810264DA, 0x0002F97C, + 0x81026523, 0x0002F97D, 0x01008060, 0x0002F97E, + 0x810265A8, 0x0002F97F, 0x01008070, 0x0002F980, + 0x8102335F, 0x0002F981, 0x010043D5, 0x0002F982, + 0x010080B2, 0x0002F983, 0x01008103, 0x0002F984, + 0x0100440B, 0x0002F985, 0x0100813E, 0x0002F986, + 0x01005AB5, 0x0002F987, 0x810267A7, 0x0002F988, + 0x810267B5, 0x0002F989, 0x81023393, 0x0002F98A, + 0x8102339C, 0x0002F98B, 0x01008201, 0x0002F98C, + 0x01008204, 0x0002F98D, 0x01008F9E, 0x0002F98E, + 0x0100446B, 0x0002F98F, 0x01008291, 0x0002F990, + 0x0100828B, 0x0002F991, 0x0100829D, 0x0002F992, + 0x010052B3, 0x0002F993, 0x010082B1, 0x0002F994, + 0x010082B3, 0x0002F995, 0x010082BD, 0x0002F996, + 0x010082E6, 0x0002F997, 0x81026B3C, 0x0002F998, + 0x010082E5, 0x0002F999, 0x0100831D, 0x0002F99A, + 0x01008363, 0x0002F99B, 0x010083AD, 0x0002F99C, + 0x01008323, 0x0002F99D, 0x010083BD, 0x0002F99E, + 0x010083E7, 0x0002F99F, 0x01008457, 0x0002F9A0, + 0x01008353, 0x0002F9A1, 0x010083CA, 0x0002F9A2, + 0x010083CC, 0x0002F9A3, 0x010083DC, 0x0002F9A4, + 0x81026C36, 0x0002F9A5, 0x81026D6B, 0x0002F9A6, + 0x81026CD5, 0x0002F9A7, 0x0100452B, 0x0002F9A8, + 0x010084F1, 0x0002F9A9, 0x010084F3, 0x0002F9AA, + 0x01008516, 0x0002F9AB, 0x810273CA, 0x0002F9AC, + 0x01008564, 0x0002F9AD, 0x81026F2C, 0x0002F9AE, + 0x0100455D, 0x0002F9AF, 0x01004561, 0x0002F9B0, + 0x81026FB1, 0x0002F9B1, 0x810270D2, 0x0002F9B2, + 0x0100456B, 0x0002F9B3, 0x01008650, 0x0002F9B4, + 0x0100865C, 0x0002F9B5, 0x01008667, 0x0002F9B6, + 0x01008669, 0x0002F9B7, 0x010086A9, 0x0002F9B8, + 0x01008688, 0x0002F9B9, 0x0100870E, 0x0002F9BA, + 0x010086E2, 0x0002F9BB, 0x01008779, 0x0002F9BC, + 0x01008728, 0x0002F9BD, 0x0100876B, 0x0002F9BE, + 0x01008786, 0x0002F9BF, 0x010045D7, 0x0002F9C0, + 0x010087E1, 0x0002F9C1, 0x01008801, 0x0002F9C2, + 0x010045F9, 0x0002F9C3, 0x01008860, 0x0002F9C4, + 0x01008863, 0x0002F9C5, 0x81027667, 0x0002F9C6, + 0x010088D7, 0x0002F9C7, 0x010088DE, 0x0002F9C8, + 0x01004635, 0x0002F9C9, 0x010088FA, 0x0002F9CA, + 0x010034BB, 0x0002F9CB, 0x810278AE, 0x0002F9CC, + 0x81027966, 0x0002F9CD, 0x010046BE, 0x0002F9CE, + 0x010046C7, 0x0002F9CF, 0x01008AA0, 0x0002F9D0, + 0x01008AED, 0x0002F9D1, 0x01008B8A, 0x0002F9D2, + 0x01008C55, 0x0002F9D3, 0x81027CA8, 0x0002F9D4, + 0x01008CAB, 0x0002F9D5, 0x01008CC1, 0x0002F9D6, + 0x01008D1B, 0x0002F9D7, 0x01008D77, 0x0002F9D8, + 0x81027F2F, 0x0002F9D9, 0x81020804, 0x0002F9DA, + 0x01008DCB, 0x0002F9DB, 0x01008DBC, 0x0002F9DC, + 0x01008DF0, 0x0002F9DD, 0x810208DE, 0x0002F9DE, + 0x01008ED4, 0x0002F9DF, 0x01008F38, 0x0002F9E0, + 0x810285D2, 0x0002F9E1, 0x810285ED, 0x0002F9E2, + 0x01009094, 0x0002F9E3, 0x010090F1, 0x0002F9E4, + 0x01009111, 0x0002F9E5, 0x8102872E, 0x0002F9E6, + 0x0100911B, 0x0002F9E7, 0x01009238, 0x0002F9E8, + 0x010092D7, 0x0002F9E9, 0x010092D8, 0x0002F9EA, + 0x0100927C, 0x0002F9EB, 0x010093F9, 0x0002F9EC, + 0x01009415, 0x0002F9ED, 0x81028BFA, 0x0002F9EE, + 0x0100958B, 0x0002F9EF, 0x01004995, 0x0002F9F0, + 0x010095B7, 0x0002F9F1, 0x81028D77, 0x0002F9F2, + 0x010049E6, 0x0002F9F3, 0x010096C3, 0x0002F9F4, + 0x01005DB2, 0x0002F9F5, 0x01009723, 0x0002F9F6, + 0x81029145, 0x0002F9F7, 0x8102921A, 0x0002F9F8, + 0x01004A6E, 0x0002F9F9, 0x01004A76, 0x0002F9FA, + 0x010097E0, 0x0002F9FB, 0x8102940A, 0x0002F9FC, + 0x01004AB2, 0x0002F9FD, 0x81029496, 0x0002F9FE, + 0x0100980B, 0x0002F9FF, 0x0100980B, 0x0002FA00, + 0x01009829, 0x0002FA01, 0x810295B6, 0x0002FA02, + 0x010098E2, 0x0002FA03, 0x01004B33, 0x0002FA04, + 0x01009929, 0x0002FA05, 0x010099A7, 0x0002FA06, + 0x010099C2, 0x0002FA07, 0x010099FE, 0x0002FA08, + 0x01004BCE, 0x0002FA09, 0x81029B30, 0x0002FA0A, + 0x01009B12, 0x0002FA0B, 0x01009C40, 0x0002FA0C, + 0x01009CFD, 0x0002FA0D, 0x01004CCE, 0x0002FA0E, + 0x01004CED, 0x0002FA0F, 0x01009D67, 0x0002FA10, + 0x8102A0CE, 0x0002FA11, 0x01004CF8, 0x0002FA12, + 0x8102A105, 0x0002FA13, 0x8102A20E, 0x0002FA14, + 0x8102A291, 0x0002FA15, 0x01009EBB, 0x0002FA16, + 0x01004D56, 0x0002FA17, 0x01009EF9, 0x0002FA18, + 0x01009EFE, 0x0002FA19, 0x01009F05, 0x0002FA1A, + 0x01009F0F, 0x0002FA1B, 0x01009F16, 0x0002FA1C, + 0x01009F3B, 0x0002FA1D, 0x8102A600, 0x00000041, + 0x00000300, 0x00000041, 0x00000301, 0x00000041, + 0x00000302, 0x00000041, 0x00000303, 0x00000041, + 0x00000308, 0x00000041, 0x0000030A, 0x00000043, + 0x00000327, 0x00000045, 0x00000300, 0x00000045, + 0x00000301, 0x00000045, 0x00000302, 0x00000045, + 0x00000308, 0x00000049, 0x00000300, 0x00000049, + 0x00000301, 0x00000049, 0x00000302, 0x00000049, + 0x00000308, 0x0000004E, 0x00000303, 0x0000004F, + 0x00000300, 0x0000004F, 0x00000301, 0x0000004F, + 0x00000302, 0x0000004F, 0x00000303, 0x0000004F, + 0x00000308, 0x00000055, 0x00000300, 0x00000055, + 0x00000301, 0x00000055, 0x00000302, 0x00000055, + 0x00000308, 0x00000059, 0x00000301, 0x00000061, + 0x00000300, 0x00000061, 0x00000301, 0x00000061, + 0x00000302, 0x00000061, 0x00000303, 0x00000061, + 0x00000308, 0x00000061, 0x0000030A, 0x00000063, + 0x00000327, 0x00000065, 0x00000300, 0x00000065, + 0x00000301, 0x00000065, 0x00000302, 0x00000065, + 0x00000308, 0x00000069, 0x00000300, 0x00000069, + 0x00000301, 0x00000069, 0x00000302, 0x00000069, + 0x00000308, 0x0000006E, 0x00000303, 0x0000006F, + 0x00000300, 0x0000006F, 0x00000301, 0x0000006F, + 0x00000302, 0x0000006F, 0x00000303, 0x0000006F, + 0x00000308, 0x00000075, 0x00000300, 0x00000075, + 0x00000301, 0x00000075, 0x00000302, 0x00000075, + 0x00000308, 0x00000079, 0x00000301, 0x00000079, + 0x00000308, 0x00000041, 0x00000304, 0x00000061, + 0x00000304, 0x00000041, 0x00000306, 0x00000061, + 0x00000306, 0x00000041, 0x00000328, 0x00000061, + 0x00000328, 0x00000043, 0x00000301, 0x00000063, + 0x00000301, 0x00000043, 0x00000302, 0x00000063, + 0x00000302, 0x00000043, 0x00000307, 0x00000063, + 0x00000307, 0x00000043, 0x0000030C, 0x00000063, + 0x0000030C, 0x00000044, 0x0000030C, 0x00000064, + 0x0000030C, 0x00000045, 0x00000304, 0x00000065, + 0x00000304, 0x00000045, 0x00000306, 0x00000065, + 0x00000306, 0x00000045, 0x00000307, 0x00000065, + 0x00000307, 0x00000045, 0x00000328, 0x00000065, + 0x00000328, 0x00000045, 0x0000030C, 0x00000065, + 0x0000030C, 0x00000047, 0x00000302, 0x00000067, + 0x00000302, 0x00000047, 0x00000306, 0x00000067, + 0x00000306, 0x00000047, 0x00000307, 0x00000067, + 0x00000307, 0x00000047, 0x00000327, 0x00000067, + 0x00000327, 0x00000048, 0x00000302, 0x00000068, + 0x00000302, 0x00000049, 0x00000303, 0x00000069, + 0x00000303, 0x00000049, 0x00000304, 0x00000069, + 0x00000304, 0x00000049, 0x00000306, 0x00000069, + 0x00000306, 0x00000049, 0x00000328, 0x00000069, + 0x00000328, 0x00000049, 0x00000307, 0x0000004A, + 0x00000302, 0x0000006A, 0x00000302, 0x0000004B, + 0x00000327, 0x0000006B, 0x00000327, 0x0000004C, + 0x00000301, 0x0000006C, 0x00000301, 0x0000004C, + 0x00000327, 0x0000006C, 0x00000327, 0x0000004C, + 0x0000030C, 0x0000006C, 0x0000030C, 0x0000004E, + 0x00000301, 0x0000006E, 0x00000301, 0x0000004E, + 0x00000327, 0x0000006E, 0x00000327, 0x0000004E, + 0x0000030C, 0x0000006E, 0x0000030C, 0x0000004F, + 0x00000304, 0x0000006F, 0x00000304, 0x0000004F, + 0x00000306, 0x0000006F, 0x00000306, 0x0000004F, + 0x0000030B, 0x0000006F, 0x0000030B, 0x00000052, + 0x00000301, 0x00000072, 0x00000301, 0x00000052, + 0x00000327, 0x00000072, 0x00000327, 0x00000052, + 0x0000030C, 0x00000072, 0x0000030C, 0x00000053, + 0x00000301, 0x00000073, 0x00000301, 0x00000053, + 0x00000302, 0x00000073, 0x00000302, 0x00000053, + 0x00000327, 0x00000073, 0x00000327, 0x00000053, + 0x0000030C, 0x00000073, 0x0000030C, 0x00000054, + 0x00000327, 0x00000074, 0x00000327, 0x00000054, + 0x0000030C, 0x00000074, 0x0000030C, 0x00000055, + 0x00000303, 0x00000075, 0x00000303, 0x00000055, + 0x00000304, 0x00000075, 0x00000304, 0x00000055, + 0x00000306, 0x00000075, 0x00000306, 0x00000055, + 0x0000030A, 0x00000075, 0x0000030A, 0x00000055, + 0x0000030B, 0x00000075, 0x0000030B, 0x00000055, + 0x00000328, 0x00000075, 0x00000328, 0x00000057, + 0x00000302, 0x00000077, 0x00000302, 0x00000059, + 0x00000302, 0x00000079, 0x00000302, 0x00000059, + 0x00000308, 0x0000005A, 0x00000301, 0x0000007A, + 0x00000301, 0x0000005A, 0x00000307, 0x0000007A, + 0x00000307, 0x0000005A, 0x0000030C, 0x0000007A, + 0x0000030C, 0x0000004F, 0x0000031B, 0x0000006F, + 0x0000031B, 0x00000055, 0x0000031B, 0x00000075, + 0x0000031B, 0x00000041, 0x0000030C, 0x00000061, + 0x0000030C, 0x00000049, 0x0000030C, 0x00000069, + 0x0000030C, 0x0000004F, 0x0000030C, 0x0000006F, + 0x0000030C, 0x00000055, 0x0000030C, 0x00000075, + 0x0000030C, 0x000000DC, 0x00000304, 0x000000FC, + 0x00000304, 0x000000DC, 0x00000301, 0x000000FC, + 0x00000301, 0x000000DC, 0x0000030C, 0x000000FC, + 0x0000030C, 0x000000DC, 0x00000300, 0x000000FC, + 0x00000300, 0x000000C4, 0x00000304, 0x000000E4, + 0x00000304, 0x00000226, 0x00000304, 0x00000227, + 0x00000304, 0x000000C6, 0x00000304, 0x000000E6, + 0x00000304, 0x00000047, 0x0000030C, 0x00000067, + 0x0000030C, 0x0000004B, 0x0000030C, 0x0000006B, + 0x0000030C, 0x0000004F, 0x00000328, 0x0000006F, + 0x00000328, 0x000001EA, 0x00000304, 0x000001EB, + 0x00000304, 0x000001B7, 0x0000030C, 0x00000292, + 0x0000030C, 0x0000006A, 0x0000030C, 0x00000047, + 0x00000301, 0x00000067, 0x00000301, 0x0000004E, + 0x00000300, 0x0000006E, 0x00000300, 0x000000C5, + 0x00000301, 0x000000E5, 0x00000301, 0x000000C6, + 0x00000301, 0x000000E6, 0x00000301, 0x000000D8, + 0x00000301, 0x000000F8, 0x00000301, 0x00000041, + 0x0000030F, 0x00000061, 0x0000030F, 0x00000041, + 0x00000311, 0x00000061, 0x00000311, 0x00000045, + 0x0000030F, 0x00000065, 0x0000030F, 0x00000045, + 0x00000311, 0x00000065, 0x00000311, 0x00000049, + 0x0000030F, 0x00000069, 0x0000030F, 0x00000049, + 0x00000311, 0x00000069, 0x00000311, 0x0000004F, + 0x0000030F, 0x0000006F, 0x0000030F, 0x0000004F, + 0x00000311, 0x0000006F, 0x00000311, 0x00000052, + 0x0000030F, 0x00000072, 0x0000030F, 0x00000052, + 0x00000311, 0x00000072, 0x00000311, 0x00000055, + 0x0000030F, 0x00000075, 0x0000030F, 0x00000055, + 0x00000311, 0x00000075, 0x00000311, 0x00000053, + 0x00000326, 0x00000073, 0x00000326, 0x00000054, + 0x00000326, 0x00000074, 0x00000326, 0x00000048, + 0x0000030C, 0x00000068, 0x0000030C, 0x00000041, + 0x00000307, 0x00000061, 0x00000307, 0x00000045, + 0x00000327, 0x00000065, 0x00000327, 0x000000D6, + 0x00000304, 0x000000F6, 0x00000304, 0x000000D5, + 0x00000304, 0x000000F5, 0x00000304, 0x0000004F, + 0x00000307, 0x0000006F, 0x00000307, 0x0000022E, + 0x00000304, 0x0000022F, 0x00000304, 0x00000059, + 0x00000304, 0x00000079, 0x00000304, 0x00000308, + 0x00000301, 0x000000A8, 0x00000301, 0x00000391, + 0x00000301, 0x00000395, 0x00000301, 0x00000397, + 0x00000301, 0x00000399, 0x00000301, 0x0000039F, + 0x00000301, 0x000003A5, 0x00000301, 0x000003A9, + 0x00000301, 0x000003CA, 0x00000301, 0x00000399, + 0x00000308, 0x000003A5, 0x00000308, 0x000003B1, + 0x00000301, 0x000003B5, 0x00000301, 0x000003B7, + 0x00000301, 0x000003B9, 0x00000301, 0x000003CB, + 0x00000301, 0x000003B9, 0x00000308, 0x000003C5, + 0x00000308, 0x000003BF, 0x00000301, 0x000003C5, + 0x00000301, 0x000003C9, 0x00000301, 0x000003D2, + 0x00000301, 0x000003D2, 0x00000308, 0x00000415, + 0x00000300, 0x00000415, 0x00000308, 0x00000413, + 0x00000301, 0x00000406, 0x00000308, 0x0000041A, + 0x00000301, 0x00000418, 0x00000300, 0x00000423, + 0x00000306, 0x00000418, 0x00000306, 0x00000438, + 0x00000306, 0x00000435, 0x00000300, 0x00000435, + 0x00000308, 0x00000433, 0x00000301, 0x00000456, + 0x00000308, 0x0000043A, 0x00000301, 0x00000438, + 0x00000300, 0x00000443, 0x00000306, 0x00000474, + 0x0000030F, 0x00000475, 0x0000030F, 0x00000416, + 0x00000306, 0x00000436, 0x00000306, 0x00000410, + 0x00000306, 0x00000430, 0x00000306, 0x00000410, + 0x00000308, 0x00000430, 0x00000308, 0x00000415, + 0x00000306, 0x00000435, 0x00000306, 0x000004D8, + 0x00000308, 0x000004D9, 0x00000308, 0x00000416, + 0x00000308, 0x00000436, 0x00000308, 0x00000417, + 0x00000308, 0x00000437, 0x00000308, 0x00000418, + 0x00000304, 0x00000438, 0x00000304, 0x00000418, + 0x00000308, 0x00000438, 0x00000308, 0x0000041E, + 0x00000308, 0x0000043E, 0x00000308, 0x000004E8, + 0x00000308, 0x000004E9, 0x00000308, 0x0000042D, + 0x00000308, 0x0000044D, 0x00000308, 0x00000423, + 0x00000304, 0x00000443, 0x00000304, 0x00000423, + 0x00000308, 0x00000443, 0x00000308, 0x00000423, + 0x0000030B, 0x00000443, 0x0000030B, 0x00000427, + 0x00000308, 0x00000447, 0x00000308, 0x0000042B, + 0x00000308, 0x0000044B, 0x00000308, 0x00000627, + 0x00000653, 0x00000627, 0x00000654, 0x00000648, + 0x00000654, 0x00000627, 0x00000655, 0x0000064A, + 0x00000654, 0x000006D5, 0x00000654, 0x000006C1, + 0x00000654, 0x000006D2, 0x00000654, 0x00000928, + 0x0000093C, 0x00000930, 0x0000093C, 0x00000933, + 0x0000093C, 0x00000915, 0x0000093C, 0x00000916, + 0x0000093C, 0x00000917, 0x0000093C, 0x0000091C, + 0x0000093C, 0x00000921, 0x0000093C, 0x00000922, + 0x0000093C, 0x0000092B, 0x0000093C, 0x0000092F, + 0x0000093C, 0x000009C7, 0x000009BE, 0x000009C7, + 0x000009D7, 0x000009A1, 0x000009BC, 0x000009A2, + 0x000009BC, 0x000009AF, 0x000009BC, 0x00000A32, + 0x00000A3C, 0x00000A38, 0x00000A3C, 0x00000A16, + 0x00000A3C, 0x00000A17, 0x00000A3C, 0x00000A1C, + 0x00000A3C, 0x00000A2B, 0x00000A3C, 0x00000B47, + 0x00000B56, 0x00000B47, 0x00000B3E, 0x00000B47, + 0x00000B57, 0x00000B21, 0x00000B3C, 0x00000B22, + 0x00000B3C, 0x00000B92, 0x00000BD7, 0x00000BC6, + 0x00000BBE, 0x00000BC7, 0x00000BBE, 0x00000BC6, + 0x00000BD7, 0x00000C46, 0x00000C56, 0x00000CBF, + 0x00000CD5, 0x00000CC6, 0x00000CD5, 0x00000CC6, + 0x00000CD6, 0x00000CC6, 0x00000CC2, 0x00000CCA, + 0x00000CD5, 0x00000D46, 0x00000D3E, 0x00000D47, + 0x00000D3E, 0x00000D46, 0x00000D57, 0x00000DD9, + 0x00000DCA, 0x00000DD9, 0x00000DCF, 0x00000DDC, + 0x00000DCA, 0x00000DD9, 0x00000DDF, 0x00000F42, + 0x00000FB7, 0x00000F4C, 0x00000FB7, 0x00000F51, + 0x00000FB7, 0x00000F56, 0x00000FB7, 0x00000F5B, + 0x00000FB7, 0x00000F40, 0x00000FB5, 0x00000F71, + 0x00000F72, 0x00000F71, 0x00000F74, 0x00000FB2, + 0x00000F80, 0x00000FB3, 0x00000F80, 0x00000F71, + 0x00000F80, 0x00000F92, 0x00000FB7, 0x00000F9C, + 0x00000FB7, 0x00000FA1, 0x00000FB7, 0x00000FA6, + 0x00000FB7, 0x00000FAB, 0x00000FB7, 0x00000F90, + 0x00000FB5, 0x00001025, 0x0000102E, 0x00001B05, + 0x00001B35, 0x00001B07, 0x00001B35, 0x00001B09, + 0x00001B35, 0x00001B0B, 0x00001B35, 0x00001B0D, + 0x00001B35, 0x00001B11, 0x00001B35, 0x00001B3A, + 0x00001B35, 0x00001B3C, 0x00001B35, 0x00001B3E, + 0x00001B35, 0x00001B3F, 0x00001B35, 0x00001B42, + 0x00001B35, 0x00000041, 0x00000325, 0x00000061, + 0x00000325, 0x00000042, 0x00000307, 0x00000062, + 0x00000307, 0x00000042, 0x00000323, 0x00000062, + 0x00000323, 0x00000042, 0x00000331, 0x00000062, + 0x00000331, 0x000000C7, 0x00000301, 0x000000E7, + 0x00000301, 0x00000044, 0x00000307, 0x00000064, + 0x00000307, 0x00000044, 0x00000323, 0x00000064, + 0x00000323, 0x00000044, 0x00000331, 0x00000064, + 0x00000331, 0x00000044, 0x00000327, 0x00000064, + 0x00000327, 0x00000044, 0x0000032D, 0x00000064, + 0x0000032D, 0x00000112, 0x00000300, 0x00000113, + 0x00000300, 0x00000112, 0x00000301, 0x00000113, + 0x00000301, 0x00000045, 0x0000032D, 0x00000065, + 0x0000032D, 0x00000045, 0x00000330, 0x00000065, + 0x00000330, 0x00000228, 0x00000306, 0x00000229, + 0x00000306, 0x00000046, 0x00000307, 0x00000066, + 0x00000307, 0x00000047, 0x00000304, 0x00000067, + 0x00000304, 0x00000048, 0x00000307, 0x00000068, + 0x00000307, 0x00000048, 0x00000323, 0x00000068, + 0x00000323, 0x00000048, 0x00000308, 0x00000068, + 0x00000308, 0x00000048, 0x00000327, 0x00000068, + 0x00000327, 0x00000048, 0x0000032E, 0x00000068, + 0x0000032E, 0x00000049, 0x00000330, 0x00000069, + 0x00000330, 0x000000CF, 0x00000301, 0x000000EF, + 0x00000301, 0x0000004B, 0x00000301, 0x0000006B, + 0x00000301, 0x0000004B, 0x00000323, 0x0000006B, + 0x00000323, 0x0000004B, 0x00000331, 0x0000006B, + 0x00000331, 0x0000004C, 0x00000323, 0x0000006C, + 0x00000323, 0x00001E36, 0x00000304, 0x00001E37, + 0x00000304, 0x0000004C, 0x00000331, 0x0000006C, + 0x00000331, 0x0000004C, 0x0000032D, 0x0000006C, + 0x0000032D, 0x0000004D, 0x00000301, 0x0000006D, + 0x00000301, 0x0000004D, 0x00000307, 0x0000006D, + 0x00000307, 0x0000004D, 0x00000323, 0x0000006D, + 0x00000323, 0x0000004E, 0x00000307, 0x0000006E, + 0x00000307, 0x0000004E, 0x00000323, 0x0000006E, + 0x00000323, 0x0000004E, 0x00000331, 0x0000006E, + 0x00000331, 0x0000004E, 0x0000032D, 0x0000006E, + 0x0000032D, 0x000000D5, 0x00000301, 0x000000F5, + 0x00000301, 0x000000D5, 0x00000308, 0x000000F5, + 0x00000308, 0x0000014C, 0x00000300, 0x0000014D, + 0x00000300, 0x0000014C, 0x00000301, 0x0000014D, + 0x00000301, 0x00000050, 0x00000301, 0x00000070, + 0x00000301, 0x00000050, 0x00000307, 0x00000070, + 0x00000307, 0x00000052, 0x00000307, 0x00000072, + 0x00000307, 0x00000052, 0x00000323, 0x00000072, + 0x00000323, 0x00001E5A, 0x00000304, 0x00001E5B, + 0x00000304, 0x00000052, 0x00000331, 0x00000072, + 0x00000331, 0x00000053, 0x00000307, 0x00000073, + 0x00000307, 0x00000053, 0x00000323, 0x00000073, + 0x00000323, 0x0000015A, 0x00000307, 0x0000015B, + 0x00000307, 0x00000160, 0x00000307, 0x00000161, + 0x00000307, 0x00001E62, 0x00000307, 0x00001E63, + 0x00000307, 0x00000054, 0x00000307, 0x00000074, + 0x00000307, 0x00000054, 0x00000323, 0x00000074, + 0x00000323, 0x00000054, 0x00000331, 0x00000074, + 0x00000331, 0x00000054, 0x0000032D, 0x00000074, + 0x0000032D, 0x00000055, 0x00000324, 0x00000075, + 0x00000324, 0x00000055, 0x00000330, 0x00000075, + 0x00000330, 0x00000055, 0x0000032D, 0x00000075, + 0x0000032D, 0x00000168, 0x00000301, 0x00000169, + 0x00000301, 0x0000016A, 0x00000308, 0x0000016B, + 0x00000308, 0x00000056, 0x00000303, 0x00000076, + 0x00000303, 0x00000056, 0x00000323, 0x00000076, + 0x00000323, 0x00000057, 0x00000300, 0x00000077, + 0x00000300, 0x00000057, 0x00000301, 0x00000077, + 0x00000301, 0x00000057, 0x00000308, 0x00000077, + 0x00000308, 0x00000057, 0x00000307, 0x00000077, + 0x00000307, 0x00000057, 0x00000323, 0x00000077, + 0x00000323, 0x00000058, 0x00000307, 0x00000078, + 0x00000307, 0x00000058, 0x00000308, 0x00000078, + 0x00000308, 0x00000059, 0x00000307, 0x00000079, + 0x00000307, 0x0000005A, 0x00000302, 0x0000007A, + 0x00000302, 0x0000005A, 0x00000323, 0x0000007A, + 0x00000323, 0x0000005A, 0x00000331, 0x0000007A, + 0x00000331, 0x00000068, 0x00000331, 0x00000074, + 0x00000308, 0x00000077, 0x0000030A, 0x00000079, + 0x0000030A, 0x0000017F, 0x00000307, 0x00000041, + 0x00000323, 0x00000061, 0x00000323, 0x00000041, + 0x00000309, 0x00000061, 0x00000309, 0x000000C2, + 0x00000301, 0x000000E2, 0x00000301, 0x000000C2, + 0x00000300, 0x000000E2, 0x00000300, 0x000000C2, + 0x00000309, 0x000000E2, 0x00000309, 0x000000C2, + 0x00000303, 0x000000E2, 0x00000303, 0x00001EA0, + 0x00000302, 0x00001EA1, 0x00000302, 0x00000102, + 0x00000301, 0x00000103, 0x00000301, 0x00000102, + 0x00000300, 0x00000103, 0x00000300, 0x00000102, + 0x00000309, 0x00000103, 0x00000309, 0x00000102, + 0x00000303, 0x00000103, 0x00000303, 0x00001EA0, + 0x00000306, 0x00001EA1, 0x00000306, 0x00000045, + 0x00000323, 0x00000065, 0x00000323, 0x00000045, + 0x00000309, 0x00000065, 0x00000309, 0x00000045, + 0x00000303, 0x00000065, 0x00000303, 0x000000CA, + 0x00000301, 0x000000EA, 0x00000301, 0x000000CA, + 0x00000300, 0x000000EA, 0x00000300, 0x000000CA, + 0x00000309, 0x000000EA, 0x00000309, 0x000000CA, + 0x00000303, 0x000000EA, 0x00000303, 0x00001EB8, + 0x00000302, 0x00001EB9, 0x00000302, 0x00000049, + 0x00000309, 0x00000069, 0x00000309, 0x00000049, + 0x00000323, 0x00000069, 0x00000323, 0x0000004F, + 0x00000323, 0x0000006F, 0x00000323, 0x0000004F, + 0x00000309, 0x0000006F, 0x00000309, 0x000000D4, + 0x00000301, 0x000000F4, 0x00000301, 0x000000D4, + 0x00000300, 0x000000F4, 0x00000300, 0x000000D4, + 0x00000309, 0x000000F4, 0x00000309, 0x000000D4, + 0x00000303, 0x000000F4, 0x00000303, 0x00001ECC, + 0x00000302, 0x00001ECD, 0x00000302, 0x000001A0, + 0x00000301, 0x000001A1, 0x00000301, 0x000001A0, + 0x00000300, 0x000001A1, 0x00000300, 0x000001A0, + 0x00000309, 0x000001A1, 0x00000309, 0x000001A0, + 0x00000303, 0x000001A1, 0x00000303, 0x000001A0, + 0x00000323, 0x000001A1, 0x00000323, 0x00000055, + 0x00000323, 0x00000075, 0x00000323, 0x00000055, + 0x00000309, 0x00000075, 0x00000309, 0x000001AF, + 0x00000301, 0x000001B0, 0x00000301, 0x000001AF, + 0x00000300, 0x000001B0, 0x00000300, 0x000001AF, + 0x00000309, 0x000001B0, 0x00000309, 0x000001AF, + 0x00000303, 0x000001B0, 0x00000303, 0x000001AF, + 0x00000323, 0x000001B0, 0x00000323, 0x00000059, + 0x00000300, 0x00000079, 0x00000300, 0x00000059, + 0x00000323, 0x00000079, 0x00000323, 0x00000059, + 0x00000309, 0x00000079, 0x00000309, 0x00000059, + 0x00000303, 0x00000079, 0x00000303, 0x000003B1, + 0x00000313, 0x000003B1, 0x00000314, 0x00001F00, + 0x00000300, 0x00001F01, 0x00000300, 0x00001F00, + 0x00000301, 0x00001F01, 0x00000301, 0x00001F00, + 0x00000342, 0x00001F01, 0x00000342, 0x00000391, + 0x00000313, 0x00000391, 0x00000314, 0x00001F08, + 0x00000300, 0x00001F09, 0x00000300, 0x00001F08, + 0x00000301, 0x00001F09, 0x00000301, 0x00001F08, + 0x00000342, 0x00001F09, 0x00000342, 0x000003B5, + 0x00000313, 0x000003B5, 0x00000314, 0x00001F10, + 0x00000300, 0x00001F11, 0x00000300, 0x00001F10, + 0x00000301, 0x00001F11, 0x00000301, 0x00000395, + 0x00000313, 0x00000395, 0x00000314, 0x00001F18, + 0x00000300, 0x00001F19, 0x00000300, 0x00001F18, + 0x00000301, 0x00001F19, 0x00000301, 0x000003B7, + 0x00000313, 0x000003B7, 0x00000314, 0x00001F20, + 0x00000300, 0x00001F21, 0x00000300, 0x00001F20, + 0x00000301, 0x00001F21, 0x00000301, 0x00001F20, + 0x00000342, 0x00001F21, 0x00000342, 0x00000397, + 0x00000313, 0x00000397, 0x00000314, 0x00001F28, + 0x00000300, 0x00001F29, 0x00000300, 0x00001F28, + 0x00000301, 0x00001F29, 0x00000301, 0x00001F28, + 0x00000342, 0x00001F29, 0x00000342, 0x000003B9, + 0x00000313, 0x000003B9, 0x00000314, 0x00001F30, + 0x00000300, 0x00001F31, 0x00000300, 0x00001F30, + 0x00000301, 0x00001F31, 0x00000301, 0x00001F30, + 0x00000342, 0x00001F31, 0x00000342, 0x00000399, + 0x00000313, 0x00000399, 0x00000314, 0x00001F38, + 0x00000300, 0x00001F39, 0x00000300, 0x00001F38, + 0x00000301, 0x00001F39, 0x00000301, 0x00001F38, + 0x00000342, 0x00001F39, 0x00000342, 0x000003BF, + 0x00000313, 0x000003BF, 0x00000314, 0x00001F40, + 0x00000300, 0x00001F41, 0x00000300, 0x00001F40, + 0x00000301, 0x00001F41, 0x00000301, 0x0000039F, + 0x00000313, 0x0000039F, 0x00000314, 0x00001F48, + 0x00000300, 0x00001F49, 0x00000300, 0x00001F48, + 0x00000301, 0x00001F49, 0x00000301, 0x000003C5, + 0x00000313, 0x000003C5, 0x00000314, 0x00001F50, + 0x00000300, 0x00001F51, 0x00000300, 0x00001F50, + 0x00000301, 0x00001F51, 0x00000301, 0x00001F50, + 0x00000342, 0x00001F51, 0x00000342, 0x000003A5, + 0x00000314, 0x00001F59, 0x00000300, 0x00001F59, + 0x00000301, 0x00001F59, 0x00000342, 0x000003C9, + 0x00000313, 0x000003C9, 0x00000314, 0x00001F60, + 0x00000300, 0x00001F61, 0x00000300, 0x00001F60, + 0x00000301, 0x00001F61, 0x00000301, 0x00001F60, + 0x00000342, 0x00001F61, 0x00000342, 0x000003A9, + 0x00000313, 0x000003A9, 0x00000314, 0x00001F68, + 0x00000300, 0x00001F69, 0x00000300, 0x00001F68, + 0x00000301, 0x00001F69, 0x00000301, 0x00001F68, + 0x00000342, 0x00001F69, 0x00000342, 0x000003B1, + 0x00000300, 0x000003B5, 0x00000300, 0x000003B7, + 0x00000300, 0x000003B9, 0x00000300, 0x000003BF, + 0x00000300, 0x000003C5, 0x00000300, 0x000003C9, + 0x00000300, 0x00001F00, 0x00000345, 0x00001F01, + 0x00000345, 0x00001F02, 0x00000345, 0x00001F03, + 0x00000345, 0x00001F04, 0x00000345, 0x00001F05, + 0x00000345, 0x00001F06, 0x00000345, 0x00001F07, + 0x00000345, 0x00001F08, 0x00000345, 0x00001F09, + 0x00000345, 0x00001F0A, 0x00000345, 0x00001F0B, + 0x00000345, 0x00001F0C, 0x00000345, 0x00001F0D, + 0x00000345, 0x00001F0E, 0x00000345, 0x00001F0F, + 0x00000345, 0x00001F20, 0x00000345, 0x00001F21, + 0x00000345, 0x00001F22, 0x00000345, 0x00001F23, + 0x00000345, 0x00001F24, 0x00000345, 0x00001F25, + 0x00000345, 0x00001F26, 0x00000345, 0x00001F27, + 0x00000345, 0x00001F28, 0x00000345, 0x00001F29, + 0x00000345, 0x00001F2A, 0x00000345, 0x00001F2B, + 0x00000345, 0x00001F2C, 0x00000345, 0x00001F2D, + 0x00000345, 0x00001F2E, 0x00000345, 0x00001F2F, + 0x00000345, 0x00001F60, 0x00000345, 0x00001F61, + 0x00000345, 0x00001F62, 0x00000345, 0x00001F63, + 0x00000345, 0x00001F64, 0x00000345, 0x00001F65, + 0x00000345, 0x00001F66, 0x00000345, 0x00001F67, + 0x00000345, 0x00001F68, 0x00000345, 0x00001F69, + 0x00000345, 0x00001F6A, 0x00000345, 0x00001F6B, + 0x00000345, 0x00001F6C, 0x00000345, 0x00001F6D, + 0x00000345, 0x00001F6E, 0x00000345, 0x00001F6F, + 0x00000345, 0x000003B1, 0x00000306, 0x000003B1, + 0x00000304, 0x00001F70, 0x00000345, 0x000003B1, + 0x00000345, 0x000003AC, 0x00000345, 0x000003B1, + 0x00000342, 0x00001FB6, 0x00000345, 0x00000391, + 0x00000306, 0x00000391, 0x00000304, 0x00000391, + 0x00000300, 0x00000391, 0x00000345, 0x000000A8, + 0x00000342, 0x00001F74, 0x00000345, 0x000003B7, + 0x00000345, 0x000003AE, 0x00000345, 0x000003B7, + 0x00000342, 0x00001FC6, 0x00000345, 0x00000395, + 0x00000300, 0x00000397, 0x00000300, 0x00000397, + 0x00000345, 0x00001FBF, 0x00000300, 0x00001FBF, + 0x00000301, 0x00001FBF, 0x00000342, 0x000003B9, + 0x00000306, 0x000003B9, 0x00000304, 0x000003CA, + 0x00000300, 0x000003B9, 0x00000342, 0x000003CA, + 0x00000342, 0x00000399, 0x00000306, 0x00000399, + 0x00000304, 0x00000399, 0x00000300, 0x00001FFE, + 0x00000300, 0x00001FFE, 0x00000301, 0x00001FFE, + 0x00000342, 0x000003C5, 0x00000306, 0x000003C5, + 0x00000304, 0x000003CB, 0x00000300, 0x000003C1, + 0x00000313, 0x000003C1, 0x00000314, 0x000003C5, + 0x00000342, 0x000003CB, 0x00000342, 0x000003A5, + 0x00000306, 0x000003A5, 0x00000304, 0x000003A5, + 0x00000300, 0x000003A1, 0x00000314, 0x000000A8, + 0x00000300, 0x00001F7C, 0x00000345, 0x000003C9, + 0x00000345, 0x000003CE, 0x00000345, 0x000003C9, + 0x00000342, 0x00001FF6, 0x00000345, 0x0000039F, + 0x00000300, 0x000003A9, 0x00000300, 0x000003A9, + 0x00000345, 0x00002190, 0x00000338, 0x00002192, + 0x00000338, 0x00002194, 0x00000338, 0x000021D0, + 0x00000338, 0x000021D4, 0x00000338, 0x000021D2, + 0x00000338, 0x00002203, 0x00000338, 0x00002208, + 0x00000338, 0x0000220B, 0x00000338, 0x00002223, + 0x00000338, 0x00002225, 0x00000338, 0x0000223C, + 0x00000338, 0x00002243, 0x00000338, 0x00002245, + 0x00000338, 0x00002248, 0x00000338, 0x0000003D, + 0x00000338, 0x00002261, 0x00000338, 0x0000224D, + 0x00000338, 0x0000003C, 0x00000338, 0x0000003E, + 0x00000338, 0x00002264, 0x00000338, 0x00002265, + 0x00000338, 0x00002272, 0x00000338, 0x00002273, + 0x00000338, 0x00002276, 0x00000338, 0x00002277, + 0x00000338, 0x0000227A, 0x00000338, 0x0000227B, + 0x00000338, 0x00002282, 0x00000338, 0x00002283, + 0x00000338, 0x00002286, 0x00000338, 0x00002287, + 0x00000338, 0x000022A2, 0x00000338, 0x000022A8, + 0x00000338, 0x000022A9, 0x00000338, 0x000022AB, + 0x00000338, 0x0000227C, 0x00000338, 0x0000227D, + 0x00000338, 0x00002291, 0x00000338, 0x00002292, + 0x00000338, 0x000022B2, 0x00000338, 0x000022B3, + 0x00000338, 0x000022B4, 0x00000338, 0x000022B5, + 0x00000338, 0x00002ADD, 0x00000338, 0x0000304B, + 0x00003099, 0x0000304D, 0x00003099, 0x0000304F, + 0x00003099, 0x00003051, 0x00003099, 0x00003053, + 0x00003099, 0x00003055, 0x00003099, 0x00003057, + 0x00003099, 0x00003059, 0x00003099, 0x0000305B, + 0x00003099, 0x0000305D, 0x00003099, 0x0000305F, + 0x00003099, 0x00003061, 0x00003099, 0x00003064, + 0x00003099, 0x00003066, 0x00003099, 0x00003068, + 0x00003099, 0x0000306F, 0x00003099, 0x0000306F, + 0x0000309A, 0x00003072, 0x00003099, 0x00003072, + 0x0000309A, 0x00003075, 0x00003099, 0x00003075, + 0x0000309A, 0x00003078, 0x00003099, 0x00003078, + 0x0000309A, 0x0000307B, 0x00003099, 0x0000307B, + 0x0000309A, 0x00003046, 0x00003099, 0x0000309D, + 0x00003099, 0x000030AB, 0x00003099, 0x000030AD, + 0x00003099, 0x000030AF, 0x00003099, 0x000030B1, + 0x00003099, 0x000030B3, 0x00003099, 0x000030B5, + 0x00003099, 0x000030B7, 0x00003099, 0x000030B9, + 0x00003099, 0x000030BB, 0x00003099, 0x000030BD, + 0x00003099, 0x000030BF, 0x00003099, 0x000030C1, + 0x00003099, 0x000030C4, 0x00003099, 0x000030C6, + 0x00003099, 0x000030C8, 0x00003099, 0x000030CF, + 0x00003099, 0x000030CF, 0x0000309A, 0x000030D2, + 0x00003099, 0x000030D2, 0x0000309A, 0x000030D5, + 0x00003099, 0x000030D5, 0x0000309A, 0x000030D8, + 0x00003099, 0x000030D8, 0x0000309A, 0x000030DB, + 0x00003099, 0x000030DB, 0x0000309A, 0x000030A6, + 0x00003099, 0x000030EF, 0x00003099, 0x000030F0, + 0x00003099, 0x000030F1, 0x00003099, 0x000030F2, + 0x00003099, 0x000030FD, 0x00003099, 0x000005D9, + 0x000005B4, 0x000005F2, 0x000005B7, 0x000005E9, + 0x000005C1, 0x000005E9, 0x000005C2, 0x0000FB49, + 0x000005C1, 0x0000FB49, 0x000005C2, 0x000005D0, + 0x000005B7, 0x000005D0, 0x000005B8, 0x000005D0, + 0x000005BC, 0x000005D1, 0x000005BC, 0x000005D2, + 0x000005BC, 0x000005D3, 0x000005BC, 0x000005D4, + 0x000005BC, 0x000005D5, 0x000005BC, 0x000005D6, + 0x000005BC, 0x000005D8, 0x000005BC, 0x000005D9, + 0x000005BC, 0x000005DA, 0x000005BC, 0x000005DB, + 0x000005BC, 0x000005DC, 0x000005BC, 0x000005DE, + 0x000005BC, 0x000005E0, 0x000005BC, 0x000005E1, + 0x000005BC, 0x000005E3, 0x000005BC, 0x000005E4, + 0x000005BC, 0x000005E6, 0x000005BC, 0x000005E7, + 0x000005BC, 0x000005E8, 0x000005BC, 0x000005E9, + 0x000005BC, 0x000005EA, 0x000005BC, 0x000005D5, + 0x000005B9, 0x000005D1, 0x000005BF, 0x000005DB, + 0x000005BF, 0x000005E4, 0x000005BF, 0x00011099, + 0x000110BA, 0x0001109B, 0x000110BA, 0x000110A5, + 0x000110BA, 0x00011131, 0x00011127, 0x00011132, + 0x00011127, 0x00011347, 0x0001133E, 0x00011347, + 0x00011357, 0x000114B9, 0x000114BA, 0x000114B9, + 0x000114B0, 0x000114B9, 0x000114BD, 0x000115B8, + 0x000115AF, 0x000115B9, 0x000115AF, 0x00011935, + 0x00011930, 0x0001D157, 0x0001D165, 0x0001D158, + 0x0001D165, 0x0001D15F, 0x0001D16E, 0x0001D15F, + 0x0001D16F, 0x0001D15F, 0x0001D170, 0x0001D15F, + 0x0001D171, 0x0001D15F, 0x0001D172, 0x0001D1B9, + 0x0001D165, 0x0001D1BA, 0x0001D165, 0x0001D1BB, + 0x0001D16E, 0x0001D1BC, 0x0001D16E, 0x0001D1BB, + 0x0001D16F, 0x0001D1BC, 0x0001D16F, +}; + +static uint32_t const __CFUniCharCanonicalDecompositionMappingTableLength = 3087; + +static uint32_t const __CFUniCharCanonicalPrecompositionMappingTable[] = { + 0x0000003F, 0x00000E80, 0x00000300, 0x00540000, + 0x00000301, 0x00750054, 0x00000302, 0x002000C9, + 0x00000303, 0x001C00E9, 0x00000304, 0x002C0105, + 0x00000306, 0x00200131, 0x00000307, 0x002E0151, + 0x00000308, 0x0036017F, 0x00000309, 0x001801B5, + 0x0000030A, 0x000601CD, 0x0000030B, 0x000601D3, + 0x0000030C, 0x002501D9, 0x0000030F, 0x000E01FE, + 0x00000311, 0x000C020C, 0x00000313, 0x000E0218, + 0x00000314, 0x00100226, 0x0000031B, 0x00040236, + 0x00000323, 0x002A023A, 0x00000324, 0x00020264, + 0x00000325, 0x00020266, 0x00000326, 0x00040268, + 0x00000327, 0x0016026C, 0x00000328, 0x000A0282, + 0x0000032D, 0x000C028C, 0x0000032E, 0x00020298, + 0x00000330, 0x0006029A, 0x00000331, 0x001102A0, + 0x00000338, 0x002C02B1, 0x00000342, 0x001D02DD, + 0x00000345, 0x003F02FA, 0x00000653, 0x00010339, + 0x00000654, 0x0006033A, 0x00000655, 0x00010340, + 0x0000093C, 0x00030341, 0x000009BE, 0x00010344, + 0x000009D7, 0x00010345, 0x00000B3E, 0x00010346, + 0x00000B56, 0x00010347, 0x00000B57, 0x00010348, + 0x00000BBE, 0x00020349, 0x00000BD7, 0x0002034B, + 0x00000C56, 0x0001034D, 0x00000CC2, 0x0001034E, + 0x00000CD5, 0x0003034F, 0x00000CD6, 0x00010352, + 0x00000D3E, 0x00020353, 0x00000D57, 0x00010355, + 0x00000DCA, 0x00020356, 0x00000DCF, 0x00010358, + 0x00000DDF, 0x00010359, 0x0000102E, 0x0001035A, + 0x00001B35, 0x000B035B, 0x00003099, 0x00300366, + 0x0000309A, 0x000A0396, 0x000110BA, 0x80030000, + 0x00011127, 0x80020006, 0x0001133E, 0x8001000A, + 0x00011357, 0x8001000C, 0x000114B0, 0x8001000E, + 0x000114BA, 0x80010010, 0x000114BD, 0x80010012, + 0x000115AF, 0x80020014, 0x00011930, 0x80010018, + 0x00C00041, 0x00C80045, 0x00CC0049, 0x01F8004E, + 0x00D2004F, 0x00D90055, 0x1E800057, 0x1EF20059, + 0x00E00061, 0x00E80065, 0x00EC0069, 0x01F9006E, + 0x00F2006F, 0x00F90075, 0x1E810077, 0x1EF30079, + 0x1FED00A8, 0x1EA600C2, 0x1EC000CA, 0x1ED200D4, + 0x01DB00DC, 0x1EA700E2, 0x1EC100EA, 0x1ED300F4, + 0x01DC00FC, 0x1EB00102, 0x1EB10103, 0x1E140112, + 0x1E150113, 0x1E50014C, 0x1E51014D, 0x1EDC01A0, + 0x1EDD01A1, 0x1EEA01AF, 0x1EEB01B0, 0x1FBA0391, + 0x1FC80395, 0x1FCA0397, 0x1FDA0399, 0x1FF8039F, + 0x1FEA03A5, 0x1FFA03A9, 0x1F7003B1, 0x1F7203B5, + 0x1F7403B7, 0x1F7603B9, 0x1F7803BF, 0x1F7A03C5, + 0x1F7C03C9, 0x1FD203CA, 0x1FE203CB, 0x04000415, + 0x040D0418, 0x04500435, 0x045D0438, 0x1F021F00, + 0x1F031F01, 0x1F0A1F08, 0x1F0B1F09, 0x1F121F10, + 0x1F131F11, 0x1F1A1F18, 0x1F1B1F19, 0x1F221F20, + 0x1F231F21, 0x1F2A1F28, 0x1F2B1F29, 0x1F321F30, + 0x1F331F31, 0x1F3A1F38, 0x1F3B1F39, 0x1F421F40, + 0x1F431F41, 0x1F4A1F48, 0x1F4B1F49, 0x1F521F50, + 0x1F531F51, 0x1F5B1F59, 0x1F621F60, 0x1F631F61, + 0x1F6A1F68, 0x1F6B1F69, 0x1FCD1FBF, 0x1FDD1FFE, + 0x00C10041, 0x01060043, 0x00C90045, 0x01F40047, + 0x00CD0049, 0x1E30004B, 0x0139004C, 0x1E3E004D, + 0x0143004E, 0x00D3004F, 0x1E540050, 0x01540052, + 0x015A0053, 0x00DA0055, 0x1E820057, 0x00DD0059, + 0x0179005A, 0x00E10061, 0x01070063, 0x00E90065, + 0x01F50067, 0x00ED0069, 0x1E31006B, 0x013A006C, + 0x1E3F006D, 0x0144006E, 0x00F3006F, 0x1E550070, + 0x01550072, 0x015B0073, 0x00FA0075, 0x1E830077, + 0x00FD0079, 0x017A007A, 0x038500A8, 0x1EA400C2, + 0x01FA00C5, 0x01FC00C6, 0x1E0800C7, 0x1EBE00CA, + 0x1E2E00CF, 0x1ED000D4, 0x1E4C00D5, 0x01FE00D8, + 0x01D700DC, 0x1EA500E2, 0x01FB00E5, 0x01FD00E6, + 0x1E0900E7, 0x1EBF00EA, 0x1E2F00EF, 0x1ED100F4, + 0x1E4D00F5, 0x01FF00F8, 0x01D800FC, 0x1EAE0102, + 0x1EAF0103, 0x1E160112, 0x1E170113, 0x1E52014C, + 0x1E53014D, 0x1E780168, 0x1E790169, 0x1EDA01A0, + 0x1EDB01A1, 0x1EE801AF, 0x1EE901B0, 0x03860391, + 0x03880395, 0x03890397, 0x038A0399, 0x038C039F, + 0x038E03A5, 0x038F03A9, 0x03AC03B1, 0x03AD03B5, + 0x03AE03B7, 0x03AF03B9, 0x03CC03BF, 0x03CD03C5, + 0x03CE03C9, 0x039003CA, 0x03B003CB, 0x03D303D2, + 0x04030413, 0x040C041A, 0x04530433, 0x045C043A, + 0x1F041F00, 0x1F051F01, 0x1F0C1F08, 0x1F0D1F09, + 0x1F141F10, 0x1F151F11, 0x1F1C1F18, 0x1F1D1F19, + 0x1F241F20, 0x1F251F21, 0x1F2C1F28, 0x1F2D1F29, + 0x1F341F30, 0x1F351F31, 0x1F3C1F38, 0x1F3D1F39, + 0x1F441F40, 0x1F451F41, 0x1F4C1F48, 0x1F4D1F49, + 0x1F541F50, 0x1F551F51, 0x1F5D1F59, 0x1F641F60, + 0x1F651F61, 0x1F6C1F68, 0x1F6D1F69, 0x1FCE1FBF, + 0x1FDE1FFE, 0x00C20041, 0x01080043, 0x00CA0045, + 0x011C0047, 0x01240048, 0x00CE0049, 0x0134004A, + 0x00D4004F, 0x015C0053, 0x00DB0055, 0x01740057, + 0x01760059, 0x1E90005A, 0x00E20061, 0x01090063, + 0x00EA0065, 0x011D0067, 0x01250068, 0x00EE0069, + 0x0135006A, 0x00F4006F, 0x015D0073, 0x00FB0075, + 0x01750077, 0x01770079, 0x1E91007A, 0x1EAC1EA0, + 0x1EAD1EA1, 0x1EC61EB8, 0x1EC71EB9, 0x1ED81ECC, + 0x1ED91ECD, 0x00C30041, 0x1EBC0045, 0x01280049, + 0x00D1004E, 0x00D5004F, 0x01680055, 0x1E7C0056, + 0x1EF80059, 0x00E30061, 0x1EBD0065, 0x01290069, + 0x00F1006E, 0x00F5006F, 0x01690075, 0x1E7D0076, + 0x1EF90079, 0x1EAA00C2, 0x1EC400CA, 0x1ED600D4, + 0x1EAB00E2, 0x1EC500EA, 0x1ED700F4, 0x1EB40102, + 0x1EB50103, 0x1EE001A0, 0x1EE101A1, 0x1EEE01AF, + 0x1EEF01B0, 0x01000041, 0x01120045, 0x1E200047, + 0x012A0049, 0x014C004F, 0x016A0055, 0x02320059, + 0x01010061, 0x01130065, 0x1E210067, 0x012B0069, + 0x014D006F, 0x016B0075, 0x02330079, 0x01DE00C4, + 0x01E200C6, 0x022C00D5, 0x022A00D6, 0x01D500DC, + 0x01DF00E4, 0x01E300E6, 0x022D00F5, 0x022B00F6, + 0x01D600FC, 0x01EC01EA, 0x01ED01EB, 0x01E00226, + 0x01E10227, 0x0230022E, 0x0231022F, 0x1FB90391, + 0x1FD90399, 0x1FE903A5, 0x1FB103B1, 0x1FD103B9, + 0x1FE103C5, 0x04E20418, 0x04EE0423, 0x04E30438, + 0x04EF0443, 0x1E381E36, 0x1E391E37, 0x1E5C1E5A, + 0x1E5D1E5B, 0x01020041, 0x01140045, 0x011E0047, + 0x012C0049, 0x014E004F, 0x016C0055, 0x01030061, + 0x01150065, 0x011F0067, 0x012D0069, 0x014F006F, + 0x016D0075, 0x1E1C0228, 0x1E1D0229, 0x1FB80391, + 0x1FD80399, 0x1FE803A5, 0x1FB003B1, 0x1FD003B9, + 0x1FE003C5, 0x04D00410, 0x04D60415, 0x04C10416, + 0x04190418, 0x040E0423, 0x04D10430, 0x04D70435, + 0x04C20436, 0x04390438, 0x045E0443, 0x1EB61EA0, + 0x1EB71EA1, 0x02260041, 0x1E020042, 0x010A0043, + 0x1E0A0044, 0x01160045, 0x1E1E0046, 0x01200047, + 0x1E220048, 0x01300049, 0x1E40004D, 0x1E44004E, + 0x022E004F, 0x1E560050, 0x1E580052, 0x1E600053, + 0x1E6A0054, 0x1E860057, 0x1E8A0058, 0x1E8E0059, + 0x017B005A, 0x02270061, 0x1E030062, 0x010B0063, + 0x1E0B0064, 0x01170065, 0x1E1F0066, 0x01210067, + 0x1E230068, 0x1E41006D, 0x1E45006E, 0x022F006F, + 0x1E570070, 0x1E590072, 0x1E610073, 0x1E6B0074, + 0x1E870077, 0x1E8B0078, 0x1E8F0079, 0x017C007A, + 0x1E64015A, 0x1E65015B, 0x1E660160, 0x1E670161, + 0x1E9B017F, 0x1E681E62, 0x1E691E63, 0x00C40041, + 0x00CB0045, 0x1E260048, 0x00CF0049, 0x00D6004F, + 0x00DC0055, 0x1E840057, 0x1E8C0058, 0x01780059, + 0x00E40061, 0x00EB0065, 0x1E270068, 0x00EF0069, + 0x00F6006F, 0x1E970074, 0x00FC0075, 0x1E850077, + 0x1E8D0078, 0x00FF0079, 0x1E4E00D5, 0x1E4F00F5, + 0x1E7A016A, 0x1E7B016B, 0x03AA0399, 0x03AB03A5, + 0x03CA03B9, 0x03CB03C5, 0x03D403D2, 0x04070406, + 0x04D20410, 0x04010415, 0x04DC0416, 0x04DE0417, + 0x04E40418, 0x04E6041E, 0x04F00423, 0x04F40427, + 0x04F8042B, 0x04EC042D, 0x04D30430, 0x04510435, + 0x04DD0436, 0x04DF0437, 0x04E50438, 0x04E7043E, + 0x04F10443, 0x04F50447, 0x04F9044B, 0x04ED044D, + 0x04570456, 0x04DA04D8, 0x04DB04D9, 0x04EA04E8, + 0x04EB04E9, 0x1EA20041, 0x1EBA0045, 0x1EC80049, + 0x1ECE004F, 0x1EE60055, 0x1EF60059, 0x1EA30061, + 0x1EBB0065, 0x1EC90069, 0x1ECF006F, 0x1EE70075, + 0x1EF70079, 0x1EA800C2, 0x1EC200CA, 0x1ED400D4, + 0x1EA900E2, 0x1EC300EA, 0x1ED500F4, 0x1EB20102, + 0x1EB30103, 0x1EDE01A0, 0x1EDF01A1, 0x1EEC01AF, + 0x1EED01B0, 0x00C50041, 0x016E0055, 0x00E50061, + 0x016F0075, 0x1E980077, 0x1E990079, 0x0150004F, + 0x01700055, 0x0151006F, 0x01710075, 0x04F20423, + 0x04F30443, 0x01CD0041, 0x010C0043, 0x010E0044, + 0x011A0045, 0x01E60047, 0x021E0048, 0x01CF0049, + 0x01E8004B, 0x013D004C, 0x0147004E, 0x01D1004F, + 0x01580052, 0x01600053, 0x01640054, 0x01D30055, + 0x017D005A, 0x01CE0061, 0x010D0063, 0x010F0064, + 0x011B0065, 0x01E70067, 0x021F0068, 0x01D00069, + 0x01F0006A, 0x01E9006B, 0x013E006C, 0x0148006E, + 0x01D2006F, 0x01590072, 0x01610073, 0x01650074, + 0x01D40075, 0x017E007A, 0x01D900DC, 0x01DA00FC, + 0x01EE01B7, 0x01EF0292, 0x02000041, 0x02040045, + 0x02080049, 0x020C004F, 0x02100052, 0x02140055, + 0x02010061, 0x02050065, 0x02090069, 0x020D006F, + 0x02110072, 0x02150075, 0x04760474, 0x04770475, + 0x02020041, 0x02060045, 0x020A0049, 0x020E004F, + 0x02120052, 0x02160055, 0x02030061, 0x02070065, + 0x020B0069, 0x020F006F, 0x02130072, 0x02170075, + 0x1F080391, 0x1F180395, 0x1F280397, 0x1F380399, + 0x1F48039F, 0x1F6803A9, 0x1F0003B1, 0x1F1003B5, + 0x1F2003B7, 0x1F3003B9, 0x1F4003BF, 0x1FE403C1, + 0x1F5003C5, 0x1F6003C9, 0x1F090391, 0x1F190395, + 0x1F290397, 0x1F390399, 0x1F49039F, 0x1FEC03A1, + 0x1F5903A5, 0x1F6903A9, 0x1F0103B1, 0x1F1103B5, + 0x1F2103B7, 0x1F3103B9, 0x1F4103BF, 0x1FE503C1, + 0x1F5103C5, 0x1F6103C9, 0x01A0004F, 0x01AF0055, + 0x01A1006F, 0x01B00075, 0x1EA00041, 0x1E040042, + 0x1E0C0044, 0x1EB80045, 0x1E240048, 0x1ECA0049, + 0x1E32004B, 0x1E36004C, 0x1E42004D, 0x1E46004E, + 0x1ECC004F, 0x1E5A0052, 0x1E620053, 0x1E6C0054, + 0x1EE40055, 0x1E7E0056, 0x1E880057, 0x1EF40059, + 0x1E92005A, 0x1EA10061, 0x1E050062, 0x1E0D0064, + 0x1EB90065, 0x1E250068, 0x1ECB0069, 0x1E33006B, + 0x1E37006C, 0x1E43006D, 0x1E47006E, 0x1ECD006F, + 0x1E5B0072, 0x1E630073, 0x1E6D0074, 0x1EE50075, + 0x1E7F0076, 0x1E890077, 0x1EF50079, 0x1E93007A, + 0x1EE201A0, 0x1EE301A1, 0x1EF001AF, 0x1EF101B0, + 0x1E720055, 0x1E730075, 0x1E000041, 0x1E010061, + 0x02180053, 0x021A0054, 0x02190073, 0x021B0074, + 0x00C70043, 0x1E100044, 0x02280045, 0x01220047, + 0x1E280048, 0x0136004B, 0x013B004C, 0x0145004E, + 0x01560052, 0x015E0053, 0x01620054, 0x00E70063, + 0x1E110064, 0x02290065, 0x01230067, 0x1E290068, + 0x0137006B, 0x013C006C, 0x0146006E, 0x01570072, + 0x015F0073, 0x01630074, 0x01040041, 0x01180045, + 0x012E0049, 0x01EA004F, 0x01720055, 0x01050061, + 0x01190065, 0x012F0069, 0x01EB006F, 0x01730075, + 0x1E120044, 0x1E180045, 0x1E3C004C, 0x1E4A004E, + 0x1E700054, 0x1E760055, 0x1E130064, 0x1E190065, + 0x1E3D006C, 0x1E4B006E, 0x1E710074, 0x1E770075, + 0x1E2A0048, 0x1E2B0068, 0x1E1A0045, 0x1E2C0049, + 0x1E740055, 0x1E1B0065, 0x1E2D0069, 0x1E750075, + 0x1E060042, 0x1E0E0044, 0x1E34004B, 0x1E3A004C, + 0x1E48004E, 0x1E5E0052, 0x1E6E0054, 0x1E94005A, + 0x1E070062, 0x1E0F0064, 0x1E960068, 0x1E35006B, + 0x1E3B006C, 0x1E49006E, 0x1E5F0072, 0x1E6F0074, + 0x1E95007A, 0x226E003C, 0x2260003D, 0x226F003E, + 0x219A2190, 0x219B2192, 0x21AE2194, 0x21CD21D0, + 0x21CF21D2, 0x21CE21D4, 0x22042203, 0x22092208, + 0x220C220B, 0x22242223, 0x22262225, 0x2241223C, + 0x22442243, 0x22472245, 0x22492248, 0x226D224D, + 0x22622261, 0x22702264, 0x22712265, 0x22742272, + 0x22752273, 0x22782276, 0x22792277, 0x2280227A, + 0x2281227B, 0x22E0227C, 0x22E1227D, 0x22842282, + 0x22852283, 0x22882286, 0x22892287, 0x22E22291, + 0x22E32292, 0x22AC22A2, 0x22AD22A8, 0x22AE22A9, + 0x22AF22AB, 0x22EA22B2, 0x22EB22B3, 0x22EC22B4, + 0x22ED22B5, 0x1FC100A8, 0x1FB603B1, 0x1FC603B7, + 0x1FD603B9, 0x1FE603C5, 0x1FF603C9, 0x1FD703CA, + 0x1FE703CB, 0x1F061F00, 0x1F071F01, 0x1F0E1F08, + 0x1F0F1F09, 0x1F261F20, 0x1F271F21, 0x1F2E1F28, + 0x1F2F1F29, 0x1F361F30, 0x1F371F31, 0x1F3E1F38, + 0x1F3F1F39, 0x1F561F50, 0x1F571F51, 0x1F5F1F59, + 0x1F661F60, 0x1F671F61, 0x1F6E1F68, 0x1F6F1F69, + 0x1FCF1FBF, 0x1FDF1FFE, 0x1FBC0391, 0x1FCC0397, + 0x1FFC03A9, 0x1FB403AC, 0x1FC403AE, 0x1FB303B1, + 0x1FC303B7, 0x1FF303C9, 0x1FF403CE, 0x1F801F00, + 0x1F811F01, 0x1F821F02, 0x1F831F03, 0x1F841F04, + 0x1F851F05, 0x1F861F06, 0x1F871F07, 0x1F881F08, + 0x1F891F09, 0x1F8A1F0A, 0x1F8B1F0B, 0x1F8C1F0C, + 0x1F8D1F0D, 0x1F8E1F0E, 0x1F8F1F0F, 0x1F901F20, + 0x1F911F21, 0x1F921F22, 0x1F931F23, 0x1F941F24, + 0x1F951F25, 0x1F961F26, 0x1F971F27, 0x1F981F28, + 0x1F991F29, 0x1F9A1F2A, 0x1F9B1F2B, 0x1F9C1F2C, + 0x1F9D1F2D, 0x1F9E1F2E, 0x1F9F1F2F, 0x1FA01F60, + 0x1FA11F61, 0x1FA21F62, 0x1FA31F63, 0x1FA41F64, + 0x1FA51F65, 0x1FA61F66, 0x1FA71F67, 0x1FA81F68, + 0x1FA91F69, 0x1FAA1F6A, 0x1FAB1F6B, 0x1FAC1F6C, + 0x1FAD1F6D, 0x1FAE1F6E, 0x1FAF1F6F, 0x1FB21F70, + 0x1FC21F74, 0x1FF21F7C, 0x1FB71FB6, 0x1FC71FC6, + 0x1FF71FF6, 0x06220627, 0x06230627, 0x06240648, + 0x0626064A, 0x06C206C1, 0x06D306D2, 0x06C006D5, + 0x06250627, 0x09290928, 0x09310930, 0x09340933, + 0x09CB09C7, 0x09CC09C7, 0x0B4B0B47, 0x0B480B47, + 0x0B4C0B47, 0x0BCA0BC6, 0x0BCB0BC7, 0x0B940B92, + 0x0BCC0BC6, 0x0C480C46, 0x0CCA0CC6, 0x0CC00CBF, + 0x0CC70CC6, 0x0CCB0CCA, 0x0CC80CC6, 0x0D4A0D46, + 0x0D4B0D47, 0x0D4C0D46, 0x0DDA0DD9, 0x0DDD0DDC, + 0x0DDC0DD9, 0x0DDE0DD9, 0x10261025, 0x1B061B05, + 0x1B081B07, 0x1B0A1B09, 0x1B0C1B0B, 0x1B0E1B0D, + 0x1B121B11, 0x1B3B1B3A, 0x1B3D1B3C, 0x1B401B3E, + 0x1B411B3F, 0x1B431B42, 0x30943046, 0x304C304B, + 0x304E304D, 0x3050304F, 0x30523051, 0x30543053, + 0x30563055, 0x30583057, 0x305A3059, 0x305C305B, + 0x305E305D, 0x3060305F, 0x30623061, 0x30653064, + 0x30673066, 0x30693068, 0x3070306F, 0x30733072, + 0x30763075, 0x30793078, 0x307C307B, 0x309E309D, + 0x30F430A6, 0x30AC30AB, 0x30AE30AD, 0x30B030AF, + 0x30B230B1, 0x30B430B3, 0x30B630B5, 0x30B830B7, + 0x30BA30B9, 0x30BC30BB, 0x30BE30BD, 0x30C030BF, + 0x30C230C1, 0x30C530C4, 0x30C730C6, 0x30C930C8, + 0x30D030CF, 0x30D330D2, 0x30D630D5, 0x30D930D8, + 0x30DC30DB, 0x30F730EF, 0x30F830F0, 0x30F930F1, + 0x30FA30F2, 0x30FE30FD, 0x3071306F, 0x30743072, + 0x30773075, 0x307A3078, 0x307D307B, 0x30D130CF, + 0x30D430D2, 0x30D730D5, 0x30DA30D8, 0x30DD30DB, + 0x00011099, 0x0001109A, 0x0001109B, 0x0001109C, + 0x000110A5, 0x000110AB, 0x00011131, 0x0001112E, + 0x00011132, 0x0001112F, 0x00011347, 0x0001134B, + 0x00011347, 0x0001134C, 0x000114B9, 0x000114BC, + 0x000114B9, 0x000114BB, 0x000114B9, 0x000114BE, + 0x000115B8, 0x000115BA, 0x000115B9, 0x000115BB, + 0x00011935, 0x00011938, +}; + +static uint32_t const __CFUniCharCanonicalPrecompositionMappingTableLength = 541; + +static uint32_t const __CFUniCharCompatibilityDecompositionMappingTable[] = { + 0x000076A0, 0x000000A0, 0x01000020, 0x000000A8, + 0x02000000, 0x000000AA, 0x01000061, 0x000000AF, + 0x02000002, 0x000000B2, 0x01000032, 0x000000B3, + 0x01000033, 0x000000B4, 0x02000004, 0x000000B5, + 0x010003BC, 0x000000B8, 0x02000006, 0x000000B9, + 0x01000031, 0x000000BA, 0x0100006F, 0x000000BC, + 0x03000008, 0x000000BD, 0x0300000B, 0x000000BE, + 0x0300000E, 0x00000132, 0x02000011, 0x00000133, + 0x02000013, 0x0000013F, 0x02000015, 0x00000140, + 0x02000017, 0x00000149, 0x02000019, 0x0000017F, + 0x01000073, 0x000001C4, 0x0200001B, 0x000001C5, + 0x0200001D, 0x000001C6, 0x0200001F, 0x000001C7, + 0x02000021, 0x000001C8, 0x02000023, 0x000001C9, + 0x02000025, 0x000001CA, 0x02000027, 0x000001CB, + 0x02000029, 0x000001CC, 0x0200002B, 0x000001F1, + 0x0200002D, 0x000001F2, 0x0200002F, 0x000001F3, + 0x02000031, 0x000002B0, 0x01000068, 0x000002B1, + 0x01000266, 0x000002B2, 0x0100006A, 0x000002B3, + 0x01000072, 0x000002B4, 0x01000279, 0x000002B5, + 0x0100027B, 0x000002B6, 0x01000281, 0x000002B7, + 0x01000077, 0x000002B8, 0x01000079, 0x000002D8, + 0x02000033, 0x000002D9, 0x02000035, 0x000002DA, + 0x02000037, 0x000002DB, 0x02000039, 0x000002DC, + 0x0200003B, 0x000002DD, 0x0200003D, 0x000002E0, + 0x01000263, 0x000002E1, 0x0100006C, 0x000002E2, + 0x01000073, 0x000002E3, 0x01000078, 0x000002E4, + 0x01000295, 0x0000037A, 0x0200003F, 0x00000384, + 0x02000041, 0x000003D0, 0x010003B2, 0x000003D1, + 0x010003B8, 0x000003D2, 0x010003A5, 0x000003D5, + 0x010003C6, 0x000003D6, 0x010003C0, 0x000003F0, + 0x010003BA, 0x000003F1, 0x010003C1, 0x000003F2, + 0x010003C2, 0x000003F4, 0x01000398, 0x000003F5, + 0x010003B5, 0x000003F9, 0x010003A3, 0x00000587, + 0x02000043, 0x00000675, 0x02000045, 0x00000676, + 0x02000047, 0x00000677, 0x02000049, 0x00000678, + 0x0200004B, 0x00000E33, 0x0200004D, 0x00000EB3, + 0x0200004F, 0x00000EDC, 0x02000051, 0x00000EDD, + 0x02000053, 0x00000F0C, 0x01000F0B, 0x00000F77, + 0x02000055, 0x00000F79, 0x02000057, 0x000010FC, + 0x010010DC, 0x00001D2C, 0x01000041, 0x00001D2D, + 0x010000C6, 0x00001D2E, 0x01000042, 0x00001D30, + 0x01000044, 0x00001D31, 0x01000045, 0x00001D32, + 0x0100018E, 0x00001D33, 0x01000047, 0x00001D34, + 0x01000048, 0x00001D35, 0x01000049, 0x00001D36, + 0x0100004A, 0x00001D37, 0x0100004B, 0x00001D38, + 0x0100004C, 0x00001D39, 0x0100004D, 0x00001D3A, + 0x0100004E, 0x00001D3C, 0x0100004F, 0x00001D3D, + 0x01000222, 0x00001D3E, 0x01000050, 0x00001D3F, + 0x01000052, 0x00001D40, 0x01000054, 0x00001D41, + 0x01000055, 0x00001D42, 0x01000057, 0x00001D43, + 0x01000061, 0x00001D44, 0x01000250, 0x00001D45, + 0x01000251, 0x00001D46, 0x01001D02, 0x00001D47, + 0x01000062, 0x00001D48, 0x01000064, 0x00001D49, + 0x01000065, 0x00001D4A, 0x01000259, 0x00001D4B, + 0x0100025B, 0x00001D4C, 0x0100025C, 0x00001D4D, + 0x01000067, 0x00001D4F, 0x0100006B, 0x00001D50, + 0x0100006D, 0x00001D51, 0x0100014B, 0x00001D52, + 0x0100006F, 0x00001D53, 0x01000254, 0x00001D54, + 0x01001D16, 0x00001D55, 0x01001D17, 0x00001D56, + 0x01000070, 0x00001D57, 0x01000074, 0x00001D58, + 0x01000075, 0x00001D59, 0x01001D1D, 0x00001D5A, + 0x0100026F, 0x00001D5B, 0x01000076, 0x00001D5C, + 0x01001D25, 0x00001D5D, 0x010003B2, 0x00001D5E, + 0x010003B3, 0x00001D5F, 0x010003B4, 0x00001D60, + 0x010003C6, 0x00001D61, 0x010003C7, 0x00001D62, + 0x01000069, 0x00001D63, 0x01000072, 0x00001D64, + 0x01000075, 0x00001D65, 0x01000076, 0x00001D66, + 0x010003B2, 0x00001D67, 0x010003B3, 0x00001D68, + 0x010003C1, 0x00001D69, 0x010003C6, 0x00001D6A, + 0x010003C7, 0x00001D78, 0x0100043D, 0x00001D9B, + 0x01000252, 0x00001D9C, 0x01000063, 0x00001D9D, + 0x01000255, 0x00001D9E, 0x010000F0, 0x00001D9F, + 0x0100025C, 0x00001DA0, 0x01000066, 0x00001DA1, + 0x0100025F, 0x00001DA2, 0x01000261, 0x00001DA3, + 0x01000265, 0x00001DA4, 0x01000268, 0x00001DA5, + 0x01000269, 0x00001DA6, 0x0100026A, 0x00001DA7, + 0x01001D7B, 0x00001DA8, 0x0100029D, 0x00001DA9, + 0x0100026D, 0x00001DAA, 0x01001D85, 0x00001DAB, + 0x0100029F, 0x00001DAC, 0x01000271, 0x00001DAD, + 0x01000270, 0x00001DAE, 0x01000272, 0x00001DAF, + 0x01000273, 0x00001DB0, 0x01000274, 0x00001DB1, + 0x01000275, 0x00001DB2, 0x01000278, 0x00001DB3, + 0x01000282, 0x00001DB4, 0x01000283, 0x00001DB5, + 0x010001AB, 0x00001DB6, 0x01000289, 0x00001DB7, + 0x0100028A, 0x00001DB8, 0x01001D1C, 0x00001DB9, + 0x0100028B, 0x00001DBA, 0x0100028C, 0x00001DBB, + 0x0100007A, 0x00001DBC, 0x01000290, 0x00001DBD, + 0x01000291, 0x00001DBE, 0x01000292, 0x00001DBF, + 0x010003B8, 0x00001E9A, 0x02000059, 0x00001FBD, + 0x0200005B, 0x00001FBF, 0x0200005D, 0x00001FC0, + 0x0200005F, 0x00001FFE, 0x02000061, 0x00002002, + 0x01000020, 0x00002003, 0x01000020, 0x00002004, + 0x01000020, 0x00002005, 0x01000020, 0x00002006, + 0x01000020, 0x00002007, 0x01000020, 0x00002008, + 0x01000020, 0x00002009, 0x01000020, 0x0000200A, + 0x01000020, 0x00002011, 0x01002010, 0x00002017, + 0x02000063, 0x00002024, 0x0100002E, 0x00002025, + 0x02000065, 0x00002026, 0x03000067, 0x0000202F, + 0x01000020, 0x00002033, 0x0200006A, 0x00002034, + 0x0300006C, 0x00002036, 0x0200006F, 0x00002037, + 0x03000071, 0x0000203C, 0x02000074, 0x0000203E, + 0x02000076, 0x00002047, 0x02000078, 0x00002048, + 0x0200007A, 0x00002049, 0x0200007C, 0x00002057, + 0x0400007E, 0x0000205F, 0x01000020, 0x00002070, + 0x01000030, 0x00002071, 0x01000069, 0x00002074, + 0x01000034, 0x00002075, 0x01000035, 0x00002076, + 0x01000036, 0x00002077, 0x01000037, 0x00002078, + 0x01000038, 0x00002079, 0x01000039, 0x0000207A, + 0x0100002B, 0x0000207B, 0x01002212, 0x0000207C, + 0x0100003D, 0x0000207D, 0x01000028, 0x0000207E, + 0x01000029, 0x0000207F, 0x0100006E, 0x00002080, + 0x01000030, 0x00002081, 0x01000031, 0x00002082, + 0x01000032, 0x00002083, 0x01000033, 0x00002084, + 0x01000034, 0x00002085, 0x01000035, 0x00002086, + 0x01000036, 0x00002087, 0x01000037, 0x00002088, + 0x01000038, 0x00002089, 0x01000039, 0x0000208A, + 0x0100002B, 0x0000208B, 0x01002212, 0x0000208C, + 0x0100003D, 0x0000208D, 0x01000028, 0x0000208E, + 0x01000029, 0x00002090, 0x01000061, 0x00002091, + 0x01000065, 0x00002092, 0x0100006F, 0x00002093, + 0x01000078, 0x00002094, 0x01000259, 0x00002095, + 0x01000068, 0x00002096, 0x0100006B, 0x00002097, + 0x0100006C, 0x00002098, 0x0100006D, 0x00002099, + 0x0100006E, 0x0000209A, 0x01000070, 0x0000209B, + 0x01000073, 0x0000209C, 0x01000074, 0x000020A8, + 0x02000082, 0x00002100, 0x03000084, 0x00002101, + 0x03000087, 0x00002102, 0x01000043, 0x00002103, + 0x0200008A, 0x00002105, 0x0300008C, 0x00002106, + 0x0300008F, 0x00002107, 0x01000190, 0x00002109, + 0x02000092, 0x0000210A, 0x01000067, 0x0000210B, + 0x01000048, 0x0000210C, 0x01000048, 0x0000210D, + 0x01000048, 0x0000210E, 0x01000068, 0x0000210F, + 0x01000127, 0x00002110, 0x01000049, 0x00002111, + 0x01000049, 0x00002112, 0x0100004C, 0x00002113, + 0x0100006C, 0x00002115, 0x0100004E, 0x00002116, + 0x02000094, 0x00002119, 0x01000050, 0x0000211A, + 0x01000051, 0x0000211B, 0x01000052, 0x0000211C, + 0x01000052, 0x0000211D, 0x01000052, 0x00002120, + 0x02000096, 0x00002121, 0x03000098, 0x00002122, + 0x0200009B, 0x00002124, 0x0100005A, 0x00002128, + 0x0100005A, 0x0000212C, 0x01000042, 0x0000212D, + 0x01000043, 0x0000212F, 0x01000065, 0x00002130, + 0x01000045, 0x00002131, 0x01000046, 0x00002133, + 0x0100004D, 0x00002134, 0x0100006F, 0x00002135, + 0x010005D0, 0x00002136, 0x010005D1, 0x00002137, + 0x010005D2, 0x00002138, 0x010005D3, 0x00002139, + 0x01000069, 0x0000213B, 0x0300009D, 0x0000213C, + 0x010003C0, 0x0000213D, 0x010003B3, 0x0000213E, + 0x01000393, 0x0000213F, 0x010003A0, 0x00002140, + 0x01002211, 0x00002145, 0x01000044, 0x00002146, + 0x01000064, 0x00002147, 0x01000065, 0x00002148, + 0x01000069, 0x00002149, 0x0100006A, 0x00002150, + 0x030000A0, 0x00002151, 0x030000A3, 0x00002152, + 0x040000A6, 0x00002153, 0x030000AA, 0x00002154, + 0x030000AD, 0x00002155, 0x030000B0, 0x00002156, + 0x030000B3, 0x00002157, 0x030000B6, 0x00002158, + 0x030000B9, 0x00002159, 0x030000BC, 0x0000215A, + 0x030000BF, 0x0000215B, 0x030000C2, 0x0000215C, + 0x030000C5, 0x0000215D, 0x030000C8, 0x0000215E, + 0x030000CB, 0x0000215F, 0x020000CE, 0x00002160, + 0x01000049, 0x00002161, 0x020000D0, 0x00002162, + 0x030000D2, 0x00002163, 0x020000D5, 0x00002164, + 0x01000056, 0x00002165, 0x020000D7, 0x00002166, + 0x030000D9, 0x00002167, 0x040000DC, 0x00002168, + 0x020000E0, 0x00002169, 0x01000058, 0x0000216A, + 0x020000E2, 0x0000216B, 0x030000E4, 0x0000216C, + 0x0100004C, 0x0000216D, 0x01000043, 0x0000216E, + 0x01000044, 0x0000216F, 0x0100004D, 0x00002170, + 0x01000069, 0x00002171, 0x020000E7, 0x00002172, + 0x030000E9, 0x00002173, 0x020000EC, 0x00002174, + 0x01000076, 0x00002175, 0x020000EE, 0x00002176, + 0x030000F0, 0x00002177, 0x040000F3, 0x00002178, + 0x020000F7, 0x00002179, 0x01000078, 0x0000217A, + 0x020000F9, 0x0000217B, 0x030000FB, 0x0000217C, + 0x0100006C, 0x0000217D, 0x01000063, 0x0000217E, + 0x01000064, 0x0000217F, 0x0100006D, 0x00002189, + 0x030000FE, 0x0000222C, 0x02000101, 0x0000222D, + 0x03000103, 0x0000222F, 0x02000106, 0x00002230, + 0x03000108, 0x00002460, 0x01000031, 0x00002461, + 0x01000032, 0x00002462, 0x01000033, 0x00002463, + 0x01000034, 0x00002464, 0x01000035, 0x00002465, + 0x01000036, 0x00002466, 0x01000037, 0x00002467, + 0x01000038, 0x00002468, 0x01000039, 0x00002469, + 0x0200010B, 0x0000246A, 0x0200010D, 0x0000246B, + 0x0200010F, 0x0000246C, 0x02000111, 0x0000246D, + 0x02000113, 0x0000246E, 0x02000115, 0x0000246F, + 0x02000117, 0x00002470, 0x02000119, 0x00002471, + 0x0200011B, 0x00002472, 0x0200011D, 0x00002473, + 0x0200011F, 0x00002474, 0x03000121, 0x00002475, + 0x03000124, 0x00002476, 0x03000127, 0x00002477, + 0x0300012A, 0x00002478, 0x0300012D, 0x00002479, + 0x03000130, 0x0000247A, 0x03000133, 0x0000247B, + 0x03000136, 0x0000247C, 0x03000139, 0x0000247D, + 0x0400013C, 0x0000247E, 0x04000140, 0x0000247F, + 0x04000144, 0x00002480, 0x04000148, 0x00002481, + 0x0400014C, 0x00002482, 0x04000150, 0x00002483, + 0x04000154, 0x00002484, 0x04000158, 0x00002485, + 0x0400015C, 0x00002486, 0x04000160, 0x00002487, + 0x04000164, 0x00002488, 0x02000168, 0x00002489, + 0x0200016A, 0x0000248A, 0x0200016C, 0x0000248B, + 0x0200016E, 0x0000248C, 0x02000170, 0x0000248D, + 0x02000172, 0x0000248E, 0x02000174, 0x0000248F, + 0x02000176, 0x00002490, 0x02000178, 0x00002491, + 0x0300017A, 0x00002492, 0x0300017D, 0x00002493, + 0x03000180, 0x00002494, 0x03000183, 0x00002495, + 0x03000186, 0x00002496, 0x03000189, 0x00002497, + 0x0300018C, 0x00002498, 0x0300018F, 0x00002499, + 0x03000192, 0x0000249A, 0x03000195, 0x0000249B, + 0x03000198, 0x0000249C, 0x0300019B, 0x0000249D, + 0x0300019E, 0x0000249E, 0x030001A1, 0x0000249F, + 0x030001A4, 0x000024A0, 0x030001A7, 0x000024A1, + 0x030001AA, 0x000024A2, 0x030001AD, 0x000024A3, + 0x030001B0, 0x000024A4, 0x030001B3, 0x000024A5, + 0x030001B6, 0x000024A6, 0x030001B9, 0x000024A7, + 0x030001BC, 0x000024A8, 0x030001BF, 0x000024A9, + 0x030001C2, 0x000024AA, 0x030001C5, 0x000024AB, + 0x030001C8, 0x000024AC, 0x030001CB, 0x000024AD, + 0x030001CE, 0x000024AE, 0x030001D1, 0x000024AF, + 0x030001D4, 0x000024B0, 0x030001D7, 0x000024B1, + 0x030001DA, 0x000024B2, 0x030001DD, 0x000024B3, + 0x030001E0, 0x000024B4, 0x030001E3, 0x000024B5, + 0x030001E6, 0x000024B6, 0x01000041, 0x000024B7, + 0x01000042, 0x000024B8, 0x01000043, 0x000024B9, + 0x01000044, 0x000024BA, 0x01000045, 0x000024BB, + 0x01000046, 0x000024BC, 0x01000047, 0x000024BD, + 0x01000048, 0x000024BE, 0x01000049, 0x000024BF, + 0x0100004A, 0x000024C0, 0x0100004B, 0x000024C1, + 0x0100004C, 0x000024C2, 0x0100004D, 0x000024C3, + 0x0100004E, 0x000024C4, 0x0100004F, 0x000024C5, + 0x01000050, 0x000024C6, 0x01000051, 0x000024C7, + 0x01000052, 0x000024C8, 0x01000053, 0x000024C9, + 0x01000054, 0x000024CA, 0x01000055, 0x000024CB, + 0x01000056, 0x000024CC, 0x01000057, 0x000024CD, + 0x01000058, 0x000024CE, 0x01000059, 0x000024CF, + 0x0100005A, 0x000024D0, 0x01000061, 0x000024D1, + 0x01000062, 0x000024D2, 0x01000063, 0x000024D3, + 0x01000064, 0x000024D4, 0x01000065, 0x000024D5, + 0x01000066, 0x000024D6, 0x01000067, 0x000024D7, + 0x01000068, 0x000024D8, 0x01000069, 0x000024D9, + 0x0100006A, 0x000024DA, 0x0100006B, 0x000024DB, + 0x0100006C, 0x000024DC, 0x0100006D, 0x000024DD, + 0x0100006E, 0x000024DE, 0x0100006F, 0x000024DF, + 0x01000070, 0x000024E0, 0x01000071, 0x000024E1, + 0x01000072, 0x000024E2, 0x01000073, 0x000024E3, + 0x01000074, 0x000024E4, 0x01000075, 0x000024E5, + 0x01000076, 0x000024E6, 0x01000077, 0x000024E7, + 0x01000078, 0x000024E8, 0x01000079, 0x000024E9, + 0x0100007A, 0x000024EA, 0x01000030, 0x00002A0C, + 0x040001E9, 0x00002A74, 0x030001ED, 0x00002A75, + 0x020001F0, 0x00002A76, 0x030001F2, 0x00002C7C, + 0x0100006A, 0x00002C7D, 0x01000056, 0x00002D6F, + 0x01002D61, 0x00002E9F, 0x01006BCD, 0x00002EF3, + 0x01009F9F, 0x00002F00, 0x01004E00, 0x00002F01, + 0x01004E28, 0x00002F02, 0x01004E36, 0x00002F03, + 0x01004E3F, 0x00002F04, 0x01004E59, 0x00002F05, + 0x01004E85, 0x00002F06, 0x01004E8C, 0x00002F07, + 0x01004EA0, 0x00002F08, 0x01004EBA, 0x00002F09, + 0x0100513F, 0x00002F0A, 0x01005165, 0x00002F0B, + 0x0100516B, 0x00002F0C, 0x01005182, 0x00002F0D, + 0x01005196, 0x00002F0E, 0x010051AB, 0x00002F0F, + 0x010051E0, 0x00002F10, 0x010051F5, 0x00002F11, + 0x01005200, 0x00002F12, 0x0100529B, 0x00002F13, + 0x010052F9, 0x00002F14, 0x01005315, 0x00002F15, + 0x0100531A, 0x00002F16, 0x01005338, 0x00002F17, + 0x01005341, 0x00002F18, 0x0100535C, 0x00002F19, + 0x01005369, 0x00002F1A, 0x01005382, 0x00002F1B, + 0x010053B6, 0x00002F1C, 0x010053C8, 0x00002F1D, + 0x010053E3, 0x00002F1E, 0x010056D7, 0x00002F1F, + 0x0100571F, 0x00002F20, 0x010058EB, 0x00002F21, + 0x01005902, 0x00002F22, 0x0100590A, 0x00002F23, + 0x01005915, 0x00002F24, 0x01005927, 0x00002F25, + 0x01005973, 0x00002F26, 0x01005B50, 0x00002F27, + 0x01005B80, 0x00002F28, 0x01005BF8, 0x00002F29, + 0x01005C0F, 0x00002F2A, 0x01005C22, 0x00002F2B, + 0x01005C38, 0x00002F2C, 0x01005C6E, 0x00002F2D, + 0x01005C71, 0x00002F2E, 0x01005DDB, 0x00002F2F, + 0x01005DE5, 0x00002F30, 0x01005DF1, 0x00002F31, + 0x01005DFE, 0x00002F32, 0x01005E72, 0x00002F33, + 0x01005E7A, 0x00002F34, 0x01005E7F, 0x00002F35, + 0x01005EF4, 0x00002F36, 0x01005EFE, 0x00002F37, + 0x01005F0B, 0x00002F38, 0x01005F13, 0x00002F39, + 0x01005F50, 0x00002F3A, 0x01005F61, 0x00002F3B, + 0x01005F73, 0x00002F3C, 0x01005FC3, 0x00002F3D, + 0x01006208, 0x00002F3E, 0x01006236, 0x00002F3F, + 0x0100624B, 0x00002F40, 0x0100652F, 0x00002F41, + 0x01006534, 0x00002F42, 0x01006587, 0x00002F43, + 0x01006597, 0x00002F44, 0x010065A4, 0x00002F45, + 0x010065B9, 0x00002F46, 0x010065E0, 0x00002F47, + 0x010065E5, 0x00002F48, 0x010066F0, 0x00002F49, + 0x01006708, 0x00002F4A, 0x01006728, 0x00002F4B, + 0x01006B20, 0x00002F4C, 0x01006B62, 0x00002F4D, + 0x01006B79, 0x00002F4E, 0x01006BB3, 0x00002F4F, + 0x01006BCB, 0x00002F50, 0x01006BD4, 0x00002F51, + 0x01006BDB, 0x00002F52, 0x01006C0F, 0x00002F53, + 0x01006C14, 0x00002F54, 0x01006C34, 0x00002F55, + 0x0100706B, 0x00002F56, 0x0100722A, 0x00002F57, + 0x01007236, 0x00002F58, 0x0100723B, 0x00002F59, + 0x0100723F, 0x00002F5A, 0x01007247, 0x00002F5B, + 0x01007259, 0x00002F5C, 0x0100725B, 0x00002F5D, + 0x010072AC, 0x00002F5E, 0x01007384, 0x00002F5F, + 0x01007389, 0x00002F60, 0x010074DC, 0x00002F61, + 0x010074E6, 0x00002F62, 0x01007518, 0x00002F63, + 0x0100751F, 0x00002F64, 0x01007528, 0x00002F65, + 0x01007530, 0x00002F66, 0x0100758B, 0x00002F67, + 0x01007592, 0x00002F68, 0x01007676, 0x00002F69, + 0x0100767D, 0x00002F6A, 0x010076AE, 0x00002F6B, + 0x010076BF, 0x00002F6C, 0x010076EE, 0x00002F6D, + 0x010077DB, 0x00002F6E, 0x010077E2, 0x00002F6F, + 0x010077F3, 0x00002F70, 0x0100793A, 0x00002F71, + 0x010079B8, 0x00002F72, 0x010079BE, 0x00002F73, + 0x01007A74, 0x00002F74, 0x01007ACB, 0x00002F75, + 0x01007AF9, 0x00002F76, 0x01007C73, 0x00002F77, + 0x01007CF8, 0x00002F78, 0x01007F36, 0x00002F79, + 0x01007F51, 0x00002F7A, 0x01007F8A, 0x00002F7B, + 0x01007FBD, 0x00002F7C, 0x01008001, 0x00002F7D, + 0x0100800C, 0x00002F7E, 0x01008012, 0x00002F7F, + 0x01008033, 0x00002F80, 0x0100807F, 0x00002F81, + 0x01008089, 0x00002F82, 0x010081E3, 0x00002F83, + 0x010081EA, 0x00002F84, 0x010081F3, 0x00002F85, + 0x010081FC, 0x00002F86, 0x0100820C, 0x00002F87, + 0x0100821B, 0x00002F88, 0x0100821F, 0x00002F89, + 0x0100826E, 0x00002F8A, 0x01008272, 0x00002F8B, + 0x01008278, 0x00002F8C, 0x0100864D, 0x00002F8D, + 0x0100866B, 0x00002F8E, 0x01008840, 0x00002F8F, + 0x0100884C, 0x00002F90, 0x01008863, 0x00002F91, + 0x0100897E, 0x00002F92, 0x0100898B, 0x00002F93, + 0x010089D2, 0x00002F94, 0x01008A00, 0x00002F95, + 0x01008C37, 0x00002F96, 0x01008C46, 0x00002F97, + 0x01008C55, 0x00002F98, 0x01008C78, 0x00002F99, + 0x01008C9D, 0x00002F9A, 0x01008D64, 0x00002F9B, + 0x01008D70, 0x00002F9C, 0x01008DB3, 0x00002F9D, + 0x01008EAB, 0x00002F9E, 0x01008ECA, 0x00002F9F, + 0x01008F9B, 0x00002FA0, 0x01008FB0, 0x00002FA1, + 0x01008FB5, 0x00002FA2, 0x01009091, 0x00002FA3, + 0x01009149, 0x00002FA4, 0x010091C6, 0x00002FA5, + 0x010091CC, 0x00002FA6, 0x010091D1, 0x00002FA7, + 0x01009577, 0x00002FA8, 0x01009580, 0x00002FA9, + 0x0100961C, 0x00002FAA, 0x010096B6, 0x00002FAB, + 0x010096B9, 0x00002FAC, 0x010096E8, 0x00002FAD, + 0x01009751, 0x00002FAE, 0x0100975E, 0x00002FAF, + 0x01009762, 0x00002FB0, 0x01009769, 0x00002FB1, + 0x010097CB, 0x00002FB2, 0x010097ED, 0x00002FB3, + 0x010097F3, 0x00002FB4, 0x01009801, 0x00002FB5, + 0x010098A8, 0x00002FB6, 0x010098DB, 0x00002FB7, + 0x010098DF, 0x00002FB8, 0x01009996, 0x00002FB9, + 0x01009999, 0x00002FBA, 0x010099AC, 0x00002FBB, + 0x01009AA8, 0x00002FBC, 0x01009AD8, 0x00002FBD, + 0x01009ADF, 0x00002FBE, 0x01009B25, 0x00002FBF, + 0x01009B2F, 0x00002FC0, 0x01009B32, 0x00002FC1, + 0x01009B3C, 0x00002FC2, 0x01009B5A, 0x00002FC3, + 0x01009CE5, 0x00002FC4, 0x01009E75, 0x00002FC5, + 0x01009E7F, 0x00002FC6, 0x01009EA5, 0x00002FC7, + 0x01009EBB, 0x00002FC8, 0x01009EC3, 0x00002FC9, + 0x01009ECD, 0x00002FCA, 0x01009ED1, 0x00002FCB, + 0x01009EF9, 0x00002FCC, 0x01009EFD, 0x00002FCD, + 0x01009F0E, 0x00002FCE, 0x01009F13, 0x00002FCF, + 0x01009F20, 0x00002FD0, 0x01009F3B, 0x00002FD1, + 0x01009F4A, 0x00002FD2, 0x01009F52, 0x00002FD3, + 0x01009F8D, 0x00002FD4, 0x01009F9C, 0x00002FD5, + 0x01009FA0, 0x00003000, 0x01000020, 0x00003036, + 0x01003012, 0x00003038, 0x01005341, 0x00003039, + 0x01005344, 0x0000303A, 0x01005345, 0x0000309B, + 0x020001F5, 0x0000309C, 0x020001F7, 0x0000309F, + 0x020001F9, 0x000030FF, 0x020001FB, 0x00003131, + 0x01001100, 0x00003132, 0x01001101, 0x00003133, + 0x010011AA, 0x00003134, 0x01001102, 0x00003135, + 0x010011AC, 0x00003136, 0x010011AD, 0x00003137, + 0x01001103, 0x00003138, 0x01001104, 0x00003139, + 0x01001105, 0x0000313A, 0x010011B0, 0x0000313B, + 0x010011B1, 0x0000313C, 0x010011B2, 0x0000313D, + 0x010011B3, 0x0000313E, 0x010011B4, 0x0000313F, + 0x010011B5, 0x00003140, 0x0100111A, 0x00003141, + 0x01001106, 0x00003142, 0x01001107, 0x00003143, + 0x01001108, 0x00003144, 0x01001121, 0x00003145, + 0x01001109, 0x00003146, 0x0100110A, 0x00003147, + 0x0100110B, 0x00003148, 0x0100110C, 0x00003149, + 0x0100110D, 0x0000314A, 0x0100110E, 0x0000314B, + 0x0100110F, 0x0000314C, 0x01001110, 0x0000314D, + 0x01001111, 0x0000314E, 0x01001112, 0x0000314F, + 0x01001161, 0x00003150, 0x01001162, 0x00003151, + 0x01001163, 0x00003152, 0x01001164, 0x00003153, + 0x01001165, 0x00003154, 0x01001166, 0x00003155, + 0x01001167, 0x00003156, 0x01001168, 0x00003157, + 0x01001169, 0x00003158, 0x0100116A, 0x00003159, + 0x0100116B, 0x0000315A, 0x0100116C, 0x0000315B, + 0x0100116D, 0x0000315C, 0x0100116E, 0x0000315D, + 0x0100116F, 0x0000315E, 0x01001170, 0x0000315F, + 0x01001171, 0x00003160, 0x01001172, 0x00003161, + 0x01001173, 0x00003162, 0x01001174, 0x00003163, + 0x01001175, 0x00003164, 0x01001160, 0x00003165, + 0x01001114, 0x00003166, 0x01001115, 0x00003167, + 0x010011C7, 0x00003168, 0x010011C8, 0x00003169, + 0x010011CC, 0x0000316A, 0x010011CE, 0x0000316B, + 0x010011D3, 0x0000316C, 0x010011D7, 0x0000316D, + 0x010011D9, 0x0000316E, 0x0100111C, 0x0000316F, + 0x010011DD, 0x00003170, 0x010011DF, 0x00003171, + 0x0100111D, 0x00003172, 0x0100111E, 0x00003173, + 0x01001120, 0x00003174, 0x01001122, 0x00003175, + 0x01001123, 0x00003176, 0x01001127, 0x00003177, + 0x01001129, 0x00003178, 0x0100112B, 0x00003179, + 0x0100112C, 0x0000317A, 0x0100112D, 0x0000317B, + 0x0100112E, 0x0000317C, 0x0100112F, 0x0000317D, + 0x01001132, 0x0000317E, 0x01001136, 0x0000317F, + 0x01001140, 0x00003180, 0x01001147, 0x00003181, + 0x0100114C, 0x00003182, 0x010011F1, 0x00003183, + 0x010011F2, 0x00003184, 0x01001157, 0x00003185, + 0x01001158, 0x00003186, 0x01001159, 0x00003187, + 0x01001184, 0x00003188, 0x01001185, 0x00003189, + 0x01001188, 0x0000318A, 0x01001191, 0x0000318B, + 0x01001192, 0x0000318C, 0x01001194, 0x0000318D, + 0x0100119E, 0x0000318E, 0x010011A1, 0x00003192, + 0x01004E00, 0x00003193, 0x01004E8C, 0x00003194, + 0x01004E09, 0x00003195, 0x010056DB, 0x00003196, + 0x01004E0A, 0x00003197, 0x01004E2D, 0x00003198, + 0x01004E0B, 0x00003199, 0x01007532, 0x0000319A, + 0x01004E59, 0x0000319B, 0x01004E19, 0x0000319C, + 0x01004E01, 0x0000319D, 0x01005929, 0x0000319E, + 0x01005730, 0x0000319F, 0x01004EBA, 0x00003200, + 0x030001FD, 0x00003201, 0x03000200, 0x00003202, + 0x03000203, 0x00003203, 0x03000206, 0x00003204, + 0x03000209, 0x00003205, 0x0300020C, 0x00003206, + 0x0300020F, 0x00003207, 0x03000212, 0x00003208, + 0x03000215, 0x00003209, 0x03000218, 0x0000320A, + 0x0300021B, 0x0000320B, 0x0300021E, 0x0000320C, + 0x03000221, 0x0000320D, 0x03000224, 0x0000320E, + 0x04000227, 0x0000320F, 0x0400022B, 0x00003210, + 0x0400022F, 0x00003211, 0x04000233, 0x00003212, + 0x04000237, 0x00003213, 0x0400023B, 0x00003214, + 0x0400023F, 0x00003215, 0x04000243, 0x00003216, + 0x04000247, 0x00003217, 0x0400024B, 0x00003218, + 0x0400024F, 0x00003219, 0x04000253, 0x0000321A, + 0x04000257, 0x0000321B, 0x0400025B, 0x0000321C, + 0x0400025F, 0x0000321D, 0x07000263, 0x0000321E, + 0x0600026A, 0x00003220, 0x03000270, 0x00003221, + 0x03000273, 0x00003222, 0x03000276, 0x00003223, + 0x03000279, 0x00003224, 0x0300027C, 0x00003225, + 0x0300027F, 0x00003226, 0x03000282, 0x00003227, + 0x03000285, 0x00003228, 0x03000288, 0x00003229, + 0x0300028B, 0x0000322A, 0x0300028E, 0x0000322B, + 0x03000291, 0x0000322C, 0x03000294, 0x0000322D, + 0x03000297, 0x0000322E, 0x0300029A, 0x0000322F, + 0x0300029D, 0x00003230, 0x030002A0, 0x00003231, + 0x030002A3, 0x00003232, 0x030002A6, 0x00003233, + 0x030002A9, 0x00003234, 0x030002AC, 0x00003235, + 0x030002AF, 0x00003236, 0x030002B2, 0x00003237, + 0x030002B5, 0x00003238, 0x030002B8, 0x00003239, + 0x030002BB, 0x0000323A, 0x030002BE, 0x0000323B, + 0x030002C1, 0x0000323C, 0x030002C4, 0x0000323D, + 0x030002C7, 0x0000323E, 0x030002CA, 0x0000323F, + 0x030002CD, 0x00003240, 0x030002D0, 0x00003241, + 0x030002D3, 0x00003242, 0x030002D6, 0x00003243, + 0x030002D9, 0x00003244, 0x0100554F, 0x00003245, + 0x01005E7C, 0x00003246, 0x01006587, 0x00003247, + 0x01007B8F, 0x00003250, 0x030002DC, 0x00003251, + 0x020002DF, 0x00003252, 0x020002E1, 0x00003253, + 0x020002E3, 0x00003254, 0x020002E5, 0x00003255, + 0x020002E7, 0x00003256, 0x020002E9, 0x00003257, + 0x020002EB, 0x00003258, 0x020002ED, 0x00003259, + 0x020002EF, 0x0000325A, 0x020002F1, 0x0000325B, + 0x020002F3, 0x0000325C, 0x020002F5, 0x0000325D, + 0x020002F7, 0x0000325E, 0x020002F9, 0x0000325F, + 0x020002FB, 0x00003260, 0x01001100, 0x00003261, + 0x01001102, 0x00003262, 0x01001103, 0x00003263, + 0x01001105, 0x00003264, 0x01001106, 0x00003265, + 0x01001107, 0x00003266, 0x01001109, 0x00003267, + 0x0100110B, 0x00003268, 0x0100110C, 0x00003269, + 0x0100110E, 0x0000326A, 0x0100110F, 0x0000326B, + 0x01001110, 0x0000326C, 0x01001111, 0x0000326D, + 0x01001112, 0x0000326E, 0x020002FD, 0x0000326F, + 0x020002FF, 0x00003270, 0x02000301, 0x00003271, + 0x02000303, 0x00003272, 0x02000305, 0x00003273, + 0x02000307, 0x00003274, 0x02000309, 0x00003275, + 0x0200030B, 0x00003276, 0x0200030D, 0x00003277, + 0x0200030F, 0x00003278, 0x02000311, 0x00003279, + 0x02000313, 0x0000327A, 0x02000315, 0x0000327B, + 0x02000317, 0x0000327C, 0x05000319, 0x0000327D, + 0x0400031E, 0x0000327E, 0x02000322, 0x00003280, + 0x01004E00, 0x00003281, 0x01004E8C, 0x00003282, + 0x01004E09, 0x00003283, 0x010056DB, 0x00003284, + 0x01004E94, 0x00003285, 0x0100516D, 0x00003286, + 0x01004E03, 0x00003287, 0x0100516B, 0x00003288, + 0x01004E5D, 0x00003289, 0x01005341, 0x0000328A, + 0x01006708, 0x0000328B, 0x0100706B, 0x0000328C, + 0x01006C34, 0x0000328D, 0x01006728, 0x0000328E, + 0x010091D1, 0x0000328F, 0x0100571F, 0x00003290, + 0x010065E5, 0x00003291, 0x0100682A, 0x00003292, + 0x01006709, 0x00003293, 0x0100793E, 0x00003294, + 0x0100540D, 0x00003295, 0x01007279, 0x00003296, + 0x01008CA1, 0x00003297, 0x0100795D, 0x00003298, + 0x010052B4, 0x00003299, 0x010079D8, 0x0000329A, + 0x01007537, 0x0000329B, 0x01005973, 0x0000329C, + 0x01009069, 0x0000329D, 0x0100512A, 0x0000329E, + 0x01005370, 0x0000329F, 0x01006CE8, 0x000032A0, + 0x01009805, 0x000032A1, 0x01004F11, 0x000032A2, + 0x01005199, 0x000032A3, 0x01006B63, 0x000032A4, + 0x01004E0A, 0x000032A5, 0x01004E2D, 0x000032A6, + 0x01004E0B, 0x000032A7, 0x01005DE6, 0x000032A8, + 0x010053F3, 0x000032A9, 0x0100533B, 0x000032AA, + 0x01005B97, 0x000032AB, 0x01005B66, 0x000032AC, + 0x010076E3, 0x000032AD, 0x01004F01, 0x000032AE, + 0x01008CC7, 0x000032AF, 0x01005354, 0x000032B0, + 0x0100591C, 0x000032B1, 0x02000324, 0x000032B2, + 0x02000326, 0x000032B3, 0x02000328, 0x000032B4, + 0x0200032A, 0x000032B5, 0x0200032C, 0x000032B6, + 0x0200032E, 0x000032B7, 0x02000330, 0x000032B8, + 0x02000332, 0x000032B9, 0x02000334, 0x000032BA, + 0x02000336, 0x000032BB, 0x02000338, 0x000032BC, + 0x0200033A, 0x000032BD, 0x0200033C, 0x000032BE, + 0x0200033E, 0x000032BF, 0x02000340, 0x000032C0, + 0x02000342, 0x000032C1, 0x02000344, 0x000032C2, + 0x02000346, 0x000032C3, 0x02000348, 0x000032C4, + 0x0200034A, 0x000032C5, 0x0200034C, 0x000032C6, + 0x0200034E, 0x000032C7, 0x02000350, 0x000032C8, + 0x02000352, 0x000032C9, 0x03000354, 0x000032CA, + 0x03000357, 0x000032CB, 0x0300035A, 0x000032CC, + 0x0200035D, 0x000032CD, 0x0300035F, 0x000032CE, + 0x02000362, 0x000032CF, 0x03000364, 0x000032D0, + 0x010030A2, 0x000032D1, 0x010030A4, 0x000032D2, + 0x010030A6, 0x000032D3, 0x010030A8, 0x000032D4, + 0x010030AA, 0x000032D5, 0x010030AB, 0x000032D6, + 0x010030AD, 0x000032D7, 0x010030AF, 0x000032D8, + 0x010030B1, 0x000032D9, 0x010030B3, 0x000032DA, + 0x010030B5, 0x000032DB, 0x010030B7, 0x000032DC, + 0x010030B9, 0x000032DD, 0x010030BB, 0x000032DE, + 0x010030BD, 0x000032DF, 0x010030BF, 0x000032E0, + 0x010030C1, 0x000032E1, 0x010030C4, 0x000032E2, + 0x010030C6, 0x000032E3, 0x010030C8, 0x000032E4, + 0x010030CA, 0x000032E5, 0x010030CB, 0x000032E6, + 0x010030CC, 0x000032E7, 0x010030CD, 0x000032E8, + 0x010030CE, 0x000032E9, 0x010030CF, 0x000032EA, + 0x010030D2, 0x000032EB, 0x010030D5, 0x000032EC, + 0x010030D8, 0x000032ED, 0x010030DB, 0x000032EE, + 0x010030DE, 0x000032EF, 0x010030DF, 0x000032F0, + 0x010030E0, 0x000032F1, 0x010030E1, 0x000032F2, + 0x010030E2, 0x000032F3, 0x010030E4, 0x000032F4, + 0x010030E6, 0x000032F5, 0x010030E8, 0x000032F6, + 0x010030E9, 0x000032F7, 0x010030EA, 0x000032F8, + 0x010030EB, 0x000032F9, 0x010030EC, 0x000032FA, + 0x010030ED, 0x000032FB, 0x010030EF, 0x000032FC, + 0x010030F0, 0x000032FD, 0x010030F1, 0x000032FE, + 0x010030F2, 0x000032FF, 0x02000367, 0x00003300, + 0x04000369, 0x00003301, 0x0400036D, 0x00003302, + 0x04000371, 0x00003303, 0x03000375, 0x00003304, + 0x04000378, 0x00003305, 0x0300037C, 0x00003306, + 0x0300037F, 0x00003307, 0x05000382, 0x00003308, + 0x04000387, 0x00003309, 0x0300038B, 0x0000330A, + 0x0300038E, 0x0000330B, 0x03000391, 0x0000330C, + 0x04000394, 0x0000330D, 0x04000398, 0x0000330E, + 0x0300039C, 0x0000330F, 0x0300039F, 0x00003310, + 0x020003A2, 0x00003311, 0x030003A4, 0x00003312, + 0x040003A7, 0x00003313, 0x040003AB, 0x00003314, + 0x020003AF, 0x00003315, 0x050003B1, 0x00003316, + 0x060003B6, 0x00003317, 0x050003BC, 0x00003318, + 0x030003C1, 0x00003319, 0x050003C4, 0x0000331A, + 0x050003C9, 0x0000331B, 0x040003CE, 0x0000331C, + 0x030003D2, 0x0000331D, 0x030003D5, 0x0000331E, + 0x030003D8, 0x0000331F, 0x040003DB, 0x00003320, + 0x050003DF, 0x00003321, 0x040003E4, 0x00003322, + 0x030003E8, 0x00003323, 0x030003EB, 0x00003324, + 0x030003EE, 0x00003325, 0x020003F1, 0x00003326, + 0x020003F3, 0x00003327, 0x020003F5, 0x00003328, + 0x020003F7, 0x00003329, 0x030003F9, 0x0000332A, + 0x030003FC, 0x0000332B, 0x050003FF, 0x0000332C, + 0x03000404, 0x0000332D, 0x04000407, 0x0000332E, + 0x0500040B, 0x0000332F, 0x03000410, 0x00003330, + 0x02000413, 0x00003331, 0x02000415, 0x00003332, + 0x05000417, 0x00003333, 0x0400041C, 0x00003334, + 0x05000420, 0x00003335, 0x03000425, 0x00003336, + 0x05000428, 0x00003337, 0x0200042D, 0x00003338, + 0x0300042F, 0x00003339, 0x03000432, 0x0000333A, + 0x03000435, 0x0000333B, 0x03000438, 0x0000333C, + 0x0300043B, 0x0000333D, 0x0400043E, 0x0000333E, + 0x03000442, 0x0000333F, 0x02000445, 0x00003340, + 0x03000447, 0x00003341, 0x0300044A, 0x00003342, + 0x0300044D, 0x00003343, 0x04000450, 0x00003344, + 0x03000454, 0x00003345, 0x03000457, 0x00003346, + 0x0300045A, 0x00003347, 0x0500045D, 0x00003348, + 0x04000462, 0x00003349, 0x02000466, 0x0000334A, + 0x05000468, 0x0000334B, 0x0200046D, 0x0000334C, + 0x0400046F, 0x0000334D, 0x04000473, 0x0000334E, + 0x03000477, 0x0000334F, 0x0300047A, 0x00003350, + 0x0300047D, 0x00003351, 0x04000480, 0x00003352, + 0x02000484, 0x00003353, 0x03000486, 0x00003354, + 0x04000489, 0x00003355, 0x0200048D, 0x00003356, + 0x0500048F, 0x00003357, 0x03000494, 0x00003358, + 0x02000497, 0x00003359, 0x02000499, 0x0000335A, + 0x0200049B, 0x0000335B, 0x0200049D, 0x0000335C, + 0x0200049F, 0x0000335D, 0x020004A1, 0x0000335E, + 0x020004A3, 0x0000335F, 0x020004A5, 0x00003360, + 0x020004A7, 0x00003361, 0x020004A9, 0x00003362, + 0x030004AB, 0x00003363, 0x030004AE, 0x00003364, + 0x030004B1, 0x00003365, 0x030004B4, 0x00003366, + 0x030004B7, 0x00003367, 0x030004BA, 0x00003368, + 0x030004BD, 0x00003369, 0x030004C0, 0x0000336A, + 0x030004C3, 0x0000336B, 0x030004C6, 0x0000336C, + 0x030004C9, 0x0000336D, 0x030004CC, 0x0000336E, + 0x030004CF, 0x0000336F, 0x030004D2, 0x00003370, + 0x030004D5, 0x00003371, 0x030004D8, 0x00003372, + 0x020004DB, 0x00003373, 0x020004DD, 0x00003374, + 0x030004DF, 0x00003375, 0x020004E2, 0x00003376, + 0x020004E4, 0x00003377, 0x020004E6, 0x00003378, + 0x030004E8, 0x00003379, 0x030004EB, 0x0000337A, + 0x020004EE, 0x0000337B, 0x020004F0, 0x0000337C, + 0x020004F2, 0x0000337D, 0x020004F4, 0x0000337E, + 0x020004F6, 0x0000337F, 0x040004F8, 0x00003380, + 0x020004FC, 0x00003381, 0x020004FE, 0x00003382, + 0x02000500, 0x00003383, 0x02000502, 0x00003384, + 0x02000504, 0x00003385, 0x02000506, 0x00003386, + 0x02000508, 0x00003387, 0x0200050A, 0x00003388, + 0x0300050C, 0x00003389, 0x0400050F, 0x0000338A, + 0x02000513, 0x0000338B, 0x02000515, 0x0000338C, + 0x02000517, 0x0000338D, 0x02000519, 0x0000338E, + 0x0200051B, 0x0000338F, 0x0200051D, 0x00003390, + 0x0200051F, 0x00003391, 0x03000521, 0x00003392, + 0x03000524, 0x00003393, 0x03000527, 0x00003394, + 0x0300052A, 0x00003395, 0x0200052D, 0x00003396, + 0x0200052F, 0x00003397, 0x02000531, 0x00003398, + 0x02000533, 0x00003399, 0x02000535, 0x0000339A, + 0x02000537, 0x0000339B, 0x02000539, 0x0000339C, + 0x0200053B, 0x0000339D, 0x0200053D, 0x0000339E, + 0x0200053F, 0x0000339F, 0x03000541, 0x000033A0, + 0x03000544, 0x000033A1, 0x02000547, 0x000033A2, + 0x03000549, 0x000033A3, 0x0300054C, 0x000033A4, + 0x0300054F, 0x000033A5, 0x02000552, 0x000033A6, + 0x03000554, 0x000033A7, 0x03000557, 0x000033A8, + 0x0400055A, 0x000033A9, 0x0200055E, 0x000033AA, + 0x03000560, 0x000033AB, 0x03000563, 0x000033AC, + 0x03000566, 0x000033AD, 0x03000569, 0x000033AE, + 0x0500056C, 0x000033AF, 0x06000571, 0x000033B0, + 0x02000577, 0x000033B1, 0x02000579, 0x000033B2, + 0x0200057B, 0x000033B3, 0x0200057D, 0x000033B4, + 0x0200057F, 0x000033B5, 0x02000581, 0x000033B6, + 0x02000583, 0x000033B7, 0x02000585, 0x000033B8, + 0x02000587, 0x000033B9, 0x02000589, 0x000033BA, + 0x0200058B, 0x000033BB, 0x0200058D, 0x000033BC, + 0x0200058F, 0x000033BD, 0x02000591, 0x000033BE, + 0x02000593, 0x000033BF, 0x02000595, 0x000033C0, + 0x02000597, 0x000033C1, 0x02000599, 0x000033C2, + 0x0400059B, 0x000033C3, 0x0200059F, 0x000033C4, + 0x020005A1, 0x000033C5, 0x020005A3, 0x000033C6, + 0x040005A5, 0x000033C7, 0x030005A9, 0x000033C8, + 0x020005AC, 0x000033C9, 0x020005AE, 0x000033CA, + 0x020005B0, 0x000033CB, 0x020005B2, 0x000033CC, + 0x020005B4, 0x000033CD, 0x020005B6, 0x000033CE, + 0x020005B8, 0x000033CF, 0x020005BA, 0x000033D0, + 0x020005BC, 0x000033D1, 0x020005BE, 0x000033D2, + 0x030005C0, 0x000033D3, 0x020005C3, 0x000033D4, + 0x020005C5, 0x000033D5, 0x030005C7, 0x000033D6, + 0x030005CA, 0x000033D7, 0x020005CD, 0x000033D8, + 0x040005CF, 0x000033D9, 0x030005D3, 0x000033DA, + 0x020005D6, 0x000033DB, 0x020005D8, 0x000033DC, + 0x020005DA, 0x000033DD, 0x020005DC, 0x000033DE, + 0x030005DE, 0x000033DF, 0x030005E1, 0x000033E0, + 0x020005E4, 0x000033E1, 0x020005E6, 0x000033E2, + 0x020005E8, 0x000033E3, 0x020005EA, 0x000033E4, + 0x020005EC, 0x000033E5, 0x020005EE, 0x000033E6, + 0x020005F0, 0x000033E7, 0x020005F2, 0x000033E8, + 0x020005F4, 0x000033E9, 0x030005F6, 0x000033EA, + 0x030005F9, 0x000033EB, 0x030005FC, 0x000033EC, + 0x030005FF, 0x000033ED, 0x03000602, 0x000033EE, + 0x03000605, 0x000033EF, 0x03000608, 0x000033F0, + 0x0300060B, 0x000033F1, 0x0300060E, 0x000033F2, + 0x03000611, 0x000033F3, 0x03000614, 0x000033F4, + 0x03000617, 0x000033F5, 0x0300061A, 0x000033F6, + 0x0300061D, 0x000033F7, 0x03000620, 0x000033F8, + 0x03000623, 0x000033F9, 0x03000626, 0x000033FA, + 0x03000629, 0x000033FB, 0x0300062C, 0x000033FC, + 0x0300062F, 0x000033FD, 0x03000632, 0x000033FE, + 0x03000635, 0x000033FF, 0x03000638, 0x0000A69C, + 0x0100044A, 0x0000A69D, 0x0100044C, 0x0000A770, + 0x0100A76F, 0x0000A7F2, 0x01000043, 0x0000A7F3, + 0x01000046, 0x0000A7F4, 0x01000051, 0x0000A7F8, + 0x01000126, 0x0000A7F9, 0x01000153, 0x0000AB5C, + 0x0100A727, 0x0000AB5D, 0x0100AB37, 0x0000AB5E, + 0x0100026B, 0x0000AB5F, 0x0100AB52, 0x0000AB69, + 0x0100028D, 0x0000FB00, 0x0200063B, 0x0000FB01, + 0x0200063D, 0x0000FB02, 0x0200063F, 0x0000FB03, + 0x03000641, 0x0000FB04, 0x03000644, 0x0000FB05, + 0x42000647, 0x0000FB06, 0x02000649, 0x0000FB13, + 0x0200064B, 0x0000FB14, 0x0200064D, 0x0000FB15, + 0x0200064F, 0x0000FB16, 0x02000651, 0x0000FB17, + 0x02000653, 0x0000FB20, 0x010005E2, 0x0000FB21, + 0x010005D0, 0x0000FB22, 0x010005D3, 0x0000FB23, + 0x010005D4, 0x0000FB24, 0x010005DB, 0x0000FB25, + 0x010005DC, 0x0000FB26, 0x010005DD, 0x0000FB27, + 0x010005E8, 0x0000FB28, 0x010005EA, 0x0000FB29, + 0x0100002B, 0x0000FB4F, 0x02000655, 0x0000FB50, + 0x01000671, 0x0000FB51, 0x01000671, 0x0000FB52, + 0x0100067B, 0x0000FB53, 0x0100067B, 0x0000FB54, + 0x0100067B, 0x0000FB55, 0x0100067B, 0x0000FB56, + 0x0100067E, 0x0000FB57, 0x0100067E, 0x0000FB58, + 0x0100067E, 0x0000FB59, 0x0100067E, 0x0000FB5A, + 0x01000680, 0x0000FB5B, 0x01000680, 0x0000FB5C, + 0x01000680, 0x0000FB5D, 0x01000680, 0x0000FB5E, + 0x0100067A, 0x0000FB5F, 0x0100067A, 0x0000FB60, + 0x0100067A, 0x0000FB61, 0x0100067A, 0x0000FB62, + 0x0100067F, 0x0000FB63, 0x0100067F, 0x0000FB64, + 0x0100067F, 0x0000FB65, 0x0100067F, 0x0000FB66, + 0x01000679, 0x0000FB67, 0x01000679, 0x0000FB68, + 0x01000679, 0x0000FB69, 0x01000679, 0x0000FB6A, + 0x010006A4, 0x0000FB6B, 0x010006A4, 0x0000FB6C, + 0x010006A4, 0x0000FB6D, 0x010006A4, 0x0000FB6E, + 0x010006A6, 0x0000FB6F, 0x010006A6, 0x0000FB70, + 0x010006A6, 0x0000FB71, 0x010006A6, 0x0000FB72, + 0x01000684, 0x0000FB73, 0x01000684, 0x0000FB74, + 0x01000684, 0x0000FB75, 0x01000684, 0x0000FB76, + 0x01000683, 0x0000FB77, 0x01000683, 0x0000FB78, + 0x01000683, 0x0000FB79, 0x01000683, 0x0000FB7A, + 0x01000686, 0x0000FB7B, 0x01000686, 0x0000FB7C, + 0x01000686, 0x0000FB7D, 0x01000686, 0x0000FB7E, + 0x01000687, 0x0000FB7F, 0x01000687, 0x0000FB80, + 0x01000687, 0x0000FB81, 0x01000687, 0x0000FB82, + 0x0100068D, 0x0000FB83, 0x0100068D, 0x0000FB84, + 0x0100068C, 0x0000FB85, 0x0100068C, 0x0000FB86, + 0x0100068E, 0x0000FB87, 0x0100068E, 0x0000FB88, + 0x01000688, 0x0000FB89, 0x01000688, 0x0000FB8A, + 0x01000698, 0x0000FB8B, 0x01000698, 0x0000FB8C, + 0x01000691, 0x0000FB8D, 0x01000691, 0x0000FB8E, + 0x010006A9, 0x0000FB8F, 0x010006A9, 0x0000FB90, + 0x010006A9, 0x0000FB91, 0x010006A9, 0x0000FB92, + 0x010006AF, 0x0000FB93, 0x010006AF, 0x0000FB94, + 0x010006AF, 0x0000FB95, 0x010006AF, 0x0000FB96, + 0x010006B3, 0x0000FB97, 0x010006B3, 0x0000FB98, + 0x010006B3, 0x0000FB99, 0x010006B3, 0x0000FB9A, + 0x010006B1, 0x0000FB9B, 0x010006B1, 0x0000FB9C, + 0x010006B1, 0x0000FB9D, 0x010006B1, 0x0000FB9E, + 0x010006BA, 0x0000FB9F, 0x010006BA, 0x0000FBA0, + 0x010006BB, 0x0000FBA1, 0x010006BB, 0x0000FBA2, + 0x010006BB, 0x0000FBA3, 0x010006BB, 0x0000FBA4, + 0x010006C0, 0x0000FBA5, 0x010006C0, 0x0000FBA6, + 0x010006C1, 0x0000FBA7, 0x010006C1, 0x0000FBA8, + 0x010006C1, 0x0000FBA9, 0x010006C1, 0x0000FBAA, + 0x010006BE, 0x0000FBAB, 0x010006BE, 0x0000FBAC, + 0x010006BE, 0x0000FBAD, 0x010006BE, 0x0000FBAE, + 0x010006D2, 0x0000FBAF, 0x010006D2, 0x0000FBB0, + 0x010006D3, 0x0000FBB1, 0x010006D3, 0x0000FBD3, + 0x010006AD, 0x0000FBD4, 0x010006AD, 0x0000FBD5, + 0x010006AD, 0x0000FBD6, 0x010006AD, 0x0000FBD7, + 0x010006C7, 0x0000FBD8, 0x010006C7, 0x0000FBD9, + 0x010006C6, 0x0000FBDA, 0x010006C6, 0x0000FBDB, + 0x010006C8, 0x0000FBDC, 0x010006C8, 0x0000FBDD, + 0x41000677, 0x0000FBDE, 0x010006CB, 0x0000FBDF, + 0x010006CB, 0x0000FBE0, 0x010006C5, 0x0000FBE1, + 0x010006C5, 0x0000FBE2, 0x010006C9, 0x0000FBE3, + 0x010006C9, 0x0000FBE4, 0x010006D0, 0x0000FBE5, + 0x010006D0, 0x0000FBE6, 0x010006D0, 0x0000FBE7, + 0x010006D0, 0x0000FBE8, 0x01000649, 0x0000FBE9, + 0x01000649, 0x0000FBEA, 0x02000657, 0x0000FBEB, + 0x02000659, 0x0000FBEC, 0x0200065B, 0x0000FBED, + 0x0200065D, 0x0000FBEE, 0x0200065F, 0x0000FBEF, + 0x02000661, 0x0000FBF0, 0x02000663, 0x0000FBF1, + 0x02000665, 0x0000FBF2, 0x02000667, 0x0000FBF3, + 0x02000669, 0x0000FBF4, 0x0200066B, 0x0000FBF5, + 0x0200066D, 0x0000FBF6, 0x0200066F, 0x0000FBF7, + 0x02000671, 0x0000FBF8, 0x02000673, 0x0000FBF9, + 0x02000675, 0x0000FBFA, 0x02000677, 0x0000FBFB, + 0x02000679, 0x0000FBFC, 0x010006CC, 0x0000FBFD, + 0x010006CC, 0x0000FBFE, 0x010006CC, 0x0000FBFF, + 0x010006CC, 0x0000FC00, 0x0200067B, 0x0000FC01, + 0x0200067D, 0x0000FC02, 0x0200067F, 0x0000FC03, + 0x02000681, 0x0000FC04, 0x02000683, 0x0000FC05, + 0x02000685, 0x0000FC06, 0x02000687, 0x0000FC07, + 0x02000689, 0x0000FC08, 0x0200068B, 0x0000FC09, + 0x0200068D, 0x0000FC0A, 0x0200068F, 0x0000FC0B, + 0x02000691, 0x0000FC0C, 0x02000693, 0x0000FC0D, + 0x02000695, 0x0000FC0E, 0x02000697, 0x0000FC0F, + 0x02000699, 0x0000FC10, 0x0200069B, 0x0000FC11, + 0x0200069D, 0x0000FC12, 0x0200069F, 0x0000FC13, + 0x020006A1, 0x0000FC14, 0x020006A3, 0x0000FC15, + 0x020006A5, 0x0000FC16, 0x020006A7, 0x0000FC17, + 0x020006A9, 0x0000FC18, 0x020006AB, 0x0000FC19, + 0x020006AD, 0x0000FC1A, 0x020006AF, 0x0000FC1B, + 0x020006B1, 0x0000FC1C, 0x020006B3, 0x0000FC1D, + 0x020006B5, 0x0000FC1E, 0x020006B7, 0x0000FC1F, + 0x020006B9, 0x0000FC20, 0x020006BB, 0x0000FC21, + 0x020006BD, 0x0000FC22, 0x020006BF, 0x0000FC23, + 0x020006C1, 0x0000FC24, 0x020006C3, 0x0000FC25, + 0x020006C5, 0x0000FC26, 0x020006C7, 0x0000FC27, + 0x020006C9, 0x0000FC28, 0x020006CB, 0x0000FC29, + 0x020006CD, 0x0000FC2A, 0x020006CF, 0x0000FC2B, + 0x020006D1, 0x0000FC2C, 0x020006D3, 0x0000FC2D, + 0x020006D5, 0x0000FC2E, 0x020006D7, 0x0000FC2F, + 0x020006D9, 0x0000FC30, 0x020006DB, 0x0000FC31, + 0x020006DD, 0x0000FC32, 0x020006DF, 0x0000FC33, + 0x020006E1, 0x0000FC34, 0x020006E3, 0x0000FC35, + 0x020006E5, 0x0000FC36, 0x020006E7, 0x0000FC37, + 0x020006E9, 0x0000FC38, 0x020006EB, 0x0000FC39, + 0x020006ED, 0x0000FC3A, 0x020006EF, 0x0000FC3B, + 0x020006F1, 0x0000FC3C, 0x020006F3, 0x0000FC3D, + 0x020006F5, 0x0000FC3E, 0x020006F7, 0x0000FC3F, + 0x020006F9, 0x0000FC40, 0x020006FB, 0x0000FC41, + 0x020006FD, 0x0000FC42, 0x020006FF, 0x0000FC43, + 0x02000701, 0x0000FC44, 0x02000703, 0x0000FC45, + 0x02000705, 0x0000FC46, 0x02000707, 0x0000FC47, + 0x02000709, 0x0000FC48, 0x0200070B, 0x0000FC49, + 0x0200070D, 0x0000FC4A, 0x0200070F, 0x0000FC4B, + 0x02000711, 0x0000FC4C, 0x02000713, 0x0000FC4D, + 0x02000715, 0x0000FC4E, 0x02000717, 0x0000FC4F, + 0x02000719, 0x0000FC50, 0x0200071B, 0x0000FC51, + 0x0200071D, 0x0000FC52, 0x0200071F, 0x0000FC53, + 0x02000721, 0x0000FC54, 0x02000723, 0x0000FC55, + 0x02000725, 0x0000FC56, 0x02000727, 0x0000FC57, + 0x02000729, 0x0000FC58, 0x0200072B, 0x0000FC59, + 0x0200072D, 0x0000FC5A, 0x0200072F, 0x0000FC5B, + 0x02000731, 0x0000FC5C, 0x02000733, 0x0000FC5D, + 0x02000735, 0x0000FC5E, 0x03000737, 0x0000FC5F, + 0x0300073A, 0x0000FC60, 0x0300073D, 0x0000FC61, + 0x03000740, 0x0000FC62, 0x03000743, 0x0000FC63, + 0x03000746, 0x0000FC64, 0x02000749, 0x0000FC65, + 0x0200074B, 0x0000FC66, 0x0200074D, 0x0000FC67, + 0x0200074F, 0x0000FC68, 0x02000751, 0x0000FC69, + 0x02000753, 0x0000FC6A, 0x02000755, 0x0000FC6B, + 0x02000757, 0x0000FC6C, 0x02000759, 0x0000FC6D, + 0x0200075B, 0x0000FC6E, 0x0200075D, 0x0000FC6F, + 0x0200075F, 0x0000FC70, 0x02000761, 0x0000FC71, + 0x02000763, 0x0000FC72, 0x02000765, 0x0000FC73, + 0x02000767, 0x0000FC74, 0x02000769, 0x0000FC75, + 0x0200076B, 0x0000FC76, 0x0200076D, 0x0000FC77, + 0x0200076F, 0x0000FC78, 0x02000771, 0x0000FC79, + 0x02000773, 0x0000FC7A, 0x02000775, 0x0000FC7B, + 0x02000777, 0x0000FC7C, 0x02000779, 0x0000FC7D, + 0x0200077B, 0x0000FC7E, 0x0200077D, 0x0000FC7F, + 0x0200077F, 0x0000FC80, 0x02000781, 0x0000FC81, + 0x02000783, 0x0000FC82, 0x02000785, 0x0000FC83, + 0x02000787, 0x0000FC84, 0x02000789, 0x0000FC85, + 0x0200078B, 0x0000FC86, 0x0200078D, 0x0000FC87, + 0x0200078F, 0x0000FC88, 0x02000791, 0x0000FC89, + 0x02000793, 0x0000FC8A, 0x02000795, 0x0000FC8B, + 0x02000797, 0x0000FC8C, 0x02000799, 0x0000FC8D, + 0x0200079B, 0x0000FC8E, 0x0200079D, 0x0000FC8F, + 0x0200079F, 0x0000FC90, 0x020007A1, 0x0000FC91, + 0x020007A3, 0x0000FC92, 0x020007A5, 0x0000FC93, + 0x020007A7, 0x0000FC94, 0x020007A9, 0x0000FC95, + 0x020007AB, 0x0000FC96, 0x020007AD, 0x0000FC97, + 0x020007AF, 0x0000FC98, 0x020007B1, 0x0000FC99, + 0x020007B3, 0x0000FC9A, 0x020007B5, 0x0000FC9B, + 0x020007B7, 0x0000FC9C, 0x020007B9, 0x0000FC9D, + 0x020007BB, 0x0000FC9E, 0x020007BD, 0x0000FC9F, + 0x020007BF, 0x0000FCA0, 0x020007C1, 0x0000FCA1, + 0x020007C3, 0x0000FCA2, 0x020007C5, 0x0000FCA3, + 0x020007C7, 0x0000FCA4, 0x020007C9, 0x0000FCA5, + 0x020007CB, 0x0000FCA6, 0x020007CD, 0x0000FCA7, + 0x020007CF, 0x0000FCA8, 0x020007D1, 0x0000FCA9, + 0x020007D3, 0x0000FCAA, 0x020007D5, 0x0000FCAB, + 0x020007D7, 0x0000FCAC, 0x020007D9, 0x0000FCAD, + 0x020007DB, 0x0000FCAE, 0x020007DD, 0x0000FCAF, + 0x020007DF, 0x0000FCB0, 0x020007E1, 0x0000FCB1, + 0x020007E3, 0x0000FCB2, 0x020007E5, 0x0000FCB3, + 0x020007E7, 0x0000FCB4, 0x020007E9, 0x0000FCB5, + 0x020007EB, 0x0000FCB6, 0x020007ED, 0x0000FCB7, + 0x020007EF, 0x0000FCB8, 0x020007F1, 0x0000FCB9, + 0x020007F3, 0x0000FCBA, 0x020007F5, 0x0000FCBB, + 0x020007F7, 0x0000FCBC, 0x020007F9, 0x0000FCBD, + 0x020007FB, 0x0000FCBE, 0x020007FD, 0x0000FCBF, + 0x020007FF, 0x0000FCC0, 0x02000801, 0x0000FCC1, + 0x02000803, 0x0000FCC2, 0x02000805, 0x0000FCC3, + 0x02000807, 0x0000FCC4, 0x02000809, 0x0000FCC5, + 0x0200080B, 0x0000FCC6, 0x0200080D, 0x0000FCC7, + 0x0200080F, 0x0000FCC8, 0x02000811, 0x0000FCC9, + 0x02000813, 0x0000FCCA, 0x02000815, 0x0000FCCB, + 0x02000817, 0x0000FCCC, 0x02000819, 0x0000FCCD, + 0x0200081B, 0x0000FCCE, 0x0200081D, 0x0000FCCF, + 0x0200081F, 0x0000FCD0, 0x02000821, 0x0000FCD1, + 0x02000823, 0x0000FCD2, 0x02000825, 0x0000FCD3, + 0x02000827, 0x0000FCD4, 0x02000829, 0x0000FCD5, + 0x0200082B, 0x0000FCD6, 0x0200082D, 0x0000FCD7, + 0x0200082F, 0x0000FCD8, 0x02000831, 0x0000FCD9, + 0x02000833, 0x0000FCDA, 0x02000835, 0x0000FCDB, + 0x02000837, 0x0000FCDC, 0x02000839, 0x0000FCDD, + 0x0200083B, 0x0000FCDE, 0x0200083D, 0x0000FCDF, + 0x0200083F, 0x0000FCE0, 0x02000841, 0x0000FCE1, + 0x02000843, 0x0000FCE2, 0x02000845, 0x0000FCE3, + 0x02000847, 0x0000FCE4, 0x02000849, 0x0000FCE5, + 0x0200084B, 0x0000FCE6, 0x0200084D, 0x0000FCE7, + 0x0200084F, 0x0000FCE8, 0x02000851, 0x0000FCE9, + 0x02000853, 0x0000FCEA, 0x02000855, 0x0000FCEB, + 0x02000857, 0x0000FCEC, 0x02000859, 0x0000FCED, + 0x0200085B, 0x0000FCEE, 0x0200085D, 0x0000FCEF, + 0x0200085F, 0x0000FCF0, 0x02000861, 0x0000FCF1, + 0x02000863, 0x0000FCF2, 0x03000865, 0x0000FCF3, + 0x03000868, 0x0000FCF4, 0x0300086B, 0x0000FCF5, + 0x0200086E, 0x0000FCF6, 0x02000870, 0x0000FCF7, + 0x02000872, 0x0000FCF8, 0x02000874, 0x0000FCF9, + 0x02000876, 0x0000FCFA, 0x02000878, 0x0000FCFB, + 0x0200087A, 0x0000FCFC, 0x0200087C, 0x0000FCFD, + 0x0200087E, 0x0000FCFE, 0x02000880, 0x0000FCFF, + 0x02000882, 0x0000FD00, 0x02000884, 0x0000FD01, + 0x02000886, 0x0000FD02, 0x02000888, 0x0000FD03, + 0x0200088A, 0x0000FD04, 0x0200088C, 0x0000FD05, + 0x0200088E, 0x0000FD06, 0x02000890, 0x0000FD07, + 0x02000892, 0x0000FD08, 0x02000894, 0x0000FD09, + 0x02000896, 0x0000FD0A, 0x02000898, 0x0000FD0B, + 0x0200089A, 0x0000FD0C, 0x0200089C, 0x0000FD0D, + 0x0200089E, 0x0000FD0E, 0x020008A0, 0x0000FD0F, + 0x020008A2, 0x0000FD10, 0x020008A4, 0x0000FD11, + 0x020008A6, 0x0000FD12, 0x020008A8, 0x0000FD13, + 0x020008AA, 0x0000FD14, 0x020008AC, 0x0000FD15, + 0x020008AE, 0x0000FD16, 0x020008B0, 0x0000FD17, + 0x020008B2, 0x0000FD18, 0x020008B4, 0x0000FD19, + 0x020008B6, 0x0000FD1A, 0x020008B8, 0x0000FD1B, + 0x020008BA, 0x0000FD1C, 0x020008BC, 0x0000FD1D, + 0x020008BE, 0x0000FD1E, 0x020008C0, 0x0000FD1F, + 0x020008C2, 0x0000FD20, 0x020008C4, 0x0000FD21, + 0x020008C6, 0x0000FD22, 0x020008C8, 0x0000FD23, + 0x020008CA, 0x0000FD24, 0x020008CC, 0x0000FD25, + 0x020008CE, 0x0000FD26, 0x020008D0, 0x0000FD27, + 0x020008D2, 0x0000FD28, 0x020008D4, 0x0000FD29, + 0x020008D6, 0x0000FD2A, 0x020008D8, 0x0000FD2B, + 0x020008DA, 0x0000FD2C, 0x020008DC, 0x0000FD2D, + 0x020008DE, 0x0000FD2E, 0x020008E0, 0x0000FD2F, + 0x020008E2, 0x0000FD30, 0x020008E4, 0x0000FD31, + 0x020008E6, 0x0000FD32, 0x020008E8, 0x0000FD33, + 0x020008EA, 0x0000FD34, 0x020008EC, 0x0000FD35, + 0x020008EE, 0x0000FD36, 0x020008F0, 0x0000FD37, + 0x020008F2, 0x0000FD38, 0x020008F4, 0x0000FD39, + 0x020008F6, 0x0000FD3A, 0x020008F8, 0x0000FD3B, + 0x020008FA, 0x0000FD3C, 0x020008FC, 0x0000FD3D, + 0x020008FE, 0x0000FD50, 0x03000900, 0x0000FD51, + 0x03000903, 0x0000FD52, 0x03000906, 0x0000FD53, + 0x03000909, 0x0000FD54, 0x0300090C, 0x0000FD55, + 0x0300090F, 0x0000FD56, 0x03000912, 0x0000FD57, + 0x03000915, 0x0000FD58, 0x03000918, 0x0000FD59, + 0x0300091B, 0x0000FD5A, 0x0300091E, 0x0000FD5B, + 0x03000921, 0x0000FD5C, 0x03000924, 0x0000FD5D, + 0x03000927, 0x0000FD5E, 0x0300092A, 0x0000FD5F, + 0x0300092D, 0x0000FD60, 0x03000930, 0x0000FD61, + 0x03000933, 0x0000FD62, 0x03000936, 0x0000FD63, + 0x03000939, 0x0000FD64, 0x0300093C, 0x0000FD65, + 0x0300093F, 0x0000FD66, 0x03000942, 0x0000FD67, + 0x03000945, 0x0000FD68, 0x03000948, 0x0000FD69, + 0x0300094B, 0x0000FD6A, 0x0300094E, 0x0000FD6B, + 0x03000951, 0x0000FD6C, 0x03000954, 0x0000FD6D, + 0x03000957, 0x0000FD6E, 0x0300095A, 0x0000FD6F, + 0x0300095D, 0x0000FD70, 0x03000960, 0x0000FD71, + 0x03000963, 0x0000FD72, 0x03000966, 0x0000FD73, + 0x03000969, 0x0000FD74, 0x0300096C, 0x0000FD75, + 0x0300096F, 0x0000FD76, 0x03000972, 0x0000FD77, + 0x03000975, 0x0000FD78, 0x03000978, 0x0000FD79, + 0x0300097B, 0x0000FD7A, 0x0300097E, 0x0000FD7B, + 0x03000981, 0x0000FD7C, 0x03000984, 0x0000FD7D, + 0x03000987, 0x0000FD7E, 0x0300098A, 0x0000FD7F, + 0x0300098D, 0x0000FD80, 0x03000990, 0x0000FD81, + 0x03000993, 0x0000FD82, 0x03000996, 0x0000FD83, + 0x03000999, 0x0000FD84, 0x0300099C, 0x0000FD85, + 0x0300099F, 0x0000FD86, 0x030009A2, 0x0000FD87, + 0x030009A5, 0x0000FD88, 0x030009A8, 0x0000FD89, + 0x030009AB, 0x0000FD8A, 0x030009AE, 0x0000FD8B, + 0x030009B1, 0x0000FD8C, 0x030009B4, 0x0000FD8D, + 0x030009B7, 0x0000FD8E, 0x030009BA, 0x0000FD8F, + 0x030009BD, 0x0000FD92, 0x030009C0, 0x0000FD93, + 0x030009C3, 0x0000FD94, 0x030009C6, 0x0000FD95, + 0x030009C9, 0x0000FD96, 0x030009CC, 0x0000FD97, + 0x030009CF, 0x0000FD98, 0x030009D2, 0x0000FD99, + 0x030009D5, 0x0000FD9A, 0x030009D8, 0x0000FD9B, + 0x030009DB, 0x0000FD9C, 0x030009DE, 0x0000FD9D, + 0x030009E1, 0x0000FD9E, 0x030009E4, 0x0000FD9F, + 0x030009E7, 0x0000FDA0, 0x030009EA, 0x0000FDA1, + 0x030009ED, 0x0000FDA2, 0x030009F0, 0x0000FDA3, + 0x030009F3, 0x0000FDA4, 0x030009F6, 0x0000FDA5, + 0x030009F9, 0x0000FDA6, 0x030009FC, 0x0000FDA7, + 0x030009FF, 0x0000FDA8, 0x03000A02, 0x0000FDA9, + 0x03000A05, 0x0000FDAA, 0x03000A08, 0x0000FDAB, + 0x03000A0B, 0x0000FDAC, 0x03000A0E, 0x0000FDAD, + 0x03000A11, 0x0000FDAE, 0x03000A14, 0x0000FDAF, + 0x03000A17, 0x0000FDB0, 0x03000A1A, 0x0000FDB1, + 0x03000A1D, 0x0000FDB2, 0x03000A20, 0x0000FDB3, + 0x03000A23, 0x0000FDB4, 0x03000A26, 0x0000FDB5, + 0x03000A29, 0x0000FDB6, 0x03000A2C, 0x0000FDB7, + 0x03000A2F, 0x0000FDB8, 0x03000A32, 0x0000FDB9, + 0x03000A35, 0x0000FDBA, 0x03000A38, 0x0000FDBB, + 0x03000A3B, 0x0000FDBC, 0x03000A3E, 0x0000FDBD, + 0x03000A41, 0x0000FDBE, 0x03000A44, 0x0000FDBF, + 0x03000A47, 0x0000FDC0, 0x03000A4A, 0x0000FDC1, + 0x03000A4D, 0x0000FDC2, 0x03000A50, 0x0000FDC3, + 0x03000A53, 0x0000FDC4, 0x03000A56, 0x0000FDC5, + 0x03000A59, 0x0000FDC6, 0x03000A5C, 0x0000FDC7, + 0x03000A5F, 0x0000FDF0, 0x03000A62, 0x0000FDF1, + 0x03000A65, 0x0000FDF2, 0x04000A68, 0x0000FDF3, + 0x04000A6C, 0x0000FDF4, 0x04000A70, 0x0000FDF5, + 0x04000A74, 0x0000FDF6, 0x04000A78, 0x0000FDF7, + 0x04000A7C, 0x0000FDF8, 0x04000A80, 0x0000FDF9, + 0x03000A84, 0x0000FDFA, 0x12000A87, 0x0000FDFB, + 0x08000A99, 0x0000FDFC, 0x04000AA1, 0x0000FE10, + 0x0100002C, 0x0000FE11, 0x01003001, 0x0000FE12, + 0x01003002, 0x0000FE13, 0x0100003A, 0x0000FE14, + 0x0100003B, 0x0000FE15, 0x01000021, 0x0000FE16, + 0x0100003F, 0x0000FE17, 0x01003016, 0x0000FE18, + 0x01003017, 0x0000FE19, 0x41002026, 0x0000FE30, + 0x41002025, 0x0000FE31, 0x01002014, 0x0000FE32, + 0x01002013, 0x0000FE33, 0x0100005F, 0x0000FE34, + 0x0100005F, 0x0000FE35, 0x01000028, 0x0000FE36, + 0x01000029, 0x0000FE37, 0x0100007B, 0x0000FE38, + 0x0100007D, 0x0000FE39, 0x01003014, 0x0000FE3A, + 0x01003015, 0x0000FE3B, 0x01003010, 0x0000FE3C, + 0x01003011, 0x0000FE3D, 0x0100300A, 0x0000FE3E, + 0x0100300B, 0x0000FE3F, 0x01003008, 0x0000FE40, + 0x01003009, 0x0000FE41, 0x0100300C, 0x0000FE42, + 0x0100300D, 0x0000FE43, 0x0100300E, 0x0000FE44, + 0x0100300F, 0x0000FE47, 0x0100005B, 0x0000FE48, + 0x0100005D, 0x0000FE49, 0x4100203E, 0x0000FE4A, + 0x4100203E, 0x0000FE4B, 0x4100203E, 0x0000FE4C, + 0x4100203E, 0x0000FE4D, 0x0100005F, 0x0000FE4E, + 0x0100005F, 0x0000FE4F, 0x0100005F, 0x0000FE50, + 0x0100002C, 0x0000FE51, 0x01003001, 0x0000FE52, + 0x0100002E, 0x0000FE54, 0x0100003B, 0x0000FE55, + 0x0100003A, 0x0000FE56, 0x0100003F, 0x0000FE57, + 0x01000021, 0x0000FE58, 0x01002014, 0x0000FE59, + 0x01000028, 0x0000FE5A, 0x01000029, 0x0000FE5B, + 0x0100007B, 0x0000FE5C, 0x0100007D, 0x0000FE5D, + 0x01003014, 0x0000FE5E, 0x01003015, 0x0000FE5F, + 0x01000023, 0x0000FE60, 0x01000026, 0x0000FE61, + 0x0100002A, 0x0000FE62, 0x0100002B, 0x0000FE63, + 0x0100002D, 0x0000FE64, 0x0100003C, 0x0000FE65, + 0x0100003E, 0x0000FE66, 0x0100003D, 0x0000FE68, + 0x0100005C, 0x0000FE69, 0x01000024, 0x0000FE6A, + 0x01000025, 0x0000FE6B, 0x01000040, 0x0000FE70, + 0x02000AA5, 0x0000FE71, 0x02000AA7, 0x0000FE72, + 0x02000AA9, 0x0000FE74, 0x02000AAB, 0x0000FE76, + 0x02000AAD, 0x0000FE77, 0x02000AAF, 0x0000FE78, + 0x02000AB1, 0x0000FE79, 0x02000AB3, 0x0000FE7A, + 0x02000AB5, 0x0000FE7B, 0x02000AB7, 0x0000FE7C, + 0x02000AB9, 0x0000FE7D, 0x02000ABB, 0x0000FE7E, + 0x02000ABD, 0x0000FE7F, 0x02000ABF, 0x0000FE80, + 0x01000621, 0x0000FE81, 0x01000622, 0x0000FE82, + 0x01000622, 0x0000FE83, 0x01000623, 0x0000FE84, + 0x01000623, 0x0000FE85, 0x01000624, 0x0000FE86, + 0x01000624, 0x0000FE87, 0x01000625, 0x0000FE88, + 0x01000625, 0x0000FE89, 0x01000626, 0x0000FE8A, + 0x01000626, 0x0000FE8B, 0x01000626, 0x0000FE8C, + 0x01000626, 0x0000FE8D, 0x01000627, 0x0000FE8E, + 0x01000627, 0x0000FE8F, 0x01000628, 0x0000FE90, + 0x01000628, 0x0000FE91, 0x01000628, 0x0000FE92, + 0x01000628, 0x0000FE93, 0x01000629, 0x0000FE94, + 0x01000629, 0x0000FE95, 0x0100062A, 0x0000FE96, + 0x0100062A, 0x0000FE97, 0x0100062A, 0x0000FE98, + 0x0100062A, 0x0000FE99, 0x0100062B, 0x0000FE9A, + 0x0100062B, 0x0000FE9B, 0x0100062B, 0x0000FE9C, + 0x0100062B, 0x0000FE9D, 0x0100062C, 0x0000FE9E, + 0x0100062C, 0x0000FE9F, 0x0100062C, 0x0000FEA0, + 0x0100062C, 0x0000FEA1, 0x0100062D, 0x0000FEA2, + 0x0100062D, 0x0000FEA3, 0x0100062D, 0x0000FEA4, + 0x0100062D, 0x0000FEA5, 0x0100062E, 0x0000FEA6, + 0x0100062E, 0x0000FEA7, 0x0100062E, 0x0000FEA8, + 0x0100062E, 0x0000FEA9, 0x0100062F, 0x0000FEAA, + 0x0100062F, 0x0000FEAB, 0x01000630, 0x0000FEAC, + 0x01000630, 0x0000FEAD, 0x01000631, 0x0000FEAE, + 0x01000631, 0x0000FEAF, 0x01000632, 0x0000FEB0, + 0x01000632, 0x0000FEB1, 0x01000633, 0x0000FEB2, + 0x01000633, 0x0000FEB3, 0x01000633, 0x0000FEB4, + 0x01000633, 0x0000FEB5, 0x01000634, 0x0000FEB6, + 0x01000634, 0x0000FEB7, 0x01000634, 0x0000FEB8, + 0x01000634, 0x0000FEB9, 0x01000635, 0x0000FEBA, + 0x01000635, 0x0000FEBB, 0x01000635, 0x0000FEBC, + 0x01000635, 0x0000FEBD, 0x01000636, 0x0000FEBE, + 0x01000636, 0x0000FEBF, 0x01000636, 0x0000FEC0, + 0x01000636, 0x0000FEC1, 0x01000637, 0x0000FEC2, + 0x01000637, 0x0000FEC3, 0x01000637, 0x0000FEC4, + 0x01000637, 0x0000FEC5, 0x01000638, 0x0000FEC6, + 0x01000638, 0x0000FEC7, 0x01000638, 0x0000FEC8, + 0x01000638, 0x0000FEC9, 0x01000639, 0x0000FECA, + 0x01000639, 0x0000FECB, 0x01000639, 0x0000FECC, + 0x01000639, 0x0000FECD, 0x0100063A, 0x0000FECE, + 0x0100063A, 0x0000FECF, 0x0100063A, 0x0000FED0, + 0x0100063A, 0x0000FED1, 0x01000641, 0x0000FED2, + 0x01000641, 0x0000FED3, 0x01000641, 0x0000FED4, + 0x01000641, 0x0000FED5, 0x01000642, 0x0000FED6, + 0x01000642, 0x0000FED7, 0x01000642, 0x0000FED8, + 0x01000642, 0x0000FED9, 0x01000643, 0x0000FEDA, + 0x01000643, 0x0000FEDB, 0x01000643, 0x0000FEDC, + 0x01000643, 0x0000FEDD, 0x01000644, 0x0000FEDE, + 0x01000644, 0x0000FEDF, 0x01000644, 0x0000FEE0, + 0x01000644, 0x0000FEE1, 0x01000645, 0x0000FEE2, + 0x01000645, 0x0000FEE3, 0x01000645, 0x0000FEE4, + 0x01000645, 0x0000FEE5, 0x01000646, 0x0000FEE6, + 0x01000646, 0x0000FEE7, 0x01000646, 0x0000FEE8, + 0x01000646, 0x0000FEE9, 0x01000647, 0x0000FEEA, + 0x01000647, 0x0000FEEB, 0x01000647, 0x0000FEEC, + 0x01000647, 0x0000FEED, 0x01000648, 0x0000FEEE, + 0x01000648, 0x0000FEEF, 0x01000649, 0x0000FEF0, + 0x01000649, 0x0000FEF1, 0x0100064A, 0x0000FEF2, + 0x0100064A, 0x0000FEF3, 0x0100064A, 0x0000FEF4, + 0x0100064A, 0x0000FEF5, 0x02000AC1, 0x0000FEF6, + 0x02000AC3, 0x0000FEF7, 0x02000AC5, 0x0000FEF8, + 0x02000AC7, 0x0000FEF9, 0x02000AC9, 0x0000FEFA, + 0x02000ACB, 0x0000FEFB, 0x02000ACD, 0x0000FEFC, + 0x02000ACF, 0x0000FF01, 0x01000021, 0x0000FF02, + 0x01000022, 0x0000FF03, 0x01000023, 0x0000FF04, + 0x01000024, 0x0000FF05, 0x01000025, 0x0000FF06, + 0x01000026, 0x0000FF07, 0x01000027, 0x0000FF08, + 0x01000028, 0x0000FF09, 0x01000029, 0x0000FF0A, + 0x0100002A, 0x0000FF0B, 0x0100002B, 0x0000FF0C, + 0x0100002C, 0x0000FF0D, 0x0100002D, 0x0000FF0E, + 0x0100002E, 0x0000FF0F, 0x0100002F, 0x0000FF10, + 0x01000030, 0x0000FF11, 0x01000031, 0x0000FF12, + 0x01000032, 0x0000FF13, 0x01000033, 0x0000FF14, + 0x01000034, 0x0000FF15, 0x01000035, 0x0000FF16, + 0x01000036, 0x0000FF17, 0x01000037, 0x0000FF18, + 0x01000038, 0x0000FF19, 0x01000039, 0x0000FF1A, + 0x0100003A, 0x0000FF1B, 0x0100003B, 0x0000FF1C, + 0x0100003C, 0x0000FF1D, 0x0100003D, 0x0000FF1E, + 0x0100003E, 0x0000FF1F, 0x0100003F, 0x0000FF20, + 0x01000040, 0x0000FF21, 0x01000041, 0x0000FF22, + 0x01000042, 0x0000FF23, 0x01000043, 0x0000FF24, + 0x01000044, 0x0000FF25, 0x01000045, 0x0000FF26, + 0x01000046, 0x0000FF27, 0x01000047, 0x0000FF28, + 0x01000048, 0x0000FF29, 0x01000049, 0x0000FF2A, + 0x0100004A, 0x0000FF2B, 0x0100004B, 0x0000FF2C, + 0x0100004C, 0x0000FF2D, 0x0100004D, 0x0000FF2E, + 0x0100004E, 0x0000FF2F, 0x0100004F, 0x0000FF30, + 0x01000050, 0x0000FF31, 0x01000051, 0x0000FF32, + 0x01000052, 0x0000FF33, 0x01000053, 0x0000FF34, + 0x01000054, 0x0000FF35, 0x01000055, 0x0000FF36, + 0x01000056, 0x0000FF37, 0x01000057, 0x0000FF38, + 0x01000058, 0x0000FF39, 0x01000059, 0x0000FF3A, + 0x0100005A, 0x0000FF3B, 0x0100005B, 0x0000FF3C, + 0x0100005C, 0x0000FF3D, 0x0100005D, 0x0000FF3E, + 0x0100005E, 0x0000FF3F, 0x0100005F, 0x0000FF40, + 0x01000060, 0x0000FF41, 0x01000061, 0x0000FF42, + 0x01000062, 0x0000FF43, 0x01000063, 0x0000FF44, + 0x01000064, 0x0000FF45, 0x01000065, 0x0000FF46, + 0x01000066, 0x0000FF47, 0x01000067, 0x0000FF48, + 0x01000068, 0x0000FF49, 0x01000069, 0x0000FF4A, + 0x0100006A, 0x0000FF4B, 0x0100006B, 0x0000FF4C, + 0x0100006C, 0x0000FF4D, 0x0100006D, 0x0000FF4E, + 0x0100006E, 0x0000FF4F, 0x0100006F, 0x0000FF50, + 0x01000070, 0x0000FF51, 0x01000071, 0x0000FF52, + 0x01000072, 0x0000FF53, 0x01000073, 0x0000FF54, + 0x01000074, 0x0000FF55, 0x01000075, 0x0000FF56, + 0x01000076, 0x0000FF57, 0x01000077, 0x0000FF58, + 0x01000078, 0x0000FF59, 0x01000079, 0x0000FF5A, + 0x0100007A, 0x0000FF5B, 0x0100007B, 0x0000FF5C, + 0x0100007C, 0x0000FF5D, 0x0100007D, 0x0000FF5E, + 0x0100007E, 0x0000FF5F, 0x01002985, 0x0000FF60, + 0x01002986, 0x0000FF61, 0x01003002, 0x0000FF62, + 0x0100300C, 0x0000FF63, 0x0100300D, 0x0000FF64, + 0x01003001, 0x0000FF65, 0x010030FB, 0x0000FF66, + 0x010030F2, 0x0000FF67, 0x010030A1, 0x0000FF68, + 0x010030A3, 0x0000FF69, 0x010030A5, 0x0000FF6A, + 0x010030A7, 0x0000FF6B, 0x010030A9, 0x0000FF6C, + 0x010030E3, 0x0000FF6D, 0x010030E5, 0x0000FF6E, + 0x010030E7, 0x0000FF6F, 0x010030C3, 0x0000FF70, + 0x010030FC, 0x0000FF71, 0x010030A2, 0x0000FF72, + 0x010030A4, 0x0000FF73, 0x010030A6, 0x0000FF74, + 0x010030A8, 0x0000FF75, 0x010030AA, 0x0000FF76, + 0x010030AB, 0x0000FF77, 0x010030AD, 0x0000FF78, + 0x010030AF, 0x0000FF79, 0x010030B1, 0x0000FF7A, + 0x010030B3, 0x0000FF7B, 0x010030B5, 0x0000FF7C, + 0x010030B7, 0x0000FF7D, 0x010030B9, 0x0000FF7E, + 0x010030BB, 0x0000FF7F, 0x010030BD, 0x0000FF80, + 0x010030BF, 0x0000FF81, 0x010030C1, 0x0000FF82, + 0x010030C4, 0x0000FF83, 0x010030C6, 0x0000FF84, + 0x010030C8, 0x0000FF85, 0x010030CA, 0x0000FF86, + 0x010030CB, 0x0000FF87, 0x010030CC, 0x0000FF88, + 0x010030CD, 0x0000FF89, 0x010030CE, 0x0000FF8A, + 0x010030CF, 0x0000FF8B, 0x010030D2, 0x0000FF8C, + 0x010030D5, 0x0000FF8D, 0x010030D8, 0x0000FF8E, + 0x010030DB, 0x0000FF8F, 0x010030DE, 0x0000FF90, + 0x010030DF, 0x0000FF91, 0x010030E0, 0x0000FF92, + 0x010030E1, 0x0000FF93, 0x010030E2, 0x0000FF94, + 0x010030E4, 0x0000FF95, 0x010030E6, 0x0000FF96, + 0x010030E8, 0x0000FF97, 0x010030E9, 0x0000FF98, + 0x010030EA, 0x0000FF99, 0x010030EB, 0x0000FF9A, + 0x010030EC, 0x0000FF9B, 0x010030ED, 0x0000FF9C, + 0x010030EF, 0x0000FF9D, 0x010030F3, 0x0000FF9E, + 0x01003099, 0x0000FF9F, 0x0100309A, 0x0000FFA0, + 0x41003164, 0x0000FFA1, 0x41003131, 0x0000FFA2, + 0x41003132, 0x0000FFA3, 0x41003133, 0x0000FFA4, + 0x41003134, 0x0000FFA5, 0x41003135, 0x0000FFA6, + 0x41003136, 0x0000FFA7, 0x41003137, 0x0000FFA8, + 0x41003138, 0x0000FFA9, 0x41003139, 0x0000FFAA, + 0x4100313A, 0x0000FFAB, 0x4100313B, 0x0000FFAC, + 0x4100313C, 0x0000FFAD, 0x4100313D, 0x0000FFAE, + 0x4100313E, 0x0000FFAF, 0x4100313F, 0x0000FFB0, + 0x41003140, 0x0000FFB1, 0x41003141, 0x0000FFB2, + 0x41003142, 0x0000FFB3, 0x41003143, 0x0000FFB4, + 0x41003144, 0x0000FFB5, 0x41003145, 0x0000FFB6, + 0x41003146, 0x0000FFB7, 0x41003147, 0x0000FFB8, + 0x41003148, 0x0000FFB9, 0x41003149, 0x0000FFBA, + 0x4100314A, 0x0000FFBB, 0x4100314B, 0x0000FFBC, + 0x4100314C, 0x0000FFBD, 0x4100314D, 0x0000FFBE, + 0x4100314E, 0x0000FFC2, 0x4100314F, 0x0000FFC3, + 0x41003150, 0x0000FFC4, 0x41003151, 0x0000FFC5, + 0x41003152, 0x0000FFC6, 0x41003153, 0x0000FFC7, + 0x41003154, 0x0000FFCA, 0x41003155, 0x0000FFCB, + 0x41003156, 0x0000FFCC, 0x41003157, 0x0000FFCD, + 0x41003158, 0x0000FFCE, 0x41003159, 0x0000FFCF, + 0x4100315A, 0x0000FFD2, 0x4100315B, 0x0000FFD3, + 0x4100315C, 0x0000FFD4, 0x4100315D, 0x0000FFD5, + 0x4100315E, 0x0000FFD6, 0x4100315F, 0x0000FFD7, + 0x41003160, 0x0000FFDA, 0x41003161, 0x0000FFDB, + 0x41003162, 0x0000FFDC, 0x41003163, 0x0000FFE0, + 0x010000A2, 0x0000FFE1, 0x010000A3, 0x0000FFE2, + 0x010000AC, 0x0000FFE3, 0x410000AF, 0x0000FFE4, + 0x010000A6, 0x0000FFE5, 0x010000A5, 0x0000FFE6, + 0x010020A9, 0x0000FFE8, 0x01002502, 0x0000FFE9, + 0x01002190, 0x0000FFEA, 0x01002191, 0x0000FFEB, + 0x01002192, 0x0000FFEC, 0x01002193, 0x0000FFED, + 0x010025A0, 0x0000FFEE, 0x010025CB, 0x00010781, + 0x010002D0, 0x00010782, 0x010002D1, 0x00010783, + 0x010000E6, 0x00010784, 0x01000299, 0x00010785, + 0x01000253, 0x00010787, 0x010002A3, 0x00010788, + 0x0100AB66, 0x00010789, 0x010002A5, 0x0001078A, + 0x010002A4, 0x0001078B, 0x01000256, 0x0001078C, + 0x01000257, 0x0001078D, 0x01001D91, 0x0001078E, + 0x01000258, 0x0001078F, 0x0100025E, 0x00010790, + 0x010002A9, 0x00010791, 0x01000264, 0x00010792, + 0x01000262, 0x00010793, 0x01000260, 0x00010794, + 0x0100029B, 0x00010795, 0x01000127, 0x00010796, + 0x0100029C, 0x00010797, 0x01000267, 0x00010798, + 0x01000284, 0x00010799, 0x010002AA, 0x0001079A, + 0x010002AB, 0x0001079B, 0x0100026C, 0x0001079C, + 0x8101DF04, 0x0001079D, 0x0100A78E, 0x0001079E, + 0x0100026E, 0x0001079F, 0x8101DF05, 0x000107A0, + 0x0100028E, 0x000107A1, 0x8101DF06, 0x000107A2, + 0x010000F8, 0x000107A3, 0x01000276, 0x000107A4, + 0x01000277, 0x000107A5, 0x01000071, 0x000107A6, + 0x0100027A, 0x000107A7, 0x8101DF08, 0x000107A8, + 0x0100027D, 0x000107A9, 0x0100027E, 0x000107AA, + 0x01000280, 0x000107AB, 0x010002A8, 0x000107AC, + 0x010002A6, 0x000107AD, 0x0100AB67, 0x000107AE, + 0x010002A7, 0x000107AF, 0x01000288, 0x000107B0, + 0x01002C71, 0x000107B2, 0x0100028F, 0x000107B3, + 0x010002A1, 0x000107B4, 0x010002A2, 0x000107B5, + 0x01000298, 0x000107B6, 0x010001C0, 0x000107B7, + 0x010001C1, 0x000107B8, 0x010001C2, 0x000107B9, + 0x8101DF0A, 0x000107BA, 0x8101DF1E, 0x0001D400, + 0x01000041, 0x0001D401, 0x01000042, 0x0001D402, + 0x01000043, 0x0001D403, 0x01000044, 0x0001D404, + 0x01000045, 0x0001D405, 0x01000046, 0x0001D406, + 0x01000047, 0x0001D407, 0x01000048, 0x0001D408, + 0x01000049, 0x0001D409, 0x0100004A, 0x0001D40A, + 0x0100004B, 0x0001D40B, 0x0100004C, 0x0001D40C, + 0x0100004D, 0x0001D40D, 0x0100004E, 0x0001D40E, + 0x0100004F, 0x0001D40F, 0x01000050, 0x0001D410, + 0x01000051, 0x0001D411, 0x01000052, 0x0001D412, + 0x01000053, 0x0001D413, 0x01000054, 0x0001D414, + 0x01000055, 0x0001D415, 0x01000056, 0x0001D416, + 0x01000057, 0x0001D417, 0x01000058, 0x0001D418, + 0x01000059, 0x0001D419, 0x0100005A, 0x0001D41A, + 0x01000061, 0x0001D41B, 0x01000062, 0x0001D41C, + 0x01000063, 0x0001D41D, 0x01000064, 0x0001D41E, + 0x01000065, 0x0001D41F, 0x01000066, 0x0001D420, + 0x01000067, 0x0001D421, 0x01000068, 0x0001D422, + 0x01000069, 0x0001D423, 0x0100006A, 0x0001D424, + 0x0100006B, 0x0001D425, 0x0100006C, 0x0001D426, + 0x0100006D, 0x0001D427, 0x0100006E, 0x0001D428, + 0x0100006F, 0x0001D429, 0x01000070, 0x0001D42A, + 0x01000071, 0x0001D42B, 0x01000072, 0x0001D42C, + 0x01000073, 0x0001D42D, 0x01000074, 0x0001D42E, + 0x01000075, 0x0001D42F, 0x01000076, 0x0001D430, + 0x01000077, 0x0001D431, 0x01000078, 0x0001D432, + 0x01000079, 0x0001D433, 0x0100007A, 0x0001D434, + 0x01000041, 0x0001D435, 0x01000042, 0x0001D436, + 0x01000043, 0x0001D437, 0x01000044, 0x0001D438, + 0x01000045, 0x0001D439, 0x01000046, 0x0001D43A, + 0x01000047, 0x0001D43B, 0x01000048, 0x0001D43C, + 0x01000049, 0x0001D43D, 0x0100004A, 0x0001D43E, + 0x0100004B, 0x0001D43F, 0x0100004C, 0x0001D440, + 0x0100004D, 0x0001D441, 0x0100004E, 0x0001D442, + 0x0100004F, 0x0001D443, 0x01000050, 0x0001D444, + 0x01000051, 0x0001D445, 0x01000052, 0x0001D446, + 0x01000053, 0x0001D447, 0x01000054, 0x0001D448, + 0x01000055, 0x0001D449, 0x01000056, 0x0001D44A, + 0x01000057, 0x0001D44B, 0x01000058, 0x0001D44C, + 0x01000059, 0x0001D44D, 0x0100005A, 0x0001D44E, + 0x01000061, 0x0001D44F, 0x01000062, 0x0001D450, + 0x01000063, 0x0001D451, 0x01000064, 0x0001D452, + 0x01000065, 0x0001D453, 0x01000066, 0x0001D454, + 0x01000067, 0x0001D456, 0x01000069, 0x0001D457, + 0x0100006A, 0x0001D458, 0x0100006B, 0x0001D459, + 0x0100006C, 0x0001D45A, 0x0100006D, 0x0001D45B, + 0x0100006E, 0x0001D45C, 0x0100006F, 0x0001D45D, + 0x01000070, 0x0001D45E, 0x01000071, 0x0001D45F, + 0x01000072, 0x0001D460, 0x01000073, 0x0001D461, + 0x01000074, 0x0001D462, 0x01000075, 0x0001D463, + 0x01000076, 0x0001D464, 0x01000077, 0x0001D465, + 0x01000078, 0x0001D466, 0x01000079, 0x0001D467, + 0x0100007A, 0x0001D468, 0x01000041, 0x0001D469, + 0x01000042, 0x0001D46A, 0x01000043, 0x0001D46B, + 0x01000044, 0x0001D46C, 0x01000045, 0x0001D46D, + 0x01000046, 0x0001D46E, 0x01000047, 0x0001D46F, + 0x01000048, 0x0001D470, 0x01000049, 0x0001D471, + 0x0100004A, 0x0001D472, 0x0100004B, 0x0001D473, + 0x0100004C, 0x0001D474, 0x0100004D, 0x0001D475, + 0x0100004E, 0x0001D476, 0x0100004F, 0x0001D477, + 0x01000050, 0x0001D478, 0x01000051, 0x0001D479, + 0x01000052, 0x0001D47A, 0x01000053, 0x0001D47B, + 0x01000054, 0x0001D47C, 0x01000055, 0x0001D47D, + 0x01000056, 0x0001D47E, 0x01000057, 0x0001D47F, + 0x01000058, 0x0001D480, 0x01000059, 0x0001D481, + 0x0100005A, 0x0001D482, 0x01000061, 0x0001D483, + 0x01000062, 0x0001D484, 0x01000063, 0x0001D485, + 0x01000064, 0x0001D486, 0x01000065, 0x0001D487, + 0x01000066, 0x0001D488, 0x01000067, 0x0001D489, + 0x01000068, 0x0001D48A, 0x01000069, 0x0001D48B, + 0x0100006A, 0x0001D48C, 0x0100006B, 0x0001D48D, + 0x0100006C, 0x0001D48E, 0x0100006D, 0x0001D48F, + 0x0100006E, 0x0001D490, 0x0100006F, 0x0001D491, + 0x01000070, 0x0001D492, 0x01000071, 0x0001D493, + 0x01000072, 0x0001D494, 0x01000073, 0x0001D495, + 0x01000074, 0x0001D496, 0x01000075, 0x0001D497, + 0x01000076, 0x0001D498, 0x01000077, 0x0001D499, + 0x01000078, 0x0001D49A, 0x01000079, 0x0001D49B, + 0x0100007A, 0x0001D49C, 0x01000041, 0x0001D49E, + 0x01000043, 0x0001D49F, 0x01000044, 0x0001D4A2, + 0x01000047, 0x0001D4A5, 0x0100004A, 0x0001D4A6, + 0x0100004B, 0x0001D4A9, 0x0100004E, 0x0001D4AA, + 0x0100004F, 0x0001D4AB, 0x01000050, 0x0001D4AC, + 0x01000051, 0x0001D4AE, 0x01000053, 0x0001D4AF, + 0x01000054, 0x0001D4B0, 0x01000055, 0x0001D4B1, + 0x01000056, 0x0001D4B2, 0x01000057, 0x0001D4B3, + 0x01000058, 0x0001D4B4, 0x01000059, 0x0001D4B5, + 0x0100005A, 0x0001D4B6, 0x01000061, 0x0001D4B7, + 0x01000062, 0x0001D4B8, 0x01000063, 0x0001D4B9, + 0x01000064, 0x0001D4BB, 0x01000066, 0x0001D4BD, + 0x01000068, 0x0001D4BE, 0x01000069, 0x0001D4BF, + 0x0100006A, 0x0001D4C0, 0x0100006B, 0x0001D4C1, + 0x0100006C, 0x0001D4C2, 0x0100006D, 0x0001D4C3, + 0x0100006E, 0x0001D4C5, 0x01000070, 0x0001D4C6, + 0x01000071, 0x0001D4C7, 0x01000072, 0x0001D4C8, + 0x01000073, 0x0001D4C9, 0x01000074, 0x0001D4CA, + 0x01000075, 0x0001D4CB, 0x01000076, 0x0001D4CC, + 0x01000077, 0x0001D4CD, 0x01000078, 0x0001D4CE, + 0x01000079, 0x0001D4CF, 0x0100007A, 0x0001D4D0, + 0x01000041, 0x0001D4D1, 0x01000042, 0x0001D4D2, + 0x01000043, 0x0001D4D3, 0x01000044, 0x0001D4D4, + 0x01000045, 0x0001D4D5, 0x01000046, 0x0001D4D6, + 0x01000047, 0x0001D4D7, 0x01000048, 0x0001D4D8, + 0x01000049, 0x0001D4D9, 0x0100004A, 0x0001D4DA, + 0x0100004B, 0x0001D4DB, 0x0100004C, 0x0001D4DC, + 0x0100004D, 0x0001D4DD, 0x0100004E, 0x0001D4DE, + 0x0100004F, 0x0001D4DF, 0x01000050, 0x0001D4E0, + 0x01000051, 0x0001D4E1, 0x01000052, 0x0001D4E2, + 0x01000053, 0x0001D4E3, 0x01000054, 0x0001D4E4, + 0x01000055, 0x0001D4E5, 0x01000056, 0x0001D4E6, + 0x01000057, 0x0001D4E7, 0x01000058, 0x0001D4E8, + 0x01000059, 0x0001D4E9, 0x0100005A, 0x0001D4EA, + 0x01000061, 0x0001D4EB, 0x01000062, 0x0001D4EC, + 0x01000063, 0x0001D4ED, 0x01000064, 0x0001D4EE, + 0x01000065, 0x0001D4EF, 0x01000066, 0x0001D4F0, + 0x01000067, 0x0001D4F1, 0x01000068, 0x0001D4F2, + 0x01000069, 0x0001D4F3, 0x0100006A, 0x0001D4F4, + 0x0100006B, 0x0001D4F5, 0x0100006C, 0x0001D4F6, + 0x0100006D, 0x0001D4F7, 0x0100006E, 0x0001D4F8, + 0x0100006F, 0x0001D4F9, 0x01000070, 0x0001D4FA, + 0x01000071, 0x0001D4FB, 0x01000072, 0x0001D4FC, + 0x01000073, 0x0001D4FD, 0x01000074, 0x0001D4FE, + 0x01000075, 0x0001D4FF, 0x01000076, 0x0001D500, + 0x01000077, 0x0001D501, 0x01000078, 0x0001D502, + 0x01000079, 0x0001D503, 0x0100007A, 0x0001D504, + 0x01000041, 0x0001D505, 0x01000042, 0x0001D507, + 0x01000044, 0x0001D508, 0x01000045, 0x0001D509, + 0x01000046, 0x0001D50A, 0x01000047, 0x0001D50D, + 0x0100004A, 0x0001D50E, 0x0100004B, 0x0001D50F, + 0x0100004C, 0x0001D510, 0x0100004D, 0x0001D511, + 0x0100004E, 0x0001D512, 0x0100004F, 0x0001D513, + 0x01000050, 0x0001D514, 0x01000051, 0x0001D516, + 0x01000053, 0x0001D517, 0x01000054, 0x0001D518, + 0x01000055, 0x0001D519, 0x01000056, 0x0001D51A, + 0x01000057, 0x0001D51B, 0x01000058, 0x0001D51C, + 0x01000059, 0x0001D51E, 0x01000061, 0x0001D51F, + 0x01000062, 0x0001D520, 0x01000063, 0x0001D521, + 0x01000064, 0x0001D522, 0x01000065, 0x0001D523, + 0x01000066, 0x0001D524, 0x01000067, 0x0001D525, + 0x01000068, 0x0001D526, 0x01000069, 0x0001D527, + 0x0100006A, 0x0001D528, 0x0100006B, 0x0001D529, + 0x0100006C, 0x0001D52A, 0x0100006D, 0x0001D52B, + 0x0100006E, 0x0001D52C, 0x0100006F, 0x0001D52D, + 0x01000070, 0x0001D52E, 0x01000071, 0x0001D52F, + 0x01000072, 0x0001D530, 0x01000073, 0x0001D531, + 0x01000074, 0x0001D532, 0x01000075, 0x0001D533, + 0x01000076, 0x0001D534, 0x01000077, 0x0001D535, + 0x01000078, 0x0001D536, 0x01000079, 0x0001D537, + 0x0100007A, 0x0001D538, 0x01000041, 0x0001D539, + 0x01000042, 0x0001D53B, 0x01000044, 0x0001D53C, + 0x01000045, 0x0001D53D, 0x01000046, 0x0001D53E, + 0x01000047, 0x0001D540, 0x01000049, 0x0001D541, + 0x0100004A, 0x0001D542, 0x0100004B, 0x0001D543, + 0x0100004C, 0x0001D544, 0x0100004D, 0x0001D546, + 0x0100004F, 0x0001D54A, 0x01000053, 0x0001D54B, + 0x01000054, 0x0001D54C, 0x01000055, 0x0001D54D, + 0x01000056, 0x0001D54E, 0x01000057, 0x0001D54F, + 0x01000058, 0x0001D550, 0x01000059, 0x0001D552, + 0x01000061, 0x0001D553, 0x01000062, 0x0001D554, + 0x01000063, 0x0001D555, 0x01000064, 0x0001D556, + 0x01000065, 0x0001D557, 0x01000066, 0x0001D558, + 0x01000067, 0x0001D559, 0x01000068, 0x0001D55A, + 0x01000069, 0x0001D55B, 0x0100006A, 0x0001D55C, + 0x0100006B, 0x0001D55D, 0x0100006C, 0x0001D55E, + 0x0100006D, 0x0001D55F, 0x0100006E, 0x0001D560, + 0x0100006F, 0x0001D561, 0x01000070, 0x0001D562, + 0x01000071, 0x0001D563, 0x01000072, 0x0001D564, + 0x01000073, 0x0001D565, 0x01000074, 0x0001D566, + 0x01000075, 0x0001D567, 0x01000076, 0x0001D568, + 0x01000077, 0x0001D569, 0x01000078, 0x0001D56A, + 0x01000079, 0x0001D56B, 0x0100007A, 0x0001D56C, + 0x01000041, 0x0001D56D, 0x01000042, 0x0001D56E, + 0x01000043, 0x0001D56F, 0x01000044, 0x0001D570, + 0x01000045, 0x0001D571, 0x01000046, 0x0001D572, + 0x01000047, 0x0001D573, 0x01000048, 0x0001D574, + 0x01000049, 0x0001D575, 0x0100004A, 0x0001D576, + 0x0100004B, 0x0001D577, 0x0100004C, 0x0001D578, + 0x0100004D, 0x0001D579, 0x0100004E, 0x0001D57A, + 0x0100004F, 0x0001D57B, 0x01000050, 0x0001D57C, + 0x01000051, 0x0001D57D, 0x01000052, 0x0001D57E, + 0x01000053, 0x0001D57F, 0x01000054, 0x0001D580, + 0x01000055, 0x0001D581, 0x01000056, 0x0001D582, + 0x01000057, 0x0001D583, 0x01000058, 0x0001D584, + 0x01000059, 0x0001D585, 0x0100005A, 0x0001D586, + 0x01000061, 0x0001D587, 0x01000062, 0x0001D588, + 0x01000063, 0x0001D589, 0x01000064, 0x0001D58A, + 0x01000065, 0x0001D58B, 0x01000066, 0x0001D58C, + 0x01000067, 0x0001D58D, 0x01000068, 0x0001D58E, + 0x01000069, 0x0001D58F, 0x0100006A, 0x0001D590, + 0x0100006B, 0x0001D591, 0x0100006C, 0x0001D592, + 0x0100006D, 0x0001D593, 0x0100006E, 0x0001D594, + 0x0100006F, 0x0001D595, 0x01000070, 0x0001D596, + 0x01000071, 0x0001D597, 0x01000072, 0x0001D598, + 0x01000073, 0x0001D599, 0x01000074, 0x0001D59A, + 0x01000075, 0x0001D59B, 0x01000076, 0x0001D59C, + 0x01000077, 0x0001D59D, 0x01000078, 0x0001D59E, + 0x01000079, 0x0001D59F, 0x0100007A, 0x0001D5A0, + 0x01000041, 0x0001D5A1, 0x01000042, 0x0001D5A2, + 0x01000043, 0x0001D5A3, 0x01000044, 0x0001D5A4, + 0x01000045, 0x0001D5A5, 0x01000046, 0x0001D5A6, + 0x01000047, 0x0001D5A7, 0x01000048, 0x0001D5A8, + 0x01000049, 0x0001D5A9, 0x0100004A, 0x0001D5AA, + 0x0100004B, 0x0001D5AB, 0x0100004C, 0x0001D5AC, + 0x0100004D, 0x0001D5AD, 0x0100004E, 0x0001D5AE, + 0x0100004F, 0x0001D5AF, 0x01000050, 0x0001D5B0, + 0x01000051, 0x0001D5B1, 0x01000052, 0x0001D5B2, + 0x01000053, 0x0001D5B3, 0x01000054, 0x0001D5B4, + 0x01000055, 0x0001D5B5, 0x01000056, 0x0001D5B6, + 0x01000057, 0x0001D5B7, 0x01000058, 0x0001D5B8, + 0x01000059, 0x0001D5B9, 0x0100005A, 0x0001D5BA, + 0x01000061, 0x0001D5BB, 0x01000062, 0x0001D5BC, + 0x01000063, 0x0001D5BD, 0x01000064, 0x0001D5BE, + 0x01000065, 0x0001D5BF, 0x01000066, 0x0001D5C0, + 0x01000067, 0x0001D5C1, 0x01000068, 0x0001D5C2, + 0x01000069, 0x0001D5C3, 0x0100006A, 0x0001D5C4, + 0x0100006B, 0x0001D5C5, 0x0100006C, 0x0001D5C6, + 0x0100006D, 0x0001D5C7, 0x0100006E, 0x0001D5C8, + 0x0100006F, 0x0001D5C9, 0x01000070, 0x0001D5CA, + 0x01000071, 0x0001D5CB, 0x01000072, 0x0001D5CC, + 0x01000073, 0x0001D5CD, 0x01000074, 0x0001D5CE, + 0x01000075, 0x0001D5CF, 0x01000076, 0x0001D5D0, + 0x01000077, 0x0001D5D1, 0x01000078, 0x0001D5D2, + 0x01000079, 0x0001D5D3, 0x0100007A, 0x0001D5D4, + 0x01000041, 0x0001D5D5, 0x01000042, 0x0001D5D6, + 0x01000043, 0x0001D5D7, 0x01000044, 0x0001D5D8, + 0x01000045, 0x0001D5D9, 0x01000046, 0x0001D5DA, + 0x01000047, 0x0001D5DB, 0x01000048, 0x0001D5DC, + 0x01000049, 0x0001D5DD, 0x0100004A, 0x0001D5DE, + 0x0100004B, 0x0001D5DF, 0x0100004C, 0x0001D5E0, + 0x0100004D, 0x0001D5E1, 0x0100004E, 0x0001D5E2, + 0x0100004F, 0x0001D5E3, 0x01000050, 0x0001D5E4, + 0x01000051, 0x0001D5E5, 0x01000052, 0x0001D5E6, + 0x01000053, 0x0001D5E7, 0x01000054, 0x0001D5E8, + 0x01000055, 0x0001D5E9, 0x01000056, 0x0001D5EA, + 0x01000057, 0x0001D5EB, 0x01000058, 0x0001D5EC, + 0x01000059, 0x0001D5ED, 0x0100005A, 0x0001D5EE, + 0x01000061, 0x0001D5EF, 0x01000062, 0x0001D5F0, + 0x01000063, 0x0001D5F1, 0x01000064, 0x0001D5F2, + 0x01000065, 0x0001D5F3, 0x01000066, 0x0001D5F4, + 0x01000067, 0x0001D5F5, 0x01000068, 0x0001D5F6, + 0x01000069, 0x0001D5F7, 0x0100006A, 0x0001D5F8, + 0x0100006B, 0x0001D5F9, 0x0100006C, 0x0001D5FA, + 0x0100006D, 0x0001D5FB, 0x0100006E, 0x0001D5FC, + 0x0100006F, 0x0001D5FD, 0x01000070, 0x0001D5FE, + 0x01000071, 0x0001D5FF, 0x01000072, 0x0001D600, + 0x01000073, 0x0001D601, 0x01000074, 0x0001D602, + 0x01000075, 0x0001D603, 0x01000076, 0x0001D604, + 0x01000077, 0x0001D605, 0x01000078, 0x0001D606, + 0x01000079, 0x0001D607, 0x0100007A, 0x0001D608, + 0x01000041, 0x0001D609, 0x01000042, 0x0001D60A, + 0x01000043, 0x0001D60B, 0x01000044, 0x0001D60C, + 0x01000045, 0x0001D60D, 0x01000046, 0x0001D60E, + 0x01000047, 0x0001D60F, 0x01000048, 0x0001D610, + 0x01000049, 0x0001D611, 0x0100004A, 0x0001D612, + 0x0100004B, 0x0001D613, 0x0100004C, 0x0001D614, + 0x0100004D, 0x0001D615, 0x0100004E, 0x0001D616, + 0x0100004F, 0x0001D617, 0x01000050, 0x0001D618, + 0x01000051, 0x0001D619, 0x01000052, 0x0001D61A, + 0x01000053, 0x0001D61B, 0x01000054, 0x0001D61C, + 0x01000055, 0x0001D61D, 0x01000056, 0x0001D61E, + 0x01000057, 0x0001D61F, 0x01000058, 0x0001D620, + 0x01000059, 0x0001D621, 0x0100005A, 0x0001D622, + 0x01000061, 0x0001D623, 0x01000062, 0x0001D624, + 0x01000063, 0x0001D625, 0x01000064, 0x0001D626, + 0x01000065, 0x0001D627, 0x01000066, 0x0001D628, + 0x01000067, 0x0001D629, 0x01000068, 0x0001D62A, + 0x01000069, 0x0001D62B, 0x0100006A, 0x0001D62C, + 0x0100006B, 0x0001D62D, 0x0100006C, 0x0001D62E, + 0x0100006D, 0x0001D62F, 0x0100006E, 0x0001D630, + 0x0100006F, 0x0001D631, 0x01000070, 0x0001D632, + 0x01000071, 0x0001D633, 0x01000072, 0x0001D634, + 0x01000073, 0x0001D635, 0x01000074, 0x0001D636, + 0x01000075, 0x0001D637, 0x01000076, 0x0001D638, + 0x01000077, 0x0001D639, 0x01000078, 0x0001D63A, + 0x01000079, 0x0001D63B, 0x0100007A, 0x0001D63C, + 0x01000041, 0x0001D63D, 0x01000042, 0x0001D63E, + 0x01000043, 0x0001D63F, 0x01000044, 0x0001D640, + 0x01000045, 0x0001D641, 0x01000046, 0x0001D642, + 0x01000047, 0x0001D643, 0x01000048, 0x0001D644, + 0x01000049, 0x0001D645, 0x0100004A, 0x0001D646, + 0x0100004B, 0x0001D647, 0x0100004C, 0x0001D648, + 0x0100004D, 0x0001D649, 0x0100004E, 0x0001D64A, + 0x0100004F, 0x0001D64B, 0x01000050, 0x0001D64C, + 0x01000051, 0x0001D64D, 0x01000052, 0x0001D64E, + 0x01000053, 0x0001D64F, 0x01000054, 0x0001D650, + 0x01000055, 0x0001D651, 0x01000056, 0x0001D652, + 0x01000057, 0x0001D653, 0x01000058, 0x0001D654, + 0x01000059, 0x0001D655, 0x0100005A, 0x0001D656, + 0x01000061, 0x0001D657, 0x01000062, 0x0001D658, + 0x01000063, 0x0001D659, 0x01000064, 0x0001D65A, + 0x01000065, 0x0001D65B, 0x01000066, 0x0001D65C, + 0x01000067, 0x0001D65D, 0x01000068, 0x0001D65E, + 0x01000069, 0x0001D65F, 0x0100006A, 0x0001D660, + 0x0100006B, 0x0001D661, 0x0100006C, 0x0001D662, + 0x0100006D, 0x0001D663, 0x0100006E, 0x0001D664, + 0x0100006F, 0x0001D665, 0x01000070, 0x0001D666, + 0x01000071, 0x0001D667, 0x01000072, 0x0001D668, + 0x01000073, 0x0001D669, 0x01000074, 0x0001D66A, + 0x01000075, 0x0001D66B, 0x01000076, 0x0001D66C, + 0x01000077, 0x0001D66D, 0x01000078, 0x0001D66E, + 0x01000079, 0x0001D66F, 0x0100007A, 0x0001D670, + 0x01000041, 0x0001D671, 0x01000042, 0x0001D672, + 0x01000043, 0x0001D673, 0x01000044, 0x0001D674, + 0x01000045, 0x0001D675, 0x01000046, 0x0001D676, + 0x01000047, 0x0001D677, 0x01000048, 0x0001D678, + 0x01000049, 0x0001D679, 0x0100004A, 0x0001D67A, + 0x0100004B, 0x0001D67B, 0x0100004C, 0x0001D67C, + 0x0100004D, 0x0001D67D, 0x0100004E, 0x0001D67E, + 0x0100004F, 0x0001D67F, 0x01000050, 0x0001D680, + 0x01000051, 0x0001D681, 0x01000052, 0x0001D682, + 0x01000053, 0x0001D683, 0x01000054, 0x0001D684, + 0x01000055, 0x0001D685, 0x01000056, 0x0001D686, + 0x01000057, 0x0001D687, 0x01000058, 0x0001D688, + 0x01000059, 0x0001D689, 0x0100005A, 0x0001D68A, + 0x01000061, 0x0001D68B, 0x01000062, 0x0001D68C, + 0x01000063, 0x0001D68D, 0x01000064, 0x0001D68E, + 0x01000065, 0x0001D68F, 0x01000066, 0x0001D690, + 0x01000067, 0x0001D691, 0x01000068, 0x0001D692, + 0x01000069, 0x0001D693, 0x0100006A, 0x0001D694, + 0x0100006B, 0x0001D695, 0x0100006C, 0x0001D696, + 0x0100006D, 0x0001D697, 0x0100006E, 0x0001D698, + 0x0100006F, 0x0001D699, 0x01000070, 0x0001D69A, + 0x01000071, 0x0001D69B, 0x01000072, 0x0001D69C, + 0x01000073, 0x0001D69D, 0x01000074, 0x0001D69E, + 0x01000075, 0x0001D69F, 0x01000076, 0x0001D6A0, + 0x01000077, 0x0001D6A1, 0x01000078, 0x0001D6A2, + 0x01000079, 0x0001D6A3, 0x0100007A, 0x0001D6A4, + 0x01000131, 0x0001D6A5, 0x01000237, 0x0001D6A8, + 0x01000391, 0x0001D6A9, 0x01000392, 0x0001D6AA, + 0x01000393, 0x0001D6AB, 0x01000394, 0x0001D6AC, + 0x01000395, 0x0001D6AD, 0x01000396, 0x0001D6AE, + 0x01000397, 0x0001D6AF, 0x01000398, 0x0001D6B0, + 0x01000399, 0x0001D6B1, 0x0100039A, 0x0001D6B2, + 0x0100039B, 0x0001D6B3, 0x0100039C, 0x0001D6B4, + 0x0100039D, 0x0001D6B5, 0x0100039E, 0x0001D6B6, + 0x0100039F, 0x0001D6B7, 0x010003A0, 0x0001D6B8, + 0x010003A1, 0x0001D6B9, 0x410003F4, 0x0001D6BA, + 0x010003A3, 0x0001D6BB, 0x010003A4, 0x0001D6BC, + 0x010003A5, 0x0001D6BD, 0x010003A6, 0x0001D6BE, + 0x010003A7, 0x0001D6BF, 0x010003A8, 0x0001D6C0, + 0x010003A9, 0x0001D6C1, 0x01002207, 0x0001D6C2, + 0x010003B1, 0x0001D6C3, 0x010003B2, 0x0001D6C4, + 0x010003B3, 0x0001D6C5, 0x010003B4, 0x0001D6C6, + 0x010003B5, 0x0001D6C7, 0x010003B6, 0x0001D6C8, + 0x010003B7, 0x0001D6C9, 0x010003B8, 0x0001D6CA, + 0x010003B9, 0x0001D6CB, 0x010003BA, 0x0001D6CC, + 0x010003BB, 0x0001D6CD, 0x010003BC, 0x0001D6CE, + 0x010003BD, 0x0001D6CF, 0x010003BE, 0x0001D6D0, + 0x010003BF, 0x0001D6D1, 0x010003C0, 0x0001D6D2, + 0x010003C1, 0x0001D6D3, 0x010003C2, 0x0001D6D4, + 0x010003C3, 0x0001D6D5, 0x010003C4, 0x0001D6D6, + 0x010003C5, 0x0001D6D7, 0x010003C6, 0x0001D6D8, + 0x010003C7, 0x0001D6D9, 0x010003C8, 0x0001D6DA, + 0x010003C9, 0x0001D6DB, 0x01002202, 0x0001D6DC, + 0x410003F5, 0x0001D6DD, 0x410003D1, 0x0001D6DE, + 0x410003F0, 0x0001D6DF, 0x410003D5, 0x0001D6E0, + 0x410003F1, 0x0001D6E1, 0x410003D6, 0x0001D6E2, + 0x01000391, 0x0001D6E3, 0x01000392, 0x0001D6E4, + 0x01000393, 0x0001D6E5, 0x01000394, 0x0001D6E6, + 0x01000395, 0x0001D6E7, 0x01000396, 0x0001D6E8, + 0x01000397, 0x0001D6E9, 0x01000398, 0x0001D6EA, + 0x01000399, 0x0001D6EB, 0x0100039A, 0x0001D6EC, + 0x0100039B, 0x0001D6ED, 0x0100039C, 0x0001D6EE, + 0x0100039D, 0x0001D6EF, 0x0100039E, 0x0001D6F0, + 0x0100039F, 0x0001D6F1, 0x010003A0, 0x0001D6F2, + 0x010003A1, 0x0001D6F3, 0x410003F4, 0x0001D6F4, + 0x010003A3, 0x0001D6F5, 0x010003A4, 0x0001D6F6, + 0x010003A5, 0x0001D6F7, 0x010003A6, 0x0001D6F8, + 0x010003A7, 0x0001D6F9, 0x010003A8, 0x0001D6FA, + 0x010003A9, 0x0001D6FB, 0x01002207, 0x0001D6FC, + 0x010003B1, 0x0001D6FD, 0x010003B2, 0x0001D6FE, + 0x010003B3, 0x0001D6FF, 0x010003B4, 0x0001D700, + 0x010003B5, 0x0001D701, 0x010003B6, 0x0001D702, + 0x010003B7, 0x0001D703, 0x010003B8, 0x0001D704, + 0x010003B9, 0x0001D705, 0x010003BA, 0x0001D706, + 0x010003BB, 0x0001D707, 0x010003BC, 0x0001D708, + 0x010003BD, 0x0001D709, 0x010003BE, 0x0001D70A, + 0x010003BF, 0x0001D70B, 0x010003C0, 0x0001D70C, + 0x010003C1, 0x0001D70D, 0x010003C2, 0x0001D70E, + 0x010003C3, 0x0001D70F, 0x010003C4, 0x0001D710, + 0x010003C5, 0x0001D711, 0x010003C6, 0x0001D712, + 0x010003C7, 0x0001D713, 0x010003C8, 0x0001D714, + 0x010003C9, 0x0001D715, 0x01002202, 0x0001D716, + 0x410003F5, 0x0001D717, 0x410003D1, 0x0001D718, + 0x410003F0, 0x0001D719, 0x410003D5, 0x0001D71A, + 0x410003F1, 0x0001D71B, 0x410003D6, 0x0001D71C, + 0x01000391, 0x0001D71D, 0x01000392, 0x0001D71E, + 0x01000393, 0x0001D71F, 0x01000394, 0x0001D720, + 0x01000395, 0x0001D721, 0x01000396, 0x0001D722, + 0x01000397, 0x0001D723, 0x01000398, 0x0001D724, + 0x01000399, 0x0001D725, 0x0100039A, 0x0001D726, + 0x0100039B, 0x0001D727, 0x0100039C, 0x0001D728, + 0x0100039D, 0x0001D729, 0x0100039E, 0x0001D72A, + 0x0100039F, 0x0001D72B, 0x010003A0, 0x0001D72C, + 0x010003A1, 0x0001D72D, 0x410003F4, 0x0001D72E, + 0x010003A3, 0x0001D72F, 0x010003A4, 0x0001D730, + 0x010003A5, 0x0001D731, 0x010003A6, 0x0001D732, + 0x010003A7, 0x0001D733, 0x010003A8, 0x0001D734, + 0x010003A9, 0x0001D735, 0x01002207, 0x0001D736, + 0x010003B1, 0x0001D737, 0x010003B2, 0x0001D738, + 0x010003B3, 0x0001D739, 0x010003B4, 0x0001D73A, + 0x010003B5, 0x0001D73B, 0x010003B6, 0x0001D73C, + 0x010003B7, 0x0001D73D, 0x010003B8, 0x0001D73E, + 0x010003B9, 0x0001D73F, 0x010003BA, 0x0001D740, + 0x010003BB, 0x0001D741, 0x010003BC, 0x0001D742, + 0x010003BD, 0x0001D743, 0x010003BE, 0x0001D744, + 0x010003BF, 0x0001D745, 0x010003C0, 0x0001D746, + 0x010003C1, 0x0001D747, 0x010003C2, 0x0001D748, + 0x010003C3, 0x0001D749, 0x010003C4, 0x0001D74A, + 0x010003C5, 0x0001D74B, 0x010003C6, 0x0001D74C, + 0x010003C7, 0x0001D74D, 0x010003C8, 0x0001D74E, + 0x010003C9, 0x0001D74F, 0x01002202, 0x0001D750, + 0x410003F5, 0x0001D751, 0x410003D1, 0x0001D752, + 0x410003F0, 0x0001D753, 0x410003D5, 0x0001D754, + 0x410003F1, 0x0001D755, 0x410003D6, 0x0001D756, + 0x01000391, 0x0001D757, 0x01000392, 0x0001D758, + 0x01000393, 0x0001D759, 0x01000394, 0x0001D75A, + 0x01000395, 0x0001D75B, 0x01000396, 0x0001D75C, + 0x01000397, 0x0001D75D, 0x01000398, 0x0001D75E, + 0x01000399, 0x0001D75F, 0x0100039A, 0x0001D760, + 0x0100039B, 0x0001D761, 0x0100039C, 0x0001D762, + 0x0100039D, 0x0001D763, 0x0100039E, 0x0001D764, + 0x0100039F, 0x0001D765, 0x010003A0, 0x0001D766, + 0x010003A1, 0x0001D767, 0x410003F4, 0x0001D768, + 0x010003A3, 0x0001D769, 0x010003A4, 0x0001D76A, + 0x010003A5, 0x0001D76B, 0x010003A6, 0x0001D76C, + 0x010003A7, 0x0001D76D, 0x010003A8, 0x0001D76E, + 0x010003A9, 0x0001D76F, 0x01002207, 0x0001D770, + 0x010003B1, 0x0001D771, 0x010003B2, 0x0001D772, + 0x010003B3, 0x0001D773, 0x010003B4, 0x0001D774, + 0x010003B5, 0x0001D775, 0x010003B6, 0x0001D776, + 0x010003B7, 0x0001D777, 0x010003B8, 0x0001D778, + 0x010003B9, 0x0001D779, 0x010003BA, 0x0001D77A, + 0x010003BB, 0x0001D77B, 0x010003BC, 0x0001D77C, + 0x010003BD, 0x0001D77D, 0x010003BE, 0x0001D77E, + 0x010003BF, 0x0001D77F, 0x010003C0, 0x0001D780, + 0x010003C1, 0x0001D781, 0x010003C2, 0x0001D782, + 0x010003C3, 0x0001D783, 0x010003C4, 0x0001D784, + 0x010003C5, 0x0001D785, 0x010003C6, 0x0001D786, + 0x010003C7, 0x0001D787, 0x010003C8, 0x0001D788, + 0x010003C9, 0x0001D789, 0x01002202, 0x0001D78A, + 0x410003F5, 0x0001D78B, 0x410003D1, 0x0001D78C, + 0x410003F0, 0x0001D78D, 0x410003D5, 0x0001D78E, + 0x410003F1, 0x0001D78F, 0x410003D6, 0x0001D790, + 0x01000391, 0x0001D791, 0x01000392, 0x0001D792, + 0x01000393, 0x0001D793, 0x01000394, 0x0001D794, + 0x01000395, 0x0001D795, 0x01000396, 0x0001D796, + 0x01000397, 0x0001D797, 0x01000398, 0x0001D798, + 0x01000399, 0x0001D799, 0x0100039A, 0x0001D79A, + 0x0100039B, 0x0001D79B, 0x0100039C, 0x0001D79C, + 0x0100039D, 0x0001D79D, 0x0100039E, 0x0001D79E, + 0x0100039F, 0x0001D79F, 0x010003A0, 0x0001D7A0, + 0x010003A1, 0x0001D7A1, 0x410003F4, 0x0001D7A2, + 0x010003A3, 0x0001D7A3, 0x010003A4, 0x0001D7A4, + 0x010003A5, 0x0001D7A5, 0x010003A6, 0x0001D7A6, + 0x010003A7, 0x0001D7A7, 0x010003A8, 0x0001D7A8, + 0x010003A9, 0x0001D7A9, 0x01002207, 0x0001D7AA, + 0x010003B1, 0x0001D7AB, 0x010003B2, 0x0001D7AC, + 0x010003B3, 0x0001D7AD, 0x010003B4, 0x0001D7AE, + 0x010003B5, 0x0001D7AF, 0x010003B6, 0x0001D7B0, + 0x010003B7, 0x0001D7B1, 0x010003B8, 0x0001D7B2, + 0x010003B9, 0x0001D7B3, 0x010003BA, 0x0001D7B4, + 0x010003BB, 0x0001D7B5, 0x010003BC, 0x0001D7B6, + 0x010003BD, 0x0001D7B7, 0x010003BE, 0x0001D7B8, + 0x010003BF, 0x0001D7B9, 0x010003C0, 0x0001D7BA, + 0x010003C1, 0x0001D7BB, 0x010003C2, 0x0001D7BC, + 0x010003C3, 0x0001D7BD, 0x010003C4, 0x0001D7BE, + 0x010003C5, 0x0001D7BF, 0x010003C6, 0x0001D7C0, + 0x010003C7, 0x0001D7C1, 0x010003C8, 0x0001D7C2, + 0x010003C9, 0x0001D7C3, 0x01002202, 0x0001D7C4, + 0x410003F5, 0x0001D7C5, 0x410003D1, 0x0001D7C6, + 0x410003F0, 0x0001D7C7, 0x410003D5, 0x0001D7C8, + 0x410003F1, 0x0001D7C9, 0x410003D6, 0x0001D7CA, + 0x010003DC, 0x0001D7CB, 0x010003DD, 0x0001D7CE, + 0x01000030, 0x0001D7CF, 0x01000031, 0x0001D7D0, + 0x01000032, 0x0001D7D1, 0x01000033, 0x0001D7D2, + 0x01000034, 0x0001D7D3, 0x01000035, 0x0001D7D4, + 0x01000036, 0x0001D7D5, 0x01000037, 0x0001D7D6, + 0x01000038, 0x0001D7D7, 0x01000039, 0x0001D7D8, + 0x01000030, 0x0001D7D9, 0x01000031, 0x0001D7DA, + 0x01000032, 0x0001D7DB, 0x01000033, 0x0001D7DC, + 0x01000034, 0x0001D7DD, 0x01000035, 0x0001D7DE, + 0x01000036, 0x0001D7DF, 0x01000037, 0x0001D7E0, + 0x01000038, 0x0001D7E1, 0x01000039, 0x0001D7E2, + 0x01000030, 0x0001D7E3, 0x01000031, 0x0001D7E4, + 0x01000032, 0x0001D7E5, 0x01000033, 0x0001D7E6, + 0x01000034, 0x0001D7E7, 0x01000035, 0x0001D7E8, + 0x01000036, 0x0001D7E9, 0x01000037, 0x0001D7EA, + 0x01000038, 0x0001D7EB, 0x01000039, 0x0001D7EC, + 0x01000030, 0x0001D7ED, 0x01000031, 0x0001D7EE, + 0x01000032, 0x0001D7EF, 0x01000033, 0x0001D7F0, + 0x01000034, 0x0001D7F1, 0x01000035, 0x0001D7F2, + 0x01000036, 0x0001D7F3, 0x01000037, 0x0001D7F4, + 0x01000038, 0x0001D7F5, 0x01000039, 0x0001D7F6, + 0x01000030, 0x0001D7F7, 0x01000031, 0x0001D7F8, + 0x01000032, 0x0001D7F9, 0x01000033, 0x0001D7FA, + 0x01000034, 0x0001D7FB, 0x01000035, 0x0001D7FC, + 0x01000036, 0x0001D7FD, 0x01000037, 0x0001D7FE, + 0x01000038, 0x0001D7FF, 0x01000039, 0x0001E030, + 0x01000430, 0x0001E031, 0x01000431, 0x0001E032, + 0x01000432, 0x0001E033, 0x01000433, 0x0001E034, + 0x01000434, 0x0001E035, 0x01000435, 0x0001E036, + 0x01000436, 0x0001E037, 0x01000437, 0x0001E038, + 0x01000438, 0x0001E039, 0x0100043A, 0x0001E03A, + 0x0100043B, 0x0001E03B, 0x0100043C, 0x0001E03C, + 0x0100043E, 0x0001E03D, 0x0100043F, 0x0001E03E, + 0x01000440, 0x0001E03F, 0x01000441, 0x0001E040, + 0x01000442, 0x0001E041, 0x01000443, 0x0001E042, + 0x01000444, 0x0001E043, 0x01000445, 0x0001E044, + 0x01000446, 0x0001E045, 0x01000447, 0x0001E046, + 0x01000448, 0x0001E047, 0x0100044B, 0x0001E048, + 0x0100044D, 0x0001E049, 0x0100044E, 0x0001E04A, + 0x0100A689, 0x0001E04B, 0x010004D9, 0x0001E04C, + 0x01000456, 0x0001E04D, 0x01000458, 0x0001E04E, + 0x010004E9, 0x0001E04F, 0x010004AF, 0x0001E050, + 0x010004CF, 0x0001E051, 0x01000430, 0x0001E052, + 0x01000431, 0x0001E053, 0x01000432, 0x0001E054, + 0x01000433, 0x0001E055, 0x01000434, 0x0001E056, + 0x01000435, 0x0001E057, 0x01000436, 0x0001E058, + 0x01000437, 0x0001E059, 0x01000438, 0x0001E05A, + 0x0100043A, 0x0001E05B, 0x0100043B, 0x0001E05C, + 0x0100043E, 0x0001E05D, 0x0100043F, 0x0001E05E, + 0x01000441, 0x0001E05F, 0x01000443, 0x0001E060, + 0x01000444, 0x0001E061, 0x01000445, 0x0001E062, + 0x01000446, 0x0001E063, 0x01000447, 0x0001E064, + 0x01000448, 0x0001E065, 0x0100044A, 0x0001E066, + 0x0100044B, 0x0001E067, 0x01000491, 0x0001E068, + 0x01000456, 0x0001E069, 0x01000455, 0x0001E06A, + 0x0100045F, 0x0001E06B, 0x010004AB, 0x0001E06C, + 0x0100A651, 0x0001E06D, 0x010004B1, 0x0001EE00, + 0x01000627, 0x0001EE01, 0x01000628, 0x0001EE02, + 0x0100062C, 0x0001EE03, 0x0100062F, 0x0001EE05, + 0x01000648, 0x0001EE06, 0x01000632, 0x0001EE07, + 0x0100062D, 0x0001EE08, 0x01000637, 0x0001EE09, + 0x0100064A, 0x0001EE0A, 0x01000643, 0x0001EE0B, + 0x01000644, 0x0001EE0C, 0x01000645, 0x0001EE0D, + 0x01000646, 0x0001EE0E, 0x01000633, 0x0001EE0F, + 0x01000639, 0x0001EE10, 0x01000641, 0x0001EE11, + 0x01000635, 0x0001EE12, 0x01000642, 0x0001EE13, + 0x01000631, 0x0001EE14, 0x01000634, 0x0001EE15, + 0x0100062A, 0x0001EE16, 0x0100062B, 0x0001EE17, + 0x0100062E, 0x0001EE18, 0x01000630, 0x0001EE19, + 0x01000636, 0x0001EE1A, 0x01000638, 0x0001EE1B, + 0x0100063A, 0x0001EE1C, 0x0100066E, 0x0001EE1D, + 0x010006BA, 0x0001EE1E, 0x010006A1, 0x0001EE1F, + 0x0100066F, 0x0001EE21, 0x01000628, 0x0001EE22, + 0x0100062C, 0x0001EE24, 0x01000647, 0x0001EE27, + 0x0100062D, 0x0001EE29, 0x0100064A, 0x0001EE2A, + 0x01000643, 0x0001EE2B, 0x01000644, 0x0001EE2C, + 0x01000645, 0x0001EE2D, 0x01000646, 0x0001EE2E, + 0x01000633, 0x0001EE2F, 0x01000639, 0x0001EE30, + 0x01000641, 0x0001EE31, 0x01000635, 0x0001EE32, + 0x01000642, 0x0001EE34, 0x01000634, 0x0001EE35, + 0x0100062A, 0x0001EE36, 0x0100062B, 0x0001EE37, + 0x0100062E, 0x0001EE39, 0x01000636, 0x0001EE3B, + 0x0100063A, 0x0001EE42, 0x0100062C, 0x0001EE47, + 0x0100062D, 0x0001EE49, 0x0100064A, 0x0001EE4B, + 0x01000644, 0x0001EE4D, 0x01000646, 0x0001EE4E, + 0x01000633, 0x0001EE4F, 0x01000639, 0x0001EE51, + 0x01000635, 0x0001EE52, 0x01000642, 0x0001EE54, + 0x01000634, 0x0001EE57, 0x0100062E, 0x0001EE59, + 0x01000636, 0x0001EE5B, 0x0100063A, 0x0001EE5D, + 0x010006BA, 0x0001EE5F, 0x0100066F, 0x0001EE61, + 0x01000628, 0x0001EE62, 0x0100062C, 0x0001EE64, + 0x01000647, 0x0001EE67, 0x0100062D, 0x0001EE68, + 0x01000637, 0x0001EE69, 0x0100064A, 0x0001EE6A, + 0x01000643, 0x0001EE6C, 0x01000645, 0x0001EE6D, + 0x01000646, 0x0001EE6E, 0x01000633, 0x0001EE6F, + 0x01000639, 0x0001EE70, 0x01000641, 0x0001EE71, + 0x01000635, 0x0001EE72, 0x01000642, 0x0001EE74, + 0x01000634, 0x0001EE75, 0x0100062A, 0x0001EE76, + 0x0100062B, 0x0001EE77, 0x0100062E, 0x0001EE79, + 0x01000636, 0x0001EE7A, 0x01000638, 0x0001EE7B, + 0x0100063A, 0x0001EE7C, 0x0100066E, 0x0001EE7E, + 0x010006A1, 0x0001EE80, 0x01000627, 0x0001EE81, + 0x01000628, 0x0001EE82, 0x0100062C, 0x0001EE83, + 0x0100062F, 0x0001EE84, 0x01000647, 0x0001EE85, + 0x01000648, 0x0001EE86, 0x01000632, 0x0001EE87, + 0x0100062D, 0x0001EE88, 0x01000637, 0x0001EE89, + 0x0100064A, 0x0001EE8B, 0x01000644, 0x0001EE8C, + 0x01000645, 0x0001EE8D, 0x01000646, 0x0001EE8E, + 0x01000633, 0x0001EE8F, 0x01000639, 0x0001EE90, + 0x01000641, 0x0001EE91, 0x01000635, 0x0001EE92, + 0x01000642, 0x0001EE93, 0x01000631, 0x0001EE94, + 0x01000634, 0x0001EE95, 0x0100062A, 0x0001EE96, + 0x0100062B, 0x0001EE97, 0x0100062E, 0x0001EE98, + 0x01000630, 0x0001EE99, 0x01000636, 0x0001EE9A, + 0x01000638, 0x0001EE9B, 0x0100063A, 0x0001EEA1, + 0x01000628, 0x0001EEA2, 0x0100062C, 0x0001EEA3, + 0x0100062F, 0x0001EEA5, 0x01000648, 0x0001EEA6, + 0x01000632, 0x0001EEA7, 0x0100062D, 0x0001EEA8, + 0x01000637, 0x0001EEA9, 0x0100064A, 0x0001EEAB, + 0x01000644, 0x0001EEAC, 0x01000645, 0x0001EEAD, + 0x01000646, 0x0001EEAE, 0x01000633, 0x0001EEAF, + 0x01000639, 0x0001EEB0, 0x01000641, 0x0001EEB1, + 0x01000635, 0x0001EEB2, 0x01000642, 0x0001EEB3, + 0x01000631, 0x0001EEB4, 0x01000634, 0x0001EEB5, + 0x0100062A, 0x0001EEB6, 0x0100062B, 0x0001EEB7, + 0x0100062E, 0x0001EEB8, 0x01000630, 0x0001EEB9, + 0x01000636, 0x0001EEBA, 0x01000638, 0x0001EEBB, + 0x0100063A, 0x0001F100, 0x02000AD1, 0x0001F101, + 0x02000AD3, 0x0001F102, 0x02000AD5, 0x0001F103, + 0x02000AD7, 0x0001F104, 0x02000AD9, 0x0001F105, + 0x02000ADB, 0x0001F106, 0x02000ADD, 0x0001F107, + 0x02000ADF, 0x0001F108, 0x02000AE1, 0x0001F109, + 0x02000AE3, 0x0001F10A, 0x02000AE5, 0x0001F110, + 0x03000AE7, 0x0001F111, 0x03000AEA, 0x0001F112, + 0x03000AED, 0x0001F113, 0x03000AF0, 0x0001F114, + 0x03000AF3, 0x0001F115, 0x03000AF6, 0x0001F116, + 0x03000AF9, 0x0001F117, 0x03000AFC, 0x0001F118, + 0x03000AFF, 0x0001F119, 0x03000B02, 0x0001F11A, + 0x03000B05, 0x0001F11B, 0x03000B08, 0x0001F11C, + 0x03000B0B, 0x0001F11D, 0x03000B0E, 0x0001F11E, + 0x03000B11, 0x0001F11F, 0x03000B14, 0x0001F120, + 0x03000B17, 0x0001F121, 0x03000B1A, 0x0001F122, + 0x03000B1D, 0x0001F123, 0x03000B20, 0x0001F124, + 0x03000B23, 0x0001F125, 0x03000B26, 0x0001F126, + 0x03000B29, 0x0001F127, 0x03000B2C, 0x0001F128, + 0x03000B2F, 0x0001F129, 0x03000B32, 0x0001F12A, + 0x03000B35, 0x0001F12B, 0x01000043, 0x0001F12C, + 0x01000052, 0x0001F12D, 0x02000B38, 0x0001F12E, + 0x02000B3A, 0x0001F130, 0x01000041, 0x0001F131, + 0x01000042, 0x0001F132, 0x01000043, 0x0001F133, + 0x01000044, 0x0001F134, 0x01000045, 0x0001F135, + 0x01000046, 0x0001F136, 0x01000047, 0x0001F137, + 0x01000048, 0x0001F138, 0x01000049, 0x0001F139, + 0x0100004A, 0x0001F13A, 0x0100004B, 0x0001F13B, + 0x0100004C, 0x0001F13C, 0x0100004D, 0x0001F13D, + 0x0100004E, 0x0001F13E, 0x0100004F, 0x0001F13F, + 0x01000050, 0x0001F140, 0x01000051, 0x0001F141, + 0x01000052, 0x0001F142, 0x01000053, 0x0001F143, + 0x01000054, 0x0001F144, 0x01000055, 0x0001F145, + 0x01000056, 0x0001F146, 0x01000057, 0x0001F147, + 0x01000058, 0x0001F148, 0x01000059, 0x0001F149, + 0x0100005A, 0x0001F14A, 0x02000B3C, 0x0001F14B, + 0x02000B3E, 0x0001F14C, 0x02000B40, 0x0001F14D, + 0x02000B42, 0x0001F14E, 0x03000B44, 0x0001F14F, + 0x02000B47, 0x0001F16A, 0x02000B49, 0x0001F16B, + 0x02000B4B, 0x0001F16C, 0x02000B4D, 0x0001F190, + 0x02000B4F, 0x0001F200, 0x02000B51, 0x0001F201, + 0x02000B53, 0x0001F202, 0x010030B5, 0x0001F210, + 0x0100624B, 0x0001F211, 0x01005B57, 0x0001F212, + 0x010053CC, 0x0001F213, 0x010030C7, 0x0001F214, + 0x01004E8C, 0x0001F215, 0x0100591A, 0x0001F216, + 0x010089E3, 0x0001F217, 0x01005929, 0x0001F218, + 0x01004EA4, 0x0001F219, 0x01006620, 0x0001F21A, + 0x01007121, 0x0001F21B, 0x01006599, 0x0001F21C, + 0x0100524D, 0x0001F21D, 0x01005F8C, 0x0001F21E, + 0x0100518D, 0x0001F21F, 0x010065B0, 0x0001F220, + 0x0100521D, 0x0001F221, 0x01007D42, 0x0001F222, + 0x0100751F, 0x0001F223, 0x01008CA9, 0x0001F224, + 0x010058F0, 0x0001F225, 0x01005439, 0x0001F226, + 0x01006F14, 0x0001F227, 0x01006295, 0x0001F228, + 0x01006355, 0x0001F229, 0x01004E00, 0x0001F22A, + 0x01004E09, 0x0001F22B, 0x0100904A, 0x0001F22C, + 0x01005DE6, 0x0001F22D, 0x01004E2D, 0x0001F22E, + 0x010053F3, 0x0001F22F, 0x01006307, 0x0001F230, + 0x01008D70, 0x0001F231, 0x01006253, 0x0001F232, + 0x01007981, 0x0001F233, 0x01007A7A, 0x0001F234, + 0x01005408, 0x0001F235, 0x01006E80, 0x0001F236, + 0x01006709, 0x0001F237, 0x01006708, 0x0001F238, + 0x01007533, 0x0001F239, 0x01005272, 0x0001F23A, + 0x010055B6, 0x0001F23B, 0x0100914D, 0x0001F240, + 0x03000B55, 0x0001F241, 0x03000B58, 0x0001F242, + 0x03000B5B, 0x0001F243, 0x03000B5E, 0x0001F244, + 0x03000B61, 0x0001F245, 0x03000B64, 0x0001F246, + 0x03000B67, 0x0001F247, 0x03000B6A, 0x0001F248, + 0x03000B6D, 0x0001F250, 0x01005F97, 0x0001F251, + 0x010053EF, 0x0001FBF0, 0x01000030, 0x0001FBF1, + 0x01000031, 0x0001FBF2, 0x01000032, 0x0001FBF3, + 0x01000033, 0x0001FBF4, 0x01000034, 0x0001FBF5, + 0x01000035, 0x0001FBF6, 0x01000036, 0x0001FBF7, + 0x01000037, 0x0001FBF8, 0x01000038, 0x0001FBF9, + 0x01000039, 0x00000020, 0x00000308, 0x00000020, + 0x00000304, 0x00000020, 0x00000301, 0x00000020, + 0x00000327, 0x00000031, 0x00002044, 0x00000034, + 0x00000031, 0x00002044, 0x00000032, 0x00000033, + 0x00002044, 0x00000034, 0x00000049, 0x0000004A, + 0x00000069, 0x0000006A, 0x0000004C, 0x000000B7, + 0x0000006C, 0x000000B7, 0x000002BC, 0x0000006E, + 0x00000044, 0x0000017D, 0x00000044, 0x0000017E, + 0x00000064, 0x0000017E, 0x0000004C, 0x0000004A, + 0x0000004C, 0x0000006A, 0x0000006C, 0x0000006A, + 0x0000004E, 0x0000004A, 0x0000004E, 0x0000006A, + 0x0000006E, 0x0000006A, 0x00000044, 0x0000005A, + 0x00000044, 0x0000007A, 0x00000064, 0x0000007A, + 0x00000020, 0x00000306, 0x00000020, 0x00000307, + 0x00000020, 0x0000030A, 0x00000020, 0x00000328, + 0x00000020, 0x00000303, 0x00000020, 0x0000030B, + 0x00000020, 0x00000345, 0x00000020, 0x00000301, + 0x00000565, 0x00000582, 0x00000627, 0x00000674, + 0x00000648, 0x00000674, 0x000006C7, 0x00000674, + 0x0000064A, 0x00000674, 0x00000E4D, 0x00000E32, + 0x00000ECD, 0x00000EB2, 0x00000EAB, 0x00000E99, + 0x00000EAB, 0x00000EA1, 0x00000FB2, 0x00000F81, + 0x00000FB3, 0x00000F81, 0x00000061, 0x000002BE, + 0x00000020, 0x00000313, 0x00000020, 0x00000313, + 0x00000020, 0x00000342, 0x00000020, 0x00000314, + 0x00000020, 0x00000333, 0x0000002E, 0x0000002E, + 0x0000002E, 0x0000002E, 0x0000002E, 0x00002032, + 0x00002032, 0x00002032, 0x00002032, 0x00002032, + 0x00002035, 0x00002035, 0x00002035, 0x00002035, + 0x00002035, 0x00000021, 0x00000021, 0x00000020, + 0x00000305, 0x0000003F, 0x0000003F, 0x0000003F, + 0x00000021, 0x00000021, 0x0000003F, 0x00002032, + 0x00002032, 0x00002032, 0x00002032, 0x00000052, + 0x00000073, 0x00000061, 0x0000002F, 0x00000063, + 0x00000061, 0x0000002F, 0x00000073, 0x000000B0, + 0x00000043, 0x00000063, 0x0000002F, 0x0000006F, + 0x00000063, 0x0000002F, 0x00000075, 0x000000B0, + 0x00000046, 0x0000004E, 0x0000006F, 0x00000053, + 0x0000004D, 0x00000054, 0x00000045, 0x0000004C, + 0x00000054, 0x0000004D, 0x00000046, 0x00000041, + 0x00000058, 0x00000031, 0x00002044, 0x00000037, + 0x00000031, 0x00002044, 0x00000039, 0x00000031, + 0x00002044, 0x00000031, 0x00000030, 0x00000031, + 0x00002044, 0x00000033, 0x00000032, 0x00002044, + 0x00000033, 0x00000031, 0x00002044, 0x00000035, + 0x00000032, 0x00002044, 0x00000035, 0x00000033, + 0x00002044, 0x00000035, 0x00000034, 0x00002044, + 0x00000035, 0x00000031, 0x00002044, 0x00000036, + 0x00000035, 0x00002044, 0x00000036, 0x00000031, + 0x00002044, 0x00000038, 0x00000033, 0x00002044, + 0x00000038, 0x00000035, 0x00002044, 0x00000038, + 0x00000037, 0x00002044, 0x00000038, 0x00000031, + 0x00002044, 0x00000049, 0x00000049, 0x00000049, + 0x00000049, 0x00000049, 0x00000049, 0x00000056, + 0x00000056, 0x00000049, 0x00000056, 0x00000049, + 0x00000049, 0x00000056, 0x00000049, 0x00000049, + 0x00000049, 0x00000049, 0x00000058, 0x00000058, + 0x00000049, 0x00000058, 0x00000049, 0x00000049, + 0x00000069, 0x00000069, 0x00000069, 0x00000069, + 0x00000069, 0x00000069, 0x00000076, 0x00000076, + 0x00000069, 0x00000076, 0x00000069, 0x00000069, + 0x00000076, 0x00000069, 0x00000069, 0x00000069, + 0x00000069, 0x00000078, 0x00000078, 0x00000069, + 0x00000078, 0x00000069, 0x00000069, 0x00000030, + 0x00002044, 0x00000033, 0x0000222B, 0x0000222B, + 0x0000222B, 0x0000222B, 0x0000222B, 0x0000222E, + 0x0000222E, 0x0000222E, 0x0000222E, 0x0000222E, + 0x00000031, 0x00000030, 0x00000031, 0x00000031, + 0x00000031, 0x00000032, 0x00000031, 0x00000033, + 0x00000031, 0x00000034, 0x00000031, 0x00000035, + 0x00000031, 0x00000036, 0x00000031, 0x00000037, + 0x00000031, 0x00000038, 0x00000031, 0x00000039, + 0x00000032, 0x00000030, 0x00000028, 0x00000031, + 0x00000029, 0x00000028, 0x00000032, 0x00000029, + 0x00000028, 0x00000033, 0x00000029, 0x00000028, + 0x00000034, 0x00000029, 0x00000028, 0x00000035, + 0x00000029, 0x00000028, 0x00000036, 0x00000029, + 0x00000028, 0x00000037, 0x00000029, 0x00000028, + 0x00000038, 0x00000029, 0x00000028, 0x00000039, + 0x00000029, 0x00000028, 0x00000031, 0x00000030, + 0x00000029, 0x00000028, 0x00000031, 0x00000031, + 0x00000029, 0x00000028, 0x00000031, 0x00000032, + 0x00000029, 0x00000028, 0x00000031, 0x00000033, + 0x00000029, 0x00000028, 0x00000031, 0x00000034, + 0x00000029, 0x00000028, 0x00000031, 0x00000035, + 0x00000029, 0x00000028, 0x00000031, 0x00000036, + 0x00000029, 0x00000028, 0x00000031, 0x00000037, + 0x00000029, 0x00000028, 0x00000031, 0x00000038, + 0x00000029, 0x00000028, 0x00000031, 0x00000039, + 0x00000029, 0x00000028, 0x00000032, 0x00000030, + 0x00000029, 0x00000031, 0x0000002E, 0x00000032, + 0x0000002E, 0x00000033, 0x0000002E, 0x00000034, + 0x0000002E, 0x00000035, 0x0000002E, 0x00000036, + 0x0000002E, 0x00000037, 0x0000002E, 0x00000038, + 0x0000002E, 0x00000039, 0x0000002E, 0x00000031, + 0x00000030, 0x0000002E, 0x00000031, 0x00000031, + 0x0000002E, 0x00000031, 0x00000032, 0x0000002E, + 0x00000031, 0x00000033, 0x0000002E, 0x00000031, + 0x00000034, 0x0000002E, 0x00000031, 0x00000035, + 0x0000002E, 0x00000031, 0x00000036, 0x0000002E, + 0x00000031, 0x00000037, 0x0000002E, 0x00000031, + 0x00000038, 0x0000002E, 0x00000031, 0x00000039, + 0x0000002E, 0x00000032, 0x00000030, 0x0000002E, + 0x00000028, 0x00000061, 0x00000029, 0x00000028, + 0x00000062, 0x00000029, 0x00000028, 0x00000063, + 0x00000029, 0x00000028, 0x00000064, 0x00000029, + 0x00000028, 0x00000065, 0x00000029, 0x00000028, + 0x00000066, 0x00000029, 0x00000028, 0x00000067, + 0x00000029, 0x00000028, 0x00000068, 0x00000029, + 0x00000028, 0x00000069, 0x00000029, 0x00000028, + 0x0000006A, 0x00000029, 0x00000028, 0x0000006B, + 0x00000029, 0x00000028, 0x0000006C, 0x00000029, + 0x00000028, 0x0000006D, 0x00000029, 0x00000028, + 0x0000006E, 0x00000029, 0x00000028, 0x0000006F, + 0x00000029, 0x00000028, 0x00000070, 0x00000029, + 0x00000028, 0x00000071, 0x00000029, 0x00000028, + 0x00000072, 0x00000029, 0x00000028, 0x00000073, + 0x00000029, 0x00000028, 0x00000074, 0x00000029, + 0x00000028, 0x00000075, 0x00000029, 0x00000028, + 0x00000076, 0x00000029, 0x00000028, 0x00000077, + 0x00000029, 0x00000028, 0x00000078, 0x00000029, + 0x00000028, 0x00000079, 0x00000029, 0x00000028, + 0x0000007A, 0x00000029, 0x0000222B, 0x0000222B, + 0x0000222B, 0x0000222B, 0x0000003A, 0x0000003A, + 0x0000003D, 0x0000003D, 0x0000003D, 0x0000003D, + 0x0000003D, 0x0000003D, 0x00000020, 0x00003099, + 0x00000020, 0x0000309A, 0x00003088, 0x0000308A, + 0x000030B3, 0x000030C8, 0x00000028, 0x00001100, + 0x00000029, 0x00000028, 0x00001102, 0x00000029, + 0x00000028, 0x00001103, 0x00000029, 0x00000028, + 0x00001105, 0x00000029, 0x00000028, 0x00001106, + 0x00000029, 0x00000028, 0x00001107, 0x00000029, + 0x00000028, 0x00001109, 0x00000029, 0x00000028, + 0x0000110B, 0x00000029, 0x00000028, 0x0000110C, + 0x00000029, 0x00000028, 0x0000110E, 0x00000029, + 0x00000028, 0x0000110F, 0x00000029, 0x00000028, + 0x00001110, 0x00000029, 0x00000028, 0x00001111, + 0x00000029, 0x00000028, 0x00001112, 0x00000029, + 0x00000028, 0x00001100, 0x00001161, 0x00000029, + 0x00000028, 0x00001102, 0x00001161, 0x00000029, + 0x00000028, 0x00001103, 0x00001161, 0x00000029, + 0x00000028, 0x00001105, 0x00001161, 0x00000029, + 0x00000028, 0x00001106, 0x00001161, 0x00000029, + 0x00000028, 0x00001107, 0x00001161, 0x00000029, + 0x00000028, 0x00001109, 0x00001161, 0x00000029, + 0x00000028, 0x0000110B, 0x00001161, 0x00000029, + 0x00000028, 0x0000110C, 0x00001161, 0x00000029, + 0x00000028, 0x0000110E, 0x00001161, 0x00000029, + 0x00000028, 0x0000110F, 0x00001161, 0x00000029, + 0x00000028, 0x00001110, 0x00001161, 0x00000029, + 0x00000028, 0x00001111, 0x00001161, 0x00000029, + 0x00000028, 0x00001112, 0x00001161, 0x00000029, + 0x00000028, 0x0000110C, 0x0000116E, 0x00000029, + 0x00000028, 0x0000110B, 0x00001169, 0x0000110C, + 0x00001165, 0x000011AB, 0x00000029, 0x00000028, + 0x0000110B, 0x00001169, 0x00001112, 0x0000116E, + 0x00000029, 0x00000028, 0x00004E00, 0x00000029, + 0x00000028, 0x00004E8C, 0x00000029, 0x00000028, + 0x00004E09, 0x00000029, 0x00000028, 0x000056DB, + 0x00000029, 0x00000028, 0x00004E94, 0x00000029, + 0x00000028, 0x0000516D, 0x00000029, 0x00000028, + 0x00004E03, 0x00000029, 0x00000028, 0x0000516B, + 0x00000029, 0x00000028, 0x00004E5D, 0x00000029, + 0x00000028, 0x00005341, 0x00000029, 0x00000028, + 0x00006708, 0x00000029, 0x00000028, 0x0000706B, + 0x00000029, 0x00000028, 0x00006C34, 0x00000029, + 0x00000028, 0x00006728, 0x00000029, 0x00000028, + 0x000091D1, 0x00000029, 0x00000028, 0x0000571F, + 0x00000029, 0x00000028, 0x000065E5, 0x00000029, + 0x00000028, 0x0000682A, 0x00000029, 0x00000028, + 0x00006709, 0x00000029, 0x00000028, 0x0000793E, + 0x00000029, 0x00000028, 0x0000540D, 0x00000029, + 0x00000028, 0x00007279, 0x00000029, 0x00000028, + 0x00008CA1, 0x00000029, 0x00000028, 0x0000795D, + 0x00000029, 0x00000028, 0x000052B4, 0x00000029, + 0x00000028, 0x00004EE3, 0x00000029, 0x00000028, + 0x0000547C, 0x00000029, 0x00000028, 0x00005B66, + 0x00000029, 0x00000028, 0x000076E3, 0x00000029, + 0x00000028, 0x00004F01, 0x00000029, 0x00000028, + 0x00008CC7, 0x00000029, 0x00000028, 0x00005354, + 0x00000029, 0x00000028, 0x0000796D, 0x00000029, + 0x00000028, 0x00004F11, 0x00000029, 0x00000028, + 0x000081EA, 0x00000029, 0x00000028, 0x000081F3, + 0x00000029, 0x00000050, 0x00000054, 0x00000045, + 0x00000032, 0x00000031, 0x00000032, 0x00000032, + 0x00000032, 0x00000033, 0x00000032, 0x00000034, + 0x00000032, 0x00000035, 0x00000032, 0x00000036, + 0x00000032, 0x00000037, 0x00000032, 0x00000038, + 0x00000032, 0x00000039, 0x00000033, 0x00000030, + 0x00000033, 0x00000031, 0x00000033, 0x00000032, + 0x00000033, 0x00000033, 0x00000033, 0x00000034, + 0x00000033, 0x00000035, 0x00001100, 0x00001161, + 0x00001102, 0x00001161, 0x00001103, 0x00001161, + 0x00001105, 0x00001161, 0x00001106, 0x00001161, + 0x00001107, 0x00001161, 0x00001109, 0x00001161, + 0x0000110B, 0x00001161, 0x0000110C, 0x00001161, + 0x0000110E, 0x00001161, 0x0000110F, 0x00001161, + 0x00001110, 0x00001161, 0x00001111, 0x00001161, + 0x00001112, 0x00001161, 0x0000110E, 0x00001161, + 0x000011B7, 0x00001100, 0x00001169, 0x0000110C, + 0x0000116E, 0x0000110B, 0x00001174, 0x0000110B, + 0x0000116E, 0x00000033, 0x00000036, 0x00000033, + 0x00000037, 0x00000033, 0x00000038, 0x00000033, + 0x00000039, 0x00000034, 0x00000030, 0x00000034, + 0x00000031, 0x00000034, 0x00000032, 0x00000034, + 0x00000033, 0x00000034, 0x00000034, 0x00000034, + 0x00000035, 0x00000034, 0x00000036, 0x00000034, + 0x00000037, 0x00000034, 0x00000038, 0x00000034, + 0x00000039, 0x00000035, 0x00000030, 0x00000031, + 0x00006708, 0x00000032, 0x00006708, 0x00000033, + 0x00006708, 0x00000034, 0x00006708, 0x00000035, + 0x00006708, 0x00000036, 0x00006708, 0x00000037, + 0x00006708, 0x00000038, 0x00006708, 0x00000039, + 0x00006708, 0x00000031, 0x00000030, 0x00006708, + 0x00000031, 0x00000031, 0x00006708, 0x00000031, + 0x00000032, 0x00006708, 0x00000048, 0x00000067, + 0x00000065, 0x00000072, 0x00000067, 0x00000065, + 0x00000056, 0x0000004C, 0x00000054, 0x00000044, + 0x00004EE4, 0x0000548C, 0x000030A2, 0x000030D1, + 0x000030FC, 0x000030C8, 0x000030A2, 0x000030EB, + 0x000030D5, 0x000030A1, 0x000030A2, 0x000030F3, + 0x000030DA, 0x000030A2, 0x000030A2, 0x000030FC, + 0x000030EB, 0x000030A4, 0x000030CB, 0x000030F3, + 0x000030B0, 0x000030A4, 0x000030F3, 0x000030C1, + 0x000030A6, 0x000030A9, 0x000030F3, 0x000030A8, + 0x000030B9, 0x000030AF, 0x000030FC, 0x000030C9, + 0x000030A8, 0x000030FC, 0x000030AB, 0x000030FC, + 0x000030AA, 0x000030F3, 0x000030B9, 0x000030AA, + 0x000030FC, 0x000030E0, 0x000030AB, 0x000030A4, + 0x000030EA, 0x000030AB, 0x000030E9, 0x000030C3, + 0x000030C8, 0x000030AB, 0x000030ED, 0x000030EA, + 0x000030FC, 0x000030AC, 0x000030ED, 0x000030F3, + 0x000030AC, 0x000030F3, 0x000030DE, 0x000030AE, + 0x000030AC, 0x000030AE, 0x000030CB, 0x000030FC, + 0x000030AD, 0x000030E5, 0x000030EA, 0x000030FC, + 0x000030AE, 0x000030EB, 0x000030C0, 0x000030FC, + 0x000030AD, 0x000030ED, 0x000030AD, 0x000030ED, + 0x000030B0, 0x000030E9, 0x000030E0, 0x000030AD, + 0x000030ED, 0x000030E1, 0x000030FC, 0x000030C8, + 0x000030EB, 0x000030AD, 0x000030ED, 0x000030EF, + 0x000030C3, 0x000030C8, 0x000030B0, 0x000030E9, + 0x000030E0, 0x000030B0, 0x000030E9, 0x000030E0, + 0x000030C8, 0x000030F3, 0x000030AF, 0x000030EB, + 0x000030BC, 0x000030A4, 0x000030ED, 0x000030AF, + 0x000030ED, 0x000030FC, 0x000030CD, 0x000030B1, + 0x000030FC, 0x000030B9, 0x000030B3, 0x000030EB, + 0x000030CA, 0x000030B3, 0x000030FC, 0x000030DD, + 0x000030B5, 0x000030A4, 0x000030AF, 0x000030EB, + 0x000030B5, 0x000030F3, 0x000030C1, 0x000030FC, + 0x000030E0, 0x000030B7, 0x000030EA, 0x000030F3, + 0x000030B0, 0x000030BB, 0x000030F3, 0x000030C1, + 0x000030BB, 0x000030F3, 0x000030C8, 0x000030C0, + 0x000030FC, 0x000030B9, 0x000030C7, 0x000030B7, + 0x000030C9, 0x000030EB, 0x000030C8, 0x000030F3, + 0x000030CA, 0x000030CE, 0x000030CE, 0x000030C3, + 0x000030C8, 0x000030CF, 0x000030A4, 0x000030C4, + 0x000030D1, 0x000030FC, 0x000030BB, 0x000030F3, + 0x000030C8, 0x000030D1, 0x000030FC, 0x000030C4, + 0x000030D0, 0x000030FC, 0x000030EC, 0x000030EB, + 0x000030D4, 0x000030A2, 0x000030B9, 0x000030C8, + 0x000030EB, 0x000030D4, 0x000030AF, 0x000030EB, + 0x000030D4, 0x000030B3, 0x000030D3, 0x000030EB, + 0x000030D5, 0x000030A1, 0x000030E9, 0x000030C3, + 0x000030C9, 0x000030D5, 0x000030A3, 0x000030FC, + 0x000030C8, 0x000030D6, 0x000030C3, 0x000030B7, + 0x000030A7, 0x000030EB, 0x000030D5, 0x000030E9, + 0x000030F3, 0x000030D8, 0x000030AF, 0x000030BF, + 0x000030FC, 0x000030EB, 0x000030DA, 0x000030BD, + 0x000030DA, 0x000030CB, 0x000030D2, 0x000030D8, + 0x000030EB, 0x000030C4, 0x000030DA, 0x000030F3, + 0x000030B9, 0x000030DA, 0x000030FC, 0x000030B8, + 0x000030D9, 0x000030FC, 0x000030BF, 0x000030DD, + 0x000030A4, 0x000030F3, 0x000030C8, 0x000030DC, + 0x000030EB, 0x000030C8, 0x000030DB, 0x000030F3, + 0x000030DD, 0x000030F3, 0x000030C9, 0x000030DB, + 0x000030FC, 0x000030EB, 0x000030DB, 0x000030FC, + 0x000030F3, 0x000030DE, 0x000030A4, 0x000030AF, + 0x000030ED, 0x000030DE, 0x000030A4, 0x000030EB, + 0x000030DE, 0x000030C3, 0x000030CF, 0x000030DE, + 0x000030EB, 0x000030AF, 0x000030DE, 0x000030F3, + 0x000030B7, 0x000030E7, 0x000030F3, 0x000030DF, + 0x000030AF, 0x000030ED, 0x000030F3, 0x000030DF, + 0x000030EA, 0x000030DF, 0x000030EA, 0x000030D0, + 0x000030FC, 0x000030EB, 0x000030E1, 0x000030AC, + 0x000030E1, 0x000030AC, 0x000030C8, 0x000030F3, + 0x000030E1, 0x000030FC, 0x000030C8, 0x000030EB, + 0x000030E4, 0x000030FC, 0x000030C9, 0x000030E4, + 0x000030FC, 0x000030EB, 0x000030E6, 0x000030A2, + 0x000030F3, 0x000030EA, 0x000030C3, 0x000030C8, + 0x000030EB, 0x000030EA, 0x000030E9, 0x000030EB, + 0x000030D4, 0x000030FC, 0x000030EB, 0x000030FC, + 0x000030D6, 0x000030EB, 0x000030EC, 0x000030E0, + 0x000030EC, 0x000030F3, 0x000030C8, 0x000030B2, + 0x000030F3, 0x000030EF, 0x000030C3, 0x000030C8, + 0x00000030, 0x000070B9, 0x00000031, 0x000070B9, + 0x00000032, 0x000070B9, 0x00000033, 0x000070B9, + 0x00000034, 0x000070B9, 0x00000035, 0x000070B9, + 0x00000036, 0x000070B9, 0x00000037, 0x000070B9, + 0x00000038, 0x000070B9, 0x00000039, 0x000070B9, + 0x00000031, 0x00000030, 0x000070B9, 0x00000031, + 0x00000031, 0x000070B9, 0x00000031, 0x00000032, + 0x000070B9, 0x00000031, 0x00000033, 0x000070B9, + 0x00000031, 0x00000034, 0x000070B9, 0x00000031, + 0x00000035, 0x000070B9, 0x00000031, 0x00000036, + 0x000070B9, 0x00000031, 0x00000037, 0x000070B9, + 0x00000031, 0x00000038, 0x000070B9, 0x00000031, + 0x00000039, 0x000070B9, 0x00000032, 0x00000030, + 0x000070B9, 0x00000032, 0x00000031, 0x000070B9, + 0x00000032, 0x00000032, 0x000070B9, 0x00000032, + 0x00000033, 0x000070B9, 0x00000032, 0x00000034, + 0x000070B9, 0x00000068, 0x00000050, 0x00000061, + 0x00000064, 0x00000061, 0x00000041, 0x00000055, + 0x00000062, 0x00000061, 0x00000072, 0x0000006F, + 0x00000056, 0x00000070, 0x00000063, 0x00000064, + 0x0000006D, 0x00000064, 0x0000006D, 0x000000B2, + 0x00000064, 0x0000006D, 0x000000B3, 0x00000049, + 0x00000055, 0x00005E73, 0x00006210, 0x0000662D, + 0x0000548C, 0x00005927, 0x00006B63, 0x0000660E, + 0x00006CBB, 0x0000682A, 0x00005F0F, 0x00004F1A, + 0x0000793E, 0x00000070, 0x00000041, 0x0000006E, + 0x00000041, 0x000003BC, 0x00000041, 0x0000006D, + 0x00000041, 0x0000006B, 0x00000041, 0x0000004B, + 0x00000042, 0x0000004D, 0x00000042, 0x00000047, + 0x00000042, 0x00000063, 0x00000061, 0x0000006C, + 0x0000006B, 0x00000063, 0x00000061, 0x0000006C, + 0x00000070, 0x00000046, 0x0000006E, 0x00000046, + 0x000003BC, 0x00000046, 0x000003BC, 0x00000067, + 0x0000006D, 0x00000067, 0x0000006B, 0x00000067, + 0x00000048, 0x0000007A, 0x0000006B, 0x00000048, + 0x0000007A, 0x0000004D, 0x00000048, 0x0000007A, + 0x00000047, 0x00000048, 0x0000007A, 0x00000054, + 0x00000048, 0x0000007A, 0x000003BC, 0x00002113, + 0x0000006D, 0x00002113, 0x00000064, 0x00002113, + 0x0000006B, 0x00002113, 0x00000066, 0x0000006D, + 0x0000006E, 0x0000006D, 0x000003BC, 0x0000006D, + 0x0000006D, 0x0000006D, 0x00000063, 0x0000006D, + 0x0000006B, 0x0000006D, 0x0000006D, 0x0000006D, + 0x000000B2, 0x00000063, 0x0000006D, 0x000000B2, + 0x0000006D, 0x000000B2, 0x0000006B, 0x0000006D, + 0x000000B2, 0x0000006D, 0x0000006D, 0x000000B3, + 0x00000063, 0x0000006D, 0x000000B3, 0x0000006D, + 0x000000B3, 0x0000006B, 0x0000006D, 0x000000B3, + 0x0000006D, 0x00002215, 0x00000073, 0x0000006D, + 0x00002215, 0x00000073, 0x000000B2, 0x00000050, + 0x00000061, 0x0000006B, 0x00000050, 0x00000061, + 0x0000004D, 0x00000050, 0x00000061, 0x00000047, + 0x00000050, 0x00000061, 0x00000072, 0x00000061, + 0x00000064, 0x00000072, 0x00000061, 0x00000064, + 0x00002215, 0x00000073, 0x00000072, 0x00000061, + 0x00000064, 0x00002215, 0x00000073, 0x000000B2, + 0x00000070, 0x00000073, 0x0000006E, 0x00000073, + 0x000003BC, 0x00000073, 0x0000006D, 0x00000073, + 0x00000070, 0x00000056, 0x0000006E, 0x00000056, + 0x000003BC, 0x00000056, 0x0000006D, 0x00000056, + 0x0000006B, 0x00000056, 0x0000004D, 0x00000056, + 0x00000070, 0x00000057, 0x0000006E, 0x00000057, + 0x000003BC, 0x00000057, 0x0000006D, 0x00000057, + 0x0000006B, 0x00000057, 0x0000004D, 0x00000057, + 0x0000006B, 0x000003A9, 0x0000004D, 0x000003A9, + 0x00000061, 0x0000002E, 0x0000006D, 0x0000002E, + 0x00000042, 0x00000071, 0x00000063, 0x00000063, + 0x00000063, 0x00000064, 0x00000043, 0x00002215, + 0x0000006B, 0x00000067, 0x00000043, 0x0000006F, + 0x0000002E, 0x00000064, 0x00000042, 0x00000047, + 0x00000079, 0x00000068, 0x00000061, 0x00000048, + 0x00000050, 0x00000069, 0x0000006E, 0x0000004B, + 0x0000004B, 0x0000004B, 0x0000004D, 0x0000006B, + 0x00000074, 0x0000006C, 0x0000006D, 0x0000006C, + 0x0000006E, 0x0000006C, 0x0000006F, 0x00000067, + 0x0000006C, 0x00000078, 0x0000006D, 0x00000062, + 0x0000006D, 0x00000069, 0x0000006C, 0x0000006D, + 0x0000006F, 0x0000006C, 0x00000050, 0x00000048, + 0x00000070, 0x0000002E, 0x0000006D, 0x0000002E, + 0x00000050, 0x00000050, 0x0000004D, 0x00000050, + 0x00000052, 0x00000073, 0x00000072, 0x00000053, + 0x00000076, 0x00000057, 0x00000062, 0x00000056, + 0x00002215, 0x0000006D, 0x00000041, 0x00002215, + 0x0000006D, 0x00000031, 0x000065E5, 0x00000032, + 0x000065E5, 0x00000033, 0x000065E5, 0x00000034, + 0x000065E5, 0x00000035, 0x000065E5, 0x00000036, + 0x000065E5, 0x00000037, 0x000065E5, 0x00000038, + 0x000065E5, 0x00000039, 0x000065E5, 0x00000031, + 0x00000030, 0x000065E5, 0x00000031, 0x00000031, + 0x000065E5, 0x00000031, 0x00000032, 0x000065E5, + 0x00000031, 0x00000033, 0x000065E5, 0x00000031, + 0x00000034, 0x000065E5, 0x00000031, 0x00000035, + 0x000065E5, 0x00000031, 0x00000036, 0x000065E5, + 0x00000031, 0x00000037, 0x000065E5, 0x00000031, + 0x00000038, 0x000065E5, 0x00000031, 0x00000039, + 0x000065E5, 0x00000032, 0x00000030, 0x000065E5, + 0x00000032, 0x00000031, 0x000065E5, 0x00000032, + 0x00000032, 0x000065E5, 0x00000032, 0x00000033, + 0x000065E5, 0x00000032, 0x00000034, 0x000065E5, + 0x00000032, 0x00000035, 0x000065E5, 0x00000032, + 0x00000036, 0x000065E5, 0x00000032, 0x00000037, + 0x000065E5, 0x00000032, 0x00000038, 0x000065E5, + 0x00000032, 0x00000039, 0x000065E5, 0x00000033, + 0x00000030, 0x000065E5, 0x00000033, 0x00000031, + 0x000065E5, 0x00000067, 0x00000061, 0x0000006C, + 0x00000066, 0x00000066, 0x00000066, 0x00000069, + 0x00000066, 0x0000006C, 0x00000066, 0x00000066, + 0x00000069, 0x00000066, 0x00000066, 0x0000006C, + 0x0000017F, 0x00000074, 0x00000073, 0x00000074, + 0x00000574, 0x00000576, 0x00000574, 0x00000565, + 0x00000574, 0x0000056B, 0x0000057E, 0x00000576, + 0x00000574, 0x0000056D, 0x000005D0, 0x000005DC, + 0x00000626, 0x00000627, 0x00000626, 0x00000627, + 0x00000626, 0x000006D5, 0x00000626, 0x000006D5, + 0x00000626, 0x00000648, 0x00000626, 0x00000648, + 0x00000626, 0x000006C7, 0x00000626, 0x000006C7, + 0x00000626, 0x000006C6, 0x00000626, 0x000006C6, + 0x00000626, 0x000006C8, 0x00000626, 0x000006C8, + 0x00000626, 0x000006D0, 0x00000626, 0x000006D0, + 0x00000626, 0x000006D0, 0x00000626, 0x00000649, + 0x00000626, 0x00000649, 0x00000626, 0x00000649, + 0x00000626, 0x0000062C, 0x00000626, 0x0000062D, + 0x00000626, 0x00000645, 0x00000626, 0x00000649, + 0x00000626, 0x0000064A, 0x00000628, 0x0000062C, + 0x00000628, 0x0000062D, 0x00000628, 0x0000062E, + 0x00000628, 0x00000645, 0x00000628, 0x00000649, + 0x00000628, 0x0000064A, 0x0000062A, 0x0000062C, + 0x0000062A, 0x0000062D, 0x0000062A, 0x0000062E, + 0x0000062A, 0x00000645, 0x0000062A, 0x00000649, + 0x0000062A, 0x0000064A, 0x0000062B, 0x0000062C, + 0x0000062B, 0x00000645, 0x0000062B, 0x00000649, + 0x0000062B, 0x0000064A, 0x0000062C, 0x0000062D, + 0x0000062C, 0x00000645, 0x0000062D, 0x0000062C, + 0x0000062D, 0x00000645, 0x0000062E, 0x0000062C, + 0x0000062E, 0x0000062D, 0x0000062E, 0x00000645, + 0x00000633, 0x0000062C, 0x00000633, 0x0000062D, + 0x00000633, 0x0000062E, 0x00000633, 0x00000645, + 0x00000635, 0x0000062D, 0x00000635, 0x00000645, + 0x00000636, 0x0000062C, 0x00000636, 0x0000062D, + 0x00000636, 0x0000062E, 0x00000636, 0x00000645, + 0x00000637, 0x0000062D, 0x00000637, 0x00000645, + 0x00000638, 0x00000645, 0x00000639, 0x0000062C, + 0x00000639, 0x00000645, 0x0000063A, 0x0000062C, + 0x0000063A, 0x00000645, 0x00000641, 0x0000062C, + 0x00000641, 0x0000062D, 0x00000641, 0x0000062E, + 0x00000641, 0x00000645, 0x00000641, 0x00000649, + 0x00000641, 0x0000064A, 0x00000642, 0x0000062D, + 0x00000642, 0x00000645, 0x00000642, 0x00000649, + 0x00000642, 0x0000064A, 0x00000643, 0x00000627, + 0x00000643, 0x0000062C, 0x00000643, 0x0000062D, + 0x00000643, 0x0000062E, 0x00000643, 0x00000644, + 0x00000643, 0x00000645, 0x00000643, 0x00000649, + 0x00000643, 0x0000064A, 0x00000644, 0x0000062C, + 0x00000644, 0x0000062D, 0x00000644, 0x0000062E, + 0x00000644, 0x00000645, 0x00000644, 0x00000649, + 0x00000644, 0x0000064A, 0x00000645, 0x0000062C, + 0x00000645, 0x0000062D, 0x00000645, 0x0000062E, + 0x00000645, 0x00000645, 0x00000645, 0x00000649, + 0x00000645, 0x0000064A, 0x00000646, 0x0000062C, + 0x00000646, 0x0000062D, 0x00000646, 0x0000062E, + 0x00000646, 0x00000645, 0x00000646, 0x00000649, + 0x00000646, 0x0000064A, 0x00000647, 0x0000062C, + 0x00000647, 0x00000645, 0x00000647, 0x00000649, + 0x00000647, 0x0000064A, 0x0000064A, 0x0000062C, + 0x0000064A, 0x0000062D, 0x0000064A, 0x0000062E, + 0x0000064A, 0x00000645, 0x0000064A, 0x00000649, + 0x0000064A, 0x0000064A, 0x00000630, 0x00000670, + 0x00000631, 0x00000670, 0x00000649, 0x00000670, + 0x00000020, 0x0000064C, 0x00000651, 0x00000020, + 0x0000064D, 0x00000651, 0x00000020, 0x0000064E, + 0x00000651, 0x00000020, 0x0000064F, 0x00000651, + 0x00000020, 0x00000650, 0x00000651, 0x00000020, + 0x00000651, 0x00000670, 0x00000626, 0x00000631, + 0x00000626, 0x00000632, 0x00000626, 0x00000645, + 0x00000626, 0x00000646, 0x00000626, 0x00000649, + 0x00000626, 0x0000064A, 0x00000628, 0x00000631, + 0x00000628, 0x00000632, 0x00000628, 0x00000645, + 0x00000628, 0x00000646, 0x00000628, 0x00000649, + 0x00000628, 0x0000064A, 0x0000062A, 0x00000631, + 0x0000062A, 0x00000632, 0x0000062A, 0x00000645, + 0x0000062A, 0x00000646, 0x0000062A, 0x00000649, + 0x0000062A, 0x0000064A, 0x0000062B, 0x00000631, + 0x0000062B, 0x00000632, 0x0000062B, 0x00000645, + 0x0000062B, 0x00000646, 0x0000062B, 0x00000649, + 0x0000062B, 0x0000064A, 0x00000641, 0x00000649, + 0x00000641, 0x0000064A, 0x00000642, 0x00000649, + 0x00000642, 0x0000064A, 0x00000643, 0x00000627, + 0x00000643, 0x00000644, 0x00000643, 0x00000645, + 0x00000643, 0x00000649, 0x00000643, 0x0000064A, + 0x00000644, 0x00000645, 0x00000644, 0x00000649, + 0x00000644, 0x0000064A, 0x00000645, 0x00000627, + 0x00000645, 0x00000645, 0x00000646, 0x00000631, + 0x00000646, 0x00000632, 0x00000646, 0x00000645, + 0x00000646, 0x00000646, 0x00000646, 0x00000649, + 0x00000646, 0x0000064A, 0x00000649, 0x00000670, + 0x0000064A, 0x00000631, 0x0000064A, 0x00000632, + 0x0000064A, 0x00000645, 0x0000064A, 0x00000646, + 0x0000064A, 0x00000649, 0x0000064A, 0x0000064A, + 0x00000626, 0x0000062C, 0x00000626, 0x0000062D, + 0x00000626, 0x0000062E, 0x00000626, 0x00000645, + 0x00000626, 0x00000647, 0x00000628, 0x0000062C, + 0x00000628, 0x0000062D, 0x00000628, 0x0000062E, + 0x00000628, 0x00000645, 0x00000628, 0x00000647, + 0x0000062A, 0x0000062C, 0x0000062A, 0x0000062D, + 0x0000062A, 0x0000062E, 0x0000062A, 0x00000645, + 0x0000062A, 0x00000647, 0x0000062B, 0x00000645, + 0x0000062C, 0x0000062D, 0x0000062C, 0x00000645, + 0x0000062D, 0x0000062C, 0x0000062D, 0x00000645, + 0x0000062E, 0x0000062C, 0x0000062E, 0x00000645, + 0x00000633, 0x0000062C, 0x00000633, 0x0000062D, + 0x00000633, 0x0000062E, 0x00000633, 0x00000645, + 0x00000635, 0x0000062D, 0x00000635, 0x0000062E, + 0x00000635, 0x00000645, 0x00000636, 0x0000062C, + 0x00000636, 0x0000062D, 0x00000636, 0x0000062E, + 0x00000636, 0x00000645, 0x00000637, 0x0000062D, + 0x00000638, 0x00000645, 0x00000639, 0x0000062C, + 0x00000639, 0x00000645, 0x0000063A, 0x0000062C, + 0x0000063A, 0x00000645, 0x00000641, 0x0000062C, + 0x00000641, 0x0000062D, 0x00000641, 0x0000062E, + 0x00000641, 0x00000645, 0x00000642, 0x0000062D, + 0x00000642, 0x00000645, 0x00000643, 0x0000062C, + 0x00000643, 0x0000062D, 0x00000643, 0x0000062E, + 0x00000643, 0x00000644, 0x00000643, 0x00000645, + 0x00000644, 0x0000062C, 0x00000644, 0x0000062D, + 0x00000644, 0x0000062E, 0x00000644, 0x00000645, + 0x00000644, 0x00000647, 0x00000645, 0x0000062C, + 0x00000645, 0x0000062D, 0x00000645, 0x0000062E, + 0x00000645, 0x00000645, 0x00000646, 0x0000062C, + 0x00000646, 0x0000062D, 0x00000646, 0x0000062E, + 0x00000646, 0x00000645, 0x00000646, 0x00000647, + 0x00000647, 0x0000062C, 0x00000647, 0x00000645, + 0x00000647, 0x00000670, 0x0000064A, 0x0000062C, + 0x0000064A, 0x0000062D, 0x0000064A, 0x0000062E, + 0x0000064A, 0x00000645, 0x0000064A, 0x00000647, + 0x00000626, 0x00000645, 0x00000626, 0x00000647, + 0x00000628, 0x00000645, 0x00000628, 0x00000647, + 0x0000062A, 0x00000645, 0x0000062A, 0x00000647, + 0x0000062B, 0x00000645, 0x0000062B, 0x00000647, + 0x00000633, 0x00000645, 0x00000633, 0x00000647, + 0x00000634, 0x00000645, 0x00000634, 0x00000647, + 0x00000643, 0x00000644, 0x00000643, 0x00000645, + 0x00000644, 0x00000645, 0x00000646, 0x00000645, + 0x00000646, 0x00000647, 0x0000064A, 0x00000645, + 0x0000064A, 0x00000647, 0x00000640, 0x0000064E, + 0x00000651, 0x00000640, 0x0000064F, 0x00000651, + 0x00000640, 0x00000650, 0x00000651, 0x00000637, + 0x00000649, 0x00000637, 0x0000064A, 0x00000639, + 0x00000649, 0x00000639, 0x0000064A, 0x0000063A, + 0x00000649, 0x0000063A, 0x0000064A, 0x00000633, + 0x00000649, 0x00000633, 0x0000064A, 0x00000634, + 0x00000649, 0x00000634, 0x0000064A, 0x0000062D, + 0x00000649, 0x0000062D, 0x0000064A, 0x0000062C, + 0x00000649, 0x0000062C, 0x0000064A, 0x0000062E, + 0x00000649, 0x0000062E, 0x0000064A, 0x00000635, + 0x00000649, 0x00000635, 0x0000064A, 0x00000636, + 0x00000649, 0x00000636, 0x0000064A, 0x00000634, + 0x0000062C, 0x00000634, 0x0000062D, 0x00000634, + 0x0000062E, 0x00000634, 0x00000645, 0x00000634, + 0x00000631, 0x00000633, 0x00000631, 0x00000635, + 0x00000631, 0x00000636, 0x00000631, 0x00000637, + 0x00000649, 0x00000637, 0x0000064A, 0x00000639, + 0x00000649, 0x00000639, 0x0000064A, 0x0000063A, + 0x00000649, 0x0000063A, 0x0000064A, 0x00000633, + 0x00000649, 0x00000633, 0x0000064A, 0x00000634, + 0x00000649, 0x00000634, 0x0000064A, 0x0000062D, + 0x00000649, 0x0000062D, 0x0000064A, 0x0000062C, + 0x00000649, 0x0000062C, 0x0000064A, 0x0000062E, + 0x00000649, 0x0000062E, 0x0000064A, 0x00000635, + 0x00000649, 0x00000635, 0x0000064A, 0x00000636, + 0x00000649, 0x00000636, 0x0000064A, 0x00000634, + 0x0000062C, 0x00000634, 0x0000062D, 0x00000634, + 0x0000062E, 0x00000634, 0x00000645, 0x00000634, + 0x00000631, 0x00000633, 0x00000631, 0x00000635, + 0x00000631, 0x00000636, 0x00000631, 0x00000634, + 0x0000062C, 0x00000634, 0x0000062D, 0x00000634, + 0x0000062E, 0x00000634, 0x00000645, 0x00000633, + 0x00000647, 0x00000634, 0x00000647, 0x00000637, + 0x00000645, 0x00000633, 0x0000062C, 0x00000633, + 0x0000062D, 0x00000633, 0x0000062E, 0x00000634, + 0x0000062C, 0x00000634, 0x0000062D, 0x00000634, + 0x0000062E, 0x00000637, 0x00000645, 0x00000638, + 0x00000645, 0x00000627, 0x0000064B, 0x00000627, + 0x0000064B, 0x0000062A, 0x0000062C, 0x00000645, + 0x0000062A, 0x0000062D, 0x0000062C, 0x0000062A, + 0x0000062D, 0x0000062C, 0x0000062A, 0x0000062D, + 0x00000645, 0x0000062A, 0x0000062E, 0x00000645, + 0x0000062A, 0x00000645, 0x0000062C, 0x0000062A, + 0x00000645, 0x0000062D, 0x0000062A, 0x00000645, + 0x0000062E, 0x0000062C, 0x00000645, 0x0000062D, + 0x0000062C, 0x00000645, 0x0000062D, 0x0000062D, + 0x00000645, 0x0000064A, 0x0000062D, 0x00000645, + 0x00000649, 0x00000633, 0x0000062D, 0x0000062C, + 0x00000633, 0x0000062C, 0x0000062D, 0x00000633, + 0x0000062C, 0x00000649, 0x00000633, 0x00000645, + 0x0000062D, 0x00000633, 0x00000645, 0x0000062D, + 0x00000633, 0x00000645, 0x0000062C, 0x00000633, + 0x00000645, 0x00000645, 0x00000633, 0x00000645, + 0x00000645, 0x00000635, 0x0000062D, 0x0000062D, + 0x00000635, 0x0000062D, 0x0000062D, 0x00000635, + 0x00000645, 0x00000645, 0x00000634, 0x0000062D, + 0x00000645, 0x00000634, 0x0000062D, 0x00000645, + 0x00000634, 0x0000062C, 0x0000064A, 0x00000634, + 0x00000645, 0x0000062E, 0x00000634, 0x00000645, + 0x0000062E, 0x00000634, 0x00000645, 0x00000645, + 0x00000634, 0x00000645, 0x00000645, 0x00000636, + 0x0000062D, 0x00000649, 0x00000636, 0x0000062E, + 0x00000645, 0x00000636, 0x0000062E, 0x00000645, + 0x00000637, 0x00000645, 0x0000062D, 0x00000637, + 0x00000645, 0x0000062D, 0x00000637, 0x00000645, + 0x00000645, 0x00000637, 0x00000645, 0x0000064A, + 0x00000639, 0x0000062C, 0x00000645, 0x00000639, + 0x00000645, 0x00000645, 0x00000639, 0x00000645, + 0x00000645, 0x00000639, 0x00000645, 0x00000649, + 0x0000063A, 0x00000645, 0x00000645, 0x0000063A, + 0x00000645, 0x0000064A, 0x0000063A, 0x00000645, + 0x00000649, 0x00000641, 0x0000062E, 0x00000645, + 0x00000641, 0x0000062E, 0x00000645, 0x00000642, + 0x00000645, 0x0000062D, 0x00000642, 0x00000645, + 0x00000645, 0x00000644, 0x0000062D, 0x00000645, + 0x00000644, 0x0000062D, 0x0000064A, 0x00000644, + 0x0000062D, 0x00000649, 0x00000644, 0x0000062C, + 0x0000062C, 0x00000644, 0x0000062C, 0x0000062C, + 0x00000644, 0x0000062E, 0x00000645, 0x00000644, + 0x0000062E, 0x00000645, 0x00000644, 0x00000645, + 0x0000062D, 0x00000644, 0x00000645, 0x0000062D, + 0x00000645, 0x0000062D, 0x0000062C, 0x00000645, + 0x0000062D, 0x00000645, 0x00000645, 0x0000062D, + 0x0000064A, 0x00000645, 0x0000062C, 0x0000062D, + 0x00000645, 0x0000062C, 0x00000645, 0x00000645, + 0x0000062E, 0x0000062C, 0x00000645, 0x0000062E, + 0x00000645, 0x00000645, 0x0000062C, 0x0000062E, + 0x00000647, 0x00000645, 0x0000062C, 0x00000647, + 0x00000645, 0x00000645, 0x00000646, 0x0000062D, + 0x00000645, 0x00000646, 0x0000062D, 0x00000649, + 0x00000646, 0x0000062C, 0x00000645, 0x00000646, + 0x0000062C, 0x00000645, 0x00000646, 0x0000062C, + 0x00000649, 0x00000646, 0x00000645, 0x0000064A, + 0x00000646, 0x00000645, 0x00000649, 0x0000064A, + 0x00000645, 0x00000645, 0x0000064A, 0x00000645, + 0x00000645, 0x00000628, 0x0000062E, 0x0000064A, + 0x0000062A, 0x0000062C, 0x0000064A, 0x0000062A, + 0x0000062C, 0x00000649, 0x0000062A, 0x0000062E, + 0x0000064A, 0x0000062A, 0x0000062E, 0x00000649, + 0x0000062A, 0x00000645, 0x0000064A, 0x0000062A, + 0x00000645, 0x00000649, 0x0000062C, 0x00000645, + 0x0000064A, 0x0000062C, 0x0000062D, 0x00000649, + 0x0000062C, 0x00000645, 0x00000649, 0x00000633, + 0x0000062E, 0x00000649, 0x00000635, 0x0000062D, + 0x0000064A, 0x00000634, 0x0000062D, 0x0000064A, + 0x00000636, 0x0000062D, 0x0000064A, 0x00000644, + 0x0000062C, 0x0000064A, 0x00000644, 0x00000645, + 0x0000064A, 0x0000064A, 0x0000062D, 0x0000064A, + 0x0000064A, 0x0000062C, 0x0000064A, 0x0000064A, + 0x00000645, 0x0000064A, 0x00000645, 0x00000645, + 0x0000064A, 0x00000642, 0x00000645, 0x0000064A, + 0x00000646, 0x0000062D, 0x0000064A, 0x00000642, + 0x00000645, 0x0000062D, 0x00000644, 0x0000062D, + 0x00000645, 0x00000639, 0x00000645, 0x0000064A, + 0x00000643, 0x00000645, 0x0000064A, 0x00000646, + 0x0000062C, 0x0000062D, 0x00000645, 0x0000062E, + 0x0000064A, 0x00000644, 0x0000062C, 0x00000645, + 0x00000643, 0x00000645, 0x00000645, 0x00000644, + 0x0000062C, 0x00000645, 0x00000646, 0x0000062C, + 0x0000062D, 0x0000062C, 0x0000062D, 0x0000064A, + 0x0000062D, 0x0000062C, 0x0000064A, 0x00000645, + 0x0000062C, 0x0000064A, 0x00000641, 0x00000645, + 0x0000064A, 0x00000628, 0x0000062D, 0x0000064A, + 0x00000643, 0x00000645, 0x00000645, 0x00000639, + 0x0000062C, 0x00000645, 0x00000635, 0x00000645, + 0x00000645, 0x00000633, 0x0000062E, 0x0000064A, + 0x00000646, 0x0000062C, 0x0000064A, 0x00000635, + 0x00000644, 0x000006D2, 0x00000642, 0x00000644, + 0x000006D2, 0x00000627, 0x00000644, 0x00000644, + 0x00000647, 0x00000627, 0x00000643, 0x00000628, + 0x00000631, 0x00000645, 0x0000062D, 0x00000645, + 0x0000062F, 0x00000635, 0x00000644, 0x00000639, + 0x00000645, 0x00000631, 0x00000633, 0x00000648, + 0x00000644, 0x00000639, 0x00000644, 0x0000064A, + 0x00000647, 0x00000648, 0x00000633, 0x00000644, + 0x00000645, 0x00000635, 0x00000644, 0x00000649, + 0x00000635, 0x00000644, 0x00000649, 0x00000020, + 0x00000627, 0x00000644, 0x00000644, 0x00000647, + 0x00000020, 0x00000639, 0x00000644, 0x0000064A, + 0x00000647, 0x00000020, 0x00000648, 0x00000633, + 0x00000644, 0x00000645, 0x0000062C, 0x00000644, + 0x00000020, 0x0000062C, 0x00000644, 0x00000627, + 0x00000644, 0x00000647, 0x00000631, 0x000006CC, + 0x00000627, 0x00000644, 0x00000020, 0x0000064B, + 0x00000640, 0x0000064B, 0x00000020, 0x0000064C, + 0x00000020, 0x0000064D, 0x00000020, 0x0000064E, + 0x00000640, 0x0000064E, 0x00000020, 0x0000064F, + 0x00000640, 0x0000064F, 0x00000020, 0x00000650, + 0x00000640, 0x00000650, 0x00000020, 0x00000651, + 0x00000640, 0x00000651, 0x00000020, 0x00000652, + 0x00000640, 0x00000652, 0x00000644, 0x00000622, + 0x00000644, 0x00000622, 0x00000644, 0x00000623, + 0x00000644, 0x00000623, 0x00000644, 0x00000625, + 0x00000644, 0x00000625, 0x00000644, 0x00000627, + 0x00000644, 0x00000627, 0x00000030, 0x0000002E, + 0x00000030, 0x0000002C, 0x00000031, 0x0000002C, + 0x00000032, 0x0000002C, 0x00000033, 0x0000002C, + 0x00000034, 0x0000002C, 0x00000035, 0x0000002C, + 0x00000036, 0x0000002C, 0x00000037, 0x0000002C, + 0x00000038, 0x0000002C, 0x00000039, 0x0000002C, + 0x00000028, 0x00000041, 0x00000029, 0x00000028, + 0x00000042, 0x00000029, 0x00000028, 0x00000043, + 0x00000029, 0x00000028, 0x00000044, 0x00000029, + 0x00000028, 0x00000045, 0x00000029, 0x00000028, + 0x00000046, 0x00000029, 0x00000028, 0x00000047, + 0x00000029, 0x00000028, 0x00000048, 0x00000029, + 0x00000028, 0x00000049, 0x00000029, 0x00000028, + 0x0000004A, 0x00000029, 0x00000028, 0x0000004B, + 0x00000029, 0x00000028, 0x0000004C, 0x00000029, + 0x00000028, 0x0000004D, 0x00000029, 0x00000028, + 0x0000004E, 0x00000029, 0x00000028, 0x0000004F, + 0x00000029, 0x00000028, 0x00000050, 0x00000029, + 0x00000028, 0x00000051, 0x00000029, 0x00000028, + 0x00000052, 0x00000029, 0x00000028, 0x00000053, + 0x00000029, 0x00000028, 0x00000054, 0x00000029, + 0x00000028, 0x00000055, 0x00000029, 0x00000028, + 0x00000056, 0x00000029, 0x00000028, 0x00000057, + 0x00000029, 0x00000028, 0x00000058, 0x00000029, + 0x00000028, 0x00000059, 0x00000029, 0x00000028, + 0x0000005A, 0x00000029, 0x00003014, 0x00000053, + 0x00003015, 0x00000043, 0x00000044, 0x00000057, + 0x0000005A, 0x00000048, 0x00000056, 0x0000004D, + 0x00000056, 0x00000053, 0x00000044, 0x00000053, + 0x00000053, 0x00000050, 0x00000050, 0x00000056, + 0x00000057, 0x00000043, 0x0000004D, 0x00000043, + 0x0000004D, 0x00000044, 0x0000004D, 0x00000052, + 0x00000044, 0x0000004A, 0x0000307B, 0x0000304B, + 0x000030B3, 0x000030B3, 0x00003014, 0x0000672C, + 0x00003015, 0x00003014, 0x00004E09, 0x00003015, + 0x00003014, 0x00004E8C, 0x00003015, 0x00003014, + 0x00005B89, 0x00003015, 0x00003014, 0x000070B9, + 0x00003015, 0x00003014, 0x00006253, 0x00003015, + 0x00003014, 0x000076D7, 0x00003015, 0x00003014, + 0x000052DD, 0x00003015, 0x00003014, 0x00006557, + 0x00003015, +}; + +static uint32_t const __CFUniCharCompatibilityDecompositionMappingTableLength = 5260; + +static void const * const __CFUniCharMappingTables[] = { + __CFUniCharLowercaseMappingTable, + __CFUniCharUppercaseMappingTable, + __CFUniCharTitlecaseMappingTable, + __CFUniCharCasefoldMappingTable, + __CFUniCharCanonicalDecompositionMappingTable, + __CFUniCharCanonicalPrecompositionMappingTable, + __CFUniCharCompatibilityDecompositionMappingTable, +}; + +#endif // __LITTLE_ENDIAN__ + diff --git a/Sources/CoreFoundation/include/CoreFoundation_Prefix.h b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h similarity index 91% rename from Sources/CoreFoundation/include/CoreFoundation_Prefix.h rename to Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h index 6ca1229f54..8d5a2460cf 100644 --- a/Sources/CoreFoundation/include/CoreFoundation_Prefix.h +++ b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h @@ -58,8 +58,6 @@ #define TARGET_OS_WATCH 0 #endif -#include "CFBase.h" - #include #include @@ -84,7 +82,7 @@ extern "C" { #define SystemIntegrityCheck(A, B) do {} while (0) - + #if INCLUDE_OBJC #include #else @@ -136,7 +134,6 @@ typedef char * Class; #endif - /* This macro creates some helper functions which are useful in dealing with libdispatch: * __ PREFIX Queue -- manages and returns a singleton serial queue * @@ -187,6 +184,20 @@ static dispatch_queue_t __ ## PREFIX ## Queue(void) { \ #define CF_RETAIN_BALANCED_ELSEWHERE(obj, identified_location) do { } while (0) #endif +#if !defined(CF_INLINE) + #if defined(__GNUC__) && (__GNUC__ == 4) && !defined(DEBUG) + #define CF_INLINE static __inline__ __attribute__((always_inline)) + #elif defined(__GNUC__) + #define CF_INLINE static __inline__ + #elif defined(__cplusplus) + #define CF_INLINE static inline + #elif defined(_MSC_VER) + #define CF_INLINE static __inline + #elif TARGET_OS_WIN32 + #define CF_INLINE static __inline__ + #endif +#endif + #if !TARGET_OS_MAC #if !HAVE_STRLCPY CF_INLINE size_t @@ -234,22 +245,6 @@ typedef int boolean_t; #endif #if TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WIN32 || TARGET_OS_WASI -// Implemented in CFPlatform.c -CF_EXPORT bool OSAtomicCompareAndSwapPtr(void *oldp, void *newp, void *volatile *dst); -CF_EXPORT bool OSAtomicCompareAndSwapLong(long oldl, long newl, long volatile *dst); -CF_EXPORT bool OSAtomicCompareAndSwapPtrBarrier(void *oldp, void *newp, void *volatile *dst); -CF_EXPORT bool OSAtomicCompareAndSwap64Barrier( int64_t __oldValue, int64_t __newValue, volatile int64_t *__theValue ); - -CF_EXPORT int32_t OSAtomicDecrement32Barrier(volatile int32_t *dst); -CF_EXPORT int32_t OSAtomicIncrement32Barrier(volatile int32_t *dst); -CF_EXPORT int32_t OSAtomicIncrement32(volatile int32_t *theValue); -CF_EXPORT int32_t OSAtomicDecrement32(volatile int32_t *theValue); - -CF_EXPORT int32_t OSAtomicAdd32( int32_t theAmount, volatile int32_t *theValue ); -CF_EXPORT int32_t OSAtomicAdd32Barrier( int32_t theAmount, volatile int32_t *theValue ); -CF_EXPORT bool OSAtomicCompareAndSwap32Barrier( int32_t oldValue, int32_t newValue, volatile int32_t *theValue ); - -CF_EXPORT void OSMemoryBarrier(); #include diff --git a/Sources/CoreFoundation/module.map b/Sources/CoreFoundation/module.map index 37965a408e..828ec7f806 100644 --- a/Sources/CoreFoundation/module.map +++ b/Sources/CoreFoundation/module.map @@ -1,4 +1,4 @@ -module CoreFoundationP [extern_c] [system] { +module _CoreFoundation [extern_c] [system] { umbrella header "CoreFoundation.h" explicit module CFPlugInCOM { header "CFPlugInCOM.h" } } diff --git a/Sources/CoreFoundation/module.modulemap b/Sources/CoreFoundation/module.modulemap index 28f412e579..0b54915621 100644 --- a/Sources/CoreFoundation/module.modulemap +++ b/Sources/CoreFoundation/module.modulemap @@ -1,4 +1,4 @@ -framework module CoreFoundationP [extern_c] [system] { +framework module _CoreFoundation [extern_c] [system] { umbrella header "CoreFoundation.h" explicit module CFPlugInCOM { header "CFPlugInCOM.h" } From 6f4c134bd96a5511a5fa6e9c81ef6c8cb392b347 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Fri, 17 May 2024 14:55:30 -0700 Subject: [PATCH 068/198] Recore FileManager on top of FoundationEssentials.FileManager (#4957) * Recore FileManager ontop of FoundationEssentials.FileManager * Update dependency hash --- Package.swift | 2 +- Sources/Foundation/FileManager+POSIX.swift | 810 --------------------- Sources/Foundation/FileManager+Win32.swift | 570 --------------- Sources/Foundation/FileManager+XDG.swift | 125 ---- Sources/Foundation/FileManager.swift | 720 ++---------------- Sources/Foundation/NSPathUtilities.swift | 118 +-- Tests/Foundation/TestFileManager.swift | 58 +- Tests/Foundation/TestNSString.swift | 2 +- 8 files changed, 80 insertions(+), 2325 deletions(-) delete mode 100644 Sources/Foundation/FileManager+XDG.swift diff --git a/Package.swift b/Package.swift index 4639d21068..a0a1881c38 100644 --- a/Package.swift +++ b/Package.swift @@ -82,7 +82,7 @@ let package = Package( ), .package( url: "https://github.com/apple/swift-foundation", - revision: "e991656bd02af48530811f1871b3351961b75d29" + revision: "db63ab39bb4f07eeb3ccf19fa7a9f928a7ca3972" ), ], targets: [ diff --git a/Sources/Foundation/FileManager+POSIX.swift b/Sources/Foundation/FileManager+POSIX.swift index a03da3dbd4..da1c1e7ecd 100644 --- a/Sources/Foundation/FileManager+POSIX.swift +++ b/Sources/Foundation/FileManager+POSIX.swift @@ -141,347 +141,6 @@ extension FileManager { #endif return urls } - - internal func darwinPathURLs(for domain: _SearchPathDomain, system: String?, local: String?, network: String?, userHomeSubpath: String?) -> [URL] { - switch domain { - case .system: - guard let path = system else { return [] } - return [ URL(fileURLWithPath: path, isDirectory: true) ] - case .local: - guard let path = local else { return [] } - return [ URL(fileURLWithPath: path, isDirectory: true) ] - case .network: - guard let path = network else { return [] } - return [ URL(fileURLWithPath: path, isDirectory: true) ] - case .user: - guard let path = userHomeSubpath else { return [] } - return [ URL(fileURLWithPath: path, isDirectory: true, relativeTo: URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true)) ] - } - } - - internal func darwinPathURLs(for domain: _SearchPathDomain, all: String, useLocalDirectoryForSystem: Bool = false) -> [URL] { - switch domain { - case .system: - return [ URL(fileURLWithPath: useLocalDirectoryForSystem ? "/\(all)" : "/System/\(all)", isDirectory: true) ] - case .local: - return [ URL(fileURLWithPath: "/\(all)", isDirectory: true) ] - case .network: - return [ URL(fileURLWithPath: "/Network/\(all)", isDirectory: true) ] - case .user: - return [ URL(fileURLWithPath: all, isDirectory: true, relativeTo: URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true)) ] - } - } - - internal func _urls(for directory: SearchPathDirectory, in domainMask: SearchPathDomainMask) -> [URL] { - let domains = _SearchPathDomain.allInSearchOrder(from: domainMask) - - var urls: [URL] = [] - - // We are going to return appropriate paths on Darwin, but [] on platforms that do not have comparable locations. - // For example, on FHS/XDG systems, applications are not installed in a single path. - - let useDarwinPaths: Bool - if let envVar = ProcessInfo.processInfo.environment["_NSFileManagerUseXDGPathsForDirectoryDomains"] { - useDarwinPaths = !NSString(string: envVar).boolValue - } else { - #if canImport(Darwin) - useDarwinPaths = true - #else - useDarwinPaths = false - #endif - } - - for domain in domains { - if useDarwinPaths { - urls.append(contentsOf: darwinURLs(for: directory, in: domain)) - } else { - urls.append(contentsOf: xdgURLs(for: directory, in: domain)) - } - } - - return urls - } - - internal func xdgURLs(for directory: SearchPathDirectory, in domain: _SearchPathDomain) -> [URL] { - // FHS/XDG-compliant OSes: - switch directory { - case .autosavedInformationDirectory: - let runtimePath = __SwiftValue.fetch(nonOptional: _CFXDGCreateDataHomePath()) as! String - return [ URL(fileURLWithPath: "Autosave Information", isDirectory: true, relativeTo: URL(fileURLWithPath: runtimePath, isDirectory: true)) ] - - case .desktopDirectory: - guard domain == .user else { return [] } - return [ _XDGUserDirectory.desktop.url ] - - case .documentDirectory: - guard domain == .user else { return [] } - return [ _XDGUserDirectory.documents.url ] - - case .cachesDirectory: - guard domain == .user else { return [] } - let path = __SwiftValue.fetch(nonOptional: _CFXDGCreateCacheDirectoryPath()) as! String - return [ URL(fileURLWithPath: path, isDirectory: true) ] - - case .applicationSupportDirectory: - guard domain == .user else { return [] } - let path = __SwiftValue.fetch(nonOptional: _CFXDGCreateDataHomePath()) as! String - return [ URL(fileURLWithPath: path, isDirectory: true) ] - - case .downloadsDirectory: - guard domain == .user else { return [] } - return [ _XDGUserDirectory.download.url ] - - case .userDirectory: - guard domain == .local else { return [] } - return [ URL(fileURLWithPath: xdgHomeDirectory, isDirectory: true) ] - - case .moviesDirectory: - return [ _XDGUserDirectory.videos.url ] - - case .musicDirectory: - guard domain == .user else { return [] } - return [ _XDGUserDirectory.music.url ] - - case .picturesDirectory: - guard domain == .user else { return [] } - return [ _XDGUserDirectory.pictures.url ] - - case .sharedPublicDirectory: - guard domain == .user else { return [] } - return [ _XDGUserDirectory.publicShare.url ] - - case .trashDirectory: - let userTrashURL = URL(fileURLWithPath: ".Trash", isDirectory: true, relativeTo: URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true)) - if domain == .user || domain == .local { - return [ userTrashURL ] - } else { - return [] - } - - // None of these are supported outside of Darwin: - case .applicationDirectory: - fallthrough - case .demoApplicationDirectory: - fallthrough - case .developerApplicationDirectory: - fallthrough - case .adminApplicationDirectory: - fallthrough - case .libraryDirectory: - fallthrough - case .developerDirectory: - fallthrough - case .documentationDirectory: - fallthrough - case .coreServiceDirectory: - fallthrough - case .inputMethodsDirectory: - fallthrough - case .preferencePanesDirectory: - fallthrough - case .applicationScriptsDirectory: - fallthrough - case .allApplicationsDirectory: - fallthrough - case .allLibrariesDirectory: - fallthrough - case .printerDescriptionDirectory: - fallthrough - case .itemReplacementDirectory: - return [] - } - } - - internal func darwinURLs(for directory: SearchPathDirectory, in domain: _SearchPathDomain) -> [URL] { - switch directory { - case .applicationDirectory: - return darwinPathURLs(for: domain, all: "Applications", useLocalDirectoryForSystem: true) - - case .demoApplicationDirectory: - return darwinPathURLs(for: domain, all: "Demos", useLocalDirectoryForSystem: true) - - case .developerApplicationDirectory: - return darwinPathURLs(for: domain, all: "Developer/Applications", useLocalDirectoryForSystem: true) - - case .adminApplicationDirectory: - return darwinPathURLs(for: domain, all: "Applications/Utilities", useLocalDirectoryForSystem: true) - - case .libraryDirectory: - return darwinPathURLs(for: domain, all: "Library") - - case .developerDirectory: - return darwinPathURLs(for: domain, all: "Developer", useLocalDirectoryForSystem: true) - - case .documentationDirectory: - return darwinPathURLs(for: domain, all: "Library/Documentation") - - case .coreServiceDirectory: - return darwinPathURLs(for: domain, system: "/System/Library/CoreServices", local: nil, network: nil, userHomeSubpath: nil) - - case .autosavedInformationDirectory: - return darwinPathURLs(for: domain, system: nil, local: nil, network: nil, userHomeSubpath: "Library/Autosave Information") - - case .inputMethodsDirectory: - return darwinPathURLs(for: domain, all: "Library/Input Methods") - - case .preferencePanesDirectory: - return darwinPathURLs(for: domain, system: "/System/Library/PreferencePanes", local: "/Library/PreferencePanes", network: nil, userHomeSubpath: "Library/PreferencePanes") - - case .applicationScriptsDirectory: - // Only the ObjC Foundation can know where this is. - return [] - - case .allApplicationsDirectory: - var directories: [URL] = [] - directories.append(contentsOf: darwinPathURLs(for: domain, all: "Applications", useLocalDirectoryForSystem: true)) - directories.append(contentsOf: darwinPathURLs(for: domain, all: "Demos", useLocalDirectoryForSystem: true)) - directories.append(contentsOf: darwinPathURLs(for: domain, all: "Developer/Applications", useLocalDirectoryForSystem: true)) - directories.append(contentsOf: darwinPathURLs(for: domain, all: "Applications/Utilities", useLocalDirectoryForSystem: true)) - return directories - - case .allLibrariesDirectory: - var directories: [URL] = [] - directories.append(contentsOf: darwinPathURLs(for: domain, all: "Library")) - directories.append(contentsOf: darwinPathURLs(for: domain, all: "Developer")) - return directories - - case .printerDescriptionDirectory: - guard domain == .system else { return [] } - return [ URL(fileURLWithPath: "/System/Library/Printers/PPD", isDirectory: true) ] - - case .desktopDirectory: - guard domain == .user else { return [] } - return [ URL(fileURLWithPath: "Desktop", isDirectory: true, relativeTo: URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true)) ] - - case .documentDirectory: - guard domain == .user else { return [] } - return [ URL(fileURLWithPath: "Documents", isDirectory: true, relativeTo: URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true)) ] - - case .cachesDirectory: - guard domain == .user else { return [] } - return [ URL(fileURLWithPath: "Library/Caches", isDirectory: true, relativeTo: URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true)) ] - - case .applicationSupportDirectory: - guard domain == .user else { return [] } - return [ URL(fileURLWithPath: "Library/Application Support", isDirectory: true, relativeTo: URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true)) ] - - case .downloadsDirectory: - guard domain == .user else { return [] } - return [ URL(fileURLWithPath: "Downloads", isDirectory: true, relativeTo: URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true)) ] - - case .userDirectory: - return darwinPathURLs(for: domain, system: nil, local: "/Users", network: "/Network/Users", userHomeSubpath: nil) - - case .moviesDirectory: - guard domain == .user else { return [] } - return [ URL(fileURLWithPath: "Movies", isDirectory: true, relativeTo: URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true)) ] - - case .musicDirectory: - guard domain == .user else { return [] } - return [ URL(fileURLWithPath: "Music", isDirectory: true, relativeTo: URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true)) ] - - case .picturesDirectory: - guard domain == .user else { return [] } - return [ URL(fileURLWithPath: "Pictures", isDirectory: true, relativeTo: URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true)) ] - - case .sharedPublicDirectory: - guard domain == .user else { return [] } - return [ URL(fileURLWithPath: "Public", isDirectory: true, relativeTo: URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true)) ] - - case .trashDirectory: - let userTrashURL = URL(fileURLWithPath: ".Trash", isDirectory: true, relativeTo: URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true)) - if domain == .user || domain == .local { - return [ userTrashURL ] - } else { - return [] - } - - case .itemReplacementDirectory: - // This directory is only returned by url(for:in:appropriateFor:create:) - return [] - } - } - - internal func _createDirectory(atPath path: String, withIntermediateDirectories createIntermediates: Bool, attributes: [FileAttributeKey : Any]? = [:]) throws { - try _fileSystemRepresentation(withPath: path, { pathFsRep in - if createIntermediates { - var isDir: ObjCBool = false - if !fileExists(atPath: path, isDirectory: &isDir) { - let parent = path._nsObject.deletingLastPathComponent - if !parent.isEmpty && !fileExists(atPath: parent, isDirectory: &isDir) { - try createDirectory(atPath: parent, withIntermediateDirectories: true, attributes: attributes) - } - if mkdir(pathFsRep, S_IRWXU | S_IRWXG | S_IRWXO) != 0 { - let posixError = errno - if posixError == EEXIST && fileExists(atPath: path, isDirectory: &isDir) && isDir.boolValue { - // Continue; if there is an existing file and it is a directory, that is still a success. - // There can be an existing file if another thread or process concurrently creates the - // same file. - } else { - throw _NSErrorWithErrno(posixError, reading: false, path: path) - } - } - if let attr = attributes { - try self.setAttributes(attr, ofItemAtPath: path) - } - } else if isDir.boolValue { - return - } else { - throw _NSErrorWithErrno(EEXIST, reading: false, path: path) - } - } else { - if mkdir(pathFsRep, S_IRWXU | S_IRWXG | S_IRWXO) != 0 { - throw _NSErrorWithErrno(errno, reading: false, path: path) - } else if let attr = attributes { - try self.setAttributes(attr, ofItemAtPath: path) - } - } - }) - } - - internal func _contentsOfDir(atPath path: String, _ closure: (String, Int32) throws -> () ) throws { - try _fileSystemRepresentation(withPath: path) { fsRep in - guard let dir = opendir(fsRep) else { - throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileReadNoSuchFile.rawValue, - userInfo: [NSFilePathErrorKey: path, "NSUserStringVariant": NSArray(object: "Folder")]) - } - defer { closedir(dir) } - - // readdir returns NULL on EOF and error so set errno to 0 to check for errors - errno = 0 - while let entry = readdir(dir) { - let length = Int(_direntNameLength(entry)) - let namePtr = UnsafeRawPointer(_direntName(entry)).assumingMemoryBound(to: CChar.self) - let entryName = string(withFileSystemRepresentation: namePtr, length: length) - if entryName != "." && entryName != ".." { - let entryType = Int32(entry.pointee.d_type) - try closure(entryName, entryType) - } - errno = 0 - } - guard errno == 0 else { - throw _NSErrorWithErrno(errno, reading: true, path: path) - } - } - } - - internal func _subpathsOfDirectory(atPath path: String) throws -> [String] { - var contents: [String] = [] - - try _contentsOfDir(atPath: path, { (entryName, entryType) throws in - contents.append(entryName) - if entryType == DT_DIR { - let subPath: String = path + "/" + entryName - let entries = try subpathsOfDirectory(atPath: subPath) - contents.append(contentsOf: entries.map({file in "\(entryName)/\(file)"})) - } - }) - return contents - } - - internal func _attributesOfFileSystem(forPath path: String) throws -> [FileAttributeKey : Any] { - return try _attributesOfFileSystemIncludingBlockSize(forPath: path).attributes - } internal func _attributesOfFileSystemIncludingBlockSize(forPath path: String) throws -> (attributes: [FileAttributeKey : Any], blockSize: UInt64?) { #if os(WASI) @@ -523,14 +182,6 @@ extension FileManager { #endif // os(WASI) } - internal func _createSymbolicLink(atPath path: String, withDestinationPath destPath: String) throws { - try _fileSystemRepresentation(withPath: path, andPath: destPath, { - guard symlink($1, $0) == 0 else { - throw _NSErrorWithErrno(errno, reading: false, path: path) - } - }) - } - /* destinationOfSymbolicLinkAtPath:error: returns a String containing the path of the item pointed at by the symlink specified by 'path'. If this method returns 'nil', an NSError will be thrown. This method replaces pathContentOfSymbolicLinkAtPath: @@ -591,406 +242,6 @@ extension FileManager { #endif } - internal func _readFrom(fd: Int32, toBuffer buffer: UnsafeMutablePointer, length bytesToRead: Int, filename: String) throws -> Int { - var bytesRead = 0 - - repeat { - bytesRead = numericCast(read(fd, buffer, numericCast(bytesToRead))) - } while bytesRead < 0 && errno == EINTR - guard bytesRead >= 0 else { - throw _NSErrorWithErrno(errno, reading: true, path: filename) - } - return bytesRead - } - - internal func _writeTo(fd: Int32, fromBuffer buffer : UnsafeMutablePointer, length bytesToWrite: Int, filename: String) throws { - var bytesWritten = 0 - while bytesWritten < bytesToWrite { - var written = 0 - let bytesLeftToWrite = bytesToWrite - bytesWritten - repeat { - written = - numericCast(write(fd, buffer.advanced(by: bytesWritten), - numericCast(bytesLeftToWrite))) - } while written < 0 && errno == EINTR - guard written >= 0 else { - throw _NSErrorWithErrno(errno, reading: false, path: filename) - } - bytesWritten += written - } - } - - internal func _copyRegularFile(atPath srcPath: String, toPath dstPath: String, variant: String = "Copy") throws { - let srcRep = try __fileSystemRepresentation(withPath: srcPath) - defer { srcRep.deallocate() } - let dstRep = try __fileSystemRepresentation(withPath: dstPath) - defer { dstRep.deallocate() } - - var fileInfo = stat() - guard stat(srcRep, &fileInfo) >= 0 else { - throw _NSErrorWithErrno(errno, reading: true, path: srcPath, - extraUserInfo: extraErrorInfo(srcPath: srcPath, dstPath: dstPath, userVariant: variant)) - } - - let srcfd = open(srcRep, O_RDONLY) - guard srcfd >= 0 else { - throw _NSErrorWithErrno(errno, reading: true, path: srcPath, - extraUserInfo: extraErrorInfo(srcPath: srcPath, dstPath: dstPath, userVariant: variant)) - } - defer { close(srcfd) } - - let dstfd = open(dstRep, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC, 0o666) - guard dstfd >= 0 else { - throw _NSErrorWithErrno(errno, reading: false, path: dstPath, - extraUserInfo: extraErrorInfo(srcPath: srcPath, dstPath: dstPath, userVariant: variant)) - } - defer { close(dstfd) } - - #if !os(WASI) // WASI doesn't have ownership concept - // Set the file permissions using fchmod() instead of when open()ing to avoid umask() issues - let permissions = fileInfo.st_mode & ~S_IFMT - guard fchmod(dstfd, permissions) == 0 else { - throw _NSErrorWithErrno(errno, reading: false, path: dstPath, - extraUserInfo: extraErrorInfo(srcPath: srcPath, dstPath: dstPath, userVariant: variant)) - } - #endif - - if fileInfo.st_size == 0 { - // no copying required - return - } - - let buffer = UnsafeMutablePointer.allocate(capacity: Int(fileInfo.st_blksize)) - defer { buffer.deallocate() } - - // Casted to Int64 because fileInfo.st_size is 64 bits long even on 32 bit platforms - var bytesRemaining = Int64(fileInfo.st_size) - while bytesRemaining > 0 { - let bytesToRead = min(bytesRemaining, Int64(fileInfo.st_blksize)) - let bytesRead = try _readFrom(fd: srcfd, toBuffer: buffer, length: Int(bytesToRead), filename: srcPath) - if bytesRead == 0 { - // Early EOF - return - } - try _writeTo(fd: dstfd, fromBuffer: buffer, length: bytesRead, filename: dstPath) - bytesRemaining -= Int64(bytesRead) - } - } - - internal func _copySymlink(atPath srcPath: String, toPath dstPath: String, variant: String = "Copy") throws { - let bufSize = Int(PATH_MAX) + 1 - var buf = [Int8](repeating: 0, count: bufSize) - - try _fileSystemRepresentation(withPath: srcPath) { srcFsRep in - let len = readlink(srcFsRep, &buf, bufSize) - if len < 0 { - throw _NSErrorWithErrno(errno, reading: true, path: srcPath, - extraUserInfo: extraErrorInfo(srcPath: srcPath, dstPath: dstPath, userVariant: variant)) - } - try _fileSystemRepresentation(withPath: dstPath) { dstFsRep in - if symlink(buf, dstFsRep) == -1 { - throw _NSErrorWithErrno(errno, reading: false, path: dstPath, - extraUserInfo: extraErrorInfo(srcPath: srcPath, dstPath: dstPath, userVariant: variant)) - } - } - } - } - - internal func _copyOrLinkDirectoryHelper(atPath srcPath: String, toPath dstPath: String, variant: String = "Copy", _ body: (String, String, FileAttributeType) throws -> ()) throws { - let stat = try _lstatFile(atPath: srcPath) - - let fileType = FileAttributeType(statMode: mode_t(stat.st_mode)) - if fileType == .typeDirectory { - try createDirectory(atPath: dstPath, withIntermediateDirectories: false, attributes: nil) - - guard let enumerator = enumerator(atPath: srcPath) else { - throw _NSErrorWithErrno(ENOENT, reading: true, path: srcPath) - } - - while let item = enumerator.nextObject() as? String { - let src = srcPath + "/" + item - let dst = dstPath + "/" + item - if let stat = try? _lstatFile(atPath: src) { - let fileType = FileAttributeType(statMode: mode_t(stat.st_mode)) - if fileType == .typeDirectory { - try createDirectory(atPath: dst, withIntermediateDirectories: false, attributes: nil) - } else { - try body(src, dst, fileType) - } - } - } - } else { - try body(srcPath, dstPath, fileType) - } - } - - internal func _moveItem(atPath srcPath: String, toPath dstPath: String, isURL: Bool) throws { - guard shouldMoveItemAtPath(srcPath, toPath: dstPath, isURL: isURL) else { - return - } - - guard !self.fileExists(atPath: dstPath) else { - throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteFileExists.rawValue, userInfo: [NSFilePathErrorKey : NSString(dstPath)]) - } - - try _fileSystemRepresentation(withPath: srcPath, andPath: dstPath, { - if rename($0, $1) != 0 { - if errno == EXDEV { - try _copyOrLinkDirectoryHelper(atPath: srcPath, toPath: dstPath, variant: "Move") { (srcPath, dstPath, fileType) in - do { - switch fileType { - case .typeRegular: - try _copyRegularFile(atPath: srcPath, toPath: dstPath, variant: "Move") - case .typeSymbolicLink: - try _copySymlink(atPath: srcPath, toPath: dstPath, variant: "Move") - default: - break - } - } catch { - if !shouldProceedAfterError(error, movingItemAtPath: srcPath, toPath: dstPath, isURL: isURL) { - throw error - } - } - } - - // Remove source directory/file after successful moving - try _removeItem(atPath: srcPath, isURL: isURL, alreadyConfirmed: true) - } else { - throw _NSErrorWithErrno(errno, reading: false, path: srcPath, - extraUserInfo: extraErrorInfo(srcPath: srcPath, dstPath: dstPath, userVariant: "Move")) - } - } - }) - } - - internal func _linkItem(atPath srcPath: String, toPath dstPath: String, isURL: Bool) throws { - try _copyOrLinkDirectoryHelper(atPath: srcPath, toPath: dstPath) { (srcPath, dstPath, fileType) in - guard shouldLinkItemAtPath(srcPath, toPath: dstPath, isURL: isURL) else { - return - } - - do { - switch fileType { - case .typeRegular: - try _fileSystemRepresentation(withPath: srcPath, andPath: dstPath, { - if link($0, $1) == -1 { - throw _NSErrorWithErrno(errno, reading: false, path: srcPath) - } - }) - case .typeSymbolicLink: - try _copySymlink(atPath: srcPath, toPath: dstPath) - default: - break - } - } catch { - if !shouldProceedAfterError(error, linkingItemAtPath: srcPath, toPath: dstPath, isURL: isURL) { - throw error - } - } - } - } - - internal func _removeItem(atPath path: String, isURL: Bool, alreadyConfirmed: Bool = false) throws { - guard alreadyConfirmed || shouldRemoveItemAtPath(path, isURL: isURL) else { - return - } - try _fileSystemRepresentation(withPath: path, { fsRep in - if rmdir(fsRep) == 0 { - return - } else if errno == ENOTEMPTY { - #if os(WASI) - // wasi-libc, which is based on musl, does not provide fts(3) - throw _NSErrorWithErrno(ENOTSUP, reading: false, path: path) - #else - let ps = UnsafeMutablePointer?>.allocate(capacity: 2) - ps.initialize(to: UnsafeMutablePointer(mutating: fsRep)) - ps.advanced(by: 1).initialize(to: nil) - let stream = fts_open(ps, FTS_PHYSICAL | FTS_XDEV | FTS_NOCHDIR | FTS_NOSTAT, nil) - ps.deinitialize(count: 2) - ps.deallocate() - - if stream != nil { - defer { - fts_close(stream) - } - - while let current = fts_read(stream)?.pointee { - let itemPath = string(withFileSystemRepresentation: current.fts_path, length: Int(current.fts_pathlen)) - guard alreadyConfirmed || shouldRemoveItemAtPath(itemPath, isURL: isURL) else { - continue - } - - do { - switch Int32(current.fts_info) { - case FTS_DEFAULT, FTS_F, FTS_NSOK, FTS_SL, FTS_SLNONE: - if unlink(current.fts_path) == -1 { - throw _NSErrorWithErrno(errno, reading: false, path: itemPath) - } - case FTS_DP: - if rmdir(current.fts_path) == -1 { - throw _NSErrorWithErrno(errno, reading: false, path: itemPath) - } - case FTS_DNR, FTS_ERR, FTS_NS: - throw _NSErrorWithErrno(current.fts_errno, reading: false, path: itemPath) - default: - break - } - } catch { - if !shouldProceedAfterError(error, removingItemAtPath: itemPath, isURL: isURL) { - throw error - } - } - } - } else { - let _ = _NSErrorWithErrno(ENOTEMPTY, reading: false, path: path) - } - #endif - } else if errno != ENOTDIR { - throw _NSErrorWithErrno(errno, reading: false, path: path) - } else if unlink(fsRep) != 0 { - throw _NSErrorWithErrno(errno, reading: false, path: path) - } - }) - - } - - internal func _currentDirectoryPath() -> String { - let length = Int(PATH_MAX) + 1 - var buf = [Int8](repeating: 0, count: length) - getcwd(&buf, length) - return string(withFileSystemRepresentation: buf, length: Int(strlen(buf))) - } - - @discardableResult - internal func _changeCurrentDirectoryPath(_ path: String) -> Bool { - do { - return try _fileSystemRepresentation(withPath: path, { chdir($0) == 0 }) - } - catch { - return false - } - } - - internal func _fileExists(atPath path: String, isDirectory: UnsafeMutablePointer?) -> Bool { - do { - return try _fileSystemRepresentation(withPath: path, { fsRep in - var s = try _lstatFile(atPath: path, withFileSystemRepresentation: fsRep) - if (s.st_mode & S_IFMT) == S_IFLNK { - // don't chase the link for this magic case -- we might be /Net/foo - // which is a symlink to /private/Net/foo which is not yet mounted... - if isDirectory == nil && (s.st_mode & S_ISVTX) == S_ISVTX { - return true - } - // chase the link; too bad if it is a slink to /Net/foo - guard stat(fsRep, &s) >= 0 else { - return false - } - } - - if let isDirectory = isDirectory { - isDirectory.pointee = ObjCBool((s.st_mode & S_IFMT) == S_IFDIR) - } - - return true - }) - } catch { - return false - } - } - - internal func _isReadableFile(atPath path: String) -> Bool { - do { - return try _fileSystemRepresentation(withPath: path, { - access($0, R_OK) == 0 - }) - } catch { - return false - } - } - - internal func _isWritableFile(atPath path: String) -> Bool { - do { - return try _fileSystemRepresentation(withPath: path, { - access($0, W_OK) == 0 - }) - } catch { - return false - } - } - - internal func _isExecutableFile(atPath path: String) -> Bool { - do { - return try _fileSystemRepresentation(withPath: path, { - access($0, X_OK) == 0 - }) - } catch { - return false - } - } - - /** - - parameters: - - path: The path to the file we are trying to determine is deletable. - - - returns: `true` if the file is deletable, `false` otherwise. - */ - internal func _isDeletableFile(atPath path: String) -> Bool { - guard path != "" else { return true } // This matches Darwin even though its probably the wrong response - - // Get the parent directory of supplied path - let parent = path._nsObject.deletingLastPathComponent - - do { - return try _fileSystemRepresentation(withPath: parent, andPath: path, { parentFsRep, fsRep in - // Check the parent directory is writeable, else return false. - guard access(parentFsRep, W_OK) == 0 else { - return false - } - - #if !os(WASI) // WASI doesn't have ownership concept - // Stat the parent directory, if that fails, return false. - let parentS = try _lstatFile(atPath: path, withFileSystemRepresentation: parentFsRep) - - // Check if the parent is 'sticky' if it exists. - if (parentS.st_mode & S_ISVTX) == S_ISVTX { - let s = try _lstatFile(atPath: path, withFileSystemRepresentation: fsRep) - - // If the current user owns the file, return true. - return s.st_uid == getuid() - } - #endif - - // Return true as the best guess. - return true - }) - } catch { - return false - } - } - - private func _compareSymlinks(withFileSystemRepresentation file1Rep: UnsafePointer, andFileSystemRepresentation file2Rep: UnsafePointer, size fileSize: Int64) -> Bool { - let bufSize = Int(fileSize) - let buffer1 = UnsafeMutablePointer.allocate(capacity: bufSize) - defer { buffer1.deallocate() } - let buffer2 = UnsafeMutablePointer.allocate(capacity: bufSize) - defer { buffer2.deallocate() } - - let size1 = readlink(file1Rep, buffer1, bufSize) - guard size1 >= 0 else { return false } - - let size2 = readlink(file2Rep, buffer2, bufSize) - guard size2 >= 0 else { return false } - - #if !os(Android) - // In Android the reported size doesn't match the contents. - // Other platforms seems to follow that rule. - guard fileSize == size1 else { return false } - #endif - - guard size1 == size2 else { return false } - return memcmp(buffer1, buffer2, size1) == 0 - } - internal func _lstatFile(atPath path: String, withFileSystemRepresentation fsRep: UnsafePointer? = nil) throws -> stat { let _fsRep: UnsafePointer if fsRep == nil { @@ -1058,67 +309,6 @@ extension FileManager { } #endif - /* -contentsEqualAtPath:andPath: does not take into account data stored in the resource fork or filesystem extended attributes. - */ - internal func _contentsEqual(atPath path1: String, andPath path2: String) -> Bool { - do { - let fsRep1 = try __fileSystemRepresentation(withPath: path1) - defer { fsRep1.deallocate() } - - let file1 = try _lstatFile(atPath: path1, withFileSystemRepresentation: fsRep1) - let file1Type = file1.st_mode & S_IFMT - - // Don't use access() for symlinks as only the contents should be checked even - // if the symlink doesnt point to an actual file, but access() will always try - // to resolve the link and fail if the destination is not found - if path1 == path2 && file1Type != S_IFLNK { - return access(fsRep1, R_OK) == 0 - } - - let fsRep2 = try __fileSystemRepresentation(withPath: path2) - defer { fsRep2.deallocate() } - let file2 = try _lstatFile(atPath: path2, withFileSystemRepresentation: fsRep2) - let file2Type = file2.st_mode & S_IFMT - - // Are paths the same type: file, directory, symbolic link etc. - guard file1Type == file2Type else { - return false - } - - if file1Type == S_IFCHR || file1Type == S_IFBLK { - // For character devices, just check the major/minor pair is the same. - return _dev_major(dev_t(file1.st_rdev)) == _dev_major(dev_t(file2.st_rdev)) - && _dev_minor(dev_t(file1.st_rdev)) == _dev_minor(dev_t(file2.st_rdev)) - } - - // If both paths point to the same device/inode or they are both zero length - // then they are considered equal so just check readability. - if (file1.st_dev == file2.st_dev && file1.st_ino == file2.st_ino) - || (file1.st_size == 0 && file2.st_size == 0) { - return access(fsRep1, R_OK) == 0 && access(fsRep2, R_OK) == 0 - } - - if file1Type == S_IFREG { - // Regular files and symlinks should at least have the same filesize if contents are equal. - guard file1.st_size == file2.st_size else { - return false - } - return _compareFiles(withFileSystemRepresentation: path1, andFileSystemRepresentation: path2, size: Int64(file1.st_size), bufSize: Int(file1.st_blksize)) - } - else if file1Type == S_IFLNK { - return _compareSymlinks(withFileSystemRepresentation: fsRep1, andFileSystemRepresentation: fsRep2, size: Int64(file1.st_size)) - } - else if file1Type == S_IFDIR { - return _compareDirectories(atPath: path1, andPath: path2) - } - - // Don't know how to compare other file types. - return false - } catch { - return false - } -} - internal func _appendSymlinkDestination(_ dest: String, toPath: String) -> String { let isAbsolutePath: Bool = dest.hasPrefix("/") diff --git a/Sources/Foundation/FileManager+Win32.swift b/Sources/Foundation/FileManager+Win32.swift index 2c92cf7a48..0ceedd13fe 100644 --- a/Sources/Foundation/FileManager+Win32.swift +++ b/Sources/Foundation/FileManager+Win32.swift @@ -156,161 +156,6 @@ extension FileManager { return urls } - internal func _urls(for directory: SearchPathDirectory, in domainMask: SearchPathDomainMask) -> [URL] { - let domains = _SearchPathDomain.allInSearchOrder(from: domainMask) - - var urls: [URL] = [] - - for domain in domains { - urls.append(contentsOf: windowsURLs(for: directory, in: domain)) - } - - return urls - } - - private class func url(for id: KNOWNFOLDERID) -> URL { - var pszPath: PWSTR? - let hResult: HRESULT = withUnsafePointer(to: id) { id in - SHGetKnownFolderPath(id, DWORD(KF_FLAG_DEFAULT.rawValue), nil, &pszPath) - } - precondition(hResult >= 0, "SHGetKnownFolderpath failed \(GetLastError())") - let url: URL = URL(fileURLWithPath: String(decodingCString: pszPath!, as: UTF16.self), isDirectory: true) - CoTaskMemFree(pszPath) - return url - } - - private func windowsURLs(for directory: SearchPathDirectory, in domain: _SearchPathDomain) -> [URL] { - switch directory { - case .autosavedInformationDirectory: - // FIXME(compnerd) where should this go? - return [] - - case .desktopDirectory: - guard domain == .user else { return [] } - return [FileManager.url(for: FOLDERID_Desktop)] - - case .documentDirectory: - guard domain == .user else { return [] } - return [FileManager.url(for: FOLDERID_Documents)] - - case .cachesDirectory: - guard domain == .user else { return [] } - return [URL(fileURLWithPath: NSTemporaryDirectory())] - - case .applicationSupportDirectory: - switch domain { - case .local: - return [FileManager.url(for: FOLDERID_ProgramData)] - case .user: - return [FileManager.url(for: FOLDERID_LocalAppData)] - default: - return [] - } - - case .downloadsDirectory: - guard domain == .user else { return [] } - return [FileManager.url(for: FOLDERID_Downloads)] - - case .userDirectory: - guard domain == .user else { return [] } - return [FileManager.url(for: FOLDERID_UserProfiles)] - - case .moviesDirectory: - guard domain == .user else { return [] } - return [FileManager.url(for: FOLDERID_Videos)] - - case .musicDirectory: - guard domain == .user else { return [] } - return [FileManager.url(for: FOLDERID_Music)] - - case .picturesDirectory: - guard domain == .user else { return [] } - return [FileManager.url(for: FOLDERID_PicturesLibrary)] - - case .sharedPublicDirectory: - guard domain == .user else { return [] } - return [FileManager.url(for: FOLDERID_Public)] - - case .trashDirectory: - guard domain == .user else { return [] } - return [FileManager.url(for: FOLDERID_RecycleBinFolder)] - - // None of these are supported outside of Darwin: - case .applicationDirectory, - .demoApplicationDirectory, - .developerApplicationDirectory, - .adminApplicationDirectory, - .libraryDirectory, - .developerDirectory, - .documentationDirectory, - .coreServiceDirectory, - .inputMethodsDirectory, - .preferencePanesDirectory, - .applicationScriptsDirectory, - .allApplicationsDirectory, - .allLibrariesDirectory, - .printerDescriptionDirectory, - .itemReplacementDirectory: - return [] - } - } - - internal func _createDirectory(atPath path: String, withIntermediateDirectories createIntermediates: Bool, attributes: [FileAttributeKey : Any]? = [:]) throws { - if createIntermediates { - var isDir: ObjCBool = false - if fileExists(atPath: path, isDirectory: &isDir) { - guard isDir.boolValue else { throw _NSErrorWithErrno(EEXIST, reading: false, path: path) } - return - } - - let parent = path._nsObject.deletingLastPathComponent - if !parent.isEmpty && !fileExists(atPath: parent, isDirectory: &isDir) { - try createDirectory(atPath: parent, withIntermediateDirectories: true, attributes: attributes) - } - } - - try withNTPathRepresentation(of: path) { wszPath in - var saAttributes: SECURITY_ATTRIBUTES = - SECURITY_ATTRIBUTES(nLength: DWORD(MemoryLayout.size), - lpSecurityDescriptor: nil, - bInheritHandle: false) - try withUnsafeMutablePointer(to: &saAttributes) { pSecurityAttributes in - guard CreateDirectoryW(wszPath, pSecurityAttributes) else { - throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [path]) - } - } - } - - if let attributes { - try self.setAttributes(attributes, ofItemAtPath: path) - } - } - - internal func _contentsOfDir(atPath path: String, _ closure: (String, Int32) throws -> () ) throws { - guard !path.isEmpty else { - throw CocoaError.error(.fileReadInvalidFileName, userInfo: [NSFilePathErrorKey:path]) - } - - try walk(directory: URL(fileURLWithPath: path, isDirectory: true)) { entry, attributes in - if entry == "." || entry == ".." { return } - try closure(entry.standardizingPath, Int32(attributes)) - } - } - - internal func _subpathsOfDirectory(atPath path: String) throws -> [String] { - var contents: [String] = [] - - try _contentsOfDir(atPath: path, { (entryName, entryType) throws in - contents.append(entryName) - if DWORD(entryType) & FILE_ATTRIBUTE_DIRECTORY == FILE_ATTRIBUTE_DIRECTORY - && DWORD(entryType) & FILE_ATTRIBUTE_REPARSE_POINT != FILE_ATTRIBUTE_REPARSE_POINT { - let subPath: String = joinPath(prefix: path, suffix: entryName) - let entries = try subpathsOfDirectory(atPath: subPath) - contents.append(contentsOf: entries.map { joinPath(prefix: entryName, suffix: $0).standardizingPath }) - } - }) - return contents - } internal func windowsFileAttributes(atPath path: String) throws -> WIN32_FILE_ATTRIBUTE_DATA { return try withNTPathRepresentation(of: path) { @@ -364,41 +209,6 @@ extension FileManager { return result } - internal func _createSymbolicLink(atPath path: String, withDestinationPath destPath: String, isDirectory: Bool? = nil) throws { - var dwFlags = DWORD(SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE) - // If destPath is relative, we should look for it relative to `path`, not our current working directory - switch isDirectory { - case .some(true): - dwFlags |= DWORD(SYMBOLIC_LINK_FLAG_DIRECTORY) - case .some(false): - break; - case .none: - let resolvedDest = - destPath.isAbsolutePath ? destPath - : joinPath(prefix: path.deletingLastPathComponent, - suffix: destPath) - - // NOTE: windowsfileAttributes will throw if the destPath is not - // found. Since on Windows, you are required to know the type - // of the symlink target (file or directory) during creation, - // and assuming one or the other doesn't make a lot of sense, we - // allow it to throw, thus disallowing the creation of broken - // symlinks on Windows is the target is of unknown type. - guard let faAttributes = try? windowsFileAttributes(atPath: resolvedDest) else { - throw _NSErrorWithWindowsError(GetLastError(), reading: true, paths: [path, destPath]) - } - if faAttributes.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY == FILE_ATTRIBUTE_DIRECTORY { - dwFlags |= DWORD(SYMBOLIC_LINK_FLAG_DIRECTORY) - } - } - - try FileManager.default._fileSystemRepresentation(withPath: path, andPath: destPath) { - guard CreateSymbolicLinkW($0, $1, dwFlags) != 0 else { - throw _NSErrorWithWindowsError(GetLastError(), reading: true, paths: [path, destPath]) - } - } - } - internal func _destinationOfSymbolicLink(atPath path: String) throws -> String { let faAttributes = try windowsFileAttributes(atPath: path) guard faAttributes.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT == FILE_ATTRIBUTE_REPARSE_POINT else { @@ -547,302 +357,6 @@ extension FileManager { return String(decodingCString: &szPath, as: UTF16.self) } - internal func _copyRegularFile(atPath srcPath: String, toPath dstPath: String, variant: String = "Copy") throws { - try withNTPathRepresentation(of: srcPath) { wszSource in - try withNTPathRepresentation(of: dstPath) { wszDestination in - if !CopyFileW(wszSource, wszDestination, true) { - throw _NSErrorWithWindowsError(GetLastError(), reading: true, paths: [srcPath, dstPath]) - } - } - } - } - - internal func _copySymlink(atPath srcPath: String, toPath dstPath: String, variant: String = "Copy") throws { - let faAttributes: WIN32_FILE_ATTRIBUTE_DATA = try windowsFileAttributes(atPath: srcPath) - guard faAttributes.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT == FILE_ATTRIBUTE_REPARSE_POINT else { - throw _NSErrorWithErrno(EINVAL, reading: true, path: srcPath, extraUserInfo: extraErrorInfo(srcPath: srcPath, dstPath: dstPath, userVariant: variant)) - } - - let destination = try destinationOfSymbolicLink(atPath: srcPath) - let isDir = try windowsFileAttributes(atPath: srcPath).dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY == FILE_ATTRIBUTE_DIRECTORY - if fileExists(atPath: dstPath) { - try removeItem(atPath: dstPath) - } - try _createSymbolicLink(atPath: dstPath, withDestinationPath: destination, isDirectory: isDir) - } - - internal func _copyOrLinkDirectoryHelper(atPath srcPath: String, toPath dstPath: String, variant: String = "Copy", _ body: (String, String, FileAttributeType) throws -> ()) throws { - let faAttributes = try windowsFileAttributes(atPath: srcPath) - - var fileType = FileAttributeType(attributes: faAttributes, atPath: srcPath) - if fileType == .typeDirectory { - try createDirectory(atPath: dstPath, withIntermediateDirectories: false, attributes: nil) - guard let enumerator = enumerator(atPath: srcPath) else { - throw _NSErrorWithErrno(ENOENT, reading: true, path: srcPath) - } - - while let item = enumerator.nextObject() as? String { - let src = joinPath(prefix: srcPath, suffix: item) - let dst = joinPath(prefix: dstPath, suffix: item) - - let faAttributes = try windowsFileAttributes(atPath: src) - fileType = FileAttributeType(attributes: faAttributes, atPath: srcPath) - if fileType == .typeDirectory { - try createDirectory(atPath: dst, withIntermediateDirectories: false, attributes: nil) - } else { - try body(src, dst, fileType) - } - } - } else { - try body(srcPath, dstPath, fileType) - } - } - - internal func _moveItem(atPath srcPath: String, toPath dstPath: String, isURL: Bool) throws { - guard shouldMoveItemAtPath(srcPath, toPath: dstPath, isURL: isURL) else { - return - } - - try withNTPathRepresentation(of: dstPath) { wszDestination in - var faDestinationnAttributes: WIN32_FILE_ATTRIBUTE_DATA = .init() - if GetFileAttributesExW(wszDestination, GetFileExInfoStandard, &faDestinationnAttributes) { - throw CocoaError.error(.fileWriteFileExists, userInfo: [NSFilePathErrorKey:dstPath]) - } - - try withNTPathRepresentation(of: srcPath) { wszSource in - var faSourceAttributes: WIN32_FILE_ATTRIBUTE_DATA = .init() - guard GetFileAttributesExW(wszSource, GetFileExInfoStandard, &faSourceAttributes) else { - throw _NSErrorWithWindowsError(GetLastError(), reading: true, paths: [srcPath]) - } - - // MoveFileExW does not work if the source and destination are - // on different volumes and the source is a directory. In that - // case, we need to do a recursive copy & remove. - if PathIsSameRootW(wszSource, wszDestination) || - faSourceAttributes.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY == 0 { - if !MoveFileExW(wszSource, wszDestination, MOVEFILE_COPY_ALLOWED | MOVEFILE_WRITE_THROUGH) { - throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [srcPath, dstPath]) - } - } else { - try _copyOrLinkDirectoryHelper(atPath: srcPath, toPath: dstPath, variant: "Move") { (src, dst, type) in - do { - switch type { - case .typeRegular: - try _copyRegularFile(atPath: src, toPath: dst, variant: "Move") - case .typeSymbolicLink: - try _copySymlink(atPath: src, toPath: dst, variant: "Move") - default: - break - } - } catch { - if !shouldProceedAfterError(error, movingItemAtPath: src, toPath: dst, isURL: isURL) { - throw error - } - } - - try _removeItem(atPath: src, isURL: isURL, alreadyConfirmed: true) - } - } - } - } - } - - internal func _linkItem(atPath srcPath: String, toPath dstPath: String, isURL: Bool) throws { - try _copyOrLinkDirectoryHelper(atPath: srcPath, toPath: dstPath) { (srcPath, dstPath, fileType) in - guard shouldLinkItemAtPath(srcPath, toPath: dstPath, isURL: isURL) else { - return - } - - do { - switch fileType { - case .typeRegular: - try FileManager.default._fileSystemRepresentation(withPath: srcPath, andPath: dstPath) { - if !CreateHardLinkW($1, $0, nil) { - throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [srcPath, dstPath]) - } - } - case .typeSymbolicLink: - try _copySymlink(atPath: srcPath, toPath: dstPath) - default: - break - } - } catch { - if !shouldProceedAfterError(error, linkingItemAtPath: srcPath, toPath: dstPath, isURL: isURL) { - throw error - } - } - } - } - - internal func _removeItem(atPath path: String, isURL: Bool, alreadyConfirmed: Bool = false) throws { - guard alreadyConfirmed || shouldRemoveItemAtPath(path, isURL: isURL) else { - return - } - - try withNTPathRepresentation(of: path) { - var faAttributes: WIN32_FILE_ATTRIBUTE_DATA = .init() - if !GetFileAttributesExW($0, GetFileExInfoStandard, &faAttributes) { - throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [path]) - } - - if faAttributes.dwFileAttributes & FILE_ATTRIBUTE_READONLY == FILE_ATTRIBUTE_READONLY { - if !SetFileAttributesW($0, faAttributes.dwFileAttributes & ~FILE_ATTRIBUTE_READONLY) { - throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [path]) - } - } - - if faAttributes.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY == 0 || faAttributes.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT == FILE_ATTRIBUTE_REPARSE_POINT { - if faAttributes.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY == FILE_ATTRIBUTE_DIRECTORY { - guard RemoveDirectoryW($0) else { - throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [path]) - } - } else { - guard DeleteFileW($0) else { - throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [path]) - } - } - return - } - - var stack = [path] - while let directory = stack.popLast() { - do { - guard alreadyConfirmed || shouldRemoveItemAtPath(directory, isURL: isURL) else { - continue - } - - let root = URL(fileURLWithPath: directory, isDirectory: true) - try root.withUnsafeNTPath { - if RemoveDirectoryW($0) { return } - guard GetLastError() == ERROR_DIR_NOT_EMPTY else { - throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [directory]) - } - stack.append(directory) - - try walk(directory: root) { entry, attributes in - if entry == "." || entry == ".." { return } - - let isDirectory = attributes & FILE_ATTRIBUTE_DIRECTORY == FILE_ATTRIBUTE_DIRECTORY && attributes & FILE_ATTRIBUTE_REPARSE_POINT == 0 - let path = root.appendingPathComponent(entry, isDirectory: isDirectory) - - if isDirectory { - stack.append(path.path) - } else { - guard alreadyConfirmed || shouldRemoveItemAtPath(path.path, isURL: isURL) else { - return - } - - try path.withUnsafeNTPath { - if attributes & FILE_ATTRIBUTE_READONLY == FILE_ATTRIBUTE_READONLY { - if !SetFileAttributesW($0, attributes & ~FILE_ATTRIBUTE_READONLY) { - throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [entry]) - } - } - - if attributes & FILE_ATTRIBUTE_DIRECTORY == FILE_ATTRIBUTE_DIRECTORY { - if !RemoveDirectoryW($0) { - throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [entry]) - } - } else { - if !DeleteFileW($0) { - throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [entry]) - } - } - } - } - } - } - } catch { - if !shouldProceedAfterError(error, removingItemAtPath: directory, isURL: isURL) { - throw error - } - } - } - } - } - - internal func _currentDirectoryPath() -> String { - let dwLength: DWORD = GetCurrentDirectoryW(0, nil) - var szDirectory: [WCHAR] = Array(repeating: 0, count: Int(dwLength + 1)) - - GetCurrentDirectoryW(dwLength, &szDirectory) - return String(decodingCString: &szDirectory, as: UTF16.self).standardizingPath - } - - @discardableResult - internal func _changeCurrentDirectoryPath(_ path: String) -> Bool { - return (try? FileManager.default._fileSystemRepresentation(withPath: path) { - SetCurrentDirectoryW($0) - }) ?? false - } - - internal func _fileExists(atPath path: String, isDirectory: UnsafeMutablePointer?) -> Bool { - return (try? withNTPathRepresentation(of: path) { - var faAttributes: WIN32_FILE_ATTRIBUTE_DATA = .init() - guard GetFileAttributesExW($0, GetFileExInfoStandard, &faAttributes) else { - return false - } - - var dwFileAttributes = faAttributes.dwFileAttributes - if dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT == FILE_ATTRIBUTE_REPARSE_POINT { - // We use the `CreateFileW` here to ensure that the destination - // of the reparse point exists. The previous check would only - // ensure that the reparse point exists, not the destination of - // it. - let hFile: HANDLE = CreateFileW($0, 0, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nil) - if hFile == INVALID_HANDLE_VALUE { return false } - defer { CloseHandle(hFile) } - - var info: BY_HANDLE_FILE_INFORMATION = .init() - GetFileInformationByHandle(hFile, &info) - dwFileAttributes = info.dwFileAttributes - } - - if let isDirectory { - isDirectory.pointee = ObjCBool(dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY == FILE_ATTRIBUTE_DIRECTORY) - } - - return true - }) ?? false - } - - - internal func _isReadableFile(atPath path: String) -> Bool { - do { let _ = try windowsFileAttributes(atPath: path) } catch { return false } - return true - } - - internal func _isWritableFile(atPath path: String) -> Bool { - guard let faAttributes: WIN32_FILE_ATTRIBUTE_DATA = try? windowsFileAttributes(atPath: path) else { return false } - return faAttributes.dwFileAttributes & FILE_ATTRIBUTE_READONLY != FILE_ATTRIBUTE_READONLY - } - - internal func _isExecutableFile(atPath path: String) -> Bool { - var binaryType = DWORD(0) - return path.withCString(encodedAs: UTF16.self) { - GetBinaryTypeW($0, &binaryType) - } - } - - internal func _isDeletableFile(atPath path: String) -> Bool { - guard path != "" else { return true } - - // Get the parent directory of supplied path - let parent = path._nsObject.deletingLastPathComponent - var faAttributes: WIN32_FILE_ATTRIBUTE_DATA = WIN32_FILE_ATTRIBUTE_DATA() - do { faAttributes = try windowsFileAttributes(atPath: parent) } catch { return false } - if faAttributes.dwFileAttributes & FILE_ATTRIBUTE_READONLY == FILE_ATTRIBUTE_READONLY { - return false - } - - do { faAttributes = try windowsFileAttributes(atPath: path) } catch { return false } - if faAttributes.dwFileAttributes & FILE_ATTRIBUTE_READONLY == FILE_ATTRIBUTE_READONLY { - return false - } - - return true - } - internal func _lstatFile(atPath path: String, withFileSystemRepresentation fsRep: UnsafePointer? = nil) throws -> stat { let (stbuf, _) = try _statxFile(atPath: path, withFileSystemRepresentation: fsRep) return stbuf @@ -908,90 +422,6 @@ extension FileManager { return (statInfo, UInt64(info.nFileIndexHigh << 32) | UInt64(info.nFileIndexLow)) } - internal func _contentsEqual(atPath path1: String, andPath path2: String) -> Bool { - let path1Handle: HANDLE = (try? FileManager.default._fileSystemRepresentation(withPath: path1) { - CreateFileW($0, GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - nil, OPEN_EXISTING, - FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, - nil) - }) ?? INVALID_HANDLE_VALUE - if path1Handle == INVALID_HANDLE_VALUE { return false } - defer { CloseHandle(path1Handle) } - - let path2Handle: HANDLE = (try? FileManager.default._fileSystemRepresentation(withPath: path2) { - CreateFileW($0, GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - nil, OPEN_EXISTING, - FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, - nil) - }) ?? INVALID_HANDLE_VALUE - if path2Handle == INVALID_HANDLE_VALUE { return false } - defer { CloseHandle(path2Handle) } - - let file1Type = GetFileType(path1Handle) - guard GetLastError() == NO_ERROR else { - return false - } - let file2Type = GetFileType(path2Handle) - guard GetLastError() == NO_ERROR else { - return false - } - - guard file1Type == FILE_TYPE_DISK, file2Type == FILE_TYPE_DISK else { - return false - } - - var path1FileInfo = BY_HANDLE_FILE_INFORMATION() - var path2FileInfo = BY_HANDLE_FILE_INFORMATION() - guard GetFileInformationByHandle(path1Handle, &path1FileInfo), - GetFileInformationByHandle(path2Handle, &path2FileInfo) else { - return false - } - - // If both paths point to the same volume/filenumber or they are both zero length - // then they are considered equal - if path1FileInfo.nFileIndexHigh == path2FileInfo.nFileIndexHigh - && path1FileInfo.nFileIndexLow == path2FileInfo.nFileIndexLow - && path1FileInfo.dwVolumeSerialNumber == path2FileInfo.dwVolumeSerialNumber { - return true - } - - let path1Attrs = path1FileInfo.dwFileAttributes - let path2Attrs = path2FileInfo.dwFileAttributes - if path1Attrs & FILE_ATTRIBUTE_REPARSE_POINT == FILE_ATTRIBUTE_REPARSE_POINT - || path2Attrs & FILE_ATTRIBUTE_REPARSE_POINT == FILE_ATTRIBUTE_REPARSE_POINT { - guard path1Attrs & FILE_ATTRIBUTE_REPARSE_POINT == FILE_ATTRIBUTE_REPARSE_POINT - && path2Attrs & FILE_ATTRIBUTE_REPARSE_POINT == FILE_ATTRIBUTE_REPARSE_POINT else { - return false - } - guard let pathDest1 = try? _destinationOfSymbolicLink(atPath: path1), - let pathDest2 = try? _destinationOfSymbolicLink(atPath: path2) else { - return false - } - return pathDest1 == pathDest2 - } else if FILE_ATTRIBUTE_DIRECTORY & path1Attrs == FILE_ATTRIBUTE_DIRECTORY - || FILE_ATTRIBUTE_DIRECTORY & path2Attrs == FILE_ATTRIBUTE_DIRECTORY { - guard FILE_ATTRIBUTE_DIRECTORY & path1Attrs == FILE_ATTRIBUTE_DIRECTORY - && FILE_ATTRIBUTE_DIRECTORY & path2Attrs == FILE_ATTRIBUTE_DIRECTORY else { - return false - } - return _compareDirectories(atPath: path1, andPath: path2) - } else { - if path1FileInfo.nFileSizeHigh == 0 && path1FileInfo.nFileSizeLow == 0 - && path2FileInfo.nFileSizeHigh == 0 && path2FileInfo.nFileSizeLow == 0 { - return true - } - - return try! FileManager.default._fileSystemRepresentation(withPath: path1, andPath: path2) { - _compareFiles(withFileSystemRepresentation: $0, - andFileSystemRepresentation: $1, - size: (Int64(path1FileInfo.nFileSizeHigh) << 32) | Int64(path1FileInfo.nFileSizeLow), - bufSize: 0x1000) - } - } - } - internal func _appendSymlinkDestination(_ dest: String, toPath: String) -> String { if dest.isAbsolutePath { return dest } let temp = toPath._bridgeToObjectiveC().deletingLastPathComponent diff --git a/Sources/Foundation/FileManager+XDG.swift b/Sources/Foundation/FileManager+XDG.swift deleted file mode 100644 index 511faad64c..0000000000 --- a/Sources/Foundation/FileManager+XDG.swift +++ /dev/null @@ -1,125 +0,0 @@ -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See http://swift.org/LICENSE.txt for license information -// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// - -@_implementationOnly import _CoreFoundation - -enum _XDGUserDirectory: String { - case desktop = "DESKTOP" - case download = "DOWNLOAD" - case publicShare = "PUBLICSHARE" - case documents = "DOCUMENTS" - case music = "MUSIC" - case pictures = "PICTURES" - case videos = "VIDEOS" - - static let allDirectories: [_XDGUserDirectory] = [ - .desktop, - .download, - .publicShare, - .documents, - .music, - .pictures, - .videos, - ] - - var url: URL { - return url(userConfiguration: _XDGUserDirectory.configuredDirectoryURLs, - osDefaultConfiguration: _XDGUserDirectory.osDefaultDirectoryURLs, - stopgaps: _XDGUserDirectory.stopgapDefaultDirectoryURLs) - } - - func url(userConfiguration: [_XDGUserDirectory: URL], - osDefaultConfiguration: [_XDGUserDirectory: URL], - stopgaps: [_XDGUserDirectory: URL]) -> URL { - if let url = userConfiguration[self] { - return url - } else if let url = osDefaultConfiguration[self] { - return url - } else { - return stopgaps[self]! - } - } - - static let stopgapDefaultDirectoryURLs: [_XDGUserDirectory: URL] = { - let home = URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true) - return [ - .desktop: home.appendingPathComponent("Desktop"), - .download: home.appendingPathComponent("Downloads"), - .publicShare: home.appendingPathComponent("Public"), - .documents: home.appendingPathComponent("Documents"), - .music: home.appendingPathComponent("Music"), - .pictures: home.appendingPathComponent("Pictures"), - .videos: home.appendingPathComponent("Videos"), - ] - }() - - static func userDirectories(fromConfigurationFileAt url: URL) -> [_XDGUserDirectory: URL]? { - if let configuration = try? String(contentsOf: url, encoding: .utf8) { - return userDirectories(fromConfiguration: configuration) - } else { - return nil - } - } - - static func userDirectories(fromConfiguration configuration: String) -> [_XDGUserDirectory: URL] { - var entries: [_XDGUserDirectory: URL] = [:] - let home = URL(fileURLWithPath: NSHomeDirectory(), isDirectory: true) - - // Parse it: - let lines = configuration.split(separator: "\n") - for line in lines { - if let range = line.range(of: "=") { - var variable = String(line[line.startIndex ..< range.lowerBound].trimmingCharacters(in: .whitespaces)) - - let prefix = "XDG_" - let suffix = "_DIR" - if variable.hasPrefix(prefix) && variable.hasSuffix(suffix) { - let endOfPrefix = variable.index(variable.startIndex, offsetBy: prefix.length) - let startOfSuffix = variable.index(variable.endIndex, offsetBy: -suffix.length) - - variable = String(variable[endOfPrefix ..< startOfSuffix]) - } - - guard let directory = _XDGUserDirectory(rawValue: variable) else { - continue - } - - let path = String(line[range.upperBound ..< line.endIndex]).trimmingCharacters(in: .whitespaces) - if !path.isEmpty { - entries[directory] = URL(fileURLWithPath: path, isDirectory: true, relativeTo: home) - } - } else { - return [:] // Incorrect syntax. - } - } - - return entries - } - - static let configuredDirectoryURLs: [_XDGUserDirectory: URL] = { - let configurationHome = __SwiftValue.fetch(nonOptional: _CFXDGCreateConfigHomePath()) as! String - let configurationFile = URL(fileURLWithPath: "user-dirs.dirs", isDirectory: false, relativeTo: URL(fileURLWithPath: configurationHome, isDirectory: true)) - - return userDirectories(fromConfigurationFileAt: configurationFile) ?? [:] - }() - - static let osDefaultDirectoryURLs: [_XDGUserDirectory: URL] = { - let configurationDirs = __SwiftValue.fetch(nonOptional: _CFXDGCreateConfigDirectoriesPaths()) as! [String] - - for directory in configurationDirs { - let configurationFile = URL(fileURLWithPath: directory, isDirectory: true).appendingPathComponent("user-dirs.defaults") - - if let result = userDirectories(fromConfigurationFileAt: configurationFile) { - return result - } - } - - return [:] - }() -} diff --git a/Sources/Foundation/FileManager.swift b/Sources/Foundation/FileManager.swift index a78ef93386..29c934b90d 100644 --- a/Sources/Foundation/FileManager.swift +++ b/Sources/Foundation/FileManager.swift @@ -33,16 +33,25 @@ internal typealias NativeFSRCharType = CChar internal let NativeFSREncoding = String.Encoding.utf8.rawValue #endif -open class FileManager : NSObject { - - /* Returns the default singleton instance. - */ - private static let _default = FileManager() - open class var `default`: FileManager { - get { - return _default - } - } + +#if os(Linux) +// statx() is only supported by Linux kernels >= 4.11.0 +internal var supportsStatx: Bool = { + let requiredVersion = OperatingSystemVersion(majorVersion: 4, minorVersion: 11, patchVersion: 0) + return ProcessInfo.processInfo.isOperatingSystemAtLeast(requiredVersion) +}() + +// renameat2() is only supported by Linux kernels >= 3.15 +internal var kernelSupportsRenameat2: Bool = { + let requiredVersion = OperatingSystemVersion(majorVersion: 3, minorVersion: 15, patchVersion: 0) + return ProcessInfo.processInfo.isOperatingSystemAtLeast(requiredVersion) +}() +#endif + +// For testing only: this facility pins the language used by displayName to the passed-in language. +private var _overriddenDisplayNameLanguages: [String]? = nil + +extension FileManager { /// Returns an array of URLs that identify the mounted volumes available on the device. open func mountedVolumeURLs(includingResourceValuesForKeys propertyKeys: [URLResourceKey]?, options: VolumeEnumerationOptions = []) -> [URL]? { @@ -75,70 +84,6 @@ open class FileManager : NSObject { } return result } - - internal enum _SearchPathDomain { - case system - case local - case network - case user - - static let correspondingValues: [UInt: _SearchPathDomain] = [ - SearchPathDomainMask.systemDomainMask.rawValue: .system, - SearchPathDomainMask.localDomainMask.rawValue: .local, - SearchPathDomainMask.networkDomainMask.rawValue: .network, - SearchPathDomainMask.userDomainMask.rawValue: .user, - ] - - static let searchOrder: [SearchPathDomainMask] = [ - .systemDomainMask, - .localDomainMask, - .networkDomainMask, - .userDomainMask, - ] - - init?(_ domainMask: SearchPathDomainMask) { - if let value = _SearchPathDomain.correspondingValues[domainMask.rawValue] { - self = value - } else { - return nil - } - } - - static func allInSearchOrder(from domainMask: SearchPathDomainMask) -> [_SearchPathDomain] { - var domains: [_SearchPathDomain] = [] - - for bit in _SearchPathDomain.searchOrder { - if domainMask.contains(bit) { - domains.append(_SearchPathDomain.correspondingValues[bit.rawValue]!) - } - } - - return domains - } - } - - /* -URLsForDirectory:inDomains: is analogous to NSSearchPathForDirectoriesInDomains(), but returns an array of NSURL instances for use with URL-taking APIs. This API is suitable when you need to search for a file or files which may live in one of a variety of locations in the domains specified. - */ - open func urls(for directory: SearchPathDirectory, in domainMask: SearchPathDomainMask) -> [URL] { - return _urls(for: directory, in: domainMask) - } - - internal lazy var xdgHomeDirectory: String = { - let key = "HOME=" - if let contents = try? String(contentsOfFile: "/etc/default/useradd", encoding: .utf8) { - for line in contents.components(separatedBy: "\n") { - if line.hasPrefix(key) { - let index = line.index(line.startIndex, offsetBy: key.count) - let str = String(line[index...]) as NSString - let homeDir = str.trimmingCharacters(in: CharacterSet.whitespaces) - if homeDir.count > 0 { - return homeDir - } - } - } - } - return "/home" - }() private enum URLForDirectoryError: Error { case directoryUnknown @@ -216,11 +161,11 @@ open class FileManager : NSObject { if shouldCreate || directory == .itemReplacementDirectory { var attributes: [FileAttributeKey : Any] = [:] - switch _SearchPathDomain(domain) { - case .some(.user): + switch domain { + case .userDomainMask: attributes[.posixPermissions] = 0o700 - case .some(.system): + case .systemDomainMask: attributes[.posixPermissions] = 0o755 attributes[.ownerAccountID] = 0 // root #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) @@ -326,39 +271,6 @@ open class FileManager : NSObject { try getRelationship(outRelationship, ofDirectoryAt: try self.url(for: directory, in: actualMask, appropriateFor: url, create: false), toItemAt: url) } - /* createDirectoryAtURL:withIntermediateDirectories:attributes:error: creates a directory at the specified URL. If you pass 'NO' for withIntermediateDirectories, the directory must not exist at the time this call is made. Passing 'YES' for withIntermediateDirectories will create any necessary intermediate directories. This method returns YES if all directories specified in 'url' were created and attributes were set. Directories are created with attributes specified by the dictionary passed to 'attributes'. If no dictionary is supplied, directories are created according to the umask of the process. This method returns NO if a failure occurs at any stage of the operation. If an error parameter was provided, a presentable NSError will be returned by reference. - */ - open func createDirectory(at url: URL, withIntermediateDirectories createIntermediates: Bool, attributes: [FileAttributeKey : Any]? = [:]) throws { - guard url.isFileURL else { - throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteUnsupportedScheme.rawValue, userInfo: [NSURLErrorKey : url]) - } - try self.createDirectory(atPath: url.path, withIntermediateDirectories: createIntermediates, attributes: attributes) - } - - /* createSymbolicLinkAtURL:withDestinationURL:error: returns YES if the symbolic link that point at 'destURL' was able to be created at the location specified by 'url'. 'destURL' is always resolved against its base URL, if it has one. If 'destURL' has no base URL and it's 'relativePath' is indeed a relative path, then a relative symlink will be created. If this method returns NO, the link was unable to be created and an NSError will be returned by reference in the 'error' parameter. This method does not traverse a terminal symlink. - */ - open func createSymbolicLink(at url: URL, withDestinationURL destURL: URL) throws { - guard url.isFileURL else { - throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteUnsupportedScheme.rawValue, userInfo: [NSURLErrorKey : url]) - } - guard destURL.scheme == nil || destURL.isFileURL else { - throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteUnsupportedScheme.rawValue, userInfo: [NSURLErrorKey : destURL]) - } - try self.createSymbolicLink(atPath: url.path, withDestinationPath: destURL.path) - } - - /* Instances of FileManager may now have delegates. Each instance has one delegate, and the delegate is not retained. In versions of Mac OS X prior to 10.5, the behavior of calling [[NSFileManager alloc] init] was undefined. In Mac OS X 10.5 "Leopard" and later, calling [[NSFileManager alloc] init] returns a new instance of an FileManager. - */ - open weak var delegate: FileManagerDelegate? - - /* setAttributes:ofItemAtPath:error: returns YES when the attributes specified in the 'attributes' dictionary are set successfully on the item specified by 'path'. If this method returns NO, a presentable NSError will be provided by-reference in the 'error' parameter. If no error is required, you may pass 'nil' for the error. - - This method replaces changeFileAttributes:atPath:. - */ - open func setAttributes(_ attributes: [FileAttributeKey : Any], ofItemAtPath path: String) throws { - try _setAttributes(attributes, ofItemAtPath: path) - } - internal func _setAttributes(_ attributeValues: [FileAttributeKey : Any], ofItemAtPath path: String, includingPrivateAttributes: Bool = false) throws { var attributes = Set(attributeValues.keys) if !includingPrivateAttributes { @@ -487,61 +399,6 @@ open class FileManager : NSObject { } } - /* createDirectoryAtPath:withIntermediateDirectories:attributes:error: creates a directory at the specified path. If you pass 'NO' for createIntermediates, the directory must not exist at the time this call is made. Passing 'YES' for 'createIntermediates' will create any necessary intermediate directories. This method returns YES if all directories specified in 'path' were created and attributes were set. Directories are created with attributes specified by the dictionary passed to 'attributes'. If no dictionary is supplied, directories are created according to the umask of the process. This method returns NO if a failure occurs at any stage of the operation. If an error parameter was provided, a presentable NSError will be returned by reference. - - This method replaces createDirectoryAtPath:attributes: - */ - open func createDirectory(atPath path: String, withIntermediateDirectories createIntermediates: Bool, attributes: [FileAttributeKey : Any]? = [:]) throws { - return try _createDirectory(atPath: path, withIntermediateDirectories: createIntermediates, attributes: attributes) - } - - /** - Performs a shallow search of the specified directory and returns the paths of any contained items. - - This method performs a shallow search of the directory and therefore does not traverse symbolic links or return the contents of any subdirectories. This method also does not return URLs for the current directory (“.”), parent directory (“..”) but it does return other hidden files (files that begin with a period character). - - The order of the files in the returned array is undefined. - - - Parameter path: The path to the directory whose contents you want to enumerate. - - - Throws: `NSError` if the directory does not exist, this error is thrown with the associated error code. - - - Returns: An array of String each of which identifies a file, directory, or symbolic link contained in `path`. The order of the files returned is undefined. - */ - open func contentsOfDirectory(atPath path: String) throws -> [String] { - var contents: [String] = [] - - try _contentsOfDir(atPath: path, { (entryName, entryType) throws in - contents.append(entryName) - }) - return contents - } - - /** - Performs a deep enumeration of the specified directory and returns the paths of all of the contained subdirectories. - - This method recurses the specified directory and its subdirectories. The method skips the “.” and “..” directories at each level of the recursion. - - Because this method recurses the directory’s contents, you might not want to use it in performance-critical code. Instead, consider using the enumeratorAtURL:includingPropertiesForKeys:options:errorHandler: or enumeratorAtPath: method to enumerate the directory contents yourself. Doing so gives you more control over the retrieval of items and more opportunities to abort the enumeration or perform other tasks at the same time. - - - Parameter path: The path of the directory to list. - - - Throws: `NSError` if the directory does not exist, this error is thrown with the associated error code. - - - Returns: An array of NSString objects, each of which contains the path of an item in the directory specified by path. If path is a symbolic link, this method traverses the link. This method returns nil if it cannot retrieve the device of the linked-to file. - */ - open func subpathsOfDirectory(atPath path: String) throws -> [String] { - return try _subpathsOfDirectory(atPath: path) - } - - /* attributesOfItemAtPath:error: returns an NSDictionary of key/value pairs containing the attributes of the item (file, directory, symlink, etc.) at the path in question. If this method returns 'nil', an NSError will be returned by reference in the 'error' parameter. This method does not traverse a terminal symlink. - - This method replaces fileAttributesAtPath:traverseLink:. - */ - open func attributesOfItem(atPath path: String) throws -> [FileAttributeKey : Any] { - return try _attributesOfItem(atPath: path) - } - internal func _attributesOfItem(atPath path: String, includingPrivateAttributes: Bool = false) throws -> [FileAttributeKey: Any] { var result: [FileAttributeKey:Any] = [:] @@ -622,259 +479,19 @@ open class FileManager : NSObject { return result } - - /* attributesOfFileSystemForPath:error: returns an NSDictionary of key/value pairs containing the attributes of the filesystem containing the provided path. If this method returns 'nil', an NSError will be returned by reference in the 'error' parameter. This method does not traverse a terminal symlink. - - This method replaces fileSystemAttributesAtPath:. - */ - open func attributesOfFileSystem(forPath path: String) throws -> [FileAttributeKey : Any] { - return try _attributesOfFileSystem(forPath: path) - } - - /* createSymbolicLinkAtPath:withDestination:error: returns YES if the symbolic link that point at 'destPath' was able to be created at the location specified by 'path'. If this method returns NO, the link was unable to be created and an NSError will be returned by reference in the 'error' parameter. This method does not traverse a terminal symlink. - - This method replaces createSymbolicLinkAtPath:pathContent: - */ - open func createSymbolicLink(atPath path: String, withDestinationPath destPath: String) throws { - return try _createSymbolicLink(atPath: path, withDestinationPath: destPath) - } - - /* destinationOfSymbolicLinkAtPath:error: returns a String containing the path of the item pointed at by the symlink specified by 'path'. If this method returns 'nil', an NSError will be thrown. - - This method replaces pathContentOfSymbolicLinkAtPath: - */ - open func destinationOfSymbolicLink(atPath path: String) throws -> String { - return try _destinationOfSymbolicLink(atPath: path) - } internal func recursiveDestinationOfSymbolicLink(atPath path: String) throws -> String { return try _recursiveDestinationOfSymbolicLink(atPath: path) } - internal func extraErrorInfo(srcPath: String?, dstPath: String?, userVariant: String?) -> [String : Any] { - var result = [String : Any]() - result["NSSourceFilePathErrorKey"] = srcPath - result["NSDestinationFilePath"] = dstPath - result["NSUserStringVariant"] = userVariant.map(NSArray.init(object:)) - return result - } - - internal func shouldProceedAfterError(_ error: Error, copyingItemAtPath path: String, toPath: String, isURL: Bool) -> Bool { - guard let delegate = self.delegate else { return false } - if isURL { - return delegate.fileManager(self, shouldProceedAfterError: error, copyingItemAt: URL(fileURLWithPath: path), to: URL(fileURLWithPath: toPath)) - } else { - return delegate.fileManager(self, shouldProceedAfterError: error, copyingItemAtPath: path, toPath: toPath) - } - } - - internal func shouldCopyItemAtPath(_ path: String, toPath: String, isURL: Bool) -> Bool { - guard let delegate = self.delegate else { return true } - if isURL { - return delegate.fileManager(self, shouldCopyItemAt: URL(fileURLWithPath: path), to: URL(fileURLWithPath: toPath)) - } else { - return delegate.fileManager(self, shouldCopyItemAtPath: path, toPath: toPath) - } - } - - fileprivate func _copyItem(atPath srcPath: String, toPath dstPath: String, isURL: Bool) throws { - try _copyOrLinkDirectoryHelper(atPath: srcPath, toPath: dstPath) { (srcPath, dstPath, fileType) in - guard shouldCopyItemAtPath(srcPath, toPath: dstPath, isURL: isURL) else { - return - } - - do { - switch fileType { - case .typeRegular: - try _copyRegularFile(atPath: srcPath, toPath: dstPath) - case .typeSymbolicLink: - try _copySymlink(atPath: srcPath, toPath: dstPath) - default: - break - } - } catch { - if !shouldProceedAfterError(error, copyingItemAtPath: srcPath, toPath: dstPath, isURL: isURL) { - throw error - } - } - } - } - - internal func shouldProceedAfterError(_ error: Error, movingItemAtPath path: String, toPath: String, isURL: Bool) -> Bool { - guard let delegate = self.delegate else { return false } - if isURL { - return delegate.fileManager(self, shouldProceedAfterError: error, movingItemAt: URL(fileURLWithPath: path), to: URL(fileURLWithPath: toPath)) - } else { - return delegate.fileManager(self, shouldProceedAfterError: error, movingItemAtPath: path, toPath: toPath) - } - } - - internal func shouldMoveItemAtPath(_ path: String, toPath: String, isURL: Bool) -> Bool { - guard let delegate = self.delegate else { return true } - if isURL { - return delegate.fileManager(self, shouldMoveItemAt: URL(fileURLWithPath: path), to: URL(fileURLWithPath: toPath)) - } else { - return delegate.fileManager(self, shouldMoveItemAtPath: path, toPath: toPath) - } - } - - internal func shouldProceedAfterError(_ error: Error, linkingItemAtPath path: String, toPath: String, isURL: Bool) -> Bool { - guard let delegate = self.delegate else { return false } - if isURL { - return delegate.fileManager(self, shouldProceedAfterError: error, linkingItemAt: URL(fileURLWithPath: path), to: URL(fileURLWithPath: toPath)) - } else { - return delegate.fileManager(self, shouldProceedAfterError: error, linkingItemAtPath: path, toPath: toPath) - } - } - - internal func shouldLinkItemAtPath(_ path: String, toPath: String, isURL: Bool) -> Bool { - guard let delegate = self.delegate else { return true } - if isURL { - return delegate.fileManager(self, shouldLinkItemAt: URL(fileURLWithPath: path), to: URL(fileURLWithPath: toPath)) - } else { - return delegate.fileManager(self, shouldLinkItemAtPath: path, toPath: toPath) - } - } - - internal func shouldProceedAfterError(_ error: Error, removingItemAtPath path: String, isURL: Bool) -> Bool { - guard let delegate = self.delegate else { return false } - if isURL { - return delegate.fileManager(self, shouldProceedAfterError: error, removingItemAt: URL(fileURLWithPath: path)) - } else { - return delegate.fileManager(self, shouldProceedAfterError: error, removingItemAtPath: path) - } - } - - internal func shouldRemoveItemAtPath(_ path: String, isURL: Bool) -> Bool { - guard let delegate = self.delegate else { return true } - if isURL { - return delegate.fileManager(self, shouldRemoveItemAt: URL(fileURLWithPath: path)) - } else { - return delegate.fileManager(self, shouldRemoveItemAtPath: path) - } - } - - open func copyItem(atPath srcPath: String, toPath dstPath: String) throws { - try _copyItem(atPath: srcPath, toPath: dstPath, isURL: false) - } - - open func moveItem(atPath srcPath: String, toPath dstPath: String) throws { - try _moveItem(atPath: srcPath, toPath: dstPath, isURL: false) - } - - open func linkItem(atPath srcPath: String, toPath dstPath: String) throws { - try _linkItem(atPath: srcPath, toPath: dstPath, isURL: false) - } - - open func removeItem(atPath path: String) throws { - try _removeItem(atPath: path, isURL: false) - } - - open func copyItem(at srcURL: URL, to dstURL: URL) throws { - guard srcURL.isFileURL else { - throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteUnsupportedScheme.rawValue, userInfo: [NSURLErrorKey : srcURL]) - } - guard dstURL.isFileURL else { - throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteUnsupportedScheme.rawValue, userInfo: [NSURLErrorKey : dstURL]) - } - try _copyItem(atPath: srcURL.path, toPath: dstURL.path, isURL: true) - } - - open func moveItem(at srcURL: URL, to dstURL: URL) throws { - guard srcURL.isFileURL else { - throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteUnsupportedScheme.rawValue, userInfo: [NSURLErrorKey : srcURL]) - } - guard dstURL.isFileURL else { - throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteUnsupportedScheme.rawValue, userInfo: [NSURLErrorKey : dstURL]) - } - try _moveItem(atPath: srcURL.path, toPath: dstURL.path, isURL: true) - } - - open func linkItem(at srcURL: URL, to dstURL: URL) throws { - guard srcURL.isFileURL else { - throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteUnsupportedScheme.rawValue, userInfo: [NSURLErrorKey : srcURL]) - } - guard dstURL.isFileURL else { - throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteUnsupportedScheme.rawValue, userInfo: [NSURLErrorKey : dstURL]) - } - try _linkItem(atPath: srcURL.path, toPath: dstURL.path, isURL: true) - } - - open func removeItem(at url: URL) throws { - guard url.isFileURL else { - throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteUnsupportedScheme.rawValue, userInfo: [NSURLErrorKey : url]) - } - try _removeItem(atPath: url.path, isURL: true) - } - - /* Process working directory management. Despite the fact that these are instance methods on FileManager, these methods report and change (respectively) the working directory for the entire process. Developers are cautioned that doing so is fraught with peril. - */ - open var currentDirectoryPath: String { - return _currentDirectoryPath() - } - - @discardableResult - open func changeCurrentDirectoryPath(_ path: String) -> Bool { - return _changeCurrentDirectoryPath(path) - } - - /* The following methods are of limited utility. Attempting to predicate behavior based on the current state of the filesystem or a particular file on the filesystem is encouraging odd behavior in the face of filesystem race conditions. It's far better to attempt an operation (like loading a file or creating a directory) and handle the error gracefully than it is to try to figure out ahead of time whether the operation will succeed. - */ - open func fileExists(atPath path: String) -> Bool { - return _fileExists(atPath: path, isDirectory: nil) - } - open func fileExists(atPath path: String, isDirectory: UnsafeMutablePointer?) -> Bool { - return _fileExists(atPath: path, isDirectory: isDirectory) - } - - open func isReadableFile(atPath path: String) -> Bool { - return _isReadableFile(atPath: path) - } - - open func isWritableFile(atPath path: String) -> Bool { - return _isWritableFile(atPath: path) - } - - open func isExecutableFile(atPath path: String) -> Bool { - return _isExecutableFile(atPath: path) - } - - /** - - parameters: - - path: The path to the file we are trying to determine is deletable. - - - returns: `true` if the file is deletable, `false` otherwise. - */ - open func isDeletableFile(atPath path: String) -> Bool { - return _isDeletableFile(atPath: path) - } - - internal func _compareDirectories(atPath path1: String, andPath path2: String) -> Bool { - guard let enumerator1 = enumerator(atPath: path1) else { - return false - } - - guard let enumerator2 = enumerator(atPath: path2) else { - return false - } - enumerator1.skipDescendants() - enumerator2.skipDescendants() - - var path1entries = Set() - while let item = enumerator1.nextObject() as? String { - path1entries.insert(item) - } - - while let item = enumerator2.nextObject() as? String { - if path1entries.remove(item) == nil { - return false - } - if contentsEqual(atPath: NSString(string: path1).appendingPathComponent(item), andPath: NSString(string: path2).appendingPathComponent(item)) == false { - return false + var isDir: Bool = false + defer { + if let isDirectory { + isDirectory.pointee = ObjCBool(isDir) } } - return path1entries.isEmpty + return self.fileExists(atPath: path, isDirectory: &isDir) } internal func _filePermissionsMask(mode : UInt32) -> Int { @@ -891,57 +508,7 @@ open class FileManager : NSObject { let fileInfo = try _lstatFile(atPath: path) return _filePermissionsMask(mode: UInt32(fileInfo.st_mode)) } - -#if os(Linux) - // statx() is only supported by Linux kernels >= 4.11.0 - internal lazy var supportsStatx: Bool = { - let requiredVersion = OperatingSystemVersion(majorVersion: 4, minorVersion: 11, patchVersion: 0) - return ProcessInfo.processInfo.isOperatingSystemAtLeast(requiredVersion) - }() - - // renameat2() is only supported by Linux kernels >= 3.15 - internal lazy var kernelSupportsRenameat2: Bool = { - let requiredVersion = OperatingSystemVersion(majorVersion: 3, minorVersion: 15, patchVersion: 0) - return ProcessInfo.processInfo.isOperatingSystemAtLeast(requiredVersion) - }() -#endif - - internal func _compareFiles(withFileSystemRepresentation file1Rep: UnsafePointer, andFileSystemRepresentation file2Rep: UnsafePointer, size: Int64, bufSize: Int) -> Bool { - guard let file1 = FileHandle(fileSystemRepresentation: file1Rep, flags: O_RDONLY, createMode: 0) else { return false } - guard let file2 = FileHandle(fileSystemRepresentation: file2Rep, flags: O_RDONLY, createMode: 0) else { return false } - - let buffer1 = UnsafeMutablePointer.allocate(capacity: bufSize) - let buffer2 = UnsafeMutablePointer.allocate(capacity: bufSize) - defer { - buffer1.deallocate() - buffer2.deallocate() - } - var bytesLeft = size - while bytesLeft > 0 { - let bytesToRead = Int(min(Int64(bufSize), bytesLeft)) - - guard let file1BytesRead = try? file1._readBytes(into: buffer1, length: bytesToRead), file1BytesRead == bytesToRead else { - return false - } - guard let file2BytesRead = try? file2._readBytes(into: buffer2, length: bytesToRead), file2BytesRead == bytesToRead else { - return false - } - guard memcmp(buffer1, buffer2, bytesToRead) == 0 else { - return false - } - bytesLeft -= Int64(bytesToRead) - } - return true - } - - /* -contentsEqualAtPath:andPath: does not take into account data stored in the resource fork or filesystem extended attributes. - */ - open func contentsEqual(atPath path1: String, andPath path2: String) -> Bool { - return _contentsEqual(atPath: path1, andPath: path2) - } - // For testing only: this facility pins the language used by displayName to the passed-in language. - private var _overriddenDisplayNameLanguages: [String]? = nil internal func _overridingDisplayNameLanguages(with languages: [String], within body: () throws -> T) rethrows -> T { let old = _overriddenDisplayNameLanguages defer { _overriddenDisplayNameLanguages = old } @@ -1031,44 +598,26 @@ open class FileManager : NSObject { return try? subpathsOfDirectory(atPath: path) } - /* These methods are provided here for compatibility. The corresponding methods on NSData which return NSErrors should be regarded as the primary method of creating a file from an NSData or retrieving the contents of a file as an NSData. - */ - open func contents(atPath path: String) -> Data? { - return try? Data(contentsOf: URL(fileURLWithPath: path)) - } - - @discardableResult - open func createFile(atPath path: String, contents data: Data?, attributes attr: [FileAttributeKey : Any]? = nil) -> Bool { - do { - try (data ?? Data()).write(to: URL(fileURLWithPath: path), options: .atomic) - if let attr = attr { - try self.setAttributes(attr, ofItemAtPath: path) - } - return true - } catch { - return false - } - } - /* fileSystemRepresentationWithPath: returns an array of characters suitable for passing to lower-level POSIX style APIs. The string is provided in the representation most appropriate for the filesystem in question. */ open func fileSystemRepresentation(withPath path: String) -> UnsafePointer { precondition(path != "", "Empty path argument") -#if os(Windows) - // On Windows, the internal _fileSystemRepresentation returns UTF16 - // encoded data, so we need to re-encode the result as UTF-8 before - // returning. - return try! _fileSystemRepresentation(withPath: path) { - String(decodingCString: $0, as: UTF16.self).withCString() { - let size = strnlen($0, Int(MAX_PATH)) - let buffer = UnsafeMutablePointer.allocate(capacity: size + 1) - buffer.initialize(from: $0, count: size + 1) - return UnsafePointer(buffer) + return self.withFileSystemRepresentation(for: path) { ptr in + guard let ptr else { + let allocation = UnsafeMutablePointer.allocate(capacity: 1) + allocation.pointee = 0 + return UnsafePointer(allocation) } + var endIdx = ptr + while endIdx.pointee != 0 { + endIdx = endIdx.advanced(by: 1) + } + endIdx = endIdx.advanced(by: 1) + let size = ptr.distance(to: endIdx) + let buffer = UnsafeMutableBufferPointer.allocate(capacity: size) + buffer.initialize(fromContentsOf: UnsafeBufferPointer(start: ptr, count: size)) + return UnsafePointer(buffer.baseAddress!) } -#else - return try! __fileSystemRepresentation(withPath: path) -#endif } internal func __fileSystemRepresentation(withPath path: String) throws -> UnsafePointer { @@ -1100,12 +649,6 @@ open class FileManager : NSObject { return try body(fsRep1, fsRep2) } - /* stringWithFileSystemRepresentation:length: returns an NSString created from an array of bytes that are in the filesystem representation. - */ - open func string(withFileSystemRepresentation str: UnsafePointer, length len: Int) -> String { - return NSString(bytes: str, length: len, encoding: String.Encoding.utf8.rawValue)!._swiftObject - } - /* -replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error: is for developers who wish to perform a safe-save without using the full NSDocument machinery that is available in the AppKit. The `originalItemURL` is the item being replaced. @@ -1150,25 +693,6 @@ open class FileManager : NSObject { return _appendSymlinkDestination(destination, toPath: path) } - - open var homeDirectoryForCurrentUser: URL { - CFCopyHomeDirectoryURLForUser(nil)!.takeRetainedValue()._swiftObject - } - - open var temporaryDirectory: URL { - return URL(fileURLWithPath: NSTemporaryDirectory()) - } - - open func homeDirectory(forUser userName: String) -> URL? { - guard !userName.isEmpty else { return nil } - // Prefer to take the `CFCopyHomeDirectoryURLForUser` path for the - // current user. - return CFCopyHomeDirectoryURLForUser(userName == NSUserName() - ? nil - : userName._cfObject)? - .takeRetainedValue() - ._swiftObject - } } extension FileManager { @@ -1184,79 +708,9 @@ extension FileManager { */ public static let produceFileReferenceURLs = VolumeEnumerationOptions(rawValue: 1 << 2) } - - public struct DirectoryEnumerationOptions : OptionSet { - public let rawValue : UInt - public init(rawValue: UInt) { self.rawValue = rawValue } - - /* NSDirectoryEnumerationSkipsSubdirectoryDescendants causes the NSDirectoryEnumerator to perform a shallow enumeration and not descend into directories it encounters. - */ - public static let skipsSubdirectoryDescendants = DirectoryEnumerationOptions(rawValue: 1 << 0) - - /* NSDirectoryEnumerationSkipsPackageDescendants will cause the NSDirectoryEnumerator to not descend into packages. - */ - public static let skipsPackageDescendants = DirectoryEnumerationOptions(rawValue: 1 << 1) - - /* NSDirectoryEnumerationSkipsHiddenFiles causes the NSDirectoryEnumerator to not enumerate hidden files. - */ - public static let skipsHiddenFiles = DirectoryEnumerationOptions(rawValue: 1 << 2) - } - - public struct ItemReplacementOptions : OptionSet { - public let rawValue : UInt - public init(rawValue: UInt) { self.rawValue = rawValue } - - /* Causes -replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error: to use metadata from the new item only and not to attempt to preserve metadata from the original item. - */ - public static let usingNewMetadataOnly = ItemReplacementOptions(rawValue: 1 << 0) - - /* Causes -replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error: to leave the backup item in place after a successful replacement. The default behavior is to remove the item. - */ - public static let withoutDeletingBackupItem = ItemReplacementOptions(rawValue: 1 << 1) - } - - public enum URLRelationship : Int { - case contains - case same - case other - } } -public struct FileAttributeKey : RawRepresentable, Equatable, Hashable { - public let rawValue: String - - public init(_ rawValue: String) { - self.rawValue = rawValue - } - - public init(rawValue: String) { - self.rawValue = rawValue - } - - public static let type = FileAttributeKey(rawValue: "NSFileType") - public static let size = FileAttributeKey(rawValue: "NSFileSize") - public static let modificationDate = FileAttributeKey(rawValue: "NSFileModificationDate") - public static let referenceCount = FileAttributeKey(rawValue: "NSFileReferenceCount") - public static let deviceIdentifier = FileAttributeKey(rawValue: "NSFileDeviceIdentifier") - public static let ownerAccountName = FileAttributeKey(rawValue: "NSFileOwnerAccountName") - public static let groupOwnerAccountName = FileAttributeKey(rawValue: "NSFileGroupOwnerAccountName") - public static let posixPermissions = FileAttributeKey(rawValue: "NSFilePosixPermissions") - public static let systemNumber = FileAttributeKey(rawValue: "NSFileSystemNumber") - public static let systemFileNumber = FileAttributeKey(rawValue: "NSFileSystemFileNumber") - public static let extensionHidden = FileAttributeKey(rawValue: "NSFileExtensionHidden") - public static let hfsCreatorCode = FileAttributeKey(rawValue: "NSFileHFSCreatorCode") - public static let hfsTypeCode = FileAttributeKey(rawValue: "NSFileHFSTypeCode") - public static let immutable = FileAttributeKey(rawValue: "NSFileImmutable") - public static let appendOnly = FileAttributeKey(rawValue: "NSFileAppendOnly") - public static let creationDate = FileAttributeKey(rawValue: "NSFileCreationDate") - public static let ownerAccountID = FileAttributeKey(rawValue: "NSFileOwnerAccountID") - public static let groupOwnerAccountID = FileAttributeKey(rawValue: "NSFileGroupOwnerAccountID") - public static let busy = FileAttributeKey(rawValue: "NSFileBusy") - public static let systemSize = FileAttributeKey(rawValue: "NSFileSystemSize") - public static let systemFreeSize = FileAttributeKey(rawValue: "NSFileSystemFreeSize") - public static let systemNodes = FileAttributeKey(rawValue: "NSFileSystemNodes") - public static let systemFreeNodes = FileAttributeKey(rawValue: "NSFileSystemFreeNodes") - +extension FileAttributeKey { // These are the public keys: internal static let allPublicKeys: Set = [ .type, @@ -1293,17 +747,7 @@ public struct FileAttributeKey : RawRepresentable, Equatable, Hashable { internal static let _accessDate = FileAttributeKey(rawValue: "org.swift.Foundation.FileAttributeKey._accessDate") } -public struct FileAttributeType : RawRepresentable, Equatable, Hashable { - public let rawValue: String - - public init(_ rawValue: String) { - self.rawValue = rawValue - } - - public init(rawValue: String) { - self.rawValue = rawValue - } - +extension FileAttributeType { #if os(Windows) internal init(attributes: WIN32_FILE_ATTRIBUTE_DATA, atPath path: String) { if attributes.dwFileAttributes & FILE_ATTRIBUTE_DEVICE == FILE_ATTRIBUTE_DEVICE { @@ -1352,84 +796,6 @@ public struct FileAttributeType : RawRepresentable, Equatable, Hashable { } } #endif - - public static let typeDirectory = FileAttributeType(rawValue: "NSFileTypeDirectory") - public static let typeRegular = FileAttributeType(rawValue: "NSFileTypeRegular") - public static let typeSymbolicLink = FileAttributeType(rawValue: "NSFileTypeSymbolicLink") - public static let typeSocket = FileAttributeType(rawValue: "NSFileTypeSocket") - public static let typeCharacterSpecial = FileAttributeType(rawValue: "NSFileTypeCharacterSpecial") - public static let typeBlockSpecial = FileAttributeType(rawValue: "NSFileTypeBlockSpecial") - public static let typeUnknown = FileAttributeType(rawValue: "NSFileTypeUnknown") -} - -public protocol FileManagerDelegate : NSObjectProtocol { - - /* fileManager:shouldCopyItemAtPath:toPath: gives the delegate an opportunity to filter the resulting copy. Returning YES from this method will allow the copy to happen. Returning NO from this method causes the item in question to be skipped. If the item skipped was a directory, no children of that directory will be copied, nor will the delegate be notified of those children. - */ - func fileManager(_ fileManager: FileManager, shouldCopyItemAtPath srcPath: String, toPath dstPath: String) -> Bool - func fileManager(_ fileManager: FileManager, shouldCopyItemAt srcURL: URL, to dstURL: URL) -> Bool - - /* fileManager:shouldProceedAfterError:copyingItemAtPath:toPath: gives the delegate an opportunity to recover from or continue copying after an error. If an error occurs, the error object will contain an NSError indicating the problem. The source path and destination paths are also provided. If this method returns YES, the FileManager instance will continue as if the error had not occurred. If this method returns NO, the FileManager instance will stop copying, return NO from copyItemAtPath:toPath:error: and the error will be provided there. - */ - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, copyingItemAtPath srcPath: String, toPath dstPath: String) -> Bool - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, copyingItemAt srcURL: URL, to dstURL: URL) -> Bool - - /* fileManager:shouldMoveItemAtPath:toPath: gives the delegate an opportunity to not move the item at the specified path. If the source path and the destination path are not on the same device, a copy is performed to the destination path and the original is removed. If the copy does not succeed, an error is returned and the incomplete copy is removed, leaving the original in place. - - */ - func fileManager(_ fileManager: FileManager, shouldMoveItemAtPath srcPath: String, toPath dstPath: String) -> Bool - func fileManager(_ fileManager: FileManager, shouldMoveItemAt srcURL: URL, to dstURL: URL) -> Bool - - /* fileManager:shouldProceedAfterError:movingItemAtPath:toPath: functions much like fileManager:shouldProceedAfterError:copyingItemAtPath:toPath: above. The delegate has the opportunity to remedy the error condition and allow the move to continue. - */ - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, movingItemAtPath srcPath: String, toPath dstPath: String) -> Bool - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, movingItemAt srcURL: URL, to dstURL: URL) -> Bool - - /* fileManager:shouldLinkItemAtPath:toPath: acts as the other "should" methods, but this applies to the file manager creating hard links to the files in question. - */ - func fileManager(_ fileManager: FileManager, shouldLinkItemAtPath srcPath: String, toPath dstPath: String) -> Bool - func fileManager(_ fileManager: FileManager, shouldLinkItemAt srcURL: URL, to dstURL: URL) -> Bool - - /* fileManager:shouldProceedAfterError:linkingItemAtPath:toPath: allows the delegate an opportunity to remedy the error which occurred in linking srcPath to dstPath. If the delegate returns YES from this method, the linking will continue. If the delegate returns NO from this method, the linking operation will stop and the error will be returned via linkItemAtPath:toPath:error:. - */ - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, linkingItemAtPath srcPath: String, toPath dstPath: String) -> Bool - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, linkingItemAt srcURL: URL, to dstURL: URL) -> Bool - - /* fileManager:shouldRemoveItemAtPath: allows the delegate the opportunity to not remove the item at path. If the delegate returns YES from this method, the FileManager instance will attempt to remove the item. If the delegate returns NO from this method, the remove skips the item. If the item is a directory, no children of that item will be visited. - */ - func fileManager(_ fileManager: FileManager, shouldRemoveItemAtPath path: String) -> Bool - func fileManager(_ fileManager: FileManager, shouldRemoveItemAt URL: URL) -> Bool - - /* fileManager:shouldProceedAfterError:removingItemAtPath: allows the delegate an opportunity to remedy the error which occurred in removing the item at the path provided. If the delegate returns YES from this method, the removal operation will continue. If the delegate returns NO from this method, the removal operation will stop and the error will be returned via linkItemAtPath:toPath:error:. - */ - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, removingItemAtPath path: String) -> Bool - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, removingItemAt URL: URL) -> Bool -} - -extension FileManagerDelegate { - func fileManager(_ fileManager: FileManager, shouldCopyItemAtPath srcPath: String, toPath dstPath: String) -> Bool { return true } - func fileManager(_ fileManager: FileManager, shouldCopyItemAt srcURL: URL, to dstURL: URL) -> Bool { return true } - - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, copyingItemAtPath srcPath: String, toPath dstPath: String) -> Bool { return false } - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, copyingItemAt srcURL: URL, to dstURL: URL) -> Bool { return false } - - func fileManager(_ fileManager: FileManager, shouldMoveItemAtPath srcPath: String, toPath dstPath: String) -> Bool { return true } - func fileManager(_ fileManager: FileManager, shouldMoveItemAt srcURL: URL, to dstURL: URL) -> Bool { return true } - - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, movingItemAtPath srcPath: String, toPath dstPath: String) -> Bool { return false } - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, movingItemAt srcURL: URL, to dstURL: URL) -> Bool { return false } - - func fileManager(_ fileManager: FileManager, shouldLinkItemAtPath srcPath: String, toPath dstPath: String) -> Bool { return true } - func fileManager(_ fileManager: FileManager, shouldLinkItemAt srcURL: URL, to dstURL: URL) -> Bool { return true } - - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, linkingItemAtPath srcPath: String, toPath dstPath: String) -> Bool { return false } - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, linkingItemAt srcURL: URL, to dstURL: URL) -> Bool { return false } - - func fileManager(_ fileManager: FileManager, shouldRemoveItemAtPath path: String) -> Bool { return true } - func fileManager(_ fileManager: FileManager, shouldRemoveItemAt URL: URL) -> Bool { return true } - - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, removingItemAtPath path: String) -> Bool { return false } - func fileManager(_ fileManager: FileManager, shouldProceedAfterError error: Error, removingItemAt URL: URL) -> Bool { return false } } extension FileManager { diff --git a/Sources/Foundation/NSPathUtilities.swift b/Sources/Foundation/NSPathUtilities.swift index 8d79addcd1..ee326d29ed 100644 --- a/Sources/Foundation/NSPathUtilities.swift +++ b/Sources/Foundation/NSPathUtilities.swift @@ -28,64 +28,7 @@ let validPathSeps: [Character] = ["/"] #endif public func NSTemporaryDirectory() -> String { - func normalizedPath(with path: String) -> String { - if validPathSeps.contains(where: { path.hasSuffix(String($0)) }) { - return path - } else { - return path + String(validPathSeps.last!) - } - } -#if os(Windows) - let cchLength: DWORD = GetTempPathW(0, nil) - var wszPath: [WCHAR] = Array(repeating: 0, count: Int(cchLength + 1)) - guard GetTempPathW(DWORD(wszPath.count), &wszPath) <= cchLength else { - preconditionFailure("GetTempPathW mutation race") - } - return normalizedPath(with: String(decodingCString: wszPath, as: UTF16.self).standardizingPath) -#else -#if canImport(Darwin) - let safe_confstr = { (name: Int32, buf: UnsafeMutablePointer?, len: Int) -> Int in - // POSIX moment of weird: confstr() is one of those annoying APIs which - // can return zero for both error and non-error conditions, so the only - // way to disambiguate is to put errno in a known state before calling. - errno = 0 - let result = confstr(name, buf, len) - - // result == 0 is only error if errno is not zero. But, if there was an - // error, bail; all possible errors from confstr() are Very Bad Things. - let err = errno // only read errno once in the failure case. - precondition(result > 0 || err == 0, "Unexpected confstr() error: \(err)") - - // This is extreme paranoia and should never happen; this would mean - // confstr() returned < 0, which would only happen for impossibly long - // sizes of value or long-dead versions of the OS. - assert(result >= 0, "confstr() returned impossible result: \(result)") - - return result - } - - let length: Int = safe_confstr(_CS_DARWIN_USER_TEMP_DIR, nil, 0) - if length > 0 { - var buffer: [Int8] = Array(repeating: 0, count: length) - let final_length = safe_confstr(_CS_DARWIN_USER_TEMP_DIR, &buffer, buffer.count) - - assert(length == final_length, "Value of _CS_DARWIN_USER_TEMP_DIR changed?") - if length > 0 && length < buffer.count { - return String(cString: buffer, encoding: .utf8)! - } - } -#endif - if let tmpdir = ProcessInfo.processInfo.environment["TMPDIR"] { - return normalizedPath(with: tmpdir) - } -#if os(Android) - // Bionic uses /data/local/tmp/ as temporary directory. TMPDIR is rarely - // defined. - return "/data/local/tmp/" -#else - return "/tmp/" -#endif -#endif + FileManager.default.temporaryDirectory.path() } extension String { @@ -651,50 +594,6 @@ extension NSString { } -extension FileManager { - public enum SearchPathDirectory: UInt { - - case applicationDirectory // supported applications (Applications) - case demoApplicationDirectory // unsupported applications, demonstration versions (Demos) - case developerApplicationDirectory // developer applications (Developer/Applications). DEPRECATED - there is no one single Developer directory. - case adminApplicationDirectory // system and network administration applications (Administration) - case libraryDirectory // various documentation, support, and configuration files, resources (Library) - case developerDirectory // developer resources (Developer) DEPRECATED - there is no one single Developer directory. - case userDirectory // user home directories (Users) - case documentationDirectory // documentation (Documentation) - case documentDirectory // documents (Documents) - case coreServiceDirectory // location of CoreServices directory (System/Library/CoreServices) - case autosavedInformationDirectory // location of autosaved documents (Documents/Autosaved) - case desktopDirectory // location of user's desktop - case cachesDirectory // location of discardable cache files (Library/Caches) - case applicationSupportDirectory // location of application support files (plug-ins, etc) (Library/Application Support) - case downloadsDirectory // location of the user's "Downloads" directory - case inputMethodsDirectory // input methods (Library/Input Methods) - case moviesDirectory // location of user's Movies directory (~/Movies) - case musicDirectory // location of user's Music directory (~/Music) - case picturesDirectory // location of user's Pictures directory (~/Pictures) - case printerDescriptionDirectory // location of system's PPDs directory (Library/Printers/PPDs) - case sharedPublicDirectory // location of user's Public sharing directory (~/Public) - case preferencePanesDirectory // location of the PreferencePanes directory for use with System Preferences (Library/PreferencePanes) - case applicationScriptsDirectory // location of the user scripts folder for the calling application (~/Library/Application Scripts/code-signing-id) - case itemReplacementDirectory // For use with NSFileManager's URLForDirectory:inDomain:appropriateForURL:create:error: - case allApplicationsDirectory // all directories where applications can occur - case allLibrariesDirectory // all directories where resources can occur - case trashDirectory // location of Trash directory - } - - public struct SearchPathDomainMask: OptionSet { - public let rawValue : UInt - public init(rawValue: UInt) { self.rawValue = rawValue } - - public static let userDomainMask = SearchPathDomainMask(rawValue: 1) // user's home directory --- place to install user's personal items (~) - public static let localDomainMask = SearchPathDomainMask(rawValue: 2) // local to the current machine --- place to install items available to everyone on this machine (/Library) - public static let networkDomainMask = SearchPathDomainMask(rawValue: 4) // publically available location in the local area network --- place to install items available on the network (/Network) - public static let systemDomainMask = SearchPathDomainMask(rawValue: 8) // provided by Apple, unmodifiable (/System) - public static let allDomainsMask = SearchPathDomainMask(rawValue: 0x0ffff) // all domains: all of the above and future items - } -} - public func NSSearchPathForDirectoriesInDomains(_ directory: FileManager.SearchPathDirectory, _ domainMask: FileManager.SearchPathDomainMask, _ expandTilde: Bool) -> [String] { let knownDomains: [FileManager.SearchPathDomainMask] = [ .userDomainMask, @@ -722,21 +621,12 @@ public func NSSearchPathForDirectoriesInDomains(_ directory: FileManager.SearchP } public func NSHomeDirectory() -> String { - return NSHomeDirectoryForUser(nil)! + FileManager.default.homeDirectoryForCurrentUser.path } public func NSHomeDirectoryForUser(_ user: String?) -> String? { -#if os(WASI) // WASI does not have user concept - return nil -#else - let userName = user?._cfObject - guard let homeDir = CFCopyHomeDirectoryURLForUser(userName)?.takeRetainedValue() else { - return nil - } - - let url: URL = homeDir._swiftObject - return url.path -#endif + guard let user else { return NSHomeDirectory() } + return FileManager.default.homeDirectory(forUser: user)?.path } public func NSUserName() -> String { diff --git a/Tests/Foundation/TestFileManager.swift b/Tests/Foundation/TestFileManager.swift index 9d431f6f47..1f55939532 100644 --- a/Tests/Foundation/TestFileManager.swift +++ b/Tests/Foundation/TestFileManager.swift @@ -756,6 +756,8 @@ class TestFileManager : XCTestCase { createFile(atPath: "\(srcPath)/tempdir/tempfile2") createFile(atPath: "\(srcPath)/tempdir/subdir/otherdir/extradir/tempfile2") + #if false + // TODO: re-enable when URLResourceValues are supported in swift-foundation do { try fm.copyItem(atPath: srcPath, toPath: destPath) } catch { @@ -767,7 +769,7 @@ class TestFileManager : XCTestCase { XCTAssertTrue(fm.fileExists(atPath: "\(destPath)/tempdir/tempfile2")) XCTAssertTrue(directoryExists(atPath: "\(destPath)/tempdir/subdir/otherdir/extradir")) XCTAssertTrue(fm.fileExists(atPath: "\(destPath)/tempdir/subdir/otherdir/extradir/tempfile2")) - + #endif if (false == directoryExists(atPath: destPath)) { return } @@ -844,6 +846,8 @@ class TestFileManager : XCTestCase { fileInfos[name] = (isDir, inode, linkCount) }) XCTAssertEqual(fileInfos.count, 7) + #if false + // TODO: re-enable when URLResourceValues are supported in swift-foundation XCTAssertNotNil(try? fm.linkItem(atPath: srcPath, toPath: destPath), "Unable to link directory") getFileInfo(atPath: destPath, { name, isDir, inode, linkCount in @@ -879,6 +883,7 @@ class TestFileManager : XCTestCase { XCTFail("\(error)") } XCTAssertNil(try? fm.linkItem(atPath: srcLink, toPath: destLink), "Creating link where one already exists") + #endif } func test_resolvingSymlinksInPath() throws { @@ -949,8 +954,8 @@ class TestFileManager : XCTestCase { func test_homedirectoryForUser() { let filemanger = FileManager.default - XCTAssertNil(filemanger.homeDirectory(forUser: "someuser")) - XCTAssertNil(filemanger.homeDirectory(forUser: "")) + XCTAssertNotNil(filemanger.homeDirectory(forUser: "someuser")) + XCTAssertNotNil(filemanger.homeDirectory(forUser: "")) XCTAssertNotNil(filemanger.homeDirectoryForCurrentUser) } @@ -1295,86 +1300,89 @@ class TestFileManager : XCTestCase { // are throwable, an NSError is thrown instead which is more useful. let fm = FileManager.default - XCTAssertNil(fm.homeDirectory(forUser: "")) - XCTAssertNil(NSHomeDirectoryForUser("")) + XCTAssertEqual(fm.homeDirectory(forUser: ""), URL(filePath: "/var/empty", directoryHint: .isDirectory)) + XCTAssertEqual(NSHomeDirectoryForUser(""), "/var/empty") XCTAssertThrowsError(try fm.contentsOfDirectory(atPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileReadNoSuchFile) } XCTAssertNil(fm.enumerator(atPath: "")) XCTAssertNil(fm.subpaths(atPath: "")) XCTAssertThrowsError(try fm.subpathsOfDirectory(atPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.createDirectory(atPath: "", withIntermediateDirectories: true)) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileNoSuchFile) } XCTAssertFalse(fm.createFile(atPath: "", contents: Data())) XCTAssertThrowsError(try fm.removeItem(atPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileNoSuchFile) } XCTAssertThrowsError(try fm.copyItem(atPath: "", toPath: "/tmp/t")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.copyItem(atPath: "", toPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.copyItem(atPath: "/tmp/t", toPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadNoSuchFile) + XCTAssertEqual(code, .fileNoSuchFile) } + #if false + // TODO: re-enable when URLResourceValues are supported in swift-foundation XCTAssertThrowsError(try fm.moveItem(atPath: "", toPath: "/tmp/t")) { let code = ($0 as? CocoaError)?.code XCTAssertEqual(code, .fileReadInvalidFileName) } + #endif XCTAssertThrowsError(try fm.moveItem(atPath: "", toPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileWriteFileExists) } XCTAssertThrowsError(try fm.moveItem(atPath: "/tmp/t", toPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileWriteFileExists) } XCTAssertThrowsError(try fm.linkItem(atPath: "", toPath: "/tmp/t")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.linkItem(atPath: "", toPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.linkItem(atPath: "/tmp/t", toPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadNoSuchFile) + XCTAssertEqual(code, .fileNoSuchFile) } XCTAssertThrowsError(try fm.createSymbolicLink(atPath: "", withDestinationPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileNoSuchFile) } XCTAssertThrowsError(try fm.createSymbolicLink(atPath: "", withDestinationPath: "/tmp/t")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileNoSuchFile) } XCTAssertThrowsError(try fm.createSymbolicLink(atPath: "/tmp/t", withDestinationPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileNoSuchFile) } XCTAssertThrowsError(try fm.destinationOfSymbolicLink(atPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileReadNoSuchFile) } XCTAssertFalse(fm.fileExists(atPath: "")) XCTAssertFalse(fm.fileExists(atPath: "", isDirectory: nil)) @@ -1385,15 +1393,11 @@ class TestFileManager : XCTestCase { XCTAssertThrowsError(try fm.attributesOfItem(atPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.attributesOfFileSystem(forPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) - } - XCTAssertThrowsError(try fm.setAttributes([:], ofItemAtPath: "")) { - let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, .fileReadNoSuchFile) } XCTAssertNil(fm.contents(atPath: "")) diff --git a/Tests/Foundation/TestNSString.swift b/Tests/Foundation/TestNSString.swift index b3e24278a3..3ad5ee7b36 100644 --- a/Tests/Foundation/TestNSString.swift +++ b/Tests/Foundation/TestNSString.swift @@ -1047,7 +1047,7 @@ class TestNSString: LoopbackServerTest { let path = NSString(string: "~\(userName)/") let result = path.expandingTildeInPath // next assert fails in VirtualBox because home directory for unknown user resolved to /var/run/vboxadd - XCTAssertEqual(result, "~\(userName)", "Return copy of receiver if home directory could not be resolved.") + XCTAssertEqual(result, "/var/empty", "Return copy of receiver if home directory could not be resolved.") } } From ce230152d3d516623870d36ffa78e7a435585fb8 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Mon, 20 May 2024 17:29:37 -0700 Subject: [PATCH 069/198] Change the way we check for libcurl availability --- .../URLSession/URLSessionConfiguration.swift | 7 +- .../URLSession/URLSessionTask.swift | 6 +- .../URLSession/libcurl/EasyHandle.swift | 75 +++++++++---------- .../URLSession/libcurl/MultiHandle.swift | 6 +- .../CFURLSessionInterface.c | 13 +++- .../include/CFURLSessionInterface.h | 21 ++++++ 6 files changed, 72 insertions(+), 56 deletions(-) diff --git a/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift b/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift index 1282b70135..3f3b26bcb8 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift @@ -216,14 +216,9 @@ open class URLSessionConfiguration : NSObject, NSCopying { Note that these headers are added to the request only if not already present. */ open var httpAdditionalHeaders: [AnyHashable : Any]? = nil - #if NS_CURL_MISSING_MAX_HOST_CONNECTIONS /* The maximum number of simultaneous persistent connections per host */ - @available(*, deprecated, message: "This platform doles not support selecting the maximum number of simultaneous persistent connections per host. This property is ignored.") + /* On platforms with NS_CURL_MISSING_MAX_HOST_CONNECTIONS, this property is ignored. */ open var httpMaximumConnectionsPerHost: Int - #else - /* The maximum number of simultaneous persistent connections per host */ - open var httpMaximumConnectionsPerHost: Int - #endif /* The cookie storage object to use, or nil to indicate that no cookies should be handled */ open var httpCookieStorage: HTTPCookieStorage? diff --git a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift index 1ab0ff9dca..4abf622466 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift @@ -38,12 +38,8 @@ open class URLSessionTask : NSObject, NSCopying { didSet { updateProgress() } } - #if NS_CURL_MISSING_XFERINFOFUNCTION - @available(*, deprecated, message: "This platform doesn't fully support reporting the progress of a URLSessionTask. The progress instance returned will be functional, but may not have continuous updates as bytes are sent or received.") + /* On platforms with NS_CURL_XFERINFOFUNCTION_SUPPORTED not set, the progress instance returned will be functional, but may not have continuous updates as bytes are sent or received. */ open private(set) var progress = Progress(totalUnitCount: -1) - #else - open private(set) var progress = Progress(totalUnitCount: -1) - #endif func updateProgress() { self.workQueue.async { diff --git a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift index 5d3d849af7..671b694278 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift @@ -209,40 +209,39 @@ extension _EasyHandle { } #endif -#if !NS_CURL_MISSING_CURLINFO_CAINFO #if !os(Windows) && !os(macOS) && !os(iOS) && !os(watchOS) && !os(tvOS) - // Check if there is a default path; if there is, it will already - // be set, so leave things alone - var p: UnsafeMutablePointer? = nil - - try! CFURLSession_easy_getinfo_charp(rawHandle, CFURLSessionInfoCAINFO, &p).asError() - - if p != nil { - return - } - - // Otherwise, search a list of known paths - let paths = [ - "/etc/ssl/certs/ca-certificates.crt", - "/etc/pki/tls/certs/ca-bundle.crt", - "/usr/share/ssl/certs/ca-bundle.crt", - "/usr/local/share/certs/ca-root-nss.crt", - "/etc/ssl/cert.pem" - ] - - for path in paths { - var isDirectory: ObjCBool = false - if FileManager.default.fileExists(atPath: path, - isDirectory: &isDirectory) - && !isDirectory.boolValue { - path.withCString { pathPtr in - try! CFURLSession_easy_setopt_ptr(rawHandle, CFURLSessionOptionCAINFO, UnsafeMutablePointer(mutating: pathPtr)).asError() - } - return - } + if NS_CURL_CURLINFO_CAINFO_SUPPORTED == 1 { + // Check if there is a default path; if there is, it will already + // be set, so leave things alone + var p: UnsafeMutablePointer? = nil + + try! CFURLSession_easy_getinfo_charp(rawHandle, CFURLSessionInfoCAINFO, &p).asError() + if p != nil { + return + } + + // Otherwise, search a list of known paths + let paths = [ + "/etc/ssl/certs/ca-certificates.crt", + "/etc/pki/tls/certs/ca-bundle.crt", + "/usr/share/ssl/certs/ca-bundle.crt", + "/usr/local/share/certs/ca-root-nss.crt", + "/etc/ssl/cert.pem" + ] + + for path in paths { + var isDirectory: ObjCBool = false + if FileManager.default.fileExists(atPath: path, + isDirectory: &isDirectory) + && !isDirectory.boolValue { + path.withCString { pathPtr in + try! CFURLSession_easy_setopt_ptr(rawHandle, CFURLSessionOptionCAINFO, UnsafeMutablePointer(mutating: pathPtr)).asError() + } + return + } + } } #endif // !os(Windows) && !os(macOS) && !os(iOS) && !os(watchOS) && !os(tvOS) -#endif // !NS_CURL_MISSING_CURLINFO_CAINFO } /// Set allowed protocols @@ -626,13 +625,13 @@ fileprivate extension _EasyHandle { try! CFURLSession_easy_setopt_ptr(rawHandle, CFURLSessionOptionPROGRESSDATA, UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque())).asError() - #if !NS_CURL_MISSING_XFERINFOFUNCTION - try! CFURLSession_easy_setopt_tc(rawHandle, CFURLSessionOptionXFERINFOFUNCTION, { (userdata: UnsafeMutableRawPointer?, dltotal :Int64, dlnow: Int64, ultotal: Int64, ulnow: Int64) -> Int32 in - guard let handle = _EasyHandle.from(callbackUserData: userdata) else { return -1 } - handle.updateProgressMeter(with: _Progress(totalBytesSent: ulnow, totalBytesExpectedToSend: ultotal, totalBytesReceived: dlnow, totalBytesExpectedToReceive: dltotal)) - return 0 - }).asError() - #endif + if NS_CURL_XFERINFOFUNCTION_SUPPORTED == 1 { + try! CFURLSession_easy_setopt_tc(rawHandle, CFURLSessionOptionXFERINFOFUNCTION, { (userdata: UnsafeMutableRawPointer?, dltotal :Int64, dlnow: Int64, ultotal: Int64, ulnow: Int64) -> Int32 in + guard let handle = _EasyHandle.from(callbackUserData: userdata) else { return -1 } + handle.updateProgressMeter(with: _Progress(totalBytesSent: ulnow, totalBytesExpectedToSend: ultotal, totalBytesReceived: dlnow, totalBytesExpectedToReceive: dltotal)) + return 0 + }).asError() + } } /// This callback function gets called by libcurl when it receives body diff --git a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift index 8309ea3969..d63573cace 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift @@ -65,9 +65,9 @@ extension URLSession { extension URLSession._MultiHandle { func configure(with configuration: URLSession._Configuration) { - #if !NS_CURL_MISSING_MAX_HOST_CONNECTIONS - try! CFURLSession_multi_setopt_l(rawHandle, CFURLSessionMultiOptionMAX_HOST_CONNECTIONS, numericCast(configuration.httpMaximumConnectionsPerHost)).asError() - #endif + if NS_CURL_MAX_HOST_CONNECTIONS_SUPPORTED == 1 { + try! CFURLSession_multi_setopt_l(rawHandle, CFURLSessionMultiOptionMAX_HOST_CONNECTIONS, numericCast(configuration.httpMaximumConnectionsPerHost)).asError() + } try! CFURLSession_multi_setopt_l(rawHandle, CFURLSessionMultiOptionPIPELINING, configuration.httpShouldUsePipelining ? 3 : 2).asError() //TODO: We may want to set diff --git a/Sources/_CFURLSessionInterface/CFURLSessionInterface.c b/Sources/_CFURLSessionInterface/CFURLSessionInterface.c index d6d5f69f26..f97a49c171 100644 --- a/Sources/_CFURLSessionInterface/CFURLSessionInterface.c +++ b/Sources/_CFURLSessionInterface/CFURLSessionInterface.c @@ -540,8 +540,10 @@ CFURLSessionOption const CFURLSessionOptionTCP_KEEPIDLE = { CURLOPT_TCP_KEEPIDLE CFURLSessionOption const CFURLSessionOptionTCP_KEEPINTVL = { CURLOPT_TCP_KEEPINTVL }; CFURLSessionOption const CFURLSessionOptionSSL_OPTIONS = { CURLOPT_SSL_OPTIONS }; CFURLSessionOption const CFURLSessionOptionMAIL_AUTH = { CURLOPT_MAIL_AUTH }; -#if !NS_CURL_MISSING_XFERINFOFUNCTION +#if NS_CURL_XFERINFOFUNCTION_SUPPORTED CFURLSessionOption const CFURLSessionOptionXFERINFOFUNCTION = { CURLOPT_XFERINFOFUNCTION }; +#else +CFURLSessionOption const CFURLSessionOptionXFERINFOFUNCTION = { 0 }; #endif CFURLSessionInfo const CFURLSessionInfoTEXT = { CURLINFO_TEXT }; @@ -586,8 +588,10 @@ CFURLSessionInfo const CFURLSessionInfoFTP_ENTRY_PATH = { CURLINFO_FTP_ENTRY_PAT CFURLSessionInfo const CFURLSessionInfoREDIRECT_URL = { CURLINFO_REDIRECT_URL }; CFURLSessionInfo const CFURLSessionInfoPRIMARY_IP = { CURLINFO_PRIMARY_IP }; CFURLSessionInfo const CFURLSessionInfoAPPCONNECT_TIME = { CURLINFO_APPCONNECT_TIME }; -#if !NS_CURL_MISSING_CURLINFO_CAINFO +#if NS_CURL_CURLINFO_CAINFO_SUPPORTED CFURLSessionInfo const CFURLSessionInfoCAINFO = { CURLINFO_CAINFO }; +#else +CFURLSessionInfo const CFURLSessionInfoCAINFO = { CURLINFO_NONE }; #endif CFURLSessionInfo const CFURLSessionInfoCERTINFO = { CURLINFO_CERTINFO }; CFURLSessionInfo const CFURLSessionInfoCONDITION_UNMET = { CURLINFO_CONDITION_UNMET }; @@ -607,11 +611,12 @@ CFURLSessionMultiOption const CFURLSessionMultiOptionPIPELINING = { CURLMOPT_PIP CFURLSessionMultiOption const CFURLSessionMultiOptionTIMERFUNCTION = { CURLMOPT_TIMERFUNCTION }; CFURLSessionMultiOption const CFURLSessionMultiOptionTIMERDATA = { CURLMOPT_TIMERDATA }; CFURLSessionMultiOption const CFURLSessionMultiOptionMAXCONNECTS = { CURLMOPT_MAXCONNECTS }; -#if !NS_CURL_MISSING_MAX_HOST_CONNECTIONS +#if NS_CURL_MAX_HOST_CONNECTIONS_SUPPORTED CFURLSessionMultiOption const CFURLSessionMultiOptionMAX_HOST_CONNECTIONS = { CURLMOPT_MAX_HOST_CONNECTIONS }; +#else +CFURLSessionMultiOption const CFURLSessionMultiOptionMAX_HOST_CONNECTIONS = { 0 }; #endif - CFURLSessionMultiCode const CFURLSessionMultiCodeCALL_MULTI_PERFORM = { CURLM_CALL_MULTI_PERFORM }; CFURLSessionMultiCode const CFURLSessionMultiCodeOK = { CURLM_OK }; CFURLSessionMultiCode const CFURLSessionMultiCodeBAD_HANDLE = { CURLM_BAD_HANDLE }; diff --git a/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h b/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h index ec389c2b75..7a218835d0 100644 --- a/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h +++ b/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h @@ -34,6 +34,27 @@ #include #endif +// 7.84.0 or later +#if LIBCURL_VERSION_MAJOR > 7 || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR > 84) || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR == 84 && LIBCURL_VERSION_PATCH >= 0) +#define NS_CURL_CURLINFO_CAINFO_SUPPORTED 1 +#else +#define NS_CURL_CURLINFO_CAINFO_SUPPORTED 0 +#endif + +// 7.30.0 or later +#if LIBCURL_VERSION_MAJOR > 7 || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR > 30) || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR == 30 && LIBCURL_VERSION_PATCH >= 0) +#define NS_CURL_MAX_HOST_CONNECTIONS_SUPPORTED 1 +#else +#define NS_CURL_MAX_HOST_CONNECTIONS_SUPPORTED 0 +#endif + +// 7.32.0 or later +#if LIBCURL_VERSION_MAJOR > 7 || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR > 32) || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR == 32 && LIBCURL_VERSION_PATCH >= 0) +#define NS_CURL_XFERINFOFUNCTION_SUPPORTED 1 +#else +#define NS_CURL_XFERINFOFUNCTION_SUPPORTED 0 +#endif + CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN From 097f850b30b57ecb256bf6c2deea6c861f766bcb Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 23 May 2024 14:19:03 -0700 Subject: [PATCH 070/198] Mark Bundle as Sendable --- Sources/Foundation/Bundle.swift | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Sources/Foundation/Bundle.swift b/Sources/Foundation/Bundle.swift index 67223bfc41..b8b36d6426 100644 --- a/Sources/Foundation/Bundle.swift +++ b/Sources/Foundation/Bundle.swift @@ -12,11 +12,10 @@ @_silgen_name("swift_getTypeContextDescriptor") private func _getTypeContextDescriptor(of cls: AnyClass) -> UnsafeRawPointer -open class Bundle: NSObject { - private var _bundleStorage: AnyObject! - private final var _bundle: CFBundle! { - get { unsafeBitCast(_bundleStorage, to: CFBundle?.self) } - set { _bundleStorage = newValue } +open class Bundle: NSObject, @unchecked Sendable { + private let _bundleStorage: AnyObject! + private var _bundle: CFBundle! { + unsafeBitCast(_bundleStorage, to: CFBundle?.self) } public static var _supportsFHSBundles: Bool { @@ -82,13 +81,11 @@ open class Bundle: NSObject { } internal init(cfBundle: CFBundle) { + _bundleStorage = cfBundle super.init() - _bundle = cfBundle } public init?(path: String) { - super.init() - // TODO: We do not yet resolve symlinks, but we must for compatibility // let resolvedPath = path._nsObject.stringByResolvingSymlinksInPath let resolvedPath = path @@ -101,6 +98,8 @@ open class Bundle: NSObject { if (_bundleStorage == nil) { return nil } + + super.init() } public convenience init?(url: URL) { @@ -134,13 +133,12 @@ open class Bundle: NSObject { } public init?(identifier: String) { - super.init() - guard let result = CFBundleGetBundleWithIdentifier(identifier._cfObject) else { return nil } - _bundle = result + _bundleStorage = result + super.init() } public convenience init?(_executableURL: URL) { From ad8bf7bce39237491cddbbd7f3a2a05d7808f628 Mon Sep 17 00:00:00 2001 From: Charles Hu Date: Wed, 29 May 2024 13:48:28 -0700 Subject: [PATCH 071/198] Remove URLQueryItem from swift-corelibs-foundation in favor of FoundationEssentials.URLQueryItem --- Sources/Foundation/NSURLQueryItem.swift | 4 +- Sources/Foundation/URLQueryItem.swift | 63 +++---------------------- 2 files changed, 8 insertions(+), 59 deletions(-) diff --git a/Sources/Foundation/NSURLQueryItem.swift b/Sources/Foundation/NSURLQueryItem.swift index b4bb1f52e7..df76edb45c 100644 --- a/Sources/Foundation/NSURLQueryItem.swift +++ b/Sources/Foundation/NSURLQueryItem.swift @@ -7,7 +7,7 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // - +@_exported import FoundationEssentials // NSURLQueryItem encapsulates a single query name-value pair. The name and value strings of a query name-value pair are not percent encoded. For use with the NSURLComponents queryItems property. open class NSURLQueryItem: NSObject, NSSecureCoding, NSCopying { @@ -64,6 +64,6 @@ extension NSURLQueryItem: _StructTypeBridgeable { public typealias _StructType = URLQueryItem public func _bridgeToSwift() -> _StructType { - return _StructType._unconditionallyBridgeFromObjectiveC(self) + return _StructType(name: self.name, value: self.value) } } diff --git a/Sources/Foundation/URLQueryItem.swift b/Sources/Foundation/URLQueryItem.swift index 319df3e8b1..9445d1d8f3 100644 --- a/Sources/Foundation/URLQueryItem.swift +++ b/Sources/Foundation/URLQueryItem.swift @@ -7,63 +7,12 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // - -/// A single name-value pair, for use with `URLComponents`. -public struct URLQueryItem: ReferenceConvertible, Hashable, Equatable { - public typealias ReferenceType = NSURLQueryItem - - fileprivate var _queryItem: NSURLQueryItem - - public init(name: String, value: String?) { - _queryItem = NSURLQueryItem(name: name, value: value) - } - - fileprivate init(reference: NSURLQueryItem) { _queryItem = reference.copy() as! NSURLQueryItem } - fileprivate var reference: NSURLQueryItem { return _queryItem } - - public var name: String { - get { return _queryItem.name } - set { _queryItem = NSURLQueryItem(name: newValue, value: value) } - } - - public var value: String? { - get { return _queryItem.value } - set { _queryItem = NSURLQueryItem(name: name, value: newValue) } - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(_queryItem) - } - - public static func ==(lhs: URLQueryItem, rhs: URLQueryItem) -> Bool { - return lhs._queryItem.isEqual(rhs._queryItem) - } -} - -extension URLQueryItem: CustomStringConvertible, CustomDebugStringConvertible, CustomReflectable { - public var description: String { - if let v = value { - return "\(name)=\(v)" - } else { - return name - } - } - - public var debugDescription: String { - return self.description - } - - public var customMirror: Mirror { - var c: [(label: String?, value: Any)] = [] - c.append((label: "name", value: name)) - c.append((label: "value", value: value as Any)) - return Mirror(self, children: c, displayStyle: .struct) - } -} +// URLQueryItem is defined in FoundationEssentials +@_exported import FoundationEssentials extension URLQueryItem: _NSBridgeable { typealias NSType = NSURLQueryItem - internal var _nsObject: NSType { return _queryItem } + internal var _nsObject: NSType { return NSURLQueryItem(name: self.name, value: self.value) } } extension URLQueryItem: _ObjectiveCBridgeable { @@ -75,7 +24,7 @@ extension URLQueryItem: _ObjectiveCBridgeable { @_semantics("convertToObjectiveC") public func _bridgeToObjectiveC() -> NSURLQueryItem { - return _queryItem + return NSURLQueryItem(name: self.name, value: self.value) } public static func _forceBridgeFromObjectiveC(_ x: NSURLQueryItem, result: inout URLQueryItem?) { @@ -85,7 +34,7 @@ extension URLQueryItem: _ObjectiveCBridgeable { } public static func _conditionallyBridgeFromObjectiveC(_ x: NSURLQueryItem, result: inout URLQueryItem?) -> Bool { - result = URLQueryItem(reference: x) + result = URLQueryItem(name: x.name, value: x.value) return true } @@ -98,5 +47,5 @@ extension URLQueryItem: _ObjectiveCBridgeable { extension NSURLQueryItem: _SwiftBridgeable { typealias SwiftType = URLQueryItem - internal var _swiftObject: SwiftType { return URLQueryItem(reference: self) } + internal var _swiftObject: SwiftType { return URLQueryItem(name: self.name, value: self.value) } } From 08e829c4ba06f0fe3bb190b6b4037cb53b8aea32 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Wed, 29 May 2024 14:08:45 -0700 Subject: [PATCH 072/198] Add upcall for FoundationEssentials to initialize NSNumbers (#4966) * Add upcall for FoundationEssentials to initialize NSNumbers * Update swift-foundation commit hash --- Package.swift | 2 +- Sources/Foundation/NSNumber.swift | 16 ++++++++++++++++ Tests/Foundation/TestFileManager.swift | 11 +++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index a0a1881c38..3d8d20b094 100644 --- a/Package.swift +++ b/Package.swift @@ -82,7 +82,7 @@ let package = Package( ), .package( url: "https://github.com/apple/swift-foundation", - revision: "db63ab39bb4f07eeb3ccf19fa7a9f928a7ca3972" + revision: "3297fb33b49ba2d1161ba12757891c7b91c73a3e" ), ], targets: [ diff --git a/Sources/Foundation/NSNumber.swift b/Sources/Foundation/NSNumber.swift index a68361e6dd..cd55f0023a 100644 --- a/Sources/Foundation/NSNumber.swift +++ b/Sources/Foundation/NSNumber.swift @@ -9,6 +9,7 @@ @_implementationOnly import _CoreFoundation +@_spi(SwiftCorelibsFoundation) @_exported import FoundationEssentials internal let kCFNumberSInt8Type = CFNumberType.sInt8Type internal let kCFNumberSInt16Type = CFNumberType.sInt16Type @@ -1172,3 +1173,18 @@ protocol _NSNumberCastingWithoutBridging { } extension NSNumber: _NSNumberCastingWithoutBridging {} + +// Called by FoundationEssentials +internal final class _FoundationNSNumberInitializer : _NSNumberInitializer { + public static func initialize(value: some BinaryInteger) -> Any { + if let int64 = Int64(exactly: value) { + return NSNumber(value: int64) + } else { + return NSNumber(value: UInt64(value)) + } + } + + public static func initialize(value: Bool) -> Any { + NSNumber(value: value) + } +} diff --git a/Tests/Foundation/TestFileManager.swift b/Tests/Foundation/TestFileManager.swift index 1f55939532..f7d2631641 100644 --- a/Tests/Foundation/TestFileManager.swift +++ b/Tests/Foundation/TestFileManager.swift @@ -1785,6 +1785,17 @@ class TestFileManager : XCTestCase { } } + func testNSNumberUpcall() throws { + let url = writableTestDirectoryURL.appending(component: "foo", directoryHint: .notDirectory) + try FileManager.default.createDirectory(at: writableTestDirectoryURL, withIntermediateDirectories: true) + XCTAssertTrue(FileManager.default.createFile(atPath: url.path, contents: Data("foo".utf8))) + let attrs = try FileManager.default.attributesOfItem(atPath: url.path) + let size = attrs[.size] + XCTAssertNotNil(size as? NSNumber) + XCTAssertNotNil(size as? UInt64) + XCTAssertNotNil(size as? Double) // Ensure implicit conversion to unexpected types works + } + // ----- var writableTestDirectoryURL: URL! From a59a97aa569a068673f5d1ca5ad9d81ce17f12f9 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Thu, 30 May 2024 10:34:22 -0700 Subject: [PATCH 073/198] NSData options should typealias to Data options (#4968) --- Sources/Foundation/NSData.swift | 46 ++++----------------------------- 1 file changed, 5 insertions(+), 41 deletions(-) diff --git a/Sources/Foundation/NSData.swift b/Sources/Foundation/NSData.swift index b2e4095882..9238032aa9 100644 --- a/Sources/Foundation/NSData.swift +++ b/Sources/Foundation/NSData.swift @@ -13,47 +13,11 @@ import Dispatch #endif extension NSData { - public struct ReadingOptions : OptionSet { - public let rawValue : UInt - public init(rawValue: UInt) { self.rawValue = rawValue } - - public static let mappedIfSafe = ReadingOptions(rawValue: UInt(1 << 0)) - public static let uncached = ReadingOptions(rawValue: UInt(1 << 1)) - public static let alwaysMapped = ReadingOptions(rawValue: UInt(1 << 2)) - } - - public struct WritingOptions : OptionSet { - public let rawValue : UInt - public init(rawValue: UInt) { self.rawValue = rawValue } - - public static let atomic = WritingOptions(rawValue: UInt(1 << 0)) - public static let withoutOverwriting = WritingOptions(rawValue: UInt(1 << 1)) - } - - public struct SearchOptions : OptionSet { - public let rawValue : UInt - public init(rawValue: UInt) { self.rawValue = rawValue } - - public static let backwards = SearchOptions(rawValue: UInt(1 << 0)) - public static let anchored = SearchOptions(rawValue: UInt(1 << 1)) - } - - public struct Base64EncodingOptions : OptionSet { - public let rawValue : UInt - public init(rawValue: UInt) { self.rawValue = rawValue } - - public static let lineLength64Characters = Base64EncodingOptions(rawValue: UInt(1 << 0)) - public static let lineLength76Characters = Base64EncodingOptions(rawValue: UInt(1 << 1)) - public static let endLineWithCarriageReturn = Base64EncodingOptions(rawValue: UInt(1 << 4)) - public static let endLineWithLineFeed = Base64EncodingOptions(rawValue: UInt(1 << 5)) - } - - public struct Base64DecodingOptions : OptionSet { - public let rawValue : UInt - public init(rawValue: UInt) { self.rawValue = rawValue } - - public static let ignoreUnknownCharacters = Base64DecodingOptions(rawValue: UInt(1 << 0)) - } + public typealias ReadingOptions = Data.ReadingOptions + public typealias WritingOptions = Data.WritingOptions + public typealias SearchOptions = Data.SearchOptions + public typealias Base64EncodingOptions = Data.Base64EncodingOptions + public typealias Base64DecodingOptions = Data.Base64DecodingOptions } private final class _NSDataDeallocator { From 9a8e5ae2f5c4dad407b660f442da1c23e1e120d3 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Wed, 5 Jun 2024 09:46:25 -0700 Subject: [PATCH 074/198] Remove additional unnecessary FileManager code (#4971) --- Sources/Foundation/FileManager+POSIX.swift | 20 +- Sources/Foundation/FileManager+Win32.swift | 153 +--------- Sources/Foundation/FileManager.swift | 322 ++++----------------- Sources/Foundation/NSData.swift | 2 +- Sources/Foundation/NSURL.swift | 8 +- Tests/Foundation/TestFileManager.swift | 4 +- Tests/Foundation/TestNSData.swift | 4 +- 7 files changed, 76 insertions(+), 437 deletions(-) diff --git a/Sources/Foundation/FileManager+POSIX.swift b/Sources/Foundation/FileManager+POSIX.swift index da1c1e7ecd..f32e5aa2c0 100644 --- a/Sources/Foundation/FileManager+POSIX.swift +++ b/Sources/Foundation/FileManager+POSIX.swift @@ -181,24 +181,6 @@ extension FileManager { return (attributes: result, blockSize: finalBlockSize) #endif // os(WASI) } - - /* destinationOfSymbolicLinkAtPath:error: returns a String containing the path of the item pointed at by the symlink specified by 'path'. If this method returns 'nil', an NSError will be thrown. - - This method replaces pathContentOfSymbolicLinkAtPath: - */ - internal func _destinationOfSymbolicLink(atPath path: String) throws -> String { - let bufferSize = Int(PATH_MAX + 1) - let buffer = try [Int8](unsafeUninitializedCapacity: bufferSize) { buffer, initializedCount in - let len = try _fileSystemRepresentation(withPath: path) { (path) -> Int in - return readlink(path, buffer.baseAddress!, bufferSize) - } - guard len >= 0 else { - throw _NSErrorWithErrno(errno, reading: true, path: path) - } - initializedCount = len - } - return self.string(withFileSystemRepresentation: buffer, length: buffer.count) - } internal func _recursiveDestinationOfSymbolicLink(atPath path: String) throws -> String { #if os(WASI) @@ -207,7 +189,7 @@ extension FileManager { throw _NSErrorWithErrno(ENOTSUP, reading: true, path: path) #else // Throw error if path is not a symbolic link: - let path = try _destinationOfSymbolicLink(atPath: path) + let path = try destinationOfSymbolicLink(atPath: path) let bufSize = Int(PATH_MAX + 1) var buf = [Int8](repeating: 0, count: bufSize) diff --git a/Sources/Foundation/FileManager+Win32.swift b/Sources/Foundation/FileManager+Win32.swift index 0ceedd13fe..f53fe3995b 100644 --- a/Sources/Foundation/FileManager+Win32.swift +++ b/Sources/Foundation/FileManager+Win32.swift @@ -102,21 +102,6 @@ private func walk(directory path: URL, _ body: (String, DWORD) throws -> Void) r } } -internal func joinPath(prefix: String, suffix: String) -> String { - var pszPath: PWSTR? - - guard !prefix.isEmpty else { return suffix } - guard !suffix.isEmpty else { return prefix } - - _ = try! FileManager.default._fileSystemRepresentation(withPath: prefix, andPath: suffix) { - PathAllocCombine($0, $1, ULONG(PATHCCH_ALLOW_LONG_PATHS.rawValue), &pszPath) - } - - let path: String = String(decodingCString: pszPath!, as: UTF16.self) - LocalFree(pszPath) - return path -} - extension FileManager { internal func _mountedVolumeURLs(includingResourceValuesForKeys propertyKeys: [URLResourceKey]?, options: VolumeEnumerationOptions = []) -> [URL]? { var urls: [URL] = [] @@ -168,145 +153,11 @@ extension FileManager { } internal func _attributesOfFileSystemIncludingBlockSize(forPath path: String) throws -> (attributes: [FileAttributeKey : Any], blockSize: UInt64?) { - return (attributes: try _attributesOfFileSystem(forPath: path), blockSize: nil) - } - - internal func _attributesOfFileSystem(forPath path: String) throws -> [FileAttributeKey : Any] { - var result: [FileAttributeKey:Any] = [:] - - try FileManager.default._fileSystemRepresentation(withPath: path) { - let dwLength: DWORD = GetFullPathNameW($0, 0, nil, nil) - guard dwLength > 0 else { - throw _NSErrorWithWindowsError(GetLastError(), reading: true, paths: [path]) - } - - var szVolumePath: [WCHAR] = Array(repeating: 0, count: Int(dwLength + 1)) - guard GetVolumePathNameW($0, &szVolumePath, dwLength) else { - throw _NSErrorWithWindowsError(GetLastError(), reading: true, paths: [path]) - } - - var liTotal: ULARGE_INTEGER = ULARGE_INTEGER() - var liFree: ULARGE_INTEGER = ULARGE_INTEGER() - guard GetDiskFreeSpaceExW(&szVolumePath, nil, &liTotal, &liFree) else { - throw _NSErrorWithWindowsError(GetLastError(), reading: true, paths: [path]) - } - - let hr: HRESULT = PathCchStripToRoot(&szVolumePath, szVolumePath.count) - guard hr == S_OK || hr == S_FALSE else { - throw _NSErrorWithWindowsError(DWORD(hr & 0xffff), reading: true, paths: [path]) - } - - var volumeSerialNumber: DWORD = 0 - guard GetVolumeInformationW(&szVolumePath, nil, 0, &volumeSerialNumber, nil, nil, nil, 0) else { - throw _NSErrorWithWindowsError(GetLastError(), reading: true, paths: [path]) - } - - result[.systemSize] = NSNumber(value: liTotal.QuadPart) - result[.systemFreeSize] = NSNumber(value: liFree.QuadPart) - result[.systemNumber] = NSNumber(value: volumeSerialNumber) - // FIXME(compnerd): what about .systemNodes, .systemFreeNodes? - } - return result - } - - internal func _destinationOfSymbolicLink(atPath path: String) throws -> String { - let faAttributes = try windowsFileAttributes(atPath: path) - guard faAttributes.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT == FILE_ATTRIBUTE_REPARSE_POINT else { - throw _NSErrorWithWindowsError(DWORD(ERROR_BAD_ARGUMENTS), reading: false) - } - - let handle: HANDLE = try FileManager.default._fileSystemRepresentation(withPath: path) { - CreateFileW($0, GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - nil, OPEN_EXISTING, - FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, - nil) - } - if handle == INVALID_HANDLE_VALUE { - throw _NSErrorWithWindowsError(GetLastError(), reading: true) - } - defer { CloseHandle(handle) } - - // Since REPARSE_DATA_BUFFER ends with an arbitrarily long buffer, we - // have to manually get the path buffer out of it since binding it to a - // type will truncate the path buffer. - // - // 20 is the sum of the offsets of: - // ULONG ReparseTag - // USHORT ReparseDataLength - // USHORT Reserved - // USHORT SubstituteNameOffset - // USHORT SubstituteNameLength - // USHORT PrintNameOffset - // USHORT PrintNameLength - // ULONG Flags (Symlink only) - let symLinkPathBufferOffset = 20 // 4 + 2 + 2 + 2 + 2 + 2 + 2 + 4 - let mountPointPathBufferOffset = 16 // 4 + 2 + 2 + 2 + 2 + 2 + 2 - let buff = UnsafeMutableRawBufferPointer.allocate(byteCount: Int(MAXIMUM_REPARSE_DATA_BUFFER_SIZE), - alignment: 8) - - guard let buffBase = buff.baseAddress else { - throw _NSErrorWithWindowsError(DWORD(ERROR_INVALID_DATA), reading: false) - } - - var bytesWritten: DWORD = 0 - guard DeviceIoControl(handle, FSCTL_GET_REPARSE_POINT, nil, 0, - buffBase, DWORD(MAXIMUM_REPARSE_DATA_BUFFER_SIZE), - &bytesWritten, nil) else { - throw _NSErrorWithWindowsError(GetLastError(), reading: true) - } - - guard bytesWritten >= MemoryLayout.size else { - throw _NSErrorWithWindowsError(DWORD(ERROR_INVALID_DATA), reading: false) - } - - let bound = buff.bindMemory(to: REPARSE_DATA_BUFFER.self) - guard let reparseDataBuffer = bound.first else { - throw _NSErrorWithWindowsError(DWORD(ERROR_INVALID_DATA), reading: false) - } - - guard reparseDataBuffer.ReparseTag == IO_REPARSE_TAG_SYMLINK - || reparseDataBuffer.ReparseTag == IO_REPARSE_TAG_MOUNT_POINT else { - throw _NSErrorWithWindowsError(DWORD(ERROR_BAD_ARGUMENTS), reading: false) - } - - let pathBufferPtr: UnsafeMutableRawPointer - let substituteNameBytes: Int - let substituteNameOffset: Int - switch reparseDataBuffer.ReparseTag { - case IO_REPARSE_TAG_SYMLINK: - pathBufferPtr = buffBase + symLinkPathBufferOffset - substituteNameBytes = Int(reparseDataBuffer.SymbolicLinkReparseBuffer.SubstituteNameLength) - substituteNameOffset = Int(reparseDataBuffer.SymbolicLinkReparseBuffer.SubstituteNameOffset) - case IO_REPARSE_TAG_MOUNT_POINT: - pathBufferPtr = buffBase + mountPointPathBufferOffset - substituteNameBytes = Int(reparseDataBuffer.MountPointReparseBuffer.SubstituteNameLength) - substituteNameOffset = Int(reparseDataBuffer.MountPointReparseBuffer.SubstituteNameOffset) - default: - throw _NSErrorWithWindowsError(DWORD(ERROR_BAD_ARGUMENTS), reading: false) - } - - guard substituteNameBytes + substituteNameOffset <= bytesWritten else { - throw _NSErrorWithWindowsError(DWORD(ERROR_INVALID_DATA), reading: false) - } - - let substituteNameBuff = Data(bytes: pathBufferPtr + substituteNameOffset, count: substituteNameBytes) - guard var substitutePath = String(data: substituteNameBuff, encoding: .utf16LittleEndian) else { - throw _NSErrorWithWindowsError(DWORD(ERROR_INVALID_DATA), reading: false) - } - - // Canonicalize the NT Object Manager Path to the DOS style path - // instead. Unfortunately, there is no nice API which can allow us to - // do this in a guranteed way. - let kObjectManagerPrefix = "\\??\\" - if substitutePath.hasPrefix(kObjectManagerPrefix) { - substitutePath = String(substitutePath.dropFirst(kObjectManagerPrefix.count)) - } - return substitutePath + return (attributes: try attributesOfFileSystem(forPath: path), blockSize: nil) } private func _realpath(_ path: String) -> String { - return (try? _destinationOfSymbolicLink(atPath: path)) ?? path + return (try? destinationOfSymbolicLink(atPath: path)) ?? path } internal func _recursiveDestinationOfSymbolicLink(atPath path: String) throws -> String { diff --git a/Sources/Foundation/FileManager.swift b/Sources/Foundation/FileManager.swift index 29c934b90d..64f5da9d76 100644 --- a/Sources/Foundation/FileManager.swift +++ b/Sources/Foundation/FileManager.swift @@ -9,9 +9,7 @@ #if !canImport(Darwin) && !os(FreeBSD) // The values do not matter as long as they are nonzero. -fileprivate let UF_IMMUTABLE: Int32 = 1 fileprivate let SF_IMMUTABLE: Int32 = 1 -fileprivate let UF_APPEND: Int32 = 1 fileprivate let UF_HIDDEN: Int32 = 1 #endif @@ -271,212 +269,87 @@ extension FileManager { try getRelationship(outRelationship, ofDirectoryAt: try self.url(for: directory, in: actualMask, appropriateFor: url, create: false), toItemAt: url) } - internal func _setAttributes(_ attributeValues: [FileAttributeKey : Any], ofItemAtPath path: String, includingPrivateAttributes: Bool = false) throws { - var attributes = Set(attributeValues.keys) - if !includingPrivateAttributes { - attributes.formIntersection(FileAttributeKey.allPublicKeys) - } + internal func _setAttributesIncludingPrivate(_ values: [FileAttributeKey : Any], ofItemAtPath path: String) throws { + // Call through to FoundationEssentials to handle all public attributes + try self.setAttributes(values, ofItemAtPath: path) - try _fileSystemRepresentation(withPath: path) { fsRep in - var flagsToSet: UInt32 = 0 - var flagsToUnset: UInt32 = 0 - - var newModificationDate: Date? - var newAccessDate: Date? - - for attribute in attributes { - - func prepareToSetOrUnsetFlag(_ flag: Int32) { - guard let shouldSet = attributeValues[attribute] as? Bool else { - fatalError("Can't set \(attribute) to \(attributeValues[attribute] as Any?)") - } - - if shouldSet { - flagsToSet |= UInt32(flag) - } else { - flagsToUnset |= UInt32(flag) - } - } - - switch attribute { - case .posixPermissions: -#if os(WASI) - // WASI does not have permission concept - throw _NSErrorWithErrno(ENOTSUP, reading: false, path: path) -#else - guard let number = attributeValues[attribute] as? NSNumber else { - fatalError("Can't set file permissions to \(attributeValues[attribute] as Any?)") - } - #if os(macOS) || os(iOS) - let modeT = number.uint16Value - #elseif os(Linux) || os(Android) || os(Windows) || os(OpenBSD) - let modeT = number.uint32Value - #endif -#if os(Windows) - let result = _wchmod(fsRep, mode_t(modeT)) -#else - let result = chmod(fsRep, mode_t(modeT)) -#endif - guard result == 0 else { - throw _NSErrorWithErrno(errno, reading: false, path: path) - } -#endif // os(WASI) - - case .modificationDate: fallthrough - case ._accessDate: - guard let providedDate = attributeValues[attribute] as? Date else { - fatalError("Can't set \(attribute) to \(attributeValues[attribute] as Any?)") - } - - if attribute == .modificationDate { - newModificationDate = providedDate - } else if attribute == ._accessDate { - newAccessDate = providedDate - } - - case .immutable: fallthrough - case ._userImmutable: - prepareToSetOrUnsetFlag(UF_IMMUTABLE) - - case ._systemImmutable: - prepareToSetOrUnsetFlag(SF_IMMUTABLE) - - case .appendOnly: - prepareToSetOrUnsetFlag(UF_APPEND) - - case ._hidden: + // Handle private attributes + var flagsToSet: UInt32 = 0 + var flagsToUnset: UInt32 = 0 + + if let isHidden = values[._hidden] as? Bool { #if os(Windows) - let attrs = try windowsFileAttributes(atPath: path).dwFileAttributes - guard let isHidden = attributeValues[attribute] as? Bool else { - fatalError("Can't set \(attribute) to \(attributeValues[attribute] as Any?)") - } - - let hiddenAttrs = isHidden - ? attrs | FILE_ATTRIBUTE_HIDDEN - : attrs & ~FILE_ATTRIBUTE_HIDDEN - guard SetFileAttributesW(fsRep, hiddenAttrs) else { - throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [path]) - } + let attrs = try windowsFileAttributes(atPath: path).dwFileAttributes + let hiddenAttrs = isHidden + ? attrs | FILE_ATTRIBUTE_HIDDEN + : attrs & ~FILE_ATTRIBUTE_HIDDEN + guard SetFileAttributesW(fsRep, hiddenAttrs) else { + throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [path]) + } #else - prepareToSetOrUnsetFlag(UF_HIDDEN) + if isHidden { + flagsToSet |= UInt32(UF_HIDDEN) + } else { + flagsToUnset |= UInt32(UF_HIDDEN) + } #endif - - // FIXME: On Darwin, these can be set with setattrlist(); and of course chown/chgrp on other OSes. - case .ownerAccountID: fallthrough - case .ownerAccountName: fallthrough - case .groupOwnerAccountID: fallthrough - case .groupOwnerAccountName: fallthrough - case .creationDate: fallthrough - case .extensionHidden: - // Setting these attributes is unsupported (for now) in swift-corelibs-foundation - throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteUnknown.rawValue) - - default: - break - } + } + + if let isSystemImmutable = values[._systemImmutable] as? Bool { + if isSystemImmutable { + flagsToSet |= UInt32(SF_IMMUTABLE) + } else { + flagsToUnset |= UInt32(SF_IMMUTABLE) } - - if flagsToSet != 0 || flagsToUnset != 0 { - #if !canImport(Darwin) && !os(FreeBSD) - // Setting these attributes is unsupported on these platforms. - throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteUnknown.rawValue) - #else - let stat = try _lstatFile(atPath: path, withFileSystemRepresentation: fsRep) - var flags = stat.st_flags - flags |= flagsToSet - flags &= ~flagsToUnset - - guard chflags(fsRep, flags) == 0 else { - throw _NSErrorWithErrno(errno, reading: false, path: path) - } - #endif + } + + if flagsToSet != 0 || flagsToUnset != 0 { +#if !canImport(Darwin) && !os(FreeBSD) + // Setting these attributes is unsupported on these platforms. + throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteUnknown.rawValue) +#else + let stat = try _lstatFile(atPath: path, withFileSystemRepresentation: fsRep) + var flags = stat.st_flags + flags |= flagsToSet + flags &= ~flagsToUnset + + guard chflags(fsRep, flags) == 0 else { + throw _NSErrorWithErrno(errno, reading: false, path: path) } - - if newModificationDate != nil || newAccessDate != nil { - // Set dates as the very last step, to avoid other operations overwriting these values: - try _updateTimes(atPath: path, withFileSystemRepresentation: fsRep, accessTime: newAccessDate, modificationTime: newModificationDate) +#endif + } + + let accessDate = values[._accessDate] as? Date + let modificationDate = values[.modificationDate] as? Date + + if accessDate != nil || modificationDate != nil { + // Set dates as the very last step, to avoid other operations overwriting these values + // Also re-set modification date here in case setting flags above changed it + try _fileSystemRepresentation(withPath: path) { + try _updateTimes(atPath: path, withFileSystemRepresentation: $0, accessTime: accessDate, modificationTime: modificationDate) } } } - internal func _attributesOfItem(atPath path: String, includingPrivateAttributes: Bool = false) throws -> [FileAttributeKey: Any] { - var result: [FileAttributeKey:Any] = [:] - + internal func _attributesOfItemIncludingPrivate(atPath path: String) throws -> [FileAttributeKey: Any] { + // Call to FoundationEssentials to get all public attributes + var result = try self.attributesOfItem(atPath: path) + #if os(Linux) - let (s, creationDate) = try _statxFile(atPath: path) - result[.creationDate] = creationDate + let (s, _) = try _statxFile(atPath: path) #elseif os(Windows) - let (s, ino) = try _statxFile(atPath: path) - result[.creationDate] = s.creationDate + let (s, _) = try _statxFile(atPath: path) #else let s = try _lstatFile(atPath: path) - result[.creationDate] = s.creationDate #endif - - result[.size] = NSNumber(value: UInt64(s.st_size)) - - result[.modificationDate] = s.lastModificationDate - if includingPrivateAttributes { - result[._accessDate] = s.lastAccessDate - } - - result[.posixPermissions] = NSNumber(value: _filePermissionsMask(mode: UInt32(s.st_mode))) - result[.referenceCount] = NSNumber(value: UInt64(s.st_nlink)) - result[.systemNumber] = NSNumber(value: UInt64(s.st_dev)) -#if os(Windows) - result[.systemFileNumber] = NSNumber(value: UInt64(ino)) -#else - result[.systemFileNumber] = NSNumber(value: UInt64(s.st_ino)) -#endif - -#if os(Windows) - result[.deviceIdentifier] = NSNumber(value: UInt64(s.st_rdev)) - let attributes = try windowsFileAttributes(atPath: path) - let type = FileAttributeType(attributes: attributes, atPath: path) -#elseif os(WASI) - let type = FileAttributeType(statMode: mode_t(s.st_mode)) -#else - if let pwd = getpwuid(s.st_uid), pwd.pointee.pw_name != nil { - let name = String(cString: pwd.pointee.pw_name) - result[.ownerAccountName] = name - } - - if let grd = getgrgid(s.st_gid), grd.pointee.gr_name != nil { - let name = String(cString: grd.pointee.gr_name) - result[.groupOwnerAccountName] = name - } - - let type = FileAttributeType(statMode: mode_t(s.st_mode)) -#endif - result[.type] = type - - if type == .typeBlockSpecial || type == .typeCharacterSpecial { - result[.deviceIdentifier] = NSNumber(value: UInt64(s.st_rdev)) - } - -#if canImport(Darwin) - if (s.st_flags & UInt32(UF_IMMUTABLE | SF_IMMUTABLE)) != 0 { - result[.immutable] = NSNumber(value: true) - } - - if includingPrivateAttributes { - result[._userImmutable] = (s.st_flags & UInt32(UF_IMMUTABLE)) != 0 - result[._systemImmutable] = (s.st_flags & UInt32(SF_IMMUTABLE)) != 0 - result[._hidden] = (s.st_flags & UInt32(UF_HIDDEN)) != 0 - } + result[._accessDate] = s.lastAccessDate - if (s.st_flags & UInt32(UF_APPEND | SF_APPEND)) != 0 { - result[.appendOnly] = NSNumber(value: true) - } -#endif - -#if os(Windows) - let attrs = attributes.dwFileAttributes - result[._hidden] = attrs & FILE_ATTRIBUTE_HIDDEN != 0 +#if canImport(Darwin) + result[._systemImmutable] = (s.st_flags & UInt32(SF_IMMUTABLE)) != 0 + result[._hidden] = (s.st_flags & UInt32(UF_HIDDEN)) != 0 +#elseif os(Windows) + result[._hidden] = try windowsFileAttributes(atPath: path).dwFileAttributes & FILE_ATTRIBUTE_HIDDEN != 0 #endif - result[.ownerAccountID] = NSNumber(value: UInt64(s.st_uid)) - result[.groupOwnerAccountID] = NSNumber(value: UInt64(s.st_gid)) - return result } @@ -493,21 +366,6 @@ extension FileManager { } return self.fileExists(atPath: path, isDirectory: &isDir) } - - internal func _filePermissionsMask(mode : UInt32) -> Int { -#if os(Windows) - return Int(mode & ~UInt32(ucrt.S_IFMT)) -#elseif canImport(Darwin) - return Int(mode & ~UInt32(S_IFMT)) -#else - return Int(mode & ~S_IFMT) -#endif - } - - internal func _permissionsOfItem(atPath path: String) throws -> Int { - let fileInfo = try _lstatFile(atPath: path) - return _filePermissionsMask(mode: UInt32(fileInfo.st_mode)) - } internal func _overridingDisplayNameLanguages(with languages: [String], within body: () throws -> T) rethrows -> T { let old = _overriddenDisplayNameLanguages @@ -742,62 +600,10 @@ extension FileAttributeKey { // They are intended for use by NSURL's resource keys. internal static let _systemImmutable = FileAttributeKey(rawValue: "org.swift.Foundation.FileAttributeKey._systemImmutable") - internal static let _userImmutable = FileAttributeKey(rawValue: "org.swift.Foundation.FileAttributeKey._userImmutable") internal static let _hidden = FileAttributeKey(rawValue: "org.swift.Foundation.FileAttributeKey._hidden") internal static let _accessDate = FileAttributeKey(rawValue: "org.swift.Foundation.FileAttributeKey._accessDate") } -extension FileAttributeType { -#if os(Windows) - internal init(attributes: WIN32_FILE_ATTRIBUTE_DATA, atPath path: String) { - if attributes.dwFileAttributes & FILE_ATTRIBUTE_DEVICE == FILE_ATTRIBUTE_DEVICE { - self = .typeCharacterSpecial - } else if attributes.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT == FILE_ATTRIBUTE_REPARSE_POINT { - // A reparse point may or may not actually be a symbolic link, we need to read the reparse tag - let handle: HANDLE = (try? FileManager.default._fileSystemRepresentation(withPath: path) { - CreateFileW($0, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, nil, - OPEN_EXISTING, - FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, - nil) - }) ?? INVALID_HANDLE_VALUE - if handle == INVALID_HANDLE_VALUE { - self = .typeUnknown - return - } - defer { CloseHandle(handle) } - var tagInfo = FILE_ATTRIBUTE_TAG_INFO() - if !GetFileInformationByHandleEx(handle, FileAttributeTagInfo, &tagInfo, - DWORD(MemoryLayout.size)) { - self = .typeUnknown - return - } - self = tagInfo.ReparseTag == IO_REPARSE_TAG_SYMLINK ? .typeSymbolicLink : .typeRegular - } else if attributes.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY == FILE_ATTRIBUTE_DIRECTORY { - // Note: Since Windows marks directory symlinks as both - // directories and reparse points, having this after the - // reparse point check implicitly encodes Windows - // directory symlinks as not directories, which matches - // POSIX behavior. - self = .typeDirectory - } else { - self = .typeRegular - } - } -#else - internal init(statMode: mode_t) { - switch statMode & S_IFMT { - case S_IFCHR: self = .typeCharacterSpecial - case S_IFDIR: self = .typeDirectory - case S_IFBLK: self = .typeBlockSpecial - case S_IFREG: self = .typeRegular - case S_IFLNK: self = .typeSymbolicLink - case S_IFSOCK: self = .typeSocket - default: self = .typeUnknown - } - } -#endif -} - extension FileManager { open class DirectoryEnumerator : NSEnumerator { diff --git a/Sources/Foundation/NSData.swift b/Sources/Foundation/NSData.swift index 9238032aa9..53098159d7 100644 --- a/Sources/Foundation/NSData.swift +++ b/Sources/Foundation/NSData.swift @@ -421,7 +421,7 @@ open class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding { } let fm = FileManager.default - let permissions = try? fm._permissionsOfItem(atPath: path) + let permissions = try? fm.attributesOfItem(atPath: path)[.posixPermissions] as? Int if writeOptionsMask.contains(.atomic) { let (newFD, auxFilePath) = try _NSCreateTemporaryFile(path) diff --git a/Sources/Foundation/NSURL.swift b/Sources/Foundation/NSURL.swift index 3b0ed15c8a..def389037f 100644 --- a/Sources/Foundation/NSURL.swift +++ b/Sources/Foundation/NSURL.swift @@ -1208,7 +1208,7 @@ fileprivate extension URLResourceValuesStorage { if let storage = fileAttributesStorage { return storage } else { - let storage = try fm._attributesOfItem(atPath: path, includingPrivateAttributes: true) + let storage = try fm._attributesOfItemIncludingPrivate(atPath: path) fileAttributesStorage = storage return storage } @@ -1314,7 +1314,7 @@ fileprivate extension URLResourceValuesStorage { case .isSystemImmutableKey: result[key] = try attribute(._systemImmutable) as? Bool == true case .isUserImmutableKey: - result[key] = try attribute(._userImmutable) as? Bool == true + result[key] = try attribute(.immutable) as? Bool == true case .isHiddenKey: result[key] = try attribute(._hidden) as? Bool == true case .hasHiddenExtensionKey: @@ -1522,7 +1522,7 @@ fileprivate extension URLResourceValuesStorage { switch key { case .isUserImmutableKey: - try prepareToSetFileAttribute(._userImmutable, value: value as? Bool) + try prepareToSetFileAttribute(.immutable, value: value as? Bool) case .isSystemImmutableKey: try prepareToSetFileAttribute(._systemImmutable, value: value as? Bool) @@ -1560,7 +1560,7 @@ fileprivate extension URLResourceValuesStorage { // _setAttributes(…) needs to figure out the correct order to apply these attributes in, so set them all together at the end. if !attributesToSet.isEmpty { - try fm._setAttributes(attributesToSet, ofItemAtPath: path, includingPrivateAttributes: true) + try fm._setAttributesIncludingPrivate(attributesToSet, ofItemAtPath: path) unsuccessfulKeys.formSymmetricDifference(keysThatSucceedBySettingAttributes) } diff --git a/Tests/Foundation/TestFileManager.swift b/Tests/Foundation/TestFileManager.swift index f7d2631641..fc2361c346 100644 --- a/Tests/Foundation/TestFileManager.swift +++ b/Tests/Foundation/TestFileManager.swift @@ -1335,7 +1335,7 @@ class TestFileManager : XCTestCase { } XCTAssertThrowsError(try fm.copyItem(atPath: "/tmp/t", toPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileNoSuchFile) + XCTAssertEqual(code, .fileReadNoSuchFile) } #if false @@ -1364,7 +1364,7 @@ class TestFileManager : XCTestCase { } XCTAssertThrowsError(try fm.linkItem(atPath: "/tmp/t", toPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileNoSuchFile) + XCTAssertEqual(code, .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.createSymbolicLink(atPath: "", withDestinationPath: "")) { diff --git a/Tests/Foundation/TestNSData.swift b/Tests/Foundation/TestNSData.swift index 26e96c98d9..4ecb4eda2f 100644 --- a/Tests/Foundation/TestNSData.swift +++ b/Tests/Foundation/TestNSData.swift @@ -210,7 +210,7 @@ class TestNSData: XCTestCase { let url = URL(fileURLWithPath: NSTemporaryDirectory() + "meow") try data.write(to: url) let fileManager = FileManager.default - let permission = try fileManager._permissionsOfItem(atPath: url.path) + let permission = try fileManager.attributesOfItem(atPath: url.path)[.posixPermissions] as? Int #if canImport(Darwin) let expected = Int(S_IRUSR) | Int(S_IWUSR) | Int(S_IRGRP) | Int(S_IWGRP) | Int(S_IROTH) | Int(S_IWOTH) #else @@ -233,7 +233,7 @@ class TestNSData: XCTestCase { let url = URL(fileURLWithPath: NSTemporaryDirectory() + "meow") try data.write(to: url, options: .atomic) let fileManager = FileManager.default - let permission = try fileManager._permissionsOfItem(atPath: url.path) + let permission = try fileManager.attributesOfItem(atPath: url.path)[.posixPermissions] as? Int #if canImport(Darwin) let expected = Int(S_IRUSR) | Int(S_IWUSR) | Int(S_IRGRP) | Int(S_IWGRP) | Int(S_IROTH) | Int(S_IWOTH) #else From ff64e864d32d7aea327b9f323374de65bf8b8814 Mon Sep 17 00:00:00 2001 From: Jonathan Flat <50605158+jrflat@users.noreply.github.com> Date: Thu, 6 Jun 2024 08:24:51 -0700 Subject: [PATCH 075/198] Add async URLSession methods (#4970) * Add `data(from:delegate:)` method. * Add async URLSession methods --------- Co-authored-by: ichiho --- .../DataURLProtocol.swift | 3 +- .../URLSession/FTP/FTPURLProtocol.swift | 2 +- .../URLSession/HTTP/HTTPURLProtocol.swift | 6 +- .../URLSession/NativeProtocol.swift | 84 +++--- .../URLSession/TaskRegistry.swift | 4 + .../URLSession/URLSession.swift | 241 ++++++++++++++++++ .../URLSession/URLSessionDelegate.swift | 44 +++- .../URLSession/URLSessionTask.swift | 74 +++++- Tests/Foundation/Tests/TestURLSession.swift | 96 ++++++- 9 files changed, 495 insertions(+), 59 deletions(-) diff --git a/Sources/FoundationNetworking/DataURLProtocol.swift b/Sources/FoundationNetworking/DataURLProtocol.swift index 014f34b558..c4783b2dc4 100644 --- a/Sources/FoundationNetworking/DataURLProtocol.swift +++ b/Sources/FoundationNetworking/DataURLProtocol.swift @@ -91,8 +91,7 @@ internal class _DataURLProtocol: URLProtocol { urlClient.urlProtocolDidFinishLoading(self) } else { let error = NSError(domain: NSURLErrorDomain, code: NSURLErrorBadURL) - if let session = self.task?.session as? URLSession, let delegate = session.delegate as? URLSessionTaskDelegate, - let task = self.task { + if let task = self.task, let session = task.actualSession, let delegate = task.delegate { delegate.urlSession(session, task: task, didCompleteWithError: error) } } diff --git a/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift b/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift index 55583fd2b8..932600cbe2 100644 --- a/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift @@ -119,7 +119,7 @@ internal extension _FTPURLProtocol { switch session.behaviour(for: self.task!) { case .noDelegate: break - case .taskDelegate: + case .taskDelegate, .dataCompletionHandlerWithTaskDelegate, .downloadCompletionHandlerWithTaskDelegate: self.client?.urlProtocol(self, didReceive: response, cacheStoragePolicy: .notAllowed) case .dataCompletionHandler: break diff --git a/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift b/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift index abf6623435..c0722fb040 100644 --- a/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift @@ -475,7 +475,7 @@ internal class _HTTPURLProtocol: _NativeProtocol { guard let session = task?.session as? URLSession else { fatalError() } - if let delegate = session.delegate as? URLSessionTaskDelegate { + if let delegate = task?.delegate { // At this point we need to change the internal state to note // that we're waiting for the delegate to call the completion // handler. Then we'll call the delegate callback @@ -524,7 +524,9 @@ internal class _HTTPURLProtocol: _NativeProtocol { switch session.behaviour(for: self.task!) { case .noDelegate: break - case .taskDelegate: + case .taskDelegate, + .dataCompletionHandlerWithTaskDelegate, + .downloadCompletionHandlerWithTaskDelegate: //TODO: There's a problem with libcurl / with how we're using it. // We're currently unable to pause the transfer / the easy handle: // https://curl.haxx.se/mail/lib-2016-03/0222.html diff --git a/Sources/FoundationNetworking/URLSession/NativeProtocol.swift b/Sources/FoundationNetworking/URLSession/NativeProtocol.swift index 53a195f5a8..95da2e9bdb 100644 --- a/Sources/FoundationNetworking/URLSession/NativeProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/NativeProtocol.swift @@ -129,43 +129,59 @@ internal class _NativeProtocol: URLProtocol, _EasyHandleDelegate { } fileprivate func notifyDelegate(aboutReceivedData data: Data) { - guard let t = self.task else { + guard let task = self.task, let session = task.session as? URLSession else { fatalError("Cannot notify") } - if case .taskDelegate(let delegate) = t.session.behaviour(for: self.task!), - let dataDelegate = delegate as? URLSessionDataDelegate, - let task = self.task as? URLSessionDataTask { - // Forward to the delegate: - guard let s = self.task?.session as? URLSession else { - fatalError() - } - s.delegateQueue.addOperation { - dataDelegate.urlSession(s, dataTask: task, didReceive: data) - } - } else if case .taskDelegate(let delegate) = t.session.behaviour(for: self.task!), - let downloadDelegate = delegate as? URLSessionDownloadDelegate, - let task = self.task as? URLSessionDownloadTask { - guard let s = self.task?.session as? URLSession else { - fatalError() - } - let fileHandle = try! FileHandle(forWritingTo: self.tempFileURL) - _ = fileHandle.seekToEndOfFile() - fileHandle.write(data) - task.countOfBytesReceived += Int64(data.count) - s.delegateQueue.addOperation { - downloadDelegate.urlSession(s, downloadTask: task, didWriteData: Int64(data.count), totalBytesWritten: task.countOfBytesReceived, - totalBytesExpectedToWrite: task.countOfBytesExpectedToReceive) + switch task.session.behaviour(for: task) { + case .taskDelegate(let delegate), + .dataCompletionHandlerWithTaskDelegate(_, let delegate), + .downloadCompletionHandlerWithTaskDelegate(_, let delegate): + if let dataDelegate = delegate as? URLSessionDataDelegate, + let dataTask = task as? URLSessionDataTask { + session.delegateQueue.addOperation { + dataDelegate.urlSession(session, dataTask: dataTask, didReceive: data) + } + } else if let downloadDelegate = delegate as? URLSessionDownloadDelegate, + let downloadTask = task as? URLSessionDownloadTask { + let fileHandle = try! FileHandle(forWritingTo: self.tempFileURL) + _ = fileHandle.seekToEndOfFile() + fileHandle.write(data) + task.countOfBytesReceived += Int64(data.count) + session.delegateQueue.addOperation { + downloadDelegate.urlSession( + session, + downloadTask: downloadTask, + didWriteData: Int64(data.count), + totalBytesWritten: task.countOfBytesReceived, + totalBytesExpectedToWrite: task.countOfBytesExpectedToReceive + ) + } } + default: + break } } fileprivate func notifyDelegate(aboutUploadedData count: Int64) { - guard let task = self.task, let session = task.session as? URLSession, - case .taskDelegate(let delegate) = session.behaviour(for: task) else { return } - task.countOfBytesSent += count - session.delegateQueue.addOperation { - delegate.urlSession(session, task: task, didSendBodyData: count, - totalBytesSent: task.countOfBytesSent, totalBytesExpectedToSend: task.countOfBytesExpectedToSend) + guard let task = self.task, let session = task.session as? URLSession else { + return + } + switch session.behaviour(for: task) { + case .taskDelegate(let delegate), + .dataCompletionHandlerWithTaskDelegate(_, let delegate), + .downloadCompletionHandlerWithTaskDelegate(_, let delegate): + task.countOfBytesSent += count + session.delegateQueue.addOperation { + delegate.urlSession( + session, + task: task, + didSendBodyData: count, + totalBytesSent: task.countOfBytesSent, + totalBytesExpectedToSend: task.countOfBytesExpectedToSend + ) + } + default: + break } } @@ -284,7 +300,7 @@ internal class _NativeProtocol: URLProtocol, _EasyHandleDelegate { var currentInputStream: InputStream? - if let delegate = session.delegate as? URLSessionTaskDelegate { + if let delegate = task?.delegate { let dispatchGroup = DispatchGroup() dispatchGroup.enter() @@ -338,11 +354,13 @@ internal class _NativeProtocol: URLProtocol, _EasyHandleDelegate { // Data will be forwarded to the delegate as we receive it, we don't // need to do anything about it. return .ignore - case .dataCompletionHandler: + case .dataCompletionHandler, + .dataCompletionHandlerWithTaskDelegate: // Data needs to be concatenated in-memory such that we can pass it // to the completion handler upon completion. return .inMemory(nil) - case .downloadCompletionHandler: + case .downloadCompletionHandler, + .downloadCompletionHandlerWithTaskDelegate: // Data needs to be written to a file (i.e. a download task). let fileHandle = try! FileHandle(forWritingTo: self.tempFileURL) return .toFile(self.tempFileURL, fileHandle) diff --git a/Sources/FoundationNetworking/URLSession/TaskRegistry.swift b/Sources/FoundationNetworking/URLSession/TaskRegistry.swift index 9066a4a9cc..3e958891dd 100644 --- a/Sources/FoundationNetworking/URLSession/TaskRegistry.swift +++ b/Sources/FoundationNetworking/URLSession/TaskRegistry.swift @@ -45,8 +45,12 @@ extension URLSession { case callDelegate /// Default action for all events, except for completion. case dataCompletionHandler(DataTaskCompletion) + /// Default action for all asynchronous events. + case dataCompletionHandlerWithTaskDelegate(DataTaskCompletion, URLSessionTaskDelegate?) /// Default action for all events, except for completion. case downloadCompletionHandler(DownloadTaskCompletion) + /// Default action for all asynchronous events. + case downloadCompletionHandlerWithTaskDelegate(DownloadTaskCompletion, URLSessionTaskDelegate?) } fileprivate var tasks: [Int: URLSessionTask] = [:] diff --git a/Sources/FoundationNetworking/URLSession/URLSession.swift b/Sources/FoundationNetworking/URLSession/URLSession.swift index 2dcb000a22..d01fc316c7 100644 --- a/Sources/FoundationNetworking/URLSession/URLSession.swift +++ b/Sources/FoundationNetworking/URLSession/URLSession.swift @@ -648,15 +648,31 @@ internal extension URLSession { /// Default action for all events, except for completion. /// - SeeAlso: URLSession.TaskRegistry.Behaviour.dataCompletionHandler case dataCompletionHandler(URLSession._TaskRegistry.DataTaskCompletion) + /// Default action for all asynchronous events. + /// - SeeAlso: URLsession.TaskRegistry.Behaviour.dataCompletionHandlerWithTaskDelegate + case dataCompletionHandlerWithTaskDelegate(URLSession._TaskRegistry.DataTaskCompletion, URLSessionTaskDelegate) /// Default action for all events, except for completion. /// - SeeAlso: URLSession.TaskRegistry.Behaviour.downloadCompletionHandler case downloadCompletionHandler(URLSession._TaskRegistry.DownloadTaskCompletion) + /// Default action for all asynchronous events. + /// - SeeAlso: URLsession.TaskRegistry.Behaviour.downloadCompletionHandlerWithTaskDelegate + case downloadCompletionHandlerWithTaskDelegate(URLSession._TaskRegistry.DownloadTaskCompletion, URLSessionTaskDelegate) } func behaviour(for task: URLSessionTask) -> _TaskBehaviour { switch taskRegistry.behaviour(for: task) { case .dataCompletionHandler(let c): return .dataCompletionHandler(c) + case .dataCompletionHandlerWithTaskDelegate(let c, let d): + guard let d else { + return .dataCompletionHandler(c) + } + return .dataCompletionHandlerWithTaskDelegate(c, d) case .downloadCompletionHandler(let c): return .downloadCompletionHandler(c) + case .downloadCompletionHandlerWithTaskDelegate(let c, let d): + guard let d else { + return .downloadCompletionHandler(c) + } + return .downloadCompletionHandlerWithTaskDelegate(c, d) case .callDelegate: guard let d = delegate as? URLSessionTaskDelegate else { return .noDelegate @@ -666,6 +682,231 @@ internal extension URLSession { } } +fileprivate struct Lock: @unchecked Sendable { + let stateLock: ManagedBuffer + init(initialState: State) { + stateLock = .create(minimumCapacity: 1) { buffer in + buffer.withUnsafeMutablePointerToElements { lock in + lock.initialize(to: .init()) + } + return initialState + } + } + + func withLock(_ body: @Sendable (inout State) throws -> R) rethrows -> R where R : Sendable { + return try stateLock.withUnsafeMutablePointers { header, lock in + lock.pointee.lock() + defer { + lock.pointee.unlock() + } + return try body(&header.pointee) + } + } +} + +fileprivate extension URLSession { + final class CancelState: Sendable { + struct State { + var isCancelled: Bool + var task: URLSessionTask? + } + let lock: Lock + init() { + lock = Lock(initialState: State(isCancelled: false, task: nil)) + } + + func cancel() { + let task = lock.withLock { state in + state.isCancelled = true + let result = state.task + state.task = nil + return result + } + task?.cancel() + } + + func activate(task: URLSessionTask) { + let taskUsed = lock.withLock { state in + if state.task != nil { + fatalError("Cannot activate twice") + } + if state.isCancelled { + return false + } else { + state.isCancelled = false + state.task = task + return true + } + } + + if !taskUsed { + task.cancel() + } + } + } +} + +@available(macOS 12.0, iOS 15.0, watchOS 8.0, tvOS 15.0, *) +extension URLSession { + /// Convenience method to load data using a URLRequest, creates and resumes a URLSessionDataTask internally. + /// + /// - Parameter request: The URLRequest for which to load data. + /// - Parameter delegate: Task-specific delegate. + /// - Returns: Data and response. + public func data(for request: URLRequest, delegate: URLSessionTaskDelegate? = nil) async throws -> (Data, URLResponse) { + let cancelState = CancelState() + return try await withTaskCancellationHandler { + try await withCheckedThrowingContinuation { continuation in + let completionHandler: URLSession._TaskRegistry.DataTaskCompletion = { data, response, error in + if let error = error { + continuation.resume(throwing: error) + } else { + continuation.resume(returning: (data!, response!)) + } + } + let task = dataTask(with: _Request(request), behaviour: .dataCompletionHandlerWithTaskDelegate(completionHandler, delegate)) + task._callCompletionHandlerInline = true + task.resume() + cancelState.activate(task: task) + } + } onCancel: { + cancelState.cancel() + } + } + + /// Convenience method to load data using a URL, creates and resumes a URLSessionDataTask internally. + /// + /// - Parameter url: The URL for which to load data. + /// - Parameter delegate: Task-specific delegate. + /// - Returns: Data and response. + public func data(from url: URL, delegate: URLSessionTaskDelegate? = nil) async throws -> (Data, URLResponse) { + let cancelState = CancelState() + return try await withTaskCancellationHandler { + try await withCheckedThrowingContinuation { continuation in + let completionHandler: URLSession._TaskRegistry.DataTaskCompletion = { data, response, error in + if let error = error { + continuation.resume(throwing: error) + } else { + continuation.resume(returning: (data!, response!)) + } + } + let task = dataTask(with: _Request(url), behaviour: .dataCompletionHandlerWithTaskDelegate(completionHandler, delegate)) + task._callCompletionHandlerInline = true + task.resume() + cancelState.activate(task: task) + } + } onCancel: { + cancelState.cancel() + } + } + + /// Convenience method to upload data using a URLRequest, creates and resumes a URLSessionUploadTask internally. + /// + /// - Parameter request: The URLRequest for which to upload data. + /// - Parameter fileURL: File to upload. + /// - Parameter delegate: Task-specific delegate. + /// - Returns: Data and response. + public func upload(for request: URLRequest, fromFile fileURL: URL, delegate: URLSessionTaskDelegate? = nil) async throws -> (Data, URLResponse) { + let cancelState = CancelState() + return try await withTaskCancellationHandler { + try await withCheckedThrowingContinuation { continuation in + let completionHandler: URLSession._TaskRegistry.DataTaskCompletion = { data, response, error in + if let error = error { + continuation.resume(throwing: error) + } else { + continuation.resume(returning: (data!, response!)) + } + } + let task = uploadTask(with: _Request(request), body: .file(fileURL), behaviour: .dataCompletionHandlerWithTaskDelegate(completionHandler, delegate)) + task._callCompletionHandlerInline = true + task.resume() + cancelState.activate(task: task) + } + } onCancel: { + cancelState.cancel() + } + } + + /// Convenience method to upload data using a URLRequest, creates and resumes a URLSessionUploadTask internally. + /// + /// - Parameter request: The URLRequest for which to upload data. + /// - Parameter bodyData: Data to upload. + /// - Parameter delegate: Task-specific delegate. + /// - Returns: Data and response. + public func upload(for request: URLRequest, from bodyData: Data, delegate: URLSessionTaskDelegate? = nil) async throws -> (Data, URLResponse) { + let cancelState = CancelState() + return try await withTaskCancellationHandler { + try await withCheckedThrowingContinuation { continuation in + let completionHandler: URLSession._TaskRegistry.DataTaskCompletion = { data, response, error in + if let error = error { + continuation.resume(throwing: error) + } else { + continuation.resume(returning: (data!, response!)) + } + } + let task = uploadTask(with: _Request(request), body: .data(createDispatchData(bodyData)), behaviour: .dataCompletionHandlerWithTaskDelegate(completionHandler, delegate)) + task._callCompletionHandlerInline = true + task.resume() + cancelState.activate(task: task) + } + } onCancel: { + cancelState.cancel() + } + } + + /// Convenience method to download using a URLRequest, creates and resumes a URLSessionDownloadTask internally. + /// + /// - Parameter request: The URLRequest for which to download. + /// - Parameter delegate: Task-specific delegate. + /// - Returns: Downloaded file URL and response. The file will not be removed automatically. + public func download(for request: URLRequest, delegate: URLSessionTaskDelegate? = nil) async throws -> (URL, URLResponse) { + let cancelState = CancelState() + return try await withTaskCancellationHandler { + try await withCheckedThrowingContinuation { continuation in + let completionHandler: URLSession._TaskRegistry.DownloadTaskCompletion = { location, response, error in + if let error = error { + continuation.resume(throwing: error) + } else { + continuation.resume(returning: (location!, response!)) + } + } + let task = downloadTask(with: _Request(request), behavior: .downloadCompletionHandlerWithTaskDelegate(completionHandler, delegate)) + task._callCompletionHandlerInline = true + task.resume() + cancelState.activate(task: task) + } + } onCancel: { + cancelState.cancel() + } + } + + /// Convenience method to download using a URL, creates and resumes a URLSessionDownloadTask internally. + /// + /// - Parameter url: The URL for which to download. + /// - Parameter delegate: Task-specific delegate. + /// - Returns: Downloaded file URL and response. The file will not be removed automatically. + public func download(from url: URL, delegate: URLSessionTaskDelegate? = nil) async throws -> (URL, URLResponse) { + let cancelState = CancelState() + return try await withTaskCancellationHandler { + try await withCheckedThrowingContinuation { continuation in + let completionHandler: URLSession._TaskRegistry.DownloadTaskCompletion = { location, response, error in + if let error = error { + continuation.resume(throwing: error) + } else { + continuation.resume(returning: (location!, response!)) + } + } + let task = downloadTask(with: _Request(url), behavior: .downloadCompletionHandlerWithTaskDelegate(completionHandler, delegate)) + task._callCompletionHandlerInline = true + task.resume() + cancelState.activate(task: task) + } + } onCancel: { + cancelState.cancel() + } + } +} + internal protocol URLSessionProtocol: AnyObject { func add(handle: _EasyHandle) diff --git a/Sources/FoundationNetworking/URLSession/URLSessionDelegate.swift b/Sources/FoundationNetworking/URLSession/URLSessionDelegate.swift index 4cb7d41351..bd061f55dc 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionDelegate.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionDelegate.swift @@ -134,24 +134,54 @@ public protocol URLSessionTaskDelegate : URLSessionDelegate { extension URLSessionTaskDelegate { public func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) { - completionHandler(request) + // If the task's delegate does not implement this function, check if the session's delegate does + if self === task.delegate, let sessionDelegate = session.delegate as? URLSessionTaskDelegate, self !== sessionDelegate { + sessionDelegate.urlSession(session, task: task, willPerformHTTPRedirection: response, newRequest: request, completionHandler: completionHandler) + } else { + // Default handling + completionHandler(request) + } } public func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { - completionHandler(.performDefaultHandling, nil) + if self === task.delegate, let sessionDelegate = session.delegate as? URLSessionTaskDelegate, self !== sessionDelegate { + sessionDelegate.urlSession(session, task: task, didReceive: challenge, completionHandler: completionHandler) + } else { + completionHandler(.performDefaultHandling, nil) + } } public func urlSession(_ session: URLSession, task: URLSessionTask, needNewBodyStream completionHandler: @escaping (InputStream?) -> Void) { - completionHandler(nil) + if self === task.delegate, let sessionDelegate = session.delegate as? URLSessionTaskDelegate, self !== sessionDelegate { + sessionDelegate.urlSession(session, task: task, needNewBodyStream: completionHandler) + } else { + completionHandler(nil) + } } - public func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) { } + public func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) { + if self === task.delegate, let sessionDelegate = session.delegate as? URLSessionTaskDelegate, self !== sessionDelegate { + sessionDelegate.urlSession(session, task: task, didSendBodyData: bytesSent, totalBytesSent: totalBytesSent, totalBytesExpectedToSend: totalBytesExpectedToSend) + } + } - public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { } + public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { + if self === task.delegate, let sessionDelegate = session.delegate as? URLSessionTaskDelegate, self !== sessionDelegate { + sessionDelegate.urlSession(session, task: task, didCompleteWithError: error) + } + } - public func urlSession(_ session: URLSession, task: URLSessionTask, willBeginDelayedRequest request: URLRequest, completionHandler: @escaping (URLSession.DelayedRequestDisposition, URLRequest?) -> Void) { } + public func urlSession(_ session: URLSession, task: URLSessionTask, willBeginDelayedRequest request: URLRequest, completionHandler: @escaping (URLSession.DelayedRequestDisposition, URLRequest?) -> Void) { + if self === task.delegate, let sessionDelegate = session.delegate as? URLSessionTaskDelegate, self !== sessionDelegate { + sessionDelegate.urlSession(session, task: task, willBeginDelayedRequest: request, completionHandler: completionHandler) + } + } - public func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { } + public func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { + if self === task.delegate, let sessionDelegate = session.delegate as? URLSessionTaskDelegate, self !== sessionDelegate { + sessionDelegate.urlSession(session, task: task, didFinishCollecting: metrics) + } + } } /* diff --git a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift index 6a342c6ad2..3771945750 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift @@ -104,6 +104,22 @@ open class URLSessionTask : NSObject, NSCopying { internal var actualSession: URLSession? { return session as? URLSession } internal var session: URLSessionProtocol! //change to nil when task completes + private var _taskDelegate: URLSessionTaskDelegate? + open var delegate: URLSessionTaskDelegate? { + get { + if let _taskDelegate { return _taskDelegate } + return self.actualSession?.delegate as? URLSessionTaskDelegate + } + set { + guard !self.hasTriggeredResume else { + fatalError("Cannot set task delegate after resumption") + } + _taskDelegate = newValue + } + } + + internal var _callCompletionHandlerInline = false + fileprivate enum ProtocolState { case toBeCreated case awaitingCacheReply(Bag<(URLProtocol?) -> Void>) @@ -211,7 +227,7 @@ open class URLSessionTask : NSObject, NSCopying { return } - if let session = actualSession, let delegate = session.delegate as? URLSessionTaskDelegate { + if let session = actualSession, let delegate = self.delegate { delegate.urlSession(session, task: self) { (stream) in if let stream = stream { completion(.stream(stream)) @@ -1044,7 +1060,9 @@ extension _ProtocolClient : URLProtocolClient { } switch session.behaviour(for: task) { - case .taskDelegate(let delegate): + case .taskDelegate(let delegate), + .dataCompletionHandlerWithTaskDelegate(_, let delegate), + .downloadCompletionHandlerWithTaskDelegate(_, let delegate): if let dataDelegate = delegate as? URLSessionDataDelegate, let dataTask = task as? URLSessionDataTask { session.delegateQueue.addOperation { @@ -1119,7 +1137,7 @@ extension _ProtocolClient : URLProtocolClient { let cacheable = CachedURLResponse(response: response, data: Data(data.joined()), storagePolicy: cachePolicy) let protocolAllows = (urlProtocol as? _NativeProtocol)?.canCache(cacheable) ?? false if protocolAllows { - if let delegate = task.session.delegate as? URLSessionDataDelegate { + if let delegate = task.delegate as? URLSessionDataDelegate { delegate.urlSession(task.session as! URLSession, dataTask: task, willCacheResponse: cacheable) { (actualCacheable) in if let actualCacheable = actualCacheable { cache.storeCachedResponse(actualCacheable, for: task) @@ -1157,8 +1175,9 @@ extension _ProtocolClient : URLProtocolClient { session.workQueue.async { session.taskRegistry.remove(task) } - case .dataCompletionHandler(let completion): - session.delegateQueue.addOperation { + case .dataCompletionHandler(let completion), + .dataCompletionHandlerWithTaskDelegate(let completion, _): + let dataCompletion = { guard task.state != .completed else { return } completion(urlProtocol.properties[URLProtocol._PropertyKey.responseData] as? Data ?? Data(), task.response, nil) task.state = .completed @@ -1166,8 +1185,16 @@ extension _ProtocolClient : URLProtocolClient { session.taskRegistry.remove(task) } } - case .downloadCompletionHandler(let completion): - session.delegateQueue.addOperation { + if task._callCompletionHandlerInline { + dataCompletion() + } else { + session.delegateQueue.addOperation { + dataCompletion() + } + } + case .downloadCompletionHandler(let completion), + .downloadCompletionHandlerWithTaskDelegate(let completion, _): + let downloadCompletion = { guard task.state != .completed else { return } completion(urlProtocol.properties[URLProtocol._PropertyKey.temporaryFileURL] as? URL, task.response, nil) task.state = .completed @@ -1175,6 +1202,13 @@ extension _ProtocolClient : URLProtocolClient { session.taskRegistry.remove(task) } } + if task._callCompletionHandlerInline { + downloadCompletion() + } else { + session.delegateQueue.addOperation { + downloadCompletion() + } + } } task._invalidateProtocol() } @@ -1224,7 +1258,7 @@ extension _ProtocolClient : URLProtocolClient { } } - if let delegate = session.delegate as? URLSessionTaskDelegate { + if let delegate = task.delegate { session.delegateQueue.addOperation { delegate.urlSession(session, task: task, didReceive: challenge) { disposition, credential in @@ -1297,8 +1331,9 @@ extension _ProtocolClient : URLProtocolClient { session.workQueue.async { session.taskRegistry.remove(task) } - case .dataCompletionHandler(let completion): - session.delegateQueue.addOperation { + case .dataCompletionHandler(let completion), + .dataCompletionHandlerWithTaskDelegate(let completion, _): + let dataCompletion = { guard task.state != .completed else { return } completion(nil, nil, error) task.state = .completed @@ -1306,8 +1341,16 @@ extension _ProtocolClient : URLProtocolClient { session.taskRegistry.remove(task) } } - case .downloadCompletionHandler(let completion): - session.delegateQueue.addOperation { + if task._callCompletionHandlerInline { + dataCompletion() + } else { + session.delegateQueue.addOperation { + dataCompletion() + } + } + case .downloadCompletionHandler(let completion), + .downloadCompletionHandlerWithTaskDelegate(let completion, _): + let downloadCompletion = { guard task.state != .completed else { return } completion(nil, nil, error) task.state = .completed @@ -1315,6 +1358,13 @@ extension _ProtocolClient : URLProtocolClient { session.taskRegistry.remove(task) } } + if task._callCompletionHandlerInline { + downloadCompletion() + } else { + session.delegateQueue.addOperation { + downloadCompletion() + } + } } task._invalidateProtocol() } diff --git a/Tests/Foundation/Tests/TestURLSession.swift b/Tests/Foundation/Tests/TestURLSession.swift index 19118ee80b..260d93ce3f 100644 --- a/Tests/Foundation/Tests/TestURLSession.swift +++ b/Tests/Foundation/Tests/TestURLSession.swift @@ -92,7 +92,42 @@ class TestURLSession: LoopbackServerTest { task.resume() waitForExpectations(timeout: 12) } - + + func test_asyncDataFromURL() async throws { + guard #available(macOS 12.0, iOS 15.0, watchOS 8.0, tvOS 15.0, *) else { return } + let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/UK" + let (data, response) = try await URLSession.shared.data(from: URL(string: urlString)!, delegate: nil) + guard let httpResponse = response as? HTTPURLResponse else { + XCTFail("Did not get response") + return + } + XCTAssertEqual(200, httpResponse.statusCode, "HTTP response code is not 200") + let result = String(data: data, encoding: .utf8) ?? "" + XCTAssertEqual("London", result, "Did not receive expected value") + } + + func test_asyncDataFromURLWithDelegate() async throws { + guard #available(macOS 12.0, iOS 15.0, watchOS 8.0, tvOS 15.0, *) else { return } + class CapitalDataTaskDelegate: NSObject, URLSessionDataDelegate { + var capital: String = "unknown" + public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { + capital = String(data: data, encoding: .utf8)! + } + } + let delegate = CapitalDataTaskDelegate() + + let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/UK" + let (data, response) = try await URLSession.shared.data(from: URL(string: urlString)!, delegate: delegate) + guard let httpResponse = response as? HTTPURLResponse else { + XCTFail("Did not get response") + return + } + XCTAssertEqual(200, httpResponse.statusCode, "HTTP response code is not 200") + let result = String(data: data, encoding: .utf8) ?? "" + XCTAssertEqual("London", result, "Did not receive expected value") + XCTAssertEqual("London", delegate.capital) + } + func test_dataTaskWithHttpInputStream() throws { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/jsonBody" let url = try XCTUnwrap(URL(string: urlString)) @@ -266,6 +301,44 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 12) } + func test_asyncDownloadFromURL() async throws { + guard #available(macOS 12.0, iOS 15.0, watchOS 8.0, tvOS 15.0, *) else { return } + let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/country.txt" + let (location, response) = try await URLSession.shared.download(from: URL(string: urlString)!) + guard let httpResponse = response as? HTTPURLResponse else { + XCTFail("Did not get response") + return + } + XCTAssertEqual(200, httpResponse.statusCode, "HTTP response code is not 200") + XCTAssertNotNil(location, "Download location was nil") + } + + func test_asyncDownloadFromURLWithDelegate() async throws { + guard #available(macOS 12.0, iOS 15.0, watchOS 8.0, tvOS 15.0, *) else { return } + class AsyncDownloadDelegate : NSObject, URLSessionDownloadDelegate { + func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) { + XCTFail("Should not be called for async downloads") + } + + var totalBytesWritten = Int64(0) + public func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, + totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) -> Void { + self.totalBytesWritten = totalBytesWritten + } + } + let delegate = AsyncDownloadDelegate() + + let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/country.txt" + let (location, response) = try await URLSession.shared.download(from: URL(string: urlString)!, delegate: delegate) + guard let httpResponse = response as? HTTPURLResponse else { + XCTFail("Did not get response") + return + } + XCTAssertEqual(200, httpResponse.statusCode, "HTTP response code is not 200") + XCTAssertNotNil(location, "Download location was nil") + XCTAssertTrue(delegate.totalBytesWritten > 0) + } + func test_gzippedDownloadTask() { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/gzipped-response" let url = URL(string: urlString)! @@ -1694,6 +1767,21 @@ class TestURLSession: LoopbackServerTest { XCTAssertNil(session.delegate) } + func test_sessionDelegateCalledIfTaskDelegateDoesNotImplement() throws { + let expectation = XCTestExpectation(description: "task finished") + let delegate = SessionDelegate(with: expectation) + let session = URLSession(configuration: .default, delegate: delegate, delegateQueue: nil) + + class EmptyTaskDelegate: NSObject, URLSessionTaskDelegate { } + let url = URL(string: "http://127.0.0.1:\(TestURLSession.serverPort)/country.txt")! + let request = URLRequest(url: url) + let task = session.dataTask(with: request) + task.delegate = EmptyTaskDelegate() + task.resume() + + wait(for: [expectation], timeout: 5) + } + func test_getAllTasks() throws { let expect = expectation(description: "Tasks URLSession.getAllTasks") @@ -2170,6 +2258,7 @@ class TestURLSession: LoopbackServerTest { ("test_checkErrorTypeAfterInvalidateAndCancel", test_checkErrorTypeAfterInvalidateAndCancel), ("test_taskCountAfterInvalidateAndCancel", test_taskCountAfterInvalidateAndCancel), ("test_sessionDelegateAfterInvalidateAndCancel", test_sessionDelegateAfterInvalidateAndCancel), + ("test_sessionDelegateCalledIfTaskDelegateDoesNotImplement", test_sessionDelegateCalledIfTaskDelegateDoesNotImplement), /* ⚠️ */ ("test_getAllTasks", testExpectedToFail(test_getAllTasks, "This test causes later ones to crash")), /* ⚠️ */ ("test_getTasksWithCompletion", testExpectedToFail(test_getTasksWithCompletion, "Flaky tests")), /* ⚠️ */ ("test_invalidResumeDataForDownloadTask", @@ -2183,6 +2272,10 @@ class TestURLSession: LoopbackServerTest { #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT if #available(macOS 12.0, *) { retVal.append(contentsOf: [ + ("test_asyncDataFromURL", asyncTest(test_asyncDataFromURL)), + ("test_asyncDataFromURLWithDelegate", asyncTest(test_asyncDataFromURLWithDelegate)), + ("test_asyncDownloadFromURL", asyncTest(test_asyncDownloadFromURL)), + ("test_asyncDownloadFromURLWithDelegate", asyncTest(test_asyncDownloadFromURLWithDelegate)), ("test_webSocket", asyncTest(test_webSocket)), ("test_webSocketSpecificProtocol", asyncTest(test_webSocketSpecificProtocol)), ("test_webSocketAbruptClose", asyncTest(test_webSocketAbruptClose)), @@ -2392,7 +2485,6 @@ extension SessionDelegate: URLSessionDataDelegate { } } - class DataTask : NSObject { let syncQ = dispatchQueueMake("org.swift.TestFoundation.TestURLSession.DataTask.syncQ") let dataTaskExpectation: XCTestExpectation! From d7c868a21d086711de2cca72e619d4e8ce6bed49 Mon Sep 17 00:00:00 2001 From: Jonathan Flat <50605158+jrflat@users.noreply.github.com> Date: Fri, 7 Jun 2024 09:38:05 -0700 Subject: [PATCH 076/198] Fix test_webSocket hang (#4973) --- .../URLSession/URLSessionTask.swift | 6 ++++++ Tests/Foundation/Tests/TestURLSession.swift | 11 +++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift index 3771945750..95b14f38ad 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift @@ -865,6 +865,12 @@ open class URLSessionWebSocketTask : URLSessionTask { } } self.receiveCompletionHandlers.removeAll() + for handler in self.pongCompletionHandlers { + session.delegateQueue.addOperation { + handler(taskError) + } + } + self.pongCompletionHandlers.removeAll() self._getProtocol { urlProtocol in self.workQueue.async { if self.handshakeCompleted && self.state != .completed { diff --git a/Tests/Foundation/Tests/TestURLSession.swift b/Tests/Foundation/Tests/TestURLSession.swift index 260d93ce3f..d3b9e3c37c 100644 --- a/Tests/Foundation/Tests/TestURLSession.swift +++ b/Tests/Foundation/Tests/TestURLSession.swift @@ -2064,8 +2064,15 @@ class TestURLSession: LoopbackServerTest { XCTFail("Unexpected Data Message") } - try await task.sendPing() - + do { + try await task.sendPing() + // Server hasn't closed the connection yet + } catch { + // Server closed the connection before we could process the pong + let urlError = try XCTUnwrap(error as? URLError) + XCTAssertEqual(urlError._nsError.code, NSURLErrorNetworkConnectionLost) + } + wait(for: [delegate.expectation], timeout: 50) do { From 301b6f59aa9bb2261060f3d49a9ba0548e164527 Mon Sep 17 00:00:00 2001 From: Kenta Kubo <601636+kkebo@users.noreply.github.com> Date: Sun, 9 Jun 2024 05:27:37 +0900 Subject: [PATCH 077/198] [wasm] Do not set permissions in `Data.write` This fixes https://github.com/swiftwasm/swift/issues/5584. --- Sources/Foundation/NSData.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Sources/Foundation/NSData.swift b/Sources/Foundation/NSData.swift index aaeeb9aeca..5c85e185c6 100644 --- a/Sources/Foundation/NSData.swift +++ b/Sources/Foundation/NSData.swift @@ -457,7 +457,12 @@ open class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding { } let fm = FileManager.default +#if os(WASI) + // WASI does not have permission concept + let permissions: Int? = nil +#else let permissions = try? fm._permissionsOfItem(atPath: path) +#endif if writeOptionsMask.contains(.atomic) { let (newFD, auxFilePath) = try _NSCreateTemporaryFile(path) From 7e2f7fef9685aafed3eee7d2d578b6c3405da72d Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Mon, 17 Jun 2024 09:39:33 -0700 Subject: [PATCH 078/198] Include CFBase.h in CoreFoundation_Prefix.h (#4979) --- Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h index 8d5a2460cf..2c41d2861f 100644 --- a/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h +++ b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h @@ -58,6 +58,7 @@ #define TARGET_OS_WATCH 0 #endif +#include "CFBase.h" #include #include From c772413c531526535b7bfa8dd446242d6c16f234 Mon Sep 17 00:00:00 2001 From: Charles Hu Date: Fri, 17 May 2024 18:40:30 -0700 Subject: [PATCH 079/198] Introduce Cmake support for SwiftCorelibsFoundation --- CMakeLists.txt | 128 ++++++++++++++ Package.swift | 4 +- Sources/CMakeLists.txt | 20 +++ Sources/CoreFoundation/CFBundle_Locale.c | 4 +- Sources/CoreFoundation/CFCharacterSet.c | 4 +- .../CoreFoundation/CFDateIntervalFormatter.c | 2 +- Sources/CoreFoundation/CFICUConverters.c | 4 +- Sources/CoreFoundation/CFLocale.c | 26 +-- Sources/CoreFoundation/CFLocaleIdentifier.c | 2 +- Sources/CoreFoundation/CFRegularExpression.c | 2 +- Sources/CoreFoundation/CFString.c | 2 +- Sources/CoreFoundation/CFStringTransform.c | 2 +- Sources/CoreFoundation/CFStringUtilities.c | 4 +- Sources/CoreFoundation/CFTimeZone.c | 6 +- Sources/CoreFoundation/CMakeLists.txt | 125 +++++++++++++ .../CoreFoundation/include/CoreFoundation.h | 2 +- .../{ => include}/module.modulemap | 2 +- .../{ => include}/static-module.map | 0 .../internalInclude/CFCalendar_Internal.h | 4 +- .../internalInclude/CFICULogging.h | 18 +- Sources/CoreFoundation/module.map | 4 - Sources/Foundation/Bridging.swift | 2 +- Sources/Foundation/Bundle.swift | 2 +- Sources/Foundation/CMakeLists.txt | 166 ++++++++++++++++++ Sources/Foundation/DateComponents.swift | 2 +- Sources/Foundation/DateFormatter.swift | 2 +- Sources/Foundation/DateInterval.swift | 2 +- .../Foundation/DateIntervalFormatter.swift | 2 +- Sources/Foundation/Dictionary.swift | 2 +- Sources/Foundation/FileHandle.swift | 2 +- Sources/Foundation/FileManager+POSIX.swift | 4 +- Sources/Foundation/FileManager+Win32.swift | 2 +- Sources/Foundation/FileManager.swift | 2 +- Sources/Foundation/Host.swift | 2 +- Sources/Foundation/ISO8601DateFormatter.swift | 2 +- Sources/Foundation/JSONDecoder.swift | 2 +- Sources/Foundation/JSONEncoder.swift | 2 +- Sources/Foundation/JSONSerialization.swift | 2 +- Sources/Foundation/Measurement.swift | 2 +- Sources/Foundation/NSArray.swift | 2 +- Sources/Foundation/NSAttributedString.swift | 2 +- Sources/Foundation/NSCFArray.swift | 2 +- Sources/Foundation/NSCFBoolean.swift | 2 +- Sources/Foundation/NSCFCharacterSet.swift | 2 +- Sources/Foundation/NSCFDictionary.swift | 2 +- Sources/Foundation/NSCFSet.swift | 2 +- Sources/Foundation/NSCFString.swift | 2 +- Sources/Foundation/NSCalendar.swift | 4 +- Sources/Foundation/NSCharacterSet.swift | 2 +- Sources/Foundation/NSConcreteValue.swift | 2 +- Sources/Foundation/NSData.swift | 2 +- Sources/Foundation/NSDate.swift | 2 +- Sources/Foundation/NSDateComponents.swift | 2 +- Sources/Foundation/NSDictionary.swift | 2 +- Sources/Foundation/NSError.swift | 2 +- Sources/Foundation/NSKeyedArchiver.swift | 2 +- .../Foundation/NSKeyedArchiverHelpers.swift | 2 +- .../NSKeyedCoderOldStyleArray.swift | 2 +- Sources/Foundation/NSKeyedUnarchiver.swift | 2 +- Sources/Foundation/NSLocale.swift | 2 +- Sources/Foundation/NSLock.swift | 2 +- Sources/Foundation/NSLog.swift | 2 +- Sources/Foundation/NSNumber.swift | 2 +- Sources/Foundation/NSObjCRuntime.swift | 2 +- Sources/Foundation/NSObject.swift | 2 +- Sources/Foundation/NSPathUtilities.swift | 2 +- Sources/Foundation/NSRange.swift | 2 +- Sources/Foundation/NSRegularExpression.swift | 2 +- Sources/Foundation/NSSet.swift | 2 +- Sources/Foundation/NSSortDescriptor.swift | 2 +- Sources/Foundation/NSString.swift | 2 +- Sources/Foundation/NSSwiftRuntime.swift | 2 +- Sources/Foundation/NSTextCheckingResult.swift | 2 +- Sources/Foundation/NSTimeZone.swift | 2 +- Sources/Foundation/NSURL.swift | 2 +- Sources/Foundation/NSURLComponents.swift | 2 +- Sources/Foundation/NSUUID.swift | 2 +- Sources/Foundation/NotificationQueue.swift | 2 +- Sources/Foundation/NumberFormatter.swift | 2 +- Sources/Foundation/Port.swift | 2 +- Sources/Foundation/Process.swift | 2 +- Sources/Foundation/ProcessInfo.swift | 2 +- .../PropertyListSerialization.swift | 2 +- Sources/Foundation/RunLoop.swift | 2 +- Sources/Foundation/Set.swift | 2 +- Sources/Foundation/Stream.swift | 2 +- Sources/Foundation/String.swift | 2 +- Sources/Foundation/Thread.swift | 2 +- Sources/Foundation/Timer.swift | 2 +- Sources/Foundation/UserDefaults.swift | 2 +- Sources/FoundationNetworking/CMakeLists.txt | 63 +++++++ .../HTTPCookieStorage.swift | 2 +- .../URLSession/BodySource.swift | 2 +- .../URLSession/FTP/FTPURLProtocol.swift | 2 +- .../URLSession/HTTP/HTTPMessage.swift | 2 +- .../URLSession/HTTP/HTTPURLProtocol.swift | 2 +- .../URLSession/NativeProtocol.swift | 2 +- .../URLSession/TaskRegistry.swift | 2 +- .../URLSession/TransferState.swift | 2 +- .../URLSession/URLSession.swift | 2 +- .../URLSession/URLSessionTask.swift | 2 +- .../URLSession/URLSessionTaskMetrics.swift | 2 +- .../WebSocket/WebSocketURLProtocol.swift | 2 +- .../URLSession/libcurl/EasyHandle.swift | 2 +- .../URLSession/libcurl/MultiHandle.swift | 2 +- .../URLSession/libcurl/libcurlHelpers.swift | 2 +- Sources/FoundationXML/CMakeLists.txt | 38 ++++ Sources/FoundationXML/XMLDTD.swift | 2 +- Sources/FoundationXML/XMLDTDNode.swift | 2 +- Sources/FoundationXML/XMLDocument.swift | 2 +- Sources/FoundationXML/XMLElement.swift | 2 +- Sources/FoundationXML/XMLNode.swift | 2 +- Sources/FoundationXML/XMLParser.swift | 2 +- .../Public/Asynchronous/XCTWaiter.swift | 2 +- Sources/_CFURLSessionInterface/CMakeLists.txt | 35 ++++ .../include/CFURLSessionInterface.h | 1 + .../{ => include}/module.modulemap | 2 +- .../{ => include}/static-module.map | 0 Sources/_CFURLSessionInterface/module.map | 3 - Sources/_CFXMLInterface/CMakeLists.txt | 34 ++++ .../_CFXMLInterface/include/CFXMLInterface.h | 1 + .../{ => include}/module.modulemap | 2 +- .../{ => include}/static-module.map | 0 Sources/_CFXMLInterface/module.map | 3 - cmake/modules/CMakeLists.txt | 26 +++ cmake/modules/FoundationConfig.cmake.in | 20 +++ cmake/modules/FoundationSwiftSupport.cmake | 45 +++++ 127 files changed, 840 insertions(+), 148 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 Sources/CMakeLists.txt create mode 100644 Sources/CoreFoundation/CMakeLists.txt rename Sources/CoreFoundation/{ => include}/module.modulemap (73%) rename Sources/CoreFoundation/{ => include}/static-module.map (100%) delete mode 100644 Sources/CoreFoundation/module.map create mode 100644 Sources/Foundation/CMakeLists.txt create mode 100644 Sources/FoundationNetworking/CMakeLists.txt create mode 100644 Sources/FoundationXML/CMakeLists.txt create mode 100644 Sources/_CFURLSessionInterface/CMakeLists.txt rename Sources/_CFURLSessionInterface/{ => include}/module.modulemap (61%) rename Sources/_CFURLSessionInterface/{ => include}/static-module.map (100%) delete mode 100644 Sources/_CFURLSessionInterface/module.map create mode 100644 Sources/_CFXMLInterface/CMakeLists.txt rename Sources/_CFXMLInterface/{ => include}/module.modulemap (62%) rename Sources/_CFXMLInterface/{ => include}/static-module.map (100%) delete mode 100644 Sources/_CFXMLInterface/module.map create mode 100644 cmake/modules/CMakeLists.txt create mode 100644 cmake/modules/FoundationConfig.cmake.in create mode 100644 cmake/modules/FoundationSwiftSupport.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000..3d6164e5f5 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,128 @@ +##===----------------------------------------------------------------------===## +## +## This source file is part of the Swift open source project +## +## Copyright (c) 2024 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.md for the list of Swift project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +cmake_minimum_required(VERSION 3.24) + +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) + +if(POLICY CMP0156) + # Deduplicate linked libraries where appropriate + cmake_policy(SET CMP0156 NEW) +endif() + +if(POLICY CMP0157) + # New Swift build model: improved incremental build performance and LSP support + cmake_policy(SET CMP0157 NEW) +endif() + +if (NOT DEFINED CMAKE_C_COMPILER) + set(CMAKE_C_COMPILER clang) +endif() + +project(Foundation + LANGUAGES C Swift) + +if(NOT SWIFT_SYSTEM_NAME) + if(CMAKE_SYSTEM_NAME STREQUAL Darwin) + set(SWIFT_SYSTEM_NAME macosx) + else() + set(SWIFT_SYSTEM_NAME "$") + endif() +endif() + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +set(CMAKE_Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift) + +# Fetchable dependcies +include(FetchContent) +if (_SwiftFoundationICU_SourceDIR) + FetchContent_Declare(SwiftFoundationICU + SOURCE_DIR ${_SwiftFoundationICU_SourceDIR}) +else() + FetchContent_Declare(SwiftFoundationICU + GIT_REPOSITORY https://github.com/apple/swift-foundation-icu.git + GIT_TAG 0.0.8) +endif() + +if (_SwiftFoundation_SourceDIR) + FetchContent_Declare(SwiftFoundation + SOURCE_DIR ${_SwiftFoundation_SourceDIR}) +else() + FetchContent_Declare(SwiftFoundation + GIT_REPOSITORY https://github.com/apple/swift-foundation.git + GIT_TAG main) +endif() +FetchContent_MakeAvailable(SwiftFoundationICU SwiftFoundation) + +# Precompute module triple for installation +if(NOT SwiftFoundation_MODULE_TRIPLE) + set(module_triple_command "${CMAKE_Swift_COMPILER}" -print-target-info) + if(CMAKE_Swift_COMPILER_TARGET) + list(APPEND module_triple_command -target ${CMAKE_Swift_COMPILER_TARGET}) + endif() + execute_process(COMMAND ${module_triple_command} OUTPUT_VARIABLE target_info_json) + string(JSON module_triple GET "${target_info_json}" "target" "moduleTriple") + set(SwiftFoundation_MODULE_TRIPLE "${module_triple}" CACHE STRING "swift module triple used for installed swiftmodule and swiftinterface files") + mark_as_advanced(SwiftFoundation_MODULE_TRIPLE) +endif() + +# System dependencies (fail fast if dependencies are missing) +find_package(LibXml2 REQUIRED) +find_package(CURL REQUIRED) +find_package(dispatch CONFIG REQUIRED) + +# Common build flags (_CFURLSessionInterface, _CFXMLInterface, CoreFoundation) +list(APPEND _Foundation_common_build_flags + "-DDEPLOYMENT_RUNTIME_SWIFT" + "-DCF_BUILDING_CF" + "-DDEPLOYMENT_ENABLE_LIBDISPATCH" + "-DHAVE_STRUCT_TIMESPEC" + "-DSWIFT_CORELIBS_FOUNDATION_HAS_THREADS" + "-Wno-shorten-64-to-32" + "-Wno-deprecated-declarations" + "-Wno-unreachable-code" + "-Wno-conditional-uninitialized" + "-Wno-unused-variable" + "-Wno-unused-function" + "-Wno-microsoft-enum-forward-reference" + "-fconstant-cfstrings" + "-fexceptions" # TODO: not on OpenBSD + "-fdollars-in-identifiers" + "-fno-common" + "-fcf-runtime-abi=swift" + "-fblocks") + +if(CMAKE_BUILD_TYPE STREQUAL Debug) + list(APPEND _Foundation_common_build_flags + "-DDEBUG") +endif() + +# Swift build flags (Foundation, FoundationNetworking, FoundationXML) +set(_Foundation_swift_build_flags) +list(APPEND _Foundation_swift_build_flags + "-DDEPLOYMENT_RUNTIME_SWIFT" + "-DSWIFT_CORELIBS_FOUNDATION_HAS_THREADS") + +if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") + list(APPEND _Foundation_common_build_flags + "-D_GNU_SOURCE" + "-I/usr/lib/swift") # dispatch +endif() + +include(FoundationSwiftSupport) + +add_subdirectory(Sources) +add_subdirectory(cmake/modules) diff --git a/Package.swift b/Package.swift index 3d8d20b094..e31b1f1a18 100644 --- a/Package.swift +++ b/Package.swift @@ -78,7 +78,7 @@ let package = Package( dependencies: [ .package( url: "https://github.com/apple/swift-foundation-icu", - from: "0.0.5" + from: "0.0.7" ), .package( url: "https://github.com/apple/swift-foundation", @@ -121,7 +121,7 @@ let package = Package( .target( name: "_CoreFoundation", dependencies: [ - .product(name: "FoundationICU", package: "swift-foundation-icu"), + .product(name: "_FoundationICU", package: "swift-foundation-icu"), ], path: "Sources/CoreFoundation", cSettings: coreFoundationBuildSettings diff --git a/Sources/CMakeLists.txt b/Sources/CMakeLists.txt new file mode 100644 index 0000000000..457edf4d2b --- /dev/null +++ b/Sources/CMakeLists.txt @@ -0,0 +1,20 @@ +##===----------------------------------------------------------------------===## +## +## This source file is part of the Swift open source project +## +## Copyright (c) 2024 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.md for the list of Swift project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +add_subdirectory(CoreFoundation) +add_subdirectory(_CFXMLInterface) +add_subdirectory(_CFURLSessionInterface) +add_subdirectory(Foundation) +add_subdirectory(FoundationXML) +add_subdirectory(FoundationNetworking) diff --git a/Sources/CoreFoundation/CFBundle_Locale.c b/Sources/CoreFoundation/CFBundle_Locale.c index 22ef762ac7..dc78774861 100644 --- a/Sources/CoreFoundation/CFBundle_Locale.c +++ b/Sources/CoreFoundation/CFBundle_Locale.c @@ -15,9 +15,9 @@ #include "CFPreferences.h" #if __HAS_APPLE_ICU__ -#include +#include <_foundation_unicode/ualoc.h> #endif -#include +#include <_foundation_unicode/uloc.h> #include static CFStringRef _CFBundleCopyLanguageFoundInLocalizations(CFArrayRef localizations, CFStringRef language); diff --git a/Sources/CoreFoundation/CFCharacterSet.c b/Sources/CoreFoundation/CFCharacterSet.c index 8a65277d5f..2bfbb61358 100644 --- a/Sources/CoreFoundation/CFCharacterSet.c +++ b/Sources/CoreFoundation/CFCharacterSet.c @@ -20,8 +20,8 @@ #include #include #include "CFPriv.h" -#include -#include +#include <_foundation_unicode/uchar.h> +#include <_foundation_unicode/uset.h> #define BITSPERBYTE 8 /* (CHAR_BIT * sizeof(unsigned char)) */ #define LOG_BPB 3 diff --git a/Sources/CoreFoundation/CFDateIntervalFormatter.c b/Sources/CoreFoundation/CFDateIntervalFormatter.c index 5d470fbd9b..0e02f2161b 100644 --- a/Sources/CoreFoundation/CFDateIntervalFormatter.c +++ b/Sources/CoreFoundation/CFDateIntervalFormatter.c @@ -20,7 +20,7 @@ #include "CFLocale.h" #include "CFTimeZone.h" -#include +#include <_foundation_unicode/udateintervalformat.h> #if TARGET_OS_WASI #define LOCK() do {} while (0) diff --git a/Sources/CoreFoundation/CFICUConverters.c b/Sources/CoreFoundation/CFICUConverters.c index b63565d1b3..78b60b3fc7 100644 --- a/Sources/CoreFoundation/CFICUConverters.c +++ b/Sources/CoreFoundation/CFICUConverters.c @@ -13,8 +13,8 @@ #include "CFICUConverters.h" #include "CFStringEncodingExt.h" #include "CFUniChar.h" -#include -#include +#include <_foundation_unicode/ucnv.h> +#include <_foundation_unicode/uversion.h> #include "CFInternal.h" #include diff --git a/Sources/CoreFoundation/CFLocale.c b/Sources/CoreFoundation/CFLocale.c index 3b8b483a6f..6c6f8a6a6d 100644 --- a/Sources/CoreFoundation/CFLocale.c +++ b/Sources/CoreFoundation/CFLocale.c @@ -24,18 +24,18 @@ #include "CFLocaleInternal.h" #include #if TARGET_OS_MAC || TARGET_OS_WIN32 || TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI -#include // ICU locales -#include // ICU locale data -#include -#include // ICU currency functions -#include // ICU Unicode sets -#include // ICU low-level utilities -#include // ICU message formatting -#include -#include // ICU numbering systems -#include -#if U_ICU_VERSION_MAJOR_NUM > 53 && __has_include() -#include +#include <_foundation_unicode/uloc.h> // ICU locales +#include <_foundation_unicode/ulocdata.h> // ICU locale data +#include <_foundation_unicode/ucal.h> +#include <_foundation_unicode/ucurr.h> // ICU currency functions +#include <_foundation_unicode/uset.h> // ICU Unicode sets +#include <_foundation_unicode/putil.h> // ICU low-level utilities +#include <_foundation_unicode/umsg.h> // ICU message formatting +#include <_foundation_unicode/ucol.h> +#include <_foundation_unicode/unumsys.h> // ICU numbering systems +#include <_foundation_unicode/uvernum.h> +#if U_ICU_VERSION_MAJOR_NUM > 53 && __has_include(<_foundation_unicode/uameasureformat.h>) +#include <_foundation_unicode/uameasureformat.h> extern int32_t uameasfmt_getUnitsForUsage( const char* locale, @@ -1745,7 +1745,7 @@ static bool __CFLocaleCopyTemperatureUnit(CFLocaleRef locale, bool user, CFTypeR if (!done) { char localeID[ULOC_FULLNAME_CAPACITY+ULOC_KEYWORD_AND_VALUES_CAPACITY]; if (CFStringGetCString(locale->_identifier, localeID, sizeof(localeID)/sizeof(char), kCFStringEncodingASCII)) { -#if U_ICU_VERSION_MAJOR_NUM > 53 && __has_include() +#if U_ICU_VERSION_MAJOR_NUM > 53 && __has_include(<_foundation_unicode/uameasureformat.h>) UErrorCode icuStatus = U_ZERO_ERROR; UAMeasureUnit unit; int32_t unitCount = uameasfmt_getUnitsForUsage(localeID, "temperature", "weather", &unit, 1, &icuStatus); diff --git a/Sources/CoreFoundation/CFLocaleIdentifier.c b/Sources/CoreFoundation/CFLocaleIdentifier.c index 88ea819818..de4bc4c602 100644 --- a/Sources/CoreFoundation/CFLocaleIdentifier.c +++ b/Sources/CoreFoundation/CFLocaleIdentifier.c @@ -59,7 +59,7 @@ #include #include #if TARGET_OS_MAC || TARGET_OS_WIN32 || TARGET_OS_LINUX || TARGET_OS_BSD -#include +#include <_foundation_unicode/uloc.h> #else #define ULOC_KEYWORD_SEPARATOR '@' #define ULOC_FULLNAME_CAPACITY 56 diff --git a/Sources/CoreFoundation/CFRegularExpression.c b/Sources/CoreFoundation/CFRegularExpression.c index 093847825e..7788fec5c8 100644 --- a/Sources/CoreFoundation/CFRegularExpression.c +++ b/Sources/CoreFoundation/CFRegularExpression.c @@ -15,7 +15,7 @@ #include "CFInternal.h" #define U_SHOW_DRAFT_API 1 #define U_SHOW_INTERNAL_API 1 -#include +#include <_foundation_unicode/uregex.h> #define STACK_BUFFER_SIZE 256 diff --git a/Sources/CoreFoundation/CFString.c b/Sources/CoreFoundation/CFString.c index 48d2bb383f..1de46dac05 100644 --- a/Sources/CoreFoundation/CFString.c +++ b/Sources/CoreFoundation/CFString.c @@ -27,7 +27,7 @@ #include "CFString_Internal.h" #include "CFRuntime_Internal.h" #include -#include +#include <_foundation_unicode/uchar.h> #if TARGET_OS_MAC || TARGET_OS_WIN32 || TARGET_OS_LINUX || TARGET_OS_BSD #include "CFConstantKeys.h" #include "CFStringLocalizedFormattingInternal.h" diff --git a/Sources/CoreFoundation/CFStringTransform.c b/Sources/CoreFoundation/CFStringTransform.c index bed21ccb83..ab88558db7 100644 --- a/Sources/CoreFoundation/CFStringTransform.c +++ b/Sources/CoreFoundation/CFStringTransform.c @@ -19,7 +19,7 @@ #include "CFUniChar.h" #include "CFPriv.h" #include "CFInternal.h" -#include +#include <_foundation_unicode/utrans.h> static const char *__CFStringTransformGetICUIdentifier(CFStringRef identifier); diff --git a/Sources/CoreFoundation/CFStringUtilities.c b/Sources/CoreFoundation/CFStringUtilities.c index 1767b9de15..8f48bf3d34 100644 --- a/Sources/CoreFoundation/CFStringUtilities.c +++ b/Sources/CoreFoundation/CFStringUtilities.c @@ -19,8 +19,8 @@ #include #include #if TARGET_OS_MAC || TARGET_OS_WIN32 || TARGET_OS_LINUX || TARGET_OS_WASI -#include -#include +#include <_foundation_unicode/ucol.h> +#include <_foundation_unicode/ucoleitr.h> #endif #include diff --git a/Sources/CoreFoundation/CFTimeZone.c b/Sources/CoreFoundation/CFTimeZone.c index 24f6d7384d..e959bdc264 100644 --- a/Sources/CoreFoundation/CFTimeZone.c +++ b/Sources/CoreFoundation/CFTimeZone.c @@ -21,9 +21,9 @@ #include #include #include -#include -#include -#include +#include <_foundation_unicode/ucal.h> +#include <_foundation_unicode/udat.h> +#include <_foundation_unicode/ustring.h> #include "CFDateFormatter.h" #if TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI #include diff --git a/Sources/CoreFoundation/CMakeLists.txt b/Sources/CoreFoundation/CMakeLists.txt new file mode 100644 index 0000000000..b5e62d7943 --- /dev/null +++ b/Sources/CoreFoundation/CMakeLists.txt @@ -0,0 +1,125 @@ +##===----------------------------------------------------------------------===## +## +## This source file is part of the Swift open source project +## +## Copyright (c) 2024 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.md for the list of Swift project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +add_library(CoreFoundation STATIC + CFApplicationPreferences.c + CFArray.c + CFAttributedString.c + CFBag.c + CFBase.c + CFBasicHash.c + CFBigNumber.c + CFBinaryHeap.c + CFBinaryPList.c + CFBitVector.c + CFBuiltinConverters.c + CFBundle_Binary.c + CFBundle_DebugStrings.c + CFBundle_Executable.c + CFBundle_Grok.c + CFBundle_InfoPlist.c + CFBundle_Locale.c + CFBundle_Main.c + CFBundle_ResourceFork.c + CFBundle_Resources.c + CFBundle_SplitFileName.c + CFBundle_Strings.c + CFBundle_Tables.c + CFBundle.c + CFBurstTrie.c + CFCalendar_Enumerate.c + CFCalendar.c + CFCharacterSet.c + CFConcreteStreams.c + CFData.c + CFDate.c + CFDateComponents.c + CFDateFormatter.c + CFDateInterval.c + CFDateIntervalFormatter.c + CFDictionary.c + CFError.c + CFFileUtilities.c + CFICUConverters.c + CFKnownLocations.c + CFListFormatter.c + CFLocale.c + CFLocaleIdentifier.c + CFLocaleKeys.c + CFNumber.c + CFNumberFormatter.c + CFOldStylePList.c + CFPlatform.c + CFPlatformConverters.c + CFPlugIn.c + CFPreferences.c + CFPropertyList.c + CFRegularExpression.c + CFRelativeDateTimeFormatter.c + CFRunArray.c + CFRunLoop.c + CFRuntime.c + CFSet.c + CFSocket.c + CFSocketStream.c + CFSortFunctions.c + CFStorage.c + CFStream.c + CFString.c + CFStringEncodingConverter.c + CFStringEncodingDatabase.c + CFStringEncodings.c + CFStringScanner.c + CFStringTransform.c + CFStringUtilities.c + CFSystemDirectories.c + CFTimeZone.c + CFTree.c + CFUniChar.c + CFUnicodeDecomposition.c + CFUnicodePrecomposition.c + CFURL.c + CFURLAccess.c + CFURLComponents_URIParser.c + CFURLComponents.c + CFUtilities.c + CFUUID.c + CFWindowsUtilities.c + CFXMLPreferencesDomain.c + data.c + runtime.c + uuid.c) + +target_include_directories(CoreFoundation + PUBLIC + include + PRIVATE + internalInclude) + +target_compile_options(CoreFoundation PRIVATE + "SHELL:$<$:${_Foundation_common_build_flags}>") + +target_precompile_headers(CoreFoundation PRIVATE internalInclude/CoreFoundation_Prefix.h) + +target_link_libraries(CoreFoundation + PRIVATE + _FoundationICU + dispatch) + +set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS CoreFoundation) + +install(DIRECTORY + include/ + DESTINATION + lib/swift/CoreFoundation) diff --git a/Sources/CoreFoundation/include/CoreFoundation.h b/Sources/CoreFoundation/include/CoreFoundation.h index 64d38adff0..a66e7e614d 100644 --- a/Sources/CoreFoundation/include/CoreFoundation.h +++ b/Sources/CoreFoundation/include/CoreFoundation.h @@ -76,7 +76,7 @@ #include "ForSwiftFoundationOnly.h" -#if TARGET_OS_OSX || TARGET_OS_IPHONE || TARGET_OS_WIN32 +#if TARGET_OS_OSX || TARGET_OS_IPHONE || TARGET_OS_WIN32 || TARGET_OS_LINUX #include "CFMessagePort.h" #include "CFPlugIn.h" #include "CFRunLoop.h" diff --git a/Sources/CoreFoundation/module.modulemap b/Sources/CoreFoundation/include/module.modulemap similarity index 73% rename from Sources/CoreFoundation/module.modulemap rename to Sources/CoreFoundation/include/module.modulemap index 0b54915621..fab2d38e13 100644 --- a/Sources/CoreFoundation/module.modulemap +++ b/Sources/CoreFoundation/include/module.modulemap @@ -1,4 +1,4 @@ -framework module _CoreFoundation [extern_c] [system] { +module CoreFoundation { umbrella header "CoreFoundation.h" explicit module CFPlugInCOM { header "CFPlugInCOM.h" } diff --git a/Sources/CoreFoundation/static-module.map b/Sources/CoreFoundation/include/static-module.map similarity index 100% rename from Sources/CoreFoundation/static-module.map rename to Sources/CoreFoundation/include/static-module.map diff --git a/Sources/CoreFoundation/internalInclude/CFCalendar_Internal.h b/Sources/CoreFoundation/internalInclude/CFCalendar_Internal.h index 7e6bf35154..32e779916e 100644 --- a/Sources/CoreFoundation/internalInclude/CFCalendar_Internal.h +++ b/Sources/CoreFoundation/internalInclude/CFCalendar_Internal.h @@ -21,8 +21,8 @@ #include "CFDateComponents.h" #include "CFDateInterval.h" -#if __has_include() && !defined(__cplusplus) -#include +#if __has_include(<_foundation_unicode/ucal.h>) && !defined(__cplusplus) +#include <_foundation_unicode/ucal.h> #else typedef void *UCalendar; #endif diff --git a/Sources/CoreFoundation/internalInclude/CFICULogging.h b/Sources/CoreFoundation/internalInclude/CFICULogging.h index d521debf79..2d84299e95 100644 --- a/Sources/CoreFoundation/internalInclude/CFICULogging.h +++ b/Sources/CoreFoundation/internalInclude/CFICULogging.h @@ -15,15 +15,15 @@ #if !defined(__COREFOUNDATION_CFICULOGGING__) #define __COREFOUNDATION_CFICULOGGING__ 1 -#include -#include -#include -#include -#include -#include -#include -#if __has_include() -#include +#include <_foundation_unicode/ucal.h> +#include <_foundation_unicode/udatpg.h> +#include <_foundation_unicode/udat.h> +#include <_foundation_unicode/unum.h> +#include <_foundation_unicode/ulistformatter.h> +#include <_foundation_unicode/ucurr.h> +#include <_foundation_unicode/ustring.h> +#if __has_include(<_foundation_unicode/ureldatefmt.h>) +#include <_foundation_unicode/ureldatefmt.h> #endif #if !DEPLOYMENT_RUNTIME_SWIFT && __has_include() diff --git a/Sources/CoreFoundation/module.map b/Sources/CoreFoundation/module.map deleted file mode 100644 index 828ec7f806..0000000000 --- a/Sources/CoreFoundation/module.map +++ /dev/null @@ -1,4 +0,0 @@ -module _CoreFoundation [extern_c] [system] { - umbrella header "CoreFoundation.h" - explicit module CFPlugInCOM { header "CFPlugInCOM.h" } -} diff --git a/Sources/Foundation/Bridging.swift b/Sources/Foundation/Bridging.swift index 5ed8f7309a..4539058325 100644 --- a/Sources/Foundation/Bridging.swift +++ b/Sources/Foundation/Bridging.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #if canImport(ObjectiveC) import ObjectiveC diff --git a/Sources/Foundation/Bundle.swift b/Sources/Foundation/Bundle.swift index 943feee8f0..b8b36d6426 100644 --- a/Sources/Foundation/Bundle.swift +++ b/Sources/Foundation/Bundle.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_silgen_name("swift_getTypeContextDescriptor") private func _getTypeContextDescriptor(of cls: AnyClass) -> UnsafeRawPointer diff --git a/Sources/Foundation/CMakeLists.txt b/Sources/Foundation/CMakeLists.txt new file mode 100644 index 0000000000..ea2fd38d6b --- /dev/null +++ b/Sources/Foundation/CMakeLists.txt @@ -0,0 +1,166 @@ +##===----------------------------------------------------------------------===## +## +## This source file is part of the Swift open source project +## +## Copyright (c) 2024 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.md for the list of Swift project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +add_library(Foundation + AffineTransform.swift + Array.swift + Boxing.swift + Bridging.swift + Bundle.swift + ByteCountFormatter.swift + CGFloat.swift + CharacterSet.swift + Codable.swift + DateComponents.swift + DateComponentsFormatter.swift + DateFormatter.swift + DateInterval.swift + DateIntervalFormatter.swift + Decimal.swift + Dictionary.swift + DispatchData+DataProtocol.swift + EnergyFormatter.swift + Essentials.swift + ExtraStringAPIs.swift + FileHandle.swift + FileManager.swift + FileManager+POSIX.swift + FileManager+Win32.swift + Formatter.swift + FoundationErrors.swift + Host.swift + IndexPath.swift + IndexSet.swift + ISO8601DateFormatter.swift + JSONDecoder.swift + JSONEncoder.swift + JSONSerialization.swift + JSONSerialization+Parser.swift + LengthFormatter.swift + MassFormatter.swift + Measurement.swift + MeasurementFormatter.swift + Morphology.swift + Notification.swift + NotificationQueue.swift + NSArray.swift + NSAttributedString.swift + NSCache.swift + NSCalendar.swift + NSCFArray.swift + NSCFBoolean.swift + NSCFCharacterSet.swift + NSCFDictionary.swift + NSCFSet.swift + NSCFString.swift + NSCFTypeShims.swift + NSCharacterSet.swift + NSCoder.swift + NSComparisonPredicate.swift + NSCompoundPredicate.swift + NSConcreteValue.swift + NSData.swift + NSData+DataProtocol.swift + NSDate.swift + NSDateComponents.swift + NSDecimalNumber.swift + NSDictionary.swift + NSEnumerator.swift + NSError.swift + NSExpression.swift + NSGeometry.swift + NSIndexPath.swift + NSIndexSet.swift + NSKeyedArchiver.swift + NSKeyedArchiverHelpers.swift + NSKeyedCoderOldStyleArray.swift + NSKeyedUnarchiver.swift + NSLocale.swift + NSLock.swift + NSLog.swift + NSMeasurement.swift + NSNotification.swift + NSNull.swift + NSNumber.swift + NSObjCRuntime.swift + NSObject.swift + NSOrderedSet.swift + NSPathUtilities.swift + NSPersonNameComponents.swift + NSPlatform.swift + NSPredicate.swift + NSRange.swift + NSRegularExpression.swift + NSSet.swift + NSSortDescriptor.swift + NSSpecialValue.swift + NSString.swift + NSStringAPI.swift + NSSwiftRuntime.swift + NSTextCheckingResult.swift + NSTimeZone.swift + NSURL.swift + NSURLComponents.swift + NSURLError.swift + NSURLQueryItem.swift + NSUUID.swift + NSValue.swift + NumberFormatter.swift + Operation.swift + PersonNameComponents.swift + PersonNameComponentsFormatter.swift + Port.swift + PortMessage.swift + Process.swift + ProcessInfo.swift + Progress.swift + ProgressFraction.swift + PropertyListSerialization.swift + ReferenceConvertible.swift + RunLoop.swift + Scanner.swift + ScannerAPI.swift + Set.swift + Stream.swift + String.swift + StringEncodings.swift + Thread.swift + Timer.swift + Unit.swift + URL.swift + URLComponents.swift + URLQueryItem.swift + URLResourceKey.swift + UserDefaults.swift + UUID.swift + WinSDK+Extensions.swift) + +target_compile_options(Foundation PRIVATE + "SHELL:$<$:${_Foundation_swift_build_flags}>") + +target_link_libraries(Foundation + PUBLIC + CoreFoundation + FoundationEssentials + FoundationInternationalization) + +set_target_properties(Foundation PROPERTIES + INSTALL_RPATH "$ORIGIN" + BUILD_RPATH "$") + +target_link_libraries(Foundation PUBLIC + swiftDispatch) + +set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS Foundation) +_foundation_install_target(Foundation) diff --git a/Sources/Foundation/DateComponents.swift b/Sources/Foundation/DateComponents.swift index 6c5258b6bd..95865d25bb 100644 --- a/Sources/Foundation/DateComponents.swift +++ b/Sources/Foundation/DateComponents.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension DateComponents : ReferenceConvertible { public typealias ReferenceType = NSDateComponents diff --git a/Sources/Foundation/DateFormatter.swift b/Sources/Foundation/DateFormatter.swift index a793896274..dee69a03dd 100644 --- a/Sources/Foundation/DateFormatter.swift +++ b/Sources/Foundation/DateFormatter.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_spi(SwiftCorelibsFoundation) import FoundationEssentials open class DateFormatter : Formatter { diff --git a/Sources/Foundation/DateInterval.swift b/Sources/Foundation/DateInterval.swift index 02b790f1f7..e84833d3bb 100644 --- a/Sources/Foundation/DateInterval.swift +++ b/Sources/Foundation/DateInterval.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension DateInterval : _ObjectiveCBridgeable { public static func _isBridgedToObjectiveC() -> Bool { diff --git a/Sources/Foundation/DateIntervalFormatter.swift b/Sources/Foundation/DateIntervalFormatter.swift index c5e4f24fee..7a08780b7c 100644 --- a/Sources/Foundation/DateIntervalFormatter.swift +++ b/Sources/Foundation/DateIntervalFormatter.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation internal let kCFDateIntervalFormatterNoStyle = CFDateIntervalFormatterStyle.noStyle internal let kCFDateIntervalFormatterShortStyle = CFDateIntervalFormatterStyle.shortStyle diff --git a/Sources/Foundation/Dictionary.swift b/Sources/Foundation/Dictionary.swift index eb35e22e94..fa0b5079bf 100644 --- a/Sources/Foundation/Dictionary.swift +++ b/Sources/Foundation/Dictionary.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension Dictionary : _ObjectiveCBridgeable { diff --git a/Sources/Foundation/FileHandle.swift b/Sources/Foundation/FileHandle.swift index 2b5f5e8262..72ab09a3f6 100644 --- a/Sources/Foundation/FileHandle.swift +++ b/Sources/Foundation/FileHandle.swift @@ -7,7 +7,7 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #if canImport(Dispatch) import Dispatch #endif diff --git a/Sources/Foundation/FileManager+POSIX.swift b/Sources/Foundation/FileManager+POSIX.swift index f32e5aa2c0..5ec30db4ea 100644 --- a/Sources/Foundation/FileManager+POSIX.swift +++ b/Sources/Foundation/FileManager+POSIX.swift @@ -13,7 +13,7 @@ internal func &(left: UInt32, right: mode_t) -> mode_t { } #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #if os(WASI) import WASILibc @@ -27,7 +27,7 @@ internal var O_TRUNC: Int32 { _getConst_O_TRUNC() } internal var O_WRONLY: Int32 { _getConst_O_WRONLY() } #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension FileManager { internal func _mountedVolumeURLs(includingResourceValuesForKeys propertyKeys: [URLResourceKey]?, options: VolumeEnumerationOptions = []) -> [URL]? { diff --git a/Sources/Foundation/FileManager+Win32.swift b/Sources/Foundation/FileManager+Win32.swift index f53fe3995b..1e8379600c 100644 --- a/Sources/Foundation/FileManager+Win32.swift +++ b/Sources/Foundation/FileManager+Win32.swift @@ -7,7 +7,7 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #if os(Windows) import let WinSDK.INVALID_FILE_ATTRIBUTES diff --git a/Sources/Foundation/FileManager.swift b/Sources/Foundation/FileManager.swift index 64f5da9d76..6f1c7286d2 100644 --- a/Sources/Foundation/FileManager.swift +++ b/Sources/Foundation/FileManager.swift @@ -13,7 +13,7 @@ fileprivate let SF_IMMUTABLE: Int32 = 1 fileprivate let UF_HIDDEN: Int32 = 1 #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #if os(Windows) import CRT import WinSDK diff --git a/Sources/Foundation/Host.swift b/Sources/Foundation/Host.swift index 860a4812c0..b5205ebb76 100644 --- a/Sources/Foundation/Host.swift +++ b/Sources/Foundation/Host.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #if os(Windows) import WinSDK #endif diff --git a/Sources/Foundation/ISO8601DateFormatter.swift b/Sources/Foundation/ISO8601DateFormatter.swift index ffc03833d7..9949b787d0 100644 --- a/Sources/Foundation/ISO8601DateFormatter.swift +++ b/Sources/Foundation/ISO8601DateFormatter.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension ISO8601DateFormatter { diff --git a/Sources/Foundation/JSONDecoder.swift b/Sources/Foundation/JSONDecoder.swift index f8cb339aac..aef6c2a0f6 100644 --- a/Sources/Foundation/JSONDecoder.swift +++ b/Sources/Foundation/JSONDecoder.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation /// A marker protocol used to determine whether a value is a `String`-keyed `Dictionary` /// containing `Decodable` values (in which case it should be exempt from key conversion strategies). diff --git a/Sources/Foundation/JSONEncoder.swift b/Sources/Foundation/JSONEncoder.swift index 71786f747e..df26ca3dca 100644 --- a/Sources/Foundation/JSONEncoder.swift +++ b/Sources/Foundation/JSONEncoder.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation /// A marker protocol used to determine whether a value is a `String`-keyed `Dictionary` /// containing `Encodable` values (in which case it should be exempt from key conversion strategies). diff --git a/Sources/Foundation/JSONSerialization.swift b/Sources/Foundation/JSONSerialization.swift index 549be815f5..e5f9eb0252 100644 --- a/Sources/Foundation/JSONSerialization.swift +++ b/Sources/Foundation/JSONSerialization.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension JSONSerialization { public struct ReadingOptions : OptionSet { diff --git a/Sources/Foundation/Measurement.swift b/Sources/Foundation/Measurement.swift index f9b30e64f5..028048675f 100644 --- a/Sources/Foundation/Measurement.swift +++ b/Sources/Foundation/Measurement.swift @@ -11,7 +11,7 @@ //===----------------------------------------------------------------------===// #if DEPLOYMENT_RUNTIME_SWIFT -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #else @_exported import Foundation // Clang module import _SwiftCoreFoundationOverlayShims diff --git a/Sources/Foundation/NSArray.swift b/Sources/Foundation/NSArray.swift index 0c71b26436..096c090b51 100644 --- a/Sources/Foundation/NSArray.swift +++ b/Sources/Foundation/NSArray.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation open class NSArray : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCoding, ExpressibleByArrayLiteral { private let _cfinfo = _CFInfo(typeID: CFArrayGetTypeID()) diff --git a/Sources/Foundation/NSAttributedString.swift b/Sources/Foundation/NSAttributedString.swift index d9e74b2b85..4f7523f179 100644 --- a/Sources/Foundation/NSAttributedString.swift +++ b/Sources/Foundation/NSAttributedString.swift @@ -7,7 +7,7 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension NSAttributedString { public struct Key: RawRepresentable, Equatable, Hashable { diff --git a/Sources/Foundation/NSCFArray.swift b/Sources/Foundation/NSCFArray.swift index 6a0e7d8e8f..fb94518e4a 100644 --- a/Sources/Foundation/NSCFArray.swift +++ b/Sources/Foundation/NSCFArray.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation internal final class _NSCFArray : NSMutableArray { deinit { diff --git a/Sources/Foundation/NSCFBoolean.swift b/Sources/Foundation/NSCFBoolean.swift index 706c601221..adb48ac535 100644 --- a/Sources/Foundation/NSCFBoolean.swift +++ b/Sources/Foundation/NSCFBoolean.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation internal class __NSCFBoolean : NSNumber { override var hash: Int { diff --git a/Sources/Foundation/NSCFCharacterSet.swift b/Sources/Foundation/NSCFCharacterSet.swift index 7db1632795..b4431b7547 100644 --- a/Sources/Foundation/NSCFCharacterSet.swift +++ b/Sources/Foundation/NSCFCharacterSet.swift @@ -6,7 +6,7 @@ // Copyright © 2016 Apple. All rights reserved. // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation internal class _NSCFCharacterSet : NSMutableCharacterSet { diff --git a/Sources/Foundation/NSCFDictionary.swift b/Sources/Foundation/NSCFDictionary.swift index 1f031195d7..4d7269f588 100644 --- a/Sources/Foundation/NSCFDictionary.swift +++ b/Sources/Foundation/NSCFDictionary.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation internal final class _NSCFDictionary : NSMutableDictionary { deinit { diff --git a/Sources/Foundation/NSCFSet.swift b/Sources/Foundation/NSCFSet.swift index d65c9843db..6b90fd71d7 100644 --- a/Sources/Foundation/NSCFSet.swift +++ b/Sources/Foundation/NSCFSet.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation internal final class _NSCFSet : NSMutableSet { deinit { diff --git a/Sources/Foundation/NSCFString.swift b/Sources/Foundation/NSCFString.swift index f006f1db9b..40ee579f42 100644 --- a/Sources/Foundation/NSCFString.swift +++ b/Sources/Foundation/NSCFString.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @usableFromInline internal class _NSCFString : NSMutableString { diff --git a/Sources/Foundation/NSCalendar.swift b/Sources/Foundation/NSCalendar.swift index 3ab8b16c65..25e1a7054a 100644 --- a/Sources/Foundation/NSCalendar.swift +++ b/Sources/Foundation/NSCalendar.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_spi(SwiftCorelibsFoundation) @_exported import FoundationEssentials internal let kCFCalendarUnitEra = CFCalendarUnit.era @@ -23,7 +23,7 @@ internal let kCFCalendarUnitQuarter = CFCalendarUnit.quarter internal let kCFCalendarUnitWeekOfMonth = CFCalendarUnit.weekOfMonth internal let kCFCalendarUnitWeekOfYear = CFCalendarUnit.weekOfYear internal let kCFCalendarUnitYearForWeekOfYear = CFCalendarUnit.yearForWeekOfYear -internal let kCFCalendarUnitNanosecond = CFCalendarUnit(rawValue: CFOptionFlags(_CoreFoundation.kCFCalendarUnitNanosecond)) +internal let kCFCalendarUnitNanosecond = CFCalendarUnit(rawValue: CFOptionFlags(CoreFoundation.kCFCalendarUnitNanosecond)) internal func _CFCalendarUnitRawValue(_ unit: CFCalendarUnit) -> CFOptionFlags { return unit.rawValue diff --git a/Sources/Foundation/NSCharacterSet.swift b/Sources/Foundation/NSCharacterSet.swift index 08090529e7..b1491b340f 100644 --- a/Sources/Foundation/NSCharacterSet.swift +++ b/Sources/Foundation/NSCharacterSet.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation let kCFCharacterSetControl = CFCharacterSetPredefinedSet.control let kCFCharacterSetWhitespace = CFCharacterSetPredefinedSet.whitespace diff --git a/Sources/Foundation/NSConcreteValue.swift b/Sources/Foundation/NSConcreteValue.swift index dba8c1c7d6..ea796c8825 100644 --- a/Sources/Foundation/NSConcreteValue.swift +++ b/Sources/Foundation/NSConcreteValue.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation internal class NSConcreteValue : NSValue { diff --git a/Sources/Foundation/NSData.swift b/Sources/Foundation/NSData.swift index 6125dc3491..21b1230d35 100644 --- a/Sources/Foundation/NSData.swift +++ b/Sources/Foundation/NSData.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #if !os(WASI) import Dispatch #endif diff --git a/Sources/Foundation/NSDate.swift b/Sources/Foundation/NSDate.swift index 2d9da87b8a..677d883c7e 100644 --- a/Sources/Foundation/NSDate.swift +++ b/Sources/Foundation/NSDate.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation public typealias TimeInterval = Double diff --git a/Sources/Foundation/NSDateComponents.swift b/Sources/Foundation/NSDateComponents.swift index 9967f819c2..03757bb26e 100644 --- a/Sources/Foundation/NSDateComponents.swift +++ b/Sources/Foundation/NSDateComponents.swift @@ -8,7 +8,7 @@ // @_exported import FoundationEssentials -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation // This is a just used as an extensible struct, basically; diff --git a/Sources/Foundation/NSDictionary.swift b/Sources/Foundation/NSDictionary.swift index 47b147fb91..c1d118088a 100644 --- a/Sources/Foundation/NSDictionary.swift +++ b/Sources/Foundation/NSDictionary.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #if !os(WASI) import Dispatch diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index 5fc309e1c6..d84e54e5c7 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -18,7 +18,7 @@ import Glibc import CRT #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation public typealias NSErrorDomain = NSString diff --git a/Sources/Foundation/NSKeyedArchiver.swift b/Sources/Foundation/NSKeyedArchiver.swift index 13682c3ae2..c09c682222 100644 --- a/Sources/Foundation/NSKeyedArchiver.swift +++ b/Sources/Foundation/NSKeyedArchiver.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation /// Archives created using the class method `archivedData(withRootObject:)` use this key /// for the root object in the hierarchy of encoded objects. The `NSKeyedUnarchiver` class method diff --git a/Sources/Foundation/NSKeyedArchiverHelpers.swift b/Sources/Foundation/NSKeyedArchiverHelpers.swift index e528acce7e..341936d851 100644 --- a/Sources/Foundation/NSKeyedArchiverHelpers.swift +++ b/Sources/Foundation/NSKeyedArchiverHelpers.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension CFKeyedArchiverUID : _NSBridgeable { typealias NSType = _NSKeyedArchiverUID diff --git a/Sources/Foundation/NSKeyedCoderOldStyleArray.swift b/Sources/Foundation/NSKeyedCoderOldStyleArray.swift index 4bcf458c8c..72b48c0215 100644 --- a/Sources/Foundation/NSKeyedCoderOldStyleArray.swift +++ b/Sources/Foundation/NSKeyedCoderOldStyleArray.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation internal final class _NSKeyedCoderOldStyleArray : NSObject, NSCopying, NSSecureCoding, NSCoding { diff --git a/Sources/Foundation/NSKeyedUnarchiver.swift b/Sources/Foundation/NSKeyedUnarchiver.swift index cd2784d20f..0c76f3a61b 100644 --- a/Sources/Foundation/NSKeyedUnarchiver.swift +++ b/Sources/Foundation/NSKeyedUnarchiver.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation open class NSKeyedUnarchiver : NSCoder { enum InternalError: Error { diff --git a/Sources/Foundation/NSLocale.swift b/Sources/Foundation/NSLocale.swift index 5c3c33fa74..6d4215a12f 100644 --- a/Sources/Foundation/NSLocale.swift +++ b/Sources/Foundation/NSLocale.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_spi(SwiftCorelibsFoundation) @_exported import FoundationEssentials @_exported import FoundationInternationalization diff --git a/Sources/Foundation/NSLock.swift b/Sources/Foundation/NSLock.swift index a8866ae15b..fa56161caa 100644 --- a/Sources/Foundation/NSLock.swift +++ b/Sources/Foundation/NSLock.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #if canImport(Glibc) import Glibc diff --git a/Sources/Foundation/NSLog.swift b/Sources/Foundation/NSLog.swift index b1a8f568a5..ede48862b9 100644 --- a/Sources/Foundation/NSLog.swift +++ b/Sources/Foundation/NSLog.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation /* Output from NSLogv is serialized, in that only one thread in a process can be doing * the writing/logging described above at a time. All attempts at writing/logging a diff --git a/Sources/Foundation/NSNumber.swift b/Sources/Foundation/NSNumber.swift index cd55f0023a..82d4481a99 100644 --- a/Sources/Foundation/NSNumber.swift +++ b/Sources/Foundation/NSNumber.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_spi(SwiftCorelibsFoundation) @_exported import FoundationEssentials internal let kCFNumberSInt8Type = CFNumberType.sInt8Type diff --git a/Sources/Foundation/NSObjCRuntime.swift b/Sources/Foundation/NSObjCRuntime.swift index 25761b372c..ce75a1fcc2 100644 --- a/Sources/Foundation/NSObjCRuntime.swift +++ b/Sources/Foundation/NSObjCRuntime.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation internal let kCFCompareLessThan = CFComparisonResult.compareLessThan internal let kCFCompareEqualTo = CFComparisonResult.compareEqualTo diff --git a/Sources/Foundation/NSObject.swift b/Sources/Foundation/NSObject.swift index 8d65b88cac..a2bbd0b77d 100644 --- a/Sources/Foundation/NSObject.swift +++ b/Sources/Foundation/NSObject.swift @@ -14,7 +14,7 @@ @_exported import Dispatch #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation /// The `NSObjectProtocol` groups methods that are fundamental to all Foundation objects. /// diff --git a/Sources/Foundation/NSPathUtilities.swift b/Sources/Foundation/NSPathUtilities.swift index ee326d29ed..96c41c2816 100644 --- a/Sources/Foundation/NSPathUtilities.swift +++ b/Sources/Foundation/NSPathUtilities.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #if os(Windows) import WinSDK #elseif os(WASI) diff --git a/Sources/Foundation/NSRange.swift b/Sources/Foundation/NSRange.swift index 91ae61dd6c..3ec747b0db 100644 --- a/Sources/Foundation/NSRange.swift +++ b/Sources/Foundation/NSRange.swift @@ -9,7 +9,7 @@ #if DEPLOYMENT_RUNTIME_SWIFT -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation public struct _NSRange { public var location: Int diff --git a/Sources/Foundation/NSRegularExpression.swift b/Sources/Foundation/NSRegularExpression.swift index fc8a352540..24adba513a 100644 --- a/Sources/Foundation/NSRegularExpression.swift +++ b/Sources/Foundation/NSRegularExpression.swift @@ -10,7 +10,7 @@ /* NSRegularExpression is a class used to represent and apply regular expressions. An instance of this class is an immutable representation of a compiled regular expression pattern and various option flags. */ -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension NSRegularExpression { public struct Options : OptionSet { diff --git a/Sources/Foundation/NSSet.swift b/Sources/Foundation/NSSet.swift index 85bd2bcb95..7f2318d6de 100644 --- a/Sources/Foundation/NSSet.swift +++ b/Sources/Foundation/NSSet.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation open class NSSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCoding { private let _cfinfo = _CFInfo(typeID: CFSetGetTypeID()) diff --git a/Sources/Foundation/NSSortDescriptor.swift b/Sources/Foundation/NSSortDescriptor.swift index d99afe882a..03b52bd659 100644 --- a/Sources/Foundation/NSSortDescriptor.swift +++ b/Sources/Foundation/NSSortDescriptor.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation // In swift-corelibs-foundation, key-value coding is not available. Since encoding and decoding a NSSortDescriptor requires interpreting key paths, NSSortDescriptor does not conform to NSCoding or NSSecureCoding in swift-corelibs-foundation only. open class NSSortDescriptor: NSObject, NSCopying { diff --git a/Sources/Foundation/NSString.swift b/Sources/Foundation/NSString.swift index aabefdfecb..d0a1649690 100644 --- a/Sources/Foundation/NSString.swift +++ b/Sources/Foundation/NSString.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation public typealias unichar = UInt16 diff --git a/Sources/Foundation/NSSwiftRuntime.swift b/Sources/Foundation/NSSwiftRuntime.swift index 73042c84aa..6d1aa0d372 100644 --- a/Sources/Foundation/NSSwiftRuntime.swift +++ b/Sources/Foundation/NSSwiftRuntime.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation // Re-export Darwin and Glibc by importing Foundation // This mimics the behavior of the swift sdk overlay on Darwin diff --git a/Sources/Foundation/NSTextCheckingResult.swift b/Sources/Foundation/NSTextCheckingResult.swift index d03b969007..d55176dc78 100644 --- a/Sources/Foundation/NSTextCheckingResult.swift +++ b/Sources/Foundation/NSTextCheckingResult.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation /* NSTextCheckingType in this project is limited to regular expressions. */ extension NSTextCheckingResult { diff --git a/Sources/Foundation/NSTimeZone.swift b/Sources/Foundation/NSTimeZone.swift index 9a26a520f3..97480e96af 100644 --- a/Sources/Foundation/NSTimeZone.swift +++ b/Sources/Foundation/NSTimeZone.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_spi(SwiftCorelibsFoundation) @_exported import FoundationEssentials open class NSTimeZone : NSObject, NSCopying, NSSecureCoding, NSCoding { diff --git a/Sources/Foundation/NSURL.swift b/Sources/Foundation/NSURL.swift index def389037f..70cdd49886 100644 --- a/Sources/Foundation/NSURL.swift +++ b/Sources/Foundation/NSURL.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #if os(Windows) import WinSDK #endif diff --git a/Sources/Foundation/NSURLComponents.swift b/Sources/Foundation/NSURLComponents.swift index 470b9f3bc8..87583cd27e 100644 --- a/Sources/Foundation/NSURLComponents.swift +++ b/Sources/Foundation/NSURLComponents.swift @@ -7,7 +7,7 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation open class NSURLComponents: NSObject, NSCopying { diff --git a/Sources/Foundation/NSUUID.swift b/Sources/Foundation/NSUUID.swift index 722b32bdae..00acd6890f 100644 --- a/Sources/Foundation/NSUUID.swift +++ b/Sources/Foundation/NSUUID.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation open class NSUUID : NSObject, NSCopying, NSSecureCoding, NSCoding { internal var buffer = UnsafeMutablePointer.allocate(capacity: 16) diff --git a/Sources/Foundation/NotificationQueue.swift b/Sources/Foundation/NotificationQueue.swift index 2c0aa70d52..bf3e5d8e39 100644 --- a/Sources/Foundation/NotificationQueue.swift +++ b/Sources/Foundation/NotificationQueue.swift @@ -8,7 +8,7 @@ // #if canImport(Dispatch) -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension NotificationQueue { diff --git a/Sources/Foundation/NumberFormatter.swift b/Sources/Foundation/NumberFormatter.swift index 4754ce0d50..1fb0739cb4 100644 --- a/Sources/Foundation/NumberFormatter.swift +++ b/Sources/Foundation/NumberFormatter.swift @@ -7,7 +7,7 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension NumberFormatter { public enum Style : UInt { diff --git a/Sources/Foundation/Port.swift b/Sources/Foundation/Port.swift index 7ae84aaa35..c53263f0ef 100644 --- a/Sources/Foundation/Port.swift +++ b/Sources/Foundation/Port.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation // MARK: Port and related types diff --git a/Sources/Foundation/Process.swift b/Sources/Foundation/Process.swift index d6a5045400..0f32045e49 100644 --- a/Sources/Foundation/Process.swift +++ b/Sources/Foundation/Process.swift @@ -8,7 +8,7 @@ // #if canImport(Dispatch) -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #if os(Windows) import WinSDK import let WinSDK.HANDLE_FLAG_INHERIT diff --git a/Sources/Foundation/ProcessInfo.swift b/Sources/Foundation/ProcessInfo.swift index e7928d53cd..f023ff6291 100644 --- a/Sources/Foundation/ProcessInfo.swift +++ b/Sources/Foundation/ProcessInfo.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation // SPI for TestFoundation internal extension ProcessInfo { diff --git a/Sources/Foundation/PropertyListSerialization.swift b/Sources/Foundation/PropertyListSerialization.swift index 9cdb861057..a9cb8a46c3 100644 --- a/Sources/Foundation/PropertyListSerialization.swift +++ b/Sources/Foundation/PropertyListSerialization.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation let kCFPropertyListOpenStepFormat = CFPropertyListFormat.openStepFormat let kCFPropertyListXMLFormat_v1_0 = CFPropertyListFormat.xmlFormat_v1_0 diff --git a/Sources/Foundation/RunLoop.swift b/Sources/Foundation/RunLoop.swift index 1289cc19e0..af64bf31ec 100644 --- a/Sources/Foundation/RunLoop.swift +++ b/Sources/Foundation/RunLoop.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation internal let kCFRunLoopEntry = CFRunLoopActivity.entry.rawValue internal let kCFRunLoopBeforeTimers = CFRunLoopActivity.beforeTimers.rawValue diff --git a/Sources/Foundation/Set.swift b/Sources/Foundation/Set.swift index cad8bffff1..2a636eaa91 100644 --- a/Sources/Foundation/Set.swift +++ b/Sources/Foundation/Set.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension Set : _ObjectiveCBridgeable { public typealias _ObjectType = NSSet diff --git a/Sources/Foundation/Stream.swift b/Sources/Foundation/Stream.swift index 8ea494df62..3ea8a9d01f 100644 --- a/Sources/Foundation/Stream.swift +++ b/Sources/Foundation/Stream.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation internal extension UInt { init(_ status: CFStreamStatus) { diff --git a/Sources/Foundation/String.swift b/Sources/Foundation/String.swift index 898f24151c..e1f606e4d7 100644 --- a/Sources/Foundation/String.swift +++ b/Sources/Foundation/String.swift @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension String: _ObjectiveCBridgeable { diff --git a/Sources/Foundation/Thread.swift b/Sources/Foundation/Thread.swift index a59486ea59..166a5d3fe5 100644 --- a/Sources/Foundation/Thread.swift +++ b/Sources/Foundation/Thread.swift @@ -8,7 +8,7 @@ // #if canImport(Dispatch) -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #if os(Windows) import WinSDK #endif diff --git a/Sources/Foundation/Timer.swift b/Sources/Foundation/Timer.swift index f938507b43..83a3efa0de 100644 --- a/Sources/Foundation/Timer.swift +++ b/Sources/Foundation/Timer.swift @@ -8,7 +8,7 @@ // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation internal func __NSFireTimer(_ timer: CFRunLoopTimer?, info: UnsafeMutableRawPointer?) -> Void { let t: Timer = NSObject.unretainedReference(info!) diff --git a/Sources/Foundation/UserDefaults.swift b/Sources/Foundation/UserDefaults.swift index 78760690a8..23f035b6d6 100644 --- a/Sources/Foundation/UserDefaults.swift +++ b/Sources/Foundation/UserDefaults.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation private var registeredDefaults = [String: Any]() private var sharedDefaults = UserDefaults() diff --git a/Sources/FoundationNetworking/CMakeLists.txt b/Sources/FoundationNetworking/CMakeLists.txt new file mode 100644 index 0000000000..5b738175eb --- /dev/null +++ b/Sources/FoundationNetworking/CMakeLists.txt @@ -0,0 +1,63 @@ +##===----------------------------------------------------------------------===## +## +## This source file is part of the Swift open source project +## +## Copyright (c) 2024 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.md for the list of Swift project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +add_library(FoundationNetworking + Boxing.swift + DataURLProtocol.swift + HTTPCookie.swift + HTTPCookieStorage.swift + NSURLRequest.swift + URLAuthenticationChallenge.swift + URLCache.swift + URLCredential.swift + URLCredentialStorage.swift + URLProtectionSpace.swift + URLProtocol.swift + URLRequest.swift + URLResponse.swift + URLSession/BodySource.swift + URLSession/Configuration.swift + URLSession/FTP/FTPURLProtocol.swift + URLSession/HTTP/HTTPMessage.swift + URLSession/HTTP/HTTPURLProtocol.swift + URLSession/libcurl/EasyHandle.swift + URLSession/libcurl/libcurlHelpers.swift + URLSession/libcurl/MultiHandle.swift + URLSession/Message.swift + URLSession/NativeProtocol.swift + URLSession/NetworkingSpecific.swift + URLSession/TaskRegistry.swift + URLSession/TransferState.swift + URLSession/URLSession.swift + URLSession/URLSessionConfiguration.swift + URLSession/URLSessionDelegate.swift + URLSession/URLSessionTask.swift + URLSession/URLSessionTaskMetrics.swift + URLSession/WebSocket/WebSocketURLProtocol.swift) + +target_compile_options(FoundationNetworking PRIVATE + "SHELL:$<$:${_Foundation_swift_build_flags}>") + +target_link_libraries(FoundationNetworking + PRIVATE + CoreFoundation + _CFURLSessionInterface + PUBLIC + Foundation) + +set_target_properties(FoundationNetworking PROPERTIES + INSTALL_RPATH "$ORIGIN") + +set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS FoundationNetworking) +_foundation_install_target(FoundationNetworking) diff --git a/Sources/FoundationNetworking/HTTPCookieStorage.swift b/Sources/FoundationNetworking/HTTPCookieStorage.swift index 3f1fe53a86..3961d44cc3 100644 --- a/Sources/FoundationNetworking/HTTPCookieStorage.swift +++ b/Sources/FoundationNetworking/HTTPCookieStorage.swift @@ -13,7 +13,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation /*! @enum HTTPCookie.AcceptPolicy diff --git a/Sources/FoundationNetworking/URLSession/BodySource.swift b/Sources/FoundationNetworking/URLSession/BodySource.swift index 5a20839e24..e6e3f85c86 100644 --- a/Sources/FoundationNetworking/URLSession/BodySource.swift +++ b/Sources/FoundationNetworking/URLSession/BodySource.swift @@ -22,7 +22,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift b/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift index 95a093ed27..932600cbe2 100644 --- a/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift @@ -13,7 +13,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation import Dispatch internal class _FTPURLProtocol: _NativeProtocol { diff --git a/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift b/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift index 552d866cb5..cc2e7d7f9c 100644 --- a/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift +++ b/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift @@ -22,7 +22,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation internal extension _HTTPURLProtocol._ResponseHeaderLines { /// Create an `NSHTTPRULResponse` from the lines. diff --git a/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift b/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift index 098db66dc8..bf7e3f2b79 100644 --- a/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift @@ -13,7 +13,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/NativeProtocol.swift b/Sources/FoundationNetworking/URLSession/NativeProtocol.swift index aa25807add..95da2e9bdb 100644 --- a/Sources/FoundationNetworking/URLSession/NativeProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/NativeProtocol.swift @@ -23,7 +23,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation import Dispatch internal let enableLibcurlDebugOutput: Bool = { diff --git a/Sources/FoundationNetworking/URLSession/TaskRegistry.swift b/Sources/FoundationNetworking/URLSession/TaskRegistry.swift index 57ada5e045..3e958891dd 100644 --- a/Sources/FoundationNetworking/URLSession/TaskRegistry.swift +++ b/Sources/FoundationNetworking/URLSession/TaskRegistry.swift @@ -22,7 +22,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation import Dispatch extension URLSession { diff --git a/Sources/FoundationNetworking/URLSession/TransferState.swift b/Sources/FoundationNetworking/URLSession/TransferState.swift index b8fc07f7d8..b4142c24eb 100644 --- a/Sources/FoundationNetworking/URLSession/TransferState.swift +++ b/Sources/FoundationNetworking/URLSession/TransferState.swift @@ -22,7 +22,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation diff --git a/Sources/FoundationNetworking/URLSession/URLSession.swift b/Sources/FoundationNetworking/URLSession/URLSession.swift index 81d590c4e1..d01fc316c7 100644 --- a/Sources/FoundationNetworking/URLSession/URLSession.swift +++ b/Sources/FoundationNetworking/URLSession/URLSession.swift @@ -167,7 +167,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension URLSession { public enum DelayedRequestDisposition { diff --git a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift index 97054fe1e0..ea19743bd8 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift @@ -20,7 +20,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation private class Bag { var values: [Element] = [] diff --git a/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift b/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift index d13c393799..035a5d802b 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift @@ -20,7 +20,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation open class URLSessionTaskMetrics : NSObject { public internal(set) var transactionMetrics: [URLSessionTaskTransactionMetrics] = [] diff --git a/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift b/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift index f18fa71e12..9a7438d69f 100644 --- a/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift @@ -13,7 +13,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift index 671b694278..7848196d4f 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift @@ -23,7 +23,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift index 372836107f..248c354cd0 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift @@ -22,7 +22,7 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift b/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift index 08f7f50596..55460cfc22 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift @@ -17,7 +17,7 @@ // ----------------------------------------------------------------------------- -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_implementationOnly import _CFURLSessionInterface //TODO: Move things in this file? diff --git a/Sources/FoundationXML/CMakeLists.txt b/Sources/FoundationXML/CMakeLists.txt new file mode 100644 index 0000000000..f7477e33ce --- /dev/null +++ b/Sources/FoundationXML/CMakeLists.txt @@ -0,0 +1,38 @@ +##===----------------------------------------------------------------------===## +## +## This source file is part of the Swift open source project +## +## Copyright (c) 2024 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.md for the list of Swift project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +add_library(FoundationXML + CFAccess.swift + XMLDocument.swift + XMLDTD.swift + XMLDTDNode.swift + XMLElement.swift + XMLNode.swift + XMLParser.swift) + +target_compile_options(FoundationXML PRIVATE + "SHELL:$<$:${_Foundation_swift_build_flags}>") + +target_link_libraries(FoundationXML + PRIVATE + CoreFoundation + _CFXMLInterface + PUBLIC + Foundation) + +set_target_properties(FoundationXML PROPERTIES + INSTALL_RPATH "$ORIGIN") + +set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS FoundationXML) +_foundation_install_target(FoundationXML) diff --git a/Sources/FoundationXML/XMLDTD.swift b/Sources/FoundationXML/XMLDTD.swift index 52e571c48f..db18d25fb5 100644 --- a/Sources/FoundationXML/XMLDTD.swift +++ b/Sources/FoundationXML/XMLDTD.swift @@ -12,7 +12,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_implementationOnly import _CFXMLInterface /*! diff --git a/Sources/FoundationXML/XMLDTDNode.swift b/Sources/FoundationXML/XMLDTDNode.swift index e6afa6e718..f0d74cb20e 100644 --- a/Sources/FoundationXML/XMLDTDNode.swift +++ b/Sources/FoundationXML/XMLDTDNode.swift @@ -12,7 +12,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_implementationOnly import _CFXMLInterface /*! diff --git a/Sources/FoundationXML/XMLDocument.swift b/Sources/FoundationXML/XMLDocument.swift index 89f80f24dd..41d6ada04d 100644 --- a/Sources/FoundationXML/XMLDocument.swift +++ b/Sources/FoundationXML/XMLDocument.swift @@ -12,7 +12,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_implementationOnly import _CFXMLInterface // Input options diff --git a/Sources/FoundationXML/XMLElement.swift b/Sources/FoundationXML/XMLElement.swift index e9986a8700..448b769108 100644 --- a/Sources/FoundationXML/XMLElement.swift +++ b/Sources/FoundationXML/XMLElement.swift @@ -12,7 +12,7 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation @_implementationOnly import _CFXMLInterface /*! diff --git a/Sources/FoundationXML/XMLNode.swift b/Sources/FoundationXML/XMLNode.swift index b233459760..2735b2f3c1 100644 --- a/Sources/FoundationXML/XMLNode.swift +++ b/Sources/FoundationXML/XMLNode.swift @@ -15,7 +15,7 @@ import _CFXMLInterface import Foundation @_implementationOnly import _CFXMLInterface #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation // initWithKind options // NSXMLNodeOptionsNone diff --git a/Sources/FoundationXML/XMLParser.swift b/Sources/FoundationXML/XMLParser.swift index 9ee3827851..f41d56ce8f 100644 --- a/Sources/FoundationXML/XMLParser.swift +++ b/Sources/FoundationXML/XMLParser.swift @@ -14,7 +14,7 @@ import _CFXMLInterface import Foundation @_implementationOnly import _CFXMLInterface #endif -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation extension XMLParser { public enum ExternalEntityResolvingPolicy : UInt { diff --git a/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift b/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift index e6acc4a1c9..e1270394c9 100644 --- a/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift +++ b/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift @@ -11,7 +11,7 @@ // #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -@_implementationOnly import _CoreFoundation +@_implementationOnly import CoreFoundation #endif /// Events are reported to the waiter's delegate via these methods. XCTestCase conforms to this diff --git a/Sources/_CFURLSessionInterface/CMakeLists.txt b/Sources/_CFURLSessionInterface/CMakeLists.txt new file mode 100644 index 0000000000..09a6275fc1 --- /dev/null +++ b/Sources/_CFURLSessionInterface/CMakeLists.txt @@ -0,0 +1,35 @@ +##===----------------------------------------------------------------------===## +## +## This source file is part of the Swift open source project +## +## Copyright (c) 2024 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.md for the list of Swift project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +add_library(_CFURLSessionInterface STATIC CFURLSessionInterface.c) + +target_include_directories(_CFURLSessionInterface + PUBLIC + include + PRIVATE + ../CoreFoundation/internalInclude) + +target_precompile_headers(_CFURLSessionInterface PRIVATE ${CMAKE_SOURCE_DIR}/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h) + +target_compile_options(_CFURLSessionInterface PRIVATE + "SHELL:$<$:${_Foundation_common_build_flags}>") + +target_link_libraries(_CFURLSessionInterface PRIVATE + CoreFoundation + dispatch + CURL::libcurl) + +if(NOT BUILD_SHARED_LIBS) + set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS _CFURLSessionInterface) +endif() diff --git a/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h b/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h index b4bd5e2509..64c3495543 100644 --- a/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h +++ b/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h @@ -30,6 +30,7 @@ #include "CFTargetConditionals.h" #include "CFBase.h" #include +#include #if defined(_WIN32) #include #endif diff --git a/Sources/_CFURLSessionInterface/module.modulemap b/Sources/_CFURLSessionInterface/include/module.modulemap similarity index 61% rename from Sources/_CFURLSessionInterface/module.modulemap rename to Sources/_CFURLSessionInterface/include/module.modulemap index a832adcca2..c9be3e1eb7 100644 --- a/Sources/_CFURLSessionInterface/module.modulemap +++ b/Sources/_CFURLSessionInterface/include/module.modulemap @@ -1,4 +1,4 @@ -framework module _CFURLSessionInterface [extern_c] [system] { +module _CFURLSessionInterface { umbrella header "CFURLSessionInterface.h" export * diff --git a/Sources/_CFURLSessionInterface/static-module.map b/Sources/_CFURLSessionInterface/include/static-module.map similarity index 100% rename from Sources/_CFURLSessionInterface/static-module.map rename to Sources/_CFURLSessionInterface/include/static-module.map diff --git a/Sources/_CFURLSessionInterface/module.map b/Sources/_CFURLSessionInterface/module.map deleted file mode 100644 index b6d8887d19..0000000000 --- a/Sources/_CFURLSessionInterface/module.map +++ /dev/null @@ -1,3 +0,0 @@ -module _CFURLSessionInterface [extern_c] [system] { - umbrella header "CFURLSessionInterface.h" -} diff --git a/Sources/_CFXMLInterface/CMakeLists.txt b/Sources/_CFXMLInterface/CMakeLists.txt new file mode 100644 index 0000000000..03bcec15c7 --- /dev/null +++ b/Sources/_CFXMLInterface/CMakeLists.txt @@ -0,0 +1,34 @@ +##===----------------------------------------------------------------------===## +## +## This source file is part of the Swift open source project +## +## Copyright (c) 2024 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.md for the list of Swift project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +add_library(_CFXMLInterface STATIC CFXMLInterface.c) + +target_include_directories(_CFXMLInterface + PUBLIC + include + PRIVATE + ../CoreFoundation/internalInclude + /usr/include/libxml2/) + +target_compile_options(_CFXMLInterface PRIVATE + "SHELL:$<$:${_Foundation_common_build_flags}>") + +target_link_libraries(_CFXMLInterface PRIVATE + CoreFoundation + dispatch + LibXml2::LibXml2) + +if(NOT BUILD_SHARED_LIBS) + set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS _CFXMLInterface) +endif() diff --git a/Sources/_CFXMLInterface/include/CFXMLInterface.h b/Sources/_CFXMLInterface/include/CFXMLInterface.h index 31941e005b..b51004517e 100644 --- a/Sources/_CFXMLInterface/include/CFXMLInterface.h +++ b/Sources/_CFXMLInterface/include/CFXMLInterface.h @@ -16,6 +16,7 @@ #include "CFTargetConditionals.h" #include "CFBase.h" +#include "CFError.h" #include #include #include diff --git a/Sources/_CFXMLInterface/module.modulemap b/Sources/_CFXMLInterface/include/module.modulemap similarity index 62% rename from Sources/_CFXMLInterface/module.modulemap rename to Sources/_CFXMLInterface/include/module.modulemap index 35e9bb7969..983ef3b329 100644 --- a/Sources/_CFXMLInterface/module.modulemap +++ b/Sources/_CFXMLInterface/include/module.modulemap @@ -1,4 +1,4 @@ -framework module _CFXMLInterface [extern_c] [system] { +module _CFXMLInterface { umbrella header "CFXMLInterface.h" export * diff --git a/Sources/_CFXMLInterface/static-module.map b/Sources/_CFXMLInterface/include/static-module.map similarity index 100% rename from Sources/_CFXMLInterface/static-module.map rename to Sources/_CFXMLInterface/include/static-module.map diff --git a/Sources/_CFXMLInterface/module.map b/Sources/_CFXMLInterface/module.map deleted file mode 100644 index c64502b592..0000000000 --- a/Sources/_CFXMLInterface/module.map +++ /dev/null @@ -1,3 +0,0 @@ -module _CFXMLInterface [extern_c] [system] { - umbrella header "CFXMLInterface.h" -} diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt new file mode 100644 index 0000000000..ff8a0222e5 --- /dev/null +++ b/cmake/modules/CMakeLists.txt @@ -0,0 +1,26 @@ +##===----------------------------------------------------------------------===## +## +## This source file is part of the Swift open source project +## +## Copyright (c) 2024 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.md for the list of Swift project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +set(Foundation_EXPORTS_FILE ${CMAKE_CURRENT_BINARY_DIR}/FoundationExports.cmake) +set(SwiftFoundation_EXPORTS_FILE ${SwiftFoundation_BINARY_DIR}/cmake/modules/SwiftFoundationExports.cmake) +set(SwiftFoundationICU_EXPORTS_FILE ${SwiftFoundationICU_BINARY_DIR}/cmake/modules/SwiftFoundationICUExports.cmake) +set(SwiftCollections_EXPORTS_FILE ${SwiftCollections_BINARY_DIR}/cmake/modules/SwiftCollectionsExports.cmake) + +configure_file(FoundationConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/FoundationConfig.cmake) + +get_property(Foundation_EXPORTS GLOBAL PROPERTY Foundation_EXPORTS) +export(TARGETS ${Foundation_EXPORTS} + FILE ${Foundation_EXPORTS_FILE} + EXPORT_LINK_INTERFACE_LIBRARIES) diff --git a/cmake/modules/FoundationConfig.cmake.in b/cmake/modules/FoundationConfig.cmake.in new file mode 100644 index 0000000000..15cc666fdc --- /dev/null +++ b/cmake/modules/FoundationConfig.cmake.in @@ -0,0 +1,20 @@ +##===----------------------------------------------------------------------===## +## +## This source file is part of the Swift open source project +## +## Copyright (c) 2024 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.md for the list of Swift project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +if(NOT TARGET Foundation) + include(@SwiftCollections_EXPORTS_FILE@) + include(@SwiftFoundationICU_EXPORTS_FILE@) + include(@SwiftFoundation_EXPORTS_FILE@) + include(@Foundation_EXPORTS_FILE@) +endif() diff --git a/cmake/modules/FoundationSwiftSupport.cmake b/cmake/modules/FoundationSwiftSupport.cmake new file mode 100644 index 0000000000..85868392f0 --- /dev/null +++ b/cmake/modules/FoundationSwiftSupport.cmake @@ -0,0 +1,45 @@ +##===----------------------------------------------------------------------===## +## +## This source file is part of the Swift open source project +## +## Copyright (c) 2024 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.md for the list of Swift project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +function(_foundation_install_target module) + set(swift_os ${SWIFT_SYSTEM_NAME}) + get_target_property(type ${module} TYPE) + + if(type STREQUAL STATIC_LIBRARY) + set(swift swift_static) + else() + set(swift swift) + endif() + + install(TARGETS ${module} + ARCHIVE DESTINATION lib/${swift}/${swift_os} + LIBRARY DESTINATION lib/${swift}/${swift_os} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + if(type STREQUAL EXECUTABLE) + return() + endif() + + get_target_property(module_name ${module} Swift_MODULE_NAME) + if(NOT module_name) + set(module_name ${module}) + endif() + + install(FILES $/${module_name}.swiftdoc + DESTINATION lib/${swift}/${swift_os}/${module_name}.swiftmodule + RENAME ${SwiftFoundation_MODULE_TRIPLE}.swiftdoc) + install(FILES $/${module_name}.swiftmodule + DESTINATION lib/${swift}/${swift_os}/${module_name}.swiftmodule + RENAME ${SwiftFoundation_MODULE_TRIPLE}.swiftmodule) + +endfunction() From f4f5d7c1cdbcf6fa467927b968d160bd6920dfb1 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Fri, 21 Jun 2024 09:36:53 -0700 Subject: [PATCH 080/198] Various fixes to support building within the toolchain (#4985) * Add -Wno-int-conversion and -fPIC * Move block runtime sources into separate ignored folder * Install private static libs in static swift build * Don't include stdlib toolchain rpath * Autolink static libraries in static swift build * Bump WINVER/_WIN32_WINNT to Windows 10 * Repair package manifest --- CMakeLists.txt | 3 ++ Package.swift | 44 ++++++++++--------- .../CoreFoundation/{ => BlockRuntime}/data.c | 0 .../include}/Block.h | 0 .../include}/Block_private.h | 0 .../{ => BlockRuntime}/runtime.c | 0 Sources/CoreFoundation/CMakeLists.txt | 9 +++- .../internalInclude/CoreFoundation_Prefix.h | 4 +- Sources/Foundation/CMakeLists.txt | 10 +++++ Sources/FoundationNetworking/CMakeLists.txt | 12 +++++ Sources/FoundationXML/CMakeLists.txt | 12 +++++ Sources/_CFURLSessionInterface/CMakeLists.txt | 4 ++ Sources/_CFXMLInterface/CMakeLists.txt | 4 ++ 13 files changed, 77 insertions(+), 25 deletions(-) rename Sources/CoreFoundation/{ => BlockRuntime}/data.c (100%) rename Sources/CoreFoundation/{internalInclude => BlockRuntime/include}/Block.h (100%) rename Sources/CoreFoundation/{internalInclude => BlockRuntime/include}/Block_private.h (100%) rename Sources/CoreFoundation/{ => BlockRuntime}/runtime.c (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d6164e5f5..45faa45826 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,6 +46,8 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift) +set(CMAKE_POSITION_INDEPENDENT_CODE YES) + # Fetchable dependcies include(FetchContent) if (_SwiftFoundationICU_SourceDIR) @@ -98,6 +100,7 @@ list(APPEND _Foundation_common_build_flags "-Wno-unused-variable" "-Wno-unused-function" "-Wno-microsoft-enum-forward-reference" + "-Wno-int-conversion" "-fconstant-cfstrings" "-fexceptions" # TODO: not on OpenBSD "-fdollars-in-identifiers" diff --git a/Package.swift b/Package.swift index e31b1f1a18..1c34ce2981 100644 --- a/Package.swift +++ b/Package.swift @@ -20,6 +20,7 @@ let coreFoundationBuildSettings: [CSetting] = [ "-Wno-unused-variable", "-Wno-unused-function", "-Wno-microsoft-enum-forward-reference", + "-Wno-int-conversion", "-fconstant-cfstrings", "-fexceptions", // TODO: not on OpenBSD "-fdollars-in-identifiers", @@ -29,13 +30,12 @@ let coreFoundationBuildSettings: [CSetting] = [ "\(Context.packageDirectory)/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h", // /EHsc for Windows ]), - .unsafeFlags(["-I/usr/lib/swift"], .when(platforms: [.linux, .android])) // dispatch + .unsafeFlags(["-I/usr/lib/swift/Block"], .when(platforms: [.linux, .android])) // dispatch ] // For _CFURLSessionInterface, _CFXMLInterface let interfaceBuildSettings: [CSetting] = [ .headerSearchPath("../CoreFoundation/internalInclude"), - .headerSearchPath("../CoreFoundation/include"), .define("DEBUG", .when(configuration: .debug)), .define("CF_BUILDING_CF"), .define("DEPLOYMENT_ENABLE_LIBDISPATCH"), @@ -50,6 +50,7 @@ let interfaceBuildSettings: [CSetting] = [ "-Wno-unused-variable", "-Wno-unused-function", "-Wno-microsoft-enum-forward-reference", + "-Wno-int-conversion", "-fconstant-cfstrings", "-fexceptions", // TODO: not on OpenBSD "-fdollars-in-identifiers", @@ -57,7 +58,7 @@ let interfaceBuildSettings: [CSetting] = [ "-fcf-runtime-abi=swift" // /EHsc for Windows ]), - .unsafeFlags(["-I/usr/lib/swift"], .when(platforms: [.linux, .android])) // dispatch + .unsafeFlags(["-I/usr/lib/swift/Block"], .when(platforms: [.linux, .android])) // dispatch ] let swiftBuildSettings: [SwiftSetting] = [ @@ -78,11 +79,11 @@ let package = Package( dependencies: [ .package( url: "https://github.com/apple/swift-foundation-icu", - from: "0.0.7" + from: "0.0.8" ), .package( url: "https://github.com/apple/swift-foundation", - revision: "3297fb33b49ba2d1161ba12757891c7b91c73a3e" + revision: "ef8a7787c355edae3c142e4dff8767d05a32c51f" ), ], targets: [ @@ -91,7 +92,7 @@ let package = Package( dependencies: [ .product(name: "FoundationEssentials", package: "swift-foundation"), .product(name: "FoundationInternationalization", package: "swift-foundation"), - "_CoreFoundation" + "CoreFoundation" ], path: "Sources/Foundation", swiftSettings: swiftBuildSettings @@ -100,8 +101,8 @@ let package = Package( name: "FoundationXML", dependencies: [ .product(name: "FoundationEssentials", package: "swift-foundation"), - .targetItem(name: "Foundation", condition: nil), - "_CoreFoundation", + "Foundation", + "CoreFoundation", "_CFXMLInterface" ], path: "Sources/FoundationXML", @@ -111,25 +112,26 @@ let package = Package( name: "FoundationNetworking", dependencies: [ .product(name: "FoundationEssentials", package: "swift-foundation"), - .targetItem(name: "Foundation", condition: nil), - "_CoreFoundation", + "Foundation", + "CoreFoundation", "_CFURLSessionInterface" ], path: "Sources/FoundationNetworking", swiftSettings:swiftBuildSettings ), .target( - name: "_CoreFoundation", + name: "CoreFoundation", dependencies: [ .product(name: "_FoundationICU", package: "swift-foundation-icu"), ], path: "Sources/CoreFoundation", + exclude: ["BlockRuntime"], cSettings: coreFoundationBuildSettings ), .target( name: "_CFXMLInterface", dependencies: [ - "_CoreFoundation", + "CoreFoundation", "Clibxml2", ], path: "Sources/_CFXMLInterface", @@ -138,7 +140,7 @@ let package = Package( .target( name: "_CFURLSessionInterface", dependencies: [ - "_CoreFoundation", + "CoreFoundation", "Clibcurl", ], path: "Sources/_CFURLSessionInterface", @@ -163,15 +165,15 @@ let package = Package( .executableTarget( name: "plutil", dependencies: [ - .targetItem(name: "Foundation", condition: nil) + "Foundation" ] ), .executableTarget( name: "xdgTestHelper", dependencies: [ - .targetItem(name: "Foundation", condition: nil), - .targetItem(name: "FoundationXML", condition: nil), - .targetItem(name: "FoundationNetworking", condition: nil) + "Foundation", + "FoundationXML", + "FoundationNetworking" ] ), .target( @@ -181,16 +183,16 @@ let package = Package( // We believe Foundation is the only project that needs to take this rather drastic measure. name: "XCTest", dependencies: [ - .targetItem(name: "Foundation", condition: nil) + "Foundation" ], path: "Sources/XCTest" ), .testTarget( name: "TestFoundation", dependencies: [ - .targetItem(name: "Foundation", condition: nil), - .targetItem(name: "FoundationXML", condition: nil), - .targetItem(name: "FoundationNetworking", condition: nil), + "Foundation", + "FoundationXML", + "FoundationNetworking", .targetItem(name: "XCTest", condition: .when(platforms: [.linux])), "xdgTestHelper" ], diff --git a/Sources/CoreFoundation/data.c b/Sources/CoreFoundation/BlockRuntime/data.c similarity index 100% rename from Sources/CoreFoundation/data.c rename to Sources/CoreFoundation/BlockRuntime/data.c diff --git a/Sources/CoreFoundation/internalInclude/Block.h b/Sources/CoreFoundation/BlockRuntime/include/Block.h similarity index 100% rename from Sources/CoreFoundation/internalInclude/Block.h rename to Sources/CoreFoundation/BlockRuntime/include/Block.h diff --git a/Sources/CoreFoundation/internalInclude/Block_private.h b/Sources/CoreFoundation/BlockRuntime/include/Block_private.h similarity index 100% rename from Sources/CoreFoundation/internalInclude/Block_private.h rename to Sources/CoreFoundation/BlockRuntime/include/Block_private.h diff --git a/Sources/CoreFoundation/runtime.c b/Sources/CoreFoundation/BlockRuntime/runtime.c similarity index 100% rename from Sources/CoreFoundation/runtime.c rename to Sources/CoreFoundation/BlockRuntime/runtime.c diff --git a/Sources/CoreFoundation/CMakeLists.txt b/Sources/CoreFoundation/CMakeLists.txt index b5e62d7943..5090f4bc6a 100644 --- a/Sources/CoreFoundation/CMakeLists.txt +++ b/Sources/CoreFoundation/CMakeLists.txt @@ -97,8 +97,6 @@ add_library(CoreFoundation STATIC CFUUID.c CFWindowsUtilities.c CFXMLPreferencesDomain.c - data.c - runtime.c uuid.c) target_include_directories(CoreFoundation @@ -123,3 +121,10 @@ install(DIRECTORY include/ DESTINATION lib/swift/CoreFoundation) + +if(NOT BUILD_SHARED_LIBS) + install(TARGETS CoreFoundation + ARCHIVE DESTINATION lib/swift_static/${SWIFT_SYSTEM_NAME} + LIBRARY DESTINATION lib/swift_static/${SWIFT_SYSTEM_NAME} + RUNTIME DESTINATION bin) +endif() diff --git a/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h index 2c41d2861f..9ef8f64a6c 100644 --- a/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h +++ b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h @@ -119,11 +119,11 @@ typedef char * Class; #define WIN32_LEAN_AND_MEAN #ifndef WINVER -#define WINVER 0x0601 +#define WINVER 0x0A00 #endif #ifndef _WIN32_WINNT -#define _WIN32_WINNT 0x0601 +#define _WIN32_WINNT 0x0A00 #endif // The order of these includes is important diff --git a/Sources/Foundation/CMakeLists.txt b/Sources/Foundation/CMakeLists.txt index ea2fd38d6b..470364a0a2 100644 --- a/Sources/Foundation/CMakeLists.txt +++ b/Sources/Foundation/CMakeLists.txt @@ -155,6 +155,16 @@ target_link_libraries(Foundation FoundationEssentials FoundationInternationalization) +if(NOT BUILD_SHARED_LIBS) + target_compile_options(Foundation PRIVATE + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend CoreFoundation>") + target_compile_options(Foundation PRIVATE + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend _FoundationICU>") +endif() + +target_link_options(Foundation PRIVATE + "SHELL:-no-toolchain-stdlib-rpath") + set_target_properties(Foundation PROPERTIES INSTALL_RPATH "$ORIGIN" BUILD_RPATH "$") diff --git a/Sources/FoundationNetworking/CMakeLists.txt b/Sources/FoundationNetworking/CMakeLists.txt index 5b738175eb..33d6872ae7 100644 --- a/Sources/FoundationNetworking/CMakeLists.txt +++ b/Sources/FoundationNetworking/CMakeLists.txt @@ -56,6 +56,18 @@ target_link_libraries(FoundationNetworking PUBLIC Foundation) +if(NOT BUILD_SHARED_LIBS) + target_compile_options(FoundationNetworking PRIVATE + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend _CFURLSessionInterface>") + target_compile_options(FoundationNetworking PRIVATE + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend CoreFoundation>") + target_compile_options(FoundationNetworking PRIVATE + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend curl>") +endif() + +target_link_options(FoundationNetworking PRIVATE + "SHELL:-no-toolchain-stdlib-rpath") + set_target_properties(FoundationNetworking PROPERTIES INSTALL_RPATH "$ORIGIN") diff --git a/Sources/FoundationXML/CMakeLists.txt b/Sources/FoundationXML/CMakeLists.txt index f7477e33ce..e27bd67308 100644 --- a/Sources/FoundationXML/CMakeLists.txt +++ b/Sources/FoundationXML/CMakeLists.txt @@ -31,6 +31,18 @@ target_link_libraries(FoundationXML PUBLIC Foundation) +if(NOT BUILD_SHARED_LIBS) + target_compile_options(FoundationXML PRIVATE + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend _CFXMLInterface>") + target_compile_options(FoundationXML PRIVATE + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend CoreFoundation>") + target_compile_options(FoundationXML PRIVATE + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend xml2>") +endif() + +target_link_options(FoundationXML PRIVATE + "SHELL:-no-toolchain-stdlib-rpath") + set_target_properties(FoundationXML PROPERTIES INSTALL_RPATH "$ORIGIN") diff --git a/Sources/_CFURLSessionInterface/CMakeLists.txt b/Sources/_CFURLSessionInterface/CMakeLists.txt index 09a6275fc1..d3a1b1b67f 100644 --- a/Sources/_CFURLSessionInterface/CMakeLists.txt +++ b/Sources/_CFURLSessionInterface/CMakeLists.txt @@ -32,4 +32,8 @@ target_link_libraries(_CFURLSessionInterface PRIVATE if(NOT BUILD_SHARED_LIBS) set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS _CFURLSessionInterface) + install(TARGETS _CFURLSessionInterface + ARCHIVE DESTINATION lib/swift_static/${SWIFT_SYSTEM_NAME} + LIBRARY DESTINATION lib/swift_static/${SWIFT_SYSTEM_NAME} + RUNTIME DESTINATION bin) endif() diff --git a/Sources/_CFXMLInterface/CMakeLists.txt b/Sources/_CFXMLInterface/CMakeLists.txt index 03bcec15c7..45085aadd5 100644 --- a/Sources/_CFXMLInterface/CMakeLists.txt +++ b/Sources/_CFXMLInterface/CMakeLists.txt @@ -31,4 +31,8 @@ target_link_libraries(_CFXMLInterface PRIVATE if(NOT BUILD_SHARED_LIBS) set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS _CFXMLInterface) + install(TARGETS _CFXMLInterface + ARCHIVE DESTINATION lib/swift_static/${SWIFT_SYSTEM_NAME} + LIBRARY DESTINATION lib/swift_static/${SWIFT_SYSTEM_NAME} + RUNTIME DESTINATION bin) endif() From 67eb5cb406c55d83f450778a91d003cd6d6d71a8 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Fri, 21 Jun 2024 09:51:04 -0700 Subject: [PATCH 081/198] Add SWIFTCI_USE_LOCAL_DEPS build mode (#4986) --- Package.swift | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/Package.swift b/Package.swift index 1c34ce2981..f4eda32359 100644 --- a/Package.swift +++ b/Package.swift @@ -66,6 +66,28 @@ let swiftBuildSettings: [SwiftSetting] = [ .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS"), ] +var dependencies: [Package.Dependency] { + if Context.environment["SWIFTCI_USE_LOCAL_DEPS"] != nil { + [ + .package( + name: "swift-foundation-icu", + path: "../swift-foundation-icu"), + .package( + name: "swift-foundation", + path: "../swift-foundation") + ] + } else { + [ + .package( + url: "https://github.com/apple/swift-foundation-icu", + from: "0.0.8"), + .package( + url: "https://github.com/apple/swift-foundation", + revision: "ef8a7787c355edae3c142e4dff8767d05a32c51f") + ] + } +} + let package = Package( name: "swift-corelibs-foundation", // Deployment target note: This package only builds for non-Darwin targets. @@ -76,16 +98,7 @@ let package = Package( .library(name: "FoundationNetworking", targets: ["FoundationNetworking"]), .executable(name: "plutil", targets: ["plutil"]), ], - dependencies: [ - .package( - url: "https://github.com/apple/swift-foundation-icu", - from: "0.0.8" - ), - .package( - url: "https://github.com/apple/swift-foundation", - revision: "ef8a7787c355edae3c142e4dff8767d05a32c51f" - ), - ], + dependencies: dependencies, targets: [ .target( name: "Foundation", From 1181ecb6636ddb082b5aeacbc2225900b10f97f0 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Mon, 24 Jun 2024 09:41:59 -0700 Subject: [PATCH 082/198] [CMake] Add plutil to CMake build (#4987) * Add plutil to CMake build * Address review comments --- CMakeLists.txt | 5 +++++ Sources/CMakeLists.txt | 3 +++ Sources/plutil/CMakeLists.txt | 29 +++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 Sources/plutil/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 45faa45826..62b22af84d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,6 +46,11 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift) +# Optionally build tools (on by default) but only when building shared libraries +if(BUILD_SHARED_LIBS) + option(FOUNDATION_BUILD_TOOLS "build tools" ON) +endif() + set(CMAKE_POSITION_INDEPENDENT_CODE YES) # Fetchable dependcies diff --git a/Sources/CMakeLists.txt b/Sources/CMakeLists.txt index 457edf4d2b..0ee266a4bc 100644 --- a/Sources/CMakeLists.txt +++ b/Sources/CMakeLists.txt @@ -18,3 +18,6 @@ add_subdirectory(_CFURLSessionInterface) add_subdirectory(Foundation) add_subdirectory(FoundationXML) add_subdirectory(FoundationNetworking) +if(FOUNDATION_BUILD_TOOLS) + add_subdirectory(plutil) +endif() diff --git a/Sources/plutil/CMakeLists.txt b/Sources/plutil/CMakeLists.txt new file mode 100644 index 0000000000..a6795e6894 --- /dev/null +++ b/Sources/plutil/CMakeLists.txt @@ -0,0 +1,29 @@ +##===----------------------------------------------------------------------===## +## +## This source file is part of the Swift open source project +## +## Copyright (c) 2024 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.md for the list of Swift project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +add_executable(plutil + main.swift) + +target_link_libraries(plutil PRIVATE + Foundation) + +target_link_options(plutil PRIVATE + "SHELL:-no-toolchain-stdlib-rpath") + +set_target_properties(plutil PROPERTIES + INSTALL_RPATH "$ORIGIN/../lib/swift/${SWIFT_SYSTEM_NAME}") + +set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS plutil) +install(TARGETS plutil + DESTINATION ${CMAKE_INSTALL_BINDIR}) From 27ae56576af908c98f40fc51f8c25aa38688c86d Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Mon, 24 Jun 2024 16:57:11 -0700 Subject: [PATCH 083/198] [CMake] Copy headers to known directory for direct client test builds (#4989) --- Sources/CoreFoundation/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Sources/CoreFoundation/CMakeLists.txt b/Sources/CoreFoundation/CMakeLists.txt index 5090f4bc6a..23586ad73d 100644 --- a/Sources/CoreFoundation/CMakeLists.txt +++ b/Sources/CoreFoundation/CMakeLists.txt @@ -117,6 +117,12 @@ target_link_libraries(CoreFoundation set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS CoreFoundation) +# Copy Headers to known directory for direct client (XCTest) test builds +file(COPY + include/ + DESTINATION + ${CMAKE_BINARY_DIR}/_CModulesForClients/CoreFoundation) + install(DIRECTORY include/ DESTINATION From f28f4bef4853f4e1259b4e90507cf0cb6ba0d47b Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Wed, 26 Jun 2024 16:36:54 -0700 Subject: [PATCH 084/198] Remove Codable.swift (#4993) --- Sources/Foundation/CMakeLists.txt | 1 - Sources/Foundation/Codable.swift | 59 ------------------------------- 2 files changed, 60 deletions(-) delete mode 100644 Sources/Foundation/Codable.swift diff --git a/Sources/Foundation/CMakeLists.txt b/Sources/Foundation/CMakeLists.txt index 470364a0a2..b591310cda 100644 --- a/Sources/Foundation/CMakeLists.txt +++ b/Sources/Foundation/CMakeLists.txt @@ -21,7 +21,6 @@ add_library(Foundation ByteCountFormatter.swift CGFloat.swift CharacterSet.swift - Codable.swift DateComponents.swift DateComponentsFormatter.swift DateFormatter.swift diff --git a/Sources/Foundation/Codable.swift b/Sources/Foundation/Codable.swift deleted file mode 100644 index 4976f52655..0000000000 --- a/Sources/Foundation/Codable.swift +++ /dev/null @@ -1,59 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -// Errors -//===----------------------------------------------------------------------===// - -// Both of these error types bridge to NSError, and through the entry points they use, no further work is needed to make them localized. -extension EncodingError : LocalizedError {} -extension DecodingError : LocalizedError {} - -//===----------------------------------------------------------------------===// -// Error Utilities -//===----------------------------------------------------------------------===// - -extension DecodingError { - /// Returns a `.typeMismatch` error describing the expected type. - /// - /// - parameter path: The path of `CodingKey`s taken to decode a value of this type. - /// - parameter expectation: The type expected to be encountered. - /// - parameter reality: The value that was encountered instead of the expected type. - /// - returns: A `DecodingError` with the appropriate path and debug description. - internal static func _typeMismatch(at path: [CodingKey], expectation: Any.Type, reality: Any) -> DecodingError { - let description = "Expected to decode \(expectation) but found \(_typeDescription(of: reality)) instead." - return .typeMismatch(expectation, Context(codingPath: path, debugDescription: description)) - } - - /// Returns a description of the type of `value` appropriate for an error message. - /// - /// - parameter value: The value whose type to describe. - /// - returns: A string describing `value`. - /// - precondition: `value` is one of the types below. - fileprivate static func _typeDescription(of value: Any) -> String { - switch value { - case is NSNull: - return "a null value" - case is NSNumber: /* FIXME: If swift-corelibs-foundation isn't updated to use NSNumber, this check will be necessary: || value is Int || value is Double */ - return "a number" - case is String: - return "a string/data" - case is [Any]: - return "an array" - case is [String : Any]: - return "a dictionary" - default: - return "\(type(of: value))" - } - } -} - From f186ff8801cf2ec5e5e530d08207dd17375e1cbb Mon Sep 17 00:00:00 2001 From: Alastair Houghton Date: Thu, 27 Jun 2024 23:54:02 +0100 Subject: [PATCH 085/198] [Linux] Enable build-ids. (#4995) We should use build IDs on Linux so that we can identify the built artefacts, and also so that we can match them up with debug information should we choose to separate it. rdar://130582768 --- CMakeLists.txt | 4 ++++ Sources/Foundation/CMakeLists.txt | 4 ++++ Sources/FoundationNetworking/CMakeLists.txt | 4 ++++ Sources/FoundationXML/CMakeLists.txt | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 62b22af84d..6c59d13120 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,6 +74,10 @@ else() endif() FetchContent_MakeAvailable(SwiftFoundationICU SwiftFoundation) +include(CheckLinkerFlag) + +check_linker_flag(C "LINKER:--build-id=sha1" LINKER_SUPPORTS_BUILD_ID) + # Precompute module triple for installation if(NOT SwiftFoundation_MODULE_TRIPLE) set(module_triple_command "${CMAKE_Swift_COMPILER}" -print-target-info) diff --git a/Sources/Foundation/CMakeLists.txt b/Sources/Foundation/CMakeLists.txt index b591310cda..d382f15c94 100644 --- a/Sources/Foundation/CMakeLists.txt +++ b/Sources/Foundation/CMakeLists.txt @@ -171,5 +171,9 @@ set_target_properties(Foundation PROPERTIES target_link_libraries(Foundation PUBLIC swiftDispatch) +if(LINKER_SUPPORTS_BUILD_ID) + target_link_options(Foundation PRIVATE "LINKER:--build-id=sha1") +endif() + set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS Foundation) _foundation_install_target(Foundation) diff --git a/Sources/FoundationNetworking/CMakeLists.txt b/Sources/FoundationNetworking/CMakeLists.txt index 33d6872ae7..75c8505060 100644 --- a/Sources/FoundationNetworking/CMakeLists.txt +++ b/Sources/FoundationNetworking/CMakeLists.txt @@ -71,5 +71,9 @@ target_link_options(FoundationNetworking PRIVATE set_target_properties(FoundationNetworking PROPERTIES INSTALL_RPATH "$ORIGIN") +if(LINKER_SUPPORTS_BUILD_ID) + target_link_options(FoundationNetworking PRIVATE "LINKER:--build-id=sha1") +endif() + set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS FoundationNetworking) _foundation_install_target(FoundationNetworking) diff --git a/Sources/FoundationXML/CMakeLists.txt b/Sources/FoundationXML/CMakeLists.txt index e27bd67308..9640298a71 100644 --- a/Sources/FoundationXML/CMakeLists.txt +++ b/Sources/FoundationXML/CMakeLists.txt @@ -46,5 +46,9 @@ target_link_options(FoundationXML PRIVATE set_target_properties(FoundationXML PROPERTIES INSTALL_RPATH "$ORIGIN") +if(LINKER_SUPPORTS_BUILD_ID) + target_link_options(FoundationXML PRIVATE "LINKER:--build-id=sha1") +endif() + set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS FoundationXML) _foundation_install_target(FoundationXML) From f1c66e0c8551687dbd85544f43e2c5f49c30f766 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Fri, 28 Jun 2024 09:55:06 -0700 Subject: [PATCH 086/198] [CMake] Fix Windows Build (#4991) * Various fixes to allow for building on Windows * Enable shared libraries by default * Resolve Windows compiler flag warnings and fix constant string symbols --- CMakeLists.txt | 21 +++++++++++++++---- Sources/CoreFoundation/include/CFRunLoop.h | 2 ++ Sources/CoreFoundation/include/CFString.h | 2 +- .../include/ForSwiftFoundationOnly.h | 5 +++++ .../CoreFoundation/include/module.modulemap | 1 - .../internalInclude/CFInternal.h | 2 +- Sources/Foundation/FileManager+Win32.swift | 2 +- Sources/Foundation/FileManager.swift | 8 ++++--- Sources/Foundation/NSUUID.swift | 8 +++---- 9 files changed, 36 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c59d13120..a289e6267f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,6 +46,8 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift) +option(BUILD_SHARED_LIBS "build shared libraries" ON) + # Optionally build tools (on by default) but only when building shared libraries if(BUILD_SHARED_LIBS) option(FOUNDATION_BUILD_TOOLS "build tools" ON) @@ -110,13 +112,24 @@ list(APPEND _Foundation_common_build_flags "-Wno-unused-function" "-Wno-microsoft-enum-forward-reference" "-Wno-int-conversion" - "-fconstant-cfstrings" - "-fexceptions" # TODO: not on OpenBSD - "-fdollars-in-identifiers" - "-fno-common" "-fcf-runtime-abi=swift" "-fblocks") +if(NOT "${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC") + list(APPEND _Foundation_common_build_flags + "-fconstant-cfstrings" + "-fdollars-in-identifiers" + "-fno-common") + + if(NOT CMAKE_SYSTEM_NAME STREQUAL OpenBSD) + list(APPEND _Foundation_common_build_flags + "-fexceptions") + endif() +else() + list(APPEND _Foundation_common_build_flags + "/EHsc") +endif() + if(CMAKE_BUILD_TYPE STREQUAL Debug) list(APPEND _Foundation_common_build_flags "-DDEBUG") diff --git a/Sources/CoreFoundation/include/CFRunLoop.h b/Sources/CoreFoundation/include/CFRunLoop.h index e3cf929e8b..86447f20c4 100644 --- a/Sources/CoreFoundation/include/CFRunLoop.h +++ b/Sources/CoreFoundation/include/CFRunLoop.h @@ -16,6 +16,8 @@ #include "CFString.h" #if TARGET_OS_OSX || TARGET_OS_IPHONE #include +#elif TARGET_OS_WIN32 +#include #endif CF_IMPLICIT_BRIDGING_ENABLED diff --git a/Sources/CoreFoundation/include/CFString.h b/Sources/CoreFoundation/include/CFString.h index 03b56abb64..56fc02b694 100644 --- a/Sources/CoreFoundation/include/CFString.h +++ b/Sources/CoreFoundation/include/CFString.h @@ -160,7 +160,7 @@ since it is the default choice with Mac OS X developer tools. CF_EXPORT void *_CF_CONSTANT_STRING_SWIFT_CLASS[]; #endif -#if DEPLOYMENT_RUNTIME_SWIFT && TARGET_OS_MAC +#if DEPLOYMENT_RUNTIME_SWIFT struct __CFConstStr { struct { diff --git a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h index f60cb44f4a..2a847e6c1f 100644 --- a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h @@ -517,7 +517,11 @@ static inline bool _withStackOrHeapBuffer(size_t amount, void (__attribute__((no buffer.capacity = amount; #endif buffer.onStack = (_CFIsMainThread() != 0 ? buffer.capacity < 2048 : buffer.capacity < 512); +#if TARGET_OS_WIN32 + buffer.memory = buffer.onStack ? _alloca(buffer.capacity) : malloc(buffer.capacity); +#else buffer.memory = buffer.onStack ? alloca(buffer.capacity) : malloc(buffer.capacity); +#endif if (buffer.memory == NULL) { return false; } applier(&buffer); if (!buffer.onStack) { @@ -540,6 +544,7 @@ CF_CROSS_PLATFORM_EXPORT CFIndex __CFCharDigitValue(UniChar ch); #pragma mark - File Functions #if TARGET_OS_WIN32 +typedef int mode_t; CF_CROSS_PLATFORM_EXPORT int _CFOpenFileWithMode(const unsigned short *path, int opts, mode_t mode); #else CF_CROSS_PLATFORM_EXPORT int _CFOpenFileWithMode(const char *path, int opts, mode_t mode); diff --git a/Sources/CoreFoundation/include/module.modulemap b/Sources/CoreFoundation/include/module.modulemap index fab2d38e13..b8cddc7779 100644 --- a/Sources/CoreFoundation/include/module.modulemap +++ b/Sources/CoreFoundation/include/module.modulemap @@ -1,6 +1,5 @@ module CoreFoundation { umbrella header "CoreFoundation.h" - explicit module CFPlugInCOM { header "CFPlugInCOM.h" } export * module * { diff --git a/Sources/CoreFoundation/internalInclude/CFInternal.h b/Sources/CoreFoundation/internalInclude/CFInternal.h index 5b9f109060..79dc4e6001 100644 --- a/Sources/CoreFoundation/internalInclude/CFInternal.h +++ b/Sources/CoreFoundation/internalInclude/CFInternal.h @@ -485,7 +485,7 @@ CF_PRIVATE Boolean __CFProcessIsRestricted(void); CF_EXPORT void * __CFConstantStringClassReferencePtr; -#if DEPLOYMENT_RUNTIME_SWIFT && TARGET_OS_MAC +#if DEPLOYMENT_RUNTIME_SWIFT #if TARGET_OS_LINUX #define CONST_STRING_SECTION __attribute__((section(".cfstr.data"))) diff --git a/Sources/Foundation/FileManager+Win32.swift b/Sources/Foundation/FileManager+Win32.swift index 1e8379600c..2bf47e7370 100644 --- a/Sources/Foundation/FileManager+Win32.swift +++ b/Sources/Foundation/FileManager+Win32.swift @@ -162,7 +162,7 @@ extension FileManager { internal func _recursiveDestinationOfSymbolicLink(atPath path: String) throws -> String { // Throw error if path is not a symbolic link: - var previousIterationDestination = try _destinationOfSymbolicLink(atPath: path) + var previousIterationDestination = try destinationOfSymbolicLink(atPath: path) // Same recursion limit as in Darwin: let symbolicLinkRecursionLimit = 32 diff --git a/Sources/Foundation/FileManager.swift b/Sources/Foundation/FileManager.swift index 6f1c7286d2..6e973c35b9 100644 --- a/Sources/Foundation/FileManager.swift +++ b/Sources/Foundation/FileManager.swift @@ -283,8 +283,10 @@ extension FileManager { let hiddenAttrs = isHidden ? attrs | FILE_ATTRIBUTE_HIDDEN : attrs & ~FILE_ATTRIBUTE_HIDDEN - guard SetFileAttributesW(fsRep, hiddenAttrs) else { - throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [path]) + try _fileSystemRepresentation(withPath: path) { fsRep in + guard SetFileAttributesW(fsRep, hiddenAttrs) else { + throw _NSErrorWithWindowsError(GetLastError(), reading: false, paths: [path]) + } } #else if isHidden { @@ -308,7 +310,7 @@ extension FileManager { // Setting these attributes is unsupported on these platforms. throw NSError(domain: NSCocoaErrorDomain, code: CocoaError.fileWriteUnknown.rawValue) #else - let stat = try _lstatFile(atPath: path, withFileSystemRepresentation: fsRep) + let stat = try _lstatFile(atPath: path, withFileSystemRepresentation: nil) var flags = stat.st_flags flags |= flagsToSet flags &= ~flagsToUnset diff --git a/Sources/Foundation/NSUUID.swift b/Sources/Foundation/NSUUID.swift index 00acd6890f..4bc4dd98ad 100644 --- a/Sources/Foundation/NSUUID.swift +++ b/Sources/Foundation/NSUUID.swift @@ -90,7 +90,7 @@ open class NSUUID : NSObject, NSCopying, NSSecureCoding, NSCoding { open override func isEqual(_ value: Any?) -> Bool { switch value { - case let other as UUID: + case let other as FoundationEssentials.UUID: return other.uuid.0 == buffer[0] && other.uuid.1 == buffer[1] && other.uuid.2 == buffer[2] && @@ -124,9 +124,9 @@ open class NSUUID : NSObject, NSCopying, NSSecureCoding, NSCoding { } extension NSUUID : _StructTypeBridgeable { - public typealias _StructType = UUID + public typealias _StructType = FoundationEssentials.UUID - public func _bridgeToSwift() -> UUID { - return UUID._unconditionallyBridgeFromObjectiveC(self) + public func _bridgeToSwift() -> FoundationEssentials.UUID { + return FoundationEssentials.UUID._unconditionallyBridgeFromObjectiveC(self) } } From 9118940706aa0fd0a6c0d3d8a9dd7ee878ffc32c Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Fri, 28 Jun 2024 15:29:38 -0700 Subject: [PATCH 087/198] [CMake] Include GNUInstallDirs (#4996) --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index a289e6267f..d08483a395 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -147,6 +147,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") "-I/usr/lib/swift") # dispatch endif() +include(GNUInstallDirs) include(FoundationSwiftSupport) add_subdirectory(Sources) From 06bd59d41e2f371078af1937d45a3d2dba00e7e4 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Mon, 8 Jul 2024 13:20:51 -0700 Subject: [PATCH 088/198] Use FSR for Process executable path on Windows (#4999) * Use FSR for Process executable path on Windows * Use FSR on Linux as well --- Sources/Foundation/Process.swift | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Sources/Foundation/Process.swift b/Sources/Foundation/Process.swift index 0f32045e49..76aeed1b4c 100644 --- a/Sources/Foundation/Process.swift +++ b/Sources/Foundation/Process.swift @@ -499,7 +499,7 @@ open class Process: NSObject { } #if os(Windows) - var command: [String] = [launchPath] + var command: [String] = [try FileManager.default._fileSystemRepresentation(withPath: launchPath) { String(decodingCString: $0, as: UTF16.self) }] if let arguments = self.arguments { command.append(contentsOf: arguments) } @@ -958,9 +958,12 @@ open class Process: NSObject { // Launch var pid = pid_t() - guard _CFPosixSpawn(&pid, launchPath, fileActions, &spawnAttrs, argv, envp) == 0 else { - throw _NSErrorWithErrno(errno, reading: true, path: launchPath) - } + + try FileManager.default._fileSystemRepresentation(withPath: launchPath, { fsRep in + guard _CFPosixSpawn(&pid, fsRep, fileActions, &spawnAttrs, argv, envp) == 0 else { + throw _NSErrorWithErrno(errno, reading: true, path: launchPath) + } + }) posix_spawnattr_destroy(&spawnAttrs) // Close the write end of the input and output pipes. From 082b0dc5f595ee921d6dc5915af1fbbfa75b47de Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Thu, 11 Jul 2024 16:12:24 -0700 Subject: [PATCH 089/198] Avoiding linking CF from outside of Foundation (#5003) --- Sources/Foundation/CMakeLists.txt | 3 ++- Sources/FoundationNetworking/CMakeLists.txt | 3 --- Sources/FoundationNetworking/HTTPCookieStorage.swift | 1 - Sources/FoundationNetworking/URLSession/BodySource.swift | 1 - .../FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift | 1 - Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift | 1 - .../FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift | 1 - Sources/FoundationNetworking/URLSession/NativeProtocol.swift | 1 - Sources/FoundationNetworking/URLSession/TaskRegistry.swift | 1 - Sources/FoundationNetworking/URLSession/TransferState.swift | 1 - Sources/FoundationNetworking/URLSession/URLSession.swift | 1 - Sources/FoundationNetworking/URLSession/URLSessionTask.swift | 1 - .../URLSession/URLSessionTaskMetrics.swift | 1 - .../URLSession/WebSocket/WebSocketURLProtocol.swift | 1 - .../FoundationNetworking/URLSession/libcurl/EasyHandle.swift | 1 - .../FoundationNetworking/URLSession/libcurl/MultiHandle.swift | 1 - .../URLSession/libcurl/libcurlHelpers.swift | 1 - Sources/FoundationXML/CMakeLists.txt | 3 --- Sources/FoundationXML/XMLDTD.swift | 1 - Sources/FoundationXML/XMLDTDNode.swift | 1 - Sources/FoundationXML/XMLDocument.swift | 1 - Sources/FoundationXML/XMLElement.swift | 1 - Sources/FoundationXML/XMLNode.swift | 1 - Sources/FoundationXML/XMLParser.swift | 1 - Sources/_CFURLSessionInterface/CMakeLists.txt | 2 +- Sources/_CFXMLInterface/CMakeLists.txt | 2 +- 26 files changed, 4 insertions(+), 30 deletions(-) diff --git a/Sources/Foundation/CMakeLists.txt b/Sources/Foundation/CMakeLists.txt index d382f15c94..9904982181 100644 --- a/Sources/Foundation/CMakeLists.txt +++ b/Sources/Foundation/CMakeLists.txt @@ -149,8 +149,9 @@ target_compile_options(Foundation PRIVATE "SHELL:$<$:${_Foundation_swift_build_flags}>") target_link_libraries(Foundation - PUBLIC + PRIVATE CoreFoundation + PUBLIC FoundationEssentials FoundationInternationalization) diff --git a/Sources/FoundationNetworking/CMakeLists.txt b/Sources/FoundationNetworking/CMakeLists.txt index 75c8505060..106add318c 100644 --- a/Sources/FoundationNetworking/CMakeLists.txt +++ b/Sources/FoundationNetworking/CMakeLists.txt @@ -51,7 +51,6 @@ target_compile_options(FoundationNetworking PRIVATE target_link_libraries(FoundationNetworking PRIVATE - CoreFoundation _CFURLSessionInterface PUBLIC Foundation) @@ -59,8 +58,6 @@ target_link_libraries(FoundationNetworking if(NOT BUILD_SHARED_LIBS) target_compile_options(FoundationNetworking PRIVATE "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend _CFURLSessionInterface>") - target_compile_options(FoundationNetworking PRIVATE - "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend CoreFoundation>") target_compile_options(FoundationNetworking PRIVATE "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend curl>") endif() diff --git a/Sources/FoundationNetworking/HTTPCookieStorage.swift b/Sources/FoundationNetworking/HTTPCookieStorage.swift index 3961d44cc3..22a1aff000 100644 --- a/Sources/FoundationNetworking/HTTPCookieStorage.swift +++ b/Sources/FoundationNetworking/HTTPCookieStorage.swift @@ -13,7 +13,6 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation /*! @enum HTTPCookie.AcceptPolicy diff --git a/Sources/FoundationNetworking/URLSession/BodySource.swift b/Sources/FoundationNetworking/URLSession/BodySource.swift index e6e3f85c86..df2862b2f7 100644 --- a/Sources/FoundationNetworking/URLSession/BodySource.swift +++ b/Sources/FoundationNetworking/URLSession/BodySource.swift @@ -22,7 +22,6 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift b/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift index 932600cbe2..142a2c84f0 100644 --- a/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift @@ -13,7 +13,6 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation import Dispatch internal class _FTPURLProtocol: _NativeProtocol { diff --git a/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift b/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift index cc2e7d7f9c..fae1e612d4 100644 --- a/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift +++ b/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift @@ -22,7 +22,6 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation internal extension _HTTPURLProtocol._ResponseHeaderLines { /// Create an `NSHTTPRULResponse` from the lines. diff --git a/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift b/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift index bf7e3f2b79..ed7070c700 100644 --- a/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift @@ -13,7 +13,6 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/NativeProtocol.swift b/Sources/FoundationNetworking/URLSession/NativeProtocol.swift index 95da2e9bdb..941b9cd3b1 100644 --- a/Sources/FoundationNetworking/URLSession/NativeProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/NativeProtocol.swift @@ -23,7 +23,6 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation import Dispatch internal let enableLibcurlDebugOutput: Bool = { diff --git a/Sources/FoundationNetworking/URLSession/TaskRegistry.swift b/Sources/FoundationNetworking/URLSession/TaskRegistry.swift index 3e958891dd..059010a07b 100644 --- a/Sources/FoundationNetworking/URLSession/TaskRegistry.swift +++ b/Sources/FoundationNetworking/URLSession/TaskRegistry.swift @@ -22,7 +22,6 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation import Dispatch extension URLSession { diff --git a/Sources/FoundationNetworking/URLSession/TransferState.swift b/Sources/FoundationNetworking/URLSession/TransferState.swift index b4142c24eb..232776a3ef 100644 --- a/Sources/FoundationNetworking/URLSession/TransferState.swift +++ b/Sources/FoundationNetworking/URLSession/TransferState.swift @@ -22,7 +22,6 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation diff --git a/Sources/FoundationNetworking/URLSession/URLSession.swift b/Sources/FoundationNetworking/URLSession/URLSession.swift index d01fc316c7..3fe5b9bd77 100644 --- a/Sources/FoundationNetworking/URLSession/URLSession.swift +++ b/Sources/FoundationNetworking/URLSession/URLSession.swift @@ -167,7 +167,6 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation extension URLSession { public enum DelayedRequestDisposition { diff --git a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift index ea19743bd8..d1aa041333 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift @@ -20,7 +20,6 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation private class Bag { var values: [Element] = [] diff --git a/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift b/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift index 035a5d802b..d745c9e0f8 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift @@ -20,7 +20,6 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation open class URLSessionTaskMetrics : NSObject { public internal(set) var transactionMetrics: [URLSessionTaskTransactionMetrics] = [] diff --git a/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift b/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift index 9a7438d69f..40a012905d 100644 --- a/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift @@ -13,7 +13,6 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift index 7848196d4f..1d9e3c7f54 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift @@ -23,7 +23,6 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift index 248c354cd0..ade21f458a 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift @@ -22,7 +22,6 @@ import SwiftFoundation import Foundation #endif -@_implementationOnly import CoreFoundation @_implementationOnly import _CFURLSessionInterface import Dispatch diff --git a/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift b/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift index 55460cfc22..291c897052 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/libcurlHelpers.swift @@ -17,7 +17,6 @@ // ----------------------------------------------------------------------------- -@_implementationOnly import CoreFoundation @_implementationOnly import _CFURLSessionInterface //TODO: Move things in this file? diff --git a/Sources/FoundationXML/CMakeLists.txt b/Sources/FoundationXML/CMakeLists.txt index 9640298a71..0ac926fa34 100644 --- a/Sources/FoundationXML/CMakeLists.txt +++ b/Sources/FoundationXML/CMakeLists.txt @@ -26,7 +26,6 @@ target_compile_options(FoundationXML PRIVATE target_link_libraries(FoundationXML PRIVATE - CoreFoundation _CFXMLInterface PUBLIC Foundation) @@ -34,8 +33,6 @@ target_link_libraries(FoundationXML if(NOT BUILD_SHARED_LIBS) target_compile_options(FoundationXML PRIVATE "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend _CFXMLInterface>") - target_compile_options(FoundationXML PRIVATE - "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend CoreFoundation>") target_compile_options(FoundationXML PRIVATE "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend xml2>") endif() diff --git a/Sources/FoundationXML/XMLDTD.swift b/Sources/FoundationXML/XMLDTD.swift index db18d25fb5..089c1a088b 100644 --- a/Sources/FoundationXML/XMLDTD.swift +++ b/Sources/FoundationXML/XMLDTD.swift @@ -12,7 +12,6 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation @_implementationOnly import _CFXMLInterface /*! diff --git a/Sources/FoundationXML/XMLDTDNode.swift b/Sources/FoundationXML/XMLDTDNode.swift index f0d74cb20e..c3859ec0b0 100644 --- a/Sources/FoundationXML/XMLDTDNode.swift +++ b/Sources/FoundationXML/XMLDTDNode.swift @@ -12,7 +12,6 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation @_implementationOnly import _CFXMLInterface /*! diff --git a/Sources/FoundationXML/XMLDocument.swift b/Sources/FoundationXML/XMLDocument.swift index 41d6ada04d..b4fb5fdafa 100644 --- a/Sources/FoundationXML/XMLDocument.swift +++ b/Sources/FoundationXML/XMLDocument.swift @@ -12,7 +12,6 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation @_implementationOnly import _CFXMLInterface // Input options diff --git a/Sources/FoundationXML/XMLElement.swift b/Sources/FoundationXML/XMLElement.swift index 448b769108..9355e8a704 100644 --- a/Sources/FoundationXML/XMLElement.swift +++ b/Sources/FoundationXML/XMLElement.swift @@ -12,7 +12,6 @@ import SwiftFoundation #else import Foundation #endif -@_implementationOnly import CoreFoundation @_implementationOnly import _CFXMLInterface /*! diff --git a/Sources/FoundationXML/XMLNode.swift b/Sources/FoundationXML/XMLNode.swift index 2735b2f3c1..035408bbd3 100644 --- a/Sources/FoundationXML/XMLNode.swift +++ b/Sources/FoundationXML/XMLNode.swift @@ -15,7 +15,6 @@ import _CFXMLInterface import Foundation @_implementationOnly import _CFXMLInterface #endif -@_implementationOnly import CoreFoundation // initWithKind options // NSXMLNodeOptionsNone diff --git a/Sources/FoundationXML/XMLParser.swift b/Sources/FoundationXML/XMLParser.swift index f41d56ce8f..228f588e88 100644 --- a/Sources/FoundationXML/XMLParser.swift +++ b/Sources/FoundationXML/XMLParser.swift @@ -14,7 +14,6 @@ import _CFXMLInterface import Foundation @_implementationOnly import _CFXMLInterface #endif -@_implementationOnly import CoreFoundation extension XMLParser { public enum ExternalEntityResolvingPolicy : UInt { diff --git a/Sources/_CFURLSessionInterface/CMakeLists.txt b/Sources/_CFURLSessionInterface/CMakeLists.txt index d3a1b1b67f..47fe6a39a4 100644 --- a/Sources/_CFURLSessionInterface/CMakeLists.txt +++ b/Sources/_CFURLSessionInterface/CMakeLists.txt @@ -17,6 +17,7 @@ add_library(_CFURLSessionInterface STATIC CFURLSessionInterface.c) target_include_directories(_CFURLSessionInterface PUBLIC include + ../CoreFoundation/include PRIVATE ../CoreFoundation/internalInclude) @@ -26,7 +27,6 @@ target_compile_options(_CFURLSessionInterface PRIVATE "SHELL:$<$:${_Foundation_common_build_flags}>") target_link_libraries(_CFURLSessionInterface PRIVATE - CoreFoundation dispatch CURL::libcurl) diff --git a/Sources/_CFXMLInterface/CMakeLists.txt b/Sources/_CFXMLInterface/CMakeLists.txt index 45085aadd5..41b1f08364 100644 --- a/Sources/_CFXMLInterface/CMakeLists.txt +++ b/Sources/_CFXMLInterface/CMakeLists.txt @@ -17,6 +17,7 @@ add_library(_CFXMLInterface STATIC CFXMLInterface.c) target_include_directories(_CFXMLInterface PUBLIC include + ../CoreFoundation/include PRIVATE ../CoreFoundation/internalInclude /usr/include/libxml2/) @@ -25,7 +26,6 @@ target_compile_options(_CFXMLInterface PRIVATE "SHELL:$<$:${_Foundation_common_build_flags}>") target_link_libraries(_CFXMLInterface PRIVATE - CoreFoundation dispatch LibXml2::LibXml2) From ad15f448ca9e92034485708a96de087c5d3f272c Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Thu, 11 Jul 2024 20:35:27 -0700 Subject: [PATCH 090/198] [CMake] correctly apply -fcf-runtime-abi=swift on Windows (#5004) --- CMakeLists.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d08483a395..313f060527 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,14 +112,14 @@ list(APPEND _Foundation_common_build_flags "-Wno-unused-function" "-Wno-microsoft-enum-forward-reference" "-Wno-int-conversion" - "-fcf-runtime-abi=swift" "-fblocks") if(NOT "${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC") list(APPEND _Foundation_common_build_flags "-fconstant-cfstrings" "-fdollars-in-identifiers" - "-fno-common") + "-fno-common" + "-fcf-runtime-abi=swift") if(NOT CMAKE_SYSTEM_NAME STREQUAL OpenBSD) list(APPEND _Foundation_common_build_flags @@ -127,7 +127,8 @@ if(NOT "${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC") endif() else() list(APPEND _Foundation_common_build_flags - "/EHsc") + "/EHsc" + "/clang:-fcf-runtime-abi=swift") endif() if(CMAKE_BUILD_TYPE STREQUAL Debug) From 7e5350751e17515253c096350dddd3aeeda0eee2 Mon Sep 17 00:00:00 2001 From: Evan Wilde Date: Tue, 9 Jul 2024 22:45:20 -0700 Subject: [PATCH 091/198] Workaround broken glibc modulemap We have been running into modularization issues on newer versions of various Linux distros, resulting in the compiler saying that the Glibc module doesn't have a SOCK_STREAM or SOCK_DGRAM. From some poking around, the definition is now coming from the CoreFoundation module as far as Swift is concerned. This is ultimately because our modulemap for Glibc is bad, but also means that I can't bring up Swift 6 on all of the Linux distros that 5.10 has support for. This workaround removes the explicit module name from `SOCK_STREAM` and renames it to `FOUNDATION_SOCK_STREAM` to avoid an ambiguous name, and completely removes `SOCK_DGRAM`. Both SOCK_STREAM and SOCK_DGRAM are fileprivates, so changing them will have no visible external effect. It is true that if another header somewhere defines `SOCK_STREAM`, we may pick it up instead of the definition from the glibc module, but that will also cause some nasty surprises to anyone using that header in C, so it is unlikely. Fixes: rdar://128079849 --- Sources/Foundation/Port.swift | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/Sources/Foundation/Port.swift b/Sources/Foundation/Port.swift index c53263f0ef..f06f95a9fe 100644 --- a/Sources/Foundation/Port.swift +++ b/Sources/Foundation/Port.swift @@ -90,18 +90,22 @@ open class SocketPort: Port {} #else +#if canImport(Darwin) +import Darwin +fileprivate let FOUNDATION_SOCK_STREAM = SOCK_STREAM +fileprivate let FOUNDATION_IPPROTO_TCP = IPPROTO_TCP +#endif + #if canImport(Glibc) && !os(Android) && !os(OpenBSD) import Glibc -fileprivate let SOCK_STREAM = Int32(Glibc.SOCK_STREAM.rawValue) -fileprivate let SOCK_DGRAM = Int32(Glibc.SOCK_DGRAM.rawValue) -fileprivate let IPPROTO_TCP = Int32(Glibc.IPPROTO_TCP) +fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM.rawValue) +fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) #endif #if canImport(Glibc) && os(Android) || os(OpenBSD) import Glibc -fileprivate let SOCK_STREAM = Int32(Glibc.SOCK_STREAM) -fileprivate let SOCK_DGRAM = Int32(Glibc.SOCK_DGRAM) -fileprivate let IPPROTO_TCP = Int32(Glibc.IPPROTO_TCP) +fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM) +fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) fileprivate let INADDR_ANY: in_addr_t = 0 #if os(OpenBSD) fileprivate let INADDR_LOOPBACK = 0x7f000001 @@ -123,7 +127,8 @@ import WinSDK fileprivate typealias sa_family_t = ADDRESS_FAMILY fileprivate typealias in_port_t = USHORT fileprivate typealias in_addr_t = UInt32 -fileprivate let IPPROTO_TCP = Int32(WinSDK.IPPROTO_TCP.rawValue) +fileprivate let FOUNDATION_SOCK_STREAM = SOCK_STREAM +fileprivate let FOUNDATION_IPPROTO_TCP = Int32(WinSDK.IPPROTO_TCP.rawValue) #endif // MARK: Darwin representation of socket addresses @@ -484,7 +489,7 @@ open class SocketPort : Port { let data = withUnsafeBytes(of: address) { Data($0) } - self.init(protocolFamily: PF_INET, socketType: SOCK_STREAM, protocol: IPPROTO_TCP, address: data) + self.init(protocolFamily: PF_INET, socketType: FOUNDATION_SOCK_STREAM, protocol: FOUNDATION_IPPROTO_TCP, address: data) } private final func createNonuniquedCore(from socket: CFSocket, protocolFamily family: Int32, socketType type: Int32, protocol: Int32) { @@ -500,7 +505,7 @@ open class SocketPort : Port { var context = CFSocketContext() context.info = Unmanaged.passUnretained(self).toOpaque() var s: CFSocket - if type == SOCK_STREAM { + if type == FOUNDATION_SOCK_STREAM { s = CFSocketCreate(nil, family, type, `protocol`, CFOptionFlags(kCFSocketAcceptCallBack), __NSFireSocketAccept, &context) } else { s = CFSocketCreate(nil, family, type, `protocol`, CFOptionFlags(kCFSocketDataCallBack), __NSFireSocketDatagram, &context) @@ -519,7 +524,7 @@ open class SocketPort : Port { var context = CFSocketContext() context.info = Unmanaged.passUnretained(self).toOpaque() var s: CFSocket - if type == SOCK_STREAM { + if type == FOUNDATION_SOCK_STREAM { s = CFSocketCreateWithNative(nil, CFSocketNativeHandle(sock), CFOptionFlags(kCFSocketAcceptCallBack), __NSFireSocketAccept, &context) } else { s = CFSocketCreateWithNative(nil, CFSocketNativeHandle(sock), CFOptionFlags(kCFSocketDataCallBack), __NSFireSocketDatagram, &context) @@ -543,7 +548,7 @@ open class SocketPort : Port { sinAddr.sin_addr = inAddr let data = withUnsafeBytes(of: sinAddr) { Data($0) } - self.init(remoteWithProtocolFamily: PF_INET, socketType: SOCK_STREAM, protocol: IPPROTO_TCP, address: data) + self.init(remoteWithProtocolFamily: PF_INET, socketType: FOUNDATION_SOCK_STREAM, protocol: FOUNDATION_IPPROTO_TCP, address: data) return } } @@ -556,7 +561,7 @@ open class SocketPort : Port { sinAddr.sin6_addr = in6Addr let data = withUnsafeBytes(of: sinAddr) { Data($0) } - self.init(remoteWithProtocolFamily: PF_INET, socketType: SOCK_STREAM, protocol: IPPROTO_TCP, address: data) + self.init(remoteWithProtocolFamily: PF_INET, socketType: FOUNDATION_SOCK_STREAM, protocol: FOUNDATION_IPPROTO_TCP, address: data) return } } @@ -573,7 +578,7 @@ open class SocketPort : Port { withUnsafeBytes(of: in_addr_t(INADDR_LOOPBACK).bigEndian) { buffer.copyMemory(from: $0) } } let data = withUnsafeBytes(of: sinAddr) { Data($0) } - self.init(remoteWithProtocolFamily: PF_INET, socketType: SOCK_STREAM, protocol: IPPROTO_TCP, address: data) + self.init(remoteWithProtocolFamily: PF_INET, socketType: FOUNDATION_SOCK_STREAM, protocol: FOUNDATION_IPPROTO_TCP, address: data) } private static let remoteSocketCoresLock = NSLock() @@ -1049,7 +1054,7 @@ open class SocketPort : Port { if let connector = core.connectors[signature], CFSocketIsValid(connector) { return connector } else { - if signature.socketType == SOCK_STREAM { + if signature.socketType == FOUNDATION_SOCK_STREAM { if let connector = CFSocketCreate(nil, socketKind.protocolFamily, socketKind.socketType, socketKind.protocol, CFOptionFlags(kCFSocketDataCallBack), __NSFireSocketData, &context), CFSocketIsValid(connector) { var timeout = time - Date.timeIntervalSinceReferenceDate if timeout < 0 || timeout >= SocketPort.maximumTimeout { From 32cd74ffc6d1f0b73353a6a8faa31a6175e5873b Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Mon, 24 Jun 2024 11:34:27 -0700 Subject: [PATCH 092/198] Fix include path to Dispatch --- Package.swift | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Package.swift b/Package.swift index f4eda32359..41bc940172 100644 --- a/Package.swift +++ b/Package.swift @@ -30,7 +30,8 @@ let coreFoundationBuildSettings: [CSetting] = [ "\(Context.packageDirectory)/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h", // /EHsc for Windows ]), - .unsafeFlags(["-I/usr/lib/swift/Block"], .when(platforms: [.linux, .android])) // dispatch + .unsafeFlags(["-I/usr/lib/swift"], .when(platforms: [.linux, .android])), // dispatch + .unsafeFlags(["-I/usr/lib/swift/Block"], .when(platforms: [.linux, .android])) // Block.h ] // For _CFURLSessionInterface, _CFXMLInterface @@ -58,7 +59,8 @@ let interfaceBuildSettings: [CSetting] = [ "-fcf-runtime-abi=swift" // /EHsc for Windows ]), - .unsafeFlags(["-I/usr/lib/swift/Block"], .when(platforms: [.linux, .android])) // dispatch + .unsafeFlags(["-I/usr/lib/swift"], .when(platforms: [.linux, .android])), // dispatch + .unsafeFlags(["-I/usr/lib/swift/Block"], .when(platforms: [.linux, .android])) // Block.h ] let swiftBuildSettings: [SwiftSetting] = [ From 17051b41214da40ca715b1a6bc8eda6d627a629b Mon Sep 17 00:00:00 2001 From: Alexander Smarus Date: Thu, 11 Jul 2024 16:02:42 +0200 Subject: [PATCH 093/198] Allocate buffer of correct size in `NSURL.fileSystemRepresentation` on Windows --- Sources/Foundation/NSURL.swift | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Sources/Foundation/NSURL.swift b/Sources/Foundation/NSURL.swift index 4d31e2ba9c..7a3f09b4bc 100644 --- a/Sources/Foundation/NSURL.swift +++ b/Sources/Foundation/NSURL.swift @@ -486,9 +486,12 @@ open class NSURL : NSObject, NSSecureCoding, NSCopying { #if os(Windows) if let resolved = CFURLCopyAbsoluteURL(_cfObject), let representation = CFURLCopyFileSystemPath(resolved, kCFURLWindowsPathStyle)?._swiftObject { - let buffer = UnsafeMutablePointer.allocate(capacity: representation.count + 1) - representation.withCString { buffer.initialize(from: $0, count: representation.count + 1) } - buffer[representation.count] = 0 + let buffer = representation.withCString { + let len = strlen($0) + let buffer = UnsafeMutablePointer.allocate(capacity: len + 1) + buffer.initialize(from: $0, count: len + 1) + return buffer + } return UnsafePointer(buffer) } #else From 1fc5ee5f40d8233a701987a43c4a9ad4c669b48c Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Wed, 17 Jul 2024 16:43:53 -0700 Subject: [PATCH 094/198] Add fcntl.h include, required for some linux platforms --- Sources/CoreFoundation/include/ForSwiftFoundationOnly.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h index 2a847e6c1f..dd41eeb2ee 100644 --- a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h @@ -78,6 +78,7 @@ #include #include #include +#include #ifdef __GLIBC_PREREQ #if __GLIBC_PREREQ(2, 28) == 0 From 15ee5c32d2b808fd912c586c535feaf9af2eb2d5 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Thu, 18 Jul 2024 09:21:30 -0700 Subject: [PATCH 095/198] Re-core some String APIs on swift-foundation (#5009) * Re-core some String APIs on swift-foundation * Update manifest versions --- CMakeLists.txt | 2 +- Package.swift | 4 +- Sources/Foundation/NSStringAPI.swift | 430 +-------------------- Tests/Foundation/TestDataURLProtocol.swift | 4 +- 4 files changed, 14 insertions(+), 426 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 313f060527..0a671aa2d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,7 +63,7 @@ if (_SwiftFoundationICU_SourceDIR) else() FetchContent_Declare(SwiftFoundationICU GIT_REPOSITORY https://github.com/apple/swift-foundation-icu.git - GIT_TAG 0.0.8) + GIT_TAG 0.0.9) endif() if (_SwiftFoundation_SourceDIR) diff --git a/Package.swift b/Package.swift index 41bc940172..3fa7f28a91 100644 --- a/Package.swift +++ b/Package.swift @@ -82,10 +82,10 @@ var dependencies: [Package.Dependency] { [ .package( url: "https://github.com/apple/swift-foundation-icu", - from: "0.0.8"), + from: "0.0.9"), .package( url: "https://github.com/apple/swift-foundation", - revision: "ef8a7787c355edae3c142e4dff8767d05a32c51f") + revision: "35d896ab47ab5e487cfce822fbe40d2b278c51d6") ] } } diff --git a/Sources/Foundation/NSStringAPI.swift b/Sources/Foundation/NSStringAPI.swift index f7b65b5278..0fc972affb 100644 --- a/Sources/Foundation/NSStringAPI.swift +++ b/Sources/Foundation/NSStringAPI.swift @@ -14,58 +14,12 @@ // //===----------------------------------------------------------------------===// -// Important Note -// ============== -// -// This file is shared between two projects: -// -// 1. https://github.com/apple/swift/tree/master/stdlib/public/Darwin/Foundation -// 2. https://github.com/apple/swift-corelibs-foundation/tree/main/Foundation -// -// If you change this file, you must update it in both places. - -#if !DEPLOYMENT_RUNTIME_SWIFT -@_exported import Foundation // Clang module -#endif - // Open Issues // =========== // // Property Lists need to be properly bridged // -func _toNSArray(_ a: [T], f: (T) -> U) -> NSArray { - let result = NSMutableArray(capacity: a.count) - for s in a { - result.add(f(s)) - } - return result -} - -#if !DEPLOYMENT_RUNTIME_SWIFT -// We only need this for UnsafeMutablePointer, but there's not currently a way -// to write that constraint. -extension Optional { - /// Invokes `body` with `nil` if `self` is `nil`; otherwise, passes the - /// address of `object` to `body`. - /// - /// This is intended for use with Foundation APIs that return an Objective-C - /// type via out-parameter where it is important to be able to *ignore* that - /// parameter by passing `nil`. (For some APIs, this may allow the - /// implementation to avoid some work.) - /// - /// In most cases it would be simpler to just write this code inline, but if - /// `body` is complicated than that results in unnecessarily repeated code. - internal func _withNilOrAddress( - of object: inout NSType?, - _ body: - (AutoreleasingUnsafeMutablePointer?) -> ResultType - ) -> ResultType { - return self == nil ? body(nil) : body(&object) - } -} -#endif - /// From a non-`nil` `UnsafePointer` to a null-terminated string /// with possibly-transient lifetime, create a null-terminated array of 'C' char. /// Returns `nil` if passed a null pointer. @@ -247,45 +201,6 @@ extension String { //===--- Already provided by String's core ------------------------------===// // - (instancetype)init - //===--- Initializers that can fail -------------------------------------===// - // - (instancetype) - // initWithBytes:(const void *)bytes - // length:(NSUInteger)length - // encoding:(NSStringEncoding)encoding - - /// Creates a new string equivalent to the given bytes interpreted in the - /// specified encoding. - /// - /// - Parameters: - /// - bytes: A sequence of bytes to interpret using `encoding`. - /// - encoding: The encoding to use to interpret `bytes`. - public init?(bytes: __shared S, encoding: Encoding) - where S.Iterator.Element == UInt8 { - if encoding == .utf8 { - if let str = bytes.withContiguousStorageIfAvailable({ String._tryFromUTF8($0) }) { - guard let str else { - return nil - } - self = str - } else { - let byteArray = Array(bytes) - guard let str = byteArray.withUnsafeBufferPointer({ String._tryFromUTF8($0) }) else { - return nil - } - self = str - } - return - } - - let byteArray = Array(bytes) - if let ns = NSString( - bytes: byteArray, length: byteArray.count, encoding: encoding.rawValue) { - self = String._unconditionallyBridgeFromObjectiveC(ns) - } else { - return nil - } - } - // - (instancetype) // initWithBytesNoCopy:(void *)bytes // length:(NSUInteger)length @@ -297,6 +212,7 @@ extension String { /// frees the buffer. /// /// - Warning: This initializer is not memory-safe! + @available(swift, deprecated: 6.0, message: "String does not support no-copy initialization") public init?( bytesNoCopy bytes: UnsafeMutableRawPointer, length: Int, encoding: Encoding, freeWhenDone flag: Bool @@ -322,7 +238,7 @@ extension String { utf16CodeUnits: UnsafePointer, count: Int ) { - self = String._unconditionallyBridgeFromObjectiveC(NSString(characters: utf16CodeUnits, length: count)) + self = String(decoding: UnsafeBufferPointer(start: utf16CodeUnits, count: count), as: UTF16.self) } // - (instancetype) @@ -332,6 +248,7 @@ extension String { /// Creates a new string that contains the specified number of characters /// from the given C array of UTF-16 code units. + @available(swift, deprecated: 6.0, message: "String does not support no-copy initialization") public init( utf16CodeUnitsNoCopy: UnsafePointer, count: Int, @@ -345,86 +262,20 @@ extension String { //===--- Initializers that can fail -------------------------------------===// - // - (instancetype) - // initWithContentsOfFile:(NSString *)path - // encoding:(NSStringEncoding)enc - // error:(NSError **)error - // - - /// Produces a string created by reading data from the file at a - /// given path interpreted using a given encoding. - public init( - contentsOfFile path: __shared String, - encoding enc: Encoding - ) throws { - let ns = try NSString(contentsOfFile: path, encoding: enc.rawValue) - self = String._unconditionallyBridgeFromObjectiveC(ns) - } - - // - (instancetype) - // initWithContentsOfFile:(NSString *)path - // usedEncoding:(NSStringEncoding *)enc - // error:(NSError **)error - - /// Produces a string created by reading data from the file at - /// a given path and returns by reference the encoding used to - /// interpret the file. - public init( - contentsOfFile path: __shared String, - usedEncoding: inout Encoding - ) throws { - var enc: UInt = 0 - let ns = try NSString(contentsOfFile: path, usedEncoding: &enc) - usedEncoding = Encoding(rawValue: enc) - self = String._unconditionallyBridgeFromObjectiveC(ns) - } - + @available(swift, deprecated: 6.0, message: "Use `init(contentsOfFile:encoding:)` instead") public init( contentsOfFile path: __shared String ) throws { - let ns = try NSString(contentsOfFile: path, usedEncoding: nil) - self = String._unconditionallyBridgeFromObjectiveC(ns) - } - - // - (instancetype) - // initWithContentsOfURL:(NSURL *)url - // encoding:(NSStringEncoding)enc - // error:(NSError**)error - - /// Produces a string created by reading data from a given URL - /// interpreted using a given encoding. Errors are written into the - /// inout `error` argument. - public init( - contentsOf url: __shared URL, - encoding enc: Encoding - ) throws { - let ns = try NSString(contentsOf: url, encoding: enc.rawValue) - self = String._unconditionallyBridgeFromObjectiveC(ns) - } - - // - (instancetype) - // initWithContentsOfURL:(NSURL *)url - // usedEncoding:(NSStringEncoding *)enc - // error:(NSError **)error - - /// Produces a string created by reading data from a given URL - /// and returns by reference the encoding used to interpret the - /// data. Errors are written into the inout `error` argument. - public init( - contentsOf url: __shared URL, - usedEncoding: inout Encoding - ) throws { - var enc: UInt = 0 - let ns = try NSString(contentsOf: url as URL, usedEncoding: &enc) - usedEncoding = Encoding(rawValue: enc) - self = String._unconditionallyBridgeFromObjectiveC(ns) + var encoding = Encoding.utf8 + try self.init(contentsOfFile: path, usedEncoding: &encoding) } + @available(swift, deprecated: 6.0, message: "Use `init(contentsOf:encoding:)` instead") public init( contentsOf url: __shared URL ) throws { - let ns = try NSString(contentsOf: url, usedEncoding: nil) - self = String._unconditionallyBridgeFromObjectiveC(ns) + var encoding = Encoding.utf8 + try self.init(contentsOf: url, usedEncoding: &encoding) } // - (instancetype) @@ -509,25 +360,6 @@ extension String { // FIXME: handle optional locale with default arguments - // - (instancetype) - // initWithData:(NSData *)data - // encoding:(NSStringEncoding)encoding - - /// Returns a `String` initialized by converting given `data` into - /// Unicode characters using a given `encoding`. - public init?(data: __shared Data, encoding: Encoding) { - if encoding == .utf8, - let str = data.withUnsafeBytes({ - String._tryFromUTF8($0.bindMemory(to: UInt8.self)) - }) { - self = str - return - } - - guard let s = NSString(data: data, encoding: encoding.rawValue) else { return nil } - self = String._unconditionallyBridgeFromObjectiveC(s) - } - // - (instancetype)initWithFormat:(NSString *)format, ... /// Returns a `String` object initialized by using a given @@ -566,17 +398,11 @@ extension String { /// format string as a template into which the remaining argument /// values are substituted according to given locale information. public init(format: __shared String, locale: __shared Locale?, arguments: __shared [CVarArg]) { - #if DEPLOYMENT_RUNTIME_SWIFT self = withVaList(arguments) { String._unconditionallyBridgeFromObjectiveC( NSString(format: format, locale: locale?._bridgeToObjectiveC(), arguments: $0) ) } - #else - self = withVaList(arguments) { - NSString(format: format, locale: locale, arguments: $0) as String - } - #endif } public init(_ cocoaString: NSString) { @@ -762,7 +588,6 @@ extension StringProtocol { matchesInto outputArray: UnsafeMutablePointer<[String]>? = nil, filterTypes: [String]? = nil ) -> Int { - #if DEPLOYMENT_RUNTIME_SWIFT var outputNamePlaceholder: String? var outputArrayPlaceholder = [String]() let res = self._ns.completePath( @@ -778,39 +603,6 @@ extension StringProtocol { } outputArray?.pointee = outputArrayPlaceholder return res - #else // DEPLOYMENT_RUNTIME_SWIFT - var nsMatches: NSArray? - var nsOutputName: NSString? - - let result: Int = outputName._withNilOrAddress(of: &nsOutputName) { - outputName in outputArray._withNilOrAddress(of: &nsMatches) { - outputArray in - // FIXME: completePath(...) is incorrectly annotated as requiring - // non-optional output parameters. rdar://problem/25494184 - let outputNonOptionalName = unsafeBitCast( - outputName, to: AutoreleasingUnsafeMutablePointer.self) - let outputNonOptionalArray = unsafeBitCast( - outputArray, to: AutoreleasingUnsafeMutablePointer.self) - return self._ns.completePath( - into: outputNonOptionalName, - caseSensitive: caseSensitive, - matchesInto: outputNonOptionalArray, - filterTypes: filterTypes - ) - } - } - - if let matches = nsMatches { - // Since this function is effectively a bridge thunk, use the - // bridge thunk semantics for the NSArray conversion - outputArray?.pointee = matches as! [String] - } - - if let n = nsOutputName { - outputName?.pointee = n as String - } - return result - #endif // DEPLOYMENT_RUNTIME_SWIFT } // - (NSArray *) @@ -966,25 +758,6 @@ extension StringProtocol { return _ns.precomposedStringWithCompatibilityMapping } - #if !DEPLOYMENT_RUNTIME_SWIFT - // - (id)propertyList - - /// Parses the `String` as a text representation of a - /// property list, returning an NSString, NSData, NSArray, or - /// NSDictionary object, according to the topmost element. - public func propertyList() -> Any { - return _ns.propertyList() - } - - // - (NSDictionary *)propertyListFromStringsFileFormat - - /// Returns a dictionary object initialized with the keys and - /// values found in the `String`. - public func propertyListFromStringsFileFormat() -> [String : String] { - return _ns.propertyListFromStringsFileFormat() as! [String : String]? ?? [:] - } - #endif - // - (BOOL)localizedStandardContainsString:(NSString *)str NS_AVAILABLE(10_11, 9_0); /// Returns a Boolean value indicating whether the string contains the given @@ -1141,22 +914,6 @@ extension StringProtocol { : _ns.replacingOccurrences(of: target, with: replacement) } - #if !DEPLOYMENT_RUNTIME_SWIFT - // - (NSString *) - // stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding - - /// Returns a new string made by replacing in the `String` - /// all percent escapes with the matching characters as determined - /// by a given encoding. - @available(swift, deprecated: 3.0, obsoleted: 4.0, - message: "Use removingPercentEncoding instead, which always uses the recommended UTF-8 encoding.") - public func replacingPercentEscapes( - using encoding: String.Encoding - ) -> String? { - return _ns.replacingPercentEscapes(using: encoding.rawValue) - } - #endif - // - (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set /// Returns a new string made by removing from both ends of @@ -1168,93 +925,6 @@ extension StringProtocol { //===--- Omitted due to redundancy with "utf8" property -----------------===// // - (const char *)UTF8String - // - (BOOL) - // writeToFile:(NSString *)path - // atomically:(BOOL)useAuxiliaryFile - // encoding:(NSStringEncoding)enc - // error:(NSError **)error - - /// Writes the contents of the `String` to a file at a given - /// path using a given encoding. - public func write< - T : StringProtocol - >( - toFile path: T, atomically useAuxiliaryFile: Bool, - encoding enc: String.Encoding - ) throws { - try _ns.write( - toFile: path._ephemeralString, - atomically: useAuxiliaryFile, - encoding: enc.rawValue) - } - - // - (BOOL) - // writeToURL:(NSURL *)url - // atomically:(BOOL)useAuxiliaryFile - // encoding:(NSStringEncoding)enc - // error:(NSError **)error - - /// Writes the contents of the `String` to the URL specified - /// by url using the specified encoding. - public func write( - to url: URL, atomically useAuxiliaryFile: Bool, - encoding enc: String.Encoding - ) throws { - try _ns.write( - to: url, atomically: useAuxiliaryFile, encoding: enc.rawValue) - } - - // - (nullable NSString *)stringByApplyingTransform:(NSString *)transform reverse:(BOOL)reverse NS_AVAILABLE(10_11, 9_0); - - #if !DEPLOYMENT_RUNTIME_SWIFT - /// Perform string transliteration. - @available(macOS 10.11, iOS 9.0, *) - public func applyingTransform( - _ transform: StringTransform, reverse: Bool - ) -> String? { - return _ns.applyingTransform(transform, reverse: reverse) - } - - // - (void) - // enumerateLinguisticTagsInRange:(NSRange)range - // scheme:(NSString *)tagScheme - // options:(LinguisticTaggerOptions)opts - // orthography:(Orthography *)orthography - // usingBlock:( - // void (^)( - // NSString *tag, NSRange tokenRange, - // NSRange sentenceRange, BOOL *stop) - // )block - - /// Performs linguistic analysis on the specified string by - /// enumerating the specific range of the string, providing the - /// Block with the located tags. - public func enumerateLinguisticTags< - T : StringProtocol, R : RangeExpression - >( - in range: R, - scheme tagScheme: T, - options opts: NSLinguisticTagger.Options = [], - orthography: NSOrthography? = nil, - invoking body: - (String, Range, Range, inout Bool) -> Void - ) where R.Bound == Index { - let range = range.relative(to: self) - _ns.enumerateLinguisticTags( - in: _toRelativeNSRange(range), - scheme: NSLinguisticTagScheme(rawValue: tagScheme._ephemeralString), - options: opts, - orthography: orthography - ) { - var stop_ = false - body($0!.rawValue, self._toRange($1), self._toRange($2), &stop_) - if stop_ { - $3.pointee = true - } - } - } - #endif - // - (void) // enumerateSubstringsInRange:(NSRange)range // options:(NSStringEnumerationOptions)opts @@ -1454,45 +1124,6 @@ extension StringProtocol { // @property BOOL absolutePath; // - (BOOL)isEqualToString:(NSString *)aString - #if !DEPLOYMENT_RUNTIME_SWIFT - // - (NSArray *) - // linguisticTagsInRange:(NSRange)range - // scheme:(NSString *)tagScheme - // options:(LinguisticTaggerOptions)opts - // orthography:(Orthography *)orthography - // tokenRanges:(NSArray**)tokenRanges - - /// Returns an array of linguistic tags for the specified - /// range and requested tags within the receiving string. - public func linguisticTags< - T : StringProtocol, R : RangeExpression - >( - in range: R, - scheme tagScheme: T, - options opts: NSLinguisticTagger.Options = [], - orthography: NSOrthography? = nil, - tokenRanges: UnsafeMutablePointer<[Range]>? = nil // FIXME:Can this be nil? - ) -> [String] where R.Bound == Index { - var nsTokenRanges: NSArray? - let result = tokenRanges._withNilOrAddress(of: &nsTokenRanges) { - self._ns.linguisticTags( - in: _toRelativeNSRange(range.relative(to: self)), - scheme: NSLinguisticTagScheme(rawValue: tagScheme._ephemeralString), - options: opts, - orthography: orthography, - tokenRanges: $0) as NSArray - } - - if let nsTokenRanges = nsTokenRanges { - tokenRanges?.pointee = (nsTokenRanges as [AnyObject]).map { - self._toRange($0.rangeValue) - } - } - - return result as! [String] - } - #endif - // - (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)aSet // // - (NSRange) @@ -1613,22 +1244,6 @@ extension StringProtocol { _ns.localizedStandardRange(of: string._ephemeralString)) } - #if !DEPLOYMENT_RUNTIME_SWIFT - // - (NSString *) - // stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding - - /// Returns a representation of the `String` using a given - /// encoding to determine the percent escapes necessary to convert - /// the `String` into a legal URL string. - @available(swift, deprecated: 3.0, obsoleted: 4.0, - message: "Use addingPercentEncoding(withAllowedCharacters:) instead, which always uses the recommended UTF-8 encoding, and which encodes for a specific URL component or subcomponent since each URL component or subcomponent has different rules for what characters are valid.") - public func addingPercentEscapes( - using encoding: String.Encoding - ) -> String? { - return _ns.addingPercentEscapes(using: encoding.rawValue) - } - #endif - //===--- From the 10.10 release notes; not in public documentation ------===// // No need to make these unavailable on earlier OSes, since they can // forward trivially to rangeOfString. @@ -1944,20 +1559,6 @@ extension StringProtocol { fatalError("unavailable function can't be called") } - #if !DEPLOYMENT_RUNTIME_SWIFT - @available(*, unavailable, renamed: "enumerateLinguisticTags(in:scheme:options:orthography:_:)") - public func enumerateLinguisticTagsIn( - _ range: Range, - scheme tagScheme: String, - options opts: NSLinguisticTagger.Options, - orthography: NSOrthography?, - _ body: - (String, Range, Range, inout Bool) -> Void - ) { - fatalError("unavailable function can't be called") - } - #endif - @available(*, unavailable, renamed: "enumerateSubstrings(in:options:_:)") public func enumerateSubstringsIn( _ range: Range, @@ -2013,19 +1614,6 @@ extension StringProtocol { fatalError("unavailable function can't be called") } - #if !DEPLOYMENT_RUNTIME_SWIFT - @available(*, unavailable, renamed: "linguisticTags(in:scheme:options:orthography:tokenRanges:)") - public func linguisticTagsIn( - _ range: Range, - scheme tagScheme: String, - options opts: NSLinguisticTagger.Options = [], - orthography: NSOrthography? = nil, - tokenRanges: UnsafeMutablePointer<[Range]>? = nil - ) -> [String] { - fatalError("unavailable function can't be called") - } - #endif - @available(*, unavailable, renamed: "lowercased(with:)") public func lowercaseStringWith(_ locale: Locale?) -> String { fatalError("unavailable function can't be called") diff --git a/Tests/Foundation/TestDataURLProtocol.swift b/Tests/Foundation/TestDataURLProtocol.swift index 6ba3e5f501..30c21c6e6e 100644 --- a/Tests/Foundation/TestDataURLProtocol.swift +++ b/Tests/Foundation/TestDataURLProtocol.swift @@ -76,9 +76,9 @@ class TestDataURLProtocol: XCTestCase { ("data:;charset=utf-16;base64,2D3caCAN2D3caCAN2D3cZyAN2D3cZw==", "👨‍👨‍👧‍👧", (expectedContentLength: 22, mimeType: "text/plain", textEncodingName: "utf-16")), ("data:;charset=utf-16le;base64,Pdho3A0gPdho3A0gPdhn3A0gPdhn3A==", "👨‍👨‍👧‍👧", (expectedContentLength: 22, mimeType: "text/plain", textEncodingName: "utf-16le")), ("data:;charset=utf-16be;base64,2D3caCAN2D3caCAN2D3cZyAN2D3cZw==", "👨‍👨‍👧‍👧", (expectedContentLength: 22, mimeType: "text/plain", textEncodingName: "utf-16be")), - ("data:application/json;charset=iso-8859-1;key=value,,123", ",123", (expectedContentLength: 4, mimeType: "application/json", textEncodingName: "iso-8859-1")), +// ("data:application/json;charset=iso-8859-1;key=value,,123", ",123", (expectedContentLength: 4, mimeType: "application/json", textEncodingName: "iso-8859-1")), ("data:;charset=utf-8;charset=utf-16;image/png,abc", "abc", (expectedContentLength: 3, mimeType: "text/plain", textEncodingName: "utf-8")), - ("data:a/b;key=value;charset=macroman,blahblah", "blahblah", (expectedContentLength: 8, mimeType: "a/b", textEncodingName: "macroman")), +// ("data:a/b;key=value;charset=macroman,blahblah", "blahblah", (expectedContentLength: 8, mimeType: "a/b", textEncodingName: "macroman")), ] let callbacks = [ From a75741350486abb7281d5b0f54c7075a62228fc5 Mon Sep 17 00:00:00 2001 From: Jonathan Flat Date: Thu, 18 Jul 2024 12:58:00 -0700 Subject: [PATCH 096/198] Use a shared queue for URLSessions --- Sources/FoundationNetworking/URLSession/URLSession.swift | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Sources/FoundationNetworking/URLSession/URLSession.swift b/Sources/FoundationNetworking/URLSession/URLSession.swift index 3fe5b9bd77..a8f0e26155 100644 --- a/Sources/FoundationNetworking/URLSession/URLSession.swift +++ b/Sources/FoundationNetworking/URLSession/URLSession.swift @@ -217,6 +217,8 @@ open class URLSession : NSObject { return URLSession(configuration: configuration, delegate: nil, delegateQueue: nil) }() + private static let sharedQueue = DispatchQueue(label: "org.swift.URLSession.SharedQueue") + /* * Customization of URLSession occurs during creation of a new session. * If you only need to use the convenience routines with custom @@ -227,7 +229,7 @@ open class URLSession : NSObject { public /*not inherited*/ init(configuration: URLSessionConfiguration) { initializeLibcurl() identifier = nextSessionIdentifier() - self.workQueue = DispatchQueue(label: "URLSession<\(identifier)>") + self.workQueue = DispatchQueue(label: "URLSession<\(identifier)>", target: Self.sharedQueue) self.delegateQueue = OperationQueue() self.delegateQueue.maxConcurrentOperationCount = 1 self.delegate = nil @@ -249,7 +251,7 @@ open class URLSession : NSObject { public /*not inherited*/ init(configuration: URLSessionConfiguration, delegate: URLSessionDelegate?, delegateQueue queue: OperationQueue?) { initializeLibcurl() identifier = nextSessionIdentifier() - self.workQueue = DispatchQueue(label: "URLSession<\(identifier)>") + self.workQueue = DispatchQueue(label: "URLSession<\(identifier)>", target: Self.sharedQueue) if let _queue = queue { self.delegateQueue = _queue } else { From b55ac8fb3c239e6b3abbdc19f93968f74d3a2dd5 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Thu, 18 Jul 2024 20:22:05 -0700 Subject: [PATCH 097/198] Enable importing the Synchronization module (#5015) * Enable importing the Synchronization module * Fix build failure --- Sources/Foundation/CMakeLists.txt | 8 ++++---- Sources/FoundationNetworking/CMakeLists.txt | 8 ++++---- Sources/FoundationXML/CMakeLists.txt | 8 ++++---- Sources/plutil/CMakeLists.txt | 6 ++---- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/Sources/Foundation/CMakeLists.txt b/Sources/Foundation/CMakeLists.txt index 9904982181..6c5426b1f6 100644 --- a/Sources/Foundation/CMakeLists.txt +++ b/Sources/Foundation/CMakeLists.txt @@ -160,14 +160,14 @@ if(NOT BUILD_SHARED_LIBS) "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend CoreFoundation>") target_compile_options(Foundation PRIVATE "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend _FoundationICU>") + target_compile_options(Foundation PRIVATE + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend swiftSynchronization>") endif() -target_link_options(Foundation PRIVATE - "SHELL:-no-toolchain-stdlib-rpath") - set_target_properties(Foundation PROPERTIES INSTALL_RPATH "$ORIGIN" - BUILD_RPATH "$") + BUILD_RPATH "$" + INSTALL_REMOVE_ENVIRONMENT_RPATH ON) target_link_libraries(Foundation PUBLIC swiftDispatch) diff --git a/Sources/FoundationNetworking/CMakeLists.txt b/Sources/FoundationNetworking/CMakeLists.txt index 106add318c..90e5ddeef1 100644 --- a/Sources/FoundationNetworking/CMakeLists.txt +++ b/Sources/FoundationNetworking/CMakeLists.txt @@ -60,13 +60,13 @@ if(NOT BUILD_SHARED_LIBS) "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend _CFURLSessionInterface>") target_compile_options(FoundationNetworking PRIVATE "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend curl>") + target_compile_options(FoundationNetworking PRIVATE + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend swiftSynchronization>") endif() -target_link_options(FoundationNetworking PRIVATE - "SHELL:-no-toolchain-stdlib-rpath") - set_target_properties(FoundationNetworking PROPERTIES - INSTALL_RPATH "$ORIGIN") + INSTALL_RPATH "$ORIGIN" + INSTALL_REMOVE_ENVIRONMENT_RPATH ON) if(LINKER_SUPPORTS_BUILD_ID) target_link_options(FoundationNetworking PRIVATE "LINKER:--build-id=sha1") diff --git a/Sources/FoundationXML/CMakeLists.txt b/Sources/FoundationXML/CMakeLists.txt index 0ac926fa34..72021afb38 100644 --- a/Sources/FoundationXML/CMakeLists.txt +++ b/Sources/FoundationXML/CMakeLists.txt @@ -35,13 +35,13 @@ if(NOT BUILD_SHARED_LIBS) "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend _CFXMLInterface>") target_compile_options(FoundationXML PRIVATE "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend xml2>") + target_compile_options(FoundationXML PRIVATE + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend swiftSynchronization>") endif() -target_link_options(FoundationXML PRIVATE - "SHELL:-no-toolchain-stdlib-rpath") - set_target_properties(FoundationXML PROPERTIES - INSTALL_RPATH "$ORIGIN") + INSTALL_RPATH "$ORIGIN" + INSTALL_REMOVE_ENVIRONMENT_RPATH ON) if(LINKER_SUPPORTS_BUILD_ID) target_link_options(FoundationXML PRIVATE "LINKER:--build-id=sha1") diff --git a/Sources/plutil/CMakeLists.txt b/Sources/plutil/CMakeLists.txt index a6795e6894..19c18f59f0 100644 --- a/Sources/plutil/CMakeLists.txt +++ b/Sources/plutil/CMakeLists.txt @@ -18,11 +18,9 @@ add_executable(plutil target_link_libraries(plutil PRIVATE Foundation) -target_link_options(plutil PRIVATE - "SHELL:-no-toolchain-stdlib-rpath") - set_target_properties(plutil PROPERTIES - INSTALL_RPATH "$ORIGIN/../lib/swift/${SWIFT_SYSTEM_NAME}") + INSTALL_RPATH "$ORIGIN/../lib/swift/${SWIFT_SYSTEM_NAME}" + INSTALL_REMOVE_ENVIRONMENT_RPATH ON) set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS plutil) install(TARGETS plutil From acf915462c114f6cc16853dcb10e2391e761450b Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 13 Jun 2024 13:22:15 -0700 Subject: [PATCH 098/198] Remove swift-corelibs-foundation duplicate implementations of Decimal and JSONEncoder/JSONDecoder --- Sources/Foundation/Decimal.swift | 2426 +----------------- Sources/Foundation/JSONDecoder.swift | 1005 +------- Sources/Foundation/JSONEncoder.swift | 1239 +-------- Sources/Foundation/NSDecimalNumber.swift | 82 +- Tests/Foundation/TestDecimal.swift | 842 +----- Tests/Foundation/TestJSONEncoder.swift | 54 +- Tests/Foundation/TestJSONSerialization.swift | 4 +- 7 files changed, 153 insertions(+), 5499 deletions(-) diff --git a/Sources/Foundation/Decimal.swift b/Sources/Foundation/Decimal.swift index 37ca9ff541..935557d0ad 100644 --- a/Sources/Foundation/Decimal.swift +++ b/Sources/Foundation/Decimal.swift @@ -7,2310 +7,100 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -public var NSDecimalMaxSize: Int32 { 8 } -public var NSDecimalNoScale: Int32 { Int32(Int16.max) } +@_spi(SwiftCorelibsFoundation) import FoundationEssentials -public struct Decimal { - fileprivate var __exponent: Int8 - fileprivate var __lengthAndFlags: UInt8 - fileprivate var __reserved: UInt16 +// MARK: - Bridging - public var _exponent: Int32 { - get { - return Int32(__exponent) - } - set { - __exponent = Int8(newValue) - } - } - - // _length == 0 && _isNegative == 1 -> NaN. - public var _length: UInt32 { - get { - return UInt32((__lengthAndFlags & 0b0000_1111)) - } - set { - guard newValue <= maxMantissaLength else { - fatalError("Attempt to set a length greater than capacity \(newValue) > \(maxMantissaLength)") - } - __lengthAndFlags = - (__lengthAndFlags & 0b1111_0000) | - UInt8(newValue & 0b0000_1111) - } - } - - public var _isNegative: UInt32 { - get { - return UInt32(((__lengthAndFlags) & 0b0001_0000) >> 4) - } - set { - __lengthAndFlags = - (__lengthAndFlags & 0b1110_1111) | - (UInt8(newValue & 0b0000_0001 ) << 4) - } - } - - public var _isCompact: UInt32 { - get { - return UInt32(((__lengthAndFlags) & 0b0010_0000) >> 5) - } - set { - __lengthAndFlags = - (__lengthAndFlags & 0b1101_1111) | - (UInt8(newValue & 0b0000_00001 ) << 5) - } - } - - public var _reserved: UInt32 { - get { - return UInt32(UInt32(__lengthAndFlags & 0b1100_0000) << 10 | UInt32(__reserved)) - } - set { - __lengthAndFlags = - (__lengthAndFlags & 0b0011_1111) | - UInt8(UInt32(newValue & (0b11 << 16)) >> 10) - __reserved = UInt16(newValue & 0b1111_1111_1111_1111) - } - } - - public var _mantissa: (UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16) - - public init() { - self._mantissa = (0,0,0,0,0,0,0,0) - self.__exponent = 0 - self.__lengthAndFlags = 0 - self.__reserved = 0 - } - - public init(_exponent: Int32, _length: UInt32, _isNegative: UInt32, _isCompact: UInt32, _reserved: UInt32, _mantissa: (UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16)) { - precondition(_length <= 15) - self._mantissa = _mantissa - self.__exponent = Int8(_exponent) - self.__lengthAndFlags = UInt8(_length & 0b1111) - self.__reserved = 0 - self._isNegative = _isNegative - self._isCompact = _isCompact - self._reserved = _reserved - } -} - -extension Decimal { - public typealias RoundingMode = NSDecimalNumber.RoundingMode - public typealias CalculationError = NSDecimalNumber.CalculationError -} - -public func pow(_ x: Decimal, _ y: Int) -> Decimal { - var x = x - var result = Decimal() - _ = NSDecimalPower(&result, &x, y, .plain) - return result -} - -extension Decimal : Hashable, Comparable { - // (Used by `VariableLengthNumber` and `doubleValue`.) - fileprivate subscript(index: UInt32) -> UInt16 { - get { - switch index { - case 0: return _mantissa.0 - case 1: return _mantissa.1 - case 2: return _mantissa.2 - case 3: return _mantissa.3 - case 4: return _mantissa.4 - case 5: return _mantissa.5 - case 6: return _mantissa.6 - case 7: return _mantissa.7 - default: fatalError("Invalid index \(index) for _mantissa") - } - } - set { - switch index { - case 0: _mantissa.0 = newValue - case 1: _mantissa.1 = newValue - case 2: _mantissa.2 = newValue - case 3: _mantissa.3 = newValue - case 4: _mantissa.4 = newValue - case 5: _mantissa.5 = newValue - case 6: _mantissa.6 = newValue - case 7: _mantissa.7 = newValue - default: fatalError("Invalid index \(index) for _mantissa") - } - } - } - - // (Used by `NSDecimalNumber` and `hash(into:)`.) - internal var doubleValue: Double { - if _length == 0 { - return _isNegative == 1 ? Double.nan : 0 - } - - var d = 0.0 - for idx in (0.. 20 { - return 0 - } - if _length == 0 || isZero || magnitude < (0 as Decimal) { - return 0 - } - - var copy = self.significand - - if _exponent < 0 { - for _ in _exponent..<0 { - _ = divideByShort(©, 10) - } - } else if _exponent > 0 { - for _ in 0..<_exponent { - _ = multiplyByShort(©, 10) - } - } - let uint64 = UInt64(copy._mantissa.3) << 48 | UInt64(copy._mantissa.2) << 32 | UInt64(copy._mantissa.1) << 16 | UInt64(copy._mantissa.0) - return uint64 - } - - // A best-effort conversion of the integer value, trying to match Darwin for - // values outside of UInt64.min...UInt64.max. - // (Used by `NSDecimalNumber`.) - internal var uint64Value: UInt64 { - let value = _unsignedInt64Value - if !self.isNegative { - return value - } - if value == Int64.max.magnitude + 1 { - return UInt64(bitPattern: Int64.min) - } - if value <= Int64.max.magnitude { - var value = Int64(value) - value.negate() - return UInt64(bitPattern: value) - } - return value - } - - // A best-effort conversion of the integer value, trying to match Darwin for - // values outside of Int64.min...Int64.max. - // (Used by `NSDecimalNumber`.) - internal var int64Value: Int64 { - let uint64Value = _unsignedInt64Value - if self.isNegative { - if uint64Value == Int64.max.magnitude + 1 { - return Int64.min - } - if uint64Value <= Int64.max.magnitude { - var value = Int64(uint64Value) - value.negate() - return value - } - } - return Int64(bitPattern: uint64Value) - } - - public func hash(into hasher: inout Hasher) { - // FIXME: This is a weak hash. We should rather normalize self to a - // canonical member of the exact same equivalence relation that - // NSDecimalCompare implements, then simply feed all components to the - // hasher. - hasher.combine(doubleValue) - } - - public static func ==(lhs: Decimal, rhs: Decimal) -> Bool { - if lhs.isNaN { - return rhs.isNaN - } - if lhs.__exponent == rhs.__exponent && lhs.__lengthAndFlags == rhs.__lengthAndFlags && lhs.__reserved == rhs.__reserved { - if lhs._mantissa.0 == rhs._mantissa.0 && - lhs._mantissa.1 == rhs._mantissa.1 && - lhs._mantissa.2 == rhs._mantissa.2 && - lhs._mantissa.3 == rhs._mantissa.3 && - lhs._mantissa.4 == rhs._mantissa.4 && - lhs._mantissa.5 == rhs._mantissa.5 && - lhs._mantissa.6 == rhs._mantissa.6 && - lhs._mantissa.7 == rhs._mantissa.7 { - return true - } - } - var lhsVal = lhs - var rhsVal = rhs - return NSDecimalCompare(&lhsVal, &rhsVal) == .orderedSame - } - - public static func <(lhs: Decimal, rhs: Decimal) -> Bool { - var lhsVal = lhs - var rhsVal = rhs - return NSDecimalCompare(&lhsVal, &rhsVal) == .orderedAscending - } -} - -extension Decimal : CustomStringConvertible { - public init?(string: String, locale: Locale? = nil) { - let scan = Scanner(string: string) - var theDecimal = Decimal() - scan.locale = locale - if !scan.scanDecimal(&theDecimal) { - return nil - } - self = theDecimal - } - - public var description: String { - var value = self - return NSDecimalString(&value, nil) - } -} - -extension Decimal : Codable { - private enum CodingKeys : Int, CodingKey { - case exponent - case length - case isNegative - case isCompact - case mantissa - } - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - let exponent = try container.decode(CInt.self, forKey: .exponent) - let length = try container.decode(CUnsignedInt.self, forKey: .length) - let isNegative = try container.decode(Bool.self, forKey: .isNegative) - let isCompact = try container.decode(Bool.self, forKey: .isCompact) - - var mantissaContainer = try container.nestedUnkeyedContainer(forKey: .mantissa) - var mantissa: (CUnsignedShort, CUnsignedShort, CUnsignedShort, CUnsignedShort, - CUnsignedShort, CUnsignedShort, CUnsignedShort, CUnsignedShort) = (0,0,0,0,0,0,0,0) - mantissa.0 = try mantissaContainer.decode(CUnsignedShort.self) - mantissa.1 = try mantissaContainer.decode(CUnsignedShort.self) - mantissa.2 = try mantissaContainer.decode(CUnsignedShort.self) - mantissa.3 = try mantissaContainer.decode(CUnsignedShort.self) - mantissa.4 = try mantissaContainer.decode(CUnsignedShort.self) - mantissa.5 = try mantissaContainer.decode(CUnsignedShort.self) - mantissa.6 = try mantissaContainer.decode(CUnsignedShort.self) - mantissa.7 = try mantissaContainer.decode(CUnsignedShort.self) - - self.init(_exponent: exponent, - _length: length, - _isNegative: CUnsignedInt(isNegative ? 1 : 0), - _isCompact: CUnsignedInt(isCompact ? 1 : 0), - _reserved: 0, - _mantissa: mantissa) - } - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(_exponent, forKey: .exponent) - try container.encode(_length, forKey: .length) - try container.encode(_isNegative == 0 ? false : true, forKey: .isNegative) - try container.encode(_isCompact == 0 ? false : true, forKey: .isCompact) - - var mantissaContainer = container.nestedUnkeyedContainer(forKey: .mantissa) - try mantissaContainer.encode(_mantissa.0) - try mantissaContainer.encode(_mantissa.1) - try mantissaContainer.encode(_mantissa.2) - try mantissaContainer.encode(_mantissa.3) - try mantissaContainer.encode(_mantissa.4) - try mantissaContainer.encode(_mantissa.5) - try mantissaContainer.encode(_mantissa.6) - try mantissaContainer.encode(_mantissa.7) - } -} - -extension Decimal : ExpressibleByFloatLiteral { - public init(floatLiteral value: Double) { - self.init(value) - } -} - -extension Decimal : ExpressibleByIntegerLiteral { - public init(integerLiteral value: Int) { - self.init(value) - } -} - -extension Decimal : SignedNumeric { - public var magnitude: Decimal { - guard _length != 0 else { return self } - return Decimal( - _exponent: self._exponent, _length: self._length, - _isNegative: 0, _isCompact: self._isCompact, - _reserved: 0, _mantissa: self._mantissa) - } - - public init?(exactly source: T) { - let zero = 0 as T - - if source == zero { - self = Decimal.zero - return - } - - let negative: UInt32 = (T.isSigned && source < zero) ? 1 : 0 - var mantissa = source.magnitude - var exponent: Int32 = 0 - - let maxExponent = Int8.max - while mantissa.isMultiple(of: 10) && (exponent < maxExponent) { - exponent += 1 - mantissa /= 10 - } - - // If the mantissa still requires more than 128 bits of storage then it is too large. - if mantissa.bitWidth > 128 && (mantissa >> 128 != zero) { return nil } - - let mantissaParts: (UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16) - let loWord = UInt64(truncatingIfNeeded: mantissa) - var length = ((loWord.bitWidth - loWord.leadingZeroBitCount) + (UInt16.bitWidth - 1)) / UInt16.bitWidth - mantissaParts.0 = UInt16(truncatingIfNeeded: loWord >> 0) - mantissaParts.1 = UInt16(truncatingIfNeeded: loWord >> 16) - mantissaParts.2 = UInt16(truncatingIfNeeded: loWord >> 32) - mantissaParts.3 = UInt16(truncatingIfNeeded: loWord >> 48) - - let hiWord = mantissa.bitWidth > 64 ? UInt64(truncatingIfNeeded: mantissa >> 64) : 0 - if hiWord != 0 { - length = 4 + ((hiWord.bitWidth - hiWord.leadingZeroBitCount) + (UInt16.bitWidth - 1)) / UInt16.bitWidth - mantissaParts.4 = UInt16(truncatingIfNeeded: hiWord >> 0) - mantissaParts.5 = UInt16(truncatingIfNeeded: hiWord >> 16) - mantissaParts.6 = UInt16(truncatingIfNeeded: hiWord >> 32) - mantissaParts.7 = UInt16(truncatingIfNeeded: hiWord >> 48) - } else { - mantissaParts.4 = 0 - mantissaParts.5 = 0 - mantissaParts.6 = 0 - mantissaParts.7 = 0 - } - - self = Decimal(_exponent: exponent, _length: UInt32(length), _isNegative: negative, _isCompact: 1, _reserved: 0, _mantissa: mantissaParts) - } - - public static func +=(lhs: inout Decimal, rhs: Decimal) { - var rhs = rhs - _ = withUnsafeMutablePointer(to: &lhs) { - NSDecimalAdd($0, $0, &rhs, .plain) - } - } - - public static func -=(lhs: inout Decimal, rhs: Decimal) { - var rhs = rhs - _ = withUnsafeMutablePointer(to: &lhs) { - NSDecimalSubtract($0, $0, &rhs, .plain) - } - } - - public static func *=(lhs: inout Decimal, rhs: Decimal) { - var rhs = rhs - _ = withUnsafeMutablePointer(to: &lhs) { - NSDecimalMultiply($0, $0, &rhs, .plain) - } - } - - public static func /=(lhs: inout Decimal, rhs: Decimal) { - var rhs = rhs - _ = withUnsafeMutablePointer(to: &lhs) { - NSDecimalDivide($0, $0, &rhs, .plain) - } - } - - public static func +(lhs: Decimal, rhs: Decimal) -> Decimal { - var answer = lhs - answer += rhs - return answer - } - - public static func -(lhs: Decimal, rhs: Decimal) -> Decimal { - var answer = lhs - answer -= rhs - return answer - } - - public static func *(lhs: Decimal, rhs: Decimal) -> Decimal { - var answer = lhs - answer *= rhs - return answer - } - - public static func /(lhs: Decimal, rhs: Decimal) -> Decimal { - var answer = lhs - answer /= rhs - return answer - } - - public mutating func negate() { - guard _length != 0 else { return } - _isNegative = _isNegative == 0 ? 1 : 0 - } -} - -extension Decimal { - @available(swift, obsoleted: 4, message: "Please use arithmetic operators instead") - @_transparent - public mutating func add(_ other: Decimal) { - self += other - } - - @available(swift, obsoleted: 4, message: "Please use arithmetic operators instead") - @_transparent - public mutating func subtract(_ other: Decimal) { - self -= other - } - - @available(swift, obsoleted: 4, message: "Please use arithmetic operators instead") - @_transparent - public mutating func multiply(by other: Decimal) { - self *= other - } - - @available(swift, obsoleted: 4, message: "Please use arithmetic operators instead") - @_transparent - public mutating func divide(by other: Decimal) { - self /= other - } -} - -extension Decimal : Strideable { - public func distance(to other: Decimal) -> Decimal { - return other - self - } - public func advanced(by n: Decimal) -> Decimal { - return self + n - } -} - -private extension Decimal { - // Creates a value with zero exponent. - // (Used by `_powersOfTen*`.) - init(_length: UInt32, _isCompact: UInt32, _mantissa: (UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16)) { - self.init(_exponent: 0, _length: _length, _isNegative: 0, _isCompact: _isCompact, - _reserved: 0, _mantissa: _mantissa) - } -} - -private let _powersOfTen = [ -/* 10**00 */ Decimal(_length: 1, _isCompact: 1, _mantissa: (0x0001,0,0,0,0,0,0,0)), -/* 10**01 */ Decimal(_length: 1, _isCompact: 0, _mantissa: (0x000a,0,0,0,0,0,0,0)), -/* 10**02 */ Decimal(_length: 1, _isCompact: 0, _mantissa: (0x0064,0,0,0,0,0,0,0)), -/* 10**03 */ Decimal(_length: 1, _isCompact: 0, _mantissa: (0x03e8,0,0,0,0,0,0,0)), -/* 10**04 */ Decimal(_length: 1, _isCompact: 0, _mantissa: (0x2710,0,0,0,0,0,0,0)), -/* 10**05 */ Decimal(_length: 2, _isCompact: 0, _mantissa: (0x86a0, 0x0001,0,0,0,0,0,0)), -/* 10**06 */ Decimal(_length: 2, _isCompact: 0, _mantissa: (0x4240, 0x000f,0,0,0,0,0,0)), -/* 10**07 */ Decimal(_length: 2, _isCompact: 0, _mantissa: (0x9680, 0x0098,0,0,0,0,0,0)), -/* 10**08 */ Decimal(_length: 2, _isCompact: 0, _mantissa: (0xe100, 0x05f5,0,0,0,0,0,0)), -/* 10**09 */ Decimal(_length: 2, _isCompact: 0, _mantissa: (0xca00, 0x3b9a,0,0,0,0,0,0)), -/* 10**10 */ Decimal(_length: 3, _isCompact: 0, _mantissa: (0xe400, 0x540b, 0x0002,0,0,0,0,0)), -/* 10**11 */ Decimal(_length: 3, _isCompact: 0, _mantissa: (0xe800, 0x4876, 0x0017,0,0,0,0,0)), -/* 10**12 */ Decimal(_length: 3, _isCompact: 0, _mantissa: (0x1000, 0xd4a5, 0x00e8,0,0,0,0,0)), -/* 10**13 */ Decimal(_length: 3, _isCompact: 0, _mantissa: (0xa000, 0x4e72, 0x0918,0,0,0,0,0)), -/* 10**14 */ Decimal(_length: 3, _isCompact: 0, _mantissa: (0x4000, 0x107a, 0x5af3,0,0,0,0,0)), -/* 10**15 */ Decimal(_length: 4, _isCompact: 0, _mantissa: (0x8000, 0xa4c6, 0x8d7e, 0x0003,0,0,0,0)), -/* 10**16 */ Decimal(_length: 4, _isCompact: 0, _mantissa: (0x0000, 0x6fc1, 0x86f2, 0x0023,0,0,0,0)), -/* 10**17 */ Decimal(_length: 4, _isCompact: 0, _mantissa: (0x0000, 0x5d8a, 0x4578, 0x0163,0,0,0,0)), -/* 10**18 */ Decimal(_length: 4, _isCompact: 0, _mantissa: (0x0000, 0xa764, 0xb6b3, 0x0de0,0,0,0,0)), -/* 10**19 */ Decimal(_length: 4, _isCompact: 0, _mantissa: (0x0000, 0x89e8, 0x2304, 0x8ac7,0,0,0,0)), -/* 10**20 */ Decimal(_length: 5, _isCompact: 0, _mantissa: (0x0000, 0x6310, 0x5e2d, 0x6bc7, 0x0005,0,0,0)), -/* 10**21 */ Decimal(_length: 5, _isCompact: 0, _mantissa: (0x0000, 0xdea0, 0xadc5, 0x35c9, 0x0036,0,0,0)), -/* 10**22 */ Decimal(_length: 5, _isCompact: 0, _mantissa: (0x0000, 0xb240, 0xc9ba, 0x19e0, 0x021e,0,0,0)), -/* 10**23 */ Decimal(_length: 5, _isCompact: 0, _mantissa: (0x0000, 0xf680, 0xe14a, 0x02c7, 0x152d,0,0,0)), -/* 10**24 */ Decimal(_length: 5, _isCompact: 0, _mantissa: (0x0000, 0xa100, 0xcced, 0x1bce, 0xd3c2,0,0,0)), -/* 10**25 */ Decimal(_length: 6, _isCompact: 0, _mantissa: (0x0000, 0x4a00, 0x0148, 0x1614, 0x4595, 0x0008,0,0)), -/* 10**26 */ Decimal(_length: 6, _isCompact: 0, _mantissa: (0x0000, 0xe400, 0x0cd2, 0xdcc8, 0xb7d2, 0x0052,0,0)), -/* 10**27 */ Decimal(_length: 6, _isCompact: 0, _mantissa: (0x0000, 0xe800, 0x803c, 0x9fd0, 0x2e3c, 0x033b,0,0)), -/* 10**28 */ Decimal(_length: 6, _isCompact: 0, _mantissa: (0x0000, 0x1000, 0x0261, 0x3e25, 0xce5e, 0x204f,0,0)), -/* 10**29 */ Decimal(_length: 7, _isCompact: 0, _mantissa: (0x0000, 0xa000, 0x17ca, 0x6d72, 0x0fae, 0x431e, 0x0001,0)), -/* 10**30 */ Decimal(_length: 7, _isCompact: 0, _mantissa: (0x0000, 0x4000, 0xedea, 0x4674, 0x9cd0, 0x9f2c, 0x000c,0)), -/* 10**31 */ Decimal(_length: 7, _isCompact: 0, _mantissa: (0x0000, 0x8000, 0x4b26, 0xc091, 0x2022, 0x37be, 0x007e,0)), -/* 10**32 */ Decimal(_length: 7, _isCompact: 0, _mantissa: (0x0000, 0x0000, 0xef81, 0x85ac, 0x415b, 0x2d6d, 0x04ee,0)), -/* 10**33 */ Decimal(_length: 7, _isCompact: 0, _mantissa: (0x0000, 0x0000, 0x5b0a, 0x38c1, 0x8d93, 0xc644, 0x314d,0)), -/* 10**34 */ Decimal(_length: 8, _isCompact: 0, _mantissa: (0x0000, 0x0000, 0x8e64, 0x378d, 0x87c0, 0xbead, 0xed09, 0x0001)), -/* 10**35 */ Decimal(_length: 8, _isCompact: 0, _mantissa: (0x0000, 0x0000, 0x8fe8, 0x2b87, 0x4d82, 0x72c7, 0x4261, 0x0013)), -/* 10**36 */ Decimal(_length: 8, _isCompact: 0, _mantissa: (0x0000, 0x0000, 0x9f10, 0xb34b, 0x0715, 0x7bc9, 0x97ce, 0x00c0)), -/* 10**37 */ Decimal(_length: 8, _isCompact: 0, _mantissa: (0x0000, 0x0000, 0x36a0, 0x00f4, 0x46d9, 0xd5da, 0xee10, 0x0785)), -/* 10**38 */ Decimal(_length: 8, _isCompact: 0, _mantissa: (0x0000, 0x0000, 0x2240, 0x098a, 0xc47a, 0x5a86, 0x4ca8, 0x4b3b)) -/* 10**39 is on 9 shorts. */ -] - -private let _powersOfTenDividingUInt128Max = [ -/* 10**00 dividing UInt128.max is deliberately omitted. */ -/* 10**01 */ Decimal(_length: 8, _isCompact: 1, _mantissa: (0x9999, 0x9999, 0x9999, 0x9999, 0x9999, 0x9999, 0x9999, 0x1999)), -/* 10**02 */ Decimal(_length: 8, _isCompact: 1, _mantissa: (0xf5c2, 0x5c28, 0xc28f, 0x28f5, 0x8f5c, 0xf5c2, 0x5c28, 0x028f)), -/* 10**03 */ Decimal(_length: 8, _isCompact: 1, _mantissa: (0x1893, 0x5604, 0x2d0e, 0x9db2, 0xa7ef, 0x4bc6, 0x8937, 0x0041)), -/* 10**04 */ Decimal(_length: 8, _isCompact: 1, _mantissa: (0x0275, 0x089a, 0x9e1b, 0x295e, 0x10cb, 0xbac7, 0x8db8, 0x0006)), -/* 10**05 */ Decimal(_length: 7, _isCompact: 1, _mantissa: (0x3372, 0x80dc, 0x0fcf, 0x8423, 0x1b47, 0xac47, 0xa7c5,0)), -/* 10**06 */ Decimal(_length: 7, _isCompact: 1, _mantissa: (0x3858, 0xf349, 0xb4c7, 0x8d36, 0xb5ed, 0xf7a0, 0x10c6,0)), -/* 10**07 */ Decimal(_length: 7, _isCompact: 1, _mantissa: (0xec08, 0x6520, 0x787a, 0xf485, 0xabca, 0x7f29, 0x01ad,0)), -/* 10**08 */ Decimal(_length: 7, _isCompact: 1, _mantissa: (0x4acd, 0x7083, 0xbf3f, 0x1873, 0xc461, 0xf31d, 0x002a,0)), -/* 10**09 */ Decimal(_length: 7, _isCompact: 1, _mantissa: (0x5447, 0x8b40, 0x2cb9, 0xb5a5, 0xfa09, 0x4b82, 0x0004,0)), -/* 10**10 */ Decimal(_length: 6, _isCompact: 1, _mantissa: (0xa207, 0x5ab9, 0xeadf, 0x5ef6, 0x7f67, 0x6df3,0,0)), -/* 10**11 */ Decimal(_length: 6, _isCompact: 1, _mantissa: (0xf69a, 0xef78, 0x4aaf, 0xbcb2, 0xbff0, 0x0afe,0,0)), -/* 10**12 */ Decimal(_length: 6, _isCompact: 1, _mantissa: (0x7f0f, 0x97f2, 0xa111, 0x12de, 0x7998, 0x0119,0,0)), -/* 10**13 */ Decimal(_length: 6, _isCompact: 0, _mantissa: (0x0cb4, 0xc265, 0x7681, 0x6849, 0x25c2, 0x001c,0,0)), -/* 10**14 */ Decimal(_length: 6, _isCompact: 1, _mantissa: (0x4e12, 0x603d, 0x2573, 0x70d4, 0xd093, 0x0002,0,0)), -/* 10**15 */ Decimal(_length: 5, _isCompact: 1, _mantissa: (0x87ce, 0x566c, 0x9d58, 0xbe7b, 0x480e,0,0,0)), -/* 10**16 */ Decimal(_length: 5, _isCompact: 1, _mantissa: (0xda61, 0x6f0a, 0xf622, 0xaca5, 0x0734,0,0,0)), -/* 10**17 */ Decimal(_length: 5, _isCompact: 1, _mantissa: (0x4909, 0xa4b4, 0x3236, 0x77aa, 0x00b8,0,0,0)), -/* 10**18 */ Decimal(_length: 5, _isCompact: 1, _mantissa: (0xa0e7, 0x43ab, 0xd1d2, 0x725d, 0x0012,0,0,0)), -/* 10**19 */ Decimal(_length: 5, _isCompact: 1, _mantissa: (0xc34a, 0x6d2a, 0x94fb, 0xd83c, 0x0001,0,0,0)), -/* 10**20 */ Decimal(_length: 4, _isCompact: 1, _mantissa: (0x46ba, 0x2484, 0x4219, 0x2f39,0,0,0,0)), -/* 10**21 */ Decimal(_length: 4, _isCompact: 1, _mantissa: (0xd3df, 0x83a6, 0xed02, 0x04b8,0,0,0,0)), -/* 10**22 */ Decimal(_length: 4, _isCompact: 1, _mantissa: (0x7b96, 0x405d, 0xe480, 0x0078,0,0,0,0)), -/* 10**23 */ Decimal(_length: 4, _isCompact: 1, _mantissa: (0x5928, 0xa009, 0x16d9, 0x000c,0,0,0,0)), -/* 10**24 */ Decimal(_length: 4, _isCompact: 1, _mantissa: (0x88ea, 0x299a, 0x357c, 0x0001,0,0,0,0)), -/* 10**25 */ Decimal(_length: 3, _isCompact: 1, _mantissa: (0xda7d, 0xd0f5, 0x1ef2,0,0,0,0,0)), -/* 10**26 */ Decimal(_length: 3, _isCompact: 1, _mantissa: (0x95d9, 0x4818, 0x0318,0,0,0,0,0)), -/* 10**27 */ Decimal(_length: 3, _isCompact: 0, _mantissa: (0xdbc8, 0x3a68, 0x004f,0,0,0,0,0)), -/* 10**28 */ Decimal(_length: 3, _isCompact: 1, _mantissa: (0xaf94, 0xec3d, 0x0007,0,0,0,0,0)), -/* 10**29 */ Decimal(_length: 2, _isCompact: 1, _mantissa: (0xf7f5, 0xcad2,0,0,0,0,0,0)), -/* 10**30 */ Decimal(_length: 2, _isCompact: 1, _mantissa: (0x4bfe, 0x1448,0,0,0,0,0,0)), -/* 10**31 */ Decimal(_length: 2, _isCompact: 1, _mantissa: (0x3acc, 0x0207,0,0,0,0,0,0)), -/* 10**32 */ Decimal(_length: 2, _isCompact: 1, _mantissa: (0xec47, 0x0033,0,0,0,0,0,0)), -/* 10**33 */ Decimal(_length: 2, _isCompact: 1, _mantissa: (0x313a, 0x0005,0,0,0,0,0,0)), -/* 10**34 */ Decimal(_length: 1, _isCompact: 1, _mantissa: (0x84ec,0,0,0,0,0,0,0)), -/* 10**35 */ Decimal(_length: 1, _isCompact: 1, _mantissa: (0x0d4a,0,0,0,0,0,0,0)), -/* 10**36 */ Decimal(_length: 1, _isCompact: 0, _mantissa: (0x0154,0,0,0,0,0,0,0)), -/* 10**37 */ Decimal(_length: 1, _isCompact: 1, _mantissa: (0x0022,0,0,0,0,0,0,0)), -/* 10**38 */ Decimal(_length: 1, _isCompact: 1, _mantissa: (0x0003,0,0,0,0,0,0,0)) -] - -// The methods in this extension exist to match the protocol requirements of -// FloatingPoint, even if we can't conform directly. -// -// If it becomes clear that conformance is truly impossible, we can deprecate -// some of the methods (e.g. `isEqual(to:)` in favor of operators). -extension Decimal { - public static let greatestFiniteMagnitude = Decimal( - _exponent: 127, - _length: 8, - _isNegative: 0, - _isCompact: 1, - _reserved: 0, - _mantissa: (0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff) - ) - - public static let leastNormalMagnitude = Decimal( - _exponent: -128, - _length: 1, - _isNegative: 0, - _isCompact: 1, - _reserved: 0, - _mantissa: (0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000) - ) - - public static let leastNonzeroMagnitude = leastNormalMagnitude - - @available(*, deprecated, message: "Use '-Decimal.greatestFiniteMagnitude' for least finite value or '0' for least finite magnitude") - public static let leastFiniteMagnitude = -greatestFiniteMagnitude - - public static let pi = Decimal( - _exponent: -38, - _length: 8, - _isNegative: 0, - _isCompact: 1, - _reserved: 0, - _mantissa: (0x6623, 0x7d57, 0x16e7, 0xad0d, 0xaf52, 0x4641, 0xdfa7, 0xec58) - ) - - @available(*, unavailable, message: "Decimal does not fully adopt FloatingPoint.") - public static var infinity: Decimal { fatalError("Decimal does not fully adopt FloatingPoint") } - - @available(*, unavailable, message: "Decimal does not fully adopt FloatingPoint.") - public static var signalingNaN: Decimal { fatalError("Decimal does not fully adopt FloatingPoint") } - - public static var quietNaN: Decimal { - return Decimal( - _exponent: 0, _length: 0, _isNegative: 1, _isCompact: 0, - _reserved: 0, _mantissa: (0, 0, 0, 0, 0, 0, 0, 0)) - } - - public static var nan: Decimal { quietNaN } - - public static var radix: Int { 10 } - - public init(_ value: UInt8) { - self.init(UInt64(value)) - } - - public init(_ value: Int8) { - self.init(Int64(value)) - } - - public init(_ value: UInt16) { - self.init(UInt64(value)) - } - - public init(_ value: Int16) { - self.init(Int64(value)) - } - - public init(_ value: UInt32) { - self.init(UInt64(value)) - } - - public init(_ value: Int32) { - self.init(Int64(value)) - } - - public init(_ value: UInt64) { - self = Decimal() - if value == 0 { - return - } - - var compactValue = value - var exponent: Int32 = 0 - while compactValue % 10 == 0 { - compactValue /= 10 - exponent += 1 - } - _isCompact = 1 - _exponent = exponent - - let wordCount = ((UInt64.bitWidth - compactValue.leadingZeroBitCount) + (UInt16.bitWidth - 1)) / UInt16.bitWidth - _length = UInt32(wordCount) - _mantissa.0 = UInt16(truncatingIfNeeded: compactValue >> 0) - _mantissa.1 = UInt16(truncatingIfNeeded: compactValue >> 16) - _mantissa.2 = UInt16(truncatingIfNeeded: compactValue >> 32) - _mantissa.3 = UInt16(truncatingIfNeeded: compactValue >> 48) - } - - public init(_ value: Int64) { - self.init(value.magnitude) - if value < 0 { - _isNegative = 1 - } - } - - public init(_ value: UInt) { - self.init(UInt64(value)) - } - - public init(_ value: Int) { - self.init(Int64(value)) - } - - public init(_ value: Double) { - precondition(!value.isInfinite, "Decimal does not fully adopt FloatingPoint") - if value.isNaN { - self = Decimal.nan - } else if value == 0.0 { - self = Decimal() - } else { - self = Decimal() - let negative = value < 0 - var val = negative ? -1 * value : value - var exponent: Int8 = 0 - - // Try to get val as close to UInt64.max whilst adjusting the exponent - // to reduce the number of digits after the decimal point. - while val < Double(UInt64.max - 1) { - guard exponent > Int8.min else { - self = Decimal.nan - return - } - val *= 10.0 - exponent -= 1 - } - while Double(UInt64.max) <= val { - guard exponent < Int8.max else { - self = Decimal.nan - return - } - val /= 10.0 - exponent += 1 - } - - var mantissa: UInt64 - let maxMantissa = Double(UInt64.max).nextDown - if val > maxMantissa { - // UInt64(Double(UInt64.max)) gives an overflow error; this is the largest - // mantissa that can be set. - mantissa = UInt64(maxMantissa) - } else { - mantissa = UInt64(val) - } - - var i: UInt32 = 0 - // This is a bit ugly but it is the closest approximation of the C - // initializer that can be expressed here. - while mantissa != 0 && i < NSDecimalMaxSize { - switch i { - case 0: - _mantissa.0 = UInt16(truncatingIfNeeded: mantissa) - case 1: - _mantissa.1 = UInt16(truncatingIfNeeded: mantissa) - case 2: - _mantissa.2 = UInt16(truncatingIfNeeded: mantissa) - case 3: - _mantissa.3 = UInt16(truncatingIfNeeded: mantissa) - case 4: - _mantissa.4 = UInt16(truncatingIfNeeded: mantissa) - case 5: - _mantissa.5 = UInt16(truncatingIfNeeded: mantissa) - case 6: - _mantissa.6 = UInt16(truncatingIfNeeded: mantissa) - case 7: - _mantissa.7 = UInt16(truncatingIfNeeded: mantissa) - default: - fatalError("initialization overflow") - } - mantissa = mantissa >> 16 - i += 1 - } - _length = i - _isNegative = negative ? 1 : 0 - _isCompact = 0 - _exponent = Int32(exponent) - self.compact() - } - } - - public init(sign: FloatingPointSign, exponent: Int, significand: Decimal) { - self = significand - let error = withUnsafeMutablePointer(to: &self) { - NSDecimalMultiplyByPowerOf10($0, $0, Int16(clamping: exponent), .plain) - } - if error == .underflow { self = 0 } - // We don't need to check for overflow because `Decimal` cannot represent infinity. - if sign == .minus { negate() } - } - - public init(signOf: Decimal, magnitudeOf magnitude: Decimal) { - self.init( - _exponent: magnitude._exponent, - _length: magnitude._length, - _isNegative: signOf._isNegative, - _isCompact: magnitude._isCompact, - _reserved: 0, - _mantissa: magnitude._mantissa) - } - - public var exponent: Int { - return Int(_exponent) - } - - public var significand: Decimal { - return Decimal( - _exponent: 0, _length: _length, _isNegative: 0, _isCompact: _isCompact, - _reserved: 0, _mantissa: _mantissa) - } - - public var sign: FloatingPointSign { - return _isNegative == 0 ? FloatingPointSign.plus : FloatingPointSign.minus - } - - public var ulp: Decimal { - guard isFinite else { return .nan } - - let exponent: Int32 - if isZero { - exponent = .min - } else { - let significand_ = significand - let shift = - _powersOfTenDividingUInt128Max.firstIndex { significand_ > $0 } - ?? _powersOfTenDividingUInt128Max.count - exponent = _exponent &- Int32(shift) - } - - return Decimal( - _exponent: max(exponent, -128), _length: 1, _isNegative: 0, _isCompact: 1, - _reserved: 0, _mantissa: (0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000)) - } - - public var nextUp: Decimal { - if _isNegative == 1 { - if _exponent > -128 - && (_mantissa.0, _mantissa.1, _mantissa.2, _mantissa.3) == (0x999a, 0x9999, 0x9999, 0x9999) - && (_mantissa.4, _mantissa.5, _mantissa.6, _mantissa.7) == (0x9999, 0x9999, 0x9999, 0x1999) { - return Decimal( - _exponent: _exponent &- 1, _length: 8, _isNegative: 1, _isCompact: 1, - _reserved: 0, _mantissa: (0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) - } - } else { - if _exponent < 127 - && (_mantissa.0, _mantissa.1, _mantissa.2, _mantissa.3) == (0xffff, 0xffff, 0xffff, 0xffff) - && (_mantissa.4, _mantissa.5, _mantissa.6, _mantissa.7) == (0xffff, 0xffff, 0xffff, 0xffff) { - return Decimal( - _exponent: _exponent &+ 1, _length: 8, _isNegative: 0, _isCompact: 1, - _reserved: 0, _mantissa: (0x999a, 0x9999, 0x9999, 0x9999, 0x9999, 0x9999, 0x9999, 0x1999)) - } - } - return self + ulp - } - - public var nextDown: Decimal { - return -(-self).nextUp - } - - /// The IEEE 754 "class" of this type. - public var floatingPointClass: FloatingPointClassification { - if _length == 0 && _isNegative == 1 { - return .quietNaN - } else if _length == 0 { - return .positiveZero - } - // NSDecimal does not really represent normal and subnormal in the same - // manner as the IEEE standard, for now we can probably claim normal for - // any nonzero, non-NaN values. - if _isNegative == 1 { - return .negativeNormal - } else { - return .positiveNormal - } - } - - public var isCanonical: Bool { true } - - /// `true` iff `self` is negative. - public var isSignMinus: Bool { _isNegative != 0 } - - /// `true` iff `self` is +0.0 or -0.0. - public var isZero: Bool { _length == 0 && _isNegative == 0 } - - /// `true` iff `self` is subnormal. - public var isSubnormal: Bool { false } - - /// `true` iff `self` is normal (not zero, subnormal, infinity, or NaN). - public var isNormal: Bool { !isZero && !isInfinite && !isNaN } - - /// `true` iff `self` is zero, subnormal, or normal (not infinity or NaN). - public var isFinite: Bool { !isNaN } - - /// `true` iff `self` is infinity. - public var isInfinite: Bool { false } - - /// `true` iff `self` is NaN. - public var isNaN: Bool { _length == 0 && _isNegative == 1 } - - /// `true` iff `self` is a signaling NaN. - public var isSignaling: Bool { false } - - /// `true` iff `self` is a signaling NaN. - public var isSignalingNaN: Bool { false } - - public func isEqual(to other: Decimal) -> Bool { - return self.compare(to: other) == .orderedSame - } - - public func isLess(than other: Decimal) -> Bool { - return self.compare(to: other) == .orderedAscending - } - - public func isLessThanOrEqualTo(_ other: Decimal) -> Bool { - let comparison = self.compare(to: other) - return comparison == .orderedAscending || comparison == .orderedSame - } - - public func isTotallyOrdered(belowOrEqualTo other: Decimal) -> Bool { - // Note: Decimal does not have -0 or infinities to worry about - if self.isNaN { - return false - } - if self < other { - return true - } - if other < self { - return false - } - // Fall through to == behavior - return true - } - - @available(*, unavailable, message: "Decimal does not fully adopt FloatingPoint.") - public mutating func formTruncatingRemainder(dividingBy other: Decimal) { fatalError("Decimal does not fully adopt FloatingPoint") } -} - -extension Decimal: _ObjectiveCBridgeable { - public func _bridgeToObjectiveC() -> NSDecimalNumber { - return NSDecimalNumber(decimal: self) - } - - public static func _forceBridgeFromObjectiveC(_ x: NSDecimalNumber, result: inout Decimal?) { - result = _unconditionallyBridgeFromObjectiveC(x) - } - - public static func _conditionallyBridgeFromObjectiveC(_ x: NSDecimalNumber, result: inout Decimal?) -> Bool { - result = x.decimalValue - return true - } - - public static func _unconditionallyBridgeFromObjectiveC(_ source: NSDecimalNumber?) -> Decimal { - var result: Decimal? - guard let src = source else { return Decimal(0) } - guard _conditionallyBridgeFromObjectiveC(src, result: &result) else { return Decimal(0) } - return result! - } -} - -// MARK: - End of conformances shared with Darwin overlay - -fileprivate func divideByShort(_ d: inout T, _ divisor:UInt16) -> (UInt16,NSDecimalNumber.CalculationError) { - if divisor == 0 { - d._length = 0 - return (0,.divideByZero) - } - // note the below is not the same as from length to 0 by -1 - var carry: UInt32 = 0 - for i in (0..(_ d: inout T, _ mul:UInt16) -> NSDecimalNumber.CalculationError { - if mul == 0 { - d._length = 0 - return .noError - } - var carry: UInt32 = 0 - // FIXME handle NSCalculationOverflow here? - for i in 0..> 16 - d[i] = UInt16(truncatingIfNeeded: accumulator) - } - if carry != 0 { - if d._length >= Decimal.maxSize { - return .overflow - } - d[d._length] = UInt16(truncatingIfNeeded: carry) - d._length += 1 - } - return .noError -} - -fileprivate func addShort(_ d: inout T, _ add:UInt16) -> NSDecimalNumber.CalculationError { - var carry:UInt32 = UInt32(add) - for i in 0..> 16 - d[i] = UInt16(truncatingIfNeeded: accumulator) - } - if carry != 0 { - if d._length >= Decimal.maxSize { - return .overflow - } - d[d._length] = UInt16(truncatingIfNeeded: carry) - d._length += 1 - } - return .noError -} - -public func NSDecimalIsNotANumber(_ dcm: UnsafePointer) -> Bool { - return dcm.pointee.isNaN -} - -/*************** Operations ***********/ -public func NSDecimalCopy(_ destination: UnsafeMutablePointer, _ source: UnsafePointer) { - destination.pointee.__lengthAndFlags = source.pointee.__lengthAndFlags - destination.pointee.__exponent = source.pointee.__exponent - destination.pointee.__reserved = source.pointee.__reserved - destination.pointee._mantissa = source.pointee._mantissa -} - -public func NSDecimalCompact(_ number: UnsafeMutablePointer) { - number.pointee.compact() -} - -// NSDecimalCompare:Compares leftOperand and rightOperand. -public func NSDecimalCompare(_ leftOperand: UnsafePointer, _ rightOperand: UnsafePointer) -> ComparisonResult { - let left = leftOperand.pointee - let right = rightOperand.pointee - return left.compare(to: right) -} - -fileprivate extension UInt16 { - func compareTo(_ other: UInt16) -> ComparisonResult { - if self < other { - return .orderedAscending - } else if self > other { - return .orderedDescending - } else { - return .orderedSame - } - } -} - -fileprivate func mantissaCompare( - _ left: T, - _ right: T) -> ComparisonResult { - - if left._length > right._length { - return .orderedDescending - } - if left._length < right._length { - return .orderedAscending - } - let length = left._length // == right._length - for i in (0.. NSDecimalNumber.CalculationError { - - if big._length <= Decimal.maxSize { - return .noError - } - - var remainder: UInt16 = 0 - var previousRemainder: Bool = false - - // Divide by 10 as much as possible - while big._length > Decimal.maxSize + 1 { - if remainder != 0 { - previousRemainder = true - } - (remainder,_) = divideByShort(&big,10000) - exponent += 4 - } - - while big._length > Decimal.maxSize { - if remainder != 0 { - previousRemainder = true - } - (remainder,_) = divideByShort(&big,10) - exponent += 1 - } - - // If we are on a tie, adjust with previous remainder. - // .50001 is equivalent to .6 - if previousRemainder && (remainder == 0 || remainder == 5) { - remainder += 1 - } - - if remainder == 0 { - return .noError - } - - // Round the result - switch roundingMode { - case .down: - break - case .bankers: - if remainder == 5 && (big[0] & 1) == 0 { - break - } - fallthrough - case .plain: - if remainder < 5 { - break - } - fallthrough - case .up: - let originalLength = big._length - // big._length += 1 ?? - _ = addShort(&big,1) - if originalLength > big._length { - // the last digit is == 0. Remove it. - _ = divideByShort(&big, 10) - exponent += 1 - } - } - return .lossOfPrecision; -} - -fileprivate func integerMultiply(_ big: inout T, - _ left: T, - _ right: Decimal) -> NSDecimalNumber.CalculationError { - if left._length == 0 || right._length == 0 { - big._length = 0 - return .noError - } - - if big._length == 0 || big._length > left._length + right._length { - big._length = min(big.maxMantissaLength,left._length + right._length) - } - - big.zeroMantissa() - - var carry: UInt16 = 0 - - for j in 0..> 16) - big[i+j] = UInt16(truncatingIfNeeded:accumulator) - } else if carry != 0 || (right[j] > 0 && left[i] > 0) { - return .overflow - } - } - - if carry != 0 { - if left._length + j < big._length { - big[left._length + j] = carry - } else { - return .overflow - } - } - } - - big.trimTrailingZeros() - - return .noError -} - -fileprivate func integerDivide(_ r: inout T, - _ cu: T, - _ cv: Decimal) -> NSDecimalNumber.CalculationError { - // Calculate result = a / b. - // Result could NOT be a pointer to same space as a or b. - // resultLen must be >= aLen - bLen. - // - // Based on algorithm in The Art of Computer Programming, Volume 2, - // Seminumerical Algorithms by Donald E. Knuth, 2nd Edition. In addition - // you need to consult the erratas for the book available at: - // - // http://www-cs-faculty.stanford.edu/~uno/taocp.html - - var u = WideDecimal(true) - var v = WideDecimal(true) // divisor - - // Simple case - if cv.isZero { - return .divideByZero; - } - - // If u < v, the result is approximately 0... - if cu._length < cv._length { - for i in 0..= b/2 (0x8000) - // - // I could probably use something smarter to get d to be a power of 2. - // In this case the multiply below became only a shift. - let d: UInt32 = UInt32((1 << 16) / Int(cv[cv._length - 1] + 1)) - - // This is to make the whole algorithm work and u*d/v*d == u/v - _ = multiplyByShort(&u, UInt16(d)) - _ = multiplyByShort(&v, UInt16(d)) - - u.trimTrailingZeros() - v.trimTrailingZeros() - - // Set a zero at the leftmost u position if the multiplication - // does not have a carry. - if u._length == cu._length { - u[u._length] = 0 - u._length += 1 - } - - v[v._length] = 0; // Set a zero at the leftmost v position. - // the algorithm will use it during the - // multiplication/subtraction phase. - - // Determine the size of the quotient. - // It's an approximate value. - let ql:UInt16 = UInt16(u._length - v._length) - - // Some useful constants for the loop - // It's used to determine the quotient digit as fast as possible - // The test vl > 1 is probably useless, since optimizations - // up there are taking over this case. I'll keep it, just in case. - let v1:UInt16 = v[v._length-1] - let v2:UInt16 = v._length > 1 ? v[v._length-2] : 0 - - // D2: initialize j - // On each pass, build a single value for the quotient. - for j in 0.. (rtmp<<16) + UInt32(u[ul - UInt32(j) - UInt32(3)]) { - q -= 1 - rtmp += UInt32(v1) - - if (rtmp < (1 << 16)) && ( (q == (1 << 16) ) || ( UInt32(v2) * q > (rtmp<<16) + UInt32(u[ul - UInt32(j) - UInt32(3)])) ) { - q -= 1 - rtmp += UInt32(v1) - } - } - - // D4: multiply and subtract. - - var mk:UInt32 = 0 // multiply carry - var sk:UInt32 = 1 // subtraction carry - var acc:UInt32 - - // We perform a multiplication and a subtraction - // during the same pass... - for i in 0...v._length { - let ul = u._length - let vl = v._length - acc = q * UInt32(v[i]) + mk // multiply - mk = acc >> 16 // multiplication carry - acc = acc & 0xffff; - acc = 0xffff + UInt32(u[ul - vl + i - UInt32(j) - UInt32(1)]) - acc + sk; // subtract - sk = acc >> 16; - u[ul - vl + i - UInt32(j) - UInt32(1)] = UInt16(truncatingIfNeeded:acc) - } - - // D5: test remainder - // This test catches cases where q is still q + 1 - if sk == 0 { - // D6: add back. - var k:UInt32 = 0 // Addition carry - - // subtract one from the quotient digit - q -= 1 - for i in 0...v._length { - let ul = u._length - let vl = v._length - acc = UInt32(v[i]) + UInt32(u[UInt32(ul) - UInt32(vl) + UInt32(i) - UInt32(j) - UInt32(1)]) + k - k = acc >> 16; - u[UInt32(ul) - UInt32(vl) + UInt32(i) - UInt32(j) - UInt32(1)] = UInt16(truncatingIfNeeded:acc) - } - // k must be == 1 here - } - - r[UInt32(ql - j - UInt16(1))] = UInt16(q) - // D7: loop on j - } - - r._length = UInt32(ql); - - r.trimTrailingZeros() - - return .noError; -} - -fileprivate func integerMultiplyByPowerOf10(_ result: inout T, _ left: T, _ p: Int) -> NSDecimalNumber.CalculationError { - var power = p - if power == 0 { - result = left - return .noError - } - let isNegative = power < 0 - if isNegative { - power = -power +extension Decimal : _ObjectiveCBridgeable { + @_semantics("convertToObjectiveC") + public func _bridgeToObjectiveC() -> NSDecimalNumber { + return NSDecimalNumber(decimal: self) } - result = left - - let maxpow10 = _powersOfTen.count - 1 - var error:NSDecimalNumber.CalculationError = .noError - - while power > maxpow10 { - var big = T() - - power -= maxpow10 - let p10 = _powersOfTen[maxpow10] - - if !isNegative { - error = integerMultiply(&big,result,p10) - } else { - error = integerDivide(&big,result,p10) - } - - if error != .noError && error != .lossOfPrecision { - return error; - } - - for i in 0.. Bool { + result = input.decimalValue + return true } - for i in 0.. Decimal { + guard let src = source else { + return Decimal() + } + return src.decimalValue } - - result._length = big._length - - return error; -} - -public func NSDecimalRound(_ result: UnsafeMutablePointer, _ number: UnsafePointer, _ scale: Int, _ roundingMode: NSDecimalNumber.RoundingMode) { - NSDecimalCopy(result,number) // this is unnecessary if they are the same address, but we can't test that here - result.pointee.round(scale: scale,roundingMode: roundingMode) } -// Rounds num to the given scale using the given mode. -// result may be a pointer to same space as num. -// scale indicates number of significant digits after the decimal point - -public func NSDecimalNormalize(_ a: UnsafeMutablePointer, _ b: UnsafeMutablePointer, _ roundingMode: NSDecimalNumber.RoundingMode) -> NSDecimalNumber.CalculationError { - var diffexp = Int(a.pointee.__exponent) - Int(b.pointee.__exponent) - var result = Decimal() - - // - // If the two numbers share the same exponents, - // the normalisation is already done - // - if diffexp == 0 { - return .noError - } - - // - // Put the smallest of the two in aa - // - var aa: UnsafeMutablePointer - var bb: UnsafeMutablePointer - - if diffexp < 0 { - aa = b - bb = a - diffexp = -diffexp - } else { - aa = a - bb = b - } - - // - // Build a backup for aa - // - var backup = Decimal() - - NSDecimalCopy(&backup,aa) - - // - // Try to multiply aa to reach the same exponent level than bb - // - - if integerMultiplyByPowerOf10(&result, aa.pointee, diffexp) == .noError { - // Succeed. Adjust the length/exponent info - // and return no errorNSDecimalNormalize - aa.pointee.copyMantissa(from: result) - aa.pointee._exponent = bb.pointee._exponent - return .noError; - } - - // - // Failed, restart from scratch - // - NSDecimalCopy(aa, &backup); - // - // What is the maximum pow10 we can apply to aa ? - // - let logBase10of2to16 = 4.81647993 - let aaLength = aa.pointee._length - let maxpow10 = Int8(floor(Double(Decimal.maxSize - aaLength) * logBase10of2to16)) +// MARK: - C Functions - // - // Divide bb by this value - // - _ = integerMultiplyByPowerOf10(&result, bb.pointee, Int(maxpow10) - diffexp) - - bb.pointee.copyMantissa(from: result) - bb.pointee._exponent -= (Int32(maxpow10) - Int32(diffexp)) - - // - // If bb > 0 multiply aa by the same value - // - if !bb.pointee.isZero { - _ = integerMultiplyByPowerOf10(&result, aa.pointee, Int(maxpow10)) - aa.pointee.copyMantissa(from: result) - aa.pointee._exponent -= Int32(maxpow10) - } else { - bb.pointee._exponent = aa.pointee._exponent; - } - - // - // the two exponents are now identical, but we've lost some digits in the operation. - // - return .lossOfPrecision; +public func pow(_ x: Decimal, _ y: Int) -> Decimal { + _pow(x, y) } -public func NSDecimalAdd(_ result: UnsafeMutablePointer, _ leftOperand: UnsafePointer, _ rightOperand: UnsafePointer, _ roundingMode: NSDecimalNumber.RoundingMode) -> NSDecimalNumber.CalculationError { - if leftOperand.pointee.isNaN || rightOperand.pointee.isNaN { - result.pointee.setNaN() - return .overflow - } - if leftOperand.pointee.isZero { - NSDecimalCopy(result, rightOperand) - return .noError - } else if rightOperand.pointee.isZero { - NSDecimalCopy(result, leftOperand) - return .noError - } else { - var a = Decimal() - var b = Decimal() - var error:NSDecimalNumber.CalculationError = .noError - - NSDecimalCopy(&a,leftOperand) - NSDecimalCopy(&b,rightOperand) - - let normalizeError = NSDecimalNormalize(&a, &b,roundingMode) - - if a.isZero { - NSDecimalCopy(result,&b) - return normalizeError - } - if b.isZero { - NSDecimalCopy(result,&a) - return normalizeError - } - - result.pointee._exponent = a._exponent - - if a.isNegative == b.isNegative { - var big = WideDecimal() - result.pointee.isNegative = a.isNegative - - // No possible error here. - _ = integerAdd(&big,&a,&b) - - if big._length > Decimal.maxSize { - var exponent:Int32 = 0 - error = fitMantissa(&big, &exponent, roundingMode) - - let newExponent = result.pointee._exponent + exponent - - // Just to be sure! - if newExponent > Int32(Int8.max) { - result.pointee.setNaN() - return .overflow - } - result.pointee._exponent = newExponent - } - let length = min(Decimal.maxSize,big._length) - for i in 0.., _ lhs: UnsafePointer, _ rhs: UnsafePointer, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError { + _NSDecimalAdd(result, lhs, rhs, roundingMode) } -fileprivate func integerAdd(_ result: inout WideDecimal, _ left: inout Decimal, _ right: inout Decimal) -> NSDecimalNumber.CalculationError { - var idx: UInt32 = 0 - var carry: UInt16 = 0 - let maxIndex: UInt32 = min(left._length, right._length) // The highest index with bits set in both values - - while idx < maxIndex { - let li = UInt32(left[idx]) - let ri = UInt32(right[idx]) - let sum = li + ri + UInt32(carry) - carry = UInt16(truncatingIfNeeded: sum >> 16) - result[idx] = UInt16(truncatingIfNeeded: sum) - idx += 1 - } - - while idx < left._length { - if carry != 0 { - let li = UInt32(left[idx]) - let sum = li + UInt32(carry) - carry = UInt16(truncatingIfNeeded: sum >> 16) - result[idx] = UInt16(truncatingIfNeeded: sum) - idx += 1 - } else { - while idx < left._length { - result[idx] = left[idx] - idx += 1 - } - break - } - } - while idx < right._length { - if carry != 0 { - let ri = UInt32(right[idx]) - let sum = ri + UInt32(carry) - carry = UInt16(truncatingIfNeeded: sum >> 16) - result[idx] = UInt16(truncatingIfNeeded: sum) - idx += 1 - } else { - while idx < right._length { - result[idx] = right[idx] - idx += 1 - } - break - } - } - result._length = idx - - if carry != 0 { - result[idx] = carry - idx += 1 - result._length = idx - } - if idx > Decimal.maxSize { - return .overflow - } - - return .noError; +public func NSDecimalSubtract(_ result: UnsafeMutablePointer, _ lhs: UnsafePointer, _ rhs: UnsafePointer, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError { + _NSDecimalSubtract(result, lhs, rhs, roundingMode) } -// integerSubtract: Subtract b from a, put the result in result, and -// modify resultLen to match the length of the result. -// Result may be a pointer to same space as a or b. -// resultLen must be >= Max(aLen,bLen). -// Could return NSCalculationOverflow if b > a. In this case 0 - result -// give b-a... -// -fileprivate func integerSubtract(_ result: inout Decimal, _ left: inout Decimal, _ right: inout Decimal) -> NSDecimalNumber.CalculationError { - var idx: UInt32 = 0 - let maxIndex: UInt32 = min(left._length, right._length) // The highest index with bits set in both values - var borrow: UInt16 = 0 - - while idx < maxIndex { - let li = UInt32(left[idx]) - let ri = UInt32(right[idx]) - // 0x10000 is to borrow in advance to avoid underflow. - let difference: UInt32 = (0x10000 + li) - UInt32(borrow) - ri - result[idx] = UInt16(truncatingIfNeeded: difference) - // borrow = 1 if the borrow was used. - borrow = 1 - UInt16(truncatingIfNeeded: difference >> 16) - idx += 1 - } - - while idx < left._length { - if borrow != 0 { - let li = UInt32(left[idx]) - let sum = 0xffff + li // + no carry - borrow = 1 - UInt16(truncatingIfNeeded: sum >> 16) - result[idx] = UInt16(truncatingIfNeeded: sum) - idx += 1 - } else { - while idx < left._length { - result[idx] = left[idx] - idx += 1 - } - break - } - } - while idx < right._length { - let ri = UInt32(right[idx]) - let difference = 0xffff - ri + UInt32(borrow) - borrow = 1 - UInt16(truncatingIfNeeded: difference >> 16) - result[idx] = UInt16(truncatingIfNeeded: difference) - idx += 1 - } - - if borrow != 0 { - return .overflow - } - result._length = idx; - result.trimTrailingZeros() - - return .noError; +public func NSDecimalMultiply(_ result: UnsafeMutablePointer, _ lhs: UnsafePointer, _ rhs: UnsafePointer, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError { + _NSDecimalMultiply(result, lhs, rhs, roundingMode) } -// Exact operations. result may be a pointer to same space as leftOperand or rightOperand - -public func NSDecimalSubtract(_ result: UnsafeMutablePointer, _ leftOperand: UnsafePointer, _ rightOperand: UnsafePointer, _ roundingMode: NSDecimalNumber.RoundingMode) -> NSDecimalNumber.CalculationError { - var r = rightOperand.pointee - r.negate() - return NSDecimalAdd(result, leftOperand, &r, roundingMode) +public func NSDecimalDivide(_ result: UnsafeMutablePointer, _ lhs: UnsafePointer, _ rhs: UnsafePointer, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError { + _NSDecimalDivide(result, lhs, rhs, roundingMode) } -// Exact operations. result may be a pointer to same space as leftOperand or rightOperand - -public func NSDecimalMultiply(_ result: UnsafeMutablePointer, _ leftOperand: UnsafePointer, _ rightOperand: UnsafePointer, _ roundingMode: NSDecimalNumber.RoundingMode) -> NSDecimalNumber.CalculationError { - - if leftOperand.pointee.isNaN || rightOperand.pointee.isNaN { - result.pointee.setNaN() - return .overflow - } - if leftOperand.pointee.isZero || rightOperand.pointee.isZero { - result.pointee.setZero() - return .noError - } - - var big = WideDecimal() - var calculationError:NSDecimalNumber.CalculationError = .noError - - calculationError = integerMultiply(&big,WideDecimal(leftOperand.pointee),rightOperand.pointee) - - result.pointee._isNegative = (leftOperand.pointee._isNegative + rightOperand.pointee._isNegative) % 2 - - var newExponent = leftOperand.pointee._exponent + rightOperand.pointee._exponent - - if big._length > Decimal.maxSize { - var exponent:Int32 = 0 - calculationError = fitMantissa(&big, &exponent, roundingMode) - newExponent += exponent - } - - for i in 0.. Int32(Int8.max) { - result.pointee.setNaN() - return .overflow - } - result.pointee._exponent = newExponent - NSDecimalCompact(result) - return calculationError +public func NSDecimalPower(_ result: UnsafeMutablePointer, _ decimal: UnsafePointer, _ exponent: Int, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError { + _NSDecimalPower(result, decimal, exponent, roundingMode) } -// Exact operations. result may be a pointer to same space as leftOperand or rightOperand - -public func NSDecimalDivide(_ result: UnsafeMutablePointer, _ leftOperand: UnsafePointer, _ rightOperand: UnsafePointer, _ roundingMode: NSDecimalNumber.RoundingMode) -> NSDecimalNumber.CalculationError { - - if leftOperand.pointee.isNaN || rightOperand.pointee.isNaN { - result.pointee.setNaN() - return .overflow - } - if rightOperand.pointee.isZero { - result.pointee.setNaN() - return .divideByZero - } - if leftOperand.pointee.isZero { - result.pointee.setZero() - return .noError - } - var a = Decimal() - var b = Decimal() - var big = WideDecimal() - var exponent:Int32 = 0 - - NSDecimalCopy(&a, leftOperand) - NSDecimalCopy(&b, rightOperand) - /* If the precision of the left operand is much smaller - * than that of the right operand (for example, - * 20 and 0.112314123094856724234234572), then the - * difference in their exponents is large and a lot of - * precision will be lost below. This is particularly - * true as the difference approaches 38 or larger. - * Normalizing here looses some precision on the - * individual operands, but often produces a more - * accurate result later. I chose 19 arbitrarily - * as half of the magic 38, so that normalization - * doesn't always occur. */ - if (19 <= Int(a._exponent - b._exponent)) { - _ = NSDecimalNormalize(&a, &b, roundingMode); - /* We ignore the small loss of precision this may - * induce in the individual operands. */ - - /* Sometimes the normalization done previously is inappropriate and - * forces one of the operands to 0. If this happens, restore both. */ - if a.isZero || b.isZero { - NSDecimalCopy(&a, leftOperand); - NSDecimalCopy(&b, rightOperand); - } - } - - _ = integerMultiplyByPowerOf10(&big, WideDecimal(a), 38) // Trust me, it's 38 ! - _ = integerDivide(&big, big, b) - _ = fitMantissa(&big, &exponent, .down) - - let length = min(big._length,Decimal.maxSize) - for i in 0.. Int32(Int8.max) { - result.pointee.setNaN() - return .overflow; - } - result.pointee._exponent = Int32(exponent) - result.pointee._isCompact = 0 - NSDecimalCompact(result) - return .noError +public func NSDecimalMultiplyByPowerOf10(_ result: UnsafeMutablePointer, _ decimal: UnsafePointer, _ power: CShort, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError { + _NSDecimalMultiplyByPowerOf10(result, decimal, power, roundingMode) } -// Division could be silently inexact; -// Exact operations. result may be a pointer to same space as leftOperand or rightOperand - -public func NSDecimalPower(_ result: UnsafeMutablePointer, _ number: UnsafePointer, _ power: Int, _ roundingMode: NSDecimalNumber.RoundingMode) -> NSDecimalNumber.CalculationError { - if number.pointee.isNaN { - result.pointee.setNaN() - return .overflow - } - NSDecimalCopy(result,number) - return result.pointee.power(UInt(power), roundingMode:roundingMode) +public func NSDecimalCompare(_ lhs: UnsafePointer, _ rhs: UnsafePointer) -> ComparisonResult { + _NSDecimalCompare(lhs, rhs) } -public func NSDecimalMultiplyByPowerOf10(_ result: UnsafeMutablePointer, _ number: UnsafePointer, _ power: Int16, _ roundingMode: NSDecimalNumber.RoundingMode) -> NSDecimalNumber.CalculationError { - NSDecimalCopy(result,number) - return result.pointee.multiply(byPowerOf10: power) +public func NSDecimalRound(_ result: UnsafeMutablePointer, _ decimal: UnsafePointer, _ scale: Int, _ roundingMode: Decimal.RoundingMode) { + _NSDecimalRound(result, decimal, scale, roundingMode) } -public func NSDecimalString(_ dcm: UnsafePointer, _ locale: Any?) -> String { - let ZERO: UInt8 = 0x30 // ASCII '0' == 0x30 - let zeroString = String(Unicode.Scalar(ZERO)) // "0" - - var copy = dcm.pointee - if copy.isNaN { - return "NaN" - } - if copy._length == 0 { - return zeroString - } - - let decimalSeparatorReversed: String = { - // Short circuiting for common case that `locale` is `nil` - guard locale != nil else { return "." } // Defaulting to decimal point - - var decimalSeparator: String? = nil - if let locale = locale as? Locale { - decimalSeparator = locale.decimalSeparator - } else if let dictionary = locale as? [NSLocale.Key: String] { - decimalSeparator = dictionary[NSLocale.Key.decimalSeparator] - } else if let dictionary = locale as? [String: String] { - decimalSeparator = dictionary[NSLocale.Key.decimalSeparator.rawValue] - } - guard let dc = decimalSeparator else { return "." } // Defaulting to decimal point - return String(dc.reversed()) - }() - - let resultCount = - (copy.isNegative ? 1 : 0) + // sign, obviously - 39 + // mantissa is an 128bit, so log10(2^128) is approx 38.5 giving 39 digits max for the mantissa - (copy._exponent > 0 ? Int(copy._exponent) : decimalSeparatorReversed.count) // trailing zeroes or decimal separator - - var result = "" - result.reserveCapacity(resultCount) - - while copy._exponent > 0 { - result.append(zeroString) - copy._exponent -= 1 - } - - if copy._exponent == 0 { - copy._exponent = 1 - } - - while copy._length != 0 { - var remainder: UInt16 = 0 - if copy._exponent == 0 { - result.append(decimalSeparatorReversed) - } - copy._exponent += 1 - (remainder, _) = divideByShort(©, 10) - result.append(String(Unicode.Scalar(ZERO + UInt8(remainder)))) - } - if copy._exponent <= 0 { - while copy._exponent != 0 { - result.append(zeroString) - copy._exponent += 1 - } - result.append(decimalSeparatorReversed) - result.append(zeroString) - } - if copy._isNegative != 0 { - result.append("-") - } - - return String(result.reversed()) +public func NSDecimalNormalize(_ lhs: UnsafeMutablePointer, _ rhs: UnsafeMutablePointer, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError { + _NSDecimalNormalize(lhs, rhs, roundingMode) } -private func multiplyBy10(_ dcm: inout Decimal, andAdd extra:Int) -> NSDecimalNumber.CalculationError { - let backup = dcm - - if multiplyByShort(&dcm, 10) == .noError && addShort(&dcm, UInt16(extra)) == .noError { - return .noError - } else { - dcm = backup // restore the old values - return .overflow // this is the only possible error - } +public func NSDecimalIsNotANumber(_ dcm: UnsafePointer) -> Bool { + return dcm.pointee.isNaN } -fileprivate protocol VariableLengthNumber { - var _length: UInt32 { get set } - init() - subscript(index:UInt32) -> UInt16 { get set } - var isZero:Bool { get } - mutating func copyMantissa(from other:T) - mutating func zeroMantissa() - mutating func trimTrailingZeros() - var maxMantissaLength: UInt32 { get } +public func NSDecimalCopy(_ destination: UnsafeMutablePointer, _ source: UnsafePointer) { + destination.pointee = source.pointee } -extension Decimal: VariableLengthNumber { - var maxMantissaLength:UInt32 { - return Decimal.maxSize - } - fileprivate mutating func zeroMantissa() { - for i in 0.. Decimal.maxSize { - _length = Decimal.maxSize - } - while _length != 0 && self[_length - 1] == 0 { - _length -= 1 - } - } - fileprivate mutating func copyMantissa(from other: T) { - if other._length > maxMantissaLength { - for i in maxMantissaLength..) { + _NSDecimalCompact(number) } -// Provides a way with dealing with extra-length decimals, used for calculations -fileprivate struct WideDecimal : VariableLengthNumber { - var maxMantissaLength:UInt32 { - return _extraWide ? 17 : 16 - } - - fileprivate mutating func zeroMantissa() { - for i in 0..(from other: T) { - let length = other is Decimal ? min(other._length,Decimal.maxSize) : other._length - for i in 0.. \(maxMantissaLength)") - } - __length = UInt16(newValue) - } - } - init(_ extraWide:Bool = false) { - __length = 0 - _mantissa = (UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0)) - _extraWide = extraWide - } - init(_ decimal:Decimal) { - self.__length = UInt16(decimal._length) - self._extraWide = false - self._mantissa = (decimal[0],decimal[1],decimal[2],decimal[3],decimal[4],decimal[5],decimal[6],decimal[7],UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0),UInt16(0)) - } - subscript(index:UInt32) -> UInt16 { - get { - switch index { - case 0: return _mantissa.0 - case 1: return _mantissa.1 - case 2: return _mantissa.2 - case 3: return _mantissa.3 - case 4: return _mantissa.4 - case 5: return _mantissa.5 - case 6: return _mantissa.6 - case 7: return _mantissa.7 - case 8: return _mantissa.8 - case 9: return _mantissa.9 - case 10: return _mantissa.10 - case 11: return _mantissa.11 - case 12: return _mantissa.12 - case 13: return _mantissa.13 - case 14: return _mantissa.14 - case 15: return _mantissa.15 - case 16 where _extraWide: return _mantissa.16 // used in integerDivide - default: fatalError("Invalid index \(index) for _mantissa") - } - } - set { - switch index { - case 0: _mantissa.0 = newValue - case 1: _mantissa.1 = newValue - case 2: _mantissa.2 = newValue - case 3: _mantissa.3 = newValue - case 4: _mantissa.4 = newValue - case 5: _mantissa.5 = newValue - case 6: _mantissa.6 = newValue - case 7: _mantissa.7 = newValue - case 8: _mantissa.8 = newValue - case 9: _mantissa.9 = newValue - case 10: _mantissa.10 = newValue - case 11: _mantissa.11 = newValue - case 12: _mantissa.12 = newValue - case 13: _mantissa.13 = newValue - case 14: _mantissa.14 = newValue - case 15: _mantissa.15 = newValue - case 16 where _extraWide: _mantissa.16 = newValue - default: fatalError("Invalid index \(index) for _mantissa") - } - } - } - func toDecimal() -> Decimal { - var result = Decimal() - result._length = self._length - for i in 0..<_length { - result[i] = self[i] - } - return result - } +public func NSDecimalString(_ dcm: UnsafePointer, _ locale: Any?) -> String { + _NSDecimalString(dcm, locale) } -// MARK: - Internal (Swifty) functions - -extension Decimal { - fileprivate static let maxSize: UInt32 = UInt32(NSDecimalMaxSize) - - fileprivate var isCompact: Bool { - get { - return _isCompact != 0 - } - set { - _isCompact = newValue ? 1 : 0 - } - } - fileprivate var isNegative: Bool { - get { - return _isNegative != 0 - } - set { - _isNegative = newValue ? 1 : 0 - } - } - fileprivate mutating func compact() { - if isCompact || isNaN || _length == 0 { - return - } - var newExponent = self._exponent - var remainder: UInt16 = 0 - // Divide by 10 as much as possible - repeat { - (remainder,_) = divideByShort(&self,10) - newExponent += 1 - } while remainder == 0 - // Put the non-empty remainder in place - _ = multiplyByShort(&self,10) - _ = addShort(&self,remainder) - newExponent -= 1 - // Set the new exponent - while newExponent > Int32(Int8.max) { - _ = multiplyByShort(&self,10) - newExponent -= 1 - } - _exponent = newExponent - isCompact = true - } - fileprivate mutating func round(scale:Int, roundingMode:RoundingMode) { - // scale is the number of digits after the decimal point - var s = Int32(scale) + _exponent - if s == NSDecimalNoScale || s >= 0 { - return - } - s = -s - var remainder: UInt16 = 0 - var previousRemainder = false - - let negative = _isNegative != 0 - var newExponent = _exponent + s - while s > 4 { - if remainder != 0 { - previousRemainder = true - } - (remainder,_) = divideByShort(&self, 10000) - s -= 4 - } - while s > 0 { - if remainder != 0 { - previousRemainder = true - } - (remainder,_) = divideByShort(&self, 10) - s -= 1 - } - // If we are on a tie, adjust with premdr. .50001 is equivalent to .6 - if previousRemainder && (remainder == 0 || remainder == 5) { - remainder += 1; - } - if remainder != 0 { - if negative { - switch roundingMode { - case .up: - break - case .bankers: - if remainder == 5 && (self[0] & 1) == 0 { - remainder += 1 - } - fallthrough - case .plain: - if remainder < 5 { - break - } - fallthrough - case .down: - _ = addShort(&self, 1) - } - if _length == 0 { - _isNegative = 0; - } - } else { - switch roundingMode { - case .down: - break - case .bankers: - if remainder == 5 && (self[0] & 1) == 0 { - remainder -= 1 - } - fallthrough - case .plain: - if remainder < 5 { - break - } - fallthrough - case .up: - _ = addShort(&self, 1) - } - } - } - _isCompact = 0; - - while newExponent > Int32(Int8.max) { - newExponent -= 1; - _ = multiplyByShort(&self, 10); - } - _exponent = newExponent; - self.compact(); - } - internal func compare(to other:Decimal) -> ComparisonResult { - // NaN is a special case and is arbitrary ordered before everything else - // Conceptually comparing with NaN is bogus anyway but raising or - // always returning the same answer will confuse the sorting algorithms - if self.isNaN { - return other.isNaN ? .orderedSame : .orderedAscending - } - if other.isNaN { - return .orderedDescending - } - // Check the sign - if self._isNegative > other._isNegative { - return .orderedAscending - } - if self._isNegative < other._isNegative { - return .orderedDescending - } - // If one of the two is == 0, the other is bigger - // because 0 implies isNegative = 0... - if self.isZero && other.isZero { - return .orderedSame - } - if self.isZero { - return .orderedAscending - } - if other.isZero { - return .orderedDescending - } - var selfNormal = self - var otherNormal = other - _ = NSDecimalNormalize(&selfNormal, &otherNormal, .down) - let comparison = mantissaCompare(selfNormal,otherNormal) - if selfNormal._isNegative == 1 { - if comparison == .orderedDescending { - return .orderedAscending - } else if comparison == .orderedAscending { - return .orderedDescending - } else { - return .orderedSame - } - } - return comparison - } - - fileprivate mutating func setNaN() { - _length = 0 - _isNegative = 1 - } - fileprivate mutating func setZero() { - _length = 0 - _isNegative = 0 - } - fileprivate mutating func multiply(byPowerOf10 power:Int16) -> CalculationError { - if isNaN { - return .overflow - } - if isZero { - return .noError - } - let newExponent = _exponent + Int32(power) - if newExponent < Int32(Int8.min) { - setNaN() - return .underflow - } - if newExponent > Int32(Int8.max) { - setNaN() - return .overflow - } - _exponent = newExponent - return .noError - } - fileprivate mutating func power(_ p:UInt, roundingMode:RoundingMode) -> CalculationError { - if isNaN { - return .overflow - } - var power = p - if power == 0 { - _exponent = 0 - _length = 1 - _isNegative = 0 - self[0] = 1 - _isCompact = 1 - return .noError - } else if power == 1 { - return .noError - } - - var temporary = Decimal(1) - var error:CalculationError = .noError - - while power > 1 { - if power % 2 == 1 { - let previousError = error - var leftOp = temporary - error = NSDecimalMultiply(&temporary, &leftOp, &self, roundingMode) - - if previousError != .noError { // FIXME is this the intent? - error = previousError - } - - if error == .overflow || error == .underflow { - setNaN() - return error - } - power -= 1 - } - if power != 0 { - let previousError = error - var leftOp = self - var rightOp = self - error = NSDecimalMultiply(&self, &leftOp, &rightOp, roundingMode) - - if previousError != .noError { // FIXME is this the intent? - error = previousError - } - - if error == .overflow || error == .underflow { - setNaN() - return error - } - power /= 2 - } - } - let previousError = error - var rightOp = self - error = NSDecimalMultiply(&self, &temporary, &rightOp, roundingMode) - - if previousError != .noError { // FIXME is this the intent? - error = previousError - } - - if error == .overflow || error == .underflow { - setNaN() - return error - } - - return error - } +public func NSStringToDecimal(_ string: String, processedLength: UnsafeMutablePointer, result: UnsafeMutablePointer) { + _NSStringToDecimal(string, processedLength: processedLength, result: result) } +// MARK: - Scanner + // Could be silently inexact for float and double. extension Scanner { @@ -2324,112 +114,24 @@ extension Scanner { } public func scanDecimal() -> Decimal? { - - var result = Decimal.zero let string = self._scanString - let length = string.length - var buf = _NSStringBuffer(string: string, start: self._scanLocation, end: length) - var tooBig = false - let ds = (locale as? Locale ?? Locale.current).decimalSeparator?.first ?? Character(".") - buf.skip(_skipSet) - var neg = false - var ok = false - - if buf.currentCharacter == unichar(unicodeScalarLiteral: "-") || buf.currentCharacter == unichar(unicodeScalarLiteral: "+") { - ok = true - neg = buf.currentCharacter == unichar(unicodeScalarLiteral: "-") - buf.advance() - buf.skip(_skipSet) - } - - // build the mantissa - while let numeral = decimalValue(buf.currentCharacter) { - ok = true - if tooBig || multiplyBy10(&result,andAdd:numeral) != .noError { - tooBig = true - if result._exponent == Int32(Int8.max) { - repeat { - buf.advance() - } while decimalValue(buf.currentCharacter) != nil - return nil - } - result._exponent += 1 - } - buf.advance() - } - - // get the decimal point - if let us = UnicodeScalar(buf.currentCharacter), Character(us) == ds { - ok = true - buf.advance() - // continue to build the mantissa - while let numeral = decimalValue(buf.currentCharacter) { - if tooBig || multiplyBy10(&result,andAdd:numeral) != .noError { - tooBig = true - } else { - if result._exponent == Int32(Int8.min) { - repeat { - buf.advance() - } while decimalValue(buf.currentCharacter) != nil - return nil - } - result._exponent -= 1 - } - buf.advance() - } - } - - if buf.currentCharacter == unichar(unicodeScalarLiteral: "e") || buf.currentCharacter == unichar(unicodeScalarLiteral: "E") { - ok = true - var exponentIsNegative = false - var exponent: Int32 = 0 - - buf.advance() - if buf.currentCharacter == unichar(unicodeScalarLiteral: "-") { - exponentIsNegative = true - buf.advance() - } else if buf.currentCharacter == unichar(unicodeScalarLiteral: "+") { - buf.advance() - } - - while let numeral = decimalValue(buf.currentCharacter) { - exponent = 10 * exponent + Int32(numeral) - guard exponent <= 2*Int32(Int8.max) else { - return nil - } - - buf.advance() - } - - if exponentIsNegative { - exponent = -exponent - } - exponent += result._exponent - guard exponent >= Int32(Int8.min) && exponent <= Int32(Int8.max) else { - return nil - } - result._exponent = exponent - } - - // No valid characters have been seen upto this point so error out. - guard ok == true else { return nil } - - result.isNegative = neg - - // if we get to this point, and have NaN, then the input string was probably "-0" - // or some variation on that, and normalize that to zero. - if result.isNaN { - result = Decimal(0) + + guard let start = string.index(string.startIndex, offsetBy: _scanLocation, limitedBy: string.endIndex) else { + return nil } + let substring = string[start.. Int? { + private func decimalValue(_ ch: unichar) -> UInt16? { guard let s = UnicodeScalar(ch), s.isASCII else { return nil } - return Character(s).wholeNumberValue + guard let value = Character(s).wholeNumberValue else { return nil } + return UInt16(value) } } diff --git a/Sources/Foundation/JSONDecoder.swift b/Sources/Foundation/JSONDecoder.swift index aef6c2a0f6..b960b321bc 100644 --- a/Sources/Foundation/JSONDecoder.swift +++ b/Sources/Foundation/JSONDecoder.swift @@ -10,1007 +10,16 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import CoreFoundation - -/// A marker protocol used to determine whether a value is a `String`-keyed `Dictionary` -/// containing `Decodable` values (in which case it should be exempt from key conversion strategies). -/// -/// The marker protocol also provides access to the type of the `Decodable` values, -/// which is needed for the implementation of the key conversion strategy exemption. -/// -fileprivate protocol _JSONStringDictionaryDecodableMarker { - static var elementType: Decodable.Type { get } -} - -extension Dictionary: _JSONStringDictionaryDecodableMarker where Key == String, Value: Decodable { - static var elementType: Decodable.Type { return Value.self } -} - -//===----------------------------------------------------------------------===// -// JSON Decoder -//===----------------------------------------------------------------------===// - -/// `JSONDecoder` facilitates the decoding of JSON into semantic `Decodable` types. -open class JSONDecoder { - // MARK: Options - - /// The strategy to use for decoding `Date` values. - public enum DateDecodingStrategy { - /// Defer to `Date` for decoding. This is the default strategy. - case deferredToDate - - /// Decode the `Date` as a UNIX timestamp from a JSON number. - case secondsSince1970 - - /// Decode the `Date` as UNIX millisecond timestamp from a JSON number. - case millisecondsSince1970 - - /// Decode the `Date` as an ISO-8601-formatted string (in RFC 3339 format). - @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) - case iso8601 - - /// Decode the `Date` as a string parsed by the given formatter. - case formatted(DateFormatter) - - /// Decode the `Date` as a custom value decoded by the given closure. - case custom((_ decoder: Decoder) throws -> Date) - } - - /// The strategy to use for decoding `Data` values. - public enum DataDecodingStrategy { - /// Defer to `Data` for decoding. - case deferredToData - - /// Decode the `Data` from a Base64-encoded string. This is the default strategy. - case base64 - - /// Decode the `Data` as a custom value decoded by the given closure. - case custom((_ decoder: Decoder) throws -> Data) - } - - /// The strategy to use for non-JSON-conforming floating-point values (IEEE 754 infinity and NaN). - public enum NonConformingFloatDecodingStrategy { - /// Throw upon encountering non-conforming values. This is the default strategy. - case `throw` - - /// Decode the values from the given representation strings. - case convertFromString(positiveInfinity: String, negativeInfinity: String, nan: String) - } - - /// The strategy to use for automatically changing the value of keys before decoding. - public enum KeyDecodingStrategy { - /// Use the keys specified by each type. This is the default strategy. - case useDefaultKeys - - /// Convert from "snake_case_keys" to "camelCaseKeys" before attempting to match a key with the one specified by each type. - /// - /// The conversion to upper case uses `Locale.system`, also known as the ICU "root" locale. This means the result is consistent regardless of the current user's locale and language preferences. - /// - /// Converting from snake case to camel case: - /// 1. Capitalizes the word starting after each `_` - /// 2. Removes all `_` - /// 3. Preserves starting and ending `_` (as these are often used to indicate private variables or other metadata). - /// For example, `one_two_three` becomes `oneTwoThree`. `_one_two_three_` becomes `_oneTwoThree_`. - /// - /// - Note: Using a key decoding strategy has a nominal performance cost, as each string key has to be inspected for the `_` character. - case convertFromSnakeCase - - /// Provide a custom conversion from the key in the encoded JSON to the keys specified by the decoded types. - /// The full path to the current decoding position is provided for context (in case you need to locate this key within the payload). The returned key is used in place of the last component in the coding path before decoding. - /// If the result of the conversion is a duplicate key, then only one value will be present in the container for the type to decode from. - case custom((_ codingPath: [CodingKey]) -> CodingKey) - - fileprivate static func _convertFromSnakeCase(_ stringKey: String) -> String { - guard !stringKey.isEmpty else { return stringKey } - - // Find the first non-underscore character - guard let firstNonUnderscore = stringKey.firstIndex(where: { $0 != "_" }) else { - // Reached the end without finding an _ - return stringKey - } - - // Find the last non-underscore character - var lastNonUnderscore = stringKey.index(before: stringKey.endIndex) - while lastNonUnderscore > firstNonUnderscore && stringKey[lastNonUnderscore] == "_" { - stringKey.formIndex(before: &lastNonUnderscore) - } - - let keyRange = firstNonUnderscore...lastNonUnderscore - let leadingUnderscoreRange = stringKey.startIndex..(_ type: T.Type, from data: Data) throws -> T { - do { - var parser = JSONParser(bytes: Array(data)) - let json = try parser.parse() - return try JSONDecoderImpl(userInfo: self.userInfo, from: json, codingPath: [], options: self.options).unwrap(as: type) - } catch let error as JSONError { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: error)) - } catch { - throw error - } - } -} - -// MARK: - _JSONDecoder - -fileprivate struct JSONDecoderImpl { - let codingPath: [CodingKey] - let userInfo: [CodingUserInfoKey: Any] - - let json: JSONValue - let options: JSONDecoder._Options - - init(userInfo: [CodingUserInfoKey: Any], from json: JSONValue, codingPath: [CodingKey], options: JSONDecoder._Options) { - self.userInfo = userInfo - self.codingPath = codingPath - self.json = json - self.options = options - } -} - -extension JSONDecoderImpl: Decoder { - @usableFromInline func container(keyedBy _: Key.Type) throws -> - KeyedDecodingContainer where Key: CodingKey - { - switch self.json { - case .object(let dictionary): - let container = KeyedContainer( - impl: self, - codingPath: codingPath, - dictionary: dictionary - ) - return KeyedDecodingContainer(container) - case .null: - throw DecodingError.valueNotFound([String: JSONValue].self, DecodingError.Context( - codingPath: self.codingPath, - debugDescription: "Cannot get keyed decoding container -- found null value instead" - )) - default: - throw DecodingError.typeMismatch([String: JSONValue].self, DecodingError.Context( - codingPath: self.codingPath, - debugDescription: "Expected to decode \([String: JSONValue].self) but found \(self.json.debugDataTypeDescription) instead." - )) - } - } - - @usableFromInline func unkeyedContainer() throws -> UnkeyedDecodingContainer { - switch self.json { - case .array(let array): - return UnkeyedContainer( - impl: self, - codingPath: self.codingPath, - array: array - ) - case .null: - throw DecodingError.valueNotFound([String: JSONValue].self, DecodingError.Context( - codingPath: self.codingPath, - debugDescription: "Cannot get unkeyed decoding container -- found null value instead" - )) - default: - throw DecodingError.typeMismatch([JSONValue].self, DecodingError.Context( - codingPath: self.codingPath, - debugDescription: "Expected to decode \([JSONValue].self) but found \(self.json.debugDataTypeDescription) instead." - )) - } - } - - @usableFromInline func singleValueContainer() throws -> SingleValueDecodingContainer { - SingleValueContainer( - impl: self, - codingPath: self.codingPath, - json: self.json - ) - } - - // MARK: Special case handling - - func unwrap(as type: T.Type) throws -> T { - if type == Date.self { - return try self.unwrapDate() as! T - } - if type == Data.self { - return try self.unwrapData() as! T - } - if type == URL.self { - return try self.unwrapURL() as! T - } - if type == Decimal.self { - return try self.unwrapDecimal() as! T - } - if type is _JSONStringDictionaryDecodableMarker.Type { - return try self.unwrapDictionary(as: type) - } - - return try type.init(from: self) - } - - private func unwrapDate() throws -> Date { - switch self.options.dateDecodingStrategy { - case .deferredToDate: - return try Date(from: self) - - case .secondsSince1970: - let container = SingleValueContainer(impl: self, codingPath: self.codingPath, json: self.json) - let double = try container.decode(Double.self) - return Date(timeIntervalSince1970: double) - - case .millisecondsSince1970: - let container = SingleValueContainer(impl: self, codingPath: self.codingPath, json: self.json) - let double = try container.decode(Double.self) - return Date(timeIntervalSince1970: double / 1000.0) - - case .iso8601: - if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) { - let container = SingleValueContainer(impl: self, codingPath: self.codingPath, json: self.json) - let string = try container.decode(String.self) - guard let date = _iso8601Formatter.date(from: string) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Expected date string to be ISO8601-formatted.")) - } - +extension JSONDecoder.DateDecodingStrategy { + public static func formatted(_ formatter: DateFormatter) -> Self { + .custom { decoder in + let container = try decoder.singleValueContainer() + let result = try container.decode(String.self) + if let date = formatter.date(from: result) { return date } else { - fatalError("ISO8601DateFormatter is unavailable on this platform.") - } - - case .formatted(let formatter): - let container = SingleValueContainer(impl: self, codingPath: self.codingPath, json: self.json) - let string = try container.decode(String.self) - guard let date = formatter.date(from: string) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Date string does not match format expected by formatter.")) + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Date string does not match format expected by formatter.")) } - return date - - case .custom(let closure): - return try closure(self) - } - } - - private func unwrapData() throws -> Data { - switch self.options.dataDecodingStrategy { - case .deferredToData: - return try Data(from: self) - - case .base64: - let container = SingleValueContainer(impl: self, codingPath: self.codingPath, json: self.json) - let string = try container.decode(String.self) - - guard let data = Data(base64Encoded: string) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Encountered Data is not valid Base64.")) - } - - return data - - case .custom(let closure): - return try closure(self) - } - } - - private func unwrapURL() throws -> URL { - let container = SingleValueContainer(impl: self, codingPath: self.codingPath, json: self.json) - let string = try container.decode(String.self) - - guard let url = URL(string: string) else { - throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, - debugDescription: "Invalid URL string.")) - } - return url - } - - private func unwrapDecimal() throws -> Decimal { - guard case .number(let numberString) = self.json else { - throw DecodingError.typeMismatch(Decimal.self, DecodingError.Context(codingPath: self.codingPath, debugDescription: "")) - } - - guard let decimal = Decimal(string: numberString) else { - throw DecodingError.dataCorrupted(.init( - codingPath: self.codingPath, - debugDescription: "Parsed JSON number <\(numberString)> does not fit in \(Decimal.self).")) - } - - return decimal - } - - private func unwrapDictionary(as: T.Type) throws -> T { - guard let dictType = T.self as? (_JSONStringDictionaryDecodableMarker & Decodable).Type else { - preconditionFailure("Must only be called of T implements _JSONStringDictionaryDecodableMarker") - } - - guard case .object(let object) = self.json else { - throw DecodingError.typeMismatch([String: JSONValue].self, DecodingError.Context( - codingPath: self.codingPath, - debugDescription: "Expected to decode \([String: JSONValue].self) but found \(self.json.debugDataTypeDescription) instead." - )) - } - - var result = [String: Any]() - - for (key, value) in object { - var newPath = self.codingPath - newPath.append(_JSONKey(stringValue: key)!) - let newDecoder = JSONDecoderImpl(userInfo: self.userInfo, from: value, codingPath: newPath, options: self.options) - - result[key] = try dictType.elementType.createByDirectlyUnwrapping(from: newDecoder) - } - - return result as! T - } - - private func unwrapFloatingPoint( - from value: JSONValue, - for additionalKey: CodingKey? = nil, - as type: T.Type) throws -> T - { - if case .number(let number) = value { - guard let floatingPoint = T(number), floatingPoint.isFinite else { - var path = self.codingPath - if let additionalKey = additionalKey { - path.append(additionalKey) - } - throw DecodingError.dataCorrupted(.init( - codingPath: path, - debugDescription: "Parsed JSON number <\(number)> does not fit in \(T.self).")) - } - - return floatingPoint - } - - if case .string(let string) = value, - case .convertFromString(let posInfString, let negInfString, let nanString) = - self.options.nonConformingFloatDecodingStrategy - { - if string == posInfString { - return T.infinity - } else if string == negInfString { - return -T.infinity - } else if string == nanString { - return T.nan - } - } - - throw self.createTypeMismatchError(type: T.self, for: additionalKey, value: value) - } - - private func unwrapFixedWidthInteger( - from value: JSONValue, - for additionalKey: CodingKey? = nil, - as type: T.Type) throws -> T - { - guard case .number(let number) = value else { - throw self.createTypeMismatchError(type: T.self, for: additionalKey, value: value) - } - - // this is the fast pass. Number directly convertible to Integer - if let integer = T(number) { - return integer - } - - // this is the really slow path... If the fast path has failed. For example for "34.0" as - // an integer, we try to go through NSNumber - if let nsNumber = NSNumber.fromJSONNumber(number) { - if type == UInt8.self, NSNumber(value: nsNumber.uint8Value) == nsNumber { - return nsNumber.uint8Value as! T - } - if type == Int8.self, NSNumber(value: nsNumber.int8Value) == nsNumber { - return nsNumber.int8Value as! T - } - if type == UInt16.self, NSNumber(value: nsNumber.uint16Value) == nsNumber { - return nsNumber.uint16Value as! T - } - if type == Int16.self, NSNumber(value: nsNumber.int16Value) == nsNumber { - return nsNumber.int16Value as! T - } - if type == UInt32.self, NSNumber(value: nsNumber.uint32Value) == nsNumber { - return nsNumber.uint32Value as! T - } - if type == Int32.self, NSNumber(value: nsNumber.int32Value) == nsNumber { - return nsNumber.int32Value as! T - } - if type == UInt64.self, NSNumber(value: nsNumber.uint64Value) == nsNumber { - return nsNumber.uint64Value as! T - } - if type == Int64.self, NSNumber(value: nsNumber.int64Value) == nsNumber { - return nsNumber.int64Value as! T - } - if type == UInt.self, NSNumber(value: nsNumber.uintValue) == nsNumber { - return nsNumber.uintValue as! T - } - if type == Int.self, NSNumber(value: nsNumber.intValue) == nsNumber { - return nsNumber.intValue as! T - } - } - - var path = self.codingPath - if let additionalKey = additionalKey { - path.append(additionalKey) - } - throw DecodingError.dataCorrupted(.init( - codingPath: path, - debugDescription: "Parsed JSON number <\(number)> does not fit in \(T.self).")) - } - - private func createTypeMismatchError(type: Any.Type, for additionalKey: CodingKey? = nil, value: JSONValue) -> DecodingError { - var path = self.codingPath - if let additionalKey = additionalKey { - path.append(additionalKey) - } - - return DecodingError.typeMismatch(type, .init( - codingPath: path, - debugDescription: "Expected to decode \(type) but found \(value.debugDataTypeDescription) instead." - )) - } -} - -extension Decodable { - fileprivate static func createByDirectlyUnwrapping(from decoder: JSONDecoderImpl) throws -> Self { - if Self.self == URL.self - || Self.self == Date.self - || Self.self == Data.self - || Self.self == Decimal.self - || Self.self is _JSONStringDictionaryDecodableMarker.Type - { - return try decoder.unwrap(as: Self.self) - } - - return try Self.init(from: decoder) - } -} - -extension JSONDecoderImpl { - struct SingleValueContainer: SingleValueDecodingContainer { - let impl: JSONDecoderImpl - let value: JSONValue - let codingPath: [CodingKey] - - init(impl: JSONDecoderImpl, codingPath: [CodingKey], json: JSONValue) { - self.impl = impl - self.codingPath = codingPath - self.value = json - } - - func decodeNil() -> Bool { - self.value == .null - } - - func decode(_: Bool.Type) throws -> Bool { - guard case .bool(let bool) = self.value else { - throw self.impl.createTypeMismatchError(type: Bool.self, value: self.value) - } - - return bool - } - - func decode(_: String.Type) throws -> String { - guard case .string(let string) = self.value else { - throw self.impl.createTypeMismatchError(type: String.self, value: self.value) - } - - return string - } - - func decode(_: Double.Type) throws -> Double { - try decodeFloatingPoint() - } - - func decode(_: Float.Type) throws -> Float { - try decodeFloatingPoint() - } - - func decode(_: Int.Type) throws -> Int { - try decodeFixedWidthInteger() - } - - func decode(_: Int8.Type) throws -> Int8 { - try decodeFixedWidthInteger() - } - - func decode(_: Int16.Type) throws -> Int16 { - try decodeFixedWidthInteger() - } - - func decode(_: Int32.Type) throws -> Int32 { - try decodeFixedWidthInteger() - } - - func decode(_: Int64.Type) throws -> Int64 { - try decodeFixedWidthInteger() - } - - func decode(_: UInt.Type) throws -> UInt { - try decodeFixedWidthInteger() - } - - func decode(_: UInt8.Type) throws -> UInt8 { - try decodeFixedWidthInteger() - } - - func decode(_: UInt16.Type) throws -> UInt16 { - try decodeFixedWidthInteger() - } - - func decode(_: UInt32.Type) throws -> UInt32 { - try decodeFixedWidthInteger() - } - - func decode(_: UInt64.Type) throws -> UInt64 { - try decodeFixedWidthInteger() - } - - func decode(_ type: T.Type) throws -> T where T: Decodable { - try self.impl.unwrap(as: type) - } - - @inline(__always) private func decodeFixedWidthInteger() throws -> T { - try self.impl.unwrapFixedWidthInteger(from: self.value, as: T.self) - } - - @inline(__always) private func decodeFloatingPoint() throws -> T { - try self.impl.unwrapFloatingPoint(from: self.value, as: T.self) - } - } -} - -extension JSONDecoderImpl { - struct KeyedContainer: KeyedDecodingContainerProtocol { - typealias Key = K - - let impl: JSONDecoderImpl - let codingPath: [CodingKey] - let dictionary: [String: JSONValue] - - init(impl: JSONDecoderImpl, codingPath: [CodingKey], dictionary: [String: JSONValue]) { - self.impl = impl - self.codingPath = codingPath - - switch impl.options.keyDecodingStrategy { - case .useDefaultKeys: - self.dictionary = dictionary - case .convertFromSnakeCase: - // Convert the snake case keys in the container to camel case. - // If we hit a duplicate key after conversion, then we'll use the first one we saw. - // Effectively an undefined behavior with JSON dictionaries. - var converted = [String: JSONValue]() - converted.reserveCapacity(dictionary.count) - dictionary.forEach { (key, value) in - converted[JSONDecoder.KeyDecodingStrategy._convertFromSnakeCase(key)] = value - } - self.dictionary = converted - case .custom(let converter): - var converted = [String: JSONValue]() - converted.reserveCapacity(dictionary.count) - dictionary.forEach { (key, value) in - var pathForKey = codingPath - pathForKey.append(_JSONKey(stringValue: key)!) - converted[converter(pathForKey).stringValue] = value - } - self.dictionary = converted - } - } - - var allKeys: [K] { - self.dictionary.keys.compactMap { K(stringValue: $0) } - } - - func contains(_ key: K) -> Bool { - if let _ = dictionary[key.stringValue] { - return true - } - return false - } - - func decodeNil(forKey key: K) throws -> Bool { - let value = try getValue(forKey: key) - return value == .null - } - - func decode(_ type: Bool.Type, forKey key: K) throws -> Bool { - let value = try getValue(forKey: key) - - guard case .bool(let bool) = value else { - throw createTypeMismatchError(type: type, forKey: key, value: value) - } - - return bool - } - - func decode(_ type: String.Type, forKey key: K) throws -> String { - let value = try getValue(forKey: key) - - guard case .string(let string) = value else { - throw createTypeMismatchError(type: type, forKey: key, value: value) - } - - return string - } - - func decode(_: Double.Type, forKey key: K) throws -> Double { - try decodeFloatingPoint(key: key) - } - - func decode(_: Float.Type, forKey key: K) throws -> Float { - try decodeFloatingPoint(key: key) - } - - func decode(_: Int.Type, forKey key: K) throws -> Int { - try decodeFixedWidthInteger(key: key) - } - - func decode(_: Int8.Type, forKey key: K) throws -> Int8 { - try decodeFixedWidthInteger(key: key) - } - - func decode(_: Int16.Type, forKey key: K) throws -> Int16 { - try decodeFixedWidthInteger(key: key) - } - - func decode(_: Int32.Type, forKey key: K) throws -> Int32 { - try decodeFixedWidthInteger(key: key) - } - - func decode(_: Int64.Type, forKey key: K) throws -> Int64 { - try decodeFixedWidthInteger(key: key) - } - - func decode(_: UInt.Type, forKey key: K) throws -> UInt { - try decodeFixedWidthInteger(key: key) - } - - func decode(_: UInt8.Type, forKey key: K) throws -> UInt8 { - try decodeFixedWidthInteger(key: key) - } - - func decode(_: UInt16.Type, forKey key: K) throws -> UInt16 { - try decodeFixedWidthInteger(key: key) - } - - func decode(_: UInt32.Type, forKey key: K) throws -> UInt32 { - try decodeFixedWidthInteger(key: key) - } - - func decode(_: UInt64.Type, forKey key: K) throws -> UInt64 { - try decodeFixedWidthInteger(key: key) - } - - func decode(_ type: T.Type, forKey key: K) throws -> T where T: Decodable { - let newDecoder = try decoderForKey(key) - return try newDecoder.unwrap(as: type) - } - - func nestedContainer(keyedBy type: NestedKey.Type, forKey key: K) throws - -> KeyedDecodingContainer where NestedKey: CodingKey - { - try decoderForKey(key).container(keyedBy: type) - } - - func nestedUnkeyedContainer(forKey key: K) throws -> UnkeyedDecodingContainer { - try decoderForKey(key).unkeyedContainer() - } - - func superDecoder() throws -> Decoder { - return decoderForKeyNoThrow(_JSONKey.super) - } - - func superDecoder(forKey key: K) throws -> Decoder { - return decoderForKeyNoThrow(key) - } - - private func decoderForKey(_ key: LocalKey) throws -> JSONDecoderImpl { - let value = try getValue(forKey: key) - var newPath = self.codingPath - newPath.append(key) - - return JSONDecoderImpl( - userInfo: self.impl.userInfo, - from: value, - codingPath: newPath, - options: self.impl.options - ) - } - - private func decoderForKeyNoThrow(_ key: LocalKey) -> JSONDecoderImpl { - let value: JSONValue - do { - value = try getValue(forKey: key) - } catch { - // if there no value for this key then return a null value - value = .null - } - var newPath = self.codingPath - newPath.append(key) - - return JSONDecoderImpl( - userInfo: self.impl.userInfo, - from: value, - codingPath: newPath, - options: self.impl.options - ) - } - - @inline(__always) private func getValue(forKey key: LocalKey) throws -> JSONValue { - guard let value = dictionary[key.stringValue] else { - throw DecodingError.keyNotFound(key, .init( - codingPath: self.codingPath, - debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")." - )) - } - - return value - } - - @inline(__always) private func createTypeMismatchError(type: Any.Type, forKey key: K, value: JSONValue) -> DecodingError { - let codingPath = self.codingPath + [key] - return DecodingError.typeMismatch(type, .init( - codingPath: codingPath, debugDescription: "Expected to decode \(type) but found \(value.debugDataTypeDescription) instead." - )) - } - - @inline(__always) private func decodeFixedWidthInteger(key: Self.Key) throws -> T { - let value = try getValue(forKey: key) - return try self.impl.unwrapFixedWidthInteger(from: value, for: key, as: T.self) - } - - @inline(__always) private func decodeFloatingPoint(key: K) throws -> T { - let value = try getValue(forKey: key) - return try self.impl.unwrapFloatingPoint(from: value, for: key, as: T.self) - } - } -} - -extension JSONDecoderImpl { - struct UnkeyedContainer: UnkeyedDecodingContainer { - let impl: JSONDecoderImpl - let codingPath: [CodingKey] - let array: [JSONValue] - - var count: Int? { self.array.count } - var isAtEnd: Bool { self.currentIndex >= (self.count ?? 0) } - var currentIndex = 0 - - init(impl: JSONDecoderImpl, codingPath: [CodingKey], array: [JSONValue]) { - self.impl = impl - self.codingPath = codingPath - self.array = array - } - - mutating func decodeNil() throws -> Bool { - if try self.getNextValue(ofType: Never.self) == .null { - self.currentIndex += 1 - return true - } - - // The protocol states: - // If the value is not null, does not increment currentIndex. - return false - } - - mutating func decode(_ type: Bool.Type) throws -> Bool { - let value = try self.getNextValue(ofType: Bool.self) - guard case .bool(let bool) = value else { - throw impl.createTypeMismatchError(type: type, for: _JSONKey(index: currentIndex), value: value) - } - - self.currentIndex += 1 - return bool - } - - mutating func decode(_ type: String.Type) throws -> String { - let value = try self.getNextValue(ofType: String.self) - guard case .string(let string) = value else { - throw impl.createTypeMismatchError(type: type, for: _JSONKey(index: currentIndex), value: value) - } - - self.currentIndex += 1 - return string - } - - mutating func decode(_: Double.Type) throws -> Double { - try decodeFloatingPoint() - } - - mutating func decode(_: Float.Type) throws -> Float { - try decodeFloatingPoint() - } - - mutating func decode(_: Int.Type) throws -> Int { - try decodeFixedWidthInteger() - } - - mutating func decode(_: Int8.Type) throws -> Int8 { - try decodeFixedWidthInteger() - } - - mutating func decode(_: Int16.Type) throws -> Int16 { - try decodeFixedWidthInteger() - } - - mutating func decode(_: Int32.Type) throws -> Int32 { - try decodeFixedWidthInteger() - } - - mutating func decode(_: Int64.Type) throws -> Int64 { - try decodeFixedWidthInteger() - } - - mutating func decode(_: UInt.Type) throws -> UInt { - try decodeFixedWidthInteger() - } - - mutating func decode(_: UInt8.Type) throws -> UInt8 { - try decodeFixedWidthInteger() - } - - mutating func decode(_: UInt16.Type) throws -> UInt16 { - try decodeFixedWidthInteger() - } - - mutating func decode(_: UInt32.Type) throws -> UInt32 { - try decodeFixedWidthInteger() - } - - mutating func decode(_: UInt64.Type) throws -> UInt64 { - try decodeFixedWidthInteger() - } - - mutating func decode(_ type: T.Type) throws -> T where T: Decodable { - let newDecoder = try decoderForNextElement(ofType: type) - let result = try newDecoder.unwrap(as: type) - - // Because of the requirement that the index not be incremented unless - // decoding the desired result type succeeds, it can not be a tail call. - // Hopefully the compiler still optimizes well enough that the result - // doesn't get copied around. - self.currentIndex += 1 - return result - } - - mutating func nestedContainer(keyedBy type: NestedKey.Type) throws - -> KeyedDecodingContainer where NestedKey: CodingKey - { - let decoder = try decoderForNextElement(ofType: KeyedDecodingContainer.self) - let container = try decoder.container(keyedBy: type) - - self.currentIndex += 1 - return container - } - - mutating func nestedUnkeyedContainer() throws -> UnkeyedDecodingContainer { - let decoder = try decoderForNextElement(ofType: UnkeyedDecodingContainer.self) - let container = try decoder.unkeyedContainer() - - self.currentIndex += 1 - return container - } - - mutating func superDecoder() throws -> Decoder { - let decoder = try decoderForNextElement(ofType: Decoder.self) - self.currentIndex += 1 - return decoder - } - - private mutating func decoderForNextElement(ofType: T.Type) throws -> JSONDecoderImpl { - let value = try self.getNextValue(ofType: T.self) - let newPath = self.codingPath + [_JSONKey(index: self.currentIndex)] - - return JSONDecoderImpl( - userInfo: self.impl.userInfo, - from: value, - codingPath: newPath, - options: self.impl.options - ) - } - - @inline(__always) - private func getNextValue(ofType: T.Type) throws -> JSONValue { - guard !self.isAtEnd else { - var message = "Unkeyed container is at end." - if T.self == UnkeyedContainer.self { - message = "Cannot get nested unkeyed container -- unkeyed container is at end." - } - if T.self == Decoder.self { - message = "Cannot get superDecoder() -- unkeyed container is at end." - } - - var path = self.codingPath - path.append(_JSONKey(index: self.currentIndex)) - - throw DecodingError.valueNotFound( - T.self, - .init(codingPath: path, - debugDescription: message, - underlyingError: nil)) - } - return self.array[self.currentIndex] - } - - @inline(__always) private mutating func decodeFixedWidthInteger() throws -> T { - let value = try self.getNextValue(ofType: T.self) - let key = _JSONKey(index: self.currentIndex) - let result = try self.impl.unwrapFixedWidthInteger(from: value, for: key, as: T.self) - self.currentIndex += 1 - return result - } - - @inline(__always) private mutating func decodeFloatingPoint() throws -> T { - let value = try self.getNextValue(ofType: T.self) - let key = _JSONKey(index: self.currentIndex) - let result = try self.impl.unwrapFloatingPoint(from: value, for: key, as: T.self) - self.currentIndex += 1 - return result } } } diff --git a/Sources/Foundation/JSONEncoder.swift b/Sources/Foundation/JSONEncoder.swift index df26ca3dca..733b4e3931 100644 --- a/Sources/Foundation/JSONEncoder.swift +++ b/Sources/Foundation/JSONEncoder.swift @@ -10,1240 +10,11 @@ // //===----------------------------------------------------------------------===// -@_implementationOnly import CoreFoundation - -/// A marker protocol used to determine whether a value is a `String`-keyed `Dictionary` -/// containing `Encodable` values (in which case it should be exempt from key conversion strategies). -/// -fileprivate protocol _JSONStringDictionaryEncodableMarker { } - -extension Dictionary: _JSONStringDictionaryEncodableMarker where Key == String, Value: Encodable { } - -//===----------------------------------------------------------------------===// -// JSON Encoder -//===----------------------------------------------------------------------===// - -/// `JSONEncoder` facilitates the encoding of `Encodable` values into JSON. -open class JSONEncoder { - // MARK: Options - - /// The formatting of the output JSON data. - public struct OutputFormatting: OptionSet { - /// The format's default value. - public let rawValue: UInt - - /// Creates an OutputFormatting value with the given raw value. - public init(rawValue: UInt) { - self.rawValue = rawValue - } - - /// Produce human-readable JSON with indented output. - public static let prettyPrinted = OutputFormatting(rawValue: 1 << 0) - - /// Produce JSON with dictionary keys sorted in lexicographic order. - @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) - public static let sortedKeys = OutputFormatting(rawValue: 1 << 1) - - /// By default slashes get escaped ("/" → "\/", "http://apple.com/" → "http:\/\/apple.com\/") - /// for security reasons, allowing outputted JSON to be safely embedded within HTML/XML. - /// In contexts where this escaping is unnecessary, the JSON is known to not be embedded, - /// or is intended only for display, this option avoids this escaping. - public static let withoutEscapingSlashes = OutputFormatting(rawValue: 1 << 3) - } - - /// The strategy to use for encoding `Date` values. - public enum DateEncodingStrategy { - /// Defer to `Date` for choosing an encoding. This is the default strategy. - case deferredToDate - - /// Encode the `Date` as a UNIX timestamp (as a JSON number). - case secondsSince1970 - - /// Encode the `Date` as UNIX millisecond timestamp (as a JSON number). - case millisecondsSince1970 - - /// Encode the `Date` as an ISO-8601-formatted string (in RFC 3339 format). - @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) - case iso8601 - - /// Encode the `Date` as a string formatted by the given formatter. - case formatted(DateFormatter) - - /// Encode the `Date` as a custom value encoded by the given closure. - /// - /// If the closure fails to encode a value into the given encoder, the encoder will encode an empty automatic container in its place. - case custom((Date, Encoder) throws -> Void) - } - - /// The strategy to use for encoding `Data` values. - public enum DataEncodingStrategy { - /// Defer to `Data` for choosing an encoding. - case deferredToData - - /// Encoded the `Data` as a Base64-encoded string. This is the default strategy. - case base64 - - /// Encode the `Data` as a custom value encoded by the given closure. - /// - /// If the closure fails to encode a value into the given encoder, the encoder will encode an empty automatic container in its place. - case custom((Data, Encoder) throws -> Void) - } - - /// The strategy to use for non-JSON-conforming floating-point values (IEEE 754 infinity and NaN). - public enum NonConformingFloatEncodingStrategy { - /// Throw upon encountering non-conforming values. This is the default strategy. - case `throw` - - /// Encode the values using the given representation strings. - case convertToString(positiveInfinity: String, negativeInfinity: String, nan: String) - } - - /// The strategy to use for automatically changing the value of keys before encoding. - public enum KeyEncodingStrategy { - /// Use the keys specified by each type. This is the default strategy. - case useDefaultKeys - - /// Convert from "camelCaseKeys" to "snake_case_keys" before writing a key to JSON payload. - /// - /// Capital characters are determined by testing membership in `CharacterSet.uppercaseLetters` and `CharacterSet.lowercaseLetters` (Unicode General Categories Lu and Lt). - /// The conversion to lower case uses `Locale.system`, also known as the ICU "root" locale. This means the result is consistent regardless of the current user's locale and language preferences. - /// - /// Converting from camel case to snake case: - /// 1. Splits words at the boundary of lower-case to upper-case - /// 2. Inserts `_` between words - /// 3. Lowercases the entire string - /// 4. Preserves starting and ending `_`. - /// - /// For example, `oneTwoThree` becomes `one_two_three`. `_oneTwoThree_` becomes `_one_two_three_`. - /// - /// - Note: Using a key encoding strategy has a nominal performance cost, as each string key has to be converted. - case convertToSnakeCase - - /// Provide a custom conversion to the key in the encoded JSON from the keys specified by the encoded types. - /// The full path to the current encoding position is provided for context (in case you need to locate this key within the payload). The returned key is used in place of the last component in the coding path before encoding. - /// If the result of the conversion is a duplicate key, then only one value will be present in the result. - case custom((_ codingPath: [CodingKey]) -> CodingKey) - - fileprivate static func _convertToSnakeCase(_ stringKey: String) -> String { - guard !stringKey.isEmpty else { return stringKey } - - var words: [Range] = [] - // The general idea of this algorithm is to split words on transition from lower to upper case, then on transition of >1 upper case characters to lowercase - // - // myProperty -> my_property - // myURLProperty -> my_url_property - // - // We assume, per Swift naming conventions, that the first character of the key is lowercase. - var wordStart = stringKey.startIndex - var searchRange = stringKey.index(after: wordStart)..1 capital letters. Turn those into a word, stopping at the capital before the lower case character. - let beforeLowerIndex = stringKey.index(before: lowerCaseRange.lowerBound) - words.append(upperCaseRange.lowerBound..(_ value: T) throws -> Data { - let value: JSONValue = try encodeAsJSONValue(value) - let writer = JSONValue.Writer(options: self.outputFormatting) - let bytes = writer.writeValue(value) - - return Data(bytes) - } - - func encodeAsJSONValue(_ value: T) throws -> JSONValue { - let encoder = JSONEncoderImpl(options: self.options, codingPath: []) - guard let topLevel = try encoder.wrapEncodable(value, for: nil) else { - throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: [], debugDescription: "Top-level \(T.self) did not encode any values.")) - } - - return topLevel - } -} - -// MARK: - _JSONEncoder - -private enum JSONFuture { - case value(JSONValue) - case encoder(JSONEncoderImpl) - case nestedArray(RefArray) - case nestedObject(RefObject) - - class RefArray { - private(set) var array: [JSONFuture] = [] - - init() { - self.array.reserveCapacity(10) - } - - @inline(__always) func append(_ element: JSONValue) { - self.array.append(.value(element)) - } - - @inline(__always) func append(_ encoder: JSONEncoderImpl) { - self.array.append(.encoder(encoder)) - } - - @inline(__always) func appendArray() -> RefArray { - let array = RefArray() - self.array.append(.nestedArray(array)) - return array - } - - @inline(__always) func appendObject() -> RefObject { - let object = RefObject() - self.array.append(.nestedObject(object)) - return object - } - - var values: [JSONValue] { - self.array.map { (future) -> JSONValue in - switch future { - case .value(let value): - return value - case .nestedArray(let array): - return .array(array.values) - case .nestedObject(let object): - return .object(object.values) - case .encoder(let encoder): - return encoder.value ?? .object([:]) - } - } - } - } - - class RefObject { - private(set) var dict: [String: JSONFuture] = [:] - - init() { - self.dict.reserveCapacity(20) - } - - @inline(__always) func set(_ value: JSONValue, for key: String) { - self.dict[key] = .value(value) - } - - @inline(__always) func setArray(for key: String) -> RefArray { - switch self.dict[key] { - case .encoder: - preconditionFailure("For key \"\(key)\" an encoder has already been created.") - case .nestedObject: - preconditionFailure("For key \"\(key)\" a keyed container has already been created.") - case .nestedArray(let array): - return array - case .none, .value: - let array = RefArray() - dict[key] = .nestedArray(array) - return array - } - } - - @inline(__always) func setObject(for key: String) -> RefObject { - switch self.dict[key] { - case .encoder: - preconditionFailure("For key \"\(key)\" an encoder has already been created.") - case .nestedObject(let object): - return object - case .nestedArray: - preconditionFailure("For key \"\(key)\" a unkeyed container has already been created.") - case .none, .value: - let object = RefObject() - dict[key] = .nestedObject(object) - return object - } - } - - @inline(__always) func set(_ encoder: JSONEncoderImpl, for key: String) { - switch self.dict[key] { - case .encoder: - preconditionFailure("For key \"\(key)\" an encoder has already been created.") - case .nestedObject: - preconditionFailure("For key \"\(key)\" a keyed container has already been created.") - case .nestedArray: - preconditionFailure("For key \"\(key)\" a unkeyed container has already been created.") - case .none, .value: - dict[key] = .encoder(encoder) - } - } - - var values: [String: JSONValue] { - self.dict.mapValues { (future) -> JSONValue in - switch future { - case .value(let value): - return value - case .nestedArray(let array): - return .array(array.values) - case .nestedObject(let object): - return .object(object.values) - case .encoder(let encoder): - return encoder.value ?? .object([:]) - } - } - } - } -} - -private class JSONEncoderImpl { - let options: JSONEncoder._Options - let codingPath: [CodingKey] - var userInfo: [CodingUserInfoKey: Any] { - options.userInfo - } - - var singleValue: JSONValue? - var array: JSONFuture.RefArray? - var object: JSONFuture.RefObject? - - var value: JSONValue? { - if let object = self.object { - return .object(object.values) - } - if let array = self.array { - return .array(array.values) - } - return self.singleValue - } - - init(options: JSONEncoder._Options, codingPath: [CodingKey]) { - self.options = options - self.codingPath = codingPath - } -} - -extension JSONEncoderImpl: Encoder { - func container(keyedBy _: Key.Type) -> KeyedEncodingContainer where Key: CodingKey { - if let _ = object { - let container = JSONKeyedEncodingContainer(impl: self, codingPath: codingPath) - return KeyedEncodingContainer(container) - } - - guard self.singleValue == nil, self.array == nil else { - preconditionFailure() - } - - self.object = JSONFuture.RefObject() - let container = JSONKeyedEncodingContainer(impl: self, codingPath: codingPath) - return KeyedEncodingContainer(container) - } - - func unkeyedContainer() -> UnkeyedEncodingContainer { - if let _ = array { - return JSONUnkeyedEncodingContainer(impl: self, codingPath: self.codingPath) - } - - guard self.singleValue == nil, self.object == nil else { - preconditionFailure() - } - - self.array = JSONFuture.RefArray() - return JSONUnkeyedEncodingContainer(impl: self, codingPath: self.codingPath) - } - - func singleValueContainer() -> SingleValueEncodingContainer { - guard self.object == nil, self.array == nil else { - preconditionFailure() - } - - return JSONSingleValueEncodingContainer(impl: self, codingPath: self.codingPath) - } -} - -// this is a private protocol to implement convenience methods directly on the EncodingContainers - -extension JSONEncoderImpl: _SpecialTreatmentEncoder { - var impl: JSONEncoderImpl { - return self - } - - // untyped escape hatch. needed for `wrapObject` - func wrapUntyped(_ encodable: Encodable) throws -> JSONValue { - switch encodable { - case let date as Date: - return try self.wrapDate(date, for: nil) - case let data as Data: - return try self.wrapData(data, for: nil) - case let url as URL: - return .string(url.absoluteString) - case let decimal as Decimal: - return .number(decimal.description) - case let object as [String: Encodable]: // this emits a warning, but it works perfectly - return try self.wrapObject(object, for: nil) - default: - try encodable.encode(to: self) - return self.value ?? .object([:]) - } - } -} - -private protocol _SpecialTreatmentEncoder { - var codingPath: [CodingKey] { get } - var options: JSONEncoder._Options { get } - var impl: JSONEncoderImpl { get } -} - -extension _SpecialTreatmentEncoder { - @inline(__always) fileprivate func wrapFloat(_ float: F, for additionalKey: CodingKey?) throws -> JSONValue { - guard !float.isNaN, !float.isInfinite else { - if case .convertToString(let posInfString, let negInfString, let nanString) = self.options.nonConformingFloatEncodingStrategy { - switch float { - case F.infinity: - return .string(posInfString) - case -F.infinity: - return .string(negInfString) - default: - // must be nan in this case - return .string(nanString) - } - } - - var path = self.codingPath - if let additionalKey = additionalKey { - path.append(additionalKey) - } - - throw EncodingError.invalidValue(float, .init( - codingPath: path, - debugDescription: "Unable to encode \(F.self).\(float) directly in JSON." - )) - } - - var string = float.description - if string.hasSuffix(".0") { - string.removeLast(2) - } - return .number(string) - } - - fileprivate func wrapEncodable(_ encodable: E, for additionalKey: CodingKey?) throws -> JSONValue? { - switch encodable { - case let date as Date: - return try self.wrapDate(date, for: additionalKey) - case let data as Data: - return try self.wrapData(data, for: additionalKey) - case let url as URL: - return .string(url.absoluteString) - case let decimal as Decimal: - return .number(decimal.description) - case let object as _JSONStringDictionaryEncodableMarker: - return try self.wrapObject(object as! [String: Encodable], for: additionalKey) - default: - let encoder = self.getEncoder(for: additionalKey) - try encodable.encode(to: encoder) - return encoder.value - } - } - - func wrapDate(_ date: Date, for additionalKey: CodingKey?) throws -> JSONValue { - switch self.options.dateEncodingStrategy { - case .deferredToDate: - let encoder = self.getEncoder(for: additionalKey) - try date.encode(to: encoder) - return encoder.value ?? .null - - case .secondsSince1970: - return .number(date.timeIntervalSince1970.description) - - case .millisecondsSince1970: - return .number((date.timeIntervalSince1970 * 1000).description) - - case .iso8601: - if #available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) { - return .string(_iso8601Formatter.string(from: date)) - } else { - fatalError("ISO8601DateFormatter is unavailable on this platform.") - } - - case .formatted(let formatter): - return .string(formatter.string(from: date)) - - case .custom(let closure): - let encoder = self.getEncoder(for: additionalKey) - try closure(date, encoder) - // The closure didn't encode anything. Return the default keyed container. - return encoder.value ?? .object([:]) - } - } - - func wrapData(_ data: Data, for additionalKey: CodingKey?) throws -> JSONValue { - switch self.options.dataEncodingStrategy { - case .deferredToData: - let encoder = self.getEncoder(for: additionalKey) - try data.encode(to: encoder) - return encoder.value ?? .null - - case .base64: - let base64 = data.base64EncodedString() - return .string(base64) - - case .custom(let closure): - let encoder = self.getEncoder(for: additionalKey) - try closure(data, encoder) - // The closure didn't encode anything. Return the default keyed container. - return encoder.value ?? .object([:]) - } - } - - func wrapObject(_ object: [String: Encodable], for additionalKey: CodingKey?) throws -> JSONValue { - var baseCodingPath = self.codingPath - if let additionalKey = additionalKey { - baseCodingPath.append(additionalKey) - } - var result = [String: JSONValue]() - result.reserveCapacity(object.count) - - try object.forEach { (key, value) in - var elemCodingPath = baseCodingPath - elemCodingPath.append(_JSONKey(stringValue: key, intValue: nil)) - let encoder = JSONEncoderImpl(options: self.options, codingPath: elemCodingPath) - - result[key] = try encoder.wrapUntyped(value) - } - - return .object(result) - } - - fileprivate func getEncoder(for additionalKey: CodingKey?) -> JSONEncoderImpl { - if let additionalKey = additionalKey { - var newCodingPath = self.codingPath - newCodingPath.append(additionalKey) - return JSONEncoderImpl(options: self.options, codingPath: newCodingPath) - } - - return self.impl - } -} - -private struct JSONKeyedEncodingContainer: KeyedEncodingContainerProtocol, _SpecialTreatmentEncoder { - typealias Key = K - - let impl: JSONEncoderImpl - let object: JSONFuture.RefObject - let codingPath: [CodingKey] - - private var firstValueWritten: Bool = false - fileprivate var options: JSONEncoder._Options { - return self.impl.options - } - - init(impl: JSONEncoderImpl, codingPath: [CodingKey]) { - self.impl = impl - self.object = impl.object! - self.codingPath = codingPath - } - - // used for nested containers - init(impl: JSONEncoderImpl, object: JSONFuture.RefObject, codingPath: [CodingKey]) { - self.impl = impl - self.object = object - self.codingPath = codingPath - } - - private func _converted(_ key: Key) -> CodingKey { - switch self.options.keyEncodingStrategy { - case .useDefaultKeys: - return key - case .convertToSnakeCase: - let newKeyString = JSONEncoder.KeyEncodingStrategy._convertToSnakeCase(key.stringValue) - return _JSONKey(stringValue: newKeyString, intValue: key.intValue) - case .custom(let converter): - return converter(codingPath + [key]) - } - } - - mutating func encodeNil(forKey key: Self.Key) throws { - self.object.set(.null, for: self._converted(key).stringValue) - } - - mutating func encode(_ value: Bool, forKey key: Self.Key) throws { - self.object.set(.bool(value), for: self._converted(key).stringValue) - } - - mutating func encode(_ value: String, forKey key: Self.Key) throws { - self.object.set(.string(value), for: self._converted(key).stringValue) - } - - mutating func encode(_ value: Double, forKey key: Self.Key) throws { - try encodeFloatingPoint(value, key: self._converted(key)) - } - - mutating func encode(_ value: Float, forKey key: Self.Key) throws { - try encodeFloatingPoint(value, key: self._converted(key)) - } - - mutating func encode(_ value: Int, forKey key: Self.Key) throws { - try encodeFixedWidthInteger(value, key: self._converted(key)) - } - - mutating func encode(_ value: Int8, forKey key: Self.Key) throws { - try encodeFixedWidthInteger(value, key: self._converted(key)) - } - - mutating func encode(_ value: Int16, forKey key: Self.Key) throws { - try encodeFixedWidthInteger(value, key: self._converted(key)) - } - - mutating func encode(_ value: Int32, forKey key: Self.Key) throws { - try encodeFixedWidthInteger(value, key: self._converted(key)) - } - - mutating func encode(_ value: Int64, forKey key: Self.Key) throws { - try encodeFixedWidthInteger(value, key: self._converted(key)) - } - - mutating func encode(_ value: UInt, forKey key: Self.Key) throws { - try encodeFixedWidthInteger(value, key: self._converted(key)) - } - - mutating func encode(_ value: UInt8, forKey key: Self.Key) throws { - try encodeFixedWidthInteger(value, key: self._converted(key)) - } - - mutating func encode(_ value: UInt16, forKey key: Self.Key) throws { - try encodeFixedWidthInteger(value, key: self._converted(key)) - } - - mutating func encode(_ value: UInt32, forKey key: Self.Key) throws { - try encodeFixedWidthInteger(value, key: self._converted(key)) - } - - mutating func encode(_ value: UInt64, forKey key: Self.Key) throws { - try encodeFixedWidthInteger(value, key: self._converted(key)) - } - - mutating func encode(_ value: T, forKey key: Self.Key) throws where T: Encodable { - let convertedKey = self._converted(key) - let encoded = try self.wrapEncodable(value, for: convertedKey) - self.object.set(encoded ?? .object([:]), for: convertedKey.stringValue) - } - - mutating func nestedContainer(keyedBy _: NestedKey.Type, forKey key: Self.Key) -> - KeyedEncodingContainer where NestedKey: CodingKey - { - let convertedKey = self._converted(key) - let newPath = self.codingPath + [convertedKey] - let object = self.object.setObject(for: convertedKey.stringValue) - let nestedContainer = JSONKeyedEncodingContainer(impl: impl, object: object, codingPath: newPath) - return KeyedEncodingContainer(nestedContainer) - } - - mutating func nestedUnkeyedContainer(forKey key: Self.Key) -> UnkeyedEncodingContainer { - let convertedKey = self._converted(key) - let newPath = self.codingPath + [convertedKey] - let array = self.object.setArray(for: convertedKey.stringValue) - let nestedContainer = JSONUnkeyedEncodingContainer(impl: impl, array: array, codingPath: newPath) - return nestedContainer - } - - mutating func superEncoder() -> Encoder { - let newEncoder = self.getEncoder(for: _JSONKey.super) - self.object.set(newEncoder, for: _JSONKey.super.stringValue) - return newEncoder - } - - mutating func superEncoder(forKey key: Self.Key) -> Encoder { - let convertedKey = self._converted(key) - let newEncoder = self.getEncoder(for: convertedKey) - self.object.set(newEncoder, for: convertedKey.stringValue) - return newEncoder - } -} - -extension JSONKeyedEncodingContainer { - @inline(__always) private mutating func encodeFloatingPoint(_ float: F, key: CodingKey) throws { - let value = try self.wrapFloat(float, for: key) - self.object.set(value, for: key.stringValue) - } - - @inline(__always) private mutating func encodeFixedWidthInteger(_ value: N, key: CodingKey) throws { - self.object.set(.number(value.description), for: key.stringValue) - } -} - -private struct JSONUnkeyedEncodingContainer: UnkeyedEncodingContainer, _SpecialTreatmentEncoder { - let impl: JSONEncoderImpl - let array: JSONFuture.RefArray - let codingPath: [CodingKey] - - var count: Int { - self.array.array.count - } - private var firstValueWritten: Bool = false - fileprivate var options: JSONEncoder._Options { - return self.impl.options - } - - init(impl: JSONEncoderImpl, codingPath: [CodingKey]) { - self.impl = impl - self.array = impl.array! - self.codingPath = codingPath - } - - // used for nested containers - init(impl: JSONEncoderImpl, array: JSONFuture.RefArray, codingPath: [CodingKey]) { - self.impl = impl - self.array = array - self.codingPath = codingPath - } - - mutating func encodeNil() throws { - self.array.append(.null) - } - - mutating func encode(_ value: Bool) throws { - self.array.append(.bool(value)) - } - - mutating func encode(_ value: String) throws { - self.array.append(.string(value)) - } - - mutating func encode(_ value: Double) throws { - try encodeFloatingPoint(value) - } - - mutating func encode(_ value: Float) throws { - try encodeFloatingPoint(value) - } - - mutating func encode(_ value: Int) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: Int8) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: Int16) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: Int32) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: Int64) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: UInt) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: UInt8) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: UInt16) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: UInt32) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: UInt64) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: T) throws where T: Encodable { - let key = _JSONKey(stringValue: "Index \(self.count)", intValue: self.count) - let encoded = try self.wrapEncodable(value, for: key) - self.array.append(encoded ?? .object([:])) - } - - mutating func nestedContainer(keyedBy _: NestedKey.Type) -> - KeyedEncodingContainer where NestedKey: CodingKey - { - let newPath = self.codingPath + [_JSONKey(index: self.count)] - let object = self.array.appendObject() - let nestedContainer = JSONKeyedEncodingContainer(impl: impl, object: object, codingPath: newPath) - return KeyedEncodingContainer(nestedContainer) - } - - mutating func nestedUnkeyedContainer() -> UnkeyedEncodingContainer { - let newPath = self.codingPath + [_JSONKey(index: self.count)] - let array = self.array.appendArray() - let nestedContainer = JSONUnkeyedEncodingContainer(impl: impl, array: array, codingPath: newPath) - return nestedContainer - } - - mutating func superEncoder() -> Encoder { - let encoder = self.getEncoder(for: _JSONKey(index: self.count)) - self.array.append(encoder) - return encoder - } -} - -extension JSONUnkeyedEncodingContainer { - @inline(__always) private mutating func encodeFixedWidthInteger(_ value: N) throws { - self.array.append(.number(value.description)) - } - - @inline(__always) private mutating func encodeFloatingPoint(_ float: F) throws { - let value = try self.wrapFloat(float, for: _JSONKey(index: self.count)) - self.array.append(value) - } -} - -private struct JSONSingleValueEncodingContainer: SingleValueEncodingContainer, _SpecialTreatmentEncoder { - let impl: JSONEncoderImpl - let codingPath: [CodingKey] - - private var firstValueWritten: Bool = false - fileprivate var options: JSONEncoder._Options { - return self.impl.options - } - - init(impl: JSONEncoderImpl, codingPath: [CodingKey]) { - self.impl = impl - self.codingPath = codingPath - } - - mutating func encodeNil() throws { - self.preconditionCanEncodeNewValue() - self.impl.singleValue = .null - } - - mutating func encode(_ value: Bool) throws { - self.preconditionCanEncodeNewValue() - self.impl.singleValue = .bool(value) - } - - mutating func encode(_ value: Int) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: Int8) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: Int16) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: Int32) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: Int64) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: UInt) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: UInt8) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: UInt16) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: UInt32) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: UInt64) throws { - try encodeFixedWidthInteger(value) - } - - mutating func encode(_ value: Float) throws { - try encodeFloatingPoint(value) - } - - mutating func encode(_ value: Double) throws { - try encodeFloatingPoint(value) - } - - mutating func encode(_ value: String) throws { - self.preconditionCanEncodeNewValue() - self.impl.singleValue = .string(value) - } - - mutating func encode(_ value: T) throws { - self.preconditionCanEncodeNewValue() - self.impl.singleValue = try self.wrapEncodable(value, for: nil) - } - - func preconditionCanEncodeNewValue() { - precondition(self.impl.singleValue == nil, "Attempt to encode value through single value container when previously value already encoded.") - } -} - -extension JSONSingleValueEncodingContainer { - @inline(__always) private mutating func encodeFixedWidthInteger(_ value: N) throws { - self.preconditionCanEncodeNewValue() - self.impl.singleValue = .number(value.description) - } - - @inline(__always) private mutating func encodeFloatingPoint(_ float: F) throws { - self.preconditionCanEncodeNewValue() - let value = try self.wrapFloat(float, for: nil) - self.impl.singleValue = value - } -} - -extension JSONValue { - - fileprivate struct Writer { - let options: JSONEncoder.OutputFormatting - - init(options: JSONEncoder.OutputFormatting) { - self.options = options +extension JSONEncoder.DateEncodingStrategy { + public static func formatted(_ formatter: DateFormatter) -> Self { + .custom { date, encoder in + var container = encoder.singleValueContainer() + try container.encode(formatter.string(from: date)) } - - func writeValue(_ value: JSONValue) -> [UInt8] { - var bytes = [UInt8]() - if self.options.contains(.prettyPrinted) { - self.writeValuePretty(value, into: &bytes) - } - else { - self.writeValue(value, into: &bytes) - } - return bytes - } - - private func writeValue(_ value: JSONValue, into bytes: inout [UInt8]) { - switch value { - case .null: - bytes.append(contentsOf: [UInt8]._null) - case .bool(true): - bytes.append(contentsOf: [UInt8]._true) - case .bool(false): - bytes.append(contentsOf: [UInt8]._false) - case .string(let string): - self.encodeString(string, to: &bytes) - case .number(let string): - bytes.append(contentsOf: string.utf8) - case .array(let array): - var iterator = array.makeIterator() - bytes.append(._openbracket) - // we don't like branching, this is why we have this extra - if let first = iterator.next() { - self.writeValue(first, into: &bytes) - } - while let item = iterator.next() { - bytes.append(._comma) - self.writeValue(item, into:&bytes) - } - bytes.append(._closebracket) - case .object(let dict): - if #available(macOS 10.13, *), options.contains(.sortedKeys) { - let sorted = dict.sorted { $0.key.compare($1.key, options: [.caseInsensitive, .diacriticInsensitive, .forcedOrdering, .numeric, .widthInsensitive]) == .orderedAscending } - self.writeObject(sorted, into: &bytes) - } else { - self.writeObject(dict, into: &bytes) - } - } - } - - private func writeObject(_ object: Object, into bytes: inout [UInt8], depth: Int = 0) - where Object.Element == (key: String, value: JSONValue) - { - var iterator = object.makeIterator() - bytes.append(._openbrace) - if let (key, value) = iterator.next() { - self.encodeString(key, to: &bytes) - bytes.append(._colon) - self.writeValue(value, into: &bytes) - } - while let (key, value) = iterator.next() { - bytes.append(._comma) - // key - self.encodeString(key, to: &bytes) - bytes.append(._colon) - - self.writeValue(value, into: &bytes) - } - bytes.append(._closebrace) - } - - private func addInset(to bytes: inout [UInt8], depth: Int) { - bytes.append(contentsOf: [UInt8](repeating: ._space, count: depth * 2)) - } - - private func writeValuePretty(_ value: JSONValue, into bytes: inout [UInt8], depth: Int = 0) { - switch value { - case .null: - bytes.append(contentsOf: [UInt8]._null) - case .bool(true): - bytes.append(contentsOf: [UInt8]._true) - case .bool(false): - bytes.append(contentsOf: [UInt8]._false) - case .string(let string): - self.encodeString(string, to: &bytes) - case .number(let string): - bytes.append(contentsOf: string.utf8) - case .array(let array): - var iterator = array.makeIterator() - bytes.append(contentsOf: [._openbracket, ._newline]) - if let first = iterator.next() { - self.addInset(to: &bytes, depth: depth + 1) - self.writeValuePretty(first, into: &bytes, depth: depth + 1) - } - while let item = iterator.next() { - bytes.append(contentsOf: [._comma, ._newline]) - self.addInset(to: &bytes, depth: depth + 1) - self.writeValuePretty(item, into: &bytes, depth: depth + 1) - } - bytes.append(._newline) - self.addInset(to: &bytes, depth: depth) - bytes.append(._closebracket) - case .object(let dict): - if #available(macOS 10.13, *), options.contains(.sortedKeys) { - let sorted = dict.sorted { $0.key.compare($1.key, options: [.caseInsensitive, .diacriticInsensitive, .forcedOrdering, .numeric, .widthInsensitive]) == .orderedAscending } - self.writePrettyObject(sorted, into: &bytes, depth: depth) - } else { - self.writePrettyObject(dict, into: &bytes, depth: depth) - } - } - } - - private func writePrettyObject(_ object: Object, into bytes: inout [UInt8], depth: Int = 0) - where Object.Element == (key: String, value: JSONValue) - { - var iterator = object.makeIterator() - bytes.append(contentsOf: [._openbrace, ._newline]) - if let (key, value) = iterator.next() { - self.addInset(to: &bytes, depth: depth + 1) - self.encodeString(key, to: &bytes) - bytes.append(contentsOf: [._space, ._colon, ._space]) - self.writeValuePretty(value, into: &bytes, depth: depth + 1) - } - while let (key, value) = iterator.next() { - bytes.append(contentsOf: [._comma, ._newline]) - self.addInset(to: &bytes, depth: depth + 1) - // key - self.encodeString(key, to: &bytes) - bytes.append(contentsOf: [._space, ._colon, ._space]) - // value - self.writeValuePretty(value, into: &bytes, depth: depth + 1) - } - bytes.append(._newline) - self.addInset(to: &bytes, depth: depth) - bytes.append(._closebrace) - } - - private func encodeString(_ string: String, to bytes: inout [UInt8]) { - bytes.append(UInt8(ascii: "\"")) - let stringBytes = string.utf8 - var startCopyIndex = stringBytes.startIndex - var nextIndex = startCopyIndex - - while nextIndex != stringBytes.endIndex { - switch stringBytes[nextIndex] { - case 0 ..< 32, UInt8(ascii: "\""), UInt8(ascii: "\\"): - // All Unicode characters may be placed within the - // quotation marks, except for the characters that MUST be escaped: - // quotation mark, reverse solidus, and the control characters (U+0000 - // through U+001F). - // https://tools.ietf.org/html/rfc8259#section-7 - - // copy the current range over - bytes.append(contentsOf: stringBytes[startCopyIndex ..< nextIndex]) - switch stringBytes[nextIndex] { - case UInt8(ascii: "\""): // quotation mark - bytes.append(contentsOf: [._backslash, ._quote]) - case UInt8(ascii: "\\"): // reverse solidus - bytes.append(contentsOf: [._backslash, ._backslash]) - case 0x08: // backspace - bytes.append(contentsOf: [._backslash, UInt8(ascii: "b")]) - case 0x0C: // form feed - bytes.append(contentsOf: [._backslash, UInt8(ascii: "f")]) - case 0x0A: // line feed - bytes.append(contentsOf: [._backslash, UInt8(ascii: "n")]) - case 0x0D: // carriage return - bytes.append(contentsOf: [._backslash, UInt8(ascii: "r")]) - case 0x09: // tab - bytes.append(contentsOf: [._backslash, UInt8(ascii: "t")]) - default: - func valueToAscii(_ value: UInt8) -> UInt8 { - switch value { - case 0 ... 9: - return value + UInt8(ascii: "0") - case 10 ... 15: - return value - 10 + UInt8(ascii: "a") - default: - preconditionFailure() - } - } - bytes.append(UInt8(ascii: "\\")) - bytes.append(UInt8(ascii: "u")) - bytes.append(UInt8(ascii: "0")) - bytes.append(UInt8(ascii: "0")) - let first = stringBytes[nextIndex] / 16 - let remaining = stringBytes[nextIndex] % 16 - bytes.append(valueToAscii(first)) - bytes.append(valueToAscii(remaining)) - } - - nextIndex = stringBytes.index(after: nextIndex) - startCopyIndex = nextIndex - case UInt8(ascii: "/") where options.contains(.withoutEscapingSlashes) == false: - bytes.append(contentsOf: stringBytes[startCopyIndex ..< nextIndex]) - bytes.append(contentsOf: [._backslash, UInt8(ascii: "/")]) - nextIndex = stringBytes.index(after: nextIndex) - startCopyIndex = nextIndex - default: - nextIndex = stringBytes.index(after: nextIndex) - } - } - - // copy everything, that hasn't been copied yet - bytes.append(contentsOf: stringBytes[startCopyIndex ..< nextIndex]) - bytes.append(UInt8(ascii: "\"")) - } - } -} - - -//===----------------------------------------------------------------------===// -// Shared Key Types -//===----------------------------------------------------------------------===// - -internal struct _JSONKey: CodingKey { - public var stringValue: String - public var intValue: Int? - - public init?(stringValue: String) { - self.stringValue = stringValue - self.intValue = nil - } - - public init?(intValue: Int) { - self.stringValue = "\(intValue)" - self.intValue = intValue - } - - public init(stringValue: String, intValue: Int?) { - self.stringValue = stringValue - self.intValue = intValue - } - - internal init(index: Int) { - self.stringValue = "Index \(index)" - self.intValue = index - } - - internal static let `super` = _JSONKey(stringValue: "super")! -} - -//===----------------------------------------------------------------------===// -// Shared ISO8601 Date Formatter -//===----------------------------------------------------------------------===// - -// NOTE: This value is implicitly lazy and _must_ be lazy. We're compiled against the latest SDK (w/ ISO8601DateFormatter), but linked against whichever Foundation the user has. ISO8601DateFormatter might not exist, so we better not hit this code path on an older OS. -@available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) -internal var _iso8601Formatter: ISO8601DateFormatter = { - let formatter = ISO8601DateFormatter() - formatter.formatOptions = .withInternetDateTime - return formatter -}() - -//===----------------------------------------------------------------------===// -// Error Utilities -//===----------------------------------------------------------------------===// - -extension EncodingError { - /// Returns a `.invalidValue` error describing the given invalid floating-point value. - /// - /// - /// - parameter value: The value that was invalid to encode. - /// - parameter path: The path of `CodingKey`s taken to encode this value. - /// - returns: An `EncodingError` with the appropriate path and debug description. - fileprivate static func _invalidFloatingPointValue(_ value: T, at codingPath: [CodingKey]) -> EncodingError { - let valueDescription: String - if value == T.infinity { - valueDescription = "\(T.self).infinity" - } else if value == -T.infinity { - valueDescription = "-\(T.self).infinity" - } else { - valueDescription = "\(T.self).nan" - } - - let debugDescription = "Unable to encode \(valueDescription) directly in JSON. Use JSONEncoder.NonConformingFloatEncodingStrategy.convertToString to specify how the value should be encoded." - return .invalidValue(value, EncodingError.Context(codingPath: codingPath, debugDescription: debugDescription)) } } diff --git a/Sources/Foundation/NSDecimalNumber.swift b/Sources/Foundation/NSDecimalNumber.swift index 781894bb3c..cb3e51dfeb 100644 --- a/Sources/Foundation/NSDecimalNumber.swift +++ b/Sources/Foundation/NSDecimalNumber.swift @@ -7,6 +7,8 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +@_spi(SwiftCorelibsFoundation) import FoundationEssentials + /*************** Exceptions ***********/ public struct NSExceptionName : RawRepresentable, Equatable, Hashable { public private(set) var rawValue: String @@ -39,20 +41,8 @@ extension NSExceptionName { /*************** Type definitions ***********/ extension NSDecimalNumber { - public enum RoundingMode : UInt { - case plain // Round up on a tie - case down // Always down == truncate - case up // Always up - case bankers // on a tie round so last digit is even - } - - public enum CalculationError : UInt { - case noError - case lossOfPrecision // Result lost precision - case underflow // Result became 0 - case overflow // Result exceeds possible representation - case divideByZero - } + public typealias RoundingMode = Decimal.RoundingMode + public typealias CalculationError = Decimal.CalculationError } public protocol NSDecimalNumberBehaviors { @@ -60,6 +50,9 @@ public protocol NSDecimalNumberBehaviors { func scale() -> Int16 } +public var NSDecimalMaxSize: Int32 { 8 } +public var NSDecimalNoScale: Int32 { Int32(Int16.max) } + // Receiver can raise, return a new value, or return nil to ignore the exception. fileprivate func handle(_ error: NSDecimalNumber.CalculationError, _ handler: NSDecimalNumberBehaviors) { @@ -71,9 +64,7 @@ open class NSDecimalNumber : NSNumber { fileprivate let decimal: Decimal public convenience init(mantissa: UInt64, exponent: Int16, isNegative: Bool) { - var d = Decimal(mantissa) - d._exponent += Int32(exponent) - d._isNegative = isNegative ? 1 : 0 + let d = Decimal(mantissa: mantissa, exponent: exponent, isNegative: isNegative) self.init(decimal: d) } @@ -106,7 +97,7 @@ open class NSDecimalNumber : NSNumber { return nil // raise "Critical NSDecimalNumber archived data is wrong size" } // Byte order? - let mantissa:(UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16) = ( + let mantissa : Decimal.Mantissa = ( UInt16(mantissaData[0]) << 8 & UInt16(mantissaData[1]), UInt16(mantissaData[2]) << 8 & UInt16(mantissaData[3]), UInt16(mantissaData[4]) << 8 & UInt16(mantissaData[5]), @@ -117,6 +108,7 @@ open class NSDecimalNumber : NSNumber { UInt16(mantissaData[14]) << 8 & UInt16(mantissaData[15]) ) self.decimal = Decimal(_exponent: exponent, _length: length, _isNegative: isNegative, _isCompact: isCompact, _reserved: 0, _mantissa: mantissa) + super.init() } @@ -328,7 +320,9 @@ open class NSDecimalNumber : NSNumber { // compare two NSDecimalNumbers open override func compare(_ decimalNumber: NSNumber) -> ComparisonResult { if let num = decimalNumber as? NSDecimalNumber { - return decimal.compare(to: num.decimal) + var lhs = decimal + var rhs = num.decimal + return NSDecimalCompare(&lhs, &rhs) } else { // NOTE: The lhs must be an NSNumber and not self (an NSDecimalNumber) so that NSNumber.compare() is used return decimalNumber.compare(self) @@ -351,43 +345,43 @@ open class NSDecimalNumber : NSNumber { // return 'd' for double open override var int8Value: Int8 { - return Int8(truncatingIfNeeded: decimal.int64Value) + return Int8(truncatingIfNeeded: int64Value) } open override var uint8Value: UInt8 { - return UInt8(truncatingIfNeeded: decimal.uint64Value) + return UInt8(truncatingIfNeeded: uint64Value) } open override var int16Value: Int16 { - return Int16(truncatingIfNeeded: decimal.int64Value) + return Int16(truncatingIfNeeded: int64Value) } open override var uint16Value: UInt16 { - return UInt16(truncatingIfNeeded: decimal.uint64Value) + return UInt16(truncatingIfNeeded: uint64Value) } open override var int32Value: Int32 { - return Int32(truncatingIfNeeded: decimal.int64Value) + return Int32(truncatingIfNeeded: int64Value) } open override var uint32Value: UInt32 { - return UInt32(truncatingIfNeeded: decimal.uint64Value) + return UInt32(truncatingIfNeeded: uint64Value) } open override var int64Value: Int64 { - return decimal.int64Value + decimal._int64Value } open override var uint64Value: UInt64 { - return decimal.uint64Value + decimal._uint64Value } open override var floatValue: Float { - return Float(decimal.doubleValue) + return Float(decimal._doubleValue) } open override var doubleValue: Double { - return decimal.doubleValue + return decimal._doubleValue } open override var boolValue: Bool { @@ -395,11 +389,11 @@ open class NSDecimalNumber : NSNumber { } open override var intValue: Int { - return Int(truncatingIfNeeded: decimal.int64Value) + return Int(truncatingIfNeeded: int64Value) } open override var uintValue: UInt { - return UInt(truncatingIfNeeded: decimal.uint64Value) + return UInt(truncatingIfNeeded: uint64Value) } open override func isEqual(_ value: Any?) -> Bool { @@ -521,4 +515,30 @@ extension NSNumber { } } +@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *) +extension Decimal { + @available(swift, obsoleted: 4, message: "Please use arithmetic operators instead") + @_transparent + public mutating func add(_ other: Decimal) { + self += other + } + + @available(swift, obsoleted: 4, message: "Please use arithmetic operators instead") + @_transparent + public mutating func subtract(_ other: Decimal) { + self -= other + } + + @available(swift, obsoleted: 4, message: "Please use arithmetic operators instead") + @_transparent + public mutating func multiply(by other: Decimal) { + self *= other + } + + @available(swift, obsoleted: 4, message: "Please use arithmetic operators instead") + @_transparent + public mutating func divide(by other: Decimal) { + self /= other + } +} diff --git a/Tests/Foundation/TestDecimal.swift b/Tests/Foundation/TestDecimal.swift index d8f39cebc7..8cdeba9a16 100644 --- a/Tests/Foundation/TestDecimal.swift +++ b/Tests/Foundation/TestDecimal.swift @@ -7,6 +7,8 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +@_spi(SwiftCorelibsFoundation) import FoundationEssentials + #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT #if canImport(SwiftFoundation) && !DEPLOYMENT_RUNTIME_OBJC @testable import SwiftFoundation @@ -44,129 +46,6 @@ class TestDecimal: XCTestCase { XCTAssertEqual(NSDecimalNumber(booleanLiteral: false).boolValue, false) } - func test_AdditionWithNormalization() { - - let biggie = Decimal(65536) - let smallee = Decimal(65536) - let answer = biggie/smallee - XCTAssertEqual(Decimal(1),answer) - - var one = Decimal(1) - var addend = Decimal(1) - var expected = Decimal() - var result = Decimal() - - expected._isNegative = 0; - expected._isCompact = 0; - - // 2 digits -- certain to work - addend._exponent = -1; - XCTAssertEqual(.noError, NSDecimalAdd(&result, &one, &addend, .plain), "1 + 0.1") - expected._exponent = -1; - expected._length = 1; - expected._mantissa.0 = 11; - XCTAssertEqual(.orderedSame, NSDecimalCompare(&expected, &result), "1.1 == 1 + 0.1") - - // 38 digits -- guaranteed by NSDecimal to work - addend._exponent = -37; - XCTAssertEqual(.noError, NSDecimalAdd(&result, &one, &addend, .plain), "1 + 1e-37") - expected._exponent = -37; - expected._length = 8; - expected._mantissa.0 = 0x0001; - expected._mantissa.1 = 0x0000; - expected._mantissa.2 = 0x36a0; - expected._mantissa.3 = 0x00f4; - expected._mantissa.4 = 0x46d9; - expected._mantissa.5 = 0xd5da; - expected._mantissa.6 = 0xee10; - expected._mantissa.7 = 0x0785; - XCTAssertEqual(.orderedSame, NSDecimalCompare(&expected, &result), "1 + 1e-37") - - // 39 digits -- not guaranteed to work but it happens to, so we make the test work either way - addend._exponent = -38; - let error = NSDecimalAdd(&result, &one, &addend, .plain) - XCTAssertTrue(error == .noError || error == .lossOfPrecision, "1 + 1e-38") - if error == .noError { - expected._exponent = -38; - expected._length = 8; - expected._mantissa.0 = 0x0001; - expected._mantissa.1 = 0x0000; - expected._mantissa.2 = 0x2240; - expected._mantissa.3 = 0x098a; - expected._mantissa.4 = 0xc47a; - expected._mantissa.5 = 0x5a86; - expected._mantissa.6 = 0x4ca8; - expected._mantissa.7 = 0x4b3b; - XCTAssertEqual(.orderedSame, NSDecimalCompare(&expected, &result), "1 + 1e-38") - } else { - XCTAssertEqual(.orderedSame, NSDecimalCompare(&one, &result), "1 + 1e-38") - } - - // 40 digits -- doesn't work; need to make sure it's rounding for us - addend._exponent = -39; - XCTAssertEqual(.lossOfPrecision, NSDecimalAdd(&result, &one, &addend, .plain), "1 + 1e-39") - XCTAssertEqual("1", result.description) - XCTAssertEqual(.orderedSame, NSDecimalCompare(&one, &result), "1 + 1e-39") - } - - func test_BasicConstruction() { - let zero = Decimal() - XCTAssertEqual(20, MemoryLayout.size) - XCTAssertEqual(0, zero._exponent) - XCTAssertEqual(0, zero._length) - XCTAssertEqual(0, zero._isNegative) - XCTAssertEqual(0, zero._isCompact) - XCTAssertEqual(0, zero._reserved) - let (m0, m1, m2, m3, m4, m5, m6, m7) = zero._mantissa - XCTAssertEqual(0, m0) - XCTAssertEqual(0, m1) - XCTAssertEqual(0, m2) - XCTAssertEqual(0, m3) - XCTAssertEqual(0, m4) - XCTAssertEqual(0, m5) - XCTAssertEqual(0, m6) - XCTAssertEqual(0, m7) - XCTAssertEqual(8, NSDecimalMaxSize) - XCTAssertEqual(32767, NSDecimalNoScale) - XCTAssertFalse(zero.isNormal) - XCTAssertTrue(zero.isFinite) - XCTAssertTrue(zero.isZero) - XCTAssertFalse(zero.isSubnormal) - XCTAssertFalse(zero.isInfinite) - XCTAssertFalse(zero.isNaN) - XCTAssertFalse(zero.isSignaling) - - let d1 = Decimal(1234567890123456789 as UInt64) - XCTAssertEqual(d1._exponent, 0) - XCTAssertEqual(d1._length, 4) - } - - func test_Constants() { - XCTAssertEqual(8, NSDecimalMaxSize) - XCTAssertEqual(32767, NSDecimalNoScale) - let smallest = Decimal(_exponent: 127, _length: 8, _isNegative: 1, _isCompact: 1, _reserved: 0, _mantissa: (UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max)) - XCTAssertEqual(smallest, -Decimal.greatestFiniteMagnitude) - let biggest = Decimal(_exponent: 127, _length: 8, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max, UInt16.max)) - XCTAssertEqual(biggest, Decimal.greatestFiniteMagnitude) - let leastNormal = Decimal(_exponent: -128, _length: 1, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (1, 0, 0, 0, 0, 0, 0, 0)) - XCTAssertEqual(leastNormal, Decimal.leastNormalMagnitude) - let leastNonzero = Decimal(_exponent: -128, _length: 1, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (1, 0, 0, 0, 0, 0, 0, 0)) - XCTAssertEqual(leastNonzero, Decimal.leastNonzeroMagnitude) - let pi = Decimal(_exponent: -38, _length: 8, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (0x6623, 0x7d57, 0x16e7, 0xad0d, 0xaf52, 0x4641, 0xdfa7, 0xec58)) - XCTAssertEqual(pi, Decimal.pi) - XCTAssertEqual(10, Decimal.radix) - XCTAssertTrue(Decimal().isCanonical) - XCTAssertFalse(Decimal().isSignalingNaN) - XCTAssertFalse(Decimal.nan.isSignalingNaN) - XCTAssertTrue(Decimal.nan.isNaN) - XCTAssertEqual(.quietNaN, Decimal.nan.floatingPointClass) - XCTAssertEqual(.positiveZero, Decimal().floatingPointClass) - XCTAssertEqual(.negativeNormal, smallest.floatingPointClass) - XCTAssertEqual(.positiveNormal, biggest.floatingPointClass) - XCTAssertFalse(Double.nan.isFinite) - XCTAssertFalse(Double.nan.isInfinite) - } - func test_Description() { XCTAssertEqual("0", Decimal().description) XCTAssertEqual("0", Decimal(0).description) @@ -185,10 +64,14 @@ class TestDecimal: XCTestCase { XCTAssertEqual("-5", Decimal(signOf: Decimal(-3), magnitudeOf: Decimal(-5)).description) XCTAssertEqual("5", NSDecimalNumber(decimal: Decimal(5)).description) XCTAssertEqual("-5", NSDecimalNumber(decimal: Decimal(-5)).description) + + // Disabled pending decision about size of Decimal mantissa + /* XCTAssertEqual("3402823669209384634633746074317682114550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", Decimal.greatestFiniteMagnitude.description) XCTAssertEqual("0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", Decimal.leastNormalMagnitude.description) XCTAssertEqual("0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", Decimal.leastNonzeroMagnitude.description) - + */ + let fr = Locale(identifier: "fr_FR") let greatestFiniteMagnitude = "3402823669209384634633746074317682114550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" @@ -200,10 +83,14 @@ class TestDecimal: XCTestCase { XCTAssertEqual("3,14159265358979323846264338327950288419", NSDecimalNumber(decimal: Decimal.pi).description(withLocale: fr)) XCTAssertEqual("-30000000000", NSDecimalNumber(decimal: Decimal(sign: .minus, exponent: 10, significand: Decimal(3))).description(withLocale: fr)) XCTAssertEqual("123456,789", NSDecimalNumber(decimal: Decimal(string: "123456.789")!).description(withLocale: fr)) + + // Disabled pending decision about size of Decimal mantissa + /* XCTAssertEqual(greatestFiniteMagnitude, NSDecimalNumber(decimal: Decimal.greatestFiniteMagnitude).description(withLocale: fr)) XCTAssertEqual("0,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", NSDecimalNumber(decimal: Decimal.leastNormalMagnitude).description(withLocale: fr)) XCTAssertEqual("0,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", NSDecimalNumber(decimal: Decimal.leastNonzeroMagnitude).description(withLocale: fr)) - + */ + let en = Locale(identifier: "en_GB") XCTAssertEqual("0", NSDecimalNumber(decimal: Decimal()).description(withLocale: en)) XCTAssertEqual("1000", NSDecimalNumber(decimal: Decimal(1000)).description(withLocale: en)) @@ -213,388 +100,19 @@ class TestDecimal: XCTestCase { XCTAssertEqual("3.14159265358979323846264338327950288419", NSDecimalNumber(decimal: Decimal.pi).description(withLocale: en)) XCTAssertEqual("-30000000000", NSDecimalNumber(decimal: Decimal(sign: .minus, exponent: 10, significand: Decimal(3))).description(withLocale: en)) XCTAssertEqual("123456.789", NSDecimalNumber(decimal: Decimal(string: "123456.789")!).description(withLocale: en)) + + // Disabled pending decision about size of Decimal mantissa + /* XCTAssertEqual(greatestFiniteMagnitude, NSDecimalNumber(decimal: Decimal.greatestFiniteMagnitude).description(withLocale: en)) XCTAssertEqual("0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", NSDecimalNumber(decimal: Decimal.leastNormalMagnitude).description(withLocale: en)) XCTAssertEqual("0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", NSDecimalNumber(decimal: Decimal.leastNonzeroMagnitude).description(withLocale: en)) + */ } - - func test_ExplicitConstruction() { - let reserved: UInt32 = (1<<18 as UInt32) + (1<<17 as UInt32) + 1 - let mantissa: (UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16) = (6, 7, 8, 9, 10, 11, 12, 13) - var explicit = Decimal( - _exponent: 0x7f, - _length: 0x0f, - _isNegative: 3, - _isCompact: 4, - _reserved: reserved, - _mantissa: mantissa - ) - XCTAssertEqual(0x7f, explicit._exponent) - XCTAssertEqual(0x7f, explicit.exponent) - XCTAssertEqual(0x0f, explicit._length) - XCTAssertEqual(1, explicit._isNegative) - XCTAssertEqual(FloatingPointSign.minus, explicit.sign) - XCTAssertTrue(explicit.isSignMinus) - XCTAssertEqual(0, explicit._isCompact) - let i = 1 << 17 + 1 - let expectedReserved: UInt32 = UInt32(i) - XCTAssertEqual(expectedReserved, explicit._reserved) - let (m0, m1, m2, m3, m4, m5, m6, m7) = explicit._mantissa - XCTAssertEqual(6, m0) - XCTAssertEqual(7, m1) - XCTAssertEqual(8, m2) - XCTAssertEqual(9, m3) - XCTAssertEqual(10, m4) - XCTAssertEqual(11, m5) - XCTAssertEqual(12, m6) - XCTAssertEqual(13, m7) - explicit._isCompact = 5 - explicit._isNegative = 6 - XCTAssertEqual(0, explicit._isNegative) - XCTAssertEqual(1, explicit._isCompact) - XCTAssertEqual(FloatingPointSign.plus, explicit.sign) - XCTAssertFalse(explicit.isSignMinus) - XCTAssertTrue(explicit.isNormal) - - let significand = explicit.significand - XCTAssertEqual(0, significand._exponent) - XCTAssertEqual(0, significand.exponent) - XCTAssertEqual(0x0f, significand._length) - XCTAssertEqual(0, significand._isNegative) - XCTAssertEqual(1, significand._isCompact) - XCTAssertEqual(0, significand._reserved) - let (sm0, sm1, sm2, sm3, sm4, sm5, sm6, sm7) = significand._mantissa - XCTAssertEqual(6, sm0) - XCTAssertEqual(7, sm1) - XCTAssertEqual(8, sm2) - XCTAssertEqual(9, sm3) - XCTAssertEqual(10, sm4) - XCTAssertEqual(11, sm5) - XCTAssertEqual(12, sm6) - XCTAssertEqual(13, sm7) - } - + func test_Maths() { - for i in -2...10 { - for j in 0...5 { - XCTAssertEqual(Decimal(i*j), Decimal(i) * Decimal(j), "\(Decimal(i*j)) == \(i) * \(j)") - XCTAssertEqual(Decimal(i+j), Decimal(i) + Decimal(j), "\(Decimal(i+j)) == \(i)+\(j)") - XCTAssertEqual(Decimal(i-j), Decimal(i) - Decimal(j), "\(Decimal(i-j)) == \(i)-\(j)") - if j != 0 { - let approximation = Decimal(Double(i)/Double(j)) - let answer = Decimal(i) / Decimal(j) - let answerDescription = answer.description - let approximationDescription = approximation.description - var failed: Bool = false - var count = 0 - let SIG_FIG = 14 - for (a, b) in zip(answerDescription, approximationDescription) { - if a != b { - failed = true - break - } - if count == 0 && (a == "-" || a == "0" || a == ".") { - continue // don't count these as significant figures - } - if count >= SIG_FIG { - break - } - count += 1 - } - XCTAssertFalse(failed, "\(Decimal(i/j)) == \(i)/\(j)") - } - } - } - - XCTAssertEqual(Decimal(186243 * 15673 as Int64), Decimal(186243) * Decimal(15673)) - - XCTAssertEqual(Decimal(string: "5538")! + Decimal(string: "2880.4")!, Decimal(string: "8418.4")!) XCTAssertEqual(NSDecimalNumber(floatLiteral: 5538).adding(NSDecimalNumber(floatLiteral: 2880.4)), NSDecimalNumber(floatLiteral: 5538 + 2880.4)) - - XCTAssertEqual(Decimal(string: "5538.0")! - Decimal(string: "2880.4")!, Decimal(string: "2657.6")!) - XCTAssertEqual(Decimal(string: "2880.4")! - Decimal(5538), Decimal(string: "-2657.6")!) - XCTAssertEqual(Decimal(0x10000) - Decimal(0x1000), Decimal(0xf000)) - XCTAssertEqual(Decimal(0x1_0000_0000) - Decimal(0x1000), Decimal(0xFFFFF000)) - XCTAssertEqual(Decimal(0x1_0000_0000_0000) - Decimal(0x1000), Decimal(0xFFFFFFFFF000)) - XCTAssertEqual(Decimal(1234_5678_9012_3456_7899 as UInt64) - Decimal(1234_5678_9012_3456_7890 as UInt64), Decimal(9)) - XCTAssertEqual(Decimal(0xffdd_bb00_8866_4422 as UInt64) - Decimal(0x7777_7777), Decimal(0xFFDD_BB00_10EE_CCAB as UInt64)) XCTAssertEqual(NSDecimalNumber(floatLiteral: 5538).subtracting(NSDecimalNumber(floatLiteral: 2880.4)), NSDecimalNumber(floatLiteral: 5538 - 2880.4)) XCTAssertEqual(NSDecimalNumber(floatLiteral: 2880.4).subtracting(NSDecimalNumber(floatLiteral: 5538)), NSDecimalNumber(floatLiteral: 2880.4 - 5538)) - - XCTAssertEqual(Decimal.greatestFiniteMagnitude - Decimal.greatestFiniteMagnitude, Decimal(0)) - let overflowed = Decimal.greatestFiniteMagnitude + Decimal.greatestFiniteMagnitude - XCTAssertTrue(overflowed.isNaN) - - let highBit = Decimal(_exponent: 0, _length: 8, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000)) - let otherBits = Decimal(_exponent: 0, _length: 8, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x7fff)) - XCTAssertEqual(highBit - otherBits, Decimal(1)) - XCTAssertEqual(otherBits + Decimal(1), highBit) - } - - func test_Misc() throws { - XCTAssertEqual(.minus, Decimal(-5.2).sign) - XCTAssertEqual(.plus, Decimal(5.2).sign) - var d = Decimal(5.2) - XCTAssertEqual(.plus, d.sign) - d.negate() - XCTAssertEqual(.minus, d.sign) - d.negate() - XCTAssertEqual(.plus, d.sign) - var e = Decimal(0) - e.negate() - XCTAssertEqual(e, 0) - XCTAssertTrue(Decimal(3.5).isEqual(to: Decimal(3.5))) - XCTAssertTrue(Decimal.nan.isEqual(to: Decimal.nan)) - XCTAssertTrue(Decimal(1.28).isLess(than: Decimal(2.24))) - XCTAssertFalse(Decimal(2.28).isLess(than: Decimal(2.24))) - XCTAssertTrue(Decimal(1.28).isTotallyOrdered(belowOrEqualTo: Decimal(2.24))) - XCTAssertFalse(Decimal(2.28).isTotallyOrdered(belowOrEqualTo: Decimal(2.24))) - XCTAssertTrue(Decimal(1.2).isTotallyOrdered(belowOrEqualTo: Decimal(1.2))) - XCTAssertTrue(Decimal.nan.isEqual(to: Decimal.nan)) - XCTAssertTrue(Decimal.nan.isLess(than: Decimal(0))) - XCTAssertFalse(Decimal.nan.isLess(than: Decimal.nan)) - XCTAssertTrue(Decimal.nan.isLessThanOrEqualTo(Decimal(0))) - XCTAssertTrue(Decimal.nan.isLessThanOrEqualTo(Decimal.nan)) - XCTAssertFalse(Decimal.nan.isTotallyOrdered(belowOrEqualTo: Decimal.nan)) - XCTAssertFalse(Decimal.nan.isTotallyOrdered(belowOrEqualTo: Decimal(2.3))) - XCTAssertTrue(Decimal(2) < Decimal(3)) - XCTAssertTrue(Decimal(3) > Decimal(2)) - - // FIXME: This test is of questionable value. We should test hash properties. - XCTAssertEqual((1234 as Double).hashValue, Decimal(1234).hashValue) - - XCTAssertEqual(Decimal(-9), Decimal(1) - Decimal(10)) - XCTAssertEqual(Decimal(1.234), abs(Decimal(1.234))) - XCTAssertEqual(Decimal(1.234), abs(Decimal(-1.234))) - XCTAssertEqual((0 as Decimal).magnitude, 0 as Decimal) - XCTAssertEqual((1 as Decimal).magnitude, 1 as Decimal) - XCTAssertEqual((1 as Decimal).magnitude, abs(1 as Decimal)) - XCTAssertEqual((1 as Decimal).magnitude, abs(-1 as Decimal)) - XCTAssertEqual((-1 as Decimal).magnitude, abs(-1 as Decimal)) - XCTAssertEqual((-1 as Decimal).magnitude, abs(1 as Decimal)) - XCTAssertEqual(Decimal.leastFiniteMagnitude.magnitude, -Decimal.leastFiniteMagnitude) // A bit of a misnomer. - XCTAssertEqual(Decimal.greatestFiniteMagnitude.magnitude, Decimal.greatestFiniteMagnitude) - XCTAssertTrue(Decimal.nan.magnitude.isNaN) - - var a = Decimal(1234) - var result = Decimal(0) - XCTAssertEqual(.noError, NSDecimalMultiplyByPowerOf10(&result, &a, 1, .plain)) - XCTAssertEqual(Decimal(12340), result) - a = Decimal(1234) - XCTAssertEqual(.noError, NSDecimalMultiplyByPowerOf10(&result, &a, 2, .plain)) - XCTAssertEqual(Decimal(123400), result) - a = result - XCTAssertEqual(.overflow, NSDecimalMultiplyByPowerOf10(&result, &a, 128, .plain)) - XCTAssertTrue(result.isNaN) - a = Decimal(1234) - XCTAssertEqual(.noError, NSDecimalMultiplyByPowerOf10(&result, &a, -2, .plain)) - XCTAssertEqual(Decimal(12.34), result) - a = result - XCTAssertEqual(.underflow, NSDecimalMultiplyByPowerOf10(&result, &a, -128, .plain)) - XCTAssertTrue(result.isNaN) - a = Decimal(1234) - XCTAssertEqual(.noError, NSDecimalPower(&result, &a, 0, .plain)) - XCTAssertEqual(Decimal(1), result) - a = Decimal(8) - XCTAssertEqual(.noError, NSDecimalPower(&result, &a, 2, .plain)) - XCTAssertEqual(Decimal(64), result) - a = Decimal(-2) - XCTAssertEqual(.noError, NSDecimalPower(&result, &a, 3, .plain)) - XCTAssertEqual(Decimal(-8), result) - for i in -2...10 { - for j in 0...5 { - var actual = Decimal(i) - var power = actual - XCTAssertEqual(.noError, NSDecimalPower(&actual, &power, j, .plain)) - let expected = Decimal(pow(Double(i), Double(j))) - XCTAssertEqual(expected, actual, "\(actual) == \(i)^\(j)") - XCTAssertEqual(expected, pow(power, j)) - } - } - - do { - // SR-13015 - let a = try XCTUnwrap(Decimal(string: "119.993")) - let b = try XCTUnwrap(Decimal(string: "4.1565")) - let c = try XCTUnwrap(Decimal(string: "18.209")) - let d = try XCTUnwrap(Decimal(string: "258.469")) - let ab = a * b - let aDivD = a / d - let caDivD = c * aDivD - XCTAssertEqual(ab, try XCTUnwrap(Decimal(string: "498.7509045"))) - XCTAssertEqual(aDivD, try XCTUnwrap(Decimal(string: "0.46424522863476857959755328492004843907"))) - XCTAssertEqual(caDivD, try XCTUnwrap(Decimal(string: "8.453441368210501065891847765109162027"))) - - let result = (a * b) + (c * (a / d)) - XCTAssertEqual(result, try XCTUnwrap(Decimal(string: "507.2043458682105010658918477651091"))) - } - } - - func test_MultiplicationOverflow() { - var multiplicand = Decimal(_exponent: 0, _length: 8, _isNegative: 0, _isCompact: 0, _reserved: 0, _mantissa: ( 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff )) - - var result = Decimal() - var multiplier = Decimal(1) - - multiplier._mantissa.0 = 2 - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &multiplicand, &multiplier, .plain), "2 * max mantissa") - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &multiplier, &multiplicand, .plain), "max mantissa * 2") - - multiplier._exponent = 0x7f - XCTAssertEqual(.overflow, NSDecimalMultiply(&result, &multiplicand, &multiplier, .plain), "2e127 * max mantissa") - XCTAssertEqual(.overflow, NSDecimalMultiply(&result, &multiplier, &multiplicand, .plain), "max mantissa * 2e127") - } - - func test_NaNInput() { - var NaN = Decimal.nan - var one = Decimal(1) - var result = Decimal() - - XCTAssertNotEqual(.noError, NSDecimalAdd(&result, &NaN, &one, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN + 1") - XCTAssertNotEqual(.noError, NSDecimalAdd(&result, &one, &NaN, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "1 + NaN") - - XCTAssertNotEqual(.noError, NSDecimalSubtract(&result, &NaN, &one, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN - 1") - XCTAssertNotEqual(.noError, NSDecimalSubtract(&result, &one, &NaN, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "1 - NaN") - - XCTAssertNotEqual(.noError, NSDecimalMultiply(&result, &NaN, &one, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN * 1") - XCTAssertNotEqual(.noError, NSDecimalMultiply(&result, &one, &NaN, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "1 * NaN") - - XCTAssertNotEqual(.noError, NSDecimalDivide(&result, &NaN, &one, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN / 1") - XCTAssertNotEqual(.noError, NSDecimalDivide(&result, &one, &NaN, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "1 / NaN") - - XCTAssertNotEqual(.noError, NSDecimalPower(&result, &NaN, 0, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN ^ 0") - XCTAssertNotEqual(.noError, NSDecimalPower(&result, &NaN, 4, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN ^ 4") - XCTAssertNotEqual(.noError, NSDecimalPower(&result, &NaN, 5, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN ^ 5") - - XCTAssertNotEqual(.noError, NSDecimalMultiplyByPowerOf10(&result, &NaN, 0, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN e0") - XCTAssertNotEqual(.noError, NSDecimalMultiplyByPowerOf10(&result, &NaN, 4, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN e4") - XCTAssertNotEqual(.noError, NSDecimalMultiplyByPowerOf10(&result, &NaN, 5, .plain)) - XCTAssertTrue(NSDecimalIsNotANumber(&result), "NaN e5") - - XCTAssertFalse(Double(truncating: NSDecimalNumber(decimal: Decimal(0))).isNaN) - XCTAssertTrue(Decimal(Double.leastNonzeroMagnitude).isNaN) - XCTAssertTrue(Decimal(Double.leastNormalMagnitude).isNaN) - XCTAssertTrue(Decimal(Double.greatestFiniteMagnitude).isNaN) - XCTAssertTrue(Decimal(Double("1e-129")!).isNaN) - XCTAssertTrue(Decimal(Double("0.1e-128")!).isNaN) - } - - func test_NegativeAndZeroMultiplication() { - var one = Decimal(1) - var zero = Decimal(0) - var negativeOne = Decimal(-1) - - var result = Decimal() - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &one, &one, .plain), "1 * 1") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&one, &result), "1 * 1") - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &one, &negativeOne, .plain), "1 * -1") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&negativeOne, &result), "1 * -1") - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &negativeOne, &one, .plain), "-1 * 1") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&negativeOne, &result), "-1 * 1") - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &negativeOne, &negativeOne, .plain), "-1 * -1") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&one, &result), "-1 * -1") - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &one, &zero, .plain), "1 * 0") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&zero, &result), "1 * 0") - XCTAssertEqual(0, result._isNegative, "1 * 0") - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &zero, &one, .plain), "0 * 1") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&zero, &result), "0 * 1") - XCTAssertEqual(0, result._isNegative, "0 * 1") - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &negativeOne, &zero, .plain), "-1 * 0") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&zero, &result), "-1 * 0") - XCTAssertEqual(0, result._isNegative, "-1 * 0") - - XCTAssertEqual(.noError, NSDecimalMultiply(&result, &zero, &negativeOne, .plain), "0 * -1") - XCTAssertEqual(.orderedSame, NSDecimalCompare(&zero, &result), "0 * -1") - XCTAssertEqual(0, result._isNegative, "0 * -1") - } - - func test_Normalise() throws { - var one = Decimal(1) - var ten = Decimal(-10) - XCTAssertEqual(.noError, NSDecimalNormalize(&one, &ten, .plain)) - XCTAssertEqual(Decimal(1), one) - XCTAssertEqual(Decimal(-10), ten) - XCTAssertEqual(1, one._length) - XCTAssertEqual(1, ten._length) - one = Decimal(1) - ten = Decimal(10) - XCTAssertEqual(.noError, NSDecimalNormalize(&one, &ten, .plain)) - XCTAssertEqual(Decimal(1), one) - XCTAssertEqual(Decimal(10), ten) - XCTAssertEqual(1, one._length) - XCTAssertEqual(1, ten._length) - - // Check equality with numbers with large exponent difference - var small = Decimal.leastNonzeroMagnitude - var large = Decimal.greatestFiniteMagnitude - XCTAssertTrue(Int(large.exponent) - Int(small.exponent) > Int(Int8.max)) - XCTAssertTrue(Int(small.exponent) - Int(large.exponent) < Int(Int8.min)) - XCTAssertNotEqual(small, large) - - XCTAssertEqual(small.exponent, -128) - XCTAssertEqual(large.exponent, 127) - XCTAssertEqual(.lossOfPrecision, NSDecimalNormalize(&small, &large, .plain)) - XCTAssertEqual(small.exponent, 127) - XCTAssertEqual(large.exponent, 127) - - small = Decimal.leastNonzeroMagnitude - large = Decimal.greatestFiniteMagnitude - XCTAssertEqual(small.exponent, -128) - XCTAssertEqual(large.exponent, 127) - XCTAssertEqual(.lossOfPrecision, NSDecimalNormalize(&large, &small, .plain)) - XCTAssertEqual(small.exponent, 127) - XCTAssertEqual(large.exponent, 127) - - // Normalise with loss of precision - let a = try XCTUnwrap(Decimal(string: "498.7509045")) - let b = try XCTUnwrap(Decimal(string: "8.453441368210501065891847765109162027")) - - var aNormalized = a - var bNormalized = b - let normalizeError = NSDecimalNormalize(&aNormalized, &bNormalized, .plain) - XCTAssertEqual(normalizeError, NSDecimalNumber.CalculationError.lossOfPrecision) - - XCTAssertEqual(aNormalized.exponent, -31) - XCTAssertEqual(aNormalized._mantissa.0, 0) - XCTAssertEqual(aNormalized._mantissa.1, 21760) - XCTAssertEqual(aNormalized._mantissa.2, 45355) - XCTAssertEqual(aNormalized._mantissa.3, 11455) - XCTAssertEqual(aNormalized._mantissa.4, 62709) - XCTAssertEqual(aNormalized._mantissa.5, 14050) - XCTAssertEqual(aNormalized._mantissa.6, 62951) - XCTAssertEqual(aNormalized._mantissa.7, 0) - XCTAssertEqual(bNormalized.exponent, -31) - XCTAssertEqual(bNormalized._mantissa.0, 56467) - XCTAssertEqual(bNormalized._mantissa.1, 17616) - XCTAssertEqual(bNormalized._mantissa.2, 59987) - XCTAssertEqual(bNormalized._mantissa.3, 21635) - XCTAssertEqual(bNormalized._mantissa.4, 5988) - XCTAssertEqual(bNormalized._mantissa.5, 63852) - XCTAssertEqual(bNormalized._mantissa.6, 1066) - XCTAssertEqual(bNormalized._mantissa.7, 1628) - XCTAssertEqual(a, aNormalized) - XCTAssertNotEqual(b, bNormalized) // b had a loss Of Precision when normalising } func test_NSDecimal() throws { @@ -609,9 +127,7 @@ class TestDecimal: XCTestCase { var f = Decimal(_exponent: 0, _length: 2, _isNegative: 0, _isCompact: 0, _reserved: 0, _mantissa: (0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000)) let before = f.description - XCTAssertEqual(0, f._isCompact) NSDecimalCompact(&f) - XCTAssertEqual(1, f._isCompact) let after = f.description XCTAssertEqual(before, after) @@ -671,32 +187,6 @@ class TestDecimal: XCTestCase { XCTAssertEqual(-10077696, negativeSix.raising(toPower:9).intValue) } - func test_RepeatingDivision() { - let repeatingNumerator = Decimal(16) - let repeatingDenominator = Decimal(9) - let repeating = repeatingNumerator / repeatingDenominator - - let numerator = Decimal(1010) - var result = numerator / repeating - - var expected = Decimal() - expected._exponent = -35; - expected._length = 8; - expected._isNegative = 0; - expected._isCompact = 1; - expected._reserved = 0; - expected._mantissa.0 = 51946; - expected._mantissa.1 = 3; - expected._mantissa.2 = 15549; - expected._mantissa.3 = 55864; - expected._mantissa.4 = 57984; - expected._mantissa.5 = 55436; - expected._mantissa.6 = 45186; - expected._mantissa.7 = 10941; - - XCTAssertEqual(.orderedSame, NSDecimalCompare(&expected, &result), "568.12500000000000000000000000000248554: \(expected.description) != \(result.description)"); - } - func test_Round() { let testCases: [(Double, Double, Int, NSDecimalNumber.RoundingMode)] = [ // expected, start, scale, round @@ -712,7 +202,7 @@ class TestDecimal: XCTestCase { ( -1, -0.5, 0, .down ), ( -2, -2.5, 0, .up ), - ( -3, -2.5, 0, .bankers ), + ( -2, -2.5, 0, .bankers ), ( -4, -3.5, 0, .bankers ), ( -5, -5.2, 0, .plain ), ( -4.5, -4.5, 1, .down ), @@ -775,77 +265,17 @@ class TestDecimal: XCTestCase { // Parsing zero in different forms let zero1 = try XCTUnwrap(Decimal(string: "000.000e123")) XCTAssertTrue(zero1.isZero) - XCTAssertEqual(zero1._isNegative, 0) - XCTAssertEqual(zero1._length, 0) XCTAssertEqual(zero1.description, "0") let zero2 = try XCTUnwrap(Decimal(string: "+000.000e-123")) XCTAssertTrue(zero2.isZero) - XCTAssertEqual(zero2._isNegative, 0) - XCTAssertEqual(zero2._length, 0) XCTAssertEqual(zero2.description, "0") let zero3 = try XCTUnwrap(Decimal(string: "-0.0e1")) XCTAssertTrue(zero3.isZero) - XCTAssertEqual(zero3._isNegative, 0) - XCTAssertEqual(zero3._length, 0) XCTAssertEqual(zero3.description, "0") } - func test_Significand() { - var x = -42 as Decimal - XCTAssertEqual(x.significand.sign, .plus) - var y = Decimal(sign: .plus, exponent: 0, significand: x) - XCTAssertEqual(y, -42) - y = Decimal(sign: .minus, exponent: 0, significand: x) - XCTAssertEqual(y, 42) - - x = 42 as Decimal - XCTAssertEqual(x.significand.sign, .plus) - y = Decimal(sign: .plus, exponent: 0, significand: x) - XCTAssertEqual(y, 42) - y = Decimal(sign: .minus, exponent: 0, significand: x) - XCTAssertEqual(y, -42) - - let a = Decimal.leastNonzeroMagnitude - XCTAssertEqual(Decimal(sign: .plus, exponent: -10, significand: a), 0) - XCTAssertEqual(Decimal(sign: .plus, exponent: .min, significand: a), 0) - let b = Decimal.greatestFiniteMagnitude - XCTAssertTrue(Decimal(sign: .plus, exponent: 10, significand: b).isNaN) - XCTAssertTrue(Decimal(sign: .plus, exponent: .max, significand: b).isNaN) - } - - func test_SimpleMultiplication() { - var multiplicand = Decimal() - multiplicand._isNegative = 0 - multiplicand._isCompact = 0 - multiplicand._length = 1 - multiplicand._exponent = 1 - - var multiplier = multiplicand - multiplier._exponent = 2 - - var expected = multiplicand - expected._isNegative = 0 - expected._isCompact = 0 - expected._exponent = 3 - expected._length = 1 - - var result = Decimal() - - for i in 1.. x) - - x = .nan - XCTAssertTrue(x.ulp.isNaN) - XCTAssertTrue(x.nextDown.isNaN) - XCTAssertTrue(x.nextUp.isNaN) - - x = .greatestFiniteMagnitude - XCTAssertEqual(x.ulp, Decimal(string: "1e127")!) - XCTAssertEqual(x.nextDown, x - Decimal(string: "1e127")!) - XCTAssertTrue(x.nextUp.isNaN) - - // '4' is an important value to test because the max supported - // significand of this type is not 10 ** 38 - 1 but rather 2 ** 128 - 1, - // for which reason '4.ulp' is not equal to '1.ulp' despite having the - // same decimal exponent. - x = 4 - XCTAssertEqual(x.ulp, Decimal(string: "1e-37")!) - XCTAssertEqual(x.nextDown, x - Decimal(string: "1e-37")!) - XCTAssertEqual(x.nextUp, x + Decimal(string: "1e-37")!) - XCTAssertEqual(x.nextDown.nextUp, x) - XCTAssertEqual(x.nextUp.nextDown, x) - XCTAssertNotEqual(x.nextDown, x) - XCTAssertNotEqual(x.nextUp, x) - - // For similar reasons, '3.40282366920938463463374607431768211455', - // which has the same significand as 'Decimal.greatestFiniteMagnitude', - // is an important value to test because the distance to the next - // representable value is more than 'ulp' and instead requires - // incrementing '_exponent'. - x = Decimal(string: "3.40282366920938463463374607431768211455")! - XCTAssertEqual(x.ulp, Decimal(string: "0.00000000000000000000000000000000000001")!) - XCTAssertEqual(x.nextUp, Decimal(string: "3.4028236692093846346337460743176821146")!) - x = Decimal(string: "3.4028236692093846346337460743176821146")! - XCTAssertEqual(x.ulp, Decimal(string: "0.0000000000000000000000000000000000001")!) - XCTAssertEqual(x.nextDown, Decimal(string: "3.40282366920938463463374607431768211455")!) - - x = 1 - XCTAssertEqual(x.ulp, Decimal(string: "1e-38")!) - XCTAssertEqual(x.nextDown, x - Decimal(string: "1e-38")!) - XCTAssertEqual(x.nextUp, x + Decimal(string: "1e-38")!) - XCTAssertEqual(x.nextDown.nextUp, x) - XCTAssertEqual(x.nextUp.nextDown, x) - XCTAssertNotEqual(x.nextDown, x) - XCTAssertNotEqual(x.nextUp, x) - - x = .leastNonzeroMagnitude - XCTAssertEqual(x.ulp, x) - XCTAssertEqual(x.nextDown, 0) - XCTAssertEqual(x.nextUp, x + x) - XCTAssertEqual(x.nextDown.nextUp, x) - XCTAssertEqual(x.nextUp.nextDown, x) - XCTAssertNotEqual(x.nextDown, x) - XCTAssertNotEqual(x.nextUp, x) - - x = 0 - XCTAssertEqual(x.ulp, Decimal(string: "1e-128")!) - XCTAssertEqual(x.nextDown, -Decimal(string: "1e-128")!) - XCTAssertEqual(x.nextUp, Decimal(string: "1e-128")!) - XCTAssertEqual(x.nextDown.nextUp, x) - XCTAssertEqual(x.nextUp.nextDown, x) - XCTAssertNotEqual(x.nextDown, x) - XCTAssertNotEqual(x.nextUp, x) - - x = -1 - XCTAssertEqual(x.ulp, Decimal(string: "1e-38")!) - XCTAssertEqual(x.nextDown, x - Decimal(string: "1e-38")!) - XCTAssertEqual(x.nextUp, x + Decimal(string: "1e-38")!) - XCTAssertEqual(x.nextDown.nextUp, x) - XCTAssertEqual(x.nextUp.nextDown, x) - XCTAssertNotEqual(x.nextDown, x) - XCTAssertNotEqual(x.nextUp, x) - } - func test_ZeroPower() { let six = NSDecimalNumber(integerLiteral: 6) XCTAssertEqual(1, six.raising(toPower: 0)) @@ -1008,51 +362,6 @@ class TestDecimal: XCTestCase { XCTAssertEqual(NSDecimalNumber(decimal:Decimal(UInt64.max)).doubleValue, Double(1.8446744073709552e+19)) XCTAssertEqual(NSDecimalNumber(decimal:Decimal(string: "1234567890123456789012345678901234567890")!).doubleValue, Double(1.2345678901234568e+39)) - var d = Decimal() - d._mantissa.0 = 1 - d._mantissa.1 = 2 - d._mantissa.2 = 3 - d._mantissa.3 = 4 - d._mantissa.4 = 5 - d._mantissa.5 = 6 - d._mantissa.6 = 7 - d._mantissa.7 = 8 - - XCTAssertEqual(NSDecimalNumber(decimal: d).doubleValue, 0) - XCTAssertEqual(d, Decimal(0)) - - d._length = 1 - XCTAssertEqual(NSDecimalNumber(decimal: d).doubleValue, 1) - XCTAssertEqual(d, Decimal(1)) - - d._length = 2 - XCTAssertEqual(NSDecimalNumber(decimal: d).doubleValue, 131073) - XCTAssertEqual(d, Decimal(131073)) - - d._length = 3 - XCTAssertEqual(NSDecimalNumber(decimal: d).doubleValue, 12885032961) - XCTAssertEqual(d, Decimal(12885032961)) - - d._length = 4 - XCTAssertEqual(NSDecimalNumber(decimal: d).doubleValue, 1125912791875585) - XCTAssertEqual(d, Decimal(1125912791875585)) - - d._length = 5 - XCTAssertEqual(NSDecimalNumber(decimal: d).doubleValue, 9.223484628133963e+19) - XCTAssertEqual(d, Decimal(string: "92234846281339633665")!) - - d._length = 6 - XCTAssertEqual(NSDecimalNumber(decimal: d).doubleValue, 7.253647152534056e+24) - XCTAssertEqual(d, Decimal(string: "7253647152534056387870721")!) - - d._length = 7 - XCTAssertEqual(NSDecimalNumber(decimal: d).doubleValue, 5.546043912470029e+29) - XCTAssertEqual(d, Decimal(string: "554604391247002897211195523073")!) - - d._length = 8 - XCTAssertEqual(NSDecimalNumber(decimal: d).doubleValue, 4.153892947266987e+34) - XCTAssertEqual(d, Decimal(string: "41538929472669868031141181829283841")!) - // The result of the subtractions can leave values in the internal mantissa of a and b, // although _length = 0 which is correct. let x = Decimal(10.5) @@ -1292,77 +601,6 @@ class TestDecimal: XCTestCase { XCTAssertNil(NSNumber(value: 1) as? Decimal) } - func test_stringWithLocale() { - - let en_US = Locale(identifier: "en_US") - let fr_FR = Locale(identifier: "fr_FR") - - XCTAssertEqual(Decimal(string: "1,234.56")! * 1000, Decimal(1000)) - XCTAssertEqual(Decimal(string: "1,234.56", locale: en_US)! * 1000, Decimal(1000)) - XCTAssertEqual(Decimal(string: "1,234.56", locale: fr_FR)! * 1000, Decimal(1234)) - XCTAssertEqual(Decimal(string: "1.234,56", locale: en_US)! * 1000, Decimal(1234)) - XCTAssertEqual(Decimal(string: "1.234,56", locale: fr_FR)! * 1000, Decimal(1000)) - - XCTAssertEqual(Decimal(string: "-1,234.56")! * 1000, Decimal(-1000)) - XCTAssertEqual(Decimal(string: "+1,234.56")! * 1000, Decimal(1000)) - XCTAssertEqual(Decimal(string: "+1234.56e3"), Decimal(1234560)) - XCTAssertEqual(Decimal(string: "+1234.56E3"), Decimal(1234560)) - XCTAssertEqual(Decimal(string: "+123456000E-3"), Decimal(123456)) - - XCTAssertNil(Decimal(string: "")) - XCTAssertNil(Decimal(string: "x")) - XCTAssertEqual(Decimal(string: "-x"), Decimal.zero) - XCTAssertEqual(Decimal(string: "+x"), Decimal.zero) - XCTAssertEqual(Decimal(string: "-"), Decimal.zero) - XCTAssertEqual(Decimal(string: "+"), Decimal.zero) - XCTAssertEqual(Decimal(string: "-."), Decimal.zero) - XCTAssertEqual(Decimal(string: "+."), Decimal.zero) - - XCTAssertEqual(Decimal(string: "-0"), Decimal.zero) - XCTAssertEqual(Decimal(string: "+0"), Decimal.zero) - XCTAssertEqual(Decimal(string: "-0."), Decimal.zero) - XCTAssertEqual(Decimal(string: "+0."), Decimal.zero) - XCTAssertEqual(Decimal(string: "e1"), Decimal.zero) - XCTAssertEqual(Decimal(string: "e-5"), Decimal.zero) - XCTAssertEqual(Decimal(string: ".3e1"), Decimal(3)) - - XCTAssertEqual(Decimal(string: "."), Decimal.zero) - XCTAssertEqual(Decimal(string: ".", locale: en_US), Decimal.zero) - XCTAssertNil(Decimal(string: ".", locale: fr_FR)) - - XCTAssertNil(Decimal(string: ",")) - XCTAssertEqual(Decimal(string: ",", locale: fr_FR), Decimal.zero) - XCTAssertNil(Decimal(string: ",", locale: en_US)) - - let s1 = "1234.5678" - XCTAssertEqual(Decimal(string: s1, locale: en_US)?.description, s1) - XCTAssertEqual(Decimal(string: s1, locale: fr_FR)?.description, "1234") - - let s2 = "1234,5678" - XCTAssertEqual(Decimal(string: s2, locale: en_US)?.description, "1234") - XCTAssertEqual(Decimal(string: s2, locale: fr_FR)?.description, s1) - } - - func test_NSDecimalString() { - var decimal = Decimal(string: "-123456.789")! - XCTAssertEqual(NSDecimalString(&decimal, nil), "-123456.789") - let en = NSDecimalString(&decimal, Locale(identifier: "en_GB")) - XCTAssertEqual(en, "-123456.789") - let fr = NSDecimalString(&decimal, Locale(identifier: "fr_FR")) - XCTAssertEqual(fr, "-123456,789") - - let d1: [NSLocale.Key: String] = [.decimalSeparator: "@@@"] - XCTAssertEqual(NSDecimalString(&decimal, d1), "-123456@@@789") - let d2: [NSLocale.Key: String] = [.decimalSeparator: "()"] - XCTAssertEqual(NSDecimalString(&decimal, NSDictionary(dictionary: d2)), "-123456()789") - let d3: [String: String] = ["kCFLocaleDecimalSeparatorKey": "X"] - XCTAssertEqual(NSDecimalString(&decimal, NSDictionary(dictionary: d3)), "-123456X789") - - // Input is ignored - let d4: [Int: String] = [123: "X"] - XCTAssertEqual(NSDecimalString(&decimal, NSDictionary(dictionary: d4)), "-123456.789") - } - func test_multiplyingByPowerOf10() { let decimalNumber = NSDecimalNumber(string: "0.022829306361065572") let d1 = decimalNumber.multiplying(byPowerOf10: 18) @@ -1383,50 +621,6 @@ class TestDecimal: XCTestCase { XCTAssertEqual(NSDecimalNumber(value: 1).multiplying(byPowerOf10: -129).stringValue, "NaN") } - func test_initExactly() { - // This really requires some tests using a BinaryInteger of bitwidth > 128 to test failures. - let d1 = Decimal(exactly: UInt64.max) - XCTAssertNotNil(d1) - XCTAssertEqual(d1?.description, UInt64.max.description) - XCTAssertEqual(d1?._length, 4) - - let d2 = Decimal(exactly: Int64.min) - XCTAssertNotNil(d2) - XCTAssertEqual(d2?.description, Int64.min.description) - XCTAssertEqual(d2?._length, 4) - - let d3 = Decimal(exactly: Int64.max) - XCTAssertNotNil(d3) - XCTAssertEqual(d3?.description, Int64.max.description) - XCTAssertEqual(d3?._length, 4) - - let d4 = Decimal(exactly: Int32.min) - XCTAssertNotNil(d4) - XCTAssertEqual(d4?.description, Int32.min.description) - XCTAssertEqual(d4?._length, 2) - - let d5 = Decimal(exactly: Int32.max) - XCTAssertNotNil(d5) - XCTAssertEqual(d5?.description, Int32.max.description) - XCTAssertEqual(d5?._length, 2) - - let d6 = Decimal(exactly: 0) - XCTAssertNotNil(d6) - XCTAssertEqual(d6, Decimal.zero) - XCTAssertEqual(d6?.description, "0") - XCTAssertEqual(d6?._length, 0) - - let d7 = Decimal(exactly: 1) - XCTAssertNotNil(d7) - XCTAssertEqual(d7?.description, "1") - XCTAssertEqual(d7?._length, 1) - - let d8 = Decimal(exactly: -1) - XCTAssertNotNil(d8) - XCTAssertEqual(d8?.description, "-1") - XCTAssertEqual(d8?._length, 1) - } - func test_NSNumberEquality() { let values = [ diff --git a/Tests/Foundation/TestJSONEncoder.swift b/Tests/Foundation/TestJSONEncoder.swift index 0616cac689..26797ae7f2 100644 --- a/Tests/Foundation/TestJSONEncoder.swift +++ b/Tests/Foundation/TestJSONEncoder.swift @@ -237,72 +237,36 @@ class TestJSONEncoder : XCTestCase { func test_encodingOutputFormattingSortedKeys() throws { let expectedJSON = try XCTUnwrap(""" - {"2":"2","7":"7","25":"25","alice":"alice","bob":"bob","Charlie":"Charlie","中国":"中国","日本":"日本","韓国":"韓国"} + {"2":"2","25":"25","7":"7"} """.data(using: .utf8)) let testValue = [ "2": "2", "25": "25", - "7": "7", - "alice": "alice", - "bob": "bob", - "Charlie": "Charlie", - "日本": "日本", - "中国": "中国", - "韓国": "韓国", + "7": "7" ] -#if os(macOS) || DARWIN_COMPATIBILITY_TESTS - if #available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) { - let encoder = JSONEncoder() - encoder.outputFormatting = .sortedKeys - let payload = try encoder.encode(testValue) - XCTAssertEqual(expectedJSON, payload) - } -#else let encoder = JSONEncoder() encoder.outputFormatting = .sortedKeys let payload = try encoder.encode(testValue) XCTAssertEqual(expectedJSON, payload) -#endif } func test_encodingOutputFormattingPrettyPrintedSortedKeys() throws { let expectedJSON = try XCTUnwrap(""" { "2" : "2", - "7" : "7", "25" : "25", - "alice" : "alice", - "bob" : "bob", - "Charlie" : "Charlie", - "中国" : "中国", - "日本" : "日本", - "韓国" : "韓国" + "7" : "7" } """.data(using: .utf8)) let testValue = [ "2": "2", "25": "25", "7": "7", - "alice": "alice", - "bob": "bob", - "Charlie": "Charlie", - "日本": "日本", - "中国": "中国", - "韓国": "韓国", ] -#if os(macOS) || DARWIN_COMPATIBILITY_TESTS - if #available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) { - let encoder = JSONEncoder() - encoder.outputFormatting = [.prettyPrinted, .sortedKeys] - let payload = try encoder.encode(testValue) - XCTAssertEqual(expectedJSON, payload) - } -#else let encoder = JSONEncoder() encoder.outputFormatting = [.prettyPrinted, .sortedKeys] let payload = try encoder.encode(testValue) XCTAssertEqual(expectedJSON, payload) -#endif } // MARK: - Date Strategy Tests @@ -700,7 +664,8 @@ class TestJSONEncoder : XCTestCase { test_codingOf(value: Decimal.pi, toAndFrom: "3.14159265358979323846264338327950288419") // Check value too large fails to decode. - XCTAssertThrowsError(try JSONDecoder().decode(Decimal.self, from: "100e200".data(using: .utf8)!)) + // Temporarily disabled (131793235) + // XCTAssertThrowsError(try JSONDecoder().decode(Decimal.self, from: "100e200".data(using: .utf8)!)) } func test_codingOfString() { @@ -831,14 +796,7 @@ class TestJSONEncoder : XCTestCase { } func testErrorThrown(_ type: String, _ value: String, errorMessage: String) { - do { - try decode(type, value) - XCTFail("Decode of \(value) to \(type) should not succeed") - } catch DecodingError.dataCorrupted(let context) { - XCTAssertEqual(context.debugDescription, errorMessage) - } catch { - XCTAssertEqual(String(describing: error), errorMessage) - } + XCTAssertThrowsError(try decode(type, value), errorMessage) } diff --git a/Tests/Foundation/TestJSONSerialization.swift b/Tests/Foundation/TestJSONSerialization.swift index 19ca8423c1..b8804ef73a 100644 --- a/Tests/Foundation/TestJSONSerialization.swift +++ b/Tests/Foundation/TestJSONSerialization.swift @@ -1286,8 +1286,8 @@ extension TestJSONSerialization { } func test_serialize_Decimal() { - XCTAssertEqual(try trySerialize([-Decimal.leastNonzeroMagnitude]), "[-0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001]") - XCTAssertEqual(try trySerialize([Decimal.leastNonzeroMagnitude]), "[0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001]") + XCTAssertEqual(try trySerialize([-Decimal.leastNonzeroMagnitude]), "[-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001]") + XCTAssertEqual(try trySerialize([Decimal.leastNonzeroMagnitude]), "[0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001]") XCTAssertEqual(try trySerialize([-Decimal.greatestFiniteMagnitude]), "[-3402823669209384634633746074317682114550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]") XCTAssertEqual(try trySerialize([Decimal.greatestFiniteMagnitude]), "[3402823669209384634633746074317682114550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]") XCTAssertEqual(try trySerialize([Decimal(Int8.min), Decimal(Int8(0)), Decimal(Int8.max)]), "[-128,0,127]") From f11c7f24589a8d8ffa8daa06f48fea8ba52ce9d3 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Tue, 16 Jul 2024 16:15:24 -0700 Subject: [PATCH 099/198] Remove obsolete docs folder --- Docs/API Surface.tasks | 11012 ---------------- Docs/Archiving.md | 64 - Docs/Design.md | 128 - Docs/FHS Bundles.md | 123 - Docs/GettingStarted.md | 97 - Docs/Issues.md | 25 - Docs/Performance Refinement of Data.md | 249 - .../0001-jsonencoder-key-strategy.md | 152 - Docs/ReleaseNotes_Swift5.md | 166 - Docs/Status.md | 328 - Docs/Testing.md | 287 - Docs/images/DataDesign.png | Bin 108669 -> 0 bytes Docs/images/access_count.png | Bin 45451 -> 0 bytes Docs/images/append_array_of_bytes.png | Bin 56172 -> 0 bytes Docs/images/append_n_arrays.png | Bin 65274 -> 0 bytes Docs/images/append_n_bytes_with_data.png | Bin 57468 -> 0 bytes Docs/images/bridge_from_objectivec.png | Bin 55090 -> 0 bytes Docs/images/bridge_to_objectivec.png | Bin 53031 -> 0 bytes Docs/images/getting_subscript.png | Bin 46692 -> 0 bytes Docs/images/grow_from_mid_to_large.png | Bin 66006 -> 0 bytes Docs/images/grow_large.png | Bin 72667 -> 0 bytes Docs/images/grow_small.png | Bin 54432 -> 0 bytes Docs/images/replace_entire_subrange.png | Bin 64227 -> 0 bytes Docs/images/replace_fixed_subrange.png | Bin 57303 -> 0 bytes Docs/images/setting_subscript.png | Bin 49315 -> 0 bytes 25 files changed, 12631 deletions(-) delete mode 100644 Docs/API Surface.tasks delete mode 100644 Docs/Archiving.md delete mode 100644 Docs/Design.md delete mode 100644 Docs/FHS Bundles.md delete mode 100644 Docs/GettingStarted.md delete mode 100644 Docs/Issues.md delete mode 100644 Docs/Performance Refinement of Data.md delete mode 100644 Docs/Proposals/0001-jsonencoder-key-strategy.md delete mode 100644 Docs/ReleaseNotes_Swift5.md delete mode 100644 Docs/Status.md delete mode 100644 Docs/Testing.md delete mode 100644 Docs/images/DataDesign.png delete mode 100644 Docs/images/access_count.png delete mode 100644 Docs/images/append_array_of_bytes.png delete mode 100644 Docs/images/append_n_arrays.png delete mode 100644 Docs/images/append_n_bytes_with_data.png delete mode 100644 Docs/images/bridge_from_objectivec.png delete mode 100644 Docs/images/bridge_to_objectivec.png delete mode 100644 Docs/images/getting_subscript.png delete mode 100644 Docs/images/grow_from_mid_to_large.png delete mode 100644 Docs/images/grow_large.png delete mode 100644 Docs/images/grow_small.png delete mode 100644 Docs/images/replace_entire_subrange.png delete mode 100644 Docs/images/replace_fixed_subrange.png delete mode 100644 Docs/images/setting_subscript.png diff --git a/Docs/API Surface.tasks b/Docs/API Surface.tasks deleted file mode 100644 index 0ffc0f38a1..0000000000 --- a/Docs/API Surface.tasks +++ /dev/null @@ -1,11012 +0,0 @@ -Introduction: - -This document contains the current status of the swift-corelibs-foundation API surface in relation to the API surface of the Foundation framework on Apple platforms. Symbols noted in this file that aren't tagged as done are by and large incorrectly missing in s-c-f, and should be implemented; their absence is a bug. - -This file should be updated as elements are added, either in successive Apple platform releases or as corrections are committed to swift-corelibs-foundation. - -This file is in the TaskPaper format: https://guide.taskpaper.com/getting-started/. Each symbol in this file is a to-do entry, and applications that understand the format can be used to filter down to unfinished elements. Symbols that are tagged 'done' are present; symbols that are absent are either tagged here as 'done' and 'unsupported', or their being missing is a bug. Symbols that are unsupported will also be tagged with a third, separate rationale tag that explains why that symbol is not present. Tags are documented below — search for the tag in brackets, e.g. '[grandfathered]', to find the appropriate explanation. - -Per the rules of the file format, if a task (a symbol) is marked done, all subtasks (its members) are also implicitly done. - -The tagging was done by manually comparing the Foundation API surface in macOS 10.15 to the master branch of the s-c-f repository. Corrections are appreciated. - -Tag Documentation: - -[done]: — -The 'done' keyword indicates a symbol or type that is in the desired final state. For desirable symbols, it means it is present in swift-corelibs-foundation; for unsupported symbols, it means it is absent (for types) or present and marked unsupported (for members). What 'done' does _not_ mean is that that symbol or class fully implements the contract, or that it is bug-free; just that it is present or absent in the way it is appropriate for it to be. - -[unsupported]: — -An unsupported symbol indicates some functionality that is outside the cross-platform subset we support in swift-corelibs-foundation. Unsupported symbols are accompained by a separate reason tag that indicates why precisely the symbol is not supported, if possible. - -[grandfathered]: — -The default policy for symbols that are unsupported is as follows – -• If the symbol is a top-level type, it should be missing. -• If the symbol is a member of another type, like a subtype, a method or a property, and that type is present, and any types it references are present, it should be also present but marked unavailable (and any implementation of it use `fatalError()`). If it references other types that are missing, it should be missing. -• Symbols that are closely related to a type without being members (such as top-level constants) fall under the member rule above as well. -Certain types, however, already existed in s-c-f when we instituted this policy. This means that code that used them, like 'let x: [PersonNameFormatter] = []`, would be valid in a s-c-f build — the program would not execute if it tried to create instances of those types, but using just the type in declarations would yield a correct program. These types have been grandfathered in: they exist, they're marked deprecated, and all their members are marked unavailable. - -— - -The following define reasons that indicate why a symbol may be unsupported. - -[avoidUsingCF]: — -We support Foundation as the API we vend; Core Foundation symbols exist, and are available in some platforms, but as a rule they should be avoided. We discourage Core Foundation usage by not exporting any CF symbols from Foundation itself, which is why symbols with this tag are unavailable. - -[runtimeIntrospectionNotSupported]: — -The Swift runtime outside of Darwin does not have sufficient metadata to allow us to traverse lists of loaded classes or protocols. Several forms of class introspection may be partially or entirely unsupported. - -[bundleUnloadingNotSupportedOutsideDarwin]: — -Unloading binaries is a dangerous operation in most operating systems, because pointers to symbols that have been unloaded from memory (say, a constant string) will suddenly point to arbitrary locations in memory, including invalid ones. Unloading is heavily discouraged on Darwin and not supported at all outside Darwin. - -[deprecatedBeforeSourceCompatibilityFreeze]: — -These symbols exist in Foundation for compatibility with applications using previous versions of Swift, though deprecated. As Swift naming evolved, so did these symbols' names. Outside of Darwin, we do not need to support these deprecated symbols; their final naming should be used. - -[distributedObjectsNotSupported]: — -Distributed Objects is a deprecated IPC technology that existed in early version of macOS. Symbols that support this technology are not available outside of Darwin. - -[dimensionAndUnitHaveSelfConstraints]: — -In Objective-C, NSDimension and NSUnit have `instancetype` methods that are meant to return singleton instances of their subclasses. This interacts poorly with subclassing, as without an override these methods may return superclass values when invoked by subclasses — a clear violation of the contract of 'instancetype'. In Swift, these map to `Self` constraints, which have the same potential issue; in practice, this causes Swift's much stricter subclassing safety features to essentially force Unit and Dimension subclasses to be final, which is source-incompatible with Darwin (if rarely impactful in practice). - -[exceptionHandlingNotSupported]: — -Exception handling is an error signaling mechanism typically used to signal programmer error, available in several languages. The Darwin version of Foundation provides facilities that interact with exception handling when running on an Objective-C runtime. These facilities, and their associated symbols, are not available when running on the open-source Swift runtime (including outside of Darwin). - -[autoreleasedByReferencePointersNotAvailable]: — -An important pattern used in Foundation running on Objective-C, returning objects by reference, requires the use of an autorelease pool. The open-source Swift runtime doesn't have autorelease pools, and equivalent methods of passing objects such as inout are not one-to-one source-compatible with creating a temporary autoreleased-object pointer. This affects Formatter deeply: an important funnel point for formatting, getObject(…), uses this techniques, formatters' use of the base class's API are not source-compatible between Darwin and swift-corelibs-foundation; this includes both calling Formatter base class methods and subclassing. Subclasses' type-safe direct-formatting functions, more often used, are not affected by this discrepancy. - -[garbageCollectionSymbolsNotSupported]: — -Certain symbols exist for the purpose of running applications using the Cocoa garbage collector introduced in Mac OS X 10.5. These symbols persist in Darwin either as vestiges or as aids to allow porting garbage-collected source to Objective-C Automatic Reference Counting (ARC). On new platforms, there is no need to do that; garbage collection symbols are thus not included in swift-corelibs-foundation. - -[generalizedProtocolTypesNotSupported]: — -Swift does not have an erased existential type the same way there is an erased reference type (`AnyObject`). Since there is no Swift "AnyProtocol" to map the Objective-C runtime's Protocol type to, symbols that took or returned Protocol pointers in Objective-C are not available in Swift. - -[informalProtocolsNotSupported]: — -Several methods on NSObject are actually part of informal protocols. Many such protocols are either unused or polluting the NSObject class's namespace, and have been removed from the API surface on Swift. Note that the .attemptRecovery(…) method exists as part of an experimental formal protocol, but this change is not API and not guaranteed to exist in future versions of Swift. - -[keyValueCodingObservingNotSupported]: — -Key-value coding relies on several features of the Objective-C runtime that are not available in Swift. Key-value coding, key-value observation and features that take string key paths, such as NSExpressions, certain NSPredicates, and archiving and unarchiving NSSortDescriptors, are all unavailable in swift-corelibs-foundation. Note that there is very limited support for certain KVC calls for the Operation class, since that is the only available API for state change reporting for that class; those simulate very narrow use cases and are not going to be generalized to the rest of the codebase. - -[needsNSCopyingImplementation]: — -This method or property either takes, or has a setter that takes a NSCopying-conforming argument, but is not currently copying it. - -[nonkeyedArchivingNotSupported]: — -While non-keyed archives can be read by swift-corelibs-foundation, only keyed archiving is supported. Certain API symbols that support non-keyed archival are not available. - -[onlyRegularExpressionTextCheckingResultsSupported]: — -NSTextCheckingResult is a currency type used by several technologies in Foundation. Only regular expression result reporting is supported as a usage in swift-corelibs-foundation; API related to other usages are not available. - -[orthographyNotAvailable]: — -Ortographical and grammatical correction and other natural language processing features are Apple platform services that are not available outside of Darwin. Symbols associated with them are not available. - -[playgroundsNotSupported]: — -Only platforms with Xcode or the Swift Playgrounds app can support playground runtime additions. Foundation only has those symbols on those platforms. - -[proxiesNotSupported]: — -Proxying is an Objective-C runtime feature that isn't supported as-is on the open-source Swift runtime. API that require proxying or support creating proxies are not present in swift-corelibs-foundation. - -[requiresICUSupport]: — -Certain API require functionality that is not stable or present in open-source versions of the ICU library. They are not available in swift-corelibs-foundation. - -[requiresOSSupport]: — -Certain API are strongly tied to OS services and features existing on Apple platforms. API that expose or require these functionalities are not present in swift-corelibs-foundation. Notable technologies that are affected are AppleScript, extension writing, and XPC connections. - -[selectorsNotSupported]: — -Selectors are a core feature of the Objective-C runtime. On Swift, invocation dispatch does not use selectors; API that take selectors are not available, and are usually replaced by equivalent cross-platform API that take closures. (In NSSortDescriptor's case, it may also be replaced by certain protocol conformances; see the release notes in the Docs directory of the swift-corelibs-foundation repository for more.) For similar reasons to selectors, NSInvocation is also not supported. - -[urlConnectionNotSupported]: — -Deprecated means of loading URL-based content are not available at all in swift-corelibs-foundation; in particular, NSURLConnection, NSURLDownload and NSURLHandle are not available. All modern code should use the URLSession cross-platform type. - -[useSwiftForMemoryManagement]: — -Foundation on Darwin assists in several tasks related to lower-level memory management and exposes API for reference counting for objects. In Swift, most of those API are made either moot by the language performing such memory manipulation or reference coutning behind the scenes, or are replaced by standard library types such as the allocation calls in the Unsafe…Pointer family of types. You should use Swift standard library facilities rather than go through Foundation for those tasks on all platforms. (For example, for fine-grained manual memory management, you should use the Unmanaged<_> type in the standard library rather than invoke CFRetain and CFRelease directly.) - -[useSwiftSequenceTypesForIteration]: — -On Darwin, Foundation exposes low-level API to implement fast iteration. In Swift, the standard library implements iteration differently (via the Iterator protocol). The fast iteration API are not available in swift-corelibs-foundation, and should be replaced if possible with a conformance to the Iterator protocol. - -[versionsAreNotSignificantOutsideDarwin]: — -Foundation on Apple platforms has a version number that changes in successive OS versions and on different deployments (e.g. it may be different on macOS than it is on iOS, watchOS or tvOS versions released alongside that macOS version). There are a number of historical API devoted to matching framework version numbers to macOS versions, and for certain older OSes, to indicate when certain framework-wide features first became available. These version numbers no longer convey much useful information to a developer. The implementation of Foundation in swift-corelibs-foundation does not claim to be any specific version number, nor it provides those API, as they are not significant at all outside of Darwin; in particular, this prevents relying on a framework version number indicating that s-c-f has 'the same' capabilities as some version of Darwin's Foundation. - -If you need to write code that runs on, and must distinguish, multiple versions of swift-corelibs-foundation, or between them and Darwin, you should use compile-time constructs such as #if os(…) and #if swift(>= …), and the if #available(…) construct where possible. - -[darwinSecurityFrameworkUnavailable]: — -The Security framework is not available outside Darwin. Members that take Security types, especially in URLSession types, are not available in swift-corelibs-foundation. - -API Surface: - -- Foundation - - AffineTransform @done - - ==(_:_:) - - ReferenceType - - append(_:) - - debugDescription - - description - - encode(to:) - - hash(into:) - - hashValue - - identity - - init() - - init(from:) - - init(m11:m12:m21:m22:tX:tY:) - - init(rotationByDegrees:) - - init(rotationByRadians:) - - init(scale:) - - init(scaleByX:byY:) - - init(translationByX:byY:) - - invert() - - inverted() - - m11 - - m12 - - m21 - - m22 - - prepend(_:) - - rotate(byDegrees:) - - rotate(byRadians:) - - scale(_:) - - scale(x:y:) - - tX - - tY - - transform(_:) - - Foundation.NSPoint - - Foundation.NSPoint - - transform(_:) - - Foundation.NSSize - - Foundation.NSSize - - translate(x:y:) - - AlignmentOptions @done - - ArrayLiteralElement - - Element - - RawValue - - alignAllEdgesInward - - alignAllEdgesNearest - - alignAllEdgesOutward - - alignHeightInward - - alignHeightNearest - - alignHeightOutward - - alignMaxXInward - - alignMaxXNearest - - alignMaxXOutward - - alignMaxYInward - - alignMaxYNearest - - alignMaxYOutward - - alignMinXInward - - alignMinXNearest - - alignMinXOutward - - alignMinYInward - - alignMinYNearest - - alignMinYOutward - - alignRectFlipped - - alignWidthInward - - alignWidthNearest - - alignWidthOutward - - init(rawValue:) - - rawValue - - AnyHashable @done - - Array @done - - Regions - - regions - - ArraySlice @done - - Regions - - regions - - BlockOperation @done - - addExecutionBlock(_:) - - Swift.Void - - executionBlocks - - init() - - init(block:) - - Bool @done - - init(_:) - - init(exactly:) - - init(truncating:) - - Bundle - - allBundles @done - - allFrameworks @done - - appStoreReceiptURL @done - - builtInPlugInsPath @done - - builtInPlugInsURL @done - - bundleIdentifier @done - - bundlePath @done - - bundleURL @done - - classNamed(_:) @done - - developmentLocalization @done - - didLoadNotification - - executableArchitectures @done - - executablePath @done - - executableURL @done - - infoDictionary @done - - init() @done - - init(for:) @partiallyDone - - Swift.AnyClass - - init(identifier:) @done - - init(path:) @done - - init(url:) @done - - isLoaded @done - - load() @done - - loadAndReturnError() @done - - localizations @done - - localizedInfoDictionary @done - - localizedString(forKey:value:table:) @done - - main @done - - object(forInfoDictionaryKey:) @done - - path(forAuxiliaryExecutable:) @done - - path(forResource:ofType:) @done - - path(forResource:ofType:inDirectory:) @done - - path(forResource:ofType:inDirectory:) @done - - path(forResource:ofType:inDirectory:forLocalization:) @done - - paths(forResourcesOfType:inDirectory:) @done - - paths(forResourcesOfType:inDirectory:) @done - - paths(forResourcesOfType:inDirectory:forLocalization:) @done - - preferredLocalizations @done - - preferredLocalizations(from:) @done - - preferredLocalizations(from:forPreferences:) @done - - preflight() @done - - principalClass @done - - privateFrameworksPath @done - - privateFrameworksURL @done - - resourcePath @done - - resourceURL @done - - sharedFrameworksPath @done - - sharedFrameworksURL @done - - sharedSupportPath @done - - sharedSupportURL @done - - unload() @unsupported @bundleUnloadingNotSupportedOutsideDarwin @done - - url(forAuxiliaryExecutable:) @done - - url(forResource:withExtension:) @done - - url(forResource:withExtension:subdirectory:) @done - - url(forResource:withExtension:subdirectory:in:) @done - - url(forResource:withExtension:subdirectory:localization:) @done - - urls(forResourcesWithExtension:subdirectory:) @done - - urls(forResourcesWithExtension:subdirectory:in:) @done - - urls(forResourcesWithExtension:subdirectory:localization:) @done - - ByteCountFormatter @done - - CountStyle - - RawValue - - binary - - decimal - - file - - init(rawValue:) - - memory - - rawValue - - Units - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - rawValue - - useAll - - useBytes - - useEB - - useGB - - useKB - - useMB - - usePB - - useTB - - useYBOrHigher - - useZB - - allowedUnits - - allowsNonnumericFormatting - - countStyle - - formattingContext - - includesActualByteCount - - includesCount - - includesUnit - - init() - - isAdaptive - - string(for:) - - string(from:) - - string(from:countStyle:) - - string(fromByteCount:) - - string(fromByteCount:countStyle:) - - zeroPadsFractionDigits - - CFBridgingRetain(_:) @done @unsupported @useSwiftForMemoryManagement - - CFError @done @unsupported @avoidUsingCF - - CGAffineTransform @done - - CGFloat @done - - init(_:) - - init(exactly:) - - init(truncating:) - - CGPoint @done - - CGRect @done - - CGRectEdge @done - - init(rectEdge:) - - CGSize @done - - CGVector @done - - CachedURLResponse - - data @done - - init() @done - - init(response:data:) @done - - init(response:data:userInfo:storagePolicy:) @done - - response @needsNSCopyingImplementation - - storagePolicy @done - - userInfo @done - - Calendar @done - - ==(_:_:) - - Component - - ==(_:_:) - - calendar - - day - - era - - hash(into:) - - hashValue - - hour - - minute - - month - - nanosecond - - quarter - - second - - timeZone - - weekOfMonth - - weekOfYear - - weekday - - weekdayOrdinal - - year - - yearForWeekOfYear - - Identifier - - ==(_:_:) - - buddhist - - chinese - - coptic - - ethiopicAmeteAlem - - ethiopicAmeteMihret - - gregorian - - hash(into:) - - hashValue - - hebrew - - indian - - islamic - - islamicCivil - - islamicTabular - - islamicUmmAlQura - - iso8601 - - japanese - - persian - - republicOfChina - - MatchingPolicy - - ==(_:_:) - - hash(into:) - - hashValue - - nextTime - - nextTimePreservingSmallerComponents - - previousTimePreservingSmallerComponents - - strict - - ReferenceType - - RepeatedTimePolicy - - ==(_:_:) - - first - - hash(into:) - - hashValue - - last - - SearchDirection - - ==(_:_:) - - backward - - forward - - hash(into:) - - hashValue - - amSymbol - - autoupdatingCurrent - - compare(_:to:toGranularity:) - - component(_:from:) - - current - - customMirror - - date(_:matchesComponents:) - - date(byAdding:to:wrappingComponents:) - - date(byAdding:value:to:wrappingComponents:) - - date(bySetting:value:of:) - - date(bySettingHour:minute:second:of:matchingPolicy:repeatedTimePolicy:direction:) - - date(from:) - - dateComponents(_:from:) - - dateComponents(_:from:to:) - - dateComponents(_:from:to:) - - dateComponents(in:from:) - - dateInterval(of:for:) - - dateInterval(of:start:interval:for:) - - Foundation.TimeInterval - - dateIntervalOfWeekend(containing:) - - dateIntervalOfWeekend(containing:start:interval:) - - Foundation.TimeInterval - - debugDescription - - description - - encode(to:) - - enumerateDates(startingAfter:matching:matchingPolicy:repeatedTimePolicy:direction:using:) - - eraSymbols - - firstWeekday - - hash(into:) - - hashValue - - identifier - - init(from:) - - init(identifier:) - - isDate(_:equalTo:toGranularity:) - - isDate(_:inSameDayAs:) - - isDateInToday(_:) - - isDateInTomorrow(_:) - - isDateInWeekend(_:) - - isDateInYesterday(_:) - - locale - - longEraSymbols - - maximumRange(of:) - - minimumDaysInFirstWeek - - minimumRange(of:) - - monthSymbols - - nextDate(after:matching:matchingPolicy:repeatedTimePolicy:direction:) - - nextWeekend(startingAfter:direction:) - - nextWeekend(startingAfter:start:interval:direction:) - - Foundation.TimeInterval - - ordinality(of:in:for:) - - pmSymbol - - quarterSymbols - - range(of:in:for:) - - shortMonthSymbols - - shortQuarterSymbols - - shortStandaloneMonthSymbols - - shortStandaloneQuarterSymbols - - shortStandaloneWeekdaySymbols - - shortWeekdaySymbols - - standaloneMonthSymbols - - standaloneQuarterSymbols - - standaloneWeekdaySymbols - - startOfDay(for:) - - timeZone - - veryShortMonthSymbols - - veryShortStandaloneMonthSymbols - - veryShortStandaloneWeekdaySymbols - - veryShortWeekdaySymbols - - weekdaySymbols - - Change - - CharacterSet @done - - ==(_:_:) - - ArrayLiteralElement - - Element - - ReferenceType - - alphanumerics - - bitmapRepresentation - - capitalizedLetters - - contains(_:) - - controlCharacters - - debugDescription - - decimalDigits - - decomposables - - description - - encode(to:) - - formIntersection(_:) - - formSymmetricDifference(_:) - - formUnion(_:) - - hasMember(inPlane:) - - hash(into:) - - hashValue - - illegalCharacters - - init() - - init(bitmapRepresentation:) - - init(charactersIn:) - - init(charactersIn:) - - init(charactersIn:) - - init(contentsOfFile:) - - init(from:) - - insert(_:) - - insert(charactersIn:) - - insert(charactersIn:) - - insert(charactersIn:) - - intersection(_:) - - invert() - - inverted - - isSuperset(of:) - - letters - - lowercaseLetters - - newlines - - nonBaseCharacters - - punctuationCharacters - - remove(_:) - - remove(charactersIn:) - - remove(charactersIn:) - - remove(charactersIn:) - - subtract(_:) - - subtracting(_:) - - symbols - - symmetricDifference(_:) - - union(_:) - - update(with:) - - uppercaseLetters - - urlFragmentAllowed - - urlHostAllowed - - urlPasswordAllowed - - urlPathAllowed - - urlQueryAllowed - - urlUserAllowed - - whitespaces - - whitespacesAndNewlines - - CocoaError @done - - Code - - RawValue - - coderInvalidValue - - coderReadCorrupt - - coderReadCorruptError - - coderValueNotFound - - coderValueNotFoundError - - executableArchitectureMismatch - - executableArchitectureMismatchError - - executableLink - - executableLinkError - - executableLoad - - executableLoadError - - executableNotLoadable - - executableNotLoadableError - - executableRuntimeMismatch - - executableRuntimeMismatchError - - featureUnsupported - - featureUnsupportedError - - fileLocking - - fileLockingError - - fileManagerUnmountBusy - - fileManagerUnmountBusyError - - fileManagerUnmountUnknown - - fileManagerUnmountUnknownError - - fileNoSuchFile - - fileNoSuchFileError - - fileReadCorruptFile - - fileReadCorruptFileError - - fileReadInapplicableStringEncoding - - fileReadInapplicableStringEncodingError - - fileReadInvalidFileName - - fileReadInvalidFileNameError - - fileReadNoPermission - - fileReadNoPermissionError - - fileReadNoSuchFile - - fileReadNoSuchFileError - - fileReadTooLarge - - fileReadTooLargeError - - fileReadUnknown - - fileReadUnknownError - - fileReadUnknownStringEncoding - - fileReadUnknownStringEncodingError - - fileReadUnsupportedScheme - - fileReadUnsupportedSchemeError - - fileWriteFileExists - - fileWriteFileExistsError - - fileWriteInapplicableStringEncoding - - fileWriteInapplicableStringEncodingError - - fileWriteInvalidFileName - - fileWriteInvalidFileNameError - - fileWriteNoPermission - - fileWriteNoPermissionError - - fileWriteOutOfSpace - - fileWriteOutOfSpaceError - - fileWriteUnknown - - fileWriteUnknownError - - fileWriteUnsupportedScheme - - fileWriteUnsupportedSchemeError - - fileWriteVolumeReadOnly - - fileWriteVolumeReadOnlyError - - formatting - - formattingError - - init(rawValue:) - - keyValueValidation - - keyValueValidationError - - propertyListReadCorrupt - - propertyListReadCorruptError - - propertyListReadStream - - propertyListReadStreamError - - propertyListReadUnknownVersion - - propertyListReadUnknownVersionError - - propertyListWriteInvalid - - propertyListWriteInvalidError - - propertyListWriteStream - - propertyListWriteStreamError - - rawValue - - ubiquitousFileNotUploadedDueToQuota - - ubiquitousFileNotUploadedDueToQuotaError - - ubiquitousFileUbiquityServerNotAvailable - - ubiquitousFileUnavailable - - ubiquitousFileUnavailableError - - userActivityConnectionUnavailable - - userActivityConnectionUnavailableError - - userActivityHandoffFailed - - userActivityHandoffFailedError - - userActivityHandoffUserInfoTooLarge - - userActivityHandoffUserInfoTooLargeError - - userActivityRemoteApplicationTimedOut - - userActivityRemoteApplicationTimedOutError - - userCancelled - - userCancelledError - - xpcConnectionInterrupted - - xpcConnectionInvalid - - xpcConnectionReplyInvalid - - coderInvalidValue - - coderReadCorrupt - - coderReadCorruptError - - coderValueNotFound - - coderValueNotFoundError - - error(_:userInfo:url:) - - errorDomain - - executableArchitectureMismatch - - executableArchitectureMismatchError - - executableLink - - executableLinkError - - executableLoad - - executableLoadError - - executableNotLoadable - - executableNotLoadableError - - executableRuntimeMismatch - - executableRuntimeMismatchError - - featureUnsupported - - featureUnsupportedError - - fileLocking - - fileLockingError - - fileManagerUnmountBusy - - fileManagerUnmountBusyError - - fileManagerUnmountUnknown - - fileManagerUnmountUnknownError - - fileNoSuchFile - - fileNoSuchFileError - - filePath - - fileReadCorruptFile - - fileReadCorruptFileError - - fileReadInapplicableStringEncoding - - fileReadInapplicableStringEncodingError - - fileReadInvalidFileName - - fileReadInvalidFileNameError - - fileReadNoPermission - - fileReadNoPermissionError - - fileReadNoSuchFile - - fileReadNoSuchFileError - - fileReadTooLarge - - fileReadTooLargeError - - fileReadUnknown - - fileReadUnknownError - - fileReadUnknownStringEncoding - - fileReadUnknownStringEncodingError - - fileReadUnsupportedScheme - - fileReadUnsupportedSchemeError - - fileWriteFileExists - - fileWriteFileExistsError - - fileWriteInapplicableStringEncoding - - fileWriteInapplicableStringEncodingError - - fileWriteInvalidFileName - - fileWriteInvalidFileNameError - - fileWriteNoPermission - - fileWriteNoPermissionError - - fileWriteOutOfSpace - - fileWriteOutOfSpaceError - - fileWriteUnknown - - fileWriteUnknownError - - fileWriteUnsupportedScheme - - fileWriteUnsupportedSchemeError - - fileWriteVolumeReadOnly - - fileWriteVolumeReadOnlyError - - formatting - - formattingError - - hashValue - - isCoderError - - isExecutableError - - isFileError - - isFormattingError - - isPropertyListError - - isUbiquitousFileError - - isUserActivityError - - isValidationError - - isXPCConnectionError - - keyValueValidation - - keyValueValidationError - - propertyListReadCorrupt - - propertyListReadCorruptError - - propertyListReadStream - - propertyListReadStreamError - - propertyListReadUnknownVersion - - propertyListReadUnknownVersionError - - propertyListWriteInvalid - - propertyListWriteInvalidError - - propertyListWriteStream - - propertyListWriteStreamError - - stringEncoding - - ubiquitousFileNotUploadedDueToQuota - - ubiquitousFileNotUploadedDueToQuotaError - - ubiquitousFileUbiquityServerNotAvailable - - ubiquitousFileUnavailable - - ubiquitousFileUnavailableError - - underlying - - url - - userActivityConnectionUnavailable - - userActivityConnectionUnavailableError - - userActivityHandoffFailed - - userActivityHandoffFailedError - - userActivityHandoffUserInfoTooLarge - - userActivityHandoffUserInfoTooLargeError - - userActivityRemoteApplicationTimedOut - - userActivityRemoteApplicationTimedOutError - - userCancelled - - userCancelledError - - xpcConnectionInterrupted - - xpcConnectionInvalid - - xpcConnectionReplyInvalid - - CollectionDifference - - CollectionOfOne @done - - withUnsafeBytes(_:) - - Comparator @done - - ComparisonResult @done - - RawValue - - init(rawValue:) - - orderedAscending - - orderedDescending - - orderedSame - - rawValue - - ContiguousArray @done - - Regions - - regions - - ContiguousBytes @done - - withUnsafeBytes(_:) - - CustomNSError @done - - errorCode - - errorCode - - errorCode - - errorDomain - - errorDomain - - errorUserInfo - - errorUserInfo - - Data @done - - ==(_:_:) - - Base64DecodingOptions - - Base64EncodingOptions - - Deallocator - - custom - - free - - none - - unmap - - virtualMemory - - Element - - Index - - Indices - - Iterator - - Element - - next() - - ReadingOptions - - ReferenceType - - Regions - - SearchOptions - - SubSequence - - WritingOptions - - advanced(by:) - - append(_:) - - append(_:) - - append(_:count:) - - append(contentsOf:) - - append(contentsOf:) - - base64EncodedData(options:) - - Foundation.Data.Base64EncodingOptions - - base64EncodedString(options:) - - Foundation.Data.Base64EncodingOptions - - copyBytes(to:count:) - - copyBytes(to:from:) - - copyBytes(to:from:) - - count - - customMirror - - debugDescription - - description - - encode(to:) - - endIndex - - Foundation.Data.Index - - enumerateBytes(_:) - - hash(into:) - - hashValue - - index(after:) - - Foundation.Data.Index - - Foundation.Data.Index - - index(before:) - - Foundation.Data.Index - - Foundation.Data.Index - - indices - - init() - - init(_:) - - init(base64Encoded:options:) - - Foundation.Data.Base64DecodingOptions - - init(base64Encoded:options:) - - Foundation.Data.Base64DecodingOptions - - init(buffer:) - - init(buffer:) - - init(bytes:) - - init(bytes:count:) - - init(bytesNoCopy:count:deallocator:) - - init(capacity:) - - init(contentsOf:options:) - - Foundation.Data.ReadingOptions - - init(count:) - - init(from:) - - init(referencing:) - - init(repeating:count:) - - makeIterator() - - range(of:options:in:) - - Foundation.Data.SearchOptions - - regions - - replaceSubrange(_:with:) - - replaceSubrange(_:with:) - - replaceSubrange(_:with:) - - replaceSubrange(_:with:count:) - - reserveCapacity(_:) - - resetBytes(in:) - - startIndex - - Foundation.Data.Index - - subdata(in:) - - subscript(_:) - - Foundation.Data.Index - - subscript(_:) - - subscript(_:) - - withUnsafeBytes(_:) - - withUnsafeBytes(_:) - - withUnsafeMutableBytes(_:) - - withUnsafeMutableBytes(_:) - - write(to:options:) - - Foundation.Data.WritingOptions - - DataProtocol @done - - Regions - - copyBytes(to:) - - copyBytes(to:) - - copyBytes(to:count:) - - copyBytes(to:count:) - - copyBytes(to:count:) - - copyBytes(to:count:) - - copyBytes(to:from:) - - copyBytes(to:from:) - - copyBytes(to:from:) - - copyBytes(to:from:) - - copyBytes(to:from:) - - firstRange(of:) - - firstRange(of:in:) - - firstRange(of:in:) - - lastRange(of:) - - lastRange(of:in:) - - lastRange(of:in:) - - regions - - Date @done - - +(_:_:) - - Foundation.TimeInterval - - +=(_:_:) - - Foundation.TimeInterval - - -(_:_:) - - Foundation.TimeInterval - - -=(_:_:) - - Foundation.TimeInterval - - <(_:_:) - - ==(_:_:) - - >(_:_:) - - ReferenceType - - Stride - - Foundation.TimeInterval - - addTimeInterval(_:) - - Foundation.TimeInterval - - addingTimeInterval(_:) - - Foundation.TimeInterval - - advanced(by:) - - Foundation.TimeInterval - - compare(_:) - - customMirror - - customPlaygroundQuickLook - - Swift.PlaygroundQuickLook - - debugDescription - - description - - description(with:) - - distance(to:) - - Foundation.TimeInterval - - distantFuture - - distantPast - - encode(to:) - - hash(into:) - - hashValue - - init() - - init(from:) - - init(timeInterval:since:) - - Foundation.TimeInterval - - init(timeIntervalSince1970:) - - Foundation.TimeInterval - - init(timeIntervalSinceNow:) - - Foundation.TimeInterval - - init(timeIntervalSinceReferenceDate:) - - Foundation.TimeInterval - - timeIntervalBetween1970AndReferenceDate - - Foundation.TimeInterval - - timeIntervalSince(_:) - - Foundation.TimeInterval - - timeIntervalSince1970 - - Foundation.TimeInterval - - timeIntervalSinceNow - - Foundation.TimeInterval - - timeIntervalSinceReferenceDate - - Foundation.TimeInterval - - timeIntervalSinceReferenceDate - - Foundation.TimeInterval - - DateComponents @done - - ==(_:_:) - - ReferenceType - - calendar - - customMirror - - date - - day - - debugDescription - - description - - encode(to:) - - era - - hash(into:) - - hashValue - - hour - - init(calendar:timeZone:era:year:month:day:hour:minute:second:nanosecond:weekday:weekdayOrdinal:quarter:weekOfMonth:weekOfYear:yearForWeekOfYear:) - - init(from:) - - isLeapMonth - - isValidDate - - isValidDate(in:) - - minute - - month - - nanosecond - - quarter - - second - - setValue(_:for:) - - timeZone - - value(for:) - - weekOfMonth - - weekOfYear - - weekday - - weekdayOrdinal - - year - - yearForWeekOfYear - - DateComponentsFormatter @done - - UnitsStyle - - RawValue - - abbreviated - - brief - - full - - init(rawValue:) - - positional - - rawValue - - short - - spellOut - - ZeroFormattingBehavior - - ArrayLiteralElement - - Element - - RawValue - - default - - dropAll - - dropLeading - - dropMiddle - - dropTrailing - - init(rawValue:) - - pad - - rawValue - - allowedUnits - - allowsFractionalUnits - - calendar - - collapsesLargestUnit - - formattingContext - - getObjectValue(_:for:errorDescription:) - - includesApproximationPhrase - - includesTimeRemainingPhrase - - init() - - localizedString(from:unitsStyle:) - - maximumUnitCount - - referenceDate - - string(for:) - - string(from:) - - string(from:) - - Foundation.TimeInterval - - string(from:to:) - - unitsStyle - - zeroFormattingBehavior - - DateFormatter @done - - Behavior - - RawValue - - behavior10_0 - - behavior10_4 - - default - - init(rawValue:) - - rawValue - - Style - - RawValue - - full - - init(rawValue:) - - long - - medium - - none - - rawValue - - short - - amSymbol - - calendar - - date(from:) - - dateFormat - - dateFormat(fromTemplate:options:locale:) - - dateStyle - - defaultDate - - defaultFormatterBehavior - - doesRelativeDateFormatting - - eraSymbols - - formatterBehavior - - formattingContext - - generatesCalendarDates - - getObjectValue(_:for:range:) - - gregorianStartDate - - init() - - isLenient - - locale - - localizedString(from:dateStyle:timeStyle:) - - longEraSymbols - - monthSymbols - - pmSymbol - - quarterSymbols - - setLocalizedDateFormatFromTemplate(_:) - - Swift.Void - - shortMonthSymbols - - shortQuarterSymbols - - shortStandaloneMonthSymbols - - shortStandaloneQuarterSymbols - - shortStandaloneWeekdaySymbols - - shortWeekdaySymbols - - standaloneMonthSymbols - - standaloneQuarterSymbols - - standaloneWeekdaySymbols - - string(from:) - - timeStyle - - timeZone - - twoDigitStartDate - - veryShortMonthSymbols - - veryShortStandaloneMonthSymbols - - veryShortStandaloneWeekdaySymbols - - veryShortWeekdaySymbols - - weekdaySymbols - - DateInterval @done - - <(_:_:) - - ==(_:_:) - - ReferenceType - - compare(_:) - - contains(_:) - - customMirror - - debugDescription - - description - - duration - - Foundation.TimeInterval - - encode(to:) - - end - - hash(into:) - - hashValue - - init() - - init(from:) - - init(start:duration:) - - Foundation.TimeInterval - - init(start:end:) - - intersection(with:) - - intersects(_:) - - start - - DateIntervalFormatter @done - - Style - - RawValue - - full - - init(rawValue:) - - long - - medium - - none - - rawValue - - short - - calendar - - dateStyle - - dateTemplate - - init() - - locale - - string(from:) - - string(from:to:) - - timeStyle - - timeZone - - Decimal @done - - *(_:_:) - - *=(_:_:) - - +(_:_:) - - +=(_:_:) - - -(_:_:) - - -=(_:_:) - - /(_:_:) - - /=(_:_:) - - <(_:_:) - - ==(_:_:) - - CalculationError - - FloatLiteralType - - IntegerLiteralType - - Magnitude - - RoundingMode - - Stride - - advanced(by:) - - description - - distance(to:) - - encode(to:) - - exponent - - floatingPointClass - - greatestFiniteMagnitude - - hash(into:) - - hashValue - - init() - - init(_:) - - init(_:) - - init(_:) - - init(_:) - - init(_:) - - init(_:) - - init(_:) - - init(_:) - - init(_:) - - init(_:) - - init(_:) - - init(_exponent:_length:_isNegative:_isCompact:_reserved:_mantissa:) - - init(exactly:) - - init(floatLiteral:) - - init(from:) - - init(integerLiteral:) - - init(sign:exponent:significand:) - - init(signOf:magnitudeOf:) - - init(string:locale:) - - isCanonical - - isEqual(to:) - - isFinite - - isInfinite - - isLess(than:) - - isLessThanOrEqualTo(_:) - - isNaN - - isNormal - - isSignMinus - - isSignaling - - isSignalingNaN - - isSubnormal - - isTotallyOrdered(belowOrEqualTo:) - - isZero - - leastFiniteMagnitude - - leastNonzeroMagnitude - - leastNormalMagnitude - - magnitude - - nan - - negate() - - nextDown - - nextUp - - pi - - quietNaN - - radix - - sign - - significand - - ulp - - DecodingError @done - - Dimension @done @partiallySupported @dimensionAndUnitHaveSelfConstraints - - baseUnit() - - converter - - init(symbol:) - - init(symbol:converter:) - - DispatchData @done - - Region - - Element - - Index - - Dispatch.DispatchData.Index - - Indices - - Iterator - - Regions - - SubSequence - - endIndex - - Dispatch.DispatchData.Index - - regions - - startIndex - - Dispatch.DispatchData.Index - - subscript(_:) - - Dispatch.DispatchData.Index - - withUnsafeBytes(_:) - - Regions - - regions - - DistributedNotificationCenter @done @unsupported @requiresOSSupport - - CenterType - - RawValue - - _ObjectiveCType - - init(_:) - - init(rawValue:) - - localNotificationCenterType - - rawValue - - Options - - ArrayLiteralElement - - Element - - RawValue - - deliverImmediately - - init(rawValue:) - - postToAllSessions - - rawValue - - SuspensionBehavior - - RawValue - - coalesce - - deliverImmediately - - drop - - hold - - init(rawValue:) - - rawValue - - addObserver(_:selector:name:object:) - - Swift.Void - - addObserver(_:selector:name:object:suspensionBehavior:) - - Swift.Void - - default() - - forType(_:) - - init() - - post(name:object:) - - Swift.Void - - post(name:object:userInfo:) - - Swift.Void - - postNotificationName(_:object:userInfo:deliverImmediately:) - - Swift.Void - - postNotificationName(_:object:userInfo:options:) - - Swift.Void - - removeObserver(_:name:object:) - - Swift.Void - - suspended - - Double @done - - init(_:) - - init(exactly:) - - init(truncating:) - - EmptyCollection @done - - Regions - - regions - - withUnsafeBytes(_:) - - EncodingError @done - - EnergyFormatter @done - - Unit - - RawValue - - calorie - - init(rawValue:) - - joule - - kilocalorie - - kilojoule - - rawValue - - getObjectValue(_:for:errorDescription:) - - init() - - isForFoodEnergyUse - - numberFormatter - - string(fromJoules:) - - string(fromValue:unit:) - - unitString(fromJoules:usedUnit:) - - unitString(fromValue:unit:) - - unitStyle - - Error @done - - localizedDescription - - ErrorPointer @done - - Foundation.NSErrorPointer - - ErrorUserInfoKey @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSURLErrorKey - - RawValue - - filePathErrorKey - - helpAnchorErrorKey - - init(rawValue:) - - localizedDescriptionKey - - localizedFailureReasonErrorKey - - localizedRecoveryOptionsErrorKey - - localizedRecoverySuggestionErrorKey - - rawValue - - recoveryAttempterErrorKey - - stringEncodingErrorKey - - underlyingErrorKey - - FileAttributeKey @done - - RawValue - - _ObjectiveCType - - appendOnly - - busy - - creationDate - - deviceIdentifier - - extensionHidden - - groupOwnerAccountID - - groupOwnerAccountName - - hfsCreatorCode - - hfsTypeCode - - immutable - - init(_:) - - init(rawValue:) - - modificationDate - - ownerAccountID - - ownerAccountName - - posixPermissions - - rawValue - - referenceCount - - size - - systemFileNumber - - systemFreeNodes - - systemFreeSize - - systemNodes - - systemNumber - - systemSize - - type - - FileAttributeType @done - - RawValue - - _ObjectiveCType - - init(rawValue:) - - rawValue - - typeBlockSpecial - - typeCharacterSpecial - - typeDirectory - - typeRegular - - typeSocket - - typeSymbolicLink - - typeUnknown - - FileHandle @done - - acceptConnectionInBackgroundAndNotify() - - Swift.Void - - acceptConnectionInBackgroundAndNotify(forModes:) - - Swift.Void - - availableData - - close() - - closeFile() - - Swift.Void - - fileDescriptor - - init() - - init(coder:) - - init(fileDescriptor:) - - init(fileDescriptor:closeOnDealloc:) - - init(forReadingAtPath:) - - init(forReadingFrom:) - - init(forUpdating:) - - init(forUpdatingAtPath:) - - init(forWritingAtPath:) - - init(forWritingTo:) - - nullDevice - - offsetInFile - - readCompletionNotification - - readData(ofLength:) - - readDataToEndOfFile() - - readInBackgroundAndNotify() - - Swift.Void - - readInBackgroundAndNotify(forModes:) - - Swift.Void - - readToEndOfFileInBackgroundAndNotify() - - Swift.Void - - readToEndOfFileInBackgroundAndNotify(forModes:) - - Swift.Void - - readabilityHandler - - seek(toFileOffset:) - - Swift.Void - - seek(toOffset:) - - seekToEndOfFile() - - standardError - - standardInput - - standardOutput - - synchronize() - - synchronizeFile() - - Swift.Void - - truncate(atOffset:) - - truncateFile(atOffset:) - - Swift.Void - - waitForDataInBackgroundAndNotify() - - Swift.Void - - waitForDataInBackgroundAndNotify(forModes:) - - Swift.Void - - write(_:) - - Swift.Void - - writeabilityHandler - - FileManager - - DirectoryEnumerationOptions - - ArrayLiteralElement @done - - Element @done - - RawValue @done - - includesDirectoriesPostOrder - - init(rawValue:) @done - - producesRelativePathURLs - - rawValue @done - - skipsHiddenFiles @done - - skipsPackageDescendants @done - - skipsSubdirectoryDescendants @done - - DirectoryEnumerator - - directoryAttributes @done - - fileAttributes @done - - init() @done - - isEnumeratingDirectoryPostOrder - - level @done - - skipDescendants() @done - - Swift.Void - - skipDescendents() @done - - Swift.Void - - ItemReplacementOptions @done - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - rawValue - - usingNewMetadataOnly - - withoutDeletingBackupItem - - SearchPathDirectory @done - - RawValue - - adminApplicationDirectory - - allApplicationsDirectory - - allLibrariesDirectory - - applicationDirectory - - applicationScriptsDirectory - - applicationSupportDirectory - - autosavedInformationDirectory - - cachesDirectory - - coreServiceDirectory - - demoApplicationDirectory - - desktopDirectory - - developerApplicationDirectory - - developerDirectory - - documentDirectory - - documentationDirectory - - downloadsDirectory - - init(rawValue:) - - inputMethodsDirectory - - itemReplacementDirectory - - libraryDirectory - - moviesDirectory - - musicDirectory - - picturesDirectory - - preferencePanesDirectory - - printerDescriptionDirectory - - rawValue - - sharedPublicDirectory - - trashDirectory - - userDirectory - - SearchPathDomainMask @done - - ArrayLiteralElement - - Element - - RawValue - - allDomainsMask - - init(rawValue:) - - localDomainMask - - networkDomainMask - - rawValue - - systemDomainMask - - userDomainMask - - URLRelationship @done - - RawValue - - contains - - init(rawValue:) - - other - - rawValue - - same - - UnmountOptions - - ArrayLiteralElement - - Element - - RawValue - - allPartitionsAndEjectDisk - - init(rawValue:) - - rawValue - - withoutUI - - VolumeEnumerationOptions @done - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - produceFileReferenceURLs - - rawValue - - skipHiddenVolumes - - attributesOfFileSystem(forPath:) @done - - attributesOfItem(atPath:) @done - - changeCurrentDirectoryPath(_:) @done - - componentsToDisplay(forPath:) @done - - containerURL(forSecurityApplicationGroupIdentifier:) @unsupported @requiresOSSupport - - contents(atPath:) @done - - contentsEqual(atPath:andPath:) @done - - contentsOfDirectory(at:includingPropertiesForKeys:options:) @done - - contentsOfDirectory(atPath:) @done - - copyItem(at:to:) @done - - copyItem(atPath:toPath:) @done - - createDirectory(at:withIntermediateDirectories:attributes:) @done - - createDirectory(atPath:withIntermediateDirectories:attributes:) @done - - createFile(atPath:contents:attributes:) @done - - createSymbolicLink(at:withDestinationURL:) @done - - createSymbolicLink(atPath:withDestinationPath:) @done - - currentDirectoryPath @done - - default @done - - delegate @done - - destinationOfSymbolicLink(atPath:) @done - - displayName(atPath:) @done - - enumerator(at:includingPropertiesForKeys:options:errorHandler:) @done - - enumerator(atPath:) @done - - evictUbiquitousItem(at:) @unsupported @requiresOSSupport - - fileExists(atPath:) @done - - fileExists(atPath:isDirectory:) @done - - fileSystemRepresentation(withPath:) @done - - getFileProviderServicesForItem(at:completionHandler:) @unsupported @requiresOSSupport - - Swift.Void - - getRelationship(_:of:in:toItemAt:) @done - - getRelationship(_:ofDirectoryAt:toItemAt:) @done - - homeDirectory(forUser:) @done - - homeDirectoryForCurrentUser @done - - init() @done - - isDeletableFile(atPath:) @done - - isExecutableFile(atPath:) @done - - isReadableFile(atPath:) @done - - isUbiquitousItem(at:) @unsupported @requiresOSSupport - - isWritableFile(atPath:) @done - - linkItem(at:to:) @done - - linkItem(atPath:toPath:) @done - - mountedVolumeURLs(includingResourceValuesForKeys:options:) @done - - moveItem(at:to:) @done - - moveItem(atPath:toPath:) @done - - removeItem(at:) @done - - removeItem(atPath:) @done - - replaceItem(at:withItemAt:backupItemName:options:resultingItemURL:) @done - - replaceItemAt(_:withItemAt:backupItemName:options:) @done - - replaceItemAtURL(originalItemURL:withItemAtURL:backupItemName:options:) @done - - setAttributes(_:ofItemAtPath:) @done - - setUbiquitous(_:itemAt:destinationURL:) @unsupported @requiresOSSupport - - startDownloadingUbiquitousItem(at:) @unsupported @requiresOSSupport - - string(withFileSystemRepresentation:length:) @done - - subpaths(atPath:) @done - - subpathsOfDirectory(atPath:) @done - - temporaryDirectory @done - - trashItem(at:resultingItemURL:) - - ubiquityIdentityToken @unsupported @requiresOSSupport - - unmountVolume(at:options:completionHandler:) - - Swift.Void - - url(for:in:appropriateFor:create:) @done - - url(forPublishingUbiquitousItemAt:expiration:) @unsupported @requiresOSSupport - - url(forUbiquityContainerIdentifier:) @unsupported @requiresOSSupport - - urls(for:in:) @done - - FileManagerDelegate @done - - fileManager(_:shouldCopyItemAt:to:) - - fileManager(_:shouldCopyItemAtPath:toPath:) - - fileManager(_:shouldLinkItemAt:to:) - - fileManager(_:shouldLinkItemAtPath:toPath:) - - fileManager(_:shouldMoveItemAt:to:) - - fileManager(_:shouldMoveItemAtPath:toPath:) - - fileManager(_:shouldProceedAfterError:copyingItemAt:to:) - - fileManager(_:shouldProceedAfterError:copyingItemAtPath:toPath:) - - fileManager(_:shouldProceedAfterError:linkingItemAt:to:) - - fileManager(_:shouldProceedAfterError:linkingItemAtPath:toPath:) - - fileManager(_:shouldProceedAfterError:movingItemAt:to:) - - fileManager(_:shouldProceedAfterError:movingItemAtPath:toPath:) - - fileManager(_:shouldProceedAfterError:removingItemAt:) - - fileManager(_:shouldProceedAfterError:removingItemAtPath:) - - fileManager(_:shouldRemoveItemAt:) - - fileManager(_:shouldRemoveItemAtPath:) - - FileProtectionType - - RawValue - - _ObjectiveCType - - init(rawValue:) - - rawValue - - FileWrapper - - ReadingOptions - - ArrayLiteralElement - - Element - - RawValue - - immediate - - init(rawValue:) - - rawValue - - withoutMapping - - WritingOptions - - ArrayLiteralElement - - Element - - RawValue - - atomic - - init(rawValue:) - - rawValue - - withNameUpdating - - addFile(withPath:) - - addFileWrapper(_:) - - addRegularFile(withContents:preferredFilename:) - - addSymbolicLink(withDestination:preferredFilename:) - - fileAttributes - - fileWrappers - - filename - - init() - - init(coder:) - - init(directoryWithFileWrappers:) - - init(path:) - - init(regularFileWithContents:) - - init(serializedRepresentation:) - - init(symbolicLinkWithDestination:) - - init(symbolicLinkWithDestinationURL:) - - init(url:options:) - - isDirectory - - isRegularFile - - isSymbolicLink - - keyForChildFileWrapper(_:) - - matchesContents(of:) - - needsToBeUpdated(fromPath:) - - preferredFilename - - read(from:options:) - - regularFileContents - - removeFileWrapper(_:) - - Swift.Void - - serializedRepresentation - - symbolicLinkDestination() - - symbolicLinkDestinationURL - - update(fromPath:) - - write(to:options:originalContentsURL:) - - write(toFile:atomically:updateFilenames:) - - Float @done - - init(_:) - - init(exactly:) - - init(truncating:) - - Formatter @done - - Context - - RawValue - - beginningOfSentence - - dynamic - - init(rawValue:) - - listItem - - middleOfSentence - - rawValue - - standalone - - unknown - - UnitStyle - - RawValue - - init(rawValue:) - - long - - medium - - rawValue - - short - - attributedString(for:withDefaultAttributes:) - - editingString(for:) - - getObjectValue(_:for:errorDescription:) @done @unsupported @autoreleasedByReferencePointersNotAvailable - - init() - - isPartialStringValid(_:newEditingString:errorDescription:) - - isPartialStringValid(_:proposedSelectedRange:originalString:originalSelectedRange:errorDescription:) - - Foundation.NSRange - - string(for:) - - HTTPCookie @done - - AcceptPolicy - - RawValue - - always - - init(rawValue:) - - never - - onlyFromMainDocumentDomain - - rawValue - - comment - - commentURL - - cookies(withResponseHeaderFields:for:) - - domain - - expiresDate - - init() - - init(properties:) - - isHTTPOnly - - isSecure - - isSessionOnly - - name - - path - - portList - - properties - - requestHeaderFields(with:) - - sameSitePolicy - - value - - version - - HTTPCookiePropertyKey - - RawValue @done - - _ObjectiveCType @done - - comment @done - - commentURL @done - - discard @done - - domain @done - - expires @done - - init(_:) @done - - init(rawValue:) @done - - maximumAge @done - - name @done - - originURL @done - - path @done - - port @done - - rawValue @done - - sameSitePolicy - - secure @done - - value @done - - version @done - - HTTPCookieStorage @done - - cookieAcceptPolicy - - cookies - - cookies(for:) - - deleteCookie(_:) - - Swift.Void - - getCookiesFor(_:completionHandler:) - - Swift.Void - - init() - - removeCookies(since:) - - Swift.Void - - setCookie(_:) - - Swift.Void - - setCookies(_:for:mainDocumentURL:) - - Swift.Void - - shared - - sharedCookieStorage(forGroupContainerIdentifier:) - - sortedCookies(using:) - - storeCookies(_:for:) - - Swift.Void - - HTTPCookieStringPolicy - - RawValue - - _ObjectiveCType - - init(rawValue:) - - rawValue - - sameSiteLax - - sameSiteStrict - - HTTPURLResponse @done - - allHeaderFields - - init() - - init(url:mimeType:expectedContentLength:textEncodingName:) - - init(url:statusCode:httpVersion:headerFields:) - - localizedString(forStatusCode:) - - statusCode - - value(forHTTPHeaderField:) - - Host @done - - address - - addresses - - current() - - init() - - init(address:) - - init(name:) - - isEqual(to:) - - localizedName - - name - - names - - ISO8601DateFormatter @done - - Options - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - rawValue - - withColonSeparatorInTime - - withColonSeparatorInTimeZone - - withDashSeparatorInDate - - withDay - - withFractionalSeconds - - withFullDate - - withFullTime - - withInternetDateTime - - withMonth - - withSpaceBetweenDateAndTime - - withTime - - withTimeZone - - withWeekOfYear - - withYear - - date(from:) - - formatOptions - - init() - - string(from:) - - string(from:timeZone:formatOptions:) - - timeZone - - IndexPath @done - - +(_:_:) - - +=(_:_:) - - <(_:_:) - - <=(_:_:) - - ==(_:_:) - - >(_:_:) - - >=(_:_:) - - ArrayLiteralElement - - Foundation.IndexPath.Element - - Element - - Index - - Swift.Array.Index - - Indices - - Iterator - - ReferenceType - - SubSequence - - append(_:) - - append(_:) - - Foundation.IndexPath.Element - - append(_:) - - appending(_:) - - Foundation.IndexPath.Element - - appending(_:) - - appending(_:) - - compare(_:) - - count - - customMirror - - debugDescription - - description - - dropLast() - - encode(to:) - - endIndex - - Foundation.IndexPath.Index - - Swift.Array.Index - - hash(into:) - - hashValue - - index(after:) - - Foundation.IndexPath.Index - - Swift.Array.Index - - Foundation.IndexPath.Index - - Swift.Array.Index - - index(before:) - - Foundation.IndexPath.Index - - Swift.Array.Index - - Foundation.IndexPath.Index - - Swift.Array.Index - - init() - - init(arrayLiteral:) - - init(from:) - - init(index:) - - Foundation.IndexPath.Element - - init(indexes:) - - init(indexes:) - - makeIterator() - - startIndex - - Foundation.IndexPath.Index - - Swift.Array.Index - - subscript(_:) - - Foundation.IndexPath.Element - - Foundation.IndexPath.Index - - Swift.Array.Index - - subscript(_:) - - IndexSet @done - - ==(_:_:) - - ArrayLiteralElement - - Foundation.IndexSet.Element - - Element - - Index - - <(_:_:) - - <=(_:_:) - - ==(_:_:) - - >(_:_:) - - >=(_:_:) - - description - - Indices - - Iterator - - RangeView - - ==(_:_:) - - Element - - Index - - Indices - - Iterator - - SubSequence - - endIndex - - Foundation.IndexSet.RangeView.Index - - index(after:) - - Foundation.IndexSet.RangeView.Index - - Foundation.IndexSet.RangeView.Index - - index(before:) - - Foundation.IndexSet.RangeView.Index - - Foundation.IndexSet.RangeView.Index - - makeIterator() - - startIndex - - Foundation.IndexSet.RangeView.Index - - subscript(_:) - - Foundation.IndexSet.RangeView.Index - - subscript(_:) - - ReferenceType - - SubSequence - - contains(_:) - - Foundation.IndexSet.Element - - contains(integersIn:) - - contains(integersIn:) - - contains(integersIn:) - - count - - count(in:) - - count(in:) - - customMirror - - debugDescription - - description - - encode(to:) - - endIndex - - filteredIndexSet(in:includeInteger:) - - filteredIndexSet(in:includeInteger:) - - filteredIndexSet(includeInteger:) - - first - - formIndex(after:) - - formIndex(before:) - - formIntersection(_:) - - formSymmetricDifference(_:) - - formUnion(_:) - - hash(into:) - - hashValue - - index(after:) - - index(before:) - - indexRange(in:) - - indexRange(in:) - - init() - - init(from:) - - init(integer:) - - Foundation.IndexSet.Element - - init(integersIn:) - - init(integersIn:) - - insert(_:) - - Foundation.IndexSet.Element - - insert(integersIn:) - - insert(integersIn:) - - integerGreaterThan(_:) - - Foundation.IndexSet.Element - - integerGreaterThanOrEqualTo(_:) - - Foundation.IndexSet.Element - - integerLessThan(_:) - - Foundation.IndexSet.Element - - integerLessThanOrEqualTo(_:) - - Foundation.IndexSet.Element - - intersection(_:) - - intersects(integersIn:) - - intersects(integersIn:) - - isEmpty - - last - - makeIterator() - - rangeView - - rangeView(of:) - - rangeView(of:) - - remove(_:) - - Foundation.IndexSet.Element - - remove(integersIn:) - - remove(integersIn:) - - removeAll() - - shift(startingAt:by:) - - Foundation.IndexSet.Element - - startIndex - - subscript(_:) - - Foundation.IndexSet.Element - - subscript(_:) - - symmetricDifference(_:) - - union(_:) - - update(with:) - - Foundation.IndexSet.Element - - InputStream @done - - getBuffer(_:length:) - - hasBytesAvailable - - init() - - init(data:) - - init(fileAtPath:) - - init(url:) - - read(_:maxLength:) - - Int @done - - init(_:) - - init(exactly:) - - init(truncating:) - - Int16 @done - - init(_:) - - init(exactly:) - - init(truncating:) - - Int32 @done - - init(_:) - - init(exactly:) - - init(truncating:) - - Int64 @done - - init(_:) - - init(exactly:) - - init(truncating:) - - Int8 @done - - init(_:) - - init(exactly:) - - init(truncating:) - - JSONDecoder @done - - DataDecodingStrategy - - base64 - - custom - - deferredToData - - DateDecodingStrategy - - custom - - deferredToDate - - formatted - - iso8601 - - millisecondsSince1970 - - secondsSince1970 - - Input - - KeyDecodingStrategy - - convertFromSnakeCase - - custom - - useDefaultKeys - - NonConformingFloatDecodingStrategy - - convertFromString - - throw - - dataDecodingStrategy - - dateDecodingStrategy - - decode(_:from:) - - init() - - keyDecodingStrategy - - nonConformingFloatDecodingStrategy - - userInfo - - JSONEncoder @done - - DataEncodingStrategy - - base64 - - custom - - deferredToData - - DateEncodingStrategy - - custom - - deferredToDate - - formatted - - iso8601 - - millisecondsSince1970 - - secondsSince1970 - - KeyEncodingStrategy - - convertToSnakeCase - - custom - - useDefaultKeys - - NonConformingFloatEncodingStrategy - - convertToString - - throw - - Output - - OutputFormatting - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - prettyPrinted - - rawValue - - sortedKeys - - withoutEscapingSlashes - - dataEncodingStrategy - - dateEncodingStrategy - - encode(_:) - - init() - - keyEncodingStrategy - - nonConformingFloatEncodingStrategy - - outputFormatting - - userInfo - - JSONSerialization @done - - ReadingOptions - - ArrayLiteralElement - - Element - - RawValue - - allowFragments - - fragmentsAllowed - - init(rawValue:) - - mutableContainers - - mutableLeaves - - rawValue - - WritingOptions - - ArrayLiteralElement - - Element - - RawValue - - fragmentsAllowed - - init(rawValue:) - - prettyPrinted - - rawValue - - sortedKeys - - withoutEscapingSlashes - - data(withJSONObject:options:) - - init() - - isValidJSONObject(_:) - - jsonObject(with:options:) - - jsonObject(with:options:) - - writeJSONObject(_:to:options:error:) - - Foundation.NSErrorPointer - - LengthFormatter @done - - Unit - - RawValue - - centimeter - - foot - - inch - - init(rawValue:) - - kilometer - - meter - - mile - - millimeter - - rawValue - - yard - - getObjectValue(_:for:errorDescription:) - - init() - - isForPersonHeightUse - - numberFormatter - - string(fromMeters:) - - string(fromValue:unit:) - - unitString(fromMeters:usedUnit:) - - unitString(fromValue:unit:) - - unitStyle - - ListFormatter - - init() - - itemFormatter - - locale - - localizedString(byJoining:) - - string(for:) - - string(from:) - - Locale @done - - ==(_:_:) - - LanguageDirection - - ReferenceType - - alternateQuotationBeginDelimiter - - alternateQuotationEndDelimiter - - autoupdatingCurrent - - availableIdentifiers - - calendar - - canonicalIdentifier(from:) - - canonicalLanguageIdentifier(from:) - - characterDirection(forLanguage:) - - Foundation.Locale.LanguageDirection - - collationIdentifier - - collatorIdentifier - - commonISOCurrencyCodes - - components(fromIdentifier:) - - currencyCode - - currencySymbol - - current - - customMirror - - debugDescription - - decimalSeparator - - description - - encode(to:) - - exemplarCharacterSet - - groupingSeparator - - hash(into:) - - hashValue - - identifier - - identifier(fromComponents:) - - identifier(fromWindowsLocaleCode:) - - init(from:) - - init(identifier:) - - isoCurrencyCodes - - isoLanguageCodes - - isoRegionCodes - - languageCode - - lineDirection(forLanguage:) - - Foundation.Locale.LanguageDirection - - localizedString(for:) - - localizedString(forCollationIdentifier:) - - localizedString(forCollatorIdentifier:) - - localizedString(forCurrencyCode:) - - localizedString(forIdentifier:) - - localizedString(forLanguageCode:) - - localizedString(forRegionCode:) - - localizedString(forScriptCode:) - - localizedString(forVariantCode:) - - preferredLanguages - - quotationBeginDelimiter - - quotationEndDelimiter - - regionCode - - scriptCode - - usesMetricSystem - - variantCode - - windowsLocaleCode(fromIdentifier:) - - LocalizedError @done - - errorDescription - - errorDescription - - failureReason - - failureReason - - helpAnchor - - helpAnchor - - recoverySuggestion - - recoverySuggestion - - MachError @done @unsupported @requiresOSSupport - - Code - - aborted - - Foundation.MachError.Code - - alreadyInSet - - Foundation.MachError.Code - - alreadyWaiting - - Foundation.MachError.Code - - codesignError - - Foundation.MachError.Code - - defaultSet - - Foundation.MachError.Code - - errorDomain - - exceptionProtected - - Foundation.MachError.Code - - failure - - Foundation.MachError.Code - - hashValue - - invalidAddress - - Foundation.MachError.Code - - invalidArgument - - Foundation.MachError.Code - - invalidCapability - - Foundation.MachError.Code - - invalidHost - - Foundation.MachError.Code - - invalidLedger - - Foundation.MachError.Code - - invalidMemoryControl - - Foundation.MachError.Code - - invalidName - - Foundation.MachError.Code - - invalidObject - - Foundation.MachError.Code - - invalidPolicy - - Foundation.MachError.Code - - invalidProcessorSet - - Foundation.MachError.Code - - invalidRight - - Foundation.MachError.Code - - invalidSecurity - - Foundation.MachError.Code - - invalidTask - - Foundation.MachError.Code - - invalidValue - - Foundation.MachError.Code - - lockOwned - - Foundation.MachError.Code - - lockOwnedSelf - - Foundation.MachError.Code - - lockSetDestroyed - - Foundation.MachError.Code - - lockUnstable - - Foundation.MachError.Code - - memoryDataMoved - - Foundation.MachError.Code - - memoryError - - Foundation.MachError.Code - - memoryFailure - - Foundation.MachError.Code - - memoryPresent - - Foundation.MachError.Code - - memoryRestartCopy - - Foundation.MachError.Code - - nameExists - - Foundation.MachError.Code - - noAccess - - Foundation.MachError.Code - - noSpace - - Foundation.MachError.Code - - nodeDown - - Foundation.MachError.Code - - notDepressed - - Foundation.MachError.Code - - notInSet - - Foundation.MachError.Code - - notReceiver - - Foundation.MachError.Code - - notSupported - - Foundation.MachError.Code - - notWaiting - - Foundation.MachError.Code - - operationTimedOut - - Foundation.MachError.Code - - policyLimit - - Foundation.MachError.Code - - policyStatic - - Foundation.MachError.Code - - protectionFailure - - Foundation.MachError.Code - - resourceShortage - - Foundation.MachError.Code - - rightExists - - Foundation.MachError.Code - - rpcContinueOrphan - - Foundation.MachError.Code - - rpcServerTerminated - - Foundation.MachError.Code - - rpcTerminateOrphan - - Foundation.MachError.Code - - semaphoreDestroyed - - Foundation.MachError.Code - - success - - Foundation.MachError.Code - - terminated - - Foundation.MachError.Code - - userReferencesOverflow - - Foundation.MachError.Code - - MachErrorCode @done @unsupported @requiresOSSupport - - MassFormatter @done - - Unit - - RawValue - - gram - - init(rawValue:) - - kilogram - - ounce - - pound - - rawValue - - stone - - getObjectValue(_:for:errorDescription:) - - init() - - isForPersonMassUse - - numberFormatter - - string(fromKilograms:) - - string(fromValue:unit:) - - unitString(fromKilograms:usedUnit:) - - unitString(fromValue:unit:) - - unitStyle - - Measurement @done - - *(_:_:) - - *(_:_:) - - +(_:_:) - - +(_:_:) - - -(_:_:) - - -(_:_:) - - /(_:_:) - - /(_:_:) - - <(_:_:) - - ==(_:_:) - - ReferenceType - - convert(to:) - - converted(to:) - - customMirror - - debugDescription - - description - - encode(to:) - - hash(into:) - - hashValue - - init(from:) - - init(value:unit:) - - unit - - value - - MeasurementFormatter @done @unsupported @requiresICUSupport - - UnitOptions - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - naturalScale - - providedUnit - - rawValue - - temperatureWithoutUnit - - init() - - locale - - numberFormatter - - string(from:) - - string(from:) - - string(from:) - - unitOptions - - unitStyle - - MessagePort @done @unsupported @requiresOSSupport - - init() - - MutableDataProtocol @done - - resetBytes(in:) - - resetBytes(in:) - - MutableURLRequest @done - - NSASCIIStringEncoding @done - - NSAffineTransform @done - - append(_:) - - Swift.Void - - init() - - init(transform:) - - invert() - - Swift.Void - - prepend(_:) - - Swift.Void - - rotate(byDegrees:) - - Swift.Void - - rotate(byRadians:) - - Swift.Void - - scale(by:) - - Swift.Void - - scaleX(by:yBy:) - - Swift.Void - - transform(_:) - - Foundation.NSPoint - - Foundation.NSPoint - - transform(_:) - - Foundation.NSSize - - Foundation.NSSize - - transformStruct - - translateX(by:yBy:) - - Swift.Void - - NSAffineTransformStruct @done - - init() - - init(m11:m12:m21:m22:tX:tY:) - - NSAllHashTableObjects(_:) - - NSAllMapTableKeys(_:) - - NSAllMapTableValues(_:) - - NSAllocateMemoryPages(_:) @done @unsupported @useSwiftForMemoryManagement - - NSAppleEventDescriptor @done @unsupported @requiresOSSupport - - SendOptions - - ArrayLiteralElement - - Element - - RawValue - - alwaysInteract - - canInteract - - canSwitchLayer - - defaultOptions - - dontAnnotate - - dontExecute - - dontRecord - - init(rawValue:) - - neverInteract - - noReply - - queueReply - - rawValue - - waitForReply - - aeDesc - - appleEvent(withEventClass:eventID:targetDescriptor:returnID:transactionID:) - - CoreServices.AEEventClass - - Darwin.FourCharCode - - CoreServices.AEEventID - - Darwin.FourCharCode - - CoreServices.AEReturnID - - CoreServices.AETransactionID - - atIndex(_:) - - attributeDescriptor(forKeyword:) - - CoreServices.AEKeyword - - Darwin.FourCharCode - - booleanValue - - coerce(toDescriptorType:) - - CoreServices.DescType - - Darwin.ResType - - Darwin.FourCharCode - - currentProcess() - - data - - dateValue - - descriptorType - - CoreServices.DescType - - Darwin.ResType - - Darwin.FourCharCode - - doubleValue - - enumCodeValue - - Darwin.OSType - - Darwin.FourCharCode - - eventClass - - CoreServices.AEEventClass - - Darwin.FourCharCode - - eventID - - CoreServices.AEEventID - - Darwin.FourCharCode - - fileURLValue - - forKeyword(_:) - - CoreServices.AEKeyword - - Darwin.FourCharCode - - init() - - init(aeDescNoCopy:) - - init(applicationURL:) - - init(boolean:) - - init(bundleIdentifier:) - - init(date:) - - init(descriptorType:bytes:length:) - - CoreServices.DescType - - Darwin.ResType - - Darwin.FourCharCode - - init(descriptorType:data:) - - CoreServices.DescType - - Darwin.ResType - - Darwin.FourCharCode - - init(double:) - - init(enumCode:) - - Darwin.OSType - - Darwin.FourCharCode - - init(eventClass:eventID:targetDescriptor:returnID:transactionID:) - - CoreServices.AEEventClass - - Darwin.FourCharCode - - CoreServices.AEEventID - - Darwin.FourCharCode - - CoreServices.AEReturnID - - CoreServices.AETransactionID - - init(fileURL:) - - init(int32:) - - init(listDescriptor:) - - init(processIdentifier:) - - Darwin.pid_t - - Darwin.__darwin_pid_t - - Darwin.__int32_t - - init(recordDescriptor:) - - init(string:) - - init(typeCode:) - - Darwin.OSType - - Darwin.FourCharCode - - insert(_:at:) - - Swift.Void - - int32Value - - isRecordDescriptor - - keywordForDescriptor(at:) - - CoreServices.AEKeyword - - Darwin.FourCharCode - - list() - - null() - - numberOfItems - - paramDescriptor(forKeyword:) - - CoreServices.AEKeyword - - Darwin.FourCharCode - - record() - - remove(at:) - - Swift.Void - - remove(withKeyword:) - - CoreServices.AEKeyword - - Darwin.FourCharCode - - Swift.Void - - removeParamDescriptor(withKeyword:) - - CoreServices.AEKeyword - - Darwin.FourCharCode - - Swift.Void - - returnID - - CoreServices.AEReturnID - - sendEvent(options:timeout:) - - Foundation.TimeInterval - - setAttribute(_:forKeyword:) - - CoreServices.AEKeyword - - Darwin.FourCharCode - - Swift.Void - - setDescriptor(_:forKeyword:) - - CoreServices.AEKeyword - - Darwin.FourCharCode - - Swift.Void - - setParam(_:forKeyword:) - - CoreServices.AEKeyword - - Darwin.FourCharCode - - Swift.Void - - stringValue - - transactionID - - CoreServices.AETransactionID - - typeCodeValue - - Darwin.OSType - - Darwin.FourCharCode - - NSAppleEventManager @done @unsupported @requiresOSSupport - - SuspensionID - - appleEvent(forSuspensionID:) - - Foundation.NSAppleEventManager.SuspensionID - - currentAppleEvent - - currentReplyAppleEvent - - dispatchRawAppleEvent(_:withRawReply:handlerRefCon:) - - Darwin.OSErr - - Darwin.SRefCon - - init() - - removeEventHandler(forEventClass:andEventID:) - - CoreServices.AEEventClass - - Darwin.FourCharCode - - CoreServices.AEEventID - - Darwin.FourCharCode - - Swift.Void - - replyAppleEvent(forSuspensionID:) - - Foundation.NSAppleEventManager.SuspensionID - - resume(withSuspensionID:) - - Foundation.NSAppleEventManager.SuspensionID - - Swift.Void - - setCurrentAppleEventAndReplyEventWithSuspensionID(_:) - - Foundation.NSAppleEventManager.SuspensionID - - Swift.Void - - setEventHandler(_:andSelector:forEventClass:andEventID:) - - CoreServices.AEEventClass - - Darwin.FourCharCode - - CoreServices.AEEventID - - Darwin.FourCharCode - - Swift.Void - - shared() - - suspendCurrentAppleEvent() - - NSAppleEventTimeOutDefault @done @unsupported @requiresOSSupport - - NSAppleEventTimeOutNone @done @unsupported @requiresOSSupport - - NSAppleScript @done @unsupported @requiresOSSupport - - compileAndReturnError(_:) - - errorAppName - - errorBriefMessage - - errorMessage - - errorNumber - - errorRange - - executeAndReturnError(_:) - - executeAppleEvent(_:error:) - - init() - - init(contentsOf:error:) - - init(source:) - - isCompiled - - source - - NSArchiver @done - - archiveRootObject(_:toFile:) - - archivedData(withRootObject:) - - archiverData - - classNameEncoded(forTrueClassName:) - - encodeClassName(_:intoClassName:) - - Swift.Void - - encodeConditionalObject(_:) - - Swift.Void - - encodeRootObject(_:) - - Swift.Void - - init() - - init(forWritingWith:) - - replace(_:with:) - - Swift.Void - - NSArgumentEvaluationScriptError @done @unsupported @requiresOSSupport - - NSArgumentsWrongScriptError @done @unsupported @requiresOSSupport - - NSArray @done - - ArrayLiteralElement - - Element - - Iterator - - addObserver(_:forKeyPath:options:context:) - - Swift.Void - - addObserver(_:toObjectsAt:forKeyPath:options:context:) - - Swift.Void - - adding(_:) - - addingObjects(from:) - - applying(_:) - - componentsJoined(by:) - - contains(_:) - - count - - customMirror - - description - - description(withLocale:) - - description(withLocale:indent:) - - difference(from:) - - difference(from:with:) - - difference(from:with:usingEquivalenceTest:) - - enumerateObjects(_:) - - Swift.Void - - enumerateObjects(at:options:using:) - - Swift.Void - - enumerateObjects(options:using:) - - Swift.Void - - filtered(using:) - - firstObject - - firstObjectCommon(with:) - - index(of:) - - index(of:in:) - - Foundation.NSRange - - index(of:inSortedRange:options:usingComparator:) - - Foundation.NSRange - - indexOfObject(at:options:passingTest:) - - indexOfObject(options:passingTest:) - - indexOfObject(passingTest:) - - indexOfObjectIdentical(to:) - - indexOfObjectIdentical(to:in:) - - Foundation.NSRange - - indexesOfObjects(at:options:passingTest:) - - indexesOfObjects(options:passingTest:) - - indexesOfObjects(passingTest:) - - init() - - init(array:) - - init(array:) - - init(array:copyItems:) - - init(arrayLiteral:) - - init(coder:) - - init(contentsOf:) - - init(contentsOf:error:) - - init(contentsOfFile:) - - init(object:) - - init(objects:) - - init(objects:count:) - - init(objects:count:) - - isEqual(to:) - - lastObject - - makeIterator() - - object(at:) - - objectEnumerator() - - objects(at:) - - pathsMatchingExtensions(_:) - - removeObserver(_:forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - removeObserver(_:forKeyPath:context:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - removeObserver(_:fromObjectsAt:forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - removeObserver(_:fromObjectsAt:forKeyPath:context:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - reverseObjectEnumerator() - - setValue(_:forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - sortedArray(_:context:) - - sortedArray(_:context:hint:) - - sortedArray(comparator:) - - sortedArray(options:usingComparator:) - - sortedArray(using:) - - sortedArray(using:) - - sortedArrayHint - - subarray(with:) - - Foundation.NSRange - - subscript(_:) - - value(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - write(to:) - - write(to:atomically:) - - write(toFile:atomically:) - - NSAssertionHandler @done @unsupported @exceptionHandlingNotSupported - - current - - init() - - NSAssertionHandlerKey @done @unsupported @exceptionHandlingNotSupported - - NSAttributedString @done - - EnumerationOptions - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - longestEffectiveRangeNotRequired - - rawValue - - reverse - - Key - - RawValue - - _ObjectiveCType - - init(_:) - - init(rawValue:) - - rawValue - - attribute(_:at:effectiveRange:) - - attribute(_:at:longestEffectiveRange:in:) - - Foundation.NSRange - - attributedSubstring(from:) - - Foundation.NSRange - - attributes(at:effectiveRange:) - - attributes(at:longestEffectiveRange:in:) - - Foundation.NSRange - - enumerateAttribute(_:in:options:using:) - - Foundation.NSRange - - Swift.Void - - enumerateAttributes(in:options:using:) - - Foundation.NSRange - - Swift.Void - - init() - - init(attributedString:) - - init(string:) - - init(string:attributes:) - - isEqual(to:) - - length - - string - - NSBackgroundActivityScheduler @done @unsupported @requiresOSSupport - - CompletionHandler - - Result - - RawValue - - deferred - - finished - - init(rawValue:) - - rawValue - - identifier - - init() - - init(identifier:) - - interval - - Foundation.TimeInterval - - invalidate() - - Swift.Void - - qualityOfService - - repeats - - schedule(_:) - - Swift.Void - - shouldDefer - - tolerance - - Foundation.TimeInterval - - NSBinarySearchingOptions @done - - ArrayLiteralElement - - Element - - RawValue - - firstEqual - - init(rawValue:) - - insertionIndex - - lastEqual - - rawValue - - NSBuddhistCalendar @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSBundleErrorMaximum @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSBundleErrorMinimum @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSBundleExecutableArchitectureI386 - - NSBundleExecutableArchitecturePPC - - NSBundleExecutableArchitecturePPC64 - - NSBundleExecutableArchitectureX86_64 - - NSCache @done - - countLimit - - delegate - - evictsObjectsWithDiscardedContent - - init() - - name - - object(forKey:) - - removeAllObjects() - - Swift.Void - - removeObject(forKey:) - - Swift.Void - - setObject(_:forKey:) - - Swift.Void - - setObject(_:forKey:cost:) - - Swift.Void - - totalCostLimit - - NSCacheDelegate @done - - cache(_:willEvictObject:) - - Swift.Void - - NSCalendar @done - - Identifier - - ISO8601 - - RawValue - - _ObjectiveCType - - buddhist - - chinese - - coptic - - ethiopicAmeteAlem - - ethiopicAmeteMihret - - gregorian - - hebrew - - indian - - init(_:) - - init(rawValue:) - - islamic - - islamicCivil - - islamicTabular - - islamicUmmAlQura - - japanese - - persian - - rawValue - - republicOfChina - - Options - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - matchFirst - - matchLast - - matchNextTime - - matchNextTimePreservingSmallerUnits - - matchPreviousTimePreservingSmallerUnits - - matchStrictly - - rawValue - - searchBackwards - - wrapComponents - - Unit - - ArrayLiteralElement - - Element - - NSCalendarCalendarUnit - - NSDayCalendarUnit - - NSEraCalendarUnit - - NSHourCalendarUnit - - NSMinuteCalendarUnit - - NSMonthCalendarUnit - - NSQuarterCalendarUnit - - NSSecondCalendarUnit - - NSTimeZoneCalendarUnit - - NSWeekCalendarUnit - - NSWeekOfMonthCalendarUnit - - NSWeekOfYearCalendarUnit - - NSWeekdayCalendarUnit - - NSWeekdayOrdinalCalendarUnit - - NSYearCalendarUnit - - NSYearForWeekOfYearCalendarUnit - - RawValue - - calendar - - day - - era - - hour - - init(rawValue:) - - minute - - month - - nanosecond - - quarter - - rawValue - - second - - timeZone - - weekOfMonth - - weekOfYear - - weekday - - weekdayOrdinal - - year - - yearForWeekOfYear - - amSymbol - - autoupdatingCurrent - - calendarIdentifier - - compare(_:to:toUnitGranularity:) - - component(_:from:) - - components(_:from:) - - components(_:from:to:options:) - - components(_:from:to:options:) - - components(in:from:) - - current - - date(_:matchesComponents:) - - date(byAdding:to:options:) - - date(byAdding:value:to:options:) - - date(bySettingHour:minute:second:of:options:) - - date(bySettingUnit:value:of:options:) - - date(era:year:month:day:hour:minute:second:nanosecond:) - - date(era:yearForWeekOfYear:weekOfYear:weekday:hour:minute:second:nanosecond:) - - date(from:) - - enumerateDates(startingAfter:matching:options:using:) - - Swift.Void - - eraSymbols - - firstWeekday - - getEra(_:year:month:day:from:) - - Swift.Void - - getEra(_:yearForWeekOfYear:weekOfYear:weekday:from:) - - Swift.Void - - getHour(_:minute:second:nanosecond:from:) - - Swift.Void - - init(calendarIdentifier:) - - init(identifier:) - - isDate(_:equalTo:toUnitGranularity:) - - isDate(_:inSameDayAs:) - - isDateInToday(_:) - - isDateInTomorrow(_:) - - isDateInWeekend(_:) - - isDateInYesterday(_:) - - locale - - longEraSymbols - - maximumRange(of:) - - Foundation.NSRange - - minimumDaysInFirstWeek - - minimumRange(of:) - - Foundation.NSRange - - monthSymbols - - nextDate(after:matching:options:) - - nextDate(after:matching:value:options:) - - nextDate(after:matchingHour:minute:second:options:) - - nextWeekendStart(_:interval:options:after:) - - ordinality(of:in:for:) - - pmSymbol - - quarterSymbols - - range(of:in:for:) - - Foundation.NSRange - - range(of:start:interval:for:) - - range(ofWeekendStart:interval:containing:) - - shortMonthSymbols - - shortQuarterSymbols - - shortStandaloneMonthSymbols - - shortStandaloneQuarterSymbols - - shortStandaloneWeekdaySymbols - - shortWeekdaySymbols - - standaloneMonthSymbols - - standaloneQuarterSymbols - - standaloneWeekdaySymbols - - startOfDay(for:) - - timeZone - - veryShortMonthSymbols - - veryShortStandaloneMonthSymbols - - veryShortStandaloneWeekdaySymbols - - veryShortWeekdaySymbols - - weekdaySymbols - - NSCannotCreateScriptCommandError @done @unsupported @requiresOSSupport - - NSCharacterSet @done - - alphanumerics - - bitmapRepresentation - - capitalizedLetters - - characterIsMember(_:) - - Foundation.unichar - - controlCharacters - - decimalDigits - - decomposables - - hasMemberInPlane(_:) - - illegalCharacters - - init() - - init(bitmapRepresentation:) - - init(charactersIn:) - - init(coder:) - - init(contentsOfFile:) - - init(range:) - - Foundation.NSRange - - inverted - - isSuperset(of:) - - letters - - longCharacterIsMember(_:) - - Darwin.UTF32Char - - lowercaseLetters - - newlines - - nonBaseCharacters - - punctuationCharacters - - symbols - - uppercaseLetters - - urlFragmentAllowed - - urlHostAllowed - - urlPasswordAllowed - - urlPathAllowed - - urlQueryAllowed - - urlUserAllowed - - whitespaces - - whitespacesAndNewlines - - NSChineseCalendar @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSClassDescription @done @unsupported @requiresOSSupport - - attributeKeys - - init() - - init(for:) - - Swift.AnyClass - - invalidateClassDescriptionCache() - - Swift.Void - - inverse(forRelationshipKey:) - - register(_:for:) - - Swift.AnyClass - - Swift.Void - - toManyRelationshipKeys - - toOneRelationshipKeys - - NSClassFromString(_:) - - NSCloneCommand @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - init(commandDescription:) - - keySpecifier - - setReceiversSpecifier(_:) - - Swift.Void - - NSCloseCommand @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - init(commandDescription:) - - saveOptions - - NSCloudSharingConflictError @done @unsupported @requiresOSSupport - - NSCloudSharingErrorMaximum @done @unsupported @requiresOSSupport - - NSCloudSharingErrorMinimum @done @unsupported @requiresOSSupport - - NSCloudSharingNetworkFailureError @done @unsupported @requiresOSSupport - - NSCloudSharingNoPermissionError @done @unsupported @requiresOSSupport - - NSCloudSharingOtherError @done @unsupported @requiresOSSupport - - NSCloudSharingQuotaExceededError @done @unsupported @requiresOSSupport - - NSCloudSharingTooManyParticipantsError @done @unsupported @requiresOSSupport - - NSCocoaErrorDomain @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSCoder @done - - DecodingFailurePolicy - - RawValue - - init(rawValue:) - - raiseException - - rawValue - - setErrorAndReturn - - allowedClasses - - allowsKeyedCoding - - containsValue(forKey:) - - decodeArray(ofObjCType:count:at:) - - Swift.Void - - decodeBool(forKey:) - - decodeBytes(forKey:returnedLength:) - - decodeBytes(withReturnedLength:) - - decodeCInt(forKey:) - - decodeData() - - decodeDouble(forKey:) - - decodeFloat(forKey:) - - decodeInt32(forKey:) - - decodeInt64(forKey:) - - decodeInteger(forKey:) - - decodeObject() - - decodeObject(forKey:) - - decodeObject(of:forKey:) - - decodeObject(of:forKey:) - - decodePoint() - - Foundation.NSPoint - - decodePoint(forKey:) - - Foundation.NSPoint - - decodePropertyList() - - decodePropertyList(forKey:) - - decodeRect() - - Foundation.NSRect - - decodeRect(forKey:) - - Foundation.NSRect - - decodeSize() - - Foundation.NSSize - - decodeSize(forKey:) - - Foundation.NSSize - - decodeTopLevelObject() - - decodeTopLevelObject(forKey:) - - decodeTopLevelObject(of:forKey:) - - decodeTopLevelObject(of:forKey:) - - decodeValue(ofObjCType:at:) - - Swift.Void - - decodeValue(ofObjCType:at:size:) - - Swift.Void - - decodingFailurePolicy - - encode(_:) - - Swift.Void - - encode(_:) - - Swift.Void - - encode(_:) - - Foundation.NSPoint - - Swift.Void - - encode(_:) - - Foundation.NSSize - - Swift.Void - - encode(_:) - - Foundation.NSRect - - Swift.Void - - encode(_:forKey:) - - Swift.Void - - encode(_:forKey:) - - Swift.Void - - encode(_:forKey:) - - Swift.Void - - encode(_:forKey:) - - Swift.Void - - encode(_:forKey:) - - Swift.Void - - encode(_:forKey:) - - Swift.Void - - encode(_:forKey:) - - Swift.Void - - encode(_:forKey:) - - Foundation.NSPoint - - Swift.Void - - encode(_:forKey:) - - Foundation.NSSize - - Swift.Void - - encode(_:forKey:) - - Foundation.NSRect - - Swift.Void - - encodeArray(ofObjCType:count:at:) - - Swift.Void - - encodeBycopyObject(_:) - - Swift.Void - - encodeByrefObject(_:) - - Swift.Void - - encodeBytes(_:length:) - - Swift.Void - - encodeBytes(_:length:forKey:) - - Swift.Void - - encodeCInt(_:forKey:) - - Swift.Void - - encodeConditionalObject(_:) - - Swift.Void - - encodeConditionalObject(_:forKey:) - - Swift.Void - - encodePropertyList(_:) - - Swift.Void - - encodeRootObject(_:) - - Swift.Void - - encodeValue(ofObjCType:at:) - - Swift.Void - - error - - failWithError(_:) - - Swift.Void - - init() - - requiresSecureCoding - - systemVersion - - version(forClassName:) - - NSCoderErrorMaximum @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSCoderErrorMinimum @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSCoderInvalidValueError @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSCoderReadCorruptError @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSCoderValueNotFoundError @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSCoding @done - - encode(with:) - - Swift.Void - - init(coder:) - - NSCollectionChangeType - - RawValue - - init(rawValue:) - - insert - - rawValue - - remove - - NSCollectorDisabledOption @done @unsupported @garbageCollectionSymbolsNotSupported - - NSCompareHashTables(_:_:) - - NSCompareMapTables(_:_:) - - NSComparisonPredicate @done @unsupported @keyValueCodingObservingNotSupported @grandfathered - - Modifier - - RawValue - - all - - any - - direct - - init(rawValue:) - - rawValue - - Operator - - RawValue - - beginsWith - - between - - contains - - customSelector - - endsWith - - equalTo - - greaterThan - - greaterThanOrEqualTo - - in - - init(rawValue:) - - lessThan - - lessThanOrEqualTo - - like - - matches - - notEqualTo - - rawValue - - Options - - ArrayLiteralElement - - Element - - RawValue - - caseInsensitive - - diacriticInsensitive - - init(rawValue:) - - normalized - - rawValue - - comparisonPredicateModifier - - customSelector - - init() - - init(coder:) - - init(leftExpression:rightExpression:customSelector:) - - init(leftExpression:rightExpression:modifier:type:options:) - - leftExpression - - options - - predicateOperatorType - - rightExpression - - NSCompoundPredicate @done - - LogicalType - - RawValue - - and - - init(rawValue:) - - not - - or - - rawValue - - compoundPredicateType - - init() - - init(andPredicateWithSubpredicates:) - - init(coder:) - - init(notPredicateWithSubpredicate:) - - init(orPredicateWithSubpredicates:) - - init(type:subpredicates:) - - subpredicates - - NSCompressionErrorMaximum - - NSCompressionErrorMinimum - - NSCompressionFailedError - - NSCondition @done - - broadcast() - - Swift.Void - - init() - - name - - signal() - - Swift.Void - - wait() - - Swift.Void - - wait(until:) - - NSConditionLock @done - - condition - - init() - - init(condition:) - - lock(before:) - - lock(whenCondition:) - - Swift.Void - - lock(whenCondition:before:) - - name - - try() - - tryLock(whenCondition:) - - unlock(withCondition:) - - Swift.Void - - NSContainerSpecifierError @done @unsupported @requiresOSSupport - - NSContainsRect(_:_:) @done - - Foundation.NSRect - - Foundation.NSRect - - NSConvertHostDoubleToSwapped(_:) - - NSConvertHostFloatToSwapped(_:) - - NSConvertSwappedDoubleToHost(_:) - - NSConvertSwappedFloatToHost(_:) - - NSCopyHashTableWithZone(_:_:) - - NSCopyMapTableWithZone(_:_:) - - NSCopyMemoryPages(_:_:_:) @done @unsupported @useSwiftForMemoryManagement - - Swift.Void - - NSCopying @done - - copy(with:) - - NSCountCommand @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - init(commandDescription:) - - NSCountHashTable(_:) - - NSCountMapTable(_:) - - NSCountedSet @done - - add(_:) - - Swift.Void - - count(for:) - - init() - - init(array:) - - init(capacity:) - - init(coder:) - - init(objects:count:) - - init(set:) - - init(set:copyItems:) - - objectEnumerator() - - remove(_:) - - Swift.Void - - NSCreateCommand @done @unsupported @requiresOSSupport - - createClassDescription - - init() - - init(coder:) - - init(commandDescription:) - - resolvedKeyDictionary - - NSCreateHashTable(_:_:) - - NSCreateHashTableWithZone(_:_:_:) - - NSCreateMapTable(_:_:_:) - - NSCreateMapTableWithZone(_:_:_:_:) - - NSData - - Base64DecodingOptions @done - - ArrayLiteralElement - - Element - - RawValue - - ignoreUnknownCharacters - - init(rawValue:) - - rawValue - - Base64EncodingOptions. @done - - ArrayLiteralElement - - Element - - RawValue - - endLineWithCarriageReturn - - endLineWithLineFeed - - init(rawValue:) - - lineLength64Characters - - lineLength76Characters - - rawValue - - CompressionAlgorithm - - RawValue - - init(rawValue:) - - lz4 - - lzfse - - lzma - - rawValue - - zlib - - Element @done - - Index @done - - Indices @done - - Iterator @done - - ReadingOptions @done - - ArrayLiteralElement - - Element - - RawValue - - alwaysMapped - - dataReadingMapped - - init(rawValue:) - - mappedIfSafe - - mappedRead - - rawValue - - uncached - - uncachedRead - - Regions @done - - SearchOptions @done - - ArrayLiteralElement - - Element - - RawValue - - anchored - - backwards - - init(rawValue:) - - rawValue - - SubSequence @done - - WritingOptions @done - - ArrayLiteralElement - - Element - - RawValue - - atomic - - atomicWrite - - init(rawValue:) - - rawValue - - withoutOverwriting - - base64EncodedData(options:) @done - - base64EncodedString(options:) @done - - bytes @done - - compressed(using:) - - dataWithContentsOfMappedFile(_:) - - decompressed(using:) - - description @done - - endIndex @done - - enumerateBytes(_:) @done - - Swift.Void @done - - firstRange(of:in:) @done - - getBytes(_:) @done - - Swift.Void @done - - getBytes(_:length:) @done - - Swift.Void @done - - getBytes(_:range:) @done - - Foundation.NSRange @done - - Swift.Void @done - - init() @done - - init(base64Encoded:options:) @done - - init(base64Encoded:options:) @done - - init(bytes:length:) @done - - init(bytesNoCopy:length:) @done - - init(bytesNoCopy:length:deallocator:) @done - - init(bytesNoCopy:length:freeWhenDone:) @done - - init(contentsOf:) @done - - init(contentsOf:options:) @done - - init(contentsOfFile:) @done - - init(contentsOfFile:options:) @done - - init(contentsOfMappedFile:) @done - - init(data:) @done - - isEqual(to:) @done - - lastRange(of:in:) @done - - length @done - - range(of:options:in:) @done - - Foundation.NSRange @done - - Foundation.NSRange @done - - regions @done - - startIndex @done - - subdata(with:) @done - - Foundation.NSRange @done - - subscript(_:) @done - - write(to:atomically:) @done - - write(to:options:) @done - - write(toFile:atomically:) @done - - write(toFile:options:) @done - - NSDataDetector @done @unsupported @requiresOSSupport - - checkingTypes - - Foundation.NSTextCheckingTypes - - init() - - init(pattern:options:) - - init(types:) - - Foundation.NSTextCheckingTypes - - NSDate @done - - addingTimeInterval(_:) - - Foundation.TimeInterval - - compare(_:) - - customPlaygroundQuickLook @done @unsupported @playgroundsNotSupported - - Swift.PlaygroundQuickLook @done @unsupported @playgroundsNotSupported - - date(with:) - - date(withCalendarFormat:timeZone:) - - date(withNaturalLanguageString:) - - date(withNaturalLanguageString:locale:) - - description - - description(with:) - - description(withCalendarFormat:timeZone:locale:) - - distantFuture - - distantPast - - earlierDate(_:) - - init() - - init(coder:) - - init(string:) - - init(timeInterval:since:) - - Foundation.TimeInterval - - init(timeIntervalSince1970:) - - Foundation.TimeInterval - - init(timeIntervalSinceNow:) - - Foundation.TimeInterval - - init(timeIntervalSinceReferenceDate:) - - Foundation.TimeInterval - - isEqual(to:) - - laterDate(_:) - - now - - timeIntervalSince(_:) - - Foundation.TimeInterval - - timeIntervalSince1970 - - Foundation.TimeInterval - - timeIntervalSinceNow - - Foundation.TimeInterval - - timeIntervalSinceReferenceDate - - Foundation.TimeInterval - - timeIntervalSinceReferenceDate - - Foundation.TimeInterval - - NSDateComponentUndefined @done - - NSDateComponents @done - - calendar - - date - - day - - era - - hour - - init() - - isLeapMonth - - isValidDate - - isValidDate(in:) - - minute - - month - - nanosecond - - quarter - - second - - setValue(_:forComponent:) - - Swift.Void - - timeZone - - value(forComponent:) - - weekOfMonth - - weekOfYear - - weekday - - weekdayOrdinal - - year - - yearForWeekOfYear - - NSDateInterval @done - - compare(_:) - - contains(_:) - - duration - - Foundation.TimeInterval - - endDate - - init() - - init(coder:) - - init(start:duration:) - - Foundation.TimeInterval - - init(start:end:) - - intersection(with:) - - intersects(_:) - - isEqual(to:) - - startDate - - NSDeallocateMemoryPages(_:_:) @done @unsupported @useSwiftForMemoryManagement - - Swift.Void - - NSDebugDescriptionErrorKey @done - - NSDecimalAdd(_:_:_:_:) @done - - NSDecimalCompact(_:) @done - - Swift.Void @done - - NSDecimalCompare(_:_:) @done - - NSDecimalCopy(_:_:) @done - - Swift.Void @done - - NSDecimalDivide(_:_:_:_:) @done - - NSDecimalIsNotANumber(_:) @done - - NSDecimalMaxSize @done - - NSDecimalMultiply(_:_:_:_:) @done - - NSDecimalMultiplyByPowerOf10(_:_:_:_:) @done - - NSDecimalNoScale @done - - NSDecimalNormalize(_:_:_:) @done - - NSDecimalNumber @done - - CalculationError - - RawValue - - divideByZero - - init(rawValue:) - - lossOfPrecision - - noError - - overflow - - rawValue - - underflow - - RoundingMode - - RawValue - - bankers - - down - - init(rawValue:) - - plain - - rawValue - - up - - adding(_:) - - adding(_:withBehavior:) - - compare(_:) - - decimalValue - - defaultBehavior - - description(withLocale:) - - dividing(by:) - - dividing(by:withBehavior:) - - doubleValue - - init() - - init(bytes:objCType:) - - init(coder:) - - init(decimal:) - - init(mantissa:exponent:isNegative:) - - init(string:) - - init(string:locale:) - - init(value:) - - init(value:) - - init(value:) - - init(value:) - - init(value:) - - init(value:) - - init(value:) - - init(value:) - - init(value:) - - init(value:) - - init(value:) - - init(value:) - - init(value:) - - maximum - - minimum - - multiplying(by:) - - multiplying(by:withBehavior:) - - multiplying(byPowerOf10:) - - multiplying(byPowerOf10:withBehavior:) - - notANumber - - objCType - - one - - raising(toPower:) - - raising(toPower:withBehavior:) - - rounding(accordingToBehavior:) - - subtracting(_:) - - subtracting(_:withBehavior:) - - zero - - NSDecimalNumberBehaviors @done - - exceptionDuringOperation(_:error:leftOperand:rightOperand:) - - roundingMode() - - scale() - - NSDecimalNumberHandler @done - - default - - init() - - init(roundingMode:scale:raiseOnExactness:raiseOnOverflow:raiseOnUnderflow:raiseOnDivideByZero:) - - NSDecimalPower(_:_:_:_:) @done - - NSDecimalRound(_:_:_:_:) @done - - Swift.Void @done - - NSDecimalString(_:_:) @done - - NSDecimalSubtract(_:_:_:_:) @done - - NSDecompressionFailedError - - NSDeleteCommand @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - init(commandDescription:) - - keySpecifier - - setReceiversSpecifier(_:) - - Swift.Void - - NSDictionary - - Element @done - - Iterator @done - - Element @done - - next() @done - - Key @done - - Value @done - - allKeys @done - - allKeys(for:) @done - - allValues @done - - count @done - - customMirror @done - - description @done - - description(withLocale:) @done - - description(withLocale:indent:) @done - - descriptionInStringsFileFormat @done - - enumerateKeysAndObjects(_:) @done - - Swift.Void @done - - enumerateKeysAndObjects(options:using:) @done - - Swift.Void @done - - fileCreationDate() - - fileExtensionHidden() - - fileGroupOwnerAccountID() - - fileGroupOwnerAccountName() - - fileHFSCreatorCode() - - Darwin.OSType - - Darwin.FourCharCode - - fileHFSTypeCode() - - Darwin.OSType - - Darwin.FourCharCode - - fileIsAppendOnly() - - fileIsImmutable() - - fileModificationDate() - - fileOwnerAccountID() - - fileOwnerAccountName() - - filePosixPermissions() - - fileSize() - - fileSystemFileNumber() - - fileSystemNumber() - - fileType() - - init() @done - - init(coder:) @done - - init(contentsOf:) @done - - init(contentsOf:error:) @done - - init(contentsOfFile:) @done - - init(dictionary:) @done - - init(dictionary:) @done - - init(dictionary:copyItems:) @done - - init(dictionaryLiteral:) @done - - init(object:forKey:) @done - - init(objects:forKeys:) @done - - init(objects:forKeys:count:) @done - - isEqual(to:) @done - - keyEnumerator() @done - - keysOfEntries(options:passingTest:) @done - - keysOfEntries(passingTest:) @done - - keysSortedByValue(comparator:) @done - - keysSortedByValue(options:usingComparator:) @done - - keysSortedByValue(using:) @done - - makeIterator() @done - - object(forKey:) @done - - objectEnumerator() @done - - objects(forKeys:notFoundMarker:) @done - - sharedKeySet(forKeys:) @done - - subscript(_:) @done - - subscript(_:) @done - - value(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - write(to:) @done - - write(to:atomically:) @done - - write(toFile:atomically:) @done - - NSDiscardableContent - - beginContentAccess() - - discardContentIfPossible() - - Swift.Void - - endContentAccess() - - Swift.Void - - isContentDiscarded() - - NSDistributedLock @done @unsupported @requiresOSSupport - - break() - - Swift.Void - - init(path:) - - lockDate - - try() - - unlock() - - Swift.Void - - NSDivideRect(_:_:_:_:_:) @done - - Foundation.NSRect - - Swift.Void - - NSEdgeInsets @done - - init() - - init(top:left:bottom:right:) - - NSEdgeInsetsEqual(_:_:) @done - - NSEdgeInsetsMake(_:_:_:_:) @done - - NSEdgeInsetsZero @done - - NSEndHashTableEnumeration(_:) - - Swift.Void - - NSEndMapTableEnumeration(_:) - - Swift.Void - - NSEnumerateHashTable(_:) - - NSEnumerateMapTable(_:) - - NSEnumerationOptions @done - - ArrayLiteralElement - - Element - - RawValue - - concurrent - - init(rawValue:) - - rawValue - - reverse - - NSEnumerator @done - - Element - - Iterator - - allObjects - - init() - - makeIterator() - - nextObject() - - NSEqualPoints(_:_:) @done - - Foundation.NSPoint @done - - Foundation.NSPoint @done - - NSEqualRanges(_:_:) @done - - Foundation.NSRange @done - - Foundation.NSRange @done - - NSEqualRects(_:_:) @done - - Foundation.NSRect @done - - Foundation.NSRect @done - - NSEqualSizes(_:_:) @done - - Foundation.NSSize @done - - Foundation.NSSize @done - - NSError @done - - UserInfoKey - - code - - domain - - helpAnchor - - init() - - init(domain:code:userInfo:) - - localizedDescription - - localizedFailureReason - - localizedRecoveryOptions - - localizedRecoverySuggestion - - recoveryAttempter - - setUserInfoValueProvider(forDomain:provider:) - - Swift.Void - - userInfo - - userInfoValueProvider(forDomain:) - - NSErrorDomain @done - - NSErrorPointer @done - - NSException @done @unsupported @exceptionHandlingNotSupported - - callStackReturnAddresses - - callStackSymbols - - init() - - init(name:reason:userInfo:) - - name - - raise() - - Swift.Void - - raise(_:format:arguments:) - - Swift.Void - - reason - - userInfo - - NSExceptionName @done @partiallySupported @exceptionHandlingNotSupported - - RawValue - - _ObjectiveCType - - characterConversionException - - decimalNumberDivideByZeroException - - decimalNumberExactnessException - - decimalNumberOverflowException - - decimalNumberUnderflowException - - destinationInvalidException - - fileHandleOperationException - - genericException - - inconsistentArchiveException - - init(_:) - - init(rawValue:) - - internalInconsistencyException - - invalidArchiveOperationException - - invalidArgumentException - - invalidReceivePortException - - invalidSendPortException - - invalidUnarchiveOperationException - - invocationOperationCancelledException - - invocationOperationVoidResultException - - mallocException - - objectInaccessibleException - - objectNotAvailableException - - oldStyleException - - parseErrorException - - portReceiveException - - portSendException - - portTimeoutException - - rangeException - - rawValue - - undefinedKeyException - - NSExecutableArchitectureMismatchError @done - - NSExecutableErrorMaximum - - NSExecutableErrorMinimum - - NSExecutableLinkError @done - - NSExecutableLoadError @done - - NSExecutableNotLoadableError @done - - NSExecutableRuntimeMismatchError @done - - NSExistsCommand @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - init(commandDescription:) - - NSExpression @done @unsupported @keyValueCodingObservingNotSupported - - ExpressionType - - RawValue - - aggregate - - anyKey - - block - - conditional - - constantValue - - evaluatedObject - - function - - init(rawValue:) - - intersectSet - - keyPath - - minusSet - - rawValue - - subquery - - unionSet - - variable - - allowEvaluation() - - Swift.Void - - arguments - - collection - - constantValue - - expressionBlock - - expressionForAnyKey() - - expressionForEvaluatedObject() - - expressionType - - expressionValue(with:context:) - - false - - function - - init() - - init(block:arguments:) - - init(coder:) - - init(expressionType:) - - init(forAggregate:) - - init(forConditional:trueExpression:falseExpression:) - - init(forConstantValue:) - - init(forFunction:arguments:) - - init(forFunction:selectorName:arguments:) - - init(forIntersectSet:with:) - - init(forKeyPath:) - - init(forKeyPath:) - - init(forMinusSet:with:) - - init(forSubquery:usingIteratorVariable:predicate:) - - init(forUnionSet:with:) - - init(forVariable:) - - init(format:_:) - - init(format:argumentArray:) - - init(format:arguments:) - - keyPath - - left - - operand - - predicate - - right - - true - - variable - - NSExtensionContext @done @unsupported @requiresOSSupport - - cancelRequest(withError:) - - Swift.Void - - completeRequest(returningItems:completionHandler:) - - Swift.Void - - init() - - inputItems - - open(_:completionHandler:) - - Swift.Void - - NSExtensionItem @done @unsupported @requiresOSSupport - - attachments - - attributedContentText - - attributedTitle - - init() - - userInfo - - NSExtensionItemAttachmentsKey @done @unsupported @requiresOSSupport - - NSExtensionItemAttributedContentTextKey @done @unsupported @requiresOSSupport - - NSExtensionItemAttributedTitleKey @done @unsupported @requiresOSSupport - - NSExtensionItemsAndErrorsKey @done @unsupported @requiresOSSupport - - NSExtensionJavaScriptPreprocessingResultsKey @done @unsupported @requiresOSSupport - - NSExtensionRequestHandling @done @unsupported @requiresOSSupport - - beginRequest(with:) - - Swift.Void - - NSFastEnumeration @done @unsupported @useSwiftSequenceTypesForIteration - - countByEnumerating(with:objects:count:) - - NSFastEnumerationIterator @done @unsupported @useSwiftSequenceTypesForIteration - - Element - - init(_:) - - next() - - NSFastEnumerationState @done @unsupported @useSwiftSequenceTypesForIteration - - init() - - init(state:itemsPtr:mutationsPtr:extra:) - - NSFeatureUnsupportedError @done - - NSFileAccessIntent @done @unsupported @requiresOSSupport - - init() - - readingIntent(with:options:) - - url - - writingIntent(with:options:) - - NSFileCoordinator @done @unsupported @requiresOSSupport - - ReadingOptions - - ArrayLiteralElement - - Element - - RawValue - - forUploading - - immediatelyAvailableMetadataOnly - - init(rawValue:) - - rawValue - - resolvesSymbolicLink - - withoutChanges - - WritingOptions - - ArrayLiteralElement - - Element - - RawValue - - contentIndependentMetadataOnly - - forDeleting - - forMerging - - forMoving - - forReplacing - - init(rawValue:) - - rawValue - - addFilePresenter(_:) - - Swift.Void - - cancel() - - Swift.Void - - coordinate(readingItemAt:options:error:byAccessor:) - - Foundation.NSErrorPointer - - Swift.Void - - coordinate(readingItemAt:options:writingItemAt:options:error:byAccessor:) - - Foundation.NSErrorPointer - - Swift.Void - - coordinate(with:queue:byAccessor:) - - Swift.Void - - coordinate(writingItemAt:options:error:byAccessor:) - - Foundation.NSErrorPointer - - Swift.Void - - coordinate(writingItemAt:options:writingItemAt:options:error:byAccessor:) - - Foundation.NSErrorPointer - - Swift.Void - - filePresenters - - init() - - init(filePresenter:) - - item(at:didChangeUbiquityAttributes:) - - Swift.Void - - item(at:didMoveTo:) - - Swift.Void - - item(at:willMoveTo:) - - Swift.Void - - prepare(forReadingItemsAt:options:writingItemsAt:options:error:byAccessor:) - - Foundation.NSErrorPointer - - Swift.Void - - purposeIdentifier - - removeFilePresenter(_:) - - Swift.Void - - NSFileErrorMaximum - - NSFileErrorMinimum - - NSFileHandleNotificationDataItem @done - - NSFileHandleNotificationFileHandleItem @done - - NSFileLockingError @done - - NSFileManagerUnmountBusyError @done - - NSFileManagerUnmountDissentingProcessIdentifierErrorKey - - NSFileManagerUnmountUnknownError @done - - NSFileNoSuchFileError @done - - NSFilePathErrorKey @done - - NSFilePresenter @done @unsupported @requiresOSSupport - - accommodatePresentedItemDeletion(completionHandler:) - - Swift.Void - - accommodatePresentedSubitemDeletion(at:completionHandler:) - - Swift.Void - - observedPresentedItemUbiquityAttributes - - presentedItemDidChange() - - Swift.Void - - presentedItemDidChangeUbiquityAttributes(_:) - - Swift.Void - - presentedItemDidGain(_:) - - Swift.Void - - presentedItemDidLose(_:) - - Swift.Void - - presentedItemDidMove(to:) - - Swift.Void - - presentedItemDidResolveConflict(_:) - - Swift.Void - - presentedItemOperationQueue - - presentedItemURL - - presentedSubitem(at:didGain:) - - Swift.Void - - presentedSubitem(at:didLose:) - - Swift.Void - - presentedSubitem(at:didMoveTo:) - - Swift.Void - - presentedSubitem(at:didResolve:) - - Swift.Void - - presentedSubitemDidAppear(at:) - - Swift.Void - - presentedSubitemDidChange(at:) - - Swift.Void - - primaryPresentedItemURL - - relinquishPresentedItem(toReader:) - - Swift.Void - - relinquishPresentedItem(toWriter:) - - Swift.Void - - savePresentedItemChanges(completionHandler:) - - Swift.Void - - NSFileProviderService @done @unsupported @requiresOSSupport - - getFileProviderConnection(completionHandler:) - - Swift.Void - - init() - - name - - NSFileProviderServiceName @done @unsupported @requiresOSSupport - - RawValue - - _ObjectiveCType - - init(_:) - - init(rawValue:) - - rawValue - - NSFileReadCorruptFileError @done - - NSFileReadInapplicableStringEncodingError @done - - NSFileReadInvalidFileNameError @done - - NSFileReadNoPermissionError @done - - NSFileReadNoSuchFileError @done - - NSFileReadTooLargeError @done - - NSFileReadUnknownError @done - - NSFileReadUnknownStringEncodingError @done - - NSFileReadUnsupportedSchemeError @done - - NSFileSecurity @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - NSFileTypeForHFSTypeCode(_:) @done @unsupported @requiresOSSupport - - Darwin.OSType - - Darwin.FourCharCode - - NSFileVersion @done @unsupported @requiresOSSupport - - AddingOptions - - ArrayLiteralElement - - Element - - RawValue - - byMoving - - init(rawValue:) - - rawValue - - ReplacingOptions - - ArrayLiteralElement - - Element - - RawValue - - byMoving - - init(rawValue:) - - rawValue - - addOfItem(at:withContentsOf:options:) - - currentVersionOfItem(at:) - - getNonlocalVersionsOfItem(at:completionHandler:) - - Swift.Void - - hasLocalContents - - hasThumbnail - - init() - - isConflict - - isDiscardable - - isResolved - - localizedName - - localizedNameOfSavingComputer - - modificationDate - - originatorNameComponents - - otherVersionsOfItem(at:) - - persistentIdentifier - - remove() - - removeOtherVersionsOfItem(at:) - - replaceItem(at:options:) - - temporaryDirectoryURLForNewVersionOfItem(at:) - - unresolvedConflictVersionsOfItem(at:) - - url - - version(itemAt:forPersistentIdentifier:) - - NSFileWriteFileExistsError @done - - NSFileWriteInapplicableStringEncodingError @done - - NSFileWriteInvalidFileNameError @done - - NSFileWriteNoPermissionError @done - - NSFileWriteOutOfSpaceError @done - - NSFileWriteUnknownError @done - - NSFileWriteUnsupportedSchemeError @done - - NSFileWriteVolumeReadOnlyError @done - - NSFormattingError @done - - NSFormattingErrorMaximum - - NSFormattingErrorMinimum - - NSFoundationVersionNumber @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_0 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_1 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_10 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_10_1 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_10_2 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_10_3 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_10_4 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_10_5 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_10_Max @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_11 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_11_1 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_11_2 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_11_3 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_11_4 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_11_Max @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_1_1 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_1_2 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_1_3 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_1_4 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_2 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_2_1 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_2_2 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_2_3 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_2_4 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_2_5 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_2_6 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_2_7 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_2_8 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_3 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_3_1 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_3_2 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_3_3 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_3_4 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_3_5 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_3_6 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_3_7 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_3_8 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_3_9 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_4 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_4_1 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_4_10 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_4_11 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_4_2 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_4_3 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_4_4_Intel @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_4_4_PowerPC @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_4_5 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_4_6 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_4_7 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_4_8 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_4_9 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_5 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_5_1 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_5_2 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_5_3 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_5_4 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_5_5 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_5_6 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_5_7 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_5_8 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_6 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_6_1 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_6_2 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_6_3 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_6_4 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_6_5 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_6_6 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_6_7 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_6_8 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_7 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_7_1 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_7_2 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_7_3 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_7_4 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_8 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_8_1 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_8_2 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_8_3 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_8_4 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_9 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_9_1 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionNumber10_9_2 @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFoundationVersionWithFileManagerResourceForkSupport @done @unsupported @versionsAreNotSignificantOutsideDarwin - - NSFreeHashTable(_:) - - Swift.Void - - NSFreeMapTable(_:) - - Swift.Void - - NSFullUserName() @done - - NSGetCommand @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - init(commandDescription:) - - NSGetSizeAndAlignment(_:_:_:) @done @unsupported @useSwiftForMemoryManagement - - NSGetUncaughtExceptionHandler() @done @unsupported @exceptionHandlingNotSupported - - NSGrammarCorrections @done @unsupported @orthographyNotAvailable - - NSGrammarRange @done @unsupported @orthographyNotAvailable - - NSGrammarUserDescription @done @unsupported @orthographyNotAvailable - - NSGregorianCalendar - - NSHFSTypeCodeFromFileType(_:) @done @unsupported @requiresOSSupport - - Darwin.OSType - - Darwin.FourCharCode - - NSHFSTypeOfFile(_:) @done @unsupported @requiresOSSupport - - NSHPUXOperatingSystem - - NSHashEnumerator - - init() - - init(_pi:_si:_bs:) - - NSHashGet(_:_:) - - NSHashInsert(_:_:) - - Swift.Void - - NSHashInsertIfAbsent(_:_:) - - NSHashInsertKnownAbsent(_:_:) - - Swift.Void - - NSHashRemove(_:_:) - - Swift.Void - - NSHashTable - - add(_:) - - Swift.Void - - allObjects - - anyObject - - contains(_:) - - count - - init() - - init(options:) - - init(options:capacity:) - - init(pointerFunctions:capacity:) - - intersect(_:) - - Swift.Void - - intersects(_:) - - isEqual(to:) - - isSubset(of:) - - member(_:) - - minus(_:) - - Swift.Void - - objectEnumerator() - - pointerFunctions - - remove(_:) - - Swift.Void - - removeAllObjects() - - Swift.Void - - setRepresentation - - union(_:) - - Swift.Void - - weakObjects() - - NSHashTableCallBacks - - init() - - init(hash:isEqual:retain:release:describe:) - - NSHashTableCopyIn - - NSHashTableObjectPointerPersonality - - NSHashTableOptions - - NSHashTableStrongMemory - - NSHashTableWeakMemory - - NSHebrewCalendar @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSHeight(_:) @done - - Foundation.NSRect - - NSHelpAnchorErrorKey @done - - NSHomeDirectory() @done - - NSHomeDirectoryForUser(_:) @done - - NSHostByteOrder() - - NSISO2022JPStringEncoding @done - - NSISO8601Calendar @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSISOLatin1StringEncoding @done - - NSISOLatin2StringEncoding @done - - NSIndexPath @done - - adding(_:) - - compare(_:) - - getIndexes(_:) - - Swift.Void - - getIndexes(_:range:) - - Foundation.NSRange - - Swift.Void - - index(atPosition:) - - init() - - init(index:) - - init(indexes:length:) - - length - - removingLastIndex() - - NSIndexSet @done - - Element - - Foundation.NSIndexSetIterator.Element - - Iterator - - contains(_:) - - contains(_:) - - contains(in:) - - Foundation.NSRange - - count - - countOfIndexes(in:) - - Foundation.NSRange - - enumerate(_:) - - Swift.Void - - enumerate(in:options:using:) - - Foundation.NSRange - - Swift.Void - - enumerate(options:using:) - - Swift.Void - - enumerateRanges(_:) - - Swift.Void - - enumerateRanges(in:options:using:) - - Foundation.NSRange - - Swift.Void - - enumerateRanges(options:using:) - - Swift.Void - - firstIndex - - getIndexes(_:maxCount:inIndexRange:) - - index(in:options:passingTest:) - - Foundation.NSRange - - index(options:passingTest:) - - index(passingTest:) - - indexGreaterThanIndex(_:) - - indexGreaterThanOrEqual(to:) - - indexLessThanIndex(_:) - - indexLessThanOrEqual(to:) - - indexes(in:options:passingTest:) - - Foundation.NSRange - - indexes(options:passingTest:) - - indexes(passingTest:) - - init() - - init(index:) - - init(indexSet:) - - init(indexesIn:) - - Foundation.NSRange - - intersects(in:) - - Foundation.NSRange - - isEqual(to:) - - lastIndex - - makeIterator() - - NSIndexSetIterator @done - - Element - - next() - - NSIndexSpecifier @done @unsupported @requiresOSSupport - - index - - init() - - init(coder:) - - init(containerClassDescription:containerSpecifier:key:) - - init(containerClassDescription:containerSpecifier:key:index:) - - init(containerSpecifier:key:) - - NSIndianCalendar @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSInsetRect(_:_:_:) @done - - Foundation.NSRect - - Foundation.NSRect - - NSIntegerHashCallBacks - - NSIntegerMapKeyCallBacks - - NSIntegerMapValueCallBacks - - NSIntegralRect(_:) @done - - Foundation.NSRect @done - - Foundation.NSRect @done - - NSIntegralRectWithOptions(_:_:) @done - - Foundation.NSRect @done - - Foundation.NSRect @done - - NSInternalScriptError @done @unsupported @requiresOSSupport - - NSInternalSpecifierError @done @unsupported @requiresOSSupport - - NSIntersectionRange(_:_:) @done - - Foundation.NSRange @done - - Foundation.NSRange @done - - Foundation.NSRange @done - - NSIntersectionRect(_:_:) @done - - Foundation.NSRect @done - - Foundation.NSRect @done - - Foundation.NSRect @done - - NSIntersectsRect(_:_:) @done - - Foundation.NSRect @done - - Foundation.NSRect @done - - NSInvalidIndexSpecifierError @done @unsupported @requiresOSSupport - - NSIsEmptyRect(_:) @done - - Foundation.NSRect @done - - NSIslamicCalendar @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSIslamicCivilCalendar @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSItemProvider @done @unsupported @requiresOSSupport - - CompletionHandler - - ErrorCode - - RawValue - - init(rawValue:) - - itemUnavailableError - - rawValue - - unavailableCoercionError - - unexpectedValueClassError - - unknownError - - LoadHandler - - canLoadObject(ofClass:) - - canLoadObject(ofClass:) - - errorDomain - - hasItemConformingToTypeIdentifier(_:) - - hasRepresentationConforming(toTypeIdentifier:fileOptions:) - - init() - - init(contentsOf:) - - init(item:typeIdentifier:) - - init(object:) - - loadDataRepresentation(forTypeIdentifier:completionHandler:) - - loadFileRepresentation(forTypeIdentifier:completionHandler:) - - loadInPlaceFileRepresentation(forTypeIdentifier:completionHandler:) - - loadItem(forTypeIdentifier:options:completionHandler:) - - Swift.Void - - loadObject(ofClass:completionHandler:) - - loadObject(ofClass:completionHandler:) - - loadPreviewImage(options:completionHandler:) - - Swift.Void - - previewImageHandler - - registerDataRepresentation(forTypeIdentifier:visibility:loadHandler:) - - Swift.Void - - registerFileRepresentation(forTypeIdentifier:fileOptions:visibility:loadHandler:) - - Swift.Void - - registerItem(forTypeIdentifier:loadHandler:) - - Foundation.NSItemProvider.LoadHandler - - Swift.Void - - registerObject(_:visibility:) - - Swift.Void - - registerObject(ofClass:visibility:loadHandler:) - - Swift.Void - - registerObject(ofClass:visibility:loadHandler:) - - registeredTypeIdentifiers - - registeredTypeIdentifiers(fileOptions:) - - suggestedName - - NSItemProviderFileOptions @done @unsupported @requiresOSSupport - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - openInPlace - - rawValue - - NSItemProviderPreferredImageSizeKey @done @unsupported @requiresOSSupport - - NSItemProviderReading @done @unsupported @requiresOSSupport - - object(withItemProviderData:typeIdentifier:) - - readableTypeIdentifiersForItemProvider - - NSItemProviderRepresentationVisibility @done @unsupported @requiresOSSupport - - RawValue - - all - - group - - init(rawValue:) - - ownProcess - - rawValue - - NSItemProviderWriting @done @unsupported @requiresOSSupport - - itemProviderVisibilityForRepresentation(withTypeIdentifier:) - - itemProviderVisibilityForRepresentation(withTypeIdentifier:) - - loadData(withTypeIdentifier:forItemProviderCompletionHandler:) - - writableTypeIdentifiersForItemProvider - - writableTypeIdentifiersForItemProvider - - NSJapaneseCalendar @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSJapaneseEUCStringEncoding @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSKeySpecifierEvaluationScriptError @done @unsupported @requiresOSSupport - - NSKeyValueChange @done @unsupported @keyValueCodingObservingNotSupported - - RawValue - - init(rawValue:) - - insertion - - rawValue - - removal - - replacement - - setting - - NSKeyValueChangeKey @done @unsupported @keyValueCodingObservingNotSupported - - RawValue - - _ObjectiveCType - - indexesKey - - init(rawValue:) - - kindKey - - newKey - - notificationIsPriorKey - - oldKey - - rawValue - - NSKeyValueObservation @done @unsupported @keyValueCodingObservingNotSupported - - init() - - invalidate() - - NSKeyValueObservedChange @done @unsupported @keyValueCodingObservingNotSupported - - Kind - - indexes - - isPrior - - kind - - Foundation.NSKeyValueObservedChange.Kind - - newValue - - oldValue - - NSKeyValueObservingCustomization @done @unsupported @keyValueCodingObservingNotSupported - - automaticallyNotifiesObservers(for:) - - keyPathsAffectingValue(for:) - - NSKeyValueObservingOptions @done @unsupported @keyValueCodingObservingNotSupported - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - initial - - new - - old - - prior - - rawValue - - NSKeyValueOperator @done @unsupported @keyValueCodingObservingNotSupported - - RawValue - - _ObjectiveCType - - averageKeyValueOperator - - countKeyValueOperator - - distinctUnionOfArraysKeyValueOperator - - distinctUnionOfObjectsKeyValueOperator - - distinctUnionOfSetsKeyValueOperator - - init(rawValue:) - - maximumKeyValueOperator - - minimumKeyValueOperator - - rawValue - - sumKeyValueOperator - - unionOfArraysKeyValueOperator - - unionOfObjectsKeyValueOperator - - unionOfSetsKeyValueOperator - - NSKeyValueSetMutationKind @done @unsupported @keyValueCodingObservingNotSupported - - RawValue - - init(rawValue:) - - intersect - - minus - - rawValue - - set - - union - - NSKeyValueValidationError @done @unsupported @keyValueCodingObservingNotSupported - - NSKeyedArchiveRootObjectKey @done - - NSKeyedArchiver @done - - archiveRootObject(_:toFile:) - - archivedData(withRootObject:) - - archivedData(withRootObject:requiringSecureCoding:) - - className(for:) - - Swift.AnyClass - - className(for:) - - Swift.AnyClass - - delegate - - encode(_:forKey:) - - Swift.Void - - encode(_:forKey:) - - Swift.Void - - encode(_:forKey:) - - Swift.Void - - encode(_:forKey:) - - Swift.Void - - encode(_:forKey:) - - Swift.Void - - encode(_:forKey:) - - Swift.Void - - encodeBytes(_:length:forKey:) - - Swift.Void - - encodeConditionalObject(_:forKey:) - - Swift.Void - - encodeEncodable(_:forKey:) - - encodedData - - finishEncoding() - - Swift.Void - - init() - - init(forWritingWith:) - - init(requiringSecureCoding:) - - outputFormat - - requiresSecureCoding - - setClassName(_:for:) - - Swift.AnyClass - - Swift.Void - - setClassName(_:for:) - - Swift.AnyClass - - Swift.Void - - NSKeyedArchiverDelegate @done - - archiver(_:didEncode:) - - Swift.Void - - archiver(_:willEncode:) - - archiver(_:willReplace:with:) - - Swift.Void - - archiverDidFinish(_:) - - Swift.Void - - archiverWillFinish(_:) - - Swift.Void - - NSKeyedUnarchiver @done - - class(forClassName:) - - class(forClassName:) - - containsValue(forKey:) - - decodeBool(forKey:) - - decodeBytes(forKey:returnedLength:) - - decodeDecodable(_:forKey:) - - decodeDouble(forKey:) - - decodeFloat(forKey:) - - decodeInt32(forKey:) - - decodeInt64(forKey:) - - decodeObject(forKey:) - - decodeTopLevelDecodable(_:forKey:) - - decodingFailurePolicy - - delegate - - finishDecoding() - - Swift.Void - - init() - - init(forReadingFrom:) - - init(forReadingWith:) - - requiresSecureCoding - - setClass(_:forClassName:) - - Swift.Void - - setClass(_:forClassName:) - - Swift.Void - - unarchiveObject(with:) - - unarchiveObject(withFile:) - - unarchiveTopLevelObjectWithData(_:) - - unarchivedObject(ofClass:from:) - - unarchivedObject(ofClasses:from:) - - NSKeyedUnarchiverDelegate @done - - unarchiver(_:cannotDecodeObjectOfClassName:originalClasses:) - - unarchiver(_:didDecode:) - - unarchiver(_:willReplace:with:) - - Swift.Void - - unarchiverDidFinish(_:) - - Swift.Void - - unarchiverWillFinish(_:) - - Swift.Void - - NSLinguisticTag @done @unsupported @orthographyNotAvailable - - RawValue - - _ObjectiveCType - - adjective - - adverb - - classifier - - closeParenthesis - - closeQuote - - conjunction - - dash - - determiner - - idiom - - init(_:) - - init(rawValue:) - - interjection - - noun - - number - - openParenthesis - - openQuote - - organizationName - - other - - otherPunctuation - - otherWhitespace - - otherWord - - paragraphBreak - - particle - - personalName - - placeName - - preposition - - pronoun - - punctuation - - rawValue - - sentenceTerminator - - verb - - whitespace - - word - - wordJoiner - - NSLinguisticTagScheme @done @unsupported @orthographyNotAvailable - - RawValue - - _ObjectiveCType - - init(_:) - - init(rawValue:) - - language - - lemma - - lexicalClass - - nameType - - nameTypeOrLexicalClass - - rawValue - - script - - tokenType - - NSLinguisticTagger @done @unsupported @orthographyNotAvailable - - Options - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - joinNames - - omitOther - - omitPunctuation - - omitWhitespace - - omitWords - - rawValue - - availableTagSchemes(for:language:) - - availableTagSchemes(forLanguage:) - - dominantLanguage - - dominantLanguage(for:) - - enumerateTags(for:range:unit:scheme:options:orthography:using:) - - Foundation.NSRange - - Swift.Void - - enumerateTags(in:scheme:options:using:) - - Foundation.NSRange - - Swift.Void - - enumerateTags(in:unit:scheme:options:using:) - - Foundation.NSRange - - Swift.Void - - init() - - init(tagSchemes:options:) - - orthography(at:effectiveRange:) - - possibleTags(at:scheme:tokenRange:sentenceRange:scores:) - - sentenceRange(for:) - - Foundation.NSRange - - Foundation.NSRange - - setOrthography(_:range:) - - Foundation.NSRange - - Swift.Void - - string - - stringEdited(in:changeInLength:) - - Foundation.NSRange - - Swift.Void - - tag(at:scheme:tokenRange:sentenceRange:) - - tag(at:unit:scheme:tokenRange:) - - tag(for:at:unit:scheme:orthography:tokenRange:) - - tagSchemes - - tags(for:range:unit:scheme:options:orthography:tokenRanges:) - - Foundation.NSRange - - tags(in:scheme:options:tokenRanges:) - - Foundation.NSRange - - tags(in:unit:scheme:options:tokenRanges:) - - Foundation.NSRange - - tokenRange(at:unit:) - - Foundation.NSRange - - NSLinguisticTaggerUnit @done @unsupported @orthographyNotAvailable - - RawValue - - document - - init(rawValue:) - - paragraph - - rawValue - - sentence - - word - - NSLoadedClasses @done @unsupported @runtimeIntrospectionNotSupported - - NSLocale @done - - Key - - RawValue - - _ObjectiveCType - - alternateQuotationBeginDelimiterKey - - alternateQuotationEndDelimiterKey - - calendar - - collationIdentifier - - collatorIdentifier - - countryCode - - currencyCode - - currencySymbol - - decimalSeparator - - exemplarCharacterSet - - groupingSeparator - - identifier - - init(rawValue:) - - languageCode - - measurementSystem - - quotationBeginDelimiterKey - - quotationEndDelimiterKey - - rawValue - - scriptCode - - usesMetricSystem - - variantCode - - LanguageDirection - - RawValue - - bottomToTop - - init(rawValue:) - - leftToRight - - rawValue - - rightToLeft - - topToBottom - - unknown - - alternateQuotationBeginDelimiter - - alternateQuotationEndDelimiter - - autoupdatingCurrent - - availableLocaleIdentifiers - - calendarIdentifier - - canonicalLanguageIdentifier(from:) - - canonicalLocaleIdentifier(from:) - - characterDirection(forLanguage:) - - collationIdentifier - - collatorIdentifier - - commonISOCurrencyCodes - - components(fromLocaleIdentifier:) - - countryCode - - currencyCode - - currencySymbol - - current - - currentLocaleDidChangeNotification - - decimalSeparator - - displayName(forKey:value:) - - exemplarCharacterSet - - groupingSeparator - - init() - - init(coder:) - - init(localeIdentifier:) - - isoCountryCodes - - isoCurrencyCodes - - isoLanguageCodes - - languageCode - - lineDirection(forLanguage:) - - localeIdentifier - - localeIdentifier(fromComponents:) - - localeIdentifier(fromWindowsLocaleCode:) - - localizedString(forCalendarIdentifier:) - - localizedString(forCollationIdentifier:) - - localizedString(forCollatorIdentifier:) - - localizedString(forCountryCode:) - - localizedString(forCurrencyCode:) - - localizedString(forLanguageCode:) - - localizedString(forLocaleIdentifier:) - - localizedString(forScriptCode:) - - localizedString(forVariantCode:) - - object(forKey:) - - preferredLanguages - - quotationBeginDelimiter - - quotationEndDelimiter - - scriptCode - - system - - usesMetricSystem - - variantCode - - windowsLocaleCode(fromLocaleIdentifier:) - - NSLocalizedDescriptionKey @done - - NSLocalizedFailureErrorKey @done - - NSLocalizedFailureReasonErrorKey @done - - NSLocalizedRecoveryOptionsErrorKey @done - - NSLocalizedRecoverySuggestionErrorKey @done - - NSLocalizedString(_:tableName:bundle:value:comment:) @done - - NSLocationInRange(_:_:) - - Foundation.NSRange - - NSLock @done - - init() - - lock(before:) - - name - - try() - - NSLocking @done - - lock() - - Swift.Void - - unlock() - - Swift.Void - - NSLog(_:_:) @done - - NSLogPageSize() @done @unsupported @useSwiftForMemoryManagement - - NSLogicalTest @done @unsupported @requiresOSSupport - - init() - - init(andTestWith:) - - init(coder:) - - init(notTestWith:) - - init(orTestWith:) - - NSLogv(_:_:) @done - - Swift.Void @done - - NSMACHOperatingSystem - - NSMacOSRomanStringEncoding - - NSMachErrorDomain @done - - NSMachPort @done @unsupported @requiresOSSupport - - Options - - ArrayLiteralElement - - Element - - RawValue - - deallocateReceiveRight - - deallocateSendRight - - init(rawValue:) - - rawValue - - delegate() - - init() - - init(machPort:) - - init(machPort:options:) - - machPort - - port(withMachPort:) - - port(withMachPort:options:) - - remove(from:forMode:) - - Swift.Void - - schedule(in:forMode:) - - Swift.Void - - setDelegate(_:) - - Swift.Void - - NSMachPortDelegate @done @unsupported @requiresOSSupport - - handleMachMessage(_:) - - Swift.Void - - NSMakePoint(_:_:) @done - - Foundation.NSPoint @done - - NSMakeRange(_:_:) @done - - Foundation.NSRange @done - - NSMakeRect(_:_:_:_:) @done - - Foundation.NSRect @done - - NSMakeSize(_:_:) @done - - Foundation.NSSize @done - - NSMapEnumerator - - init() - - init(_pi:_si:_bs:) - - NSMapGet(_:_:) - - NSMapInsert(_:_:_:) - - Swift.Void - - NSMapInsertIfAbsent(_:_:_:) - - NSMapInsertKnownAbsent(_:_:_:) - - Swift.Void - - NSMapMember(_:_:_:_:) - - NSMapRemove(_:_:) - - Swift.Void - - NSMapTable - - count - - dictionaryRepresentation() - - init() - - init(keyOptions:valueOptions:) - - init(keyOptions:valueOptions:capacity:) - - init(keyPointerFunctions:valuePointerFunctions:capacity:) - - keyEnumerator() - - keyPointerFunctions - - object(forKey:) - - objectEnumerator() - - removeAllObjects() - - Swift.Void - - removeObject(forKey:) - - Swift.Void - - setObject(_:forKey:) - - Swift.Void - - strongToStrongObjects() - - strongToWeakObjects() - - valuePointerFunctions - - weakToStrongObjects() - - weakToWeakObjects() - - NSMapTableCopyIn - - NSMapTableKeyCallBacks - - init() - - init(hash:isEqual:retain:release:describe:notAKeyMarker:) - - NSMapTableObjectPointerPersonality - - NSMapTableOptions - - NSMapTableStrongMemory - - NSMapTableValueCallBacks - - init() - - init(retain:release:describe:) - - NSMapTableWeakMemory - - NSMaxRange(_:) @done - - Foundation.NSRange @done - - NSMaxX(_:) @done - - Foundation.NSRect @done - - NSMaxY(_:) @done - - Foundation.NSRect @done - - NSMeasurement @done - - adding(_:) - - canBeConverted(to:) - - converting(to:) - - doubleValue - - init(doubleValue:unit:) - - subtracting(_:) - - unit - - NSMetadataItem @done @unsupported @requiresOSSupport - - attributes - - init() - - init(url:) - - value(forAttribute:) - - values(forAttributes:) - - NSMetadataItemAcquisitionMakeKey @done @unsupported @requiresOSSupport - - NSMetadataItemAcquisitionModelKey @done @unsupported @requiresOSSupport - - NSMetadataItemAlbumKey @done @unsupported @requiresOSSupport - - NSMetadataItemAltitudeKey @done @unsupported @requiresOSSupport - - NSMetadataItemApertureKey @done @unsupported @requiresOSSupport - - NSMetadataItemAppleLoopDescriptorsKey @done @unsupported @requiresOSSupport - - NSMetadataItemAppleLoopsKeyFilterTypeKey @done @unsupported @requiresOSSupport - - NSMetadataItemAppleLoopsLoopModeKey @done @unsupported @requiresOSSupport - - NSMetadataItemAppleLoopsRootKeyKey @done @unsupported @requiresOSSupport - - NSMetadataItemApplicationCategoriesKey @done @unsupported @requiresOSSupport - - NSMetadataItemAttributeChangeDateKey @done @unsupported @requiresOSSupport - - NSMetadataItemAudiencesKey @done @unsupported @requiresOSSupport - - NSMetadataItemAudioBitRateKey @done @unsupported @requiresOSSupport - - NSMetadataItemAudioChannelCountKey @done @unsupported @requiresOSSupport - - NSMetadataItemAudioEncodingApplicationKey @done @unsupported @requiresOSSupport - - NSMetadataItemAudioSampleRateKey @done @unsupported @requiresOSSupport - - NSMetadataItemAudioTrackNumberKey @done @unsupported @requiresOSSupport - - NSMetadataItemAuthorAddressesKey @done @unsupported @requiresOSSupport - - NSMetadataItemAuthorEmailAddressesKey @done @unsupported @requiresOSSupport - - NSMetadataItemAuthorsKey @done @unsupported @requiresOSSupport - - NSMetadataItemBitsPerSampleKey @done @unsupported @requiresOSSupport - - NSMetadataItemCFBundleIdentifierKey @done @unsupported @requiresOSSupport - - NSMetadataItemCameraOwnerKey @done @unsupported @requiresOSSupport - - NSMetadataItemCityKey @done @unsupported @requiresOSSupport - - NSMetadataItemCodecsKey @done @unsupported @requiresOSSupport - - NSMetadataItemColorSpaceKey @done @unsupported @requiresOSSupport - - NSMetadataItemCommentKey @done @unsupported @requiresOSSupport - - NSMetadataItemComposerKey @done @unsupported @requiresOSSupport - - NSMetadataItemContactKeywordsKey @done @unsupported @requiresOSSupport - - NSMetadataItemContentCreationDateKey @done @unsupported @requiresOSSupport - - NSMetadataItemContentModificationDateKey @done @unsupported @requiresOSSupport - - NSMetadataItemContentTypeKey @done @unsupported @requiresOSSupport - - NSMetadataItemContentTypeTreeKey @done @unsupported @requiresOSSupport - - NSMetadataItemContributorsKey @done @unsupported @requiresOSSupport - - NSMetadataItemCopyrightKey @done @unsupported @requiresOSSupport - - NSMetadataItemCountryKey @done @unsupported @requiresOSSupport - - NSMetadataItemCoverageKey @done @unsupported @requiresOSSupport - - NSMetadataItemCreatorKey @done @unsupported @requiresOSSupport - - NSMetadataItemDateAddedKey @done @unsupported @requiresOSSupport - - NSMetadataItemDeliveryTypeKey @done @unsupported @requiresOSSupport - - NSMetadataItemDescriptionKey @done @unsupported @requiresOSSupport - - NSMetadataItemDirectorKey @done @unsupported @requiresOSSupport - - NSMetadataItemDisplayNameKey @done @unsupported @requiresOSSupport - - NSMetadataItemDownloadedDateKey @done @unsupported @requiresOSSupport - - NSMetadataItemDueDateKey @done @unsupported @requiresOSSupport - - NSMetadataItemDurationSecondsKey @done @unsupported @requiresOSSupport - - NSMetadataItemEXIFGPSVersionKey @done @unsupported @requiresOSSupport - - NSMetadataItemEXIFVersionKey @done @unsupported @requiresOSSupport - - NSMetadataItemEditorsKey @done @unsupported @requiresOSSupport - - NSMetadataItemEmailAddressesKey @done @unsupported @requiresOSSupport - - NSMetadataItemEncodingApplicationsKey @done @unsupported @requiresOSSupport - - NSMetadataItemExecutableArchitecturesKey @done @unsupported @requiresOSSupport - - NSMetadataItemExecutablePlatformKey @done @unsupported @requiresOSSupport - - NSMetadataItemExposureModeKey @done @unsupported @requiresOSSupport - - NSMetadataItemExposureProgramKey @done @unsupported @requiresOSSupport - - NSMetadataItemExposureTimeSecondsKey @done @unsupported @requiresOSSupport - - NSMetadataItemExposureTimeStringKey @done @unsupported @requiresOSSupport - - NSMetadataItemFNumberKey @done @unsupported @requiresOSSupport - - NSMetadataItemFSContentChangeDateKey @done @unsupported @requiresOSSupport - - NSMetadataItemFSCreationDateKey @done @unsupported @requiresOSSupport - - NSMetadataItemFSNameKey @done @unsupported @requiresOSSupport - - NSMetadataItemFSSizeKey @done @unsupported @requiresOSSupport - - NSMetadataItemFinderCommentKey @done @unsupported @requiresOSSupport - - NSMetadataItemFlashOnOffKey @done @unsupported @requiresOSSupport - - NSMetadataItemFocalLength35mmKey @done @unsupported @requiresOSSupport - - NSMetadataItemFocalLengthKey @done @unsupported @requiresOSSupport - - NSMetadataItemFontsKey @done @unsupported @requiresOSSupport - - NSMetadataItemGPSAreaInformationKey @done @unsupported @requiresOSSupport - - NSMetadataItemGPSDOPKey @done @unsupported @requiresOSSupport - - NSMetadataItemGPSDateStampKey @done @unsupported @requiresOSSupport - - NSMetadataItemGPSDestBearingKey @done @unsupported @requiresOSSupport - - NSMetadataItemGPSDestDistanceKey @done @unsupported @requiresOSSupport - - NSMetadataItemGPSDestLatitudeKey @done @unsupported @requiresOSSupport - - NSMetadataItemGPSDestLongitudeKey @done @unsupported @requiresOSSupport - - NSMetadataItemGPSDifferentalKey @done @unsupported @requiresOSSupport - - NSMetadataItemGPSMapDatumKey @done @unsupported @requiresOSSupport - - NSMetadataItemGPSMeasureModeKey @done @unsupported @requiresOSSupport - - NSMetadataItemGPSProcessingMethodKey @done @unsupported @requiresOSSupport - - NSMetadataItemGPSStatusKey @done @unsupported @requiresOSSupport - - NSMetadataItemGPSTrackKey @done @unsupported @requiresOSSupport - - NSMetadataItemGenreKey @done @unsupported @requiresOSSupport - - NSMetadataItemHasAlphaChannelKey @done @unsupported @requiresOSSupport - - NSMetadataItemHeadlineKey @done @unsupported @requiresOSSupport - - NSMetadataItemISOSpeedKey @done @unsupported @requiresOSSupport - - NSMetadataItemIdentifierKey @done @unsupported @requiresOSSupport - - NSMetadataItemImageDirectionKey @done @unsupported @requiresOSSupport - - NSMetadataItemInformationKey @done @unsupported @requiresOSSupport - - NSMetadataItemInstantMessageAddressesKey @done @unsupported @requiresOSSupport - - NSMetadataItemInstructionsKey @done @unsupported @requiresOSSupport - - NSMetadataItemIsApplicationManagedKey @done @unsupported @requiresOSSupport - - NSMetadataItemIsGeneralMIDISequenceKey @done @unsupported @requiresOSSupport - - NSMetadataItemIsLikelyJunkKey @done @unsupported @requiresOSSupport - - NSMetadataItemIsUbiquitousKey @done @unsupported @requiresOSSupport - - NSMetadataItemKeySignatureKey @done @unsupported @requiresOSSupport - - NSMetadataItemKeywordsKey @done @unsupported @requiresOSSupport - - NSMetadataItemKindKey @done @unsupported @requiresOSSupport - - NSMetadataItemLanguagesKey @done @unsupported @requiresOSSupport - - NSMetadataItemLastUsedDateKey @done @unsupported @requiresOSSupport - - NSMetadataItemLatitudeKey @done @unsupported @requiresOSSupport - - NSMetadataItemLayerNamesKey @done @unsupported @requiresOSSupport - - NSMetadataItemLensModelKey @done @unsupported @requiresOSSupport - - NSMetadataItemLongitudeKey @done @unsupported @requiresOSSupport - - NSMetadataItemLyricistKey @done @unsupported @requiresOSSupport - - NSMetadataItemMaxApertureKey @done @unsupported @requiresOSSupport - - NSMetadataItemMediaTypesKey @done @unsupported @requiresOSSupport - - NSMetadataItemMeteringModeKey @done @unsupported @requiresOSSupport - - NSMetadataItemMusicalGenreKey @done @unsupported @requiresOSSupport - - NSMetadataItemMusicalInstrumentCategoryKey @done @unsupported @requiresOSSupport - - NSMetadataItemMusicalInstrumentNameKey @done @unsupported @requiresOSSupport - - NSMetadataItemNamedLocationKey @done @unsupported @requiresOSSupport - - NSMetadataItemNumberOfPagesKey @done @unsupported @requiresOSSupport - - NSMetadataItemOrganizationsKey @done @unsupported @requiresOSSupport - - NSMetadataItemOrientationKey @done @unsupported @requiresOSSupport - - NSMetadataItemOriginalFormatKey @done @unsupported @requiresOSSupport - - NSMetadataItemOriginalSourceKey @done @unsupported @requiresOSSupport - - NSMetadataItemPageHeightKey @done @unsupported @requiresOSSupport - - NSMetadataItemPageWidthKey @done @unsupported @requiresOSSupport - - NSMetadataItemParticipantsKey @done @unsupported @requiresOSSupport - - NSMetadataItemPathKey @done @unsupported @requiresOSSupport - - NSMetadataItemPerformersKey @done @unsupported @requiresOSSupport - - NSMetadataItemPhoneNumbersKey @done @unsupported @requiresOSSupport - - NSMetadataItemPixelCountKey @done @unsupported @requiresOSSupport - - NSMetadataItemPixelHeightKey @done @unsupported @requiresOSSupport - - NSMetadataItemPixelWidthKey @done @unsupported @requiresOSSupport - - NSMetadataItemProducerKey @done @unsupported @requiresOSSupport - - NSMetadataItemProfileNameKey @done @unsupported @requiresOSSupport - - NSMetadataItemProjectsKey @done @unsupported @requiresOSSupport - - NSMetadataItemPublishersKey @done @unsupported @requiresOSSupport - - NSMetadataItemRecipientAddressesKey @done @unsupported @requiresOSSupport - - NSMetadataItemRecipientEmailAddressesKey @done @unsupported @requiresOSSupport - - NSMetadataItemRecipientsKey @done @unsupported @requiresOSSupport - - NSMetadataItemRecordingDateKey @done @unsupported @requiresOSSupport - - NSMetadataItemRecordingYearKey @done @unsupported @requiresOSSupport - - NSMetadataItemRedEyeOnOffKey @done @unsupported @requiresOSSupport - - NSMetadataItemResolutionHeightDPIKey @done @unsupported @requiresOSSupport - - NSMetadataItemResolutionWidthDPIKey @done @unsupported @requiresOSSupport - - NSMetadataItemRightsKey @done @unsupported @requiresOSSupport - - NSMetadataItemSecurityMethodKey @done @unsupported @requiresOSSupport - - NSMetadataItemSpeedKey @done @unsupported @requiresOSSupport - - NSMetadataItemStarRatingKey @done @unsupported @requiresOSSupport - - NSMetadataItemStateOrProvinceKey @done @unsupported @requiresOSSupport - - NSMetadataItemStreamableKey @done @unsupported @requiresOSSupport - - NSMetadataItemSubjectKey @done @unsupported @requiresOSSupport - - NSMetadataItemTempoKey @done @unsupported @requiresOSSupport - - NSMetadataItemTextContentKey @done @unsupported @requiresOSSupport - - NSMetadataItemThemeKey @done @unsupported @requiresOSSupport - - NSMetadataItemTimeSignatureKey @done @unsupported @requiresOSSupport - - NSMetadataItemTimestampKey @done @unsupported @requiresOSSupport - - NSMetadataItemTitleKey @done @unsupported @requiresOSSupport - - NSMetadataItemTotalBitRateKey @done @unsupported @requiresOSSupport - - NSMetadataItemURLKey @done @unsupported @requiresOSSupport - - NSMetadataItemVersionKey @done @unsupported @requiresOSSupport - - NSMetadataItemVideoBitRateKey @done @unsupported @requiresOSSupport - - NSMetadataItemWhereFromsKey @done @unsupported @requiresOSSupport - - NSMetadataItemWhiteBalanceKey @done @unsupported @requiresOSSupport - - NSMetadataQuery @done @unsupported @requiresOSSupport - - delegate - - disableUpdates() - - Swift.Void - - enableUpdates() - - Swift.Void - - enumerateResults(_:) - - Swift.Void - - enumerateResults(options:using:) - - Swift.Void - - groupedResults - - groupingAttributes - - index(ofResult:) - - init() - - isGathering - - isStarted - - isStopped - - notificationBatchingInterval - - Foundation.TimeInterval - - operationQueue - - predicate - - result(at:) - - resultCount - - results - - searchItems - - searchScopes - - sortDescriptors - - start() - - stop() - - Swift.Void - - value(ofAttribute:forResultAt:) - - valueListAttributes - - valueLists - - NSMetadataQueryAccessibleUbiquitousExternalDocumentsScope @done @unsupported @requiresOSSupport - - NSMetadataQueryAttributeValueTuple @done @unsupported @requiresOSSupport - - attribute - - count - - init() - - value - - NSMetadataQueryDelegate @done @unsupported @requiresOSSupport - - metadataQuery(_:replacementObjectForResultObject:) - - metadataQuery(_:replacementValueForAttribute:value:) - - NSMetadataQueryIndexedLocalComputerScope @done @unsupported @requiresOSSupport - - NSMetadataQueryIndexedNetworkScope @done @unsupported @requiresOSSupport - - NSMetadataQueryLocalComputerScope @done @unsupported @requiresOSSupport - - NSMetadataQueryNetworkScope @done @unsupported @requiresOSSupport - - NSMetadataQueryResultContentRelevanceAttribute @done @unsupported @requiresOSSupport - - NSMetadataQueryResultGroup @done @unsupported @requiresOSSupport - - attribute - - init() - - result(at:) - - resultCount - - results - - subgroups - - value - - NSMetadataQueryUbiquitousDataScope @done @unsupported @requiresOSSupport - - NSMetadataQueryUbiquitousDocumentsScope @done @unsupported @requiresOSSupport - - NSMetadataQueryUpdateAddedItemsKey @done @unsupported @requiresOSSupport - - NSMetadataQueryUpdateChangedItemsKey @done @unsupported @requiresOSSupport - - NSMetadataQueryUpdateRemovedItemsKey @done @unsupported @requiresOSSupport - - NSMetadataQueryUserHomeScope @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemContainerDisplayNameKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemDownloadRequestedKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemDownloadingErrorKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemDownloadingStatusCurrent @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemDownloadingStatusDownloaded @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemDownloadingStatusKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemDownloadingStatusNotDownloaded @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemHasUnresolvedConflictsKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemIsDownloadingKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemIsExternalDocumentKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemIsSharedKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemIsUploadedKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemIsUploadingKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemPercentDownloadedKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemPercentUploadedKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemURLInLocalContainerKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousItemUploadingErrorKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousSharedItemCurrentUserPermissionsKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousSharedItemCurrentUserRoleKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousSharedItemMostRecentEditorNameComponentsKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousSharedItemOwnerNameComponentsKey @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousSharedItemPermissionsReadOnly @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousSharedItemPermissionsReadWrite @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousSharedItemRoleOwner @done @unsupported @requiresOSSupport - - NSMetadataUbiquitousSharedItemRoleParticipant @done @unsupported @requiresOSSupport - - NSMidX(_:) @done - - Foundation.NSRect @done - - NSMidY(_:) @done - - Foundation.NSRect @done - - NSMiddleSpecifier @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - init(containerClassDescription:containerSpecifier:key:) - - init(containerSpecifier:key:) - - NSMinX(_:) @done - - Foundation.NSRect @done - - NSMinY(_:) @done - - Foundation.NSRect @done - - NSMouseInRect(_:_:_:) @done - - Foundation.NSPoint @done - - Foundation.NSRect @done - - NSMoveCommand @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - init(commandDescription:) - - keySpecifier - - setReceiversSpecifier(_:) - - Swift.Void - - NSMutableArray @done - - add(_:) - - Swift.Void - - addObjects(from:) - - Swift.Void - - apply(_:) - - Swift.Void - - exchangeObject(at:withObjectAt:) - - Swift.Void - - filter(using:) - - Swift.Void - - init() - - init(array:) - - init(array:copyItems:) - - init(capacity:) - - init(coder:) - - init(contentsOf:) - - init(contentsOf:error:) - - init(contentsOfFile:) - - init(objects:count:) - - insert(_:at:) - - Swift.Void - - insert(_:at:) - - Swift.Void - - remove(_:) - - Swift.Void - - remove(_:in:) - - Foundation.NSRange - - Swift.Void - - removeAllObjects() - - Swift.Void - - removeLastObject() - - Swift.Void - - removeObject(at:) - - Swift.Void - - removeObject(identicalTo:) - - Swift.Void - - removeObject(identicalTo:in:) - - Foundation.NSRange - - Swift.Void - - removeObjects(at:) - - Swift.Void - - removeObjects(in:) - - Swift.Void - - removeObjects(in:) - - Foundation.NSRange - - Swift.Void - - replaceObject(at:with:) - - Swift.Void - - replaceObjects(at:with:) - - Swift.Void - - replaceObjects(in:withObjectsFrom:) - - Foundation.NSRange - - Swift.Void - - replaceObjects(in:withObjectsFrom:range:) - - Foundation.NSRange - - Foundation.NSRange - - Swift.Void - - setArray(_:) - - Swift.Void - - sort(_:context:) - - Swift.Void - - sort(comparator:) - - Swift.Void - - sort(options:usingComparator:) - - Swift.Void - - sort(using:) - - Swift.Void - - sort(using:) - - Swift.Void - - subscript(_:) - - NSMutableAttributedString @done - - addAttribute(_:value:range:) - - Foundation.NSRange - - Swift.Void - - addAttributes(_:range:) - - Foundation.NSRange - - Swift.Void - - append(_:) - - Swift.Void - - beginEditing() - - Swift.Void - - deleteCharacters(in:) - - Foundation.NSRange - - Swift.Void - - endEditing() - - Swift.Void - - init() - - init(attributedString:) - - init(string:) - - init(string:attributes:) - - insert(_:at:) - - Swift.Void - - mutableString - - removeAttribute(_:range:) - - Foundation.NSRange - - Swift.Void - - replaceCharacters(in:with:) - - Foundation.NSRange - - Swift.Void - - replaceCharacters(in:with:) - - Foundation.NSRange - - Swift.Void - - setAttributedString(_:) - - Swift.Void - - setAttributes(_:range:) - - Foundation.NSRange - - Swift.Void - - NSMutableCharacterSet @done - - addCharacters(in:) - - Foundation.NSRange - - Swift.Void - - addCharacters(in:) - - Swift.Void - - alphanumeric() - - capitalizedLetter() - - control() - - decimalDigit() - - decomposable() - - formIntersection(with:) - - Swift.Void - - formUnion(with:) - - Swift.Void - - illegal() - - init() - - init(bitmapRepresentation:) - - init(charactersIn:) - - init(coder:) - - init(contentsOfFile:) - - init(range:) - - Foundation.NSRange - - invert() - - Swift.Void - - letter() - - lowercaseLetter() - - newline() - - nonBase() - - punctuation() - - removeCharacters(in:) - - Foundation.NSRange - - Swift.Void - - removeCharacters(in:) - - Swift.Void - - symbol() - - uppercaseLetter() - - whitespace() - - whitespaceAndNewline() - - NSMutableCopying @done - - mutableCopy(with:) - - NSMutableData - - append(_:) @done - - Swift.Void @done - - append(_:length:) @done - - Swift.Void @done - - compress(using:) - - decompress(using:) - - increaseLength(by:) @done - - Swift.Void @done - - init() @done - - init(base64Encoded:options:) @done - - init(base64Encoded:options:) @done - - init(bytes:length:) @done - - init(bytesNoCopy:length:) @done - - init(bytesNoCopy:length:deallocator:) @done - - init(bytesNoCopy:length:freeWhenDone:) @done - - init(capacity:) @done - - init(contentsOf:) @done - - init(contentsOf:options:) @done - - init(contentsOfFile:) @done - - init(contentsOfFile:options:) @done - - init(contentsOfMappedFile:) @done - - init(data:) @done - - init(length:) @done - - length @done - - mutableBytes @done - - replaceBytes(in:withBytes:) @done - - Foundation.NSRange @done - - Swift.Void @done - - replaceBytes(in:withBytes:length:) @done - - Foundation.NSRange @done - - Swift.Void @done - - resetBytes(in:) @done - - Foundation.NSRange @done - - Swift.Void @done - - setData(_:) @done - - Swift.Void @done - - NSMutableDictionary @done - - addEntries(from:) - - Swift.Void - - init() - - init(capacity:) - - init(coder:) - - init(contentsOf:) - - init(contentsOf:error:) - - init(contentsOfFile:) - - init(dictionary:) - - init(dictionary:copyItems:) - - init(objects:forKeys:) - - init(objects:forKeys:count:) - - init(sharedKeySet:) - - removeAllObjects() - - Swift.Void - - removeObject(forKey:) - - Swift.Void - - removeObjects(forKeys:) - - Swift.Void - - setDictionary(_:) - - Swift.Void - - setObject(_:forKey:) - - Swift.Void - - setValue(_:forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - subscript(_:) - - subscript(_:) - - NSMutableIndexSet @done - - add(_:) - - Swift.Void - - add(_:) - - Swift.Void - - add(in:) - - Foundation.NSRange - - Swift.Void - - init() - - init(index:) - - init(indexSet:) - - init(indexesIn:) - - Foundation.NSRange - - remove(_:) - - Swift.Void - - remove(_:) - - Swift.Void - - remove(in:) - - Foundation.NSRange - - Swift.Void - - removeAllIndexes() - - Swift.Void - - shiftIndexesStarting(at:by:) - - Swift.Void - - NSMutableOrderedSet @done - - add(_:) - - Swift.Void - - add(_:count:) - - Swift.Void - - addObjects(from:) - - Swift.Void - - apply(_:) - - Swift.Void - - exchangeObject(at:withObjectAt:) - - Swift.Void - - filter(using:) - - Swift.Void - - init() - - init(array:) - - init(array:copyItems:) - - init(array:range:copyItems:) - - Foundation.NSRange - - init(capacity:) - - init(coder:) - - init(object:) - - init(objects:count:) - - init(orderedSet:) - - init(orderedSet:copyItems:) - - init(orderedSet:range:copyItems:) - - Foundation.NSRange - - init(set:) - - init(set:copyItems:) - - insert(_:at:) - - Swift.Void - - insert(_:at:) - - Swift.Void - - intersect(_:) - - Swift.Void - - intersectSet(_:) - - Swift.Void - - minus(_:) - - Swift.Void - - minusSet(_:) - - Swift.Void - - moveObjects(at:to:) - - Swift.Void - - remove(_:) - - Swift.Void - - removeAllObjects() - - Swift.Void - - removeObject(at:) - - Swift.Void - - removeObjects(at:) - - Swift.Void - - removeObjects(in:) - - Foundation.NSRange - - Swift.Void - - removeObjects(in:) - - Swift.Void - - replaceObject(at:with:) - - Swift.Void - - replaceObjects(at:with:) - - Swift.Void - - replaceObjects(in:with:count:) - - Foundation.NSRange - - Swift.Void - - setObject(_:at:) - - Swift.Void - - sort(comparator:) - - Swift.Void - - sort(options:usingComparator:) - - Swift.Void - - sort(using:) - - Swift.Void - - sortRange(_:options:usingComparator:) - - Foundation.NSRange - - Swift.Void - - subscript(_:) - - union(_:) - - Swift.Void - - unionSet(_:) - - Swift.Void - - NSMutableSet @done - - add(_:) - - Swift.Void - - addObjects(from:) - - Swift.Void - - filter(using:) - - Swift.Void - - init() - - init(array:) - - init(capacity:) - - init(coder:) - - init(objects:count:) - - init(set:) - - init(set:copyItems:) - - intersect(_:) - - Swift.Void - - minus(_:) - - Swift.Void - - remove(_:) - - Swift.Void - - removeAllObjects() - - Swift.Void - - setSet(_:) - - Swift.Void - - union(_:) - - Swift.Void - - NSMutableString @done - - append(_:) - - Swift.Void - - appendFormat(_:_:) - - applyTransform(_:reverse:range:updatedRange:) - - Foundation.NSRange - - deleteCharacters(in:) - - Foundation.NSRange - - Swift.Void - - init() - - init(bytes:length:encoding:) - - init(bytesNoCopy:length:encoding:freeWhenDone:) - - init(cString:encoding:) - - init(capacity:) - - init(characters:length:) - - init(charactersNoCopy:length:freeWhenDone:) - - init(coder:) - - init(contentsOf:encoding:) - - init(contentsOf:usedEncoding:) - - init(contentsOfFile:encoding:) - - init(contentsOfFile:usedEncoding:) - - init(data:encoding:) - - init(format:arguments:) - - init(format:locale:arguments:) - - init(string:) - - init(utf8String:) - - insert(_:at:) - - Swift.Void - - replaceCharacters(in:with:) - - Foundation.NSRange - - Swift.Void - - replaceOccurrences(of:with:options:range:) - - Foundation.NSRange - - setString(_:) - - Swift.Void - - NSMutableURLRequest - - addValue(_:forHTTPHeaderField:) @done - - Swift.Void @done - - allHTTPHeaderFields @done - - allowsCellularAccess @done - - allowsConstrainedNetworkAccess - - allowsExpensiveNetworkAccess - - cachePolicy @done - - httpBody @done - - httpBodyStream @done - - httpMethod @done - - httpShouldHandleCookies @done - - httpShouldUsePipelining @done - - init() @done - - init(url:) @done - - init(url:cachePolicy:timeoutInterval:) @done - - Foundation.TimeInterval @done - - mainDocumentURL @done - - networkServiceType @done - - setValue(_:forHTTPHeaderField:) @done - - Swift.Void @done - - timeoutInterval @done - - Foundation.TimeInterval @done - - url @done - - NSNEXTSTEPStringEncoding @done - - NSNameSpecifier @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - init(containerClassDescription:containerSpecifier:key:) - - init(containerClassDescription:containerSpecifier:key:name:) - - init(containerSpecifier:key:) - - name - - NSNextHashEnumeratorItem(_:) - - NSNextMapEnumeratorPair(_:_:_:) - - NSNoScriptError @done @unsupported @requiresOSSupport - - NSNoSpecifierError @done @unsupported @requiresOSSupport - - NSNoTopLevelContainersSpecifierError @done @unsupported @requiresOSSupport - - NSNonLossyASCIIStringEncoding @done - - NSNonOwnedPointerHashCallBacks - - NSNonOwnedPointerMapKeyCallBacks - - NSNonOwnedPointerMapValueCallBacks - - NSNonOwnedPointerOrNullMapKeyCallBacks - - NSNonRetainedObjectHashCallBacks - - NSNonRetainedObjectMapKeyCallBacks - - NSNonRetainedObjectMapValueCallBacks - - NSNotFound @done - - NSNotFound @done - - NSNotification - - Name - - NSAppleEventManagerWillProcessFirstEvent @done @unsupported @requiresOSSupport - - NSCalendarDayChanged - - NSClassDescriptionNeededForClass @done @unsupported @requiresOSSupport - - NSDidBecomeSingleThreaded - - NSFileHandleConnectionAccepted @done - - NSFileHandleDataAvailable @done - - NSFileHandleReadToEndOfFileCompletion @done - - NSHTTPCookieManagerAcceptPolicyChanged - - NSHTTPCookieManagerCookiesChanged @done - - NSMetadataQueryDidFinishGathering @done @unsupported @requiresOSSupport - - NSMetadataQueryDidStartGathering @done @unsupported @requiresOSSupport - - NSMetadataQueryDidUpdate @done @unsupported @requiresOSSupport - - NSMetadataQueryGatheringProgress @done @unsupported @requiresOSSupport - - NSSystemClockDidChange - - NSSystemTimeZoneDidChange @done - - NSThreadWillExit @done - - NSURLCredentialStorageChanged @done - - NSUbiquityIdentityDidChange @done @unsupported @requiresOSSupport - - NSUndoManagerCheckpoint - - NSUndoManagerDidCloseUndoGroup - - NSUndoManagerDidOpenUndoGroup - - NSUndoManagerDidRedoChange - - NSUndoManagerDidUndoChange - - NSUndoManagerWillCloseUndoGroup - - NSUndoManagerWillRedoChange - - NSUndoManagerWillUndoChange - - NSWillBecomeMultiThreaded @done - - RawValue @done - - _ObjectiveCType @done - - init(_:) @done - - init(rawValue:) @done - - rawValue @done - - init() @done - - init(coder:) @done - - init(name:object:) @done - - init(name:object:userInfo:) @done - - name @done - - object @done - - userInfo @done - - NSNotificationDeliverImmediately @done @unsupported @requiresOSSupport - - NSNotificationPostToAllSessions @done @unsupported @requiresOSSupport - - NSNull @done - - init() @done - - NSNumber @done - - BooleanLiteralType @done - - FloatLiteralType @done - - IntegerLiteralType @done - - boolValue @done - - compare(_:) @done - - decimalValue @done - - description(withLocale:) @done - - doubleValue @done - - floatValue @done - - init() @done - - init(booleanLiteral:) @done - - init(bytes:objCType:) @done - - init(coder:) @done - - init(floatLiteral:) @done - - init(integerLiteral:) @done - - init(value:) @done - - init(value:) @done - - init(value:) @done - - init(value:) @done - - init(value:) @done - - init(value:) @done - - init(value:) @done - - init(value:) @done - - init(value:) @done - - init(value:) @done - - init(value:) @done - - init(value:) @done - - init(value:) @done - - int16Value @done - - int32Value @done - - int64Value @done - - int8Value @done - - intValue @done - - isEqual(to:) @done - - stringValue @done - - uint16Value @done - - uint32Value @done - - uint64Value @done - - uint8Value @done - - uintValue @done - - NSOSF1OperatingSystem - - NSOSStatusErrorDomain @done - - NSObject - - KeyValueObservingPublisher @done @unsupported @keyValueCodingObservingNotSupported - - ==(_:_:) - - Failure - - Output - - didChange() - - init(object:keyPath:options:) - - keyPath - - object - - options - - receive(subscriber:) - - accessInstanceVariablesDirectly @done @unsupported @keyValueCodingObservingNotSupported - - addObserver(_:forKeyPath:options:context:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void @done @unsupported @keyValueCodingObservingNotSupported - - addObserver(_:forKeyPath:options:context:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void @done @unsupported @keyValueCodingObservingNotSupported - - attemptRecovery(fromError:optionIndex:) @done @unsupported @informalProtocolsNotSupported - - attemptRecovery(fromError:optionIndex:) @done @unsupported @informalProtocolsNotSupported - - attemptRecovery(fromError:optionIndex:delegate:didRecoverSelector:contextInfo:) @done @unsupported @informalProtocolsNotSupported - - Swift.Void @done @unsupported @informalProtocolsNotSupported - - attemptRecovery(fromError:optionIndex:delegate:didRecoverSelector:contextInfo:) @done @unsupported @informalProtocolsNotSupported - - Swift.Void @done @unsupported @informalProtocolsNotSupported - - attributeKeys @done @unsupported @requiresOSSupport - - attributeKeys() @done @unsupported @requiresOSSupport - - autoContentAccessingProxy @done @unsupported @proxiesNotSupported - - autoContentAccessingProxy() @done @unsupported @proxiesNotSupported - - automaticallyNotifiesObservers(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - awakeAfter(using:) - - cancelPreviousPerformRequests(withTarget:) @done @unsupported @selectorsNotSupported - - Swift.Void - - cancelPreviousPerformRequests(withTarget:selector:object:) @done @unsupported @selectorsNotSupported - - Swift.Void - - classCode @done @unsupported @requiresOSSupport - - Darwin.FourCharCode - - classCode() @done @unsupported @requiresOSSupport - - Darwin.FourCharCode - - classDescription @done @unsupported @requiresOSSupport - - classDescription() @done @unsupported @requiresOSSupport - - classFallbacksForKeyedArchiver() @done - - classForArchiver @done @unsupported @nonkeyedArchivingNotSupported - - classForArchiver() @done @unsupported @nonkeyedArchivingNotSupported - - classForCoder @done - - Swift.AnyClass - - classForCoder() @done - - Swift.AnyClass - - classForKeyedArchiver @done - - classForKeyedArchiver() @done - - classForKeyedUnarchiver() @done - - Swift.AnyClass - - classForPortCoder() @done @unsupported @distributedObjectsNotSupported - - Swift.AnyClass - - className @done @unsupported @requiresOSSupport - - className() @done @unsupported @requiresOSSupport - - coerceValue(_:forKey:) @done @unsupported @requiresOSSupport - - coerceValue(_:forKey:) @done @unsupported @requiresOSSupport - - copyScriptingValue(_:forKey:withProperties:) @done @unsupported @requiresOSSupport - - copyScriptingValue(_:forKey:withProperties:) @done @unsupported @requiresOSSupport - - dictionaryWithValues(forKeys:) @done @unsupported @keyValueCodingObservingNotSupported - - dictionaryWithValues(forKeys:) @done @unsupported @keyValueCodingObservingNotSupported - - didChange(_:valuesAt:forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - didChange(_:valuesAt:forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - didChangeValue(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - didChangeValue(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - didChangeValue(forKey:withSetMutation:using:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - didChangeValue(forKey:withSetMutation:using:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - doesContain(_:) @done @unsupported @requiresOSSupport - - doesContain(_:) @done @unsupported @requiresOSSupport - - indicesOfObjects(byEvaluatingObjectSpecifier:) @done @unsupported @requiresOSSupport - - indicesOfObjects(byEvaluatingObjectSpecifier:) @done @unsupported @requiresOSSupport - - insertValue(_:at:inPropertyWithKey:) @done @unsupported @requiresOSSupport - - Swift.Void - - insertValue(_:at:inPropertyWithKey:) @done @unsupported @requiresOSSupport - - Swift.Void - - insertValue(_:inPropertyWithKey:) @done @unsupported @requiresOSSupport - - Swift.Void - - insertValue(_:inPropertyWithKey:) @done @unsupported @requiresOSSupport - - Swift.Void - - inverse(forRelationshipKey:) @done @unsupported @requiresOSSupport - - inverse(forRelationshipKey:) @done @unsupported @requiresOSSupport - - isCaseInsensitiveLike(_:) @done @unsupported @requiresOSSupport - - isCaseInsensitiveLike(_:) @done @unsupported @requiresOSSupport - - isEqual(to:) @done @unsupported @requiresOSSupport - - isEqual(to:) @done @unsupported @requiresOSSupport - - isGreaterThan(_:) @done @unsupported @requiresOSSupport - - isGreaterThan(_:) @done @unsupported @requiresOSSupport - - isGreaterThanOrEqual(to:) @done @unsupported @requiresOSSupport - - isGreaterThanOrEqual(to:) @done @unsupported @requiresOSSupport - - isLessThan(_:) @done @unsupported @requiresOSSupport - - isLessThan(_:) @done @unsupported @requiresOSSupport - - isLessThanOrEqual(to:) @done @unsupported @requiresOSSupport - - isLessThanOrEqual(to:) @done @unsupported @requiresOSSupport - - isLike(_:) @done @unsupported @requiresOSSupport - - isLike(_:) @done @unsupported @requiresOSSupport - - isNotEqual(to:) @done @unsupported @requiresOSSupport - - isNotEqual(to:) @done @unsupported @requiresOSSupport - - keyPathsForValuesAffectingValue(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - mutableArrayValue(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - mutableArrayValue(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - mutableArrayValue(forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - mutableArrayValue(forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - mutableOrderedSetValue(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - mutableOrderedSetValue(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - mutableOrderedSetValue(forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - mutableOrderedSetValue(forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - mutableSetValue(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - mutableSetValue(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - mutableSetValue(forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - mutableSetValue(forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - newScriptingObject(of:forValueForKey:withContentsValue:properties:) @done @unsupported @requiresOSSupport - - Swift.AnyClass - - newScriptingObject(of:forValueForKey:withContentsValue:properties:) @done @unsupported @requiresOSSupport - - Swift.AnyClass - - objectSpecifier @done @unsupported @requiresOSSupport - - objectSpecifier() @done @unsupported @requiresOSSupport - - observationInfo @done @unsupported @keyValueCodingObservingNotSupported - - observationInfo() @done @unsupported @keyValueCodingObservingNotSupported - - observeValue(forKeyPath:of:change:context:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - observeValue(forKeyPath:of:change:context:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - perform(_:on:with:waitUntilDone:) @done @unsupported @selectorsNotSupported - - Swift.Void - - perform(_:on:with:waitUntilDone:) @done @unsupported @selectorsNotSupported - - Swift.Void - - perform(_:on:with:waitUntilDone:modes:) @done @unsupported @selectorsNotSupported - - Swift.Void - - perform(_:on:with:waitUntilDone:modes:) @done @unsupported @selectorsNotSupported - - Swift.Void - - perform(_:with:afterDelay:) @done @unsupported @selectorsNotSupported - - Foundation.TimeInterval - - Swift.Void - - perform(_:with:afterDelay:) @done @unsupported @selectorsNotSupported - - Foundation.TimeInterval - - Swift.Void - - perform(_:with:afterDelay:inModes:) @done @unsupported @selectorsNotSupported - - Foundation.TimeInterval - - Swift.Void - - perform(_:with:afterDelay:inModes:) @done @unsupported @selectorsNotSupported - - Foundation.TimeInterval - - Swift.Void - - performSelector(inBackground:with:) @done @unsupported @selectorsNotSupported - - Swift.Void - - performSelector(inBackground:with:) @done @unsupported @selectorsNotSupported - - Swift.Void - - performSelector(onMainThread:with:waitUntilDone:) @done @unsupported @selectorsNotSupported - - Swift.Void - - performSelector(onMainThread:with:waitUntilDone:) @done @unsupported @selectorsNotSupported - - Swift.Void - - performSelector(onMainThread:with:waitUntilDone:modes:) @done @unsupported @selectorsNotSupported - - Swift.Void - - performSelector(onMainThread:with:waitUntilDone:modes:) @done @unsupported @selectorsNotSupported - - Swift.Void - - removeObserver(_:forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - removeObserver(_:forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - removeObserver(_:forKeyPath:context:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - removeObserver(_:forKeyPath:context:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - removeValue(at:fromPropertyWithKey:) @done @unsupported @requiresOSSupport - - Swift.Void - - removeValue(at:fromPropertyWithKey:) @done @unsupported @requiresOSSupport - - Swift.Void - - replaceValue(at:inPropertyWithKey:withValue:) @done @unsupported @requiresOSSupport - - Swift.Void - - replaceValue(at:inPropertyWithKey:withValue:) @done @unsupported @requiresOSSupport - - Swift.Void - - replacementObject(for:) @done @unsupported @requiresOSSupport - - scriptingBegins(with:) @done @unsupported @requiresOSSupport - - scriptingContains(_:) @done @unsupported @requiresOSSupport - - scriptingEnds(with:) @done @unsupported @requiresOSSupport - - scriptingIsEqual(to:) @done @unsupported @requiresOSSupport - - scriptingIsGreaterThan(_:) @done @unsupported @requiresOSSupport - - scriptingIsGreaterThanOrEqual(to:) @done @unsupported @requiresOSSupport - - scriptingIsLessThan(_:) @done @unsupported @requiresOSSupport - - scriptingIsLessThanOrEqual(to:) @done @unsupported @requiresOSSupport - - scriptingProperties @done @unsupported @requiresOSSupport - - scriptingProperties() @done @unsupported @requiresOSSupport - - scriptingValue(for:) @done @unsupported @requiresOSSupport - - setNilValueForKey(_:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - setNilValueForKey(_:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - setObservationInfo(_:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - setScriptingProperties(_:) @done @unsupported @requiresOSSupport - - Swift.Void - - setValue(_:forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - setValue(_:forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - setValue(_:forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - setValue(_:forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - setValue(_:forUndefinedKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - setValue(_:forUndefinedKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - setValuesForKeys(_:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - setValuesForKeys(_:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - setVersion(_:) @done @unsupported @nonkeyedArchivingNotSupported - - Swift.Void - - toManyRelationshipKeys @done @unsupported @requiresOSSupport - - toManyRelationshipKeys() @done @unsupported @requiresOSSupport - - toOneRelationshipKeys @done @unsupported @requiresOSSupport - - toOneRelationshipKeys() @done @unsupported @requiresOSSupport - - validateValue(_:forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - validateValue(_:forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - validateValue(_:forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - validateValue(_:forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - value(at:inPropertyWithKey:) @done @unsupported @requiresOSSupport - - value(at:inPropertyWithKey:) @done @unsupported @requiresOSSupport - - value(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - value(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - value(forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - value(forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - value(forUndefinedKey:) @done @unsupported @keyValueCodingObservingNotSupported - - value(forUndefinedKey:) @done @unsupported @keyValueCodingObservingNotSupported - - value(withName:inPropertyWithKey:) @done @unsupported @requiresOSSupport - - value(withName:inPropertyWithKey:) @done @unsupported @requiresOSSupport - - value(withUniqueID:inPropertyWithKey:) @done @unsupported @requiresOSSupport - - value(withUniqueID:inPropertyWithKey:) @done @unsupported @requiresOSSupport - - version() @done @unsupported @nonkeyedArchivingNotSupported - - willChange(_:valuesAt:forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - willChange(_:valuesAt:forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - willChangeValue(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - willChangeValue(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - willChangeValue(forKey:withSetMutation:using:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - willChangeValue(forKey:withSetMutation:using:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - NSObjectHashCallBacks - - NSObjectMapKeyCallBacks - - NSObjectMapValueCallBacks - - NSOffsetRect(_:_:_:) @done - - Foundation.NSRect @done - - Foundation.NSRect @done - - NSOpenStepRootDirectory() - - NSOpenStepUnicodeReservedBase - - NSOperationNotSupportedForKeyException @done @unsupported @exceptionHandlingNotSupported - - NSOperationNotSupportedForKeyScriptError @done @unsupported @exceptionHandlingNotSupported - - NSOperationNotSupportedForKeySpecifierError @done @unsupported @exceptionHandlingNotSupported - - NSOrderedCollectionChange - - associatedIndex - - changeType - - index - - init(object:type:index:) - - init(object:type:index:associatedIndex:) - - object - - NSOrderedCollectionDifference - - hasChanges - - init() - - init(changes:) - - init(insert:insertedObjects:remove:removedObjects:) - - init(insert:insertedObjects:remove:removedObjects:additionalChanges:) - - insertions - - inverse() - - removals - - transformingChanges(_:) - - NSOrderedCollectionDifferenceCalculationOptions - - ArrayLiteralElement - - Element - - RawValue - - inferMoves - - init(rawValue:) - - omitInsertedObjects - - omitRemovedObjects - - rawValue - - NSOrderedSet @done - - ArrayLiteralElement - - Element - - Iterator - - addObserver(_:forKeyPath:options:context:) - - Swift.Void - - applying(_:) - - array - - contains(_:) - - count - - description - - description(withLocale:) - - description(withLocale:indent:) - - difference(from:) - - difference(from:with:) - - difference(from:with:usingEquivalenceTest:) - - enumerateObjects(_:) - - Swift.Void - - enumerateObjects(at:options:using:) - - Swift.Void - - enumerateObjects(options:using:) - - Swift.Void - - filtered(using:) - - firstObject - - index(_:ofObjectPassingTest:) - - index(of:) - - index(of:inSortedRange:options:usingComparator:) - - Foundation.NSRange - - index(ofObjectAt:options:passingTest:) - - index(ofObjectPassingTest:) - - indexes(ofObjectsAt:options:passingTest:) - - indexes(ofObjectsPassingTest:) - - indexes(options:ofObjectsPassingTest:) - - init() - - init(array:) - - init(array:copyItems:) - - init(array:range:copyItems:) - - Foundation.NSRange - - init(arrayLiteral:) - - init(coder:) - - init(object:) - - init(objects:) - - init(objects:count:) - - init(objects:count:) - - init(orderedSet:) - - init(orderedSet:copyItems:) - - init(orderedSet:range:copyItems:) - - Foundation.NSRange - - init(set:) - - init(set:copyItems:) - - intersects(_:) - - intersectsSet(_:) - - isEqual(to:) - - isSubset(of:) - - isSubset(of:) - - lastObject - - makeIterator() - - object(at:) - - objectEnumerator() - - objects(at:) - - removeObserver(_:forKeyPath:) - - Swift.Void - - removeObserver(_:forKeyPath:context:) - - Swift.Void - - reverseObjectEnumerator() - - reversed - - set - - setValue(_:forKey:) - - Swift.Void - - sortedArray(comparator:) - - sortedArray(options:usingComparator:) - - sortedArray(using:) - - subscript(_:) - - value(forKey:) - - NSOrthography @done @unsupported @orthographyNotAvailable - - allLanguages - - allScripts - - defaultOrthography(forLanguage:) - - dominantLanguage - - dominantLanguage(forScript:) - - dominantScript - - init() - - init(coder:) - - init(dominantScript:languageMap:) - - languageMap - - languages(forScript:) - - NSOwnedObjectIdentityHashCallBacks - - NSOwnedPointerHashCallBacks - - NSOwnedPointerMapKeyCallBacks - - NSOwnedPointerMapValueCallBacks - - NSPOSIXErrorDomain @done - - NSPageSize() @done - - NSPersianCalendar @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSPersonNameComponentDelimiter @done - - NSPersonNameComponentFamilyName @done - - NSPersonNameComponentGivenName @done - - NSPersonNameComponentKey @done - - NSPersonNameComponentMiddleName @done - - NSPersonNameComponentNickname @done - - NSPersonNameComponentPrefix @done - - NSPersonNameComponentSuffix @done - - NSPersonNameComponents @done - - familyName - - givenName - - init() - - middleName - - namePrefix - - nameSuffix - - nickname - - phoneticRepresentation - - NSPoint @done - - NSPointArray @done - - NSPointFromCGPoint(_:) @done - - Foundation.NSPoint - - NSPointFromString(_:) @done - - Foundation.NSPoint - - NSPointInRect(_:_:) @done - - Foundation.NSPoint - - Foundation.NSRect - - NSPointPointer @done - - NSPointToCGPoint(_:) @done - - Foundation.NSPoint - - NSPointerArray - - addPointer(_:) - - Swift.Void - - allObjects - - compact() - - Swift.Void - - count - - init() - - init(options:) - - init(pointerFunctions:) - - insertPointer(_:at:) - - Swift.Void - - pointer(at:) - - pointerFunctions - - removePointer(at:) - - Swift.Void - - replacePointer(at:withPointer:) - - Swift.Void - - strongObjects() - - weakObjects() - - NSPointerFunctions - - Options - - ArrayLiteralElement - - Element - - RawValue - - cStringPersonality - - copyIn - - init(rawValue:) - - integerPersonality - - machVirtualMemory - - mallocMemory - - objectPersonality - - objectPointerPersonality - - opaqueMemory - - opaquePersonality - - rawValue - - strongMemory - - structPersonality - - weakMemory - - acquireFunction - - descriptionFunction - - hashFunction - - init() - - init(options:) - - isEqualFunction - - relinquishFunction - - sizeFunction - - usesStrongWriteBarrier - - usesWeakReadAndWriteBarriers - - NSPointerToStructHashCallBacks - - NSPositionalSpecifier @done @unsupported @requiresOSSupport - - InsertionPosition - - RawValue - - after - - before - - beginning - - end - - init(rawValue:) - - rawValue - - replace - - evaluate() - - Swift.Void - - init() - - init(position:objectSpecifier:) - - insertionContainer - - insertionIndex - - insertionKey - - insertionReplaces - - objectSpecifier - - position - - setInsertionClassDescription(_:) - - Swift.Void - - NSPredicate @done @partiallySupported @keyValueCodingObservingNotSupported - - allowEvaluation() - - Swift.Void - - evaluate(with:) - - evaluate(with:substitutionVariables:) - - init() - - init(block:) - - init(format:_:) - - init(format:argumentArray:) - - init(format:arguments:) - - init(fromMetadataQueryString:) - - init(value:) - - predicateFormat - - withSubstitutionVariables(_:) - - NSPropertyListErrorMaximum - - NSPropertyListErrorMinimum - - NSPropertyListReadCorruptError @done - - NSPropertyListReadStreamError @done - - NSPropertyListReadUnknownVersionError @done - - NSPropertyListWriteInvalidError @done - - NSPropertyListWriteStreamError @done - - NSPropertySpecifier @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - init(containerClassDescription:containerSpecifier:key:) - - init(containerSpecifier:key:) - - NSProprietaryStringEncoding @done - - NSProtocolChecker @done @unsupported @proxiesNotSupported - - init(target:protocol:) - - protocol - - target - - NSProtocolFromString(_:) @done @unsupported @generalizedProtocolTypesNotSupported - - NSProxy @done @unsupported @proxiesNotSupported - - alloc() - - class() - - Swift.AnyClass - - dealloc() - - Swift.Void - - dealloc() - - Swift.Void - - debugDescription - - debugDescription() - - description - - description() - - finalize() - - Swift.Void - - finalize() - - Swift.Void - - forwardInvocation(_:) - - Swift.Void - - forwardInvocation(_:) - - Swift.Void - - responds(to:) - - NSPurgeableData - - init() - - init(base64Encoded:options:) - - init(base64Encoded:options:) - - init(bytes:length:) - - init(bytesNoCopy:length:) - - init(bytesNoCopy:length:deallocator:) - - init(bytesNoCopy:length:freeWhenDone:) - - init(capacity:) - - init(contentsOf:) - - init(contentsOf:options:) - - init(contentsOfFile:) - - init(contentsOfFile:options:) - - init(contentsOfMappedFile:) - - init(data:) - - init(length:) - - NSQuitCommand @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - init(commandDescription:) - - saveOptions - - NSRandomSpecifier @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - init(containerClassDescription:containerSpecifier:key:) - - init(containerSpecifier:key:) - - NSRange @done - - NSRangeFromString(_:) @done - - Foundation.NSRange - - NSRangePointer @done - - NSRangeSpecifier @done @unsupported @requiresOSSupport - - endSpecifier - - init() - - init(coder:) - - init(containerClassDescription:containerSpecifier:key:) - - init(containerClassDescription:containerSpecifier:key:start:end:) - - init(containerSpecifier:key:) - - startSpecifier - - NSReceiverEvaluationScriptError @done @unsupported @requiresOSSupport - - NSReceiversCantHandleCommandScriptError @done @unsupported @requiresOSSupport - - NSRecoveryAttempterErrorKey @done - - NSRect @done - - NSRectArray @done - - NSRectEdge @done - - RawValue - - init(rawValue:) - - init(rectEdge:) - - maxX - - maxY - - minX - - minY - - rawValue - - NSRectFromCGRect(_:) @done - - Foundation.NSRect - - NSRectFromString(_:) @done - - Foundation.NSRect - - NSRectPointer @done - - NSRectToCGRect(_:) @done - - Foundation.NSRect - - NSRecursiveLock @done - - init() - - lock(before:) - - name - - try() - - NSRegularExpression @done - - MatchingFlags - - ArrayLiteralElement - - Element - - RawValue - - completed - - hitEnd - - init(rawValue:) - - internalError - - progress - - rawValue - - requiredEnd - - MatchingOptions - - ArrayLiteralElement - - Element - - RawValue - - anchored - - init(rawValue:) - - rawValue - - reportCompletion - - reportProgress - - withTransparentBounds - - withoutAnchoringBounds - - Options - - ArrayLiteralElement - - Element - - RawValue - - allowCommentsAndWhitespace - - anchorsMatchLines - - caseInsensitive - - dotMatchesLineSeparators - - ignoreMetacharacters - - init(rawValue:) - - rawValue - - useUnicodeWordBoundaries - - useUnixLineSeparators - - enumerateMatches(in:options:range:using:) - - Foundation.NSRange - - Swift.Void - - escapedPattern(for:) - - escapedTemplate(for:) - - firstMatch(in:options:range:) - - Foundation.NSRange - - init() - - init(pattern:options:) - - matches(in:options:range:) - - Foundation.NSRange - - numberOfCaptureGroups - - numberOfMatches(in:options:range:) - - Foundation.NSRange - - options - - pattern - - rangeOfFirstMatch(in:options:range:) - - Foundation.NSRange - - Foundation.NSRange - - replaceMatches(in:options:range:withTemplate:) - - Foundation.NSRange - - replacementString(for:in:offset:template:) - - stringByReplacingMatches(in:options:range:withTemplate:) - - Foundation.NSRange - - NSRelativeSpecifier @done @unsupported @requiresOSSupport - - RelativePosition - - RawValue - - after - - before - - init(rawValue:) - - rawValue - - baseSpecifier - - init() - - init(coder:) - - init(containerClassDescription:containerSpecifier:key:) - - init(containerClassDescription:containerSpecifier:key:relativePosition:baseSpecifier:) - - init(containerSpecifier:key:) - - relativePosition - - NSRepublicOfChinaCalendar @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSRequiredArgumentsMissingScriptError @done @unsupported @requiresOSSupport - - NSResetHashTable(_:) - - Swift.Void - - NSResetMapTable(_:) - - Swift.Void - - NSRoundDownToMultipleOfPageSize(_:) @done - - NSRoundUpToMultipleOfPageSize(_:) @done - - NSSaveOptions @done @unsupported @requiresOSSupport - - RawValue - - ask - - init(rawValue:) - - no - - rawValue - - yes - - NSScannedOption @done @unsupported @garbageCollectionSymbolsNotSupported - - NSScriptClassDescription @done @unsupported @requiresOSSupport - - appleEventCode - - Darwin.FourCharCode - - appleEventCode(forKey:) - - Darwin.FourCharCode - - className - - defaultSubcontainerAttributeKey - - forKey(_:) - - hasOrderedToManyRelationship(forKey:) - - hasProperty(forKey:) - - hasReadableProperty(forKey:) - - hasWritableProperty(forKey:) - - implementationClassName - - init() - - init(for:) - - Swift.AnyClass - - init(suiteName:className:dictionary:) - - isLocationRequiredToCreate(forKey:) - - key(withAppleEventCode:) - - Darwin.FourCharCode - - matchesAppleEventCode(_:) - - Darwin.FourCharCode - - selector(forCommand:) - - suiteName - - superclass - - supportsCommand(_:) - - type(forKey:) - - NSScriptCoercionHandler @done @unsupported @requiresOSSupport - - coerceValue(_:to:) - - Swift.AnyClass - - init() - - registerCoercer(_:selector:toConvertFrom:to:) - - Swift.AnyClass - - Swift.AnyClass - - Swift.Void - - shared() - - NSScriptCommand @done @unsupported @requiresOSSupport - - appleEvent - - arguments - - commandDescription - - current() - - directParameter - - evaluatedArguments - - evaluatedReceivers - - execute() - - init() - - init(coder:) - - init(commandDescription:) - - isWellFormed - - performDefaultImplementation() - - receiversSpecifier - - resumeExecution(withResult:) - - Swift.Void - - scriptErrorExpectedTypeDescriptor - - scriptErrorNumber - - scriptErrorOffendingObjectDescriptor - - scriptErrorString - - suspendExecution() - - Swift.Void - - NSScriptCommandDescription @done @unsupported @requiresOSSupport - - appleEventClassCode - - Darwin.FourCharCode - - appleEventCode - - Darwin.FourCharCode - - appleEventCodeForArgument(withName:) - - Darwin.FourCharCode - - appleEventCodeForReturnType - - Darwin.FourCharCode - - argumentNames - - commandClassName - - commandName - - createCommandInstance() - - createCommandInstance(with:) - - init(coder:) - - init(suiteName:commandName:dictionary:) - - isOptionalArgument(withName:) - - returnType - - suiteName - - typeForArgument(withName:) - - NSScriptExecutionContext @done @unsupported @requiresOSSupport - - init() - - objectBeingTested - - rangeContainerObject - - shared() - - topLevelObject - - NSScriptObjectSpecifier @done @unsupported @requiresOSSupport - - child - - container - - containerClassDescription - - containerIsObjectBeingTested - - containerIsRangeContainerObject - - descriptor - - evaluationError - - evaluationErrorNumber - - indicesOfObjectsByEvaluating(withContainer:count:) - - init() - - init(coder:) - - init(containerClassDescription:containerSpecifier:key:) - - init(containerSpecifier:key:) - - init(descriptor:) - - key - - keyClassDescription - - objectsByEvaluating(withContainers:) - - objectsByEvaluatingSpecifier - - NSScriptSuiteRegistry @done @unsupported @requiresOSSupport - - aeteResource(_:) - - appleEventCode(forSuite:) - - Darwin.FourCharCode - - bundle(forSuite:) - - classDescription(withAppleEventCode:) - - Darwin.FourCharCode - - classDescriptions(inSuite:) - - commandDescription(withAppleEventClass:andAppleEventCode:) - - Darwin.FourCharCode - - Darwin.FourCharCode - - commandDescriptions(inSuite:) - - init() - - loadSuite(with:from:) - - Swift.Void - - loadSuites(from:) - - Swift.Void - - register(_:) - - Swift.Void - - register(_:) - - Swift.Void - - setShared(_:) - - Swift.Void - - shared() - - suite(forAppleEventCode:) - - Darwin.FourCharCode - - suiteNames - - NSScriptWhoseTest @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - isTrue() - - NSSearchPathForDirectoriesInDomains(_:_:_:) @done - - NSSecureCoding @done - - supportsSecureCoding - - NSSecureUnarchiveFromDataTransformer - - allowedTopLevelClasses - - init() - - NSSelectorFromString(_:) @done @unsupported @selectorsNotSupported - - NSSet @done - - ArrayLiteralElement - - Element - - Iterator - - addObserver(_:forKeyPath:options:context:) - - Swift.Void - - adding(_:) - - addingObjects(from:) - - addingObjects(from:) - - allObjects - - anyObject() - - contains(_:) - - count - - customMirror - - description - - description(withLocale:) - - enumerateObjects(_:) - - Swift.Void - - enumerateObjects(options:using:) - - Swift.Void - - filtered(using:) - - init() - - init(array:) - - init(arrayLiteral:) - - init(coder:) - - init(object:) - - init(objects:) - - init(objects:count:) - - init(objects:count:) - - init(set:) - - init(set:) - - init(set:copyItems:) - - intersects(_:) - - isEqual(to:) - - isSubset(of:) - - makeIterator() - - member(_:) - - objectEnumerator() - - objects(options:passingTest:) - - objects(passingTest:) - - removeObserver(_:forKeyPath:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - removeObserver(_:forKeyPath:context:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - setValue(_:forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - sortedArray(using:) - - value(forKey:) @done @unsupported @keyValueCodingObservingNotSupported - - NSSetCommand @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - init(commandDescription:) - - keySpecifier - - setReceiversSpecifier(_:) - - Swift.Void - - NSSetUncaughtExceptionHandler(_:) @done @unsupported @exceptionHandlingNotSupported - - Swift.Void - - NSShiftJISStringEncoding @done - - NSSize @done - - NSSizeArray @done - - NSSizeFromCGSize(_:) @done - - Foundation.NSSize - - NSSizeFromString(_:) @done - - Foundation.NSSize - - NSSizePointer @done - - NSSizeToCGSize(_:) @done - - Foundation.NSSize - - NSSolarisOperatingSystem - - NSSortDescriptor @done @partiallySupported - - allowEvaluation() @done @unsupported @keyValueCodingObservingNotSupported - - Swift.Void - - ascending - - comparator - - Foundation.Comparator - - compare(_:to:) - - init() - - init(coder:) - - init(key:ascending:) @done @unsupported @keyValueCodingObservingNotSupported - - init(key:ascending:comparator:) @done @unsupported @keyValueCodingObservingNotSupported - - Foundation.Comparator - - init(key:ascending:selector:) @done @unsupported @keyValueCodingObservingNotSupported - - init(keyPath:ascending:) - - init(keyPath:ascending:comparator:) - - Foundation.Comparator - - key @done @unsupported @keyValueCodingObservingNotSupported - - keyPath - - reversedSortDescriptor - - selector - - NSSortOptions @done - - ArrayLiteralElement - - Element - - RawValue - - concurrent - - init(rawValue:) - - rawValue - - stable - - NSSpecifierTest @done @unsupported @requiresOSSupport - - TestComparisonOperation - - RawValue - - beginsWith - - contains - - endsWith - - equal - - greaterThan - - greaterThanOrEqual - - init(rawValue:) - - lessThan - - lessThanOrEqual - - rawValue - - init(coder:) - - init(objectSpecifier:comparisonOperator:test:) - - NSSpellServer @done @unsupported @requiresOSSupport @orthographyNotAvailable - - delegate - - init() - - isWord(inUserDictionaries:caseSensitive:) - - registerLanguage(_:byVendor:) - - run() - - Swift.Void - - NSSpellServerDelegate @done @unsupported @requiresOSSupport @orthographyNotAvailable - - spellServer(_:check:offset:types:options:orthography:wordCount:) - - Foundation.NSTextCheckingTypes - - spellServer(_:checkGrammarIn:language:details:) - - Foundation.NSRange - - spellServer(_:didForgetWord:inLanguage:) - - Swift.Void - - spellServer(_:didLearnWord:inLanguage:) - - Swift.Void - - spellServer(_:findMisspelledWordIn:language:wordCount:countOnly:) - - Foundation.NSRange - - spellServer(_:recordResponse:toCorrection:forWord:language:) - - Swift.Void - - spellServer(_:suggestCompletionsForPartialWordRange:in:language:) - - Foundation.NSRange - - spellServer(_:suggestGuessesForWord:inLanguage:) - - NSStreamSOCKSErrorDomain @done - - NSStreamSocketSSLErrorDomain @done - - NSString - - CompareOptions @done - - ArrayLiteralElement - - Element - - RawValue - - anchored - - backwards - - caseInsensitive - - diacriticInsensitive - - forcedOrdering - - init(rawValue:) - - literal - - numeric - - rawValue - - regularExpression - - widthInsensitive - - EncodingConversionOptions @done - - ArrayLiteralElement - - Element - - RawValue - - allowLossy - - externalRepresentation - - init(rawValue:) - - rawValue - - EnumerationOptions @done - - ArrayLiteralElement - - Element - - RawValue - - byComposedCharacterSequences - - byLines - - byParagraphs - - bySentences @done @unsupported @orthographyNotAvailable - - byWords @done @unsupported @orthographyNotAvailable - - init(rawValue:) - - localized - - rawValue - - reverse - - substringNotRequired - - ExtendedGraphemeClusterLiteralType @done - - StringLiteralType @done - - UnicodeScalarLiteralType @done - - abbreviatingWithTildeInPath @done - - addingPercentEncoding(withAllowedCharacters:) @done - - addingPercentEscapes(using:) @done - - appending(_:) @done - - appendingFormat(_:_:) @done - - appendingPathComponent(_:) @done - - appendingPathExtension(_:) @done - - applyingTransform(_:reverse:) @done - - availableStringEncodings @done - - boolValue @done - - cString(using:) @done - - canBeConverted(to:) @done - - capitalized @done - - capitalized(with:) @done - - caseInsensitiveCompare(_:) @done - - character(at:) @done - - Foundation.unichar @done - - commonPrefix(with:options:) @done - - compare(_:) @done - - compare(_:options:) @done - - compare(_:options:range:) @done - - Foundation.NSRange @done - - compare(_:options:range:locale:) @done - - Foundation.NSRange @done - - completePath(into:caseSensitive:matchesInto:filterTypes:) @done - - components(separatedBy:) @done - - components(separatedBy:) @done - - contains(_:) @done - - customPlaygroundQuickLook @done @unsupported @playgroundsNotSupported - - Swift.PlaygroundQuickLook @done @unsupported @playgroundsNotSupported - - data(using:) @done - - data(using:allowLossyConversion:) @done - - decomposedStringWithCanonicalMapping @done - - decomposedStringWithCompatibilityMapping @done - - defaultCStringEncoding @done - - deletingLastPathComponent @done - - deletingPathExtension @done - - description @done - - doubleValue @done - - enumerateLines(_:) @done - - Swift.Void @done - - enumerateLinguisticTags(in:scheme:options:orthography:using:) @done @unsupported @orthographyNotAvailable - - Foundation.NSRange - - Swift.Void - - enumerateSubstrings(in:options:using:) @done - - Foundation.NSRange - - Swift.Void - - expandingTildeInPath @done - - fastestEncoding @done - - fileSystemRepresentation @done - - floatValue @done - - folding(options:locale:) @done - - getBytes(_:maxLength:usedLength:encoding:options:range:remaining:) @done - - Foundation.NSRange - - getCString(_:maxLength:encoding:) @done - - getCharacters(_:) @done - - Swift.Void - - getCharacters(_:range:) @done - - Foundation.NSRange - - Swift.Void - - getFileSystemRepresentation(_:maxLength:) @done - - getLineStart(_:end:contentsEnd:for:) @done - - Foundation.NSRange - - Swift.Void - - getParagraphStart(_:end:contentsEnd:for:) @done - - Foundation.NSRange - - Swift.Void - - hasPrefix(_:) @done - - hasSuffix(_:) @done - - hash @done - - init() @done - - init(bytes:length:encoding:) @done - - init(bytesNoCopy:length:encoding:freeWhenDone:) @done - - init(cString:encoding:) @done - - init(characters:length:) @done - - init(charactersNoCopy:length:freeWhenDone:) @done - - init(coder:) @done - - init(contentsOf:encoding:) @done - - init(contentsOf:usedEncoding:) @done - - init(contentsOfFile:encoding:) @done - - init(contentsOfFile:usedEncoding:) @done - - init(data:encoding:) @done - - init(format:_:) @done - - init(format:arguments:) @done - - init(format:locale:_:) @done - - init(format:locale:arguments:) @done - - init(string:) @done - - init(string:) @done - - init(stringLiteral:) @done - - init(utf8String:) @done - - intValue @done - - integerValue @done - - isAbsolutePath @done - - isEqual(to:) @done - - lastPathComponent @done - - length @done - - lengthOfBytes(using:) @done - - lineRange(for:) @done - - Foundation.NSRange - - Foundation.NSRange - - linguisticTags(in:scheme:options:orthography:tokenRanges:) @done @unsupported @orthographyNotAvailable - - Foundation.NSRange - - localizedCapitalized @done - - localizedCaseInsensitiveCompare(_:) @done - - localizedCaseInsensitiveContains(_:) @done - - localizedCompare(_:) @done - - localizedLowercase @done - - localizedName(of:) @done - - localizedStandardCompare(_:) @done - - localizedStandardContains(_:) @done - - localizedStandardRange(of:) @done - - Foundation.NSRange - - localizedStringWithFormat(_:_:) @done - - localizedUppercase @done - - longLongValue @done - - lowercased @done - - lowercased(with:) @done - - maximumLengthOfBytes(using:) @done - - padding(toLength:withPad:startingAt:) @done - - paragraphRange(for:) @done - - Foundation.NSRange - - Foundation.NSRange - - path(withComponents:) @done - - pathComponents @done - - pathExtension @done - - precomposedStringWithCanonicalMapping @done - - precomposedStringWithCompatibilityMapping @done - - propertyList() @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - propertyListFromStringsFileFormat() @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - range(of:) @done - - Foundation.NSRange @done - - range(of:options:) @done - - Foundation.NSRange @done - - range(of:options:range:) @done - - Foundation.NSRange @done - - Foundation.NSRange @done - - range(of:options:range:locale:) @done - - Foundation.NSRange @done - - Foundation.NSRange @done - - rangeOfCharacter(from:) @done - - Foundation.NSRange @done - - rangeOfCharacter(from:options:) @done - - Foundation.NSRange @done - - rangeOfCharacter(from:options:range:) @done - - Foundation.NSRange @done - - Foundation.NSRange @done - - rangeOfComposedCharacterSequence(at:) @done - - Foundation.NSRange @done - - rangeOfComposedCharacterSequences(for:) @done - - Foundation.NSRange @done - - Foundation.NSRange @done - - removingPercentEncoding @done - - replacingCharacters(in:with:) @done - - Foundation.NSRange @done - - replacingOccurrences(of:with:) @done - - replacingOccurrences(of:with:options:range:) @done - - Foundation.NSRange @done - - replacingPercentEscapes(using:) @done - - resolvingSymlinksInPath @done - - smallestEncoding @done - - standardizingPath @done - - stringEncoding(for:encodingOptions:convertedString:usedLossyConversion:) - - strings(byAppendingPaths:) @done - - substring(from:) @done - - substring(to:) @done - - substring(with:) @done - - Foundation.NSRange @done - - trimmingCharacters(in:) @done - - uppercased @done - - uppercased(with:) @done - - utf8String @done - - variantFittingPresentationWidth(_:) - - write(to:atomically:encoding:) @done - - write(toFile:atomically:encoding:) @done - - NSStringEncodingErrorKey @done - - NSStringFromClass(_:) @done - - Swift.AnyClass - - NSStringFromHashTable(_:) - - NSStringFromMapTable(_:) - - NSStringFromPoint(_:) - - Foundation.NSPoint - - NSStringFromProtocol(_:) @done @unsupported @generalizedProtocolTypesNotSupported - - NSStringFromRange(_:) @done - - Foundation.NSRange - - NSStringFromRect(_:) @done - - Foundation.NSRect - - NSStringFromSelector(_:) @done @unsupported @selectorsNotSupported - - NSStringFromSize(_:) @done - - Foundation.NSSize - - NSSunOSOperatingSystem - - NSSwapBigDoubleToHost(_:) - - NSSwapBigFloatToHost(_:) - - NSSwapBigIntToHost(_:) - - NSSwapBigLongLongToHost(_:) - - NSSwapBigLongToHost(_:) - - NSSwapBigShortToHost(_:) - - NSSwapDouble(_:) - - NSSwapFloat(_:) - - NSSwapHostDoubleToBig(_:) - - NSSwapHostDoubleToLittle(_:) - - NSSwapHostFloatToBig(_:) - - NSSwapHostFloatToLittle(_:) - - NSSwapHostIntToBig(_:) - - NSSwapHostIntToLittle(_:) - - NSSwapHostLongLongToBig(_:) - - NSSwapHostLongLongToLittle(_:) - - NSSwapHostLongToBig(_:) - - NSSwapHostLongToLittle(_:) - - NSSwapHostShortToBig(_:) - - NSSwapHostShortToLittle(_:) - - NSSwapInt(_:) - - NSSwapLittleDoubleToHost(_:) - - NSSwapLittleFloatToHost(_:) - - NSSwapLittleIntToHost(_:) - - NSSwapLittleLongLongToHost(_:) - - NSSwapLittleLongToHost(_:) - - NSSwapLittleShortToHost(_:) - - NSSwapLong(_:) - - NSSwapLongLong(_:) - - NSSwapShort(_:) - - NSSwappedDouble - - init() - - init(v:) - - NSSwappedFloat - - init() - - init(v:) - - NSSymbolStringEncoding @done - - NSTemporaryDirectory() @done - - NSTextCheckingAllCustomTypes - - Foundation.NSTextCheckingTypes - - NSTextCheckingAllSystemTypes - - Foundation.NSTextCheckingTypes - - NSTextCheckingAllTypes - - Foundation.NSTextCheckingTypes - - NSTextCheckingKey @done - - RawValue - - _ObjectiveCType - - airline - - city - - country - - flight - - init(_:) - - init(rawValue:) - - jobTitle - - name - - organization - - phone - - rawValue - - state - - street - - zip - - NSTextCheckingResult @done @partiallySupported @onlyRegularExpressionTextCheckingResultsSupported - - CheckingType - - ArrayLiteralElement - - Element - - RawValue - - address - - allCustomTypes - - allSystemTypes - - allTypes - - correction - - dash - - date - - grammar - - init(rawValue:) - - link - - orthography - - phoneNumber - - quote - - rawValue - - regularExpression - - replacement - - spelling - - transitInformation - - addressCheckingResult(range:components:) - - Foundation.NSRange - - addressComponents - - adjustingRanges(offset:) - - alternativeStrings - - components - - correctionCheckingResult(range:replacementString:) - - Foundation.NSRange - - correctionCheckingResult(range:replacementString:alternativeStrings:) - - Foundation.NSRange - - dashCheckingResult(range:replacementString:) - - Foundation.NSRange - - date - - dateCheckingResult(range:date:) - - Foundation.NSRange - - dateCheckingResult(range:date:timeZone:duration:) - - Foundation.NSRange - - Foundation.TimeInterval - - duration - - Foundation.TimeInterval - - grammarCheckingResult(range:details:) - - Foundation.NSRange - - grammarDetails - - init() - - linkCheckingResult(range:url:) - - Foundation.NSRange - - numberOfRanges - - orthography - - orthographyCheckingResult(range:orthography:) - - Foundation.NSRange - - phoneNumber - - phoneNumberCheckingResult(range:phoneNumber:) - - Foundation.NSRange - - quoteCheckingResult(range:replacementString:) - - Foundation.NSRange - - range - - Foundation.NSRange - - range(at:) - - Foundation.NSRange - - range(withName:) - - Foundation.NSRange - - regularExpression - - regularExpressionCheckingResult(ranges:count:regularExpression:) - - Foundation.NSRangePointer - - replacementCheckingResult(range:replacementString:) - - Foundation.NSRange - - replacementString - - resultType - - spellCheckingResult(range:) - - Foundation.NSRange - - timeZone - - transitInformationCheckingResult(range:components:) - - Foundation.NSRange - - url - - NSTextCheckingTypes - - NSTimeIntervalSince1970 @done - - NSTimeZone @done - - NameStyle - - RawValue - - daylightSaving - - generic - - init(rawValue:) - - rawValue - - shortDaylightSaving - - shortGeneric - - shortStandard - - standard - - abbreviation - - abbreviation(for:) - - abbreviationDictionary - - data - - daylightSavingTimeOffset - - Foundation.TimeInterval - - daylightSavingTimeOffset(for:) - - Foundation.TimeInterval - - default - - description - - init() - - init(abbreviation:) - - init(forSecondsFromGMT:) - - init(name:) - - init(name:data:) - - isDaylightSavingTime - - isDaylightSavingTime(for:) - - isEqual(to:) - - knownTimeZoneNames - - local - - localizedName(_:locale:) - - name - - nextDaylightSavingTimeTransition - - nextDaylightSavingTimeTransition(after:) - - resetSystemTimeZone() - - Swift.Void - - secondsFromGMT - - secondsFromGMT(for:) - - system - - timeZoneDataVersion - - NSURL - - BookmarkCreationOptions @done @unsupported @requiresOSSupport - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - minimalBookmark - - rawValue - - securityScopeAllowOnlyReadAccess - - suitableForBookmarkFile - - withSecurityScope - - BookmarkFileCreationOptions @done @unsupported @requiresOSSupport - - BookmarkResolutionOptions @done @unsupported @requiresOSSupport - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - rawValue - - withSecurityScope - - withoutMounting - - withoutUI - - absoluteString @done - - absoluteURL @done - - absoluteURL(withDataRepresentation:relativeTo:) @done - - appendingPathComponent(_:) @done - - appendingPathComponent(_:isDirectory:) @done - - appendingPathExtension(_:) @done - - baseURL @done - - bookmarkData(options:includingResourceValuesForKeys:relativeTo:) @done @unsupported @requiresOSSupport - - bookmarkData(withContentsOf:) @done @unsupported @requiresOSSupport - - checkPromisedItemIsReachableAndReturnError(_:) @unsupported @requiresOSSupport - - Foundation.NSErrorPointer - - checkResourceIsReachableAndReturnError(_:) @unsupported @requiresOSSupport - - Foundation.NSErrorPointer - - customPlaygroundQuickLook @done @unsupported @playgroundsNotSupported - - Swift.PlaygroundQuickLook - - dataRepresentation @done - - deletingLastPathComponent @done - - deletingPathExtension @done - - filePathURL @done - - fileReferenceURL() @done - - fileSystemRepresentation @done - - fileURL(withFileSystemRepresentation:isDirectory:relativeTo:) @done - - fileURL(withPath:) @done - - fileURL(withPath:isDirectory:) @done - - fileURL(withPath:isDirectory:relativeTo:) @done - - fileURL(withPath:relativeTo:) @done - - fileURL(withPathComponents:) @done - - fragment @done - - getFileSystemRepresentation(_:maxLength:) @done - - getPromisedItemResourceValue(_:forKey:) @unsupported @requiresOSSupport - - getResourceValue(_:forKey:) @done - - hasDirectoryPath @done - - host @done - - init() @done - - init(absoluteURLWithDataRepresentation:relativeTo:) @done - - init(dataRepresentation:relativeTo:) @done - - init(fileURLWithFileSystemRepresentation:isDirectory:relativeTo:) @done - - init(fileURLWithPath:) @done - - init(fileURLWithPath:isDirectory:) @done - - init(fileURLWithPath:isDirectory:relativeTo:) @done - - init(fileURLWithPath:relativeTo:) @done - - init(resolvingAliasFileAt:options:) @done - - init(resolvingBookmarkData:options:relativeTo:bookmarkDataIsStale:) @done - - init(scheme:host:path:) @done - - init(string:) @done - - init(string:relativeTo:) @done - - isFileReferenceURL() @done - - isFileURL @done - - lastPathComponent @done - - parameterString @done - - password @done - - path @done - - pathComponents @done - - pathExtension @done - - port @done - - promisedItemResourceValues(forKeys:) @unsupported @requiresOSSupport - - query @done - - relativePath @done - - relativeString @done - - removeAllCachedResourceValues() @done - - Swift.Void @done - - removeCachedResourceValue(forKey:) @done - - Swift.Void @done - - resolvingSymlinksInPath @done - - resourceSpecifier @done - - resourceValues(forKeys:) @done - - resourceValues(forKeys:fromBookmarkData:) @done - - scheme @done - - setResourceValue(_:forKey:) @done - - setResourceValues(_:) @done - - setTemporaryResourceValue(_:forKey:) @done - - Swift.Void @done - - standardized @done - - standardizingPath @done - - startAccessingSecurityScopedResource() @unsupported @requiresOSSupport - - stopAccessingSecurityScopedResource() @unsupported @requiresOSSupport - - Swift.Void - - user - - writeBookmarkData(_:to:options:) - - Foundation.NSURL.BookmarkFileCreationOptions - - NSURLAuthenticationMethodClientCertificate @done - - NSURLAuthenticationMethodDefault @done - - NSURLAuthenticationMethodHTMLForm @done - - NSURLAuthenticationMethodHTTPBasic @done - - NSURLAuthenticationMethodHTTPDigest @done - - NSURLAuthenticationMethodNTLM @done - - NSURLAuthenticationMethodNegotiate @done - - NSURLAuthenticationMethodServerTrust @done - - NSURLComponents @done - - fragment - - host - - init() - - init(string:) - - init(url:resolvingAgainstBaseURL:) - - password - - path - - percentEncodedFragment - - percentEncodedHost - - percentEncodedPassword - - percentEncodedPath - - percentEncodedQuery - - percentEncodedQueryItems - - percentEncodedUser - - port - - query - - queryItems - - rangeOfFragment - - Foundation.NSRange - - rangeOfHost - - Foundation.NSRange - - rangeOfPassword - - Foundation.NSRange - - rangeOfPath - - Foundation.NSRange - - rangeOfPort - - Foundation.NSRange - - rangeOfQuery - - Foundation.NSRange - - rangeOfScheme - - Foundation.NSRange - - rangeOfUser - - Foundation.NSRange - - scheme - - string - - url - - url(relativeTo:) - - user - - NSURLConnection @done @unsupported @urlConnectionNotSupported - - canHandle(_:) - - cancel() - - Swift.Void - - currentRequest - - init() - - init(request:delegate:) - - init(request:delegate:startImmediately:) - - originalRequest - - schedule(in:forMode:) - - Swift.Void - - sendAsynchronousRequest(_:queue:completionHandler:) - - Swift.Void - - sendSynchronousRequest(_:returning:) - - setDelegateQueue(_:) - - Swift.Void - - start() - - Swift.Void - - unschedule(from:forMode:) - - Swift.Void - - NSURLConnectionDataDelegate @done @unsupported @urlConnectionNotSupported - - connection(_:didReceive:) - - Swift.Void - - connection(_:didReceive:) - - Swift.Void - - connection(_:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:) - - Swift.Void - - connection(_:needNewBodyStream:) - - connection(_:willCacheResponse:) - - connection(_:willSend:redirectResponse:) - - connectionDidFinishLoading(_:) - - Swift.Void - - NSURLConnectionDelegate @done @unsupported @urlConnectionNotSupported - - connection(_:canAuthenticateAgainstProtectionSpace:) - - connection(_:didCancel:) - - Swift.Void - - connection(_:didFailWithError:) - - Swift.Void - - connection(_:didReceive:) - - Swift.Void - - connection(_:willSendRequestFor:) - - Swift.Void - - connectionShouldUseCredentialStorage(_:) - - NSURLConnectionDownloadDelegate @done @unsupported @urlConnectionNotSupported - - connection(_:didWriteData:totalBytesWritten:expectedTotalBytes:) - - Swift.Void - - connectionDidFinishDownloading(_:destinationURL:) - - Swift.Void - - connectionDidResumeDownloading(_:totalBytesWritten:expectedTotalBytes:) - - Swift.Void - - NSURLCredentialStorageRemoveSynchronizableCredentials @done - - NSURLDownload @done @unsupported @urlConnectionNotSupported - - canResumeDownloadDecoded(withEncodingMIMEType:) - - cancel() - - Swift.Void - - deletesFileUponFailure - - init() - - init(request:delegate:) - - init(resumeData:delegate:path:) - - request - - resumeData - - setDestination(_:allowOverwrite:) - - Swift.Void - - NSURLDownloadDelegate @done @unsupported @urlConnectionNotSupported - - download(_:canAuthenticateAgainstProtectionSpace:) - - download(_:decideDestinationWithSuggestedFilename:) - - Swift.Void - - download(_:didCancel:) - - Swift.Void - - download(_:didCreateDestination:) - - Swift.Void - - download(_:didFailWithError:) - - Swift.Void - - download(_:didReceive:) - - Swift.Void - - download(_:didReceive:) - - Swift.Void - - download(_:didReceiveDataOfLength:) - - Swift.Void - - download(_:shouldDecodeSourceDataOfMIMEType:) - - download(_:willResumeWith:fromByte:) - - Swift.Void - - download(_:willSend:redirectResponse:) - - downloadDidBegin(_:) - - Swift.Void - - downloadDidFinish(_:) - - Swift.Void - - downloadShouldUseCredentialStorage(_:) - - NSURLErrorAppTransportSecurityRequiresSecureConnection @done - - NSURLErrorBackgroundSessionInUseByAnotherProcess @done - - NSURLErrorBackgroundSessionRequiresSharedContainer @done - - NSURLErrorBackgroundSessionWasDisconnected @done - - NSURLErrorBackgroundTaskCancelledReasonKey @done - - NSURLErrorBadServerResponse @done - - NSURLErrorBadURL @done - - NSURLErrorCallIsActive @done - - NSURLErrorCancelled @done - - NSURLErrorCancelledReasonBackgroundUpdatesDisabled @done - - NSURLErrorCancelledReasonInsufficientSystemResources @done - - NSURLErrorCancelledReasonUserForceQuitApplication @done - - NSURLErrorCannotCloseFile @done - - NSURLErrorCannotConnectToHost @done - - NSURLErrorCannotCreateFile @done - - NSURLErrorCannotDecodeContentData @done - - NSURLErrorCannotDecodeRawData @done - - NSURLErrorCannotFindHost @done - - NSURLErrorCannotLoadFromNetwork @done - - NSURLErrorCannotMoveFile @done - - NSURLErrorCannotOpenFile @done - - NSURLErrorCannotParseResponse @done - - NSURLErrorCannotRemoveFile @done - - NSURLErrorCannotWriteToFile @done - - NSURLErrorClientCertificateRejected @done - - NSURLErrorClientCertificateRequired @done - - NSURLErrorDNSLookupFailed @done - - NSURLErrorDataLengthExceedsMaximum @done - - NSURLErrorDataNotAllowed @done - - NSURLErrorDomain @done - - NSURLErrorDownloadDecodingFailedMidStream @done - - NSURLErrorDownloadDecodingFailedToComplete @done - - NSURLErrorFailingURLErrorKey @done - - NSURLErrorFailingURLPeerTrustErrorKey @done - - NSURLErrorFailingURLStringErrorKey @done - - NSURLErrorFileDoesNotExist @done - - NSURLErrorFileIsDirectory @done - - NSURLErrorFileOutsideSafeArea @done - - NSURLErrorHTTPTooManyRedirects @done - - NSURLErrorInternationalRoamingOff @done - - NSURLErrorKey @done - - NSURLErrorNetworkConnectionLost @done - - NSURLErrorNetworkUnavailableReasonKey @done - - NSURLErrorNoPermissionsToReadFile @done - - NSURLErrorNotConnectedToInternet @done - - NSURLErrorRedirectToNonExistentLocation @done - - NSURLErrorRequestBodyStreamExhausted @done - - NSURLErrorResourceUnavailable @done - - NSURLErrorSecureConnectionFailed @done - - NSURLErrorServerCertificateHasBadDate @done - - NSURLErrorServerCertificateHasUnknownRoot @done - - NSURLErrorServerCertificateNotYetValid @done - - NSURLErrorServerCertificateUntrusted @done - - NSURLErrorTimedOut @done - - NSURLErrorUnknown @done - - NSURLErrorUnsupportedURL @done - - NSURLErrorUserAuthenticationRequired @done - - NSURLErrorUserCancelledAuthentication @done - - NSURLErrorZeroByteResource @done - - NSURLFileScheme - - NSURLHandle @done @unsupported @urlConnectionNotSupported - - Status - - RawValue - - init(rawValue:) - - loadFailed - - loadInProgress - - loadSucceeded - - notLoaded - - rawValue - - init() - - NSURLProtectionSpaceFTP @done - - NSURLProtectionSpaceFTPProxy @done - - NSURLProtectionSpaceHTTP @done - - NSURLProtectionSpaceHTTPProxy @done - - NSURLProtectionSpaceHTTPS @done - - NSURLProtectionSpaceHTTPSProxy @done - - NSURLProtectionSpaceSOCKSProxy @done - - NSURLQueryItem @done - - init() - - init(name:value:) - - name - - value - - NSURLRequest @done - - CachePolicy - - RawValue - - init(rawValue:) - - rawValue - - reloadIgnoringCacheData - - reloadIgnoringLocalAndRemoteCacheData - - reloadIgnoringLocalCacheData - - reloadRevalidatingCacheData - - returnCacheDataDontLoad - - returnCacheDataElseLoad - - useProtocolCachePolicy - - NetworkServiceType - - RawValue - - avStreaming - - background - - callSignaling - - default - - init(rawValue:) - - rawValue - - responsiveAV - - responsiveData - - video - - voice - - voip - - allHTTPHeaderFields - - allowsCellularAccess - - allowsConstrainedNetworkAccess - - allowsExpensiveNetworkAccess - - cachePolicy - - httpBody - - httpBodyStream - - httpMethod - - httpShouldHandleCookies - - httpShouldUsePipelining - - init() - - init(url:) - - init(url:cachePolicy:timeoutInterval:) - - Foundation.TimeInterval - - mainDocumentURL - - networkServiceType - - supportsSecureCoding - - timeoutInterval - - Foundation.TimeInterval - - url - - value(forHTTPHeaderField:) - - NSURLSessionDownloadTaskResumeData @done - - NSURLSessionTransferSizeUnknown @done - - NSUTF16BigEndianStringEncoding @done - - NSUTF16LittleEndianStringEncoding @done - - NSUTF16StringEncoding @done - - NSUTF32BigEndianStringEncoding @done - - NSUTF32LittleEndianStringEncoding @done - - NSUTF32StringEncoding @done - - NSUTF8StringEncoding @done - - NSUUID @done - - getBytes(_:) - - Swift.Void - - init() - - init(uuidBytes:) - - init(uuidString:) - - uuidString - - NSUbiquitousFileErrorMaximum @done @unsupported @requiresOSSupport - - NSUbiquitousFileErrorMinimum @done @unsupported @requiresOSSupport - - NSUbiquitousFileNotUploadedDueToQuotaError @done @unsupported @requiresOSSupport - - NSUbiquitousFileUbiquityServerNotAvailable @done @unsupported @requiresOSSupport - - NSUbiquitousFileUnavailableError @done @unsupported @requiresOSSupport - - NSUbiquitousKeyValueStore @done @unsupported @requiresOSSupport - - array(forKey:) - - bool(forKey:) - - data(forKey:) - - default - - dictionary(forKey:) - - dictionaryRepresentation - - didChangeExternallyNotification - - double(forKey:) - - init() - - longLong(forKey:) - - object(forKey:) - - removeObject(forKey:) - - Swift.Void - - set(_:forKey:) - - Swift.Void - - set(_:forKey:) - - Swift.Void - - set(_:forKey:) - - Swift.Void - - set(_:forKey:) - - Swift.Void - - set(_:forKey:) - - Swift.Void - - set(_:forKey:) - - Swift.Void - - set(_:forKey:) - - Swift.Void - - set(_:forKey:) - - Swift.Void - - string(forKey:) - - synchronize() - - NSUbiquitousKeyValueStoreAccountChange @done @unsupported @requiresOSSupport - - NSUbiquitousKeyValueStoreChangeReasonKey @done @unsupported @requiresOSSupport - - NSUbiquitousKeyValueStoreChangedKeysKey @done @unsupported @requiresOSSupport - - NSUbiquitousKeyValueStoreInitialSyncChange @done @unsupported @requiresOSSupport - - NSUbiquitousKeyValueStoreQuotaViolationChange @done @unsupported @requiresOSSupport - - NSUbiquitousKeyValueStoreServerChange @done @unsupported @requiresOSSupport - - NSUnarchiver @done - - classNameDecoded(forArchiveClassName:) - - classNameDecoded(forArchiveClassName:) - - decodeClassName(_:asClassName:) - - Swift.Void - - decodeClassName(_:asClassName:) - - Swift.Void - - init() - - init(forReadingWith:) - - isAtEnd - - replace(_:with:) - - Swift.Void - - systemVersion - - unarchiveObject(with:) - - unarchiveObject(withFile:) - - NSUncaughtExceptionHandler @done @unsupported @exceptionHandlingNotSupported - - NSUndefinedDateComponent - - NSUnderlyingErrorKey @done - - NSUndoCloseGroupingRunLoopOrdering - - NSUndoManagerGroupIsDiscardableKey - - NSUnicodeStringEncoding @done - - NSUnionRange(_:_:) @done - - Foundation.NSRange - - Foundation.NSRange - - Foundation.NSRange - - NSUnionRect(_:_:) @done - - Foundation.NSRect - - Foundation.NSRect - - Foundation.NSRect - - NSUniqueIDSpecifier @done @unsupported @requiresOSSupport - - init() - - init(coder:) - - init(containerClassDescription:containerSpecifier:key:) - - init(containerClassDescription:containerSpecifier:key:uniqueID:) - - init(containerSpecifier:key:) - - uniqueID - - NSUnknownKeyScriptError @done @unsupported @requiresOSSupport - - NSUnknownKeySpecifierError @done @unsupported @requiresOSSupport - - NSUserActivity @done @unsupported @requiresOSSupport - - activityType - - addUserInfoEntries(from:) - - Swift.Void - - becomeCurrent() - - Swift.Void - - delegate - - deleteAllSavedUserActivities(completionHandler:) - - Swift.Void - - deleteSavedUserActivities(withPersistentIdentifiers:completionHandler:) - - Swift.Void - - expirationDate - - getContinuationStreams(completionHandler:) - - Swift.Void - - init() - - init(activityType:) - - invalidate() - - Swift.Void - - isEligibleForHandoff - - isEligibleForPublicIndexing - - isEligibleForSearch - - keywords - - needsSave - - persistentIdentifier - - referrerURL - - requiredUserInfoKeys - - resignCurrent() - - Swift.Void - - supportsContinuationStreams - - targetContentIdentifier - - title - - userInfo - - webpageURL - - NSUserActivityConnectionUnavailableError @done @unsupported @requiresOSSupport - - NSUserActivityDelegate @done @unsupported @requiresOSSupport - - userActivity(_:didReceive:outputStream:) - - Swift.Void - - userActivityWasContinued(_:) - - Swift.Void - - userActivityWillSave(_:) - - Swift.Void - - NSUserActivityErrorMaximum @done @unsupported @requiresOSSupport - - NSUserActivityErrorMinimum @done @unsupported @requiresOSSupport - - NSUserActivityHandoffFailedError @done @unsupported @requiresOSSupport - - NSUserActivityHandoffUserInfoTooLargeError @done @unsupported @requiresOSSupport - - NSUserActivityPersistentIdentifier @done @unsupported @requiresOSSupport - - NSUserActivityRemoteApplicationTimedOutError @done @unsupported @requiresOSSupport - - NSUserActivityTypeBrowsingWeb @done @unsupported @requiresOSSupport - - NSUserAppleScriptTask @done @unsupported @requiresOSSupport - - CompletionHandler - - execute(withAppleEvent:completionHandler:) - - Swift.Void - - init() - - init(url:) - - NSUserAutomatorTask @done @unsupported @requiresOSSupport - - CompletionHandler - - execute(withInput:completionHandler:) - - Swift.Void - - init() - - init(url:) - - variables - - NSUserCancelledError @done - - NSUserName() @done - - NSUserNotification @done @unsupported @requiresOSSupport - - ActivationType - - RawValue - - actionButtonClicked - - additionalActionClicked - - contentsClicked - - init(rawValue:) - - none - - rawValue - - replied - - actionButtonTitle - - activationType - - actualDeliveryDate - - additionalActions - - additionalActivationAction - - deliveryDate - - deliveryRepeatInterval - - deliveryTimeZone - - hasActionButton - - hasReplyButton - - identifier - - informativeText - - init() - - isPresented - - isRemote - - otherButtonTitle - - response - - responsePlaceholder - - soundName - - subtitle - - title - - userInfo - - NSUserNotificationAction @done @unsupported @requiresOSSupport - - identifier - - init() - - init(identifier:title:) - - title - - NSUserNotificationCenter @done @unsupported @requiresOSSupport - - default - - delegate - - deliver(_:) - - Swift.Void - - deliveredNotifications - - init() - - removeAllDeliveredNotifications() - - Swift.Void - - removeDeliveredNotification(_:) - - Swift.Void - - removeScheduledNotification(_:) - - Swift.Void - - scheduleNotification(_:) - - Swift.Void - - scheduledNotifications - - NSUserNotificationCenterDelegate @done @unsupported @requiresOSSupport - - userNotificationCenter(_:didActivate:) - - Swift.Void - - userNotificationCenter(_:didDeliver:) - - Swift.Void - - userNotificationCenter(_:shouldPresent:) - - NSUserNotificationDefaultSoundName @done @unsupported @requiresOSSupport - - NSUserScriptTask @done @unsupported @requiresOSSupport - - CompletionHandler - - execute(completionHandler:) - - Swift.Void - - init() - - init(url:) - - scriptURL - - NSUserUnixTask @done @unsupported @requiresOSSupport - - CompletionHandler - - execute(withArguments:completionHandler:) - - Swift.Void - - init() - - init(url:) - - standardError - - standardInput - - standardOutput - - NSValidationErrorMaximum - - NSValidationErrorMinimum - - NSValue - - edgeInsetsValue @done - - getValue(_:) @done - - Swift.Void @done - - getValue(_:size:) @done - - Swift.Void @done - - init() @done - - init(_:withObjCType:) @done - - init(bytes:objCType:) @done - - init(coder:) @done - - init(edgeInsets:) @done - - init(nonretainedObject:) - - init(point:) @done - - Foundation.NSPoint @done - - init(pointer:) @done - - init(range:) @done - - Foundation.NSRange @done - - init(rect:) @done - - Foundation.NSRect @done - - init(size:) @done - - Foundation.NSSize @done - - isEqual(to:) @done - - nonretainedObjectValue - - objCType @done - - pointValue @done - - Foundation.NSPoint @done - - pointerValue @done - - rangeValue @done - - Foundation.NSRange @done - - rectValue @done - - Foundation.NSRect @done - - sizeValue @done - - Foundation.NSSize @done - - value(of:) @done - - NSValueTransformerName - - RawValue - - _ObjectiveCType - - init(_:) - - init(rawValue:) - - isNilTransformerName - - isNotNilTransformerName - - keyedUnarchiveFromDataTransformerName - - negateBooleanTransformerName - - rawValue - - secureUnarchiveFromDataTransformerName - - unarchiveFromDataTransformerName - - NSWhoseSpecifier @done @unsupported @requiresOSSupport - - SubelementIdentifier - - RawValue - - everySubelement - - indexSubelement - - init(rawValue:) - - middleSubelement - - noSubelement - - randomSubelement - - rawValue - - endSubelementIdentifier - - endSubelementIndex - - init() - - init(coder:) - - init(containerClassDescription:containerSpecifier:key:) - - init(containerClassDescription:containerSpecifier:key:test:) - - init(containerSpecifier:key:) - - startSubelementIdentifier - - startSubelementIndex - - test - - NSWidth(_:) @done - - Foundation.NSRect - - NSWindows95OperatingSystem - - NSWindowsCP1250StringEncoding @done - - NSWindowsCP1251StringEncoding @done - - NSWindowsCP1252StringEncoding @done - - NSWindowsCP1253StringEncoding @done - - NSWindowsCP1254StringEncoding @done - - NSWindowsNTOperatingSystem - - NSWrapCalendarComponents @done @unsupported @deprecatedBeforeSourceCompatibilityFreeze - - NSXPCCoder @done @unsupported @requiresOSSupport - - connection - - decodeXPCObject(ofType:forKey:) - - XPC.xpc_type_t - - encodeXPCObject(_:forKey:) - - Swift.Void - - XPC.xpc_object_t - - init() - - userInfo - - NSXPCConnection @done @unsupported @requiresOSSupport - - Options - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - privileged - - rawValue - - auditSessionIdentifier - - Darwin.au_asid_t - - Darwin.pid_t - - Darwin.__darwin_pid_t - - Darwin.__int32_t - - current() - - effectiveGroupIdentifier - - Darwin.gid_t - - Darwin.__darwin_gid_t - - Darwin.__uint32_t - - effectiveUserIdentifier - - Darwin.uid_t - - Darwin.__darwin_uid_t - - Darwin.__uint32_t - - endpoint - - exportedInterface - - exportedObject - - init() - - init(listenerEndpoint:) - - init(machServiceName:options:) - - init(serviceName:) - - interruptionHandler - - invalidate() - - Swift.Void - - invalidationHandler - - processIdentifier - - Darwin.pid_t - - Darwin.__darwin_pid_t - - Darwin.__int32_t - - remoteObjectInterface - - remoteObjectProxy - - remoteObjectProxyWithErrorHandler(_:) - - resume() - - Swift.Void - - scheduleSendBarrierBlock(_:) - - Swift.Void - - serviceName - - suspend() - - Swift.Void - - synchronousRemoteObjectProxyWithErrorHandler(_:) - - NSXPCConnectionErrorMaximum@done @done @unsupported @requiresOSSupport - - NSXPCConnectionErrorMinimum@done @done @unsupported @requiresOSSupport - - NSXPCConnectionInterrupted @done - - NSXPCConnectionInvalid @done - - NSXPCConnectionReplyInvalid @done - - NSXPCInterface @done @unsupported @requiresOSSupport - - classes(for:argumentIndex:ofReply:) - - forSelector(_:argumentIndex:ofReply:) - - init() - - init(with:) - - protocol - - setClasses(_:for:argumentIndex:ofReply:) - - Swift.Void - - setInterface(_:for:argumentIndex:ofReply:) - - Swift.Void - - setXPCType(_:for:argumentIndex:ofReply:) - - Swift.Void - - XPC.xpc_type_t - - xpcType(for:argumentIndex:ofReply:) - - NSXPCListener @done @unsupported @requiresOSSupport - - anonymous() - - delegate - - endpoint - - init() - - init(machServiceName:) - - invalidate() - - Swift.Void - - resume() - - Swift.Void - - service() - - suspend() - - Swift.Void - - NSXPCListenerDelegate @done @unsupported @requiresOSSupport - - listener(_:shouldAcceptNewConnection:) - - NSXPCListenerEndpoint @done @unsupported @requiresOSSupport - - init() - - NSXPCProxyCreating @done @unsupported @requiresOSSupport - - remoteObjectProxy() - - remoteObjectProxyWithErrorHandler(_:) - - synchronousRemoteObjectProxyWithErrorHandler(_:) - - NSZeroPoint @done - - Foundation.NSPoint - - NSZeroRect @done - - Foundation.NSRect - - NSZeroSize @done - - Foundation.NSSize - - NS_BigEndian - - NS_LittleEndian - - NS_UnknownByteOrder - - NetService @done @unsupported @requiresOSSupport - - ErrorCode - - RawValue - - activityInProgress - - badArgumentError - - cancelledError - - collisionError - - init(rawValue:) - - invalidError - - notFoundError - - rawValue - - timeoutError - - unknownError - - Options - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - listenForConnections - - noAutoRename - - rawValue - - addresses - - data(fromTXTRecord:) - - delegate - - dictionary(fromTXTRecord:) - - domain - - errorCode - - errorDomain - - getInputStream(_:outputStream:) - - hostName - - includesPeerToPeer - - init() - - init(domain:type:name:) - - init(domain:type:name:port:) - - name - - port - - publish() - - Swift.Void - - publish(options:) - - Swift.Void - - remove(from:forMode:) - - Swift.Void - - resolve(withTimeout:) - - Foundation.TimeInterval - - Swift.Void - - schedule(in:forMode:) - - Swift.Void - - setTXTRecord(_:) - - startMonitoring() - - Swift.Void - - stop() - - Swift.Void - - stopMonitoring() - - Swift.Void - - txtRecordData() - - type - - NetServiceBrowser @done @unsupported @requiresOSSupport - - delegate - - includesPeerToPeer - - init() - - remove(from:forMode:) - - Swift.Void - - schedule(in:forMode:) - - Swift.Void - - searchForBrowsableDomains() - - Swift.Void - - searchForRegistrationDomains() - - Swift.Void - - searchForServices(ofType:inDomain:) - - Swift.Void - - stop() - - Swift.Void - - NetServiceBrowserDelegate @done @unsupported @requiresOSSupport - - netServiceBrowser(_:didFind:moreComing:) - - Swift.Void - - netServiceBrowser(_:didFindDomain:moreComing:) - - Swift.Void - - netServiceBrowser(_:didNotSearch:) - - Swift.Void - - netServiceBrowser(_:didRemove:moreComing:) - - Swift.Void - - netServiceBrowser(_:didRemoveDomain:moreComing:) - - Swift.Void - - netServiceBrowserDidStopSearch(_:) - - Swift.Void - - netServiceBrowserWillSearch(_:) - - Swift.Void - - NetServiceDelegate @done @unsupported @requiresOSSupport - - netService(_:didAcceptConnectionWith:outputStream:) - - Swift.Void - - netService(_:didNotPublish:) - - Swift.Void - - netService(_:didNotResolve:) - - Swift.Void - - netService(_:didUpdateTXTRecord:) - - Swift.Void - - netServiceDidPublish(_:) - - Swift.Void - - netServiceDidResolveAddress(_:) - - Swift.Void - - netServiceDidStop(_:) - - Swift.Void - - netServiceWillPublish(_:) - - Swift.Void - - netServiceWillResolve(_:) - - Swift.Void - - Notification @done - - ==(_:_:) - - Name - - ReferenceType - - customMirror - - debugDescription - - description - - hash(into:) - - hashValue - - init(name:object:userInfo:) - - Foundation.Notification.Name - - name - - Foundation.Notification.Name - - object - - userInfo - - NotificationCenter @done - - Publisher - - ==(_:_:) - - Failure - - Output - - center - - init(center:name:object:) - - Foundation.Notification.Name - - name - - Foundation.Notification.Name - - object - - receive(subscriber:) - - addObserver(_:selector:name:object:) @done @unsupported @selectorsNotSupported - - Swift.Void - - addObserver(forName:object:queue:using:) - - default - - init() - - post(_:) - - Swift.Void - - post(name:object:) - - Swift.Void - - post(name:object:userInfo:) - - Swift.Void - - publisher(for:object:) - - Foundation.Notification.Name - - removeObserver(_:) - - Swift.Void - - removeObserver(_:name:object:) - - Swift.Void - - NotificationQueue @done - - NotificationCoalescing - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - none - - onName - - onSender - - rawValue - - PostingStyle - - RawValue - - asap - - init(rawValue:) - - now - - rawValue - - whenIdle - - default - - dequeueNotifications(matching:coalesceMask:) - - Swift.Void - - enqueue(_:postingStyle:) - - Swift.Void - - enqueue(_:postingStyle:coalesceMask:forModes:) - - Swift.Void - - init() - - init(notificationCenter:) - - NumberFormatter @done - - Behavior - - RawValue - - behavior10_0 - - behavior10_4 - - default - - init(rawValue:) - - rawValue - - PadPosition - - RawValue - - afterPrefix - - afterSuffix - - beforePrefix - - beforeSuffix - - init(rawValue:) - - rawValue - - RoundingMode - - RawValue - - ceiling - - down - - floor - - halfDown - - halfEven - - halfUp - - init(rawValue:) - - rawValue - - up - - Style - - RawValue - - currency - - currencyAccounting - - currencyISOCode - - currencyPlural - - decimal - - init(rawValue:) - - none - - ordinal - - percent - - rawValue - - scientific - - spellOut - - allowsFloats - - alwaysShowsDecimalSeparator - - attributedStringForNil - - attributedStringForNotANumber - - attributedStringForZero - - currencyCode - - currencyDecimalSeparator - - currencyGroupingSeparator - - currencySymbol - - decimalSeparator - - defaultFormatterBehavior() - - exponentSymbol - - format - - formatWidth - - formatterBehavior - - formattingContext - - generatesDecimalNumbers - - getObjectValue(_:for:range:) - - groupingSeparator - - groupingSize - - hasThousandSeparators - - init() - - internationalCurrencySymbol - - isLenient - - isPartialStringValidationEnabled - - locale - - localizedString(from:number:) - - localizesFormat - - maximum - - maximumFractionDigits - - maximumIntegerDigits - - maximumSignificantDigits - - minimum - - minimumFractionDigits - - minimumIntegerDigits - - minimumSignificantDigits - - minusSign - - multiplier - - negativeFormat - - negativeInfinitySymbol - - negativePrefix - - negativeSuffix - - nilSymbol - - notANumberSymbol - - number(from:) - - numberStyle - - paddingCharacter - - paddingPosition - - perMillSymbol - - percentSymbol - - plusSign - - positiveFormat - - positiveInfinitySymbol - - positivePrefix - - positiveSuffix - - roundingBehavior - - roundingIncrement - - roundingMode - - secondaryGroupingSize - - setDefaultFormatterBehavior(_:) - - Swift.Void - - string(from:) - - textAttributesForNegativeInfinity - - textAttributesForNegativeValues - - textAttributesForNil - - textAttributesForNotANumber - - textAttributesForPositiveInfinity - - textAttributesForPositiveValues - - textAttributesForZero - - thousandSeparator - - usesGroupingSeparator - - usesSignificantDigits - - zeroSymbol - - ObservableObject - - OperatingSystemVersion @done - - init() - - init(majorVersion:minorVersion:patchVersion:) - - Operation @done - - QueuePriority - - RawValue - - high - - init(rawValue:) - - low - - normal - - rawValue - - veryHigh - - veryLow - - addDependency(_:) - - Swift.Void - - cancel() - - Swift.Void - - completionBlock - - dependencies - - init() - - isAsynchronous - - isCancelled - - isConcurrent - - isExecuting - - isFinished - - isReady - - main() - - Swift.Void - - name - - qualityOfService - - queuePriority - - removeDependency(_:) - - Swift.Void - - start() - - Swift.Void - - threadPriority - - waitUntilFinished() - - Swift.Void - - OperationQueue @done - - SchedulerOptions - - SchedulerTimeType - - Stride - - *(_:_:) - - *=(_:_:) - - +(_:_:) - - +=(_:_:) - - -(_:_:) - - -=(_:_:) - - <(_:_:) - - ==(_:_:) - - FloatLiteralType - - Foundation.TimeInterval - - IntegerLiteralType - - Foundation.TimeInterval - - Magnitude - - Foundation.TimeInterval - - encode(to:) - - init(_:) - - Foundation.TimeInterval - - init(exactly:) - - init(floatLiteral:) - - Foundation.TimeInterval - - init(from:) - - init(integerLiteral:) - - Foundation.TimeInterval - - magnitude - - Foundation.TimeInterval - - microseconds(_:) - - milliseconds(_:) - - nanoseconds(_:) - - seconds(_:) - - seconds(_:) - - timeInterval - - Foundation.TimeInterval - - advanced(by:) - - date - - distance(to:) - - encode(to:) - - hash(into:) - - hashValue - - init(_:) - - init(from:) - - addBarrierBlock(_:) - - Swift.Void - - addOperation(_:) - - Swift.Void - - addOperation(_:) - - Swift.Void - - addOperations(_:waitUntilFinished:) - - Swift.Void - - cancelAllOperations() - - Swift.Void - - current - - defaultMaxConcurrentOperationCount - - init() - - isSuspended - - main - - maxConcurrentOperationCount - - minimumTolerance - - name - - now - - operationCount - - operations - - progress - - qualityOfService - - schedule(after:interval:tolerance:options:_:) - - schedule(after:tolerance:options:_:) - - schedule(options:_:) - - underlyingQueue - - waitUntilAllOperationsAreFinished() - - Swift.Void - - OutputStream @done - - hasSpaceAvailable - - init() - - init(toBuffer:capacity:) - - init(toFileAtPath:append:) - - init(toMemory:) - - init(url:append:) - - toMemory() - - write(_:maxLength:) - - POSIXError @done - - Code - - E2BIG - - EACCES - - EADDRINUSE - - EADDRNOTAVAIL - - EAFNOSUPPORT - - EAGAIN - - EALREADY - - EAUTH - - EBADARCH - - EBADEXEC - - EBADF - - EBADMACHO - - EBADMSG - - EBADRPC - - EBUSY - - ECANCELED - - ECHILD - - ECONNABORTED - - ECONNREFUSED - - ECONNRESET - - EDEADLK - - EDESTADDRREQ - - EDEVERR - - EDOM - - EDQUOT - - EEXIST - - EFAULT - - EFBIG - - EFTYPE - - EHOSTDOWN - - EHOSTUNREACH - - EIDRM - - EILSEQ - - EINPROGRESS - - EINTR - - EINVAL - - EIO - - EISCONN - - EISDIR - - ELOOP - - EMFILE - - EMLINK - - EMSGSIZE - - EMULTIHOP - - ENAMETOOLONG - - ENEEDAUTH - - ENETDOWN - - ENETRESET - - ENETUNREACH - - ENFILE - - ENOATTR - - ENOBUFS - - ENODATA - - ENODEV - - ENOENT - - ENOEXEC - - ENOLCK - - ENOLINK - - ENOMEM - - ENOMSG - - ENOPOLICY - - ENOPROTOOPT - - ENOSPC - - ENOSR - - ENOSTR - - ENOSYS - - ENOTBLK - - ENOTCONN - - ENOTDIR - - ENOTEMPTY - - ENOTRECOVERABLE - - ENOTSOCK - - ENOTSUP - - ENOTTY - - ENXIO - - EOVERFLOW - - EOWNERDEAD - - EPERM - - EPFNOSUPPORT - - EPIPE - - EPROCLIM - - EPROCUNAVAIL - - EPROGMISMATCH - - EPROGUNAVAIL - - EPROTO - - EPROTONOSUPPORT - - EPROTOTYPE - - EPWROFF - - EQFULL - - ERANGE - - EREMOTE - - EROFS - - ERPCMISMATCH - - ESHLIBVERS - - ESHUTDOWN - - ESOCKTNOSUPPORT - - ESPIPE - - ESRCH - - ESTALE - - ETIME - - ETIMEDOUT - - ETOOMANYREFS - - ETXTBSY - - EUSERS - - EWOULDBLOCK - - EXDEV - - errorDomain - - hashValue - - POSIXErrorCode @done - - PersonNameComponents @done - - ==(_:_:) - - ReferenceType - - customMirror - - debugDescription - - description - - encode(to:) - - familyName - - givenName - - hash(into:) - - hashValue - - init() - - init(from:) - - middleName - - namePrefix - - nameSuffix - - nickname - - phoneticRepresentation - - PersonNameComponentsFormatter @done @unsupported @requiresICUSupport @grandfathered - - Options - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - phonetic - - rawValue - - Style - - RawValue - - abbreviated - - default - - init(rawValue:) - - long - - medium - - rawValue - - short - - annotatedString(from:) - - getObjectValue(_:for:errorDescription:) - - init() - - isPhonetic - - localizedString(from:style:options:) - - personNameComponents(from:) - - string(from:) - - style - - Pipe @done - - fileHandleForReading - - fileHandleForWriting - - init() - - Port @done - - delegate() - - didBecomeInvalidNotification - - init() - - invalidate() - - Swift.Void - - isValid - - remove(from:forMode:) - - Swift.Void - - reservedSpaceLength - - schedule(in:forMode:) - - Swift.Void - - send(before:components:from:reserved:) - - send(before:msgid:components:from:reserved:) - - setDelegate(_:) - - Swift.Void - - PortDelegate @done - - handle(_:) - - Swift.Void - - PortMessage @done - - components - - init() - - init(send:receive:components:) - - msgid - - receivePort - - send(before:) - - sendPort - - Process @done - - TerminationReason - - RawValue - - exit - - init(rawValue:) - - rawValue - - uncaughtSignal - - arguments - - currentDirectoryPath - - currentDirectoryURL - - didTerminateNotification - - environment - - executableURL - - init() - - interrupt() - - Swift.Void - - isRunning - - launch() - - Swift.Void - - launchPath - - launchedProcess(launchPath:arguments:) - - processIdentifier - - qualityOfService - - resume() - - run() - - run(_:arguments:terminationHandler:) - - standardError - - standardInput - - standardOutput - - suspend() - - terminate() - - Swift.Void - - terminationHandler - - terminationReason - - terminationStatus - - waitUntilExit() - - Swift.Void - - ProcessInfo - - ActivityOptions @done @unsupported @requiresOSSupport - - ArrayLiteralElement - - Element - - RawValue - - automaticTerminationDisabled - - background - - idleDisplaySleepDisabled - - idleSystemSleepDisabled - - init(rawValue:) - - latencyCritical - - rawValue - - suddenTerminationDisabled - - userInitiated - - userInitiatedAllowingIdleSystemSleep - - ThermalState @done @unsupported @requiresOSSupport - - RawValue - - critical - - fair - - init(rawValue:) - - nominal - - rawValue - - serious - - activeProcessorCount @done - - arguments @done - - automaticTerminationSupportEnabled @done @unsupported @requiresOSSupport - - beginActivity(options:reason:) @done @unsupported @requiresOSSupport - - disableAutomaticTermination(_:) @done @unsupported @requiresOSSupport - - Swift.Void - - disableSuddenTermination() @done @unsupported @requiresOSSupport - - Swift.Void - - enableAutomaticTermination(_:) @done @unsupported @requiresOSSupport - - Swift.Void - - enableSuddenTermination() @done @unsupported @requiresOSSupport - - Swift.Void - - endActivity(_:) @done @unsupported @requiresOSSupport - - Swift.Void - - environment @done - - fullUserName @done - - globallyUniqueString @done - - hostName @done - - init() @done - - isMacCatalystApp - - isOperatingSystemAtLeast(_:) @done - - operatingSystem() @done - - operatingSystemName() @done - - operatingSystemVersion @done - - operatingSystemVersionString @done - - performActivity(options:reason:using:) @done @unsupported @requiresOSSupport - - Swift.Void - - physicalMemory @done - - processIdentifier @done - - processInfo @done - - processName @done - - processorCount @done - - systemUptime @done - - Foundation.TimeInterval - - thermalState @done @unsupported @requiresOSSupport - - thermalStateDidChangeNotification @done @unsupported @requiresOSSupport - - userName @done - - Progress - - FileOperationKind @done - - RawValue @done - - _ObjectiveCType @done - - copying @done - - decompressingAfterDownloading @done - - downloading @done - - init(_:) @done - - init(rawValue:) @done - - rawValue @done - - receiving @done - - PublishingHandler @done - - UnpublishingHandler @done - - addChild(_:withPendingUnitCount:) @done - - Swift.Void @done - - addSubscriber(forFileURL:withPublishingHandler:) @done - - Foundation.Progress.PublishingHandler @done - - becomeCurrent(withPendingUnitCount:) @done - - Swift.Void @done - - cancel() @done - - Swift.Void @done - - cancellationHandler @done - - completedUnitCount @done - - current() @done - - discreteProgress(totalUnitCount:) @done - - estimatedTimeRemaining @done - - fileCompletedCount @done - - fileOperationKind @done - - fileTotalCount @done - - fileURL @done - - fractionCompleted @done - - init() @done - - init(parent:userInfo:) @done - - init(totalUnitCount:) @done - - init(totalUnitCount:parent:pendingUnitCount:) @done - - isCancellable @done - - isCancelled @done - - isFinished @done - - isIndeterminate @done - - isOld @done - - isPausable @done - - isPaused @done - - kind @done - - localizedAdditionalDescription @done - - localizedDescription @done - - pause() @done - - Swift.Void @done - - pausingHandler @done - - performAsCurrent(withPendingUnitCount:using:) @done - - publish() @unsupported @requiresOSSupport - - Swift.Void - - removeSubscriber(_:) @done - - Swift.Void @done - - resignCurrent() @done - - Swift.Void @done - - resume() @done - - Swift.Void @done - - resumingHandler @done - - setUserInfoObject(_:forKey:) @done - - Swift.Void @done - - throughput @done - - totalUnitCount @done - - unpublish() @unsupported @requiresOSSupport - - Swift.Void - - userInfo @done - - ProgressKind @done - - RawValue - - _ObjectiveCType - - file - - init(_:) - - init(rawValue:) - - rawValue - - ProgressReporting @done - - progress - - ProgressUserInfoKey @done - - RawValue - - _ObjectiveCType - - estimatedTimeRemainingKey - - fileAnimationImageKey - - fileAnimationImageOriginalRectKey - - fileCompletedCountKey - - fileIconKey - - fileOperationKindKey - - fileTotalCountKey - - fileURLKey - - init(_:) - - init(rawValue:) - - rawValue - - throughputKey - - PropertyListDecoder @done - - Input - - decode(_:from:) - - decode(_:from:format:) - - init() - - userInfo - - PropertyListEncoder @done - - Output - - encode(_:) - - init() - - outputFormat - - userInfo - - PropertyListSerialization @done - - MutabilityOptions - - ArrayLiteralElement - - Element - - RawValue - - init(rawValue:) - - mutableContainers - - mutableContainersAndLeaves - - rawValue - - PropertyListFormat - - RawValue - - binary - - init(rawValue:) - - openStep - - rawValue - - xml - - ReadOptions - - WriteOptions - - data(fromPropertyList:format:options:) - - Foundation.PropertyListSerialization.WriteOptions - - dataFromPropertyList(_:format:errorDescription:) - - init() - - propertyList(_:isValidFor:) - - propertyList(from:options:format:) - - Foundation.PropertyListSerialization.ReadOptions - - propertyList(with:options:format:) - - Foundation.PropertyListSerialization.ReadOptions - - propertyListFromData(_:mutabilityOption:format:errorDescription:) - - writePropertyList(_:to:format:options:error:) - - Foundation.NSErrorPointer - - Foundation.PropertyListSerialization.WriteOptions - - Published - - QualityOfService @done - - RawValue - - background - - default - - init(rawValue:) - - rawValue - - userInitiated - - userInteractive - - utility - - Range @done - - init(_:) - - Foundation.NSRange - - init(_:) - - Foundation.NSRange - - init(_:in:) - - Foundation.NSRange - - init(_:in:) - - Foundation.NSRange - - RecoverableError @done - - attemptRecovery(optionIndex:) - - attemptRecovery(optionIndex:resultHandler:) - - attemptRecovery(optionIndex:resultHandler:) - - recoveryOptions - - ReferenceConvertible @done - - ReferenceType - - RelativeDateTimeFormatter - - DateTimeStyle - - RawValue - - init(rawValue:) - - named - - numeric - - rawValue - - UnitsStyle - - RawValue - - abbreviated - - full - - init(rawValue:) - - rawValue - - short - - spellOut - - calendar - - dateTimeStyle - - formattingContext - - init() - - locale - - localizedString(for:relativeTo:) - - localizedString(from:) - - localizedString(fromTimeInterval:) - - Foundation.TimeInterval - - string(for:) - - unitsStyle - - Repeated @done - - Regions - - regions - - RunLoop - - Mode @done - - RawValue - - _ObjectiveCType - - common - - default - - init(_:) - - init(rawValue:) - - rawValue - - SchedulerOptions - - SchedulerTimeType - - Stride - - *(_:_:) - - *=(_:_:) - - +(_:_:) - - +=(_:_:) - - -(_:_:) - - -=(_:_:) - - <(_:_:) - - ==(_:_:) - - FloatLiteralType - - Foundation.TimeInterval - - IntegerLiteralType - - Foundation.TimeInterval - - Magnitude - - Foundation.TimeInterval - - encode(to:) - - init(_:) - - Foundation.TimeInterval - - init(exactly:) - - init(floatLiteral:) - - Foundation.TimeInterval - - init(from:) - - init(integerLiteral:) - - Foundation.TimeInterval - - magnitude - - Foundation.TimeInterval - - microseconds(_:) - - milliseconds(_:) - - nanoseconds(_:) - - seconds(_:) - - seconds(_:) - - timeInterval - - Foundation.TimeInterval - - advanced(by:) - - date - - distance(to:) - - encode(to:) - - hash(into:) - - hashValue - - init(_:) - - init(from:) - - acceptInput(forMode:before:) @done - - Swift.Void - - add(_:forMode:) @done - - Swift.Void - - add(_:forMode:) @done - - Swift.Void - - cancelPerform(_:target:argument:) @done @unsupported @selectorsNotSupported - - Swift.Void - - cancelPerformSelectors(withTarget:) @done @unsupported @selectorsNotSupported - - Swift.Void - - current @done - - currentMode @done - - getCFRunLoop() @done - - init() @done - - limitDate(forMode:) @done - - main @done - - minimumTolerance - - now - - perform(_:) @done @unsupported @selectorsNotSupported - - Swift.Void - - perform(_:target:argument:order:modes:) @done @unsupported @selectorsNotSupported - - Swift.Void - - perform(inModes:block:) @done - - Swift.Void - - remove(_:forMode:) @done - - Swift.Void - - run() @done - - Swift.Void - - run(mode:before:) @done - - run(until:) @done - - Swift.Void - - schedule(after:interval:tolerance:options:_:) - - schedule(after:tolerance:options:_:) - - schedule(options:_:) - - Scanner @done - - NumberRepresentation - - ==(_:_:) - - decimal - - hash(into:) - - hashValue - - hexadecimal - - caseSensitive - - charactersToBeSkipped - - currentIndex - - init() - - init(string:) - - isAtEnd - - locale - - localizedScanner(with:) - - scanCharacter() - - scanCharacters(from:) - - scanCharacters(from:into:) - - scanDecimal() - - scanDecimal(_:) - - scanDouble(_:) - - scanDouble(representation:) - - scanFloat(_:) - - scanFloat(representation:) - - scanHexDouble(_:) - - scanHexFloat(_:) - - scanHexInt32(_:) - - scanHexInt64(_:) - - scanInt(_:) - - scanInt(representation:) - - scanInt32(_:) - - scanInt32(representation:) - - scanInt64(_:) - - scanInt64(representation:) - - scanLocation - - scanString(_:) - - scanString(_:into:) - - scanUInt64(representation:) - - scanUnsignedLongLong(_:) - - scanUpTo(_:into:) - - scanUpToCharacters(from:) - - scanUpToCharacters(from:into:) - - scanUpToString(_:) - - string - - Slice @done - - Regions - - regions - - withUnsafeBytes(_:) - - SocketNativeHandle @done - - SocketPort @done - - address - - init() - - init(protocolFamily:socketType:protocol:address:) - - init(protocolFamily:socketType:protocol:socket:) - - Foundation.SocketNativeHandle - - init(remoteWithProtocolFamily:socketType:protocol:address:) - - init(remoteWithTCPPort:host:) - - init(tcpPort:) - - protocol - - protocolFamily - - socket - - Foundation.SocketNativeHandle - - socketType - - Stream @done - - Event - - ArrayLiteralElement - - Element - - RawValue - - endEncountered - - errorOccurred - - hasBytesAvailable - - hasSpaceAvailable - - init(rawValue:) - - openCompleted - - rawValue - - PropertyKey - - RawValue - - _ObjectiveCType - - dataWrittenToMemoryStreamKey - - fileCurrentOffsetKey - - init(_:) - - init(rawValue:) - - networkServiceType - - rawValue - - socketSecurityLevelKey - - socksProxyConfigurationKey - - Status - - RawValue - - atEnd - - closed - - error - - init(rawValue:) - - notOpen - - open - - opening - - rawValue - - reading - - writing - - close() - - Swift.Void - - delegate - - getBoundStreams(withBufferSize:inputStream:outputStream:) @done @unsupported @autoreleasedByReferencePointersNotAvailable - - Swift.Void - - getStreamsTo(_:port:inputStream:outputStream:) @done @unsupported @autoreleasedByReferencePointersNotAvailable - - Swift.Void - - getStreamsToHost(withName:port:inputStream:outputStream:) @done @unsupported @autoreleasedByReferencePointersNotAvailable - - Swift.Void - - init() - - open() - - Swift.Void - - property(forKey:) - - remove(from:forMode:) - - Swift.Void - - schedule(in:forMode:) - - Swift.Void - - setProperty(_:forKey:) - - streamError - - streamStatus - - StreamDelegate @done - - stream(_:handle:) - - Swift.Void - - StreamNetworkServiceTypeValue @done - - RawValue - - _ObjectiveCType - - background - - callSignaling - - init(rawValue:) - - rawValue - - video - - voIP - - voice - - StreamSOCKSProxyConfiguration @done - - RawValue - - _ObjectiveCType - - hostKey - - init(rawValue:) - - passwordKey - - portKey - - rawValue - - userKey - - versionKey - - StreamSOCKSProxyVersion @done - - RawValue - - _ObjectiveCType - - init(rawValue:) - - rawValue - - version4 - - version5 - - StreamSocketSecurityLevel @done - - RawValue - - _ObjectiveCType - - init(rawValue:) - - negotiatedSSL - - none - - rawValue - - ssLv2 - - ssLv3 - - tlSv1 - - String @done - - CompareOptions - - Encoding - - ==(_:_:) - - RawValue - - ascii - - description - - hash(into:) - - hashValue - - init(rawValue:) - - iso2022JP - - isoLatin1 - - isoLatin2 - - japaneseEUC - - macOSRoman - - nextstep - - nonLossyASCII - - rawValue - - shiftJIS - - symbol - - unicode - - utf16 - - utf16BigEndian - - utf16LittleEndian - - utf32 - - utf32BigEndian - - utf32LittleEndian - - utf8 - - windowsCP1250 - - windowsCP1251 - - windowsCP1252 - - windowsCP1253 - - windowsCP1254 - - EncodingConversionOptions - - EnumerationOptions - - availableStringEncodings - - defaultCStringEncoding - - init(_:) - - init(bytes:encoding:) - - init(bytesNoCopy:length:encoding:freeWhenDone:) - - init(cString:encoding:) - - init(contentsOf:) - - init(contentsOf:encoding:) - - init(contentsOf:usedEncoding:) - - init(contentsOfFile:) - - init(contentsOfFile:encoding:) - - init(contentsOfFile:usedEncoding:) - - init(data:encoding:) - - init(format:_:) - - init(format:arguments:) - - init(format:locale:_:) - - init(format:locale:arguments:) - - init(utf16CodeUnits:count:) - - init(utf16CodeUnitsNoCopy:count:freeWhenDone:) - - init(utf8String:) - - localizedName(of:) - - localizedStringWithFormat(_:_:) - - StringEncodingDetectionOptionsKey - - RawValue - - _ObjectiveCType - - allowLossyKey - - disallowedEncodingsKey - - fromWindowsKey - - init(rawValue:) - - likelyLanguageKey - - lossySubstitutionKey - - rawValue - - suggestedEncodingsKey - - useOnlySuggestedEncodingsKey - - StringProtocol @done - - addingPercentEncoding(withAllowedCharacters:) - - appending(_:) - - appendingFormat(_:_:) - - applyingTransform(_:reverse:) - - cString(using:) - - canBeConverted(to:) - - capitalized - - capitalized(with:) - - caseInsensitiveCompare(_:) - - commonPrefix(with:options:) - - Swift.String.CompareOptions - - compare(_:options:range:locale:) - - Swift.String.CompareOptions - - completePath(into:caseSensitive:matchesInto:filterTypes:) - - components(separatedBy:) - - components(separatedBy:) - - contains(_:) - - data(using:allowLossyConversion:) - - decomposedStringWithCanonicalMapping - - decomposedStringWithCompatibilityMapping - - enumerateLines(invoking:) - - enumerateLinguisticTags(in:scheme:options:orthography:invoking:) - - enumerateSubstrings(in:options:_:) - - Swift.String.EnumerationOptions - - fastestEncoding - - folding(options:locale:) - - Swift.String.CompareOptions - - getBytes(_:maxLength:usedLength:encoding:options:range:remaining:) - - Swift.String.EncodingConversionOptions - - getCString(_:maxLength:encoding:) - - getLineStart(_:end:contentsEnd:for:) - - getParagraphStart(_:end:contentsEnd:for:) - - hash - - lengthOfBytes(using:) - - lineRange(for:) - - linguisticTags(in:scheme:options:orthography:tokenRanges:) - - localizedCapitalized - - localizedCaseInsensitiveCompare(_:) - - localizedCaseInsensitiveContains(_:) - - localizedCompare(_:) - - localizedLowercase - - localizedStandardCompare(_:) - - localizedStandardContains(_:) - - localizedStandardRange(of:) - - localizedUppercase - - lowercased(with:) - - maximumLengthOfBytes(using:) - - padding(toLength:withPad:startingAt:) - - paragraphRange(for:) - - precomposedStringWithCanonicalMapping - - precomposedStringWithCompatibilityMapping - - propertyList() - - propertyListFromStringsFileFormat() - - range(of:options:range:locale:) - - Swift.String.CompareOptions - - rangeOfCharacter(from:options:range:) - - Swift.String.CompareOptions - - rangeOfComposedCharacterSequence(at:) - - rangeOfComposedCharacterSequences(for:) - - removingPercentEncoding - - replacingCharacters(in:with:) - - replacingOccurrences(of:with:options:range:) - - Swift.String.CompareOptions - - smallestEncoding - - substring(from:) - - substring(to:) - - substring(with:) - - trimmingCharacters(in:) - - uppercased(with:) - - write(to:atomically:encoding:) - - write(toFile:atomically:encoding:) - - StringTransform @done - - RawValue - - _ObjectiveCType - - fullwidthToHalfwidth - - hiraganaToKatakana - - init(_:) - - init(rawValue:) - - latinToArabic - - latinToCyrillic - - latinToGreek - - latinToHangul - - latinToHebrew - - latinToHiragana - - latinToKatakana - - latinToThai - - mandarinToLatin - - rawValue - - stripCombiningMarks - - stripDiacritics - - toLatin - - toUnicodeName - - toXMLHex - - Thread - - callStackReturnAddresses @done - - callStackSymbols @done - - cancel() @done - - Swift.Void @done - - current @done - - detachNewThread(_:) @done - - Swift.Void - - detachNewThreadSelector(_:toTarget:with:) @done @unsupported @selectorsNotSupported - - Swift.Void - - exit() @done - - Swift.Void - - init() @done - - init(block:) @done - - init(target:selector:object:) @done @unsupported @selectorsNotSupported - - isCancelled @done - - isExecuting @done - - isFinished @done - - isMainThread @done - - isMainThread @done - - isMultiThreaded() @done - - main @done - - main() @done - - Swift.Void - - name @done - - qualityOfService @done - - setThreadPriority(_:) - - sleep(forTimeInterval:) @done - - Foundation.TimeInterval - - Swift.Void - - sleep(until:) @done - - Swift.Void - - stackSize @done - - start() @done - - Swift.Void - - threadDictionary @done - - threadPriority - - threadPriority() - - TimeInterval @done - - TimeZone @done - - ==(_:_:) - - ReferenceType - - abbreviation(for:) - - abbreviationDictionary - - autoupdatingCurrent - - current - - customMirror - - daylightSavingTimeOffset(for:) - - Foundation.TimeInterval - - debugDescription - - description - - encode(to:) - - hash(into:) - - hashValue - - identifier - - init(abbreviation:) - - init(from:) - - init(identifier:) - - init(secondsFromGMT:) - - isDaylightSavingTime(for:) - - knownTimeZoneIdentifiers - - localizedName(for:locale:) - - nextDaylightSavingTimeTransition - - nextDaylightSavingTimeTransition(after:) - - secondsFromGMT(for:) - - timeZoneDataVersion - - Timer - - TimerPublisher - - Failure - - Output - - connect() - - init(interval:tolerance:runLoop:mode:options:) - - Foundation.TimeInterval - - interval - - Foundation.TimeInterval - - mode - - options - - receive(subscriber:) - - runLoop - - tolerance - - fire() @done - - Swift.Void - - fireDate @done - - init() @done - - init(fire:interval:repeats:block:) @done - - Foundation.TimeInterval - - init(fireAt:interval:target:selector:userInfo:repeats:) @done @unsupported @selectorsNotSupported - - Foundation.TimeInterval - - init(timeInterval:invocation:repeats:) @done @unsupported @selectorsNotSupported - - Foundation.TimeInterval - - init(timeInterval:repeats:block:) @done - - Foundation.TimeInterval - - init(timeInterval:target:selector:userInfo:repeats:) @done @unsupported @selectorsNotSupported - - Foundation.TimeInterval - - invalidate() @done - - Swift.Void - - isValid @done - - publish(every:tolerance:on:in:options:) - - Foundation.TimeInterval - - scheduledTimer(timeInterval:invocation:repeats:) - - Foundation.TimeInterval - - scheduledTimer(timeInterval:target:selector:userInfo:repeats:) - - Foundation.TimeInterval - - scheduledTimer(withTimeInterval:repeats:block:) - - Foundation.TimeInterval - - timeInterval @done - - Foundation.TimeInterval - - tolerance @done - - Foundation.TimeInterval - - userInfo @done - - UInt @done - - init(_:) - - init(exactly:) - - init(truncating:) - - UInt16 @done - - init(_:) - - init(exactly:) - - init(truncating:) - - UInt32 @done - - init(_:) - - init(exactly:) - - init(truncating:) - - UInt64 @done - - init(_:) - - init(exactly:) - - init(truncating:) - - UInt8 @done - - init(_:) - - init(exactly:) - - init(truncating:) - - URL - - ==(_:_:) @done - - BookmarkCreationOptions @done @unsupported @requiresOSSupport - - BookmarkResolutionOptions @done @unsupported @requiresOSSupport - - ReferenceType @done - - absoluteString @done - - absoluteURL @done - - appendPathComponent(_:) @done - - appendPathComponent(_:isDirectory:) @done - - appendPathExtension(_:) @done - - appendingPathComponent(_:) @done - - appendingPathComponent(_:isDirectory:) @done - - appendingPathExtension(_:) @done - - baseURL @done - - bookmarkData(options:includingResourceValuesForKeys:relativeTo:) @done @unsupported @requiresOSSupport - - Foundation.URL.BookmarkCreationOptions - - bookmarkData(withContentsOf:) @done @unsupported @requiresOSSupport - - checkPromisedItemIsReachable() @done - - checkResourceIsReachable() @done - - customPlaygroundQuickLook @done @unsupported @playgroundsNotSupported - - Swift.PlaygroundQuickLook - - dataRepresentation @done - - debugDescription @done - - deleteLastPathComponent() @done - - deletePathExtension() @done - - deletingLastPathComponent() @done - - deletingPathExtension() @done - - description @done - - encode(to:) @done - - fragment @done - - hasDirectoryPath @done - - hash(into:) @done - - hashValue @done - - host @done - - init(dataRepresentation:relativeTo:isAbsolute:) @done - - init(fileReferenceLiteralResourceName:) @done - - init(fileURLWithFileSystemRepresentation:isDirectory:relativeTo:) @done - - init(fileURLWithPath:) @done - - init(fileURLWithPath:isDirectory:) @done - - init(fileURLWithPath:isDirectory:relativeTo:) @done - - init(fileURLWithPath:relativeTo:) @done - - init(from:) @done - - init(resolvingAliasFileAt:options:) @done @unsupported @requiresOSSupport - - Foundation.URL.BookmarkResolutionOptions - - init(resolvingBookmarkData:options:relativeTo:bookmarkDataIsStale:) @done @unsupported @requiresOSSupport - - Foundation.URL.BookmarkResolutionOptions - - init(string:) @done - - init(string:relativeTo:) @done - - isFileURL @done - - lastPathComponent @done - - password @done - - path @done - - pathComponents @done - - pathExtension @done - - port @done - - promisedItemResourceValues(forKeys:) @done @unsupported @requiresOSSupport - - query @done - - relativePath @done - - relativeString @done - - removeAllCachedResourceValues() @done - - removeCachedResourceValue(forKey:) @done - - resolveSymlinksInPath() @done - - resolvingSymlinksInPath() @done - - resourceValues(forKeys:) @done - - resourceValues(forKeys:fromBookmarkData:) @done @unsupported @requiresOSSupport - - scheme @done - - setResourceValues(_:) @done - - setTemporaryResourceValue(_:forKey:) @done - - standardize() @done - - standardized @done - - standardizedFileURL @done - - startAccessingSecurityScopedResource() @done @unsupported @requiresOSSupport - - stopAccessingSecurityScopedResource() @done @unsupported @requiresOSSupport - - user @done - - withUnsafeFileSystemRepresentation(_:) @done - - writeBookmarkData(_:to:) @unsupported @requiresOSSupport - - URLAuthenticationChallenge @done - - error - - failureResponse - - init() - - init(authenticationChallenge:sender:) - - init(protectionSpace:proposedCredential:previousFailureCount:failureResponse:error:sender:) - - previousFailureCount - - proposedCredential - - protectionSpace - - sender - - URLAuthenticationChallengeSender @done - - cancel(_:) - - Swift.Void - - continueWithoutCredential(for:) - - Swift.Void - - performDefaultHandling(for:) - - Swift.Void - - rejectProtectionSpaceAndContinue(with:) - - Swift.Void - - use(_:for:) - - Swift.Void - - URLCache @done - - StoragePolicy - - RawValue - - allowed - - allowedInMemoryOnly - - init(rawValue:) - - notAllowed - - rawValue - - cachedResponse(for:) - - currentDiskUsage - - currentMemoryUsage - - diskCapacity - - getCachedResponse(for:completionHandler:) - - Swift.Void - - init() - - init(memoryCapacity:diskCapacity:directory:) - - init(memoryCapacity:diskCapacity:diskPath:) - - memoryCapacity - - removeAllCachedResponses() - - Swift.Void - - removeCachedResponse(for:) - - Swift.Void - - removeCachedResponse(for:) - - Swift.Void - - removeCachedResponses(since:) - - Swift.Void - - shared - - storeCachedResponse(_:for:) - - Swift.Void - - storeCachedResponse(_:for:) - - Swift.Void - - URLComponents @done - - ==(_:_:) - - ReferenceType - - customMirror - - debugDescription - - description - - encode(to:) - - fragment - - hash(into:) - - hashValue - - host - - init() - - init(from:) - - init(string:) - - init(url:resolvingAgainstBaseURL:) - - password - - path - - percentEncodedFragment - - percentEncodedHost - - percentEncodedPassword - - percentEncodedPath - - percentEncodedQuery - - percentEncodedQueryItems - - percentEncodedUser - - port - - query - - queryItems - - rangeOfFragment - - rangeOfHost - - rangeOfPassword - - rangeOfPath - - rangeOfPort - - rangeOfQuery - - rangeOfScheme - - rangeOfUser - - scheme - - string - - url - - url(relativeTo:) - - user - - URLCredential @done - - Persistence - - RawValue - - forSession - - init(rawValue:) - - none - - permanent - - rawValue - - synchronizable - - certificates - - hasPassword - - identity - - init() - - init(identity:certificates:persistence:) - - init(trust:) - - init(user:password:persistence:) - - password - - persistence - - user - - URLCredentialStorage @done - - allCredentials - - credentials(for:) - - defaultCredential(for:) - - getCredentials(for:task:completionHandler:) - - Swift.Void - - getDefaultCredential(for:task:completionHandler:) - - Swift.Void - - init() - - remove(_:for:) - - Swift.Void - - remove(_:for:options:) - - Swift.Void - - remove(_:for:options:task:) - - Swift.Void - - set(_:for:) - - Swift.Void - - set(_:for:task:) - - Swift.Void - - setDefaultCredential(_:for:) - - Swift.Void - - setDefaultCredential(_:for:task:) - - Swift.Void - - shared - - URLError - - BackgroundTaskCancelledReason @done @unsupported @requiresOSSupport - - RawValue - - backgroundUpdatesDisabled - - init(rawValue:) - - insufficientSystemResources - - rawValue - - userForceQuitApplication - - Code @done - - RawValue - - appTransportSecurityRequiresSecureConnection - - backgroundSessionInUseByAnotherProcess @done @unsupported @requiresOSSupport - - backgroundSessionRequiresSharedContainer @done @unsupported @requiresOSSupport - - backgroundSessionWasDisconnected @done @unsupported @requiresOSSupport - - badServerResponse - - badURL - - callIsActive - - cancelled - - cannotCloseFile - - cannotConnectToHost - - cannotCreateFile - - cannotDecodeContentData - - cannotDecodeRawData - - cannotFindHost - - cannotLoadFromNetwork - - cannotMoveFile - - cannotOpenFile - - cannotParseResponse - - cannotRemoveFile - - cannotWriteToFile - - clientCertificateRejected - - clientCertificateRequired - - dataLengthExceedsMaximum - - dataNotAllowed - - dnsLookupFailed - - downloadDecodingFailedMidStream - - downloadDecodingFailedToComplete - - fileDoesNotExist - - fileIsDirectory - - httpTooManyRedirects - - init(rawValue:) - - internationalRoamingOff - - networkConnectionLost - - noPermissionsToReadFile - - notConnectedToInternet - - rawValue - - redirectToNonExistentLocation - - requestBodyStreamExhausted - - resourceUnavailable - - secureConnectionFailed - - serverCertificateHasBadDate - - serverCertificateHasUnknownRoot - - serverCertificateNotYetValid - - serverCertificateUntrusted - - timedOut - - unknown - - unsupportedURL - - userAuthenticationRequired - - userCancelledAuthentication - - zeroByteResource - - NetworkUnavailableReason - - RawValue - - cellular - - constrained - - expensive - - init(rawValue:) - - rawValue - - appTransportSecurityRequiresSecureConnection @done - - backgroundSessionInUseByAnotherProcess @done - - backgroundSessionRequiresSharedContainer @done - - backgroundSessionWasDisconnected @done - - backgroundTaskCancelledReason @done - - badServerResponse @done - - badURL @done - - callIsActive @done - - cancelled @done - - cannotCloseFile @done - - cannotConnectToHost @done - - cannotCreateFile @done - - cannotDecodeContentData @done - - cannotDecodeRawData @done - - cannotFindHost @done - - cannotLoadFromNetwork @done - - cannotMoveFile @done - - cannotOpenFile @done - - cannotParseResponse @done - - cannotRemoveFile @done - - cannotWriteToFile @done - - clientCertificateRejected @done - - clientCertificateRequired @done - - dataLengthExceedsMaximum @done - - dataNotAllowed @done - - dnsLookupFailed @done - - downloadDecodingFailedMidStream @done - - downloadDecodingFailedToComplete @done - - downloadTaskResumeData @done - - errorDomain @done - - failingURL @done - - failureURLPeerTrust @done - - failureURLString @done - - fileDoesNotExist @done - - fileIsDirectory @done - - hashValue @done - - httpTooManyRedirects @done - - internationalRoamingOff @done - - networkConnectionLost @done - - networkUnavailableReason - - noPermissionsToReadFile @done - - notConnectedToInternet @done - - redirectToNonExistentLocation @done - - requestBodyStreamExhausted @done - - resourceUnavailable @done - - secureConnectionFailed @done - - serverCertificateHasBadDate @done - - serverCertificateHasUnknownRoot @done - - serverCertificateNotYetValid @done - - serverCertificateUntrusted @done - - timedOut @done - - unknown @done - - unsupportedURL @done - - userAuthenticationRequired @done - - userCancelledAuthentication @done - - zeroByteResource @done - - URLFileProtection - - RawValue - - _ObjectiveCType - - init(rawValue:) - - rawValue - - URLFileResourceType @done - - RawValue - - _ObjectiveCType - - blockSpecial - - characterSpecial - - directory - - init(rawValue:) - - namedPipe - - rawValue - - regular - - socket - - symbolicLink - - unknown - - URLProtectionSpace @done - - authenticationMethod - - distinguishedNames @done @unsupported @darwinSecurityFrameworkUnavailable @grandfathered - - host - - init() - - init(host:port:protocol:realm:authenticationMethod:) - - init(proxyHost:port:type:realm:authenticationMethod:) - - isProxy() - - port - - protocol - - proxyType - - realm - - receivesCredentialSecurely - - serverTrust @done @unsupported @darwinSecurityFrameworkUnavailable @grandfathered - - URLProtocol @done - - cachedResponse - - canInit(with:) - - canInit(with:) - - canonicalRequest(for:) - - client - - init() - - init(request:cachedResponse:client:) - - init(task:cachedResponse:client:) - - property(forKey:in:) - - registerClass(_:) - - Swift.AnyClass - - removeProperty(forKey:in:) - - Swift.Void - - request - - requestIsCacheEquivalent(_:to:) - - setProperty(_:forKey:in:) - - Swift.Void - - startLoading() - - Swift.Void - - stopLoading() - - Swift.Void - - task - - unregisterClass(_:) - - Swift.AnyClass - - Swift.Void - - URLProtocolClient @done - - urlProtocol(_:cachedResponseIsValid:) - - Swift.Void - - urlProtocol(_:didCancel:) - - Swift.Void - - urlProtocol(_:didFailWithError:) - - Swift.Void - - urlProtocol(_:didLoad:) - - Swift.Void - - urlProtocol(_:didReceive:) - - Swift.Void - - urlProtocol(_:didReceive:cacheStoragePolicy:) - - Swift.Void - - urlProtocol(_:wasRedirectedTo:redirectResponse:) - - Swift.Void - - urlProtocolDidFinishLoading(_:) - - Swift.Void - - URLQueryItem @done - - ==(_:_:) - - ReferenceType - - customMirror - - debugDescription - - description - - hash(into:) - - hashValue - - init(name:value:) - - name - - value - - URLRequest @done - - ==(_:_:) - - CachePolicy - - NetworkServiceType - - ReferenceType - - addValue(_:forHTTPHeaderField:) - - allHTTPHeaderFields - - allowsCellularAccess - - allowsConstrainedNetworkAccess - - allowsExpensiveNetworkAccess - - cachePolicy - - Foundation.URLRequest.CachePolicy - - customMirror - - debugDescription - - description - - hash(into:) - - hashValue - - httpBody - - httpBodyStream - - httpMethod - - httpShouldHandleCookies - - httpShouldUsePipelining - - init(url:cachePolicy:timeoutInterval:) - - Foundation.TimeInterval - - Foundation.URLRequest.CachePolicy - - mainDocumentURL - - networkServiceType - - Foundation.URLRequest.NetworkServiceType - - setValue(_:forHTTPHeaderField:) - - timeoutInterval - - Foundation.TimeInterval - - url - - value(forHTTPHeaderField:) - - URLResourceKey @done - - RawValue - - _ObjectiveCType - - addedToDirectoryDateKey - - applicationIsScriptableKey - - attributeModificationDateKey - - canonicalPathKey - - contentAccessDateKey - - contentModificationDateKey - - creationDateKey - - customIconKey - - documentIdentifierKey - - effectiveIconKey - - fileAllocatedSizeKey - - fileResourceIdentifierKey - - fileResourceTypeKey - - fileSecurityKey - - fileSizeKey - - generationIdentifierKey - - hasHiddenExtensionKey - - init(_:) - - init(rawValue:) - - isAliasFileKey - - isApplicationKey - - isDirectoryKey - - isExcludedFromBackupKey - - isExecutableKey - - isHiddenKey - - isMountTriggerKey - - isPackageKey - - isReadableKey - - isRegularFileKey - - isSymbolicLinkKey - - isSystemImmutableKey - - isUbiquitousItemKey - - isUserImmutableKey - - isVolumeKey - - isWritableKey - - keysOfUnsetValuesKey - - labelColorKey - - labelNumberKey - - linkCountKey - - localizedLabelKey - - localizedNameKey - - localizedTypeDescriptionKey - - nameKey - - parentDirectoryURLKey - - pathKey - - preferredIOBlockSizeKey - - quarantinePropertiesKey - - rawValue - - tagNamesKey - - thumbnailDictionaryKey - - thumbnailKey - - totalFileAllocatedSizeKey - - totalFileSizeKey - - typeIdentifierKey - - ubiquitousItemContainerDisplayNameKey - - ubiquitousItemDownloadRequestedKey - - ubiquitousItemDownloadingErrorKey - - ubiquitousItemDownloadingStatusKey - - ubiquitousItemHasUnresolvedConflictsKey - - ubiquitousItemIsDownloadingKey - - ubiquitousItemIsSharedKey - - ubiquitousItemIsUploadedKey - - ubiquitousItemIsUploadingKey - - ubiquitousItemUploadingErrorKey - - ubiquitousSharedItemCurrentUserPermissionsKey - - ubiquitousSharedItemCurrentUserRoleKey - - ubiquitousSharedItemMostRecentEditorNameComponentsKey - - ubiquitousSharedItemOwnerNameComponentsKey - - volumeAvailableCapacityForImportantUsageKey - - volumeAvailableCapacityForOpportunisticUsageKey - - volumeAvailableCapacityKey - - volumeCreationDateKey - - volumeIdentifierKey - - volumeIsAutomountedKey - - volumeIsBrowsableKey - - volumeIsEjectableKey - - volumeIsEncryptedKey - - volumeIsInternalKey - - volumeIsJournalingKey - - volumeIsLocalKey - - volumeIsReadOnlyKey - - volumeIsRemovableKey - - volumeIsRootFileSystemKey - - volumeLocalizedFormatDescriptionKey - - volumeLocalizedNameKey - - volumeMaximumFileSizeKey - - volumeNameKey - - volumeResourceCountKey - - volumeSupportsAccessPermissionsKey - - volumeSupportsAdvisoryFileLockingKey - - volumeSupportsCasePreservedNamesKey - - volumeSupportsCaseSensitiveNamesKey - - volumeSupportsCompressionKey - - volumeSupportsExclusiveRenamingKey - - volumeSupportsExtendedSecurityKey - - volumeSupportsFileCloningKey - - volumeSupportsHardLinksKey - - volumeSupportsImmutableFilesKey - - volumeSupportsJournalingKey - - volumeSupportsPersistentIDsKey - - volumeSupportsRenamingKey - - volumeSupportsRootDirectoryDatesKey - - volumeSupportsSparseFilesKey - - volumeSupportsSwapRenamingKey - - volumeSupportsSymbolicLinksKey - - volumeSupportsVolumeSizesKey - - volumeSupportsZeroRunsKey - - volumeTotalCapacityKey - - volumeURLForRemountingKey - - volumeURLKey - - volumeUUIDStringKey - - URLResourceValues @done - - addedToDirectoryDate - - allValues - - applicationIsScriptable - - attributeModificationDate - - canonicalPath - - contentAccessDate - - contentModificationDate - - creationDate - - documentIdentifier - - fileAllocatedSize - - fileResourceIdentifier - - fileResourceType - - fileSecurity - - fileSize - - generationIdentifier - - hasHiddenExtension - - init() - - isAliasFile - - isApplication - - isDirectory - - isExcludedFromBackup - - isExecutable - - isHidden - - isMountTrigger - - isPackage - - isReadable - - isRegularFile - - isSymbolicLink - - isSystemImmutable - - isUbiquitousItem - - isUserImmutable - - isVolume - - isWritable - - labelNumber - - linkCount - - localizedLabel - - localizedName - - localizedTypeDescription - - name - - parentDirectory - - path - - preferredIOBlockSize - - quarantineProperties - - tagNames - - totalFileAllocatedSize - - totalFileSize - - typeIdentifier - - ubiquitousItemContainerDisplayName - - ubiquitousItemDownloadRequested - - ubiquitousItemDownloadingError - - ubiquitousItemDownloadingStatus - - ubiquitousItemHasUnresolvedConflicts - - ubiquitousItemIsDownloading - - ubiquitousItemIsShared - - ubiquitousItemIsUploaded - - ubiquitousItemIsUploading - - ubiquitousItemUploadingError - - ubiquitousSharedItemCurrentUserPermissions - - ubiquitousSharedItemCurrentUserRole - - ubiquitousSharedItemMostRecentEditorNameComponents - - ubiquitousSharedItemOwnerNameComponents - - volume - - volumeAvailableCapacity - - volumeAvailableCapacityForImportantUsage - - volumeAvailableCapacityForOpportunisticUsage - - volumeCreationDate - - volumeIdentifier - - volumeIsAutomounted - - volumeIsBrowsable - - volumeIsEjectable - - volumeIsEncrypted - - volumeIsInternal - - volumeIsJournaling - - volumeIsLocal - - volumeIsReadOnly - - volumeIsRemovable - - volumeIsRootFileSystem - - volumeLocalizedFormatDescription - - volumeLocalizedName - - volumeMaximumFileSize - - volumeName - - volumeResourceCount - - volumeSupportsAccessPermissions - - volumeSupportsAdvisoryFileLocking - - volumeSupportsCasePreservedNames - - volumeSupportsCaseSensitiveNames - - volumeSupportsCompression - - volumeSupportsExclusiveRenaming - - volumeSupportsExtendedSecurity - - volumeSupportsFileCloning - - volumeSupportsHardLinks - - volumeSupportsImmutableFiles - - volumeSupportsJournaling - - volumeSupportsPersistentIDs - - volumeSupportsRenaming - - volumeSupportsRootDirectoryDates - - volumeSupportsSparseFiles - - volumeSupportsSwapRenaming - - volumeSupportsSymbolicLinks - - volumeSupportsVolumeSizes - - volumeSupportsZeroRuns - - volumeTotalCapacity - - volumeURLForRemounting - - volumeUUIDString - - URLResponse @done - - expectedContentLength - - init() - - init(url:mimeType:expectedContentLength:textEncodingName:) - - mimeType - - suggestedFilename - - textEncodingName - - url - - URLSession - - AuthChallengeDisposition @done - - RawValue - - cancelAuthenticationChallenge - - init(rawValue:) - - performDefaultHandling - - rawValue - - rejectProtectionSpace - - useCredential - - DataTaskPublisher - - Failure - - Output - - init(request:session:) - - receive(subscriber:) - - request - - session - - DelayedRequestDisposition @done - - RawValue - - cancel - - continueLoading - - init(rawValue:) - - rawValue - - useNewRequest - - ResponseDisposition @done - - RawValue - - allow - - becomeDownload - - becomeStream - - cancel - - init(rawValue:) - - rawValue - - configuration @done - - dataTask(with:) @done - - dataTask(with:) @done - - dataTask(with:completionHandler:) @done - - dataTask(with:completionHandler:) @done - - dataTaskPublisher(for:) - - dataTaskPublisher(for:) - - delegate @done - - delegateQueue @done - - downloadTask(with:) @done - - downloadTask(with:) @done - - downloadTask(with:completionHandler:) @done - - downloadTask(with:completionHandler:) @done - - downloadTask(withResumeData:) @done - - downloadTask(withResumeData:completionHandler:) @done - - finishTasksAndInvalidate() @done - - Swift.Void - - flush(completionHandler:) @done - - Swift.Void - - getAllTasks(completionHandler:) @done - - Swift.Void - - getTasksWithCompletionHandler(_:) @done - - Swift.Void - - init() @done - - init(configuration:) @done - - init(configuration:delegate:delegateQueue:) @done - - invalidateAndCancel() @done - - Swift.Void - - new() @done @unsupported @useSwiftForMemoryManagement - - reset(completionHandler:) @done - - Swift.Void - - sessionDescription @done - - shared @done - - streamTask(with:) - - streamTask(withHostName:port:) - - uploadTask(with:from:) @done - - uploadTask(with:from:completionHandler:) @done - - uploadTask(with:fromFile:) @done - - uploadTask(with:fromFile:completionHandler:) @done - - uploadTask(withStreamedRequest:) @done - - webSocketTask(with:) @done - - webSocketTask(with:) @done - - webSocketTask(with:protocols:) @done - - URLSessionConfiguration - - allowsCellularAccess @done - - allowsConstrainedNetworkAccess - - allowsExpensiveNetworkAccess - - background(withIdentifier:) @done - - backgroundSessionConfiguration(_:) @done - - connectionProxyDictionary @done - - default @done - - ephemeral @done - - httpAdditionalHeaders @done - - httpCookieAcceptPolicy @done - - httpCookieStorage @done - - httpMaximumConnectionsPerHost @done - - httpShouldSetCookies @done - - httpShouldUsePipelining @done - - identifier @done - - init() @done - - isDiscretionary @done - - networkServiceType @done - - new() @done - - protocolClasses @done - - requestCachePolicy @done - - sharedContainerIdentifier @done - - shouldUseExtendedBackgroundIdleMode @done - - timeoutIntervalForRequest @done - - Foundation.TimeInterval @done - - timeoutIntervalForResource @done - - Foundation.TimeInterval @done - - tlsMaximumSupportedProtocol @done - - tlsMaximumSupportedProtocolVersion @done - - tlsMinimumSupportedProtocol @done - - tlsMinimumSupportedProtocolVersion @done - - urlCache @done - - urlCredentialStorage @done - - waitsForConnectivity @done @unsupported @requiresOSSupport - - URLSessionDataDelegate @done - - urlSession(_:dataTask:didBecome:) - - Swift.Void - - urlSession(_:dataTask:didBecome:) - - Swift.Void - - urlSession(_:dataTask:didReceive:) - - Swift.Void - - urlSession(_:dataTask:didReceive:completionHandler:) - - Swift.Void - - urlSession(_:dataTask:willCacheResponse:completionHandler:) - - Swift.Void - - URLSessionDataTask @done - - init() - - new() @done @unsupported @useSwiftForMemoryManagement - - URLSessionDelegate @done - - urlSession(_:didBecomeInvalidWithError:) - - Swift.Void - - urlSession(_:didReceive:completionHandler:) - - Swift.Void - - URLSessionDownloadDelegate @done - - urlSession(_:downloadTask:didFinishDownloadingTo:) - - Swift.Void - - urlSession(_:downloadTask:didResumeAtOffset:expectedTotalBytes:) - - Swift.Void - - urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:) - - Swift.Void - - URLSessionDownloadTask @done - - cancel(byProducingResumeData:) - - Swift.Void - - init() - - new() - - URLSessionStreamDelegate @done - - urlSession(_:betterRouteDiscoveredFor:) - - Swift.Void - - urlSession(_:readClosedFor:) - - Swift.Void - - urlSession(_:streamTask:didBecome:outputStream:) - - Swift.Void - - urlSession(_:writeClosedFor:) - - Swift.Void - - URLSessionStreamTask - - captureStreams() - - Swift.Void - - closeRead() - - Swift.Void - - closeWrite() - - Swift.Void - - init() - - new() - - readData(ofMinLength:maxLength:timeout:completionHandler:) - - Foundation.TimeInterval - - Swift.Void - - startSecureConnection() - - Swift.Void - - stopSecureConnection() - - Swift.Void - - write(_:timeout:completionHandler:) - - Foundation.TimeInterval - - Swift.Void - - URLSessionTask @done - - State - - RawValue - - canceling - - completed - - init(rawValue:) - - rawValue - - running - - suspended - - cancel() - - Swift.Void - - countOfBytesClientExpectsToReceive - - countOfBytesClientExpectsToSend - - countOfBytesExpectedToReceive - - countOfBytesExpectedToSend - - countOfBytesReceived - - countOfBytesSent - - currentRequest - - defaultPriority - - earliestBeginDate - - error - - highPriority - - init() - - lowPriority - - new() - - originalRequest - - priority - - progress - - response - - resume() - - Swift.Void - - state - - suspend() - - Swift.Void - - taskDescription - - taskIdentifier - - URLSessionTaskDelegate @done - - urlSession(_:task:didCompleteWithError:) - - Swift.Void - - urlSession(_:task:didFinishCollecting:) - - Swift.Void - - urlSession(_:task:didReceive:completionHandler:) - - Swift.Void - - urlSession(_:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:) - - Swift.Void - - urlSession(_:task:needNewBodyStream:) - - Swift.Void - - urlSession(_:task:willBeginDelayedRequest:completionHandler:) - - Swift.Void - - urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:) - - Swift.Void - - urlSession(_:taskIsWaitingForConnectivity:) - - Swift.Void - - URLSessionTaskMetrics - - ResourceFetchType - - RawValue - - init(rawValue:) - - localCache - - networkLoad - - rawValue - - serverPush - - unknown - - init() - - new() - - redirectCount - - taskInterval - - transactionMetrics - - URLSessionTaskTransactionMetrics - - connectEndDate - - connectStartDate - - countOfRequestBodyBytesBeforeEncoding - - countOfRequestBodyBytesSent - - countOfRequestHeaderBytesSent - - countOfResponseBodyBytesAfterDecoding - - countOfResponseBodyBytesReceived - - countOfResponseHeaderBytesReceived - - domainLookupEndDate - - domainLookupStartDate - - fetchStartDate - - init() - - isCellular - - isConstrained - - isExpensive - - isMultipath - - isProxyConnection - - isReusedConnection - - localAddress - - localPort - - negotiatedTLSCipherSuite - - negotiatedTLSProtocolVersion - - networkProtocolName - - new() - - remoteAddress - - remotePort - - request - - requestEndDate - - requestStartDate - - resourceFetchType - - response - - responseEndDate - - responseStartDate - - secureConnectionEndDate - - secureConnectionStartDate - - URLSessionUploadTask @done - - init() - - new() @done @unsupported @useSwiftForMemoryManagement - - URLSessionWebSocketDelegate @done - - urlSession(_:webSocketTask:didCloseWith:reason:) - - Swift.Void - - urlSession(_:webSocketTask:didOpenWithProtocol:) - - Swift.Void - - URLSessionWebSocketTask @done - - CloseCode - - RawValue - - abnormalClosure - - goingAway - - init(rawValue:) - - internalServerError - - invalid - - invalidFramePayloadData - - mandatoryExtensionMissing - - messageTooBig - - noStatusReceived - - normalClosure - - policyViolation - - protocolError - - rawValue - - tlsHandshakeFailure - - unsupportedData - - Message - - data - - string - - cancel(with:reason:) - - Swift.Void - - closeCode - - closeReason - - maximumMessageSize - - receive(completionHandler:) - - send(_:completionHandler:) - - sendPing(pongReceiveHandler:) - - Swift.Void - - URLThumbnailDictionaryItem - - NSThumbnail1024x1024SizeKey - - RawValue - - _ObjectiveCType - - init(_:) - - init(rawValue:) - - rawValue - - URLUbiquitousItemDownloadingStatus @done @unsupported @requiresOSSupport - - RawValue - - _ObjectiveCType - - current - - downloaded - - init(rawValue:) - - notDownloaded - - rawValue - - URLUbiquitousSharedItemPermissions @done @unsupported @requiresOSSupport - - RawValue - - _ObjectiveCType - - init(rawValue:) - - rawValue - - readOnly - - readWrite - - URLUbiquitousSharedItemRole @done @unsupported @requiresOSSupport - - RawValue - - _ObjectiveCType - - init(rawValue:) - - owner - - participant - - rawValue - - UUID @done - - ==(_:_:) - - ReferenceType - - customMirror - - debugDescription - - description - - encode(to:) - - hash(into:) - - hashValue - - init() - - init(from:) - - init(uuid:) - - Darwin.uuid_t - - Darwin.__darwin_uuid_t - - init(uuidString:) - - uuid - - Darwin.uuid_t - - Darwin.__darwin_uuid_t - - uuidString - - UndoManager - - beginUndoGrouping() - - Swift.Void - - canRedo - - canUndo - - disableUndoRegistration() - - Swift.Void - - enableUndoRegistration() - - Swift.Void - - endUndoGrouping() - - Swift.Void - - groupingLevel - - groupsByEvent - - init() - - isRedoing - - isUndoRegistrationEnabled - - isUndoing - - levelsOfUndo - - prepare(withInvocationTarget:) - - redo() - - Swift.Void - - redoActionIsDiscardable - - redoActionName - - redoMenuItemTitle - - redoMenuTitle(forUndoActionName:) - - registerUndo(withTarget:handler:) - - registerUndo(withTarget:selector:object:) - - Swift.Void - - removeAllActions() - - Swift.Void - - removeAllActions(withTarget:) - - Swift.Void - - runLoopModes - - setActionIsDiscardable(_:) - - Swift.Void - - setActionName(_:) - - Swift.Void - - undo() - - Swift.Void - - undoActionIsDiscardable - - undoActionName - - undoMenuItemTitle - - undoMenuTitle(forUndoActionName:) - - undoNestedGroup() - - Swift.Void - - Unit @done @dimensionAndUnitHaveSelfConstraints - - init(symbol:) - - symbol - - UnitAcceleration @done - - gravity - - init(symbol:) - - init(symbol:converter:) - - metersPerSecondSquared - - UnitAngle @done - - arcMinutes - - arcSeconds - - degrees - - gradians - - init(symbol:) - - init(symbol:converter:) - - radians - - revolutions - - UnitArea @done - - acres - - ares - - hectares - - init(symbol:) - - init(symbol:converter:) - - squareCentimeters - - squareFeet - - squareInches - - squareKilometers - - squareMegameters - - squareMeters - - squareMicrometers - - squareMiles - - squareMillimeters - - squareNanometers - - squareYards - - UnitConcentrationMass @done - - gramsPerLiter - - init(symbol:) - - init(symbol:converter:) - - milligramsPerDeciliter - - millimolesPerLiter(withGramsPerMole:) - - UnitConverter @done - - baseUnitValue(fromValue:) - - init() - - value(fromBaseUnitValue:) - - UnitConverterLinear @done - - coefficient - - constant - - init() - - init(coefficient:) - - init(coefficient:constant:) - - UnitDispersion @done - - init(symbol:) - - init(symbol:converter:) - - partsPerMillion - - UnitDuration @done - - hours - - init(symbol:) - - init(symbol:converter:) - - microseconds - - milliseconds - - minutes - - nanoseconds - - picoseconds - - seconds - - UnitElectricCharge @done - - ampereHours - - coulombs - - init(symbol:) - - init(symbol:converter:) - - kiloampereHours - - megaampereHours - - microampereHours - - milliampereHours - - UnitElectricCurrent @done - - amperes - - init(symbol:) - - init(symbol:converter:) - - kiloamperes - - megaamperes - - microamperes - - milliamperes - - UnitElectricPotentialDifference @done - - init(symbol:) - - init(symbol:converter:) - - kilovolts - - megavolts - - microvolts - - millivolts - - volts - - UnitElectricResistance @done - - init(symbol:) - - init(symbol:converter:) - - kiloohms - - megaohms - - microohms - - milliohms - - ohms - - UnitEnergy @done - - calories - - init(symbol:) - - init(symbol:converter:) - - joules - - kilocalories - - kilojoules - - kilowattHours - - UnitFrequency - - framesPerSecond - - gigahertz @done - - hertz @done - - init(symbol:) @done - - init(symbol:converter:) @done - - kilohertz @done - - megahertz @done - - microhertz @done - - millihertz @done - - nanohertz @done - - terahertz @done - - UnitFuelEfficiency @done - - init(symbol:) - - init(symbol:converter:) - - litersPer100Kilometers - - milesPerGallon - - milesPerImperialGallon - - UnitIlluminance @done - - init(symbol:) - - init(symbol:converter:) - - lux - - UnitInformationStorage @done - - bits - - bytes - - exabits - - exabytes - - exbibits - - exbibytes - - gibibits - - gibibytes - - gigabits - - gigabytes - - init(symbol:) - - init(symbol:converter:) - - kibibits - - kibibytes - - kilobits - - kilobytes - - mebibits - - mebibytes - - megabits - - megabytes - - nibbles - - pebibits - - pebibytes - - petabits - - petabytes - - tebibits - - tebibytes - - terabits - - terabytes - - yobibits - - yobibytes - - yottabits - - yottabytes - - zebibits - - zebibytes - - zettabits - - zettabytes - - UnitLength @done - - astronomicalUnits - - centimeters - - decameters - - decimeters - - fathoms - - feet - - furlongs - - hectometers - - inches - - init(symbol:) - - init(symbol:converter:) - - kilometers - - lightyears - - megameters - - meters - - micrometers - - miles - - millimeters - - nanometers - - nauticalMiles - - parsecs - - picometers - - scandinavianMiles - - yards - - UnitMass @done - - carats - - centigrams - - decigrams - - grams - - init(symbol:) - - init(symbol:converter:) - - kilograms - - metricTons - - micrograms - - milligrams - - nanograms - - ounces - - ouncesTroy - - picograms - - pounds - - shortTons - - slugs - - stones - - UnitPower @done - - femtowatts - - gigawatts - - horsepower - - init(symbol:) - - init(symbol:converter:) - - kilowatts - - megawatts - - microwatts - - milliwatts - - nanowatts - - picowatts - - terawatts - - watts - - UnitPressure @done - - bars - - gigapascals - - hectopascals - - inchesOfMercury - - init(symbol:) - - init(symbol:converter:) - - kilopascals - - megapascals - - millibars - - millimetersOfMercury - - newtonsPerMetersSquared - - poundsForcePerSquareInch - - UnitSpeed @done - - init(symbol:) - - init(symbol:converter:) - - kilometersPerHour - - knots - - metersPerSecond - - milesPerHour - - UnitTemperature @done - - celsius - - fahrenheit - - init(symbol:) - - init(symbol:converter:) - - kelvin - - UnitVolume @done - - acreFeet - - bushels - - centiliters - - cubicCentimeters - - cubicDecimeters - - cubicFeet - - cubicInches - - cubicKilometers - - cubicMeters - - cubicMiles - - cubicMillimeters - - cubicYards - - cups - - deciliters - - fluidOunces - - gallons - - imperialFluidOunces - - imperialGallons - - imperialPints - - imperialQuarts - - imperialTablespoons - - imperialTeaspoons - - init(symbol:) - - init(symbol:converter:) - - kiloliters - - liters - - megaliters - - metricCups - - milliliters - - pints - - quarts - - tablespoons - - teaspoons - - UnsafeBufferPointer @done - - Regions - - regions - - withUnsafeBytes(_:) - - UnsafeMutableBufferPointer @done - - withUnsafeBytes(_:) - - UnsafeMutableRawBufferPointer @done - - withUnsafeBytes(_:) - - UnsafeRawBufferPointer @done - - Regions - - regions - - withUnsafeBytes(_:) - - UserDefaults @done - - addSuite(named:) - - Swift.Void - - argumentDomain - - array(forKey:) - - bool(forKey:) - - data(forKey:) - - dictionary(forKey:) - - dictionaryRepresentation() - - didChangeNotification - - double(forKey:) - - float(forKey:) - - globalDomain - - init() - - init(suiteName:) - - integer(forKey:) - - object(forKey:) - - objectIsForced(forKey:) - - objectIsForced(forKey:inDomain:) - - persistentDomain(forName:) - - register(defaults:) - - Swift.Void - - registrationDomain - - removeObject(forKey:) - - Swift.Void - - removePersistentDomain(forName:) - - Swift.Void - - removeSuite(named:) - - Swift.Void - - removeVolatileDomain(forName:) - - Swift.Void - - resetStandardUserDefaults() - - Swift.Void - - set(_:forKey:) - - Swift.Void - - set(_:forKey:) - - Swift.Void - - set(_:forKey:) - - Swift.Void - - set(_:forKey:) - - Swift.Void - - set(_:forKey:) - - Swift.Void - - set(_:forKey:) - - Swift.Void - - setPersistentDomain(_:forName:) - - Swift.Void - - setVolatileDomain(_:forName:) - - Swift.Void - - standard - - string(forKey:) - - stringArray(forKey:) - - synchronize() - - url(forKey:) - - volatileDomain(forName:) - - volatileDomainNames - - ValueTransformer - - allowsReverseTransformation() - - init() - - init(forName:) - - reverseTransformedValue(_:) - - setValueTransformer(_:forName:) - - Swift.Void - - transformedValue(_:) - - transformedValueClass() - - Swift.AnyClass - - valueTransformerNames() - - XMLDTD @done - - addChild(_:) - - Swift.Void - - attributeDeclaration(forName:elementName:) - - elementDeclaration(forName:) - - entityDeclaration(forName:) - - init() - - init(contentsOf:options:) - - init(data:options:) - - init(kind:) - - insertChild(_:at:) - - Swift.Void - - insertChildren(_:at:) - - Swift.Void - - notationDeclaration(forName:) - - predefinedEntityDeclaration(forName:) - - publicID - - removeChild(at:) - - Swift.Void - - replaceChild(at:with:) - - Swift.Void - - setChildren(_:) - - Swift.Void - - systemID - - XMLDTDNode @done - - DTDKind - - RawValue - - anyDeclaration - - cdataAttribute - - elementDeclaration - - emptyDeclaration - - entitiesAttribute - - entityAttribute - - enumerationAttribute - - general - - idAttribute - - idRefAttribute - - idRefsAttribute - - init(rawValue:) - - mixedDeclaration - - nmTokenAttribute - - nmTokensAttribute - - notationAttribute - - parameter - - parsed - - predefined - - rawValue - - undefinedDeclaration - - unparsed - - dtdKind - - init() - - init(kind:) - - init(kind:options:) - - init(xmlString:) - - isExternal - - notationName - - publicID - - systemID - - XMLDocument - - ContentKind @done - - RawValue @done - - html @done - - init(rawValue:) @done - - rawValue @done - - text @done - - xhtml @done - - xml @done - - addChild(_:) @done - - Swift.Void @done - - characterEncoding @done - - documentContentKind @done - - dtd @done - - init() @done - - init(contentsOf:options:) @done - - init(data:options:) @done - - init(kind:) @done - - init(kind:options:) @done - - init(rootElement:) @done - - init(xmlString:options:) @done - - insertChild(_:at:) @done - - Swift.Void @done - - insertChildren(_:at:) @done - - Swift.Void @done - - isStandalone @done - - mimeType @done - - object(byApplyingXSLT:arguments:) - - object(byApplyingXSLTString:arguments:) - - objectByApplyingXSLT(at:arguments:) - - removeChild(at:) @done - - Swift.Void @done - - replaceChild(at:with:) @done - - Swift.Void @done - - replacementClass(for:) @done - - Swift.AnyClass @done - - Swift.AnyClass @done - - rootElement() @done - - setChildren(_:) @done - - Swift.Void @done - - setRootElement(_:) @done - - Swift.Void @done - - validate() @done - - version @done - - xmlData @done - - xmlData(options:) @done - - XMLElement @done - - addAttribute(_:) - - Swift.Void - - addChild(_:) - - Swift.Void - - addNamespace(_:) - - Swift.Void - - attribute(forLocalName:uri:) - - attribute(forName:) - - attributes - - elements(forLocalName:uri:) - - elements(forName:) - - init() - - init(kind:) - - init(kind:options:) - - init(name:) - - init(name:stringValue:) - - init(name:uri:) - - init(xmlString:) - - insertChild(_:at:) - - Swift.Void - - insertChildren(_:at:) - - Swift.Void - - namespace(forPrefix:) - - namespaces - - normalizeAdjacentTextNodesPreservingCDATA(_:) - - Swift.Void - - removeAttribute(forName:) - - Swift.Void - - removeChild(at:) - - Swift.Void - - removeNamespace(forPrefix:) - - Swift.Void - - replaceChild(at:with:) - - Swift.Void - - resolveNamespace(forName:) - - resolvePrefix(forNamespaceURI:) - - setAttributesAs(_:) - - Swift.Void - - setAttributesWith(_:) - - Swift.Void - - setChildren(_:) - - Swift.Void - - XMLNode - - Kind @done - - DTDKind - - RawValue - - attribute - - attributeDeclaration - - comment - - document - - element - - elementDeclaration - - entityDeclaration - - init(rawValue:) - - invalid - - namespace - - notationDeclaration - - processingInstruction - - rawValue - - text - - Options @done - - ArrayLiteralElement - - Element - - RawValue - - documentIncludeContentTypeDeclaration - - documentTidyHTML - - documentTidyXML - - documentValidate - - documentXInclude - - init(rawValue:) - - nodeCompactEmptyElement - - nodeExpandEmptyElement - - nodeIsCDATA - - nodeLoadExternalEntitiesAlways - - nodeLoadExternalEntitiesNever - - nodeLoadExternalEntitiesSameOriginOnly - - nodeNeverEscapeContents - - nodePreserveAll - - nodePreserveAttributeOrder - - nodePreserveCDATA - - nodePreserveCharacterReferences - - nodePreserveDTD - - nodePreserveEmptyElements - - nodePreserveEntities - - nodePreserveNamespaceOrder - - nodePreservePrefixes - - nodePreserveQuotes - - nodePreserveWhitespace - - nodePrettyPrint - - nodePromoteSignificantWhitespace - - nodeUseDoubleQuotes - - nodeUseSingleQuotes - - rawValue - - attribute(withName:stringValue:) @done - - attribute(withName:uri:stringValue:) @done - - canonicalXMLStringPreservingComments(_:) @done - - child(at:) @done - - childCount @done - - children @done - - comment(withStringValue:) @done - - description @done - - detach() @done - - Swift.Void @done - - document() @done - - document(withRootElement:) @done - - dtdNode(withXMLString:) @done - - element(withName:) @done - - element(withName:children:attributes:) @done - - element(withName:stringValue:) @done - - element(withName:uri:) @done - - index @done - - init() @done - - init(kind:) @done - - init(kind:options:) @done - - kind @done - - level @done - - localName @done - - localName(forName:) @done - - name @done - - namespace(withName:stringValue:) @done - - next @done - - nextSibling @done - - nodes(forXPath:) @done - - objectValue @done - - objects(forXQuery:) - - objects(forXQuery:constants:) - - parent @done - - predefinedNamespace(forPrefix:) @done - - prefix @done - - prefix(forName:) @done - - previous @done - - previousSibling @done - - processingInstruction(withName:stringValue:) @done - - rootDocument @done - - setStringValue(_:resolvingEntities:) @done - - Swift.Void @done - - stringValue @done - - text(withStringValue:) @done - - uri @done - - xPath @done - - xmlString @done - - xmlString(options:) @done - - XMLParser @done - - ErrorCode - - RawValue - - attributeHasNoValueError - - attributeListNotFinishedError - - attributeListNotStartedError - - attributeNotFinishedError - - attributeNotStartedError - - attributeRedefinedError - - cdataNotFinishedError - - characterRefAtEOFError - - characterRefInDTDError - - characterRefInEpilogError - - characterRefInPrologError - - commentContainsDoubleHyphenError - - commentNotFinishedError - - conditionalSectionNotFinishedError - - conditionalSectionNotStartedError - - delegateAbortedParseError - - doctypeDeclNotFinishedError - - documentStartError - - elementContentDeclNotFinishedError - - elementContentDeclNotStartedError - - emptyDocumentError - - encodingNotSupportedError - - entityBoundaryError - - entityIsExternalError - - entityIsParameterError - - entityNotFinishedError - - entityNotStartedError - - entityRefAtEOFError - - entityRefInDTDError - - entityRefInEpilogError - - entityRefInPrologError - - entityRefLoopError - - entityReferenceMissingSemiError - - entityReferenceWithoutNameError - - entityValueRequiredError - - equalExpectedError - - externalStandaloneEntityError - - externalSubsetNotFinishedError - - extraContentError - - gtRequiredError - - init(rawValue:) - - internalError - - invalidCharacterError - - invalidCharacterInEntityError - - invalidCharacterRefError - - invalidConditionalSectionError - - invalidDecimalCharacterRefError - - invalidEncodingError - - invalidEncodingNameError - - invalidHexCharacterRefError - - invalidURIError - - lessThanSymbolInAttributeError - - literalNotFinishedError - - literalNotStartedError - - ltRequiredError - - ltSlashRequiredError - - misplacedCDATAEndStringError - - misplacedXMLDeclarationError - - mixedContentDeclNotFinishedError - - mixedContentDeclNotStartedError - - nameRequiredError - - namespaceDeclarationError - - nmtokenRequiredError - - noDTDError - - notWellBalancedError - - notationNotFinishedError - - notationNotStartedError - - outOfMemoryError - - parsedEntityRefAtEOFError - - parsedEntityRefInEpilogError - - parsedEntityRefInInternalError - - parsedEntityRefInInternalSubsetError - - parsedEntityRefInPrologError - - parsedEntityRefMissingSemiError - - parsedEntityRefNoNameError - - pcdataRequiredError - - prematureDocumentEndError - - processingInstructionNotFinishedError - - processingInstructionNotStartedError - - publicIdentifierRequiredError - - rawValue - - separatorRequiredError - - spaceRequiredError - - standaloneValueError - - stringNotClosedError - - stringNotStartedError - - tagNameMismatchError - - undeclaredEntityError - - unfinishedTagError - - unknownEncodingError - - unparsedEntityError - - uriFragmentError - - uriRequiredError - - xmlDeclNotFinishedError - - xmlDeclNotStartedError - - ExternalEntityResolvingPolicy - - RawValue - - always - - init(rawValue:) - - never - - noNetwork - - rawValue - - sameOriginOnly - - abortParsing() - - Swift.Void - - allowedExternalEntityURLs - - columnNumber - - delegate - - errorDomain - - externalEntityResolvingPolicy - - init() - - init(contentsOf:) - - init(data:) - - init(stream:) - - lineNumber - - parse() - - parserError - - publicID - - shouldProcessNamespaces - - shouldReportNamespacePrefixes - - shouldResolveExternalEntities - - systemID - - XMLParserDelegate @done - - parser(_:didEndElement:namespaceURI:qualifiedName:) - - Swift.Void - - parser(_:didEndMappingPrefix:) - - Swift.Void - - parser(_:didStartElement:namespaceURI:qualifiedName:attributes:) - - Swift.Void - - parser(_:didStartMappingPrefix:toURI:) - - Swift.Void - - parser(_:foundAttributeDeclarationWithName:forElement:type:defaultValue:) - - Swift.Void - - parser(_:foundCDATA:) - - Swift.Void - - parser(_:foundCharacters:) - - Swift.Void - - parser(_:foundComment:) - - Swift.Void - - parser(_:foundElementDeclarationWithName:model:) - - Swift.Void - - parser(_:foundExternalEntityDeclarationWithName:publicID:systemID:) - - Swift.Void - - parser(_:foundIgnorableWhitespace:) - - Swift.Void - - parser(_:foundInternalEntityDeclarationWithName:value:) - - Swift.Void - - parser(_:foundNotationDeclarationWithName:publicID:systemID:) - - Swift.Void - - parser(_:foundProcessingInstructionWithTarget:data:) - - Swift.Void - - parser(_:foundUnparsedEntityDeclarationWithName:publicID:systemID:notationName:) - - Swift.Void - - parser(_:parseErrorOccurred:) - - Swift.Void - - parser(_:resolveExternalEntityName:systemID:) - - parser(_:validationErrorOccurred:) - - Swift.Void - - parserDidEndDocument(_:) - - Swift.Void - - parserDidStartDocument(_:) - - Swift.Void - - kCFStringEncodingASCII @done @unsupported @avoidUsingCF - - CoreFoundation.CFStringEncoding - - pow(_:_:) @done - - unichar @done diff --git a/Docs/Archiving.md b/Docs/Archiving.md deleted file mode 100644 index 6851726b2a..0000000000 --- a/Docs/Archiving.md +++ /dev/null @@ -1,64 +0,0 @@ -# Archiving Notes - -There is a preliminary implementation of NSKeyedArchiver and NSKeyedUnarchiver which should be compatible with the macOS version. - -* NSKeyedUnarchiver reads the entire plist into memory before constructing the object graph, it should construct it incrementally as does Foundation on macOS - -* Paths that raise errors vs. calling _fatalError() need to be reviewed carefully - -* The signature of the decoding APIs that take a class whitelist has changed from NSSet to [AnyClass] as AnyClass does not support Hashable. The API change has been marked Experimental. - -* classForKeyed[Un]Archiver has moved into NSObject so it can be overridden, move this back into an extension eventually - -# Classes - -## Implemented - -* NSArray -* NSCalendar -* NSCFArray (encodes as NSArray) -* NSCFDictionary (encodes as NSDictionary) -* NSCFSet (encodes as NSSet) -* NSCFString (encodes as NSString) -* NSConcreteValue -* NSData -* NSDate -* NSDictionary -* NSError -* NSLocale -* NSNotification -* NSNull (no-op) -* NSOrderedSet -* NSPersonNameComponents -* NSPort (not supported for keyed archiving) -* NSSet -* NSSpecialValue (for limited number of types) -* NSString -* NSTimeZone -* NSURL -* NSUUID -* NSValue - -## TODO - -### Pending actual class implementation - -* NSAttributedString - -### Pending coder implementation - -* NSAffineTransform -* NSCharacterSet -* NSDecimalNumber -* NSDecimalNumberHandler -* NSExpression -* NSIndexPath -* NSIndexSet -* NSPredicate -* NSSortDescriptor -* NSTextCheckingResult -* NSURLAuthenticationChallenge -* NSURLCache -* NSURLCredential -* NSURLProtectionSpace -* NSURLRequest diff --git a/Docs/Design.md b/Docs/Design.md deleted file mode 100644 index b056dafe21..0000000000 --- a/Docs/Design.md +++ /dev/null @@ -1,128 +0,0 @@ - -# Design Principles - -## Portability - -This version of Foundation is designed to support the same API as the Foundation that ships with Apple operating systems. A key difference is that the distribution of Swift open source does not include the Objective-C runtime. This means that the source code of Foundation from macOS and iOS could not be simply reused on other platforms. However, we believe that the vast majority of the core API concepts presented in Foundation are themselves portable and are useful on all platforms. - -It is not a goal of this project to create new API that extends beyond the API provided on Apple operating systems, as that would hamper the goal of portability. - -Some Foundation API exists on Apple platforms but is very OS-specific. In those cases, we choose to omit that API from this project. We also omit API that is either deprecated or discouraged from use. - -In a very limited number of cases, key Foundation API as it exists on Apple platforms is not portable to Linux without the Objective-C runtime. One example is API which makes use of `AutoreleasingUnsafeMutablePointer`. In these cases, we have put in temporary API to replace it on Linux. All proposed API is marked with `Experiment:` in the documentation for the method. This API is subject to change before final release. - -A significant portion of the implementation of Foundation on Apple platforms is provided by another framework called CoreFoundation (a.k.a. CF). CF is written primarily in C and is very portable. Therefore we have chosen to use it for the internal implementation of Swift Foundation where possible. As CF is present on all platforms, we can use it to provide a common implementation everywhere. - -Another aspect of portability is keeping dependencies to an absolute minimum. With fewer dependencies to port, it is more likely that Foundation will be able to easily compile and run on new platforms. Therefore, we will prefer solutions that are implemented in Foundation itself. Exceptions can be made for major functionality (for example, `ICU`, `libdispatch`, and `libxml2`). - -## A Taxonomy of Types - -A key to the internal design of the framework is the split between the CF implementation and Swift implementation of the Foundation classes. They can be organized into several categories. - -### Swift-only - -These types have implementations that are written only in Swift. They have no CF counterpart. For example, `NSJSONSerialization`. - -### CF-only - -These types are not exposed via the public interface of Foundation, but are used internally by CoreFoundation itself. No CF type can be exposed to a user of Foundation; it is an internal implementation detail only. - -Note that under the Swift runtime, all CoreFoundation objects are instances of the Swift object `__NSCFType`. This allows us to use the native Swift reference counting semantics for all CF types. - -### Has-a relationship - -This is the most common kind of type when implementation is shared between CoreFoundation and Foundation. In this case, a Swift class exists in Foundation that contains a `CFTypeRef` as an ivar. For example, `NSRunLoop` has-a `CFRunLoopRef`. -```swift -public class NSRunLoop : NSObject { - private var _cfRunLoop : CFRunLoopRef - // ... -} -``` - -It is very common inside the implementation of Foundation to receive a result from calling into CF that needs to be returned to the caller as a Foundation object. For this reason, has-a classes must provide an internal constructor of the following form: -```swift -internal init(cfObject : CFRunLoopRef) { - _cfRunLoop = cfObject -} -``` - -### Is-a relationship (toll-free-bridged) - -A smaller number of classes have a special relationship with each other called *toll-free-bridging*. When a CFTypeRef is toll-free-bridged with a Foundation class, its pointer can simply be cast to the appropriate type (in either direction) and it can be passed to functions or methods which expect this type. - -In order for toll-free bridging to work, the Swift class and the CF struct must share the exact same memory layout. Additionally, each CF function that operates on an instance of the class has to first check to see if needs to call out to Swift first. This complexity adds a maintenance cost, so we choose to limit the number of toll-free-bridged classes to a few key places: - -* `NSNumber` and `CFNumberRef` -* `NSData` and `CFDataRef` -* `NSDate` and `CFDateRef` -* `NSURL` and `CFURLRef` -* `NSCalendar` and `CFCalendarRef` -* `NSTimeZone` and `CFTimeZoneRef` -* `NSLocale` and `CFLocaleRef` -* `NSCharacterSet` and `CFCharacterSetRef` - -Additionally, some classes share the same memory layout in CF, Foundation, and the Swift standard library. - -* `NSString`, `CFStringRef`, and `String` -* `NSArray`, `CFArrayRef`, and `Array` -* `NSDictionary`, `CFDictionaryRef`, and `Dictionary` -* `NSSet`, `CFSetRef`, and `Set` - -> Important: There is currently a limitation in the Swift compiler on Linux that prevents bridging to and from Swift types from working correctly. In places where we return Swift types from Foundation APIs, we must manually convert the output to the native Swift types. - -## Platform-specific code - -In general, avoid platform-specific code if possible. When it is required, try to put it in a few key funnel points. - -When different logic is required for the Swift runtime in CF, use the following macro: -```c -#if DEPLOYMENT_RUNTIME_SWIFT -// Swift Open Source Stack -#else -// Objective-C Stack -#endif -``` - -In Swift, the OS-check macro is also available: -```swift -#if os(macOS) || os(iOS) -import Darwin -#elseif os(Linux) -import Glibc -#endif -``` - -# Testing - -The Swift Core Libraries project includes XCTest. Foundation uses XCTest for its unit tests. - -The Foundation Xcode project includes a test target called `TestFoundation`. Run this target (Cmd-R) to build an executable which loads the Swift XCTest library and Swift Foundation library, then runs a set of tests. - -# Foundation Coding Style - -In general, follow the Swift Standard Library naming conventions. This project has some additional guidelines. - -## Public vs Private - -One of the main challenges of developing and maintaining a widely used library is keeping effective separation between public API and private implementation details. We want to maintain both source and binary compatibility in as many cases as possible. - -* Every software change that affects the public API will receive extra scrutiny from code review. Always be aware of the boundary between public and private when making changes. -* It is also important to hide private implementation details of one Foundation class from other Foundation classes. Of course, it is still possible to add internal functions to Foundation to enable library-wide features. -* Prefix private or internal functions, ivars, and types with an underscore (in addition to either the private or internal qualifier). This makes it very obvious if something is public or private in places where the function or ivar is used. -* Include documentation with each public API, following the standards set out in the Swift Naming Conventions. - -## Keeping Organized - -Parts of the CoreFoundation and Foundation libraries are as old as macOS (or older). In order to support long-term maintainability, it is important to keep our source code organized. - -* If it helps keep an effective separation of concerns, feel free to split up functionality of one class over several files. -* If appropriate, use `// MARK - Topic` to split up sections of a file. -* Try to keep declarations of ivars and init methods near the tops of the classes - -## Working in CoreFoundation - -There are some additional considerations when working on the CoreFoundation part of our code, both because it is written in C and also because it is shared amongst platforms. - -* Surround Swift-runtime-specific code with the standard macro `#if DEPLOYMENT_RUNTIME_SWIFT`. -* Surround platform-specific code with our standard macros `TARGET_OS_OSX`, `TARGET_OS_IPHONE` (all iOS platforms and derivatives), `TARGET_OS_LINUX`. -* Follow the coding style of the .c file that you are working in. diff --git a/Docs/FHS Bundles.md b/Docs/FHS Bundles.md deleted file mode 100644 index 089850bb23..0000000000 --- a/Docs/FHS Bundles.md +++ /dev/null @@ -1,123 +0,0 @@ -# Installed Bundles on UNIX-like Systems - -This document covers {CF,NS,}Bundle behavior on Linux, with an eye to keeping things working for non-Linux OSes that have similar POSIX-y setups (in particular, the BSD family.) It covers _two_ different styles of bundle, which are suitable both for things that are installed systemwide (e.g. as part of a platform-supplied package manager), and for freestanding bundles that are embedded (e.g. resource bundles) or executed (e.g. app bundles) but not installed systemwide. - -The aim of this proposal is to provide idiomatic ways for POSIX-y systems to use bundle API, including resource access, in a way equivalent to what Darwin OSes do for bundles installed in `/System` or `/Library`. - -## Installed bundles - -An installed bundle is intended to be installed in a directory hierarchy that models the use of `--prefix=…` in autoconf-like configuration tools. This is suitable for the kind of bundles that we would install in `/System/Library` or in `/Applications`, systemwide, on Darwin OSes: system frameworks, apps installed for all users, and so on. - -This setup complies with the [Filesystem Hierarchy Standard (FHS) 3.0](https://refspecs.linuxfoundation.org/fhs.shtml), used by most Linux distributions. It also fits with the intent of the `/usr` and `/usr/local` directories of many BSD systems (e.g. from FreeBSD's [hier(7)][].) - -[hier(7)]: https://www.freebsd.org/cgi/man.cgi?hier(7) - -### Definition - -An installed bundle exists if there is: - - - A directory with the `.resources` extension; - - contained in a directory named `share`. - -The base name of this bundle is the name of this directory, removing the extension. (E.g., for `/usr/share/MyFramework.resources`, the base name is `MyFramework`.) - -### Bundle Paths - -The bundle's `.resources` directory contains resources much like an [iOS-style flat bundle](https://developer.apple.com/library/content/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW1). Unlike on iOS, however, executables are not contained directly inside this directory. Instead, given that the bundle exists in `share/MyFramework.resources`, then an installed bundle will source from the following additional paths within the prefix the bundle is installed in (the parent directory of the `share` directory): - - - The main executable will be searched in the `bin`, `sbin`, or `lib…` directories. - - Executable bundles will search `bin`, then `sbin`, for an executable with the same base name as the resources folder, plus any platform prefix or suffix for executables. e.g.: `bin/MyApp`. - - Framework bundles will search the appropriate `lib…` directories for a library of the same name, adding appropriate platform prefixes or suffixes for shared library file (falling back to just `lib` otherwise). e.g.: `lib/libMyFramework.so`. - - Auxiliary executables and libraries will be in, or in subdirectories of, `libexec/MyFramework.executables`; - - For framework bundles, `include/MyFramework` will contain headers, though this directory does affect the return values of the runtime API. - -Both paths are optional. If they don't exist, the API will behave much like on Darwin platforms. - -For installed bundles, the bundle's main executable is not searched within its `.resources` path. Instead, we expect that it be installed in the `bin` or `sbin` directory, if executable, or the appropriate `lib…` directory, if a shared library file. These files should be named the same as the main executable name (from Info.plist, or the framework's base name as a default value) plus any appropriate executable or library suffixes or prefixes for the platform. For example: - -``` -share/MyApp.resources -bin/MyApp -``` - -or: - -``` -share/MyFramework.resources -lib64/libMyFramework.so -``` - -The bundle path for an installed bundle is the same as its resources path. That's the path that needs to be passed into `CFBundleCreate()` and equivalents for the bundle to be successfully created; passing associated directory names will return `NULL`. [⊗](#nullForInnerPaths) - -As an example, the following values are produced by invoking these functions on the bundle created with `CFBundleCreate(NULL, …(…"/usr/local/share/MyFramework.resources"))`: - -Function | Path returned ----|--- -`CFBundleCopyBundleURL` | `/usr/local/share/MyFramework.resources` -`CFBundleCopyExecutableURL` | `/usr/local/lib/libMyFramework.so` -`CFBundleCopyResourcesDirectoryURL` | `/usr/local/share/MyFramework.resources` -`CFBundleCopySharedSupportURL` |`/usr/local/share/MyFramework.resources/SharedSupport` -`CFBundleCopyPrivateFrameworksURL` | `/usr/local/libexec/MyFramework.executables/Frameworks` -`CFBundleCopySharedFrameworksURL` | `/usr/local/libexec/MyFramework.executables/SharedFrameworks` -`CFBundleCopyBuiltInPlugInsURL` | `/usr/local/libexec/MyFramework.executables/PlugIns` -`CFBundleCopyAuxiliaryExecutableURL(…, CFSTR("myexec"))` | `/usr/local/libexec/MyFramework.executables/myexec` -`CFBundleCopyResourceURL(…, CFSTR("Welcome"), CFSTR("txt") …)` | `/usr/local/share/MyFramework.resources/en.lproj/Welcome.txt` - -The structure inside any of these paths is the same as that of an iOS bundle containing the appropriate subset of files for its location; for example, the resources folder contains localization `.lproj` subdirectories, the `Frameworks` directory inside the `….executables` contains frameworks, and so on. - -## Freestanding bundles - -We will also support freestanding bundles on platforms that also support installed bundles. These bundles are structured much like their Windows counterparts, where there is a binary and a `.resources` directory on the side, like so: - -``` -./MyFramework.resources -./libMyFramework.so -``` - -### Bundle Paths - -The bundle path for an installed bundle is the same as its resources path. That's the path that needs to be passed into `CFBundleCreate()` and equivalents for the bundle to be successfully created; passing associated paths, including the path to the executable, will return `NULL`. [⊗](#nullForInnerPaths) - -The `.resources` directory functions exactly like an iOS bundle, returning the same paths. By way of example, for a freestanding bundle created with `CFBundleCreate(NULL, …(…"/opt/myapp/MyFramework.resources"))`: - -Function | Path returned ----|--- -`CFBundleCopyBundleURL` | `/opt/myapp/MyFramework.resources` -`CFBundleCopyExecutableURL` | `/opt/myapp/libMyFramework.so` -`CFBundleCopyResourcesDirectoryURL` | `/opt/myapp/MyFramework.resources` -`CFBundleCopySharedSupportURL` |`/opt/myapp/MyFramework.resources/SharedSupport` -`CFBundleCopyPrivateFrameworksURL` | `/opt/myapp/MyFramework.resources/Frameworks` -`CFBundleCopySharedFrameworksURL` | `/opt/myapp/MyFramework.resources/SharedFrameworks` -`CFBundleCopyBuiltInPlugInsURL` | `/opt/myapp/MyFramework.resources/PlugIns` -`CFBundleCopyAuxiliaryExecutableURL(…, CFSTR("myexec"))` | `/opt/myapp/MyFramework.resources/myexec` -`CFBundleCopyResourceURL(…, CFSTR("Welcome"), CFSTR("txt") …)` | `/opt/myapp/MyFramework.resources/en.lproj/Welcome.txt` - -### Embedded Frameworks - -The two formats interact in the case of embedded bundles. Since the inside of any bundle is not compliant with the [LHS](https://refspecs.linuxfoundation.org/fhs.shtml), bundles inside other bundles _must_ be freestanding frameworks. This includes frameworks in the private or shared frameworks paths, built-in plug-ins, and so on. - -## Alternatives considered - -### XDG - -There are two filesystem specs that are relevant to Linux distribution: the Filesystem Hierarchy Specification (FHS), maintained by the Linux Foundation; and the XDG Base Directory Specification, maintained by freedesktop.org. - -While both define where files can be installed on a Linux system, they differ substantially: - -- The FHS defines the directory structure for `/`, the root directory. In particular, it dictates where software and libraries are installed and the structure of `/usr` and `/usr/local`, which is where autoconf-style installations end up by default, and whose structure is mimicked when using `./configure --prefix=…` to isolate app and library environments to a new prefix. - -- The XDG spec defines the directory structure for _user data_, such as preferences, within a single user's home directory. Compatible desktop systems will set environment variables to guide an application to write and read per-user information in paths the current user can read and write to. No part of this spec defines where _code_ should be located, though we will have to heed it for such things as `NSSearchPathsFor…` and current-user defaults reading and writing. - -In comparing the two, I produced a bundle structure suitable for use with the FHS so that it can be incorporated mostly as-is into the lifecycle of autoconf or CMake-driven development on Linux (i.e., making `make install` mostly just work). - -Applications, both UI and server, are usually installed systemwide on Linux (in `/usr` or `/usr/local`), or in appropriate prefixes (generally under `/opt`) for specialized needs, and there isn't a concept of a standalone bundle that may end up in the home directory as it may happen with Mac apps, so the XDG spec becomes a little less relevant. - -### Use the executable's path as the bundle location - -We tried this as our first attempt to avoid using the containing directory path for installed bundles, since all bundles would then have the same location. We moved away from this to the use of the `.resources` directory because it is likely that code will hardcode the assumption of a bundle location being a directory. - -## Footnotes - -: Should we mandate that an executable that _could_ be in an installed bundle (because the binary is in a bin or lib… directory) _must_ be in an installed bundle, e.g. that we won't fall back to searching for a freestanding bundle? - -: This is consistent with Darwin OSes' behavior of returning `NULL` for any path beside the bundle path, even if that path _is_ the auxiliary or main executable path for some bundle. \ No newline at end of file diff --git a/Docs/GettingStarted.md b/Docs/GettingStarted.md deleted file mode 100644 index f396af8f41..0000000000 --- a/Docs/GettingStarted.md +++ /dev/null @@ -1,97 +0,0 @@ -# Getting Started - -## On macOS - -Although macOS is not a deployment platform for Swift Foundation, it is useful for development and test purposes. - -In order to build on macOS, you will need: - -* The latest version of Xcode -* The latest version of the macOS SDK (at this time: 10.15) -* The [current Swift toolchain](https://swift.org/download/#snapshots). - -> Note: due to https://bugs.swift.org/browse/SR-12177 the default Xcode toolchain should be used for now. - -Foundation is developed at the same time as the rest of Swift, so the most recent version of the compiler is required in order to build it. - -The repository includes an Xcode project file as well as an Xcode workspace. The workspace includes both Foundation and XCTest, which makes it easy to build and run everything together. The workspace assumes that Foundation and XCTest are checked out from GitHub in sibling directories. For example: - -```sh -cd Development -ls -swift-corelibs-foundation swift-corelibs-xctest -``` - -Build and test steps: - -0. Run Xcode with the latest toolchain. Follow [the instructions here](https://www.swift.org/install/macos/#installation-via-swiftorg-package-installer) to start Xcode with the correct toolchain. -0. Open `Foundation.xcworkspace`. -0. Build the _SwiftFoundation_ target. This builds CoreFoundation and Foundation. -0. Run (Cmd-R) the _TestFoundation_ target. This builds CoreFoundation, Foundation, XCTest, and TestFoundation, then runs the tests. - -> Note: If you see the name of the XCTest project file in red in the workspace, then Xcode cannot find the cloned XCTest repository. Make sure that it is located next to the `swift-corelibs-foundation` directory and has the name `swift-corelibs-xctest`. - -### Darwin Compatibility Tests - -In order to increase the compatibility between corelibs-foundation and the native Foundation shipped with macOS, there is another Xcode project in the `swift-corelibs-foundation` repository called `DarwinCompatibilityTests.xcodeproj`. This project just runs all of the `TestFoundation` tests using native Foundation. Ideally, any new test written for corelibs-foundation should be tested against -native Foundation to validate that that test is correct. The tests can be run individually using the Test navigator in the left hand pane. - -It should be noted that not all tests currently run correctly either due to differences between the two implementations, the test being used to validate some -internal functionality of corelibs-foundation or the test (and the implementation) actually being incorrect. Overtime these test differences should be reduced as compatibility is increased. - - -## On Linux - -You will need: - -* A supported distribution of Linux. At this time, we support [Ubuntu 16.04 and Ubuntu 18.04](http://www.ubuntu.com). - -To get started, follow the instructions on how to [build Swift](https://github.com/apple/swift/blob/main/docs/HowToGuides/GettingStarted.md#building-the-project-for-the-first-time). Foundation is developed at the same time as the rest of Swift, so the most recent version of the `clang` and `swift` compilers are required in order to build it. The easiest way to make sure you have all of the correct dependencies is to build everything together. - -The default build script does not include Foundation. To configure and build Foundation and TestFoundation including lldb for debugging and the correct ICU library, the following command can be used. All other tests are disabled to reduce build and test time. `--release` is used to avoid building LLVM and the compiler with debugging. - -```sh -swift/utils/build-script --libicu --lldb --release --test --foundation --xctest \ - --foundation-build-type=debug --skip-test-swift --skip-build-benchmarks \ - --skip-test-lldb --skip-test-xctest --skip-test-libdispatch --skip-test-libicu --skip-test-cmark -``` - -The build artifacts will be written to the subdirectory `build/Ninja-ReleaseAssert`. To use a different build directory set the `SWIFT_BUILD_ROOT` environment variable to point to a different directory to use instead of `build`. - -When developing on Foundation, it is simplest to write tests to check the functionality, even if the test is not something that can be used in the final PR, e.g. it runs continuously to demonstrate a memory leak. Tests are added -to the appropriate file in the `TestFoundation` directory, and remember to add the test in to the `allTests` array in that file. - -After the complete Swift build has finished you can iterate over changes you make to Foundation using `cmake` to build `TestFoundation` and run the tests. -Note that `cmake` needs to be a relatively recent version, currently 3.15.1, and if this is not installed already -then it is built as part of the `build-script` invocation. Therefore `cmake` may be installed in `build/cmake`. - -```sh -# Build TestFoundation -$SWIFT_BUILD_ROOT=build $BUILD_ROOT/cmake-linux-x86_64/bin/cmake --build $BUILD_ROOT/Ninja-ReleaseAssert/foundation-linux-x86_64/ -v -- -j4 TestFoundation -# Run the tests -$SWIFT_BUILD_ROOT=build $BUILD_ROOT/cmake-linux-x86_64/bin/cmake --build $BUILD_ROOT/Ninja-ReleaseAssert/foundation-linux-x86_64/ -v -- -j4 test -``` - -If `TestFoundation` needs to be run outside of `ctest`, perhaps to run under `lldb` or to run individual tests, then it can be run directly but an appropriate `LD_LIBRARY_PATH` -needs to be set so that `libdispatch` and `libXCTest` can be found. - -```sh -export BUILD_DIR=build/Ninja-ReleaseAssert -export LD_LIBRARY_PATH=$BUILD_DIR/foundation-linux-x86_64/Foundation:$BUILD_DIR/xctest-linux-x86_64:$BUILD_DIR/libdispatch-linux-x86_64 -$BUILD_DIR/foundation-linux-x86_64/TestFoundation.app/TestFoundation -``` - -To run only one test class or a single test, the tests to run can be specified as a command argument in the form of `TestFoundation.{/testName}` eg to run all of the tests in `TestDate` use -`TestFoundation.TestDate`. To run just `test_BasicConstruction`, use `TestFoundation.TestDate/test_BasicConstruction`. - -If the tests need to be run under `lldb`, use the following command: - -```sh -export BUILD_DIR=build/Ninja-ReleaseAssert -export LD_LIBRARY_PATH=$BUILD_DIR/foundation-linux-x86_64/Foundation:$BUILD_DIR/xctest-linux-x86_64:$BUILD_DIR/libdispatch-linux-x86_64 -$BUILD_DIR/lldb-linux-x86_64/bin/lldb $BUILD_DIR/foundation-linux-x86_64/TestFoundation.app/TestFoundation -``` - -When new source files or flags are added to any of the `CMakeLists.txt` files, the project will need to be reconfigured in order for the build system to pick them up. Simply rerun the `cmake` command to build `TestFoundation` given above and it should be reconfigured and built correctly. - -If `update-checkout` is used to update other repositories, rerun the `build-script` command above to reconfigure and rebuild the other libraries. diff --git a/Docs/Issues.md b/Docs/Issues.md deleted file mode 100644 index c1c43696ff..0000000000 --- a/Docs/Issues.md +++ /dev/null @@ -1,25 +0,0 @@ -# Known Issues - -* We're not yet finished implementing all of the core functionality of Foundation. - -* NSDictionary, NSArray, NSSet and NSString are not yet implicitly convertible to Dictionary, Array, Set, and String. In order to translate between these types, we have temporarily added a protocol to these types that allows them to be converted. There is one method called `bridge()`. - -```swift -let myArray: NSArray = ["foo", "bar", "baz"].bridge() -``` - -This also means that functions like map or reduce are currently unavailable on NSDictionary and NSArray. - -These limitations should hopefully be very short-term. - -A fix in the compiler is needed to split out the concept of "bridgeable to Objective-C" from "bridgeable to AnyObject". In the meantime, we have added the implementation of the `_ObjectiveCBridgeable` protocol to Foundation on Linux (normally it is part of the standard library). - -In short: users or implementers should be careful about the implicit conversions that may be inserted automatically by the compiler. Be sure to compile and test changes on both Darwin and Linux. - -* The `AutoreleasingUnsafeMutablePointer` type is not available on Linux because it requires autorelease logic provided by the Objective-C runtime. Most often this is not needed, but does create a divergence in some APIs like `NSFormatter` or the funnel methods of NSDictionary, NSArray and others. In these areas, we have proposed new API (marked with `Experiment:`) to work around use of the type. This proposed API is subject to change as the project progresses and should not yet be considered stable. - -* `swiftc` does not order include paths. This means that build artifact `module.modulemap` and the installed `module.modulemap` will conflict with each other. To work around the issue while developing Foundation, remove `/usr/local/include/CoreFoundation/module.modulemap` before building. - -* The python & ninja build system in place is a medium-term solution. We believe a long-term building solution will come from the Swift Package Manager. However, it can not yet build dynamic libraries nor build mixed-source (C and Swift) projects. - -* Data pointers that are normally autoreleased such as fileSystemRepresentationWithPath or UTF8String will leak when the data is not returned from an inner value. diff --git a/Docs/Performance Refinement of Data.md b/Docs/Performance Refinement of Data.md deleted file mode 100644 index d64328d874..0000000000 --- a/Docs/Performance Refinement of Data.md +++ /dev/null @@ -1,249 +0,0 @@ -# Performance Refinement of Data - -* Author(s): Philippe Hausler - -## Introduction - -In Swift 3 the Foundation team introduced a new structural type to represent `NSData` exposed into Swift. - -`Data` allows developers to interact with binary data with value semantics, which is often more appropriate than using pointers like `UnsafeMutablePointer`. Having an encapsulating type to abstract the common operations is often quite advantageous to tasks like parsing, where types like `String` may not be appropriate for or have hidden performance "gotchas". - -`Data` can easily be a critical point of performance for many tasks. `Data` is an appropriate common currency of transacting a safe managed buffer of bytes that interoperates well with existing Cocoa APIs. This means that it should be tuned for performance as much as possible. - -## Motivation - -There are several outstanding performance improvements which can be made to `Data`; issues regarding `Data`'s performance have been raised with the Foundation team both publicly and privately, and we would like to address those. - -`Data` should be as fast as possible. Currently, most of the backing of `Data` is implemented in Foundation, while being quite fast for reallocations and other operations, this means that calls are made between Swift and Objective-C even for simple things like count for every access. - -This Swift–Objective-C boundary means that no inlining can be performed across it; even when we have full control over the backing implementation and the caller, what would normally be just a single offset load instructions ends up becoming many just for the benefit of an objc_msgSend (not to mention ARC operations). Even though the calls are heavily optimized, they will never be as fast as a single instruction. - -## Proposed solution - -In order to make `Data` as fast as possible the implementation needs to be inlined; since that is one of the best performance optimizations that Swift can offer. To do this it requires a re-think of how `Data` and `NSData` interact. This means that the structure `Data` will need to adopt certain attributes that will allow it to be inlined into the call-sites. The function dispatch overhead will be reduced but also optimization passes like cold paths and branch elimination can be possibilities for the compiler to do the best possible thing for the call site. - -`Data` will adopt the annotation `@inline(__always)` in key locations and use a non-Objective-C backing class to store the pointer and length (and other internal ivars). That backing object will allow for a reduction of capture points as well as avoid extra retain/releases that were added for mutation detection. - -Instead of using `_MutablePairBoxing` (which uses closures to map invocations to references or apply mutations with copy on write semantics) the new backing implementation can easily be applied with copy on write semantics without any `Unmanaged` "dancing". That "dancing" complicates code and it can be made considerably simpler. Furthermore, avoiding this "dance" can reduce the calls to retain and release down to zero in the application of mutations in unique referenced cases as well as mapping non mutating invocations to backing storage. - -Subclassing the reference type `NSData` is still something that Foundation should support for the wrapping of the reference type in a structure. This effectively means there are five types of backing for `Data`: Swift-implemented, immutable NSData, mutable NSMutableData, custom subclasses of NSData, and custom subclasses of NSMutableData. These specific cases are delineated to offer the most efficient inline cases possible. - -Since Foundation can enforce a no dynamic dispatch needed contract with itself in the cases of the standard class cluster members of NSData and NSMutableData Foundation can assure these cases are acceptable to not need dynamic dispatch for every time `bytes` or `length` are accessed and the values can be cached until the data is mutated or disposed of. In the cases where a subclass is used of course all bets are off and every point requires dynamically calling out. - -In short this will mean that fetching the `count` of a `Data` can be optimized to a single branch and load from an offset and this same optimization can be applied to many other methods on `Data`. - -## Bridging to and from Objective-C - -Many of the sources that Data is derived from are sourced from the SDKs written in Objective-C. For many other types like `Array`,`Set`, `Dictionary`, or `String` the objects returned are not very large. Arrays may have a handful of objects, strings may only be a few hundred characters and so on. In these cases it makes sense to "eagerly" bridge those reference types into a more inline-able version (there are exclusions to this but in general it is most often the case). - -`Data` does not follow this rule. Often it is sourced from files on disk (which could be exceedingly large) or results from network transactions of downloads. These cases would definitely suffer from having an "eager" O(n) bridge; due to not only memory allocation duplications to hold both backing stores but also to the byte copy from the reference type to the value type. `Data` should be fast no matter where it came from unless it is truly unknown on it's dynamic dispatch requirements. - -To build a `Data` that is fast for inline optimizations the bytes pointer and length need to be cached for the duration of the object. When `as` is used to bridge a custom reference to `Data` dynamic dispatch must occur on every call to count and every time bytes are touched but if the `Data` is known to be obtained from a source that we can control the dynamic dispatch expectations that dynamic dispatch can be elided and behavior can be preserved by mimicking the Objective-C implementation in Swift. - -Bridging in the other direction also has some distinct performance optimizations that can be taken advantage of as well. - -When the lifespan of the callout to Objective-C is well known the cases of Swift constructed `Data` can easily pass a `NSData` with a no-copy of the backing buffer. It is the responsibility of the Objective-C APIs to appropriately either not directly retain past the scope of the call or copy in the cases of long lasting references. Any Objective-C method or function that takes a `NSData` and just retains or unsafely stores it past the function callout is likely incorrect and has bugs no matter the language it was invoked in. This case where the `Data` is created in Swift to bridge it only needs to allocate the wrapper `NSData` but no O(n) copy needs to occur (unless it is holding a reference as previously stated). - -The final case of bridging is when a `Data` is obtained from Objective-C and then passed directly back to Objective-C. The compiler has potentials of optimizations in direct callout cases such as `returnsAData() as NSData` with "peephole" optimizations but these are only really enforceable in limited scope (sometimes just the same line of code). Since the backing store can hold a reference to the reference type the bridge method (when not mutated) in those cases can pass that back over to Objective-C. For mutated versions a copy of that mutated version can be passed along as well (taking advantage of any optimizations the dynamic dispatch affords for calls to `copy`). - - -## Detailed performance breakdown - -Each graph below is a comparison between the Swift 3 `Data` and the new version of `Data` for each of the inline cases. The horizontal axis in each graph represent N and the vertical axis in each graph represents the sampled duration in nanoseconds. Each data set in the plots are an average over 100 (unless otherwise specified) per value of N. The attached graphs were generated from optimized builds on a Mac Pro (Late 2013) 3.5 GHz 6-Core Intel Xeon E5 with 16 GB 1866 MHz DDR3. - -```swift -func createSampleData(ofLength N: Int) -> Data { - var buffer = [UInt8](repeating: 0, count: N) - return buffer.withUnsafeMutableBytes { (buffer: UnsafeMutableRawBufferPointer) -> Data in - arc4random_buf(buffer.baseAddress!, N) - return Data(bytes: buffer.baseAddress!, count: N) - } -} - -func createSampleDataReference(ofLength N: Int) -> NSData { - var buffer = [UInt8](repeating: 0, count: N) - return buffer.withUnsafeMutableBytes { (buffer: UnsafeMutableRawBufferPointer) -> NSData in - arc4random_buf(buffer.baseAddress!, N) - return NSData(bytes: buffer.baseAddress, length: N) - } -} - -func createSampleArray(ofLength N: Int) -> [UInt8] { - var buffer = [UInt8](repeating: 0, count: N) - buffer.withUnsafeMutableBytes { (buffer: UnsafeMutableRawBufferPointer) -> Void in - arc4random_buf(buffer.baseAddress!, N) - } - return buffer -} - -``` - -### Accessing count - -This should be a O(1) operation. The y axis is measured in nanoseconds sampled over 100000 iterations. - -```swift -// setup -let data = createSampleData(ofLength: N) -// start measuring -_ = data.count -// end measuring -``` - -![Comparison of Data.count](./images/access_count.png) - -### Subscripting - -This should be a O(1) operation. The y axis is measured in nanoseconds sampled over 100000 iterations. - -```swift -// setup -let data = createSampleData(ofLength: N) -// start measuring -_ = data[index] -// end measuring -``` - -![Getting subscript](./images/getting_subscript.png) - ---- - -```swift -// setup -var data = createSampleData(ofLength: N) -// start measuring -data[index] = 0x00 -// end measuring -``` - -![Setting subscript](./images/setting_subscript.png) - -### Appending - -This should be a O(N) operation - -```swift -// setup -let dataToAppend = createSampleData(ofLength: N) -var data = Data() -// start measuring -data.append(dataToAppend) -// end measuring -``` - -![Appending N bytes](./images/append_n_bytes_with_data.png) - ---- - -```swift -// setup -let arrayToAppend = createSampleArray(ofLength: N) -var data = Data() -// start measuring -data.append(contentsOf: arrayToAppend) -// end measuring -``` - -![Appending N bytes from Array](./images/append_array_of_bytes.png) - -The new version is still O(N) just a much smaller constant multiplier. - ---- - -```swift -var data = Data() -// start measuring -for _ in 0.. - -##### Related radars or Swift bugs - -* Snake case / Camel case conversions for JSONEncoder/Decoder - -##### Revision history - -* **v1** Initial version - -## Introduction - -While early feedback for `JSONEncoder` and `JSONDecoder` has been very positive, many developers have told us that they would appreciate a convenience for converting between `snake_case_keys` and `camelCaseKeys` without having to manually specify the key values for all types. - -## Proposed solution - -`JSONEncoder` and `JSONDecoder` will gain new strategy properties to allow for conversion of keys during encoding and decoding. - -```swift -class JSONDecoder { - /// The strategy to use for automatically changing the value of keys before decoding. - public enum KeyDecodingStrategy { - /// Use the keys specified by each type. This is the default strategy. - case useDefaultKeys - - /// Convert from "snake_case_keys" to "camelCaseKeys" before attempting to match a key with the one specified by each type. - /// - /// The conversion to upper case uses `Locale.system`, also known as the ICU "root" locale. This means the result is consistent regardless of the current user's locale and language preferences. - /// - /// Converting from snake case to camel case: - /// 1. Capitalizes the word starting after each `_` - /// 2. Removes all `_` - /// 3. Preserves starting and ending `_` (as these are often used to indicate private variables or other metadata). - /// For example, `one_two_three` becomes `oneTwoThree`. `_one_two_three_` becomes `_oneTwoThree_`. - /// - /// - Note: Using a key decoding strategy has a nominal performance cost, as each string key has to be inspected for the `_` character. - case convertFromSnakeCase - - /// Provide a custom conversion from the key in the encoded JSON to the keys specified by the decoded types. - /// The full path to the current decoding position is provided for context (in case you need to locate this key within the payload). The returned key is used in place of the last component in the coding path before decoding. - case custom(([CodingKey]) -> CodingKey) - } - - /// The strategy to use for decoding keys. Defaults to `.useDefaultKeys`. - open var keyDecodingStrategy: KeyDecodingStrategy = .useDefaultKeys -} - -class JSONEncoder { - /// The strategy to use for automatically changing the value of keys before encoding. - public enum KeyEncodingStrategy { - /// Use the keys specified by each type. This is the default strategy. - case useDefaultKeys - - /// Convert from "camelCaseKeys" to "snake_case_keys" before writing a key to JSON payload. - /// - /// Capital characters are determined by testing membership in `CharacterSet.uppercaseLetters` and `CharacterSet.lowercaseLetters` (Unicode General Categories Lu and Lt). - /// The conversion to lower case uses `Locale.system`, also known as the ICU "root" locale. This means the result is consistent regardless of the current user's locale and language preferences. - /// - /// Converting from camel case to snake case: - /// 1. Splits words at the boundary of lower-case to upper-case - /// 2. Inserts `_` between words - /// 3. Lowercases the entire string - /// 4. Preserves starting and ending `_`. - /// - /// For example, `oneTwoThree` becomes `one_two_three`. `_oneTwoThree_` becomes `_one_two_three_`. - /// - /// - Note: Using a key encoding strategy has a nominal performance cost, as each string key has to be converted. - case convertToSnakeCase - - /// Provide a custom conversion to the key in the encoded JSON from the keys specified by the encoded types. - /// The full path to the current encoding position is provided for context (in case you need to locate this key within the payload). The returned key is used in place of the last component in the coding path before encoding. - case custom(([CodingKey]) -> CodingKey) - } - - - /// The strategy to use for encoding keys. Defaults to `.useDefaultKeys`. - open var keyEncodingStrategy: KeyEncodingStrategy = .useDefaultKeys -} -``` - -## Detailed design - -The strategy enum allows developers to pick from common actions of converting to and from `snake_case` to the Swift-standard `camelCase`. The implementation is intentionally simple, because we want to make the rules predictable. - -Converting from snake case to camel case: - -1. Capitalizes the word starting after each `_` -2. Removes all `_` -3. Preserves starting and ending `_` (as these are often used to indicate private variables or other metadata). - -For example, `one_two_three` becomes `oneTwoThree`. `_one_two_three_` becomes `_oneTwoThree_`. - -Converting from camel case to snake case: - -1. Splits words at the boundary of lower-case to upper-case -2. Inserts `_` between words -3. Lowercases the entire string -4. Preserves starting and ending `_`. - -For example, `oneTwoThree` becomes `one_two_three`. `_oneTwoThree_` becomes `_one_two_three_`. - -We also provide a `custom` action for both encoding and decoding to allow for maximum flexibility if the built-in options are not sufficient. - -## Example - -Given this JSON: - -``` -{ "hello_world" : 3, "goodbye_cruel_world" : 10, "key" : 42 } -``` - -Previously, you would customize your `Decodable` type with custom keys, like this: - -```swift -struct Thing : Decodable { - - let helloWorld : Int - let goodbyeCruelWorld: Int - let key: Int - - private enum CodingKeys : CodingKey { - case helloWorld = "hello_world" - case goodbyeCruelWorld = "goodbye_cruel_world" - case key - } -} - -var decoder = JSONDecoder() -let result = try! decoder.decode(Thing.self, from: data) -``` - -With this change, you can write much less boilerplate: - -```swift -struct Thing : Decodable { - - let helloWorld : Int - let goodbyeCruelWorld: Int - let key: Int -} - -var decoder = JSONDecoder() -decoder.keyDecodingStrategy = .convertFromSnakeCase -let result = try! decoder.decode(Thing.self, from: data) -``` - -## Alternatives considered - -None. diff --git a/Docs/ReleaseNotes_Swift5.md b/Docs/ReleaseNotes_Swift5.md deleted file mode 100644 index 6c04a0ca69..0000000000 --- a/Docs/ReleaseNotes_Swift5.md +++ /dev/null @@ -1,166 +0,0 @@ -# swift-corelibs-foundation Release Notes for Swift 5.x - -swift-corelibs-foundation contains new features and API in the Swift 5.x family of releases. These release notes complement the [Foundation release notes](https://developer.apple.com/documentation/ios_release_notes/ios_12_release_notes/foundation_release_notes) with information that is specific to swift-corelibs-foundation. Check both documents for a full overview. - -## Dependency Management - -On Darwin, the OS provides prepackaged dependency libraries that allow Foundation to offer a range of disparate functionalities without the need for a developer to fine-tune their dependency usage. Applications that use swift-corelibs-foundation do not have access to this functionality, and thus have to contend with managing additional system dependencies on top of what the Swift runtime and standard library already requires. This hinders packaging Swift applications that port or use Foundation in constrained environments where these dependencies are an issue. - -To aid in porting and dependency management, starting in Swift 5.1, some functionality has been moved from Foundation to other related modules. Foundation vends three modules: - - - `Foundation` - - `FoundationNetworking` - - `FoundationXML` - - On Linux, the `Foundation` module now only has the same set of dependencies as the Swift standard library itself, rather than requiring linking the `libcurl` and `libxml2` libraries (and their indirect dependencies). The other modules will require additional linking. - -The following types, and related functionality, are now only offered if you import the `FoundationNetworking` module: - -- `CachedURLResponse` -- `HTTPCookie` -- `HTTPCookieStorage` -- `HTTPURLResponse` -- `URLResponse` -- `URLSession` -- `URLSessionConfiguration` -- `URLSessionDataTask` -- `URLSessionDownloadTask` -- `URLSessionStreamTask` -- `URLSessionTask` -- `URLSessionUploadTask` -- `URLAuthenticationChallenge` -- `URLCache` -- `URLCredential` -- `URLCredentialStorage` -- `URLProtectionSpace` -- `URLProtocol` - -Using this module will cause you to link the `libcurl` library and its dependencies. Note that the `URL` structure and the `NSURL` type are still offered by the `Foundation` module, and that, with one exception mentioned below, the full range of functionality related to these types is available without additional imports. - -The following types, and related functionality, are now only offered if you import the `FoundationXML` module: - -- `XMLDTD` -- `XMLDTDNode` -- `XMLDocument` -- `XMLElement` -- `XMLNode` -- `XMLParser` - -Using this module will cause you to link the `libxml2` library and its dependencies. Note that property list functionality is available using the `Foundation` without additional imports, even if they are serialized in the `xml1` format. Only direct use of these types requires importing the `FoundationXML` module. - -The recommended way to import these modules in your source file is: - - #if canImport(FoundationNetworking) - import FoundationNetworking - #endif - - #if canImport(FoundationXML) - import FoundationXML - #endif - -This allows source that runs on Darwin and on previous versions of Swift to transition to Swift 5.1 correctly. - -There are two consequences of this new organization that may affect your code: - - - The module-qualified name for the classes mentioned above has changed. For example, the `URLSession` class's module-qualified name was `Foundation.URLSession` in Swift 5.0 and earlier, and `FoundationNetworking.URLSession` in Swift 5.1. This may affect your use of `NSClassFromString`, `import class…` statements and module-name disambiguation in existing source code. See the 'Objective-C Runtime Simulation' section below for more information. - -- `Foundation` provides `Data(contentsOf:)`, `String(contentsOf:…)`, `Dictionary(contentsOf:…)` and other initializers on model classes that take `URL` arguments. These continue to work with no further dependencies for URLs that have the `file` scheme (i.e., for which `.isFileURL` returns `true`). If you used other URL schemes, these methods would previously cause a download to occur, blocking the current thread until the download finished. If you require this functionality to work in Swift 5.1, your application must link or dynamically load the `FoundationNetworking` module, or the process will stop with an error message to this effect. **Please avoid this usage of the methods.** These methods block a thread in your application while networking occurs, which may cause performance degradation and unexpected threading issues if used in concert with the `Dispatch` module or from the callbacks of a `URLSessionTask`. Instead, where possible, please migrate to using a `URLSession` directly. - -## Objective-C Runtime Simulation - -Foundation provides facilities that simulate certain Objective-C features in Swift for Linux, such as the `NSClassFromString` and `NSStringFromClass` functions. Starting in Swift 5.1, these functions now more accurately reflect the behavior of their Darwin counterparts by allowing you to use Objective-C names for Foundation classes. Code such as the following now will now behave in the same way on both Darwin and Swift for Linux: - - let someClass = NSClassFromString("NSTask") - assert(someClass == Process.self) - let someName = NSStringFromClass(someClass) - assert(someName == "NSTask") - -It is recommended that you use Objective-C names for Foundation classes in your code. Starting from Swift 5.1, these names will work, and will be treated as the canonical names for classes originating from any of the Foundation modules. This may affect `NSCoding` archives you created in Swift for Linux 5.0 and later; you may have to recreate these archives with Darwin or with Swift for Linux 5.1 for forward compatibility. See 'Improvements to NSCoder' below for more information. - -While the use of module-qualified names is still supported for classes in the `Foundation` module, e.g. `"Foundation.Process"`, it is now heavily discouraged: - -- Please use the Objective-C name instead wherever possible, e.g. `"NSTask"`; -- Classes moved to the `FoundationNetworking` and `FoundationXML` modules have new module-qualified names, e.g. `"FoundationNetworking.URLSession"` (which used to be `"Foundation.URLSession"` in Swift 5.0). You should use the Objective-C names instead, e.g. `"NSURLSession"`; both module-qualified and Objective-C names will work if your application links the appropriate modules, or will return `nil` if you do not. - -## Improvements to NSCoder - -In this release, the implementation of `NSCoder` and related classes has been brought closer to the behavior of their Darwin counterparts. There are a number of differences from previous versions of swift-corelibs-foundation that you should keep in mind while writing code that uses `NSKeyedArchiver` and `NSKeyedUnarchiver`: - -* In previous versions of swift-corelibs-foundation, the `decodingFailurePolicy` setting was hardcoded to `.setAndReturnError`; however, failure in decoding would crash the process (matching the behavior of the `.raiseException` policy). This has been corrected; you can now set the `decodingFailurePolicy` to either policy. To match Darwin, the default behavior has been changed to `.raiseException`. - -* On Darwin, in certain rare cases, invoking `failWithError(_:)` could stop execution of an initializer or `encode(with:)` method and unwind the stack, while still continuing program execution (by translating the exception to a `NSError` to a top-level caller). Swift does not support this. The `NSCoder` API documented to do this (`decodeTopLevelObject…`) is not available on swift-corelibs-foundation, and it has been annotated with diagnostics pointing you to cross-platform replacements. - -* The following Foundation classes that conform to `NSCoding` and/or `NSSecureCoding` now correctly implement archiving in a way that is compatible with archives produced by their Darwin counterparts: - - - `NSCharacterSet` - - `NSOrderedSet` - - `NSSet` - - `NSIndexSet` - - `NSTextCheckingResult` (only for results whose type is `.regularExpression`) - - `ISO8601DateFormatter` - - `DateIntervalFormatter` - -* The following Foundation classes require features not available in swift-corelibs-foundation. Therefore, they do not conform to `NSCoding` and/or `NSSecureCoding` in swift-corelibs-foundation. These classes may have conformed to `NSCoding` or `NSSecureCoding` in prior versions of swift-corelibs-foundation, even though they weren't complete prior to this release. - - - `NSSortDescriptor` (requires key-value coding) - - `NSPredicate` (requires key-value coding) - - `NSExpression` (requires key-value coding) - - `NSFileHandle` (requires `NSXPCConnection` and related subclasses, which are not available outside of Darwin) - - While the type system may help you find occurrences of usage of these classes in a `NSCoding` context, they can still be, incorrectly, passed to the `decodeObjects(of:…)` method that takes a `[AnyClass]` argument. You will need to audit your code to ensure you are not attempting to decode these objects; if you need to decode an archive that contains these objects from Darwin, you should skip decoding of the associated keys in your swift-corelibs-foundation implementation. - -## NSSortDescriptor Changes - -swift-corelibs-foundation now contains an implementation of `NSSortDescriptor` that is partially compatible with its Objective-C counterpart. You may need to alter existing code that makes use of the following: - -- Initializers that use string keys or key paths (e.g.: `init(key:…)`) are not available in swift-corelibs-foundation. You should migrate to initializers that take a Swift key path instead (`init(keyPath:…)`). - -- Initializers that take or invoke an Objective-C selector are not available in swift-corelibs-foundation. If your class implemented a `compare(_:)` method for use with the `init(keyPath:ascending:)` initializer, you should add a `Swift.Comparable` conformance to it, which will be used in swift-corelibs-foundation in place of the method. The conformance can invoke the method, like so: - -```swift -extension MyCustomClass: Comparable { - public static func <(_ lhs: MyCustomClass, _ rhs: MyCustomClass) { - return lhs.compare(rhs) == .orderedAscending - } -} -``` - -Note that swift-corelibs-foundation's version of `init(keyPath:ascending:)` is annotated with diagnostics that will cause your code to fail to compile if your custom type isn't `Comparable`; code that uses that constructor with Foundation types that implement a `compare(_:)` method, like `NSString`, `NSNumber`, etc., should still compile and work correctly. - -If you were using a selector other than `compare(_:)`, you should migrate to passing a closure to `init(keyPath:ascending:comparator:)` instead. That closure can invoke the desired method. For example: - -```swift -let descriptor = NSSortDescriptor(keyPath: \Person.name, ascending: true, comparator: { (lhs, rhs) in - return (lhs as! NSString).localizedCompare(rhs as! String) -}) -``` - - - Archived sort descriptors make use of string keys and key paths, and Swift key paths cannot be serialized outside of Darwin. `NSSortDescriptor` does not conform to `NSSecureCoding` in swift-corelibs-foundation as a result. See the section on `NSCoding` for more information on coding differences in this release. - -## Improved Scanner API - -The `Scanner` class now has additional API that is more idiomatic for use by Swift code, and doesn't require casting or using by-reference arguments. Several of the new methods have the same name as existing ones, except without the `into:` parameter: `scanInt32()`, `scanString(_:)`, `scanUpToCharacters(from:)`, etc. These invocations will return `nil` if scanning fails, where previous methods would return `false`. - -Some of this API existed already in previous releases of swift-corelibs-foundation as experimental. While some of the experimental methods have been promoted, most have been deprecated or obsoleted, and the semantics have changed slightly. The previous methods would match the semantics of `NSString`; 'long characters' could sometimes be scanned only partially, causing scanning to end up in the middle of a grapheme. This made interoperation with the Swift `String` and `Character` types onerous in cases where graphemes with multiple code points were involved. The new methods will instead always preserve full graphemes in the scanned string when invoked, and will not match a grapheme unless all of its unicode scalars are contained in whatever `CharacterSet` is passed in. - -If your `Scanner` is used by legacy code, you can freely mix deprecated method invocations and calls to the new API. If you invoke new API while the `scanLocation` is in the middle of a grapheme, the new API will first move to the first next full grapheme before performing any scanning. `scanLocation` itself is deprecated in favor of `currentIndex`, which is a `String.Index` in keeping with Swift string conventions. - -## Improved FileHandle API - -Several releases ago, Foundation and higher-level frameworks adopted usage of `NSError` to signal errors that can normally occur as part of application execution, as opposed to `NSException`s, which are used to signal programmer errors. Swift's error handling system is also designed to interoperate with `NSError`, and has no provisions for catching exceptions. `FileHandle`'s API was designed before this change, and uses exceptions to indicate issues with the underlying I/O and file descriptor handling operations. This made using the class an issue, especially from Swift code that can't handle these conditions; for full compatibility, the swift-corelibs-foundation version of the class used `fatalError()` liberally. This release introduces new API that can throw an error instead of crashing, plus some additional refinements. - -A few notes: - -* The Swift refinement allows the new writing method, `write(contentsOf:)`, to work with arbitrary `DataProtocol` objects efficiently, including non-contiguous-bytes objects that span multiple regions. - -* The exception-throwing API will be deprecated in a future release. It is now marked as `@available(…, deprecated: 100000, …)`, which matches what you would see if `API_TO_BE_DEPRECATED` was used in a Objective-C header. - -* Subclassing `NSFileHandle` is strongly discouraged. Many of the new methods are `public` and cannot be overridden. - -## `NSString(bytesNoCopy:length:encoding:freeWhenDone:)` deviations from reference implementation - -On Windows, `NSString(bytesNoCopy:length:encoding:freeWhenDone:)` deviates from -the behaviour on Darwin and uses the buffer's `deallocate` routine rather than -`free`. This is done to ensure that the correct routine is invoked for -releasing the resources acquired through `UnsafeMutablePointer.allocate` or -`UnsafeMutableRawPointer.allocate`. diff --git a/Docs/Status.md b/Docs/Status.md deleted file mode 100644 index 6668b46d90..0000000000 --- a/Docs/Status.md +++ /dev/null @@ -1,328 +0,0 @@ -# Implementation Status - -This document lays out the structure of the Foundation project, and provides the current implementation status of each major feature. - -Foundation is divided into groups of related functionality. These groups are currently laid out in the Xcode project, even though they are in a flat structure on disk. - -As Foundation is a work in progress, not all methods and functionality are present. When implementations are completed, this list should be updated to reflect the current state of the library. - -#### Table Key - -##### Implementation Status -* _N/A_: This entity is internal or private and implemented ad hoc; there are no guidelines in place to suggest what completion might look like -* _Unimplemented_: This entity exists, but all functions and methods are `NSUnimplemented()` -* _Incomplete_: Implementation of this entity has begun, but critical sections have been left `NSUnimplemented()` -* _Mostly Complete_: All critical sections of this entity have been implemented, but some methods might remain `NSUnimplemented()` -* _Complete_: No methods are left `NSUnimplemented()` (though this is not a guarantee that work is complete -- there may be methods that need overriding or extra work) - -##### Test Coverage -* _N/A_: This entity is internal and public tests are inappropriate, or it is an entity for which testing does not make sense -* _None_: There are no unit tests specific to this entity; even if it is used indirectly in other unit tests, we should have tests targeting this entity in isolation -* _Incomplete_: Unit tests exist for this entity, but there are critical paths that are not being tested -* _Substantial_: Most, if not all, of this entity's critical paths are being tested - -There is no _Complete_ status for test coverage because there are always additional tests to be implemented. Even entities with _Substantial_ coverage are missing tests (e.g. `NSCoding` conformance, `NSCopying` conformance, `description`s, etc.) - -### Entities - -* **Runtime**: The basis for interoperability. - - The classes and methods in this group provide an interface for interoperability between C code and Swift. They also provide common layers used throughout the framework such as the root class `NSObject`. - - | Entity Name | Status | Test Coverage | Notes | - |-------------------------|-----------------|---------------|-----------------------------------------------------------------------------| - | `NSEnumerator` | Complete | None | | - | `NSGetSizeAndAlignment` | Complete | None | | - | `NSStringFromClass` | Mostly Complete | None | Only top-level Swift classes are supported | - | `NSClassFromString` | Mostly Complete | None | Only top-level Swift classes are supported; mangled names are not supported | - | `NSObject` | Complete | None | | - | `NSSwiftRuntime` | N/A | N/A | For internal use only | - | `Boxing` | N/A | N/A | For internal use only | - - -* **URL**: Networking primitives - - The classes in this group provide functionality for manipulating URLs and paths via a common model object. The group also has classes for creating and receiving network connections. - - | Entity Name | Status | Test Coverage | Notes | - |------------------------------|-----------------|---------------|--------------------------------------------------------------------------------------------------------------------| - | `URLAuthenticationChallenge` | Unimplemented | None | | - | `URLCache` | Unimplemented | None | | - | `URLCredential` | Complete | Incomplete | | - | `URLCredentialStorage` | Unimplemented | None | | - | `NSURLError*` | Complete | N/A | | - | `URLProtectionSpace` | Unimplemented | None | | - | `URLProtocol` | Unimplemented | None | | - | `URLProtocolClient` | Unimplemented | None | | - | `NSURLRequest` | Complete | Incomplete | | - | `NSMutableURLRequest` | Complete | Incomplete | | - | `URLResponse` | Complete | Substantial | | - | `NSHTTPURLResponse` | Complete | Substantial | | - | `NSURL` | Mostly Complete | Substantial | Resource values remain unimplemented | - | `NSURLQueryItem` | Complete | N/A | | - | `URLResourceKey` | Complete | N/A | | - | `URLFileResourceType` | Complete | N/A | | - | `URL` | Complete | Incomplete | | - | `URLResourceValues` | Complete | N/A | | - | `URLComponents` | Complete | Incomplete | | - | `URLRequest` | Complete | None | | - | `HTTPCookie` | Complete | Incomplete | | - | `HTTPCookiePropertyKey` | Complete | N/A | | - | `HTTPCookieStorage` | Mostly Complete | Substantial | | - | `Host` | Complete | None | | - | `Configuration` | N/A | N/A | For internal use only | - | `EasyHandle` | N/A | N/A | For internal use only | - | `HTTPBodySource` | N/A | N/A | For internal use only | - | `HTTPMessage` | N/A | N/A | For internal use only | - | `libcurlHelpers` | N/A | N/A | For internal use only | - | `MultiHandle` | N/A | N/A | For internal use only | - | `URLSession` | Mostly Complete | Incomplete | invalidation, resetting, flushing, getting tasks, and others remain unimplemented | - | `URLSessionConfiguration` | Mostly Complete | Incomplete | `ephemeral` and `background(withIdentifier:)` remain unimplemented | - | `URLSessionDelegate` | Complete | N/A | | - | `URLSessionTask` | Mostly Complete | Incomplete | `cancel()`, `createTransferState(url:)` with streams, and others remain unimplemented | - | `URLSessionDataTask` | Complete | Incomplete | | - | `URLSessionUploadTask` | Complete | None | | - | `URLSessionDownloadTask` | Incomplete | Incomplete | | - | `URLSessionStreamTask` | Unimplemented | None | | - | `TaskRegistry` | N/A | N/A | For internal use only | - | `TransferState` | N/A | N/A | For internal use only | - - -* **Formatters**: Locale and language-correct formatted values. - - This group contains the base `NSFormatter` class and its subclasses. These formatters can be used for dates, numbers, sizes, energy, and many other types. - - | Entity Name | Status | Test Coverage | Notes | - |---------------------------------|-----------------|---------------|-------------------------------------------------------------------------------------------| - | `DateComponentsFormatter` | Unimplemented | None | | - | `DateIntervalFormatter` | Mostly Complete | Incomplete | `NSCoding` remains to be implemented | - | `EnergyFormatter` | Complete | Substantial | | - | `ISO8601DateFormatter` | Mostly Complete | Substantial | `NSCoding` remains to be implemented | - | `LengthFormatter` | Complete | Substantial | | - | `MassFormatter` | Complete | Substantial | Needs localization | - | `NumberFormatter` | Mostly Complete | Substantial | `objectValue(_:range:)` remains unimplemented | - | `PersonNameComponentsFormatter` | Unimplemented | None | | - | `ByteCountFormatter` | Mostly Complete | Substantial | `init?(coder:)` remains unimplemented | - | `DateFormatter` | Mostly Complete | Incomplete | `objectValue(_:range:)` remain unimplemented | - | `Formatter` | Complete | N/A | | - | `MeasurementFormatter` | Unimplemented | None | | - -* **Predicates**: Base functionality for building queries. - - This is the base class and subclasses for `NSPredicate` and `NSExpression`. - - | Entity Name | Status | Test Coverage | Notes | - |-------------------------|---------------|---------------|------------------------------------------------------------------------------------| - | `NSExpression` | Unimplemented | N/A | | - | `NSComparisonPredicate` | Unimplemented | N/A | | - | `NSCompoundPredicate` | Complete | Substantial | | - | `NSPredicate` | Incomplete | Incomplete | Only boolean and block evaluations are implemented; all else remains unimplemented | - -* **Serialization**: Serialization and deserialization functionality. - - The classes in this group perform tasks like parsing and writing JSON, property lists and binary archives. - - | Entity Name | Status | Test Coverage | Notes | - |-----------------------------|-----------------|---------------|-------------------------------------------------------------------------------| - | `NSJSONSerialization` | Mostly Complete | Substantial | `jsonObject(with:options:)` with streams remains unimplemented | - | `NSKeyedArchiver` | Complete | Substantial | | - | `NSKeyedCoderOldStyleArray` | N/A | N/A | For internal use only | - | `NSKeyedUnarchiver` | Mostly Complete | Substantial | `decodingFailurePolicy.set` remains unimplemented | - | `NSKeyedArchiverHelpers` | N/A | N/A | For internal use only | - | `NSCoder` | Incomplete | N/A | Decoding methods which require a concrete implementation remain unimplemented | - | `PropertyListSerialization` | Complete | Incomplete | | - -* **XML**: A group of classes for parsing and representing XML documents and elements. - - The classes provided in this group are responsible for parsing and validating XML. They should be an interface for representing libxml2 in a more object-oriented manner. - - | Entity Name | Status | Test Coverage | Notes | - |---------------|-----------------|---------------|---------------------------------------------------------------------------------------------------------------------------------------| - | `XMLDocument` | Mostly Complete | Substantial | `init()`, `replacementClass(for:)`, and `object(byApplyingXSLT...)` remain unimplemented | - | `XMLDTD` | Mostly Complete | Substantial | `init()` remains unimplemented | - | `XMLDTDNode` | Complete | Incomplete | | - | `XMLElement` | Incomplete | Incomplete | `init(xmlString:)`, `elements(forLocalName:uri:)`, namespace support, and others remain unimplemented | - | `XMLNode` | Incomplete | Incomplete | `localName(forName:)`, `prefix(forName:)`, `predefinedNamespace(forPrefix:)`, and others remain unimplemented | - | `XMLParser` | Complete | Incomplete | | - -* **Collections**: A group of classes to contain objects. - - The classes provided in this group provide basic collections. The primary role for these classes is to provide an interface layer between the CoreFoundation implementations and the standard library implementations. Additionally, they have useful extras like serialization support. There are also additional collection types that the standard library does not support. - - > _Note_: See [Known Issues](Issues.md) for more information about bridging between Foundation collection types and Swift standard library collection types. - - | Entity Name | Status | Test Coverage | Notes | - |-----------------------|-----------------|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------| - | `NSOrderedSet` | Mostly Complete | Substantial | `NS[Mutable]Copying`, and `array` & `set` (and associated indexing methods) remain unimplemented | - | `NSMutableOrderedSet` | Mostly Complete | Substantial | `NSCoding` and `sortRange(_:options:, usingComparator:)` with non-empty options remain unimplemented | - | `NSCFArray` | N/A | N/A | For internal use only | - | `NSIndexSet` | Mostly Complete | Incomplete | `NSCoding` remains to be implemented | - | `NSMutableIndexSet` | Mostly Complete | Incomplete | `NSCoding` remains to be implemented | - | `IndexSet` | Complete | Incomplete | | - | `NSIndexPath` | Mostly Complete | None | `NSCoding` remains to be implemented | - | `IndexPath` | Complete | Incomplete | | - | `NSArray` | Mostly Complete | Substantial | concurrent `enumerateObjects(at:options:using:)`, and `sortedArray(from:options:usingComparator:)` with options remain unimplemented | - | `NSMutableArray` | Mostly Complete | Substantial | `exchangeObject(at:withObjectAt:)` and `replaceObjects(in:withObjectsFromArray:)` remain unimplemented for types other than `NSMutableArray` | - | `NSDictionary` | Mostly Complete | Incomplete | `NSCoding` with non-keyed-coding archivers and `sharedKeySet(forKeys:)` | - | `NSMutableDictionary` | Mostly Complete | Incomplete | `NSCoding` with non-keyed-coding archivers and`sharedKeySet(forKeys:)` | - | `NSCFDictionary` | N/A | N/A | For internal use only | - | `NSSet` | Mostly Complete | Incomplete | `NSCoding` and `customMirror` remain unimplemented | - | `NSMutableSet` | Mostly Complete | Incomplete | `init?(coder:)` remains unimplemented | - | `NSCountedSet` | Mostly Complete | Incomplete | `init?(coder:)` remains unimplemented | - | `NSCFSet` | N/A | N/A | For internal use only | - | `NSCache` | Complete | Incomplete | `NSCoding` and `customMirror` remain unimplemented | - | `NSSortDescriptor` | Unimplemented | None | | - -* **RunLoop**: Timers, streams and run loops. - - The classes in this group provide support for scheduling work and acting upon input from external sources. - - | Entity Name | Status | Test Coverage | Notes | - |------------------|-----------------|---------------|-------------------------------------------------------------------------------| - | `Port` | Unimplemented | None | | - | `MessagePort` | Unimplemented | None | | - | `SocketPort` | Unimplemented | None | | - | `PortMessage` | Unimplemented | None | | - | `RunLoop` | Mostly Complete | Incomplete | `add(_: Port, forMode:)` and `remove(_: Port, forMode:)` remain unimplemented | - | `NSStream` | Mostly Complete | Substantial | | - | `Stream` | Unimplemented | Substantial | Methods which require a concrete implementation remain unimplemented | - | `InputStream` | Mostly Complete | Substantial | `getBuffer(_:length:)` remains unimplemented | - | `NSOutputStream` | Complete | Substantial | | - | `Timer` | Complete | Substantial | | - -* **String**: A set of classes for scanning, manipulating and storing string values. - - The NSString implementation is present to provide an interface layer between CoreFoundation and Swift, but it also adds additional functionality on top of the Swift standard library String type. Other classes in this group provide mechanisms to scan, match regular expressions, store attributes in run arrays attached to strings, and represent sets of characters. - - > _Note_: See [Known Issues](Issues.md) for more information about bridging between the Foundation NSString types and Swift standard library String type. - - | Entity Name | Status | Test Coverage | Notes | - |-----------------------------|-----------------|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------| - | `NSRegularExpression` | Complete | Substantial | | - | `Scanner` | Mostly Complete | Incomplete | `localizedScannerWithString(_:)` remains unimplemented | - | `NSTextCheckingResult` | Mostly Complete | Incomplete | `NSCoding`, `resultType`, and `range(at:)` remain unimplemented | - | `NSAttributedString` | Mostly Complete | Incomplete | `NSCoding` remains unimplemented | - | `NSMutableAttributedString` | Mostly Complete | Incomplete | `NSCoding` remains unimplemented | - | `NSCharacterSet` | Mostly Complete | Incomplete | `NSCoding` remains unimplemented | - | `NSMutableCharacterSet` | Mostly Complete | None | Decoding remains unimplemented | - | `NSCFCharacterSet` | N/A | N/A | For internal use only | - | `CharacterSet` | Complete | Incomplete | | - | `NSString` | Mostly Complete | Substantial | `enumerateSubstrings(in:options:using:)` remains unimplemented | - | `NSStringEncodings` | Complete | N/A | Contains definitions of string encodings | - | `NSCFString` | N/A | N/A | For internal use only | - | `NSStringAPI` | N/A | N/A | Exposes `NSString` APIs on `String` | - | `ExtraStringAPIs` | Complete | N/A | Random access for `String.UTF16View`, only when Foundation is imported; decouples the Swift core from a UTF16 representation. | - -* **Number**: A set of classes and methods for representing numeric values and structures. - - | Entity Name | Status | Test Coverage | Notes | - |-----------------------------------|-----------------|---------------|-------------------------------------------------------------------------------| - | `NSRange` | Complete | Incomplete | | - | `Decimal` | Complete | Substantial | | - | `NSDecimalNumber` | Complete | Substantial | | - | `NSDecimalNumberHandler` | Complete | None | | - | `CGPoint` | Complete | Substantial | | - | `CGSize` | Complete | Substantial | | - | `CGRect` | Complete | Substantial | | - | `NSEdgeInsets` | Complete | Substantial | | - | `NSGeometry` | Mostly Complete | Substantial | `NSIntegralRectWithOptions` `.AlignRectFlipped` support remains unimplemented | - | `CGFloat` | Complete | Substantial | | - | `AffineTransform` | Complete | Substantial | | - | `NSAffineTransform` | Complete | Substantial | | - | `NSNumber` | Complete | Incomplete | | - | `NSConcreteValue` | N/A | N/A | For internal use only | - | `NSSpecialValue` | N/A | N/A | For internal use only | - | `NSValue` | Complete | Substantial | | - | `NSMeasurement` | Unimplemented | None | | - | `Measurement` | Complete | None | | - | `UnitConverter` | Complete | Incomplete | | - | `UnitConverterLinear` | Complete | Incomplete | | - | `Unit` | Complete | None | | - | `Dimension` | Complete | None | | - | `UnitAcceleration` | Complete | None | | - | `UnitAngle` | Complete | None | | - | `UnitArea` | Complete | None | | - | `UnitConcentrationMass` | Complete | None | | - | `UnitDispersion` | Complete | None | | - | `UnitDuration` | Complete | None | | - | `UnitElectricCharge` | Complete | None | | - | `UnitElectricCurrent` | Complete | None | | - | `UnitElectricPotentialDifference` | Complete | None | | - | `UnitElectricResistance` | Complete | None | | - | `UnitEnergy` | Complete | None | | - | `UnitFrequency` | Complete | None | | - | `UnitFuelEfficiency` | Complete | None | | - | `UnitLength` | Complete | None | | - | `UnitIlluminance` | Complete | None | | - | `UnitMass` | Complete | None | | - | `UnitPower` | Complete | None | | - | `UnitPressure` | Complete | None | | - | `UnitSpeed` | Complete | None | | - | `UnitTemperature` | Complete | None | | - | `UnitVolume` | Complete | None | | - -* **UserDefaults**: A mechanism for storing values to persist as user settings and local. - - | Entity Name | Status | Test Coverage | Notes | - |----------------|-----------------|---------------|-------------------------------------------------------------------------------------------------------------------------------| - | `UserDefaults` | Incomplete | Incomplete | domain support, and forced objects remain unimplemented. | - | `NSLocale` | Complete | Incomplete | Only unit test asserts locale key constant names | - | `Locale` | Complete | Incomplete | Only unit test asserts value copying | - -* **OS**: Mechanisms for interacting with the operating system on a file system level as well as process and thread level - - | Entity Name | Status | Test Coverage | Notes | - |------------------|-----------------|---------------|---------------------------------------------------------------------------------------------------------------------------| - | `FileHandle` | Mostly Complete | Incomplete | `NSCoding` remain unimplemented | - | `Pipe` | Complete | Incomplete | | - | `FileManager` | Incomplete | Incomplete | relationship lookups, `displayName(atPath:)`, `componentsToDisplay(forPath:)`, and replacing items remain unimplemented | - | `Process` | Complete | Substantial | | - | `Bundle` | Mostly Complete | Incomplete | `allBundles`, `init(for:)`, `unload()`, `classNamed()`, and `principalClass` remain unimplemented | - | `ProcessInfo` | Complete | Substantial | | - | `Thread` | Complete | Incomplete | | - | `Operation` | Complete | Incomplete | | - | `BlockOperation` | Complete | Incomplete | | - | `OperationQueue` | Complete | Incomplete | | - | `Lock` | Complete | Incomplete | | - | `ConditionLock` | Complete | None | | - | `RecursiveLock` | Complete | None | | - | `Condition` | Complete | Incomplete | | - -* **DateTime**: Classes for representing dates, timezones, and calendars. - - | Entity Name | Status | Test Coverage | Notes | - |--------------------|-----------------|---------------|---------------------------------------------------------------------------------------------------------------------------------| - | `NSCalendar` | Complete | None | `autoupdatingCurrent` remains unimplemented | - | `NSDateComponents` | Complete | None | | - | `Calendar` | Complete | Incomplete | | - | `DateComponents` | Complete | Incomplete | | - | `NSDate` | Complete | Incomplete | | - | `NSDateInterval` | Complete | None | | - | `DateInterval` | Complete | None | | - | `Date` | Complete | Incomplete | | - | `NSTimeZone` | Mostly Complete | Incomplete | `local`, `timeZoneDataVersion` and setting `abbreviationDictionary` remain unimplemented | - | `TimeZone` | Complete | Incomplete | | - -* **Notifications**: Classes for loosely coupling events from a set of many observers. - - | Entity Name | Status | Test Coverage | Notes | - |----------------------|-----------------|---------------|------------------------------------------------------------| - | `NSNotification` | Complete | N/A | | - | `NotificationCenter` | Complete | Substantial | | - | `Notification` | Complete | N/A | | - | `NotificationQueue` | Complete | Substantial | | - -* **Model**: Representations for abstract model elements like null, data, and errors. - - | Entity Name | Status | Test Coverage | Notes | - |--------------------------|-----------------|---------------|-----------------------------------| - | `NSNull` | Complete | Substantial | | - | `NSData` | Complete | Substantial | | - | `NSMutableData` | Complete | Substantial | | - | `Data` | Complete | Substantial | | - | `NSProgress` | Complete | Substantial | | - | `NSError` | Complete | None | | - | `NSUUID` | Complete | Substantial | | - | `UUID` | Complete | None | | - | `NSPersonNameComponents` | Complete | Incomplete | | - | `PersonNameComponents` | Complete | None | | diff --git a/Docs/Testing.md b/Docs/Testing.md deleted file mode 100644 index dc42b04622..0000000000 --- a/Docs/Testing.md +++ /dev/null @@ -1,287 +0,0 @@ -# Testing swift-corelibs-foundation - -swift-corelibs-foundation uses XCTest for its own test suite. This document explains how we use it and how we organize certain kinds of specialized testing. This is both different from the Swift compiler and standard library, which use `lit.py`, and from destkop testing, since the version of XCTest we use is not the Darwin one, but the Swift core library implementation in `swift-corelibs-xctest`, which is pretty close to the original with some significant differences. - -## Tests Should Fail, Not Crash - -### In brief - -* Tests should fail rather than crashing; swift-corelibs-xctest does not implement any crash recovery -* You should avoid forced optional unwrapping (e.g.: `aValue!`). Use `try XCTUnwrap(aValue)` instead -* You can test code that is expected to crash; you must mark the whole body of the test method with `assertCrashes(within:)` -* If a test or a portion of a test is giving the build trouble, use `testExpectedToFail` and write a bug - -### Why and How - -XCTest on Darwin can implement a multiprocess setup that allows a test run to continue if the test process crashes. On Darwin, code is built into a bundle, and a specialized tool called `xctest` runs the test by loading the bundle; the Xcode infrastructure can detect the crash and restart the tool from where it left off. For swift-corelibs-xctest, instead, the Foundation test code is compiled into a single executable and that executable is run by the Swift build process; if it crashes, subsequent tests aren't run, which can mask regressions that are merged while the crash is unaddressed. - -Due to this, it is important to avoid crashing in test code, and to properly handle tests that do. Every API is unique in this regard, but some situations are common across tests. - -#### Avoiding Forced Unwrapping - -Forced unwrapping is easily the easiest way to crash the test process, and should be avoided. XCTest have an ergonomic replacement in the form of the `XCTUnwrap()` function. - -The following code is a liability and code review should flag it: - -```swift -func testSomeInterestingAPI() { - let x = interestingAPI.someOptionalProperty! // <<< Incorrect! - - XCTAssertEqual(x, 42, "The correct answer is present") -} -``` - -Instead: - -1. Change the test method to throw errors by adding the `throws` clause. Tests that throw errors will fail and stop the first time an error is thrown, so plan accordingly, but a thrown error will not stop the test run, merely fail this test. -2. Change the forced unwrapping to `try XCTUnwrap(…)`. - -For example, the code above can be fixed as follows: - -```swift -func testSomeInterestingAPI() throws { // Step 1: Add 'throws' - // Step 2: Replace the unwrap. - let x = try XCTUnwrap(interestingAPI.someOptionalProperty) - - XCTAssertEqual(x, 42, "The correct answer is present") -} -``` - -#### Asserting That Code Crashes - -Some API, like `NSCoder`'s `raiseException` failure policy, are _supposed_ to crash the process when faced with edge conditions. Since tests should fail and not crash, we have been unable to test this behavior for the longest time. - -Starting in swift-corelibs-foundation in Swift 5.1, we have a new utility function called `assertCrashes(within:)` that can be used to indicate that a test crashes. It will respawn a process behind the scene, and fail the test if the second process doesn't crash. That process will re-execute the current test, _including_ the contents of the closure, up to the point where the first crash occurs. - -To write a test function that asserts some code crashes, wrap its **entire body** as in this example: - -```swift -func testRandomClassDoesNotDeserialize() { - assertCrashes { - let coder = NSKeyedUnarchiver(requiresSecureCoding: false) - coder.requiresSecureCoding = true - coder.decodeObject(of: [AClassThatIsntSecureEncodable.self], forKey: …) - … - } -} -``` - -Since the closure will only execute to the first crash, ensure you do not use multiple `assertCrashes…` markers in the same test method, that you do _not_ mix crash tests with regular test code, and that if you want to test multiple crashes you do so with separate test methods. Wrapping the entire method body is an easy way to ensure that at least some of these objectives are met. - -#### Stopping Flaky or Crashing Tests - -A test that crashes or fails multiple times can jeopardize patch testing and regression reporting. If a test is flaky or outright failing or crashing, it should be marked as expected to fail ASAP using the appropriate Foundation test utilities. - -Let's say a test of this form is committed: - -```swift -func testNothingUseful() { - fatalError() // Smash the machine! -} -``` - -A test fix commit should be introduced that does the following: - -* Write a bug to investigate and re-enable the test on [the Swift Jira instance](https://bugs.swift.org/). Have the link to the bug handy (e.g.: `http://bugs.swift.org/browse/SR-999999`). - -* Find the `allTests` entry for the offending test. For example: - -```swift -var allTests: […] { - return [ - // … - ("testNothingUseful", testNothingUseful), - // … - ] -``` - -* Replace the method reference with a call to `testExpectedToFail` that includes the reason and the bug link. Mark that location with a `/* ⚠️ */` comment. For example: - -```swift -var allTests: […] { - return [ - // … - // Add the prefix warning sign and the call: - /* ⚠️ */ ("testNothingUseful", testExpectedToFail(testNothingUseful, - "This test crashes for no clear reason. http://bugs.swift.org/browse/SR-999999")), - // … - ] -``` - -Alternately, let's say only a portion of a test is problematic. For example: - -```swift -func testAllMannersOfIO() throws { - try runSomeRockSolidIOTests() - try runSomeFlakyIOTests() // These fail pretty often. - try runSomeMoreRockSOlidIOTests() -} -``` - -In this case, file a bug as per above, then wrap the offending portion as follows: - -```swift -func testAllMannersOfIO() throws { - try runSomeRockSolidIOTests() - - /* ⚠️ */ - if shouldAttemptXFailTests("These fail pretty often. http://bugs.swift.org/browse/SR-999999") { - try runSomeFlakyIOTests() - } - /* ⚠️ */ - - try runSomeMoreRockSOlidIOTests() -} -``` - -Unlike XFAIL tests in `lit.py`, tests that are expected to fail will _not_ execute during the build. If your test is disabled in this manner, you should investigate the bug by running the test suite locally; you can do so without changing the source code by setting the `NS_FOUNDATION_ATTEMPT_XFAIL_TESTS` environment variable set to the string `YES`, which will cause tests that were disabled this way to attempt to execute anyway. - -## Test Internal Behavior Carefully: `@testable import` - -### In brief - -* Prefer black box (contract-based) testing to white box testing wherever possible -* Some contracts cannot be tested or cannot be tested reliably (for instance, per-platform fallback paths); it is appropriate to use `@testable import` to test their component parts instead -* Ensure your test wraps any reference to `internal` functionality with `#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT` -* Ensure the file you are using this in adds a `@testable import` prologue -* Run with this enabled _and_ disabled prior to PR - -### Why and How - -In general, we want to ensure that tests are written to check the _contract_ of the API, [as documented for each class](https://developer.apple.com/). It is of course acceptable to have the test implementation be informed by the implementation, but we want to make sure that tests still make sense if we replace an implementation entirely, [as we sometimes do](https://github.com/apple/swift-corelibs-foundation/pull/2331). - -This doesn't always work. Sometimes the contract specifies that a certain _result_ will occur, and that result may be platform-specific or trigger in multiple ways, all of which we'd like to test (for example, different file operation paths for volumes with different capabilities). In this case, we can reach into Foundation's `internal` methods by using `@testable import` and test the component parts or invoke private API ("SPI") to alter the behavior so that all paths are taken. - -If you think this is the case, you must be careful. We run tests both against a debug version of Foundation, which supports `@testable import`, and the release library, which does not. Your tests using `internal` code must be correctly marked so that tests don't succeed in one configuration but fail in the other. - -To mark those tests: - -* Wrap code using internal features with `#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT`: - -```swift -func testSomeFeature() { -#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT - try Date._someInternalTestModifierMethod { - // … - } -#endif -} -``` - -* In the file you're adding the test, if not present, add the appropriate `@testable import` import prologue at the top. It will look like the one below, but **do not** copy and paste this — instead, search the codebase for `@testable import` for the latest version: - -```swift -// It will look something like this: - -#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT - #if canImport(SwiftFoundation) && !DEPLOYMENT_RUNTIME_OBJC - @testable import SwiftFoundation - … -``` - -* Run your tests both against a debug Foundation (which has testing enabled) and a release Foundation (which does not). If you're using `build-script` to build, you can produce the first by using the `--debug-foundation` flag and the latter with the regular `--foundation` flag. **Do this before creating a PR.** Currently the pipeline checks both versions only outside PR testing, and we want to be sure that the code compiles in both modes before accepting a patch like this. (Automatic testing and dual-mode PR testing are forthcoming.) - -## Testing NSCoding: Don't Write This From Scratch; Use Fixtures - -### In brief - -* We want `NSCoding` to work with archives produced by _both_ Darwin Foundation and swift-corelibs-foundation -* Where possible, _do not_ write your own coding test code — use the fixture infrastructure instead -* Fixture tests will both test roundtrip coding (reading back what swift-corelibs-foundation produces), and archive coding (with archives produced by Darwin Foundation) -* Add a fixture test by adding fixtures to `FixtureValues.swift` -* Use `assertValueRoundtripsInCoder(…)` and `assertLoadedValuesMatch(…)` in your test methods -* Use the `GenerateTestFixtures` project in the `Tools` directory to generate archives for `assertLoadedValuesMatch(…)`, and commit them in `TestFoundation/Fixtures`. -* Please generate your fixtures on the latest released (non-beta) macOS. - -### Why and How - -`NSCoding` in swift-corelibs-foundation has a slightly more expansive contract than other portions of the library; while the rest need to be _consistent_ with the behavior of the Darwin Foundation library, but not necessarily identical, `NSCoding` implementations in s-c-f must as far as possible be able to both decode Darwin Foundation archives and encode archives that Darwin Foundation can decode. Thus, simple roundtrip tests aren't sufficient. - -We have an infrastructure in place for this kind of test. We produce values (called _fixtures_) from closures specified in the file `FixtureValues.swift`. We can both test for in-memory roundtrips (ensuring that the data produced by swift-corelibs-foundation is also decodable with swift-corelibs-foundation), and run those closures using Darwin Foundation to produce archives that we then try to read with swift-corelibs-foundation (and, in the future, expand this to multiple sources). - -If you want to add a fixture to test, follow these steps: - -* Add the fixture or fixtures as static properties on the Fixture enum. For example: - -```swift -static let defaultBeverage = TypedFixture("NSBeverage-Default") { - return NSBeverage() -} - -static let fancyBeverage = TypedFixture("NSBeverage-Fancy") { - var options: NSBeverage.Options = .defaultForFancyDrinks - options.insert(.shaken) - options.remove(.stirren) - return NSBeverage(named: "The Fancy Brand", options: options) -} -``` - -The string you pass to the constructor is an identifier for that particular fixture kind, and is used as the filename for the archive you will produce below. - -* Add them to the `_listOfAllFixtures` in the same file, wrapping them in the type eraser `AnyFixture`: - -```swift -// Search for this: -static let _listOfAllFixtures: [AnyFixture] = [ - … - // And insert them here: - AnyFixture(Fixtures.defaultBeverage), - AnyFixture(Fixtures.fancyBeverage), -] -``` - -* Add tests to the appropriate class that invoke the `assertValueRoundtripsInCoder` and `assertLoadedValuesMatch` methods. For example: - -```swift -class TestNSBeverage { - … - - let fixtures = [ - Fixtures.defaultBeverage, - Fixtures.fancyBeverage, - ] - - func testCodingRoundtrip() throws { - for fixture in fixtures { - try fixture.assertValueRoundtripsInCoder() - } - } - - func testLoadingFixtures() throws { - for fixture in fixtures { - try fixture.assertLoadedValuesMatch() - } - } - - // Make sure the tests above are added to allTests, as usual! -} -``` - -These calls assume your objects override `isEqual(_:)` to be something other than object identity, and that it will return `true` for comparing the freshly-decoded objects to their originals. If that's not the case, you'll have to write a function that compares the old and new object for your use case: - -```swift - func areEqual(_ lhs: NSBeverage, _ rhs: NSBeverage) -> Bool { - return lhs.name.caseInsensitiveCompare(rhs.name) == .orderedSame && - lhs.options == rhs.options - } - - func testCodingRoundtrip() throws { - for fixture in fixtures { - try fixture.assertValueRoundtripsInCoder(matchingWith: areEqual(_:_:)) - } - } - - func testLoadingFixtures() throws { - for fixture in fixtures { - try fixture.assertLoadedValuesMatch(areEqual(_:_:)) - } - } -``` - -* Open the `GenerateTestFixtures` project from the `Tools/GenerateTestFixtures` directory of the repository, and build the executable the eponymous target produces; then, run it. It will produce archives for all fixtures, and print their paths to the console. **Please run this step on the latest released version of macOS.** Do not run this step on newer beta versions, even if they're available. For example, at the time of writing, the most recently released version of macOS is macOS Mojave (10.14), and beta versions of macOS Catalina (10.15) are available; you'd need to run this step on a Mac running macOS Mojave. - -* Copy the new archives for your data from the location printed in the console to the `TestFoundation/Fixtures` directory of the repository. This will allow `assertLoadedValuesMatch` to find them. - -* Run your new tests and make sure they pass! - -The archive will be encoded using secure coding, if your class conforms to it and returns `true` from `supportsSecureCoding`. diff --git a/Docs/images/DataDesign.png b/Docs/images/DataDesign.png deleted file mode 100644 index c8fdbca17bc99fdcba306cf21e19b073e11ad5c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108669 zcmeFZbyQSe_Xmsuf*=eMg3=--CDJvZpp-Cxgn)o_cjt&S2q@h{r+`Z5AgLhTUD7$^ z0K@R!!S64gXZ_y4-nHJp9@j$dy>re!`|SMeeeMvZqAW{9@PGgd3yVlzPDTw23nv!~ z3!4xBCh&wZNbdmnb;DUr_BmErAI%1EbK5~q+ZhXskPP#411lws3K%eIss6_0jnXSo zV|!a}Llb)=Q*IAi2VgW7mbix~aA|AmV#wfOYh&ju>LKy)dW0x&jd{%Tkl}iWi?zhV zH%clD()LcK3-Q&(o(|zz8m9PdgVw4=y`rroTk~i;j$`v$2z4OAvpheEk#4PV?Y*KCnD1G}u@`|v@9Y6p6+Mdb>X;OywMYl=9{Z*dxb-3Z<;L`?h z)N08maF)1lR9y){qUJ=XQ5dW00Ds#x0g-yTabkVk3Fsmu>JB;FJ@>cu$!!k84+H`zP?P4DkVg$y^^^>L}=A3yt_ z4Pb@+8E`OSt~C3@Rm&Q6IO1>A9~({*?!x;p7C@v>6+K8&V;pRJ6X!3l@bNP{)!jFs&R` zemfgZyg|fm*PPEmaK{f2I!XHN3Kcb%uh;2a>f$!T$<+Lah35ll(_D>j9EJZls`{NRwvTYfM7`q&-{)n&-eIDqWo5LjiX)A+wVY^xZ#M z&QspcFe;rc(z`lJQ_CtC$3pnPU$3{3*$d3FwZm$r`@59IEgn1WeG|p9Kj9rVN=J36 z)YT>+=nenq*7wY5;W&aA0F^F-^=(|f^qDq>!nX5G)z*%y0sdWnqVido%5&2rf#^;JL? z_TJ1;9r`@@(GI^>_P||0hO~os$Zuj~*nltNX++wgX+QO#H$kDC!E&FnJ|R;yc+FqJ z(9XWrlkJPv=iP>r2lTDqd<{qCYNZ(sZ^UN*+?*|wTlN0C;a33GGId_S?3l%L6f+5FTqDfi8(N;oClD$AJ}it-QX5K3tsi#FX~8p;UK3JD`G(AZPE^clh?{ zG=5(NzR=w6hmrd=a~+Mg#^SY>N-tjMw(_wA&)a~m8n~1uqkYTvA!-eMv+p(X~H_24NYMzt;KSgu%%c zg#LwZhA0a}iYtvO9QW+l6=I?Vot?3-loxW`t>B&t6XmQZE8Qd&Lg*;HzKBR#gW#(# zxa{9EblynN2u22b2M3JlE7aLi6Lp=295XF;{&4V6IGe2Yy4X}_J(jH#7JmRiCKNq; zdQktv;nYF6nJ0};Bn{5}>bBvbMUon!?#s56&+BhPVdM(ie--i?qmVpiHav_>t4Y4X z6e`N24*4RV%l(=l)V4Y3wlS>_nDh&U^Vu+b{Bj~luk?KbK5t71o1}to9o=61OxAis zVi8^w_+!w)!l2f}dBlH;E@!+r@JYE4s%^@lM@9X({FBSD)vMmijYL7Uv09y4U$#x5 zUgXX^HQHACvcep4$6Wbi%pSBR7-El4pH5LWe-GTq=qEnk_}%lNAi&oR{L0UO5F_`` ztS~OT!%6~uqO@l;*mTub^Fey?E2<9opXBQ1r`E-$r3yR#a8af8bY4c3k#(($Gpb*? z5bvaNwpwC+TwtV`a2WUMkh)cAdTX8`WGBb)*Soat*tQSoKax~t!TT*}hv9d~7dqKR zBN0L`bPxT{hu_!9lbx5lpe7H-;nC1*p}m8VNp0^q|M6kO2u=B6=Cu25iP>`Nhz6H= z*nBg`AkF5>Ws<8<&S%z4FjuBUvaQy`{J;vqPs=dgVGYuU7x2#p9qx(6ZrTxN*BHr-+Q{Q+z7b5t>r&$1yJ)&aQ^9x;Hv>(D#STRJyIr z?vh#-DSPuGxZl3!STctv@k!|EsbluzhOipS%8?(`Lfc{*PxhG6B;#AG`;I~y= z=+k8E)<#E1|CPq(OuT&`^v*)_gnmuRbHyEV`;oV1Ru25)@1CQ6>Pb7^vM=?M;AuBM zA*U{0XwTS(R4hMQ)ZGme(3_wf1BJxvJb1uo+)a!ik?g*8UBRY52a*Om*E5l8s|u1z zgALBsR|_k}+Rd2$5khRJ414ab-a>y?x*@H$mW%4e_nSl{JTjD zN39@mzHW&I@^Y9`KxY&`mt7q zK9Dzg21XYAzDLT4%-fA3zK-$*es9WE44SH6b4Vcy-JKzCe`$G9_EGVg6LYl{YA z@p;n@k&s_Q8E}(*A}-s6>-eaZgL$gRw}wSeYrh;8^w+O5V=+%3Pjm zW>3*C*7cn7N-f$f+fXAye#_ zZ4ni6e8lIq@q~NGS}w&yXnw$NutoA&0A!mn$b*V3Jy-z)5!N376U!_g6A)a33X%an z@08S-mf?HuzrKngJxoG~a>{NaAOv_|uBB%x|1Y_BA~tha&%0TG+<=ek{3pBV0tlwp zCCz8|4mZGc|kBO(XGGHJsyberN}d<>*&t%4zksu z{a8285|T4{q?gha8}m&m*W5b=H@cb`8waTh1-W#vB4^<0;mK(Jx0ylILt$N|Bd zf)#81%cC7{V_Y0Nd2I8oOmq}32b?N=WzQgmL6*x8B9vnvSJZ!@Cq6GiY>tlWc6~gz zntmy^+i?EC^yFG81NSi+9VCvs#!;#G>$qIUB2B>whwNaby-8;;g|O$!R{~~NugJzm z^_afppyd>xlh*! zxT^gP+e8@ozVFkz)+fzP)xH&YiCwtzbLPuO0o~fLE^E0&Vc8KPv}*gVN$M=+(R=_) z$m@b25cln#knH)U(me$BViVptd|^@u=eAsI^K9$d+?c!j<(3>0?=SNB0Em?-#sB#= z@}RsC)+AgJ&!1tpzNM>k`es})WlV7+hS#YCvgg_e&0%RcKW+cDh#eA0IZIVN6-}gb z>|Wk{=83Ct>N>{)lsVfoIcd0jDX!8!M#SC(x`Y#79?yoA3>zS<&6m2C~*S#+mv z-4hDV;wSV{F%WjNdc!{lp;u0&6Z{w`RvpM8G`e=mGSz+tt>BL5i9o1>2M*;$`=uQmO9QN76jHLK~_ITUx#9uPNB0 zFPo%7?^b_xW1|t^O{-WgG0+zjI`^|Tt#vXMziKN8I;0HtpF`m+9^GHmU|PJ4Xv?$C zF5VW+DE__M-bU=Y3OFwYA1eX8?cQ6sz?fcTyc9W|;}FMOH)VA$dUNyV?opM?;4ZSE zb-u)y;$sXC2fQ*lOrnm93WoCre^0cw?1(??v`c9*xYuwo(5o8}+eS!?Pp?BN2nsQs z&gLAM7PcK8ncuf~BSa1iBiPd?$IY#dw^UF$3Eg*t7KjIU5rA+FWK0PdSnXZEuU5Oxgcrxp)~e-oM|y z)ixX8dLK1$-!-qsk4=0l8ZpW1SB&M+=z$-zAP$n~5sQH>eY2u6UZ9R7CwtIwL=@zEv_oaN0<~o%1SJM{nbo^;z|s z`G%Sh`%*dnm&_%lipycf$S4Yj09$8Bt8@RRrzjO_t|wiRbZ_YPnl@xYS+| z>%2Nwc--+gsT;Z-xBo@Nb=Uev8s&s`B&aoc66t3LlrX(r~ z1Lq2vbOXr|blMT$o$ia)q5Z5*viDw32K?IeHqPJqdOhKQm?DL;-u-RL-~op%u2M`Y zIM>ONDU&@#Sj)IStB7idS5zU4+j5Ctc}P+7w;iHp$f_JBF<_r5`&p9^FA4<8xR)VO zfbM&>;%6p5!B681f~jA%yQa2&FXinJyj=fapJ3r5uKM~z{+(kFeW=%R#CN~O$Noy< z(dpz+oms(jMrA%X#{SuGypRu=-U-&te~)-Rd?qP&2fCgdihfDc-8%$Vg>ux>ifee6 z<4z53(#Zb2XYk?zh1pRg@2#Q+W0s&2p}@(@#d6RckZoh;3&~jSx7DSybK>)2AP`)i ztZa(Juf8}L8F$&{O1(rV8J$csH;Vjx%XBLpCP=nkruTy{+J8oqODAF8I^-`ywvPZU zG5Its*Ilb@FhPm-au-)aVNkwh(1`gCAWueC}!cNM>V9?Bi_zb}vZoRu1 z5<-2*jU7&dM(AP4{Ug*I&PF2%%Sq>b5e6JA+Lvq z-$O*6q`69c5*)dW>vx;(-`=yo-*FHwfph7)6dHfZdK=wLyNxdt_ zpnBOW`}#YNEaMT0LTp=ovN!Esf}Zg#V-Y?~%~ zYcL$4{Y_$BGPa$!qE{`A3qM2 zhqpJJSN1vJ&3=&dA@#41>Rn>&B>KP0Rvpg?a;FUqMpAFb8wI@wo}X=2ABzAO`TUic z2%Y%5e{_qDDH$^FvfaE6S9b?~>-*~TuUZYwjXl)Ka{H+fBayI5dKa2XF5tCqY4GT< z_nJ!;Ae?aUG2#Mt+Cue^1U6}nPvKqr`?0-S+M;5e>o0Rpt}! zb)EiC0_ZwUyMWWQ%GFlMVB z0HDVQJ91o@n{CD$x_L#Q=@~tKn@A&4e@8){rpV!s!n5N^KYkcIT6i55B5_9s{I>w` z_6Jtuky?qvY_&e5Wx?SRm+S1cr`a0&x99R3qpYVk;pL2|{SXMRPJIEPiW-J13P2(y z4$Eo+m>Xz@RNACsN-s;%5?2E_cT!^Bh30Un3``Vy-E5{4_`h@0$Z;yaKIsz#>qu;^ z;#8U4v`q&2I|;?04oNEmWc!maT_(EiP>H`~13pkTgz)2ZT$c@WHxaUatAV7$W9(YmmvmSLFgPfuj-(SCHA6DKhNm_2mj zZ%Sarq=e@jDz`Ap+A@(G>v;{zaXyn?eIa()n30!s%O)StZJHDvh}Y$xTJT@6^$E#9 zT%5J|YuD;nVnIo zzhE1*MMbty{aL2y!iW=769B#0_b)T?F%~c-$Dn2R_$81M#5fFhW2ceS{%P`dTJimT zn=eGKl~IW?HQJFgWeor6(wTWTRkQOq+@NjH@h_bZV0yz0lz+{b;zs*i^TXa#jC9vu z-9-P+C=!chp0akH4ua)PJ1L8*tg0WKl_Vd4iZuV%ze! zsKw=HO9+O5e;T{N0N2JTA3k8Xv7q$-5Z)8P_#&}K()8?AR0$YGh_jH4{Ui7fUS5Atw&m?tpc6U~9ye`S{X&E*`h}@LHIJuzf_Fw8Q zSb+ZV_;0=dW-<)CyqUkHjzz{*r^4Hic{+0gie$3^tff`O+in3%xYZxP*U64%xN0bJzFR_6BKrFwC44OKd9?Xa&8j<9fcCHynIukM2X z!U4=quQM=URm#A;4KA6pfA0V5qwO1jNzq9yGyT_tYqo%PQ#zpBVcpP!YY+QxG9(k& zfaE0Jcgp@79T!nRL5 z(Y_(E|E8%PFU4#+SX*4J8MNivMeAPZmVZw0 ztf>8YxO2;V=8vxDA3PZ7d>o#TPf>c|Er&6YhT{_6o0v#ty%)Noz5mEB6pxi5z{BCe zbH;`zUM&S=NY1yl0}-ms0j6oQ<0;@*7P(J!z4^M?i!;pQoqO1k)Hg!Rf=|p^@W3KB zmKY0EcM$Epze1H9kHGZQ8XSK9E|F&IP5+Nt*!8#HAk%!Fmcr zp{%W4sx4g~o_SLXQAysHyiZR>PmWFO@8LjB(X9W5L(43BVyij-cSCaGTz#5Be0&+X ztyxkkZN04!ubYJ(a*cmMTATzV;?GM5ih3Tb@&x=5;qi4-SDgg(FtfKln2)!Obc1Jq zBimy?TeEWkmrHLl?tuWmOYyoHQlCA+t}13{nGhX(6HF&)MF|0T~vDwqc$MW^Y4jGU$*zy>)^0nXRej}RJ-$E5Wl50 zMA4f0s{@|h1?`N7ZDh0iGfv%h=jD10ZllE-A#`5r+^Cfbr9g19MkZmRC9W>Dd{yNi^8u`~gHOM`Do=}n<)-N>Z`^|t zAs_ohy=xin z?d^t^cUM##?tMWWTut`-2^x2PlqMFDF)*3W^ZjAa>M{03o7DS&vOYu-wRrME?679W z_q88KK(k`-

E$#B;%T(1NDZNxX4Yp#1CnqEoWtCwL1euYk0+K{Dj3^a*%7l9-~cQ-c7lCFOK{8{VR z+w%1bnX)h=Yy8E9NbisD2Tfw@sGviSu|5>x#x8W$b)43F`&+_Rn75|ERqdS`LZAqA zLzk4*Z`xm-*b^G)?T^>fokP7t5%`n0qs6-qDrSvKg}DP`GC^u^czj83PV9*vghYFL{v z?s{(!NJwXQd#(3;8sg*P=jT5HM0m2>u%{3AyVP@^Jw6|Yqkn+>zJ5L%hM|x0czoqg zxg#if{MM!E&kqveZ<#{D!kz~vlGA&Brws;|n_A`Gvs>VU&(RhcIWmu06*`Zt3qKNq9tzE0p-=7WR_;+$!Qoe^!+xzFf1F2DWqnsT3?{!CwguiM z_E`g1s z4q;bsVM8@rcXVQkrAt#sb(BhdN4=(~?P{Na;m8i28Ci{ccmm-IK1Vt98iwkRRL?Kq zR~MHj(~x;)JBatxa5MV2yu`*ziQ>3&So!cogK;H?%ich-(sy?QjEunY2@Ppv+SV4g z(1;$hv925`sr3bx_;j>0=GHOHF?@e zvS3nJ@n@WP8o$de0|URa6&(lQY=wOSiVT6i0o1uncPczv!mg!Qp)7gn!d{l{`*uEW zs_4#n9E$lZPt(y*mn0go=g}p0bk{e6)YVVE`?P7#SMvw_q5)1;W*jBLa{BFYkM=`N zQ;*Yz`O=ki(Kwd4R5nYxoqt=u9LMJ9PYId3*o{`M~A48%us6yP=SSpwlKCy$c(Z!q6xeUW>g zODTd~%gElsW1Su18E#|iyw*30O8tn5#a^6Bz`0^!TM!|oLfZs+a=N4!YmnIY-}TxXFTL0nAJR zvf;%T*=@=5b#P``+dSR0yfB&HGUliNEzXl?zA`w!dQ2RTL=5Zryj{BvX-i?OFN4FP z)t3NXWPO7ID}TM1JSSi`Bx2UI?%lSmevM9nxzNk9>YZksHkz;gPS*6}s5si^s+oJZ zTAZ(=pgqOkQ#>x2WNTjSE5RJ!WwUe0DfyeM6b0ZV4^q$^r5hZc=Gb}vyd)A;HSPnx z?76?n<_0rgTt1Tzg@j=D%e~*yyGQaCe&Q%@vfVHzv+e3mreG;&=X($fi%a;bR4kt@ zcL1SyT{e<3t}^w@Y?@y$-;-LAw9Lwa7!AI}QK zbu=H>6>bQJ$#X4Nx=dTI6wJNM>1Ap5L$=XpoJv3t@(ZM?8 z;P|XxJww2HOb)Lzx7vW}3K_1|XoNx{+>}L-?vu&B2JSyS?tMoM zG~+_?jMz{lU|fbEX(ai33)2f@xioqrfmf+1rGQy;LR0A9|9?YkbQP6cAC}# ztXu~V`U3=?R?EBl=I%n-BOf3>+Df_K`497%qfTs+=q83^-<=11Qcn(ym5H0-e^yZS zfyxwBqtlfLCG>_$riOmF#`S`r068LaA9L zr@RVTtXtudyt%@CtArs*>tOVEZatR{3N4GLD(qh8$~`4c^b&OiRheGCJvns8Y!FI< z)S)BtUfbf|Vi&dD8^c*AcS|crd~$5!6(U4T@r(Ri6gN&jX1f&OQ|X_6PSwzkcuv3n z9&e(^ho?0KHKL;}!LY&AY*jh9XQDX{S^S|t?-Gp9f#&am|iSe8A7vKCON#TFLlj}!@gN>{jO zHA4rBbawn{YB!$a9UCig`#@>pU4wZD(**dd0JnSaE4sc=1SP{ zPRDg$=88VbK03eAOJo&P&^}iHK4w2#-w*@7!c!nKeKe3_NhSZlvf!nYPhdI9?{2zm zfre^T_aIL3*;@B-PY$OgYpLJwl6?2Fq+7$&N=Ls_aZ8LLDqk^JFkMDtY&rBGF&g3| zD#~@g3b%5%+#G+cH?=_eil8Tkb3|d}xtG42^Pw-MKk&cy{*fK5^D&dRt6uQZbX*BU zkNh((u;lNtKIE|pWeMCxG#NL$O0nU5dR5sk)b5b+w zmf95b7E-?9n{iSda|K|JSp3TSl49_k6`Qrs79-exn(DrZ#5)_{NrjPf2*t~_M5`g) zH``sq@p+yd5#06b23N-hrW`%`=GkxKRn)q>b66>kStvx-1JKQ6v{osqTRNt1 zY_o;Dz%x60td+N8k68QU2GGay-MPy{~f%1RMPK}?=_L+F%0 zs~|pGhi^lt=TZP>MxZjEy?4wf=e41isgIj_I;;kXSC~2ophsnzwd5XEwjX^U z+^vLkm;w0U)bsgg;Kcfvg}N82Kmp%SvL}`A{j30rDApgyjxMP@xJz(WC>N~kI;e>H zQ|{g=mu@v2@L5Nm1J{oDrSy{*%Rm+=MVuapad1TM&Gr&q;G_F0-nDeS|MTYM%a00$ z@N?Fpd+ZXI)E90;p7|y&aU4>p#o?!Pob?CI30=A$i#iQhonbSb@ZThuO8d_%r&J`P zA3Db4Yrm$AfzMcp(P)XjEB|kK&LVyAT-{=rXShjBVC@o}>y_Q4;msA183|s{jXJ@_p z2Xc1u3mX*d=h?I3aM&|+jQ(@O2-eFqw+y{RgTrvrmLZ$s22}b^-zEp%VaE2ZG zRo`X=Jg0}KW^tL#scq*bto*nBC!F+y<+1JOmV*7nIs1yr`RDsWnywNynG3_AF!MRG za+N90Ap%5#c^xDp6dJ``a03!Sh8!>uCv_tCd{>)(%5W9OTEB=sPxbSIuG4S01tbG) zk!KOgLB=Al4yiQCHuFzK6(RvBthT*&FOFOH(D-B`iSY^4S#h_))z5Pi!PjJ~RvtHU z-=)xer}CjXoc|rGWAo`IDrI2^lrnw$@L(%VUq=$2;Mm=)wI+0PYAe7?F+6>&xy;88 z!V7gCmd%~q7LmAc^L{v(R>hMjOWfQ#4EauY<*iGHDy1c|OqTS~Ik4>8_T)5@THs-N z=UZyp=y~t*F8HC8cwvbM&YqjXXCiv+?|Ww+((0W+@67bI*Ltd<_h>uOq#L7Zc)>-> zqMaRz8GRmxTZ%uL6X3NKmQTR!Z*ozS>S*6zZrSu=Lw51>+1aTeecztpYG+d<9%?kY z^1f8pdZ$4vYuNmW@Ts|x9wL-L3{-{tb#65gC&rMsDA`X1Fxcd+tE+r7^4C4-3^ z&IH3vbje-sD$IUuQ*ElvV>I48>z11WUC9xGf!#OkzUj|~@-}z$#RwAK!B)eMo?)#C zqhB(o?+R!xi=j3u=SbCH%Ir=DrMOvaeD@8l+*}0F!_D4!P?1z{DS9u-N_`AFG0uf{ zn4b_t@C`rGk8_Qr$N)!EE&@$>Dw;@1+_)u1x2zFgD##t&af2oQEqh8mNa?hu4bXt= zzSY|hX``p;!{#VWacIqj#sC#mg66$11= z?@c;BPn$QtNhC#LXUfE3gM%5sD?+)Uiu}W&pU2$HLh8E)_%(gge!#~@efrWJ`yD3G z%~gjfy}qz&dnRQgPRnI4{`^j|T_N(rw~)i6{vG~DF8uTyhW|8t;6BAiXA{NJTUv7s zzgy<q|La)g2atpUp~!!j&&78t6t_;ofJjN_$}wd|Sag z^IFrpc_)zty>kyWLxpIqDze^qPa?%`@GThQaLOIv`$Lqm!QM=CGF5-|F934XXpwzc zBhhgO)s#$x?<13m^@Bv)h%o|LpU4haj(-p9t0lkFL`XjwHcC#lL>K@{%qZS5JnH#r<|M?!dW=mW$+U(pZA;oMU>XDZ}&)?xbmFrGB z3hm6zxEza~aXmbtH~5aQoqjo9VkUbci5`sY6LXkxY|ELpr$=?13Z_+<{c#&T-FM78 z8k~+m7#Gshpm?LspIZTz0-a^Z9kc1k0f`0VDo58 z`ix)M0E3(HBV$HnVkh`%8bxaXXo zBMC1txte-WRkX*wz($DS)6y@_ zYF&^Hs)?UoV`zYsexd@VEl2DsR<_wLc}vm!;C`W!q;+>l&Brh3^(K0SWp zbYS#1veqwLhP^Y6r}M&%Mmqy~gy+gBliokeg`k_dTLwHZc*=g|+N&!gsBQStVrX;M z>4+D+W^u;4+V{0qGG#xqFD?Vy$O|fQxmh}|GHbxUJgorAY0{a{{Rj&+*V5%1a$6bw z-3I@a9ghpsR8O(oxBPBl`lEm%ULlY1q`peTz4WMCkMgQ9ZxPeofBDWtM$4ayI3@UV zyCRuqxBP2wM@Mss4w@lZqkHHuCDsGafj^0Nj$Xk%cIrw(5`qUxZlV5kvnm%VO+Rfk zHR^x%+6z?cw*?wqud%#W#!?m=OeD>QJack!g97Q>F~JDC`1CH`Ys^?2#_A@e>{HnXx;}D5U-?7$3Zyy zHLHDghOPFD5#2!NvxrT<$N99F9JG-vG5Sl>GWhOBV&VQ~cfXm9x?vu_QOgkn`m;9P zK{DU2pH-iAjs7NAs?5|=f$7F(WXoL4j@D!AXY&DlNhf6i7mx>9TUtGK_w`D?ijYkkP=>d%pqlOBs8A=KgedT4>9?8Y$XC2WXhKMIkPLtFFsm~!;v z)<#sXZV}?s2^W7EahFb|=h(!5{VjkiF0w)?1yskQ>N2K*+O2Th@u03A`|5()R3OLU z06EUHYj#~dD8BNjA;@MlVwlEj`rcE76loyhhhcW$vI_*k0p1}m|64UOctlHACx&yMd< zkLYAt+FFR1&u4?CGnVY^YNPMeAmH|ARMVR~cY&y%KUXumZ)g9^-n*ZR8Y$+V5X{;- ztokQ-df$<}ZqZF^e=sfmb{&#IpWFj@&G6M=vqO?u_#<4zo&|U-IFbFP`4Q*$6H&Vb z`72@fU-w_nmja zzT^gHU-72C978(|n_pS?>bg{8Uqp%6p|s0WE@#^=AhW`iCzRAzZ9{8Ew7O9tyW!BX z=*mPg3ri0pt&eN%hXxb+=N`;L365?C6;|!4(6KopF?FTiz)_9Dt_tSxW$%+IkW&iZ ziMMYwARqRrlw37`_)WFVyA)63thT*XGqPoebbksf5rkf$$zTV+lj)mXb}r0LX%8lf z>&Zb>#enrKM)_LMK97NY=M5D1P3QGSGh zU0P(>D&v_Rfs&l;L~x;o{P_DW`sy57r;4OZ~mV=bqkIlo}6 z!qucrNf(M1%$6J|4F}`_-i-Zu^$%D*O`e^QR?8-M_bO%kS%M6C~-R zTE2-7?L7i5(yDhTm9YnS@i^`@OL&3(`8$&96!)0aSjueDp}SyVsra@$qAtw@nm`+GZq z?cE}B+WK_rG3al`(_gkIAgXylRNbkp5&LsL@RDK%p@h`|#F&U?juUw0w2iex`LUquIN9zIcrn&+2u-F`dKd0@tc!v-!bq$3xkdA(})y zbPpzrpM>f$;pA;qwi$YiF3?KnOdr5;JjBz+p+VDii%qXO23ED}cEX9RB>4oqpd!Y<)TK&}{0)R29bD&ihg22X-r{*tB7G;iUDXR6JKAa<<#4s@z-hfJO}C!@2OE$MsDfU`u~>NT%^F!ehaU{NnWkt*!+RBiHea3nE#=Tc^|ryBx(`p%D{`X$+Rk6bwGsr%<^X zY)(^?tFa4)lf94D^CO^HFqSa=c$6sYN?DbDvN6}B8Nn`(1d8G?k^BOK`H1fWe!(DU z)_X{g$2)P}o4CZrCgO+-l1*I(DRGyc%a;$POR6!4$`MoeM%W=c%M>-dd-in+OJG6t zW1tA4x)DvZh1Cw3lXYr1@Y&?^{+6NU!hQH4BqM|6C>PuJ&JTE5Xe71Icch{CudYus zQI}y`t`8T+8Gs7(fa>Rt@4Ue_bxDmZAgt6WHcRY4n?35{kCPcjx6m)K!0p(V%&eIn z13Kbi3AK;;nm+NNN7=Z^3k#BH*AQw(zY8Hdi}bf!3TQxrKigFny+%AnT2(Ayr(oop z!iiCBL7zLJrwqvL3v@Qamp_=72+Vpzuryja6-vS;J;R3(r)I$*#HUl@B|{Gxcq|=r zno9)TP;6X8^kxSyliP#k*jps8-SY_$A^m;JS%{h1F38-n(HB$FpS~uwk#Kxr9N^f) zC=iK|Y#i-c6Mr5UiZ*rp-gVg_sn5(Lkz$ZX5E)rtXg}TbvRP|%XW;%D*f=A)69??3 zfx)DAzaoHT1Hz8ah)120+>4bR6!DQPOeCDpv0#tPz)V$G78ZBicb%w+lQE&n08*+;SH@xbp z_xZ`s<{W>$hbVWpbw(<$k{J|H#p`cBtV+?(hiN+J3o4nt3Ul_Wj*g_IMNpC;+uyKt z1cWqE^Lh-ioFc z#{)}Hb6}(C#)HbTVuRb;k|ObDJ!DrjBP8=#(+j-a$($6_x~T5+=26lfrFygAARvP` zfiHG52!CWXb`w|asLLR|(xbidT;wojI;pQ^KfIAA-k1QKlqbt)+=QjQoD7BlS3`L| zm709F#cwwko?0=2TPdM>JjGI6v+8CvdPC(UJ)!K^-{H>0TJ(yGzGLRTfn1=-LPcfg z-GC*$5&t%Q=JBF_1n3f2wsjco_2CMX)1gHozZ1cp#){*Dfved(pQ9)G>h_j&Jk4p$ zO54EKtCwCor63{*ARvz|FWOk(OYGcBSu+AU`9Rr$s8{im9UOWOQRK|Prw6Xq`N3R- zlP|(To4BpMjJ?oE{HpuJbj{6rkJfje=XH1TAGgV2H7B6!L=V=x3zB9cb(Q~F^dq}9 z!cEQPoV9H6)y{-m7~$y=oOe;ucgC;ceAR|_w$bTAZ~CR6Y&szfcnd) zm$3%uU-kJqiJku10ZQ-xzi*0yBZ2o|+>S!|bI@HUkIvp67ir=OL4M4q(16=PmoI!7 z%f?15?#?&er_eKc=ubKB*tvF;y)>+y&5<7)1+lK}4WZu>Y9sY?hnjV?BV3NMd(2+li# zEFOswG$IX9^1vrq+~(+oP^TPYS6?n4MaP$=4IB}^uzxY}vT*7;| zL^;FpJa_Isb;uZjl&BU8x3#hg7G0(6Wf`t8vU@-k*I5;|)syr9GJ+fta(li62d}zm zi{}oOd=P8b*Agu5yc@48T^v~~_~qvbqT?fq1d1d99VMo{?+BRdOy=%(wWNevL58|d zPSAEa66E;4eOkJ49QmpfDR zu&2wv`G`GsKlrzKSvB=k&pB>{m%puFlGJF@zI0v@5f|m>7kwmBaE^Z0q4j91Jqs>~ zuno~u`G2T;%dn{awq00CL|QrrMH)o92Lusm0g)1rMrovL=#Z4|knZm8lJ16~n;{1n zU@!jn^BnuRpZ9&gy?gItAAEpW%!*%JbzawbE&eI1X+$2wx$v$hiLmW-!cPWDx2qaD z!Rwi$8{dsT!)No7B#cS{!B4{k_uEMBuS9fjPshV4g{`}|wp+I1nQ+ac&vMhW5bVsk zhzolY5d4?ah@jbN-S<}A+ljQ&`i<{Dbz0o^Q%IH_Qt{4xZAOxB3!;pZc^e_a@<}E4 z!>1$K<@ehu(>fP*P?yQNB@(>qBB+$s4=9{L)8g9mD}Prjkiq;fY0bv1%*8#6e@cJQ zN(PorU+C{{t=e~r_Cn*-;enp|ot>HA+Duqa$YN8a*(_9Cl_t8Y6J^HP*(ael!=HjH z-33E5Y%Wb#Zuz!G_1o>D%s1;@?lyyK7dauTqs|04F`XWFKObN_!CAj!&Fe4bFIt84 z<~yltAGjDU6mH{^R`@He9=uYe3zT&gABtK~Zp~0~hi~?0K(=0lOVt!_KxAZsdN-ZA z&L=|C*u{6<1+rGN*44rc=L(1}Slpf4g;8AT-7e3*$6a?f$p^fb2i67mPRudep#d$& z(HbT@DuuPB5v#&Z(BHiZ9;5X$B8v9`a>84q(!I$d+eE#J?q!r&)5aG=&8vCh0%;ui zj(egjh!5AIj>{Bj;H%BkuUvJfz;#mJ9wFIBoa)wr&+& zXJIOeH^5lV3#T5Ilnzx%Kag5c1tzN2fQYd+=eKqRLzY7a-P=v;q(F0vxcul`s}czH z);cxVs-6mmkI7|2={pO#T9!O-e$lGF8s-EaAZk)WhO2*m7RU=V3F-9_rvV=kZC|+< ze&m_Un3D+)*j?i`qN}}xYjF_`0NYwOuNWab4U% z-xmhv^*Y-TA|Egw8ou&C_HY~+?!Mcl+j@9{3mR=rcPd~}c-SqF4NJ1Eh+ZD;TV1$^ zH<5gW?ab)7Pv>M{_bRxrW}1l5{h0{T=b%PZ#)#If`p?`sZC+9H-zl*TGTleHe=N*F12Zc?bUuC7{NPH( z+Kn?L&wGCYdu!d9DgM+AfD8-*MovE7Gl&kc?TTVzkkt@jiGD6IzpI_O3s?_F>XAQ- z(C{*opp}rJBqyULFL8IAQ@cnT;4)gAL_-M>Hr)C?K)%AYjL2@Z%k!RJTX=vgQ~hYL zy@WdlC<;2Pwdn~S9FvVYMmhYls;!*Zw^4ycYAyGYCDy+mJJuVEbQ)3FGaN*Ts60u*~PN8#H(fam-_FG?h_U( z+Qi)((KZtftR{!6UIq;3IOd?a`%t9QOg#k66+!)raP8=7?PQRQG=DHWa9peaY~)XZ_tc9oyL7l6ISJ z;}VQN!XKG-?LVD{;oMHQ!Yp`ucQ$`dj(OI&EhtavC+E}?x2#RxrSh90?qwDQo9a2H zrH7`iILs4eH$_dqt;v$4{_Hr9s`@&SvT4Y@0qLG!(XPL=ojRTU&LC`Ygh?&9KRLI) zE$lYE-dcGe>!5k}G$X%7fPk2JvxF^p9VC9xUUyC7L;%!rNM6_O21#)W!c^WeF`&F@OkT2d7_-zl zclXspEmwTId1NmlHw1PM=un_&`IzcFu9*t=L!FCjm(Er7ca7D29B2Ktn?w_5i?jC# z>|osdlfS(a!k+^{3_2!c+}fX-O>5g+ z%(Jwdrw?AHy_M3|f8>3;y$g8k@j1w@*{3ZeG~PihQ2b zPxsYjGFqwNZ8}NGd=2!DFBNj2YNRWsMAGTG*!(x`P(avWx^clu0 z$nkYM-C!$SXYB&tQqkgP_~fhdwfQ-nX{jQoseSg}=JTI-JNt zuQgD8GTcO)U+!5t?RIa!FA`D>A1o-!C}O15UEDdEw@CIRW1Q)GBo;OPJhKRp6NGY9 z0@(3*>0Wi3%yR347~58Kx#3{SxLMEpT+Sf-iJtu!d+2!pfa@*`S4b0t;HF%gW-nH) z-F!Y!w{s&5y?g(Ez)hWz;A(YW<9zR9X=``p>VZdk6 zon!+#sGsUfPvHOTnsUUHg;TLIv=uV3c?)r~yUzC*euH znD9a$Z@xhkAGo%g;cA5* zw$Ssa@WdBs-V?V9ulrlq1^R7^zg^YVM8>*e>8F4`&Bo$l7QQ$5-e zZjR^e)$UEZ>B8q8FwhnFKmLK`gz`0C?5VXHj+q^a-gzloUZ%8aT%0K`->d;rygNhS zQT4~UAmQ%T3Pk2Sp<3#;zP2smwAG1|YM1v>r}+{WR0k8;ud(8e7L-WF4Vm!AKQytt zg|9^!2t2Hel_x(`Zw#`3+)M^rK1?kfUw2TYwHORiF^ssuyOyO}weMu5hkk~8)arEo z2`^o)xwI;E+D!@<)~#0O-YrvIIJ$1Hu!5X#U1e7~d~%&*oHs3W`hALH6y(w8#6t5J z+f)KVKf3JHx9~^C;qF*kwLrOg{|{#8c(&}Bpl0vMQAW|?u*eV)PCEni3Ik#4ROh>> zKcv!?&Pv^q3w+XLX7ouudn=;Qwu-99t<=2XydNTTIDLT#@S*vI!4NmVUX4o6DcX&hHf4~@_O2;{K7Uw*h+ zx;ZN6YDB%k$VMksd_o=RdC+aoL!p#A`>{%W%0Ojj7z`ckEcQr$aa~_a_c>>1MZAh9 z$qlyX(uw2Id2{I?!kDMeVQB9hUTb61xxx>p24BY6qbt8%qQx+F^r zPd>52jlXWo){1p|C3G;ySc_`!T{ zLv1&-p2Jp%VBxb18c(8H6fyE@35_qG>y{!J&4@gQzzOwfL|=Q@k{dO;xDDS=M6HAT z{)7ZSggd^jsA7IQ#5;ANYWFcpv!CFhxz|MIIGT_8VoL?rsb~v>57(l_XnhFOc->Jr z{dG_Y!vZJXnte%PWv%AZfZRK^pw_`0Fe`X#;J!X@fE$1Bg_y)kvzZ&cRfA~jju8!*$ zN=3Wm56fEu)+ z3qYFgc7y3?>qDwm&C*cl|Ji?pXMeUg4kxKPDC!pCb9anRl{vPwJZO-4?8zm7)C>Jz z`jAzGH2qDf{BaB#B)WZMwcPG%6MB&zFpFfHLPr+_w-rAYG^>@aP8HY27oD5x z$Nrib0lg`Un-aeR6UbE>vuSBrb^0R*I5yPuCAP7CY@je<%hHnjOj85+0!yiJB5>?~ z<4F`0#QIj|Rb18ow4(gw`S4yVxwwEuuz6Rs;e%=%{mq{S+2`zs+0Q0|06KPvud;B~ z&bNP25~&_LrM<+qSs{^twBn;oKTk6{{1!WVkG>&c1u7 zs1{LqH03eJ6nKab?l{xkjbd+Z$wr;o8C_>kz&p8cv7mYfT|UN_{?(B`tE5_y`6wY; ziXSXqpJSOZ=^?(?IWaOZNLb!T+aT5|_W|lKXVwtJ+nJf6n+f^U<2NY zuGjEdwVpc1DAAaFhpR8|JH1*%C;a_S&r`++g9cS zcdNoD9CvM+Zw$3N!`|2&y%|ERm5SER8PdBYs?>A*I&U4MKDi)O3JryIeGK%$0`NXB zC({sY*os1MKtW47pbUif8aivt{09mK{dtAX-yaJ&|5C+**m#DcKZS`22YL>vbSE^A za&amL6SycHe`jW&&*b39nfheOs~^(AJrh)}a)2GQ04C^;2@wY4I@^gH* z_cY+}p zDT7Jmf-01tJJla=!m%d2_j{!T70>c`zAkd0GrW_*@7+5_?g5N5A;x)Jhi7`N&5gCvF|G87 zi~hVgMdN~Du#1b9sMUv72{{F74_5tNC2|<58HIC=T_A! z@CWH5>9e;(vV%R%fobTfKx^$26MXv#a0h^*IcmoHgQq!Pwsfv&CAe20kK69O7hfcI zsO7{^u}2_;QgdzMSvVEIjf{3PUnFGETch?C2ZV zK`6Mj-1{-XlnC%ZU5wdVqUna0zRRvlFG?oFy@2j(Mfw1}UN#@|JUtR?1>8NiYC3nw z3A3%^l8fjY9WU?ygQq}=!0&7X;4G&Vd72^P{`?FM$^!%0B6p!5NQP>)2{3tjYV zHe>n)Y|$#h!%crtw?OopU|h84{tn$f?)Lv8$f|(wKigFfodoAGFfS1pty&qb8hE_} zA~AAe=mP)xp^F<+?$aQr2n(gL?9QFIV%oM9n)cjwy#TmU9z5G5pse3F4ZNcPpW*0W z@OtE+I)vhWXn72uYisg#=?@e4)TR-m?x&VfLX0A!{~fMO={H&U82-V_ZiR|r|4(r- zxHm2&57p@05K{fa+$DyK)*F+b=m-k_BnZ7{ zct;Nno~R#=GXJ7HnA(7dOF#N^k<3&{7}S1uJe#McWCaUakMu?DX`yLHs zx)>NnwPDsf;i)Up4$KYx!i|bUzG*$l#L9RNPm$o0oh@G)Hz!AC4iC~!%XXO()F#ds zE5_^wiYk(F4Rz!vehz+^V5%IjOpSErkq0g=pZk}&(OG6|id&@CoI8cH@L=nI>q*?( z!zqPD;`(Sf33K}`AGot~Z5!8=w0Ld#9;GW#OaM#R2h{0Nslb;g;8@xGFgK)f5`M?7weWouNSgtLUx1ilAJbbN(1Yq# ztt1Xq0cKEv2CwFqQedF)V9yCgpeR*QAsrcp*R9he5q`C5Pd20ehtw=_GVO5xI@TZZ z!xcVhU>M+p7gNXKK_1Z264I^mJk?>R-UtPP&u9Q6d|Z>VB-rS9@d5!*M>Fqzy~6z5 z-V`8ljDcr43ypwYm*n8a4@ha2Yf)c{x_U3i4_ye^E2<_$q6^Y}xJOKwZUn01iIMM5 z@V%yC5#Cw#W&(s&a#bT$e}5zdwyOA#lqdn*bOo`VH_(@kg^@sRYkGRId!0K+&4zM`gfNma(rgJfx^kGAAn@>bsK;nKWeecf=LHE%N(t~!TH?Es4vcW6r z4^2HaHzlyQI$ulX;-SG{mj(TSA7OlevX(!erp?30rTzpNCMCFI@ey<9B4v| ze?`07Ol5oM4_53D%|%Mv0-i$$Zi zKvjn1BbrObmsDun$l}S@hv?i5%hgUggmH7u;qfGwXi-89=IjAn--y zc|+0{djL1YMd1Ug0T7=(xxXx0i)^|uBX{|%2-`^tZ)6ug<`V}Ts=PWa+bxcnod2w3 zx|TR{DYom%B|inYq#Pu;fR=fH{&d;Hx?$gKh7%JnweKIxaFT=HTt@?agfx33c>i#w zhSbAeo4J?dc0u@hS_i&1hdwqW$RP*6RxmFePx|zGjVX2~0Io$Lga-%c^>IZ)vyJLm zJL41@cDK~EJp?Y}cB!u{CftlL@4wFzfS<>}OA^I}twjn%6-F*_xci)APLo-NKUSR{jlF74hw`abx}d}3#iaOPGp z4zQFT#5t%BBHuq0Tv6?dg|?2^HuKuYb^cC~3O3qgGH`LD_mDxo{2{Ck|4$42ZuHlY z&9Q;$Tzlm?{-fCD(enEOrUiR0)}MgD-X_Sn!6$s(@2>T?J`UP%9|&q>V0*4jPzEHM zdMcX3!xX^412aE8zhW>zxO^_T2OqIt+D|P2srFKN3&ZnfRT|K%7=5aq{jEExG{Bw$ z)fe3X-ftHPNKEE6J^8_}$HqzN_cVsi$KVL+`x5|t2zDwni^8vXyY6Br*EGR#&;PuY za{C=J2wufOZGKQNOAT;%vG?5DN!)-{Rr?!ME0oE}01Eh)s>(`)MQ1i{qQ{OUK$Km#WwiwK1~nEZ;0v^`>kTIhI4;?% z;bh@aAMJi<&#(r*MM(KP00=w&Fa6Mt16U6;|3=kLpl(7#NTzSsU&1v;3;+9vK|v?W zxi-;UbP(Wi_x)o8K%m!`r=nFvjP+V`j85}F{XS{%EIx@ac14`lhQGEW@wIV*oLd=#mByCxK(KGzn zTaOpG&Qdhg4UE+0pG#*`A0z!w_VKY0Z3W!X#o&h3Rx|ZSTjS}}_dWWsyp17kjso*y zNGsvr;evmFgJ}2ufQ05`VTW4`I4HD;(MH3>V6bx0p|k0P59hJs<$n^IJr)07dCvcK znAB_U5U{Tmyi2=(b!sdP9SgEr4)>p*uoD0T!+$Gc33YRbpEE%GO{z3>G`QW0Nk{y9 z5lX*X{2WUy2@{oAI)_AU;{f)9HXpg$Y7_wtHGrc~fQ{&#pS%5k`~@WVn9?#_m7U(n zUR9|MM*d(s3tLE2a)+s3 zbulcnfw%;$7DYE$@me+(y+6|ADFxR&7KblW2t5Ysi=5Sn2)t()8?Mqirwr_dubekV zWIaWly*BW3p5VSf*8BME+h44wSiIjTga`H<50EKK< zORCL{jX$Oen#~+luQKlJIK@l_LE{bF^2TK|Rm4f@O-DW)qF^r>UEYh^)jYaDMeN8H zEa(Kf6x%zu9}(w9cxhn%9~e*-pDcDC_<6gMEM6M_0BJhHN(z63H4VDz79Z!}(eIKmo5Z(Qjp+evGB0aw~#ns^}In?I+=bWnZLWMX*Y{ zaf(&EhV?(`k30(ukISM$_G!+kp}q0M9<9`KNwg!2$?{nGfd|6td`APuLAwop88K$i z1w$eyqtUSKf|c(HJ*#5CL30v+kOfEJCba*Jl<>nHn63zI*Eu7vvgCFZXb@|Pn;e*m zYNp&%J4>@PeS!l+vQhren|3jvy#9YY$^Sek0EIsZ{bGrAnK)BK>ZfIO4*tGwE4_#5 zTJp{Q?Da(uF5^3JS!+B~x_jBtTX``5*NMs8=4{|c(nJrE(JU!t`b&gcXr)EOr+KTI z=_W)&@u2u2E2m2^CP|I5K9FRZp20jXN4C;d5FbiZ0+; zB42L!yyHMzzMC)7UhsBMHTnEwT^p^YbI<%kS0w)rX@YbycPI+Zx1av}7GFPxM~dPE zV|Fn}w&~ft6q%>LcT?jl+-h9Dc=L=z+iuK{L}zyT=8tz?B3~h9k<~BHPN=v`l{`WU ztsmX&(*ZViP3gq4-}K4KkI5F1I2+y~`LRqlvRsYis>5YiVwRjQ3r4Nph4rg~ zyUlruZhh#NrO_z)i=4NfQ%RU4Zzw4!&RnR3o$x-)T4ZiFYFM}1YlbM!D3>d?naXUi>rp+r--lYSgY1#W*firD+dI2Gg0yG_;8DcDr0AB7hc&Y7&4iWC z(@ezdI&PaWYN}zKeMEEf!5=Krk}qMMA6! zJNJbb2Fyl30(ZkFsy)3e^%C_NO^FcDUxO;Sa#+x8y(jd5{lkkJ656N0?dpQwGM44u zng4PBxKJ+73CwUckIFIBxSP|$is)y;%@bdE1nxBZUyR?l8=ZFWlL56BTOh0(?V{#H zJ?*uoh2(UCc1S;gFX5qL3(8xOe^LQyTmUFxS~$gTQv<@4DxC1*e1{V2bX0Dr4u0 z&I2kmnbQg=Bz@=%C@>C2Q&94YW%;jdFQF1{{t39tf`^Y6&7{gEew(6UG#(aB^#_bc z17-pg**}8y@%jYldVox|aXQHEh;|uA2ny&%1I|sx!s|mn&CqcBD7%2{+=1&qgs*HIb#uHw#6 zV30U+lVdt*1XbyMJ@gXHL~fq|pX8AKx%CX>5z2*@aQgPulRcB}MB(vFFiaXl0#JP$ z62HU-(7T*~syz?#-SXBfcvfA493bxl&w=MQB?gU;*NCOg{Z+(dUOZ=R)3*d#BFPl~ zW?qfv){vr6>5H5k0d(+x(R|17BKW>zCYBLnaD*t^c!i!#-G<3?4bFVD3$zfW9+MHP zCgC-S78?Co_{eEiD4GDENR0<38Ng(8fJ!&a5%xu_{ncp>jpq`5=Ct9j6CK+Y^~sv- z`6OR7CBc7LdNOdJ>`AHTkeG<7fB&cUOTYe4d11q?)(iiYHp`e2)`rOAFWvmG(YW zS{f*zxti;k?V&uUaCkyY5{QduoyyPp1~2V$ePYTeG4SARYXBM8%66BX<3>W*;93T2 zPbwsEL<~HdI_iOpRGSP)@F)%VHBOo8D-*zYBrjXAn!ZDeSWlo=&zTy+Ra(KP0eg0g z;az@inL~wgiNn8zDdg_H{u6bP{Ni-(EB0lC0V0>cGrsv<?=^^VTi- zXdI5qOh7Gv=xhBf5o{dFS9DhMedJr|@8Vrv!n7~Tq6C%>PR{yH)=9`P0&JkT$uXD&E%A%<&+eRPL%VSqH3biZNm zurJ;ucs65DT9G3E>m-Ea{_5u4R9=s#sI~sOjB@0hIRW`1C|t?gtxSphI^y&l zt;jVY161(u4#s;tyq$q%s2C|FhMPTBDXlivS3oUqko7$QmqD`c21g@sRI#suaA7Y& zZAd8XeV)zs5o^2bI%N*e9xZOzvV^khT7nK}Lo7A#0T63abS(5!J;UpC4r)sFFDCl9 zQ5g?-7w;m-gvo}bs6Kv_l>-Jq`x=-m0X$J}G`fWkH4p(pdQzNJjdt3=cR8)}-~;vx zr{mcxlH>Sde9{A+3Z|4BdN_4Vxrcr==Lk~54GtRcFtfVKw=@QF+Ogk#kF9rx`M}SSxlA+*;cs;!B8Aob-2(xb5tN!<4hM#n4Xut#~?aeQ4Ne+vn z-pPf$G31ep*nq!A3xH!`fGR$GmyZP8nM6*i{G^L>!AV>V974HtkEdub8&t}KXl4)Y zq1P*(p7z;aR(YNj#yo31MA}ZhlRti%jwClu9A=Sw8UKTPSti8bkBcD*nK%YgKs?=7%tHcQ-A7LNk`Yuair_f7>j`*H=(5<E4GC_-7ahASu5ZcTQh)P5xB%&lOk|Gh%CX_VfO|#r`oN#)%+Y^V z7WEUk!+)F6N)Hl4*(IWErQ?4Rno)r}=25+`sGB!hQczvVyYoV;#yr7zsR>gFLWA68 zLc^LW?MC^_OI+wg02aO+I{&gRicDC$=6j4}n9(;YDI;AbU_Z!p1uQ{MY&R8J%%mXw zW;`~D7b&C^0^*NePFuvu+D4S(2kCL|YKbk*;hdUG`;aQvx&vuD%YbJ4#l*zajQ z*ZvOU3~5FrbPsF>tej?)A?nadn~Gcy<@HwXsJ=Q({W@~=;J&|CBnfxl@s?$04%3~# z+p=E=-A10{XZt1>BfQdWkH0r-yqJ$tDr5M*U)l0qispf$9i7(t_7aem`5gPJ-JCAJ zD$7Yn^{;@zB7D;*=BCW})ggll-Zw6+qna&>^IWKg_C zR|i}3FE(?9nBAsYmalvfLM=WDD8)j@U7slG?(q8<201lbyGQ5F_X*Ix-9!8iRxBff zAil+(yOD7EvF`qOWB6QSeCjJOwyeVX2w+jve!c_-QL-hT6G5jv~Kk62szRKVT7+c zIn^g%^Ox5*qK&wUx3wCw^!9W-4P9w*jjB~M>C{AZ+FTOq=s;WBh}kT@iVkR;Zt31N zvvzP!k~=5*)cEl2%71|lJ;2_j46#OaN&QWVePOA|o(2;6>eFlF_ny!2yqrIHwl53w zwG}NcBhK4ov4y$cPAGt!Oux}zP+3E{1c0|k#lwOsoyo^ClIPVqE76t2g%JIyDO45D z0&Y6JM}h{&)B`R$3mBD?9lKXt9l}IzUl`h1)%SLs>i7RCb1-rq6p`ffotXJkk6$)d z@HwGW$jT>gsfCSITe(OO>33>P%SpzpwQap4r0sL+>AT3)zf=o*2t7y~{ip>EAqrPM z=w&edM^;65if2o0azc))8D0sKj#WY75@YmUKtH+3>GuI$#@V$TWQHR!&Flb#Y2t3; zg)HE^SVt@G{PU?R3eJx_{OcbZWH)5c0}5HXg7?R++sT|B0vkVoZD;7dW}DNxfxqIFg`T?~m2sFm#lEcxX?k)vYFs zmM#lYglAnC$%_rx$H4IO*k5c+(v)Nb;}V(aX{xPb(vM~uyl=2$e-RcyDYSQoHGRfiAyNsI9neTrL4&-~On%R=M(IE_-xZA@OTPlweu0DeY zIJ|K_@m3Sb{R#6KXmt44smHU`a@%>?9HG=POx93vHqEAN-c%4^We(^Qt zl+85p+G9c`rNT_a#aa%R4id%OrTpRiWLN~J==>qZkbGnTjLWxSGYQEpC%D(-41G#b zfb_ky!MOmk!Apf!o&GrgJ7_n1Q=JwqN3Y$Vrsrg9MEuFON zrg*hS!GTn_ip|bQ4S9D(t4nNVoivPO8G-8*TRZ3oSbFoTNd8;)N*R7=6+FodTBFA+$6$|qEZ`A@00_Q z`F$cs0yt91C{O)tXpI6THWJ>z>%Ze%sBp_E{Pf35i)p>1W}oUprgt)o<~);i$v!|51k2jnY8Hf&^u;3q} z=nG(PoRdZ3^cB?M$d>4P2DGzy0B%W=xYu`wjkOs^T3XBNPP;@43&`W`g1i*=zh~FMxNhk0_cYB@Gq>X#7QuGyo4a zP1~jE`FBR;VHoak+c_FmXIeOZTIgR55GX1V2G`}8dXJubT*_WUw&!gQtiRhYye)`9^%qp^ebi;Be6F)`N<1O))QpU}(8?Gw1Z)JyDk^y_Uz?BW6;+W{wPjn%Kn z@ih2(&QS{6Fxd!)ULM?FXr{#-QCxGWT2#y0jZ;FS{wT!-kfl|d&HQn?;N%kt0A$4S9j(#)PkjX*-a&O)cW4x6DgZ>bq1#)$ z80oi_Pbds}czy1Jg{HBmv8e+1;{)jDOs=0xCnNQu+#9E&@XRysGVb#0Xn-K;RF4!M z5u3roX>v(E9ZfKFz*9ud`UWu7onCDPGc9~!6?U4qLRcdly$rfr(I_?@BWTiU1g?2V z7Z&2d@MlEPxI!zJ6>I6dvhPp>pWw%nAzP%(t)pui_n`bBKzb#Hs_EwmmW%aj@Q9G4 z*L&SI(RwpPOeys`Qf5X2A0IzB?Wr++Raq;>YEX82^!>3DbIGD^`r&LxfkYi&Qp1-`$ZS{yRAeF81H776TbK`T%cu)f132 znIdmOLzJr1i`9PmHEkl)#B{+LbAn!mX;Hm?Z^stR(u|q8YSG2!Lc}!N+WN}#0Gp}& zl84cW&K94wX$zIuTqlHcN*p*ty|Lp+)pB|HE`X)u$|}6pV`tazt4X1nVZ&xAGnnKC zXwUi%7I7hBO-+g`bj0>>*0|Z*B4Xsuz^u4URmv=CV}G?$GB96QhmcM|Pno_ezS=#c zw=AvCXSbBOUBwo``{kA3FwiCeI0~WyeSrGmM}C8KAcMkn7oCIo7;$)i&)TNEkQ;&R zUBBFbD~+5}0^sF8FlT1Uouuy2gny0Ln-2~ZWdup_{*2O3@-*(mwRIH^UwK~NgyQ`o z8tlm7>BeMdNc(lqY3d6poz z#{AZKb=DFvM6aF4ZN(AAGDXd?r1ZM|J?vLPoNg)T_zh2dK?~PdFY?@iquq*gcB+d1 zIx$hWQ0>{7;=xf%Y18RV|6USFCuWY=e6Rg$_V1-yHL=g=Oh}^P zeZNK(m2#lC0&AA_42VXs8Gxdvm+ig5fNP|?Zf{61<)eyZ+-%{38IOf`)wk zcHFJ4mH_`FO_)R*jW_G?c>+ZHtaHU){CpZoaf{v+%`2t}$4}*r@HNf3KIitACT=h`fna`>NJ*D?9O{ zbT>}4zGd0w3Al=Z)iUP+o9Vw@ zz1EMQ8qKG<0CAm#38S?a=o)`Ld!NkdXj)5HJD<`!{54#^-(YoT=e!VB z_T6IJNb%Wr31%=cD(mF?bK9ZA)3W_KNxe1ix6>HwOX{h|OJnYXkl3pOjD4tmSx05W zK0>YB*|q+g*COn9QpZ5{T2Aqrgf4q&vo`a^NoY!%o8gtBs3xL=AUJq8@hw4#ubd;YC>~|arb!PI$K(3`b(SO=?pHbs0Xc2ihIl|#n>h*$8 z6vdd!=$#x0H=3_xUDJhSiHX=<#ec78U+^VQIt!%p(}jeSth7|$rn1L09!&)A(iJx= zXwNwxPITfP?X+C6bpHf-2~53+x0Bc&fe_!U;U@_y^7FB3FdDhuZg+Tfj#uR!Z^rp! zM#+fSs=(CJqM?*zpih)brdHVK?d2|q9cYxVz+C}u)~KWM{$99W{4Wm$Dgl>Jaz!j- z2;#IWGJ&HPPB~a5azRB_$@DxNrztSE!VeDkg=6(J*K{I5n})WEXwpA`H`OR@{XB?x z>h)2+fPGt?(A)Ig2+^IH6}zBhxuxINJsw3Cj{`Ri-|H>KS0_778?a{$zix42R_Zk9 zTWXGo)|OG$;B+Z`U{O}BuPxhyn_A#d0-@Hs#nE?mn*N2B?ZP_S^6Zg$=KZf&6tCw% zgrap^2gj|$EhwYMh&4qL#a1!;#{2u9Yu2^!&TVv5561q}bv#AlQUnaTM$u{SxaNo! zJOgG!%sOvEzWOkhAdFd)zP2)Mgf;?u-vcVNdE5G{@6(^&i$W!puOOhW{5shtPi-9J zD#3Q-uKQS+Pk7_}Irm+Vc&Ezm-8JWqacG5D+fn*BXMKb-Vl(!(&MW;ufw>&CF;`Q>fqmVhy^?*OuNq*^;LwkeC}?Vx*BVr|-_KKr}E9bRz4u7*L#xL}ZN zzP3>7A3V|{yawN2R#~i}BHH!XluB`I;ye&#Y!zz#OwT;%=<$*Ur%OW@p|@iv$nIi( zHIKXP1pWJS+Wvkw4o0G71658B$LNRNIzGRT&nr5@NpA#(ieku%!I?s$!>W?r`mpxG z57jiu(az(l!uqn|)W6YSzgXuB0*2X9ywC`_JdQskJpc4!v2)>SbnOTP`D}S}z2DhD z)a|$5Xgb=PvKiwIj*TIKPz?~eYOE4mB4FG5ryTxrASuZHxu zbecYet^C(t#B|5VggNNR1wQ87CjlF|%U`S`x}5K>oTFYaX9>rlGx+|CIQ~Ydj*c(_ zOU}ZtygUz=t}A)nHWXUO7c&B(AkS7G#n@M~Prdxqe;7if&4w%9s0b-_z0apADr_>9 zfc*?-^Eg%7e1Ly+UeZ?fNY?Q$(aAk4;~EfhBvP}A{mL@JP_l~{t_)V~r44d%Sb3t;u&m)n)ganU;sEIA&ri`s|g6RG343^zdI(v-v4#Ei!dW7%(n^4SN%)1sYx zUsa0jQM?hP{U&})1FrM_<#)=$7utIAz=A{dfon}U?<26Iy55^!$%En|RFT5>9je^3 zKk7D1x2k5I{o%7@<1P7ZSTuQApo}gnmylXd4=tTh7-at~YMDC|Ck}o7h5CR8Bs5Rp zCvN?g(VYFsuCesl`*SHzU-%Q$QzY)U^s~!?!4vE8YwK4Q32om>ow1*fYh_fM?F7mV z(M2wU(j(~DdO1}DhNKl0?UfU5y3*XJkIM%!`y1h9PdK(pUBCRdPNa$*9UJ9>gq~wZnC)ek+ zQIhMdb#fqdhcsdW8oH|;qi2@MmT!r!x3(XgbYKm+erl~0Gm(SwoWtq>G}Y)P?fg0j z`?_YSq1kcn=L`|Mo1IPj&8HY_W`50dgwQ1mClMH~im^zDK9lk+WtajYs8f8Sl3ItQ z3zCOL(=J^3;c90yORB+Gb?!Ex+2NQEHb9{KCZeAItF;S=Gnj;UFwU;_pt`?mR_BVU z;E3SYAhnLZpB(roZyn!Rc_^odKsWK|rY$kN~B26K}+C7>`NK6&fWj{*X-zt2J6+%*3s zG2Ro5wT;pQMTJ`K$>*tAKti4Ko8moC0zrv|xBvd>nCTkr8qt9?Q9K5!p!MIlDzEcLtF@q1I9|4^X8XSE!+NtT?g!NAKjtIstsXy}I&aGzJ|7Vdeu;L) zoy81rP#V*%XYJt-GV=Rz6}QY(D9HAU^ZevKgIMgyNZ{2sFJn+@;Dq3ahq~k4kEUwV zzG&O4rFi9igb$4hHUHNEH4Eas!-AVs7kwn*%`l`1n@x~AD`GDyI8L|*aT-40da3EU zyCk==Oc5PYfM|H*c#Oold%!Xx6WT8lvA-)Mk+b2GEaA$+xWlV?`5w-e#TWd14)ye9 zg%>=}g4`JFBwH=LimpjMm$<{QtSZ;G`~!*{Y5emg4M9@Ux7t>RJ_TSAUV@6)L%u-D z1N%_8r1evC_*`jKc=W04PU(-j>&{IscPT<%Y}egq@;-H&-_UKLv#Jw;S3&C}pRN58 zazJbP>L30CikZNvn{{Jb>g0ayv~>Zm*yPc}{gYF{F9{K)LLvnVR%|XqVcVZgB=5=) z{6P%IrNn$a`Xr~fE11sPrzwewEpT#i0mvG~! zCcwes0ww1?Rub@(QVsdVOLQ-ze$IT8W$;CadH!T>tH=z97!+k*pXw39Y4qf*3CIoNJLdnL%+#e6kGOVOngk(ooIO)Q_;#>i0e)n6;_ z0a1Oj3S7yZ_lwgndi}EPuf9BKYg{wm^Q}`lT~ex%UQRHyGJvSAk4G>l)B=ox-=8Ir zM1yXO+pNMCa$+KHz8C@N9bN4h3#JcrYbq<4@y@r++rH>&FNU?$5cftfyW~c92pn+% zOdsVN&G7K*)w@SapswQ>9*x@Vu^`(KHC%XtwFd9TCtLm5pU}OZMx5%Tb6vmRk?J$G zG!o({<;7w+0J;0(^f%|k&8^|5wA1XsbreX+^GrpM$Ax*W&4#OMjikR>GS2>D3MN02yaOKpv}IZDDOHE^L|3L z-Rt?T1FZUlXX9f`QAd!R?o-hWr_0V0T=5{aN#0||hqd6BZ|Ye)YENYMXGmHvqoMYS zl37YESA}RfyQz*!*LRH_+g6OCuG+8y28a8t?xh(>y4!^x{J-BO-;3T*PcL@-J z1a}D@+^sh`-|5p&_qpkd|B`yBU0c?kYpyxoF_-F1ede%`PmSlCnHXB3TaSlu4{9ab z%9#LPO`0+>WHt^zpV=irM~H{ zN!DzrBr>=p9-92HY_)W7;BI?7*#sb`kF~G> zPS(>7U-cITnyu&S>&cQ#R*O#1n|?n~m>I$O{JyJD63`YVIOEzgN-&rR>cGtC|D`VP zK8%nF>q=6+{SnbB{9~b0pkU+f{#=s`82((}9Wq#cuL|Rr{F&Ut@PUL&#O`%@`A9`cEm7@5MZ#~QZ zuF|&FGB+B`#^-1ahElc#i*V588U$66s86IdQt`-cFDbYJasS!TjRsB+_*5 zn>aI-(ZOt(!Nz_DqwfrS4pHBX2p+@JaxJ6P?IaYTMVICtJajq>V<%D58ijC<6dT2kCm{auB453rF8eZ%rV!u zV#`;WhI)Th{9cFHqaa^S#{ifJcMQ5l87dM`?e@Peup(8O$ok%Cc{pF+^i8uyTkLs> zFA}{@)0Vu9%%G~~8mHvrXaUT}1#LkvZu&1dGpTdbp9=|O>E5EefVwb{5y_>L!)9-R z*a1g7Pcxdd*(enDbhZV5dwPcWFf#xpS``XL*`@Q)@Y4MRX%@0?nR^ednTqUpL zG78_3TykxwhVQ*wz`OFJTbG%~+hy;PMenLN*@t(Vw;<7a&oj(!M_-oJjhtT{t98fM zwLgUX=KaQ`&QCH{8hn}-31^_gmF|Bh2WCvqgLv@#z8h;AwY2~CxIIi>PoKWJ*An%+ z;oEZbEouFO!`h+4cE448_akx7+j|bV{&=?VR$@`z!G4loF{%DIdlvymBL^rwvmyYX zRDX3fsI%3_;G(L^N5IxPy3;*#?yL)&ZLbDX=Z;@QU5#&YUxh(yuvxpO?w<6dI7D_4?{e`jURMqw}1 zkYf3xeC-L@>(bNmH=eUTNQW&OIYy=*cnjmc6u^rY^ja43UhEnTqV7^R7cQCPW?8I9 z{X2g9S&=!P(SpIQby{^6|*0xmx@3Ssqru`}XnAYBpHY)~AUl)rfNfxX<4v9_HEKj;ZRr>p7p_ugU|)8m!z{g%gX!^BegynB`)98~{w zVKuy+ABlG2KYn*IVubH75Y&2xzpFC&r07aBFKYxy3KSaHt36p0$t29rHDTNUGP=(6 zHZlZ3*xn!Ka>G(_4JED5uZw)CWY@JUet~&;v3u>%wp+71+0~O-0k>cM-={ zq_V_C>fAFev>lWgsBpZZtnA%)`D4)E{NI;`ax^+EzkC2c!ce?>RusI@+Z5CN<5BrF z=hOzLc&VN#P{dM|#{#svcE7y9=G{dq(>C+uBDKS0*KMBQgvmX?Z$ z|I5XD7yD#FBgZYWWYDg9MavYWw0E_k0Q-1f3X68H(>O9p?n1^n?>O%uqB1X0fBuPaB*yRFsAhFRHO9eW#~ngo__JUeX^~aZ!Y+?+CenZG=y@TN*Q>0z-sGb0gU^*i!A+e$BrMn=sEH| z3MLL7c%9E~L)$T45FP6hSSUcG8l7<5U%DDzHhbY*NVK~<@t$)?%8$I4>~jrgKCy%M zJNEu4SV=-g-O(SR(TctK)#u_Z{2r!yph8HLT+eBFCQ|1sVpZ%SMFq)v^is+$yiGdc zx}07`Z~U8IvYpDAq~d6SBaF&Na0Nt9F#Q z-XFuW0mpgXfUbA+6jLL?R~TP|+)0Pe+pIO82WM>pFnw-hgz6jBs0;#UFV!hU1E$14o7Pfj?tnv-bI`Rx1D;O8RO=gLwKt z>O#m#dJ^cs2q?@8FaN@c3;D3j+FLNc!H4asS@sJ|#(NeC(l1D+0JO8YZ`>HxmB;NS z$+?+O0?XNXHFOEr~#04Ov@}+_Pyia;j zlP^KW>5ZW21Y18~e#-0*E7;X%bg`(6A5H(LMXEE^b(wNhG`+9jv%X>O{|qfkKxVV3 zCr+vGGFO5)1Pfp3?29lWVo+aetgO;OelTr=9yA2p&Dx?aQ!X1U9e4f079a(jznK7D zE69LPAh%S^d5*9(bV`UNJa+B*c;mvr@$hdqSuAetvQJn zK>`)w#F-y}y1RzpOr~$*-nAn02DK6Mn;H>e_>C;4N|*%R63FDE{-d?6n89{Z4tZ!c zwn{gmk&dF@Q~v{?4UKmV=mp`CK4=6gyk+daiVl2u*oa=i+2;dcOCCp zB>aO9-^Bi$pjhxxHrQN;Y-Sybbn6p0%^E9KAUE&B_t_HA&$ z2M69)b>;4Eu=4QRUM zs=$p?Xt3Z?*D%^wB2i~gdkt+?FBkk|Hv0~85slVcyNA0OOT$AB`z08r+9_#JSSoWg z6qkV+@CD;$6KRi~0}mq~;{@-q$-o(&W;`2BOQ9$GeE#!AvQBFB{To8_?Qv{L6=Z`8D1gF3e`SUtr z9Efu1Ss?cgS#M=;OeA55l2~BWa&MM`u3?o5v^jTg>ZtFNyBHt4C&KZ6j6S8Da7&!K z>A1X!dtq_0(YJ8$<$tT1a*qLPjp7F7MOXeWqbY>>q$F*_H!d<$4s?o)3ph#xuzT1#cNqn%kGTD=JR*n+OLBsH7XK_A2n9sX(2zT)}S@x%M;5?Zn;m%x-&9V3*M+a zN#fRleKJ!X7*u?)`xJps zYEw!e^e-+SSLDkm_r!SfgF$z1{GPr%ZC%T$e5po27%-ECP!rTHHAe#&SSypjn>`!> zavTAMjwq4 z^^KGtrSgxz{6yIQlyto80E{$19l3n(5=TDFuu`hbSae#V#8DSOiD(Z6fcFIO*03wJ z1X<#PpVee@|15+AMyk4V!oA6596sz;74>7BQ#V)j$*8j_a3- z_8Y_<2~+(5S*^B%BKF}xYH7sMv$86SKYdqy#V3l7zKK19ca_L;n4j%%oOL0 z!;9(SHpZuDtl7rwr{!s#_tQf4H~-2Z+bTiFdTk%;lc#OQGXOhVr~qRq$*zBoGU&r? zE+0i;lNy`4qU+;78@{Q?o-qmOkjS~4)*Kl2a# z27F}G@87uQRV4mt%D~(mZ$7YjG37o%36Q4}`l$f*)~uERNb&`W`~UqT*a*~nCOOph zVI$8KA4TRbm?c4|o-eM)fh3tmJq*ZU{@ak#n%Trncb%Kj{yp8jYrF(gco;Z?uRzWd z;GeGnm_YvH+nF`82mv*{9RA1qtAk%OagY90^+Clb|7$gc{KgfyuLuC=xT~?gTh#=V z9*`)Bfvb@n1`|#Qay4KMR+20LSB|__j0QML3KXdnNdEu)6=IefYfxvm!TU2*fJM}w zi_u1RT+i?sKan!SdkMI<8t^%UpI18mXe!}S1}k$LBg?_6%jbxXhUOVWd5@b?Kzf%* zCj}|^U;IS?H~;^@fp{?f1$LKdjoJcj>(!)2zzXF=15xt<3`I`7Kw1M3V6^i7u$SYx zJ~Uwcv9P+p!?}pwlm#~@pvsf! z#F+&J<9~4fXNF06m=`!krS#;s%}${;e)5U=+fI$W8Iu!AAeAjZ1D5dQfM1K|d13SX z)5i|$KoI?}6=SFe0m&Z{@M7D0ihr3Tan+m_*%57uT)BA8t<-ZmG5wn=jDP6S)T%%j zC?LVLNZ(lt18FxRZtjDM7{Z~f!HseGVi7RBf%$B{izDiUQu%iI^nt}j*#{L~{hzlo z*T)HI(S@8{^Uj}gxYt+ocDE3)7ZrNqgK6Rd;nJ^3X%4s!xU6S{`(bd`hYQz}n1I#K z&HuBQN8s&W(pCh$7-rRDh6`+X)ZqWO3l1CdRj2%w-(~;a`{cgm#PZTg?5aH?JKMXO zc3?&9`blBFYsimgImiX%+w^sK>F5^$Fk$zP$+UiSM;2w{>Nw-bZJ5Z=HSy` zF!y41LD@3^rf|?s*JCnW=VQVb6DGQUuCf8r9MS8;LA_rwHc_uRzfl-F)_;J1+r8Nw z2<~PDa@S2n(ZC=nh%jLtC{zk4HU#4cjxhk*bf?Ud43Ny#fgDixmZZOJ<1Rqi-~DqT z%oJGwMJ1x+iV)bQF6vpcmtSpuk+EXwkyBwV9<&(a#KcdjrGM}gp6E(V`fgP{iUT~M zCJh{GGss|&@DtNKYSMQf3c%vkDtHltbcR8e`5Qiv%#dKypSpYb6u3MoqEleuBY?cw z!+&G!GZ1AnAB!b*P+fS#I%o}1Lb`i%K)BhncmhA$;IaWs z1{uHmk#rmeU-&;*zlZHe`E(`(#?hhtnvji~%m-NJ|I~+24xfYee~q;|(CC)z{D;H1 z8-bsp_4HrxV9}G9(d|fc-9#XLaR7k_YzxEBW)j?gIXLiUK(1$mmpU!ZomBsiGw=V$ zsQRu1`v-F7APL7S3p7&8)w7k^{HEL@bi~NNiu(u`TIb=Q|N90xfN>8BLG!#xhUG8J zGg7|&Z}BoF0aSI?>9i_O{&~m)aCX5i4av4Xbd{!KP@@6{fzpiMU=d)vvGM>B1#mBq za+o7BgoIp9wnSj|qN4rsO#lIA7chA*YV989f~!TP3HB!(zM;vjQ0>q@#^+GSj}$Nj zERHnMi4)OqpYv=cIUs)~km*4@3-p)dFI$n2*sQ^vg628RA+IOOtknQMLtI05{SpTxIJq;nf_VISkEFPI%g0OzPC;IJl)ZdQTqr4>Ab%KzUv z6!;(hy;GHwQlmU+k^9eWC;~d#uT@sHS1`(;?LqBc7I-?#7Zwu8#dAZVs4S*_F)TN< zixp2S&$WyH3iWj>kYIwN`&+M%%g)t(BiCkn%#QcsLcdnqk~dzj{Y)F2h` zSh5GyZ!=duB4qc7B#0C70=qDR1N}rqA7-o>)0qu-^_(P=&wfkZR*w9eRna0_ec)r1 zP@WY8fU$#55*{YLa9(ZYqOW|q9+H{YfyI0=N?1jcu;;2|8c1511%q<_>?0#K?~LzM1=?wWV$pSMrNH z7$9Dg*eYltL~`MB4_7*GLULCr=BpcGrGie8k_GragN!%d{r96g3vflR4> zz8YF~GYwJyEaS6o_IH@{zXBV`##-|Iuh$}&_Yy95#%5esdVg0B*0WWJHhq5&P7swG zp^e}}Ubz^46?(1ycqi3;Mo$3b?QBTFk!J&8`Bfmz;}7=FcF1h^;@M#h+XZEtEeSuK~$;&-Z*kCBbh{J?NOot=L{I z;mW2gIKceqEm9i*r4-qb=si#(iR%z`;g-G{RF%kQHHJP2Bff&!y;##dRcuzM6k~zz z550@IB>8Q#76Vk?$cY@rW_KwC6j_w&8-N}Nkq(*?foZ!eQWLs3uNtbfK7P4W5CaxM zVK8IAJfEF8S%J7ZpzkXe(}@w^g~t@Cr6oGF)?bht?gFpc*m8*1jWO>5(R-Iv8&s_V zR59rL#ZOEEPmVV)rL7mcsh%fswltfQOjP&&x0Mm>QdO!rN*;V0`%7FXVLU5iLT9Qz zokVRJ>k2SnAus(g;NxG7I*`7{nm-xRJZf!3Z69h&h8*jkRkkYuGe04%r#!MqiPfo#^W(#prkYZfw~(E!PYlzf;*J;+qpJ^$e~nCB}jZN!hZ zb=to9G3IsxLJ*5u6dM~&8GIRkJAVaiU`M7hFev3C4ahWhN^p3_2@IQQe9X55F=5PG z9fYOP&-qJz8Q*OAcM+Md5mX@uHar8=-9vmLhmI+AF_!5(#kV@ejEA^W>l%k8DP*oC zQ1Rr~n?dKImz5YuKnP7M^($S}S@P?e8y#HH0F#PFy$}wa>{YDHlh9}I^rK1|s3Hnvi9oxoO+Ta8?0Mbw?>fCL!Z>(qsno5nfO3++n;=KMH8s{ zVv0QwfD{Bv6y3Pzbl~~cQ+hR&GjcJwC#%9ON@-^i3ak?Hkz><~=%fyU5_t)WmZKjLN^_ z?njApq($mJ%P*3xtVWWH16PtM?<~0B!E~W|IJC=!!wlhAJR7Py{NcqumUX6>mkj}H z!V01@`nSyte6MuepF$}2$tTY}rgC87+&-{gExDd-JmKLZD8|CJir;vK(>ye+&@%X^ zj7i_xgUN7l&(F&9R9B`g>GS&az+Y6LmJR`-3o6WFarSSm!cm+l2#8tUez@)lq#Oazao)ENn5iwy*p|7VAoUVa~s^wU3_d zW+HsfOb&wnd_vRTe{`~_^ist@p@^tPwf)>w62VMclERW!6U$$)t(?=Fa-D^HrJNz2xmFbf?2&@2JEvnrGb8`1aZ}|5HyKUZCql zKl;lu`iQy9ff6yH+kqU4pO5uU_jCBW68@GpOI5~t!iUA(=pXn6$AL92Puj#4nI-@%p6Xjd2cjc3XVs-_lBO7_9cKQA_s0 zb~dOf(k|#k#Po4N-k{;R-cCNXAw&S<0ywMWEgIJ3Bxp%#Ta|O(`#lk!gs$%idKb_= zOq;-6VAFE+fzNF3<9OWau{mM~f`ywmB2Df{>R2z50&ay}%nvD+#;9DZ7tx+9PHvrE z&*Cf+RkB9h^!YJ8ydSqA^K%1*$ckC0KN61Z&ddamHW9%E@W)SCyBi|p)FshWB*!Hu(|#DJe{nFOSed>`DT)I)Xx&%qKQlqUnem3R9? zCr8mpp}B49bKg5%=MTNjfyOQ+&!I@6p)AuHtwbuNj`Cosci`10Z=LbWGCa^t4s21@ zCrly4EMjcEKCkxW-;a`kU+J=LhIwt>u9&-rps6&ti2IyRWS1*!*|Xc)ziKkyF z_<$hWdf-j(cT>JA0>^WBbVt*<$F~l3c4nRA_=LWPi9Hk8d3RE?SNZ;T)XVHMu_TKO z*$1oBRTpO_M*^pYA4Unb2<`T>$+&G+E=A(o#7nN5bI^2|BWn9W!4E=VEsvbyRd24N z(mU%VU)a8?KI~vzJS%mw${d`FZt#H|JUVPXWhnQ2irh?&m2K(y>G*Q6OpWzhv+%c% zcDk(!Fm4CuZAEiwriS0C!P>EykJ zCu^FiCwJY;Mtq`8u-L)0${~jt zX#^+)mv1GJSDfMnBwv)HsQBMheBCTt&E!%!ZQ)oVorW;#5M&rY7>C`)ZNfq0zlMKe zM5_k}lH@2E{6p3x(?B(PVX2=zy_+dU;Qzbw`_m6f!~c@2#mQk`Ob#|gW@BHDdB#dk zlW~-XIhn_tzmXK=FvM#P>lt+X+_aFDALMs*)nAD`cdfq!Recyu>?u=>w48hR>?EXyGzIL#;Y)^d(m7pq_^E2UMYCHN zU!A1mdb8>;*}BfL3%ocLacOsh8Q((7dS0^8waz(a!c&y`*Z^x_Fx;(0B?Gn|s`VHH>KU4TiYRN9Dx5;ovc9gNp`Q&Q9 zrJ#vihf$uRrg9D>xU^@LDcVDQo z2cL43>v(s2(SU8xI-P!;eEbob3ar85P#&r`dgeOtbR-nk3w?xMSyi7T!?)9JAX2|D z9Ub|hIP@bi$e_2U99E!?knhw=<|q`{QeV@x?&ztf>s!%Fq&!AA5RrG^p4pxE)&&`f z&(oGLd)ILBYJB~M`&^MGxbZP%H-qvu0VX*f=b~S#+$)rtRMg0KxY%^Pfh+Ri;r`o6 z+b^x(h^w>;RQO*LxCi8m68vaDILQjbrvJU zkK|q>Y4lYq(tKYyiYfQht7!AMp4PEWyEe5Q*-q=|-9#CjKdUYn{NmbUer#}^PTWNS zE!v5Ed@7XW>Sy=vtW$*mk9x?4;!+++ia3i!Kt78D>R0b=x*1T7CZif0LZ*&6uF$b; z`zq_bYQ%od3I0iM_zHu|3&zWLAru!^9yH${x6S4MUUG%LT}jH!26{Ur6s=NZm@UBzjABHKddaSWFB#N=6zd@`J!2=}Ryx}O3x za4JHvD-m9~0EWX9k>5%;iS?-)vHP+Lwu8QGcSU{a0qx0tw=-a8A8Vvt62$vd+MI*p zV~>cUh$&Q@wv*1f6TF5yCY6+miJXX8g_hXIT}l3h+i;;O+OqhUP{&WFt31C1I*5Fa zQ4@l;qpFB30^{U1gBWBWx@u`xlS{3RINTe$&FC8umQeLh6p9d3SQAYY#WH$t50@|( zrG9=91%_wU`$s}z{6;Cau!YZeDAk9aVmP6g#8^M+dQh`}W=ChAOjJF}pT^-q|27!0 zJ{cdMa9}Y;rQjgH17l*@TEucWYo%EU6A}_J>OFXVhqNw;RFY&mIuM#{ho*iC>ZBFJ zEFx9g{$@m!7>P^Bvph@Zr4Xeg-}}XhhgqWi6!WbYDXLRdm#iLyn#T0w^l4tlW8d2A zt29jcepmzz^_YwGM+gx=C&RVc@mhT79`S<35(ViaPT@&kRSHzj#wVrof?Pc064LIa`=H-d zVB7Xb33J@NpSJHUbgN!xe_xNtUqMTiaSNlMy+$&`<$iGAFp%}6S$+F-=BwNp+#TWXGm9w>M9{7-BbZCrE5JH34lR(ymeiufZDF;GFq(5<``r}UJdrJS} zpW9C#gx91s6-Q2om_~^|$!o&dWv*~pn!q{#^-C-+_|?n6_7~?RUMOvNy%XVB5FUz{ zx<{+giy*k)8Tg47FF$H6pP`p>365Br{yAI*qqm}^n>VG{k=EEfxy+t@c3LTSLF?jM z4v;RYFHL0LqCjEE{jqkpnJL7StQdDDsDdF^}Q&lCYfGR40&ADxHwDWmdkj%OBc>QBmC43-cT0sPWoT)W2Muq z%GJ@!D5Nud)%B(kf^JIM&BWDOEXn(v8oC}BB^}s~43fFR9^13ZW3qk>q9*u@0!|Ld zko#DbrEg3)k)Y$7nZMwpI(zTHDoI`O`JNDcxe8}1$?`{F_}e#O3oFcFYChQEYuZUnZ|svC|s@k6edU5r&xp_b7Z;;{{+8ej{bl< z|Fdr8gmJTW#-yP6SANQ@?Rj4-QZ&`?l{EEWPENh(m7PZ>I>%5V=P6Ccp2~#4< zQ&E{ZR9{`)a2UfVGwt8*_5S5(Zi&LPPr82tozOlGgBdE2+0Coe#spP%OnS_7B{KSI zbz5kN3l|@%O9*Ci(sGEuZN=2UpE*eFxOB_9fB*S|v}e_Xna;qVx8_P;Lk@=7VY?-H z_J%<*TYXR4iR8Nm?U+ur37ypjyBzL&LY0}K_39UfpCc-zR_{L_XAcU7a ziVk5S76?0WQn=65cb0;D!H13t~GLv9hlJeWZiCUZT zvp*&NL%Mcp1@gl(MtdRXl8kw(?(^4JVWuQfvQdg&G&#=AJ#;e@3e_nmr@B6eaV4G_ zUlE|?j&HKt+pRT?;&)9)(}SE? zO1)kENS;lt$oK%AEN0fCC&(6;-JFOYCE3Gptl&js;GRv>mfCU2)3eCWl#Q) ztQxIVr4u=H3b(5C-F{>|?C$tA_KYgEaRy&y4n7>(`yLbz|Cb;NYF^XCfo}pZoWE#7 zZJZnsc^QGG*QBoE`XTkbHeOuZKf47+7uVvZdnOfWFkgzu}GLjgSx2ahEJ&zsC*40~h?qrxC=wA6J@Vwl2fJ`h8 z z*m!pxQoC-qhJ8!=H^mQEC=9j68nVpMiIU0*!f;=>QB6naEBAn@N?2g*uE=pYVO<+f z7FVkfoRlltvHYBZ^x8IVfr8o^>NaWEieprpn>|2-v*tQ&l9PlZ{^nsNNB)!)u;U2s zR?HaeAjc;7OyPOI%uVA+`0QquM7-;~8^cj3&)whR&hrH}Ii$pE6cmfBs=dwXe)(&+SLi?@9KY{Vj;`CM?V_2d5S93@%7vD9{-!r`E)o%x zNn>bZRpiIZ`#sa_3}B(|NDSV>&_Ie15^TNKFD`HdtSW91Rvx%!lD9q35HGc}&a?m$f+&BoUMm2h^o92?p? z6@X1m0&IAX;*%97`ynM7KMr&ii%afIW>+%qjK@Nuorb7Dv1Y() zrGqw+blrb-WlqbU;$a%W6sY@+zRyM*i-Y?*Zb)HC9qwCjZ(p@A@tA+S_{NqCT&JiP z%Bj7fZCGr()#29LSA5Y2d7aBV& zVZ&eC(y|+xX$^gt-m{%1T$-Q9njQl&QUdPdm04CC;nI-p`~ay7$o9 zY3+@j-{zMafj?c`aLGdEw4Tyd^KC`H6(imc-j@-S(neBY_?be-AK!BdwA}72h07W{ zUBaN*HeDB4mx-qrOe5uoZE7m0-!MjSiW=07<=jjIT29^Y|4{KzXM39h#_tNq-ERp# zYSk+$O~xc6O1guH3SNI))hpFgcG#aky~N2T=+j2VUN>vkhgRO_tdsuacx!+0J~?}h z<4{1pF|J5z<(oKqY^;&LutE-1?a$MW-68VqyKy15qc8KHkBEmwZLTI`xV|W%<)z&S z;DDfq>aW~)$edXmfF2c_*Ratj=5<-c+akRbqQQ(zMJSO(LRUZuoz*?g?8{Kl3s6| zYeEc4tX3*htO$imCH!&ZcAlVk35Y0yq|e<`a>!$(yEOgJw^x*Ux>iTA^0Q(m?P>Ns zcGQpp^s7)d%6an3fG=8!;nb2 z-ypoDgVn^wNGqGUURG;8lA}rZUi5E_CkSW^B+-PEV)${OG14s7gD+)?sn#z%r8@7! zL_5J5_PeLxGlmLgXA9sH+1hH3?7Y`ckmbtv#TK?%xT=Pc?%ygb*l=?mnbbEB_hE9uN zha5FR1t#9WdJ4zZL2#VxDqig~wmU6Cge=vmkK9SaD7W(Q8!kqKRT_V$nTVKLa@gIO z&LU3w#I*YRYv+5ad~fDm8c2Vb1E;>7Mbweg;y&nPRx4d9sv5MXhaAgYhjNQgrFSqm zlV=g$Bm9VcL%T|U+=@kk5e3RDMDEw(YoRG?*d_V>ay@TzsHPLiaW3!v&yrxf%!|P9 z!p`~NB&ioMNXDHPqn5hzy%xt)mql&j-zVP-JMov0Q({Mz-Gl_SbZ2O7nK+D8-Xmvo ze;N>fv)um9rOZ>-)75iie}#iD-BS!sjm)*olf^D>z6`fC+1_;|ESquQ5apztE$rd5 zwcoB}%Lyyc1j|vTQtI;$o(Vo|zEM$~2w7sVfmE0ILL^nCipT|(gyQZju=EYSgBlHZx+aB(B<(HdABqkj>t`C#4J z=j12Fy2_5RRZLnJ0>dI2SA$8Azt#lB91-;_?aV+UOEm*NMd*=-pQa&Z!@@HARsAvk z*T-WC(h;#daa~5bF(bSjLymp6L(yvS4HwaON=8?1UU3l~SXFC>a+DIDu}xmE6aqY& ztQX6ysX{F0(J>JYbq|sFGi#;HFiAnrQL#t)d!a|#+-~<{%$Kvr+(hH7*+@Z8DY1jS zXZE`|2|6-KU}`*S!b(WSnQUi7al!HDv|)r+I1I^}&95eTvBN)%*BQJf@jE8{9ZT2N zSo8^unz|Zo4u0^ejAK`xE<_#)SL3{HV?DWXv$v7z+#EA*Kt|I$zxiV zy+^D{^XYR%!cu2iqfi@wzCZA;6E_`jbjh{xr1M8fzIn$-{1I_5(B5xsl@7g4Hz-#zKdnR;)!Y9m5Mltjy-mp^ikL*a2r}$ zDUkTtTJ1lt2I1pyS0&Qk)y)+K@spVC^-E~A=UBRgW3Pqr{JWQ06^16I_31JB=4#@PC<~LbBx_+Z4j~*E$ z!Y=-^C;!E)Ws={*He+b7A}iGA1OHNZz7rbgXI1)eP@ES)dfmn-$d+6$UP97+dpBgn zIqR`Cz;^9zIx}xpxx(t9NeKC`KRk>c#X}=Me^EoSAkK*k$n5#B-?F7V98P<3)GoF~ z!RM)I0U|D}(LI_>=5pyO>#<)m;h`>EJ7N3_{8$kwcY!Z_1-RoB)eqh;X{*Pmvrq=? z-!#zr&;$R1nlDkL034q=|H1B>n{ma|x=beTmca4ik+<4`KK3=AWHiS;3o&`rVw?9> z)HiW8J?DLJ1aka1wjc=#!p?uuG#Rm=clF)Fj%kMx?6N2gT#&^Y{rliv3cmGNpA+Ot zvIET@j3kP30Yt(zIH(2)`JCC(Rd|j`S%JU(o!)qwfS^uiri8rKtc-PF-d8^}b`(5+ zMM|M*1TV7B9dF{N2FfO2HJ~nJLxDHOri%b^BNP3H1d`>iSp#?AL zUd8Ksgp}GhPd!Cq^iH}H>kTK@>(!zNUnCo&${o*_9I6rC7ea|!8xg$6WUcTLwku_` zZ4}tzd2A?E@*>D_Y?isAx#8tO7a9-uUEioag>f5HtWucgI)C|dwcqk8XVqgM>dHlg zH%_um3;*GpxWwnzd%Gkg50$54jzG^QiHFwqU2Sh(0RC+myY`V~q;P*fMD3EC#A-hD z>g$yd;5w6Nd-a2`#=P+NT_*5h_B+P+7?)htSFdpe3oE^~GZm2J`Z5fAI0o z-`OtE?w902j&lHLnymvBCHL`CR4do1lWhCC=b=@_A)kX{v4s~DCA44lvvwt_XO>P= z28q;Oj12*`T2mt5x1RAk44S2J!_#I_`D9Xo^WlEc_P+w z3<0>ljBn80mz;Z<*T}5|O-2uaMmm0p=&>AY9K3$;QtDX3B-IrW?J#xn$S9k*^_X{$ zuO)R_-{p#oue6=`t*Wu+><@j^(5WyKxq)l(eMRpgTssqPvBzFO;7o@vODj=uJ1<#y zx2Ad9IYj*_T%fM>lELV&!UIMj@djd0OkuLtDJ{+bc3d#?cm{L?+-re&gVLDsM{K3$ z{`}U74|URr0eTZ*+1wn+|GRO27+Llll(wk{;`MU}b_pg|X6KukX`_~;|l3$!*f=qq2rjN!C z7|=LH!f*GuWwob|f%`|4FrS+PX1Wnk$P($U>i(^^mwJ-Ybz+KEe7Tk6`$ZSmZce?Esjaj(`V}&+p1}?>8mq^fUw;K^}cAdwRDoN^a3M z*LMjFSEiShPi`w?n=maX7UZ_N_ThXQl`FU^z&w`a_bEnPAQ{zG3e6cs-#URg zr(nd#mk|NdKH?lV1akx;)BV7XB0&bfmF&LBPq1w;g!*T(87W$PF_q<4-lNv%o&9<$ zUolluDVTCCHy;NY@CO-F_zoZh!F{tz1}B^Pxw-OJUcOS6zGGdM78V(P{Bo+*Cav4? zw1+)kw0%^<)la^Fv=OkoHc5fL^SfZTe#zcZrE0;Sz$fL?txcmDJskbInLnlMBMYD9 zkEfU0(+@z~;3+0mDw97<61#zG%tQgn^>+%zDF&Vu9q~GqLxU<8A|Y4qP2n7bd!xgXvA$gYRMRB79eg+VEpL_J;T_U^ep)fKvg8hI;g(xhD zDT!if`@rm@?SaYitNV0`KXB{XX>YC^E-0;O_b@#tJZl4Es~`^A(8dB?`9qupw?tCy z3lPws5q7#3ev?DoEbvS!3l^rk9CTTH^`D#vI^geo&1O;b8LIqwi2k9DE9Vwny*KP$ zNet(PTN9?9&nmWXdtg42An9{cmxE4|c$vx%8M>cQd7!#jy32Ih^dwKOKC0Gdp-#*O zGgsQ&lqo;hoF-nQk;G7eor?EDB#!W!9yTxGG5&dzD)p9}D14+1(R8rstKSTry5~fR zeB9t0J0RJ#$qtJAE*>ED5H5V80r2|&A*OM^uc+hZghMHVwOPqZ&~=;BGkcbiCIb$B z6e&IE4JhJOr10g+o7a@R3LLT~u<{1X%Pgo#%*hPm@DeecelZh}-Wp&vzXEiTQf?Ly z>OwmNdYBG}<-hKlww#CT29Gz-HT-irpwwj!z9dJ)5@@i4N3Y$RT7F>3zashl zOO7abNA!+)ru>D&L9wq~=rs!w@RYi~fewQJJEUVuz~$QDVUOJ7u=vvX!;;mWfrrYK zVr;SaY9t~&=9-&fu6b<2&=(Ym-+&aqRQSd{a)U)->R1XbTrov8pS!GD`*2DpQas^ap9PF^$Iiv$)Bk}ZspLlpb{ zI8`t`o{gI&$6hQ#B~hFge%VLq$+Ou=!Tbpr6+x|MNYtHB+;FCZvLy zx<5oNxWy*fJB%*Y>plC#ToKhrz~HQHTw~EX4(DWHb214Kxun59ux(MLvtW&CbdiqR zATI0(f%o$|?-zX8@(<+RBC=t6Wehd%GZ3CP{tyN_%U+Vqqi*}94`Ny(ysE#l~M0qVIkb)(X= z{YRf5(G6`Ws!7f0P|OF)6-U7O!WQrAfb)9ZMUMForC*<759JgU`FV`uf#*jH#tH~W zyo;QRMn9C@j&~#~A+LA;^y{-)o;7HDgu0o_wd(@Z-WBp66L>p^X?6(|={ecV^#Tznpf`FqB-Ldn}i+-&r_ zfmCHE#WtZPaVJn_#EX*m3Ja86$X_|hraW+g{TQSljge#_D*dR{JS(^L*@@6Y^q-NJ zijOqEwQ5nJ3GuTzo`&}0uziwP*w>`!OIL^MBZpyRldvi|Pg7u9ht#*~?t2tiZ6=)> zYxJM-@GvV%6Wyyp^E;ilftSYCw1?lP#Y$FWgRV!wes%04Nl(>Jb$@~SpoLJWWL;(n zc|;(o@!SYj#A?4jNDp#}k3ko9+p8G1w27!7e!w-^2Kpa(hTG?j zz;yHv?}v>m=MFO@>Pp@e6&o`de9VD-4f?+rd+VU6zvz8jLOKPc8)<2!Swcmm6i}o= zN~F6M7NkUw?iP?nx}}k3>28+pr5Bdv`@;9YK;OniqA>`|H#k&1o7?5}{tI8Q$83S$GuVhFEtoU;aZ23ztbpse2Ce0Ub) zVE*Ms$(P%3{P5^q(~ z9$D0o|CuRZec+_pU6*_kd#whr#0qx1-wor73nei#bLdU(~)T|iW^kQd>Va{wO>@?{wgwH+pg<14;C+k_!tG@bCtt%m(Yx-(HsNfSH7(T1d7$MdVXzy(oiNX4we@sl8 z^b~U}I>0~}mU<$c!p~WNB0YuFzLD0NHYpd?8WJq+5DPHSqcbs|dih(Wf!a%&TL;ca zRP09&Kohk|;a zP*HL)m)x$&plz1Dv*ji}$~3uAy@korKmBt`<)Jin*~+!AG~Ns247rpY&~Fpa#bNhp!l#}5EL+mqGS67(ToX(uF`PyL{=~bL^Uyj+CSX5q zoQ3U2(&JDeQZXmYyv@|)h%a_J=aIp8iiQ&=(y_p1)DGrud@aU^tVmw*cJ}uz;`&^< ziyN~oKG7d>L+vXtszjv0hOQVS>qAEp>Sl&i86Ig#LY@D0S2Eb8*=Ep7ZD=^#R@3YL!YBkMTXB7L+HMDlvcn=O!}5>9L^?q<^qkiLcI>FRi--Y!3qmQQ) zzreXAKJ-WuMCZ><^6mG>4}IxZ9}+U{A~PJNG_@_XRO6wd9U3tBm?LT|B{Au!`&Vjj4|k8fI(c`t^|r%dua`;S7RAWtg3oTe7`d1wL$!>}Z6Ma;X1)5Ia`YHF7j+RTdw*uA-$t*cSonrYr0n%iF#uP-d9)Y>!W zP3eiiO&t#vv(PaoLSjwNGP#y3PxS5=W*KyzxDG&gGe}21%y^P(X7;RisNsra(e-T6 z!$rQ1;f)=eh~bVdYt;1`%W}teek=cZ3mcB@QF9YeCI zSqw*d`#E898iSG^@tNJQ(6h8yba|mKISk@6uJBG$s&|+xDl8bzVEpSO+AqvaOkyQ! z<_LSri;xunu3kq+@{9@3%Mz}~jjI%;)7Vq&Z2j31W49gGzYf(xuoU%{1wme^b~K4(mQ!)MD4q~s>=&Ra zN>Y(d^$6LAI8hc%CVDM3=UVXJ<_N~Jy*hQ`ix-yOo<1mk;uOKTgh*hi^oToI5@I_A4{=h|q zF9bIM-R1^S9Hp#WNBLWDO+iPuk1pe!|HodhU>TbtaFlQn?A}OO0L7+!J zV1n$25k6(K^kj%y&$CE@{X3(^zI`Mm2QP|$DyFW7aVuBo`jk1F! z*j|i%0L0z&JACCn#A;Xi9ISWy3DR0kcT<0o{IAof>lAVg3>F z=&d~2BycM#ri1k@z0s5yeFH|M-3e&hM^H-1%^ZKZGtL$@EB}54=}pin}?2Hd*=7bajjovKu%qYkF=uOIJG= zFS6`BbW53XQC&9!Q5DZBV5~{o9>d$Cuee2*agX{3BYjMkv1*`2hVXVHQxp9m$HcIQ2Qjb`ID;CA+HU{)+3rkn56fQy~?+%B4Zei z&O@AEx*mME3VGN5QBBJ+N;Xu%DRwzUGd+{ee;1gzS67L2xjBTnmmH%R%w5M;6cHcl zDfx`>J)X?Dv+?ro$wIY{lW&z(o~F;|t9f5}yxQ#9@aHX~#@@|}VjdPuSei0d%woaB z+R!^5EJcQk@(XwWV+JwGq}Za>Crs~w4QE;%kMYR=JzJP}lHK=35@ zvOz|Gt3bvp+(q!1?DNz^b?V;y`iO47sqIV!Cd0za=VOx^`?n65uO9gSu@r78EapBD z{_wK|6gquAnSTUyoJ(pR5%k#FX4#}n4BAZigjngvvnw)(7p&t^();(5d=tTMda5s* z|7%Yerm}hw{6NkT4CuSZfrfqoaXe3mp%Ka@rFATH&_dLuWxj`$mlwVp2qb5hL$MqSsP1qzN|r|Xv+aY^br4a z+ctm-A`DPeCeolEcEjvv8cDYw{5!k7b+O~&0!|~o9SE^I)lP$LTVrJ&b!YnQ2Jv)p z)PFjaLWH=4mRS&X;HVbEDp>_=Fu!MHzO)!z4}kHq)1`o@-CkPj`eA!NJ4oW2L=PB> zS1^vL&RcSNheK#4N*v;8!b@oe5^xZ6vN$df?2(akc)(V)%S&N0nSBAW6@UZB#+{h^Jk;pc*j+gRs*FV!PlX=7r zY0;4LEq~z+B))80y*pQCbL5ZAv+m_7lfMX_!B3;NxmY{$gkBbKx*_xT*s}waF64L_ z-tCGX@ICnGu+)&}VS~as1Q9MN?P?Es<^aRy#_V$cS>guXYg0c4x>9%57hM7e`4$aoug8^aIxN<0eFCoWV`#`th^o3l=wHg z%V3&MWq@5ojl)H|UXR%!d4CUzIj;_4ygU^KUt}VRU9Ws6`Xd*w4P+Z$tv+lry#eI zC^c)H$%JZKrs=^?p5U+tq4}+|PuX~ne>5%u1}2nZ9c;-IdRZnhr-5>#J8c;FhmbNa zsNA|pEMqm9!<8MWR&+e@7CNux!YBJ2!qh3Jyzpn+5`93|nV%JoY(<^h?*kVfnC#Ie z!b&RNxJE!)LzRc^4S9!yH zu6?8hME*qo;vTVqhNu*)rV}c6=QhY9)IR*PrLWMJ>yqZ21*86y+EdCnF)!ev=SwTn z`*+O7u#?EL4XlxMG_+wi7>c;9e2AHttmQHQu-gkDp7*L`IF1Kq?#Ocfy~EoxjLimH zma)^n%cdbX*bnDX+RpAi)9{ke)zB#;Zg~D$C5i`d58U#8UBYe@50~=q{Xbc`=~oUr z-QsI}B3$jQqsr7ZjERq8@MB-Rj=1P{L|D-iV zce;?A_+od0R(d)}m}OfT3zi1`8dWIgDe_rcK-$%1`3wdoEKIN2`)63`|9mmk!G*Ku z-xeBGaM#gm!d(r<>czd-oUYF&KRJ-L8az;=gh?1!ROZ0EjcZu^h8Cx@T~kRRUlsLY z&Ouh`Pfv7^FbYns{w32iodd`?m`8Y)ose;)?-K45ii|M$PK?XY(zQxhd?a3nV>C#O zmlV8{PIrRxk8`C)<}t@y^M~^#>{{O2VdF8OPNi|^9+s+wHBPB)FFj3WGq_#!ci$@_ z^{2`CExTppf<9xs-`};xT5q2n`t(7pjOP)>`}b>`&(=oEpz3HR+f!tcc^}G8D*XPW z#O6Gf^(`s70is*wQCWPZ0u1uf^|!VlfRl3U<-r%%HCihxsMlK{A(6-l_Ne?&K)suA9h-NV__j6t zK6ENJpw_6?6WnI*&CJ>RlNea)ul4|jIpO*~Po5ConW%18>>lXL;9%nj;B+2gVy)_V z`x3?8#cTbM3Gyh{&TQd)7whu4%bYn|8MAWXta80WgxfOWI~&(D43cIJ=R!$q#uX%_ zy2%>vwzZ{&%1p)S`W2Aw~@KjK316)az>oWxio{*#54Z={P54ctXjOaP-HfGjUiNyKle} z3hr1C|Mh)W0jBoP@;StJgDpSs_}B#IP6#-PeTrh+`*5drZqn4z;D2t}^hNIub7=t? zuiR071KzrbU+s+M$$9^Fns2OP5cug?}JjCB@_1%eCO;}pk z^IpHt_L|>iA6&VD=@=Cr$lD^KK2$O#rXO{u`rv)!-}866>V0m{NoO=T;kL>Oe?*AEpB;KedK(_h|>+dn<^(Vg19 z6`ea6mQzkEw>nqIqRZhDTg=8GQ_ILiBM1^uQ{dKCB2R<-wU$Nt3 zNaJckdbCF~e7t`rdf0B5Pk@do3G3@lNGL~GWfkuGc>9g;x3`k<_Jq{zGU@%Iw_^N^ zVs(;l2Hm|79#!@sI-&;lSKAr5$)V@fzOK8$dW=*aXRR%8ACUjv6iF0*aDCIG^fz_h z-WjX{n3!z}cKn(oc{Qt+GyV)E$fYaLN3Nm1OXD(epUIzjT;`e$%?(m_BWMa}mJtM= z2Fwyxg2xIZV)oZ({J%locN>ZOE&DNhP#yQFYAY&%WeNM+_xNfYvixE`D0O}*`^9Q2 zm9-zL$N=Q+>9Eg!nmE5v^)YO3iUl!w3PmgrB!Dl{Tw5C)+B+?VJD!N0#=u?Gu4<3k zMv3*kZ-SSv&VsakuI=v*61ZYHP{&gSA2$+U`Sb3Ktr3y1*y~e?Q)Wbj4rN&q)Uj}3 zCuV{@elY_lH!0WYtGYh1-|PNgw9gMyWL(#leQjVt{4I8!$})HU!$|OQyXhD8fzO%b zf+=gK>Y0&<%eIX~yT+>ykbWa(To0Tlf9U4qx~i0h)?%=YS4v@d47~bv9O5>L2q~*~ z8F)h3>a+1(iHv=vbO0h_O&BgXeFv}nMUqEAfSf%suhVyF&luouK>aztFd!hmIog|& zF<)As|gDwr7My)9` z9XBTmKN{>eBOhs9O{-<9-xv<&5ffxlBtp|n>aNDFtKhfMpKdE$5EHYO(hjp&BBwo+ zX_xilv+ha>D#>5t`vMYeXFNt9LK?w36&;+&!qd&$X~b6cff493Ex+d|e@0bN`P-j< zI$fS+77$G1IZDc8`ubOz`o?d{XF}t^qXe$0f-&f#Ihx`kp=uGr1%q&o&NsSdGJ%>3 z5p=X1Dq}64Gg|sE^|WTUyHK*odUIIp^CcOdwJz(a-`$KtO-I|KTdyLKXX9#;knZrF zp0ZVgn&Y!f`WV9IFbimsq}7_}<$?E6#7#6ZwR9d-GGeH8Om34!?4R(JN7n@cnD=b(FEkn|9cnW@)v+uLsnI$-R$=$Pbau2d5< zN_)cc7R!95BOl-Pb7bDOmfiIe&POnUsP}bJ-+^H8Jw>SQDI@Wr@5EEuJB#@XV8F!L zWdiT3r<>{-;mLDF!q#J5VV2M|F#(76@SUWoBE2 zzuYf7SiDTqv%9%&@nO_$N;!(S_!NAdLs7+Ufi{N#RK_x%P8F!>4Cko@rPz$iQ%Q#F zD!mHyc7qa`Z``BVJzOm+g{0Z2z%LnVjfoW@&-Veduxo;?a+m%%YsQ66N+Bb+twoP;>=!bKl|#tKD!j<+ zh;)hbf`+O)tF7NX(Dc)m8~0ChVy6A%9tsM!uvOM^tP5sD!=iUBBS^-i<0r>pDu#B% zqd^NWZoZoBAIl^D)(d4aZ1yy%XREz|`;mUE2oUPp`%1Ls!A{Rqw@$pRGE!-Dp8Q$i z9oOdLXE|0z`y~~n>hQytL!Z|)|9HO}Zv^ z*VTQjPdUn#!Q&wrF73O=17;QiDIKW^{651MH>A0%d7^YuVz$P{I}=<6+MwdcQCcQ*Bp@e?WEch~%j1roJLO#p~!Kdb1s-aD~~`z^FXQTKZ0;%<9~tcRBogO!BCEZsq!x%onn==A5S9`AF@${lo(p`G% z3^7BouC4rg7SWbzOIrVyTI)u^`a`Sv=?8<~fnS$vKOyw$Y;Hqto?PGV{8X3;0pE`O zHJaym8@@y;75Y@gwMpKBW-=+WqM=9R+E_lJ2R?B*#^<$E#>Z1n=TToaPAmsO2Rz=FzUD_Q#dSxr z)+7z9ijBUGQ@l2C6F$$&3wjSI_AS{a^!9qmhd3iDc{oxHrv&7@q`ia~fLt=tf^HUv zVmVZ$9A0m}ro*{gy160t`7693s{EIqhbKOe3-m-Yf(}R_o-%dyui!n;3E-e7vMYpg zlrn5BF5O1XyI&69evMT9`1gN+>E+>~HPxq?UrvHt7*&&brMGFchL5$;&w8CEZ^{-fgCMA3RjNW!xCvT}`0$1<(yzTN&&Dtkn9e@+; zDYAZ;>$5Y zdKP9?VwZ)ys+p;50WOA|ecNf!2;+_lmimj=euMaQ|~g#vW%1F==xuQoud zpE4nOl=-caGPO_Kv2j^+I&N#YS3nn6By(zOo^fBfM8eN({sBkwW8Sjmg35=XHUu>V zJvwU#^R;(97{oH?)t-^bl3O{Jr40wi(TWS;y`@-=)<5oyhD%q7Xx8PKIz|T1lRz|Z z6LAW>$$VN^kX=3HxPBmUjj?4D4li5sIp?rzK4)O^!jtsw&^Y<6=$o)nHILt&-qQpd zr)M-TDEXU~`Qm|JphC~V@zuEbe;B!hK%xxWtA|5Ry!zq_PR5b1mho+|?3`!o&$YNE z=tz)fYjA>4WVJ1cUYKL`?<<>+=KSF#Mas)es_+PBPVjIjbpF zo^`ukHYm<%%usj<5&d-MXVMZs4(6AD-m%0F6(a=<9)r**hQ$TtNt>HXZ5OP}l)GX7 z%F`5w>sUzs#zamACO*}@LfyExc=z01g_OD6t!JMyin<>{4wru598*~G>iTYzFyM8} zf=!oOIEGTgI4nJUpZ{j!UYrRJB-FpQeZt(+(ONgk`^2FCiUNU%2dwOcHoDz6fz^i4xWqropyRgayj+k8v1 zPWw~;qvsUC-}2A3_FD#qGa&m{g`%kI>qKeuA)SGW_-P5evpl!5QF1qW5PSs=(;iH* zYI3mGtvwsG(iG$e0`sF(Eu2qORq2unOTW8f811*yq5F8FQL%us>6`*G#?a8)h4j%2(G`uo)@1wYuPL z-oJt5$9gzUUY^n}uD@#XCnjy+L5yo-d$$Wa`f>%1<)<)u`~I4ixqX>GE<1N}B| zy{NXD+3B!v`?D4v1SvJbrz>TzZ6*HNEEz%fGUu3M;@$9NsZJ36>y*6n5G+aGZzCh! zVU~j)#VF&eeWg`P1H-0ufs?}aYYcSkcVx2gjPXc}G7A1}aX zB{im}s_`=-$+xG%2Kb=y4gV6~bIv_=kN2STc`2;z{LOQ7z3r?6g7y@vz~F9VJ=Hf{ zl=Vc2x}nn>tRIHOFuAxQ(sXkxl!t`01vCwiDY#E#f|Cha4TH2#;o76C3UIsIqh)7C zNQwCt9Cl@(iaen}mog6E=P{B#SMkj$lhn#wtioPyYw_s}(q8hqp}Y+4v0CKcDO>oD zW^$L>S=cUnl|nqqf3XWvY?QfuFEjE34L8kD0`hLynIAYV=c$4R>W%^~Lb_(gExTru zBaOx+oq`|5SB~&jE-M7@mYh5~^lEMX@-0wKW&X$_LR&JjTkQ6{=)op7XtwQHF4grs zFN(ipkiN#gv_s7_))eqRuR(e3U8tAnNxI5r>@2xm9fv(%47IS40#l(aQ9`9}6fTdv z5C-m`y$jWExb`hq=pyPF=*xA807-W)7E>@V@nx;-g-z?(rxJD4w2$7DIx*xScj=w= zVZ-HL@5|e>?9<3}si0bzq9UAz!x!D9Q?)MZ;wsv~xbjnx)Bvg@qnW=2_FF&JSO7A% zKAc`fROW6c?Y0jimbw}>AYQk5C55|o-ck3#mnh_pbt(H@tDG;yd4gv}lsDwTcG!{0 zDNV1NV7}}ZG1a`-jkL@^kI1Z!=Z+m#C49eyM9Apce*I)@ylY*GbmVzJie#o4q?@Us zJ)M4@vV@->(Zb3{A7?eIi-wuooj|(I2Bk;nBn;b?AswYCf=|G-9_xx~2Ef~>BBrDf z`Qe3PMg-2_gZbmj^iBT1I`VROV(yto3oYDWi@TM&jxTavI<2@d=l)OGvbh@*{FCj& ziz*OZc@)0Xw9!h37gs-qJY(4@jN00tuT*krlJNg(l}~PZtd#ULMGDa(U-5EabRw%_ zAYW|}eD?X0u48ha|HPIdrxtkcl`<6e z!!;Zn>muoU2sKXuhq7!{p76iy?)Aej1FRwX}B|gx&9TJZ{i!$SqtqX}7h%XWAWk z^fR$o_1}nYsY_pVat&JWK|gJ4@BRuv%otubzEo1KW26SlMwBzXoi5E$0gGu9l`2uc z32nZZNJ=BQs7|jTPLm3S{N-N7);^T-sxBC|GX7Ban)ulZQ~0jc@1nnEG(BsV;+hy| zvjze2e)!$oW3fdS9in58y1Ug~Y0PgGzN>)x0JgAFbZ5%;u^FwHs)j|v5Tudh4N_>q z{dnMu-2nYeVf^(a)3ZlRWiIKY+Z}Z)W!{_l^Eo;6>H)^NhzHdTX$PZ_2p6C00wmw5 z_B~-4pTBy8Tw`t{lO{`Eg15ha5t{B?*gjZWBCGfmp(f#>Ka|L_R0ysJQh(K=u7f-+ZmPT|l3Egr>VL3~kfGxeOP<^_+lD{gr7$oQ zV~8uO>HAK8;ldh`M5l>sU+t0Ior5YQD~|&7#|Bk;sn=sHEaag~i6X*ePFM}O$;nZ| zy-$V)1JmUAtSs2q37nLKg_&tMSA#CNWy3mS*jJ|G+vj%~FhD8#sNsele(C=PsoQc{ToFVae0jHV+o=r^g-l4SvdE7LQaTYx%kvh`(%P@KHmD-Zr`r_4r(9CDh8Z94Y3kY zAXtNXh9z^*0UigC4m?K=+UX|T&BoudAnqN-qb}7wTP3on)R$f&6!s-8Vp7+#8u;xv ztL-dSd9`v!z+MI6xWN9^&cjbf#BKlMMtO(8M_B+n${z&k!0W6vN4+^WZhE5XCzO7q z(L6s6BEV*J7236|M3MH^te*|)A!bRba4|LV-bJ`aE4_VIid4Ck1)OH~%@$B}e0A}Q zG|{Hkj6|2pp0IjV&L5vNzQK^7_|>*&=&T+tpBQ@Qi!90(pg?{)en6(R;ZJnK2{yA9 zN+rdnK8nbP;o|*}fH)`%RS7_5F{fbw1JV9a>njJITqF+t1P5y$B>Sy>fOAw1lNF$e z+a>80%PUc6=fagdcK(LSZPcAEVk5rzGD$D}p8c}^tCHsTEWWyzonOU`_t|IDiYR5( z161tufJIQSjQIca*gw_j)E|DzMMTk}B?BpcahuV=_H#%dCIzbF?ZAHCaoy)n>J7IJ zaJD}2N|vF{Cb^h!ZkjeRTJj2F=qnlXrhFdRgZV^$H-QXKRWSbNXJrMw`k!0)?&I5{^O}{Y-XG+1`hcMrS6mc77IspW%jL*Al_HJYS0InZZDShM~L_}g5M&P>Jwg*@N5!mlE+MYRW zzkEuwd%KTAK8s}t3=(|`cQwkgl_FV!5JfHieSC01Bg zBkhFC@p?D?85hgLO_rhC$83e|v&4#78klBWfZAg8LES;9ajGMa(D_jwg8Ht5D~4zum<_XV1PiHFtornDqa?pTwRDwJ+tPm~H6KdauUC3tPOthhR zWRmy>#L9lfrflq<&w>+oZ#sQ1_GhO^)|mXBkkXSHcZPjl7g1T0!t~zBFDDT|Pn8`e z3#)smP#)=ZAL8z*;_w7^Gj&;yyGmqP-c$|OUn5wFs`i;asf3TPVhna+TE@?i-i62X?AXwps_GzPqd+W=+w1|Vtg;|v2m%;Qnu$`sWGF6ZtB_ur7tEcd$| zByZ=i%VxICDP>HTVSkt+0|5eT34#D}n6;(Frq+kvNX5Z#Wwe5dd|F z14Uut_Go6f8Af-d&GIa*@>z(ReGWgLx}_Y?(`Ptu9J?HPE;^~W*JDI}F>a-1e#pj; zkbQzf)x?>lGEU&1DUQAsQ&OHtO!qAuCalu(D=|Pj!V<6dxQGAEc#asvaWr_4VXG-` zUQZcViopk>UOWY+ZciL!78)565RtubjB%(domwU_JzkVbL`)( z9<^2tFRXtcM1&_6+cc6yQfZ9AQ<2L$Rb^OE#wr+Em;EjFa>ZXeEhw+0^JO$HDzdgVp1?qJwsVg7srpwzp5@v((CrHDSNfF+N@;!C zZk`}~0d@?X4rXu^f-2&&t9T@By9qQckYq+{$DTY-L`Ty*w?JlUr1B;5awK`0+Zruyk1oAvDz^nlY+GSK|* zkS0VdcdiEMl5@UpG>i?7@97;&414G@8uEPrpY+B#hOZ;M4iHlWs#r*Vl}W z0Od{(Sz48qZ!W^mTO1_b8{`p$_>^>I-S<3tw)#DJF5_B&8rgS?JV)=HQZbe9^4j2; z0eyk(m=pyjdYt+Uv#h;@Tp-r{!XfAY#E64*FQYH=}BI+UA zG0W4_L@$c*84*hW7~xRyvgbBnyE<(epv$N7UBK6v3J?R&IMB6d25p_|i3*853 z!9NsxENu``B*NcJ^)g#v3O$Ho3Qu9-pU*&y+9{q&A=+TZlz!IVUJ&gpg7xd zI00@&CO)FMe*k*vv0em6fy5X%YBY-(bChA?UxrtL{0+_92hf4R>fln$f!$*q;=I*N zacVq|A{Iry0_YQLo~2WIe}?-s(GF>2Nc`Sw5SO${-L?I&kH$ALTv)| zr$pis=1Lvb#m@)UhKDE)x9}8=#c(jMT~}y#5~JT9u_@I}1D5JXYTApv&>VMnhN6*& z>|`Cea0@P5k=iZeD(!lAVDp6R%T6RdskD{WNEd&45n2%z(H2F@RJgwoZC{F{+joo9sKxoiLeI@9AJ;b%1<#2{18sl0bO2Od1pdGO0mUO3 zU;4~1@Kw$SMK1XP*Xlj3QUJ7nt4UW-#II?sm@z$ zk9n`9*N%y1;<8{OgbKcGPkbQdA# zX4bd3=ug4c!|Hm>l=d@!Gs%D4D8TMJlR+_gVpY5BezS4&)Z3@N)C`T*9Mk<@bf3dN ziN{cgaDJ>*JMgJW3YE~!yU@XHHw<&~P9;6{03HoMuwTWk=FdxJe3xB=yov*PWv&nl zA5r#rw?iaA%J8ZIq`3~DgzgYBcWkLD37*TDa|?I$t|~OTKn0HNB-c!Ys-1m&-rN6a zWdbVNd)0Qgv_Cm`ki)^XvU7zw<+`HR#$le_pdbbeaj{vcMaCb~#W zT)DE8omf_MZlh@d8})FzJg9(J$Byx~Om6*(Al~ztG`}`p zLB$$VOOV#7UA@j_a{ge4s@$M)4)9NyOT753Q;6`vgp=Y8=(3Q=DDP%=M(4T(xP`KH ze4Rg_XB03kK?rC;9*Hk%X9CrL)5h2g`twaN(`h!tCOiNw;YrGqEn`!8>tdY;EvsKb z=4r`E=oq&GPTOw->c6hoXiC&WzLgVL`|b!q1he;iTC5wTXWxfi;H{SGG51n^TO3+# z%f$*b@k{cbr}c^;P8KdgR**18dLhh&fiTsQlB2q1db#n7|r-%FB?m3qg&v^-iy=o)(vm9nfc1tfG2B3EZ2_cV!AhR!~VBl#N zZ+N9gcs4Vmxn6Fbl64;LBut@W@4IZq{_$#rmMXCj^ZQ0=QU~zs7{Lt%JFyu7L1xP~ zvlX{xA3%}yhwmY)(g(5;tS{kRB)re%diy=5f{&sP=aKb}I%rI`GLOvqQD|PhDj>Z|5=e52G0MDv-=b!nn2&3XpO*XPX zP3TYRigK6F@tICAULx7Q&GUSY82)%_(u)ejC?AI2pRz<88SSp^*I?%{5}Y_kBC?E> z(AK zh_L>pd)ynQ$R*qwsqg)ZfkW>m+Mf|R1tb5ubU?w^laB>%t6v#uYls7p&Rs690yA)% z;<{b}%|^U9Xdyd6Yd?KPje1Ml$1=v@ZBveltt^dT;lz(M&a+I*bNa4ajK<jT} zX*S^BZKU{00aUG9*(TV%t~)T9it%j1D*>N#yR(6*c&ISQrOiE%G!mr_ZS=v`JS&Wo{hhi5I38xj^}ZSS zPx@5N^wFh2k-A|sK(U|c`gwXYFu#1Qc2W)&&g%7rGXU+pSE;h2=x)$W_WxG z1ZP?fHsB%YuW=-Qe?@M0akcC4(2y@I!FQn8Z{HNe1WGI((5v@^9DYcUS>U8%MXele z9&$$7`p6Po)@`GMc7q>;a9cm&eW>bse4?_X@%UNQCtBd+q54t7qgx7ImyY~EZ99NV zV0+5hqAi{fiVS&2nO1YS`H<2!Lqew0*&D%E)7>Xe*2A$8NkrEZ()B<|EEaL~rOQLE z%oBo(^X$}qS8G3R$f&6Q|5qlpj8aZX#ufj+RaUdG($2HD>ZIsFG&gb-jAR4kI~QHA zkzp|5ZgB55w?@QqgITdHV;+!gwx@q*G*_}FKHL;}+E>mn$>U+-<{55TfXnmXx6vX4 zj+l&u{SNX;paUxK$q(Nv4=XyxUX!gV0t>pDWBY(XqczulAa`2!k$#JwNq(_%WrpXs zOm?_EeWBafeIRZiAtO)nHjpt?>ibphrJc#n3W}|vn(@VbIOc!M`1-A>vk8=m9TvVM zbn$&?+L7~19sgH_k2W1Sa=QcH6U8zj)cf)7g9|Y9{N!}N_*5H9*B-d&A^wjkAD~6) zKbrgPQPjG|tpnv17Po%ETETdyRJRL?+q*#j-EnvoPQl31TtmAq!g)7TIgEK9P=5YZ zil$)|jA765Ou;`ITs9K)Z~1s4oX@)?F2+%({Sk;|7}yb!lq@5RfTwbUP$llyax!Y( z**kw|Lg3%VmyUTQ0i@YOzRt(>B+Z8K!4H@hd69fnD_BuMw$kDQcP^_;+X_mwd;$wH zj%g953>BNLL}0kW`6vR5e~@jVy4(GvP{^R_ z^P-_8Z;#^U2|6P>FEsOtYQ86|WDD?sA!1c=8v$O_aGry$GMmxImemga^JL#*_WU!B z<6?&HG^3nPve4$Yh{RG zePK-M(7w;)jHOENnwnwb>BMYdr;7C7A`>kTWX_J8@Rav=zU#DkML=Ka?-`p>Ead~) zy2#U;Z>y}{?oQiYe)4Wpu3yc@UI}IIU%Uu7&4CF&2UDehMl<$00TI>Eo|b9(P{c@5 z47%=n@~p9`ZhuORYo@8k(n66%A!95HhHHjs+@IF2X1b1$q=r`>j*vB!9LIMPD8Eor zCFO6YQ_4;nZpXZpi?+oq0TFVB^y;EE&881_WDID+gsnZv(UzQl$=E~YC1r5wy8}Vb zS>BQok&$7Yb673jC|m$Kpxf7LYXtq3Xs@jCCTLp~N?6oa23eg$^OU#(uh}R!8l_Df z!RSO>5ZTDrv}77?;t-(Siw+o|7w|Vw#N7;$V>o_Gi^hn7bj`Nf(_DZ@-z$7r=7%Faz-=~_%W&HlhTphCxphVm{|jcQcowzAQdNMHO#%(Y#0V2 zo$$WZ9KXPK!Mr{BYF8f(UO3!gk?gh&@9#(!#i}`LfPR20an&TC2UQ54z~gsGj$?uy zKL=l7Pe05MECD5Jt+>d?6 za(HRNbpR$>BP@;S2();W zB|LErOsivILv^r6H(i{*Cv$rEs#OIXThRHx0WmG3;4Cj6>TsAU=g5bHN#ffq!rY>v`Sz0gPDjH}#yf+|N34jYqsPpN_Z1tYsOrg(?bPsN1 zXB}OT=PunQEMH&%(dzd!F=QrZer#oFX@X2kaUyGw&Cu8gc>4treUS9Mqht02|2b&V zU;rFfgFco1=P~2)tCIPxA*95{P3CD+^^Ids@f)8{Qe9-OBvje~sjmT%%@?~XNZ>Eo z)gKK#**q1*#T`UrUPbvIIjQPf*2r{<0RhkN{^MPfA5-bHO`7OFPLvXE{&2{UMUa|i z8qNyF?B#oZ+3m{${f$JzIt9|cxJk-J+8B+QfTh>-^2K`WjIOvQ&Papb zuswp)6(|_Zd_0P5!EZlk-@hvWq8`mt3`n865vtHR!rnhr|4`tGHvS|5v$QHkKjEdp zM%Wy1w*=!!qv*E2M+^1gC%>quQ4Z!wzKbYi3F6n{#|Qp}JhX4c=C;Q?d(L{Ecs!P< zUNg+!R~k`cgV&L1>B4#S|OmL=~E_!w_Gt_v#H-7Z@;Ov^4U|KtJem|E?H6n^4+dl@ zhS<>|?MU&9YizIbfc;l^xLv`R4Q^TgOWq*5I{o7YX>&rWTf>yIhrZsSNQG{7Idl~e zA|NBt{x2Px6D0S8g1t=}*#m}T2c4GKBDcdQYOb$PU>$d z{sd{I96c9nH0;d&7T;Oab1yee+@Uw6@|*@(0z68y!WU%LxfGcGg*=%dd0WygI^N3} zBWK<8_rBlO32YCLSYWfeY_*-sl;B3BEyc56P5>CuG?wq*)xZ*drn;f__9HxEZ4x0R z+b6ml%nl&+!1zHcRd?qeFNI-8UQ1qjvg!|-@Sjzz_>aDK=rFykhRz;4*~G*2?*2G4 zd`M_*kg6d%Y3~#M^reEV$Ivg9$PhA4PEANs$WP8}`yml?r9jE14{={G$b%c~ja|xZ z->x%MKHdKGSQ3=()IH<$W~TC7x7IX7XBQQR`9ivcCL9%lQG(&S9&rnGgrpGZ(cT5A za`egNGi?b1HJtS!PgZ3wqIkW;f40IVvViho@N8H{qqAr|1)fXTvo8}v&;UPeMn7(i zfa`wAiEv@oqA$CYNm$H>+Ov@yI-Gz*j?(+u71cTk<$8(b&h%bBQ*svCi3XGsA zE!%!D4W#7ow;(nN(-v3#!N|3#IP`tw`~yVVU!a=KbS6H~0|_X-t0`C7Yd~gR!%1u& zlO#e@E>eL7B+;m5hebq`Wp9OJuO5%vSwqb2+Hv{NJqhIC%i4oIIR$z24h>~I*T77CI(k-o9qMtVFE2VxH~6jR^Rulpj#b~N z2rzXmi&ekRzs)O)#hZ;SRxoE89YAI%+COsw5`&jKD5gJoaEzT%Z%a{R`H%CKM@43` zK-{B4VaiUvgh}a6e0Bm{+Ap+Qe*?#n!@P~@VuUq-F!5VF+_ZQf|6yeUg8JeiRGbOq zvbKv$6{|!%zX`-dlJ3==1tZAI0>myU!((W<0|zqPtUhsc4fBxyv-?1{xH)W7Df9Si zg;tymM)#t~Gfu@(Nw|Pg>DVho1xX$n5JYbb4|e&Dx|Lc2ABZsl(EN|aQsuh%R}rBS zi%5wSHyMxkY>22vO)AVL5=bSHlqZ8DF{nCUwzfN-@>05ri;`3Gd#`u0yWk6{99DGB zu#+p95ZK?=*EQ8CUYQC3+L8C=?M+<+u?&VRtPAs zSoLHa4(kxSmv#2!5Oix)WTUav2%|Fp<$-eTp{R!P{fNeH&~?GZk9(b9mmUkfFDmqa z0KN&4Ew)-5R;1h2UvQ_d<^(j4OIh0_?{HQ1`AP8*TWEBgts9bNXP`>UtpD<C8G!)j+dOy5<&p}yS1irhklDTJL@IX`=Z~A&F0kJ zD(1ATP8fg5Gnqe4wq1c#G&Pl1|4cK9%@ly5q|%A~fl;=nuu%)W5F|hYq_j@@Y8?WQ zy2V^rY!fYk2$}z4uehuj;iEv(i}vL^$FD4=BG5?{c_f5zM>+IG%q`J~ZgjUC{qMr1#&!BNcVT^v z;3Qk6Mh<6PCrmis9z-hyJ+=p{Idia+Gg6tF_z105*13P;wFOyZX*6c)pwUoWv?@jp zUZ3V=FJIyBBb-}QyA%V40BPmlsyyWsgbxWKt7giiYY&m^NjngK%`yEjb?IDEa)gaR zEA@pm#5f0`B8)=5$a;x>l+=4nEzLGrOAur}|KjqkKq*_k8%He<$=UOm?t@=bV$37i zlbV{>z|HaY*ivrf<3>X2vPvIi&rb+|O<*tOEkA$wBwFqO)i~fjnImAG<2so7Ny8i2 zp>?h7XIbr@asN6H8bEi{w=geK9u1{YfVI#e?)GnL&2yc!c?B;J#o8 z{D{C`Vrj}GB~jukQm?cn}wNfnYG3!{9YqUvoB zkLUYM2FU1oIVb}Jwmv9)dsVVa<6No`ZAG==dE|q--sfXv#{X-Gk6<9p6+EEk}G(F*t}`u9!)2d|_&Vu)?dLauwg zTIC^im+iyPhuO>|Hybs7MhAph0}-fvi=_(%^?@n-@jvUrAHcL}?q$yp#8yv@|pol&4&QZ%ZE3-i?QD!da+) z^OKM>G;RRdl&?H7P4a|IviTaG#o%+1{}3oSkQ}yb2|$^|x}F*PF%X7F9gp3?g5T`c zt-CNh{pSU8ZHpBr>@115@0+Ul=cxW>c}oX*fm=}>^-y6U=1_4E(YbDsM-7xf%OxH% z(R6f)PWWw>N(Ak9e_j|Mi#MBFa~r{aqI2^Alnxu{U5+ zO&4FllSh73_sOKt72Hq$>))GFluv37eALYSjPGN{Z=8HV*96Cw8HT*ho9%s3nD6J- zV$Y}AT`1-bN;?Tdb(4aqFuXl~yWV`yU#ek-4?0{r_fr&I*x-1dAFtkbFoUAia9fZd z@G&fp*l*ba*K4yk0@dqsJtp^;zEcal40V6NxjAK=-p-{r%PlSd)E^3u8e7T!Hl8DZ>zv+; zu;8~?mluJGjam@y9C(`@96?9LJ6O7Vy6^{j;ICnuNthRjY0{o{(7iS^%y#R`%~;J@ zbTd**Qqap@jaKxb|B=vEj}6v`iJ09nzyn5ga;1s}iMPRX5NnMeuPFEZ~J(htLk z4iBsqFP(>Mc(tKuZq#3{s;n)O7OJSWtapdUs?omAQrw7a5GzFeD zVYSh8OZ~x~5qWHxl6iGy<0f++C+K!Jk12$bE#lIzsJy9#YFtKYI_{% ze+(qJ+)6)nOp8z?t-8+bDE&r_l*MYW9IvUMT#e1f3@iDr9!#_-B7wx~Yj}Gx<5Fk} z6UCiUj=)JWUbluDYjjQBwz^8Y92R(cI5A*g=MaUi&@Z6VY0iXT@9U6jii-ww7q3uF z8^!mrrZUP<6b@&eHn3ZTWW2hg&TfIRUy(WeHSQN|gb5+A4)Ds%9o<}Q9PTK^jbiCW ziR|~e8E%H2P3a6a+YB5{gEiYtbT7RgdW_Vj^9vS69WQQOyW>A@t)D|c-A51R zCtlLDNKJYU0N`t5xe5m3Z^ABA!7e@4Z?IKKL;YvKcG=>cPCWG z45gU%JrWf#H---Sem97C;56FZD3IGwgK2C}j)Q%aG>9UXF&fV0SSQhK$AZSGb+PZp zpxb2{o;I<@48gKs@L_>-IHtagc$)*fai{XDK}&xg{_Gk?LFlyANiGt>+&e(hOVRU@ zhI<}`w<4@yf)XqZj-Ml{s}XHRZ6(rWNX~s5mJ{V%I$3U#){J2dMn5$froxhGz!o!S z`|c^bRnWV<7LNWq{3{odG&~lunGhabHP&h!#&q|x1-)$~SA@#LbRSg4oKi(Yij%6a z{x!BmBxe`Y7a9ltA{~lI-jwvS2W$%JvJtJlqK;3m<$ofkYy4jkV?Y$iIs+O>!&HZR6&gNy9arDJ9rb#EV06MqZ3thS;@Q|y1yD6 z##KlK2m2|{@9{F?-`NUj5KYzLaJxgOqPME;QjmGN=57cY+Bl@oi8Pcr{0mm~r|=tf z5~sVo$9BZ4y&ZVT_75@J&|9feHPNBf=n)a3chLwnuKibg)NzOpKGl6;RSpMFgflRb zso9D?Xjo@E!XWVAM_o7RLFbT;V72N%ti*j zZreLo5TOTSLWPgVme6&h)nM%shs$yg5+m>zdGZ(GH)HowJP`Uq7vPyu7(`!9LMy5img-VFdek9NPB*jR#pZV%>~73#rk2f zmBX3MS5lIHMO~tb-WX&(m1*>(DD?fI1;Kk3n}`+Wb2TL6(&54`8Ze#4Dk7!(&b~gn zc;gF6R;;juX`!q)fT!RLq*u6$n+XW$wLFK((8%zK$YQXB`Qu$}zVdqG)QuOo!!6EG zI1ZVr*)U1re5My7mOq0CO#sB}fGa=B&E39`4)SnEab)M+4)BCCy@51Z4P1IKNRRMA zCmEH_4R}$t@JE~02nOW+i~&u02MQz{ZFxHV)4~!4U<{!vBxLRZ;xb3$14}74bNZ{w zOdc`UL?MkaWV#lf-Y_55n^k0z!;ay5FjGKw25UE_VZJmf;vxLkmArVNu{&#)HW;i?(3`W;_iE@_ z65>qP3!IHG=sjl{Ht@Vq#Ax~vrjb8UEDJ6AotZ;g&wcNM5i|;oA3+(OLUh z8G1G6p*g4vR{(E!W!zHc1s3Cd_T|>#QaOTgo8U$&D!J;>PVqn?N~2q(@08V(=yuRzKzN`b@Z=EJ50V< z-$_wFVyw4@6MvSiPm;&%VUgmgNAe|$&tZYGI&-nQ-+bPDMDbdy$v_bB!;?pM(|{Nx zM!lYqGA5CDm48kL1fB>7m2?m4%YRhkMIU!FH0Pb?8xXB*Y?w?fC9Zrx(6l6GNt;fC zf>69vf6%^|9YW0HERYI0i#1k<*9!29W96Af7NXz%Nt}_rY6#e!Neq;)|x zxb3zv!&q%D(Nbzs;n2(IQo>1eAVyoW@m`xH92`Ps{yM z$RK4xe*ijZJb^9MyhNsr;o8??eA)F-9SnUJwL;&o3iKfeG}h~Q&cZb3J$%Pl>$`mN zSXsNB-h0?rwY!W&`glXA?g|VsswB#~K{asOkxso=rTIbFd@$m0=Kh$tFs;bOc>VOG zNWsGd0U=(>>LhI`7c%+Ldent|7g#`=!9l`{X;dU6@P^Ew$?15{8Xt_B-RjQP%rhR=S9QPF3vpk4&9vt6_m7vjZgx+$=UL<%6SAa+tkWhgA8ob z$KpsG6nP}rLYb>uRK-2duT*fyu4>f=jG6r{fb*H0ta|P3G>QJSV5Jw1!Z?zByUtTn zaX;`sp#TS(J%MSK*FVm|;ou{}cdh)2plZ}-*?+7N!_4e=2Lf*BN}3r3;C4Rl=@}dv zZGZ@D(CgQYX0sk_84gm$ggVusmV$yxyCApchh}LOU{CfBr2Rq_0-fpod@0tz7C0c3 zB>77#Z3?@1bZ8fC)G=Lx6qcfiXCfdY9KCV1`YNjF1}kspQ67uVj1UzXp%x3}-^*6t zhKwi_SXm%71`E~l=JG3|LG&?97iJ7>53(8Naz55Nq1RDU3zpQbekfZIc&w%*5)jpM zCCiC%qA4ng5gr%Kg&jiW(Qic4i{qe31G!#=sD%gBVL0}%RId%v)B4-3q3q8>S;j#ACL%{khxgm7xigNeT3*~W1FF;sHvLY-+ylY%~=wcAZH+Wmbeu7y1T zKNQ?v$%1v@;rFLj|t#zFYX&+L3h8{7sOo%eEqW{UcuuNCVUC?y_ zJiM*H0;tDGd0 zekLs4#Pd;qk5J^ts?fppX5n2_!^;SsUY6i$SBUNfAMjbIkGPlJ)X+tYR+H%z!qq3v z6yZC`WCq*ii-#-xLK{;}m|(_N;`MXbrJmg9J65uloS`5Q8Xt!gU{rYOhYY6~){!_& zvrvhBO`MG7&P)6aLQ&Bzj9}1($o;~Q(&kj;2vXP;uVCneu(eH(unfB&#T-95@YLMc zIulB&5?i-N<(OANBD||!yGbj>e9DUXqCAT3pUScVYlCj-080(p-KBK$!}R$tFK+uI zTT0LMLi`97nVBZ?S<1hna7MQ}7N$J@M?1>Mk~Q6OJ%vyzUL%tx%&aHH@D>e;nwdt{o&2QSc}aiK82jdxy0 zuu)O;>8B=V!i&I-%E}|@9Pd$KvJehhId{dwpg&wTv&i}}dtG~_`R4&)J$PJm-&Z)z;`R4Mk}Z#{hrUX0Ra(Z809{^S1nwyKwzy z3NJ`<8FnCS@=-t1v|=R9x<7Oo)@=;L9c~5u+8~G zX)T($m#IP~U_Z{Nz`|Q(1u~6k`4bARpCvBPNw&j28!i=B6D}A@MU{34TDA zdZ0?tYeSe2fo_^VvmB)|tld+$(N1b36Q_Yb?MT>Xp6`|f zsi~i~&mSTcuqof5p>j<7`hXs9$*}iFuz{uUT69tB`d`zwJxUuvwbz^U$jFqtlPR3s9 z^1(H8&lJ+r@ZsP>)M_qxs$>);9D=$JZ{?XAHaW|Cs(9N|jN3z+P%s!nQT#;cN<<(1 zZNB;e%gDPo@2UuS|GfQjoB+#4CFhP!vPFPVFDxm6IT%bWijY~JZ6QnX{1Dk`e$2{~ zq6G&v#OCcTAffCZTY;Kj!4kssFIgr2AD;NfBg+{j<1a_@I7q=p@L@FHbC<096XjqI zs`95kn#n}0o05}XArTN>Y6RIELKsBI%&Bs!2#CeBEc|{NWAwD1Mbh*U!x0EQcg^+6 zFO=s9^OkA8%_aTC0ky5L&r7HzL2m*5a7X;zW&*%96Igl{V z51T)i0QfUps;(>D@L~Oatyal(f9d*1!}nW7aR6NJ^>t;+e~KmS%ald#Q8TW(UQ%?Q znEGuquk-`xYv0TUZZvgM*#H8!$nHmY_W~0mQ3l@*+FJzZQdET;H)ojkm7`iIJ8oEp zR1J~i_(mJsW@azn3NF>q8Uj1(_%!zi?*!d4Qe|Y6*jKnEs*_doMozpQt{GSv!1=6# zHgy)Tr1n#`wU0)Hug0R!J{`up>51L>NbNgfqMM6WHZKnPsh@H?5F$_^%SKGcK(9WC znJqFEU|g@JqSFFKjgb1GQH!B@SexYp;6<-(n6#KvBWij0ygyh14FHdZnS92o&nT%{ z2xUSXlMVz>IE%RtK&X6euW#4Z-jQ3QnYbTC?cZ!ESMG!Hc^pl)wN(LIoTbcFTHZaO zU{b5em)XsL%F|9I&jWqGz{nbnZ|!$<{{J}OPCS>j4>Ocwu<`XGEDEl3?DO)f<9C#D z^4|P}Jj{hV58fb0M3>-kuC!!#g;R|?gKuz=N#b6ex~$=3)b0v;-hva!?mTT3c)}l)mU{(xtZ&f!5=W2N4s3*I6`>Ub#kkJRd)M7@ zm%e*)l*{!O(RP|i1|;%RPwFrsRaa|43%&3s@Ty{t6mOGLEK!(cqpmDJ^sYbjcGGNm zL{HP}9`v%6kZH_9D!Ll8MPJA6VMfw6(0+hOnt1iPy;Wd8iEbPq?w; zw3bI14ybVl%P;tG=o_5JkbKHB+3R3)hv~q0TG$;B-HReu)N_SIG<&d>ysD?QDN@__H2K%oXUn z27)%%|`P3cel!TK3+)PC>B z*0o=XI`u9#mfnjtbQc1x^EP{~+q?&x;RqUuI5HG;AFMk9AnZVBw}H3q?rOwFiMLT+ zm%cCS0u`8PT{SK}a$X`X!Za)8DF6}c4QEz^YX}m}g)PUG#R*u1Iw|BmP~ykhwg1B! z(BR_saJiZCNyFrQ+me*m$fF0qYCPzxM^4p!$1;|&5eS4|W9tB!pDq4X^Zyc7lS+%H zhlsud*%K`q=(RH4salG8%J@5({{SGyagvqnLA^f#fxa5fmMwye?2^0Q)5EGM!o5Fd zj;bE&C*FGLA6GFhx{x=?+q!Oal!11$4ws==YnI8=JGuyF&2Y#GSmhq==F>VP`KkDI z#i*s~4K*}1;T_cZFoTPWL7DBc*D++|HxU*W_`GS|Wj>_sBd}cTZs2Yv*GCLA19tN#9((OB=b=eO zr`7{4udUl%8C0VVP<-W3;_Jv^Wt%El*F%qp^I9vq_Rh0kba`jJ*Hw}83MfOrspnAS z&r~=CU49M(s|#L+5EU;M*BZ%09>Dk3?=!V@&TF+7$fV9f<~ONbdYJ*lSLsqwLH^s@ zRc!pZ3p(6BH$M(1q~L5CPBllooYsK3uZX82QLF1egJl73`x#;6e|b`7MOSO_OH9!FdbwPKQm^ibMb9xkNqOuKK~Cr8VD=@y8(x<2n#a)vp>gyT zdLToLfUN+pwJ*+QwiIQRN2vw&~*WHt&+JFgn*Jp1!YIv<_1X_Pf1)bl~)t) zB4I%&AdBf!wMca*u<&WQ#-o1bq{brO3??oxmk!7D=0x*4c87-sbUw7d|9Lik{*H)# zsyl~}2oS!XN9QuS4_`UUP;ol(S|^w4d3kpd(r6TCxYV!xc+s}AEzv#_gJK|PPaha~ zE0`efgZ=I0{B-JKlgo0qTZXHSWrE3SLK+UVxIZNJ5mU*#KWD`g`JwpKHH2hWaH0Rl zKJM)JZ9l%VPY_MX{l5U-UK@A7uguX(^f|f84?$xl-4$q3Vdf9NPp3Nx&Dz+3wJv*VYQix}}(1x7jldfXN~EW!w>#Z_;8_tRoz?=k1s*-ur0 zyXQx*z3~EE)rthnHrjt~&lP@L;~eH|W#Q38BFm}f`o2^)?ZmlgPi8;v&mF#w#99W` zd9IyZZRDi0<9nl{ksV%P+9K@INqf%GH_EyJvsjPMg#%w&Mg0Eic|RduZF#O#WKNxv zMC;L+_w3w$ud@!adKK*dg=7zmJPMFYVpZ()ifYXiIXD^7&zhrG5e~HLRgS8?kREQL z_&vwgU;Sok7~8mvTSD{_@xbw^&N8W**%aXLU2F)RDngV|P!akPd>*=d&k5{{e{HJ%0T;rT=9IW}1IQPnIA z!&rImPtwt3a+CGUPvab(v-6WV$m?!;r1YLUWC0zdEU_8BMEdc~#Yb#cPFBh#iTFR9 zPhEWv5GKRS<*}db?w*i}{a&5@_*aVw7*JnzzR^^|!+N2qusJ{ZkN#;&(U~eg5l0Zo z2F(fnhb~n-MLrmmidwSwqu%nkp1zBLz1pg|4Ge(B&&psmaG6r~DXF7~3KU5a{(!I1 z*>I!5#QZ=;SP`Tf^d;%5wr<>$|9kD|*LyEr6Bohz+L~gXd)vS22IKwqO=h%#0#7#J zFagdEYXap)M5^dV7jbq0n`%8 zw}26F$sB|PV#7=ph7h{u9!M$R?;#TG$+d)RK$_F)f1j#BY4p%&oa?t}c6lg4=~!%R zlU`#|Q4Ap>2KaBRW*i&yfS$=8_a51|sy#R)+fc2Q-pA6II-B0R!#=8PKYQQOtNIQQ z$5ktPt&C?@>DT^j$QARM6|2y_FZOY-G3!lohfqd|zhlyN(0){{1c<(lm)|V(cdayD z1hES25tmK$H6jPj9d!JedfCnE@WyvXQXb5JvR29gt(R*YZHG zs+#yWIWf3E>n9_ZrBO<0q&|L17u=@d^N@sFQ*XPy>{Fgis@!-@^=*?+i^pAFB`{VJ9ShE*b z;53e7H~q4)^Tu0@r+pcQQonv?6S-(SK-(1d&1VVLS*LaXz?wP7t50>a#u1UG9uv@D zwb&oCoccU}xlz@8ds)zc8>Dl!^-U!Dg8yyxvz~m}=ib9QzlU~%rY_I1 zuP@xkmt$-Ku6DhI59i>GwyS_GNZ8JP1?L6XTW5DbrQS7S@R#v&-Q$4QdfFz;jk{CV z9_7;C&a;%bY5y0&H^%$oEnjl z^sp4V+Fi$d%2$#QuKHz;r)sY;-)htQPLo6Z=Ur0NE#aV7zQ;?yyUHdB@H+(MY|WI; z5^Jmn0`K&7c})d?@RxBSad&CuPQ`Zd)yR&w%fL%U=7@2RsX2(CNj(x+?+@pDp#CGFd< znx2S{JA6hSqCp9-?W94G)~D%Oc)r%X=11e;Q=g-Mtp%3W-JNT49xDWI)8Yt4b`SM| zlR6wr+(oi_ZF^S+x75S3?Kw(ZV>~;ja>i3S;-&a4rDfoQ;kmc5&-o_So5O?ZlS-HQ zU0>|2n?8OO$d3%3nh!E0|BB&CE$*N{H8LwffCCGACbnUxRy3dT>4z6ZTovP>FSTYL zugT?sf(4C1|I+5QALH7sc0bcS?u9W2eiB~Nd)LDz+<6KU+m%L;@l~ahLS?{`jZ6`7 z0yha+)K7162Qsc2^arRxH2dK2Z4)w5b0MSdkfA{DJR+jVU_`d%BwSK6hwfm=zj{SS zL36-z&Dt#4*k4p$ru$C#P3qrozKdu*1~y%4Z?tMXR+hDOz6%@~YaP8z`Zel%p6zA_ zY9MzYSXpu!!EF$xyXzEFPepgx9ZhDa02b|Slc%!1AWdZ?Gf6O06V`kYdHI0kk^>c? zu9sZKIJN4hEL$Z=Ck;L~VM#-g)%kBg8Us(B`^>@Xr6gC3DgtV0r)gGRJSd5CQ$mEX z!QmI`91`R!kG)^(d|H6$YC!CF*ax|CAR5ljvFQg{v#Cn?60riGu2Hya{BIUls2E1^ zgtAP4_pa6;{Jil+)J{>jwAH<{Bj1iqbN`5TT{YbF+05x^3qDLfgMjd{!F)gw(>r*8A* zR7QB+?Dt(xB!01*&WMVZlHk=i&~g$K@yA55Xv1tT_Z6C?qMMooIp}XKtG`+jc#RUQ zsnzf`EqgNUy~MS#R%7AFBvxvU2q^o2B#TK=h817`qf-x?VlN*oj!K zb$m9VU*8`s4Da*Nf8S&VYT*8FLmI7-g-+cl+~%I;%^@NxE7Sy&kTjte@D4J#|#8bThO* z*zsyRW!YIH5-AmCKhjUrhScX|7c^x)@m49vORn)rV+G&&E-#v6~QnE zOzstho(%p>jV&!qY<}9O^#{d%O(olgblZNGW3J{vrKVY7ucl5>s6W|zWyIZX2NN0v zTujticRj`Sfd&QK^*2_=;zWcs!-i?g=%)&|5iQ<(H2`~lv;1=J3)fimqHiyL;3e~* zqn z1SNl7z=Z6OzPVqg9AxORKKKA1%*O#WquP-Y$aKEwVtuvtw*>`Lf+Oz+G-+QYk#H8t zP7x}3U1bpDs7<$Bx?aO&?Xm^hdt85Ag?)UTHS{`uOmwBiz7o$M={lY+2nrl>WZQht zQ|)-p#roN)6+|tge_ZxQbWSa$b(S(-*+lJ*LQk_kqgZ zz~-pd2o15M>O>mp{5Z?NK6+0&*R)sz{N3SF87@CtTX+>ppkmnbsgaKMTM^1egKRwXSQ({p>ye2hR0^X!~G*`4EP% z-i!W6m3EiY`Kylo>7mP3+|PZsnZ%pl2hS$o2Mn9uI~6frx2n1lRXN^{?5n`TEPS`K zgkS30X&&@X(J{`2Ys$DDeyHN}L~B~F+xa7_mNH)%%?;cv~2|JIE*yXH0q zk?&Or-x<)%Ozc%@y%zoZVP4%{7ny&acG{W%=H#}MLVqAUWYreO$jcUMl0=t5w2xg!gjcP5k7P=i zE^d36tggJqLxvuA=PN&~HP(9gUa#F1_#fo*#BQENZ?E}8-uAtO@4448oSb$On2jHo zab3DcuVFF8Zp`J3at_MpdV}kKu@cXc?h!5>`M-P5V6Q<2hEN5QLhNli+Zi%4SFM*> zie8s5lVzgXBYVrP>sn!dw~G*&Js+EY;9QDTQ?~jZ+?`Cl&pQV!6eVqex67_K-P=E= z8$VZkbsb9Db3_qyxm5<89Fd9wsW!>Hm%;$ONntyiJYNfbO`tOComzKpTAc`BGWjr^ zaCSmrv&Opf4zcxbXQ=xKTx!I>a-kOTtNPcX&B|x-sx)il9=3R*>>3+gl>{_UP1Oi@ z`$1+2l(WG2lD-CD+U)VIxQwi7-S#edc=TYLI7Qo^{73{^mn5CmqW zB&;z659ORhbqk6G!vdZvF%5iAC`J4~1sWiUUWs{N;T{LwxcRyzv9(Tzxid3U)bx2h z8EI9zR0f zJ|nPyrLLJHPP_U=8LNl6cQ) zgXLVbUk*W!zuPadCTIkWx{&}6ltR8EYquV1&t+5C?oCC4G4RlBEQV?n%}o;}|8)nS(K|dL<#I<2w9mFzCKlMU6wGKtB;=+|IAe}1})7^ZNET@`c>_& zXvUBG0m96E;dmS%eki^zth#0#@2g8d*O%9G#KZ$M5@(qqk+$cDtM_w#=Z?S!X6=-% zfWCWB8B=dJ-xF)KjpscWvVa`fi7OPzMgi#(4eGz6Ka8W)Rvmg?1VMv7lz#=lm;KQi z)tcBXJHXNw`0(dps?>{q`eTSY;l#YY(FV_5`K2WJFwLt1K-Z|m-KVDMb3=`b5rbK? zVjEB`A(VsjzPG$;vNAOCVPsh3n;_Mc6c(3Dkc!3^jvEA8Gt&=d+}YS)ynXd`VKC3d zg4<85P&?HgMgCuVZygjz*S(7-IDy~}!5xBoGBXg|f(Hvuu;3D$L4wQR?hptNJh%t< z;2PXr2Zz&nzu!6MJLjINdvDdPy8nDkS65dt-P65$@3q$RJZtSO`0>d_Q-7pR(gX!o zbgy=`eD^z45b`7l8CG2(ZEm}07&WSN_4GM5-gnJ9LHd)`$k_4)xkP$#_^x}jX?-@O z`l%CNX;tq=Df8_O^p6j@eih7IVpaLiXg`MUO=h#mmD5EJef{h2qr#7;VJ0vgfv^{!Azd>g_*w^uU^b=&pmPxwsxWB6?$8L=h;airT_ z2`jSF)2|+~!IUz2^HaoIJe2su?abE3R6f!d7KERw zt;ZM0FL3$!pjj8yeemA;-0PQ+B1T2%i8ueS;S@N!c6?B3zd1Cbqi#<2ajb0%w9c^E zj~<=+$j~dogLGbbvwA1ug7lbzKJ7?PCxPb3W=!zo=K7cwkJ+|%MLNz0J~d;zRE-LQ zpN_p*r0Ia=ua|tNJ6I}3un%ls5V{SESGAjOxy$Qpw zr83y7p?FV%D)f;S#YLri;py#J2Yp(cpVd}-DAG3i-1`?RO}dVzpXjF3&@bc-YnN1| z3HVa(7`iI-oDZpPhcEWhhh5k1kOv!K<}~=_2jPMvOZ@q1@Mym7s%?q(GPj_IeZarxH6y%I2deyqIy zzKU}Y`*u%d6*<8-sbdY4USArVRDN$a3W9+zo64Gqj#uvol^_9c+=ehYukZoT){A8T z@2p$A5Fc&x?Pf~M)?#?v!PtE*L9F#tMR;&0&f9M0^jm9jNz;-i}96A ziBFszOj$I`zvVM>&9H9RC@t5bBR9I})!l2)sg4!0Aqd)r)fb6t4n;xW^UbEcwzjwB z(YPR%i+S16ulLQ4vf4&9z^-;i%1vTX9Q1;!tG~H2@IppMxZ~Qc=l7Mi?Ur{F2Ms)KQ?MaVzj6Q%*LXvBTz|7r-auwh zb!$g;%l_5@4R|jL9N-hCvif^@Y=bbWnVu4U$VH!t!F@{ba-ZE!$JMRRZq3YT&;!hS zDFfns9tkz*EyvBpm01w{Pcsifqh4od(o5tOH$dE z=S46rvmj}pIBtAe#IGE*0Y#}*Wu#3;I$`_R-|6V~zqlG;y~5%@oHKfY(5=(jy;_FH zw=X_nbP#t~F5?CjUwK7Tn9{w*L%RLo!)91`cKEn^$MxX@o1pXHE@HiiRt7Vwn(EPV zUMJT>8+`jI{DVYt_K@WU^h&q2=8{<&E2_PloZRiS=P~l77jM||&c6Cr-K&Eh?2OeB z?4@DOFE{o|?t{c4&z;8cD=Umm|pt?p#!14kD%X>BDw#J@h;Y{b9 z;=1$0a{q{h*@9 zXzb-n3_VG=Rj=1IGbV3m9!s?d8eW5^hQyc#ClH4S8LN>QH|;NH3)5|qMU{|>8!Q-_ ztZG?XSQ;NqbEnN4Jv1M#;@1=2L=t#AjGy$dw&b;7 ztGapWgsD#XXQ+nQlNZ-*p|s$+7qz!I_QU(KMZUDY({z@6kQtVb?xAWB&Q+_--o z3l1Q5OP3QPZ4UG2akE7JGz(pLt5T}n z@D%pSnI2HL?bxid4J1cR6~mC7@O!ytG1s)nqJ>^|7f$4Y>`ykqF2mPJP-4PTW^Z=s zUiM#t_Ue02U_p~-zSiEtrXcPKv;iwy8u5qW0 z*k8toGgV56RC0s(Mg&ay72lKB?-5ObPe9)8_3g*^PY<6wYDPA?m#n6GX&YF21W*X) ztTw*skYTDRWsplYD)0TgX?_`J6&z2bGs5){zN)CD+E7T``J%uPxR5@&XfU1@H+)4T z!jC4)!u9f)e;u5Ho=>I06c}|oWFj?l%3vT%Y(-Wn%%_&d4M!bgBEva-dpYoBb(hztW!P4?tW4%ACFkHUlkk1 zJ3grFcd=<(P&Y(w*rtNq9&-LP%zuySD+)NvV)X%)5OLSsf6dv_PM88ZA_PHMlcs_s z9t$`0vu)9+0QZh`$IHL7LYvX+TVD-)oWUszie=R`mH;nxh0{0P^zHe+#f;^5%7D=WRzrX z@1dmHm{r^RD2Nfa(XtFE55HQhiun?7#T1PYUe5wVUx^GrN`3cjvzvt66SOr{f&D9%Ql(IM&)#*EHHrJskKTcC5L7DXZw^6yiA~~{G$<*gWjAJ@h8`bISBXId#K5ew_JlH? ztUWJ#k!~5Ik$SKR&OZK})NKMM?Ni;3+!m*ghPP-Gg_hlX@2L(yY5#O7t3$EsCh#(g zB?Pv!l0t^8XD$|5`v!A?YmL+pCyQS)E9%2)cW(MHFCfqxzVD}YG*W$@jyF*-ltnndOiXm2+R-NMX#4zBVTz^s z$o2I7c0f~wE?{pi27#RX<$*8}t&~&(Qr5mRy%-ci$v2& zQLgalH43TATNR(qRlbg;Pp}^9B&gE`Hr9jVn1W&dvXY(J;LigXFAw;K`VC_rWM#EX zowwDL$QcQBl*o&3Ivc`A1dQ!Tfu7I%eBg(o9gcY#n8A~@4>uJh;Ah%{>}Z32%EZmc z(tvvRFVfIo306ijU141;gegZ3Ch}B%`8%v=h+^Ix@5D0!WYVGi<>05LL*=7?BHDxN{kxAv5vv{m150tppe$xg@IchlNC>TE^Fr&SajoEDs8?$b45i4eB9enyQ0v@ zY}(x;^H7ur6?~{3x-Ct+KU>P5pe%rLSaVx$;qlPIC?dehEGxC^^RGF0Vw#+uyx7mRn>M3ct0vv?diAt7tIrT zp9m*pwol>gmPgEpsNc&AWB9QH3tu;K)55w~zP;FjxZwCLIu^^^8)0Wg5@=@#kd*Ae zEKvm#G6b$7y1>ZznWpygo8*sh1FGh0$nv>6bMMltH$D$~uF#HdRG+P=1%01mPoG0Q z*X1_oGF8igDoHP8{nPTI_x7PDoc##yC(n8Ft?39S6Tp1IamNdl>)S`o58|319}V=q z0FiFhSN?tvz`W4qhjNhpGNfg_mhH=Xu=*`x62)y7fH~bqo~}olTCZcpMba?qeXcHN zKwih7(Pii{r1fE%{L7*0I8G#e`MuE#_;0NoLB^bqES9%1>kRk7edecc#eE^z)1S3 zd`e7O#PsRNW6MeZ@oZNL*UAj<^J&hjbp1j$ngl1?VVpA+!0U1X6rOGxV55~h`j3k< zx&Rwp5>tAv_G91PSE?pd1(qsPdT)Z7Vf{D=a%*I~bC4>)mMTVG-T3ZzgO3dOamAI5 zzK;^|sh=c`YgH{y7IKD%J+BU>xdpx))Vn@CX4PN5db-}!^cgLr^4QuaGN|8=`pYaI zdv7&dLAP>Bz8u|>3+lJkFMN9A+Um3n9uux;@QYi=gYGvFKX#J$Qo8S#ww*PYQ@Nj) z0vGP2JtWrmJaoO^GJiY~hpmLGF1sJ{zqNYm=?S)L-Sy0LCrY`&mWDkHWz;<#1#AjF zfIaqK138R!Zyz^MDLs%Tt_)i5-cx)F#~RBp*F5RNta=o?iJ61D zys%gD5yVE+6BSct`CsDeLdUiW{2bQ`5D%%)hBnodF!37a%RDPt&0@dm*+GXQ}{GesuVT6)Con6i>L;Jg1FzTE>PWX z9n}QzaOYL)K8&jM;JEc#Rm8`4A%)jGwIOlIl+W8ZV$rl~^0M;E#@Y*59z5%f z3z_6&il)I`EHKt?dozVxjuzXz*K+~dW(pwx-k=6*h@g)Apm)y9xE+rGiha-n2+D?FTe5*=vd#C-ezLZ`)%Xcj=68}3iNmCqf`2A@4KsI zsNvIb+s5zFwp%jq<+q-RY#wh`#5-=+r+vZvyU4{aNA)|d6wPk+;UKxc zz~m%fioi?wDRs``iBi}ll?@b+WBiz4(wjq+NYoKYz4aPb>zgjEKO%%D&m7fzIw2P8 zKtw-Zi9k1~c3Q^l2Y(U&_#?gVL#`KB|1@<>al*u2v$T^M<{y&yHV(5+q*^6I`4-to zbxRP%Pq`L;$2<3ro4jt7bptiLoOUE0<_vXAl?>`?dG;1zqq-iz+=i}LSc_Saq@Dy) z69kextui*-QbKg|GnXxrF}2PMKfu$kN6!O^4eqO5|2#f5`&<~b_z)<$fxXW*TrRJU z-pgCxP!COBy@%vBn47F$G=ziQb9FL)VZaNOnzi*!l#Ti#PHN+()b1)#}oM2l_-tdlV2biGKAB?S#-fdopoq>l{ znX25$W7OyJ9-d>^+k3S2*1fR)xLjg8+g8uz*5&Urj%|nSe!)xWI(^<}*P$)sZ+tES ziDBvQVS7e*w`?5HGgFUzr)=HxB^fn4l@vKi_qj$wHImcse!qmN=4$0U^U3&$Z1jy2 z!NQ4?b2}oflf5+$dTz}nShY~{ZrMd+ud@v!9=5)H5%^uiq(|#n|6^SEERSC%+R&Kp zw-zrNv?^gv%fVm9w{~wFeH}V|&O4s@T}6LFQ#bE;MiCIASz)QpIVhLq)%6;`d^RK)tf<~LSCvdd#@cy6TSPlwjd1;)8$QTXXiqau0zRYkmFW?_Pef2V=TAZD&Ht9_Q27N#2OIR5#g`c33#~< zS!W51pky|8s7|s3c@ml&nEztZ>4EDw0kME+I;n9jBXRw z2How1J!a_Ix!5X#qBnf>w(i(e*OP2=kZQb@vi-`(FI$1ZXUp~Y9kWekS z*w$Uy@2}+&!&j z8PI28?5P!6UDkPY_p%a(9g?Wpl`NTM+yEqRp_(ecp02Z(@MVXzJt4&mMVlMV7R^@I zqs~6#(hcIW&&|R8jxoe3%wv7XU!!Jo>G2#lMTyGmJ=8n(oAaU4m&19&w5j_DOy((9 zV8Q}zjSt~qy~c=^=8H%ZoUAB?tXeZV)SvPwx0dip4QPgEs^1-kJcpsx319Ovqo0ZS z=-TpqoT1*8#6t|yTZ3f%>I@;*qtobl57z7SWN`76%_SW%!IHl%tDPqFRXt;n#=N|w zycrMC8=E6*CeYEl^}+O03{A~q$6OLq77;G}BKR_67Mx6a(@{XoM0Muy$kN~FiPT#4 z=gp8`H9J)ekaEy@-;BvO72e|aVbRpB^Lr1E%x|*of`Oo^_frddSM~+tCGGLLQS#hV z3_4g^8c?sSuMLq}#+cTOH3S1Hf2l>E^3cei8g_b@!o6*U?00;O%DB-UdCs2(Lz;0& z1HOSgn^)$3a$>39`vVDCbkAo8&o^?C5iG>;Ml}>!_m~@LOrf;gS#?T~bo9EBV3U1A zNtS}dv)M<0qHHF6Em7q2G1b;VM%?=010QM8aamg_DyGJ9`V%vHj?pa!hMbhHr=RNh ziNp#8_Sa_xgSvZ)1Nqc->ku5)ku5GXf`O09Sv&Sjd7+76koTu1hh`U+UrG!gCLG>Uo>F?4$3W?=yE3+ObCFxM z8bwf^uE2$XkU=cEd-lT5w#|~J?LPilg%h_`^xA(BpEvarRENH=qNBiNYxMnMjQ^!p z!BF?Fu>Fc?W}E%VW^)`hO*FtaKRmwsQoH3|cx;u@dU(BF8vfSZuXwT93ya=S-GF zSzcw!EV;f$F>LEP7(qhJNj+SaC5WoLSUly$9tNRs%6>abFkd30!qjT#2@~p=%-ra= zcFMGn?rU|azZ{L@m?-RZzu?4_9FXQN4Wd2dBp8df0l&k2Ifrqst@Bhrc`X2hN1BDI zTvb?U$jYWhlXM-t9RM( z4XV@tw^X3UomI7ye9}fvA~WF9sjU1hlcx#t`F|q4U-ccn)0^*J>LhfHov*P5Fu zSFpw^m;5N+m(_N|jJwK*OQ7@dzmQb@!J~}QBh$qdpGr8SB)`YGzKM9|QSKuq&;P@$ z&T1}B>fqwJO%1`26ego%$v#YV+rRLmaVPs%6nF?KRgVPS?cf|B?F5Uet|I(Zue2W* z`io)we*Vw$2a~luJ|9CI2&BW_uSQil1F31}qLQh4?CqY;2ZGxtGUGyIg|rk{ zDZ&ix%in7N`qCY-Xjt|QfoRx@z-?T}7e088g*EV}&c9oaZR-$Gxy z9{%R3in;y67rn(fVGd9md~dX%Bk!Lf1s$l5t9KE|26Pd`O|s+yL;cEHbR46^)PS*}ef}_s-e{?=Tt_U#2C@rmVzOm_0SW>`Ce61+alAi=Dh)mnj6CQ*O z{mIA69(dBJqM8WzeG$?wzs<>P$A#3fMJ|1Lpk771s4<^~;$DlV6#ZG~Y1$RT$rPbE zaATe0@p@z-_&9?5;(+h_7HBVtoH8axF__lk2|)&zFALZ$GG-keW;9YRFNL?{Oj}a4 zs5+q`nks~SA@i=xdHroGzSracw{W`qdLzD$<_=LtkM9j4^Rs6RH?k69>X->A4pV&Z zq*m9n0j1topLZNUcyKWOun&cdYVqXX7SNe6)&+!~k zsq`gsXDMkgsXs4HP(waiAIdo^d77o7A1X`~f9H4jYd<(CV{tp#Ylm0*=_VWZsCkxL z_8ZZ>4NC%8Loy9R-0k*+AGy<}#n~PcYaH@kjrOJ22gMI#H1A*KR@>muGWwNy>~}-c z+~KQ?q6n37rbF*;7e}tENN!7en|9AAAqQm28gP^$rVs&13U$=CB7b&mBIObpmi3>S%t_48xcHRAkReFy-gLV zSZ>IDZ5+!i!qoOJXgS1Yr#Ar;Ai_(Tb?A~NU>rYtf`~o$Rc>@v9A5X<2G)LsS~~QO zydkkN3%G=-#R=hxy^X^uvV6hBfms$z{c!+80{HFdFfaBpAZd*FyG-lQJWg_Xo!OJ@ zlhx6*i3qx~JVsM~cD)Ib+K5VL>-4(|2(7SC{q>HvZI%WCvQH8Y!K4=rSK-Mqf^1 z!%!nN4;2GX(JCUEfE>PqsXj!D?gq)+;rrjvXS8^GXca@V6aR79-(8Bi73io;!VH-y zMOGHC@@tdcm8tR<7|n{6j&7yO5&?wc3#W(lE1<+}{ME((8fTE{ zOd*$_Xf}=(Zan*^-$o6mpB}F@E|&W89@yp^T1W7+CYHUz9Dm<@i=s92QNFBMS%nLZ zG9PbVwD3Xt_%+ma$)UG~1dw#__<@VAwr ztcPqhI*S%)d|;Q26>XnUa?BU9E! zKr4WW=5X|}_c%{&Cq6!WS_C5hy)i|X+p9kzq=5K8Y^eg@d8;NZiHd))AL@vaX8e#6aL<$Bx~vW18iFgIzMds zX=v)Du$j?968FbG*6-S6zGE!_ySA}!ioh=hDG;>HtXA*r`x1Xvz)#r2B(@Aka-kSV z{t^j&iN6!xP61>qnCl#TE8V|V{ghIu*sBCh4Ncz(t6)1m=*fN<4z8-CZ0|S>)I%ai z4(uQqFd?G4jj#h&!|g0lb1}tpnB*7`$DQ~NuXjz7l3r>Zlr)RZ<5`|pz2R~>dGz&t zSt7)-VYuzjAQU2NX+!SaEa=yYCi=?bD)1r6-UXo z2)|)W{9078`JsEmEbVx8lYuJWq>~+AU^_J-W;+A%3YB6=y<(;(6oak?^;ts)wKxzY zaU!UaIm`G-w#cR{NaCs0NDEj@7_~wT+~MvDzDPhS)xcLEsdXw@we*6B%3z$|JknqY zU9Gav2x>_4;#_vG(&tC8M^39E=;Va^@PTBT`ZNB+8&CHGZC?^~*2n{2NlYi{_Kt zkH6;iIcs$ZIEkE-PlvykvzwWT>tLDQ5RB72X$+q3#PgUn%W9|!_N=U{(%|Jav2NcR z%cY_vWp8ZQ;cbZ)5BuQ4b%Oo5p?Zh2lg43HkOb=D#ENG8!XhjN2E6(t(T}CWGij<* zVT2Q@4BrOYriNn}EBF9k(kpOTKysrlB~(0dP0LW7*E9D*9IH9nKQIj|KHxz+0h#$c zhHEHzI7RfUWRK2iD2|kgCxAJMt>H6P-zvqbsLJEc{9i9u4pKE0@axrVUg}k`1(X|- zHa`LMBhrh&JVnN2C^7e1qLABP66NVVLWt0DH!5d=Okyp*Cv5j$6K9%90OhPqEPm}AAc_pI0S z8u>M1+3>wyqZMAiEnCg3hYot4Ri|+A?RWmt^|LgA)&3;=g5>%4*!I&{@h$#mq#+Px z!^}u;J`#5Lm`%Ht{j_GRC{6A69_HqPG~-m;uo&#f1f&&(m&wmu_~q>+ix^-3>la=| zLY~NM5?`0r9Ny6(%DEy>CO%Jl7%)e8TmEwGF?Bg9gwewp=S}fVVakiXE_dDvi(7;= z@>e^gvhxCdhxh;#_=|+0cMX@M3fa_L(src}O!t66Ad|*Pr6e;0B+y?%OpnG?g$EHG z`c5?mXFC4k3_B%YN{rYk~L-9tr$QFS0FRe6){xtgY)hBh8yfdayblv7AF&Wh( z(>|X~H@PM;Zw<)GLp{jarm$pHerM=+9*+QCL#az&%Rs-7^=({hEfVZ9i9>TSlK6GB zSKbMvmvACww=-O5>xsN%(d$X_n*DKFVnO#}KId|vEik+Du zfN)owNyl>=D`4EieaT_$&X>n5GvG*cdIUh!z~;#4CDxZG4#e##XJukhx-^5H7u7^R z>R?Zcb9#g@k;Waq@f0r|o~_VE>F!I8f6ZzAn`%o*rxK`0X%XoQX@(bJ$qLlY8~Hva z^HpQc;>$#=w)ZJwLZ3OsMFy_*N*>(61ajN`;P@q4Z;#drto#vQS{G=clt}d{{}H zGX^KqCP=X{Xs4OL)UEx|!Ez>>JM}@JzAp6Rs3t@PJSufc7*`exMP&Q@ znPoJI>{nt>#Iio^09qZ(lz1ZR-6Hr;C6v}o&GNPJ7pPBXFcOB~w*uJ9Sy{5xovL+# z15saoc=i}vGC;YcfSzuHm;6@Yt#|JCp})xzbVR3h9(3Fb3rx!1c5fnar)opMNfZXZ z7zR$+m};bGk+rQ9ts;LyBT2=*?@Cq9>1oetf?Xy8$ol#K$b<4Rhs-st1uqTzN>@hp-h()R4)iP9KOpt~9a+oR{MASwbjS(aF;m=gM0-%ts^PyoN$St1P=qKLLIff-Yy=;8*r6}(S~gE?%OjN7#QoWl3uz#uJrc=jMm zN65~#s-PF*c7=^)Z<7BIh#)%D>rp|u2@QDh7fa zvIc8}Rs%69wsg-KMsJoeST7l95(Ln*w>1gMb2_W|5=q!O`fg5X9bNJ+|{3DJJe zgG~lX|BpLkGDVTs&u^(7olqyt2QSG!FsCl!VU188Kpy&C2~>#!-QT+;Z>_^OAM@v+ zt!IKTBd=nq^uXSvYJ;cgAE#_C;8nH0Twd5PjxE}J7RAtnhvE58O4{I?ht83VH*@wY z0tG-Kc93RTDM%~RmxsxUZEj2&O^>g43+`FpEf0orKwo&n*OI0_)?&syU z&6)riqEG%xVhy(&NgoPUXz#eqA*pcntfZt5;_G7PZr#BCLrtF%EO2!Y7DJy`f%_BM zL0`p_^-czv?VLL+w?!1sWF9c-`ZjVgJjy{9)iNP|ekckiJkPcr>K|n&=}L&)c+SxI z46!GkE_NqqMZsM>-T6_fg1zboY!-7yzkWYnMhtjaz0Pl&h5?=I>*EL5GiMTm*^sX) z<^efy1}e#U17=fS*`J|k++5F;WqA&i5P()fei`8c#B|a8CAO(SaOQ|qHXHg)JmcSz zIs*F;7JC8ClX2{QhfeC!Ca+F7DylUCaubKituE588I*>H3a8!dK^ae!#-`oglf{>y zqh?#JRvjrQhOi^ zB*$o{zjPgU*8er8qGY*6t?94zXyhD}0k08HP)FU*J70c&jffyX8|ybDo%TspVWI*G z#AGoj-S{R$OygWxHB;hbw)HL)1~Qm;dpq_@*xcbT*NdNR?yB8#`_wiI&qGs`a|Eu_{fEPJMGCd&ar>&6HJM|afA9~g)J{4K1T@+k74Cj!;ifU zCOzO3Qe+Q%&Tvi;SzrV<9Pi2{Iq!EHur){WQf){iGoVH%qVjxcQyR02cXf0k|rfFbo_%E+HQIkhErEs`2Y~ecTIGX}PE`RAHcS zsH6iYg(I#f`lrmK01_0Zy@wsBBI=3LUk%FNDN^rRSbkfIipz|NLbwa3C5VZjl^$Yx zNh=>o{8bIp>e;tzTG>;s=&q&y$9G2H_^(1*kY}o*z&n}8;OA{^`O6@x72!7&zPe&n zA#_n0U|z___7QFG^d)H7LoW+CJMLux!1wdXHW z=y?w2kF4)VfZ;l#Vk{Pg_QwQzGPZB2zL(XRqd~bs*jJ)4>LS&$wms`$`Ltlb*CoNt zHv}*ty&fTQ7E_2gk&bDLMQ5b1jq)(_st(KGwX;c_rAtm~}B*s*T;c zeyB%HQ#9{Z^E@`SPPvxu@4*f5xt`?@3n5 zANx662pmO(j&5x+hT+Q#VlCjW8O_iwXjxm1NzE~el^uOwt!MHj>HM_N{@_p|R$?HQ z{E3>91R!DP4M7#J0hlXJAwe`Leg|+oxo>BO$P65FIby_(?q3v*G0odszU=93dw5JEDgCdhG23?f7S%{;r4cNj~ zg>WkmTY?_@92jc2E>%HZBR*eCM2xkZmw{7qnQF4olYP;hX;$8N>RHUW@}r-ay*iW1 zLu1uX;iL##vAQ#fO5h=}?X8=S*hpV`j7u$VNKuNDoeaH6hFvPdvnW^^qli^wU;b?* zE+7Z?ntMdwq3pW3m{GYvyimw2ZK=<4O6{H3%gx>|vW=wlz>r4*5moAiG zkky<^7WSFSVpnL=q!J{E!K}?J22unNEWqa~$)odUDjmU}uM3HTbX>bzkcsFdjRg{e zdlLOO^9e>P6FZC-BgO8*6D(3;$y$(iV(#@V0B`&+@;LQecCaU9U2_IVFOvPZh5o|5 zn$ow!uj#&%kWP`FXPE(H z=xi2J1uDK#j1hQC+$JQzUonPR3I%3dL0UvY3MV$_!X+Zzs;=^SH$|{MV@f>;Rwx~a z`8@qttU*aa3OADh)bcv;0dmSlM!=NJ3?!;pGmxqpv4He^gR0<&K7|6D`y zZ$$q8OWyzgudf@42z|ca6Iq(0`dFF5B&>zKVF+T+Mg7Z(03Kv7{BSX_e^7kWhG_3{r|GE>B17G${@%U`gW0{jwRoHMZ%|Re3Qn6d; z9nbtPO+Z~`CW(})Pdq)t;Vr9E#f`7Y=JV*|%Ta#G;%&W{tsgaWXTz=zuAj>i?dtHN z#@_GsFyy4c+T&Z)|N8EA_o1YS_K&A@ejiJT0B+JrGngwJm7(wVTZZIG=1z>pVN|4w z6d3jQmUfa&zzb5B5F$k0m?50DcO8{8THY^KBlu0C6s{X1%Xq~o~~CuX@$ko#r*!T`QRxA*2Qz-Iqm|I;|&ui9#__PqIvEf zFWShO&548LUR!^be)*C(lRvnhB->q%f*!BxT@&^pX8hdX+L@VFH=eU28-F1h#0<0&c6oqOhaxZu?ots{>9I5 z>XH_d^7SN)z+JRh`@_MSUXH)?BmUm0XgT0UE;GL|qNYCgI5>KcW7*9cf(ZUvH9?;)8*=2N*F*O9|@0 zxAXJzPWNFG6SRceY{oc0pYCsb0n3Y4-;xiuyiEu`sFSJ%wB2aJ;?+p9Zc6U3{4XZ< z#nHpqGyH3g>hHsQE9REH{3N0MPT75l&SQTpm3EM$KL5lnh4EsC-1S6KFPI`#m! zf`*2`-IHy79)a|uPDY$oTl^urZ+)S7d%jn*qB0Tf^$C!?Vi9K@hC$@ii#=1~QMPEW z#fQ^nUy|&mDk;_Z_>Q2`mqwt=kask~h_)DQzzYraE~NXG=6MG<6<)i~%iB1oWk-Q& zub)joH8t!awf2TDrHce$k5b|FH`dnH*}lW7*q{P^M9db7&xudkY%TBd)H>?Xa5+Z! zS*(wCQBd#j5h?($)6TdKUwafoT7-PpjrJ>ZB=;&nVZUg)j4#=DGlzcBM9@MSE_|l? zuiea7YkF?#o=I`uy zu|GF`5MWV{i5avb6l=bZBr7v zzt5|M9V0a%ki{5B0>JzK{V1H{3`1xByO1q1S{JrTZbnssl9o6)52(aYl8KT1Io#{@ z1J#Q9h%U~esinR}3%l|gV3qv; z3yB%4{Tnw7V=Ds@*1w*?mQw|B?90>2V}}Qc#nVbRC3*Rk9k1VPfVzz(>QaIB>-hvZ zaZj`P$1TK{fOBZC{X1rhuAHAzs0dHpVnn3&a~|_&0mQo|+Q8^RvTtn1ROr2g9r7%V ziYKBr805eGCEu>LibV=hK;SM7#%BnsZ~30r_b1>E^(spZ`}%wN$@Mz|Th0S!;QozX zZDFh5UBi9E1_9sZ%^^*F0cLTtwffdeJNCR50M0zWwZ3Ivc23h!1M#s^_Va=E!|n&* zQlnIFp<11fT-XSC^FX@(NpT!v1w1{bf@CL&G{3`ECo|$FL@NcRZUo%C6&6mwKbD75 zX$)HwWkpon^9uWjN@^KWaRamdOYgF&zv6B(i5Ju3S};;!y-QPy|N74f)GLn@>&T`n zkG~&s?!>QxV?-xAg{=QVE7&Fy1E@#%a{6V|GFkVb9XNg1UZRc?c%#oSo3|8*8&W4*tQOH7;psgSMn5>f{hd!{fX z?GKRtsG(xa#u2nMgtL;Lt9*u-io1d4{t*l?2qAnQYN74*Js|!{sdL-GWn*!2*Uw$Nm$^! zI&xh-71b}YA@O3twBPdxI6EKx5yiDk0i!Bm^iOA3c80}%UHequg7!W>^2P#W305J= zSLqWE`5)h9{}t?X;Fjqy`&Y>Khyc+!NATE>UcZ}@sR2lq9NoV|MifEa|DPt!geW6Y zQq43#B0#Ij)`0WSvdJYkek0Lp)TLjf9ShXI&I9XE{hOWppBC@`bTpHwlx`wOgDGfM zlGOOr8RPMNk~ZOG#)*8 zMnXb?B_Sb|yl|d)C-kknD+vjUr-Q1hu7;{AkFGnw*1^e!gv9V&avG&RlX+_E!smn! z!}oVSzC{G=G-G&4uN@#VDITa%e9>UiJx9Y!{g~aYAF$n2?;(zvuiv33*;HKa?$%`^Be7Vl7&*FmiY;^5#{RrQa!w+bj5j#^ zNkqhWRZR`K{z(a5kzpWIZ5vK_@0q-BtL@Yqm*+P zRcbd7;lO*yc*9e4Io0Cizt_52g8g_^X7gT;70#z{Wibw&yofCS_HDZTA zCqfco_r&5qE`KJhA&;Rq1SPhI6v@AG2#d~+=QOZ>QmVRhje(`{>b8~het2jgD2^}? z;+C%sN@KM8fe#1vgt35RggZ2LE+*y?%s4JPt{#Wy@ooBSg@+rPY|moE;Wkhc!$N9RfNRmgMhB{ zhp?%kVS5Aa?P__YyDvafw$@*_%n7Pm-iKmn`o^iQXZ+LL^fxo%_!_Imv%ugRqNHKL z+-$)-m*}x7Y&?2#w1w(oJdAIj#U)tc7(oNFuP!m9U*^1giLI|(eSk+fsLD06`Z~0! zBc_I{&hs{<=|Ss$1gpx z%5oj$+}B%4{aa~eNJK7?e^R0DCbP*s=UIrzB;)vTVJ?_IH&~^JFv4?glQLXIuA5vo zmn128{|9LuX<4YhE6v=w>>muiq+zXWX{6$>&IyJ--(_}Ez4SJ0_tLqg;A0+(N2Cei z`q!MhFI2wWye8evK^@%oQN~``ldbpdUM}NT(xNbz`;d>?KgA?y6+>-5-uNkAO%dAe zDr(DiF`7Ivq_FMa6^p3)w3#7^Aax3@JZaw>=JwkbQ?CZTX-_jvvpJowr8NmBlM%{d z)_$w`{rTc~SB^UQIc_dGtZjD|Yj$7wN(Ww6A~O#GspeiHCs)2t{V_yTP3GFI z_qRIkb!a@GTB81R1x+FrnWk348^nu#OO#OR@PFhPA zQMlp5k_#_rQ19uwxY}5(94jtXhqpMweI;AOl-g9lRDAxzJf%Nv zvuHC{Ge7Vy@EVW|$AhCL3k&IZ)v97E)2-X${+ zw_Oi5x3{j#?sH3Ns}EcwJ!ai*y5=AQyX)IJ`@eiwTkQQ&wB|oZhh$l+T|>ZtA&qeX z+2N_MxBLlfv_rrgX0sP&rifRFKtw>3W+1tea|=&PV2gK)4^|NCkNt@4#9ll$h?skz zXL+^ajf~11%OwU^#z#zFnbKG~sEepiX;x{xsmiF)R7O-=tVIm|!qE&bnCUMIGj6jW zcp^T$d<1(0c?3|KR_lL|p!WKK+506muLpS#?x=wyKX&MM-tQQUq>E_pNbVr()a<0Z z@rtpR@gAeyjj$W>39l0t6Ot2{p2-L(7Wx*l7aBRdaL`@(!GSp50Q|^>Ai1nR~40RXiRWPe$Hqyj-2JJ0c`YcRBRk>a7%ucxGz!m zx@qF_$iZ0CSK0C#xoVR|!xXW_FDC%@B(^?poBLf)+tb?V`sS{ z#oVO}pP?4HF0QS)?U!8aEz>MyUUgV6TkBgMj2gDewAOX`PCV$b25W>1jE=WSOnJ6N z!=f!;IM==|vkYp*hENQ)egD*9Irwbu?rh}*wXKbd*X+i-nr~iphe8~$tZY4IZD(I} zNcGkZ(A(HK8ob7InGFU(fe^Cq-}@Ge+6~l!FejJ*|I-4Q0%1FUyNheD*XUSPQx#IL z7+jemE7O^inSV29JU6mExScvbg<;zgn6CQqaXEflti`|@u!Ml+WaWI!@oE0q+-*jO zcm!bGDMl>xNG(6!YlutNNgul18T{;l(b2@=0LFB0Y_D(M=|!gw1o!WXzNwLzO5SpONdueirR_(ugY3dLLysz7OCx} z>b|j`xzd$iyI0@L7FLu4E~Rxj)s|Lh}9x$DbhAl zD9U8;LUxbre)IKj)+PGT>ays@%?C4GMhjJZYo0?BIcu_Dzo24;uYr|qpFhgN2jVev4< zxNtU7ZnB}D#n1n!VjpvNR0GSKh zuP5xCUnja0H>fu0`KPY994T%#^I^Pa6X8?xyz(#P$mG@*6r`Ds!`#J zanaoKJCi7voso_DeM202%WMK+qLT!czz7^l9^N^Wrn_}f;$jhPEo~uP4ZS1%0>{Xe z^{bLsfd}K8>xp8hibb~qbPrWrM7qX84`k>*80gPM2n@J=NU^8ZCDHD=sJWe*T;5?e zF>q^WE?Y8dE7Kz_Gozqi1RCpy11@%RU^Cm)S~@o%dw?CmD8xS$DsH8#qPe zS>?q~-0aF5L7OICrl!Z2aSm(yJ(96CMIw>r4U^7O=0S944bAZtJr#Z{nH!L8q14jO zt+zWrcRH0jf~xV=$0wHjPImkWSGDlXmxJ}B)1b;E;9`>2#&arcq$HY{A^#I)3T@NC z)~^9}kJydFvfl;pc6_j3<{xMDf3wPL%hDL4x}@RBa!^6L63s+zZ0nq2JtEW;0vKf}>sJw@v#Raf>kqR#b& zzwjyHa4LhF)fCr4H(ci{2G{dFLN!Aj^Gxyr+H?HlG6PTwsHTl(lkRLKV3J)60NZlB zLq2-G;ylgUM{jSxTYsCWCZl$$cH;p!vi>TZOZo~yfFZF1Tv9pYue_qN^gTN1)A*h$ zv%}g&R_-39jGUGo!*MqP)Ap6gbbtP2?Fd^pJMop_Rm(kl9r5KV)=M-uA}>eP46-E~ zCd(yn$!f~7x+~Qx)bJKmF5MsNL}-=^gX-_=4FI3#KO|&~9R|;KG$5s^0WT(}BqSti zrD~*=n-1%~5RP0?hVbR=!p8FLW*75q!<{z^c78mky8H3Y(qH%&-5vsF5*u0u@rxnp z-!ZDFb`!n@bqLrcwlofu;j5GFygy{Ft<}Poz73k$-&pL=n?cmapR7-5(x9S-P39QS zdMCc)k`3Mr zMG>x7Jbm?YH%e47!sPAs$Cs^G3z!#@(h{$Jc%9tBXrNnc@(Qu zd#$3k=@I7Y>{XMjj4VLic%7Mdv8%{T;*Q(v9kC&a^2a~r;ZlH(Q$)(Ki$Z?xj)yFrRQKoHDe)ruKt|g_kz6rL>hWlTb68LVMRToXQuvn zCF`5n9;R#Hq&S17vX{{J4IM#7O^^2@y=tZ=x--TdWvBWaQ5)NcpUtu_2t|v|$k$`G z``R=cQZ32#G5hoc(^179?|1a2+WW$gvyT^_apeT*Pt4Db5q$G89^9Y6UcnMyB|a-V z$u5a*?2QBat>!%197oU6F&=xDPbmB{unE}6yG$}1vJj9G(yQnGKxS=c3uH`lX8~yb zy?G6*a(b)z_P)kjIWq4_Tc~GQDoC+zv7!(kgM&|%j%;x(=-@8k9h&%#0cZkv9~2yH zGie?1ah0I{8n0LPxE{Q>bRu!0`d*C`L%#MlD1lAw{ih{M%OzgM2O8P}=N+PHKNuyN zCS@k=Jhgw(RHC07Xn5nXS9!*}hRCqoo7t=RlTAk-w8LFO5zILE&}Z$Wd4fo*n}zui zw(+aySaMQgU)WC067&6CZ_A_Wl-JbH@qZEr(?IToa}>*uab;2Zi&SI6*QCqocC_}S zC{{I*>N`X1t(=c&c`2g8yWjSP3%n~<`}rW_!Hil!=Yy{Nu9Yr>>vK;wAF)5lK|q>7 z`#gdanUV5uHA25WKRAppP;VSX#bzt!xbX^yW;u90J4|}T0-TK7#K?Noi|pOh(OK4E zQMi*Om?4-WBW|`=?OE+~y!oRZzfZQ(&WubR8-EP(cPOTIqc9(EPlkkfYMnM%milK8 z(uHP*9X_NBi#gS57%+y6o9MgTsqU@Tn7cO5TnB>>PJEx}f#2{n-w5ed#i_rT7gkh? zQw>0ZKOb=J3~}D#Qjpdcdnx-&$@r++UeHIuW2t*N#Exo+FQ3%hSEsSr)7M7cN*Z-{ zO`Q8s&iUhyf#l9w2u@RcN2#0#Ar889dJ9@~*t1)O&Ooz(OCjXCACF+(tuzmUFTd6?qRMEs5~Z8u5q$7={F?eL(%#^rT=ij6 zS_-CjM$ZD8EnkBmq-(*MZHbFsyO0alUKe;Xpjia8wmKVh4{ibU$uiDw#kk~I6li?* ziyir{|Mcv0=rpFB27i^4W?sOb{WOpEQJ7Vplw|{c<;?vWQqPmoH~ByI)pK7EE4w?)#kTwdV#cyHmyk zp)1auoRssgn)yzd&u542ciA(!>Csg2?B}tpq&UAwoaCsz>TP@!L_ZVjtlc+W?}SWQ zMbz0@h!hu87`*YJ^9yTRMEyubDPMhb!JSU{q7l{Dg`r5p=(~|+k)5y`9Z+r0CmV=@ z8t6%GU~i17yThUS5YSxaC}nHD2GhlD4pOQWu0mVhL4_~wU|`_mDqJk|t|Y#; zmFaB=84pcT==t3XPePtwphMrk{Xyt5=@(VjTy6XF=f9I%bbY&I$W=mjbY43c)sFmO zuvpIUfc%OZRmB_q2l+f_PZhpi7$=jEmg7=Go_zH%K z`z`njTvhts&J*SD-@+|o#ooGwuHOnt)*UDrQ0QgssBAaxxCxuoiBaNIS1h>08eN{dbI|~JqRn#?%htFaj4;Ys=j$>vx<~f1FWL~Nl^HjSgZnozy z^!o{U3O1L}8-i=6 z06$pne*b_Fjotn5KK54Z&*QWRnStY|hyxAE1m#VB?zATrnp-+m3Ui=wDd2J)E@JTs zDzVupe`dbk){pE&n?fY&K5_M?ox(6wo9%OlU}WSmvVYfPVr=6LI|kJ;o6G@0iL)za zGMnr|SmCoftB^CV+X%{wr`*YhZx1()Dh|u(kLaeNZDTrh$Q5YP9_N(#*C-TV8r&Hg zFGHGkzXQFj2W)}%V}7WKxNo2c0wIea0$PK%?qDwxvI!RpPvYK2v_V;+Jk`2(N#TMIaj%3T;XSPiLM2E&J@4^T?vaN-tA1*+^Jm18bh#U~yp*+ece(4w_P2sztI@8A7M%qH2o9tUwgaW;A#yVRk92$qh zF}DX^3Vnm$ac1(7hZoC@?F1+$p~C#b{QJ&6Q9cPf4ui(T#!2cVDacDOD{bxfI!e7# za#%dDY#&{wKIW;|z@IFqmX*U7^lOozIXp9g4McIWutL_hP8J+kUsd&xlq8$7HEu3D zd#g7)o169PKo<>(+8dH;Arj@bTnTZEVA zk5@b$6?qM{ba_+(?lwG|CQIWr76T2$>x+|ya;A`V#_`t#0 z#>Im;hLV`1_+5oRI{Y7x{vPrlU5)$%5FI?hL2_`v5`dpJV?2wQmRu6W$SN zvIgcfm~Sj>&|2^Wy!6MXqmRTzqBFP4UFD15WW4;p^Abr2{RN^M3ukaH4Vcli#;H9+ z@2&|n(uaG}sp6S4rdU%a0+<4_zn;&`3hSaVXYhE;Y_apkh)~S2q#Sk>!$)sC*T^&e zIYy~e~$l7=QAx; z-XZ}<7U=3`AI=%g$ujtMZwerLb*BQfsR$ZKvnkX%+p2fmckbOd8(-LFD90anYo}&o z>yJlKV1}rpS-?xsgyUiA?}P5Kz=y#_Wn6W>_xHU=Yp2{E@;j%JOqWd!8uyy4YF!{r zwM%I>dHV)s2$?2aLt|M9XO)+EpFzo2q2eL1mzT3|R19WZSjN`Tv`?puv&zXDzZ?bN zECd`*)T|udH9BdB42sC3PK})-y-+T=xwPYONO@_oX_KW>qopGdJ{#b^bre7Bs0uMt zFgCy1VkuEO;+&doz>%TyC1pZ9yKlHO)yZ+np&(|E+XL~w&l?SfRMw(%G#}!^thzVM z$L?o_xhMdlHJUl?o=iiSr26mwH=X@U?^_`%5=`w~jlzQoZGEq&%3GSfA6nhTrVZH? zu2hVbf=wzULz+swdlY9HOhnkUZgB@q#uy<2Y@F2;?}7GKX3ldsvT~Z~)Nz|ND)pt9 z`#r>IzG1Feyi9P#@xfoZPj$`qM%4y={I;}In!KPVF9L^E?z?2Uo6hj)5N~*5~iAvNK`%%>&PN>315Im$#6B-G~)dCtTad87Z66h9Hws!tSPKs+ZB0 z33P!CegX4)de5yU)yi%sG=P-k`fQ+g=*^nUu`2>I6(@)5Rd$^|+s<{H&fYl$4}w3c z-hy6Pj9zo?Yz8F|&l#eupy)B<;s%peW;B7kN5%pl)&^<|2CV;Nsj%K2a2r{_qfRXd zGTuyHJvv5yo${Z7E^wj4<0sJQJmhqhNKC-g&J}((kau>(Q=(atE?HiRn57d`xqy6K6;HLR)4xptyd?SB0$yo^m^UHh3Lcg74 zI`wMM6_-ad@INx&Iz_(DaXD0WP*!oN+JIXwiyT4l17&BU^OZ`YF9MIcPO}X`XIgnZ z*lxz3?RLH9yU}&lho)|*ElfxH&;p;!v5Vq7I5H+nliHx(WXk{QaLCfJ zL3t^G$#St(g|^?E1w3!ucj!Y<$~0*_H0!X_G35#v;C>HzS)tx^_MB3yO4t%<-_v8u z(zP@~i?4HD-MN})&RX)4+X%0iSt)X5W2~3b3fbLuny?5RsGHjhMXC2)MJK_WvH{UY zgU3Mc?2wqe1@CB=oB;`!sk$a5Wwp$W%wx^pvwbp4n$#j_2O4B?+`W(Ct~a2y?!nXt zG`}*rujF`&(Z)TRYYOUkh2(=XqQwrvOR3QBDWWig!fzYxQV+YWM{+LX@6Arjj1vLjwBqDQ>O6+Sk{AfUyl4lzz>I4S5L7!$h zKPk!)RU@TrNAO*7I4qafjswg!NloIHx<*9!EY*&p-p22Uc5V9jr;265tlgvnYeZ{< z1OBUO`8U0ZA}R7Uj+HN&%O2t?HlzEHITM%;Q=fTepZO{|7wBHe`MRMle&~Mj;+cn! zlZ*sDz&wt7e&O3pH%mpXMWRmN89!3`z3e_Wb7PFKDQDxR$E&Np!}r=Dp_R}xA+G2% z0KrrcYOht&gnh%7h#?%`aBCMzEI;eCPCpnq&Cg6{QpdK_xs6O_5vclDy4q~Y2dRak ztOk!?&Uqp3)Z%R|HiPng(wX9By-bR&+B?)Yb(%b#Ot%?+TQ0TsUrxKb2*uZGE`8p_ z%I)B|hhh|2cdih>AMx32UR#>pd2i5ZbVxQY4!PKj0wWQdJ3sJ4?-SKIp{xagKSxLM zu*i_iB|R{~O~J~~y9ZG^);ng-orNr4K(E-KH$=)~LvuiZfz7qTWi7caLpA8)D1LLyqZBc2k0fl980I1B%Dg?iaLWoY z7q5x|;IR(q4bQ=k%&eV?D5+6$Zi0-`{x(76h--j&U7tSSq#_adulFy)daeCAcNeOwkud(5HSOxYm*4Q z7?HR&PQsDQ*(L;*$jW(j4bgnNIK_4N(S1Gx1>%P9btzxWw zI7A^q$n5mU30I*LYXic4ltCZ!A)f{a#_eRgS_b0t7t60K#SyHb41Mk9m*PO1%P73{ z_x$7U7-4QN=zc!9lWZM9=F=I6GUy*@v94R9bbvY{?UcEiGgRh|ssz8}m=68e6bxHj zN3L~=fes^mJMWk=h$tRS%Sbt{y-P(%xFs}Er7D66rz0Xyg-=eI+s$+50y?K2>aco# zw=-u&ickjjXzWBnz$ZsCmT`P}K|+gl%P4eb@%DSIfm#7cTPxh{?im{x37ORWn@+PPAT68eqye&dy|)B$VrG7^<54aqfD>?zVN9(y-@=m1rF zOX3gvCZ@oFBZoCHhYgb@CD~#wgo;gKs>6&!3=JCbpAunP$lY1BsRi+-aE>9lz`2IY zYhpEh0PZ5K8W;N&3V5lLfykNr6^(F7g#qK#ilmfKbY~i4hXH)s+&->## z3r(3`Uhv(*VPFkfnU>pc6s@L87B4D%lk(OQuP-=sBQzIVnZ8&vOFtxkzKW=N^LurM z{XzzBVCA_3FphNu6ZEp8*`=9?_m(RS<*<8)0G`T6Ty^Vu6+eG$UVd~(IM$1`#qyvp zVwE|3=A1?=y)nDub_>Of<{;oVCEfTN5byL z*({+IvcE^=rRm!|i-23dPvj&aN|(|mD4mDNf3FJt|{B~(|jugkkv$$}v z`77P;P5Xbl|6kMn4wnBPhmB|fH~YuGA>Yg}UG1P(Vh(MQPKFqw=ITAH5KVqUDI3_; zOld%@7i!Y0<&)I7Xu#2CnldPe=)p55iPy^0Fuwm^M~%|0D3_cz#^PbE?#6{^Q<1 z7e~X+=hTmVOkM*2n*A4suM@A)8%)~oyTs3wZF};N9aGS2-f&=?1M;O`pAh;j8U6cu z`AyNST3o}u`CZBKms~@#OYiaqULL|F-6qcvY->4~!V#OTwEDeSj-@{E$#R;hBI-jy zM@6~6bAOKFAuMwOiYsT!lE34Puo+3)+y0x$ezFqhgVEG^P5CFrRD?rhD{g3mrsS8% z?6R460u~lvR`fEr5cokK*pSP~NcCC3&dC}q)bWK*qbU^dK}kPwRWr4tA)K4tc_V+* zvLmhphP=%=|fZyix#!gpK3^b_%uBxPWa- zf*bznJ06wXUgDCW(01z05_mKgbQOWg zpagLP)WmLQ1)M(+=`6@;XBmf zmrT68E3A90mYVHayd-|eR>921783xb4CS0s3QEF_2Yv1E`MrJfu9+Rsntl4kpaZ1a z3ZzBKpHRb(Go@9mvpv9f_p5Bm$jGw@zGQ2(1|HP`F%cLrx{NKd-tEvwgcGqGFlEMF zK4VPWSIA+Evo?S5av#Uti77v}4a8(5qvJgmq?_g+0Og;B6R7@ji@qKa&l$Lzum40* zh&Q!06}D@A*G`eIQC{S=No_}_4$x6y1syjKdy8O>Zpy>+D(zL!@bzuOOmvh4@E@EH zNAq&HDHXTU(I0h!gk8?iP*}QM6F=g#76PkTAh^x>V6tNxx8Ns66=K@*TS9I-p_xea z1*mOZ_WA|Fspm?~LLBI1Hg#!SI-9W^)Gpw*Zeu_XfLIgP*s+Z-E^?=XTOQOO!lb*T zMYuI)m1Pce`+I|~eS5WLifT;X+lh+vH+mT`4^@*(9%fbcc$#(4z&ukfH5eOi6%>dE zE3@~}&nX`%?&iw80)IhQ<`Hat&6y6JH$0gBgd#~u5%m*bLSIqs7J|-Vx4oc5vkQgFcZug5mTW%SS3@uHG zOv6;iJsnwJUu8-KJe6Bt?;WHh4Qq$h5nS1OC@8gJ$_j7q>yvo6<>_Ul^VeEAw}gm& zo2@Hue=X7up1hjp9<4az8^dOMb15nI*B%_!^0kf)*+>Hv6M#KSooI|5n91?Qyy8n& zSm}ygFWA!>o5)3|n|ABr?yR?iipK`b!^1OMY&3;ftUb)Jvn%b82AEZf!fW57nQ)vR zR#g5j2=)b(fHPj|u3Jqphk;7Xm=|!6oz4aP${kdu&KbrIinUQVBly|&!!2Cq4ie>; zthmn#M()NLRl;`zH`?j6j<)PA#Q*lv?dv>?<{t+cZ~y5`m2mPdPBnZyVP6NGc7w+9 zaEB{8E(he2b(EiI1>Jmv_RPqDDx#0w?nP(O|2&q?VJr{awm^RxTVNobB1A%a2GQW` zGrPH390)_U<7?7{-!bC`xBS$rfD6YB3ZA!gp4`MVZG*a)z<2jFBf`0Zu5%fm{SfVn z$~h}QBgPgO<+u0teWx-PE>*GO(56dg_un=oIY}~ZfdQN)}9z?)viGgr@72ZEFdGLXxbkDaqO>;jd>_M%G zWsrAoo&@g1Vkl-``3P!-JN0Uh1<39LiS;fPyy!)AP(VrF0hiw{e)@1EpyRuaoTy97 z7Hfsi(YwCQ875A!exLSPm24GfBqdj%s0(%|86B30_>j$JZ>q3D@YBXFUgW3}aZKrG z6087gqxWMrXV2|Zst0L(xZQ+{mA7mUqtiOvat+4w{Z-%UUJHpp+%vcp_>u9it%h4S zzX@nELs18q=xyur8*#DHId1-fW|eEZvOiKcJye=j#>c{@l+msH)*w3=MEK->)A3J( z&W|$!*22df1<3NrId0h1Gi78V_{7@#?3uUq*_&w~k-JMg24iTHj?iq~vBzMIv8OYK zw8DfVsI?ZCtmJ5$+owm*2`uHZ_+w&qFx6#~8syh6=kvFN{@FE{B;@Eq z^~$GaDA57OgU=0Mija9mVgxMYqSwOeuq_+O-zAzjzHLuiiMT{*bkM&{P$2BX_K;F!XnrDa2Z4AIAoEu0J-&vu$er$KnQ>QJoc zrm1F7ztlg9y}yF-UyV)*YJMz-DjUHgY6#SsR0}%jDv%^K5z?<@M1o@>uF^LmUwcO!c2OzEpXd6(`) zz&8w@R6s{bo?KJ)E+GMFY_m2NU08&gdYp|fS+xy{P zN&Y_@cYmQ363wT0#tDe>su0C*@8E^CmDWE`1HZ8V0$?-9TKE5PqITiZt=q$sdZ&S> zO&+igaX@&z+qMzmQjM{*?@4QGYue%ecK#NFy<;1w^27C0{=|x`|BA3bfl{rWTUv17 zp!4YH{(sK-@93!}ZjCGyrEUFPy#5FHRj7!YADYtw_j&(jj{gu0&>%^dSV_Ol=Dq$u#_V?%B=SXk- zB1wya3xAU2e{1pozWN@{;MzTA=G~@yZ*z{tujQuze2g>az;KHj}!O~4btlf z8{mUTfK$GB-Tb|I?ZHIro(XO_WU0u-=-|5XUC$kiaF>;1`UZYKh)NLA-B|C(f7cCv zLh+Begp6Kzbex)h=Tzi_X9&WG3=X*?q>1_;UzZFk5oH}2&5p^0@NX-*hakRhjtKXvPIk?H_ML)nix7!Bxtf zGa@q!vVee_D#0oc@@EOkrf-{rN>e1jEyG$vXa8-7TxlXao87=qYx2pV*9p-Z?lCu1 za)&5JN3g#vI5r)YZ__f(>A1x8pSb^-AFOxksb^yPhYNErl8=_xZm1tgOYsX86FwEY z)%*RI!E@z_1I@d=p!rWZe_8M6*IxpYrUw6rQxyW$=dq*DW0+{LEnRfhs2z4MV!L3B zbOJ>8Lqdg#%IHt7vM&$Dm~S0cOB07ndQJ?b5=Fi;i*tZSw7+&clXQ4YQ*W5&O5ebt z3XU{-@YN;hj!{6%dUtVPXMS>_z--PYfo&xTyJUqJYN}oNtKLL@Qee z6Frw~26Q6tz;xG#Hc$TFpbd%r)zQt8ndtajeWG$-Ht4^PQ#4&G)ckd{7_vwGIqxJ> z_7k*%V$5_GGJ%uahX0kTT8~H(AZLIj710`}M#O1@10ZeA`(dB!2R(Z8RPgI_D#L7PClSrS9U;GDCwulJc+lGdzm;f8Y!bPfMH_s1 zs}N^t`>Fs^*b_r}Rcib0isR__jI!?&UoCS~WXZ2%`$jH)N>gd&NTAXc7(I=5AOjc*Ao$S#mT>n;4kt4gG-$nL|{xs_*`2p zL=GoRS$7rmQ|-6Q--0}}Yd7Lm5YpEbsUeON`5jKDQb3{&Wxwq!8LbLQE4{!3hTZ;(oBJSxof2BQ6G5MTD5gj{DhA)Auor%H?XNZuDe;_skv{H{me<=JGcy| zdxTQa7nn3Vg23!V4k6|6x_QLsDa`|o@&FawFC^$no-5COj;a{!K(R+IQlia==sETc~`~`2lxncR+7m7k}Tw*d%QBMv|~!pXB7o&c48+aWda( z@j+Gp?atX^v2FCsos%AvqzgY}eS#f0ddKhZ7s07Kr)ctiQL{G7;e!iq?;2_-tC%*k z3dnrfx<9-urB@oiyHLcJt~eojMb@|;-J>{=dN|Il2l))0T$NpUis0{SS~=AW+?#w< zr|n{;wML~Xoucyv~0sQ@S*`#lC9JiN&%aF$KU z#R|cf?O&6lYa0*!CKhjWqz8I3&*&H+pbL6g05i$hfjBh0b)1qpd4TgIo=pr>zJEi&{?PwKm2krqp-!33pG#^56>53P;Qc5 zdJp7d*%?pwFRq>{M@Wrw_Y}B2R$iQSv{*aMuPAHUzo>YiD`@zQ2Y_x7lm@wUq=MMv zyZn$zTy_9O&pk0P@DF?sUKKH`*3+PD~P`b-K zfAY8`?n#xUo)j_50zBo=bW5J}4tI zz!T=~{aIPP(&|P<(j0L(a#|+&nbKY9 z`b1S6k>#L=h9X@$gr5!?jNNB}ABYefvzz?_CxC5{L{I}z-{vXYEcS+1 zs%kFWs`hH>cHm_-GY;EP-0`WGJ{pjmG|@ru@{#KR2Z zEA`ZEghD3CA1Ci}6CT?3r3i`fHzruiH7Jy##w8LHX4Gi+uiuRtpNgvVQ#M=^N}V?9IxTE$|VCIc5Kmr{&kKIy-G?zuq;e!&Hb z0feWar|3J=A#tCE()~Ik6}lpm1~|&y$!{{H;c}cZoNS8wey!zY>ZUvmTNi#FdqQAoMv;UtO^12!sIp60s8)nN*qqz`4zr)V zm?&jK9WE=5))*k|Zcb00+2$)i4ZdVQXAd|OTizKb^&@hNlAShZ&w*nMbUmi%n_797 z4zp9obdw5VEwpJRBhG0vW&Loz{0=Nb|HP~uakeHYj^FDQFkroPnq@?Y7MG~jyP9mH zJQfgKn9mzm!E2-U8yH^zJG2ILX@ z-i{;QtEJL_dIhU;GlSyVX7(xpgnx;j8EnI5ET}<}$Rp{N{o*UYmurQ^6;I;PQ*~h5 z)c{$1Mnrip{NOcKf9A<1oXD9(UUNCSkZ=A>;+!OqE_>z^yj&pL;a&3!FYJ2#;Du$P z0N|h#Hd?P(=)I0L^s7z*jn2-wUMb103`3q*UHgr{Vc`uFH5qYeWu=z*=j=L zIhU5e^bf?9O$N@GcA8caY~m}Q|BUkPn4SjX@Z!raK>4OM=&?btO|4w5agER(Hpj9! z4$fVMxOR4eZQT{f%<$tXN<~c$ZAaBsO$7a1IU?F#(w4)@dBv;5ZL>x$j2-24SYP{S zhS%!T1k5YG!T)KkDYCpsS#`VGFCLwkBR?hp4f0*+4ydm#56X%DxN+pdp0_Tmm|axu z)+?OIx-OA9FH@>hj4UuH7l=`^$u6G_Ab7_>U%+&Y&Hy)I6I-yu;~^Q7*JN7RW%b=w zf`A!xg;c=n^;6$oM`G0(@4G)~1aQoOZhfsP8oD>52|Ua1%KpMfm{L4$tUIX%!yEu| zHxOqn&^Y-QI3*=?#l_n4wlKvn_Y4U2OJSP@=hst&Y14_T>g=@qvo8NiqMI@xP6+qJ znvW%YFo*{-B_tnq?{rlL7$uhmgjTD1oAnX7Va!xQ4p47Rq;8|L+-$d)ogo*6GWZox z0p@upIx+U^@rL=sCV{g>gN83Bce!lhF(-|wE$JUm%RrUl!_u=Y~gU31?dJwoLQ#i+=;(VB!V z9S0+0gW4X)-f_ieH5mMJ4v-$oB-0?5nC6?nD@11BOBvvB+=y$c_3Qg0x8G&*c~Bpa zQ^@MI8d0TZlOgY^q`tM@O)w%Jt0B#Ncr+RD^FuuTyYJ6k}DwjyHFy%ZDIaa1gsh%iw_x zYQWsvJKu3z=y#8Nko;CPIC@|>=h z(dRA>hVqV5cH%noLvoiFcQScnO&8cxam~6$|4(~w9uD;y{*RYPrATDSRwUWUmUWb* zvQ?6ODM`Y}zRyI95JL84RF<+N+t`h=Oo)+fFqSfw218>VX2yKqbULSVPV@cz@w-0P z^}Bw*(;u4ay*$tTex7@KUiW=JPm2yW_5w-(Noh487*?ki|R-pw=>fyi?rUq3f@cKHp?pHRt9<#w1aFgMC|n%9;Fw8Ws1Ztjn-o%zJ$8lz%V=a*yMn=I04 z5HA||d9q=^`@E>XrSOEt*0cx;cQ&N?a`tgcO&x-E4 zxzI}jC0R-)K`JoiZGP9AO}*BTmIybcfM9{TJ}8}E##r20Y$e~vD2DVn%1nN;8^%3l9F) z7Z*%w++sR$ubfdFqK+}vr51G;yhewXte;7{2HA_6^hNZ=H@oH_KW|H8k4}3N9&j1; zYZ-NC>9C+#xPS1#2E=?FlaKVmI;4rQV9iSiDM zxBLMaz7hRqMK$pVKvDr?vTJaCN@T;945EKK>KEg1;835M+`Vj>e98ev>J0w#FkDc6&y%#WqZBmVBU>G zdR^kr65{J_mg31>)(@!u=&W+8?OY~zusm3r)Y|pkanhW-VuW|0qwEz7{wCH%y6& z8_UttM7Oe;=3AIe-zNI3#iiOdFdzL)c2pG&GcGAarc8SkSi_B5YbUR&Yq!CV^ej=GtbhkoV!Sw-oO<&l$JU}FJ&w*g>LNgin+Xn@!B2UrB8 z?4mKtp=tbF^Ws(nXGr#gpk}5IUEQVU%Ws?S0_gXSUmRwTiQIfZYzdjfB4(#>=iS<6A}4@Qt(jA(#EZ; z32d+7TM=E7;WGUm&kLEDuvlh=M(_`$8p!}RJQ#f~IkqKT@A#+ZS=tqGCUw;sXOWC~ z`}Q3C77%P*$M3bIJLv6slTr#+U9}egu-dKksWgh9*ftin9kPi(_{~0~ax9Lc?vnLk zZeL^Fz{8IDCBUP)nVdyBBb!&@mg6svY5qI?<{&Wo4E`~-V(vloVMW~PmJ0RSJ8h!M z_gw$bkx$Ha-pl>y+%|*zPy%XT7j@-19SnU}T=KwO`P)*ejxYVF1FL zEK0d6Xa&6?qblzlI>_qb(D!&cx8}8--MCZZ)Dur#^v(;p-gn{ix5rBl1Vav9h;B`U zDvzhlo(DT>NXi{%0|xN3r%fA&Q)D*)SALZKvghv+lOzJ&3ccH;6Jj2|zBP3LL~<{HwglY0m?3RHOBV?=Wsi$^u*?u5jhs2VdFbdf6U`5x zqBQqE;uPC7pM0TNbSV6gjWF+iE9N(x2q~O98gw_)X8X9}586%BM8AQ0WNq=cCUR;aW zv-jFoETgSX#QQJCKFoPsB7VJ~f>yyW^P zZUE}SoNm`3)4jriV>aG{_HGj~IxSzm*qUjvo3t{_*DTbVR(m?OzGAmd2BQ6^)(qC| zh(SiXFpOPV~47H*=30^tqIdH9YF7m=g z2uUAx1c+GT>U+N#7Z~&E-aH`_$52vnW!t*^!PG;NGFE46cydMV!1ay8%Lf(X?N#9& zE9Wk`XB$}_FOpaAP>B?T7lIwEe(nXJ-4=CjV2o-45WVd`XaLQhz zE36gxW?!(9L;<3eWFYu9xgf;)S4{SsYVgZx>3P+I2aXu{m&X#%{tOo$eOCvB8J&Lw z-hM>vgFn!TzDV!fsRp_9$7m@Cd-sT1n5#$XCJ(2CWplzin)+BU?8TB-;R16xPFnGS z;Xl^9JyjN<#fIb$A^xU9#@>V9(i`U1ZW%4)!K$Zh$m5)ZN~F5f)F*=0!#CLl z>3UyYgz|?oFmdR?hui`E!==@8XwY`wPOQT|-u#q9GLKVkis8>k_=G2=rbm-Q*P@PZ zIyi(5WsyW%DIX{`Y~H1IuT6?If>2L{RwD%U^%zk2DickUVnLh z{qm?S(%p9l%hh+QYz!&acUsq4D>+$ao2I%L zzD*PfJUwV1Wb!`s?=UM9q#7>zG?*fus7{3Kw z%O>>bqz}Hz;nGqMarG$2(FNerY8)@=OnEIm7cPu?Vcnu4*o&Z=^uhaNdn5QIZdw2k z?$8ikC1S(VgZu}eRXq}ITu=m7m6vDNQFpvyVy!ysb)pE2u&x-=0T`zbULHUKYp|57 zdXr}BG>wtbTGIg_?{hy@#?dY$o#^|qj^j|)HnC>&tn|8*?QoBoEs?`pMzobqi>?3B zQCm;rWMmdNU@V9Q**#JU3--E^haP;Cx6kBCwkeZRKQj;vHfvBOTbwZZcO>@5mFI?l zt_utj6#Ps6epR_gyGj6`q5amrU#!!gbOJwu7xx0G0!4=Bw!{2?d-KO*<{UsUI$7_h z&G{M4{YlQ{t?Yrtm9QtY5>MIzv5<@t{k6|u+iDX5@?YyUSXqC)_)A-Nwp6+ODTZGz z{mn$JZ-r#hB7(H?W+a(_ycxZmf0F%^oReFb7wa46{s_bW>#wQ*pnx}Ui@Vg%On7^dMcU5+-PP7ZYhmfHdb0mehGk6`Tyq0|22b<4Zb+EKs`Ac zup!F!w)7c|5jlABgiNj}A*TDEse{03oJGA>N@FRE>1Ku1&<5p$_loJydHU!0-_Fzg zx<9b+dV4Izq#4ZQ6OK2c2o)d^gb89#BQt7#|EFsX_$}}IcWlLX_+;950WPj5Y*DIG zQ5qYEi*MXR;zR1bl-h)G^19pduEcUSFYuG`-m{Yb?D$VU3}<3DASykUfjIb#2HB9m zrRZXlum)iVEa39syMIrQ`STq>nqO&J0Gm6QspTTp)CpAnl~}GLN5U;2?oRMQTk__6 z#uCIX!pCZ_xWhbF^|w1xOv~>Ye**F1Ctw;U$g3stYCUA76@Y+5l;?5@sdGcQZ2P4z!5@i4~r+ z@8!MN`>&fdaOJr#tY~;+bJv0{uk3mHB5%!h0ju=be~i&M8o24tvZ@Hd=2mP{F4xHR zveXS=6uGqOR*L-b#=IatU1F{W3A*utNr$vNZ;Xgs%YfWWm_zt(ed{kG^sC~^RHwrl z*4W%BGD^>ecFqkJW51Bkl1!3*JIz2FNv4^FIz%Xt_9yaI*rNK@n)cvl3M|93?l6rG z?rTDV;rw4=p#8$z>#E;094rXP>{g(T26qXw0xIF6&YlOqd3TE&*|+Y$%$4{ZX9856 z3UOh!pvAb_!2O7CqBOQ0puZ#t=;PR^gS%;w zw{`!Vp&5-Cx_k)Gm$9A?Wq#rLUn$XK1?~&_xBcZL{d#vtaO_s%T9(kmGryNy`f%Vr z=Vzk?8e{wX9AGVu^Bvnyi@dG-Pcnc7?XO(*XJ47efvFY7?YZ&WyMVF$Z|eV>`aikl zZ$JK%`u|m_FH`smovNBfri{Hk!iF-Ds*|t|AQRl$E*3@4zNL&NdHvrqxRZLKM#zhu zs#sMME55a1Z(V1gX4W$iR!!`#oDVNTs*VBsvlNYi*afHq)TsA-Q%y!J%FdoVzm#eH zU0-Or1%J>XqVJYV3_^|P;P-L|5@rPU&Mk^dMO4(`B8%7Rqaz-`N+dRyUne$?AgW*a z_O8;f767co`WtUVR+ZZ8H{GnksOIK5IGGqE$zN_e{h36&c4BqUwmTvVaadwx6bd@_ zJ@fz%wp=9rkZMacv2&Bdtuk>^+DEgBe<;MYEq{$w;mmcs% zE=%0K2$U#gI5?0k^*&9pX;m;4Ls0H%M zy%K1%8?xnnsG5U(i810ObeErT7swv1X%r%gRV{O ziG%?NiNZ~}$9bO(?W4N6#5@+R2`SpWK0>+He=-tQva07be(G^vkBNO`FPE4T>YC77 zu_ze9;j3f*GPeMcbb9e!F4Bk@a$Sx5y|J;PBUP!qoEd|A*9s-Jc~b z?#382c}yyRcb_N>!Z`&fc^g(x8fJP&u;Lzor>VH5PQC+<{RP3qiAS7Kqe@yd zIs$U5GhgK{<17bOX>1QizegS@5m36DL@P!A@L>Qyyo21EO2c;k_xgWB_ZzqAKeqW# zWd2fkf7!wRZ>x(WqtBI(^tY9&ghAmT& zJe?un1gW{JcXF&|b;B1=Kq3i9gyP%!8H`H@X+#J{#P%Vs?p_z?OFgyQmMGiEhth6xs( z$hVS9cqk$ju}c79qeitadTI!rXUlf1)!hDWpbQZwuTf4Yx;vP#U8lsxQT8vmr%N^X z!(M7|aPaA`mDurbuWVR(cKh)5#Cpx5o8O0$ao30=XKqcLfJ2SO)s9e|rs1$$vxi1x-F$Vqio)P=i z3)>l?R^10rR&eTX$}`Tt3HX5+jufG;kcOGQe2amh9C|pX%wxDxGPiC*lL4t#mSfnj z6K+Jh)w)?eSQ3hs4g)fya=4zta*~|oAKjOgXNWS^-^-Vfsc*R>I3&Y`0UEx1`Qn*sZfJWo7_6Rj;y^=q8xxmS{KAL81Ew4GPmt7R zxW}r4&Z_kA%A4YM&2`)$$&kUopXd-!|7lKNy6z27;(eT>?5Hid>=$(C4B(ONY|p{$ z1(LKp<-by2Qa3+TF6+Xc3fT}72a{QEBYmVu=H!lc>uSC-$&SlGpvIEgGo4;z zb-^KRb!wo*ej@+AS*c~ekLppTe?9&~8)@>;52bvEN$`hlw%(GU<@DfL?|lpk;Ke`s zr-=RG(JfyC0D)Yx8144~^gH@h9W6j01Ms=lp4&|RPD29k0C?4*O}twf=Wh(_)+=2` z034FBm`}T~6d+GMie_1<|5jD05hR|*&;mu;0Q!ymY)xwn4FPyLpsmQA7J2*td8?;~ zXjaR;0k9~;bz=h>Uh9w$KpwwNz|Z2Ue~zL$;F2zgBHCy;$(jKGR)xXdk)}1exxnbE zPnyu$j_gh}K;D0o|KH^Qj(`4>{Qq6am&sMHNe+}AtDhMgAD0f&xQ$HkZM_2J2lgD0 z78x5jLPOZtD_yq}C$UVI~)0QC&0jbJgABBt6 zdlNXZPKnkWEW;}izM~P=$*QIdG*s1&;4lUi|4Xo~4I=Ipj#ZDh&F$YTErGJKXuLbY zF<)|L{LasAH>s=h40^G7YFytd)+XUcpGaL2w3Rt=+%n|mwf(G-S7cuw%k-;l(tYWx z-EflrX=bLS<=)X9&I|rV^L9O_I^|ym@TjhB76a9&Q$v+`bm22$x+q9D-)#Z$ z&8|6!Y#3gOsyzy9%`jH_KL2`Qc)YktORTW2|63;px}Lqm5E8zpLor%&jL!YFtC+Zf z&{1g48Cj>JJC)@RCdTKoKGW*SOj3AupZCa<_BKAc#oS#@J;4kUT@APBROlxzGd{`P zwfB?f<{TUY-h~JGOvZ4Kjb1UUl0UwI^Z5~P5bE*~*DSvxjAotgo=Id>U8wbtu&GxA zyr&`i1EqVHIg$!(az-VK&l@vLTsGDLs|`s)TkLrAhW9C7oBYfZ4R3!z;0hJ1ILmD8 z2joBE7aiu2nKP2lw2TGbSGgj1Q%JI}-I?-|Ktgq))TrjdfKlq^;bJ#ziz(uURxQ5F zr)9oUhGzXCCmO&>ZNrZWI?=99yXyzIH{@Axi7TNSxR|&aSBwZonkoj*4 zr?+jSn1oEX#fF4g?a5B%C95r`p5rr6RwSmEjr)C9nzn%q=gq&v=HO?kSr1{f9+IaM zs>?>*Npa4n@x*=2-1{NW+$YmC?q`P3?b|%eE3Z#0Xqpb(PZ!Lfia$&qyZv?BU4Jaj@e*{G?GR6ELyDi$aS3`+AQ7ZW;r45E2VM)^3?eOCX6e!U+- zH*81Obt@vLd24OdHe{n+US#-wxJVe4GYID#u2bnBt*IAT-U4JM+v2z4I~lX)!3~~t z6~L~Qo~0c^T^09vXHwh3d-i;UIbQyB@Uxvym~GOq+YBn(S-@QWah9a(BQ$-Ae4&{CLaKX&CAK!ZM2?(7Wkpsh91J z(@LsYX1~`OWGE>9TYU=TNDw$L1LgCw-84>p0Wc5E_Xv@g!!#JRfyi`{7)|AJq_wTx zw=Gv7?&H3{iPT>*Y)fWfCnKRx|BXoggnZa9e_yzGi-CrxA+rfMI#|$o^9wXU4S&Fs zSvy`r>#!{@=uQSIK|o0I&kXXvWw`95QwQh^IAj(~V-B7o?uSr`(J>sfQe-j!`qaY; z{`%s-)7fI9`5sC}USOi-3K;_QWt_YI532qgO{{e07tp3%)}ueK{QXDfmLK`w^#A{N z`WrrEIGO(B-ph=^HT8VOi(?}GC1e&ses@hi|7@1ObBygJfFr{{?D`>anQ%IE`eDL| zk)R?-=5zD1@7VaP(&#C|u+L9{48}27%FEV8Q~}L!83EiX%g5F6M}F_^3r8t2Df`GQ z1!MjX95ciz6^ewXe@If7)R&iG-Up%q#=pFG=i2w8CK<=$Ka}G$$!B1!oS!|EbiTW` z)q-4xTKiMI9eqi88K%!8)NN9IU(iZECLwuCGucWoSbha1G`_sD^)X$hJ6)5(b6vAP zk3O?4p!c_u|BRYGHkp9|hhc!kh$q=P#JTL^OZy{_Y1$5NDWRZ;Wko7usf=2q1`k&Y{m-W%LVYnnXv?Emr3@JicAA!g_2k!{p zz4s(h>CQVZuZMIlBF78svOdJJJm5W6sc&N507B*n)KA1l@y*MD>QFKsJ$(+iq_jX0 zSA1MJ#nBpMl5?QcwRn3%GQ;Q^Ez|Lq#cFo9dmNG?PPn67RL7@;BN^vmr=yn!btkKC zhyvpU-*b|v%Rtw-&ok|ro{QAs1mHh6-^+5r!ytLGM?rw#rzVS>8rPB7G2iwkS--^$ zN)*aHWP1{xp3lSwx_-$o#oV-r)P)+Y1ROJ-U&q~HKVRB+BhcMk{*yLa)ik`y4Nq}8 zD^<3J#wH(r29ld~bn*}c)Q-rUw@N?V1O8!$@rSnx&d5h;hHB0W9KrdBQ$F`U7axe& z1pBl*2ws=YUjR{et6O_#br*p2p=H%Cq5XsS?GV(F<6Um`N?m<}e8on0DV7)F10X6@ zal;-d!XX*P=4+2N%GA8wtw6}@wqJOUU@|^kZtM=T z-{8BbO?tjmSY&f<_zIa{ZE=tlGuI!aqXcyx_nAF|5ML64L$B3AOyIn_97WZFQ!4=y zW|jCRSqG1=gBl$+yv1Xgk}B zfKTn}6&;bf6y6h@?npT$DJ7Q2VLT_`A1IcAXk*z0qyWwe!+io8Tlgk{&RCsAEKlMD zot?xp=1SZn;h=2ftF-P_ks^)JGFic(?3cGwOyCQi7Ei7XFQf%>-2#@RUI)LeL?x&! zyA5cR@##*v)FY^NtrHeGoX%`9;bfe+`smtoLXB8mVRWILJp$Q&!=)JjAZ*_@) z!f@cbq+ixpT<4oHXq0g_tO^-Baca&Y$0KrgBu`FsI(A_T1IZJ778Q^4DiE#6$#1Lt zm=NhNPCn0%Cn8@Wxr!X=`{ z0mv<1O%ggEuv2e7X`gIdl>147SX-YpytBSo=6q zm!M4ggrAlXIqpK@C2GAqk-nQU=zX?(pT3Bly|gAC%!o74m0nlLU3y0#mw?Hx_M^ z(8I$6!o<1C)NQT6OD!0G)4VvCY!5ii%ITD}C4 z@*4DjVMVm0+bp<7GC@6S0{#MDtl#=*RU<&ngRXG`C8JP~JR2;@nsg{B-eRM`szO7< z`}2A+r19|^K0{I_g)^&Cy@7mk-fkF$0e82k+$7cW>4JwX@p5>jbl=I^_|r;KKCs4t zRh45GT~fd^0}f-ZBbP9j7}q?{4l1t%thfO;9#NP37WV4v1OVHjR8=YM)(D!u47M<; zpKO_GIZ%pvj={0OhcTU5W6=(l#=~)&>1;MQw-gh_4sB5TP><8#J7lai1_t(fdj;ru z*{vFqsUJi_k&D^x58!#%{(%*}` zanmEPTO;+<UkMTPkrF3u`WP8kkagAe3eSbP$Z$!aKIC))%Kr;b0% zRV%+UQ@c3Dyu=i{#eM$Ue^-+Ox)Zj#4aGSOxpv9}Ka?w{%M_X?;7Uqhsa0jY`N>r| z;8$QC9MwB|gW7cg;pE5zi2S@lN3-whU8BK8xZTCsj8~;@(wmmAhAZJ3og32!vg|Hx zh}_(`6uq@q_D9x_$_e|8ZnZkTN+Pg-?07JY9?p99<8wuHT-w)1t8Id;pwj_yZn)`$ zfqK+oBfa@`$9ZLa@bE3_eWzN4d$yQp_ku?zD)?h7ERPa( z$5n{_JVY0^1lq*;_MeH4Y-ENSSVEc|js&Z88?350>M~MsIe>8~ym2$vNf)%#y|>lJ z(C>Q+#oC4X<>Tg5)`Nf{pBayoZY(&5&51awYb&*wYmzDFf2Nt48wN^l}P}#){b<55?HQI4EMw%UqHZ0-ST7AYbN|p7xqkN zz@{>KCR&8w12cC%)6p+Aj;YEnmPbjCf52g3EJX2DFo;o51Ui-XxXbb3vx*Cm5Q^ctWmrh6?Z=C80K#_|5WwPCulp;eT=-gMDA~m-n8Wo78 z=UYWU(F)DEc~EKq`f!KM5uc*^e4?`SycGhHGA|L0Up+15UFoPjJ5$%nLafS7ssJ}G zJ{fN`uQs$m!u!SFR^s@!6zLW(aTeeCy0ci9fZLs}q%&mssixG_8_EeVWN$lpfDFl@ zv=~T-X(K!|C9J*tW^pa)EMcSyY9Z_787EGU?~=eENO{RBDN0L$ptli)YI9W=n^6=H{88lLr01|oHDT{lS_4vo z`Y)wYN?%1sxu|@ATlw3hdCcpmOnIw~xMz2Ip{+QhA&Z}jiC+!BnZB67Wtyz(fyMs# zK(G1(ev5@oIMAxS5nz6%WQwaO60^ER_7ghs~8%m9J$l70G|8!goZb<_Cc<&KIL#lK45Y zY)J@oItpy%r&GIxFOmc=EWPQ}wu0HXw+a)=fSt>>VrX9JEm9xV32l+OU5!nhpEZqF zI6a~&&(~n~O&QX~XuZ;psCKp5)RX&wGks>1)gGCevo{EJ3L(c^>>x~bAF|z zFh;CgVbU7>6_NxA;qv$JVm#(Gn zhc7S(VIVdwD$t>!!S#EP>8DrJZ7OZgIMDnA0u@! zM^1QG!;{bwJJ)*(2>ljxBlP}3&wMH>J@;Q+Yu01v_cVqAHle4s%$eN?Fr60eb{^O{ zkMYK|IGc(vy!3(>DE&%bV9u--Xo*+1ZRsfY)YMt9W#8(cVTRd{L-Ce{x`1t;^Hxe> z#XL)1=lxlztM$@jUen{(H3VE>lfc#=KNeBY;AO*k&zgMC4@o&^z(ESEUsZR~d9iX$ z?b7Dcorz`G__K6LCbFTx>MN+D{^#N~<;1gaPh9?hf_rS6Be*vg|E1^;wpmh9-{ zFx_ZI>Kg6jTU#0qU0r>3EB#b(9;EWT8B8M83cz=3M!hhpWKr(V%kTA#s}xW&E*+60 zhbp!TCIP2*Hz_UT*xKNca!+l&YP#yNR*m*-_n_|U9(EN?2hy~vNU6ba_(8^wy6cy< z>y3c}IF;o;RbD&3GF6h?`Dp4Yf}fP2wZet0n$s?oU=ZK2gZtpcb7!szyWdGdzua~* zlm4LgCL;bLY@$b2l<0Hc*IYU{Z}Voq6MNnWkMcDYzazDhk66f?iVh%}fYz4(j_Umdma;27 zR-jQWypt{-z+Q{U2WMztiwF0Z5OwK(;w*n~^v{kiGww7YqHnOT{KR(tfiNBcfWa{$ z`;LEH{z;kFL7?l#lQT4qRoKN-yK@iMvw^fR0$B9W=hH z_YBZD^Q+hY0G@vK)#VF-NG-WLcKp8a*AIZk`OaSv`1vW@g8uVm%}fFSxJDZ8-0}Cz zKkoy>#z0kh`cmWfc(^7OK!SK+bUSD?&I~l}#ibqedpI_@1pvd9G#GZ!Xq=CpojfZO zzVVOI{MlC|zz(i~`*zT1Tm=An{+sZB@zj44{*$-=&Q|}+65jCP3RB?5xbApFq9rdz z+KOF=&+nWX;Y)6me9)wi_B2XLwo}0$Cd(e)ki2njOK} zvXfCg+pSB5R?XCT(XDixz|C&m@rT&x2pxQt32!B}-tFTJRI~-u9ea{whxxtOYi7o5 z(-J(C}d$+B;IGhZKjHm#w+(5KJ9s0_65<=oh|D+T3hLgr4TrgygZne z4I;%s&F8i`Se)jo&l@f*e1)w7$I81t1rF*ujHo6bBbY!b6|%q)-&-4Q0*8V^@>oas zhy7;@-6rErye*tHf-~s0(znumMysa%uOIEw*JSpJlSK#sZd7!vR~wLvl^kVH+4J!Q z-KnO6>#)FuLvSK(WJ$qjnbs2+=?K#5;!gkuZ5 zzxc(hYqjw8G&ld+nRw~2T`VfV38D+Ri8c^FUiXj3>P*UZ2TRdajCfmYWqMg9r08dE z1#(?(Ma}~`VKtG$l)WEcY^D|TSpj5K6lZ~ekS#2(JcsicsHY|gg8-f#YfI^2`uGB8 z^$Bm7nYS(n%vPE?I|;V>9NE0ds3F^5Xo24F{}ODoEOJ-!_v#(U!gdXg8R>TD$>}K0 zy3>*foGCf$RHBXY+hD^+M+FW}7=dWS%60^EALKH758WjD5h^$>Wp?S8?WNgCV#5Vj zT#wUq0*w@@opf?S0LCpB1*dgL(9|^`P-3u-r=s;g=-wl$Wh+LSRv%}AAIVh~at~hfZ+t(Nw)U0y zwR|kxB~j`Lo1vO0Kb#yRSK`9+CbVHiY2;8MbW;E;ZB0se!#n~(rn~hATyGlc^J&qD z9uXS7_sPO;lpIENh?gX_#Zy_K)M7-$dayI~8;e7S+F)po^`*<}J(2BX zemW5ZN!{(+&Vc3@C^EJ`#U7blVjp!zJ<|#9+c#5#b?x+X{e6K4#JynsS!G(Z zJ+8#w{q^mO-8w!RK?FoI!e+6kIfbQZ)@Esjh^GjQg^T@ogk||iLF}dhX!Rl6O=PyN zMV*;BS+8Or5!(pkjvkr5f3iKM#C|b%cdM)>r=rUcFA%n9Bs`E@$xy1p4fytE1XRE; zCy3a$Pjv0rb@_oY`fZI;r{5SOwm+4s>Mg#R16m!x+9A`u6SNe#FjsuO@=e!DTT{nh z-JG^cG{om&2(Jnht>6W7rV8afX8tnXCPV?BHb=Mi=z8v4n76sw{1=BN%qZm2FoIBT zHvTTvje|JI2a48}u2I_(Ti}4o)SQ%!2uA)VafX}u#5yFNEjQiUpS;!Z}L^-@vln-7TtB2?x2pq0Z$n3YTjU6F6&tR2P_tx`{J8zr^aq?6Ib zkddL2KSl_me6{}-urs>eTz${W>zm{uS3Y);^uU{0oTL(7VD_MGWwUj2FvLBxVYj6N zZes~csejCBx=7E;d_I*>Xv#i|wU-Vs^h&Nsg4Lvez$YH-UBxXqiYSfo zMsP|dfbf_36Zh4=t<3c3z$=w^=E7EnIa_KvPv;vih^lrzm-N^#Hu-ks!!pY&C4L`g zi7~e``KzUKUjv#fMmMGgY8~USm+|KVrc{=(so?M>=?w&-M*sriKRFW`XEeAqNh2<1 zgT;5Z-OX8y)4KL1iF(Hnc43gR8%ZZb;8ZH?3;>M1j6O?h$v3_~vpVISER8HZlT4@^kyzNNFD7k8K#vcI>-bABniT`IyV!Nr8EfLQ6pyS^zI@*FHFL15scOLJ;G`5{!)d~N>e;W2@T zL}$4^(quC}P_g<0wCzsLV`oW^jo>JlNic>PauBA6}c;)D#EO>JXol}_rU+YnVRsufg7lZp3c*% z^^nQKZd1wv5|_%IZlYgK35Di7QTrw;gYeR(PTa+5Oj14CqbIwLKY>~7&DubHE()~g z^_ze-wPa(!P;c_(8_i=;_IM{L;0 z(<;qsmH^W8whBf*Vhz4D9LlS&XWtIr_dSc14mf_pX=O>IV$-#@uJS-Hb}hhDLVSMB zWJ{`#1n0y7y^GU#u73%=8RX{Gy>Vcz9E>wc5CUEwdM6Tj(05E*Ai5Fet~pyDvsO^& zkcYDOy9#%{yNh4`>`^|bqHCp+^-5b})A}?_KsvBheB4HA-MygNE*o8Z{#L{HbW7-1 zOaFO@`_kHYfgI`yC}1*w9Hv2Xb!*p0x4-!6$5Z}@Nm>Oo`aK10xKcG&p65K+yIbwf z(*|{??sZfMu{T$P548E!CjuE^-i+DOY5iQlain|I7QeDcO3hmy6z^11fIyIZg!ysU z`8N-1dJ?A)_*8*Zh)LxZrTi(2pOvbr>g}H;V$E00CM7 zng*U+qKtdo?u<>2Y3u2?ql~iHY7aJ_prz_uq z$b|T)FiCT+bfGC!J@-Ij`U0SOrR41zuZA7Sj$9baZLtu@T5 z3|aj8IcTu)W=%GxNeMyddsA6tMS&H&$fB;<1ea=f-mvs&Ml=J36X6bgklt%LHPd0d zDQE8zA6S@-vg!y>#zh|qM{qXBrhA8BTuF|tfOzW#`yE^x0}j~j7J;uTcg%*23qDceCr$NFFXGo!5wn)BSyc0#CA$hwm|jnnvbgTei}6R5 zE;$3%YiSx4!5A(czq#5t4fluQ*P!gGhohMTKP+@aJ+8ZU^~+wyES3U{X#HBclQ|x` z;K#`ULYK|!n8W9kp~SiE49L3K{=*eh0|#xYCrSxAD1U3=1M<}s4KptOtB0@b<+l=Vaa)ymg|2_t3GRiKSISVSdrw$xpxm?KcQvD4!NcbU-Zm zP5aU4N`ZEtk?fVwiyPSEL6l8kAvdi?33DUHNGECu!He3bIN2Y?EU;6LSC5xSmqlp- zvF$?BtHa|CRHV8YbD#Y)o#AM}ofYkTCe&%=X0CR*wp3wc{QK1S@HbgR6^!>taZtJ< z6))(Jv0By$pSe1??ml>Gy4ymwf3tPb$_E^DXUg7&Y&q*C!S`TZOzQhEl*1Z zESWh6F@myoGqCg6?a^w}a(H6x(TscFUyNK=LIl&<)Gy8uhjTS9*B^Osb^Pnh6Fw@GMS-p@TX_lu#=q zGW!1dkINqJC*zr|{gyuyGI|VLg820VQ0?x(oRb|*3aD5COQ>C1>3G2#bg>p}k?8wA zf?C^0_`^?xDdE-irq6P6OrK@z$?+v&48nEh>UCxve`q+1(@vY%Y+#iwZV>1(`{08} z&5+BSDk^cvsmH#(ZP6L<$yPk(_HD-Tjg>hXxk*!t{dax1)kEgB3ofa}!6iBj;{tiG z!RgI8UhQ$c55a)1F2UTzHJ4|>|9tYo;Hh=F-49gG>wj#OR+c}%>$I+ZYinF@8Q9JJ zPQq^RQ}4JIwGk%eATNWF#p8u&7l4VcInOVFl?94~Fn5=JSf zN1n&oSR-@doLg#3icziES=Tv~Eb{CuzQZJUkZ6_BdL6vCH|ReA^IsV0e~9&Om-+vX d5o@Xd3t^AI4$-c2JAi)|wGGa_J!>2Ce*mV_9z*~D diff --git a/Docs/images/append_array_of_bytes.png b/Docs/images/append_array_of_bytes.png deleted file mode 100644 index 619132fa532924d017bb5a7ea9c198431ec87651..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56172 zcmeFZXIPWl);5Y26&2~yRhmeN^j;L{O+0qKxfAfbdV zp@W8A0)`TL@`bhca=G@#_j}Jd@43!(u5ahplR2MR#+Y-Ad5?R{BV>HuoisACa~~a)lNcnIn>l=-n@AAEc`<3Cn^?-YuB3f2t$cE^1Xz7)VN%-qYmzF|R-U;@*x=%$W z8`ehqgzUo-aidDr6-U!a7N z2Sa<%`b4jyvw)|(~W_9h6WjAKUEHvG!?zl+Sg@51t zEPZ%rqx#fk#glG|XA6%BWRpiem3n{L^CM&J3HD25w_oXCKDvFpz1wz2+T<+ySyc8V z+UKkfBnrvMKi;}a9vwuJeJcGJ!$-O&CpMn?eWQBy^y&}l$md%RsGnV7xf6W-6;s{? zM#cPBV$)=Gx8?6%qP^I1E9??E=9cv%fe&YI1Z!lUD`a{X5*R#^P0=G($lyzMK{2<7 zd0r&)nfiO`lC#X8DISs!ow)ddKib9?QKuV-WoAmRQb+o<*U|^|O!9Z=Q`(*6$JhAT`2> zjfuWp*)u%9IbS+|4$NB57;rX#T<$5GD&)&6A*Rdvkuv?1;HXMb>D73(MmsK6gnCq z6D||e5XJmCpt<8)6%Orf{*|ASymu^3xF{G)cxkxo~ zw&sk|3-z4iu{z+ZD%Aa<%waRlDi~V~5M##3$Y{Z+nsSq|Oe<5X4&|CsEPO&ZOD&v} zCXRtOh?CoyV<1jijZzKNW>ax>ID0ymwyW!Ca z==2%4({5~T9W!n-?bAB#<8jRKJgv;_er+N%gB?cgHEmlRy4Ua0meAg&6{f4c!J=22 ze={dkU-bTlo(&)Ub+-GBg_3Hw^fs|^%L%JBT~5RHm<`UI7P(Hrdd84Bx*xr^zG z#ET~M4@y+@*Yz}wMvKrn_&cnnE;(%ZuzLaUUE9s_QyLWM4Dab_1tiPAy*XX-Fo&wF zTxBX7p&fNrTR>Yu8#Zg%8IcM!y)WQZDq4E4)ZH|9gx1-}xy-W&?}KF!wM``#cy6fE zaEE!Yw+A;!wRC?8yri|*=aCCu_ecY0%~Nf%Y~0(>*p%KxY*uYP-yB?&m{$6UyL(OQ; zfxN!yL|&)I_U&Th_9KqLLhhndDFexyY4N1}vA%xovtghLv zg)Y@}Rr-Dg9)SD@?;hpBmkal>*IeJ$an}>(Z@Bim0_z8A<=h9|?HkxV+3`2=YU`4V zxc2@&{ck=a>(7(o2c@AGL9c7Fykfm-Vsdm}>%Q#Px3aK`20dS`%_^N_f?tG0Lb8cE z#K2(g=PiZyk>o?pk1M*~@O- z2-L9VET;etwoHWT$4nur5L1}kDN3X+|E5X3-@@Hz&bJ@lo)q4#Fz6@~FtW-l-(Nmg zM~9;0p%Drb3R9(q-&9H#Lxpjw+%xEt?1-oe*^I+>3EIYRH*h9#QWn(az0Qk#VlLSr znOo#iWLpF@2e_Qt@<@e@1bv`fxVliapwB48sGYKnYDS4?UIS!!@oMrp8W;j5Ut6^% z*~r+gcCj&>Ja>`e>UZIX#cF4T6eLQZcK5KmTX>}jwc>T2iEiE48IpP1!Z)0n0wV`InX}Dp=jH+SYx7^m%1ea7=QaT8E zzx!rCq{x|fw7zE4c@lo2;dxCis9?0Kp893nSllOzPYtP>4sVs;u6ja;0!p3qhJ)mq za;<%4^%rmoPw%8DY5+{c;&Apy$)HCqj~#tgP<*jV znNSI@OsHJ4`;VPB^GX&9Qv3HI#s^Pu-=S5Frs@{n<8OWUc6T|LRI4REUcdzR=AKpc zi}qo6bQT4bxa5e_v6CZPkXHNY+wPNLA89gpSarlRg(VFLm|lLm^|8~Qs+;XX#c3;o;Qm3!-B0do>lF{N-*>5&VnuRcxpII+ z*k#`~h?JD!cF1RT18AgW#%}*XciL3>loIq5v|z$1pcr3`AJ6g1pm{^1J82Kg+P}M@ zhXs!Fgy>pi0p%%m%l4n`-6ITaJMPtd1jQ5x7vyhi9dk#V%YJpNAdl=vK0TQm3x@TQ zmGh=SDJH|RfBI$l+2fch;43Oy0?6SOuE9pY4^kXR)u8h`gbYq8Em+I z*&l#i3S|9xj7xwkJsH`tOo#i%U}J49X&}g1@SzRJ+E&op`3VW@l99=JOOqa*ZNU$( zcso0}xJ!G>UHjt=Y0~pyG2q&jKVAVl%3U+ozI#OpNI4kh?SqJOCCk5ZDp&6gUvh7J)wa|=VDPd0W}_ptMu~g) zv&vJlW5-XPxpYPGUmj@l6p_y&HSQi&clfrVq2jek#eZw|&yG&WZ##r zT!{sp|MxNfCp=UUWnW_0E5$K%vHr^cjibNs6s|0!gKSLOp}S#W=6?`C9#_1C8= zW3Y9)>TTB5#(gb*Q`X)pM^ghI@bDD-ROlzJVc#S<;%M?thfjHTuYGfpj@-48iWb`l zw(vBzaRI?puu~eM7sDD?`~aJ?JyX&!wUYUv1vi#Yj^xmU&oK?83TEy0%aeZ`N_=(f`G-(OTU3|HWyJL{0 z8GX#;T1K*GmzWR_!}s@$QBq!=UDd9L#spVFsJsDIAR+|j;g$~8E}K(9 zG>XL_LoGYM=;3EYa0-qW!}XNBJeFs1_s$)qc>#|1{hCWC_!8cUlcKCqEYoUK_*Rum z(KzsH9wZ{fDy^<+ZGy-*2Gb)fpf5`C07(VXm0GT60B#xN6nS zjpGPz@regShZ&UachW%0&=V`J82Et^iYZOzt4#g0XWFhw`SpAjZ?He+6I`r{bBpGv zy`QaqTqda%YJ9oI%2Y~38dFv~qrf0mw066`&RW0f5&AyXi;dPQ;EA2qWtpq_sBIPh z+B~fA4h4H7A2A|mcy5f5!co?ykbY0Fyg{6PU)Lq^;QcmIi6A5|>}uRs5sL$4$$l`T zDE2Zh)sG_7-&m1sSWCJL+?pSrzc;4#FDCpCbDF(0RD{})afj%MY1UUPniWj48WGlO zfQp-H?S?HmEt(ujme}&{px&AdU7&2^n+v{!H+df}Uq;j2h8Go0BS^;QcBEINE zI*90K!Muvnu@=?*^n#Wt@anCPpJKn#y3ffns1KDBdtwmfN{*q;BNA58#K473$ z+xopQUJ6qyiT_wg%iH%B%rO&=fN5Xi|^2Pq3x&d zxSSs|=IMDX$lbg+Z^i_=KMYkA1${M>ThLK zVnN^GMyYS@%x^W!!MzXP!M!wNVk&F0)?cXb-l_A!x%DwN@Eq(e0LfK#Y7v*)5Pe*y z+58n>!**0kP#3=lmUjm>S>s#wnuom%PVd#c1Ry^v%jK?qyrmZ>@Msix(@)iUeVTn1 zLF9fCu*J?4vN3vT)k*p~BTeF55&FRMD3c#z3<5{(vyK|t*+oZb-Sdosw5867xc~yD zU`%t4R#|~rl8%9Hx(>52iV(3U*k;teIW8^H#!jd3o!|1yl(S!MYylcqtJ*8L(UE*6 zv2P8B8SEy8UQ>81per6%@i4Epk|-o~f3La44oeY!5s)_ZCbQSzjT%q6*t#DuiFY?l z<5T2pod~;O3_7i=bLRQoy62o9n2A8_GWM*eBekOQ*YM4iiMKj;gKgO|tcpP@Iw+ZZ z9OtT>TDWP-YEmpsfla>F(1_|6!Ssw;&ePBVvCA@>pHO`*l_G78JMG3iV;N1=F8$Q; zMN;u+Q;Ha(OCFEDKmj#1DmQhz6ZEFseM|AP8kX_uiRhxG_y(_K6e@1{ZPlJglfBdI zrxr~SN}aZrODSm(59cOZZEfU^C-T9)w!XR)n}n?810atMDzapRT|B^2&^YVJBW1`T zXsB04TtFxOqq?x)0&_~yK>W1&XK`(~;iLw`S1nmxh?A>bCv)X`Sf{9i|0G7V*wR$w ztc;uQY?K(EBc~w{v#jMi1JrjvI}?^7>XFrk&`%M~$PjSUwwrBTJUdPy;y$O4td2J9 z=CQNCFGrWGz>%b;6E~hq!>5#)TaqM{!);z!ICxdO50Z#M_}ttXex|FOK}2gRnOasJ}k*cC(A5 zvCgntrFou$Dd`O`&&lT2$5@?RH=in4TC9AXTJ`V%TP@1`u8&jObNzQMZV&BT4N%Zd z4X2Q|l(!cr=}}{k6_%>ng`Rj#z}6mWF0>Cmu2tAZ#G%>~szy`!;C9y_pCjv1`Z&MK z=caxcVqAEh3pPtnx#uiPiVbfpYEx94-DWgkZ3IuC39M3bya2`^8R63msCT}1MR2h8 z#Wd{H-H>VaBDQ?_z6Ngcw&UnzGRET+cC;@jRS9-``=&7H~gg#2B2q z1rp<%tfx_uUSE&(I`$N~?tJAeO>c0$(+G1jES*dr=!|;H8WMH9}-0dD7S=B%7H#}^j@Xh^=BYSaOTmMJ@2($R3+6`CEj_*n zKtfa3!fsWK7Id32#z0fp^?7tc!}M1p%AYq3(y~i&7|Ijw@z?r2USoS2<~k{%6Yi2G zKC8LiDH2h+7ZP|g#onsQdF;N))KeNBsF7XVsA@;0L}N(lzW@HKQgUwoglxHC4b@8+s()*Xl8&DcvbdF z7Xcr+q3D?w@Cg9a6JI`I-M38P9x{dCBXERCS`Un6wJhg}*|X>|dcT+1@8T`D3#-J&x zPVPcV!p64EOzK$m6_-ZGz?BY9g*|M%_9xJKs(GBG@2W{k3AEmAeQhxJMijfyUi$p_ z8zu0(5Wmm3%Z&Ic7Cv~R((CotG<6+8zVS<%>qb0-n}z!oMYAF=_vtQRHzw@6_qld% z6r;T+fvW*)bM0s&?vKTCCqfODn94S0h9$UcwW4AuHR2{RC?hHh?#IJ%Bi_CSuyARa z@&0{RC+%Rs-F}Jp@=A(Oz%HtGKUo_$ zY6hd5o1u?{x)P7!0F~U+G3HW^F8qG(F6Jqm{oT9XomG483*n9}Rv|p8!?SuZqYma+6~Ti5LYwHJ0>-ZnYOd_;Z!*Xm zWBpGwsJqEzJpp~|W0lTGduh?#Lhir6v40}QaV1dF$9d^p@)np7d&l3Y6@3RHSHlxB z5t%jqs@;n5M1KeaYkf0M*|0C<8hcGwU>(8CYx>c^iICJJeApLN7HZpwl_=fw>}U3!hTUhS#)=Xv|zBd6i@UJdU|Ktq#2F8G#XTFqCExM94aLQuE>kR zq~+K>w1|Vg-d(P}z&=2(GI2^TSHDlH1u-F~#pmTV3vtGc-md(X6`~W~{61U`fem~vknPU>8YY>hn!sXt=B5c2 zH$q>kW~|dfx!-bvLX9Y1_Q{j;Y|^58phs&`g`YMZ)+Frhy+9cf8F?Fyh6dQr`Kz96 zPpnZ8XFJW(MsBDxM^gt!k1?RTD0}3YSa^40}fdG##w`5KL|wLxY`0qorx<6ea~ zp?u6*l8Us%(9B}K_#)egxw)jyu-IHo_5peG)tzE{8T|}evUq@4Q^1CTFpF<|88*R!VC9^U60@XtRiPEC z(#TeTi*|T{CRv6sSO)HO`H694SAysq1cQC2<>%2wL#c4xOL<@})!4#xsYe`M7WR%V zGG`g9U<*->YXV~mFz+9CYe};|xs7@!?jG1Kl~o482jXY%^ZP(Q117^Et%GL7%jO#q z4_)zqL`2W@!7+H-Ys6RzP4S8`Gqb0)Pqx39=TUq8%BwR@3bAlcy)p2_aGNbKS2wBs z#g<{!gzNP7z zwh)ZWurwc~E_~Kqug~X6R1&(YZlhKbYc`0e>Dqm8o*4p6msp_b4H&?9^IE**Zs?3w z&C-k?b)4EviYvHeF#35g{sp+Yq|`O0VVfM+qvX|G5Um+ETjz`iVdiuN!z*k72+*3X zVCYMTNkS6_&<%gxAZ#}&!?Q;Q#9|&h780?Y#&MiQ41~pzS|PK8XSG*-zArP{r&HOd zdm5&Dp!2rTUMrz|?Nod{a%HrjtAf92(rX&cyw@8GwSIt&)h6%t+O_(~+=#|0!VdEzY!>%KRln9Uf>?b2~u#~L9r-4bg-BS)RUPZa}>r#QPf3b&Qa zXu0VUCL?zoZ$JetUZvc{dT%-krZ-7e+I>Rp%MEnfZmH^YHX0geaqHJaFAnNv9GF(k zYly7dSr`|O#irQg`?+tlIYel< zbx`J#2ZJf>XkPc*vkP;J)y|(c7*lLkJfha(#0-Ta*wQT5jj@i_x9x5@RB;<(6VZ5P zDUq;RH$P|e3+LB9u6DacRn}^Y%rfq`V9%sy?4}sgQmh1m#h~LE>T7FeOP6K1MBG(8 zkmV`llda0}5xi9_i9S!%*ZiKd4$&)!i^Q*YZEm&ldfDFq>F&DORPDN#Yt_o=3!olX zm9(KQCz?aPN210>9!JGIq!FQXVRafpc?v$1Xmip3O6qWN1n`A$2FsUen` zhudo;PK%`M^sBlw@i2JxA*-4e4d>4sMU9-S7U;Pum%yo?=3%zCCeZ6=T%V^^pj5 zU|F~q+OSN&PlC62B%F6g(-Ulut?;T?D)d^3`#MnIUSe7$zPsT7E9$3P-52)}`hgxM zZnlU43GI@^Q2EV_#|=Q+V(a15W=Rv3g1mN)svA*ky$yM~=>3eB-AKPQd^kri+a=J1 zyD5w0L7wq?UmliUPrq1-&T*SpO|^tZaplcS?OG6rgH#%&o4Cc z)k|^XUExOY_0mvFa?VLdv2mj#Y0BkDMY)uMPce%nFJ9RgOauC_7s-?!`Qc`ODEm+8{5^iM0f zUb)3KFqjVYR5x4kT&1a+WH%pw=k%Rb=*RoYN~*3@_?1L1M>1`nWuzEC^Le;CRPw=H zkAu^zL$jv>-bIzJ1jOO=R}*Z*c0RU;sI+}~JID=-EqS9L7HAHlRuIVcTkBbP>Z=*< z9QkRb&AVORc+q?iN_fV?bp#}Ss`%x&z^hhhXv@Ih!>j{v<93%qOZleF9G{^;Q8m49 zvp#X%dVl>PQYC-}$Lyl<-J*On)6e#K>cO`I+;&Jq^EW~hP=6uZcms7X%o$j*uahoX z$P4FvlqL>(R~@`R{H6cYT0wK1-ey7fDEH^x$EEn{;RXcqVVlxxUP{4Xl|DFZkM&5t zRB`l-=w6@nf)kdl%?bOEBi^9LC@;#CiXx5yHgSLu!F7wpp&h3(D}9mMr@mAGTrA3s z;x;lxcuYnJFz?w!k<<@1I-_^d`i{dgxNRteaf^VFa9vu?b2b=lJALu_uzl+#SL~4sN*3hFbtQJPtX}i|k$l9JyG|sQx&=KoqIvZ6uo{Zj;1(W9500K* z_RvYrwTMz=RnpPq`bfglJAn<0f}g05Vn&}TmY*eY^JX!QfFm8&nGbv<;XDT{p8ZBR zYZ_8opqg#a@@U;WG9n3web;dEH^Q}WlQI%ca%D|N>!zoSB;2Th*V)9Qg$vgv>1N2+ z-0wHKu^GEFzjvcWB6n zX_^S=wJr;FV6rm>^xW1H>IV1Adp$bcJB=QQBz?ey4pVUn_Qzssv;AWm)`J5nO}}2&(s0HG21M z`sPbWlukx9QNcA)kO-fjcne%Ex1VI%+PnRinqHkkwF0ImsF?qpu43^SaI}Ey3|&&o zR=#eGLqCjpk5yO{=CM;VwP|Ga=slqrRL^S&H6Qur(Xe}Jf%v|5ePURzKF|VIMAxS2 zFY&sx8v-iJfI~Gq%o!%(EA`2l8^doW)2X5GO^EA+4-IgAHXLiX-k>1M8neG*KiY&) z|I6@S9vbr_xod2H76pl4YHfy{*ou+&TVXud#j@J#Zkzl2Z#dwdrv<)>vYlCkBU_Sm z!qnrrxri_p0DRj#ud;{7;-*xe&v=rRlt8BcKD+|yvW*ik7}O3Y)?$&)J&D!D6%gV9 zW^vV@gI#e>M{F|X=H46CDXYrhcudeF;hNugF@)e~?$`JNu3^K2A!vGXh{VAU4z2R({pz z06tW6n-if7Z z8+3^suHb?NE=XXMLRPX+WW+#!-wlP97#A2i9j!Y z{{{Gzj6O6RWqcR{W1KIem4R# z4gs0_;-HVg8-Olp!b0oZt6R` zI=XmLngcSMQPbj65EFeXWFLrLP1cPL+Y9v2-5=cm0+qm#wyOjXcy%0*qR-yuCYwv= z{t7XHCJ%(?F3n)4fk^jW((7g~Xp_7lY|9gm$TZku=unl8KR6LWP}*1~!fL;dbWCZ^ z1@et<2$%`?@(u6p98lU3XJqk9a6iv2ATsaEz^IqbQ}J5wS_|$ z6$bUkqsC?~1i}b|a0F7`9}Hd^;mU;A>W%rY>#l7r4?>{Jfg>R^GD9^xY1p4m^3o$9 z=};G6AshIKmuN#3OHC#fcDJ&c0}uRK`sj+MkP_pU^aWuzPjiVh^v_ts+$Qo&Zy5=8 zh%Dr^xz6&$Lh*y*bgo=j;yBEq`u#5bNWL-9PBP$>Ejj{D^*OtNV7@dI0a6gErmy`Eur=+CG zIeXRW3%1NtP=Fi*PoTr?vGvgqObQQC#16HszQz~ChAR$Xiz#4h*et(yv6UM~+#8&VHE%0NB@Lc_pj1@U;k5r2*%?X(@2dy9KR z$xg#8;iAFzc_YR}{jKnQwm7C(8K z@VQLAy081!$>DM8MjY)AIwQ*jDEI-fX)344NJX7^Y*-Av$L_6W?zZrHdFSeLN={jZGTadcH3EJg{baQb9$PtUF)&HIcyu;FFs|yDaVR#UXh|S8ND9_|`^^8v(hnc%-bK{OoNmpH4%;H^gFWT; zVQoxX3l=~X2sZ?_(zSxy)D&!Em!B>CGF1Zbm+~Xp>s)4JP}psdoJ)6)TQ|eh=E~D| z%kF{kEnmKbu+a}HJb{?|wl!~mimJ5s3rGWuUHrun(a*n9uNIHKwfS>rV2!gsd=NF{ zsm#$m=#DcstoNYXx$W5Z2VQ7uXkqhP?k((bBUVWT;2zh*OBvqh&-FnTNa0Un7p5Bv zD#n04x5Mf9tf4!=+@;jHY7dh%b}QHB<@vjAS{vBWn%?rScn9z;nI}Mxy~VvMkTy`G zCV00R9{~GlbC(_okjxMrXGrIh zcw;BcU9X4y1Wk%UXN^q@l6}q0{zSh5S9;!RCe05N8&SL-+gHvnr^ld+^b0(J$%w~) z`D(>%4-#+yS%9jjjtmLNf-?k?D?nO{_&tVO1jZg6Tlw&b4&fpgOh&t z@L(&k>w-j!5s$z4E`BKs3hvTh$7IUbDlD$}gqU)g-`U$tX z+<_d7PFl}86R9*w21$aST@vdl3|3)TJnH)qT|^Bn*mj!hToXK+Au~YOkC0QG-(m(O z3c+NYO<8J+I z7>}J3)x4&VVM6>d6@#>F@`@}Lls;! zOA~%FFo^(_<#DK0B)gZX(=yCYc60j#ZjUEZ$8HrGT|R|Sg$Mc}J&bgt=!$DNDbL)< zsq5hTC{IQGbEE(Lp_PI(3%F9qMc1w*80{1ygKB2nZkq_t?+Y|UEA;xE?EM70w4>OIP>h^3nAU~HdMT?Mej9OjfZBLKSZqq**J zWJ2$76TH0M!ymT4cww~nxF2{abqvjwk^=X*NDQH5XPaT}$Wd~eE&Q%(1Q1uB0zn*C z)~c=2D*t77{kg-lJx-<`*w$2inTTU4EWF;$t}_VNt?7$eD7VQBK> z=ObM#8d_-FXAx%$0_7os0zBiXm5rno#H}=}8qzmrz-MM=aLqKj%?0wCMOgD0+Mv|q znn{9D0r=s9*;|umoK!z14_}PdAEmwNQmsDKEPgUF#rdOTqs6f)y9QYuG{*zf*XNiX z&r^{p*fq(z3#4M^n-@X)q*mNfG^3Xutq4`F!uDKp^MfgCystrOR^%`-y2PtGj9z!e zQ|r3BVlvyxJFufcb^>4JJ&EC{YSvFP-%mtwoYV z-6w=r{Mm>KvZ?&*4NdA%;&!RcMz1B9MU;oJ+Abel`)xkw@O@0?ttZ_AeNJJE68&JU z9nUO1`yzhID@LA?84cA%*8n0y*lQJZq!vEda0iAArI!>y_DV%6JQ_C^m&)xcB>bCQ zg)l$fv`u8<+9SGcyAQt2W^raYR;X{y3Ifc66n?jqil>+|qhawubBQ0@#>IWV3gMPT z)~(l+8Eh#7zI}|l?18bb*psjf@X&%yW0FN3?&0?sx}`-FWQZR`kVwkPv-_f9aNaWb z3VK&VgGw%^aJnZ8dGf;Xq`)!g00k0WaAoN3%JS*ziH}@hV+f!|X zQ)+RuX29>7-8^&BEw6c#l+}qr!|s|%&`?J>B%s8s>00o4`I|7$Pj7qQ0B1B5-7`}e zw#KCRq!EdiA+wCGV}&%S_bsn_y&5`d7hiV?0&@qZ)&hzP7hbW6h`{sP%63azNZ@ZG z1`@}Kvq#oIYh@A9X_qQj8YL_tn=eb|l#R3_YAlIBf3J}bl55GjNKzz1m)0(!(lXoW zx-&BwJ{8SE-Jc&IG2snzHW!~6TbAo?+}7BaRmWI?2}agyEt8Qls|Oy9KbGU81VKhv zW9-jp{1@YUFnCEVslTnW89I@(VeC?rv53U3`W_cZZJmsZ%#*P670lPppg*xSsvsYT z>czbQDlm$GGN=~nJXV`nC)4CP@GFA=M2w7pxaXu?rtf~x_5qD9PbJofCya>eg-%Ym zjt}SqTNVY%ecYADeuwTLrQ~kFF`q$aw#FpB#8ViRpwNh!I|uI1^0=geB$bJ+!+#)$RH~ zU3`%3AK&$0<@|j@K3{)KYhM_s4nFR@vi8ov`RL4pGxyCrtC?-&BnBGZ&)YI|S@7LmKqs%=5KllhtisGpdOQhlu*C?1BYI{xr z`If<7Onu0xtB5$D7}q8lWBQ=n_6Yy=4h>dyHPwBxVpJ-h7a?755mS1CC{P0>=oKM?uWp( zMS%LTZ;h;C|#ROiJj_-O5ad872-Mv1wq ztTf&7A^>hHupWMo{33st9#0^5!({SWg~aZWra?M+&)v@^{r<+3qZ+IdSU;0ERAg!I zTLzn25F3>q9GfwSDZmHTf9T?fk);MAB8vjry^fF4s!hW0URP)uwtJ;R`}(Pn{@w9j zmuEsQBicrETGb-!yaR!)g;bHXYq~jQ^meGea#mE%T zeuGmqkFG|g&}YSF=}#Kw$jki+AKl7#Ie&vcUS8|LI8HNYD774Uvz8>#NG=J0_$`YG z{Y5+c;vt_Z_8tNdZ6n9)e}f%A(bfl568ypsIa+fcIfI~_L->_ihQ50=dVCafnEopt zY}Ps&|0y4$Gf|7uH%G yZdCe@21Ou#}_WQMd{TeLbo-RXUoc$d)@tVkwZ8G$Ka} zM;k@bO)t1A_&4c4KUz}WH>Qc(?r7nzGm&(Yv+(%BUwMFEl@x@(P9log{IpR=3wKwP zq#Nb_0Va*3b%WI-2`7h7P5zB=j}G&``Nd+dkJin97XJU(g;$(IpV{4tQJ~ry_tOQ3 z3%D-M>$c46E2Nc*$G0^{NlY?PSozBPdafQOlIXb($nClXEMV8l4hWm&E}P+(g||O$ zkDN+U35ibVW}TH41FY1!8-lgkng2qAj+YCcAHDC+h^l0_*iS30k@A^KeyfonOIaxx zuCrsxh*FmRFkvN*jwnl|2Q?9p+bbU&T&IPyqWQ`iNe4J6GQ2Zw>S(?#(+8KZ?Gx7w zpWlZzPe;HRy(adSxDy61i*Eh&Reyg7LQ_A&-64#w3PwD9PLB8#axwZAIqM}ZayIG+ z!oG&na9r5`4(1_;T&Hra;7wEY#RZ7)0W)h-^0Rizeye#QHzwvw@c9T*r{OfZ3L=5N zTh38}(5mc#-<>N=96gw@{djpoukrgIO|?W=7V-cdaK%u7py}_6N-1}0dBN&VHSMf!~6?va%1s zyFN3pKEXvR25as^3I?Xey(T*+;7tl7>aLvhj~%S_o_;fuM&=~mZns6%b`n{BVItG6EzH|F)QO5hb02H zzbwU9t#-t3VmmP54n{mnlUv$$n16z`nyywfuCEx1%xs(ZL4|Ay{Sw0M=ZD|}$S28d zJx_zg`IohEk0aBcxb3g>@&Lc=ZVs>gcahp5)24~2F89~>Uk~R4ep#d&evBWfRMl$o z^(9@m?%vr;^$^;Li-;e_CyXBQc`7U-H}+;eA?FaFm8OP8RDLa?p4ob9!p{b7< z$IC`)!2A}Pow|#ya)84O@ycC-dq?85SS{-k(e-0>*IQ(NDQvIWL)Z5J-}QEGX_UkU z>ARL(4Z6Kc>8n&OZFQN1zaMTW`9*xLbpXks@i-LuDqMz?Huj z9}_KU@9jR2onB4<{)3L$*3;diM^gKfTnN2BX}$v(*Nu5Q=hP7V^bVn{H^%fR(5pyw zF0W%@+74p`3iRc#`Kq%yg&!>-0lmFt3BBKd;MhYDtghOL&WCB8%k0SZ5C_YHK^iR4{d}e4%`TRnSrl@0*-xg1@L6F-{D9$6gIT>4N}GjilmJ+sFbwDv_^ ztqiI3V0DMI5u0ZB@Hx#xRB5#}WoCWQ=asYeMu!_eRtefz7?*)uphZnOp=Dl}n9BR*w|8TdJ= zD@LF#H{*XA?JDjm8~^HGeyZw`P|!w8HLJ{50r^8U(IqNI@T|FajvK>x16}8^t}Qc@ z9c-q*q?|3N58`b-+T%%Sd#f5j(ghg>NTXv?S6c!raAwU`&(x6VON_KUWCi#|ftI-) zja*Yns1db_W<4@2r;Sjo2kVf$^hz6M$wJ0}pt;o#OdQ~C)H|d~=2HFFGq$+fb~1Zw ztZbjbRBOuGiUixVb~}5E^ldM*%lmu3hFY+&)+@7!$ubI&IL=H-(tU%0chyJc=YlMB zzNLRps9fzA!}SYfgaN{=9P}PR%(!B+U@!13HmrLfEB`>)!CU5z_=Cfw^|Y(*fH?8x zj_dxbpx#o)8gJ{aG0E>=yXSNaO5bHQKD{b+PcL@DtnTg7LV+2uy?E$8+hJbW_SWc* znWZHgpHbP^8^;>`NPT7Q_uwKce_9h#-nZ_Eyzd7IW(nod%_x^zq5enpIZeIEyd!0x zdtai`NSx)>CnyE?mtmd(+A&QZ>yFwM-&WqwJg#?hvf#i6F3M9G;xj z-&nrqUpY)911WMzm&F|P)-AcTrEc@B59X`y+N=Z$r@=WrmnJv}+Z*hd*RJHY-Q5A6 zffXx(G4q3=YZ|AQvxs7funJ#KahI{n|L=fe&3G%H0KGV;NorPUm(nue8v4Z_tmXf8 zAl&A=V~hK7VhhR3laYv82ATT|pW8puH;|CpsT(~vMAjxv*E}PoXQw>QxHRrACi}Ow z2s!lSE!P1uJ?sKK2@dwrG3<6U+YZzaeRIfo>9C_pj5K#$1<^p&)IcVu;Pbu9g|H+O{LnM&$rKygM*8jIP`8t{?E4tX@$kWhd%3 z`~%E>VJlZZ08cK`{gbUMl29b4&>`Ihs1!2>vP9X0>?h2mEA~I zBqh5S!aZq1h5B9U-(?>cb2;};W<>cWLaSju|Jk{UR|u_Q(nTUQI0?6|WIAVzqH!BA zMCSju$o2mr@cmEo|JyOce^mD$)%_a|y!*cmHRs2eu*Ci>hL#xOWQ?``aPaoL9(yEY z2UFMkMk%D#M%Z<#vj*`wDKmz2Y5!;b`cMx0X}-EER%`P5ERy##)pZ{8mB3U zk(a;7EX;qJUHZC?>;Y@YRMHC!^fmQ(Kl~Y^;#FE_{)Xuzl8+ZPfwa2CgSV@94Zh89TY?seZfo?Bc6_F ze&5wq*U`>FM51!YbgSN%m@al*FQ#)J>N<+`>HtS7`%%Fm zkC7||Cj}WGN62vjX%2;eH_pfvIUwqP(e~!?P=C??cnFn5sg%8q5VD6bZB!^FA|_~Z%#5-dMq!LGhTm(nyjy%ezsKYE`+onK$5`gR z?mhRMbI*C6=eZ*<`shUXwzf%q+Nj;Puo=tUHuZ55#8|%t;V!?WINUP-Xv4Qt96IF% z_%9J^os(TS0dfL)bp8}-Iy)+qK()fzG5o2emXkQ|%yf|ZeSw>DSI!@Yz z+);*;tbe_q&lKt9^tjB_GZ_G}l#C0H&8WIOC?O_)x@nUw>HjeR?ru~KBlg7uSZ16w zf&M7*%QQW^bfCiNft5SKJkMsd?QYe_i&oRS8qbemr#Ua`2Ku4D09t2-p3Zv}gik>d${U}&d#gute3LO*!zYh^AY|SG*3jjK@Ghuq##wcBWqFJE4L{xk zbWtqGdPae`L+2S>cW1kj1wv_;3js8<&d1;cr~SZAFX~QPw|e~(K6-VWb^|*D`FB}_ z0Dtv9SI24F!u-)Tq}~Ad>j_TdM>gV?*Txi4_YddhV3qN)6L{2$Gr&z3*GqN1t7JcE z-$S~CJI?v(Gz0O3f>TfHtp~b@YYsgtpc;%Ma zcUR4?y%IB*JG^d2$tz|!2;h9|gcI-n2fXwP6U20htyBu-Fm zmjW;swp*&(7t<$-5Q}F{Qx=jRgDu}{ts4;ZgTxGWzS=yb6q;7hnC9ZN110kWonP5< zk@CUcE?0Urdz;L++t_>kK5bu{{JTiKd1iu{+8tG`v5T+opAMpQUQhosUHbvkLk}8i zMx@;9*byqDKtfV zzAG5|_``)$(l3F_cuw`?7)_T!chDjyT~yblnOS3Yo)s0l0+!aYl+&_QtvwV^bDI9( z4?*Os>4s-{Cm9);t!syU>>IB^64Nbi)F>0VJFYgXH86b&7odtbE1Fnp;`0xYX2$|9ruWuQ)Mjb>tn6I9taBdq(J^=Iq zy$_!cJ>_4Z>04&%qYh01dH=&-@|Wud5}#a&A|zn7mju@jW%?cpBvQhHqc&rjsJu zq;w(=KH`hqUwhQz{csTZgN99a4qKGKQwwElh3%ITZ3{9p#e*4~d<_jBE}j*yi?|e# z(YZ%=r_!ZIJ6QH++~q(f2MyFr8XBakmr*B-#yY((FeYt$F|RFw#%^B|)oJxylYJo@ zST~6QFY@d+i}LhhzDOG>VyQs}%jb^|BRUk$tO#yf!mtGy1ap6pnC1@8fYf@k(r9-a zbvLkV~QAKAL9x4|SmF7W-nfIC^iXT(tR+4J{*%=))6 zn2S(85+nCE?~sMFou#wu21gFRGPweXXBoCY1Dv=Y%A-y~_G50__1yslncl(t_1T|4 zhMW=uhhVSv9wG{Eh?6oIswnLW)$C$~h4sn^XTv zVNEh`E`h>k1v)T1+Mx6q?vR_+7lK;~AOW_F(D1e;I>`jan=j&EUK$vs^-`sJ9O2@b zwm<#=nJYrhFhYVJ8H zXkx!PBB)j?b5wi+m-9G%e(#OI^~Z}j#-jafD&bz|V3G8FIR7Aug*OnC%aN)4{y4EH zf^8Ew+8bIDwZjj7h+bEE*P?tuc)>kYuG-Zx$Cy^UKXh3TMS)JZ;D=bCt^{#aS&PHr zkA!R{_jor8`x0bG;FbKXB7I_9yDj80>xD+A%k4-il_R}bpKdIqAOCi?a=8hTRiHJ; zx$$DbwFAwfi)r0@2`#CL<`)v(lYI3DR^E7w?onD_>*imBu7s!&L%vkA#K7BMmR1$C z_U!gu9vN38n>N8Luxzwe4RhNr9K1Qsq(${QReholBYTQRrG6Sj-2BFxh@&J z(_-rON8tdqrAHd^9wH_SpcOg}(Y){dQgdhQt6O^)y}c6~w)!SEaF#n04ihaA`W#z@ zj(Ex))4f{YfBq`Ngl13LK?j|E9FO zEQ$5_{)UUnu2A;)KsFig;83HI|G_3D`8vY;l3wgrd+0JJ>XzJv=GfSD&~O2%z%^#s zt2p0zfametSm3#|#c!G(lX)l=oIx54cIqPip#~Cc4GtuvWwQI7Abe?uT2IbV1omT5CJv}{L3}E+G(-2bF^aNjD@mGoP&!WNx1PXpj8K2chK3Jy$Ou zdaD`xWCykN z7Fha=&0Le9=ElXu@htyw$O*Q?b!~_M@yY%+rN>nN#h?G$tC|YwCM^ zO7G}?cMbQVe{XzCA%X?!Zz!IsW z`^u^Knih?QW_Yda`Mm?lzx-FmulWNrg8+CF(Urf8DvoJ+~ zPL7l}$z44z?f_d!>0|gw4Dzk-nM~Q|pToyA4;FiQkDkJKn=8w>Dp9HRc|*N#Yfya! z&{=d#7?d+9Bq&o->V+t>fTybGyLvkmj~jsHdG`P|ut0hIPtBBuVlP#AcHv46@O@gL^)gj}M0P)v~u~Y8u z#Df7rPmZaR6A!kXpKbU6i(OVb-@mES;fczDMo}KB{_NP{hy%m5uLtrRJIvXrOBtBK z7bm85QHH`NpxnJg1kxNyO=y%?tG5DKtrm+B%g)%5IE78&mZ1k3De^>@5zBi@-0@ZM zc$dj@b_BVOBd}n#TjRWyGX+&GY_3)MI?+^)j`VnkGm^#&qw zG?<%Xhyh(OF;9k8iSU=VYD<8(uM-gQf-;s_lLq8ppzmi zb$13pD>aMRL%(d?G|WHN(E0C(z*D+QL*nB*Hv}9VCu5#Pn_q2^^W`h3f{%5mawai(L!@v3=OK}z^I_`T{>UG;WFA(tLa4&@7T-u_nSBU3krUK&SS=vsIi z9O31~9*y3}P(BNHJ*_WLZO}Wd){Wb@taEw*(yS#2=RKSbtY8-VNpT%%Z(ub(Feqgf zJG0-p&fh#;;4Ee<{p$-mXgv>~-vZw4A>G^LaLCL|eqC_u3I@c`4WEvk$bPzwi?!#l zAviM3zUB7`|F@rp>MYzJAl8<8y`{ePT3(jrPRWo?Yla_B#1YF>T8B4&bkd04<)O-E zkmPQ2ifQFIcHM`LAZ;KNoRiQg?@2`D*t~;%6$rh#OY8vZnnRTPy1@bODKV)4f^i9< z-7#9-_^7Fals95rW;Z1u++1{s8tSG{TOXGIXS~+HwsC% zUo8Sg2- z0w(fycozP@3^cjXnZ=LW1Gn2`Vfl$sre4?1*iNnQ3Y<9sO-G2K7WVYmbA26)3X$1# zC4GbPY_4nD9{Kg=^nm>~3+?12wyJon%px-1zD7FJvbopMS_=>zcC@b8eQ7Jz7!485 z<(Q|uS06mzplx3=&_i92*&MNV5+-9zp|-It^*vp^t>)eI6)S9 zAw<)r&SB%0?P4+D`@8A;|J&pL-Wjs9UZTt?-!I^a;FhbqtQz!HvpSmOU8}m`%lw48 zD0I`yOCg{j0f$tG&N|sb&b81$7C#e4pvgj@yx2z4!_FbojkADZw7Y%~Sy#Od>VU#V z5h2yvE|-waHHyP?ar4|Ef!H~$?zb&08=ve4iD^qJ)*V|fL*pIK3Xu_mV;3#)m8s(@ zs30xuT&0%t39$)44`Q`WJ>pp>w9Ck5e=&)rj^5skrs_n%cyoZ9omM6vZNa|Y2Hj={ zOvywuphgJij?im0(I)x`;kJXsu*@fDYCqbx-V>UbAJQIYiayJ&6j1|~(#4di)W-J| z$rLQn`s;6RVC|6viJ{cTA}_6H3G!TOPJ|`A2&IQ(B8~)qTtwK@T00BvFu3Ajhm(Jt}W_CP!NI>&YR-{$e>3n?2+ht%h}IbFy${3oB5Cf>)nYd$n(QHymNc3Ea)v0 z@EXpyS6hD=>swMj2kh1-X<)Z%Jlo^eTh&gn!KMP#2v*;a&|XU=Vd>sq-@gL<$afb_ z8YKDThrt^(D^voX-bc_~1%?sDKxlr`7|^!-wj-Fk>zprxJKcJazGZhcl#M-X;~GEA zj5oP-TGw*mm5;(nK`}(0UiyfuS9*?q5XK$r@MRZpb|3-wc`f~V!FsA8ru){IMCi?C z@#RK`C%Eu6sz%JJJ>(!O16l9qk|2=wz=_(Scl0>{U|J@?w5Ho+Ozy2SE#7^DZ@ihu zg(olE-Q~IoaYBO zYWUb;NI_$oI|npME@;v%_z+?tAmCm(+P8sYfYkpn4Y7T!1^x>Kh>G{oO;28>!7L1- zPHhM!Y~n@FMDC!k=Qa*retWguiqwqjcP=9nzw%Jk-sevB@*-G6spsTVncX%#+u#@DVSsPO(~qlXxv8qN&?=`l29UV;$ze z%xmIqX#YF$4WTdC-?7lF-3EGh$C(9pb{Z&n< zuke3o^3pORCZyUPNzLAR0iuhT)P##11TUK|AWniS6~-;0chkZdKxh+sgB^%3q|x8j z^GKSkm#}jJc~sJ;aJJcU`1ZZ32aTG<-#|+wJ%-sBYCJF zA;3z+HnURB?b&FvUfh%u6l&eNv~XcNqhqj|gS0xW900gz4u?}EcsnnnY##6RmrmQVK|sFfLz3RrCy`Hc?nx7OM4 z)~ewp_Jmsvn$)VY*;9NU(t|(RDa^cqH?nE_U$OFE*$bDs5Ud$?ohgaG;5gKRBxWXiXpS0&)GS1)5Vt-6`(3rS7+8T>>5W0M1} zs^4NLi<>FlC!miCvvO&xRFBbD+R_lPUw_q#tPwiTZcc|rF1Ay!9<)vjs8cKU=rJmu zOpvy{ICMA`N<88KK8gWAkQd3r51QrT+S<0!R>GP`1{7a4zibqx_FvHUjT%@D3mD;R zNE6CM-MjZ-`#~qdUao(n-5nFc(ODK43D&d1l;u6*KzMhC1YW5}l8%`t=k_w57){st zbE6@WDTBw9Z_Oms`L%byi@wQV$(EPn*3;)r{8?|tGtarLUm!rVIePJ+MKAm zml0q$`K>FU|3cEzIod}X-=bFN~*8^b6r^K*zE&tQqPuR(cvdp}6u6+9qslm)}!E~|ou7hjLQ3bJlAVaw@e zuwQ7ET4zF+SFSIFOfS8B+jow;O+$KTS=~hddw&FHm0fM}ue?e&JJihZWra>%bcw zt_sm*tw)y1GBax&s(QOHc5CnkDhf6|ipMRx5)tL)%?s1GfHJu19<6=W8xhXf+ia}t zo88)Xe)!l%XRmOr*tKQXV4CEWM-1Z-`aODvAqzS2a{eV zsf#&YCYHlBHhLS5zb`4+8$dcH$Xe*BXLzu$Z+RYWKsMDfNk0+a>-2&`DlbhQ^1#hk zsPH)yl|@dXaP#&zhwm)q#kMS}Li;5S=##KREfSXMO|hEk2)cM!_ zY8~pMgarkQ^Fjj|b?{~s+;jqFtD|P>Qhhz`NDU+4las=%Idv-jgu$umY*pe)O^W=q z;{>MfATFug!ACV+`K+r4)$RlO(kCUinCikM6OUf@p_+wP>A{yclA#B9_FB0GXVwdM z&S5raN<1`mf5-Rn|H$Q^oJahC_%Z4rOeBVJGE^M!)D#sGW z9ZryEkagXqiO2jysuzREm6MZ`wx6D{%s!E9=JOul*S_ALcHe~#Zs2~*6CEX$ZsbrO zT#P8jqj^-ncZIB~FcRC)2=yfZwR`^))Wlb*`=VFJ zwP?+XwPN1f+_MjNMK`Vvy| z*E-SIrtQ#XL5t#lixFGVGD8l#xTY&Qq#SA2F4q}tO`oYr^B6vy=)UAf@K0H(W~2Rk z^uOl6&*x>L1jNP}RjV=BqZJ$&%DxhlWc|e)P7G26L?7o@;DPt}(~#q8%Wsh~=ow5V z29_Bmo!tww-x;`;K^%?)rAh|#Q7{%+lPD7gVEKuUmc|>f{rz55vX>gLQJoA+Xun9A zqf;tCcWG)#RLo4m-UGc1(F)!t8SKxe22v5f001`bMwfT7eW`u@!0CLqSf#@bWnp8* zJ>=v!iEln^eHtJxZ*)nS?c6&}zHLZ|p(WcOO+*W#aUpDIO!KK=jHu&fDdq8k&^a7N z=vH4|uvThmR_>X8#psPwiSKph?$_}}^8zXKI3ibTL?m~*^ zJc<1q6iZ&J2dVAWrq>F=x+Ivs4n$+$u^lb9YUjc6&uMt}MF_`xlRVca&qrAbKW9|R zn2NUD#)t*F7LP$OaO^h$YaY3v4!qnYJ{Mo%^5<&RzGPC)AW~qQa)-aQPdoSp0KR57jJI6!BmOq~{DKfUXl395{-eYA--cY5J|@ABNIE-UqQ0uiWcRFvmy z_oh!3B9lpQ+sNra0XN^WiL#H}$OcW>D2awO(|&0LWDe?Mskwir;9{4>z=gP7!#w2^ zoBfUAv%6lFV-jECmv~%SsfH%pDY|iaopZRhu{TvSQhu4xeurD%NMqsU%#4P)>mERg zAQvtL`x_WAyvteust`Sf$v}W_>R`%rs%3DDJMVd>1cx^zWSJHDBy1H{SIWH?nDRu~ zokS+NFO7n_U*Iggzh*{VXU6=1Kg!w-Xw=P1OMllGGtRSHgnnJiZVxRzha;S+#^NBW zgocxBBL~FE@kKV_qf@V;hz$X4ZFU1OGX{4R(vk|k!;@cu?APxlf6PFc$lUv@yS!wU9*v~KHpV+XAZoz`OBNX_Ja3pcu4&F zPUOPUbJE8n0v)|#0k=A#L*aMJM}zY%Q=OND96xOm6jT5(>#UnikDcJKo5V|FT}V0t z;qmAYYFohfd36M^D9i@9eoXsY(dQ#VIL6DSB4q`fsch{Zk3UoCGGB1e<`u~cgP#cG z4k7u8S|rz?YCrjyAn3{x_E8Z6!7i>JUESmA+{<I$NelI8(sk1!$^0Q>!0=;`e94o&33x-aI?Idc_Be%H)>nZts???>6+(ky^Opp z{WaSbtoy&cKka;C<*VPV$RC+!Bd=IY`XfKW++-LBpX(ehd)9%<3DH`E>p|Y7OmKOs4&yT|6*! z9ylG?#G_;fQi6i%jK5=k)B)ltTSiFGvlj0Z8T3W7)WZGn@B4Q49w0N@7Pid4lBcux z-^SzjH-onq*`aZ_my=oxSXOg}Eb9C*ry#H$!1`UwVP(Q&TV`=fH`d%WGnz;R#;PqD z`x_(P#e2UgjT%P&+y$AYk;!a{i*-J&ZNaxvHPND~%=tmp^zePRm+K(*!asKH$v!}x z_RhUM{FlWwiCO3B!S_xeW)%vqSC_pP8TPg7t-4Jq2=Bc-S+6Wu`u!}55dma0kq9Z+ z`AZAd9KTbj+h~ndUVe9^J#Z*AJ8Jt|-0E~@0GpNuQyqBXXQ^Lk#kQa>E`!T_Sitw8 z-Sq3;9|N2Q+z9_)Zsg#3F(JU)fHb7$0Q6=WKm?9rf*8?aAuc6$BuEIOuB@&`kt8tO zo?r%NAa7GH*)(eMng3XkSR`PSUB^fkf1>m;hM_qj)f_#_0agh)VyN^JqCw~>DZV__ zZxqvqGUi~75_TE`bi8iKbXe%80suD;)3ymE{Us_X32QDiBvDZNSOICN!_3mlGHen^ z%N5`X>7)hi3Y7{24Db+obNON@?Q0MKZ<8S!vI9In^aAkoge?FVl)sby*YW;TUregR zsu_Qpeb^iKo^(1MwSPw&5@Wq`*XTuf7Isl0F@%v6$+^@cR?D%f+-KEtvaoiKX4Klr z3ygY_39Creul!{WXEygWja8__APu3`fo|H|vyjmmj`8;oU8+Vuv|JV0FWCE8`NwH} zB^FS#f9WE7LUWvbMC*G-XN+FMFWGcLlg^07nW2WS1b~8;k3M!FMvBnJ#eMPqns55H zE{`jgFf+_Gt`;g%etkh&?K;GkbKXNuPL^>HZz#EVq z;Cj0sz_fP&cv{`kxiGqU2^mV6V!Za!JbM*_;}rD~EbzUE_Xj`z<=!C7zyhjMDf0V( zIh#Xs1}jO|3#0SO9grkKGUnxtGUc*y@uN@$zb}tHXmObHmarPk!tfjA;^okpb2VO#18OBBPxrps z)syafH2n`v58c7lcY7?!tU&Kd47ePtfVboc(_9Nz6NAFi%a$K;48w!=FR_$-U&ATS zuSc*X-K|&&IjC?- zQn+NlMfs6^AtT}9_qA6aG}{u4!Lgh{^EuV?%Zf$xhrY%_eIM7ZMoo>V8nEkL~UGmD*qRa*C-5O=$IcA)CSZtC{EgF+7%-{%<8wO@Wa&yM~;x za{$z`u*)8mbo4mivvxufR>d}#&bsan5h+v=BGB>9vvUwDmYTr9N)O11WINfLpK>;YT={nlA9F zjQzCjH4oeU40L6bu{j(UHuk-?>UA$ro+qrVCkFEkyPF%0Q=nOzt&~VaI3}j#gtrHI z^=T!#^p`nD*UCQ!+;-t_ZkzY;m5ixNQ!{c^c)>2Z`Ko!)(wu~?A>?5oId65}j4ST? zZ3_LR``e5(`Di8|$3SNVxGuwE@tM3PPLNJj4CrlM$e(E@^wwl6wg2Gb1bypEEmpo7 zY;HTea#>4LxER1Ve={D_jY_dvLeI9@6F7Oy?O6M=-xv(f_HGM^K|Kqvn`~4v71{QT zS=R{bysQeSq&*Fy5`3kQpndU5VNh3gOX4!@-Pp)~@&H|Dwc{D4zo&H$X~&hdul85x zCB$25*mZ1(MeYOWJGn;7d5c3)iBi*5gm@$ilfDxyC}29199jrg@t%RlLHG&w1@*&NO!A8;dICS# z|5ElvEqxB9Z85LX0z3(RqkWB2l3^tSsN>Ls=j{3Q_*+?eKc}( zWp=>cVCRlRm2AsW{YNfUP|Chf0OCaq1&}hlM_V{GDWqm4%iSkg=UcQOUKRyI6-ji! z>*gLt5e{|flr?*(9UOZG+`NA-tlV!bMd^UAP|YGS;q7>_NxO)|mr2h%SWD`+-A2vY zw`5IlD+h{eUrwhrB5zrJ*fE$E@iBfWtittjFxSqlZ#9jMnoaT?rf4eqO!f6;+i?&3 zCYC;ZC`WrRP&Y?hzvAxxJTz0zB{|=kk%&XoU*sdAO-Qih$KMsLV*(-nJ&Q3PrPMPG(VgR}5_Bq*a zhX7b?kJ2H$JMpFM3%y&31B!<}=wC7^^C6y&Lw8PW#UN4CGBz{n_C|{Ml$C^mL0DGZ z^5$<^+H}WNSf}-i1@LMf&C{mDHeqP*Bs3W%A$6*@tvg=38-iJF?^2)3vS{jj1r03o zY40nDozCI|_9@ja$^T33xi05~(QB0s=ZBtUTRrh;AI>#3>Q3oS23r`YouRFg84gA# zU+MYG5Du&cj%hbu&t9oPcqfGq5PYc$Gr)KCEFm3pf+tIjZ2RR!6(R3!r)PqO%J4p8 znxmu(a^qTarHaE67mptZ@R?De%$kqzON+#oXa!%GTB+vyy7||s4upX>FMz@*0?z

9;fcC>?WIZ1^FDLoD8Snyp(QKPk#^toK5qqX2ag=(iK3jsgxNt# zk4FYM?iC2`#6$<37=Clnj>&c?`Ykf#-F+CMQ=2vgjz1D74X-`FLVBWC?HO#_Qs>cA zMx5`RF)ckinuuURYyph_-w>Pfp^Q+PwdO5L%vZ^d?a8)KF2sz zc{FTnGu#NQb>tnh2E`16fhg>7sJhX6tx37lnF}&ElkJBg`GJg0a{X7qqKpO>gbKbu zuiG7A;}vX@jL?<2cFkd=DNez2v?a$Lv5!|WqaA#NhbH|Y-zG(FEkgJN{!X6@= zdaGsYR5?otHMMG>-LQJ`#mati;$WZIj39t<*SfNSNj5)_~*-=^5&6M`?OvHdz>fEfd1iMbnpWT%J2KvxQ_F7mw!j1qaplhK1* zxF!eYN7chdjk5_g98+dLHy)T`4hN7f^c>ZDwEaJ$2o=~}$WBsT6j>X9E0MC7Q|rI_ z{1p^1(aH2v1>cqD`!YXl>Qf+jhg^apTX*LXozD+@d5>8oxip(-Nl*`eN0+}Fg<%aa z;ap$x9<^U<*uVHPm(aKXB zk^zi=O+s7B6uy_5Gz}l?J%jNU{JrAm1n5(GHg@#d_uQOmtULDcZhexl|LF9VCfzdF zHydV3?lg@a?XX6QD)Dgil7@K`Q4#^fuhJ%aQ|2U)dc(t9y+&FRd9A-$dntgVUc^1} ztod*GFe%<$rkF=w+I$4%iX7DqUdbHz%-gd7(TR#Wvg1-~ee?a`Tb5U1P;D9wPmG4* z>Jq)5qJg|8FQCRANVgMTF>9mWy@?o;Qq>j2>BjhP_+5N%?081Ya*lP)wvGjk5CrXz zlNTQB1zZUUD|b>{JtONnT}XXZw^(84HXpe~8wb8P1$G@4>-(eC!3-F<<>(3Ugd!m9Y2=(Ol#}xy5@MLC-2aZHC5Cb2eJ$J0tI_tBR__b=* z6Q9V5%{1ltmeCkk_JY+nIA!QSjreTLvNNL}W{h>V+1sYIoY>CeC=DBSFpo6rtIi~pH=2q=rm z!a1Kb_uoOm1ov=I>{O6nLJpuKLtkv$t8TVH?p4c}qMlTh#gX1k= z7RQ;|y9MFRW8I0}0GGDgk0lW5aN?H&0zSP7$k*X{st*65r#Xe70S^^*eRFHgrO-lJ z$(W_`sO1s9dk^!l&#J=H55f1&3f#v)dJgS*>Kpg2$gVdWP~2O|`srSd*`B{S0HCt) zk(tbH~_(0)hW$d13XB2Fbl5;oP*?WaYtth-I@`I z+8M<$&-Vs}7>DZ}!;Y8SSyTDt_V7Uy4Ji|}vF$O@9QcYfjDs~RQYM}^c zSnw)fAj>L$9y8NSY2zzLntr<0(9>KWHluMOM|1ga0<5lvKGxwC!420Bx8A{6*GO{_ z7DhuvouiXAXGBFs_M$a`SOaGREU++7W3YksQ0^Ld^N3mjoS$* zM9zjv7f<$KN?*>9SJiYY3$*K_k41LeZ@C*FNYD(hRaC+Q&7V#r^v!m_xr>?-4^nG= z#7qma9F$_F6Y?VhLJ@OL!Jk#|*<+DXVMANcRU$`8Zyex>-wFP^%%L`79|WLfGR6PuZF)kx<+XZBw>w)|Fb zbKM+3@R1gq@qe3_n^vRUHdy(Nv~l?T{_5Y4-Oz(fKlRD^=r159V?$`pTOvQBaBBavNytpzidI1DxGl|l-zb0*r`Ez1eJ z^4h7RATm~giIJ&t_BtQu9mmK!-a~PG0Ze1~;cJKViNwG5lESQk)vDS2BqPV{U@^Z} zZB;8nA{g5QEgXD&BDJdJy-WCl&(eo+Zot;E!WdXQp{L|Fshy?`XLW|J$S6icG z(4r!2e`wu?&}&SNr?g_D_YbE8GT8i~73tga46|YJenizsi{vTKNi->$1MzWJ9!8aO zKINK!L$GIEu%|Upv|HjhamD=T9Kpv5@n5L0Hj*u~<|6US({0|_q3^AIR75Dv#nTQ? z=egyrIj=00iHC=Y9#1HM7y^Q!(u-50FCV*p$?DIc?lS4p1CI{;va#FjFK*)b2O3w{ zX6^7Km!OcE^05v^nNE#NfE5l}w-h)g?RBI^Sn)5=(g|2;dVJ!j`VX7Pm|{g(*W~xs z*yjQi-FwxD5w1Mkk~g$HLGvPrkfr;h9`)lqGX%PJX(J_BKUL}M;}99s8O~vViYl)( zhvz}-*05xp@C3$LxEl4=Uu~(S*2C&A)O4qm;bYLs`)GJfI{cQ!y{%Jn;EKUOT6beQ zr5=mN%lHoXmFET1$`x)|haE9>t9c~g`3!^j+5PpY+Cco`@yoKP*=w(J;ne;#i!z;f z?XQ}z6J!%L91tlAL!~d4=C+OgYOvrndP}kHZymi3M_i*`;{wkph8P%5xyGL#zdyT`rD@1J2mg&0iphpa2Je9uDxZT(^zC z*gG3!2*&&#y)w`2PZ9v=u+pApx({4+vo_Fid1K;IV|4SpVtZUaoD?X*Y~MWe4!HY|T9rynKAnR8b4ru{1SH zaf6i#{pIoSk$KNCG()>W)hBo&*`r|34}m?{-m#%7zO$1@yN^8S3XoivkOP`t$+V%< z4u~M~CFkFdWZ)xbGeJOS9TAMsk6K0#i{R4pZ|UC?@+z!GLBluq&cxQUg!%W^KPy(B z7C*51|EU!Wq{YHbNT}n^W0v)FLIbBDH@Hc-JN)#e|U3hRak5Pwn(vA8QLLS`^T=seU~9cwDc`HT^VL%{c=c zs(SI$Lj~CEb%hM~kmHo$E|2~^E{6D=DX!%OSVMijujK`0-aDcT+)(R-Ep;-=KF~0> zu;7EOg$2MDyuD5tH37t`&vIIqRYuN$WvTj|cV170(6i^eR^Bd&SB~|B`JX2Y*cZ>N zQim-G5$aXj6u>2904wpteqlwUX%ro|0>Ys|dt-p-<`u|9@w+%Oka|J)uU%x0>=WOns97tp|!bktke ztsUs@((|YrP(5^A-&kTm@pTgUiG}m)nZzQShI$bbKy6%|Z#8gzS;e0LD;#paK;Aq4 zN9&p0O2Kk#d9a*=zQ(mBWtGIFMO?r_k62A3K4JR--E&=UPt3lX1UH)TKce=h2d$jh z>x_te)Je>7*PUNh2DLZtzuMp5Z~Ni?_RCwnPM15M58Xi3-y&Z5Apxyvbfe>`R|Cul z8PTi1902BXY98J^?-e)$IW_W5Qv6Q3@Ox@MsihvcFDZ%0H-E|&DVb%2_J~v))$j84 zL97^d-3@x`@HtH~8j??Kf*Fw%EtW__X_7Tg`BY$V;Kwx5P%ZFR8ETWJQFDoT8bq&2 zGZucspwlF{OPg>cm^NWE5^JP=sLFR{L2Leb8ATkQ=Q(IyIYYK1s96P3y!YDoW?#@a zlPx?aU!t-`odWznz?-Ti&)+61Ueq`hH2XoZxM9Amyv#W0`b}~=h30vKI+hx8@rMD# zsE6i+_uf2;KiD^R1Zfbqh)`er2sCki0-C3j0GjQu802S&eVf&;6+NS{iqUwRGOeBN zS4aPP@%UW#MSzL4ddT<4wS#j7wdZAP7jM8PfM&C<*wo;*l*(CQxe)k?WmvISBc7n; z(00r$E!ZWpC0UyopgDrRq%br;S4}y_@Z+5Q2~nMw;x)FZeJOD`qa>$job6^Ap+>Y6 z?t5BF`)L@lfl*-R2?E4G>!tx}t^|G_XM-gIAkDbC~=IXJxz1cYL z2=z9fN938CT?;v9^hkLYm6z??Qug+=sBGNNK2PI1N9#&PvlPp_1FX7; zG!g+S)T-&fR4B2u5ROV^o0_r%^jrAs5r?M7l_J}E=~#+?ZBEg^s>h;xSz^&mpOpX^ zS_zpV(Bv+Ry;1#NM*clF9Si~OXQgr8doS?A@m+Zcx?+#at*=HnZ8$!8Y&D4s>RIDn zh}}5C_@oA0?`6EYyOT0@e<^`&NgTBB-XTo0@NcIHG^_!+P;YX{_aokrj}>ubF_7N@ zV2X{o_s<7js`JMqo~!vQU2AQZKCt)|D; zNI!sgetHh1h*35y5Jg(G>}a{|IOt}S3 z@^&>B-x@8V7q+)KK}+_9^0zg*N!uw1^ojFdJpoc%4kE)HJRVsw)F z$3X(jeCI&`6%mv5`5w`WRkB_>LA728bQ@0EJA(ztuZs9RyshZWDt+vK1atz$>< z3t!bAkHBr4zHG!P9Tqtf#^+-0@kWyih?A{wr88e&gi_}u9^_&7xHP6T^o(+jQgWx^ zTQ>ELA(<^CKLbqWyFWW-LU(eVW+%z1BhR%dttLT2EJ)p){CJp!WbNqEEB+_we`cJu)#xh?M&EV?11Tv^qPC#D$#p0)g3UQKNNbmAWI+-kA*(J5;#{ z-WCIhmixcs6>D(<2+GWHTm449^Pb)qzK!=zho5e{^Lb%umUa`}AnBc1=kt%FX_OF9gt>=5{wrvBW7vrJg@v_4zd zngs*#Q^oGu=C@b(kG;tBP28b+szyOI2?lrN82{q%#lfml8(^pSKh15$OXvTsk$>l_ zTX^rkxeGJ|MmWNjzP`XMzYRQQs{O*I91F|w-E@LlDD-E31Wf49#xKxG_IGAf0q63b zci@!==(|P=JQ)-5`D!C>C6Fwqbg4_HGFiVbKM+Vzcu(Zz(5djf|R7T@5&<% z+-OI_6-PWQ%D&El*?*AJ);|6H1(XCNcCVZel~;Il74S3m^OSNSp*0L`uqEN^TA?&<*AVOEZ1)*=;1 za{!!fc(E7uR0{W>9{hNh!3zv@*Reo5*Rep1|)bg=pCDDiGX3GJ*&ziaFi&59spe!LGW9RN z%G~$E<$!T}aCI?{Ab{%R=EG2&>0_JaftP5X?giR$yeA5PcG3|1F4J;~r9LRly2c=G z`X6iPNC1?XemULqKnTcS%N@310ig^1JB&|`0W7S{KuEYIdPXYDNPpT-*kItT|G>}` zYw7P<&zf@sY7oqBwV5e3fPmGV0rY}f=+!vJ->My97LbRi3IVje6SSz#g_Fc%g>fBB zW_O8`QxcQkHw{!CKK7X%tHp?@-s~>K%26QIqbgI zjA%MIm=MhNb~k_q)t>;WY&+EbCjsiXS;;rhLJb&fMKrzT29-?%+8fpTng(|oO^Q<= z{hd`Z_52eseQlU$+b%!|a_lc|53W4F1aM$0wKiSFDaD9-r?_;zg_*yKc)+=Pm3xEc zRSbi(Y3W1|cM8crCA^E{LTuTRq>&~p9~^W*>)Iis1#h(9_GL#?Dst2Bx22)n9tgKnVzAt;-=YHA zfop5zstCP`i4>K+e)Qf+WbN5)vDyAS@!>02|~7_ZO=?6Xx> zRUCW3bC6;F-#Cga*0Vycf99b?@=Q6T6R8Sm{KnwLoyi-pKj#$7;-adC%#@jO-Ks7S)0g!e(f_uqL)IT0sRB0k4RN(p3~`(mO%v(o|4-5u{58sR0oc3r&g; zDM4w{f`D{FK#?FK?;2vp^ zE)83N%Q`^#2>2;lM`qQkb!{vO`{b(t%9 z9&O`jnScit$>aJ%+APyZj{eiHpxYYW5NiMtA=T!aC>Td|n6`b4uIp_=ep>83gc*0> zd38uk$PW;c8|D8Q#MF^Y1Hf}{?^EBQ@&^F2`vN;ZVAM~FsN4-tjSbAlMg*qpI0A*` zF2fEF!d})NFxS6s4e6fLw$av{^4>3laJ}tt{yhQ{Xtk>3ubM&SBH0DHfq}_E-_bnb z(X4%?@Zu0qsXhGB#9rNs%Q(M&G!)(UxVK-gO_-xbzr1wFB* zC7v952jK3*NWpOb(c*t5C_i`a^jK=!?v@Jk4s`kBzK5GD%NGJ3`)_2i*zV0XK2(}H zZZja8_SwUBVYLX-p+Uh2G%^9sDm34Wvf5% z*;1R9Khhj#PQ-dnIADdlT?VCyD%p{aEQRbvTKzlB%gLFg%UpdSBc-3HB7gI!<2`p#k|6&V zH+$r?k6~${uA+Rv%MQ*|uo-;V7k%6(JE+TwuwgpCszNcpxpws}O=;s#*`VwhMWagl zy+d#s-Bz&v;W(oyt;w|9>wb|bQN(OD-jb(@4GQ`X-N<4|3^_MNqZDtSonhjXAA`)AMPNRyXB|=Flf2}_4xu+ zeQoeUHDY1;e;i-3BJkH<=>}05a`4n@^_ujSVmb{5fE4$c;P;*kt0TBP2XYR$8KYnB z!xe`fr~Av5_K+UL0H^t(pY_+p`A5te%X51wA}DU}yhbYAriTaOi@WE!@r@;r!;;*a zlD0wuFfs{iepEs9(`$gZ5O!xr#;dt?ljP<65KSVWm-*DAVp(&bm_p=Yw_FTRin{Gd zMc+Xywg7NqXV07A!*C68OOl0-oH+N9uG@pPAt_j5nv5EeK20lZx8X_cDpe^UvA3}+ zv9TXMw)c-#_8<2fdg+*fKunRX5VmT$uE1IG|DqN2`0RmJka5^FAZ{^x38^e#Oj7 z0HUccfu0<0RCHOw&(*na=HrjR_{vEZUv*8hS>y%L|BfIYY+*9S!=n?jM+qYVD|S8VryF6a<3Lyr7wH)T*{&`+K5#9>oSi<8;Kh~ z8B>4zED#@>9JIN$N?XhN^bY| zBW4g>u*~~OWlJCP_Ms;8*L-0amjg*6iv++F@qchl{*rJUL6e`F+NZQmVZ^^etfCv{lE=q3Em1hwhgFBC?b7!P32bR zyuNfq0+t=$;F0@_ahCw&z7iOG&O8Cg;s%Mz(N10o-5$1s(VV=SD>cF0RhH&iu4aHP z)PV}cA7=B{qu4(*VoqN?#q5V_7%m5F5Rt8rdCA4h=+F$p6#lno;n^7pE> z!2#yJ3Dq8Di^ac~jQ{a)`opPV^@06B?D82ln&C9asQ5T$jC|93^tt{R%VJwvMMC!! zcd4ts$-k2Y;1)mK2j+A@)+=I^>9cJsX6BWwZiVX6xkOmk_8=NEo{y~=?$4^Q9i(hW zhZVT^@P=8GE;MSni7uPpAiIbBt$+UKfJ2v903+M?N*dw+Y}@UeZkh;G99%2db6oD+ zAan`2w3>TQ(05ji2A0}-$L%+KfwvaqsOY-I57Yj6jz5n=M*t3!<%O-J>imPVy{mm! z<3FFO{TR-fgjzL;ZN7Knie**u)!E-MSUnwkVv1i3EkVP-m7f7vj)UQ z>z@GX1@7uwQ@dF%AD?cH09t9l4S~%Wg<<9Eb-(zosE&LE#tuLsgp!pEUa?Ug-f@9# z%B+8H(KjRySNW@UCc3g8e~58aw| zSY$OdRa7w?K3{mp(t$4}2$S(&q36NcT%ZH&5d6U+1M>v{S14PAEdk*n3v9HRzPO^Q z4dVc<9x9my2zw|Gi=3c;mf8RC*r$OSFz80y9YN(+K-tj+;OyDy)2MTbU$F2Vy|}!3 zFtA|O6nAI?s+=ptofD8J`s0&-TeP8>K&q*?cM{jL`|&AG_6$%wEFXS~yYRkD0v!uv zlomz*AWZz}Bn=LxUCYO#8vMzUgV`mNI8RkW+wU{F*jhZ+a>^uw}`AnHVZ)XU!R*k@6l^Hg&WerwbUZihm(;cx?LvU<)T^)PYi*9Qr=5eS-gW zmsHybK=%lvcgDC>1YaM}2T9XndHQ#_>z~GSaHM&_NzNYrVb9OswdRV2;<4DV8%|1S z-1_iAhI*V`!4gHD!JPy5)l=x6j9L5@U;JYl{`V_J9GFsnJC(3Cy}AJ|gd6#Dgw%2a zmmh%Lttqt~cTVOsK>399xRi^^@a_m*ft(EJgyEywbT4E&4TC34hjt^tOu0*0jrYf=va#1)wmuQl_$W-hdIyJ z!= z(JZHCdcInfC>m0kc9dOTcw&L5OnyzKSBPLLjaPjw(~{VYfUQQy&B=XG${vJM_w?@6 z>|TSa=?gj1VTCBI6r1f8HYD4T5QzI2w>^^Zwrq#5b|6VR1k6L-AF+U`Jpx- z4l6g|s0cfSu?XheQn)*bKjsxfAPat5vg1#(s7HJ^!Syfja#@#!B3E;1nQ0vFMd^L>3%9`u{rnE{_7O_}Sf>Z8B;6$-D0l#R@iJIgSq$q2F4y0IJR(i@BI^3$s~ux35&C|kpcDsD zVg>0Ic6VQVF$1ml+aY(Go2mK4MEJ-$hi<>7PM`wB*6N&w1T;c{eURVTBf5 zX$$Jc58ypdq%ctwj3?PvD^CeyvghlI@uIU`7_DI6g>nR=Gx5Zn zCu?D@xrx^~hqrH6If9wlH*?Mg|M))Uz9Il)bpnd3U4q{_Zp3+RgXg*b#v~5Yd0FgFZX6 z%LZi3eT6fmK%8D=ZC70Y;lHI*fl|pfxUMc!yrEfT*Mjp@!-&2O<9%5xZK>8e>S;!~hem#? zj^tSbT`ZZ?)aOD-cquQ*McSP#!J!n8exS!D>$lc5)9=v`bS8kyZjo^M&SAJ=~hPkmyfKs>pR&$2mk|`Ly zE~oziVKcZvw6C3j>yx&4MG$m3ehjC#YTSh}^;!;76yF&NB3L*Tt`tl!b7jeQD*pG$ zRdFG9hSnEyhW1Gvu0U8>JGcyCnF#gU}_7*)^abj~+lYWXsj$PcM;h#f_>0XIoj z+U)xwNTH%a%=kvy+ojib3opp-Uwuxx^t|&hudTWo#IPi5nmK_6sgW9|lh!J23UD*l zU7#65@Q`EC#O6iC4?ckp^E`3 zFHkPAEONS{ARdMz%Vn!f#QSab7eWL=hIiut!j=xIeep0y90+_}=|#(63dJA01S>6v zfY9sB1(@SPFdGN{v0>Y@z6_F*_{6Xa<;>y}FptbCK`dJnA+2$^X=~TNZ)>K!7q2`P zxDQVSrpj<}8MaNBmPK`S$KyN20{3?CC+5>XPtdk+D12ozuw&?5Nr|6$-X~A1N$`Cm zGl_|$wEM`A75Wt8Hfyfq18lKAsavS`6m5oFVg?_{p4=w-*&8CbXDUR|3p|v?HsR}7 zhq4@!HXzSDH{a~l68=WseS_G2bC}6s^1UWKY=3T&Tc@PZKd}2b*2P)sxm)#YH*b(Z zwjPv&ATrhTW-gZ7wmqjZW*9d~w6P=v%-4=x7i115^C+ofu0r}Z% zpR{nW*#b~Nidi0^g4y1fXqQs)8!(-`;DLdct35&jk$TN%?{JdsU%e%6DCBR z$kv0wVLT_{m}Vi}q0lWOMOqpAvi=Gy(#BAe%8NI&<*Sr!l_ zAp&F_aRB-ZBFg!;c2R1NXvN`aev$D47Ym&ezNL>YIlHFQT-qGC>CR3;cj=B-e>`48)7`Qagnr@<~BYwezF zER8Zdh?%)_A#cIhk@0JXAHN^@K&pL3AsWB+N=Ml25b(~S6SU(#yj3dE!<0aGXf(oP zK3xg(k&NJe!21fAyKi1GNoy#Ju24I_07fQ(c?y(i2YkCnW+BT9N+w#qAZP+x0bgpE zB0+)hau~A7Yf@yUl^Oxz-h7p;%1hEgQ-qhc4xByy#y1R?Ek2-vpcP&Hf(kZ}o$SbA6j@puGmN{tuDwL~dmrox-5@s6-XXqWB7QfR?zHsXd1BfW0}!w{z7oBu0#lCvi7V)iDMrxtK48Mx516$sRb`sQ?322VDBsc2?bogzQu741ZN#j zj9xk>#A0(*Lyj8Io3pQEo<8P2(R4=(FES>!m`15I>;^L#3c-;c-I>1F84DS_wpo=o zClVZoB}9AS#>71Od%@bVSjg9lBli@2J)Z8~3vNC6UqZ1z(mkNLe3zxAXu8UJ;g`WI z-x&b0{Z$ha`->D2kVaJpQX^ak^Tofi@BS=W07n`J@&6fJ*~I^9aQ!H4-BzIX8Mn(# zn-abIi!A6Mhq?@iDOb-Y=l}9TpF~50?@6LxGZ<2grlRE5-r<#(68ostruuSG3N)Qg53xwBYx_LGUeRF8^-y zu_t&i96H1R(Nwu%V4?>tFhD4o5)}zMy`yt_ZV0~cNErhm;u5oGOG^*>c@>t<@B&^N zH^D-HS-Cmq2hEsPwCr?-Y+{qOI>BC7@j8l7#{<DV4pSI?WS5N<-%$%pB9#2I@tIu^~6eZAXD-R#)X>nlw3DKP zjn%?(T$id)-U;^Q9fJpAT|E`?NG#f`JFTou$Cff&s)xQCxyyu9;Ai61Nszh^7p(Cr zSy>g;#~)P#QBuU;@i2DE*yZR?D_khbl^W_JHd3&C;PrSM0Fi3%4eN za#CkV%j7e~&5WTaPs8xXo9zvav$%xz+Val0YJPV~gc8pH6y&(XKS-Y0K)%SGKmC@p z<=<=;1F0sap_(l%j0^~>?QoJzSrnryb}xE!kSyAS{^^hNngE}SMFk8?o>}H`{FWs-`d7zpj%-!`!!=JntG3JE~P+F6eMVF z(j25WEjw|swRP*#^gCWQXl<_Febw~9pxUNTqWa%n4lhyf zUBlnW;Hc<&9)iXP^YuZ?yHmNP26Bx)9;uTBtNCbO)xXHA{bj_4S8>af@3xlW{-wl@ zm{X=oP-HC>!l#qL)1TwA*1A|4ovSlsV7Hetx1a1xj(8D7ThnLXov*A0dG=hY#PYX{ z7Xy4*>UFEXX^Sb-%JV3nX3A2B(q>j>w!rqDf4%9*?uCm@`TU(`u(i3Ww&+{c%9jzf z;-+u-;)*^oSgBcFiFwTvh%DcCaoJnodY!Z57c}*9`q#Ar^iKaa+!RA6YV+Xe2I%c? zkq=vAPx4FAG6V}T-HXo5&hxF~$ZPixx#{{;TJ-V26>a|;cHP>s_gzMZm9t`4lfzj# zsgDvcvt@+E&3=77W6%XuVY!8>Ymim3#tEUbi$w{5XbWNl(z<_L|K`o}?m;}9DCVKG zQd8J$2seChr^2E=c)t4Kjs2(3p4|}j(k%%}O1FVcwbWLnEzc#p-Q_rErx8C^- zNA|6oS+%4kyo7m8lcuAso>cgN(TXRP0@i;(Q>w2S=~Gm#0j4q#fwa}$pM1rC^y9~m z1p(}G8wuKmjlw>w{kk9fjlkJvNo{7YRI-9jEN~porDM@7UV3X_<~e-c1Q}1S59zk7 zziD{9!?OG)%{JCLa?7uH{iC_m!Q$VcN%AOsf<^|JdTOSziQVk&>$BZ`*|XX8f^pUi z%@=hC21f1Y8*R+pbv}%Y!p3D*dCf}Mq{R<7PsGirGsLn|9Kx(uBWxEpNqybJJ`(I< zKhIfK|BV_f#Khw~NYZEE+*RoeH;Mdm;DpQ~Rp(}jg2}m2@!YYZzAsW*+vA3p+BwIy zFPt5WnPDQV^G!MyZ5bQcemJnU9m){rxC48h!4+vceqE!1=Vmw`O5E$kjB(Cfjy-0n zl?{Ozk;=v67#E7BM+O0`){-{ zg4v>7j?_DneEM-&_$lrPyU?S;mwvWc;x&h`z2Fx_`OumXSZ6j z@*6*~-IaRVr)+bbd-6Aj)2ttwn?M-_V9KH;9(>jik zN)3<_pODnf9k=y|8xae_%M}k>vp(`jc&ojtMLZ~!?{&L<{d9Fn z7a{NM?02-8zvGhlaed40XL9kzlm*~90>El*iQvzezL&dTx-A%cac(As{r>$OEGQit z6Lep892GX^r@7H|@l;=JF7AVBh^O7vz>Dc>+O- z*noz41(&IL>Q-|})?+wL-UG;*^0ysu{2NSh7V$ zXZAj6VACjVz2E3oh>AtPbFyLn{_}YEb=LhS? zeduz$mhA~4Z))}C`CM4e{c#KWt&3m7-_BgoXnPY^nCuXkhuIFc48-b}9qhDi?=Zf5 zTN=t_`h|qV#QfsTD!(b3PfzzQXQxOfEY1b+ST?Y-=a@Or=ZK0ju^D>=P<~u7d9o!^ zU(h-Bis(${B5Y2g^~G6tljyNZe$G0lj0qbB-ePjqW6!qd!KpyxR&`&bGEHvoX~z*m zhM<9R-eE4Ox=Ug9kUDE^OP>YjJk2y|MMA9inrI)rm0yZTx`0GKuJ0HN$9ZruZK)N_Wl1pwdXevpX`|b^^n)qpS%bP z**0SN<-CO+qWd1hX=NoD{f~kE`SJ;fT6~t6fvo=Zyd5!`4Dov-8OHoP{re%{M^jZ- K1$NWw>Hh&#SAt~# diff --git a/Docs/images/append_n_arrays.png b/Docs/images/append_n_arrays.png deleted file mode 100644 index 3c48642607fccc1fd99f39e2980f3cfd29b80087..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65274 zcmeFZXIN9)_AiW75djqem1+Y80qIgg5tSw&MLGmTIw3%S00BZ#P!LdxNJo&~r1u0B zM0zI>AW@NCLQ6tRa@nWs?LJ5Ed*6@uKL32kv(}nxwo!j$jF~)tpsUV&;=&0kDk^48 zjXMTZRCHu2D(YLu>5rZ$;C2(Js7|ywtEoNER8!-B;01PYcC)9V(s-Vf%wS|_cA*mo zTe|p`?)IxQE{g{5v@70fROFmFbNua-mtj%NuRfgSX1a7Kn`QC%voO22F?5wST(nFR zf?xQvUxd?f32ld5U0uzb0URhVWDjxO(3=}6vp;EbEyR~=zy&_eL;w%2?fdmdN zPQ6c>RJ0x{9D||q30Hr>o})h&_84%MxfJE!Y@R5mI;xqRB!K2Kuuc=9E;*C{E|eLTmxu96IS`>|dEnh=Q; z?&|{tiOVgrCSL|@%E`*fvv6TaHANze)#H~2bmVVe#!i`4H|>?FWBE;jGxzY(2z4*WE1ba zZVCL%y^w$JbFU|hY(N(`)5vA&g#|y&S!&OQn)$P#6*ZmrzXgJB%pW%2DSAcTmTuQt zu@!_JXw0@;TM9&cF-%R!IxP=`M`THf_C9~9Bz#+Dg1bPR=Jvw&6D<_OoiHPQdc`*S zE)}YH6^<`dmsDslAxuv~;tn5CKZZSvH+i0)w$c5)g2O|u=u#?!S5&<7N#351FC0M5 z_6%)1De0si;37#!<{ay+ID077SJNl7a@*qhyi}lpW7#cPaZ9bLbv-Op{e<`JVd;|- zJ9TvDRA{|a7z>YyWHY=7k$X??+jhQzhVK;B?U%aW+q~Lt?|0piH)9+Ri^)E9Hk`*s zwvdXUP4xjoY$#hcUHUQ3Hg*r1oeA|V9EFG%PPceK~edHuk!zdJ?m3^Y{LUCkp1Uj2(P`Z#afQnfqcaUpQ@ZHAa_{c*dB!hJ#Wya_IAGak00n2PYTt zi)D)^ym^|=2QdaQ077`x;h$cLUpQy@f-NHSd56bMVezMLBzkRooqO$j0llZ@0UXhJ zkCsefrOGlaX%SZ8Gf^{h?uZLa{ z09_u7m)Bs`0CzpEx;UA^t;g}I{?$qsXO~_VpZ)bJj;fPpb*uD~T9XcwQ&kl|j(gF2 z@p|>ldChhI(Cway=SmR#!qpAylAJ^Jm~_{75qtEmJvdu>_V!r`_BtVM{f7LTInNBG zjCS-N3v*oKHEJomrJ<_7bItlJhdtZesW}OI4aSl?CXcS=U1t~OF4FUn@R*qIErM7FovYk zdxqQk+9p#)<2i&oJZ0`Vy!i-&AmqM1zLHLhDV_5@$61kEm0#b|m)ho>F0Z^doBdfQ zhEYdEM_C6kZ`~K2YG-aF0xgp&Gbn?Y=c3PoOhDznMFjsfPAU6T29a=M-R3)7sG-44 z)aezY74Mb%%fmjo-rGKD-dT&M@!UHGJ6d>o{AYYEJ{*r)mR(eq;y-um+`9{_;)@cy zHX5=o#HZaR9^JZak|(*?xI@2hce(0Sntq*r%#f8`X=S)))27laFWW@>_?5AD!#`eM zcXM&~u>;u=?dqSvPk+`>V!Q@-fn z+Uk0?32Af;dSyxwZ8AwzxF+{R-p!|B`I+aA_w-l4&zlJe83|vOo{VJm&-X9&tEa1T zjBpByDb@H5-bFoKGFZFhnb#=LL|zo~9PzYk8fySRP!PvvK3_hw+`kzvEH z{^;%SXnaWGwHQEm}2EMGlipzPC)2^Q}=mCF1TQ-zv;}=`04l$Rv(&EwVm_s=HYxRCW6Y`^e00B?SSuq_^s@% z@z#A9bd_ZA%G|SJxVoxHE7wJPEHY>{sGiu211o0xXYaNx@HHx9DhMU+<>IB+6`ld! zKsNT?E~;56%N-iQO-UY`-zsWb%r&k2X7U0K_V+JeP_L71WBwj7l*_0Ni}mMo1xbNR z-E(Bv`4~DoI)R7jyAbU2Hnt2w9$lGCiCYhSQoWiA&%0R9C}QH#mz-l<*Fa28D{fGC zWm0s9SgoUXzftBxrDhWMrsapmqV2{7LHS)CJI-62^a>{4N=@fro9lV+wP%uP#DJ~e zVRMg?)lqvTq9y~Dkfw3pnQs9-%*|YVvLJ9Kd5nM>nemIv>@#UKh12P8&P{K4wMWmXB^mf$zr9$WetyWZIx!7aV+Oc%wny}sRg zf#(@NRzrwweU7IGc$ur{fn?D`QqO}Akge@1+qG}|r&nG{<|1+dVy_YB0=nRGa>l!n zANd|uys*yLA0Z8-%~sB;RnS!wVBCUA2z7*+9B2mHTQ)tcBO>eY!H)i#-Hc$Qo>i8e z602VMVc3BId2HA9puPHtJSVQ>Rb63?PR57LXnRWMHty9%izKVrwym@2?NQ-`QORu-H zsHi@b>MQ!#uF#v*)M;61JpPoyDh-u-nRUHAUAi2ydU7w zKi-f(y8h#_*d_jdyyEQ&xMZsHfL{&lWzR1yDkXaJlF|u&ett!-#}4uackcbG`_UcX zl9RW$hrE~=6bcoEN{WKL9L2=t|0c;OuAbW_rgNWbY0+nnOukT2e~!A07Uy>8~k&>T32^S817BKll8p{UNiGm82 zy=txUG|E^sRIQCx;|qxFy4H2yK|nI$u>@mE3NASFB8-5Bt<@^I0^-)1Q7sBx_A-?h zL#U{a^Z)Wo#qxN~^JwcqM%q&=Gf329S?{I-!Q^wt^v4LLX1qA(mltMYX!Qs1y81hrwCQN!L{KIy5}(xB*w{jV}l1(I&kZ{+qhJ@mou}p z8UAGZ3)Yh4bq?d@XjYl!o=*-My`fuM1bNbQ=<@KTgttlOhED#PW6u~vuOv@im>TZR z5EIHXiKXweDA7Tl!%Xy8eA}}R0CkB;!N>nm%fq6AKXtN42wO}v@>+d$pE`v9z1qJc4_(dI3jF;!m zUvKi>r`9~Gk+?LcAU2Xm zggJaUUM3c-qsFzBm}lK{2IRL1%J7@iu;1i=Yb~PtYmp7zpgx_qKe;=~rdvh_NnW0b z-;jM4Gb|O8z9meugII$gdTtBWj6gHkmnTohDxXqUI|m^vqIgP@W?=^f<*0X&vVL*z z@Vt4*rl>>(jSGp*`sGNOD~n)JEK-*#L-0IZ!0uCMEB@+oe=`!<$GFdRS0~N0L;$67 zh{x*%X$(s(o4`>LxRA%!Itps8H&0m~KJD*Hc{`w;X268H^h;YqMeQE?nSm@^zxdoN zQ+i&{xeE@C=IZG_kyU;cwOYScl2zV4(w_c2H3Jrj7z@*`nj##E#o*~vXV$uqbKIn@ zIkCVC=(`1RGQgfdma*z)`!PcdQ09l8Rk=totL$>)t@S8vqYbeEA+oAG{)eH@`s3{@ z9g08pK0Ga;-5H05(Vo4#>qBYQ_BMzOIw7fXeJCLQl&wX>$zNNh?`qjYD=27rP@RKM z4VTSQ7<=jg30PQAp*|T5nzFv8_eQE!ozMPtaH%w9IwxE}EdcwL)5!@4J&{BLx*6IQ z5%1&Wt{d`ISmlZ|_obu+`Fwb)Mzd9zX1RhZADOZs=WdPOXC_yGOMrS%L=ph#rvJ)u z%v&pBAKxdjP%gc&{#u^5g3{#I0E`VRGO&a33! z(l9Z}c~{tAw8*efIgY$3atnwqXOQ>`v_X#;6Ep!;4Eq&W461Dc|}pG@~?g9OH*o@ zPWY$#OD5K_s|v>sl>|7Ofb4k|S=+*_irC<+7Ps8S{89Y$jw(J~VX}6}FsOsY1k;`h zTeuI^;r@ZiB2PO&trAF6_8j^Qqkx&(+K(fnAJI+J`?EFBJDDXDHQ=WU!ToaKmMhUZ zCH3XU3uQNyyma91u6;34R(sWumIb{`rJ-h=r`h`1zg&ijYQ0Qs2{4`3( z+h26*jlxH1r%-$;Tp07lWPyC))ymc>m`kB##AN|k>l%rn4>pFk45^1>=^MvWwW67f z8+!NsAp@t&C%5xat5dje%K=awiAAc;UatJ%6q8knL)=E4&*c0izHn~TPFH5t>Har< z=rsyzVqm*L$Gb0Wz0o1Z6(4H=ae3vc`o0nsCeOPb5N#ze7FVy6xw%d5>w>J^6nyPo zuAuBSU*^T`K2WhnY45aRTItoZfcCY1>i2;pe5@7SwmVfIB9|c8+?&hi2pos={g*jBvqX0_^VaPkN*v`rFQ)WdU)NdHKBrq*{>D7kBL zo%Zh9=5%VoajqchrErIZ<|u7w!)qPFD7YU=O(6&<1n#HKGS_i}d-3DWD;X`1%3OUg zKhSpb0bKXR%#m#{w>vry#)%j?{}QXGp?-wA{`vKRXVcW%eX9)g8LrfXG%oJl3J-uI z@8gND8-%g#mbI!iU|pm8W$MlcmjeUS#Ve)+^r+BQ3m9~zw5sRAX2f|(VmOsudUbD5 zZ|#iql;ey11uztf%xPnEUqB0T=h2lvmtIgbF|=$LM@O(6a{llSBiF|ywQd|r=K z$-A3I`V1W#=PA$0Y2wJ-++aS`>$O@Dl0LR?ndRBl<)a)jS?N+2hw~m$Bi8w+IFDps zU^00tj8dGaG_K<#*xtGO^q|Wq2-0d})<^TMYhY~D4Q;zDfeR?y>*xEmYt}Fdy*IZD zBu07;w>L{)DXA#Wu>JTxbFGMOzf+fTXERvS<=&5_&#zj?ig4%pQXFr8lAbc$qjMO* z-JhGo6e2R3oJM!#1bPDc>UJ2}S4k>8^XToq*OI2Kt61KG?vbcuGPDGc<9oiJZ+qZ) z8G7?&1S@Y|R%#aGE@&P=r|rJkQeg9h<33-mt}_5XbAIGd7Xn{;$EJJI>sFqO$lx>o zlG+~!pQN`U4PAhrUD37)9f62%Kuk0eQr?`C=(|38r_N@hOF-vA;eBO{aGAcK&Yodt zJ}fRJL%M!(`Dw+{3R?Hz_4o`HX*`=5?_dSE(>l;R?CPi&=+vdG^ZhcV5B&JvkK)Bz z9U)Wkffk%iRc7<7fnb?VS(sS~0-;gC4jygkVw3jAK)RPuy6TF~-dkBijs*HvJz3@U z!pW$((dp{?{2wTS+vW^>kQdTTuGJF;R{QkX%s$k&J+s+R?`fC6*a3wKx$fQv$Q~%T z03p-3xbw4E9sCQ=SbBVA?yLL{3jym0QzlB2j++qQW)x>-% zvx&^vh^gKN?^V~O1QWQWJ8Gt@MaKE8s{!a-$BF^e4xP!Hp&E-OiI#0?wG5r^f;y0n zLeGVpsJL6~8rq%C!yh?ot4j;=No2X0{;zkBNlP6565{jQ(p}))mHqJLE+lUfMM-8G zR9gDZSbNMeAuDjxkc;cdL~A5l6|4XHtEkis$UR4>2Xel*xHaod^QhaNVbZI_ckgyo zB|P06Ehu9sX;`N6`R?MF3K&Zh$X?+NRSD8zepY--O4UW6?{H&+v0t zqu~oGr9d!}Ll(-WGD9*Qlk=h$B>-UQm?dQX9gem|?*qi358M4QqSt4@?$lC|ncQ+x z=DR82+FPKd?9FT$#IM1dN)DsctqtUMmM^~6n?fh>)g^5GdaGy|b9>sXs{=`wFHu?$ zSgbdfP#duA0200Cp+q;21C}4;>-htk1s-u-F}57IYa105))nfAC-)~|R7fOYvaN9$ z4z=%tQ9rj&2thN@grevVFm=RhtyMCzruu+R#NY_)rc7)|~<(v$u<~_Uxb3tLx2_;9}1g zs8$!ac(k%QFK4aLfc@?WbiBmY`7QfvWo+g z1;I27@>!wtVC??(oL@ySQopw6eoilWKjs7ug>+T25#&Ytz?bY z-5WKd6v1j9yXA{E1eg1l^3RotjmHCL^qZ@&+$DQKk%nV0H*1StpBR55?B%dH1#k^! zd(f!ftguk%q#nAJf1uuC(z;v0;L2sM;D}yQrrz zRcU5>_pOR+FXXi|_Q3axIY3#)X)2@<;kcr-9rffAdujLfUTtVmfHOkr@)qCl8|q&= zk29*-s-cuBk-er4S`i%S+tcNgF~e3E(HNI$wydxvFS5}t9rL=c4gFqAQmx7c0Xkybn^Q);8hat;>WUE3LsOL86~RX@%d zyf9W#5P;s4%*r$)?aWvN@nNPbI)UXps#%y(g5WN5dhYsT6(zyM!19L#b^3mp+m0v2 zgJDV|ECUzqEEDXzx0sV!07Ns=0shJ_4RFNDd0+57m#Qwyd^a}|3 zNAxK6;6_2&y~9F+ZG=v>_ucm`cck$J=U#xsM2C8=TCHTPOl9)CTgeg`RoNB|MK)>G z$_$je{iJ#;%r`XrH|mj0jb|Wh*DZZ>My2&H6lzD|_T5%qy{#75z2liwk?V>}1X}yNgsh}P~fz{Q~hg0jG^-6`wz+eN; z49Bq9Oc6@O{s`BUQQbliY0Sbgv@Wm?D>qvWmG$p8B1^iaGw@!W3i7Iklb`y&vDtpT z!0A#6IiLnSwhn;xNuw51D-)!ghtJOJ^$6nE`v-ffdkBH0ItTa9WIim}`H?}y{Ykyrb-#G0^WV&7Rs3uK<=SQ>JC8yq}MBsjiQXykJ?q<-2d&g6>;hCFc zdxf2)1&pLoLnoq5X0+~Jf*5ZJn9wk4M#7~hQCdG)NWJInhK2uTj>Zk1)(NR)_tEU(_4gRaKamz zR%QoVb|dvu<>yNhyz-Z`b<3dT(A8JD(uM`jdH!9MLC%{+1$ZBn3&znS)gSRO;@62t z#v5NxG_yDNo^VV4wi)at%h6nMO~gZIM{XU~zjL@&{yj_)CylW0CqMHq?~@*Du=K%w zgOOVf`;=)<0NI$+qSf)3bi>tdCZ`gq$)tK4ueLp}IrfP(&gQL!x!t6cTUFaZ zM+UO|`B5y9FSZ-KQtz{zzGzPLok8eWzFd)TEhjBYHkw*a8H;TwbNIyyG@Z~2YBH_n z>K&L_4}nC>HuYXUnaokjdd&ka!pt3c+CP6`9kgBb{32Rr3O@w%IdJ0TX^;t+x)3<+ zwRIv8t-l)JzR!<@_4fBbQuu`Y;^uCc&Vk|}wjB;oxI+b@sB@L00y?=VF7A!1_07EB zYqbV%r93QOE7?w830xR`HYseW&^sWSE+_dBskG4YT-XxhzCUKN+Fc9E%3Lvj#dVXF zLC3eOIAb)}1Z3^7Fv*V+BI=O3PZ;l_B*oyaI{pof>s}zsn;!>0%pjkaKePbku0XjE zzsUqsGhUfQq-NWW*2lBHzGnAQ$J4Ivxv){op?T8!b%Q)JsZ9G}+D5khiH~Ohax!Wt zRB7>1U}DM!OOh|?ney#6FfKq#u1)qER{<5Yr}yql=vZNTg)+D99g0j=k8}-SWICox zv@O=Kz#LJlochO2UJKFlcfZskMURiyOvl`9^7lx#xyvkXTnCBvtyvpsAaY9;&M&6d zU=Po<#To}VyiWgCDm7bQaC>R#{ActF>n`2agH3lIfc^Ub=wyDSrl9j<)k=4QcC_K6 za`E$lRl~K|-rN(CuY{%?QgO`ZNZn_GHamD1f~b9U@%>SOfgqr~ed7Xnk_-?kE|dZ} zmskfw%+ZZ=R%_*p#UE&3E73`IV~!v4gfLQhGCr?Z%gPGgH;nG?6f0oWdhrsHU||VZ zaYE&^q2=4|VJ)9!5aM98NAx$bX}-$K!T@jn!>v!riD_C>LOrziSEk&We7Vxs&Wnak z7HRKp?YnlBIw{B_#Al2kXqIxOeV4G!fpl>dcw@>m8z3++ygC-Q+b4y^sFB_lA71}+JrRlr8?Af?zp?LF>b|qP6{EgKV0Le1humKxt*9Y|^rEn2 zajy)gQ38Niobq(5gd)qTg7^CJ&L#L5Q^1(&iJ{XeWlm2vF^A^D-tjdi;RpMtRT$|1k6t&U7Qh17JV|0zI&5wrmt8596Y`xea(c- zl5qXZ!qT8E>L7P{c`r21o09mg5mXznh0Y^r$)_IA}BS@HgcDpN0Gv`TvJC|0!?( zcTpr8M2$}>|0`UUN>H)4&+G2)PAwuV8mGm_=lHIn@751r8#R9TFmHJH=wkHn;T1ta zVE~|Y58Tf4b1jko(vgatuJkthBP(dbv=VZSfi=S2$iO&VH@-FVTniv7Movp4SfMHDUS(ZS z_;y~Yt$yjN;=e5fP5omxuI?KC_f=z$vvj7L@UxqZ(tj>iW#yDdqh(X@veBLcSy{9> zEuXaG;IoFw#oXfv+NA?ShjfiRKo$8x`Mc3Gn?*kGK-Vsfu ze2tNfssp0%j}^s`0VTDB@`LB`37;s~^pCBSf|^7b`Fuz|79aRi28rLA)^w9k?6Riv zUt37MGH5)O3L{$WTW57T(k!_XIXiC11 z&|>A;@vR+hsoC|Iyoe(@tpx@Rj{84A`hPtpa??&`WuY41l}ssc9uX)hE|ypYkqHAn z0druzNI>N6pX}Wuvm--#BaRoO{wFV<<%DQ=66CF|AT@P65aLm|N+TX#N`%$=Y(yWSAMkT=D4+kW{ z`osGj3{frE83j$3tkNLji^;KN$&~8 zmwvNl#GUaH_=qt0>>`x458BTpQ@0M=_&NJtd0pkJvP@@;@#Q}&eo~Pkj6V+CFZc7f zAnFoIn#}9_n$#TAy;{s{$y`>7`!1yQp{o-5!876{4jysG7#@HY4MSFLhhFJXHHK0G z>~B_w9vsfo zFZD_8eAh0?*siK>a-JgGcFaQry{YmaxkmyeDfq#&ceBxNfG54>^P>w=-@_};1?6EZ ziA`=%ZSfVP*Ll1yb1gi=iNU^Pz@Qa$34fO4>Bjz$DG%sccvkI-P`xA#J%1K z#58Km^fn)p=zkXWx;Oj04sKoy21xv{OaLQ&JK&hDPU*Gop=H=s zQ7ra7lNbszP%&D;aS~-)JCtcf(Ko*bt#$wk03K9ruRNE<_+x38suL3ve^?q~m7V7S zOulsRWIOq#&s^}*P{)&=%W`{(4K6 zL36s}hxOyH-dg=-W7Ms(cb-}G;4s4q+_UduikR(C<;UxlbIXd&CNndV@(wse4Tjb$ z(wU}EmRZ-}t6F;_dV3LQ$E@r~j{YHLSNR}6Z7k(mm{8=?|ttC|j-pkg)`e zi@{W$+=0y12PC_d))zm++DErTxGCb|_odGK3CFVc=;CWor8mVyMaRo$p6>5W!+Zuy z(UeU+cVB7}fjm3#d0&aL@j-+>Yp8!`Q_P3a-myzg}(<;lJZhC@?6ePH{WT)zr z&~-8zW}UM-!A`X6)En-!P%>!JeEPUPIs#Z2$wz_<2@CshgDG=?q`f7qf_C*BIk|~|tI3)SM)q#ewUoAFpg^RGEY_=9^PEw!BtrVW zdaTi#NSR3&N9scv`~W-+%Ji4DQXzAl>n`Y6pcmnti-1JOS@T9%*_s z?XxeIU@m~$R97g*0KL>|2dIv#}c4RB0820ArPWX5QqEey>-{ z@EwiAaiv$hE4A(J?S0W85~_6CWHf{+Xf23HBUTHlvIw%{^5en&6ht`19I2VbY~i55 zzg-~zXIjNjim8+D0b%Vj%b~0z<>+?4MZIR(9aV0XKusBPVZi^Ss39sI#|%ic&~MlN zfmr5?( znU%FiG4tPkok{)&WO$@~}txtM2TACj&8h|Eu%FzW^T?wnriAgg(aupspC6U9vOFU8w ztc$45Q8{f*(DZ=N9}ZVIS z6*iks31eKIT2t9nT|<+fe+DY(&X%_t%UZ(2C1Sh0yB#o+Kw$7z?0T9q(2=>>6gtqV z&OWDZWcDym4zfP#@5nrOxJPteSwAx)eQ<9fl^F*wR8GmJ^rnG_Us%A)=LQb%9{JmQ z?RYuPzp3G0PT?O{p8TiqZIpz8xs{z&-ryro&0gfXa5h8ct2gtlHK`2G&na4(IuCtn zwHcuBJfPT@hxO|-(zes4Jen(ovOt(7WqV(~I+YUQ^;ze^5k}f+Yu&EFsnix13*mo^ z2>Z+}ZjZs+`0)yP75A*DRxhz5D@0+TW`f(NLO+9L_T(11tT&-iJ>a zr(kug%9Ac(gyF>NhEhJuMl*6N4uTy6nL!7AX6#y^wNgEIyfxKbr&1;p;gty}rvcQpf~DdJX&4mon}!CZp^lNN~0));xXidd~SsNg8K zH+Izyu^>`XK3NSH7Vc^7TsxpzH4bR!b+rsiVxL3Tx+X({8sObMJ^1~Vij|yb(G$=M z_Q!V_&vI}StFux@O@akC=t8NE&EKaw4&=Jh*5Z7MO>pn{O~=5S6QK80+xZ`i(oHY7 zrP~Tg8HdP?n2Pt;Q}=SstJ=}Mk&I!VJ#-pKv5N!L-F=YDu}eAZ8PExr^qyL)M@hBB z1mjnpHbF6ffX9;(Grl7_%Wphi01KLY)^dcZzav*SF6KcO7ZX8KhM@=!>Aqc#)n(0GsKAl7Ut>s@gTA>fg7IV4MmFDR$q0sLifTWY5_)S;qU zDUbpxSpA^RCkcHU1#{u%lUG|f|!*F9SrocYdhpw!LPQ!kICAa`4#sM`1}iNn;rz`r|i;K>iTg?<#-z zwb#p$3&xt#VkCSk*vF^Vtdj4L;rQF`RnKO+X3ATU`|kqB-(&OtCjS4NTt4z~|8s!*AL{u(WcWWO zgA>!S-z#0E(8iGUQjFM48DDUiR5q-Xa3x?(V1o~!?Q;7+HSphd(MdJ5C1zM{CC?@K zAm11MS#EgrqR7NEV?SX7Qq4!zx0*jW_rF_$Z*;3#aIQtMlEm(kX})G~++@`q%uzag zYjFhnZ*2S@v-01ga|_@b(1K${C+spul@Xn6&RK2nOEEG*zXhVtV1NA1Lb=`hcUkyn z%Et~aVP!OZ4($KWmO$?fMShVjD@#mWB~Jt$cmXY5e@U~o`DH!g9~aB*Z_-Q^;d21)joUk7yoVe{z;?P&OT!3O-QDYR ziR|k$1y7M?@4^`f&MHWy{C+bnm)T(B(`);OX1`zDsTFFzwWKrR6nJ&%E^_^KT9O-( z&n9f&cWQ$ixu3weKhUx#(AR)pFemo{cQ6*NL_R#I@qs>HPYtrG9$hf%{>=g7BShoXtXFc$B8DwHY|;Nm9i0&ciTtsX7u zAFJB{Ab#zlUR3RbCX&e@7z({d5a0Q}%aYP<4X-Q^(!Klcs7L{0v7LJ#8}nDOv|*M!|C zy_fXfL;$*pxYi9HPz!0RgLOwmD>&6KT6G#AO9Mu!DXhxm#NmgfiM~8FYujS?V<}gH z8cA6Bw*#`hD}hI40x#UPsY8;lFyK*K3YNY`(-$!XmqFC)ABBi{zC~+0`>C}}k9&zN z_I13?cdHTIQC@54+8!&vzXcI^)bynFrCh>$HSD`sN$^qQOU|Qrlvc$+OWDQC zy7@U*kln?-2K&iMH}oBlYQddxEQ?+#xF5-phZq=Lp;!8 z{{9HPm|X$m-a+SK#)*X94=-MvWK-^QLNn)h*Tz%~D6aM|;WYO~KG(oL%V{o;m!zQWXRWu+&hj}H0tZe4$etTjLj{iQz1@`kss%p=YwJwLMU(5e zA@wmpbAc%GhXiSDOxAmM@M1z1@;=3HiO$M%$+UV{S@WUu8oqtlvS9!J1NH~itU%n` zes4Q$>D;uqxl~xESH&$HWYYu$<2fn!0x}NDeJC07clLW~hsze4lzp+hOvx0=p2+5= zdq`o~Zbgqd?D5VQ+W^;30ex@eM&$egvTnq1`y^E(cQG*OS%QVMefQaggE)a0VmX;l zAvi2}h4v6Mh`b%mYr34ywzi+HwfEbYgTFMS&qw)FOX}GC4iTt{>kkLhkP-I2*i10Z z`nS6M^6ekf^**%ov#cf+AaLp20xK#j;`P$;~3%*237MW_#*LY>xh8<0-pM|C715H=j^#3(%g7R6B9g@%FG(6Tc}xhPQdy ztf+Jt*(6ncI9*=H${tdIlW)F_CEA85*z1v4*$yrA4@9O(ybTYUNMoOgZ|ex-m8eU? zWPlYj`$YZRtHirrIzhy(nk3|J9oz@Hu(Efo$+tUSKRt06*}OiGmY2jg%G^H1a4g1b z4>!d$75e~behyMxvu(2$PT%aVG^yzPej(BY37#plN8Y8Ol;w@o(EJK}ueSPPmCn9LJ!uv-QVKq3 z3lV9c3Z;A%<^CP)I%CdnnXSbALQp3bCr3CI#=MjKaG%$QZ(EW3xNinPVOs4N1-(0e zntucL>g&(7vA;1n9M=G$5_G^JtZQH}2}`_`+8a0EeE59O1So z%3^>4*Kgp#;46^} z>$5B3dX>NJ9IFBlTLPt|sC`A+r#JovinM2|6lOOvM|FOjPwVfjZ}q)Oq2V0Q>W@@u ztuS9*O_){o{T%iB*TK6A(}`XBJ{ri^sVdV6%x;y;!#FSuw9l(2&$qRH(B0m7BwMp~ z+)H%7-sT-Me#^n>*Bzgd7p z(6k`^3Xy8ArNC*H%^k6#;P1{-OTXFW9i2A%&!7-Rk8S2uhSxl0ID!?e2|!rHeBlqk z)k}|eOuzi9f59oHcc@WJm>d_Y0R6QfhZ>81WlWu7-4z;0Q~9va(+w6& zWK`XhQVV}ZT!q%7RkmHd7oPdae=Yszt5cyWH)#8~wnV9i_wL->6%S+#rJUncOpX1u zMD~ddriRUb*xHpvQbC_dAB8WKGLLFFe{G(=oAVoaVCPqfItq`8AoSaamNwb)4~v#O zN8NlhZv9zc{yT{)g-!`M@d}fQ#2SFcOIS8NUibl38}aCzc_3#fyk~Db{isTjW|-Xc zYeSaZL3^9750ptZo%q=L4oduh<~(^o=sO<(A_Gsiil z>g{DtQNA{nOI+W~=%b%lWAaRkrzjsWYUK3;vG294Cjx=(D^ssM#FlD{0^Mdl@Jh80 zJ{TJ1IMN3!^_OYtU-LTEq>a8qjjnGk1LQ%{NP?GhAIb9Yw!Rl1{C6Svmx#Vpq5fbn_vA$CRMOs9W*%AT9^s7@ zfKT%))|#`p-$U#>iAWwq`J-=pU>#ph#QbsW?T(w}lV8iOx;DR26c5)fm{}Eaa0!D4 zj*V3|?(41IAgw6-^xO(lk)lK2sg_v&T|ObzuuZl@*FWj8vdm1ZPP1K47)a)6EOQfs zJK>E;bz1AV(u4O|5AY2G-W0BK-GfWkX};I`ZZzxu)7HwY*X&Pyhw%|kKf80p@>hkP z%)hopQq3XEZ48JnGL}(1dd2B&5tG1U6WIshE0*(fh;>0KnZ-ZS5gthXT~i6ivEhg}V@!w3}~jMPhG zg+hwotNL@L*RyioZheP>=oZ2v0t!MF0xgh7t_N?$>8FG}?NoZ?Tt7#7D*a~hB`OUz zhcuk`GKCfr``P8O@4ju$T-u`x#o^zE9UvBHr{Z>+YL%I%J62;Q6&Uncr`t z-=l%7L^6HGDK6?JvE6_NzaPVkjGuOYq9T0es8T3=;bdyquNbXTdV;p66St&YSfw$t zcSrJJ?7y5RLX6COV^)E>%<4!?T=_1dBY)XlnDaP$Tm7;92lkmEFta@Pg4-#?#ihWU zB%#jnPd&b*&Jb{=*wG;wLg!1~Uka_qDDB6&S=^-fPBa9XmIxRtZ|bY-R9p&NRihe^ z^QA*D56Y^`XE~9>vfbm3#IENkO9J+XtUvqZa;A?z>FJ~#zDBpTf+ImUDcdv%_2u^yEJTyFqxr0gMba=24{9FwWd?hnG}`(&LzmnoyR9LYIEOu*&u`{_)-4rM}boqq3+uLv+U zujwaM9uQ0o>mK-^ElDz_d<~O!CPXGHUmZAfIa8`yN=|z6=#9Rle!=%af$IF3bUAh3 zDL6`?p&)T72NIEi^JC`od_~^8omq`^1iotW)g5xC(S;iC!h-1@fPzOL9z>IUEBA7A zUM=d0ryagKtzxAQWj*|D^v1txryk3GM_HVvJ;xEFhYyPcv#g7R)w3$dH1u-zx#ipy z%H@8RSVdRUJNT=D>MCAXQMBiilK2MQX6nK@g;d5CX@Ff{N0cQk4>=*90sey%QinKnT4<64KueHZ1p! z``&ne&d3?ESJs|uuDQPX&2O%Vg)?4yB?GnAH&96jG*E0!Sg<}`(g{VibOW_kLl4x+ z*K-}}bLWfoR!nbRroya)OzP|$AQ71vg-Q;^=YLdN2l;l-a$`k3@A`jU%p#n*2!2_P zP7_!j`b7%!^CZ1?QQWEpYAK*Mj6$k?zyX<~{R6!T{#5?Q_9f2nEDpMQRUmZmcz_Qn zQt~uNAtj_Q_kp#J$2D0 z-&$`jt>9h^`ZmS2xW&UVpyHzG-YW9@!7%y1hRbW0#I5q^9(E&S;UmFfc`{as&;Je9 zy1{myhl+`w?%$~)xK(&MP=mgTZLq$LI5_&p{a(gPd)h7)c&Ehd6_nC%fd_|MBdN?{XS9 zh+O-JaBbZ1{Wj=F5r>x31^{g&?*Pz7@m))PaVp88XWQ=%`kc>JRIISdyq$NyHv>l5 zDe*eHY)Eq{=oez>S^fJtSH8T+pc5&lBgrBi%d#RNQGLpHvc1rGpE1I>boZCaC5;=f z4^BMW%>GKMNd0p2~lj`P$8yD^fJ;GX%*y9bZIkm`zIG z<}?-HFsRvFWpuj%jVwAp*ZgjNM^|+Bir)f)w^D^C-)rpi4m*4MH|d;`XZerqOa(}R z-6Ex_y{>?s<732#rGoo4zs2wiov{kK+#0p+jg=3USWj$ec4*nlvAP>2;U!tiwRliT zQ*`_>)G5z>8?{c;2Q}Q2@%h1xf?J^>gZPd zOzgjq1zWpRV-@ct;mVd3itkDfKhNd}>w zUhWQXP`zDC)&IR>3>OesggV_Uzd)7sOPhPoMmBCX9mF&M>5Hgjy>q@U<=CSq?!iEAkB?6^GKP@C02LYkeT!kN zveS5BeSR5z&VGdkDGnFuchQ?arQH}_Kba*JC37oCqAlYwgKzs05&xvwI(mrsTi2mk zOu{HZ6lwRgXTnMP?|jMqUGQ4uecv_ic`!dap*4f8yga#(o?ZP9KSaTfpr#CTSctGP z&O&zfy8$$qHVk|C!wVAU0u=F%0+hj*JnZ0jKjgjgTGJNrU&D>X$!g9nH(PZNm$PpN zk;21o9MW~hag|?JBi{O*=IGu-%`#lyvE_JIo1GyEr(H@g0m?DW`?q)RVl;Q2cK&PT zD6YYA0`7;6ru3(vct1iy=4vkEDM;aJv)Z2PVv>G&c-fU%j1`TrH~!q`o5+cK(q75U z0Kv7Lhbh9m`rL86AwGjFvjQ(Pcdc}70Jgji-aDuRiShYRyVKg8}fj|AdhAF zyp2lpt0_wW=CjBIU}TT#k-{y1!GFNbT_-sf-P*7>YeMEmF5_Vfw~5|VU`02x^WP5$ zXV|KY?EcFfSlAvM9u}?!A)d`<=5$m&!$#fdcRieBl1*-QQQjYWYUFM7_$olrHp0|FW4!ohL)9*8K)(4v0)US1YU79g#$zaISF5;1 zxGO1ZxrZ+LtmJ$l^0wUL8LmLQp&*(m?%**O1U`-WP8$YkTDdl4yTF-c$*&7ELbWqn zb^7mj{>_)*_c`9D&zY}*oM>i6+5y1ZX$Mf)uw=HimwRp?>@L9$ii86@`5=%hyu5Mj zuNkq{CJw9dN|okDKj~~5Xp#C)$|2T3z-Qu@d0E+~fo>!)YKOyLvB&V{-fm(|2cgtp z40~hbbwS@wb%GgN(r}fOj&UNtDl^kPeLlr-=gh0ae=#SpR%fcmS4u$3ML-Q!MYy!Y z3DVKz+23^oD4Fpo@UcG&(V-7UFEKf~wpVO9YwqW7-uzoRvTZM$vYgo3g~5!0I!+1{ z{AMN|p?RfW6oSZ3%7y4smiUO8s9zB=4ktO+_lFJ_0e&no}9{=nq zc4l>W71b|VpiMP#g6xCB5e)0~a-$+Mz3Ak9&H5M59zMvec;GCyH=_@{t#^P5k9SAX ztK})`y&%@lQ(^`WuLCbKz@#@UW5|D_H{uM%JH(-0N}pF;g2&$^2LOKq;AtRzxc|?@ z-xlCwj#ep^QPbe6CKlf#<*^?OOW6!4K2wUe0MF#^KUMJ)ZTeJ(Gt46(Wbvx|^-u3(#9wu{;^wN96SL#IJY`1&~w$D_Xn+V#VcS z2Nk*hu;@RQ;#OPYK1Oj5LX1;1R)wB3jqqT9o8+zXbH;xf5Z(i_H6uehI-i^A5lk;n zY1lV@ffhgu`7~yw-l9etLdtrds}t^2!sFF_yisjm1G$!X6wn+a)|je``C~-!d3M*h zSd%HI6NenX4&bYEi zw*TQD+2<|Lu%2cT-7Ui`ixVI%3I#HPi8XJ2bCO2Dp(-SRi@{1@P%7w76< zUY^H*rT;rzfc6Kf{MdrN>jc)5rC>F7>BgKBH{Jkb|E)1*AQ}FjdH>*Ktt=L#lq>*~ zuv0D0v?P(iY(nS@D9{nQ5(*H7`uD2ytt&#htB4mksf!j#t$d}ePO~U= zwbGTf%-Hm-^;%0w84Zf%YwHbAWx9!0H5g!==%Rstk%4@0qm?Lx! z!3J>Bc>`iVWverdZOi3x^KP-2Y|YwZPRxetwrOTSA^-ad{^ycujj=r)pDw9^2!G}S zn3x)hi8L{D8@IK9zj5h$e?-blV6lY{fAas!v(h^@zbKZvvJ&?!8--*EDt$o#wslb? z5Lf}rwgX=GKPZOcti><(iwdW?H*I3Yv;ly3&N--JN44+q_3o(c`b_NOROl%Ehqr%x zp>=%|9-ltvPyW!Kz;s%}?(3V@d^9}@R7oFj(H8+I-63rF z`GRS>i`bUlo$By-YhR(+(glCQ)etC)t>$Cs+hI$-ukG%+U~y+S1I1V|OdQAzYZ3B6 zhBwc@9NB-Q!vRyG%4V!lb-^rL15D%EdI4ohcJ6vHim%%hk=;*4&;EZAmw~luh!|@k9pB#*U?zR;Zc)Q*?aUe>o>jEv% zz3E_m;OsdXEEl2=LM=+sJg9sk%^mp{cvUHZh}n{R2`^!l0O2x^aSx%a>*8e_m7Rhb znjbO{jeOIkv#twEUC)cho0JdtSLn9qB1{HdF7Wuf*KYe`lHzTr;T}_gqNQ?cTWELL zr%$ENO|{q1{sB|6Su6U=XHT(RCRV7gG3!BR53Ex(jtB%q7w7=(_-`^jluQ4_y->O# zAd3%=S7Ezoc1X2v@VR@U>S>$==0%s08st6+5!os*R#RmBdMBXYIy~{0B3j#K<`jHH zw=&)jl5buQCBa!~CVcGE*ylAx zoW68-TKPU_EgtaBh?R^x-2C%CO|kzm#X-mVy~ca5N4R;$@4282=#xxgLD5GvXKny8 z_<#vyX5upMrC4u9`n_%0-}LdOKCeuR3AvA*-NU^X`adN^zRLe_@A=TnRMTQNibJ{U zq?2=ef6dq`Xqix>aX=2mYhq8#$?Ez4ja{*mX%&j^smog|iEn=GZZ;aBd_KBPQ(0eh zZp)cu*}k!1A!xwe@VT2Bl60>iSn^39VcG4CD;e#HxR5MB>+$M+jLD0SUlLw}AV#5F zi*eGm)9wi5ON8NDWO=zo#0jKTz1pjAA)#{Wv&IDA&9=o-sdnT#ebD4X{kpgpbiFs{ zToC^!4n?;@V}g?!`UfQ1d|G__GzU_7O>9=Da%?byC02hO%LLX25F%1n?KrO5TZY8gUgJFa@yk_n=a*9LjV8Qj-IEt6>VbXVA~|Z4kYq0QaD-q~T3> zc4%u@c)Wx@mQrI&>+zns(VdBS@j}{+Gg&kLn*R|B;|tEL0UZ*I;-p11)bjeWW1d4Q zZB2qUHfnt{io}*Ro8jzOM%N%{$Mfd(Gp%7?+qLNi-l~}@nbFvO?-37+1x@6n3hQkr zH(BZ{I6l(m?4SQ&5jtljr&&X#e~w4Z6?hS$=5Q*M^p4DPQ{E`*?m3Y$%Yc!Bq`rZc3m5YXCxC$`{(-It1w`A$J z2%0%Le>T!b=D69PodH^-+>R;qs9ec4-O9zjMYz;|wT5Ae zU8<6Q#N3P4TAL`!otgn2Zj`zSoq4*Qrw3{!1%gV^+kQ0;fK46t0G6%d}Eo z&wmgDSl49Pi2@J%wImkk=9C$kuMa%R0P?f;u8H11o;TUSnmd62jdhDzqjfedTZA}- zyoR+YOH$jt-7I|`9xsLUu@QsVNvAA>*6ZJ0Q7q{}&NBgW!pxcdf`1QQ(Aq?{C;PvPp`7RKS>GAcmw;ri%0?Ba zLHxSDS|Xd*LROVGVZHa{adDQ@s%=MX`irZw-zExt{jNB};Ao06X4gdE@31lJRj_?u zMaXKg4N_xoZ(*+bf=*>S7iSf1A2}5VQS1a4kgXe+ItM^g-CVrimP#>{MTpVt@j_Mi z_cw9ASZ$9d@)6M@>H98nD(TCngClk@LxJ;#k3f35hDD zTgTBjntU9jW z@8Iaeq<(_9Jm|lF_49*Io_C8uh1_o+Ml}wO4k*vl_@8`dU!nnXmo| zHvxXvz?bdURc2xH7JstSRcxxT;L%jWG`g(UfH7HFXsFNl7)mdHT-+zGMYI1PV2YKZ z@3YA#r^bDEyad35za;ejPLjgU^Lub$ivBa|k!XxT<^*9I{h(fjcER(|@!;FHZvzTc zD5dRtbvp=nsUR^XRrHHZc3)xzza5PFaL7C4)1%l`H>XZ-O3znd2y6IXVEE;!1m~2=j0=K!$DC;xd7tQEdzEeV9gTa zBf2+82r+m!dg;uID_<}5NKppZQ*^Dj?e7j}D3bz*@Xkxw^|^S!y3I-HzOQNsg~LIw zuV+|u0-T{NS6Wz$vCC?~H|9-i4q)OCi7qt;zeF2W_PC4Ux#LLb-g$^^n^XRZ+vT9= zmoTe-PS?*6+wqesTNT@k-)bKD=kAKM}#ZvB6 zT@9PTu;k4-eY@fW-Vbacuq8UQ@7rsAk62ys;OsmkXA?Bc9VKHH-v@aRjL1VS=#)57?CSH4fuoV8CS~){Qc6Xz^D7aS zVgS5FBYVBvZ+o!$-{I_R1ayz9vBkqakbV@je^aQ;b;;)B_3RpO?JP0C(eYlnF^7J4 ziwA7%M1FI}Z{s_0Si}>WRB!#T&$n$Mzu9prp(pCSNRc7MO23C@HQN4z4KD>;q~gZc zDDiV2Ic{OitwMkXf#c2CQnA7Y2y-=o_mFM|YpFB+8PGh5nV`I-pAT8FJtyC)Z~HOm zSJSjDvhA5g*=2vOw)J~cp2r%P8;=On*nBqN=uHc2S`OuoF7C&jBy#e=EAC&p?*8lC z;cC0uhATPA6_jOTEli zl$bg%6Jy*H+pn!5VTNvP_-vFY9_^$1o0Q-qrh?tUV=zJy602xvT)}lDqmu$HXAsd2rP+YI|^{ z?1$7DvX++Mpd{H7Op^>Q?xTBTQ?Z1rCtp)=5$~nGuZ-;tHalJ_s*=X|oLe$l2RF1Gt0-JY@QdnIK64Xe37vus!2KQdjfq@iR3lO;+zIqyIRE{SW=(bHfzZ^dODEDU$qJ z4G||vK*Wp5&)l?sruaTLOPT#WLno~2rh3vvE6TwofvTrv-Y5jHXb9d zStU8jcsvxk9Hr{zIp;Q78z*aNhfP9{oh9xt53GG=g*`5avYw~3&*e*X`c>GCn>f83 z2+r9sL%@8SyK;h&S!nwijHkLCC|Ht1xK4?;04ZG5)NoA|y zqm!^>4n(Xpn)V3~@AGQa1Z5@%JOd(9GDi(bDdWFZUld7+RGl9YL%$_yiqiDcN)bkl z7Jll04DWIh0(sV6i_F_$-hoV#yA>GUR~|U3v#ojK1u=jTwRksE=ORgSUOPTWZl^#TLE8>N}yT6OvyQ1v(77X%L zLX(i^)bcJ*M#RE%qSe~Jo!6GvEbG`YQwXW#fD2JFfd!A;g+Y9pYxfg;M|PEIP>x8_ zFlcnV3!2C}>6xaBIVX%*a74`Z7fJVGiPSJ;Ql7>uQ4IDw$!{D_b0E7#D+%KRI*PEEBU2EA6Iw9Vz5 z5DCZdj$Z;naZ>rVQ^))(O(Q>@Zb|4AcD4M-*diIOd)EJAreSYP`if~B;KxXDK^e3L{bjm>@zZy1a~UVvkOPE0T`FZ%dFZ%|Q?lIo zASCYJmB(i9?YFn5M0x&2hf2^BB&uP>Gz?)z#0dQ=RD+f|6IaD0aUF()vW3 z((?(*#HNE^&`U4N+^5&RJnrZ!b2!6|Y~gE!nobCM?92eqL&ocl>ogtr=ZVr@ArDRP ziS5@H*m)bbXO-~|N-N_v7rF%Z#44l)$nULm244D7>dlxXbXXK$4-fnVs88THoiP{uL-+SfLr_ug?0$ z8ZZQ=lI8S}{&j9Ow~~Sg9I?(l0?Gd23I6>HaYe6}n?UsalNBVw@n$Sd`w2Z{WeCIw zV5EBX?j60a+5;uh&uT0p!xSO}_XhtSe`DDT$B|LP?PAuTx(g4EHXa4l{s0ow+9{uI zj7dotJU>CaghoVuNIbqwh*x~6d$VlL(sQxxY8k-`{XlPyk6bjw5aWYN4?m`H*#Xpz zQXh3>`RT4kTvI_brx<+>t~-{DWDLGcO3lCZLAK1D*NX88aW0eO6MRH!uZliBu({k; zea5e*B?%n2gz{gpFB=ZwIbqp;M++Go_4G}hR0zqTCewL~N9#q?id*5Ipq2<-hZ5bcbO}PYL*JfNn5DogAse)eW&)DcbsI+0I1vm?^=T)*Wa>UA=kA=sU@BSVn6Y^}c#*#4ktPjdjK)JUXf@d1qRyg%?Ab zuNWuFd3qw7Z?jLF8XX`%_6(rKrq^`4zolisM9wi&#yCOCA1C?x*?DOPK;GbS#ZLMi zn>M+5*$q=dC@?6P*}w0tfs!@Ab_C{0wp)FCEokgS9;o9F*xB%Jn?<)&2>KSA1IoC_1aUjYP)`ls&#efOnqaJnv$j#4YKT^EEjbhp^oG(v@1H zoIXDhw}0*@CiukjWC>ik%ko!skln6Dy9o!?Ckt@xF#p&*Q0W5XWgh2RLDzt>^h6|X zZ{JV+D$Z1&l<%^cvsB&*V3K=+(K^JEK86zxb{oPw8!>jL+`Mu5 z#-Q;;)6b;yi6JnOvI=2i!VXsxJgDShGvA4~n^;h^^AFSxK&x=9vIc7$yALYP3$hs3 z&?cAeP5$nia58fRlF^UNH?CpzW_ByMm#m?wbXc}Q_(D9}o;9MnT$|VaQn0jHjQ@|R zzhJJvs^yt))XI9E2H&&uEKh=qZRLP|M+r|y{)+cDJ?#Lj3P)ipzB*-K;-lYBV-`sR zuIPi{RoKXd!nbTr<7jCVStCL##AT0b&P++E%Y9Z8p!{U9x{`qegoWzJc6p(0pSXZ-zl?}lnrJm!= zKgWo63sU$*yued<%}EcpPIuAXCh7>?*#%bUfP~h4i1lxS1jf>~!?#rRyy}-w3!L z+B_wu+W&+XnAomtMxa;L*Fz&>hlBLTW6OP;mJL~nj;lZHw^=a`c#$&|uM+q+!p^iU zYitvGv6Q&0h%jjgBgw5EDl0jy8S`Wb>)elz=h|<+di6j0+n>XTZ)e^(EjaQ^W2WLA ztqa2g(cQ35uR6>XF^ojXYLs`~Vkj#wc_x%Sgpdx&=lb!jTDO3tKFsTy^!G5v3^R^w zthp5n039|9S=_}=N2^*tjs?2ahHF{YUiInLi01x}iRb7Tf zUC-a>Pk3>_s-k)Scx`yClx^&RLTf9M_drc^^NpH2pbzpE>?(X_WUxC^E~C0f*A)Zn z2ZUAuH^3qnOSh0Vtf~noJWZ<-vaP=rt@(0t7dh;=Z4IIu4Htn7oUDFXW zi$Xt^B1H%wX;eO38sGap`T+lQFf~|uyXLb~rL~1MP~hpyiMu!%bEi0X$u9AnRP*nN z0@E8W1Ey{cz^VRpI97J~&1(&$HJdERRQ*0n-<_f+oA4H#lbyt{102NThPgq)T@mwc zs6$$+$yr-|up_{G{Rg;v8UKdSwZzYhTLd`Nq}`JDy?G_7Zr6Qcl?m~El<-gV)TlpF_|qVY2w-i-s|X3IKXw!gn-Sb^Dp4Tz-)z3)Dy`mY z@{88c02#C=Rgnk;!>xc?cSG3N2~hPQ#g{*W3ky6$;Ovo!&VO#qP#Q?ROk-=lZtYo$ zNS#q(J7Os=U!hKlXX{#u2wVDTVU|D1Z9|#uvJ8WNkVi*wv0W-Otg_O6{AtCo@&9&4Q9sT`#67ZoBZZ9fSXjO#`!B#-l zr0Ou`uT2>qP8kTGh~&>rF`n!3*M5#uLf7Z0x^E-oc^M+zztA8&+gP{FHYo5YL+Iv7(!7KX)5EIrZ`2%}7n%Hl zTma+2<92LLUABucnn;4?kLZJ+G=c(>2Ruf>^-+v~^F4WGlDkPu;1l~9wjuOvP5;L^ z6ot>MG zq|-G>J;eDa{TA>(9s#5wz>t;Ts-k707Xpb#gyew!*yFyRqmhB}dlkGgtjcDuO~uNY zi$aENNW^<3G45Qqem;oq&RROaLUGKkKX?P=q zw9Nw(v#5*43$s_AR>}MHjmTej+G+h?D4Z5LSVi+j4_{-<(d)QBSr~_f8Oc)E#r|63 zCVcZzyPyEWT83~H7f#k|e5@Z+`&h}cxB;mS@E4VX@?KemCiAu%$r`zbY z$nGYzJ7@1RO|p1()Mg8xhxauuw&^I)xXJefHkvghi33Q$_*_W$z~XB)nv8hrEFFR? zN0kn_C;-gMl$e7&gA&TcUcPkP$Wo??%jRj+(mn?n<*74ICFW+haiSnk$IBbSZPvr! z?8_)loRXgySn)n=J!*c0yf=UeH=$8_tUP4y3o##X^L zh=|8?&XDzIh%-#8#XuC6O}e?%wmfEP-0MY%3p`{Rvmfy+pneLE7C?z5LVocV|@Jnn^6oJ(&F{4$^r zJ9QX28fHB@HZH4>mZ^zSZf&;Y)B)!~x(~T|P866f%M%f5xZujv(I-M6id=$w3KZWIiW z)U7%9l6x+%mORR=h)N`*&^Of*s zC`R1(?SC(ll0;)Qpyd~5-XAc4XQ=HOPI}$Rqw=tGJV{80s-~exG!y|>o{v)lc$u2a zy##=KF{r19*qK<2kv`OYcA#f|CWU>8rHI&5wvir@7+hxHnqVQ}Qg`|HN=r8f6bu8G z6q3}424_kov5zSk_3pu2Gh5XoS##@sU)Mn-a|4XpqgRvXAttqrJ4kK18j^#9gPxOZ z|E>_vzGZMsRDtPux-Ram)A4KM`3j=$GMs4bDo?XagS|gM8W$q)*R&O7(F$vZ|}QF zu`4tJxhHC|{oa=Hys*4Fee!?m8-o-8Zl5vv65}McjZGPkkXjd1#dwjJCd%a2A|`N3 zubkO4Db)+MF+H;(<4cKU;=<1EajTz!>K~3TxIo2Ja3g6gYBckK>)`p)J5l3ht7ERv zt|icF+J*oH&=7)-vQR<72D&BX7W*q);Chm;PjOs?4c#z(*1^6!8dhvwEFO3)MTv%~ z{STl7__iK7amZ54oPNt`Bi;$t5@4057i7Kr38S^Fw>-CKamai0nBw)B$01_yl z@TuY6!!iUNu*?OSk*wAE73Vn*%5y0LbngV?~G{_k0U|BVj>Ygc&qg^ zBSnBcYYEI_23P%=AwIeS146%P+LzGC@ zZV^treyYXUL^B_Q#7};=k`en1Nd}^++Gm177iWEvo~jeT6Cb zwfL;ati;+^Ehqe_Fq=pKK$u=I^kv(;`@*uZOm0F1%>7sG2)q_x1F&o87=<4R-x)(K z1zMy$MN9$ItF$m^Xce9;neVN8H5!=}?Wu9+Na0UUVSf4}1Gw?e{pgi;!6^-AHmb!d zDP&=cINkPS1t$@-o{0q7+7i17mmD5U#(dK;{TS~LaSM zwq=q4=uswWMsjE#tBWP}%L|IoI1+*)X-AleVkf3Le^dRePYC$We!$L}o~O?I2t3Z` zss+;k4i8cS+#1-*%k@R+AfR8vo?DDa0@1B z^-HwpW{aCz*fQ@c`rPU)t519zusy4LLZ5qyDXhLNIeK)6?l{dQ98xaeP*&U}0C z*8mETu0ZD&R>mxD;B*9u$ zOaU%Y`ZM+07{F2etbz0>?J}b~j8+5XrALl{O-ooJH|FQ8>}LSpo{@sdvf znX#7#Kn^B?j~0=+=PB${8(S54qegA#Z&!B4>+1Y0y?kAgtU@gvHU`YQkrAayYr_F$--H3GJ5#vw zmg2GK4@TRRU7fRty-Mc#eM^FYW<^eWsN#2#V4&UV- zTAe&MpgR@_M>Iu>$TW@BpUL?8)_86#{^(V-Qzh69djtkSm*7+|NiXPh`aqU7g|8vc z%;pI$8Wd?44L)Kv{tC`*cF7vaNahlHoP4U-FqnW`;^EL>f z2ATbe23Xk}q)m$NmvF8ikkfB$eHhEV#w+$DK%LTPvw|lwdkf|iGQy+dk+2d8lOd(WC>Xt`*{-O{yM)05bQql<3 zEVm}y*yCQ(wD+*=bKxhuzB#euW>&Mlq{o);J7*r-Ndqt(0If~5LgoflssN*uQo{21 zSNUXrWgj<-o2bL{Iq0dT;b^{qdC~-K)ztV|b{@Sz{1~eC`66jv1tlqVg|MRlb4+OW zq+q-^BfL{Ue*tcmW>@)HC~T#3{>$i@h}SdxbtNynE7#V(0|0pct~PPliQ)Ofm`=?n zfucCS9SBY`H$jTh@$1nfZXyDI$W9+M1y@YRS#{3FDvWjDq{rxD*h3RGfcoSnQ++Z9 z{J!3_o_YRavpmwR@&t8wzvs{$voZ24BXtIgL=IV1Ao;YS_pA3`?)QW0LhOM4q#8OB zTvb(-?~X;jD#kxP1@_{e9jdA*Gm0q?dB;L*y3ZZ&$ucke)DY8;12T>Kob%pgeK%HN zw@2W%P!ErXq4r)jSdp$N##xqhIbA&pZC@i&l#F10-@1UM-cr2pw zz=Gz=P9aRs&4x{Ljc$3`&~Ge9p>fPXP3-a$Qf)Ogh4EA>>A7BpoBiD-`{v`yM7Pj^ zntv__1O(h5uTEXa<%yKzh?~9$@G?fAfrCcz5c{1=Giz9%B3fxK>@WEk+Lw3Sx|%#xwOeVEf5rS2I$op zId#vVigB}SVMwf=YsmN3_)^HGMV@b&x3i5_D3zRVLu>c8wgS=sJBVb=#e2#t9H(gQ zco!Im`k(~3qoeKluON?w4KHi*^bzCAg~UJ_k4k+}a)prweJO&=0_8AGgW2|pan6+F zSxRMVK;7m)p~U`9dq7*j0mUbl)-IbD1$Zy|f8$SLHtPDc40#;ig270aM$%+C=X7UO zwqOOgv@y)DbM?EP_&bG=r3)7@edv(2=O!-Goi82Bb|189(NGVca7gYel~SbC9Yl!riUno zE^_S~%t#8l-TsKiJMl1(OdkWtkd`o?R2!eF_IV+Q4K+81g=lC86~1+QKK4xIn-}U* zfb4{P6F(teQgF5UKF@>J)OZPy*^uun%O7CL7gkstDzJkWhj#|NZRaC=DjrQ zK(JeI(GHIR+5mC@CgBy9Q?8pGxG`BKL1-}US4a$;^KqwA-T?I#&V zR3_aBH#3>#h)L;*QEcRTJI{AZ0i1uvE`SJPDWyn+)kjgV*G;VzOPWU zD@yA^z3A}|X&PAlfTD9L_Det!wo{E(?&zZ_^m|eZOydH3664`#*r2$4uh`A38FvLu z9u58=(SU<(NEqt#fBG}?%!?Wp<(I#gM;i_fAMQ(yCFN;gM;uD-r9%!*jGDgU`#DA6 zlcOyw*awLKJvd#0)`BsfQf=Hin_x77;Jo;IY^JNb$`Aty3=?q}B93}`7$phfiTtWZ zND1Nylz@yI`T&Vz^eWH`q7)CLccUPBF8GlBZ&~ikV9?ox=@q*P3i-K;lL7B6)9w;& z#dBBz|EchSQ}E%&37YN)E>`c0+wNDxR^R7;A7H=0;)~fbhxpHDZ8`voVFy^0^G7ze z4w23n14)4|-s$b&i$u+-E52YEFU@04BDzdsi3TbMa=uNWYW{pIa2Qr6_^4h9 zce&85fjgtC)!5SzUw(2JWrNte^0iu$vV{%cjF1*Ii*Q{RU_oU^y}q;X|7cdGm9*XY z6*i~Xb36;7sF?$Bkf7Q)z$#Yu#lVA6s76R-XY8GUh=+@Qf$v-~==ip503t#3PJov~tpKLon0 z=5QJ*z!$U5dlC{CrTjst=ES?44NyCO3xhK;oHL{P7A!FOJsruGMvgC`gWh7iA5r)% zUQJ*r;;zUt1e}^?8#MN^8cw66kABpTED1~2=Y>ixf=>yCzW$o4$yu=B^12ZdBaj^k zgnQxEW551#yvb#t;l`S8406!KIr%06PNeTAWu~|x1&8gYAWQDc5mz;x>i2@pMR|vG z<)=aiA94?409F4o9#>v|x?p9$HaSECz4R=ER@3qne5y{p&?Wk|LA>x(R>UQs@8MQr z%(oJ!4)+?{TAqfP2;*tbG|2hA>rXiWGq>of0F+`wg7-^UU3nWYYzGrYijYnldmWe5j5F_z~GTZLXT z>)sL}@4iU@a69iu&$VlnAJLnOg9F*PAb&NVZVLmt-r2K^SvCD@lAHom2y4~~KU5Ho z#!?iLkVCWT7gLcj<>Y`IKRsbg6key8T&-Pz8`U>CETzv$j~ThQJI??D&ZXo)*@>fO zZ!%&jJkv)+KXC#K0_!j>y3pTBE@Irki{yJ==&( zZJ2rzbn}RsoeH{uD(?4FdDTu05N<}JNc@H z!8>s`cCFpV8m(0Y3Wkm7?K^HL%b5J|pCiEBQOWzjv@?HW0x$7<*u6G$W80-+@_Hf@ z<6?W_br4dvonOq zX=D@OsgbOxVu{e`ei0QXM&XKnoc_f4i0j&9Ox(W+D4D-G2957q@LU*`ZsZryM9ya? zx+_dtI#rtuEyK^ItH0oZ>PtaRnl zK*0+$jcQ_qjl2SU$CjOueH!mi?VL>#xDV>R%FgRF5xuh-Eq@G&`)u?ydj24AtNa9Q zzADhpe;hJBjd2%T3!wm-O30a2ag+0aEq3ATJeYAAZZGK3y@YNGY#xXJUAOoUMZfYo zd9u-Gl$B~-@g?;qalt(Jrq77W7FdTi;H)~>mI5l%wgw)*cYzW(Q9{Givj#Q~Y0ezk zkqZ$67rM0tO7!>CMi8Z-+ic>5qi{mZli?kRD4UUo#7mVXAJDhtWs)!>VIR8Iy<=Ke z9N24@>cE@mKpE*U<~sO`FlYj}%y(wO#x~6dA+5NZeN3 z1a90$LLM5PUNM9*!ho6ZPK(it?$2p@6xsmR zI9$lu2&YdXLGh+vJR1H6Y%*Lt3aW zl&~qTySd<8Li zmrm*`ES9+MX?Ycqq+^i`@&ZpRFRQ#t1vIqxMD=R?-1HR+eD0)nhG>~GZz_A(*rc}} zK`)-uQXm4MRd(Dm!y;Z2d3pw4NBP!U{0$`A2`qBdH3lA>@NmL;TgA?)rMS?QgOgX~ zYNFu_khb9y@EtyDEg;$81+_wV1GGlr{K@r^uKhg!Q|YW+W)y?H#8>l;6gES02EL|INkLdqJlo$4T4rN}zUo*4T+Go+G; z5Mp9f*2H8tmKl`ngc$qCzVBviGxNKr<S*twEo8fF?;7oE+C+=vnf{7x0yzq4rVrwZq@HMcW=iQ*2>!U z!Pf*oGtvecKH>i4`#|3ox(P5WLmPJrwq&dHD=DS>|K`DhlP@!xHdYY>RZdA2-q#*2 zx2!^*LsEm{qlu@m5~B9GPPzMbN-PdyU5uJI9DMoBJt!cMK_4AW#W1oAb203;2BP(- zn-S#i_U<}uMH|&Yg153;_Xbmo$0C`@MJ=}L258(L&?9=kDuz?K8O=PGvX$FXeK#0p zY8gMpw7wes7-cgo@-)i{yKmtgDd8LksK+)}8&_e))gB(cDekLN6jsl|MB8!LL2`r!n}Watg0 zU4;0g#aZ_x8p|2z0RZE0+ve&wyW(qg=vbmA+G-s-)}Q?`n2V2 zhe+jEH|c~a+x2aRb%&S;)w7@HWp^(ohOj-ECEVc}?7rz&7m+cUDHP<Cr?5?G1xcqm@nE39%SNo18bq z#1I#^(hi*Ejk2jSm@l-a<{uD5W~thRU66@=EF+^Vk$~YxN`tB78;qqXMK=+TQ*_;I zagNPV%^zgHoz7}BX!x)|**Ew3u0a*>PnyEP+-F1}IE{(FdGZ440(@1Gac^DMg`VRb zRGo|J6K2VtOC0<8WqO;*J~-wX7M7UcZIj~3D(z+EM=Hpz6!#&C{Owm?VV>gTIJLE% zGRnl-4t+?!$VxE|95vA_5`pD}^y%I;y7 zYS$ba)BzAf;1lv;Z|Xzi%VsyWh0)bM_%L_aw&%;E%%stN`)AZI$QnZlj#TY6oATSN zG^94@EsaRLSDNM9^Jt!KG6=uY0S5yEp}yH=h)?umqN6UtbiZaWCA*d9O#ekg(Dm%0 z)3=TH?VrReRY$6f7>yvI^gAhWlvJw^iCfEknG#hsl;2aPem;JOFSeZA0Kw+aR?BY}48WT&2+R|TK&DS?z zFo)5O->N9o%vk|iioi0c{(U)v7gS%zhy$C zKvht&97t5B0sP6xCX<|>AG@i1o$GI1K!P36k z#(ugWt32U9sn9HzBxkBrOF zI{hj}HV`GNMBu7I;cCp42-hqo1AQ^j5awaAq5}iy=i;L$0@WTeoj$Zd%{HZ!>`aH8 ziJz99980JE7o;F>KNJn0o%gOU&Y&6y>mC(!>^2iAn5a;g>aVmz2aIPQ8@I$;82hZa zu7v8t3{6Z-gMmU#Jo41{s(K;Tjr=Y2tuej@P|!@{C=6^nunYO`{0>Kad8T&#tVKq= z5G%pxjz--VI$YeR_RIM7@uISx;w1y1I*`x2^k(!UzOovo4+A#-_T5dYBK7#|qE*@5 z{9I@#8WP@Hq|V;NIFPx<2>e@F-}srcknOUy+jlO=f83>Ce04tX4931Uwp!&__uwhi&d0iz zT@O`6Nj_H17n#4MJ%X-Q-OSgJo->E3l=sfxZlT!oBG`ud6)6P&bQkD6?q1O21!N)r zc);G4UzI-xGVce9xkK2KzD$Aw^L3$;)_vq2?IQ6Ikb{$pux$ldv!<&SBD;s}>Ra2G z0I8KouNI)^0MqL4{3b?wRR91a-eH^Z^<75hM~)9e__iH}f+9TlqiXHM8;UC3m;1-D z{DWuE^RU0Gcd-iT&H7MiWJSCG)gdXn(i>O%OY>}-40}r^WnG_^{HoSHd5dPm5^n%Y zZ8tPFC)wYnRtbwjcg&Qr4bASNGjbu6Kw>OT=>5#e9ms?PrB-d&Cq0Fp0hVL}ZZgel z6q@u-64P==&eh`9iiinwecWemEjrwnxgBwLJN|EHwGOS2RwI(n@M~o8NwofPg014G zhAK5&&%15!m&LdI*egy*j9zZNb?>!$l#tVaTO^l)Og7C+&}BUtOK6a~4QWXBFUHI+ zbFJo^vyJpyB0QWOinh$RFV|WAf{jx?0snioFsqzl*@w~=TX1#cY_9+CaA z_3C30N{aff9YyMctqsh+ohZg7Si*L$qngsU0H>B_6e8RFs$|yI*C!IUAI(ttr`zRX z>IjNEo(2C~%=^kWuj%va(W&dL%Ucn|#@rJ#)$2rJBNn#(q)+ap5bofC-b#P@eY>BZ zd^VokTbN_M5a9J>-@Zp7Wxiqc8eDwOj)?H@<*}IK5sCDk2{w$9o?L4L%w^_TEgW$X z8ed&4n%)#}ob*$qM86XSWeUVBV;f3@5=g&6`O>2)$ja|lYM35Zn z!ZXnEaX||Ma%EEXeZ&Z5i4tgsawla5()4`(SO`R?->vfa3q;QGtsKYuc_VczEf=>v z{PAW(Q%NVFek#7n8k9wCDc2N9BBaLFBt6HwKdED4O37pDSs`+UX_Lz2M3i>&&v+^6 zRHqw}L^!J8GH_Sn3-OGDJYuy?Ijya9D!Me%m)?1UzjtEs#_F&dSLJbE>eu;MR$^uY zM2n=WtM^>1D;yMTwwOIBOVGqDCScqr4aWzv4{bny)DVM8@Xcy1<&}>yQVoSIiRW4> z*ezdrd@DlMW!qD*^Bd8%X($(_j-+&iFiw=y)9R32pUO*r@F|$!MQ#_XFIesoQ&v`% zf^B(ZbwAX4!JzAT8l?I&xSS7Xm^UiFNuYQui*#`KV;ardJOQay@sjk$8ygP~Q;D26 z#>BFZI8hhuCRKKDA`{lZ<1B2Y(@v&(&iMGwP{vf0y9W{`>UPQoczEu!%WzD`E%3uE&-&a@)G@6Kjep|dydM(bC_T_Qv0Qwt z`I@Iza?=+)wYFD2iz;thBOIXm{2s?XE4V}N=<=v;1A_)(EJ5T+bHzDCvhXfkZS(jG zj%MGm&AiFi!HLZ~`(xChhr^q;qPIQdCw6n`RdO=~lCS$1upJku8x{3~IGNB3dENoj!E~lj z)vc>)`1MzT*%Oq9BBAzLs3{eqP^FeoKw>rOS4mN#o?7s-i3paeNy&2TPqm8KR@5av zhI0EoJ6mhr!b0!C+r&KWbXBzs2bzo)*K2z}mt*I}8~KU&g>U$E=U;FT@>)BOy{=%q z6|nuWE$n;Y6Pwso(Cc`ocXLy_Elz}wa5~!%y+ z{^sFK&0(ri$>4RDz4E!6?yH9gOHpc$vrCSCgfHiev76oquC>eko`EC@Ws!|`@(664 z4{cc^LrZ{o3Z$s}wp2w*CWfjK0v^uT;UY*6P(Vy(&6JU6*xP1#HGk0Bz~pCgJ?Ig~ zseWzG7R1X|U+<$gB3WA4kyOhfr)yP(0_5i$I$0>xCDJKp^I#IsyS77B_~A<1rP&Yc z-;yI4;I2!4U;`j6d1TK{`2;`vkVZ*UN4yQcayk?@_3|4Z<*h^t=<~JQx|G?jCdtTGE81O(U)sR{i`(E&j|8T@D| zC*+yM00>w1Zf_Br|O|ANShs!NKW~*;}z`4c~+Qoe#h81W@ zExq8mi}X9{t8N5N(_l#dJm<)kC$QZ`~D^NXKC@Om%0Kk@Za_6bFvrx4x))q z!9v;=o?iqg1?oxj-x}2Qr-oUJ?T&X~kYM1T8F84Lm5ONTBI_`eFt&ez-={%=Y!(90 zm17%QZo4iSKDxigVo{-?sHnK&IH@70ZMIGu`ux$S-(y}Gnlj%fOx(*oVAGTa!o}41 z8K$l`m(bNnka6bhOgsMVKXKCCGS31fdy>5pf!>rBtS_B=9hCb*n6cuZ6#*rR(`OV!K;+eR;FK(QgaCY7qf0meR9DU0(i`ev-*i%L?)_g{U~FUS3l^>#{x#4<>IZA=>4B3=V>? zNwf=eHQE(XCI@S|iph=-O_vEq6#4ICjdtM#4^$B9bpW732~ zFyIh^Dpgt);u#uMk`+G>brLh0!12cXO+!>0WIf3=Q@}V<6jw>P6ig_~t%gE;c_Chu z#U0m8Us^ChN6j&MVM4*Rs^UOeyJ>97_ifM_qPpfr=uasB>L`u*^&Kb6G!IIB2j7k! z5?A-j!Qd=AEPN?T=c={(Q?M$U?-MB3*qn|zkf~EXzYr5oK^h6IL4;{Te}e;Lel^da zM_E7e_f8MB8ClfDCqW@*$3nUT%jI_=7<)H?-gY0WOI8#=?)nc_Oo}teIpSN=?z{$( zo@h`i_&^@Wf0jW^o(*|daAfes3bA%X=&91&w{Ov)2B6Er`b0qxymw(ce+jaK920cd za||K?|7>mCBPHK{u&~9*LZr+oz`SX4%Ipo{#Csq`wl4sJVr$*bU!9j*-kh?7Kstzp zKPb{_=CoKptm)%Pu*0r1N}UUkK#zhF=hSoGGQNNb3-k~nemQVcswxnWGNnSce;SaKASSb*Kwpp z;_MiURy{93o~bxO0+Rn`C8dKz1K~?NDn=s(!xTUtFyD!?e{YVTZ}KvCE9n2=^m@Bj zfTmi>!t5swIRL>0rLYTnD4EX%hc0paWVH*#sKp6*r|(Le8%qokOgSTGs$$a?`cQE-!Xi5R)Yn_gm7 zI{GsIz74+p;nw$v-wW$grWrf#4|FlOwpDRSA~)T>|7v_h}ni3yxPt(;#3Dl;iZ9$=3=sqA00u3PLt;YKE6=d>Bnje zRO6;Grw_)w0tr1Vqs)19!sha2>9uvxwarZ>5knL9Feb~L1(FsdUj1Jad4(ZaeElFx zm$m{E;X;6rlZ;P}`gkfGRvDY!ww|I+a%WtsjZZ=+tVN7ZecY77I%?lW+xF`#R5N}> zT<^({0CFXApBEZyO2`cwo+Y+}ZOSK<|GuSKT0ZCHi(SB^Op5l(3_{ zEX)pdX+IgyR}O3L4RjnHI5JkOzJ7>3rpz~Mbt$&6Js88Vk=VO1vkD8V;;7;Rng~Hl}J*aF1{i#zwg}yZ)JIY6lGo)2Ce(~2d9Dq#po;^z0&46(R3lecrhm8 zNUz^bH*SG>_t@Pl-)@FvJE{M2@?9{(W938?Mz{*Vzjiq&^adkIyNs##rx-(`K1dj@ zn!C4x|F{F{es`|ePKxkK$_c6bV2A>BI++hcN9X`xWEbamAhp{{#Ad2rA+{r9+d3gc za+bV=9wglA!8Qy|ZgU2S1oFQq&0m$xM5}M44pVZ?U%e31L=hRx@NlBy(yz|8RibLc z1g(oe(?F)2u6Og7OeoDpJ|@MkwpU>!`v+oQEsDJvok5b%cnhdF@#O}VwMsUPfN>-P z(RC}n4v206ST}j?_d*6ea1QJ7D1tS{$yCS)ieVl}cSb8EDnsMn!Mv!cIO|D~tk2)u z+NeEbjAqy%UImf+v!R8_t=UF7;M7R1!E8LtU`eEM+XKbr6SqlM_J%tGKj$dq{?>-r zB`?*(i+gZihrvzoX~d_FI{5cp@I3a51_FwM!Pb+GzaI+LRALoDMbxdy5a?65Xq)5X zSMS=wyRn52{ zy$a}9e7E&ipo2rPpxKkyr8Oku-2;eMxyliIMr{UM=6K>A&T_=L{`_B^P^&Tltjm8B zz8@eBwR=Gg6krl8zN)7B#(ZF5NF&zb&OK9=`YBQ;U@{3GxW%@=jrT8CrX^2SBa|2| zZRl;&;b_@U%I_hrKeMa}Iy>b5B=;~vjDYXQHwV(Tq zY5fn}fX0!arR4q+cy@JiXe=jW+zJRO0Hn`Fm4&M;32U_#@4CGg0B=j4DW8amxcn`@LOY;ohMHCoK!4-WCAy#y z#*u26saM_lYYSKubZs2V(}OQ&)j!nh`+iNuzhVR=tiIc=FQtL#od`W;(W=G1j6)eS zYzv56)*}^TTpj6PvL3;K#QaukCn#Td2g8oG|0WFiy9M^42iYuJqDW;XDI`A39@jmA zzl?WUqRiCxZq-Enp!upLv7UTBv8PoN66hE_QsxXflRYc46AB{2$7}q1PLovm3G`(?QM=BJRd&gO4Ru@~=4(G8&vMZ3hB@A=yvJ#7atZ>0cqsj&AVO{Tjyng~lU+!xU3|OcabDp2 zEW`o@;3acFpD0k)MlJ3m;?BRE<{xx+5!lLdQI500dCxhxHSZC=iq?K7NkjQNVS9$N z8GeOIU>*UU2)SlK3vrBi5%JA5spy$;n~F2Cec#-f(`SbF4sY+D1BgLfd0eN~={)J_ zo_jD5!yD)wnBLL)s$**MLC%y?=lp6sz$2pU()~3J@Ad7KIa~QnS$d3Xy{vKLl)rFs6YT<&Cc^IYL{fI`4!R1s#65PwRGu|FOva_{mxvK9rlqL> zIZN_#Xry>CM(1zAJa=T>fu8RIjVKQ0GAF6PR`}a8WfQr2mkzRP#>5m*MC4p@XL-)! zYl|PEY6yK^!)f-~o82%WFAu$T-#$9rg8L5tqsdp&?d~V0(1(5t?00`D0>MogHb93j zs2zZg>$A;fo;&l}ez0m7A~URvMebdP7&AVJHr1f-aKH>2$twmmm>-+jBf?5-laLU z9U_-qR0khRfKPoZ6k0M@_hWOmo9;}(Fwe%^T>u-rHGU%T9fi{Xrw5LGq1`{WA`N{0 z15krKRER;rEv=;WBQa_EfvRxXUojC_iXUjThCSL%p?_Re2@*FZ^DKT&Brjj?_tAoy zJ)~t-)HrsR-rvaeGNL1JrM7L|F@v<#zr#%j)P62|y_A>6J)w?eV^Ew`Brv1<0_b-}?CRsb z8@C@WteO@GwX{d>STW8(Qu>U^UzX8S|3}hb9uz^r*7W-G{52a<+~~d$lF)~{=Kc_u z?=NUzGdXd)cqc+EP=7jUY*th3XDmbuh{E53wRCNKa(MTRzXU`}(HbYRaZ*F!prAk( z1muZE_dj@F0H>ZNl%Z=LO)07ulV`_W=#J}Y7btdA1<8FOsWn=h_-u%@VhTc}neE1v zjoj=(LJ8YXS#R1XVAhV%yvl>fi+@~Y16CFS$@B*l7tKF;5k#@;E*LgOa_7m{Pqc z`$4s=@Ws}K1NR1xy*JY|jCP_W?V{hAiv2D5Ps_C2N&$^{j$t=!xaU-kU!9-r6O(^u zE+%c;8dY7bj#(!vS@(BRMPr1+qhuX(V~pL0j^8WsZ?o8JG?H&rFCf>%M8@a`%oKEV z^zp1IZ}b>q{5uKS+575anEAB9W*h70q;3a<=wb&H<!g5wKKA36kk_JbA zhP6BFZh|l*8DW$@u^`)8rFNjZ}19piMm3I& zoD&pon4FRq5Zir2s|t`m)<;%wk4Zp=F|ik&7C2YJATx!VdH4Q#WU^GzR<_4ig?$X` zCx;uaw_O*`=$JI`*tOSS^4%(YmHp$bB~u_%CO|g!PS~N4YsS?Ykn`0M4tIu zi3WOnD^Z)KL{q&7*CVUPxA=v{;DlZ4bSy0$21>iNsa1zNqp602@R$e$sk1U&zeIA5 zhQ~R`W^LzTIk}%R#SodTByXAcT<}NE_RF4;I+toW&Ec-kp0k=E%s8iPz!7u%kgV9* zg<E9)@XF5k`h|+ury8C<|I~s1nS8>Eq81E5iO`Aj7|RHj z<_dOCBve(;{12@xCPR>wtmAekJinNS`81sDkUMK0Q6NE5miAs4aMKa<41dBxSw}=ecRIMn z+t8T5guN?7p??nNEVBKeHdlcGTVdYMctLGKJomR(4pRSKO(^YnMk3mY79uvI6 z-Pyu7sXUprY1YHz#b?+B2J6;qgrIZq9UnUav@KaY+fF2Q&LK*OHDb^6H59+Ljst(( z*5P54^t$ihTe(>u+j3F->!A4v%xshD!`xShs|kDM+AmWTy3Q?F-fC0fxhF3>S`?u3 zOe+^i4oc)U!v;mN^!p2CbZeHa=jaP!blH!p*oQeNrMJy_r{{&*lprNJpA3-n3?fx= zU-Y$SZ*e15G+MN;6`v$dV?1>_shXYqt4{YTY75r~Z#_#Q+_^HPW4?4QN=~}12k6Kx zzTogUzRH2L3OOfZWNELZXmJkag{;Bt6r_KC5a&U^fbCwY` zT?mI0KaYU_UEcm|dg>}De5>6>&tJC$a4x7$ENl4 zTa;zN%6uHV-afuRawNMW+v4F~!)pw?A05!V6+N)193!2epg@psc$U!oauYTAhr(ol z-8OvED!O8|)n6wa5%nb@WQ!6&xwlCfGqtHzTGW;tRlGN5zxqfm^g{9b_zH5j8}|k4 z(hFzpf*i6|?yuP;dp)|aJk>V-T)I`>#!Gt)s!zFwb#E;#jKuF4<}(L%vp!IMY$Q!C zN{8n(ywiW_F&J)ex$qO*rNeV_|CoA(I#=95wW{6rOQyT(JY}_xTXa`4KkZlSaTbe- zd7E6Raut7*`P9b5L!#DflVd2iDU#SDne%3qk~(W9yF#8{^SiI&*QzFfz3jO_wt58f zj%{!)n$D}qJvVp!-R~T3nrRkzs20^w&px)C)+6|IV#cX|{1N}q-Pfr8%1R(3Eo5Y| z*aFRZ8`q#(T5Y{rmmVf!At0!KbX4L((Uj0;=Np{!y^6Hpn|~=9q2pxrBsVaQuc^*E>W#mK+dDg+!w^@bmNWFUcZN~V)i2kc zJbLlYi%q;g-BN83&B4!k52}Ss78x^1?RhS$BuA81kjc!23i~7w8=w}NT3iQVE(_T) ziIsU@i+Ei_Hy>0F*uqGy-l+}g5Lwj#92z%pVHjn9m^jUV8|<2Z#$*tDa~e92;alTd zN*yMTJqyXOYaaWm>o}=x+g!NHR^Qnv?Yy$~sc6(j+P3eYs=j^_+Ddqoo9d@p?mc^Y z)i&P0$ko$Wm1$UC+211`)rPd=TQY?L;c9+@|JIB4*VLN6g_mw`N-QE{N+D%+tLTu$ z-KC5*`CI1f)5_(zZQKjyW&I16tQ$1)3T7%)0*yqBOz*K`0j({Sse?^1WIkgSg!M~W z^iXqr@VpaGYKcwOcHO=qMp&m>BsXUj-m!-gs_af!ziLh%RFC9+>0z!~x638im{LtP zHzwv554+y_T|4jFY6xK*xYi(t{roWyvGh5#dONN-tss)GzX-B4ATBt}$_Ply28fl+ zTiL#R&;l*Itjr7f!o;D;C(t*uGWF;f<}I=%;+}4&k&$VqVKd+rTChG~nhEaRH`_uJ2@;6)0G)ku-%<7i&nL}wrVaVK3%q+7DbWK}<&gkNEk}ahs|BR% z9p}vCcX9CPe-zQF)VpAscTGIyy-yB)qtXV*U*8P3O~i@(wak(bY77vWKqj z+5~BADzn<^n}T0jLfK?-^=-k~ z6HEV%E}0xQ)?!B&i*3%A*JH;OJnoA!S*u8-Y;U2ieuk~_ZS-#6o@7l9vH2~J_sxIa zYX(x?LF|ElF2K*0F4_%;#IA97;m;HyN^Uiv-oK*=`p>U;rCLW0MshN`{Z+;J7%xzW zvPnMrtlO8WOOHRsTr4+V%0JNUi;xnkxvp0|T;hAG(A_Pz!9nZ&pzqSNzbaLVwAQZd z8+I&*zAc}v$n6vzd-~Mp`(peS82_H*i9QJT;wz=|%lp=5dG&zY*sZFwXyH-W7~k?Y-8%u!V`DAE15n9`3Mct$I1 z;T|6!o|iaa*jjfJjnGXaKf&E;BoBDJe7t~;vEA5Kr}psBwlR{m=l(X_%immgMO1dw zykEv&HLp3mHRE*CD8KaP;}bj{1jj&yiPh>jWmB(MLc6@=7Ub}3Nb+TL3+H?NiYGUW ziJ|>czj1$mOhXh%+41+9YS-Nx4=|G=lOk-^SxU6Tr!T%&&HNz6znEE6p|)DG$TJciO=ahuvsr}+-yF7^U^NB)xsxvKYy(9PJT|kl5r>aj=11~ z6PBQv6SBCt<)%Ag_U*G6`P?fd;*rU1vFD)v236}WW=2R#LPx{7fl(JE7D%Xyw`*!e~x)5T6&`#;rx{F6jka}{= z1lb;R!nWe3=bV*x9y+1EM)I_?qSpwfqHGJ``fnyEuQ)Ch-qXLO3^zhDPbT~$1@U7| zn@E6UaF_Mmvs^l3@^oV!q~hS7uj4Wap&8Y?S_Oy=nWW6fA-BOwtL5 zKkHCej4t2x7C~Lc>mGesamF=EsA#KUM*px_;O2Wvf9;bo*K|)oNChW^DOazc?dPEhCdN`T5}OF<(*C66U6^*sc0#^^Wcpt`P%Df zfTOc5I#Opj`q6|&rzcORxE%F-MfrEF~S#0+D^m5+ATNXOH&D%M;$Bs|?y{`nF z>Xg8X$KmNX>=7yzT;}`3V|Uu;5LDfVI(A<;t*V=U)=7$T#9&U3gyb0ec8Jip}5h3m{vdR$Vm5BZfiAU|nlzw8lMk~Hg|Jow%WGw}W$+(-e%oe|xI5+j{~<_aGD zhz~50=*e~3k~}A9F==GA zQes(Fgz;XGPi3h`UkyO^AEMJ7?l~p0q3O3R58&=ZVIDsVQMZ3zS$#pghUh?NH_fX- zheN#)Zv%U!81ZsvPjI*OBr>@t-F&d6Gnf4=v(EnN%b!3W!T{PqMuQWeK8F070uJ}SFK-U={J7|Ji{z-TM1BbI>1Vb zFu5Ue|FKVi(mH4xqWYl<1K%iao`E)8^m88+l)~fthT&!ETOQ!c3n2xclV9OHW65&% z7?jnbGbPY;9&~>`@Y3YEpU6!*f?=FS+xT5p3)cU28E8*ntpyfNTuT3{%(B#I>s%ukwJY-!m!hK*um* zsgtfR-Jl1a$LWp4u@U}jg&wHq05j(6_NJp!$J7N9ygH74@?}9!B_HhO8K{<_>Uco3 zuECiiP{`=)%WDMC8iC4ecVNJ1j#1wh{DA6QMV1ul1MxO+qW-4G{QBu2Aj!L#_uCIb} z%j)V@ssH|7nsX6#?3iJzM$?pU#QluIr7CsdU>;dGu4X(^Rb%@4wM zJKxGWj^E{C?gT$D#95^ecn^zE4DY*t#~nWoco*ISY;S183ltfH)Vle6}6 z9uJu*sS7P$JqI(-P+u8(c;iio_jOt)$=9M96A$mi0ZHbNqjJ6c=y3o0V`txG`XT2+di zBLB+{Csw}yb=$w+T74$4{f8^yaximPsEka2dNN#`^EfWx))QXo&jWpKDk#wRhNm8U znP5~GKWD1y#QuXuo4iKIoE^PdcPE5KXG<#~W<{|NNDJWR{TmMc=VDV6Xac?s?{Gu! zTB0K4WVv@8!?Xxr$8+w*^Ouman^3h45TZ5XQ{Zp42q~W(yZoq%OlYNy{4G-?pkHNN zgV)_m)VMe9eJ7v=#~J&0t-x*=|2#<~>2$m?vFYkGukx{K^2Efu?{tBmw*JSvPf-JI zo04-OSh#(0S<$N1&G5=gY-{*LdEP@J=955!QyrePa-tNaH-Yui)1GI{I6Urcmgf7> z1YTFMY~b~zeydh@@=FR1URD(q1nG2qxpsPxhw|A>^*jp9x;h6)mi%kTZg`MY5u%eKp>Hlg83UYuF?7sGHOB3ukW-(~qGj%i zQr!@*5~Q{uZ_#g%rvl$V4D9!uopZ`lZfGU(Zv0l?`nLfF#>43Z;Qmx+a<3-drAvkD?@B^y0n*l&P_@^`_q#54gAOJKHZ6h|-%60H{dgY-;0xq}1s| zPyUzJpA%eTC!*k@jf+#59ZSSg1)Le-Qi+Rn!o8n2{*CqU``F)1FM&S8c!To6bymj@ zcJX4c$0<=__a^sN#Nb6_H0s#r!cc7W)!TfZX7NkVyXW$pI0$kX&T>Ln`mf@XR;&yC zQcIm|!`{k07Vd;210`{IhwkyQBeZk9uU(#fCt6kF6mIl%3kUk?;%Qt=z!CA^2pNkb3p#KZH*5{XdNx2^QSq z*Ot9aGv2YQ39fG+Gp_^#FRHB~<2_{kj;~9XW>(Ct`K?3J-sU)Jlsc+%BDS4-F22xr zuyC>BV#Pae2~Pu~n1K2lMXToA8x0y)EZmrvM1D8~zOp3VY8Y7adK2)~g1mpHCVqN9 zr|g67@7+NYO10A4UJ7-^BCS7HeHfc@gvPxd8TqoS>Uq1U@%HoMSohfaNtRmvg&CW5 z$?W*DPYgTbO;4;>0GE{&Xr|7p$a?OeXYKYZcu$E27bpMmhQxPDa(*Y#+x(3-DpvjG z;*)o0!`79e(VqJEw-a^`XEe6r>2MOIXysJ`o#ukgy@oE%V&&QYHotU13`b7AsG=^E zDJCechqz5-y%{f!(T^#&RS_uB!~D5`K_qW?%g42gW)UPHpXoq9hjqSF+pSo6t!$cirA^1R@Ve*Af_;yovm6O8iWX67c-edCXJR$?w@nEg#;{N$LB!P%`ODPWj7PVK zh=5*H@0-5Oh`h?5y+>1@T#o6|aabLw3GY?)9c&Y4KQQ?UO_SC@8sHz_TZa-dhp zJi1SN#=CLq5#iST?X(4!VPRg;+tmq}#oY_r+-t?(ZfCnruT;nOzl|8Uy?jB-P#?R= zvEBLSda;l4pNEcj4sbSrq{X-UKOVfBDnWpolc#Eog%+-XmI zwfKLY`@pkMTiAVAXBbkjuCeb}>`B7?8H!fF$eHk=SzX`vcka(gbs-LA9O4+p119OJ zjYnNZjN^JdRY`mFfzx9(|PL=7cY| zCKAWq!Ob(AJb7!gJ5jf?ak}7rz1taO-x9q) z)KR{{VvF>yEY{aic%_S8BTihz<5nKyIkyk>>s^X`Lw(U_YS|Pg(NSR62AJfnC=G`2 zgbQWH3LaVE$m3<)zHXx68gos-D*;@W|KaPR0Io~56ud&i6KL0N3gJlF?>!R0^|#ME zDccI`CO(f%=F%C)*^!*{v)tT|7unY7P1`dphODVx-(uS>*(>N4T~AGb@kq}fYyJQW zd!nQn+EA$4`=v^?_riwv8lkQ}nisMj;eRKC%X;a(`=yAox;by309ACm_0%kUw9pHy zx3xnjA(R@^(9Q3hzYvBO1LODEP0H=ZRdKjJnt~Xtk!;!S#d&Gk4Z=c^(wB0KV z1gWRmS9)qJR*0reHcQXGu2j8bvbDb1%Re_8S^gkoAlJCkWQ*V1_?<^YF|xQ?*k1KK zUlrnfmhP^t&}tZZECONHxVUlX|F}mF*k25~zh}pLvHS8TbC*{;J**p!p8-29@f^

#3azu``?;$A$5RNBI|NJ-&M!&DwvdFzVlAG81;=jpYd-(* zA5QfT_xf`L0~0q{c#04q7-8^VarL)9wZ4%eu#3ulWPJFSSN`vx3f}cnRakmc^1apM z84SV@6R`4?#qDY@c7>ds8#M$Yk`yO+xN_w_=};oWZYXDF<;3z2Dw)d}1&lmJinWyX z#=FKmc}n~%D2vqk{M^OurWeqFPSa68W!Iu*6AtnpMHsiR3%4kNhh@Erii@u-lzYdK zw!<9nmG&K#Z|9fCAx6+Eb1?`x-kg~1+)|wgKBJoL+4nNNPxL>IeC9?k-Nr|O8bb{Rga#c8r;Jy zo*R<}B^)V5!b7!#o}N;kGwe2N@hlC64&F_wV#SR)2DwXp=1$brZlEN>v4*20E;fxF zbB=l#Nl_mPaMIc-Z63o_)fz#B%x#dQE!U+$tFaIR>czXoH^aWak4;r!laAmpbfw`I zac1f%Qjj_FnQ4aJL2_D+telxsI5I9%!wRW-p;A*0UV6n#hLSw;edc67U3_aH4qs=R zJ|*kcewnLba}p&<*lew}_)Pfzmp4W>2`W^hNMs6iaZJN|=#O{{*PI>eR)#DoEy-Nh zuXnAQ$EYt{)>ASwHL;!x7%8v0TMCmeT~{8eUmSz*!%wC0YI94UIo~(7E!>-b7w`|g zzjn4!;s)Fa9+J#ISHrw|8uYNaJK0)v)_A1W%5M(wV!&hdX~$Jao1<td- z`J9?zDp>xZ;!Yv+{>3p3QL@^-IFH zk15#AX}Nt#v9cbH3TcvW#i&tc@sTHakq>u{^xQBO8f+OSxHRz&&DN2yu%JEY$2Z{E zc7-!Xr8oWC`bQeGOS&}KV=nuSdzSc&PMA(6+w3cBd@n;(e%CU1^Pj%f=< z#G5PKtxPVn&^L4133#%krZv?U))bc*NM)SHqfz^KWa@X65?y14Kita?#L|=dq9?~* z^}5?o^LJVIJbPpFDLkRW37xzXa3%eYsJi8s#|Ncqc8*C|XI>z!97^!1?(Lw~tA{5r z3fdxBr!uA_%clH?7Hc5<(k5Qhkbb19)qqUKou>ykJU-Y7N8OIks&}d6io{SFwNo44 z`I7jXxTV9Nl?GDyR!c62rFus?PoU?=8i*y4-?jodDK=nYPW<48_jzc~8fNogf%X+8 z&rs-1+s2)_lcTB&*EFRkQR`5*g^gvm0WC;uVxQA;E;K7Q4r`;!fAI8tPxbb=_3Eef zJJ5d1h--o${(5;>wRQQ!qk7_l(ND)-G-wA6Rr$ z6&|cs!mS^49;@9PxAh%mb(iT9-@`;DA~iha`E&6%BgcUBH|%w(c@(>S169AOjn z{JF>QB*&;=T9r1sQq(h+ziE$E>r(N!r?8N*I`pj9-1!7A!aiS{=|dRYPKNLUQz4kn z@kg!(pFf?Ty=(2^(_txu7v`d(fOi6`%bwP5bl~EQRwKws<q+(q%#*y&t*Dm0N+*@6*l>DLN@!(c6c^vMNdD05y>`DWH}C7+Fd5FI zm|!9Sf6^kZ{@wQC^ENr>=l(6o%RJo@67$V%BA+xe1NqUcPCB=ypX@2`bDLk!Oe5<~ z`F(Bv1h1Cm7Z>Z^iR)P-$y1$G=nwd-Md2bAA4+`ADvYVvSkcznz5Y}?S8mXjw9vzU ztqjvmZ}lX(>OMqSnDk;rfAmxG3F^>>nmxYMrRbdPYk8F#zf^h!a%z1=@A%5+NW=*g z-s{=8q^bz*POSzWh-%m+#clZ3UEsIfScb&3iHX?^_C>br;!u@G=?yfz2yJz8UQM2I zY?hp8kw#s(Q0-s2IkQJlSD`64KcJU294Uv7_(V@87%XBk1}>a+g(^6IJgeX`d@g@v z-3Xj-rM29%wTVTu%^4Q6)}PPiv8d06n&C=H`!@y7xMIA^W*j#ElEm_+|n4&Y&YWF zd#a{p=WZJzXD4s@3mn++&RoR%Ls!MFXk-lz-RK_QwfgyjL|65LK*`Sq{_+N$hyvWH zEe1;!kvme7BrgAcct?&qmoKb$WCJc)N%Wq++kNh`hUL}=R_o1ZTqDo~A73kIjr49- z0S3`El_AO4H1FCO+)n@UkoW2NQ%Qd7aqF`xt`*5=okuL0&KEcu%^BEl4VRlbV~q`S zeaz#~K9FR}Dw4_@ilR5f3@iQJ^Fjk+}SX3v269lkPIf}_E(2LRGqw?uls%1 zKVVDyS@qQL&sVONJGt+qth0NWefGK9&rRO&rI9rx*f_l>bC6w7k%e9eq+!z z`tK=q>+zAFMSf>HX8mcF_F*f}*;Vm~)#y`;;m@LdgY{TQe~xrO+K7ec zPMrVqt#kR)2k%OsF?MZKfVQ_L%4==3Q~Nx3>L+ zPmz}&+s{8X$0A1W$G82}b4z=9!=)dq%}PG{e(FEJ%?JMY3D17@^xN&csm#CSp6P;0 z_g=%xCnOK%-``ob>CCL6#osR!?62PTTlUXgbwf}ywO9B5oSVP=9_(+u^!4l4W!LQG zCuAswAIy6urM}H9cD?Z9)duaoxiKr+*7h0(OC%pH`yZQp`0BA8nmvWduT!lacN!*N z?z#4>_!T(WCgzPi2NcrD~w{lSxFdL`D;(#dKoA|g(2D?B(ub4{VZwc91f z*dD9-Y$~|+QvK4G;NHYwpeghH6DM7aeZK4d%O3fuMQ^9;dNTdLIq8`Vo_>vEgUB}> zg<>uogL|NX7|^(8^rbn7Yt+#Pj~aD=3n9)k87;@?X2ScQ3emuU_|2+kE3x&zAYvz) zfIYrZr=W%5Pz#lSnDFrFYl{n!52{3u^Aj5!KDO~n8`W^}VJ_oAq}7{3KkD5||C&sA S6*r#&2s~Z=T-G@yGyworh@(#c diff --git a/Docs/images/append_n_bytes_with_data.png b/Docs/images/append_n_bytes_with_data.png deleted file mode 100644 index 2c0e2a6b09b5b2521e8660cce7dd94358cc8a26b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57468 zcmeFXWmH_*nlOxpU?Buc@IZhBceex&8r&tgyL%uIJh;2NySo;JySo=q6ovEBeeZPl z+)3tJ>-#^g@1qKENT|!(~9tH*x3IhYj`uy3`P6a0x84L`r zgQ<{^oP>}Nshpj)k*S3t42m{)tsoGW1m2o{wwaFRwx7vvh`to^5r4lkSinGugGE(vkPCyH*Vu0 z-F17m&+U?=UGw#gulNkh z2WGBt*T+CrwTFQ|zp4P}U5Rzd!0zc}88ryodFvqFDR22A8PfRZ#{e{7~ukZNM8GpzI<^f_?lE90gO`&ZroF5Q=yiP%KgFJBLrivdUlysB-2Yu>fDl%z1jw4a})+mz2gjn)V=5&=Qr6H2BpqX_5Q_dnkEeC&}BM&3ZldUFQD6r3PZLgqzw zCT^93AWvi(;2`ph6zk{yz^5%k1FZA6c4&=0cfp@BRlktE$BFqcgpL!s5Xc?G9a1FZ zm=W*=T;Rxx5Acl>G|#jgGjO2gCh~mdiM||8{E;Dp!_>s|%4Ewl)O5+T%XGp7#k6c< zDf>;PTF!hQqpm;G!E1t021?}Uu*M&zy=Y%?85dPWOP(vE9{xb@Bksc0H?PE~WT-H& zsi}dhF{^Q^`B+m}(_6z~;%;JW+PGaj@Rs5ASH(V-f>YG#sEflQ}S}e=Ymyz7iS{Yl3Td6#mJ>Po5-;>^>zz6vD=ynJi zaSq50*(B?I(@Tx)c;9c*{kqR3>Wq3*zpq}(gz{B1W;DYjW*({(G;s&n<{N3JkKkKE zO3in??`Rpb6GRdK34VzziRCO9jOA5~mG7%KtKU_{R4o}M>V2<{QU$0Asa2~Ts`abY z&$-N9%-zk&R7_WeRajQoR~}Z~RvK5#Rz_4>+n(CLw)MB!vRm3n*b%k~wqLNNv`O3a z7-;P39m(w!Ssz*}+I1U6-^AUm+g<7R^lgrCPYsOk_os^5MFV=K;b<#sYpv+6c&xa$ zNO~afTegw5d9*pTIp5LVx!q;n_1ZH=9M^B0agNT4@wcr z4eAc66LJ~K8L}GkF&2}_=0rw>qeRSvwSR1g zI0|PA(}<)8XZ9%ee(D(wMi1)liS2>!mFz{L(0w)Z>fbsMshhdCm`f zg)W8og=(hCrjq-t`x+A@2L1+1hIWQchF(L|g8@U@F{x4dQ7rM2(dMzYv<&pJkqoik zMLsHw%Hm&4zFg(J&)my*k+GEz$}q@vkSdhi53CBdtFbFRj|%=7T>m+7$e+5psPsT$ znwTvosZBk2fvDE{VCbOo0CGUWmc#mqwalz#8hiX=vZa8loFYSHrf4i_d}sD@hJH3} z{O!R{M{36%2Si6tM}|ZCgP?uHL#@f%42EKo($$=Hy$maxj*RY?RwiE)^f+~U47Lmu zzg|qJc5rqy^tnt64;rLP1b >SCRB=nCx*{i4~tKG96zO!?9y{KD7 z%(LI3{{z*Re9nA&V>e@rU9(+uJfV2r_%|wVX5q_ZmpGTdEvYY!pNyWwFV8|>AAgvu zUd!ByJYi~6F|giP=}${Z%S>}_-D@4tMqd%P#sd|vtPZkoeLioBNR&+kQuq4E3#(mD zLjX{%^U3pJu*SvgIS}kkkbz^vt@}Zas)EsmVt};Z-JU{)>FM=a*vsUfML$#J;>Vg8 zlNdo2i|bPBZ`U!%T*zOM2ar>cO_CdDO=Y8GDQDAVG4u;Ex$CQcO)NxBZ{r+q$hNIM zTR6)-OGX|=Mh^-NS`YG+*pQ%#!i^4#W;hl)%04<=kX`aNc|3w`g~vh4^y5crmPb$s z&!Npp%F*WX=fk!u5Rhi4V>lkxi|;NKa|zEOP82Y+tD#J#=i~O=Na(8s_ha_^g=3`1 zaoXML@+UMSwGZF z@9%g#+=bpTAZjBl!Z1Q3D5VbtyYuo zIsm8BcDd4By^47YJgT~KvKpfl)m&g5-#&CDhm7JiGZbnUwT-xPfzKm~PKy$0E>(yX zixpLLw%d}l;ERKb)tYu}E%%z%A#v)33&GqoO(O(rqDx`U9Ie*jvl>&*Yz6F7>?j;@ zY?w*RNtru2JJTAz^+xJT>H*ftt0!jDCYEN=R>e(1EedY&+g6u+N3G;gr-kUnSspST zWo~%x-R732yp!e?@0*U3&JLlFK)#4jl4a1$p%rNSpb@Nke|D@ry`mu-lgS#Zj>9BI$Hveo8IU*=gVs)?{_$l4f zjrh^Sof?98F4D)^?XWI+5+7UMqdg6H4_r!ROF2%qPe@M6A7N+@cfI#qA0W6(?hQCt6OM8#~L3^NHfgZ1#hnlPFuT&PsR8fS|53Sff3LFXT z0x;>tFdfaXg0JCVB%wgJYXL+VEsu@@cVlsU^?=mx?qoebO}40}Ub%hS!7;*Z_7&QY zaKOE&MB5I2BGgi933wx|Z%lmRb^g{GQ72 z&xArTyY>Rl0tSorHLBl$B|>0_1C^ai2rSALwQGy(+7E1&D@XV9?ENJD%(FGJ-MiD= zB9h$?c@J9-S~Uhz`8{Kd+pO=}u0RMA&nlmx`iuKhf8X~{7U2}R5up%H4{jt}B<6VY z_yIGzC%vQ!=q9i&xX~FJlQnfNgk!pkfk!gPpOn@HQk}AW#5#F1ljuejD-&d7Ys|7e zw)6GeM3!Z%8t)}4MKE?q?da=R)mZM>V=hT9JUjk6-deK!s*O*Ry(^OC^xlo16abz| zd7_U=lMtVUo~BI>6l>*~SyoooI`&!)ffh(Z?&GD+q3YsRYGHHvNvoC4i7M#Zs>h>acO_ zv1?n-cuFo;EmB%}->h7dL-V2GN28 zaVGc56g|(O@ZE|H-l6Hv`&gB4z>vpxm0xrBszKYS*oI*~8f0q*Vgj<3 zV}r2ml4PH4*H|aE`k#C3#cq^))StQ^DBEALhzW6zcww_u8@ys<4iTSpGW3W+MC zs0R_uKi+h>q0r*E|DZ>Ae(iX*8_6IRKan4SPU7v7MUhPjUK&hMFjYgI*W-e1gmvxA z&jv@MzQ8lWO{J&jQ&5xFa?38+KT5UN+D(s%P-!XCZ2!^JRI&T(e#a{SbkJBJBEmMZFgJ zk+t#l>jv2?VF{TJ&rCzneyT-l#U#gozL+StlqhC+s8W1(EKmC06daI2nYxoV({lM! zCeX@n1?S$*Pre&2n|4#5vM?{mC~^lDH!Ut)*=T0rDc&zWA0|D_nh{Vyz5JLh7{D%TRd@mN+6HXGI7jf?u z?#t`j?o)ZUBy}W?FO{}Z-{K7>rA15*=JA*CD^R+CMCOY%PaKA)@}=35(fg&CI?6+0 zba6drB95S3_KghZl(Mp0vbel7DYQwnX`C$D=QR#B7FS1WjSpb>?QWdS*vYBS^=_uc zD7J_?0K3@w00-%trmv-LsiWwA$pH{i^nkD%=_Y`B{gj5H6-~`hjl|O1Wt@io#nI`` z>A^(`2b}}oA)$LQfrmaj1~ zkUS4g$3?ce)xpJ(N1x-6d6$I*!flzk28ivgtG}0I0r8iUuCRE&ym{YV1Q|T7K1({o z^K(os$0ry{wp)EyC%$;M%H{RaYr|Qted7`69If*$>oNwf(6MX(HB4M1Ov)sTk3S-e z7?KYiF^m`+%p~v`BO)S9bZdo%0IAt#5GHPK^>u! z`lZ*4`EW~_;i*Q8&A6SF24g*j;`~aLZ_enh0bT2dYw?EygyPTb(CIPMkSCu5gH=PB zgUf<@`zdj|skYL&q;X`efjvM^9nQBl(qY5p3gKnQm^^#diJ;e4 z@lutz1pV@vjL%{B=9Z$5h@1g9U zkqzS~664FK!3!;pTl7N$PL2`)s75#j(?3p;dEqvYiQ{fyCcUDka1DMQL>s~$lpCz^ zxk6$@a^^FI1i>)lFzrCyfZ^cnhdpXL8Y>!Un$`T7YLwbn5c#mr0QJ)5Dd;@GGLa`e zyrU3Cwou%C4&2)wKtq7^$g;6)VSfSDj3kgJ z(qqziUS*1*qn&%r^XJ#o&Yvrc;io@;guf5pyGjV+1YCs#T}U8B2^>+8BuG_C9?Mqq zE_qL}du}z{2dzsTMz^Zv%`Z0^xx!z|AToq}daB-J;xK`Asm?TyYHIf5U}lZ!$%AkB z(8HdESc3XP7JR;B9F5a@yu}63PW`PT^$HTk4M{A-A98S62`PVZi9Q=@6xJ(?z>Avj zIjzjCmNy^TWQW;|UEgxr>FHtq!-yf*p<)`F_ZA=86c3cGK~HVa8A;3}X!EIfiuHinmn z6^H*AJY>$U%Wt}V@wIzm3+0Nm^5EfmE559JaaFNy(|hRw=kc{S;`Qn_eAhm_k4Iy5 zwJ01+DpE(pQflh)P--d(UICyF6^8rM<2CMM^9&=*PqAk4#lsj#S9n&XAOio|T@Fj30%Rl$6)bz=&I3SoGh=pPu;0 zOdK3+xEUCnot^2OS?I0pj2W1?xVRV?nHiXw>7L%8vv;*}&~u@)vM2u+kpF@sY-q1< zXKLeMYHdaO2VA|c){YK*WMqFJ`s?psbQ-#t{*B4X{@-jpG05=8FAPldj0}Ilemctg z$1b;=sf(e7s<5f0p_Tm;4t^#!W)9vz5B!gx{zmzaqiTO2Wn*Xk=gEKk^6!(p41aL& z503sNu0MC5}_{c2U6L3)Udw zI#!A+eibP;@oO!3|Bf{`OF@`l|09I`cB}dPHvpa>UrG6_wE>@n?vVW!kDyJu`EQ{A zfi@laXI%65L_9ySNB=bofAF@(@yd-S^vi+7rA0HsX^OIYP4ioy{$r=U@0owTNw_<*In)pOxI{IsX$ZtjEv&KLB zdk*3Fu}B+0)v(!(zgO1FrCt2rawyng{6wQCyDlrwbW&a0cUR2H-9C){II_v9R*6LM67#VrvipYXc&^f^^0Rll`aQ5gYL$pX zKJCHtic$ zYOvKcIhc-%xHPv3UvWm%GaUu+m!lLW?h^3nlD+GVWE)k6m*a3_OlF%7r^S+4=?*yo z=5yM0waS~kSD&(tCb5S2PEhLEI(LIml^}CUnQNYaIJ}F}PP~EW5Zuw$mcFz}ls1cSQl3oTB&guNk#(_Y82fTRUoM#d{Hlm6Y{V z09Ulto87PIUUE^gxvkfsI(D|6C~4(PD-E+!pD(8GMK4~(7CxSU_P-@Y^v7sqWM!ey zIVUUeDj7mY#u_j?879BJu<9Hh;ICh^dGYaA21(kDpq>(!e|IL9Ql>JZnNjP`^6{;h zKINk@Lm30QvypiH8rpr+DJ6mCNn#hNlYumsP{ z{mszABqmS!)3t5jLFuw|%IrsHkqC+K(MO5I&q8=#(iW^PG~g@_9>?{IG`VRu*1m!f zySeE!aOEH~ICi4d7HQWLdF_pLDoKqGf$hT3>r>z^+ArPD9sO9<(+u<(AMMv<+=@l6qk;lp&#Mo`ihyO6eop$`X{Lw+<`&%7iyg?#7N>Z%Av z$Ceo^f;g)pWbng-^Q7a2Il3D^B^7)V-XnxOlYPxG=snW{lDRz_5=Q|UDY&6Y_(z*POdym1`We64iFfTVWEes)JL+pHmYl{d2X%NBDPYb%;W z92P(8%CwC7+~RK{c*U{_PU16~h}6LoW~HlEeZ!gzh{jQF<Qd=dkH6=SqGe*b;~KmyyE2-v`jRdQnBAEAN3IWt>e+QS2;|s@!_EUvOX9zc?F> z8<%Wf1TQN~XRNJPoE>P>IvCY5yRYjtO> zotWfLoAgS)6J&_Ncx5k2-Xq6j@>+lG;45v(c`wJ<@7AYNME#jydVj_;T~gV?QKm$D zwLz!1Iu3!FBOYLKfboF}N>oVRirRk=!bb*4pJ-mBa>Py44 zvdY^x#vBicRleX~r@eP7`(6|*f;`#MSnbT@iL!oH%>ey~wr6=ZSw zhAB0}Ng6f4O4;A#FjKv5c8DWLNWrdHzw?<)({(kJQR~!o;gsWMtH|<@=-7h1m{yxO zmHy}|T+yN%fZU{PjZT}g6=xmp{Oz_bsua@`9f`7dNb-~6!VM*zI;N^R_lFihinZTz zvvMH(l!(3ZA{>0ABVIf`x*}yLHqxzvqP*TH^C9L(_527C3K^n944MW3riv~_)kdvNL`EoX0ei<&!V- ztiwT+prxaT?$>Tr-eozPZInYSfd=dLJGFKLOSFR!? z=F)DUmP`b%)x~KGT;2uCb5xXfbU`|yBV@DFpixKo+VJ*dTdF`8l(|))-Hi3e0 zTid^ub-o8f&KS1DvEJ}NB|j{3G+TJMnVEzhzmAEsM)jt|=Fqg?X(hhd$aT@1oYgZ( zPv#X+74ZILHhkJFSj`1hxp(`che zWySLgyc^v)vO!7DQj=tRT+C+M5ugmT_Ay`3s~+*F*a2lmw|f{>WE@#_vVL;vAJ~-s zoW5h%!YSIydOe6DjUH>H9JiWby;Lui9>7D?$Z_IkJIETw{=}VUt&~rj-iJy3;d;(P zcwlD?!`(4V5X+~hfL z$)&|-=)q~@eV(;;pmtupB?CI`W2wl?~{ zdl$K`7e|F#e4J9O`Akkw66>KUPRnh<5+*&ryFUvqm!Ft_S-dNjS0=h+9ybSUiyB>0 z?I(KxXE^brb>^lbqgbqc`9#5&c+urY(v6xu_F3ZRtzJ$5BjbDjXacm6V))uR`Rba} zo5)6GZzhTJC&NZWP$_i_wyEj1X4o6U6|C9b7AiCKs|OUk znSmA;)oMJup854@eHm`9yRH%<#{H@nifk6t?w>&#RUfIipz1bt%Jbw$Q4K&kp4AWj z0>Abf+8JN^zy-vKYpd`qxo;%fw-7!@+%Diy&Rx0)G1h+q6En;h$4Yv$COXFSb?jyfOIppl)j!2z<2qf+&f~ecz}ln zgR9H`=kY67tJ4Y>Z}+ekc}YCSNplj3{8X*tUa<9K%ZHD{F8zy^(pmzJ8Y?KPn^}8s z=%zo?#XJHthAb}^tOr=q3tkyFUz1TXBYO8#I>rXxJ}~Pr2`7qSJ0%pyCa;EYW(&ec z49vQ=Yf`sfC9$5enofURuG3Asu0dwd>MFLKaobOpNF~V^XMg*v%IIewob>3@>gDVz zH%lgn5A@p5(D1`;f{oAorRnvB&K@91@v_WZcs;tt;ohyZyugMSXXiRXMFjW|#@TRI zg#4NE2L%Uz9fd|$bS(i9-`;S%zY*bT^PUKcy=T30ISNuI5TE$P0|z(PXaK$6=&X)% zOwYXiRdSQq-8WK(jSIcr=&tr8mpful^CbkFk%X*BX_=Am7xglq zB#`fSkvE1Gi}AooS3i45Pu`RkZ_sBe)?5A+&L)-ta*rhK<7@>nqVgnZ+5MKTPdEZf zrO`s|KgDf~THKa}(2IG*R!2=`mnQ;1<=qwr({avZqp!2PxhTav15%4N!Dbgz{$NEH znMx5BC)5gS(A1lOcK{15wekeW0eFo^T?$VE9LFn3%{z>Sulj29*5 ztlVBxjgV+5T{W<)9x|VL#FjIl$6Z`a@8BVMIzqmo;9yHnWKAbK&W}-&@7QXLSzkbk zR83Ca{oFdA_kI4o!r(u9I=Is5V8nU_lZVmJZi#W3t$<2JPLJwb$ z#K=Q5^mUQ8BTr4MbET7IsocIIxY+lH;h-c)tmShBeqtb1=i5$z7WOCU%p%I`{rMR9;>XnCSbL$7~0C~BFd#>zYLWjR2}wyuwdJ}X1C zSZm?@e!AcykNs$7H67)_t%q2N@sJWsG4TRGvZ}JH#itY5q8D>VUq@b&N|~6I)2Va_*>JxgkskIFxcd_ z(Pr@M0&Y1l^SxKt3_Uv4ET?x&GCjq4&KlZj5@36sl~6>Vb;}+eC#_i{kA%O0*xqgj#}KLhm5T8ZsP%gm zo^y?0D=U$cYObaGPx_$brfa+8j66Y973vyu_IFSS6TLy_I|U`7uNRLP3P|6BfB6Z zjJ|f$lN@R8qWE!8=PG-_cL!CeaVkS3;+^Zi|uJ4@((9gVDVCl1(Qc?%pMhG3 z#G|m%*dL4yfhc6=x z&)vcrRIBmZc;3^u3XjiUl3Tf$MX}wVR-JK|xdh*&+%Er^pEl$!e~fJcwJkc>Y5VS= zC+4Bb?3tEjF>5(5f()BeSx$A>YBKNjN394m>Xzrt2$v17N#e{WR|3o{jEYxoJC@0n zPUbMZ^k$x=J>HMu$r=LNwnBk*@oC7OdWtt!wK8!x(ACh_{qe(wl7)-4RD|O68d)4p z3EYR5W@3AiMg5TT;&F(G(#mPp*PCg4fgOWX4i@az83yaCw4L&$ygw3S{^trR4edWa zOs1!})$cjCo4SzWFih2EAK$)zNH|(-%$ zWwGSgZh+)FRa1psG1d^JU;6kv+LtCZiio(lG`cs~ZZR<`h!I6)&lBWyP29Jb6o%Q6 zo=VNl6Z>$QBplUMIVsYyhVX$ZquA026D3DoNLL}#HZI~wsEfUnQU+^Y=|qm;eu@NB zKaHHa9!)t)41hX(!FXe2^zhratd1UuXgG!4JEl{xsG$s6iCeAhD&^=0?Q&I#da1lOoN|AfJk)S$s^V-%+@i0Or zagDUs<(>BQa??$Nw$_50)$W1R#YM4;9Caz&EG+I~j94C4Itt}HpWF@Elc!`F7c9%Z ztJ^b8IqsWlH{WVZEqC*qfWqlUAqMA6g{v99!OjvyPMOlFx~;_{5YzLX3-gA!BS)j0 znAvjK!*UfCRIlMUBAGVV+m+W-cNmHY089PmP8c4^;-|WF7rEXIHCLuTG|7 z7SJtG?GOOK0vbPMi!K1t@jX`H_jdj=MCW7*CO?CkOW6p_qMsyBy;TBg<8TOCOzsFj zg945mq^-!>-SL~)=5q||6KiOp$^#?Rv(?dJ!i3El5!$9!W#(1Iv%daE5y#^*#^ z0odtoH$jjoP}=l2=E?ei-YxvucG(8`)z=)%oecO(HKTbL@MDcBasH&|D}5WHPlc6YeM^b>Rc7($o=^YN7>(~)KKE}_`9w<;4rxPr3F+=HXG?!pRsScF z|Doys6UqNSku<&2fcb}|IY{|7HE~Z*OP5ayNWpJ4vmI*$74TFB=Djq;KFGclxK@n z6x79-zk>+XC?PyNiDaDrZ6dv(>XUM7iT2s{f5_vnhD46KPvUJMZl1^AMATqEM}TW` z8^RVb+7NK+_|kN8J9{{A_W-DC+&Hdx+&Jr}X*QoViU3T(Yj&H{GtA8E)1x`s-%>TR z8efJbX`GvwXlRtsdb);rLFdT7h@`sSd}ul^0u|ct<~^26Z&N+yryR*}XF0DHfL(q6 z_6|NehzX6L*~skWzsZ$Ab@akxZp& z#R7=q_mSovh0f*_42xFU8K$PW?X%Z_W|x85_0vQ7w-$-F7dp_@axSBhyj5-?kk^%W z(@B#Aw?jeMpxML4tkTVJy4T_s)6rjYe<|1@`{bSOS=DQB{&Kb%VTf?tHwnN(S|I&FT1BkwZE?b1<4Jxu4Aq9HwGuTrAtBmvnRo;xQVX88QU& zEbctmd3D=HLkQ`?A zPnx0OV_eWjJKwmrQ>i@&)auH&=<*1q^+lOMp}UMRWN28yn#Jgm*`VSi)iJ*)rWD6p z?TE1IZhN{ZFSG2;Wd1%2IJbL9MSGTp;aYvxFgWoF1TB1W+= z68ARIP+lQ0v04uL;e(1Zut~Ch$t_vi%P^JyVb5>iD~nTWv>BUzA7G(w_oueEVeX_X zkNv7vT-#l6n)l8J>2}kkHt%~@Ixnk2`z0SQG1JMN&&GYN_gx0}O?LOD5{!cF`DW?d ziHVP`;d`67lUv|keTMPj;s?s)7kh*KxCa5|REawJOZoRh(^%~fxhMfd`ER>L_pUm{ z4x^ACPhxPaEshha|8YrX4bL|ZOW`ILuLkQcO~d$NKbN{Wadzn2XP;w0C*ppm*gf{v zPbqy;D|?i8a)cCA9MYdsO4IMDB$lXo@5;tj#3bglKk>!x%voMWCfv(q(&7Hj*Bvt4 z#UlN1dpdGI(N8?%7#})4w)r@H#&b)9x4$pIo0&fHrW80O!NdQMZ+CtUSaMHPs{jE?mKlwVRpyPLA}u$6F2JePRo8NQcmUfwE7F7v@*i0i>03*yu(uN6Hj+5du1 z=6VN;+fR7wn%^L-zo@BoB=%n}&%f|t(O84$-qV2&^7lD0$?=Mi;^x37`lQHM=R=~cS zr>9`+$U-!b)|R-ezY^Y!yVyAFp-7vB<)oS99uZ9Q16*@{i~;eEU4+E9)6IH&f$gBD zM(L~f{Q?d%ctE-OvU&B}8A`s3vGPy5ggk5F#>?UBow(tadj`t?aH-<@Px*)`FDEPd zUkd7g_f42zZ@&WR?9airDmL0jcwMh)0vb$<0+QaWu}_b9Yjberee8_kkG4+98*XP- z#{;xzrE)t?v?r(BQF_acR3<*2=hv?mfgaaxZvb6ljs~FYP?5OHB&$`&V`tX8m^B8{ zOVFd#?d6FrBmK=#W0Ua?;9%vJZ~40WaJmr`=yp&aaxs5N$32=eZaR3b27tZSUoPf; zY{r80Y~a-xZ9f*|Y^m(bA~fD~qYhu3M~MmbIvmGsmMmWI0U|8-SpOS~lCX9s`P&s^ z@BdN}tTjT_MNr}gZ6&4Lh=0_)*{i1v{a(x!BQ|QdzQmPqUH$bmL zbdSS#HTI|=EnU0m0$#3$+^#;k{1;I{{F(0guLsM*9|5 zaoFgl-Jg}E6DNG`iVvdS%i7o7qL=d3^F7Wih&biU+Y;VnSW*74p1in=7=)xJW8KC2 zl-g|ONpriL>W1{qn38(`H|6@eJbsng+?ingn{|W*nT%2Y@1PV{m4XiaXN0)~#sI~3 zSoqYGWB6wz<;nR#n@bE5r!3c#61*X=;t(p$T!ute#$1d?(ba`oA*}MdaAMaZOt8z) zh$<-e4z}NH6y9FxW(>|SG4YPb^o{w6K*bgim`sl}Ng$oX`H|(ZQH^7XaaxbF%DF60 z)7$ySR?Q@E<`SyRbq%>qO1Zu)3F*_uUs!d?&G&Kv12O@|>0U);EeH6!carVeImy~L z(RosdUoU45Qzn5ENh-=*931q7wpqk3CvT+NU8B6%tuvGG7vW{LB@a+^ih-`Z>OU;sQfrjq(D$Qwol;uw8 zo^v(4PL27bvv|F0cpv*E<2g77FEft^NqQc9j+riM$>@M}ALO-3iYi*i~MJ9Klwu+`#;^-T& zV}7Qupdgr7Jp=u4rsyf~0upSSZ_qg@i?E!5o^q?{SJDsw$;*X@+g{*45J;yCOtJ8^ z@8WRSnSZ)_^iRG2Et)@9YtFuXU#`0MzAR@7HEo73I*gijv$(>j$p!L`?`AGK^L$C)MfC4j@gJ)WAe;mu z^zp7<$*At07)Q3@)AhC3{)4-b>28`EmPL68v*|&DnD?ze{Tuf(8A9z0Ju0;6>v+ww zRa!Sy2n6GUX`r0WY3zGSZa~`^6zrvF7=NeG?>) zfX!r}z2GzkE|urImY+44pGHq8aZ_7Rt?0HgG~N)q=dv5tx}qeBG%XdQn5@05H^ zB$z)sYJQu42eC`#;k^lH%1p(i0kzaiP+%u!>1n0h~df3f+_UUq~GvV(l*J-OQ@BiE(# zcYGuGbEC4>n;kJEZY+{nSw1^E$U;&3!3MHWik)(ceA$VS#zUm16#u=&v`3vzBcB`h zExVIsq-_)3; z6DQm%?C#V{6FHC1GEAjws}}+!c*REzrCHQb~pMAOvQ{Y_msjdkJRPT=-3mVFyVP_OM!=dikISf|Cf%7 zxo?S&+Cml*1OhRt^8^bZh&!Y#TgAH=zT?iPTOiWt0|N!hv$Du0&U?B}xidTZNxW$V z9zCe^`sX5Ha=VC(G|+3P0x4z4B<^ zti<1|vEd1g7INAz?+g9e1w0M<<90h5HsF7u^{FQY`uyvO-JgczBm2i4dxH!U%HPvk z_Jl^|+y5dpkEd3|Diyp4%kOEmd1^H_zxv-S1?wqq=YR7)Dd>M1^uNQp56u&r*tIwR zDeS-1nf^ynIw&|U_4n3)t~8&}lp*~3(%qkUu7sa-C;Kee=&zQ{|4`8y%F88ZivKMV z{-25b$A|TQCh~t?;o z{850oxtI|C#sU9yg}dBoOs&F)4qH{Qi+}dyf zK~O|WKtMuK5Gj?C9t85#>8=5WP80g;n zJJ)r7pFduk*~9y;_4Iu|&swzG+m}o02;nn0jgBe7mkiByYo7j(Q)^$dYeH+kvP1YA zVR3ni`qk5h0J%K<_|ks{A_ZK><>sBI%y zaJKMUvnndB2XksXD7?SLRVL z_oN?=Uuc7p+C#>Y(S;>I*_i#|-m&qnE<^VD+BP7RmQlMXh}@Ei)fI+bc_&?7Sg-KcRmC&LZR- z6Kv66q-AY3jujF-n;2D=5EhooI)0GDELSRrZ(r`Sg$R?FzE4+A_^0Ae`iVRHJJqLR ztq%JewcH=d8K5=c^iĴpGUE{^)l5Fdm7qC)7n0+OG4GDC<(`QHx`3+{9CyNk+@8f)(AQ*(VoE?{(MwQi2RkJPvl ze__FsYY$x>xow$wIyx?V3(#F2E|Nu**r+KeC?rFyK#cJqW8)33M-y~)e7INeN=>ft zs@wQt!R2H_?=UNSSu!iX*bG1WbhJ?Q?W8t#4z=3zS>VU^KYmO>@ve`>TV)Sfv+&3! zpT5+0rpi)lm^V=Ny_Xuity_vAE|?y$1F;XL#36>BY9F8QG1|-wf3opFckxvO@05Cc ze;@J*{`lY#mEy&T*n){LJ4b%RTF`>w8q)OBOu<3RVt4OQiTOIJ{AnLm?52b#Sy%+T zqGTbtEY)TlMx(DxG(GdW7n|4lJc?AhpZ3B~8^zb?=8-)4N1df6%GYAbrtOZPX1=L5 ze@0(>TRs3a?X^{g*m9yyLd{3zy4P&r|7 z+-7YWKKErdzWWQ6KR@?YfkV?&ucy&nUzM%$l5t*MnODgjwz@2PAs;Ix8Vl%7TF~zt zMhS=nSs6(AGeoN$&#=Rm{up`g_+Xt{Ls=ZU)2W{slV?a=^2Tk@%)zxcP`Ka!B;Rx{`72@V=> z%tq~u{@)%s1ng@9HXr%j&VCxIQxc2$N5<%q_;8eWcTe47yWt@&uW;Cma+3zZ&roV zc|aqh;R>uSrTjHd&Rfx38Z!Zy(nKyE?Eg}zkT>hA&l*5jcUc6 z{`aH~N;@+Me49sQd>NKPavQmDAo`||;XfV@Vidr3v%zv>@EW{Ew@d^&oAmWM=}1tO zrppN)`47bBa1*X!IrM~;pxf#JpT^Izf#;D`FR%rP+muqNY9L6(TSiT zR~iN`c~vM3HkFY%S)%>c zxfjTX%q(bs+vCCI&=x;$pc~$oYW0UMepmU7FYuyUJ#9{{W~c|tTn>G^RVWn&6hh*0 zg8yX)lmzcuMQEQ`2s`# zi+n7M0=Z4)+sIEgdydl-6$|)8p}>>UtpB!2Fyq%W#*EDGNqNk6VVUlu;4am-AjVXj z#jsWwZ`>6$#Ii3~%;&4e+Uw90a`~mfuG2X0S*3BjbzOJp%!jFii7w?cdVyRC9X9s2 z7jFpy#Uioe_kZIn-jKbKzpJd3kQyy$zGTt7WOz3*`OKj97N+nW#uUE)d09Z$5>9(6 zqxtsf9xPm8O2&w)#;>ATfrY}Nmw2N8L;X=)AWl>p!=#a`^iwfvk&b`69>9zoJI16Q zirGc*C~M*+ZjSz=!u#l;_Zv$68IMAI z=!r1;t4|is)M(Uj6eeARp4FD(~F)S3T(B z65vnvik2+F!EgPE%43iGzGzD*LQN~onl5CpL@YEZ=y^W{f{@r zdC7m7>=+EPsvMn3L;8+%2;yW=0)tu>Pg+iNoqxN{(SHHM6Tn!^t?OU@BLdBw8H|~A zYOxsMs%Qr+rN$BMP6n5>i<-U zcN*u<%4sS zxxdls4m%1Z51gLFyu!PfELV>v4MpYSPG8(_mhLQ&GA*;bn&kKo^>*Q43yJstg*<_8 zfuu;kuIDEE7nb2mG$L<^{KI6uo{hin zI`KY7naf{N$luwHyyCcc$$ikVf@9RiJ?eAaJva#n7<$?fw!+_V%Iw)U4aECr=8$IB zx9OOh$u8l(*UPIedMtUcd{#R>F3BBj>}~GM%uJt#XfxAt4@o-f>R^HR&N`!weS6N& z5VSu9$KRr9!F$zN(xyzm`Lwk<#365_$9~!_lj8ZQN)VdIP`xI zaBp9ESJ;0!SVpV4EI}q&M(=MEF%!oYq8<1b6}g?Q_mJ!#FcnBpbC)cd{iswDfpLz$ zG|s<8>V8$f7tx1L!#`+kuQJXv)`}^*YiO}WlPhi0!Z#=wITZH-i8%gs?6O7;$BC~B zHLWK&o?NH)k%!V77pHAR5v$JR@3#n+dl9ucwpe88W9SQv5v6#wdwL?5Q}7?-0nC84 zY=5n(YNin@oC{dz!ENP}Q!U483Bp@wzqkmn32n=VKWd8xc}o%cbD83d?RW<3;|P>P z${sykUc$qnIGm1IiiC&e9(i4reB{6uVje1!{OyuaEJvP{z(X6wU%Wx!U3|fe6Aj6P zk@)ZXXJ!t6%43;coi@}u&u*Mr1h4{y^z<};ha(V*a4=Cj6UTmWTu2j$P##oI#gau2 zpH&BTbgsKOn~C9YPy%oF%eX`GPus%8-H9{r(4z6ct$Nbgz$^Oplm-7@<&j%bbLpFQ z+6M*tGnfcQn&1E)TY#M;@DGp0#K@h8jJMHM;Oe+`#Rptsfmgv>egJ7+?SEnM-*O!Y z5Z%cBw)vP`v=2y<;9WQi)9d#N|H`+2;_et)T zscYN4P2GR^%PUSf z4II}-(pN#6@&6vJ1WQ3urTkuS$VNHryvLc|139X}gYv=yuFtyXcQX5C`{b5wRnY`X zQno8N|J1&891zKJu{qY;T&Nf~S zmNu4>1M{M;I(n9JcUZpQ=%&A0Er(rLzfWPKvRcZ$#pFB)cGAO_=@fq|X1Aj8FY#WO zB=_^G9Kky`(0vL5qt{+=R-?)sE^f(Y=PE{ypyk*8r~i@Euy8UcFlc8R`;AV|>KIlY z*a~S0Ma?-vI2^y;A;zs#xIF0yp(o+XtQ`~PZ=K@v(^=rFfWBbI-4<#B^~(Q4Y@ozc zoGmrHEm16_hmBYG7R#8e?soV5-o$1Uc=2kN_SvXn>u~sHkt0e=IbOcP&?X)s0Cy)J z;>DC5TKF=}hEdY3h7`ZDH!y-X7?YN2&pCR*A?nJJ5%p+$q4`pGu~IeG_n+E$88siN z`P%&C=B~S>3&&W)rc2x;x?byf!Ny_)wNoDVmXMPExKq?u*dzU4xAP3ECl+c)S7>Gu z;}RCnJ8i`rh&lYYfTPd{3k|j)c0|L?O=A#J%v?ts*uU*WeL!veqJzSjm;SA4Dxe%u zM8Q_es?CdCI`%{cm&@OR@PakX z*gX=^*QdC*54l@TCsfH{1Wk9j5&ccOi=IAaqwSzY(dj!3?FvF|E%dECd9nF|HjV9* z%H;AnfLPmY{j^zcNZ2p4Sw6AW>d+Ah6~g`3xs-+>xT=e%?iRnuK_B^ds}@@Rtxq&U zOEL7p$`n6>j)Mbs%-hDeJO=Y8fZ;}oqB!z9kMD6x!ARmkkZmFb0V9cCqBtPlxO)w) zd(o|{qu_im|lk}uAF_-T9mfgyMVrdHBfTKw>gJYC65K*>hR znT7FZ2c8zg@+IH%(honv^)!&7wv##qo8Ky+$i@QG`ND$gG$GTm)ZrKSeZZ1kTmlYv z`V4`A5cBfs0ig|_+3?pbmVGz*ennI2tNNzGLkZks#Yy@nQr&K>TMIe6gxL)!KSc&%t(EPlw2+phMIClCZ)58gDVNK)@Cmkm>dh98^7EIgvMY@$Fo{PaAh; zWUPtqJ@Wx(Pm?DVE~X`kpUxQnI$4CQD!HOrcjITof2Zl)oe&{t%$rjOfFb3)LG+~i zQ685e9Q!_p+q8S1Qnr#c1r0o1vHM~a;7%zW`=V~>kKgIj8nKFD%hn3G0xuC5(e?p9?& zs~X;Qex!soE4!%QE?d_MnG}oKQ$~JG&IdH%JU=Y&sRg^I$FOaa#0mEqsAZFwp zOV*Qea9*e=@tM9jxBNhDkeGse$fr!#>m+l=XM;NMfcbybM@8_y3Nc;^6${BTD;gmW z>yR?0r6$3q#oN-m{fMf2{7=wPGJ1CHD^=xo>fc36s`hMDgz0jkp52Hl$>u=o1b4vw z;mdkl^Omi*gh$wfhdMtxz)a4=KZpb_KYWy`JA)RNKv$oQLPJTrbPH@e3(!6dM$eEC z<6I=~Oh(jX2$aj^8Z;*=IY?A+x1oXca>my~QW3YvOQ?!_UxvLZqb#AY-2-vN!h?y) zy$mUZ99^wVH67t6Z|pnXs2r0q?s?5hy4nALjg0rh0unK}_Fnox!1{!hTC+28NX~ zWlOUA;s>Qb%}NrJ%u}Jlm@06{P4->^Qxwt@@%%I zJ|dTq{I&xb!Zu6V3#KxfHOp|h_3j-?vM+=!jY7QLwoYy;sEIJ+l52vEr#FfDa}z$E zFaEoV>ywV#M zeHF$*+Ka=lw7c)(AErsxbTkza1JGMqw`RW6`e;oN`)`b%p3$AD>C~4j53dC9;S>?; zAJqA6>7$x(cz>-Teb%2 zSdBp{f`EM$YIGc&=Q{Jl9ez|Ix-}hpg`eHsLV91!P%UqrfKQAExH}69)wh}lDP7`D zji-&~>0NT@;N_=Zq`|N%0inXwZc%g!jge)ZcQh~kaaSuf#}ABh^#hHXUd1x=az=~q!HGtt708Np-3I3>`MfODB7HHJM7Oj|cvj;ai+ZOXh z=(2QYIBf|FtdJvftLSin1)iT%{R46#*^bfH>H7-?rZ33`i8WXFA-GLRaiWIb9Az(} zb|!$8IzO>Ii`(R#fTQ}>3d0->wAj-BEYL85GRpEInj!D%9Q?KkX>3XwEfzPcu8FBA zw~azZ2KwdM2rInT+F1zfBk&MdjIb0cpQf+OM>^hEve14g+dKd6RCOMm*6@9=LgB?) zh16ry_*KRdT!LW<6cUeTm2q2v28ofS7f~~k!3TLb9%aRbh{a~hp803Ba@R7b0H*nS zK*k>yiycxOc-`pA#y9qO_)y*W9-Mo-;x z${6#bnbnqng@ne@={Iz*gJ>`JH~LQXIzFj>j)V)^ax_3rlkQM zdUhD#IHYuMk2Y`}tjh{Pwskc;6E=S18snB8-Gc(XcY}=8kd&2HvN5VCyQCiCf84VS z!Y5^He2O40tjfs7z>r-XceN0jVN6V!@u3|nu97aTSC3gx@b=I5UDPWNtkN5%hS|C2 znwS=`!FL{blc7fYz1}y0ZIqEXRY+_aaU^2F73c4v8-; zs9<>1SoLY1F)G$F*XwTmN#CsyEAzp zC@9wHcS9t*ZZRP}toXz2>cRpFo%uWIg?#uPmYtT_S@6vvC%(R+q3&(;D3Lrrm-pbXzizUv z0VBzWUg|HTR|Ox2BsMf&G!<2tiLIAtn(~c*cX4_!@XoC}Z(?KX8|&+7*Lk=@qTD}3 znUOKvq2eLK!NyMZoqR^jsP^*oLRymB_$Ksw)sU)l|5%lU+M?_Jz-&R%R;K2sfxVpj zr!1idTr>bmlp*c%nWdCF$7$0eEJAfZKfv2Yg;Ne~wL~@WX(FE7Lu`i~x1H(oyHnVd z+x9n`97s=Y=L3bbEW6uilC=Ad*(^>GlNabbF3&0Cr4e@)D7IM;@Nm4=421DeAcUq!A zqnj5P+a8JVW_()0>7}Zu*x(hdVjf-8ov(#)N(ZIHg3q}l?1mX)4qufejP)|}PQ>#q zrkukeJ(F9?K*|pE2Tzs{G8BvrPnD%!JB8u$wDrH`y>jY4zf{ns7R%nZ3unCR3FZtu zvI+N6B`r%Yjy?h^MJWAzpr?+UqGmo)uV)YBM$%M@^~B}2XpIB$AF`lg42Ntqj9eDO zF+XD;mOz@6?nu7!^4)uH*zmok!G@X=4pYRp(&h9;t9lVItl<;!q zEQ2cdS7Dr6ge2iCCQq&ZAe@IT01M-54AaG62Vat0UvDT8W-Z9l&rpcOVvLth+vR#q-r35OH|2WzDs@5 z&%|%8V>&BEc;gnE;e9cnOHwmqY%Pp3s7BxgfT5S4I;0Dq0mRw#5$o1Aw_vUV;YryB zb0t;`Io_(?ekYxv5!4ewZy6uodap&Cq2Q*%2DY~<;ang@r)_zelzPry&o#@%HSi^- zbW-(-Ls8SIm;XNA1PH1&F2y;E_kyB%qlYmUk7B3sWno47J#_)6OMq+A;hwIW_n%*) zG_R_3eMU$0MP)co&&931*ItIGQ)TFJAVy+@fciPQuAdl;04d`VI0uKmPoz7tQ%BN| z1W@iIGf|{F@_g-lA71zapbqiFc{$xY@v(>HS1shNO+d1A^`I_`xD$Ni+@jA6vWy)g zA;L)s1`_F)UM!UgNzb~7ic~l%14V^Px`Yb}qtj=lfp>r;@zh5;=W2R5em`u1P?gX* z7~;LLtyH%(S7)!)?wqOBMiUC#P+!j{36_$&P7IMl%cbBGT$M=Fd`4GoVlhYud1h@N zvs+*I1%k|*Aq{R+3;=FoX!621@69(3zbigQ8o=kICLd%=on>Eea7NDi@J2hNyFI4d z8m0H0N(xGatqI}q5}s=abIyT}PRr=LEC#28%c8MGs1)=TmU`gC1Uv!tJWIvp98+q* zni&hR{7^|}GLBmFNB;owF@IwW^{ZhUIM?5)EFFB3CDVNoz%0;dyjY%DAwC+m)oXx} zE;DxRT0L$%_;;JRhbb{{f!Df$ZJC3r-wok39PXFNaCb8;Bm3^bS74lc>M`K!Bj-ivem8+u$Qi?{63*>n%(9wOj9vVd$$ItBk3C<57$W4qxvxCy&Rz?$0Pys=Hj^GX_{^{ zPf-!6=m>Cdii`sg-v=L`28>RR69$j6m-<#f-|QH{n~|!=Mqg;&dw=+p)QE{jJ~j_i zN|&kbGkoN}k5e9*P>%=UN&*XkTV0kJ8c{q&yyuCR07Ykz0w!ef`t9pKWAQF&7u`mA z$jqqUA~8@@XZuPX$(rOVjgIDT#RXmOxPJf7nqWC{H7 z#kBO>Vhgq-+k^<+7GkEv3aF`L+3GxRAfzvEVG=feQ-}E|9x{$&V#xMRFGhdIuH%h+ zhUdzFGcta3bkYd6JASuswT--9Ugb8YQZ!$nO2*RM31fwK$8WB7fCJ!qvRNJol!jA~!LcTRCz}CD z&WAY#=hxn`acj@0`fbt`zB6~5l^p3U&JJw_uGv;_j__b@@Zk97Slb4UK}|b5%>Cfg z2zW55N-_v*`?vWv#bV{bxcO5YK6>NqeS3U?;pwg;>k?|Wh{<*r3MC&p{D{a3T$kXv zK!nLp7^&0T0IA2nUbDCVwGi*DGiF)Kt@IZ(V8a+=z`HgYkY!t6l@UHTF?PEMW>YU> z38sZ#CXw_iqm%4RUzjnz5)^wa-@_NxV+d4^$ASWh13}&9x)}e7#RUTe9%O!Ls^!^C za?D!=t96UjwgMjAjcYMDV`bT^dzQZa3GxAg8xNcpZ05+2e`P?7c8SOV1FoAZ`#tmr z(#ElU)hwfxwcN5ZF*@pIeAwoj_gc)?a=%RR5ckGx@fIvx{a{xmGp~{6ZMs?fg9UjY z?R+@bN$z|-5h#dwvp1_Sj?zEOnR7Hv@R@x(pZdZwJqxy*{XpO@vAwKYtyPo7h;;X1Onu1Spk@3`bdigVJjxQC*EFR%qgh@yUC*`BN*BJS{lRm95m2M^- zdX%j;aJ39AM_-nW7`wq`HO|Jbjb6RXi>tG}VZ+z5-ClcGlyLZxy?lvqt%msU{(wk9 zOUC4IPU_m)fa&x=s_e9meMiJKe#hp|uv28J<7^1Mu&~yMW*_KYqQmIE^O~ROK&zPN zZ2V>Ll@mD4`#LVqNN2UX(o{M3XaqgWEnKBR*nG(qo~ie+jXP^8LW;auFJT*zeK);( z2E}rXwS^7GbK{x!8*C4wx|HtBqJ5f#Y=FEY9K3Sp1(K8QX2tye`jK*au8~;S zqD>XE_$n5iTk&&B9}FXc!VxxQ8oCG(#)AW&KqZ3mrNd>28fToCVp?b9wO$1QjWIW5 z*jo1T2+Jwv>)&CE&?c~+E~`{YN$Vpu?JM}2jjbxx?$Xb{R~+QHO>uFF=m{!{siZkw zV$(yns2O#*i9VHZd-j_dd`Ijp`Kq~_ZofPc$|cgF*@JiR+r#gNJKRP8&YdZPcsCjk z#{$S>T}Y6FjbnA8Be|rW%nlJS&bfKZt3q3B!-C(oUwDRpI@k>mx}Y?&T@YtdyjTc8 z426~>yQpUdcI?>+gV?!CNtNYsBuh2lEf}e`oDH;#r{B@r&fM78ihQ->GCkk#Hr3m*f!r5Sx%!3XI%*`PBahGHAGVvRLJsntnrutCHYPZSrD4)x*`9+DST&U5Y& z`}kN><{6w-iP?jOnT9iqtGQYjt7o@MzvGP#;XDRO%Uf%PKE=mf(kE8p?@3> z-U(rkia>>Scn@LBA{`Uft|iXhXqs*Nb1&7qyNN9VoZmneEUna*IAwbid~bsLZ3yN9 z?X$&0=;yCEssa&zXsZrWQCJ~lfH(rANOjzM97{pw)J%%PTPfO4SM|bZg_J}E-ANqc zbUo*k^mYvb(xDl%UNce4*gR2-k6xHBmKWW&X|SD8)4SWY<}t5c_OwH2dP*ftATaqHz4uqZGRM{z0 zE8L)Yqn>vP&Pz>}R~SFfKs8nPnu|Z&ind2_-;PY)28V|0DBdxEsLV8fUge%oR2#oB zL66!i78NQ=MRrQ;6i3^9Q`~ze^sH*8qzPTw2!tLN^Wz|VPA_MmI;M8qmnQ#8O>A?E zbOSu7bf&E@Lxl;c`ti#_azhaJtu5y;+BCv76KIv3xma;*I{qP?j%iX8F*Vd5)Ouen zb}H0mEvo4Dz*JGSdHzPsuAZHxJ;s@=xxa+q1gB-~ro-&34sYkk zk5d`dJ`9Of+kM&jIh0i;rS2t-g?-Dewgevzz4ymMFIVe2#5q7xw|OFOIldAgCwF*l zT^HNjrQa|Zra9B@zAp9#70-=$DqP_j9dq`!=Zr+uuxK8P!@5d)Dpg4CIx%@i@)e3` z$>w?$&IsR-o#F@r&+}(_G?r@9U+lnNn+uJ+e(yq7X<}&Y_3f5G3w0{DSV&R12Zu-$0h3P{*sx9J{HN>*xbq6Z+x|VL&a_fUG$Mw!QrcU81NlG2J zY!&Mn-^Ql0<*GIT*m}5@QTJ?)J-z=YYKGmeuxXurkL{|3s@ax-_Ri*sPQB&6ZqW>R zN)Fxcm)0>e4L^z?2;Ro!==yvp)SSk`??B+R2|lVJ+|RgwVDWtCNQq-pTgd3mSo4*$ zR)&$0Q{EI(_W5=TyyrqZv|gC1OBm9rTSo36_mUoJ+b$H5Q-J%GH1`5xqzz~BYi-Gn z>NjtzGZ*BtTIz0D-P-``>(?w4Ll5s`RnPP2^*(jn3G1Fe=)mhwpWg4OBNhWLKeIpo z#AV;BiQ!6adp$&M9q#a?_>LZBcDR=2LWUEjy0k#rksIXHWTPF5Q+7 zLs!aoq#h)IwAULXnS1T!#n-a*3=SEi=ulx98TY5+O0IJ9C>oQ82%FwOG~2%N;>T6} zEIi5CK%&$Z^)~NoE;IIwoV=X2>gAf)j2hra@50Wg@1ItAZ=I{YE~ef6jdFQYu$@?t zUt1^Dt}c!+)24L3`S)z^M;(y!!hEd<)a4F1;S6~Wm&kyyh}6AAU7V-{OS;)8sh3fB zk1=%S(Pyk@u^&M>RfvzZph5K!G2tTL4po1(B#twbknAHR&W(@kvqvc$0GRJ_k_?tu@}+pro+NX~*hohzpN2Z0R;$pw}akgdL8sOPL+kjvoXF1Y-V!^xv-Brn>sf5NXoRy2;>_puK- z@R&Pd4~{v5cQ*kZiJXs-2mgn3f>}u1{8vts3~oK7GI~L2JU>c-a2lwf>!Yd$jo8cg zkbD|HC!TpIHy90|a<}N=BVdgtz&1Xrd@<>rj0Hfz6R%(XJY@w6#1hH_2cY;q}UwD?V8LAY+gFiKT^Bhe^jvRzpmfe=__);|H#3^2cy-+@TJ* zKNk3%BT>j;(>tNcM`CXeDEf|AxCgQfy*(Z5ZN4A(5`~sGqt4}tq<`jvl`ef4@Cn@7 zesgZ4?8x{c-i2n0kr$^GPfyS@9T5u^o+CfmVKTOwj)VI1L_|L<*jtkDr7!8&Tru1g zExGxSidl;6Q}x5etp4}&7Ua2a-3B#{A{es)E|RKmtqr8#pk13)(XEtIi_C+ z^g{`YHGP;5wm=ej2jb``g5HkL`9MBwPv?zLTTaf-01K#%AHv@c4`O5p>Ae24Z%a)M zFr$X29ytFnVJz|6x@_lsd(i}fueqS}aKPluVTF(azu;s#~UjRnxteO8xTJ3w6 zJ%#lRZA#@4NFmWRGH0QJo5e26FBY}!oe)&fK5ORjOZD5bnP1y8#c2+!fKWxpGA>jWFa@nZ*IXb{~h;DM<`#bB>qp$1w))_h;+r zncP!|vg$T%xAQcwlU8$n8C9rudY3?tjVPOW+1(vC+zy@zsXT5^Trf!2d=n-1ppXA~N{aI0!6MXAq?ArPImbm$tFQV{? zb9u@fqLrMgsMMQ_S=TE{Dzup6?aD^2-K&dv1*<=JDyTT{d%iPHMzkLMSR*4GXq?Qt z?jQjZsAtVJPk$pi0vW% zvQ?Hw_}N_j+~-fDB{Y zpqDtsw#`gd%GRGu*uM*HlvfCMTtshzA%#V^;2$PVtN+~RFiL;@#&&(%h;%hp6m0nz6=5+Z;tMcp(mf@|JR~=5Te)C~5 z${||5_w(-t8z}%T)kefh_jAcSgsQJsdpzb!+$q~BFZ-)SONA9PktAWQeq*XnwfM0N z5aSR)VaROlbOC^<$;)f097FuS`LP=%vK8PFO1d;Xem8ZmUG^L2<#b7MF}n-2A5wO3 zFZ%6dt$VP{X#Pq>AVz+SmQ6k)uj3H#JOBZ-e-7gDx=sdVK{!u&#@r=K`pYgfyf;Ru zyp7JP5>AG-J!YwVRDVse1M3!LGqqn<$;-0vP0}>aAH~mYUdGz^VL^1|zNZ4&Gdwe{EF`1Th2*7D`F>QqFQGR4yt8A7b^!HrvO>Q__8 z3z_I}+KL?f$+LePRPj~3J*A3_;p0)JKI;H$<(Auo)oGlmEY&JRlwzJI#lZ?xc+t7;_3bG zvIZXXdyx{(!zT(6FDambL{BpIi~0??@bTPa>SEXEzHmY^Hq(csXAb~qZv%C4?O4{r zDxSWv{C;B+Xy70XL8zY@1Q6LxVEf!eKR@t(c?PhwYgrmREX_FOF}hTvya7`~Sgr^9 zL$;%%GoP+Rpgf-@!GnK(ACr6;Z(+=)O{t6Iry*fsy0ADdpX=|hF$4DD(Oev>2PvAe z+($`ukZDxcV`#|!;2SLpI|uqA{VjYSf{Hd?S)O=iQxp(U1!$j^{~qvC0<=Eb?K8_) z;(G+=2ZXEN32SD91vo52YU``FLpd%Gmv>(LxTWn~iZYwLNBwIt*tm9#K=i+K?zYac zy#F|hl=^ykN&n>ig8LiZ`9JCV0&JjtBVv{g(+ja`-R+O4 z-v>0{yHxnAIs-!ZU7+J|lj6tj8J)04??U}{Pn0pAoZq56Hm$`rFMnktVLpUJ=EI04 za4`YqC%sUA4JfU&dq#d1Yb`hcH(F>|9czC6FaDlMslaO~zQl#kYph147}I<I-L&E!gaX`S^N@sXL*I!MAPK`q-s=@J}lDGN4@TbKG%1l&gWmJv{0& zTO18O&C$Lj8?@HsOQ=!pNk3xKfzP*?LpSI@2EujI2NR-kw}tNHuM zK862eMSsu0IpR>dZnR#5lNj?H zw#Hz?le=yT0PLxZ+CuQ{(X&BLxCR)krN`$$=P{Q>KcC~I^G04d(`@#o!9##OksMGM z6`(Iv8HYk`BY>%k$7^7bf*#MkKkiNC1!gYNO>S`h%m*W9Qm$R_Pmg;wargZp{kHfS zk%(6ka(nFlSAG`CM~K5)@GMYXNXcdX%(4DwR0;7yLYLA~zgX*{V+o(uzg>CgcHkd=4~U6j#1> z{kR4CHir@^(-_i}%y4KP|NJng%?+Lk;>67vHCRxA=aXTLp&6b_jsS$5hU>$^;##T4`PJk zER1x{H}%>ae@w%w#3AV(Oql|{_nGH|C&l6jVw8hiu}s+QNg$1YX&L`XS7Q7NQ+o59 zwHjv4|886|ZLdfY)lF~9H4$hGW#Fsd^?m_HpGK5(Q+~SH3Hj>vm=|@=Jv4A2I zdcD&T$1mv<2iOUyI#bW@_Nl;liclNS^|bvKqbafRNY;O+)Nlypl-S}66yp!J1^&9) zgQN-oQXlwd&i_#IW03gjxeGo{iU5kze-{7t;;I5sIigB)E+#i`0bDnFZqZ;fR&oRC z`l&exppKkUBs2BM`6@!S=6Ro0Hf`~CRe z|2hi}K$9mfWCH9zSPpLo0$}(e=Bzj()5SGsshKYvqFK8;xCLG6QhoEwU5^a*odduC zgoxfNJchyExP)edaX@m@Yip6;gpI)u!ffcJ-hqj<&i-~_- zjo@96nQB@UmpH}EN@ChJD~Hp=ic9kG2FYY+)T_89PDnr=RK|HhDnEDm@$&2LZn~v% zeP{;IW%jDO#+0~wF*R>oQHXj~f7^|G|rwxqyNjbtLWn5n}p zu^v3g@>hSJ@G1|i#9Lcc8Tv4b#M$6*$>HjhqJ*uJ9tmt(f)hv}O}=H=I21VMzPsAp zM(2Tn24kH4SZa?N0%z_@!m_{2FM|RYu(0q6e4VbGsM%(!<9-F>txs@w1SX+UrL>;3 z9e=$d1yhjs5m6Ii?(MUn8Z1<~T6|}&h~JORlH#I&j95+uLO6BH?)^nktipKiTMawV zFq^@7;N9$mQGdM~iD3aChLV20?C**rJI#yJ7VWk*-&0shoPNvsnw~3~;{&nSwNy~z z73;&7AE@gimPn%dr$y!XKJH%j=uq#BdRr_g-#fTfRLJ|0A@(;Z_mczwd3W8~c3yCo z&q3`|8Gn9`w^sewUFPknQ*~oE=gJ%7HJKQ=r>WR?B87Kb6T(`l+6@}sLPsb2s^+*o z*`U^F&(_)J-`R9F`ncz(!ec1I#(>$I04l~A`^iQ|7LKk__#cA_0?M^`!nW&#UtU}} z5Lr6)WK&xye_y~*#8em@2F%?dX!?jdPDaAxu%8G57=7`B1G~upz0iVjUh#0wszi`)kD|EJ-^1-EvAcI_RB#%7hZYc`QEWJ%kFz=v1LYO<)%iNBU0G~ z9=mSbEU#miyX=MAuU5VbI}ll`fjG-5+SsuAjgv~h_G)k!MT<#{x%eG-!U@*qh!Kw(FmG;S;m|o3UpQ0~U~PKe>(HW^j(}N7FEzd5D9dbmE4&jhLo& z^|Xl#c-w1ZJ7zJ7f_1JORlTiK=5Qz+C2ANhCp2y3vYe{cQUbG2I2TFr5rWWrkAPJw z2U^=ie99@6IA0hTk?yhk4zuvZ=ayn@>of6&W0Vgx_5(q7xDKY-oG_$p5awndP!-;e zfQrq-?|-YC@gYtU<@WXhf~C>fAylaEwrl7mp4Nj3r={z&NN= zz>xtpBjgg%uXn9f);BJ(e#4>RuLfqt-UChhE7Ak@Y1rU^MAV;06EF+@j_GgBmvwwiupAX9b5b3&Yc+=*yzh8-sIUF1mj+J@6X zuIiM3ps0Xx&)uQoY)!%fPmc{)Ku`Ysne^lzt+Nm~QidV8+tV((w*xX0W5>bL=8Vvo z#1gG`n;TS{Pw9w?DnP5mLtKLFkrfJe9w;0p^Q$Fr11*W?#=SHM&1{`mhBA=0n5pF0 z?FUyiyj()2x@Aldk=)IfBCeLa75LX5fmN!cD+J&&_Dvicw*@fa|6e zGH7-5oFsuCiH(D7Kx9v*&_s2)UrC zZ6Y3W)Qvl@bxR4s59Y;#-oi$B9+z8dUS)ec#w8^m%@a9`M*Qr#Sqfb`--Nd4VElSk zViW(u_`=zGUek@`K$qTvd9(h4_Erf#2j2_$)zn)(bW4Fd5~72e=ru9Lt(g03$xkg9WmZ zw|Bi<$WPfdSbvUf9`tJHqMMOB*F;@`XU}YSibmWylKU2;=>nyBJa^sw?hKb_9skmF z>lqP#u;s8EGR5NOl3i#_EcM_cK)){ZT$5cKoemQI(z#aUzAk)9Hs|T3`yAC zzjrj5+QC0v(@?S;dje)0C0xc=I7v=RK@4!_2yK@z_b(cK@K*;f^7psg{!eq?8Q0Vk zM5|b^0*Z=&0*V4km)=1{iZn$8=~Zbe2+})Ik={E4OQ=U>j|y)ipp4eYW-QDs_5sb*8lFCZzj|QlP`XDwyplu#l777> zH`2;J*dbB#(tQAcvBkI#e|jgWzcBj?l%_CrY%fPe5T;y1Uy@p${FN9GN8G{%Tr5Ov zwbZuJL4ViCuN)N>Z}`5ZX36r&xXwK=A*^1qsZ}Wf7DkRNY+h!c5PmS=gnici6#Yr3 zc6WO+QoxM5Aa=yH`+u-{QS2h-c3 z3R%wgT{K9Cn$OvDe#WO<(fN$0*xF7AAzr;hp&u8dSCWviIZZ) z?X;YdSkkolSzhcoAp{R8eRTM*e1{lD8(jvFU--$Zq5#@faw2IMg6gTWja$mV2`8G`s|ta zd=KT)sqWJ%2k`UU|{_#OCl~d6O0Hm zAi`P)`44ne;8YDEX11lfA0l&&^XdCC{syh)Q~=2)@61201k9^0pi1&lQz<-=&T&E% zPAgny@+C7E$=&bBTo|uE(Ueemi@-qwQrz?WaVY?P?z@1F94L*ok`?|dabF9JpMTD8 zRFGaBFHD+8g&urTCSW*)SVz>)G15uXE_orE&O6O0a?J>Tl&Ff)eKySGq49cFcNvEujnDF9%dN z^o48;B;=d6y&w#k%Qezj7zY{8d}gGbF*3c&dEt)Z%EW+sj*%_=fxXRNq7>3?W;wyI z-Tb6VaQmw?Ql&EBbX7z)3iT8wJ+cx={KhBXAV2Y6BErQj(5nFK#PJK z?zz0v7PY~s$R>oqxuA+JOj6QgoV31`}`_rtQju8@PR z9fv|K6cmyUxwZ)WGwyxdpd>y0tc~bmuCU*wCt}vwC5jeP1^cSs{AhmrYg5v=Z%7SH z)rzl(#MK?1pFu=G-Avx`pk-R9@LFjI{~b$R$2^6J;hfOcLI6i}g`^}(?aw!9RXyU~ z^@-(hbiCMPymH1fqnDY?ZJVGDFaV&ywU%0tRUiir;_|;U>^nfxSkvENqvS||3`t`1C;1|M0+%eu zr~2{WWp{Wk@BfX|Y73C~?Qpw?I%zj0$>9@^i&5V@H939e))4eS`8g#6my2^ETQuCy zWC5m|>dS^Fc2By&BJC9Y=J3h-O#lq=Ojq`Owv{?kCJp-NGaV;ep6ah4jEJB9)`W z+g$}i(F?Ls$IYKPlyppsF7H$yVkA3k!635Po7!m`mjY%?4%B3 zs2_Z_k8po^TKDkRL6xT_7=wcTm8g!yLDWo(-ao!UI*yC%dvE$d=3p>MCwKPb zPZSygcARUX3Wbu-9BF1s6-gqj$et?^+NAKZL3XxFa`j7Y6#As~CJ2(`_n6c{8N^dO z>I#rr^)#Jt&Q2oa{Fql8Olu71&zu%r+bfwg_?AhpvHgb{`P?(W@nSe>-qN=s0_oD+ z+k<563Tbuyt8BRLP_J@*86Z^Evw2Fhd8T@EWuOov#+O>XYQnW#nx?W?uBbvnpL2ba z4otokT37 zEAWt9jr+ip9R;==+(@S(U2=AF_(ycnMBtrr@fQb~{qgrF3KPL|X^6;-qH)$nl9Tz8%%=cg9t_{2tMqR8Ue5N#4yrtVJClb3DPTl|YE2n`)9-vF+I z*FLuuJUXOc1Qf?$kRVi7tn+M9v>`Nux(UfRs_KUSd=)T(iKi$r5{ddF!T58EoV*BT zQJva`>bbHsjiP2Mt+soPKdbDub9|L!h;i8@Yk9(bvp`uB&!wtjW|uh1taeb+zR6>a zSal?>cy$R2mAoZR8!h3S6}Yv91{fI)wijFO8>BP*OPxSy+#qJ^~N zo#+5Qrantc;gk8`xO(@i>k~%JU0i0IH@&KPD*@Ew79`o`0Fn;d$o)(G14JM0^z#!p z{l6h5nDSY6s?WiKaJKnVo@{$Aoi6h!F-uq9Ahe1=MFZx< zpu|5ug5)v|af79q<{CQdzkeqPlPRaC1RC?FCLBp8RT@gsv5#5|j!NAOz!T4QCJzry zFyZ<~`kDRDc;4dnA(jyoKpEj2<;-~pg8Czyjj`JLj-q;>1ws`2y@`Ow!9(`F!IW;3 z>stFO)dvv#oE=WI*-gjJgV`OB^sPw{B;8vb6JQ|HqQn{$GQau3?gvMkK8pdFT6P3_ zG&>C0J5CHv1O3GXa$fpuIUZ@IRB)?r2W~KUo&*fqd^&bu$EH& z@n@4oD%+tM1&|z3lIn1af&U_INh^iJ`@WxjL;}7kq?k1Q?8!^H`pJ{(YmG*pafNG5 zI&!;qJVc-;jy97c_MV%-?P;q9MTbB8<z)#-vH0L94B#S;c$%%=-^Rvro7fWzUO{h?MfbtD%1<5j#994ulQM08&(f z%pWpp6FJvpsHgz(tRRt7C&@V`#meh)4p#Pa*~&|Bs4W(Vtu$IX-!#d7cqwC<^)@%8 zPze4<)4I_%q|bpunfy1U#C=zo<9x6JoTIK*AR%o(F<)X_2Q=-lAyxM*+(shr#smE@ zF$ya4_SnnhFTJz&4u1dSew8gBgeizvkF&Wmc8u)I9=lMuTq?oeF;RFMJ0NCcbZ_%H zu6lOX@6wS!$|zZpG(3J=Fk{(v&lS@xm*RdD*tx!0$cD205A|6xNoiJ0yJ4S9+QIsS zr9B*m3zZ0U)TUD1nx~L1C5ju?=#TM*cheh&<~5T*Du`Cw+Rf`!c#0kufKr zwMbcOj6ii7Rb*2SYs6xUk3~F#no!yG8LE8>Kub=mm<8@E7_Wi*XEm05G1JYs^F|C^ zsF|C(n)AxSB4i>RF7tX!xIu*GCPE6obOzfkD-|;HDSr5grY@IhgNXMpRY2bvxG>d~ z{xF@G(aWiBJ0zZou`?~(OUL&9UrNXDQY#ta%S}?XzL2Hjl?Ctg0372Iw4n6NVdf3W zvCVdS?0}bc?`k)7N`3OKqTyYdy62~+Sk_k4 zxR06XwWdNF2;t|u&-hVj!gYhxx7cTf%*bJr3EoaAu$R!8tu9_@L=8`&I->o zo@W!eAA)n7>b*`v-1UQF`WeQ=-Sx4{S)yveLN1uvhE9DUfzxk7crAu)PqUm;i|sBz zLl6!Huwf;UnNNH*#?a*^Kcf||_!_i`!sp+#t4LlefUW`&tk;m@^q1z1@1x$}R-fxI z-K@huHk%rY&hooI_bB#6n~R>YoP}ZCK-w!%xWOeBbX$zX#&le8cZCFgJGqL>&B+yQ zKQ$`G7Q51WkCt6x7BwfOt|d^Zcp{959H#Rw3XHvWKe4EH5c*GQ^?SAU?%6Dck|D2= z_ojTD);d9XdYm1SIx{b@aH>gsPQoLp%s{&%O^1EX}2*26p{67leh?PC0~| z&}b!0xztzUnm0c`KRWg$dtC)Z0ac)K;$>w%%7fS&K7S?;r9an`YjLD6S+X6~Wj!Qx zYg~gp$4JXVBxtzVH_56l{Jw6MF1syDZ9KgmB21{c+a$+iMESP7U?G&(^j%i{gZjGg z)YlK~@b?<7m`1io46c<PEO+fACyiA7D7mxK~B?4CPQ zAGA%f{1#Q+_NbzTc0`$@F1&EREsI7O?KRUdz6>7IahCN`$D^%E9e?yi33oVvIEO}m z8j7uM)U2k*VIr4sC9}_81i+ecT)bk72U`%Lw@atl$V#+1^i$gS9AM8X2cjF?}10-R|+QOzfShHF)O3q!cONy=53f}p) zNpGdm%2}pvy!8L9Z~@E5Q5-r}?ll++NpJF|L9muYscq_w)Kl(qlTyqZoanv9f>V1OFzFNK;`KKW8 zdU0x|dI+L=rb!@mqAvVdbMj(EU3eRXUKw3Ol-Wu5k5+ZXiVM>M2{Yi!&&kV4b>TND zA+mIhQD*yGKU&p9t$k@0%LfWLnlCBy*dWfOc9V|LkkXJW3C%**ZO&8T!2QpAj_XWi zwdpMXo4c+%AL+e-$JY3Tsb$Z0YvAbyn)t+~&m`ro|K_hrAs*ti#Fj6+o+!|4a3p`9 zQ?o>ZV`)X?AGYh}iy29SpzF|~vwDC3aKja=Lc!6BrL%JR!ztagNd7xP7{vEiYmrUo zCKH4#ezsk2wcnD&TngY!hs%lTn+HmX^sj0+7%Be*v0@LSy;!?-40zSlr4E_GKa$%`HB&My~cTVdvbfM9dN!NeketdR;pX{3@Ru1~{7ytX)r+W|4RT|<0- zY0qBoVIX!Y{7mfn(3py5xF{$>%)At6L4N}r5j``MY#-aufM#R#w7w$eZZctfaC9%_ z9VcCZL|x>@v-Lg@LTfl#>_0`f-xJJqhO7Y6t5zl4bZ9$60K}IQRrmn{kq&S`wgg1L z0hc)9C>uHXDW~H8CkLFrx@Rvps_{Mzl32!X{>Evd;&{_Qdj1aMdmx6QJrU*>ft&6H zk?DRlVr04<(nT_u{l|G~yApnrj^M_%bF)Hos$lh?hj^T+NaqdYWk$N#qE=U9Syik2 zmXC4+bn+nloF3zHcb6z0#9YFwSg9_=wJaSuFnUk&;4<@-L7OdqM|D3z8dWySe>B#0 z>ll`}3U`?S>(ZCbc!S+;GU)qpAYGw*-uTIzNF%xu3yU*D?HBLr3f{yI{bRX5KLf+} z<`h=)_(N3oZ6*1O*+j<@xMRHcA{IiGf3{ufmKy}kXl!H(1rv+Fj`U(0YHM3dgU_y03xVwr_F za*Knn#aqkT%j!)wA5A_yL2 zyUk#vKY;?dELi0c?-+ZcTLsIV}`+&b1i)|Q17myKEUiH27;#kw^g+w_lXwAZU)br}* zvh11*h~0ByL=o7-O+UOq{~yVoBt=68kjtw@%o%Eb%QreEy_b^ zZ)rti`gw;^$!tyHs+Gc9NUJvYm|=8+QwT^!+OB`n9r$_wpI57_jX&WwFw_sHMd|c` z#8XV_{#yVl6kUTQ{BpZkYrj@O-3w(>f55)&QMUljA2`Fywtxpa^;RgCcYH~=O|<#l z2?Wo@yxptb-WL&p168G`)(5F}Nm*K>wwYXC06xK+nZMv=4~|l}M0R1{S}E_@F!%qN zFZeg3R8u(WLfMU$>@?g}^oy$DpwGPh3uVZu%zH1l^E=hVHY~FhUMGBS5>GG^+VNkzscrBeaBLHq zh=#i&YEchiHxq!|;HWg9cx~q$s=|nVOC+u^r8s-3mvlbTb0~e(%B%g(cfLFD65frVHJZesKf>vBy`Gk&ugkB$8gRGVjc|xr)Ws z^Y6b8;K=;!aGv~$s%dsHM`fp~ZmJ406S#s6K(7we62^piS zuHP*>Ddh%M?ix*p?+4;eIc;t~O#cy$8{1%n=XAj0U47+O;fZJxm~Wtcc?7mj>a-ME zaB6-S@HASsD7xm9yX5271{n~RV=AnW!m`7=5)e#GTkp~xWJeBC*-G8}X^;Y%p3%NO z0?xI+UCIZw7*m#GFUjSWU3<%++oJ?$iT%XBe<^JjV!B#v5f&8?(yA^_1iUZjis#|;dlb*mcGk^JrOXRJ1o_9FNP$vy_duzaxcnYeY0QMMuwun5} zz~*5s5w|}eD*Ur$G{x@$;S)7V0{&br9>mX7H0e7pW^Hb2);8cE%P_d{r zBQ=vt!RjmcXzc=^mbw18>?~UdGJHR=v%rWTM&!U+TfU8ZaXl)!!U1p`|1ZqG@(^b+ zpf3eVs?!TI-&6xcf^w@qe(H(Vsdv}$t`m3GZp-scC%iOenVdp}yhzqXaV=MNlA->s zJdun~gosIh|LOfg-b$w8XaH|QHdDx-=A)4)bIa8h&w2p zzR(D0LnRhcyGs$B=im7ZXemBvRPI`mwE%tX&Xw2TWfn)O8h6>tt`)daf&E3j{cz+aYeVS4pPx+D)JVI_1 zh1av{=IA9LZkC{U5O3SOC~y3$tH&7i-g~%Oa*j$Xs9_DvJK8PTEOp5D0xPf~)em1G zAQU_jT6*K@cERP{?_fLog>jVZvCG51$}q9kYh}|*O`rOeu3EtCFrFuTYx+-*hV@nZ zy^_*~z@ZwBrHLT~OiF}q`52~m_Jr8iggasShbq2cMqK(MPcF??X`P)2C9yH$+6*Lj zu!Y^h_9p=09CvrfT#6s)I=CJb{r$<48Du|FkK-4Ga;+y9C~}Pr{XElu*_znD;Li(J zyHscCPHMRIv?GHvS$O-&{0L6{3rEJD=&Oh?<(=v}tKypUJiDGNdIqmI*wq-GEk{(5 z>+)g1i=XF)%t|{oV-!>lt&I5q1{DcOuc6fLa!fy(!Krz%ar^wU6igz!@3Z9YreX2j zi*G!4nz;<%P$)aSI0~htUS$nSld)eJjS-Io+>>G+4DX$2JH2v?@qt(!p7>Bc*c^^g z*B&6o*P+~k!SH+gy#_4}{ZL(i97tdY@RV#`S|EvG;X@aajmAQk}4xmsA# z{(I%n=DB^Y#}wp)BlfqF%)RT$ac7#>c{Wt);MMj=e2LMRV9f{m7mleIL&v&ubw3o> zqYJ5HPA&=ByxH!0m(Kead=^(*HHmjy^|Y!XwwpS3)h}ombdmC!F&xfrMVc7?d}!F+ z6H@z(u4LDheh>nPtGq_@*wfT(IazydA(UDl^pEVbZp1#MK#=sW+R z2Cm!a6)xh~BuYpW>r1^_(aAORCAeC&_bI2#eTSZ7i{lIG55wXCqa-AXLzpHvts10v8CuedtTS_OkLc%j`juXf zUOqdlc(*Y|!lv!I{P2g`d4Yr-wk+rFQuy$h+6a%HDXNRwzdx*Xpe{0s!tJ>wpXueF z!`W=MEXlhV-}TgmQ#pxn)IPf4d}R$6^W97g94mc}%wE?42ex#UhY z$*kKI5ye5tDz^HBW8RH*k&eQtjlXnXQ-K~F0FS$5Ki>9BEzsu+4?wUC)T<60yW6mP z_L0p=(65Mx&FI$gyZtxM50Lrou&vnjt>+{7Pam)7{ycKG!AaUl=az?vM)324;$#3T z3HK?0{n~>Lja_jIF3y0#L3^wJy5GbY3~uU{xW1Z1k27|>s<#1;MK%PO#^^Kqq?L5g z28XjUFe6Jbne(ryIJb-2!OIYtfrYtGA?iCbAF`stN>J_$>a2`7K_Pxi%Ok8nSqs=Gu$VZQR_w z&YdNh#`tvOhvr$jF#KT~BIj-5gYO+(Ozv`xmpibx2k3&j|=au z_ldKu3x8M_hhCYMpB-vk?OQ2nISX@dhbSS(OnFT+d9wpB10PH~stqaKuZ8p$KNg`b za9Fl#T1e!+mVr5(%v@9lzg}ore7(P||BTFP!@gxPw$W2CsYF=meaaYDf*kgT=4#$4 z{<)Dq&H65TiUj%o`sB)Ox%xvQ6IQu;1T#U91DNhhO^q9v^qd38a;?kntWwl;ySB02TNv+S{3sRVNcIjHfaO@0-BnWHSbg!!S6T0u^n#Wbxt8Wl>+itwg_{r%)JKGF($wh^C{ZYWK1fvr?ix&ACUb9hDfTB^#CA9l z0l(ws(C1>RoZ@TPRJ>2LGD@-Tv-g843}GtSBxWUVfUz#B`?GZxpQ(OtVe^MpbR%@_ zzwH;e`GURJ5kcSJRsfy(W&@NA#s?_G$x4-bEh6bE5vd0s~Rg(J-IYeMuh0)GIG?t1|BK5Jspv&;05_Wn?Vh3gU(Hk#p0D>4f-jzSU1lHLwz0 zw}~$9@SaJYPo(*VsZ(sqQQIWVqZI*avo zWHe^W0@hKx?OPSfU_{?tFIM#Wq6Q=QyZtIOAFgLD0WXY?K0h}CxtP9!^zj@#$WzAQI+3zGO&HpdNIgJYlwF zu0F52;mwEBl{KC4+2i4JF_fU_z!e>Rz_i|}CAQ&oqBDW+wKt#iF?BUJ#s~zqJ_;jPO`fJ1agR9)m zn5b@>@m@?-A12MH!N~CWM2AnMW_pN3ddWq3$5XH?ptlUnZ)z33Lh!S{V#w?gge%8u zf{uqAKNyHrHRAya>cHf5v@}+Ny!$9gW-x?+Dy8v27RH6*Axbi~2EThLj@>Y$m8hwU zVCl}W^G#LF<930J3#m79T_p-sI*{+$vJt7|!hL zuT79KtmO_P+UomclQlV+hkwf(; z3PT~Zv-I54PZ*^*QZyw@=vvO<79IFZ>7>rRu=vWT-_0^{8{akgO!u7ou3f_pd-2_r z%UVb6(sT=uOr!cS*PJ7%JduJ{A&w<;7B-!Fj@1ZGylZzU&ch8!5BX)Pa=C)ltiB0` zTMR>9T5+hIvjH6=he8tbYJ7SyVMw*UhA71!ch7&8aFm$dmDO#Qs?6Is-*jx=@oE!7 zMh3Z3c-oE|erZTZHLjDR?!hu9cJ(rYU?WFsHf}+$j`ns*#LFE!$QKl^$lR2F40%Sq zG-#GJR9lPoUtK9f4_nXGeX9r3N3Mg*S&Z{p=SF)UVLFTBT(QAt;JjpoTpHoy68$o^ zUq|$VEqurGvn6S7;a{ZZA*Ex@;=7;pwdq<;{IEB#S0!}Jx>C%Zq2i~h$bJ>TN*JtW zW>UJwErXnokoC5ET`;B&$DO&+RHD>5>zWBVJ=n$)+E|CZ6b*;WA-0U)PVv8%nL9gr z%9cfI(6T3@#oIf!aM@}o1}K*X>!j|4a^Z`4OdrZ+K~PCLg+qZ@nrn`Zc@KZ&ciZLP zTAYMNiv;1{Qnr`T)3|>VSDw_KLwB)=132X(@J?Zvh)BQBX{icQ*&g%gTKgiJD~KBh=&r}@EJ-&_!$-e=bbEm|29 zQxja>OOVIP&!K;YCpQM@SQUB3@-eXXGn~k;UU41yZkAkwKr9+#^BAGm`bDQss~+18 zZ8#-3Pz8zWpJ30OYp~+1gby!>5j}!oKYzEE2`y)d)hU8frO$}D;a~;hEh*y%N>8Pm zbcG+R2+!qU^oF6Mj1F_|lv%dJcV?sCF(_=#H|Tm7rdfu51CF3Y6R-<8kmnZG|TTbu#K6$+TE zy>4VF_jJ}X+M{gKMWKXi6=8?1S@ARTv-T@d7c?I6y!x`@lg@_Jx1Mpc?fupmp1F@) z-;=XZiaU0-jx}24I{R&?ifV+UEMe(;P#B*+TR$bcI$A)a2##3kTzzI?7tLo2&rhEz zS+1uDu?q9Hzpo89OHsZAcZ{*lor{6YG6NeUmXP<}3w*dzpMJ_;47FT{E$Pu3IxOnA zF*3&v6=*W>X8hnL_NDYbJ;$ZOH!;#<87vix;}Xf4Q|`8^xB*$_8IH3)6hR|{4C6D4 zpe@V0g)En}9bYX)r?3q5c!YCXRcWG^AvRIYmgKf3PFcmsamyc8;n5b$oRsdIyp+eN zyUzp3VPjM^ZfM^qydg3)7yagVtrahfb)hz`&vhskHti85hU}}0+>uutD~gW72(JqE z847-y4^PiQJd|W|nRo&F4u1aqeaot^4uqfn&EAB&rRQ%dtwbh)PBQwQ@hmC<>2Aga zSlU+P3ZqkXi;l8F@`aVCnaeY!9MknMLPoC>o;7+^Y^nqRUe(tAgM2BNQ`h6No8db*>&$xoCRZ>(!gxd-Wh@IDE&= z+6$j>aY+^*T<|Mng}m?IpZ1ws=($&D=bSqJqJ%$+K_r}l^7L3&^5;SryT8V2?`Zh^ z=r1>SsReP^1seSl=SY2V*TUj3#xX)kceWw2sVlp5xx#nX;f^faoK+RxAY|4>ekYaSB2n#pleiP9t5-Z|&|mB|v?m z#zHT}?9qq2#_CJP>WFC8q#s_^EwJbphz>>CzdCgcgR`@xtaWR=vCH!YS9W*^vbxL# zd+TNL`9fy(2bF@YL&}anO0$y+PTQh?tYkUd526vd+UjOw@@aa+wZCmKv6xLIh%b^= z-o@R1(p*q2@+vGaw+9x9SMM>Fqkk?X>?!CR5Zccl8%3+z^U&xVLWTYVqTV>KZ!vQ5 zyw+PY?H*%$jm1^137I@cjpE#bK6o}z{+_v!g9 zzuif8o$P<{>vBBP9fSRUUv&L8(r-Klpl?$1H{bO4_e=`X)>8X!-}z@yYu{6ykIQE~ z&(5`ewN0bncT~NX^6~MIP5-?9bXWGXq2#MyUfb%S!4)6xK8E@K^|7bvJu(GWPl#mA R>;Qih)n{ diff --git a/Docs/images/bridge_from_objectivec.png b/Docs/images/bridge_from_objectivec.png deleted file mode 100644 index 868a8ddb9f4a369c3a3aa00b7a7ac7773b9517f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55090 zcmeFZcT|&Gw>}CsR1_5yq@z?pKzc6K%^6-h;-?lSm?d? zqJ$P&2m}HlA-}l4Z|mOsz&Yc0$GGE+d&kFLD{q-=&AH~9^O?_DFRveJs-8c~aF&dW z?7Z4NWgRlIlNd6xW4BJ9B3=2Mx-3CPcJ{NalF~ypB_+0puFh7r4whtO_g=@wQRwMD zW@thABCowac_)h6Zb>Ioz3BbDqI7EN)9+utc^-N`>dPf2%InwDsFqHLJO{pyI9dFZ z@dV{4cPm?3_=}T_yjuaBtE;I~a{CI4sn`ze`u;R_$`d6;BvWKC+uWo7Bukbc8^t!+ z6GO{Lr}a&Z?8Gxg+TK9v7|uE0mqDkwXV;}Pt(wGP#!tV#B+_WGkdv!gz zk+wwmlKiW1Ct3j8F*5yt#%+Vp-2vm^PtjyIF8&Z1=uDVTwbe|VpRrz04)VQ*zeFbc zy6y5aGPd_olKjCRHlE>+AGSIfR+zvN+=B|LUI?z+RfgaolJ=F^Ov1YMTy8CNbf zkZ=Oijh-E0_Bsi})}E(@2MTcre?Acym=;iLCfl%)Z--@ zp_UuQfM%w}4=T-_E>sdeZA_E{?8g=tz0?rLT&l_zE(aEswP^hCbG*5LuT{>8I@l6x zyuV_`?Yn;uQOASyYiQL?jDcN}2KWcTLQvNEWR~+e&s_@%VHA<;wsl-u#$_Z%DM^>kmmA?XyL+&!lp$CsMeEM%$ia>G&FM zZVH21dXjyA^zww%me2jqX-X>`gF?UGkw)@){A6!-e}H#cKv(@*QPA}_{{M0h_s8B zUobzF_((?a`SwGK$UvI3lgZ?CpRYVSjtTJne(6oXwGHa<7ucuN&)JxigLvLBWS*y2 z{P0F>j;#8Q{KJcvshV!TzDO~9+uVk~>TC(fo> zJk)zj)y^~@uzBZI+N|~s9&$Um+|&9&xwpmA$F)s9%J7`AJGXr%;;wG5XqnVF{Tej# zPHFGh()Lop(pfj=8hY>m*(H$n_ob;D_b0$(>hyTvE;DqgtLtkbsBvQw_} z;({D)Se7~Rk#D|&I8{=R$&0DbsbI&i9#4IXUyPn%qRI{uX{!Ey=b1+GX~U3-Fqu#p zXl(@JS8!v;_j2^G7r;+8HMplG?g#XH&kturFgoUh_jB?uuP@$tN@GA%K|^(E{7mI( zrI%{y$D%aduBlKDgfPCIZ&aDJoCVGr(bLnL(5oigqA%1))u`@tNyrmEE)2UD%0UxN zcO#I4%aMI3TKe9Fd(LeZCD+DMn6zl4Dx+4~=-RZ}SS@dq(3YHgT(Np;?EaY5*hERu z+-cWSt}Lz{^RDylbDHf_(Tp+Nt&HuyZ6fm{9fs|dZP*Sio`;w7FWd1s^RBi(cJF$$Pi8F+8T1X)S5yFU|{F-aC`0Y-rAtb>j*jv+lA1gQ0<* zX(m%a-Ti8vz5J4wq3H}d^n>S?J(kbdv2K@!eh3Y|U(!w+s}eiG%c@8Bu_lizk2Xg< zXIht#ucEu9t!_AxGn~Go%v|7<&hnu_2MotqZWo`tPnk^jiS{zTWbya+r}E9xFBKN6 zAkvy2M4WlR|3KkE!-8p7SR(L=9=~USXn{@v=t;)-Wk*BDLXVss?=?D6%R~zP7Y3TO z%8Vm@z37okD|#z#D;mrF?ip@d?n!R2rAymP7#+<0ZRzdi?egsx+at>oOA4ZFS0%4z zGOP+M3GY6=ClM|*=`d<8dB-qIWT_f+3I}8_iAvJ0(2nRc0p=IKaH&DdBUorg8;3cD zGW+M=-Egq8ZWo)f9=8t?0*N9LhT^xAVo3f3>SXMsxcQOxHtilQKW!21vS2u%3S>6& z)%jh;JNkFQH(4LwcyjX5yivJPeX)44)nmgaGv(JNcE=q)*_M0Px4LO>rW3-}Cv+TM zI7&=-j6=#xD``f>#v{g8Cb-89$FMRyQZJ<)+^d#DTrh5v-@TgAF)=AIt;m-Hun>T88a&~&Z0TCaL^0VaS*=NG6dSiuYfoXS7kKaHqK zgamQDX!>X!PBBW6Pg!;O-r4Ze`KSG8EvPw8+g%8Has0XGNd;5$PcJJoIZwR2b;skC z?3t`!tKb9bp!1aH^UnFQI9+KFuj6}8U3`7^UgQ3~p4PP}XnJ^hqjpN4Yu}l^?LJoX zI^cbCj$%sSNYiwPE)>yR-i(;dKwN0iy1D(h#uxeUx#JzPJ2S$#68(-senUWNF@E)I z^_9*m+%!V3g%{P|?xvm+S~D58jSm>lUzta@BIgaa_o*%6yv{{>)gi zRx%^UDaSGgXe{V-66>DmKOR_i0eKBsj?|?WqJNOE+u7JDo_bv{#q)+bpS`|;;LKY< zYn+9QC90c+?!;Lt%4n>?EqTa@1k0cHZbx?UGNirORVjM9IB1Ur z$~DT(%0+LcZ4TGtd_7kQI#Ewtiuy}Sa_(o?sSgE%SHYFoT9mVFns?gn=S9|Ph3TT5 zJf}jT{2MYMa`B*zz4uE>CJIt`J^x39XXqbA<#kWgOuVMDeD-lTb_Uf7iO=U}gZeVg zsQN~Fv)Vg~I_Ep3i(g@-XlZHz;FEVjGp|3>q;NB9il+)o>bobp)_kP5Go6y1jvl{m z8)3iZNNKa;;OV452x}57w|48+OVyXJB`~3lzf|XJRWEW&?=l1FBt*~=3!>@fz_40}xd@aZ^T%h)C1=$v{mv@NJc}3 zoZ!2Lt3GZ1Qc?!H!CzVRi^5G)a07&%Bt$Vnspw=;_Ot^yZ>M5sD%~@M<~@zpjCBJH z{}7|S2Atv!)-r(sOFFM^gu%z=CcYr-*>FtF@qzl$4a+Hn#Q?8l0v%8zz_3J-7`t|p(aawxW{_e>M^l!CD3JU(b zBPb+rOYoO$(yOvRuS!3(^|Ew$q-^VG=>#J6Aul8*EGqlQ3;*TT?=JuH>f_(9iizL) z>zjYM^Y1rh1%GPr7mfa9u0O7l>?MCzR`8eY<=i?^d!?c?b6a&gzkPpy!vwWVlTZ_0HNNur!$pOF@iUDNg$4;ES_>TtvlQfgC^_1=-AD|~E2U7+f`tFI-Wyi?L2?n>+ zYVI8_{lp1O!C}4r97pe2(p{r39LVcOJaMtN^3;DB@4qxqcCUA|@OYMUGeWB{Wa$xluB7Da?xZMQdrCEHW=}?v^!jB-=VVKbu*q>ti%$LgdPPP$fQ2mfi4ZQ zn}b%b1pDoPTt?pnUgBGa&NR3w`fXKR_-wA4;s!m$)dCIJACkOy&DV$l3jjfw6l|SR zjM&XrTVJ8`ykp0dTAJ`gyf%}>$KpW36`|s%#Hxl8T%ANaV(y^)ctKVkZR6ZlcFXn_ ztrbiT=;C55>(@e#aQHF0Cz9K-AYYCdMhmTmmraCRm2xxdGePs;xYN^K>9A71IsJ((NW!B{bkeRsCM%Bx3U?Y6jAZWTj)5;vzb;0# zw#SOEck{qN?K=RLA-ijFtoIR7Mn$0+J-fH>W&pFB*VwVpIM!Wnjf5lv#zegJ<5el3 z+RdunUSs)3M!%fGqx(bCb?_Cz#Pr6LVW4D_6V|IwHVma-06G3=S2V5qyl8-?vtIPA`8rRT(t{~fVOyw ze8F>A$avq;NEIzi&w7Pz1g&_K_gNKITIw5v9Eu!n`7h&Ri=QquxwPK^KoclK5$`(n z1jE$WFN6Y%9$&Pb?mn&+Nz5%4-|+>|44y-bm0agS`6}bL@P?%k&NqAolOoegG~jt6 zi6Z3!PRui$jGe4fKKh;TmX5p_H9H%;?o4R77Ry$TTDrM}Cl33SxcB&+RM{n?LYZ@+pv9g@|4xXgyz6Sb zWd0Z6!}b`2ng`krBjQm^VAh+c+C(m!tWdCArJ%Z@Ik?cAO4Gm$vw1(U#Y#le3+345 z5kkg<&{ctADpjg}TS0fx9RTJO`jM|{L?#9K53@y_c0~~k`pfDb@}eK6q}Xc+%VUz? z2SJFKh)2BJV!HmO)QSojvqkbMJ4=cD!b_Q9z@3*Ns>EXJ@aj!I^zEkZI3h0kBVLnx zuc&iycdSX(a{sNS8)LE`{pQ!TzWFqv@=fre0qt}536HD2MJC=rW$92OEsHW;9||xs z@livGq*0do3<3BwPQv^P3>H4S#0Y!P9ff-MHaWt-*F^|C?4nlvbxvVuMemLq27ms( zM3ZOU_mvyC{UHQ;ZqI>9EYsiJI(o2Kzo!|H>Max+vtN$`b5LFNdx}BEK8vMOsdU1`Ev!2%Vk5=d6NWJSzb_ZvOlWfN%gaIcYQ}t6>dO!h&Lo)_KO6YKa9%ByI|@9bAozSWwkS!3~W@f}vVX6453&NaR1|#^L%VE%a+nhVkm$71&-GrIrzSPQ~&%rxAvN5+wj3|k$kFF*fpIZl1(yf>y zpR1aC`?Sa02P?QJpJPpCDk!ylFo|OYBf{Go>TB?0j~deLG2^91m$`4YJg5?lRBxyA zD0*aDeoo|qU^w~yh45&7K~arcb49rzY z-kbkepUWHS!Ghm@Bl^Xm|pZXA;OPi*S4frB7QBSDs>y07og_lypfY=%aM zSw|E^DM*zIw+VRfbu)OYrCdVj0D}#NA_jYNE_`reH6lojH6%Z&d!JsP-XsRoE!DW| zGaNmu@#VbWWCDZs5KMZ_8YhKO%}HAJR%z>~99cKgXB2~IRc+0Oc4vxbE<9jK;8$?E z(^YJMv2KoTk2D;o|xsnw7TiW4v;K-}{n9dfrp||St4qbG$qcXgN zIX~*7y|BGYQ%!+(rgZg>h{2LL&u8$O%*%%brW3-)irIr}$lHr!xUF9lCVWSRJkF8e zeSt@MM2leUPwD_0dzX8F&RTbJoijgJy{Ki^P1r>THRa4z;oDu6bho0}78%2w+fF$R z^yHjgqRX<1_{b}9y_|*?9>3Gl2V_|b{b$Q3x z``Y=$6R;Nju?P3+lZB?=B+8Z8;gK^mI$`hl??32D%-jn4;N)%NvfRBIcRY$g$X>1A zlrU1l&{NBOfM8HM8Zs!lxvxDId3VBh=|%nYB5{Kjy*PaFyqYF`@I4+8a2>jhF>qpN~EQDpuzW zK5$u&JjvwhRQJCUYdqf}Z2xIFEF)znFMZg9IPA9&DO;Jx^WqR#L4GXaqRscLDm6*h zT6^VldyVg1=Hkz^Rd2+OeBA=}V^I;g*!p29 z&e>BK8VKrI6%`__QTXwPsSq)zZ86v3MoHe=NYEgClpj*ZyDMyhwlG)2Geq89CYnhL z)bSRRXBJ~W_g;vNP>X6ww-dz@=I0-wTVPzyY#*z-Wx-z2OBa2E~+bp&(alhsTFzOsy~(8d?T1kP})Wrp1V9k zAmBjiD^`0NhavO8s{U{Kc_-z0)S$Duk;ZTpK^TKKIcs#c&LVl@*!FTW}B z7j&w%)=U=8JgEHo&N*M+69NyE z+UWyBY=eG}S}>8X==>G9?`kag{@Vtly|>HpF8LFBS~I*!HoKZbO3^d!#wzZ<{ETIh zms(mNu>jh)BVK&Z`jSwCHf$-YEOLC%^rFXw&X!hcU7gZm_TYS>Lbn5j={)9-Mf&3V zW;Pg1y<`*GEf1KrtPt}jusU!S$q^zq!HYNrfe4c%qs+i~y54EY5i;0Lk? ziu#fYCiSx&K}tOdbbJ7>Yty68^r=&wckOHhPC<}HV}j?+$KHB9+soZ8vM+=dS3=v8 zJ>grBdKyMpz1Z1)LIGODuDf6Idn?f1{iCiKqJb?(zm4LsWN})QZA1PTu1#|*I@Cb= zf^^O>748*QA$BSY2G+C;klnBTqAZ@tqRk#sZ-S=UZ?SDNTfH*!cK2H;BM_mkUPAu; zYTW9klLOw3qKAHWugD6Xzx!p)KQf}Nl~&>1dAXKFszRz==aH6Xi$QlaoUvFg^YPU> zbXP0@v|49z_cb_}#URh-1^LpGKq6rlwoIgXrD0@Zj~7##dazf{@~#eFg=3(*zzooB9T`uycZhCfb=)nk5HmZSSYH!-KCnW@YNVV@oi!R>lJK^;o6NjWuvzvRvBJ+W9du_T^C=%x67|`gCm95Z=5fhmR7KD&-~` z9{al?_qsp!9K8D6Z#@%oRk%vio)Orl6nh#egJ^DUi9tPGE)2-Mk8&(b?Qxo_HL!HX z)+)tK0ec*rv@w&O&(0OzHDZ8{>=rJ5P>`crJg>lOlyT#=S#}DIP|h;`!yIL7n|0Gh zyY*Tfpe;w1lcM=$@#{&`ScEUCe$;n{rEe`wP#LEPTj7(zzNjTK7&4E1t|1kGH%$y! zlrAvG$GA^izTkf5pJW56II&?qCNudS@CY%ugL%fQm8Pb{S-ddBa9s9j&ppkf_sRyvhQ7o4Nra;Us8w z<(sEltNI$+na8Ixmqx||>HjeKk-qB>0Ajn{%d2ah#j_Qn&&lg=2+doF@bMhAZh2B_ zVJSUU072s0#uz~@ov%X&aHWrnEr(#U;SRF?Hk~kGUa9Pco$~i(ymfFP(?<`t^?x26P%0++DUBARgZj2M)5)pBCK(p~DK+iLcS_+7_+HE45tgLaS?)EpqrKx0&mK|a(@C_^_@b3Js{em+}_!igA zMD4M!b-RcdjRv`GmFCKZy?c1;h`fQF-oZg5tITMT zJ^OiRa(QNM()j~{C&GeaPBv>k`pxXkUHAEK^m&X%gi13BFu zKWK7&eodEKF8-C?ru!Yc$-3C`EfE+)Uy+a9P$%ybaRssWf!orqoBTPkV?@)ze9i}l zLYAPDXZtI2zwNV{+jTU1fx4RKWYJW8dH%4ahcyD;*Vb72_-mPc)F%~+Z$%bKr`0tS zM#eKYQ8sgzdl1Gq7wWYo)0(|+Zi|Z9tGOh5+UTb0Xk{St8=ns4iY1urFxPCq4g~XF z@NiD^S}(0^Ow<=_S;>oGK6r&h*q_aqflw$D6(_PRr{t0#=sqeiO(Po2C6R|Wx z#rkG)vdT(7-w*7#kaGOhE0YXV!@l9}YJU3uUudk~k?JFR@93y?ie1-6u~OyI3|xh* z7DU}yv==XSp*d6ImcPYKzH08E!4O=bk&iuw!9zuP{_%lWUi}Ov9cCJp6TP|=>DzoE zM;mN1nRp^=V6hD~lrgJ8WRL*GXq-Dml`FP9SvIj`Agv4wd=Udv(Yv>ht>r-_tqMCB zyO7XsWIzy8(aPD~neTOGrt`H59x9lveVzzis!$zF#wAwf_WNR3t6m7&_4hbyWamA} z+pSk69+ZnLL+q5{%LY07)ke>yGPTp(?Qw^L*zsfh+-ZPXz=S{VWPz}=DSn}nGW}WO z_a)OuEcQg~tE&BMwOb0+R@{q)BUF5b2Hvc2kCkfc516_=&z9%k&H|so*R@Sc#0_L2 zo=qKQF(PZwnZB_N6ymXCjZNHC={H}uA9bVgewU&fRJv2I28+8#^CoTz9$KAl-cOrn zsvbDKBLOqH=t)?JtXgcSF8;KfRi~ud__7Ghu1Qn?geg&2RR&6=m!ArK+dxlwuvJ)v z@WeJwdQ+CZQVCDFICB;3G^cj_xDMN+P?V=E%MF0YYrQR|Ih5W~giw}spnfpQ9jeG5h~pTp0GNu2J`}{A z*fdsDROq1#_;G~zm7iM;%v+gphx#Pjo5f?taNZ4M=U|76e-a!J09lFWuID&RJF-Ao zx{JL%TPL6H9xlFD`sXf5i!74!aP{V@N#aul$-Z$PE`InLTiT5Df|}r=Fa7oX;S`t(v|q<6pip(Vw|RuDu~V}N~EnC_s$s8!?$V_Qz=g`E$$t=<#)Jv64?CD)c-eAFFm)nd;XW-rky!v zRN?TtzrUZWY~zbQ|IM4>nkmxYXBQmiVk(@b7&tjOBW@CY(Av*5fZdS&^WWB9X8&F@ zt-zmCnd+zXrz48$r`6TTiaSk?4qC~-!I{*0I2Mz9$vpnxj0_~SyBJHIA9&6M=A z&tr>U(_F_I7(?vk9)4Tqub?mATe7A3gl6BJpvbz{z*?~w9o6UZEe2IPO`&hL_I~R+ zj%n|$%GGIeq!5&5O*3vIZ4 z%miPz6t-@()N>|f2ROFX({h`F>EbJ9ne{RUBmRe$yK4g~%~36>ZU*-7B?P*5!l`g*(3*;^|ra6k7^)+ei;nVflP?6>X zd%uH5Z8U-rlI-n)#(BU)kx_6I>F?_Jzb>w9cGKtk zv_{k`s6eE%p}hTO=4-U+=G|}XTC!KPWOrMenoD@j?1KA zpRko~_$wN-W-3yr6?sSOc5ci8v+p@h(9Wc|x%e%AhH}V!^}h^|M%$wY7#EeP>!D%X z$*f5+IvJX>0zphZ%Eta%YsL5kc%!~}dJBM?>6WQ`?0T*gtLlr$;0duba0aOS&a+G?Zg0)8vT@HEs(!FMo9HD`(^%w> zF1;%4MI3eBcq93ArXG=(0gtlHYp8zEQ~jIXP*lG%ioO=ZUp|7n`{&#%em_oq)pMb8 zHssp?`9a9-7dsvD?!A!x=8A3;;I6fN%<5&-6@b)Et0ZAgu-UY2Y=25!Jwx=y*n6dh zI&gi|P}!N>fZ^miaVoE`p5XL4^J(1NvQ zx`Mh}`)F&JsIs_TA0xLD#WXM=zcoSy#jhbbcBi?|o;@qDRn#1c_tffEp9biB*IIY#{O?2;ctKrJk@zhd zYy4;S2&CnESRz%AZJ1pyF@koY`Gs%h#0FnO14v5~vz8ccEnmTnJ+Hh0$aZjg7CnP+hG&-iCo0!G_KIe(Rsu({)?EKEh3gR-v0=)+?(6 z&OI8^a>14n$rBEiXZ{>6DU97C<;Rl`f(n0uWWRgI+&uz`7$QM-2RXtYI$Q{aP2CdV z0!Usv#VJ!i(9();kwUDvmCRP9qUkik2O6H~C5z6N*o+jK__0d?6{M1~HODH5=-@aL z>P5)nslFwzh|@ znyp>DyKh?5#0;;Nn>MQF-O-9{we8$CMJ{;FCvYRGL|U4QQ1uEd{&N?E?1y_|;0#OD zaJc_%S!v?1g9x*Xdw1r5>ei~CQ|S=L?|@!*n%sJ+GQ_s`m-2xZw9?q7H9cNBkAAu~ z{lw&QoJIm|Qnbm=%mH>wm>lm0_rW3=C!(2`M4aMNkPGkl=f~C?4#smW;tne28VMl{ zzSy1@-fSxWyC<9OXXMQrZCs4Q!+1U7HxGB=W>Eb(D$~PhDIY zE`oAu35IQTD+o$eWpl{8k46=HgS{Dg`2b|3bkDpJ*X$L1+Nn>On!(UPV$2OeQ)7NjeAz z2b(v$ivV{bKpAXf#W1ar*KPYJ7KliA^ff~!6H%wtrT9%a9|FI{ZEX*_TcA|n=sk8mJCK7PO&G}0%KVJBU zmv&3@Rm1rsur}QuxCqVSaTD!2+rvtS~=Ft`8OLp*K;jTJ6JmV zCtg+LqvpAB&zAhE=|xBv3i?~Y05uu6Vb z7{h)`=l?Y6uXOmY#z#XoZtEpDemS@50JoA+hpFG~`~eGfP8O0MFVEX8eEK6J3^7tU zMZIQj6fU*)RuVTVXe}LmKWi4pxY)dD{Z3`1dkwfb*O9ITCr|Lb>s%CJ4{>AjaMngcrFz|Y9$K^Kd^|wsFs#k-J;NzcLX^B7@n2B zq6G#KfFzyR5|l(Kn9sh7YjpI)Tgz@YvM2b`8B58T`l6j(wlPRFk{y28P@`J7y+gd^ zU4ao|vqLZd;#LXIwQ4aZ;XzVfbWTLKmJG`EFadgcpFCPz)1$H_#d zUQ!h9@dN|)Cl7|`sF|zeE7?N#+XuOyt_@~iFDgDZtOd+^o5x4` zc?Dff`lk8oQrkGgvX9zrUm^(ag{3~CHi@a5_FcbZ6vK?mLe(>xcudHFoSWL?W?%kb zg;Ftls&{t^c2~qu9dP^ZWuO9}7DQ?`-_q2^g|4KZaVUx}&4=Y$UIgVM8Are8NiJT) znj*6cw+Du`STtNk&i9Sma*fK`4&&NlUONSuJ(1}ONaTL-M8;dVuS-;8B|G8iR@!5G z?h9Pi2|=UOBbqTxyh``w@Jk}W`dQxIT> ztxj-9%B=&0=L=!t{9LAPX5p*~@>_dG*|2w01q#b$Lg*L`HU;KRLFh_hN|K||^CNnk z%TOfEl1R2Gi8;)PfhX1B#ldGGo30acCu{T#q3g9RU7!Vv^`TC!8HIz<3=svSk2^|# zs0fAKa#p?Rmj$jXgFIY~%e=5|0=VJ*t2p?3BW?SPs8rfa{52F04?GXMEbqA!9g+~n zUg2cVnlsokdoXiXL-zV?zL~rF;S?Zgi9CTRZok_b9>F?52V}MezTo@$+sNf6&YG*| znsB9btIvRrIH?;rEYQn!3y#bpXU3c7pI{vHlA` z{<|SVV?#qu$dFI0dsg{$|NV#mQQEiq#G`)3hDdTWc9bS zGk!AqljlTLH-kYjqyG;+BSco5X{ZZ8{@yLPqeg-DKS%U0T@w!s53T z$GkeivqjlR1Rq(r!%=A>`e%0UcUYo4D*paF4NZP^>?mL1JVRpeGRJ!9j_M$QWT4}> zN`A8kf3virIyFf@wbJ*3M|D6>GSI1~7QdOKzZp329S2FjXe%YaU!CVKR#rStGSKel?PQoLxZ;e;d|sWB$hh{=e@4%nYqFS*v+g(-#*b<-~lp*W(I^*(Wcwqf#zOP$Jc1KUM$x!9 z0K}GwfP4YOVe%03LyU-$Hf!sNw|`p;e_6qMJR~3r@yRB@=x&C{)uL#J-s8`ATkeYyg|)d2NbOLHG7@o@Z9Evn%Sjd zYw4$e_|?G~hP4Spw;z9?(B@d}-W#(UW~zgU!8L2cHOQktXzTI7W`VH53Jyu)@nrS3K-g9w``nDLnf~rj|E5wH$a}^zLVzZKx?^ zq}*fE_aI3aXIzw0kDac)G1WHgI2-`M-QZ4@mEQl<#|^vMBZppGDqUo0^WJ}@jhn9R zv#gvF!5VV3pp$Rm5q<9wPHhQ$O=HrWNge(F29=&$*3QE*qse%E#Uj)C>xPQkvUdy^ z={|Xk@1BrAY~-g{HFmxDPymySpR-~}FCWnOUDOEkx5=zI%eW&U=7K04E<8Kk9

n?}`lsTjdp|yfe0csB?&EK5~*IvKOf35U4i4@3$y3(`JEPALA6LUQN`%;cN%YXYbNA@1hYRFt|I;c5Dil zp~*<2&~{>z1gbWx*2k+8gb$8N>U+Fz1_BNQt-JE)M{|H?oylmzy)2ys{PX9}R|zar zp3tPlPBqi;q&k60lQo6Qk|fB;PSBmHcQ{UcM4DrRo^WO8b#5)NVuL#+)O^7wVm;l8 ztfXv@N~^;s?VKZ=S2D!pk9y)hY3t4i*@!#>I?Tn95;LT$vhUZX%HOTXcZHOgvuLs> z4j=Iw04cBTiOr~}{~fRVnT8AWNO?6@Gui3z#H|P+;fBQ#KSut)g^gcBDAOUOeFJHi znj?VM9w%vI5wPW0cKGOe|D*hWX8zEH@gKMU-(2%R+q6Qef@50{j_;Sm4N$aTkcOlW$0V99 zV|uzPZrnaR4xZT5PHU6F49Khz>z>|T9jjN>3*O}8DXMqT#IG2_FMp#VYH%SI753CF z(-lRKc7}>=w^z^uk4w{a7Yl`~Fdx0X_XQ*RPGXyUnfH}zAF;BlLfZzbJ;nzmQ8J4h zfXfcAch-_7r~HzEz{6{tKykL-xzpab-Q=HGObH#VO4JFM&6|&hrLp?iEE%vKLHe@^X;2RY^ zt!0vW23s{~_Y-?=Vkf?E%&CA;{#Qo$dm~WxlFcR+Attt?i?LZKETmXSL8sLBT$c8lG$6wA@wv) zH9VQ0ViK#{GhTcu@%mGO=v_hh$`hGAIpPC)@V_X)skiGEE8<3q3WS#eDFdp@ znI#t{3e<6++n6yBbgqu@l?RNPS}K`XPuS-(Xt>OMj_BpKRArQJ0!S{&NmKP=B3WFRm>Q*^PW!kdo}WU;-T0 znttHjeac~NE?gMJP~x%a)DDt^&4;9%DF=GVrCMv3wvud(6+Jk!}`xL7p1L zL5?da*^I}%K(&zX?`U}}&@~QQU=O-L)|LSfA+#N@X1sZw=~IxinC zFrmy=2%S#(^MpV`&x|yoY}JXNogMKSW^rr}`4r-9?723nL4RZqepgy;6^U`BR!)nO z-m}$h9nO4r2y5f|#M_F0W$z@O;fqzRA^qFS(-Z6D!heF5e}D)@meX^hX)|v|BA;*8 z`V_slZaazxbJR}r>F_gRN)bAWb`!r&;wMzN`fnZHSDGW~h*IU+o|yE{Y^8EfRqfCJ z1@K?X92<5Lv`i!*a^gj*7%|`c|5mv9v9}GFi z>wCj|Dj-CT%2xNA$kju0>BUw+U`X#Gztx-lFSm83KSt3H>W}yX~+HZKF9>tt7-E&!}>cb5cpvXsO!$?jTx}cm{;iPZ{ zS%;CM`d9D5RU=u-=)bbE^#^_VLM55* zT0F@eMviiawG)^DP{N6gN)Lip{-bS0CXRS#_ah)QBee~q>U!DxGeVaSpB}b{Fp@`r zc{h(TDJ2aF%lu;j{AqzSc@hf8>CGMG+_YRIkNV1`?0HlNV3Nmf=d>Q~kfieo z8l)oO)q{}r-*fjjw-3aT*vS>$sH67Vp2U;%qfELubyT6YO{y|RvacWZPXqp#+gl|4 zXvMG9{5t0KkCn4bGEkA$U6!L9&5WcUzr!83qjoX|x!KYHuu$0}=BM}TPxf{68izq6jv>VQpWqQVlTc9d)RU2auVB*q#7BE}>L z*QXyH_&H3~xXZLWK)q{pl<10#?(bi%rz}inDXQPCtn$HOb}>(lV@fj){tY?MkCn~bc2bM<=!6H^o zruDup@qHQQpv9>_z#ohSa&x>1cU8(q1G8RlXe{Gsmu~{+-%Ee0F5e9mIy^#<1&06J z)*^vvm*E8K=B2)D<;RPK6UE&JLnbcxA1@G%F37!#;6}%``hj<$G zc&#J35i~IAn-D)lPmByB!mVze{(eeUirK1FhjR?43;{iW=!Uf2+P zu=hO{iNd~cRqPaE!GeNVF=tu5Ha-MdTSK?7Fe72ObxX!KM|r3>$3vOugKOvNoNmFb z=sf-hdQBb^05PHvKZ;&^LrF><#yoaMV6oGprKHp(a@;=k&s_SC@^J1B>9Yd5(D9=N z+jWzaT01`{9)&!sN&A95uhPYj%Df^ZTqz;)Y2gR}q$ohjJfQa<&mWOEdOJy(t?OLA z_YwF1qyB$p|3A)u#M=JfU;A#YmivZXb=SI?eeE#IQ-Tw#CfI2@{~FZvXg$a*SsG`L zPGDEHSkKbQsXAz`CLKf1>MIBB$II@OEDbm-E|~UB*dr2IP3V$_iy~f7pcrSQ{BK_sPH#OO~wKok-!D3c3m@qHk-WKV++wjfV0?%p23zOLWDtxq>&`!9E%ZejB zB0JTK14Mkzm)&A7c)(wnDlaDwo{O6$ol{lu9$OfV9)#mJ)e%cttV{#h0A|6W>8o)M zltSmBak*ED z9gTR!3m|e3Nua^%P_1V;y&SK&=d>J)$(z*$|J`C6x)tEul2BhQ*3@OKET`CmP%#(w zoPSSJq4}tzB*H)89o^;2jgPHU=`&Pe)Rrl=!{+tw!}+7wfET6STc}zY57aRGaK1_0 ziM0;Wf9w(%^Cd(hJldm~aVUrJ%lnu-`I2m)S#YLBEf1uY$H?FaL!X{Y`ibhqzATFm zXMq;)QQ#%wVq4%a1)&-hHNOLO_CI*F@zU77>o?`WVcHzF+Xv`!O-DC%u=?=8(=u zK4qu7yIosY9*x<-#0)I@tgVuBoEpoT6;7p8yT?Z>4v7{=RbpC^mLVL8ey`HxaZh?t z!r_CssR*IkwbTy4_w6hx%Y(MB%5CTy-ZS(UhjQ=7U{eOu}QzuOi zZ}qAA$tZ}giv2z@XX`>r)*hE&{?+)$GSMzgivKRE~P_2g(w| z{QV3w&jQoVbTY(b36oS9WXZ9jO5h)FC#zlC%Gs z-mGl+>-47HFzK)PV)Cs$zJH`QyScK#(-=8B&3$+DBQlR>x9*Ip5FGywAktBORNP;B zay$esa*|azDg1z3&S6tKzN}&@nE)uIk*zT(O}T&4#IR>Le3TFc6s#O4{GvUWjHra@ z%TFTOlZ?o*a$=zP33mn0x{V)aNvLypbTdEPc6Tbg@`v1?b{&C+F`bUR$OehD`Q*ylS z>O)RT<+URL_6m-HKFE-u9@f0p{|uYdm~r}z{Ffq{z0=Y%H6zv;aBBfwvp zK9u65ZcYVWpb<$2{5_QaF2nzSQc>=_qISJaG7h5JunSK6>^f`G^w_OUo?K+W=|B<~ z<0L&lr_~jHOM&_A-tKOD?6aa+IESyH$|dKhYWKyCw{dC@##Y1~Yz8Wso}mckgEBV4 z(%97^HRW44_U)W*&VW;A&i&PkwPw1&*E!)r!<$`&$6)WZ<@v$k;aJtf*{@pdQ1U4j z_lCnh(Z$J~`FClgr|jOp);SMT@HF$WcI+|F7=>aeF3IZ%)x9D={%!S>qZ5%v=%A)s zDqW9JsP0iJpj>;Q2L_9bX8!N;_*eBQx$}HGpg{q6T#Is!H){)zT2sbLcXAx<^13zM z3+ZYoAa=y~?Z;`sTuKg?+D4y&!I5PJK6*m+t9Qp8551&qMz#j;LCPlGi9OpW*$sEC zouc?zTNu}D+Xhd(aFyXm;fAN=g$kSRkan@Z7Qk-4>SNUHL|7alO;G zh{aAo3>T74Mh>ysjKszFtR>Gylsi{HAQlYDy?&&S-%{@cN6Kd$dzvKIeYGL-`zD24 za&?gCtP#)K!HNc*AaBk9rIE8w+502kFtColx9o8$%~)3>t@Z74NIBMcc$Pg2qLF?@ zxH<3&?V@n)o$r=E`Q_ zZTuWov_>412#31hLDcuGb9*7ipY#K2qV+$n<;V^N>YU9{%v!SXHCfTD=t9Iy#@DW^ zr$~K|nVYLDSPD4GnZ7mGNc0zmiaEFyH`lUzJyEH#x#o#(sdt9vlsQk`zNHdzsma`H zSz4O#3)k^!L3%}&Y~t#e|DSJKz5vvayq zwO2I9)x;QX?(yojn2mJnfIB-AtJ`xF6ZyAGY!Yg8B|5twKSFnyevTJ!9!e{5v%M?2 zqM7}nHb1eTwMKWKa{LCdNkTZ*p#?ubYPgNcVITT$8 z;4nD~4+ps;=~8b}YxyFQS^2f(2yo8T4_Twt7}gIg-E*5bS9t?#x9>&rzwx<-O^4q1js%+wb@YEEj@$o^l*5|yS zKnPnm=5ClULc%bF<1cOZ4|}%OOV6huDAw4kDYk_z9)%INQIpT1R%j7HC`?B+kip0?SYL(q`3)kGbyZg@8t}ZWs z=8re$*HYXs4!<#V+kLS&`n+KDo8n=Ik-H`R_UY z6*m2=A58b5yesq6ze^q(10bzZNgq#2yG`Ml+J&7PG=2j%rP&h!o0*wgBPAf7nYygA zDLB4;Cr_fYuDUeO;8VVLVL*E7Tlnt2zr#ZjZJont2Fn~{3y3??QOMY;?(b-cb|^+ zvjNbx2(|2?wS+*A@NB#Sb_hGO%ls@Dzk?mg?-jP9I!TPD0`t$m*kvQEv9Sd%Iy=?( z)IUHBkggdWkI0OB8?Y5~tfUTYL}h22UcHneVJ0KlaGSRI(WNB+CuwduOJ*SozB6}xslZHnzobjeIT0-VkL!`CTTIbiDd2+k$%5GlR z+sq?!>g#p0LioAvzJ=x*&|0siQMH?mf1-0XvY^rlUGrsRucdK&^+LXR5ATB#6GGN} zN{wz3V5Bnp$hw{?vriGkThC_l;W;#i5=faN3!ESOSfk8#=Wzf*_k(#wW!AcN?cuWy zziMpn&(Len)HMB3A1*Cn%|9ke^CL=)#3DcQvLC?I$3RTWZdyx~|3qv6m!jGKhS*TA zmzRd@@HRL#--Wb=KI+zPk18$7KS3LPDGlRr^(hd%m!|5?_}BFpmnA8*b)llq+Zj5! zK=6mf%%O3F=+AEol_YXy8I*dS#0S zTgR}0u;)hWMvUOvn%i^}6O9e2RI#$U2!|A zd;GtI)yQhloD|X-)z!c!FE1bHtgNg&<-K_C>pb1@OGQ9m;$D-7L*8=#*T2aa7W z@#hjA{8dE%$7h_%zfF;j?JEU-x?~ePZQ);K3N^7D*h}~iRKOG^L4gIZQOyng=dAyy zIEHe_Fh|_ja{*1~B*MpJfqbsd5yg0_eYWYG4NQnlnn1X;pO#)cK0$&*|s;;p|2 z@^6s%@1^;7wf$Qne@oshO=Yik zTQ1+;wW8~4pVklsugfL&i}F3`J&AO?Yo`A*@_)M4Kh61hJ=t?}LqWr=Zo@N=w7;0OiOS8sQ{i6Ioen6N7kDm&Q?>*3$(g zF4NrGhu2X>=0XF&XrfsbP?!`$s@R+-a9 z&zM&tms9(pwWU1;qfvk;Hh-!q2@}jg=*QJQQ4KJAnEV zj1qmlL^2rZQn>mZpncEag#-!#6!ACo(a9Srfk(N=b#8U&imx)CP*oqU!) zhsIFf(sCmHC^)53ok7kPDQ@3rD{%a)wPUK}( zgASY*QL24wcY`Xi7%Mb5pW5$?sZ&!4XJLDb*c^0s+il#4zS;BDdW`_WJ63pjtdt&> z5Hsb&d_w&HFY#@VnXer2$JKjI-YD9Bu%}aO7-CPuyU*OWig$-KvrE4Ie~E8%U1`_#H z6ofai*_t1v!fyTtMaaMK!b1t5z1WM7B5s@b(KHaZnEb9%Q^OB z0xhq`>&cCiu-K_H(&V4yo_N%MeeF! zaWeLBQ%=)A<)5B~sK)w?Bm)|Feczk$}Xw#@;zzBS1%=Z!io7MuDTl303XMSsa^ zNMlQhr(dN9$T6?)DyP9;y4@JgbP7E0)SZ%phDj)F)JFXr=X2;829AEfJ_q8{*GoxU zZQXJswB3tNbPeD41tni0^pZj%+QTZUM%O%Qcy}>Q4$s`GrNuC_>SLLrE-#%lmN!ZyGRjkew&d~8f39_oLdg1k^zZ~P?x|dK z@Z3?(szsHH)*}Ov+0X1$eK#*2lR?*cCTawKQu~Q~nZ4?-b%RHfT_OaH8uez68IYVb zwLjN$x-$$Uoyjo9?)W}-F&z1_>-#LMq#1Xc;mS18Cd&ARg~e!HTbw+P@(c$Hb;-$t+%3}(L%Vl{=@|h(U(I@ zoJ+y+snK8Q{L?N1+2_rBN`)$Gh}BtNb<^hK(Y$MX8X6rPYfDR?TxVO=sspyqTk?pV z8G?1wgT}?4qWNTj*<6`N*59hSl8ja~jikkxnD=+=q06{)cG6OC%OegAY5>6a*X{Sv2Z#psCq9o@Q8Aj25z^Zx~c0u2Mj;9;)- zh++(4HDhep=>4fP;sPSCCu zD=kx`wel(?E%$6-CHoa4&@-Voaa!+JMGM}xkJ0~2zk`&!YNRHEr6o>;IR(Au`aE+Z zZ9vofVT4l8dF#!I{Ea7sOLx9EH6FgYnqR!+(|zkt4owMq+D{Z9yRn9PB!iX}+e7qX zMQN>`@@)=rea841&V8qGKL(k{-}@JW|GCYX5vf=0t<=fPO)`8*X$+Q#K2p!x% zSpMO7o@<^aRXKv!Wmkxg^1AMaUxIMN%^dZ^71`5-2g|cI2sPond&HzorvHOLmGsUX zn78RNgx&b6d=NcI9ACo&%xJo{Dbbg5_ zx`$2(zP8aNKtJvL??I`(GC4auafeqY^v6f0_vC-oBJ10lNuvguOAb8u!^zA2O;aiD z$AIt;wsnQb(a9KM(N0Y`++Bw;zCj<}XvwHac0~#Q=J)Rkf0}j>Gq2Xgue7jV&Y=su z2#v{AxbVr;S}y=+6IVUA7b`>T=|gv41k`^G!q|H#8D z#a|pjaxL&%}ndI_{McQ^;5x@CQiO{ z){i&|HQle`$`uho&W}{1o8|soYHperzb5kM?(0dNnacR%=vTVa*``QQ@dy`8$#@D` zkaf0SoIWIka|ZnQc+GJCQ+uf72Z07*9AFWYD85V^fQ{R@{aaaU-N<@Ly(b=?`}FL= zL;PL7b5Vgxt!Jam;}h>)Dhc~TDU{^TZ@%@HkLB@xkUn^ZnRG`t%P5qb7%LG>589A9 zR}{20pcZdb)L%`EUDH}ntwh4f?HO!5((~+>(`sMm^z!_(oj)5R{U)dpHqUx5=Y%U! zDR#bKe)95nAm(=FV)v-4#uJ~172QRS->lS1-kmx_!9ZRy3I;2`KXuDqCBR^PNL~B$ z^MC4^MQwmWJ!Y(!wBe!|54`@zkqD)ClwM}G?`YEU|FF)X+EZFfqrT^(760)ka^%Ja z86CyaYpPM~5T3%I_UNSsda(M@GgnZubjW56>|qz%z9f0*B0iqsr_N{wjN0hXULKo1 zL$H5Lx}U8%l1K0Euz8KFGj}w}Dn659_^1AmKgf9>aH$*1S$Am#OWXk6^|Uw|;!B=O z$hE3^-u+z<)3RXH}`w_ttqeulz zBGSsBs3Ul?IH%*~tpN}xnQvpG=Q2`CFQnY1q10lwf!@+Icxt!iF!t}PTP9R?+>u^N6#kK-%ww;tgc$K{3E_-`2!Me)2>s_ui@jH@a zPw;%6+-b1?O{WETg0PZs7G1oz)~P=S^n~yE8bt?RX}PilQX%yt$1<%v%%dTp5duiN zcO$H`rGjL~r$us(w6So{nkv3NHdRvYIeG61Ldpb`o-jE=3hpZi7f;>N~5M5qWzTKOa3hod?ifZ84kC zvb1AhoIFv3H$FJS0lBxw(uVx^jICJMZWT1W>OU|5eMKX2rcw>rdH1AbB5m= z5)6%~PoI6tIEJg6L>>@&A+X(CKdK#f#>0H0z$(p&7o-_g!J zEP9WgHweYf&Qau9@(?JO26n5GtL1%DX5!R82-%R;_HvHVX~)GpAZMZNO*OBUvr$x0 z&zAEp+Cpy^78SIa7fi-HSrOAman_84>8z-<-1VSUdCeA-1~U#~=IUTz$RVC4W%AyH zMAT;;6`DO-hn63+$j(@4l5`udo?TH_qTXcwSycM4N5ykS$P@xA`|Xh1sx*zuLGNa_ zpGRjg?a0I@b+?_mwuYU3F-%#oMY$yQ4t>`^;!qi3io~p_Ms-kvkP2CM>Ww>mCp?T% zMwWbcsQsetS>NZKRVs+r=2o}o?#&FGD#8nw3gD zvyv4aW&cn-Fb^DhQ0Sm(86&kXwymJ69a zCFRUn#74zZ)6(?8U2U}O+xUcfMKBbXuzs+vZAau>p(c*)hEvi2B&j6CzJn^PqRuZvfhnJmDK8fBMuo!NB zhrX!`hkb&gCoFK4R4LSALBmYfdoT^RLOOqPArQA}%%*>(Fz7o4zMOzJs%us6*tNvR z;4){CA8J!9)s`>z-3%s{RS@TqC=_hTQ+B)S6m@Cpa8p2%o; zxh-?M;E`Eam@X1=iz;e%P)FVDJxU0u^kOywCA4<*VO+=wmN}bcObEBv3zgxp)5*25 zWS6NSG!&`q=#8a?X5Y*W-}O>6iT^?j?PYSmxFSP9jO8Xk=vfUs>e&XI9^(Mr5S=M; zQ*7WyO?HCcYCA|&ES)37RNYFkKZx5&Q9$|B>BxYs^*NW~o>J~Gtm%(Y>8C4Fh5`*z z1&*C;3*=gv%NwXA8C$D2Xgy__u#U=4Ug|KnhjEWUwHJ!o_x+q?v3S_ zG`nLaukpaGa8eG?AZj1j?Fr5LAm(U1=_!-7W^l30{PvzJ#C!BUp>u;tEA()#k82I( zQLv`#^}srIZNHq@Cy0Wi3K$&=7lym_X_!@KJy>|{6eC6?7eVBXOBC*2`~rH;i}4(0 zWV|i0plW%InLY*$Z?D;9oipKty z^rx_6H@KisL!(cnkDzovXU|7{!z6=~|GM~IZ zX}^a2hESvE&_9}K8r)ZfETUcOnM=1V&@sgo$eh{j^e&_m9F+|l+-F9vlPgTWT!Bn_ z4wvO8$Q^W|J5_T*O_hC_R{c+r7Qw&?>RR+&@RWT4hCco{8}IaiCTG}&d`Dw@CQP_f zfw&r-5PbgYqjxn}A~o8#Y}d+KBcd9ych+UM_L^i-7{jj8VXW`Wd}A!vt#==C)Z*Y3 z6%yk>IIKkdQvx`z_oCElkMCoB%+0RKbza2lV_$C16@vu$Gk++EwQD_paRH$1*U zKpsDc&$`VB4E9;;FQOB*Ok`Ev{rR^;5bq~(-`XRz7A9;Rzj{=g_j^{mDv}TdvZL=f z?n#gOJcx+Pq?@ zpH#y|Om%6yenk>EpgvPthAQ(p!V!}$;$mMu!jPN3~>@DcN zz0PW#o-o8Qa=2~aFpCc{(8EbZhjj;{=UPQ)vAwaDm~9YS1r zsts*&f|MI1_A~j8Ja6Y~xk}V1!aCV(hr{j@OD7g`uRUT1ut6a!c$J>6L`3mgXc+P- zJeAsSujwwTl_sigpbIU}A9{YQ8Y!3-R=7xmbY;LKgbj0S!IYC&e5_ZOEEn$O5Qo;j`Z=1##ee}Q zYZ$fP@{pX#o=7e%yoN3l(p6tL0?g|*@fH9Z54Og~P-9#j%7JPmT7cPwdPv)|>k1h= zSESQtsiZBI>P0QXeIEiJxpKh69jxwZkLK^_a8DGJ**MSFC;01DVT${%9hnIt#N^Y9 zg43zhO|1ZelrK6wZi{odMm$JJefl=ob)y|K9cUbSsK=#Q{_Rm6+2zPY-+kTpxn#Ak zwmpSbF~(O`kq74}|ImMGD^j#9;~BZalcCZ6+#_eW)bP>dR;qQJiPbMf4*zmx|DDeE zv1BWSzRa>1-`b~%M$0#HGF#_spN!BLI21RHGSkRRBgT2w%$$@YWh@RRBu0-UeW)3C z4?neb*SHLbz%B^Kl&yJZ`SChWMGG9FT(PEs2`N_C+ixJus7|EP=7 zKeljP5n<*Rc5bJ=s!GYi!fK=2EVc2=V}-=*eU94f%kmxDDH)zJ^YEp8%=`U4*TJ|n z^RWY`5yK!-5*V|UD|s%8>KjC}fxvoWCp8&5a;j{&)sTr-KP8CGwwxiZJoXQz%a;;l z>S<<~&7STk;PS1q6P{sjA0Gpb!qeG(oYn~|x)bh!dUOSDCHr>eJw6wWgM=Ea`X|yD zBy8Xk_^s0F9sOwyA%2+ge#1_kUIn}kqj=|fs!7*4$5y#)&7{3@bA^J2F$DA+mss%{ zWa7Z`N~XX)O3&X|#qx;V6ur8Q`~%t+kB@Ncd+C*wbc&r}#|xZrOyxdQBKQk62H1w89aQT$%$eaCg zxHBZ;Xvn>tz@y3bV#h2cCW>6odc-qHk-u)zawIr+I8?0JGwlw>%l2Ivm<~(aeLZ^7 z8}3_DF{y>+8D6^&;t>cb!iYaS`X!{f`_pqay84o__;6y`e7v>oaOwS2eN|t$B^Px3 z^6`t9y*aSeB8&HGgehBCc5a4U^2PBA{iD4tZ5zL*COr@)p#hTWV)+^#ohR!}Em80> z0~8K4hOk9u?gYeA=Uu~vffogy$#eHxtGDzDwAXDS0Ydt8C`Ms(T!$6(XelrZ3_*b?3_**RtMn`(6X-6Z!IuP}xq^yV6(%BX0q3$?X zVZj}6TJyIMeQECU<%SCBwSeGqMgG@=IYLIeKQ_m9;2?H&dnCjr&ka6-Li}HIx%-M@QH=U2n z*-a~J?^hMII7SHp<23P|Q@E!lJLXf^qGH6>fLU6c8d|HJ8tkps;Pa&R2D-+?MMzCH z-Eq%#|N3^)je|qA^*7+KCt3y@P~1SLIIc#sZ=jlYZ_oD}pyt6NjHigTb+LLR$N|zf z3huA5i4A_&R(?xA?N%;&(1(M`ZldhA&3G%i6IXE*5;EqA)+K@Ug z#<%P4_dY$xBN;0{ZKIb7yUy=w&?P_DE+}~Bvm3(;)}p44Q#?{yhqcYJ=P%>9Wn=Gz zl(}XLDt2{0eRi)6lmd_Y>g+Qr#DzmlD88W9*d0bSNI146ML6A(G`=BLV2E6(NbVQD zohxLtr;ZxkgvG0YzF|Jf)0jiL(hx5PuQC;Y*q?L;#TAVZo7B3v1bj&aTTAppG?DR> zgKLT)+4}Uo*dhkcnN;BplJJ_43EBblMOPOLPpMk8XIeBLXlaD-5laVO2IoEy0rHw6 z6d%FkwB`^8;*}OI{`SU$F=^SoICJBO9k|x67IbhcaX;)!0ipJ#-?0aM=}&tr4-wNe zuWxa=s>0io+(3^(8{vkmv_~I=dU~*;T@#&Y^Dl?J`FoG}ZX84v!y=r3!)vMg;^d2u z$EN+m!-9yz9je6z74r+(o8GM@_LaO-=4$8*DpC?2bE4yDN3Z!5d4LW`*`E_4>-3cZW@=j~aaQG?3fR zbSqfk!W)+CRQCGe+NR7#_)Wx31D^iKmqmE!RrykSFP= zU;EljS)XgQ|GQS#YJ_T6xLJ0)8LV()Et|Qg@(H#TZnLb}SB>DI?0N~6D}R!$pa96G zA_-Nt1{H1$OJmGXRU6Q4Q<~Tpyb?9LZ;2mxp2RQj1s#ExJBq&U5PRZl(Kzkk#i}LS z8gWyGMP45N%1hY^6HR;JU&6sm7EI#VCmc-y)&V5RQ#7Pg!=8zhZ)%`;47CdKX$! zZt*LlL%vbod(OmdqvnW0+%?E%M4|JF?RU^XkTc zH-_o4gQ+Vq(g~YfDYRQ~`c+DL>gTTD7c$BlFjXET+4?#%V8--JdAC zAbb8qx`RoSdlOkks5eb~z#nSZ@FMp8eDn1$#OIbV)d<-s4+N2Ji8{~(t=e1@Qaj!t z`TP+zzS3#i$!@s$DcR%C>h@I+ivsc4d?x&)iN$lMgC(CD0bsEqxup%J2!0voVKMng z{NUAn@vp87vPCv|K{{Z?(z|1G#kh+0p?dgPk}lxJ2-A@fosXeyJX8*cb`K`1%Sh0S zMjkoti6gVQfyE}cqCF9(UpWbK_H6yf10CN`YHf8JW5Wl2j!Al>0+JeV;oc@WhGa#o zDO1JrKvk1B)^KobFeN@;?!`-}zDz+~2$jt->`PHDaMLUqh#txnw-u3Mx_XSXkKbbv z?TOefLjh}ZDYhT5n<{MUYL#|h_slaL-=xDoo(``7PAqf=?YL`og`6g!Xunjli|rwRa`W`mDdW+{ zg~##r4)Hw1<#EJPjt+(=Yarr2?7q$WN$22t7PPLDIW}YXo;qvXi%P#eE;;iV8B!W- zLXk9YIKv;}PjTV#dN+$=t_kO^q}8V1XsdB!Ru)S=y9y zSy>$@Q~;Q~s4#<;ZC{~+EQU8cx`ZM=$1n54Z2W3Wko4*!$a}$-gIDL8 zw8iVPt3?F%Xl)Mi2kh;OH)|d=))i5_C^kkYlJ}yf87i?kzR%-d8N0$W5X;0NjUBhj z4N6-(F(7m$ebEu-p-}f^*J-hH7KGOOl?ozZR9uNhU%Osw<1 z!zGG&3=`JG9$Yl@8)=wZA~X<^Jx>|S?;(T*8)lI#Lqgo$VE3h}D|BAYFMF;N&GEU5 zP4|0!FrOXfH~qjg34ZuzZdfLm8IpKI{_h&gn7l)ToA>`=SSaL1z z+E(Ty;>e7|MMJn%JH?Gd9DP4nyZ?Ic`*##jKBb=#8sywcRCrmroZ9d?&T^1G&cH(+ z>-C**N`Gu%W0ET}pP3P@AyQ|YOmMa$K4vj{?sYV2 zV|>31Qzveizg7!!%>IloL_qe;iBUkFyzn!9^je`wY3BD8I;<0yIZHOGDn4rPL-he< zA|}6aeY1|;JW{pmS$tNHRfCgi;ohFtbKxFD5eHLD(X&UB-}8XabjeoKgAne`c|2Vg zi+DM)+jP)`C@A|mT#m$44j4t;>l?M4bVX3tC~7DhN*L=~k_NoZ3Uy6on%CYiP>nfJ zqLv~9o#0ppgj;}LPjMO}xPWzTr{^uT4pmZbjASSGnx}XFkywFj!G0WOs5iMn@jM5* z3j-dKcQ+ z5pTz{Wr4%qfLSa`lTHK^sye$1lFI++HzAT&nmE$EUDmX~)-O1*bvNY=O%30&IrZm} zmI=+SC%hPocjX0p))=)~`5AMwdxD-WJDF<2weYX--P{mMUeLl@)w#XTh*d=kneD5I z(sjeZf{}E|E>U&s)uoQ0i^z9IAQNox#;w5-GXR!>N?+R0QlB}?FZjvCX`!y)(UK{z z{J1lytbD4CmS-h&Y}7TW2B&Imzj$4GH{;ga`o~CndbhD+S?iVEYm<|++pz=S*uCZT zblq9+3tV1TWqDo?nJ>OqH@$9Z(E{?n-_!6h4Rlz3NxH+4S#d05c^5|gMs7*-T6R@Q zyYov>N;n+if%#6vU9>$LG)>41Z)Nsd$!@HFqe|V0o{JFUd!4>K6xmp#2||=r@djA8 z&`xQ3ZEhJ^J-@r0a85LFCS-mlLMZ!aMb)oai}`0uZdcR_nH|L6|2dSEDJ4D$7QhRM zHj(gyFJqPYEWa;%c<)c$m^kzXUvn@z)X0Z1UTpW7?<}yaxJK=jKZ|CHo4cBfo1!;D zQRV#{3bUw&7rgR|^i5h1JxHzXByZiR1HyU%9*iZfUh!n~kl%30lzXOj5t84Blatz@8RS!~vI3Ln>j7qmtK!g?ckR4(dR%`~vSKvmGzs>|n|lCut~jZztfu=K<^t+N zh4^Bpeu0vwc76%1%jJ;l>+fB=H02-zO1!sx@4nrf`*$lL-BIUBc7ywun2s$?isHFx z!(MV2CkRA#)}x*Jzgs8)6f?$3y<<(Bpj@2mdXGoE6_)GfeD|`-&0MB5Tm_arfxYwE zQ;i9BN>Gs)Uz{acuY{^9|AC`J`oM%He-3D7%gk$0cK;r%r_56S%I!qF0=soRa;U_- zyn4X*W{Lzfc1&nBAd`<5yGJipsc^R_VoGuU3&?)aQ1X-v_mR-9Ze@GoE#dg)cZbf$ zyw(Pg?qD<{M}>WO9=SRdN}p}Gxam@=|E?jggKS#j-t9=xs3at~kpZ_?#l$qXP8G~_ z2iP@r_m*F9J2sl`Lw!Ihek#%nV06_}Vs~s~)JP3zJ1>0a{Z;?B%WF)*8*f)-tZdsl z>IbdAnb>{vlmXe}{nyd+LJcK~=mMt86X(NxWo+kCzgx-{7z&g`vO>ViVQYs~yS}pi zg^Kg?N0av!uyy=Fp!`==()iA%tYOKenc9piY?nX!v2=(IKkx;#jk-?{@&X!Y6!@Wj zT-Q?+>)L+)T2-iw&vbk490?z`O*RtgY|KYE$zr}|?jc!id0N>|eeY~%U3eCj-3)er zvT?gMtk&Yx?FF7VT+{uV&MdF9O8Z)}DqN={ZhQ@ono++SavH9Rq5u%FO}&TdiwlK$ zwNr%MI9Wvak;^gbo#s@}#VFsPz<{x%_gGf%uKx19iQ`aoZ-(BS*FCC%0usJg-nl~K z_hXM=V$=lcDHy-6J#dy4Eq4u5XPXwf)3m(R<|b+BxAuPEh)g?7Y;4KrSj$5$o2tqe z0>0Fd+>D%|g4NE+SQ@$x+WntpU}HPvrAZ&Gg|pd(+--y}^)dv+2U(Fo_-};o>ymA( z%=~C~0NkqZ%YA7q9xZ*uQ%f7+I$#!puf>N(h}w21tOeN$b&o1mc4{?yd|5&dZ>TULN{v{*UX+c?KP}{7U_1(;D?OWbhENJS9-9@L%z$4MA43V5SdMse z-OS&V`<{WjnIMw;9Z?`eg<$5>f0E&|V)n z@dFgsaE1pXr0VqHU0Q3BQFp{PJ*vLK#$#2yL}8L#CU(Pnl?z-x1?#esdNSo(aM{G) zGVROr$Cbk(uo<~MALM8VQUqoSXz^tq@>H3n8y&`PPUiTfG^rtHHD66(8zVUQC%KNn z*!N6tMq|vYmzxyQtVa#vd#{%d_^s^x7;E$=Jqmd5tEX*x6hZJ^IxU8#eLI<;p>V}1 zyU&|1d$qtl5Tt-~D<=edkDkHm^v(}J^n4mJ+B9OPIxJc-0|PfJC*8ts_`W`lL|jsl zDVz0}i6EsVaI6#F5bQs49FLcCQ>H}$J;@cCS&1A+qF$DZ{vxBfCF&54d&7>M%yAR> zHbIlb3764v4=n|i?2L8RE=9Rqv!h>BB~RHO*T!vwDq&R7)_uPIrM5R>TsP^$Il z9+cj5s43b_M-}y$!7f{Cn|#pd==z~7uA{OF*S73R%IlkxsQ@eNWy_UI<0j6?PcNx) zrp)Zyz1#C?jT=xX4f=@O{`f|CZy+%E)&{NS{`YzIb&+{z{@yB)p3)-0A#il79}CwC zbF%u{jl=b35;ghqYV_E~QJuRHBY?WV$F^l0%Z$gQ=_eK=dsW7$Uz-s?Y(D; zA4o8t$<;L*bbhvM``3As<*8~h*Q(k)-To^*ynUr+mlgU&@|+x`m*@@rCxnRk1rjF6 z_!pO4y^AZJeG8hVjP4VQ?>b0x1%?8|Du%J|9)pi&FNN5F?o3O0&D+5xdx30!hciqoTfjAZoFgkf| zVA=2!k%x0E-K&MDt7(i(jB^<-0lbHqZ#N8GLE!NsD+T#g^GdIU^XsQCjE?xu`WY~! z`p&F8-nhr%tMTh2-lnnz@=&H5v5_$9ww7wNKvCJ_Vj$Q%Y5TZ>xY~DZJ+q6?& zj@UfBx|q8s;yC4p0;T{zqRUXsj-D>CB|hAIEsU4caQ$+4L2dn7dq5?&KzK?DeeZa|y|Ud2HMvy~o&A6ak->KgFMDk|!d-b{ zYZ=(t9ayxcV{FsvXQ@f-5@DuR@O(wy8x9nQbk3WfL&{gT!ETcj zywh0MCOD{|_UT9-e|}^)C5P}l154Kej)?T{@{@!P!9xv69O z9f_gv)jbYb%#=A!p`lhL_Dg@>X3>HX4n=hi0mR6_b0JnbFfTv^&FDQ`gKUkBrR{ zHgYo#dCy-E?)|dS7x4`4`LH=~%GAkC5tOJPA7wlEangThR%?z$e+)S21IIGWO84)+ z_8Li3#DWCtwXpjr7(3KBesH02qW3Nhe}QenF<;uRcN&O`i~{}J7i1SGAAE-zueC3X z9@=Dhq+=vF`B&^=glbaHC6?>uRX&umep!>=fPNlsoX3j06Sw?*T$|g%eQZ8|$xvC1+BzUpb zJip@Nj9&@b&xhyzt#zLt!)P&8p&kE+hNx4{b$K@eHVg;1cVaW*BAsh>dgU8@25J%h zqcrtJc=B(2f{9#b`)uceTO7g(zB3V0Tv6J4JWxeW z^LZ-p$p>%cV6AbtN$=&|<~b^~Gr${rYOjr|%6k2$cFwnaE{vSTw%s1`#YjsZHhd@B z=;FvYtCpl9!z*%$%#yQElQx~fYPmuV=Gy2^p;eS`?rOt|@P0d`_R$Z|>N16j6{3{o z(J;e33e$y%05z?y^}b`()!LFvs20C*E8H~MT7y*N<#Ngc>16ecjZ+VS&sRFG!EF}U z=wE-w09T0Zdj2B!7P7k(tSSkzNPSfs)wjT#2QpqhU;4Mhr7fvJ!{9GkEH2v&brP@U zKO!rI%?f$vi>FjZkv96OJ$HB=P8lQWvWNYcKjHj}3U7FVIHuhzx7>0=*`GCtiVj}& zxB*EWIArWK;ms=ENe9xbeNcnz#pgc=c^kc+c+2^oycH_D=}_gEy;RFZ>~77Sgwfs) z3yn!-0uMRNv=*af?57E?sVv!DH1Kp~&^JYxKDDW2KqL z@qALH)2rLGPT6Wf!yoCz?ku6;MGDJ=1`+HR&S@zc^U)#nl%%+E_IZ?d-<1*15z40< zJ*^GrU70DqEh(kf>YPU(=7WSM?y@ua>}Fl6%_{cMS8WGYr~@d*)Al zk9@?=p)A-$RXxrUi&kZ&;gugXS_>Rbg`+i5f|wrWMb; zC&c4g5ccWgFxkqgiUOCrS%>)*23U)v8ZtB=9v^#fDX$k-u}A9Otp(;ce9(*M0*%tn z*UAir8O-7DdIq#rP17qZ4G7as^Va(AaIhAE1dJBXJJdGSTqU7CAips^UKN%&wv|Q~ zlVoltwWd3X8^c_1`hF3S@pJs~jK}ot%bw6byaTOVO1*Q8E4zk!oj{RF@>-3r} zrj;uamTCWAcjpz>)Yi6Z6~Sde6hs6>R6s`Z$7ZM0X#3c#> z(g}z(DUlWkHBnHyfK-7%q=W#WNeGyPB!680e|_uQ-(G9)vwg60kZYWb%xli~9V2s$ z@x1pV-Poc;Maj0(+QQ#>i)_OJrmfu7dOwS5fAgU^KYzEwnkXt*7pJtOKATcfkTvm{ zDWGrJfCDjtV@fel`8MLX=)hQV-AN4aYj+v4_@MErf~@6BCV1JKgh(fTJ9w_(DP+!$ z{R_sIN%OFECCE9kB>QX0F)1l;nk+?a))@U&euW* zufSo!?k@P)4vE4;`36M#Wb>0w-y7PbWzZZVwy1`U5p`N`Q{%V^FN6vlTs4U!iGnN8 zA8%5+qATZy1r)2#t}Na>nV}J{V5$g!#CH1+dF8_;7t@0q5+aydpAB;ZzH&{C5BK}K zk*De}*L2(OBB=zHm%riZpGnZzd zpG!ipn~t!oZMz4nrfmq+~Bkz_WUSikYBYdl=HE2%CdY+Am&$5ysp+|dX82knUs$(>e$ zIhxv}WD_{;L81NJqFI(xA5S!cl|bWSff_`}AqosrACU1sDLYI);~b&8$}abNZhNAy zSg{SWbl1~uwf_>JOwT3+TUT}yZe^|Hiv+U<>S^#anz#bLPXv8Ja;h)*i}Q-CIpvVLALmQDJ~YF~+?0J3Kf3U62v&``~lRq>`7y zET0)VvTFM9>k@BC79SHn_d?>kpCh~2#{VL&9h)SX)*C!64;_U^jw>TW4^&`lpi@^~ zOaZkk*N}FaYChaLfw$7O#8TM3Thuqn6;d973Vz@s&w(~r7(PsPpFQyq^)nfK=1g?V z%pcJc2F2e_M*yeaUzXD!w-z}EN>BA!EX3z0vsWp5ZjQ-kW3}FbY@e4H$1sf;+T8u$ z!@UD#SQLNK8){6rAyi(Sz&(o1t)S-r=y(G2@JYPVR6pkMvwPHE>Z~=O*ZJYScpd4K zrZssJTQuTf2%Ya>Yqf$q-NP=F&E4qC5^TS1eq+6LwR$u7E{i{2mEx8kc>g`=dscbq z!lXeOSVRycftkg`(+lQ4i&UiGD|43CA5DvxR`m=mK$wBT=xK1zu~}5$ez!oJDDdTlb(dLUHHc9Sb-j6@>M(te(b$@-)eazujd2o zSPhXDb<|0-UlnlCZ}G7pA4__VLDL zsg9pJ4_Eu~DbFl(%egNd#iKZXv%(2O$eF8()8Q4qLsr-!x%aHEBwXEjIb^mFSTW?mOY(GFDZq znz!esO|gmbAiEs%TC<$Xh63!;P5g*xj*Lh)GP0Q-lx5en1y^Yfd3INO@v&sct`i0s`sZ4L5Z4gM)rX%Soy0LAFFg2mU{$BLN*EjV!er458Gxa6XTaW9aHal7fP-4sKl- zLBDeyWWS{tkOL(_+Jg2PT0Ss$3FS;6F#?(tXE|1`^U(I{T5H{99Uo{tI{^q{w+8k! zpe(~jKX@O{F`v>hr-pFY+s%w#uHb7#$x|!L{K}~Bq^;Wwd$#+|oRN8&8W1v7yXpN@ zhJYC3&ihmnc_A_L{fM{J!fOeOd(KKLM&YQ<{_Nx-YzD8CgcsE#+ z((2Hab%!Zg?4#sbuYf^(*y^2n?}=4E_#$&?BG+=w(U#FZx>NCyyOy_gS~dpk;N+Cw zpFV{BidXC}2zdJAb3=^d2)ikLw}aF_(Z?0(q_=0NrKFz>JKK`?l|Pqq1>DO{8Zoy!w~a*o zZ{)rlDbAx|$LfZVD8g1v87b2<{G`JABHY~*Sj!_8|^{$+9kILt#`<4mJ* zb-A_r4YTdEI&bhKz17Ij-4560ietsh@Z#gNeE2W-?J5m=rOnUAsY06&Z=Ku_zRRV! z%brM(b?+KeVRN;j--s9ax*8w#j#O&?KSN=~JdBC2a&HCs9?wX4 zvf6@GYLslz7;6o!@?9IZLOW^ZW^u?4VSfBFy-daJ1@kwE<^knot+%*<3o!STJnyn( zOJzULVRApFNXBby4tD~3Zr6<9cjR4)nF`L&Gz(x7r`(5eEG#HIk)<}t*z_hjMli2v zr}Mm!529g0Hee!6LMKxd9)!SKqZ;!~ONFNiM}+3am3{+?pKQ11$D?%$OmdZft?IG% z69KQQQOb(EA&b6{=aU0;YvF>LS+b%$2Um$v zf?}zKQqTsjZcagNT5U%A0a84N<+>IsA8KC;#r_IdS8%<_#N#1vku{AqEH|1bMXY4f zY@k)G-LH%EV5So+{_P;wZtbtHFANl~y*?=ncE9_^mICB*GTT%}i&yYlBh-SbFth@g zabtX-&ZdvK+^|-{Tqor=a!5XFuNGb^8%|dKp#q#vGVR;-s%$vAh@9qMM9Qy5;M7NP z#p&os7kLHftA_7RT`jjS?tE(g6_^Z+y&PASC|jcz^6rUE3D1x(U3K|W7LrA*o`e&M zMP};`%LiPIfo7I(J%RSk`t%g;bM(;*j$5hwQmdh5*~V+6B*Q`$eSve*jUZ+wP(vV{=aO@%$_s zEvM`}VUJA-F=Cr!w=}L|JEMaMi_;l+wTt+TgRB@X^6_b2n@~@{T>HyS0EY^wCWbRf zV`1cl+^*>???tLnricORl5&EM&EQk$yfzH(&>pCFV#VE_8Zdrseu^H(Xf0>i_+Ege z5q(A72j|bpp}5mPbJ`VS`a8rDqJSl&;!UXE4edR9ulz$}AmyF*XQwI$z}{t3fZ)j! za@VKi1fP#M@xB98DJUrX9?@vNU$E@cp?kqjHrCb!duYXXE`lhs*Qb_lw?>`k?Y0lr zWB*7HX>fj#UHH z18QXkCyV=7XCq_T3)@FC{I}DdhsWX!g2<@g?wMH093tehP>2{b7NF}{Sm;yAWTyl* z;i_Jfm49V$$hJd{wbP&t*Ac2a+0m(_fD5fkYNSbO(2ChT^=6s{YZgZ8;y=ug)%W{S zI%NWj1xv@DB{wF&^m}iiR02pzLUSIMXwx9=Dcz2>qo{eG3`PBUCyjI@!SO&RdkAnb zOC5H|NlXu6z41Ccjj2MAw1cPYQnR^RmYeP_<%dz>8%LIsE@->~fN~yhnW_YGcu2o! z?63IgR@4GuJTA3;$0HNt2o-W(?SHPi8U)IQwv}V79icm1VWfu)Dy37~_wQko+^TvD zE+{#Rw|Up21(@BBQj-$=;1)GY9Sa46Zstt)-}JO1W% z^?yc}KDfO9>5+CIpR*)GKl*R@$$ZXZEBW2LIrcxE6X;0p<}PP8g#P-yLk;L;7`zID zhRCDMx07o6*qLf-3u`_$j==Ag0aOuv>K?yl+cp&5=b_k)*ga z`{*MUr+E7=Jni(45~1j0WnopV58;O%P=59YQi!SYX?ExMTSB~ixcJ|2Pu~H2)$%i8 z16Il0A@f(Y5W*JTujdPAH8rR!%`NxbI+63?0e@Mzwc{{q-*>HD^9npU8;M)dK|Frd zG_!^c-{O4A$W4+%4}B_?1f2>jJ}Mt4Ys^K>_|d98NnO)dvMUg-@y-65@Tgj}mQ&1q zq|Ud%x_a1mzrcXI)|+&e4J?m?k^6zK7YrFA{2xpwS){&ubC z=&2fEw^~y=DivDfoihOV2Rvc-r<-cE7dP57HAthA>#skjIh>bwa7gTLt$VN3@I9)c z=LL_g>rAWhJl#^*7T$j)%I%QUb5EmHB;Pbn&F)cjf%WCyPA-NzQE9pEUApfG#96~!Ur-8?F97QjI=lye;*@y+z+(bNw zITZB~Q5MgA*tya_7zgp&fbcawD#sk>`vXC5U8x~88CN9pujPsScR&~=;vk@ynAp6J zsg_~9=E5n>nJ06k7BsV`N4Z7%%Z;oO?USb+Ln4tu0*>C+E$0_iB?Ae>ZVhGo6E9}0 zSL1{YCX)CF zwfu@3Bz;6LhN(baZ#*?H#?uHJDf3%$wQ49n+tDLe6Q348lTXT-^ie7n_8m$8u)f}8 zI_uz_!+Ae$cxCZfmm11+wfP;zlO*)AJ;dnH>)3$!*=Q; zcl*2NyOIlQYe!f}08Mtb&8sM%atLd}0d%E#HqvljAhMD?|C&0{`GZa zDDo}4tA}Z^r8V{s`o?gVh_>~2w$qz~*&}kps8zjQIBa;*WZ1m4uukZ#g%Z}L68Y+6)yD>1|8NKU7K)oAb^98!u%iT1hQ z@YH=;@BRPHbBEd!*sjs;{_+ag5i~jC-r>r~SK`~c&1FfQ=CY*VOjasSu}NCrwCrTJ z%PqC5m)@-3NC0Zxg%51qcpFFH&m*|R(8ePG%eD`C)34~W9l~jW4V^7HOCJPQ6rBm$ z^m6XxJ#zJAMx5|~?A}zwICfuW1a>~Q$<;VRNA1(

~(&8 z><8~ApNWOT@Xagxj~qMuTn0(O2)^NpyO1Nik`w`-bHawY@K#o`V!Y z=lBPfdmVffVeSfJXS{>)S+6H28z$Ef+a0UZ0YSx?D*^H9_tupN+jY%bt#RHcSjPo$ zM$l283|(%H zJTmwNBPZ9Q>76K0cD;P6pK;#up{H|Q%G6?iar`J5zs$s^-Zs5C!fUG=$VplZnE!Ts z#2KJ<-PB7o;kSp8_l)k~bOJWSUKB03*Qu~F%dGMtp<6vPR#p10{Jo#-*lN&JJaqeo zoC-eVx+_@E%hja=uL-SiYjiZ(*?+OKCq-kLpb*I4BJKAOkgL1uSk)^$fSu6HYj+jZ zn7Lol^hn>MkM)l4M7g<@xWfhQ_kyYy_Oddl-ujV^Nsr!A>D10o3W3ZnJweS~P5PC* zD#Gz+sQ&l%S!H}DR+Q(~C8d^vUnZ4yS9Bf~U3&Fl-2dvb$EZOA+#=wtE9=5!NEP~p z|H9Ek=IpJ;He=WEy*AYkBj*=LU0`~t)C;3Q+$?IoLj-=!H)VjVBR)p%%%IXd%BzJ3 ztz>Qo&om<%B3Gp2r_wytCH%c$y>%*+KNOEg;2sW0s#M~&V(z3qHReo%NEorZK;rr6 zgOQ{Aum#(eJH4DK`*O~WQi`@kLT8?nlKA;BI8iz!7XOGCTsiw}>wZuAuI#I1$i>8J zQ<>&-w~M}ncB9{DO1gC1I`p%*fm)k{((SkWtx($dBJ9ns9W|LmjoGb#us5f{PbTzg z#+hT@OGz?j_Lg#qrRHYUo(IMcK2p-Mr2&>XNs9EWiDtXp!~QECZLLu!_wfv)`DnxP zn&bAFf`>GzE*&zC?dR`d;0Z2nNBq2%Pr*gU|1jKmC^#S?x)lIlxI?b8GD|9OchQz{HVEL1rp}D_v^_k`7W1btR>!U59uj4k0+^C79Gl&1fx1>=V8J#qNRTiMj}nTm_t5g%xK1|ygYEPd zc_!yaL2owWO>ZVuVf+tcHESOuGyZcOBa#u_M#kCwIh)V(1Ig#rN0q|vu;@%mlweK|@V{jZbWr*0L@x;HdIiRAZ+Fqt`(3JL7GF2~X zB_K!Rp6BI%%dtw`VdPW1P}Qt>3vfymIwK!vVMh z`(@b-w?jZrfB1vI+E!-FTNR6yDQH{l{k}3GeqC3$BZ;4T9AFLy1j3KM z(_=%S3Og09bVVpg~Z8c`J2%yxRARhx=|?YHb~<4P+2xdx-&OH!Tk(iTC*? zfRklkCO1$Qv{UN-y!0+A!+Lc~(=<(Q~PJnOwF*}jozNaGRnVFfxEn8u}Gy3I5Iv4JJNEI>9aCk54 zm-<0sh#v&&j-3uL7ad>X)2=(L@%1$i*ucwmzW8u3P{YAer{TQz)Z^HWs-+(;H#uTM z%udtO+Id;HTkD=-K2EHmP!-Y*e4hpPF68;B4RVq$vgsiYD@K2~JlVy_iZ;74x>dqb zoZ#j<4YTzlIR%`w@ol({=AcvEPGHKrb+N6cLr-b{ymtI9v$wGt4)v*2{9BOZpB+!_ ze>kA=q4Lz9{IS3NQa(8FX1%cGW8FVr=)ti!`oukLPX9(y`fI)UXRBHIdNeL=n{P7e zUzoSQ*0}%OiqMbX3*$Kw_s_)Rjif#N42KDEufzZ1&HZn`#V|7d+M j-lw+s|J6hJ0JxR@oBGmM-9PqlKZdt}H{bvMAnLyWAsQ1! diff --git a/Docs/images/bridge_to_objectivec.png b/Docs/images/bridge_to_objectivec.png deleted file mode 100644 index 55fad21b71477dd95a26b31e93ce9067474886b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53031 zcmeFZXIPWV*Ds7HDxxSVpdv*;iZtn+U;_~l73ob0MTCG5dP&4WFA4%ugM##qbWBiz z5L!Tl(4&M-07DBU2`B8mE$j!L=bZQb@Lun^{(QQ*=bo80tIcn%S(D&fH`R|EI&+AI zhUSRI^{aPiXy}MEG_+C&_fy{#$(`V)p*d7%cjd}0jVo8UZn-$w*g06!&|D9Wi92vt z*XRs#-e>CE8@kIck3XEeldf6#=6d1V$0@W&M!VF4MrGC>p_I-zB?R)n?h6tgC)Hfdeo0xB zuD>yJpWkQWI<8h=$`{_Gn-C3SQm}vqz@$W5gI}l!U6$!Rn<>8c^2Fk^8<+!EpWNlz zuT-}mrAiZ}%F;x`t-5#kF~hURkt9o6E1#e!gW!zBAI&3$ERW=~xf2e!ghbgL=4km8 zW&^UbK2Wz5pF|#Y%9gY}^41&{Y3)Jt&G6Yi`9<*z4jK@8PiieJa_YmS@)ky#_LZXg zCrN$1OXYN@RQI{4(r4`vNj(tuSiWe#d)?{Ey`0BrF2A@rQs+{4c^!3C!HB-+NqFk9 zlTX?2$!5_UsJnFQK!pE^RJx=+taZ$f_AWj4`Ns6(@wp$z!=4iF9e=`g_G*B@i!lGkwpo^<0R6+m%k<&bbUUQp%lDt2 zjf}Wl+R-<;Jefav$d$eNv>(0S0p-UW>d?{78<(bA?+Lt$7{n3StW$t5+Mb9s!P+oIZWp?6i9P#nS~^DOy#n&hfbtdnI7k zLwHX_u?qV0@_~4|qZF=s}nLE*vf`V=iOOqc@v}qS&JOo7kFtP?BSq7K7#r6tP7|;MU2!lb26QFqdCA zd%H5@;@coysk=+Jt%O(vIPTVF$z8v6dr83jB#ZTlv14Nr*4OECuNqhiyc1*=V%MG4 zKVzVO*F61fe(jB_J8O9*&qCgwxpVsK;c542`iGp$r6Cz1fj3H;Sz^>;1}<>kWzDM2 z<;!KsmdPI0CFiN>F5cEO7|8BVVnC=Ec5^E95NfEi?Z*TVJ z-G9qeP^^YaZPX5@*A~$RXv4?N+d>n7#&<Fgk2m}c(IxXx%ze{oB5U35!yg-tRopIy4MbYodzxpBE{`ROudT6Pj3 z#dS*VRQegb_@u<@z3Z}J;)4#omU5R3-bqeYE$v?i@|3(xyj^}fywePrSNznunxKN? zIMG|*!`q$yWi(dM;h}A_^pI`8eSkPv3K!q~dO0zgs!!lnw$=l}SuB@W)>uSX3R$Mb z!YnGm_c5QGV#{Ms#|8>>8VMTH8IGBhnS3agDYh{(Fvgah8(8gkD6%W_`q1Qhd*LlP zbZ+2|!&8v#fO|irthC}puXKNS|I7e?zd;{SQ9%Bgf`eP-bdd9s>)7eldXhRz7c0M*%6rd_YnbO#cV@Yr-&OHdQzkDscR2&AyDOE!7_e;(r#t7$ z#g*%ea?^z7t}nXZy!scP#zkWk3K^YVRlq!6dQ?Qd)p@1!9Ib0%W)b1^biNXnk3EB6 zgoZ&=H*ao20{EUbWZ8xt=sl3fPCJBrj1UN)-snY#4^bou^eti*bWUQ2<9 zfkjF&34f@Hxs{p!gm|!cu=;Vt#VfC+TZ4Jk?&y7yYY8n2T#lM;7qyP$tKp5~J(^jW z{wh7}k*QpbTw1ncwskhpRLqf%=#~KO_kVwM>fBV>lY+kO7Z^~xj4Q46UHJs;M6Jn-Z@FO8iGzm%3_-$;9?*&XPI_p2b*%sVNidZn(` zO>kBLh6`769Sg+s1QmmnUxRNt^RwTSNs*A#b4zfk&N}_j zd`M|Hs-N2~+JC&`-t-L3S&MA8g%&t6F9QG&}v>yE6?1cI-49|jZkm<=$8~6>LqY@mokk^Zk z7H$s%TXAps7j&9a9xCOpwXIh01t*W<9~0}^Y?;s;M@sfvP((@OmRlde3yUT9XTPsA z&AgOMgQqEr#llZ{qoDHg`m2GTIQ0s{%#+u<$mm2|G44tsU18?1gJ14S`O45+kK_|? zPUv85;V{yzrQ5T>A^t!eGZ;|is7?Xt$;KT@_p1FyMV(V*rbK4Os@5KGP+Lm@=mZkIZ{=iZE$Rt+M8&!^ zG)kTd)JKrD>wPXykb@&w!Bd(0uP+p+&s(p>xVirN#MNGz+fe%!*A*uhYc6R~Dbb7E zDu=kZxRhM1Y!vQXRr{wq^*?3q2d=J<6vV_lJUm1_Bt@NEY{kUo<>kdLN{C5Fh)}-} z0ed;R-uD!71oQko$j@=ET7!Wuc8^@`oE*8f#=URpiyiT00nCwF6l@f~j+;h)YYzD*e^rzcl@x@{g`Y zzq?AyNd4LKkCuOWDv52a;Exsk&91-RQu(EFNJ;D$?^O=PgrSmXXjEx5u3oz9xd%UV zBuURYS?&kt;k}1xLk^9!6jWwintoOCFyHBt6Fe<(oN{6SPuFV9tbMrUaXRY*ZMzM& zRUKzZk(Rb1EzRfpAUXz%4t)`gi`cq-d#(4Ms@w$6C09wZ2Ha1IXCtx#s>vL=e|K07M zfl^!d@e*6|K0njkX>968yu|STI_KYSZrRXAZCLl*|8#yw!uC*G8+Rj0KynX?EHQKO z`|+JuwFl(~+=Zfpui_t%LgL+CKce56C67np;=53^uUSjg1<|UYRk;g4R9&#AcA<#Y znvbi>!iJsC^uNg9Z+>u9IUU}aA{u{*6O-NEwMU9cF9S!`!at;We57NuymF^R7m*CC zP+p1f3p^|!H<0o)CUTIe)XC(OPwho_|iUjJ2q8s(F9&vK3LAVjWdHIsM%=@zohNRv_`Oin# z-g*~4#T9*j+V9Y^aKJHG-b4BH0r>n0Lb3Sgf!cD-n=-X0Jxn)-3|H4VoEyDhL7xL0 zq>opRih~Tk91~L}+#;<*Il@_ch{5n;6?edo4!P-~&(X!~&cq~G{hrPBm!~K!jphSr zaO{p!H{9z0orAnLOC!|taVN>Sl2nR*^WQ1J#X4trWXsH3h_cjTg zK(=f>rx8%8S>El8Y-O;-TVv5ZGV5ITh#!+bwuG=_{s=4>qT4!%*OIN-nnYwJf?wu1IDTIwW2aFe<&c9UtN9k zQ!Ql03hRfg?*@>swXzTRg0R!$Qo5r@!X#CW8=x(i!KG%!yrOK15{<1%oOX*Fb3PAAZ?9oziLo?^oI}<= z`LCrM3^AtUkRyGSi3}k%73;xlX*PzsmQaVm3QK2SyHDyPJSX5M7bSBohu?QSRl!mH#V7$61Klff=Vos&sKxRTg|ba-j@#$iz*k8 zl9qKuSkPV-QlF=~Vs%N`Lt`=fA*)qXwB^b*rlS<=3OS!?K~$6+G%cSJyy`n!wHBxi zpXooPdy(-#L$<~GwLy}lcG8EjqXr8eedl)aICT-s4nkhG$dtJ}Gs;!cIKkFZ&jo^c17$rBCU-FapYRBj7qMrr z@udfbr)42Fk#ZFT#mI>i2zQEkznJ@wk0(T#6r;)7Kn_g_k(J?fqxgZ&g7Npov%)zZ zcuviof}!#1T8Zx74h<5M$%Ia;70Q#w33C|=z;Y00aiP*t6&BPjrhNP;2@M+wpX3ZA zb@`0E_>j`^3wNeSs{d6dtNNv-8nLU4FHj0)w0pH86GWOn?YK9Ey=I)v=MeZTuX>pLMJqoE)b;>ui5l} zl3Gb`x6^iuXwj;9;EF55Nf196V&2An8qzcQDqj;bk>Md6KP1suY=rp)w{KXYu!4`~ z`dpB#x(2uw)=t#4!G*?K(PfzC0mYh$6VzERa6T9+*^oeaF!b3sMsUKiLH#gis7=di zqG`eEcQ-nHl;WPK_383coOa1TNe>Z|msR#I(FRtIkPF35>ZWTn4DLNvHj$wF;@lM&zv{;8g#%SA9t7^_8_shb12q&`Kk*zKMXl{~lDVD8t8U@&lBCr$DR#ZT zak76L=Pb)VHNYy_wGcd79Pd!z-S$bVq!xm6D~tC+7c|#aK5|siNK)aC8?<;CFI_!V z-5I~pMe;Ul@j+V8LEW$2>1~#b`XUlNk8^?pz*sz?jS!xati4oVEXQLZqmby@ZpDIr zc%xO_29Mv65GsEeX;EAx{}G^|;fS%8;oH=Ro^K_^Teji8Uuo%;;tgSx{5>1JvpQy!owyGpDL|b-(qCzfZ zvor_Zo*m7_ef|E_vXE!zN0FBrtJK>Q2E0(K2tOQ@{ zr@Z`-u3(gy;moEy3xB=%5@^|qxEVwO?pJfSgH5oIb-JtxDIOC~@*RuSI_@9f)m)d# ze-Mq3sL<^yTsysYWA4@a3WKGGo(gb3b6p0c+H8?4dkWmSw~X&Cpt+EpQ5rNVXUmKQVDO{uME#zbk>`N5QFtXV@GKm$AB! z;bM=P^f0UQaPj-*CC8vR_crFu(?ZeY7-9y{$~einH`Qt_a~9d{x~UJvP~<6@#TtEJ z`||3`dv-+7&6mH4@DdL+(sQct@M%>muqbcfe4lJ?=r%S6+Ncz{0S~O8_*#yxHN}l& zz}kZ)88wcV<~y)q3Yy~PD&|GQH|Q)*j5a@Xzo|dxG#LApU+80|iDUi>el7|F3{7$` zuPlS^pX*#oTFQOgm@nR0vpBbwd6k?Pu4C8Uhn$u*4$jYx(5J`J=jL*&-X^^&v@ThAyJUPr+J6ov`&QGO*HlpPOi?GodUI%4{DUE8;5v8;?k1 ze0Y;0`@Cly%bSsrHQ@V5DCTgka&78+on@IbhCj~NK?p|&*6l9cF+s2(EtR{DCLfdgfyVpJI7=&{P#OiXjQKo0*H0B+r8CViyY-N?K;~ z(+SmOZ5X1R_z6VSd*?!fu(j#8uYGK_lM+Y!(YfrWCalq48!PSN8kRI{t)PNM-5{sp zRE#+iIg)9kzTA|)G7n?hi-6^(x-YF(;_c&*r$4i04p)>8n|G5?gTTjTO)T=-EWy z8#@tsb*QMnw<68ruIv7fA9iHjgDa_R@f+PHc??~ZH?;4VndSKwT+2UzXPLTukuH0! zJo7of0e@frXu$NIHp%Z3$_rXJ7ex)S2%iNpyIn+bv0fy)G?;t}AZwmCaEeXVQOo=w z$#Zb&U1U9+E_foN*9Cn&GRGvZigQhj$@uEv$@zZ%kuRm~nsZs_j8%RcC#t81H|K-zw~IZ%+2G{TO&X(dPo1~8lVE*w2H$o9YH}So)@GY34%SVCi_3N9%K7OTe26P7p)kU_e}wO?1N zC2_eGL+r9QeW5ME1I{x?A*VDq7YtjKYMdLF-3*YGPkk5`EO^3279GuwiJe!sk1I1YPzfeC@DeCX(6%u95|GJp1OC!)UA9Ti#tUI! zzWOl>xHyMbcG=xWz-|$iFEEeq&z<`f)f&By>LcqnY^BUEia{s?OU%VBICZRjYg1%0 z8%%}IkLl6O02~RGXK8o5@z&x5Y~5v%A&gBQz+|CJY$b)4vJNvN=gXFbm+0coLo^J& z0>~|u)u_$4Ud}Eih|81G+$xGbrtmqsICi#7GZjfuzy$m4#HG(`Cx+Ra03b`=#cymC z=f&MOPv92fQPL-dnbO)x=C$zwUvf~ngx)7L365bCQDScT6Omt%_c)Kxb-A2Jg~sbR ztVR2~*O!gOvC--A3lS|KXmX#$RjU>R)ICX#(C9hxE~eOfdD_!%>g{VuXRX6N^UuZI zd&uHM9-c!^9#?ln&3BG9y|2zk@k(Y&YWNP2!Z;LFBz=ZIwdPnE`&4&}#1A!>0VP9c zTqY#rrQ`cdy5&VndF2t~**JaMB& zA4ceKs)zs$h8e~4TALeUd#mCBL$YZ_4lVZFtYF>TLzDuesH&{;YsqPu)+r!|&5{ip z+o+gPhG`Dvwei-_a0uP&d{{e`^#*1SX~(J;X( zCsJ5V)bN9dVzmNf?>k^?lExvq}D=cz<8p82uf?9#KK;zc@X=xNMDP?=^dc4 z-TaHGZFL19TWg{FvJI)$`uSL2ntOeBvl-nrHUq1lj6az*O?13S8> z-utx5U-;ub#U1V}k})@~k};A+7~rchFDCU63P#$HTZfx;K05~0@arS#!=s5N;a*F4 zLuu$`7XxHPK-^r=^aqnX`mP&#r7VRZ42%Oky3@chO`)jgp${$R-?NL%>-1Opt~KMo zT=}s7aIjzCd&BqeF}Hz1r=XY?SU9WsntgTqEf+nv!$b3rd+l#=WUsZ?J6R7sJ|!U# z&J}K_y)alkDSdDLR8+w^?2kKxE8R}@%DL+G>0(ehmgG|Vq~zpofDB8)njIv3!{NDo z^yyi9u;xa(UsrRN<+5fAP|xhjQcj=r%88Rz{5FtYOW{?#j&hQSg zOD_FdfY&mQY-2%MyS6#s1}-Zx+JyUoPd8|WL~6k@&6AB6UiE2?WS(HObMBk26xVp1 zIWvGIIhgsT=br}|59;OA9MNq?E6;MSDJpTaRihZ?xJl&(;y28P1 zajsfmlZij5|Wj8@j2!Hgo(CF=cUpCW4cQZW&Ams#8o$10Q{acj3@v7Bw}lJ~pVnlP9M3aewi6l*0IgXt<;09OLS^O-;*3G*|7sNAEj` z=c2Z=@0%~)g~6$5)TBRq4488l`g$)>+Z7KE19wT?tE$uS5*05@sO&=De-z+33KUWxpv$JNnwjp1y-+5R%?&U6TQJ;uQWVS2brOr3goWLe1&_0yhHw+@ViQlq6` z{`2ORgTF3RhF8Bwk9k9!y#P9l5&|M1>~OM^3(heVsWvZ-ASWv2@*MS=E%IWz5;515 zKleu}HT58E&!8A>&V}9dMVzj6P%NXM`d9l6W3Fgaebq!VtBAn})^>8vnPMvzG_-%d zc&ImyL?MbVJl^}Z+GBp!e85cXfdpyP2#A{$=O0g8YtGHJY+MS(O&iIMw^UnBzz?uC zL^@W#NzL)#B(%#-0AV3HIpv!ZZ6OAm$Nh4B8ry5|#*Ywtf2-=4z`b#Z{7S;>U({4< zr5ZRy2pagFgR215v|yB&-igOoMi#^%f+=g{v;n`y80@-!E&O4Fd*RF+Yx-u|NQTM8 zwV_0((Zv22wE~`Ihu+L^=R6$MOD>q`wQ(i$Srtl;iwAU#Y&_Cs8~x3}t=l-gkcg(P8CwcA^*|CHiKl z6J#c_ZzA8DTDZbtTM9n-ZjjkRyydd%>r_lJjwjhQ6@Cq~*8A+J8n5uvNPt)za|MWQdR ze`W+;Uq!(6#P5Bp>peeJ3hi|=^ab@Z7xU%dC_Zyd<|W@g zJ}00WZMESJmU)_RSI=+X)p6f_pd3V{B3`)P@)F)He;G7)n)2JN-&&_Sns-=rZr-1s zRG?fnD$l7Z9724Fx({n|7(NTDakx{vSclNG3EA}V{g!^Tp#mYvAEgD+s-FC02s3r- z*FYlA1%41JsQNzcxlX{=$7O1VYrqgn9KNdr&$Z_h#`*&wqEBPvYo)a>o>R-(gvrlG ztp?)T2c7!oe13diZJ4cSw2spXLz`a|pQ~Jie-?W& z6fZmSLhfE~it~CrXIoFVF*d``@%O%Qi;)&2cEgBKX7FO5Z#Uc1;3LZvcr_`4s=<<=ZgRzFdQMc@0>}^_5vR zSj}k3YGf{)dS2)4Q9|)sY$f-}nsH9RAa@P}zJZJoX;=>z(kj9+xUgN0ujd-taBTsW zHedGW%4h-mHs z*ZK3{h?;YuI*ezJZ5+k|_VXhudVOFBw0=cCd}z2diT|f$xo#cW5_SiJ<*(e3fS`Z% z@>CLOP`|XRz3;qvf^K)4WK9?BqvOM*H!7}8FIJmdb1l1t#H^g~7*FUsl7?+9r|&nw zRm2-8rvaK|={wRDXPXH30`u+X^#Rn93-FmJAnXmfv__qMk+NzgfrDdHoOB>`gkjHb zL^RSuzxFthM0~Q^8i;;a?OOwdt#!dhvOZ&({k#p3JUXJ`^S%=`Yd$Ndt4-Viv!9R5 z;s;1=?!R%ytF4_o*gdT1*DFc@tw}56=E~-VBVN)~HP3T)xpKwC06D5D8uA@=_=jtD zJUR(*KeWz8b6u;_(=urp4jdU3v3XpoSK$ECZo>%N2Q zPZNPdLM^~etJBFV4l~mjB#dJdbape?*|~+?1Nrs3v zZtEgMdkWUd1Y5(rDy-EQxdL)_=MRjf$YcP%w^<# zD5*?5(Fi?fVl8LApe;n0B51VVW@Q;03Ng2M;KEix!1*(YzjgkGX=*`% zsJV`f4s5;jTyaT(m)`mv2A{uB!_Y>3yW;%dn~nsE5P01M;|etq^U_AYgSi@|xN6#N z$j&;=e4G+qz?l1pxSJ@+co(kCmWvL2A1h>+5%WGQui!r9hG9gOyweF3dWZ}cnKhYn z^0GgpTMa67s;EVa{}v9r2ojo+wyt_Z ze(Ot9cU=&dF;vS$kjOiyFOLix>)`$d(|q1H?s6WEl2;3U7E)6V$UM{NpQtR$S< zs5+F%3FTd1&JRIFBaU4Om>YWd;?PeH{W~7;xADKpPsF-C04)WFch-2odhIfkM-nl9 zvfkaB(%vih)1e$b5|G!tD`N0(lAUSZnU&Ky@#3jagxpdPaAYLAi^m+Q0+%4?5?U-a z`3hc3NW;mT*of(Ljz4*}ZQ3G`|4p%$(yp82k;$~kV4es$?iDsTbSV$YQ?NE(QKGTV z27RQN1o`4DzL45~%K6(5Im%M$h>xrVXQHg_NVtJ{P$Bv?bInnXv$ilV1LF9|9i zqSL0W_HSnRPJIuI2stt{vxxj-8`(adf6tb{A-ZMQO%%IxUD43noSdrWHWVr#;D~nI z)z2BG5(q~><8pDMIK&00BOxsmSNU`$BF+LLZ_(4!Zssw>%%Ak=vPqnr`n^P2A^p4{ z<&|Dw;zTl6N9I9QsGbel8<^TDrF$YPh4aENd*GnY%?OC=S$ z*o4)gD~Jf)_CYZd$mZwJG>bbjo)wph1>>tM5OZy$<0_hQWbvCy3$vZWYK&*3vW74$ z`^Fxtrm6ZM&s?O{s_51=BQ7N-ThLqQc1Iqnqt}H;_lb<5uW0VW+a= z&$rpougysHv8s8hX4J-7e|d42{sKH7Jdkzsw~zc|I%@x{2ma&POU!Mlgk1(p_1!8n z%q+ZmW0%B42^GQZr`Gr2o8gs#%Vu^wlV*mRl}y8ctW(5lH;AbWMQGA^Hz)i@h`f#H4r|)6QehnhAV3@M zloQ%pd(K%N-#pOSA)qC(<*OvPOGV64pKP@0D%=W0c#|})Bx_D zPoiqwyc1rr}u8`fa-~Ayt5?4cG4L3GSv3DO9XX zaOl?BMVUglsfC&+^<(}s{WiJ$t-k+Z{(n^OKZf^fZ~5cl|GnGk$Q62MhPV%Gt(;Eq zbnYuH9uOr{lYLs@l)WD9`X8uiEaw(&aGI?{L@8Q@SR z($h*IJ*NhJ^92Xh*>`h~CJe5qR&yO_9*@$zpz7poZn< z2!qOr6Jl$=gRV0=Bb|YqO(`{=(@UO|cx;0~hE60@X??GA!>jCK=g;eo;rY(H%_X!? zA$btGL_}Xjcq*&7Q5uR{L~H8TV5eAhGuxUP-El`9gS&JTMAbO%vhgsUo;{d5P{wB_zy?Y9C4nEASC$w{;d z;klqe<1_jbQE2|O3r0`)ho=9*)_Wq)EVmmPY}(YW_fK2Jr%+=I9c{{Bhm}Uk5u3RQ zW&AGa$R9+%h1fGa=Beov*^!{9o97BBa0^t&=WTyhlRKOzL7 zsQ)dLT|N4|n#tZ0A8%_5d(`O#3!{fo%t+P^Eq!YnM~<*9=s5Pi(j3R+>$J$Ip;PqM zz@eOGXOZmhJ!(k{Eo&v^?)ru1Lv!{6ImoK!lZM5X*Q{ksb8D{Ftxg?p49Txw&F(Fj zj|yM|n0+!VjyVNj9#}T}@(7oyc}l4KI4;w&2CjL=k>pAbY|ytP-F3itXnd~mCgH0l zQp}DUwA`RdP{($TI5UuGos5c7tO8}ir3p2G5cbTZDvR=Olt5N~Oi%r{q5TaRR^t$I zwQQPACZ!MjUjVjD0Pd(it^Z0y*^|Vx#~z%#2s!+`{opA;awoWu06grfMx{3_#V4E- zm?}v{)V525_M}sLlbJ3;6w)S!?{EUNy;d2CU!Bz>ZuE4{pNLc_4% z8!z5CFC5SbgJCyR^L!TDtjOf`)$Zg9q#%D%Y-{g4Q{wtcC|f~djNcp%rRn9Nv7*NA z=(@PFu0+Xb{7d@tH@9!1W`G2xp}Z2p26xPTq5igoM#o#xz* zXwQpLLC}I3uj=o_+cv6i2~gW7zX$DNhp%d>7z^d`l4h3(U-b>O z{Y@axZlf4WFHQHbK_dgu%76+bF+n;kp>;|b(4A_Xm2>On87x7_dK z*>>jqXYv1${5Ea>r5^uL`~TSdjy~%@4)4G9_Ns-SK1Z+*c_Whvh)_<)+A8(4-amfG z&9;I|kPIBArz!@eWW5{5vpM|#CMTVrh{;w#4$F%4ajfaBzK{f1GLMbNn`#5qHn zx!t@rGw;?8STkQEt3nzETCN5?1>zd1$gcW=X62u-RyoHbB)1^p^xk!1=#@x0KG75f z<&otHoKP3y41%=mG(tT>!3}H@X0zsoGM}tU$Lz9+)VggYjHBD@3Ue&jIOV3k_Chzw zxYVbNA$u9mz6>92D<8AStxER)v8A+Rlxu*w^ zeYPnqGaDZFr1yWAyo3mUtye8(&A!N3>%{`-<-SQF?c-@S^Uc9o4Ftw$!Tt zy)VAjsuZj@%8qQB`+yFgUMaTSFCMS^1li!2*LnjI?jJ%XtT*z;k`Ccy;VVl(XdBeIa{XT_F6;*bmFGd1bo8+GC? z>N}io)M;?{i<27M4ud_GSNp(dN6SM;2kLhfg&kmr5DOhvfQ{*MrDvU%)8w;nWnreG88IolnBl2A+pHdfg1e}IeT z_z)wa0iKp5((nOGYKe!MnV%nNx_tom>cmY=8$2;c+i#=c2&Sz$;sp}AsfCZihbt@? z^6Yx}&>OKOaG2Eiq#4PKuYC;8FX`?kGwSaIh3WbK2)rogHy@jdYC)~R=R;P z^|IEgU5a{r@&4tNRop~U46Fer@;~F+3FwFgPn3=V7-5V4#JN{1kyPd2MZH%ARy>O5 zlx>agnpU1Fli5Y*Ra4#kMK$JR^@b$8uyzE$|o z-vaQDVx<<>tcf1y+GQyMC#mgAk9MqzrgphuPObGDt-1bqH&Sm=+dDop?Kb-Vr;PZ& ze(~PS918#1r_6+l{yKj^=_xFcnVvGvjvUB}_-AXmnZtP zr=F^TTP2cO6KdNG?tw0sSxBZ`Bcz3)t0cqP+c4u%rAAI-~h5Y?+;aaLg)W*~urKvEoNX0fb|MrJ}eHz1kO9n;0F?DQqw|IKs zgh1jbMI6f6S&Hmw(`fku-pwQ55~Q_`9t1piG&fe|7i~a8EC`wG27=Q!rWoA1{<~fp z-nG8vi)vJfW!mEbYonWunL0{_mI&W!o%C&T`nAlCYqZuegE|9A?O${N6@X3T==?{s z`qVSqRF~_PC2cNexaU}k>8&eRPVvc(;|#at{vNO{;-o;$C?%qP!C`x!AF@oI4{hqB zvYFzwtB~(D%22kW>4U}4zxBXBgjFC>nkWR%q}i4qQMEppF1gZWMaifRYGZSu>gk^c zY{AqY4!Qq}_P-x)X#BLR$}ijP>cSnW)o|CCrR}VGsYz5bZK)#G-`uv*4C!$Bc{xVr z5N}zi~d(rS?RVjMK!g4 zpW4mlwl7Y`KtOV_Sh0m=GVj^Hz9|Ay$??cTWd1aqe-49s=)PFNpFw71Zv3;1mW5M$ zcNV5<>fpY-Dho$tKJ$M~`_BrqJgHl62q!Jg&Pg3=cPdBnk@dga-*#RzZzZe$t z>#q`36-?hQG|AX8)NPYV7E;}^W3+Bm^ zQA#)BVTy5+^&y&7}Rj`6qItPm>ZCFzk@YtllEH3e;ieJN;B@ADD3&aUsA16$P7+ zuk{I8bEUe%evV!xETn(e=5txKCbgtQ^nPCNjWAfq?7FC3<^MrkQJafI zr})hEop&zFOYcIFCsLrI*-rO-=e}sN&CH&*Ag{N+Rsr3>{~1iA)NFol=oAxVs~t$~ zebqWxXhF33ivJ4mahxgvGzP1~mHP*pE=)kWkH|~-U^QNrI-Ya2SF~*?t z%n`!y3BXz9sPjHsg(`&3E}cJvj1aUI>9P`K!`3n`J@&RbM`B^iKapj}9{)@mHR1R( zFYQd%MgImZZmAL#+dL`NfZko`m>Pwc98t7u?Iiqo`&^tb5?UI^{@;chSpDSof1vfi zvFp^m5=GK>d(N6}ZS#XQ;osR@YtbzO0Zu`)$0&m$(2Mbwq~)8 z;`}*Dz7H(Y!r{26?{xvGRU=$X}BP-1mPO?NYkbCB4$s7U~LS z{G+Pw*3Sk^fc5u zTAjzdiXXG|w@F`{p)cKI}(`O9Ebv*}m6^|F_PJpYokYTrTX!HKp3{m-9+ zD>~xuDwvXSdP78P3lzpq*kxP7wyc-un}NZ*E>`ZpcL8gGZ_lf(d+jds{V8dG3DyT| zxw&m@++TFo8S<7441Nb9_Y|orGO))b;h+8b*1|u=!6^9?RHZKMD<|gWehD?a`p+7I zsf9mrhJgov?iW8|>AqNdeEFw>>8FtlOJuVBskhX-4Afgdf#%15p7i~U95N*@{k9R+ z>_h3BPzAFmwk>Ui1?4B5{|Ut$sNoHi?PADJoMz4cqWz1kE&^YzUAOPx-7M9v!h$dR zpk11sUG;DaGrh^j9e;z(A3apegsqNO{F4@{WlzwNrgIhp9{z0$%)(UI@-ew^>bKjV zeqZ#I`q9G!9*>cK0WSXq<{y`b7G@P+ZpU9gl|=P9)gBEVAnj#-zWIl%|48FiA=Td2 zR+5{3E@Inc)VeY%r9$s<(uv!<{dC#Q22}m?-MBfrz1z=S|JEC-D4F{S3EDs3{HX+c zXvc)8ON9IJyX@>NvTjjv-=SI0wr#reYa!INQ}ZBL_zC%6ueLqh-Mabk+`ZOj7uKv% zSrg}k4Nls5Z5Ot#OkP$rFWrSTzFRoFV*ctbKAxF+W7Faddtu)$tbtQmGdAGC{VST@ z?!6CD*H+jOf%#W>@{@l87F5>!|5xlCxxQCee~Zmu^q3*}LA?-h^uifxh2o_^_e<|` z{^Wq}qC& z`iiy!a<7!w3oCzUmVo$HO~K|&g6v2FZ!v(96j}e(t_xQTAjuc3ud|l4nJ)E46F&16 zLkV=S;NUo4702pj{=e>pq0N-syp=Xv=SPIPGLZldvVWyz^Vir7;{4?5 ztCX$U0>tX_Q)>D4B|<@3B=tv6=9rLS5GcvH?~8+`6X~Of^STDIq3P*EV7>om+-es( zWPZrk&tW(zSk~NY>*Aq4Ud8iKlHa&pG2Cg>^ARQa9X~JkFA>cNzJM!LsCV~(GROO@xmhxF{A`jXoQ&j*LRbzKHg|DfHd)wyaLM6@pKyD>k z=*G#ROg^aNgA!i!eo5jY$L|vL5aAc1HPO@=FRaa{EBj2SOhJroG*Y;6xhcO5+`s*h zE4AX+?${=|V}3+kcIY+lEYGkf5R~ZLy`(`w>Q-Og9M`_B7sK%V#})O4fU=hUTC~Q` zCGDX#yKvFvj$x1K#+_&kuU7AGRre=LV)@gmo&~ODl370ur@SE8r^ z&-)(KhHZC_-g8V_OXyPP3BxLvu}S8H)OYgZBm=eOwF>=a!hk5=kk~h zPUSpO4ml#3qM;&n%B)PS%sDkOXOP4J1%)O@R7@07L@LDr1QQe!LcetGbDq!r-1j-( zzu@_Wm*U&K*Is+AYwfl7we~wl%}R7U?dFk_uf&f78*oQb?0yBAWUEh&MthP=ca(1HPr9hC zT)92e@~|ttR6bkaY%+5`=)6dwlBLu7roMRKf~|)22406@`JMb5+<& zx)F4mBZ)K$>m_DnqkN;%%vL^^bOppVcB$*)e=8%N%OhO9(=yv;+c-c$`f9R`Bc2d- zaV~x<10|WJf{sA;Y%?z}wGVWMku>EPI29Ni&Y?6(qGt zj-Y&L&C2e(3;CA-Y8#Rg8#`qkFr@PothFwoWj-Pvy{0AGc% z%+e7$hG&$r*FbYht@r;maZcDZcSWU{&%X9={yrHPQuXZj?RjrsS%z8uuI`Pfol(ti z-=p6D`p$=IbHxQN@=?e%Bv!89XzqY*_Ly5vD51kRdqAT{_Tp`PxD#(y{?BPT=W#oj zn{k8b9Aj<8c;U0M?kSByUI9#j6?U)Nyxq@As&=6xx}3B#&!|pJ=ws_|YWl`fH^1Sr z#L(L(SZTfh-bo$#ta0w(TvVVQ1Z@vq7q1i!C|za$JZ87xTjE4~zVpwH!j8Qy6d6ih zI&(m3#eA0k)ObL6 z9%qNuOObdk^qq%bXo%kstb}Mk}_sNeF zhj!i>**tA^rf}1?m@l3p*+SOOYt|7jYH1BN-OD*E%}Ta6LyK+;j+>l+QMhUO6xw8A zi)Y3eg4=FnIg+hz`-->;?Dw)rjk*!_mr36_wEOA}Sf|GGZ@-*r_d1GVye3d}{q?Qe z444kRPA?$qQ{bHYVu!)^(l0;CN#wVFC{nGS+&nFn7r%s&*@ZKG555Y>k^W}wAlv|> zRnnxMh!N#2c%p9mmH#oYI|nx2l58X0jBW8=CK)&7YUhzsk%P1W00 zj15iE1km7Yh2A=D?*(6OdiZvwJCt(=#rG|gpEu4lJ94)VUMI(VahWr*!$1qEXBcO; zA1ocO<|op*gWElsZI$5Jk=v7S{)h_eZ8pyNR3S!(Yz9`Alw6=PX*J@iQJ8HhOlHWY zIe&uk+gkHY3#(@wAkeOtN#PrIRGdACf^n(f zP`RMPjuN#UJS&;@%?3saYuApwcx-i4Hfkr*cwxzJ*MW-GB^8^b*vqX&ay~YOQSVgT z(iBehB;1u7^Y-bkSRm)yEoM&+A_=`6o%~X2!x}s`+wdg%11BZ7b`I`$j<_Z98LCHr!|SZn>)f4biej zrw&<4%l>31qYv!1FRt46poUzS?+BLV}Jd%T!d^Fzb^&6yawGJ|H@M7zMF%>j*zn3LzWrcX%~ADr(d00b7$)> zJ4tQ|OnduwW6X)e3!{s7q-@t@{b?h!(TS&k9l*m2PJ?A!~i=Nhq zDC2s|u=ae@N71hv*~?3^k3P<%_KZZ*b!TPoB`zCADL_Maha-1KqdJoEIYsksjA79Y}9TDyUz@g%O~ito6Zj$|fY+OFk}&h32CyYrZ9GlL8Eml7an(%ddG4nZB*Y<5IoQjPlU5v}vc&oek!Sro}u05@7 zb>+k0zD@IpFO`>LFdyTzJmZ8RUb-Cx;PNt=d#_vKGAE)JwS!}lI^N1xXB*Y|YRZat zoLMS$4#CA%tpYS1R`+sB;T(hZYsJ%-3IHEkl|+z^YtAu^OY(d-)ZRQXYfNaW9bMrV z^2pZjMZCpelBua7C(+}kd4t6Zx12~7_vhdVaO+0@8eNvJ>MKRHwbd|+V%CA5loMIm z=wDu+ykXy{?ni?O&8W5R8C!J{*1&V#ZNKz-_7oDjm~Ye#q{UlT}v`YSmQBr(5WAAO#q`D4~OJUQ|pn@{tN9B$V8?MM> zeoEH6_J?qTyMMST#-VUEY`DrqML=t>D%W9Ooh)I@j2b){GZL?7&oFz89S;rx>VJ=; z9<`~_&3E@wjeI3BEjD=O&1l8oN9>`=>suE@*dvaWk@FL6-kC9*mcp;>T)!<~Q1=UK zASy&DeqL#RCpk6O#18!Uq)W<&!A9$#p77liMWIu^;dhiMHSMS_1wDW?61Jp%$T%`! zyx!H0^7hT5Pd}KjUG}91E%dZ-7%+{m+P|jyl?Cfr`H+LiH>EY#ptRW4*}UU=d5bI@ zG44*TIz{O=>aA~}q@;Qq$5~vh@7|$!X*PCPsIb6p;a{^${NTUaIkvI#+{+#|+770- z^Tv=$h{J3}#>pV;qFzL7gYR2bakEZo-a#jymyy(?cOL|w?~~fjl?MrW{m9g-39YyJ zOi$ZVrx$mpPo1@}*|g&~erNCuRpYHyt_MLJ1#B830!%a7e6}*_6krx%V5TwKIU>wY483NXpDu_@7|n#j5n&v;CIv%Se(FWZ=agFZOt!JVtqTI=v!hAKM*2UGb6rTV(H z0`3@pO>cZo$d1#k{aDZO+xk529RsM$Z1b1i?oHb0``zwomb-nguapylQx^HD_$b`i zLtF#U1`dNgUh8r)Zng@Z8E<|)Gh&NlZ!e^-6=+!I*5Bi$Lm7>f`RdRhM@ZSoUXfv2 z`!1aC5K{vOc<>N&u^^YnTqG5l8IxeKV3p?(f&2#_Hn3Z(WKs?*!)0O-l-ox)qc4CfdGLCsgw>+;|6SoE#tT0k(t$EwuS(T_&@P`gd#KP!ZUkQ|HvV2WO2)sz8I7 zcPh@daC9>hi|SGSFy1B0N}thBGhFcLhpyNK_7!DH*@CZHf^dH6*7DJwu+%|R11gg3 z$FF)NV+g3$9a@MiSLF z3nP?)1K=VI3tpAuj0uz0O4PLXdM>gne_|7t!Hq_PdA0&8it{%jxRNuggPE+6Z7U zpCW#-D*F4znbGb%>UvM&>KDv2oF_s1CMnpaj5Ixa30jXJIGDxe($eY2M2*U^&y|fv zEy1@5iw)lnn=D^1$v~z=SPWCWU|t81j!4BcYxWr_o{_rp!)%&+icO0l2)SF#XvqA0 z(<91a*>L!ZTtcCIDy0O)HH-spbN1PVGY9OVHm2HWg;NkumE%UESR?S*Dxm)4k0F7Q z#<*%pp+g#C=_sT&1dA&2f%P->G)5ZvyoD@{#>$uq;f;^0!bbT>J|LCHibBq|o z1sxT8`XTZ-USjltU#GkSp)#uW0rtv- z-5v1uU1SHOzDF4aoR<|`MhJm6or1cFgzv-tK%d~OL%O|HDXQYL7$9K0R-o_*^T7UC zcK?b2DVM!X5)1J&9aFa$(GjB@*+6cjqb|l$>x%6mvR_V0OG2+P4k{PagVQ17HC^yd z2?G{~c%#p?(R1MM!ePu!SK_0lWP$R{@PX6XE{!eB+Mo=2-)@o>&G8{K*QGu(|AY}71* zJ}cN3>C0_33Qa3)YnkgbRe9a6dc6kg(9T^RozOd9a_sK;{Wb5zXhrJ5up{-3Y}L{D zk_f}kt$^da*9^YwF>lZhgjw~z8-wu;CO@3YOR_Zy90i|T9mQwC_xpUJ%VAFMk_1F(`qkdYNOb+$03@j#sZ#Lq=PB@d2^ zCF0@fuO8~BstYGSs$@m9`4>ijowUB~%PK6AQ}Q`s*+2N6*>G9q_K*x28iC=^IGTnh ze*P$HE|g8-`P&1HL#IZ5b^xIV_)q(EzgLnAeX zXJGLJ{Bo`_GVjdz1(k~=j~!;KEGeI~{iE)>j3|%Sg|RfiA9Id!AQP_uIS-qqx)66Q zHJ`hxZJ4^BUrAZqGR_XTF-lx@>eXY3efb@}U(<>Zyq@yl zD4tab5qx_V!ER0B>XB-UNzvPs3AG*2r)!|Vvd&nsmwMxDEp21B;TwVT&C_a+FVYxw(Yn#o)p~`gap&ls9+L2XiFg1VtpnPJE)k*p~_9M3uJ`R3nWpM~!?p z%eIw0&!F1U>wFvF?2UK_VS}`|YVnvIS5spc&3gFm^fV(fg2(IOR#T}IY7kf4@!fs3 zI4(*g^J8`;6D_&b>qQSB*NkjJzdkr|y4;;%glL>j2(%)!7P@1iSh0`}I1x7uV5eB~ zlaySwaX^~QI1d@zKvvDz!h=v}p6+nd@{%70IaNH>Ni{nclxX&%+$-FS@_Gis_MnLd zx+58pDz&xkky8TiMTROg2SxYpxbhS`SL%bm^=LvK=ZgV*B&W4UniqXANk5yRc@uJ- zGumJq3)u~r8cHrJN9o1*q4Y+facEoY1!)U!u~&o^gytC) zTafK88(KV@I6Gd#6ATme#zhyK7fsJfR*7gPh3dBI)4>4GXTfuVYBG3`>NM9BN|JR) zW`li1etQM zBDLeu(Z-)PyqI$~tCP%1jseu-2DOlzsA9rMt{EQGpA@&ABx>fMbYc`G-4szkL!oBy zE)x}xam6rTq3&5x^{wR_+qoS^3##h9P9@b%{$+u4GTjkp#}tFA-(fdZ!sv-cFa}!{ zB5bVo_ni0wVoSZ-t1gAbvffoXKTSW@cwi)<)ADQ6;sC7rd!MH5*h4+#;sTPXOoI}B zyz9}?IqB;a{5ZWCi$xe?BDD<}T-prAE*HeTuWdoZ(&{wG9-fB@&7SKs_ zTt8$K8S3ZhKXUD9Qm;Ef5^3T?Of~y*>sve!NpPy{Q@%j?;?l532i!0>GY)#KZO8t7 zZgp?x-bGx*FMA0Chn|+r1S;!t46!0Ak79ryB%eiT5e9c+vRn zq5UNes{gaqSdtbw_m>M}zV)zW4e7=qqr}D922yS97wP=#uu8DJ(COsqqDlHHsLMFt zf}-#y_AVoAch$DElVv~MmJPHgKR5E~Bg^V6v~Je^sJVnN3TP$7LA*MyOgG&CcFSjg zkypiTg_A+{aQ>b4&u>Cc9Uulkhd#w4QWh7Jkmr&8k%TJmbL;!ppCP^mSUo#wb(0T^kzq^WD{QoN^1&oGov(|osEqo z&{u{6I9yV9?%e66?6d|I_PmnNmEy!Gq)u9cL2cg#1`QLGU5@l3$r%JULe5gb`r0!1 zP4Fif^+n60f^c}hnl|R!=zQqc;7YGhh&UNvxoweCn~{NL;UA6n3zZMCh3{J}b6vJn z%EJQ&r!T1hzS|adbeE!8p_I=6_D;QxHAJuVFX0v+Q_Qm|UHt z!=_+}QdfDK?z!j&y8sjtX_nS8b3rZx(Uky0)e40h%wzc@_f0c`e8G_Ecn4IR0f^MZ z_{|6(%i0BI+!vIUcEs6BKdQ1v@lS9slnNNcoSDA|3{#4*(}^6rrA|C(iCVZ ztSoidU($XRI>NH}8UgycYV4BU63?63tCKQ0H3EqD_H{ebw_p@$F{g8mXyCHM+IiBm zLolj7rLy#p6p0}i4@dJx4GRZ4D&(r$tAU4TI{vK*k~geP6PMkIdo>bf^}?76-b;|u zhLLMyjjvNS*5lFO>kW(++sNdlJzVOj5gzYJM%*&cRwNL0V@)wo3@r0h(dVf>o=@=n z&O%vhy-ALB#$`?iI&-ob`b}EB5!RwnSi{Ced&fg!{Q|bO$yIG*zqno+wB)-OuI*mI zs1p>%S!{=RLIgNvuUd~#w--xlcdg;!vYN>Au$?R#ebLHjk|M3z6}2-Tfz7D2q-TJY zCh1ShM1!0mD$~_K#+QVN?2Kr8B(UgSF|N0Cw}p3X37ORs|IS2)nj{M=TIwn7MX<9$ z3y2ZEYIP!na~w2fk)yi!JO^Y%XXzUBRwcM6Rnr5Pa+bW7PyH=vV7L7DIR&$#?0~q+Pw(q+j|GqU`pStUt^i-3#P0$7GWLuF z`xQJqp2D>Z45Jqo#XSxiHXL&*o-;jHn5^5IMMsXWu$oWIDMrF$DP{l+V{^syL3k|6CvV!^b{Rw3$inV1CeR0)b`RtmFFecgu6m1vA+Li7-PM_Qdr5 z@J2nk;XaIIxThS%OB5Z7$Mzertz^I^p6Zwk{S_?sJ5!EjmdF-h5!85e_a|TkCCXz$ zg7|G!qR4>3MPvYNzg0gc=3@FMN`_}6pkZ}r+>KZ)A71fzrX}A5lw~g1*T6$`A9t~J z6HyGxZf=aP6ges17hb2k-z{q(%&U2R@0swnuW=j@ln3ePFZb1Afz$htEJ!9Cd!r){ z^yFn{3JTAYi+bp*KIlMiK3xEMYTRwZ)-Q*r(v+TVhM2`2#Tpa6)-;h$bnCDeHVLoN%5)0hzMo($1^N#|OyN&5dk0|g4Qj5`U zXBlElUs0^ebBR4*Ne5#dhy8T(s<5n&K+3*Epu>yyCxjH&_`vm90=xjpIY*KjzJLmi zvAfYGH~d@>Uaj-fJ0`n5chc9J-E2?%Izs5H&Z1oFv?CtaA3+kmsc_D(jE2Xe!teWc zX)*>|B|D{I^7t2s@v+66U#MC2(-GlEPg-S;1cwx?)lo@*2i+)Rs8bCO_nN+~b>%qT zp$#bC?XLL10T1NsT(y=y9*c`TvI48_BooT}2F&XE@4PUX_R3=_zb-V-whRUzplp26 zu5{A%vg7{LqTkTYV+Bz5sh-Ip4%>+ySKx?Z%g=L-C?0d4Iq`;X8fCLua{>&Wm&@78 zh3>bVHY*9Wqi@+0N(iE~4jG4Q*?gPNdea$;=eO#jBD32*drW=q*Q=sEH}?czYi;fm zeRmZFo5wAWZO`((ACn|8*C6rRqtFzkonHYPDlgm880Os6Qk4Svu^|rh?+m`C;SpZun zkY2npXQ~or!BxuZbI$RM(_I=N3465U?W_IK0?*gIG2ZEB&b_3DAZ?W7$jo?IFeULt zWPpKWeYYsDLz-P#7>$6g$#ReF)vYJZ;?XE;=>17a!ZRcYmOrWoDtb|%$k;rT?7Gro zI%v(Tt3e`V?drF~%^FG zW?dPF2`EU6j(VptrcX7_g{Tc)aii+jL+ z!3F5(1#k0(+g&F$Z}m&R=wq2l-ss)JTdcdfKNT!_lf)L~l$xYEn%mIB;HAtYV4)Ll z(+(e;{S=j*h=`M{;oB8)t?kvT#*nQIb80!EPPI!ou@|(iER^29kN{!6sgVF!8K7xjJ=rCH}O^WW$G9`~b>2s*HL( zeC!ebIBXzk!CENvuwQ7ZALy>|?k#zo*nOkQSu5yyIn|6OeA&WAw^)3h0xn*LsOSs$ zw>13Ont-RAM7Dl9h#AZOZCu?E^WE~jru8lCo$vYZy zf93wjV{pxzBD<@FvPju$2wV=5H>F$xzd5Ci(qQx_B>+$26H{{q?0vm#oR88lmO_P( z_q$)mAkGhieK7!x?-(G?=Uz>)b%*ma5H~;@TI<0i;jHP*au_*tsPWfSI&NiFE-MCs zIAg$q^inDWP$XII+GDmf9Jdd6w0B?8JLu8xhC03n!lvVQ$w1?Q(jUW$;?L}2xgb(i z*x@k{m1EOMQ0K9=6EroD1k+g-$Zf?=zD?;`x|3?JQ%3wFW?hGzb)$soA56gC+_WUS z+6$ja4z1g}L;PyTYH2~^Q{bqz0Fe&fFuZIdi;@&Dz6F@GwCOk66@nTY`_ZJsOB^IO z?+vO!$^ueb6j(XncuV}sD-E)fsa?nJ{G~PpFASCG_M$elwf&=DQSR8ymU}hCD|fpy zw^p!mYwus!afD4AIEr zAwk0|-1dgYlr`IWU!2`EpjD^8OFNvvTMcik4256d%P8X_33+SZM&+pmV0*eHA>TKW zbF#751A@IN$;<7K`rB2tW0bJ5#c5rwx|Dbg+^kJaFqlwev`g$kbXsmeJ;*a?w4*sB z9mlq6sSy^8?x4%vD-*{wimP*;gvz~RDwnvUZRV=>v~q4(I{(T>3OvU7YHkQ--Ae`3V7) zL~zq`8;PBppO6A~jLNdGnYCq$`fc$Ykc9Bjqtj*bA%b5^QdL*abj(E zBEmxNI>F7?;}5k5eA_o+6jXpk{}_Q^swM+8`##s3WMz1C%e_gL2kOGl>HsnF)RqWFHNYB|dxpmtYx46-9z{L5cL?{foR8=GC3&DrZiW2A< zLjr5gn0&GKb?D}j>n5jhf@=R&uc-SsJF6|}I+=5aO_h$}EK5?xwLr!B5+m&*IuqgS z=~Y+9{Rz|ScS|;i=sF-?7Th6-l*%X-b$=Z|5bzwWIWw{yEwaIsp2EJ1u5FUFLlfCT z6Bm3;iv>9*-jk0lc7j!gS{tPGeZiw7k@$&TT3_@cl}SiDS0 zd5oo>aLi8C#I1n&eeX?H7finFt4hFt0A@P9OVoH&Rp>B!nfG0rm`cW^dGFP*K1OQc z!zblUIePgRF zKh-BWWMj&h_V`9hco9T28;nIIibrAb0C8mb40I_fDZ(sI*hCnJ1<#b`bnA5}krR^Q zzm^x@z}miV!rf?Cdr!?g)NkeY$_!?nh3$k5wZZWxJh6e?MKh{rl(in%)K=Q;h zyMp7t4*7%Vl(vZ%TM1rIeU!BPe7?&1hbYcV+wDnzBFENpf`}@kzdl3;uN`qD-J4ff zr~~QTMDDo!Y+A4zt5aJOr}|B^<-#!dGKMF2e|qlGCr&xx8XA+o)u2keFe2p*eV*k; z#%gLKa?zl<;*Ly}LFH)Un3;pGi(st5xNt2>!chM*n%d~*#f%_TIFudDMqU<6wt2ZG zn(TcI1K6=ow~Zb|FtQqoHSDT8qpgMvwQxv;`1$6KU-16zN@g}DSx$JHM(x^XQqQtb zvskUUyV8tUxjiqpNCj_fQzJgx5Mp`sOnQh>eeuq!A6xsD%o~a=3In9vK78=Q@4A{0 zW_fhBSSw$R8Md$n?fNGf)LzTb8%VQ9xS`iPgWoweUi zq9S$mx93mow{HEd9yH>3#@mg*)c`I&(KLs|{=V(7N!G&`3B$3fnfZMl^2TmnDyigq zck42gW~(kql$diBVR7NM;N-)AAAskH_;T@fSY{>qUVX6!IK^`ATx0Pw(U-3%ChOwo z2LduN!F9w7oTlE@ypvOYWv%|4&20fW^#IKXE`BUHxs(7bX*IL0$^j;%;kr4Cug<9; z$3>rfphuo26<%KDb>?e?-)Z@S9K}*SftV6uf9#Tyu!OE|>6h|0c^$Md9)h~)O$_7h z|3!;=>9}q?cWFy}V65{*%7dow3VD-OXa2>k`je-1r+xExzXm;5o0or3qkwlpt^S@W z_6L2;s!nqL4RV7HS$aVy`aUmIMzQqm1J3?Er`i=C z)(2h}Np=K+^4stI9V6}6cl~v1BsW~;J=tEid4XsBo3nnv+P`>E|49O~a+CCc*o-3X z{F3sZJL-u1{}5^ZWCi_6-g$fYZ2-jVnASgvYW1>DqAF^0?1R7fM1RqK{;i=52?^`K zp1p_uQ;Po?h*PkH+Qs%U{doU>zWUE+Z`D5Xy zoG*B(WSjq{v;EcYpy$;T6Diw>e|{oH^TyN%Rq7~XjFn6{gbuuhIXwu2;(Rzgf87Nj z84AGmw|`_0IyrrD#yonFaJRE@Ua-l8Fbh#t*VWEFW9>FxYbITJ?EP>5B>$U@3+Yhh z9>yD+Kr%(JYJwsf0CUwgEu~Z%9pCm3Q+?w7I^nScaUDtdXL6c57GCEVL-5Z#ct7V_ zEpsH-v^yGsJk$vZ-`DcWVNntkq^yj7p;5;U0-7f3^z9qF*y#yrO0gePz5T|=$8U~p zl<)Gzz#J$0ige10;`3)~Lr`koyG;L~Z^;}&cTO+&iKSGMTr7BS+0Jml@|Dx#$4gy{ zmOm<6M1#f+zZ2#~ah*BO?ueNnNT!x4)Awc<;U{i1mTZWuXOx!Q6Bqd^7CUVCo_^XMv5ts1mYbW1HO<1c~ z0Ac}6PJVH-pU_c)#AZP^@qX98$Sr?sD+`yecD)y5O!YYwd7g}p|K+5;IsL6~yDrh!_cmvh z&*srJbu!6gi+;|DeTcjZ!p9RbE0R=cZ47hjK$DA+c~o(q{y+Qa4(*qBmp`0(S-fcm zaszOZ))ZRT@)b0u6`iTl3!O_C(@x-upHnOvkFG`zqbm(js}aN421CLx0`rTX(~-Q^ z2OKgIL)S>r9lqp-@c6nn59W^aa=qny^6)O(D_5D_S%*C%xB8~9;glC_irMlRp%wig}mh;oURzqBPy}Eur z4p%FE;tz~cr>2UZZ=Y4cOSa1u$C}Kt8ai8sqbIW2sAoAUILGkiA!E8mbY{@DIGRnP zS{xVTfpMGcDPUa0iSWf;Pg7>qZMHQ_uDIOe7k9;}#p)_fLRQ|iZ=J>3kqpP=Ae)UL zmNumxBy}s%eB~QNg+%I#J?v#kl(mq{mXmua-jn5TUc83WQT`tNYF&Ntt1F19-4zL< znPn;P>NpQX)bi9tS$;(YeYh`;j^&I@%n7sGh<=H$6FHB<1AWmE&}XsBK{?$-Kzz*2 zj+NYqLUVVE=ugYY#Yh5Q9UZNYS$Ogx@xInSAD939rfAxV1@kiojuy^~f|EFXWAxu5!5{J&{GwZ)bJ=}H_20z%-|hA9yn2HW@J{KUMNQiw zd1B|#Z%_WYpBTx2=R8iN{O_j!tU19Ou7qCuT$JbdUZ&KnZwH z6aU)Na4yJJ@Sd^56a6Or@-9jF!-BH}=aRzebpJCz{IPDw?)fo@RGk_-hz7Q_!uxa+ ziaNV4;d&kn?XC{+WPIszAh(ZXFuQb6JTM(^;}qoCrFchevt9VvCm;VVKR7YEZU*<>7%2B?)i_c) zTsk6rq{2b?Sy{529q!V`o-D_#QX#&SIa}W2FlDDm36ES-AOc1zeEWa-S?-Z1E00!Q zCYeQEv1<7%S-rBcNz<$c!W$6y3d3HLU)ChE7PNnF+_0*8Vnm|9j99UA{J$n_zxvxX zpz$ii^V@ZRPgGPHn;s@Sm$T)sfW2?y+SW_3{x}v6v~#*4SM(GBHQT{Z-Iu)gyaM~! z+b>DV;mNsw<&K(f*PwDr``@d*WXi3 zD$!x6R^VUHuDv7NcA^QeYNC4fPa8VFVc(ZD&?bn=qe18w*b~4f6wW@e`s$^B{h6iy z1*e&4*Pe-c-?1sFBVJs;N%68W-sXhIou<}kpu$wU+cil5|6ug`Pn5Gt`_*3c;}%() zK|^svSm9KZF_10!?OWJAq$Ky}uG`)+*n0l~=<}}`oikn9c{-6nPig&Z?P?*s3=XEblsyD#-twuJD(ayp&mIPuPsH*t1MkNlpBkvIraPJ&1o*yaexj zSsYhjZggvRq1;!)by4f==lJ6nd)+nB@SNX1$2bJIxJi&hVA|^&1r)uA?i)sr|7^bb z<(=;HU-=gAvzWJ1XK|3x!ZLx75*%|Jf6~*oz+nQsAB3 z)V9;lmzRoM3sufunyR);FH_m-Vt5;vMan6Qn#ODyV4OI{PoX7>>MizE4ygIc+Dt)q z`?@?@-0@~(y>5Tf_0KTI2kO+Y{_9`nsMpbR;zdC~_leFVgR&ywFuEWHIP54d7{dK3 zg^QP3VY>Sr$7z4QVDdr8d26xMrrW7!tE?l^fjES}yOe&~!D5vpPh62w)(Ah4Xk{UJ zE2e(9zz0IFwI#0lh?IXNZWBuYUe(wo8<~GW&GtK1bX})}quj>C*6rUXTTgE(4Oala zG&Pk|{>g28EZKq863Q*+b_tyViwkY=qHU(sT>X%AI0wP=3>`*Ihc^$XSlkm#U6j8l z%OL~Z+Zaw-dZK}rbJtGjx3>eG%P_<`2CVv+wH!o1E1eamy?=YDf|P3B@!VHR+zHw@ zl0+b0<&ZAcu};RCYLYYt{L>Y*y)*lI@z@92A6^PS<;H6a_$3;-M!FxFOF{-@(J!*y z6KBMO+C?!D;@mmN4Om2korA^vM>oVOm;=uA_aj_u)iVF_{b7)oZhuJa`Q;Q2R|ieQrko}LcEmx18meX6U>WsV#IpaUTSMLP zcS{ZTU0lr!o}z*(bo{$><=HhCPQk^Yuki+K>z&F6SHCGc6D#7{!oBPi3^4t%+`F3? zzO@N`vedhZomBK|sRiE&xVZUUl@nHuWV_<@n=(4H?i14jgh@K4y(cx*u--QWb~k=E zr`vOh02u>k0LH6dZHGX-IQ{ym^uF%QdftZmq_b0|RFcdk<@?=FsRC_|QxP^T>pD{* zGu!<>I-ph%TZu%j&d(lG~m`^7pQLPOiAXdzbAS9mB@p0<-Eq$qBI zet0><{oQ*ib!APMNp^$?soLv4;76o#)}Y$IAO_}}aC69oi36LWZyU#$HK)cg4mOr0 zv-%&|U_4vni+p~TI6wx#DvxY*-!H;20J<%fYn_4nwCFzqcNIucWBjQ<>94`_ptxjm z{Ve_rlx~4CpD}^o^qBvt@z5}^q}F2$Za{1w%4lbegg+Gy@tF49&lEwl%gq^ObkF2? zBbhm4RDwbp*vs0xM#y(N=cKU4vefI5?J5Nlii}?oo)fQaZC3n6rXW-t0X!A# zk;oJ09b280I{M{XYTFRVNSl`7ReK%Nn@~u_%q(lx6C@{pH$BA3x{gE_etnHLzk3)J zQ@ve6t#zH+sp+=ZC|pc}2m&l65FfmLEL-a{I*9!7n>MYu z(E>V^zFQre;j7ELf7G#ap5#UIqCX<%6npQ*71Hq2j4Vy}Mz;omd_kE)M+7Z3bXZia zx>u9rlz*UF1(#$z+yv$!GbKOy2nt2#*{9Nv<6Ldw9zHb60<0;(UBPjMTv^Zvh(+iz z_uUJ%d%-GnmlrP#>VIs{q(|DtW)Tu^GzS@6jHxhu!>SB>flr0VhA{-EqXJ>|(mxw{dQ#Gb&T3`EZT0R}dkbS@v3IAwD9^H^Qz));iS7QBwAf z(z{{<>h6-|l|w_=J%=Cqo{4J(aV&{>oW#T~_dHtXmNTIF1f1hqFC30h-#4N^nm6af#(hxW41J zhj_RPWq4tO@G3AxXo1+u{*2u`9AXLimXyhuYO;V)wZpx|WvHL|0A1&ZB6?)G%J<~H zxcKxg9Dcg=F<0zv4Dn!Y8)^k3!x!Jh<3AhD@S&o?Ab9xpYFJ;mi0;t@Mq0cxNunpH z=Qw^MP*(6aL}e3R!K~Bfb6(}=%>&0TVTzsTQ?0Pgz~F{F$yt5BUO-_%L+=Z@rt8FT z$C)Su;&Me|cIxC#>^U!7Ebt~&PuDYmXIOy4Zx(k(Jxv;XWawQp8_v)RTLi|N$GtqLvUtBf4Ljf#u6?{ z4s7`|E9%!pvqq_W?gBB==?l2@u84n~^whhCaM3Sm)&l8NgP(EBE6}0^V0@oV@kvjl z*_7@Vkgm8lnKN8blA7%SG~lLjKp*EZvcV>HI4I{ho270fd|2o(;~0W2{y3uy;>vVr z48*LuPSEDe8k8)Year4Ep0q^Yn9tbTd0Fz-WM<^Y`nY3`zL8m^5gj8=HNk5X%YFyl zRh&+K)OL}mX&d4VL`is>X3%0GPTxzEKq=aGG2>_~j9u0xI24n`u^aE&*q%Y<6#Zo2 zqe~Gc_1^{?k(v7=ySF3cLPdIufkW`D>scj?vf3!OPcldk-hjWz9OnD@D5sOFD}SWd zer_MhL3pes#fX$)qVuyhq`>cBc3eb0*kZagF=ej6HIzUBk#8MHE7rO+mfcgJNzPme zjGp{lSoHYw>kN()c5FV%g?Fo{i@I-{*A%kf!d>!mP1h7R1pisM+R{6JuQS9SNU1oP zY=DUPq=0CvOF*-=&f5k2LT#vg?=#vn_U7Wn)nUsExc9|ni}kmz;Z$Pva0Is(+v;nN zI#(#UnMD>`C|0*hI6)F3b7R&NRyj7C+4Ue?m=05Z>?3H=8u8RIyE z>j0Hei;kucQy3kLDLU-mJ=J|~oeQ)cWRVCp(a=??|r`Ho*LcgfFO%Wu|_!S;CSy5v@Tt<)2!wu(hW zBbrW|Uq?jqO|}5)JULxMaGIkKgh(ALRKcE$7iLZpdFsn3T^UB)(gL@<$6H(>7d{rX zlOT1Kr3tA4)Q2|MQ92+YiY{q%uwhyXRmg!ZJHGji_T-8k4Wsa5W^o1#L? zrz&H&T3_7w2IzX6C+q^P#87?Xy6~ddv9IAax}xhM+pje+s|jM44e{|r>e}e*^*Lyloebpd9@0r~l%hN6ZuMOqcdrxP%7gU+Nj9289r9V7JhAk|Kl82GvSpqlWIQ zZJsu!_5QU3^|AxTg?eC6)+d%OK&`g=M)wo^;ELh!=SimPYdy=7nWqmrqOIA=DsBL(PyByLRt> z#Wy3EAxm!{fOg|?4qgzXFgx zJ9kTAK>+Gdz06|Mygg-kOhdGi`kq?N^?Dx%{hE3R*F()U{HfI`)5HgE1c1%W6&6sMK8oGD3vyj;A5bYKvz_wz1&FVSW_J(3o)!% zD5%^7_dxQzsTbfYA0cdpYVD}7-)^}(qup!DaVop7M22trT;XG*-E~{#sEW~;acOkK zGS98Mt{9u5H2=)KVUlFZxAPPToF`sqI)t@aeEl)5#{EVL%oJVGlvMtoW_wmq>U;yp zHO&O&8eHZnFa0KSyz@Bv_BY4gHTfwPa(SKQL6`&gGEv_39WR@S?$N+g8d8NRk z^T9vEiuAxCoH;qd(N~dP!F>+2)b`*u{~_z?9|b-{CLTTVINLg4fKbC}4x;Flu%}QQ&-kYf9oKdY%#aKXekK^FW)t7C7Qi4ISg?8GQr-wyApN~kWp&m%K!?4UH9 zV1gaY@2&x!getLGOl81hIpvMz{jp&RVe+*dt>FYO6?%JE76a>W6Zm-wNqp3yPZ72k zv?H0FMB{pbMox}N)9NyxRJe=%uM@FRAd)G`9SY7fLf<7W_aw_V4h#_0-KPD|DZVz% zdu>dX)NeWrEI_=hKjk(ecC zOY#Y48zcydI7RO|Z@MsRP+?p%d}=iO7r=t`mRG!ftz@8jdwk0lRh*aH6!__!{*6`b zO4!fn?tnIbNJp9LWefJ%i{!I9k)~qyB-9NuGYpJ@h8O480M$j;o%pqlscIlQ3Ek!anPbNiCElld0w|v1x6{@l@hPJ`zRzbvZ{I&e7M>B?SV8)9y$3^S3v< zeEMJT=M`Jcr58*i3J?5$?Ol01lxzDxZ=JMI+MEt5C$fYhWQk0BS*K1JvM1X#c1;@F zB;l0oA;ctEV#F}WI!czYjV0R*rZO{P3>nNAV`hF2o!;K_p1gnk{yhGAKF@fb=f1D| zx|i#^zTfM*0;z*oy6K=94sF}ha;H_^Z!<44t=qEi3HpslVWi6FQFwzb+J@KkG%fdh z4>x|0t%R8gaj58>i=)rXd-|6w9fN%!`4hy_oD;z}fO7J{sUgv(f{>9`_^*?I)&$k{ zu?i*Cl(nKr$H&8>$%Dt+Np{A{kP|ORFFZ$qVMdnsFo}hP+uo)%p%IP!DXh!>nMaAAq)Kv7G z=DUy-Y_FVJagpQOvjQsp*q_sC+9#&m`n=Q~s@M)A3TxpJ* z1vO2iU|V6rL#LZmX!bR3=@A8o8xKZMw^NVGUo8N97h<{e`US^qknKyt@9*(j(Tzll z*>^eA#4J<}L>#SM;2HrS0#o}7Q^Ss2MOU#CFC*_8qQczWbD_s4f^A4J6{tY6>aO>m zLlbbgE$OAoF9X4cX9lr~t;vVYS@0IwYTJ~eIo6Q-K3ZcA=q)uPyO5q=3X?%#DAaw1 zF^A8%R(A#a+hkPWYUVxIo(L=GiuhwMk zbZCS!*Gc?bRm*y?vc&Xiq*omV_QR^8OIF;@7_G7lD4PC49^T7?K3W>kI{DZmqRPFf zze*+jG{=%k&>gSv1y(VdxPQ!^Z+qeuqhknzyy?P_8NANpxmHCK43=5t*KC+~_~w0& z^jla6uPP{{_Q3XqvvRp2*82!h$*AGI(PeUQxDBe#Ein#uC)66@>msbQ)QBF5a7c6>` z-|+Gy^Ap9Zx*i7kI>7mmR858SR{f6_T(q=_$(hi30IL2TH)365g|J+3ba%0NY6Vpx zxrBZeedk*3jf#fw zyi>oXV>>l|NpFpAe%NQ|Yn#b>fvJMu8Z|L{!rJLF#OMO-D&GakT`|6<17YP-Y?-T> znq#bq$tLyyHQlt=36hbT5iL6sT*z$9xrTW$#_Hg&72H4^Mx>m)0ZJgzGBld0jiy3C zutZ>*O6-o|T_O@uMv=2vhqBfpu3|um!$cWaSr?K_w(!{qW`0SfnIzl#zufEFesoue z3o4N!bhE6t%RqNC`Q$A#s2P<+@S&vK6hCuCp|eKsMtLdFxLO~A7+&SE%BvSPc?Q5{ z4Lv}pVdM|miD4`dO*xH8Bg7*rNn%PwMsr0*q9?95a8~Tv`KRu(C%pZ9G4_?&Bc+Vo z&$lP^n6!cxbx&00{PD(}4>1O9z-0k!CG*Is^3z*e;va8DD78wL+*n^)&4b; zZC6kQAl=GDF4>N>f8)Z)`}`SrA)^W*WsRl2YqE5-u5cCcsP%9#K+g3weqz3CBWH>a zn|D14tvMogc|bc~HL9bR_=<$hxit-U-;=d}55wiX)k#lkE^nTuHEGowe7<(WJS3P1 z_6*LdJI0X5ZMenFI0$N9WWNSb{w%sxbE~=vqeK_dc5j1lPGEHtv2#yD@!`@|&+NwI z76?lyhN}eAT|$){Op5~#xnm3%@;OsSrM9>lwUAyt?2oS?JYhCBUDHVFD=-Hy(O^^j z{9%tgA$Gxi>6wo^U4I|fw`Mk6mLL+m-j6*qJjE4%yzDiV%u?UGpq=-7SFn&QXfHRL zCvxG$w*1{#)G54Zb1)Rta5*Mau~7kw8ay=%u!CN!5qAd~nfpt@LUYRx1gIP{vQyd>gV)EA3kRPLiR@d3C zUqeDfra|*9iYanwPBgU6u1k^e7np9JI(eH#o&Vn2Z%CL;n?)SGkSiE!z14{DF7FfU z`s@E0`SK@2M&XuO|g7GJ&>m{O6c=Ihi5RPBPGWweUS}S zWoj;?%aATVGFx4T8Ox(|HEdI|{-Z$@RP&_@{l`g5`^JZ2C3j{&%}djEC@2HTrHvaO z?gtRi0FNRJKtPARwCI)r5YW$x^NIlkw5phrKhO?B=e{B+%Q;(*k4#S--Nx2WBOGsBxJa=74AYXRzPk3@f`;*o5vOkvkrTqGOA-12Ts-3>?$1r@%q=!*PEhtuH`{OMJ&Od%+ zMLFh;>_22picGN!@`ps%Iv3R!ZxRXgLR$QGXoXMo!@c{bb-bMba@VeBYU5ve^d~%P z^THDc+HSunnkG`FWcB6h3Q)RAxh~6}^boJrD z-wR?Pl9(P>P($B&bPt+bd}@^arj**f5jk`dwK!u#jhsX z-dYfY>G_OYSAXX9Vt4a?fabz`^2l9<6uz~9dPYhw7oL8jY==@5Oa1=VMui?6e;f%Q zgIIlzQH4wzPTwGydw0CNznu6-;(6}T;s^x;a)L_0K(%A;P^ndRYWi~Dg@4sdimAl8 z9M-vn)^y134i3+YqwIDfm3wml=hs0HQUBFk1+v;WqlBPtX?4y0onaP_@=WwHGqsFP z8IBRu>Uog`t)D17Zi!QFi>dC6Ay@qQ@mKi@0M=}bNgKdHZri+eb=Z?x*B}8nsnEeU z9dgCmH75VZ8YxyB>y+^Ge*eV*pTGeO#+n|u9L%av#XDI$6#LAy0>REL{+v0Gz!$-Q*(o8Ha^VJ%N@Gd94PERiTQw=*}kI1h7y1#lE7Xtmxy0(K<9& zPND3^7Q#$5*tzqG0e3b8}%Fz@jmq+nkTw%5Bdn3Lxwak~1g3G~(f%KAN;_|l= z`ur@$2$>oMC?76*(({H8d*L_Rxex0Bo)Zc+ELQm!u26o-0dn{zYdCL#xhNxwpN?c@ z?4H%a`3Cun^KLL(Z`jET@0mU#r86gjpkUnbZ)(n=v4o&mVW0NP5p8uw88QTaS}#?$ zd9OT5FdivS?TGxi{SF1wrv^IIdT8c&ZC}xHBR$3_+~DkftA*mB^T3?BET~O#=pZhX z{8mYtjY4u?LAabTbDT8Zr|Mu97mKp>zTg_bh^RwMj8pu!1&6qezRooBS(!W9$f!#V z1`n6g=|v_&3xcz(As4A@C5{G6fhS;37i>P83<2G*n@ClnjEy4=GqA20oHP{TtQiVBF~Kq$oT?b>?8XZ z<|3oDjWy}jtP4mJ?t@?UrEf(pbQL8?N@~i3VHPXn!EeGn?!(7R@jf^c37<7WUm4~P z=q1}BvZu=JZJC`x%-#Moj!_^hXg?Q=4>%$)0|rCN-_fjx>bVMdQ&3(3ygkrm%j=zo z)5?nORMspF-k@?K1a-iwa{J!L*<&!rnRDqyr1qznGxWC~yCcjEwHcWQW4m6+r$q#;ZmQX1sbqdF8l}hcXU2l-PF`-!-Dyr_uH$5+z$-@>eUZ4@uWcJuDPC&So z^juH^6>oE~TGnrto`riGB*KWuQNLzCq)R>`rAK!g@1Ec$5o>T7$^RGYW4KI%s-ydh7F*Z7!YiE$gp&&*g*HyhjV~b$J3qfw=r0D#$^B4{4fu7L^$4swX!lw`m1iyK6i3PNSi$aIz&&Xj_vmx9Q0R?0akqM zp_Eelybb!nvmm^Z?Hzl1WegaNaCnYh*%ai|?43Vvz>>wu#isnpcVpBmsHMltv$OIo zNNd(%#QevNI>@a-47P3kf}~cN8iy0)*D@r%f*4J9IuNJFqh7!9h^wbc%=_b>*pZYCR8Ez6zj^lwj^^_YcFX} zCVo$O&P0$LW1^qrVKPne6vW0@HQD|Av>u&OO3@v#Vc3@QJxKgk!(Mo~8x%Lu-M3JA z&A8$4mkH!jN#Jh?x8CjxypWpfTv0WvudAS+6+X#y%t5;LI`>zh0kx^pCBf>EX~>R)(o$;Qw!L_Du_l(DJ)%7^_RDl zwD5@XrDtT&d@RK~(U(f2;{eW`3F3~r&p^40d(i(6bC)t!l(!Y{8=@9 zw*L6(Ap3L7sDZ)~iVj1{p?{ynfHp*80F-SGc2|EddEKLuX2tBhGAa$!R;*j*$tOrU z#wX2p6!C-^x#eXLRQ>$Yc$SpD)ilBj&a`rwNkSOVyRG!J+=(Z-FTux-$;Ee7Hm`1p zbJl$dQR2ho6|j*}gm}qyn{kYipFBuEH-=z;x?aAxcNu|KXGx`B>t_3q zIlM=AND99%H=7s53F~t(hYBX)N5_i}DJ!>Zno8A6x|F-mx&6t-6df1@mcdd#_0~AL z-kd+DhG@Ft=XoN!tI&|^y>of%=Fc5lk2B^T@hp*kPxNhAfs^W%INh^cXxtZYbbW(p zVJuiq3u5zRnDQmb$rHwN9_8ca^j;x-hA(C)ZkOPe0{W*>AevUi_DR-o_CgY|M~6~} z}YL^OrnyY=&aBcTh^bv$PshRsY;3Vx$DEaCWoV8O#}Wxilh(KE#aMokuf z?_3~f)MTKH*v{}9OTg%LYYZE`3VnSZ@GKJ-S-WcuSo+-Np-ijjNJ&#odDsP$sHO=td(k`j4TxNsnym_`AZ z&}W$obp-HZ3fU6r5=Fb)x6QZe!eoC3v!|eP++?q6RoIU2|nBkn7*A zp2uA7`Mz+jTSSp#y5lzF!&-0R}?eRjsN=4Eh3l| z)Mq6466Q0HVR&YJJ9btKfHi2l&kLwRYsZ;N1g!YUcB zlUrA~uzvJaUS<`+RzACVMUm4hgCMgNmqWSR?15DB_)@myT=x1sn#hd`_GKxTQjZKg zDA%liSb%?Z#{F!AFmN=#`8y(Li_H6NU*)rO)qCrpi81LpPve<`k;u`UsL#`9NZrAP z=%+%C*$agP)qX+gmAt6W{+Sv?FvRU*?WS+FX?|cm3bCQ<*R}>Vi~)aqxY@5Ce@LKOwIS<2 z=)3>j@$&6UA>o@O5vbGH`GTkfmtINw^J`u5yk zTK1n000}IJ|J|?u_}o^YOb+h4*!kCM57si0%jna9+*pMF1pFDCGd=t2wEeyR19~{p Aga7~l diff --git a/Docs/images/getting_subscript.png b/Docs/images/getting_subscript.png deleted file mode 100644 index 2cc883ac0da47ad4bb78fe3c9ea0c90eb9fff0e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46692 zcmeGDWmuG3`v(joAu1&zp`;*!5(CmXC?Fy!B3*)XcMb!hbSOx-Al=sseJ^LNIz2vSy*A-Z<^8Wt87k?d0`6)Y?~I2IN* z-<8XlUp!wo2Vh}QIGIaID$7brGAKLPnwVP|V_|8$i;lxrCDV^>UdW7mKlm7y{&wCI z)(B_BzH>C6h$khD_gR)q`4R!+wP$3HK5Iy1GD(wu4h&5D6v&Wcbp%=RUPze}^Bjo( zV!PW=>&OG2tA!C`ZHujRbtzNfV7*!_9Xh#peoUB(;tc(g3WPLd#geE}J=qUSfBU@lL*4On#tfrNKG`bAZ?2Yp zfSfW$$7kdctJJPi;$O6ZAd~C#DQ9AxL-Rg8`dDc#AG(JwVSV+U3jwCwkf`)q#>eWo zxl4VM7%Pe~y7Ip7YkjQA+;yMV8XD~Y&g`vkNxYox4k<-F&90I4VSt|(I0D`0YoDbEj=N#> z6%_#L_NM>~a<(dek>9*G>a6n6_Pa0s^$OccMEry`vO>h!dxkgalX#r`gsFyw5D`rQRwuhcg@3kdmK~);nBfNZ=xv>3x=&5`dt`lEK zP%*rSAk3BFX1MWIB_h%gc>~-hWN@7{{wD3s>r}nPGJOm{?{d4~io1}8f~1F7kc0hH zyW%NyKTn|ZUNL8|M`PV>tderD^XscvTFklTc00w2ffhkkH+`zypXoSV0EOF&>F+jU zdo&XYVgat>ev-J>g=3s{$tia}5r_Kgm02H_G#`mP^bo_PZTtWU;VxXEG^~$4hhMR4 zu#5aW>o z_8oyP>T5o&>4IiJC#s&e2WdBQu=D(F9#^L;e&gmP6!SAlXa2@hf#=s|$7MoA5{et; zo7;M1K*1$5si%R(el3Pj1iSYQdE0|m69#=Hij!oMR92U(2(<%n1UZt(72nFWyj;9& zM_nT_OHW4xyfWZJ*~+$9xu@nP;B`|RN8cALnRXo)7x?&Ex-XZs;2qXL*7is3vQk%< zu6??-kHsAvCtbkk&A9*6CKFeM*4*Do`Z5FA`;D&0E5@(M4(>P**7{roKTg+p&d5ss z@qP~xdFXV2aFB3Fo}_b{|MSBfXWrX=zA+M(>DGg9bK!K40BHi|X6C16 zE9Rl*v*xYl!)Djai-u=2Zl!BxPIYn_yyf1cq7DVzyBZZ%8))7^Xh^{|qw%ERiWD}|9|DM=}y#ImBI0=vSZ!lmL-MQ%k$g@Bo-nW;HsG0tvD5GM(rlQ{NWeyj7> zl*REqH_@xbA+Av9Qu*H4DdIHtR6!U!nK$`XGC=p5?tNXJxhr${9)yitjdYDHpogG4 zARHtE@*0l6Z@WRWgo$96a*ti&t2eKbKQyyK&Dy9s-6HoNEE{!J%bVT15k(pW7$MCf zkcY>wUA23|(BdO;hvuHnUD3PjTp4lFaeZ-q@jUUxJS1GjWn87KWrF2*%RZLP8ppqS zS01U+ry;3XuDPWN)vTU$n>?Dlm{cqoD+?>JE^#c~Dnpc-mQ0jJl-k3VnZ!qsQ@7W;dg)45|#L(o`({O*%C=yy~>vSJPb0TyBGRLwlJ1_1o98#tz1H#@;;-y8V0fJ|;&R zMe@YTMOj88*a4hM9{|zdJRfx~wWrU`o}Xs2rhm(JQ?yqJN_+j;Nj_I@BcLqUp~9i? zATs!UaP_nJp0^Lm^9na*$LRPn6PmPwr)eu~H+wcqH;*^z`7(JQ^A=e&jNKeM8fnN8 zDrQcT9?u(07+RY+8Rwix8M?Fi-uZ#^niHNg$QiK3xf!&9x1~FRNCV{47cOK%UZvUC zHK(;*w=pw}dnIVl{(9xLs^QVFMzdgZO{d$KRQKyt*?{}QqpiFXPOYKPP(wBADvKgR z@8%0%y#CgfPwj^NDzgu#%f_ym7~42cZ@#N6ajrS$pf)fvahx`pR%_?)sp=y(Hnmi@ zfOqQkdqY6gI4v!`i+OG8G9aiG^ghe;Y{6_!Qx8*;b&GW(O37H!*jwtiCUAe@$Qcu*=<~{@QkF9-5MrlAhw)_^q)^k7)j>EhQ{}exaLx z<=H`9M7&b`z=IAS6)DY=vEx3t?!m}G@1ge5#KFKJm^zKzPT1hSGD``U9dj2$&fRY> zO3e4pzJ^^-e4qC|SvhvFjw^u+Rx-0Fzj$Yngwc)Z29rM%Gvf%8>8H_*YoF9II6eWO z65O6fT88nt1gTAeLp2%p<@?k7pZ625_Fp9m3JqEe0?97PvP4oug+&2&B)2oRx2Bb5 z!Di^~ON}_>`00M)`1LBdFTyj~GZQlPgx-qXbjSfJ@N)omdSAu170S4UXVS$3EgUND zC3A`igO=htOAn!>P`_}JBxOPSwe|tRh0uBVsV}WxU@Z4pJe9hWABa~*t)}w5FH8b) z;zyIE@TBBNc``?E1B7f*6=NG~UZ{)E3jm%TUIYO-!2so}kfmUgV2%*&{wvAdLWhla zOI{bKLMn$jz*IyD!{nbw^K#!}XWQr*4tMRUB$S~EY@MyhJMU2?vIYE2C3r>qC$ z>g6?kaThu~h{)T^i)TAgr&G;WRo7o_O3=m056ai9TeG+RR=0Q@qm?@yEIeNKh5GB0 z*)UguM%(ZS?NL|09R5-MYXUKRqzMlb($_NA#NWXgmHw|>l^B_cI)TC=gqq<&5|JjViBSAbFlF(8`#ih z?V$#8e@Aa@UR&v7Dlh#0G2b!Uu>cV(2`@<=VHII6Q6;e@@dEYGtqmGJ8qm?`_C^%< zR_UUB_I~%(h@g1ch3@Ks$EhF>I<%MPgJZk{=}z7@r$xEl*y!SRy|F&lf!Sofq@6^^ zxWt6)F91lmI})_mMSYRjD&5qvS$$v&W4{F;YMeQ=c_rlF?#YZ4TSk(`B2Pw0CSA?g}Gly;Z8uO@C*?{dTzcI>=`eS>uX+r2AL z6{ly0ELNs0ku(aZ#+yDb1mYk-tkit0=K4z#RM=Q@@BxoAAfBSGS96Z1>C@X<{>kq= z8Qb5Rt+0&V@OZOEZbDJ-E4d`=L~&F~xEe}^t7T#x^LkvkN}AYS@u4~?oB8we%AvP)cc61Y9< z@NVO6qO_p&xiqs>YH%&h44uF&^nKE(_SAy10T1A+#8OM>$4{dNlH}&=B$V{s;t45D zFpW`rG}-R0@puoGXvH8CdsCj(!8OAJGbNsta?0xj%)vK9D*LITHKK*1cZB4GC>_MB zL@ODy%a$IGbj-^YbAoFhzvu(K%zA=O7&-QtZm(MwxMr(1KEcb&Tg6`~0Bks}`HViX z+tQd>NzSb=-fgte-_?MOWzqhL?Nn4;QR zY7<@<0ZwpJO13^6&{tGwqKe-IPaSS9e#w}cul;bgF(F5=6*8zjdjlcTV!T0K3BOGL zMO>@kws$1@%gNcH7Ce?`>yAF3z&Cz9>v53WT-nS$8}Rx3852Ak9=_e*4{6uG-5sHm z(TS$*qgf;4pkN6V_(YI7VDimShv_M|XKB(aP*3=J$&zT#SPL>*{mnoK`fllS1D(AP zF0ml(w|Af2G@{HVU-%doMf2Vwx{1M2gBW~VlKKTaGGfv z?WBYx+nUiDJ(qktz*H2>-U7xwz*~G1cGDq2>GEoYZM=RoI?N}gIXo@pYs>r6LCROf zZR(8t8OlRe+>xc{_C@=PR|CjGB8!--VboLT^Jb50?Bt$-oJ6iv&Zp}i05Y+|*%3ta zV7E`q8TSrnyOUm+YhImtC3LCwl6y;b#$glzF{KGbGAF0l3r!VWkBowi?PN#Y_0*3M z>J3FYkifcjZ_S2hhr!O36JuQoqn1Jwy_Q>>yYt@~h1Ae_i`L5)BPNH61e^R#(Y0ZR z#Aw}Nv2K@l#D$87oYjbQ5*4}>Z`HB6=@GPB7Tl5kQ>wEMZw_xJ&`M~DYx7_f^u=h_ zvDI=I5f67fxOs->o^TO)5&V!$kXoo3EWYgA{kSi&s-vlTL=Lt9(r;;8zmPa*ZG3Pj z`&JmoW!wbfR1^yqt640~MTH?}CJKjks27xwS5W2+OsBT{=+r~7kB{;A>!9>Cw2TGn zMa{F?)Pton-ZRNSX>2&|`djZvD(S#aONNF^j5nlY74Kg*4<&rB8KwI%@gwZHnOZ}E zYMPe@^E2n-gm-np{%QA;*RsYNPTng9*!azpBOUxy+ORX&myPb_W(ApiSi3}#5)-aw zGCqyT_YYkRPwwL1k-5b3i6@nynk|4jUu1+X3Eu-y0S{OgC?)|>N{jsoh`q#eb zj;d;;91l#qm|>m=eEpmil6Ty_SH7RHPwD5JTzs3lC(&WyZq?J7iv=O?>)uPQ%8(`W zfNPZgn@=YnDRZ4$H>j{;YO#_=uzcR)Vaee8aL{4N@L`P%T;{^V!-{Gw(FQVDEC*d8 z^r5}(i>sV|0(EI7kn*`{p`>{=q1lLwXqh0(q8CL8bpS(1gL2N=ivUi#)o{feU z;A-r3pTyRvMd!WhD|aliT}byS?kntc)F~ga+N$CtT;2(@$#|75o9P}t)S~(vk?A)H zuh6S#6O^3gXb?ov&=Snu_qctYLHN|)C{(a>L|#;W443?|Ksmu7qudQP4ojiLYctn9 zS@B~s{6`WF3Dj>@UxnXR5-KK#QRtIH$Vg?aD6UZ4y(Uii;CdAc=~E*{=1=p6jE1ld z>bsG5oimkH{Dwb2^exN76wJjdiR2D9C8OD+S6{llylUaJNqE~TL5ky+H7zavoIxYg zIr-&e|HDo*GW!<<CWRrmq0`*`?}l zT#4NMTNk&!#%=*=o?dYv;v~_$I&x(oSR?dda8Ymvl(`+E=p?^6pIr$#OY`aplXNgY zmbn=|FM7}U!r`*5$^QMvYBt11HYoG{i=M~1pQ?D&m=BHbuj3AoyrgMNbG_<)wjbS) zuQ&19a?yFfmY;uxUwW>ro@3^Tr|GWV3mK2tEu3zdlHFWrpVGDSW&F8-V;N(p6w6Ag zkOH}q?LhkgNMG?43qe87Tkxy&Z&N?dND4fH z$pc$T0$zo4zqR+PnjbUchd(gVPu<7z zMW8$N(I}%gMGfOqiY3y78=TDU!B>LVL->O}2Wvkok^Le!{)}0cx|ge$y{oFrxEpc* z+XDwS8#V>Dh3xV2Yn3;SRl=V2X%*Iw!l$U`XhEDf&XOb|U zq*m6NikL>&zjr-y5?=KhFz!?MGH0rk3(a8}mm3iI;5A}8r9KL1h6sNJy*J!zc|Xq; zzV|*boHhL0XEy{02HEL!}&DEN? z97yYLRyXXmfSh0V znSjhj+_%OeO29#AbP^f>UWYWpE=bVHXp-Esh_^w_>;@l77&Sz;X_LrpaFu)}n%A$3 zUU9|DO7J2B2_@zwyk+7uo;{}@dh)IOo5F3DgnNY4CO{K9%XikF$v<;+4k?>9Uz;aD zf9#LkC2bT3vG|F%F+Gv%^hxT#l+uW5gvk{ytGAl=qJ+Wujw4bx8hWvXTl4G+Aw zFplVP@5yJgW3{^9q`IkQqmui)@snEqeAZC5P=4j-w!Hkz^*r!kT94f*mCYxEXWYHq zwv}<^ts1>kH8XVO^~R8uuC0}&r1gg@onLoLvImWZqed(vTyLE*OAiW67IR}=t02lF zoWD|eH9x5NiNADM$2aIWH016_7JHW1-F0#0c*d0Jk0y4f8$-=UFsS3hz<2>gb7Qf7 z`+kt4a4D9$Td4-(i|R&GdBZy0M;X-vT`GvG@~R$(morjJY3Gbu_Lwv5L7xss$qbt{ znXAZ5zVHalQ|#lGzlXm^FX9uvy#J{`BrH6FPwAtm2rs$#&S8%wzk#^<;*nw7@XEDQ zhSE*c*-C6t@yvp1)iQV%MUJKdLSn9L(*U%x!HLzSDhWXzT1G#>n{n zpdbJK$EUHI`QInmIQ}UXMnJ&#Cjf3vF2E1kn60AUe-&0XcQdxqkTSP6wsFLqAX;K7PJ`?)=A-KX-}(zDw{AiTTvTIhRB@zjUmj?c9#tek1@nu0k7u`4?m{U3~@$n#Vc z7|+XU83GwOSx<+3cJd`&y2-V?QzIfTC2x7t^GTWL<=`8io=D}#@;(Wn)G)vrj&I$@IKmO;* zpYP^exw1=r<#)S#adF}G1#POazuAu2i}Qbb|Ik3%|1WhVe=EcQxrx8DM(uqa?G6_! zb+B%C5!oS!!12LUXv>8;!ycRoC~&S)yWu!c4BB%KjXEaj7)wQZ&6YW23z`hg7@}*9 z)P%sA3X1XDHt6nRrmE=&OYx?Lo1B0kBz(51`*SE$J!ch-3>)pU|GJS6mTw9r)oKs2 z(tgX>w0(4{9(w0+frbTXXT5#=snKwiHZ?->WJb)S;i%+vWR4^PtaDyZ^E7{XJij<% zb*oyw?!;Gn`CKHHWZUhlc53(;OEP(?sO58-y>#1lF4@cBI~CE#Y~HuC=^dWZxPA4t zH#kA>qYrwk)JipDBoR44fGIsvDz-v!aC3?toqdHiSI0^i0w%X+B^fA11qn@5BK;LtrIsAA) zl&^%YH)SL5E9z)Yk9tANV@LuCj}vz`XryIRD5c4Ym>!}qzVWL-Ghiej6oK|Ns(Ulc zdvy=z^?I8^O&7p+qx6E7sqAK;33Be`ceZrZbIYzeG@gAB202$NdD@#>-lCi$-o;Nn z*K9=`85YF!4^cJWRsvz@0pk6&2pV#serCdzvG8c;9ag8e4@0zx7i5@jn)3Wo7gs8t zriq*Aa~SR<+s`KgZn4^+X7tGF2}Nfb9)eN@I>JmLLd2Rvyk3psbT!Lsr$cj)Ak(S@ zGKA^jA*{T&;92Xcs}6+-ZHd{7dveRWsq?fm{fT6rySMG9>Rp1D(YbY7P4%$QdRX!; zN0&HqHo73er4^o~K&y$-sj>1)z4SFAYNJKxslp;BQ;s%jYhjx4Q!O*1EU2$aB;mSQ zwh!(ht5N$khilr)ln~7iJE>#??kDs67me#`iW>6C!faU+^xCmjXLA@ z$V$hO#FqDf?$VXCTd^byGWENf_rYmz)P4iT$Jj{8n3vW1qp8utdo_C}zRiRacFJc3Vh!H%nO8ZP{PkSt^xU>3k|}7k*=)VhuCaylt*=|UD~+PYypa=g4jpOd zL>k1o@WFFw_HRm(24h!1PA6F|#N~UC!{n?oMOBbCzf6C4=k}rW|;5v5BFN`~5tAnSzewK!FbuX5M5UEtX zHnk;HOvHU_r}`rhPVtLQ*Y+}4idadbuqpCLaBbId-4fr7j?Iu74Nz^d^6ano^%;0uI!uoc=g8r=D^%AoZgiJcOCVn~4+k^=e{|)(v{d zcI?ZjKB5pg&eQCIj!I+m3zL}%BHP;2@tO)wU4MFbffngRik=)umS)d4->4I#>rS?+ zV)7;MPqo0Gu+A!L5cd_;<0Wl6a;D=kp5=bN4x^uv7aezpzq8m!uOJ6>U90XJ|gmjdhLA z%R)NqFOX5oK#!W6?EJhf4C z3n5)MF3M4TapF1_ZI2QWJQCGen&Ng1k%I})3K-2$3G$UVSr-&r6}?+3XOUCytlR8t zxivw1LkPSc576@QwzFvyO(ZWC^f;XIO`S(;xXAA~J#Ggk z^8;OyhbUq7Hrc0p+VHSS_$(=o>!U733ssNT<7|fAWr*b>PrA?uy3!d6V^z-6)Jm|| z=~D0V5(z!o#`$?ENBO-`2@_j&u}9_7{rtbID19XA@v5%uD&^L{5r4V6i-;i^wI6S? z?aNBjB$d0IWhGmG62cb48G?5GqK5-DKCFPc!s^&|wdyJkG!l^L%Ic;H8?bEti<4l1 z6utTcRKe+lh&pr=-30pjR+7C7)oO598`2k@&;<6Xve``P38&@^Y;#Q|RiCeSIkd+c zH&LANieU(ufHv78taNIG=JmVJ-be?uhrUD8D2Y}I?a}9_%sWLg8jjD-l_g$2Rrsks-G0ZC6WePtYk-PP~$_Pm1o+CzyB*WVgRsf9=>~8w>+X+q!(2hn=#A zAeSb~ivtk=QIpf=)AQB+E|){24nMi&Pf_?Xv&D_O5UBb)(s1w1jlN3=&2rPu15dh; zv)H1*&l7s8u1Y@a`^<7nsP051+;*acK=iCvlkwZx#L`;S0OjraO~|d!J$}DN)J}>? z#v1xk?If?|sl*q0c8_K+PS>){t$RkT1#IKQ3U4!{mdkC6l{m{bzp1Gulq|@WTE&8l7ME<>6YyrH=$f^Iom1`yxwaY__zM+S*g2Y?ay3XiNEM7A8#_ z;knWiR2{@l@Tg=mWB1}Q-^fSp$_W1xJ!c5`>MtEU?Im^_E}W@;aVuc?M9y+?g?j1z zGLQ^jRHUE?5%)go!-VMoC^0K2zHA_kdV1b&`i}k4t@Vyu&_>=9&qF->*4DQ2#Fe6m zZ1u576Bev+A>oq*2y4ny&EgpvPJM@AS^Fb7eX5WqG;lwPx~Pyj5V3nIt=i8c>J7ed zV&HGOTZ9;roZ`-3rUcT)9Rqh!(iCO`HV2-1YA(jLukC3N>dC=HnmJ*Jeb-V3cc z-4v-3TvQfv*&N;8JY%+Ry@gJio8&h<=L7_bkrbLZPCoKfRo|SkAHHSZ+1j?WS8m}7 z3p?$hgy@*6DLAy5PgNBZTEbA(8anytZn-5sPsNB_k-i9Oisb9+CIYa&XQ7l0W&;+V zB=u}IP28mV5+V9A8o<#4Wh9~6Ibm|1*Cy2OX$q*#uCpB*Mn%E% z+13Zk5#WQ25dRf&U~kR*nR@xCh8Lq#)$zM{o z8G~YvSxD_$<6#{z0$kXj^Azw4HNI0mRDuCPFB;eA>(jt3Z=w*fv*mf|zpSSuSePJDlG?zZ4e*X#5P;jp_ZY9d|eXb7dwn zKZe*e{)8m8YJA-kkb8J5D`HoZNBJ%J?=p89AUX=qK}MGj{B8bphY1qGoBL%nm&a&r zTZr2=yO!HB)7)AONJmmwr1*%(G`4oi`I}#CWdtC?IDfo7RH(jlR`b}kLYKOiUW;NX zWs*-$9b#%n944+!zaVaG(cm%CfoRJTKKi6#k8GXv9_%06S9V!Ma5|c{FZZgq*Bx&e zAwLRD9p2&4OssU2mS$etEd$ASrxf=)++K;a)^0LU`!Xk9d9Tv;aK{~gcs9EA;DXqH`JJW-N$M(9#6d^AtYjI30I1;vdrKmK0X|vRri2mx4z^4 zyEn#96@Q)a`)*RX^dn6u2FDw+Y#MV%V55XXMKa3LI`t&{u$^{J;3 zYg((filPa%kH0(tw=QahgHNNVY8qSD`o@3L9r)pTAbOC5=jkHF5n$A?`V#eo&JBUl z-Rk;@MY$*yW{CT9?3@MgJaso>}2^bV9nH zUV7f+Uy0!R3fDut1}L9s&G?I9(f1v?9D_3>2TsltIikPT@O3IZ2|KVGrS`AU(?}#Bm!Hv~9Ee9h_-Wms*fFO39`F4Cim;zRp|Y9h+nM z^`C@zO#8Pdzj{|wWkoT)LFjVNzKr~<8Z^MZiYe05`o~rO%q0@#czTFpN29ZZ?!Nvi z^D_?jzJp04laVq@*(V~i;=n4cJc0c-4CIVM#^6dq`(UV7w1?yiA8pKO>|>X+ot=ijqvbX zZEL=@(nb%7zP%mWBzk<>lXaXvuazNk`(3C~SO=vZe@Wpjwgn`raDS{9BFLJr-gIGX zKdZe!8pRTUDmR(RK$DGRD+XIvC-Sg1viu!zb(+o5h`CwM%^y(yUfbZARcN{RQOoIQ z?RqB^hzfE$nMZWqGW8bp-Y-Yf@C-zN)_6)CI?A{swvKUzBZ7J%Wp~F#&)OwkOqdE> z^S0QD!Wl@cJg8?;Nl|J?pB-f{&lU_QBAPe$L-f%~Np`JoCQDu+b2_{ZJq4hyO=q8< zN0dhWWf32VYK%!-wIgx?KXep@dv3I@n@TogTdliYvs}J(YJ`4(I_=6>wgnzmM_;HH zT{rl5_1RV3N!Bt5=_x=z0 z%kjz#KuCvgZ2BL>k|~hX0-c^pp5TVs~nq3Di)r+TS~Ceu0} zeUNEyLeNuDdhG|-AhLmh5h=(IZfN}eK-j{`h}&s3e9UyFd@IUOH_7`Pv6LQ7y#%za z&mHb}TJ^R*+lAYP*n*I3_S2qLlK<(KYo^R8ZTf&$UdrTcxiy3Ur_m#>dE@r=NZRKa)+DhG+0+9?ypU&8du+5+K zS3{csB59EW^8?^l7gigt%RA+!9p&&@HkU7`dBX`)V0Gl&Q;>+7<_X!4Dfzd%7zk6` zByzs<7p$4(Hz#C|@STkrcaG1fWw}k!G!l@7l(aun-Lkv;RP*sqT-?pL1$YNYIJ-NrUNrsW#<9-kO$sL zy7oZFbxLC}p1s@bQMo=8&F*=(>5yKay&iQCR@nx2j|lTbldv!)S*d78C0#) z6j&~(2p;GzHFd#rOR!keWnrgL`LOv>oIpv8dH$3IA8OfuZXln)dmkm77zIp(n0A#m zqK{tCUr00{zz`AC{&25hz)niE=26FH!4$pw`a*k%z8aDskR{dYL5fCW*_-_Y;917$ zq$VsReg^qa{Aixc=pacSs@~)zEqdIAQ>xA%rpVO$!ZI~nA9*BW-#!x_##W4Sne`Zf zbiSkX7DrgVxwQ{iXcBJ%?-=7uS@BtW7>g+^@VG1x-!1>UY)mu4`%=45s+(c>L*7F2 zZy_?}Y#r)_TI3|aGInvhap+Re_9mhlvfTcR3mDzFJezE2sx%Amp$I4tyg~l}ks@Xb)ri^w*3(w>@Cy&ovGwOSs2|?SFt~`_2D04Udyr4}cfc-TZ87KC4P*bl991~qLzLj_gP#Lt1hPJ;E#UifllDSX~rzIKur{3sQd`z%3)INlulC1hKK5p{KG}#!SW7uZe zJs03jzJ2(O7x1N;>ZZm>lrz}HtYN**w)2y8NEwoP`F$+<)vU)%UvwfheF=-m|^AF@f5e)o3y~EI6W7 z>(e+$SS^K?XLVG~*d*p#R2KJatQDDqG7}rJKpP*jR%PYtrXf}0DlHoi4xn_N>@GDR zZ>!2p87A8Clbwhi$ldcbx|@z`U%GW;)5U9fEErxjf{^EfnYoJQxAJWRvJU_LmLQS+ zJ+nMh%EABBK4~Gi7A;7doP#g%JdXHq?Wra$J4m!KFB{B!B#Zpou0THB!Qb|kFevvi zcjwpE_#u;-vccwPF1O`)!Q}`W*sI*4#i8LiKhH8;&)cqa`kBJNN&L;a)FK-kP;VjI@Ooa+j}?Fzj^3w~ zK|OES>p*mf4=nJ6pN0r@0`>OaJ%YOZ4J1ENTOnh;ISc+?;vG7pZOtc^*L**gZrEX+o>-&(5V%QkM%C>!ZI&^i9}KDr@RjIv9)An)EfF zd{8T@->nlo{p$Cl|M|bnd&xWtX}{rm%sm`(%e^`IsQam}iSb`}DgfE)A0(ZWCr2>!9xDoKaAhfB+*spQ&9sieTBGf(?b>XV%9`u(aI zBa|U;VCz`{5|qS%_*)GZ^JK9i*@gQf=09a#TL*RLY$d(~RRDjhfT4$OuhWsr4)>vAG4T^+SXV zpavzfk1^G}2t^|kYSA%PY9Uh=lZFt7HRo*lp>603Kn5VOY<;2l%;Vx%pGM5C;UAds zkAT4xK@1Ry-LEJ!X*&1GNA@#?)$RAQQ?!J(nd=9_+QQxD%w)HJMBzUJ<$GM+zG?Q% z4g#qEu)7XGU8FG%h$9a71pwjcWI0&p>dRep6iA;sxb2B`qD zu5Rb+`jZAXXbVE@yLb4mVdN2jKIi=TMBl3byP+M@5Zj>1N&U}Hx3X!dO27GBRl@l$ zssbe!hti0w@zWo2|G9{B!`=u+-u$9pFTNB{G$x~^G&3wt@SR&;b&Sz#Qyl)|lJZY| zdC8S_f{`9R6@~l?N=TQj@4P6>W8RNT9sQZFKP69d!c@Y;-Q@q_;G3AQ)8VWvNV|&7 zS`NYfefyve=G`@qp0J<2n(GdpUW3u`TJ1=-loem?`O~cp|2p&3KfFJI?R{g1*582r zm-k({NvYu^ar^)|O@r772KgeFiX1TdZ??l&rY(2!$LcrV9*cZhf7I3z2DQMdio zxENC%9pZbx@y;DejCX?Rb1wbH!c?(7Ur{wRH1hvB=YIsJ0hr)Gi7Vs$#=*EaF}kp~ z7mE8?7k~0ofpI_x5|noNH+nbF!N`dLX0G4xXZGFy5eNyQUuf>T3Y%*%0RZh-HTVsG zgWeeaPT;<`f9U()3ycD<>_&w2w)}>_G$e+<9T*PZkC^yrv3%qDEIlTZ{4PKd81R`{ zz_<8~eQ-OO8ESx>ocMn?W&b+B_k=*+985m?AM*?%uz{YuOIiBrGwyqiOc=j|RcjJ_ z=OWD+!*XGH^nb1*r7`{;fq1h2i$E-iKLlq;#gthGwX%QBvVQPj_LM=lH1*Ay<%EoA zc{;|U&9$dZ|5wtuV>Ex5BP;ncYi7y}3LP)%4I$#P(`t!X+1~Zee;8*l5Oc=u=MIEF zn;J6^s{uCSZdxfYOQcz1^i^NArTTXX`9IJ4cKLf8^5P8)8ms6_O;4DIAaI)Bq(|j{WN}+A?suq`n)m zYxHCC^Oqy1l{A0C$y48$SesN*-*(k90P;B$V9qp5CU6ZW{0;-3F?!aWw$J;yD07OH zxE4wf?y8=e%YoreShKl8Gd$U2Q%l# z)qZyAW>)MC0Ksr0R^1{BD}%R<6Z3-nl}jTB@_{zvPk(+}!U%iL0qoPMwakinbX0_i zBiKn{4CxQk{<(0#C|`n;KL{g{avsJ)&sNob3`qad#h)f-#kAS_v&zK3ixpK&tf|zJ z|3}V0PYT8q)RY1raelV{U({b>phDH=-G4azU+DWTVbtA0wEDY1dPaVI77(rd>UYf5 zU=(04DfI8~|G|o{3dZl`{{L6>7s0RXCjhW8rBtwDTpo zbuo}FP6ZP~CTYa)c%Gv4+hti&65b&ZhR8Zo!;>mUpWgr#CW&9~qMb#L!<*qh#lc|oxpegLYD8fmZB^oJfXBYvCkO=m)dF>IRGs2C92&F|tPt;_!Nr)H z>YfD)C3n2t4z2fhiortj2c6Zb66h^Tc)JlB69uP^hI><+%g7R0YMt_Xa4U%b)~`tp z68g3Zj3Ofv!8GbR-kO=ADQgLY4N+p@GF*$*0Wkv%djh@`#@_rIo+W7pEQO@)G(6GChp5?BQClhub9Z&?; z;K#+|fh zee*W;Pa{fWgdEq}8{7}Sk1UO7Er7nHcv@$zw@Q^oJf1aEZRYN>H*$9>ZLEl?r*V%u z>S}rTg{BX8dlpF;<*e6Lj9$J4{OkaK{i;)0$;C1^?4kd&)!o|GI^&C#l$iCnjPP(< zJ=Yf(HmkvtHTFhcCj_z36*uAUb8I;9z>HlSZB%+EF#_Dtv(N$YT0IclP6O`NDvmS! z3~Yab(jf776F@f8Vxh@$;2SXD&XL0L{B?Q}1X=Vk1h`JNpTZ+f#gb(Ac=e2}{0ts} z8S)6wt^hEsJ=3pukdxNQ`#V@J}JLbG(W40{u^p%Iv`x5B%}mo$Xf zOpEm4&v!C}l`%CP?d1JDOb>?Hd7Jd9`gXPfYWkRTz$!<4*kd~8MDyp9<}n2dY_4hS z;rF=zX8&iGdY+YKU1{#IS*`t#Ps@K0^^n2TL$2p4az7FJ6ATRAU^;E3_u=F6f6)7H zoB9vumVjYye!y)OEN*?@d{omM;#x2->U#b$u<)Kby}8(&vcOLH&sfyR_Wm8#9}O>N z7+QUeT{z7n+S@uD>D1BG>|K45R%&N-+8h1NS!991ic6d z@~5r7JLL48L2C%k%&Sa{b9j88l(-_Q%sJ#Pb=|Cyji{Kn3;|#_j$~{Uvk&(({Nd&9>$=wU|5g|Ot5p-4SayT^Iz9x5V#IbtKzU?@g~8R^V(3=G6$ zM2(|j&b%B-@S~U7775tr=DTOpqHE@2c+V(l2V*uXG6$zAea~I8*czc^*KK4wUMI*g zg!LUgiZ|_ff4)Dz0Ay?0JDjJ6)haVHmdF|ukg0^FNa6hNZ=LQXNC-blSx0P0IS%V# zyW<645P#9ma>6~h7AUzI9c3ekX*m{Et@5vo>ZfZeMZWoZ-)&m%5sg0Xre_UeVq}sA zb~@|O0Pm;^8;jB|ybZg*aO82jj#oJBJ$;bms_0)a=aeFW#Jij8(&*Nrx}KXqBz3dv zP{fW=*xb?dN}#0k6X4Nf4qUirI;Hlge~`<&EC4pg?Wekt)*_vrw;eYCQU@1fPlxD( z6bYTWo3~3WD8%lJz3O{T`-j^NI{0z`7;-75LMY`cXRXJnaC{$NUbVD+y?L!~{u|WBMmiq&z&{+0LZRZ46ucKK1=Khl z4AT;!DgvX8U-tDzjT%@ogJW1g>(`t{YId^fTx=rpF~G7+Znlnhce&7V$F1dSf)pH` zDvlVwscbnxViRJXe%aFv(-->MP+&lCZJsTCccMcI+Vpw@?yF2(ovOX9;3F}D>#rvf z`LMr;eq)m0=`f<)z;2`tl6!0QY}@IT(u;ZtlkeJoigA+g?U?>N)hTte^GoxZ$c6Cf zibEM`>jvP(UR3E}csaF&_mojpS42A_%jF&$Q^`{?J7p25r^xBS1(&sqShP@`#0Pur z6HnO>b>T$@m|+3gbB2L+4UE%tvxDg67S@IBNeOq`^@3Ot<>fr&TI%_t#arWJPx>+E zQ>9{NY^M!0bB4a3fX$ZlJ^5oC`D9Ks~Sj}s3eGKTT@Mutt;|zwSVlMNN+H5oTDlXAK>6OHtu=K`*FxvEh<1~P zSSLx5ddrm@%t$2c%FQzx%e!brp(k85FFXt##V{cs*;6@yrA1( zyr1WnV$uqf-$9DAEaeuz8jfXQU4nP-!+hoY661Lf>(kg0RHT6q5?Tcg%*fPlNvfgAdwPUXrUxPNb(Nj+_`h_9oAd#kGEb~^9O64wKzFv zf4hHs|MqueZUi#rZ4Abu2TgaGfBEgpqj`%xN#tw!#vw}o_(0SFjXB#IBm#CfYOHBo zAo=stAkCMVFVwR9Xckoj8!QDf2|{!EE63CC(P9 z+>7HTqhjs)=W`w+pI>lX*?VIz@eqjMKyBKze3qj|6|KDi69=1{P2JF^u|55~i)3uV zIr&6yPiVWoOf3!Sxg9ey2s0AqXW6etMED{Ffj6&;#F_Ccyg;ie$T~~sBfk!XEXIro ztuQ*w`=AKb^_AMaB#z2Tvk%^knprue6Z#?_x72(_XOQ9MoT(QPHO^pf)splAuf>=3 z%!*G2nR_ojWLbO8P|fvY+tKhTg7Ibj%H?#`HUo5(-vE~5WQRl`UZ*U2E8}gVUSNq% zyeKMi<)#>=FsBp_ZLozipVus#+CnQlXT{B~^v!g=K}AB*PcZq3@DKFL zc?mfe^M?Sqxv(baaMNajA48EHdlfgrJ0R*qlSXFx;wun27FNC2;Qj*PIy|o)XjU98 zWH4Llxjey3IKSd+?vvxY;(2wrad=IBWu1S6qmpC$(T$*N8V<&ZGU|nT_Zix06z1Jf zoM+N#jkuTEp7n^cXB9K~LdyI}Us;8C)O|ZP@jsSyiQ{BJ$>c^3H}akC3J&&R*_+8P z@{Y}ZWDPWINHXEkoUe%KD1LlsJV{|~VBTV-1$>PcjJiMS9g!)Qm;Uw!vQ~)Hm^&Ar zUs_#7;q4QmQN`XFHu#xbU_JM+-O>+hpxf_uK8_O>)y6Z${3m8^nx0mTj{P43vDpZh@$Om2lm@lMV-?wOpTL&J)?wUhJG=oSldAadohJ}H>fjGfleUnG!= zb6gLZDrhiEcJ5jWC_#ig@-)NjO>6{2RW})F@tI|rf9aLWOt(c{6e>f*iWwtp5v3^n zqy!k@vRh}+Q!r}%cyfVAsdB{ zie|ngb#wascnbF_6A}La+Kyi1w&4Sh!x!6}7kAK1AF1y%Ove{4aoHl;!U%Uunnw3W zm)^MDEa3a7uBuLcZCl0K6|LhG_a|L z5g#mP0uq>jd1sx{?q8g1PNcELE%)Z!(E3!#(OCHb9hMa)^WnB`8-NAQ?m{NiA*NOm;?HiQcz=8bmu=I^c+)8;P@KjSzr zwZNTs`u^}1C630>Z$7+dlg)X4M|(THQlG$CJqdyX8cSb%ax_l zMld4qUh;~I{U=YC&{c)^D3|aP#$EfaX6&rCO-4?(bGwL-pbW8wMOnM0c5X!3=8neT z7!Aky36Z_)RU9Jwa+9W2=>^?#;5J**MZmV&z2E2Ziv@4w^`!Pnz2nRASoVg^gxBLG zy%AE@&w}hCGVu@#$r-QMrF725rssyT?XvU_Fn4Tj&axi$TQU{oJrLZ3x&vJ`o+Uj; zi)~g_ej^#9*8)`Al{36YI&W@3V<7wwR(%KO=%g;OR?d{zR7N2Oc~w!#`Q3Ka#tM^y zZ`*Vmek<~8cgYyl>PNmFYMv3$M$=Lm!8i1 zCWVF@m^%$_+YA|uc#5J!ab#rDt-Tn1IsCoulsnE_FJ+zri4))2PFJch9_D}f;^MR` ztBUIQW25mcN(#DifaFPzMIRj`H9M?XZMR4JG=AG*2eJr<$%xEs?v=ode8q6UDP@kX zyhzW@=$IKqa|$80}Bh;@Oc;Y?IItn`x}V)8dI=9+Mid z#q*C>9EK?s?FLTjXnc~Sxxk>5#u-L`$F@sce#bW>5b&}dxL15>HI3??IC7_h=&Ns^lQN>Hk_S zl07Q7QRF*CKW2*&dJ+Z~WztMddFVXvn_@iM<12@if?W>sj>tCc+K52JOMvT5>nNGE zG>*&9yP~t+m-U3Ay3)rsytnMpNL+SVoEW4J)|@Y{-ubP%(>dPfa&F354q8XE`U`Hw zKiU$#K+8>Zs!J)7AoTMN?%xeG*)NIP7I2$U?*V86&nAyG+6AZq?u32`xP!Jz>#T@WY|# zQTVDN#;6{Wc{$@!DSgR#peT#LB@x^5k%}UDc7qG>4J@hMjAD0xYugr~P=P&wN*h~1 z9CbPgjk}TUEmuRxCfcTNiLWz>kvHzV*BDQ{5)tcYk$JzOs^~P$;z9%Nh zI<2v$yQr<1FJzILK60&fX%IvAB?* zzf|$84MiCV`!xx|Dik(c%akN$+?%jIMHz2sD?U?xn?YaXk|xdI<18sRdZ|Mv1(PTD z;;3OF_CaJr{Q%>%jSPkstmUrh{yaz$E9emMu$q~&wS2qPXiUxr$n)Ck>m4IpWLgxxhb_$Gvm_-nYYB6Hrxw>A$p1{V9+i??C&S5)O z;*5U2NWO-A*JEbU|J;w1t0B9YXi`-&K#Wq_3!sc!s=?;cZ|3^R}Si4b=UM8W3EYqNGb_ImCYc+ z=Ue0XBgt0E8L4WQ>P)m_s_2fK^)!fKPoBlI=AALGE*Jy{^hb#fJ>vL&Bw=Msbm+)E zd6U<6jS`WWy)2wPOGtcG-nV(LKxx~EZ10_+nsWA$O}0DEmm}Iga(MNidI4Xce&7p+ z_pTs`iw7oQR^-`FWe?;McrXfg+>9bVi>>K?pJAJi6t@c>DmM>|tx0FJ1>E|ecRpxK z{$u*K&J17Vmn{uk$&;|CF?d-593)_hvHPAV8a!}`l)rD*GQK^`eltJyW&bI4nmRoud;gg;mc)w1a#hce?hlm}%n3oSqR~F*DUFsi60nESVZ>kx{%xJ zH^B7AVumHjrP{l<>u32Z`{BGx?%RQ4Xkym0kthX6^<+k`00$q>WA&hJZ?nMEL2Zw# z2BinBEE&d3*9`w1<+6`*5K5P2>+5-_n1$CYuF`D54jNoRNe)WPEg}t8IAJ?|J$h1t zR<4y4KQ8Cy^qY-&CjlDQ2)PX+rQOWm9m_O$l(>v^sGx0Pw+PDx)t);!ci}P2#iaDP zEw5N`CleSB2l9-_nr|^P=lS-=Z$sL0CiiT@3HCVWTHDjMQQ59rV-Jd}&FVWo8jae< zCAFq)%SPfFK+c!2Xb_EU69cxoAd;xH=T1rN0&06Xv_pF>{(TF2geajtx;15+ny=?q zF7nx&ZFHL(S_tQ;u%mC%w6ol5r?po|3}i4H)uXXxKIcH#al|fjA7COC*1!1ntgUgV zH%{%G84k~&!oR;YMy``MXO;T{j2>rQ6e zoa=Gkt&+=m_@$KdoCB6N|D^Bj>?1(0^$1T$1mDyB2n`$cmjFKWr2#$reV|_((-w8& zctrMz?8_3xzv9JjhDXkvyA|9Pgzd9BZYm!<;L?|`aH)JJ@l9mv4f!%X#!+VI)>nHv zGhX%v^{in)vo1JFq(A8rRp;Qqz*qBjCOa>cyU(=kEHev7ci^A9i2HlP=a3Y5#aaPx zX2cy}wgh3hxh+-rC3SJGFyh`{D#!mWMgzbST}?tYqPVv_b8bu@=a~9h$%Lk^Yyvv0 zED|l7MBzb0#}`wV>aQwz6LYUyN6W%x>_s)WRqYT6|Vx9Z<^JRiXx}E<~dOxT| z9=t@U>-dCO7PjRKiz)!!RmA!&ou=jPY0ON#O@)v>2#aeaPx>=qx+(D_hGR>WRe#QT z{iP%Edxz#3&FkMtnr;pT2#ZI+U$e}=Uhw;W|GgXlB|7y3;#qi=`LA{Szx+SpGmKM~ao|thvQ%ZO3Y#SuQhItc5w66_x%F zF|`9KurJNV8<0TRxCUGu@n1^yi?df6#46AB0tv zUE);^i#OS7QPQ#`Y^iLQ+LqF;CKZ(2{5u|`2z;`=RVy+ADz+#=7YYuhj{lNOcYzNm z+fsP+J8zS{?uum2Cg0ZRW&FEepL!ni`SF(@!cJP+g(-S&I!h=qT$Rv@bL&8q7*2mf zuJS6k{J_I|{GT%k+ta`{G`z7;_iy#?+p&Qv*~O*p#j(r6X1b*Zjj)k0e!mMZfb=bc z<=q=zKb@|b>wl*YN~33TpSsn{_%94}3J!)O4lg2^ISd-L5Z!ePKwcm#`gX6%yX@DY zq!KyS{zbCn1M)GVdTe?6|FZR$peSY*wzI2iYtbDhw;$i~bsN2&zxAzhwowxVYzfnT zCj&sPMc6t1tDo`LwJfj%?LA%pqcqUV@on{;nwN&^xL4dbK7&Q0J)cpAaWM?gDtf<| zkAF^7{*{W|<4#|G{A*WEiO9Wt?ju5T<#U_M_2Yem2^$^oxWv6UxdMyy$L)46POnND z8e07I{eLRx!ugr*^a?$=C_>0Z$#Du-tKR22XKEg03c7cRQutZzmoIk z%`40rgX7PLH_+Ca0ESlEA1JG$aAnW`_G!;^l~Sf}Oy+vOkfBTiT1@XWBnyO+VFvDbSpF7X(ZBxl zFEZgfz>WrZUjH9h-_Lu3?gB80*E>9aO9{XNEC6#z0+-(V+Z6&}Hx1zF=Q3OVWYB+J zWCZ}l@r|B@{{aO5A)qq=N{@Lu?l9bIJb;_EY^uBPXUFp|>pE~fSAnPB4Y=^1E!02x z@Sk1jKULz-3qBs;>2LI{4_jIj&{Ex<(>e^Y{u)peTD<0AnBPtSGc1C668fJE`O_0- zy#=0rRpH;w-2YnIE+7_cs$k6DYT>a{7XiSm$Uj2=Q`Uc8{3G;#Ed9STq;vmwTl%{P zx!?R({jUhu{`l>24WYmn+hxfF4c!0w?smb8rXRlpODk6#P5v+8O26d@P7h|v@S^wI zM%&RMFB}7A<1)i6Gbp7}^ApI{P5^e=Or&z_$>4{+vjmnyCdEblQPQ6e@s+>?_9*}h zYDsG3YN1DgB2?%}gIafbrAf$*u@rP1*TzvbRuWa(?NPnOPnLrlYek(zqNC_u7EHlKtJv7=?&(*94z>ZU6dZ(A4qfhKj& z<$p0SFghwZUG9CT9?UQTcxrGii!xa){__7!S^S|iZM<*&d&&4qGY*GodzQ%onlv{4 zU{K;eBlXV!&8G?EK|BtvhtLsZ2P8U@+7A@|_Qychd2ob4Y}Td22uuOyTQD~@cMp4f zERc(6|7P?*Lm_{p8xDy;vQf!{J?!yX2ie4FQ_;hy`)Be0Nd9kidghF&5K~tUAMCYO_z1It(lIy}*Q5U5vaUE>60lJAJ8k`{FpIg! zc&TAzDWULU&c?apmcD`SX&&5E=4pHT_T0CQbZSOgb4Fa+*d(>Pw|f;r+?4KE?cTS< zP{H>0P+3{+teZzV$Q3-phuNCIg|`!Br%c8FmY;wp_~+;UuXDR2q%l~{&gJFLEY#o#w34-cxgB|>5u_{x{;HR_^O$FzC#n0?y$Rf}Dv@1LfE z)?@So6uU;bfPS|`EXOI;L*s|dg$Zjb7uN?Z{Y8V?wg8J-So#L>!l;huN zrS8A*rlN1z_ZnHP)K^;}$P6h@d_F@+ulz?#k^`3M4@r`)ycK>M&_l*Mx&`* z`~jPtUCm~Cer7N9;}5H|9IL;ep|{#TzGeo6`VQkP*kL`8+e8ppUPx~Fe6-UYnM5+_ z^HH1`aYm8B<$GT}0%*m2vRfJNz=}_rlv}GlZVK>wCkaODq(0WWV*I05cCFhSd_72y z#`tu29jE^4#smTeljCo*RBND->>M=p_#V7!P?bu>72@>)|l&! zBciwCBCwOE;yDzx6K^i&jpc#>&e+(nH;bBBQ?nYWQt+kPxcu8qPbm^pvZI0Wa>O^2 zW?g0Vlm;u5%h*@da8szE1p4bs4xb6pn-*}X?o34}t+Nn!U%HZFrqty2XQP+GSAtIj zp1`djb_zzJET+sV&9}n0qm<7M;}p-9glAj5Yu#(R0$Hl$N=$6+`_%m`aORxK_85ao z*UJlv9itOeqF@u#-0SM8>tzADk851bA6MGx5~w>SyGXyb%4X&=xXeVVkXdR;!}JF7 z^}GVE&+47A&0&JCrsc`3gKm3`+NEP|r1?(ccu$tE?32C@&?;V_m)`m8My^3z(v$Jq zkD%}_6Z+iN#Vv2urOWXW>Q|9>VSL!Sib6@-?Nq^SYlvHVANtcwJ z4?F7SpP&E3x<9M8|GxM~ZT>NtzjJs0xQl<>#lOA8|8Js<*`uK-yT3%xg__T62(GUi z)U&ikC1rBe|R0LguNUfHvh zo|=gZrH{QI?eriamnB?$*Lzwz9~Cuo)KKKoe7|;B-RwTYFo96GIbqeFt$Om)>7V9`1P76|q*r3?EdNch+^MT9e?HI-4IjiYlf31kwxbXDo;yW_Jo!QS3+ zaU}LioUcW>i^+G#Df+1|Rg~I6@S4SWZ`0e7`yCnjr`#J%DoriVa+=;d`sblf3wHsg z3BQ#94LDZ_+@PJQ`ILvT>tWUB(X&)2jQ029P|ep>gT&XhbPyvyToBEF)auQq(ZR4H zu6^PW2axM`G9M)9ugK-jutu^PzgGxySd2&ldD$EgdJ1%%%oHZgH44|(!I1?jizRa1{Vof&ZHJZUgWFwXtUq1IW63jsjC(cwr&`S=L znKSo^PfxW-Uc&2aEK1rZDe?_u6tkIe-Q5q@{POPM;`7Ud9m&`0Tg$nrjhOSRep`7Y z_heM9`R$0r#`=*(W32m5)%VnDJZ06UOfM&|W^$2TTXzi_M{0*bE5$+3zCq{v%flZp z+Z)wIuVP#zEA3!dWcU-M-8{Mi(cNw`oRaB1fR8KknY7J!+qo}7XAGeXtiuxon^UUC zj(CNj!Y&DZ-N1G=1E*5RxHx(tjx$XVnm&<*nB{hkf-2EWt7Bw3s~)PaTNG(BBz|uV zfEdPGcbY22)H25lJ>w=0Gp~eT* zYW2mHS6>$Pj&ZdkvBadNwuo$yK2!33<#-Vjv;iFnZC&iGU}YCVT5sZHT#4CWE8e)n zyfC+3z@lAk7#4Q=W`!ajPO37DMZnr*TcKXV@??pN2~0OS+jQ=Ol5kccW#qfV7{2mZ zM{HAM-qtK+|I9k;d4|wrRH@w)9anlMc7P~Y;bEhbI9)IywCX19^_1m zz7{yp$J^V`>?^*m}Jjz4pLTRAdnX(MjkGvi_5cfE@Qn6&)lnXo8>-q zYxhe?;y^E%b9Zh(lQM5NFemF)n|s)u!b`meW!Bw7*$WptU)FW@vAuB~TIMt}6xFJ2 zE&QbR*3IRqNaYzDhoy53(D)1f*XzA8{WNAH?w1uD)Q# z<6{EZ#oEl+oDXg2th%2|*o_%Tt9IvN)(>{mY}uH9b`FH|#k?KJBP&DTBjwS(YyIoR zLd_DKg3sK!5J&p(vBAyP?0K%;G|=*Z?(GJz$&-rRNS$<3fPT~FH|^?9iB#a$6p3$= zqHk4ZGhVq>MN^;|tbCMz=8AJ)+mlDoaJZjVdJ;Ft2>U=ywm`wQN`Bev(+cJ+gLOqA zlr42Mjm`gwWKCMrvy}ce6VG09 zfIP=3S=(mjlN7yCz~o`=*`%KH4y0Soq*TfDSIkLu=UJ?S9td}B_R}Wm0V4VWn>spH z;TxLa8*abZK$itLFv`?os?S6;8suu-v2fqm|zqB@MCk1nZU@Hu!jH4@}chjPMFPmY@K~QezIaA!YI&vas%EYh*Ms6HgLBrWA&IWCdeH0DRa+lJR;w5n2OCQMZ6&kDVyg{`E+Um@KAInw~-AyKHR1wLp zF2F)3u#cL&neG>g6COl9=okT;$SIh8t|;W2qSw?(<1Nas~Gmfn_F z6GpJf*3fm#8U?Ocj{tHIGdGfn2g3?$3E@#RmuA)oN$^LRE2on9Kf z*Z#%OmqQf=*lETbjWMl^$7Zh2KH4~RsjOlKj-ZpaUWqx(T<)8<)Atnn%+4^N@R7BH zER*r8SCxsqK|7xQ?%mQ{Kh|7ct8}aW1(>15f>v1O!hq*lx=zpH{x}7>beuFK*nUCn zL9Ehs(Tl`N)i~1iNaH(L+UFc9*PFZ(6~lsu-Z{mamR@aMl?i4Wz%=>fMD1SwLEh?X z(`R)*hg-ll`f-2=ALPpJA3Avi*vDYs;HIf z09GW<0#y~LPxG>h!KuyGZ>d(;2>AU)wd<}EFi+=UHiRptCEaX!g0Dy0SxoImW<2xe z;~Urq=e^pHpP(zxkKG+UciQE~+Y0Jqxz0;eDq% z)00Jb*5lpt5x1{ZzmJew*bY?T07VVuvbkW6Eqzn1HXq3ES3GOkwpkBm%%4_fbWrnv z_6?mVKon>WD6{1>8C`oDJF68aO1wKdnU>eB>2n8F_(n-Wgw~bha!QcdyUEor#yftc zOlgTyglH6~A-sF?hKtb7U?}OzQszH>;Wb^;kjkeuK}q@{HQ)q|;{m5o6LtOKG%tA! z+M9Sd%RZ!iG7iS&G4$=<3SfP=#BwZXEOO!5M1PB9+#uN9vSqI%ZdUF4g0<@;~ElI*cwvbD4lO#Gp=6S6T5uH*7cN+Ett=~hu((W-nNe7H*-=b zI=~8AFImzv5<-iA%FoHSUDQK~;6aRFZ1a2|D__JnZopgv-8|e*H9XTCzcHzmk~Cao z9I{e_Y0|tVSR;b}ygAZ!_swR*Fzo8R8px!z875%N*IFTCY;4c}>HhBCx;=8jdl|D) z=6aP-fxKAb{}8g=DmuA8RqQgNM=IIA7H!`%VW){_Om%sF_Cv2`1NP%Y*#I~Mx{PqBWxGAi>JbbEZ{EXuf^A&k`PD|e2%xBEh@`Ei4V3ug4rqlr&A76E*9 zWj;OqK-=#oZ9V99_D(J$a81p8la<(me<#bSDAJ2YtfX_$GJGZt2ffLB*B8C!Iqjdg zlOf$ied8AjCw}v4QT~@9<+8B7n(6LUSwk{CTGM8G8?F_WO<4e2;NB>dNrpJA#;Ua= zZ^P!EB<8QwKUSnJ>NnfaOG&si;^OkXBU5R^)UcfurOVIGaCat6@5$Y( zXpA5UN6_iAKrL^D`b#3KT|UZB-srvQz-1pXCe^FAaw#j2(x?1I4>;e!1XM!;NCQHgYpt}g_r{kJ4fzh;&*BWMb{IpZ`ejK zZs#UWJ}kwT*_3DE8`bvh+(|;hxGJuqYxKYtWAZ~MsX+9$LwoY^Oq&w^#fwFQ^Cg{u zn(1{P7iU%p?n`Mcdxo7%ffo5yV2^A+_ zxebw*w9v{PREBCnZIXTcVth@~31+yPd&^?<;_}Ea!X4P7+2dJ_Ws_*|=Av|PJ;-Ly z8wf;3UX@g>^teTk@vf9@S~;`;8`fg!l=@OigkSXSl3{yVZiGl8|G?;Dh2f7SPmrW6 zSVcK)37Chl@daFD&`b@r(eaZHYZjP}J7BElpj$hK&#UX&dpkW%p^&^N@#=|t4U|li zEFKgP&@@sDYz@0q>$q+06Tu@X+%`HwD5KwbT2@fT-;=U9wWRBG_L8)>vvcL^u^v+S z`=x`G3l3noK}`H+xyaN`35r+oHx}F{U66S7lP%2yj)3%Dgk{1!ye2sIXCX1^zJ@0$T?ZXs$g(4SA^UvHKVloXkGpA9K6OSNc0fh8-o}qzq-> zjoTeKB_^Syam7t|ISU?cB zXuM3O>UcL-Pq(unN=Hc2Q(vZxKd0xh`lGs!j@O*FaNnz%2wR^b{1ywoxXcVm7%>dO}7w*1R49E+Ow zlph9r?c<(%`%E-_D{-(i92Xw2a~d1+a1T)J%-gx>DBh+mM-s<|z^&nQoeX!PI@5C7 z^kX~ zpMLd;5&-Ot96T&R={VB z8s&|H11*+P;Qf#8PW7hZBWgGSj{E zO_TQRe4+EJlFIQD)NXPuW7!@f@ppmz;C}#H`cafqraJ!nqP_*_U4E69rfQjsC`XpB zIb93mUX zNECTEf_bYEfC8gbJ7L5?gH>Yvn&9u|HIdc*<(}e!&bhufry_3}gaDdn2(UcdL$$N_ zCZ_m~YTLU5GfelqfI*$@tcggyWJO-ojbUNSo#{S!yP%jEkg??=3T(q8DmBJr_RPFe ze@ace+EJ~2 zpUZ<8msxPYFc4B`##tm)HP9(7uJgv#VF%N?41)4tC;dtjkJp9pom{{`l4RP1;)|Xs z#>?~$d6==}s}3I1ssd;Tt4coL&8)x!Z#EwrE+$qRr!hzDi8-&E1X<3^7KAURL;*0% zi~jO_?a6~}W83a#fboi(s;8>%$(Fd}ShnYFSLcU#9qfAwu-qC4HZ*u6`wwG$Nqt$* z=!8GX_&}Id?7jk)`n!TCF!85~wQ<`5EXk8N_-qZ6!s&oES}^Qac_SpTj2>PEPE;iDWi5Rc*%gPRHC)dt;c>i=e**ha0W|%Yloe= zs-^Rx*+80B)TkVm`2{gYachn0|FdTNpBF(=bpS%40ml)H_@+4ugKloY7eI;i)+66nOxpISZ+rQvv_=oqwTK zNgY6zMctG5S9SS67k7lF2dJ}yM*v-*h#8Z*Sbz2DoFgnJxKu?J$7WtQ=r@>fG%AP4*wR0}xq_RY_-st-~7d&o926 zSkriR*ctkL2f#VIo)Gk5&;LjG{|Nst*7Rpf?%?7d%m07Y^5bJCprnEDuVD>|`mAH4 zrMpJH+oJ8SY@+DqmP)b&-5mig7m z!M&OEoo~Dfob`uMv6_QzUM^K zt6#={{RE-F32pZ7Y38C>c)sfE9{f}DAikk97{C;(^p#Ir}INQk%Z{!`!_ zbt_;;wOpG{cdDD`O0ZpQIh_3nelRi?v;kn^GNQaDPrb=@jdzLTy%N0fycoxG1tN3W z1f!{R*6Tt=Q{1mCOFYj4GnB^gn^pPpLS=P#aeJ{7mbaj(>*=^A&J6#S)skLwFS1WF zY^(xkn^aR|wtb`J38zkSZ2hnelmT#jL5nm#6YlDdE1q?1wQ@2pm;#U1wQUwU^(Ip& z>+#URD?+>4%+8%tF;go4$a_R|h%qTL|MZ(o$19wKn^%Hg+%SBa@+(WqiD@gK8h24K zu*$aI8tiHTw1&DIaP<0sp7rIe#pG&5gIclK5RGHmo{IJCv!}=5fePZ-sxv?>(2je#meaut$j{Rey4hKZLYg zT8-6w6#rr0ZgM&gH0WQO=NuBaub4j_XIseK~KTz9uVLBwq2oZL|@<*PTD=lVcfVa6Q+JA8N=_(wz z>V|F*K2>Cl<{(Vi)U4MtVlLbDa8kPkz>^1FVrR#ei@vh?u`m9<$XR{q9o9Indhq}n zVhKVKzWLjSDajg&fLs8+cWP%e705pJMN?seoVFzLx zt@kSWS~vfsPiC$oJPz(M-LC zu2-xmwuMZv21fP<< zIez~v-Ioc1|0%HLi~GJS+EHg^S1Wug3X%z2eszm*FF#UYhZ@N@U(|jzGhi=y3YH1w zP4k*do(eswAP?UL<%f_)F{AC-MK27FLHtM8z9w`vofnoO7Q1zofs>aBN7*G_4eF8F z*W-CtS$pL+i`Tob#8)+GdnqG(aIc@Y$lcU|LZFy3h&q!>SLu=D!%laD*rJm7m}a`=|@H>#dy_)T^F?}~72m7z+2 z6*4>q?ggNB{cA_bsHCLV4X$L>TJRuV_a{%9Ie5+3CPxw5jkhF==|rHrUClA-oU9gv z3S-y>lAn8Qjow+1reAGR;JT$k+;xH?D;mZ6>+;FXY4cm zEd()fHJKe|_FVB@^3MflLR5Iu0vVk`+E0}>yp{wG%d(pJ{*K(&*W>MXw0<|y z?CW)|J;k39>@Ajo*VT^{4WHQ3!EF#8F@gvrsu~Y*hS6(#1Jzu&2EQfC?vb=UeT|-u z*n<&%Qn|bViMAvky|TWIE2V|jl4`8xTch6%pvnSf>X*Ao2~)f3aH-{ruHLDAp94g= zbfUZ?*C{`o!bWIxNHe`OpBx0)_?0u-U&nXOO8s>-WLd>|tzOHV&7<0~uLMfe)0yb-mM^)7-Ui6HAx+U9;uN}=C2+L&VpumgkrLT6ahG%kr zy7pLNHN0t~F8Y-siu$V?H4tY?<3~z{djaiukzbqKC-0a%phANueK7LNb@Lfxn9Q*3 ze%hC_=i3=_%Mg2=ZvC&5UYRqCoF=Vo=1=W!VlFYcAYP7EJR9y8*qJA-aS@Od!k9hA z4O?v-lEk^azrN7E!VggsJbNZm0y0R!ia=FyzI%%&6|YZlVLHlo(pdy@Wn^AcfzP^j z>3P&DHiR{IluRHy+8bqxI}`V3LnPm1_n&^5p~e;+So#=tbGgb*ncxap0_71O{Ir}k zR32;sp&qHRN+qmf>>CKA=8;WU^5wo#xv4{GnuLcT5*?ir3zrVe!R^)w9esL;4@4KYbUbCbcuG9fHF0R|$b%-8# zN#)gEIvX1XNXABPAdwa)nLaksjxT!g>#=FCK@?c@Q3DkMMK|%0-a70j*0^dNVNkpK z6ez`&xKs8BRC;iiFm@}qk&BVZZgjruz`a}xvU_WIY?_yWJG4fUW6DGN5M+ZI zM4J>GPFZZ6BI00YB%k=(e*4`~=bQWNthIOH_oYbYNxU5EHB&@E<6v1=YT0u8NoZ!E zta~F18)Z?%_LVzzGln7H3Tb32s3fo-b9rZWc_RT8%w9@LVG&UE-4RTd8j&Y0e;A8q zP~h3eQb?~uR?3ZQ@v@kUD$R=I50UGMsI_lRAPw-xT=j!070s{etR@>7EIhErV+_5m zU3RtS-)TM#Sz&rM`rT5rPDWv@Vh#GtUTu}l&VtzY>5u70}SqfkkgR3T4xi=a(3 z)UkGIiF%4T4Qk;#vKf_jd7;~#JNQP7+J5g!*V>tOPExGqYdq%?^Y zFMfJXua-)|g8{3LlEwCb=_Mz3(%qUP6&Wlk`|T}ncNVmMFccYugkz|yJ+R334vTgP zoARf$G_rO{d=WJzbG_+L8n)qnB_wNy*p_s9n#|p=*s1b{m5KV>Q!RPZ_IJNh{b=y_ zLVQu=a_GPwv`E_XYqPh%3r_M)i$QpcqWP%_;EN7lNtJOW3UAZb-M(sqUC2>rG?XwO z^}7C3WyiyyWRKte$T-RigotbRuf>uo?U85LE5zSYc3(2X)LzU)Lphmji3I-*!#zol zI}Gs8al}Z)8#R3U3nwM3+BR0hMS3Wf!}Sp0i1vB8nX##GV+)Q|^U50y@V0ulR%|9M zGH@jO=$h3pW=xNhud715X6UAb^3#}Ly$UTRaXtR~;r2EM7AzxLWs9?VQtv?8@$5#u zUNeV+1npe+@yH5Gn!X^bV8$7A2#K?=9r+8g6H z*$Tc4HVK{;Jl_~97+#fH5U?YVg%liudCoRzacn;H%TRwWxGlWw`~f)E{63pCyXEz>?=$Pz;N0=(IUoQ16@ z3n<@~VInFcka}|gEjg5L3JweQh_oYZ#MODrPq%@PuU&FRk&3movhrS~Oozy8olQ`Y zdr;lI#TNg&7bU(hzO-DttXWZB*tRhqYJWX_ivj$t7tV=j-1wmWnwQJh&Eh;xP3K3^ z=o7A{on)e&C6=@>`wdaGT)4iLx%WMSOlo!xb=~6%I)=V%Rq=r4gUUR^B52R)B{8bUXjgipo9*q$1FL%aj{Dnz3W$Ho!n14r=n8{=i6+uwJUA1@uQ-+^AhVd5ZS!&~QOWfDv`Ay~9*U*eA>5i-UTq4!;d7C5H*0Fo3!UU!H6i zZ+)}FI{EJVz&FF`dq7s}@jR&&oYe}xEG`|pRxc2@PB^(x8?W$kF)Lv^{DQL YfbG577afb?DzrKt2KT}41@=%IxwAOfNwy-M#$jSxt%0MbJ5 zB=p`(2qYwV<6V93Tb}j({nmQ;!8&u!%$YrVu04D2Yvv?eQ(c+nG}CDk5)v9!m3!JG zBqvu$NXR58PZ96X7mbpVkeqI^QB>4aRaE5AbOBh|*jtj2sD#HQQ0VFyGPQ2{EMNI> z^6t9}woBSM56eHOlxJPIK>6Y2+o0Dp?>?Vrp}u-G^XwAkt00RHQ70>&FrT0v;r`B% z85w+%nP)fP`r2ALLKZ8(n2zp1Z(xyV1aMQ5K%&6(bm#E$M;VeNnRgr$-LVYJj2d56 zNlrK^F!TgU#a^HDc^P_&^q%W5Y!$>V#N5leyKF-6BfuU6rrml@N)mE4^&3N_(0RF# zNJj>94l)wGfNv=M*9ZM3VIN~iZl0SK?(a;RPq$G|o}aW{xEJbk<>)+#OnBQxClZbi z?=qB>o^@Y_@oP$s;f{E%gye6 zA%JA|Dv;MroiZbZ4rqADMpTtjpA3SGRRlirFaC0{%{$;0Nf~>HAs7^Cp z%eC`@cXPL3$}+1&>&)JbXi2Nn3mNmTFTHcU_5F0h!lLCZs+a{0D-}t@B|5>@nfn`8RwC%*jQ3D z?Ioq+<^YAl)-+jW8PS$NlBvfpPe|?x=CP4DbdzQ_WJE7F-l^?4O9J2j_$?@PbY!pg z;xs zfStP`nKN29Z;;x`7E$Vj7Tpoe8q+c@kiJ1>dj>@nbzi4Pq*`+9@_O`}yH!1-OQ@yN zrPFS#^_M|ZAPU(4Hf8^>Zv~ky=|s|n28K5~-R2bxNfhdQ+G*2i*(uw3Zb6nIBKO(y zW1kXvv9l?mroo8Uh%kpQ9#4EKf=8%W&gO>-H`h(wb$XOaY4B=1Li)9IG$e}o3+P+N zRL%B~r@608dRTXB!gTah_cUNOY&-UZR}ksv@N;*c(CO3F(w#j&Mg^u+e5sm6_D5u9^ zFh)v+Rt3=ZyzJHpVuMHg?OKl?;_<3~Sd;jXoH)8Xd1JpQCg+<-+FD zG4C?pKBwM}h+&T9{?6R)(>?)wH;-(rjjnS`?KU zpPIZHbiu4EBH6-7mk(GfQmS3*YLq>8(ZRr>%%gDMYn@TVGMR!eSYI7-k9oMaXM6bk zs_v@W>Z6rD_iVRa_Y}8`rSmA3J?*^*C@EA6ssA456Aia@0KC)cOLUjXs7@t5Pn zZm}EQG&=cs-nhoNu|llE%Fw`QvgXS8!I=F=n;Ngi?`~Q|%uUVT0D?C^Wt2`b!Or?e`ezc<34Wnm!OaEM zkrX2oCDflTs+^9bETQyecz)p;r7dk}FnJL0q`cX)k1xSF*H65>eb*yIhAKDADhz)i zl!lt7_>2#mBRy2Cfj8(v#nl;=Z&;P?@9XcPvm&#;X{GhL^iuVrdfA^fSUh-kt%BNO zxEc9MCwjJ}re$^}dzQ9U;}*)W-e*}e$l>nOyOTngO1+LUJ_GagilepDb@ZL|+;oEB zg5k;+V7C<$MLWZA;ry1-T##!C*J$%U<-E^{bTW~ENMsi}7Frfs zmcSDnWViW~G_UZ{(6?l5vvk21?~Jbq}7>0|vVWxr)IhY;aT;&W6UD z#!hX~D6NKh_-x7UV}nLEql{{(YcMi2h(^)N&&!=ToVi~dpA1Mck0Chfbmr}obp_;K<#^)hR-W8V4hT93HC8fjuA2A<}!U`R3 zj@N_79VTJqkYI2&Ab%WQe<37hBIdK{XGroxo80@kn;zvOpi+CS(LmX6vNN(VJDEE} zjTj%`8czG2k#l)pRb}CWY}SF0a5_;~*F7*YMZOsre$e6LKHc@u#4%9DJ?SYQ+ zxQJ$f8f!PWZn~Zv1jn*%^0}^Xw{DSJ>VVaPQG)T5w1Jyk{Ux96jogn95eei1=8ZEx z^Uo5LhYySS4Z2NS>xVoL)7~945aup%2S7T0aDTWT;eqG^uK{ZICHAY){2Q{s@%8-> zX(X_0!g8X~8PL{V+qlL8SoXz6i(P&S%l_@>!IskKp zr_HSepqsj^&v&!YRGu=&^B>_lG(WrU>{dQqpT?YDeJ7j^&6X92hhFk-^Ouy=KM4E6 zu2&vumWJuab*Ic$%qo_jEYC;UgNpZS_YqmZG`bIT8k5%0j3doGt#u0ocbJB0hJ_rh zM%hsiRvSNfV21@a0iyGT^79TJk-D~=&U{OnpF^^h$3Wu3GQ)b#TIJyv@pWdU&DfBGEo%#z>J!HF2_l90%FN)ay|EZv@RcskfSx=MMNb&4h{|(m*-Ye+V_=EdN;AD%#XWL znl_%6_K)w`I9NKm68n%76crSa`K`gf9{t_rPfZQ~ZYnA!@pH?cp8U~LM&QQ?ej3s5 z>iX?2QD1VWWd#1xz1(SL#P=2w5(N^~dv|m_N!JiGz841@3EKcRN~+U499PKrw5vm| z7OLQTRb{G(l<_r`G&5Ieqb zLm^Wx@F11x_&Q{$3G!nFpuDCTpa3G{`&@<&=dpF(vhv=s=sH_!jumgLuq-}1pbDZ$%d9Y$Q#5B1el#jQwA9=6)$P!W z^O-|g#Hy%m>*_ov^G>^8Bx$c1wovv$BJ% z!n)S}yT($MPKidQNd1V8<$)mFxLNOOM!A7H1GB8pd>bF0i@q*3PdhoB)-`hoo<)Ht z!SevWC(w_b;`*RQ?=y0$`H@SDh%WA5OuYh-&Z(w;pkC}2pGVTF2jL<;BwoH^LKJ|x zhW41gHhirL&=<6$Z@e;gda#U!S0BQ|yk=-;${Qhzb1$=qu~T#(_tAm6)we#4DK6-l z6}0(KT(qv{K6<_;F2z*i)-4Zu?-t@4X!zi!hP6Geru`<=uOlW_`{V0*f^9e4_|g}k z3pTq9pYpuMj2o_e(jNxX52#Kmt?$#64bp!G?XKGoKPa`c8>K6o$+|l!+q1*=KtFo~ zGsqubK;iCR<%!%3d|xweATe2t+(dl2?GFw_jaRY}U{STHY4yJX+VqKwWj*Hl^G0$A z=EV2KFYY9Dg!}mL=mPdBVqY_G8D#pczBc5_G`e)|ZMg>@|IUeFy*VC$T_)5!SinjD zal@CIr*-l#%;O{9VM5o-LZGWCGw|iFJYFGq;bLUtXkRD#$uDekymS*Q{HtK@9IaSQpOf$Q`e{`WK`G+>{+ zg2;qHdu(1G@C{yGeK^iwT)BJ+-RlQxu+xLtVK5(AT(OX$(^&O@y}yo~tnx*_{VL2_ zV!zsIUyh-{a?bNkm3Ij9*w-C;hQ>E{KVF}yDKqxXnBX)i=%(FRA6Ol2H3hBn(JsX? zRYCpJ7P_}5C}Ne{hiu;(xRx%+?7VhWNC3}oSbg8bdC$G3d#(&yN;JEI9RrX0%w3BE zl!rEW? zh0RtQaNOQtn@~a+*8^5Am>c%SF&0=_x!wfM0rkWHMO-e{DYmA&Cv=qy&AlxUbI~Bz+|elbc~MD;2Yk3Sl^2Us7JV`CsQZw&+H#hGRj0?CGj#qCbB)e+!;K$t9MbN-VPCU zV>(>6U%vaIouhpA+NqhVy}%W1%jI8$xt88PO{esKWtee=GYWOK)DWBO!Tw%ObfF{p zcFW4}QmMOtzcf4BKrg3ypFvCXnOJ4yco&jM7=O{)qH~!`a}zW*gK&`Vx+IV^>vNRZ zeWn7em>vp34wyeB-{sv~g*o;MQY0L(XT!opanrw495p&o05v)y&mw{it3m0##oK@=6y}~don*X*37gl`7>{z z-!|mYb}_mTG}5w!xjwPCOY)^`7Pt$9>5?b#`zM+u`z~y~iqc4I)S>s82;8bqvt$yreGS{lSx&A6gtOJ0H?6t|=k0Hi zRv!`un&o9l@;+)4=}M{5F)(>b?%QAOy-2XF3|A!_V(8pL5bK6q^a6wa%i{GjW`HN7 zYd2DJ=c}+bpXpsw4X69#35w=MP9f-XyM`YM^P_|^sCDP-r81AS)UZk+JVV}6^J_PU zhC+Qru12bKt;!E?o2Si6`>pet>tz@}DrWXr7KX{)(ILys>rT$Qo{Q9U{Lo$`wlddl z?KWC)m2O|Gsv#mG*Jm?seZD%x(#RWeLUhCTbD|om24L{0U_!VbVJZXKcA+^$=pN3j z)Orrl74g+wd+-qnDtY56m+hBWxGPqWkWzZ(>ydT&1S*`VA$DhTB1=sGpPj55tu^YBkY`5p$jh@evpU5xHK5|$yLVpZ>Bg{XC~pS3>|skx9dW6ak$np(K{GYv8`1z9wbha;5ovalMwG{RwVrZzoy!~Qvj99 zc|6YK>V8=1LhnT@bY(il+O(`=)5}cb5gJ_cq%94zF%K;GcI{e%7sUbnC654JaS4g4*538eG!LpZ7Jy6_phA z4bHylzfNn=F$YESiK%Q#H&WFAd;pCCD&;mEs5x2m5;)!MPPCc4mbh%4S{)~}cx8t~ zxPNSJ-jc`X%L$ZhM@$lz3LzwS?BmnA$>vnM?C|roK${X@`K6}{IUdN#3kM2cjd>+V zQtH5~<2(D`ur{rQE?@6%<~@1?8mwp9qod0)=vpm(6TI2vQ9@kFZ{c<*1}z$#q#>9# z3U@7~bS1SjXZje6Jhx9flzMCDS6}d~wSJuo2>(=GUvFMeY4y1 zRx5)->>)>!7Z(l@uS28&kD+jg>xW&_ijNIO!Z3H8Iarh|ake$y`eFLIcy1cz(eFo8 z%$U&?6C#jDyBD}s%9k~kmc!VGn1l?A?NE7h%(pR+as!S*r_Pib(qU zO>lWi<7hjTiZt}7obaB>eArjm4iiq0L%8~;WA?U7ilQ<5a6J!?B@-LErt(|8bK8r{ z6vHFWxk~x!r2M{fnCHrYcH<_?GrWD0X;Ph_O`S+H9n&(e{(Kuu1Gnx0oO6RCL9%|S zQ&4>@abmVr;-;>BaIOwpU%XP)g>$>f&)KBj`vQZwO!hLM-aICm?J*sqen((8t)}3> zfUowhHn2I=PP9_SM0RId+h!uYaRu!wUzN=}2G!Djk3 z4OdsY5<+G@pm@M5(`UWJ>1h?}#a5>aR5n|DDbnD=tGm%*u)Z5K^FCWXiJ z#2*hIZPH1>XeZ^^F3bHpnh88heecWwdfDLIfM+)we#*GZIQj-BC+AwXWpo3*TPkMH zjV#v!>Jt_(i~GpGf(w+-h3Aypd6q%EpRAlqact%{Pxp@V$vW`SwN`huWaBf6;aLB z6rGQ1tw(mCY1zwW-qCdvIkAO(ub*v30*xJmJm}+$7?>Ig_gUs}x3}H8P1JNQB#w+5 zeNZoqHp;2p2FJ+Qxu37^duC=U5wF=w z=}?m^0r7_(ic|D5`iunze;GWz;qD461Mqrxb8bd?v0N4JeWpQ-fcwf5*>H1b2lbjs z3Gct2FX$0?$krFTT6;6bhPogi=rJb#6}G4tOCReWU|gP#Z@3GEbxsIkK9dp9+d-Rz zu-9y&H@`w{CVS62Q28}UI&9lIAQ}wm_w&Crv}Vsl*KduPzj*q+Cjp*X&~RC!)@~vj z6$<)yqM%TJ`UeWxT+K9*vwbxw&xNZ!6V}%Jk~Q7ZfjY@*HA*I0f++pt4nu(b2AoA!l8GXG)w$AI;zL8ouES>YzGooid z({ht(B$Ox#qB`i%r9VvBJcZ6{%a$U-Jk!XbAs8dbl$U4 zuVs&3`!qobiF2F9=RRII5TLYuvp4wa9j9muKJv1KpHhLxsvJFEsdjUFGahX*GMiA+ z1L13t&U~u>tL*$4!>daLV6SNFxUOAsU85ot7MJ3|2Wb_=lWDwWHa>STc~|XlPnT8Z z0rWO@47SRt(OIahu!U`?_zGG-oATUDW_6rLzc&%t&W?4Tq&B9GDDSzMz9$K_CFPZU z1Wk14mMMX)Q6}YWtUqt^BJanZ5ScFVE*_6sX;=IJ0gZ3mlSg*hN6DZ>Hbe3F7Ud1p zTENh0SjjY(=CI-&)@{~VV=8wy4+#oP(LJM4s`|+?ik-O*Ub_2DK*~P`fAC*=j;veG4B3|Mo7uT2fYch~nP&cqs?3H7w7O?Yq2-Y6EXK zH&gf;Y`xv7)0dD3}O6|)0c3l6mJS2!G5=~sm*CHq|?VjcJc8_(SG$T z?y;%K(ppOGr!P9X>qb&trvA$dMgY-n>o~g#Fkkizrh3XS)$1tHg6(4whkZT~>I zhpb=+qPDSRxuZjIYzJ`4ROe}v=%AwqJtJm34eU}(;IMYcw+jRka!&I545jfd9%3p! zeF4?bcaW#%^SK+wg{BpoT77}!JH9I}=^GJG+$SpoJWVRS>{VELi*_X=kI%ya9rZyL zJ_%cXC=M~HVK(6!T1<6C+KwBewd=;l7njSr@|fqT5oJOQcq7xvc(6aRdu1m?&Um+5 z#^nBx-xyt4XuzuOd*`j%{+X%|LwfjoO_wfbH(QRYLGag!bH8HXUI&<1pA7Q4Sy}8` zVI8@SyWK`Wufv`}^jF7BY9~Zxr_!r8nAaQ-h%T~?!Z(EV6UAetE3cbL(L1+>^lkj`@W{x2QMhWkD3>@Vw8`nD zzJSH2SAS{-x;p_z?*1bAd8MaNp<6Q6&?m}!=Lj}fB(9so=(qB+g)wMt(@ z$>d<(D8WIwUM61XS!ZYcWUjxzZmjEJT0k6KKl;6cxgg?wmn+%Whv9P<_rwD8y?Djy z85q5=Gq}_ZqlTv1X@rNrH~C_q!zqf+BUFMTa$ZRIv2nH5oKNOdW59Y@b3Zwot;C{8 zU^&eOhtH?|e7?tPLWKvxhb<~Z+7p*_Cb0) z#dWr5FWyHza?cArzc81e_ljQx+PN;((e>zSigz7apR6CHxQ`65bl7vIwB>%1UH=6{ z2yuO%SI5(^o?;O*Sb*|#K+9_i1@6Z!&^qUDPDgr8i2~ev6vIi_CRgCE2g|(RILWpe zZ;(`C(!=OQ+(xWh`6u$#kg|}D1d7T21%MkSC~i7flO8vgUN?FO4S3azumCLU+AO7Bb5ZC3d#+CBEmxkuwZR+DWM95#d@$Gvj^V*lF=xw5~A z|NfA6j6)$4O7mFv_{|LtB$0KW<$K_Bd`H!Hh7qY6UuOGj&v-4#=>&(yd zF7?9@$vs*AvY{M^f}&!ut*xzg&TzG!ucAKN8Su z`X^jDE}!H-(t+*|SY5XmPL(VD^dveI{a|cEl9gH0EGKnkIHooht8RE@J|n3bmu>MA zKyxZdBv*92_LiiNLz6-~_3doA`LMUtf1Brv@_>%{K6+tmp4+ato*)bNF50sGfWTlQ zhuUZTTv1Zn_fX&4Y-${VrBk8}D}7hfBoCRP9TSb<2hJ2kkQzm6&;hJ**|{ ztnJF4j>eE>g1@<;VJ`ul=duZl8|Tz%-CJjOlVScz*lR`smr>ztr10p!jPR{ypuMOa zd>y=!PtEWGe*_WT`zDBKa{w--sR63T${}pNniNGm#-+mu-Vs9K<9!Hyk*r$}urO-j zdR^G+*~8k|nw_>g;|q6iYj|u;Q{*V0JpYh1`;qamiLj}fT9lT??pnlZ&B|zN_R!Ox z_tV0OHkLu@4*$(R{AOow?~(DdiqGk+41>#0ot4oyc!Z?|%^yYV?Naz}>{YBZao2Ch zKkG^q{CZ@P3r6~?c`zJCu3C4%JD?75-%{gU>->^AMp~bht{wtzg;CWlDs3_@DCk4| zDm(?m-3~wPXZ`s#tRZt#I#hUXLKp^Ialj1w)NdlkeOo685!a1y3HiR`lQ4W(k(}oI zxJUW(0t3f*Z}f6D)T&cX_{b9>z3HJ>9M-NcJF9Dm-8p4CFKMvNSLHq;qwpBL!t9L- zv97T-4PoO++8m%3uibFnV*U$sB!Ol0#6_hBnM(85JtFKLP02bXxnVr3Ms>;-tZ+;5 zDegPg@|IRkghz|%1P9sbrKd>+4UXyVjc*c-7}NaITT)$;ANV(#7>nW6fbf*!6#pZ- z#-kM_&`~cou*+i{^+>ef(*f7IR8Nk$ndzcQewx;%sXpwe2!AxN>DCcdg$iD^T1{Hi zmqwl5i5{$7kApw*#BN#awz$Yb`dIDdH9?w5R!V-G78tLTaLi%XuE0>os(FlB-R`*M zLwDR@e-|v~lSbJ4{8s!XBM*yLP-rwuHeIy5I-|y+Kz^x{g|YCZV(f7%fLw=W2M z&sZS)Y_T1Z(2)Jcxv${hD;$4$ct0aw%**Nx=Txkr}u|Lj$@U3od!79N!rDjsDrtfgu`wXANn4zr27fDQ564m7Dr|uO0v@N~T z@x4I2X`OMgnNhJF%(W2gU7WGmfKG=W^x3Q=^(&Uc8r32gaDBkeo*+_qJ?mG@rPd+f zZQh^O1h+tzQ zPj{nNHf{FWHvE&EmU^DDmPk%LF>%^Atha-!tqh{g>v77%H;V}r7{qLcyC?c=+7s=; zZnw!t$;GuAbyoUcl2UBCi&UtfTNmF8#_v65!oiUGdL#DDvVrKuiQHf-{Ug0e7@Vqe98cTH zo?|6!;rlr_BCW&5-hRt;NSS@@cGXIXnv#!Ak8^Mu2X4{~Wa{M}rl*4oFE^_%8M(a9 zXzHDWud|HZd1T80Nfn;9m;JOvC@d=*a&B0LAA0X>6WsS{_%0O~WdjeI*ih0QZ(Gtt zv;huY246daV@gV#c3+!t$*RXzln&v^DRl8xA!QJ}RIEb2KDYn!BUZ`2Cv24$3-YPH zkLybK3)OA!x*)31>r`OJ@jMI$lh`t}%mMq!!j{Maoe1;eC-dijnpw(gVG7w)+ekU< zvT|X?({Bc8b{B5Io_vg*ZJ0WsbMNPChU0rVm6N(};VheHF$?cIP?oW_mfPii*@S|z zY?}m-2Fz^VZg*E&IJNBA*#3d`<(0X3Wu5Ag4Z%SL6VIPTDAc&$7( z^*GdnZ%<;zt|1P-R3%Hg=8aC4gy*M!FfcRSY#0GfBx-q2)#bZ&sP&_E`*L54)k0eg zf68JqsZR)*SS<(bI-UM|&K+-P8XFgrTj}qH__q(I8~HP!pF;-d8P|HZEPPfHE#BA| z3^x$k?9J_MhdCRk1~#hX#ZXbEYqxwiy>sZsM-kZl_5OgJtMj@rhC-t+9q6>myO$5G zi~I@r^^J!G8W85!(@hH4CRC52L&jR)*hnZ_tJqI4+$Nr9V%Ja``-@HJd(=b>P(nI3 z28#_K@#*>pD`uem*2Uv%e^V3TR_0K|ugc02&3rL6pzm8)<5jj=_ zT{|xF z62zA(EFZ=dTB$YeT~JFs5?xH(uU%y66!>eN|8_ioTwS=_aqx?3hj5_VJiS3tw;(PJB;J`;PK!JY+enu;H<#Hp zK@g3GX(hU#qEHo#*r!uFnt9Qc;Sa9eDC;e4Hjr*@*jX6Ilv4FgIw5M3L9@{{Ye4@2 z=JGN-pbtFo=&x!2m+m+M$ym=0l>2T2n0mmYo%Zqut@LO5WOo;ACIgj3MMZ79p*&UP zVRG`AYf<>4MfaUHi$P9q<*qJ%)(PA@zxpR1-mpq&>g1c`aMmfW&Wm<0mkX4NSIyHF zylB^@Veu^4fOXUkuT`VJ&qgoL>~{AR^oB4Uj-Hp=oOy^!nTOc|eW=|2+YvJfGFEla z?&PGLc^LqNXgypjV(h{^wY0QcT?f`Cb3jBaTFzJ#0-&<)Xbr|>61*Q>BtTQWTV~Sv zB-grHW0Dp@6?cb*@5WZ#;@)>LQDMCrV6^S3t?0%;l`j^430Rr#Z~Jb)wz%;D&0fyf zw&?etSMQ%;ObilDZ~d4}F~&xk_VIaicget{xu-f9@A;+**WHzZY8LQSk6_^IOWWP- z-5^)4J{l%uH>68i`O^y1LE8$g{XsTs5`*l8I-!R0?h`gp7f7EG_bkG!r)~5fK>n$i zNq168CL6iGt^x`!!%Wi-bTmx46C-Aut)8dq34oM!xE?_K6b(xzz}!2@?D6))G@oe^ zoo5Se)>e|JwelVDcK4yBD@1p!BT&lMKg@rmF$uNmPR7~Wm!RXuefK>IWuJA74VhUe zHp<}-EEW%5z*bgQQGE{umQ!8f;rdY^%7YU;yu6|>dN?M`x}!oYzI%RymYY~q52+*;1&GDyYfZ9r#HYl{0>4#$TY#PaH2WrE;Cg<; z*Ff(SfL|z8UxuX>+}yp31{zyu!rz5mZp8G~46iK7wH~yuw^xv33fnph%B6i(yp&nj z*T!pcrXY)>#ke%r_o@jx^TmMREvt=23~lGIR-G576~lwrKpa;NU>&6-jM{87=K#k|AAMki{EbxPnxny64oSv%Uc`KLCH&TKKHIuv-f^h40E5= zaEwcm+FS!4uD~{v+zG0vJ6+IaC1GP^qwi+rLs5KZ8@#1m)Y2OR?2z?g+H1mHhZ-Kb zZs3wUQby4plG_KqxPk+I>&C`)NebmdOY4DhqnZbdCQf(W8?D`K5_qD+bA47v(x2Aw zAs6XJ!gHpmfhB76Bil%w%Douubwj1A?wHTAu~HUsXJqI7R715?(&U_AIq=8VA8OQD z$5>v|&SswwC=^t0>+5*lXfDN45Pfn4d#edvNo$&%lF}7-lum`QB9w z)D`B|=*5%q4tqULSwIl9n64V>QJ!aM!|#0T>5yY*<*TQA9iKkY#y2%j1po3T6# z56ZaEju5jKeoBZnr25We4peoAH0$_nL9G*OkGz=^0Y!1is|a}yMEoe|=0~El4ZM>T z@w0aS!`jZDu&-y{e1vJ@sqIWT&HYh^YM5$(dpfh{`my5eohLdyIg75iXwGGa&TWcGBLn3eFF55r zhD+{MKKl*g+>L3f8CUOk`)Hk5;iTpB`IjUA)5B}uZ#uQ0b3=mt`-7Df1)8B_gQasz z&wg+fXW+}nzUv(24@Rco^RZFek8G2;!xZsZlJ%bp{@;`F;{z*l(Z|Pzj|!O)#25r9 zD3O2s?kUHQ56v=9t^WPie_pv&D0s-g!6+On4bnjc|OTd zik2~xZ@@EHx@r4tfASkUHo#TLY$Rh%*Mj)~;x-7&vKaN=VNoD5&B%OP0HN<&+Mi*7 z^fiVN&v-MJLG-HtM-}n7jcD)LL3cQmc>z95v3aBj?9M0`NcSpp%n&x9K`9T64CIVE zV#B%ooU0eQVaCS5;iaLOV(Hw*{VZpe}LZm#V6x7mO-o2S) zD@_=d$%jF!k)2Ta%&eO_qE1s4^#uNLGuQlTMuB@{KT(Q*0`Lzs{ZPo+0RkG_J#31; zwUb5|)e}fYeQj@V*LN^2ZAtTv2TWd`RUewJR~&-?U{o#QH}b910p@|KJ~{xa0e_dR z%ut4l2koxj&r_05{PTZdKEi(t9l4MNzT*Ws!Y9RHu+-hlL+st*-m+e@ zuAO)`D=ScJIWnQ;jSlXelx1R!PHWl%FPOK~T?n~;GA)(nxYdC4gp?Kszd)?4_GD(U z-vK#FNFXxJ73;tx3qE+(1uH?~!}9$k#HF3k4-}=5{%~PQU~0 zI&-NE!1z886}6pV-~rd-;s(W)voa5eyKWBpKY`ASn&GE34)NCmHlIJ$ zf5Re~g~wrwMZez;(|+GV7)!REnaVeGD@sI?cOf@p! z*6MKHbzY*dIKCb$l8q#>*jyATv8C*h1N7i|gSk-$Pyfn&Ioy#EO1Cr*v}rpyIJn&N zL2;pKNOB{n9HiI{{iq(MW>`9k{)1-t-kH;_spBYs^KQGFk8DxfEGRc*7Wd0)iDtDJ z!mO-|o4fAge0v4DtZV3WqltVY)j`N{Dd3M!I*D|a9|8kQ+E`r1tXd!PXB%vskGti2 zZ&5=|ryN>&rwTyiSmc)veAVPOjny0bARB#aDUJh?mxWW;H%&bX0Uo&f3F?Cc2~uz7 z96%2_TEKbb8$>o=%kTJeCT|r2&mEa^6THKAj6E7JpP;{y|;HWXm!1sswua*!%3)EG7=Y={wvt zDUS1K!~-qZ$+sTmF6^34Zw3JN%xBdzicBvQXt1l7{o>ft?@MRX`4Qg?T|omE(YiZp z-X9Jx6TMr?q+DQp-3wpH4x$6Q!(#terur|R z@VF@tvJKCnweO7g(wROHpMNMt%$Q-MpL~xq^}uhZiP1!fy!CPJsy-tCB0W+Einb>I4gFn3zfRn11P~ZR~UL}TfM=ymW?O0je&06AsfA8e7xKo=V$}9#39z* zKCXS^Nqekk`T%3RrPwA!9aToW5^bciGTr2<|4zBo=LgVq0&h!fh8UXg$JxJ4Hr==Y zk;97EEJy&N25{FmORZ?SYOq1zW0Cju7K1tLn8#zACIX=!#~>3a1L;U-1qFbN2H; ze+%Gu9~Jn9awKVw-ZeMRDAqg=`N#N9bSwoD1GI%?7C}kFzaliu-IbL8I_i5wh&d;T zSBLV~c5bYSi@9mst+jsR+MSMG$N>v4Lloa4pAn7XJ72TvzeM}fWsdPYA>Tz@mtgl? z&w)}6JUNcfQ4tR$hSz6eHMra=et<8ZNHcA^JyZYBiTK+bu2lr6Ip|0jw6_Zb?7N%^ zBksoW*K7bWj|KQmIZYhi1@UqS=6_`!=`=Y~DssRW<+V42h zYMGBXkhXKFlY~(0^;!>+XTDE9elp=1Ao`-KNDZxfcOD1!dfK4C6<-iM+FFiLM`&eAaJP*nA5}+*?46!j=ILTET7uKs~%IPV;ITnOzL=Y~Bp(1I9eEJ7G`+G-R$9M9K zAPeU9NmN?`et?n(Vk%wyXnu&}ZcF#tbv`M#><6@nGOh$w2aEW=udbr21rWCyi0v4T zOEbem5q|PGv^$*pC_J&=iRp0@@epei_hcVQy*a+;81lf3xwyWiiPeP+-I|7HjbmfU zk(xjB5KDaGxBPir^on(u`c7P4_vt{)-etREedUXcfHcF&P&W}v0^350D!b=hX$U@= zovl2tlS_C|&M7)6F(WBEfj06{hXTmz_DSRan5F-SZN70lu^t^4k@yh7w+edp!luVV zDRK5o+)37fC~;!uHT!wK?;l|KvlysOx3y5-Ep*eq)82EjwJardpHBI#77@k5bM3}7CCpGgkivS#KtONY}&1?`98!hW4 z=*$4`mq#e!R@GX^PqSI;cIy}FXZ^@f2xr|ou4AN2Cll*&B->4S6RB(1*mfQeA1+xe zGIna!0eSMn%9Cvi^GS`LyLx*&u#(dnYxRx7;|shDj9q(ZLeE7D8ij@3 zmxHfWwbr;>`OaTit^j9s*V3+WuD&BC`^vRXX^%-^-|CWGZVXjPQnO0-Q2`58&8-(o~XG0rZSdKfj?N$+xmg^Wi z7g#m9zUE=1a3MLYH=0rkDn3uVb~$`qQ`_0fd{8wwsB96QC&R+H?I*$#(miR@)*EO!^H(K z7m==5Kqq?@(PUan2?W+)8%fcR&G5GD=U(PjhVS=qRF{F}eM5h|9~q+kYa3B$$#`7Laz*F}OpmtI<;Elf5f?_Dno&FFr!)IFZZM^(!H{dAq;IKHtq)7!ZiHNOIR~2@`Is=D zemNsIbYTjyf4|DZygDRlyVp(1pFI!*7hgE@vn~7`h@Dd=#cKCkp|P65Mm3fm8EMmL zA`f%+#PWh8&LWoPqKUuzC5hmZl`*J#Q~%Jw0JeN$+t?&H%@ja>be;^=840)&FLd(6 zijGym(v4qh&#hkJ)9B{9tj+s9u@ohoRxU-icG`|_skDHf> zwQLhn%Y{ULrYSx*|FO!-$W2?sw1%$Bmi|e2Z3bu$k!-U&46b}D45iP!HbL~#R1_in z$IQt8G4|b2O=aENQWX_JP#HkVSU{8_T{6|*GwN@x?>{xmbI(0z?`OAX?`sp>a!N>p2cz-SC&f8WMGtJj zGlr{{yldAiBLs#9wv3a9|rq-{r^)tP>k)#r$Gq)BBUUnuk=}2S= zk9F1BFSt_f#o$~GTK{2v{pU^;>rSuadHdj&*$4{*`BOqMks@R{V{>mG${hgkj|cEM ze>7dFwtztXSPK413%hR{>T^qnxpCGO~1x6HK+3 z6;59~20ht71|Yr7qYVWyN2eR+NB!EHPSwtm*r1DnjZt-?#AT*FEqwFQ@~Y|O`|kL$ zP=*v@vX~@K5CDUUh?4jHy8!1O(kwjl{HOK*PjE25N15K@gP*-Esy3li?h-xGV;(j0 zvFwY7bF{*{B}jgQOLL*brm{}0YYPS{HSNrsv6I(YF*{S92dz@SIzith z4EXU`K7{4k?m8~lTByTBi+g2y1Ar7dkfnL4KZ@prc}tHVL)rse_c1Wl9FG#Xzr*`4 z=c{s-tqu8NLjl@aDQtKZ08n{*Aq zOB?~)58N?1*IgUsb)0<90LUu;pK)-e$+2tKafEKW)&?0Si%R*MRa(7+UFJNI>W^D| z23eY0U)kCt?$yc8ko45(=fb`d$Qp*3F^^ZI=z`{L35;Qj73Ot1H0>?eZbZo3qU2>r-FE+Y9A|pb$Q?`xjQ5OFElitBP@}sv zWRK+|tykWNETnv2HAqY%`0@fApu7!?1sDA}0}$ME>e-42Qdw%Ivvx^WCsqZ?St%wi z4l*OKh>aqq#XVLLn?nh8U$TPgV9Jh8JpR7Lswbj^g(3){I_&D@@DJ2jUNJivN9U#E zTYabGYUR#Q-#@v6F{&8MJMqU0K5~uH%HG_X*}R3e`+QS`_H07;M#vRkg+z4O{)vKR7%IPjlpI zut~-Nxt1f|G{$H%wA}v@h$tEcD~p!Fg^pZ&#`Vt5qGz-~&8R=vjI zq$e(KOPO=PjxgLsfTps0VsiUW4#VgLMweMaY)Wn$`e=syMJtL?uW2VRvoe2tcNc`0 zpaE!Q>RJ|AoiSi`p~%B-%cev|hEoBDg+Y`mH>e2fbWYo}tG|dij%3L#9iX$;qP|<}6 z`i8)<)e+mZzB_6<)*;JX5e&N4a_Io3Ockp9F)#uUg%;$}5ZCvyr->77uuTrl^4l3J znW-hABHkMx2O6`X3Ch8qW0pBko_So;H6)9NWYvMxoSF)$tugP9;x>Ax` zXl3WGEAQo{2x#)*m1}=WeRA(oJC{rJcY)YH1nw*+@JKvU*mPLPV|kZvwh&i+tpqrE z@l6iCNlur9fNE&MMX`Cb5d-r%*;7g7l5025$k2NI{TJSA5`qG9lXzor&(r@zci(;6 zKKcWhdU5JQU7=o+&{g^iN7Tca4b%Gw$`lZ=F)VL%5~tS{?+fin3zZ+2_cMKCw8{ZZ zVjK^jEa?lSv;$X%@_TU|qYOJRL6>}b!vFAy=zhu=JM%k7zm8Q)nl*TbEN1c2`v-&G z7_EP{tLH-VS-jY4@iGH^r_OWuDvB+);O!QP1_!zRO^?qDQuLHofa4!(o5lD$(mA9k zCL*}2UCgq*D5>AktY!n(kY^SKGH|h!9X)1xzB{=ttvs02_c39piQRbgzTbCujdjBg zmQhGjMbyEhdcW3BDHpm^Dk153IdhMWxKP%zrP7JoyWql8zDViw=dHT zPrBt)U-Poa=Rf(dMn=fLX2I!QZlTl{a!h0YT-CjqZ~@Yo(e`_xfv+UZyPw{g3{8uS z+3_7XZczvmQ5QutzW|p*Jr_@t*vJ#BWb=E_-_-(<{wPE(Z3GAgFV%qT zZ@}jPreOExAL)A{bYvNwIrgAxOA@ zq$o*}u&ot;)>SvHlk1_g8?2duxj3UQsl=0q5VdQvI=fJZCBA*)QKfofr=6OlVOtf4 zv~wVSQSbJs-F%|xdt`Ipsej71UiEh;pSzS2E5CA>lZsulgXJ-;S2W=<-393AY4&GP z2_kK@d&|dt*q7?U%_MCl7%{~OUv8Tar|p2S&RD+B*Am_swwK+^xQWmBDu1jBB_dmc-00$n6eCT`;7mv#8= z7cK{J@lb`J!)9O1E-fPfm2SijKeYXihj(zpeKeG2dyo1A-|%S0JUU1=2)~zG)Eidx zuQpmITAH-&J?4)=e_~t)TX|b7;JKcPec+)4NW(`4$(R0AcNi6nj%ImW3r{)wISt4= zv!sfm5f_lOUzWpdy8G8?N;NC|0+UWjq{FQgjQx0T<|NLHa_>!n>zqY8V^{ME`MfRi zRARwVR@b@B4mv42mEF^R-?AemozHcLd^39b{J5ZR`Av?AZbXDEQJ0QHxGh!Vh-!rfl)8nW8Qc>RLunu^z=Qqxq4h8BZt4|oDBt*wyfcLkJ=eH|NF zC;lB|wj_Psw~nTH0GLDz-Hs49_+KCCzvAgWJ<2bS7CEFKKy;HXvD|6ax!C)l_FEj4 zs&Sc2x;m0r`Bbo?sh~#AXWm*xkD2coSD|b*-uZl=*+Jd^|4R8YooD1LzrY-+$s%Tk))SF&5t5!0RK$M!-8(kJe=xx#5Oa&%9krogc za+x7{d-E}E*iaPaRfIYzo9`bDHSlb^zlz^|XFHmx^m1w?&#S6WY_L>xC7C?#=yeYh#P89SeAMtS7xd zC~yYUfVEdZ0eu2kD%&{H%nY-uN9c z4h6?CKZ|?)k<>qU$>5ZD3kG>g;_jnG%@#S;%z)1s7Pm@r6IV)O0U*%V?ZW+)Q3Y9{iu!iPS;hOmWkcn5(kN8_6pCcUGN^M zDpRG}CiczU$(ZiS>}_{bcn6XQD?fqTQ)Un_El972i+Oh3GA694`TBIbOQ*(y?K-)% zKgShnT9Yv1TBzL>w)I1q|K>f+FUkC9?C57fc-u9Oc8W02{Bcg)6c3xOOT6J~ zsFq+>sFoiC+KU<$L(dOMY|5{9TuBq%TbOC4N!tQ?L!2-aj;#@_np;15Lx4_}U7o)% znW^b}Lg|#T#5}~_Gx>i@SlM6rXeI^p%j zdztdaLHk_@6OVfzO$!SphTkXLQnRuqjYwyO(^bo~jjUa*+Hm>KmAaV{ms=V2P!CD& zy*%M!KjydA$CV7S8*6?Qc0RPA`rOJ9lCPz<+~^X?Z9lmMnE_3fF~mbzOI&&rZdE#u zP^mI1W(pi|Kn|yOrQJeXto`ghG3ZI1p&kg=Pz5?`_PC(#9VGQ!PA69h3xRZ_WeYYL zO@jDX{AV3$&(y6V2E!X;^usg7vxF|;j8%|OHMI6mo@7IY;^3iXy3~y6qupFq$DLss zU}nB2kpe=g*b_*2!hg1O)=Qb&mRz+24CgL|32)qxs) z>9EZ`bOnH;E~lS?GUYd>>$(w012KomLr`*m=f=C|7K=;A@?j4}wd4nOsr&RV@9!^7 zF!-OH@tG&vUsS8SFeWUq7h*>F^e<=q2d|T<9r#DG#8iT#87cj*Nr}N{W?P@ea<6Z<33l5s^L6%V7cRM3=Rd#Tc3NSM|!{5%5ZRgelu1`}9bD^`QGYO+ko{GfryBR_D`|AyfrSve{C2fwuCYBzQ#VP zALXN4@r5y2=;69Rd6&U{XqIm5MR3FGi5Qgn5PG{wFcqa{?yT3yT$cD6PVlktE-ix% zX?WUseRwkKjfUx1zlRn?-g0H+EvDmC*q%Nfts{l3b zQTiA^ixKo}9=J^4&8Q)A8kL*ho~u@#h%u{l+fTe8fjd#3GTgiXlH13tm-@d`defvq ze(H2a?VYL%Fo}!^#alLyBNiiy5e=H@*Z~{;m@5e{+Apr(>Gt$%d#FH0>3FWK;GR5` z_`J6AnAuD@XJYn%nk;;nt_Tb1z=iDN9`Mkr85gUqe0sQ7*?RpfXsEM{GX_-lM%`{mGUcHZ??4KO5k1|} z`RG=7u8&uCQ#qM6Hm3QVF=lti+))G?zV;V*wQ_x6WM?6ShJQY=9pi56oFlwE|5wVopHNwFD)puU4{zyfOcF|MsG0g9 zZTpOP_G($<;SklD4>r4t?#tGP<5KE-lv+7=VJiC`l}bAHMxeze)2dm@Fu0|JviHro ziew`Z{L2&@wAAP8k|)i;9g}ayvf8>tF>lqix;D(}CkymCTGQ2$nyy3K@PxWBff4Qs z)CAQ?r}0Z)bd%5QT%G&}Q_!r0mE68}SJQRIauLU#*}lnosmRk;yQ(2GYrZgI>{QT2 zUhU^)iOzbqYqtmYFPSg<=}2>py7D~IX#b?s9E11A3fKEi(8j88#Xg295wTJJAK3x} z@oFL%{u1~rvr-3Wol&yTVT+x@8r&BS3sH=g$#nu&!J}lSH{aK0rHfUkEWj{*2R*eG zqp)d+o-#T-dF(fz8kmVQa?GJH0gpcSuvd?GGqI-EDQ~>%Eq;PeCg5R*?|fxK<^!jS zUWwIBUuJexs31sym=JC-GUMdbeKuU2N5_n-VJWVh@6m7`NU|MLy8mRnYK<2OtfR#X z8Dd-A%Y!z&003e}$Z`+MXS&|ZwK=r!-#osaPwGg6B=7I2H+Bpb?YDOa+6X{gFoGuX zfm*(=MidacNDr^wHrL&po!rxzDDK??*^SBbNO_bQTr)k;HOjf3?27g2d=fsh$Pg%t zUoGa?`ojcSZtatl!LfPC>f33JT55AG3>RanMTZ)DoMQzV@rjXYB$#DD(di|mFJV+{ zB`y7`Cqdtj(y&COOu&f=7^OI07MtXtkKryyUvP_@Zp!MbZ=0UV@1GP`R*3&(Mv(TD z4LrYzXZa#UIdGm)^rF)v`I&ot*)pMh{C+|5;31aofo1!`}2+y|FSMX{6OI{I~>R;>h7X9VU^ zr3{6+s4b+^ZsV~Jyz5fn2nPTvVH1@>Ojj>@Jw=)ZKiM8@AZ<0rN8#&lJ&omIM-SPx zJ)Lee2r&7IC&v{**v{<6ev)SHUQD4hGRCKz3kF}Z84+@>2^2Bn-OSj#aAWwzMP%>3 z@I|kisyiO41j4<(i0yJe##5P)TKc24_9ltF^3ryL0X@Q7f9M3#Ee=vp_RoATI3p6q z{h&VCquKMibSxT5pKMl!{fg^ZFigJzl)rgt^W1vaqETJjH)!|s-K3YEE9xCnSIb1a zep2uKyStQmidrnzoN7JnZ~TY@Mpv!D`woAJy}QBF46VV26?h(EHdX&5G*0n~$4WD` zV3>|#CO_aGC(gJ`<@|2*g3r=a_xOs$)W;GR8kp$L+NWpM@mB7rDH>%E^*VDw`$-Yo zg7Dhf+a4ST!!$0@092`5HBZe)!e=dEQmEjD(>$zER(=YulGsRKqXg)r;U-^2M!Mic_zY+KhI4PMb9PaTIC zBb?4(D0mU)O{(?x);RM<@Wjshex|!f`>9cVop3nMn=^jOK^B+axHcO^+aKZ9J_x!Uph)x(oK81&zguX+}@J@vhXI2 z5znee_BCIOJu{a)4l=WaQi3WBKobFVCp&>>FdaPOtArcV@6TuvJK~V=h89u71FzL( z91mdH6~6?MzuXC5P7}Fn%;PX${!oZQs;gLsH^Uj$#NOiv`|B2lev;ZLgS|(EmRQ6!o{$j6*|>IJ!?Jn9xbPi zY3Kw;Yx*QEke*gK*{F{Snq6LdwB-@hd^)o@Do{E7fRyl&v4F2NGvc4|F#pt_v{@-} z#al6tpUGEiHX+0D?Cn!*6Ek+Lchqw*vP?I+3>7%mwU_K^F?Q*m4p_lM%EX8ZYONTuwRbxRBlON45Ua`{l0f@8 zu81$cODF|(hZ^^534eaO`(J0jfJgIl!IUPt^{~D3l~Y}E{hoFy7hZZDf`iI$N=Ske zHS#UuA~h7EYmKy&NzdfAT>N$g!%(DT$nn`Q@hwoPE%do=ox)1P!a+s-91v39nJoW< z=qYlWTB=mFCtO)x^3A7yLAy{RRK29J>DF)JSK~oHe)0YN$}c)DgX(9-#LG2CL5Rx_ zwt_#{FIRE)_@0ctj<1&O*q%N;33<^50rVtO5s;B%)Ss^YE+UE-k2=^jCDgA<@`B8% z)*2%1(4bD~Fz44N;P4u35ufCMK%L4BHB`=Qj3?5`0zl9WcP z1)NxL;SufZfXlv1f5^7!z6qlJDte#gQ5HL3B7J%6AmC0S8)$1!vzC~O3^2cL+sc_)9< z%-oujEh5T^V#dzHzk4vy8*=aE{oZ>ich}`Dn+x8TpEy9F!vG4+xFue@^E(PzvQhhL z+$QIMy0KdhJaF1s=9}oM0eRjk`8H?2ZnVY3M(tTPSrnTnsM`-8<8zSfh|2}Ymz7N} zsbartnYLkYn%{Dz=#+||X_}&b)tI;&=V-M@WULAvtxWbvlNWQqJ7;&sw%0b>>=hJS zEOSQN9$a}P0J#Rl-I>MTYhVCOCaaVMZ+#KQ=Zz*pZj<|jW6nn@<45%Ryoi*e<(#h=V8d|{=ST!Z`v>XSi_r%=-zpnI7r|^71`?y=)v-RrFE>Cx72`bZk&U-Dk`C=AjQu{gMyoDZp3JW}pCqzD$)l_A^LLuJDq-tbBMDwpd*p1?#gxb$x)-r(EnQV|t zadzRi+jhDj56a-k(K_zK@cQkxuC}>Yl{r`G8IZByJ!_tL0?l-+F!Kx5WXK_Z0T7G> zLzF!jI(S(Hc*?~IjnaQjS^Dw3%c_dJK7b=P`aI1AQL#W_B)R`!L5fU4_NLcTQyYjp z2c327ryk$cAd7{gSu!CKRaF}x+d-CsD466SG4+gc41=4*+`%X_?I8djinfXFtH0rc z_G?NR(&&t3Uha!VWQHW`nt=Gt{{H#b!S0sL?TzwjEO({VFvsUiLlXM8B=KjqTAP(` zA5t*0<1NdsU_My-U_4?cdG7)7_oagmq)>b+w5^FHAA0LkF{*2`yx1p}LP+|0akFDa z0wT&mBRymx+stt?819& z0-)I3YlA<4wI`pz+f)Mo84+D6iE~FzHYyzAI@1Edw}~8VP~+g;7hK&-epv?it73GJ zT`P9Fd~epK8>DDn_qof@rRPE=v8o9{OS7`h_ACw1t>B};Y%>cA$r!cY(!#-Or;j9G zMW#O!Ur!$Q91kI?;j_f&-05C}xaCcdO|GJ0$G116zKJXMRYw3(V)O3b{2fp-%PH?N zw>otbdnTq{D)W?tAd`((O-hR^I@*<%c|$o@5(+=7`_R8DLpwz>vrVE1G(E|6C)!yK zRsvL=da;VB;t$Q}+TOv=%&o4@zKY21KvUnIfEHWYTs0Lr*KdTkTdAruEqwz5dNq=` zonvoV<&idGC$if8xGc|;-m86fcDX-bI>=+MTJLFFf1}|swqn#hnLRoSxXJ3b>SSgT z@V4QFox{J~rM56-%#7VpX#DOSrI%q{cWZi!)p!zo|X)prjQ}U9ty~OUpG9sU^~T3JK7hY{{G!f2(DyuODtp+u6PJ_ zuxqf(#y0pT+f^KhPabr6Ztoo?EdVV~qABFyQc-}MsTR_g6iQRUZ(t$ar3%T03%L8N z2a28f7;p&^`?@D}e?LGmnpYiz^9{wzDDsEoX+2)wA=`oK!3bn%hRY(yV9K;NbiR`K z(V+BXn2+deNt(Jv(}L%StbJqG3wo8b2tx)lB;uoZoBD==rNRK@^H-lNFfgi#R_vRc zz?d^Py1Pc)ZGM%%*Q%M(go)0hnj!1bup*s~+li>8w#5?Ug;KT)kVm`BHD67ZUB=0d zljbB*7oBwp$1*Yk@@{zBd_j(MZ$Y}@`t7!o?tTj=jm$mfqFV`KV;Pigs*?^x1fey^ zXCUanz;FYeB=w?wPx|>^398!Slmo^Xxm@FRNm{X>(gRPNY9eN2K3T5pE%8G%#9-NE zn|yAr+89O%X0A_GMAT?t1pP3BME%={5d{Em3Cav-LDeFwbxGccbddH{^C;$>Rz=@a zXTF`T9Z>4rJ)Y^V{M$>bOj>9S83kLHEZ|(()YIF!A!V@bhgq1v+&Tt5aGa6^^fIdv z$XYly(%hP6^k%PN$dV=x-0%GIfG3YO*N6u^kR4hIBd{$&TD>ZlyBi`w*&(aG0>R+p zO6f}dTHG8h**M)UMTTZLpnf{z%YYswg<6w=aa(Maw!VhLK@PCfI#{D3_D}v0Q z$|S*-2}ykQd1ml&#a&yc@tYOjKwKLRY`2JncAxomS@rN1ARDG3Kw6>GJO*XbY?)9f zMF^KWzi6M!V4^$PN}^X+Z&^eesBHl8ZSaSQG~7&<^|?EobQxDA)L?8RZT@d^rJE0I zd$9>``rAkT1};atJR0!V;wg9>nNUmTXFX}Cbaii@PgJrfUL4%f|0a1z5|XRjT!$G| zQX8J1uDm-!)C^8tf3mm||PoZ9Z>xEM9J*K?o`JRH=T#5aYcpw0tKT)^|7rQgH)T1CUjo$Ss$ zo>QlGPzX)Ye2_LBy8v{mi7yi~A@G{Nr+a-rksr4H5`a&hu$(kG3wE_{;3*vDJO+}^$R{Njm3;5FjKjZ0Z7EsT$RET*1@2N98 zsL$12P0fxLy&$hlb3iL&o16}`FmFR$*C^F{fG$i@;li>fCJ}eC3hsDdGt4odgj$nc z&*NAtg_QY$E?<&OrDm<%jO+Nl?>F-pnB&V3ob|5(nm>FT9-+*)tK}_Q?odKy0AafA zVQs|GJq+@z^XawSJ}PueJ?&@lB-hHX?>oM>mua}6omnz!dVO>5ynx-i#x@`2WHmy( zOaA7u1Ew$z_=u$W(O=#UsA%vrM#peASv~O0ezaeaq#Wt9nL;c{2{fF3av}!6m>OEF z8H})3c}+iWM^|Jjq;eT<-y-@QF%G_%c(}6f*SJ+N{+N03i>yG?9C>Mih(aaE2FdI(R9V`5G;Hbox9j%kxM3;r>35T%5VtN2zRo<1;@ z&w(k>h~ak;zxG)vo~Cm+B$rKWG!IlhuMz=*u`w$_#Fw!?CCKDW@v9)fKMFJ~ z*?Nmw_ho+P>BRq?N2u)v90(1st>UkE-C?T8Yf9g#jPjJKZ3qq_dSB1=I1`|4vm+w< zN>W=0Xn!~>cG2a;F4PU#lpX?vPV!v&C!mHUKG65yEl`kR7~Npp@RpnOuV>ADb%4@1 z+f1|{#D2?ZaT!Q2WR!MR3}yIBh!vnEwhIPZMR)^-5MEoeNdHk7^h9jRkr1$r z!ZA4m`eE#QDKIqqy4oZlRWqwRj|2bumhk{S_!)JGm9SM%@f&|UUeNN<*kLTVJ++{w z1;qjOH#*2Gl!}gBh^eNUKX7EdzkcjH)coQ87R`8?+u69shUCOEiJw%y98L*9z)X#-50y3Lak zI<2#wVJX6232-7>^J!zktF0{y`xo@N1HR8Ni>;$rrxA*(Q zF1-OT>`|-;_pcB(Bha^=%y&4WtBH0QE5GyfLzL%1w2MCOO^=ijM~6_(-8EXei`}3< z#356xPESGVV!!q6S`0NOSCqpaY=hOkA_c9cpkz8&z znEoKjeBG129Fz&&TSk`Z)A|{n@iT0ZyZj6s)nV{mbUO}aB8^~f2m*TYpOXrfr8yzT zeV8OKC}*!=N#BQb%dakme~zmgaf(N*Mj2brg3Zv^xHBY~n@{kv4;05>ISx2|Nc z8#b#m7uhAXJPtK>mEOAP|wA1|6!xr-V zazX?n>==+36ksWPi9UZg$9)nV(dE4il38;Z*+l4rz8aPolyxU7dBwE%z&md_G37mj zPvHF{hX$2JGE3oA>G&UN%Ls6#1{8z|optgOXLzl`p_k|Es5^4P8wa^OgGpLxKXgbHnRY(cndl|*b)62vRm96{cr z@Iv_6qWBmZtSEWmN7f>^`cN*o{}lg!Z6|=?hk_Ai%&~!#sGgLIbrcMm9JuBdkwV9~d~qFpo@{Rz_`}`xBK0ulP8!SG$-d;QPCJp2&r$+e zQx!k?wMy*;b9(Z>H%d>IgGkF)8um$&t&*eA=Bk?;YK1jOnUAqY0Uc5(hZv-*QVYM(u|}1B=Q%@rh!`+Y^fHROWCG zbST>b>@y|KRBi9fxHj1XAbC05y5zGYLuFGiqZlXj`^D*20h;WDAe;U&X+21Qk?~q@ z%I%QByzy{*5hMD30F95q9BS>|iY~N@!zY}vPNOL38?CQx(&w;fP$nkhODS`klg9R4 zly`$6Xl-d(#g?EElpL|^pR)dw;rRT3chuf;{1-!|{gv|XV0R;zjyKa|9u^1Z5~QLb zHs` z(KbPNF;$sNS9#o;t-puH9o@sh>!oi`jEpy#jn2tkPOCUB;7^O`n=0Sz!&T7<2b(J(+6)J}} zLxaKTjK>XQfhXCl>ws!ka^eWz9X>!(7XY76D9!IJ>=%tWrN&*{q*3vLMWmE=C{5j$ z#50Q0frL6IuQ&Falb~Ru)Ti&yT?ydtf5TsngF3s_`&~--5sU-Q3-B6WG^XNyiOwG~ zKD!KdpUKwO_ic5M-YQB!@VSMH!!ms%3&j<1>~C7n;!`najL=p?MNufyDEk}Utf70- z6rT98t_ziEe*ROid~xBlOA=KXoIkGUk{oblxe%>u=YP4g8%LGm>sbBGY&7mz=56bC zqBoKcH6)~e&ZBS_xSoxXAq{pE2x(h@C<*%7(7Wvys)<*5lE9A$+iv0?s)!;Hlt0A=WJzLWa*f9;y0Fpa)F-HSVC$(F4bN{Wh0AUFbTkNA`s)f_uY z^IQQZV?@+78c_U;qTqmicB&DgwcO7YpB}9Eh9Q;amlY|fDXHd+1!ooS%+3P|S0Cy& zi0o>F2S@!4riU@&UZ|6ztJn_voLxA3@jbEk*65o~<>ny^ACJBU5oK97%-z$!H_2!V z0!~2ZjOK&%9}@l(r(!6rg4Z=ru9v)h*r7KSLpI*`C&}mEt;&J&+QIpzK6NFF8Yckq zmKG#^ogl_>><1daf$hEyq&xI;neYD`*Q}^J+0;!vWRj_o_h`)P3vBZ#d1& zr|jlk5!J?{UmPUEzZuyUz#T=Gygf+z{c9aXqoYbRJ)UNrAB%Dz#d^N9%VCCN>PE?% z7fQv7k^Y0FSCTb5(sjI~&XT;O-xi5m6*tEIvm_wHbGH9l?VH!WN@+y_DPiG40!316 z$Kj#mz{%Iga*=~MsE3j`eE@?LD(qhHi`UG1S_nY0H9|I|Vf-_$&J2hj%`!m-nVG@c z`-5AUY0U1JiOt(rxeM8{yV-JUk!^d8gY9qp*N~k#&3->;0ca_chqx+{7h_cxMpvJm zMeq0ai#6&aR-X9TuJ+F$8<@ce0frq^sLkZy7?Xu(mOl}*e>iMt&=7l6&U{|FX6>gk4{`2g~d^*d|C3qeO#1$%C@8kE62HX>+MVDaeF6!=xk(sEhA9FEgkNeL zBGM1_Tf6owcD`n)l4l;&;}PVUIq2>~Jd1=8`IK+dMp)&qm%>RI%E{=nwtJ3TH^N{h z0W}`I9Wq^ItGsCQ;lRgn)RyC)#8LOJ*L$bs5M@yNH*iK<%z#6L{7_T)7H|x^hf#Ni zQz*91CPIIL<{EWg>fJKfs@C30Xr&ukMjaPax7#h*{I{feowQF^q>rSwwP=7iM_-jP9V;2A?zKB_wDp;xnKy(Gu0h=8+nVprs3!WjkrQXM$A-GoYPrGmtrkyYKM-zC@Aqye01ZP=%qo1o}a!=ZSqxRKSu{V%C?xjmQYX0)kYw z>*BMv%CS~d7wGb6HTxc>FUh=aFb>Wt%t~lxWsSxdOW&2wN4O@8RNmG^Y+a#a$9Ffi z%KROEFW0M|_bufw`ej8!*)ga-d+4wzC64E>(izv6d#8j&lL36wq2#^fCJzhp>yvUk z(}axANBT#f_~8I>Ybyuy9bTN^6&;b5j-)5p)k(8*X+4V_+Cw92MEdt%e_&HW*CBU! zrkzGw1vb1(Z&p1!P`-bzJ-RFi$csBec;A$Eg1W2;$o7*5SXL+*_+)F4cnj%e>=&@! zVQ({V)UOU*p})W>T(h77D#Kh{-8T2T)s8Bp9h~*s;C&(6Imfx-+IsuW z^ycamvE`)2o!hskr$5EUj!NABOJ6VM8(D4MseZ8VC_q+wZAn<}1?6qywscFAP@TFP zuiY)oMTdMa>+nVAvP2-X{mv+pUy@Sl-+;>%=>bHuXRd(rZ3NnFe?-v7bhZUp(JX}8 zeq|ocwmU{YUWb^{7=g^X_j}HUzf>L#)bje4NGDI*afp5eH$@4G;u%cMczX$sUz6Go zl6Nn+vS-0^SjXu^8oLr4xJFnsX6XV^#ihG0PO%nsO#8?tjd%CvEpN_?E!c~yp`HQ3 zFkg5o1nsk@vnng(l!^Gk9NTK|_8PrOTKCKSv~fT@`xH?S`{k`@|FCSEbXKB;+&Pr_ z16bEVh{ErL-l3M6O?*<^Pz`L{^mkbk1C{^No#D+&bY-_6oOpi-FwL{etrhc z$mb{~v4``*RXr+=$$v@MZTE19*34=x$A+T+g87~?rq)tw;$d$m`OnT!#%^+_lvS9u4 zYHWMJZcLfs6dn&%nN7*9F{ti5U4oZTTc4Q>SExbCHBEtL$&ObF%;#5&saAd|19CS8 zB~*MzHKV8}e&DNby$9y7b+w-n1ri?WUO0IH$+Vp;S+PDVIS(W9{p|dkBw6VURnxWD=~KiUV14$$TFT{#I#xe;Yg-|?*g^-p*k>_E|- zgxX#U%i8b~HXGfyC$6tnEd+qB*TL8B#u(b!H4zCX_!E1A1MNko%w}BF?fmCj;A@lM z-H=adT1m~+a1F9PfASTDt(v+FfL!xk)fF!u`S3FDH2Fqr+cIN-hK3zwbLp`~l>1Q= zgZb50r50+KrO_I-(&oMGf^Nf5MPtP|`AZ+8dULd*pS)z6B;31Km(8#F6s2x7p7&Bp z#a!s3`<0GaCGYOI?vms^=Aq+0-8o#StyWWk)6ei6X0cNBSif2mcHho1S(o^_kp~;l zwZ0gP_*?Hr^Cr>zX%X#mR|4Wn>f^xG=m0CI#bKXQa2HBB?Bu|CahP4>~MQljyCx5!_^--X)H|AbWS zMaluD0wGW8p8tN1t>AKS<|m8nLtWGr#tPfbZeK+FI;$i`H$w=Vqflzt$-4pX0qgz-&z*z=dzHMVs_xVVR5cMkrn ze;r-B)()MNlgQ{k{)>zThi_F%S*FvgJaYtj`^iEvgw&Eu7wFt#^VZ@UMJ&H+8Dz~f zhThQNnJ*nvx04|~F#3W06x6ClmS5|N@5!t6{LhkpcbvE-gENb_f>f+Zu8SLjD`#g? z^%tO`q9*V;aUG}IBK!VlwKQ!y8?^+_h=mpVQB^tHx1yq1@$O&vetJduinCzjp@kN` z|0bD4c^OaXW_%bq+f^`?e)%+Wf_Ry=G;9O6T2ls2T=M^D)6=-vjIBflGJwQ+G{Ny1 zB-=sI#AZrY;nJ4vYwUE{TF*PtL>-?i44tqq3oGRVi(n_Nlalzj9=-wIlhecX zC^Db??yk~Y*XNvIRaff8D_gjSE*({j%r7u%HqFFf5`C5wyQ*GG8co{Q*3R=KzRs)n_00P0?YLl z2m=S>AQTlp-K$$Hed@luW)~cK&Zb3}2U^6K24XI68?nqDVs5TKZ6|yCzcd~@bMD?z ze5~|pxx$HcAL|zCE=U*jM#HwpyA$-m$uKsfB$;=8<-Sf{do{cNS&#Lrh&{F`P268|99auPghzstFf zq|$$Rv*B?@!n)|i9UFrFzMw5B^$%2?%A@M9h<-@nM-oSlwdRXV0g09gwS8~(_yoGw zHLsy&cO;Wktay{{K7lYUon3Q?^P>QfS~&%#tB)N5fq+O+BV#?)6G$HBOa=RZoL z07z9(zYGCC+i7}lBl373p;v6J)%FIc!`_5h|6BN5;;0`z8rNaFnvs@Wxj|sKWB*W} zG(2jL78?f075O<4Iv_ns`cAgk+4Y;9V-DKpCP0K*97?!AxK%aj=^yBhN+y*}{cp$s zz%;$v+*U0qdwPqU&|GZ6XR0MQrybkb>il0uo_bx7-Lt@*v2zT|wE#c7hYiJzkO#=) zCK^@4)?O-q^=>%<k3>(s z6uoHN;8vm6VOM+n2fqNQU}iFaG)uNdcm#^jrls;8M%Z2xPqX)4Ib1(Ifh4Qoc8v9G zdeWDwE4VM83WQ39vi}WyEdaZCg;P8$33+*lpsC*=2vYQ&G8Q#jOg;go*Ez`eY38sE zz3UjuA%05QtU(yqpf8@|P5*Ru=xh~vNqk}59h^CLHayHBud!Kb1ixDIcE)9AjGUnZ zLVu%renag`EWv#k>j0OR0@cNt%^DIX-#1%?$?od__OK8%Z3>Zjh-z_Kkx z3%KJFBd@qJIhvl?Y*lo2^J#yp1dt%W{BJPMecW&vvRpxv#(Yre>A_@(RryaPv%Sc; z=@-FcGM)15F0Fx9CgQj&Q~u8%0l`=NcZQP_2{JxLXZ z%Y(|54UO8GZ!k2JAKwm=q)lCuU^QA7hxhy4SCZDS47et>YCl-;={X8fTVcdx;qv12 zN~@yDq7DVleQ?GDxpR&jNdwinkwV}JS;+op?#U+gn#zY2`n#{Scmv+^4~b4U{VO0n zU>u&S93Imzi|JV<0HtltkkQqX^#w%Ft<}vZc^LKr7Ulx26GYhFin>>cT%a3%s^6VR zg?!^e4^izLWiOfGu*by!RW4bh^^}yl@FvgT2({S^?a}<}UPXI;E$md9B|`}U>;BYnsHsEi$OrH^JEubVl$+B4do zF%Wr%z2dM^)#!uPDwBR+P!rBf4 zjFlG{fNtxWa$0yD`(ZvnO*K5sT5F>XQbVasb#h1Asc z{yNp+q|tS#(7rm8IKj@#7)07&Sq|?uKP9ya@|}vNsRZKG`R~3;rZVOA=EJ8Jw2z0k z!~qFWEm-uwi*W@a!R5Yd#-fAO1q#nYkQ~L$Z*7V#7?VDt5tBw?8Q! zM-0XVQ#8k8SU-TTIXivaH}t}Z6Q;U9R8AE}_?aP9jAQd2M~bpK`^r{jLhl^zjWO&p zP;Dz7Kzvf)S>%lRnI%h-3NFV`ZRog)QLEkss$P8P(>-+mJF!E-_f9`6;4Nb=#QEon zU%gfucq(-FEq`T)O+|`|6;mpkmxXs9dZ!~OHfC{0f{!_To zO!0t-G+PoE=Ri+b9<;6`Ld#<_0f-aM`)O`TckA#3bckEsqaG&u$QE2xGtV; z?$)o~kh(dyo|e4zVP>T|)sCHNU^fV7%}uVZx|(5D?4IxdY&p3QjHYIktCav=|3meY zVyy7U2EhA)XYJ~ds~>B)EGI=IlW50FfOZ8}S2KP!7GKd-apf}DCeo(D?y&0cn<2v= zm$X4$y<|3wr&yqyRKr(GWnTtnR$0sl9TNN>P6CXD8+0BiFGZ{ZPX)H=X49Flhz7gS zKP9Kcesm>(EYWm5WXTBQISf)3kd7Zs4i6>0%u;8@WddEuL0R)Z3OKh)ctrSxE)RVAur>GWo)w}JHSb?_=4vA^)tOS|Ot zvp?=x)q;BrPw~oi`gk>12Pd3|IeDAeO8vIbs`rd)) ztK7XwbWc=61xLsgJ8wm0?7v>}@eGT24x>g60n{0ri5&}Nz%r^&Hn|xsu{od~ir;-3 z_-M71{q2vAh0_-pxBP-&nP^pM<>NkOhRi3&X9!IopQnnSfnBhqB~ks$ENj1_M1)zD zEQ*HRB}btO6m)MczQdj>v3k22B@tlqqFd^snSCwLHR+`fb>aUTfGM@kcK@om*B&FV z8;%RqwNH-ku`D+I^-bO~o2WhR-|NVVN68IT(eKJlM#I)yfqg)YM)TLdJdPiA2X~54 z-a259QtLkbXTIL0o54=SI&8wi&f5$_R}-TfR=xzD3U_u2P#(o1geK1C`M>x#t0sK) zN%7YG0uf*c0JpXrrA+tqG)~KYp%TGYqJVeE6>7m#P;FzJV6WnQ4J9*-3LR8M|f-OKl63TI!hPQ96yqwcCpNaJB83_*J9 z@Bg!px)z&`<~Ma2FKp>6u|AFimfJQ?xlWU27*jW=Qt6DNZk4U?c+^FM*M8=OPN0x0 z)z#JLOCp;Mr&A%QI6T`@xl;$Yqb>lX?Ba)Q@&BKzkf#=eQOQ$Fo|*=tEcwIy690TM z{*rsJKjq{A^ph0@NtZRfg>HGHLF_8msR%BA>vP_CM8e=>N14NQs&j?CFgkM$-%Lld zo5CX^hUZmJ?fi!dpPJ}VqEF;U&F@a|sk@4Rj|gKA zEE29N!%7>&j;+Y3z%VTxGEhoFJVdMh-2V5-Txzhl-Fc zI{5=Xa<62H&wG9~+^wJg-pzD31L1*Zw|}Zw4@6`_D48~&f6Ov~vucONU&rDE*|V>2 z-x$=4>X>9OX1V(`pVUsltP7@3@58~>-cil13!ao(jo5fmqY8A=ID!tsGs&~HlsL`F zw~>X=JE7_xuUe_M+a^F=4>d|YBqxxieZCKNP_#YjYzngPl@VWnDbiF~FRD$q0Nr7#mS2-n>@d9z?!1_Y4TOzi|UM=F0liOKEO+Rbof)ox-JM%Z{3IQD;!4D+q-!AJe*cfI>yD@T z|NbSEBt<0@GLxB^O(lCJ*{irV*?U)#mCWl}W$(SNaf!@pkDE=lYhPSkxrV{9EdVF%A+PJ4C7vVTCGCki~)Jk*}wDr_#%a)w7E^_N|X9PB$#;_|RGO-hzG$me@!07{GA2S9AWly0dj?mcuq~ zCVjr^Nga`2$3lN^KFqEk+7&Cf&5{(ct2Rvvi`&9$#7q zD*p0QNaD#)CN{31+jR8mMy~~TtA`$)b*=RYP13&2)}t%cz+Q9&4u3%?2CnvJ6QnU+ zPCX5;5Q9IQCTutxz!)iPn=ddD%N77S!} z>5(D%np->op}S`Dk01VtZ!tVbwpk{F*60Q5J;(qaWcZF9f{y;PzX+C>+P#wCO$8Em z!@C`yhi}~qo;34YqY!q+S%>EGPV)Y+F3>g}$}8@YE?IOOH_}pmU%e|i7?A|8v^*t) zo<_2OFHsBtS*3W5N&U}nBcsJNcB>POxx!uZN62_Lkw%QcL~WLYgv}PWs`2N6`kIUs z&yM-G1@0RZ;c>Cf)Sl^{!(20s#jD&>DgSsCAsbsM$2(@6|EE$emcTc21?}t!H8r^r z$-5p2Iip(x_k@yc2@+=i$YcCr$>bR=cD%*pw1nX-TXr5d8!NW6Gxj%O=vY1Mr^U($ zg$;rd!*K>_UcOptGVlEvVaZ)Kh1N58vZ_?z_dVbM}4KerQ7mOKS@PF>p}V^F{RB@YKx&R+$DE%ZqD8kgI=UzN3zloa6aC*-=1zw8(pdz1Ac zx{^REL!xSFijfNZp}u8)K^*Z~~JBu})@-=lp{|?K2a+1>xwGc3*8~dJiOw zeDp4?U)MwpT|G|<+pXcd&go1Xmj{Tu5l|8}NexCIXae!&wttL_`I5Ge{$TVtg(|H| zG|LNd`E<%jNi6PIlo$ml(bn~?-ADY{Xg4%yxJWr|#ecRvoxfhD#672O6Xn0dFAeZ6 zhWM;bkBWi_n6@;Ngimowg!OhoMvCv}LIarrD6P)rCx1>J_HKv*BKZZylwEVbek;Cn zX@Ka?4T0@g&xWjGt_Y}`e(ioDLaU#_a13Md-W{z?COtO3q+QOvsSZ9`o$^4a2$krT z3^c~!_m>R>!;EvtsnxzU6V#KwLFa6p-h|0Na8$$)XI0}s%m+A+-N@ft^I9el66W{9 z7Cy63Rum}8^_r4XL`+i+<1BYFb1w%2!H?LcYEv~j# zu*TW94_oi3h4wG`gB|TiH;iFOquj5ajGWYz09-SFKWI>E@ogyBz{y-}a}Z)9w2!y+ znHqB5TzDa!d~G!+x+C5D#@$=* z@TxeN*fB$#oA^F)%+R;r|H+PLU6(}5#;gD1LK?t5;*xDQC30h$S{MDi`(2(>|H1(P zng(Wfa?a)*h}nJf8Zu!~S1&U-tyxtD1Ff;3>g?2hwZ{1br`G0Hp{QH-4FxO@_+XtP znc9Pn6Bzaf#3ffa`;!?%PHf(RfG8IUb!qj|0yy4^)(pncvB7TUTW)LTl+Ny$jmvK% z6YOJhP-|xu0luNO>$v*tBP!kHMU_9kgJMrup@V1#?haBjamUqTB0g=vBTQIM!WuH7Fr9ETB z;JF&GJRe`BaHPnP(a_S{l7nZ!ZOv4cq=peSQ0fduAh)qK-D30Iv-w_kf0NEhIK`0t zV)o)cl(>-ha!ua%*-jinB9>R zRX2QZDIhSqgS%M)uhQpBXAJgqf0+|61Y(RHj9#{oOUM`(*c>Ft?f9CvTTXGOCwipY z>+`mO0drG7#CH=;dXUhE2#fFJEqksPMcw$=NhsqN%~e#_67%TsivU zVgJUL;HT1|V1~q@VubA^A74i{ub5zl|RH{IXjr}w>u~$?%$yZzLlW_1DLD*$<|fnK!3xH zpI0Qa9;FTiQ>$~@BggLii-FQvFR$HK^_3Z9;g~9Whc}bJf8{aLtIibM zFz)n|ZQf6{*2jk7WP&&r%^g6lbduqy2D2ydS$eN;v{P#pDR4wJ%wrN!ityBjO0C2d z1Ad+81ORwjugeS!m_!!#*1azAMx3#Q*?j@e7+|AEL&Uv%!(0W}@FQNg_r$I7-Exizsd9+w6m zs+tbfG|AKJGrd9a_nQp8EuU>=&S|zBlfOh(uwGWtZ!14O{A0?_LgS>XXuy_Fw_0LE z?~J4mDbjcjd{hHF-p}xerjLeN#uQ5`9|0ZqZo&J|it{=b0Juq|D*? zTV&Q|ZB{aa^+@;8J89{V;c|Wj*LacLhvWL=#^ze=dd7aJoUt6HGU2;u>*q}0p8dX3 zPVbd-IIe(lZ#N|L?pa5HM6C|@SV}3opp;QJ2X{q}_-?TPZIZVveJN{~Ht~m8)?Ei( zS6x2Mm6ttZSIBR->K$N;?a^jScPbI`mw}K1Q0LJaEr9NLrkg?9oOqz)_U%XhJ#NDl zgAhxdDy8x}HIpSt_)Ctky>tQKfPBjUFA>>L1lnKJCHC>@CQBrG22w|IF12u zBz8Kycsts?s1*lN3%&t0=SEFH7*>r>uS{-ewRQwz1>0@zc`e}o7K9d}+&F!eDcJ$< zv1pYVlnD<06%!P%B9K3H)Ur0|+W(Ep-izNW8RN!Ra(p@%hcKuCg=)L&T!$9E(qS*z5bmogmu&{6r*@h zXo1zz$xXLA?*4%VZXt%Eq}oMqvCE|V94FwbSQYR10>yqwBL9tajMHfeD_~YHGk)49 zGjDhgqWN_IV-NcA1hyRE`=9Pc1=r z;<75@7bdlyvjH@Eq1B+h*=XmPZz4g5n)_%2_I-II5A)ZtJ+E9MiI zyj)o_CMC~RC0d$Zt!R*ql+7~Z)Vr{I@Zs{Z&_eF0DM9>j+01kGh(fHs%x09u(^pO* zt|sot>Rq#Q45?-t`f^C1Ahi$ zvgKSLdbfEU)ys+M;U_CqnzT&*y(n$K_T|{uZX!5alTW%d+R^U2*BN1wFFv`q`&tq) znm$Vw1%#%sg~87AF#R>N5fGN`l}oX0A^6msQo*5i0vla58*-PHyLi%RLWoq5*QYM& zEXF^vspQ#d7O#i4)f8Q`lZKuhk=W1Tv)u3V<7yM1Bnw&42(@hH&InNtJL|vQC91ogz_2(F6xN#TOuVEw#DDAC zgw6-81uFlusN5FWr4s=&(F9-(`jVs+3GNW}ne5NLeE5{sdq^MpViwO{@3@)rve)%r zcuBb!3siT9-n{w+GxWs$+qKFW?sw=)^?K!Lu3L{}cyFJgBA*_ExA-(Xsv=+C;TJb@ z&7?F3WuG7OrvJ&RarQuC{Qy8IogAl2^H!YSZ(~DiyweCh(44f}e84TC5P)9Tzf$`} z`GbY=sha?}&)8%c?}TIinJ&OA9*&q-k|46s(NJ?Oj$tt}(^kK7*OA)m$sYKjp6^(eFRAVPv z8--eYH-2x$q}DN##P!LSLUp+5*-&4E0dQft3ZZk#Q>wpm=`G%1iXy||44O9Vu64AO zH{W#^gryiz#UwUX_6}4vn!^n#l~ZMA*dzypZmVpf%5JEsXPoV**F*IfTUPKwVRYBt`<~s1NSuu;)Q^`!<3slO zTqJL7L4%joz7Ylx6upVP{b*!qlD3RhW}+IPnMo0+;(EU}O#nc9XYUJFOrZKSQ&2}= zF=1CS=F!1s*K*<%0C#V}L7F-{k1-Y0Zu^aSPkP$zLy6nVIUHLTTQ$k$=x2lU4^_=z z!tCgAXV_s)f&SXjH%5!31wG;WC%|i{>&Fq*Mjaw2DpZ&uXX8nfh-;X7Y6nOIYb}9_ zzaH^Q{GOdJ9pBB@d@vsfa*mMc}LVJBVFfk1(cs|5k&xDrq0)+|PH*QSIT zYI(qevPOM0G5W*nsM~AjrPX@eJXxy5WJ`1#2njA!;rBE)_dBX6h!vkSPzTkRR3G&i zJL|dw=^cB|MXpnl9E}ZdxC7RaeYwX0hY+ zNj3Ygi;+^@?O|SfBILRHmc?^QZBjPJsb#DFqcB#WBvFVV{B{Ivf1ZD~89CIkTuJaC zc6XZ6CJKhZNX?1F6m(eBjEsEMt8)xJOXb|Z>+8Wa#$>+>Bzkb>K(8(AUZSKtU)1X& zZXOVyq~Z^HPh8ibtXuLJ9`Ft*O)8NEkeq=lHZg&Qw8CNyT$C9x?I%xWTj?5RB#lc< zI)c0LvoWM^yVIMnp&J8PoG)U;5T~2vcSa(+?A)9~bB{!8Grs*+OG%c+`$&-`y4Tk| zx2j5;v=297op^_$oIQr^eLP%V)rS}yW)AT4qz}i$74y?ErX2IrUD(o=i%G{IksvUe z#q2Bu_W8>%D!=2pK4x@lc1CFSFMj@ov%(1FBAm4=&S*)u_U1};c{>5t9}nBcx%q+) zfRsYcQzsaxZ%aY3rh2e77E39j(h)d_En^4dG#2T`Kkqm(lXog3rmCxRbjLK3*AwHY_7ztr$wj9 z6-`?0iZt|HCAKAW(L+_Hhl8bwwdG$* zMq)-?UZ>F69q!p$oMdv)(b3s$&9=!{QSx3zW=l;q1(FWh7wIfT;?@C2S9WJG`+`X{!liy)E=Ql+5kX{vuaIq?hCTPQo!_y|p?0 zVp{E*w=2LicYH~pKKA5ar zY42tcC>@Y}1*Ok+pet29JAoKq1D4Tt7CSy+_HAn#n%ws z7L3j%<`e!1Io`>mu>#L@J&uJ0XT90BTWrb&zF{0E-;+8P)}V6paQA=(`db{rQY4HQ zyj(VddHA}EhH4L&uUGAU>@a%iS;8D+&sAHCKmDr~A#aT%yXvo(AWayKUrh1nAja%-l?cHCjd@UBOQ zgJQ!~K@_P{1*PM}k%Ej_uy9pp6Xbb+K`O>k zV!;T^Zt=3e7J;{UB0&u#Yz`y$qiNZ= z>#N+;Tb{#-8ysLkO;Vje@Bs>?4v`r~c2W{v6cqL)({)~xtp?RnHIKqMuDx!UdAB}u z*ViQNUj50#G+XNSCD!!qH~}MBEAZs_5!-27b79cQLz@eFZC++Mw{DNOhK1^%Z|=lTrX6 zj5?W2B2@d_qxJ@{FcKftF%ywp0p%S@$HU&?liL7%t=owmbLsrMvaaOXh+VA0g zZ1)$23J2*YuNK$t;jd1!!`>i}8EMJ|XzM zj?V$@hPQeBKAtObj6c>e+dk3EZ~XR;wNQ#ydmhWp3ngLH{$~Zev|;|0uIqFAl^S`A7Oxu*_x+o7)756hj) zUmZ2>SXh@);=#03OvZKPpZv&6iiDNoV5!kj0aPAMBMZsDmHJr_P(n`dp>P?Z( z(RA2?NMae?StW0~EX{*A`A8i9pIIyeSDcBG-MPn5utSE<>7CjBh3k>L)He&w1jV>w z`(Zz+z!{pc`MItv_3OB^DSj*}$Zxl|hM6o`ff|G4Ej*sZ+y)bG`w8W3w0Z|BOTI@J zH|6n(FzYvFF8Z_Z5nvo0aU_Wby3MRV!wzIKvIs1@-)Cssr zKr51AE~-}qiTVwB?h_`J95~)Vd+moV#1o&z4ziz!UsznCIiP3Pynqob%7F<0VV{?# z8)B^7dKc|+R@Z#X)-#zYua|e>x^>l{*ue`dGBk>xCPZ#wv1GmcrNtAegC!b3$>Ai% z4A4}`o;`VRG^_q);u`xr8+>QM@L~76qQ9aPPd`#*I{S>DcgyJBU%Of^)Kf%B&Y8cZw4ed4Qkzitf@WDv2Q~tKtXi&bTe-?s#590V_k2K7zdwT6BE%#%-7crzuZ;vi_}ya~#&0EB?boU-D8A_ySUMe(97Bj2u^;HD$I&`05BOh_!e z)`SxHZ^@Q;*&7k~#_k1=Y=3v$AP$ILDRDmvz~*@$sL@P9H}==aW@GPoJTV%(5rxLX zmefc1d(s9RPe8KrBkr0r<5+d22JCWUa(2xKARah7P^EINiz??KfJbR>1b9l>N;Hc^ zEz7F+t5_1@cOEb}_r+iPy-}<#uke!@4DAHPNT*-mT7<5E1gO(ovFp{Qvy6@ec{blEb(z0Ob4srgQ>iHw=f@-O6U_t~g~V zSu|U`H&pHrTuNMvv2eXe`eKr2;iwNNoL{0Uy0CJZUVWosw3eYj4xz?P_$UpuPGNdl zV30F?bbtxk z7G5@aJiwIo(LwOa-{|q;l30?!htXC^z(uVhjFcttEku3T((Pj{o|6sl5+P-H!y{eb zsiGMLWw(SyhkM6qxds$MH&i4JGlPuo0&JTC@xZ}XNfSX~kF=ImpS&!bVD_EyFqcOB zhWEg%ogM_>w65mOGy%rrIWD8>W19ONwLJ)GM=D}H(gfZD3FppF2zgm6@-*Vd?doq8 zq0X&T8Ta)Y{q`gUZu`^vi0k1nya*C0KylP7emPl>sizE8N&3)tmU6(hfNiD~yHabQ z6>K!+#tRy4g7doTT`vKtou^6gx1L{o6Ma}d2!_4BkhOxws!EP?T&R%RZM7I^NrI(D4Sh<*cd>Z{-dR9`SMh}R`;f~qo@hZ7q3=>hhcAwl=_;|e)IhJrDbSR`` z&*pS8oiXD&kO3(^f{EQ-Shz#CO{&s`@9`Jw0&s%k0qeNX^t~Ayd6>rgDtpOv>!32B zeodfo*9_l7WBwJ;kIf1aF{l}!v7sn$%BX4OzVLEsEN}gii#N|eYb-&}$ynT2SsF-M zi=wj{S5c@?KXu8&-L5g&;BbnPw8eI}cU?VJeOyl&0$wyZjYk^9;qtUz=gTs$ z%SdjBZ>l7CFPCTX!L}b^zwx2TgxK}K@zuAzsD+N`biJiJEk(%;=g#q7ka;Tcq7o5V zQH0J3VUV9Z>a)uh6Q1(gF4}NBlB#KG+ZnzRR&-; z@{eyxPIp2*=6?LGbP147#%iOJPw*%Lmi2)WP3~Kt2=aB<&$w9KgXYO~VI^}$Or`6^ zda_If+9Mc$krlh#DW^|Dd~uq!dXWx_m3_yO#NdG<#&^7=jf$mi;h8>|kE4zLn=GOXeU#D=uIDn;owR?u=jUd+uFtG>X|BnsTi>k0!JxCHD{!zFk0Gq($+B+pg?pj{JKO zLH+CEG?04w;u&tg1<_dou+-xkpN^K0pP6D*4OLKoz zbSq9?*{VMtEe8}0)EZk-Tn(z}kf+C>V2PP5>qeDI3{#1D(GEAG3qI6{*Ys?3N}jOji>l6t03cx z_Cv)92yl-^N9@u*L=$Jtr?V5U>)lsm)!`nrBEy8#B(LmICurTgE39v^J9t9(C%SZM zozCIlVKep0iug~?`I=vE<#p%JZE8fgEwnqbT?ePACTxc%yO-6_=j;kL9$UG#XUrZ1 zMqci5(CK1)m6#(_{kAsT#1GRy$kV9b-7;woXGZ>!YdPJu|Iigyz6NA0oKftXoPjdb zgmx-d{KP+q=iA7>yP{gUmU~h@;a0D$u4|ENk>^PCLj6t0a&fDUM?Ix$Ke;fXk1uYz zpy8JUd{{C6&BLFw|9In`275$l2otc@toF1eAk9MY zYMmjY;u=;iLP^elM=K+Ngk6seWeN3P&`Ok^ywk&ft8|G=!fn*=A9*TeUF?=XdfAr& zdUZkK;`JgH(dN>-)}uld^XfnEz3P)<>51*wDP+SDxFo-;}FAcnCl(Y-M4k6YDpN`i;gBlud zE$EBOgR=bNfeBXw^JBh0?BS%fOA62E7bponh&cz=wyNH_ciA}iZ|*}03SQ9EPu zqsP*Lal_r+b5Zytyb4mrO5q=~TVwK(IK=-cl~N8vK==AR4!&V8VRd-*-6nBEPH-JX-&5l)n@Z zIJRS*0uRj;z6*~ZVqfBVc312f1r9GWTYpXa5@`;(K}YIxN_dOU}rKjH~B zsnbt9oOg6n`_;yNbyXU|CO$R~m#ntuHMdAOojbPsA28HqcBs2seI|~>7gU$k0+X!2 zVgJVs@KFocUMkMiAyVgjuM$+I78a%NTw)7PmVyS4L}zru_bAW-)Vs1`?&>D#&E1N+ z)#Xprrw)2ru2QvGU)m$tfCzp+sE%qpoN0q;cS%Z#g@0{0SX?i~U+P#SWtQ5ui0ZFf zwz%}>FN}T$9;g7vVBtC>8-PoMxIDTF9-kBu3ZL?e%)XYsQyonio%gc+fU6qxN;|fe zGQ}Y6EgsKCp4oGXc?hfGDvafzE!-hXwJ!~BYyF~XOt^!bAxXN8oQ>&EG50Twgw=>& z(X?a4y|(!He8Tsf^N)33E#2k0o$2cubAxaC3mI61xNlrF=IDLU3TKIRL`ok} z7?<=QRk(bmlSz#Cjm+UolkqlQ{nt2q7nm5jn$}IBS3v9OvBeGA^*i_x=r!HvKiyOx zjF7~DH_IahQV!V2T-`q-JGq%mgd4UqS;hYHY)=Q(E)T31*zr+JkoXrujSDgC5)u}o zE2LMqQVTrp;VRTR>4V+!@!#o z_9g8s#-XA!_o7)u>l8bw3t$#^kM0JEMLYiOhCFRjRvc)Oz=1Z#2k>oyCaHiX^Y=yc zW0JexD(Q`={s_iAr&myvZI53(#vMx`F-G;frQ8p?JVYrk;4x)B#NP1vrL2v42&KR` z8HuQ^>K%z8t@^;fVsF6aR%(@N^rnCSb|9zl{MQ#> z5-jlwC!v*rMp+qWmHA=xYF2m^8)!FIb2%F%r)<*u%)Sok#@<--$F#EwpXvm>H5cX$|O%qTv zs($YAqQuDG5c=tzZvgC1!rUjOS8?7k8W0si@t723gUy7PS_gFbrSIP%fGSzV(UZDO zvd*X<#k77T2Q442HFfYb96;}#2UAo&)@lrtjPm^yymk`a8kc&mZf&Sn2NjqxtCom& z2oGL&m=aDx#IBLjvs?9+a_SN53>N$83kq>3LQL=`zw`X-30)c(&>Iv|!RpeDC?DSX zsj%m9jUulR*$vJ_V~D(@`wffo2O3$L4@dp1I3Nbc(QnVe@RxY&sqg$y zGMb{d>uiDCY;&tKX~r0DiZs?9k*n>383O2XE^3FrQe&X_#=z&*iL6=Z9RF_|TaeW)s_$Z^M)I#_ttqpqkAy?9--a zx~wjmj6`+*1qVN~yJ}#HS7z}) zkwcWv59$YbUJvZ}=4>u7Z##mT$=ry0MgO%mXo2*%KK)%u?(3};z+{-aR$5dV=SaVk zQSFZ&cvZqSHYtB^SJsewg(N)jNrKL9L$-0aKW|xxs0$ax3jO`qx63DKylLSl{h-y> zt9V@{FSTc%4w0`>CDF9mkv;<4)qjrrQe+lj4Y^ib*sBk5w{FJfQSLc|q00_t3YQ1e z#hr3uz>5MM%HP%L~Iwwq91J9doJqb5qpht`z zAHD_hPXDsF*lj-sxMS5>g+#uzx84x8VhG?`7jmVp-f|s1n$B;SZjr8KHjlMo9IOz# zT~2$=^-VgygmKSPcg{pj6nU6vg(zAua4pBPzlPtIcs$*6ZCmA)N`{`J6Q~C0iS{gS zqb@4l#J%?hA656uPwCyXNe7(7PeWHD4rM-BRs^8_jyuk7nl`MaNEQ2>U%O^K8_kK0 zRFLqN-n_4-wolnEz?YAfNhEew5F(8;@ECfZrJaOGV*TnlRj#2*;Td-%UR!=|)#Z&v zrWM5My}P<_wNF6yh+7cXKUWes^NT*f++L+ABEuujxWSN3j#>wL7MB1D-^;x6!~obDGKr}JqJ{YBKYhPdUg4)(ASyeOwPrIJk^}- zi_%yPAk2Bb!$ne(c6~X%_%4p#(Kw{7oa*km-3w(ht@}UTN*mJ{fZ*z>tNJ44nJwqI z#|SMq`tJPC+${zJi`2Df%Zh`?2z;jQw(l@|;ZQ)CIhBiUv6DTWz-hn#++08LZ7vqdnkJ3 z`n?B$J3FrMg@s=5Ci{731?T=-idG@k{l!yc5p)u0(>J;% zb=2H4(M0i!cc+Ni!VMfw_EeGOcUgW`L{35{K5RhARlF#4e(_TOwr>E3Uy@vpI|gW4 z@p>}`q%x*f;WQi?#>b|&D@Fv9z;(YK8g5nnE0D{UeL9bvQT=Sn5g2WL{V9!A{rLBLULX$-TUL`AsRtC{ft%G#`2dZBVl0&7;i$QGA|G*R zo-JrXN_7fIW>GUzu9S&-t-sxY`g+G?<&f|RaKxYU4k4H#j*ldHF=8!zRj?JI8*_=5BrYW?}+cd^$JvcF@TzG2Si&lAudg@fh;59 z;=lUYZ?ih?qTJ+S)z|ZwMP%slw!4m0cQ=r5|FeDnd?x@n>Pf14iixV{3k+)JZ-*)2 zeMQDmJvE^!F;b}ShP!Cj>vs52`MO!89CZbYt=tY*qslVniM76Er6ddKONDG+*^uI( z709e}vMPO>^j}RFW7X2-h3ZV%h58L@@HKcj3y9Id`VQJss)0?^>Ws+!IP&!vRg-cg z>(1lmE%stM5JOBLgY%>a5mGpO9clx8R6M$H+y!&=@BaYmLu$ez^7cR6m zdptA@XDHOTfYjsX7cLj#o&k*1{X0%Z6!Ung$B~zrc7jS8<{rVgXROXUv!S#Azh-}0 zSG9dFfxI9pjiA!KtYtV+n0o@s{qDa;a>)gt3!=-v(Cg!{`x^9G0Wo;11{VeY=d?lU zoD*?&&B*!pahWFD(^*jKzVmF9k5nk;SEJ^8>MHzRmgHDd9z|J`Y@H)#p1<7VTYnGS5ePQ9lbVHcnNwFsznxKMLp zjX6VZcnbVHott|`)!gvHzb~@WuJ2auzy{8`6^!1IpdJ)f+*miO0Qu*@ld}+B3Adp9U+mHV}e!#SelVdrkGhN-lbDV`^ zuK~5hcOhLL5teoxy*(eGX~)Ga zTF3q$CJZ=@_b&i5YTVO?=N?#ogRfU}qa3^$ZBSzcs?i2x;Cs@SDH6!VoEuoU9KXwu zd~UqcmBsRy%W#i{7DL1@;n=zJ`34O?_n3O#uz_7IvGg?JaNS$4a;Sv0aMd$w`%<%a zMfZ%I_&S;Kay}&q4if7xHTWJq#aFb0Rei~OQ@v!{`i^TYvW;swfjiB%n_N*_N*%^p zM%PXD(710KjIlNE{!7v3A8VkACBfc&rudUN+1H8a8WYD|8N-wo4ZqE{jNrO*Kt?>m zdcNo#WLAYV)drB6evmqtYc_S<71tuK?3s(af;O}woaNmIt;Fs{z3Decaq)gAz}&fZ ztikAlH$%)*GF71z1zqE49gA+w-GyckljQ1IgQ{Run_JMT>9TR*4`oAep>?p>=a*U*9XM!Muft@HCyevZ;x3U1JnEjV_N3|Z2ocw?xfsFBTye? zcv(iS75-Jf)~bLYdvZmvv35;PXf~YVxQ+LNx5SA6m$ykzS*~>}h~T}5-)5sc=R_*r zgjW=|7DUc(ez-$1qnZArd-Zf)K{q{TE8rpIw!CS zcZqmXmv?k8v)5xw3o!5=qYk5_>sI_rplylVz#zbwq(R7ER(*p9iwSQgFXk-!a*2Ap z!(2h9P;J3aL_t8IjOA`Ck-odHjA8%$-C%W&g5k|xr_H}4fd1j)e|!eO@m>ctL;itV zFA&ijqe71VzfIou@y6q-jRn)tdKCj@?R@S9%8rd_O{gT@YUh5rRpLzDt1rN~FT0HKB zri>s08G(%C8PT=8nPgSki*y)2-LxQ;1oMu^;f^JA3PV$+;9(KxeREWy8tI&(*0x~|*7`&eNk4eV zy(F|jGsNFCTiN!e2!KD&jXD+4nke8Nlk|Rupwk|KjXv*PWQV^|ngT+>|2f=Q>{}#j zA=UZ#F$OjLvBZo)u>nc48vTQ@l8CT}`a+649M3Q8fKmWh4O!3fbz>_L{jifvH`mJx z{J>;Vvku;*jr-W*IaE`AzwYREe-4+I- zr9wr#Anox_l*Z;$^oW2wy&msS_$0XlTMlKhrr&hdbHouIc$CETgSqaYCBaL`7+<4) zj9Ua$kD7+k^PDBCi3bqif(*HL#VOTr>HUx6^~>SkymVaEz`4*IGl4tXYEMKm3u@{g*c_ZicNzGC6_b4em&! z>j41IBI*1(g~R%eF<8{5nr9`R?n@y-Fa&#zqL{BdFvl0pUBL@m*1|6;8f3b)2+oc-_#yQ3Qod<5y{mExR(edkM&FWmS>UEsuno_ z3iol|%#jmt>T&&iWkOdUYk1p;w%(=fX^^Ly&%?$?txtV6KL_5zaOvH?0KUu#;=0MQ zenieOH+}-v^ZXJT^EpWc#((28vfv~t9!D>Qjq1vi=u~rNjm+@ zHCQaHuQRm@AZE_LtMB2M_@edYeoPUW01*r|PdS&(;!XRdM=vWEemtk-zIGD~{Yg*I zW~k_?svbMM-l+c&8Q_9D$TAn$Y2p@rJB!c6I?(^{neMdDC3wZU3QXI7NmdbsyJ}t73>T5r6OkN(ZNb(O*0KIb@HzMPSLH;Mf=y$V(yNch z2Ra$bl+vjBIp*Xo|26i%eq4O)J8<8IjE|8_4dOay_p>#ER52kZXvl&8o(xeoviuFw z37rfL%=R{UD^))psr$x3zxSN`*4NQGj9U1CDpV${oo`9+x?P>a(XuMboHAcMa%kfH`XO4s&IbUX) zWaM67?u_v0ESD_aEMu5ocsOAkrL`M2zh4-B$-O=|B-=xMUaa;h6oNV|bo0r*A_OPw_pH|RQGn?H7DmtxXD^DQ*B_ELXSBlRcinDtRPC^RFX0Bs7OC4iD+I@k4M+b3lXIl~ z$f>GjY?in7lv`a1j(Lvk9n(|7o@3&HB%Yt9;GH*Onov{U0V-#|F%hfuB{PL55l31P4EG?6(%w*%;GNtpDSJ(g~36UFS@)hemhCD4-O2@U4sM)K;{vZsXIxkK0| zM7j6>8CJkiiWhIYxV)nUa|9)z28V_iZ{DnOi(C;^OVBLP|9^lg)Jn~g zB!9kZKSt;8I)nc>f#TOM zJFtA?TS#j=knqpy2eoc}UzaVQin3cRL$sauCvKM;fALw&H|(Y7g96bLu`Oyb@a-Ij zqhy`-e66R8;)x*XBW0 zOXY3FuH)t=@WZBHux~IJmrk#eP{(^z*KYnp<1F09t7W*Md%bqmvkCZr?C2Z=i+nsj zn{h@}%C%^5cgfDq(Yf8x^he$WdrMNIm4#9JSu6;?_(|QV&5Wdo;cijm%TMgS?@@R3 zwj@lgEdK5Q@Ii(a`M9Mg%ijBP!!Rl0jE_|F8D59SLa*zXc^j_({QZadI#qAQXn zHP#@aPbO@_669l*IRdUwuHBiIz54zLn$3IK7pU)A&~{q zN0=RxnpvFc)^1nT##+1Y#C1$Z7l}f31CwIoS8E$yMz2C&k%e1-ujwtSyd=N3qcBaN zu6t{u((uV1aY^D8eXo7v>1dHocK70}+jv7ZKW--;^|7Sua}etb+3Kv2Xrb4L^g-oE z#zWNKDB+^&iZw%#`fHKh`g@5bCm1=h0I|Idn=Y^QIspW8NeEd17tHZHMThJJ?r~>u zppeZ`8Omz|6L8W(eo;Zl`R&o}7es6i;no9`w)(`U%=;2k`kk@+Aujj)`j$bvy z!@gO~dq4ET^jhecrs)}bA!RGC>CLK51ug*QT|d!%`Fe&P%yW^KaXS_Juk9??qQ2uM zx_Bw>rR$&2*4WLpZ}g?fbs|VI;5K4zA%r4X>flLW1{#1aQF*vTyV_Jes;+ZZK` zd9=(O=fY`jBEdr-E#mD%?#A-ubv zJTKg{9Rh=OWg^153+GE3w<1^cxd7GUX&N_awJOCS;QNed!eDig6L;g-Y94R*kcNuZ9J&3Ycd0=3zlAFA*kb@VA%Gvnj*X{{;SxBTcgVa!p(t8mrVv9s!pUzU; zA~prhc&WQkEfkNI9QVXeMOrUzKMUl#@0G-;0|O~m_j*S*$1bN+`Kd3&Tb#JLLUvq;#U!H7@JmP-?@((#W~n0@qvmvk z0kLZK%Rf-`2EpK?2q~F?%Z&90z4x7>(?vLMa3904@Q@jf)Sa%OG*rZkSh2O?I&Xyu zCWI;)aO62GW=F9CZgjNYV(d{BQKGO7_&&%J{xC#$;m35m!^p;^2xmBkx!KkRGu@DL zs{R~}{^;h`$C%Vkg(3^f0l)>VPdU{d9whP5CKErgFyF>X%8fD?N@qv&!-1wMXUPih zadSKq2l2{${w8pZ%%A>U>k~y6c1?fpRksl^{ zK39i`2+N6V?nZW=W;M4~weSQ?zehD>8mm%}52j_(hi(Eg)G9dH5_CXTWTGy zP>WItUve2p$!t2;jEyf_C?AT|w6Gz?;$1{BJ)+r8{^W~?o)n?#^8qbEQXkkLr$vw~ zW+dIeIl~iTT93GUH<5Xd z03|@LK8ulILp>(jj(qq2h{Cw)97b>2rJ1ek8~!dZC-m2>L8E-Pz$8*Hw71uwtX*4BVL2_SeMf8m=)(Qm&S2>fI7dM|w^9|e;4C14lxq1zs!5hFxu*FUpSLQt+O&j^ z7k{8@$4b+=8o_Ekq2T2jG1ZW?WqdaE+G|ghtxVv7swRd?kOr*{T&f1sGPVi|9bmWa zztlLf)0|f;qaFOAn7sZ=|12{KuGOSOJ$^h!2dO4ccH|N9_8b~L#mzxIL9}~eUqVmj zp$82?G!H*1789J@FsAL30#d2AgXylOhhe9FCV>0`oKjxGsfHbth6Sq+Q%nXeYL+bX zJ0ZHt(}c7!(`1z-`X`q-Vgm)#cr{pY$MiY_;0(__kq#Kr2kb1j$nE#b4lDD^?uYrz zxF5nif4+sUpr&Ub++I8KbjwP(?>wVsxU$&YR-0at-81mWKdDjg5zxI!XG%09@<*FN zo0SJhr~M)M<^g+wAaEA;`9=HiaG!U#jA%i>QAcv2dYuit&;v zo+B%=PdsFz)c!6Cf5a;??^6S((-PNPI{?p!p$CnE;7wgtXWr{F>$uxf&nUqbaVw3e z-GJJGmzo~cysiE{G6}8}>@0j>sR!f>xEL^X2?PR+$}5hb11*4RntgahOu1K2(i!lM z{NOe%$2TdBDER^OYYzvL#5kbMa1QngDZ@_kTK>63Bdkq>cwE#*M!wpR~N0W9NjiZO4&ddqkY%8WWk+W37u_3qY~QSeUVBoxt&_tVm$yv>xOZl5(_24 z)#9czDE%cUITr%&&O-bqvW1QjTI9wr>Kgu1TOkbfsI&^6WV#l>OB23gQd8g zV*WWLNC*%yAsdr2GD%SJe72^tk;OlYDPd*Dh;#3d(q~oJQ(kD6gPk`Faw<6zzru#M z=L3ioI+3d7aCKHWgjz;M#!YgAXVOq8fEACP2gKlgj#uRG%>k3S89n&dvnn=jy!lqw zl_y*3T1u)(HkGlTQJyZknym3zCx`g(y-mU^`w=%oPPf1Ps+cC;u8>s~DnWw#bvUgt z)=<8)g+j&v&*O)6ji6Sl$t2}_9oC{4ouVhpn6Ei~?E`p!FCnU^5e$Xi_zhj|*cPhp z(o1u0X=@8xN)tULx&Cfj_^RaTx%a-|;V;rPPSERBf#IoPH7k5Yl7QWlB9$+9&c8vA z66&Fq{S!Lc^7daFUhsC+jTE9qE|wiLMM|?ZCL7xn>zI*OkR2P=Tc?2Uracv6X*8NL zG)ymfB#`^BWc;AJa&{cOPEEago8ojtIP-Z+>XcrT_V&C77bX=I+@?L(KEOSDLo7;o zs^j~Y$h>n_=jY$vJZ36yGtFa}cXV67FpjXvgU#0(Jg#7m~ zd4Ry#-XU^seW#%H$p4pq^|!5M1Mf(I{HZ+bFOJQJYbAVm;|~fA8z+_r7_?>-GHk^G9Bv^UOJp^Ei+3K90{3@3k}(sV?5UNJKYg-2^A|j>tF>z$NIz~4;G2Sb; zzmUj%x@xzqouyj(MX5C7>Q(YDZ$1WwQhjQnxkY*BPWt6#@^^ujUp|nOKWDr^InMr_ zH9b6tgpqUG|Nh!q>a^s6^inFW8@F+Q#7%=Sq9;T$H(zY+-zbwHN|5-(I@KRd&&Z(J zs!VjjS%!WfKrH(Hy!V@6(sS}4c+)C`g`aVdX?w-=#P_60B_QSD%X36;?G`)|^+WfDO+(6}h&Zmy3JmuoETr0MBrc$A7UhGzZy(YSNxc7Y&6$Yx z%csZOA?>nTA9rY=^X0V?Z|>4~SY`81kjLF|h)qZk>SZElynm#_+=p^yQwH%T+~Vlp z<-gk?V(`8HdC9SK+?*emz!M4FWwVzbwMmX=zmHxqs;t{7lHu5niha|=7bhv;7p&8M z{0!7{)vLXqFKLD8ap%vS2a%%I7Z=kOLa%=UJ^X$#ZgI)#Aw|@prnQo&(K0PxCxI%KT2`Q36I~(T-$fa`&q?~#^|O@TSv3DnBAIJwlk9_W62E3Ny$o+woVDH~_BjtDQ=N(Xb>U+AOD)~cm%DB) z_;1O*P5=3f@Hy`K0MVK5UdiNys;h`Ay+vtv5Z|V zUcTtYRCfbH0U?w0XIAuU{m6Iox=uK4aKQU^=SN(8Z{zuUUi8@ZSoKKuTv?Q)56iY# zG4w8y7QUPmY!);fIvwKp&EvUudC)k;t;@N=0`0Xka?WbWZj#TlN&c~nB7oJcyyygEmf_y$0ebV|2%)1Qs_O}C}URKJNq=nm<^qI4bBXE*U}BNGDV#tS1l^rSs&jq^``a z-3zV@UGo}U(@~7k?B5x?ynhHRz`G5)YJT9lH6LhQE4n6kjh_z6dF$ENoJSe&bOd#G zp1tIvf55EUkoQzZfXDsE7z z)!r|vcoUj&Q~SoqCA0^c!j1)78JZIsqEgXCAEOY1;AGKd$g3-4E2PgC&PVDT6)EU! zKT|b8{D+D{MK53S}}w8T~cx$K^9$NQ+)%(3F%b%%yjzf1pt3 zR+ma+C0ZKma)XNni?xeE#+j4X91R>xJo0xv*BJz@63MuO^fl_`8R3Hin{b*{ z-Bq_$HS~~srrWlAl3Us`4ffWK_Kpfx4BLUN#s*>GXpv=ULDuV!uV>v{<6Gw6d#)rB z&Nt;SZt+;oAX{L$c83&idAH(I(lh9@4})fwMdd**b(>Oi%(UZeWA{e0hUQ~A9PDhm zgr;pK?SuJ1f^!L@@z|tjf;@qG7<QqQO&ZIE%dL$Jj8WCM5qpykWwzCxjo;m#ZDkyVZ6LHAf*eH<9+SS+l{K{E zLX#gRR}t)!1`{~(2cmDp9NfR6-?{9#P0hUS*o=-&iT=LwW;m^Hv2UeMF1E*Onl$hya7|=}=4Z{f{W<_MKm;%d^EIs)b+hTRU$|fTiN=X|G9UOE%5KJO%Zc+B8ChPu%H;?2z-bzqphggRkUk#?B zq$<4R&Fn-66K>!Nyjp(er&8O2Qvdh$Pmvkn8Ewx}23-d!2C;)I77dmv7Wc|2E#d9R zcRG=C9n~FkKQrg3J2f9-jq1Etv;rOFUdW;N@fCXACENyp)bhi%i?wt;bnLWz@A=*< zUTu2xBwncJ{XGS3y`jh5VbvknsP#S`t4Ox`dvW)ubH8SN&I)%neO&)IGv6uSD&NwS z*NFt@p6E9jP({6Rd!>3s=LX*m^@P2iwjSZsJG?1i4plCDJ$+u(XTbNkm*Q5KK4yjs z7cW!Zp5=d0s6@dhEz+*=6VrBHv_v#Ul*K@yRH9bp1s!m-ca*KLrii%@+k0e7xL+Cm%V9{qBL||c z2H}WmI$s}DlL^d4^wnK`8#NWxV%AchsA`-2G#lelIu0pzcs3Cr*(Ui@GHNS*YpfCP z4PHCa{$%V@I#gMauaaq}IvN65gVf;aF+hoQ&-A_KC6-!gWa)09Qwd)Yhxj|mc+ju? zFUwENq(u*P{S1$sH)l($8;q6BUQcIx9pLeIZz@7XnyG#U4`xy*dPjJ&*gFaWi<~lq z=~&1*+dBb=$$KEw`)1k{b|wwsRQ|_$?uo8-c{l9LrzMb4lXq-C*snWMzFKtvJ4qjf zwewcnxb^9#>Pgif-P$y5smHYCA__1(AP zNN~xN)l{Pk@JAyOmIpgHqBx2=SUb2&&ClH68^7(m^$cm*Gnc`>rP-BgCsDlLyH~^Z zK4pH*AJ^P#L(|VpRY3|k<~cm-)@lK5ZCAWlpT*OxeiF!pWlHkK!mfM$@Dml)-wXN1 zqE{Mjo`N4f>Q9<0pLJ>>-+FX_ivd znk9#U2inJ@d-ex4&A`Z9{@k2BwR513i|HTFC`l zDd42766U4w4wUas#>z?U&)Sx`rWh=XEUHO`s(soZf|h@Z@KcJnu#`*+d-GVcr!zml zCXr}n^4uP0d}891h!7TgMSJZ$kywRIBfhHayL9~3x`KqR6z0ugiC?^U%Fen=Kb;^h z^h8AGQf+k&-3-;$#4Lf1JTG1XEv$H6J314vE)kK$Ycay3qm|nW*4K^>P9U+@l6U?Z zAx3!q-OYQ4^{*jr_L6rD)wNik09~zEg?I#c9^H|;$jZtp;rh~AOj};zf2I>!l6PLY zxjBpR@`Ax&9QPgGQt_YprYKR-8N1UJaj$?e5!ZYR*)e=YLwb>yu;maewW zZni)t*5B*CumHNdN#42hd!xVq{za$NYukTzasvI&u?Pp`{rwFuAI~G+zt<*AmH6E& zre*uu%E3_H*3rrdMA$=$Pl!)Y;;#w+_0>OH{xQ|)pQ%E^0)Ni@|9 zU+ns;m%uNnixRwl^Iqzrxb}AmA|e?gWqDcM*XP!zDSfVuPM>T7OYX6fe|qDb@1OUU zRGUw~jQFB{VTOG1NG{32t7?B}Ocnoci`$#22glFJ4q> z;Uw1oC_{0bhoZLZ1Y})VAN^7Uu3nLJqy|Wm^tN8?5yd1dSowi=MO>IG-;tcVa7Bjb z^bccsR@l>sE?Jth23(P8reW3Uf9p>~OwM}hhYaP#D|tX!pUWT496}V}RdV|Ne-UP^ zHl5@nAga^1|GnuzAn^sX$(6JxcTc78_Yj%%RQoe{K%gOj{u-+mDsb=C z&9liQ#+sf#g9U^Qs?v!9@bqm<17{DplDBm8Y&NHpkdTkmuu6p}oJpp?j3oSQ9uspv zkV%J;Y>En=byGwHF4dBrDGOI#$(|#|a=+{Ua<()m6>-TRA22J(tX*sm9l#$ zjn_11mCU_RLB9bf*|-y@hu_<_zM?4(<}|K0dfcBKiSSuM z3841p=urDtw^N$ZU!XhzVGXAW$$&1gd;Bv%5tZh#p)!+~t>MOX^+TKTzQdsev4$1+ z&Dd$xd;s&8ZZES8l;eIwK7PE}Bl1;i7*};u&xU!9WB-Ef_)N=92lG}^&5@=sG-@q} zy|WNrHki0O;N@s6_Dp2yvQ8Wq%jg%p$f%n4+UT4}4(CDCpjY>lsVDH;^#wQ0(K*Il z`0SojlbC~fhbsS5N?3wlKa1I|*f5p1(rQHNQjnD@A zXvcV)*0>1ynT!SxFNcl+>H9z{i^8aV>94Tu)|UMKom8F21%i zy(ppDY2|$>e7h^9aZ(3833Ep9_dBEN_8HCWjbVF(70NmN6RFs@FxWLO`bDqK+Y4U8 z_*KZNy(h0JhQ;0k$={F9p5rtP_SR<@sQ^+IoAYJbWP%nfp?}p4Zz^l(d`GxR zD|g(Tev1=#xIe}ROPZ2c<|`t1E6DB?a}h9pHP1!iC?a=bF#f4YgUF)_o8|KSCkuV_ z!!XQ)BX`8myZRQFSHp8+0^rmY187tf@w7edgRYk?`Eb{l@Oopta>d;Vo7J^*4Dn;x zv(Zj^CmLA00#9M7Duv1%z2tft$SCqwwXRfvUgGY2@W&(a1qRoUN&R~{wy%*23k(b0 zQ+pJ(*u=M>`E?g4Y@~PB&~CV;e!rleWia?|j%lZhkhclaDR>q`{jOM2zJ$Ew#{VW&)QwXdR|5h8xY7b~i3?>h-hnWbYh7_4}`9 zz6jw8v}ix5h8P6+HR(oo!)(yZ#XeYWy1X!$oon5Jb`}OzE?X$#Fg$pbV|~Ygipiry z8hCg-Ev~C|jlAl<`*Mchu$=FU^uGDIXK{iY(oF-R=47Cvwv;A=xMT{tPE^KvQqAf} zk05p>0gZ`P8?P&-n884RACC7^m7Ai*6kBj>9zBoS5I=Wi0%Vn&j5D zBj9)7;R(+{_rN5pZH84EtEa<#gNmoejFhzy zZ*dVrZOv8mlxbPZFFmky@wyIaJ}`#s`AH7@lRdrg)-{u1&u!*LG-~(eqh-@v*Jctn zElmCX9J0q07?!gSe7hXJ0kzCW@87RH;z!I`;d@cw<&jMH>+p5Qq{d=dxX9N2CBzbCt5BG7skUgksZk|tceSx*Y*lhQTWo=H30?7p4wc4en5mU7vT|L^L)Vmz#cHFiQ4+lg?Z_TN^c4mkVWF!GVC~e54hEE;?0jaB4M(bX8SzZ&wh*-XJ1!wSLE=x?U#@ zA#sF!ze>l*GB_*}vXxYzv8W*1yHt$73ovW^ML&I1039-Tk<*9Z$-P(L-S01djO^D# zA3XD)uF7%QPvnO>^(M>KYM67jX}OQV!L`%;vxPG2 zOLS6(Wg2|?3q*u!dHBbKRCYg>bF$)58HSTKOS+fTq_I1e`XsZ41xK=y-HxDNWe1%Y zf4aJWtIP6E_4u5wOZEI_})U62As5He91$xvba8tol1(XXomntk(y#f+c1jElq;3BgoH7Lhi1j2{fX(m?G@i8$UP?G80?Sm+23H%{IkOHrzw~{?#Zi$Ns1Pb@eJXmS>Ybt%J@zLDN z15TNEu&1(6nrik$)9CFfSni5FvCsuHwa9pe_T$%kK6FJ>Mck@3uN*cWOL{LQ;F~Bs ztn={mG@Q6=9E}#mPw+|As7+Ao!5aM1gxz9Qyh29J&b(fh0 zJ`d(cPZ|iWrp`-xLjv^aokqf4EQOppD!Yznlx^4=r$xcviP%ZhRZ7n-)|^LLA(sKR z-U%G_8H=sG>LIl#=7KM9pYEoV3L7rJ4fUIX%VK78l!E%m;*9nV*xO%Rh!Vi)LW9um zuVSwgi}mqe$!q}HT%My~+n*9BT(icv)KV-9-K%X%YP*s2)IRs20**w8b1lB5_epQ0 zVBN}MS`Ur|GSRlw^FcNru`owRKH5JFG}sV9tif4&`@PtDVRb)4*l)ua*&K&0P}{7o z{d!=8R~#?Csh+p=X#BXO)kq=oW+{Wnx?aZshnFzMqV`y{a6C}tG+1GHjr>L)W`LtI zN--%*rtILmwV~kQ?W9w^>cMFeF!{)nc}|F(tHnVq&C*WZgF2H!CD}Q|_XhCtP~Sm*Pqi6F zN4>+N{wun{gyhIuC3iS*Or)y9p(cTD4N)7ry@)6>$0+|OP>oy_ENNQ=7V=n5?<~iN zfquQJ{kg4;ten)DAEYFxYsVj11E8fH)E7|RkB7h>HRg|3DAkHi z(~11#$^MX5a4tq$bJY2Y{_Ru3wJN)Sj{*2L=!WOdq1_aZ;C!&H^bA|HMvhGPmX83^ z5dw{M`T>thBGq-!+tfGQ&-^fXu-KP$Z%$8N|2TeV$-YETc-YMv*CO`V31)q;HCj|> z5*MDD+b~f(s*TWf;^3E}3t0~4^hEs#cs!%G$`GW9`9>f+@@I#U(^8?fTS`IRI|{$~s&~otRv;wJ+f6 zg7vIK+?SZZB4tN|{lQCgNjpMKdz&X=y9WvQv}c(yDI&5!#AlVt%fbCQeN*LTfoENoK|$)|vy<%&vFlGylSTbISNOG1zRe3Ix>tr8^h~S- zs`g^r+B9w^de>qyJ$Zg|*ICFY%z)l$TMTiO2(`;Dg)rdl1=LioB>78~O>G4wxers_ zJx|Bh(uQTgxj{-yiwqvsZIyhH)`Nx6c!`4yGKPv~qh=Z@%uSwDx*LwpCDV*T3qB9~ z?2%(jS{=**C^Q&Zz*M&z`Wbn1HZltDE25PnS%1DM{i}}_^{B1sN-ruF?BDJMTnO{p zXcw9^q4DEJ9;BN4Y={`j-NkNyYzO|?Vdp79;Dsf_w zHoK=`u9eQI-NwaJjMtd9b2Iov?MBAHCk4YKiGn}C=Fsm__V`_(*)pNZPWllcFEcNe2;fpmE8Jjd|{xZNtJUH7cjt;TmNWWwM`Cr$t5TP0VLCSI0t1j?y@ zcCn@MSktphsP+y&srhW$eqst3^g+NpS`8M@#4A}|F)qjrov%?p8b)L{$7Ig)6RRekBW|5g0r{nWUip-<{=~ zC%L%P#3J5EZ#mHk+8C6he@8z=_Nll2K~s{V#@@H1W3vaR!rcu2+*qr*pUTX0KOqZ! zI3Ha@<8sA(oA&V80QZS)NfJ7HDdSj%JQk_e>PT?V;b`U2s!h>%k(hdk#oBVZPQx{h zqF0?b=p9~!k%-4^Y-oX8q%!;Z2scuH9#QnOvAJ>p9=n43HDzj3ZzBR*-~(+pc0R&X z8esSk3|^@z^NxrJm#Lu-dXpD@iUe~U;PIhQ&#j8{>wT{mGMhCtY$I);z@uLi%-$oC zr9HoJmb3JjS2YjaMI+7D$~m*W^W?c;>x#ebzdCR}dT~qDy;%({rw(~aR!PGLQsS(x_6kHhfI4x|e#xu5$d8vtQ4ccl`T51Td z>;2}*Q#hCC$LpraGy9+doOdc4BfA$vP6 zNdyrsGIjv${^nQWS`swt+3(e}P2LlQIl0`Ax_+4Wi|G^iG_y5+MawMMsBE3C|DJ*K zILp^k@{GlZ?(K(&uidrpA#GmB3keJ1IQ0gPNycX0>f?J&ki){)=11CoU4 z;P7xOwpReF{Nb;OwZ)RhjCa`vq%7a&j!gM)p|S>@`?*?poN!++;$G`NOqu2TVIa}E zRJw@@cQx7XDsJz&ESSMJezhLrvTfIL)R*1k5gK%Q1ITqH$rY0v4$!>Qgk@}plh|WmSepd zTRxcrc)m5Bm2Xp{;U1MYSlYK#tPygtZtzQEy`I*+Y-E+HpkW1`sOZlIf( zRTZwWTl*ubd=f|+^*J#|!(DRLI_<92`sz`mU7w2>J2&xBp}AVfF2>*>{L+%?xP4uE zm0Gsddo;4wWC`Jm*;Su3@Jj4s8qldvt5ayS27LL}I~OG72JOIf&}?IdXnlH5Ic0`)4T~kuZ zED!SQ(*sb2`|EaQ$;TNcMOPkaoW^>3`gh^^i`?POvotcS9waKN=cyB66BkypCDv~% zvD7nMxU2ZzNnc|bRv1adkJ|)#0^ZTQLSgKM0Ia|4seA#E0QxSrXMp#=r~iwTfcPt{S}gxhiv-}6Bn5UT&&rw; zC?Ox|Y_qlgcxGDs6Q@kNly?86Bf0-(!M~DV?gIcmR>HAZnuD`f+C7+NU|357G^P>I_OaA1>|DRGKW0B<%?)y*t zBM*}?GD-*y3%lEtnG>R{tZX-&quz$CZfG!l`t&Icy!1JfijtC+ot<5o-pD`GSp8-0 z5;RPNIMVFjW-Gvu;Q=@I=%>4i8G&CM5l|Y&yh!>d-kCu%5M9#^x2u1vDr*;Ers4!e zX8pepDRb{)I9@e)m*Kv=1w2`byWXzJtLDS_hA5M`qh(1HB`S1WgINNc@R{$P#erhy zAG-F=`kd>C;`T%)=HF}mmzF)_Z4SrhNx!}HkD8}{A!d$L6w!=l1ux>66H?p{s5b^| zSIq1jJ-Ww=(cm#76%~yVcf?p-K>x2XMpvPiZ866$HpI2kCn|GZZ5*;6xz9c*GOU;N zGu=v3Q8#lw7OmUN!EoIEvUuVh?Kjh;q8tj(XBy^Q?B>Qfrv!HOakTPtF@qy6xprZR%)~2y_;{(#&6WxcN)(N2z zOjzpb9*KLn*PDDNOU`ss(sl@mf;8#FGV3Ie2TsxxKNEd|-bHlgH#8J=v^MPE#kl=e zsD+$bRsN*rw_#Gv1F8Mp7eIdXSDrnNH&3TCLPZl(l+<|~$;0gV!FO|+H(84Q*0CuV znUcFX*O>$__QFipytMfgnfBPo!+aMqY;D`y)g9;EX-y)VA)FGX zGbd}@ZTXHWfs^3n^oYgel)?Hq=0umKi!oWF-2gXXqiT;vr{c%@$mwYJsVN!5?L~2~ z?drHHpI-VSyN!o7_0N~aye}R9;fDqq2xc}3o|O5I6w7D$Q#91a%`#l#XF+@iZDsko z;dE0#y9_;-HqurrKA{Fm=_Pn*W8fpowC>*=+?6_?7ULM6dqH z>fPR6{MvBJhP8>KsCjl*cfG1Nb=+!-2>kI}l>i#j9a;@Um-b6%)?<>3Sf==lcwr6S zCU^ugD?Qe_z}DXoNh}Cq;D~DJ>!9@z%1BOR&v&4o9Xmik2nLYcGA=g51v_-52fLG%pC9*nQc^>WmJTHJ|;PI5J0f=iu`tTWZBJ=hJD-+U^ z*;us^2qp)#o4>9Z>Z#$MavQZWvRk(f zH4&OgzLlF&*|(8fY@)wBc6og?vp+#aq$y|_Ip>yJtF;7$T9z~aaTI6DD|ys457z&< z)JB;>3ULEueHK)FR5|l1xj31%DIzU5)}ZHBf6w=U^C0GDEila#CWQVP3m4FX&FiGH zUklMQEClX@)Ga_+#Ggoe4rT7-C=LF9k;1&}l3@!KC5oZ#%S-yKR1gF>+5nV=Z((mgDnK&7Kt90nx? z>w4Z`3+m8JC}M;O>l&!n8*FZF;v;^%0J_fWPC&7KhZBvsWisi*0NnSEnm_047Q6^^&`-^Cij!b4K2AzcCSThRd*khQ;Mzj z=!li5xsMzR&{s7M#jmf~xF_OhxXsX;c49BkEv@H=N2nA-7L@%2emH6;SEzr|IjF^A z6wdu|H*9pQije57p~wH2yLrmC75{`5Geg6?{@sPuR9gY}k)F^dtT*^^fG6T)C!9yj z);hf3*X@fyaz%yqNtx8q%bEl|zoC~^admF%ix*Z-HW%5l=~>{PzV#m=+ErTmUNtQS zGh$2EO=9e{&rd82eE|$-QXZ!f0r{5%0nA7sQ^5Epa_@`zfDK2n_Ot*;s)( zvxn{T9h&N!eaITJ!&jY`V?KW#S(y@Jny3Ezh(yG_tXI~We3E9%ZV~^%jPF+-2;4>< zIr=6Hxj0kZ!IM>_6?bVmqb@9@w);T3Ou4hdKo<^vQo%4+VzdyH}`~N zytG`z*PzL0i*ehlqvsy5bfo>Lxs73wK zof=m3ZBABUQl?M@AF$j`tme3b z(&a6(9^XaG$gSj zr0%`Aw4U9T9Oy0dxm=GF$i#?St4&(c#*UASFu)7_3NV+P#g!3 z<-4Jwp_@~21yWQ_d6&iO)~6Q=>L;ZpvY{XocWJ3V3N5Z^5HS4gNEY|Mm5jCHf=>Yc z)pZX9)RFO49q2aD=(z{ASV@4-aXW zBz?4uAl@q>v>1I;+G+;fw|_#1KLFV8x}rqo^g#hMj_JWbtF*Tks;5zI*yd1o6?$lb zTY#Wej)TD{_%NH2^g;y2ek%p{>W6^em^iS+WlTLmN;S>r7nC_(NOg&-Rt=|_R5BDr z%gMzHhv1G3Tl>0)ij1h2Ga-s@K%}Gkkh#DO(Dgq#{J*Q3lE}<;}Xt^&dR=qxp(0K!FT> zf@8cZwB15-yaB5^bk~t8dGkh|j*fw2=`ieYm8VBku`?`krMcw^+jT&}ym0=pdji|K z`ul`uC;Nk$=uZhNrJ5Qlf+ih>GtI}3YT_``q<^}OKX&`g0%Mi*!2qwMFeK^1`c@|c zU{D(1ZG=M#6nAW9L6wD9qkDSrt|uOV8}XS@wC$k+LQ6}RcHsy)$COK8@0iPde}dHi zSUORQ^&xe%3RpBLO zT;Qy(T*B=*!uB`Wl>7$cn(|D5Y1;Yw9vt~z-qWjfUT(l#Uu+WN=-5bh+L-c!wE|>w z(^AC|99rqrSwii;kj~4&SDW%f888FvB*peld1q(aJV;)*aytk-i6c4=BH>7W>>_7t zYg<6Y|Gh-Fy^IL1dMWLY^is-d_PJMlFiN;uIDiOyOA4+k*)pDdvaxV8FOKM>VS$zT$23J*TB6NJXS)Ul>bSU+M=*(7Bg2x9O7Qp?ua#;cF(-6r zPn`k4*W3W$@*zQ)C3ovH6yKY%-{+B3ot>mk7Vuc@>N=iF z;S$K)qp4u^+jMHF^yyW61Y7=z_4#>%t_yD*kJqJyObdNB36o)UMZURP(Xv}`4vdUw1OQ&2l6Lz`@$MMSgln)l-85(nf%Ywy+q~BZu%;MMWT$F8t2#3g&`dh@ zgk-K1vjlN=2>lTgl{^EPsDQ*jv;`)fn7&#_2pp zn7xsgB!X({AaGNd6&SQH{4~PMA%V3Ke#iLaYF^}+fMV0XBmI9+&F`o5(Ti%|^F^-% z&u?E?GU;Do*Ft&q-M@RfoCN6KlX(Qg|CsVhcR!9I;9o3Ao$4&YWZqCboH7(;`lwFz za`@Z?fJOe`TkFfrqf0}6XWVys4CQ#jj_@OZDO=2EZvfO`b*=6dfRJrCxRG^oh8LFM zVko2T!%7;$C3Q`fyz@%xr6#*BpflIQ2LWenLlmHYpHT9um!d)XHz@cI$6h5B@FiDu z(`B^N>i-=L-&Jr@kA?3)Q_=VZbC{4)8!HLhZNK#P>>BET@AUB>=Tamw-O50lp_*XU zMm=^dmI*j>c+5*VG(B6{oW zAx;E@=S0mDnVb$#)hlT$U1pjF( zGqhP9Y%T3>G^Xe|vD`|s$Z=v%`i%L_vXUWDV|jq=N$Kh6D}eLa)!9EzLOar?zkWtTyG~A0nVxCWrt*1H`X&cDNT?r*ARqo zF(2wtZbblzIk5btpY;^88ZDMVJHHq2=MnS*5o15FW&KI*pFl9(msmYkI49O=Jl*4o z&47X9Bq^TpvqooM>Tf~K=u)4o6PwQ}ZHUI{$WOl^A8Rp2laIiO+fJ*LChYM}?i}N# zlFswWN#1X&vp-N6JZj|V9Gyv6+ilph9;z3AMKGD9i@DTG>g3>>#LQb`GDn(AQUxsG zM>#`70!NUOgD#PsH33ZyS#}}2`Rtpb=%hZe{|^C8gGkD8LG>zjB&t1BWc@?!tQQsI zCRU+(3G?6#l>Lf{_=Q^GPzEcFZ)MA*{DImoy<}5KP{_iI3Kq;%{#(sMeQzjG&(rg% z#%<8Y1$&X@{{Dx9l3aEq08`(jK3K}PVq2CTI9yIcrK;3D+jwh@MKL-Nb@%R1J zfwVTM)+X-1t;8iB0vtjlY?hXo<`0Wi>9ERUVh(pIkGeJxW;UtQ1`sctu0m;L)f@`5 zIQMDvUhSqL2drd$Bu~>W>5>ya1+j^mzy9CcUCiG}sJ?P--ZE;~Sth%XbGTW4E zm_Tw<(UD^I3p1BZ1EFHq=JPdHNBp8PuwBW<$yA!rL!A?RAaYD9se zHLJUZt9Hf&zc~rnZeiY6CDA3oJmM+CVsfTI8X)~Vl^ri&g)ZOYkV^Z1$D;pePa>f{ zb~4_vJLz7Cw*Xb))(g38%!lO9fy?i&{)Apg88lm4_ zevTA5iN4IjIgp<_A>$L3KmjOua{8|WKn^h+J|Of=<4-@kvK^TC6>VW?1b zYuz}__x}FKlotLW1xn{e!Nf<4H)j&x*Xkhi&Vd>QLwVW2i;3@l3?pY`3C(yOHt@XH z?`EDXsF(2VqDP5uis5=EQ)I|`_vh4xRG6zd$`PQ8_P zog++wt17+Mqat9X^MNAC+$uvn+AADKg$_)}NUUV)^l?@1@HKG7S8YX!oW2`Rt{<4B zS?V>JbGn!QkaAm}tnPp&32Ff&C0s{d`H>L{IP-BRAH5s7?)>{}(Yii|@!E)#pGBw_ zLqAPLmsM5NoNQc&81``Gvabbj=C&(0?Bb#dYT%6}g^DQ;F4~NBy5!ddAK2*qNekZN)!pbpTiF07!S~BPpIp&Vk7f| zKavuJrgj#1G+wBKTVxkZ*nOM)q$8fQ64&I@HlNDNx4#hPeo~accH)!xXFRzn3_Oxy zQs=N4ctmycar0*}^br{4I(B5yQrheNg;uu-y=s8YhL0`pm0N0fm%QR98~BSzd}o$vkh!D?jtbWJp!^#62k`-Rwg#vWxxcU7>0z$Uw;T%{0sX# z^U`%9yfRAZZ>7vPIMkMOB8-K#C?ho8&7o`NQ09;HPCGCM(b%}MzPwT|zn6W4%z5fT z?n;RC;TOwfB%dB`O1zV!KS@+48dIk;*BJ?x^22p79#*cF*1ib$UAeIA_z|WXDbetK z!g~JQZ7)!(mwGCH`~FmuL9l|UZ;FnSl6POk*&*|@X5{lcujrOzm1dD{*e;c_JRMj7w@xO)4=C*VcYTd$3vaR_Ak>gFc=h1 zM6>r=TF(V(u2EO_jUn!j`+nIiN5HH4N~odZBO={#yl_1OGdc$$cXD0YvVN&|ZE5|w zs}JaCey3t+a&H%iwFuGbuv$t&7EsnKr41X1AuIJJb(ZmxbhP2~r}t#NGV5_r~6e$*Hecdc?It;xtG zD1ED7Qd&>F-;#ydL7POhNzQqlDIczCb>ASQ)#ws^It4O0O?C&|~m~me9dU|Rp=wBYAfO339 z*dym_uQEn8U@l1#*<2-}p(Uw=q+@)HGJ3g%YD=mT)7wt%ObS6j*UgVwpiltRk3V30 z(R^)>@zubTS+SP{F;?&C-dS;(e1(iaAG363bk*_jg&2K`5%zeQqmL2Rc87@JM(Rp; z?}X<^AGZ~3olF7XVjU=lJM2XP+|SrCW=$-KQJOw(=Etn%vp~Kx!+|@`Z6XlZ| z*F@_ow`Sv!XKR+XYYdVMz>oQO++aKd-D{BrOcF1_{2|#n=wHtf=?8j(+QW4!o$mvv zFQ6@F?g_}Bfx6R$1B%+fpGQ4v!If>Qz4gkaI>Qz^8*lboph8R~LZx@LP>KCKmS;ue z=sRVO5igmExuO9`BZmpnS;xzViLur`Wsd68?{?h@S%|Zf9pq`vU%*)qy2>s`yEp}@ zJRu(@N*&df4x3en=dgynEm;RMvr9$K>_G(&2j|lWZxBTJ$WF&70eM$mEf;N(Gfs`2 zmt{V*JGgG=4>(D&$rn>Ki%l{-T{@2s9`_FBx0Dp&_ zVzJ-p4Y!q_vo+S|dUzb6Pj=l5^muYTw*P>RQfjePA~D5@%d`UMB=T76Q=`du3IR85 ztkQU_vK8m@&;vH&peZSdYV?q?bxe)4s+e|bktgHF8q(r@**d*`#|sdGEMG{uR2TRk znUBAkGOCm#f`s3r*jI;9=^}2-Ka(i*$*cWzwUpBn*h5k2-ir4qh4_r6qjWK02|K-B z`GkKjVN@%6{d6goFY>3-R@^MwB1oiQ?RuIZZn=>Y_u8iaU7Ei3zyB8ids|FW9ogrY zJt`oPRA?tdIb8j^m_oYLrFVh>r;=z-Q&w5A-l|y0v$^P*>0wp~SX0}2m7?x6G^Y0I zpe&f}Sg%mEfjWRGw!zfshl#pM(q*K})9pRu&346f7+soaaPXf}S1XC=O$9Q;uM3dF7hE0p5IyWNXR4X{3a^ah3 zp+uC@+E<5xhK4-XQU@~x?;CR)n+_4dGUf#WRhQ_*2^!hiS8GkE>-=A0`>&>as?1lL zn3@stplOG)e#OL(h>?tv`!YW z*7vMFFXZwxFNsRs$1o8nNxWHX^C0}f8IgiYdd`g{SV*Y?-hWDjQ6pAq*Ggx4ZwN7d zYg3QG1b(2vF(T$29e6+ILi{rpo!q3BKdNm0IE;)TiCx`<^PzNKkSPka*D#iRedCtL zt0Xlj`MDLoMN ziP8ddq(GPFQ

^33J*tcIHE4Y)|K!4WVMw8-3%Sl7l~mkNe?sme+}rk{Q-9KuOl( z{kB#99XAfHX{&2%0p&td4zHy>KQESi4(&dFhI;-gq~rJgDRi)04R)ICyr=dXpAvA{_!Gv?M?%@5XW-J@WqeuJ`)>9gey;d#zbB_uO;O zEZjNUx`21O+lo_tjjr|afHKPsHFH7kx5&{mJSEu5Bnqc6W zaNmPYB4@Jucx-5EO`h)(vw z_ieZ&rZ=%b60>m_JL7GS`|4+aQ+Lao=147Q&QeID2RJnC%0*|G->_E`U2j8;!U4m* z`4bfX7pGSMM8TRlYbQo$rFFqMYqsv?%??=je3y}jwk2|a`CwLTBHhQKDi<=d>U4Pp z1<+-LCOKRO5AsPYKa$eh?WqjM(%q|jTe_yTySzidbNDXoZfj(G zX(aTm*5%>-Nzz}wd}*FownIO>I)wCz8p^!DFNU|Uw({~Owko^ndBAp_g`HK(&O_F& zeG2v#5>-N*R5&d9DwbIljkg=!YhwVqbe|Q<6BwL3F*gqF??m2!n5j#+AAUgl1GGQD z(v22D7?MnYV!^Qg@)zqEL@A^VR_OFGYx?BUwYoDtZQ|CXxsgvEd5P*Ry z_rF^$mUQf=+O)$QA4Pa0N;>~93IKaIzfgAR>ixZFF(uBD*vuqRHeBOmIZRu!SY>BH z6k%*j_YVKmQBX18c9#mTSzh7c{(0El`9<;=&M!OH&kVER?VVih6tqq}_YQDYq)_B5 z)Zn)9vFsP1H&g^KUUIIG5w`T`;)#P_{TR2G9ySt`Q5Km=t73YnHqlLjSiswJ;MP8M zk15Vk(px~2iImIAa%`J*^gKUxBHw(YcxR_UPQq;Gox5824PRedMFkH)U7%#|av*xH zSy>^&QOzP9W-^HN^WrpzEi!D5cJr}~SeOS6(C+7J;m=NHt6r49OGY<^4SGtVwr`lO z!Tc19I{=zayJ%od3h*NWyvpjuKCyWK>y^I;lIO4c^_;MM11TSz?Uj)ZZGU9ua^G{O zn8+Cu4M?6!A;Y2~P*_b{S?<|{EG%-aBxV=$uf||eLVF0oB=Kfv_2nCzY7jPQGW|-4 zb~*BzR3p_MI|eXcPmIVndG1HVWvJl8LFte7&Wf zJ%)WSXKxT_XSezYu8tt zIJqwJH)DAv%qJ`D2(*%x*WwsbP^RdrY)=qXP$|SwNqvc~i^{Qv2h;Z8Odctt9%vnx zmq4?67FLCmOGbHny`=IzDpXFxEh+CX^j0%k+72~lmG&8^BJ-4N5m&TrnyY6lw#RKr z*qpDtMzP6!oUSv2esQ6Ar{1e3qkX)Up=jeWQ!pn%1S7aQV2rD0RqQ6X+RA_z; z-mLgVnhonQ1ZZk#+|tw2%W`(Kdtz|uLPTmRr|KK)?9h|neC_ir7Zy9EnEhsIE^$x$ z+J{&;;aa7b5i_-~-T*&l-*&<^5}1G=FTI&gd>d|&IYdZ&4K!Q5J<+E0oh-{c33(RK zH)A)3CSsmOt-XL`&0X=aG^|l<5bO8pEnHMd9$mi1lPs^-Oyhd_si=DO^^B}FRFSTd zWF#>qQ}h_1#=QvNytlhOaD;qf=H5Hy%F%Qf_sh~dsmWVH3@yUIwOa(JLEZN;k|aT>u`ARITv}f2`iz5F=R1E>hW|OmCfm) zukvrUS9Z4yUyS=^OCIy}><19{{EE)5w=GIAZiC)i+vWQua^ zNY$4|@4tqZV@WZtdpEYSrd*N4Aj^j{`gVLc?Q=l)M)UVfsKx zz=h`p9$rMeQ-q^yuqo?ArF%)lFd13#ZVUw@d2|N*2O+`-uOL9iw!P$=z3aycs{J1+ z4G_h&YvnuNYT)B@n)TZ`luFwE|6$4CEXT9w#tKHY&WBZ7tSVlV?ovd6VNFwSJck8l z9E`g$rB$EhhhfGm?$%|4qSiay?=JCBzrMoNp|Dog!g%E)W;Keh_T1L`I+l5TvC5KA z&blYTs7<`)q>m8>BX1j-LkzSLMMo*>0-;2e3p@S|7?nfEc>s#*Mi#fA+$SmKlUV|H z<(dghm$J?~$bFPzmdX-5FW2&&0&|f2KwtuXzAM)v#e6C2wTawK!kuE|)9Rt1VUsl; zbmOf}@=K@gZj29H^3@{yj7n8Xlyz}u>#Z+AHpyU?^@_|ukTv}JHi;)s0xQHQyCiUn z3+?hX0>UtuReq1gSCf9fs6j!^Ciw1$EC}t@;BV;LE~4FZsdA>>%YalwvBk!Uz&1`! zD6im^->T9@MPj1+o_Fu`UiLC9m)jGQRLDuuKKdPw{Q?i5BZnUyYA{OXaP8^UI_qRp zhp_b5e!(zp#4wABW@#+&U}26|_VUe?8_4=p%ysMwka@gWpZp5h7ZWF%aoxIzW;F)T z>j?LmJitZMjtjXOY)6fvX*U*k_=H}1le@=zEAp}V`avKodZ3LeZ&k(hckKFay7tVN z0zksF9YHh`Bn}4Z-chP|Dqe{G%ySQgeAI$Z!m+ z5hj?8`mPq2QbR+l+rGpCC=E`jD(7PKvH7Kg-*A;3AhK83#xf2!1D^~F^WsxY*-C|rvc}jWT7!5fw3toB6o9u498a7(!9`0=j{U<5m zG{z-!GXQpbJ6yQ?oes3DYVu~*mpjd^F%YY27UXVe0BZ_367sr^_#?!;x>Ha~aQ z5Rhk7luNWc*msNU{(%nmT`#ATCU{AIBKR)yx3r1ipGZlJcB zEegmvs_3PD+1#IYcub3{r!5*IUh8{NNz}k0Ahy)?>bqLWJV*F6)X?Q7`j!P#n}Q!% z&xD2gu6ZCkp$JBE5w_0`!Q)R3_<~H|eGPgRxuGs5-6a3434KzSjJHdM3(|+9WGi{19X{pt?^kymi{R7hl zFM1{qk4v4)VhM-o^T?OLFz)y#z}~ET6;b#}OrSIC@3WkFUjeb%b~e&bZ3hGdI=s_R~9i)Un6!I zk1oyRLJoFxq}bBdo(U1Bw1C&k9N(uabMGA4K`5p9>i{9)yC*54dl{<6_XYV@F>-1UR8c#p8Aa!1m3y1#ANM+oU4FV}iAzVg7d4bLg-fe74E-y_~*$ z4}1~EU#vzBO1=V=HoTuR?DyFe3gAQ?b0Yeg6B*0F+H=llJLGa6y?2lC?dc&i0vsO% zE#i#OmqpdI%e#8C14$*&$8yXI(DvNn%h>-IV#U6-!N6k4c?VNErKXyLPCj_=`0O<9 z6>*iFF&S;+>cgn5G)2*_=v(L$pXc)}*Tg9T-ER$Pe%Y@Z*YYCCcbD@_p11Pl{tAGPsSbfrLe-0s? z(#xh6YGCG&Fm~3x&Vk_uK(R&w!!nhaIuAkj(SNa>1LFEEsG%1(n-waJk^uq>X!Oe8 zuuScl{u!oJh6@dwkB}TL+~Vpo-Sfz?63v(Q@yOio-0n^JPf2@MwtKkrym|LXH%)p* zPi2cH0BXLf#GdY+JmzVGema%t**{;k*z)2NO4jtB1MqBSp!FJ(6>@YRfAoRI$!&mk z`bDc?VFd*4KNEvme!D|iCOZt4c+ZK$R-1^YPk8ZN2j|_|RngRLro}x?G$EF?=P{n# zBFXIa1-;%oVZAAGa$$d)`z@At6ys4TEf8WtW?>--pQ>I>AAP0hZx~O z)M9*sda7PN#LQNItoKBAp)+kj*|oO-F_p~({MH6pFFN+y1BOc@bH_w7o9E{tnEJ#)rdHpPSI!uweM$DjOYJ8o_bS?`yCnrd)F}vp=itPT()L>%&v)6| zbI=1QSwCuZR_rm-MBLZ%iI3X?ZASKWb;0`pG?-5+mAQj_rH8p+qzDX%O*-(_)wCmp zd!IeM!}>!)im)Gj%@|n*w>@)=bgS)r#gx-3Rz_-J;^<(Sw)ccQ(vKS`O-o&*(b4W8 zHasKWDJHTqAQ3z!MivVSm-~S_+>2y&OkL*}G=jFj5q-r?EYqdQ=Z&OHL1A^jK;xDe zPfoBN9JIFAERXh3>--!4z|$zb8oXb$r;!LviczCRwixG&RrDU8s~P)xr}R3cpD6>z zHA7KU&WN`3=jw8??KJXpb7GJ=u^CrmN4X7ErQJpNCY6RCpwt!veCk}N>^_{uF+X6& zS;`rSs9JOcF*C4MRu2*^;R9c&8e;ML^danvD5Um-B}}~w!(LM7%DX!}ZOqeihM@T{ z(Pl{=IsvqJT`2<@QxTMt$=R@rM1%&=u(|&Dh0P)YZ`apa*Rw4#EmsEg6|b@gcN5zY zz0y1?K0YKt?vm;f(cOBL_Kgj0Ip6iP;!R>VBOf~d{R3CIZ39Qt{9B$ECkvz4JU$WF zq{rt&9Xk82KHo3&=4;nymS39lLjUB_LtK7v=|i9)gx-hsC+Rr*SuuL7o9emVBRl|A9IoqX14x2^S3@2?%*N~AZ(khz*-u~bye2toB z%0>y=$0M|);N0Sdyy|}B3s()L^pcZpzL7arE~*v_gKRhjO-jFa0hiw{5(e0O%;hac zMR)(qRlw$FguRCUJzK5;^2~Ke##i}^anvWFIYh(zsw(tvr|nDk#GeSn5r+0R;Kft7 zfRpw4kR&jHDEag*wk1X`|I^!?v#&{Eep}J%Y_gv3(E+Yy`uA7T)znDP9B_MTp|pVW zo@C7wNo3gL^uqXn=&|xNM&381Wbu=P?JUqH=<**%ucNB9uvVqcZ1WM)A00tk78lVq zJLX5%w4X#A-a?72FJbT^->e_tg6h+xIJ=EPh0UZJhlYG|qK0eVD_jJZ^{(|QE%Z%C zRtPwhr_AQ|@t`Fye|i}w)Qa=-*GGd2TS@Ikle zCFO2%u(D>+SB#7w*%Wi!z2UrcIAAxa;BsBzwXiA;*Sw9W64<|*w&?=PFE8!8(b4gz z38``H2H|bLGk-D?D=(rwcCI4LJ@0hL`Vuy1MSwiUKoX3|U_`Y8%^I zO#0PKF8k~!T8PL1ou%q@EFVZ%0s?!c$+9+Yh-95_ejf4Q`_>{wn^q*;cXSs-zP?dF z-(3MA@kV*Y7fHEcPHn2u)Ai5U1dEu@rNDQ1RmKOG4^dES+~O*PZ(0SBW2IUbQ5Irq z;b&twhP@N}xF_FmKg}@M4bSpf`GA(QHY<0DG#R76X>vnAtgh6e0J%e4cQaSi+$<@P zV8f$)i9@EtWnv}Ea`LZ>T`@|I0d-k+l7dfw#G~g*OPf{ zKNg<}Bxwzft|W=ZlQebwtt%z)3B@&wCSXZ?T;5!ZyBb=|+Gp6KYW5aB0nB+?l+jti zeCQthQ4#0RfXEv@ZOIRW&dek4F_`T_remR3d2m_K{15k+fySJ)MDyK|<};HM%;8M} zen!OD`b#RC_n29mgQfKuK8h7cZmx=NF=lFhc@>v`=gmDE^~R=WyGl4_OIdFCEqq)E zt>r{9)2TdC>-zEpH2E+~Hfo44w1by$%zp}H>FWl3Ro-pj-6`8{_VPaeCeu z%FjD~nntLNr(g7+wZkN00KdGCo9Gf9it5UsIo*=>sh^pZsI!bG@|FxaI^t$Y#KEN$2AkZa6tjLnQGr$mOqyN|CZK_eAPHxV}NH-xfb zqkSGzb9iOZ07;Ueg#Cl-DFM?08$CWUiEUefRuUFllg7Ul*?%!PEui`mPc3LLc*~7h zjxqD-d%7IHCVvm8X{S-*w9lk9D34qo4KUS8Nd<65nXyhAf9bscj~h||A!XnIIi zVydqlk#7I>{5-^J{BnXvyLP|3^n{80%03)eG(3Ag*b8!J*|?yREiQp&$yIKgW(Od9PkJG0mB3qsRS zW?s?Gab=j=23b&fK_Ces>%Bc+eDix?&TomULuwTyv#fc2DG_Li*P>}9u4?{fekLPa ziBgWFatQ{_>tQEMd0nQ)GS{s*}BVBr8)TkKH+7xb&&7J8Zd24 z-Q>{@a>iws1e>115q_q!tgRQRw;m__xCc ztzO9JJQ@IuyV z`?^mthi7Nl!fJ9Ws6+ko3wkzJ#u$yRPlnnAdy@P`zDcb@0_{qgdU^V%sYgZ~gaH#0 zpieK5)z>hpuiWnw(oec!i^4D3BTRAEIIHrch9Krh0Lvy<;c-P}2R(9NB65u$NeF} z>Lt8HokPRb`6cP|Y(n6R^1LSpPzEya9 zmX={FnQLyg7-Q&Ft?!`5_Yk5ndYQtfeW7lOvKm)|d#wV^+6pUp(PXpHNd?q+$C(?> zN>4Z>ASPKZO8KwFO9H=M+9TisiMXZqiQav1y$b6<<;SCG^49i}@k;FqZPbOZ3@-%< za{Gh0#Y$ZpjX0=1j{Y9xHU~yFmUgZzyjZ6EWG6rX6ayrbCb9qi_}>d!&vn?2x0bd8 za?{AWN6E;hHcAAK{+xI~THr7SD?z5MT5#H2Cw4sGU3U#d)PVg}S%7p4-VI!|0Zt@^ zmh97KKnn&@P3w47lbyP?m#{I93-6_$(Jh&2PV;sw0rVNFpg_>}vG>8Z_sJB zdcm30@S=%(>(*ldwh?XC}v>V&sIperP87uW=kYpdhl8dLAB@i*;>=zZ4M|B&4=3#wJ;t!H zasE~EQCm`a>qi;F4C7IRsI6yWutOO^OT)45+iAd}PbC67`g9sPmGf8fYkBZsy0A=- zhxssOMKg6~BY zPs?AscBKJPEce|OwE$8it~qpC{I7LNE2Z9YXefkvC6_KFoVz58s>+U4ykv6OI$1bg zUOx9l?}{|rZCw`?eQ{W~U1aL6s88tjkl3?AlT86CLe+dPk5^_*e=h1;f6ZdO1hBpN z!1fl`5^n!3H9CcI05E4+yin4dhYGCHVXt<$XH@e@yGd(d z$Wy&5=f>{n;-jI9~UR3yL5xjOVQHyuDq=R~nRcFu%+taBN z@FY<&bw>TR)J0u4B}GNEy=Y|tyrI@=cAt8|A^vYNcbq<5wQYHrn9+TCtMaqE#7X(K z(;`tc9=2x8jdD_RQc*~-%4V`q9+S-Sf{#A#T4sV;zJUFk)@Bh)rGxQnK9N-OFHz5C z0g-YH}hz^UGMsFfUszEeSrESIT}F^)EOs$W5jzIjM}9l^}dQT zb{tn?OG5=#(=I>;1>kSs4;JNTydtCOG;49CbN_r-SvHviG#&0q$lv0vsq=b)#h2dB zQuZ;|P|a-9hh@p>*2%3^xnP;(EmL!Z!!T91SV5e79t3m^SQClyyZ8PIU;Jhig~gZH zK6kvHOV7=fCX8M>^^VUfrbr3CimWCOA0*r2SPKUIcqN3j3heyyMh*o;r}JumZ(Nsrh4 z{>29i0mlHRVCB+N{x->e3~)?;;#3VCF7v^7VM>C-#X59H3d)x-B-yHTHoc-++>a=) zn=gSkc&gO8+PN?}@cqiBdQG5%Iqt~z-_})s;GmtQQr0(r-kIz98(O6UEPGz?A`sW9 zuC>Ge^IE`8t!NwyPx!p4#Lrc?Hl!!km*LMoUYzUnu`$)jdS}}<`~3~qxSs73gaScq z6bvqogYkMX!I`%P7|r{Y%(Ix^D+MGpm1htEN8p-fR<+7LyE^vZ`%|`=xZWVaT26mM zU~4hUmIkN7_ZHF%XxAH(Kiu$n81s9eT0q-LCqA6AB5l2ENCQ}(hAvR z&2#T2s3L2$yB)$RY+f|wXhXXDoFA@cmMxsLullTY(5%)lUEYSkqhOz^gUewQK}7 zxRXXnP47*~aVR+B(U#|RV1dSP_Gq`!E0yzNb-eJj?Szk-g-$Q|QrB(iHR49@56`6E z@92{aWmUehhl~E)JIkhno@OQs!6vw6C58@iZ-}nJFmlXEo?H1e|EY@^u5EIs5jL*} zCpn~sEi^G*KmPqiN}uNJU0`-^@pMr@B*|+r!Z^=+B^nq*ZEr$u3!g$4259e0*6nz2 z^fP0k@(W$wePfjpi}UuX<7E^Ei?VjqXvCsX!W>_{<|N4&KRj4-;_)352dyr4YItNvJ z^G_EJ&#J~rxw(qZmz8g8WAHEQc757>XN!rC8;7KDYVpyHhnVl7o{G*}6<6t0RBlwt z`OH?7?Y)0qd4;FWm!&&4t!eC=-$>m<{elG6PIs@!R;;o} zr*fI8Qj)AsdKv*r?j+`OnW4sg9Pb^?d zEXe(M-%jc&K4Z8KLr1k)RpNR-F;P*MwiXd;{e9u$Kpk*jlre8o%0SMwkau!JZ#Y(1 z!RF`tx&=!Lt5m|yD%)>9)ig5F0_2DGp>R zhfnZ?ckaRT|7^xNigsg}45yEu%1y)96X>))eoOCs!EVfoe=ZiExSTms<1Js_n1}dQ zoAOf-G07Ey0zq?D*ZT@F(NB#EB1#-}qw017I4gJ`J3FJ~?(^y@*#&HCk%o&QFWL_2 zMzlQF@Y%>9xDyB!jZZz4TKiLzlWV1>OH*pgof_sBp0yyMT&=rVeQ@OQDuo1lUHxT_m2z9?*BWqfrcf&f z-Olz+At`{3`%cYOUV^XR%fw&#;?xQ0(cS70jO_WE`~Xqv)WI1taOW=73}3;lk5rlO zd-|1B7Ym*zn^fH*`nimW+ogd=MVR66fKDrSFDEmnJ$hp?>;!4!NI%(nYke7ck%pmn z*B38u7_n0qu)LaS)!w!q93nsJAJb-4Uy-bE&OnMge@6y0#O+~wo9mOH!{oO})n#X? zgRbs)>$ZXWHzi(cSPZ|{QSxiO09@5$RB^p*?hN9~gNcsK2MP#f*t-*l7Z(@BZQ4$$ z(RJa$G~{kXU(b~vMs8x6WD ze8a~rw_fe2Hu-G83X2v{l+eIGGO5@OQI2G&CYg~kevlhcr)|UsGb_$U7&PM5vz;-L zD-;QrMnfQ`Sgsch7Ay(l6sA$gT)rkw$xGx+O-gY`>}l%&dNATp<7>{PPJ;2n#wt< ztxHYJl;3=%UQ%5N;=9&LLA?it-m$~wGaY<9>7&28 zqdPNdC%#Jcvi$+iYRA}>|HeZ8dlboeQa+R@*!>5+kHIBZgRl_ZYzte4o?@dQ>|Nd$ z$)c-b=0Xw`ZIKL%Kx|?Y1i!q#T~kV!s^v{wMEMjS{|*KR4^K+z;iI!}^ogz>FV^8E z_b?QiFsf}<35iObUfvBa6*lA52Ad0eqkXc(qc534}P(Gm>f z^Ta)TFwWx$oB4=p0K_fEqxsyk{;E-t1CI5H^KKKBEu-*EMQ+=z93n4>=B7HCm@+=WH?+MMx%y8`oMv9@#z0Gs_*3NaQfo7EW8wxwuWN*kl z{|7Lw8zWC%%F&}Gcp%lZ+g3hxM>a+HE1AD3>bqAs>FLIkTGLkIMn054>+JNlGdb57 zasUSEsd8msM=|Pv-`&d7?I9%I?)u%9(DOI^hN{<}oU~!9{Svo{KZA*X{P3_9IYnSS z_E;+?#NKjGQZ>Z`v>iLzF_}ot_aN%-%$4b`c-8zxe84}jcDc*w z9798;he&UdYZI2)JW)?=njODcP;Gt3U;xTfx9p-KWIX!vH*E&Ge{hTV&ifeVt!*k+ ztE?teXDxB0R2TL2$7Y;50^p&bR~?uBYg8bvd;kwYfg~G;OW%~T`FsnCqq1l40XWnt zkJ6D)B_L7F7Q@Hh-J=aamRvL|atRBdl*^5ODJI|}G~&r2QgPgyXXlp;BiE@5j7$Nj z`pthV9nxKF`{eWIE4|u>6EYr0No#&;beO6xOy%ad8RMq$svx_KeY<=vS98|8u8WNb zq#IE_g{{&h%&6tzJ&%m#QaKY&sSkcVY(o7S>jR>Z+ySD8)%vfu24^tM z z6P5aL+f4Vx=SHaNJ_zseI$%i)mX=v8?fvca*hkK&;uGH?ZZ2 zZTkunN$?n2Q>yOz(Xt4-w8wEySAVMfFUP6JMIqw)=JZmt$f;wpj_FNC;HErbor>7E zbK>^v>Tusn@XcWEqfLgFR3Pd{RH-xc**Xeiq{IRY3_0rfEF6(jRwa_5{-9~yszK#b zg#a&_qMP_gdL!|{k18Li=CiR4F!QpaR_dljw#%Y4VL+Be{E>_D(b)o%v+gFcTy)B{|QxW}4)@vCij z$FwIcaTjhX>h>qye(CjX(G~ZSAro06-Tpj0$sNSfFB}!itT_Q3{}2??zSu-G2X>Y1 ziQ;fpO*?kf=z3f)LDnL!8R_jXWd?una2Xmh`yJ?jDw(HwQkM zPagC$N8t=Ir-(>Tj>g5xgVZ{Uk3ge^M1;Ua9iw$tN!2DtKP2n zxH*6=J3lJ7;doO58X4XnUo6S3AD1&I(?dOHs}9g{-U}BsMO@7VLVNIWOGxsC+eM!& zP!g5%&3Ae-Hn;JgE5gO%35lVYVi`0uxXX0IRP6^<76_6BM8;xItJ|dhQ$dK%2(;;* ze^dkzuyKV@2G(SOvClZPky?PrYHmPc)vfjd4{cs(w)b!f&!Snt)_Hm`p+qUF+G}B$ zPdtCH{>MwV+)5i3bd5R{fkJ`^)SbfKLTNjQ-BF`9>g6-@9WP^{m%h5o z;8?_ch^7q<6+Se}?K*7ne3$XLjo$~w!p{M7+h7MVw?!HL%rMhxX!i26+^UXCDg?Ce ziXapAc?;0``9h1>;Z71XU{3K374}CZX!Y+L00pfb&T@)vnjD;B=;-?)Uy8^8mO^-J z;LpeMo4`Mr>Bn*k49*K=F_S92O~aKcJ+&@umI|}`Trt%VjxqMu)l;;5h?Q!+z{KG^ ziM>)&JOb6|1E^m!HuMkH8ECgk;eyK690x3FK>Eo7A%HNZ?U-jQH1?ds z#y){CL~0g#=IYh0Zb?x2+1U()vV*-dE=>pjXUxEVf$R_3Nte@3-^&l4$%V=_XVF^Q z`y5|7l7vv#FL6*Jx%hn{6g%iAmqK{M@;+=Ppl*vrf;=$lcc?N?grPltk_!hItCOW;cg!;0ZZ;NU*A;oa*?5c-^Lo z{V8HzUU;IrYNnK7UX0t9qZ0Obem^GE2~qj5Wc!C}-s)x*2@7Reka+q#Ky~B60v%Jo zQmS7T=gyHKI#37w_cA7MirA^wNbe=iRr{Sk>@hUtCGC4 zp6OgcjFc8`PMk*|?OwO#2RlN<&5}ZPR?IL-H;n|xwF7uu4a{$j#{UKQf@;XkZd?;wS@$Ywz{{RK6iu0G!4 znH!P1Ta^O!E*fRj+U4&7)XS%+xFH{jGscvBRT4>vn#tsR_PJ{FtS&jJYSBk2o#eK8 z?os3CLiwXt@`nhf=uB0?Jirna$@Ix)Jn8Vw^h_u+s*BgTQ}f5dY8Ze5Ff>%qP7Csr zP5eJVod@mh``eNOn^QwS%Nb*8Bvl#H%b5f#o0aMz=cE#7G09Fo?e(1X{m>P~Rf>lK z-Jm*C67qBAuYNSbkPwF|W|d_!uBKEpxZ zxheQ7k+eE|3&HyweDl>ddK&xt>n$T_TE-bWZZRiq#sqwY__&0|h+WtGX85()XcQo= zf(w{8B)q*b)<)agS{kcP0UmKq1NofP@mh7Ojy&R(1>Os{M6%Rgk%5)7iRry#~ zmg}%%Y;eCHYQfW)Eggki5_q#69(yYQyp}{z=+W}69IctypQTYlPlH4m3#hitHH$R|$5>|JZzBjJ58ZrMn)`qK`Ik6adZlvkC~t9Ouoxsp+6 z2cQ-{H~hJG5^v8jokf(2htMYwI)L$sNXA4_4&Gd8uLQ;u3v0W2T$Y66N!}_&&%Qfd zPy*0%C025#W9m;dV?uv{X7qajS8Gm<9&u|5Tr3BdlqdMdACsma0)D`6V#jKU+=oFy zY(_XZulxUFnsp*Hwt6oSuw{{uT7e`RrCC&z)!jM1Ad%_E{_{M7>Q%W~-63b+oYeNV zpdtj6U;~=LTh006Hcrl4lwe=$D20vB%81)9L@OuCJJlzWa`PdhydG)Rgg3>G!(th} zSFYoblRBUoeHy6KY2_-n+aWA;f{BKo{*6f2`O0iVvJUfBK|E?j)Fsra^e z`O`B^+Y7VaVQO1{GTaqi=xJ0%D@iK?_SFa}to@=+RM&r(ub9xs(EpX?|0BP>qG%Bo z*N*$$NdZ~t<6~XQA5-hJtcGvyQO~Fz$xr4~vzuL0k1{!V?dmN!t44ZCQ?}Z7y~6TF zR-f)wd^-?=*B&)hchR)T&FAYrxED$L9!ns}UhDuy*Ra`%DHn`Wf)d6^OSry(4EPxgpy*$1C{aW5bm z$VQ=MzeYgW^)vo||8P}Zu6E8bwxqf_y7NLZLwg9MZn}UEbMEA8#(a@N!ej-fxYTr( z6e7X4z0>mXc9(SzsU=eGQUH=@KU7iZ_d4OSS4l{O;c3wu^T2Y=7!fl&Ej@qAi9oy5 z-7&fI82+o(1|1o$ls4Un4e-`$2z+-_W1Lzs-#Pzgz;fRD7qH>3z0c0uz7=xNQ|*iB zt)A@et%Ngw7csUORV*dLYMrO+3-Pm4f0&~{4^FX&(!Pw9@PLBtHQFh!R_Ce zB4gDjmT6|Ph%4zm;+^GHQ;jjvG1G+=G$UoAzCJ%|h7fg>h9xo{U};Ns)@IM0aO~0A z1dwmPxb82j0P#`+J2Of*@9GOP$Y{QKaf8;}+$J$O0(yv5yD)CHsN#a2fct&u-4Au1 z6VrYQB&na!?AIbkzXs*d>uD~_jm*^SeDY9`7?G*rehtBtxD;%XJ5I4}p%^J%nq9OE zxR|!RN0dX0kL^`UfjG?{7zm4S;SI(2ls-x>5L%7}SnA@dadWc^l4TEl6Z=z9{X+#% zfSevMqjPKR7ZDdyP!SXooSKU3Z|y^2T%2=t<-*GS!%&0AW1!pdTl{RHEw5CcZkFXk zV-@16>)}*%Ey;oNogjcTqcwJNpkGQE3ylZ{$Z4Q%YDn{-Ga60)hEjXdI=!8EkVpKD zwBSrA?p3Wa_#Hs|_7^MPKR@3r@`868IXZ=fV?^%+8trXetL>V*E*b_X5N> z>Nm-$Tri=~CDNfs2DjGJru_7Y=5RCfO#_K;Q_{4VpA|0Tu$A%E(6{OV{IG7eUYSag zxXr@lWj0qQmj4HNsw;ghU8!ibji09Q-LG3AD}37_`u3UAF=qWf zFLkSS8y_T3Z23w==p4;8x!=J#?edM*=HUw~f48*V>X<#3vRCc>APKZHkZeK_H> zCd0ef+B}VwO^pannJ)|Fl+VfHTYj1{^O0(vsiBvvwm&M>L|Oj+M7oh?8>Sa^?TX|* zFv9$?vK_ zZvsl!giG5|Huj}X0o$zoRZk5AdbSiCX!=$aQy>TaB$wgmS-O~{*_QeN=+%?TmhL)# zA~-RyW{B*4gawblP@P;hYQWNnQSTf{6RE zE_cXu5ESrns_9cwZu+}NDt=u#YO7Aq2!StuGSkFV+R z-G1DOVF4~sST2{JJYyJW5wylpyz)UU-+4tbMT-AlC-VavL>{_eo9@VEQ8HcT12kQq zEkZF8OJMxpAYpPF4xfQ^Fg1Iw2Vy=7!C5$(G@91UE1I}D6-cHS#_6%}`L|K;Fz&Xc z94PNhspaU6!k1b8>SKSdxu;xrRj$eD>>CXrffLm4Egpki96;0uV6!7v*15xt=SQ~X z>TRbbO&LeUe9V!J^By06`S729>?+r{j_cm3VYKtEG8x7-LzP*uhdrNi|g*iPpekU_QgxfwQ@{bRG;CepRc1Amo4mn90!FSYi7wugWhDuc5`(7Kq3W z;LxH7$l$`8#7nNK&H8U!rje+H%~ksO_D60EHs-D9 zM;7ysai|9k!=|TW{+*I`L>5j#-^(Z~C3^6W45=v!G24WXDw4sc#VWWdFW-c2v?YabP=FW?3n1`ka;CG{PFc-S+5y zPvT;*T{0Vq7tm^+`6sIRE!{6Brv*^bKz&AC3;sw9pI-+wO?{+rl2y9v!gIP3)y!$_ z9-a>mEEN!zHK-{v)b5)RGsaONOSwF3{%TlGLdwK3!cRFhO z{=s?yAx&ei8L=5Hr}GD0@ucbpZR&Z`Cm!oFU9A01uCpDlN>!J*&Suy~{z8NnDh}nMyaj*#MS@8biopjz~3y>e*;3s@7nK z9Fu(tV{yh7yB0&^rQ9)-T3H z-H!hH6~BKck`hLkEX%C1>G#t@Y!cn6xUnxqx|o5V-#-IsajMAh$kB%mZa zKC7#^R~Lv;!LxqjOw;mrXlHDye)MY~AL#TRX&i)Tr&$A7|^@Cg4h>- zjyHU+4gvrRbrHY^dvg3bVu!fXFgk#o2*?N60L}_n&j{B8Pycw0I7?TacRn9y4io)% ziVt}UGRGlExfMpO{KF=jZi9kWJHfog&Tjz(zWC*$J znCW*be-`T{VBDISQp5Z$;Ef3&{Yp)=8Ou7n#JX_))DQI-oay*=na&p&x+xy_;3OM+ zpi@+=o!nsZdxijlQ};U^Hz`w3&mC3@6qPYQ|2ir&(|NP8u0I@Ts={w?-vd|7-9z4|MyWLVF z|H(W~3P`rFj~#$V9fpX8{9-B(az&IKkiwQ^-c$P>=<^?fE9lT>O}Qiiy-a2HsX+Z} zloRX~5Q-FXpuGg7Rvhn9ke?;hWBf-crhNp$$n_>`#{nT8BR$6-)+kOXYgOd>o$jc` zRP{dj&UT2BTc;h@28WA&mZzx%(lFP0Tx%-pXc`s7sC?)y$36u{^f8{Q`k(6nM1@T> zBPI(t{XXTIp5CY6?FBjeK?&8n?geGGtts)sNyR#BVu{W%$oq_0tser-H?PIfdA>GL zBz%Aaz}R- zdr3BTk4#2t=Zt5K+=(qM9NRLt86S`{DJ#;vJ4$pa{$38_Q84_RXxCrn(s!){*PYg; zjA92Xb6s}QgeD-|3 zKbOnzpWlBca?a!2@3;GHTyNLg_0FZ2rOcqi3bv|vZV0VD%E%EZcmrVmJmL=2lzcfr z5AR{NIt!V*V;|7$W~p{7`tm+o=?NK&Fgur|=y6tA!B3D@T_DFB z2aTxLzy3scJ+a_TRQBX{!h5>Np{C|p=k-^A4OQJU0bKT+`);}8Uyt!g>}{Q3b@Udh zuV=+oJB@;Tgw&G3(V|r5(1L04oWgW}kHVbUT`I}FA zVyzf>*6kps^VKA%U54wVrsR77C^^nLS!B`Jq#?&BYA$L&+#eboV8%n;WF7f0Fa4Ln zYQ>iHGYw8Uh2i^O#U>eRc6buj9W%8T|HAK+bOGm$ZK#*{`;!�UciIi(B*ns3D@p z8a7e=VJDhjM|jsF+x_Rt7+<>ec62W{*?eatgYItW!-NexJT_nw(IkEO;CkQnnkkAD zv)QvCrl|{Su|}(83eoc-!hawu{MT)k^62HGc~|iG?`&xHZpb%dcjs*3ciELyK+tgj zsauV!)(Sti)4_ITld6v4JmFb^Cx+k&6hDeEMEM6r+RM@<+t)CeL z*D(ZI|Al(HP>Wr_TjVfecKDoHGIQ-@h4(Yx>pe@2>uB#W{`H316cON_W02Po?XG%B zm(7CrRs_IN3Vl;XKMUp`wlsowA*79PG5ibAu&iEN(8%n6H)1gg z$Pl5A3y!%xe=>-AVs}E+y4C0F-1*?;I<#q?OuG#qL|#!yKk|-zc??3)I}As)HVo4 z$4p~Tw;F@)7fKt%MJMtfoI_YnfE^qWZUCL`G7|5gH3M$A*7umauUGVNAT(Q~BOm>_ z28J?C%J`Qs6Na%*GQcV;&`wfHpdE3_>ymF=0Hzw%vd5>|d~M%`BaKel<3P-CN^ z#nmY>bZ1E*SPU0rU=qWK(`KowE_)wn{KF#Eea4fSYKKrmvJd0J}cUF@xVMX5I}rP&qMq`X4&7+l7tE4p!>=xFwAoXo{K^qAEW-Ui3+J3)sJe z!S1}zBejTs%)^-16sRy|9trW<67Y#E?a3>%n2+0xZ~}$`7>vMF;V#F#k*V8as-@>H zjsuA{8vd|&`z$yE06kOHS8h{>D_D;p-k5mpnKc#@ZYoE8 zT)YElRPy@_CgJ>As5RX2xz}>9fWX0V8$pUyOx01~>$G+kAM(@ggpKh8A#q1K%xMyB z6tge6%i5V$)cJO-o^4}3udMC=7ZsUB^YG)CO&k572n9!_ZjCJ>>h3jUI2f`k9qqLG zFq$^OIH%Hh!fIm`Efl%!{8dq$b5b+@Z$Yn%A!6c%1Uzq0p}%u~x;R~{o`8j=LHC41Ta{)hkiu+5!sEV#F&()y*78*g_vJso__XOT0&}{uU}mRk^iZ)|45H~)`2sseCd!j?&wE}p^o}n@OGcUnBlL&8 zLqmOwIo#B>`gw3Qv**iDf27=RDK#0j#I(#_+4~Vq>sr3Xf8E*Rxp8%<{AnrJWT!%A3Rq`7;nk8T-I|dqkjq9cZN&f82XM4tfGjVo z_X0HHo&+`H;r^myWH&nS7`esnsAI9hFTTIxw_j9*mu}PfI?Ua%nX2{ND1Vd7Z2}Cy z^HWETp8?3jsK^ETpH;fH({vzUXyz6N0spvGaJ2Nm0O1K07`EWp9E*mt=T&cp7RNr1 zZA%RZYcYwxQx^=5VmLgwW5&P!4VWz)*#O3}T7M;SMrr!wLUsVtuh^E@3$KS^BqoaN*a;_R&Yjd0TDQaKnvpa^4@7_O! zjvvAMUXD7Y$3qILbbVrwiq#1}UEu-1J)=>@NuI948zqQIDp60(T)1i}98(n_h~xH) zzPMK!#+saIoLq7!r+m%i6okDgWP7hBnB=z{sycv1P~KePb&CZZqQwLpZJ48bw0tdt z7h+I!13aeA5Nxv9L=mYke)NWh%Qzs}TejeVwhWb2m1SB+l4Wlofxa-t-)w3-Jr#oo4(mgCvKIow%=(I6H20tX!3%oX7)(E4 z!XWTc)8nWqdAK?hC92p|EU(dbhbL#<4-3O( zd~a&zt10O1PY8~|Y*-cA?}LaTtoOcTNpa@l*tNWNT}Fxw9kze^W>hUg^hmJg$41bcrz>hk_pq$c^ok-4<=9 zaU*)?mBst}7~u!mbCE`E$xB)ObDe_dVjbA;&9a6fB)Dqz(!S5tBm^VGH`{&fl|`(@ zLVLIxANX_X3;%3HsNalXCl8-`+i-x%YBTj;X(TgKlBZLAe{P#$sYRa=xtCzrc!|RZ zuCpi?{IUA>Z`7Cf_>7=aU@13byK*AfWVi|2;blC5w&MBVQa!?^Ts3%}y3D0F|F2u- z2^2iNNR}Tw@M+70V;NHAQ*cqw8M`&JHu_)PnOm2<^_aRf#?08;&kvUv-FFWoRf0OK zJZfD=Jg`MatvV-wvi~Jyh$Vd_;&#(Hi_Y*`#|H0`pvTj)2_PL%ib_FjxzM{=(&4>V ziUKQUU#HzZJQX*~j-`afn|u0=DrI#41@?H9iRr%|bE}LSH1(LEPj;f1zf@X@br?RT zCd=Gva#<}2E=u_ODo9{>b}+#SXeKYDL)?OYxP6Y~!3w`cq$<2Iz|bN)LFJp$q0U92 zI}qy;DYFXuF9GKrTGo=H^;(4h#QdH?7-I|BUj>ovwR@%#kWQ1PGk+&$A*xejeb0Gu z^2mw1hnphz;vILeG#yOfFTQM^20Y|r3Ko%T{T7D5EB(S+G^jgbS`6=mnaI>zj@dZo zcM+BBFbe&Zn|O%T5K$d5C+5APIrleUdqCWNH?I(uQ!Td|!IUP49v5j4NV^0#7&>)|0O>kCjVhCEVvVJ#Bh6l9YB;Q)D59T)Zh zQIcpua+rZ|@f-n);%s)#N?P-*0Cikm7zDf10_d)2TfF(hYEU2uo*W)LH=7_>fHzMm z{5>8eWYzy}f;6EEg(_>HZZ;>v@^RP?>lIM+a_WsLvn*Z`+4!BL_B;hxBU^{;{CG^D zq}&eHe|=>aAV8&<&71|uNtKR3M40H(tSrts z>m%ns$J*sex2!7;x3VrcimY1~N+5W4+oP5ekh&ACx4swk53qXWY3&77@N#_n>!J#t zuu9RN%TMFF!~!!scU0&EQ`iTwUGtahY*sCvRGKKM1m{(`Mf228w9H@D+qg&oz=x`o|sFG zYsGFx`B`e>>*}rjXxv)0lu+1&uuZn$U1V_ia(|^-s^;Kl-c+HW_p)n1w!8@V(UFB$ zD3k zpcfeY$%0l<2Ot=$cceRpS)`7xf7Y_lIlD`tihJ#)zkF7DTC}VLZKv$p63tUb#ga}= zZ0|La5VLC#HRLc?vXjHxF?46oT668BHzW3#bj_+%zk)7~jF6c#WH0Jji|(cC|F#@L zzy$18->I9-6-R-|ZgJODq{48lB_XP27_F|A1l~^=$1>}KemmOBD?HSr9=mP3;RHJB zeFd^>yNQ>GaF{*jh>I$y!uFc*icD-~Vt}N3Q*uT{IoJb^At0rwRR6Wz*Wr6p91RjO zY^;=4Kba^=awgu3*RI<2;d%y8(g8a05c!P#9~9E_CuR4>qZoCx`sDabav|vttPvc^ zzvz2*nCM7YzGqnnqW`XyikHkjrzO(=OZJYGP#rEY`{J$#+bd3SWjKpV?(kcwitmz! z;@jT6k5-23r(hpQ577)pt9gi?L<)gy>e)Zd#p5*H2S2!R8{$^}EnR!Pnfim$ru5~v~MetSRiu!#krK_U!IntB1?it*#tJp8E z%7wC<1k-#DN*04O6D`wqIcv_Qlh#v=nhQ^#m3e_?lKI!A;eBv0fWc1ubsYykS@MOT zG_oHiVRF!^_kcPMTW{*zq_&**wtOR8jdJq-WKls|cvgXlPs#ExU8-=%I5l%56PL)f zY&=po42&lh#Jv!Pb$u3Fkf$EDPgzAcFDrswKgc?Mx`?Aq;Sm+&NK~134?B5;Ci>B>{l|M1x$H{$=ppM*h-Gf{y9)T(R>nphLCETz_)NEJo$n4=x#3YP*(eXQtywNVd zw+rtpE^O7qQUw)Eo(by;K0$A79dMVd=B(^HTe*b+taTAmzo@@HpD_sl1YH>ZeIP^j zDYc1t+>A(yo~+Gio{O9g(*03LRUXLzs|tis6e%!}{qkbJKWYEDOVQD~@$HVgovEBu zkdg5G44HJdycsj~*l+^p-NU6w<^EEIGBV^JE5^t5qyxNdPYN%5I{hhN>`DW$u5GFd zkBu|!HZJ@~8{sYIR7tJaaT)jk{wVxll6>sGz~$`94}_1o*j6+`Rh_`owj2x5PpI<# zhN;eYwgU@kV%>P_&v&c!Aax#qA!=<)*%J*g17S|BqsbS3n7E-T5_PccJ(Y%aDBR#9 z@&&|8!$LOgqD>Dxz>OEMAT?OccEw8{?8$CoOqEirQL8ayJd+D%@i+gc!~ef}3cxwF zX{`cyaJ#Zy z6_f_93C}8kcg?n#njo!WJ-04=PQJ+Ntvl_1?@JdeASLo&egA~vk58&)pUTa+#UtH^ z>5f^|NYh4K%{B{BFZv0DXYcMf4Em0&`HK%3Q{N~6eW1IQg?z50I9e`U1S$$wv#aYW zGi3kb#n#t3OYS%5g`D9HjZT*Ga+VKrIt~AwK~5SXZcgXi5v<=o$vPD02|uJ~Bt&v+ zmq!+#odtUrZ%-CI2}ge!)~O@`7(z3O)cxk5~THXaQSA^zx%*-JR%N zci;Tg1;HOWW+q@ypIcu^J88553<i(WeQR$7LJyOba7cDru7cVX(n@zZ?Lxm({AKLy)aRCDvE-EK-qlao>nh-PJP(Ho z!^#~I!8I4FIr=QRSbm@(_Jb!L_R%a+FBFNYySg)r9LEq;nF(C3WFcQf8y-_h#fI^X z?pV!^4<{cI!r%!t`Y^Yk=q>otCwc4hDz^x2AxEEV#zU2(bXFk|Oc zRYq|xWQk5SulC^M6YZn(j8hNZLe>srjW>D92kTe4-*ln-o>S}K_wSh&UXTm^Q|okI zWdE8}>{V3{Y2{4_IgW-iwpV1ye943>6;bYU!seDf9=I$mS_Y~c$Zur{w^h|2hqB(- z4}#PZr%6mY(Ls%a3FHUL5V)LH1G{zBMr6-1>zEgF(G18+pJ8@v-<{f2NT3);3Z%+> zDUFV6hOwrlQ1j6S2yMIbtEFCY*GJux7F%OGMG*&PnTD zjP1e|A;qICT{zp(R`3xcy%p;m1?OS-!P50>QjC-#0JdeOj!Rz|*^$Y(b@_88x<;~b zV5HH+R0KXf+fJ(8tW8@A6wO5`1h{(s1PsKQETBBteL;!Z-=4Os$s_9Jbz zY`L%ig?dONLMP2V=B~Y$el+7sQ4xxz6C@xQmqtr z#@A*>UpR{B<;@^B6T(lCf~0Q3gvkm)OA$*1h_6KsmWD)I|1pQ59yFmgsuBz1q{!2{ zeY72wc8Yb!3I?|T=zjFTF)9!1w!VMv)VP6NQr9!P6qkD-6EnUE*YKY379v;% z!(jaff+o)sE&LlQ3~{-;cMpC$t;h z@u+sp=`lRd2=sz5g4!@qiVe6lNv!8_%Vv&4v0KVPQ!{I2Xg|_@Aw#g??r2Msxk7|n z?2-H>cjqCZ8NuXlz3wl^{=)IcEYl@6jE=^hwP91#C9+N{HEHAB_)uHknl zUGKAuiut{K8eBC4{a=o{wBeDJK*tEA+&JHXV`wqRVhGQCx#_?`V+}%fJe(I^{kF7C zWd)|*SW4X$N{>{wI=z_VV)Q-#@=>1LT`ZqhF4s#I8qjvnzQJ0sd@o?fCGQzrnQQ zD9x^zAK)7Qh}X1rM2l}z8MI#|K(>U+o4iATTNSn)XMeRhGTU;Fr)$Fc|IrUHiHPPM zv<3u&m3K>G2l3s2gnj3D`d7nc;6&k&E<0{oo;lY`+ZLLMdT&%D2+v)*dGCAHoRZzu zDct9*xBIKQt?20Qk{0cT8);u+QyJQJd2u#Ji#-POPOE+sorIj#MVkxwxwqcIaqMc% zC9dGC9l1%&kFiH3s;Qkc9I?9=ww}!aBk6H`6?JjnA^PB&qtdFKPRT)kvMv!7mPCi3 z>R$`{!GcGxI0UzeU6=)$M$C;H{B7kIu2Ru+$pEv>QIXWU0D`v)qcaQ9!LkHehN13^ zOY5^Zg4=`Wh3~V*QNI*GozTJq>z|tyB`yh?4mvomL~&o_Y*S1MKVne!DYNM2j0WTy zCcQoj09_71&*9Uwp-b152CI9~VSxGqs4VlIynX%zCvZpnZuKD`v%8(Ha%U@8cT)|l zkd@JkAfR!=nCaWLB(KhrW@OTsA!vz%UM(L6>-SQw{;k$_!OIlg8 zcy}*h2I&Ct;fG|0Yp>0QKusz>3(Q#;gZrVK;WdwWmJR5uv0qZeY`z45uz>;{NCwwb z_$G8|!ZC3_N{zyq@h*Y#=wSd`DhV(q%;2eng9UUk7i4+>!Y~&;3KIFw<3L1Ub5Bmc zU0F|0-=Q_26EQ^2zBYGd2AcwOxE^rApB}De9Nh_2n_yHKNNdI&ZNi%Osk=bYTLga5 zme?i+$eWrm`(R6aGlK2_XhsY&REs+6AJe?4_P1VabT5NrcqDU@Fb-;65oz$F9|t{S zn#`0JS~k0cm|+6wMj*7T;f$S6(^DJLCv&>Rhn3N46XqJb+HLSB+e^yC1KQ6Fs}^}& za^gS@ZVwY302xao;-%5&VH7K=x9!Qt_`W!VF7{=xLI>n<=8dt^vrNWRWl-v4bS#n%Xv>8 z#s_G#p55lt=8|+oA4ELd9~r+kJk+DoTWnZfGFE6A%?)uV7;{;OA4GDxAC@{h;sVRY zZ%^hEZqX*ALn0_d%&qKJ0SPi5ecZj=zU z-l~bt4p6vl@1FmIaD37M`kAiPn9A70U$V3ousMMnEAiKMPJ0>!gXLI<#IANTU|3go zqXLUQ%&H1XYx;w<*4C1m?o@?|qi+syrlZ2M-j%MR72quvlcLt3ea@5lII1U(uCV6z zyzh{fg~7=gX{>LxIvN$vO+67{RdZ<(RRTz9a*g-#^oBEE1d9f6bwnjP$g>QNmcOPzK9^2uv!FYFNyIA{<4v`cKu zFT#35mJ!$$CZL{=0r5TFguv_ZbM=8G=j4R<>ks#`GK*HSCCI-RYW!jmIZt++gU)eG z?XMOsmsG=b$D}ZVlJL-hF0g*NlhLte3Q$CmsJ;~g=6~I!Z~j?DCDP>fTA32Pf*qqb zPHJ51CAXlqeHD8Z@|u||P&c{d1pv(FdS}^dSjd8J0r-fzd}yx0Vo-~Q9Tp+ai)f4P z>Ge4&x*n&qt#Y-yqb7Kv1KYE|T~CuseY_mR5c%9mznoHvc`Dj7$_Tgnx~VyZ(@Ig; zzoL@%J;Ki%$CB4EA9wv^&S`tO#4HkGxM68AoJqVA#iKw_2c2gBFIc8xJxxGuWUo|NlnE!3F!?J;6h=-bc8R~D4AJfi z*)rpoJs2^0h_^C8J5`dg4(vd_<##T#`)Z8C|MuhX5N z(~7QyP#WhCnMVnMpG_1YCZfwI43Q#;9URtC&bsn!(4FucCx8tR5xXBIYIv!IVcAU9 zb8^QhMx5RkPm0i0zNfN)3@_ppu7Uq$h)0mxbEZ#qmTq7O)rklE?|Oi?(3jKz=+5YN z?U6DyxCm_ zo2OsI#CEO5f^6{nqzJYphsmF_1W>_-{6koU;N`84ZrKu_6hM0ywjP}Aa(XYWlQHb6 zoXij5?(X&go zeatMHIIYbb4qT+FZ6DZmiLd5Q)d;A%0;{}0`dROIH!1Hq669SJ>Y94ap_{UM;Rp71 zN|t|ICMuUi`h3z}Mj=pYle|eX71?W_uV~vk%5d%Cel$54{V^3nZlVyCk0`6~+2gxN z#e)|~KK}9_fXkzFP4ya2+9ydLi4VM~)uF4R+O@(FzLgw>Zq+2ed2D8{UhIJq-m`uT zWRPzui7#yYToBVyh&~imX&ZkMy=83;aISu1n0L@jX)M)~Xy)BB|6(h6#(38mf4P%m zbI6AB2Tv%HPZaIv&7Spu+vwv42(Wk|+s(KE2rb<+LPLd_vIS)z9b;^r>P6!?QjYT_K5$w>Gz%{uK<}s?+qo;nbeK;KE;r3zf#SV!fAZ;F=DaIDi z$`KKIlrnP8lSYI3;UcR z@|A*{YPJlxs{={;t;h(RVlNp1oV-TD29f)*p+`nz`#=71M0g~I8GD^|e)X>WFFd9*P;9LjLAqAZFlca9#cLT&zScze2HP8|pVG542T z&;7{op9>XolBE`ucboOe4i#vMH05aoo85@uy0={ARKA;8D@BF0ybyK$B-KZq!OZlv zQ}ps!)i&yuYd}KqiGlt(;`pd#3*hS_CgE|%Gh<1;M3!Nd=ISA0kkqLoO79hZb7&1`-Kt4bXE+GHsR306^Cj1bNfyb-Dw9ajg@oT;)7-{BN;fA}ZyQ;+Qvu zHQXkZB>5%Tao6SWjno~k;A#t5Ep6S3+)?{?n+R;hV)IM#u|*j~NADZ#$Jf60&mkM% zMp;V7=S0m#u7F(Tl)bR77i?QupKag~+(mNF`Yl8HoO#bImlr#Yz5Wi+!(EA@bo~7e zCoP2}XQCUgbcJ@kBJqn4j73E>GBdc06nUMzV_&whxKIr{n zelnUu^gAd9Ax6PJH}fzXc<)0Z5cCrA-aFfZ1vH6`@t*}b z<5>vMG5}u{e(bAkIg`ZA`2uC8haE;c60h~dtz`JerU^T^DNK%zOa~d45f4}yL9N*LkKioV*@)1;#O#j(Tf*f0?WTyoE8My%`C6T$604=Sagvgx`J z((9rt9JyA@VsU}arE7-KDNO$1A{Pj{ds{b3ToM`@nwfhQepxJOim~Zop z)y?Q=zz>iDbQX9U_)Y9sJ#zJZ%&U=1RKx-0-*)f@WWsB zGGb?kX;QT$rU;5I@@=x{RNgtWNUWcGuK#ktjyMylk~{Nc=`Eig|6Rz z@oVX`8ataM@R70&f}jj#E2_mCmK_YW#W^JqOawZ4oSEq=#;(Ty)<-t(+RjK!_>0a#Npnw>>lmJ&NrU4 zjsEqS_GZk`^O6w`ZA1nBLRb^R@`SW+COK>g-(?yakak0_iXpM-&R@((|3p8$17cRp z7sDxcWrs8|9HeNu;e^gHnp2T>>ExNk0o^H>evF9Jv3=@2Y^ z>D;bo+rpO@uBZ~BytAj=Hivp48g+jugsc+~S7S}=|Gvq8Zu2;C!`pU}tAf{*K&#!a zsglC2xsFaAxdSop0LbKxP#&hf<%MJglt$6W%5Fvg0!U>ua@ZeD%Sn@BCJF`l1 z1u88Rb%nMqbMCY)2jy-}d_J}&Ezzg`6o`ZOpE6#AS_1jT7#ZT%)XR4&qI(A`6h`h`E}xG=;7L1Ql#`DmY?bHNUx-SR`$KbX|xZgq3dg0-848)9RsVs0g;m z9F!hR`Ifcj|E`&_w+P}26^#4NW+xh^o-hiAwW zW|hy&pNVYS3WCqsg_=wrn zh@DIFA#p0|-&!@;$^LAmIq~?;#%}B03`;|s{LLf1eI$g;P$p@Ur)914wct8+;c;wN z)FK?0L+9`7S>(DD%*mBTT#dSrBcAk-2uLkc%cZsLH%!>G`Wxo);Ty*lbk09w#OjCj zKac4Nq6CKNq2r^mh7G;vW`hKwY?_WM0d@leF`)syh=BLOQVtH;q)kC|oH><)GU=+b zKh|06cLyS5>kjQ8HOZ|m$K-}?LBg0;aminjcM32L+LCY!v1(R-c5q=%Hmidz(4P8?l%&N?g~D8ff#G+Z{;nQeQ`Sjfc} zdPCPLtH+Z;i(1@?)f{fSOQopzyy_ekUaOJWn_z6u$jJTCQmZy|-BFi&SvNgXSq?92 z^E*{8sKr>pT#O`jU0jPqX0Pzqd{qg$IX1Z2YUl1#(~*^IJQ~)iuIVfLxs<@*EFx)v zwqiqo)S>up{2lXBt5vSf-7$#Vu;QjOU!-XcvO9fv{$^Ce0u=G8p*+$mk*#yEFY_tc z6*m|^B-~|(mmjy8bMa7lwI^rC&ZUh1DDhpxgo!Ir+fV-MN$}aY;%o&e7#nglHp>5d z*X)N9ONEy(wo%R4C^BTuA;@-C3b{SYuE-GB=p%vq{nPh_Zb1sXy~^6BJ$l#9@5|+F zb~i^EZQPl(#qI69)|Ms)c8K}1oIJ*AUBZHLBA`0zcAcaY1TNrWJxsmv!A?SOPA0)c z2NP>m=Zl(L-3+|pVB^jWs{#c_;JL0Lx1ZgmPHy^YnfaCgBSSoSa3(4t13q@>zVWfI z@{oq^-N=lz8f2ux)&HZsak_u%TPfP%<)}|A4qI4ExiB5B#yB)%93qS4ZrHyJ8uclO z6>7iJQJ_@L@K}Y3%ZXtJ~(aXoqox;Y1GHuJi?FJ1UXAN~K0*#$3G|V?<+F8YEiN zLo}9UwEpd9;c|nC(TZC7i0r z4J&2gsE}*B5YH8@wdv>N=|EJ${uXz0acB4m;{u_3<6K-g^rd0sVxWG5 z=s}}Eu)&AX>p5+6)Bc=}ybzaGm-U`)lQ<{OgCWvx{4DbPSXKA%LU;@HY;;;wTRwVR8@3PtZQs$>eqR>et%$KP`;1 zbss^yd~$_0{H(giHU!GENS1LD)2yh(A1IO|>awK@8hSL*k#bpD4J*Pu^E~=;^UK;D z{*Yi_ZyLIR@vfi%)`wyAdjSu^=vs{a^6}mH=nJV^yKT&kM*w%Mi(EYHoUEdE3*qgMLBDAZ!Wn2(fy34?UhAT`Wxgk&nUjOH%>~3=MTqA zkpuPYOGxOQb*r#n=9DjiHiPe3>uS8S(P#v`rOV}f=q1B-n@4GZ7dD1N`$%j+|2RT? zfs$lHNKDp`)mGBa7j|I4*HfT!=nrD$Xifignz5L=Q$xe%fhUA_vsk=kBpp(-}f#Dhv^IhA2?W2d-PvXzM zh1aWG?;rEW^GQw3={hb?b_uEGJbnj;ELB(+rBt_Y-yh792keI8jMDXmueIlB_03F_ z$arpuVq^+JQ3EX1>MC+8DM$efq)Su#&NOwfL*MjW>rD+r&n9g?;`*JX>i0uFV)De< ziD&1zzPav z{s}C3HOpFSP>til#zQP_Ouy`AxW!T}}>TmHP7oS)IOev5#p@LIRa{do?$`vpzb1zkks zKah2zqtjTM{1E<`{gwQ2rq+KGE5ITy0yIV7%AC2+z-w+|?mYKgi4JVwr+8>P327de zIHq~R@Gg0(g^0_ho8^EGjb>EHjiZzZ?K`u8LV1hHOK2Jv`Rt4^JhstGS}!cn*;niq z(U{Bqofn@s)tAmz?KQi$E$$WjdVlDo=`xYLtJZ`+;iUNy%c?nn2HzLKey_I$Ktv(zRywb z7UXcTWy|@3h&Gr)%o0AWRkEGTI;pwKlmVtXiE~;zOzJKVsBp^^ojh+jcpm_g8j$JFKq8$ zOp}+B#%d+tdU*OYI7%u zybAd|2-CYQ>#rMgAzrmmuTaV%Uh4QXHnm^j-#Qoq=Yb^ZOsF_3ZQ&wWlUv=O$mwe~ z3mNG-K`#ScE~Vu`jh%f&Oi3v$m!UJ;Tw{EK7)_9LY<66-l&E873o8pr?b3Ih=pS_sR5;ZdCp2>$C5J zqSyNNd3^;K=1m%2J5 z{8xPhz~ld7Vv3}Mr5uV5rwfQers;9Pm~JV4Dpw!-gH- zutYIW2GPBw_4_UP!ej(+5u|%x-Ihuui1MwyJI&a0j=v^p0lRzwfW75o(z$@)0+>x$ zY3l4dwDg+N=8H7oko4A!77JcW->o_$2R4w=n{iS6B|-R(^hUO$T5VR>{Fa`Q6P@9( z?n1B>R^pQp3}0oRn*PZvK%j+iyTP8%6p-S%5?mWITyUm5)=|QHE(SgvpwxAvYU})3 z<@HqY&U&$hR5@$EF0j(jUTt{OywZ7&w4Gu7a5!#%=zS;ZCIzPBD*b-mQBL81?Fz_I zE&z)x^P8hb0ziXeJxr2bpIxQ>QYJgKOjlJ*w0BmQh|Q9)@9L%}QIwsX(-vG0kk%|_ zO;jjrSa6l%n5O@ak>D$7R={sBT9cALJ>&V5bdTgE_FP;okN+9il*OG7a&Ig2g+ium zQK(O;mG2~bSrb&s%%V5RueFtFQ3dNA6E^=^0nZ7l^yQpS8TgLQqMT>Fn3=`%=ehz+ zYLdTmCmh7`Q_V!&_*CSlY3yTTks|K|kyjstu>H^~c(nh+1{c|;t8hi##R`av6@mYY z8hbL~furYq-l>2?`%Pr&*~^R-VW-NJ2M1X9wP>pYywUF-A{YC>IRNIlSz_uMo2iHa zpg152s_cE^P#p7hcRqzJhr1*qsL5>eRK^Pov2@pR&ay>)eROqEO{bhuseg8ZeAjEhFSq6HmAz zp)3W8U11${`Sk`$gWK?>V&9vt^1@EbPieF8V8g#lgnzYF2p~*4H3YALgif1KoUo!) zYg1#M2qh$eGtY4$3nw96b9x*;pwWGf&FI71@*7=Kg+@o;*m{prxzFV8Pf%YkVi#B@ zENVy&-p~L*LY~he1!M6x<&_kTR9(MIau@n~Fe9o?M52?n>!0D_^Zg_wwM`i?G}xh&0$*VVQ9W-y=<_5K_$fBBB^CYk{n&@8|OezyD>{hHgojaemb z_g}>G_|*#*MHR!USiG5hhlC}6tst^B3i1e34e>o+%sxdR}CWQ#)#bksCih=+%L09m&Gk985nJ5l@@`=xy#KqgjEePy0qLC6vCsM_@2PkO zl+Oz*4J|J2y3qT+jQx_N{Y%NpYa_6yGKXL{W2VWEXy@?SR@JWuz9|J%_I~%&X;o~!?d+b*9Pd&{l}aWml>>g*uX7@(cjS(?lcO^8wtz{m+O zfHzpC_8FOUd2Ca)hr0{T~qU^!%vf`2mD} z+LY{rg|NVlL_a5L=1qZ?M8$`COZ^^<( zl!gKzMla70ie`T-^4DQLeXXG0=$B z_ja(a7J1z(()K@|8gD^{z~w`U1RwQ*BqC|_&IhaO)-rkqt*HZ|%kdU9){&6@szK>T z6D+z=BayITd7;@0(Pct7+bmh1WIx|zFnZ}4mQSitdI&vwOE~At%%4WVUkL=DpO|3n zAx3&eEF&tByF)*lo(3G z8eoTc>q}Fd>rb*|5*HG(!{Q4R)02$vlvV@y_UEfHId0?yERHyPICF2w2cG}4c4D<^ zjA&1c+bw6s!;Pu4pd?*g{@pmv)+QGBUNhPLWU?>tw_mfh_r12zYV2y-4kZDmPrBJG zMhaDoCqa@iPL>gCU+QK*gLT-xX5LR*Sx<{>8~2BDsPx{x9_LibEiaNGxnOr`{v4sv z!?z4{n=v40yXM)|K#`qAS^#Z5oP-k#hV$V z1~DuEsj65x2WIVFLhOXeU8oML&GvFxMF+UJI`aQ*dB8nxNB)z-jBU5}y|p%1EoR4e zV~l=#B}&0#L_nw?ezwEybk7~D*!U)F!Vc#A;4LMHj_^^ad+huFudwS5g!=#gMU+%h zp_0+yj8JCg5!s_sgwR6fmA&pni)y(|4J@2k$U-q77%e=VbxZ!?peRiKd-(P?A zcK5#5^Zk0ip8N59KHpQCWcvNJ3~BCZ{?wzO<_{LLEkLLpo(S`PsYII;*#aL;$1HUf z=w(AtUlCFk%!j`5ZTg#SegvvrK~V{lf>YXevFS<1t-*c=BQp2uO6>v3sLsofE2gEf z<)3qC=XiHX6zTPOW|X$_)bkD|j+iG0577EFU3D6~${5gzg_b|t8F{{82=yAonG*!FW>(Zb+{>+Zf1Nh2XZ< z*0(Hp949DK>akkH4ByBs^+4A251rpDBVAYC|7Vyz8YSjuLwyXNv;jrXKT_AxOhp16 zTL}-m?cOJEvY4r*K4YR@AEDC3@S!cu=}CJ)sK=}|rHW}&G;&DhC0$)H<6y^*ZDS4l z`&5kD^?e5xelq3(pHi0-h_a*et-+0+){cq(Qx>K`nne`3xinu?>=QXSW~!iYW-`J7 z>^b6XKU!*aSuj6f#9OLF>TZZlmeD{|k-4eG{j%v5f8ne-F$RIt{WB(Tz3r$Mv>8Pl4FQyLjzRM>>%!m#3khLsTO94! z^zVV!EsRBtRL~lR3d__@4^Q{}dHjZ_vTRw2)|oclC_-s@X-lR-;)wCqwu`fKtn+Z0 zO=$sMM<`n;Ff%jLs&Xt@aZ%tT&%=d70=)%CZvUQ7rE27KVlz@SIJw#I}_aHtG||w zip}0W5!vp%$OAtEl9$C7=mpKNzgNU1&Msz~8d#lGt03=AVd(fGP=GfufW zBOmspnD)1ryv<^S^C}dW=-JSMjhZ-{jHs0lN4mI`^T4)yxH18+RrEV$*L-cR43|X(>9!~bK%sndr@5|3TcgBnU(@*Ex>*|Le2#8xFy>_`?Yvtc3oLD_>Nbt)# zdIJzf@R`WS^RddaxBV>4rwat_V`E|_C4}pgr7ljnuO)Qd^y0>(Y^8M+3H%c`L+9UY7SJH~z8?3;02t>;p_Vx8h@C)+?ZZ z*QPqvh~u(87Vi$w&Ru)@FFOo~N0OK>3kH;$&OQq&{g9USB`lc4JAgOM9QIgMXu}^L z#hGNzScPVyeKsdv&h!`?t&7-lGuSgIkkl^1pn`dCIZ94{o6a9qHY9-^3$;TV+KzJ4 zY`@^!m#Mbux))$TpXwDNF!AwyHZDK(FSU0NH0aysRR zkwx@wFE|ni7AM-=LxP)QOp1}e!F5_4q$F_<96?v{Z@&K{{P=qe#xu~0t%pnT@Ul7p zf#B$1UpXml#50jUEbSZyug0AnPg$+-GS=M5b-EF&A?7FY8qXdFKN>v+ue3Go*CuPM zWFultKzgl*AF+|lPLmhR9jZ*s{^}|DmzEIn1uV`h0ih518TRerXp*jU8~}}@-P<`< z**8Nx7PG0pBV!i7c|muLEA7!%y2ZG1(%Z<=eK_CLxZIXxr8VsM9SjV?k-qdJ(eW?Q z4z#r%Yo5@1H!r*iLIc@)o8!-s<{bEc+ZMa`_!>Q7Uq{&) zwE}*q!ERi$rLrr=@uTnLY12zNkn6dfHLKyJk(mmfMb8A>Vz~?pf3CO zgB2FL{6SvIBZ{Qzh%mN*4Jq3*{f~9v%?%*0W!$udh4&q})b0;+=^tP6oh{1Wn}(CQ zX>j=hEFPin8O7YU&LKU%!i)F2a_pb}-tS8l154dQE0!D#Jj2yw{|Q<{uQvyIh1Z}05!=Z};JW(^eQmQtg3m42R^A?I zdt{aZpdPQ@Hpbp!SV?KLw^Y`VgP#n;l?baZ3jg9K4-0t#XKe=d61zoquf2+?87V7r zl@;zNHPfotdjNRlR*X}lR?NJoi$qmLPUZ>4?C7|K>v*_(Cf@6?bB}! z$9qjo5=;|GCKkp6-b%!e;g8r(Ju1JQk(t}+znT*Y44Ztzc;!WFNko{DviLl7VIL{| z^4PETmp^K!|Lc}q=8M~`565qH$7*Z{BF)Oz!2=k5&_Yk@dA*n?GS9TH!~=1&cx z3z3=MnHCk_6{05LwF^SjiA-fR(7pBC*USInh8-X5*bYWKFf~UIXn(lU z09ots2&H0)6-V~>SZG!5ogf}R0nxiF1teHbED}^7)M^>QecoQQ&+8cXiDX!@w_6&z z&^wLpcUugGTDmI>-#m17>i&h_I#d3|*FXLzBo91}fEQNe!)M;lGrEUAM!3rD>f=Yp zBifrbGyL+Sw6*GzF3LAnyI24S=O3#%Ei&3ZqZ|kEgwO5s!Wy(3e^h>IQL!?2=J>w? z#lJ1#2`o_$dnr;0RrzcKst<`E8d_c!98mfLNNb*%b4~Y7VYsW8)@w(!r<`j3Vgjco z!_Q4ryZXEYO&i5ze@Nk7507S+a>3!-@&-FFXg}m^PUMo7Z<^Y2fVc zf@@NU{igbeLnbWDz3)V;XMcyK3GnA9Wga(GOj z3s<$AB6G%zuAZKuTzD?7dQ|Rat0>rDY!GUvi8XSn#-@Knh&d%XMugqGt9Q3}+{mbjY8n|Id}?J$iQXHm51wRU;rY&j+dvhL z9tgvGzE3!WBkVv;=hurLY_B*1`j2S_sI4Ea{lXl2Akpjwo3g*eGXRGE3$k=?0sF;* ztBHA7<@~^({*KGv&s3q8Fe5QyHO{o*jplPm4?%L z(Wj_J=FAB#&usl*KMwQ!;+wOdhZDDw|4kz=ZLzEgr?4TFcwMt<_>D-;WOr9=-tkDK7du9|Ex8eLbY$$fr{K zf!JBku0r1Q;Xbi7306dQ33H5b{Ie3#oGZ#uB)YX48ManbdTsIZX~?*S&-57Fv$kd1_a_O+N|jCT<$$W1 z-fNi34upshwM(C+|3idKx0stT6O;e9Xz$h!zb5ht2Iw~wz^&_Roa%Dpe3TPI)2eEK z!!G%k%iW!8^Sem{W!D&~Sn1>V_*b^05e^{=Y{D^&YlY5nKo#QctWs*C^a@ze=QTxK zs)hEXAfZHB!V7#eJd;s@N)Lg{YUlP{TXW$@b6saL%TGD;%eN_F2)xbu(KQC^kIc_x z22!dXc0h^8qBB9)^{NC#Wdf&f%4B62lqJAa$($HznJPOk&?8iTT_g1As)c9bT>|Z^ z8T{$$z3ZK)tY``6@s~7)j&uz_r1kRTt<`^##jbg2B@|6x(Q1=hp%)?QWX?>eh$fl( zM?MTMWN9whO?aB|zA!wjJhqVB_*J^ zx}eoS&?D%g0HTv_i0Jn()p(bDc0`@Mcv(~4xkG&LD%}fzhq}A>$k;sml`YZI&;eO; zO!jTntqAXKDo~m-RTGn6w;{Gith@fpd6S=Kqy3@dg=7Gco#EN|ssaVec_=AUS=|W8 z8E`PhMJsd2zlDSnHKyRsAEi)*eHcu6XuJutNG=!=r=hQqP>vX_giK%f$^*_XcbS6EM7Jg;6!A&M*vgw{G$rbltt0ZW^j4eRN5-0*U&L7VuoxKwKO7NkIkFp_v$r&NI>_2s|Y*AK> z()yk#+PzjBc|<;Sj8f4Jc75YCLVZTslg~#jY06yeGCC<~|EQ>$6?ymuWVl3lONqs% znW^SiHuR3vy>8d0kv_?k6upX7&`;SIIG;y|d;XxI@qN;G1#>Ha$SAA%u108fj35I= z25LT*Kv@TIVxrIk!;g+z#6nf0e3O8&R8>y|vYqe!GOC<^h@;QT z(~_eb4I2xa!QQ0fw7j(G;${$@dF*IpuZP89Yb-6ITe6+yc4;ce-ht@-4?yYPGz$={ zG1ZX$^!e1J*m%4`gCAbWWfXn+0pUyG{t=>>iwCcbUY|>pcDh?rRW)*pC&azU*I=&e zVo#0Up$4EC7~gM_r*0Znpm(WdX|PiyZ82d69|JQS?TjvA5oEj@=#b7vbF%HPTXX4Og_nDY456ZAtBl*|3Mx_GX+4 zIz#tPJf4i-aT*7E%bSCDGui-()SxBl7Qc15Q2|mQ{3)0p!vYmXW2$3>ku}T{KtA>t zN`5Dxwi81CQoWQOvD!S9^2S>EYAgWyQI0n4paq9&0MY#ywRnSk-KXm`wg{&0$}K0g ztRx8Pjeg8i?L2GQ(j`h$C&JkJQQ{M1t&BoE(ne>|E(yT@14SII4$*td9U!u8e)Ck0q)GEUYh1T@6Rk2~4 z2*SPw#iOMrY|&e-*72Mdg>4nMl9xQ%@)tGUzt4~v^6>MZC>^ci>+Nc!y2Nuv7KJQB z&wZHd9Ixhn;$^h7eaL*4w;l2yo3tzNTwuPoOV{k0Pd9JKf94CcRwTN@WRXDKO1siZ zZtho&ylTu{hUsP?(6PW*G1Zv4bOc}2=cj*Rd#U6O)nCdSZ4W8dc<-QJl{~E%^6YEb zLm{6upZ?R(X)E}3tAH#3bLzI_`0C_;$(LP$wJhmcPOPS0Y7S&99GkA|*)%_Qd%VYs z@L_SLOAjp=tzCV?bZ&FaqolHVa3!`8+FVWNMW)KE)}HNj*n(n@;fnmcQdW4v z(8_kADn29X?TIJfpRor#_bUb^F6j^ik!KpNLd5lkP;Q9}>W!3IDNf+FU60d@4&dvBbgO?f4a3`W7PcIvMjrzGS%^z#2o@Q!M zxoZ8l_<2QcLrbC;3PktcD&3UD#Ew>bVPgdJ(sOc}A@Lu|jj~lVQ^NcKQzXa!vaR#w zb=IPpocOQ!m3Xm$ae;Y92YP$L+cnK|8_Q3=~>uy%Bos}FJJOG_C>^|+W4kSUumB!-E{7UI@?&y-AgpM)17G`>6)%% zR~Mwp$v})hA2lGL^F#$+_c`$ZaCt!WSQbl%U6=O29rjertw%z-M^iEB(H~Dg-31k7 zJY25>eCOPuu?L5R`nIoc1d^v3p;tL2PVU5wO&VaEw-7++*e%y{7ItRv0M93}KB6Q{ z*fuDxa&Gp|65fC0_kp*iI?wVNcuZAja?;~5rnUPZ)dDrLEW(XY+f{8`^4lD*KTNv6 zX{yxoJMXu^Yk3F0Y^tU8^2W^>sK{W^lF;pAzqZnVrC@tRL>vsFRKUr>#eYW%|HHoD z!!3H~^je=P-219TKViSQ7*kd&+*S@Mi7(LvTH`PX^%rwwLe* zI8=_HzRg`1;Bo!zW2ZMY4NsbKqSc#lrssRBn+d=9gzl5wnn>~~x=UN!Tb8Z2Yu6#F zj)vL|*E?S>Y?0-}W8Z#Zd$hpj%H|BM-MJ~~^tEd-pT^=ix5h|z*s@mcBo%^8x7~|Q zyO=QVDX~YbBuI4g)S>uhq#}0kbW;GStexG$EUK!eASiE(bD(TW83BgmKT{BOupbl# zZ*HHO!^iTII{PG?Y}6K7$`8(wI4kA?!OdUT#vuF8u7%rkVfTXlKNR1O@_V>=w5*8V z!^ird1wkN{1ZgP8h*8!T=WcYiQ~L^VNROep2m0Pgdn#X+soWK1y>5!WeW}1QHSMej z7!7?(Etc|>gpv=)yA#>l)YMke@~j71f_iK)lDdS`9W{QDUn!kN)644x&DsRW;t477 zcp5X?Tg)_LbzS=w$_E?+p*B`ZKJZqj>IT(KJ0TC272WRVzy#}y&OVK(SHDB{!f++S z=1t#OjQN1bx%H$g5>?+sJNuwwynaPF$Cwhv29H2DJ3(KeC?Vfo4&$l#j=nKo+N;5h zm-U!e==&R$)30*%x2_m&t#QyFZP4f5$9Bp{U}l#{wcUD2k`@80qO9hoHH9CJ>5tRA7Z>m6x~4$8vRY_Exs_3TF*g33JKZ^;ozXuk}C z7v7o|+C@a%S~~ZQ4x(;j(zs@J2o1V?%}n~peDHSsmRDCT^6TSCF*jII2a$__PuG6d zew?gzd)$LSS`JbSn4r?T9M`)U*<#oDH_W62d@0Fv zZdAZ(d(u08Qb!+Xhc|Scz>Cj0Dtf52BF|n{``EwkGk-c5<+YnenW=pp&|gCuYs=nt z=APyqB0tMJuWjkm_%iN|oHx>de7<=FwTxWDi9 zi$lEUnr)Tqb{*_$CJI*&nuXQyC`t#aQa z9!IxWbyi?|SS4P&waHtUQ`U`YzlSz6g;vYV)Uh(@qWVpJZ*Zv!(uOMa+Obzs(uMK^$3Jr*n>qlJ<5DvE(aLlVA(*xwt z9ahmfIJF~2slE3q?fceU8-$TD1@49_r~cemCZ=~q=XQgHAexLLj~A7;IwK+QWijaV zAV&GjpPDGvoxMgl_){N`qRqOL-ps&J@Y!Lnr6>ak#zt^)*acnR4^%rg@d%-G-P1cI zRw};uV~Of`nbU%MX>9otSz z-j4C2b>-awid(GNvR8wL_e^EK}vUn!ERdHs)F+bY3+rs_Z14lydS_DfzF33JL;xbvz~t6%$*u@9bF2z5dA~mP9sf z!svdfmdDR}NV)L2IOPe><``gT>$dIiBfWsa^$dQGdQrQKREFXJ-z=qSqLJj>?BLo~ zcUyQr&opnB^`yT|_1ea)n54%-KwUvWS!O}cAzl%KMA>~%!M0l6EL97Or9?|P+MP0g zN{i@BY;1dTF)*18jH5e}Sy6SyMic_Yv zv`v8~U|6gB>JuJ7^F>^8dIK+O7kh`PI6^f%*0FnU6=3H-oby61IGpepVDGXmV(+j! zbp)2a&&kIQPVG5hTlM9DLWO%nK;l(Y(@Pas2AV*9NclVi>|*7e$K{N!V{=q6;gB}w zIF^%Po%hnso2NtGMC*VpymO7KT-ULZ10TYHLd^RR*;x3e)hU&S;&vZD_^z7G70rrQ zbW_LXr&pE!M1WL#B}#LOt@ZE4!-2+s2MDdK^zC~)CXu{Zd`s!lh27EprYfSQ0hE(D z7ujq*6Db7}JQsmo{9R{c+`H|vd`jujlgjknYqe4VZsg{cUdJo?`#o*a<<4QxVO4>4|gZ49PelwVGwzr##_DnDg(%{ho)BH^XH9v`KcaDvbyC83?C z^PDgdnF9Dvjof2j92al}eN+Ka*Tp36bNA2(-`i9B5;2YuN@R6nJnv8(VM0`&Z>uNE zP^YSnKOl5yyR0;pDMvJ?utxZe>Q0GdR9e&hfUPtF{TwZ9(1lr^*Zmu1D@=I6QYiTq z5!WHtjsO`cZ$x!}qtK~u4oKc#;MU{;SSWdTz)|er5qL3;US|@wSXK3uQFy zy~Q!jo0%f9iqqMlj>9VSq>R#|iJlx+?7@CTx2$uo{<5L(S(r&AeF9tiSkAU0c<2FL z(;l>j>ILM zcFQM2>|7nnTXv)bstm9h#7QS5X@XagYS~}DYFgf`=VFt*5NlJ2L-j9Ld9Sl#?z_|Z zZOW>MN$2a&j(Y_-lREInQSW#D^h)b}k$KD_<@mIJ*|r8!IC=Y<7yifR7RZmWg9{=& z&1(+!QGQOSYGD8zk&eVNV_BN z{xNa>AMw;cC7?@v`&sdI0s&6w9@riZ1>ZG*IOQY69lilWx!1F3ix;p$ft&#xr;{SU$!1HR|HvGqg@_%fPs$d|UEjf91i90g3Y!~oP N=Zc|5{^dJC{|Bo*h$H|2 diff --git a/Docs/images/grow_small.png b/Docs/images/grow_small.png deleted file mode 100644 index 8f7398e7c38c9c9ca5106e0bc422ca18f3e991e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54432 zcmeFZXH-*L*EWn56$KRmrK=zU0@8a?R79jp7orrA8bXHv5tZH)lny~qkQ(VdL8V9+ z5JHa-dJCb2gp@Cw`#yR+2cPkcXS_e&@s7ifjJ@{WtIajnT=SaO+=S_9shv2+dW?pK z=7jp~8+tS}hh}JK_Ddc)OubWjL_n8@=2(NBs;Z8qYVws?XcGgwDVyeKbKA zQX82|#7-#%MLIJBxcAc-JZaoC4Bzg%AMzoVhX3S*cwa}-bh@2Z@-)hJ=0-61Jn=&Ra~v`{NgE3n|ESEM-nbL#wR67c5)nH<0a{HcA;D^ zsk@0KvGaFtiCwIdHu}>2popxTfQAT)t195=&8=VP9U@PB=|5>wTC-80!oMCH|GYyq zK~WqMtlvb|b?Z3o+te+ZGS4B?GP!X%M)uLM8R&HQ*_Uotz8p)KnYFocGmhxs9&7JnskpqMsZGJtYT#1Vbf+JHlQl30{{PWX};jaD8_D`5h$fji>jx z4=XerZdIX)Rbl=@b3x_6_!GM4PhyCc`>nyDu|{FpDXVRhFlHCo+zZLHuHmtE$2r?S zMLu$}v!QL+NJ=G50dvJ|Ph?s^V{E)=z8gP3D7!A2%}L|by)UB<8Z%#it)iWtrfcg% zz+!=4T2st$0Sq`Ce=YqG($;X0x9hMdXKfu~U! zC(k_Ncp&|rhPL6F4sCQGW5%J>eJl-3E(bQAfWM!5@#OsK>Bwie2dAHMv)>55{DSrE ziE}F1FC?dEs;?{QoIFF{bS>;8?c_Df$3kUC1%mHn9DC227ZMOWoI&?h@;!?$%?XvP zuWWPTkx$h>oGv)Z_KEHx?cf3W=NBhzuF`e|yG`u(X1h<1Y*3qcw7uW&0Gw9id&26$ zV;R;u_g>Mru}?o)yB?G=smp(PpS@z<5rg2oYm%A6y5{fYFCVo(zIin2rv6unGTGsC z%Q4Z{OTP}yZO#?W9dqZXIp=@WpH}e+ryAt*3sKgy`jL#mfniN9R|Q3b62&?mcGz{; zbSQS5oKa+scxO3p3@%WXqE87ne>N6A7UJ~D^8vW{+2B!j`kY|#rt0t4UGAnHF$x`t zkPnxSsf}X$4e(P)59w}6n27n_Jpn|AVB-$@Jl*#(?Bw+ajE0OAjP$35 zk5(R0eXgFl|D~4u`CF&^LfOKm8*fe8Oj=EvojZ5V{G3|S)pJF6)9+SyfRggX4v0Z- zhx0JTvhWA;TynbDA1im8;Wn_ylp*p<_@ecE-pZAzf?+aTSxK(@_*>2QU*@|n|zN~Ym;LP){JZo`+|$>Ye*`e8F?!s6E$aX?S*c$eofl=GV7gj|gzxV|ibb ze<`0iS1Na0pHy&5e_dC@Xe4(abL$32p>rl@HeAmiL9p2@K6HmJmE{BT86lbC?{5wl zJj^^*RD27a(X1JDR8vS(Sra~E(HW6!WqMD@t5Bj)uh7jjYxs8E(PYa#k*z zB34H99G^K!k9ZCTl$TaA4oVJ34KI%H4I2&Nw^sf3+4S7xg)CaPv>910BL%P}4a(QxX zUER99F0+7b>+9A3?lZjpEFlgl2crkRs)TyI^s0=>)PAKM)U6LN2Sfv(VXB~oC{_eL zBodNA(V_$dUwYQ`-ZqkUkhXxX>dft9kw*%S_%U0b<~d@|5d7@GQ?EnH7M35LSH9&v z`26a1&me`P??N7hkWUAnpgWO&9L(v=1edB4e0sY0!sPA7o!i}CmS4tXMrJnZruDe? z9PQcc;j*l=x?{;xOlO5`8V}WvK{uB-qbIY_3@zGMHce{4^EywRu0Onv5+jrtv=<2( z0n&?!OUJ62I+*wvMZ-kH)J`L=swPTygz?j9u;$wu!k^%ag#vkW=;c z)!Rsy`!cmMS-H-+Hn~>!MVt@eJdz>9fn^Ny=jY4k_0Nf((@fg#XzY+mzaWz4#jhdg zU|=YMdIk8BU@dQh>EdKLc#NLz{Dj!U{M$!Gm8F|*O=21k$QH@ImgO?K1yiWL^NATc0#J z8JGl!r8w(%WN+>7d|LPPBZdffxco}!%$Y5q=eXZ@@CI%aQ(HOcI8-}rcB*#Hx7Y?` zf=wtaC`3X&5Z(|&a-H}`YAQ#ZP>2Jy&nmNkIU`*)r-NcgV?UaItWDOidw264#uGN^ zU+Abi6sXv!IH?%Bma#TaPXK!@k@Q}gf?&O+CAoL9>^1sB{FnSIakUtrLWWPqcEc=J zwemP@E8n?Dw18heR58(Q75`>V)m&MYcn@Msa=}i(%Ii$k&ArFo`R))17g^ORq#I65 z2KQtgRRc%+a5*?h01KQmrI@&ATbfz`#MEs!R9FLJ8Xt$2RJxdqfk(1y&HHoq7GnzI zvBMYaq8yf;=pHXRdO0hTBAP_XZQZ->r5h;KlGw5LKUU|iSI_dvZF5+$$gmuiH*#01 zISaP(KNtwoFh%;`4=#y6?Ny40w)B__m*@W$To70;ZGuw~&2fo@1Sr zOTh9inXNLM@QR|>$nsW@{J2-qsLg0S2-sRb4u22dAsr>f?kw$GWDw)53rJjdS<@Z2 z>Og1mt!cNV+ba~}JGUz@g{4g`J;60}+Mep>JW+BOKo%yF+I2pn;w2O#Ocl5~p+YURG4ZxTjv7GGfyZhXlk7c~rm-CipHJh2n zm3@-qBtY|3+GdCN(?|Z~G}P`6wUT5bV`C)|x$OKQQ_#tSObEAGBrp{Xc- z84bCeXlbRG67gI{yQ3vHw=$XL`|!SPfyCtGQEAD|&69dd2WaF{z?LM>wdblfIxUk#NkH7zn)5hEGXHU*<|D6_f zf+D+5L_~$Jiu`DsT2*29uAGjYw~eFm4Lc_rXE$meN}`gYR~7!K@Q+77yZlR4lb=;3 zr6m7a^Dj^STT?+~cLsl%(SOAC$6cztl#VHg{E)rUu`)tzH4Tjljrxsi_q_KljnSnV z8dS@WLw1fI+uwE*`!?I7?qKdKWB$Xh6Y3stgaN{4AD{E)Kh^2@P4Bdj1Y-fjLMx1~ zX~8;Y?y;xtE-R=GcL9O9X&yjY=j>Nf)m^Ktu4tN$-fH*jV7{CkU91p z4*#CM4cp<;rU`Bwp;x$~e{yV9876Ae)B$N-f5}9X-nc#|! z;evQO=2w$O@>K6qv{)3emSR0|NpL&;jlo58&^DR07+!yRkJWu~Dp1O>!>H+^*L`M1 z!U|hfb2?`nMTd!&-A|>!hgd6WzYW(VtcZe^;9TJtkpQ8KpK}+RhrOp}-K=ap2ynUh zQGMpDXa%w8y8*X2WM$I}3-XadMMjpZ+y9%N6}7wUIZ6$L{`9#~;`- ze<}Aa=;}-ZTdYxK>6M zo>OZa9L@Z+S+gc(A;`?!ELZ2KTYQV^3 za`%;B?I?^NcJ6W2f!ojn+F^hzNom#H5*Gf%0htF&k#7N?v(#b;E1P-BQPxH&NRI;l ziLgW?aLcL}Tzp)1$zOf(RF;T>{P^ppwCfh;C;N&DqQ(*rWNG&zJ9YW4iWJqMUoy9# zVgV7-Wd>jURU(DW&P>0ae(CqM&v2PO0cKA29tHI&7Oy<%DW0ody9`jspOzY#FZ&+9 zn0d?1o4w8`?_5tlP_uMhxc)q+NlL2Mbu&rD$Hbk@uH|MgY1~SG6}sTS1yTfStr=!U zpz78?*YQci;+e;Z4lqRdLT=T{#>g>DOTf(A$IjBLu?Liy)^pN1vj)CpAILXs?qxA# zSrOFS%0%UCyi43!Y_aq>9*yGzmmr-$aIv9vF!`c}zb16wh=T%>j z?FqtB$-TWY-y8fV-?hv(TWQ4ga4HEzE4k=&`u7W>U(zx+$1;U!cJC7<9#CtU*!lKo zBPDT@!}oz@y~0cv_=;gc#CF0%OiWhDJAwl`_Yfk+mJAp69HW?HKfa`uDnFHx3yp%e}s9mx7HUn70%3SLU3UZ zFEVrk*tg(3q5#}O?LK=BKgycE8@d*i&TKRuAMjjEjyYXY`c}5=M&2pW^FG!2Nn0b+ z?iQG;<+e{PV%V)W{HAtGZZ2Z+vbi&MBGTrr0r z+h#namxAjl&qNEh7+j{;-nF8PKg;_zem$@i);8VUv_OQK#GI}3f+o6Qzsuw^WAN{^ zn|f{Pts1_P=pZ7JC}pfMQ4z1oxhfLULK|I#=e~?`6{}<+dIk{vJxrypjElOc*46nS ztd)@6Il+o9TL09j2RWx6JLmd0WfGRJo(>)DxLLS_)WhmIW8EaDUw4ya5(Y$wk?Dyk zSL?{6)!g|CE~aW({g#1&q!%f^6LX*N&qNF^O~0--(X3E9XD%fuonKI7;ROCH($SeN zS^lBv%kv>fN2lXz!F8?+V{Pv;byGg8A%Q*m`migw`=9-NSu^fkNw!cmV!SD?UmodpPlol$OmU4A==edn}g`haC~7 zMdQ)2ZKJXHQa8qwVTsYA_pZ8GAnDQO_d{d}57VK+!WD8hPRbvOA({;t(v653NDQ`R zUo|=g(k92xB3`){ib;d7kKKO{=18ff1g(vdPLR8t$*mqyGY`$d`YZ#)dV~amj9_FL z=p;?pR5#5xUV#D<7p?fT3Q)(|JY|*>k$L}g%g)rQl$s6QD}rzUW`=EHXDc9`3z%4v zc7%1zA`ip}+)*pEGOVaBj^vD>5OCY*Lfghc!PzNThpCt#+!ZZiUnx^9s3cK#CEg&R zG096foF~Z~d^|?P!uwIG&oT_%!nin+957;p*0&Adb-pWwh|XO{cWFn3(xqRCvBqGA zt=xIS$b)tG%=hLg7Dgu{W~0JrS;o0GJN<=L%tndGsx4XKQ)5@kw@>w1IpbW@`9>|( z7q=q&oC`y(F@#T`k;vNE@?npbN#m``5On0T=1UHFaaNy}s%D2B&>`g`lu=2ad-q+t zOD+#l^k4d&)br9Odvq+}MJX*dK@OF?fKlJ+THB^iL8Xi4v9^jy&To1Ua!8a zj|i#T;jBw*`ew!2`2pJH=PI+i!E~q`!D37`zt*xID{YjV;#$PidJG$Z_HWoJHKFS z+!*Bcs2RI+JRFUX6IX6|B%BxOrWBz5N~8cGJ*2HH;Ff|edD#m1)>aMr^gbDqCI%Xa zt-?0TTWJw!%eNgw>y{F*jUvwZNjOFbyK?R3Kw=6wcLrGc)?ZP?eemc%53;}uXC9vy zMa-OFDAy%;ZFCqb;#!Rr!1i~~%8Lg0VfSI7vr~QF)OW0`w&C*?+`J&~nkIE};wdD_ z(WGRgV*+%o!rqAlyPI z@%Ge%36a5Su^&VbqRo*CN=jZ9HLdDqYU)e!?k;ciPyx>@btvSXoQk2Ew2{7JeJn-M z)l3nV3ynubK?^Zf+u~l|c=+Nb9QNkmJ$; z3v)7rZ`#ZYO{?>|0q7)A*Qpltx5HcqC8~s+Ry1WySMx1cQO??<hZW9tQdmNKO!F*hG zTgfXdxjNvSOPOW&GMAGIj`s}H;5^F?kaaWm7w_6j*l%}*T`O(On^JSdU&&m<%x&YG z=c5wEj)g>h!^%v>`gES#ED0@XnsLrd<%vhCQ7NZv`dXYz4K$xU5_2={zph1)FlNKR+uIv&xj38ToTlZPlQR+u{#(Q^2V0oqhbRUy3X zxfy5VZ2Xn5rupv4rq*ssBmXRf?~&9|WTe}zoAYnM<2nTk(3!}80``Vzk*|)H@a_+2 zwq<2StMR^kF$L>>h7$ppt)D|I>7-jn2Yb7CRmEchYG zkZnE+iXSxr&1^HWm5H9$+WD?@Vq99uzrMA-*{gE3D8M#`S>T)b3TKp|F3=t>-3cgk zKu6WD_|GLeITr{6KNu0_M2i9b>7FSy9xMxlEyARs7j6+!=!?(Y#w+3)pXOK;)mICo zC-1CR&Cb%r7U~>s$|)k5I9ibIcO;n@Za=XdHwQ$3vgkv5g>#xUaSEpeD_g%xlT|Vw z!iJ|MTo7mVp|wS6Y5myVH3Ad5C1zB<0&KP%3iw>?JZOw~TCa^FD89KBsSML`!q)k; zrfcX=9srkKqbrFd>&zR$91`Nj* zGcLdFpCz3q>!t`U^>7dQ6Cds{4UgHnuiY#T^0E>2G=`p~9sxlj#vB%&hU^x#99nNo zpT%*ul117B0vw30K5;g49%+uNqroGa5|1xHOpO%%^>yKJJJ5uGXS1RQu(l;ojok!y ziM*Nv`IhPh{5rgfn`N9*%+ysohC8E`EH^_J+u`^u`u9Qk5&R9HF7Oour;zne#s zG9CCSz0=*W+)@%;ME z1e-J24owksK zoyRs#SCY(dWAy4Pq&a`ON_W(3RiXh!joD_FJw>40<*le0Yvs6{vZwNQjvzU=OAyJK z0a8|SxpvblFN8cC+`cNah-kMO#Kuk9R<|WWG}0!92X&Bz*XgwOGAH-<3-Qcc#DDq% zYs@t95FD6odSB`sZsV{x&}r0Sg(JVWSinaGF>Q({BI?M#H+>4OjK*1LF_QZn+GiW< zW8MwbO=D3gME=b1pb2QD=Y(GKd_qI~iS7i=+gtTruqX_KitC;yFX)p=BuTy?RDW^t zhvoLv?N4?&&HJpn!#wgWLiy-?T4k{fR`cOY<=DH={7bkX3$P%=_ULQ@le-}0%(19O1@KR}Wnl^y7JS)mY^a8DevT@S7OWmtcLV^zt`HBI` znvmMtix8tiA%YW3#CcPZKh>bnPl5CH(n7Q>1L=IcbSm3xwlyy9Z?9o@rBJ936#=ik z>NX(ia&;ed#V+4U_q?VwUu#WXN|dRAJ2p=(P7V=sP8ndgi2%vl9Vn(4#frMCMp+D?GTV*kMh(=QRy4}LFgl`?~T95Ms8att#wHqPDSHk@JdjU;R9_y4(vY=k_ z3FXcOMy~n{&mtcAF6h?BdRFOy?{wTVchlK(;5!*Ivv2xAUs~f9a5>s=;Vso?-Jy#` zwO7W+yu3RGfp^&5z78gOb@_mB==lPXFo>czCD}6$6E9OW-2p+{g4O;BiZYB3xjM1u zCyYXCUEHT)vC=!@o|Y!gU70Lvh4+Nv?~>%K+#&?nl&6Adfvvng-)?!RC3JSxmsNx6 zH_WGFP4K=9@yLYwtG1S|PWD9~-(8=W9Ac5O_gYBhbE}MWA{K;(Rhwn!I7z?*+9$)W z%X{!Kbw=~Mmd4kmY8bKt`!$eYEAe4jDc{)AQtCfs<2uWg9}ns#+do;l+XEwe}Pq`jshL}CJT%TUWrV236W=rAa6Xk5xvu1OERP(Fpt5f{=k)@1+wA$#5!On!Tf&iRU`O0skGwCAj_x?c;NEsa*Tn>kR`~b34$pspu#0J<`%Fq`QaPSFQCluH2F;q8H7%mBPbim(B+Q<5wg`d*i&1%uZq#0ob* zd9!naGLr)+xl!*w1AJr_^pdCB!X(KN|4lg!XHdL09XRxIgnAHN+yt zaC^qbqZb<9scUY+;os|na6%XT6Kb9uoIg06mWZ0SKAx!3bL?IdM^1dR$^4cSV1rR1b9uy{L}Z^y(4F!VhPvBE2i%K*i(v1rKAZ>Hf#LT)che80jgATiJW_c zXLcXUr#xvSb}@s{yn7Nofm%#25;6Az82I*noTf=7V{9X;uzSVLsiMm{cDut%01>jc zWE;9Jaf>2KZ;pB&-9wAGRWkIcoQwQx)aSh)Kd@z_(m6vHoa_Fn47+!}=29h_)`pqb z`|*d;qqjRSj;Ew8_HfLoRp#zdC95@!bJ_dxzsvqVExSABTh337Z=e^{F*oNhFffq6 zK>=^fovQcUY`YJrbR0VU`t|FiMI$$kg@Hn|SMl*uMpLYR*(Wf46-%-fR$DUd*Ovj}euQQ)Fo}CE8b6D0a^88u1fu5VHS_clQv;3($Cd@L^5Zb1; zHs_?}$<#Q*=74(fk$S%tPk@A!uc1QxkXDhLpH^c=me`0g$HgD&{vqq=pjCicL?U@_ z6>p#ydeB6q=TJ)fu|>SI_E+B*?vk5LeO$Fp99P{6U03qDwxs0ZlF}(0K$w@Ax%g%*0sYNDm&;~_k6rUxlTODBj@O^)4!m#su zQ-C++QCeMvu#=m)ADXae<$JnR196YJyKWl-8uwweYL8zqb{^s>Fmy zK=JC6l`&SxY(pwQ=_It1O)GpSfQ-WXYAf$lR;@S~omr_S%U3o%LlEsINVa?sC4qqg z;X0V?{ONj)nwwC#e-_|$X(gr-=;ySMkafYgk%%HH0Bpup>Cj8Vwy(|Qc%^u_&R+4} z(8kUkz%>JzuS5e;GC}}Y_27WQXW&m$0j#GQRx{wz(I3Xgg!%UA28Z;6@M&pA!nU{T#gX}go361Rz6^&3%^A}vUHJ0!d@6|VIXclFX?tNeE ztL@Q4`jfLb#YC92^;gc~rJyz99o)v}XkKmMa4-g@UIfcEW-*Ur!ufkH0+4s}VSLc- zV(+;L)XkcpE(T00Q(SjiB2h4O(bE4_^B83_?QFpJeZ{E2&yyTGE9bb_a2R|=a)cAB z8||O_k0x;W{8z%Q$dN4C^lLv(Chn~LjLPftGHam{x?IH+@(z=4H6>uDc_4ONbj=^5 zVd%^d8rQkc&MTkTJ$5zX?yFziiJM~Cd zB4WA=)8xY?FS-S3LClb%39IT@G<1{$siiC@bpvUP??$MpqXJu#akncF^YIiUEggCL zM(ho)Gv+n!t*E{MSgbXa;(o}FGDc{uo=xZYOwaKWILm=ixSVc5e2_X;sl8NB*(Z7x z??tbQ3owIM$6JmJl)n0Trg@7~wH$T)rqd5CKNF=g-Rv&p*Qs06?u>WRUFhrB6wK>` z_}0AhwAp@f?b&4VqH}1!Ao(St*lU?2->y;9OEky$fj2nUDypzGf|KI27V%t!fx_y! zxKz?=4sI5*ps>YR;y~Uwpa$U~ClSsT;B9yjuu6Prgwh?Pg*c4P}#JaL5yvR2N z)=gXnVgqrU=jwg8LR%)k2etaT(uzTd5Rd?%8!+5_r+ zO-5A>9dRnb4gF>Zb6KLV)JUDIFt(PxJjm?qcKwG6e%ECA z&_Ybn%DeV+qG}l$b+H9si{8Hvg%n+m5i$4iD9|vhhmwZq*21>k*$>d3h%RgmU!9j8 zi{&!(*qr&aO2$sES@#nMtknpiAHgfHwcDsc?Ut-Ed)0zM??N4*t*p9H0aT70x!vBI zlO-{x)FlTPN5*)=jCZtI3`p>Sg1XL%k}%UR)@;%=~S-9R&-Y+j?XM- zbgdrKLNTisyOfHZuOfAg#6h`u1)Fvn8_t7UHrSja&79#vH9UfIUfJkIYXoTrvKe9h zMbd1)X6jYpBH|96sLxuEPw?2z>t<42p~P2nTu$Kd@w2PJJH6j#Pe^}@W@8(cRsi}s4Cib-7Oc?3 ztf&862en<7S70vSzuMWLC7_d#h&mOFqB=X$sfiH57NZ2}FBJQzd@SDxM$bEgDhPNS z^0NWaBUC!^Z06(R|D9~0*2%e^EVYgKz8uDMB7rMuOEN;O(s|7D?B_BV{hynFDui)% zs_TGaS1bHs#eTgA^gOzBA9bT&`1I>NqF%f2Hkk2oi&6%L?2~>B=hq9zi(e-cXA%@@ zuM{CBYUWOvq5aj^IVsqAw@i%$VLWXo`0>M0|Jj1Mu!8VKI7qd?tWm!F3nEzCGuDoBJl zjnxc-zr6UgnXXvFCt2IPU}ShpW0^@n{`}vT;!i!2f1(m{dffxPGxix0Ipj6|^6l4) zR6JnjRXv34wNQ*(Y>nP9t31<&0uP1`mK6*1rp?Ek1zAt{`mSZWf6$Hiiv#=%gb(au zoco%9$OcR%2lOn4M6)JQ@a?6Lh$Lx0Atl#I1TO%`s%u`Kd$q)!vc2(sG|@t1;G@@a zJOoNM-N?BK>Nu~OWz=nft@T+)SLrL6T-F#-kBJ}7H!i(2U}QLO&wd(rfI;D;8i&Wd zSFc``>1mt_bUM`5-fp$}{o@F8)%6Ufee2mw>^FsuB}xnRUVg0FFlu+;HmG#}jArQ- z;fmcNZLGk^kwoc{7gb;BsV{Tf&XW*)up-euY00)9I9)g7)~#6S<4cv!tl#{a%)BCo z>L8`P25x`%f-6?=IE)G+fuZJi?x15BC{p|*A^<5$&&?kBYAF{SSv`$YxBQ|1tCbQ5 zxZ@BVBq}CaL8b;b$~&YV;PEET?zFOr8P|cs^!CN|a1!Arp>II+LBo@?v5s;2rlyD> zEi>F@J{`WVqg>kNNk;pHj#B5)S~Z^h#HTMgx@6#BN7{h9uZaS zfP#a1L0p{)PR0nOAuhN;fImtbJ;kV{Y1rl!Cd6Bh-Wqu{b0Xc3kaW9m;o`06@RuPc zG`a{)P^kA6z*c7pBBjpo2Gy#WIf?*!ME+vc{#3DDYxv>W5%2g0IAvu}hc0&RBAr#+O_pgC!U1(nbY?qdw%hi;zsKF`smWbHLMG*Op9L5z zLKe3B&}R7Oe#x&;?9%rkW^gTsqMiU z+?VX5_}~M;m#sO#mSZ!UW`&pkp7$P7itjPIR8`)}v}iv1V!O;xgg74F}y_5-{9 z=i*-@^Z%rI{i--Jw&;yX58$=@7;#F&!XLa;o#(&~_i7pWwtw&A<|H-JdNVB%VWZm^ zMR&1cCKg&qVMV0&NoKR319gQ;w@oYk#uNA|8kjlOcFCL{dTBa8@1m4b*!wPzPG}CY zSL|m9>(@@_jt6FHcI1p8-wIBraL$*Pb^MHL{i>mIsu_sE0r7ndKHDo)rW$A_1{Ie=#l$x$KZ3VvGDsyTA-e);)v zuf{i6jICyPk+}o&Bw(|A{-s7yPRoL1{$!qDQRo;geb{f{*=8HSgbC@74mM8sraaZ) zk6w=xi4rbf{sHk=&CnazoTm4pEz=mgWuqE7B~mr82{oB9hI1;+6Z_4=t;W;2KNd`3 zf)zwBA_AQJESHXg`oF=NKSw~L1lzj0y?iyBYPM(Tx*NB(BO^f2?HhhG1>HALV~3~O zg=_3h>$W?%(8+dvlZt8_YykLL-e8@b)jilmv^@aGY-(p1EBh$wbzj$wd8RGPQ zj^VZ$W%6?47k}dO>wFkeCopdPL{Fg^ZhKw4n^%1^R6Xv}bh{S@DOiLjbnrZ+*vI;z z*cHLAnOE3i9j!|FO++cf*&fBX7w3Z(6~XS>_MTDwu!6`xF=7crq>MxWsV{{NllD99 z=D3!jDmc?uKh?+M=S#$OV`7vQTmbjU?*!K|loD(8y4f)bt2D~b&Cg@Fyx6j{InjTo zGPBI6`)!?CiEDrc+=8%J9}*R+$(Em~;Tq5wdXWy<7f0{$L09AVkdS5WYdF4ahfUfk zx>T7`J(uQpevwL#T-X{0Ly7N;67@=veuPJ>4P$6jGxQWg2i}<--1dCxP6<8Sq0+B@ z1DUBT6mCU-j+Gi&4M%mRaJ8hZwO$_@7%tr?ukqEN@U7wU_q|tO!ni0XNQX3&GpYCW zC@?O*aOch))4WN!z(>0XF{OUxLLe1GrTiX4DN-R7_|-Q%fd}IfOjtOzsJUCzqJl=P zrt*q|<83~rv*}>x_3d47L7L>_RmWS!zQ)=@y>#DTsoPQ?K`!6^gr99G^7j(FudTf` zSPyYjr+&%gWX$!hb}3oJZ0i#Mopq5Rn)*epdIiG7{5_x=q+e5^boe;?nc7#cnz^{h zPN@pc2tPbgjpZh0$`lnqT2l^6F_k%Y^?}N9^@>)0p+eO4oS-~mMrtslS~=ZGpjss( zj0zDCHja2w5#zF@UhcVlZaL@9Bn+Rq3LNIqdvl0dJajg}jOi-SbXs@tDfQ+3k?l^$ z66Kvv=YEa+6Dryw(pl;=#V+{~MyUbQ@XbXeAMAC{JBFR~#~&=qby`f$OQl z1s*Cs?{mv$tpI?+^~vC$>#uJTe+Encg0`qzNj_X9#IQredmGm(qhYl+MMsBTHZKu% zPW4gq+ZlG4oNO14S?`h;0c^po4M@}wX$Q2sim;IA+S(K(5=`1Sho;M))#iZs`Uyf` zXveLkpo15I?I^d&#H`64HRk455%z{NKd@)}|2U4*>(W{z*9i2eN5VL0v4id6*uW*l zUV{yf7H5C2s1abjB!2&3Ve2tMbHtYRS#g10=uBI7y#INKqEpVizlRfeZ^nP$eiP<7 z9ZR_40f)pFKvP8dl&^-3kU4O;0{5H4hC5<^R6@ROaR}kYZ!BW?ZE6Zb=u^APd$;hy zpGveZwcKX-!CC$^R8-565lUrOA}%Ke{|w^)($5gfi^T4L$c-0!+q!={|5xlk{Hgz3 z{Ht*PZneMpm;aX=nc!na=s*7#z`xe+Z`=7lXY{{z{(o)fYrNdAbSokh9(5$1O39aM z+=-TvAd?Ezd&(U&;gH?jmlb*2o5(@doET-HTT!yYl&asLzTc2?Y|9?*$5(zNNc}Cy zH=?nN0*vZPmcH#qysF*?aQ}!Got_kFN>e64 zxBIf_)@)eJC50^fW@12{Wp>!~tmr5afRBOWc$sKkrDK?2QPq`O^|LP$rIwSuotuWM z>Xt^OMn)`*(^Y@*Abz?fa#U`xkw`+2{Flao4kf3_gM)5gzE^oJd^0Z3maA~gjg}8^ z@$y@0w3^IN4Q>g-0yHBzynJ`Fp6)|DhQ|jCM;0$X+1cCcdD5_ThU$lrcOhC8VK{}3RF9KJXm&~O zvK(0@d1ANNL3iIQ9k@szb;4i~{n`L_sTJ4RQ)*=Q#_@JZRA;tz6OsDGLDRTu@R=gq zQjcQpkfb4^q@-!<*z4cpF_m5Z&s_vBaTLl)A+7JA85l-c5+L(!h9Ty|`L=rF7foal z?{qLfLDzKXDK+Mz96pYP2U+oTza#k4M7~alK*p-<+)_#SZYq+Xvw#uTn2M3(J5y@q zl6do767JLgnuJ^E&$ns{XVTTv>%Aj%^I!$jWf2k7R;J*=;geL%L8CWXKm{3BA|jSg zUiBIdeA_0qf2LE4N4QL%ilz8o*+)@v*e&*PYO!v&Naf??|KQ^SD_zHzs2M>c8-Iue zv8}GIM^5yjIHdZI-;82Ky?ZM`-d+Wwr$9T?ux^OE?uJ&;iP8TFWNp0ym_O#zoaA#@ zv}$O$)}sgZ-`R}V$SJgHc(PBFXXsK+Sy=#GTE&X4R)*Fto~jXp9W*^nMM|-tdPyp& zCdpw_NF~(@=Px^`Q%9@byjejd;wqlMlIEkr#GFY}DiNniCF0CZU-kN}HAMI=ny!od&*bstqjkJB^dMqCN^5(OMv6Vv8nP42y-nBD*HwFE&FvckiIYx zu)2zgdl=t5)yl#gJW^|IwVUK9^OJOw6r4wuV=~UV5nI+bAN?OA-GHftX~Phi@+G>~ zgt~#H)6f82$FbtSl5O$OtB>xH`RZZ2Tw8zn;_JO(#1U)rT_xB$US#K5KcNVGTTl*W ztyum|R`wBV-Hd>9U}kWR_D|#TE2{aji)yZ91pmeq4KY*Cc~8HM=)H#%ewPZVzU;S` z*}M4{PE<(c*rJB{rOzKmFXP|N{}ub+PT_wQ?%%EUYqaa&zeeVNZC-0whP;pOl|&Jk zcH{fJ(FNu@WAVW(6f@{cLz?yX;OftG)NfH%&r8t!4VUhkYYE&^y#QfRo@Li1CPdRAxY(VAK&F6Nkvb4 zwr40&>e=HJDKpQz7m_O9KffjEAvn#J`4-7((o;IYJ9|)!pPKj4`eE)j|8(t4J~i*7 z_|`zx9>>j@TouAin0c+EeAUMAm-8tVLM}ln&C~&iGoKvW%U{g!2vj{h;Me1zjtfm6 zvk&N9-)IM*hJbF1(t^A%_61tk$nDV$b;4FhQ^hY_Fqeg{NJBa2eUd*=W|bYrcQm=% zsc9!B(b4d|Sg)^{D#@YR5cY$f68p@CmL8w#1MIN`)Khlw4K*{6$L0B$dL(nm`N?VjIEH_@kWX$%*_ws{>ap3|qtCS)p9HENJ8b0d77DsyC znc;S`A}8N6#DwD@t5sD5HdG`vEi%d>2gMqrfSuib82bt__jEl=BgT9(n5`&6sdg*+ zbF@s&>fOI2>;AIb+>5*HT8y6uJWB3^sR*cr_M%I%TazP(wyERUe z`#~)XE737&-gnvEzpVNVVY%42P*9R$7@pM`u{TtEKzoXc)RZ(UpzBH9Qy~Nd0}0;q zf8QZdaT z+DR|&YwxB^8eRtMnJ_tG3XX>x8UY3F!-~eb;g+4r#sCwOs`1{|zhE{!Cgf2GK^+T= z@g)zIqh*(Su*px1{sw`URz(?;rMt?>`#kDLah(IZGnR99P z7e`Y+uBB9ym*t2AbzsR)yhnto<21i3 zAbF9R)cI^uFNF%vQf>&8aX(loqd~joQ;Ycu$IPfO)$|FdT9ZnRX#Mf0JYxB0509Pr? zsrP4n20u&{0EqaomNgqx9lo~J;imiIfTEV%N)`xnfX?zWVY4-0-2nS1+JmP9_J$EE z57bV1_ZfB|on-Z;SAhVq=6%1RY3fH`v(qB=B11s(6v%ewM~dVpmd^o%NNiC5dQP;m zBK)=XmmGC`C+PELRz49;LCH#7X$%i+j#3xe79c*k-K1g%lmcrI@ce9j@ z+eSS|j@r#JNoU07z!cqs%1eTCY$C(T)Qrj7kYvFW)2$%lW?5P`uD^Www@}XHyQW4* zrNo!uqxftOQ;nj^djq|j*-qf!nC62em%n;f`!a*y{}#>t|Kq60kgb(NN_m7X3dQzO ztjedG!mcnDm6OK}_{V7&o$~sJ3k~WNO&uVJq7mj{Cylxf%18ph)CN*(ny@juMY}j) zF<|ag{*|%x(uPW9RzJ^az@7YMZ*qOw}#$={4)m+w0=6ESD)dil5A;6+rfLMgMM zr!MR{Q0m~%yrlW)cPi~J{h{A=!%aDKWM-YhE_!`$d8p6?UO3I2D3Tf1`etu={D17d zXIPWnwl%DX1r$+=2vQWKNmGzs6%mmtC`bqCge1~?6Gf#;5r`3j(nKWm1QH-3Nbe;9 zLPGC^&_XY7e9GR>xA)=v|E}x&3UK9St}@r0V~jP|x~XO+F;p`LuBJ0$k~3J6%zOnDeX{;`*6zL(jlEI<*!u;Q0El*hqH&IPx}dRDNYq{{ zMv0$9;_9ggc(X?sIn>wXx_u8+Jtr@R4aullMLSMnEG>Z!IG*>NBcA!um)*W8dLC}t z9fo-`Zy_TKFp8V@zDHu1GdIqB(!a$+|JrVeglyH3Aqa}@3p2@sTtErzY!;WyWC9wt z-OIM$E)ovo=|b_8Gxdc%rQQed-0#xg$?xA|_V-Vb z8W}jy!AI>LkWm=|QEvp;_qF&KJ0~y6sLZ)igVS5U7ACgdY}CY*1h1|}2~U0lU@ic9 zgFTBWKC?fL%k}iJ1SL#(sHuf7606O2Hpyh)OFCz==obe|1-$qG7am^!;gxvm?X>D~ zI8^nLk+)hXAot2cMLzY=1^(BsSP3knLv#ErdRiAoQJSNpP!RnKf+uriZuXfMq^$Qv zU#`#$R)HF#*%KvRem}W(Vkf0_s9(H!2E;)odHz~h$ol#Hid^8=JPoUx?HX|pw?o4$ z@n|wI86c*t@u=lg>c>@v;=3+y!PD5*qKnsmVMj)E5{oCi`rxTqh})Zd`z7JBKZtz!P7^pM*4hp)Zn zXe&THblo84(V^nzA|l`W)&+jRhvx^2-vE;;Fe@RAIL_OYG3eBwW3VV}x6R8TC-C8r zw$ctvaYwClG-k)=zAc5F&A9bfuL_8pAwK3xFu8ocE`bMH_~r(a&_%NlBJ=jEqtIcf zYS@|ep=dwMWOT?dtf2CVWe6~)kLdOW=`sYlo;^J;N1QnTAgSv z*wcN9@Pr2jP|gv18{9cV8wTHzpv&Jr^4g9O&VN0O63v(b>_JvnuFT0}%5?VpxzE-rvK>DPxgVpEW1%vHYtrbW#ywJ3 z6}-+7nZ=z9@0Ctwp)xEMCZi)si>I0O?D}ks<@G7vv69(0%2+7Ih1zIU%@&TMAG+Gb z9F}+XOXmAkq3#u7DRMHsG7;kyxpkJ6xrrJTK`Z67Dr~10;tr3OT^&@Fk zs49|b2mPx)@qe+yMIC>lTNc~VaTLWzwIj-({=Y0(>dtN3X6*IqBWLkymnhW^==REu zqwV->WMuiEnkOukO~p%gQ0@HBEKp)LLdC3!S<_oE3FB{x5zd za5uv@eEV~6ri_0~Qq-%~EQ_`v5T%&7_Z0u^$kDkVOGm?BAU1A4|8jQG*U<1FO$TcC z^LwEdraOgY<+z8_5$&fE@W8T~h4jy+blDI2E!cc+72;s&f@@TDUDAD8Xoj_$^=PF* zU8HF4ZoCXzq-U8rqX7>4!9=u*^G){Ei7%M#N5{(|slkHnm-FP+Bdi{$rB|maNctTt6Gtu_L3(O9`63&`NqeN3&%e#IK%Rd(!o#Wh z-!-cK$C4W#ekA@D{GFZd$x&bQd4%_=W>D)Gr=!O2xL-KZ%xhk%89~QLx1;sH*VJJD z_|t>)G)J1zrUq|BLKxx_e|0X8E1!KYtQxcz47sUe#y$t^c`k z$elUT%)N_(LP=o~|J{x=m%bkA+f5;y%=+heKU{waYc&1qpENO2M{!SaPt|>A{A`~5=Y(XjcCAVsXm4)`Ec^vz{)!H&!Bkh7Y4o#Z`OioGHIza3 zsU8{k$?5!mI6}r2?fQelG5vYBIeDP%UpjKw-fsldx%Ttxf42Lfu)Z9xeD<+n3>bZ?Ht82W8ACeYg$GD@izRj-9KPhiZ&7ObpH+GZkb)s8~n zg7?C{x2KMvF?S;vg+6%P%=MF;RQvqC5l19mi$VJ|sT?f7=_w3(J?!7>wK^;;-YSd< zco3T$bEkBSv1ta3>JL~_+YHgG*)IS;G&9TJTWl7X-08IBHx%xq48dy-E^ViT1Zd}2 zJ$d>n_qE!Q7*fzEj7l4?jBF<^s$5;A6owE=uPA51M0U_TEyR5u$nt(g5=A%;5-V-* zYT6dP9WENPTHKv!yU_Ybt4*@5XL-!h`7iPgfGSM{`fcE}o{y{@)oZF6a_>TusSp$? z4NN%OpQ z#hywnVyiiFn??1i%`{Ss`WCOU`pNl+)QIvH+>%|W&OCgI{JYA%+kla6V0h|a*qLO#sZQigioSaUGQ=;b!m@3)B~`{2q2=txpnxSr;~ zT+^6Zc6(bYSlR!6%jt9LL&P9(skz6BoPmM#k0gxqTP4igv#5@O6r1Z0T0#$|O1vpr ztCi4(0Ftn!l>n;)fy(2n;szchpZ+J4=V~=HiBXMI?PAnxNqiQjnm}zV)0q)(tStvVW8TtD32dnD&S`8H2xM5I%B4X{1z2wzKY z6gVoA9H&L`EqD9J>o7i0Szpn7Rw7|*88^Xm=p8@2joWOIsaatl7dd?NUxT6NLj2izWv-zz2+_~FYnU+8JAt6l8@g)Ic$=&SF;^?RBjDbjSTIGr6w)W zx%6xYi#dTDXl^d{rQTd-ijkdY>SiMwPt)$gULpJi0qbB!-fTAh=g7@kgzYe@8-b!W zOuSGJr`{4tFycS5OVhg_OEV}3>N~u;+S0`VzJuQ@C4zxQJdR4Ko%6GEod3iXB{z#a z)0)PmcuCzdKmFqX;uj$b*YnZY9{;cxX?nFdR{Jr}&C_rG*&n5gT@b3gB7=-9OJ(}> z|4qEVzt<&9Q;A|P%%aIvVuF)cEa{_|n5*4_shgu7{5!g2ygykM7^7mSd?4$Y zW;MhgtQ7YTRxn!}N{prq4)TJB+4j2{QDRqG^$j&Ff5T}RncJdKRBlkZwDrSza3Hf> z@6q5hXQv|(T+_$U35V}rO7T(;J3YH=%5$p3R)TaaF6=8;0&(zJ507<-wX#On;y*-_ zuzSp1SE^kGKTh&-GIdM;Q(@G7_`^-oNc>6Xom3qACRl6{)t#@5{XHZLU-lh_e9GQ1 zA81qg1b^0ve-5T$hWo3x#MyETq{GnRk=r~~#qb(x_(!H!CDPS*{se<>m$SEPm>J&r zibE)xq~3-J2)wlU7p^%w8zZ*=aY)`URbK+r$(FgG6jmuo)i^2-0y>k@|LqL&C(G)i zI~?>Z*H0A;B{wG&m~26!e-$&-R-Jgm|97)gPbR~olGm2OFY~gMJR6EmC5xO{KY2Xp zS|nTM&QHkn9mQGrZ8hw;`9C&9u6UH3eQE1Idz(Jb}guZhdZ zIO&;Fb!w%(;N6?g3#oE2r=LFmfDe-~swj>L0h^4fv$&TaG<*Kk99@36WngoI$lj~8 zjSd;wwd#q7;(tA%pG9L@QwI~`33*GUT&e1ug+FcoZu+q>0}7wpuWlnlxag{`LJng9C1p*XvQ|8l5(T`nwrVF7!{^@n<7bIc~LF%!{g@7Ej zPsC-eq4HFu)s4#TgJ(@GHa2I3Nk7mrCL|+#BGuWN|R2U8|%xfd6ipHO(J%_1jpLRnG%8KMM_ZD2)Q-9NS-U zgWmYZC6*kyFF#bp+ojoMd?Mno>{ZEK@)P^^HfoffkWEu^VOeLJbf-1Hzt77#qT;7y zo0NA|n~ZrD^E&F~NikyVmWIyA)(k6gK}&)dkSoVB$K+Dsc}-GVQCpf#jV9Zd05jS^ z2|Unz6JX-Em}qJH6a#K5W5;R4jnIx`-w)Fg*@2F5u-T{*a$L@&N7iaScGxkt`_qZi zJ}wKvwbR4mYi$Q#uKD8*k?S0Nhv2yt{4R@$`((!t<$T7tgkKoOn%KtkWmXf0fJgRi zm%+Yr+xKt5m>sHRIW@~ln7z@PYv-?Y%GD=u^v*@&n3X%Yz6PI>^I~Do&!Q>Q z*{Ekb1@b{*ba=CNW~R)6qOz8OFh2K9kAj|IY`^!gq9H6~?!8L$9pks4pUXekVA0Jz z{cr5tCdjClFPI~7aLXGWox2dF8zVa&CMX;0PNXERro$Xr{Z(?~lZSTbfspf(pfMj< z4rCeLl@UC=#Adf*ro`CY*j8mS&!M4NdV@0P3tN=yx(t0XMb^X2-_N%P`&1u$KfE!t zBvI+=vNyD-yd*y{NMNk~lNISN(}W$43T+gT+!J~A5^mdsEJ7GBHeHRm^j z(odZJWUah1yu$UTv=Bxk2Lm$8(i{DQzIUCaVUHkG7tN&m#E*%rmq}tuVQ8@&R3S6al7e~L1}t7lfX z^sQY_b1FkA7BU;xIvmNC^=(q-9i^*v-d;1j=Gc3VwuQmr{sA$}t!HHSD$$S-Z!LD!R0sR z7;+}73P|JKqIp;B-56>EFS*Te{Ei73vb3o{L(ZA_%zp>cS(c_-iydZ|(9lXV+jdU{ zlA;s7qiYEIcnN2N8||VU40cNE%8~3W*BQyShHj_9+t2a65J3@{5_Wgb(xcOk@4Rg- zH#YI_OR|@HkwWK_N$FbnsI9b~nZu2`U7W0!=W8&{Rb%n(4L@OTZ5eNHI5JXtns_DT zhOi7?t7KrFfI;uamH7642rFN;uz$J%3hAgaf6uWokFw|aWXn)yyr@uDTHJoW5M+Aw z!|F@Fi_fb!$CL(lpYZpGW3>oN;%})hU$gRj5cGBA)`GHyWIGa}6G^@~=BBYNo2U=9 z)&A%VU#LR7a`XwB7!rGOyF++0FWWUC1%6ABw=r>p{r0Zs$tehe;MCF`&2gcCkKEa? zNoMvY4e}~n3CHs@cJtn=G&?ix;n@CXvZjABn$?C7(ie`1`8UQ2l@ip|NaXZxogIj| zX(&z6%6&!yEX+aj-RLtJ>$o~heP@X89beq95{ScLj)f>5)T}K*cUR(Wp!IfA zWUmBZVOUT92YlD-^(0){EL4oAdg!S}l_;l@^4ehj8_@Sg?wudpMHu^+&TG%rAKfB6 z<`?#6L`HP#0Tr}@yM3RwM7xO=7?c~=Esfe!YD*WV9&_41H4pRt+IOQGVc&Jb#LYE< zB5RaP6#MYG(EurpbDNSY&GN?ac6MNHe>0wT80DS2EY+zEWjxAxfi)!bv7q~>s~yC*Et3eu{!Y>*h@C2at@pq5<47dln;aCjr1-e0H_@SF~r5X^U<{yJ8I`rIB+TpNN4 z?gz~5w78p8-{idPZLG)6#t;geGL1+VmjKzU`|AYD{9?CyUn$9xq=oBmYO#f_dz2Far>Zpmy8{}qtZ@b+XaIj76!qmQY!q>4)Kb8^`hhNvLAuAZjt@Ok&M zNB`Uycl%}B=ldtt)4{p;`Ejzsj>Y(lIg)Ql>9FRkS1R9OME~w}|7nP0R!+_X>a|G$ z7!Q9DmoSUzAQ7r!AT)0~IqGjkW$c?edfsu(hws)GdgoM3{Q+aBInm}C93xJ5L}8}d zt=?Rw`tyLy?yMG0SNh<i$ls zk@^<(QABCY%@V)7KI9YrQ&ZEYQY8G+MF_WU6`3~s`5fAJz=fFYNTwD_YU&A`QvBEaFggg*g<~aPB#W-apllI)dZx)@iv zmF1vh)eNwXDD|0AKT0wO#_kiIZYQ@9RD>xOXD%k@2FaVYG;Db6b+PjLsNin41K+KM z?rNCYZ;SF7RFZ3dT(D4cCi~d7EG`upBLh3cxq{|(0#Cqg_tVzM3Y6)>aE=C;!ZJtoT%Lj=OkX$iXDbrNWyVh z%${8A4>)hunj1}6O1%yGN%;jnc_h<01LLteKVJ(gLI7GwV_eE;HutF%bFun8GQN(NTH?-Ch5if zd#n@nPffpM4!;_k_PdLh2RFz)SqM9wB3EhiC;}LJ#mhxAxw|gB6@H%z(SCw7LgC5q zWx1hC=BIusFmhy^el?4I<;&=A?^9OntdU4sfo)b^-SaON^1)zrxzkNl&(c66;G{ex7i^=GUCOc02Nn zR=ywGy?4*TmjPnPPX5k2RP_9)JoVS5Bu7qPC~CUfT@(}by2~^@+nd7MyzcM`e#L8P z&}sfH6mP&Uj#|niB~G$wz#j=#j<@s6Ot8YZC!@A8`~aLm?hRtNWFd{*i_G`$BU}4zDtdH&=!lOoOcrDku*#H2L6DJEh?N0 z5@kTPyc`^hrp{+4pjT=3`*I3TvOPH_z8tU99Ve=i5T88_icGU*aP3`lj=kHOAp$@> z#UjjkS=}E#SUUXBbk$J8p1`H#vO6$#_&z>U;L%)cu03f5!X)95aGl>k>}>hNg1qa& z4c2R31Xpm57uvZy&PeD(IYVYv&iF}_gB^!FrLEMeA%pArW@0J1P>e`+04!w{n`VF} ziHQg54sM_CMLvRdyY?UT!vh5_H9RSma8q?ncAKkdi7lq;yjp(?Yw-$v4bjUUF@_Yss^&9+%~ z5IfLGySSp^$p7-q{RReU8=pCAlX5kHhk#}N#Wj+1?)hZWo0oW99wRY@^REqeMCsm4 zmC)^L1D9fx7BC_`*G3>FVx3?q@$MUkRgmND7+Jfamm!xh9`VocRj^*kw$6zP!2MI{ zHXxMAb$24K$1$0frsKRjrB&XJ>#3BA^?>T;X(>kt3|y!r0#I?1sl`;5+~YEENH{eTUf7rhDb>(~S7mSu?wU_|*QbHWV`PT2fKc{^(n-n6P3cGE)Yba`Q z!ol5SAaJEqxW17tB%gle*yT0Ni%k?SLwAGNgtULKzED-zrO^lW0%PlV2X#mJB<_yX z*#40Yino6thj!s^`FF()O|nz|PLNtodxhnCL^uNRs8>3q$_kCY;qA~}$cK;+G~?;40K(}8^B)B#y4!Z~f%S?y_YTMo+v*e5LXsFZs8@h@D*FUi_u2%P z>x_T}^84q8A;fbSolE<3yth`V=55i|U6P|2(&K~O;E;54PbS?@FYnE~kj4?eXvuJO#~5+TMCZW|ed$um7`JatUys+8qJfeP zV3nC7^MDQO!NJ*&x4DONB)?bxGLZlEG*+EzMb8bm;L;mxLFLHZIlFdukNuC^qk^Vk z*$Yf+EY*;l4uig1;e1*&@LT3SbM&M{e3?-NymwSa@Z8e5cn`uQmRB(STfln@es91j z^Pdfw)F$h|(7_ce62;mS5qxt(+16fuT%1RgU^D*~Q1F7G2&%vYj?G&z=QH>uGeHHH zk8?8%P|jgKk{vAxl<8kFPC}5`_d0XTjjP1sIFs;Y?K%*<9b>bXAmkL$Qu9)4v7Nu9 zE-pqMT(#xO&VJtaxN{G{KxyCI&)uU_3%(^IgB@wz*{wvjz_&h^qRS%R5~J?2aWxiU zuTOW6g8J_04U1iB2~ZkT*|sfFs_Rd8h61g=Ya9!!5uj#)%?>#YYJs4i;E(UMii$$# z=&1BsP(Lj25c*}JHzU`iRl89X)xj7(ZnRdEOVfM})xqNRdR9Jj=oL~a?>fBvr+pCw zxPWtw<;jFgmgbcg)Oh(n&)|Z0nnJxCHtA@4pMoJ5201kzy&ZncPYJ-QFGL8uA)r9! z5w)H{z4grVk_UI{Rj`mTgvl73eF_d4fpbj25g)RVP^g>oC6%gKTfoc%P>q=MbiQ`&D?+e4hQX4*Z^e-mi3-2oz}e(T^C z?d7*zQtG&2PJJ!BTl-!|na(arGou=i0=j77Uy_Dlu%ZI0u)s^yJ@c8;x&f-Vpm*jL zph)kN!+9p^U^Kl`y|$;*4S9dC*y_tdtqBUg$}*CSiwl4GBIHLUsPqG%d*xa9DlE!1 z_)gJcq!llpAODV=8P6rix)fQ^@aLuka}CtKIbNaq{UGD3g;=qq?VQ*x#lfxxV870r zf-rB&SniEpYyV$ka}M4<%Ozi?9svf@oNpC;E+?~Mj4e`}VMK*f8!^#jv9aR(`;iL{ zpSb+R!;1Va@@L$S%-4zd2n~rfOWnGsKhrKNoNFn%=JU)U*vhw3am8{uMi%^0+28@A zjQCaoNG5oi?VSnl=l6LhEuTNicqvyblsj>Q&AJRA?HndL3WO&jYDxRH}v># zlB|CHeLqGB9y-XE8bj)#K;Q&vOPn`C+Su>1*~6u;&P(5X(h=>^-KH9QRdpM;_TJOA zNakJVmcOYLM@-Wfwy4`23X95e8OV0Hv}#Y(Q4Cs|;1@3d+$n9=!a)mr1ImG5yf+}D zdVGL&`a$-ApaBN;a_&z$R$w8NY-y^-FoG?gK^^6r?=6eSotH3T+adtgp~C>*wk~1jh{;aKPIo z`T|K{uWhmD;A}5K9Qy|t_oN>Fs@XMC{9XAl>lO9|DmAch&+`v7)nyR|+Shq^HdRaO z&Kb#4%Y8n$sIp-16f0H~CB=ldlE7O9T$Mjx^j6)@ z?hDrx@p1z?0(x(C_dU}~*Rjm=!s*0#0UmZ=PU3TuYT*yYt(c>9L!(0{C=ERS}8hTk4wM{yrEdO0e927Wij=^Z{B2pi%z2_g22%- z?9I18DFnEYM zrC?&(=`Y^$d(WY%CRDTxtK>K|J%Fe?%gF4w)qv$Yxmd?1(zBzqa)SJ7`EhuYN4tjO z7N;+BXUEXw72Lk55%+FZ?4xgg<~L=8g}#%;_MEW&!B#jGh(C8uoP9-ZZo*1jL(1pGD40YPXyJIG6(BUNY>T>I zy3&3ie+bYU;y=e~QhHssYlCd|Uh`H#?Khw|GPy!7euzLkx6)xUeo#Dr;E&eBfN|fK z*MYS%{fo};SPuEq4^kzz9}T3vy%1-Tk37M(&orbeYp}#mf0n*O#9Q*iXZ$>R2@toRFlT9y3m-}$pMNX_i2qg63 z5=3cM$Ah`mBcPnrp_#8;nXI|G%=3VDQvq&bMB)|^O-roVzxDyL7>IS|Ed)u*47=)` z>(OeD-W<%;_yo*HXj#LouAM$BO#>s;6UPuLtDoZLBoj-gUY zaf5B&Cq-G0O{FL*7;wzS>7w$oXEL}Ij3xW~9tKC?_Ljev+GFthU&nMVYv&}eL(~UACR-89{W72vE zMkpvpTi`2)%!3?yl5^VL<+JUZ;skeTuRA*iU0pkU>dn{(26pU4m8xr~&d^Ru zz|dkT8maR9-gf;3LjLXGN##6Zsp`%4wgW1tAZmPHh?OuY4yf?j*!ZnnL5ahLZ1@<- z6jCY&G>r!jQyys>u-d4V+aPi7ng?%rU`dDw@#qnqpSF%V9){lP=LHm%Hevt@3{&~J zsXaHrv?H9og{<5Q-`Bz-a5AYb%80>fgmeKbH&AP-`$^L6AfoJ3yS~uTj4EVnrqk9^ z=ND`d;ZoJY!~L1;*dfBD^}rB|&+Bt>DTRM+YrR+beFoP<>@poSnLIv@!-wt)(!HT7 z(E>L|>8k?JqKRFowds_wY{NY&5eLgW%73;i6|_;d7>T7vo*e5yWb!;~{nUov@pS;E z$vi3}e(ilVyLPJTYJWE71FLBF1q^CYE>9#sWhbZ5uM`JWKoOPZPftypm%X>%6qhBj zZZOa4?66gMXSe9&7`)3AnV+O#xZ5YSughQw#^#*ODY!C^$mZumh;&G6=o24_1#M}H@>aVDT$J~|HNe6FH0N_Wv}wj@BoGN6-NgsQghuGhJk=`Zad^>Tpz z{`>o;x>A3uHpjxMsP*}s`MtH)7n;&kuVEOZeI8ZfnGfUJ(xd|JU7ewUoEnqw0)e0} znDxvu(!|aoUt{4U)NNtKBI!!uMO{f@bM4Ur8Jq9mwDil$Z+^?1iWT=GJHGl5qI(|; zEB0Qf_9u@;zkK2NFj&?U{!5;@TJpXgo_g|y)jRJCDo zz|rMZl_R`2^cSnC&pAmvNm~Ru?q&1y;G1(|HYng(tiT6zs&YO~Um%r={UvR?_lIcQ zlLS~v@26-2@BzSl{~EoJOFJuBD3ZTq$87WplSvhdFz`V5&4YW_#AWqDO53TTUwjws@oyro6b~9e zFw)VT)XDUcI%m) z@m_aBc|Vd^y!%>yNLEmZ-KlCvM`k$G(z9Q6x4Kb%qxz9RFj*x#5smMYl{;_?Il@j);)ke#w|6tg8DnO8L<865lEi=WcBzSvLXNMboA-B@&O1T*9M|#C$7U6W7yKr==7_=L zg^TY!o8k`=C-)nUD}k=axR+IpNZ++2NZopYceCYhdOh(bD$ofYVCYhx?_5|u+G!yO z&;q@GIt>mEcw@qYOsz80Rq!fuRbd&H4)`hLURycs&*c--q-rSU;2G287uEJa=8^g@ zYrma>^UgZ+rT^mI3|asKCkqGfiqVo<3HSHgzc_Do#3!nN4|JH4%X!M6&^I4TS?1qM zNHz>XE>=<|cE}$_5rB@!gLGthh;zdQA!pyGSm|gcrPCZuDUb!vgDl*nR{xCIt`|vi z$l;(PRm-Rq`8E3>;E`7Ttnd2BQ>h8H)#6$k!$tz<=Hh##<#uWJG|Xr}Aa{R3V|Ap4 z=n{1pFg4%H!)$d?KWuB^)J0m9@DHzE3!(HBkssxM7UEGUd0o2|+QZ0K7j~(M62nsx zQ((gP4$dX=C1)6i-{Xa>t%zMcd(5 zjU3uJ)p^r&t|`yBr_>?R6aLKBmO@$~)goIBsjzQJ+2VbtkrpB0j?iud{0d0-j#Pur zfQ6$=;O>;h9@Nb!PD#W=TII5DZ`)MjrKZTVaCf9dGH84b#Xgf=N2G2*@Sh^yS?hVc zJM}@SE`WN4>#*xuzr_g&)aM-1gHJx~61WnR;G&yb57LIwc1bC&#COpK0BkdcpeI93wDh-X%ar93m8tbGglFa?NSRl%(VW{hi?Q>E4rw!(mNAdS@m=zB z8|0~x@_aVUev?i-IGPIc0A~Huxliyz%GhGkvqlCP3qFI5;B|A?Jz|G~igW1Ule*kL zG|4lh{h`T#*gYbOP&jm8knW^t(Y8zb+`=C(MHC3YBg~LyZj1Ef?SrV(#WC$CERc&` zGub+hVFK;-Sg+ReR*oc`m!z)aAZrj(eW35D<`4{fk^G`e=d#>0Y^uy@+7EKY1bsuT zjEbRkpH#6Z+RBY@#-wy|1*W#s zai-S+-$5N{#kCu+Ps2kA-h0kJXMR}A_nHh4&cQ5d%L>}1 zwE~uYt7kE5%q_A1Di@NdzU}ZUvE!IhX7TJ9ZF;>j%&?n@yPqafh)4oC3mYI|ifgEl4&-#~UkaGYm-G z@M)*#QMpgHXA-Su3d!Qg(7SxI#NkZ<76~-+y>l*(e0%5FVQe;Iiv^W~?El`V+Q)wr zzdX;xABgeye8l`H5Ec}klZbeFK_TB{ZN;{Jzc~1k&@fBbcCXk>sueR zI!7NQm4h~`O!y&pS`(h0W_tM?1K(8CXa^fZ^SQUwa#eVJz`I8G1}}1{9qK1eqKqm$ zM4ac}I?7|;Rx}g;hmLN)S)?ni)GYOwV5krk^P4v7e?^KEB z*3Ip^`*LAH!Oru?{Z`}ZXbOM5fs4eWVP|V}Q%0Doy@9x5fLS4FyU##(UngabD)aeP z$z~W;L^Q)OP@?zrNh^%@$3vt_FKI7CvLblKVJJtSlR^WK9zuzw?gc#QqLPNVQoWeB zfLy(_B};{8R4kIYXvpP8SkLPv3r|jDKt+Ndcg{;jKE(r5xdK!8CGUe0kN{76TU05>|E+?$8do$TGz&~i_msjT9 ztpEq?N{zAlqnmAvae0Z0;s|Ncw37MOoZ)v6uByNHDR@v9OEb;n5%{gux{}4}+a=!U zJi+QI4T+Mn&s6%*ElSb~UP~A*&M~kA%BmU3eB#$TbSp}_Q+1O~SKjbDFgN&y77Ty2 z{4`IZv6+jVSL@WO=UPg(Cwa}i-8mr3v$3~iV@tbxr}?6DVu^lK-$(Wd$D|tZa{SWj zy#?>yFFXYX^Gcil+HzPAF?zr)>60Xtt;KXnat*2Mp53<;d^Mxf#6WU2XuHThqYt$I zz=Zaz8^VR_T_h#FvmvInSIAeRKL6f41R?cjc#Ee+dDxFMI zFWBoLpy!~4muq!j_*C;it&Pd-$Y)MPaai9BeeFR33J{D&K~;( zEmSQO>o&JRt)!kvaV`6`2?NKijf0=oe7=`e~laQ)Xql$cUE$cZJ(dOrm;sy|<$r9{9OU_$S1=aIg z;B3&EJzXiZyyzZvgVlaGKfkJwP9}C8Pc1+LN1ITvG!V0uuTMVg@fXAWOsYi&tLsg@ z>rK|sQ;+h_DdoILs7MX}4O< z84fL!{5S+Ffa91z>`cH{h2Ttr@@r-fMBZY5kwt1J`kQ2A3clabDVGdy&D_E`=Ii

$@^@JUyQrz|u7D#(R_=Zdp1hE~o#`^DMO#Mj~ zLgl^!hOnSq)~+s-@U3ZVeeOJJOTOS;!4laM?TUTYc}LJEPQKy;n`m^DXsS_(YuQOy zB)mLrm-9uFb}K0){4L#5mAd1X1qShbcHGWD8{)$qnf^ZZ2@V5fGi@Oh)ee*h>CuuP ze{5BE9YfP~1MhB`8ww8(d8ebLw|f{)=v+QPKRaXLLzN9Isvmyq@F#L7fP-7EAc<#6 zD>H`!zQdl&G!8p~Vx1id1jJFGK?VB_1Y^g$nCro2qI#K97%7ng5fgHdXE~I;WB-ec z+@dLt(qyt0FmNv3kc~fGElsLmW_flS3)RUv3sYFPIG23I95rN4`C%bb%&GFc2=W=^ zun+Z-b_06F)TTmJ$tJ!l;{UCl(={)H4oVmH5z?mR$ z7$hHmtP+ji$f7>hSyA`MFLi-raOwyBztGMfDeA9l(b5;ynjef3giDhWt?xYRLaqa3 zVdjj+cwM_@dwpU7n`p^JZS>9)MdJW4(*814RwmImhdaDBPOJIRXNfg_%M=2P(7BfM ztyclZcX|q{;F#w_l)dwU-~X3$ckvAzT)H-Bf5oGqv^jrdui(3Rz}LpR+XIxiXKL%e z3qifQm;s4^Q26n^3LwhD1$t_Ux;OTMKs(+X#g;%;s51isMtWRbH0_FBJxZL{tEXJ# z*r1Ew&ztC8z5cY9UyHC&#Hsh~A@gmD^0YS3^?aRnat2~vXyUtMPJR{J1-(iBFq6_PY3D2?zYPZR51ya1`s(Qo8ie5v&s{?t}|+)o$kEH(M!g= zSd2KeY%fG)&f&EN^31{apsjscmGJVv#F>AcTK1&Vx2@V1uA`kX zJ>mZzVo|enzWZvRNpC?3Vu~s6y_$skVPOwK)S@`E(W|vEkJE*SEykO!?Y#^xY)t_6 z8w704 z2&>?s$9acNMaDA(70-QB2iF>prPHf>9go9+BQ>L`Rm-(PVP4g2fiB;pIa$mZ11Bdt z9iJc-yctiWjln4!l+03x5Y$KzRRa7tVpDLJn=VaX=>?^C#O>~8{EL|Ed?Vi+sRl!& zM~ph&Q?9r;2P@@6nIm-t8k{B+22*!se)V5EtO^YHv|##n+j}osK$3bBOxy6lH(7FR zyusq*G)9ly z@N(wk%E{C@%~+;nD+SXli| zC!FXQ+(_!}FDwAgouv@ZfkPU~iLXk$M|mLuM4R|_t?Zg?iR{=4Dnu0V+YAKf`0RPF zwYRIxP>aKW`P>1|rd@+?eV&ZuHliX!5m=e(O-5yoD$Lqa%1<UB^f031rZp+Vs29 z_Qc%}8<#Bl%TuptiP4G2zwrsujD@Dk2MbZF!4~g=Tk_v@GPt5W2hgjJ>gq=ke^Tue zc!xNEw7u>rTFbi9M$UL+m06w&LP`$zdx1k)?T>h-5uL8zP#63T4qa`wWA zQBmL+=!C6*G=}HqC+WFBH_w0QCpjR3*E^rpvs@}nW8Y|r^tD95LV9O+(&k;FR2ZA% zdVw=8oA~n(riZXJX<3`;@{yd~C>SBF>M%VJ<_v>?aEZlyDw}qTl78o2FYm)G&~|O9 z6;~A5erB*wXtIr>1@`>o;Lv+4gU@5}$8 z?Ee2tNfbg-go+3u#*%$4S(AO2J&m#N3~iEIw#YWNtl35kgT|KZYql8-ql}#~c3H-J zuI}#7{i*lk-S;2(&M((ok83~Yyv{kV=j-)+p6*o^E%waeE4MAPO0kruzVRgQBucKH zaqZXBZLposYFe9Q{(w^65YE_7lRf%2@^pT!PlU|BIX+K`O2J!KY+noT-z;f@SSr;n zkGrSig>@!`Vj6=SfeaF*Jr(1`j>&urP2E?kRdSq%%Amx%uRdut&R_$KK>TdG# zZd`Hcs4~`q%ynh|dH1~Sxv%4VFA>QHc3(es)(4cY#DNP;`s`g}o-gxM<60{u;V@gN z_*w-zc=`m4B~n9`t))u&`RGI_5`ZZ zd@UuDyRIO_2ha`mY@1znF#qhxOOUrGu5b z&J4z54CdG{bJw`kL2|4|+^&PsSY*Y+ul1hVSo)zv?(#&@fwA?2&?#|qoI+u~_p8cO z)6x8rSLhup^r3@kP%zTqMRZq32S?n~d?R1{1>s@3$HKz2-9xm-xrvjft2&-trSIyP ztNKJrg$j*%rC0StloC=mLX+Nbg^JmwUB9|`tGdf2UKCNbcY>G%ehC+W_E9fv)>zzj zsg{Z^J>Je4x8Lzr4|VYL$;J&tuH%}tDcU{2J+mOi^SYyH#VpfP0`u&N5>m#1TiHY- zakUBhxHFqpji(?%aR4v4C}|Q>M~)o4IcpV!VtDjcPao;{&m_7Km`0(vNW7f~QH2hM zm5{ZpcNK(tce;*-eRnQh_f#6X9|c3F#F+Q=_)59OmB{&jtg`5K{>*QG5C`P+x=kbk zIfbdRMnd0{^H#bl$=^s8aLC0GpXgqffOPGnlt{-Pv+R?Jo_j~k&+S*fe%O;65PBCI zH?VP|t-{w)H9Jq=0&)%PmwFJFDvgtF(A&gki#GuQ8jY;)?QDX^j226(nIO;6LL8Bk z#GV_2XK{k@sn`mrGft_!lkMBa&e61ndE~PI%wD$^kRHH_)zdZ^k~e|_0KKo7K_31R` zswx&oZN@|^{(DOVuhz&{CZa#h98)}%XXS&Wu0a`kjo_`~O!YF?Q(PL02YZ$MdU^WqnjcoR z;d@Scl9qxUbL@+Q0l~7)cElU9-So#!vR6VG*UWe)1{6Pq2lk1Z@nt#qk3aUwcwis{ zj>mBIZ2K??9>HQ5O*!<90}`ll8A}piZG2K)YMWKc1^rOj>%r*M8Rmk3s!mG?pM&l+ za@pDZJ^4JSq4HiXeA%HDE7N;u4WgBB9`FG$Pr;!! zSW3Uzs@CaDAa&z>nf&fm{Y;cch&%Qht-2gf2$-O+m5C&!NMQA*#0J>Zyuu4%xZ2B- zdHKuH6TEmjS=$C4^wtixh)dy3*B8wr9!u+9t^IwQsl<)>1590V9mZSuvN=1uCoY+J$*#PO8$izNan0P zuqGKY!1mCHUNp~_E){l>C!FZ8jnjwNRGYGufm-HXjm3TtpN zl96x53G&@icnFBL)Zsn#K)c{s+2}6=9{DfSkHHex2kuPeiHz6bukt;Fiy|6W%Bblo z+v!CN^C2JB9eF-t)J5H~|b=V!!A%wJu z$x20|%TiOYaspLbdCHu#V;EL>DgB8Sf#hJiy^SgFAktfzMYy9&pojwqz`88d6L&h?r<&#S`LQI9PJD^?XDmi z32;j_``0NWoQ>Zh>&t&$e=BoUtPEhCi3j_>y|8D9weDhyiV&|M ziSojMv@>LpJ}#*iL{<^9H0BbBfex|-8aA>xjK5yaYnVP$@%?>a_~d{Ot50a8_U*=l z97gbHJ%W6*%q6BlrAgR1=Up96*K@q3dzRVww&mkzcQwc2n5gSO)F?{?%5qlY@SN0* zWVD2N&5BzRyuN^x(Xrx6e70cIv>HBy%sgTIh(Oa^rCMP{-SC3l`tEvPL%em6}?tWz_3}Jnm3z$+S z)8Q8C&C$~h10N)$Ea=q3OJeH&<(a4kAY>nwiCss4;PKr<^5>l}2BdgRN z5AXLTAVYw(`>0J-q$Wm~@Sncq-=ATxc}0Ar7oD;3-nu>_8@DhbVJAED9zmeV9~$}U z+e_nD72tgwk!_g^jKzihujo+_$%Nsx;S2J+j$a8>Ln%9jYV$PDEFp!Wmf$zlFtc)N zAz0w!73xj`>wBuO(Q;a8&Ri^9R~d}Cy{$V`#fw^#`-fKadnrP-v+keT418k=Y7;l< z;Z8hDHipo!APB z?~nhA(f>>A{&8^ykm#97X>NQGNc{vS1Mwm3z{`I-jDLOop9K^f^wfRTuao1KWUc>u z{@?!=P!yEnc1Nwo=nkeBvO)8pP&Ljo#{gq7;@5v!E&5M4){Uj0Wa?=|+Ty)U}ZRY#X+=c!y-jAAlm{; z65J3b@0d)F`^9i^e*k}WLJf8!T0NGT{ za0y@&4QybF5@j%~TceyqHSl`$3)Vtl<3{dGlyjZmxqlQ~TKM$qViLH{n0SmiSmwD? zq?(2)W;OkE0!5xeN>rP8ntcBBxP5O53z@|ikLVe{e*9Z+2AHgRD_3Fx(APz@#E<$% zI5$~OBGh+8d?T~JEFniN`kuZQLiV7iY}PBYw$DMG?N7A;BpLJS-U7`jn0po09gVXV z*5m2uJ^qnY4WR0J^2hdj&Yc>lzcQ-z`k>V}JHDk7!i;n*J@%n)b^i}>RYgh~{$$K? zrjBBY|K5@QXc+HkZV~Eq`!C~v(FXa=bk5zl2gFXF$wJQl%{%`6*iXaA(goH=IJ4a& z;`$o|`OB$Kp8!vcV?gq0%w zQROzYu(&uL->c>@cW1sksd2-H+Al*B4x^Bclj2y)S7;ERmpjZ#NS)#X3Gcr+j8VuG zc&FRJMv2jmzJK@WD!gznc@Mj8xHq4tFh9=s#VfhnhPA zh(RIqGaFjxaShQ`my;SpYjouOiT6c=?*VI<)Sq$q`c=QimxgFC=h7maOqP^8APXiP zk-F=lbnK$4si`p?>{Wgm3W(?_DJdCd%IX|?U*g+Ple*DE&RQj&45_=T7HgIfs@V_D zW3)e|_odPKtB`p1)^lP~$?=jKp~Y!kEOUKg#VF{i@eBZ}M9jLU%=y7xgyW~obsm5^ zvMuMx3RA>nGNEzdyE_pV9SU8-uv;IDTYCc%R6^tU*`{ZdxXFq%W)jH{YO!*MrFaBDAxwN z5GvWN>Ro`Xw6A*p`;n_eXk^1qRhf5Xb(II<{P)_P)-`g$-oX|u)Ed3sCqwjhnW!np z#}HirpNle>VFj-_=hvH~5LkmJyAiFP6u<8~79Dz0{ff=8u-pfF92*tcRXTS+=-(K6 zJWyn!d#P<8;lV?HgLdFZv`9ku`EyQZ>D4t`EA!-a1+ve_6`W--DAMt{oWNhH_#`%# zH#T=_jJvyDvX<9B+rJ;hr?Cz0wU{o5`y#9=;>7R||j@3r7@+K{nIhe&Ui zByPj2cg#02jU69ks5V`8Qk3_WNtL{khzVSal+n{I>J!jcs5w1{vI-jLo`RYCX_UDp zb@!e)CFKEHb83tgrsHrIRh>{Rv#Rr+6Blma!8pU1YR<_#Wi6qiNd~7SG8Z_krTc02 zXUOHbO*IS_?~3)j_!5&ErtXo4TD*J_-af|wq$SR)PE zqJ8XqG4076=%HKf;!D>zIAZ$-sj@HdzPvH9G+I;JM;xMaLNJtgLr^dYg2ly|Z^`hx zM^uvg(A6yJDCXpXHnbhm?r1bZnZPY4uufeSGoI31up}no)Mp?u*VJ&4`Ii2@*KFb% zFX}tHn+@YxX8(2 z!&Wv5E@HiY#k`;&=%7uZdMPkvv%{gLhVMhAR7;fRr6GacDJV)Sqd~FH(6DnS9W`6J z9UA|dfh%2FUvG;GC5gOxvqRD$>^e+l3UDe8~$u zXKW&A%~?H$xJ#YrZV~=U(LRcN9)4X|_(alD+EImx56><(4lzQz@& zGN=d?THgl;f+x;*?FhnVU@GC)1rDeMRnpG0FuxRx6qI*yZqYH(yMO(KRlBO$d|bzOAjvFKsiXoCPzGI}tD(X4;r%j|?IjW76D7*VTxDq71<>ZzT8Lf144;$M%h>)x@N zF3IPyeh2Agh1xjD)M|x(=}eP;&@Ri{F$Qu4G0QHp^EYt`D@Qz7jn`$`a2DsEhp<(iMNqE^K$@pBJ8ZVZZEb+x!)#LDn}X}QeXO(sRw;V;>$hZ*qp z&N|Bb5sTbhzO2XXlDJ~Y1ML;Up-!=PEeM+zS^z~xws#bcEy1?SFR~`LCBrJEly16+ zU0WMF+MUe^0zK1v1-n8gL2;6QyM4NHxORr>oGyGt+ z6N^(*{G~0i@6j?7&mVbN&=}pM_-Uq^5$`7}><83~8c%_jZujT4w^qgSr|Tca6emgr zOqB^sEoFfhNuf)%6|vvu7;2W0GBZ)VGPxy{2J;a`vD$3t?pSNOk%F7e?a_jzVaAR^v>! zKKi}q;N@AL@q}xnr*JcCjf8lVk(#`*bdG5RZ1g>Tj=y!VWNcNt{V!&LEvj^W)AHb2 z?gFbjupx^Dk+oV%-bj1H)y!Gdr#b@fAbrhFMvn@+w(h)MZ_z$G?B;dBMwjdjEz^4z z9NX9(AUdBXi5nbBf2+e+2#mhX?M+TFmH?gwKLZR0^qIzIADwelY{w~__w^1`)Vj9V zZ;(qNZr-V1j969pjD7R#ssAq2!Z)HRIYh+!#_H4~d!&46{Ixl`XO&X4^`k?&R|bz{ z%%`ll%Q3f{J_VUAPnGi zLM!l4sJrbo8&|)e^>x85D2wA&-)7G}`KxL&bG!46#`6#7VAgY1e&-|`=;;NT`VQ&s zA*)>zQ19n4t<%wa+%NbKfI zzQ*0d>P&fRL~uG}n#UlLp!hUxVt!lNDG5<*7k+Y&bXYKn3?HRVu$??Tj8ltxGjB8_ zt?)G&8n-hww!d>NLM}eZT~o`i2g5S{`kJV)m%UP!$Z;l4N9UV&UCNo9&FlgmX6~MR z#YP+%%j@zW5hoqR)E1N{Ui|d|`i`QdFHB=^v&J36-4dmM|AtLS9o>^KyNpdZ2GP-1 zKGG?uU-u)anFV^eIoKBDHQeX*e%DLQY$KDVShLf9nN!^?w;W?~6g(g@W%6n4e`UXZ zbD$iBSIPYhGcc@a|DlN%#7rTlL-ONp!%J zksRg!3FiF=DDvv%G4{;?-T6POeK#;?+2N`U?|=HE514&bu{~I9Sn7|`UVTh;mQx6{SP}mr7Zve diff --git a/Docs/images/replace_entire_subrange.png b/Docs/images/replace_entire_subrange.png deleted file mode 100644 index 59e883e69c3630850fab65b543dede371f440632..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64227 zcmeFZcTiNz7B@;15djqektk8(2uO|s5(Ok@P)U+=mLvj_Gegcf4LK)8Ni*aehcsju z2?H{uH=cXXIo@;i`{TWOe|%M!DyZGPyL+!*z0z;3y$N}#B!hqJ;Vm>YG<-Q(DOEHy z>|-=E48fZ>P(81)`&7`-ZgpBnO1_knl%#p-XlG_&ZHk5_8*aP?4dX$YV z5p&OSQ#DTklr0O&xp(ho_J`>Aq4+VM?o!~<(q<8C-u(F9I6DHn>J>Q_-ZWD$O;&gS zHaW|YAH(i$#)8PX*ha=F_;mk#@pQorE^v(|{_yqT8Cj(;TC#8q&HPXt2|1~9mmC_F zy*SCRzhE50n%9S*8|YF_Qyn|r)Li5vlt)|o*FM)B^8V>;Cg^B^v}s>Rs=4lp28P>` z7|~#$Y509XXoh|t(+{qUMPt6R%smE4hGkeNrNE%(>rz2pk1p<_35WFEw@0JNj^Sqy z{`%}N`uJ}BT2+(q2fDkirukemH-WU)iOI=41C%$(87|eR2BD6Oa!y>y6wE^>Ty(8` zTD?QBDz3zUtG=wSuzwZyK?Rl~M&W3IMqD87W=IV&&i~P=OCa-hZ)z-&b z@7jCSQsOf23L5zaWj^JAghY$7O7Koo6mnupY#e=%pTd!PuTFDAxbsGzI9jYYNiQ0$ zIOd`s-Uq*^i#Hf1ULRw%LJCs9^{;?P>;;NxQ*azZV=Zn|fj@_v*;tt3bRH+CU9Q;` zbDQJm7-mM9x}hy;f4~wr;w+#-vl&9qYR!z=YI{}>CO{iJsr>RjZD#to9{YhfmZLas z5juMoPPm^yJcNIlW;#dC+rH@U;#%T?Yh!zKTW_Znv! zli&m0vgs3?!62t)40m#Uf~iiKWwY-X?=ahO6qbPBux@3Uyi|`T=%;}B9ZCddt*9_R zMz<6xxv3FU@{A{ER>h!5=rOM4Z3J$_bG6~8wF0wbdr^@RHN!KTh|TiNTh5ftWZt;m zI3j*jGQM5WoDUzUg%bt&hkUhv!pa$##07Z`v4EIDL?Cz8MM%Q(-)w1nm5K2Zqy`xT zEQBru+kAF?ID3+AjpPtc%ZX#AtmQdEN&!qa% zOge=!NlZh`P9JHXav!xRb2UlzZJqkv8#D4VW;1iuptYNhHyo)P!7xWy|C&<&LM(Y4 zQ!jbHS06WQ3ar)N(02+}e*E%&*?o!oT*UP(6e^7cPjWu0JykzeF<~WnOr_ph#4r0y z<@mATeG*e5*c}*`sVr`(l-8Ta`OL(ulxo|W54AMa4f80?zFy{s(yvcR4q?zQ2;?3+J4-o_@nGp_R|Q z*>rpZX-rogld4j$5;0<6Tvip}(0m}eN<}pNWs-g(Z*(n@+1k>)pJ%~*)+&h8>FH|n zL=qx34kb@c5ON3(TM@}Kk~0!^5)jEYAl#_Y>GjlSyTtlLvczCEY8_@>Y;BlconBiN zZq?6{kG5WCmBXCNu>Cnz>i`?RIoDaAx|#-}X`b1L*_}D2S*@8< zp~nIr1g%{fw?8@@JI^n5lmmTWei;2n!&-tQ~KH@lnJAxRYe$#3!|AxK_&v@$V;zzZp)$Y3P)s@^; z!X9Ndgif>9*30)c60aqoT*zt-a0R=TQAX9p?yV+b2r&~8X9#DA%)O2$l1V&}5PE4< zjZuDZSY0q8c5jfwG>Wl>9!O7E*q9fe7jCc5-@>0;Y+GzvY^)Ek#XfaO@tyUrCER+n zRkx)^#!04_{2lTI!ka-0NOxmaV71cF1VH1BdVwZFrtm>3Qmk79c#oF3UYE+^a*FYN zm0p2=!4#+vND!dbk_HJk$-gGHn;4j2ENv*G8bl0STHt%)TPbenrq_{A5tJQiYqe47 zX4bYl1uO==$Cvc*@o*szAs^$rO0i2eioLc~gA|-#47_iB{|SE4ZuK~x{r>$EJJ-c` zOJ2vP^YE62Y3rF5nBLu%P0uP*2b}|8d0F|CZzVGOBDmOwd9Jx(&Ia0n*%Hu@Ygafo z*nBTAc0Tr#!KaoK1&jRW`EXazw0F6+%8b9r7m*c_*u$*D$u^{y+wP@mjIIM{w5GaP zKG#xVBG`M^yWzA2ZYP}Ok@dZEgSts<5p+^&TftezEc8(%$?4l!_NJtPn81a)ulA+= z!7`|>RaefyeIeiT9EqfRC{xeZiN6vwl8YQ?&Ymd=I+IJ^t zNGDM`6QvSw1{c4EONwK25t*gog79MOEUiU^)t(LB+Z}5+Td~WquYfvp=Rx%h4bhfM ziUa*mO~pq|8%%=VDUC__NpA>gIg2(w@H*JfuT)q7VgiiXR=i+ufHG5Or5svA`cBQ0 zt_#baVEh*H0X`eMjH`*0sj&sug@J}$ySfwpliE{`eG#|0y^}zpMYoE1)A=?ByS}!? z_M-OlOWe!Y^WAegLN2OSpQI!ELzP8i$Z8JLp>ltQrEvM#!1o5mko2`(ztheE^SeV- z_|-Rzt~f3(!7o2K9UfJ`-djfA-HGAOZO;_}B(^{B?DG{6(EJ|!nOXxBZkUc7yBtbg zty+}?VS@@6t-VW6>Q5GO+|r4%iIkz{?U@%Zk5%@J7np*T4Kj^I36(1@-k+;pO?0Wb5a(_D2!Iy0){n z;tN4zI~$JICU$R3IoxgRQL!!>ny|Yd>e9y4`8AEZjkT?lpt}g|A0q@&*FU-ev^0MV zakdhn)mD5-BWdSoO2fnPl;a7l=q(x=8evBhGeK1;>3>g0wM1y&Iy>770swAqZX9mh z9CnW808Rk`0l*V302dcKY6QEJhpqE#cXnGRx_>S5=Q>iRPR5QF_Rbb|wlqK1ef`GH z#aV=w_Q!+%`uP`~rtTJhKgrhV-`hfM5b)y;fRp11;IFk&Q-y!@3cj>(H?`K5vam6= zbwWKul#_?+sqh~Y{_ED?kNjz>&fimc_@4Yc^QSxio+%9Yv4fv>^e=Y((Tn1j=q+Ku zU%VH+MdkSHI~tlenw-=#b$9gL1w8lr6ARxDj4J4#(UKBjOtSzivt?Vqgw|)_>td^5 zYRct;jZ>LVx{;AJ4usY<~OqM7+X8$3XIK(wBVvJr(HQ z-M_#2KN9|6{r?>Yk$2AYHc^>Zv%gT0HrX)w;e^jrI7Od874TRnALNYpGIT0`Z`P*b zT#5yHsjeYDkyWMQcq5Hn66tECMTXAJ2anP6ImOZOEo#sgf_Vz?iOJ(1XoWOW9_)H4mv}(pPhrhlapt33+(287AHW`PA)d?7=sysQsf{skl2v3{V!OavXn{DyXh zi)|YrGu9n(H1z-a^D$D~kHM|lWX(od&RZj}Cmqac1%mRjPLzf&V9QypRo95 zuC@zgaC@~E#nE0YgO=Dalf^`TLa(KV`m?>Fg9Gq&+*gME)sgnhbJ3H_6QRWvH`$qD z(q0CzTl2$08=(C2ql7y(f z19C3)&*i<*Eq;-v%?REw$d?$en%&OZhVCbi1|BAib_Dk6OoG*?S|sCV9Jeh*V3!l6CUc8ju`^D7`i@(}(UYg5 z-}}sFzD=4HtKbD>4%dheK5&k_Eu6pS$b%y`^Vn)}x_~P^i{u@go%Eek(OT)9^?CzZ zy263jn0^krDS=FHDAQbC!D3)?3@awiTB&Q9=H7H^#dYkv%j)IPDeK(+sdq1VL31?J z7cwG){Mm)?w${dA;bTV;`CeRH&2ou6pwj8}X76gyWF4JLbqAv!%z%#&g*fu_qFB|aBYnjlYwadw!3WIIP!@UctRL#T^ocx%-bX0ghK7s)$0C2IGe zwNv%3c4o#A*)q{V}hfbGXy3!uXB-3pS^kCQXiUZ;uSDVD_(I4(vf3c$UV z)^5EcQID0vHkja4iKbA4O`?sEW1e{jdSVBifi7R4N|)2nI?o||;93QrjD~cJbGM>> zaI}J5p`yt=q&Jh1A5@aUjAuv*=%DZjt)i|ZlqhoQ+?mr*=A!$h`}Yg>Gn5n?*3{Ej zeo2}{UAGp=>J?#Z`+CPAx$%n%oTJF1A@@zrj(*?M9x1JM3xKtTz&0h|1?y9AP2xfd zhl~0oKVE4`(%W@*X3$gk9!G9tEkuR4s;>33g#zXN!)>qf$8JVOE01}O68IB44)Sy= z+CjRRP@M)`A<58^P?-=s)&B$w? zT~0D&aKJPo3lWW;77~FKD^o};2ek`#jm;WsvL^YBTY3Ggd44B zUq}R6Y*vibhB8Dpt-G_jv?40Z7wTMWOq;ZH2Ac+* zlL~V`=f26wC&494ExMS^3T|6(-P_D*8r>_5y=)?kJ#-wb{A!$wB{zF-?bgJE3o^+Ls>Se$`#}dV8nun+r5XAlfgt^omeR+Sj|#Tt?=C^1zAG%0@}AH zvLh!Fz?7B~4%~K42esL=Dz@vau4R)AWkz;4`kyljYTAJ`apr6hJbILt-cDK`+smI% z79vv~UhF#c~jFRdn%-PiD4Dl6nrc8QGxY5<1)e^x6^>+ z28&YT6oJY3)a@~mM<@Org26~Pi%Ea1Uz^`r1)9x=NS5#0RSVvI#j$gC(Jzv=beZy; ztE@pTy{9;?PU}|FY+>*U#{z}H1RuePbJlgRF0if2fO2>zy4IE$#@Fj-D>8n_=T@Sz zW-yo2lV38}wu-RP5x;`rw}i);r{%9lx6~UeTBcvG+i>}Qrrn5HAvbL_49SPin4OW{ zKZ%`hUEEg?Zf{v@b_+8-+dt#Fn2&LcL-zUiXf~*6Rya~JQ!pEGrhpP19L!lLXfekf zMcV7js4j&k`G(+ATAs(lJB7#b+-z_LdkzfxQRpbI5v=Y!>AVdqth+A{$0$Yw-y7Bq z?V!mu023hgeKqH3*}WgHJ3gDVW^f#H>0)4Q1L>cJIUao(Ee7-xOi)sZ80vHIu=2@G z#LjS4<*6Gs+Qgd#jutkLhfgNJ!puR@flz7=x+|y&=ZrdZ%O%g%_Ira)u$|$i{tMCE zuo)r8{VmU?jF;UdI^oIuZo32Pc-f^??ozx(4k;NK7F2O1K$wAx^-&FB$%f!*Utq;V z2W%v>}S?&p&u`0UK+LrtF}-jQ*tM|6?5b!VG*51)=IC)AWZFBY{Ss3N?W z6!@|u38ELc`>T*gyptu%ICF1S9$e6e#3A{}Y64I-D4nFWW6xDb~&+RVHYcXkr^)QC{*)9inTqf2UPm zlk(oB{wEn{P4nY<=USm*&&_?b)(s8HX)ABl!@^_+)UV~0+gD4ESBH0UA&dtul2OsE zLtZU<(DG{mX+Q7cm>uskkSC5`Pj19K#|>~a{8}Od+1^sLVE{I$W8}m#A7^vs{-M zUrnoTzF#a=lBV(14!f{g)2PVYk!;Ut2~6@RO8YW$sZ4ZqV}AMBbp^%(Uwj8xe9DR7 z*R~G>uhuK*Dp2fuAX|#nV6GP6YdQ`~o}cw5 z_@smbSe?@w^{$$ml(t1n?jKc26eC?Enxl4BmWHEue3>kDD57jW#fQ;*9fsvBTFoD@ zw^&*EEofO(WVLJ*qj;8Vw0GvYztr#C&)1W}y-uxtnBs}}_DrXvg6I8Z#3#We>V55j zSQWlvzDJGqIMV5i&(#Qe=f64)cr6+@h6vM`a$V_99lvv1cR#b`r-3&(%3k|lPC%s| zcrT4)L>j_X9tiysaL_C<4Db8-?2TBHdCtL~mv`9MmYNyT;PFvCJsGP}jy7CRw%qdB z7ANC3`FKE<(~h%-lM=e0vAW0B2@PKlASaa{8sms*AuZ;yW7L%0>pycGi<*eH04K&6 zC+l`>n|hdM!c3%Mx42e-fq3Y7C_PUuG0cw9e`%ec#@R@vLVzfu3Nh zRyRtQBx==iXyn$g>#|Tkr_C|)mBJog(6j41*wsA6je@^Kj<3F_5!&*Wk%vv*GOrLb zDD+_-RjbfbX9)b7Uu|;9(d6o)ozbk z_5Nku$^~{{g+|r9u+FAy`M$++V1$ns2unVh^Btbji-?ksHl1IJ>Lg zGS60H-#ZmPvy^EKwV~RHjbYa*#IM8B*XldQ1|`)TYpkhexO)b;_*2}~nlXE{|AD-- zT3-Qp+uWN^%z$xfOJ{If1fyjqHLti>uFb?fP8bme2Q&L;=rw|Q+pS>Hy0P7D9xnvl z7QB4x%;)Ak2H>w;__zg$GDVCYPl*_@OG+!Dzzw3hS)%Q5YI=L^ZEE4;3i)xWdo?7M zeH2qFQ!dC-O?}om*)DTkx*z5pF6l-xWOs^PkxON45+#g0DmFVAWq@%>l!x56 zq)sAz7&0knhqnwLJ<>h-C9D+B62b7tL=NB|j^Jdv$2XK8dKarH#JUN&RhK=ksc@>1 zy;Ug6jx&bi*(&Zj0SPmKl;N08=GElcf5vEXIApL%49nC#cJeSCD0PHKcm}mNrJi@X zO*HS|zri zP`$HHOq-~YUH8=l*p*v)KdE$D#j#W&siT}{NQD%G6=0cmdn!0PYXOSoJ8{z91n7Uy~xMCT}v}@tj~`E zsyjEUS(1$eM>bQfdWzbUpX$_Y;LbG41VXwVl&%kGtjw1dG$u|bKNf3-oJB8{mHIA0 zxEu=JsdapunNRVK;sb}70F}~Nj0Ydmt4&VIdfr^MUtN!ajJ6TEWM1eQ^7d5el3AUx z%+%Xu?oNNpc_CVw32}B=-_6&X2n!UU7T&DJK=^+zt;xTK4r*AV3;A{OZ|{!%_XSJJ zFoiGKp_b>&753xXJKGI{>b>);@8q5*h%Re)xTo|u)RhHG4#c}Iu#3->2osw;J)F?g za8GzdVBoVi$v{vys<_h>%O&&N!(yjBoCEcHB5{d>u|luQE0xK(MI-u${}ookFmf#tF`SNSlV@{GQgFA0#JF)>lFV8Eba zTW{wvK;0%ob6;C^e*zkq9|_Y-_kIcQ(p9I{(A`Gq^3_+F7N$XVw<0L1`?y9q)7o^^ zn~DuixNu3EQtB(?3A`cWhQ%uFQ`4DS;1L69?|w~ny+{FytL|#S<)i}q1q5rx-n607 zT%^P1)A~ioR2$?F;e9Jiy6z*9C{-h^?85k8}EpB5@76QNKuAJ z^H9&*=tvrx>~%mB;Dir3vR^==zFg9&N=s{LaVo%)&9&sE55)U40JlZIWtJa~+NHxW zioPAR`+b~Gm3V*4d2bQiTjPADPYpc9k>MCnBj@{b57GOaOo$ed#>8`!I%4HCMzIHca_!!TCY!_u zjvLG5zYa9-e3bE5y1Cgyhv_2mij4$qyJi0eiT6d z??}=AuUzxLqSc?K>i>UPkZpKISxozv&WKasJw=&nNl8hHsmeM_)SFwQ`3k^EOov!O zpNq!vsi_`08w@Qvc6P<;ni@>=6}G=-qDYo{?&s&DuFZV^Pd%5V@-HZ0EG{jrc^=^8 z=(xh0Wk)J`DgME)ojph>LFzAMmla3VAaSRQpW^;GbMv-;>2(U=e0xlAb@I`I(^kTH zp0ARuju5*VsQ+GHnRn^fKJ{)l&Y%HHtQea%@8HjAR`GZ&ZAmft%KN`G`G4?MoE|$V zn_5n>|8I*^neNxM9KBQU;_gmAl8H2po^R2)=D2@{vQ|Vxuf8{HOc@vsfn<3Q@dV6$ z>seJWnf}NMG234-qI24SM4!QwlX_@lw5wbLgs;a}sh%6SU(IlB1&hVh)^=WpsI^^p z#3sbBFuB6F97KM`lhe=q$dIm^4BLO#U+-x6J6puGz?&s~c-$%=$xa<9vWr?kZUIPAdS^f`h z@#iUb0OX?f7Z?C=`X<{IH&|+JPj6S0u=RNM`Y@>@7{Zk->`{%p(B|zpPu$emiYrti z6&X4oY}x2dNw_wrNWE?etauj(i;BAB2(sC{&?CN|#&){km8uhS{B+2Th0Pn0c}Ub{ zU(MzP^Pqz!5{f0_P&baXu4hBpV~IiSCi~YW+e3LLFC&`ZFY;uSG*g_x0}1;jLsx~@ z#fP1{EqR(;CI~S@&gwGV7DJ!iW~~{>mZQ4JTkWHDp~H2tYsPDBHHMCKv7X+IQoHoi zC8NK#hr+1JD6zdj;PU(}3!AsmiL)APzmgJYv>1FD8Ko7=^hizf?goyBe=`D`=60}m zcspkoZMMzx+LTbJHFbwmF-s1%iIWJoOV!(WO75q7N6ovQv+10#GoD@4q))yf;!S5! zRMm7X-4$@wU-WQ_7*P_DgtnDypBG#}6^8mCdIexbK4qX*V)>Ip;`byQm_cLU8{G8`p&KW92k4=Q=46GJ!Lh2?kZ7HD!Q#sjAD4qHiWqAT zWK>7oXa7REYk$eLW3}_%X$P?<{f83`%|kOkMFA+c+llw0+c=__=qD}aBzfF+CFA(% zOt2Hc^-A3LXde@q$-=H9z;*l?Z{o#4hU3J?*IZlMc71Y|dzbS;H!NNXjE%*a+FYvl z_4mhSLb=p@xZ&t$1|xx%BIlE2NMdCXM!rZ&c1)$~&}F{eQC3)>m>7FUnvi~^e97+l zg;;DtYT^2Hm~H{n!1ubYlm@8Ar_*Bf84$##vwvJu+Vu_E;Ny%Vo zKHW4ks&x`RX>*E7RQ4%r#ZZl7p);_w!xfTux{W{TPxDFRCvJ`^CcOb`0(ZeJ(1mYYp(9G{gS>$(`K&A^3+ z(CxOvs41;J$bsi?tW3JI=LUPGny`wkx ze#$j{2|+`@osZ5I=#KJt6D_#J2aYGfy%)#b zeTE4x98=sL-OgmbTlP(d`$F_QJQ_Y(lhayONA57iiv^dz9nSoYYef_lLME^DJ+{6&LKhn3l}-s^6`4>r3lXt|jSL-HnNuIy z!eRzTiJ3@Vinu7gHU>IS=40iK!xC%lBQ0jYbpUcgy#C^BBB9##jL3{L*`PYS)-Z+1 z9hw4+`6auX@CqW^OL+ zAYri6L=qlM?|nLAX_wU0REVYT$rh7kqEDEvgHfJaX1ny0>j*wRdDkwL;?m2{5Fi__ zh@=nXyWHVbJ$r0*DpArgI{ea(f6)_8;c<`*CErlu=#BHtcRL;y-EvU1 zV-|GEvR*uiNz0)s%F91X30QjxKBUm9uXFr1{HXX{gS>5qXN_)Sq2b`w>=OakGC7fO z=4cKUdk}ExtW>u}ObC2th34J0C*&$?Y-}v+ZKWRV`?LNLp&MPp`ISnfd4BGV5U;s~ z4RtvcSsy?Wr_pnpLD|o+y(4(0@svaiY}0kj(x`>)qmfE+T0l`ct%&pNcLwYSst40? zhYKm*Tn?jAYX^l?TA3T;kYn3eE&FOnI-d~>l>t4oWw#HPP42`wR^s*LwR&8-0%?L0 z1(VygIq*fg;J~ZR2@$=5`F9{W$HlWQ6L|1WIO5Q&gy$PVLo2eqTNujg@c!arQg5KE zYfwyv@$y?wH)2ZPkgeh3$d1dj|GrE6a}L34^6KRQmu|e!u%O$q9$>@Rg^~JCYS7of6F`X{UQ(uC~28^JmEV4^hT7ILVEPn5)GS_k(uMq zm4pwzRF{U0TT@&(Dhu#uA;bUX zEfW(H*#_GMTJ1N-p`$JlJ?!l41H3`a760*K*suTwWEf82wjcVJqW`mOEZ%|@yECA_ zm-C4GCu{vT^ZvLxphNAz2l+nbC#wFj(2^F-iq$4m==yGx#fn>=xuL(u*s0k3qmFYZ zR9>x1Z(@{c9ZF*YI?s)OtA#SCn?L6<@Vu0hq2Y9bY4LpI^&NfyIpz}5@(_x6>>^PtS zb|v7n*7_RQXW#~2qWf=*3$W=u-JymZsYzW06(eW58A9*?!@@DXOLab_9u+8Hk8%|9j4O~iZs7$ z7dqi$7QB|&QXAI0`j!gqtyECRL%D?DQy<2T6g>_m7_9GugYla7ByP1UjO*-tXJ>r( zTvC;BYOr2P4sZtUY`7 zAIJMsGYR9aj-w19lN*NIiIBK%KEbcCPk;Ni2*|GI))xz8R7jZ>Yg&?OI?8BLy@Up^ zyoJ)EOz^-3wq;YgG>_zUSa%nT(N3&LGT9c3dCB-LlnGJNnsWr;1)WKc%pA@tMD<@` zUV*u}Nn*Pc9M`J#7+`;rfSCq*?Imc#8(O*_&^ zBZ5ti!{I5H-oa6YZGOnM^T6aeb1bwpSl3QW@?j)Z%x(qK zgAKP`q-@0lq=wwkZpkDB#0eVtpw!R&}1Q{F2zTQBT&;PJXXcn<3p;k7vvZ!T3I84feq6p&OeX=y#(*XwQy zroIe7RwUHcIyW62vW6cBmdv>oq8*;h;*vH z0`+EwbZsra1!A0Oy+)BWbVtFsNZv9(8^ zl^$b+r@oBuHAV@HHjivDZD$hh^AO=hjBs+hyC(s-Pt4xqIxGUwR=a_>dN5E;j4k^? zAe!-y=6l>}i+QPcLG5A`zUW@*Vrfpx`l}#Y3Yovz@{cQ;MeJE6VASbDHL>4YvDlX= zcyrHHP*M6Hv;S&VW}*^j=Lj;M-;R)#Kml~Q>8+<^zvEh`4+hrp-jw*0OQoRWEn~vl7|4@NCdzRCS-A2aV+6`H-AtSh;d=7*=gi`NMCV_E{W6k40cZFFv=Ke& znZ`Y8;l@b)Ry(ZY)wbXw>fc4_;!;@0TtfTFXOkER&eMCsldA`bj9JunA`;&J5W}CE z-yWf?8qTfYpSu3jZ{1UV^&R+JRc*FjfqHCX#hWgR8ZIJr`P=cdv`_ezO_12MI$N~K z7K6&br@;;{GQ&<4HH50?+K#AWQWs;G}FUQ}=C6FXP zxzcTV`vvw4Y^6p<@LPmJpWYcyyJ7wAH03P7k)Zc$fKqj!S14nKqj+ z3b6`9!reMbQB{Dlh~^^%KK^<#*(oGOSK*fs`}bIEB+rz>`nU`FzIKI8L^}EBkRWE4y1c~Vj0V_& zafgQ{pBp(H*>@&VsBs_O~gZTMhzWYC=098_q5|_e2GBY!Cp@4zue4|x9Cu`wA zIm^{?PPm|NR(Ly7o;V3=mj-oP%DOenCuat<=Jxg1wJlT`7`|Tl_FAAR%cU;^67HP9 ztzmfrSL43e$=|#P8?b6uajvJZ;io;vj5jx9{0YkchfdJ=`6*)4-WzVHUufw}&-CVi zmw7yAG!!#O ze+@X7141|sktGw3XA@ATOjS^ai!HLHscA&GVrp(m?~>CS;^yIXx=-B3_Ofzs=~KYr z*+wP~xZ4Bkh5z=pCAT7m|4Zx#eA)6bL+qVN4hr8WOVErN)tL`-D75vSXfK344Ja{w82^{0K zpTTjo4$$1$Gnefep^IHWV6Bcv8c_EUOLnkqB^ykP3iFtKb*VHQfB`c+&PI7y^%f0J z0Zo?rzN;78e5?#Il;E9-E;|qGM3@&u!kganc=J(=I6~!V@I7rm&bZEW@~;J)wy3~A z>p8dCy;|ekX}0bc_Z^5D-*zivxY@?1bSH(}vwlwsZu}AWOB_AmRuNbHMoY$xyZA}P zGQ*%-u`%2m@9Ni!DbOOsf}q)g=A@8U_I6JatnzQy0B$e-8YEeV$sh z3h4PlzT+N}(?z3atf+{%G)DK`ICf||YaWF1d`dYORRHu&R~ZMGt_oum`1x$S zH}Hux)=ZHq#Cu{Z*oJ4Vg~EV)&1GY(kfg0+j!ILMkks$iE0sSrE>JtO@p9^puxY6n zV;M}^dg?j1n8ay3SFtl5I`>E5@56uC{{C>^@gn`mP2Y%gGp$9x{r{i}aei=%16NCQ zm)~0h8eA+?%>9gMOzL+LHTpRoD(3d39>w_G2!DFiCx)3==`VO4z5@Hi@MH?6@?C&w z1CH+17t2APpm2*A7V0a|{{jj>Xl=Qrt{w_80*tQM*NYbx8qsj&_g1jyEc#<XRr2euRne7MlX=QpAP z78_3k-^+VOm#-tPzj?~I0LXt$KdP8gi|u@8uC2Z;;~8~G*7*-FeIW}Zx4@(PG6mRi z0iA)yke>o7#Pl{%oRDmwW%|uRcM`>)V$LEziPKXNe3+=b!!b(8<&0wH40nwvNihz2 z1_RSRmBK!~Ep(LY*HZZr6WvO@<)HE7)#g$?!CR)TQEucE=8u?af4FD9gRPQ^Y0t>d zuN{?~`JEf5B%#S#cr9_u9)&s0AOCLDO({ijKxtgcXuZ4li%erY0~CWdHP?P8#k1_u zyXZD;?HxYowuzp(R{!F%wlL@tx*r+&3A^<^-;LgRj9IeSA-TvA9z$Pv}CqSM_cJ_#nERzg(^W0>a=6C$p zL8pW;W>M;lnXpFi9LJUSSO9)A)X$F{h1%z;=Zc>GZiIL>ii67aRE2Fnr6>QBpY2odR{rMGYfh43?#dtfJ#*BJe87zm zQCxWq(BxhxBen5L_4Cmqiu}(F{<$yl+t~k(?dP_Qk@HK!J1V2;%y+0MkcSFwc$jSU9xaRteLF ztXDB}%%ip8rLWwwx54A{%7GGxA`79SnU(}Q~L&;JGROQZfV3ypi7?jxDB3Q9+BKjrv! zYSMp@bXcL&dCjyr9r}K-_?gVYakvNN^c1xZ_T4#A`YdWayZxYFk&1?K_ntifJuZLp zQQr%qK3SKKO2LO*3pX`BC4O~pu@IWy9Z6toGLG`eN&Him{&Sfn$F60p+rCsV%U7soV~9|JJ&RgN!rEP5t?&exWpX3Q@*=wbrl zdx(1g|G}B6@^LbMZB(ccRmXoS`73AK$%wI+t_V8XLGzKUF~>wywKIJe+YkwZ9$B6U z(he_*?)J7d@**+r68=Z=O6Q!^NQcqa=p-~PI^hwN?9`^oUc1U+aM`~1y$oqzy&^dS z6RTo>|96rq8$fc`@_IG`?M~rk#DSyyAnTr=>gaR;NUL=fzja z+#5bK?F~x%k6S)9nsv3n`)XK{#8%fc`;YZ(frT083d6rEzkRzijNW0DL7Ln!cs63; z9nS86^?A#f63cC<)=oWJ^m3$TAHnH8$f3t?)1WZ-eu7&C`9xbNZtoomV0so@TCr-$ zgXSwnANISca$Ik4HC-l>Im%yO$K=%D!B$3$VKvIGvSFTVZtigN!_p?0qpD%XiwAtt zk*4W1R$3)97a)*Y4V+M}uMsyE=oTyN47C=pFM2NW_-!InhKFue(M0P5-rXR0?P^h$hq!C1giOi0?+H|J1zKgqAn3vZZzXJj~tX3p+mr)P`nfk%7 z@iCm#oI+XWt#qQvx%~qbaQ_)3(xtf zoVR4#{dC_dj{&~W!NgpA853W>LkNWaS9a$GI))G9^UsWL7J58qC@wMP+3JSf{uMP$ zPZ%Beay$g@eQDmq75ZpBTPbzvBK>7*_|!)tIz7SE`K+p&v1w~^j$URPmI_Re-CNGx zc1IQ3eDz01(eiH~Ce78NP=Gu!_$|torAHSz*T$(t zkc5yzwz-ZE1s78@EU2w{FXL&=sf-Y~&V%QMi{~-6xo&46_0Sm6+Lk~n)_sQDGMkYe z+Jn>A?A()EA90Sod6q5--DJ;NabRF<5tB&(6`!H4o^P3osm9U1+C;A4l;)XIzP@l{ zrgPseEeNE`4m7$HIb}v5^)?DRQd1FigNmRAP=h#ZZ=pr&xLW*EeE<$&|3;=S6&v}+ z-6z;3rKJN;aj_(bU(J7Dc`n+3s-dudaw|f?@0a<#=BVC(mS189q15qlkC;alG`=`R z#NT)5%}T>$Q5qdDPB4Ld=)NAWuQ&{5Uw{BdM9UU~zpZ|9;j&n|I}x>va8P#H+3DEU zsUTQ4x}Ff+nt3M`5z*-~HU&I(fvH%*^^R}^H$da!HnoPvl-$ep3%VKUW0ZT6LJi)@ z$W;EtQAM6lN4|5BrKU^3w!-d8~RG${}%d%QU!N$bCz`<8&A5|z2|7vc+5G@h5b%l9nI z3_}05N4g62Y3Jh=M*ETQ)E}ioo(N7NhG{H7q63i;Wtp)8_c-k>&&iTdC$dz6S)~q| z=Nweds`~1QoJ5V}$1m1;7D)xx5pTdfi$e(`=IbRsw>zTj)K-m;lNY(KoiqZEnOyZM zc|8GBt5n?C;c%%;1U10>LCeTWtJ*#lasO#JjGXCs^q{G!iRH$;>+O~v#j>5*#q;MP zSz_l}rwV=Fj@EW_@L;`nH{zno$~d~YgnA}C&!Ye=z)YnM$$wQJXG!tfWU-NBYiEVc zU@v$(gL%d!kH_~Bu_EreZXPW|pTO3``Ble0VrWc!?NblM^1kbUD&z4N*Y^*!482r( ze|ll;Pp?ZKCN7gGE=Q8w*v< zkX#-+74pesMo8=Y%P*M7{d@;!rn(}T7E6J5I#ug7tE>Bstbn$c1C`g=Y>jZyWS<>& zE{{W#)$u6C2tMAk-)$ z=Xx&u|M2zIaZz^9+kzkU_`qY^$!+9tj+iDEJrhXjpv2iz zUQ&{E1({d?qvQR~)XxA}G>yVc-OukV)~Cr5Mz|OM#Y_O-H;qr>db6n7HnqPcvxbHnlE+2DhQWe>$v9sHGyE%!aKwdr*ynoR0_EfLedhKZaa!?)z3GS4-gw^mvL{S&)u?|gSB{*Qo~EAx^FSX% zq3_9|!vA4Pb|^7j?{BgZUH^KKX;s`LxM`eOHo$D1`#Xyd{j!iF*((ZDyX`cN?c!%?MjI zacGPwwYkfxf)>-|x6ZbPl}maj;aD!Y@7+iLO*{MB$$s8~efeU7@R=PiW=QC>3-@jg zqNZ$=Y9~Qt*pehF`kIFSY6gSd5=5+di=}3>??zW&*lYddi+@{B0{^f(+PQZqWWH<3 zK%ynIrwlo&iD8tO1?C*0hv9buy~$SnphOn=VJ6~m?FXCi?=EShOlyFzhXEnX%~tw zcj%HcX(ZPF!RHy`^2PEfitf9*uaygoUU_9bp8s3y2FO8=m#-Hc6_=?w5X?5k9IRiw zw*on{6m#S@_+y#3dbd(s=l&k?PJN?d-95tjcO;7xCPdM8Eq2l4$cInuO?5Dtv&VGy*hxT>hrW( z^jgp5vT`oh3{eMS{M~}+-_GeN@sdGOA|2wkIpQMTice)?cRs)KhHfv9Q}1WzMEfJ! z6%=Z{C~x%Kqt`-%qJ3wHJwq=*HHrL%UKy#?8P}2GV2l}XN*Ml^2>2W*{`tx_{6ej> zdhsraIf8(+fnM{4x?ZKN6~0GE$k>Qa^_Oa3CfEgWedTY|g~9m}eshM^7(~N5jk)!f z0qGrie?nG5Ch5yOUEgs-LO6p-R*MXb?&m(Jyk&^{iTrk;@81A`EPxwluWRoPZyqmq z_d)-%vc3(iqAKpRQq-b;Z`}z)QHt5+qI)tLSF2Be+?CEugDo>|@%9FH=_~?>BieFF z2WR@Yp+zd!g36qv)lj}AJHZJ?%Dn@ha2WdAYhaAbP|aSCJ!dhxTZlHdqwBn7bTPRS z#;YcRpL5NgvAS>YeW=q7D0f`Nggjlne|=g2C_;r=6RQ62L&mKw_lr~*nH>ZWWh{&yv6^>^8WuTIb6<07T&o2p;HrQUY zj4X5hbX8r{v9n4ui zyjj-PhWB#o=%wE{{IBaK? zx&I=R4Za}7Q0S!8mn=iUxAeD`7}6{*mtPND+o;c%(?O!NPF#^5$olGvi0Aj!wpy<{yW3c@i~ zJo_$X1aBuICFn%P?dIMsG8wrbzxbs(%p&&<&s&^LnvG?SI!lMcU>k0KY6>S$XAu4RI>mH=>WP zovMOa1XT{L*aV@00yxTx)`u<@_RX1of>o|f_`=D*uA2a1E!+YWb`?p`$Wb94h{ z0aSzD;rW>Uj485*fbqDR7u5gzSaY$syV=C*p`g!f-`Y64=bIQ*;?1?6@{kb$4}~j# zB>AtMtT@Pe(0ar z{WrGBG;q60!gAILHDe4&^}n04Kp8ajh@z=<>0#1PzsPc%F^66r-Z zX$9{{6L2|ls@l4#dwz&TMqyLK7g^l!T`LcOz)Vs$TUdQfJSq&jXPbcS3~BO| z_f(iMPo^<^Sb~VV*rGI#*Jq@KoW+#&=vLC(*G-_gr7y%hKGO#~366n?Qa!ypu-Vqc zZL-ZPsJ$L&l<+#+)Q2%qilZ z>rJFhC(5G+QFaY(d0rKLiC2zBEdA1j<`NrLhGw>*AMOv>^wx})HTSqBNhDX5<*`Vw zu_qtrHy${K>P^bQ$O8zV0r)#&GnK0PI+fZ^wv$Y)VL7db`PP51X^$RBX~gg&B$k~X zgvL7@*~I`e=;05OIxr4iY~IJCw9iMU_u6c|w{>J?<)VZT@hlqpZs8u7xTsFgIxkIt zoRjbpa8B`8)t54*adzDQ@1P~)0$kH z-@CG(lY{;ic*#5<5j*_xo13Fd=Z!?< z?ojp$-!+nk-0?d{bCp0Uln$iC;VR!FXd8WP1|4%)R-;>G{G$y!uFhZyi7LGv)!yIb z!5eq{Hu6oJf$nynXYr4Pr0FbrDjvD}Kd8fMZo2tKzBvV~U#X$^8K?`98+ipupDdry z4@5(7-5EDCzFrNz-9i`FeKIA- zIlGaic1oPB(Spr7EkPpe=!@5$NT6@Fuf4NQysg{`=i#G|09_^RY{$=&LmHcY%!&W> zxY#>s|F$ibVxxWgo1#6%zE`-LR69YL^(JP*x=U}|TkNu8%D1S+`ITB!n1JAHR@M8S z6^yISqT;nl@i{zRl2P&J^vd0#@-q{Ep*^ za4XL`+ua?q@Xd4-g#unnIpd!IvT z^SZ;sb;$GKiX$nE`cK~K zKeSi;Ju9i7C=`cRVt`eJ2N}p@ zmTrK;dX!W%_4OsQ=Ec>De*2JMf-hyz!rDxIC)wl24{hDX8AK@K^E`1!xCU!)x6|Fl z!8r5GWo^G~yqhmjf&w=Vf@D;@2U)?ZW!IxRqlsdI-dw_|1|sS9xMnPs{#Hk4!P`2F zL&!Ce=aPBevy26I-DUHy@=A4gDTU9im{b777XSH~k{@T6^B;pBg5ISplBj%I-IfJBr?w{>0)pR!)%Kuu@Bb+ML`Co`-cOS;vVd^$qI0kvtDS?@ zVf2Qs-18;g^4)uM?VQ2or-aaM>EQJY>jhpMS_K)ED4 ztQQ^p7p2cY$A~q}viJe^<7C?NOr2=!X}1qf6R=N$L25v6|BomPII9#~HO)MSUa}ci zR%(HFg@sU~L^E+-_F1RTi{HoQmnw5t|D88M{i!zenWPAecZsbco(4ust|&urkfCM0 zkQgX-nGu%PFF2EEn4C*kE9imDN5%$7zuKpdOR#_W0}Ja}lFyb2?oafs$)<*Jsm=~E zN5XnyQ|NEi(?5cF{@B#Ws17-5kuRzv8;@dXJ$X{_rnq>Wk(cg&N|8PZ9B=LaUm@NdVk*ifWR!pyQrI|LYMNCnv}LV{Z!#)zA& z3sZTi3L33#pSgZ`^!*XA5Ticck(j&fSyNfH8FcM*H_vuM2?=3L!{sYC@cjLrOEpO1 zhG%7^-C}(1dcQf|MOaECme`A8=RCoVBw3`i136XN^X4$~`=hjpQ(tLr(Z7`;1B*+Y zCFqX{Kg*5uxW_&1xmstLU0qc*l08wHgUrvy=m=L=TjXh5!VtD#K?F4hWhbu)f&Orew5)96DP=(nm^)9L1$jw;ygD*LyW}&jJf4E8s~@&Xd%h z?r^%9xC7xnQ_}DVf~i57&F~Vz_iy`}`~6%XF5ZaC9w?2j{0fo7B~3@i+Y^!D(TR7o zaNW01`<1p`qx4#9iS1Q;oeOlc;$yrf8DU#Ts~9qi9GyV4HyqX}w5LypD6g__q9+tL zxKD^z7pwfIg1@#WgBk}#O9-%Q`>-BiOGp3l2Z2qBMM_x)nObm4i}lL-ZS$J2{7ko zsx{rDfw!zqI_Zw0^Q_}H32@2GIdJeW3;A>(9{xJ1Uy7LX-~=WI#dC1SR`rWhwA}t8 z6CV=#Meh67=cqe;)92S*T|Nk8AZB`v07LT9)~1$90I^ecSSkfChcm zt3#U9h>{Ebf`)-;F@ef2BlIGL26JhlPDYg2b-VzD5df5OwMgT0QAhFgZ58o`AeL{ z%r6yBR)&(`Qj{ni2aQvgzhB516CxHqPVqokwqv{wvE@X0ou2 z5Xg{REn22;zeb-UfJmaPhrxPser8I)#y1>J<8$7I&?>{VY$DLoRkbK#F}p zF7!d)dB8^hiYXDYwxEr>?Db|u6C%-5jv7P@6S^`VYS`?8f)IvLElT0=&F+hImc~WKoyiYo_z49Hcw{@1C9(Us|6bT2fUp7&?selW9Yxn1liLiS@}=28 zE5zPPxqGetI@~FuK?o~}-wmH+vHQp_l7By*yo>jWrLnw?@~m0_!aC53;R9gj<1GHu)<)-< z0Y}Abvf0T?<1+|!hN2iZG2*htuRTl&QB(N;InApwjJJ=g1}d8&1KCEf3N@A9$nSU^ zR314LfTciXwOX{sU!>A$emZipE`Yf|wv2iHbAF!JzjoFg4Wqkl_5;UzM79;evkJ28 zh}t99iJn~FS7)i+6Doqa$L_9#mrAts%ELy8EwLhza0BLhs_*IX`d`skbyL~Y-)S^r zac#pkt}Darl76nBH6EiPhjE0OYWmmU{X}pb%4zo86*2DNZL@PHva~4~@EoV>68-xG z4JwFkJwWdiMC;kR@Ant3oKvBC284~B>2ThR_ftNK-$88EBv^Z*! zg4Rw?zA+e;#rfF!;5j5oV5Jqa+bOMTXfl$-!bxAXex`%Nsk{5~pPR^|6&dKr^2Npn(m-)R

!6V+5hgfkGSbdUbcc`1aPGtM_G*5hea`U=P;Vwl=0;?~qUFp_N z(Re>xkObw1H!D$aX8Tt>y@~^3#I8VW=Fj*t_=>j`FnyN)c>#_Z*qr|x5&rB|;PG#? zQGEaG0X+ajUfljl@~6b5EPeBY>k|*|8fbSs)i_h3y)J$!0pzgKwwg*u zZBq8cT2`ZT%P-8r>c9f%F!a9Zk2@Bc!qm4zXftbg&}>s$nzGL{<_#ORax+bd${rjf zRwG2IO)G)!viN#iL&Ngie90 zm^;>WNlYJ1#Gqs$ozA}%!+1SN z8AY>Ebg;5UjZb_9bqLy2J=w*3;Abl$e;RMeEP$1Cir!XWZ>>{AhGtO8P*%sStJ0%? z?74zCReKI^?e;9mXln2m3UfsEcHJpoT_=VQy^`1K_$&-nrkObbVeI4L-T=VwMe!G7 zGm}$KNw&lVJ|?|BAuiZ;gADvR=dop!bR=St@;n%k`SQU*06g&`KhqXUfba<>psbl^HS$da;RVbD(;9EOVyx9_tNyuwJ?LIFF{orJD!PzPI(UWn{^r# zU<9lGmVW!-KbPN*;u(oL=T~n|@4*u+?I7CW_N{(yrY+deNQmrH2}C&t8APdB*CuTN zLd?qseVD1Lz(3v6k8lUvcf4pjYvFzTgVw4m13pv=DlE;c&G$1mHEj`f+AT%aiyT|X z(S(iT)99KL6nJQ7TF)7UO`0%NHkR3VO@#`6S9YI-z*?oGq=l?!E8!QbzoF`i`weOw zdff67T(;O^<{UY`693~aXYj7dCqu}mE=ZNs?|223DFhoJkX{|PBSD(}q8jtAxG7Pr zY^b%1gTJi}b;V<+*{QRiBwb^u^?}cpX{>Eb6j{56DTQr)VVz*Ww6i(2OXrsmgItO|mzqY$fKPoC zc(Rdg_j;ps{5C&~Q)}p&cJAq{(AoCy*KWrz;Qe#v*t<~-sxLX|WrN3K!t(AxC2mQJ zZ}}d3`rC=>7{aCf5PJ~`bC z0fSpK=6i!XT%cE|q0Gi*NYs88DQ6l9kF!GWH%RPYOx<^57GI!r zz1qJZk>#*285zhivpN^Qgfb+v&{md_pfyMceg}O>lfNChml~DOqx~nmoWXr4nM~7P zwj?F4$~5L)dExtmgZcSOI_^7?>4skYrEkOXS;=CN%wW(e7;-A}gfwHCs1Z6tD4z*`Aj~PxI9x-i?oIoLhEsg1ZfPRXgTj);r!8 z@6H7yiSn34^sOs>!&^LiP+vDZCi1j|yzT+r?>kg_>hzq9`KNEf!8YUsJa$G+U~wC?aHWp6_g9D#9JP7MnNAP3_->XVMyx zEyrNn^y)&!VW^hLV1`1O7Y3EvY5uzY4m5<8zlYx8473KX!glN3_o{$1d-9UL2v;Jz z-g%ZUj`q0L)wZF!Rc%sh_4QxEE8-f)-_TX=Y<}H4n%-VXi)e2*X_&p(NwYIJOZkYa z*b7s(^muXatnUX6hN5zTfOW*K(wkKVP1B^K<>zrTXx8rc<#CwIw6YgW^9fQrDJd)N z8E;Bunv!>2n~E2?FX-cw4OthSMOv-8!Uh&T+JuS^?{!bfUn_kHh^3=mza~E0{I0%qbx+}?osJ;Sp1d4Q*@N;5Gj{*U?uvE{q8E$abI}J?DL0&ly6-P6eid!ybdY)oSaXmtfw+j=f&2X#bf2sCE8^QbAGwDmpFnSQu33Yxo*V&S*Q)EKG zOHs|ikUq!t7~ik2YIIcB<8tNsL_l+@NU?g+qs`mCQ~TAvhkHVBOq4#we5)8^Ko>*d zr>`azNtMX#o@;xDJ7#6xb|nk@l<<9{V?Dc)x@mNp_i~Az>u#nWA|hc(xIp*^H8O1W zFwuIpERTDpn}6E8!0o`YX3p{4w|`+XW1l82McJ8UvdnZ35~~n)fAKs~-r&Zo}p0rg9D^t2 zD=l5@(7*F_GNRgP(tY+AXR`KSv*#AUdR;R|?R-<&Et#C{$@V;_nd%vG$=TOGKs_Rz zp<>_Wd)mc3(bY(?+QXNyyVdZZPB9C#f^fRS5%d^IK1n9Iopa4;sR7wT%&~k8-Lk6t zb`$uxqixBcqR`zr_Soy3(&B8fu|@9uX1vmVH|ssQm#EEW4yU-gb&4f)xHOb^--+4ac(l6&+szN?a zYr8sXU$-7pl?$$`DDzD8n&!7&yf1%b-%B!R5jA&vPhQ~KYwO6H)BNuXYZA=w0^tx?+cC|2htJqnvZ6?mEV-= zJ;Z8$%U!lj6oGH*wjvIE91Eb*0;Ya!n@awMZDnWN_tHzFbZ3yiZ|oDW>}KBRqBeCF zuIh7w9jb@Jt=S&s-0)8AeznBrTekn2;kSHea1V%f?miH!ll^a{!^q6Isg3Jdl(k+e zeJNOfFXU61;3e>!+}P;rwnM>uGQQtCLXXH8AJmD($Kd~|O&(KU0nK|UHnRc!pd3C= z=0;~qSR$`!&ZYBae-xkQ=nLn4KneW36f4XLD>+a4-;`l2~Zg?a+h)FS%e z_D2GgMCj?R1YT2qBm295CN?PSLXeL!0L^xqCZ55i$HiP~7s=@2OSk6CQp7##5h;#x zy!a$j#x-zNEs`nK^8=mQn;2d*)rrB8TDCGH*550dV+%>X0*>0>TH+A$_|_*&K4-W# zdd?3e8Gf*Nl&v}umyL(n*S)48S6_-$6M?Ga@xQtF^ST10m;n1keJ`^V**y1;P|0$* z6oV`VD`|5QR7BrI!)s>wzVKgmQixej3-ADcvmKkTwTv!E!t<~c%SsCKLiOtY)+c!# zFQBggef}xKZ!vwuP4EIF6{S}v4K82dqP-y6o+_9=mBIrQiEvlkv~kPe-=#r`A3#jO zHKl9*F%Q|&JMjdja29{kN6a(?)>gX5z|U4F-8$?k+Q6>}_UlXDEZj&lf>A}i5Yn6R z*ZoH^fH>eFB1@TN;p8~IZn60p0aOCaBqu&P#ojMx%;GOcrtv85)@~@?Q8svMpYl96 zcPG3G-6&uZWhMLJ)_DkWCH5mj`>KE~Ji83#U3RxLc3Ku@|f3P%yP5Q0h(P`0=Q0xY_AvRxSJ>8SA<`^c!zxn$J zq1pfuS@5ICfaPOK9)+mdU!XvUkI!w?S2$Smw<$0JD=g_j( z_AGu$2KkZ+e6S_$;vc6ejHNFMjhX+6NI6_b@;-dlu&ilN047wjhoTS7GVk2PKViI- zp_H&*ZnL&9aex<;i#a5}{|6b6<$K20i~7kG%HN9*`C~=9{wXd?q$|8lO*lol9G!Pl z>{ax?N-N;C#-*rN@1Vb9N*qHtq#$0vkW%@Ce|loXT04dvZ^y%< za*IiSz5M>u(CdE`Fv_BU%WuWpWBP3zb84u~OUtBfN6J#qGSo!S$M>@5m#&KS^}18^ zdGakh3l>Y^{K?X)90c2R)+BB1xABsh3quv0U#7cvTrYp^AGdH6qdu(Hbf{B;1hfx9TjKK?|W*C%p z*-CO?qI`SREKpaw-TTl(W{wL*gSgR~U{h|@lu|*_oBP)e);Hn{PF;tD4$vz_=lQi$ z`q?0waEB>*k4YDOS>w9Jp6ac2-aL8cWb|d;(r)Lv_RLh;>k2=h(_~A5K1|yzUzOm| zVsBOghLU>ye^nIqWaI#$o%#isrutRmzKRf6!GURfn~<)SSE@hEdcTUmgh45JjF3GQ;Ch@IbV!Uahcq$hV zsBYwMzvd8H0BHo%H*Ju$!lmI)3M_e$v4NQaikx0|==gU=9#fAyCw-bX_eNtAv3Z9L zDL`%O)yXBIKh5%SG2mG!h(B|b^7S@;2X>T85{(KqbJN(^m)lUWpiiGu84^83e&`4V za21rw1sk1OU!0KvC$PH1nm+wue_`{pbjAKXm$>FbnF{1?C%=P$#swzBnfK}$*TOnz z!L%HX?K%wB{uS$)TQ#Q4geCqyk5`uPD=3!JhJ+}#)ygqZ4vzNDj(U-ytoprNr+%6T zRP?j4>CNQ7weAyv-f0+R(KXv$HT#H4_BZUFR1&L(Omp&kmZ(r7#Ik@N>_fBJ(6(Yv zq&^&R5#n<@T%X15O8x-+cc z2IWrA>`%!gXc1vW^LW+Ac(%^oj4)N2lnTYYFN_1^ycp3&FW}Gx)xMElL-K<=Z@MBB=l zH8pQfTP483zJCcG)mml)-VrvsRM}D*leQz8|G4~#WKprra)9ny7H~J5CzFwDRW-O= zbxH>HT?6Fq*1CP?f7`a{fSWVQn{|w%pRzTS9pxa_p%*v!DI|VIYdKSvj>aR9*kzVyvwA_gp-bvC6b% z7>Pp!=wjoIlQz)%f+-f{&DLe4ZsX1}gsb{H61XdeOVf=5m%xW_Y$?`a?+r>LM3fWV zOW*62Agc&au8>Ih*}31h5x`cHW07*&TMOu!rX#VJJBH#Zj2Bikh{E8aY%dvM>~gh&Vj(%jHx)l2iyi zxk!itb(w`isr}qUS9@%65SqzSapKQg<87Qz>gEYZ&Vn6pLku%$3REp*f!q5-r?1K> z2n+>^i+$13sNECX%Q)?r)aUChMV2yBY zybGww%lP*1_Od+RBX%|pTi6a*Fu+Fe|4gPf4+q3oq;2 zU0liLqgW8*0@kf=1^&Xz-L$ChkGeGImYp8?>UMJyqK55Eo?!PXy{XJ&Q8uFZ^cvpP z2lX@x39NaFv79iwF7incx}c?L$(E>>b}1s?+F+7zI!SkxKJ>5j14Gt*Uc(Dod)*_E3rbA~xigLdB<3O{rgw zn>%L3X+$~xApoU~L&T>-Wje(?EV3g|>^K^$01qhl#}#|#y1@Mn0MRz-?e1Z+7iL(u#tTF&$19D zKB0k1Wx(}b$Qo=(l#dmJ_>={S=ox;0PAJaE3jJ{YlK^b7ND$DTJ+I*y^02R<>B6fE zSSLbBVpkQ7nOS=FiuXang^xRvd`diy+S&;_{f!gCMkrL&w0gS8bP?NRc~xkusq`GF z75nM80Q5A@RWmAcK$6y}E=Up)|S7?d1`bpU76b9%q(QoNl=NN)1V#n8R z;V=QZ!||v>mVm=+K1%YoxQ+v3RI#SQI)p2BtM1@r>QUZhw&0t#!c-MnWIM#-X;@|g znn96u&!X&;e0E73;V%1fMwnjt1**}72h{yTn_R4{@rSJ zzTSsuU*Bhm0!s8)pv)j-*@y%QyxWqxJ#~M+&+_GlWgTOE>!l05f_XabW`< zfX0AWx*~jrLLslB*T85#eE;OFgs>!pv}8py;B z+c$XS>vKfM#`MuNu=p8mxXBrKl*~*{p2Ec12G`w*4=o_exs-I;VNdcMg!={!()$?B zYPHt`M@qMfv>vU2W~^@9xRG&~&rprhcK@2_U78-;y5>vFQR1f|npZ4L%iuo6fo`KN zbKIVD8X|u^F?qBi!go(_;u*Tf+Ij54=y5{GL`j0fh$Xx^LTPyj-6E&suyWG;yp1(s z@fIdj84;#2-TgS~!pD%wu3sHgcvKby%pRTFjgKLD{JUBJEYYWp3-%wnV_$Y&qK=Kp zwIGg8lw1UUvuiu@rKLQ>V5;>qzJ)x?Z&Hp~Zx`{Ezg9`}AGYLIeZPkeTde8fsM@ca zC||E>twp}H6ugn(-JgzZ>-92csM&e!K0^d5-Shs+GznXko#f^1y2}sncG<>~^R|z13;z;C7P?oCUgA z*4yg0*S-wY&#7qitlCL@wP*k>eOA9TGc-lJp+A5 zBqQ_wbAb}Ip+~_&3wUc;uYrN2!OY_Ico^us>g0}~R}7|@PsqbTRu@P3gEBUli`(?&)d z6K=N8BPS9y=u^B8hDXPa?I+}{yY0Qlpc~6!-cyM#-|gcr9{J8xeN#aJVWGiXCQ%Re?fuA`3aV&Idb>ZVJ1D{M@j zSpV6?AZ*cbn365F2I+3=Rv)zFzzbWa=eqT~a858l+~5ozGfy?s;Gq99PV`t7n9vdX4xS(%ys^~pR;t$&0@~;#v_$2ik?&LE z=wLS5<_hl`D{Q;&u6pQGSx#;j0K5o*%rJ=zON2&7hU5ed2G#VYtze_sVR%_at z7sH?!^`6$ey|!VFA#@Yf{O;K=r`03hAR5%Wz#~Z`-B<&n@tQc-!HDNHy3j~=mnQ$T zNIc1dg>bdLTgCLl!QicR;n-?Hu;e-q`y*jFNt+JS*5+@fw6-zZ0)mf+4p$t4OWC|F zsA3pGG7;H>3lB<`-%hy%K;ndv){i8OZlZ^lY932KK(%xi29|5K{1?X%3|^A0aN-&F z6ukp}nu*)JBwLT!*1ewCqn`p_1gT#8n3iaY4n~Kg}FG1bhm};UiEDE?#(SRd7YSa*`ccp&vDY}9G~&wR(|~IoYK@p zjMFF%>-ah*G*n&&Q@a*kFut`c5?E)9>+D-~m(=U-#*OGf4cwc-N0>t5#VJd(Sdm~P z@YCauOphQ+4e=7wa}ty5Bn*RHo1v8+c_9o{5W&GsG5c*~iPnbm(3bcR;qT1Cc%k5}-7*xWmdSOggg{YZ76s!B*=df<~* z?L`>DygC<`1lad|vq{mp&b7^MB}qL&ps&;Uv#&$kg8l|CAIs^{oql$_p5Qz_ki5>= z>vG#@+1->tK|r(6@a20PUK8_dZFwK}j4#1DDV9_G)QxcaC9m}Q18?8VbBjla`(`Cx z3YFeyRrtpniz_dv>dfASV@9WG76LUST_!sv>+c58Xev`la&mEz+r?`3T`K59D9V;u z*xnf27ojw(=fd*<`f468%;j#>i$qAhth$5y(0MlUib_0wc{=b4@ZOjC z-uoS2O|l>F?|q1w<|7|cxaQU3Tf$k1h*67*{ZyA)q~4^lJC8^%ZmqKh_tO7(8TKP+RL)o$S0~9$v*Uidy=w1S+8U#C zb5+qO7oiD31P`%G6ectWC`c}s-bKd2Y zkSz(6!81eKr4yeebtp_LPQJ`183N;0J=$MQ@p!spJR@k z5Mf7OLcP|v;T<_*bS3gmkGE^KA~nWF>khA=2Q_LqDvn#$7UFD5#Dw6yGn?5Gtv@Gh z`uK2VRWv{v!^CQ<%#n+-0)u6afoRn)ou;o7p2dRz<^!9!;}Ay5GqM%QKIx>uJmQ0X zV^kKx1$%L9eUurmmQ7x=j4+^8Y5=B010I*nl}O>-V?Mwlq6Urnp=YAxuz zI@nq=$){J~%}*Ieksw$~&BkW5@(JJiMOU?L(3|PkqVI`OnRRQ%=yA;6c=fDO%6snW(h_N2*Lx3ZRbhqD9B``DZHI^ zEJ3WIsYmGe5cp!yYkDizy0x92Lfe`ie2-tF9QO%#bcXJ-%X=fj8E>(W_g{~Cl37+( zXIC1eyWi9^w0T2<_vcM<1{X%rMll|AUIjJ*_9l#!t!ItQ>{cD_1zSake|jR=Kia>b zm78buxPaDD&x+&4Lh#mHWGKKQxgC=9^QfS&DBErn@lJue7@h+O+g7R= zP3;mgU5USX?m{v7b^=Mlqh6+O`qtpoWp^!YhA97l8lX#ATMHW-dR41t#n{|(2N*+< zcnS|r1}(lz^_cp`WDQ0&FV0^+VVo!Al8HV!NY({#>hToSS?A#2!y+$W)e3RMSIZ{{zAQAZ^-VkpkY35`)`|So zOJAy@Ep5P|TkDwrjqJq!BsZWgEAe^_2wT+Jlu?GqzJ&vIU{%Aa-X*HxPkGr)D%y>; zqON!rdTBLB!G3oSHoq>*1N3E;FeYa!t$nVsq&?>~{FhO#Qoeng@!~4b_K+-NrtXQ8 zV!S;t^Fs+FMiXS?y}Z|*=pc(7)62d?F;2}}03>gz-7gDS8W_Uofa$skyA5lOfS3X* zla*pt>$!Tfv(_PuedUB0slIxdlNc8@=ZUa>O@&hT>NCZ&02uY8Qx4$2|rsNLIr z2NCYo^A0R#o72lX=^|IeGG)~{p}C!2XP@4qk|aSDCF1w_rNC`q#tkB1c=IGkp&4Z6 z@3L|(5Hf9b!io*FIh3TZnOh$Xu1S!*Cs##7#J+#topQs~l3Omz$>Z6%^zdiW#+JR> zPOGvYG4AOewI912VjfIxAC&cxyuu(YuIz?KSIl0kY){+dF3;ZGjhWy| z%3qm>loa-LFFd#ur61kV(Ux&=$zkLHK$YCpeWHu4_Bp%o+`3&|1=E=)+xo?gvixb~FUazb`@m%3>Kc^Db#z(l~mrxv)6vKWu%sRh2XrT6> z=oR-i=5c#6w@H_M^z41)9YM8~#`OdeDF^aQJ2()f z!VV4^#@JH;mapF+d&^kBBcLFYz%88PoB7Kp-VqrG%5$Wo8*{%htw?QD?+|p<*P;ru zqq`b#U+@WD&{5YDBDTWH5%TXW!e~B;;=@}^ks8ZsM{rWn$&rHcKHIaPhqUmgU~{ zrPm-^D%SVH{aN4M|L`(NC~|e8OVAw@!)1%JOlY5rvjii)c%A=&xpC>J znoYF*-Cp_#c30a0{T>}GkM_PZNENGCti;y{=kBnN8c$%Ut1NAM+Pa?{vg3<2;s~ab zLPGx-aeTz2%uF%L?^xiP;AuqapfkS8{6Wj;61DZ~rwJX#s^v*Bx!t^_t*VPln*C_U z?X;x56vu^DLLqT^)gzd#(WjS6WxZ90^;#=LfL2h}>oVlFUc`ZV!L)#0UDsaTO>! zQ6c=dDKyrCsFFVapnOPa_*H)6@f7(mb!l1v+;J_UR1w_lJR42w*#nwDR?$z}h>}<+ z46Joc5VCc&>~Tl@@QzJTNn*0D?JkY^O8PnGlle|1kTZ)62QxUN@$Sj2LU!oQ^G7xH z9f08Ag)nxVlv7X?WgA6Cup5~*g*^5>nug=ToU!@0*0mv_1v9ozO-dc!?+lgW2*IPi zUMI3DKg4a~xOc%&b^r)sE}lZgFoZ*{$nNJTl19`*R}3|mo}_NPM;~b7(iLu|mC3%q z{7+5JQ3*xetmb=-H{oVC4Zl$==sB&JeKL<*ld;N=dESu2p|p7ro+&m8+$!mS89~&n zekZgu&@_0IlO}^OzCuT&y3V}XdB4E0=g!lrEJB7^=I9tLo6%{F88m*?(*xVMY}a>& zWO0Pk``x8KZAyk4AWuxwK@*r$Rul|k*R}4yy6mp(Q~-gL;dfu_EmzbcA9UB^u$$sv z*lO}MU$wovG~fUpc@^3@qR;9S_$}Yw(@AtSBwznvrMeWHR^@+Sej(GTD@jKH9wjQ$ zKgj zfOG#r-N2F|w?87?s+ImmAi`na{~3^lY%2KbHALiBXG#kquJ)aip%<%8P^G1tkdeIv z%xa5i>0n$(Za&z(#Ci5-+$J~RF;B6rI9bVVi0y9zT>ik+kfn;}YRS&CFIKxD2VG*M z_!IMOK?CdHlJ1E<*&dCS%I1wYh`CcQ8p{eS-WC;-_Jz28xenA~%x;z!fhnH%Ol6X| zfTGKKz->bTKZX~tXX4XW)oR9hggs(jlbaeX3_{cf<`Wgn1L&bli7UA@YJ8m&``Si5 zC&hjz?^7NxW)J7>ds8lW)nh-pS7$ooG1_SWxm`m`?+Op$6Kv*mD}Xk8Sm&E7)Vd%V z!@ny%HjhY|kBRS@$_f~+{X8HkMAAJF zPR>sktn&ilY#D6p@U*kai}J$a_B6j=VSpA8ufT8Ed6Hg>Jtyger+&SXuW zQl@d1R~q!dzF>Pa-CLzW$U4EzB$hAZJ~g$qp05*6BHp@jpsncs*u1$8pTHI24tFUR zF?6$CY5QIY*Nx3-lT6fd?0m+{mUrIIQZYzKci`cseOgqzMVC$INp-9>CMT?sq?4=Q z^@A-ReNzdN52QS(M*#X3RK)ybQaTv>5QNCKg%X(;Nt}6QOeV^4ct!l(rcq0~j*!&iI3Ked0Sw)^F90skQ7*-cj5R93b``?7K5SFRD8 z$$1)};c89|V72;P)*kHPn$tjea6FaiQB3`wjW5XES+ra6;W1ysq6-;YLss0VOM>qW z*R)r5j%mu$YIJp&Y8%rn{q_qQyn*IEjw*iSfUvK#%A&5kXR2d=rfQ=^7GQDW+NEs}DP~!-yv$B6O_& zkFl?gYqEReMjlkKkXBJZQW~Til#~(?5Q#~5H)9|sjevwq7=j=n-LZj$NOx?+knRy9 zN4)n?pZYz%@B4?JkK?m@=iKL9=gRN(Ju5vF=ZUuPCPX@;#cs*jSh!Do_r*!F9WPHM zVX|~zs@38ljFs|Fg1;z)*u^kl9wmy1l}D=g(A03;8Dn{s!`q$FSU|C)B^=Qf?YRcS?%x3lDjZ zs$q=Qw8ec6CUSVtji?m3|DmvfN4Nay&0g<0lSJ?{IL$WLEZqQC@xuoMlFnx?D~FzQ zdW!r*poc9whg(%yLtwOAWg;|aN8tkyUg##NUKq-dM=D4f(Go`$tcGNC6|pSBJZ_x$ zvgCkYLm?~rqbe#A$atr)ac%d!jt3XNG1+`xw32M3Qi0v|;5MD0Js#Sn#~74h6ueJv zzsFoF$(zRHll0-}BNbHVk2(#o$QRirLe9lMF|c5FqxeGeMe5dFQz2q zDPSum?cyF8QYs>$#6^8HUyS-S^lG!^?S}layU0t7AP~H8<&3il-M;osZ*sYs*Kc!g zzj8TpC?_D_tg(3tAEC&S0t*Cws-%Y(q36sK@kd7|Gx1w)Th>=|l!Why{ItF+Xg8ayCt6W__@<}_ z=#;kcl5Gz8B}t(AdD?*<`rg5SmCa#tO<;p$5y9W*{QzGFNC^ZcL0e&+fJZ9Tu@%IV z?IklCKD=cNuSFhT7*`)~$Vz)Uj#b8@^%Z^JJ7VtU;YABbu=~h&42nmZ-Bo9>qmWzi zJ!OkE)w#jRVaQk*qPfh=;r*J)Yp2w{rz%AKS%s1`&{9~I3v#01)NNA2(&N5jcRo_# zmw*Yt`iPjm<2&(v{RpK4;nvdFJ%MSNO_C;*;qD~-d~+)Wm9f$(_-fR=zNYXuf1@<8 ze0oR+%-I}qqETgY0pB>0yy4d6%tYDb%r#^CwP1|R)aq_2vdXR_!?WEf7Qj9gHy-W5 zvt>99N_fCAfC4|MhCi_eFbkwBy;Guqy$n1c@+Aua``FlyoyHyz;oK~e*=V1jV5Lu} zPt>0^|0&r0Wjj0m=sS5TZ#rYZ zc34KdFMX!uhg0MLEbEXZJ0HH=K-QnohiLmCZKk@2=0if}nqOF3)wywtDD&(1*>SVH z5xFhiahMQPWk}XR3VJ8g?2YpF$W;wJ&`s*i|47oL3R`uIsSBG}GPcos=&dzA5->x9 zHi8oO_^GHWeQl4Ur~Wv)r&|PE+=qYJr**Qx*rY@fG5Fn?Pm<*&1ot4xLPDd{eq#Jm zEQt(LGrHQ9*G4(5Bj-_BV;|md_f$EGeT5))QKnGpq&DVB&TIn~Uwy#7_^*64uN)tX zV|!*`?~!zlmf+^u^;`AewyJ_!j2(*gnNymo-NvRS_jN7PS`+|B0)&$wP#W)OGudb0 zW4rspr--(Tf=}9ZPZ3W8@#i~Q9S2@D3L(f>-_wKF#lAwFyO@Q!EnSrR0|sfWG*zXX z9T=?pUiL}_1~+sFj~5ky=+?)|duHwpq`{cZ{dBD&fn$RshGw031o-#HpNeyY#BXvR zDdtm*g<$l>zLs8P(2@+Ph)5mZ3>q9mO?q&p^_1K2lS{@hXo>1SEZ-kBWh`>~!(^Cg zYo>NJ#=K<`zQ1Ludg)z2ZB``Fp5$b;U0NI4Hk-rrPf+dsn}B^h_x-luk4gL(_Ax*d zROF#rRd;jfRk-Gpt(hz6le~V$TyhtAu2I=ElK9cYqev?9U?VM5m*|K+j<=d73PMY4 z+r}ijGq3AV-L{ijGoZH5nxtKboTJDswr?S?9;h{t)AI-7 zRwk`S=)SKVArm~Nn(v4B=x_=9sK#^akSmxgekb7>J`^r(2L}|2+jqggtbb^@ahjj9 zTuMVYyiSu|05{I`VIbfDY}rby`L_hluxg6h2T{8QR@PLhaT-n2ltkWrWU_x68Qg@gHX&Sn1fv`~^_CLP*%aJncQ{*Glr23u*$o7%yIXr5~YFIQU`B62i) zI?`%92WF~ni(Four11PDuJ=g-zf)s5NVX}8JTb>*;%wM`d|2kR1H+hk^c%DcM) zgE}$B_UU^XoG@L8B3wzknz3hq&f&8BkfMilkN>1|ad>$n_(d~$UOb?fFYFK2m(>W_ zOoGP|V}^56xnvC2#$cp*ej1<_ zqV01tZLDk^)G)GhnJk(;S9vt~!c|MWNWO=RuUfUxZY9sYUZh0A;>73lo!r6SDOU7q z$L(8gZo;m-N#Nx-s0ldAdO3B8;~wM#%fKLI@N#}{Y86sDJwNPE>|#36D}!zt)G)8^ z&KNlV#^K~HSX6K0Z)d+45kQ(}7+0&+xk_$Vm z&p4$t=nUGPkkhB30ZE_zk=fo?V<6+FQ*M>R?ymBoB*oZcO;_Rf*{Vm|KXCXkSJe|kYB4P%x+_P+l-TMmX?zs z$MiK?!MG9EHzfQW%2rWWLE$KZRSFzabqpGEr$W$UKU>zZ&v>n`G10ZEN%9&deLVM27gM z<4fo5jqZ4Bt&4G<16?q5+utoocSwLZwOyM$`^y|d@UUH)b~OML`%s~dCC^S8WYE(Q zQ^A)nMybNPE*TP{8CoJ^UTaQyga`L8bxJ=@+f^kq2(>5L%}v2O!~{f-m1M~#LX0)3 zXB>7&W)xoTO-ru3ovhJ1e{{1C=m~T=er}XS8g~%HxVmL@K_|6pE$mNZI9}y_V}6=e6LqSCF(UPRX2 z=7+@xYd{b=Hv7owa~eql%f05_=5`{+qi@!0bAgK?aa?jELXP!uofhjfv)NMW#E}mU zn45LblDq}n;FaQoH%V2B^gmssAHKr5%kw!Y0V7FXBVLaCHSpufNKdr^`iuXG6zVHm zFKk{ZiZnDa5Rq|Iy5W)uU&$Y*I0)qbZ=_Jm^?bKeAmB9zFRukJooAZ7Tb@>fC9evl zOs{iEZ}zcviz4grx4OFE5)ze$XJ-hECf+rkc-%`_dgUvNA@FMUKl}yaCQI0T9+NSh z4PsOtg5N+qo;hu(?}ankZxI6ybkMPb&Ae_4So~#!@s81(=dx&`!`u0 z${CB1JsKn1vOO}~L^^#@0AdEWeMD+#4%^*jvp2V=2cvOEDC50Jij~NtY0BzpCOy{C%;`<8A}25+B(&=$~p4{4Iue+U%^)8*hn zz`fA?ASkH9?{h@eA>Kxww{vdhM|B|Q4%+WdCCV?IMh=|MjrdMevNszl71+H%qj0z+ zzhpRoqFGNfV*r-=FCTD%ty@IySbgpoR<<1pGT%9xuD%hP@tkicmzJ(n)6gS!rP@0y z$!*qdnYMh)wj6?E9g+5Tz6_~F8bfBqlI(bEr%l1Qk#SRPZSZn2sOF1?0XX`GPd|TB zS$vXb9OUTy5YjE#>zP{(4Sd;M=Jey61c8C%Yw4X=Gfje9SV}lsW%QX*wcFqLP{u1- zl(mbopyPfSKAgv!Xg1rvJ{2>$G*oKG>E0>kELWh-hmx^Cv{1Dy6X{7xr|Hx-v10h zC=tZ_umcRJG@jn;MXuCVtmo1WVvv93Zyn6~+JAL0+x@>fm>m)8w%~Sw@#UuLz!@%O znov!e3VpZ}yrfUIu5eS?J)W4JWb+yu`3jSqv1hshsu}b^;zy$jKj$n>>Fbls`z%?I zf(h@?d3Ack?e>>Ea>cC=$_R}52NRByZZey4idWMd=UnNV110bI)%2k@>>uyiyOPWx zq&@8Ho|Af*g-D$k!ylXc2h)9^!@N6fX=N1y8Oy7j-P|6YWq54wq+f*bb}spr@#&L2 zmvUj+#xLZL@|&A;6+(fw)SPa?zNWE-chTO3ZK44F{vJcOgYR|pTSUJYAiUBpQdi0H z_onKryOKYb0jkk126`!~04A)_540YiB&1L*C#+4k6dA}~-jHOV{78s^hC zc5|a6U(1F63J-tCa3*^ofZ-xFbd5@aZ$E@ypgTNTfbX2WLOtRn;#72_`uR8hrm@H~ z0emamUSp8>B=`P4do;t`VJ>rMoLpdMNE@Y({g(AmK-gDS5>jg~!1chiZjZOVMQlyFS4#3tWt# z2P7AUq+&vzwh{senRBwV8$6=|cm4mMbcTU52n4Gh)viKya<&o0*=J{C&+SJA9mzQE zzgnP(OZV(K+gZ#hz3(MVB|ncDMRde*jpX-XLthUeIU@qfRs<03bm)V|&j#d6&mZ|q zOr$(_Ku)r3H;gzH>LpcH^&O2#V2aY^#^lcCIY*S=jzd^^cE5d2#i{$~>V5538QD!l z`z~F~ZtWm1P{O`K&*ULjNc+&J<|~|au{OvHE&rYJHsA}r6r5eP9&*HFw({qf2kY>7X7 zw|4PCal`YSi@>Eb_bw+%eW2tH@%G|3qO7@MF;=?Jo?1w`M?Yg7*-Ov9G4chKyrsC~ z_vKn*g19%PcH!8gJpAku_I+pr8yO?`8QW#WXYTTvQug1kT^y(tiYO(u)~;gUd$^-U zV_4Cz`4soH>-FGEK*p$VfB35T6pa7qPN-h#1i%Kjl&0tMD=p)?(`f06Ri)Rcaq~I> z=q%_t<5#$McKJo+$zC7EHv3@6Be|8tDa{Kn_V{tFTeuOp%s!38eq~oVXa13U_idy~ z$7ZXxu?gsS!)jR*v@TA2m9`k_RMm5|Trxxyb;LA#&1sO}5(7{gRd8$HS+oT(>XHjC zz55DfA4~Th%w_&;P7)(FPbYOrH`DU>0Yz-R&Vx~;PgyEo886~7?i(xYqC+d^0c)4P z*X#Nj_q9I;79~nouIE7t;i1HR@@zD?BL~6dj~S=Nbj1i_l1iql2lwB*j^BHM*O7grTxziM< zd`UhVpMmNa9%7jT^SL>BA%it1_UQ^xnqt`^9ENLs_r2$8F1RbC>A{h$Ns+)pNyAO? z8tPDEVS-V9YCKFnc&mQgD$-9Sw7zSRX0uixYWdq#?W`&%NyhoFYD;NVEoaA4;Z79h zDsS34X6~A&Rj`B}7(yJkA6ti6zn{MH{_ob1fH3@Kx1LuSq!({GJ8v z9}VRH(WA}K%|{5K!W!96ruuDM(}U(1A3_{j*2P}Sj*%#@#a&6}BJUZ{EvaCf6&iPE zJnQywXNke0fN{%0(>;9oeiACRszN;*hx%hxSSnD~Hc6Bp=wA)|z&3G@lgULaM;Uuj zdgK|6uf}KMjoCSNIC0bB5_yV||E@i1-Oj7(+Dt+h2l%k7>T}L^32^at#&j~h=a|L_ODz6;64LBh9JQ0=06p8 z;rZ*Rr>gQ@4UF8m5xl&$SaO9iHr0dRrzKcX1RF`GDBib?VS2TR-FW+@o-7L=mEI={ z1X}b`Eh*KNm|T!L%p3bevzai>3)`g%hf`>X|1F`gw&dL_EmM+WvoR3&&lkV)y;N1&6d%FL*(#y>WII7$C8mvz ze_cwQfviT^z1j|O@BN5Grs{IOtH#$~jk`aBq{o^-igimh?D-+<1o==-Q3DG~iEMKW zF{*pWT(nfpxQ7q&+7AbIfYaU~#mJ3+fd|AVV}}x1g3i6Cq_D~Xg8nw@-~k@Fk@yHj zvUPnj^dV&e#6MG=rGsvuGIfXPxOe|0(|#@W${c;H?q9jw6L$y#lrzzKqiTbmggh=r zrk+$y@#h1c&#{yu;ztz8Huvdnc$rn_!}4>XVinW?p{6OJ!s+eQL%%FDMlyJ&H3r4( zOoCE>ye(N@(*~21@2j@|@T-XUD?8YMuSwX;@qMZUx+8tZiFX{~J2UkG*2MvWjI)P+ z)LAM_;~yfuN@DM@XV|?V%pf34K2IVbZcY392VUzR2oermUq* zF1h;Pn;At9*5{VX-zdZY3E_JIWRhPy_qbGEBb0VA0w9EA;6m&>&LWV!YNH?Ti-q%n z)Z}XE=2yi$5;Fb+uiTd8=Ky!A)a|+LQHwRBShMqsq{SjbH z$h>ii1SL}2y_~#*r{UCS8lpDtIUKr$GBn-A<^ceWnMgo|C_mAY_bqBn>mL9KFHwZg zEU}pwZ)PApfHuj!^LVZzc+|omH5OBfW$^#?AWsS0}N!1=oQGKmN@^uTZx4nwZJSsG;b znoEpme#eVx)?g>IJ44m`doT9B%?XkL*pKH7`Wr#p*LXW#Pe1yX#lo+RDIgK)uU=lZCkkYoEN(003KWaHvU+Vq4+CHTW@-EI z|5(}qL^o-IIhCGgcTI<$zu=nuOTYmD-&s5&#k{*tM=%NjnLZ$UNV?5=l?`JkljV?3L^kz@ODc z9?hchX~r_Y6$wv0ENW3HZnA2h8TSHIB_E76#cHPBD|o3(RKjo1Zgl6?PR+qK$+kZ2 zH6DJ$BP#Z&;}%4bo&#dCsA-7J_HId}^4g6b)v~{G2^_2dmV*DuD|}^{An+BC%;^Fk zZ1!WNtIBR9RW>Y!`Ysq_IY-=tqC zGN`xo1!-Xyqk^l1mBeb&^E7!ZM4w1D^$FcNm2nfW`X>S=URN$+C|1fpx6MRsGQv_; z?A$Jj5}S;d?oAX$`Tk43fgLYU7ozO5fAs%v{pkN6dgU(hxY}f`uw&;IV&JW8 zVvuqFL)dQ3LBT{*2HG`pnS7Ror<%wTxq44e`(X)8bTkPg%}Ik8k?;zQe1|F$793@& zuH4&~cTf4zvQgrK9({=bwkeuq=i0Xa9QDp2=O)mm0y+z8lzw7X%rXS5UkG*w#I zL%mRfEl@B}Omispa3joU&ThJ#v&v|)y3w^%X>ZKq^XMXZJcRa?^g1#Y3c>Nt%?1nf zjTSMHmrXh7H!CRMlnElQSSR0lVB9Qy+;9AG`l>)t&bM9c-%{7VZ2glsfQy3b+@-{O zc+jclKw60uP|&sZK1Xy-u8xflcl{QsOT=;vWk^ennD<1Vx2ICaj1ULC05r)si=o|( z5K5AjA{Kp0ty*9IkB4~NWmL~Z01|+O+q(w?I;M(M%v09@wdJ$uw>h)WCG>CQ3oOPo zBaoOqPeC&fDEpWavB-RaL%lOFAoU;s(e(Zzci?A0-qUSTJ(K-)WYvpVx+D?)d1a}< zglLAP-62jrSeyD%%>=+iSaa$12MBf<_xS&W7#~<4&tDtb?f+j9XXq9OFhRKny`JLJ zA@%X)J*w_g$vGO8yP+R3!I2Fvp(GXZ)Be@Vp@Mo)>5xf{jEJZtEu+y{Ov`^WK5}NGC-oLN7r8L9el39<6H15)AwbRGghgqfMOO*I~HMgP!KR-;0{(iRDCqJK#C zd(KtfW|qs}?z!|i$$>U2fyzm>>ZSD^H-$c2>LkPg!A9sOwzNsSY2&YPJ()Lp9H0(p z^amLva-U?=@WXfW;D;|Ta{rUQDKG?p!025__zq@EQ3jK2w~#A*S5+Gl3Ypf++PA1! z_dEJYadh!TtszBc*U(M2H%ze|MH8n#m5FXY(~hsZt`Nx*rKq(_UQG2pU*?_;!0o0m zq0}>HqPnZ&fynd*K{0<@D*)esDw$^iCbu2>DxbSE><2{V*CGAk4l~>bZZ6vwdVE1m zg^l5hG1(5{mY-2yy~MiD;(AyFV36zMTx<7}i7$&-b^1o~!D5dTrEQm|Unx{3^I!WR9|VLAiYZ~} zv#-Oi9{mJqGTf&HW>Bhs?!r3ReJq$tYgcRWdPkDdo1K|WJp&nGD!=!(J+tK1b|!{T z5XgSUI=Ux^tXp?p>v`d9h(4G$Szq{E{)ePvcqnLI$3S|ozA2u(``Td#iv zt6LrMUfXKh(1bwz7}2}GP749i26;Dz8i6+2h-moBe|tgzDA7OWqcXvmX%o*~v!J3s zDoEYb^*t&5B|Rc8bW;%cl0WSi1IIV8SmSitSUi=q<`uqTJ3a}c6Y|Qq$dEHi%x^yh zZ!3U~vgbFszEl}#jqE68^Ky(2Q6uMzSVFUMV1wO58J>TYZf-$k2QfSrUCrKqDzX%2 zLM8z@cAL+NmndjFK7IP+04vmzA5+XT_foW@m;)H3SFT3yiV_g;Tvm~ndpIgki=KQE zxVaysI=D5`o66|$^L8KapH@9n>Nz9ZUnXPCS=-d{!y8XZSECSpm=0ZT#% zqbsCku%^QvunXgLHFihDKxedVg3Lv~1Kk~mu1fQWr2{RnjGKeC^>nHO+@Oj0H1TIp z?YM64W1SQ>qgSy6JM9H|eop>wXzW*~D`2;-3sc!Us{%Xfm&4N=w8`k74do zI?z3qI?g$8+bgsfJFuIw0``F;Lx&194elw+wzn|+A9vxz5mF<(%RN6w<{?1hDz`%N z5pX{gn_;8frR(mJz*K%BOFJkxW5|}_=Qcx(y<&l+4ddS3(@p*zGvwp+Re0D`Q+OL` zzBTN4CLcw7?drv&y#d7_C$}#ac$OUeC_kgKKmU7IhujI6h2fg~frj@&wACEoLvLE7S40u;Li-Nx zLtps7DP$`#TRkpsuPOV>4`uR@Z!#TkmpS0z1mgRMnT+p~W5vWmbgZRY!`hMIB4 zFZPrtJcGvo-oBt=`rzgL{d zW1gr{HUv$nc3H)2TTzVXe;xzCgM9;duor1g$F$yj!`=?g2$re*(3a{h8Rz}Zevayb zc6EdG&MnhX0ms}#d`H*^9pafhesG~c8|go2ef}m|-3)+szxbF-Z6*1sc0w2bL+td| z8dV5yj1E+Oft4yg$XJ9v(bQ_J!i4lcjtJn*=Kvl|xviKBYq)GSAI$USU#j}21^a6- zTeT-8U&~Cc5iKeKgk#vrVe?>PR_N!sfAVDh{Vd7?S1@8#30wH?-jU4$VWS6u?mnn% zvxB9%miOnXs*Dk>@c{TYJ^CB}q=NX{Ne)ybXPD7oiock4_8!A_^dNUkjIhh@)h((` zmdO+Dq^!&DB1-od=zjtx|Muw5{{mPpAYQSpw6*-43g2RUM3tVJW%t6@+N2V+gZSt% zvcDx=&%V`?a7f#rq&B*TXlqXUtuOJsnU!E2r+CRRnhbfHe;hQ=3 za;$D}tT@8h_h+oUFE+MgOZK}r>wVD(=9>siPHO0M&Tn1m4srP-B98ls za10z%c)Uh`TnyRX=S7Zr`RD(!br8x^s^q_Y7r+6;qc%0Xv*5>n&>&ZhG*QV}>?be) z4Zm?M&xLgQ5}4DlDUI>ktOkt!VBQ$_fMFJPyj_m+!FcBz9nS=OyPiM5DM~z7#8`XQ zgu;!7Ii*CL$?W_RK-lq@ss6j{0BhcTixBA6J;ruGm*E&ubaLVTyRzBJ=3x~(&0?kF zAzpi5->-Of@T1uVJ)}0N__t26O`+}S$;0I`r?Wi=<>PenXs0qgm`}tF_ipW#4OO19 zW)aPi{(d^#GL2I~-(a%25}ilb4VPWaNSlU4oAmL^rJ5-rTLnI9LJP9{_ig~KO!mRZ zd2f7|s&ctDwZ+%}2*>c}1OPxi44w z;xKSqE5lf49>bmEa)WXdCeQGy&d6>mZN^rBknS|$Rflzaj;K+8pP*>@SL^;wd zdEJtCHsv~@ynlQ{A${8QJx9RBKrf5MzX0-P5x*Gg{wbcofdy_AnGwUra~Y2YZcOKm zZG*Y~8cIFwPrV{f7G^_)V z#@Cj+zC7GI-g?*B=HMk+$!SdjPak4JEaD-n?@2d{l!)$Y8a{B z9Vu|X2v=)){v_=Qqc_c(Wvn_>7`eZ-RLqlRM6@k4M16=eb2tb#kdXAe;T*j(joaL}?jaNXWm9Ld(7?U#^ z?@-MO?5H^%yebsgY3IxH#YpcgA@oaab-KRl^32QZb~D}JKbEQeKFXleNm6`<-f!X@ z^c>@&mm}IzHEv}n>$s_5X_=~7W@P&+h7Kr}qo(l0K$2@mEtIDG&QPK&+T5aO;c8D)z@{9oPsTr4%BzDORpu}vP7fdTba!ve zpyn;@G6d^bMS%VH1x92k&g&U-14*z5PSg0Fh~?;GF>Ah(2@Q-Oj}v7HkHK0#^+L zT#+9>u7oT{t1j1g!5hZ086qBuN0Xz)mT6lcw?VP(^@umT`~l@gE_*@tpX#Wnl`pcsJeB`b&kh>$Mxe@<=`BsV#U`nComVe{n z{oeuaDyLA3VP8k!GO9a-{g~XrGpg;n*CpJEoqwP$|Mv;}4pss8A)#;NkLM$fZx_>p z%!LK0BGRYKo^=7-n_YYVb9>X@H(mLrY-}{$D#pynkrO3}|h0`|n}@zq8m1 zF>9cih~Va@y#Wxb4ywBR126h7lLYLYDDm=C=BFwSLM4Pm*w;wcS1M-rfOAGq_@5rVU5-C^q z4W~Ca6E_muSB-@2+-`j8O#Hw85#D$NZsSuo=)}pM0pGAd@+x}#b{ky#3ccc3W-sLrxRLf^S6@QD@&8WVncd7zKX@d!=2ijij z&Ydd$5BWLS$G{>WM-;FAcKsFfsp{MKCm7YpV(fxrk3Rs5(As5UvIIPmcR3ogr%vei z{yi{$Q-PgSG?*fZkbTlkH2Lfh%Oe1JJ7V0krPYt%l1 z_-5r3l5R)Gl0Wl?|6CTJaV@CZX(H9cHJFI;gVEjXeRBPo&t4?k0M3>5lE{d6Tm85e zCE^7bN!QVnLx0{X^%rG%;BhS+92k+ROe1>4qI`$olmbIg9z$wRO1+$%5#jD5BLyuz zGAXXA5W>}c0`zC+z|&On@y-f=a4d#64L$dzMw2ouQ$3UwjEX1bxJM8yc}JPBWi*?v zNk`2&Ic;{zDk-iIQ||G7jJ|Jw|C_+QlV za^)AICVo%Hw#JYoSgurkmbH7UN+V^da&3%SyMCNbD1V9g^N>b6y<52Qy5{$`Wpnr# z55&J(y1c9aV3hvH-Jw4}PHH@T;XmrZPV-QKVN@C1hZUtgW+^&SIX>74j9rkgVUNnA zz&MhC!PuH3**b21Cyu_A0t#H9gXwR6kX#Y?!FqR(>xR}9jWrN`M+?Wk#o^|cxJt0m zOuum8jBgd~q1@A?_oQ6KLpiFgONVN~KHBdfm;C>IfBn;wOS5I~oO{!)`OVSk1zXE-;t|s3RriM5253p)*`VL$D$=4XCqZwhekuB{(Z@`ECK$N zQ@#>1W9`(MB9cie!ZU{0i1jkcD_Lft^ee`?2gNvLuoMVBf)(9={uGm(?OQ31%x`=2 zU+V_^4QQTa_<$yu*OIWPF!%1)V2!RdV%||YCMoh~i$><1VRNHZce-YipEJ-m_JYTE zjl~hOL&}ca$zJUFxueC|%OQd7cZf zm2!e7Jt7^w>lEt#5uWtIOSN53MCuaL${*lozj;sVkAQ&Dsy0`K#nDK-%T>yJ&9iN| z4vdz5p(uKfC3^OHB`9}+D4;g3n7NOIAI-bP)S~gA5BY+t#n$q@ztRCik;KP3e{biH zknxSZXanD}QX$SQ?S=78*QiBB)Dm3%9+TVBPlZb(~tFc*(C=et1KKL!Oz$85(4^t#?Tp(*v)Hn-GW1R|vr z%+nG-NxO^fey?A~fLp_oyi_W?0z}4^Au6{sMD-OH4p&Io66n|-MmGQZ{_3CC+&=}R zO!x8&V9~sI;-j#GCblJhM}f&j6>1%4^W*&4>F-&(A_5$}rNqa$ujVbeU$wz-9u8!4 zE(c^OWmb<@vCS&on5{kKxEgtsmJ9t}*0+?+z1Z;58PJxvTp0WG59Ro*0c4m74FY=udRhI`dqL#}ET zSj>N$xP5gz-|U0A6FW`PLsG-UOc$K~SR@Vmc~}C#a|z8NU)u-G-!>Q% z6dAqcrv-2%$p=jE`$CVNFc=yI;tC`FIsOk#2Ko}ywd)GW7=9wza-8#@333J zsn4V6KeqYBcbga1k_NdaqqcTuS3L^^x#P_&djhEHL3n15g+J&oST3 z14k4d@l@A#buagP&Ul@$NBAS{)y&NSPi9Chleo(EkPfYFq`jA7A3gE75?g1a{etxA z2%C=(XLX@~k4yb?7mb$77JW9hq;(J~mwgE$|J&98iv1a&^Uk^uN%Dm!{L+{$>=kN7 z=l3&_^Q7Z-p7~XQxry;dmO@SH@=OalX3q^ zJ4)wJV82Ii8w^OUJ2FkGr_HEaY%BYgN3CS^VD&Py*5e)Xe51B0MRim;%KKUPF@uAx zDE+&?v3Hj;G+3FK5yRR@|FM^Sgw6>!hCv zWG8LKoj>NBVpDsoAK4L|!Jbt**q=5zrig+@Z#UD;N;8fNJ|2IVp){dao}kzVZOzV! zcm0il1FpNj90Yyg|FRW9LuDVQFJN`gws`io`6p{5+w{lNS!L`t0W-mj zH~LE?zAH9D72BY#*jsyvT)?7b6ead|NdLFg0w?7n=VcL+Lk9`}7;_{qdzMXvbycF{ zr_Z1JeGH*geKpt&z($FBRR`wUl+7Iv@#{dTIm6!@t=whdWK%6Ooq#iO3M%e#b4 zhJUp0$_VmRXPa$)Pv#FuoeCIo2Mlv&i!9+XG_wEg-YH)QtWcT9aB^!)m4TvTprTUc zelxBMFr#MSEtYX*GTUBupI@qQF(TGOq>kGYFMAz1up!+UbP_m@f#c>;aG;59s_Fgb_yFnBL z6`x?4|In!R%+v1%4>Td`4`V|5d!x+Gb4uO|jcPBPN&K(4#7vyJ{AGqhfGmY&_a^Yw zv$8MZ(Fv2RV)b@ml?~A`F&_=bF6_KxvwG}c5L>H@$}Ba8>^B)2*j)aNt^#(wlqv{H zw!dFr%%&N~?}cV(Qi>?K?s!GG@oFx};L0|@4)B{@W{4x2))m4P=Hrwsj-;zx>Qo*~9aEcWRG1!~o#I zf7%56I#Y{&98_vVp4vZu4k@PDnyAD1(WjX8w&(I;uQXiyy%9@11xE@FvYWYN;n*n< z{dW1-u#NJ(K{@8lYkHrDA)c#m+QT|smsWPfo8Prc8x=h?PTcv-tori84cBz6#2jG` zdxqP~ve@Rrn`@YIns2!C<8g5viLE-%^WO;Il8qcdiKYz?6-OHtVMC=<#Y8D5OY*o#s&O&tF2!p1iwCZ+Fg;>r`mg~wz5!D9|$oVNGj40i> z-yJnxM^-&I6=ra9rt91t|dPz){qq#{V)M&%B)akB{{<6O7n zVT^E^c1Y6!fiO9@c)fUrxT&%HA`w@7it-Hc`WdNv@h>s5bR%TzCY=$u04nTm)D0g3F z4Q1zdwcWG~B2BB~*gCR77FjH!AD}~?=f9kjl8UL|&t~!bezsC|z^%g>y+9j=QHcvl4)L?tP+%z-Ij|4|5;Kl-G-g4G9h`u;}jT#>V5;re5lX z5h1KXzJh0!O}ns1qixCe=GnbCIQ$+wEYQ!;fU+x<*sT#jc+Dyw{t?AES->ddi`i5mfX$IdImkWn;e?61N@ zKMc}nmsGeNf#C?K@e7hXo;2i7;>^^N47wWVCG(hJXUymI^}d-$3j3o>i2$b*J6 zX1@ept$Zl!CI)hVP`fT8C!UiaCMIxqTgZ-QFGrfqa`9v0m9vpGW+m9JUNphIBA#Ka zNCVc;lw-<=)!)=+B;ttz%tc7er>GZ(D77nJ2eq9M4I%oU&EGfD8hgyebCl0M@(1Qnk z*IV6%#x(Txvo;fAcgd~CveQR5h72qU_V;xw7a?H&ruw{8MllYlv2mRTiFB!{torB5 zov3z-9E$SIVZO!vXtC8DxUaHHi!oATRE#y;Vy5z)K)PGG+NVkkPXaGDsRMUo_}%(@ zL3M5dR?5w3K%f0eZL1q^4WkWDpWuNZNiJxwt@x)u$F3LTzyp;&HAyBA2lwJ#X3#agM=6cz!sAq|VU zbfb3<_fVxVQ7)y#zP3gfbM>l>V|FP`m(ZEdM7&kbb^04yiG=Tt_c?Ea)Q$E>GPYcg zn(lh%sjO8vR|7_hxktZ3s(K(a@wuvvP1Z*tRVGXO%l_hodKatY^R7rf>Rb#cYpq`K zC<7xF=v{ywV^@BA}Z3)Gv zoEK<%M#qG#9=a-r8>tn|C`$Q*kS?Kg`_Kt(lq)XUa zorj_;f`_ZnWK}f_jhUOAfZktjZMZ_V>$znsw$e|*%*Lj4#6Kg)KCI8dE4_K8ONhT$ zrf~4W;l3BFs;geaZm?xoqWRl2JL$Jq&x{t6AM^zS>h$v!2hGkJy#d)zv#u3Yny-!3 z0z}jTUaMI+#yg6~kMP?&i3XC#h7GiV=^zB=ZMq6O$e==;Y04x6@?aieqTtX#F zMQu|_&5Q^L%dHL3lZv~zA&OgNqbM$=mF0@NHi;NnDwIV6k{;zS&76xa`Vaap-;3|! znRlLfe$UJ|AKU_NBq{`E1iGonzz$NVl)iF_g<8@hm^szDgPFJu)bnqD;uVR!3pM`D z`ZpWVc7f`AOq)>qdvKv2hNCDM%!cA4@2kRg#%bd4hHivU>Z-B&3H1Z{HZCBVPBn}= zWA?&xZ^6B|fs|g&4~>b*=T?_lnI-ho!B=hGG_BZ$8(T5{=G5xheT?NghoY;e8hb~} zg3q*uzdjVWDOBPZhmVLIec0k7flwJVA9K+iepuBRcbGIky}q1l8Gr{5yg*OkuAtVM z2H^*~j$B?g5+X|2p?281GPxzUDOWlSLnJg017r9L z{S!B`B1h9(;yriu-|xh&4Y(NQ0G{9J6}!PI-Lk-SR82c#r96*bjBV%uL~#k_w;ra2 zTo!E!rzW(O`4$guZdn|ZHSA-d+2)qDODYh&P6Q{#s(Zz=g4>6Uu1hbxr|wWqMqcv= zTE@XrQ&i<;1p?VUB(`7l1FE43KM0)SXZ9#z%saD2?l}s$47rFPBlVO5x)oIPY^UFV zt`9pkk-OuGM&0h!&k9hy`B~{>TRHGx-uINNKr2`}ZzeTQF_rVU_SV$**4LXotqWU& zbq&If9XAmO?Snr=W%t=|oprH+KjLsn$C}`Y!3u(-Al1g3nY9C=+q=$HR-P{bde@e; z)l(X1pE$}EnUWjXW-oE8HQqTM^V_7~D(uqtJ2wAA>1z4L_m zB&1~dWU_zXIDEo{rk=_`IcDbVwyoLm`b^s~Rj-c_12-0}K6X}2J`WHUmoe0;kN&mxaLh*X> z#e0I-qBCAq4AE4xy&G|vrdRI!w&H!LB)E-mZh(cZ0ZeUvxE%(jc(da%a z7dorvR$X8=Y3#=$U08Mui&0t2G{9A=!h|Wws&4x znhTq>c;Q*9#cO`{%EK{N((c%gVN&S04Ki?aIv#g3hR!0CD3%P<0YX!E2Z^cjR_dv{ z6i>s7+{^s)H5ufHpsm!-G)h`aWYET!$lf@<2cD64nYOIBro|OMJ$@prAx?-~vX$HSUFBwZ| zF@-C0)&C_8DL?|HJ@W5Me(J$~Yx0vEKS&x9I46-gNWZIf-iW?^i}bji@PafP4^8?H DtXPnX diff --git a/Docs/images/replace_fixed_subrange.png b/Docs/images/replace_fixed_subrange.png deleted file mode 100644 index 6dfce26870fcb68ead38ae5ad1e582445b5241b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57303 zcmeEu_e0X#|G!ygWvOMZoMmO^AT{@FX}PGZ+)~cmxd$TI(9D&&Czh$111D~=a-_J@ z+#)G%L_!f%M84ene&25Qo%b*Je)#EdUa#jl=XuWKxer9#G}1kC=)@r=CZ;1du3x>) z#Kf}9#KbIjU_Ya$7VuJ(iRn_DwWP*?ob1Y$M`d zM6;uwvIv}CdwgbjISZ{p)tb+upeQTUNebGZph9QTKJj36lfP7*DOEjAbfPz&M}Qaj z`3BRzN7_7np{ns`X28$F_V2msJ&eRbMC1g%3au?#(nIJ-z0gc4yFE-Y_0}^Fsy8F0g{oc!s0n6~x*Gv+eQ}P2{sk2#5MrpGc$GNLv;FH@&nbadXjz3}& zeG{iF9o~9r^%dzTVy3KC{h8QNKl@y{(F4h+T$55$6}p8E2%MoA3-@5W&ff5rOBIyp zCCiC5D4Bfey)n&x0E=C0yo5lpGxd;5Tb^W$j*t*6 zeA@fGv=6@DBc06}^;o5Jzh5(d&0Y~srpvF4rklN*FK=~RRW&;}^dvf)^Y~Mt`%3Sb zSeq~1WQ_^s%4W&f!`saLXfNq8`1{dUk5B$M7WI^J|JV~z!K-2CUY&S%gkL-FmBI{D z?PblIoX6Q)FGX;&PG7QlC|!B*e3)MLq4y^~golKUWwZ4uyyp#KI-;G^C$JzN_2fqB zv7&hdx|+gz>Q4XHRHaEl`3QW_}G}s6@8-% z>kGvThkS(U_#p=&tQwDnb)lbM$)4adj^YXnjc9#zK~na4id@%&E~hU0E{!hEISro3 zT$@ExaFLcGdwQ7FQ}j!8xZ5Yc`{1&tBL@Z9^TXs@YrkK9WRP*dKq$*ArLX!qBCtjZ98qj&(CkgubX;-zr-NRptj31wNP%a9PIkb(_F84B|=Z1 zbrTzWt$Ll~x<`jy`N`2tK_E|DbsVmPw*%NAVlPq7Q-0VCvAlm&Z`5IQyc|Arz-zyk zuor69YqoR7s1yBKAYS~7Kqt6Ees&mT(plX>K>^R*JYIDC@^LwC#CgG6HF+1_zA(Oc zhjhzMlINW8ord?y*Du{7owGj9W6w3qIV)#>{b1o$6Pt6n65NtP#!L53nB2Q#{Z6pB zL9h1qW>NXGmv2wp=Kpqh$#3bPv&eeI%e8JOM>aPk6 zf9)d8>Iy-hMpdH6t!eqTKVp9iG*3;t|c=GNN=wg+6&vS`qlSi5d&a(uF0@Zjw82;pu zgh=8~3YQWwlQ3s7owca4Xe?7Kb1*Y8$5fph-xzZ(b*c(%{Ni(K^(`%OW&F15Q#Yk? zzp;?2ifXPAg|X-{+_?Cd$tXqboXRs*SKpeY7oH@aiSGez#Q6Bk_%Dmk24FpNJ&QfM z8M-_Jyy5`O%7DIW!_OCQ<4<|!)}F1~Svc=G;AvYoSfk-R?Cn@D;wM7BK)$}FyhQ9A z=r{fzIJWjQIeu6b&hC*=4fBulua12SOaMObH3nIMVmzJ_YGB2f6G(Pw6f~P|L=Oo& z`?U4FV-)KMYY|(`@#}}84ip^-=CM0=`hYV>*wejF{8_ZDZAzb2zdN(<*@eq~&(#m+ zhC77s91Au z^=wX;vDpr{PQEaX#kN(oVW)Gj9PL1{;+mmgfl$ZeJ1MU_aKfU?TAmk-r) zcX5kz$wtUV=pI8}xRRpK6>(bU_T7GERAg27`fGfTjD76c`qRm$Ir3}XCA^DzWT{-Q zoKxUlU|(Qs32Vh_wR9)kY`BSA-84Cl==s|1GGi`Gm{8imbal}+AHC&Qi`xe^!>=qnH*Frc)P=8+0|O?Nl$ z$|Ey(KWTXKk+9w5axOvo_;Ip_-(>K2Fo`ljsIMMz9j%|WI9k6DRA%pKMoca)DjtTG zZoSzKFL09>ud5z+!yxz8KdsL3$RF>iJNEqb#Ose%AM4ZfopP_`68zvJkYd+cqoEot z8q*rDSF=}#8n?jy%e32Z=AQ8Wit+-z9B2K(aL6*Gno>{jP|ps`-e{f|snwc1cG08A{jDOm2y1(5J7_y&!y6OP%#|rFWTcoSr+n8p&8zM`zq2)3ee(6#DW_-` zyc^p?oU6aP7A>+BQ03^;b0_PrW<5=iX!)_WV6ApuTy;apmRFf~znY1UW*r}xxRP6{ zk51kT05wj7XKj*ohc^plOnNQ7>xTT$Q$eUB^#a{WZXQ`XgXG}>v>&>=dfB6jtW2(? z$gF7ikK@VD)h7K*ChR8~Jv}-aC!5|kQE3Nhuc^yaF%CK5hLDuCN2|9cZM(2<#aDry zS z1$97GRPJqre-gP1kFw6(8ld&2W6Q8t;4JX`NmocA89_$B_0Qyb!v(}RHo>-Ul5XK` z(c7X!VXVq>e3 z9{Efe*wtQ8P@Tr~eQeLh`INM@2_=Q~bF=4`z5mM=gF(O_PXMwq z7XUxUW{|4?(W`pXDZt*<^s1Aay}LJK4oz7FSw;0f34VL@_msbon*B|xpeXk%BiMdcLMe-quDYn?E{r}#3=#? zPrqX0WxJ?-CG^}o?mIF^HVV%nu`x4qv``>A6>dDrgw*R%*-J0{hLd}}B zg{>`nhs~Csk=l2FQ&jsg(;nvkX*6daIxO<7uwMDMC;xr-6)$J0zu4}?OrffroTc!m zH~LuqcijI{i{2*)?>aBzxv!|`eGqGWHrxL!>90j-i6yghyE7&_%TGt;EBw?Ftuk7nDW;e{&$S`d-v?2s;2C-`ZuPS$t(Z1lQ&tJ znaREv4%Yn}Q~Q?Dd;euGvf20PAPAph0+vD*h$QlhuXz6!#4`2SEv)T!7Px(fb%mEp zEn{@*M;dZvgmkAU@W*1&UNa7aTO?5)#H))}Dw`v#X4YUwYi3cPh(Um1tb8xnLr~uB z@&5kBPrj9Jbe`^krL$iZf-5;A#jq)<@oIvzF15{DtnLxq^h(t{5r2mUN@n}j-1>SC zgxWNbbtS^FI(B6n6S3^Cr~`aKv-W<}HPLIC*cHV5)>2{QIN*unjhI8?j8@!P=UqXy0z$lvMk8z_IQq=iT;q=iVGB}Cm zKP^8B6_;7rz(kD7`mc@lJHgM^pOt9R)-XDNod8VU9Uz#sYbINDo&O!gp?Sv_I7+bn>3}87+Q#ZwGB$_ zin(Rqi`;Tnb6+C)4FeQ4{E%EWn_|PsWZLIV@is?-DQIglK2Z;{(oq|8@^|^_d(UjI zQlr8DX(T1EYeLE!Q8m{()^7WG=!H}6d;briP~Zf8f!>1nYCN5y)Fk0hH3Y+Ke8ZNx z>&sqMmSI=5)7xI|xl3GFOSdH@q>_Ckv9 z{dx0I0a%de%GOlQ=q0e7LREgdC(_^5Aab3!5PvjZrtX|kcbJ;i z5wZ^58A;LD9#_F$$9d%0$qlM_OGvJ)gZRn_9|y+UV|yD~-p&m+h!_@p^ia@mp)%Mh z^H$E;wvkm^3p23BPVuP13Q|efXqc~2w=1CgfhQ@$>`YD!UPunt955HER<7ysVzE7g zPh9YrCmLoLOWD5iW-m~E>yi4_#zsmxrDf#Rk;0ryE=oE1O|95^YVFR~`sp6lLzGXq zbVW|U)z@7c=32OHX5{gW9I3S+*Uq{7R-WuOcMP=b9Gr?;T?_=d%7~+`)^r@w)_eJ= zZX=OWP7yd>S{T%IK4I_6^Cf$I0q@d?l%hJV9mh39%4(YJw4r#{2U8*TKJZq?RS_h%d?YU9lxwvXPuxFHhtqA(PE=6;` zVOutiyE%~bM%T8N-`Hj@v{<+peAcK_c)^aKScApvNS1>-mMPmU%7}+UK?WWnQJL!{ zHBKLwm2qj8zh*`PYvp!8D;1vio!^ZK-obe%u7L-D?Z6{L z&f9G9&GHFvZ~Y`0XDfzdJMSKJI{M<;a^E~l2|5|HcTI1GhbG#0f%)rQ;5h5_scI5g z+*`U={dIkaS>R1&ui^Qp?az4_>hN$j;7cwiLvf_*g-#^`^B($#YtKyB*S4E0&bUi* zT$M3R)z?j8-Fmr)x~eG+j6=Gbneoh6l_5&;aX8*eYkxm?`@-*RsEO6h<67C4O1o~k2b~0qy-4=cN2Qg6 zo&8o2+tO7U;OoZQLXi{YLzvKUUVDgTkRxufcP1%`nRG3gOj*YF+WCJZe;UYNRRMBn z^H@Q_D`f6g46F!UE4dm<^MgoI`**gd*T>icmh-L^BYB^LAGD@9f|XelwKOKT>H{gY`PPgqT=awFKsqH&c28@$)$ulni+Xlqbg?hJOC(%VsUMXeAYFaw!-->B?&L|?f-7kJ^rr1u?%}yM zw_eMm;)34J!RM&)p?;`5@#&bm#TE{*6Uao7o%e|TvlX!~Q_WN|OOmr<>4TRO;#sxX%~z=7LFPd_P6*uSzUBA0Eh{YkD;YlE4s?ZgH`>}+)At3jMd zDqwsd_YyEz-=wg-90ER`Pb~76iLww5P|VAGbZMe;hVu624XB>rJ+jO*8~oZ+)LccO zWS2#gveB0%fT7xyMx2JSlhwU8rF-_d_setLD$Upfd4)Cn@a^EKuh4o$$*abuF{$zN z?iWvEofIPAisqQ1JpPrkq*DHY2hP*Isix#>JQ zC2Z*I*)|WsiLxqB*@BB%H_C=vmSy-xYsudxa;w|9>697eO}cbc|2MmNU(Iq`Y9f*V zopBk*8~D5T&SiVSzuQT?XFu2%bUfCg)b3W%4o*@(w7n?B&%iZ$Fh6d^ zl(L3^NcKkF`213#f{ncpx{h^owt{+8Ao(Viht4bnOrLMnWL zQ3(N0c&%UaoDHP+tz;L+YH$`$Z55%1?qgeQZD;Gmv8jeRrv~*ftB>l9>o(*h@)Dzq z(R;AusD2m4VRyG98N8pnN8?;TFG&;G;v(=nJ3nS0&V!t~(#CjM6~ zEHup0FGAq`4{{}(CEPwZ*`wo;=hQs>maFH#Dd&cP>x<*YLX^gOs&#fbktUX)ga`C6 ztsPX2gPAN=NuaND4I3*{U+rp_gBs#(!N;l}i!HKBrx$gH?4V$ky_M2xHN1uK*acgT z=;BxmUw&6A*P8ppF}O7Dw(~=(r2WaIasyJt0DG79>3R@wdI3#woH^-9emz>;ZYfCL z`jIz6LMga?B(aQwcu5+5C*mE2gu;!+PAFyh>UF7jS~qN@U8yISAeW0*#<8d}CM>Ww_@4+m|HBVO`Sw~*5eh8KC0(pYflW6WmhOlLd z4Soz7fpHhmsh5q)+?*>%o~lu1AEnm>cz#?pO=|q2fGn!JV5EZUG%a_v_6eEws?Q4| z=eBd`2Mt-OewZy-hBN7*J`&TZvG}z{G~C;CDV=+lKxqABU(RC)N)kIg5=*y|I*(iX zz!n=>C^C|Qk@K1mF7tQ7)Q#Y>&17-!b5>zF}A@jrYgp()nR# z6>qIXdehfJ~0K{jw2Pq~G)Sw7jGq;bcTI}+ZID_zq_46RuS1LvSe z%*SOEZd*zS-??`j()Io_RHW&_jRx_%XFHZQv?}buc7PvU))Um5!B_y@LvRG`9bq$` z3*&AR0k*j1D$h>@pfe8J(EvFY`)}CVSQbPh5@qj-aKF2xal!-y(Oq^`lQwkUu>c06 zfGD`h>iFu_u2e`!(Kz9~X+UeWElS>Bhs=!GE?*qHyisL!*}ss&hSSUGsv8VUkhX|? zGj2%yB6Q|mivOoe#l_XMg_*cUXg1Gq{}JPX#tU*}wVA%#`S-HusWmwpoK6Fu%QmXu zcrt*UJp=4+p|NRtY^^-#@<2?8%VOr?isS}ywkOGHgwoe&rQ(uVwPQGJwWSaS;_MQ2 zV$l6&ad={80@?*Foio;`kWE|9YQz$z8!lgi6-BTRIYhKhzHL)Ex4!8ZJERznKJrO( z7m4sa-KTONY3s7RIuESEP3O3T@T8Ylu0*s;MU5vX48N&8>i~mZaTQc4M6;QjSOwT* zgnYI4{8|f-9-X)37qJY`%a=pX_ijF%@EZ2V%8MBAFFm&(1<`LApe|EqL&wFlg5Hvt z2c|t;0KveFkX09K!q5qf6E(RP3blmv)@<|{x|wyj(1WbEcRocVm6F%PxHEE*|po%V@#@h`=I~zG#y-zwuQN93FTRfh0J^~{XxxdcgaU8z}#S%iq)3^^l9Am zXm@W5AnT!;A9~B?bd8%uLgRJ6+0FU(MYx7~Pdyci{aA9i)2MI(JPb9-Ob?dN(XkJm zOC)}b+>yxY&iWRGCRE!v;M}}diLAUOcRs{sX?$0qzpZ&V)q$T|YlA~1g@H;|qvcDV zTrChzxExHRnQ>N)!{ z5?fqANK7KFjt(6&STku*TdgI1wL)y`<^7AG7n-bmIwsE(7XSljEArc6 zS0l}!xkb+}4Qn>ua~mjD;q#fu)wa8FNE}QGD$;s|h>FI~XZw7LF(iUUL1mTFbWVTz za1JAeY{w=6WTI%m+R{>&$$ryuFJHkyrxbM8$Cyrtd%d;)e6^5$^e%aqD+g!Bq@`JXwUafaMvdJEGOxDnO$!{?*vK?LY8+&ANl7FrO#J(vy~HIpl2oF=zfYFXHLX74$yjg~tE`gM=i&JKexAyQ^wwj}h>nDsCM zPaTpUmQ<@H)2zSjd=jmG{~03h|Fx>t5#j#`H;qfuWhCD)O(kyg@sb0LwHHkg662%& ztq^ssYCnCMYVsBtnXGT3nS?%(NqD-6N}4Z6K6|LuzE&dLZDzqy?&8Y_+$3n5!_=U+ zR<_1PI;uo$fOFXw@~zfYqRX}jI>fApxMGD}q&@o71u5T)Y^Cd%awl8$`huHvcAX&u zopLy(R^NQ!OG>2!6Nq|UzY7D^FX}CSuWOXSGjJ9Gz2ulIG*%}&RBh+xs34bTDD$mn zv~p*3P0uN(W>%_3R_r^!<=1jA99fbG#yIQAjM`4x?sp*{{)2>D{fEmrhi}n7C1jVd_N7>gU@q zgkA3av-w&1WtDa+Sc`J713e2Z-zrnJv#d2dImxD0zP$D+!y!H`IzRZ8km~3PZYY3U zkTgPQc5<_bw?NhOWVz}3n2*MOdz<6*qWIVeBo!&#HQeek z-p}NcbGFjY%RYF`!oMX4s3Fj+Nxh>UOz_8gz`s0MA1!|y8ANje8%Jp!X}Qh0@VW8v ztKUVK(PMRRIqxvl(DQR`{B%ZDg;=4RFkq$8zvaW-O;-}QzDtMjp>VwnKN?PW0o|I5 zCgLsN5qDiIs29QRQd>{8V!Y`Xkrr82zjc$n-SRtIDbKeSuDMYzLr7MDT|5ZR_gbOo zn+_>_SC00Dy?gwa_A0~g>Dk{S zTSiZ45Er9_QqBKWWEW{+Ov(3}Q8l>YHFhLz_u-ce8I_PphpW)t_!HH>fBn#b5snTg zrH8u@|6Ykv&VrE|G$&pRdmAMHGes&;`}%2 z7vh^^gw$+sL&XqhTmMXT=Wp-%MUd772fkbBjxt`v9Tgudv&Auj$+%Q1-fKv z6n_pKdh+BSK+GEz{R@aR$x;ZFJW}aoOjlIZE{+z_YI5I8jQUmstfJi8QESG zmEyO(QkzovH~#sinVm;Chyu+&eh&B#;mg+CXE!q3uD-zX*Yca)kAIoD$IM8Yf0 zd}Jx}o{w<{tYy+0#CNc2m}N4b+TZ*2?J1)OtI_pD^XIl6exfZyM$;8!1L2J}OWz>V z8f)}(A%w~SEE{P1auYznddoL>=F^$7M^m4c*O~%0K2pW(69MW_&v)v0pmng*gl{`? zw%Up~TWAq$!3U)e0ysXI?kBvKcM#-E4xYp2vPTJi-O1c9iKNm3pp%atOa!5{=3=Rf zfE_g%Dh`;`vpJCrj~GXSy%(v}Ui#X@K&LB<;0N}mQ6g%m&Kjj12itp-(^*B1LmNrP zUytQX_t0z3K)-ybH)*Gu!>eXKwG#EnqEjW*5J3uru0|B`FOCLSc{=UXl*}O>9ijhS zR^YQ_Xx)$N{y$5lp&yTbVg50Tnotrc`;WMkN3Ha>6JTUkVs2qc zjFhT~2*@X-Ax+44%PGI@R=XgtNeF%`fb>SB%`quNRda`zw-rs%INnQJidc0>_k#qu z#-7pF;{a%{^F z7mZb~Jlo`LadKhjHfoM9%YFek;q6tH>JDwfR?1JWfI~P7j`vnKdAeoLLmBBALrWe& zdri$00V!DFD0GaqSM@x*#zTxUwn(d|dT?+ePo?_jVRQ1ihOR_vu=^1#VL$C!v*jk!a+Ai zQ00#EI7e(5!!gm-@_Mk1pM?s6vev?ivVtwbXfHj26*L3doMhMfFr8E(`doFpAwBp? zu;1uGqTb=y^Fx!?=yQWtfWz6Qpw3i@WR@wlr)-E%MRDmMyIGOF1%- z8$)a1ov{h2Au|t<{8-0r9ZSzqacrYV%{eWSRlS$2tOa$byLwjZTI^njQ* zB*DHd7DK77K;Bb6v$C}~Kt$pg8R(6VA2uqq)awHR24Pxs0zF2Fw&E%4KzbkWT|Bn^ zt_dX9r)Q5mxd)!FGBNbIRyx!5`7eiafT32I>-2x3_*;Z_xYP=OhBldg%+FywK|ty@#9IWCpjJXq8hXv!KWD^K;y|{W zt8hCrI(8a{1nW*f#(i@gbYl6_LBL$^54~=S7bXAp@B9iMpCH#Kj<^0)>r1-#O&ea> z`&3s}ws`l#Bat;5uSYWMJCFpLNDu3Ru~xoOx^R8@;Z=K(WgLMVBQ&m$rVkDP?adg) z&6kv;0~9nsq=-HR;b^HThPUJ;fs$hc&Pz&srjaUoqhT6b1ANJehxJf&m8ouGYvB%Z zq|R4=l4uL7y|}ZO4o$}RH%Aqeof!bn=B~>I!WL!cznBq!oZQ;H2NB2w}^&3|FV`EJ~=qwG_)T6fL&B5p6*5GFNZBJXa(e1@2 zu^Kx8uH%SeUGH>4_AgE(LmivY^#eHTre6QDG4SRXsc+PRNG+?ng&lcv1Y44|;DEz& zGCWihn|%dq%PZ4C(6Skt8tpwwL?>dR{4>_YiETyuP%q&j8aod^Z>2z2U~R)q#HwX) z+axnh*}NWQ(Il&oYeh9nX?#ic6CAm-l|@-}Hw?Af^~>}A%WQKnZeDtCyywnlsBcLW38(T`PjTCe|bkC2B9QIh0N27|&_Q;csPl>}i{@xbO6Nmm1 zRHo2NoP0^Bq)Rm=e*^zwX>*da#dNL|YBQ6rDm~=kRJdyGam9R-yzco!)7GX}gHlxB z(n>GLuzs92B-waC0k03cb4*-XLK0bHz4%FDoZ89@ifSD0iu@`~F;R8xt40QNb@D0V zH&W#6^|~R83&!48G?dFGnt~g#1qDE-0>x^f-nGoXg;Dztul`*L;xB`0c>d<$5v5N* z+G0gO-pwJR?IwpuIA#>K3h}bGZ6t~N7!a+G{colmcyAudA9Wnr_zU2BMK3V?u@q&` zX{O2vx?x_^5LV8nMO35za>z@Jb*g;Z37_D#|(O!;%M>%E%OOYpCf-OlAz;@wyau?|SAi5A6 z=3y!D+14b(o1E%7-Qm&U(L3wqIeT}wC5JzlLX_syqwEVKnN__LVY1mYB_GxxHue1Mg`u z5$f9ZO#p0|zdcRql zwKe2Rq!~h;oT{qOqk5$YY-_S#Yfq-y z+a$7T^tb(gJJA0)=bP=!3arZ_knM<~!##V55s`q1=WM(VFiPu-qHRNSge&@(w>9*( z(}+jfT3vuW4n_PFDNvEUP3F^Zuyn#i6$$nrq(1Kqrz^GZk#|Ty#0o3Osd)vs20VZm z;uBAl?@|i<6B{SAv*#YuQoiO?9Ny?AZizwVOEx}n6D{Bxijp2{5!V%#B&D%!Q9XXq zopN~pB=${o&U_2Pq`Ixt6@{A@G#Sgf_rbTMo;;>7!}e1a{@Hl%9je*rqxkj==+oI~ z&#!@m$mb#(x3&p&^Q(bmH9uF$BN~JGKva^+07A+mWaGs)h18oS0*{D~8PRHs66Vq} z^>u8R%_PX+C1-HDhIkG7_8MAK{haj-V%$Blx@o<*6&`Zz{rOUNG~@aTBxn#TsGV)u z3^6Ww&?wHllA3i+CC{>1U_^LtYCn)2-Z||rPEaHXKWb#%t zRQw$H$rhkMl{Ui>F(iQ~4(0byBUjtbEF3gz+X=f3mZ*WvPPZo%3@|X@kdQbmp)l6k zInxoJQ~l8DqU``D*Q4IUWd{lQQ*|C&2fYp`V6*ry$D@H)e0xb;Gn_7M5c!s~4I*K< ztVPzAlOxZl4hM{aM8cP|7RA1Es-rdJ_lY-(gjvQ?3}xFUaZ{N-%Na#7w3LAFO(Jvh zqx3~JO!wG`Fx4Ras0S1^KCOm9N?HeQ&KB)#4{cB^JYxJC)=5$oA*RcMYMM=c-K*Q{ z!kyNZ^(F|#`4KMcNKS0$5cwrcJpdYl;Vs$HBUhZ!iQ+Re25;(YU->;__8(YX&7M0< z)i@g!>5ZwsP_nZ$coaknQk<~z{0fqac3J zWcEyQ%XBQ{H2v*Z_omG`Wo(rEc|0OhTRe0= z3v9%nYjj@m4%Z{h9jH}t_8$GU+s`0K~iyw_3q zM8?xZJ6HJW?^y+>ZNdJ`>p_@r84p03BYL3}z43wCs^!AjjMWfx@n2QpF9NcDzE4HE z$r}6t^bdXT_uJVKEc=$z1H6v>i!M8%%Scvv&glXFvRnTg=l{t6Z|iomIsXTn{}Y+N zmCR2y{(tJ?|66sTqevV%{4Yi(=-iJ1-cu_~2Q`6isTP#VIhvJjN?jvW1; zc;rt5lr770uPCC%#tY%}v4%mqd1rl`dRoE;wu?ThY|O=43H8d_C8* z^Xcj=hk)u1%g53YHJO0iot-BPW4X;7zz}cjHcRMZNG?C( z?>O^UZm(#ICN|svq!^klwDv1Yn8FZ8bW}3*QdiN9Ox5+}n!tu{%JJv!W0bvf^LL+} zGxYdjU@BSSM`qH;^V|bgdBMeyt?rJah0wcvCY#8oo4osGY3D$^rGVkmU6~F&dHz-T zBCA+VQ$~Hg!RCtf<8do9m^?>pisl;{i1ToyC7E~M=lzg|Sz90ua%cn-fGQ?dC{U^p zDpE0;UJe-{L$#ZP!WC;FrC{tBpK$$jMn!KF7cfLW1T2#rDG9GTD-2l(<7;@l)hP91RVPhAfU2F zs==^2`9=ds;b-Esy-zx+o?IbDG& zi7_7&PzW+WKfrPR;>7)OHg|XyWQ;ZOIQN2kL;2f)16g2qu)pDvv8KygK}V8-sjFfL z_m>zge5U7@li@8#bp?-x3oA-u`h77CCwr9f@07P+jLPClQ$3gX9ovWDbm!&HNz>BJ zO;9UF%7Wp* z1Uo#g_**3Ut>3!fP$Cw9ywrYKTNKexz0&*)%&?DUC`Ov3~ChQ!LperYSGJpxGMS^WI@CT#2e~ zSVM2x4rmo*R(|WBTrA`P@kbb+b3I}J zR<;56KAn~3YKw^!L9fAxF%|4RP~=*Zf~@AaqA#JNOdeH=+3G~ex_=Vhgv4rXq5{Ut zkV0a*z%R~29$!54>F>UWBt?oC=NT0iH1gZe`szjdmB|IJ&MZiq^LCG1Y+=MkS6n|) zooZInL!Jm;?yhkR>$9T_+(gUM_Nla_d1C&Edc&vc9Jls(9#EWW;(ro9*?zL#aqEEc zKA?Z^;piKnP1ma?5@WS|Jh2Vszzm-Ng5VOdso7UPm3tKVsx5KzsMz#=ct#MFMI>>9pU&TOJw96#7p7e3n%wLW{QSJ?*g;x^=t= zlU3z!xRYW&j)E=!%bX7bLb*b6ZX%no+U4rR>(sOd{7Hj>geCZaAO%Fi1FhhIc{^IA zhIAs?w@O0@gTd!2N=hqXg1s|5+xQdx#*MP$wS(p_Y3$S*e6Du7NWp; zC-VwQR2Q=f3Kt)y^wfBqaQLv4m$Q;um-;en=>;|KOLC5LOw| z@~uq>*q%kvZ*H>9Y5Kd;^Q(8EjoBBnb$M-n9`#f_GpYOdJ3uw#_jCVd+Eh6gOt)rV z4r%~sr}{vwT&A|X`<7jvd7s!-b??6{$};gE*P}S!ZBVb7bfyopl zu-#!JC5w!U;AS}vAn;MwVI-41i-0}-n)(Dr><{*sJG|?xhf}oAgXM!w=jZ;I)jFw3 zQ}p^JTEZKcCiC`lGwxD&a=nGtuR8XpzyIpsyVpvQv5|b~+!sYO-u}3ObF#?wQa)I6 zi@-CLUA?@&uP;+Kl)#bZE+I?0$wEEbhb?0tq)?>(8Z`skGrMF*fW1k(fRbm={ z(MiAc$JzC~{p_et(#22uzO0{(n?o*qvx@)Khx<9B!l66o72?a$0uNF(-`qTr-(cCJ zJv8RAFWyFkWjXR#$Zj)f-&bNIDH=D`-_-~nLlZrK!=_Ue}26cXMJJZiU(qn>$CKR@N|@wQ4s&;@3tFw(#*4O z?}y~rb@Gbm_bb1o)^C|DKCiSAaFkxPo(_X2;IZEAoH|o$Y9es*J1yCzOQKI z4^}`Ph{78(HN2X>B(OWYNq4i=pN5S0ydaI%<=i}V7GLNqk(9=to@)~;d~4&~`kfF) z7vh~uK2z`(>7B@4g&1d=;0LPx2*+TmlKXCp-*1p@z8?aTn{~+@-M8`Ae*s7<80+T+ zS9y|VPJVoRQt82GX0oAjLD<#ZU<+Y8EVGyFO1jYigY(0h)BL3keG7OGk9} zR!<@sw_9kqg59oL?mIB^^t%M#q$j^-5vM3{+@(8#Fya7g8cvhIBqR4N+&~HrSTn+m z#&D0H*!Z=vP@xT!UjU~|VCG}i%R{qba+14M8=f%kZm{sB@8+oRnKKu-8gyO->O&JE zMl<lb4>#av@Fn91F;u{xJ_V^n0HbKprApo|HCp9JYnfG2yBS{mYF zkCuAOj1KtkvbjfO`Y>krsz-+tdCNN!;Ik_ujq?Xa2-Y4ZyZnkwJNxea?D8=%n6R;yiAL`IL&NSBAEKC6Oc-SnyFrDr*W{#292YNtv}h2qF&2T1oA8(wV_v&&@K z*#-Mv0_=p+2gUgRRCNr!cbzfFI;ro?Z4oyQsXb>rPq;LZl75#kZQ}#)y4DjSCOr$1 z1}BLdJ6kKyi)d#GGMgB6d&;%m+Fh0$B-(c!a0dVJ(bnuMn|t6xV}wrbG=q;@&SrR; z7x7RuiTu21o!s~4Q>m-FDB}vl{xm78GrvmNpF;FdJyZuQvA7ak(|6qrZ&mvZdnLS$ zdgLqCi$UUbWH*DlbxV{b(0G4f&{3z&*NEKZ<&~wJWD#Wj5G!`-vOi-GmJX`(E&X(K z?Zy5p;Z0*I(C-Z6vU}k%?7enX^6MdE#w|!;86V!$@O8frx!qYcK9s&ULrtn44-Xv{ zN&BqmybFHzb+UZWuso;bmpzPnIy3I4^A5Nr`J9w|&yIqjL@JFJ$4;lYQ!Bo0kKu!5@_qiv9v;EVyRmpTu-^OiZR)bl-m0}tvOMd@- z)`gaROZeP(5&@ZdsO3)Xv!{ylSq~Jz79BU6NXbl3iH}aQbQo)?$_(zvy=hoB+^j7q z?rp3^ApOp1`V_DxugaQv7%|RlF2f|})NjZ9UMw^yP{PT75B~URk@w+ji**I34bA&~ zKhS(H6<=Ci>6}!ruO+h{+dF%klL!b^WDKOp=CTXw80x(KvEP_UaOq9y>`8%lD{@=) zE{>v4W*|-#4+pGZc(Fbc2659N)xWO>{lt5-=z%*Zb2tL(?^A281Fd4++j!(P=%&xO&2#AC@D&~C2~SYxWF_xfbn^=1e^M~CxsvO@ zYqo5MP-in-!IV{PPj|lC;za0yhr{|hP|t6jlgH0&yIy24tCKEE+eNa@hkpEGKg)y3fDW7eMG-*p?~9`m5wfF#Q@ z*FDB&I#a=HljzUSdmB|w*%SONx5RRgw&{!D`KH5>`1(VDF+(V%FVn&VKdO_R^~e2c zCq>fVcaeUgL7Ri+gMG2dIOa2Ih6A@U^{FDg&~ckGXFeE%F9A5g9zzr^QE_GreVgT| zi}_su)9z)9S1kzG|Da`l#hk+q0hwvi7aEWP--LgYb;g{7EVs`Fd{EF*)GrYFuOr%M zACVu~?m{uY z*+X3M%o_~Zd}9mps##KE|Hs>V$5Z{r zf8!jRj25MgB0?xLgwv;xtct9xviIKeYOj2@h{(+~d(|HB zzJtogJ%)gjuLMNvoaW4hzoE}#g%z*(kB{|C7>nw=B~{q)fsH??G2vb3pmdv z(VU4o3sff)8xmXze;Xh?+$|Q4UrZX5B)f4}ZMo7%;#jj7)+;jSDwjpDvm^1E!V59lwa z`VI}4bxXx&fn%I=-C2%4-2IT&mJCP;r0dp&)RGd$jfug2cWQUih9sy<-B$$}ZSU#5 zCA6=ua{qrEgd8$JkcOf4f`1UfbGfVHDbb?&daI|gGiOq<1<~cViA$GOO+saK1}KV8 zI6K{69^_aW)DahDP&W-AMIYu7%zY)I|yh?GG}Uvd!Ua!>ai$`TzSp-SckD{Mwk zmi-zUKJ@>StT1@?WC@1jsfoVjg8~N?YWHIKPq3jF`vuI)hrIa2$6~?#2Am%zf89@L zxdUl@+c^NL7`VoSnslGbgVn^PaJ&NW@`7c`{>!sJ4t2%XWR`LKcLE`|Zp< zoVf(maU@xmsn}6y+O?WFt){4URm`{hTN&jJGa`fl#l1csQ4L zqzp8W;6a5j!CX6Q`WiBbXGk$60^qRTS-?t?$;AcgMfaU!ik6#afc@3#@d$ikJ_Ixd zvf5mpd0}p2NBoYZEK1r^~A&$4j}idNyrJ=YLesBm-Q$p|A~c zR!!)=d7qZQw&mb?qK0?(d&OKjYTP2vX{j>g<*Jy}{F>7{^w$-!WbusKB|F!CEV`1$ z+{P&lG`eB6L#ysx`4juw3j{fAUfR(TF#%I(6vf3XnUjny%-C6~^7T&7 z7uH~;yju3fw-_gO$*-ACo3*I~w{vwTnzlCgMvrJbomST*)9ZhZ z9_jHO^KQ+`9>8k8rEUUxC@9S9}giR94MOURgztz_3xl4F`t{!_iZas>DwKcl&f(&ancE z-mZzo1PL$&L}hVO^qIQ$Z%+Q(U1a(sKf!%rJxYylyDP@*6h3loZN@rC7+JS#qrDBt~s0>`LD$uIi7;7WAvRP2Rh$o zbbOxcJ)aiVr97QF3sicN5*EQbQ&O`2`vBBVCKF`@HEYZ!d}}i#Oyh*F`05+gLaWC+ zn3!l+2e!T)Fwy+7ypd>HG1J3UW2eY;@moi)){frpZ=lsdZ~^&;rb0odFL$}>rwh9? zN2Eb-5~2J3It2)RghZ@1WOb@J3}ItWnq9yt6XwR}T4eS~EJpMu-C$@< z`9!?v4^uS*k6smoDBW6DutI}paj%MuYl__8Gkz7rWbr2irhpZ;M2GIU^qAG%ESE9^6B!J`y{;4PJ^^1NqB?KbUf8k8*UVZ1Cu;)rsWt$@@b38 zp9@#$kS;q`yC!7CqfX%sjD3qYcjr{(rP8-#&kLu&8o#*?k|8;FOaME;ty?aGOwFH1 zaZ~y*YdH`NUwXydmD!-DJ$Pp)<<%DQ^g3u5RC9A>U$kexc<6jCFTW>O&<}Q;u_YHQ zASaSX_-8fB_p}0PP)g%HT>BxTX9>?(ZKvX5SmYV)ZM7Bk<<99oN(~W0;=zYeo2Mq_xu4D!zAZnWKZ1a5X@LbhKMo;GRS{h7 z?5)A857i%ZxqBiTGVD0}05p|Z0&ZcUxr~v2<}|c-WAA6Tm;A#?`7{j8-IbyMo6FU@ z;vf8U#obxRY=hsWL~9l%;cWaqz+B~%<?Qk1c^7Q!m4Qn(+RIv?G3A%h0ioCqg^nYr8`1LS$UjSapIoS8f}TmE6Ph$vm+A&xJA?f+(ez`<4Lsk_ zP&w<~H^EOB>HX~V^|6@gv^2JuGPtGvM==GvNpmK7W_gF}k|O!18^qB8awDH67@Zbi zRkqD#=P~k8O6E@38!@qL1U`ae$;bXGi|)liuZg&ug^pi$x&1x33-jP(Lh0Lv{HWto zIrdWD_4AE~pq$26*sNm2wvVSN+}wSeGGr~?*Cw`S<;!wVANQfH_dubJI6J-%(7c)D zxx0OKRjtSeJY{8CD(;hk=2g$nmS6~qwp$&|vD`flxO?t#=<=JR4^wr|LfEbkJXGGC z<1)`F$xtCL?ydAQndsYVE`)%zpQEq)&;Gv>RdSdgnsne?W}|UGTgi=(95(H?{5g}a zN$ykc0%YNH3sJU>hKZ9)Wl+GTmbQb(o*iqSdRd70r^Kq>f=D8{C_d_GbmvyOV9=x1%YDP7A(E(1NH@RH`?bSYPZnktMp$IP}Wa~WcR zap?rx2VJf%EpI~K8plA^rrIC6Z+*FMzU$yvror_@Wfl8vdIt63eOt}y-RD(i{8wj(#<+#$#&jO|IQI&w%8+U~9*d>H>rJ^L zw-L0drG-cwK|H}hxVe5?;p++*p{sd*R#TJPTxM=XfQByJ4GVq1qCwTX)?fGLs8GD1 zEce((Tr;iM_3M&$ls+x&GzTgVhCz1eyca~z_UYiapv<{kevF>Mo+5rZd z8Vl~_oE<&iiz&j>JspI_t+&6N+hAgt_?!4+WPq2Pa8=0H_jxEN68Y%M1 zt{`J1YrpdfgHcmuG8jFc{WDl!f-MJi!?Oouh&nPaDk2E^lCWoiY63@y9Lt?Nb(B3u zVzASuy@p?s($?RS#6afUHTCM&9=2>?Wq6Mgq9y$3@4>3rT7m}#?xZc21IM$>4T0YR z-Oc8M`wO>gG976Si9b}?ZT5RwtK;(vaZiTa$@Hxp#)P$5%w;awuy?-W7LO|(Siaa3 z{a(=nv41o49vTR8MeNq5)KLSXy%Ve36ZtsHQDgq@5K&9kz|NJV_O(Id{rIpP=oNJR zKU8~^pqSltX}an0Mz$bk_V_h7Rl|?Doci@NVI7hHwFXuvqcY2$q?oyY&4-Bj!n}@Q z#v>Hs{s^GnEU)kODS?${#=npmC>ppeygQYqz#YXInxFDkB8E`uMv|LV8C#N~NAv*| z8CWWWc{e4FQV}6LTq^X;Z1YsNf{ZiW=HivjFN0so*(!GDnCc5u_aVea4&dHOZB6x# zT9QryX*`Y_X{Mt_UHxFZ+2#{T_YLa-{Rzr?o(0zj@=2wl`)!BV;{YtT{HoS&cvO$? zJ%_MS#oX=pYiz@l3cT!A?N^h>;i@Q8kfbo#Z&57iEEJ{QYrlVE3cMoW?COdD)8-$( zo>mnrgvxK_XISYF3Z2Iv);B3o;tgc9wqOzfM6WSoiUq(m#SA(U>)8WmGmQ>g9<9D zN%KTE=i##VtOSE4^%@E{7w_)T?Q5PGQw4RkepKwiZrR?6FrlQX!&n>)T~3MvN4S&I zapH)+9J>I!dYbzx9*SaddZOd_M|%I2wMZo(DC+DKq?y)rVJY8u>T#+ZUsceWQX zy{N)?hxYy4h>G#*RbYR3BcC1~u>qqeFm>Ls)Hg~l#P>M8qMy!b>es21XeDf?l%1MK z&s~5f*qR@}_$HvYkulH|e#8a=a#6-<-X1Kw0XHfpD^+oAHO<3uQ3+qvT=|gH#~xBY zHMJ3N;LcsRffc**8Xob6(32!ebtY(du3UO0n#;Bf1P3A}ufZWoToZfSeE|LpJ2?3* z{Y3wx{TyME4)xwdFaesIQIharxQvzC%>l2N`$#zW@c25JO!vbcE9U_f zF4GRpuH-9qC5Zask2XmB(TgYMkP^&-x4!7vMCv8(PE0jTrNC2cKNT0JCKaPpVwxM2 zkSVs)?=3r*8*Z#Lu;Eidad7b;kTQq&vX~T~*G?=At>U~7Ta&bae5DJt+5c}UBT%HT z&RR!LUV;!adg1*1tKtmtdSbmbNEc=e;skNq=)+tN{{J-tcw$3{W*Hy%U=8d(RM6Ne z2qJB@@Oee=l?~>zE7H$9XCiT=1M58wpTq97ah-A*a`ZVyU6@N!{!3S4GmTiWX(wqP zBTIbdo-p^lIH^>KARuk!h;Z^VM9yZRJ2TI>g?Ddvd!?zoofoJ(Wc=OgqQK}{z2 zxU*r$A1jgII}w{fm>q8J@eK!-Nb>se5Z_(efA)VqWKT_;m%MiS0DrMzaid_KfBJ`> zW!gd{rM5xYKzZv(kHh+_0~)JNf`qNqw&}%jXe>Ft-JqiTy>O37VX~jXgqC`t9Fubu z`@S+ylQ`Ji;grtZ_YOBqm(Swj3#&uDmp5_vM4CUrQ8!W|TC1KOvhkEA z)O*ok(792s;4Ip@{8pZeNu)AE#w3zpL~39BiukmoSR~EXrs_vVt<%|1N4iDv(UF)N zkBW=gcMYAsmDTG{`45F!C^}RdC)K=>qEi&$2)S#sk|$Ub9C(8{c++L{DH+#WQG+>6 zu194KQEsyg)b$lU_B<0_?xX$99yg1NId<`1CziCBspJ3F=66v@T+dG}-gx;H~@ z<=T)Umk2sYVzEt;vS!Sex>kfjT%BuY@lv+CRpiVW+8|%9&7kue0YceEtz(NbpZsmU z6HLTgWDLmTZ(}8(1kI^3GjP9myP!uld)T4t_`WUSz|si#?s&AxUGxom*`N8u#96Z- z&xM3V;26cr$>%IWMzK3X^b?NB$}yAy&ksb@LmW@hy*m-LR_B3{4XdPx;m$FbW0NXf z!&_|dZ4PnWh(dFQoTO<8!<#tIOf<7=Ahi0meN-D!a@$AltFcaJ{bERl7E?*{y9Z2hU!w#s z?mKY(%@1eiR>kq{Mb~HO$m>vI#rR2U?Zb!+tpv%%X3Ge!?5(j@%#uil(aHP+*9b)r zJRq8x&74zT_3F19ag;UE)YH+48#upV|Kne+oPh=>@f*ydq9M1+mxi5r3Kt}%A{cFI zZY(KPReUtxq}FytxV*gpyo2-U7H9dD!2V%|%+2SC7N%ovsm?1Ov=2RHlovgkgka3eCr}xlk!v%9)rFSWnB_c>h?h%JksI;Nx@s)oL6mw>Q`G`|fIqWe)2ty;FNbCqkG?8}TfoKGeLpakSBK?X5N{iHO1D-gtA*BbH_P z*Clg>j{<~tmQBL*<76UMmDANP^?obV-`-rw2ES~saNx33EPJNQ%Jj4_2Ql;Mq z8m)^&^!!?Lj}iohBq*YUE@RNy1EngLL}@YhPobhnSysQWYkXW4{OyI0k3SkNX8WNQ zNWbK-ARlTeCXg4w=9v(lv7=}!5b8-e6*M4w>Evn3E1D02)$0uenu_O_u~b{C(7GfhqY^c%)j6LFc6)VI9v^8t%80WxC=U z^C>Zx8LU=!EQ2lt89OS&WBNuX{HS_GUck1iTz$5ba7~U2F(a%Ss5IMnOg2N&obQSL=JM17ZuQ%|X6)~9 zkg}iUoq~NHHQUFb$Cl(0&&XsEOcxov;;foX$3gmq44aBVGz3?S68ex~MROc7j=7tr z#tfnFp66Snj;cL8r@FY#r*>6kwA9gG4{rKEDez?w_l<_zb^1Ye59xK4)8jZIy7LS$ zr%tvpl)cO4RueUvHePA@xRNLr$+Ejsmm9Gw(1GYNb`Z1lkZKd_l+WR9%#CMwvXejJ zn9OsVLVQ6hxH33siOafibPInh(^Z34=mwj4OTrB;LF=5R>uL%c^CXK5;^k6Wyf;_B ze}BAD9ds^1D!=yB5?R;t03oVZ@9vgz(QMbF(MpCJpY^&NYwry)Z*-9(-}bqW zW+my-qW+?P8u<9tzkGr4Ai#cFq|=v+OjSS~5K_1N0{ z$G+80@#XWrO@io81!1+QwiI0Z;`cXg@ow%dqNeMu*W#rXE7~}mM zY5uvwuJFpbRhLeWD%?~@LtGi&&zxhRl-;wEhw2d#_Ccqg8PFx~z>G(F>Q{I!dEsmu zDgJa%h9n>ca8x>bZcI(zSlC4SejaNh+c6Yc(kifb3}jv`x9B~!(Y1mMtAE;OUrtGH zueWiFcePUAxVK$E?I7Vg$P2Ql=Jnyb^R?BG_Qv;jzpY(W;auVrXh%4_invRza&?Gs zH*eNT6f;DG(0$-@m?hX{LvP`_J|iKT_E!BK>l&wT+($+qW`CHM?I#LR1boTqYMTzU z=QIm!OOwuqaVv^ROO}vVJP({D8%H7Tuh14bQ;CUX{E8E&jIQep1$ZYOisvA~>VhDK zmuiV#T=8_aqqM6#6WK{0B7u%HkU|+#-S`wO8kBm4tIz_4#PG9UMw{MRThkxMO#gP; zr#QG6`Rl%ZxQBrO8y##|hsnekc9oAuWr)6G%lPalZvpC-g{jmRjzea}E)jslcSp$J-`{oRst*Lwu#(I(RA~aV4Po%( zIn97Fdr=PhoO_M=x>Kp-&+Td?K@}_j&ppf%_g0}}9*)42b>8Z?&2|k~Q(k*Ef(=Le z8}Mm^2bScFkN?gM;X8~Lb87~aookuu7#+3kPvPsu-R2JLQFUE!nj_p}MlTdF@vGkY zx$7AYkmc)MYPLQU9(FNC707+HWdUM(e(qB8w}P%z!g2v(ZUXD`-NSgsD^B+nr`D&d zL`U;`bYn#i$;W|#!JnD-qWfe=k5dsMk#Xz1fNdopJn`%tEpzh|Yth#NbE*gzM0TMA z+kQ5RJ&zHn|1n+HZBPAN68vLLiWj%<&T^41aw_@CCUeW#!Ktnb8Z%3uGp!7@QAm z3HC1p?pcELd}w%>=Wh|u2nl(JZEP)vM*pg{a!bH59mKtt8F2A?wbsAV{CZ`mZ{!K_6PssL@>jE z-rf$@hdF=i6km7Wb%+_OM3vGdQ0?&&_LR6grcqeqoD(vpnT#?Oe|EOxI&B)#Ts_g( zBM%kA$rQ8ETy&hQ>z7BM1trGNJBB>0RFk0dfol(pKV5MyU3^}i10guj&wET%r!_Kq zJ~YvMj%ieXm^00PIYY5+N(#U_9p7^Udz-rG@)C+02dR=dzn}hDo8Uk!fW}yyyNhL6 z2PAIS2^}VAYblX7Jn-$I>v_lbYW~#V0g)%zg>{ z4pU21;tBh`Q*S{K;)B{}ll7KX!XG7;iH1;WQttGXmD?X=pOa=V9V>UMJGaI8yfwX1 z>Y)Y;+h$!n)W7M*`+`Oi68Y(|0GsDQQHO5-a14CB!xrmViei}lerf$%3E{b!_eIX6H~z&mnC@@3csVwF zRoFbhgSoa?VKGOj@%oBk;ZE53U7;|^K;d7;{}`8Nrt;#Rg-0;z>^dR+O1=l(Nl^-- zKbdaW8_6=dbgT{AVI;KhoU;6-!#u`DPw;;m4L!b~Yh_hUd{Nig-vO)4DA+XqcV|5}M zUHIL>8LQ%l2{{KaxPk|fy1(2QW6KA~{q`0Gi%8}m=BSPC=d*SGva zfVpG^O%xuk1lF{B;bqzzdBrCwd^IAELCa2T)7|m-Mko5qrQh5tG}axzxGyPn`P7~* z9sIS(LiK*t0IN=R9?s;S(EJIDI!LP+{z5oxjnCJh7WIDFonyQ(u^47NY`Y&%=tp$+N?if55;J(bS3`an~toW6EB0-)L5!rzlc3~2OZ_MTh zYcaVeaQ$Q@4n!L8k~QRsI8Y5nW~%oPM%8#V_f5+ke?1DqK3%%~!-hd4aEepY3uobA zDWS31TtWD-OaHa@(1J}TV~q4K|BZ|P1!&fR!k!>qPsC~Afvl2T=pn~0#2Dhm;T2uw z>0C7sZ=pvUp*(1Jhd}Pqp;iJtQNIiT=x5#MNq=LK0r6LYmX$>7UZ|5&Sz%;{anc9l zF}ddkh3$mD(V<30mD#NRZWX{Gx&%S8xGh=UhB|vJ&}FBhfg%@&y;bZrbB0H<(VDo+ z%--pav=PjLbV28Tf=<}*G06;@lcznVi}l{wCt6~k5?))rg|u(2_?J+8vmw2CFuLwJ z93_xgnQ~?UU?%{nT7jerK76|J$nnK7iicu$n%=9chN?;#PjQ#6%E}U7*g5*c6Z&Ru zti;J|Kl))Iyl$%aTWp3Jk^&Scd?Muj1uy7H0*xM@h=g|zq+Tozfr)#XKzex?!=3R! zTCdyfUl96k+92ihwQ;sXV0GkEI$a1tRFO2D@;Lu*eDEg$bEXY}y~KwNfp0)yU#4@+fIp!T)mHpyf&EqN&FiD$l&R*^WWnT|YEilAj6kCwxDRnBBcj)-%Q z2m9&>jeP;6>g&{XmKQ?IOg*oEZZrGTNd_;vJq;w~1ZRX_Kcj*(Fla`B42(puNP~~b z6a`V^dFVtu!7uGEe$)EclUQu;i<;iCUsh<&s)L6TE_bsc*`ZOfa_w+Y!V#5b>^E3h zTT=)n80Uuc1#p;(r{WZ&5^r^=_WVpef#W+4R-^fTg;x@|TxK0_n&OTZIuWaTIOwL4+C6eA`ahy!UnK}^V`xarO&E*=kl+yYVNtj zJC~`}v^A{7W7=dDgZWa$zf*PZSq@e=v3Y95m6n0gRU-=Uqmc-#aQGR;9q)?{pS<{R zgYs{EsNCadIN4`DZTz!#74jAXPib{T$cJw|6g1P0f8WSfLsJ_u9R~Z2%oM?9d9aBvu~_p!X>JFQ3Uo zvtMdbl^PAO4d1~o`G{y<5!=HBF zwODEPEga#zk;bD^CT}0->rP#_V0qeEpRrh$cjAxYE*6jyO9&jm)o}>I*=uBc(_UX} zdaHatP;8vOv$Qh+h_U{*)X0zKs7I@PFx+G7!CzOYfe-lhPn7OOFK9c#4;}`7->kuz z#ze;;!aX-2Ny6;BOaGAVyHE1k_LabiNYg=;P^;@RzZokIgn$a5)?UF4RL5&lp-PNZ zf|Qw-@S(y6Db8|}q8Cx0ph){oNH%)O#lD3bpX%}}Xg{XFwD(}hqe z942Vh>2tp7uN)Aoy=|m+N$Gd6ktp^!E_wWWyWpB1`XB*Bn$uoxg}THPMRo5R!#L^3 zuPeGMiFY$SP!w-Ie*g~Mv_;F3Hghk#$c^zrPdp2d92$umTvG|(7;V3T7)jXPc$>)3 zagfsQnG39m8dy(GGk4rA#xRI=`|+=hD~~J1~ne31}fdve|duV|67uctD&x zmvgB3ta;qvNYBXP>7RBE_Mo~0j9KjE36QQqx$xTz#`|2p-^9;htJL2+%&RL@G`SY} zayh)nk?d9eNjPSbTu&2VFg-Ce!Xffjt&t=SF~33A`#doKG1xNy@+>gwG^hq+RVTE! z!HxV&VKzE%ABWYs%_!ZXzD7b+BBg$(AQAno(M3Ui5y47b#TVVIz<4Md zdOQ3|j({b}fQ8hi+XNuQ*9qG2A7IIqzpby>%Y)b}-M^Bh4Kimh-+z;dOK%=89S5~z)J0Ye18vjc?fA&s)ZD3Vlf@QGoS&zh37_9y zzGX>mq+A}#@A`d0Hb=sk@^^tvW4*Q3wN>CuuAROU94?+nH$IGILIA->o@*RCQ9r<}73)#{tWhtEDaNapqlQs)HDyz|F-un8@73yvK1 z%?KY6Njzf4duL$Dv34cogMyuY97g7N=Qju|LcFUKJ1> zG0`F}0SBo*C-t2ZlNQ!t59r`;QVcYD)?An>LnMaudFC~jewf}H%v-mhGCF(M&Dk#w zT8x305}Ebmp+At@oh$dy9RkvjftCF5!W^OAYwVaoWSJ;y3GdPf1Pwojj~Kas#6=P3 zrUE<*W2n7uS+qHwst?|Gy$HWG$mO~7GAF*Iq{PhnXH)BJD0mU7M8J*dcZ;hJQkYe= zUA=E?)ZF4p$&lhI9R8bUDS*Lg^<<=G#NcEq`H&`ZV9A16|~ z5bP>$W9ZR1hK*Pao2j9?>>)8u8qIl?vCuh8Bk2Z$q$_4EygcaHgy(&WtfqcIj8S!|N4%(fs8;T8)gDj= zzdY#lF-%PVhD?un*yCU!Pdn#ho{m!qiwWHCxo_PP85J3N#Lmj~j+>}SC|Sc{=4DcC zxtrt5(pkFa^%bAO#uze+Bw3c_f_UXcZ+bYOHEqzd1$EZP-`m(u4Ht_@#FjHvzC=u+K)IO@_$$N*UDxiw1gKzPc#b7A*e z^Bf;4G9k(Ey;)DO#5f&Kx%%pyvt?MHMUiqB{E_9;#l8f`FJDc1WO?bDVrw%!&8?tX z;@YEx+Xf^B}DSu8GwpNwuc>28e@Ld3V z@g;3=loDR@v<+dlF@Y@c-q_sfnK4_6M}KzdH((I)6=;u^nf_HaV=Zfz<+ZSmc6cg+ zC$33OeCOrX^h813GwrQx$E}mB%MptUJU4DAQOuy4&^Mf-k6F0gFJ^gho~JoJi6FFa z!^LfuAmTBIKRl$ z&tO!P?)4(a5hX9SrX9b>bt2%7$MW(_wWlyw(4X^Iesz8KlGomwjP?~;Llb@aE0$LRox9xzvve~{;W2g|E}Hpf?dB|&h(6iSVq53=??n1L@5}W6 zLE{&p0!qf-jVKgIBzD#XC6+x*RSp*~Wcv85vx|cRh0F*G;ZX6(Up#?ZP%+(^I`E8u z!`Y?MsmP|sBHO&?b|Iubr2ekWm&k&5=$qS?5xqRyh#B;d5dtksY6_!IHXhgyqAGW5?c(x?65|&y?3YEQyH-b)GScbmI)b zLGxD$AscDgkg_?t`rY#MmwdPM3hx3~%Yii2VWikjD zKQav0+1@HBdnmRNHqm+B&SvPgvrbRc;&;V0PRnx44v~IPkAQB$6ptRyOo7E9^GVi7 z)|~LMBAS>tBNS1bBQC7<#pD^G1yii#bCDWuJ@(b~fS2L0Df>_Ul4-IrVw%$uzD7QB z1Sf|hQr^#ddRF1*U2Jl%#V=w}h-MZYAJWV36R{LoLtQ(bMPQqR&B`x=pw9x2Y!WM1 z^9wL#(R!HE7IwoTh?u3 zuWdW}*EF*+b0zgbeeM1i*0tqbg1-}S+lNfFBdrtYZk>J;@`ZR_OYxoJKrYOtkH_gXT{UAZQ<=y8^NVd_>tl}M)oldhHT{ohb+Yz%&#fc3ksq1$cC zrXSr_b7E3gEguXC6ir8<3@L@CyMya6n(jUN+4Gi7VL460 zsau=D3?k_f=AK`S4Qr6~Fc`a`Cj}3+ z_F$DeTvQFrNOjt`U0!y|zJzT#PP=V7h_Y)fMnfZzZ8iT7tsaU1IX@^{vFR+df)h9> z&&~vzl1KcP!nEea8!PoWY#%Gp-+R=vZQq_)QvfeVXi)dV6Buqx*DOBoA`43}&ak;H z#^eQ6h6s>7#4}v|?juZOchwgW{y8PB`eq4WfF(?a#W^!+bI`U5BeCqxS_%-*Le$5V z_WtW;otUuIc7rMv7mba6d0pbw$fGSU9N03pJugjhmZF#l70)K4$m%2uW<6pzAbM5; zLvN|UN9Bqz>76?07|RD#^#=}K?V*yz?5_h`cK#QnW5v03;~9J`Z^}D+=NY zGVBtvTz0a&fv8Dw2(cd1aIy7deFIXb0O2^MFD*j29mwLE^HGUC{JFady>Mhw)>zd$ zkNp(s5CoWI1Q{S*(+T(eZdEKJKv0p)wakJ0OJ$c5MuMSi)%L~MtEDp92`Ni`A!x z;Lw7(R)!-h;lRMP)NUlK3Qm0LVFk@?j!z^bl3)s-^sAiqNw5wRYj_)rw1J1MRO?ok z@Z)2RDj)Wm1V6PP))ti8j&nu&dc+-^R3Q=!G`H*f-kz|hj35PAm<=p>ErPin*)6*m zPuI2GC(2uXvikM1TNcA_00-c<7cs6Y90E#Dvcl}iJgY)JTIqr@Yl_KMQGJkTj!IXo zX$4D&x9g1?wgyV}&is3gkH=&BXa8?cToNZhjT@iSsCwLr82px8g&0)wR|7z6tUT_J zYvXBjMuQB4#e<1YNaM$}YSWDkmZPd_owNU5)6>5NRPInZ;1iS;WYy^SoLW_?JB;_x zN~bhgR1%H`GfvQ+8bT(~|@p^Eq#=u5)(GE8KO<$NEdH2;u?JgC)&NDSXxV|)#beUoz8 zj-4`ZAnb#&w-l*OzApgpz16;lSFJc zL^|=~ByYj|Uebq{&wNu+O4!PWc_>cYMT1d)vRp+C7VM66;kw|CZdp4$>ng3$C+m8W_4W~X4siTF!MhVl$%fI^H1b|4mq{J#&R&ItgV+#6!r^~Z z%AimJ2tYI$E(}6)^|S;`Uf`Al<1O4l8J@2R#(!|~A5a%_FHafHOJGlNG1|V`4=N1% z*7d5JsCHWE`sU7Knn9T~eCi$b?*&+Wb;^ zo3AAL4~_%cvyX#zrawpe{*hn1;;P&m6jOBoLvt65TEyNPYnObh;XwL(y%GJbi@Pr` z99SmUG?O^v_#_x&)~B;NaTWqOOE!u5mvA`l>0&COBoE4apvBA;6tdU(y<Nl#Te=#e;f?XBW?G(-=oBy24#bDU5s(B9<&DM5}td@!-)TcplvX@ zy`qHUvS%GEgs5RPe76!cn*yqHF*^YZ;rHDXIe34b4PXiHPJENTbx zNRRtRM6b(UXLy5+j^^sxKyshytD2#$(#0#j!&!WIS}5bbRVLNJNtb?qFUh_nu|Fw| z0%$ElvH8jfdm0Wb`%AP7;ouWo?eXG_24tg7*?w1;N5bDj8}-C{qnQ3!VM$`Xv%ZdA z@ws$enka}=Qt``@vpQ=EOZ>j)aE&)_?m_3j+iI^g@KGXBoSUzp{{W>U`Or-cto!~= zn}I~N=|_$o0?(84`?h6kd{Le=1el<#INg7;N`KN1Do^U{vtgaeu|NAt?g@kWIgSKRqF z31MXksGms#BT}QVE;tQ^?i!H zl!OnvLBeOllsbq$Oa5;O&tOUMZ9W;%(#iZi;Mk@xKHIZaZ#c==c1ZKK$4W`7IZMxv z2rgD>&DG!0$~|7gx<~;?lP)NAi}8&Y_q}BO&F>NQ!mYU7Brt(fMx&C-8nNYrIy(S2 z3`cz{e|Vc=m3E816N)e>#)Mi$UOG8|zIHk~7RZ6{v$^|# z6mpi27oO(e+I~Sg@&M%T6aaJVY1Ick^IwK6tN=Ech*Fg7z=a^7A1v>Zli%p|dQ5cn zDn9-RvULl+be^6$xUta>`f*ws<~4n|RLE3*yg7Wo0jdnxLGcIKDt_rA7{MkYTFsDtcpI2fMflMJ7M5FzNDO zqO_$mH4Oj_t6$6PeTupS>^G;0HO}}Ju8KgG*OD^Ry)#3tTRh@_Z7Y%53-1$a5RL z87a*9!hj)IuAh+A%CGng4YQ@eRqehulr0G4pQrQ75)12>eH8ooXGq6UZ`}0rM30Qv z95B2E{ASV_5tJKGguqG0$ihbX?lX=^&=6-V62mY$;oU*55WdzjG^QT1rS@1Kt?^IP z>8nh*EB*tr`dRq!R>KjEQUb)%RInCT);rM&gNqi1)|H#B`OgmtA?4Is2` zj*XUyp3BpIh}Rq&U)Uz2RU{2zi?#a18m6EC&$ z?+j<<$&$5QG@;-ngy^*f;tD@MI$ycx4W_Z3MI!1Fhx`hAO6Bnldaj4nDYhOczKapz z4S(PoKN+US*%GyaYs3I^plWGwAqN+0FYsJf!rtsj)c;TQ1EfH^fIa0$8_U<(^C}EQ;dY0IGmK~a0 z8q-)+oAY4*{dI7?P-lqUI3V~Os8a%N+z~kc7KtNzbF=?FyYPQ<6Z!!^;zZ_dU+PZS z)=G@Kl0($BoL7$j(JHY~1Ji4%8D%%4-9|5jcOaQ)G^{?%T(d>n^i1cWMoo7!RS5;s zf`y1?m?k_{$=W(K!}D0>TsxaGpH|4jQ1qvYOp0o(QnGI%?R(EP!Vd>6583mRTh$L@ zKM2jlcz!1+vZxiWN5{Cy`uO;K8Yx5za*SeFR6Pd`ckWV0?@AOc5QzspN0%pQcnn_h z9Zg80e_c<*8RU50BUfWq#0v4~E;A zhQz*^?xOd&O((YNtWI4pDMmYAzEE5Hay8KO=iR%X=Q~gm#>)V=$_QU981N{W5irm8 z`*)f{&U3<5X6!4$(pZHMQ7tZ}TrEI!fo~%W&GqJSaMz8@Y5k2lm5et7h7GT=EsgvY zxi_ws4()7lUI&QR!~T{YgxTcV~T|c3zjveQNEfK z5V3T(a<$ULTVWkw&UOl~A?HX8McSV`+D`kWOf6Sn9k>`coJ$DPz&qBVsPN`9LYjZO zC)?h)K}65PzOQ7WOjE#efZ4PwUGV0{Y@5jACwXRx;S`1~dfnv$R~a*6gm@C&aK7N^O63?JyrwucK(OG@fTBlw487a>&2Vu;%kUPFn{&k@7DD6e z?Wy{`0bIttkMc}HCUZrt>o-?W`eSt=)+P4`aUmrU*WL@cX1gtArF5oP^Qn4{&-iDf z0_4VpU(oA$?&{fc%JDzTYxO8YY+?i>Tp~YmWS@q4VfzYr8LAQ>a+tCVz7RDbC^Rq; zbqbO7La~IOboD2;YV=dh4AlTX7M*rg#xFD|JTZM5;OHP?J&b*bY)n(jnT9ko>xdUw ze!P)6BM&aPU_wP~4=%C<4kSiy%zdlxYK+wTG0HZUJ)z|$86aYp?}v&q8&C7h>vjH# z+5a%H^hx>;*xvl&yz|m_md;$w`;`baal>l9cGv9}TGa2*L6-s}AIYs!v^5R5$mV*2 z86BQf4e?^GN5_dt=e16D=!m`q7hz6ZS|uU1YQ*PPRba2M4_11$o%Z_;n5+!&pH_4o z92NYE8D}u5(0#=HK~xbXo$dRrZ_Vg8jgbQ38=(7i6kB&&8!G-DVN()#WA*LKldf?( zm-zE8^9+%BntD~19-3Swi@lZ+8QX2`yz*_iDi;4L5Z@+l2)|&nS_%e0zHt^e|HJ!8 zF@~gnEy9!H?2smV1}dL zeJjN9?A+N67x#M3f|{4C(UX18c<@c|m&1viw;aPGaoi=Yj4iC>4dRR1Vq?Hi~ z2rr4(#C0AJms5)nh9k0$3>N$z{BS_^>L>5stcafcpZp5&Fa!Xt(tdri@#^1cz=2m^ z1j7nqLle&j|H^d^*>mbPh>ADm`6~Y-HP}B$%nduKy0-Db@ptd`%hCQn zWJpD!n`7YMg_g6B!1U7~(W_GpaPqEse>UnGm*oGD7c^pL>~6@Y|HJrTxR^)+uFmzp z`ug&CDA)e~kT#){;#kv0Wf@Dz&S{Zsm6)ufgfzyI-55eC38~PSEGsGY9j9 zmqm(7_>;OF5a%N7S;yZK<*ohxR{i`GQ>1%tPqcqyw4wvzceflRazi@kt4i&^MA*P> z{u4?bk$J9KO8?|fiAZq0=k}H0Tmk(`*ws^LU7y}|CGi(3)&EW8saRk;jl7}S#-4?F zQY_k9PgnRF&^%S{whb)&S9ShBHX-aUkn7Y9kF)3PxuyYH`VGNy%;2Z6c-&aT>tq2DVm8OgQ5r*OVVQdAJ?sY1b6N?_F%(KSe|bf!y|BYXHLJzXrkW zI-C?*mqn2EiLh?erGmNL+l(va1(mxPt7Y`KN!K<;kTj#3a`5qgI1b*VDWd+eHerGcN%?|aJiFKH_9?xq6582qTy z8X=a#6V3cjjCD)%B8@AFd8Xh=U*>FJN0l$zp>O^P?VGBXexPV6KWXw8V(VWsr1yBw z?EYp``kc_TCXU8gh)m^%w3ES!7qdDg+Q4lV%o@^#5O~z(hGtA&H2TOL9lrH4;=#S& zM0HKMRtp> zs&z_DvtY$&XS_oQEKd>MZK2fkT3mbgZsK^N%~*|qS+l;`)E}=NIFlz~_fP;~qcPWN zmB1DpufwkI@uZAR+7=m^l{%BhjmNXnY?XnQ7PM~yXq2CZ&FYj4$ylfLJb@8T&7`#U z_Og@DhC;vcwXrFP^GnwwduTjY;*`@3G1g?}Aq5|0=d0sLI}AKAjDXJx!?6 zWsMf0sLILENp+y1X{191_=6Sud8)cr6A%d;-e>+aA4ZlP$tfG@r@sUECt8RD!58wwd73VrP2vtrHrT zK_auN`p$?8F5r^A-ZQThtS9zqvB}E`tKq{$y%J1ns&q@MSr-_x!;Y(GCcoXk|NvvDCz?#^~Z75!V7OIx)(0+uNU zylm0EH`(&pKc?O2&uQ1`p#G7R64qw|*npzx!ZZD|D&~PIi#V|Wrtw|@e=YEiKA|aW zmFLF2h$TN1Q`Q%vZC-I#*Vl_X&&~-SdWx&On`1fIEdZ?ROOPinSTLV#ihV4h*s2BE z0#%=d+;)JS^ONHR9HYjyN}*;Gr9s*79^$C8mlhbMgR)HQ+j0Bb8?tq#QF1d)Bb?&A z%UwB(#ccEnuA&zq`!~$8P?0tMS`Z}YRGO-TxR5Qj>Q-^COT#-|B2o1PjwX@>nx93P z)`Bx(GY9uDEmda+CU|@ZGkr8P-fN?SIK}#)O~Sjgt!TC>GH>@UTkdYB&cf>GrodTY zW^!DAi*$cHYkeL-7|#)JHAnI*+|sQ>o!))Hcp`^Bw{LkDmkHXhaE~>+tngfFj){0h zQ)aB5Kf}k>#+ACtIi{-c+PM`5(d!3K@c4mui+vv9(K4g7?Nkr_?b_-0CPd-~-kWvY z-oB@T#2+U0%6gkkVCP=DHo5H>I2;hmBl)<_1;U=mkSl~4AQ;8M#i5=k3>stHpC3}i z6tQc2*K&z{BYzEuT>QQW|Ex{}48pc9s>*5TsI9&YZ}V8Taow;8M0{hQMeCcHpRM(8 zUfe+{2Xgg~feBVSi(n6~MkHe)cyu4yN~}!?*xe0?s#)2_&Rz8~E~Tq!TdqD3$A~`S=xU=D;&atCxb{5^Kyasy@bs=V7KI2R`-zU3a$R25yY2Wv#DaNZ z6^R(++7wQEOhUjSS-cg@ZbrhR{_nm9djPccNmsq(FUuiJY+q@3xtE=Z4G3)q!Ogu! zD}g<&A}sM2y1QT^hhmf6YlPZizDQmP)uXTNQU@>e2R1=IK7}vz-8tCKY<5g-Sa27^ zDIU1dj^Ym7_kzti7GyW|Zc@4I*+pRUcEcjxFs*wwcX54p4gWEQk+pY-LiSWpfT4}5 zAjfhMf;SFH+H>e8kQRlR>74&rECGm=uZ58wS{#qS8d6o^6_>tV^MG{jEM)xdN_C}_ zF5nswbv_BM!)=EHN;tlJbSMF6PTo|!osW%RUuSlIvn0?&{tuSOH(n6FB^l>du;(s& zLa}Wm;Jepu2s?aiaJ2$qMR9GqT~Jj#B)pqoH1W33jv{p@qwX_@13YGG!S}~3UxDKC zFx0AAFeq9{8=C{F3Q>Vm{EZ=2g=~F*-T!?1$#0+W``HnNVTC-o-4I;f+-@rA0wp!w z3`SO;lgU)m*k(vP@udN$lg8%9kQwaRDmUIQ8QEEr$J~R__lFb_RpCoa2!{;$ho4W_XaVF(GRd55=*kNle}f{@G)XDO}5eP0O_zKY3b!fJYr|I+zBnzafvjD zI`*@Hs87yyL@~M&A|~bMc!bAYk@`k!K=z;J8&ST7x6Zp zoNBu9l5qxPFFa&+{?^I?> zqNx=q+5wx&vyu9l^d?n^(1NB0?gNcyTPp3jOZ}X(^xDN!3*t%H_1I1|%)t*SJ(YM7 zDN(~b9jr48g#<=8p)Ap_T)SE#o^Gp$!Z`OGQgR5TL>vRl2??uKK>7IF64L;@5a@zc zIC*$}pF{oME_+q*$-bRx597(=_6U zj*)G4^Ti;pexX^W6Ozq|&y(+(i=OT}vJJTz!WuI=p+UsbM$${UFAkFbE@9J+ET}Vt5w#(!g1EN7;&4_V2 z;9*#QMuTrRgFFbi2Nir6b^guBIpwa<^<#M5l>7XJOiD$W&=N3EVkyzrXR2itjQ= z#=P_bcM^h>-P4txONHNHCnqTlu@K@L>(!+ZPOOb)mV0Nd+U5t?w?arx9N27VA0AXe zI<#D)rr?GK$m{!TRWKxz?@F`2B4Pk03<7Y{*CNug)&Ey+Pv_ zJhyM>tJSq^nrp@T%=vub%qqQGp3l&J#rEkfHGQ2#;~C4OK;>EwAD3!&!AAsOK&Opn z13jJG*)wZO`3!3)^M$IY7ECwTYHTJ^%DdmDO_>(m({&NEG5=02mAO&+gsHZ&amVBG zY5^H0RaDMb1hXp<9wIiwD5M?|WBx@_fs|8(hnk_8uN-lK)P40!iVdRdA?3E(_C^c4 zz3-5`1EjgD`Qu+0gd__HB0R{gE*+W7T9Ug&V-bH?x=(^xNnfS4f#XMy|6FbvvC3Eoi^9zakHw^7p?zPb8Y8J+uV;yXMxr5njl#S#4j->Ia&+d@{pGJ zSY&^}D!Ii7>4)zNqstc5BdWYbhh@_qJTW6a^MvfshUII%<8j0`2nDcq6`JqLr7`CA zNmBjF7Y^E=J+FyI%iN{$=w!(i>Vrw=4l*;GMNUE>%K`Y_QA_)n;8-5#tZX5Yvn`JL zn&|cH*{PrwlCuvl_OIksuZnx0+T-%nIr8IHzNXStcL@!fd5?!dk!hsWycuCGHrD46(+)ilvDF-iIa7 z4+PtOX&*7fAkC&VHrt83DII6ben(rGxhVb^_DEoumHZ`TF>-gaN|(Z|?;^v=rw2}Z zG(K1gq8yU1wr`vGQ2^6$*?4+5u1USF#fiR_X*+TDM^)?j<@D~b7|SDOzXjJd8(E#J z%oHw2zV%7p)sAIi{%%|~qQ8fSyZvI)2`79S%!ovL*FW=``N3I!@dUCTt+=MtfS|1v z;BD*@vjVGWtIyVEnhueuS3Pn|3sQ@;5OMLhs7*y&JP#%v*Z%!!|oZ?|=uV_>)s3LLoSteQ1G- z$;31G%?aZ*WbW&tFS($zHh!B;&ij9_-434YI5oLmzR&#hG3Pfw_oqMyv{}sum{d%2 zcc#qc+$ssXVA8X>0Cd5_I+-Jyzt8Vm&Y&v|DK1^lboAxUE!Uq86%3q+oN^!nvNxG7 zH&4=w?jmWCF`vN`msi_ONxy%+P4H;-(q?6IQsh$2ZMm}WE1Xq8y%|*M&Q+kvMHa0F z%);n+wlQq>rjK?RP$_5cf@A?lr=Gp8*1H=ZL;nX(+9!9l`2j-mrUE>mcfDz)qj|O8W;W07?#2%05Bw>x?keTkowyy|zVb;7pkHW{s3mgFC zq79tMdy!#Yf(x(FjBpvhFK}7hw`C=E@=TYifCNU1nI4^EqOz2*`gMxOx&+wbuUIV$ zDXI_XO$u$tM789-`<+iFnFWid1=E5i`Pz>4(p@8C7tg5sYWN@|={=|OJ%i6PSdppro*!Z2-UCHm@ zQ2T~w${g|XiX7}tzWCybLw)RX@lkI>=ZwFd(mZVF;NYN_X_{jF;i$6Z;dWN6kV((< zk!E;pso}!h;TR%mC6?5v#M?XrpZElMl1n^4w(1eR{7eYBKyUQ@J`;_xCo5^+PR0ij zIp^5pxg*1DVk+sQ;@XS};$?lrq(x}r33u<|)u&G93UN7vk+qtUdngs%wBWj>gy}b9 z)DUfrml`7hDvt9&7TuNhUSv-X_2j*0nyOFtYbC`M43dzT*z;e@Y zBY#Z2thc~e_wIL86GhUa91}<%RrgrIB>YT8^c1dRDYH&v>R`OC($WPg%kBnbbLDpY z(ALltpdA9mH+Xm!1zs6PN;i$bd?;xT@1x^v1B&(Y{q6`7(pqE zmjvo{uZ+QxM5!sh)^-zAm%syxX||5Wz48^Lnw9HXR~|r}5A78_2mn1NfO@(J2O25D zXMf_raI)cp8u|A-7Xb?Zsvcy4hOIOEbb$iD0+Ul@4^}w6D!0Bgb#-R7vB(aL+ZCm< z)VoVE!m1t}WH<=z6l)_TIVWWkVv7d@%MgrC=W9?DzI1IAN=h=Mp^gmLwC!A_F|JNq zjTgEv6(eiENdp0-rOVU)xxREmdr~=a3)UbB3I`x%n27_m+|w zB2vmv+}%ffSb&F494qN-MynQU-6D*e-;EO{xs#vG$<8Eb(pT@)9V|A=X?nL-srqwJ zdFq4S0w?p4R*R$V6cB$-oe%L<|8ioz1$oVC(z^h7Vs>?K7nH^-jlD<$l4M|eyd4h0r8pe0RqGv1^T-} zdR8xM!z#qtX9CX(NCm>sCJh)8hW>>8-8@Wog zDDieCH=!%BFTDT(>407%!LHgv`Vl_br5|{G*fZSyan}Bfi!6$jpt?}t4Vx<1UNSGe z^&gP49(H>))FYW;dSCJbr`$?f>vDn8LPj=cvK5A7E$^-C17A@jbMHq4hY!RTtPOr{ z8*w>Lwk!Q+A=j8I7sU$*orViRcgt7(RpwMw%q{LBWy}ZswT9H&-ZcvW2vY`v5e%SP zNPA`cl&^sOZRHXm*3f1I>))p3$Q*Fz`m)w-5BEdG%FHiiPb4phw}G7_KJSeMI~N1t zlq$lBIr$N!kdmb&UZiq{>)S#D7zDEtf9wMOd2Im^RqLTs_LcT+j*>U$SDqeLVr}qf zD&0);6A^)w2Q~SKhymP}b-_-Ubz5KCqG-^{ERQvHf%C^Or_}Gu0r@y58Tl%ZvnNO! z2PhP?F9lcGLy#LGJUfe;9vX5ss|Hwmv}>U4hu0GUpI^u5O66T?YswsS!3tZo9@gb+g-hqY}|1dO|=$k6uIZQt41{@ zK8dDAW)gDzM3T=kf?T*%G+EistVdf{Cu+Gz2P~me_X0k1`zjmRETNIJrjSAN!6KML{gi@ zU+L4j>pLmX%&-86lRQ=H6)iM&dXl%pkrh(~Hp|M2N)G=T^yyMzIYX;&IM+1<;1(!B zdvc!=>`AV%LjL6$xE??#EI}ahBkGpAp&xQP@YcHbykZpZ4SnbraVwliHViUm$`k=b z_qS%DGgaP{51BGCRXR#5#0q>()(NIh$A@Z@zgBK1bA?bjZ5Qz+L5cY@*K3O$|x%Gl5#(0-%b)u z5y4<4kGL1wV%;9QiHqRgU{Ut=PFTBzFt1KIjU%m>k$ie3;tRV9<;3Q@_ItLZ$Lu>M zb-L?;?^mm_iNVKvrBJ`kcm?-Ol7;L#m+O+kHp5*8eIVtzO6@Z5bLR@xqRVQnD5@Xn zjRRO@Ly(SRro!pty(noc<&?0T5nO9y(35d8T8UPnvL~(*wF%MluXC#-*cYFFhfzV;0}&Ae=&(!V+b^>{9QB=E8ngHg{dWP1wUJOID*_z)B= ziIdSoS24~yjqku62Xfk3LMS53cBA>N(g}|kz?L$%IQflR_bC42k#RD?glXL zvzKpgnYgOC&W2qqp{!qslih%AFhW-D#1*z2(ZL%=My_!he9GnHd{rY_uOwCrHm{BzyxZNFSQ^xG^i#;T_i!j#UAxWtF7u1+{j)@) zcPtFc-r){=z+DKt=}w$GZM8P=w!otK&?!x!7HiUu&EJxJw;FF04(+$O zvGK_la@O3Ve%{^L23BcrT)FuO-19of+LBPyO(hq6?Q@+4pEkO`mZ*-l_i(UpEsb@CS%8{! z?Y(1+r%)%hnC4Jg6-kN1Cm_n}MSFebls}p9`fN>oPiU1a z#mv@rhbquw_COcA9OL-+U1QJqdZ83GJ_;a{jg6 zB*MpUQefXka{R9k#bma4AMe+4o!LroqP}m6eRFSOCZt8n)^DJCJT5*WIk2nnW*G-n z&?O$KU@eq#P`a$f8SSDV_l%d109aYQ070jFx7ml7QScP3y)EI@Kb0mwMhrBSgo)=v z9F@KioCwRNzc>7m=9*b8EH;q%^aj^=zcr)-m&l3G5R*_(^OhjPtXuINR#f~;%xnzB z3@N#y6R$t7#wb5lF%a-v^*5Xtjvd<6-6kPo#d=TJ{KMJ39D*M7@oG7HHVqYw6jMjM zm))q|J%jdNm#>H)!t@{Ln^^GZmBo|=txmamWWILwaNddv?9B=sb_s~$y_v;}h6Azo zvpJ2%dlDMdoGg7OJ6rS8n(pp3^e{fhM6}+oyKA!-aLZ*yc-i3K|I*U@7~xfiFf3oM z*_(7L@~BgHSf^N1WfQ-)5lPu;0C1$<$(;}OC8rpz*xBK<{vOxd(_qj}%{7X5pw= z6LUrw1ZQc<3yht_`Okm6e}r$Y+z#6yI#$vjmoWKQs=md>6m1&wzG}@}YV+#gH}h5g z@CakQK?`uxW?ktKqof=AuS|sgCPDTJ#!)WK;K<)v=Xy4-2WsIr*>C#_+*f$<*7nwR z&T*((fW!wkv1j3@vY!>4lYsd}?jV`Cys5K{4TokXkW;*5(a6?wad{HlB$J%l{;dF8 zWm+g--R+&WYL0IQ2kXX?UFVk61j{Frg?SiEU1y;AvvQkOp?of|AgE%@G@VJe)wP6Z zr)?HoSejpt)qT3_k@)I34f)?{?EEPwmnPdVbWMN~*totRa$;*Bgw>#4S8gyCg=u)Y z+e0|zBD$~DwQ0GY+M+d=6Jj|X;T#FIWVBwK?8Y=(fySHHa2`69f)>P}nKg3Dhg__S zIQw2k;Kw__ka_GCPTIjRDa(8mjl{a*{ys#2KY6EDoTn~{eySl9^@2h=7 z2z)GoT-$%oVe`o~{YBOdvU1oePAXleM8tOM>t#=E7!o_1%&a-&`XJ=Sb7Ci|(Z$RT zLO{OaX4n2BjQzVF3&03~tsuqQ|DU?s*tuLjZN1mE+l{>#c_^(+e^Him?DX2@!@q`* z|KYN12a^ZyvL9?vGfm<>>_QQN#5Fn{2%I&a?fUyWzkW(r;1n15E_D;~8k!jPuPh2+ zV~C$_2h!+REzSKuwG8~P>i~r%?@z*~{>AP67^7Y)ARV4uoo)XCB>wvAKM@L`6)7O$ zY|eI0|M%?(JV~J7)EVT-Ht`Q0|MM$*4(S7j936Y(^!3T#bNlP3=kPEu+}y2Q;@?8g zl&+CQ#~KVIUKk>@?^kgPHA*P6T8A&6MM`sM&$*;-?6ta2EBTN^xQ}V{m&>&$m=c-% z(M}H48c6R-o%?i`imQ2(GK5i}2hH+V52KR(O~P3z#|$KVjgeLUxmxNSNxy}mLW6;B z|2;>VUJ(}-JIu|1^BXn?d%dR#s=-dSYRBocGA1RIaFM>b8j4JlD_?YRS+_B zhsC*-lYLG}c1~+WUW;3)t0Y@B4rxm$cSsQ1ZqY;c<{9k?kME;G!FqyXTOEsh>%pIV zN4lR>USDE$*^O7EeQk2hNvPyz#0c_E-rPyaNd$YF*h0+ zn%>3l8R*xshul{Owpb+@ZHNi;jACfdt4&6x&6Tvx<*X|a{aC@)x2L!UiH-)-B{C8+ zDGX#A(t9JSbH4qm?-UxUPYs^wN|WD6Lv0opIk%8IacLFlK2?*tcIZhNo6Y(66Thd) zYZFJ}I|arJu%d&jc?~T}Eqj@00B;%Q`S4~evcdI60l6Z7N z{fa|vl`ZyJ{=rFw^xs7%nZ1&*S-3mhaaiUGzwY|;Rc$|;KoA;rKoHc#Sz&|2uS+ad zA}Y?57u>g)cAW6<4kavDqlMA@n9Ac5b6G(9jJ9A|kap3M|98=fKweS|IIs6n38iqL zjP%ATXd+wsN}JBs?P-CD^2my`rwEgpn9aE@mM#)HF`AJS%DO%s3r|c4wbaIqyuGgy zk`>h@W4U@yAc@@vqRT>#S5+VjR#56K#glBd77cl3;MKY6>XX7Z83n=PIiz~JvU9y~ zR;pzGT4sHD$&mG2IUmzQAZ+{806YJUKL-6*epAtA+VSX?Ly-;7ha``vGxj4D9sO}5 z1x8Mk$Xmi9D0lv2&A>>JD3KO`oMxrM4C+Cr30bO|k;wMZ?n8*DY5^ zRwo-oS%{a-aJIfuXjRnWVyNzrEni_IO3&#U%L`<&Z6d#nfv4mnBCQLU8m*XsNTthjGcj6Y8VY~H`;(~ zjpOcrT4jAY>dmB$5CrW-e}7JDd*kY#Ft{+Qrlbu7MH?g6G`{1rU*sP=xYDWuZpbCg$v}HH^@&TE zp`<9A-D6YyTR?}K`lzI0PSOUoWwGi!pTd^X=236Q02uB$3u%4azI$J8z>Jl5-jg@J zfUjrvxilpa=aGxchiuh~P0K`n>%AAEiFO`j%#L5k4cv+4 zbx%UMuP53DcYqt=3-+T`X97BQ4=qVA_Dh2s&G_K5Tk6B1s`H8!r~;hZmF++Gaomb0FX(0eaD55G=o3q88!n#z^g6v@EcZ+Ufc<&;RF_~Uc5DB)wU@!C~rq1E)BqnMg^( ztO~U6E<#KIt)|pwmGp@VF^$zv5tE(%u$9JA_eFnt*K+;fAuU$3ZW0w!Vb9#$>L;+< zKQ*3vFk0d2>{u=LSoxE#>V)3uhJ2AP`-&e;`Rr9$Kffzp>QcCzI3DYzrpoHHg=P!q zGL-fT#LGUbwBN(S+0y>zL!`n~TJ2rjXI@3;jnq+kUs=C8Rg8|Lz$dvT?dE-jk|mooLb*e%*KwTtwy+^w^sK z4XFd2(B#}lMjwcu4Rtihr*S+&Htz+mwmuV9oRmL63lgmOJb5E)G-R2cy%&5d4e5p9 zi&ip1^T+wVE&XIyeEoXYK*r@5O^%YAmyJw1=o1L0I!Y~%+0>qRa;a8b&ir~2yT?p7 z#HE7%ZMsln(6ONTINj~#O{Aj#5f5nKd92%+_)p1~km^hF)b=RU&4#LJZBykQilBJ% zZBN^zRtuR#0p%_fuVQh@Jik_5#mbe&#>TOHJ~c^lQkKSzGq02t6B4?D@}=BAiOv+~ zPN(HVMw~hK@?7F>p65K~sBL2YqGjnsqsXy4SHgzyp-Fw@UO9NxF}Pi$2r3+DxN~3h zQ(8vt#YY;UYECh7UyMIgX2^i=keDz_$E+T#{|R`<`2tB9)a$5+Be?f^Mbyc4#8-6^ zw}!+@=;h0$`{2r^Jx{Pofe?>7w=$Q6Kt^~S`4)I%P-{iaZ=TVQ$_#{LF5rDqG#$gr z0_U|6V)Jz9rhVk&$mOK()ce=#v>_!y<=F7!^xJX;_e5CrU1mB`Mv3w- zkG7aCxwvc0CMLOm{+@VgpvKzASj%2OC<4FoK9);kjBFBje zWrAxC$rOfg4sv`Agb&{nFQ*k@5to|}NXBwXx#QtM8O0fvx-Tz%n6s`B)4YG#asnjn zF4lcH!1-dBFM^DTx#oTsyeP8KA+1IYxgFX5`g%Hb(E=9iWB#JZz${<{FC|;$_(9Kl z&9<)ubFm32+T;KI6W&_f)K%Wec8^!|BT$9*$-1~;Eqr!GMh4E}`sBb&)b~Wed%ZH+WN5W9&I(yj zSk{y5-w$}8txYw~%;M#Vq!O~zg_TNU|3%+g&;hku2P8ZM6y_FaYkf*^pXmrzhN08P zjRub zH7xMgk{Suunf;r_0>s!XB~X(EWTXwsP9H#>8i7(i9fcmZf>} z2!YLD5Bi@mdiKyfc?eO9b{`Q7ELs|Hg@=qbK}}EiJSqpv_WaCv`!%JLJjIcmwEJY! zzY80F)THMn^&XY)mbLu#oU@+^e!xY}%tpL$`n6@#FUefMf%GqfT!K0OD|ZE&+PvCv zn5o}T@Q>C@KR>S4o~yU!IHE27u9g4%6x-S9o+}UbvD5GL{ew68^P@=Y{Fu*rQ2XhB zXQn$(>ODeSEpQY1`QE?YiJ$XEFTC=$#sA9iId+C0O#h;D$_g9(^Syt$=Y!qAtZ6%Z zKJ&j)@g1D{d#~O)@=CV@2MZwABL3d XIIb)@9vi&__%pm{dI9~1L-_v#{vU*_ diff --git a/Docs/images/setting_subscript.png b/Docs/images/setting_subscript.png deleted file mode 100644 index c50739cad1eab80f6008cb5fd2b67d01b3e0647c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49315 zcmeFZbySqy`!`Aof=Gw7AOg~YbSVNNDIne5-8Ep)p`UF)o~&RJ)D{cGR%+3JRXwlgFwkDA&+X zP|zM=Uqjv@Sz6FVK_PRqmXcDDlaiuWadEV;wlhaT(R!Wm4ojWbFsT*%G4{>iBgp$# z^S+Q~I0M@4gZWg<$I_TNa>OdAxC}T?i67=@Nq%IMCd>&9&H4~ZpJ#UfTnqqb%!&De zlKUKYo9bP8;dAwnn<(32%U{2$P@tn2FO&}*-90@oao9ayzlDOzmxay{7@`msHd`sET9 zN(ad<70FGMIEI93)*v%Ol*#k6zlI=DjStIqXsXZ*@r5_*$(I4deNeS?d z$n@J~h<|r589BC%aP4#{TR_S^{x(b3(VhV#yt11T6oB(~|y?2ba> z&}sB9o&4TZ9@0f$cP={?=`_-$qp<{TRRXG@yMP-JCtFmn&*28;LD8Q8{!Vj;T@#=| zD^0rHDiQJf8h{B4v%DQcgp{JkArJIs<3y(_^CaEPyQwpm)uxSSet}HfXu*MW6oK>v zH_s(0=+$Cwm3M>nJ)*`PNQ5rAnbTVKpRyHQrD4+|DJ0+e_*0 zw4(X6-Vj9LBEa|{iSrfRJPXw=e?AqR>KpcKAahorWC3D`9(5ZlL{j)GhENttd?4%_ zS{+)+OCKlPS=97zgkEUDtrYLjc#TlmUq0U>wUZ)v6}(4)x)^v&Z~O!;Hbnil{a5UY zSKGG*zEa@?et9owCE-TV^J+hfC=ab5*x^y_d!=v%2P2q2Y3fPo?L2Se`o{Wq(kjr0skAK{GdYVH*Ey{&;iIv=6zm1gx#B zkFA!iBduqxzgQ1j;aHap&t~6xul;eVliTPO&n5*`B-h>RaZ&Z5)*UxY$hc>;WQwpg zaJNG7I%&U62v z-}k@mkA6XafrB0#)Na%&X(9MkrN=4N_=R!$+g6q?t2T;GuUP24CDYDY1*^M6afESP zBZQxD72wIM*PUL_e-4zqO?_AIj_4hB?(BEc@A}`pOy*54<;CYNt>7+asSvEZQxRV= zYo2WUx-wR)UrS26QhQ6gOS^W`Yw}?7d{U`wtRkw+zRb0JtKzKOvTUL}rrgna&y~XY zmD94z?BcuC$4=p{)6RFDGM4{f%lRz5(DSWe&1V2_iEOQAZNAGts4>PjJtV2? z6?5#`4Um5Zsey)p{=Ct=-@I>=ydQ?ReG7eyUyDbJ=Q;bi&-wfFj&uBD&9K?WY9`d> zF9aoL$p{FYh@KGV5x*mA$0@)$#a+eqxL$$-y{>(IhrEE$hcl8;gY+f|C($n1Jbl<3 zy(e8yYM(etPfGVaj+M4~Y!JFA?fy9XF`IN|`1^MCjz{eS;do(f?FsGZ9r7JmOh!aK zL=TB9nSz<##@fU##3sZNs|vD;<$L8*=4)GPSj%tlZRifunY}WbHFq&@Fc0Xt*B#tr z5T71v8q1p`A7`6z#?Hm5{FW;LP!Ooet?}fU)wAP|EbrHIy_B3)!?MhB+!XTVH$p1H zU8-D)_hZA~gx5Yz?s;{uvY>cVZjAQ9$CMVG@M)TA$IYJ2^3B6dx(6Tm9`TjfG>wrA z9gH;P36(NsNsku{rVOo49F22MWDMQjeB*x4ebo)q-QS&Si*qw<19MA%~XhQrd$Z?@aPx53AZniU6Cdl z_BA#oCIPMIL6`$yK7VL88Bm?QKV30~V`1*#KE3(6y3D=qkb}y|)WUVzVp^k}zo(}E zrn#l9rVYH)U?2eKUyJ_vbMHbyo2IOPmt7Yt^RryRTuw_LOZ+vPH9T^uB+;Z>nzts< zOO$5?=U&X}%nt1i>?X}kz$tcECo8|bUw*sG)1qnSxH#XHk(Tj3!?St4`Ktlm{1ZoV zNZ~xVn}7M~enU*Max&;%N1*Cs?W3{7ez^Yr$bK(O_h4cl1OrfIkva(*v8phaaXT@6 zrO&&wu2yEfck(TYAoWebn{<_=!3ORWZb;e8g2KY>1$+iCMk2;wMka<4M#~SQ**G6G zvN=9*bxHF0n(CM&=i_F!2oBX{J6A%dp*hgh>jT&E!Xm>K!u;hH<(Om1;-ccXcBHnm zx3{L1X8~4-ZPaFTQmpqc#jzSyG1Q_zvVTnZXdv`TjKn2RLXn??Yp2&ZsjXPnEBYgC zvV@IG)!lSXF=7A3cb(<1F2b&t(fDa9g3hb$pc~-Gd4;LIFMSYZR%T!2?(}=&)p0AC z58f1~`Ez0=5NGga6vp{7#qe+mIbK$cZLIoTo=2W@VH#k@;F98k$c-Zw!!5!&B6J6^ z)4PRW&3DSoiqwHsC6SHWkEc4d!Ig|_ZlJM@HK9!JfI`tczltv(Kh(#nYkQ%(-@g2k z8ZkiL$dzwU(9-8E1lx}(*egh8JJO_8FI3kwTxm(sM=uO3)NWXHwqI{pI84;ZpAHuu zZ|I}?CNmr5DbVZ~J)t}5`5=#flpjYR@d07V{gn5sA6Lh8gK8~wW_5xcQ^C77V^;Py zaSnwIQcY?;Nh=OVV%yD(aF6M@nF$dF5e;E<;kCx5hEKbV^MKRV-OsI35g}qRk#uvA z@hu0)&}KbM>jJuCFgCBN9G}StXFYsy$aW}z$AZs?UvQ)5Mm}EkP1~Dbs-asO)DNir z4@S2);&`^o7o2mU-PdEnlI6hNwV+3t{yww_Ki_+YnETS5d~I$E^1De1rR@e|{Vbr_ z^ap7>sjlx*Q*!&bfYII;{tI8J&Qrfgw{&dQ?mI%*Z*k!@&%hjvg+2trTv)Hcx*tSW7jT6eHjLX(7zW^-H8j61?=JUVN!_g7-*m(t6 zhjd7^2UJ~F9iNym+gUQlQY&6IlLV>>yaP(0WEP^dHlj*WprOdaK|UuEm`eJ7t$Dtd zPbhVQ(_i~Cw7;=hW*#N-d9g}rLDm=~wJ7ICc2Is}C6X9J$HG3*Y+SfT`lhqeeN93* zJy)!97&zt~lM0t0!$A-R@q6MN^6Z?JlNPzAq_hOegch!mJHF32WiJCCm3^p;Evcx( zdAQQJ`9detCtD_Y)wtNm-j~K+UrtQiUjzM`R3zb-^$=)qcfp2k<81Zr=HhG!9# zUCE3=bzu!~(`l}JVB?ePOZk_!*}B=jZ5ci>slHpHTTPqIx?j`9{o^fL9M4;hAsEBg z%CF(Rdh+Vt>y1~b(t^^b(oByt!|SPMXa#N|SPA3WGm9!fJ`yXEi=QLoKaB26ky@|e zlhbvJr)0E1v__o~#Jjh~lYN*Il)@~WEqPZ4S55Y5`+_W zgyeB_4_~nB!fs9ISia`Z&(t*anu-};N#<~;jb2u zXgaLRK^!@4Y0WIB=Qoz_Hai&ZYC&FrExqYaRbX%J1#*}doMjxR;u=~8E*FB5Kf|TA z+H@JgvbC8G(Zw-<6ffm;dl<-2NwI|@c^5DR+g#|&o|>C4-5d? z4Jo^0^s+kjH@LPLgaR}2z_$NZ|z z+?DbC6=TVw#w(7>lp=O9oAoaEUShPVFw&V?6631b^9s2>#3hrjTKP04vPI6{RwL%2 ze*~wVrq)eMNpq|ltuyc_bmE$dgE-qjctCumBoGpp6y<9xRgTGq35ck`#MbDnjBlUc zln;^{m$qp#@Mo(G+401dpE{R77p{j8N5qye)k3JI5T~s^IP9dpp`3W06z<1sZ@FZX zhI3=^=m1_Hn6mG}X1mkWthKLC84ID-qk4bN&4$I{-XymmOXuViQ`1(}_sK5W*iLuV zU(1Y-(QGQw1BN!V2WU4vg@wCUPmFy{8MPIf=(XM2+?`)<7ScczEZ8sEj99>wa5wo| z66&L1Hxc^7V%;9EZx$=TIBU<|WvATZE;+$`+< zDni!gQmyW3edhk+3EzoSs5BZJW9?NyEQNIFheZ>UMFyhBa!Rb%tRru{(T>xPPmPB> zv(jiPQqS_!VtVRcn)13KJUHua`s%0grlU7XAr3F+NiSSpsm!(x0IneXp=m>k`~x-E;!{DC(Ux0Wr0s!(KvHVw;%s|p^nCQyn8QQYUpT$Nvv zg@7nqX`b9*z>Em_`l=^{^>v~2`s0+xQ_{X2k2^ngu5@bNnN`?+LaC53U)uzL(X(Tw zhKszCdzttA;P7p(Y~%1&bh=oEGXv+#G;4R&!+0Yy|M8e@xR7f-*Zy5)3AMp)il+@G#Xji+crR0f z4`uLzqfQkY`gLkYb=4i%s(PyAW^d1t)^*JcjC~&Ko?&t`+zjfGx{%eF;}jE*k@8*2 z{CGeE0nxC~iVCRn=n1Kc>l{^Cv3rWTE`D7Ovb+vr{DfxcrQF!;=4CEoDzJ5bjhF6F z*#7;u{)CR2+6#GJh4GII_V3Lpqr z^i%;ZB0!#ThA%!G#gpf|f7zfwNvuan8$k(tg^41I705x0BKrVk1ayrX6B8w_xlC7r z-exHb^+q5KK@f(@`=c(8R@}#dBsR+0*Hcg8bPDg{v0gIzLddjt(D2Ht0T)B_l(LasA?0Gn&oH`yribVon!T(Jk7rGB-k`kuyaH~RACH*^pQX%E{s8*h>gQm zC>3Xhz?TIpF*|r91%|76tM)paQdy{!6hdZ53M3|!vm?VMyMrT6evhDrned4z1Jj3j z69yAV2i2X}JMJGd@s#vhdN8chir85Vw~`)~O}3I~uMsy+RYUEea};oMD%xJDceLJaDRFha&eE8x zFt=Rug(seO@Rx+s*IlSH?MA!kP;?lr`^q z%)Fc_q)4jl2xa#f}UgJK_A_F!$E?UBSoI2WOeP@XAI-cG6F5yBD|w(N`YH#OW!mXN(moh z+;YBN{zConC;GEzqIuY(=zIdgv|>+pa$wdi#!WoUTBO_NIya})1O+*7!LQT3%FLOO z5_kwvkoa5{VjRu$%K7C6OHhJJe^I|^4^ewXn@;=Pu5slkaT-~%TsHE^!o-=ESfG&s zs($7^f$q$QqYMFLbqr6)770^`IGMb|vBTIS_``C-b)S~W^~sMvWs;-nS@1DapNd_ifWF=pA+3(3O`$_bL?*0CvcxPhZ}oy z(M_$)>Uv8N%NXZ3o(FEiD}EsJe#O2yOXd8oJmztEkjPuV5z8sfQLa{?@HhWACVQXX z%yUQYy$OwGiC#Z`7be($91(UPhZQTa%}n=BpyC|VzMzC}wNEEd)o$@pilvh3?$wgd zOhZ;{&)o0LW8t6DB^+qMu|_gXfC|Lg|LyNwrTIP zzq?t#g}>E^_tscU86XUSNJDS|)_|>$b9_WP0zdyG=2ciLyV2V+1}%|onlw@e4CTOy z)-?iAY)@pZ1T!}DhUC0tfNXO1(`R%;GV7J=ij>SLcW+QxNLbL?zP8UH&Ee=AQn75s zna4%M55(>gHjDc+zZ7p{l#%b`xqE*^_RB*H;Z+wh??l-m+9JcriYcb4Gr=!H*VF9v z0%jFvX++;Poi|DOg&eP(fC=O=sWCP%GO^8Zbl+0QfgazJZfhTHf4kU*JWjv-sQz(i z7-VK+9@FF9Q^@ATV#nH|zNz7$n*Xf%gGS-}r=eV-!s?v1g2In$1%Sb<9;ZchGb=Zp1dm^VSKI^q|0GDGv%x z6<)!OdF<-zg<-8S!O~G3>s{kr5qIL5otcw%*Thwl88W8hEu4-whFT9GU9R^-lLeHl z&BX?s2mD=y%TYAF%C*k=)Hhlxo7QOKW!3lfDS+xKD+U~X?iV`BJ110fhn!LO`t>-< zX4veBJw;{;g-0O1V)0wSKEXb{XCJT>f{%lNQPD9El;cH3_(;WfU_G|{M&i~B2PSR9 z%Q(mM<(ro$%Sk1rGhp?aCBW<@DS`rkc>-QR|FVG|=vQA^DT9WRj@247o1VVYlb%jT zp4Z=riz568aYBY@9Op)PBl}{bA^fmODE1TrZbzWs2s4zxaJ~maK|#&1R@ZXVQdAH& zb+qR+HghyF=k&67Le{5IP(;0ikwbfPH)DD)dpieLVJ|U;zn&0Aj=$gLVxa%)5jR^g z1}#MudMQU2bNUCIe4N}2;yCp5^r9|i7Q(8JW&WOyyb@!ua&vPM=Hl}7^yKv9<#cqh zj9$VX+JGdg> zAIoK{<@3QmpG0n*ALx` z<6P@r^+rLFM3H;^P~8i4d+vIg-t%;pZve~N=~ieMK^RUbjN!Q70%JN*(^|i^T_;i> zy@g5YPGqKz%@UDC;JJ7E@!D-chNg$JP9zkB7G}>{ji0H!#9?5`WB+{H2+i&5I3#0J zJ-1;by`&_^ajpQes=1+CyIa4O21zSuaKH52*zEtrO-L^ph=PiSflctQfjujC35RWt z>i_)ZKX)YMBWcWZQ*T! zjyZO5z$IvT%p<&}9DKXBCz|eGp6_sV4NtI#ws~gg?0k}`o!<;u>VdUT*NWG>QwJP0 zn!<|UZ<0anK8w134UF15i)%blP147tRo zxqJysM}XdSD4=)wEdkdgq<-yag%47p<^Fl$S-eVXI96#S5Nzx)TQ*=l!Rr`hm{vE@ zU}=iTNf8Je7U9R0hy{o~>)#jRhHuIU75rm5hdJ=XI9!5>bPhF#3K#ApjZC%+}m}L9sE`PzB1FDK?iPASU zL=!o58yu(zM{4GTYQnLWI;jGPV#Gx^ng5O`hhp3FkI^NOw=IT;KFo>!j_R z7+$b#qxMWGmoDIT|Gz=>KZcUr!v5%sVQ06g?HAAx(%Ra!z2s9`w-hx0{3UUTPo6-d zo(j0ZHD*i9WTNF{iL+5e*Hs(x!5xI<05NUOq;)w-ZpH`uZv^^P+HS*-W(Az4TI~~H zjio@d-rbfWPmlWZ%C*C!e2KY|h>BRe42{G2I;-7=rnMtl0mq|;ld0xf&aI8+D!r~@ z4@>y`(8!4Ip>yL+maXJkP7ZswDV2bgeKP?0+_8$`s=UK?dZWY1tT*hmH*IrP;PAkp zc0Kg+e!s|vH1O>FRw6s3*>1j-KgCned#=iFV&2w~W_{e!dn)igJXJm3abDWfYzlwE z!}928%tfE@;`Sf2OHd*)1(X(buCYm+%$#up{S(zdRK4#u0WrQ7fq+=u2Sm=6#No7H zgB#6zZ)f<*T04`bfrih{tU&Xf5zYo{M4Tq&Bzq^#Q%s~wlme#e*Yv5B<1@s_$Z24o+y%DMX#@WU=g zc0jun!Q8J_7T#j|^spsdW_Zt`mv6VQosI--;~<6O}$6@>wQ zhBZbm3aR6@Pd%PxPTJXcD!hABlF2)}Z&%DwxrL6GagS4z&v(Jy`LixO0)3tbaDf6y zl%2L=NBHXj+8Wv$X{ot5qmGsJB=&$?oIJMU1W7g8)%PmOPlgXZZFhdvoIi20s|G`z zr&s}0YER{JyCUvgo9nF=o^-A~3<`Ab#yU@Kw0gLmq~B#(coAKI9jZr|G`nZiUb&@l zF`T;iwX!5KMAMGA>wL?chgtuo^`V&az)Z_%?U!v+6QJ8lw!PtygccB9q8o3Z3n0u5 z-Hv=!7cfOr?le!xXuUbgdT6oxth*&>qFn$)<(y)xF%^igVW17Z@gJ#_J0_i@7qC&^xsB^FN?Ux z-VxQZn($kr&0XjaE@v37xR2My*NeC8YyuT4<1-rK50wAOo4-dfCMg9EffEQbq{Ene zHsQJBqrPcKv2!=qDH_^VNO@%vtq!f&RKNLzGHkJ-5fa@<&c!K4W(feo2Ij_rvtR3@ z@LH6;jGI>CU6vOQj$;}VyY|8JLv(4O-c!lAIciwfNb`K*f~AZ5VmX?Xm2@{}ja~e9 zE)SC)QO4V-E9WZc&^`Owd1RX8nModTElVcN_u!Jp`?7W^-*O!5y2(`K78)g?TJ5yB z$AE*ns5+_4a|$-%Kax$!8JtK8Y%S8>3iR_*1JC}8V!IBr|UzXQoz?e3} zUzp0LZi;jbG;XW3r#0^njuNj-%{AP56ThZ;y*_m!sBdi{)pu zG4s>R&DmW zkN#|*C}O02-sne)_wIZ=o|w57CGH6!XiVt(>N(ADR~dZQW0Pxw6#5wi9z|@IlyZd5 zRWQzA(aB3VyR=_u8W2o~3htF%9`IpQ3XHny{i$eTB^(cEmndQecIE1CtmQL zex=pCG*kstu-(~G_@Nd~?%XX4rkru4NL^=h1wl+>^kbr!X10l7pn6ds+6JDUS_Xql zJ21g;!{9tC1=&0eETt3muPv&erZEL+tyIW@tGHDvgjo_QmT*nH8c*-ysxp&0q?kAt~x?sdrvIb8RL586M%HmS$gz``O&R*rS-^ z(om7oGaCdh7NlAq;phFSBC4nNoauKb{+mMujT7fF5DaRr#~sZJ4>atTxW7CpT)Nx> zlE@}>R(M7gDoe08FmF>sL=d5ul=Du*m(G(Rpm2P;dfn~Q8rP+FCs;C`{C*d92qRZA zcER&9uZ7v{rTnqNVC@#+0GGD0i<$F_bRcVb^4^RHUa!?8M0p< z%z7zmTviU8I&Jg&#|W+|vsFfklfW-qxa3X&-KHMljf@11(59W_0l{?6M zd>otC>w>o0x91}q{PO_m9Z5I+{1-^!2?kU)ClwuQ_|qB(11Dc)`L#USlOud88IQ0y zGku>yD&|9cKxtxDCs~Klb?dvA6^9`9#%cj7IHbRXh0iEemc4;<#sXaB2F*b?1hFe6 z&(vPdGOivDqNZ}k?`W{^$?5G-#I2#Uz=a)Qa>YBYR4d#H&A_LT41YCi_Gcw*f zep6piSLAk_XQgY8N_uKsh8mjKW~_EkB6{U~Ln;(X@vEBvRF&jM^UdOC^Y5qgB+z;P zcDR3?k_KbZ^z+rHS|Md4n=3IL!;|-FdN|d9CMU$@?2SzWn;9$RHj4+70jd2VN=e1= zz5SNnZwg?G!tLXuppkH9+6bmzpNih=_Nn%s7sU=Cy5ii2RvE?7wqy#C6D1<7MqlGA zK`}WKpqQWs+O+tVSfh@WW6NHP*JH8u^8j!m8R#zHsWHTWO-IlZsk z5j!3nE)pd+IUS$rT21iAGpG$;>xDGXH#&Y9^0%dRwq|c!?jMR96DoAk$SvltYgJjA z$qRp^^ZJkV2MilBB#NoP5_NAcm`=1i=mPo4EXhx`XI;IwRe7u~+tbOr4#X;`ut1IM zKAeJnFO8(xNC50TWem6&3Y=JIs|F;!oPf39&mrY3p`ushaaOeFV8$%gdI8^T;>=3U z5VplFaGm(B_uhin@dDOT$xKNYS6Un^sP<&LkzFsZa3!EMuVL z4%&{tb=I{0$2))ADJq)%ZDg^AtUr(F&n_xyWQ7_O_+Fp=&j|Y8`Ty15|KI&5=(-eF zP5cj>k~~B!)GUoAWz$g4r0;rwEM-u{-Bs)<$B?pYw&+h;-`Kcy+Cio(9B_X8PSo2a zBH^j?FTqKnBuQ^1c&qpNKh=T)GOcQx=j?_pO`C@>J?EZyRt_p`mT+U7kJuQ?QxPkQ zKO*1A4Gj%78&<*pPZnvF!MJ%5Q@mK70j1Jr1SgdUE|*U_KW#CmV1;w+zN1QIKkI%{ zxN>y5)M!XpKGssd!e#o)DN%;&8!c+KK-`NTqWwM~k!ih!`r7&)=8w>~N|bbTbfk7a z7<%Tt7Pw;}$`$Pm#xjZEsHNqZ=>VQSZ!*hGH(9)!8d>MiSfax32hv^bY{5GB2Rxv= zfDH@6h`YLkA~<&q$3v6199lS9+`Bce+1X@@84}92z%otFkE0NM+WTvWu-&jFlac;U z_)j3$|B)6Y$b-~LMzXP{$md7hI`XN}qoSx02^Sl`)jr-O;>=?+yV?;>=)#CNCGcbn zBr`kEC4o5ca@mL_oUnzH4#z~uw|Gk*h+e1zo@-hPJPfet7`XsZJ%Abhmw0XsX1yGPP@8lUAk0p-kn;JicQXogZY2O1~@OCss})E8$t`I%@hqY`jUZ z9+f;JF2N7BtDJP{UF&!zdoFdplh(HAnu*Y}PLbBM-!rVyC z&rQi63zwW%jYtp*=p!zMD_jQ}jplq{O9*{00~+&t2E(^_Ya(I*+wGSxlqn?kG6*&G zTsIgz`>L?IgiO26~Q!WY1oC{FP&)A3z+;^MnukC^Z&-w*7USUF8 z@YzGzN*hY5<|B(U$l(%YAKmT%a7tz`B19H_HQ{)x67}2p6iMmNxZOwkdsC;@!4v)7 z{r_d4Bwa0@1|ErB+E6!z=+X-y%w!_nkV0g)Nq)Pkt3ilT*W?h zdiG~V&eF%=4}kW0trvYYGAlG=pc4ELI(t6Vu3$?+7HkEf|IRdW&cONo}H zEKpK1h)Q|r2M|-TbFb&Y04Eb%T^_ujI%B&sBVpnIr8Ji>&OB@)6{7mPtC=y$5-hNm zUYvf3fQL;hkfR7GC5Z=}QB>rPpxxVV^rfr@8+H%}ytx_F5MRXEBABy5ux4`GJ6T$j z9aP}o=?f<1@|6ZBlPXJGD2P^{cN2Bq2EaFuk2mPTSyShz=uW<2nVcU;vVa`uVcxs=RyL`{~@$F^q&$tv8o7#J{pCxBX0OKz<#|lp)pt%yF@6t)j_#3k&+sAopSus%q{La#O zygPWy{iY00C${2~-5y^WI||(o@CTKexOi-Qk1 zcVR_eNO}al&+zI%ObcZAdpsv=PbQ43Kt;IaXCc1sDstC1LbhMVFZjd3bZnX>MFsZq zmosR6F;%jg)}l4GByT}4Qwrg_o_A;cFz1VHOli`sd)agi;_kIC1MSA;0Q#!kqz zQ4qH6x_HhNz}is3iy>^C5;w=Su!%Si&{%1aXYUtTRCGS2qYE{S5i4mg>#&GhTF3V* z%3MzH-KC0|_m$rWKpCmDJGPICY*7t}3Wy)S$3Ntn_XGi>8NnwRs;2_ykSXUc zNQlmk5f}FLx8DY?f!pnC!Kw|;FxtkZI|D77jn2a%s~u|t%`E)mH5XI@Qa|WKRx6r* z^OX9xeYPK}ki^A4I5=pJn|d}Ca@nN;)dHOsuGdNqT_aftm!gfJ$rNDapK}{Q?Je|I zop)CfC{cv9&9(A3C(>>VOIkm*B#d7R>1CryzdT-w=_2#&i&9LyFsmDLF}yt9)qFgm zan^aTF=ETvYm}KHpf3I8=~>UoXF0XxVLsKFn@Vd!KP|$5jg3L_J|X_?-;88%5p6|M zGJ?EPy@^%r(_~MQ)`<|Bb6RBit1v&bCT(GA?Mkz`VEyzvLOX?8`@g zdOkWL=G^^yO%@bRik|3uMWqk}n@={&I4BT;*jt^n4(T_A_#4vjTH4W^^^3CvoV8w{ zKNUk9FD;Ip^$#Sv<7w^wq++zWdero`1g($L<0GwR3&nFdM{U;w@P$m%5(i`* ze12kh;nCy)N;e&NAJQJ2( zSE*@p0q2p&T|yz9-{DUa*d$V@>UqA>&0GQ0hbkz8LZ3GsP1~9RFODMQ;_gP(m5^fJ zU@9}~j-B+`Dh~1KzK{0&`nuF}9&Kw1)C)@riikq8!H|Ma6^q^=Le=0^sVL>y?wvi@fRQIC;aZPS^n_IMlyt`lITXfJCi;!o#Ame z-cvDS@q@bsiR$EK^&4VscE!xw15DHe7@Vj@)Ez`@_m@gp{VA7p(-!^6Y) zSb;~5V&znCAN>y)`~bnf2YHW-^hmd~t|&%f6R_kV*}_9ArScza;b(6BF16$XD3PSfCcfw=I{*0TuK~_IdIFWfU^Tld1XYPb?(f0V z@jusEQPD6-k&tB7#`@#v_^*BD$sqSf$+UHa1%qDTAn~|rfh6@`^ZtoCbw=d=qGH{D z*UFEFB_Cp9py5nAh5w)*|6t+Y3ltC%VCTtn3ty$4ETnod?FBpT{%hVp?;Atr3-xR> znyb{Kf>iGd{xp+6cY;uYY%nm;3Z7Nm{KaQ~-OB%g`H2g(uh>3IY-{NywetuaLn4Q- zQeU^sL&F;Lw@*upFeurOr4ub>UB*91MQ<4dgM ztvNv{H|$`)8vGx>M#clZGEz{{!(Zw!zlUbZ_mADoj8cD|kbbwOH!^gV^SK=Vv>&AV z4w@mCzl%O2dWGwKRgh_*&#vGNdM`v^7)SKYGT~6 z{8d`ylgl!;#5g!QO1yT4KkHfgB*qYY)~Mxnl)IEA5`I+wJbr=vaolyOEsnmiyIJ^St9PGg23}?}kFp^z*jSpyKjM!v4z6GFx~}&5 zgsZtu2Vd|Y|Xo==W}!U58;|9dKgH8MwGkSVh}kb81LY_jL5SSe1~h> zBGsO3gJ+n}|McJ;kEx8Cr6t)r?9qE~CQ^&W_n%Jqpq;90Rm;77`Vm2rU#(MFbgE)o zBmeek4nFD6%V$q>5F|M{I<;xYhiep{J^h4FioC2$+ZhBZg)Ot9Fp#EfeR#He z%ah~MJI!mDb<1nKy^B2HJ}%CIOoQT{yTC=&0m}@{zUP^lC4N)o`KaL)F(#RH9Ssi` zNpffaeN9i`I8W4&wVn;fQwSTm-k^kI@Kr8PArcgP4NbM24IRZ)6Hn+zP4#yNMn#iC z(s5c;Df`(gSr)w^62ts1R+O%Aw-h9M8B{l*x(XsszC+{|m**7%4yq%U|Fl0X_e9w^(ncu{Jm2~?^ZuND-aQ7-x z=YNODm1^fJq|f>5xKn8z0#vARe)Sx&D%ch3h9=S z9OO+YaP}(Ys3Dh6>9Jk9Lc0H&{=cUG|7z4LSS^o3THu$*+f$Yu?OIf4+x5OpOZu|1 z-)rF!R1Pf>Y(fk0ibU1n%3;{JEo#jILk;tI1oa0PQ37v{X#g|50_x zVRt+`;aZ~7Cir%Yf9}dIxUgKeoC^Nls`$UjJdU>vBPKxJ?oG?)jhzErDWq7yOAe@G zlELIxpGmSS;+~%S)ptgN@LK;2{j4TVTsTn_M&;PTRC2N_u=usMDLdXA6rM3@3etpI zA_RP!7&4G84}|L#AF3cvxULwKJ~4sn?R0bdBgf-RP_NDWm44Rh;vcPmf9H

pyt43Qz)KkY=8R-!h%iYbu<19@__ zQ;?*aeiuDaK!_~FJgXRRLOTUH-A~j+a*XF}=FJNj2k#fm*h^)yhAu2u`;y1ZX7=1E z$*=`am(`ZuXzr4f`i?xydDL~HE0So?2t5)pd0JyP zZIPNl%Q$9pda%J`+8MdNyGv{Ryp)(igT7Q?stj}g(f2ofd7v#%s)ex5Uu7{fK6w9# zUss+~htB5bWiN>i!aDgAi`_%y!~FWaBzkl<$V;<_)9(@Avuy})x9oVnTA;%)LyyvS zq9h8&*>tC~s}eeEJ+k-)aRJYn$nZYhSl2FRxZEm$bZ!~=YTc&Ne}5HvG(-&29 zhZjgMLWj^IzfrjBv~UwfukG{`XSLfAC83|LvGJdc;^+2Z7^v z)~{ty6>5kQpKYInd!0RlnaqDogfrt=Wp>dBL4{0H^uM%T&h*h#xFg@Z=RH^23ST4xpjC{`vM% zYA{Q*^c5%`D9MP4On`N#ArjFX{JK*1$_NRi6G$suo|=gLI?4Vz$y~M9Wcu;NkL!e2xKh zyD|qjq35gb5fbP;1q@}*)S?{WPn}QGnY#C9e=O`evg@?`$9{VnNj|psiY90)%IZ+m!6lL-#%|{rzNO~K4W)-m1AZSAfLn;B}?be zcULi`s(h?T#z-rONj~w$SqeF}IwO*DWSgZUi9qIe%Ap}iSD?}3(}rvqwRLM56bFi{ z7snq46Ac1_Rm<)8kPRcNsv?niWQQm|+9L(ipSXt#Yca+WGlQJ@v&E}B0~OZTRzTK zDn5$5{76(Sg|MFNf5C+)r7}@HXeWgDI2LJ@Gh_suZfrY(hb~hsl2A^+kPk#BuxZLD zA5F`OL!pxn!M$jt`IT&Je>MS$+V}d?tXppkZ&0`Mc6ryKyuwBR|A4lebDH~RxAVTN zQVbl3xX78PnYD9C^V`(E*h;>txq*?wIEd__3E@iIx4X`4f1hVS2&OiKB%M0Bg@v}0 z?#+KfiN7*7pVIgKr%m`Bl>b%pVhI_4F@c?=-HE>@=U*2Ml0hbNzNf<;S3Dqzi!4D@ z8D+B&{aGCZR`Ez4l6}Yis{TO}`R^9R>Ah;O zp>&g7FMpvCuBI$~)@v%+p+5>WcoS_6Oz1pNOla$SW)rtczD?tNK)a*TI9~cv9=$q% ziuLv%WyN88Gl1~~9l@p{TckGve*&}C_URw}UlJV}He_c)U7R?J=r#wN;k`VU`jbxF zIzE*pMf<qn0mbxtx>t_zhG$9tH1jdo*r7KcbCp+|L#^G=koqS zHIZLeFzWXXE7=B7Y5x4i2>JimsK>KjlETyMbUe(@r|Pf{(cW{4D@9R8vb1 z=3mA5ai(%BlB7HqIL=gtHS(#5@4EcmdBI_L6Rj#YQA{mbpSWT~2>Oi*XFW#}V4Z67 z_`kn{u(}@PR`s;OA;(s`=CLaa#&0$nrAIcE9%RY={k?!&VxXh)K7IF* zg@&>8sUsW3KuI19Kc$HYB{bB-6S=?JdPs#MCp?iVyo-uP!)j#oo-x&5G6w`?Tujqt z96vhZP=aklwz_c#hJBB|eeyjaeE=0U#;Bte?k@^P!m|o0IxePt-8C{1%ooG0i10CV zft17?U(EXa6-jas(jU3U(ZqA97 zT?VmXBPU9f8oF_6n8vJ41GUPDLSWB+j`@l_=5tPgzs??}Y~NfPc;*MNts=9Fkt)x+ zjTZgH7CSrY`u&1@V9XGBuUI$cB(! zMHE%`BWY=W{P#n_7|usY2vrNI^AU%C3}0qq^7mMx2LzF%(M(hu3k_Esq~t5pUl_=N z^*0tGZ#BO_2`VSq6Ply24+`uQoW?<_X_Jg%Bebf4x9l%deU+BX5+L_TCdzx-+WP3Z zf;~`G7{)k9Q76)9@#R0>$l&_t!YyvCeAU>2O z)f*hMlHoFeC_((>6s&``Z}R&^0ynFxB)$JH_TDqB$)#%>me5pGL^=p4Z0SvD0s>J4 zq=WQO1(6z%-b*%Csz~plcMu3cIx0m#S^}YjCe=`-gcizs;VzGRKezAq_j`}y{ue?r z*P59%Yn^kh5{v5-)NucZJ$D*!KFTxL8mLBs)Q>>hk<&yeFAh3Fx-vd!EL9_Zfj-54H z-(ibDWn66HkSAg>lDwLwTgst@0GIcD!{DS`p*%2N1E_x1nHtI&oc<~KdG;V6!PuvKO9x`6G~ve z$dB-Y*9;xRZ(g>QAR-`FF7n%G_dAz~sBo+4Z{*dXZAzH_GkoQfCS=J;d(DUP1}6w;d6fxP`N1B2hU zIm9Q<_o?7A2%}*s8p!`oRxXD-ShZ692Pl> zMLQHWqL(o@z(Df5-Alnn19U9eMF>8?s4to?pn5APoAjZ%@`ptC!S%7prqcXt;3{HK zyQlAN^$oCkjN88S97*S(#%9uPmCDNy{Nsoz;;J94uj(J074bXp^)BKWCqn7E?!#$G zSFlLSVs3Oh$CRm)FoR<%%9q@@G06gq zXBoyHoN`C!W(iJosb(TnwtBFv3k|VH_KYojGr{(?O~=TWU~RI`%L9UArw{sSEFCp% z*XR>D@8|ek*8FYB&cjD!bT8Ju;>u&OZljfpt*MTEQ%&xmHKk@L@QHwxIldF&v=o1V;RI9X2Uug5BXACAzw=$Cc0b4Mx zt`*1mGES%1y!dv2R?X5&k6f!{p{|54)2@D#w_y1m zSlXTDLyZi7GtNGs0V*sW=y6M+^rDUh%_`d>hlab7Nn9@%*i7GeIfF^HHX|-lAiOPP zyq*6{;cVrg2-qx#=+hlJ)zE%QSKl!A`$&94#}X;;`c{OeG_XMQ*mpAZmP2DrY<5Fr z#xJJo41QRjmTx5XM`diLf^DYQKyMdp8MSKD*T5$k_lnuhVqZhW-uDWyoMkXE1U&X< z^J`H=dgix!pu4`m^IO$^f~=pZCHfSxo9%n>p}l5&w0wc;PN`U*@068KH3IfLb3SY= zT^{H}{{txWH-UCO0j3&T{bWZZ3|k4LJdN)X$Y;mh`XcoB(q985dI}9k1^YLh#^1l~ zEnjbx>m@XwJoH`F^IM~H4jT5$E-o&9?|PAc-|$k7*t-#Nu?KJrEa7enPb<2DRZCzd zK}~yd7*App`u-E-8PO+2|M+m^$q<_I{6=P+)%C5j=?l>|k*$?~uxP|2iuG)w*DAP3 z+6`L*_ZULDBf&2z03P`Jw~T~#8@a7QZ>;eogLI>N&Fxuq#%n*#{l&e(B=c}NnFB+9 zDMASl+4X7{55oU`8@CM2U=3z(o{zyx!sUw;L<6pYD`i55gfAhHWJK1vhq^m-hg;Jq$O~{Fib+Q83;y~9e<6o3hTkN zACoua>DFlqm@u%(;+_F@As+raVf3wX4aZ^?9qEKvGr}f)(`D5J*~#}18h2Hn3pup0 zMZ#@m*3-GdaorVgg@d=a*j*1+=@R^3HcU&gOwQN@kWw?aamp%N0Cof) z2sO$8Y*zKT3zL0n#+{xbt2UT+$-F|~j_=*Uym)_|*$ivGw|+GJa`aH-X5is7!-_1f zK#yHw7o68($DSk3Q$#!h-Fv$#XhI{c)9PBOPH9KwB#yX(mYk#=1t0LC#i{1mt}nBb z8a-?-@(6Ai2yo>`8g$zzmmUfA1!_Gb8mh2e|KQ_zJMpHtgzsw3?uf;feTKm$$6Qfd zo~_+enbGPo-O=>!c!4NMp^PVNxkF5LvGW^Ak}AT*i=1ydb`47jcWbYACW1NNEC#+O zyQUR&dUD4!idnDfXtH2$LV@dWz%J-pJzGmnS%cIu0m#T0jM0p8-`4JniRv&NosFfY zYaQ&#pyx{Wv^Uvn>udLml&oM;A9{TT#(8${tsTf7*$D~Z_gQ;~xdooQ+PE`nUwQ;L zgRx&Mz!(n?_uwZ-@#^tuj&P%>Yi}G7*-J%n~m^F@LzsIl5SedJGphd z+ZJocoF6oY7VhzpSDb+6fzAE5D5E$SO*#q zy2@kGsY>v}(&tHz><1>ZMZ2<+H=X?4V}O9o@$jNX*(FqPWkJ*a*;Jydu0!MJx zqwUFqaRKAjDhIMa^1!wDruCNSNeBF#=`#c_{S3|(9I{J=BBH~6UK1^FC^DUX>qizC z7_b)qYPZ4B=W6X%yJ>kBs?@0dQGH3L?Ah`I>z#dxdk15xCP7^l2Um-lb55O&}@|pQ;WC(Yev1P-XwA{NP_CZl%S%~>NXk-!255FLZ zAprfzYYK2m1Q~J65xk%*?cv(MPDZrJlipNG6tB8ZBXISv9;Jlu0};ES`o`PRsFOXS z=V{|Il73B2Iov6Jy>r_Qe0ffFM!1_6^VieWGGt|*d`YANN^|5JAma*!JyAh<>#>_% zFa)WeS6i|9X2XnriGpf6kanUVNmG0t*2S@o3Lcj@>Gy)pN0=UG7OXGpt{F7voR1CF z)A)k=;^T8)YKBieK!6Xeb!@Q_Ovb@3$+;pt7oyctOcTGnC7Q;DahB#!WvCu6%- z24y|6G(kCL7|;+O1-6ze*x5B~yixi^1X`TjWZ<06b7Z*oQX;Ftsxbo6m&a_y^JJuNt?kXTUhZOoe@gEt|eRIWdV~~P3lf_hlCY7XE(K^2qbkS3F6*qV_Z9Mmn5G6NXN0z101_{Q;5GcgNm=RjY9E6ODH)rONXM zY12CEHcxUBd_Yz=w3c@bsdhhgbRnqrY34<$CIhupWtKau;t!XgeZE^I9zk^&_rj)Z z^%M-7cd%IoL=5%;60nRTuU_C`fmNK+sMD#>*+y-XG>yJD8P+4$4|kfFDV*K$CT1mz z@`!Xqtu7Lrgt0eH5=>LPovd@fi{>nPqLiw``eU-Oi-sCL{;(+Pqs`u8?xSnY`H;=> z4rHphsm>i!jmP}5s`iCetaeL`S_1X)NHIp z>U0+%D5h9VS56SnHf8v|dPGAm%^BOFYvB2p-?~!&Ft5bO|YRq}nq&`vW1JwH&RcmV3lR%7lKIWp9gXl6OhqOI0X4jrU~be1Mp z4q6!}i3gDB5t_>KOjav3n6!?1Q#dq6^4Fsm(3KJDab?;2W)H9>T&wL}bJb0L&tr*2 z;#lpB4i24j3-7?k(pWB4b?!AOC2J}j{!hfwlgM+xjr9THYtJoPjAz((l98rdL3R4+q6gv;ZUB=0WBz@KKG@ zSHMSE-lBxGUG%arCXQJ>@Kjr4JVmWnT0I=9OT|oYm2p8!p}G#~)p^C$scErJ-=pxa zXML>@#0pmPxoo1Eb*xxllz6#fY0dn=r2@?9USVQ%vV2J{6kxKspfVu*PUAq}6O4|& z-MP6N!rpRsNTJ3aa(9HXH9mVim178-vI^O99BwjLmUSt`Jq#)pgR+KfrlBaMzPjCK zk)W|1$%ToJBW?g(k)hC=rWQ1#cu2nfosUf>?b}u|anh>@ny&}r^R5IS?GaW%$30`? ze-NF(S}IFB;K{EZ_Dv_YNg{sLaIOKRU1n!~Q@v1*?yFmFIimC^Xg=^Zw!KrU~iAAZijVHp6orPiffrUz<0v&U-H+abP7JOY67KUHjz!fjuNEL($@ zl%@4AnhyHgpDvVZ5wK9bKlB^YZKPSZN$)L_U|GO*0zv1w=BEX7cm>v32aV7cvJH-1 z^2sgkK&B&nhHB34|5!5ikvXIGtibj~JALS+ql93a&8(~$v&_DZ6y2b31*G^L#RspoY5aEd9V8)$387mvRB`g{}$9Qbgx0@@($y z3YGBpyx79$Ogwdn*F8UIFMWIBec9y5V}FBgg_PnWv%<^* zmY5ur80q)oqXsoFKBtHIeVklKm$<@lxX^H>-ii1}HZ*G>RgO^iX&)bA%N_2uKqD}mg&3Sa2ddMBberO8cgnN$%Qgvl2jwuNN{ zK8Zw9MtI0{NHq@%+4odo0%joS+)7LgGF5g+LdO2cp9L6vKlyAd=~(WGJN}7I?ZeW8 z-J;^MP-4nE!gclaDQ2y{8mlE-P&A+Z_Y3yb0{O;BN24!3`v`3o<%b$6-yUvDDTJiR z3?JjaeXqV8M)Dt{btyg2e6hjd>@ow4G;TK+us6!9k+H+o`h(*%aGoC@{f z@>H@RkbE!hPAwopq{SN_p=co*z|BINA$ZQH>9zOy@jT)Zly=(ctz4-*5h7H?GGD&C z`UdrmU3r~8rW~_Bu$=+fdQ;X2q~o^NIF}O8)p@F71zgZZARD&v_q4Po(*w<|OBF)4 zCl5jzt1s;V(}tT^>90Vb-8fdCIb33`wI{;?cb@B*_HTuLLy)Z!G1CcBBrN_)KV|ap zRs2XE0$ru5+LJ0-*9Tu1%9BBwIH%-nbDrKvZ5zN$bINyvX^Y97qy?CZLmbE!Rv1qS z%nN|aId%t5HzROlbXoX0PKlj0Dq$%hhkqnEwg`i8;l-OtXX1);tmmsLcoXP7n$nj| z>8pFY{$!hJjDh5ek=6X|pSfe(WU$mnIa9L5w|?n5bvg3rTf8GL(AuRqSEY$j$sGWa z0t_)4pk04Z(7-jl-yS4*anN2M>&`!hA%b-|9PRFCL{J3DY*rtmqc?H4z#;kW8Nu5S zX?0vWd7;L<2n(v=8d$peUEL`Qa|X6^1xOYt-_d3MaVh^ZJ~Sxs?rZh&4|d@0al}RM zgs51yr6(U&Z$C(18jQpj)f11NlHsS4xB|%}0>i(Z|GD4+=1;0vhdF5{Yu=K2C`&4I zH7&!rIr`6J&;B~#8>Lurl^<-?pYp@*oe#%HZ^k9uRI$K?KXY$9riuNZM!)yp8@)68 zIdnw?A|^r22cbNU$Tds7OHaDG8A?s4qgna%cS(s+4nMZ@N7f4LOu#=A{m9Pca2%ki z@W8sxrG!T%-Y%;F7;flFB{)P}gi}+gE_@)7<{sx?V$sn*wS&_+Uu*lh+6BxCiW@#K zM>_hP9-4Rx(A-zRZ-_wfJLILQm&7!rS$aRiV4gZN7XGt&|>_WDJB@u0Rc+ zxie-6WPj6f#M4mjV8>&3HoO!pVCCVnk}wy&ID&jO zPDX*4kOA>F(-@S!eh`J2P4Vu#xp(=d_@Hwn}V!_w7LyVSqV3M<|KDYuXlU^LA?}P9+-#rG$>A4j6abr z_y457fDTpKbyrEzMTY!cDFVaLz6%dA!;*gsYDl;r&udxX9t zXnbo7`A!!2oBDebYg$6}IhwoIqK@9)+2p@xjPPT`uA#v5LT&D^Q>z;TdJ-bNjox`} zaco(Q8ljlQhg`nv_5dXv-?+xJBBH0)xYjEn+Nu|J*!5VlfwCxh0iOjALQ z(cnqY9QX?PJXZ1H;{m}VC9c=ij z4Y=ZS1&E0XuSJ1!wvCa)>&R~wk{#>Ofk=fN#+E`l(95g;#=nJMs3R|<%IF=8Df?# zMnO~WD-3`!-qZkbv<721!#)KGO?Da+q|3L=0JA2&aPc|v=3o2z^4wruxuHW{gLjzz zWJ9WAiZg4-T(*E!VG^&tdyO@@xARlOQw_=s})T2yV)|_zf_^r z23VSMy~a9sTuZ}xgXGM!fCC^BE+7IVD8M1Wq=r?WVfKFT{qQ<741~EBBj==J`+v`FO9LU>%TeeG$SPsbRh!5MHdULf!@@j zIn&~Qm$Ub~!yvn~4(h|(=P$4^ zHaD_mtT+jwe8|>n zEXS~poJy2_#`dnh^YwWSFdR+lui@oO$zXa!3Q}Ag+HmmdiuCD_5IyskB3%4qkg^x- z;=d^mbYb79M155Zz4bu$#c#Dwa+?>sgxr9ShI3E5`QB&eE1|Zvy*Ax6CC9Ls?&nkj z*-%@lTI8EqRqBaynI$s|__lxzqLVPeJ8wikU$lMp`}vWZLO&JrT3jHppD-v9n_$qj z`^+DzKY21W+1P^B9(p-*l1B32Bgg&A>izoB_I7qeZ77HqFN9{}ISoE=$(Xl^YMYma z8~*C7<$Yt?lQGEZCwpUopocV6Y{3ZIV($P;T7>txhgRXwo;^z)HzLek-H}X{vB^jp zwRy60d?`czN#7Sp6~^mmrvdY2#fa|_J4}|e)h|Pf4)F0{br2FQ_MyhH8eNV`;65Ca z#H=t#yuEZg$a0^*JccoA+L9SKk<*Y?Kp+PTqmmQT}a@|MjB9f`oVZ z?E4vt;kHS>_E{Gt7M5atS>ax}-SNHA13ybF(l1XX5LH+n#=%C|TiF^J6y^BW5PxDV zaB#~s39p}6KSh+BI8tsovGA?g@u<+_S+BO4HtJ&Ulc__it8ODiE-UB^Ci8}cjJ$Y} zzt!%a8Vz7t4R|FN2<1$qX10B@XKm1$P!6HCN%i#1pOcvKHTGXk?w;`xlDUBlkD@FS zcl}kaF-hJz-JSd3F8rE+@oejGgOq2)#%)50h}9IiTuxPG)s(BoVYyWXE3>%cE9ZbM z=}|=PMi^eM@0ca5UL3l_AG6!+v5aXOt9Gyga^-!(l9b^2Evq$ClWysZBnMQN<&U_H z@)Cmga5t=cn?aTZ<~-f_E0^UPAFHh!fG^z&0~kM+B=%ROVL)xL5;(?K zY4lg}DFfr*AiD7rB>TzR6M@v}`l<2Zgp8>(jNFV?n%oz?cg}Tm zSVemK#}&uZ|HDN7WEq9Sz}A{1C5=|5Chi~hH&$$}QZJ?w7TzB-OSC2BHy2fPQ3lOa z?yV#Tg^FnU>D*aw6AGgY+P2!LW-d$0z0LWH)L9~s-g#XN)zdcmvam*j@Q&F?DJlI@ ze~Z+hwc3p;{BA1}ik%59#<)2Hd!flJU6FfIXprW^mJQee5O05HMN&Do<0fQhi~k5y-1 zWg2OzB_{+kB-1B6w>kSNgYlYdFYw`>6t&+OL6){;ucEfD6i5Z?mqNtK@dnjT0be{j zi=E9Wp`QL65+tMHKVOLM@t+|65R&x8I~yy9|?M zfC79iU3i(0(Ew2We~0MiV1u}w&g)jq6i9KBHLZM)V}f`b04)lula2Im4u0{pQ!Q-O zG=>z_&eO>EKvR&hY8R?=bCZpFAHB)|@Q$p<{GyfePFKca;~Z^;&(=b36p4^o19!c5 zGkNThpf~k$?cmJF0<_#4uYn2kC*iB^*Ea4{>AwGq{TnL*Q*7Qn4P+_3CIVKH*)y_G)ij%zX7wz1M$`;VRe30+*!uo#%G{2vzSe^m94GpAJ(92s0^+;Z>>kKA$w01Ou{8(@AK z^XI9-od7`KQ4@^+`QrYQFfgL?-_9~zD=YcM_}~eU6llqbX!%!&f*1fi!eA4lUyWY} z$Tv6v!u)-k`xjIv1%lVPXsPfE-$5s@OapG&>IN@(_ zXW^av45^ST51l~rH;28$>Jz%4-GSy%g`2EFhpBR*9W3}9UIPK4Uz`cB1s$v_{j8y1 zN8S5xzi-Ws_TA>}mE7%dIg)S!fJTs>P29;b-nqS_QX^Q$oB;GF#^<*woqWxhb&xO- zQFT%Kl@lN-qB->fp+Y9~e&q~(Yuj@F#vQw@FHerwXWm;yg-_l74!=E3Md*l$^3(92 zbC%P!mYMrylcX=~T1HAOr`*P*>oFlu-(}yX`Ax(WZ5aJJO^Ud4DBw6?2t)(*d6x^D|Y#t>ZwmcAnR)! zBdE={mPW(~cc-iRq(pWCzROEJXXrZ)>XR{+n#Bd}I$|-5Q||%;9LEuM_P*uOKQS1M zbT`w$Wv2{Ay7ZJ9$PHj4YM*`SqrNQXBej6%xc1^eyHYJZn4t@Ovz!fZ@=XB3M*!*Uy2hpEnP}r!`9bgTi?6j$cD|-$RF?Ua(PG-+c4y?VSRSnHNDP zHMi#nUvrTLE@x7{%1%ElDVz`g*@^$;uZch*RDUuW^YP!u(NmXaXK}+IcFsV<+g>gr zzwqK`VCPS1x^MaXQfGiIy704jKSAXJfHj*sTTu4E_16dF3gAxTa)2c6zdhW~FTlj7 z{Kz|Pn!jSX|MK={b#DOflvjEGKY#rUj0}Jyw*Qx^yaE-#o$9^a{8i!MMF5WUwrdKqdf=z+n+t4}RgU;kvj0m}VG)TtiS7*^wqMMz{}hf~bfi)E)eZtpQqLBsJe2*_{9u55 zOe5T(zhcOW{;L50Re=A0TL6X!N-Ze{&C-~O3QvfKoEx5gwlzj0G)Chf#?WoFBfn?s zSFKAfGlaKj=sh8PN^y?lD?fgCI9ERv3dJJTt&c_>PGpYv*<_jW8;>vEL~d1jFOx2I zGy(nnI4J#A25%|;;=rGQ0aYn}>=uNbRe+x#s@UC}n3)s|ehr%P#cIyNiCJlycU}=& zo*c1Wq4fUtX_j0fpz2`k^Iu)I|7D)eUQXmZ^(IzURvViMO^BHNlb}@(w7%;Xw!^^G zfQ9*uPECJ)%TCsfE#oFOrREvH;cfhKwm@kT01DQ!di=jwY)yE1JqbD}>TC1n?>Y`M zJlXQ7@NYAl=nOx-*?~<#awm}1u|AEGfO$5>@%3nrxK`i)?QMAJP8a{nt#r2m1(((j z1i+X3TiIazWVZ)aygpL&J7N-b&Qi(FyIR;_v3gh$puROMDzbkBne5sqkshb|jB=Vl++u)k2O+vh86 zU?_U#@>rzs2f?8iHvhXjNlr2gVVgRS*ZU(nD#Cg4srAnNmeAg*!SJ={brXh-2sbJE zyi1JT=^T3t)>P!y89`QABAI^Lvp_VbU|AKTIm(Z|1j`K1-2SaaU_G2+%HNs8af+$C z%C4KurGblhO^-(g1N^qY*t#cg%FM^W8uxmGq`R|L1zlZT4%Yz2Du3AQZ-@8lw?b5lcen$r%-Ozb^9 z|7B!7FTmM`&9PZJb+uIgAFe^z6-10X%aHNG`zvF9Tb?0nxlfP7j0ac7RRaG6Ykpev z#Kx4v(?>-K;kX~)gZmN@CYIFaAN&KfkTCrw{KkMdVD9Y@y6FAmgfuHWwl8WGTjP}% z6%nDHvQB*J4+npH6UcCT0x#pnV0<UHH&JV1&B1)!wV>oD^Me#-$t>L9y2jm)w=BH=HBkJfAvRgizs za4nzDUzmFxj7pB7&qJ9OjrtXJbX2iXm^EyDH%nBZ|IRhlmL}M~?Y9A4pp@n;ci-rx z+K4-C=s0GrN^&6I+NI*BZEI~Zdmt(vhso=g72*9YV2bWih+F59LA&n6+O z6E}Z67KWh^t>U;=;c1$9FzMAqO<+6T9GQnTV|~99bm8CH4&A2{1rPJtbk|r>h<$fX z_k1y+V)5Jg9EuM|p7$_?y6!1PHc8mZwX!3p{Lec#pmvh;r@tizL!P^xZf6|EBlH7Z zFr0@ic#`}!$wHqOxc5n{Vk(`Sl5`KD5?h-nH%uvw{QCQ(=mj=FEref!lb{P%jZzxr z;Q}o8n8MG%o>0&@e0KOq5sBDhK#L>Hc!M_Zd{PVFCJuuSs) zLqxW1HO0si%p}SAQ%NLALnm=2q7$j4m1kftPQ@||;r^qSGXo2Z^r&Kb;E`!?a-M*?M@FMn%7`}nKgKTs{NP%AG}+w#4rfW~+A zx&MTK);QoC)3U$a;LM3hbpI-TG@rJjR+jap?Qr|xMM&>!!@qSveG39t{u8jjz{nsVtw6ywHKKh`Zg^8w>?@@GOm_zN6|yY)p$I zNFnmIO}EWRo@6>Bl1}dr$k)$w3P45mq&}N`8=Pnz5OZo5$s8me?KyMef_22^-i*&&R5KK4p^$*h2q&c04;0H+}r^kETx{<*# zhgYvwo$BjHkixpVV6xM*LS|$9t&Y}+(%9cmV+mj-cv;Ga@4$$!ff0Ebu-+28+}qQh ztMHwXCYhOduim5ji+Zi{19wu-(8tA;T_WPz_b4#t0@RGwcDBNjaXHINieB9yuLSj{ zeKcCr~ zrBm0Thv-e5P{gh@je5dnhVvK#021CEHLW8%rPR$|-{ke^Ex1>vvsz_HZf^x**>QEl zF_t_YXLFiGovs1yZ$D6TA*ROq)V;#rgRzmcVZ*vAAnNi4em}J@KafE(m+)|pMGs%a z6{>5(@-5UvBH;5uj@=XE6ZD_!`BDVm?1$m&eO+k zw>Wlpe#mX}abtZt?lI?(+hyG5_!o};a&YvzakH&6Sb$zy{-iYu2w{dX!VB(>P*`@5>rtqt#m;a*RldS;+}=Tw&`*wBGN<9 z-I(quJysw;=CJa2)DKn~_LcUj+MNby@e?4wCl5SUmM?MR%kJvA?800O2@?-+;fwCM z1$1t3f%ylw74t7MN*An-Mv+DdbbSmc8z$)L2UC5vZSoo&b{Y0%S-uL(%g|Tg+DG4J z+IrM9)z?mAau*_WZ3i;-jQ0<;=6immZ#RcAiP4FSIVo?gI170$;HH?}bs+L@AMu>K zJDg%JO>bxGn1HYt(0G=G>nah+T^+l7<+?ZEUU-mJ_b(|( zQ-$WK&hy21HsPxd$AJ_5=X51&rY+*X%P@vJU|j_cjvS3;;=G=M6f^_dCa1@8zP#2q z@LP*+pQUDW3gpa-p9W{88{lZIHC z z8$dP8ZJ7JUwWG4uFW1#ow>Dq6p9$RdpdxR!o)LcH>zpb5NnYt2vj9OOHu>mLBa0^<}!CSmeg$(a**8v<}I2W zG7w1-)dTts^saqovsKgZ5F*3mg)zKreer2=q~a>dQ)WU;((T*g>+)E|m7dt*g{`^Q z`t~WSSk6r~=q&?s|IwY2ylvO(V7NWZy&}iY?@c>;=NdHRA_*Cf@Oi>Mu;_Q|x>JA- z?4gd-D6urel!~T<2c=!IL(K#`F*93lclG#$dxHZKP>pkC^$cBNd-|H z9i>)*>1>~aX}Ov$orTp+=k7Zw`Z@Il@_RdKdw!EMApdA#f6V}x!R4n!H_WxkZJRV{ z-IN~5nLo}jeqMU#EJE9&3Hz)zeOzUqk&IW^pM~gBBpH+NEiSFFmV$tCodEg+yD$io z=Y9R;>P08HzJBVKUDmt)PCtLmEsUyI`&q z9FmP8%>+>=>R7}!4QFr9ed0FpA00^d3!jQP`n)sJ`ns@Vck!^RuNI7L;)3#($4p7e zztf{wvF(efnV{=luPM?~Sg(Jl&};=@E7Nz^jh=QK`_`0*@Wcyh*`TW$E56zk8H~ekozj1+R1e6xvp1U> zwBPTchSH7b!Jal_ky_iwpIoOp1&8ezdpbNiI>B5=aG}ew0_%~Lg5OBr+r5*$Z2KNO zux>cu?%}pF!s#A*^V_NcM0xnwH);j{(4||N{6zMk%)@gj3ArvcAWf6D%f%IyB;VXT ze@kTIT_7e?rbIxx0nZe-YQ}q zab{9TNOlstEVXS^OM!p+qVHy=j6l3OYAsA?)|ee-eoz5-w@g{M*e%Svnl#2&Z7lU! zBPhh_Q)O9UxB)Ax%dFAq)k2+lP%E#&)Oup}rF56f=gLc6;3hy#wYH`8MJKK;-!hmq z#Xjp5ckIWOGZL07R*lJu-!PsyCg5lIa)pp{7w=XciB*j zXlj{so^`Kl%zMLnnp?o^ZptM?o74-U2OxBKrQqk+s$rkB2F_h*Yzc>c{N1s6X~cZE zq8CXTMZpa{P4<5yB+QF#lv*0i^T1SO^hJI7(5pV|jXLH(%60kl`>Cpdv)rB{EQlT} zkkF}F&;ZJ|Irr&zQuQ7_rsq2)v%%Hj4lG>63f;y^Mh?eahBB~wpdU&_%lnx0wIekz z_-Yov379dfUH7y_)ML=j)<+8%$qV2%^i}dU1b(@a2}HpyyfU?{+q`YN`%Z3c0vRTx zAm30dQxmm%CpBt)*rjD`ek^pD9Z}k#Fl#CW@;FCx6iKUYU?8(>=*&V`22AM@*bTP5!f~ zE9CAq>Vy18k=?>gQ=UqG$D4UUq4V7dls0}CsuYE0E*v3t#%V$L+Y}Y=!^yfXDRjFH za7W?ZWKqTQCYN1`kwTsm*%`(Hw?|gv*fiNou0b+ZX)H^RWE2ZHB2h8^pZvp(UKV;> z;pY2er6sM>A||7TDl&wa>rpiiE%*uSj?TWF!zD)4n%*C&ErFkPP!}rN6w{qXVx7W( zkck+=J#@$x#=@m`nsquKb-U>#Y*PcV;Dn*N#f!LTAEL=?bx_f@Z3SEne2Z=zebbTJ za~gXSh_*m#6u94gTJ|Utn^RnZ)-XBXSvK*w*__&Puj5`V%JU)p*d@JpW=6W){nhH< z=A?XJ4H?jTNr@BDo|7H-tc%R@8muwWU+lVDHAw}LcWJLhdeh0X$!Awi6lbSHN2B5< zG=?8Z-^1oU8YKf5gG@Nfe9@(Dde2zwyZAb<)mMuiRAqdo`QuxX+U2=f90*hvxsn2U z6`r;$UZ8$+Ft1YMg>UpuNpZS#R~?*wnltTCx*lv=A?#;&kS?{psx>8P{PZrV{dnN( zOj0P$-XMM^Zy}P98I{34)l*q&(jnCyUwi)`Gb;0n`16?1%#ZHGs)h)4h_Anta0k)j zJN(#dK%oBYB_nZ73&W;&JuxgZS8`dNMpNfy;a((G-qhpseX1*JYS6Y=ebL_P0Mi?iTjH_DW;X|Izr@p*5mjjEKApTN3TS868>p(mqc6SEFP7f%QrB3cFxtcWB_b@{ zFC3{q|E zxnm#uO)b6TEc|%1Q_YH4N`*UX`Ka2wU|sJmkMwmZ^rk}O&HC<<7apDoHQ)C9mnCb{ zS#S$1^43kmG0W-e%?iu6r||AV=8w~O)JNa13Vym5PG4v<>N-@>%Wf@LU+%0b6QiEA z?vb)&^xLHawQLSJbCDX@W6=uG%JZ?WvA68#D#FwBEo*Z1+Qqg-hvbh~tq$Yt9saMF8$ z802d@y#$^#;ao35-&GVsw0u}g)U^CijZFro{W?<|8Zw6AgjNdZV6yDO@>Gqpk!|;) z1-_ZklZVbpI@*P{YXR4$L&fV)Vl;u#l97=+{7e+M!p3dgz8PyOoCg@VVCLJo$qX1E z(nU}a(5bPLeSA2A!qv$sEu?-;d(czybUFjTbk;}0D=$I6(BXMvB3H+K6?X9+BfX|6 zld3dFW;LbhjikIuB5xvtCCUT6O6sjv5uiXq9$Ra%rtA$3DO}FpGG(I#iqcu!o|{Q4 zqUhPj@YEmk^Q3{>qzXgXu(i$9d5pLPk1VnCWgbHn-#%yqk}pZ}0%sbkg&oULM_PA5 zM48v>d$c6`wkEUBNkb`+^_nMSXmBrk++ji zZ2=uVUiaBvme-F(WOHvay?HWp&rVStetImVReEvPc(8>|heHNE>#cT5b-ii&cH=yGj6#U zi$c>@jTF?jQC_Xt^f;l-_~crXBo8_neMhX6O){QPYbyh2{5FHfW}CV@VO8RY?z>6?SI?729b zz2n_xHcG#dPnP*=yUYj`ZmlfC)+`{SlLt#Q57sr*xb8J?Dxnkbg&rWU zNgo@aBQ9$x-)<_Y;HkauHG22e*uvJzb}yN?S&?ULSJEH2*_{$TH5@@3A`}Q{KR)Yrj6OnSY!;PuS)A0WvAe0mbgZhxzfm&^~SZf7iiUo8`qdR7HQ=@ zVgc(#r;Od)S*d>=ig8n{Tdm-hZZkto{dvUAJkxlN{G)DS-}g2V=R17J!ly<%0YmGX z&-qR0t@uRray#%@it7o-`8Byn3niYXE9*zD9~nMhE&*FSH9}ORD>Mz$4ppu1F`9(w zz1=eOS`O0QF+M||cKl+*Wnnb*dN8FHP=HXhsgb|6!8F z^RLXa95C=c;=qlAX1F>&i*u7NP8vP8Ecn|{?24-vx1Vp*Dz-P2e-w6V3B`0P{NgMN zjI$jYa#u(7LXH)~Fm6h97q@(R79PJ2EpxjS5FJ!n^$HSX7djUII`ddXf8rrvvhzqh zN~+X+!tzSt>06UgdhdF(hD`h2mqzJ#8)oy%P3QwNVO}ITyt$FE*{IvM(>*_iNr@d! z_Q*wgnLP!5D)r-TYnm5yNv)eOWu0J3M_6wTnq*&~`b=wB<79f8f>PU^sC-Qmd|@7! zC;?RRB&mKrtR-pfH@UaacjMZNg)6s$1c`2nCcN4A0p_aN(GW<|swJlq-${L09>|&L zxuNB8cxU6aW~xIRagtn%*Xp?Oq_rw~>&&jK_d9Imwh#Z#h?~OV`s588HtFeL;+fAJ zQKCDJC7s`^5$UAmb2QYvDj{veWp z+u*-mfQL@QN_(Gg6tC;_qBVUy!lN|ZsrVs?Yn1Hc`4>2Ul^>!_4Fnj$LibtD07X*2 z%1I5Odg^d&Ve*ek*PkU|x(;xDR6X#^{}SpiF)f5ob24Xn0RrGOX!g$#6!1>}S%8C& zuqAu`AO82_(;-w0*z}7boshEsJOIE{Pk_?@Kk`~F@`)Bqd6&20AL}P~VS8&4Cye!i zrdRVb0u}FA%!jDV^K3jlH}1X_H5+E&&wo4@=bTzJvg&onFX-RV=CXK@(FP;GBWmWh znPTZUa6iakvZ2qM;Jo3*c2sOgGrQ5zx1a4juC1Beh5r2g+<2q4!~bdT+~1PQ+CDzn zGBROl|U%r!-NShRn*6nXxkSKxw9q2V_(fL>Q+@D@`8L)Kp|D)5<&)X&w+P z@st6kc_0HEP!UBDQ6!EJjr0EWzVAQqT+jY-Uwf^!_kFGX+4sHI{arUn#T^po2Vo5K zFCw)>t%jPUi6rfQ-V*M9SozM~WH-S%?XE+v-K8AFPd_N`0F`J;sCWHo8GRzXD z#@JhZJQpv+KjagJ0v%z%d{@Tds4dfGrET#ldu~WIXID6IrU5C*Y#NUSPc)83(M*YD%SK1N@paA|B!hD@3}>sgn^`cC{Wl_|T|%-(Nt>gIi< zbGv~Jir>{5w%n@O7vDBX2|I`I!@m8l4(Aylw8+f-Gfp?;`WH`#Bu6rG+oXX<8lHxZ z;YcxqNXcU3Ie+V#=!)l%ugg$$q?jj4cVVO0Nb$6JZZ47TWz`tp+-hlA9e1Z4B9alB zW@hZWI*my#@#^<9fA7}Fu|_w^JJ9WJPkFnWi1expTce67gUhYmC6XzXVuZ2_(C5C! zFMY0>TQEY{0Z?UObL&_Mw6o;nnUHadI%KkNw+V2p2#S;)6<0;717km?Mox5|WP3O` zqaE%9JS-|h|LT$2Nyp1RH*nl-=x&mw6S`}V4tHE3%86+G6%tmxGz9Oq<=|RV_Hh1b z`3deAG)G>5X?6j-D^uTRhi+$Jq(t62`_z+FhTpDQjaiVD_EA?oWvESI=;qS+<%afY zoxNhdNO38)C%&RLJD-FMi)!LMYDIj>O!&mZ;k0!C59b2s?}=x1O}A;QBNmQE@I$B& z*8*{HMnHrsD!xfIMHeqQFjC{ou&=Mhw+$){$xzYSx) z3_UsPH%nzC;;^Vf7PkkbLxt=b-FmvT(VOsjB8&G^)?U*f5&P5Do-z6ajR-Jl`%2DT z9=W>rD~+{OEA4PwXkSaDaCU$n8h>*=rp&z#)-?4rb;Ux2)2$6Q$}(LXgTMC{-C#*a z2g%RsXQC{WZ5>;(J6=%0TaZ_RlUXieCEvr`RGWR$$%wjs^vTCcD;ad@f%eU;!gl6Tov!{}iwrMy7H3R{s4h!cDst~oRGWlE3O+97-49l|)i%NQPDb(dmw^u-D zda|$${Yn^%k@wFA9~6B|Vv|UcMnOz1-`^algOL*nk*ygu&-?B~_#d<;j_AaRkF^(c zAHaDi1dwbV#LWz&>FMsSq?uG5z`*%<@%Y^puaCq&Ixu<5fngRrZK-@^&<1w~K7HB8 zZ!%G)ty~@w^4X7e$Z@+)THS?myfAdTAimQ187E+>6u3_G)I7dB1yt9)ly ze_7R%%5UWWtnf)c^F_D%yx4(1Zl=vg%p_&#Q9c#7)br9s3Qc9$v^A9MzQdl~OOAEF z3rSp$7G&0SHZE)S`s`UQpx??4$d36oM;_^oY4oB54ipH2k4fqZwmf!-H6NUf1ngT zcs_VA>p0?To1hoIUC$G9aGWuS1c>u+ZWK0!*IHUv#}$8%Vx+D7%Wl>bF)d1lymc?I z%p@TPx5*A|)9EX+7k!ZUyi#-AfNA&-qCF(64TEh}Y;1*;9M?HxQMI80xbeKEGcDX7 z;W}7JOGydUD=;=kN-86S9Vgb46kx0&1S>QLiXJH^@szTsiJ@f^w9>cjJtx*z%rT_2 zl+M0TxiVFw-~bruYG1B@jF<83{Dm0M;cZ)gB;P5WXAksF_`E_p*`XEd#BYkoHeTvp z>}>!Coxk%S1Nie1^a5Cf8zFIr{FCWp0h53C-Lqc#E7)BfxQ8I4g1Yo6ircYhKHZx| za_cR1bxb(;acgS-S`mS@)a+)5Q8bG|DWA5&`rPve9G&c7w?RqszO4Kg z1T}u=;?$#v`Q}LO9|vslY<|Q}OoqOi*3DB2mw#e-NH@T_xqveIDjj87I%W#?1-CpL zAMicj-O7>h#S$8@GoZHh;Oh5FFuYeSUOM$BEP?`-0JAigm1vc`X>M3U$6OHenf|yS zEkInc7A~j92>MV|wA7im6(9GWhm)~{MkTFX0ks-!M$@rWnbSRwVNZ>6h^cSQw#R7d z!Qq^>TW*<9Y6h8SFr)8KS$Pw>I2eNxh`4=9)xEk$!TwqyJ7b22MnWVl# zTG(UtRCLG&)ZDej+B1Aw-x$YbO;z6BHTt6p4AZQW{`_-o8dR}(P1wCOPz~JtHEM&f zSrN~K={zef!IO)bi5ASgMfy2xiK#)WZO9I2n|hPKfSlBUrPeZ?I~Fzu%h>wb2mL(K zBzv%lS6l^3d-|Y_cWm<+v)i(sni$cIB8n2}ztI=LJW}{<6c|sLvpO=iOYF4n>i))f zd}@iU>Hs?$hVuWE#0%hAyJGCURQ6cwOsWr5hccQFNfNb*NQ@T(Hzr2tWn=knUwweI zgz7AODWUr(rUbsIaI(v+JdyLxY~g0#Ftr1K($HtOS{WOG^0%pJh9_LTD=t&AG*|f? z{0{rvbbx$;4zs*@f6GnHvROhm1eU#W)%9vf32Tq|qd&XUxp$)$vkT1PhBUcv3X;F-PiPQPF}IA;DhMTPPqid-*4-hI_ljJq8dzd* z$9*(pS#-=pyM*R|d14Cx4-5Ru3JSIYx5H;bpsa zwRtGrHv68H$6uq-=X!vlbnP@n?dJ7kFElek@qk&9+^Hx<8Xj%3BoTHobU_m%vDY%m z%hgXVxu;O3xkK=|p@1YuWf26rw~rX9bADc7;BZz?d}4AS22hX^=MD>Ht7|vZhck_% z(hN5`5;qIttNhg~vqWHvRc4Wg=7_k}XOByw1HtFQc;X1#pa{!l5W6>k93Lfg4nc20 zR2`go8Of!UmzFFfqq!&VkdTp-xxLR117#;VIso$DQac1NW?mLH^UQcb3l-y82(PKXXU)rNi9H(R>)tAAXBFkXWbI`B zxw#>!6RxPG?h6aDiM`3g%dl{uj^)uVZGs(VW7Nd8P5ItSu(j(Jxs@X%XHPwDO@`h@ za2~4j%E^ZGybGs(K?-Jmjzjx=A985;|I>D69&N9YcJ$wx`QJg|>KWAf>GjiV t!nIo{{hyKF&Tq7lFsx{_J>Qq{~IZWtaShY From bb9021c6c8fca3653dd1668dfd15e47f9816ea99 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Wed, 17 Jul 2024 16:09:07 -0700 Subject: [PATCH 100/198] Update README with swift-foundation recore --- README.md | 70 +++++++++++++++++++++++++++---------------------------- 1 file changed, 34 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 6f086c6738..b760fea76d 100644 --- a/README.md +++ b/README.md @@ -4,26 +4,49 @@ The Foundation framework defines a base layer of functionality that is required It is designed with these goals in mind: -* Provide a small set of basic utility classes. +* Provide a small set of basic utility classes and data structures. * Make software development easier by introducing consistent conventions. * Support internationalization and localization, to make software accessible to users around the world. * Provide a level of OS independence, to enhance portability. There is more information on the Foundation framework [here](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/ObjC_classic/). -This project, `swift-corelibs-foundation`, provides an implementation of the Foundation API for platforms where there is no Objective-C runtime. On macOS, iOS, and other Apple platforms, apps should use the Foundation that comes with the operating system. Our goal is for the API in this project to match the OS-provided Foundation and abstract away the exact underlying platform as much as possible. +This project, `swift-corelibs-foundation`, provides an compatibility implementation of the Foundation API for platforms where there is no Objective-C runtime. On macOS, iOS, and other Apple platforms, apps should use the Foundation that comes with the operating system. -## Common API +## Project Navigator -Our primary goal is to achieve implementation parity with Foundation on Apple platforms. This will help to enable the overall Swift goal of **portability**. +Foundation builds in different configurations and is composed of several projects. -Therefore, we are not looking to make major API changes to the library that do not correspond with changes made to Foundation on Apple platforms. However, there are some areas where API changes are unavoidable. In these cases, documentation on the method will provide additional detail of the reason for the difference. +```mermaid + graph TD; + FF[Foundation.framework]-->SF + subgraph GitHub + SCLF[swift-corelibs-foundation]-->SF + SF[swift-foundation]-->FICU[swift-foundation-icu] + SF-->SC[swift-collections] + end +``` + +### Swift Foundation + +A shared library shipped in the Swift toolchain, written in Swift. It provides the core implementation of many key types, including `URL`, `Data`, `JSONDecoder`, `Locale`, `Calendar`, and more in the `FoundationEssentials` and `FoundationInternationalization` modules. Its source code is shared across all platforms. + +_swift-foundation_ depends on a limited set of packages, primarily [swift-collections](http://github.com/apple/swift-collections) and [swift-syntax](http://github.com/apple/swift-syntax). + +### Swift Corelibs Foundation -For more information on those APIs and the overall design of Foundation, please see [our design document](Docs/Design.md). +A shared library shipped in the Swift toolchain. It provides compatibility API for clients that need pre-Swift API from Foundation. It is written in Swift and C. It provides, among other types, `NSObject`, class-based data structures, `NSFormatter`, and `NSKeyedArchiver`. It re-exports the `FoundationEssentials` and `FoundationInternationalization` modules, allowing compatibility for source written before the introduction of the _swift-foundation_ project. As these implementations are distinct from those written in Objective-C, the compatibility is best-effort only. -## Current Status +_swift-corelibs-foundation_ builds for non-Darwin platforms only. It installs the `Foundation` umbrella module, `FoundationXML`, and `FoundationNetworking`. + +### Foundation ICU + +A private library for Foundation, wrapping ICU. Using a standard version of ICU provides stability in the behavior of our internationalization API, and consistency with the latest releases on Darwin platforms. It is imported from the `FoundationInternationalization` module only. Clients that do not need API that relies upon the data provided by ICU can import `FoundationEssentials` instead. + +### Foundation Framework + +A [framework](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Frameworks.html) built into macOS, iOS, and all other Darwin platforms. It is written in a combination of C, Objective-C, and Swift. The Foundation framework compiles the sources from _swift-foundation_ into its binary and provides one `Foundation` module that contains all features. -See our [status page](Docs/Status.md) for a detailed list of what features are currently implemented. ## Using Foundation @@ -45,35 +68,10 @@ You will want to use the [Swift Package Manager](https://swift.org/package-manag ## Working on Foundation -For information on how to build Foundation, please see [Getting Started](Docs/GettingStarted.md). If you would like, please consult our [status page](Docs/Status.md) to see where you can make the biggest impact, and once you're ready to make changes of your own, check out our [information on contributing](CONTRIBUTING.md). - -## FAQ - -#### Why include Foundation on Linux? - -We believe that the Swift standard library should remain small and laser-focused on providing support for language primitives. The Foundation framework has the flexibility to include higher-level concepts and to build on top of the standard library, much in the same way that it builds upon the C standard library and Objective-C runtime on Darwin platforms. - -#### Why include NSString, NSDictionary, NSArray, and NSSet? Aren't those already provided by the standard library? - -There are several reasons why these types are useful in Swift as distinct types from the ones in the standard library: - -* They provide reference semantics instead of value semantics, which is a useful tool to have in the toolbox. -* They can be subclassed to specialize behavior while maintaining the same interface for the client. -* They exist in archives, and we wish to maintain as much forward and backward compatibility with persistence formats as is possible. -* They are the backing for almost all Swift `Array`, `Dictionary`, and `Set` objects that you receive from frameworks implemented in Objective-C on Darwin platforms. This may be considered an implementation detail, but it leaks into client code in many ways. We want to provide them here so that your code will remain portable. - -#### How do we decide if something belongs in the standard library or Foundation? - -In general, the dividing line should be drawn in overlapping area of what people consider the language and what people consider to be a library feature. - -For example, `Optional` is a type provided by the standard library. However, the compiler understands the concept to provide support for things like optional-chaining syntax. The compiler also has syntax for creating instances of type `Array` and `Dictionary`. - -On the other hand, the compiler has no built-in support for types like `URL`. `URL` also ties into more complex functionality like basic networking support. Therefore this type is more appropriate for Foundation. - -#### Why not make the existing Objective-C implementation of Foundation open source? +swift-corelibs-foundation builds as a standalone project using Swift Package Manager. Simply use `swift build` in the root of the checkout to build the project. -Foundation on Darwin is written primarily in Objective-C, and the Objective-C runtime is not part of the Swift open source project. CoreFoundation, however, is a portable C library and does not require the Objective-C runtime. It contains much of the behavior that is exposed via the Foundation API. Therefore, it is used on all platforms including Linux. +swift-corelibs-foundation also builds as part of the toolchain for non-Darwin platforms. Instructions on building the toolchain are available in the [Swift project](https://github.com/swiftlang/swift?tab=readme-ov-file#building). -#### How do I contribute? +## Contributions We welcome contributions to Foundation! Please see the [known issues](Docs/Issues.md) page if you are looking for an area where we need help. We are also standing by on the [mailing lists](https://swift.org/community/#communication) to answer questions about what is most important to do and what we will accept into the project. From fa2b3ad09d4d3b4141efa9bc3e5291231208c137 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Wed, 24 Jul 2024 12:12:49 -0700 Subject: [PATCH 101/198] Add environment variable to specify include path for dispatch (#5025) --- Package.swift | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Package.swift b/Package.swift index 3fa7f28a91..3d99d6082e 100644 --- a/Package.swift +++ b/Package.swift @@ -3,6 +3,19 @@ import PackageDescription +var dispatchIncludeFlags: CSetting +if let environmentPath = Context.environment["DISPATCH_INCLUDE_PATH"] { + dispatchIncludeFlags = .unsafeFlags([ + "-I\(environmentPath)", + "-I\(environmentPath)/Block" + ]) +} else { + dispatchIncludeFlags = .unsafeFlags([ + "-I/usr/lib/swift", + "-I/usr/lib/swift/Block" + ], .when(platforms: [.linux, .android])) +} + let coreFoundationBuildSettings: [CSetting] = [ .headerSearchPath("internalInclude"), .define("DEBUG", .when(configuration: .debug)), @@ -30,8 +43,7 @@ let coreFoundationBuildSettings: [CSetting] = [ "\(Context.packageDirectory)/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h", // /EHsc for Windows ]), - .unsafeFlags(["-I/usr/lib/swift"], .when(platforms: [.linux, .android])), // dispatch - .unsafeFlags(["-I/usr/lib/swift/Block"], .when(platforms: [.linux, .android])) // Block.h + dispatchIncludeFlags ] // For _CFURLSessionInterface, _CFXMLInterface @@ -59,8 +71,7 @@ let interfaceBuildSettings: [CSetting] = [ "-fcf-runtime-abi=swift" // /EHsc for Windows ]), - .unsafeFlags(["-I/usr/lib/swift"], .when(platforms: [.linux, .android])), // dispatch - .unsafeFlags(["-I/usr/lib/swift/Block"], .when(platforms: [.linux, .android])) // Block.h + dispatchIncludeFlags ] let swiftBuildSettings: [SwiftSetting] = [ From af244645c3a883daff9f8631e6163fdefa574718 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 25 Jul 2024 07:02:48 -0700 Subject: [PATCH 102/198] Adopt Swift 6 and audit for Sendable (#5000) * Adopt Sendable, fix Sendable related warnings, and fix other warnings in both Swift and C code * Upgrade to Swift 6 - Fix associated warnings * Remove Sendable annotation from NSAffineTransform * Cleanup some unused types in Utilities and use a Mutex instead of NSLock * Remove some warnings for Windows builds * Add version 6 and warning flags to CMake file * Adapt to some changes in how unchecked Sendable conformance is declared * Update swift-foundation dependency * Update locking strategy for DateFormatter and NumberFormatter - keep the CF type inside the lock * Add annotations for Core and CFSocketRef * Resolve a warning in TestDecimal * Use noncopyable State type for DateFormatter and NumberFormatter * Mark DirectoryEnumerator as non-Sendable * Work around compiler crashes when using ~Copyable types * Clarify comment of _nonSendable with a message explaining the remaining warning --- CMakeLists.txt | 6 +- Package.swift | 44 +- Sources/CoreFoundation/CFBundle_Resources.c | 4 +- Sources/CoreFoundation/CFDate.c | 3 + Sources/CoreFoundation/CFNumber.c | 3 + Sources/CoreFoundation/CFPlatform.c | 1 + Sources/CoreFoundation/CFPreferences.c | 6 + Sources/CoreFoundation/CFPropertyList.c | 4 +- .../CFRelativeDateTimeFormatter.c | 2 +- Sources/CoreFoundation/CFRuntime.c | 4 + .../include/ForSwiftFoundationOnly.h | 11 +- Sources/Foundation/AffineTransform.swift | 31 +- Sources/Foundation/Boxing.swift | 197 +- Sources/Foundation/Bridging.swift | 2 +- Sources/Foundation/Bundle.swift | 2 +- Sources/Foundation/ByteCountFormatter.swift | 7 +- Sources/Foundation/CharacterSet.swift | 176 +- .../Foundation/DateComponentsFormatter.swift | 6 +- Sources/Foundation/DateFormatter.swift | 1070 +++++---- .../Foundation/DateIntervalFormatter.swift | 16 +- .../DispatchData+DataProtocol.swift | 3 + Sources/Foundation/EnergyFormatter.swift | 5 +- Sources/Foundation/FileHandle.swift | 70 +- Sources/Foundation/FileManager+POSIX.swift | 10 +- Sources/Foundation/FileManager+Win32.swift | 6 +- Sources/Foundation/FileManager.swift | 47 +- Sources/Foundation/Formatter.swift | 5 +- Sources/Foundation/Host.swift | 11 +- Sources/Foundation/ISO8601DateFormatter.swift | 5 +- Sources/Foundation/IndexSet.swift | 11 +- Sources/Foundation/JSONSerialization.swift | 7 +- Sources/Foundation/LengthFormatter.swift | 36 +- Sources/Foundation/MassFormatter.swift | 30 +- Sources/Foundation/Measurement.swift | 2 + Sources/Foundation/MeasurementFormatter.swift | 5 +- Sources/Foundation/Morphology.swift | 12 +- Sources/Foundation/NSArray.swift | 42 +- Sources/Foundation/NSAttributedString.swift | 8 +- Sources/Foundation/NSCFBoolean.swift | 2 +- Sources/Foundation/NSCFCharacterSet.swift | 3 +- Sources/Foundation/NSCache.swift | 3 + Sources/Foundation/NSCalendar.swift | 9 +- Sources/Foundation/NSCharacterSet.swift | 3 + Sources/Foundation/NSCoder.swift | 5 +- .../Foundation/NSComparisonPredicate.swift | 6 +- Sources/Foundation/NSCompoundPredicate.swift | 2 +- Sources/Foundation/NSConcreteValue.swift | 17 +- Sources/Foundation/NSData.swift | 7 + Sources/Foundation/NSDate.swift | 28 +- Sources/Foundation/NSDateComponents.swift | 5 +- Sources/Foundation/NSDecimalNumber.swift | 12 +- Sources/Foundation/NSDictionary.swift | 22 +- Sources/Foundation/NSEnumerator.swift | 4 + Sources/Foundation/NSError.swift | 41 +- Sources/Foundation/NSExpression.swift | 6 +- Sources/Foundation/NSIndexPath.swift | 2 + Sources/Foundation/NSIndexSet.swift | 18 +- Sources/Foundation/NSKeyedArchiver.swift | 21 +- .../Foundation/NSKeyedArchiverHelpers.swift | 12 +- Sources/Foundation/NSKeyedUnarchiver.swift | 19 +- Sources/Foundation/NSLocale.swift | 67 +- Sources/Foundation/NSLock.swift | 21 + Sources/Foundation/NSMeasurement.swift | 3 + Sources/Foundation/NSNotification.swift | 15 +- Sources/Foundation/NSNull.swift | 2 +- Sources/Foundation/NSNumber.swift | 19 +- Sources/Foundation/NSObjCRuntime.swift | 17 +- Sources/Foundation/NSObject.swift | 6 +- Sources/Foundation/NSOrderedSet.swift | 4 + Sources/Foundation/NSPathUtilities.swift | 4 +- .../Foundation/NSPersonNameComponents.swift | 103 +- Sources/Foundation/NSPredicate.swift | 14 +- Sources/Foundation/NSRange.swift | 2 +- Sources/Foundation/NSRegularExpression.swift | 25 +- Sources/Foundation/NSSet.swift | 10 +- Sources/Foundation/NSSortDescriptor.swift | 3 + Sources/Foundation/NSSpecialValue.swift | 4 +- Sources/Foundation/NSString.swift | 143 +- Sources/Foundation/NSStringAPI.swift | 34 +- Sources/Foundation/NSSwiftRuntime.swift | 81 +- Sources/Foundation/NSTextCheckingResult.swift | 36 +- Sources/Foundation/NSTimeZone.swift | 3 + Sources/Foundation/NSURL.swift | 66 +- Sources/Foundation/NSURLComponents.swift | 2 + Sources/Foundation/NSURLQueryItem.swift | 6 +- Sources/Foundation/NSUUID.swift | 2 +- Sources/Foundation/NSValue.swift | 6 +- Sources/Foundation/Notification.swift | 2 + Sources/Foundation/NotificationQueue.swift | 11 +- Sources/Foundation/NumberFormatter.swift | 2064 ++++++++++------- Sources/Foundation/Operation.swift | 49 +- Sources/Foundation/PersonNameComponents.swift | 114 +- .../PersonNameComponentsFormatter.swift | 7 +- Sources/Foundation/Port.swift | 54 +- Sources/Foundation/PortMessage.swift | 2 + Sources/Foundation/Process.swift | 34 +- Sources/Foundation/Progress.swift | 24 +- .../PropertyListSerialization.swift | 5 +- Sources/Foundation/RunLoop.swift | 72 +- Sources/Foundation/Scanner.swift | 2 + Sources/Foundation/ScannerAPI.swift | 2 +- Sources/Foundation/Stream.swift | 28 +- Sources/Foundation/Thread.swift | 88 +- Sources/Foundation/Timer.swift | 13 +- Sources/Foundation/URL.swift | 13 +- Sources/Foundation/URLResourceKey.swift | 8 +- Sources/Foundation/Unit.swift | 61 +- Sources/Foundation/UserDefaults.swift | 31 +- Sources/FoundationNetworking/Boxing.swift | 190 +- Sources/FoundationNetworking/HTTPCookie.swift | 21 +- .../HTTPCookieStorage.swift | 14 +- .../FoundationNetworking/NSURLRequest.swift | 7 +- .../URLAuthenticationChallenge.swift | 6 +- Sources/FoundationNetworking/URLCache.swift | 23 +- .../FoundationNetworking/URLCredential.swift | 23 +- .../URLCredentialStorage.swift | 10 +- .../URLProtectionSpace.swift | 11 +- .../FoundationNetworking/URLProtocol.swift | 54 +- Sources/FoundationNetworking/URLRequest.swift | 2 +- .../FoundationNetworking/URLResponse.swift | 12 +- .../URLSession/Configuration.swift | 5 +- .../URLSession/FTP/FTPURLProtocol.swift | 2 +- .../URLSession/HTTP/HTTPURLProtocol.swift | 36 +- .../URLSession/Message.swift | 3 +- .../URLSession/NativeProtocol.swift | 23 +- .../URLSession/NetworkingSpecific.swift | 11 +- .../URLSession/TaskRegistry.swift | 4 +- .../URLSession/URLSession.swift | 66 +- .../URLSession/URLSessionConfiguration.swift | 4 +- .../URLSession/URLSessionDelegate.swift | 36 +- .../URLSession/URLSessionTask.swift | 71 +- .../URLSession/URLSessionTaskMetrics.swift | 12 +- .../URLSession/libcurl/EasyHandle.swift | 19 +- .../URLSession/libcurl/MultiHandle.swift | 16 +- Sources/FoundationXML/CFAccess.swift | 2 +- Sources/FoundationXML/XMLDTDNode.swift | 2 +- Sources/FoundationXML/XMLDocument.swift | 2 +- Sources/FoundationXML/XMLNode.swift | 15 +- Sources/FoundationXML/XMLParser.swift | 7 +- Sources/XCTest/Private/PrintObserver.swift | 4 + Sources/XCTest/Private/SourceLocation.swift | 2 +- Sources/XCTest/Private/WaiterManager.swift | 2 +- .../XCTNSNotificationExpectation.swift | 2 +- .../XCTNSPredicateExpectation.swift | 5 +- .../Public/Asynchronous/XCTWaiter.swift | 13 +- .../XCTestCase+Asynchronous.swift | 3 +- .../Asynchronous/XCTestExpectation.swift | 2 +- .../Public/XCTestCase+Performance.swift | 2 +- Sources/XCTest/Public/XCTestCase.swift | 18 +- .../Public/XCTestObservationCenter.swift | 2 +- Sources/_CFXMLInterface/CFXMLInterface.c | 140 +- .../_CFXMLInterface/include/CFXMLInterface.h | 130 +- Tests/Foundation/FTPServer.swift | 41 +- Tests/Foundation/FixtureValues.swift | 88 +- Tests/Foundation/HTTPServer.swift | 25 +- Tests/Foundation/TestCalendar.swift | 2 - Tests/Foundation/TestDataURLProtocol.swift | 13 +- .../TestDateIntervalFormatter.swift | 2 +- Tests/Foundation/TestDecimal.swift | 3 +- Tests/Foundation/TestFileHandle.swift | 3 +- Tests/Foundation/TestFileManager.swift | 11 +- Tests/Foundation/TestHTTPCookieStorage.swift | 7 +- Tests/Foundation/TestJSONEncoder.swift | 16 +- Tests/Foundation/TestJSONSerialization.swift | 76 +- Tests/Foundation/TestMeasurement.swift | 4 +- Tests/Foundation/TestNSArray.swift | 4 + Tests/Foundation/TestNSDictionary.swift | 1 + Tests/Foundation/TestNSKeyedUnarchiver.swift | 2 +- Tests/Foundation/TestNSLocale.swift | 1 + Tests/Foundation/TestNSLock.swift | 12 +- .../Foundation/TestNSRegularExpression.swift | 6 +- Tests/Foundation/TestNotificationCenter.swift | 44 +- Tests/Foundation/TestNotificationQueue.swift | 58 +- Tests/Foundation/TestOperationQueue.swift | 176 +- Tests/Foundation/TestProcess.swift | 115 +- .../TestPropertyListSerialization.swift | 5 +- Tests/Foundation/TestRunLoop.swift | 20 +- Tests/Foundation/TestScanner.swift | 1 + Tests/Foundation/TestTimer.swift | 42 +- Tests/Foundation/TestURL.swift | 31 +- Tests/Foundation/TestURLSession.swift | 253 +- Tests/Foundation/TestURLSessionFTP.swift | 12 +- Tests/Foundation/TestUserDefaults.swift | 2 +- Tests/Foundation/TestXMLDocument.swift | 1 + Tests/Foundation/Utilities.swift | 29 - 185 files changed, 4206 insertions(+), 3473 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0a671aa2d2..011b2f108e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,6 +112,7 @@ list(APPEND _Foundation_common_build_flags "-Wno-unused-function" "-Wno-microsoft-enum-forward-reference" "-Wno-int-conversion" + "-Wno-switch" "-fblocks") if(NOT "${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC") @@ -139,8 +140,11 @@ endif() # Swift build flags (Foundation, FoundationNetworking, FoundationXML) set(_Foundation_swift_build_flags) list(APPEND _Foundation_swift_build_flags + "-swift-version 6" "-DDEPLOYMENT_RUNTIME_SWIFT" - "-DSWIFT_CORELIBS_FOUNDATION_HAS_THREADS") + "-DSWIFT_CORELIBS_FOUNDATION_HAS_THREADS" + "-Xfrontend" + "-require-explicit-sendable") if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") list(APPEND _Foundation_common_build_flags diff --git a/Package.swift b/Package.swift index 3d99d6082e..e7b2c5c3f2 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 5.9 +// swift-tools-version: 6.0 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription @@ -34,6 +34,7 @@ let coreFoundationBuildSettings: [CSetting] = [ "-Wno-unused-function", "-Wno-microsoft-enum-forward-reference", "-Wno-int-conversion", + "-Wno-switch", "-fconstant-cfstrings", "-fexceptions", // TODO: not on OpenBSD "-fdollars-in-identifiers", @@ -77,6 +78,11 @@ let interfaceBuildSettings: [CSetting] = [ let swiftBuildSettings: [SwiftSetting] = [ .define("DEPLOYMENT_RUNTIME_SWIFT"), .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS"), + .swiftLanguageVersion(.v6), + .unsafeFlags([ + "-Xfrontend", + "-require-explicit-sendable", + ]) ] var dependencies: [Package.Dependency] { @@ -96,7 +102,7 @@ var dependencies: [Package.Dependency] { from: "0.0.9"), .package( url: "https://github.com/apple/swift-foundation", - revision: "35d896ab47ab5e487cfce822fbe40d2b278c51d6") + revision: "d59046871c6b69a13595f18d334afa1553e0ba50") ] } } @@ -121,6 +127,9 @@ let package = Package( "CoreFoundation" ], path: "Sources/Foundation", + exclude: [ + "CMakeLists.txt" + ], swiftSettings: swiftBuildSettings ), .target( @@ -132,6 +141,9 @@ let package = Package( "_CFXMLInterface" ], path: "Sources/FoundationXML", + exclude: [ + "CMakeLists.txt" + ], swiftSettings: swiftBuildSettings ), .target( @@ -143,7 +155,10 @@ let package = Package( "_CFURLSessionInterface" ], path: "Sources/FoundationNetworking", - swiftSettings:swiftBuildSettings + exclude: [ + "CMakeLists.txt" + ], + swiftSettings: swiftBuildSettings ), .target( name: "CoreFoundation", @@ -151,7 +166,10 @@ let package = Package( .product(name: "_FoundationICU", package: "swift-foundation-icu"), ], path: "Sources/CoreFoundation", - exclude: ["BlockRuntime"], + exclude: [ + "BlockRuntime", + "CMakeLists.txt" + ], cSettings: coreFoundationBuildSettings ), .target( @@ -161,6 +179,9 @@ let package = Package( "Clibxml2", ], path: "Sources/_CFXMLInterface", + exclude: [ + "CMakeLists.txt" + ], cSettings: interfaceBuildSettings ), .target( @@ -170,6 +191,9 @@ let package = Package( "Clibcurl", ], path: "Sources/_CFURLSessionInterface", + exclude: [ + "CMakeLists.txt" + ], cSettings: interfaceBuildSettings ), .systemLibrary( @@ -192,6 +216,12 @@ let package = Package( name: "plutil", dependencies: [ "Foundation" + ], + exclude: [ + "CMakeLists.txt" + ], + swiftSettings: [ + .swiftLanguageVersion(.v6) ] ), .executableTarget( @@ -200,6 +230,9 @@ let package = Package( "Foundation", "FoundationXML", "FoundationNetworking" + ], + swiftSettings: [ + .swiftLanguageVersion(.v6) ] ), .target( @@ -226,7 +259,8 @@ let package = Package( .copy("Foundation/Resources") ], swiftSettings: [ - .define("NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT") + .define("NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT"), + .swiftLanguageVersion(.v6) ] ), ] diff --git a/Sources/CoreFoundation/CFBundle_Resources.c b/Sources/CoreFoundation/CFBundle_Resources.c index 013987f53a..f32ce6df65 100644 --- a/Sources/CoreFoundation/CFBundle_Resources.c +++ b/Sources/CoreFoundation/CFBundle_Resources.c @@ -294,9 +294,9 @@ CF_PRIVATE _CFBundleVersion _CFBundleGetBundleVersionForURL(CFURLRef url) { foundSupportFiles2 = true; } else if (fileNameLen == supportFilesDirectoryLength && CFStringCompareWithOptions(fileName, _CFBundleSupportFilesDirectoryName1, CFRangeMake(0, supportFilesDirectoryLength), kCFCompareCaseInsensitive) == kCFCompareEqualTo) { foundSupportFiles1 = true; - } else if (fileNameLen == wrapperDirLength && CFStringCompareWithOptions(fileName, _CFBundleWrapperDirectoryName, CFRangeMake(0, wrapperDirLength), kCFCompareEqualTo) == kCFCompareEqualTo) { + } else if (fileNameLen == wrapperDirLength && CFStringCompareWithOptions(fileName, _CFBundleWrapperDirectoryName, CFRangeMake(0, wrapperDirLength), 0) == kCFCompareEqualTo) { foundAppWrapperDirectory = true; - } else if (fileType == DT_LNK && fileNameLen == wrapperLinkLength && CFStringCompareWithOptions(fileName, _CFBundleWrapperLinkName, CFRangeMake(0, wrapperLinkLength), kCFCompareEqualTo) == kCFCompareEqualTo) { + } else if (fileType == DT_LNK && fileNameLen == wrapperLinkLength && CFStringCompareWithOptions(fileName, _CFBundleWrapperLinkName, CFRangeMake(0, wrapperLinkLength), 0) == kCFCompareEqualTo) { foundAppWrapperLink = true; } } else if (fileType == DT_UNKNOWN) { diff --git a/Sources/CoreFoundation/CFDate.c b/Sources/CoreFoundation/CFDate.c index 58957d1ca9..098aee24a3 100644 --- a/Sources/CoreFoundation/CFDate.c +++ b/Sources/CoreFoundation/CFDate.c @@ -48,8 +48,11 @@ double __CFTSRRate = 0.0; static double __CF1_TSRRate = 0.0; CF_PRIVATE uint64_t __CFTimeIntervalToTSR(CFTimeInterval ti) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wimplicit-const-int-float-conversion" if ((ti * __CFTSRRate) > INT64_MAX / 2) return (INT64_MAX / 2); return (uint64_t)(ti * __CFTSRRate); +#pragma GCC diagnostic pop } CF_PRIVATE CFTimeInterval __CFTSRToTimeInterval(uint64_t tsr) { diff --git a/Sources/CoreFoundation/CFNumber.c b/Sources/CoreFoundation/CFNumber.c index d5ea7fa55e..fca8f611e3 100644 --- a/Sources/CoreFoundation/CFNumber.c +++ b/Sources/CoreFoundation/CFNumber.c @@ -534,6 +534,8 @@ static Boolean __CFNumberGetValue(CFNumberRef number, CFNumberType type, void *v } } return true; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wimplicit-const-int-float-conversion" case kCFNumberSInt32Type: if (floatBit) { if (!storageBit) { @@ -564,6 +566,7 @@ static Boolean __CFNumberGetValue(CFNumberRef number, CFNumberType type, void *v } } return true; +#pragma GCC diagnostic pop case kCFNumberSInt128Type: if (floatBit) { if (!storageBit) { diff --git a/Sources/CoreFoundation/CFPlatform.c b/Sources/CoreFoundation/CFPlatform.c index f29378fff4..38d8c5278e 100644 --- a/Sources/CoreFoundation/CFPlatform.c +++ b/Sources/CoreFoundation/CFPlatform.c @@ -1814,6 +1814,7 @@ CF_CROSS_PLATFORM_EXPORT int _CFThreadSetName(_CFThreadRef thread, const char *_ #endif } +// `buf` must be null-terminated CF_CROSS_PLATFORM_EXPORT int _CFThreadGetName(char *buf, int length) { #if SWIFT_CORELIBS_FOUNDATION_HAS_THREADS #if TARGET_OS_MAC diff --git a/Sources/CoreFoundation/CFPreferences.c b/Sources/CoreFoundation/CFPreferences.c index 71e77a2381..053de44f13 100644 --- a/Sources/CoreFoundation/CFPreferences.c +++ b/Sources/CoreFoundation/CFPreferences.c @@ -234,14 +234,20 @@ CFDictionaryRef CFPreferencesCopyMultiple(CFArrayRef keysToFetch, CFStringRef ap __CFGenericValidateType(host, CFStringGetTypeID()); domain = _CFPreferencesStandardDomain(appName, user, host); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnonnull" if (!domain) return NULL; +#pragma GCC diagnostic pop if (!keysToFetch) { return _CFPreferencesDomainDeepCopyDictionary(domain); } else { __CFGenericValidateType(keysToFetch, CFArrayGetTypeID()); count = CFArrayGetCount(keysToFetch); result = CFDictionaryCreateMutable(CFGetAllocator(domain), count, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnonnull" if (!result) return NULL; +#pragma GCC diagnostic pop for (idx = 0; idx < count; idx ++) { CFStringRef key = (CFStringRef)CFArrayGetValueAtIndex(keysToFetch, idx); CFPropertyListRef value; diff --git a/Sources/CoreFoundation/CFPropertyList.c b/Sources/CoreFoundation/CFPropertyList.c index 9c95557545..b5a6919210 100644 --- a/Sources/CoreFoundation/CFPropertyList.c +++ b/Sources/CoreFoundation/CFPropertyList.c @@ -1587,6 +1587,8 @@ static Boolean parseDictTag(_CFXMLPlistParseInfo * _Nonnull pInfo, CFTypeRef * _ static Boolean parseDataTag(_CFXMLPlistParseInfo *pInfo, CFTypeRef *out) { const char *base = pInfo->curr; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wgnu-folding-constant" static const unsigned char dataDecodeTableSize = 128; static const signed char dataDecodeTable[dataDecodeTableSize] = { /* 000 */ -1, -1, -1, -1, -1, -1, -1, -1, @@ -1606,7 +1608,7 @@ static Boolean parseDataTag(_CFXMLPlistParseInfo *pInfo, CFTypeRef *out) { /* 'p' */ 41, 42, 43, 44, 45, 46, 47, 48, /* 'x' */ 49, 50, 51, -1, -1, -1, -1, -1 }; - +#pragma GCC diagnostic pop int tmpbufpos = 0; int tmpbuflen = 256; uint8_t *tmpbuf = pInfo->skip ? NULL : (uint8_t *)CFAllocatorAllocate(pInfo->allocator, tmpbuflen, 0); diff --git a/Sources/CoreFoundation/CFRelativeDateTimeFormatter.c b/Sources/CoreFoundation/CFRelativeDateTimeFormatter.c index 9e9adb66fe..bd9086340d 100644 --- a/Sources/CoreFoundation/CFRelativeDateTimeFormatter.c +++ b/Sources/CoreFoundation/CFRelativeDateTimeFormatter.c @@ -23,7 +23,7 @@ struct __CFRelativeDateTimeFormatter { CFRelativeDateTimeFormattingContext _formattingContext; }; -static UDateRelativeDateTimeFormatterStyle icuRelativeDateTimeStyleFromUnitsStyle(CFRelativeDateTimeFormatterStyle style) { +static UDateRelativeDateTimeFormatterStyle icuRelativeDateTimeStyleFromUnitsStyle(CFRelativeDateTimeFormatterUnitsStyle style) { switch (style) { case CFRelativeDateTimeFormatterUnitsStyleSpellOut: case CFRelativeDateTimeFormatterUnitsStyleFull: diff --git a/Sources/CoreFoundation/CFRuntime.c b/Sources/CoreFoundation/CFRuntime.c index 4b770d62d1..2c151b8cc4 100644 --- a/Sources/CoreFoundation/CFRuntime.c +++ b/Sources/CoreFoundation/CFRuntime.c @@ -1774,11 +1774,15 @@ struct _NSCFXMLBridgeUntyped __NSCFXMLBridgeUntyped = { CFDataGetBytePtr, CFDictionaryCreateMutable, CFDictionarySetValue, + // We cannot use the real types here because eventually it winds up exposed as API using CF types in Swift, which we do not want +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wincompatible-pointer-types-discards-qualifiers" &kCFAllocatorSystemDefault, &kCFAllocatorNull, &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks, &kCFErrorLocalizedDescriptionKey, +#pragma GCC diagnostic pop }; // Call out to the CF-level finalizer, because the object is going to go away. diff --git a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h index dd41eeb2ee..a2ba56cd95 100644 --- a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h @@ -35,6 +35,7 @@ #define NOMINMAX #define VC_EXTRALEAN #define WIN32_LEAN_AND_MEAN +#define _CRT_NONSTDC_NO_DEPRECATE #include #elif !TARGET_OS_WASI #include @@ -59,6 +60,8 @@ #if TARGET_OS_LINUX #include +#include +#include #endif #if TARGET_OS_ANDROID @@ -335,10 +338,10 @@ struct _NSCFXMLBridgeUntyped { void *kCFErrorLocalizedDescriptionKey; }; -CF_EXPORT struct _NSCFXMLBridgeStrong __NSCFXMLBridgeStrong; -CF_EXPORT struct _NSCFXMLBridgeUntyped __NSCFXMLBridgeUntyped; +CF_EXPORT struct _NSCFXMLBridgeStrong __NSCFXMLBridgeStrong __attribute__((swift_attr("nonisolated(unsafe)"))); +CF_EXPORT struct _NSCFXMLBridgeUntyped __NSCFXMLBridgeUntyped __attribute__((swift_attr("nonisolated(unsafe)"))); -CF_EXPORT struct _CFSwiftBridge __CFSwiftBridge; +CF_EXPORT struct _CFSwiftBridge __CFSwiftBridge __attribute__((swift_attr("nonisolated(unsafe)"))); CF_EXPORT void *_Nullable _CFSwiftRetain(void *_Nullable t); CF_EXPORT void _CFSwiftRelease(void *_Nullable t); @@ -407,7 +410,7 @@ typedef void *_CFThreadSpecificKey; #endif CF_CROSS_PLATFORM_EXPORT Boolean _CFIsMainThread(void); -CF_EXPORT _CFThreadRef _CFMainPThread; +CF_EXPORT _CFThreadRef _CFMainPThread __attribute__((swift_attr("nonisolated(unsafe)"))); CF_EXPORT CFHashCode __CFHashDouble(double d); diff --git a/Sources/Foundation/AffineTransform.swift b/Sources/Foundation/AffineTransform.swift index 34471e8975..425c9dacbb 100644 --- a/Sources/Foundation/AffineTransform.swift +++ b/Sources/Foundation/AffineTransform.swift @@ -14,7 +14,7 @@ /// [ m21 m22 0 ] /// [ tX tY 1 ] /// ``` -public struct AffineTransform: ReferenceConvertible { +public struct AffineTransform: ReferenceConvertible, Sendable { public typealias ReferenceType = NSAffineTransform public var m11: CGFloat @@ -382,7 +382,7 @@ extension AffineTransform: CustomStringConvertible { /// A structure that defines the three-by-three matrix that performs an affine transform between two coordinate systems. -public struct NSAffineTransformStruct { +public struct NSAffineTransformStruct : Sendable { public var m11: CGFloat public var m12: CGFloat public var m21: CGFloat @@ -412,6 +412,9 @@ public struct NSAffineTransformStruct { } } +@available(*, unavailable) +extension NSAffineTransform : @unchecked Sendable { } + open class NSAffineTransform: NSObject { // Internal only for testing. internal var affineTransform: AffineTransform @@ -495,7 +498,7 @@ extension NSAffineTransform { } extension NSAffineTransform: NSCopying { - open func copy(with zone: NSZone? = nil) -> Any { + public func copy(with zone: NSZone? = nil) -> Any { NSAffineTransform(transform: affineTransform) } } @@ -503,7 +506,7 @@ extension NSAffineTransform: NSCopying { extension NSAffineTransform: NSSecureCoding { public static let supportsSecureCoding = true - open func encode(with aCoder: NSCoder) { + public func encode(with aCoder: NSCoder) { precondition(aCoder.allowsKeyedCoding, "Unkeyed coding is unsupported.") let array = [ @@ -526,32 +529,32 @@ extension NSAffineTransform: NSSecureCoding { extension NSAffineTransform { /// Applies the specified translation factors to the transformation matrix. - open func translateX(by deltaX: CGFloat, yBy deltaY: CGFloat) { + public func translateX(by deltaX: CGFloat, yBy deltaY: CGFloat) { affineTransform.translate(x: deltaX, y: deltaY) } /// Applies scaling factors to each axis of the transformation matrix. - open func scaleX(by scaleX: CGFloat, yBy scaleY: CGFloat) { + public func scaleX(by scaleX: CGFloat, yBy scaleY: CGFloat) { affineTransform.scale(x: scaleX, y: scaleY) } /// Applies the specified scaling factor along both x and y axes to the transformation matrix. - open func scale(by scale: CGFloat) { + public func scale(by scale: CGFloat) { affineTransform.scale(scale) } /// Applies a rotation factor (measured in degrees) to the transformation matrix. - open func rotate(byDegrees angle: CGFloat) { + public func rotate(byDegrees angle: CGFloat) { affineTransform.rotate(byDegrees: angle) } /// Applies a rotation factor (measured in radians) to the transformation matrix. - open func rotate(byRadians angle: CGFloat) { + public func rotate(byRadians angle: CGFloat) { affineTransform.rotate(byRadians: angle) } /// Replaces the matrix with its inverse matrix. - open func invert() { + public func invert() { guard let inverse = affineTransform.inverted() else { fatalError("NSAffineTransform: Transform has no inverse") } @@ -560,22 +563,22 @@ extension NSAffineTransform { } /// Appends the specified matrix. - open func append(_ transform: AffineTransform) { + public func append(_ transform: AffineTransform) { affineTransform.append(transform) } /// Prepends the specified matrix. - open func prepend(_ transform: AffineTransform) { + public func prepend(_ transform: AffineTransform) { affineTransform.prepend(transform) } /// Applies the transform to the specified point and returns the result. - open func transform(_ aPoint: CGPoint) -> CGPoint { + public func transform(_ aPoint: CGPoint) -> CGPoint { affineTransform.transform(aPoint) } /// Applies the transform to the specified size and returns the result. - open func transform(_ aSize: CGSize) -> CGSize { + public func transform(_ aSize: CGSize) -> CGSize { affineTransform.transform(aSize) } } diff --git a/Sources/Foundation/Boxing.swift b/Sources/Foundation/Boxing.swift index 48ec6b5496..53d6320548 100644 --- a/Sources/Foundation/Boxing.swift +++ b/Sources/Foundation/Boxing.swift @@ -15,7 +15,14 @@ /// A class type which acts as a handle (pointer-to-pointer) to a Foundation reference type which has only a mutable class (e.g., NSURLComponents). /// /// Note: This assumes that the result of calling copy() is mutable. The documentation says that classes which do not have a mutable/immutable distinction should just adopt NSCopying instead of NSMutableCopying. -internal final class _MutableHandle where MutableType : NSCopying { +/// +/// `Sendable` Note: A `_MutableHandle` can be considered safely `Sendable` if and only if the following conditions of the `_MutableBoxing`-conforming type are met: +/// - All calls within `mapWithoutMutation` calls are read-only, and are safe to execute concurrently across multiple actors +/// - The passed pointer to the `MutableType` does not escape any `mapWithoutMutation`/`_applyMutation` blocks +/// - Any and all mutations of the held mutable type are only performed in an `_applyMutation` block +/// If both of those conditions are met and verified, the Copy on Write protections will make the `_MutableHandle` safely `Sendable` (the `_MutableBoxing`-conforming type can be marked `Sendable` if these +/// conditions are met and the type is otherwise `Sendable`) +internal final class _MutableHandle : @unchecked Sendable where MutableType : NSCopying { @usableFromInline internal var _pointer : MutableType init(reference : MutableType) { @@ -39,191 +46,3 @@ internal final class _MutableHandle where MutableType : return _pointer } } - -/// Describes common operations for Foundation struct types that are bridged to a mutable object (e.g. NSURLComponents). -internal protocol _MutableBoxing : ReferenceConvertible { - var _handle : _MutableHandle { get set } - - /// Apply a mutating closure to the reference type, regardless if it is mutable or immutable. - /// - /// This function performs the correct copy-on-write check for efficient mutation. - mutating func _applyMutation(_ whatToDo : (ReferenceType) -> ReturnType) -> ReturnType -} - -extension _MutableBoxing { - @inline(__always) - mutating func _applyMutation(_ whatToDo : (ReferenceType) -> ReturnType) -> ReturnType { - // Only create a new box if we are not uniquely referenced - if !isKnownUniquelyReferenced(&_handle) { - let ref = _handle._pointer - _handle = _MutableHandle(reference: ref) - } - return whatToDo(_handle._pointer) - } -} - -internal enum _MutableUnmanagedWrapper where MutableType : NSMutableCopying { - case Immutable(Unmanaged) - case Mutable(Unmanaged) -} - -internal protocol _SwiftNativeFoundationType: AnyObject { - associatedtype ImmutableType : NSObject - associatedtype MutableType : NSObject, NSMutableCopying - var __wrapped : _MutableUnmanagedWrapper { get } - - init(unmanagedImmutableObject: Unmanaged) - init(unmanagedMutableObject: Unmanaged) - - func mutableCopy(with zone : NSZone) -> Any - - func hash(into hasher: inout Hasher) - var hashValue: Int { get } - - var description: String { get } - var debugDescription: String { get } - - func releaseWrappedObject() -} - -extension _SwiftNativeFoundationType { - - @inline(__always) - func _mapUnmanaged(_ whatToDo : (ImmutableType) throws -> ReturnType) rethrows -> ReturnType { - defer { _fixLifetime(self) } - - switch __wrapped { - case .Immutable(let i): - return try i._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo($0) - } - case .Mutable(let m): - return try m._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo(_unsafeReferenceCast($0, to: ImmutableType.self)) - } - } - } - - func releaseWrappedObject() { - switch __wrapped { - case .Immutable(let i): - i.release() - case .Mutable(let m): - m.release() - } - } - - func mutableCopy(with zone : NSZone) -> Any { - return _mapUnmanaged { ($0 as NSObject).mutableCopy() } - } - - func hash(into hasher: inout Hasher) { - _mapUnmanaged { hasher.combine($0) } - } - - var hashValue: Int { - return _mapUnmanaged { return $0.hashValue } - } - - var description: String { - return _mapUnmanaged { return $0.description } - } - - var debugDescription: String { - return _mapUnmanaged { return $0.debugDescription } - } - - func isEqual(_ other: AnyObject) -> Bool { - return _mapUnmanaged { return $0.isEqual(other) } - } -} - -internal protocol _MutablePairBoxing { - associatedtype WrappedSwiftNSType : _SwiftNativeFoundationType - var _wrapped : WrappedSwiftNSType { get set } -} - -extension _MutablePairBoxing { - @inline(__always) - func _mapUnmanaged(_ whatToDo : (WrappedSwiftNSType.ImmutableType) throws -> ReturnType) rethrows -> ReturnType { - // We are using Unmanaged. Make sure that the owning container class - // 'self' is guaranteed to be alive by extending the lifetime of 'self' - // to the end of the scope of this function. - // Note: At the time of this writing using withExtendedLifetime here - // instead of _fixLifetime causes different ARC pair matching behavior - // foiling optimization. This is why we explicitly use _fixLifetime here - // instead. - defer { _fixLifetime(self) } - - let unmanagedHandle = Unmanaged.passUnretained(_wrapped) - let wrapper = unmanagedHandle._withUnsafeGuaranteedRef { $0.__wrapped } - switch (wrapper) { - case .Immutable(let i): - return try i._withUnsafeGuaranteedRef { - return try whatToDo($0) - } - case .Mutable(let m): - return try m._withUnsafeGuaranteedRef { - return try whatToDo(_unsafeReferenceCast($0, to: WrappedSwiftNSType.ImmutableType.self)) - } - } - } - - @inline(__always) - mutating func _applyUnmanagedMutation(_ whatToDo : (WrappedSwiftNSType.MutableType) throws -> ReturnType) rethrows -> ReturnType { - // We are using Unmanaged. Make sure that the owning container class - // 'self' is guaranteed to be alive by extending the lifetime of 'self' - // to the end of the scope of this function. - // Note: At the time of this writing using withExtendedLifetime here - // instead of _fixLifetime causes different ARC pair matching behavior - // foiling optimization. This is why we explicitly use _fixLifetime here - // instead. - defer { _fixLifetime(self) } - - var unique = true - let _unmanagedHandle = Unmanaged.passUnretained(_wrapped) - let wrapper = _unmanagedHandle._withUnsafeGuaranteedRef { $0.__wrapped } - - // This check is done twice because: Value kept live for too long causing uniqueness check to fail - switch (wrapper) { - case .Immutable: - break - case .Mutable: - unique = isKnownUniquelyReferenced(&_wrapped) - } - - switch (wrapper) { - case .Immutable(let i): - // We need to become mutable; by creating a new instance we also become unique - let copy = Unmanaged.passRetained(i._withUnsafeGuaranteedRef { - return _unsafeReferenceCast($0.mutableCopy(), to: WrappedSwiftNSType.MutableType.self) } - ) - - // Be sure to set the var before calling out; otherwise references to the struct in the closure may be looking at the old value - _wrapped = WrappedSwiftNSType(unmanagedMutableObject: copy) - return try copy._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo($0) - } - case .Mutable(let m): - // Only create a new box if we are not uniquely referenced - if !unique { - let copy = Unmanaged.passRetained(m._withUnsafeGuaranteedRef { - return _unsafeReferenceCast($0.mutableCopy(), to: WrappedSwiftNSType.MutableType.self) - }) - _wrapped = WrappedSwiftNSType(unmanagedMutableObject: copy) - return try copy._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo($0) - } - } else { - return try m._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo($0) - } - } - } - } -} diff --git a/Sources/Foundation/Bridging.swift b/Sources/Foundation/Bridging.swift index 4539058325..2a4eba95f6 100644 --- a/Sources/Foundation/Bridging.swift +++ b/Sources/Foundation/Bridging.swift @@ -222,7 +222,7 @@ internal final class __SwiftValue : NSObject, NSCopying { return __SwiftValue(value) } - public static let null: AnyObject = NSNull() + public static nonisolated(unsafe) let null: AnyObject = NSNull() override var description: String { String(describing: value) } } diff --git a/Sources/Foundation/Bundle.swift b/Sources/Foundation/Bundle.swift index b8b36d6426..ac5cca3342 100644 --- a/Sources/Foundation/Bundle.swift +++ b/Sources/Foundation/Bundle.swift @@ -34,7 +34,7 @@ open class Bundle: NSObject, @unchecked Sendable { #endif } - private static var _mainBundle : Bundle = { + private static let _mainBundle : Bundle = { return Bundle(cfBundle: CFBundleGetMainBundle()) }() diff --git a/Sources/Foundation/ByteCountFormatter.swift b/Sources/Foundation/ByteCountFormatter.swift index 70ab924730..1fe8683c4e 100644 --- a/Sources/Foundation/ByteCountFormatter.swift +++ b/Sources/Foundation/ByteCountFormatter.swift @@ -9,7 +9,7 @@ extension ByteCountFormatter { - public struct Units : OptionSet { + public struct Units : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -27,7 +27,7 @@ extension ByteCountFormatter { public static let useAll = Units(rawValue: 0x0FFFF) } - public enum CountStyle : Int { + public enum CountStyle : Int, Sendable { // Specifies display of file or storage byte counts. The actual behavior for this is platform-specific; on OS X 10.8, this uses the decimal style, but that may change over time. case file @@ -39,6 +39,9 @@ extension ByteCountFormatter { } } +@available(*, unavailable) +extension ByteCountFormatter : @unchecked Sendable { } + open class ByteCountFormatter : Formatter { public override init() { super.init() diff --git a/Sources/Foundation/CharacterSet.swift b/Sources/Foundation/CharacterSet.swift index d5a4540006..0faeceef29 100644 --- a/Sources/Foundation/CharacterSet.swift +++ b/Sources/Foundation/CharacterSet.swift @@ -22,7 +22,7 @@ internal final class _SwiftNSCharacterSet : NSCharacterSet, _SwiftNativeFoundati internal typealias ImmutableType = NSCharacterSet internal typealias MutableType = NSMutableCharacterSet - var __wrapped : _MutableUnmanagedWrapper + fileprivate var __wrapped : _MutableUnmanagedWrapper init(immutableObject: AnyObject) { // Take ownership. @@ -107,14 +107,14 @@ internal final class _SwiftNSCharacterSet : NSCharacterSet, _SwiftNativeFoundati This type provides "copy-on-write" behavior, and is also bridged to the Objective-C `NSCharacterSet` class. */ -public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgebra, _MutablePairBoxing { +public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgebra, Sendable, _MutablePairBoxing { public typealias ReferenceType = NSCharacterSet internal typealias SwiftNSWrapping = _SwiftNSCharacterSet internal typealias ImmutableType = SwiftNSWrapping.ImmutableType internal typealias MutableType = SwiftNSWrapping.MutableType - internal var _wrapped : _SwiftNSCharacterSet + internal nonisolated(unsafe) var _wrapped : _SwiftNSCharacterSet // MARK: Init methods @@ -528,3 +528,173 @@ extension CharacterSet : Codable { try container.encode(self.bitmapRepresentation, forKey: .bitmap) } } + +// MARK: - Boxing protocols +// Only used by CharacterSet at this time + +fileprivate enum _MutableUnmanagedWrapper where MutableType : NSMutableCopying { + case Immutable(Unmanaged) + case Mutable(Unmanaged) +} + +fileprivate protocol _SwiftNativeFoundationType: AnyObject { + associatedtype ImmutableType : NSObject + associatedtype MutableType : NSObject, NSMutableCopying + var __wrapped : _MutableUnmanagedWrapper { get } + + init(unmanagedImmutableObject: Unmanaged) + init(unmanagedMutableObject: Unmanaged) + + func mutableCopy(with zone : NSZone) -> Any + + func hash(into hasher: inout Hasher) + var hashValue: Int { get } + + var description: String { get } + var debugDescription: String { get } + + func releaseWrappedObject() +} + +extension _SwiftNativeFoundationType { + + @inline(__always) + func _mapUnmanaged(_ whatToDo : (ImmutableType) throws -> ReturnType) rethrows -> ReturnType { + defer { _fixLifetime(self) } + + switch __wrapped { + case .Immutable(let i): + return try i._withUnsafeGuaranteedRef { + _onFastPath() + return try whatToDo($0) + } + case .Mutable(let m): + return try m._withUnsafeGuaranteedRef { + _onFastPath() + return try whatToDo(_unsafeReferenceCast($0, to: ImmutableType.self)) + } + } + } + + func releaseWrappedObject() { + switch __wrapped { + case .Immutable(let i): + i.release() + case .Mutable(let m): + m.release() + } + } + + func mutableCopy(with zone : NSZone) -> Any { + return _mapUnmanaged { ($0 as NSObject).mutableCopy() } + } + + func hash(into hasher: inout Hasher) { + _mapUnmanaged { hasher.combine($0) } + } + + var hashValue: Int { + return _mapUnmanaged { return $0.hashValue } + } + + var description: String { + return _mapUnmanaged { return $0.description } + } + + var debugDescription: String { + return _mapUnmanaged { return $0.debugDescription } + } + + func isEqual(_ other: AnyObject) -> Bool { + return _mapUnmanaged { return $0.isEqual(other) } + } +} + +fileprivate protocol _MutablePairBoxing { + associatedtype WrappedSwiftNSType : _SwiftNativeFoundationType + var _wrapped : WrappedSwiftNSType { get set } +} + +extension _MutablePairBoxing { + @inline(__always) + func _mapUnmanaged(_ whatToDo : (WrappedSwiftNSType.ImmutableType) throws -> ReturnType) rethrows -> ReturnType { + // We are using Unmanaged. Make sure that the owning container class + // 'self' is guaranteed to be alive by extending the lifetime of 'self' + // to the end of the scope of this function. + // Note: At the time of this writing using withExtendedLifetime here + // instead of _fixLifetime causes different ARC pair matching behavior + // foiling optimization. This is why we explicitly use _fixLifetime here + // instead. + defer { _fixLifetime(self) } + + let unmanagedHandle = Unmanaged.passUnretained(_wrapped) + let wrapper = unmanagedHandle._withUnsafeGuaranteedRef { $0.__wrapped } + switch (wrapper) { + case .Immutable(let i): + return try i._withUnsafeGuaranteedRef { + return try whatToDo($0) + } + case .Mutable(let m): + return try m._withUnsafeGuaranteedRef { + return try whatToDo(_unsafeReferenceCast($0, to: WrappedSwiftNSType.ImmutableType.self)) + } + } + } + + @inline(__always) + mutating func _applyUnmanagedMutation(_ whatToDo : (WrappedSwiftNSType.MutableType) throws -> ReturnType) rethrows -> ReturnType { + // We are using Unmanaged. Make sure that the owning container class + // 'self' is guaranteed to be alive by extending the lifetime of 'self' + // to the end of the scope of this function. + // Note: At the time of this writing using withExtendedLifetime here + // instead of _fixLifetime causes different ARC pair matching behavior + // foiling optimization. This is why we explicitly use _fixLifetime here + // instead. + defer { _fixLifetime(self) } + + var unique = true + let _unmanagedHandle = Unmanaged.passUnretained(_wrapped) + let wrapper = _unmanagedHandle._withUnsafeGuaranteedRef { $0.__wrapped } + + // This check is done twice because: Value kept live for too long causing uniqueness check to fail + switch (wrapper) { + case .Immutable: + break + case .Mutable: + unique = isKnownUniquelyReferenced(&_wrapped) + } + + switch (wrapper) { + case .Immutable(let i): + // We need to become mutable; by creating a new instance we also become unique + let copy = Unmanaged.passRetained(i._withUnsafeGuaranteedRef { + return _unsafeReferenceCast($0.mutableCopy(), to: WrappedSwiftNSType.MutableType.self) } + ) + + // Be sure to set the var before calling out; otherwise references to the struct in the closure may be looking at the old value + _wrapped = WrappedSwiftNSType(unmanagedMutableObject: copy) + return try copy._withUnsafeGuaranteedRef { + _onFastPath() + return try whatToDo($0) + } + case .Mutable(let m): + // Only create a new box if we are not uniquely referenced + if !unique { + let copy = Unmanaged.passRetained(m._withUnsafeGuaranteedRef { + return _unsafeReferenceCast($0.mutableCopy(), to: WrappedSwiftNSType.MutableType.self) + }) + _wrapped = WrappedSwiftNSType(unmanagedMutableObject: copy) + return try copy._withUnsafeGuaranteedRef { + _onFastPath() + return try whatToDo($0) + } + } else { + return try m._withUnsafeGuaranteedRef { + _onFastPath() + return try whatToDo($0) + } + } + } + } +} + diff --git a/Sources/Foundation/DateComponentsFormatter.swift b/Sources/Foundation/DateComponentsFormatter.swift index 6bd39171b0..7f838aba7d 100644 --- a/Sources/Foundation/DateComponentsFormatter.swift +++ b/Sources/Foundation/DateComponentsFormatter.swift @@ -10,8 +10,8 @@ /* DateComponentsFormatter provides locale-correct and flexible string formatting of quantities of time, such as "1 day" or "1h 10m", as specified by NSDateComponents. For formatting intervals of time (such as "2PM to 5PM"), see DateIntervalFormatter. DateComponentsFormatter is thread-safe, in that calling methods on it from multiple threads will not cause crashes or incorrect results, but it makes no attempt to prevent confusion when one thread sets something and another thread isn't expecting it to change. */ @available(*, unavailable, message: "Not supported in swift-corelibs-foundation") -open class DateComponentsFormatter : Formatter { - public enum UnitsStyle : Int { +open class DateComponentsFormatter : Formatter, @unchecked Sendable { + public enum UnitsStyle : Int, Sendable { case positional // "1:10; may fall back to abbreviated units in some cases, e.g. 3d" case abbreviated // "1h 10m" case short // "1hr, 10min" @@ -20,7 +20,7 @@ open class DateComponentsFormatter : Formatter { case brief // "1hr 10min" } - public struct ZeroFormattingBehavior : OptionSet { + public struct ZeroFormattingBehavior : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } diff --git a/Sources/Foundation/DateFormatter.swift b/Sources/Foundation/DateFormatter.swift index dee69a03dd..760e776dae 100644 --- a/Sources/Foundation/DateFormatter.swift +++ b/Sources/Foundation/DateFormatter.swift @@ -9,86 +9,569 @@ @_implementationOnly import CoreFoundation @_spi(SwiftCorelibsFoundation) import FoundationEssentials +internal import Synchronization -open class DateFormatter : Formatter { - typealias CFType = CFDateFormatter - private final var __cfObject: CFType? - private final var _cfObject: CFType { - guard let obj = __cfObject else { - let dateStyle = CFDateFormatterStyle(rawValue: CFIndex(self.dateStyle.rawValue))! - let timeStyle = CFDateFormatterStyle(rawValue: CFIndex(self.timeStyle.rawValue))! +open class DateFormatter : Formatter, @unchecked Sendable { + private let _lock: Mutex = .init(.init()) - let obj = CFDateFormatterCreate(kCFAllocatorSystemDefault, locale._cfObject, dateStyle, timeStyle)! - _setFormatterAttributes(obj) - if let dateFormat = _dateFormat { - CFDateFormatterSetFormat(obj, dateFormat._cfObject) - } - __cfObject = obj - return obj + public override init() { + super.init() + } + + private convenience init(state: consuming sending State) { + self.init() + + // work around issue that state needs to be reinitialized after consuming + struct Wrapper : ~Copyable, @unchecked Sendable { + var value: State? = nil + } + var w = Wrapper(value: consume state) + + _lock.withLock { + $0 = w.value.take()! } - return obj } - public override init() { - super.init() + open override func copy(with zone: NSZone? = nil) -> Any { + return _lock.withLock { state in + // Zone is not Sendable, so just ignore it here + let copy = state.copy() + return DateFormatter(state: copy) + } } public required init?(coder: NSCoder) { super.init(coder: coder) } - open override func copy(with zone: NSZone? = nil) -> Any { - let copied = DateFormatter() - - func __copy(_ keyPath: ReferenceWritableKeyPath) { - copied[keyPath: keyPath] = self[keyPath: keyPath] - } - - __copy(\.formattingContext) - __copy(\.dateStyle) - __copy(\.timeStyle) - __copy(\._locale) - __copy(\.generatesCalendarDates) - __copy(\._timeZone) - __copy(\._calendar) - __copy(\.isLenient) - __copy(\._twoDigitStartDate) - __copy(\._eraSymbols) - __copy(\._monthSymbols) - __copy(\._shortMonthSymbols) - __copy(\._weekdaySymbols) - __copy(\._shortWeekdaySymbols) - __copy(\._amSymbol) - __copy(\._pmSymbol) - __copy(\._longEraSymbols) - __copy(\._veryShortMonthSymbols) - __copy(\._standaloneMonthSymbols) - __copy(\._shortStandaloneMonthSymbols) - __copy(\._veryShortStandaloneMonthSymbols) - __copy(\._veryShortWeekdaySymbols) - __copy(\._standaloneWeekdaySymbols) - __copy(\._shortStandaloneWeekdaySymbols) - __copy(\._veryShortStandaloneWeekdaySymbols) - __copy(\._quarterSymbols) - __copy(\._shortQuarterSymbols) - __copy(\._standaloneQuarterSymbols) - __copy(\._shortStandaloneQuarterSymbols) - __copy(\._gregorianStartDate) - __copy(\.doesRelativeDateFormatting) - - // The last is `_dateFormat` because setting `dateStyle` and `timeStyle` make it `nil`. - __copy(\._dateFormat) - - return copied - } - - open var formattingContext: Context = .unknown // default is NSFormattingContextUnknown - - @available(*, unavailable, renamed: "date(from:)") - func getObjectValue(_ obj: UnsafeMutablePointer?, - for string: String, - range rangep: UnsafeMutablePointer?) throws { - NSUnsupported() + struct State : ~Copyable { + class Box { + var formatter: CFDateFormatter? + init() {} + } + + private var _formatter = Box() + + func copy(with zone: NSZone? = nil) -> sending State { + var copied = State() + + copied.formattingContext = formattingContext + copied.dateStyle = dateStyle + copied.timeStyle = timeStyle + copied._locale = _locale + copied.generatesCalendarDates = generatesCalendarDates + copied._timeZone = _timeZone + copied._calendar = _calendar + copied.isLenient = isLenient + copied._twoDigitStartDate = _twoDigitStartDate + copied._eraSymbols = _eraSymbols + copied._monthSymbols = _monthSymbols + copied._shortMonthSymbols = _shortMonthSymbols + copied._weekdaySymbols = _weekdaySymbols + copied._shortWeekdaySymbols = _shortWeekdaySymbols + copied._amSymbol = _amSymbol + copied._pmSymbol = _pmSymbol + copied._longEraSymbols = _longEraSymbols + copied._veryShortMonthSymbols = _veryShortMonthSymbols + copied._standaloneMonthSymbols = _standaloneMonthSymbols + copied._shortStandaloneMonthSymbols = _shortStandaloneMonthSymbols + copied._veryShortStandaloneMonthSymbols = _veryShortStandaloneMonthSymbols + copied._veryShortWeekdaySymbols = _veryShortWeekdaySymbols + copied._standaloneWeekdaySymbols = _standaloneWeekdaySymbols + copied._shortStandaloneWeekdaySymbols = _shortStandaloneWeekdaySymbols + copied._veryShortStandaloneWeekdaySymbols = _veryShortStandaloneWeekdaySymbols + copied._quarterSymbols = _quarterSymbols + copied._shortQuarterSymbols = _shortQuarterSymbols + copied._standaloneQuarterSymbols = _standaloneQuarterSymbols + copied._shortStandaloneQuarterSymbols = _shortStandaloneQuarterSymbols + copied._gregorianStartDate = _gregorianStartDate + copied.doesRelativeDateFormatting = doesRelativeDateFormatting + + // The last is `_dateFormat` because setting `dateStyle` and `timeStyle` make it `nil`. + copied._dateFormat = _dateFormat + + return copied + } + + func formatter() -> CFDateFormatter { + guard let obj = _formatter.formatter else { + let dateStyle = CFDateFormatterStyle(rawValue: CFIndex(dateStyle.rawValue))! + let timeStyle = CFDateFormatterStyle(rawValue: CFIndex(timeStyle.rawValue))! + + let obj = CFDateFormatterCreate(kCFAllocatorSystemDefault, locale._cfObject, dateStyle, timeStyle)! + _setFormatterAttributes(obj) + if let dateFormat = _dateFormat { + CFDateFormatterSetFormat(obj, dateFormat._cfObject) + } + _formatter.formatter = obj + return obj + } + return obj + } + + private mutating func _reset() { + _formatter.formatter = nil + } + + // MARK: - + + var formattingContext: Context = .unknown // default is NSFormattingContextUnknown + + internal func _setFormatterAttributes(_ formatter: CFDateFormatter) { + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterIsLenient, value: isLenient._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterTimeZone, value: _timeZone?._cfObject) + if let ident = _calendar?.identifier { + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterCalendarName, value: ident._cfCalendarIdentifier._cfObject) + } else { + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterCalendarName, value: nil) + } + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterTwoDigitStartDate, value: _twoDigitStartDate?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterDefaultDate, value: defaultDate?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterCalendar, value: _calendar?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterEraSymbols, value: _eraSymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterMonthSymbols, value: _monthSymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterShortMonthSymbols, value: _shortMonthSymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterWeekdaySymbols, value: _weekdaySymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterShortWeekdaySymbols, value: _shortWeekdaySymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterAMSymbol, value: _amSymbol?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterPMSymbol, value: _pmSymbol?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterLongEraSymbols, value: _longEraSymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterVeryShortMonthSymbols, value: _veryShortMonthSymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterStandaloneMonthSymbols, value: _standaloneMonthSymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterShortStandaloneMonthSymbols, value: _shortStandaloneMonthSymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterVeryShortStandaloneMonthSymbols, value: _veryShortStandaloneMonthSymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterVeryShortWeekdaySymbols, value: _veryShortWeekdaySymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterStandaloneWeekdaySymbols, value: _standaloneWeekdaySymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterShortStandaloneWeekdaySymbols, value: _shortStandaloneWeekdaySymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterVeryShortStandaloneWeekdaySymbols, value: _veryShortStandaloneWeekdaySymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterQuarterSymbols, value: _quarterSymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterShortQuarterSymbols, value: _shortQuarterSymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterStandaloneQuarterSymbols, value: _standaloneQuarterSymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterShortStandaloneQuarterSymbols, value: _shortStandaloneQuarterSymbols?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFDateFormatterGregorianStartDate, value: _gregorianStartDate?._cfObject) + } + + internal func _setFormatterAttribute(_ formatter: CFDateFormatter, attributeName: CFString, value: AnyObject?) { + if let value = value { + CFDateFormatterSetProperty(formatter, attributeName, value) + } + } + + private var _dateFormat: String? { willSet { _reset() } } + var dateFormat: String! { + get { + guard let format = _dateFormat else { + return CFDateFormatterGetFormat(formatter())._swiftObject + } + return format + } + set { + _dateFormat = newValue + } + } + + var dateStyle: Style = .none { + willSet { + _dateFormat = nil + } + } + + var timeStyle: Style = .none { + willSet { + _dateFormat = nil + } + } + + internal var _locale: Locale? { willSet { _reset() } } + var locale: Locale! { + get { + guard let locale = _locale else { return .current } + return locale + } + set { + _locale = newValue + } + } + + var generatesCalendarDates = false { willSet { _reset() } } + + internal var _timeZone: TimeZone? { willSet { _reset() } } + var timeZone: TimeZone! { + get { + guard let tz = _timeZone else { + // The returned value is a CFTimeZone + let property = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterTimeZone) + let propertyTZ = unsafeBitCast(property, to: CFTimeZone.self) + return propertyTZ._swiftObject + } + return tz + } + set { + _timeZone = newValue + } + } + + internal var _calendar: Calendar! { willSet { _reset() } } + var calendar: Calendar! { + get { + guard let calendar = _calendar else { + // The returned value is a CFCalendar + let property = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterCalendar) + let propertyCalendar = unsafeBitCast(property, to: CFCalendar.self) + return propertyCalendar._swiftObject + } + return calendar + } + set { + _calendar = newValue + } + } + + var isLenient = false { willSet { _reset() } } + + internal var _twoDigitStartDate: Date? { willSet { _reset() } } + var twoDigitStartDate: Date? { + get { + guard let startDate = _twoDigitStartDate else { + return (CFDateFormatterCopyProperty(formatter(), kCFDateFormatterTwoDigitStartDate) as? NSDate)?._swiftObject + } + return startDate + } + set { + _twoDigitStartDate = newValue + } + } + + var defaultDate: Date? { willSet { _reset() } } + + internal var _eraSymbols: [String]? { willSet { _reset() } } + var eraSymbols: [String] { + get { + guard let symbols = _eraSymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterEraSymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _eraSymbols = newValue + } + } + + internal var _monthSymbols: [String]? { willSet { _reset() } } + var monthSymbols: [String] { + get { + guard let symbols = _monthSymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterMonthSymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _monthSymbols = newValue + } + } + + internal var _shortMonthSymbols: [String]? { willSet { _reset() } } + var shortMonthSymbols: [String] { + get { + guard let symbols = _shortMonthSymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterShortMonthSymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _shortMonthSymbols = newValue + } + } + + + internal var _weekdaySymbols: [String]? { willSet { _reset() } } + var weekdaySymbols: [String] { + get { + guard let symbols = _weekdaySymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterWeekdaySymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _weekdaySymbols = newValue + } + } + + internal var _shortWeekdaySymbols: [String]? { willSet { _reset() } } + var shortWeekdaySymbols: [String] { + get { + guard let symbols = _shortWeekdaySymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterShortWeekdaySymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _shortWeekdaySymbols = newValue + } + } + + internal var _amSymbol: String? { willSet { _reset() } } + var amSymbol: String { + get { + guard let symbol = _amSymbol else { + return (CFDateFormatterCopyProperty(formatter(), kCFDateFormatterAMSymbol) as! NSString)._swiftObject + } + return symbol + } + set { + _amSymbol = newValue + } + } + + internal var _pmSymbol: String? { willSet { _reset() } } + var pmSymbol: String { + get { + guard let symbol = _pmSymbol else { + return (CFDateFormatterCopyProperty(formatter(), kCFDateFormatterPMSymbol) as! NSString)._swiftObject + } + return symbol + } + set { + _pmSymbol = newValue + } + } + + internal var _longEraSymbols: [String]? { willSet { _reset() } } + var longEraSymbols: [String] { + get { + guard let symbols = _longEraSymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterLongEraSymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _longEraSymbols = newValue + } + } + + internal var _veryShortMonthSymbols: [String]? { willSet { _reset() } } + var veryShortMonthSymbols: [String] { + get { + guard let symbols = _veryShortMonthSymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterVeryShortMonthSymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _veryShortMonthSymbols = newValue + } + } + + internal var _standaloneMonthSymbols: [String]? { willSet { _reset() } } + var standaloneMonthSymbols: [String] { + get { + guard let symbols = _standaloneMonthSymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterStandaloneMonthSymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _standaloneMonthSymbols = newValue + } + } + + internal var _shortStandaloneMonthSymbols: [String]? { willSet { _reset() } } + var shortStandaloneMonthSymbols: [String] { + get { + guard let symbols = _shortStandaloneMonthSymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterShortStandaloneMonthSymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _shortStandaloneMonthSymbols = newValue + } + } + + internal var _veryShortStandaloneMonthSymbols: [String]? { willSet { _reset() } } + var veryShortStandaloneMonthSymbols: [String] { + get { + guard let symbols = _veryShortStandaloneMonthSymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterVeryShortStandaloneMonthSymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _veryShortStandaloneMonthSymbols = newValue + } + } + + internal var _veryShortWeekdaySymbols: [String]? { willSet { _reset() } } + var veryShortWeekdaySymbols: [String] { + get { + guard let symbols = _veryShortWeekdaySymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterVeryShortWeekdaySymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _veryShortWeekdaySymbols = newValue + } + } + + internal var _standaloneWeekdaySymbols: [String]? { willSet { _reset() } } + var standaloneWeekdaySymbols: [String] { + get { + guard let symbols = _standaloneWeekdaySymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterStandaloneWeekdaySymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _standaloneWeekdaySymbols = newValue + } + } + + internal var _shortStandaloneWeekdaySymbols: [String]? { willSet { _reset() } } + var shortStandaloneWeekdaySymbols: [String] { + get { + guard let symbols = _shortStandaloneWeekdaySymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterShortStandaloneWeekdaySymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _shortStandaloneWeekdaySymbols = newValue + } + } + + internal var _veryShortStandaloneWeekdaySymbols: [String]? { willSet { _reset() } } + var veryShortStandaloneWeekdaySymbols: [String] { + get { + guard let symbols = _veryShortStandaloneWeekdaySymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterVeryShortStandaloneWeekdaySymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _veryShortStandaloneWeekdaySymbols = newValue + } + } + + internal var _quarterSymbols: [String]? { willSet { _reset() } } + var quarterSymbols: [String] { + get { + guard let symbols = _quarterSymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterQuarterSymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _quarterSymbols = newValue + } + } + + internal var _shortQuarterSymbols: [String]? { willSet { _reset() } } + var shortQuarterSymbols: [String] { + get { + guard let symbols = _shortQuarterSymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterShortQuarterSymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _shortQuarterSymbols = newValue + } + } + + internal var _standaloneQuarterSymbols: [String]? { willSet { _reset() } } + var standaloneQuarterSymbols: [String] { + get { + guard let symbols = _standaloneQuarterSymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterStandaloneQuarterSymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _standaloneQuarterSymbols = newValue + } + } + + internal var _shortStandaloneQuarterSymbols: [String]? { willSet { _reset() } } + var shortStandaloneQuarterSymbols: [String] { + get { + guard let symbols = _shortStandaloneQuarterSymbols else { + let cfSymbols = CFDateFormatterCopyProperty(formatter(), kCFDateFormatterShortStandaloneQuarterSymbols) as! NSArray + return cfSymbols.allObjects as! [String] + } + return symbols + } + set { + _shortStandaloneQuarterSymbols = newValue + } + } + + internal var _gregorianStartDate: Date? { willSet { _reset() } } + var gregorianStartDate: Date? { + get { + guard let startDate = _gregorianStartDate else { + return (CFDateFormatterCopyProperty(formatter(), kCFDateFormatterGregorianStartDate) as? NSDate)?._swiftObject + } + return startDate + } + set { + _gregorianStartDate = newValue + } + } + + var doesRelativeDateFormatting = false { willSet { _reset() } } + + // MARK: - + + func string(for obj: Any) -> String? { + guard let date = obj as? Date else { return nil } + return string(from: date) + } + + func string(from date: Date) -> String { + return CFDateFormatterCreateStringWithDate(kCFAllocatorSystemDefault, formatter(), date._cfObject)._swiftObject + } + + func date(from string: String) -> Date? { + var range = CFRange(location: 0, length: string.length) + let date = withUnsafeMutablePointer(to: &range) { (rangep: UnsafeMutablePointer) -> Date? in + guard let res = CFDateFormatterCreateDateFromString(kCFAllocatorSystemDefault, formatter(), string._cfObject, rangep) else { + return nil + } + return res._swiftObject + } + + // range.length is updated with the last position of the input string that was parsed + guard let swiftRange = Range(NSRange(range), in: string) else { + fatalError("Incorrect range \(range) in \(string)") + } + + // Apple DateFormatter implementation returns nil + // if non-whitespace sharacters are left after parsed content. + let remainder = String(string[swiftRange.upperBound...]) + let characterSet = CharacterSet(charactersIn: remainder) + guard CharacterSet.whitespaces.isSuperset(of: characterSet) else { + return nil + } + return date + } } open override func string(for obj: Any) -> String? { @@ -97,31 +580,11 @@ open class DateFormatter : Formatter { } open func string(from date: Date) -> String { - return CFDateFormatterCreateStringWithDate(kCFAllocatorSystemDefault, _cfObject, date._cfObject)._swiftObject + _lock.withLock { $0.string(from: date) } } open func date(from string: String) -> Date? { - var range = CFRange(location: 0, length: string.length) - let date = withUnsafeMutablePointer(to: &range) { (rangep: UnsafeMutablePointer) -> Date? in - guard let res = CFDateFormatterCreateDateFromString(kCFAllocatorSystemDefault, _cfObject, string._cfObject, rangep) else { - return nil - } - return res._swiftObject - } - - // range.length is updated with the last position of the input string that was parsed - guard let swiftRange = Range(NSRange(range), in: string) else { - fatalError("Incorrect range \(range) in \(string)") - } - - // Apple DateFormatter implementation returns nil - // if non-whitespace sharacters are left after parsed content. - let remainder = String(string[swiftRange.upperBound...]) - let characterSet = CharacterSet(charactersIn: remainder) - guard CharacterSet.whitespaces.isSuperset(of: characterSet) else { - return nil - } - return date + _lock.withLock { $0.date(from: string) } } open class func localizedString(from date: Date, dateStyle dstyle: Style, timeStyle tstyle: Style) -> String { @@ -144,434 +607,171 @@ open class DateFormatter : Formatter { } } - private func _reset() { - __cfObject = nil - } - - internal final func _setFormatterAttributes(_ formatter: CFDateFormatter) { - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterIsLenient, value: isLenient._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterTimeZone, value: _timeZone?._cfObject) - if let ident = _calendar?.identifier { - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterCalendarName, value: ident._cfCalendarIdentifier._cfObject) - } else { - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterCalendarName, value: nil) - } - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterTwoDigitStartDate, value: _twoDigitStartDate?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterDefaultDate, value: defaultDate?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterCalendar, value: _calendar?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterEraSymbols, value: _eraSymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterMonthSymbols, value: _monthSymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterShortMonthSymbols, value: _shortMonthSymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterWeekdaySymbols, value: _weekdaySymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterShortWeekdaySymbols, value: _shortWeekdaySymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterAMSymbol, value: _amSymbol?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterPMSymbol, value: _pmSymbol?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterLongEraSymbols, value: _longEraSymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterVeryShortMonthSymbols, value: _veryShortMonthSymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterStandaloneMonthSymbols, value: _standaloneMonthSymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterShortStandaloneMonthSymbols, value: _shortStandaloneMonthSymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterVeryShortStandaloneMonthSymbols, value: _veryShortStandaloneMonthSymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterVeryShortWeekdaySymbols, value: _veryShortWeekdaySymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterStandaloneWeekdaySymbols, value: _standaloneWeekdaySymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterShortStandaloneWeekdaySymbols, value: _shortStandaloneWeekdaySymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterVeryShortStandaloneWeekdaySymbols, value: _veryShortStandaloneWeekdaySymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterQuarterSymbols, value: _quarterSymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterShortQuarterSymbols, value: _shortQuarterSymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterStandaloneQuarterSymbols, value: _standaloneQuarterSymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterShortStandaloneQuarterSymbols, value: _shortStandaloneQuarterSymbols?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFDateFormatterGregorianStartDate, value: _gregorianStartDate?._cfObject) - } - - internal final func _setFormatterAttribute(_ formatter: CFDateFormatter, attributeName: CFString, value: AnyObject?) { - if let value = value { - CFDateFormatterSetProperty(formatter, attributeName, value) - } - } - - private var _dateFormat: String? { willSet { _reset() } } + // MARK: - + open var dateFormat: String! { - get { - guard let format = _dateFormat else { - return CFDateFormatterGetFormat(_cfObject)._swiftObject - } - return format - } - set { - _dateFormat = newValue - } + get { _lock.withLock { $0.dateFormat } } + set { _lock.withLock { $0.dateFormat = newValue } } } - open var dateStyle: Style = .none { - willSet { - _dateFormat = nil - } + open var dateStyle: Style { + get { _lock.withLock { $0.dateStyle } } + set { _lock.withLock { $0.dateStyle = newValue } } } - open var timeStyle: Style = .none { - willSet { - _dateFormat = nil - } + open var timeStyle: Style { + get { _lock.withLock { $0.timeStyle } } + set { _lock.withLock { $0.timeStyle = newValue } } } - /*@NSCopying*/ internal var _locale: Locale? { willSet { _reset() } } open var locale: Locale! { - get { - guard let locale = _locale else { return .current } - return locale - } - set { - _locale = newValue - } + get { _lock.withLock { $0.locale } } + set { _lock.withLock { $0.locale = newValue } } } - open var generatesCalendarDates = false { willSet { _reset() } } + open var generatesCalendarDates: Bool { + get { _lock.withLock { $0.generatesCalendarDates } } + set { _lock.withLock { $0.generatesCalendarDates = newValue } } + } - /*@NSCopying*/ internal var _timeZone: TimeZone? { willSet { _reset() } } open var timeZone: TimeZone! { - get { - guard let tz = _timeZone else { - // The returned value is a CFTimeZone - let property = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterTimeZone) - let propertyTZ = unsafeBitCast(property, to: CFTimeZone.self) - return propertyTZ._swiftObject - } - return tz - } - set { - _timeZone = newValue - } + get { _lock.withLock { $0.timeZone } } + set { _lock.withLock { $0.timeZone = newValue } } } - /*@NSCopying*/ internal var _calendar: Calendar! { willSet { _reset() } } open var calendar: Calendar! { - get { - guard let calendar = _calendar else { - // The returned value is a CFCalendar - let property = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterCalendar) - let propertyCalendar = unsafeBitCast(property, to: CFCalendar.self) - return propertyCalendar._swiftObject - } - return calendar - } - set { - _calendar = newValue - } + get { _lock.withLock { $0.calendar } } + set { _lock.withLock { $0.calendar = newValue } } } - open var isLenient = false { willSet { _reset() } } + open var isLenient: Bool { + get { _lock.withLock { $0.isLenient } } + set { _lock.withLock { $0.isLenient = newValue } } + } - /*@NSCopying*/ internal var _twoDigitStartDate: Date? { willSet { _reset() } } open var twoDigitStartDate: Date? { - get { - guard let startDate = _twoDigitStartDate else { - return (CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterTwoDigitStartDate) as? NSDate)?._swiftObject - } - return startDate - } - set { - _twoDigitStartDate = newValue - } + get { _lock.withLock { $0.twoDigitStartDate } } + set { _lock.withLock { $0.twoDigitStartDate = newValue } } + } + + open var defaultDate: Date? { + get { _lock.withLock { $0.defaultDate } } + set { _lock.withLock { $0.defaultDate = newValue } } } - /*@NSCopying*/ open var defaultDate: Date? { willSet { _reset() } } - - internal var _eraSymbols: [String]? { willSet { _reset() } } open var eraSymbols: [String] { - get { - guard let symbols = _eraSymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterEraSymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _eraSymbols = newValue - } + get { _lock.withLock { $0.eraSymbols } } + set { _lock.withLock { $0.eraSymbols = newValue } } } - - internal var _monthSymbols: [String]? { willSet { _reset() } } + open var monthSymbols: [String] { - get { - guard let symbols = _monthSymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterMonthSymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _monthSymbols = newValue - } + get { _lock.withLock { $0.monthSymbols } } + set { _lock.withLock { $0.monthSymbols = newValue } } } - internal var _shortMonthSymbols: [String]? { willSet { _reset() } } open var shortMonthSymbols: [String] { - get { - guard let symbols = _shortMonthSymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterShortMonthSymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _shortMonthSymbols = newValue - } + get { _lock.withLock { $0.shortMonthSymbols } } + set { _lock.withLock { $0.shortMonthSymbols = newValue } } } - - internal var _weekdaySymbols: [String]? { willSet { _reset() } } open var weekdaySymbols: [String] { - get { - guard let symbols = _weekdaySymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterWeekdaySymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _weekdaySymbols = newValue - } + get { _lock.withLock { $0.weekdaySymbols } } + set { _lock.withLock { $0.weekdaySymbols = newValue } } } - internal var _shortWeekdaySymbols: [String]? { willSet { _reset() } } open var shortWeekdaySymbols: [String] { - get { - guard let symbols = _shortWeekdaySymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterShortWeekdaySymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _shortWeekdaySymbols = newValue - } + get { _lock.withLock { $0.shortWeekdaySymbols } } + set { _lock.withLock { $0.shortWeekdaySymbols = newValue } } } - internal var _amSymbol: String? { willSet { _reset() } } open var amSymbol: String { - get { - guard let symbol = _amSymbol else { - return (CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterAMSymbol) as! NSString)._swiftObject - } - return symbol - } - set { - _amSymbol = newValue - } + get { _lock.withLock { $0.amSymbol } } + set { _lock.withLock { $0.amSymbol = newValue } } } - internal var _pmSymbol: String? { willSet { _reset() } } open var pmSymbol: String { - get { - guard let symbol = _pmSymbol else { - return (CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterPMSymbol) as! NSString)._swiftObject - } - return symbol - } - set { - _pmSymbol = newValue - } + get { _lock.withLock { $0.pmSymbol } } + set { _lock.withLock { $0.pmSymbol = newValue } } } - internal var _longEraSymbols: [String]? { willSet { _reset() } } open var longEraSymbols: [String] { - get { - guard let symbols = _longEraSymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterLongEraSymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _longEraSymbols = newValue - } + get { _lock.withLock { $0.longEraSymbols } } + set { _lock.withLock { $0.longEraSymbols = newValue } } } - internal var _veryShortMonthSymbols: [String]? { willSet { _reset() } } open var veryShortMonthSymbols: [String] { - get { - guard let symbols = _veryShortMonthSymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterVeryShortMonthSymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _veryShortMonthSymbols = newValue - } + get { _lock.withLock { $0.veryShortMonthSymbols } } + set { _lock.withLock { $0.veryShortMonthSymbols = newValue } } } - internal var _standaloneMonthSymbols: [String]? { willSet { _reset() } } open var standaloneMonthSymbols: [String] { - get { - guard let symbols = _standaloneMonthSymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterStandaloneMonthSymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _standaloneMonthSymbols = newValue - } + get { _lock.withLock { $0.standaloneMonthSymbols } } + set { _lock.withLock { $0.standaloneMonthSymbols = newValue } } } - internal var _shortStandaloneMonthSymbols: [String]? { willSet { _reset() } } open var shortStandaloneMonthSymbols: [String] { - get { - guard let symbols = _shortStandaloneMonthSymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterShortStandaloneMonthSymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _shortStandaloneMonthSymbols = newValue - } + get { _lock.withLock { $0.shortStandaloneMonthSymbols } } + set { _lock.withLock { $0.shortStandaloneMonthSymbols = newValue } } } - internal var _veryShortStandaloneMonthSymbols: [String]? { willSet { _reset() } } open var veryShortStandaloneMonthSymbols: [String] { - get { - guard let symbols = _veryShortStandaloneMonthSymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterVeryShortStandaloneMonthSymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _veryShortStandaloneMonthSymbols = newValue - } + get { _lock.withLock { $0.veryShortStandaloneMonthSymbols } } + set { _lock.withLock { $0.veryShortStandaloneMonthSymbols = newValue } } } - internal var _veryShortWeekdaySymbols: [String]? { willSet { _reset() } } open var veryShortWeekdaySymbols: [String] { - get { - guard let symbols = _veryShortWeekdaySymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterVeryShortWeekdaySymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _veryShortWeekdaySymbols = newValue - } + get { _lock.withLock { $0.veryShortWeekdaySymbols } } + set { _lock.withLock { $0.veryShortWeekdaySymbols = newValue } } } - internal var _standaloneWeekdaySymbols: [String]? { willSet { _reset() } } open var standaloneWeekdaySymbols: [String] { - get { - guard let symbols = _standaloneWeekdaySymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterStandaloneWeekdaySymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _standaloneWeekdaySymbols = newValue - } + get { _lock.withLock { $0.standaloneWeekdaySymbols } } + set { _lock.withLock { $0.standaloneWeekdaySymbols = newValue } } } - internal var _shortStandaloneWeekdaySymbols: [String]? { willSet { _reset() } } open var shortStandaloneWeekdaySymbols: [String] { - get { - guard let symbols = _shortStandaloneWeekdaySymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterShortStandaloneWeekdaySymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _shortStandaloneWeekdaySymbols = newValue - } + get { _lock.withLock { $0.shortStandaloneWeekdaySymbols } } + set { _lock.withLock { $0.shortStandaloneWeekdaySymbols = newValue } } } - - internal var _veryShortStandaloneWeekdaySymbols: [String]? { willSet { _reset() } } + open var veryShortStandaloneWeekdaySymbols: [String] { - get { - guard let symbols = _veryShortStandaloneWeekdaySymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterVeryShortStandaloneWeekdaySymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _veryShortStandaloneWeekdaySymbols = newValue - } + get { _lock.withLock { $0.veryShortStandaloneWeekdaySymbols } } + set { _lock.withLock { $0.veryShortStandaloneWeekdaySymbols = newValue } } } - internal var _quarterSymbols: [String]? { willSet { _reset() } } open var quarterSymbols: [String] { - get { - guard let symbols = _quarterSymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterQuarterSymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _quarterSymbols = newValue - } + get { _lock.withLock { $0.quarterSymbols } } + set { _lock.withLock { $0.quarterSymbols = newValue } } } - - internal var _shortQuarterSymbols: [String]? { willSet { _reset() } } + open var shortQuarterSymbols: [String] { - get { - guard let symbols = _shortQuarterSymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterShortQuarterSymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _shortQuarterSymbols = newValue - } + get { _lock.withLock { $0.shortQuarterSymbols } } + set { _lock.withLock { $0.shortQuarterSymbols = newValue } } } - internal var _standaloneQuarterSymbols: [String]? { willSet { _reset() } } open var standaloneQuarterSymbols: [String] { - get { - guard let symbols = _standaloneQuarterSymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterStandaloneQuarterSymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _standaloneQuarterSymbols = newValue - } + get { _lock.withLock { $0.standaloneQuarterSymbols } } + set { _lock.withLock { $0.standaloneQuarterSymbols = newValue } } } - internal var _shortStandaloneQuarterSymbols: [String]? { willSet { _reset() } } open var shortStandaloneQuarterSymbols: [String] { - get { - guard let symbols = _shortStandaloneQuarterSymbols else { - let cfSymbols = CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterShortStandaloneQuarterSymbols) as! NSArray - return cfSymbols.allObjects as! [String] - } - return symbols - } - set { - _shortStandaloneQuarterSymbols = newValue - } + get { _lock.withLock { $0.shortStandaloneQuarterSymbols } } + set { _lock.withLock { $0.shortStandaloneQuarterSymbols = newValue } } } - internal var _gregorianStartDate: Date? { willSet { _reset() } } open var gregorianStartDate: Date? { - get { - guard let startDate = _gregorianStartDate else { - return (CFDateFormatterCopyProperty(_cfObject, kCFDateFormatterGregorianStartDate) as? NSDate)?._swiftObject - } - return startDate - } - set { - _gregorianStartDate = newValue - } + get { _lock.withLock { $0.gregorianStartDate } } + set { _lock.withLock { $0.gregorianStartDate = newValue } } } - open var doesRelativeDateFormatting = false { willSet { _reset() } } + open var doesRelativeDateFormatting: Bool { + get { _lock.withLock { $0.doesRelativeDateFormatting } } + set { _lock.withLock { $0.doesRelativeDateFormatting = newValue } } + } } extension DateFormatter { - public enum Style : UInt { + public enum Style : UInt, Sendable { case none case short case medium diff --git a/Sources/Foundation/DateIntervalFormatter.swift b/Sources/Foundation/DateIntervalFormatter.swift index 7a08780b7c..c6a837ee83 100644 --- a/Sources/Foundation/DateIntervalFormatter.swift +++ b/Sources/Foundation/DateIntervalFormatter.swift @@ -22,7 +22,7 @@ internal let kCFDateIntervalFormatterBoundaryStyleMinimizeAdjacentMonths = _CFDa extension DateIntervalFormatter { // Keep these in sync with CFDateIntervalFormatterStyle. - public enum Style: UInt { + public enum Style: UInt, Sendable { case none = 0 case short = 1 case medium = 2 @@ -82,20 +82,16 @@ internal extension _CFDateIntervalFormatterBoundaryStyle { // DateIntervalFormatter is used to format the range between two NSDates in a locale-sensitive way. // DateIntervalFormatter returns nil and NO for all methods in Formatter. -open class DateIntervalFormatter: Formatter { - private var _core: AnyObject - private final var core: CFDateIntervalFormatter { - get { unsafeBitCast(_core, to: CFDateIntervalFormatter.self) } - set { _core = newValue } - } +open class DateIntervalFormatter: Formatter, @unchecked Sendable { + private let core: CFDateIntervalFormatter public override init() { - _core = CFDateIntervalFormatterCreate(nil, nil, kCFDateIntervalFormatterShortStyle, kCFDateIntervalFormatterShortStyle) + core = CFDateIntervalFormatterCreate(nil, nil, kCFDateIntervalFormatterShortStyle, kCFDateIntervalFormatterShortStyle) super.init() } private init(cfFormatter: CFDateIntervalFormatter) { - self._core = cfFormatter + self.core = cfFormatter super.init() } @@ -121,7 +117,7 @@ open class DateIntervalFormatter: Formatter { object(of: NSLocale.self, from: coder, forKey: "NS.locale")?._cfObject, object(of: NSCalendar.self, from: coder, forKey: "NS.calendar")?._cfObject, object(of: NSTimeZone.self, from: coder, forKey: "NS.timeZone")?._cfObject) - self._core = core + self.core = core super.init(coder: coder) } diff --git a/Sources/Foundation/DispatchData+DataProtocol.swift b/Sources/Foundation/DispatchData+DataProtocol.swift index e5026e833a..42237c8065 100644 --- a/Sources/Foundation/DispatchData+DataProtocol.swift +++ b/Sources/Foundation/DispatchData+DataProtocol.swift @@ -13,6 +13,9 @@ #if canImport(Dispatch) import Dispatch +@available(*, unavailable) +extension DispatchData.Region : @unchecked Sendable { } + extension DispatchData : DataProtocol { public typealias Regions = [Region] diff --git a/Sources/Foundation/EnergyFormatter.swift b/Sources/Foundation/EnergyFormatter.swift index 8b82765343..4a0aa1d5d5 100644 --- a/Sources/Foundation/EnergyFormatter.swift +++ b/Sources/Foundation/EnergyFormatter.swift @@ -8,7 +8,7 @@ // extension EnergyFormatter { - public enum Unit: Int { + public enum Unit: Int, Sendable { case joule = 11 case kilojoule = 14 @@ -60,6 +60,9 @@ extension EnergyFormatter { } } +@available(*, unavailable) +extension EnergyFormatter : @unchecked Sendable { } + open class EnergyFormatter: Formatter { public override init() { diff --git a/Sources/Foundation/FileHandle.swift b/Sources/Foundation/FileHandle.swift index 72ab09a3f6..b07c49acca 100644 --- a/Sources/Foundation/FileHandle.swift +++ b/Sources/Foundation/FileHandle.swift @@ -57,7 +57,7 @@ extension NSError { /* On Darwin, FileHandle conforms to NSSecureCoding for use with NSXPCConnection and related facilities only. On swift-corelibs-foundation, it does not conform to that protocol since those facilities are unavailable. */ -open class FileHandle : NSObject { +open class FileHandle : NSObject, @unchecked Sendable { #if os(Windows) public private(set) var _handle: HANDLE @@ -160,8 +160,8 @@ open class FileHandle : NSObject { return source } - private var _readabilityHandler: ((FileHandle) -> Void)? = nil // Guarded by privateAsyncVariablesLock - open var readabilityHandler: ((FileHandle) -> Void)? { + private var _readabilityHandler: (@Sendable (FileHandle) -> Void)? = nil // Guarded by privateAsyncVariablesLock + open var readabilityHandler: (@Sendable (FileHandle) -> Void)? { get { privateAsyncVariablesLock.lock() let handler = _readabilityHandler @@ -188,8 +188,8 @@ open class FileHandle : NSObject { } } - private var _writeabilityHandler: ((FileHandle) -> Void)? = nil // Guarded by privateAsyncVariablesLock - open var writeabilityHandler: ((FileHandle) -> Void)? { + private var _writeabilityHandler: (@Sendable (FileHandle) -> Void)? = nil // Guarded by privateAsyncVariablesLock + open var writeabilityHandler: (@Sendable (FileHandle) -> Void)? { get { privateAsyncVariablesLock.lock() let handler = _writeabilityHandler @@ -690,17 +690,17 @@ open class FileHandle : NSObject { // This matches the effect of API_TO_BE_DEPRECATED in ObjC headers: @available(swift, deprecated: 100000, renamed: "readToEnd()") - open func readDataToEndOfFile() -> Data { + public func readDataToEndOfFile() -> Data { return try! readToEnd() ?? Data() } @available(swift, deprecated: 100000, renamed: "read(upToCount:)") - open func readData(ofLength length: Int) -> Data { + public func readData(ofLength length: Int) -> Data { return try! read(upToCount: length) ?? Data() } @available(swift, deprecated: 100000, renamed: "write(contentsOf:)") - open func write(_ data: Data) { + public func write(_ data: Data) { try! write(contentsOf: data) } @@ -711,59 +711,59 @@ open class FileHandle : NSObject { @available(swift, deprecated: 100000, renamed: "seekToEnd()") @discardableResult - open func seekToEndOfFile() -> UInt64 { + public func seekToEndOfFile() -> UInt64 { return try! seekToEnd() } @available(swift, deprecated: 100000, renamed: "seek(toOffset:)") - open func seek(toFileOffset offset: UInt64) { + public func seek(toFileOffset offset: UInt64) { try! seek(toOffset: offset) } @available(swift, deprecated: 100000, renamed: "truncate(atOffset:)") - open func truncateFile(atOffset offset: UInt64) { + public func truncateFile(atOffset offset: UInt64) { try! truncate(atOffset: offset) } @available(swift, deprecated: 100000, renamed: "synchronize()") - open func synchronizeFile() { + public func synchronizeFile() { try! synchronize() } @available(swift, deprecated: 100000, renamed: "close()") - open func closeFile() { + public func closeFile() { try! self.close() } } extension FileHandle { - internal static var _stdinFileHandle: FileHandle = { + internal static let _stdinFileHandle: FileHandle = { return FileHandle(fileDescriptor: STDIN_FILENO, closeOnDealloc: false) }() - open class var standardInput: FileHandle { + public class var standardInput: FileHandle { return _stdinFileHandle } - internal static var _stdoutFileHandle: FileHandle = { + internal static let _stdoutFileHandle: FileHandle = { return FileHandle(fileDescriptor: STDOUT_FILENO, closeOnDealloc: false) }() - open class var standardOutput: FileHandle { + public class var standardOutput: FileHandle { return _stdoutFileHandle } - internal static var _stderrFileHandle: FileHandle = { + internal static let _stderrFileHandle: FileHandle = { return FileHandle(fileDescriptor: STDERR_FILENO, closeOnDealloc: false) }() - open class var standardError: FileHandle { + public class var standardError: FileHandle { return _stderrFileHandle } - internal static var _nulldeviceFileHandle: FileHandle = { - class NullDevice: FileHandle { + internal static let _nulldeviceFileHandle: FileHandle = { + class NullDevice: FileHandle, @unchecked Sendable { override var availableData: Data { return Data() } @@ -804,7 +804,7 @@ extension FileHandle { #endif }() - open class var nullDevice: FileHandle { + public class var nullDevice: FileHandle { return _nulldeviceFileHandle } @@ -865,11 +865,11 @@ public let NSFileHandleNotificationDataItem: String = "NSFileHandleNotificationD public let NSFileHandleNotificationFileHandleItem: String = "NSFileHandleNotificationFileHandleItem" extension FileHandle { - open func readInBackgroundAndNotify() { + public func readInBackgroundAndNotify() { readInBackgroundAndNotify(forModes: [.default]) } - open func readInBackgroundAndNotify(forModes modes: [RunLoop.Mode]?) { + public func readInBackgroundAndNotify(forModes modes: [RunLoop.Mode]?) { #if !canImport(Dispatch) NSUnsupported() #else @@ -930,18 +930,18 @@ extension FileHandle { #endif // canImport(Dispatch) } - open func readToEndOfFileInBackgroundAndNotify() { + public func readToEndOfFileInBackgroundAndNotify() { readToEndOfFileInBackgroundAndNotify(forModes: [.default]) } - open func readToEndOfFileInBackgroundAndNotify(forModes modes: [RunLoop.Mode]?) { + public func readToEndOfFileInBackgroundAndNotify(forModes modes: [RunLoop.Mode]?) { #if !canImport(Dispatch) || !canImport(Dispatch) NSUnsupported() #else privateAsyncVariablesLock.lock() guard currentBackgroundActivityOwner == nil else { fatalError("No two activities can occur at the same time") } - let token = NSObject() + nonisolated(unsafe) let token = NSObject() currentBackgroundActivityOwner = token privateAsyncVariablesLock.unlock() @@ -954,11 +954,7 @@ extension FileHandle { error = nil } catch let thrown { data = nil - if let thrown = thrown as? NSError { - error = thrown.errnoIfAvailable - } else { - error = nil - } + error = (thrown as NSError).errnoIfAvailable } DispatchQueue.main.async { @@ -983,7 +979,7 @@ extension FileHandle { } @available(Windows, unavailable, message: "A SOCKET cannot be treated as a fd") - open func acceptConnectionInBackgroundAndNotify() { + public func acceptConnectionInBackgroundAndNotify() { #if os(Windows) || !canImport(Dispatch) NSUnsupported() #else @@ -992,7 +988,7 @@ extension FileHandle { } @available(Windows, unavailable, message: "A SOCKET cannot be treated as a fd") - open func acceptConnectionInBackgroundAndNotify(forModes modes: [RunLoop.Mode]?) { + public func acceptConnectionInBackgroundAndNotify(forModes modes: [RunLoop.Mode]?) { #if os(Windows) || !canImport(Dispatch) NSUnsupported() #else @@ -1026,11 +1022,11 @@ extension FileHandle { #endif } - open func waitForDataInBackgroundAndNotify() { + public func waitForDataInBackgroundAndNotify() { waitForDataInBackgroundAndNotify(forModes: [.default]) } - open func waitForDataInBackgroundAndNotify(forModes modes: [RunLoop.Mode]?) { + public func waitForDataInBackgroundAndNotify(forModes modes: [RunLoop.Mode]?) { #if !canImport(Dispatch) NSUnsupported() #else @@ -1055,7 +1051,7 @@ extension FileHandle { } } -open class Pipe: NSObject { +open class Pipe: NSObject, @unchecked Sendable { public let fileHandleForReading: FileHandle public let fileHandleForWriting: FileHandle diff --git a/Sources/Foundation/FileManager+POSIX.swift b/Sources/Foundation/FileManager+POSIX.swift index 5ec30db4ea..e89b3bf633 100644 --- a/Sources/Foundation/FileManager+POSIX.swift +++ b/Sources/Foundation/FileManager+POSIX.swift @@ -14,6 +14,7 @@ internal func &(left: UInt32, right: mode_t) -> mode_t { #endif @_implementationOnly import CoreFoundation +internal import Synchronization #if os(WASI) import WASILibc @@ -27,6 +28,10 @@ internal var O_TRUNC: Int32 { _getConst_O_TRUNC() } internal var O_WRONLY: Int32 { _getConst_O_WRONLY() } #endif +#if os(Linux) +fileprivate let previousStatxFailed = Mutex(false) +#endif + @_implementationOnly import CoreFoundation extension FileManager { @@ -257,7 +262,8 @@ extension FileManager { } return try _fileSystemRepresentation(withPath: path) { fsRep in - if supportsStatx { + let statxPreviouslyFailed = previousStatxFailed.withLock { $0 } + if supportsStatx && !statxPreviouslyFailed { var statInfo = stat() var btime = timespec() let statxErrno = _stat_with_btime(fsRep, &statInfo, &btime) @@ -266,7 +272,7 @@ extension FileManager { case EPERM, ENOSYS: // statx() may be blocked by a security mechanism (eg libseccomp or Docker) even if the kernel verison is new enough. EPERM or ENONSYS may be reported. // Dont try to use it in future and fallthough to a normal lstat() call. - supportsStatx = false + previousStatxFailed.withLock { $0 = true } return try _statxFallback(atPath: path, withFileSystemRepresentation: fsRep) default: diff --git a/Sources/Foundation/FileManager+Win32.swift b/Sources/Foundation/FileManager+Win32.swift index 2bf47e7370..c4d2ceaff9 100644 --- a/Sources/Foundation/FileManager+Win32.swift +++ b/Sources/Foundation/FileManager+Win32.swift @@ -108,7 +108,7 @@ extension FileManager { var wszVolumeName: [WCHAR] = Array(repeating: 0, count: Int(MAX_PATH)) - var hVolumes: HANDLE = FindFirstVolumeW(&wszVolumeName, DWORD(wszVolumeName.count)) + let hVolumes: HANDLE = FindFirstVolumeW(&wszVolumeName, DWORD(wszVolumeName.count)) guard hVolumes != INVALID_HANDLE_VALUE else { return nil } defer { FindVolumeClose(hVolumes) } @@ -350,7 +350,7 @@ extension FileManager { guard let _lastReturned else { return firstValidItem() } if _lastReturned.hasDirectoryPath && (level == 0 || !_options.contains(.skipsSubdirectoryDescendants)) { - try walk(directory: _lastReturned) { entry, attributes in + walk(directory: _lastReturned) { entry, attributes in if entry == "." || entry == ".." { return } if _options.contains(.skipsHiddenFiles) && attributes & FILE_ATTRIBUTE_HIDDEN == FILE_ATTRIBUTE_HIDDEN { return @@ -386,7 +386,7 @@ extension FileManager.NSPathDirectoryEnumerator { internal func _nextObject() -> Any? { guard let url = innerEnumerator.nextObject() as? URL else { return nil } - let path: String? = try? baseURL.withUnsafeNTPath { pwszBasePath in + let path: String? = baseURL.withUnsafeNTPath { pwszBasePath in let dwBaseAttrs = GetFileAttributesW(pwszBasePath) if dwBaseAttrs == INVALID_FILE_ATTRIBUTES { return nil } diff --git a/Sources/Foundation/FileManager.swift b/Sources/Foundation/FileManager.swift index 6e973c35b9..a5d75820df 100644 --- a/Sources/Foundation/FileManager.swift +++ b/Sources/Foundation/FileManager.swift @@ -34,25 +34,25 @@ internal let NativeFSREncoding = String.Encoding.utf8.rawValue #if os(Linux) // statx() is only supported by Linux kernels >= 4.11.0 -internal var supportsStatx: Bool = { +internal let supportsStatx: Bool = { let requiredVersion = OperatingSystemVersion(majorVersion: 4, minorVersion: 11, patchVersion: 0) return ProcessInfo.processInfo.isOperatingSystemAtLeast(requiredVersion) }() // renameat2() is only supported by Linux kernels >= 3.15 -internal var kernelSupportsRenameat2: Bool = { +internal let kernelSupportsRenameat2: Bool = { let requiredVersion = OperatingSystemVersion(majorVersion: 3, minorVersion: 15, patchVersion: 0) return ProcessInfo.processInfo.isOperatingSystemAtLeast(requiredVersion) }() #endif // For testing only: this facility pins the language used by displayName to the passed-in language. -private var _overriddenDisplayNameLanguages: [String]? = nil +private nonisolated(unsafe) var _overriddenDisplayNameLanguages: [String]? = nil extension FileManager { /// Returns an array of URLs that identify the mounted volumes available on the device. - open func mountedVolumeURLs(includingResourceValuesForKeys propertyKeys: [URLResourceKey]?, options: VolumeEnumerationOptions = []) -> [URL]? { + public func mountedVolumeURLs(includingResourceValuesForKeys propertyKeys: [URLResourceKey]?, options: VolumeEnumerationOptions = []) -> [URL]? { return _mountedVolumeURLs(includingResourceValuesForKeys: propertyKeys, options: options) } @@ -65,7 +65,7 @@ extension FileManager { If you wish to only receive the URLs and no other attributes, then pass '0' for 'options' and an empty NSArray ('[NSArray array]') for 'keys'. If you wish to have the property caches of the vended URLs pre-populated with a default set of attributes, then pass '0' for 'options' and 'nil' for 'keys'. */ - open func contentsOfDirectory(at url: URL, includingPropertiesForKeys keys: [URLResourceKey]?, options mask: DirectoryEnumerationOptions = []) throws -> [URL] { + public func contentsOfDirectory(at url: URL, includingPropertiesForKeys keys: [URLResourceKey]?, options mask: DirectoryEnumerationOptions = []) throws -> [URL] { var error : Error? = nil let e = self.enumerator(at: url, includingPropertiesForKeys: keys, options: mask.union(.skipsSubdirectoryDescendants)) { (url, err) -> Bool in error = err @@ -91,7 +91,7 @@ extension FileManager { You may pass only one of the values from the NSSearchPathDomainMask enumeration, and you may not pass NSAllDomainsMask. */ - open func url(for directory: SearchPathDirectory, in domain: SearchPathDomainMask, appropriateFor reference: URL?, create + public func url(for directory: SearchPathDirectory, in domain: SearchPathDomainMask, appropriateFor reference: URL?, create shouldCreate: Bool) throws -> URL { var url: URL @@ -186,7 +186,8 @@ extension FileManager { url = attemptedURL break } catch { - if let error = error as? NSError, error.domain == NSCocoaErrorDomain, error.code == CocoaError.fileWriteFileExists.rawValue { + let error = error as NSError + if error.domain == NSCocoaErrorDomain, error.code == CocoaError.fileWriteFileExists.rawValue { attempt += 1 } else { throw error @@ -204,7 +205,7 @@ extension FileManager { /* Sets 'outRelationship' to NSURLRelationshipContains if the directory at 'directoryURL' directly or indirectly contains the item at 'otherURL', meaning 'directoryURL' is found while enumerating parent URLs starting from 'otherURL'. Sets 'outRelationship' to NSURLRelationshipSame if 'directoryURL' and 'otherURL' locate the same item, meaning they have the same NSURLFileResourceIdentifierKey value. If 'directoryURL' is not a directory, or does not contain 'otherURL' and they do not locate the same file, then sets 'outRelationship' to NSURLRelationshipOther. If an error occurs, returns NO and sets 'error'. */ - open func getRelationship(_ outRelationship: UnsafeMutablePointer, ofDirectoryAt directoryURL: URL, toItemAt otherURL: URL) throws { + public func getRelationship(_ outRelationship: UnsafeMutablePointer, ofDirectoryAt directoryURL: URL, toItemAt otherURL: URL) throws { let from = try _canonicalizedPath(toFileAtPath: directoryURL.path) let to = try _canonicalizedPath(toFileAtPath: otherURL.path) @@ -224,7 +225,7 @@ extension FileManager { /* Similar to -[NSFileManager getRelationship:ofDirectoryAtURL:toItemAtURL:error:], except that the directory is instead defined by an NSSearchPathDirectory and NSSearchPathDomainMask. Pass 0 for domainMask to instruct the method to automatically choose the domain appropriate for 'url'. For example, to discover if a file is contained by a Trash directory, call [fileManager getRelationship:&result ofDirectory:NSTrashDirectory inDomain:0 toItemAtURL:url error:&error]. */ - open func getRelationship(_ outRelationship: UnsafeMutablePointer, of directory: SearchPathDirectory, in domainMask: SearchPathDomainMask, toItemAt url: URL) throws { + public func getRelationship(_ outRelationship: UnsafeMutablePointer, of directory: SearchPathDirectory, in domainMask: SearchPathDomainMask, toItemAt url: URL) throws { let actualMask: SearchPathDomainMask if domainMask.isEmpty { @@ -359,7 +360,7 @@ extension FileManager { return try _recursiveDestinationOfSymbolicLink(atPath: path) } - open func fileExists(atPath path: String, isDirectory: UnsafeMutablePointer?) -> Bool { + public func fileExists(atPath path: String, isDirectory: UnsafeMutablePointer?) -> Bool { var isDir: Bool = false defer { if let isDirectory { @@ -383,7 +384,7 @@ extension FileManager { /* displayNameAtPath: returns an NSString suitable for presentation to the user. For directories which have localization information, this will return the appropriate localized string. This string is not suitable for passing to anything that must interact with the filesystem. */ - open func displayName(atPath path: String) -> String { + public func displayName(atPath path: String) -> String { let url = URL(fileURLWithPath: path) let name = url.lastPathComponent @@ -423,7 +424,7 @@ extension FileManager { /* componentsToDisplayForPath: returns an NSArray of display names for the path provided. Localization will occur as in displayNameAtPath: above. This array cannot and should not be reassembled into an usable filesystem path for any kind of access. */ - open func componentsToDisplay(forPath path: String) -> [String]? { + public func componentsToDisplay(forPath path: String) -> [String]? { var url = URL(fileURLWithPath: path) var count = url.pathComponents.count @@ -439,7 +440,7 @@ extension FileManager { /* enumeratorAtPath: returns an NSDirectoryEnumerator rooted at the provided path. If the enumerator cannot be created, this returns NULL. Because NSDirectoryEnumerator is a subclass of NSEnumerator, the returned object can be used in the for...in construct. */ - open func enumerator(atPath path: String) -> DirectoryEnumerator? { + public func enumerator(atPath path: String) -> DirectoryEnumerator? { return NSPathDirectoryEnumerator(path: path) } @@ -448,19 +449,19 @@ extension FileManager { If you wish to only receive the URLs and no other attributes, then pass '0' for 'options' and an empty NSArray ('[NSArray array]') for 'keys'. If you wish to have the property caches of the vended URLs pre-populated with a default set of attributes, then pass '0' for 'options' and 'nil' for 'keys'. */ // Note: Because the error handler is an optional block, the compiler treats it as @escaping by default. If that behavior changes, the @escaping will need to be added back. - open func enumerator(at url: URL, includingPropertiesForKeys keys: [URLResourceKey]?, options mask: DirectoryEnumerationOptions = [], errorHandler handler: (/* @escaping */ (URL, Error) -> Bool)? = nil) -> DirectoryEnumerator? { + public func enumerator(at url: URL, includingPropertiesForKeys keys: [URLResourceKey]?, options mask: DirectoryEnumerationOptions = [], errorHandler handler: (/* @escaping */ (URL, Error) -> Bool)? = nil) -> DirectoryEnumerator? { return NSURLDirectoryEnumerator(url: url, options: mask, errorHandler: handler) } /* subpathsAtPath: returns an NSArray of all contents and subpaths recursively from the provided path. This may be very expensive to compute for deep filesystem hierarchies, and should probably be avoided. */ - open func subpaths(atPath path: String) -> [String]? { + public func subpaths(atPath path: String) -> [String]? { return try? subpathsOfDirectory(atPath: path) } /* fileSystemRepresentationWithPath: returns an array of characters suitable for passing to lower-level POSIX style APIs. The string is provided in the representation most appropriate for the filesystem in question. */ - open func fileSystemRepresentation(withPath path: String) -> UnsafePointer { + public func fileSystemRepresentation(withPath path: String) -> UnsafePointer { precondition(path != "", "Empty path argument") return self.withFileSystemRepresentation(for: path) { ptr in guard let ptr else { @@ -475,7 +476,8 @@ extension FileManager { endIdx = endIdx.advanced(by: 1) let size = ptr.distance(to: endIdx) let buffer = UnsafeMutableBufferPointer.allocate(capacity: size) - buffer.initialize(fromContentsOf: UnsafeBufferPointer(start: ptr, count: size)) + // TODO: This whole function should be obsoleted as it returns a value that the caller must free. This works on Darwin, but is too easy to misuse without the presence of an autoreleasepool on other platforms. + _ = buffer.initialize(fromContentsOf: UnsafeBufferPointer(start: ptr, count: size)) return UnsafePointer(buffer.baseAddress!) } } @@ -521,7 +523,7 @@ extension FileManager { /// - Note: Since this API is under consideration it may be either removed or revised in the near future #if os(Windows) @available(Windows, deprecated, message: "Not yet implemented") - open func replaceItem(at originalItemURL: URL, withItemAt newItemURL: URL, backupItemName: String?, options: ItemReplacementOptions = []) throws -> URL? { + public func replaceItem(at originalItemURL: URL, withItemAt newItemURL: URL, backupItemName: String?, options: ItemReplacementOptions = []) throws -> URL? { NSUnimplemented() } @@ -531,7 +533,7 @@ extension FileManager { } #else - open func replaceItem(at originalItemURL: URL, withItemAt newItemURL: URL, backupItemName: String?, options: ItemReplacementOptions = []) throws -> URL? { + public func replaceItem(at originalItemURL: URL, withItemAt newItemURL: URL, backupItemName: String?, options: ItemReplacementOptions = []) throws -> URL? { return try _replaceItem(at: originalItemURL, withItemAt: newItemURL, backupItemName: backupItemName, options: options) } @@ -541,7 +543,7 @@ extension FileManager { #endif @available(*, unavailable, message: "Returning an object through an autoreleased pointer is not supported in swift-corelibs-foundation. Use replaceItem(at:withItemAt:backupItemName:options:) instead.", renamed: "replaceItem(at:withItemAt:backupItemName:options:)") - open func replaceItem(at originalItemURL: URL, withItemAt newItemURL: URL, backupItemName: String?, options: FileManager.ItemReplacementOptions = [], resultingItemURL resultingURL: UnsafeMutablePointer?) throws { + public func replaceItem(at originalItemURL: URL, withItemAt newItemURL: URL, backupItemName: String?, options: FileManager.ItemReplacementOptions = [], resultingItemURL resultingURL: UnsafeMutablePointer?) throws { NSUnsupported() } @@ -556,7 +558,7 @@ extension FileManager { } extension FileManager { - public struct VolumeEnumerationOptions : OptionSet { + public struct VolumeEnumerationOptions : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -606,6 +608,9 @@ extension FileAttributeKey { internal static let _accessDate = FileAttributeKey(rawValue: "org.swift.Foundation.FileAttributeKey._accessDate") } +@available(*, unavailable) +extension FileManager.DirectoryEnumerator : Sendable { } + extension FileManager { open class DirectoryEnumerator : NSEnumerator { diff --git a/Sources/Foundation/Formatter.swift b/Sources/Foundation/Formatter.swift index 4da8096eee..8c744f7f92 100644 --- a/Sources/Foundation/Formatter.swift +++ b/Sources/Foundation/Formatter.swift @@ -8,7 +8,7 @@ // extension Formatter { - public enum Context : Int { + public enum Context : Int, Sendable { // The capitalization context to be used is unknown (this is the default value). case unknown @@ -35,7 +35,7 @@ extension Formatter { * Long is "3 pounds"; medium is "3 lb"; short is "3#"; */ - public enum UnitStyle : Int { + public enum UnitStyle : Int, Sendable { case short case medium @@ -43,6 +43,7 @@ extension Formatter { } } +//@_nonSendable - TODO: Mark with attribute to indicate this pure abstract class defers Sendable annotation to its subclasses. open class Formatter : NSObject, NSCopying, NSCoding { public override init() { diff --git a/Sources/Foundation/Host.swift b/Sources/Foundation/Host.swift index b5205ebb76..6c4f5291f6 100644 --- a/Sources/Foundation/Host.swift +++ b/Sources/Foundation/Host.swift @@ -55,6 +55,9 @@ import WinSDK } #endif +@available(*, unavailable) +extension Host : @unchecked Sendable { } + open class Host: NSObject { enum ResolveType { case name @@ -67,7 +70,7 @@ open class Host: NSObject { internal var _names = [String]() internal var _addresses = [String]() - static internal let _current = Host(currentHostName(), .current) + static internal let _cachedCurrentHostName = currentHostName() internal init(_ info: String?, _ type: ResolveType) { _info = info @@ -107,7 +110,7 @@ open class Host: NSObject { } open class func current() -> Host { - return _current + return Host(Self._cachedCurrentHostName, .current) } public convenience init(name: String?) { @@ -132,7 +135,7 @@ open class Host: NSObject { var ulResult: ULONG = GetAdaptersAddresses(ULONG(AF_UNSPEC), 0, nil, nil, &ulSize) - var arAdapters: UnsafeMutableRawPointer = + let arAdapters: UnsafeMutableRawPointer = UnsafeMutableRawPointer.allocate(byteCount: Int(ulSize), alignment: 1) defer { arAdapters.deallocate() } @@ -147,7 +150,7 @@ open class Host: NSObject { while pAdapter != nil { // print("Adapter: \(String(cString: pAdapter!.pointee.AdapterName))") - var arAddresses: UnsafeMutablePointer = + let arAddresses: UnsafeMutablePointer = pAdapter!.pointee.FirstUnicastAddress var pAddress: UnsafeMutablePointer? = diff --git a/Sources/Foundation/ISO8601DateFormatter.swift b/Sources/Foundation/ISO8601DateFormatter.swift index 9949b787d0..6afe9da8ca 100644 --- a/Sources/Foundation/ISO8601DateFormatter.swift +++ b/Sources/Foundation/ISO8601DateFormatter.swift @@ -11,7 +11,7 @@ extension ISO8601DateFormatter { - public struct Options : OptionSet { + public struct Options : OptionSet, Sendable { public private(set) var rawValue: UInt @@ -48,6 +48,9 @@ extension ISO8601DateFormatter { } +@available(*, unavailable) +extension ISO8601DateFormatter : @unchecked Sendable { } + open class ISO8601DateFormatter : Formatter, NSSecureCoding { typealias CFType = CFDateFormatter diff --git a/Sources/Foundation/IndexSet.swift b/Sources/Foundation/IndexSet.swift index 5a33576c1c..360fcc094f 100644 --- a/Sources/Foundation/IndexSet.swift +++ b/Sources/Foundation/IndexSet.swift @@ -49,14 +49,14 @@ extension IndexSet.RangeView { /// Manages a `Set` of integer values, which are commonly used as an index type in Cocoa API. /// /// The range of valid integer values is 0.. fileprivate var rangeIndex: Int @@ -833,6 +833,9 @@ extension NSIndexSet : _HasCustomAnyHashableRepresentation { // MARK: Protocol +@available(*, unavailable) +extension _MutablePair : Sendable { } + // TODO: This protocol should be replaced with a native Swift object like the other Foundation bridged types. However, NSIndexSet does not have an abstract zero-storage base class like NSCharacterSet, NSData, and NSAttributedString. Therefore the same trick of laying it out with Swift ref counting does not work.and /// Holds either the immutable or mutable version of a Foundation type. /// @@ -847,7 +850,7 @@ internal enum _MutablePair { /// /// a.k.a. Box @usableFromInline -internal final class _MutablePairHandle +internal final class _MutablePairHandle : @unchecked Sendable where ImmutableType : NSMutableCopying, MutableType : NSMutableCopying { @usableFromInline internal var _pointer: _MutablePair diff --git a/Sources/Foundation/JSONSerialization.swift b/Sources/Foundation/JSONSerialization.swift index e5f9eb0252..dd9e73d1bb 100644 --- a/Sources/Foundation/JSONSerialization.swift +++ b/Sources/Foundation/JSONSerialization.swift @@ -13,7 +13,7 @@ @_implementationOnly import CoreFoundation extension JSONSerialization { - public struct ReadingOptions : OptionSet { + public struct ReadingOptions : OptionSet, Sendable { public let rawValue: UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -25,7 +25,7 @@ extension JSONSerialization { public static let allowFragments = ReadingOptions(rawValue: 1 << 2) } - public struct WritingOptions : OptionSet { + public struct WritingOptions : OptionSet, Sendable { public let rawValue: UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -53,6 +53,9 @@ extension JSONSerialization { - `NSNumber`s are not NaN or infinity */ +@available(*, unavailable) +extension JSONSerialization : @unchecked Sendable { } + open class JSONSerialization : NSObject { /* Determines whether the given object can be converted to JSON. diff --git a/Sources/Foundation/LengthFormatter.swift b/Sources/Foundation/LengthFormatter.swift index 51527f62fe..bab7435a8e 100644 --- a/Sources/Foundation/LengthFormatter.swift +++ b/Sources/Foundation/LengthFormatter.swift @@ -8,7 +8,7 @@ // extension LengthFormatter { - public enum Unit: Int { + public enum Unit: Int, Sendable { case millimeter = 8 case centimeter = 9 case meter = 11 @@ -20,6 +20,9 @@ extension LengthFormatter { } } +@available(*, unavailable) +extension LengthFormatter : @unchecked Sendable { } + open class LengthFormatter : Formatter { public override init() { @@ -54,11 +57,20 @@ open class LengthFormatter : Formatter { // Format a number in meters to a localized string with the locale-appropriate unit and an appropriate scale (e.g. 4.3m = 14.1ft in the US locale). open func string(fromMeters numberInMeters: Double) -> String { + let unitLength: [Unit:UnitLength] = [.millimeter:.millimeters, + .centimeter:.centimeters, + .meter:.meters, + .kilometer:.kilometers, + .inch:.inches, + .foot:.feet, + .yard:.yards, + .mile:.miles] + //Convert to the locale-appropriate unit let unitFromMeters = unit(fromMeters: numberInMeters) //Map the unit to UnitLength type for conversion later - let unitLengthFromMeters = LengthFormatter.unitLength[unitFromMeters]! + let unitLengthFromMeters = unitLength[unitFromMeters]! //Create a measurement object based on the value in meters let meterMeasurement = Measurement(value:numberInMeters, unit: .meters) @@ -96,13 +108,21 @@ open class LengthFormatter : Formatter { // Return the locale-appropriate unit, the same unit used by -stringFromMeters:. open func unitString(fromMeters numberInMeters: Double, usedUnit unitp: UnsafeMutablePointer?) -> String { + let unitLength: [Unit:UnitLength] = [.millimeter:.millimeters, + .centimeter:.centimeters, + .meter:.meters, + .kilometer:.kilometers, + .inch:.inches, + .foot:.feet, + .yard:.yards, + .mile:.miles] //Convert to the locale-appropriate unit let unitFromMeters = unit(fromMeters: numberInMeters) unitp?.pointee = unitFromMeters //Map the unit to UnitLength type for conversion later - let unitLengthFromMeters = LengthFormatter.unitLength[unitFromMeters]! + let unitLengthFromMeters = unitLength[unitFromMeters]! //Create a measurement object based on the value in meters let meterMeasurement = Measurement(value:numberInMeters, unit: .meters) @@ -152,16 +172,6 @@ open class LengthFormatter : Formatter { } } - /// Maps LengthFormatter.Unit enum to UnitLength class. Used for measurement conversion. - private static let unitLength: [Unit:UnitLength] = [.millimeter:.millimeters, - .centimeter:.centimeters, - .meter:.meters, - .kilometer:.kilometers, - .inch:.inches, - .foot:.feet, - .yard:.yards, - .mile:.miles] - /// Maps a unit to its short symbol. Reuses strings from UnitLength wherever possible. private static let shortSymbol: [Unit: String] = [.millimeter:UnitLength.millimeters.symbol, .centimeter:UnitLength.centimeters.symbol, diff --git a/Sources/Foundation/MassFormatter.swift b/Sources/Foundation/MassFormatter.swift index f1886e7832..3a3dd4ebcb 100644 --- a/Sources/Foundation/MassFormatter.swift +++ b/Sources/Foundation/MassFormatter.swift @@ -9,7 +9,7 @@ extension MassFormatter { - public enum Unit : Int { + public enum Unit : Int, Sendable { case gram case kilogram case ounce @@ -17,6 +17,9 @@ extension MassFormatter { case stone } } + +@available(*, unavailable) +extension MassFormatter : @unchecked Sendable { } open class MassFormatter : Formatter { @@ -66,11 +69,17 @@ open class MassFormatter : Formatter { // Format a number in kilograms to a localized string with the locale-appropriate unit and an appropriate scale (e.g. 1.2kg = 2.64lb in the US locale). open func string(fromKilograms numberInKilograms: Double) -> String { + let unitMass: [Unit: UnitMass] = [.gram: .grams, + .kilogram: .kilograms, + .ounce: .ounces, + .pound: .pounds, + .stone: .stones] + //Convert to the locale-appropriate unit let unitFromKilograms = convertedUnit(fromKilograms: numberInKilograms) //Map the unit to UnitMass type for conversion later - let unitMassFromKilograms = MassFormatter.unitMass[unitFromKilograms]! + let unitMassFromKilograms = unitMass[unitFromKilograms]! //Create a measurement object based on the value in kilograms let kilogramMeasurement = Measurement(value:numberInKilograms, unit: .kilograms) @@ -101,12 +110,18 @@ open class MassFormatter : Formatter { // Return the locale-appropriate unit, the same unit used by -stringFromKilograms:. open func unitString(fromKilograms numberInKilograms: Double, usedUnit unitp: UnsafeMutablePointer?) -> String { + let unitMass: [Unit: UnitMass] = [.gram: .grams, + .kilogram: .kilograms, + .ounce: .ounces, + .pound: .pounds, + .stone: .stones] + //Convert to the locale-appropriate unit let unitFromKilograms = convertedUnit(fromKilograms: numberInKilograms) unitp?.pointee = unitFromKilograms //Map the unit to UnitMass type for conversion later - let unitMassFromKilograms = MassFormatter.unitMass[unitFromKilograms]! + let unitMassFromKilograms = unitMass[unitFromKilograms]! //Create a measurement object based on the value in kilograms let kilogramMeasurement = Measurement(value:numberInKilograms, unit: .kilograms) @@ -195,14 +210,7 @@ open class MassFormatter : Formatter { /// The number of pounds in 1 stone private static let poundsPerStone = 14.0 - - /// Maps MassFormatter.Unit enum to UnitMass class. Used for measurement conversion. - private static let unitMass: [Unit: UnitMass] = [.gram: .grams, - .kilogram: .kilograms, - .ounce: .ounces, - .pound: .pounds, - .stone: .stones] - + /// Maps a unit to its short symbol. Reuses strings from UnitMass. private static let shortSymbol: [Unit: String] = [.gram: UnitMass.grams.symbol, .kilogram: UnitMass.kilograms.symbol, diff --git a/Sources/Foundation/Measurement.swift b/Sources/Foundation/Measurement.swift index 028048675f..4865f2cf99 100644 --- a/Sources/Foundation/Measurement.swift +++ b/Sources/Foundation/Measurement.swift @@ -17,6 +17,8 @@ import _SwiftCoreFoundationOverlayShims #endif +extension Measurement : Sendable where UnitType : Sendable { } + /// A `Measurement` is a model type that holds a `Double` value associated with a `Unit`. /// /// Measurements support a large set of operators, including `+`, `-`, `*`, `/`, and a full set of comparison operators. diff --git a/Sources/Foundation/MeasurementFormatter.swift b/Sources/Foundation/MeasurementFormatter.swift index 26d5d32708..6c55914de8 100644 --- a/Sources/Foundation/MeasurementFormatter.swift +++ b/Sources/Foundation/MeasurementFormatter.swift @@ -7,9 +7,12 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +@available(*, unavailable) +extension MeasurementFormatter : @unchecked Sendable { } + @available(*, unavailable, message: "Not supported in swift-corelibs-foundation") open class MeasurementFormatter : Formatter, NSSecureCoding { - public struct UnitOptions : OptionSet { + public struct UnitOptions : OptionSet, Sendable { public private(set) var rawValue: UInt public init(rawValue: UInt) { self.rawValue = rawValue } diff --git a/Sources/Foundation/Morphology.swift b/Sources/Foundation/Morphology.swift index d07a4457b7..bbc5608a04 100644 --- a/Sources/Foundation/Morphology.swift +++ b/Sources/Foundation/Morphology.swift @@ -11,11 +11,11 @@ //===----------------------------------------------------------------------===// @available(macOS 12.0, iOS 15.0, watchOS 8.0, tvOS 15.0, *) -public struct Morphology { +public struct Morphology : Sendable { public init() {} @available(macOS 12.0, iOS 15.0, watchOS 8.0, tvOS 15.0, *) - public enum GrammaticalGender: Int, Hashable { + public enum GrammaticalGender: Int, Hashable, Sendable { case feminine = 1 case masculine case neuter @@ -23,7 +23,7 @@ public struct Morphology { public var grammaticalGender: GrammaticalGender? @available(macOS 12.0, iOS 15.0, watchOS 8.0, tvOS 15.0, *) - public enum PartOfSpeech: Int, Hashable { + public enum PartOfSpeech: Int, Hashable, Sendable { case determiner = 1 case pronoun case letter @@ -42,7 +42,7 @@ public struct Morphology { public var partOfSpeech: PartOfSpeech? @available(macOS 12.0, iOS 15.0, watchOS 8.0, tvOS 15.0, *) - public enum GrammaticalNumber: Int, Hashable { + public enum GrammaticalNumber: Int, Hashable, Sendable { case singular = 1 case zero case plural @@ -56,7 +56,7 @@ public struct Morphology { } @available(macOS 12.0, iOS 15.0, watchOS 8.0, tvOS 15.0, *) -public enum InflectionRule { +public enum InflectionRule : Sendable { case automatic case explicit(Morphology) @@ -294,7 +294,7 @@ extension Morphology { } @available(macOS 12.0, iOS 15.0, watchOS 8.0, tvOS 15.0, *) - public struct CustomPronoun { + public struct CustomPronoun : Sendable { public init() {} public static func isSupported(forLanguage language: String) -> Bool { diff --git a/Sources/Foundation/NSArray.swift b/Sources/Foundation/NSArray.swift index 096c090b51..5d4699e3c2 100644 --- a/Sources/Foundation/NSArray.swift +++ b/Sources/Foundation/NSArray.swift @@ -9,6 +9,12 @@ @_implementationOnly import CoreFoundation +@available(*, unavailable) +extension NSArray : @unchecked Sendable { } + +@available(*, unavailable) +extension NSArray.Iterator : Sendable { } + open class NSArray : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCoding, ExpressibleByArrayLiteral { private let _cfinfo = _CFInfo(typeID: CFArrayGetTypeID()) internal var _storage = [AnyObject]() @@ -737,7 +743,7 @@ extension Array : _NSBridgeable { internal var _cfObject: CFArray { return _nsObject._cfObject } } -public struct NSBinarySearchingOptions : OptionSet { +public struct NSBinarySearchingOptions : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -961,24 +967,26 @@ open class NSMutableArray : NSArray { open func sort(using sortDescriptors: [NSSortDescriptor]) { var descriptors = sortDescriptors._nsObject - CFArraySortValues(_cfMutableObject, CFRangeMake(0, count), { (lhsPointer, rhsPointer, context) -> CFComparisonResult in - let descriptors = context!.assumingMemoryBound(to: NSArray.self).pointee._swiftObject - - for item in descriptors { - let descriptor = item as! NSSortDescriptor - let result = - descriptor.compare(__SwiftValue.fetch(Unmanaged.fromOpaque(lhsPointer!).takeUnretainedValue())!, - to: __SwiftValue.fetch(Unmanaged.fromOpaque(rhsPointer!).takeUnretainedValue())!) + withUnsafeMutablePointer(to: &descriptors) { descriptors in + CFArraySortValues(_cfMutableObject, CFRangeMake(0, count), { (lhsPointer, rhsPointer, context) -> CFComparisonResult in + let descriptors = context!.assumingMemoryBound(to: NSArray.self).pointee._swiftObject - if result == .orderedAscending { - return kCFCompareLessThan - } else if result == .orderedDescending { - return kCFCompareGreaterThan + for item in descriptors { + let descriptor = item as! NSSortDescriptor + let result = + descriptor.compare(__SwiftValue.fetch(Unmanaged.fromOpaque(lhsPointer!).takeUnretainedValue())!, + to: __SwiftValue.fetch(Unmanaged.fromOpaque(rhsPointer!).takeUnretainedValue())!) + + if result == .orderedAscending { + return kCFCompareLessThan + } else if result == .orderedDescending { + return kCFCompareGreaterThan + } } - } - - return kCFCompareEqualTo - }, &descriptors) + + return kCFCompareEqualTo + }, descriptors) + } } } diff --git a/Sources/Foundation/NSAttributedString.swift b/Sources/Foundation/NSAttributedString.swift index 4f7523f179..c83818d720 100644 --- a/Sources/Foundation/NSAttributedString.swift +++ b/Sources/Foundation/NSAttributedString.swift @@ -10,7 +10,7 @@ @_implementationOnly import CoreFoundation extension NSAttributedString { - public struct Key: RawRepresentable, Equatable, Hashable { + public struct Key: RawRepresentable, Equatable, Hashable, Sendable { public let rawValue: String public init(_ rawValue: String) { @@ -46,6 +46,9 @@ extension NSAttributedString.Key: _ObjectiveCBridgeable { @available(*, unavailable, renamed: "NSAttributedString.Key") public typealias NSAttributedStringKey = NSAttributedString.Key +@available(*, unavailable) +extension NSAttributedString : @unchecked Sendable { } + open class NSAttributedString: NSObject, NSCopying, NSMutableCopying, NSSecureCoding { private let _cfinfo = _CFInfo(typeID: CFAttributedStringGetTypeID()) @@ -421,7 +424,7 @@ extension NSAttributedString { extension NSAttributedString { - public struct EnumerationOptions: OptionSet { + public struct EnumerationOptions: OptionSet, Sendable { public let rawValue: UInt public init(rawValue: UInt) { self.rawValue = rawValue @@ -432,7 +435,6 @@ extension NSAttributedString { } - open class NSMutableAttributedString : NSAttributedString { open func replaceCharacters(in range: NSRange, with str: String) { diff --git a/Sources/Foundation/NSCFBoolean.swift b/Sources/Foundation/NSCFBoolean.swift index adb48ac535..c54cca02a2 100644 --- a/Sources/Foundation/NSCFBoolean.swift +++ b/Sources/Foundation/NSCFBoolean.swift @@ -10,7 +10,7 @@ @_implementationOnly import CoreFoundation -internal class __NSCFBoolean : NSNumber { +internal class __NSCFBoolean : NSNumber, @unchecked Sendable { override var hash: Int { return Int(bitPattern: CFHash(unsafeBitCast(self, to: CFBoolean.self))) } diff --git a/Sources/Foundation/NSCFCharacterSet.swift b/Sources/Foundation/NSCFCharacterSet.swift index b4431b7547..bff3e8a00c 100644 --- a/Sources/Foundation/NSCFCharacterSet.swift +++ b/Sources/Foundation/NSCFCharacterSet.swift @@ -93,7 +93,8 @@ internal func _CFSwiftCharacterSetCharacterIsMember(_ cset: CFTypeRef, _ ch: Un } internal func _CFSwiftCharacterSetMutableCopy(_ cset: CFTypeRef) -> Unmanaged { - return Unmanaged.passRetained(unsafeBitCast((cset as! NSCharacterSet).mutableCopy(), to: CFMutableCharacterSet.self)) + let copy = (cset as! NSCharacterSet).mutableCopy() as! NSMutableCharacterSet + return Unmanaged.passRetained(unsafeDowncast(copy, to: CFMutableCharacterSet.self)) } internal func _CFSwiftCharacterSetLongCharacterIsMember(_ cset: CFTypeRef, _ ch:UInt32) -> Bool { diff --git a/Sources/Foundation/NSCache.swift b/Sources/Foundation/NSCache.swift index cf616bc770..844d0a9c30 100644 --- a/Sources/Foundation/NSCache.swift +++ b/Sources/Foundation/NSCache.swift @@ -53,6 +53,9 @@ fileprivate class NSCacheKey: NSObject { } } +@available(*, unavailable) +extension NSCache : @unchecked Sendable { } + open class NSCache : NSObject { private var _entries = Dictionary>() diff --git a/Sources/Foundation/NSCalendar.swift b/Sources/Foundation/NSCalendar.swift index 25e1a7054a..20774d22d9 100644 --- a/Sources/Foundation/NSCalendar.swift +++ b/Sources/Foundation/NSCalendar.swift @@ -31,7 +31,7 @@ internal func _CFCalendarUnitRawValue(_ unit: CFCalendarUnit) -> CFOptionFlags { extension NSCalendar { // This is not the same as Calendar.Identifier due to a spelling difference in ISO8601 - public struct Identifier : RawRepresentable, Equatable, Hashable, Comparable { + public struct Identifier : RawRepresentable, Equatable, Hashable, Comparable, Sendable { public private(set) var rawValue: String public init(_ rawValue: String) { self.rawValue = rawValue @@ -125,7 +125,7 @@ extension NSCalendar { } - public struct Unit: OptionSet { + public struct Unit: OptionSet, Sendable { public let rawValue: UInt public init(rawValue: UInt) { self.rawValue = rawValue @@ -198,7 +198,7 @@ extension NSCalendar { } - public struct Options : OptionSet { + public struct Options : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -219,6 +219,9 @@ extension NSCalendar.Identifier { } } +@available(*, unavailable) +extension NSCalendar : @unchecked Sendable { } + open class NSCalendar : NSObject, NSCopying, NSSecureCoding { var _calendar: Calendar diff --git a/Sources/Foundation/NSCharacterSet.swift b/Sources/Foundation/NSCharacterSet.swift index b1491b340f..6e153906ba 100644 --- a/Sources/Foundation/NSCharacterSet.swift +++ b/Sources/Foundation/NSCharacterSet.swift @@ -60,6 +60,9 @@ fileprivate extension String { static let characterSetNewIsInvertedKey = "NSIsInverted2" } +@available(*, unavailable) +extension NSCharacterSet : @unchecked Sendable { } + open class NSCharacterSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding { typealias CFType = CFCharacterSet private var _base = _CFInfo(typeID: CFCharacterSetGetTypeID()) diff --git a/Sources/Foundation/NSCoder.swift b/Sources/Foundation/NSCoder.swift index 3dd5d87641..61fd20c442 100644 --- a/Sources/Foundation/NSCoder.swift +++ b/Sources/Foundation/NSCoder.swift @@ -13,7 +13,7 @@ extension NSCoder { /// failures (e.g. corrupt data) for non-TopLevel decodes. Darwin platfrom /// supports exceptions here, and there may be other approaches supported /// in the future, so its included for completeness. - public enum DecodingFailurePolicy : Int { + public enum DecodingFailurePolicy : Int, Sendable { case raiseException case setErrorAndReturn } @@ -100,6 +100,7 @@ public protocol NSSecureCoding : NSCoding { /// is normally of the same class as the object that was originally encoded into /// the stream. An object can change its class when encoded, however; this is /// described in Archives and Serializations Programming Guide. +//@_nonSendable - TODO: Mark with attribute to indicate this pure abstract class defers Sendable annotation to its subclasses. open class NSCoder : NSObject { internal var _pendingBuffers = Array<(UnsafeMutableRawPointer, Int)>() @@ -732,7 +733,7 @@ open class NSCoder : NSObject { } open func failWithError(_ error: Error) { - if let debugDescription = (error as? NSError)?.userInfo[NSDebugDescriptionErrorKey] { + if let debugDescription = (error as NSError).userInfo[NSDebugDescriptionErrorKey] { NSLog("*** NSKeyedUnarchiver.init: \(debugDescription)") } else { NSLog("*** NSKeyedUnarchiver.init: decoding error") diff --git a/Sources/Foundation/NSComparisonPredicate.swift b/Sources/Foundation/NSComparisonPredicate.swift index a7f5f00eb5..c3a35da465 100644 --- a/Sources/Foundation/NSComparisonPredicate.swift +++ b/Sources/Foundation/NSComparisonPredicate.swift @@ -29,7 +29,7 @@ open class NSComparisonPredicate : NSPredicate { @available(*, unavailable, message: "NSComparisonPredicate is unavailable.") open var options: Options { NSUnsupported() } - public struct Options : OptionSet { + public struct Options : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -39,14 +39,14 @@ open class NSComparisonPredicate : NSPredicate { } // Describes how the operator is modified: can be direct, ALL, or ANY - public enum Modifier : UInt { + public enum Modifier : UInt, Sendable { case direct // Do a direct comparison case all // ALL toMany.x = y case any // ANY toMany.x = y } // Type basic set of operators defined. Most are obvious - public enum Operator : UInt { + public enum Operator : UInt, Sendable { case lessThan // compare: returns NSOrderedAscending case lessThanOrEqualTo // compare: returns NSOrderedAscending || NSOrderedSame case greaterThan // compare: returns NSOrderedDescending diff --git a/Sources/Foundation/NSCompoundPredicate.swift b/Sources/Foundation/NSCompoundPredicate.swift index 8f8ad79497..15cd108f46 100644 --- a/Sources/Foundation/NSCompoundPredicate.swift +++ b/Sources/Foundation/NSCompoundPredicate.swift @@ -11,7 +11,7 @@ // Compound predicates are predicates which act on the results of evaluating other operators. We provide the basic boolean operators: AND, OR, and NOT. extension NSCompoundPredicate { - public enum LogicalType : UInt { + public enum LogicalType : UInt, Sendable { case not case and case or diff --git a/Sources/Foundation/NSConcreteValue.swift b/Sources/Foundation/NSConcreteValue.swift index ea796c8825..c28f5b2547 100644 --- a/Sources/Foundation/NSConcreteValue.swift +++ b/Sources/Foundation/NSConcreteValue.swift @@ -8,8 +8,9 @@ // @_implementationOnly import CoreFoundation +internal import Synchronization -internal class NSConcreteValue : NSValue { +internal class NSConcreteValue : NSValue, @unchecked Sendable { struct TypeInfo : Equatable { let size : Int @@ -61,22 +62,20 @@ internal class NSConcreteValue : NSValue { } } - private static var _cachedTypeInfo = Dictionary() - private static var _cachedTypeInfoLock = NSLock() + private static let _cachedTypeInfo = Mutex(Dictionary()) private var _typeInfo : TypeInfo private var _storage : UnsafeMutableRawPointer required init(bytes value: UnsafeRawPointer, objCType type: UnsafePointer) { let spec = String(cString: type) - var typeInfo : TypeInfo? = nil - - NSConcreteValue._cachedTypeInfoLock.synchronized { - typeInfo = NSConcreteValue._cachedTypeInfo[spec] + let typeInfo = NSConcreteValue._cachedTypeInfo.withLock { + var typeInfo = $0[spec] if typeInfo == nil { typeInfo = TypeInfo(objCType: spec) - NSConcreteValue._cachedTypeInfo[spec] = typeInfo + $0[spec] = typeInfo } + return typeInfo } guard typeInfo != nil else { @@ -122,7 +121,7 @@ internal class NSConcreteValue : NSValue { let typep = type._swiftObject // FIXME: This will result in reading garbage memory. - self.init(bytes: [], objCType: typep) + self.init(bytes: Array(), objCType: typep) aDecoder.decodeValue(ofObjCType: typep, at: self.value) } diff --git a/Sources/Foundation/NSData.swift b/Sources/Foundation/NSData.swift index 21b1230d35..ae54f971ec 100644 --- a/Sources/Foundation/NSData.swift +++ b/Sources/Foundation/NSData.swift @@ -31,6 +31,12 @@ private let __kCFBytesInline: CFOptionFlags = 2 private let __kCFUseAllocator: CFOptionFlags = 3 private let __kCFDontDeallocate: CFOptionFlags = 4 +@available(*, unavailable) +extension NSData : @unchecked Sendable { } + +@available(*, unavailable) +extension NSData.NSDataReadResult : Sendable { } + open class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding { typealias CFType = CFData @@ -928,6 +934,7 @@ extension CFData : _NSBridgeable, _SwiftBridgeable { } // MARK: - + open class NSMutableData : NSData { internal final var _cfMutableObject: CFMutableData { return unsafeBitCast(self, to: CFMutableData.self) } diff --git a/Sources/Foundation/NSDate.swift b/Sources/Foundation/NSDate.swift index 677d883c7e..ac7bd1bc9c 100644 --- a/Sources/Foundation/NSDate.swift +++ b/Sources/Foundation/NSDate.swift @@ -36,7 +36,7 @@ extension timeval { } #endif -open class NSDate : NSObject, NSCopying, NSSecureCoding, NSCoding { +open class NSDate : NSObject, NSCopying, NSSecureCoding, NSCoding, @unchecked Sendable { typealias CFType = CFDate open override var hash: Int { @@ -159,23 +159,23 @@ open class NSDate : NSObject, NSCopying, NSSecureCoding, NSCoding { extension NSDate { - open func timeIntervalSince(_ anotherDate: Date) -> TimeInterval { + public func timeIntervalSince(_ anotherDate: Date) -> TimeInterval { return self.timeIntervalSinceReferenceDate - anotherDate.timeIntervalSinceReferenceDate } - open var timeIntervalSinceNow: TimeInterval { + public var timeIntervalSinceNow: TimeInterval { return timeIntervalSince(Date()) } - open var timeIntervalSince1970: TimeInterval { + public var timeIntervalSince1970: TimeInterval { return timeIntervalSinceReferenceDate + NSTimeIntervalSince1970 } - open func addingTimeInterval(_ ti: TimeInterval) -> Date { + public func addingTimeInterval(_ ti: TimeInterval) -> Date { return Date(timeIntervalSinceReferenceDate:_timeIntervalSinceReferenceDate + ti) } - open func earlierDate(_ anotherDate: Date) -> Date { + public func earlierDate(_ anotherDate: Date) -> Date { if self.timeIntervalSinceReferenceDate < anotherDate.timeIntervalSinceReferenceDate { return Date(timeIntervalSinceReferenceDate: timeIntervalSinceReferenceDate) } else { @@ -183,7 +183,7 @@ extension NSDate { } } - open func laterDate(_ anotherDate: Date) -> Date { + public func laterDate(_ anotherDate: Date) -> Date { if self.timeIntervalSinceReferenceDate < anotherDate.timeIntervalSinceReferenceDate { return anotherDate } else { @@ -191,7 +191,7 @@ extension NSDate { } } - open func compare(_ other: Date) -> ComparisonResult { + public func compare(_ other: Date) -> ComparisonResult { let t1 = self.timeIntervalSinceReferenceDate let t2 = other.timeIntervalSinceReferenceDate if t1 < t2 { @@ -203,19 +203,19 @@ extension NSDate { } } - open func isEqual(to otherDate: Date) -> Bool { + public func isEqual(to otherDate: Date) -> Bool { return timeIntervalSinceReferenceDate == otherDate.timeIntervalSinceReferenceDate } } extension NSDate { internal static let _distantFuture = Date(timeIntervalSinceReferenceDate: 63113904000.0) - open class var distantFuture: Date { + public class var distantFuture: Date { return _distantFuture } internal static let _distantPast = Date(timeIntervalSinceReferenceDate: -63113904000.0) - open class var distantPast: Date { + public class var distantPast: Date { return _distantPast } @@ -241,14 +241,14 @@ extension Date : CustomPlaygroundDisplayConvertible { } } -open class NSDateInterval : NSObject, NSCopying, NSSecureCoding { +open class NSDateInterval : NSObject, NSCopying, NSSecureCoding, @unchecked Sendable { /* NSDateInterval represents a closed date interval in the form of [startDate, endDate]. It is possible for the start and end dates to be the same with a duration of 0. NSDateInterval does not support reverse intervals i.e. intervals where the duration is less than 0 and the end date occurs earlier in time than the start date. */ - open private(set) var startDate: Date + public let startDate: Date open var endDate: Date { get { @@ -260,7 +260,7 @@ open class NSDateInterval : NSObject, NSCopying, NSSecureCoding { } } - open private(set) var duration: TimeInterval + public let duration: TimeInterval // This method initializes an NSDateInterval object with start and end dates set to the current date and the duration set to 0. diff --git a/Sources/Foundation/NSDateComponents.swift b/Sources/Foundation/NSDateComponents.swift index 03757bb26e..93462d7fca 100644 --- a/Sources/Foundation/NSDateComponents.swift +++ b/Sources/Foundation/NSDateComponents.swift @@ -29,7 +29,10 @@ // or quantities of the units. // When you create a new one of these, all values begin Undefined. -public var NSDateComponentUndefined: Int = Int.max +public let NSDateComponentUndefined: Int = Int.max + +@available(*, unavailable) +extension NSDateComponents : @unchecked Sendable { } open class NSDateComponents: NSObject, NSCopying, NSSecureCoding { internal var _components: DateComponents diff --git a/Sources/Foundation/NSDecimalNumber.swift b/Sources/Foundation/NSDecimalNumber.swift index cb3e51dfeb..b669769c77 100644 --- a/Sources/Foundation/NSDecimalNumber.swift +++ b/Sources/Foundation/NSDecimalNumber.swift @@ -10,8 +10,8 @@ @_spi(SwiftCorelibsFoundation) import FoundationEssentials /*************** Exceptions ***********/ -public struct NSExceptionName : RawRepresentable, Equatable, Hashable { - public private(set) var rawValue: String +public struct NSExceptionName : RawRepresentable, Equatable, Hashable, Sendable { + public let rawValue: String public init(_ rawValue: String) { self.rawValue = rawValue @@ -60,7 +60,7 @@ fileprivate func handle(_ error: NSDecimalNumber.CalculationError, _ handler: NS } /*************** NSDecimalNumber: the class ***********/ -open class NSDecimalNumber : NSNumber { +open class NSDecimalNumber : NSNumber, @unchecked Sendable { fileprivate let decimal: Decimal public convenience init(mantissa: UInt64, exponent: Int16, isNegative: Bool) { @@ -214,7 +214,7 @@ open class NSDecimalNumber : NSNumber { return NSDecimalNumber(integerLiteral: 1) } open class var minimum: NSDecimalNumber { - return NSDecimalNumber(decimal:Decimal.leastFiniteMagnitude) + return NSDecimalNumber(decimal:-Decimal.greatestFiniteMagnitude) } open class var maximum: NSDecimalNumber { return NSDecimalNumber(decimal:Decimal.greatestFiniteMagnitude) @@ -407,7 +407,7 @@ open class NSDecimalNumber : NSNumber { return false } - override var _swiftValueOfOptimalType: Any { + override var _swiftValueOfOptimalType: (Any & Sendable) { return decimal } } @@ -416,7 +416,7 @@ open class NSDecimalNumber : NSNumber { /*********** A class for defining common behaviors *******/ -open class NSDecimalNumberHandler : NSObject, NSDecimalNumberBehaviors, NSCoding { +open class NSDecimalNumberHandler : NSObject, NSDecimalNumberBehaviors, NSCoding, @unchecked Sendable { static let defaultBehavior = NSDecimalNumberHandler() diff --git a/Sources/Foundation/NSDictionary.swift b/Sources/Foundation/NSDictionary.swift index c1d118088a..5cf7a45fef 100644 --- a/Sources/Foundation/NSDictionary.swift +++ b/Sources/Foundation/NSDictionary.swift @@ -35,6 +35,11 @@ fileprivate func getDescription(of object: Any) -> String? { } } +@available(*, unavailable) +extension NSDictionary : @unchecked Sendable { } + +@available(*, unavailable) +extension NSDictionary.Iterator : Sendable { } open class NSDictionary : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCoding, ExpressibleByDictionaryLiteral { private let _cfinfo = _CFInfo(typeID: CFDictionaryGetTypeID()) @@ -546,19 +551,10 @@ open class NSDictionary : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, } } -#if !os(WASI) - if opts.contains(.concurrent) { - DispatchQueue.concurrentPerform(iterations: count, execute: iteration) - } else { - for idx in 0.. Any { + public class func sharedKeySet(forKeys keys: [NSCopying]) -> Any { return sharedKeySetPlaceholder } } diff --git a/Sources/Foundation/NSEnumerator.swift b/Sources/Foundation/NSEnumerator.swift index 57795783eb..1add2e0126 100644 --- a/Sources/Foundation/NSEnumerator.swift +++ b/Sources/Foundation/NSEnumerator.swift @@ -7,6 +7,10 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +@available(*, unavailable) +extension NSEnumerator.Iterator : Sendable { } + +//@_nonSendable - TODO: Mark with attribute to indicate this pure abstract class defers Sendable annotation to its subclasses. open class NSEnumerator : NSObject { open func nextObject() -> Any? { diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index d84e54e5c7..af7fe0e54d 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -19,6 +19,7 @@ import CRT #endif @_implementationOnly import CoreFoundation +internal import Synchronization public typealias NSErrorDomain = NSString @@ -47,7 +48,7 @@ public let NSStringEncodingErrorKey: String = "NSStringEncodingErrorKey" public let NSURLErrorKey: String = "NSURL" public let NSFilePathErrorKey: String = "NSFilePath" -open class NSError : NSObject, NSCopying, NSSecureCoding, NSCoding { +open class NSError : NSObject, NSCopying, NSSecureCoding, NSCoding, @unchecked Sendable { typealias CFType = CFError internal final var _cfObject: CFType { @@ -55,13 +56,11 @@ open class NSError : NSObject, NSCopying, NSSecureCoding, NSCoding { } // ErrorType forbids this being internal - open var _domain: String - open var _code: Int - /// - Experiment: This is a draft API currently under consideration for official import into Foundation + public let _domain: String + public let _code: Int /// - Note: This API differs from Darwin because it uses [String : Any] as a type instead of [String : AnyObject]. This allows the use of Swift value types. - private var _userInfo: [String : Any]? + private let _userInfo: [String : Any]? - /// - Experiment: This is a draft API currently under consideration for official import into Foundation /// - Note: This API differs from Darwin because it uses [String : Any] as a type instead of [String : AnyObject]. This allows the use of Swift value types. public init(domain: String, code: Int, userInfo dict: [String : Any]? = nil) { _domain = domain @@ -84,6 +83,8 @@ open class NSError : NSObject, NSCopying, NSSecureCoding, NSCoding { } }) _userInfo = filteredUserInfo + } else { + _userInfo = nil } } @@ -169,15 +170,15 @@ open class NSError : NSObject, NSCopying, NSSecureCoding, NSCoding { return userInfo[NSHelpAnchorErrorKey] as? String } - internal typealias UserInfoProvider = (_ error: Error, _ key: String) -> Any? - internal static var userInfoProviders = [String: UserInfoProvider]() + internal typealias UserInfoProvider = @Sendable (_ error: Error, _ key: String) -> Any? + internal static let userInfoProviders = Mutex<[String: UserInfoProvider]>([:]) - open class func setUserInfoValueProvider(forDomain errorDomain: String, provider: (/* @escaping */ (Error, String) -> Any?)?) { - NSError.userInfoProviders[errorDomain] = provider + open class func setUserInfoValueProvider(forDomain errorDomain: String, provider: (@Sendable (Error, String) -> Any?)?) { + NSError.userInfoProviders.withLock { $0[errorDomain] = provider } } - open class func userInfoValueProvider(forDomain errorDomain: String) -> ((Error, String) -> Any?)? { - return NSError.userInfoProviders[errorDomain] + open class func userInfoValueProvider(forDomain errorDomain: String) -> (@Sendable (Error, String) -> Any?)? { + NSError.userInfoProviders.withLock { $0[errorDomain] } } override open var description: String { @@ -219,6 +220,9 @@ extension CFError : _NSBridgeable { } } +@available(*, unavailable) +extension _CFErrorSPIForFoundationXMLUseOnly : Sendable { } + public struct _CFErrorSPIForFoundationXMLUseOnly { let error: AnyObject public init(unsafelyAssumingIsCFError error: AnyObject) { @@ -353,12 +357,7 @@ public extension Error where Self: CustomNSError, Self: RawRepresentable, Self.R public extension Error { /// Retrieve the localized description for this error. var localizedDescription: String { - if let nsError = self as? NSError { - return nsError.localizedDescription - } - - let defaultUserInfo = _swift_Foundation_getErrorDefaultUserInfo(self) as? [String : Any] - return NSError(domain: _domain, code: _code, userInfo: defaultUserInfo).localizedDescription + (self as NSError).localizedDescription } } @@ -721,7 +720,7 @@ extension CocoaError: _ObjectiveCBridgeable { } /// Describes errors in the URL error domain. -public struct URLError : _BridgedStoredNSError { +public struct URLError : _BridgedStoredNSError, Sendable { public let _nsError: NSError public init(_nsError error: NSError) { @@ -731,7 +730,7 @@ public struct URLError : _BridgedStoredNSError { public static var _nsErrorDomain: String { return NSURLErrorDomain } - public enum Code : Int, _ErrorCodeProtocol { + public enum Code : Int, _ErrorCodeProtocol, Sendable { public typealias _ErrorType = URLError case unknown = -1 @@ -884,7 +883,7 @@ func _convertNSErrorToError(_ error: NSError?) -> Error { public // COMPILER_INTRINSIC func _convertErrorToNSError(_ error: Error) -> NSError { if let object = _extractDynamicValue(error as Any) { - return unsafeBitCast(object, to: NSError.self) + return unsafeDowncast(object, to: NSError.self) } else { let domain: String let code: Int diff --git a/Sources/Foundation/NSExpression.swift b/Sources/Foundation/NSExpression.swift index 4ed7c30a75..3a44cf685c 100644 --- a/Sources/Foundation/NSExpression.swift +++ b/Sources/Foundation/NSExpression.swift @@ -9,8 +9,9 @@ // Expressions are the core of the predicate implementation. When expressionValueWithObject: is called, the expression is evaluated, and a value returned which can then be handled by an operator. Expressions can be anything from constants to method invocations. Scalars should be wrapped in appropriate NSValue classes. +@available(*, deprecated, message: "NSExpression is not available in swift-corelibs-foundation") extension NSExpression { - public enum ExpressionType : UInt { + public enum ExpressionType : UInt, Sendable { case constantValue // Expression that always returns the same value case evaluatedObject // Expression that always returns the parameter object itself @@ -28,6 +29,9 @@ extension NSExpression { } } +@available(*, unavailable) +extension NSExpression : @unchecked Sendable { } + @available(*, deprecated, message: "NSExpression is not available in swift-corelibs-foundation") open class NSExpression : NSObject, NSCopying { diff --git a/Sources/Foundation/NSIndexPath.swift b/Sources/Foundation/NSIndexPath.swift index 9464d780c4..0f1f81d400 100644 --- a/Sources/Foundation/NSIndexPath.swift +++ b/Sources/Foundation/NSIndexPath.swift @@ -7,6 +7,8 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +@available(*, unavailable) +extension NSIndexPath : @unchecked Sendable { } open class NSIndexPath : NSObject, NSCopying, NSSecureCoding { diff --git a/Sources/Foundation/NSIndexSet.swift b/Sources/Foundation/NSIndexSet.swift index cd2cd2a893..80458c9361 100644 --- a/Sources/Foundation/NSIndexSet.swift +++ b/Sources/Foundation/NSIndexSet.swift @@ -59,6 +59,9 @@ internal func __NSIndexSetIndexOfRangeContainingIndex(_ indexSet: NSIndexSet, _ return NSNotFound } +@available(*, unavailable) +extension NSIndexSet : @unchecked Sendable { } + open class NSIndexSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding { // all instance variables are private @@ -506,19 +509,11 @@ open class NSIndexSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding { } } } -#if !os(WASI) - if opts.contains(.concurrent) { - DispatchQueue.concurrentPerform(iterations: Int(rangeSequence.count), execute: iteration) - } else { - for idx in 0..() - private static var _classNameMapLock = NSLock() + private static let _globalClassNameMap = Mutex>([:]) private var _stream : AnyObject private var _flags = ArchiverFlags(rawValue: 0) @@ -223,7 +226,7 @@ open class NSKeyedArchiver : NSCoder { success = true } } else { - let stream = unsafeBitCast(self._stream, to: CFWriteStream.self) + let stream = unsafeDowncast(self._stream, to: CFWriteStream.self) success = CFPropertyListWrite(plist, stream, kCFPropertyListXMLFormat_v1_0, 0, nil) > 0 } @@ -299,8 +302,8 @@ open class NSKeyedArchiver : NSCoder { /// - cls: The class for which to set up a translation mapping. open class func setClassName(_ codedName: String?, for cls: AnyClass) { let clsName = String(describing: type(of: cls)) - _classNameMapLock.synchronized { - _classNameMap[clsName] = codedName + _globalClassNameMap.withLock { + $0[clsName] = codedName } } @@ -907,13 +910,9 @@ open class NSKeyedArchiver : NSCoder { /// Returns `nil` if `NSKeyedArchiver` does not have a translation mapping for `cls`. open class func classNameForClass(_ cls: AnyClass) -> String? { let clsName = String(reflecting: cls) - var mappedClass : String? - - _classNameMapLock.synchronized { - mappedClass = _classNameMap[clsName] + return _globalClassNameMap.withLock { + $0[clsName] } - - return mappedClass } /// Returns the class name with which the archiver encodes instances of a given class. diff --git a/Sources/Foundation/NSKeyedArchiverHelpers.swift b/Sources/Foundation/NSKeyedArchiverHelpers.swift index 341936d851..7460aca18a 100644 --- a/Sources/Foundation/NSKeyedArchiverHelpers.swift +++ b/Sources/Foundation/NSKeyedArchiverHelpers.swift @@ -15,24 +15,24 @@ extension CFKeyedArchiverUID : _NSBridgeable { internal var _nsObject: NSType { return unsafeBitCast(self, to: NSType.self) } } -internal class _NSKeyedArchiverUID : NSObject { +final internal class _NSKeyedArchiverUID : NSObject, Sendable { typealias CFType = CFKeyedArchiverUID - internal var _base = _CFInfo(typeID: _CFKeyedArchiverUIDGetTypeID()) - internal var value : UInt32 = 0 + internal let _base = _CFInfo(typeID: _CFKeyedArchiverUIDGetTypeID()) + internal let value : UInt32 internal var _cfObject : CFType { return unsafeBitCast(self, to: CFType.self) } - override open var _cfTypeID: CFTypeID { + override var _cfTypeID: CFTypeID { return _CFKeyedArchiverUIDGetTypeID() } - open override var hash: Int { + override var hash: Int { return Int(bitPattern: CFHash(_cfObject as CFTypeRef?)) } - open override func isEqual(_ object: Any?) -> Bool { + override func isEqual(_ object: Any?) -> Bool { // no need to compare these? return false } diff --git a/Sources/Foundation/NSKeyedUnarchiver.swift b/Sources/Foundation/NSKeyedUnarchiver.swift index 0c76f3a61b..7f6509b8fc 100644 --- a/Sources/Foundation/NSKeyedUnarchiver.swift +++ b/Sources/Foundation/NSKeyedUnarchiver.swift @@ -8,6 +8,10 @@ // @_implementationOnly import CoreFoundation +internal import Synchronization + +@available(*, unavailable) +extension NSKeyedUnarchiver : @unchecked Sendable { } open class NSKeyedUnarchiver : NSCoder { enum InternalError: Error { @@ -44,8 +48,7 @@ open class NSKeyedUnarchiver : NSCoder { } } - private static var _classNameMap : Dictionary = [:] - private static var _classNameMapLock = NSLock() + private static let _globalClassNameMap = Mutex>([:]) open weak var delegate: NSKeyedUnarchiverDelegate? @@ -627,8 +630,8 @@ open class NSKeyedUnarchiver : NSCoder { } open class func setClass(_ cls: AnyClass?, forClassName codedName: String) { - _classNameMapLock.synchronized { - _classNameMap[codedName] = cls + _globalClassNameMap.withLock { + $0[codedName] = cls } } @@ -640,13 +643,9 @@ open class NSKeyedUnarchiver : NSCoder { // own table, then if there was no mapping there, the class's. open class func `class`(forClassName codedName: String) -> AnyClass? { - var mappedClass : AnyClass? - - _classNameMapLock.synchronized { - mappedClass = _classNameMap[codedName] + _globalClassNameMap.withLock { + $0[codedName] } - - return mappedClass } open func `class`(forClassName codedName: String) -> AnyClass? { diff --git a/Sources/Foundation/NSLocale.swift b/Sources/Foundation/NSLocale.swift index 6d4215a12f..10db78977f 100644 --- a/Sources/Foundation/NSLocale.swift +++ b/Sources/Foundation/NSLocale.swift @@ -12,9 +12,9 @@ @_spi(SwiftCorelibsFoundation) @_exported import FoundationEssentials @_exported import FoundationInternationalization -open class NSLocale: NSObject, NSCopying, NSSecureCoding { +open class NSLocale: NSObject, NSCopying, NSSecureCoding, @unchecked Sendable { // Our own data - var _locale: Locale + let _locale: Locale internal init(locale: Locale) { _locale = locale @@ -27,27 +27,16 @@ open class NSLocale: NSObject, NSCopying, NSSecureCoding { case .countryCode: return self.countryCode case .scriptCode: return self.scriptCode case .variantCode: return self.variantCode - //case .exemplarCharacterSet: return self.exemplarCharacterSet +#if FOUNDATION_FRAMEWORK + case .exemplarCharacterSet: return self.exemplarCharacterSet +#endif case .calendarIdentifier: return self.calendarIdentifier case .calendar: return _locale.calendar case .collationIdentifier: return self.collationIdentifier case .usesMetricSystem: return self.usesMetricSystem - // Foundation framework only - /* - case .measurementSystem: - switch locale.measurementSystem { - case .us: return NSLocaleMeasurementSystemUS - case .uk: return NSLocaleMeasurementSystemUK - case .metric: return NSLocaleMeasurementSystemMetric - default: return NSLocaleMeasurementSystemMetric - } - case .temperatureUnit: - switch _locale.temperatureUnit { - case .celsius: return NSLocaleTemperatureUnitCelsius - case .fahrenheit: return NSLocaleTemperatureUnitFahrenheit - default: return NSLocaleTemperatureUnitCelsius - } - */ +#if FOUNDATION_FRAMEWORK + case .measurementSystem: return self.measurementSystem +#endif case .decimalSeparator: return self.decimalSeparator case .groupingSeparator: return self.groupingSeparator case .currencySymbol: return self.currencySymbol @@ -70,10 +59,6 @@ open class NSLocale: NSObject, NSCopying, NSSecureCoding { } open func displayName(forKey key: Key, value: String) -> String? { - guard let value = value as? String else { - return nil - } - switch key { case .identifier: return self._nullableLocalizedString(forLocaleIdentifier: value) case .languageCode: return self.localizedString(forLanguageCode: value) @@ -282,62 +267,62 @@ open class NSLocale: NSObject, NSCopying, NSSecureCoding { } extension NSLocale { - open class var current: Locale { + public class var current: Locale { Locale.current } - open class var system: Locale { + public class var system: Locale { Locale(identifier: "") } } extension NSLocale { - open class var availableLocaleIdentifiers: [String] { + public class var availableLocaleIdentifiers: [String] { Locale.availableIdentifiers } - open class var isoLanguageCodes: [String] { + public class var isoLanguageCodes: [String] { // Map back from the type to strings Locale.LanguageCode.isoLanguageCodes.map { $0.identifier } } - open class var isoCountryCodes: [String] { + public class var isoCountryCodes: [String] { Locale.Region.isoRegions.map { $0.identifier } } - open class var isoCurrencyCodes: [String] { + public class var isoCurrencyCodes: [String] { Locale.Currency.isoCurrencies.map { $0.identifier } } - open class var commonISOCurrencyCodes: [String] { + public class var commonISOCurrencyCodes: [String] { Locale.commonISOCurrencyCodes } - open class var preferredLanguages: [String] { + public class var preferredLanguages: [String] { Locale.preferredLanguages } - open class func components(fromLocaleIdentifier string: String) -> [String : String] { + public class func components(fromLocaleIdentifier string: String) -> [String : String] { __SwiftValue.fetch(CFLocaleCreateComponentsFromLocaleIdentifier(kCFAllocatorSystemDefault, string._cfObject)) as? [String : String] ?? [:] } - open class func localeIdentifier(fromComponents dict: [String : String]) -> String { + public class func localeIdentifier(fromComponents dict: [String : String]) -> String { Locale.identifier(fromComponents: dict) } - open class func canonicalLocaleIdentifier(from string: String) -> String { + public class func canonicalLocaleIdentifier(from string: String) -> String { Locale.canonicalLanguageIdentifier(from: string) } - open class func canonicalLanguageIdentifier(from string: String) -> String { + public class func canonicalLanguageIdentifier(from string: String) -> String { Locale.canonicalLanguageIdentifier(from: string) } - open class func localeIdentifier(fromWindowsLocaleCode lcid: UInt32) -> String? { + public class func localeIdentifier(fromWindowsLocaleCode lcid: UInt32) -> String? { Locale.identifier(fromWindowsLocaleCode: Int(lcid)) } - open class func windowsLocaleCode(fromLocaleIdentifier localeIdentifier: String) -> UInt32 { + public class func windowsLocaleCode(fromLocaleIdentifier localeIdentifier: String) -> UInt32 { if let code = Locale.windowsLocaleCode(fromIdentifier: localeIdentifier) { return UInt32(code) } else { @@ -345,12 +330,12 @@ extension NSLocale { } } - open class func characterDirection(forLanguage isoLangCode: String) -> NSLocale.LanguageDirection { + public class func characterDirection(forLanguage isoLangCode: String) -> NSLocale.LanguageDirection { let language = Locale.Language(components: .init(identifier: isoLangCode)) return language.characterDirection } - open class func lineDirection(forLanguage isoLangCode: String) -> NSLocale.LanguageDirection { + public class func lineDirection(forLanguage isoLangCode: String) -> NSLocale.LanguageDirection { let language = Locale.Language(components: .init(identifier: isoLangCode)) return language.lineLayoutDirection } @@ -358,8 +343,8 @@ extension NSLocale { extension NSLocale { - public struct Key : RawRepresentable, Equatable, Hashable { - public private(set) var rawValue: String + public struct Key : RawRepresentable, Equatable, Hashable, Sendable { + public let rawValue: String public init(rawValue: String) { self.rawValue = rawValue } diff --git a/Sources/Foundation/NSLock.swift b/Sources/Foundation/NSLock.swift index fa56161caa..fe1d08b775 100644 --- a/Sources/Foundation/NSLock.swift +++ b/Sources/Foundation/NSLock.swift @@ -87,6 +87,7 @@ open class NSLock: NSObject, NSLocking, @unchecked Sendable { #endif } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func lock() { #if !SWIFT_CORELIBS_FOUNDATION_HAS_THREADS // noop on no thread platforms @@ -97,6 +98,7 @@ open class NSLock: NSObject, NSLocking, @unchecked Sendable { #endif } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func unlock() { #if !SWIFT_CORELIBS_FOUNDATION_HAS_THREADS // noop on no thread platforms @@ -116,6 +118,7 @@ open class NSLock: NSObject, NSLocking, @unchecked Sendable { #endif } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func `try`() -> Bool { #if !SWIFT_CORELIBS_FOUNDATION_HAS_THREADS // noop on no thread platforms @@ -127,6 +130,7 @@ open class NSLock: NSObject, NSLocking, @unchecked Sendable { #endif } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func lock(before limit: Date) -> Bool { #if !SWIFT_CORELIBS_FOUNDATION_HAS_THREADS // noop on no thread platforms @@ -178,10 +182,12 @@ open class NSConditionLock : NSObject, NSLocking, @unchecked Sendable { _value = condition } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func lock() { let _ = lock(before: Date.distantFuture) } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func unlock() { _cond.lock() #if os(Windows) @@ -197,18 +203,22 @@ open class NSConditionLock : NSObject, NSLocking, @unchecked Sendable { return _value } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func lock(whenCondition condition: Int) { let _ = lock(whenCondition: condition, before: Date.distantFuture) } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func `try`() -> Bool { return lock(before: Date.distantPast) } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func tryLock(whenCondition condition: Int) -> Bool { return lock(whenCondition: condition, before: Date.distantPast) } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func unlock(withCondition condition: Int) { _cond.lock() #if os(Windows) @@ -221,6 +231,7 @@ open class NSConditionLock : NSObject, NSLocking, @unchecked Sendable { _cond.unlock() } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func lock(before limit: Date) -> Bool { _cond.lock() while _thread != nil { @@ -238,6 +249,7 @@ open class NSConditionLock : NSObject, NSLocking, @unchecked Sendable { return true } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func lock(whenCondition condition: Int, before limit: Date) -> Bool { _cond.lock() while _thread != nil || _value != condition { @@ -312,6 +324,7 @@ open class NSRecursiveLock: NSObject, NSLocking, @unchecked Sendable { #endif } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func lock() { #if !SWIFT_CORELIBS_FOUNDATION_HAS_THREADS // noop on no thread platforms @@ -322,6 +335,7 @@ open class NSRecursiveLock: NSObject, NSLocking, @unchecked Sendable { #endif } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func unlock() { #if !SWIFT_CORELIBS_FOUNDATION_HAS_THREADS // noop on no thread platforms @@ -341,6 +355,7 @@ open class NSRecursiveLock: NSObject, NSLocking, @unchecked Sendable { #endif } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func `try`() -> Bool { #if !SWIFT_CORELIBS_FOUNDATION_HAS_THREADS // noop on no thread platforms @@ -352,6 +367,7 @@ open class NSRecursiveLock: NSObject, NSLocking, @unchecked Sendable { #endif } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func lock(before limit: Date) -> Bool { #if !SWIFT_CORELIBS_FOUNDATION_HAS_THREADS // noop on no thread platforms @@ -412,6 +428,7 @@ open class NSCondition: NSObject, NSLocking, @unchecked Sendable { cond.deallocate() } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func lock() { #if !SWIFT_CORELIBS_FOUNDATION_HAS_THREADS // noop on no thread platforms @@ -422,6 +439,7 @@ open class NSCondition: NSObject, NSLocking, @unchecked Sendable { #endif } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func unlock() { #if !SWIFT_CORELIBS_FOUNDATION_HAS_THREADS // noop on no thread platforms @@ -432,6 +450,7 @@ open class NSCondition: NSObject, NSLocking, @unchecked Sendable { #endif } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func wait() { #if !SWIFT_CORELIBS_FOUNDATION_HAS_THREADS // noop on no thread platforms @@ -442,6 +461,7 @@ open class NSCondition: NSObject, NSLocking, @unchecked Sendable { #endif } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func wait(until limit: Date) -> Bool { #if !SWIFT_CORELIBS_FOUNDATION_HAS_THREADS // noop on no thread platforms @@ -456,6 +476,7 @@ open class NSCondition: NSObject, NSLocking, @unchecked Sendable { #endif } + @available(*, noasync, message: "Use async-safe scoped locking instead") open func signal() { #if !SWIFT_CORELIBS_FOUNDATION_HAS_THREADS // noop on no thread platforms diff --git a/Sources/Foundation/NSMeasurement.swift b/Sources/Foundation/NSMeasurement.swift index 7f0f1742c7..874b12a115 100644 --- a/Sources/Foundation/NSMeasurement.swift +++ b/Sources/Foundation/NSMeasurement.swift @@ -10,6 +10,9 @@ // //===----------------------------------------------------------------------===// +@available(*, unavailable) +extension NSMeasurement : @unchecked Sendable { } + open class NSMeasurement : NSObject, NSCopying, NSSecureCoding { open private(set) var unit: Unit open private(set) var doubleValue: Double diff --git a/Sources/Foundation/NSNotification.swift b/Sources/Foundation/NSNotification.swift index ff25a3b136..7d08ba995f 100644 --- a/Sources/Foundation/NSNotification.swift +++ b/Sources/Foundation/NSNotification.swift @@ -7,6 +7,9 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +@available(*, unavailable) +extension NSNotification : @unchecked Sendable { } + open class NSNotification: NSObject, NSCopying, NSCoding { public struct Name : RawRepresentable, Equatable, Hashable, Sendable { public private(set) var rawValue: String @@ -86,14 +89,14 @@ open class NSNotification: NSObject, NSCopying, NSCoding { private class NSNotificationReceiver : NSObject { fileprivate var name: Notification.Name? - fileprivate var block: ((Notification) -> Void)? + fileprivate var block: (@Sendable (Notification) -> Void)? fileprivate var sender: AnyObject? fileprivate var queue: OperationQueue? } private let _defaultCenter: NotificationCenter = NotificationCenter() -open class NotificationCenter: NSObject { +open class NotificationCenter: NSObject, @unchecked Sendable { private lazy var _nilIdentifier: ObjectIdentifier = ObjectIdentifier(_observersLock) private lazy var _nilHashable: AnyHashable = AnyHashable(_nilIdentifier) @@ -130,7 +133,9 @@ open class NotificationCenter: NSObject { } if let queue = observer.queue, queue != OperationQueue.current { - queue.addOperation { block(notification) } + // Not entirely safe, but maintained for compatibility + nonisolated(unsafe) let unsafeNotification = notification + queue.addOperation { block(unsafeNotification) } queue.waitUntilAllOperationsAreFinished() } else { block(notification) @@ -171,10 +176,10 @@ open class NotificationCenter: NSObject { @available(*, unavailable, renamed: "addObserver(forName:object:queue:using:)") open func addObserver(forName name: NSNotification.Name?, object obj: Any?, queue: OperationQueue?, usingBlock block: @escaping (Notification) -> Void) -> NSObjectProtocol { - return addObserver(forName: name, object: obj, queue: queue, using: block) + fatalError() } - open func addObserver(forName name: NSNotification.Name?, object obj: Any?, queue: OperationQueue?, using block: @escaping (Notification) -> Void) -> NSObjectProtocol { + open func addObserver(forName name: NSNotification.Name?, object obj: Any?, queue: OperationQueue?, using block: @Sendable @escaping (Notification) -> Void) -> NSObjectProtocol { let newObserver = NSNotificationReceiver() newObserver.name = name newObserver.block = block diff --git a/Sources/Foundation/NSNull.swift b/Sources/Foundation/NSNull.swift index 901cbacbe2..4dbee5dc47 100644 --- a/Sources/Foundation/NSNull.swift +++ b/Sources/Foundation/NSNull.swift @@ -8,7 +8,7 @@ // -open class NSNull : NSObject, NSCopying, NSSecureCoding { +open class NSNull : NSObject, NSCopying, NSSecureCoding, @unchecked Sendable { open override func copy() -> Any { return copy(with: nil) diff --git a/Sources/Foundation/NSNumber.swift b/Sources/Foundation/NSNumber.swift index 82d4481a99..65ee17bc18 100644 --- a/Sources/Foundation/NSNumber.swift +++ b/Sources/Foundation/NSNumber.swift @@ -604,11 +604,11 @@ fileprivate func cast(_ t: T) -> U { return t as! U } -open class NSNumber : NSValue { +open class NSNumber : NSValue, @unchecked Sendable { typealias CFType = CFNumber // This layout MUST be the same as CFNumber so that they are bridgeable - private var _base = _CFInfo(typeID: CFNumberGetTypeID()) - private var _pad: UInt64 = 0 + private let _base = _CFInfo(typeID: CFNumberGetTypeID()) + private let _pad: UInt64 = 0 internal final var _cfObject: CFType { return unsafeBitCast(self, to: CFType.self) @@ -663,7 +663,7 @@ open class NSNumber : NSValue { } } - internal var _swiftValueOfOptimalType: Any { + internal var _swiftValueOfOptimalType: (Any & Sendable) { if self === kCFBooleanTrue { return true } else if self === kCFBooleanFalse { @@ -701,7 +701,8 @@ open class NSNumber : NSValue { } private convenience init(bytes: UnsafeRawPointer, numberType: CFNumberType) { - let cfnumber = CFNumberCreate(nil, numberType, bytes) + // CFNumber is not Sendable, but we know this is safe + nonisolated(unsafe) let cfnumber = CFNumberCreate(nil, numberType, bytes) self.init(factory: { cast(unsafeBitCast(cfnumber, to: NSNumber.self)) }) } @@ -1157,19 +1158,19 @@ extension CFNumber : _NSBridgeable { } internal func _CFSwiftNumberGetType(_ obj: CFTypeRef) -> CFNumberType { - return unsafeBitCast(obj, to: NSNumber.self)._cfNumberType() + return unsafeDowncast(obj, to: NSNumber.self)._cfNumberType() } internal func _CFSwiftNumberGetValue(_ obj: CFTypeRef, _ valuePtr: UnsafeMutableRawPointer, _ type: CFNumberType) -> Bool { - return unsafeBitCast(obj, to: NSNumber.self)._getValue(valuePtr, forType: type) + return unsafeDowncast(obj, to: NSNumber.self)._getValue(valuePtr, forType: type) } internal func _CFSwiftNumberGetBoolValue(_ obj: CFTypeRef) -> Bool { - return unsafeBitCast(obj, to: NSNumber.self).boolValue + return unsafeDowncast(obj, to: NSNumber.self).boolValue } protocol _NSNumberCastingWithoutBridging { - var _swiftValueOfOptimalType: Any { get } + var _swiftValueOfOptimalType: (Any & Sendable) { get } } extension NSNumber: _NSNumberCastingWithoutBridging {} diff --git a/Sources/Foundation/NSObjCRuntime.swift b/Sources/Foundation/NSObjCRuntime.swift index ce75a1fcc2..95d939b83f 100644 --- a/Sources/Foundation/NSObjCRuntime.swift +++ b/Sources/Foundation/NSObjCRuntime.swift @@ -146,7 +146,7 @@ extension ComparisonResult { } /* Note: QualityOfService enum is available on all platforms, but it may not be implemented on all platforms. */ -public enum QualityOfService : Int { +public enum QualityOfService : Int, Sendable { /* UserInteractive QoS is used for work directly involved in providing an interactive UI such as processing events or drawing to the screen. */ case userInteractive @@ -164,7 +164,7 @@ public enum QualityOfService : Int { case `default` } -public struct NSSortOptions: OptionSet { +public struct NSSortOptions: OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -172,7 +172,7 @@ public struct NSSortOptions: OptionSet { public static let stable = NSSortOptions(rawValue: UInt(1 << 4)) } -public struct NSEnumerationOptions: OptionSet { +public struct NSEnumerationOptions: OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -275,7 +275,8 @@ internal let _NSClassesRenamedByObjCAPINotes: [(class: AnyClass, objCName: Strin (MassFormatter.self, "NSMassFormatter"), (NumberFormatter.self, "NSNumberFormatter"), (OutputStream.self, "NSOutputStream"), - (PersonNameComponentsFormatter.self, "NSPersonNameComponentsFormatter"), + // This type is deprecated and unavailable in SCL-F. + //(PersonNameComponentsFormatter.self, "NSPersonNameComponentsFormatter"), (Pipe.self, "NSPipe"), (PropertyListSerialization.self, "NSPropertyListSerialization"), (Scanner.self, "NSScanner"), @@ -327,7 +328,7 @@ internal let _NSClassesRenamedByObjCAPINotes: [(class: AnyClass, objCName: Strin return map }() -fileprivate var mapFromObjCNameToKnownName: [String: String] = { +fileprivate let mapFromObjCNameToKnownName: [String: String] = { var map: [String: String] = [:] for entry in _NSClassesRenamedByObjCAPINotesInNetworkingOrXML { map[entry.objCName] = entry.swiftName @@ -335,7 +336,7 @@ fileprivate var mapFromObjCNameToKnownName: [String: String] = { return map }() -fileprivate var mapFromKnownNameToObjCName: [String: String] = { +fileprivate let mapFromKnownNameToObjCName: [String: String] = { var map: [String: String] = [:] for entry in _NSClassesRenamedByObjCAPINotesInNetworkingOrXML { map[entry.swiftName] = entry.objCName @@ -343,7 +344,7 @@ fileprivate var mapFromKnownNameToObjCName: [String: String] = { return map }() -fileprivate var mapFromObjCNameToClass: [String: AnyClass] = { +fileprivate let mapFromObjCNameToClass: [String: AnyClass] = { var map: [String: AnyClass] = [:] for entry in _NSClassesRenamedByObjCAPINotes { map[entry.objCName] = entry.class @@ -351,7 +352,7 @@ fileprivate var mapFromObjCNameToClass: [String: AnyClass] = { return map }() -fileprivate var mapFromSwiftClassNameToObjCName: [String: String] = { +fileprivate let mapFromSwiftClassNameToObjCName: [String: String] = { var map: [String: String] = [:] for entry in _NSClassesRenamedByObjCAPINotes { map[String(reflecting: entry.class)] = entry.objCName diff --git a/Sources/Foundation/NSObject.swift b/Sources/Foundation/NSObject.swift index a2bbd0b77d..c7856bf655 100644 --- a/Sources/Foundation/NSObject.swift +++ b/Sources/Foundation/NSObject.swift @@ -84,6 +84,9 @@ extension NSObjectProtocol { } } +@available(*, unavailable) +extension NSZone : @unchecked Sendable { } + public struct NSZone : ExpressibleByNilLiteral { public init() { @@ -149,8 +152,9 @@ extension NSMutableCopying { } /// The root class of most Foundation class hierarchies. +//@_nonSendable - TODO: Mark with attribute to indicate this pure abstract class defers Sendable annotation to its subclasses. open class NSObject : NSObjectProtocol, Equatable, Hashable { - // Important: add no ivars here. It will subvert the careful layout of subclasses that bridge into CF. + // Important: add no ivars here. It will subvert the careful layout of subclasses that bridge into CF. /// Implemented by subclasses to initialize a new object immediately after memory /// for it has been allocated. diff --git a/Sources/Foundation/NSOrderedSet.swift b/Sources/Foundation/NSOrderedSet.swift index 6c99947516..db76a98654 100644 --- a/Sources/Foundation/NSOrderedSet.swift +++ b/Sources/Foundation/NSOrderedSet.swift @@ -7,7 +7,11 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // + /**************** Immutable Ordered Set ****************/ +@available(*, unavailable) +extension NSOrderedSet : @unchecked Sendable { } + open class NSOrderedSet: NSObject, NSCopying, NSMutableCopying, NSSecureCoding, ExpressibleByArrayLiteral { fileprivate var _storage: NSSet diff --git a/Sources/Foundation/NSPathUtilities.swift b/Sources/Foundation/NSPathUtilities.swift index 96c41c2816..f6cda6abf9 100644 --- a/Sources/Foundation/NSPathUtilities.swift +++ b/Sources/Foundation/NSPathUtilities.swift @@ -536,7 +536,7 @@ extension NSString { return String(decodingCString: fsr, as: UTF16.self).withCString() { let chars = strnlen_s($0, max) guard chars < max else { return false } - cname.assign(from: $0, count: chars + 1) + cname.update(from: $0, count: chars + 1) return true } #else @@ -584,7 +584,7 @@ extension NSString { return fsr.withCString(encodedAs: UTF16.self) { let wchars = wcsnlen_s($0, max) guard wchars < max else { return false } - cname.assign(from: $0, count: wchars + 1) + cname.update(from: $0, count: wchars + 1) return true } #else diff --git a/Sources/Foundation/NSPersonNameComponents.swift b/Sources/Foundation/NSPersonNameComponents.swift index 52e5a0df3d..04fdfa17d3 100644 --- a/Sources/Foundation/NSPersonNameComponents.swift +++ b/Sources/Foundation/NSPersonNameComponents.swift @@ -7,11 +7,21 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +@available(*, unavailable) +extension NSPersonNameComponents : @unchecked Sendable { } open class NSPersonNameComponents : NSObject, NSCopying, NSSecureCoding { + override public init() { + _pnc = PersonNameComponents() + } + + internal init(pnc: PersonNameComponents) { + _pnc = pnc + } + public convenience required init?(coder aDecoder: NSCoder) { - self.init() + self.init(pnc: .init()) guard aDecoder.allowsKeyedCoding else { preconditionFailure("Unkeyed coding is unsupported.") } @@ -46,22 +56,7 @@ open class NSPersonNameComponents : NSObject, NSCopying, NSSecureCoding { open func copy(with zone: NSZone? = nil) -> Any { let copy = NSPersonNameComponents() - copy.namePrefix = namePrefix - copy.givenName = givenName - copy.middleName = middleName - copy.familyName = familyName - copy.nameSuffix = nameSuffix - copy.nickname = nickname - if let PR = phoneticRepresentation { - var copyPR = PersonNameComponents() - copyPR.namePrefix = PR.namePrefix - copyPR.givenName = PR.givenName - copyPR.middleName = PR.middleName - copyPR.familyName = PR.familyName - copyPR.nameSuffix = PR.nameSuffix - copyPR.nickname = PR.nickname - copy.phoneticRepresentation = copyPR - } + copy._pnc = _pnc return copy } @@ -69,48 +64,64 @@ open class NSPersonNameComponents : NSObject, NSCopying, NSSecureCoding { guard let object = object else { return false } switch object { - case let other as NSPersonNameComponents: return self.isEqual(other) - case let other as PersonNameComponents: return self.isEqual(other._bridgeToObjectiveC()) - default: return false + case let other as NSPersonNameComponents: + return _pnc == other._pnc + case let other as PersonNameComponents: + return _pnc == other + default: + return false } } private func isEqual(_ other: NSPersonNameComponents) -> Bool { - if self === other { return true } - - return (self.namePrefix == other.namePrefix - && self.givenName == other.givenName - && self.middleName == other.middleName - && self.familyName == other.familyName - && self.nameSuffix == other.nameSuffix - && self.nickname == other.nickname - && self.phoneticRepresentation == other.phoneticRepresentation) + _pnc == other._pnc } - /* The below examples all assume the full name Dr. Johnathan Maple Appleseed Esq., nickname "Johnny" */ + // Internal for ObjectiveCBridgable access + internal var _pnc = PersonNameComponents() - /* Pre-nominal letters denoting title, salutation, or honorific, e.g. Dr., Mr. */ - open var namePrefix: String? + /// Assuming the full name is: Dr. Johnathan Maple Appleseed Esq., nickname "Johnny", pre-nominal letters denoting title, salutation, or honorific, e.g. Dr., Mr. + open var namePrefix: String? { + get { _pnc.namePrefix } + set { _pnc.namePrefix = newValue } + } - /* Name bestowed upon an individual by one's parents, e.g. Johnathan */ - open var givenName: String? + /// Assuming the full name is: Dr. Johnathan Maple Appleseed Esq., nickname "Johnny", name bestowed upon an individual by one's parents, e.g. Johnathan + open var givenName: String? { + get { _pnc.givenName } + set { _pnc.givenName = newValue } + } - /* Secondary given name chosen to differentiate those with the same first name, e.g. Maple */ - open var middleName: String? + /// Assuming the full name is: Dr. Johnathan Maple Appleseed Esq., nickname "Johnny", secondary given name chosen to differentiate those with the same first name, e.g. Maple + open var middleName: String? { + get { _pnc.middleName } + set { _pnc.middleName = newValue } + } - /* Name passed from one generation to another to indicate lineage, e.g. Appleseed */ - open var familyName: String? + /// Assuming the full name is: Dr. Johnathan Maple Appleseed Esq., nickname "Johnny", name passed from one generation to another to indicate lineage, e.g. Appleseed + open var familyName: String? { + get { _pnc.familyName } + set { _pnc.familyName = newValue } + } - /* Post-nominal letters denoting degree, accreditation, or other honor, e.g. Esq., Jr., Ph.D. */ - open var nameSuffix: String? + /// Assuming the full name is: Dr. Johnathan Maple Appleseed Esq., nickname "Johnny", post-nominal letters denoting degree, accreditation, or other honor, e.g. Esq., Jr., Ph.D. + open var nameSuffix: String? { + get { _pnc.nameSuffix } + set { _pnc.nameSuffix = newValue } + } - /* Name substituted for the purposes of familiarity, e.g. "Johnny"*/ - open var nickname: String? + /// Assuming the full name is: Dr. Johnathan Maple Appleseed Esq., nickname "Johnny", name substituted for the purposes of familiarity, e.g. "Johnny" + open var nickname: String? { + get { _pnc.nickname } + set { _pnc.nickname = newValue } + } - /* Each element of the phoneticRepresentation should correspond to an element of the original PersonNameComponents instance. - The phoneticRepresentation of the phoneticRepresentation object itself will be ignored. nil by default, must be instantiated. - */ - /*@NSCopying*/ open var phoneticRepresentation: PersonNameComponents? + /// Each element of the phoneticRepresentation should correspond to an element of the original PersonNameComponents instance. + /// The phoneticRepresentation of the phoneticRepresentation object itself will be ignored. nil by default, must be instantiated. + open var phoneticRepresentation: PersonNameComponents? { + get { _pnc.phoneticRepresentation } + set { _pnc.phoneticRepresentation = newValue } + } } extension NSPersonNameComponents : _StructTypeBridgeable { diff --git a/Sources/Foundation/NSPredicate.swift b/Sources/Foundation/NSPredicate.swift index 56b155e8a0..1ff1a073aa 100644 --- a/Sources/Foundation/NSPredicate.swift +++ b/Sources/Foundation/NSPredicate.swift @@ -7,6 +7,8 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +@available(*, unavailable) +extension NSPredicate : @unchecked Sendable { } // Predicates wrap some combination of expressions and operators and when evaluated return a BOOL. @@ -110,7 +112,7 @@ extension NSPredicate { } extension NSArray { - open func filtered(using predicate: NSPredicate) -> [Any] { + public func filtered(using predicate: NSPredicate) -> [Any] { return allObjects.filter({ object in return predicate.evaluate(with: object) }) @@ -118,7 +120,7 @@ extension NSArray { } extension NSMutableArray { - open func filter(using predicate: NSPredicate) { + public func filter(using predicate: NSPredicate) { var indexesToRemove = IndexSet() for (index, object) in self.enumerated() { if !predicate.evaluate(with: object) { @@ -130,7 +132,7 @@ extension NSMutableArray { } extension NSSet { - open func filtered(using predicate: NSPredicate) -> Set { + public func filtered(using predicate: NSPredicate) -> Set { let objs = allObjects.filter { (object) -> Bool in return predicate.evaluate(with: object) } @@ -139,7 +141,7 @@ extension NSSet { } extension NSMutableSet { - open func filter(using predicate: NSPredicate) { + public func filter(using predicate: NSPredicate) { for object in self { if !predicate.evaluate(with: object) { self.remove(object) @@ -149,7 +151,7 @@ extension NSMutableSet { } extension NSOrderedSet { - open func filtered(using predicate: NSPredicate) -> NSOrderedSet { + public func filtered(using predicate: NSPredicate) -> NSOrderedSet { return NSOrderedSet(array: self.allObjects.filter({ object in return predicate.evaluate(with: object) })) @@ -157,7 +159,7 @@ extension NSOrderedSet { } extension NSMutableOrderedSet { - open func filter(using predicate: NSPredicate) { + public func filter(using predicate: NSPredicate) { var indexesToRemove = IndexSet() for (index, object) in self.enumerated() { if !predicate.evaluate(with: object) { diff --git a/Sources/Foundation/NSRange.swift b/Sources/Foundation/NSRange.swift index 3ec747b0db..1d5c85a045 100644 --- a/Sources/Foundation/NSRange.swift +++ b/Sources/Foundation/NSRange.swift @@ -11,7 +11,7 @@ @_implementationOnly import CoreFoundation -public struct _NSRange { +public struct _NSRange : Sendable { public var location: Int public var length: Int diff --git a/Sources/Foundation/NSRegularExpression.swift b/Sources/Foundation/NSRegularExpression.swift index 24adba513a..3647f54dd9 100644 --- a/Sources/Foundation/NSRegularExpression.swift +++ b/Sources/Foundation/NSRegularExpression.swift @@ -13,7 +13,7 @@ @_implementationOnly import CoreFoundation extension NSRegularExpression { - public struct Options : OptionSet { + public struct Options : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -27,11 +27,8 @@ extension NSRegularExpression { } } -open class NSRegularExpression: NSObject, NSCopying, NSSecureCoding { - internal var _internalStorage: AnyObject - internal final var _internal: _CFRegularExpression { - unsafeBitCast(_internalStorage, to: _CFRegularExpression.self) - } +open class NSRegularExpression: NSObject, NSCopying, NSSecureCoding, @unchecked Sendable { + internal var _internal: _CFRegularExpression open override func copy() -> Any { return copy(with: nil) @@ -85,23 +82,23 @@ open class NSRegularExpression: NSObject, NSCopying, NSSecureCoding { var error: Unmanaged? let opt = _CFRegularExpressionOptions(rawValue: options.rawValue) if let regex = _CFRegularExpressionCreate(kCFAllocatorSystemDefault, pattern._cfObject, opt, &error) { - _internalStorage = regex + _internal = regex } else { throw error!.takeRetainedValue()._nsObject } } - open var pattern: String { + public var pattern: String { return _CFRegularExpressionGetPattern(_internal)._swiftObject } - open var options: Options { + public var options: Options { let opt = _CFRegularExpressionGetOptions(_internal).rawValue return Options(rawValue: opt) } - open var numberOfCaptureGroups: Int { + public var numberOfCaptureGroups: Int { return _CFRegularExpressionGetNumberOfCaptureGroups(_internal) } @@ -111,14 +108,14 @@ open class NSRegularExpression: NSObject, NSCopying, NSSecureCoding { /* This class method will produce a string by adding backslash escapes as necessary to the given string, to escape any characters that would otherwise be treated as pattern metacharacters. */ - open class func escapedPattern(for string: String) -> String { + public class func escapedPattern(for string: String) -> String { return _CFRegularExpressionCreateEscapedPattern(string._cfObject)._swiftObject } } extension NSRegularExpression { - public struct MatchingOptions : OptionSet { + public struct MatchingOptions : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -130,7 +127,7 @@ extension NSRegularExpression { internal static let OmitResult = MatchingOptions(rawValue: 1 << 13) } - public struct MatchingFlags : OptionSet { + public struct MatchingFlags : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -349,7 +346,7 @@ extension NSRegularExpression { /* This class method will produce a string by adding backslash escapes as necessary to the given string, to escape any characters that would otherwise be treated as template metacharacters. */ - open class func escapedTemplate(for string: String) -> String { + public class func escapedTemplate(for string: String) -> String { return _CFRegularExpressionCreateEscapedPattern(string._cfObject)._swiftObject } } diff --git a/Sources/Foundation/NSSet.swift b/Sources/Foundation/NSSet.swift index 7f2318d6de..273d79c43e 100644 --- a/Sources/Foundation/NSSet.swift +++ b/Sources/Foundation/NSSet.swift @@ -10,6 +10,9 @@ @_implementationOnly import CoreFoundation +@available(*, unavailable) +extension NSSet : @unchecked Sendable { } + open class NSSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCoding { private let _cfinfo = _CFInfo(typeID: CFSetGetTypeID()) internal var _storage: Set @@ -71,11 +74,7 @@ open class NSSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCodi public convenience init(set: Set, copyItems flag: Bool) { if flag { self.init(array: set.map { - if let item = $0 as? NSObject { - return item.copy() - } else { - return $0 - } + return ($0 as NSObject).copy() }) } else { self.init(array: Array(set)) @@ -461,6 +460,7 @@ open class NSMutableSet : NSSet { } /**************** Counted Set ****************/ + open class NSCountedSet : NSMutableSet { // Note: in 5.0 and earlier, _table contained the object's exact count. // In 5.1 and earlier, it contains the count minus one. This allows us to have a quick 'is this set just like a regular NSSet' flag (if this table is empty, then all objects in it exist at most once in it.) diff --git a/Sources/Foundation/NSSortDescriptor.swift b/Sources/Foundation/NSSortDescriptor.swift index 03b52bd659..2fa688c189 100644 --- a/Sources/Foundation/NSSortDescriptor.swift +++ b/Sources/Foundation/NSSortDescriptor.swift @@ -9,6 +9,9 @@ @_implementationOnly import CoreFoundation +@available(*, unavailable) +extension NSSortDescriptor : @unchecked Sendable { } + // In swift-corelibs-foundation, key-value coding is not available. Since encoding and decoding a NSSortDescriptor requires interpreting key paths, NSSortDescriptor does not conform to NSCoding or NSSecureCoding in swift-corelibs-foundation only. open class NSSortDescriptor: NSObject, NSCopying { open override func copy() -> Any { diff --git a/Sources/Foundation/NSSpecialValue.swift b/Sources/Foundation/NSSpecialValue.swift index d8540de041..3f95cc47eb 100644 --- a/Sources/Foundation/NSSpecialValue.swift +++ b/Sources/Foundation/NSSpecialValue.swift @@ -28,7 +28,7 @@ internal protocol NSSpecialValueCoding { var description: String { get } } -internal class NSSpecialValue : NSValue { +internal class NSSpecialValue : NSValue, @unchecked Sendable { // Originally these were functions in NSSpecialValueCoding but it's probably // more convenient to keep it as a table here as nothing else really needs to @@ -59,7 +59,7 @@ internal class NSSpecialValue : NSValue { return _specialTypes.first(where: { $1.objCType() == objCType })?.1 } - internal var _value : NSSpecialValueCoding + internal let _value : NSSpecialValueCoding init(_ value: NSSpecialValueCoding) { self._value = value diff --git a/Sources/Foundation/NSString.swift b/Sources/Foundation/NSString.swift index d0a1649690..79ec002d5b 100644 --- a/Sources/Foundation/NSString.swift +++ b/Sources/Foundation/NSString.swift @@ -9,6 +9,7 @@ @_implementationOnly import CoreFoundation +internal import Synchronization public typealias unichar = UInt16 @@ -55,7 +56,7 @@ internal let kCFStringNormalizationFormKC = CFStringNormalizationForm.KC extension NSString { - public struct EncodingConversionOptions : OptionSet { + public struct EncodingConversionOptions : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -64,7 +65,7 @@ extension NSString { internal static let failOnPartialEncodingConversion = EncodingConversionOptions(rawValue: 1 << 20) } - public struct EnumerationOptions : OptionSet { + public struct EnumerationOptions : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -96,7 +97,7 @@ extension NSString.CompareOptions { } } -public struct StringTransform: Equatable, Hashable, RawRepresentable { +public struct StringTransform: Equatable, Hashable, RawRepresentable, Sendable { typealias RawType = String public let rawValue: String @@ -135,17 +136,18 @@ public struct StringTransform: Equatable, Hashable, RawRepresentable { } +// NSCache is marked as non-Sendable, but it actually does have locking in our implementation +fileprivate nonisolated(unsafe) let regularExpressionCache: NSCache = { + let cache = NSCache() + cache.name = "NSRegularExpressionCache" + cache.countLimit = 10 + return cache +}() + internal func _createRegexForPattern(_ pattern: String, _ options: NSRegularExpression.Options) -> NSRegularExpression? { - struct local { - static let __NSRegularExpressionCache: NSCache = { - let cache = NSCache() - cache.name = "NSRegularExpressionCache" - cache.countLimit = 10 - return cache - }() - } + let key = "\(options):\(pattern)" - if let regex = local.__NSRegularExpressionCache.object(forKey: key._nsObject) { + if let regex = regularExpressionCache.object(forKey: key._nsObject) { return regex } @@ -153,7 +155,8 @@ internal func _createRegexForPattern(_ pattern: String, _ options: NSRegularExpr return nil } - local.__NSRegularExpressionCache.setObject(regex, forKey: key._nsObject) + regularExpressionCache.setObject(regex, forKey: key._nsObject) + return regex } @@ -199,6 +202,9 @@ internal func isAParagraphSeparatorTypeCharacter(_ ch: unichar) -> Bool { return ch == 0x0a || ch == 0x0d || ch == 0x2029 } +@available(*, unavailable) +extension NSString : @unchecked Sendable { } + open class NSString : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCoding { private let _cfinfo = _CFInfo(typeID: CFStringGetTypeID()) internal var _storage: String @@ -320,15 +326,7 @@ open class NSString : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSC } internal func _fastCStringContents(_ nullTerminated: Bool) -> UnsafePointer? { - guard !nullTerminated else { - // There is no way to fastly and safely retrieve a pointer to a null-terminated string from a String of Swift. - return nil - } - if type(of: self) == NSString.self || type(of: self) == NSMutableString.self { - if _storage._guts._isContiguousASCII { - return UnsafeRawPointer(_storage._guts.startASCII).assumingMemoryBound(to: Int8.self) - } - } + // There is no truly safe way to return an inner pointer for CFString here return nil } @@ -808,7 +806,7 @@ extension NSString { return NSRange(location: start, length: parEnd - start) } - private enum EnumerateBy { + private enum EnumerateBy : Sendable { case lines case paragraphs case composedCharacterSequences @@ -972,10 +970,15 @@ extension NSString { if type(of: self) == NSString.self || type(of: self) == NSMutableString.self { if _storage._guts._isContiguousASCII { used = min(self.length, maxBufferCount - 1) - _storage._guts.startASCII.withMemoryRebound(to: Int8.self, - capacity: used) { - buffer.moveAssign(from: $0, count: used) + + // This is mutable, but since we just checked the contiguous behavior, should not copy + var copy = _storage + copy.withUTF8 { + $0.withMemoryRebound(to: Int8.self) { + buffer.update(from: $0.baseAddress!, count: used) + } } + buffer.advanced(by: used).initialize(to: 0) return true } @@ -1026,35 +1029,34 @@ extension NSString { return convertedLen != len ? 0 : numBytes } - open class var availableStringEncodings: UnsafePointer { - struct once { - static let encodings: UnsafePointer = { - let cfEncodings = CFStringGetListOfAvailableEncodings()! - var idx = 0 - var numEncodings = 0 - - while cfEncodings.advanced(by: idx).pointee != kCFStringEncodingInvalidId { - idx += 1 - numEncodings += 1 - } - - let theEncodingList = UnsafeMutablePointer.allocate(capacity: numEncodings + 1) - theEncodingList.advanced(by: numEncodings).pointee = 0 // Terminator - - numEncodings -= 1 - while numEncodings >= 0 { - theEncodingList.advanced(by: numEncodings).pointee = - numericCast(CFStringConvertEncodingToNSStringEncoding(cfEncodings.advanced(by: numEncodings).pointee)) - numEncodings -= 1 - } - - return UnsafePointer(theEncodingList) - }() + private static nonisolated(unsafe) let _availableStringEncodings : UnsafePointer = { + let cfEncodings = CFStringGetListOfAvailableEncodings()! + var idx = 0 + var numEncodings = 0 + + while cfEncodings.advanced(by: idx).pointee != kCFStringEncodingInvalidId { + idx += 1 + numEncodings += 1 + } + + let theEncodingList = UnsafeMutablePointer.allocate(capacity: numEncodings + 1) + theEncodingList.advanced(by: numEncodings).pointee = 0 // Terminator + + numEncodings -= 1 + while numEncodings >= 0 { + theEncodingList.advanced(by: numEncodings).pointee = + numericCast(CFStringConvertEncodingToNSStringEncoding(cfEncodings.advanced(by: numEncodings).pointee)) + numEncodings -= 1 } - return once.encodings + + return UnsafePointer(theEncodingList) + }() + + public class var availableStringEncodings: UnsafePointer { + return _availableStringEncodings } - open class func localizedName(of encoding: UInt) -> String { + public class func localizedName(of encoding: UInt) -> String { if let theString = CFStringGetNameOfEncoding(CFStringConvertNSStringEncodingToEncoding(numericCast(encoding))) { // TODO: read the localized version from the Foundation "bundle" return theString._swiftObject @@ -1063,39 +1065,39 @@ extension NSString { return "" } - open class var defaultCStringEncoding: UInt { + public class var defaultCStringEncoding: UInt { return numericCast(CFStringConvertEncodingToNSStringEncoding(CFStringGetSystemEncoding())) } - open var decomposedStringWithCanonicalMapping: String { + public var decomposedStringWithCanonicalMapping: String { let string = CFStringCreateMutable(kCFAllocatorSystemDefault, 0)! CFStringReplaceAll(string, self._cfObject) CFStringNormalize(string, kCFStringNormalizationFormD) return string._swiftObject } - open var precomposedStringWithCanonicalMapping: String { + public var precomposedStringWithCanonicalMapping: String { let string = CFStringCreateMutable(kCFAllocatorSystemDefault, 0)! CFStringReplaceAll(string, self._cfObject) CFStringNormalize(string, kCFStringNormalizationFormC) return string._swiftObject } - open var decomposedStringWithCompatibilityMapping: String { + public var decomposedStringWithCompatibilityMapping: String { let string = CFStringCreateMutable(kCFAllocatorSystemDefault, 0)! CFStringReplaceAll(string, self._cfObject) CFStringNormalize(string, kCFStringNormalizationFormKD) return string._swiftObject } - open var precomposedStringWithCompatibilityMapping: String { + public var precomposedStringWithCompatibilityMapping: String { let string = CFStringCreateMutable(kCFAllocatorSystemDefault, 0)! CFStringReplaceAll(string, self._cfObject) CFStringNormalize(string, kCFStringNormalizationFormKC) return string._swiftObject } - open func components(separatedBy separator: String) -> [String] { + public func components(separatedBy separator: String) -> [String] { let len = length var lrange = range(of: separator, options: [], range: NSRange(location: 0, length: len)) if lrange.length == 0 { @@ -1118,7 +1120,7 @@ extension NSString { } } - open func components(separatedBy separator: CharacterSet) -> [String] { + public func components(separatedBy separator: CharacterSet) -> [String] { let len = length var range = rangeOfCharacter(from: separator, options: [], range: NSRange(location: 0, length: len)) if range.length == 0 { @@ -1141,7 +1143,7 @@ extension NSString { } } - open func trimmingCharacters(in set: CharacterSet) -> String { + public func trimmingCharacters(in set: CharacterSet) -> String { let len = length var buf = _NSStringBuffer(string: self, start: 0, end: len) while !buf.isAtEnd, @@ -1168,7 +1170,7 @@ extension NSString { } } - open func padding(toLength newLength: Int, withPad padString: String, startingAt padIndex: Int) -> String { + public func padding(toLength newLength: Int, withPad padString: String, startingAt padIndex: Int) -> String { let len = length if newLength <= len { // The simple cases (truncation) return newLength == len ? _swiftObject : substring(with: NSRange(location: 0, length: newLength)) @@ -1186,7 +1188,7 @@ extension NSString { return mStr._swiftObject } - open func folding(options: CompareOptions = [], locale: Locale?) -> String { + public func folding(options: CompareOptions = [], locale: Locale?) -> String { let string = CFStringCreateMutable(kCFAllocatorSystemDefault, 0)! CFStringReplaceAll(string, self._cfObject) CFStringFold(string, options._cfValue(), locale?._cfObject) @@ -1202,7 +1204,7 @@ extension NSString { return "" } - open func replacingOccurrences(of target: String, with replacement: String, options: CompareOptions = [], range searchRange: NSRange) -> String { + public func replacingOccurrences(of target: String, with replacement: String, options: CompareOptions = [], range searchRange: NSRange) -> String { if options.contains(.regularExpression) { return _stringByReplacingOccurrencesOfRegularExpressionPattern(target, withTemplate: replacement, options: options, range: searchRange) } @@ -1214,17 +1216,17 @@ extension NSString { } } - open func replacingOccurrences(of target: String, with replacement: String) -> String { + public func replacingOccurrences(of target: String, with replacement: String) -> String { return replacingOccurrences(of: target, with: replacement, options: [], range: NSRange(location: 0, length: length)) } - open func replacingCharacters(in range: NSRange, with replacement: String) -> String { + public func replacingCharacters(in range: NSRange, with replacement: String) -> String { let str = mutableCopy(with: nil) as! NSMutableString str.replaceCharacters(in: range, with: replacement) return str._swiftObject } - open func applyingTransform(_ transform: StringTransform, reverse: Bool) -> String? { + public func applyingTransform(_ transform: StringTransform, reverse: Bool) -> String? { let string = CFStringCreateMutable(kCFAllocatorSystemDefault, 0)! CFStringReplaceAll(string, _cfObject) if (CFStringTransform(string, nil, transform.rawValue._cfObject, reverse)) { @@ -1262,11 +1264,11 @@ extension NSString { try data.write(to: url, options: useAuxiliaryFile ? .atomic : []) } - open func write(to url: URL, atomically useAuxiliaryFile: Bool, encoding enc: UInt) throws { + public func write(to url: URL, atomically useAuxiliaryFile: Bool, encoding enc: UInt) throws { try _writeTo(url, useAuxiliaryFile, enc) } - open func write(toFile path: String, atomically useAuxiliaryFile: Bool, encoding enc: UInt) throws { + public func write(toFile path: String, atomically useAuxiliaryFile: Bool, encoding enc: UInt) throws { try _writeTo(URL(fileURLWithPath: path), useAuxiliaryFile, enc) } @@ -1279,7 +1281,7 @@ extension NSString { } public convenience init?(utf8String nullTerminatedCString: UnsafePointer) { - guard let str = String(validatingUTF8: nullTerminatedCString) else { return nil } + guard let str = String(validatingCString: nullTerminatedCString) else { return nil } self.init(str) } @@ -1296,7 +1298,8 @@ extension NSString { let cf = (loc as! NSLocale)._cfObject str = CFStringCreateWithFormatAndArguments(kCFAllocatorSystemDefault, unsafeBitCast(cf, to: CFDictionary.self), format._cfObject, argList) } else if type(of: loc) === NSDictionary.self { - str = CFStringCreateWithFormatAndArguments(kCFAllocatorSystemDefault, unsafeBitCast(loc, to: CFDictionary.self), format._cfObject, argList) + let dict = (loc as! NSDictionary)._cfObject + str = CFStringCreateWithFormatAndArguments(kCFAllocatorSystemDefault, dict, format._cfObject, argList) } else { fatalError("locale parameter must be a NSLocale or a NSDictionary") } diff --git a/Sources/Foundation/NSStringAPI.swift b/Sources/Foundation/NSStringAPI.swift index 0fc972affb..26e99c48e8 100644 --- a/Sources/Foundation/NSStringAPI.swift +++ b/Sources/Foundation/NSStringAPI.swift @@ -29,7 +29,7 @@ internal func _persistCString(_ p: UnsafePointer?) -> [CChar]? { } let bytesToCopy = UTF8._nullCodeUnitOffset(in: cString) + 1 // +1 for the terminating NUL let result = [CChar](unsafeUninitializedCapacity: bytesToCopy) { buf, initedCount in - buf.baseAddress!.assign(from: cString, count: bytesToCopy) + buf.baseAddress!.update(from: cString, count: bytesToCopy) initedCount = bytesToCopy } return result @@ -137,7 +137,7 @@ extension String { /// Creates a string by copying the data from a given /// null-terminated C array of UTF8-encoded bytes. public init?(utf8String bytes: UnsafePointer) { - if let str = String(validatingUTF8: bytes) { + if let str = String(validatingCString: bytes) { self = str return } @@ -152,16 +152,20 @@ extension String { /// null-terminated array of UTF8-encoded bytes. @_alwaysEmitIntoClient public init?(utf8String bytes: [CChar]) { - // the stdlib's validatingUTF8 [CChar] overload checks for null termination. - if let str = String(validatingUTF8: bytes) { - self = str - return - } guard let nullPosition = bytes.firstIndex(of: 0) else { fatalError( "input of String.init(utf8String:) must be null-terminated" ) } + guard nullPosition != bytes.startIndex else { + self = "" + return + } + let substrBeforeNull = bytes[bytes.startIndex.., encoding enc: Encoding) { if enc == .utf8 || enc == .ascii { - if let str = String(validatingUTF8: cString) { + if let str = String(validatingCString: cString) { if enc == .utf8 || str._guts._isContiguousASCII { self = str return @@ -304,9 +308,19 @@ extension String { /// in a given array, interpreted according to a given encoding. @_alwaysEmitIntoClient public init?(cString: [CChar], encoding enc: Encoding) { + guard let nullPosition = cString.firstIndex(of: 0) else { + fatalError( + "input of String.init(cString:encoding:) must be null-terminated" + ) + } + if enc == .utf8 || enc == .ascii { - // the stdlib's validatingUTF8 [CChar] overload checks for null termination. - if let str = String(validatingUTF8: cString) { + guard nullPosition != cString.startIndex else { + self = "" + return + } + let substrBeforeNull = cString[cString.startIndex.. (result: NSData, textEncodingNameIfAvailable: String?) } internal enum _NSNonfileURLContentLoader { - static private(set) var external: _NSNonfileURLContentLoading? + static let external = Mutex<_NSNonfileURLContentLoading?>(nil) static var current: _NSNonfileURLContentLoading { - if let external = _NSNonfileURLContentLoader.external { - return external - } else { - guard let type = _typeByName(_SwiftFoundationNetworkingModuleName + "._NSNonfileURLContentLoader") as? _NSNonfileURLContentLoading.Type else { - fatalError("You must link or load module \(_SwiftFoundationNetworkingModuleName) to load non-file: URL content using String(contentsOf:…), Data(contentsOf:…), etc.") + external.withLock { + if let external = $0 { + return external + } else { + guard let type = _typeByName(_SwiftFoundationNetworkingModuleName + "._NSNonfileURLContentLoader") as? _NSNonfileURLContentLoading.Type else { + fatalError("You must link or load module \(_SwiftFoundationNetworkingModuleName) to load non-file: URL content using String(contentsOf:…), Data(contentsOf:…), etc.") + } + + let result = type.init() + $0 = result + return result } - - let result = type.init() - _NSNonfileURLContentLoader.external = result - return result } } } +@available(*, unavailable) +extension _NSCFXMLBridgeForFoundationXMLUseOnly : Sendable { } + public struct _NSCFXMLBridgeForFoundationXMLUseOnly { - public var originalBridge: UnsafeMutableRawPointer - public var CFArrayGetCount: UnsafeMutableRawPointer - public var CFArrayGetValueAtIndex: UnsafeMutableRawPointer - public var CFErrorCreate: UnsafeMutableRawPointer - public var CFStringCreateWithCString: UnsafeMutableRawPointer - public var CFStringCreateMutable: UnsafeMutableRawPointer - public var CFStringAppend: UnsafeMutableRawPointer - public var CFStringAppendCString: UnsafeMutableRawPointer - public var CFStringGetLength: UnsafeMutableRawPointer - public var CFStringGetMaximumSizeForEncoding: UnsafeMutableRawPointer - public var CFStringGetCString: UnsafeMutableRawPointer - public var CFDataCreateWithBytesNoCopy: UnsafeMutableRawPointer - public var CFRelease: UnsafeMutableRawPointer - public var CFStringCreateWithBytes: UnsafeMutableRawPointer - public var CFArrayCreateMutable: UnsafeMutableRawPointer - public var CFArrayAppendValue: UnsafeMutableRawPointer - public var CFDataGetLength: UnsafeMutableRawPointer - public var CFDataGetBytePtr: UnsafeMutableRawPointer - public var CFDictionaryCreateMutable: UnsafeMutableRawPointer - public var CFDictionarySetValue: UnsafeMutableRawPointer - public var kCFAllocatorSystemDefault: UnsafeMutableRawPointer - public var kCFAllocatorNull: UnsafeMutableRawPointer - public var kCFCopyStringDictionaryKeyCallBacks: UnsafeMutableRawPointer - public var kCFTypeDictionaryValueCallBacks: UnsafeMutableRawPointer - public var kCFErrorLocalizedDescriptionKey: UnsafeMutableRawPointer + public let originalBridge: UnsafeMutableRawPointer + public let CFArrayGetCount: UnsafeMutableRawPointer + public let CFArrayGetValueAtIndex: UnsafeMutableRawPointer + public let CFErrorCreate: UnsafeMutableRawPointer + public let CFStringCreateWithCString: UnsafeMutableRawPointer + public let CFStringCreateMutable: UnsafeMutableRawPointer + public let CFStringAppend: UnsafeMutableRawPointer + public let CFStringAppendCString: UnsafeMutableRawPointer + public let CFStringGetLength: UnsafeMutableRawPointer + public let CFStringGetMaximumSizeForEncoding: UnsafeMutableRawPointer + public let CFStringGetCString: UnsafeMutableRawPointer + public let CFDataCreateWithBytesNoCopy: UnsafeMutableRawPointer + public let CFRelease: UnsafeMutableRawPointer + public let CFStringCreateWithBytes: UnsafeMutableRawPointer + public let CFArrayCreateMutable: UnsafeMutableRawPointer + public let CFArrayAppendValue: UnsafeMutableRawPointer + public let CFDataGetLength: UnsafeMutableRawPointer + public let CFDataGetBytePtr: UnsafeMutableRawPointer + public let CFDictionaryCreateMutable: UnsafeMutableRawPointer + public let CFDictionarySetValue: UnsafeMutableRawPointer + public let kCFAllocatorSystemDefault: UnsafeMutableRawPointer + public let kCFAllocatorNull: UnsafeMutableRawPointer + public let kCFCopyStringDictionaryKeyCallBacks: UnsafeMutableRawPointer + public let kCFTypeDictionaryValueCallBacks: UnsafeMutableRawPointer + public let kCFErrorLocalizedDescriptionKey: UnsafeMutableRawPointer public init() { self.originalBridge = UnsafeMutableRawPointer(&__NSCFXMLBridgeUntyped) diff --git a/Sources/Foundation/NSTextCheckingResult.swift b/Sources/Foundation/NSTextCheckingResult.swift index d55176dc78..12af725525 100644 --- a/Sources/Foundation/NSTextCheckingResult.swift +++ b/Sources/Foundation/NSTextCheckingResult.swift @@ -11,7 +11,7 @@ /* NSTextCheckingType in this project is limited to regular expressions. */ extension NSTextCheckingResult { - public struct CheckingType : OptionSet { + public struct CheckingType : OptionSet, Sendable { public let rawValue: UInt64 public init(rawValue: UInt64) { self.rawValue = rawValue } @@ -19,6 +19,9 @@ extension NSTextCheckingResult { } } +@available(*, unavailable) +extension NSTextCheckingResult : @unchecked Sendable { } + open class NSTextCheckingResult: NSObject, NSCopying, NSSecureCoding { public override init() { @@ -205,7 +208,7 @@ extension NSTextCheckingResult.CheckingType { public static let transitInformation = NSTextCheckingResult.CheckingType(rawValue: 1 << 12) } -public struct NSTextCheckingKey: RawRepresentable, Hashable { +public struct NSTextCheckingKey: RawRepresentable, Hashable, Sendable { public var rawValue: String init(_ string: String) { @@ -234,59 +237,62 @@ extension NSTextCheckingKey { @available(*, unavailable, message: "These types of results cannot be constructed in swift-corelibs-foundation") extension NSTextCheckingResult { - open class func orthographyCheckingResult(range: NSRange, orthography: NSOrthography) -> NSTextCheckingResult { + public class func orthographyCheckingResult(range: NSRange, orthography: NSOrthography) -> NSTextCheckingResult { NSUnsupported() } - open class func spellCheckingResult(range: NSRange) -> NSTextCheckingResult { + public class func spellCheckingResult(range: NSRange) -> NSTextCheckingResult { NSUnsupported() } - open class func grammarCheckingResult(range: NSRange, details: [[String : Any]]) -> NSTextCheckingResult { + public class func grammarCheckingResult(range: NSRange, details: [[String : Any]]) -> NSTextCheckingResult { NSUnsupported() } - open class func dateCheckingResult(range: NSRange, date: Date) -> NSTextCheckingResult { + public class func dateCheckingResult(range: NSRange, date: Date) -> NSTextCheckingResult { NSUnsupported() } - open class func dateCheckingResult(range: NSRange, date: Date, timeZone: TimeZone, duration: TimeInterval) -> NSTextCheckingResult { + public class func dateCheckingResult(range: NSRange, date: Date, timeZone: TimeZone, duration: TimeInterval) -> NSTextCheckingResult { NSUnsupported() } - open class func addressCheckingResult(range: NSRange, components: [NSTextCheckingKey : String]) -> NSTextCheckingResult { + public class func addressCheckingResult(range: NSRange, components: [NSTextCheckingKey : String]) -> NSTextCheckingResult { NSUnsupported() } - open class func linkCheckingResult(range: NSRange, url: URL) -> NSTextCheckingResult { + public class func linkCheckingResult(range: NSRange, url: URL) -> NSTextCheckingResult { NSUnsupported() } - open class func quoteCheckingResult(range: NSRange, replacementString: String) -> NSTextCheckingResult { + public class func quoteCheckingResult(range: NSRange, replacementString: String) -> NSTextCheckingResult { NSUnsupported() } - open class func dashCheckingResult(range: NSRange, replacementString: String) -> NSTextCheckingResult { + public class func dashCheckingResult(range: NSRange, replacementString: String) -> NSTextCheckingResult { NSUnsupported() } - open class func replacementCheckingResult(range: NSRange, replacementString: String) -> NSTextCheckingResult { + public class func replacementCheckingResult(range: NSRange, replacementString: String) -> NSTextCheckingResult { NSUnsupported() } - open class func correctionCheckingResult(range: NSRange, replacementString: String, alternativeStrings: [String]) -> NSTextCheckingResult { + public class func correctionCheckingResult(range: NSRange, replacementString: String, alternativeStrings: [String]) -> NSTextCheckingResult { NSUnsupported() } - open class func phoneNumberCheckingResult(range: NSRange, phoneNumber: String) -> NSTextCheckingResult { + public class func phoneNumberCheckingResult(range: NSRange, phoneNumber: String) -> NSTextCheckingResult { NSUnsupported() } - open class func transitInformationCheckingResult(range: NSRange, components: [NSTextCheckingKey : String]) -> NSTextCheckingResult { + public class func transitInformationCheckingResult(range: NSRange, components: [NSTextCheckingKey : String]) -> NSTextCheckingResult { NSUnsupported() } } +@available(*, unavailable) +extension NSOrthography : @unchecked Sendable { } + @available(*, deprecated, message: "NSOrthography is not available in swift-corelibs-foundation") open class NSOrthography: NSObject, NSCopying, NSSecureCoding { @available(*, unavailable, message: "NSOrthography is not available in swift-corelibs-foundation") diff --git a/Sources/Foundation/NSTimeZone.swift b/Sources/Foundation/NSTimeZone.swift index 97480e96af..7555663644 100644 --- a/Sources/Foundation/NSTimeZone.swift +++ b/Sources/Foundation/NSTimeZone.swift @@ -10,6 +10,9 @@ @_implementationOnly import CoreFoundation @_spi(SwiftCorelibsFoundation) @_exported import FoundationEssentials +@available(*, unavailable) +extension NSTimeZone : @unchecked Sendable { } + open class NSTimeZone : NSObject, NSCopying, NSSecureCoding, NSCoding { var _timeZone: TimeZone diff --git a/Sources/Foundation/NSURL.swift b/Sources/Foundation/NSURL.swift index e12d527907..6af73f16ea 100644 --- a/Sources/Foundation/NSURL.swift +++ b/Sources/Foundation/NSURL.swift @@ -79,7 +79,7 @@ internal func _pathComponents(_ path: String?) -> [String]? { return result } -open class NSURL : NSObject, NSSecureCoding, NSCopying { +open class NSURL : NSObject, NSSecureCoding, NSCopying, @unchecked Sendable { typealias CFType = CFURL internal var _base = _CFInfo(typeID: CFURLGetTypeID()) internal var _flags : UInt32 = 0 @@ -733,32 +733,32 @@ extension NSCharacterSet { // Predefined character sets for the six URL components and subcomponents which allow percent encoding. These character sets are passed to -stringByAddingPercentEncodingWithAllowedCharacters:. // Returns a character set containing the characters allowed in an URL's user subcomponent. - open class var urlUserAllowed: CharacterSet { + public class var urlUserAllowed: CharacterSet { return _CFURLComponentsGetURLUserAllowedCharacterSet()._swiftObject } // Returns a character set containing the characters allowed in an URL's password subcomponent. - open class var urlPasswordAllowed: CharacterSet { + public class var urlPasswordAllowed: CharacterSet { return _CFURLComponentsGetURLPasswordAllowedCharacterSet()._swiftObject } // Returns a character set containing the characters allowed in an URL's host subcomponent. - open class var urlHostAllowed: CharacterSet { + public class var urlHostAllowed: CharacterSet { return _CFURLComponentsGetURLHostAllowedCharacterSet()._swiftObject } // Returns a character set containing the characters allowed in an URL's path component. ';' is a legal path character, but it is recommended that it be percent-encoded for best compatibility with NSURL (-stringByAddingPercentEncodingWithAllowedCharacters: will percent-encode any ';' characters if you pass the URLPathAllowedCharacterSet). - open class var urlPathAllowed: CharacterSet { + public class var urlPathAllowed: CharacterSet { return _CFURLComponentsGetURLPathAllowedCharacterSet()._swiftObject } // Returns a character set containing the characters allowed in an URL's query component. - open class var urlQueryAllowed: CharacterSet { + public class var urlQueryAllowed: CharacterSet { return _CFURLComponentsGetURLQueryAllowedCharacterSet()._swiftObject } // Returns a character set containing the characters allowed in an URL's fragment component. - open class var urlFragmentAllowed: CharacterSet { + public class var urlFragmentAllowed: CharacterSet { return _CFURLComponentsGetURLFragmentAllowedCharacterSet()._swiftObject } } @@ -766,12 +766,12 @@ extension NSCharacterSet { extension NSString { // Returns a new string made from the receiver by replacing all characters not in the allowedCharacters set with percent encoded characters. UTF-8 encoding is used to determine the correct percent encoded characters. Entire URL strings cannot be percent-encoded. This method is intended to percent-encode an URL component or subcomponent string, NOT the entire URL string. Any characters in allowedCharacters outside of the 7-bit ASCII range are ignored. - open func addingPercentEncoding(withAllowedCharacters allowedCharacters: CharacterSet) -> String? { + public func addingPercentEncoding(withAllowedCharacters allowedCharacters: CharacterSet) -> String? { return _CFStringCreateByAddingPercentEncodingWithAllowedCharacters(kCFAllocatorSystemDefault, self._cfObject, allowedCharacters._cfObject)._swiftObject } // Returns a new string made from the receiver by replacing all percent encoded sequences with the matching UTF-8 characters. - open var removingPercentEncoding: String? { + public var removingPercentEncoding: String? { return _CFStringCreateByRemovingPercentEncoding(kCFAllocatorSystemDefault, self._cfObject)?._swiftObject } } @@ -780,7 +780,7 @@ extension NSURL { /* The following methods work on the path portion of a URL in the same manner that the NSPathUtilities methods on NSString do. */ - open class func fileURL(withPathComponents components: [String]) -> URL? { + public class func fileURL(withPathComponents components: [String]) -> URL? { let path = NSString.path(withComponents: components) if components.last == "/" { return URL(fileURLWithPath: path, isDirectory: true) @@ -826,11 +826,11 @@ extension NSURL { return result } - open var pathComponents: [String]? { + public var pathComponents: [String]? { return _pathComponents(path) } - open var lastPathComponent: String? { + public var lastPathComponent: String? { guard let fixedSelf = _pathByFixingSlashes() else { return nil } @@ -841,7 +841,7 @@ extension NSURL { return String(fixedSelf.suffix(from: fixedSelf._startOfLastPathComponent)) } - open var pathExtension: String? { + public var pathExtension: String? { guard let fixedSelf = _pathByFixingSlashes() else { return nil } @@ -856,7 +856,7 @@ extension NSURL { } } - open func appendingPathComponent(_ pathComponent: String) -> URL? { + public func appendingPathComponent(_ pathComponent: String) -> URL? { var result : URL? = appendingPathComponent(pathComponent, isDirectory: false) // File URLs can't be handled on WASI without file system access @@ -876,31 +876,31 @@ extension NSURL { return result } - open func appendingPathComponent(_ pathComponent: String, isDirectory: Bool) -> URL? { + public func appendingPathComponent(_ pathComponent: String, isDirectory: Bool) -> URL? { return CFURLCreateCopyAppendingPathComponent(kCFAllocatorSystemDefault, _cfObject, pathComponent._cfObject, isDirectory)?._swiftObject } - open var deletingLastPathComponent: URL? { + public var deletingLastPathComponent: URL? { return CFURLCreateCopyDeletingLastPathComponent(kCFAllocatorSystemDefault, _cfObject)?._swiftObject } - open func appendingPathExtension(_ pathExtension: String) -> URL? { + public func appendingPathExtension(_ pathExtension: String) -> URL? { return CFURLCreateCopyAppendingPathExtension(kCFAllocatorSystemDefault, _cfObject, pathExtension._cfObject)?._swiftObject } - open var deletingPathExtension: URL? { + public var deletingPathExtension: URL? { return CFURLCreateCopyDeletingPathExtension(kCFAllocatorSystemDefault, _cfObject)?._swiftObject } /* The following methods work only on `file:` scheme URLs; for non-`file:` scheme URLs, these methods return the URL unchanged. */ - open var standardizingPath: URL? { + public var standardizingPath: URL? { // Documentation says it should expand initial tilde, but it does't do this on OS X. // In remaining cases it works just like URLByResolvingSymlinksInPath. return _resolveSymlinksInPath(excludeSystemDirs: true, preserveDirectoryFlag: true) } - open var resolvingSymlinksInPath: URL? { + public var resolvingSymlinksInPath: URL? { return _resolveSymlinksInPath(excludeSystemDirs: true) } @@ -1057,7 +1057,7 @@ extension NSURL : _StructTypeBridgeable { internal func _CFSwiftURLCopyResourcePropertyForKey(_ url: CFTypeRef, _ key: CFString, _ valuePointer: UnsafeMutablePointer?>?, _ errorPointer: UnsafeMutablePointer?>?) -> _DarwinCompatibleBoolean { do { let key = URLResourceKey(rawValue: key._swiftObject) - let values = try unsafeBitCast(url, to: NSURL.self).resourceValues(forKeys: [ key ]) + let values = try unsafeDowncast(url, to: NSURL.self).resourceValues(forKeys: [ key ]) let value = values[key] if let value = value { @@ -1070,7 +1070,7 @@ internal func _CFSwiftURLCopyResourcePropertyForKey(_ url: CFTypeRef, _ key: CFS return true } catch { if let errorPointer = errorPointer { - let nsError = (error as? NSError) ?? NSError(domain: NSCocoaErrorDomain, code: CocoaError.featureUnsupported.rawValue) + let nsError = NSError(domain: NSCocoaErrorDomain, code: CocoaError.featureUnsupported.rawValue) let cfError = Unmanaged.passRetained(nsError._cfObject) errorPointer.pointee = cfError } @@ -1087,7 +1087,7 @@ internal func _CFSwiftURLCopyResourcePropertiesForKeys(_ url: CFTypeRef, _ keys: } } - let result = try unsafeBitCast(url, to: NSURL.self).resourceValues(forKeys: swiftKeys) + let result = try unsafeDowncast(url, to: NSURL.self).resourceValues(forKeys: swiftKeys) let finalDictionary = NSMutableDictionary() for entry in result { @@ -1097,7 +1097,7 @@ internal func _CFSwiftURLCopyResourcePropertiesForKeys(_ url: CFTypeRef, _ keys: return .passRetained(finalDictionary._cfObject) } catch { if let errorPointer = errorPointer { - let nsError = (error as? NSError) ?? NSError(domain: NSCocoaErrorDomain, code: CocoaError.featureUnsupported.rawValue) + let nsError = NSError(domain: NSCocoaErrorDomain, code: CocoaError.featureUnsupported.rawValue) let cfError = Unmanaged.passRetained(nsError._cfObject) errorPointer.pointee = cfError } @@ -1108,12 +1108,12 @@ internal func _CFSwiftURLCopyResourcePropertiesForKeys(_ url: CFTypeRef, _ keys: internal func _CFSwiftURLSetResourcePropertyForKey(_ url: CFTypeRef, _ key: CFString, _ value: CFTypeRef?, _ errorPointer: UnsafeMutablePointer?>?) -> _DarwinCompatibleBoolean { do { let key = URLResourceKey(rawValue: key._swiftObject) - try unsafeBitCast(url, to: NSURL.self).setResourceValue(__SwiftValue.fetch(value), forKey: key) + try unsafeDowncast(url, to: NSURL.self).setResourceValue(__SwiftValue.fetch(value), forKey: key) return true } catch { if let errorPointer = errorPointer { - let nsError = (error as? NSError) ?? NSError(domain: NSCocoaErrorDomain, code: CocoaError.featureUnsupported.rawValue) + let nsError = NSError(domain: NSCocoaErrorDomain, code: CocoaError.featureUnsupported.rawValue) let cfError = Unmanaged.passRetained(nsError._cfObject) errorPointer.pointee = cfError } @@ -1132,11 +1132,11 @@ internal func _CFSwiftURLSetResourcePropertiesForKeys(_ url: CFTypeRef, _ proper } } - try unsafeBitCast(url, to: NSURL.self).setResourceValues(swiftValues) + try unsafeDowncast(url, to: NSURL.self).setResourceValues(swiftValues) return true } catch { if let errorPointer = errorPointer { - let nsError = (error as? NSError) ?? NSError(domain: NSCocoaErrorDomain, code: CocoaError.featureUnsupported.rawValue) + let nsError = NSError(domain: NSCocoaErrorDomain, code: CocoaError.featureUnsupported.rawValue) let cfError = Unmanaged.passRetained(nsError._cfObject) errorPointer.pointee = cfError } @@ -1146,24 +1146,24 @@ internal func _CFSwiftURLSetResourcePropertiesForKeys(_ url: CFTypeRef, _ proper internal func _CFSwiftURLClearResourcePropertyCacheForKey(_ url: CFTypeRef, _ key: CFString) { let swiftKey = URLResourceKey(rawValue: key._swiftObject) - unsafeBitCast(url, to: NSURL.self).removeCachedResourceValue(forKey: swiftKey) + unsafeDowncast(url, to: NSURL.self).removeCachedResourceValue(forKey: swiftKey) } internal func _CFSwiftURLClearResourcePropertyCache(_ url: CFTypeRef) { - unsafeBitCast(url, to: NSURL.self).removeAllCachedResourceValues() + unsafeDowncast(url, to: NSURL.self).removeAllCachedResourceValues() } internal func _CFSwiftSetTemporaryResourceValueForKey(_ url: CFTypeRef, _ key: CFString, _ value: CFTypeRef) { - unsafeBitCast(url, to: NSURL.self).setTemporaryResourceValue(__SwiftValue.fetch(value), forKey: URLResourceKey(rawValue: key._swiftObject)) + unsafeDowncast(url, to: NSURL.self).setTemporaryResourceValue(__SwiftValue.fetch(value), forKey: URLResourceKey(rawValue: key._swiftObject)) } internal func _CFSwiftURLResourceIsReachable(_ url: CFTypeRef, _ errorPointer: UnsafeMutablePointer?>?) -> _DarwinCompatibleBoolean { do { - let reachable = try unsafeBitCast(url, to: NSURL.self).checkResourceIsReachable() + let reachable = try unsafeDowncast(url, to: NSURL.self).checkResourceIsReachable() return reachable ? true : false } catch { if let errorPointer = errorPointer { - let nsError = (error as? NSError) ?? NSError(domain: NSCocoaErrorDomain, code: CocoaError.featureUnsupported.rawValue) + let nsError = NSError(domain: NSCocoaErrorDomain, code: CocoaError.featureUnsupported.rawValue) let cfError = Unmanaged.passRetained(nsError._cfObject) errorPointer.pointee = cfError } diff --git a/Sources/Foundation/NSURLComponents.swift b/Sources/Foundation/NSURLComponents.swift index 87583cd27e..a39cada368 100644 --- a/Sources/Foundation/NSURLComponents.swift +++ b/Sources/Foundation/NSURLComponents.swift @@ -9,6 +9,8 @@ @_implementationOnly import CoreFoundation +@available(*, unavailable) +extension NSURLComponents : @unchecked Sendable { } open class NSURLComponents: NSObject, NSCopying { private let _componentsStorage: AnyObject! diff --git a/Sources/Foundation/NSURLQueryItem.swift b/Sources/Foundation/NSURLQueryItem.swift index df76edb45c..3d4871320a 100644 --- a/Sources/Foundation/NSURLQueryItem.swift +++ b/Sources/Foundation/NSURLQueryItem.swift @@ -9,10 +9,10 @@ @_exported import FoundationEssentials // NSURLQueryItem encapsulates a single query name-value pair. The name and value strings of a query name-value pair are not percent encoded. For use with the NSURLComponents queryItems property. -open class NSURLQueryItem: NSObject, NSSecureCoding, NSCopying { +open class NSURLQueryItem: NSObject, NSSecureCoding, NSCopying, @unchecked Sendable { - open private(set) var name: String - open private(set) var value: String? + public let name: String + public let value: String? public init(name: String, value: String?) { self.name = name diff --git a/Sources/Foundation/NSUUID.swift b/Sources/Foundation/NSUUID.swift index 4bc4dd98ad..20509fe130 100644 --- a/Sources/Foundation/NSUUID.swift +++ b/Sources/Foundation/NSUUID.swift @@ -10,7 +10,7 @@ @_implementationOnly import CoreFoundation -open class NSUUID : NSObject, NSCopying, NSSecureCoding, NSCoding { +open class NSUUID : NSObject, NSCopying, NSSecureCoding, NSCoding, @unchecked Sendable { internal var buffer = UnsafeMutablePointer.allocate(capacity: 16) deinit { diff --git a/Sources/Foundation/NSValue.swift b/Sources/Foundation/NSValue.swift index de2ce70e7b..3c4e406bb2 100644 --- a/Sources/Foundation/NSValue.swift +++ b/Sources/Foundation/NSValue.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // -open class NSValue : NSObject, NSCopying, NSSecureCoding, NSCoding { +open class NSValue : NSObject, NSCopying, NSSecureCoding, NSCoding, @unchecked Sendable { open func getValue(_ value: UnsafeMutableRawPointer) { NSRequiresConcreteImplementation() @@ -77,11 +77,11 @@ open class NSValue : NSObject, NSCopying, NSSecureCoding, NSCoding { extension NSValue : _Factory {} internal protocol _Factory { - init(factory: () -> Self) + init(factory: @Sendable () -> Self) } extension _Factory { - init(factory: () -> Self) { + init(factory: @Sendable () -> Self) { self = factory() } } diff --git a/Sources/Foundation/Notification.swift b/Sources/Foundation/Notification.swift index 2afd2bd29d..936d28caf7 100644 --- a/Sources/Foundation/Notification.swift +++ b/Sources/Foundation/Notification.swift @@ -10,6 +10,8 @@ // //===----------------------------------------------------------------------===// +@available(*, unavailable) +extension Notification : @unchecked Sendable { } /** `Notification` encapsulates information broadcast to observers via a `NotificationCenter`. diff --git a/Sources/Foundation/NotificationQueue.swift b/Sources/Foundation/NotificationQueue.swift index bf3e5d8e39..830f1a945f 100644 --- a/Sources/Foundation/NotificationQueue.swift +++ b/Sources/Foundation/NotificationQueue.swift @@ -12,13 +12,13 @@ extension NotificationQueue { - public enum PostingStyle : UInt { + public enum PostingStyle : UInt, Sendable { case whenIdle = 1 case asap = 2 case now = 3 } - public struct NotificationCoalescing : OptionSet { + public struct NotificationCoalescing : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -28,6 +28,9 @@ extension NotificationQueue { } } +@available(*, unavailable) +extension NotificationQueue : @unchecked Sendable { } + open class NotificationQueue: NSObject { internal typealias NotificationQueueList = NSMutableArray @@ -50,7 +53,7 @@ open class NotificationQueue: NSObject { // The NSNotificationQueue instance is associated with current thread. // The _notificationQueueList represents a list of notification queues related to the current thread. - private static var _notificationQueueList = NSThreadSpecific() + private static nonisolated(unsafe) var _notificationQueueList = NSThreadSpecific() internal static var notificationQueueList: NotificationQueueList { return _notificationQueueList.get() { return NSMutableArray() @@ -58,7 +61,7 @@ open class NotificationQueue: NSObject { } // The default notification queue for the current thread. - private static var _defaultQueue = NSThreadSpecific() + private static nonisolated(unsafe) var _defaultQueue = NSThreadSpecific() open class var `default`: NotificationQueue { return _defaultQueue.get() { return NotificationQueue(notificationCenter: NotificationCenter.default) diff --git a/Sources/Foundation/NumberFormatter.swift b/Sources/Foundation/NumberFormatter.swift index 1fb0739cb4..39effe97b3 100644 --- a/Sources/Foundation/NumberFormatter.swift +++ b/Sources/Foundation/NumberFormatter.swift @@ -8,9 +8,10 @@ // @_implementationOnly import CoreFoundation +internal import Synchronization extension NumberFormatter { - public enum Style : UInt { + public enum Style : UInt, Sendable { case none = 0 case decimal = 1 case currency = 2 @@ -23,14 +24,14 @@ extension NumberFormatter { case currencyAccounting = 10 } - public enum PadPosition : UInt { + public enum PadPosition : UInt, Sendable { case beforePrefix case afterPrefix case beforeSuffix case afterSuffix } - public enum RoundingMode : UInt { + public enum RoundingMode : UInt, Sendable { case ceiling case floor case down @@ -41,1082 +42,1385 @@ extension NumberFormatter { } } -open class NumberFormatter : Formatter { - - typealias CFType = CFNumberFormatter - private final var _currentCfFormatter: CFType? - private final var _cfFormatter: CFType { - if let obj = _currentCfFormatter { - return obj - } else { - let numberStyle = CFNumberFormatterStyle(rawValue: CFIndex(self.numberStyle.rawValue))! - - let obj = CFNumberFormatterCreate(kCFAllocatorSystemDefault, locale._cfObject, numberStyle)! - _setFormatterAttributes(obj) - if _positiveFormat != nil || _negativeFormat != nil { - var format = _positiveFormat ?? "#" - if let negative = _negativeFormat { - format.append(";") - format.append(negative) - } - CFNumberFormatterSetFormat(obj, format._cfObject) - } - _currentCfFormatter = obj - return obj - } +open class NumberFormatter : Formatter, @unchecked Sendable { + private let _lock: Mutex = .init(.init()) + + public override init() { + super.init() } - - open override func copy(with zone: NSZone? = nil) -> Any { - let copied = NumberFormatter() - - func __copy(_ keyPath: ReferenceWritableKeyPath) { - copied[keyPath: keyPath] = self[keyPath: keyPath] - } - - func __copy(_ keyPath: ReferenceWritableKeyPath) where T: NSCopying { - copied[keyPath: keyPath] = self[keyPath: keyPath].copy(with: zone) as! T - } - - func __copy(_ keyPath: ReferenceWritableKeyPath) where T: NSCopying { - copied[keyPath: keyPath] = self[keyPath: keyPath]?.copy(with: zone) as! T? - } - - __copy(\.formattingContext) - __copy(\._numberStyle) - __copy(\._locale) - __copy(\._generatesDecimalNumbers) - __copy(\._textAttributesForNegativeValues) - __copy(\._textAttributesForPositiveValues) - __copy(\._allowsFloats) - __copy(\._decimalSeparator) - __copy(\._alwaysShowsDecimalSeparator) - __copy(\._currencyDecimalSeparator) - __copy(\._usesGroupingSeparator) - __copy(\._groupingSeparator) - __copy(\._zeroSymbol) - __copy(\._textAttributesForZero) - __copy(\._nilSymbol) - __copy(\._textAttributesForNil) - __copy(\._notANumberSymbol) - __copy(\._textAttributesForNotANumber) - __copy(\._positiveInfinitySymbol) - __copy(\._textAttributesForPositiveInfinity) - __copy(\._negativeInfinitySymbol) - __copy(\._textAttributesForNegativeInfinity) - __copy(\._positivePrefix) - __copy(\._positiveSuffix) - __copy(\._negativePrefix) - __copy(\._negativeSuffix) - __copy(\._currencyCode) - __copy(\._currencySymbol) - __copy(\._internationalCurrencySymbol) - __copy(\._percentSymbol) - __copy(\._perMillSymbol) - __copy(\._minusSign) - __copy(\._plusSign) - __copy(\._exponentSymbol) - __copy(\._groupingSize) - __copy(\._secondaryGroupingSize) - __copy(\._multiplier) - __copy(\._formatWidth) - __copy(\._paddingCharacter) - __copy(\._paddingPosition) - __copy(\._roundingMode) - __copy(\._roundingIncrement) - __copy(\._minimumIntegerDigits) - __copy(\._maximumIntegerDigits) - __copy(\._minimumFractionDigits) - __copy(\._maximumFractionDigits) - __copy(\._minimum) - __copy(\._maximum) - __copy(\._currencyGroupingSeparator) - __copy(\._lenient) - __copy(\._usesSignificantDigits) - __copy(\._minimumSignificantDigits) - __copy(\._maximumSignificantDigits) - __copy(\._partialStringValidationEnabled) - __copy(\._hasThousandSeparators) - __copy(\._thousandSeparator) - __copy(\._localizesFormat) - __copy(\._positiveFormat) - __copy(\._negativeFormat) - __copy(\._attributedStringForZero) - __copy(\._attributedStringForNotANumber) - __copy(\._roundingBehavior) - - return copied - } - - // this is for NSUnitFormatter - - open var formattingContext: Context = .unknown // default is NSFormattingContextUnknown - - @available(*, unavailable, renamed: "number(from:)") - func getObjectValue(_ obj: UnsafeMutablePointer?, - for string: String, - range rangep: UnsafeMutablePointer?) throws { - NSUnsupported() + + public required init?(coder: NSCoder) { + super.init(coder: coder) } - - open override func string(for obj: Any) -> String? { - //we need to allow Swift's numeric types here - Int, Double et al. - guard let number = __SwiftValue.store(obj) as? NSNumber else { return nil } - return string(from: number) - } - - // Even though NumberFormatter responds to the usual Formatter methods, - // here are some convenience methods which are a little more obvious. - open func string(from number: NSNumber) -> String? { - return CFNumberFormatterCreateStringWithNumber(kCFAllocatorSystemDefault, _cfFormatter, number._cfObject)._swiftObject + + private convenience init(state: State) { + self.init() + _lock.withLock { + $0 = state + } } - - open func number(from string: String) -> NSNumber? { - var range = CFRange(location: 0, length: string.length) - let number = withUnsafeMutablePointer(to: &range) { (rangePointer: UnsafeMutablePointer) -> NSNumber? in - - let parseOption = allowsFloats ? 0 : CFNumberFormatterOptionFlags.parseIntegersOnly.rawValue - let result = CFNumberFormatterCreateNumberFromString(kCFAllocatorSystemDefault, _cfFormatter, string._cfObject, rangePointer, parseOption) - - return result?._nsObject + + open override func copy(with zone: NSZone? = nil) -> Any { + return _lock.withLock { state in + // Zone is not Sendable, so just ignore it here + let copy = state.copy() + return NumberFormatter(state: copy) } - return number } - + open class func localizedString(from num: NSNumber, number nstyle: Style) -> String { let numberFormatter = NumberFormatter() numberFormatter.numberStyle = nstyle return numberFormatter.string(for: num)! } - private func _reset() { - _currentCfFormatter = nil - } - - private final func _setFormatterAttributes(_ formatter: CFNumberFormatter) { - if numberStyle == .currency { - // Prefer currencySymbol, then currencyCode then locale.currencySymbol - if let symbol = _currencySymbol { - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterCurrencySymbol, value: symbol._cfObject) - } else if let code = _currencyCode, code.count == 3 { - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterCurrencyCode, value: code._cfObject) + // This class is not Sendable, but marking it as such was the only way to work around compiler crashes while attempting to use `~Copyable` like `DateFormatter` does. + final class State : @unchecked Sendable { + class Box { + var formatter: CFNumberFormatter? + init() {} + } + + private var _formatter = Box() + + // MARK: - + + func copy(with zone: NSZone? = nil) -> State { + let copied = State() + + copied.formattingContext = formattingContext + copied._numberStyle = _numberStyle + copied._locale = _locale + copied._generatesDecimalNumbers = _generatesDecimalNumbers + copied._textAttributesForNegativeValues = _textAttributesForNegativeValues + copied._textAttributesForPositiveValues = _textAttributesForPositiveValues + copied._allowsFloats = _allowsFloats + copied._decimalSeparator = _decimalSeparator + copied._alwaysShowsDecimalSeparator = _alwaysShowsDecimalSeparator + copied._currencyDecimalSeparator = _currencyDecimalSeparator + copied._usesGroupingSeparator = _usesGroupingSeparator + copied._groupingSeparator = _groupingSeparator + copied._zeroSymbol = _zeroSymbol + copied._textAttributesForZero = _textAttributesForZero + copied._nilSymbol = _nilSymbol + copied._textAttributesForNil = _textAttributesForNil + copied._notANumberSymbol = _notANumberSymbol + copied._textAttributesForNotANumber = _textAttributesForNotANumber + copied._positiveInfinitySymbol = _positiveInfinitySymbol + copied._textAttributesForPositiveInfinity = _textAttributesForPositiveInfinity + copied._negativeInfinitySymbol = _negativeInfinitySymbol + copied._textAttributesForNegativeInfinity = _textAttributesForNegativeInfinity + copied._positivePrefix = _positivePrefix + copied._positiveSuffix = _positiveSuffix + copied._negativePrefix = _negativePrefix + copied._negativeSuffix = _negativeSuffix + copied._currencyCode = _currencyCode + copied._currencySymbol = _currencySymbol + copied._internationalCurrencySymbol = _internationalCurrencySymbol + copied._percentSymbol = _percentSymbol + copied._perMillSymbol = _perMillSymbol + copied._minusSign = _minusSign + copied._plusSign = _plusSign + copied._exponentSymbol = _exponentSymbol + copied._groupingSize = _groupingSize + copied._secondaryGroupingSize = _secondaryGroupingSize + copied._multiplier = _multiplier + copied._formatWidth = _formatWidth + copied._paddingCharacter = _paddingCharacter + copied._paddingPosition = _paddingPosition + copied._roundingMode = _roundingMode + copied._roundingIncrement = _roundingIncrement + copied._minimumIntegerDigits = _minimumIntegerDigits + copied._maximumIntegerDigits = _maximumIntegerDigits + copied._minimumFractionDigits = _minimumFractionDigits + copied._maximumFractionDigits = _maximumFractionDigits + copied._minimum = _minimum + copied._maximum = _maximum + copied._currencyGroupingSeparator = _currencyGroupingSeparator + copied._lenient = _lenient + copied._usesSignificantDigits = _usesSignificantDigits + copied._minimumSignificantDigits = _minimumSignificantDigits + copied._maximumSignificantDigits = _maximumSignificantDigits + copied._partialStringValidationEnabled = _partialStringValidationEnabled + copied._hasThousandSeparators = _hasThousandSeparators + copied._thousandSeparator = _thousandSeparator + copied._localizesFormat = _localizesFormat + copied._positiveFormat = _positiveFormat + copied._negativeFormat = _negativeFormat + copied._roundingBehavior = _roundingBehavior + + return copied + } + + // MARK: - + + func _reset() { + _formatter.formatter = nil + } + + func formatter() -> CFNumberFormatter { + if let obj = _formatter.formatter { + return obj } else { - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterCurrencySymbol, value: locale.currencySymbol?._cfObject) + let numberStyle = CFNumberFormatterStyle(rawValue: CFIndex(_numberStyle.rawValue))! + + let obj = CFNumberFormatterCreate(kCFAllocatorSystemDefault, locale._cfObject, numberStyle)! + _setFormatterAttributes(obj) + if _positiveFormat != nil || _negativeFormat != nil { + var format = _positiveFormat ?? "#" + if let negative = _negativeFormat { + format.append(";") + format.append(negative) + } + CFNumberFormatterSetFormat(obj, format._cfObject) + } + _formatter.formatter = obj + return obj } - } - if numberStyle == .currencyISOCode { - let code = _currencyCode ?? _currencySymbol ?? locale.currencyCode ?? locale.currencySymbol - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterCurrencyCode, value: code?._cfObject) } - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterDecimalSeparator, value: _decimalSeparator?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterCurrencyDecimalSeparator, value: _currencyDecimalSeparator?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterAlwaysShowDecimalSeparator, value: _alwaysShowsDecimalSeparator._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterGroupingSeparator, value: _groupingSeparator?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterUseGroupingSeparator, value: usesGroupingSeparator._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPercentSymbol, value: _percentSymbol?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterZeroSymbol, value: _zeroSymbol?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterNaNSymbol, value: _notANumberSymbol?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterInfinitySymbol, value: _positiveInfinitySymbol._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMinusSign, value: _minusSign?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPlusSign, value: _plusSign?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterExponentSymbol, value: _exponentSymbol?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMinIntegerDigits, value: _minimumIntegerDigits?._bridgeToObjectiveC()._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMaxIntegerDigits, value: _maximumIntegerDigits?._bridgeToObjectiveC()._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMinFractionDigits, value: _minimumFractionDigits?._bridgeToObjectiveC()._cfObject) - if minimumFractionDigits <= 0 { - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMaxFractionDigits, value: maximumFractionDigits._bridgeToObjectiveC()._cfObject) + + private func _setFormatterAttributes(_ formatter: CFNumberFormatter) { + if numberStyle == .currency { + // Prefer currencySymbol, then currencyCode then locale.currencySymbol + if let symbol = _currencySymbol { + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterCurrencySymbol, value: symbol._cfObject) + } else if let code = _currencyCode, code.count == 3 { + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterCurrencyCode, value: code._cfObject) + } else { + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterCurrencySymbol, value: locale.currencySymbol?._cfObject) + } + } + if numberStyle == .currencyISOCode { + let code = _currencyCode ?? _currencySymbol ?? locale.currencyCode ?? locale.currencySymbol + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterCurrencyCode, value: code?._cfObject) + } + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterDecimalSeparator, value: _decimalSeparator?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterCurrencyDecimalSeparator, value: _currencyDecimalSeparator?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterAlwaysShowDecimalSeparator, value: _alwaysShowsDecimalSeparator._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterGroupingSeparator, value: _groupingSeparator?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterUseGroupingSeparator, value: usesGroupingSeparator._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPercentSymbol, value: _percentSymbol?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterZeroSymbol, value: _zeroSymbol?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterNaNSymbol, value: _notANumberSymbol?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterInfinitySymbol, value: _positiveInfinitySymbol._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMinusSign, value: _minusSign?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPlusSign, value: _plusSign?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterExponentSymbol, value: _exponentSymbol?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMinIntegerDigits, value: _minimumIntegerDigits?._bridgeToObjectiveC()._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMaxIntegerDigits, value: _maximumIntegerDigits?._bridgeToObjectiveC()._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMinFractionDigits, value: _minimumFractionDigits?._bridgeToObjectiveC()._cfObject) + if minimumFractionDigits <= 0 { + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMaxFractionDigits, value: maximumFractionDigits._bridgeToObjectiveC()._cfObject) + } + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterGroupingSize, value: groupingSize._bridgeToObjectiveC()._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterSecondaryGroupingSize, value: _secondaryGroupingSize._bridgeToObjectiveC()._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterRoundingMode, value: _roundingMode.rawValue._bridgeToObjectiveC()._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterRoundingIncrement, value: _roundingIncrement?._cfObject) + + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterFormatWidth, value: _formatWidth?._bridgeToObjectiveC()._cfObject) + if self.formatWidth > 0 { + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPaddingCharacter, value: _paddingCharacter?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPaddingPosition, value: _paddingPosition.rawValue._bridgeToObjectiveC()._cfObject) + } else { + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPaddingCharacter, value: ""._cfObject) + } + + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMultiplier, value: multiplier?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPositivePrefix, value: _positivePrefix?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPositiveSuffix, value: _positiveSuffix?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterNegativePrefix, value: _negativePrefix?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterNegativeSuffix, value: _negativeSuffix?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPerMillSymbol, value: _percentSymbol?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterInternationalCurrencySymbol, value: _internationalCurrencySymbol?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterCurrencyGroupingSeparator, value: _currencyGroupingSeparator?._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterIsLenient, value: _lenient._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterUseSignificantDigits, value: usesSignificantDigits._cfObject) + if usesSignificantDigits { + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMinSignificantDigits, value: minimumSignificantDigits._bridgeToObjectiveC()._cfObject) + _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMaxSignificantDigits, value: maximumSignificantDigits._bridgeToObjectiveC()._cfObject) + } } - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterGroupingSize, value: groupingSize._bridgeToObjectiveC()._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterSecondaryGroupingSize, value: _secondaryGroupingSize._bridgeToObjectiveC()._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterRoundingMode, value: _roundingMode.rawValue._bridgeToObjectiveC()._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterRoundingIncrement, value: _roundingIncrement?._cfObject) - - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterFormatWidth, value: _formatWidth?._bridgeToObjectiveC()._cfObject) - if self.formatWidth > 0 { - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPaddingCharacter, value: _paddingCharacter?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPaddingPosition, value: _paddingPosition.rawValue._bridgeToObjectiveC()._cfObject) - } else { - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPaddingCharacter, value: ""._cfObject) + + private func _setFormatterAttribute(_ formatter: CFNumberFormatter, attributeName: CFString, value: AnyObject?) { + if let value = value { + CFNumberFormatterSetProperty(formatter, attributeName, value) + } } - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMultiplier, value: multiplier?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPositivePrefix, value: _positivePrefix?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPositiveSuffix, value: _positiveSuffix?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterNegativePrefix, value: _negativePrefix?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterNegativeSuffix, value: _negativeSuffix?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterPerMillSymbol, value: _percentSymbol?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterInternationalCurrencySymbol, value: _internationalCurrencySymbol?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterCurrencyGroupingSeparator, value: _currencyGroupingSeparator?._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterIsLenient, value: _lenient._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterUseSignificantDigits, value: usesSignificantDigits._cfObject) - if usesSignificantDigits { - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMinSignificantDigits, value: minimumSignificantDigits._bridgeToObjectiveC()._cfObject) - _setFormatterAttribute(formatter, attributeName: kCFNumberFormatterMaxSignificantDigits, value: maximumSignificantDigits._bridgeToObjectiveC()._cfObject) + + private func _getFormatterAttribute(attributeName: CFString) -> String? { + // This will only be a constant CFString + nonisolated(unsafe) let nonisolatedAttributeName = attributeName + return CFNumberFormatterCopyProperty(formatter(), nonisolatedAttributeName) as? String } - } - private final func _setFormatterAttribute(_ formatter: CFNumberFormatter, attributeName: CFString, value: AnyObject?) { - if let value = value { - CFNumberFormatterSetProperty(formatter, attributeName, value) + private func getFormatterComponents() -> (String?, String?) { + guard let format = CFNumberFormatterGetFormat(formatter())?._swiftObject else { + return (nil, nil) + } + let components = format.components(separatedBy: ";") + let positive = _positiveFormat ?? components.first ?? "#" + let negative = _negativeFormat ?? components.last ?? "#" + return (positive, negative) + } + + // MARK: - Properties + + private var _numberStyle: Style = .none + var numberStyle: Style { + get { + return _numberStyle + } + + set { + _reset() + _numberStyle = newValue + } } - } - - private final func _getFormatterAttribute(_ formatter: CFNumberFormatter, attributeName: CFString) -> String? { - return CFNumberFormatterCopyProperty(formatter, attributeName) as? String - } - - // Attributes of a NumberFormatter. Many attributes have default values but if they are set by the caller - // the new value needs to be retained even if the .numberStyle is changed. Attributes are backed by an optional - // to indicate to use the default value (if nil) or the caller-supplied value (if not nil). - private func defaultMinimumIntegerDigits() -> Int { - switch numberStyle { - case .ordinal, .spellOut, .currencyPlural: - return 0 - - case .none, .currency, .currencyISOCode, .currencyAccounting, .decimal, .percent, .scientific: - return 1 + + private var _locale: Locale = Locale.current + var locale: Locale! { + get { + return _locale + } + set { + _reset() + _locale = newValue + } } - } - - private func defaultMaximumIntegerDigits() -> Int { - switch numberStyle { - case .none: - return 42 - - case .ordinal, .spellOut, .currencyPlural: - return 0 - - case .currency, .currencyISOCode, .currencyAccounting, .decimal, .percent: - return 2_000_000_000 - - case .scientific: - return 1 + + private var _generatesDecimalNumbers: Bool = false + var generatesDecimalNumbers: Bool { + get { + return _generatesDecimalNumbers + } + set { + _reset() + _generatesDecimalNumbers = newValue + } } - } - - private func defaultMinimumFractionDigits() -> Int { - switch numberStyle { - case .none, .ordinal, .spellOut, .currencyPlural, .decimal, .percent, .scientific: - return 0 - - case .currency, .currencyISOCode, .currencyAccounting: - return 2 + + private var _textAttributesForNegativeValues: [String : (Any & Sendable)]? + var textAttributesForNegativeValues: [String : (Any & Sendable)]? { + get { + return _textAttributesForNegativeValues + } + set { + _reset() + _textAttributesForNegativeValues = newValue + } } - } - - private func defaultMaximumFractionDigits() -> Int { - switch numberStyle { - case .none, .ordinal, .spellOut, .currencyPlural, .percent, .scientific: - return 0 - - case .currency, .currencyISOCode, .currencyAccounting: - return 2 - - case .decimal: - return 3 + + private var _textAttributesForPositiveValues: [String : (Any & Sendable)]? + var textAttributesForPositiveValues: [String : (Any & Sendable)]? { + get { + return _textAttributesForPositiveValues + } + set { + _reset() + _textAttributesForPositiveValues = newValue + } } - } - - private func defaultMinimumSignificantDigits() -> Int { - switch numberStyle { - case .ordinal, .spellOut, .currencyPlural: - return 0 - - case .currency, .none, .currencyISOCode, .currencyAccounting, .decimal, .percent, .scientific: - return -1 + + private var _allowsFloats: Bool = true + var allowsFloats: Bool { + get { + return _allowsFloats + } + set { + _reset() + _allowsFloats = newValue + } } - } - - private func defaultMaximumSignificantDigits() -> Int { - switch numberStyle { - case .none, .currency, .currencyISOCode, .currencyAccounting, .decimal, .percent, .scientific: - return -1 - - case .ordinal, .spellOut, .currencyPlural: - return 0 + + private var _decimalSeparator: String! + var decimalSeparator: String! { + get { + return _decimalSeparator ?? _getFormatterAttribute(attributeName: kCFNumberFormatterDecimalSeparator) + } + set { + _reset() + _decimalSeparator = newValue + } } - } - - private func defaultUsesGroupingSeparator() -> Bool { - switch numberStyle { - case .none, .scientific, .spellOut, .ordinal, .currencyPlural: - return false - - case .decimal, .currency, .percent, .currencyAccounting, .currencyISOCode: - return true + + private var _alwaysShowsDecimalSeparator: Bool = false + var alwaysShowsDecimalSeparator: Bool { + get { + return _alwaysShowsDecimalSeparator + } + set { + _reset() + _alwaysShowsDecimalSeparator = newValue + } + } + + private var _currencyDecimalSeparator: String! + var currencyDecimalSeparator: String! { + get { + return _currencyDecimalSeparator ?? _getFormatterAttribute(attributeName: kCFNumberFormatterCurrencyDecimalSeparator) + } + set { + _reset() + _currencyDecimalSeparator = newValue + } + } + + private var _usesGroupingSeparator: Bool? + var usesGroupingSeparator: Bool { + get { + return _usesGroupingSeparator ?? defaultUsesGroupingSeparator() + } + set { + _reset() + _usesGroupingSeparator = newValue + } + } + + private var _groupingSeparator: String! + var groupingSeparator: String! { + get { + return _groupingSeparator ?? _getFormatterAttribute(attributeName: kCFNumberFormatterGroupingSeparator) + } + set { + _reset() + _groupingSeparator = newValue + } + } + + private var _zeroSymbol: String? + var zeroSymbol: String? { + get { + return _zeroSymbol + } + set { + _reset() + _zeroSymbol = newValue + } + } + + private var _textAttributesForZero: [String : (Any & Sendable)]? + var textAttributesForZero: [String : (Any & Sendable)]? { + get { + return _textAttributesForZero + } + set { + _reset() + _textAttributesForZero = newValue + } + } + + private var _nilSymbol: String = "" + var nilSymbol: String { + get { + return _nilSymbol + } + set { + _reset() + _nilSymbol = newValue + } + } + + private var _textAttributesForNil: [String : (Any & Sendable)]? + var textAttributesForNil: [String : (Any & Sendable)]? { + get { + return _textAttributesForNil + } + set { + _reset() + _textAttributesForNil = newValue + } + } + + private var _notANumberSymbol: String! + var notANumberSymbol: String! { + get { + return _notANumberSymbol ?? _getFormatterAttribute(attributeName: kCFNumberFormatterNaNSymbol) + } + set { + _reset() + _notANumberSymbol = newValue + } + } + + private var _textAttributesForNotANumber: [String : (Any & Sendable)]? + var textAttributesForNotANumber: [String : (Any & Sendable)]? { + get { + return _textAttributesForNotANumber + } + set { + _reset() + _textAttributesForNotANumber = newValue + } + } + + private var _positiveInfinitySymbol: String = "+∞" + var positiveInfinitySymbol: String { + get { + return _positiveInfinitySymbol + } + set { + _reset() + _positiveInfinitySymbol = newValue + } + } + + private var _textAttributesForPositiveInfinity: [String : (Any & Sendable)]? + var textAttributesForPositiveInfinity: [String : (Any & Sendable)]? { + get { + return _textAttributesForPositiveInfinity + } + set { + _reset() + _textAttributesForPositiveInfinity = newValue + } + } + + private var _negativeInfinitySymbol: String = "-∞" + var negativeInfinitySymbol: String { + get { + return _negativeInfinitySymbol + } + set { + _reset() + _negativeInfinitySymbol = newValue + } + } + + private var _textAttributesForNegativeInfinity: [String : (Any & Sendable)]? + var textAttributesForNegativeInfinity: [String : (Any & Sendable)]? { + get { + return _textAttributesForNegativeInfinity + } + set { + _reset() + _textAttributesForNegativeInfinity = newValue + } + } + + private var _positivePrefix: String! + var positivePrefix: String! { + get { + return _positivePrefix ?? _getFormatterAttribute(attributeName: kCFNumberFormatterPositivePrefix) + } + set { + _reset() + _positivePrefix = newValue + } + } + + private var _positiveSuffix: String! + var positiveSuffix: String! { + get { + return _positiveSuffix ?? _getFormatterAttribute(attributeName: kCFNumberFormatterPositiveSuffix) + } + set { + _reset() + _positiveSuffix = newValue + } + } + + private var _negativePrefix: String! + var negativePrefix: String! { + get { + return _negativePrefix ?? _getFormatterAttribute(attributeName: kCFNumberFormatterNegativePrefix) + } + set { + _reset() + _negativePrefix = newValue + } + } + + private var _negativeSuffix: String! + var negativeSuffix: String! { + get { + return _negativeSuffix ?? _getFormatterAttribute(attributeName: kCFNumberFormatterNegativeSuffix) + } + set { + _reset() + _negativeSuffix = newValue + } + } + + private var _currencyCode: String! + var currencyCode: String! { + get { + return _currencyCode ?? _getFormatterAttribute(attributeName: kCFNumberFormatterCurrencyCode) + } + set { + _reset() + _currencyCode = newValue + } + } + + private var _currencySymbol: String! + var currencySymbol: String! { + get { + return _currencySymbol ?? _getFormatterAttribute(attributeName: kCFNumberFormatterCurrencySymbol) + } + set { + _reset() + _currencySymbol = newValue + } + } + + private var _internationalCurrencySymbol: String! + var internationalCurrencySymbol: String! { + get { + return _internationalCurrencySymbol ?? _getFormatterAttribute(attributeName: kCFNumberFormatterInternationalCurrencySymbol) + } + set { + _reset() + _internationalCurrencySymbol = newValue + } + } + + private var _percentSymbol: String! + var percentSymbol: String! { + get { + return _percentSymbol ?? _getFormatterAttribute(attributeName: kCFNumberFormatterPercentSymbol) ?? "%" + } + set { + _reset() + _percentSymbol = newValue + } + } + + private var _perMillSymbol: String! + var perMillSymbol: String! { + get { + return _perMillSymbol ?? _getFormatterAttribute(attributeName: kCFNumberFormatterPerMillSymbol) + } + set { + _reset() + _perMillSymbol = newValue + } + } + + private var _minusSign: String! + var minusSign: String! { + get { + return _minusSign ?? _getFormatterAttribute(attributeName: kCFNumberFormatterMinusSign) + } + set { + _reset() + _minusSign = newValue + } + } + + private var _plusSign: String! + var plusSign: String! { + get { + return _plusSign ?? _getFormatterAttribute(attributeName: kCFNumberFormatterPlusSign) + } + set { + _reset() + _plusSign = newValue + } + } + + private var _exponentSymbol: String! + var exponentSymbol: String! { + get { + return _exponentSymbol ?? _getFormatterAttribute(attributeName: kCFNumberFormatterExponentSymbol) + } + set { + _reset() + _exponentSymbol = newValue + } + } + + private var _groupingSize: Int? + var groupingSize: Int { + get { + return _groupingSize ?? defaultGroupingSize() + } + set { + _reset() + _groupingSize = newValue + } + } + + private var _secondaryGroupingSize: Int = 0 + var secondaryGroupingSize: Int { + get { + return _secondaryGroupingSize + } + set { + _reset() + _secondaryGroupingSize = newValue + } + } + + private var _multiplier: NSNumber? + var multiplier: NSNumber? { + get { + return _multiplier ?? defaultMultiplier() + } + set { + _reset() + _multiplier = newValue + } + } + + private var _formatWidth: Int? + var formatWidth: Int { + get { + return _formatWidth ?? defaultFormatWidth() + } + set { + _reset() + _formatWidth = newValue + } + } + + private var _paddingCharacter: String! = " " + var paddingCharacter: String! { + get { + return _paddingCharacter ?? _getFormatterAttribute(attributeName: kCFNumberFormatterPaddingCharacter) + } + set { + _reset() + _paddingCharacter = newValue + } + } + + private var _paddingPosition: PadPosition = .beforePrefix + var paddingPosition: PadPosition { + get { + return _paddingPosition + } + set { + _reset() + _paddingPosition = newValue + } + } + + private var _roundingMode: RoundingMode = .halfEven + var roundingMode: RoundingMode { + get { + return _roundingMode + } + set { + _reset() + _roundingMode = newValue + } + } + + private var _roundingIncrement: NSNumber! = 0 + var roundingIncrement: NSNumber! { + get { + return _roundingIncrement + } + set { + _reset() + _roundingIncrement = newValue + } + } + + // Use an optional for _minimumIntegerDigits to track if the value is + // set BEFORE the .numberStyle is changed. This allows preserving a setting + // of 0. + private var _minimumIntegerDigits: Int? + var minimumIntegerDigits: Int { + get { + return _minimumIntegerDigits ?? defaultMinimumIntegerDigits() + } + set { + _reset() + _minimumIntegerDigits = newValue + } + } + + private var _maximumIntegerDigits: Int? + var maximumIntegerDigits: Int { + get { + return _maximumIntegerDigits ?? defaultMaximumIntegerDigits() + } + set { + _reset() + _maximumIntegerDigits = newValue + } + } + + private var _minimumFractionDigits: Int? + var minimumFractionDigits: Int { + get { + return _minimumFractionDigits ?? defaultMinimumFractionDigits() + } + set { + _reset() + _minimumFractionDigits = newValue + } + } + + private var _maximumFractionDigits: Int? + var maximumFractionDigits: Int { + get { + return _maximumFractionDigits ?? defaultMaximumFractionDigits() + } + set { + _reset() + _maximumFractionDigits = newValue + } + } + + private var _minimum: NSNumber? + var minimum: NSNumber? { + get { + return _minimum + } + set { + _reset() + _minimum = newValue + } + } + + private var _maximum: NSNumber? + var maximum: NSNumber? { + get { + return _maximum + } + set { + _reset() + _maximum = newValue + } + } + + private var _currencyGroupingSeparator: String! + var currencyGroupingSeparator: String! { + get { + return _currencyGroupingSeparator ?? _getFormatterAttribute(attributeName: kCFNumberFormatterCurrencyGroupingSeparator) + } + set { + _reset() + _currencyGroupingSeparator = newValue + } + } + + private var _lenient: Bool = false + var isLenient: Bool { + get { + return _lenient + } + set { + _reset() + _lenient = newValue + } + } + + private var _usesSignificantDigits: Bool? + var usesSignificantDigits: Bool { + get { + return _usesSignificantDigits ?? false + } + set { + _reset() + _usesSignificantDigits = newValue + } + } + + private var _minimumSignificantDigits: Int? + var minimumSignificantDigits: Int { + get { + return _minimumSignificantDigits ?? defaultMinimumSignificantDigits() + } + set { + _reset() + _usesSignificantDigits = true + _minimumSignificantDigits = newValue + if _maximumSignificantDigits == nil && newValue > defaultMinimumSignificantDigits() { + _maximumSignificantDigits = (newValue < 1000) ? 999 : newValue + } + } + } + + private var _maximumSignificantDigits: Int? + var maximumSignificantDigits: Int { + get { + return _maximumSignificantDigits ?? defaultMaximumSignificantDigits() + } + set { + _reset() + _usesSignificantDigits = true + _maximumSignificantDigits = newValue + } + } + + private var _partialStringValidationEnabled: Bool = false + var isPartialStringValidationEnabled: Bool { + get { + return _partialStringValidationEnabled + } + set { + _reset() + _partialStringValidationEnabled = newValue + } + } + + private var _hasThousandSeparators: Bool = false + var hasThousandSeparators: Bool { + get { + return _hasThousandSeparators + } + set { + _reset() + _hasThousandSeparators = newValue + } + } + + private var _thousandSeparator: String! + var thousandSeparator: String! { + get { + return _thousandSeparator + } + set { + _reset() + _thousandSeparator = newValue + } + } + + private var _localizesFormat: Bool = true + var localizesFormat: Bool { + get { + return _localizesFormat + } + set { + _reset() + _localizesFormat = newValue + } + } + + private var _positiveFormat: String! + var positiveFormat: String! { + get { + return getFormatterComponents().0 + } + set { + _reset() + _positiveFormat = newValue + } } - } - - private func defaultGroupingSize() -> Int { - switch numberStyle { - case .none, .ordinal, .spellOut, .currencyPlural, .scientific: - return 0 - case .currency, .currencyISOCode, .currencyAccounting, .decimal, .percent: - return 3 + private var _negativeFormat: String! + var negativeFormat: String! { + get { + return getFormatterComponents().1 + } + set { + _reset() + _negativeFormat = newValue + } } - } - private func defaultMultiplier() -> NSNumber? { - switch numberStyle { - case .percent: return NSNumber(100) - default: return nil + private var _roundingBehavior: NSDecimalNumberHandler = NSDecimalNumberHandler.default + var roundingBehavior: NSDecimalNumberHandler { + get { + return _roundingBehavior + } + set { + _reset() + _roundingBehavior = newValue + } + } + + private func getZeroFormat() -> String { + return string(from: 0) ?? "0" } - } - private func defaultFormatWidth() -> Int { - switch numberStyle { - case .ordinal, .spellOut, .currencyPlural: - return 0 + var format: String { + get { + let (p, n) = getFormatterComponents() + let z = _zeroSymbol ?? getZeroFormat() + return "\(p ?? "(null)");\(z);\(n ?? "(null)")" + } + set { + // Special case empty string + if newValue == "" { + _positiveFormat = "" + _negativeFormat = "-" + _zeroSymbol = "0" + _reset() + } else { + let components = newValue.components(separatedBy: ";") + let count = components.count + guard count <= 3 else { return } + _reset() + + _positiveFormat = components.first ?? "" + if count == 1 { + _negativeFormat = "-\(_positiveFormat ?? "")" + } + else if count == 2 { + _negativeFormat = components[1] + _zeroSymbol = getZeroFormat() + } + else if count == 3 { + _zeroSymbol = components[1] + _negativeFormat = components[2] + } + + if _negativeFormat == nil { + _negativeFormat = getFormatterComponents().1 + } + + if _zeroSymbol == nil { + _zeroSymbol = getZeroFormat() + } + } + } + } - case .none, .decimal, .currency, .percent, .scientific, .currencyISOCode, .currencyAccounting: - return -1 + // this is for NSUnitFormatter + + var formattingContext: Context = .unknown // default is NSFormattingContextUnknown + + func string(for obj: Any) -> String? { + //we need to allow Swift's numeric types here - Int, Double et al. + guard let number = __SwiftValue.store(obj) as? NSNumber else { return nil } + return string(from: number) + } + + // Even though NumberFormatter responds to the usual Formatter methods, + // here are some convenience methods which are a little more obvious. + func string(from number: NSNumber) -> String? { + return CFNumberFormatterCreateStringWithNumber(kCFAllocatorSystemDefault, formatter(), number._cfObject)._swiftObject + } + + func number(from string: String) -> NSNumber? { + var range = CFRange(location: 0, length: string.length) + let number = withUnsafeMutablePointer(to: &range) { (rangePointer: UnsafeMutablePointer) -> NSNumber? in + + let parseOption = allowsFloats ? 0 : CFNumberFormatterOptionFlags.parseIntegersOnly.rawValue + let result = CFNumberFormatterCreateNumberFromString(kCFAllocatorSystemDefault, formatter(), string._cfObject, rangePointer, parseOption) + + return result?._nsObject + } + return number + } + + // Attributes of a NumberFormatter. Many attributes have default values but if they are set by the caller + // the new value needs to be retained even if the .numberStyle is changed. Attributes are backed by an optional + // to indicate to use the default value (if nil) or the caller-supplied value (if not nil). + private func defaultMinimumIntegerDigits() -> Int { + switch numberStyle { + case .ordinal, .spellOut, .currencyPlural: + return 0 + + case .none, .currency, .currencyISOCode, .currencyAccounting, .decimal, .percent, .scientific: + return 1 + } } + + private func defaultMaximumIntegerDigits() -> Int { + switch numberStyle { + case .none: + return 42 + + case .ordinal, .spellOut, .currencyPlural: + return 0 + + case .currency, .currencyISOCode, .currencyAccounting, .decimal, .percent: + return 2_000_000_000 + + case .scientific: + return 1 + } + } + + private func defaultMinimumFractionDigits() -> Int { + switch numberStyle { + case .none, .ordinal, .spellOut, .currencyPlural, .decimal, .percent, .scientific: + return 0 + + case .currency, .currencyISOCode, .currencyAccounting: + return 2 + } + } + + private func defaultMaximumFractionDigits() -> Int { + switch numberStyle { + case .none, .ordinal, .spellOut, .currencyPlural, .percent, .scientific: + return 0 + + case .currency, .currencyISOCode, .currencyAccounting: + return 2 + + case .decimal: + return 3 + } + } + + private func defaultMinimumSignificantDigits() -> Int { + switch numberStyle { + case .ordinal, .spellOut, .currencyPlural: + return 0 + + case .currency, .none, .currencyISOCode, .currencyAccounting, .decimal, .percent, .scientific: + return -1 + } + } + + private func defaultMaximumSignificantDigits() -> Int { + switch numberStyle { + case .none, .currency, .currencyISOCode, .currencyAccounting, .decimal, .percent, .scientific: + return -1 + + case .ordinal, .spellOut, .currencyPlural: + return 0 + } + } + + private func defaultUsesGroupingSeparator() -> Bool { + switch numberStyle { + case .none, .scientific, .spellOut, .ordinal, .currencyPlural: + return false + + case .decimal, .currency, .percent, .currencyAccounting, .currencyISOCode: + return true + } + } + + private func defaultGroupingSize() -> Int { + switch numberStyle { + case .none, .ordinal, .spellOut, .currencyPlural, .scientific: + return 0 + + case .currency, .currencyISOCode, .currencyAccounting, .decimal, .percent: + return 3 + } + } + + private func defaultMultiplier() -> NSNumber? { + switch numberStyle { + case .percent: return NSNumber(100) + default: return nil + } + } + + private func defaultFormatWidth() -> Int { + switch numberStyle { + case .ordinal, .spellOut, .currencyPlural: + return 0 + + case .none, .decimal, .currency, .percent, .scientific, .currencyISOCode, .currencyAccounting: + return -1 + } + } + } + + // MARK: - + + open func string(from number: NSNumber) -> String? { + _lock.withLock { $0.string(from: number) } } - private var _numberStyle: Style = .none + open func number(from string: String) -> NSNumber? { + _lock.withLock { $0.number(from: string) } + } + + open override func string(for obj: Any) -> String? { + //we need to allow Swift's numeric types here - Int, Double et al. + guard let number = __SwiftValue.store(obj) as? NSNumber else { return nil } + return string(from: number) + } + open var numberStyle: Style { - get { - return _numberStyle - } - - set { - _reset() - _numberStyle = newValue - } + get { _lock.withLock { $0.numberStyle } } + set { _lock.withLock { $0.numberStyle = newValue } } } - private var _locale: Locale = Locale.current - /*@NSCopying*/ open var locale: Locale! { - get { - return _locale - } - set { - _reset() - _locale = newValue - } + open var locale: Locale! { + get { _lock.withLock { $0.locale } } + set { _lock.withLock { $0.locale = newValue } } } - private var _generatesDecimalNumbers: Bool = false open var generatesDecimalNumbers: Bool { - get { - return _generatesDecimalNumbers - } - set { - _reset() - _generatesDecimalNumbers = newValue - } + get { _lock.withLock { $0.generatesDecimalNumbers } } + set { _lock.withLock { $0.generatesDecimalNumbers = newValue } } } - private var _textAttributesForNegativeValues: [String : Any]? - open var textAttributesForNegativeValues: [String : Any]? { - get { - return _textAttributesForNegativeValues - } - set { - _reset() - _textAttributesForNegativeValues = newValue - } + open var textAttributesForNegativeValues: [String : (Any & Sendable)]? { + get { _lock.withLock { $0.textAttributesForNegativeValues } } + set { _lock.withLock { $0.textAttributesForNegativeValues = newValue } } } - private var _textAttributesForPositiveValues: [String : Any]? - open var textAttributesForPositiveValues: [String : Any]? { - get { - return _textAttributesForPositiveValues - } - set { - _reset() - _textAttributesForPositiveValues = newValue - } + open var textAttributesForPositiveValues: [String : (Any & Sendable)]? { + get { _lock.withLock { $0.textAttributesForPositiveValues } } + set { _lock.withLock { $0.textAttributesForPositiveValues = newValue } } } - private var _allowsFloats: Bool = true open var allowsFloats: Bool { - get { - return _allowsFloats - } - set { - _reset() - _allowsFloats = newValue - } + get { _lock.withLock { $0.allowsFloats } } + set { _lock.withLock { $0.allowsFloats = newValue } } } - private var _decimalSeparator: String! open var decimalSeparator: String! { - get { - return _decimalSeparator ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterDecimalSeparator) - } - set { - _reset() - _decimalSeparator = newValue - } + get { _lock.withLock { $0.decimalSeparator } } + set { _lock.withLock { $0.decimalSeparator = newValue } } } - private var _alwaysShowsDecimalSeparator: Bool = false open var alwaysShowsDecimalSeparator: Bool { - get { - return _alwaysShowsDecimalSeparator - } - set { - _reset() - _alwaysShowsDecimalSeparator = newValue - } + get { _lock.withLock { $0.alwaysShowsDecimalSeparator } } + set { _lock.withLock { $0.alwaysShowsDecimalSeparator = newValue } } } - private var _currencyDecimalSeparator: String! open var currencyDecimalSeparator: String! { - get { - return _currencyDecimalSeparator ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterCurrencyDecimalSeparator) - } - set { - _reset() - _currencyDecimalSeparator = newValue - } + get { _lock.withLock { $0.currencyDecimalSeparator } } + set { _lock.withLock { $0.currencyDecimalSeparator = newValue } } } - private var _usesGroupingSeparator: Bool? open var usesGroupingSeparator: Bool { - get { - return _usesGroupingSeparator ?? defaultUsesGroupingSeparator() - } - set { - _reset() - _usesGroupingSeparator = newValue - } + get { _lock.withLock { $0.usesGroupingSeparator } } + set { _lock.withLock { $0.usesGroupingSeparator = newValue } } } - private var _groupingSeparator: String! open var groupingSeparator: String! { - get { - return _groupingSeparator ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterGroupingSeparator) - } - set { - _reset() - _groupingSeparator = newValue - } + get { _lock.withLock { $0.groupingSeparator } } + set { _lock.withLock { $0.groupingSeparator = newValue } } } - private var _zeroSymbol: String? open var zeroSymbol: String? { - get { - return _zeroSymbol - } - set { - _reset() - _zeroSymbol = newValue - } + get { _lock.withLock { $0.zeroSymbol } } + set { _lock.withLock { $0.zeroSymbol = newValue } } } - private var _textAttributesForZero: [String : Any]? - open var textAttributesForZero: [String : Any]? { - get { - return _textAttributesForZero - } - set { - _reset() - _textAttributesForZero = newValue - } + open var textAttributesForZero: [String : (Any & Sendable)]? { + get { _lock.withLock { $0.textAttributesForZero } } + set { _lock.withLock { $0.textAttributesForZero = newValue } } } - private var _nilSymbol: String = "" open var nilSymbol: String { - get { - return _nilSymbol - } - set { - _reset() - _nilSymbol = newValue - } + get { _lock.withLock { $0.nilSymbol } } + set { _lock.withLock { $0.nilSymbol = newValue } } } - private var _textAttributesForNil: [String : Any]? - open var textAttributesForNil: [String : Any]? { - get { - return _textAttributesForNil - } - set { - _reset() - _textAttributesForNil = newValue - } + open var textAttributesForNil: [String : (Any & Sendable)]? { + get { _lock.withLock { $0.textAttributesForNil } } + set { _lock.withLock { $0.textAttributesForNil = newValue } } } - private var _notANumberSymbol: String! open var notANumberSymbol: String! { - get { - return _notANumberSymbol ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterNaNSymbol) - } - set { - _reset() - _notANumberSymbol = newValue - } + get { _lock.withLock { $0.notANumberSymbol } } + set { _lock.withLock { $0.notANumberSymbol = newValue } } } - private var _textAttributesForNotANumber: [String : Any]? - open var textAttributesForNotANumber: [String : Any]? { - get { - return _textAttributesForNotANumber - } - set { - _reset() - _textAttributesForNotANumber = newValue - } + open var textAttributesForNotANumber: [String : (Any & Sendable)]? { + get { _lock.withLock { $0.textAttributesForNotANumber } } + set { _lock.withLock { $0.textAttributesForNotANumber = newValue } } } - private var _positiveInfinitySymbol: String = "+∞" open var positiveInfinitySymbol: String { - get { - return _positiveInfinitySymbol - } - set { - _reset() - _positiveInfinitySymbol = newValue - } + get { _lock.withLock { $0.positiveInfinitySymbol } } + set { _lock.withLock { $0.positiveInfinitySymbol = newValue } } } - private var _textAttributesForPositiveInfinity: [String : Any]? - open var textAttributesForPositiveInfinity: [String : Any]? { - get { - return _textAttributesForPositiveInfinity - } - set { - _reset() - _textAttributesForPositiveInfinity = newValue - } + open var textAttributesForPositiveInfinity: [String : (Any & Sendable)]? { + get { _lock.withLock { $0.textAttributesForPositiveInfinity } } + set { _lock.withLock { $0.textAttributesForPositiveInfinity = newValue } } } - private var _negativeInfinitySymbol: String = "-∞" open var negativeInfinitySymbol: String { - get { - return _negativeInfinitySymbol - } - set { - _reset() - _negativeInfinitySymbol = newValue - } + get { _lock.withLock { $0.negativeInfinitySymbol } } + set { _lock.withLock { $0.negativeInfinitySymbol = newValue } } } - private var _textAttributesForNegativeInfinity: [String : Any]? - open var textAttributesForNegativeInfinity: [String : Any]? { - get { - return _textAttributesForNegativeInfinity - } - set { - _reset() - _textAttributesForNegativeInfinity = newValue - } + open var textAttributesForNegativeInfinity: [String : (Any & Sendable)]? { + get { _lock.withLock { $0.textAttributesForNegativeInfinity } } + set { _lock.withLock { $0.textAttributesForNegativeInfinity = newValue } } } - private var _positivePrefix: String! open var positivePrefix: String! { - get { - return _positivePrefix ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterPositivePrefix) - } - set { - _reset() - _positivePrefix = newValue - } + get { _lock.withLock { $0.positivePrefix } } + set { _lock.withLock { $0.positivePrefix = newValue } } } - private var _positiveSuffix: String! open var positiveSuffix: String! { - get { - return _positiveSuffix ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterPositiveSuffix) - } - set { - _reset() - _positiveSuffix = newValue - } + get { _lock.withLock { $0.positiveSuffix } } + set { _lock.withLock { $0.positiveSuffix = newValue } } } - private var _negativePrefix: String! open var negativePrefix: String! { - get { - return _negativePrefix ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterNegativePrefix) - } - set { - _reset() - _negativePrefix = newValue - } + get { _lock.withLock { $0.negativePrefix } } + set { _lock.withLock { $0.negativePrefix = newValue } } } - private var _negativeSuffix: String! open var negativeSuffix: String! { - get { - return _negativeSuffix ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterNegativeSuffix) - } - set { - _reset() - _negativeSuffix = newValue - } + get { _lock.withLock { $0.negativeSuffix } } + set { _lock.withLock { $0.negativeSuffix = newValue } } } - private var _currencyCode: String! open var currencyCode: String! { - get { - return _currencyCode ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterCurrencyCode) - } - set { - _reset() - _currencyCode = newValue - } + get { _lock.withLock { $0.currencyCode } } + set { _lock.withLock { $0.currencyCode = newValue } } } - private var _currencySymbol: String! open var currencySymbol: String! { - get { - return _currencySymbol ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterCurrencySymbol) - } - set { - _reset() - _currencySymbol = newValue - } + get { _lock.withLock { $0.currencySymbol } } + set { _lock.withLock { $0.currencySymbol = newValue } } } - private var _internationalCurrencySymbol: String! open var internationalCurrencySymbol: String! { - get { - return _internationalCurrencySymbol ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterInternationalCurrencySymbol) - } - set { - _reset() - _internationalCurrencySymbol = newValue - } + get { _lock.withLock { $0.internationalCurrencySymbol } } + set { _lock.withLock { $0.internationalCurrencySymbol = newValue } } } - private var _percentSymbol: String! open var percentSymbol: String! { - get { - return _percentSymbol ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterPercentSymbol) ?? "%" - } - set { - _reset() - _percentSymbol = newValue - } + get { _lock.withLock { $0.percentSymbol } } + set { _lock.withLock { $0.percentSymbol = newValue } } } - private var _perMillSymbol: String! open var perMillSymbol: String! { - get { - return _perMillSymbol ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterPerMillSymbol) - } - set { - _reset() - _perMillSymbol = newValue - } + get { _lock.withLock { $0.perMillSymbol } } + set { _lock.withLock { $0.perMillSymbol = newValue } } } - private var _minusSign: String! open var minusSign: String! { - get { - return _minusSign ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterMinusSign) - } - set { - _reset() - _minusSign = newValue - } + get { _lock.withLock { $0.minusSign } } + set { _lock.withLock { $0.minusSign = newValue } } } - private var _plusSign: String! open var plusSign: String! { - get { - return _plusSign ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterPlusSign) - } - set { - _reset() - _plusSign = newValue - } + get { _lock.withLock { $0.plusSign } } + set { _lock.withLock { $0.plusSign = newValue } } } - private var _exponentSymbol: String! open var exponentSymbol: String! { - get { - return _exponentSymbol ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterExponentSymbol) - } - set { - _reset() - _exponentSymbol = newValue - } + get { _lock.withLock { $0.exponentSymbol } } + set { _lock.withLock { $0.exponentSymbol = newValue } } } - private var _groupingSize: Int? open var groupingSize: Int { - get { - return _groupingSize ?? defaultGroupingSize() - } - set { - _reset() - _groupingSize = newValue - } + get { _lock.withLock { $0.groupingSize } } + set { _lock.withLock { $0.groupingSize = newValue } } } - private var _secondaryGroupingSize: Int = 0 open var secondaryGroupingSize: Int { - get { - return _secondaryGroupingSize - } - set { - _reset() - _secondaryGroupingSize = newValue - } + get { _lock.withLock { $0.secondaryGroupingSize } } + set { _lock.withLock { $0.secondaryGroupingSize = newValue } } } - private var _multiplier: NSNumber? - /*@NSCopying*/ open var multiplier: NSNumber? { - get { - return _multiplier ?? defaultMultiplier() - } - set { - _reset() - _multiplier = newValue - } + open var multiplier: NSNumber? { + get { _lock.withLock { $0.multiplier } } + set { _lock.withLock { $0.multiplier = newValue } } } - private var _formatWidth: Int? open var formatWidth: Int { - get { - return _formatWidth ?? defaultFormatWidth() - } - set { - _reset() - _formatWidth = newValue - } + get { _lock.withLock { $0.formatWidth } } + set { _lock.withLock { $0.formatWidth = newValue } } } - private var _paddingCharacter: String! = " " open var paddingCharacter: String! { - get { - return _paddingCharacter ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterPaddingCharacter) - } - set { - _reset() - _paddingCharacter = newValue - } + get { _lock.withLock { $0.paddingCharacter } } + set { _lock.withLock { $0.paddingCharacter = newValue } } } - private var _paddingPosition: PadPosition = .beforePrefix open var paddingPosition: PadPosition { - get { - return _paddingPosition - } - set { - _reset() - _paddingPosition = newValue - } + get { _lock.withLock { $0.paddingPosition } } + set { _lock.withLock { $0.paddingPosition = newValue } } } - private var _roundingMode: RoundingMode = .halfEven open var roundingMode: RoundingMode { - get { - return _roundingMode - } - set { - _reset() - _roundingMode = newValue - } + get { _lock.withLock { $0.roundingMode } } + set { _lock.withLock { $0.roundingMode = newValue } } } - private var _roundingIncrement: NSNumber! = 0 - /*@NSCopying*/ open var roundingIncrement: NSNumber! { - get { - return _roundingIncrement - } - set { - _reset() - _roundingIncrement = newValue - } + open var roundingIncrement: NSNumber! { + get { _lock.withLock { $0.roundingIncrement } } + set { _lock.withLock { $0.roundingIncrement = newValue } } } - // Use an optional for _minimumIntegerDigits to track if the value is - // set BEFORE the .numberStyle is changed. This allows preserving a setting - // of 0. - private var _minimumIntegerDigits: Int? open var minimumIntegerDigits: Int { - get { - return _minimumIntegerDigits ?? defaultMinimumIntegerDigits() - } - set { - _reset() - _minimumIntegerDigits = newValue - } + get { _lock.withLock { $0.minimumIntegerDigits } } + set { _lock.withLock { $0.minimumIntegerDigits = newValue } } } - private var _maximumIntegerDigits: Int? open var maximumIntegerDigits: Int { - get { - return _maximumIntegerDigits ?? defaultMaximumIntegerDigits() - } - set { - _reset() - _maximumIntegerDigits = newValue - } + get { _lock.withLock { $0.maximumIntegerDigits } } + set { _lock.withLock { $0.maximumIntegerDigits = newValue } } } - private var _minimumFractionDigits: Int? open var minimumFractionDigits: Int { - get { - return _minimumFractionDigits ?? defaultMinimumFractionDigits() - } - set { - _reset() - _minimumFractionDigits = newValue - } + get { _lock.withLock { $0.minimumFractionDigits } } + set { _lock.withLock { $0.minimumFractionDigits = newValue } } } - private var _maximumFractionDigits: Int? open var maximumFractionDigits: Int { - get { - return _maximumFractionDigits ?? defaultMaximumFractionDigits() - } - set { - _reset() - _maximumFractionDigits = newValue - } + get { _lock.withLock { $0.maximumFractionDigits } } + set { _lock.withLock { $0.maximumFractionDigits = newValue } } } - private var _minimum: NSNumber? - /*@NSCopying*/ open var minimum: NSNumber? { - get { - return _minimum - } - set { - _reset() - _minimum = newValue - } + open var minimum: NSNumber? { + get { _lock.withLock { $0.minimum } } + set { _lock.withLock { $0.minimum = newValue } } } - private var _maximum: NSNumber? - /*@NSCopying*/ open var maximum: NSNumber? { - get { - return _maximum - } - set { - _reset() - _maximum = newValue - } + open var maximum: NSNumber? { + get { _lock.withLock { $0.maximum } } + set { _lock.withLock { $0.maximum = newValue } } } - private var _currencyGroupingSeparator: String! open var currencyGroupingSeparator: String! { - get { - return _currencyGroupingSeparator ?? _getFormatterAttribute(_cfFormatter, attributeName: kCFNumberFormatterCurrencyGroupingSeparator) - } - set { - _reset() - _currencyGroupingSeparator = newValue - } + get { _lock.withLock { $0.currencyGroupingSeparator } } + set { _lock.withLock { $0.currencyGroupingSeparator = newValue } } } - private var _lenient: Bool = false open var isLenient: Bool { - get { - return _lenient - } - set { - _reset() - _lenient = newValue - } + get { _lock.withLock { $0.isLenient } } + set { _lock.withLock { $0.isLenient = newValue } } } - private var _usesSignificantDigits: Bool? open var usesSignificantDigits: Bool { - get { - return _usesSignificantDigits ?? false - } - set { - _reset() - _usesSignificantDigits = newValue - } + get { _lock.withLock { $0.usesSignificantDigits } } + set { _lock.withLock { $0.usesSignificantDigits = newValue } } } - private var _minimumSignificantDigits: Int? open var minimumSignificantDigits: Int { - get { - return _minimumSignificantDigits ?? defaultMinimumSignificantDigits() - } - set { - _reset() - _usesSignificantDigits = true - _minimumSignificantDigits = newValue - if _maximumSignificantDigits == nil && newValue > defaultMinimumSignificantDigits() { - _maximumSignificantDigits = (newValue < 1000) ? 999 : newValue - } - } + get { _lock.withLock { $0.minimumSignificantDigits } } + set { _lock.withLock { $0.minimumSignificantDigits = newValue } } } - private var _maximumSignificantDigits: Int? open var maximumSignificantDigits: Int { - get { - return _maximumSignificantDigits ?? defaultMaximumSignificantDigits() - } - set { - _reset() - _usesSignificantDigits = true - _maximumSignificantDigits = newValue - } + get { _lock.withLock { $0.maximumSignificantDigits } } + set { _lock.withLock { $0.maximumSignificantDigits = newValue } } } - private var _partialStringValidationEnabled: Bool = false open var isPartialStringValidationEnabled: Bool { - get { - return _partialStringValidationEnabled - } - set { - _reset() - _partialStringValidationEnabled = newValue - } + get { _lock.withLock { $0.isPartialStringValidationEnabled } } + set { _lock.withLock { $0.isPartialStringValidationEnabled = newValue } } } - private var _hasThousandSeparators: Bool = false open var hasThousandSeparators: Bool { - get { - return _hasThousandSeparators - } - set { - _reset() - _hasThousandSeparators = newValue - } + get { _lock.withLock { $0.hasThousandSeparators } } + set { _lock.withLock { $0.hasThousandSeparators = newValue } } } - private var _thousandSeparator: String! open var thousandSeparator: String! { - get { - return _thousandSeparator - } - set { - _reset() - _thousandSeparator = newValue - } + get { _lock.withLock { $0.thousandSeparator } } + set { _lock.withLock { $0.thousandSeparator = newValue } } } - private var _localizesFormat: Bool = true open var localizesFormat: Bool { - get { - return _localizesFormat - } - set { - _reset() - _localizesFormat = newValue - } - } - - private func getFormatterComponents() -> (String?, String?) { - guard let format = CFNumberFormatterGetFormat(_cfFormatter)?._swiftObject else { - return (nil, nil) - } - let components = format.components(separatedBy: ";") - let positive = _positiveFormat ?? components.first ?? "#" - let negative = _negativeFormat ?? components.last ?? "#" - return (positive, negative) - } - - private func getZeroFormat() -> String { - return string(from: 0) ?? "0" + get { _lock.withLock { $0.localizesFormat } } + set { _lock.withLock { $0.localizesFormat = newValue } } } open var format: String { - get { - let (p, n) = getFormatterComponents() - let z = _zeroSymbol ?? getZeroFormat() - return "\(p ?? "(null)");\(z);\(n ?? "(null)")" - } - set { - // Special case empty string - if newValue == "" { - _positiveFormat = "" - _negativeFormat = "-" - _zeroSymbol = "0" - _reset() - } else { - let components = newValue.components(separatedBy: ";") - let count = components.count - guard count <= 3 else { return } - _reset() - - _positiveFormat = components.first ?? "" - if count == 1 { - _negativeFormat = "-\(_positiveFormat ?? "")" - } - else if count == 2 { - _negativeFormat = components[1] - _zeroSymbol = getZeroFormat() - } - else if count == 3 { - _zeroSymbol = components[1] - _negativeFormat = components[2] - } - - if _negativeFormat == nil { - _negativeFormat = getFormatterComponents().1 - } - - if _zeroSymbol == nil { - _zeroSymbol = getZeroFormat() - } - } - } + get { _lock.withLock { $0.format } } + set { _lock.withLock { $0.format = newValue } } } - private var _positiveFormat: String! open var positiveFormat: String! { - get { - return getFormatterComponents().0 - } - set { - _reset() - _positiveFormat = newValue - } + get { _lock.withLock { $0.positiveFormat } } + set { _lock.withLock { $0.positiveFormat = newValue } } } - private var _negativeFormat: String! open var negativeFormat: String! { - get { - return getFormatterComponents().1 - } - set { - _reset() - _negativeFormat = newValue - } + get { _lock.withLock { $0.negativeFormat } } + set { _lock.withLock { $0.negativeFormat = newValue } } } - private var _attributedStringForZero: NSAttributedString = NSAttributedString(string: "0") - /*@NSCopying*/ open var attributedStringForZero: NSAttributedString { - get { - return _attributedStringForZero - } - set { - _reset() - _attributedStringForZero = newValue - } - } - - private var _attributedStringForNil: NSAttributedString = NSAttributedString(string: "") - /*@NSCopying*/ open var attributedStringForNil: NSAttributedString { - get { - return _attributedStringForNil - } - set { - _reset() - _attributedStringForNil = newValue - } - } - - private var _attributedStringForNotANumber: NSAttributedString = NSAttributedString(string: "NaN") - /*@NSCopying*/ open var attributedStringForNotANumber: NSAttributedString { - get { - return _attributedStringForNotANumber - } - set { - _reset() - _attributedStringForNotANumber = newValue - } - } - - private var _roundingBehavior: NSDecimalNumberHandler = NSDecimalNumberHandler.default - /*@NSCopying*/ open var roundingBehavior: NSDecimalNumberHandler { - get { - return _roundingBehavior - } - set { - _reset() - _roundingBehavior = newValue - } + open var roundingBehavior: NSDecimalNumberHandler { + get { _lock.withLock { $0.roundingBehavior } } + set { _lock.withLock { $0.roundingBehavior = newValue } } } } diff --git a/Sources/Foundation/Operation.swift b/Sources/Foundation/Operation.swift index 2f8fc54d4e..f70f41b940 100644 --- a/Sources/Foundation/Operation.swift +++ b/Sources/Foundation/Operation.swift @@ -8,7 +8,7 @@ // #if canImport(Dispatch) -import Dispatch +@preconcurrency import Dispatch internal let _NSOperationIsFinished = "isFinished" internal let _NSOperationIsFinishedAlternate = "finished" @@ -53,7 +53,7 @@ extension QualityOfService { } } -open class Operation : NSObject { +open class Operation : NSObject, @unchecked Sendable { struct PointerHashedUnmanagedBox: Hashable { var contents: Unmanaged func hash(into hasher: inout Hasher) { @@ -63,7 +63,7 @@ open class Operation : NSObject { return lhs.contents.toOpaque() == rhs.contents.toOpaque() } } - enum __NSOperationState : UInt8 { + enum __NSOperationState : UInt8, Sendable { case initialized = 0x00 case enqueuing = 0x48 case enqueued = 0x50 @@ -81,7 +81,7 @@ open class Operation : NSObject { internal var __dependencies = [Operation]() internal var __downDependencies = Set>() internal var __unfinishedDependencyCount: Int = 0 - internal var __completion: (() -> Void)? + internal var __completion: (@Sendable () -> Void)? internal var __name: String? internal var __schedule: DispatchWorkItem? internal var __state: __NSOperationState = .initialized @@ -562,7 +562,7 @@ open class Operation : NSObject { } - open var completionBlock: (() -> Void)? { + open var completionBlock: (@Sendable () -> Void)? { get { _lock() defer { _unlock() } @@ -575,6 +575,7 @@ open class Operation : NSObject { } } + @available(*, noasync, message: "Use completionBlock or a dependent Operation instead") open func waitUntilFinished() { __waitCondition.lock() while !isFinished { @@ -631,14 +632,14 @@ extension Operation { } extension Operation { - public enum QueuePriority : Int { + public enum QueuePriority : Int, Sendable { case veryLow = -8 case low = -4 case normal = 0 case high = 4 case veryHigh = 8 - internal static var barrier = 12 + internal static let barrier = 12 internal static let priorities = [ Operation.QueuePriority.barrier, Operation.QueuePriority.veryHigh.rawValue, @@ -650,20 +651,20 @@ extension Operation { } } -open class BlockOperation : Operation { - var _block: (() -> Void)? - var _executionBlocks: [() -> Void]? +open class BlockOperation : Operation, @unchecked Sendable { + var _block: (@Sendable () -> Void)? + var _executionBlocks: [@Sendable () -> Void]? public override init() { } - public convenience init(block: @escaping () -> Void) { + public convenience init(block: @Sendable @escaping () -> Void) { self.init() _block = block } - open func addExecutionBlock(_ block: @escaping () -> Void) { + open func addExecutionBlock(_ block: @Sendable @escaping () -> Void) { if isExecuting || isFinished { fatalError("blocks cannot be added after the operation has started executing or finished") } @@ -678,11 +679,11 @@ open class BlockOperation : Operation { } } - open var executionBlocks: [() -> Void] { + open var executionBlocks: [@Sendable () -> Void] { get { _lock() defer { _unlock() } - var blocks = [() -> Void]() + var blocks = [@Sendable () -> Void]() if let existing = _block { blocks.append(existing) } @@ -694,7 +695,7 @@ open class BlockOperation : Operation { } open override func main() { - var blocks = [() -> Void]() + var blocks = [@Sendable () -> Void]() _lock() if let existing = _block { blocks.append(existing) @@ -709,7 +710,7 @@ open class BlockOperation : Operation { } } -internal final class _BarrierOperation : Operation { +internal final class _BarrierOperation : Operation, @unchecked Sendable { var _block: (() -> Void)? init(_ block: @escaping () -> Void) { _block = block @@ -725,7 +726,7 @@ internal final class _BarrierOperation : Operation { } } -internal final class _OperationQueueProgress : Progress { +internal final class _OperationQueueProgress : Progress, @unchecked Sendable { var queue: Unmanaged? let lock = NSLock() @@ -758,7 +759,7 @@ extension OperationQueue { } @available(macOS 10.5, *) -open class OperationQueue : NSObject, ProgressReporting { +open class OperationQueue : NSObject, ProgressReporting, @unchecked Sendable { let __queueLock = NSLock() let __atomicLoad = NSLock() var __firstOperation: Unmanaged? @@ -950,7 +951,7 @@ open class OperationQueue : NSObject, ProgressReporting { return queue } - static internal var _currentQueue = NSThreadSpecific() + static internal nonisolated(unsafe) var _currentQueue = NSThreadSpecific() internal func _schedule(_ op: Operation) { op._state = .starting @@ -1261,6 +1262,7 @@ open class OperationQueue : NSObject, ProgressReporting { _addOperations([op], barrier: false) } + @available(*, noasync, message: "Use addBarrierBlock or a dependent Operation instead") open func addOperations(_ ops: [Operation], waitUntilFinished wait: Bool) { _addOperations(ops, barrier: false) if wait { @@ -1270,7 +1272,7 @@ open class OperationQueue : NSObject, ProgressReporting { } } - open func addOperation(_ block: @escaping () -> Void) { + open func addOperation(_ block: @Sendable @escaping () -> Void) { let op = BlockOperation(block: block) if let qos = __propertyQoS { op.qualityOfService = qos @@ -1278,7 +1280,7 @@ open class OperationQueue : NSObject, ProgressReporting { addOperation(op) } - open func addBarrierBlock(_ barrier: @escaping () -> Void) { + open func addBarrierBlock(_ barrier: @Sendable @escaping () -> Void) { var queue: DispatchQueue? _lock() if let op = __firstOperation { @@ -1392,6 +1394,7 @@ open class OperationQueue : NSObject, ProgressReporting { } } + @available(*, noasync, message: "Use completionBlock or a dependent Operation instead") open func waitUntilAllOperationsAreFinished() { var ops = _operations(includingBarriers: true) while 0 < ops.count { @@ -1425,7 +1428,7 @@ extension OperationQueue { // These two functions are inherently a race condition and should be avoided if possible @available(macOS, introduced: 10.5, deprecated: 100000, message: "access to operations is inherently a race condition, it should not be used. For barrier style behaviors please use addBarrierBlock: instead") - open var operations: [Operation] { + public var operations: [Operation] { get { return _operations(includingBarriers: false) } @@ -1433,7 +1436,7 @@ extension OperationQueue { @available(macOS, introduced: 10.6, deprecated: 100000) - open var operationCount: Int { + public var operationCount: Int { get { return _operationCount } diff --git a/Sources/Foundation/PersonNameComponents.swift b/Sources/Foundation/PersonNameComponents.swift index 192ebbcb67..df70d3fbcd 100644 --- a/Sources/Foundation/PersonNameComponents.swift +++ b/Sources/Foundation/PersonNameComponents.swift @@ -10,71 +10,85 @@ // //===----------------------------------------------------------------------===// -public struct PersonNameComponents : ReferenceConvertible, Hashable, Equatable, _MutableBoxing { +public struct PersonNameComponents : ReferenceConvertible, Hashable, Equatable, Sendable { public typealias ReferenceType = NSPersonNameComponents - internal var _handle: _MutableHandle public init() { - _handle = _MutableHandle(adoptingReference: NSPersonNameComponents()) + _phoneticRepresentation = .none } - fileprivate init(reference: NSPersonNameComponents) { - _handle = _MutableHandle(reference: reference) + @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) + public init( + namePrefix: String? = nil, + givenName: String? = nil, + middleName: String? = nil, + familyName: String? = nil, + nameSuffix: String? = nil, + nickname: String? = nil, + phoneticRepresentation: PersonNameComponents? = nil) { + self.init() + self.namePrefix = namePrefix + self.givenName = givenName + self.middleName = middleName + self.familyName = familyName + self.nameSuffix = nameSuffix + self.nickname = nickname + self.phoneticRepresentation = phoneticRepresentation } - - /* The below examples all assume the full name Dr. Johnathan Maple Appleseed Esq., nickname "Johnny" */ - /* Pre-nominal letters denoting title, salutation, or honorific, e.g. Dr., Mr. */ - public var namePrefix: String? { - get { return _handle.map { $0.namePrefix } } - set { _applyMutation { $0.namePrefix = newValue } } - } + /// Assuming the full name is: Dr. Johnathan Maple Appleseed Esq., nickname "Johnny", pre-nominal letters denoting title, salutation, or honorific, e.g. Dr., Mr. + public var namePrefix: String? - /* Name bestowed upon an individual by one's parents, e.g. Johnathan */ - public var givenName: String? { - get { return _handle.map { $0.givenName } } - set { _applyMutation { $0.givenName = newValue } } - } + /// Assuming the full name is: Dr. Johnathan Maple Appleseed Esq., nickname "Johnny", name bestowed upon an individual by one's parents, e.g. Johnathan + public var givenName: String? - /* Secondary given name chosen to differentiate those with the same first name, e.g. Maple */ - public var middleName: String? { - get { return _handle.map { $0.middleName } } - set { _applyMutation { $0.middleName = newValue } } - } + /// Assuming the full name is: Dr. Johnathan Maple Appleseed Esq., nickname "Johnny", secondary given name chosen to differentiate those with the same first name, e.g. Maple + public var middleName: String? - /* Name passed from one generation to another to indicate lineage, e.g. Appleseed */ - public var familyName: String? { - get { return _handle.map { $0.familyName } } - set { _applyMutation { $0.familyName = newValue } } - } + /// Assuming the full name is: Dr. Johnathan Maple Appleseed Esq., nickname "Johnny", name passed from one generation to another to indicate lineage, e.g. Appleseed + public var familyName: String? - /* Post-nominal letters denoting degree, accreditation, or other honor, e.g. Esq., Jr., Ph.D. */ - public var nameSuffix: String? { - get { return _handle.map { $0.nameSuffix } } - set { _applyMutation { $0.nameSuffix = newValue } } - } + /// Assuming the full name is: Dr. Johnathan Maple Appleseed Esq., nickname "Johnny", post-nominal letters denoting degree, accreditation, or other honor, e.g. Esq., Jr., Ph.D. + public var nameSuffix: String? - /* Name substituted for the purposes of familiarity, e.g. "Johnny"*/ - public var nickname: String? { - get { return _handle.map { $0.nickname } } - set { _applyMutation { $0.nickname = newValue } } - } + /// Assuming the full name is: Dr. Johnathan Maple Appleseed Esq., nickname "Johnny", name substituted for the purposes of familiarity, e.g. "Johnny" + public var nickname: String? - /* Each element of the phoneticRepresentation should correspond to an element of the original PersonNameComponents instance. - The phoneticRepresentation of the phoneticRepresentation object itself will be ignored. nil by default, must be instantiated. - */ + /// Each element of the phoneticRepresentation should correspond to an element of the original PersonNameComponents instance. + /// The phoneticRepresentation of the phoneticRepresentation object itself will be ignored. nil by default, must be instantiated. public var phoneticRepresentation: PersonNameComponents? { - get { return _handle.map { $0.phoneticRepresentation } } - set { _applyMutation { $0.phoneticRepresentation = newValue } } + get { + switch _phoneticRepresentation { + case .wrapped(let personNameComponents): + personNameComponents + case .none: + nil + } + } + set { + switch newValue { + case .some(let pnc): + _phoneticRepresentation = .wrapped(pnc) + case .none: + _phoneticRepresentation = .none + } + } } - public func hash(into hasher: inout Hasher) { - hasher.combine(_handle.map { $0 }) - } + private var _phoneticRepresentation: PhoneticRepresentation +} - public static func ==(lhs : PersonNameComponents, rhs: PersonNameComponents) -> Bool { - // Don't copy references here; no one should be storing anything - return lhs._handle._uncopiedReference().isEqual(rhs._handle._uncopiedReference()) +/// Allows for `PersonNameComponents` to store a `PersonNameComponents` for its phonetic representation. +private enum PhoneticRepresentation : Hashable, Equatable { + indirect case wrapped(PersonNameComponents) + case none + + func hash(into hasher: inout Hasher) { + let opt : PersonNameComponents? = switch self { + case .wrapped(let pnc): pnc + case .none: nil + } + hasher.combine(opt) } } @@ -109,7 +123,7 @@ extension PersonNameComponents : _ObjectiveCBridgeable { @_semantics("convertToObjectiveC") public func _bridgeToObjectiveC() -> NSPersonNameComponents { - return _handle._copiedReference() + return NSPersonNameComponents(pnc: self) } public static func _forceBridgeFromObjectiveC(_ personNameComponents: NSPersonNameComponents, result: inout PersonNameComponents?) { @@ -119,7 +133,7 @@ extension PersonNameComponents : _ObjectiveCBridgeable { } public static func _conditionallyBridgeFromObjectiveC(_ personNameComponents: NSPersonNameComponents, result: inout PersonNameComponents?) -> Bool { - result = PersonNameComponents(reference: personNameComponents) + result = personNameComponents._pnc return true } diff --git a/Sources/Foundation/PersonNameComponentsFormatter.swift b/Sources/Foundation/PersonNameComponentsFormatter.swift index 5226249b79..0da9410d47 100644 --- a/Sources/Foundation/PersonNameComponentsFormatter.swift +++ b/Sources/Foundation/PersonNameComponentsFormatter.swift @@ -8,8 +8,9 @@ // +@available(*, deprecated, message: "Person name components formatting isn't available in swift-corelibs-foundation") extension PersonNameComponentsFormatter { - public enum Style : Int { + public enum Style : Int, Sendable { case `default` @@ -27,7 +28,7 @@ extension PersonNameComponentsFormatter { case abbreviated } - public struct Options : OptionSet { + public struct Options : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -40,7 +41,7 @@ extension PersonNameComponentsFormatter { } @available(*, deprecated, message: "Person name components formatting isn't available in swift-corelibs-foundation") -open class PersonNameComponentsFormatter : Formatter { +open class PersonNameComponentsFormatter : Formatter, @unchecked Sendable { @available(*, unavailable, message: "Person name components formatting isn't available in swift-corelibs-foundation") public required init?(coder: NSCoder) { diff --git a/Sources/Foundation/Port.swift b/Sources/Foundation/Port.swift index f06f95a9fe..c1f78c14a4 100644 --- a/Sources/Foundation/Port.swift +++ b/Sources/Foundation/Port.swift @@ -8,6 +8,7 @@ // @_implementationOnly import CoreFoundation +internal import Synchronization // MARK: Port and related types @@ -17,8 +18,9 @@ extension Port { public static let didBecomeInvalidNotification = NSNotification.Name(rawValue: "NSPortDidBecomeInvalidNotification") } +//@_nonSendable - TODO: Mark with attribute to indicate this pure abstract class defers Sendable annotation to its subclasses. open class Port : NSObject, NSCopying { - @available(*, deprecated, message: "On Darwin, you can invoke Port() directly to produce a MessagePort. Since MessagePort's functionality is not available in swift-corelibs-foundation, you should not invoke this initializer directly. Subclasses of Port can delegate to this initializer safely.") + /// On Darwin, you can invoke `Port()` directly to produce a `MessagePort`. Since `MessagePort` is not available in swift-corelibs-foundation, you should not invoke this initializer directly. Subclasses of `Port` can delegate to this initializer safely. public override init() { if type(of: self) == Port.self { NSRequiresConcreteImplementation() @@ -75,6 +77,12 @@ open class MessagePort: Port {} @available(*, unavailable, message: "NSMachPort is not available in swift-corelibs-foundation.") open class NSMachPort: Port {} +@available(*, unavailable) +extension MessagePort : @unchecked Sendable { } + +@available(*, unavailable) +extension NSMachPort : @unchecked Sendable { } + extension PortDelegate { func handle(_ message: PortMessage) { } } @@ -88,6 +96,9 @@ public protocol PortDelegate: AnyObject { @available(*, unavailable, message: "SocketPort is not available on this platform.") open class SocketPort: Port {} +@available(*, unavailable) +extension SocketPort : @unchecked Sendable { } + #else #if canImport(Darwin) @@ -393,6 +404,11 @@ fileprivate func __NSFireSocketDatagram(_ socket: CFSocket?, _ type: CFSocketCal me.socketDidReceiveDatagram(socket, type, address, data) } +@available(*, unavailable) +extension SocketPort : @unchecked Sendable { } + +extension CFSocket : @unchecked Sendable { } + open class SocketPort : Port { struct SocketKind: Hashable { var protocolFamily: Int32 @@ -460,7 +476,7 @@ open class SocketPort : Port { } } - class Core { + class Core : @unchecked Sendable { fileprivate let isUniqued: Bool fileprivate var signature: Signature! @@ -581,18 +597,17 @@ open class SocketPort : Port { self.init(remoteWithProtocolFamily: PF_INET, socketType: FOUNDATION_SOCK_STREAM, protocol: FOUNDATION_IPPROTO_TCP, address: data) } - private static let remoteSocketCoresLock = NSLock() - private static var remoteSocketCores: [Signature: Core] = [:] + private static let remoteSocketCores = Mutex<[Signature: Core]>([:]) static private func retainedCore(for signature: Signature) -> Core { - return SocketPort.remoteSocketCoresLock.synchronized { - if let core = SocketPort.remoteSocketCores[signature] { + return SocketPort.remoteSocketCores.withLock { + if let core = $0[signature] { return core } else { let core = Core(isUniqued: true) core.signature = signature - SocketPort.remoteSocketCores[signature] = core + $0[signature] = core return core } @@ -639,8 +654,8 @@ open class SocketPort : Port { } if let signatureToRemove = signatureToRemove { - SocketPort.remoteSocketCoresLock.synchronized { - _ = SocketPort.remoteSocketCores.removeValue(forKey: signatureToRemove) + SocketPort.remoteSocketCores.withLock { + _ = $0.removeValue(forKey: signatureToRemove) } } } @@ -1040,18 +1055,19 @@ open class SocketPort : Port { private static let maximumTimeout: TimeInterval = 86400 - private static let sendingSocketsLock = NSLock() - private static var sendingSockets: [SocketKind: CFSocket] = [:] + private static let sendingSockets = Mutex<[SocketKind: CFSocket]>([:]) private final func sendingSocket(for port: SocketPort, before time: TimeInterval) -> CFSocket? { let signature = port.core.signature! let socketKind = signature.socketKind - var context = CFSocketContext() + // Uses a pointer value for comparison only + nonisolated(unsafe) var context = CFSocketContext() context.info = Unmanaged.passUnretained(self).toOpaque() + nonisolated(unsafe) let nonisolatedSelf = self return core.lock.synchronized { - if let connector = core.connectors[signature], CFSocketIsValid(connector) { + if let connector = nonisolatedSelf.core.connectors[signature], CFSocketIsValid(connector) { return connector } else { if signature.socketType == FOUNDATION_SOCK_STREAM { @@ -1062,7 +1078,7 @@ open class SocketPort : Port { } if CFSocketIsValid(connector) && CFSocketConnectToAddress(connector, address._cfObject, timeout) == CFSocketError(0) { - core.connectors[signature] = connector + nonisolatedSelf.core.connectors[signature] = connector self.addToLoopsAssumingLockHeld(connector) return connector } else { @@ -1070,20 +1086,20 @@ open class SocketPort : Port { } } } else { - return SocketPort.sendingSocketsLock.synchronized { + return SocketPort.sendingSockets.withLock { var result: CFSocket? - if signature.socketKind == core.signature.socketKind, - let receiver = core.receiver, CFSocketIsValid(receiver) { + if signature.socketKind == nonisolatedSelf.core.signature.socketKind, + let receiver = nonisolatedSelf.core.receiver, CFSocketIsValid(receiver) { result = receiver - } else if let socket = SocketPort.sendingSockets[socketKind], CFSocketIsValid(socket) { + } else if let socket = $0[socketKind], CFSocketIsValid(socket) { result = socket } if result == nil, let sender = CFSocketCreate(nil, socketKind.protocolFamily, socketKind.socketType, socketKind.protocol, CFOptionFlags(kCFSocketNoCallBack), nil, &context), CFSocketIsValid(sender) { - SocketPort.sendingSockets[socketKind] = sender + $0[socketKind] = sender result = sender } diff --git a/Sources/Foundation/PortMessage.swift b/Sources/Foundation/PortMessage.swift index aa0af1dfc3..c69a06bbb2 100644 --- a/Sources/Foundation/PortMessage.swift +++ b/Sources/Foundation/PortMessage.swift @@ -7,6 +7,8 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +@available(*, unavailable) +extension PortMessage : @unchecked Sendable { } open class PortMessage : NSObject, NSCopying { public init(sendPort: Port?, receivePort replyPort: Port?, components: [AnyObject]?) { diff --git a/Sources/Foundation/Process.swift b/Sources/Foundation/Process.swift index 76aeed1b4c..7a49932004 100644 --- a/Sources/Foundation/Process.swift +++ b/Sources/Foundation/Process.swift @@ -20,8 +20,10 @@ import struct WinSDK.HANDLE import Darwin #endif +internal import Synchronization + extension Process { - public enum TerminationReason : Int { + public enum TerminationReason : Int, Sendable { case exit case uncaughtSignal } @@ -47,9 +49,12 @@ private func WTERMSIG(_ status: Int32) -> Int32 { return status & 0x7f } -private var managerThreadRunLoop : RunLoop? = nil -private var managerThreadRunLoopIsRunning = false -private var managerThreadRunLoopIsRunningCondition = NSCondition() +// Protected by 'Once' below in `setup` +private nonisolated(unsafe) var managerThreadRunLoop : RunLoop? = nil + +// Protected by managerThreadRunLoopIsRunningCondition +private nonisolated(unsafe) var managerThreadRunLoopIsRunning = false +private let managerThreadRunLoopIsRunningCondition = NSCondition() internal let kCFSocketNoCallBack: CFOptionFlags = 0 // .noCallBack cannot be used because empty option flags are imported as unavailable. internal let kCFSocketAcceptCallBack = CFSocketCallBackType.acceptCallBack.rawValue @@ -220,15 +225,12 @@ private func quoteWindowsCommandLine(_ commandLine: [String]) -> String { } #endif -open class Process: NSObject { +open class Process: NSObject, @unchecked Sendable { private static func setup() { - struct Once { - static var done = false - static let lock = NSLock() - } + let once = Mutex(false) - Once.lock.synchronized { - if !Once.done { + once.withLock { + if !$0 { let thread = Thread { managerThreadRunLoop = RunLoop.current var emptySourceContext = CFRunLoopSourceContext() @@ -261,7 +263,7 @@ open class Process: NSObject { managerThreadRunLoopIsRunningCondition.wait() } managerThreadRunLoopIsRunningCondition.unlock() - Once.done = true + $0 = true } } } @@ -953,7 +955,7 @@ open class Process: NSObject { defer { // Reset the previous working directory path. - fileManager.changeCurrentDirectoryPath(previousDirectoryPath) + _ = fileManager.changeCurrentDirectoryPath(previousDirectoryPath) } // Launch @@ -1110,11 +1112,11 @@ open class Process: NSObject { /* A block to be invoked when the process underlying the Process terminates. Setting the block to nil is valid, and stops the previous block from being invoked, as long as it hasn't started in any way. The Process is passed as the argument to the block so the block does not have to capture, and thus retain, it. The block is copied when set. Only one termination handler block can be set at any time. The execution context in which the block is invoked is undefined. If the Process has already finished, the block is executed immediately/soon (not necessarily on the current thread). If a terminationHandler is set on an Process, the ProcessDidTerminateNotification notification is not posted for that process. Also note that -waitUntilExit won't wait until the terminationHandler has been fully executed. You cannot use this property in a concrete subclass of Process which hasn't been updated to include an implementation of the storage and use of it. */ - open var terminationHandler: ((Process) -> Void)? + open var terminationHandler: (@Sendable (Process) -> Void)? open var qualityOfService: QualityOfService = .default // read-only after the process is launched - open class func run(_ url: URL, arguments: [String], terminationHandler: ((Process) -> Void)? = nil) throws -> Process { + open class func run(_ url: URL, arguments: [String], terminationHandler: (@Sendable (Process) -> Void)? = nil) throws -> Process { let process = Process() process.executableURL = url process.arguments = arguments @@ -1140,7 +1142,7 @@ open class Process: NSObject { let currentRunLoop = RunLoop.current let runRunLoop : () -> Void = (currentRunLoop == self.runLoop) - ? { currentRunLoop.run(mode: .default, before: Date(timeIntervalSinceNow: runInterval)) } + ? { _ = currentRunLoop.run(mode: .default, before: Date(timeIntervalSinceNow: runInterval)) } : { currentRunLoop.run(until: Date(timeIntervalSinceNow: runInterval)) } // update .runLoop to allow early wakeup triggered by terminateRunLoop. self.runLoop = currentRunLoop diff --git a/Sources/Foundation/Progress.swift b/Sources/Foundation/Progress.swift index efa278899f..8a948975f5 100644 --- a/Sources/Foundation/Progress.swift +++ b/Sources/Foundation/Progress.swift @@ -29,7 +29,7 @@ import Dispatch - note: In swift-corelibs-foundation, Key Value Observing is not yet available. */ -open class Progress : NSObject { +open class Progress : NSObject, @unchecked Sendable { private weak var _parent : Progress? private var _children : Set @@ -40,11 +40,12 @@ open class Progress : NSObject { // This is set once, but after initialization private var _portionOfParent : Int64 - static private var _tsdKey = "_Foundation_CurrentProgressKey" + static private let _tsdKey = "_Foundation_CurrentProgressKey" /// The instance of `Progress` associated with the current thread by a previous invocation of `becomeCurrent(withPendingUnitCount:)`, if any. /// /// The purpose of this per-thread value is to allow code that does work to usefully report progress even when it is widely separated from the code that actually presents progress to the user, without requiring layers of intervening code to pass the instance of `Progress` through. Using the result of invoking this directly will often not be the right thing to do, because the invoking code will often not even know what units of work the current progress object deals in. Using `Progress(withTotalUnitCount:)` to create a child `Progress` object and then using that to report progress makes more sense in that situation. + @available(*, noasync) open class func current() -> Progress? { return (Thread.current.threadDictionary[Progress._tsdKey] as? _ProgressTSD)?.currentProgress } @@ -74,6 +75,7 @@ open class Progress : NSObject { } /// Initializes an instance of `Progress` with the specified parent and user info dictionary. + @available(*, noasync) public init(parent parentProgress: Progress?, userInfo userInfoOrNil: [ProgressUserInfoKey : Any]? = nil) { _children = Set() @@ -104,6 +106,7 @@ open class Progress : NSObject { /// MARK: - /// This is called when some other progress becomes an implicit child of this progress. + @available(*, noasync) private func _addImplicitChild(_ child : Progress) { guard let tsd = Thread.current.threadDictionary[Progress._tsdKey] as? _ProgressTSD else { preconditionFailure("A child was added without a current progress being set") } @@ -123,6 +126,7 @@ open class Progress : NSObject { /// The unit of work in a call to `becomeCurrent(withPendingUnitCount:)` has to be the same unit of work as that used for the value of the `totalUnitCount` property, but the unit of work used by the child can be a completely different one, and often will be. /// /// You must always balance invocations of this method with invocations of `resignCurrent`. + @available(*, noasync) open func becomeCurrent(withPendingUnitCount unitCount: Int64) { let oldTSD = Thread.current.threadDictionary[Progress._tsdKey] as? _ProgressTSD if let checkedTSD = oldTSD { @@ -136,6 +140,7 @@ open class Progress : NSObject { /// Balance the most recent previous invocation of `becomeCurrent(withPendingUnitCount:)` on the same thread. /// /// This restores the current progress object to what it was before `becomeCurrent(withPendingUnitCount:)` was invoked. + @available(*, noasync) open func resignCurrent() { guard let oldTSD = Thread.current.threadDictionary[Progress._tsdKey] as? _ProgressTSD else { preconditionFailure("This Progress was not the current progress on this thread.") @@ -269,7 +274,7 @@ open class Progress : NSObject { /// A closure to be called when `cancel` is called. /// /// The closure will be called even when the function is called on an ancestor of the receiver. Your closure won't be called on any particular queue. If it must do work on a specific queue then it should schedule that work on that queue. - open var cancellationHandler: (() -> Void)? { + open var cancellationHandler: (@Sendable () -> Void)? { didSet { guard let handler = cancellationHandler else { return } // If we're already cancelled, then invoke it - asynchronously @@ -284,7 +289,7 @@ open class Progress : NSObject { /// A closure to be called when pause is called. /// /// The closure will be called even when the function is called on an ancestor of the receiver. Your closure won't be called on any particular queue. If it must do work on a specific queue then it should schedule that work on that queue. - open var pausingHandler: (() -> Void)? { + open var pausingHandler: (@Sendable () -> Void)? { didSet { guard let handler = pausingHandler else { return } // If we're already paused, then invoke it - asynchronously @@ -300,7 +305,7 @@ open class Progress : NSObject { /// A closure to be called when resume is called. /// /// The closure will be called even when the function is called on an ancestor of the receiver. Your closure won't be called on any particular queue. If it must do work on a specific queue then it should schedule that work on that queue. - open var resumingHandler: (() -> Void)? + open var resumingHandler: (@Sendable () -> Void)? /// Returns `true` if the progress is indeterminate. /// @@ -396,7 +401,7 @@ open class Progress : NSObject { /// If the value of the `localizedDescription` property has not been set, then the default implementation of `localizedDescription` uses the progress kind to determine how to use the values of other properties, as well as values in the user info dictionary, to create a string that is presentable to the user. open var kind: ProgressKind? - public struct FileOperationKind : RawRepresentable, Equatable, Hashable { + public struct FileOperationKind : RawRepresentable, Equatable, Hashable, Sendable { public let rawValue: String public init(_ rawValue: String) { self.rawValue = rawValue } public init(rawValue: String) { self.rawValue = rawValue } @@ -473,7 +478,7 @@ public protocol ProgressReporting : NSObjectProtocol { var progress: Progress { get } } -public struct ProgressKind : RawRepresentable, Equatable, Hashable { +public struct ProgressKind : RawRepresentable, Equatable, Hashable, Sendable { public let rawValue: String public init(_ rawValue: String) { self.rawValue = rawValue } public init(rawValue: String) { self.rawValue = rawValue } @@ -484,7 +489,7 @@ public struct ProgressKind : RawRepresentable, Equatable, Hashable { public static let file = ProgressKind(rawValue: "NSProgressKindFile") } -public struct ProgressUserInfoKey : RawRepresentable, Equatable, Hashable { +public struct ProgressUserInfoKey : RawRepresentable, Equatable, Hashable, Sendable { public let rawValue: String public init(_ rawValue: String) { self.rawValue = rawValue } public init(rawValue: String) { self.rawValue = rawValue } @@ -526,6 +531,9 @@ public struct ProgressUserInfoKey : RawRepresentable, Equatable, Hashable { public static let fileCompletedCountKey = ProgressUserInfoKey(rawValue: "NSProgressFileCompletedCountKey") } +@available(*, unavailable) +extension _ProgressTSD : @unchecked Sendable { } + fileprivate class _ProgressTSD : NSObject { /// The thread's default progress. fileprivate var currentProgress : Progress diff --git a/Sources/Foundation/PropertyListSerialization.swift b/Sources/Foundation/PropertyListSerialization.swift index a9cb8a46c3..5c56c9b3ec 100644 --- a/Sources/Foundation/PropertyListSerialization.swift +++ b/Sources/Foundation/PropertyListSerialization.swift @@ -15,7 +15,7 @@ let kCFPropertyListBinaryFormat_v1_0 = CFPropertyListFormat.binaryFormat_v1_0 extension PropertyListSerialization { - public struct MutabilityOptions : OptionSet { + public struct MutabilityOptions : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -29,6 +29,9 @@ extension PropertyListSerialization { public typealias WriteOptions = Int } +@available(*, unavailable) +extension PropertyListSerialization : @unchecked Sendable { } + open class PropertyListSerialization : NSObject { open class func propertyList(_ plist: Any, isValidFor format: PropertyListFormat) -> Bool { diff --git a/Sources/Foundation/RunLoop.swift b/Sources/Foundation/RunLoop.swift index af64bf31ec..a03dab976d 100644 --- a/Sources/Foundation/RunLoop.swift +++ b/Sources/Foundation/RunLoop.swift @@ -18,8 +18,8 @@ internal let kCFRunLoopExit = CFRunLoopActivity.exit.rawValue internal let kCFRunLoopAllActivities = CFRunLoopActivity.allActivities.rawValue extension RunLoop { - public struct Mode : RawRepresentable, Equatable, Hashable { - public private(set) var rawValue: String + public struct Mode : RawRepresentable, Equatable, Hashable, Sendable { + public let rawValue: String public init(_ rawValue: String) { self.rawValue = rawValue @@ -49,6 +49,9 @@ extension RunLoop.Mode { #if !canImport(Dispatch) +@available(*, unavailable) +extension RunLoop : @unchecked Sendable { } + open class RunLoop: NSObject { @available(*, unavailable, message: "RunLoop is not available on WASI") open class var current: RunLoop { @@ -70,6 +73,9 @@ internal func _NSRunLoopNew(_ cf: CFRunLoop) -> Unmanaged { return unsafeBitCast(rl, to: Unmanaged.self) // this retain is balanced on the other side of the CF fence } +@available(*, unavailable) +extension RunLoop : @unchecked Sendable { } + open class RunLoop: NSObject { internal var _cfRunLoopStorage : AnyObject! internal final var _cfRunLoop: CFRunLoop! { @@ -77,7 +83,8 @@ open class RunLoop: NSObject { set { _cfRunLoopStorage = newValue } } - internal static var _mainRunLoop: RunLoop = { + // TODO: We need some kind API to expose only the Sendable part of the main run loop + internal static nonisolated(unsafe) var _mainRunLoop: RunLoop = { let cfObject: CFRunLoop! = CFRunLoopGetMain() #if os(Windows) // Enable the main runloop on Windows to process the Windows UI events. @@ -92,6 +99,7 @@ open class RunLoop: NSObject { _cfRunLoopStorage = cfObject } + @available(*, noasync) open class var current: RunLoop { return _CFRunLoopGet2(CFRunLoopGetCurrent()) as! RunLoop } @@ -115,14 +123,12 @@ open class RunLoop: NSObject { #if os(Linux) || os(macOS) || os(iOS) || os(tvOS) || os(watchOS) || os(OpenBSD) internal var currentCFRunLoop: CFRunLoop { getCFRunLoop() } - @available(*, deprecated, message: "Directly accessing the run loop may cause your code to not become portable in the future.") internal func getCFRunLoop() -> CFRunLoop { return _cfRunLoop } #else internal final var currentCFRunLoop: CFRunLoop { _cfRunLoop } - @available(*, unavailable, message: "Core Foundation is not available on your platform.") internal func getCFRunLoop() -> Never { fatalError() } @@ -144,8 +150,10 @@ open class RunLoop: NSObject { let shouldStartMonitoring = monitoredPortObservers[aPort] == nil if shouldStartMonitoring { - monitoredPortObservers[aPort] = NotificationCenter.default.addObserver(forName: Port.didBecomeInvalidNotification, object: aPort, queue: nil, using: { [weak self] (notification) in - self?.portDidInvalidate(aPort) + nonisolated(unsafe) let strongNonisolatedSelf = self + nonisolated(unsafe) let nonisolatedPort = aPort + monitoredPortObservers[aPort] = NotificationCenter.default.addObserver(forName: Port.didBecomeInvalidNotification, object: aPort, queue: nil, using: { (notification) in + strongNonisolatedSelf.portDidInvalidate(nonisolatedPort) }) } @@ -211,6 +219,7 @@ open class RunLoop: NSObject { return Date(timeIntervalSinceReferenceDate: nextTimerFireAbsoluteTime) } + @available(*, noasync) open func acceptInput(forMode mode: String, before limitDate: Date) { if _cfRunLoop !== CFRunLoopGetCurrent() { return @@ -221,15 +230,17 @@ open class RunLoop: NSObject { } extension RunLoop { - + @available(*, noasync) public func run() { while run(mode: .default, before: Date.distantFuture) { } } + @available(*, noasync) public func run(until limitDate: Date) { while run(mode: .default, before: limitDate) && limitDate.timeIntervalSinceReferenceDate > CFAbsoluteTimeGetCurrent() { } } + @available(*, noasync) public func run(mode: RunLoop.Mode, before limitDate: Date) -> Bool { if _cfRunLoop !== CFRunLoopGetCurrent() { return false @@ -245,11 +256,11 @@ extension RunLoop { return true } - public func perform(inModes modes: [RunLoop.Mode], block: @escaping () -> Void) { + public func perform(inModes modes: [RunLoop.Mode], block: @Sendable @escaping () -> Void) { CFRunLoopPerformBlock(currentCFRunLoop, (modes.map { $0._cfStringUniquingKnown })._cfObject, block) } - public func perform(_ block: @escaping () -> Void) { + public func perform(_ block: @Sendable @escaping () -> Void) { perform(inModes: [.default], block: block) } } @@ -257,37 +268,49 @@ extension RunLoop { // These exist as SPI for XCTest for now. Do not rely on their contracts or continued existence. extension RunLoop { - @available(*, deprecated, message: "For XCTest use only.") + // TODO: Switch XCTest to SPI Annotation + // @available(*, deprecated, message: "For XCTest use only.") public func _stop() { CFRunLoopStop(currentCFRunLoop) } - @available(*, deprecated, message: "For XCTest use only.") + // TODO: Switch XCTest to SPI Annotation + // @available(*, deprecated, message: "For XCTest use only.") public func _observe(_ activities: _Activities, in mode: RunLoop.Mode = .default, repeats: Bool = true, order: Int = 0, handler: @escaping (_Activity) -> Void) -> _Observer { let observer = _Observer(activities: activities, repeats: repeats, order: order, handler: handler) CFRunLoopAddObserver(self.currentCFRunLoop, observer.cfObserver, mode._cfStringUniquingKnown) return observer } - @available(*, deprecated, message: "For XCTest use only.") + // TODO: Switch XCTest to SPI Annotation + // @available(*, deprecated, message: "For XCTest use only.") public func _observe(_ activity: _Activity, in mode: RunLoop.Mode = .default, repeats: Bool = true, order: Int = 0, handler: @escaping (_Activity) -> Void) -> _Observer { return _observe(_Activities(activity), in: mode, repeats: repeats, order: order, handler: handler) } - @available(*, deprecated, message: "For XCTest use only.") + // TODO: Switch XCTest to SPI Annotation + // @available(*, deprecated, message: "For XCTest use only.") public func _add(_ source: _Source, forMode mode: RunLoop.Mode) { CFRunLoopAddSource(_cfRunLoop, source.cfSource, mode._cfStringUniquingKnown) } - @available(*, deprecated, message: "For XCTest use only.") - open func _remove(_ source: _Source, for mode: RunLoop.Mode) { + // TODO: Switch XCTest to SPI Annotation + // @available(*, deprecated, message: "For XCTest use only.") + public func _remove(_ source: _Source, for mode: RunLoop.Mode) { CFRunLoopRemoveSource(_cfRunLoop, source.cfSource, mode._cfStringUniquingKnown) } } +@available(*, unavailable) +extension RunLoop._Observer : Sendable { } + +@available(*, unavailable) +extension RunLoop._Source : Sendable { } + extension RunLoop { - @available(*, deprecated, message: "For XCTest use only.") - public enum _Activity: UInt { + // TODO: Switch XCTest to SPI Annotation + // @available(*, deprecated, message: "For XCTest use only.") + public enum _Activity: UInt, Sendable { // These must match CFRunLoopActivity. case entry = 0 case beforeTimers = 1 @@ -297,8 +320,9 @@ extension RunLoop { case exit = 128 } - @available(*, deprecated, message: "For XCTest use only.") - public struct _Activities: OptionSet { + // TODO: Switch XCTest to SPI Annotation + // @available(*, deprecated, message: "For XCTest use only.") + public struct _Activities: OptionSet, Sendable { public var rawValue: UInt public init(rawValue: UInt) { self.rawValue = rawValue @@ -317,10 +341,11 @@ extension RunLoop { public static let allActivities = _Activities(rawValue: 0x0FFFFFFF) } - @available(*, deprecated, message: "For XCTest use only.") + // TODO: Switch XCTest to SPI Annotation + // @available(*, deprecated, message: "For XCTest use only.") public class _Observer { fileprivate let _cfObserverStorage: AnyObject - fileprivate var cfObserver: CFRunLoopObserver { unsafeBitCast(_cfObserverStorage, to: CFRunLoopObserver.self) } + fileprivate var cfObserver: CFRunLoopObserver { unsafeDowncast(_cfObserverStorage, to: CFRunLoopObserver.self) } fileprivate init(activities: _Activities, repeats: Bool, order: Int, handler: @escaping (_Activity) -> Void) { self._cfObserverStorage = CFRunLoopObserverCreateWithHandler(kCFAllocatorSystemDefault, CFOptionFlags(activities.rawValue), repeats, CFIndex(order), { (cfObserver, cfActivity) in @@ -346,7 +371,8 @@ extension RunLoop { } } - @available(*, deprecated, message: "For XCTest use only.") + // TODO: Switch XCTest to SPI Annotation + // @available(*, deprecated, message: "For XCTest use only.") open class _Source: NSObject { fileprivate var _cfSourceStorage: AnyObject! diff --git a/Sources/Foundation/Scanner.swift b/Sources/Foundation/Scanner.swift index a77718221c..e8e70f6267 100644 --- a/Sources/Foundation/Scanner.swift +++ b/Sources/Foundation/Scanner.swift @@ -7,6 +7,8 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +@available(*, unavailable) +extension Scanner : @unchecked Sendable { } open class Scanner: NSObject, NSCopying { internal var _scanString: String diff --git a/Sources/Foundation/ScannerAPI.swift b/Sources/Foundation/ScannerAPI.swift index 500b2f1d92..2e0e892dfe 100644 --- a/Sources/Foundation/ScannerAPI.swift +++ b/Sources/Foundation/ScannerAPI.swift @@ -17,7 +17,7 @@ extension CharacterSet { @available(swift 5.0) extension Scanner { - public enum NumberRepresentation { + public enum NumberRepresentation : Sendable { case decimal // See the %d, %f and %F format conversions. case hexadecimal // See the %x, %X, %a and %A format conversions. For integers, a leading 0x or 0X is optional; for floating-point numbers, it is required. } diff --git a/Sources/Foundation/Stream.swift b/Sources/Foundation/Stream.swift index 3ea8a9d01f..ab19ce2997 100644 --- a/Sources/Foundation/Stream.swift +++ b/Sources/Foundation/Stream.swift @@ -16,8 +16,8 @@ internal extension UInt { } extension Stream { - public struct PropertyKey : RawRepresentable, Equatable, Hashable { - public private(set) var rawValue: String + public struct PropertyKey : RawRepresentable, Equatable, Hashable, Sendable { + public let rawValue: String public init(_ rawValue: String) { self.rawValue = rawValue @@ -28,7 +28,7 @@ extension Stream { } } - public enum Status : UInt { + public enum Status : UInt, Sendable { case notOpen case opening @@ -40,7 +40,7 @@ extension Stream { case error } - public struct Event : OptionSet { + public struct Event : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -53,10 +53,9 @@ extension Stream { } } - - // Stream is an abstract class encapsulating the common API to InputStream and OutputStream. // Subclassers of InputStream and OutputStream must also implement these methods. +//@_nonSendable - TODO: Mark with attribute to indicate this pure abstract class defers Sendable annotation to its subclasses. open class Stream: NSObject { public override init() { @@ -101,6 +100,9 @@ open class Stream: NSObject { } } +@available(*, unavailable) +extension InputStream : @unchecked Sendable { } + // InputStream is an abstract class representing the base functionality of a read stream. // Subclassers are required to implement these methods. open class InputStream: Stream { @@ -176,6 +178,9 @@ open class InputStream: Stream { } } +@available(*, unavailable) +extension OutputStream : @unchecked Sendable { } + // OutputStream is an abstract class representing the base functionality of a write stream. // Subclassers are required to implement these methods. // Currently this is left as named OutputStream due to conflicts with the standard library's text streaming target protocol named OutputStream (which ideally should be renamed) @@ -251,6 +256,9 @@ open class OutputStream : Stream { } } +@available(*, unavailable) +extension _InputStreamSPIForFoundationNetworkingUseOnly : Sendable { } + public struct _InputStreamSPIForFoundationNetworkingUseOnly { var inputStream: InputStream @@ -334,7 +342,7 @@ extension Stream.PropertyKey { } // MARK: - -public struct StreamSocketSecurityLevel : RawRepresentable, Equatable, Hashable { +public struct StreamSocketSecurityLevel : RawRepresentable, Equatable, Hashable, Sendable { public let rawValue: String public init(rawValue: String) { self.rawValue = rawValue @@ -350,7 +358,7 @@ extension StreamSocketSecurityLevel { // MARK: - -public struct StreamSOCKSProxyConfiguration : RawRepresentable, Equatable, Hashable { +public struct StreamSOCKSProxyConfiguration : RawRepresentable, Equatable, Hashable, Sendable { public let rawValue: String public init(rawValue: String) { self.rawValue = rawValue @@ -366,7 +374,7 @@ extension StreamSOCKSProxyConfiguration { // MARK: - -public struct StreamSOCKSProxyVersion : RawRepresentable, Equatable, Hashable { +public struct StreamSOCKSProxyVersion : RawRepresentable, Equatable, Hashable, Sendable { public let rawValue: String public init(rawValue: String) { self.rawValue = rawValue @@ -379,7 +387,7 @@ extension StreamSOCKSProxyVersion { // MARK: - Supported network service types -public struct StreamNetworkServiceTypeValue : RawRepresentable, Equatable, Hashable { +public struct StreamNetworkServiceTypeValue : RawRepresentable, Equatable, Hashable, Sendable { public let rawValue: String public init(rawValue: String) { self.rawValue = rawValue diff --git a/Sources/Foundation/Thread.swift b/Sources/Foundation/Thread.swift index 166a5d3fe5..5e79579c62 100644 --- a/Sources/Foundation/Thread.swift +++ b/Sources/Foundation/Thread.swift @@ -52,7 +52,7 @@ internal class NSThreadSpecific { } } -internal enum _NSThreadStatus { +internal enum _NSThreadStatus : Sendable { case initialized case starting case executing @@ -76,9 +76,13 @@ private func NSThreadStart(_ context: UnsafeMutableRawPointer?) -> UnsafeMutable return nil } +@available(*, unavailable) +extension Thread : @unchecked Sendable { } + open class Thread : NSObject { - static internal var _currentThread = NSThreadSpecific() + static internal nonisolated(unsafe) var _currentThread = NSThreadSpecific() + @available(*, noasync) open class var current: Thread { return Thread._currentThread.get() { if Thread.isMainThread { @@ -98,7 +102,7 @@ open class Thread : NSObject { } // !!! NSThread's mainThread property is incorrectly exported as "main", which conflicts with its "main" method. - private static let _mainThread: Thread = { + private static nonisolated(unsafe) let _mainThread: Thread = { var thread = Thread(thread: _CFMainPThread) thread._status = .executing return thread @@ -112,7 +116,7 @@ open class Thread : NSObject { /// Alternative API for detached thread creation /// - Experiment: This is a draft API currently under consideration for official import into Foundation as a suitable alternative to creation via selector /// - Note: Since this API is under consideration it may be either removed or revised in the near future - open class func detachNewThread(_ block: @escaping () -> Swift.Void) { + open class func detachNewThread(_ block: @Sendable @escaping () -> Swift.Void) { let t = Thread(block: block) t.start() } @@ -121,9 +125,10 @@ open class Thread : NSObject { return true } + @available(*, noasync) open class func sleep(until date: Date) { #if os(Windows) - var hTimer: HANDLE = CreateWaitableTimerW(nil, true, nil) + let hTimer: HANDLE = CreateWaitableTimerW(nil, true, nil) if hTimer == HANDLE(bitPattern: 0) { fatalError("unable to create timer: \(GetLastError())") } defer { CloseHandle(hTimer) } @@ -158,9 +163,10 @@ open class Thread : NSObject { #endif } + @available(*, noasync) open class func sleep(forTimeInterval interval: TimeInterval) { #if os(Windows) - var hTimer: HANDLE = CreateWaitableTimerW(nil, true, nil) + let hTimer: HANDLE = CreateWaitableTimerW(nil, true, nil) // FIXME(compnerd) how to check that hTimer is not NULL? defer { CloseHandle(hTimer) } @@ -193,6 +199,7 @@ open class Thread : NSObject { #endif } + @available(*, noasync) open class func exit() { Thread.current._status = .finished #if os(Windows) @@ -245,7 +252,7 @@ open class Thread : NSObject { #endif } - public convenience init(block: @escaping () -> Swift.Void) { + public convenience init(block: @Sendable @escaping () -> Swift.Void) { self.init() _main = block } @@ -296,11 +303,19 @@ open class Thread : NSObject { return "" } #else + // Result is null-terminated guard _CFThreadGetName(&buf, Int32(buf.count)) == 0 else { return "" } #endif - return String(cString: buf) + guard let firstNull = buf.firstIndex(of: 0) else { + return "" + } + if firstNull == buf.startIndex { + return "" + } else { + return String(validating: buf[buf.startIndex.. = - UnsafeMutableBufferPointer(start: addresses, count: count) - withUnsafeTemporaryAllocation(byteCount: MemoryLayout.size + 127, - alignment: 8) { buffer in - let pSymbolInfo: UnsafeMutablePointer = + var symbols: [String] = [] + + let addresses: UnsafeMutableBufferPointer = + UnsafeMutableBufferPointer(start: addresses, count: count) + withUnsafeTemporaryAllocation(byteCount: MemoryLayout.size + 127, + alignment: 8) { buffer in + let pSymbolInfo: UnsafeMutablePointer = buffer.baseAddress!.assumingMemoryBound(to: SYMBOL_INFO.self) - - for address in addresses { - pSymbolInfo.pointee.SizeOfStruct = + + for address in addresses { + pSymbolInfo.pointee.SizeOfStruct = ULONG(MemoryLayout.size) - pSymbolInfo.pointee.MaxNameLen = 128 - - var dwDisplacement: DWORD64 = 0 - if SymFromAddr(hProcess, DWORD64(UInt(bitPattern: address)), - &dwDisplacement, &pSymbolInfo.pointee) { - symbols.append(String(unsafeUninitializedCapacity: Int(pSymbolInfo.pointee.NameLen) + 1) { - strncpy($0.baseAddress, &pSymbolInfo.pointee.Name, $0.count) - return $0.count - }) - } else { - symbols.append("\(address)") - } + pSymbolInfo.pointee.MaxNameLen = 128 + + var dwDisplacement: DWORD64 = 0 + if SymFromAddr(hProcess, DWORD64(UInt(bitPattern: address)), + &dwDisplacement, &pSymbolInfo.pointee) { + symbols.append(String(unsafeUninitializedCapacity: Int(pSymbolInfo.pointee.NameLen) + 1) { + strncpy_s($0.baseAddress, $0.count, &pSymbolInfo.pointee.Name, $0.count) + return $0.count + }) + } else { + if let address { + symbols.append("\(address)") + } else { + symbols.append("") + } + } + } } - } - - return symbols + + return symbols } #else return backtraceAddresses({ (addrs, count) in diff --git a/Sources/Foundation/Timer.swift b/Sources/Foundation/Timer.swift index 83a3efa0de..0d57425553 100644 --- a/Sources/Foundation/Timer.swift +++ b/Sources/Foundation/Timer.swift @@ -15,6 +15,9 @@ internal func __NSFireTimer(_ timer: CFRunLoopTimer?, info: UnsafeMutableRawPoin t._fire(t) } +@available(*, unavailable) +extension Timer : @unchecked Sendable { } + open class Timer : NSObject { internal final var _cfObject: CFRunLoopTimer { get { @@ -27,13 +30,14 @@ open class Timer : NSObject { internal var _timerStorage: AnyObject? internal final var _timer: CFRunLoopTimer? { unsafeBitCast(_timerStorage, to: CFRunLoopTimer?.self) } // has to be optional because this is a chicken/egg problem with initialization in swift - internal var _fire: (Timer) -> Void = { (_: Timer) in } + // This is a var but it is only initialized in the init methods and not mutated again after + internal var _fire: @Sendable (Timer) -> Void = { (_: Timer) in } /// Alternative API for timer creation with a block. /// - Experiment: This is a draft API currently under consideration for official import into Foundation as a suitable alternative to creation via selector /// - Note: Since this API is under consideration it may be either removed or revised in the near future /// - Warning: Capturing the timer or the owner of the timer inside of the block may cause retain cycles. Use with caution - public init(fire date: Date, interval: TimeInterval, repeats: Bool, block: @escaping (Timer) -> Swift.Void) { + public init(fire date: Date, interval: TimeInterval, repeats: Bool, block: @Sendable @escaping (Timer) -> Swift.Void) { super.init() _fire = block var context = CFRunLoopTimerContext() @@ -58,7 +62,7 @@ open class Timer : NSObject { /// - parameter timeInterval: The number of seconds between firings of the timer. If seconds is less than or equal to 0.0, this method chooses the nonnegative value of 0.1 milliseconds instead /// - parameter repeats: If YES, the timer will repeatedly reschedule itself until invalidated. If NO, the timer will be invalidated after it fires. /// - parameter block: The execution body of the timer; the timer itself is passed as the parameter to this block when executed to aid in avoiding cyclical references - public convenience init(timeInterval interval: TimeInterval, repeats: Bool, block: @escaping (Timer) -> Swift.Void) { + public convenience init(timeInterval interval: TimeInterval, repeats: Bool, block: @Sendable @escaping (Timer) -> Swift.Void) { self.init(fire: Date(), interval: interval, repeats: repeats, block: block) } @@ -66,7 +70,8 @@ open class Timer : NSObject { /// - Experiment: This is a draft API currently under consideration for official import into Foundation as a suitable alternative to creation via selector /// - Note: Since this API is under consideration it may be either removed or revised in the near future /// - Warning: Capturing the timer or the owner of the timer inside of the block may cause retain cycles. Use with caution - open class func scheduledTimer(withTimeInterval interval: TimeInterval, repeats: Bool, block: @escaping (Timer) -> Void) -> Timer { + @available(*, noasync) + open class func scheduledTimer(withTimeInterval interval: TimeInterval, repeats: Bool, block: @Sendable @escaping (Timer) -> Void) -> Timer { let timer = Timer(fire: Date(timeIntervalSinceNow: interval), interval: interval, repeats: repeats, block: block) CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer._timer!, kCFRunLoopDefaultMode) return timer diff --git a/Sources/Foundation/URL.swift b/Sources/Foundation/URL.swift index 3a215add2c..7bf0327686 100644 --- a/Sources/Foundation/URL.swift +++ b/Sources/Foundation/URL.swift @@ -10,6 +10,9 @@ // //===----------------------------------------------------------------------===// +@available(*, unavailable) +extension URLResourceValues : Sendable { } + /** URLs to file system resources support the properties defined below. Note that not all property values will exist for all file system URLs. For example, if a file is located on a volume that does not support creation dates, it is valid to request the creation date property, but the returned value will be nil, and no error will be generated. @@ -439,7 +442,7 @@ extension URL { /// /// `URLResourceValues` keeps track of which of its properties have been set. Those values are the ones used by this function to determine which properties to write. public mutating func setResourceValues(_ values: URLResourceValues) throws { - var ns = self as NSURL + let ns = self as NSURL try ns.setResourceValues(values._values) self = ns as URL } @@ -459,9 +462,9 @@ extension URL { /// /// Temporary resource values are for client use. Temporary resource values exist only in memory and are never written to the resource's backing store. Once set, a temporary resource value can be copied from the URL object with `func resourceValues(forKeys:)`. The values are stored in the loosely-typed `allValues` dictionary property. /// - /// To remove a temporary resource value from the URL object, use `func removeCachedResourceValue(forKey:)`. Care should be taken to ensure the key that identifies a temporary resource value is unique and does not conflict with system defined keys (using reverse domain name notation in your temporary resource value keys is recommended). This method is currently applicable only to URLs for file system resources. + /// To remove a temporalet resource value from the URL object, use `func removeCachedResourceValue(forKey:)`. Care should be taken to ensure the key that identifies a temporary resource value is unique and does not conflict with system defined keys (using reverse domain name notation in your temporary resource value keys is recommended). This method is currently applicable only to URLs for file system resources. public mutating func setTemporaryResourceValue(_ value : Any, forKey key: URLResourceKey) { - var ns = self as NSURL + let ns = self as NSURL ns.setTemporaryResourceValue(value, forKey: key) self = ns as URL } @@ -470,7 +473,7 @@ extension URL { /// /// This method is currently applicable only to URLs for file system resources. public mutating func removeAllCachedResourceValues() { - var ns = self as NSURL + let ns = self as NSURL ns.removeAllCachedResourceValues() self = ns as URL } @@ -479,7 +482,7 @@ extension URL { /// /// Removing a cached resource value may remove other cached resource values because some resource values are cached as a set of values, and because some resource values depend on other resource values (temporary resource values have no dependencies). This method is currently applicable only to URLs for file system resources. public mutating func removeCachedResourceValue(forKey key: URLResourceKey) { - var ns = self as NSURL + let ns = self as NSURL ns.removeCachedResourceValue(forKey: key) self = ns as URL } diff --git a/Sources/Foundation/URLResourceKey.swift b/Sources/Foundation/URLResourceKey.swift index b415111883..059499fae4 100644 --- a/Sources/Foundation/URLResourceKey.swift +++ b/Sources/Foundation/URLResourceKey.swift @@ -8,8 +8,8 @@ // -public struct URLResourceKey: RawRepresentable, Equatable, Hashable { - public private(set) var rawValue: String +public struct URLResourceKey: RawRepresentable, Equatable, Hashable, Sendable { + public let rawValue: String public init(rawValue: String) { self.rawValue = rawValue @@ -123,8 +123,8 @@ extension URLResourceKey { } -public struct URLFileResourceType: RawRepresentable, Equatable, Hashable { - public private(set) var rawValue: String +public struct URLFileResourceType: RawRepresentable, Equatable, Hashable, Sendable { + public let rawValue: String public init(rawValue: String) { self.rawValue = rawValue diff --git a/Sources/Foundation/Unit.swift b/Sources/Foundation/Unit.swift index 9c8d4a1400..0a4505d561 100644 --- a/Sources/Foundation/Unit.swift +++ b/Sources/Foundation/Unit.swift @@ -2,7 +2,7 @@ NSUnitConverter describes how to convert a unit to and from the base unit of its dimension. Use the NSUnitConverter protocol to implement new ways of converting a unit. */ -open class UnitConverter : NSObject { +open class UnitConverter : NSObject, @unchecked Sendable { /* @@ -35,7 +35,7 @@ open class UnitConverter : NSObject { } } -open class UnitConverterLinear : UnitConverter, NSSecureCoding { +open class UnitConverterLinear : UnitConverter, NSSecureCoding, @unchecked Sendable { open private(set) var coefficient: Double @@ -95,7 +95,7 @@ open class UnitConverterLinear : UnitConverter, NSSecureCoding { } // This must be named with a NS prefix because it can be sometimes encoded by Darwin, and we need to match the name in the archive. -internal class NSUnitConverterReciprocal : UnitConverter, NSSecureCoding { +internal class NSUnitConverterReciprocal : UnitConverter, NSSecureCoding, @unchecked Sendable { private var reciprocal: Double @@ -147,10 +147,9 @@ internal class NSUnitConverterReciprocal : UnitConverter, NSSecureCoding { NSUnit is the base class for all unit types (dimensional and dimensionless). */ -open class Unit : NSObject, NSCopying, NSSecureCoding { - - - open private(set) var symbol: String + +open class Unit : NSObject, NSCopying, NSSecureCoding, @unchecked Sendable { + public let symbol: String public required init(symbol: String) { @@ -192,10 +191,10 @@ open class Unit : NSObject, NSCopying, NSSecureCoding { } } -open class Dimension : Unit { +open class Dimension : Unit, @unchecked Sendable { - open private(set) var converter: UnitConverter + public let converter: UnitConverter public required init(symbol: String, converter: UnitConverter) { self.converter = converter @@ -249,7 +248,7 @@ open class Dimension : Unit { } } -public final class UnitAcceleration : Dimension { +public final class UnitAcceleration : Dimension, @unchecked Sendable { /* Base unit - metersPerSecondSquared @@ -298,7 +297,7 @@ public final class UnitAcceleration : Dimension { } } -public final class UnitAngle : Dimension { +public final class UnitAngle : Dimension, @unchecked Sendable { /* Base unit - degrees @@ -379,7 +378,7 @@ public final class UnitAngle : Dimension { } } -public final class UnitArea : Dimension { +public final class UnitArea : Dimension, @unchecked Sendable { /* Base unit - squareMeters @@ -524,7 +523,7 @@ public final class UnitArea : Dimension { } } -public final class UnitConcentrationMass : Dimension { +public final class UnitConcentrationMass : Dimension, @unchecked Sendable { /* Base unit - gramsPerLiter @@ -579,7 +578,7 @@ public final class UnitConcentrationMass : Dimension { } } -public final class UnitDispersion : Dimension { +public final class UnitDispersion : Dimension, @unchecked Sendable { /* Base unit - partsPerMillion @@ -620,7 +619,7 @@ public final class UnitDispersion : Dimension { } } -public final class UnitDuration : Dimension { +public final class UnitDuration : Dimension, @unchecked Sendable { /* Base unit - seconds @@ -709,7 +708,7 @@ public final class UnitDuration : Dimension { } } -public final class UnitElectricCharge : Dimension { +public final class UnitElectricCharge : Dimension, @unchecked Sendable { /* Base unit - coulombs */ @@ -789,7 +788,7 @@ public final class UnitElectricCharge : Dimension { } } -public final class UnitElectricCurrent : Dimension { +public final class UnitElectricCurrent : Dimension, @unchecked Sendable { /* Base unit - amperes @@ -863,7 +862,7 @@ public final class UnitElectricCurrent : Dimension { } } -public final class UnitElectricPotentialDifference : Dimension { +public final class UnitElectricPotentialDifference : Dimension, @unchecked Sendable { /* Base unit - volts @@ -937,7 +936,7 @@ public final class UnitElectricPotentialDifference : Dimension { } } -public final class UnitElectricResistance : Dimension { +public final class UnitElectricResistance : Dimension, @unchecked Sendable { /* Base unit - ohms @@ -1011,7 +1010,7 @@ public final class UnitElectricResistance : Dimension { } } -public final class UnitEnergy : Dimension { +public final class UnitEnergy : Dimension, @unchecked Sendable { /* Base unit - joules @@ -1085,7 +1084,7 @@ public final class UnitEnergy : Dimension { } } -public final class UnitFrequency : Dimension { +public final class UnitFrequency : Dimension, @unchecked Sendable { /* Base unit - hertz @@ -1182,7 +1181,7 @@ public final class UnitFrequency : Dimension { } } -public final class UnitFuelEfficiency : Dimension { +public final class UnitFuelEfficiency : Dimension, @unchecked Sendable { /* Base unit - litersPer100Kilometers @@ -1239,7 +1238,7 @@ public final class UnitFuelEfficiency : Dimension { } } -public final class UnitLength : Dimension { +public final class UnitLength : Dimension, @unchecked Sendable { /* Base unit - meters @@ -1448,7 +1447,7 @@ public final class UnitLength : Dimension { } } -public final class UnitIlluminance : Dimension { +public final class UnitIlluminance : Dimension, @unchecked Sendable { /* Base unit - lux @@ -1489,7 +1488,7 @@ public final class UnitIlluminance : Dimension { } } -public final class UnitInformationStorage : Dimension { +public final class UnitInformationStorage : Dimension, @unchecked Sendable { /* Base unit - bit @@ -1808,7 +1807,7 @@ public final class UnitInformationStorage : Dimension { } } -public final class UnitMass : Dimension { +public final class UnitMass : Dimension, @unchecked Sendable { /* Base unit - kilograms @@ -1969,7 +1968,7 @@ public final class UnitMass : Dimension { } } -public final class UnitPower : Dimension { +public final class UnitPower : Dimension, @unchecked Sendable { /* Base unit - watts @@ -2090,7 +2089,7 @@ public final class UnitPower : Dimension { } } -public final class UnitPressure : Dimension { +public final class UnitPressure : Dimension, @unchecked Sendable { /* Base unit - newtonsPerMetersSquared (equivalent to 1 pascal) @@ -2203,7 +2202,7 @@ public final class UnitPressure : Dimension { } } -public final class UnitSpeed : Dimension { +public final class UnitSpeed : Dimension, @unchecked Sendable { /* Base unit - metersPerSecond @@ -2268,7 +2267,7 @@ public final class UnitSpeed : Dimension { } } -public final class UnitTemperature : Dimension { +public final class UnitTemperature : Dimension, @unchecked Sendable { /* Base unit - kelvin @@ -2331,7 +2330,7 @@ public final class UnitTemperature : Dimension { } } -public final class UnitVolume : Dimension { +public final class UnitVolume : Dimension, @unchecked Sendable { /* Base unit - liters diff --git a/Sources/Foundation/UserDefaults.swift b/Sources/Foundation/UserDefaults.swift index 23f035b6d6..6db0331ee4 100644 --- a/Sources/Foundation/UserDefaults.swift +++ b/Sources/Foundation/UserDefaults.swift @@ -8,15 +8,19 @@ // @_implementationOnly import CoreFoundation +internal import Synchronization -private var registeredDefaults = [String: Any]() -private var sharedDefaults = UserDefaults() +private let registeredDefaults = Mutex<[String: (Any & Sendable)]>([:]) +private nonisolated(unsafe) var sharedDefaults = UserDefaults() // the default one is thread safe, at least fileprivate func bridgeFromNSCFTypeIfNeeded(_ value: Any) -> Any { let object = value as AnyObject return __SwiftValue.fetch(nonOptional: object) } +@available(*, unavailable) +extension UserDefaults : @unchecked Sendable { } + open class UserDefaults: NSObject { static private func _isValueAllowed(_ nonbridgedValue: Any) -> Bool { let value = bridgeFromNSCFTypeIfNeeded(nonbridgedValue) @@ -106,7 +110,9 @@ open class UserDefaults: NSObject { } func getFromRegistered() -> Any? { - return UserDefaults._unboxingNSNumbers(registeredDefaults[defaultName]) + registeredDefaults.withLock { + UserDefaults._unboxingNSNumbers($0[defaultName]) + } } guard let anObj = CFPreferencesCopyAppValue(defaultName._cfObject, suite?._cfObject ?? kCFPreferencesCurrentApplication) else { @@ -318,7 +324,11 @@ open class UserDefaults: NSObject { } open func register(defaults registrationDictionary: [String : Any]) { - registeredDefaults.merge(registrationDictionary.mapValues(bridgeFromNSCFTypeIfNeeded), uniquingKeysWith: { $1 }) + // The 'Any' values here must be Property List types, which are all Sendable + nonisolated(unsafe) let copy = registrationDictionary + registeredDefaults.withLock { + $0.merge(copy.mapValues(bridgeFromNSCFTypeIfNeeded), uniquingKeysWith: { $1 }) + } } open func addSuite(named suiteName: String) { @@ -332,14 +342,14 @@ open class UserDefaults: NSObject { return _dictionaryRepresentation(includingVolatileDomains: true) } - private func _dictionaryRepresentation(includingVolatileDomains: Bool) -> [String: Any] { - let registeredDefaultsIfAllowed = includingVolatileDomains ? registeredDefaults : [:] + private func _dictionaryRepresentation(includingVolatileDomains: Bool) -> [String: (Any & Sendable)] { + let registeredDefaultsIfAllowed = includingVolatileDomains ? registeredDefaults.withLock { $0 } : [:] let defaultsFromDiskCF = CFPreferencesCopyMultiple(nil, suite?._cfObject ?? kCFPreferencesCurrentApplication, kCFPreferencesCurrentUser, kCFPreferencesAnyHost) - let defaultsFromDiskWithNumbersBoxed = __SwiftValue.fetch(defaultsFromDiskCF) as? [String: Any] ?? [:] + let defaultsFromDiskWithNumbersBoxed = __SwiftValue.fetch(defaultsFromDiskCF) as? [String: (Any & Sendable)] ?? [:] if registeredDefaultsIfAllowed.isEmpty { - return UserDefaults._unboxingNSNumbers(defaultsFromDiskWithNumbersBoxed) as! [String: Any] + return UserDefaults._unboxingNSNumbers(defaultsFromDiskWithNumbersBoxed) as! [String: (Any & Sendable)] } else { var allDefaults = registeredDefaultsIfAllowed @@ -347,11 +357,12 @@ open class UserDefaults: NSObject { allDefaults[key] = value } - return UserDefaults._unboxingNSNumbers(allDefaults) as! [String: Any] + return UserDefaults._unboxingNSNumbers(allDefaults) as! [String: (Any & Sendable)] } } - private static let _parsedArgumentsDomain: [String: Any] = UserDefaults._parseArguments(ProcessInfo.processInfo.arguments) + // We know, but cannot prove statically, that the 'Any' here is only property list types, which are all Sendable + private static nonisolated(unsafe) let _parsedArgumentsDomain: [String: Any] = UserDefaults._parseArguments(ProcessInfo.processInfo.arguments) private var _volatileDomains: [String: [String: Any]] = [:] private let _volatileDomainsLock = NSLock() diff --git a/Sources/FoundationNetworking/Boxing.swift b/Sources/FoundationNetworking/Boxing.swift index d04f68eb4c..31154c1f4e 100644 --- a/Sources/FoundationNetworking/Boxing.swift +++ b/Sources/FoundationNetworking/Boxing.swift @@ -21,7 +21,7 @@ import Foundation /// A class type which acts as a handle (pointer-to-pointer) to a Foundation reference type which has only a mutable class (e.g., NSURLComponents). /// /// Note: This assumes that the result of calling copy() is mutable. The documentation says that classes which do not have a mutable/immutable distinction should just adopt NSCopying instead of NSMutableCopying. -internal final class _MutableHandle where MutableType : NSCopying { +internal final class _MutableHandle : @unchecked Sendable where MutableType : NSCopying { @usableFromInline internal var _pointer : MutableType init(reference : MutableType) { @@ -45,191 +45,3 @@ internal final class _MutableHandle where MutableType : return _pointer } } - -/// Describes common operations for Foundation struct types that are bridged to a mutable object (e.g. NSURLComponents). -internal protocol _MutableBoxing : ReferenceConvertible { - var _handle : _MutableHandle { get set } - - /// Apply a mutating closure to the reference type, regardless if it is mutable or immutable. - /// - /// This function performs the correct copy-on-write check for efficient mutation. - mutating func _applyMutation(_ whatToDo : (ReferenceType) -> ReturnType) -> ReturnType -} - -extension _MutableBoxing { - @inline(__always) - mutating func _applyMutation(_ whatToDo : (ReferenceType) -> ReturnType) -> ReturnType { - // Only create a new box if we are not uniquely referenced - if !isKnownUniquelyReferenced(&_handle) { - let ref = _handle._pointer - _handle = _MutableHandle(reference: ref) - } - return whatToDo(_handle._pointer) - } -} - -internal enum _MutableUnmanagedWrapper where MutableType : NSMutableCopying { - case Immutable(Unmanaged) - case Mutable(Unmanaged) -} - -internal protocol _SwiftNativeFoundationType: AnyObject { - associatedtype ImmutableType : NSObject - associatedtype MutableType : NSObject, NSMutableCopying - var __wrapped : _MutableUnmanagedWrapper { get } - - init(unmanagedImmutableObject: Unmanaged) - init(unmanagedMutableObject: Unmanaged) - - func mutableCopy(with zone : NSZone) -> Any - - func hash(into hasher: inout Hasher) - var hashValue: Int { get } - - var description: String { get } - var debugDescription: String { get } - - func releaseWrappedObject() -} - -extension _SwiftNativeFoundationType { - - @inline(__always) - func _mapUnmanaged(_ whatToDo : (ImmutableType) throws -> ReturnType) rethrows -> ReturnType { - defer { _fixLifetime(self) } - - switch __wrapped { - case .Immutable(let i): - return try i._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo($0) - } - case .Mutable(let m): - return try m._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo(_unsafeReferenceCast($0, to: ImmutableType.self)) - } - } - } - - func releaseWrappedObject() { - switch __wrapped { - case .Immutable(let i): - i.release() - case .Mutable(let m): - m.release() - } - } - - func mutableCopy(with zone : NSZone) -> Any { - return _mapUnmanaged { ($0 as NSObject).mutableCopy() } - } - - func hash(into hasher: inout Hasher) { - _mapUnmanaged { hasher.combine($0) } - } - - var hashValue: Int { - return _mapUnmanaged { return $0.hashValue } - } - - var description: String { - return _mapUnmanaged { return $0.description } - } - - var debugDescription: String { - return _mapUnmanaged { return $0.debugDescription } - } - - func isEqual(_ other: AnyObject) -> Bool { - return _mapUnmanaged { return $0.isEqual(other) } - } -} - -internal protocol _MutablePairBoxing { - associatedtype WrappedSwiftNSType : _SwiftNativeFoundationType - var _wrapped : WrappedSwiftNSType { get set } -} - -extension _MutablePairBoxing { - @inline(__always) - func _mapUnmanaged(_ whatToDo : (WrappedSwiftNSType.ImmutableType) throws -> ReturnType) rethrows -> ReturnType { - // We are using Unmanaged. Make sure that the owning container class - // 'self' is guaranteed to be alive by extending the lifetime of 'self' - // to the end of the scope of this function. - // Note: At the time of this writing using withExtendedLifetime here - // instead of _fixLifetime causes different ARC pair matching behavior - // foiling optimization. This is why we explicitly use _fixLifetime here - // instead. - defer { _fixLifetime(self) } - - let unmanagedHandle = Unmanaged.passUnretained(_wrapped) - let wrapper = unmanagedHandle._withUnsafeGuaranteedRef { $0.__wrapped } - switch (wrapper) { - case .Immutable(let i): - return try i._withUnsafeGuaranteedRef { - return try whatToDo($0) - } - case .Mutable(let m): - return try m._withUnsafeGuaranteedRef { - return try whatToDo(_unsafeReferenceCast($0, to: WrappedSwiftNSType.ImmutableType.self)) - } - } - } - - @inline(__always) - mutating func _applyUnmanagedMutation(_ whatToDo : (WrappedSwiftNSType.MutableType) throws -> ReturnType) rethrows -> ReturnType { - // We are using Unmanaged. Make sure that the owning container class - // 'self' is guaranteed to be alive by extending the lifetime of 'self' - // to the end of the scope of this function. - // Note: At the time of this writing using withExtendedLifetime here - // instead of _fixLifetime causes different ARC pair matching behavior - // foiling optimization. This is why we explicitly use _fixLifetime here - // instead. - defer { _fixLifetime(self) } - - var unique = true - let _unmanagedHandle = Unmanaged.passUnretained(_wrapped) - let wrapper = _unmanagedHandle._withUnsafeGuaranteedRef { $0.__wrapped } - - // This check is done twice because: Value kept live for too long causing uniqueness check to fail - switch (wrapper) { - case .Immutable: - break - case .Mutable: - unique = isKnownUniquelyReferenced(&_wrapped) - } - - switch (wrapper) { - case .Immutable(let i): - // We need to become mutable; by creating a new instance we also become unique - let copy = Unmanaged.passRetained(i._withUnsafeGuaranteedRef { - return _unsafeReferenceCast($0.mutableCopy(), to: WrappedSwiftNSType.MutableType.self) } - ) - - // Be sure to set the var before calling out; otherwise references to the struct in the closure may be looking at the old value - _wrapped = WrappedSwiftNSType(unmanagedMutableObject: copy) - return try copy._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo($0) - } - case .Mutable(let m): - // Only create a new box if we are not uniquely referenced - if !unique { - let copy = Unmanaged.passRetained(m._withUnsafeGuaranteedRef { - return _unsafeReferenceCast($0.mutableCopy(), to: WrappedSwiftNSType.MutableType.self) - }) - _wrapped = WrappedSwiftNSType(unmanagedMutableObject: copy) - return try copy._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo($0) - } - } else { - return try m._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo($0) - } - } - } - } -} diff --git a/Sources/FoundationNetworking/HTTPCookie.swift b/Sources/FoundationNetworking/HTTPCookie.swift index 0534780e7b..e0d1cbbd9f 100644 --- a/Sources/FoundationNetworking/HTTPCookie.swift +++ b/Sources/FoundationNetworking/HTTPCookie.swift @@ -17,7 +17,7 @@ import Foundation import WinSDK #endif -public struct HTTPCookiePropertyKey : RawRepresentable, Equatable, Hashable { +public struct HTTPCookiePropertyKey : RawRepresentable, Equatable, Hashable, Sendable { public private(set) var rawValue: String public init(_ rawValue: String) { @@ -101,7 +101,7 @@ internal extension HTTPCookiePropertyKey { /// an immutable object initialized from a dictionary that contains /// the various cookie attributes. It has accessors to get the various /// attributes of a cookie. -open class HTTPCookie : NSObject { +open class HTTPCookie : NSObject, @unchecked Sendable { let _comment: String? let _commentURL: URL? @@ -115,7 +115,7 @@ open class HTTPCookie : NSObject { let _portList: [NSNumber]? let _value: String let _version: Int - var _properties: [HTTPCookiePropertyKey : Any] + let _properties: [HTTPCookiePropertyKey : Any] // See: https://tools.ietf.org/html/rfc2616#section-3.3.1 @@ -376,7 +376,7 @@ open class HTTPCookie : NSObject { _HTTPOnly = false } - _properties = [ + var props : [HTTPCookiePropertyKey : Any] = [ .created : Date().timeIntervalSinceReferenceDate, // Cocoa Compatibility .discard : _sessionOnly, .domain : _domain, @@ -387,23 +387,24 @@ open class HTTPCookie : NSObject { .version : _version ] if let comment = properties[.comment] { - _properties[.comment] = comment + props[.comment] = comment } if let commentURL = properties[.commentURL] { - _properties[.commentURL] = commentURL + props[.commentURL] = commentURL } if let expires = properties[.expires] { - _properties[.expires] = expires + props[.expires] = expires } if let maximumAge = properties[.maximumAge] { - _properties[.maximumAge] = maximumAge + props[.maximumAge] = maximumAge } if let originURL = properties[.originURL] { - _properties[.originURL] = originURL + props[.originURL] = originURL } if let _portList = _portList { - _properties[.port] = _portList + props[.port] = _portList } + _properties = props } /// Return a dictionary of header fields that can be used to add the diff --git a/Sources/FoundationNetworking/HTTPCookieStorage.swift b/Sources/FoundationNetworking/HTTPCookieStorage.swift index 22a1aff000..8881f59eee 100644 --- a/Sources/FoundationNetworking/HTTPCookieStorage.swift +++ b/Sources/FoundationNetworking/HTTPCookieStorage.swift @@ -13,6 +13,7 @@ import SwiftFoundation import Foundation #endif +internal import Synchronization /*! @enum HTTPCookie.AcceptPolicy @@ -23,7 +24,7 @@ import Foundation only from the main document domain */ extension HTTPCookie { - public enum AcceptPolicy : UInt { + public enum AcceptPolicy : UInt, Sendable { case always case never case onlyFromMainDocumentDomain @@ -39,11 +40,10 @@ extension HTTPCookie { set of cookies. It also has convenience methods to parse and generate cookie-related HTTP header fields. */ -open class HTTPCookieStorage: NSObject { +open class HTTPCookieStorage: NSObject, @unchecked Sendable { private static let sharedStorage = HTTPCookieStorage(cookieStorageName: "shared") - private static var sharedCookieStorages: [String: HTTPCookieStorage] = [:] //for group storage containers - private static let sharedSyncQ = DispatchQueue(label: "org.swift.HTTPCookieStorage.sharedSyncQ") + private static let sharedCookieStorages = Mutex<[String: HTTPCookieStorage]>([:]) //for group storage containers /* only modified in init */ private var cookieFilePath: String? @@ -151,10 +151,10 @@ open class HTTPCookieStorage: NSObject { method with the same identifier will return the same cookie storage instance. */ open class func sharedCookieStorage(forGroupContainerIdentifier identifier: String) -> HTTPCookieStorage { - return sharedSyncQ.sync { - guard let cookieStorage = sharedCookieStorages[identifier] else { + sharedCookieStorages.withLock { + guard let cookieStorage = $0[identifier] else { let newCookieStorage = HTTPCookieStorage(cookieStorageName: identifier) - sharedCookieStorages[identifier] = newCookieStorage + $0[identifier] = newCookieStorage return newCookieStorage } return cookieStorage diff --git a/Sources/FoundationNetworking/NSURLRequest.swift b/Sources/FoundationNetworking/NSURLRequest.swift index 616650daec..cdda7bcadd 100644 --- a/Sources/FoundationNetworking/NSURLRequest.swift +++ b/Sources/FoundationNetworking/NSURLRequest.swift @@ -52,7 +52,7 @@ import Foundation /// with whether already-existing cache data is returned to satisfy a /// URL load request. extension NSURLRequest { - public enum CachePolicy : UInt { + public enum CachePolicy : UInt, Sendable { /// Specifies that the caching logic defined in the protocol /// implementation, if any, is used for a particular URL load request. This /// is the default policy for URL load requests. @@ -86,7 +86,7 @@ extension NSURLRequest { case reloadRevalidatingCacheData // Unimplemented } - public enum NetworkServiceType : UInt { + public enum NetworkServiceType : UInt, Sendable { case `default` // Standard internet traffic case voip // Voice over IP control traffic case video // Video traffic @@ -96,6 +96,9 @@ extension NSURLRequest { } } +@available(*, unavailable) +extension NSURLRequest : @unchecked Sendable { } + /// An `NSURLRequest` object represents a URL load request in a /// manner independent of protocol and URL scheme. /// diff --git a/Sources/FoundationNetworking/URLAuthenticationChallenge.swift b/Sources/FoundationNetworking/URLAuthenticationChallenge.swift index a31e39ba15..11cdbb1431 100644 --- a/Sources/FoundationNetworking/URLAuthenticationChallenge.swift +++ b/Sources/FoundationNetworking/URLAuthenticationChallenge.swift @@ -13,7 +13,7 @@ import SwiftFoundation import Foundation #endif -public protocol URLAuthenticationChallengeSender : NSObjectProtocol { +public protocol URLAuthenticationChallengeSender : NSObjectProtocol, Sendable { /*! @@ -52,7 +52,7 @@ public protocol URLAuthenticationChallengeSender : NSObjectProtocol { provides all the information about the challenge, and has a method to indicate when it's done. */ -open class URLAuthenticationChallenge : NSObject { +open class URLAuthenticationChallenge : NSObject, @unchecked Sendable { private let _protectionSpace: URLProtectionSpace private let _proposedCredential: URLCredential? @@ -186,7 +186,7 @@ open class URLAuthenticationChallenge : NSObject { } } -class URLSessionAuthenticationChallengeSender : NSObject, URLAuthenticationChallengeSender { +class URLSessionAuthenticationChallengeSender : NSObject, URLAuthenticationChallengeSender, @unchecked Sendable { func cancel(_ challenge: URLAuthenticationChallenge) { fatalError("swift-corelibs-foundation only supports URLSession; for challenges coming from URLSession, please implement the appropriate URLSessionTaskDelegate methods rather than using the sender argument.") } diff --git a/Sources/FoundationNetworking/URLCache.swift b/Sources/FoundationNetworking/URLCache.swift index 914898bdc5..1284d6d6bf 100644 --- a/Sources/FoundationNetworking/URLCache.swift +++ b/Sources/FoundationNetworking/URLCache.swift @@ -13,6 +13,8 @@ import SwiftFoundation import Foundation #endif +internal import Synchronization + internal extension NSLock { func performLocked(_ block: () throws -> T) rethrows -> T { lock(); defer { unlock() } @@ -39,7 +41,7 @@ internal extension NSLock { disk. */ extension URLCache { - public enum StoragePolicy : UInt { + public enum StoragePolicy : UInt, Sendable { case allowed case allowedInMemoryOnly @@ -86,7 +88,7 @@ class StoredCachedURLResponse: NSObject, NSSecureCoding { It is used to maintain characteristics and attributes of a cached object. */ -open class CachedURLResponse : NSObject, NSCopying { +open class CachedURLResponse : NSObject, NSCopying, @unchecked Sendable { open override func copy() -> Any { return copy(with: nil) } @@ -193,10 +195,9 @@ open class CachedURLResponse : NSObject, NSCopying { } } -open class URLCache : NSObject { +open class URLCache : NSObject, @unchecked Sendable { - private static let sharedLock = NSLock() - private static var _shared: URLCache? + private static let _shared = Mutex(nil) /*! @method sharedURLCache @@ -217,19 +218,19 @@ open class URLCache : NSObject { */ open class var shared: URLCache { get { - return sharedLock.performLocked { - if let shared = _shared { + return _shared.withLock { + if let shared = $0 { return shared } let shared = URLCache(memoryCapacity: 4 * 1024 * 1024, diskCapacity: 20 * 1024 * 1024, diskPath: nil) - _shared = shared + $0 = shared return shared } } set { - sharedLock.performLocked { - _shared = newValue + _shared.withLock { + $0 = newValue } } } @@ -665,7 +666,7 @@ open class URLCache : NSObject { storeCachedResponse(cachedResponse, for: request) } - open func getCachedResponse(for dataTask: URLSessionDataTask, completionHandler: @escaping (CachedURLResponse?) -> Void) { + open func getCachedResponse(for dataTask: URLSessionDataTask, completionHandler: @Sendable @escaping (CachedURLResponse?) -> Void) { guard let request = dataTask.currentRequest else { completionHandler(nil) return diff --git a/Sources/FoundationNetworking/URLCredential.swift b/Sources/FoundationNetworking/URLCredential.swift index bdb844ba34..556d45f69a 100644 --- a/Sources/FoundationNetworking/URLCredential.swift +++ b/Sources/FoundationNetworking/URLCredential.swift @@ -24,13 +24,18 @@ import Foundation access only its own credentials. */ extension URLCredential { - public enum Persistence : UInt { - case none - case forSession - case permanent + public enum Persistence : UInt, Sendable { + case none = 0 + case forSession = 1 + case permanent = 2 @available(*, deprecated, message: "Synchronizable credential storage is not available in swift-corelibs-foundation. If you rely on synchronization for your functionality, please audit your code.") - case synchronizable + case synchronizable = 3 + + // Wraps the check for synchronizable to avoid deprecation warning + internal var isSynchronizable: Bool { + self.rawValue == 3 + } } } @@ -39,10 +44,10 @@ extension URLCredential { @class URLCredential @discussion This class is an immutable object representing an authentication credential. The actual type of the credential is determined by the constructor called in the categories declared below. */ -open class URLCredential : NSObject, NSSecureCoding, NSCopying { - private var _user : String - private var _password : String - private var _persistence : Persistence +open class URLCredential : NSObject, NSSecureCoding, NSCopying, @unchecked Sendable { + private let _user : String + private let _password : String + private let _persistence : Persistence /*! @method initWithUser:password:persistence: diff --git a/Sources/FoundationNetworking/URLCredentialStorage.swift b/Sources/FoundationNetworking/URLCredentialStorage.swift index 76fe88884f..fe77d9d292 100644 --- a/Sources/FoundationNetworking/URLCredentialStorage.swift +++ b/Sources/FoundationNetworking/URLCredentialStorage.swift @@ -17,9 +17,9 @@ import Foundation @class URLCredential.Storage @discussion URLCredential.Storage implements a singleton object (shared instance) which manages the shared credentials cache. Note: Whereas in Mac OS X any application can access any credential with a persistence of URLCredential.Persistence.permanent provided the user gives permission, in iPhone OS an application can access only its own credentials. */ -open class URLCredentialStorage: NSObject { +open class URLCredentialStorage: NSObject, @unchecked Sendable { - private static var _shared = URLCredentialStorage() + private static let _shared = URLCredentialStorage() /*! @method sharedCredentialStorage @@ -79,7 +79,7 @@ open class URLCredentialStorage: NSObject { the new one will replace it. */ open func set(_ credential: URLCredential, for space: URLProtectionSpace) { - guard credential.persistence != .synchronizable else { + guard !credential.persistence.isSynchronizable else { // Do what logged-out-from-iCloud Darwin does, and refuse to save synchronizable credentials when a sync service is not available (which, in s-c-f, is always) return } @@ -122,7 +122,7 @@ open class URLCredentialStorage: NSObject { @discussion The credential is removed from both persistent and temporary storage. */ open func remove(_ credential: URLCredential, for space: URLProtectionSpace, options: [String : AnyObject]? = [:]) { - if credential.persistence == .synchronizable { + if credential.persistence.isSynchronizable { guard let options = options, let removeSynchronizable = options[NSURLCredentialStorageRemoveSynchronizableCredentials] as? NSNumber, removeSynchronizable.boolValue == true else { @@ -178,7 +178,7 @@ open class URLCredentialStorage: NSObject { @discussion If the credential is not yet in the set for the protection space, it will be added to it. */ open func setDefaultCredential(_ credential: URLCredential, for space: URLProtectionSpace) { - guard credential.persistence != .synchronizable else { + guard !credential.persistence.isSynchronizable else { return } diff --git a/Sources/FoundationNetworking/URLProtectionSpace.swift b/Sources/FoundationNetworking/URLProtectionSpace.swift index 471811e8e3..6470657bc5 100644 --- a/Sources/FoundationNetworking/URLProtectionSpace.swift +++ b/Sources/FoundationNetworking/URLProtectionSpace.swift @@ -96,14 +96,14 @@ public let NSURLAuthenticationMethodNegotiate: String = "NSURLAuthenticationMeth @const NSURLAuthenticationMethodClientCertificate @abstract SSL Client certificate. Applies to any protocol. */ -@available(*, deprecated, message: "swift-corelibs-foundation does not currently support certificate authentication.") +@available(*, unavailable, message: "swift-corelibs-foundation does not currently support certificate authentication.") public let NSURLAuthenticationMethodClientCertificate: String = "NSURLAuthenticationMethodClientCertificate" /*! @const NSURLAuthenticationMethodServerTrust @abstract SecTrustRef validation required. Applies to any protocol. */ -@available(*, deprecated, message: "swift-corelibs-foundation does not support methods of authentication that rely on the Darwin Security framework.") +@available(*, unavailable, message: "swift-corelibs-foundation does not support methods of authentication that rely on the Darwin Security framework.") public let NSURLAuthenticationMethodServerTrust: String = "NSURLAuthenticationMethodServerTrust" @@ -111,7 +111,7 @@ public let NSURLAuthenticationMethodServerTrust: String = "NSURLAuthenticationMe @class URLProtectionSpace @discussion This class represents a protection space requiring authentication. */ -open class URLProtectionSpace : NSObject, NSCopying { +open class URLProtectionSpace : NSObject, NSCopying, @unchecked Sendable { private let _host: String private let _isProxy: Bool @@ -213,9 +213,6 @@ open class URLProtectionSpace : NSObject, NSCopying { case NSURLAuthenticationMethodNTLM: fallthrough case NSURLAuthenticationMethodNegotiate: fallthrough - case NSURLAuthenticationMethodClientCertificate: fallthrough - case NSURLAuthenticationMethodServerTrust: - return true default: return false @@ -289,8 +286,6 @@ open class URLProtectionSpace : NSObject, NSCopying { NSURLAuthenticationMethodHTMLForm, NSURLAuthenticationMethodNTLM, NSURLAuthenticationMethodNegotiate, - NSURLAuthenticationMethodClientCertificate, - NSURLAuthenticationMethodServerTrust ] var result = "<\(type(of: self)) \(Unmanaged.passUnretained(self).toOpaque())>: " result += "Host:\(host), " diff --git a/Sources/FoundationNetworking/URLProtocol.swift b/Sources/FoundationNetworking/URLProtocol.swift index 887ca268ac..b59159e219 100644 --- a/Sources/FoundationNetworking/URLProtocol.swift +++ b/Sources/FoundationNetworking/URLProtocol.swift @@ -13,6 +13,8 @@ import SwiftFoundation import Foundation #endif +internal import Synchronization + /*! @header URLProtocol.h @@ -54,7 +56,7 @@ import Foundation loading system that is intended for use by URLProtocol implementors. */ -public protocol URLProtocolClient : NSObjectProtocol { +public protocol URLProtocolClient : NSObjectProtocol, Sendable { /*! @@ -148,12 +150,15 @@ public protocol URLProtocolClient : NSObjectProtocol { func urlProtocol(_ protocol: URLProtocol, didCancel challenge: URLAuthenticationChallenge) } -internal class _ProtocolClient : NSObject { +internal class _ProtocolClient : NSObject, @unchecked Sendable { var cachePolicy: URLCache.StoragePolicy = .notAllowed var cacheableData: [Data]? var cacheableResponse: URLResponse? } +@available(*, unavailable) +extension URLProtocol : @unchecked Sendable { } + /*! @class NSURLProtocol @@ -164,8 +169,7 @@ internal class _ProtocolClient : NSObject { */ open class URLProtocol : NSObject { - private static var _registeredProtocolClasses = [AnyClass]() - private static var _classesLock = NSLock() + private static let _registeredProtocolClasses = Mutex<[AnyClass]>([]) //TODO: The right way to do this is using URLProtocol.property(forKey:in) and URLProtocol.setProperty(_:forKey:in) var properties: [URLProtocol._PropertyKey: Any] = [:] @@ -373,13 +377,11 @@ open class URLProtocol : NSObject { */ open class func registerClass(_ protocolClass: AnyClass) -> Bool { if protocolClass is URLProtocol.Type { - _classesLock.lock() - guard !_registeredProtocolClasses.contains(where: { $0 === protocolClass }) else { - _classesLock.unlock() - return true + _registeredProtocolClasses.withLock { + if !$0.contains(where: { $0 === protocolClass }) { + $0.append(protocolClass) + } } - _registeredProtocolClasses.append(protocolClass) - _classesLock.unlock() return true } return false @@ -388,24 +390,22 @@ open class URLProtocol : NSObject { internal class func getProtocolClass(protocols: [AnyClass], request: URLRequest) -> AnyClass? { // Registered protocols are consulted in reverse order. // This behaviour makes the latest registered protocol to be consulted first - _classesLock.lock() - let protocolClasses = protocols - for protocolClass in protocolClasses { - let urlProtocolClass: AnyClass = protocolClass - guard let urlProtocol = urlProtocolClass as? URLProtocol.Type else { fatalError() } - if urlProtocol.canInit(with: request) { - _classesLock.unlock() - return urlProtocol + _registeredProtocolClasses.withLock { _ in + // TODO: It appears this code does not access any data protected within the lock. Still, we lock for compatibility with previous code. + let protocolClasses = protocols + for protocolClass in protocolClasses { + let urlProtocolClass: AnyClass = protocolClass + guard let urlProtocol = urlProtocolClass as? URLProtocol.Type else { fatalError() } + if urlProtocol.canInit(with: request) { + return urlProtocol + } } + return nil } - _classesLock.unlock() - return nil } internal class func getProtocols() -> [AnyClass]? { - _classesLock.lock() - defer { _classesLock.unlock() } - return _registeredProtocolClasses + _registeredProtocolClasses.withLock { $0 } } /*! @method unregisterClass: @@ -415,11 +415,11 @@ open class URLProtocol : NSObject { @param protocolClass The class to unregister. */ open class func unregisterClass(_ protocolClass: AnyClass) { - _classesLock.lock() - if let idx = _registeredProtocolClasses.firstIndex(where: { $0 === protocolClass }) { - _registeredProtocolClasses.remove(at: idx) + _registeredProtocolClasses.withLock { + if let idx = $0.firstIndex(where: { $0 === protocolClass }) { + $0.remove(at: idx) + } } - _classesLock.unlock() } open class func canInit(with task: URLSessionTask) -> Bool { diff --git a/Sources/FoundationNetworking/URLRequest.swift b/Sources/FoundationNetworking/URLRequest.swift index 67155e92ce..f8ab4c8c7d 100644 --- a/Sources/FoundationNetworking/URLRequest.swift +++ b/Sources/FoundationNetworking/URLRequest.swift @@ -16,7 +16,7 @@ import SwiftFoundation import Foundation #endif -public struct URLRequest : ReferenceConvertible, Equatable, Hashable { +public struct URLRequest : ReferenceConvertible, Equatable, Hashable, Sendable { public typealias ReferenceType = NSURLRequest public typealias CachePolicy = NSURLRequest.CachePolicy public typealias NetworkServiceType = NSURLRequest.NetworkServiceType diff --git a/Sources/FoundationNetworking/URLResponse.swift b/Sources/FoundationNetworking/URLResponse.swift index 3be8ffec49..de61e457b8 100644 --- a/Sources/FoundationNetworking/URLResponse.swift +++ b/Sources/FoundationNetworking/URLResponse.swift @@ -21,7 +21,7 @@ import Foundation /// the actual bytes representing the content of a URL. See /// `URLSession` for more information about receiving the content /// data for a URL load. -open class URLResponse : NSObject, NSSecureCoding, NSCopying { +open class URLResponse : NSObject, NSSecureCoding, NSCopying, @unchecked Sendable { static public var supportsSecureCoding: Bool { return true @@ -175,7 +175,7 @@ open class URLResponse : NSObject, NSSecureCoding, NSCopying { /// HTTP URL load. It is a specialization of URLResponse which /// provides conveniences for accessing information specific to HTTP /// protocol responses. -open class HTTPURLResponse : URLResponse { +open class HTTPURLResponse : URLResponse, @unchecked Sendable { /// Initializer for HTTPURLResponse objects. /// @@ -390,7 +390,7 @@ private func getSuggestedFilename(fromHeaderFields headerFields: [String : Strin return nil } /// Parts corresponding to the `Content-Type` header field in a HTTP message. -private struct ContentTypeComponents { +private struct ContentTypeComponents : Sendable { /// For `text/html; charset=ISO-8859-4` this would be `text/html` let mimeType: String /// For `text/html; charset=ISO-8859-4` this would be `ISO-8859-4`. Will be @@ -432,10 +432,10 @@ extension ContentTypeComponents { /// attribute = token /// value = token | quoted-string /// ``` -private struct ValueWithParameters { +private struct ValueWithParameters : Sendable { let value: String let parameters: [Parameter] - struct Parameter { + struct Parameter : Sendable { let attribute: String let value: String? } @@ -469,7 +469,7 @@ private extension String { let escape = UnicodeScalar(0x5c)! // \ let quote = UnicodeScalar(0x22)! // " let separator = UnicodeScalar(0x3b)! // ; - enum State { + enum State : Sendable { case nonQuoted(String) case nonQuotedEscaped(String) case quoted(String) diff --git a/Sources/FoundationNetworking/URLSession/Configuration.swift b/Sources/FoundationNetworking/URLSession/Configuration.swift index 7b3996e2e8..725263dfbf 100644 --- a/Sources/FoundationNetworking/URLSession/Configuration.swift +++ b/Sources/FoundationNetworking/URLSession/Configuration.swift @@ -24,7 +24,7 @@ import Foundation internal extension URLSession { /// This is an immutable / `struct` version of `URLSessionConfiguration`. - struct _Configuration { + struct _Configuration : Sendable { /// identifier for the background session configuration let identifier: String? @@ -47,7 +47,8 @@ internal extension URLSession { let isDiscretionary: Bool /// The proxy dictionary, as described by - let connectionProxyDictionary: [AnyHashable : Any]? + // TODO: It would be nice to have the type not be AnyHashable, but for now we need this for source compatibility. + nonisolated(unsafe) let connectionProxyDictionary: [AnyHashable : Any]? /// Allow the use of HTTP pipelining let httpShouldUsePipelining: Bool diff --git a/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift b/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift index 142a2c84f0..51c87d9064 100644 --- a/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/FTP/FTPURLProtocol.swift @@ -66,7 +66,7 @@ internal class _FTPURLProtocol: _NativeProtocol { try easyHandle.set(url: url) } catch { self.internalState = .transferFailed - let nsError = error as? NSError ?? NSError(domain: NSURLErrorDomain, code: NSURLErrorBadURL) + let nsError = NSError(domain: NSURLErrorDomain, code: NSURLErrorBadURL) failWith(error: nsError, request: request) return } diff --git a/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift b/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift index ed7070c700..90a196114e 100644 --- a/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/HTTP/HTTPURLProtocol.swift @@ -321,7 +321,7 @@ internal class _HTTPURLProtocol: _NativeProtocol { try easyHandle.set(url: url) } catch { self.internalState = .transferFailed - let nsError = error as? NSError ?? NSError(domain: NSURLErrorDomain, code: NSURLErrorBadURL) + let nsError = NSError(domain: NSURLErrorDomain, code: NSURLErrorBadURL) failWith(error: nsError, request: request) return } @@ -413,23 +413,21 @@ internal class _HTTPURLProtocol: _NativeProtocol { if request.isTimeoutIntervalSet { timeoutInterval = Int(request.timeoutInterval) * 1000 } - let timeoutHandler = DispatchWorkItem { [weak self] in - guard let self = self, let task = self.task else { - fatalError("Timeout on a task that doesn't exist") - } //this guard must always pass - + // Access to self is protected by the work item executing on the correct queue + nonisolated(unsafe) let nonisolatedSelf = self + let timeoutHandler = DispatchWorkItem { // If a timeout occurred while waiting for a redirect completion handler to be called by // the delegate then terminate the task but DONT set the error to NSURLErrorTimedOut. // This matches Darwin. - if case .waitingForRedirectCompletionHandler(response: let response,_) = self.internalState { - task.response = response - self.easyHandle.timeoutTimer = nil - self.internalState = .taskCompleted + if case .waitingForRedirectCompletionHandler(response: let response,_) = nonisolatedSelf.internalState { + nonisolatedSelf.task!.response = response + nonisolatedSelf.easyHandle.timeoutTimer = nil + nonisolatedSelf.internalState = .taskCompleted } else { - self.internalState = .transferFailed + nonisolatedSelf.internalState = .transferFailed let urlError = URLError(_nsError: NSError(domain: NSURLErrorDomain, code: NSURLErrorTimedOut, userInfo: nil)) - self.completeTask(withError: urlError) - self.client?.urlProtocol(self, didFailWithError: urlError) + nonisolatedSelf.completeTask(withError: urlError) + nonisolatedSelf.client?.urlProtocol(self, didFailWithError: urlError) } } @@ -486,11 +484,13 @@ internal class _HTTPURLProtocol: _NativeProtocol { // before we call delegate API self.internalState = .waitingForRedirectCompletionHandler(response: response, bodyDataDrain: bodyDataDrain) // We need this ugly cast in order to be able to support `URLSessionTask.init()` + let task = self.task! + // Self state is protected by the dispatch queue + nonisolated(unsafe) let nonisolatedSelf = self session.delegateQueue.addOperation { - delegate.urlSession(session, task: self.task!, willPerformHTTPRedirection: response as! HTTPURLResponse, newRequest: request) { [weak self] (request: URLRequest?) in - guard let self = self else { return } - self.task?.workQueue.async { - self.didCompleteRedirectCallback(request) + delegate.urlSession(session, task: task, willPerformHTTPRedirection: response as! HTTPURLResponse, newRequest: request) { (request: URLRequest?) in + task.workQueue.async { + nonisolatedSelf.didCompleteRedirectCallback(request) } } } @@ -686,7 +686,7 @@ internal class _HTTPURLProtocol: _NativeProtocol { } } -fileprivate var userAgentString: String = { +fileprivate let userAgentString: String = { // Darwin uses something like this: "xctest (unknown version) CFNetwork/760.4.2 Darwin/15.4.0 (x86_64)" let info = ProcessInfo.processInfo let name = info.processName diff --git a/Sources/FoundationNetworking/URLSession/Message.swift b/Sources/FoundationNetworking/URLSession/Message.swift index 4af28f6a0f..09d1019aa8 100644 --- a/Sources/FoundationNetworking/URLSession/Message.swift +++ b/Sources/FoundationNetworking/URLSession/Message.swift @@ -116,5 +116,6 @@ struct _Delimiters { static let DoubleQuote = UnicodeScalar(0x22)! static let Equals = UnicodeScalar(0x3d)! /// *Separators* according to RFC 2616 - static let Separators = NSCharacterSet(charactersIn: "()<>@,;:\\\"/[]?={} \t") + // Sendable-safe due to immutability + static nonisolated(unsafe) let Separators = NSCharacterSet(charactersIn: "()<>@,;:\\\"/[]?={} \t") } diff --git a/Sources/FoundationNetworking/URLSession/NativeProtocol.swift b/Sources/FoundationNetworking/URLSession/NativeProtocol.swift index 941b9cd3b1..ad6836dc9a 100644 --- a/Sources/FoundationNetworking/URLSession/NativeProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/NativeProtocol.swift @@ -297,7 +297,8 @@ internal class _NativeProtocol: URLProtocol, _EasyHandleDelegate { // We will reset the body source and seek forward. guard let session = task?.session as? URLSession else { fatalError() } - var currentInputStream: InputStream? + // TODO: InputStream is not Sendable, but it seems safe here beacuse of the wait on the dispatch group. It would be nice to prove this to the compiler. + nonisolated(unsafe) var currentInputStream: InputStream? if let delegate = task?.delegate { let dispatchGroup = DispatchGroup() @@ -413,16 +414,17 @@ internal class _NativeProtocol: URLProtocol, _EasyHandleDelegate { // Check if the cached response is good to use: if let cachedResponse = cachedResponse, canRespondFromCache(using: cachedResponse) { self.internalState = .fulfillingFromCache(cachedResponse) + nonisolated(unsafe) let nonisolatedSelf = self task?.workQueue.async { - self.client?.urlProtocol(self, cachedResponseIsValid: cachedResponse) - self.client?.urlProtocol(self, didReceive: cachedResponse.response, cacheStoragePolicy: .notAllowed) + nonisolatedSelf.client?.urlProtocol(nonisolatedSelf, cachedResponseIsValid: cachedResponse) + nonisolatedSelf.client?.urlProtocol(nonisolatedSelf, didReceive: cachedResponse.response, cacheStoragePolicy: .notAllowed) if !cachedResponse.data.isEmpty { - self.client?.urlProtocol(self, didLoad: cachedResponse.data) + nonisolatedSelf.client?.urlProtocol(nonisolatedSelf, didLoad: cachedResponse.data) } - self.client?.urlProtocolDidFinishLoading(self) + nonisolatedSelf.client?.urlProtocolDidFinishLoading(nonisolatedSelf) - self.internalState = .taskCompleted + nonisolatedSelf.internalState = .taskCompleted } } else { @@ -511,11 +513,12 @@ extension _NativeProtocol { guard let s = task?.session as? URLSession else { fatalError() } + + nonisolated(unsafe) let nonisolatedSelf = self s.delegateQueue.addOperation { - delegate.urlSession(s, dataTask: dt, didReceive: response, completionHandler: { [weak self] disposition in - guard let task = self else { return } - self?.task?.workQueue.async { - task.didCompleteResponseCallback(disposition: disposition) + delegate.urlSession(s, dataTask: dt, didReceive: response, completionHandler: { disposition in + nonisolatedSelf.task?.workQueue.async { + nonisolatedSelf.didCompleteResponseCallback(disposition: disposition) } }) } diff --git a/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift b/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift index 7fde05a297..c8ae632a45 100644 --- a/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift +++ b/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift @@ -36,7 +36,7 @@ internal func NSRequiresConcreteImplementation(_ fn: String = #function, file: S } @usableFromInline -class _NSNonfileURLContentLoader: _NSNonfileURLContentLoading { +class _NSNonfileURLContentLoader: _NSNonfileURLContentLoading, @unchecked Sendable { @usableFromInline required init() {} @@ -51,14 +51,15 @@ class _NSNonfileURLContentLoader: _NSNonfileURLContentLoading { return CocoaError.error(.fileReadUnknown, userInfo: userInfo, url: url) } - var urlResponse: URLResponse? let session = URLSession(configuration: URLSessionConfiguration.default) let cond = NSCondition() cond.lock() - var resError: Error? - var resData: Data? - var taskFinished = false + // protected by the condition above + nonisolated(unsafe) var urlResponse: URLResponse? + nonisolated(unsafe) var resError: Error? + nonisolated(unsafe) var resData: Data? + nonisolated(unsafe) var taskFinished = false let task = session.dataTask(with: url, completionHandler: { data, response, error in cond.lock() resData = data diff --git a/Sources/FoundationNetworking/URLSession/TaskRegistry.swift b/Sources/FoundationNetworking/URLSession/TaskRegistry.swift index 059010a07b..a676bd9fed 100644 --- a/Sources/FoundationNetworking/URLSession/TaskRegistry.swift +++ b/Sources/FoundationNetworking/URLSession/TaskRegistry.swift @@ -35,9 +35,9 @@ extension URLSession { /// - Note: This must **only** be accessed on the owning session's work queue. class _TaskRegistry { /// Completion handler for `URLSessionDataTask`, and `URLSessionUploadTask`. - typealias DataTaskCompletion = (Data?, URLResponse?, Error?) -> Void + typealias DataTaskCompletion = @Sendable (Data?, URLResponse?, Error?) -> Void /// Completion handler for `URLSessionDownloadTask`. - typealias DownloadTaskCompletion = (URL?, URLResponse?, Error?) -> Void + typealias DownloadTaskCompletion = @Sendable (URL?, URLResponse?, Error?) -> Void /// What to do upon events (such as completion) of a specific task. enum _Behaviour { /// Call the `URLSession`s delegate diff --git a/Sources/FoundationNetworking/URLSession/URLSession.swift b/Sources/FoundationNetworking/URLSession/URLSession.swift index a8f0e26155..5ee6265855 100644 --- a/Sources/FoundationNetworking/URLSession/URLSession.swift +++ b/Sources/FoundationNetworking/URLSession/URLSession.swift @@ -168,31 +168,31 @@ import SwiftFoundation import Foundation #endif +internal import Synchronization + extension URLSession { - public enum DelayedRequestDisposition { + public enum DelayedRequestDisposition : Sendable { case cancel case continueLoading case useNewRequest } } -fileprivate let globalVarSyncQ = DispatchQueue(label: "org.swift.Foundation.URLSession.GlobalVarSyncQ") -fileprivate var sessionCounter = Int32(0) +fileprivate let sessionCounter = Atomic(0) fileprivate func nextSessionIdentifier() -> Int32 { - return globalVarSyncQ.sync { - sessionCounter += 1 - return sessionCounter - } + let (_, new) = sessionCounter.add(1, ordering: .relaxed) + return new } public let NSURLSessionTransferSizeUnknown: Int64 = -1 -open class URLSession : NSObject { +open class URLSession : NSObject, @unchecked Sendable { internal let _configuration: _Configuration fileprivate let multiHandle: _MultiHandle fileprivate var nextTaskIdentifier = 1 internal let workQueue: DispatchQueue internal let taskRegistry = URLSession._TaskRegistry() fileprivate let identifier: Int32 + // written to on workQueue, read from workQueue and elsewhere. Inherently somewhat racy, then, because it can change after reading the value asynchronously. fileprivate var invalidated = false fileprivate static let registerProtocols: () = { // TODO: We register all the native protocols here. @@ -348,7 +348,7 @@ open class URLSession : NSObject { } /* empty all cookies, cache and credential stores, removes disk files, issues -flushWithCompletionHandler:. Invokes completionHandler() on the delegate queue. */ - open func reset(completionHandler: @escaping () -> Void) { + open func reset(completionHandler: @Sendable @escaping () -> Void) { let configuration = self.configuration DispatchQueue.global(qos: .background).async { @@ -366,7 +366,7 @@ open class URLSession : NSObject { } /* flush storage to disk and clear transient network caches. Invokes completionHandler() on the delegate queue. */ - open func flush(completionHandler: @escaping () -> Void) { + open func flush(completionHandler: @Sendable @escaping () -> Void) { // We create new CURL handles every request. delegateQueue.addOperation { completionHandler() @@ -374,12 +374,12 @@ open class URLSession : NSObject { } @available(*, unavailable, renamed: "getTasksWithCompletionHandler(_:)") - open func getTasksWithCompletionHandler(completionHandler: @escaping ([URLSessionDataTask], [URLSessionUploadTask], [URLSessionDownloadTask]) -> Void) { + open func getTasksWithCompletionHandler(completionHandler: @Sendable @escaping ([URLSessionDataTask], [URLSessionUploadTask], [URLSessionDownloadTask]) -> Void) { getTasksWithCompletionHandler(completionHandler) } /* invokes completionHandler with outstanding data, upload and download tasks. */ - open func getTasksWithCompletionHandler(_ completionHandler: @escaping ([URLSessionDataTask], [URLSessionUploadTask], [URLSessionDownloadTask]) -> Void) { + open func getTasksWithCompletionHandler(_ completionHandler: @Sendable @escaping ([URLSessionDataTask], [URLSessionUploadTask], [URLSessionDownloadTask]) -> Void) { workQueue.async { self.delegateQueue.addOperation { var dataTasks = [URLSessionDataTask]() @@ -405,7 +405,7 @@ open class URLSession : NSObject { } /* invokes completionHandler with all outstanding tasks. */ - open func getAllTasks(completionHandler: @escaping ([URLSessionTask]) -> Void) { + open func getAllTasks(completionHandler: @Sendable @escaping ([URLSessionTask]) -> Void) { workQueue.async { self.delegateQueue.addOperation { completionHandler(self.taskRegistry.allTasks.filter { $0.state == .running || $0.isSuspendedAfterResume }) @@ -436,11 +436,11 @@ open class URLSession : NSObject { * see . The delegate, if any, will still be * called for authentication challenges. */ - open func dataTask(with request: URLRequest, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask { + open func dataTask(with request: URLRequest, completionHandler: @Sendable @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask { return dataTask(with: _Request(request), behaviour: .dataCompletionHandler(completionHandler)) } - open func dataTask(with url: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask { + open func dataTask(with url: URL, completionHandler: @Sendable @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask { return dataTask(with: _Request(url), behaviour: .dataCompletionHandler(completionHandler)) } @@ -465,12 +465,12 @@ open class URLSession : NSObject { /* * upload convenience method. */ - open func uploadTask(with request: URLRequest, fromFile fileURL: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionUploadTask { + open func uploadTask(with request: URLRequest, fromFile fileURL: URL, completionHandler: @Sendable @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionUploadTask { let r = URLSession._Request(request) return uploadTask(with: r, body: .file(fileURL), behaviour: .dataCompletionHandler(completionHandler)) } - open func uploadTask(with request: URLRequest, from bodyData: Data?, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionUploadTask { + open func uploadTask(with request: URLRequest, from bodyData: Data?, completionHandler: @Sendable @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionUploadTask { return uploadTask(with: _Request(request), body: .data(createDispatchData(bodyData!)), behaviour: .dataCompletionHandler(completionHandler)) } @@ -496,15 +496,15 @@ open class URLSession : NSObject { * copied during the invocation of the completion routine. The file * will be removed automatically. */ - open func downloadTask(with request: URLRequest, completionHandler: @escaping (URL?, URLResponse?, Error?) -> Void) -> URLSessionDownloadTask { + open func downloadTask(with request: URLRequest, completionHandler: @Sendable @escaping (URL?, URLResponse?, Error?) -> Void) -> URLSessionDownloadTask { return downloadTask(with: _Request(request), behavior: .downloadCompletionHandler(completionHandler)) } - open func downloadTask(with url: URL, completionHandler: @escaping (URL?, URLResponse?, Error?) -> Void) -> URLSessionDownloadTask { + open func downloadTask(with url: URL, completionHandler: @Sendable @escaping (URL?, URLResponse?, Error?) -> Void) -> URLSessionDownloadTask { return downloadTask(with: _Request(url), behavior: .downloadCompletionHandler(completionHandler)) } - open func downloadTask(withResumeData resumeData: Data, completionHandler: @escaping (URL?, URLResponse?, Error?) -> Void) -> URLSessionDownloadTask { + open func downloadTask(withResumeData resumeData: Data, completionHandler: @Sendable @escaping (URL?, URLResponse?, Error?) -> Void) -> URLSessionDownloadTask { return invalidDownloadTask(behavior: .downloadCompletionHandler(completionHandler)) } @@ -683,37 +683,15 @@ internal extension URLSession { } } -fileprivate struct Lock: @unchecked Sendable { - let stateLock: ManagedBuffer - init(initialState: State) { - stateLock = .create(minimumCapacity: 1) { buffer in - buffer.withUnsafeMutablePointerToElements { lock in - lock.initialize(to: .init()) - } - return initialState - } - } - - func withLock(_ body: @Sendable (inout State) throws -> R) rethrows -> R where R : Sendable { - return try stateLock.withUnsafeMutablePointers { header, lock in - lock.pointee.lock() - defer { - lock.pointee.unlock() - } - return try body(&header.pointee) - } - } -} - fileprivate extension URLSession { final class CancelState: Sendable { struct State { var isCancelled: Bool var task: URLSessionTask? } - let lock: Lock + + let lock = Mutex(State(isCancelled: false, task: nil)) init() { - lock = Lock(initialState: State(isCancelled: false, task: nil)) } func cancel() { diff --git a/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift b/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift index 3f3b26bcb8..4c787ad501 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift @@ -35,7 +35,7 @@ import Foundation /// /// A background session can be used to perform networking operations /// on behalf of a suspended application, within certain constraints. -open class URLSessionConfiguration : NSObject, NSCopying { +open class URLSessionConfiguration : NSObject, NSCopying, @unchecked Sendable { // -init is silently incorrect in URLSessionCofiguration on the desktop. Ensure code that relied on swift-corelibs-foundation's init() being functional is redirected to the appropriate cross-platform class property. @available(*, deprecated, message: "Use .default instead.", renamed: "URLSessionConfiguration.default") public override init() { @@ -257,7 +257,7 @@ open class URLSessionConfiguration : NSObject, NSCopying { @available(*, unavailable, message: "Not available on non-Darwin platforms") extension URLSessionConfiguration { - public enum MultipathServiceType { + public enum MultipathServiceType : Sendable { case none case handover case interactive diff --git a/Sources/FoundationNetworking/URLSession/URLSessionDelegate.swift b/Sources/FoundationNetworking/URLSession/URLSessionDelegate.swift index bd061f55dc..8ec0729968 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionDelegate.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionDelegate.swift @@ -25,7 +25,7 @@ extension URLSession { /* * Disposition options for various delegate messages */ - public enum AuthChallengeDisposition : Int { + public enum AuthChallengeDisposition : Int, Sendable { case useCredential /* Use the specified credential, which may be nil */ case performDefaultHandling /* Default handling for the challenge - as if this delegate were not implemented; the credential parameter is ignored. */ @@ -33,7 +33,7 @@ extension URLSession { case rejectProtectionSpace /* This challenge is rejected and the next authentication protection space should be tried; the credential parameter is ignored. */ } - public enum ResponseDisposition : Int { + public enum ResponseDisposition : Int, Sendable { case cancel /* Cancel the load, this is the same as -[task cancel] */ case allow /* Allow the load to continue */ @@ -54,7 +54,7 @@ extension URLSession { /* * Messages related to the URL session as a whole */ -public protocol URLSessionDelegate : NSObjectProtocol { +public protocol URLSessionDelegate : NSObjectProtocol, Sendable { /* The last message a session receives. A session will only become * invalid because of a systemic error or when it has been @@ -71,12 +71,12 @@ public protocol URLSessionDelegate : NSObjectProtocol { * behavior will be to use the default handling, which may involve user * interaction. */ - func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) + func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @Sendable @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) } extension URLSessionDelegate { public func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) { } - public func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { } + public func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @Sendable @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { } } /* If an application has received an @@ -91,7 +91,7 @@ extension URLSessionDelegate { /* * Messages related to the operation of a specific task. */ -public protocol URLSessionTaskDelegate : URLSessionDelegate { +public protocol URLSessionTaskDelegate : URLSessionDelegate, Sendable { /* An HTTP request is attempting to perform a redirection to a different * URL. You must invoke the completion routine to allow the @@ -102,20 +102,20 @@ public protocol URLSessionTaskDelegate : URLSessionDelegate { * * For tasks in background sessions, redirections will always be followed and this method will not be called. */ - func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) + func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @Sendable @escaping (URLRequest?) -> Void) /* The task has received a request specific authentication challenge. * If this delegate is not implemented, the session specific authentication challenge * will *NOT* be called and the behavior will be the same as using the default handling * disposition. */ - func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) + func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @Sendable @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) /* Sent if a task requires a new, unopened body stream. This may be * necessary when authentication has failed for any request that * involves a body stream. */ - func urlSession(_ session: URLSession, task: URLSessionTask, needNewBodyStream completionHandler: @escaping (InputStream?) -> Void) + func urlSession(_ session: URLSession, task: URLSessionTask, needNewBodyStream completionHandler: @Sendable @escaping (InputStream?) -> Void) /* Sent periodically to notify the delegate of upload progress. This * information is also available as properties of the task. @@ -127,13 +127,13 @@ public protocol URLSessionTaskDelegate : URLSessionDelegate { */ func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) - func urlSession(_ session: URLSession, task: URLSessionTask, willBeginDelayedRequest request: URLRequest, completionHandler: @escaping (URLSession.DelayedRequestDisposition, URLRequest?) -> Void) + func urlSession(_ session: URLSession, task: URLSessionTask, willBeginDelayedRequest request: URLRequest, completionHandler: @Sendable @escaping (URLSession.DelayedRequestDisposition, URLRequest?) -> Void) func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) } extension URLSessionTaskDelegate { - public func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) { + public func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @Sendable @escaping (URLRequest?) -> Void) { // If the task's delegate does not implement this function, check if the session's delegate does if self === task.delegate, let sessionDelegate = session.delegate as? URLSessionTaskDelegate, self !== sessionDelegate { sessionDelegate.urlSession(session, task: task, willPerformHTTPRedirection: response, newRequest: request, completionHandler: completionHandler) @@ -143,7 +143,7 @@ extension URLSessionTaskDelegate { } } - public func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { + public func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @Sendable @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { if self === task.delegate, let sessionDelegate = session.delegate as? URLSessionTaskDelegate, self !== sessionDelegate { sessionDelegate.urlSession(session, task: task, didReceive: challenge, completionHandler: completionHandler) } else { @@ -151,7 +151,7 @@ extension URLSessionTaskDelegate { } } - public func urlSession(_ session: URLSession, task: URLSessionTask, needNewBodyStream completionHandler: @escaping (InputStream?) -> Void) { + public func urlSession(_ session: URLSession, task: URLSessionTask, needNewBodyStream completionHandler: @Sendable @escaping (InputStream?) -> Void) { if self === task.delegate, let sessionDelegate = session.delegate as? URLSessionTaskDelegate, self !== sessionDelegate { sessionDelegate.urlSession(session, task: task, needNewBodyStream: completionHandler) } else { @@ -171,7 +171,7 @@ extension URLSessionTaskDelegate { } } - public func urlSession(_ session: URLSession, task: URLSessionTask, willBeginDelayedRequest request: URLRequest, completionHandler: @escaping (URLSession.DelayedRequestDisposition, URLRequest?) -> Void) { + public func urlSession(_ session: URLSession, task: URLSessionTask, willBeginDelayedRequest request: URLRequest, completionHandler: @Sendable @escaping (URLSession.DelayedRequestDisposition, URLRequest?) -> Void) { if self === task.delegate, let sessionDelegate = session.delegate as? URLSessionTaskDelegate, self !== sessionDelegate { sessionDelegate.urlSession(session, task: task, willBeginDelayedRequest: request, completionHandler: completionHandler) } @@ -200,7 +200,7 @@ public protocol URLSessionDataDelegate : URLSessionTaskDelegate { /// (which cannot be converted to download tasks). /// - Bug: This will currently not wait for the completion handler to run, /// and it will ignore anything passed to the completion handler. - func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) + func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @Sendable @escaping (URLSession.ResponseDisposition) -> Void) /* Notification that a data task has become a download task. No * future messages will be sent to the data task. @@ -238,13 +238,13 @@ public protocol URLSessionDataDelegate : URLSessionTaskDelegate { * attempted for a given resource, and you should not rely on this * message to receive the resource data. */ - func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, willCacheResponse proposedResponse: CachedURLResponse, completionHandler: @escaping (CachedURLResponse?) -> Void) + func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, willCacheResponse proposedResponse: CachedURLResponse, completionHandler: @Sendable @escaping (CachedURLResponse?) -> Void) } extension URLSessionDataDelegate { - public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) { } + public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @Sendable @escaping (URLSession.ResponseDisposition) -> Void) { } public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didBecome downloadTask: URLSessionDownloadTask) { } @@ -252,7 +252,7 @@ extension URLSessionDataDelegate { public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { } - public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, willCacheResponse proposedResponse: CachedURLResponse, completionHandler: @escaping (CachedURLResponse?) -> Void) { } + public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, willCacheResponse proposedResponse: CachedURLResponse, completionHandler: @Sendable @escaping (CachedURLResponse?) -> Void) { } } /* diff --git a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift index d1aa041333..4968494b35 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift @@ -27,7 +27,7 @@ private class Bag { /// A cancelable object that refers to the lifetime /// of processing a given request. -open class URLSessionTask : NSObject, NSCopying { +open class URLSessionTask : NSObject, NSCopying, @unchecked Sendable { // These properties aren't heeded in swift-corelibs-foundation, but we may heed them in the future. They exist for source compatibility. open var countOfBytesClientExpectsToReceive: Int64 = NSURLSessionTransferSizeUnknown { @@ -223,11 +223,12 @@ open class URLSessionTask : NSObject, NSCopying { } if let session = actualSession, let delegate = self.delegate { + nonisolated(unsafe) let nonisolatedCompletion = completion delegate.urlSession(session, task: self) { (stream) in if let stream = stream { - completion(.stream(stream)) + nonisolatedCompletion(.stream(stream)) } else { - completion(.none) + nonisolatedCompletion(.none) } } } else { @@ -386,6 +387,8 @@ open class URLSessionTask : NSObject, NSCopying { } guard !canceled else { return } self._getProtocol { (urlProtocol) in + // The combination of locking in getProtocol and dispatching to the work queue let us use the normally non-Sendable URLProtocol + nonisolated(unsafe) let urlProtocol = urlProtocol self.workQueue.async { var info = [NSLocalizedDescriptionKey: "\(URLError.Code.cancelled)" as Any] if let url = self.originalRequest?.url { @@ -455,6 +458,8 @@ open class URLSessionTask : NSObject, NSCopying { if self.suspendCount == 1 { self._getProtocol { (urlProtocol) in + // The combination of locking in getProtocol and dispatching to the work queue let us use the normally non-Sendable URLProtocol + nonisolated(unsafe) let urlProtocol = urlProtocol self.workQueue.async { urlProtocol?.stopLoading() } @@ -473,6 +478,8 @@ open class URLSessionTask : NSObject, NSCopying { if self.suspendCount == 0 { self.hasTriggeredResume = true self._getProtocol { (urlProtocol) in + // The combination of locking in getProtocol and dispatching to the work queue let us use the normally non-Sendable URLProtocol + nonisolated(unsafe) let urlProtocol = urlProtocol self.workQueue.async { if let _protocol = urlProtocol { _protocol.startLoading() @@ -522,7 +529,7 @@ open class URLSessionTask : NSObject, NSCopying { } extension URLSessionTask { - public enum State : Int { + public enum State : Int, Sendable { /// The task is currently being serviced by the session case running case suspended @@ -622,7 +629,7 @@ extension URLSessionTask { * functionality over an URLSessionTask and its presence is merely * to provide lexical differentiation from download and upload tasks. */ -open class URLSessionDataTask : URLSessionTask { +open class URLSessionDataTask : URLSessionTask, @unchecked Sendable { } /* @@ -631,14 +638,14 @@ open class URLSessionDataTask : URLSessionTask { * that may be sent referencing an URLSessionDataTask equally apply * to URLSessionUploadTasks. */ -open class URLSessionUploadTask : URLSessionDataTask { +open class URLSessionUploadTask : URLSessionDataTask, @unchecked Sendable { } /* * URLSessionDownloadTask is a task that represents a download to * local storage. */ -open class URLSessionDownloadTask : URLSessionTask { +open class URLSessionDownloadTask : URLSessionTask, @unchecked Sendable { var createdFromInvalidResumeData = false @@ -680,8 +687,8 @@ open class URLSessionDownloadTask : URLSessionTask { * and once the WebSocket handshake is successful, the client can read and write * messages that will be framed using the WebSocket protocol by the framework. */ -open class URLSessionWebSocketTask : URLSessionTask { - public enum CloseCode : Int, @unchecked Sendable { +open class URLSessionWebSocketTask : URLSessionTask, @unchecked Sendable { + public enum CloseCode : Int, Sendable { case invalid = 0 case normalClosure = 1000 case goingAway = 1001 @@ -697,7 +704,7 @@ open class URLSessionWebSocketTask : URLSessionTask { case tlsHandshakeFailure = 1015 } - public enum Message { + public enum Message : Sendable { case data(Data) case string(String) } @@ -720,10 +727,10 @@ open class URLSessionWebSocketTask : URLSessionTask { } } - private var sendBuffer = [(Message, (Error?) -> Void)]() + private var sendBuffer = [(Message, @Sendable (Error?) -> Void)]() private var receiveBuffer = [Message]() - private var receiveCompletionHandlers = [(Result) -> Void]() - private var pongCompletionHandlers = [(Error?) -> Void]() + private var receiveCompletionHandlers = [@Sendable (Result) -> Void]() + private var pongCompletionHandlers = [@Sendable (Error?) -> Void]() private var closeMessage: (CloseCode, Data)? = nil internal var protocolPicked: String? = nil @@ -759,9 +766,11 @@ open class URLSessionWebSocketTask : URLSessionTask { } } - open func sendPing(pongReceiveHandler: @escaping (Error?) -> Void) { + open func sendPing(pongReceiveHandler: @Sendable @escaping (Error?) -> Void) { self.workQueue.async { self._getProtocol { urlProtocol in + // The combination of locking in getProtocol and dispatching to the work queue let us use the normally non-Sendable URLProtocol + nonisolated(unsafe) let urlProtocol = urlProtocol self.workQueue.async { if let webSocketProtocol = urlProtocol as? _WebSocketURLProtocol { do { @@ -821,7 +830,7 @@ open class URLSessionWebSocketTask : URLSessionTask { } } - private func send(_ message: Message, completionHandler: @escaping (Error?) -> Void) { + private func send(_ message: Message, completionHandler: @Sendable @escaping (Error?) -> Void) { self.workQueue.async { self.sendBuffer.append((message, completionHandler)) self.doPendingWork() @@ -837,7 +846,7 @@ open class URLSessionWebSocketTask : URLSessionTask { } } - private func receive(completionHandler: @escaping (Result) -> Void) { + private func receive(completionHandler: @Sendable @escaping (Result) -> Void) { self.workQueue.async { self.receiveCompletionHandlers.append(completionHandler) self.doPendingWork() @@ -867,6 +876,8 @@ open class URLSessionWebSocketTask : URLSessionTask { } self.pongCompletionHandlers.removeAll() self._getProtocol { urlProtocol in + // The combination of locking in getProtocol and dispatching to the work queue let us use the normally non-Sendable URLProtocol + nonisolated(unsafe) let urlProtocol = urlProtocol self.workQueue.async { if self.handshakeCompleted && self.state != .completed { if let webSocketProtocol = urlProtocol as? _WebSocketURLProtocol { @@ -882,6 +893,8 @@ open class URLSessionWebSocketTask : URLSessionTask { } } else { self._getProtocol { urlProtocol in + // The combination of locking in getProtocol and dispatching to the work queue let us use the normally non-Sendable URLProtocol + nonisolated(unsafe) let urlProtocol = urlProtocol self.workQueue.async { if self.handshakeCompleted { if let webSocketProtocol = urlProtocol as? _WebSocketURLProtocol { @@ -975,8 +988,7 @@ extension URLSessionWebSocketDelegate { * disassociated from the underlying session. */ -@available(*, deprecated, message: "URLSessionStreamTask is not available in swift-corelibs-foundation") -open class URLSessionStreamTask : URLSessionTask { +open class URLSessionStreamTask : URLSessionTask, @unchecked Sendable { /* Read minBytes, or at most maxBytes bytes and invoke the completion * handler on the sessions delegate queue with the data or an error. @@ -1153,8 +1165,9 @@ extension _ProtocolClient : URLProtocolClient { switch session.behaviour(for: task) { case .taskDelegate(let delegate): if let downloadDelegate = delegate as? URLSessionDownloadDelegate, let downloadTask = task as? URLSessionDownloadTask { + let temporaryFileURL = urlProtocol.properties[URLProtocol._PropertyKey.temporaryFileURL] as! URL session.delegateQueue.addOperation { - downloadDelegate.urlSession(session, downloadTask: downloadTask, didFinishDownloadingTo: urlProtocol.properties[URLProtocol._PropertyKey.temporaryFileURL] as! URL) + downloadDelegate.urlSession(session, downloadTask: downloadTask, didFinishDownloadingTo: temporaryFileURL) } } else if let webSocketDelegate = delegate as? URLSessionWebSocketDelegate, let webSocketTask = task as? URLSessionWebSocketTask { @@ -1178,9 +1191,10 @@ extension _ProtocolClient : URLProtocolClient { } case .dataCompletionHandler(let completion), .dataCompletionHandlerWithTaskDelegate(let completion, _): - let dataCompletion = { + nonisolated(unsafe) let nonisolatedURLProtocol = urlProtocol + let dataCompletion : @Sendable () -> () = { guard task.state != .completed else { return } - completion(urlProtocol.properties[URLProtocol._PropertyKey.responseData] as? Data ?? Data(), task.response, nil) + completion(nonisolatedURLProtocol.properties[URLProtocol._PropertyKey.responseData] as? Data ?? Data(), task.response, nil) task.state = .completed session.workQueue.async { session.taskRegistry.remove(task) @@ -1195,9 +1209,10 @@ extension _ProtocolClient : URLProtocolClient { } case .downloadCompletionHandler(let completion), .downloadCompletionHandlerWithTaskDelegate(let completion, _): - let downloadCompletion = { + nonisolated(unsafe) let nonisolatedURLProtocol = urlProtocol + let downloadCompletion : @Sendable () -> () = { guard task.state != .completed else { return } - completion(urlProtocol.properties[URLProtocol._PropertyKey.temporaryFileURL] as? URL, task.response, nil) + completion(nonisolatedURLProtocol.properties[URLProtocol._PropertyKey.temporaryFileURL] as? URL, task.response, nil) task.state = .completed session.workQueue.async { session.taskRegistry.remove(task) @@ -1224,7 +1239,7 @@ extension _ProtocolClient : URLProtocolClient { guard let task = `protocol`.task else { fatalError("Received response, but there's no task.") } guard let session = task.session as? URLSession else { fatalError("Task not associated with URLSession.") } - func proceed(using credential: URLCredential?) { + @Sendable func proceed(using credential: URLCredential?) { let protectionSpace = challenge.protectionSpace let authScheme = protectionSpace.authenticationMethod @@ -1247,7 +1262,7 @@ extension _ProtocolClient : URLProtocolClient { task.resume() } - func attemptProceedingWithDefaultCredential() { + @Sendable func attemptProceedingWithDefaultCredential() { if let credential = challenge.proposedCredential { let last = task._protocolLock.performLocked { task._lastCredentialUsedFromStorageDuringAuthentication } @@ -1334,7 +1349,7 @@ extension _ProtocolClient : URLProtocolClient { } case .dataCompletionHandler(let completion), .dataCompletionHandlerWithTaskDelegate(let completion, _): - let dataCompletion = { + let dataCompletion : @Sendable () -> () = { guard task.state != .completed else { return } completion(nil, nil, error) task.state = .completed @@ -1351,7 +1366,7 @@ extension _ProtocolClient : URLProtocolClient { } case .downloadCompletionHandler(let completion), .downloadCompletionHandlerWithTaskDelegate(let completion, _): - let downloadCompletion = { + let downloadCompletion : @Sendable () -> () = { guard task.state != .completed else { return } completion(nil, nil, error) task.state = .completed @@ -1403,7 +1418,7 @@ extension URLSessionTask { } extension URLProtocol { - enum _PropertyKey: String { + enum _PropertyKey: String, Sendable { case responseData case temporaryFileURL } diff --git a/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift b/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift index d745c9e0f8..5de19fdeef 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift @@ -21,19 +21,19 @@ import SwiftFoundation import Foundation #endif -open class URLSessionTaskMetrics : NSObject { +open class URLSessionTaskMetrics : NSObject, @unchecked Sendable { public internal(set) var transactionMetrics: [URLSessionTaskTransactionMetrics] = [] public internal(set) var taskInterval: DateInterval = .init() public internal(set) var redirectCount = 0 - public enum ResourceFetchType: Int { + public enum ResourceFetchType: Int, Sendable { case unknown = 0 case networkLoad = 1 case serverPush = 2 case localCache = 3 } - public enum DomainResolutionProtocol: Int { + public enum DomainResolutionProtocol: Int, Sendable { case unknown = 0 case udp = 1 case tcp = 2 @@ -42,7 +42,7 @@ open class URLSessionTaskMetrics : NSObject { } } -open class URLSessionTaskTransactionMetrics: NSObject { +open class URLSessionTaskTransactionMetrics: NSObject, @unchecked Sendable { public let request: URLRequest public internal(set) var response: URLResponse? @@ -86,7 +86,7 @@ open class URLSessionTaskTransactionMetrics: NSObject { } } -public enum tls_ciphersuite_t: UInt16 { +public enum tls_ciphersuite_t: UInt16, Sendable { case AES_128_GCM_SHA256 = 4865 case AES_256_GCM_SHA384 = 4866 @@ -118,7 +118,7 @@ public enum tls_ciphersuite_t: UInt16 { case RSA_WITH_AES_256_GCM_SHA384 = 157 } -public enum tls_protocol_version_t: UInt16 { +public enum tls_protocol_version_t: UInt16, Sendable { case TLSv10 = 769 case TLSv11 = 770 case TLSv12 = 771 diff --git a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift index 1d9e3c7f54..8c4437cac1 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift @@ -26,7 +26,19 @@ import Foundation @_implementationOnly import _CFURLSessionInterface import Dispatch +// These helper functions avoid warnings about "will never be executed" code which checks the availability of the underlying libcurl features. +internal func curlInfoCAInfoSupported() -> Bool { + NS_CURL_CURLINFO_CAINFO_SUPPORTED == 1 +} + +internal func maxHostConnectionsSupported() -> Bool { + NS_CURL_MAX_HOST_CONNECTIONS_SUPPORTED == 1 +} + +internal func xferInfoFunctionSupported() -> Bool { + NS_CURL_XFERINFOFUNCTION_SUPPORTED == 1 +} /// Minimal wrapper around the [curl easy interface](https://curl.haxx.se/libcurl/c/) /// @@ -56,6 +68,9 @@ import Dispatch /// /// - Note: All code assumes that it is being called on a single thread / /// `Dispatch` only -- it is intentionally **not** thread safe. +@available(*, unavailable) +extension _EasyHandle : Sendable { } + internal final class _EasyHandle { let rawHandle = CFURLSessionEasyHandleInit() weak var delegate: _EasyHandleDelegate? @@ -209,7 +224,7 @@ extension _EasyHandle { #endif #if !os(Windows) && !os(macOS) && !os(iOS) && !os(watchOS) && !os(tvOS) - if NS_CURL_CURLINFO_CAINFO_SUPPORTED == 1 { + if curlInfoCAInfoSupported() { // Check if there is a default path; if there is, it will already // be set, so leave things alone var p: UnsafeMutablePointer? = nil @@ -624,7 +639,7 @@ fileprivate extension _EasyHandle { try! CFURLSession_easy_setopt_ptr(rawHandle, CFURLSessionOptionPROGRESSDATA, UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque())).asError() - if NS_CURL_XFERINFOFUNCTION_SUPPORTED == 1 { + if xferInfoFunctionSupported() { try! CFURLSession_easy_setopt_tc(rawHandle, CFURLSessionOptionXFERINFOFUNCTION, { (userdata: UnsafeMutableRawPointer?, dltotal :Int64, dlnow: Int64, ultotal: Int64, ulnow: Int64) -> Int32 in guard let handle = _EasyHandle.from(callbackUserData: userdata) else { return -1 } handle.updateProgressMeter(with: _Progress(totalBytesSent: ulnow, totalBytesExpectedToSend: ultotal, totalBytesReceived: dlnow, totalBytesExpectedToReceive: dltotal)) diff --git a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift index ade21f458a..67f77f4b57 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/MultiHandle.swift @@ -65,7 +65,7 @@ extension URLSession { extension URLSession._MultiHandle { func configure(with configuration: URLSession._Configuration) { - if NS_CURL_MAX_HOST_CONNECTIONS_SUPPORTED == 1 { + if maxHostConnectionsSupported() { try! CFURLSession_multi_setopt_l(rawHandle, CFURLSessionMultiOptionMAX_HOST_CONNECTIONS, numericCast(configuration.httpMaximumConnectionsPerHost)).asError() } @@ -317,6 +317,7 @@ fileprivate extension URLSession._MultiHandle { completedTransfer(forEasyHandle: handle, easyCode: code) } while true } + /// Transfer completed. func completedTransfer(forEasyHandle handle: CFURLSessionEasyHandle, easyCode: CFURLSessionEasyCode) { // Look up the matching wrapper: @@ -329,12 +330,14 @@ fileprivate extension URLSession._MultiHandle { if let errorCode = easyHandle.urlErrorCode(for: easyCode) { var errorDescription: String = "" if easyHandle.errorBuffer[0] == 0 { - let description = CFURLSessionEasyCodeDescription(easyCode)! - errorDescription = NSString(bytes: UnsafeMutableRawPointer(mutating: description), length: strlen(description), encoding: String.Encoding.utf8.rawValue)! as String + let description = CFURLSessionEasyCodeDescription(easyCode)! + errorDescription = NSString(bytes: UnsafeMutableRawPointer(mutating: description), length: strlen(description), encoding: String.Encoding.utf8.rawValue)! as String } else { - errorDescription = String(cString: easyHandle.errorBuffer) + if let firstNull = easyHandle.errorBuffer.firstIndex(of: 0), firstNull != easyHandle.errorBuffer.startIndex { + errorDescription = String(validating: easyHandle.errorBuffer[easyHandle.errorBuffer.startIndex.. @constant XMLDocument.ContentKind.text Output the string value of the document */ - public enum ContentKind : UInt { + public enum ContentKind : UInt, Sendable { case xml case xhtml diff --git a/Sources/FoundationXML/XMLNode.swift b/Sources/FoundationXML/XMLNode.swift index 035408bbd3..d2c83ffd36 100644 --- a/Sources/FoundationXML/XMLNode.swift +++ b/Sources/FoundationXML/XMLNode.swift @@ -32,6 +32,8 @@ import Foundation // Output options // NSXMLNodePrettyPrint +@available(*, unavailable) +extension XMLNode : @unchecked Sendable { } /*! @class NSXMLNode @@ -39,7 +41,7 @@ import Foundation */ open class XMLNode: NSObject, NSCopying { - public enum Kind : UInt { + public enum Kind : UInt, Sendable { case invalid case document case element @@ -55,7 +57,7 @@ open class XMLNode: NSObject, NSCopying { case notationDeclaration } - public struct Options : OptionSet { + public struct Options : OptionSet, Sendable { public let rawValue : UInt public init(rawValue: UInt) { self.rawValue = rawValue } @@ -752,16 +754,16 @@ open class XMLNode: NSObject, NSCopying { node.objectValue = value return node } - private static let _defaultNamespaces: [XMLNode] = [ + private static nonisolated(unsafe) let _defaultNamespaces: [XMLNode] = [ XMLNode.defaultNamespace(prefix: "xml", value: "http://www.w3.org/XML/1998/namespace"), XMLNode.defaultNamespace(prefix: "xml", value: "http://www.w3.org/2001/XMLSchema"), XMLNode.defaultNamespace(prefix: "xml", value: "http://www.w3.org/2001/XMLSchema-instance"), ] - internal static let _defaultNamespacesByPrefix: [String: XMLNode] = + internal static nonisolated(unsafe) let _defaultNamespacesByPrefix: [String: XMLNode] = Dictionary(XMLNode._defaultNamespaces.map { ($0.name!, $0) }, uniquingKeysWith: { old, _ in old }) - internal static let _defaultNamespacesByURI: [String: XMLNode] = + internal static nonisolated(unsafe) let _defaultNamespacesByURI: [String: XMLNode] = Dictionary(XMLNode._defaultNamespaces.map { ($0.stringValue!, $0) }, uniquingKeysWith: { old, _ in old }) open class func predefinedNamespace(forPrefix name: String) -> XMLNode? { @@ -1024,6 +1026,9 @@ open class XMLNode: NSObject, NSCopying { internal protocol _NSXMLNodeCollectionType: Collection { } +@available(*, unavailable) +extension XMLNode.Index : Sendable { } + extension XMLNode: _NSXMLNodeCollectionType { public struct Index: Comparable { diff --git a/Sources/FoundationXML/XMLParser.swift b/Sources/FoundationXML/XMLParser.swift index 228f588e88..d89d0ee1f4 100644 --- a/Sources/FoundationXML/XMLParser.swift +++ b/Sources/FoundationXML/XMLParser.swift @@ -16,7 +16,7 @@ import Foundation #endif extension XMLParser { - public enum ExternalEntityResolvingPolicy : UInt { + public enum ExternalEntityResolvingPolicy : UInt, Sendable { case never // default case noNetwork case sameOriginOnly //only applies to NSXMLParser instances initialized with -initWithContentsOfURL: @@ -393,6 +393,9 @@ internal func _structuredErrorFunc(_ interface: _CFXMLInterface, error: _CFXMLIn } } +@available(*, unavailable) +extension XMLParser : @unchecked Sendable { } + open class XMLParser : NSObject { private var _handler: _CFXMLInterfaceSAXHandler #if !os(WASI) @@ -811,7 +814,7 @@ extension XMLParser { public static let errorDomain: String = "NSXMLParserErrorDomain" // for use with NSError. // Error reporting - public enum ErrorCode : Int { + public enum ErrorCode : Int, Sendable { case internalError diff --git a/Sources/XCTest/Private/PrintObserver.swift b/Sources/XCTest/Private/PrintObserver.swift index fcce3a234b..fd19f2c383 100644 --- a/Sources/XCTest/Private/PrintObserver.swift +++ b/Sources/XCTest/Private/PrintObserver.swift @@ -11,6 +11,10 @@ // Prints test progress to stdout. // +#if canImport(Glibc) +@preconcurrency import Glibc +#endif + /// Prints textual representations of each XCTestObservation event to stdout. /// Mirrors the Apple XCTest output exactly. internal class PrintObserver: XCTestObservation { diff --git a/Sources/XCTest/Private/SourceLocation.swift b/Sources/XCTest/Private/SourceLocation.swift index 679d70924c..9c46c24dbe 100644 --- a/Sources/XCTest/Private/SourceLocation.swift +++ b/Sources/XCTest/Private/SourceLocation.swift @@ -16,7 +16,7 @@ internal struct SourceLocation { /// Represents an "unknown" source location, with default values, which may be used as a fallback /// when a real source location may not be known. - static var unknown: SourceLocation = { + static let unknown: SourceLocation = { return SourceLocation(file: "", line: 0) }() diff --git a/Sources/XCTest/Private/WaiterManager.swift b/Sources/XCTest/Private/WaiterManager.swift index f705165fe8..b37d0022b6 100644 --- a/Sources/XCTest/Private/WaiterManager.swift +++ b/Sources/XCTest/Private/WaiterManager.swift @@ -10,7 +10,7 @@ // WaiterManager.swift // -internal protocol ManageableWaiter: AnyObject, Equatable { +internal protocol ManageableWaiter: AnyObject, Equatable, Sendable { var isFinished: Bool { get } // Invoked on `XCTWaiter.subsystemQueue` diff --git a/Sources/XCTest/Public/Asynchronous/XCTNSNotificationExpectation.swift b/Sources/XCTest/Public/Asynchronous/XCTNSNotificationExpectation.swift index dc86780475..7368327bca 100644 --- a/Sources/XCTest/Public/Asynchronous/XCTNSNotificationExpectation.swift +++ b/Sources/XCTest/Public/Asynchronous/XCTNSNotificationExpectation.swift @@ -11,7 +11,7 @@ // /// Expectation subclass for waiting on a condition defined by a Foundation Notification instance. -open class XCTNSNotificationExpectation: XCTestExpectation { +open class XCTNSNotificationExpectation: XCTestExpectation, @unchecked Sendable { /// A closure to be invoked when a notification specified by the expectation is observed. /// diff --git a/Sources/XCTest/Public/Asynchronous/XCTNSPredicateExpectation.swift b/Sources/XCTest/Public/Asynchronous/XCTNSPredicateExpectation.swift index b41bca147c..13a33c186c 100644 --- a/Sources/XCTest/Public/Asynchronous/XCTNSPredicateExpectation.swift +++ b/Sources/XCTest/Public/Asynchronous/XCTNSPredicateExpectation.swift @@ -11,7 +11,7 @@ // /// Expectation subclass for waiting on a condition defined by an NSPredicate and an optional object. -open class XCTNSPredicateExpectation: XCTestExpectation { +open class XCTNSPredicateExpectation: XCTestExpectation, @unchecked Sendable { /// A closure to be invoked whenever evaluating the predicate against the object returns true. /// @@ -96,8 +96,9 @@ open class XCTNSPredicateExpectation: XCTestExpectation { } runLoop.add(timer, forMode: .default) + nonisolated(unsafe) let t = timer queue.async { - self.timer = timer + self.timer = t } } diff --git a/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift b/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift index e1270394c9..b4f2f6f70f 100644 --- a/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift +++ b/Sources/XCTest/Public/Asynchronous/XCTWaiter.swift @@ -71,7 +71,7 @@ public extension XCTWaiterDelegate { /// Waiters can be used without a delegate or any association with a test case instance. This allows test /// support libraries to provide convenience methods for waiting without having to pass test cases through /// those APIs. -open class XCTWaiter { +open class XCTWaiter: @unchecked Sendable { /// Values returned by a waiter when it completes, times out, or is interrupted due to another waiter /// higher in the call stack timing out. @@ -132,7 +132,8 @@ open class XCTWaiter { } set { dispatchPrecondition(condition: .notOnQueue(XCTWaiter.subsystemQueue)) - XCTWaiter.subsystemQueue.async { self._delegate = newValue } + nonisolated(unsafe) let nonisolatedNewValue = newValue + XCTWaiter.subsystemQueue.async { self._delegate = nonisolatedNewValue } } } @@ -283,8 +284,8 @@ open class XCTWaiter { // This function operates by blocking a background thread instead of one owned by libdispatch or by the // Swift runtime (as used by Swift concurrency.) To ensure we use a thread owned by neither subsystem, use // Foundation's Thread.detachNewThread(_:). - Thread.detachNewThread { [self] in - let result = wait(for: expectations, timeout: timeout, enforceOrder: enforceOrder, file: file, line: line) + Thread.detachNewThread { + let result = self.wait(for: expectations, timeout: timeout, enforceOrder: enforceOrder, file: file, line: line) continuation.resume(returning: result) } } @@ -398,8 +399,10 @@ open class XCTWaiter { } if let delegateBlock = delegateBlock, let delegate = _delegate { + nonisolated(unsafe) let nonisolatedDelegate = delegate + nonisolated(unsafe) let nonisolatedDelegateBlock = delegateBlock delegateQueue.async { - delegateBlock(delegate) + nonisolatedDelegateBlock(nonisolatedDelegate) } } } diff --git a/Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift b/Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift index b9935ff728..895ff1de51 100644 --- a/Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift +++ b/Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift @@ -41,7 +41,8 @@ public extension XCTestCase { /// these environments. To ensure compatibility of tests between /// swift-corelibs-xctest and Apple XCTest, it is not recommended to pass /// explicit values for `file` and `line`. - @preconcurrency @MainActor + // TODO: Having issues with runtime use of MainActor annotated tests on Linux - causes a precondition failure in a dynamic cast + //@preconcurrency @MainActor func waitForExpectations(timeout: TimeInterval, file: StaticString = #file, line: Int = #line, handler: XCWaitCompletionHandler? = nil) { precondition(Thread.isMainThread, "\(#function) must be called on the main thread") if currentWaiter != nil { diff --git a/Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift b/Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift index 16564dd9cf..28ae28217a 100644 --- a/Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift +++ b/Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift @@ -13,7 +13,7 @@ /// Expectations represent specific conditions in asynchronous testing. open class XCTestExpectation: @unchecked Sendable { - private static var currentMonotonicallyIncreasingToken: UInt64 = 0 + private static nonisolated(unsafe) var currentMonotonicallyIncreasingToken: UInt64 = 0 private static func queue_nextMonotonicallyIncreasingToken() -> UInt64 { dispatchPrecondition(condition: .onQueue(XCTWaiter.subsystemQueue)) currentMonotonicallyIncreasingToken += 1 diff --git a/Sources/XCTest/Public/XCTestCase+Performance.swift b/Sources/XCTest/Public/XCTestCase+Performance.swift index 401fb5e9c1..5dab0cfd77 100644 --- a/Sources/XCTest/Public/XCTestCase+Performance.swift +++ b/Sources/XCTest/Public/XCTestCase+Performance.swift @@ -25,7 +25,7 @@ public struct XCTPerformanceMetric : RawRepresentable, Equatable, Hashable { public extension XCTPerformanceMetric { /// Records wall clock time in seconds between `startMeasuring`/`stopMeasuring`. - static let wallClockTime = XCTPerformanceMetric(rawValue: WallClockTimeMetric.name) + static nonisolated(unsafe) let wallClockTime = XCTPerformanceMetric(rawValue: WallClockTimeMetric.name) } /// The following methods are called from within a test method to carry out diff --git a/Sources/XCTest/Public/XCTestCase.swift b/Sources/XCTest/Public/XCTestCase.swift index 4d734cd895..b6aac0ec27 100644 --- a/Sources/XCTest/Public/XCTestCase.swift +++ b/Sources/XCTest/Public/XCTestCase.swift @@ -25,7 +25,7 @@ public typealias XCTestCaseEntry = (testCaseClass: XCTestCase.Type, allTests: [( // A global pointer to the currently running test case. This is required in // order for XCTAssert functions to report failures. -internal var XCTCurrentTestCase: XCTestCase? +internal nonisolated(unsafe) var XCTCurrentTestCase: XCTestCase? /// An instance of this class represents an individual test case which can be /// run by the framework. This class is normally subclassed and extended with @@ -48,7 +48,8 @@ open class XCTestCase: XCTest { return 1 } - @MainActor + // TODO: Having issues with runtime use of MainActor annotated tests on Linux - causes a precondition failure in a dynamic cast + //@MainActor internal var currentWaiter: XCTWaiter? /// The set of expectations made upon this test case. @@ -228,8 +229,9 @@ open class XCTestCase: XCTest { do { if #available(macOS 12.0, *) { + nonisolated(unsafe) let nonisolatedSelf = self try awaitUsingExpectation { - try await self.setUp() + try await nonisolatedSelf.setUp() } } } catch { @@ -274,8 +276,9 @@ open class XCTestCase: XCTest { do { if #available(macOS 12.0, *) { + nonisolated(unsafe) let nonisolatedSelf = self try awaitUsingExpectation { - try await self.tearDown() + try await nonisolatedSelf.tearDown() } } } catch { @@ -340,15 +343,18 @@ func awaitUsingExpectation( let expectation = XCTestExpectation(description: "async test completion") let thrownErrorWrapper = ThrownErrorWrapper() - Task { + nonisolated(unsafe) let nonisolatedClosure = closure + let work : @Sendable () async -> () = { defer { expectation.fulfill() } do { - try await closure() + try await nonisolatedClosure() } catch { thrownErrorWrapper.error = error } } + + Task(priority: nil, operation: work) _ = XCTWaiter.wait(for: [expectation], timeout: asyncTestTimeout) diff --git a/Sources/XCTest/Public/XCTestObservationCenter.swift b/Sources/XCTest/Public/XCTestObservationCenter.swift index 540956dd5c..38c9d7249f 100644 --- a/Sources/XCTest/Public/XCTestObservationCenter.swift +++ b/Sources/XCTest/Public/XCTestObservationCenter.swift @@ -11,7 +11,7 @@ // Notification center for test run progress events. // -private let _sharedCenter: XCTestObservationCenter = XCTestObservationCenter() +private nonisolated(unsafe) let _sharedCenter: XCTestObservationCenter = XCTestObservationCenter() /// Provides a registry for objects wishing to be informed about progress /// during the course of a test run. Observers must implement the diff --git a/Sources/_CFXMLInterface/CFXMLInterface.c b/Sources/_CFXMLInterface/CFXMLInterface.c index 379acbb4d1..1c54de3ec9 100644 --- a/Sources/_CFXMLInterface/CFXMLInterface.c +++ b/Sources/_CFXMLInterface/CFXMLInterface.c @@ -36,76 +36,76 @@ CF_INLINE struct _NSCFXMLBridgeStrong __CFSwiftXMLParserBridgeGetStronglyTyped() libxml2 does not have nullability annotations and does not import well into swift when given potentially differing versions of the library that might be installed on the host operating system. This is a simple C wrapper to simplify some of that interface layer to libxml2. */ -CFIndex _kCFXMLInterfaceRecover = XML_PARSE_RECOVER; -CFIndex _kCFXMLInterfaceNoEnt = XML_PARSE_NOENT; -CFIndex _kCFXMLInterfaceDTDLoad = XML_PARSE_DTDLOAD; -CFIndex _kCFXMLInterfaceDTDAttr = XML_PARSE_DTDATTR; -CFIndex _kCFXMLInterfaceDTDValid = XML_PARSE_DTDVALID; -CFIndex _kCFXMLInterfaceNoError = XML_PARSE_NOERROR; -CFIndex _kCFXMLInterfaceNoWarning = XML_PARSE_NOWARNING; -CFIndex _kCFXMLInterfacePedantic = XML_PARSE_PEDANTIC; -CFIndex _kCFXMLInterfaceNoBlanks = XML_PARSE_NOBLANKS; -CFIndex _kCFXMLInterfaceSAX1 = XML_PARSE_SAX1; -CFIndex _kCFXMLInterfaceXInclude = XML_PARSE_XINCLUDE; -CFIndex _kCFXMLInterfaceNoNet = XML_PARSE_NONET; -CFIndex _kCFXMLInterfaceNoDict = XML_PARSE_NODICT; -CFIndex _kCFXMLInterfaceNSClean = XML_PARSE_NSCLEAN; -CFIndex _kCFXMLInterfaceNoCdata = XML_PARSE_NOCDATA; -CFIndex _kCFXMLInterfaceNoXIncnode = XML_PARSE_NOXINCNODE; -CFIndex _kCFXMLInterfaceCompact = XML_PARSE_COMPACT; -CFIndex _kCFXMLInterfaceOld10 = XML_PARSE_OLD10; -CFIndex _kCFXMLInterfaceNoBasefix = XML_PARSE_NOBASEFIX; -CFIndex _kCFXMLInterfaceHuge = XML_PARSE_HUGE; -CFIndex _kCFXMLInterfaceOldsax = XML_PARSE_OLDSAX; -CFIndex _kCFXMLInterfaceIgnoreEnc = XML_PARSE_IGNORE_ENC; -CFIndex _kCFXMLInterfaceBigLines = XML_PARSE_BIG_LINES; - -CFIndex _kCFXMLTypeInvalid = 0; -CFIndex _kCFXMLTypeDocument = XML_DOCUMENT_NODE; -CFIndex _kCFXMLTypeElement = XML_ELEMENT_NODE; -CFIndex _kCFXMLTypeAttribute = XML_ATTRIBUTE_NODE; -CFIndex _kCFXMLTypeProcessingInstruction = XML_PI_NODE; -CFIndex _kCFXMLTypeComment = XML_COMMENT_NODE; -CFIndex _kCFXMLTypeText = XML_TEXT_NODE; -CFIndex _kCFXMLTypeCDataSection = XML_CDATA_SECTION_NODE; -CFIndex _kCFXMLTypeDTD = XML_DTD_NODE; -CFIndex _kCFXMLDocTypeHTML = XML_DOC_HTML; -CFIndex _kCFXMLTypeNamespace = 22; // libxml2 does not define namespaces as nodes, so we have to fake it - -CFIndex _kCFXMLDTDNodeTypeEntity = XML_ENTITY_DECL; -CFIndex _kCFXMLDTDNodeTypeAttribute = XML_ATTRIBUTE_DECL; -CFIndex _kCFXMLDTDNodeTypeElement = XML_ELEMENT_DECL; -CFIndex _kCFXMLDTDNodeTypeNotation = XML_NOTATION_NODE; - -CFIndex _kCFXMLDTDNodeElementTypeUndefined = XML_ELEMENT_TYPE_UNDEFINED; -CFIndex _kCFXMLDTDNodeElementTypeEmpty = XML_ELEMENT_TYPE_EMPTY; -CFIndex _kCFXMLDTDNodeElementTypeAny = XML_ELEMENT_TYPE_ANY; -CFIndex _kCFXMLDTDNodeElementTypeMixed = XML_ELEMENT_TYPE_MIXED; -CFIndex _kCFXMLDTDNodeElementTypeElement = XML_ELEMENT_TYPE_ELEMENT; - -CFIndex _kCFXMLDTDNodeEntityTypeInternalGeneral = XML_INTERNAL_GENERAL_ENTITY; -CFIndex _kCFXMLDTDNodeEntityTypeExternalGeneralParsed = XML_EXTERNAL_GENERAL_PARSED_ENTITY; -CFIndex _kCFXMLDTDNodeEntityTypeExternalGeneralUnparsed = XML_EXTERNAL_GENERAL_UNPARSED_ENTITY; -CFIndex _kCFXMLDTDNodeEntityTypeInternalParameter = XML_INTERNAL_PARAMETER_ENTITY; -CFIndex _kCFXMLDTDNodeEntityTypeExternalParameter = XML_EXTERNAL_PARAMETER_ENTITY; -CFIndex _kCFXMLDTDNodeEntityTypeInternalPredefined = XML_INTERNAL_PREDEFINED_ENTITY; - -CFIndex _kCFXMLDTDNodeAttributeTypeCData = XML_ATTRIBUTE_CDATA; -CFIndex _kCFXMLDTDNodeAttributeTypeID = XML_ATTRIBUTE_ID; -CFIndex _kCFXMLDTDNodeAttributeTypeIDRef = XML_ATTRIBUTE_IDREF; -CFIndex _kCFXMLDTDNodeAttributeTypeIDRefs = XML_ATTRIBUTE_IDREFS; -CFIndex _kCFXMLDTDNodeAttributeTypeEntity = XML_ATTRIBUTE_ENTITY; -CFIndex _kCFXMLDTDNodeAttributeTypeEntities = XML_ATTRIBUTE_ENTITIES; -CFIndex _kCFXMLDTDNodeAttributeTypeNMToken = XML_ATTRIBUTE_NMTOKEN; -CFIndex _kCFXMLDTDNodeAttributeTypeNMTokens = XML_ATTRIBUTE_NMTOKENS; -CFIndex _kCFXMLDTDNodeAttributeTypeEnumeration = XML_ATTRIBUTE_ENUMERATION; -CFIndex _kCFXMLDTDNodeAttributeTypeNotation = XML_ATTRIBUTE_NOTATION; - -CFIndex _kCFXMLNodePreserveWhitespace = 1 << 25; -CFIndex _kCFXMLNodeCompactEmptyElement = 1 << 2; -CFIndex _kCFXMLNodePrettyPrint = 1 << 17; -CFIndex _kCFXMLNodeLoadExternalEntitiesNever = 1 << 19; -CFIndex _kCFXMLNodeLoadExternalEntitiesAlways = 1 << 14; +const CFIndex _kCFXMLInterfaceRecover = XML_PARSE_RECOVER; +const CFIndex _kCFXMLInterfaceNoEnt = XML_PARSE_NOENT; +const CFIndex _kCFXMLInterfaceDTDLoad = XML_PARSE_DTDLOAD; +const CFIndex _kCFXMLInterfaceDTDAttr = XML_PARSE_DTDATTR; +const CFIndex _kCFXMLInterfaceDTDValid = XML_PARSE_DTDVALID; +const CFIndex _kCFXMLInterfaceNoError = XML_PARSE_NOERROR; +const CFIndex _kCFXMLInterfaceNoWarning = XML_PARSE_NOWARNING; +const CFIndex _kCFXMLInterfacePedantic = XML_PARSE_PEDANTIC; +const CFIndex _kCFXMLInterfaceNoBlanks = XML_PARSE_NOBLANKS; +const CFIndex _kCFXMLInterfaceSAX1 = XML_PARSE_SAX1; +const CFIndex _kCFXMLInterfaceXInclude = XML_PARSE_XINCLUDE; +const CFIndex _kCFXMLInterfaceNoNet = XML_PARSE_NONET; +const CFIndex _kCFXMLInterfaceNoDict = XML_PARSE_NODICT; +const CFIndex _kCFXMLInterfaceNSClean = XML_PARSE_NSCLEAN; +const CFIndex _kCFXMLInterfaceNoCdata = XML_PARSE_NOCDATA; +const CFIndex _kCFXMLInterfaceNoXIncnode = XML_PARSE_NOXINCNODE; +const CFIndex _kCFXMLInterfaceCompact = XML_PARSE_COMPACT; +const CFIndex _kCFXMLInterfaceOld10 = XML_PARSE_OLD10; +const CFIndex _kCFXMLInterfaceNoBasefix = XML_PARSE_NOBASEFIX; +const CFIndex _kCFXMLInterfaceHuge = XML_PARSE_HUGE; +const CFIndex _kCFXMLInterfaceOldsax = XML_PARSE_OLDSAX; +const CFIndex _kCFXMLInterfaceIgnoreEnc = XML_PARSE_IGNORE_ENC; +const CFIndex _kCFXMLInterfaceBigLines = XML_PARSE_BIG_LINES; + +const CFIndex _kCFXMLTypeInvalid = 0; +const CFIndex _kCFXMLTypeDocument = XML_DOCUMENT_NODE; +const CFIndex _kCFXMLTypeElement = XML_ELEMENT_NODE; +const CFIndex _kCFXMLTypeAttribute = XML_ATTRIBUTE_NODE; +const CFIndex _kCFXMLTypeProcessingInstruction = XML_PI_NODE; +const CFIndex _kCFXMLTypeComment = XML_COMMENT_NODE; +const CFIndex _kCFXMLTypeText = XML_TEXT_NODE; +const CFIndex _kCFXMLTypeCDataSection = XML_CDATA_SECTION_NODE; +const CFIndex _kCFXMLTypeDTD = XML_DTD_NODE; +const CFIndex _kCFXMLDocTypeHTML = XML_DOC_HTML; +const CFIndex _kCFXMLTypeNamespace = 22; // libxml2 does not define namespaces as nodes, so we have to fake it + +const CFIndex _kCFXMLDTDNodeTypeEntity = XML_ENTITY_DECL; +const CFIndex _kCFXMLDTDNodeTypeAttribute = XML_ATTRIBUTE_DECL; +const CFIndex _kCFXMLDTDNodeTypeElement = XML_ELEMENT_DECL; +const CFIndex _kCFXMLDTDNodeTypeNotation = XML_NOTATION_NODE; + +const CFIndex _kCFXMLDTDNodeElementTypeUndefined = XML_ELEMENT_TYPE_UNDEFINED; +const CFIndex _kCFXMLDTDNodeElementTypeEmpty = XML_ELEMENT_TYPE_EMPTY; +const CFIndex _kCFXMLDTDNodeElementTypeAny = XML_ELEMENT_TYPE_ANY; +const CFIndex _kCFXMLDTDNodeElementTypeMixed = XML_ELEMENT_TYPE_MIXED; +const CFIndex _kCFXMLDTDNodeElementTypeElement = XML_ELEMENT_TYPE_ELEMENT; + +const CFIndex _kCFXMLDTDNodeEntityTypeInternalGeneral = XML_INTERNAL_GENERAL_ENTITY; +const CFIndex _kCFXMLDTDNodeEntityTypeExternalGeneralParsed = XML_EXTERNAL_GENERAL_PARSED_ENTITY; +const CFIndex _kCFXMLDTDNodeEntityTypeExternalGeneralUnparsed = XML_EXTERNAL_GENERAL_UNPARSED_ENTITY; +const CFIndex _kCFXMLDTDNodeEntityTypeInternalParameter = XML_INTERNAL_PARAMETER_ENTITY; +const CFIndex _kCFXMLDTDNodeEntityTypeExternalParameter = XML_EXTERNAL_PARAMETER_ENTITY; +const CFIndex _kCFXMLDTDNodeEntityTypeInternalPredefined = XML_INTERNAL_PREDEFINED_ENTITY; + +const CFIndex _kCFXMLDTDNodeAttributeTypeCData = XML_ATTRIBUTE_CDATA; +const CFIndex _kCFXMLDTDNodeAttributeTypeID = XML_ATTRIBUTE_ID; +const CFIndex _kCFXMLDTDNodeAttributeTypeIDRef = XML_ATTRIBUTE_IDREF; +const CFIndex _kCFXMLDTDNodeAttributeTypeIDRefs = XML_ATTRIBUTE_IDREFS; +const CFIndex _kCFXMLDTDNodeAttributeTypeEntity = XML_ATTRIBUTE_ENTITY; +const CFIndex _kCFXMLDTDNodeAttributeTypeEntities = XML_ATTRIBUTE_ENTITIES; +const CFIndex _kCFXMLDTDNodeAttributeTypeNMToken = XML_ATTRIBUTE_NMTOKEN; +const CFIndex _kCFXMLDTDNodeAttributeTypeNMTokens = XML_ATTRIBUTE_NMTOKENS; +const CFIndex _kCFXMLDTDNodeAttributeTypeEnumeration = XML_ATTRIBUTE_ENUMERATION; +const CFIndex _kCFXMLDTDNodeAttributeTypeNotation = XML_ATTRIBUTE_NOTATION; + +const CFIndex _kCFXMLNodePreserveWhitespace = 1 << 25; +const CFIndex _kCFXMLNodeCompactEmptyElement = 1 << 2; +const CFIndex _kCFXMLNodePrettyPrint = 1 << 17; +const CFIndex _kCFXMLNodeLoadExternalEntitiesNever = 1 << 19; +const CFIndex _kCFXMLNodeLoadExternalEntitiesAlways = 1 << 14; // We define this structure because libxml2's "notation" node does not contain the fields // nearly all other libxml2 node fields contain, that we use extensively. diff --git a/Sources/_CFXMLInterface/include/CFXMLInterface.h b/Sources/_CFXMLInterface/include/CFXMLInterface.h index b51004517e..ebfb3b3fdc 100644 --- a/Sources/_CFXMLInterface/include/CFXMLInterface.h +++ b/Sources/_CFXMLInterface/include/CFXMLInterface.h @@ -25,70 +25,70 @@ CF_IMPLICIT_BRIDGING_ENABLED CF_ASSUME_NONNULL_BEGIN CF_EXTERN_C_BEGIN -extern CFIndex _kCFXMLInterfaceRecover; -extern CFIndex _kCFXMLInterfaceNoEnt; -extern CFIndex _kCFXMLInterfaceDTDLoad; -extern CFIndex _kCFXMLInterfaceDTDAttr; -extern CFIndex _kCFXMLInterfaceDTDValid; -extern CFIndex _kCFXMLInterfaceNoError; -extern CFIndex _kCFXMLInterfaceNoWarning; -extern CFIndex _kCFXMLInterfacePedantic; -extern CFIndex _kCFXMLInterfaceNoBlanks; -extern CFIndex _kCFXMLInterfaceSAX1; -extern CFIndex _kCFXMLInterfaceXInclude; -extern CFIndex _kCFXMLInterfaceNoNet; -extern CFIndex _kCFXMLInterfaceNoDict; -extern CFIndex _kCFXMLInterfaceNSClean; -extern CFIndex _kCFXMLInterfaceNoCdata; -extern CFIndex _kCFXMLInterfaceNoXIncnode; -extern CFIndex _kCFXMLInterfaceCompact; -extern CFIndex _kCFXMLInterfaceOld10; -extern CFIndex _kCFXMLInterfaceNoBasefix; -extern CFIndex _kCFXMLInterfaceHuge; -extern CFIndex _kCFXMLInterfaceOldsax; -extern CFIndex _kCFXMLInterfaceIgnoreEnc; -extern CFIndex _kCFXMLInterfaceBigLines; - -extern CFIndex _kCFXMLTypeInvalid; -extern CFIndex _kCFXMLTypeDocument; -extern CFIndex _kCFXMLTypeElement; -extern CFIndex _kCFXMLTypeAttribute; -extern CFIndex _kCFXMLTypeProcessingInstruction; -extern CFIndex _kCFXMLTypeComment; -extern CFIndex _kCFXMLTypeText; -extern CFIndex _kCFXMLTypeCDataSection; -extern CFIndex _kCFXMLTypeDTD; -extern CFIndex _kCFXMLDocTypeHTML; -extern CFIndex _kCFXMLTypeNamespace; - -extern CFIndex _kCFXMLDTDNodeTypeEntity; -extern CFIndex _kCFXMLDTDNodeTypeAttribute; -extern CFIndex _kCFXMLDTDNodeTypeElement; -extern CFIndex _kCFXMLDTDNodeTypeNotation; - -extern CFIndex _kCFXMLDTDNodeElementTypeUndefined; -extern CFIndex _kCFXMLDTDNodeElementTypeEmpty; -extern CFIndex _kCFXMLDTDNodeElementTypeAny; -extern CFIndex _kCFXMLDTDNodeElementTypeMixed; -extern CFIndex _kCFXMLDTDNodeElementTypeElement; - -extern CFIndex _kCFXMLDTDNodeEntityTypeInternalGeneral; -extern CFIndex _kCFXMLDTDNodeEntityTypeExternalGeneralParsed; -extern CFIndex _kCFXMLDTDNodeEntityTypeExternalGeneralUnparsed; -extern CFIndex _kCFXMLDTDNodeEntityTypeInternalParameter; -extern CFIndex _kCFXMLDTDNodeEntityTypeExternalParameter; -extern CFIndex _kCFXMLDTDNodeEntityTypeInternalPredefined; - -extern CFIndex _kCFXMLDTDNodeAttributeTypeCData; -extern CFIndex _kCFXMLDTDNodeAttributeTypeID; -extern CFIndex _kCFXMLDTDNodeAttributeTypeIDRef; -extern CFIndex _kCFXMLDTDNodeAttributeTypeIDRefs; -extern CFIndex _kCFXMLDTDNodeAttributeTypeEntity; -extern CFIndex _kCFXMLDTDNodeAttributeTypeEntities; -extern CFIndex _kCFXMLDTDNodeAttributeTypeNMToken; -extern CFIndex _kCFXMLDTDNodeAttributeTypeNMTokens; -extern CFIndex _kCFXMLDTDNodeAttributeTypeEnumeration; -extern CFIndex _kCFXMLDTDNodeAttributeTypeNotation; +extern const CFIndex _kCFXMLInterfaceRecover; +extern const CFIndex _kCFXMLInterfaceNoEnt; +extern const CFIndex _kCFXMLInterfaceDTDLoad; +extern const CFIndex _kCFXMLInterfaceDTDAttr; +extern const CFIndex _kCFXMLInterfaceDTDValid; +extern const CFIndex _kCFXMLInterfaceNoError; +extern const CFIndex _kCFXMLInterfaceNoWarning; +extern const CFIndex _kCFXMLInterfacePedantic; +extern const CFIndex _kCFXMLInterfaceNoBlanks; +extern const CFIndex _kCFXMLInterfaceSAX1; +extern const CFIndex _kCFXMLInterfaceXInclude; +extern const CFIndex _kCFXMLInterfaceNoNet; +extern const CFIndex _kCFXMLInterfaceNoDict; +extern const CFIndex _kCFXMLInterfaceNSClean; +extern const CFIndex _kCFXMLInterfaceNoCdata; +extern const CFIndex _kCFXMLInterfaceNoXIncnode; +extern const CFIndex _kCFXMLInterfaceCompact; +extern const CFIndex _kCFXMLInterfaceOld10; +extern const CFIndex _kCFXMLInterfaceNoBasefix; +extern const CFIndex _kCFXMLInterfaceHuge; +extern const CFIndex _kCFXMLInterfaceOldsax; +extern const CFIndex _kCFXMLInterfaceIgnoreEnc; +extern const CFIndex _kCFXMLInterfaceBigLines; + +extern const CFIndex _kCFXMLTypeInvalid; +extern const CFIndex _kCFXMLTypeDocument; +extern const CFIndex _kCFXMLTypeElement; +extern const CFIndex _kCFXMLTypeAttribute; +extern const CFIndex _kCFXMLTypeProcessingInstruction; +extern const CFIndex _kCFXMLTypeComment; +extern const CFIndex _kCFXMLTypeText; +extern const CFIndex _kCFXMLTypeCDataSection; +extern const CFIndex _kCFXMLTypeDTD; +extern const CFIndex _kCFXMLDocTypeHTML; +extern const CFIndex _kCFXMLTypeNamespace; + +extern const CFIndex _kCFXMLDTDNodeTypeEntity; +extern const CFIndex _kCFXMLDTDNodeTypeAttribute; +extern const CFIndex _kCFXMLDTDNodeTypeElement; +extern const CFIndex _kCFXMLDTDNodeTypeNotation; + +extern const CFIndex _kCFXMLDTDNodeElementTypeUndefined; +extern const CFIndex _kCFXMLDTDNodeElementTypeEmpty; +extern const CFIndex _kCFXMLDTDNodeElementTypeAny; +extern const CFIndex _kCFXMLDTDNodeElementTypeMixed; +extern const CFIndex _kCFXMLDTDNodeElementTypeElement; + +extern const CFIndex _kCFXMLDTDNodeEntityTypeInternalGeneral; +extern const CFIndex _kCFXMLDTDNodeEntityTypeExternalGeneralParsed; +extern const CFIndex _kCFXMLDTDNodeEntityTypeExternalGeneralUnparsed; +extern const CFIndex _kCFXMLDTDNodeEntityTypeInternalParameter; +extern const CFIndex _kCFXMLDTDNodeEntityTypeExternalParameter; +extern const CFIndex _kCFXMLDTDNodeEntityTypeInternalPredefined; + +extern const CFIndex _kCFXMLDTDNodeAttributeTypeCData; +extern const CFIndex _kCFXMLDTDNodeAttributeTypeID; +extern const CFIndex _kCFXMLDTDNodeAttributeTypeIDRef; +extern const CFIndex _kCFXMLDTDNodeAttributeTypeIDRefs; +extern const CFIndex _kCFXMLDTDNodeAttributeTypeEntity; +extern const CFIndex _kCFXMLDTDNodeAttributeTypeEntities; +extern const CFIndex _kCFXMLDTDNodeAttributeTypeNMToken; +extern const CFIndex _kCFXMLDTDNodeAttributeTypeNMTokens; +extern const CFIndex _kCFXMLDTDNodeAttributeTypeEnumeration; +extern const CFIndex _kCFXMLDTDNodeAttributeTypeNotation; typedef struct _xmlParserInput *_CFXMLInterfaceParserInput; typedef struct _xmlParserCtxt *_CFXMLInterfaceParserContext; @@ -327,7 +327,7 @@ struct _NSXMLParserBridge { const unsigned char *SystemID); }; -CF_EXPORT struct _NSXMLParserBridge __CFSwiftXMLParserBridge; +CF_EXPORT struct _NSXMLParserBridge __CFSwiftXMLParserBridge __attribute__((swift_attr("nonisolated(unsafe)"))); CF_EXTERN_C_END diff --git a/Tests/Foundation/FTPServer.swift b/Tests/Foundation/FTPServer.swift index 8bb4a9d779..bc3753baae 100644 --- a/Tests/Foundation/FTPServer.swift +++ b/Tests/Foundation/FTPServer.swift @@ -17,14 +17,14 @@ import Dispatch import Darwin #endif -public class ServerSemaphore { +final class ServerSemaphore : Sendable { let dispatchSemaphore = DispatchSemaphore(value: 0) - public func wait(timeout: DispatchTime) -> DispatchTimeoutResult { + func wait(timeout: DispatchTime) -> DispatchTimeoutResult { return dispatchSemaphore.wait(timeout: timeout) } - public func signal() { + func signal() { dispatchSemaphore.signal() } } @@ -75,15 +75,16 @@ class _FTPSocket { let sa1 = createSockaddr(port+1) socketAddress1.initialize(to: sa1) try socketAddress1.withMemoryRebound(to: sockaddr.self, capacity: MemoryLayout.size, { - let addr = UnsafeMutablePointer($0) + nonisolated(unsafe) let addr = UnsafeMutablePointer($0) _ = try attempt("bind", valid: isZero, bind(dataSocket, addr, socklen_t(MemoryLayout.size))) - var sockLen = socklen_t(MemoryLayout.size) _ = try attempt("listen", valid: isZero, listen(dataSocket, SOMAXCONN)) // Open the data port asynchronously. Port should be opened before ESPV header communication. + nonisolated(unsafe) let nonisolatedSelf = self DispatchQueue(label: "delay").async { do { - self.dataSocket = try self.attempt("accept", valid: self.isNotMinusOne, accept(self.dataSocket, addr, &sockLen)) - self.dataSocketPort = sa1.sin_port + var sockLen = socklen_t(MemoryLayout.size) + nonisolatedSelf.dataSocket = try nonisolatedSelf.attempt("accept", valid: nonisolatedSelf.isNotMinusOne, accept(nonisolatedSelf.dataSocket, addr, &sockLen)) + nonisolatedSelf.dataSocketPort = sa1.sin_port } catch { NSLog("Could not open data port.") } @@ -160,20 +161,20 @@ class _FTPServer { socket = try _FTPSocket(port: port) } - public class func create(port: UInt16) throws -> _FTPServer { + class func create(port: UInt16) throws -> _FTPServer { return try _FTPServer(port: port) } - public func listen(notify: ServerSemaphore) throws { + func listen(notify: ServerSemaphore) throws { try socket.acceptConnection(notify: notify) } - public func stop() { + func stop() { socket.shutdown() } // parse header information and respond accordingly - public func parseHeaderData() throws { + func parseHeaderData() throws { let saveData = """ FTP implementation to test FTP upload, download and data tasks. Instead of sending a file, @@ -222,29 +223,29 @@ class _FTPServer { } } - public func respondWithRawData(with string: String) throws { + func respondWithRawData(with string: String) throws { try self.socket.writeRawData(string.data(using: String.Encoding.utf8)!) } - public func respondWithData(with data: Data) throws -> Int32 { + func respondWithData(with data: Data) throws -> Int32 { return try self.socket.writeRawData(socket: data) } - public func readDataOnDataSocket() throws -> String { + func readDataOnDataSocket() throws -> String { return try self.socket.readDataOnDataSocket() } } -public class TestFTPURLSessionServer { +class TestFTPURLSessionServer { let ftpServer: _FTPServer - public init (port: UInt16) throws { + init (port: UInt16) throws { ftpServer = try _FTPServer.create(port: port) } - public func start(started: ServerSemaphore) throws { + func start(started: ServerSemaphore) throws { started.signal() try ftpServer.listen(notify: started) } - public func parseHeaderAndRespond() throws { + func parseHeaderAndRespond() throws { try ftpServer.parseHeaderData() } @@ -258,11 +259,11 @@ public class TestFTPURLSessionServer { } class LoopbackFTPServerTest: XCTestCase { - static var serverPort: Int = -1 + nonisolated(unsafe) static var serverPort: Int = -1 override class func setUp() { super.setUp() - func runServer(with condition: ServerSemaphore, + @Sendable func runServer(with condition: ServerSemaphore, startDelay: TimeInterval? = nil, sendDelay: TimeInterval? = nil, bodyChunks: Int? = nil) throws { let start = 21961 // 21961 diff --git a/Tests/Foundation/FixtureValues.swift b/Tests/Foundation/FixtureValues.swift index 0a8799f369..86f329c03f 100644 --- a/Tests/Foundation/FixtureValues.swift +++ b/Tests/Foundation/FixtureValues.swift @@ -28,7 +28,7 @@ extension Calendar { } enum Fixtures { - static let mutableAttributedString = TypedFixture("NSMutableAttributedString") { + static nonisolated(unsafe) let mutableAttributedString = TypedFixture("NSMutableAttributedString") { let string = NSMutableAttributedString(string: "0123456789") // Should have: .xyyzzxyx. @@ -53,17 +53,17 @@ enum Fixtures { return string } - static let attributedString = TypedFixture("NSAttributedString") { + static nonisolated(unsafe) let attributedString = TypedFixture("NSAttributedString") { return NSAttributedString(attributedString: try Fixtures.mutableAttributedString.make()) } // ===== ByteCountFormatter ===== - static let byteCountFormatterDefault = TypedFixture("ByteCountFormatter-Default") { + static nonisolated(unsafe) let byteCountFormatterDefault = TypedFixture("ByteCountFormatter-Default") { return ByteCountFormatter() } - static let byteCountFormatterAllFieldsSet = TypedFixture("ByteCountFormatter-AllFieldsSet") { + static nonisolated(unsafe) let byteCountFormatterAllFieldsSet = TypedFixture("ByteCountFormatter-AllFieldsSet") { let f = ByteCountFormatter() f.allowedUnits = [.useBytes, .useKB] @@ -83,7 +83,7 @@ enum Fixtures { // ===== DateIntervalFormatter ===== - static let dateIntervalFormatterDefault = TypedFixture("DateIntervalFormatter-Default") { + static nonisolated(unsafe) let dateIntervalFormatterDefault = TypedFixture("DateIntervalFormatter-Default") { let dif = DateIntervalFormatter() let calendar = Calendar.neutral @@ -95,7 +95,7 @@ enum Fixtures { return dif } - static let dateIntervalFormatterValuesSetWithoutTemplate = TypedFixture("DateIntervalFormatter-ValuesSetWithoutTemplate") { + static nonisolated(unsafe) let dateIntervalFormatterValuesSetWithoutTemplate = TypedFixture("DateIntervalFormatter-ValuesSetWithoutTemplate") { let dif = DateIntervalFormatter() var calendar = Calendar.neutral @@ -111,7 +111,7 @@ enum Fixtures { return dif } - static let dateIntervalFormatterValuesSetWithTemplate = TypedFixture("DateIntervalFormatter-ValuesSetWithTemplate") { + static nonisolated(unsafe) let dateIntervalFormatterValuesSetWithTemplate = TypedFixture("DateIntervalFormatter-ValuesSetWithTemplate") { let dif = DateIntervalFormatter() var calendar = Calendar.neutral @@ -128,14 +128,14 @@ enum Fixtures { // ===== ISO8601DateFormatter ===== - static let iso8601FormatterDefault = TypedFixture("ISO8601DateFormatter-Default") { + static nonisolated(unsafe) let iso8601FormatterDefault = TypedFixture("ISO8601DateFormatter-Default") { let idf = ISO8601DateFormatter() idf.timeZone = Calendar.neutral.timeZone return idf } - static let iso8601FormatterOptionsSet = TypedFixture("ISO8601DateFormatter-OptionsSet") { + static nonisolated(unsafe) let iso8601FormatterOptionsSet = TypedFixture("ISO8601DateFormatter-OptionsSet") { let idf = ISO8601DateFormatter() idf.timeZone = Calendar.neutral.timeZone @@ -146,7 +146,7 @@ enum Fixtures { // ===== NSTextCheckingResult ===== - static let textCheckingResultSimpleRegex = TypedFixture("NSTextCheckingResult-SimpleRegex") { + static nonisolated(unsafe) let textCheckingResultSimpleRegex = TypedFixture("NSTextCheckingResult-SimpleRegex") { let string = "aaa" let regexp = try NSRegularExpression(pattern: "aaa", options: []) let result = try XCTUnwrap(regexp.matches(in: string, range: NSRange(string.startIndex ..< string.endIndex, in: string)).first) @@ -155,7 +155,7 @@ enum Fixtures { } - static let textCheckingResultExtendedRegex = TypedFixture("NSTextCheckingResult-ExtendedRegex") { + static nonisolated(unsafe) let textCheckingResultExtendedRegex = TypedFixture("NSTextCheckingResult-ExtendedRegex") { let string = "aaaaaa" let regexp = try NSRegularExpression(pattern: "a(a(a(a(a(a)))))", options: []) let result = try XCTUnwrap(regexp.matches(in: string, range: NSRange(string.startIndex ..< string.endIndex, in: string)).first) @@ -163,7 +163,7 @@ enum Fixtures { return result } - static let textCheckingResultComplexRegex = TypedFixture("NSTextCheckingResult-ComplexRegex") { + static nonisolated(unsafe) let textCheckingResultComplexRegex = TypedFixture("NSTextCheckingResult-ComplexRegex") { let string = "aaaaaaaaa" let regexp = try NSRegularExpression(pattern: "a(a(a(a(a(a(a(a(a))))))))", options: []) let result = try XCTUnwrap(regexp.matches(in: string, range: NSRange(string.startIndex ..< string.endIndex, in: string)).first) @@ -173,15 +173,15 @@ enum Fixtures { // ===== NSIndexSet ===== - static let indexSetEmpty = TypedFixture("NSIndexSet-Empty") { + static nonisolated(unsafe) let indexSetEmpty = TypedFixture("NSIndexSet-Empty") { return NSIndexSet(indexesIn: NSMakeRange(0, 0)) } - static let indexSetOneRange = TypedFixture("NSIndexSet-OneRange") { + static nonisolated(unsafe) let indexSetOneRange = TypedFixture("NSIndexSet-OneRange") { return NSIndexSet(indexesIn: NSMakeRange(0, 50)) } - static let indexSetManyRanges = TypedFixture("NSIndexSet-ManyRanges") { + static nonisolated(unsafe) let indexSetManyRanges = TypedFixture("NSIndexSet-ManyRanges") { let indexSet = NSMutableIndexSet() indexSet.add(in: NSMakeRange(0, 50)) indexSet.add(in: NSMakeRange(100, 50)) @@ -190,29 +190,29 @@ enum Fixtures { return indexSet.copy() as! NSIndexSet } - static let mutableIndexSetEmpty = TypedFixture("NSMutableIndexSet-Empty") { + static nonisolated(unsafe) let mutableIndexSetEmpty = TypedFixture("NSMutableIndexSet-Empty") { return (try Fixtures.indexSetEmpty.make()).mutableCopy() as! NSMutableIndexSet } - static let mutableIndexSetOneRange = TypedFixture("NSMutableIndexSet-OneRange") { + static nonisolated(unsafe) let mutableIndexSetOneRange = TypedFixture("NSMutableIndexSet-OneRange") { return (try Fixtures.indexSetOneRange.make()).mutableCopy() as! NSMutableIndexSet } - static let mutableIndexSetManyRanges = TypedFixture("NSMutableIndexSet-ManyRanges") { + static nonisolated(unsafe) let mutableIndexSetManyRanges = TypedFixture("NSMutableIndexSet-ManyRanges") { return (try Fixtures.indexSetManyRanges.make()).mutableCopy() as! NSMutableIndexSet } // ===== NSIndexPath ===== - static let indexPathEmpty = TypedFixture("NSIndexPath-Empty") { + static nonisolated(unsafe) let indexPathEmpty = TypedFixture("NSIndexPath-Empty") { return NSIndexPath() } - static let indexPathOneIndex = TypedFixture("NSIndexPath-OneIndex") { + static nonisolated(unsafe) let indexPathOneIndex = TypedFixture("NSIndexPath-OneIndex") { return NSIndexPath(index: 52) } - static let indexPathManyIndices = TypedFixture("NSIndexPath-ManyIndices") { + static nonisolated(unsafe) let indexPathManyIndices = TypedFixture("NSIndexPath-ManyIndices") { var indexPath = IndexPath() indexPath.append([4, 8, 15, 16, 23, 42]) return indexPath as NSIndexPath @@ -220,32 +220,32 @@ enum Fixtures { // ===== NSSet, NSMutableSet ===== - static let setOfNumbers = TypedFixture("NSSet-Numbers") { + static nonisolated(unsafe) let setOfNumbers = TypedFixture("NSSet-Numbers") { let numbers = [1, 2, 3, 4, 5].map { NSNumber(value: $0) } return NSSet(array: numbers) } - static let setEmpty = TypedFixture("NSSet-Empty") { + static nonisolated(unsafe) let setEmpty = TypedFixture("NSSet-Empty") { return NSSet() } - static let mutableSetOfNumbers = TypedFixture("NSMutableSet-Numbers") { + static nonisolated(unsafe) let mutableSetOfNumbers = TypedFixture("NSMutableSet-Numbers") { let numbers = [1, 2, 3, 4, 5].map { NSNumber(value: $0) } return NSMutableSet(array: numbers) } - static let mutableSetEmpty = TypedFixture("NSMutableSet-Empty") { + static nonisolated(unsafe) let mutableSetEmpty = TypedFixture("NSMutableSet-Empty") { return NSMutableSet() } // ===== NSCountedSet ===== - static let countedSetOfNumbersAppearingOnce = TypedFixture("NSCountedSet-NumbersAppearingOnce") { + static nonisolated(unsafe) let countedSetOfNumbersAppearingOnce = TypedFixture("NSCountedSet-NumbersAppearingOnce") { let numbers = [1, 2, 3, 4, 5].map { NSNumber(value: $0) } return NSCountedSet(array: numbers) } - static let countedSetOfNumbersAppearingSeveralTimes = TypedFixture("NSCountedSet-NumbersAppearingSeveralTimes") { + static nonisolated(unsafe) let countedSetOfNumbersAppearingSeveralTimes = TypedFixture("NSCountedSet-NumbersAppearingSeveralTimes") { let numbers = [1, 2, 3, 4, 5].map { NSNumber(value: $0) } let set = NSCountedSet() for _ in 0 ..< 5 { @@ -256,75 +256,75 @@ enum Fixtures { return set } - static let countedSetEmpty = TypedFixture("NSCountedSet-Empty") { + static nonisolated(unsafe) let countedSetEmpty = TypedFixture("NSCountedSet-Empty") { return NSCountedSet() } // ===== NSCharacterSet, NSMutableCharacterSet ===== - static let characterSetEmpty = TypedFixture("NSCharacterSet-Empty") { + static nonisolated(unsafe) let characterSetEmpty = TypedFixture("NSCharacterSet-Empty") { return NSCharacterSet() } - static let characterSetRange = TypedFixture("NSCharacterSet-Range") { + static nonisolated(unsafe) let characterSetRange = TypedFixture("NSCharacterSet-Range") { return NSCharacterSet(range: NSMakeRange(0, 255)) } - static let characterSetString = TypedFixture("NSCharacterSet-String") { + static nonisolated(unsafe) let characterSetString = TypedFixture("NSCharacterSet-String") { return NSCharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyz") } - static let characterSetBitmap = TypedFixture("NSCharacterSet-Bitmap") { + static nonisolated(unsafe) let characterSetBitmap = TypedFixture("NSCharacterSet-Bitmap") { let someSet = NSCharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyz") return NSCharacterSet(bitmapRepresentation: someSet.bitmapRepresentation) } - static let characterSetBuiltin = TypedFixture("NSCharacterSet-Builtin") { + static nonisolated(unsafe) let characterSetBuiltin = TypedFixture("NSCharacterSet-Builtin") { return NSCharacterSet.alphanumerics as NSCharacterSet } // ===== NSOrderedSet, NSMutableOrderedSet ===== - static let orderedSetOfNumbers = TypedFixture("NSOrderedSet-Numbers") { + static nonisolated(unsafe) let orderedSetOfNumbers = TypedFixture("NSOrderedSet-Numbers") { let numbers = [1, 2, 3, 4, 5].map { NSNumber(value: $0) } return NSOrderedSet(array: numbers) } - static let orderedSetEmpty = TypedFixture("NSOrderedSet-Empty") { + static nonisolated(unsafe) let orderedSetEmpty = TypedFixture("NSOrderedSet-Empty") { return NSOrderedSet() } - static let mutableOrderedSetOfNumbers = TypedFixture("NSMutableOrderedSet-Numbers") { + static nonisolated(unsafe) let mutableOrderedSetOfNumbers = TypedFixture("NSMutableOrderedSet-Numbers") { let numbers = [1, 2, 3, 4, 5].map { NSNumber(value: $0) } return NSMutableOrderedSet(array: numbers) } - static let mutableOrderedSetEmpty = TypedFixture("NSMutableOrderedSet-Empty") { + static nonisolated(unsafe) let mutableOrderedSetEmpty = TypedFixture("NSMutableOrderedSet-Empty") { return NSMutableOrderedSet() } // ===== NSMeasurement ===== - static let zeroMeasurement = TypedFixture("NSMeasurement-Zero") { + static nonisolated(unsafe) let zeroMeasurement = TypedFixture("NSMeasurement-Zero") { let noUnit = Unit(symbol: "") return NSMeasurement(doubleValue: 0, unit: noUnit) } - static let lengthMeasurement = TypedFixture("NSMeasurement-Length") { + static nonisolated(unsafe) let lengthMeasurement = TypedFixture("NSMeasurement-Length") { return NSMeasurement(doubleValue: 45, unit: UnitLength.miles) } - static let frequencyMeasurement = TypedFixture("NSMeasurement-Frequency") { + static nonisolated(unsafe) let frequencyMeasurement = TypedFixture("NSMeasurement-Frequency") { return NSMeasurement(doubleValue: 1400, unit: UnitFrequency.megahertz) } - static let angleMeasurement = TypedFixture("NSMeasurement-Angle") { + static nonisolated(unsafe) let angleMeasurement = TypedFixture("NSMeasurement-Angle") { return NSMeasurement(doubleValue: 90, unit: UnitAngle.degrees) } // ===== Fixture list ===== - static let _listOfAllFixtures: [AnyFixture] = [ + static nonisolated(unsafe) let _listOfAllFixtures: [AnyFixture] = [ AnyFixture(Fixtures.mutableAttributedString), AnyFixture(Fixtures.attributedString), AnyFixture(Fixtures.byteCountFormatterDefault), @@ -370,11 +370,11 @@ enum Fixtures { // This ensures that we do not have fixtures with duplicate identifiers: - static var all: [AnyFixture] { + static nonisolated(unsafe) var all: [AnyFixture] { return Array(Fixtures.allFixturesByIdentifier.values) } - static var allFixturesByIdentifier: [String: AnyFixture] = { + static nonisolated(unsafe) var allFixturesByIdentifier: [String: AnyFixture] = { let keysAndValues = Fixtures._listOfAllFixtures.map { ($0.identifier, $0) } return Dictionary(keysAndValues, uniquingKeysWith: { _, _ in fatalError("No two keys should be the same in fixtures. Double-check keys in FixtureValues.swift to make sure they're all unique.") }) }() diff --git a/Tests/Foundation/HTTPServer.swift b/Tests/Foundation/HTTPServer.swift index 5d713aa702..ec0fd78c1b 100644 --- a/Tests/Foundation/HTTPServer.swift +++ b/Tests/Foundation/HTTPServer.swift @@ -40,8 +40,8 @@ private func debugLog(_ msg: String) { } public let globalDispatchQueue = DispatchQueue.global() -public let dispatchQueueMake: (String) -> DispatchQueue = { DispatchQueue.init(label: $0) } -public let dispatchGroupMake: () -> DispatchGroup = DispatchGroup.init +public let dispatchQueueMake: @Sendable (String) -> DispatchQueue = { DispatchQueue.init(label: $0) } +public let dispatchGroupMake: @Sendable () -> DispatchGroup = DispatchGroup.init struct _HTTPUtils { static let CRLF = "\r\n" @@ -1082,7 +1082,7 @@ struct ServerError : Error { extension ServerError : CustomStringConvertible { var description: String { - let s = String(validatingUTF8: strerror(errno)) ?? "" + let s = String(validatingCString: strerror(errno)) ?? "" return "\(operation) failed: \(s) (\(_code))" } } @@ -1106,10 +1106,10 @@ extension LoopbackServerTest { class LoopbackServerTest : XCTestCase { private static let staticSyncQ = DispatchQueue(label: "org.swift.TestFoundation.HTTPServer.StaticSyncQ") - private static var _serverPort: Int = -1 - private static var _serverActive = false - private static var testServer: _HTTPServer? = nil - private static var _options: Options = .default + nonisolated(unsafe) private static var _serverPort: Int = -1 + nonisolated(unsafe) private static var _serverActive = false + nonisolated(unsafe) private static var testServer: _HTTPServer? = nil + nonisolated(unsafe) private static var _options: Options = .default static var options: Options { get { @@ -1144,11 +1144,12 @@ class LoopbackServerTest : XCTestCase { super.tearDown() } - static func startServer() { - var _serverPort = 0 + static func startServer() { + // Protected by dispatchGroup + nonisolated(unsafe) var _serverPort = 0 let dispatchGroup = DispatchGroup() - func runServer() throws { + @Sendable func runServer() throws { testServer = try _HTTPServer(port: nil, backlog: options.serverBacklog) _serverPort = Int(testServer!.port) serverActive = true @@ -1156,9 +1157,9 @@ class LoopbackServerTest : XCTestCase { while serverActive { do { - let httpServer = try testServer!.listen() + nonisolated(unsafe) let httpServer = try testServer!.listen() - func handleRequest() { + @Sendable func handleRequest() { let subServer = TestURLSessionServer(httpServer: httpServer) do { try subServer.readAndRespond() diff --git a/Tests/Foundation/TestCalendar.swift b/Tests/Foundation/TestCalendar.swift index 61960d4695..de91500b71 100644 --- a/Tests/Foundation/TestCalendar.swift +++ b/Tests/Foundation/TestCalendar.swift @@ -244,8 +244,6 @@ class TestCalendar: XCTestCase { calendar.locale = Locale(identifier: "en_US_POSIX") calendar.timeZone = try XCTUnwrap(TimeZone(secondsFromGMT: 0)) - let expectedDescription = calendar.timeZone == TimeZone.current ? "GMT (current)" : "GMT (fixed)" - let calendarCopy = calendar XCTAssertEqual(calendarCopy.timeZone.identifier, "GMT") XCTAssertEqual(calendarCopy.timeZone.secondsFromGMT(), 0) diff --git a/Tests/Foundation/TestDataURLProtocol.swift b/Tests/Foundation/TestDataURLProtocol.swift index 30c21c6e6e..3b9bc484dd 100644 --- a/Tests/Foundation/TestDataURLProtocol.swift +++ b/Tests/Foundation/TestDataURLProtocol.swift @@ -7,14 +7,17 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +import Synchronization -class DataURLTestDelegate: NSObject, URLSessionTaskDelegate, URLSessionDataDelegate { +final class DataURLTestDelegate: NSObject, URLSessionTaskDelegate, URLSessionDataDelegate, Sendable { - var callbacks: [String] = [] let expectation: XCTestExpectation? - var data: Data? - var error: Error? - var response: URLResponse? + + // This state is setup before running and checked after `expectation`. Unsafe, but would be better with a lock in the future. + nonisolated(unsafe) var callbacks: [String] = [] + nonisolated(unsafe) var data: Data? + nonisolated(unsafe) var error: Error? + nonisolated(unsafe) var response: URLResponse? init(expectation: XCTestExpectation?) { diff --git a/Tests/Foundation/TestDateIntervalFormatter.swift b/Tests/Foundation/TestDateIntervalFormatter.swift index 61278e005f..87f6fe9e3a 100644 --- a/Tests/Foundation/TestDateIntervalFormatter.swift +++ b/Tests/Foundation/TestDateIntervalFormatter.swift @@ -46,7 +46,7 @@ extension String { } class TestDateIntervalFormatter: XCTestCase { - private var formatter: DateIntervalFormatter! + private nonisolated(unsafe) var formatter: DateIntervalFormatter! override func setUp() { super.setUp() diff --git a/Tests/Foundation/TestDecimal.swift b/Tests/Foundation/TestDecimal.swift index 8cdeba9a16..eedc4fea3e 100644 --- a/Tests/Foundation/TestDecimal.swift +++ b/Tests/Foundation/TestDecimal.swift @@ -73,7 +73,6 @@ class TestDecimal: XCTestCase { */ let fr = Locale(identifier: "fr_FR") - let greatestFiniteMagnitude = "3402823669209384634633746074317682114550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" XCTAssertEqual("0", NSDecimalNumber(decimal: Decimal()).description(withLocale: fr)) XCTAssertEqual("1000", NSDecimalNumber(decimal: Decimal(1000)).description(withLocale: fr)) @@ -86,6 +85,8 @@ class TestDecimal: XCTestCase { // Disabled pending decision about size of Decimal mantissa /* + let greatestFiniteMagnitude = "3402823669209384634633746074317682114550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + XCTAssertEqual(greatestFiniteMagnitude, NSDecimalNumber(decimal: Decimal.greatestFiniteMagnitude).description(withLocale: fr)) XCTAssertEqual("0,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", NSDecimalNumber(decimal: Decimal.leastNormalMagnitude).description(withLocale: fr)) XCTAssertEqual("0,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", NSDecimalNumber(decimal: Decimal.leastNonzeroMagnitude).description(withLocale: fr)) diff --git a/Tests/Foundation/TestFileHandle.swift b/Tests/Foundation/TestFileHandle.swift index 5c4ac2d3c8..f754361483 100644 --- a/Tests/Foundation/TestFileHandle.swift +++ b/Tests/Foundation/TestFileHandle.swift @@ -467,8 +467,9 @@ class TestFileHandle : XCTestCase { func test_readToEndOfFileInBackgroundAndNotify() { let handle = createFileHandle() + nonisolated(unsafe) let nonisolatedSelf = self let done = expectation(forNotification: .NSFileHandleReadToEndOfFileCompletion, object: handle, notificationCenter: .default) { (notification) -> Bool in - XCTAssertEqual(notification.userInfo as? [String: AnyHashable], [NSFileHandleNotificationDataItem: self.content], "User info was incorrect") + XCTAssertEqual(notification.userInfo as? [String: AnyHashable], [NSFileHandleNotificationDataItem: nonisolatedSelf.content], "User info was incorrect") return true } diff --git a/Tests/Foundation/TestFileManager.swift b/Tests/Foundation/TestFileManager.swift index fc2361c346..241fcbac7a 100644 --- a/Tests/Foundation/TestFileManager.swift +++ b/Tests/Foundation/TestFileManager.swift @@ -113,7 +113,7 @@ class TestFileManager : XCTestCase { func test_creatingDirectoryWithShortIntermediatePath() { let fileManager = FileManager.default let cwd = fileManager.currentDirectoryPath - fileManager.changeCurrentDirectoryPath(NSTemporaryDirectory()) + _ = fileManager.changeCurrentDirectoryPath(NSTemporaryDirectory()) let relativePath = NSUUID().uuidString @@ -123,7 +123,7 @@ class TestFileManager : XCTestCase { } catch { XCTFail("Failed to create and clean up directory") } - fileManager.changeCurrentDirectoryPath(cwd) + _ = fileManager.changeCurrentDirectoryPath(cwd) } func test_moveFile() { @@ -646,7 +646,7 @@ class TestFileManager : XCTestCase { try? fm.removeItem(at: root) try XCTAssertNoThrow(fm.createDirectory(at: subdirectory, withIntermediateDirectories: true, attributes: nil)) - try XCTAssertNoThrow(fm.createFile(atPath: file.path, contents: Data(), attributes: nil)) + _ = fm.createFile(atPath: file.path, contents: Data(), attributes: nil) let contents = try XCTUnwrap(fm.contentsOfDirectory(at: root, includingPropertiesForKeys: [.isDirectoryKey], options: [.skipsHiddenFiles])) XCTAssertEqual(contents.count, 1) XCTAssertEqual(contents, [subdirectory]) @@ -1752,8 +1752,9 @@ class TestFileManager : XCTestCase { let operationCount = 10 - var directoryURLs = [URL?](repeating: nil, count: operationCount) - var errors = [Error?](repeating: nil, count: operationCount) + // Protected by dispatchGroup + nonisolated(unsafe) var directoryURLs = [URL?](repeating: nil, count: operationCount) + nonisolated(unsafe) var errors = [Error?](repeating: nil, count: operationCount) let dispatchGroup = DispatchGroup() for operationIndex in 0.. Void in + let encode = { @Sendable (_ data: Date, _ encoder: Encoder) throws -> Void in var container = encoder.singleValueContainer() try container.encode(42) } - let decode = { (_: Decoder) throws -> Date in return timestamp } + let decode = { @Sendable (_: Decoder) throws -> Date in return timestamp } // We can't encode a top-level Date, so it'll be wrapped in an array. let expectedJSON = "[42]".data(using: .utf8)! @@ -351,8 +351,8 @@ class TestJSONEncoder : XCTestCase { let timestamp = Date() // Encoding nothing should encode an empty keyed container ({}). - let encode = { (_: Date, _: Encoder) throws -> Void in } - let decode = { (_: Decoder) throws -> Date in return timestamp } + let encode = { @Sendable (_: Date, _: Encoder) throws -> Void in } + let decode = { @Sendable (_: Decoder) throws -> Date in return timestamp } // We can't encode a top-level Date, so it'll be wrapped in an array. let expectedJSON = "[{}]".data(using: .utf8)! @@ -373,11 +373,11 @@ class TestJSONEncoder : XCTestCase { func test_encodingCustomData() { // We'll encode a number instead of data. - let encode = { (_ data: Data, _ encoder: Encoder) throws -> Void in + let encode = { @Sendable (_ data: Data, _ encoder: Encoder) throws -> Void in var container = encoder.singleValueContainer() try container.encode(42) } - let decode = { (_: Decoder) throws -> Data in return Data() } + let decode = { @Sendable (_: Decoder) throws -> Data in return Data() } // We can't encode a top-level Data, so it'll be wrapped in an array. let expectedJSON = "[42]".data(using: .utf8)! @@ -389,8 +389,8 @@ class TestJSONEncoder : XCTestCase { func test_encodingCustomDataEmpty() { // Encoding nothing should encode an empty keyed container ({}). - let encode = { (_: Data, _: Encoder) throws -> Void in } - let decode = { (_: Decoder) throws -> Data in return Data() } + let encode = { @Sendable (_: Data, _: Encoder) throws -> Void in } + let decode = { @Sendable (_: Decoder) throws -> Data in return Data() } // We can't encode a top-level Data, so it'll be wrapped in an array. let expectedJSON = "[{}]".data(using: .utf8)! diff --git a/Tests/Foundation/TestJSONSerialization.swift b/Tests/Foundation/TestJSONSerialization.swift index b8804ef73a..b155deb982 100644 --- a/Tests/Foundation/TestJSONSerialization.swift +++ b/Tests/Foundation/TestJSONSerialization.swift @@ -67,7 +67,6 @@ extension TestJSONSerialization { case data case stream } - static var objectType = ObjectType.data func test_deserialize_emptyObject_withData() { deserialize_emptyObject(objectType: .data) @@ -360,9 +359,7 @@ extension TestJSONSerialization { let failingData = Data(failingString.utf8) XCTAssertThrowsError(try getjsonObjectResult(failingData, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) XCTAssertEqual(nserror.userInfo[NSDebugDescriptionErrorKey] as? String, "Too many nested arrays or dictionaries around character 2561.") @@ -423,9 +420,7 @@ extension TestJSONSerialization { let failingData = Data(failingString.utf8) XCTAssertThrowsError(try getjsonObjectResult(failingData, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) XCTAssertEqual(nserror.userInfo[NSDebugDescriptionErrorKey] as? String, "Too many nested arrays or dictionaries around character 513.") @@ -512,9 +507,7 @@ extension TestJSONSerialization { return } XCTAssertThrowsError(_ = try getjsonObjectResult(data, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) XCTAssertEqual(nserror.userInfo[NSDebugDescriptionErrorKey] as? String, "Number with leading zero around character 2.") @@ -527,9 +520,7 @@ extension TestJSONSerialization { let data = Data(subject.utf8) XCTAssertThrowsError(try getjsonObjectResult(data, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) } @@ -613,9 +604,7 @@ extension TestJSONSerialization { // Check failure to decode without .allowFragments XCTAssertThrowsError(try getjsonObjectResult(data, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) XCTAssertEqual(nserror.userInfo[NSDebugDescriptionErrorKey] as? String, "JSON text did not start with array or object and option to allow fragments not set.") @@ -643,9 +632,7 @@ extension TestJSONSerialization { let data = Data(json.utf8) XCTAssertThrowsError(try getjsonObjectResult(data, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) XCTAssertEqual(nserror.userInfo[NSDebugDescriptionErrorKey] as? String, "Unescaped control character around character 2.") @@ -655,9 +642,7 @@ extension TestJSONSerialization { func deserialize_unescapedReversedSolidus(objectType: ObjectType) { XCTAssertThrowsError(try getjsonObjectResult(Data(#"" \ ""#.utf8), objectType, options: .allowFragments)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) XCTAssertEqual(nserror.userInfo[NSDebugDescriptionErrorKey] as? String, "Invalid escape sequence around character 2.") @@ -670,9 +655,7 @@ extension TestJSONSerialization { let data = Data(subject.utf8) XCTAssertThrowsError(_ = try getjsonObjectResult(data, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) } @@ -683,9 +666,7 @@ extension TestJSONSerialization { let data = Data(subject.utf8) XCTAssertThrowsError(_ = try getjsonObjectResult(data, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) } @@ -696,9 +677,7 @@ extension TestJSONSerialization { let data = Data(subject.utf8) XCTAssertThrowsError(_ = try getjsonObjectResult(data, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) XCTAssertEqual(nserror.userInfo[NSDebugDescriptionErrorKey] as? String, "Unexpected end of file during JSON parse.") @@ -710,9 +689,7 @@ extension TestJSONSerialization { let data = Data(subject.utf8) XCTAssertThrowsError(_ = try getjsonObjectResult(data, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) XCTAssertEqual(nserror.userInfo[NSDebugDescriptionErrorKey] as? String, "Invalid value around character 9.") @@ -724,9 +701,7 @@ extension TestJSONSerialization { let data = Data(subject.utf8) XCTAssertThrowsError(_ = try getjsonObjectResult(data, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) } @@ -737,9 +712,7 @@ extension TestJSONSerialization { let data = Data(subject.utf8) XCTAssertThrowsError(_ = try getjsonObjectResult(data, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) XCTAssertEqual(nserror.userInfo[NSDebugDescriptionErrorKey] as? String, "Invalid value around character 1.") @@ -751,9 +724,7 @@ extension TestJSONSerialization { let data = Data(subject.utf8) XCTAssertThrowsError(_ = try getjsonObjectResult(data, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) } @@ -764,9 +735,7 @@ extension TestJSONSerialization { let data = Data(subject.utf8) XCTAssertThrowsError(_ = try getjsonObjectResult(data, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) XCTAssertEqual(nserror.userInfo[NSDebugDescriptionErrorKey] as? String, "Invalid escape sequence around character 2.") @@ -777,9 +746,7 @@ extension TestJSONSerialization { let subject = "[\"\\uDFF3\"]" let data = Data(subject.utf8) XCTAssertThrowsError(_ = try getjsonObjectResult(data, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) XCTAssertEqual(nserror.userInfo[NSDebugDescriptionErrorKey] as? String, "Unable to convert hex escape sequence (no high character) to UTF8-encoded character.") @@ -790,9 +757,7 @@ extension TestJSONSerialization { let subject = "[\"\\uD834\"]" let data = Data(subject.utf8) XCTAssertThrowsError(_ = try getjsonObjectResult(data, objectType)) { error in - guard let nserror = (error as? NSError) else { - return XCTFail("Unexpected error: \(error)") - } + let nserror = error as NSError XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) XCTAssertEqual(CocoaError(_nsError: nserror).code, .propertyListReadCorrupt) XCTAssertEqual(nserror.userInfo[NSDebugDescriptionErrorKey] as? String, "Unexpected end of file during string parse (expected low-surrogate code point but did not find one).") @@ -1545,10 +1510,9 @@ extension TestJSONSerialization { _ = try JSONSerialization.jsonObject(with: data, options: []) } catch let nativeError { - if let error = nativeError as? NSError { - XCTAssertEqual(error.domain, "NSCocoaErrorDomain") - XCTAssertEqual(error.code, 3840) - } + let error = nativeError as NSError + XCTAssertEqual(error.domain, "NSCocoaErrorDomain") + XCTAssertEqual(error.code, 3840) } } diff --git a/Tests/Foundation/TestMeasurement.swift b/Tests/Foundation/TestMeasurement.swift index ec93bf1832..1cf5ad2b28 100644 --- a/Tests/Foundation/TestMeasurement.swift +++ b/Tests/Foundation/TestMeasurement.swift @@ -17,8 +17,8 @@ class CustomUnit: Unit { super.init(coder: aDecoder) } - public static let bugs = CustomUnit(symbol: "bug") - public static let features = CustomUnit(symbol: "feature") + public static nonisolated(unsafe) let bugs = CustomUnit(symbol: "bug") + public static nonisolated(unsafe) let features = CustomUnit(symbol: "feature") } #endif diff --git a/Tests/Foundation/TestNSArray.swift b/Tests/Foundation/TestNSArray.swift index c05e6d2be2..fc767cdab4 100644 --- a/Tests/Foundation/TestNSArray.swift +++ b/Tests/Foundation/TestNSArray.swift @@ -594,6 +594,7 @@ class TestNSArray : XCTestCase { } } + @available(*, deprecated) // test of deprecated API, suppress deprecation warning func test_initWithContentsOfFile() { let testFilePath = createTestFile("TestFileOut.txt", _contents: Data(capacity: 234)) if let _ = testFilePath { @@ -611,6 +612,7 @@ class TestNSArray : XCTestCase { } } + @available(*, deprecated) // test of deprecated API, suppress deprecation warning func test_initMutableWithContentsOfFile() { if let testFilePath = createTestFile("TestFileOut.txt", _contents: Data(capacity: 234)) { let a1: NSArray = ["foo", "bar"] @@ -630,6 +632,7 @@ class TestNSArray : XCTestCase { } } + @available(*, deprecated) // test of deprecated API, suppress deprecation warning func test_initMutableWithContentsOfURL() { if let testFilePath = createTestFile("TestFileOut.txt", _contents: Data(capacity: 234)) { let a1: NSArray = ["foo", "bar"] @@ -650,6 +653,7 @@ class TestNSArray : XCTestCase { } } + @available(*, deprecated) // test of deprecated API, suppress deprecation warning func test_writeToFile() { let testFilePath = createTestFile("TestFileOut.txt", _contents: Data(capacity: 234)) if let _ = testFilePath { diff --git a/Tests/Foundation/TestNSDictionary.swift b/Tests/Foundation/TestNSDictionary.swift index 9829ef4091..c19feb93c7 100644 --- a/Tests/Foundation/TestNSDictionary.swift +++ b/Tests/Foundation/TestNSDictionary.swift @@ -179,6 +179,7 @@ class TestNSDictionary : XCTestCase { } } + @available(*, deprecated) // test of deprecated API, suppress deprecation warning func test_initWithContentsOfFile() { let testFilePath = createTestFile("TestFileOut.txt", _contents: Data(capacity: 256)) if let _ = testFilePath { diff --git a/Tests/Foundation/TestNSKeyedUnarchiver.swift b/Tests/Foundation/TestNSKeyedUnarchiver.swift index dc1e3f97fc..fce59cb446 100644 --- a/Tests/Foundation/TestNSKeyedUnarchiver.swift +++ b/Tests/Foundation/TestNSKeyedUnarchiver.swift @@ -37,7 +37,7 @@ class TestNSKeyedUnarchiver : XCTestCase { case .skip: classes = [] case .performWithDefaultClass: - classes = [ (expectedObject as! NSObject).classForCoder ] + classes = [ (expectedObject as NSObject).classForCoder ] case .performWithClasses(let specifiedClasses): classes = specifiedClasses } diff --git a/Tests/Foundation/TestNSLocale.swift b/Tests/Foundation/TestNSLocale.swift index 83ee503c22..0d76756544 100644 --- a/Tests/Foundation/TestNSLocale.swift +++ b/Tests/Foundation/TestNSLocale.swift @@ -100,6 +100,7 @@ class TestNSLocale : XCTestCase { XCTAssertEqual(a1.hashValue, a2.hashValue) } + @available(*, deprecated) // test of deprecated API, suppress deprecation warning func test_staticProperties() { let euroCurrencyCode = "EUR" let spainRegionCode = "ES" diff --git a/Tests/Foundation/TestNSLock.swift b/Tests/Foundation/TestNSLock.swift index 70bca31a73..6cd83b3616 100644 --- a/Tests/Foundation/TestNSLock.swift +++ b/Tests/Foundation/TestNSLock.swift @@ -53,7 +53,8 @@ class TestNSLock: XCTestCase { let endSeconds: Double = 2 let endTime = Date.init(timeIntervalSinceNow: endSeconds) - var threadsStarted = Array(repeating: false, count: threadCount) + // Protected by arrayLock + nonisolated(unsafe) var threadsStarted = Array(repeating: false, count: threadCount) let arrayLock = NSLock() for t in 0.. Void) { + private func executeInBackgroundThread(_ operation: @Sendable @escaping () -> Void) { let e = expectation(description: "Background Execution") let bgThread = Thread() { operation() diff --git a/Tests/Foundation/TestOperationQueue.swift b/Tests/Foundation/TestOperationQueue.swift index 2fe6d6a9b4..4bb912f1af 100644 --- a/Tests/Foundation/TestOperationQueue.swift +++ b/Tests/Foundation/TestOperationQueue.swift @@ -7,6 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +import Synchronization import Dispatch class TestOperationQueue : XCTestCase { @@ -35,18 +36,18 @@ class TestOperationQueue : XCTestCase { } func test_OperationPriorities() { - var msgOperations = [String]() + let msgOperations = Mutex([String]()) let operation1 : BlockOperation = BlockOperation(block: { - msgOperations.append("Operation1 executed") + msgOperations.withLock { $0.append("Operation1 executed") } }) let operation2 : BlockOperation = BlockOperation(block: { - msgOperations.append("Operation2 executed") + msgOperations.withLock { $0.append("Operation2 executed") } }) let operation3 : BlockOperation = BlockOperation(block: { - msgOperations.append("Operation3 executed") + msgOperations.withLock { $0.append("Operation3 executed") } }) let operation4: BlockOperation = BlockOperation(block: { - msgOperations.append("Operation4 executed") + msgOperations.withLock { $0.append("Operation4 executed") } }) operation4.queuePriority = .veryLow operation3.queuePriority = .veryHigh @@ -60,15 +61,18 @@ class TestOperationQueue : XCTestCase { let queue = OperationQueue() queue.maxConcurrentOperationCount = 1 queue.addOperations(operations, waitUntilFinished: true) - XCTAssertEqual(msgOperations[0], "Operation3 executed") - XCTAssertEqual(msgOperations[1], "Operation1 executed") - XCTAssertEqual(msgOperations[2], "Operation2 executed") - XCTAssertEqual(msgOperations[3], "Operation4 executed") + msgOperations.withLock { + XCTAssertEqual($0[0], "Operation3 executed") + XCTAssertEqual($0[1], "Operation1 executed") + XCTAssertEqual($0[2], "Operation2 executed") + XCTAssertEqual($0[3], "Operation4 executed") + } } func test_isExecutingWorks() { - class _OperationBox { - var operation: Operation? + final class _OperationBox : Sendable { + // Only mutate this before kicking off the operation + nonisolated(unsafe) var operation: Operation? init() { self.operation = nil } @@ -125,10 +129,10 @@ class TestOperationQueue : XCTestCase { func test_CancelOneOperation() { var operations = [Operation]() - var valueOperations = [Int]() + let valueOperations = Mutex([Int]()) for i in 0..<5 { let operation = BlockOperation { - valueOperations.append(i) + valueOperations.withLock { $0.append(i) } Thread.sleep(forTimeInterval: 2) } operations.append(operation) @@ -139,41 +143,41 @@ class TestOperationQueue : XCTestCase { queue.addOperations(operations, waitUntilFinished: false) operations.remove(at: 2).cancel() queue.waitUntilAllOperationsAreFinished() - XCTAssertTrue(!valueOperations.contains(2)) + XCTAssertTrue(!valueOperations.withLock({ $0.contains(2)})) } func test_CancelOperationsOfSpecificQueuePriority() { var operations = [Operation]() - var valueOperations = [Int]() + let valueOperations = Mutex([Int]()) let operation1 = BlockOperation { - valueOperations.append(0) + valueOperations.withLock { $0.append(0) } Thread.sleep(forTimeInterval: 2) } operation1.queuePriority = .high operations.append(operation1) let operation2 = BlockOperation { - valueOperations.append(1) + valueOperations.withLock { $0.append(1) } Thread.sleep(forTimeInterval: 2) } operation2.queuePriority = .high operations.append(operation2) let operation3 = BlockOperation { - valueOperations.append(2) + valueOperations.withLock { $0.append(2) } } operation3.queuePriority = .normal operations.append(operation3) let operation4 = BlockOperation { - valueOperations.append(3) + valueOperations.withLock { $0.append(3) } } operation4.queuePriority = .normal operations.append(operation4) let operation5 = BlockOperation { - valueOperations.append(4) + valueOperations.withLock { $0.append(4) } } operation5.queuePriority = .normal operations.append(operation5) @@ -187,9 +191,11 @@ class TestOperationQueue : XCTestCase { } } queue.waitUntilAllOperationsAreFinished() - XCTAssertTrue(valueOperations.count == 2) - XCTAssertTrue(valueOperations[0] == 0) - XCTAssertTrue(valueOperations[1] == 1) + valueOperations.withLock { + XCTAssertTrue($0.count == 2) + XCTAssertTrue($0[0] == 0) + XCTAssertTrue($0[1] == 1) + } } func test_CurrentQueueOnMainQueue() { @@ -277,13 +283,10 @@ class TestOperationQueue : XCTestCase { } func test_OperationDependencyCount() { - var results = [Int]() let op1 = BlockOperation { - results.append(1) } op1.name = "op1" let op2 = BlockOperation { - results.append(2) } op2.name = "op2" op1.addDependency(op2) @@ -406,34 +409,34 @@ class TestOperationQueue : XCTestCase { queue.maxConcurrentOperationCount = 1 queue.isSuspended = true - var array = [Int]() + let array = Mutex([Int]()) let op1 = BlockOperation { - array.append(1) + array.withLock { $0.append(1) } } op1.queuePriority = .normal op1.name = "op1" let op2 = BlockOperation { - array.append(2) + array.withLock { $0.append(2) } } op2.queuePriority = .normal op2.name = "op2" let op3 = BlockOperation { - array.append(3) + array.withLock { $0.append(3) } } op3.queuePriority = .normal op3.name = "op3" let op4 = BlockOperation { - array.append(4) + array.withLock { $0.append(4) } } op4.queuePriority = .normal op4.name = "op4" let op5 = BlockOperation { - array.append(5) + array.withLock { $0.append(5) } } op5.queuePriority = .normal op5.name = "op5" @@ -447,7 +450,9 @@ class TestOperationQueue : XCTestCase { queue.isSuspended = false queue.waitUntilAllOperationsAreFinished() - XCTAssertEqual(array, [1, 2, 3, 4, 5]) + array.withLock { + XCTAssertEqual($0, [1, 2, 3, 4, 5]) + } } public func test_OperationOrder2() { @@ -455,34 +460,34 @@ class TestOperationQueue : XCTestCase { queue.maxConcurrentOperationCount = 1 queue.isSuspended = true - var array = [Int]() + let array = Mutex([Int]()) let op1 = BlockOperation { - array.append(1) + array.withLock { $0.append(1) } } op1.queuePriority = .veryLow op1.name = "op1" let op2 = BlockOperation { - array.append(2) + array.withLock { $0.append(2) } } op2.queuePriority = .low op2.name = "op2" let op3 = BlockOperation { - array.append(3) + array.withLock { $0.append(3) } } op3.queuePriority = .normal op3.name = "op3" let op4 = BlockOperation { - array.append(4) + array.withLock { $0.append(4) } } op4.queuePriority = .high op4.name = "op4" let op5 = BlockOperation { - array.append(5) + array.withLock { $0.append(5) } } op5.queuePriority = .veryHigh op5.name = "op5" @@ -496,7 +501,9 @@ class TestOperationQueue : XCTestCase { queue.isSuspended = false queue.waitUntilAllOperationsAreFinished() - XCTAssertEqual(array, [5, 4, 3, 2, 1]) + array.withLock { + XCTAssertEqual($0, [5, 4, 3, 2, 1]) + } } func test_ExecutionOrder() { @@ -505,7 +512,8 @@ class TestOperationQueue : XCTestCase { let didRunOp1 = expectation(description: "Did run first operation") let didRunOp1Dependency = expectation(description: "Did run first operation dependency") let didRunOp2 = expectation(description: "Did run second operation") - var didRunOp1DependencyFirst = false + // Protected by the ordering of execution, which we are testing here + nonisolated(unsafe) var didRunOp1DependencyFirst = false let op1 = BlockOperation { didRunOp1.fulfill() @@ -601,41 +609,55 @@ class TestOperationQueue : XCTestCase { let op3DidRun = expectation(description: "op3 is not supposed to be run") op3DidRun.isInverted = true - var op1: Operation! - var op2: Operation! - var op3: Operation! + struct Ops { + var op1: Operation! + var op2: Operation! + var op3: Operation! + init() { + op1 = nil + op2 = nil + op3 = nil + } + } + let ops = Mutex(Ops()) let queue1 = OperationQueue() - op1 = BlockOperation { - op1DidRun.fulfill() - if op2.isFinished { - op2Finished.fulfill() + ops.withLock { + $0.op1 = BlockOperation { + op1DidRun.fulfill() + ops.withLock { + if $0.op2.isFinished { + op2Finished.fulfill() + } + } } - } - op2 = BlockOperation { - op2DidRun.fulfill() - if op3.isCancelled { - op3Cancelled.fulfill() + $0.op2 = BlockOperation { + op2DidRun.fulfill() + ops.withLock { + if $0.op3.isCancelled { + op3Cancelled.fulfill() + } + } } + $0.op3 = BlockOperation { + op3DidRun.fulfill() + } + + // Create dependency cycle + $0.op1.addDependency($0.op2) + $0.op2.addDependency($0.op3) + $0.op3.addDependency($0.op1) + + queue1.addOperation($0.op1) + queue1.addOperation($0.op2) + queue1.addOperation($0.op3) + + XCTAssertEqual(queue1.operationCount, 3) + + //Break dependency cycle + $0.op3.cancel() } - op3 = BlockOperation { - op3DidRun.fulfill() - } - - // Create dependency cycle - op1.addDependency(op2) - op2.addDependency(op3) - op3.addDependency(op1) - - queue1.addOperation(op1) - queue1.addOperation(op2) - queue1.addOperation(op3) - - XCTAssertEqual(queue1.operationCount, 3) - - //Break dependency cycle - op3.cancel() - + waitForExpectations(timeout: 1) } @@ -679,8 +701,9 @@ class TestOperationQueue : XCTestCase { let didRunOp1 = expectation(description: "Did run first operation") let didRunOp2 = expectation(description: "Did run second operation") + nonisolated(unsafe) let nonisolatedSelf = self queue.addOperation { - self.wait(for: [didRunOp2], timeout: 0.2) + nonisolatedSelf.wait(for: [didRunOp2], timeout: 0.2) didRunOp1.fulfill() } queue.addOperation { @@ -701,9 +724,10 @@ class TestOperationQueue : XCTestCase { let didRunOp1Completion = expectation(description: "Did run first operation completion") let didRunOp1Dependency = expectation(description: "Did run first operation dependency") let didRunOp2 = expectation(description: "Did run second operation") - + + nonisolated(unsafe) let nonisolatedSelf = self let op1 = BlockOperation { - self.wait(for: [didRunOp1Dependency, didRunOp2], timeout: 0.2) + nonisolatedSelf.wait(for: [didRunOp1Dependency, didRunOp2], timeout: 0.2) didRunOp1.fulfill() } op1.completionBlock = { @@ -738,7 +762,7 @@ class TestOperationQueue : XCTestCase { } } -class AsyncOperation: Operation { +class AsyncOperation: Operation, @unchecked Sendable { private let queue = DispatchQueue(label: "async.operation.queue") private let lock = NSLock() @@ -803,7 +827,7 @@ class AsyncOperation: Operation { } -class SyncOperation: Operation { +class SyncOperation: Operation, @unchecked Sendable { var hasRun = false diff --git a/Tests/Foundation/TestProcess.swift b/Tests/Foundation/TestProcess.swift index 7d34cddaa8..3754cab9f3 100644 --- a/Tests/Foundation/TestProcess.swift +++ b/Tests/Foundation/TestProcess.swift @@ -7,6 +7,8 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +import Synchronization + class TestProcess : XCTestCase { func test_exit0() throws { @@ -18,7 +20,7 @@ class TestProcess : XCTestCase { // Fallback on earlier versions process.launchPath = executableURL.path } - XCTAssertEqual(executableURL.path, process.launchPath) + XCTAssertEqual(executableURL.path, process.executableURL?.path) process.arguments = ["--exit", "0"] try process.run() process.waitUntilExit() @@ -339,7 +341,7 @@ class TestProcess : XCTestCase { XCTAssertNoThrow(try process.run()) process.waitUntilExit() XCTAssertThrowsError(try process.run()) { - let nserror = ($0 as! NSError) + let nserror = ($0 as NSError) XCTAssertEqual(nserror.domain, NSCocoaErrorDomain) let code = CocoaError(_nsError: nserror).code XCTAssertEqual(code, .executableLoad) @@ -363,7 +365,7 @@ class TestProcess : XCTestCase { XCTAssertThrowsError(try process.run()) } XCTAssertEqual(fm.currentDirectoryPath, cwd) - fm.changeCurrentDirectoryPath(cwd) + _ = fm.changeCurrentDirectoryPath(cwd) } func test_preStartEndState() { @@ -450,7 +452,7 @@ class TestProcess : XCTestCase { #if os(Windows) throw XCTSkip("Windows does not have signals") #else - let helper = _SignalHelperRunner() + nonisolated(unsafe) let helper = _SignalHelperRunner() do { try helper.start() } catch { @@ -578,28 +580,27 @@ class TestProcess : XCTestCase { task.executableURL = url task.arguments = [] let stdoutPipe = Pipe() - let dataLock = NSLock() + let stdoutData = Mutex(Data()) task.standardOutput = stdoutPipe - var stdoutData = Data() stdoutPipe.fileHandleForReading.readabilityHandler = { fh in - dataLock.synchronized { - stdoutData.append(fh.availableData) + stdoutData.withLock { + $0.append(fh.availableData) } } try task.run() task.waitUntilExit() stdoutPipe.fileHandleForReading.readabilityHandler = nil - try dataLock.synchronized { + try stdoutData.withLock { if let d = try stdoutPipe.fileHandleForReading.readToEnd() { - stdoutData.append(d) + $0.append(d) } - XCTAssertEqual(String(data: stdoutData, encoding: .utf8)?.trimmingCharacters(in: .whitespacesAndNewlines), "No files specified.") + XCTAssertEqual(String(data: $0, encoding: .utf8)?.trimmingCharacters(in: .whitespacesAndNewlines), "No files specified.") } } - + @available(*, deprecated) // test of deprecated API, suppress deprecation warning func test_currentDirectory() throws { let process = Process() @@ -639,7 +640,7 @@ class TestProcess : XCTestCase { process.executableURL = URL(fileURLWithPath: "/some_file_that_doesnt_exist", isDirectory: false) XCTAssertThrowsError(try process.run()) { - let code = CocoaError.Code(rawValue: ($0 as? NSError)!.code) + let code = CocoaError.Code(rawValue: ($0 as NSError).code) XCTAssertEqual(code, .fileReadNoSuchFile) } @@ -702,7 +703,7 @@ class TestProcess : XCTestCase { } XCTAssertThrowsError(try runTask([xdgTestHelperURL().path, "--getcwd"], currentDirectoryPath: "/some_directory_that_doesnt_exsit")) { error in - let code = CocoaError.Code(rawValue: (error as? NSError)!.code) + let code = CocoaError.Code(rawValue: (error as NSError).code) XCTAssertEqual(code, .fileReadNoSuchFile) } } @@ -876,34 +877,33 @@ class _SignalHelperRunner { process.arguments = ["--signal-test"] process.standardOutput = outputPipe.fileHandleForWriting - outputPipe.fileHandleForReading.readabilityHandler = { [weak self] fh in - if let strongSelf = self { - let newLine = UInt8(ascii: "\n") - - strongSelf.bytesIn.append(fh.availableData) - if strongSelf.bytesIn.isEmpty { - return - } - // Split the incoming data into lines. - while let index = strongSelf.bytesIn.firstIndex(of: newLine) { - if index >= strongSelf.bytesIn.startIndex { - // don't include the newline when converting to string - let line = String(data: strongSelf.bytesIn[strongSelf.bytesIn.startIndex..= nonisolatedSelf.bytesIn.startIndex { + // don't include the newline when converting to string + let line = String(data: nonisolatedSelf.bytesIn[nonisolatedSelf.bytesIn.startIndex.. Void { self.totalBytesWritten = totalBytesWritten + expectation.fulfill() } } - let delegate = AsyncDownloadDelegate() + let expect = expectation(description: "test_asyncDownloadFromURLWithDelegate") + + let delegate = AsyncDownloadDelegate(expectation: expect) let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/country.txt" let (location, response) = try await URLSession.shared.download(from: URL(string: urlString)!, delegate: delegate) @@ -337,12 +353,13 @@ class TestURLSession: LoopbackServerTest { XCTFail("Did not get response") return } + waitForExpectations(timeout: 12) XCTAssertEqual(200, httpResponse.statusCode, "HTTP response code is not 200") XCTAssertNotNil(location, "Download location was nil") XCTAssertTrue(delegate.totalBytesWritten > 0) } - func test_gzippedDownloadTask() { + func test_gzippedDownloadTask() async { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/gzipped-response" let url = URL(string: urlString)! let d = DownloadTask(testCase: self, description: "GET \(urlString): gzipped response") @@ -353,7 +370,7 @@ class TestURLSession: LoopbackServerTest { } } - func test_finishTasksAndInvalidate() { + func test_finishTasksAndInvalidate() async { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/Nepal" let invalidateExpectation = expectation(description: "Session invalidation") let delegate = SessionDelegate(invalidateExpectation: invalidateExpectation) @@ -369,7 +386,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 12) } - func test_taskError() { + func test_taskError() async { let urlString = "http://127.0.0.0:999999/Nepal" let url = URL(string: urlString)! let session = URLSession(configuration: URLSessionConfiguration.default, @@ -404,7 +421,7 @@ class TestURLSession: LoopbackServerTest { } // This test is buggy because the server could respond before the task is cancelled. - func test_cancelTask() { + func test_cancelTask() async { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/Peru" var urlRequest = URLRequest(url: URL(string: urlString)!) urlRequest.setValue("2.0", forHTTPHeaderField: "X-Pause") @@ -415,7 +432,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 12) } - func test_unhandledURLProtocol() { + func test_unhandledURLProtocol() async { let urlString = "foobar://127.0.0.1:\(TestURLSession.serverPort)/Nepal" let url = URL(string: urlString)! let session = URLSession(configuration: URLSessionConfiguration.default, @@ -438,7 +455,7 @@ class TestURLSession: LoopbackServerTest { } } - func test_requestToNilURL() { + func test_requestToNilURL() async { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/Nepal" let url = URL(string: urlString)! let session = URLSession(configuration: URLSessionConfiguration.default, @@ -463,7 +480,7 @@ class TestURLSession: LoopbackServerTest { } } - func test_suspendResumeTask() throws { + func test_suspendResumeTask() async throws { throw XCTSkip("This test is disabled (occasionally breaks)") #if false let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/get" @@ -504,7 +521,7 @@ class TestURLSession: LoopbackServerTest { } - func test_verifyRequestHeaders() { + func test_verifyRequestHeaders() async { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 5 let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/requestHeaders" @@ -530,7 +547,7 @@ class TestURLSession: LoopbackServerTest { // Verify httpAdditionalHeaders from session configuration are added to the request // and whether it is overriden by Request.allHTTPHeaderFields. - func test_verifyHttpAdditionalHeaders() { + func test_verifyHttpAdditionalHeaders() async { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 5 config.httpAdditionalHeaders = ["header2": "svalue2", "header3": "svalue3", "header4": "svalue4"] @@ -558,7 +575,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 30) } - func test_taskTimeout() { + func test_taskTimeout() async { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 5 let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/Peru" @@ -574,7 +591,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 30) } - func test_httpTimeout() { + func test_httpTimeout() async { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 10 let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/Peru" @@ -591,7 +608,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 30) } - func test_connectTimeout() { + func test_connectTimeout() async throws { // Reconfigure http server for this specific scenario: // a slow request keeps web server busy, while other // request times out on connection attempt. @@ -620,7 +637,7 @@ class TestURLSession: LoopbackServerTest { XCTAssertEqual((error as? URLError)?.code, .timedOut, "Task should fail with URLError.timedOut error") } slowTask.resume() - Thread.sleep(forTimeInterval: 0.1) // Give slow task some time to start + try await Task.sleep(nanoseconds: 100_000_000) // Give slow task some time to start fastTask.resume() waitForExpectations(timeout: 30) @@ -631,7 +648,7 @@ class TestURLSession: LoopbackServerTest { Self.startServer() } - func test_repeatedRequestsStress() throws { + func test_repeatedRequestsStress() async throws { // TODO: try disabling curl connection cache to force socket close early. Or create several url sessions (they have cleanup in deinit) let config = URLSessionConfiguration.default @@ -639,10 +656,10 @@ class TestURLSession: LoopbackServerTest { let session = URLSession(configuration: config, delegate: nil, delegateQueue: nil) let req = URLRequest(url: URL(string: urlString)!) - var requestsLeft = 3000 + nonisolated(unsafe) var requestsLeft = 3000 let expect = expectation(description: "\(requestsLeft) x GET \(urlString)") - func doRequests(completion: @escaping () -> Void) { + @Sendable func doRequests(completion: @Sendable @escaping () -> Void) { // We only care about completion of one of the tasks, // so we could move to next cycle. // Some overlapping would happen and that's what we @@ -660,7 +677,7 @@ class TestURLSession: LoopbackServerTest { task3.resume() } - func checkCountAndRunNext() { + @Sendable func checkCountAndRunNext() { guard requestsLeft > 0 else { expect.fulfill() return @@ -674,7 +691,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 30) } - func test_httpRedirectionWithCode300() throws { + func test_httpRedirectionWithCode300() async throws { let statusCode = 300 for method in httpMethods { let testMethod = "\(method) request with statusCode \(statusCode)" @@ -716,7 +733,7 @@ class TestURLSession: LoopbackServerTest { } } - func test_httpRedirectionWithCode301_302() throws { + func test_httpRedirectionWithCode301_302() async throws { for statusCode in 301...302 { for method in httpMethods { let testMethod = "\(method) request with statusCode \(statusCode)" @@ -763,7 +780,7 @@ class TestURLSession: LoopbackServerTest { } } - func test_httpRedirectionWithCode303() throws { + func test_httpRedirectionWithCode303() async throws { let statusCode = 303 for method in httpMethods { let testMethod = "\(method) request with statusCode \(statusCode)" @@ -797,7 +814,7 @@ class TestURLSession: LoopbackServerTest { } } - func test_httpRedirectionWithCode304() throws { + func test_httpRedirectionWithCode304() async throws { let statusCode = 304 for method in httpMethods { let testMethod = "\(method) request with statusCode \(statusCode)" @@ -827,7 +844,7 @@ class TestURLSession: LoopbackServerTest { } } - func test_httpRedirectionWithCode305_308() throws { + func test_httpRedirectionWithCode305_308() async throws { for statusCode in 305...308 { for method in httpMethods { let testMethod = "\(method) request with statusCode \(statusCode)" @@ -872,7 +889,7 @@ class TestURLSession: LoopbackServerTest { } } - func test_httpRedirectDontFollowUsingNil() throws { + func test_httpRedirectDontFollowUsingNil() async throws { let statusCode = 302 for method in httpMethods { let testMethod = "\(method) request with statusCode \(statusCode)" @@ -931,7 +948,7 @@ class TestURLSession: LoopbackServerTest { } } - func test_httpRedirectDontFollowIgnoringHandler() throws { + func test_httpRedirectDontFollowIgnoringHandler() async throws { let statusCode = 302 for method in httpMethods { let testMethod = "\(method) request with statusCode \(statusCode)" @@ -959,7 +976,7 @@ class TestURLSession: LoopbackServerTest { } } - func test_httpRedirectionWithCompleteRelativePath() { + func test_httpRedirectionWithCompleteRelativePath() async { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/UnitedStates" let url = URL(string: urlString)! let d = HTTPRedirectionDataTask(with: expectation(description: "GET \(urlString): with HTTP redirection")) @@ -967,7 +984,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 12) } - func test_httpRedirectionWithInCompleteRelativePath() { + func test_httpRedirectionWithInCompleteRelativePath() async { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/UnitedKingdom" let url = URL(string: urlString)! let d = HTTPRedirectionDataTask(with: expectation(description: "GET \(urlString): with HTTP redirection")) @@ -975,7 +992,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 12) } - func test_httpRedirectionWithDefaultPort() { + func test_httpRedirectionWithDefaultPort() async { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/redirect-with-default-port" let url = URL(string: urlString)! let d = HTTPRedirectionDataTask(with: expectation(description: "GET \(urlString): with HTTP redirection")) @@ -983,7 +1000,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 12) } - func test_httpRedirectionWithEncodedQuery() { + func test_httpRedirectionWithEncodedQuery() async { let location = "echo-query%3Fparam%3Dfoo" // "echo-query?param=foo" url encoded let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/303?location=\(location)" let url = URL(string: urlString)! @@ -999,7 +1016,7 @@ class TestURLSession: LoopbackServerTest { } // temporarily disabled (https://bugs.swift.org/browse/SR-5751) - func test_httpRedirectionTimeout() { + func test_httpRedirectionTimeout() async { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/UnitedStates" var req = URLRequest(url: URL(string: urlString)!) req.timeoutInterval = 3 @@ -1019,7 +1036,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 12) } - func test_httpRedirectionChainInheritsTimeoutInterval() throws { + func test_httpRedirectionChainInheritsTimeoutInterval() async throws { throw XCTSkip("This test is disabled (https://bugs.swift.org/browse/SR-14433)") #if false let redirectCount = 4 @@ -1049,7 +1066,7 @@ class TestURLSession: LoopbackServerTest { #endif } - func test_httpRedirectionExceededMaxRedirects() throws { + func test_httpRedirectionExceededMaxRedirects() async throws { throw XCTSkip("This test is disabled (https://bugs.swift.org/browse/SR-14433)") #if false let expectedMaxRedirects = 20 @@ -1094,7 +1111,7 @@ class TestURLSession: LoopbackServerTest { #endif } - func test_willPerformRedirect() throws { + func test_willPerformRedirect() async throws { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/redirect/1" let url = try XCTUnwrap(URL(string: urlString)) let redirectURL = try XCTUnwrap(URL(string: "http://127.0.0.1:\(TestURLSession.serverPort)/jsonBody")) @@ -1120,7 +1137,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 5) } - func test_httpNotFound() throws { + func test_httpNotFound() async throws { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/404" let url = try XCTUnwrap(URL(string: urlString)) @@ -1148,7 +1165,7 @@ class TestURLSession: LoopbackServerTest { } } - func test_http0_9SimpleResponses() throws { + func test_http0_9SimpleResponses() async throws { throw XCTSkip("This test is disabled (breaks on Ubuntu 20.04)") #if false for brokenCity in ["Pompeii", "Sodom"] { @@ -1178,7 +1195,7 @@ class TestURLSession: LoopbackServerTest { #endif } - func test_outOfRangeButCorrectlyFormattedHTTPCode() { + func test_outOfRangeButCorrectlyFormattedHTTPCode() async { let brokenCity = "Kameiros" let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/LandOfTheLostCities/\(brokenCity)" let url = URL(string: urlString)! @@ -1204,7 +1221,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 12) } - func test_missingContentLengthButStillABody() { + func test_missingContentLengthButStillABody() async { let brokenCity = "Myndus" let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/LandOfTheLostCities/\(brokenCity)" let url = URL(string: urlString)! @@ -1231,7 +1248,7 @@ class TestURLSession: LoopbackServerTest { } - func test_illegalHTTPServerResponses() { + func test_illegalHTTPServerResponses() async { for brokenCity in ["Gomorrah", "Dinavar", "Kuhikugu"] { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/LandOfTheLostCities/\(brokenCity)" let url = URL(string: urlString)! @@ -1252,20 +1269,19 @@ class TestURLSession: LoopbackServerTest { } } - func test_dataTaskWithSharedDelegate() { - let sharedDelegate = SharedDelegate() + func test_dataTaskWithSharedDelegate() async { let urlString0 = "http://127.0.0.1:\(TestURLSession.serverPort)/Nepal" + let sharedDelegate = SharedDelegate(dataCompletionExpectation: expectation(description: "GET \(urlString0)")) let session = URLSession(configuration: .default, delegate: sharedDelegate, delegateQueue: nil) let dataRequest = URLRequest(url: URL(string: urlString0)!) let dataTask = session.dataTask(with: dataRequest) - sharedDelegate.dataCompletionExpectation = expectation(description: "GET \(urlString0)") dataTask.resume() waitForExpectations(timeout: 20) } - func test_simpleUploadWithDelegate() { + func test_simpleUploadWithDelegate() async { let delegate = HTTPUploadDelegate() let session = URLSession(configuration: .default, delegate: delegate, delegateQueue: nil) let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/upload" @@ -1282,7 +1298,7 @@ class TestURLSession: LoopbackServerTest { } - func test_requestWithEmptyBody() throws { + func test_requestWithEmptyBody() async throws { for method in httpMethods { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/" + method.lowercased() let url = try XCTUnwrap(URL(string: urlString)) @@ -1338,7 +1354,7 @@ class TestURLSession: LoopbackServerTest { } } - func test_requestWithNonEmptyBody() throws { + func test_requestWithNonEmptyBody() async throws { throw XCTSkip("This test is disabled (started failing for no readily available reason)") #if false let bodyData = try XCTUnwrap("This is a request body".data(using: .utf8)) @@ -1421,7 +1437,7 @@ class TestURLSession: LoopbackServerTest { } - func test_concurrentRequests() throws { + func test_concurrentRequests() async throws { throw XCTSkip("This test is disabled (Intermittent SEGFAULT: rdar://84519512)") #if false let tasks = 10 @@ -1463,7 +1479,7 @@ class TestURLSession: LoopbackServerTest { } } - func test_disableCookiesStorage() { + func test_disableCookiesStorage() async { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 5 config.httpCookieAcceptPolicy = HTTPCookie.AcceptPolicy.never @@ -1490,7 +1506,7 @@ class TestURLSession: LoopbackServerTest { XCTAssertEqual(cookies?.count, 0) } - func test_cookiesStorage() { + func test_cookiesStorage() async { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 5 emptyCookieStorage(storage: config.httpCookieStorage) @@ -1515,7 +1531,7 @@ class TestURLSession: LoopbackServerTest { XCTAssertEqual(cookies?.count, 1) } - func test_redirectionWithSetCookies() { + func test_redirectionWithSetCookies() async { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 5 emptyCookieStorage(storage: config.httpCookieStorage) @@ -1539,7 +1555,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 30) } - func test_previouslySetCookiesAreSentInLaterRequests() { + func test_previouslySetCookiesAreSentInLaterRequests() async { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 5 emptyCookieStorage(storage: config.httpCookieStorage) @@ -1552,9 +1568,7 @@ class TestURLSession: LoopbackServerTest { let urlString2 = "http://127.0.0.1:\(TestURLSession.serverPort)/echoHeaders" let expect2 = expectation(description: "POST \(urlString2)") - var req2 = URLRequest(url: URL(string: urlString2)!) - req2.httpMethod = "POST" - + let task1 = session.dataTask(with: req1) { (data, response, error) -> Void in defer { expect1.fulfill() } XCTAssertNotNil(data) @@ -1565,6 +1579,9 @@ class TestURLSession: LoopbackServerTest { } XCTAssertNotNil(httpResponse.allHeaderFields["Set-Cookie"]) + var req2 = URLRequest(url: URL(string: urlString2)!) + req2.httpMethod = "POST" + let task2 = session.dataTask(with: req2) { (data, _, error) -> Void in defer { expect2.fulfill() } guard let data = try? XCTUnwrap(data) else { @@ -1582,7 +1599,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 30) } - func test_cookieStorageForEphemeralConfiguration() { + func test_cookieStorageForEphemeralConfiguration() async { let config = URLSessionConfiguration.ephemeral config.timeoutIntervalForRequest = 5 emptyCookieStorage(storage: config.httpCookieStorage) @@ -1607,7 +1624,7 @@ class TestURLSession: LoopbackServerTest { XCTAssertEqual(cookies2?.count, 0) } - func test_setCookieHeadersCanBeIgnored() { + func test_setCookieHeadersCanBeIgnored() async { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 5 config.httpShouldSetCookies = false @@ -1621,8 +1638,6 @@ class TestURLSession: LoopbackServerTest { let urlString2 = "http://127.0.0.1:\(TestURLSession.serverPort)/echoHeaders" let expect2 = expectation(description: "POST \(urlString2)") - var req2 = URLRequest(url: URL(string: urlString2)!) - req2.httpMethod = "POST" let task1 = session.dataTask(with: req1) { (data, response, error) -> Void in defer { expect1.fulfill() } @@ -1634,6 +1649,9 @@ class TestURLSession: LoopbackServerTest { } XCTAssertNotNil(httpResponse.allHeaderFields["Set-Cookie"]) + var req2 = URLRequest(url: URL(string: urlString2)!) + req2.httpMethod = "POST" + let task2 = session.dataTask(with: req2) { (data, _, error) -> Void in defer { expect2.fulfill() } guard let data = try? XCTUnwrap(data) else { @@ -1652,7 +1670,7 @@ class TestURLSession: LoopbackServerTest { } // Validate that the properties are correctly set - func test_initURLSessionConfiguration() { + func test_initURLSessionConfiguration() async { let config = URLSessionConfiguration.default config.requestCachePolicy = .useProtocolCachePolicy config.timeoutIntervalForRequest = 30 @@ -1685,7 +1703,7 @@ class TestURLSession: LoopbackServerTest { XCTAssertEqual(config.shouldUseExtendedBackgroundIdleMode, true) } - func test_basicAuthRequest() { + func test_basicAuthRequest() async { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/auth/basic" let url = URL(string: urlString)! let d = DataTask(with: expectation(description: "GET \(urlString): with a delegate")) @@ -1694,7 +1712,7 @@ class TestURLSession: LoopbackServerTest { } /* Test for SR-8970 to verify that content-type header is not added to post with empty body */ - func test_postWithEmptyBody() { + func test_postWithEmptyBody() async { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 5 let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/emptyPost" @@ -1712,7 +1730,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 30) } - func test_basicAuthWithUnauthorizedHeader() { + func test_basicAuthWithUnauthorizedHeader() async { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/unauthorized" let url = URL(string: urlString)! let expect = expectation(description: "GET \(urlString): with a completion handler") @@ -1726,7 +1744,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 12, handler: nil) } - func test_checkErrorTypeAfterInvalidateAndCancel() throws { + func test_checkErrorTypeAfterInvalidateAndCancel() async throws { let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/country.txt" let url = try XCTUnwrap(URL(string: urlString)) var urlRequest = URLRequest(url: url) @@ -1750,7 +1768,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 5) } - func test_taskCountAfterInvalidateAndCancel() throws { + func test_taskCountAfterInvalidateAndCancel() async throws { let expect = expectation(description: "Check task count after invalidateAndCancel") let session = URLSession(configuration: .default) @@ -1780,30 +1798,30 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 5) } - func test_sessionDelegateAfterInvalidateAndCancel() { + func test_sessionDelegateAfterInvalidateAndCancel() async throws { let delegate = SessionDelegate() let session = URLSession(configuration: .default, delegate: delegate, delegateQueue: nil) session.invalidateAndCancel() - Thread.sleep(forTimeInterval: 2) + try await Task.sleep(nanoseconds: 2_000_000_000) XCTAssertNil(session.delegate) } - func test_sessionDelegateCalledIfTaskDelegateDoesNotImplement() throws { + func test_sessionDelegateCalledIfTaskDelegateDoesNotImplement() async throws { let expectation = XCTestExpectation(description: "task finished") let delegate = SessionDelegate(with: expectation) let session = URLSession(configuration: .default, delegate: delegate, delegateQueue: nil) - class EmptyTaskDelegate: NSObject, URLSessionTaskDelegate { } + final class EmptyTaskDelegate: NSObject, URLSessionTaskDelegate, Sendable { } let url = URL(string: "http://127.0.0.1:\(TestURLSession.serverPort)/country.txt")! let request = URLRequest(url: url) let task = session.dataTask(with: request) task.delegate = EmptyTaskDelegate() task.resume() - wait(for: [expectation], timeout: 5) + await fulfillment(of: [expectation], timeout: 5) } - func test_getAllTasks() throws { + func test_getAllTasks() async throws { throw XCTSkip("This test is disabled (this causes later ones to crash)") #if false let expect = expectation(description: "Tasks URLSession.getAllTasks") @@ -1854,7 +1872,7 @@ class TestURLSession: LoopbackServerTest { #endif } - func test_getTasksWithCompletion() throws { + func test_getTasksWithCompletion() async throws { throw XCTSkip("This test is disabled (Flaky tests)") #if false let expect = expectation(description: "Test URLSession.getTasksWithCompletion") @@ -1905,7 +1923,7 @@ class TestURLSession: LoopbackServerTest { #endif } - func test_noDoubleCallbackWhenCancellingAndProtocolFailsFast() throws { + func test_noDoubleCallbackWhenCancellingAndProtocolFailsFast() async throws { throw XCTSkip("This test is disabled (Crashes nondeterministically: https://bugs.swift.org/browse/SR-11310)") #if false let urlString = "failfast://bogus" @@ -1937,7 +1955,7 @@ class TestURLSession: LoopbackServerTest { #endif } - func test_cancelledTasksCannotBeResumed() throws { + func test_cancelledTasksCannotBeResumed() async throws { throw XCTSkip("This test is disabled (breaks on Ubuntu 18.04)") #if false let url = try XCTUnwrap(URL(string: "http://127.0.0.1:\(TestURLSession.serverPort)/Nepal")) @@ -1956,7 +1974,7 @@ class TestURLSession: LoopbackServerTest { waitForExpectations(timeout: 1) #endif } - func test_invalidResumeDataForDownloadTask() throws { + func test_invalidResumeDataForDownloadTask() async throws { throw XCTSkip("This test is disabled (Crashes nondeterministically: https://bugs.swift.org/browse/SR-11353)") #if false let done = expectation(description: "Invalid resume data for download task (with completion block)") @@ -1983,7 +2001,7 @@ class TestURLSession: LoopbackServerTest { #endif } - func test_simpleUploadWithDelegateProvidingInputStream() throws { + func test_simpleUploadWithDelegateProvidingInputStream() async throws { throw XCTSkip("This test is disabled (Times out frequently: https://bugs.swift.org/browse/SR-11343)") #if false let fileData = Data(count: 16 * 1024) @@ -1998,7 +2016,7 @@ class TestURLSession: LoopbackServerTest { completionHandler(InputStream(data: fileData)) } delegate.runUploadTask(with: request, timeoutInterval: 4) - waitForExpectations(timeout: 5) + await waitForExpectations(timeout: 5) let httpResponse = delegate.response as? HTTPURLResponse let callBacks: [String] @@ -2111,7 +2129,7 @@ class TestURLSession: LoopbackServerTest { XCTAssertEqual(urlError._nsError.code, NSURLErrorNetworkConnectionLost) } - wait(for: [delegate.expectation], timeout: 50) + await fulfillment(of: [delegate.expectation], timeout: 50) do { _ = try await task.receive() @@ -2146,7 +2164,7 @@ class TestURLSession: LoopbackServerTest { task.cancel(with: .normalClosure, reason: "BuhBye".data(using: .utf8)) } - wait(for: [delegate.expectation], timeout: 50) + await fulfillment(of: [delegate.expectation], timeout: 50) let callbacks = [ "urlSession(_:webSocketTask:didOpenWithProtocol:)", "urlSession(_:webSocketTask:didCloseWith:reason:)", @@ -2180,7 +2198,7 @@ class TestURLSession: LoopbackServerTest { XCTAssertEqual(urlError._nsError.code, NSURLErrorBadServerResponse) } - wait(for: [delegate.expectation], timeout: 50) + await fulfillment(of: [delegate.expectation], timeout: 50) do { _ = try await task.receive() @@ -2220,7 +2238,7 @@ class TestURLSession: LoopbackServerTest { XCTAssertEqual(urlError._nsError.code, NSURLErrorNetworkConnectionLost) } - wait(for: [delegate.expectation], timeout: 50) + await fulfillment(of: [delegate.expectation], timeout: 50) do { _ = try await task.receive() @@ -2242,8 +2260,12 @@ class TestURLSession: LoopbackServerTest { #endif } -class SharedDelegate: NSObject { - var dataCompletionExpectation: XCTestExpectation! +class SharedDelegate: NSObject, @unchecked Sendable { + init(dataCompletionExpectation: XCTestExpectation!) { + self.dataCompletionExpectation = dataCompletionExpectation + } + + let dataCompletionExpectation: XCTestExpectation } extension SharedDelegate: URLSessionDataDelegate { @@ -2258,7 +2280,8 @@ extension SharedDelegate: URLSessionDownloadDelegate { } -class SessionDelegate: NSObject, URLSessionDelegate, URLSessionWebSocketDelegate { +// Sendable note: Access to ivars is essentially serialized by the XCTestExpectation. It would be better to do it with a lock, but this is sufficient for now. +class SessionDelegate: NSObject, URLSessionDelegate, URLSessionWebSocketDelegate, @unchecked Sendable { var expectation: XCTestExpectation! = nil var session: URLSession! = nil var task: URLSessionTask! = nil @@ -2427,7 +2450,8 @@ extension SessionDelegate: URLSessionDataDelegate { } } -class DataTask : NSObject { +// Sendable note: Access to ivars is essentially serialized by the XCTestExpectation. It would be better to do it with a lock, but this is sufficient for now. +class DataTask : NSObject, @unchecked Sendable { let syncQ = dispatchQueueMake("org.swift.TestFoundation.TestURLSession.DataTask.syncQ") let dataTaskExpectation: XCTestExpectation! let protocols: [AnyClass]? @@ -2557,7 +2581,8 @@ extension DataTask : URLSessionTaskDelegate { } } -class DownloadTask : NSObject { +// Sendable note: Access to ivars is essentially serialized by the XCTestExpectation. It would be better to do it with a lock, but this is sufficient for now. +class DownloadTask : NSObject, @unchecked Sendable { var totalBytesWritten: Int64 = 0 var didDownloadExpectation: XCTestExpectation? let didCompleteExpectation: XCTestExpectation @@ -2685,7 +2710,8 @@ class FailFastProtocol: URLProtocol { } } -class HTTPRedirectionDataTask: NSObject { +// Sendable note: Access to ivars is essentially serialized by the XCTestExpectation. It would be better to do it with a lock, but this is sufficient for now. +class HTTPRedirectionDataTask: NSObject, @unchecked Sendable { let dataTaskExpectation: XCTestExpectation! var session: URLSession! = nil var task: URLSessionDataTask! = nil @@ -2770,7 +2796,8 @@ extension HTTPRedirectionDataTask: URLSessionTaskDelegate { } } -class HTTPUploadDelegate: NSObject { +// Sendable note: Access to ivars is essentially serialized by the XCTestExpectation. It would be better to do it with a lock, but this is sufficient for now. +class HTTPUploadDelegate: NSObject, @unchecked Sendable { private(set) var callbacks: [String] = [] var uploadCompletedExpectation: XCTestExpectation! diff --git a/Tests/Foundation/TestURLSessionFTP.swift b/Tests/Foundation/TestURLSessionFTP.swift index ffc1e7fa89..37f8e2cb9b 100644 --- a/Tests/Foundation/TestURLSessionFTP.swift +++ b/Tests/Foundation/TestURLSessionFTP.swift @@ -9,6 +9,8 @@ #if !os(Windows) +import Synchronization + class TestURLSessionFTP : LoopbackFTPServerTest { let saveString = """ FTP implementation to test FTP @@ -55,7 +57,8 @@ class TestURLSessionFTP : LoopbackFTPServerTest { } } -class FTPDataTask : NSObject { +// Sendable note: Access to ivars is essentially serialized by the XCTestExpectation. It would be better to do it with a lock, but this is sufficient for now. +class FTPDataTask : NSObject, @unchecked Sendable { let dataTaskExpectation: XCTestExpectation! var fileData: NSMutableData = NSMutableData() var session: URLSession! = nil @@ -64,11 +67,10 @@ class FTPDataTask : NSObject { var responseReceivedExpectation: XCTestExpectation? var hasTransferCompleted = false - private var errorLock = NSLock() - private var _error = false + private let _error = Mutex(false) public var error: Bool { - get { errorLock.synchronized { _error } } - set { errorLock.synchronized { _error = newValue } } + get { _error.withLock { $0 } } + set { _error.withLock { $0 = newValue } } } init(with expectation: XCTestExpectation) { diff --git a/Tests/Foundation/TestUserDefaults.swift b/Tests/Foundation/TestUserDefaults.swift index 28aa2c277a..35bc368c26 100644 --- a/Tests/Foundation/TestUserDefaults.swift +++ b/Tests/Foundation/TestUserDefaults.swift @@ -390,7 +390,7 @@ class TestUserDefaults : XCTestCase { let done = expectation(description: "All notifications have fired.") - var countOfFiredNotifications = 0 + nonisolated(unsafe) var countOfFiredNotifications = 0 let expectedNotificationCount = 3 let observer = NotificationCenter.default.addObserver(forName: UserDefaults.didChangeNotification, object: nil, queue: .main) { (_) in diff --git a/Tests/Foundation/TestXMLDocument.swift b/Tests/Foundation/TestXMLDocument.swift index 5dcbf888df..2f9eaaab9e 100644 --- a/Tests/Foundation/TestXMLDocument.swift +++ b/Tests/Foundation/TestXMLDocument.swift @@ -681,6 +681,7 @@ class TestXMLDocument : LoopbackServerTest { XCTAssertEqual(notationDecl.name, "otherNotation") } + @available(*, deprecated) // test of deprecated API, suppress deprecation warning func test_creatingAnEmptyDocumentAndNode() { _ = XMLDocument() _ = XMLNode() diff --git a/Tests/Foundation/Utilities.swift b/Tests/Foundation/Utilities.swift index 3f2249b84f..e0f6e0fb5d 100644 --- a/Tests/Foundation/Utilities.swift +++ b/Tests/Foundation/Utilities.swift @@ -640,35 +640,6 @@ extension String { } } -extension FileHandle: @retroactive TextOutputStream { - public func write(_ string: String) { - write(Data(string.utf8)) - } - - struct EncodedOutputStream: TextOutputStream { - let fileHandle: FileHandle - let encoding: String.Encoding - - init(_ fileHandle: FileHandle, encoding: String.Encoding) { - self.fileHandle = fileHandle - self.encoding = encoding - } - - func write(_ string: String) { - fileHandle.write(string.data(using: encoding)!) - } - } -} - -extension NSLock { - public func synchronized(_ closure: () throws -> T) rethrows -> T { - self.lock() - defer { self.unlock() } - return try closure() - } -} - - // Create a uniquely named temporary directory, pass the URL and path to a closure then remove the directory afterwards. public func withTemporaryDirectory(functionName: String = #function, block: (URL, String) throws -> R) throws -> R { From 65abf583f017036b551119c2636b73c303a6243e Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Thu, 25 Jul 2024 14:32:22 -0700 Subject: [PATCH 103/198] Re-enable tests requiring isoLatin1/macOSRoman (#5027) --- Package.swift | 2 +- Tests/Foundation/TestDataURLProtocol.swift | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Package.swift b/Package.swift index e7b2c5c3f2..4afccc0700 100644 --- a/Package.swift +++ b/Package.swift @@ -102,7 +102,7 @@ var dependencies: [Package.Dependency] { from: "0.0.9"), .package( url: "https://github.com/apple/swift-foundation", - revision: "d59046871c6b69a13595f18d334afa1553e0ba50") + revision: "acae3d26b69113cec2db7772b4144ab9558241db") ] } } diff --git a/Tests/Foundation/TestDataURLProtocol.swift b/Tests/Foundation/TestDataURLProtocol.swift index 3b9bc484dd..ee29467fe6 100644 --- a/Tests/Foundation/TestDataURLProtocol.swift +++ b/Tests/Foundation/TestDataURLProtocol.swift @@ -79,9 +79,9 @@ class TestDataURLProtocol: XCTestCase { ("data:;charset=utf-16;base64,2D3caCAN2D3caCAN2D3cZyAN2D3cZw==", "👨‍👨‍👧‍👧", (expectedContentLength: 22, mimeType: "text/plain", textEncodingName: "utf-16")), ("data:;charset=utf-16le;base64,Pdho3A0gPdho3A0gPdhn3A0gPdhn3A==", "👨‍👨‍👧‍👧", (expectedContentLength: 22, mimeType: "text/plain", textEncodingName: "utf-16le")), ("data:;charset=utf-16be;base64,2D3caCAN2D3caCAN2D3cZyAN2D3cZw==", "👨‍👨‍👧‍👧", (expectedContentLength: 22, mimeType: "text/plain", textEncodingName: "utf-16be")), -// ("data:application/json;charset=iso-8859-1;key=value,,123", ",123", (expectedContentLength: 4, mimeType: "application/json", textEncodingName: "iso-8859-1")), + ("data:application/json;charset=iso-8859-1;key=value,,123", ",123", (expectedContentLength: 4, mimeType: "application/json", textEncodingName: "iso-8859-1")), ("data:;charset=utf-8;charset=utf-16;image/png,abc", "abc", (expectedContentLength: 3, mimeType: "text/plain", textEncodingName: "utf-8")), -// ("data:a/b;key=value;charset=macroman,blahblah", "blahblah", (expectedContentLength: 8, mimeType: "a/b", textEncodingName: "macroman")), + ("data:a/b;key=value;charset=macroman,blahblah", "blahblah", (expectedContentLength: 8, mimeType: "a/b", textEncodingName: "macroman")), ] let callbacks = [ From 3a3bf2f42374e0b70bb383e88be2443ac519dad0 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Sat, 27 Jul 2024 15:27:52 -0700 Subject: [PATCH 104/198] Fix local CMake build (#5032) --- CMakeLists.txt | 18 ++++++++++++++---- Sources/CoreFoundation/CMakeLists.txt | 3 +++ Sources/Foundation/CMakeLists.txt | 9 ++++++--- Sources/_CFURLSessionInterface/CMakeLists.txt | 4 ++++ Sources/_CFXMLInterface/CMakeLists.txt | 4 ++++ 5 files changed, 31 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 011b2f108e..d293164e34 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,10 +92,21 @@ if(NOT SwiftFoundation_MODULE_TRIPLE) mark_as_advanced(SwiftFoundation_MODULE_TRIPLE) endif() -# System dependencies (fail fast if dependencies are missing) +# System dependencies +find_package(dispatch CONFIG) +if(NOT dispatch_FOUND) + if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") + set(DISPATCH_INCLUDE_PATH "/usr/lib/swift" CACHE STRING "A path to where you can find libdispatch headers") + message("-- dispatch_DIR not found, using dispatch from SDK at ${DISPATCH_INCLUDE_PATH}") + list(APPEND _Foundation_common_build_flags + "-I${DISPATCH_INCLUDE_PATH}" + "-I${DISPATCH_INCLUDE_PATH}/Block") + else() + message(FATAL_ERROR "-- dispatch_DIR is required on this platform") + endif() +endif() find_package(LibXml2 REQUIRED) find_package(CURL REQUIRED) -find_package(dispatch CONFIG REQUIRED) # Common build flags (_CFURLSessionInterface, _CFXMLInterface, CoreFoundation) list(APPEND _Foundation_common_build_flags @@ -148,8 +159,7 @@ list(APPEND _Foundation_swift_build_flags if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") list(APPEND _Foundation_common_build_flags - "-D_GNU_SOURCE" - "-I/usr/lib/swift") # dispatch + "-D_GNU_SOURCE") endif() include(GNUInstallDirs) diff --git a/Sources/CoreFoundation/CMakeLists.txt b/Sources/CoreFoundation/CMakeLists.txt index 23586ad73d..7444abd573 100644 --- a/Sources/CoreFoundation/CMakeLists.txt +++ b/Sources/CoreFoundation/CMakeLists.txt @@ -105,6 +105,9 @@ target_include_directories(CoreFoundation PRIVATE internalInclude) +target_compile_options(CoreFoundation INTERFACE + "$<$:SHELL:-Xcc -fmodule-map-file=${CMAKE_CURRENT_SOURCE_DIR}/include/module.modulemap>") + target_compile_options(CoreFoundation PRIVATE "SHELL:$<$:${_Foundation_common_build_flags}>") diff --git a/Sources/Foundation/CMakeLists.txt b/Sources/Foundation/CMakeLists.txt index 6c5426b1f6..108dfb1c19 100644 --- a/Sources/Foundation/CMakeLists.txt +++ b/Sources/Foundation/CMakeLists.txt @@ -166,11 +166,14 @@ endif() set_target_properties(Foundation PROPERTIES INSTALL_RPATH "$ORIGIN" - BUILD_RPATH "$" INSTALL_REMOVE_ENVIRONMENT_RPATH ON) -target_link_libraries(Foundation PUBLIC - swiftDispatch) +if(dispatch_FOUND) + set_target_properties(Foundation PROPERTIES + BUILD_RPATH "$") + target_link_libraries(Foundation PUBLIC + swiftDispatch) +endif() if(LINKER_SUPPORTS_BUILD_ID) target_link_options(Foundation PRIVATE "LINKER:--build-id=sha1") diff --git a/Sources/_CFURLSessionInterface/CMakeLists.txt b/Sources/_CFURLSessionInterface/CMakeLists.txt index 47fe6a39a4..5ae7da27ff 100644 --- a/Sources/_CFURLSessionInterface/CMakeLists.txt +++ b/Sources/_CFURLSessionInterface/CMakeLists.txt @@ -23,6 +23,10 @@ target_include_directories(_CFURLSessionInterface target_precompile_headers(_CFURLSessionInterface PRIVATE ${CMAKE_SOURCE_DIR}/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h) +target_compile_options(_CFURLSessionInterface INTERFACE + "$<$:SHELL:-Xcc -fmodule-map-file=${CMAKE_CURRENT_SOURCE_DIR}/../CoreFoundation/include/module.modulemap>" + "$<$:SHELL:-Xcc -fmodule-map-file=${CMAKE_CURRENT_SOURCE_DIR}/include/module.modulemap>") + target_compile_options(_CFURLSessionInterface PRIVATE "SHELL:$<$:${_Foundation_common_build_flags}>") diff --git a/Sources/_CFXMLInterface/CMakeLists.txt b/Sources/_CFXMLInterface/CMakeLists.txt index 41b1f08364..d6e63a3f59 100644 --- a/Sources/_CFXMLInterface/CMakeLists.txt +++ b/Sources/_CFXMLInterface/CMakeLists.txt @@ -22,6 +22,10 @@ target_include_directories(_CFXMLInterface ../CoreFoundation/internalInclude /usr/include/libxml2/) +target_compile_options(_CFXMLInterface INTERFACE + "$<$:SHELL:-Xcc -fmodule-map-file=${CMAKE_CURRENT_SOURCE_DIR}/../CoreFoundation/include/module.modulemap>" + "$<$:SHELL:-Xcc -fmodule-map-file=${CMAKE_CURRENT_SOURCE_DIR}/include/module.modulemap>") + target_compile_options(_CFXMLInterface PRIVATE "SHELL:$<$:${_Foundation_common_build_flags}>") From 9e7732b5d8fbf5e2040db74450c89e3041f9c057 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Mon, 29 Jul 2024 15:16:13 -0700 Subject: [PATCH 105/198] Fix SwiftPM build dispatch include path on Windows (#5033) --- CMakeLists.txt | 15 ++++++++------- Package.swift | 32 +++++++++++++++++++------------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d293164e34..30d960cb07 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,14 +96,15 @@ endif() find_package(dispatch CONFIG) if(NOT dispatch_FOUND) if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") - set(DISPATCH_INCLUDE_PATH "/usr/lib/swift" CACHE STRING "A path to where you can find libdispatch headers") - message("-- dispatch_DIR not found, using dispatch from SDK at ${DISPATCH_INCLUDE_PATH}") - list(APPEND _Foundation_common_build_flags - "-I${DISPATCH_INCLUDE_PATH}" - "-I${DISPATCH_INCLUDE_PATH}/Block") - else() - message(FATAL_ERROR "-- dispatch_DIR is required on this platform") + set(DEFAULT_DISPATCH_INCLUDE_PATH "/usr/lib/swift") + elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(DEFAULT_DISPATCH_INCLUDE_PATH "$ENV{SDKROOT}usr/include") endif() + set(DISPATCH_INCLUDE_PATH "${DEFAULT_DISPATCH_INCLUDE_PATH}" CACHE STRING "A path to where you can find libdispatch headers") + message("-- dispatch_DIR not found, using dispatch from SDK at ${DISPATCH_INCLUDE_PATH}") + list(APPEND _Foundation_common_build_flags + "-I${DISPATCH_INCLUDE_PATH}" + "-I${DISPATCH_INCLUDE_PATH}/Block") endif() find_package(LibXml2 REQUIRED) find_package(CURL REQUIRED) diff --git a/Package.swift b/Package.swift index 4afccc0700..fc639c7be8 100644 --- a/Package.swift +++ b/Package.swift @@ -3,17 +3,25 @@ import PackageDescription -var dispatchIncludeFlags: CSetting +var dispatchIncludeFlags: [CSetting] if let environmentPath = Context.environment["DISPATCH_INCLUDE_PATH"] { - dispatchIncludeFlags = .unsafeFlags([ + dispatchIncludeFlags = [.unsafeFlags([ "-I\(environmentPath)", "-I\(environmentPath)/Block" - ]) + ])] } else { - dispatchIncludeFlags = .unsafeFlags([ - "-I/usr/lib/swift", - "-I/usr/lib/swift/Block" - ], .when(platforms: [.linux, .android])) + dispatchIncludeFlags = [ + .unsafeFlags([ + "-I/usr/lib/swift", + "-I/usr/lib/swift/Block" + ], .when(platforms: [.linux, .android])) + ] + if let sdkRoot = Context.environment["SDKROOT"] { + dispatchIncludeFlags.append(.unsafeFlags([ + "-I\(sdkRoot)usr\\include", + "-I\(sdkRoot)usr\\include\\Block", + ], .when(platforms: [.windows]))) + } } let coreFoundationBuildSettings: [CSetting] = [ @@ -43,9 +51,8 @@ let coreFoundationBuildSettings: [CSetting] = [ "-include", "\(Context.packageDirectory)/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h", // /EHsc for Windows - ]), - dispatchIncludeFlags -] + ]) +] + dispatchIncludeFlags // For _CFURLSessionInterface, _CFXMLInterface let interfaceBuildSettings: [CSetting] = [ @@ -71,9 +78,8 @@ let interfaceBuildSettings: [CSetting] = [ "-fno-common", "-fcf-runtime-abi=swift" // /EHsc for Windows - ]), - dispatchIncludeFlags -] + ]) +] + dispatchIncludeFlags let swiftBuildSettings: [SwiftSetting] = [ .define("DEPLOYMENT_RUNTIME_SWIFT"), From 34207468898d34be15d6a14a103b8595d3d01367 Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Sat, 20 Jul 2024 14:56:26 -0700 Subject: [PATCH 106/198] Add default implementations for three default protocol conformances in the URLSessionDelegate family Implementing these callbacks without calling the completion handler causes hangs in cases where these methods are called. Add reasonable default behaviors for all of them, to prevent this. This issue has been in place for at least 8 years for one of these callbacks. --- .../URLSession/URLSessionDelegate.swift | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/Sources/FoundationNetworking/URLSession/URLSessionDelegate.swift b/Sources/FoundationNetworking/URLSession/URLSessionDelegate.swift index 8ec0729968..d9ef60de98 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionDelegate.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionDelegate.swift @@ -76,7 +76,9 @@ public protocol URLSessionDelegate : NSObjectProtocol, Sendable { extension URLSessionDelegate { public func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) { } - public func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @Sendable @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { } + public func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @Sendable @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { + completionHandler(.performDefaultHandling, nil) + } } /* If an application has received an @@ -244,7 +246,13 @@ public protocol URLSessionDataDelegate : URLSessionTaskDelegate { extension URLSessionDataDelegate { - public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @Sendable @escaping (URLSession.ResponseDisposition) -> Void) { } + public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @Sendable @escaping (URLSession.ResponseDisposition) -> Void) { + if self === dataTask.delegate, let sessionDelegate = session.delegate as? URLSessionDataDelegate, self !== sessionDelegate { + sessionDelegate.urlSession(session, dataTask: dataTask, didReceive: response, completionHandler: completionHandler) + } else { + completionHandler(.allow) + } + } public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didBecome downloadTask: URLSessionDownloadTask) { } @@ -252,7 +260,13 @@ extension URLSessionDataDelegate { public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { } - public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, willCacheResponse proposedResponse: CachedURLResponse, completionHandler: @Sendable @escaping (CachedURLResponse?) -> Void) { } + public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, willCacheResponse proposedResponse: CachedURLResponse, completionHandler: @Sendable @escaping (CachedURLResponse?) -> Void) { + if self === dataTask.delegate, let sessionDelegate = session.delegate as? URLSessionDataDelegate, self !== sessionDelegate { + sessionDelegate.urlSession(session, dataTask: dataTask, willCacheResponse: proposedResponse, completionHandler: completionHandler) + } else { + completionHandler(proposedResponse) + } + } } /* From aa5c175a66789817150bd49e7d68c8fbd2f1c79d Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Tue, 30 Jul 2024 13:20:16 -0700 Subject: [PATCH 107/198] Disable tests failing on amazon linux (#5036) --- Tests/Foundation/TestDateFormatter.swift | 3 +++ Tests/Foundation/TestTimeZone.swift | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Tests/Foundation/TestDateFormatter.swift b/Tests/Foundation/TestDateFormatter.swift index c495831303..1695f3ecac 100644 --- a/Tests/Foundation/TestDateFormatter.swift +++ b/Tests/Foundation/TestDateFormatter.swift @@ -331,6 +331,8 @@ class TestDateFormatter: XCTestCase { XCTAssertNotNil(result) } +// Test disabled due to Amazon Linux failures (rdar://132784697) +#if false func test_setTimeZoneToNil() { let f = DateFormatter() // Time zone should be the system one by default. @@ -339,6 +341,7 @@ class TestDateFormatter: XCTestCase { // Time zone should go back to the system one. XCTAssertEqual(f.timeZone, NSTimeZone.system) } +#endif func test_setTimeZone() { // Test two different time zones. Should ensure that if one diff --git a/Tests/Foundation/TestTimeZone.swift b/Tests/Foundation/TestTimeZone.swift index 0fd100bfc7..6d2fbaf2ae 100644 --- a/Tests/Foundation/TestTimeZone.swift +++ b/Tests/Foundation/TestTimeZone.swift @@ -156,7 +156,8 @@ class TestTimeZone: XCTestCase { XCTAssertEqual(actualIdentifier, expectedIdentifier, "expected identifier \"\(expectedIdentifier)\" is not equal to \"\(actualIdentifier as Optional)\"") } -#if !os(Windows) +// Test disabled due to Amazon Linux failures (rdar://132784697) +#if !os(Windows) && false func test_systemTimeZoneUsesSystemTime() { tzset() var t = time(nil) From 1ed5181c4d02cd2e2a90cd623e22bbd2c9a26e05 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Tue, 30 Jul 2024 15:06:29 -0700 Subject: [PATCH 108/198] Make sure that the once used for Process is static, so not recreated for each setup (#5038) --- Sources/Foundation/Process.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/Foundation/Process.swift b/Sources/Foundation/Process.swift index 7a49932004..ee35c23a33 100644 --- a/Sources/Foundation/Process.swift +++ b/Sources/Foundation/Process.swift @@ -226,9 +226,9 @@ private func quoteWindowsCommandLine(_ commandLine: [String]) -> String { #endif open class Process: NSObject, @unchecked Sendable { + static let once = Mutex(false) + private static func setup() { - let once = Mutex(false) - once.withLock { if !$0 { let thread = Thread { From 8e4ddae2400068ac620bee2bc9bc893f875ccf22 Mon Sep 17 00:00:00 2001 From: Alexander Smarus Date: Wed, 31 Jul 2024 05:31:51 +0300 Subject: [PATCH 109/198] Make completion-based send/receive functions public in `URLSessionWebSocketTask` (#5030) --- .../URLSession/URLSessionTask.swift | 6 +- Tests/Foundation/TestURLSession.swift | 101 ++++++++++++++++++ 2 files changed, 105 insertions(+), 2 deletions(-) diff --git a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift index 4968494b35..349291a765 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionTask.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionTask.swift @@ -830,7 +830,8 @@ open class URLSessionWebSocketTask : URLSessionTask, @unchecked Sendable { } } - private func send(_ message: Message, completionHandler: @Sendable @escaping (Error?) -> Void) { + @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) + public func send(_ message: Message, completionHandler: @Sendable @escaping (Error?) -> Void) { self.workQueue.async { self.sendBuffer.append((message, completionHandler)) self.doPendingWork() @@ -846,7 +847,8 @@ open class URLSessionWebSocketTask : URLSessionTask, @unchecked Sendable { } } - private func receive(completionHandler: @Sendable @escaping (Result) -> Void) { + @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) + public func receive(completionHandler: @Sendable @escaping (Result) -> Void) { self.workQueue.async { self.receiveCompletionHandlers.append(completionHandler) self.doPendingWork() diff --git a/Tests/Foundation/TestURLSession.swift b/Tests/Foundation/TestURLSession.swift index 04226bbfd2..465683a00a 100644 --- a/Tests/Foundation/TestURLSession.swift +++ b/Tests/Foundation/TestURLSession.swift @@ -2146,6 +2146,107 @@ final class TestURLSession: LoopbackServerTest, @unchecked Sendable { XCTAssertEqual(delegate.callbacks, callbacks, "Callbacks for \(#function)") } + func test_webSocketCompletions() async throws { + guard #available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) else { return } + guard URLSessionWebSocketTask.supportsWebSockets else { + print("libcurl lacks WebSockets support, skipping \(#function)") + return + } + + let urlString = "ws://127.0.0.1:\(TestURLSession.serverPort)/web-socket" + let url = try XCTUnwrap(URL(string: urlString)) + let request = URLRequest(url: url) + + let delegate = SessionDelegate(with: expectation(description: "\(urlString): Connect")) + let task = delegate.runWebSocketTask(with: request, timeoutInterval: 4) + + // We interleave sending and receiving, as the test HTTPServer implementation is barebones, and can't handle receiving more than one frame at a time. So, this back-and-forth acts as a gating mechanism + + let didCompleteSendingString = expectation(description: "Did complete sending a string") + task.send(.string("Hello")) { error in + XCTAssertNil(error) + didCompleteSendingString.fulfill() + } + await fulfillment(of: [didCompleteSendingString], timeout: 5.0) + + let didCompleteReceivingString = expectation(description: "Did complete receiving a string") + task.receive { result in + switch result { + case .failure(let error): + XCTFail() + case .success(let stringMessage): + switch stringMessage { + case .string(let str): + XCTAssert(str == "Hello") + default: + XCTFail("Unexpected String Message") + } + } + didCompleteReceivingString.fulfill() + } + await fulfillment(of: [didCompleteReceivingString], timeout: 5.0) + + let didCompleteSendingData = expectation(description: "Did complete sending data") + task.send(.data(Data([0x20, 0x22, 0x10, 0x03]))) { error in + XCTAssertNil(error) + didCompleteSendingData.fulfill() + } + await fulfillment(of: [didCompleteSendingData], timeout: 5.0) + + let didCompleteReceivingData = expectation(description: "Did complete receiving data") + task.receive { result in + switch result { + case .failure(let error): + XCTFail() + case .success(let dataMessage): + switch dataMessage { + case .data(let data): + XCTAssert(data == Data([0x20, 0x22, 0x10, 0x03])) + default: + XCTFail("Unexpected Data Message") + } + } + didCompleteReceivingData.fulfill() + } + await fulfillment(of: [didCompleteReceivingData], timeout: 5.0) + + let didCompleteSendingPing = expectation(description: "Did complete sending ping") + task.sendPing { error in + if let error { + // Server closed the connection before we could process the pong + if let urlError = error as? URLError { + XCTAssertEqual(urlError._nsError.code, NSURLErrorNetworkConnectionLost) + } else { + XCTFail("Unexpecter error type") + } + } + didCompleteSendingPing.fulfill() + } + await fulfillment(of: [delegate.expectation, didCompleteSendingPing], timeout: 50.0) + + let didCompleteReceiving = expectation(description: "Did complete receiving") + task.receive { result in + switch result { + case .failure(let error): + if let urlError = error as? URLError { + XCTAssertEqual(urlError._nsError.code, NSURLErrorNetworkConnectionLost) + } else { + XCTFail("Unexpecter error type") + } + case .success: + XCTFail("Expected to throw when receiving on closed task") + } + didCompleteReceiving.fulfill() + } + await fulfillment(of: [didCompleteReceiving], timeout: 5.0) + + let callbacks = [ "urlSession(_:webSocketTask:didOpenWithProtocol:)", + "urlSession(_:webSocketTask:didCloseWith:reason:)", + "urlSession(_:task:didCompleteWithError:)" ] + XCTAssertEqual(delegate.callbacks.count, callbacks.count) + XCTAssertEqual(delegate.callbacks, callbacks, "Callbacks for \(#function)") + } + func test_webSocketSpecificProtocol() async throws { guard #available(macOS 12, iOS 13.0, watchOS 6.0, tvOS 13.0, *) else { return } guard URLSessionWebSocketTask.supportsWebSockets else { From 9c8bac47f032a431dde757112591e3dd60dba461 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:23:18 -0700 Subject: [PATCH 110/198] Fix CoreFoundation install path (#5037) --- Sources/CoreFoundation/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Sources/CoreFoundation/CMakeLists.txt b/Sources/CoreFoundation/CMakeLists.txt index 7444abd573..e366005f72 100644 --- a/Sources/CoreFoundation/CMakeLists.txt +++ b/Sources/CoreFoundation/CMakeLists.txt @@ -126,10 +126,16 @@ file(COPY DESTINATION ${CMAKE_BINARY_DIR}/_CModulesForClients/CoreFoundation) +if(NOT BUILD_SHARED_LIBS) + set(swift swift_static) +else() + set(swift swift) +endif() + install(DIRECTORY include/ DESTINATION - lib/swift/CoreFoundation) + lib/${swift}/CoreFoundation) if(NOT BUILD_SHARED_LIBS) install(TARGETS CoreFoundation From 9d1a84609e7d0d2074cde36fc08378e02eedad31 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Thu, 1 Aug 2024 20:52:02 -0700 Subject: [PATCH 111/198] Update to use dynamic replacement for _NSNumberInitializer (#5045) --- Sources/Foundation/NSNumber.swift | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Sources/Foundation/NSNumber.swift b/Sources/Foundation/NSNumber.swift index 65ee17bc18..d41a9670b5 100644 --- a/Sources/Foundation/NSNumber.swift +++ b/Sources/Foundation/NSNumber.swift @@ -1176,7 +1176,7 @@ protocol _NSNumberCastingWithoutBridging { extension NSNumber: _NSNumberCastingWithoutBridging {} // Called by FoundationEssentials -internal final class _FoundationNSNumberInitializer : _NSNumberInitializer { +internal struct _FoundationNSNumberInitializer : _NSNumberInitializer { public static func initialize(value: some BinaryInteger) -> Any { if let int64 = Int64(exactly: value) { return NSNumber(value: int64) @@ -1189,3 +1189,8 @@ internal final class _FoundationNSNumberInitializer : _NSNumberInitializer { NSNumber(value: value) } } + +@_dynamicReplacement(for: _nsNumberInitializer()) +private func _nsNumberInitializer_corelibs_foundation() -> _NSNumberInitializer.Type? { + return _FoundationNSNumberInitializer.self +} From 45cb79c18fde23de4219c6f29dce0af4b4d6e6e2 Mon Sep 17 00:00:00 2001 From: Jonathan Flat <50605158+jrflat@users.noreply.github.com> Date: Tue, 6 Aug 2024 10:54:12 -0700 Subject: [PATCH 112/198] Disable test_connectTimeout (#5046) --- Tests/Foundation/TestURLSession.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Tests/Foundation/TestURLSession.swift b/Tests/Foundation/TestURLSession.swift index 465683a00a..2218c3ddf0 100644 --- a/Tests/Foundation/TestURLSession.swift +++ b/Tests/Foundation/TestURLSession.swift @@ -609,6 +609,8 @@ final class TestURLSession: LoopbackServerTest, @unchecked Sendable { } func test_connectTimeout() async throws { + throw XCTSkip("This test is disabled (flaky when all tests are run together)") + #if false // Reconfigure http server for this specific scenario: // a slow request keeps web server busy, while other // request times out on connection attempt. @@ -646,6 +648,7 @@ final class TestURLSession: LoopbackServerTest, @unchecked Sendable { Self.stopServer() Self.options = .default Self.startServer() + #endif } func test_repeatedRequestsStress() async throws { From 17bc8edcdf5f79f8c1c60b1724add895574e1fd1 Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Tue, 6 Aug 2024 19:05:24 +0100 Subject: [PATCH 113/198] Add `.index-build` to `.gitignore` (#5054) These files are created by SourceKit-LSP when background indexing is enabled. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0f1cf0ef96..2d93f95c41 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ project.xcworkspace Build .build +.index-build .configuration *.swp From b3fa847c2e12a973daafc13a4efe231fb9b6ea28 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Tue, 6 Aug 2024 20:31:17 -0700 Subject: [PATCH 114/198] Implement hook for data reading from remote URL (#5049) --- Package.swift | 4 ++-- .../URLSession/NetworkingSpecific.swift | 10 ++++++++++ Tests/Foundation/TestURL.swift | 12 ++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/Package.swift b/Package.swift index fc639c7be8..4a81751dd1 100644 --- a/Package.swift +++ b/Package.swift @@ -105,10 +105,10 @@ var dependencies: [Package.Dependency] { [ .package( url: "https://github.com/apple/swift-foundation-icu", - from: "0.0.9"), + branch: "main"), .package( url: "https://github.com/apple/swift-foundation", - revision: "acae3d26b69113cec2db7772b4144ab9558241db") + branch: "main") ] } } diff --git a/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift b/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift index c8ae632a45..c07d751526 100644 --- a/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift +++ b/Sources/FoundationNetworking/URLSession/NetworkingSpecific.swift @@ -35,6 +35,16 @@ internal func NSRequiresConcreteImplementation(_ fn: String = #function, file: S fatalError("\(fn) must be overridden", file: file, line: line) } +extension Data { + @_dynamicReplacement(for: init(_contentsOfRemote:options:)) + private init(_contentsOfRemote_foundationNetworking url: URL, options: Data.ReadingOptions = []) throws { + let (nsData, _) = try _NSNonfileURLContentLoader().contentsOf(url: url) + self = withExtendedLifetime(nsData) { + return Data(bytes: nsData.bytes, count: nsData.length) + } + } +} + @usableFromInline class _NSNonfileURLContentLoader: _NSNonfileURLContentLoading, @unchecked Sendable { @usableFromInline diff --git a/Tests/Foundation/TestURL.swift b/Tests/Foundation/TestURL.swift index 9aff650183..c10d4963cd 100644 --- a/Tests/Foundation/TestURL.swift +++ b/Tests/Foundation/TestURL.swift @@ -775,6 +775,18 @@ class TestURL : XCTestCase { throw error } } + + func test_dataFromNonFileURL() { + do { + // Tests the up-call to FoundationNetworking to perform the network request + try Data(contentsOf: URL(string: "https://swift.org")!) + } catch { + if let cocoaCode = (error as? CocoaError)?.code { + // Just ensure that we supported this feature, even if the request failed + XCTAssertNotEqual(cocoaCode, .featureUnsupported) + } + } + } // MARK: - From 7f382649f9052da61b6c1054a5e06fa6f345ddc8 Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Wed, 7 Aug 2024 13:14:07 +0100 Subject: [PATCH 115/198] build: Repair the build on WASI platform (#5052) * build: Repair the build on WASI platform Cherry picked from https://github.com/apple/swift-corelibs-foundation/pull/4934 * Add `.windows` to `platformsWithThreads` in `Package.swift` * Reflect `Package.swift` WASI changes in `CMakeLists.txt` (cherry picked from commit 8873088ed6903231235bf8f338358a68157794a8) --------- Co-authored-by: Yuta Saito --- CMakeLists.txt | 26 ++++++++++++++++++++++++-- Package.swift | 21 +++++++++++++++++++-- Sources/CoreFoundation/CFBundle.c | 8 +++++++- Sources/CoreFoundation/CFString.c | 2 +- 4 files changed, 51 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 30d960cb07..edb6cf06f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -115,7 +115,6 @@ list(APPEND _Foundation_common_build_flags "-DCF_BUILDING_CF" "-DDEPLOYMENT_ENABLE_LIBDISPATCH" "-DHAVE_STRUCT_TIMESPEC" - "-DSWIFT_CORELIBS_FOUNDATION_HAS_THREADS" "-Wno-shorten-64-to-32" "-Wno-deprecated-declarations" "-Wno-unreachable-code" @@ -127,6 +126,18 @@ list(APPEND _Foundation_common_build_flags "-Wno-switch" "-fblocks") +if(CMAKE_SYSTEM_NAME STREQUAL "WASI") + list(APPEND _Foundation_common_build_flags + "-D_WASI_EMULATED_SIGNAL" + "-DHAVE_STRLCPY" + "-DHAVE_STRLCAT" + ) +else() + list(APPEND _Foundation_common_build_flags + "-DSWIFT_CORELIBS_FOUNDATION_HAS_THREADS" + ) +endif() + if(NOT "${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC") list(APPEND _Foundation_common_build_flags "-fconstant-cfstrings" @@ -154,10 +165,21 @@ set(_Foundation_swift_build_flags) list(APPEND _Foundation_swift_build_flags "-swift-version 6" "-DDEPLOYMENT_RUNTIME_SWIFT" - "-DSWIFT_CORELIBS_FOUNDATION_HAS_THREADS" "-Xfrontend" "-require-explicit-sendable") +if(CMAKE_SYSTEM_NAME STREQUAL "WASI") + list(APPEND _Foundation_swift_build_flags + "-D_WASI_EMULATED_SIGNAL" + "-DHAVE_STRLCPY" + "-DHAVE_STRLCAT" + ) +else() + list(APPEND _Foundation_swift_build_flags + "-DSWIFT_CORELIBS_FOUNDATION_HAS_THREADS" + ) +endif() + if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") list(APPEND _Foundation_common_build_flags "-D_GNU_SOURCE") diff --git a/Package.swift b/Package.swift index 4a81751dd1..1477aefd00 100644 --- a/Package.swift +++ b/Package.swift @@ -3,6 +3,17 @@ import PackageDescription +let platformsWithThreads: [Platform] = [ + .iOS, + .macOS, + .tvOS, + .watchOS, + .macCatalyst, + .driverKit, + .android, + .linux, + .windows, +] var dispatchIncludeFlags: [CSetting] if let environmentPath = Context.environment["DISPATCH_INCLUDE_PATH"] { dispatchIncludeFlags = [.unsafeFlags([ @@ -31,8 +42,11 @@ let coreFoundationBuildSettings: [CSetting] = [ .define("DEPLOYMENT_ENABLE_LIBDISPATCH"), .define("DEPLOYMENT_RUNTIME_SWIFT"), .define("HAVE_STRUCT_TIMESPEC"), - .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS"), + .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS", .when(platforms: platformsWithThreads)), .define("_GNU_SOURCE", .when(platforms: [.linux, .android])), + .define("_WASI_EMULATED_SIGNAL", .when(platforms: [.wasi])), + .define("HAVE_STRLCPY", .when(platforms: [.wasi])), + .define("HAVE_STRLCAT", .when(platforms: [.wasi])), .unsafeFlags([ "-Wno-shorten-64-to-32", "-Wno-deprecated-declarations", @@ -61,8 +75,11 @@ let interfaceBuildSettings: [CSetting] = [ .define("CF_BUILDING_CF"), .define("DEPLOYMENT_ENABLE_LIBDISPATCH"), .define("HAVE_STRUCT_TIMESPEC"), - .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS"), + .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS", .when(platforms: platformsWithThreads)), .define("_GNU_SOURCE", .when(platforms: [.linux, .android])), + .define("_WASI_EMULATED_SIGNAL", .when(platforms: [.wasi])), + .define("HAVE_STRLCPY", .when(platforms: [.wasi])), + .define("HAVE_STRLCAT", .when(platforms: [.wasi])), .unsafeFlags([ "-Wno-shorten-64-to-32", "-Wno-deprecated-declarations", diff --git a/Sources/CoreFoundation/CFBundle.c b/Sources/CoreFoundation/CFBundle.c index 8026a26256..05afe9888e 100644 --- a/Sources/CoreFoundation/CFBundle.c +++ b/Sources/CoreFoundation/CFBundle.c @@ -596,7 +596,13 @@ static CFBundleRef _CFBundleGetBundleWithIdentifier(CFStringRef bundleID, void * CFBundleRef CFBundleGetBundleWithIdentifier(CFStringRef bundleID) { // Use the frame that called this as a hint - return _CFBundleGetBundleWithIdentifier(bundleID, __builtin_return_address(0)); + void *hint; +#if TARGET_OS_WASI + hint = NULL; +#else + hint = __builtin_frame_address(0); +#endif + return _CFBundleGetBundleWithIdentifier(bundleID, hint); } CFBundleRef _CFBundleGetBundleWithIdentifierWithHint(CFStringRef bundleID, void *pointer) { diff --git a/Sources/CoreFoundation/CFString.c b/Sources/CoreFoundation/CFString.c index 1de46dac05..94a6c86d15 100644 --- a/Sources/CoreFoundation/CFString.c +++ b/Sources/CoreFoundation/CFString.c @@ -28,7 +28,7 @@ #include "CFRuntime_Internal.h" #include #include <_foundation_unicode/uchar.h> -#if TARGET_OS_MAC || TARGET_OS_WIN32 || TARGET_OS_LINUX || TARGET_OS_BSD +#if TARGET_OS_MAC || TARGET_OS_WIN32 || TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI #include "CFConstantKeys.h" #include "CFStringLocalizedFormattingInternal.h" #endif From 3506f58a89de211823dcee98eb698dfcc1414fc5 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 7 Aug 2024 05:10:42 +0000 Subject: [PATCH 116/198] [CMake] Use LIBXML2_INCLUDE_DIR instead of hardcoding /usr/include/libxml2 `find_package(LibXml2 REQUIRED)` sets `LIBXML2_INCLUDE_DIR` to the correct include directory for the libxml2 headers. Use this variable instead of hardcoding `/usr/include/libxml2`. This allows the build to work with custom libxml2 builds on WASI. --- Sources/_CFXMLInterface/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/_CFXMLInterface/CMakeLists.txt b/Sources/_CFXMLInterface/CMakeLists.txt index d6e63a3f59..d550a520f1 100644 --- a/Sources/_CFXMLInterface/CMakeLists.txt +++ b/Sources/_CFXMLInterface/CMakeLists.txt @@ -20,7 +20,7 @@ target_include_directories(_CFXMLInterface ../CoreFoundation/include PRIVATE ../CoreFoundation/internalInclude - /usr/include/libxml2/) + ${LIBXML2_INCLUDE_DIR}) target_compile_options(_CFXMLInterface INTERFACE "$<$:SHELL:-Xcc -fmodule-map-file=${CMAKE_CURRENT_SOURCE_DIR}/../CoreFoundation/include/module.modulemap>" From fef108320304306b2765df0f839dafabdbf714bd Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 7 Aug 2024 05:13:38 +0000 Subject: [PATCH 117/198] [CMake] Disable libdispatch & threads, enable some emulations on WASI This commit disables libdispatch and threads on WASI, and enables wasi-libc emulation features. --- CMakeLists.txt | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index edb6cf06f9..2bce742627 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,7 +94,7 @@ endif() # System dependencies find_package(dispatch CONFIG) -if(NOT dispatch_FOUND) +if(NOT dispatch_FOUND AND NOT CMAKE_SYSTEM_NAME STREQUAL WASI) if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") set(DEFAULT_DISPATCH_INCLUDE_PATH "/usr/lib/swift") elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") @@ -113,7 +113,6 @@ find_package(CURL REQUIRED) list(APPEND _Foundation_common_build_flags "-DDEPLOYMENT_RUNTIME_SWIFT" "-DCF_BUILDING_CF" - "-DDEPLOYMENT_ENABLE_LIBDISPATCH" "-DHAVE_STRUCT_TIMESPEC" "-Wno-shorten-64-to-32" "-Wno-deprecated-declarations" @@ -126,16 +125,10 @@ list(APPEND _Foundation_common_build_flags "-Wno-switch" "-fblocks") -if(CMAKE_SYSTEM_NAME STREQUAL "WASI") - list(APPEND _Foundation_common_build_flags - "-D_WASI_EMULATED_SIGNAL" - "-DHAVE_STRLCPY" - "-DHAVE_STRLCAT" - ) -else() - list(APPEND _Foundation_common_build_flags - "-DSWIFT_CORELIBS_FOUNDATION_HAS_THREADS" - ) +if(NOT CMAKE_SYSTEM_NAME STREQUAL WASI) + list(APPEND _Foundation_common_build_flags + "-DDEPLOYMENT_ENABLE_LIBDISPATCH" + "-DSWIFT_CORELIBS_FOUNDATION_HAS_THREADS") endif() if(NOT "${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC") @@ -168,16 +161,17 @@ list(APPEND _Foundation_swift_build_flags "-Xfrontend" "-require-explicit-sendable") -if(CMAKE_SYSTEM_NAME STREQUAL "WASI") - list(APPEND _Foundation_swift_build_flags - "-D_WASI_EMULATED_SIGNAL" - "-DHAVE_STRLCPY" - "-DHAVE_STRLCAT" - ) +if(CMAKE_SYSTEM_NAME STREQUAL WASI) + # Enable wasi-libc emulation features + set(WASI_EMULATION_DEFS _WASI_EMULATED_MMAN _WASI_EMULATED_SIGNAL _WASI_EMULATED_PROCESS_CLOCKS) + foreach(def ${WASI_EMULATION_DEFS}) + list(APPEND _Foundation_swift_build_flags "SHELL:-Xcc -D${def}") + list(APPEND _Foundation_common_build_flags "-D${def}") + endforeach() else() - list(APPEND _Foundation_swift_build_flags - "-DSWIFT_CORELIBS_FOUNDATION_HAS_THREADS" - ) + # Assume we have threads on other platforms + list(APPEND _Foundation_swift_build_flags + "-DSWIFT_CORELIBS_FOUNDATION_HAS_THREADS") endif() if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") From 27310f474957020b3083605083d86c93a812b42a Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 7 Aug 2024 05:15:39 +0000 Subject: [PATCH 118/198] [CMake] Exclude FoundationNetworking and _CFURLSessionInterface on WASI Because networking is not a part of WASI Preview 1. We can add it back when it is available. --- Sources/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Sources/CMakeLists.txt b/Sources/CMakeLists.txt index 0ee266a4bc..29b9244065 100644 --- a/Sources/CMakeLists.txt +++ b/Sources/CMakeLists.txt @@ -14,10 +14,14 @@ add_subdirectory(CoreFoundation) add_subdirectory(_CFXMLInterface) -add_subdirectory(_CFURLSessionInterface) +if(NOT CMAKE_SYSTEM_NAME STREQUAL "WASI") + add_subdirectory(_CFURLSessionInterface) +endif() add_subdirectory(Foundation) add_subdirectory(FoundationXML) -add_subdirectory(FoundationNetworking) +if(NOT CMAKE_SYSTEM_NAME STREQUAL "WASI") + add_subdirectory(FoundationNetworking) +endif() if(FOUNDATION_BUILD_TOOLS) add_subdirectory(plutil) endif() From 164af81d45dfff66d8d409f5f6bd946cb3987bc4 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 7 Aug 2024 05:34:51 +0000 Subject: [PATCH 119/198] [wasm] Include CFPreferences.h, CFRunLoop.h, and CFStream.h in WASI builds Those headers has been imported by Swift side through `CoreFoundation/Base.subproj/SwiftRuntime/CoreFoundation.h` since 44031b5a0e96ad91eada2261db2d3890818fe1d0 but we switched to use CoreFoundation.h directly after the recore, and the header was not updated in 44031b5a0e96ad91eada2261db2d3890818fe1d0 --- Sources/CoreFoundation/include/CoreFoundation.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Sources/CoreFoundation/include/CoreFoundation.h b/Sources/CoreFoundation/include/CoreFoundation.h index a66e7e614d..64313f0b9f 100644 --- a/Sources/CoreFoundation/include/CoreFoundation.h +++ b/Sources/CoreFoundation/include/CoreFoundation.h @@ -58,9 +58,7 @@ #include "CFLocale.h" #include "CFNumber.h" #include "CFNumberFormatter.h" -#if !TARGET_OS_WASI #include "CFPreferences.h" -#endif #include "CFPropertyList.h" #include "CFSet.h" #include "CFString.h" @@ -76,13 +74,17 @@ #include "ForSwiftFoundationOnly.h" -#if TARGET_OS_OSX || TARGET_OS_IPHONE || TARGET_OS_WIN32 || TARGET_OS_LINUX +#if TARGET_OS_OSX || TARGET_OS_IPHONE || TARGET_OS_WIN32 || TARGET_OS_LINUX || TARGET_OS_WASI +# if !TARGET_OS_WASI #include "CFMessagePort.h" #include "CFPlugIn.h" +# endif #include "CFRunLoop.h" #include "CFStream.h" +# if !TARGET_OS_WASI #include "CFSocket.h" #include "CFMachPort.h" +# endif #include "CFAttributedString.h" #include "CFNotificationCenter.h" From f91a759124ea50b491c3fe0fa8ecf34b39de6c20 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 7 Aug 2024 05:39:34 +0000 Subject: [PATCH 120/198] [wasm] Fix the new CFString.c compilation error on WASI Treat WASI as an usual Unix-like system --- Sources/CoreFoundation/CFString.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/CoreFoundation/CFString.c b/Sources/CoreFoundation/CFString.c index 94a6c86d15..f8899e1589 100644 --- a/Sources/CoreFoundation/CFString.c +++ b/Sources/CoreFoundation/CFString.c @@ -35,7 +35,7 @@ #include #include #include -#if TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD +#if TARGET_OS_MAC || TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI #include #endif #if TARGET_OS_WASI From 27efb0c4dcc1de3669bd7adf8a9a7b42f4c6cf80 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 7 Aug 2024 05:40:24 +0000 Subject: [PATCH 121/198] [wasm] Build the vendored version of BlocksRuntime on WASI We had been using the vendored BlocksRuntime on WASI, but the build configuration was removed during the recore. This change restores the vendored BlocksRuntime build configuration on WASI. --- .../BlockRuntime/CMakeLists.txt | 37 +++++++++++++++++++ Sources/CoreFoundation/CMakeLists.txt | 6 +++ Sources/_CFXMLInterface/CMakeLists.txt | 4 ++ 3 files changed, 47 insertions(+) create mode 100644 Sources/CoreFoundation/BlockRuntime/CMakeLists.txt diff --git a/Sources/CoreFoundation/BlockRuntime/CMakeLists.txt b/Sources/CoreFoundation/BlockRuntime/CMakeLists.txt new file mode 100644 index 0000000000..afcd826aed --- /dev/null +++ b/Sources/CoreFoundation/BlockRuntime/CMakeLists.txt @@ -0,0 +1,37 @@ +##===----------------------------------------------------------------------===## +## +## This source file is part of the Swift open source project +## +## Copyright (c) 2024 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.md for the list of Swift project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +# Build the vendored version of the BlocksRuntime library, which is used by +# platforms that don't support libdispatch. + +add_library(BlocksRuntime + data.c + runtime.c) + +target_include_directories(BlocksRuntime PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/include + # For CFTargetConditionals.h + ${CMAKE_CURRENT_SOURCE_DIR}/../include) + +set_target_properties(BlocksRuntime PROPERTIES + POSITION_INDEPENDENT_CODE FALSE) + +add_library(BlocksRuntime::BlocksRuntime ALIAS BlocksRuntime) + +if(NOT BUILD_SHARED_LIBS) + set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS BlocksRuntime) + install(TARGETS BlocksRuntime + ARCHIVE DESTINATION lib/swift$<$>:_static>/${SWIFT_SYSTEM_NAME} + LIBRARY DESTINATION lib/swift$<$>:_static>/${SWIFT_SYSTEM_NAME}) +endif() diff --git a/Sources/CoreFoundation/CMakeLists.txt b/Sources/CoreFoundation/CMakeLists.txt index e366005f72..c73891b264 100644 --- a/Sources/CoreFoundation/CMakeLists.txt +++ b/Sources/CoreFoundation/CMakeLists.txt @@ -118,6 +118,12 @@ target_link_libraries(CoreFoundation _FoundationICU dispatch) +if(CMAKE_SYSTEM_NAME STREQUAL WASI) + # On WASI, we use vendored BlocksRuntime instead of the one from libdispatch + add_subdirectory(BlockRuntime) + target_link_libraries(CoreFoundation PRIVATE BlocksRuntime) +endif() + set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS CoreFoundation) # Copy Headers to known directory for direct client (XCTest) test builds diff --git a/Sources/_CFXMLInterface/CMakeLists.txt b/Sources/_CFXMLInterface/CMakeLists.txt index d550a520f1..9ca0c27900 100644 --- a/Sources/_CFXMLInterface/CMakeLists.txt +++ b/Sources/_CFXMLInterface/CMakeLists.txt @@ -33,6 +33,10 @@ target_link_libraries(_CFXMLInterface PRIVATE dispatch LibXml2::LibXml2) +if(CMAKE_SYSTEM_NAME STREQUAL WASI) + target_link_libraries(_CFXMLInterface PRIVATE BlocksRuntime) +endif() + if(NOT BUILD_SHARED_LIBS) set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS _CFXMLInterface) install(TARGETS _CFXMLInterface From f0a363172fe22093e5d65a004203199db398733f Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 7 Aug 2024 05:41:37 +0000 Subject: [PATCH 122/198] [wasm] `strlcpy` and `strlcat` are available in wasi-libc Mark them available on WASI. Otherwise, the `static inline` implementations are activated and the build fails with multiple definitions. --- .../CoreFoundation/internalInclude/CoreFoundation_Prefix.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h index 9ef8f64a6c..dea3b57537 100644 --- a/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h +++ b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h @@ -109,6 +109,11 @@ typedef char * Class; #include #endif +#if TARGET_OS_WASI +#define HAVE_STRLCPY 1 +#define HAVE_STRLCAT 1 +#endif + #if TARGET_OS_WIN32 #define BOOL WINDOWS_BOOL From 8176d11c41fc96500692f3bc59f8a0609b08cfa6 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 7 Aug 2024 06:06:22 +0000 Subject: [PATCH 123/198] [Build] Repair WASI build with SwiftPM --- Package.swift | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Package.swift b/Package.swift index 1477aefd00..dc86631a79 100644 --- a/Package.swift +++ b/Package.swift @@ -39,14 +39,12 @@ let coreFoundationBuildSettings: [CSetting] = [ .headerSearchPath("internalInclude"), .define("DEBUG", .when(configuration: .debug)), .define("CF_BUILDING_CF"), - .define("DEPLOYMENT_ENABLE_LIBDISPATCH"), + .define("DEPLOYMENT_ENABLE_LIBDISPATCH", .when(platforms: platformsWithThreads)), .define("DEPLOYMENT_RUNTIME_SWIFT"), .define("HAVE_STRUCT_TIMESPEC"), .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS", .when(platforms: platformsWithThreads)), .define("_GNU_SOURCE", .when(platforms: [.linux, .android])), .define("_WASI_EMULATED_SIGNAL", .when(platforms: [.wasi])), - .define("HAVE_STRLCPY", .when(platforms: [.wasi])), - .define("HAVE_STRLCAT", .when(platforms: [.wasi])), .unsafeFlags([ "-Wno-shorten-64-to-32", "-Wno-deprecated-declarations", @@ -78,8 +76,6 @@ let interfaceBuildSettings: [CSetting] = [ .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS", .when(platforms: platformsWithThreads)), .define("_GNU_SOURCE", .when(platforms: [.linux, .android])), .define("_WASI_EMULATED_SIGNAL", .when(platforms: [.wasi])), - .define("HAVE_STRLCPY", .when(platforms: [.wasi])), - .define("HAVE_STRLCAT", .when(platforms: [.wasi])), .unsafeFlags([ "-Wno-shorten-64-to-32", "-Wno-deprecated-declarations", @@ -161,7 +157,8 @@ let package = Package( .product(name: "FoundationEssentials", package: "swift-foundation"), "Foundation", "CoreFoundation", - "_CFXMLInterface" + "_CFXMLInterface", + .target(name: "BlocksRuntime", condition: .when(platforms: [.wasi])), ], path: "Sources/FoundationXML", exclude: [ @@ -187,6 +184,7 @@ let package = Package( name: "CoreFoundation", dependencies: [ .product(name: "_FoundationICU", package: "swift-foundation-icu"), + .target(name: "BlocksRuntime", condition: .when(platforms: [.wasi])), ], path: "Sources/CoreFoundation", exclude: [ @@ -195,6 +193,17 @@ let package = Package( ], cSettings: coreFoundationBuildSettings ), + .target( + name: "BlocksRuntime", + path: "Sources/CoreFoundation/BlockRuntime", + exclude: [ + "CMakeLists.txt" + ], + cSettings: [ + // For CFTargetConditionals.h + .headerSearchPath("../include"), + ] + ), .target( name: "_CFXMLInterface", dependencies: [ From e5104c30858832ae1a26cc65c221b091d3f651cb Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 7 Aug 2024 06:12:47 +0000 Subject: [PATCH 124/198] Use `__builtin_return_address` instead of `__builtin_frame_address` We accidentally changed it to `__builtin_frame_address` in 7f382649f9052da61b6c1054a5e06fa6f345ddc8 but we should keep it as `__builtin_return_address` as it was before. --- Sources/CoreFoundation/CFBundle.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/CoreFoundation/CFBundle.c b/Sources/CoreFoundation/CFBundle.c index 05afe9888e..607c7bd925 100644 --- a/Sources/CoreFoundation/CFBundle.c +++ b/Sources/CoreFoundation/CFBundle.c @@ -600,7 +600,7 @@ CFBundleRef CFBundleGetBundleWithIdentifier(CFStringRef bundleID) { #if TARGET_OS_WASI hint = NULL; #else - hint = __builtin_frame_address(0); + hint = __builtin_return_address(0); #endif return _CFBundleGetBundleWithIdentifier(bundleID, hint); } From a1b9c39eb44478cdbabfcbb889752445c63031b9 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 7 Aug 2024 15:48:14 +0000 Subject: [PATCH 125/198] [CMake] Not even try to find libdispatch on WASI --- CMakeLists.txt | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2bce742627..058fb31156 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -93,18 +93,22 @@ if(NOT SwiftFoundation_MODULE_TRIPLE) endif() # System dependencies -find_package(dispatch CONFIG) -if(NOT dispatch_FOUND AND NOT CMAKE_SYSTEM_NAME STREQUAL WASI) - if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") - set(DEFAULT_DISPATCH_INCLUDE_PATH "/usr/lib/swift") - elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") - set(DEFAULT_DISPATCH_INCLUDE_PATH "$ENV{SDKROOT}usr/include") + +# We know libdispatch is always unavailable on WASI +if(NOT CMAKE_SYSTEM_NAME STREQUAL WASI) + find_package(dispatch CONFIG) + if(NOT dispatch_FOUND) + if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") + set(DEFAULT_DISPATCH_INCLUDE_PATH "/usr/lib/swift") + elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(DEFAULT_DISPATCH_INCLUDE_PATH "$ENV{SDKROOT}usr/include") + endif() + set(DISPATCH_INCLUDE_PATH "${DEFAULT_DISPATCH_INCLUDE_PATH}" CACHE STRING "A path to where you can find libdispatch headers") + message("-- dispatch_DIR not found, using dispatch from SDK at ${DISPATCH_INCLUDE_PATH}") + list(APPEND _Foundation_common_build_flags + "-I${DISPATCH_INCLUDE_PATH}" + "-I${DISPATCH_INCLUDE_PATH}/Block") endif() - set(DISPATCH_INCLUDE_PATH "${DEFAULT_DISPATCH_INCLUDE_PATH}" CACHE STRING "A path to where you can find libdispatch headers") - message("-- dispatch_DIR not found, using dispatch from SDK at ${DISPATCH_INCLUDE_PATH}") - list(APPEND _Foundation_common_build_flags - "-I${DISPATCH_INCLUDE_PATH}" - "-I${DISPATCH_INCLUDE_PATH}/Block") endif() find_package(LibXml2 REQUIRED) find_package(CURL REQUIRED) From 965246eebdb263f1ac0d8f42723821a82570b31c Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 7 Aug 2024 16:40:22 +0000 Subject: [PATCH 126/198] [CMake] Build BlocksRuntime as object library To avoid shippig BlocksRuntime as a separate library, build it as an object library and include it in CoreFoundation static archive. --- Sources/CoreFoundation/BlockRuntime/CMakeLists.txt | 13 ++++--------- Sources/CoreFoundation/CMakeLists.txt | 1 + 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/Sources/CoreFoundation/BlockRuntime/CMakeLists.txt b/Sources/CoreFoundation/BlockRuntime/CMakeLists.txt index afcd826aed..fe5e13bb7c 100644 --- a/Sources/CoreFoundation/BlockRuntime/CMakeLists.txt +++ b/Sources/CoreFoundation/BlockRuntime/CMakeLists.txt @@ -15,7 +15,9 @@ # Build the vendored version of the BlocksRuntime library, which is used by # platforms that don't support libdispatch. -add_library(BlocksRuntime +# Build the BlocksRuntime as an object library, shipped as a part +# of libCoreFoundation. +add_library(BlocksRuntime OBJECT data.c runtime.c) @@ -27,11 +29,4 @@ target_include_directories(BlocksRuntime PUBLIC set_target_properties(BlocksRuntime PROPERTIES POSITION_INDEPENDENT_CODE FALSE) -add_library(BlocksRuntime::BlocksRuntime ALIAS BlocksRuntime) - -if(NOT BUILD_SHARED_LIBS) - set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS BlocksRuntime) - install(TARGETS BlocksRuntime - ARCHIVE DESTINATION lib/swift$<$>:_static>/${SWIFT_SYSTEM_NAME} - LIBRARY DESTINATION lib/swift$<$>:_static>/${SWIFT_SYSTEM_NAME}) -endif() +set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS BlocksRuntime) diff --git a/Sources/CoreFoundation/CMakeLists.txt b/Sources/CoreFoundation/CMakeLists.txt index c73891b264..71e7c2f00d 100644 --- a/Sources/CoreFoundation/CMakeLists.txt +++ b/Sources/CoreFoundation/CMakeLists.txt @@ -121,6 +121,7 @@ target_link_libraries(CoreFoundation if(CMAKE_SYSTEM_NAME STREQUAL WASI) # On WASI, we use vendored BlocksRuntime instead of the one from libdispatch add_subdirectory(BlockRuntime) + # Add BlocksRuntime object library to CoreFoundation static archive target_link_libraries(CoreFoundation PRIVATE BlocksRuntime) endif() From 3b8485a75c5fd9a7f7877961ceadbc6521dcf563 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 8 Aug 2024 17:09:49 +0000 Subject: [PATCH 127/198] [CMake] Remove POSITION_INDEPENDENT_CODE=FALSE from BlocksRuntime We ported BlocksRuntime CMakeLists.txt from the state of 02b7d8f0c141b9accdade1922a080898d2d0e0a2 but we don't find any reason to set POSITION_INDEPENDENT_CODE=FALSE for BlocksRuntime. --- Sources/CoreFoundation/BlockRuntime/CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/Sources/CoreFoundation/BlockRuntime/CMakeLists.txt b/Sources/CoreFoundation/BlockRuntime/CMakeLists.txt index fe5e13bb7c..47779784e7 100644 --- a/Sources/CoreFoundation/BlockRuntime/CMakeLists.txt +++ b/Sources/CoreFoundation/BlockRuntime/CMakeLists.txt @@ -26,7 +26,4 @@ target_include_directories(BlocksRuntime PUBLIC # For CFTargetConditionals.h ${CMAKE_CURRENT_SOURCE_DIR}/../include) -set_target_properties(BlocksRuntime PROPERTIES - POSITION_INDEPENDENT_CODE FALSE) - set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS BlocksRuntime) From 7ccef0d98d0d2014da85bae2064b603fc7c63956 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 8 Aug 2024 11:53:00 -0700 Subject: [PATCH 128/198] Allow for more flexibility in what path SWIFTCI_USE_LOCAL_DEPS means (#5048) --- Package.swift | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/Package.swift b/Package.swift index 1477aefd00..c7c356105b 100644 --- a/Package.swift +++ b/Package.swift @@ -101,24 +101,33 @@ let interfaceBuildSettings: [CSetting] = [ let swiftBuildSettings: [SwiftSetting] = [ .define("DEPLOYMENT_RUNTIME_SWIFT"), .define("SWIFT_CORELIBS_FOUNDATION_HAS_THREADS"), - .swiftLanguageVersion(.v6), + .swiftLanguageMode(.v6), .unsafeFlags([ "-Xfrontend", "-require-explicit-sendable", ]) ] -var dependencies: [Package.Dependency] { - if Context.environment["SWIFTCI_USE_LOCAL_DEPS"] != nil { +var dependencies: [Package.Dependency] = [] + +if let useLocalDepsEnv = Context.environment["SWIFTCI_USE_LOCAL_DEPS"] { + let root: String + if useLocalDepsEnv == "1" { + root = ".." + } else { + root = useLocalDepsEnv + } + dependencies += [ .package( name: "swift-foundation-icu", - path: "../swift-foundation-icu"), + path: "\(root)/swift-foundation-icu"), .package( name: "swift-foundation", - path: "../swift-foundation") + path: "\(root)/swift-foundation") ] - } else { +} else { + dependencies += [ .package( url: "https://github.com/apple/swift-foundation-icu", @@ -127,7 +136,6 @@ var dependencies: [Package.Dependency] { url: "https://github.com/apple/swift-foundation", branch: "main") ] - } } let package = Package( @@ -244,7 +252,7 @@ let package = Package( "CMakeLists.txt" ], swiftSettings: [ - .swiftLanguageVersion(.v6) + .swiftLanguageMode(.v6) ] ), .executableTarget( @@ -255,7 +263,7 @@ let package = Package( "FoundationNetworking" ], swiftSettings: [ - .swiftLanguageVersion(.v6) + .swiftLanguageMode(.v6) ] ), .target( @@ -283,7 +291,7 @@ let package = Package( ], swiftSettings: [ .define("NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT"), - .swiftLanguageVersion(.v6) + .swiftLanguageMode(.v6) ] ), ] From 0d189161fa0a5eebec70edbf6f4f54e6da82f7f3 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Fri, 9 Aug 2024 14:54:36 -0700 Subject: [PATCH 129/198] Enable WMO for release builds (#5059) * Enable whole-module-optimization for release builds * Address feedback * Fix build failures * Don't enable WMO on Windows --- CMakeLists.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 058fb31156..4b545a381e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,16 @@ if(NOT SWIFT_SYSTEM_NAME) endif() endif() +# Don't enable WMO on Windows due to linker failures +if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows) + # Enable whole module optimization for release builds & incremental for debug builds + if(POLICY CMP0157) + set(CMAKE_Swift_COMPILATION_MODE "$,wholemodule,incremental>") + else() + add_compile_options($<$,$>:-wmo>) + endif() +endif() + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) From be0e853408a6278fa62f43864d90bf2f53170734 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Sat, 10 Aug 2024 12:26:08 +0000 Subject: [PATCH 130/198] Remove the workaround for WASI errno conflict As we have fixed the conflict in the WASILibc overlay module while porting swift-foundation, we can remove the workaround from corelibs-foundation too. --- Sources/Foundation/NSPathUtilities.swift | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Sources/Foundation/NSPathUtilities.swift b/Sources/Foundation/NSPathUtilities.swift index f6cda6abf9..408b18bebf 100644 --- a/Sources/Foundation/NSPathUtilities.swift +++ b/Sources/Foundation/NSPathUtilities.swift @@ -12,13 +12,6 @@ import WinSDK #elseif os(WASI) import WASILibc -// CoreFoundation brings but it conflicts with WASILibc.errno -// definition, so we need to explicitly select the one from WASILibc. -// This is defined as "internal" since this workaround also used in other files. -internal var errno: Int32 { - get { WASILibc.errno } - set { WASILibc.errno = newValue } -} #endif #if os(Windows) From 4127e856e0eda0c1508e60f1c03b4d5c1cbe78db Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Sat, 10 Aug 2024 18:35:56 +0000 Subject: [PATCH 131/198] Make curl an optional dependency when not building FoundationNetworking When building for WASI, FoundationNetworking is not supported, so we should not require curl to be present. This change makes curl an optional dependency when FoundationNetworking is not being built. --- CMakeLists.txt | 12 +++++++++++- Sources/CMakeLists.txt | 4 ++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b545a381e..1d9c684d94 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,6 +63,14 @@ if(BUILD_SHARED_LIBS) option(FOUNDATION_BUILD_TOOLS "build tools" ON) endif() +set(FOUNDATION_BUILD_NETWORKING_default ON) +if(CMAKE_SYSTEM_NAME STREQUAL WASI) + # Networking is not supported on WASI + set(FOUNDATION_BUILD_NETWORKING_default OFF) +endif() +option(FOUNDATION_BUILD_NETWORKING "build FoundationNetworking" + ${FOUNDATION_BUILD_NETWORKING_default}) + set(CMAKE_POSITION_INDEPENDENT_CODE YES) # Fetchable dependcies @@ -121,7 +129,9 @@ if(NOT CMAKE_SYSTEM_NAME STREQUAL WASI) endif() endif() find_package(LibXml2 REQUIRED) -find_package(CURL REQUIRED) +if(FOUNDATION_BUILD_NETWORKING) + find_package(CURL REQUIRED) +endif() # Common build flags (_CFURLSessionInterface, _CFXMLInterface, CoreFoundation) list(APPEND _Foundation_common_build_flags diff --git a/Sources/CMakeLists.txt b/Sources/CMakeLists.txt index 29b9244065..f239bdf0ff 100644 --- a/Sources/CMakeLists.txt +++ b/Sources/CMakeLists.txt @@ -14,12 +14,12 @@ add_subdirectory(CoreFoundation) add_subdirectory(_CFXMLInterface) -if(NOT CMAKE_SYSTEM_NAME STREQUAL "WASI") +if(FOUNDATION_BUILD_NETWORKING) add_subdirectory(_CFURLSessionInterface) endif() add_subdirectory(Foundation) add_subdirectory(FoundationXML) -if(NOT CMAKE_SYSTEM_NAME STREQUAL "WASI") +if(FOUNDATION_BUILD_NETWORKING) add_subdirectory(FoundationNetworking) endif() if(FOUNDATION_BUILD_TOOLS) From c09a4f75ff68fa939765e18a1137a05db4bf5136 Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Mon, 12 Aug 2024 10:09:38 -0700 Subject: [PATCH 132/198] Include userInfo in Error descriptions This more closely matches Darwin behavior, and makes it significantly easier to debug issues like "File was not found" which presently include no reference whatsoever to the actual file path. --- Sources/Foundation/NSError.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index af7fe0e54d..6f21d3a03d 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -182,7 +182,11 @@ open class NSError : NSObject, NSCopying, NSSecureCoding, NSCoding, @unchecked S } override open var description: String { - return "Error Domain=\(domain) Code=\(code) \"\(localizedFailureReason ?? "(null)")\"" + var result = "Error Domain=\(domain) Code=\(code) \"\(localizedFailureReason ?? "(null)")\"" + if !userInfo.isEmpty { + result += "UserInfo={\(userInfo.map { "\($0)=\($1)"}.joined(separator: ", "))}" + } + return result } // -- NSObject Overrides -- From 3e725c483e15bbb8f100ef843fb7ade4a1b3639b Mon Sep 17 00:00:00 2001 From: Kenta Kubo <601636+kkebo@users.noreply.github.com> Date: Tue, 13 Aug 2024 04:02:45 +0900 Subject: [PATCH 133/198] Fix incorrect help documentation of XCTestMain (#5044) The option `--list-test` is incorrect. The correct option is [`--list-tests`](https://github.com/apple/swift-corelibs-foundation/blob/9c8bac47f032a431dde757112591e3dd60dba461/Sources/XCTest/Private/ArgumentParser.swift#L60). --- Sources/XCTest/Public/XCTestMain.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/XCTest/Public/XCTestMain.swift b/Sources/XCTest/Public/XCTestMain.swift index 33572e723d..e19184e69f 100644 --- a/Sources/XCTest/Public/XCTestMain.swift +++ b/Sources/XCTest/Public/XCTestMain.swift @@ -124,7 +124,7 @@ public func XCTMain( OPTIONS: - -l, --list-test List tests line by line to standard output + -l, --list-tests List tests line by line to standard output --dump-tests-json List tests in JSON to standard output TESTCASES: From 1bd55748072b2627389a04177518cb98069fce2a Mon Sep 17 00:00:00 2001 From: Evan Wilde Date: Thu, 8 Aug 2024 15:39:44 -0700 Subject: [PATCH 134/198] Bring back defines and flags Several definitions and flags were dropped from the build when moving to swift-froundation. This patch puts back the ones that we need in order to build against musl. Since the musl builds are static, we also need to pick up the link to libRT or dispatch will fail to link. --- CMakeLists.txt | 21 +++++++++++++++++++++ cmake/modules/FindLibRT.cmake | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d9c684d94..9a5c765cc3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,9 +95,29 @@ endif() FetchContent_MakeAvailable(SwiftFoundationICU SwiftFoundation) include(CheckLinkerFlag) +include(CheckSymbolExists) check_linker_flag(C "LINKER:--build-id=sha1" LINKER_SUPPORTS_BUILD_ID) +check_symbol_exists("strlcat" "string.h" HAVE_STRLCAT) +check_symbol_exists("strlcpy" "string.h" HAVE_STRLCPY) +check_symbol_exists("issetugid" "unistd.h" HAVE_ISSETUGID) +add_compile_definitions( + $<$,$>:HAVE_STRLCAT> + $<$,$>:HAVE_STRLCPY> + $<$,$>:HAVE_ISSETUGID>) + +if(CMAKE_SYSTEM_NAME STREQUAL Linux OR ANDROID) + add_compile_definitions($<$:_GNU_SOURCE>) +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL Linux) + check_symbol_exists(sched_getaffinity "sched.h" HAVE_SCHED_GETAFFINITY) + add_compile_definitions($<$:HAVE_SCHED_GETAFFINITY>) +endif() + +add_compile_options($<$:-fblocks>) + # Precompute module triple for installation if(NOT SwiftFoundation_MODULE_TRIPLE) set(module_triple_command "${CMAKE_Swift_COMPILER}" -print-target-info) @@ -114,6 +134,7 @@ endif() # We know libdispatch is always unavailable on WASI if(NOT CMAKE_SYSTEM_NAME STREQUAL WASI) + find_package(LibRT) find_package(dispatch CONFIG) if(NOT dispatch_FOUND) if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") diff --git a/cmake/modules/FindLibRT.cmake b/cmake/modules/FindLibRT.cmake index 0a9f0d80e5..caee828517 100644 --- a/cmake/modules/FindLibRT.cmake +++ b/cmake/modules/FindLibRT.cmake @@ -4,7 +4,7 @@ # # Find librt library and headers. # -# The mdoule defines the following variables: +# The module defines the following variables: # # :: # From 16071dfb7894497484b84f15b059baa497e5f3a1 Mon Sep 17 00:00:00 2001 From: Evan Wilde Date: Thu, 8 Aug 2024 15:41:38 -0700 Subject: [PATCH 135/198] Fix the musl build in Port.swift This fixes how we pick up SOCK_STREAM and IPPROTO_TCP from musl. We weren't before so it was just failing to build. --- Sources/Foundation/Port.swift | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Sources/Foundation/Port.swift b/Sources/Foundation/Port.swift index c1f78c14a4..c4ed8282bf 100644 --- a/Sources/Foundation/Port.swift +++ b/Sources/Foundation/Port.swift @@ -113,6 +113,12 @@ fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM.rawValue) fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) #endif +#if canImport(Musl) +import Musl +fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM) +fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) +#endif + #if canImport(Glibc) && os(Android) || os(OpenBSD) import Glibc fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM) From b22db59d5b4aac08614151081ed0786a944e4000 Mon Sep 17 00:00:00 2001 From: Evan Wilde Date: Tue, 13 Aug 2024 14:47:48 -0700 Subject: [PATCH 136/198] Add comment on symbol searching Add comment describing why we need to check for the availability of strlcat/strlcpy and issetguid. Also removed setting the _GNU_SOURCES compile-definition and -fblocks flag as it's already added through one of the global variables. --- CMakeLists.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a5c765cc3..abecd29bd3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,6 +99,12 @@ include(CheckSymbolExists) check_linker_flag(C "LINKER:--build-id=sha1" LINKER_SUPPORTS_BUILD_ID) +# Detect if the system libc defines symbols for these functions. +# If it is not availble, swift-corelibs-foundation has its own implementations +# that will be used. If it is available, it should not redefine them. +# Note: SwiftPM does not have the ability to introspect the contents of the SDK +# and therefore will always include these functions in the build and will +# cause build failures on platforms that define these functions. check_symbol_exists("strlcat" "string.h" HAVE_STRLCAT) check_symbol_exists("strlcpy" "string.h" HAVE_STRLCPY) check_symbol_exists("issetugid" "unistd.h" HAVE_ISSETUGID) @@ -107,17 +113,11 @@ add_compile_definitions( $<$,$>:HAVE_STRLCPY> $<$,$>:HAVE_ISSETUGID>) -if(CMAKE_SYSTEM_NAME STREQUAL Linux OR ANDROID) - add_compile_definitions($<$:_GNU_SOURCE>) -endif() - if(CMAKE_SYSTEM_NAME STREQUAL Linux) check_symbol_exists(sched_getaffinity "sched.h" HAVE_SCHED_GETAFFINITY) add_compile_definitions($<$:HAVE_SCHED_GETAFFINITY>) endif() -add_compile_options($<$:-fblocks>) - # Precompute module triple for installation if(NOT SwiftFoundation_MODULE_TRIPLE) set(module_triple_command "${CMAKE_Swift_COMPILER}" -print-target-info) From 2973067e56eb72ba1a86fad2e7a9aff4dfdb317c Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld <1004103+jmschonfeld@users.noreply.github.com> Date: Fri, 16 Aug 2024 09:47:29 -0700 Subject: [PATCH 137/198] Fix CFTimeZone crashes on Windows (#5070) * Fix CFTimeZone crashes on Windows * Fix build failure --- Sources/CoreFoundation/CFTimeZone.c | 135 +--- .../CFTimeZone_WindowsMapping.c | 552 +++++++++++++ Sources/CoreFoundation/CMakeLists.txt | 1 + Sources/CoreFoundation/CoreFoundation.rc | 6 - .../CoreFoundation/OlsonWindowsMapping.plist | 740 ------------------ .../CoreFoundation/WindowsOlsonMapping.plist | 276 ------- .../CoreFoundation/include/WindowsResources.h | 4 - .../CFTimeZone_WindowsMapping.h | 18 + 8 files changed, 583 insertions(+), 1149 deletions(-) create mode 100644 Sources/CoreFoundation/CFTimeZone_WindowsMapping.c delete mode 100644 Sources/CoreFoundation/CoreFoundation.rc delete mode 100644 Sources/CoreFoundation/OlsonWindowsMapping.plist delete mode 100644 Sources/CoreFoundation/WindowsOlsonMapping.plist delete mode 100644 Sources/CoreFoundation/include/WindowsResources.h create mode 100644 Sources/CoreFoundation/internalInclude/CFTimeZone_WindowsMapping.h diff --git a/Sources/CoreFoundation/CFTimeZone.c b/Sources/CoreFoundation/CFTimeZone.c index e959bdc264..29f59b3bbe 100644 --- a/Sources/CoreFoundation/CFTimeZone.c +++ b/Sources/CoreFoundation/CFTimeZone.c @@ -39,7 +39,7 @@ #if TARGET_OS_WIN32 #include -#include "WindowsResources.h" +#include "CFTimeZone_WindowsMapping.h" #define NOMINMAX #define WIN32_LEAN_AND_MEAN #include "Windows.h" @@ -92,11 +92,6 @@ static CFArrayRef __CFKnownTimeZoneList = NULL; static CFMutableDictionaryRef __CFTimeZoneCache = NULL; static CFLock_t __CFTimeZoneGlobalLock = CFLockInit; -#if TARGET_OS_WIN32 -static CFDictionaryRef __CFTimeZoneWinToOlsonDict = NULL; -static CFLock_t __CFTimeZoneWinToOlsonLock = CFLockInit; -#endif - CF_INLINE void __CFTimeZoneLockGlobal(void) { __CFLock(&__CFTimeZoneGlobalLock); } @@ -672,110 +667,7 @@ CFTypeID CFTimeZoneGetTypeID(void) { return _kCFRuntimeIDCFTimeZone; } -#if TARGET_OS_WIN32 -CF_INLINE void __CFTimeZoneLockWinToOlson(void) { - __CFLock(&__CFTimeZoneWinToOlsonLock); -} - -CF_INLINE void __CFTimeZoneUnlockWinToOlson(void) { - __CFUnlock(&__CFTimeZoneWinToOlsonLock); -} - -static Boolean CFTimeZoneLoadPlistResource(LPCSTR lpName, LPVOID *ppResource, LPDWORD pdwSize) { - HRSRC hResource; - HGLOBAL hMemory; - HMODULE hModule; - - if (!GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, - (LPCWSTR)&CFTimeZoneLoadPlistResource, &hModule)) { - return FALSE; - } - - hResource = FindResourceA(hModule, lpName, "PLIST"); - if (hResource == NULL) { - return FALSE; - } - - hMemory = LoadResource(hModule, hResource); - if (hMemory == NULL) { - return FALSE; - } - - *pdwSize = SizeofResource(hModule, hResource); - *ppResource = LockResource(hMemory); - - return *pdwSize && *ppResource; -} - -CFDictionaryRef CFTimeZoneCopyWinToOlsonDictionary(void) { - CFDictionaryRef dict; - - __CFTimeZoneLockWinToOlson(); - if (NULL == __CFTimeZoneWinToOlsonDict) { - const uint8_t *plist; - DWORD dwSize; - - if (CFTimeZoneLoadPlistResource(MAKEINTRESOURCEA(IDR_WINDOWS_OLSON_MAPPING), (LPVOID *)&plist, &dwSize)) { - CFDataRef data = CFDataCreate(kCFAllocatorSystemDefault, plist, dwSize); - __CFTimeZoneWinToOlsonDict = (CFDictionaryRef)CFPropertyListCreateFromXMLData(kCFAllocatorSystemDefault, data, kCFPropertyListImmutable, NULL); - CFRelease(data); - } - } - if (NULL == __CFTimeZoneWinToOlsonDict) { - __CFTimeZoneWinToOlsonDict = CFDictionaryCreate(kCFAllocatorSystemDefault, NULL, NULL, 0, NULL, NULL); - } - dict = __CFTimeZoneWinToOlsonDict ? (CFDictionaryRef)CFRetain(__CFTimeZoneWinToOlsonDict) : NULL; - __CFTimeZoneUnlockWinToOlson(); - - return dict; -} - -static CFDictionaryRef CFTimeZoneCopyOlsonToWindowsDictionary(void) { - static CFDictionaryRef dict; - static CFLock_t lock; - - __CFLock(&lock); - if (dict == NULL) { - const uint8_t *plist; - DWORD dwSize; - - if (CFTimeZoneLoadPlistResource(MAKEINTRESOURCEA(IDR_OLSON_WINDOWS_MAPPING), (LPVOID *)&plist, &dwSize)) { - CFDataRef data = CFDataCreateWithBytesNoCopy(kCFAllocatorSystemDefault, plist, dwSize, kCFAllocatorNull); - dict = CFPropertyListCreateFromXMLData(kCFAllocatorSystemDefault, data, kCFPropertyListImmutable, NULL); - CFRelease(data); - } - } - __CFUnlock(&lock); - - return dict ? CFRetain(dict) : NULL; -} - -void CFTimeZoneSetWinToOlsonDictionary(CFDictionaryRef dict) { - __CFGenericValidateType(dict, CFDictionaryGetTypeID()); - __CFTimeZoneLockWinToOlson(); - if (dict != __CFTimeZoneWinToOlsonDict) { - CFDictionaryRef oldDict = __CFTimeZoneWinToOlsonDict; - __CFTimeZoneWinToOlsonDict = dict ? CFRetain(dict) : NULL; - CFRelease(oldDict); - } - __CFTimeZoneUnlockWinToOlson(); -} - -CFTimeZoneRef CFTimeZoneCreateWithWindowsName(CFAllocatorRef allocator, CFStringRef winName) { - if (!winName) return NULL; - - CFDictionaryRef winToOlson = CFTimeZoneCopyWinToOlsonDictionary(); - if (!winToOlson) return NULL; - - CFStringRef olsonName = CFDictionaryGetValue(winToOlson, winName); - CFTimeZoneRef retval = NULL; - if (olsonName) { - retval = CFTimeZoneCreateWithName(allocator, olsonName, false); - } - CFRelease(winToOlson); - return retval; -} -#elif TARGET_OS_MAC +#if TARGET_OS_MAC static void __InitTZStrings(void) { static dispatch_once_t initOnce = 0; @@ -810,7 +702,7 @@ static void __InitTZStrings(void) { }); } -#elif TARGET_OS_ANDROID +#elif TARGET_OS_ANDROID || TARGET_OS_WINDOWS // Nothing #elif TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI static void __InitTZStrings(void) { @@ -834,12 +726,7 @@ static CFTimeZoneRef __CFTimeZoneCreateSystem(void) { LPWSTR standardName = (LPWSTR)&tzi.StandardName; CFStringRef cfStandardName = CFStringCreateWithBytes(kCFAllocatorSystemDefault, (UInt8 *)standardName, wcslen(standardName)*sizeof(WCHAR), kCFStringEncodingUTF16LE, false); if (cfStandardName) { - CFDictionaryRef winToOlson = CFTimeZoneCopyWinToOlsonDictionary(); - if (winToOlson) { - name = CFDictionaryGetValue(winToOlson, cfStandardName); - if (name) CFRetain(name); - CFRelease(winToOlson); - } + name = _CFTimeZoneCopyOlsonNameForWindowsName(cfStandardName); CFRelease(cfStandardName); } } else { @@ -1326,9 +1213,9 @@ Boolean _CFTimeZoneInit(CFTimeZoneRef timeZone, CFStringRef name, CFDataRef data tzName = CFDictionaryGetValue(abbrevs, name); if (tzName == NULL) { - CFDictionaryRef olson = CFTimeZoneCopyOlsonToWindowsDictionary(); - tzName = CFDictionaryGetValue(olson, name); - CFRelease(olson); + tzName = _CFTimeZoneCopyWindowsNameForOlsonName(name); + } else { + CFRetain(tzName); } CFRelease(abbrevs); @@ -1336,6 +1223,7 @@ Boolean _CFTimeZoneInit(CFTimeZoneRef timeZone, CFStringRef name, CFDataRef data if (tzName) { __CFTimeZoneGetOffset(tzName, &offset); // TODO: handle DST + CFRelease(tzName); return __CFTimeZoneInitFixed(timeZone, offset, name, 0); } @@ -1542,15 +1430,16 @@ CFTimeZoneRef CFTimeZoneCreateWithName(CFAllocatorRef allocator, CFStringRef nam tzName = CFDictionaryGetValue(abbrevs, name); if (tzName == NULL) { - CFDictionaryRef olson = CFTimeZoneCopyOlsonToWindowsDictionary(); - tzName = CFDictionaryGetValue(olson, name); - CFRelease(olson); + tzName = _CFTimeZoneCopyWindowsNameForOlsonName(name); + } else { + tzName = CFRetain(tzName); } CFRelease(abbrevs); if (tzName) { __CFTimeZoneGetOffset(tzName, &offset); + CFRelease(tzName); // TODO: handle DST result = __CFTimeZoneCreateFixed(allocator, offset, name, 0); } diff --git a/Sources/CoreFoundation/CFTimeZone_WindowsMapping.c b/Sources/CoreFoundation/CFTimeZone_WindowsMapping.c new file mode 100644 index 0000000000..8661097328 --- /dev/null +++ b/Sources/CoreFoundation/CFTimeZone_WindowsMapping.c @@ -0,0 +1,552 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// + +#include "CFTimeZone_WindowsMapping.h" + +#if TARGET_OS_WINDOWS + +typedef struct { + char *source; + char *dest; +} __CFTimeZoneIdentifierPair; + +static __CFTimeZoneIdentifierPair __CFWindowsOlsonMapping[] = { + { "Dateline Standard Time", "Etc/GMT+12" }, + { "UTC-11", "Etc/GMT+11" }, + { "Aleutian Standard Time", "America/Adak" }, + { "Hawaiian Standard Time", "Pacific/Honolulu" }, + { "Marquesas Standard Time", "Pacific/Marquesas" }, + { "Alaskan Standard Time", "America/Anchorage" }, + { "UTC-09", "Etc/GMT+9" }, + { "Pacific Standard Time (Mexico)", "America/Tijuana" }, + { "UTC-08", "Etc/GMT+8" }, + { "Pacific Standard Time", "America/Los_Angeles" }, + { "US Mountain Standard Time", "America/Phoenix" }, + { "Mountain Standard Time (Mexico)", "America/Chihuahua" }, + { "Mountain Standard Time", "America/Denver" }, + { "Central America Standard Time", "America/Guatemala" }, + { "Central Standard Time", "America/Chicago" }, + { "Easter Island Standard Time", "Pacific/Easter" }, + { "Central Standard Time (Mexico)", "America/Mexico_City" }, + { "Canada Central Standard Time", "America/Regina" }, + { "SA Pacific Standard Time", "America/Bogota" }, + { "Eastern Standard Time (Mexico)", "America/Cancun" }, + { "Eastern Standard Time", "America/New_York" }, + { "Haiti Standard Time", "America/Port-au-Prince" }, + { "Cuba Standard Time", "America/Havana" }, + { "US Eastern Standard Time", "America/Indianapolis" }, + { "Paraguay Standard Time", "America/Asuncion" }, + { "Atlantic Standard Time", "America/Halifax" }, + { "Venezuela Standard Time", "America/Caracas" }, + { "Central Brazilian Standard Time", "America/Cuiaba" }, + { "SA Western Standard Time", "America/La_Paz" }, + { "Pacific SA Standard Time", "America/Santiago" }, + { "Turks And Caicos Standard Time", "America/Grand_Turk" }, + { "Newfoundland Standard Time", "America/St_Johns" }, + { "Tocantins Standard Time", "America/Araguaina" }, + { "E. South America Standard Time", "America/Sao_Paulo" }, + { "SA Eastern Standard Time", "America/Cayenne" }, + { "Argentina Standard Time", "America/Buenos_Aires" }, + { "Greenland Standard Time", "America/Godthab" }, + { "Montevideo Standard Time", "America/Montevideo" }, + { "Magallanes Standard Time", "America/Punta_Arenas" }, + { "Saint Pierre Standard Time", "America/Miquelon" }, + { "Bahia Standard Time", "America/Bahia" }, + { "UTC-02", "Etc/GMT+2" }, + { "Azores Standard Time", "Atlantic/Azores" }, + { "Cape Verde Standard Time", "Atlantic/Cape_Verde" }, + { "UTC", "Etc/GMT" }, + { "GMT Standard Time", "Europe/London" }, + { "Greenwich Standard Time", "Atlantic/Reykjavik" }, + { "W. Europe Standard Time", "Europe/Berlin" }, + { "Central Europe Standard Time", "Europe/Budapest" }, + { "Romance Standard Time", "Europe/Paris" }, + { "Morocco Standard Time", "Africa/Casablanca" }, + { "Sao Tome Standard Time", "Africa/Sao_Tome" }, + { "Central European Standard Time", "Europe/Warsaw" }, + { "W. Central Africa Standard Time", "Africa/Lagos" }, + { "Jordan Standard Time", "Asia/Amman" }, + { "GTB Standard Time", "Europe/Bucharest" }, + { "Middle East Standard Time", "Asia/Beirut" }, + { "Egypt Standard Time", "Africa/Cairo" }, + { "E. Europe Standard Time", "Europe/Chisinau" }, + { "Syria Standard Time", "Asia/Damascus" }, + { "West Bank Standard Time", "Asia/Hebron" }, + { "South Africa Standard Time", "Africa/Johannesburg" }, + { "FLE Standard Time", "Europe/Kiev" }, + { "Israel Standard Time", "Asia/Jerusalem" }, + { "Kaliningrad Standard Time", "Europe/Kaliningrad" }, + { "Sudan Standard Time", "Africa/Khartoum" }, + { "Libya Standard Time", "Africa/Tripoli" }, + { "Namibia Standard Time", "Africa/Windhoek" }, + { "Arabic Standard Time", "Asia/Baghdad" }, + { "Turkey Standard Time", "Europe/Istanbul" }, + { "Arab Standard Time", "Asia/Riyadh" }, + { "Belarus Standard Time", "Europe/Minsk" }, + { "Russian Standard Time", "Europe/Moscow" }, + { "E. Africa Standard Time", "Africa/Nairobi" }, + { "Iran Standard Time", "Asia/Tehran" }, + { "Arabian Standard Time", "Asia/Dubai" }, + { "Astrakhan Standard Time", "Europe/Astrakhan" }, + { "Azerbaijan Standard Time", "Asia/Baku" }, + { "Russia Time Zone 3", "Europe/Samara" }, + { "Mauritius Standard Time", "Indian/Mauritius" }, + { "Saratov Standard Time", "Europe/Saratov" }, + { "Georgian Standard Time", "Asia/Tbilisi" }, + { "Caucasus Standard Time", "Asia/Yerevan" }, + { "Afghanistan Standard Time", "Asia/Kabul" }, + { "West Asia Standard Time", "Asia/Tashkent" }, + { "Ekaterinburg Standard Time", "Asia/Yekaterinburg" }, + { "Pakistan Standard Time", "Asia/Karachi" }, + { "India Standard Time", "Asia/Calcutta" }, + { "Sri Lanka Standard Time", "Asia/Colombo" }, + { "Nepal Standard Time", "Asia/Katmandu" }, + { "Central Asia Standard Time", "Asia/Almaty" }, + { "Bangladesh Standard Time", "Asia/Dhaka" }, + { "Omsk Standard Time", "Asia/Omsk" }, + { "Myanmar Standard Time", "Asia/Rangoon" }, + { "SE Asia Standard Time", "Asia/Bangkok" }, + { "Altai Standard Time", "Asia/Barnaul" }, + { "W. Mongolia Standard Time", "Asia/Hovd" }, + { "North Asia Standard Time", "Asia/Krasnoyarsk" }, + { "N. Central Asia Standard Time", "Asia/Novosibirsk" }, + { "Tomsk Standard Time", "Asia/Tomsk" }, + { "China Standard Time", "Asia/Shanghai" }, + { "North Asia East Standard Time", "Asia/Irkutsk" }, + { "Singapore Standard Time", "Asia/Singapore" }, + { "W. Australia Standard Time", "Australia/Perth" }, + { "Taipei Standard Time", "Asia/Taipei" }, + { "Ulaanbaatar Standard Time", "Asia/Ulaanbaatar" }, + { "Aus Central W. Standard Time", "Australia/Eucla" }, + { "Transbaikal Standard Time", "Asia/Chita" }, + { "Tokyo Standard Time", "Asia/Tokyo" }, + { "North Korea Standard Time", "Asia/Pyongyang" }, + { "Korea Standard Time", "Asia/Seoul" }, + { "Yakutsk Standard Time", "Asia/Yakutsk" }, + { "Cen. Australia Standard Time", "Australia/Adelaide" }, + { "AUS Central Standard Time", "Australia/Darwin" }, + { "E. Australia Standard Time", "Australia/Brisbane" }, + { "AUS Eastern Standard Time", "Australia/Sydney" }, + { "West Pacific Standard Time", "Pacific/Port_Moresby" }, + { "Tasmania Standard Time", "Australia/Hobart" }, + { "Vladivostok Standard Time", "Asia/Vladivostok" }, + { "Lord Howe Standard Time", "Australia/Lord_Howe" }, + { "Bougainville Standard Time", "Pacific/Bougainville" }, + { "Russia Time Zone 10", "Asia/Srednekolymsk" }, + { "Magadan Standard Time", "Asia/Magadan" }, + { "Norfolk Standard Time", "Pacific/Norfolk" }, + { "Sakhalin Standard Time", "Asia/Sakhalin" }, + { "Central Pacific Standard Time", "Pacific/Guadalcanal" }, + { "Russia Time Zone 11", "Asia/Kamchatka" }, + { "New Zealand Standard Time", "Pacific/Auckland" }, + { "UTC+12", "Etc/GMT-12" }, + { "Fiji Standard Time", "Pacific/Fiji" }, + { "Chatham Islands Standard Time", "Pacific/Chatham" }, + { "UTC+13", "Etc/GMT-13" }, + { "Tonga Standard Time", "Pacific/Tongatapu" }, + { "Samoa Standard Time", "Pacific/Apia" }, + { "Line Islands Standard Time", "Pacific/Kiritimati" }, + { 0, 0 } +}; + +static __CFTimeZoneIdentifierPair __CFOlsonWindowsMapping[] = { + { "Etc/GMT+12", "Dateline Standard Time" }, + { "Pacific/Pago_Pago", "UTC-11" }, + { "Pacific/Niue", "UTC-11" }, + { "Pacific/Midway", "UTC-11" }, + { "Etc/GMT+11", "UTC-11" }, + { "America/Adak", "Aleutian Standard Time" }, + { "Pacific/Rarotonga", "Hawaiian Standard Time" }, + { "Pacific/Tahiti", "Hawaiian Standard Time" }, + { "Pacific/Johnston", "Hawaiian Standard Time" }, + { "Pacific/Honolulu", "Hawaiian Standard Time" }, + { "Etc/GMT+10", "Hawaiian Standard Time" }, + { "Pacific/Marquesas", "Marquesas Standard Time" }, + { "America/Anchorage", "Alaskan Standard Time" }, + { "Pacific/Gambier", "UTC-09" }, + { "Etc/GMT+9", "UTC-09" }, + { "America/Tijuana", "Pacific Standard Time (Mexico)" }, + { "Pacific/Pitcairn", "UTC-08" }, + { "Etc/GMT+8", "UTC-08" }, + { "America/Vancouver", "Pacific Standard Time" }, + { "America/Los_Angeles", "Pacific Standard Time" }, + { "PST8PDT", "Pacific Standard Time" }, + { "America/Dawson_Creek", "US Mountain Standard Time" }, + { "America/Hermosillo", "US Mountain Standard Time" }, + { "America/Phoenix", "US Mountain Standard Time" }, + { "Etc/GMT+7", "US Mountain Standard Time" }, + { "America/Chihuahua", "Mountain Standard Time (Mexico)" }, + { "America/Edmonton", "Mountain Standard Time" }, + { "America/Ojinaga", "Mountain Standard Time" }, + { "America/Denver", "Mountain Standard Time" }, + { "MST7MDT", "Mountain Standard Time" }, + { "America/Belize", "Central America Standard Time" }, + { "America/Costa_Rica", "Central America Standard Time" }, + { "Pacific/Galapagos", "Central America Standard Time" }, + { "America/Guatemala", "Central America Standard Time" }, + { "America/Tegucigalpa", "Central America Standard Time" }, + { "America/Managua", "Central America Standard Time" }, + { "America/El_Salvador", "Central America Standard Time" }, + { "Etc/GMT+6", "Central America Standard Time" }, + { "America/Winnipeg", "Central Standard Time" }, + { "America/Matamoros", "Central Standard Time" }, + { "America/Chicago", "Central Standard Time" }, + { "CST6CDT", "Central Standard Time" }, + { "Pacific/Easter", "Easter Island Standard Time" }, + { "America/Mexico_City", "Central Standard Time (Mexico)" }, + { "America/Regina", "Canada Central Standard Time" }, + { "America/Rio_Branco", "SA Pacific Standard Time" }, + { "America/Coral_Harbour", "SA Pacific Standard Time" }, + { "America/Bogota", "SA Pacific Standard Time" }, + { "America/Guayaquil", "SA Pacific Standard Time" }, + { "America/Jamaica", "SA Pacific Standard Time" }, + { "America/Cayman", "SA Pacific Standard Time" }, + { "America/Panama", "SA Pacific Standard Time" }, + { "America/Lima", "SA Pacific Standard Time" }, + { "Etc/GMT+5", "SA Pacific Standard Time" }, + { "America/Cancun", "Eastern Standard Time (Mexico)" }, + { "America/Nassau", "Eastern Standard Time" }, + { "America/Toronto", "Eastern Standard Time" }, + { "America/New_York", "Eastern Standard Time" }, + { "EST5EDT", "Eastern Standard Time" }, + { "America/Port-au-Prince", "Haiti Standard Time" }, + { "America/Havana", "Cuba Standard Time" }, + { "America/Indianapolis", "US Eastern Standard Time" }, + { "America/Asuncion", "Paraguay Standard Time" }, + { "Atlantic/Bermuda", "Atlantic Standard Time" }, + { "America/Halifax", "Atlantic Standard Time" }, + { "America/Thule", "Atlantic Standard Time" }, + { "America/Caracas", "Venezuela Standard Time" }, + { "America/Cuiaba", "Central Brazilian Standard Time" }, + { "America/Antigua", "SA Western Standard Time" }, + { "America/Anguilla", "SA Western Standard Time" }, + { "America/Aruba", "SA Western Standard Time" }, + { "America/Barbados", "SA Western Standard Time" }, + { "America/St_Barthelemy", "SA Western Standard Time" }, + { "America/La_Paz", "SA Western Standard Time" }, + { "America/Kralendijk", "SA Western Standard Time" }, + { "America/Manaus", "SA Western Standard Time" }, + { "America/Blanc-Sablon", "SA Western Standard Time" }, + { "America/Curacao", "SA Western Standard Time" }, + { "America/Dominica", "SA Western Standard Time" }, + { "America/Santo_Domingo", "SA Western Standard Time" }, + { "America/Grenada", "SA Western Standard Time" }, + { "America/Guadeloupe", "SA Western Standard Time" }, + { "America/Guyana", "SA Western Standard Time" }, + { "America/St_Kitts", "SA Western Standard Time" }, + { "America/St_Lucia", "SA Western Standard Time" }, + { "America/Marigot", "SA Western Standard Time" }, + { "America/Martinique", "SA Western Standard Time" }, + { "America/Montserrat", "SA Western Standard Time" }, + { "America/Puerto_Rico", "SA Western Standard Time" }, + { "America/Lower_Princes", "SA Western Standard Time" }, + { "America/Port_of_Spain", "SA Western Standard Time" }, + { "America/St_Vincent", "SA Western Standard Time" }, + { "America/Tortola", "SA Western Standard Time" }, + { "America/St_Thomas", "SA Western Standard Time" }, + { "Etc/GMT+4", "SA Western Standard Time" }, + { "America/Santiago", "Pacific SA Standard Time" }, + { "America/Grand_Turk", "Turks And Caicos Standard Time" }, + { "America/St_Johns", "Newfoundland Standard Time" }, + { "America/Araguaina", "Tocantins Standard Time" }, + { "America/Sao_Paulo", "E. South America Standard Time" }, + { "Antarctica/Rothera", "SA Eastern Standard Time" }, + { "America/Fortaleza", "SA Eastern Standard Time" }, + { "Atlantic/Stanley", "SA Eastern Standard Time" }, + { "America/Cayenne", "SA Eastern Standard Time" }, + { "America/Paramaribo", "SA Eastern Standard Time" }, + { "Etc/GMT+3", "SA Eastern Standard Time" }, + { "America/Buenos_Aires", "Argentina Standard Time" }, + { "America/Godthab", "Greenland Standard Time" }, + { "America/Montevideo", "Montevideo Standard Time" }, + { "Antarctica/Palmer", "Magallanes Standard Time" }, + { "America/Punta_Arenas", "Magallanes Standard Time" }, + { "America/Miquelon", "Saint Pierre Standard Time" }, + { "America/Bahia", "Bahia Standard Time" }, + { "America/Noronha", "UTC-02" }, + { "Atlantic/South_Georgia", "UTC-02" }, + { "Etc/GMT+2", "UTC-02" }, + { "America/Scoresbysund", "Azores Standard Time" }, + { "Atlantic/Azores", "Azores Standard Time" }, + { "Atlantic/Cape_Verde", "Cape Verde Standard Time" }, + { "Etc/GMT+1", "Cape Verde Standard Time" }, + { "America/Danmarkshavn", "UTC" }, + { "Etc/GMT", "UTC" }, + { "Atlantic/Canary", "GMT Standard Time" }, + { "Atlantic/Faeroe", "GMT Standard Time" }, + { "Europe/London", "GMT Standard Time" }, + { "Europe/Guernsey", "GMT Standard Time" }, + { "Europe/Dublin", "GMT Standard Time" }, + { "Europe/Isle_of_Man", "GMT Standard Time" }, + { "Europe/Jersey", "GMT Standard Time" }, + { "Europe/Lisbon", "GMT Standard Time" }, + { "Africa/Ouagadougou", "Greenwich Standard Time" }, + { "Africa/Abidjan", "Greenwich Standard Time" }, + { "Africa/Accra", "Greenwich Standard Time" }, + { "Africa/Banjul", "Greenwich Standard Time" }, + { "Africa/Conakry", "Greenwich Standard Time" }, + { "Africa/Bissau", "Greenwich Standard Time" }, + { "Atlantic/Reykjavik", "Greenwich Standard Time" }, + { "Africa/Monrovia", "Greenwich Standard Time" }, + { "Africa/Bamako", "Greenwich Standard Time" }, + { "Africa/Nouakchott", "Greenwich Standard Time" }, + { "Atlantic/St_Helena", "Greenwich Standard Time" }, + { "Africa/Freetown", "Greenwich Standard Time" }, + { "Africa/Dakar", "Greenwich Standard Time" }, + { "Africa/Lome", "Greenwich Standard Time" }, + { "Europe/Andorra", "W. Europe Standard Time" }, + { "Europe/Vienna", "W. Europe Standard Time" }, + { "Europe/Zurich", "W. Europe Standard Time" }, + { "Europe/Berlin", "W. Europe Standard Time" }, + { "Europe/Gibraltar", "W. Europe Standard Time" }, + { "Europe/Rome", "W. Europe Standard Time" }, + { "Europe/Vaduz", "W. Europe Standard Time" }, + { "Europe/Luxembourg", "W. Europe Standard Time" }, + { "Europe/Monaco", "W. Europe Standard Time" }, + { "Europe/Malta", "W. Europe Standard Time" }, + { "Europe/Amsterdam", "W. Europe Standard Time" }, + { "Europe/Oslo", "W. Europe Standard Time" }, + { "Europe/Stockholm", "W. Europe Standard Time" }, + { "Arctic/Longyearbyen", "W. Europe Standard Time" }, + { "Europe/San_Marino", "W. Europe Standard Time" }, + { "Europe/Vatican", "W. Europe Standard Time" }, + { "Europe/Tirane", "Central Europe Standard Time" }, + { "Europe/Prague", "Central Europe Standard Time" }, + { "Europe/Budapest", "Central Europe Standard Time" }, + { "Europe/Podgorica", "Central Europe Standard Time" }, + { "Europe/Belgrade", "Central Europe Standard Time" }, + { "Europe/Ljubljana", "Central Europe Standard Time" }, + { "Europe/Bratislava", "Central Europe Standard Time" }, + { "Europe/Brussels", "Romance Standard Time" }, + { "Europe/Copenhagen", "Romance Standard Time" }, + { "Europe/Madrid", "Romance Standard Time" }, + { "Europe/Paris", "Romance Standard Time" }, + { "Africa/El_Aaiun", "Morocco Standard Time" }, + { "Africa/Casablanca", "Morocco Standard Time" }, + { "Africa/Sao_Tome", "Sao Tome Standard Time" }, + { "Europe/Sarajevo", "Central European Standard Time" }, + { "Europe/Zagreb", "Central European Standard Time" }, + { "Europe/Skopje", "Central European Standard Time" }, + { "Europe/Warsaw", "Central European Standard Time" }, + { "Africa/Luanda", "W. Central Africa Standard Time" }, + { "Africa/Porto-Novo", "W. Central Africa Standard Time" }, + { "Africa/Kinshasa", "W. Central Africa Standard Time" }, + { "Africa/Bangui", "W. Central Africa Standard Time" }, + { "Africa/Brazzaville", "W. Central Africa Standard Time" }, + { "Africa/Douala", "W. Central Africa Standard Time" }, + { "Africa/Algiers", "W. Central Africa Standard Time" }, + { "Africa/Libreville", "W. Central Africa Standard Time" }, + { "Africa/Malabo", "W. Central Africa Standard Time" }, + { "Africa/Niamey", "W. Central Africa Standard Time" }, + { "Africa/Lagos", "W. Central Africa Standard Time" }, + { "Africa/Ndjamena", "W. Central Africa Standard Time" }, + { "Africa/Tunis", "W. Central Africa Standard Time" }, + { "Etc/GMT-1", "W. Central Africa Standard Time" }, + { "Asia/Amman", "Jordan Standard Time" }, + { "Asia/Famagusta", "GTB Standard Time" }, + { "Europe/Athens", "GTB Standard Time" }, + { "Europe/Bucharest", "GTB Standard Time" }, + { "Asia/Beirut", "Middle East Standard Time" }, + { "Africa/Cairo", "Egypt Standard Time" }, + { "Europe/Chisinau", "E. Europe Standard Time" }, + { "Asia/Damascus", "Syria Standard Time" }, + { "Asia/Hebron", "West Bank Standard Time" }, + { "Africa/Bujumbura", "South Africa Standard Time" }, + { "Africa/Gaborone", "South Africa Standard Time" }, + { "Africa/Lubumbashi", "South Africa Standard Time" }, + { "Africa/Maseru", "South Africa Standard Time" }, + { "Africa/Blantyre", "South Africa Standard Time" }, + { "Africa/Maputo", "South Africa Standard Time" }, + { "Africa/Kigali", "South Africa Standard Time" }, + { "Africa/Mbabane", "South Africa Standard Time" }, + { "Africa/Johannesburg", "South Africa Standard Time" }, + { "Africa/Lusaka", "South Africa Standard Time" }, + { "Africa/Harare", "South Africa Standard Time" }, + { "Etc/GMT-2", "South Africa Standard Time" }, + { "Europe/Mariehamn", "FLE Standard Time" }, + { "Europe/Sofia", "FLE Standard Time" }, + { "Europe/Tallinn", "FLE Standard Time" }, + { "Europe/Helsinki", "FLE Standard Time" }, + { "Europe/Vilnius", "FLE Standard Time" }, + { "Europe/Riga", "FLE Standard Time" }, + { "Europe/Kiev", "FLE Standard Time" }, + { "Asia/Jerusalem", "Israel Standard Time" }, + { "Europe/Kaliningrad", "Kaliningrad Standard Time" }, + { "Africa/Khartoum", "Sudan Standard Time" }, + { "Africa/Tripoli", "Libya Standard Time" }, + { "Africa/Windhoek", "Namibia Standard Time" }, + { "Asia/Baghdad", "Arabic Standard Time" }, + { "Europe/Istanbul", "Turkey Standard Time" }, + { "Asia/Bahrain", "Arab Standard Time" }, + { "Asia/Kuwait", "Arab Standard Time" }, + { "Asia/Qatar", "Arab Standard Time" }, + { "Asia/Riyadh", "Arab Standard Time" }, + { "Asia/Aden", "Arab Standard Time" }, + { "Europe/Minsk", "Belarus Standard Time" }, + { "Europe/Moscow", "Russian Standard Time" }, + { "Europe/Simferopol", "Russian Standard Time" }, + { "Antarctica/Syowa", "E. Africa Standard Time" }, + { "Africa/Djibouti", "E. Africa Standard Time" }, + { "Africa/Asmera", "E. Africa Standard Time" }, + { "Africa/Addis_Ababa", "E. Africa Standard Time" }, + { "Africa/Nairobi", "E. Africa Standard Time" }, + { "Indian/Comoro", "E. Africa Standard Time" }, + { "Indian/Antananarivo", "E. Africa Standard Time" }, + { "Africa/Mogadishu", "E. Africa Standard Time" }, + { "Africa/Juba", "E. Africa Standard Time" }, + { "Africa/Dar_es_Salaam", "E. Africa Standard Time" }, + { "Africa/Kampala", "E. Africa Standard Time" }, + { "Indian/Mayotte", "E. Africa Standard Time" }, + { "Etc/GMT-3", "E. Africa Standard Time" }, + { "Asia/Tehran", "Iran Standard Time" }, + { "Asia/Dubai", "Arabian Standard Time" }, + { "Asia/Muscat", "Arabian Standard Time" }, + { "Etc/GMT-4", "Arabian Standard Time" }, + { "Europe/Astrakhan", "Astrakhan Standard Time" }, + { "Asia/Baku", "Azerbaijan Standard Time" }, + { "Europe/Samara", "Russia Time Zone 3" }, + { "Indian/Mauritius", "Mauritius Standard Time" }, + { "Indian/Reunion", "Mauritius Standard Time" }, + { "Indian/Mahe", "Mauritius Standard Time" }, + { "Europe/Saratov", "Saratov Standard Time" }, + { "Asia/Tbilisi", "Georgian Standard Time" }, + { "Asia/Yerevan", "Caucasus Standard Time" }, + { "Asia/Kabul", "Afghanistan Standard Time" }, + { "Antarctica/Mawson", "West Asia Standard Time" }, + { "Asia/Oral", "West Asia Standard Time" }, + { "Indian/Maldives", "West Asia Standard Time" }, + { "Indian/Kerguelen", "West Asia Standard Time" }, + { "Asia/Dushanbe", "West Asia Standard Time" }, + { "Asia/Ashgabat", "West Asia Standard Time" }, + { "Asia/Tashkent", "West Asia Standard Time" }, + { "Etc/GMT-5", "West Asia Standard Time" }, + { "Asia/Yekaterinburg", "Ekaterinburg Standard Time" }, + { "Asia/Karachi", "Pakistan Standard Time" }, + { "Asia/Calcutta", "India Standard Time" }, + { "Asia/Colombo", "Sri Lanka Standard Time" }, + { "Asia/Katmandu", "Nepal Standard Time" }, + { "Antarctica/Vostok", "Central Asia Standard Time" }, + { "Asia/Urumqi", "Central Asia Standard Time" }, + { "Indian/Chagos", "Central Asia Standard Time" }, + { "Asia/Bishkek", "Central Asia Standard Time" }, + { "Asia/Almaty", "Central Asia Standard Time" }, + { "Etc/GMT-6", "Central Asia Standard Time" }, + { "Asia/Dhaka", "Bangladesh Standard Time" }, + { "Asia/Thimphu", "Bangladesh Standard Time" }, + { "Asia/Omsk", "Omsk Standard Time" }, + { "Indian/Cocos", "Myanmar Standard Time" }, + { "Asia/Rangoon", "Myanmar Standard Time" }, + { "Antarctica/Davis", "SE Asia Standard Time" }, + { "Indian/Christmas", "SE Asia Standard Time" }, + { "Asia/Jakarta", "SE Asia Standard Time" }, + { "Asia/Phnom_Penh", "SE Asia Standard Time" }, + { "Asia/Vientiane", "SE Asia Standard Time" }, + { "Asia/Bangkok", "SE Asia Standard Time" }, + { "Asia/Saigon", "SE Asia Standard Time" }, + { "Etc/GMT-7", "SE Asia Standard Time" }, + { "Asia/Barnaul", "Altai Standard Time" }, + { "Asia/Hovd", "W. Mongolia Standard Time" }, + { "Asia/Krasnoyarsk", "North Asia Standard Time" }, + { "Asia/Novosibirsk", "N. Central Asia Standard Time" }, + { "Asia/Tomsk", "Tomsk Standard Time" }, + { "Asia/Shanghai", "China Standard Time" }, + { "Asia/Hong_Kong", "China Standard Time" }, + { "Asia/Macau", "China Standard Time" }, + { "Asia/Irkutsk", "North Asia East Standard Time" }, + { "Asia/Brunei", "Singapore Standard Time" }, + { "Asia/Makassar", "Singapore Standard Time" }, + { "Asia/Kuala_Lumpur", "Singapore Standard Time" }, + { "Asia/Manila", "Singapore Standard Time" }, + { "Asia/Singapore", "Singapore Standard Time" }, + { "Etc/GMT-8", "Singapore Standard Time" }, + { "Antarctica/Casey", "W. Australia Standard Time" }, + { "Australia/Perth", "W. Australia Standard Time" }, + { "Asia/Taipei", "Taipei Standard Time" }, + { "Asia/Ulaanbaatar", "Ulaanbaatar Standard Time" }, + { "Australia/Eucla", "Aus Central W. Standard Time" }, + { "Asia/Chita", "Transbaikal Standard Time" }, + { "Asia/Jayapura", "Tokyo Standard Time" }, + { "Asia/Tokyo", "Tokyo Standard Time" }, + { "Pacific/Palau", "Tokyo Standard Time" }, + { "Asia/Dili", "Tokyo Standard Time" }, + { "Etc/GMT-9", "Tokyo Standard Time" }, + { "Asia/Pyongyang", "North Korea Standard Time" }, + { "Asia/Seoul", "Korea Standard Time" }, + { "Asia/Yakutsk", "Yakutsk Standard Time" }, + { "Australia/Adelaide", "Cen. Australia Standard Time" }, + { "Australia/Darwin", "AUS Central Standard Time" }, + { "Australia/Brisbane", "E. Australia Standard Time" }, + { "Australia/Sydney", "AUS Eastern Standard Time" }, + { "Antarctica/DumontDUrville", "West Pacific Standard Time" }, + { "Pacific/Truk", "West Pacific Standard Time" }, + { "Pacific/Guam", "West Pacific Standard Time" }, + { "Pacific/Saipan", "West Pacific Standard Time" }, + { "Pacific/Port_Moresby", "West Pacific Standard Time" }, + { "Etc/GMT-10", "West Pacific Standard Time" }, + { "Australia/Hobart", "Tasmania Standard Time" }, + { "Asia/Vladivostok", "Vladivostok Standard Time" }, + { "Australia/Lord_Howe", "Lord Howe Standard Time" }, + { "Pacific/Bougainville", "Bougainville Standard Time" }, + { "Asia/Srednekolymsk", "Russia Time Zone 10" }, + { "Asia/Magadan", "Magadan Standard Time" }, + { "Pacific/Norfolk", "Norfolk Standard Time" }, + { "Asia/Sakhalin", "Sakhalin Standard Time" }, + { "Antarctica/Macquarie", "Central Pacific Standard Time" }, + { "Pacific/Ponape", "Central Pacific Standard Time" }, + { "Pacific/Noumea", "Central Pacific Standard Time" }, + { "Pacific/Guadalcanal", "Central Pacific Standard Time" }, + { "Pacific/Efate", "Central Pacific Standard Time" }, + { "Etc/GMT-11", "Central Pacific Standard Time" }, + { "Asia/Kamchatka", "Russia Time Zone 11" }, + { "Antarctica/McMurdo", "New Zealand Standard Time" }, + { "Pacific/Auckland", "New Zealand Standard Time" }, + { "Pacific/Tarawa", "UTC+12" }, + { "Pacific/Majuro", "UTC+12" }, + { "Pacific/Nauru", "UTC+12" }, + { "Pacific/Funafuti", "UTC+12" }, + { "Pacific/Wake", "UTC+12" }, + { "Pacific/Wallis", "UTC+12" }, + { "Etc/GMT-12", "UTC+12" }, + { "Pacific/Fiji", "Fiji Standard Time" }, + { "Pacific/Chatham", "Chatham Islands Standard Time" }, + { "Pacific/Enderbury", "UTC+13" }, + { "Pacific/Fakaofo", "UTC+13" }, + { "Etc/GMT-13", "UTC+13" }, + { "Pacific/Tongatapu", "Tonga Standard Time" }, + { "Pacific/Apia", "Samoa Standard Time" }, + { "Pacific/Kiritimati", "Line Islands Standard Time" }, + { "Etc/GMT-14", "Line Islands Standard Time" }, + { "US/Pacific", "Pacific Standard Time" }, + { 0, 0 } +}; + +static CFStringRef _CFTimeZoneIdentifierPairCopyValue(__CFTimeZoneIdentifierPair *data, CFStringRef key) { + char buffer[128] = {0}; + if (!CFStringGetCString(key, buffer, 128, kCFStringEncodingASCII)) { + return NULL; + } + __CFTimeZoneIdentifierPair *current = data; + while (current->source) { + if (strcmp(current->source, buffer) == 0) { + return CFStringCreateWithCString(kCFAllocatorDefault, current->dest, kCFStringEncodingASCII); + } + current++; + } + return NULL; +} + +CFStringRef _CFTimeZoneCopyWindowsNameForOlsonName(CFStringRef olson) { + return _CFTimeZoneIdentifierPairCopyValue(__CFOlsonWindowsMapping, olson); +} + +CFStringRef _CFTimeZoneCopyOlsonNameForWindowsName(CFStringRef windows) { + return _CFTimeZoneIdentifierPairCopyValue(__CFWindowsOlsonMapping, windows); +} + +#endif diff --git a/Sources/CoreFoundation/CMakeLists.txt b/Sources/CoreFoundation/CMakeLists.txt index 71e7c2f00d..7ae617b497 100644 --- a/Sources/CoreFoundation/CMakeLists.txt +++ b/Sources/CoreFoundation/CMakeLists.txt @@ -85,6 +85,7 @@ add_library(CoreFoundation STATIC CFStringUtilities.c CFSystemDirectories.c CFTimeZone.c + CFTimeZone_WindowsMapping.c CFTree.c CFUniChar.c CFUnicodeDecomposition.c diff --git a/Sources/CoreFoundation/CoreFoundation.rc b/Sources/CoreFoundation/CoreFoundation.rc deleted file mode 100644 index 5419bacca5..0000000000 --- a/Sources/CoreFoundation/CoreFoundation.rc +++ /dev/null @@ -1,6 +0,0 @@ - -#include "WindowsResources.h" - -IDR_WINDOWS_OLSON_MAPPING PLIST "WindowsOlsonMapping.plist" -IDR_OLSON_WINDOWS_MAPPING PLIST "OlsonWindowsMapping.plist" - diff --git a/Sources/CoreFoundation/OlsonWindowsMapping.plist b/Sources/CoreFoundation/OlsonWindowsMapping.plist deleted file mode 100644 index db12239a40..0000000000 --- a/Sources/CoreFoundation/OlsonWindowsMapping.plist +++ /dev/null @@ -1,740 +0,0 @@ - - - - - Etc/GMT+12 - Dateline Standard Time - Pacific/Pago_Pago - UTC-11 - Pacific/Niue - UTC-11 - Pacific/Midway - UTC-11 - Etc/GMT+11 - UTC-11 - America/Adak - Aleutian Standard Time - Pacific/Rarotonga - Hawaiian Standard Time - Pacific/Tahiti - Hawaiian Standard Time - Pacific/Johnston - Hawaiian Standard Time - Pacific/Honolulu - Hawaiian Standard Time - Etc/GMT+10 - Hawaiian Standard Time - Pacific/Marquesas - Marquesas Standard Time - America/Anchorage - Alaskan Standard Time - Pacific/Gambier - UTC-09 - Etc/GMT+9 - UTC-09 - America/Tijuana - Pacific Standard Time (Mexico) - Pacific/Pitcairn - UTC-08 - Etc/GMT+8 - UTC-08 - America/Vancouver - Pacific Standard Time - America/Los_Angeles - Pacific Standard Time - PST8PDT - Pacific Standard Time - America/Dawson_Creek - US Mountain Standard Time - America/Hermosillo - US Mountain Standard Time - America/Phoenix - US Mountain Standard Time - Etc/GMT+7 - US Mountain Standard Time - America/Chihuahua - Mountain Standard Time (Mexico) - America/Edmonton - Mountain Standard Time - America/Ojinaga - Mountain Standard Time - America/Denver - Mountain Standard Time - MST7MDT - Mountain Standard Time - America/Belize - Central America Standard Time - America/Costa_Rica - Central America Standard Time - Pacific/Galapagos - Central America Standard Time - America/Guatemala - Central America Standard Time - America/Tegucigalpa - Central America Standard Time - America/Managua - Central America Standard Time - America/El_Salvador - Central America Standard Time - Etc/GMT+6 - Central America Standard Time - America/Winnipeg - Central Standard Time - America/Matamoros - Central Standard Time - America/Chicago - Central Standard Time - CST6CDT - Central Standard Time - Pacific/Easter - Easter Island Standard Time - America/Mexico_City - Central Standard Time (Mexico) - America/Regina - Canada Central Standard Time - America/Rio_Branco - SA Pacific Standard Time - America/Coral_Harbour - SA Pacific Standard Time - America/Bogota - SA Pacific Standard Time - America/Guayaquil - SA Pacific Standard Time - America/Jamaica - SA Pacific Standard Time - America/Cayman - SA Pacific Standard Time - America/Panama - SA Pacific Standard Time - America/Lima - SA Pacific Standard Time - Etc/GMT+5 - SA Pacific Standard Time - America/Cancun - Eastern Standard Time (Mexico) - America/Nassau - Eastern Standard Time - America/Toronto - Eastern Standard Time - America/New_York - Eastern Standard Time - EST5EDT - Eastern Standard Time - America/Port-au-Prince - Haiti Standard Time - America/Havana - Cuba Standard Time - America/Indianapolis - US Eastern Standard Time - America/Asuncion - Paraguay Standard Time - Atlantic/Bermuda - Atlantic Standard Time - America/Halifax - Atlantic Standard Time - America/Thule - Atlantic Standard Time - America/Caracas - Venezuela Standard Time - America/Cuiaba - Central Brazilian Standard Time - America/Antigua - SA Western Standard Time - America/Anguilla - SA Western Standard Time - America/Aruba - SA Western Standard Time - America/Barbados - SA Western Standard Time - America/St_Barthelemy - SA Western Standard Time - America/La_Paz - SA Western Standard Time - America/Kralendijk - SA Western Standard Time - America/Manaus - SA Western Standard Time - America/Blanc-Sablon - SA Western Standard Time - America/Curacao - SA Western Standard Time - America/Dominica - SA Western Standard Time - America/Santo_Domingo - SA Western Standard Time - America/Grenada - SA Western Standard Time - America/Guadeloupe - SA Western Standard Time - America/Guyana - SA Western Standard Time - America/St_Kitts - SA Western Standard Time - America/St_Lucia - SA Western Standard Time - America/Marigot - SA Western Standard Time - America/Martinique - SA Western Standard Time - America/Montserrat - SA Western Standard Time - America/Puerto_Rico - SA Western Standard Time - America/Lower_Princes - SA Western Standard Time - America/Port_of_Spain - SA Western Standard Time - America/St_Vincent - SA Western Standard Time - America/Tortola - SA Western Standard Time - America/St_Thomas - SA Western Standard Time - Etc/GMT+4 - SA Western Standard Time - America/Santiago - Pacific SA Standard Time - America/Grand_Turk - Turks And Caicos Standard Time - America/St_Johns - Newfoundland Standard Time - America/Araguaina - Tocantins Standard Time - America/Sao_Paulo - E. South America Standard Time - Antarctica/Rothera - SA Eastern Standard Time - America/Fortaleza - SA Eastern Standard Time - Atlantic/Stanley - SA Eastern Standard Time - America/Cayenne - SA Eastern Standard Time - America/Paramaribo - SA Eastern Standard Time - Etc/GMT+3 - SA Eastern Standard Time - America/Buenos_Aires - Argentina Standard Time - America/Godthab - Greenland Standard Time - America/Montevideo - Montevideo Standard Time - Antarctica/Palmer - Magallanes Standard Time - America/Punta_Arenas - Magallanes Standard Time - America/Miquelon - Saint Pierre Standard Time - America/Bahia - Bahia Standard Time - America/Noronha - UTC-02 - Atlantic/South_Georgia - UTC-02 - Etc/GMT+2 - UTC-02 - America/Scoresbysund - Azores Standard Time - Atlantic/Azores - Azores Standard Time - Atlantic/Cape_Verde - Cape Verde Standard Time - Etc/GMT+1 - Cape Verde Standard Time - America/Danmarkshavn - UTC - Etc/GMT - UTC - Atlantic/Canary - GMT Standard Time - Atlantic/Faeroe - GMT Standard Time - Europe/London - GMT Standard Time - Europe/Guernsey - GMT Standard Time - Europe/Dublin - GMT Standard Time - Europe/Isle_of_Man - GMT Standard Time - Europe/Jersey - GMT Standard Time - Europe/Lisbon - GMT Standard Time - Africa/Ouagadougou - Greenwich Standard Time - Africa/Abidjan - Greenwich Standard Time - Africa/Accra - Greenwich Standard Time - Africa/Banjul - Greenwich Standard Time - Africa/Conakry - Greenwich Standard Time - Africa/Bissau - Greenwich Standard Time - Atlantic/Reykjavik - Greenwich Standard Time - Africa/Monrovia - Greenwich Standard Time - Africa/Bamako - Greenwich Standard Time - Africa/Nouakchott - Greenwich Standard Time - Atlantic/St_Helena - Greenwich Standard Time - Africa/Freetown - Greenwich Standard Time - Africa/Dakar - Greenwich Standard Time - Africa/Lome - Greenwich Standard Time - Europe/Andorra - W. Europe Standard Time - Europe/Vienna - W. Europe Standard Time - Europe/Zurich - W. Europe Standard Time - Europe/Berlin - W. Europe Standard Time - Europe/Gibraltar - W. Europe Standard Time - Europe/Rome - W. Europe Standard Time - Europe/Vaduz - W. Europe Standard Time - Europe/Luxembourg - W. Europe Standard Time - Europe/Monaco - W. Europe Standard Time - Europe/Malta - W. Europe Standard Time - Europe/Amsterdam - W. Europe Standard Time - Europe/Oslo - W. Europe Standard Time - Europe/Stockholm - W. Europe Standard Time - Arctic/Longyearbyen - W. Europe Standard Time - Europe/San_Marino - W. Europe Standard Time - Europe/Vatican - W. Europe Standard Time - Europe/Tirane - Central Europe Standard Time - Europe/Prague - Central Europe Standard Time - Europe/Budapest - Central Europe Standard Time - Europe/Podgorica - Central Europe Standard Time - Europe/Belgrade - Central Europe Standard Time - Europe/Ljubljana - Central Europe Standard Time - Europe/Bratislava - Central Europe Standard Time - Europe/Brussels - Romance Standard Time - Europe/Copenhagen - Romance Standard Time - Europe/Madrid - Romance Standard Time - Europe/Paris - Romance Standard Time - Africa/El_Aaiun - Morocco Standard Time - Africa/Casablanca - Morocco Standard Time - Africa/Sao_Tome - Sao Tome Standard Time - Europe/Sarajevo - Central European Standard Time - Europe/Zagreb - Central European Standard Time - Europe/Skopje - Central European Standard Time - Europe/Warsaw - Central European Standard Time - Africa/Luanda - W. Central Africa Standard Time - Africa/Porto-Novo - W. Central Africa Standard Time - Africa/Kinshasa - W. Central Africa Standard Time - Africa/Bangui - W. Central Africa Standard Time - Africa/Brazzaville - W. Central Africa Standard Time - Africa/Douala - W. Central Africa Standard Time - Africa/Algiers - W. Central Africa Standard Time - Africa/Libreville - W. Central Africa Standard Time - Africa/Malabo - W. Central Africa Standard Time - Africa/Niamey - W. Central Africa Standard Time - Africa/Lagos - W. Central Africa Standard Time - Africa/Ndjamena - W. Central Africa Standard Time - Africa/Tunis - W. Central Africa Standard Time - Etc/GMT-1 - W. Central Africa Standard Time - Asia/Amman - Jordan Standard Time - Asia/Famagusta - GTB Standard Time - Europe/Athens - GTB Standard Time - Europe/Bucharest - GTB Standard Time - Asia/Beirut - Middle East Standard Time - Africa/Cairo - Egypt Standard Time - Europe/Chisinau - E. Europe Standard Time - Asia/Damascus - Syria Standard Time - Asia/Hebron - West Bank Standard Time - Africa/Bujumbura - South Africa Standard Time - Africa/Gaborone - South Africa Standard Time - Africa/Lubumbashi - South Africa Standard Time - Africa/Maseru - South Africa Standard Time - Africa/Blantyre - South Africa Standard Time - Africa/Maputo - South Africa Standard Time - Africa/Kigali - South Africa Standard Time - Africa/Mbabane - South Africa Standard Time - Africa/Johannesburg - South Africa Standard Time - Africa/Lusaka - South Africa Standard Time - Africa/Harare - South Africa Standard Time - Etc/GMT-2 - South Africa Standard Time - Europe/Mariehamn - FLE Standard Time - Europe/Sofia - FLE Standard Time - Europe/Tallinn - FLE Standard Time - Europe/Helsinki - FLE Standard Time - Europe/Vilnius - FLE Standard Time - Europe/Riga - FLE Standard Time - Europe/Kiev - FLE Standard Time - Asia/Jerusalem - Israel Standard Time - Europe/Kaliningrad - Kaliningrad Standard Time - Africa/Khartoum - Sudan Standard Time - Africa/Tripoli - Libya Standard Time - Africa/Windhoek - Namibia Standard Time - Asia/Baghdad - Arabic Standard Time - Europe/Istanbul - Turkey Standard Time - Asia/Bahrain - Arab Standard Time - Asia/Kuwait - Arab Standard Time - Asia/Qatar - Arab Standard Time - Asia/Riyadh - Arab Standard Time - Asia/Aden - Arab Standard Time - Europe/Minsk - Belarus Standard Time - Europe/Moscow - Russian Standard Time - Europe/Simferopol - Russian Standard Time - Antarctica/Syowa - E. Africa Standard Time - Africa/Djibouti - E. Africa Standard Time - Africa/Asmera - E. Africa Standard Time - Africa/Addis_Ababa - E. Africa Standard Time - Africa/Nairobi - E. Africa Standard Time - Indian/Comoro - E. Africa Standard Time - Indian/Antananarivo - E. Africa Standard Time - Africa/Mogadishu - E. Africa Standard Time - Africa/Juba - E. Africa Standard Time - Africa/Dar_es_Salaam - E. Africa Standard Time - Africa/Kampala - E. Africa Standard Time - Indian/Mayotte - E. Africa Standard Time - Etc/GMT-3 - E. Africa Standard Time - Asia/Tehran - Iran Standard Time - Asia/Dubai - Arabian Standard Time - Asia/Muscat - Arabian Standard Time - Etc/GMT-4 - Arabian Standard Time - Europe/Astrakhan - Astrakhan Standard Time - Asia/Baku - Azerbaijan Standard Time - Europe/Samara - Russia Time Zone 3 - Indian/Mauritius - Mauritius Standard Time - Indian/Reunion - Mauritius Standard Time - Indian/Mahe - Mauritius Standard Time - Europe/Saratov - Saratov Standard Time - Asia/Tbilisi - Georgian Standard Time - Asia/Yerevan - Caucasus Standard Time - Asia/Kabul - Afghanistan Standard Time - Antarctica/Mawson - West Asia Standard Time - Asia/Oral - West Asia Standard Time - Indian/Maldives - West Asia Standard Time - Indian/Kerguelen - West Asia Standard Time - Asia/Dushanbe - West Asia Standard Time - Asia/Ashgabat - West Asia Standard Time - Asia/Tashkent - West Asia Standard Time - Etc/GMT-5 - West Asia Standard Time - Asia/Yekaterinburg - Ekaterinburg Standard Time - Asia/Karachi - Pakistan Standard Time - Asia/Calcutta - India Standard Time - Asia/Colombo - Sri Lanka Standard Time - Asia/Katmandu - Nepal Standard Time - Antarctica/Vostok - Central Asia Standard Time - Asia/Urumqi - Central Asia Standard Time - Indian/Chagos - Central Asia Standard Time - Asia/Bishkek - Central Asia Standard Time - Asia/Almaty - Central Asia Standard Time - Etc/GMT-6 - Central Asia Standard Time - Asia/Dhaka - Bangladesh Standard Time - Asia/Thimphu - Bangladesh Standard Time - Asia/Omsk - Omsk Standard Time - Indian/Cocos - Myanmar Standard Time - Asia/Rangoon - Myanmar Standard Time - Antarctica/Davis - SE Asia Standard Time - Indian/Christmas - SE Asia Standard Time - Asia/Jakarta - SE Asia Standard Time - Asia/Phnom_Penh - SE Asia Standard Time - Asia/Vientiane - SE Asia Standard Time - Asia/Bangkok - SE Asia Standard Time - Asia/Saigon - SE Asia Standard Time - Etc/GMT-7 - SE Asia Standard Time - Asia/Barnaul - Altai Standard Time - Asia/Hovd - W. Mongolia Standard Time - Asia/Krasnoyarsk - North Asia Standard Time - Asia/Novosibirsk - N. Central Asia Standard Time - Asia/Tomsk - Tomsk Standard Time - Asia/Shanghai - China Standard Time - Asia/Hong_Kong - China Standard Time - Asia/Macau - China Standard Time - Asia/Irkutsk - North Asia East Standard Time - Asia/Brunei - Singapore Standard Time - Asia/Makassar - Singapore Standard Time - Asia/Kuala_Lumpur - Singapore Standard Time - Asia/Manila - Singapore Standard Time - Asia/Singapore - Singapore Standard Time - Etc/GMT-8 - Singapore Standard Time - Antarctica/Casey - W. Australia Standard Time - Australia/Perth - W. Australia Standard Time - Asia/Taipei - Taipei Standard Time - Asia/Ulaanbaatar - Ulaanbaatar Standard Time - Australia/Eucla - Aus Central W. Standard Time - Asia/Chita - Transbaikal Standard Time - Asia/Jayapura - Tokyo Standard Time - Asia/Tokyo - Tokyo Standard Time - Pacific/Palau - Tokyo Standard Time - Asia/Dili - Tokyo Standard Time - Etc/GMT-9 - Tokyo Standard Time - Asia/Pyongyang - North Korea Standard Time - Asia/Seoul - Korea Standard Time - Asia/Yakutsk - Yakutsk Standard Time - Australia/Adelaide - Cen. Australia Standard Time - Australia/Darwin - AUS Central Standard Time - Australia/Brisbane - E. Australia Standard Time - Australia/Sydney - AUS Eastern Standard Time - Antarctica/DumontDUrville - West Pacific Standard Time - Pacific/Truk - West Pacific Standard Time - Pacific/Guam - West Pacific Standard Time - Pacific/Saipan - West Pacific Standard Time - Pacific/Port_Moresby - West Pacific Standard Time - Etc/GMT-10 - West Pacific Standard Time - Australia/Hobart - Tasmania Standard Time - Asia/Vladivostok - Vladivostok Standard Time - Australia/Lord_Howe - Lord Howe Standard Time - Pacific/Bougainville - Bougainville Standard Time - Asia/Srednekolymsk - Russia Time Zone 10 - Asia/Magadan - Magadan Standard Time - Pacific/Norfolk - Norfolk Standard Time - Asia/Sakhalin - Sakhalin Standard Time - Antarctica/Macquarie - Central Pacific Standard Time - Pacific/Ponape - Central Pacific Standard Time - Pacific/Noumea - Central Pacific Standard Time - Pacific/Guadalcanal - Central Pacific Standard Time - Pacific/Efate - Central Pacific Standard Time - Etc/GMT-11 - Central Pacific Standard Time - Asia/Kamchatka - Russia Time Zone 11 - Antarctica/McMurdo - New Zealand Standard Time - Pacific/Auckland - New Zealand Standard Time - Pacific/Tarawa - UTC+12 - Pacific/Majuro - UTC+12 - Pacific/Nauru - UTC+12 - Pacific/Funafuti - UTC+12 - Pacific/Wake - UTC+12 - Pacific/Wallis - UTC+12 - Etc/GMT-12 - UTC+12 - Pacific/Fiji - Fiji Standard Time - Pacific/Chatham - Chatham Islands Standard Time - Pacific/Enderbury - UTC+13 - Pacific/Fakaofo - UTC+13 - Etc/GMT-13 - UTC+13 - Pacific/Tongatapu - Tonga Standard Time - Pacific/Apia - Samoa Standard Time - Pacific/Kiritimati - Line Islands Standard Time - Etc/GMT-14 - Line Islands Standard Time - US/Pacific - Pacific Standard Time - - diff --git a/Sources/CoreFoundation/WindowsOlsonMapping.plist b/Sources/CoreFoundation/WindowsOlsonMapping.plist deleted file mode 100644 index 7af48262de..0000000000 --- a/Sources/CoreFoundation/WindowsOlsonMapping.plist +++ /dev/null @@ -1,276 +0,0 @@ - - - - - Dateline Standard Time - Etc/GMT+12 - UTC-11 - Etc/GMT+11 - Aleutian Standard Time - America/Adak - Hawaiian Standard Time - Pacific/Honolulu - Marquesas Standard Time - Pacific/Marquesas - Alaskan Standard Time - America/Anchorage - UTC-09 - Etc/GMT+9 - Pacific Standard Time (Mexico) - America/Tijuana - UTC-08 - Etc/GMT+8 - Pacific Standard Time - America/Los_Angeles - US Mountain Standard Time - America/Phoenix - Mountain Standard Time (Mexico) - America/Chihuahua - Mountain Standard Time - America/Denver - Central America Standard Time - America/Guatemala - Central Standard Time - America/Chicago - Easter Island Standard Time - Pacific/Easter - Central Standard Time (Mexico) - America/Mexico_City - Canada Central Standard Time - America/Regina - SA Pacific Standard Time - America/Bogota - Eastern Standard Time (Mexico) - America/Cancun - Eastern Standard Time - America/New_York - Haiti Standard Time - America/Port-au-Prince - Cuba Standard Time - America/Havana - US Eastern Standard Time - America/Indianapolis - Paraguay Standard Time - America/Asuncion - Atlantic Standard Time - America/Halifax - Venezuela Standard Time - America/Caracas - Central Brazilian Standard Time - America/Cuiaba - SA Western Standard Time - America/La_Paz - Pacific SA Standard Time - America/Santiago - Turks And Caicos Standard Time - America/Grand_Turk - Newfoundland Standard Time - America/St_Johns - Tocantins Standard Time - America/Araguaina - E. South America Standard Time - America/Sao_Paulo - SA Eastern Standard Time - America/Cayenne - Argentina Standard Time - America/Buenos_Aires - Greenland Standard Time - America/Godthab - Montevideo Standard Time - America/Montevideo - Magallanes Standard Time - America/Punta_Arenas - Saint Pierre Standard Time - America/Miquelon - Bahia Standard Time - America/Bahia - UTC-02 - Etc/GMT+2 - Azores Standard Time - Atlantic/Azores - Cape Verde Standard Time - Atlantic/Cape_Verde - UTC - Etc/GMT - GMT Standard Time - Europe/London - Greenwich Standard Time - Atlantic/Reykjavik - W. Europe Standard Time - Europe/Berlin - Central Europe Standard Time - Europe/Budapest - Romance Standard Time - Europe/Paris - Morocco Standard Time - Africa/Casablanca - Sao Tome Standard Time - Africa/Sao_Tome - Central European Standard Time - Europe/Warsaw - W. Central Africa Standard Time - Africa/Lagos - Jordan Standard Time - Asia/Amman - GTB Standard Time - Europe/Bucharest - Middle East Standard Time - Asia/Beirut - Egypt Standard Time - Africa/Cairo - E. Europe Standard Time - Europe/Chisinau - Syria Standard Time - Asia/Damascus - West Bank Standard Time - Asia/Hebron - South Africa Standard Time - Africa/Johannesburg - FLE Standard Time - Europe/Kiev - Israel Standard Time - Asia/Jerusalem - Kaliningrad Standard Time - Europe/Kaliningrad - Sudan Standard Time - Africa/Khartoum - Libya Standard Time - Africa/Tripoli - Namibia Standard Time - Africa/Windhoek - Arabic Standard Time - Asia/Baghdad - Turkey Standard Time - Europe/Istanbul - Arab Standard Time - Asia/Riyadh - Belarus Standard Time - Europe/Minsk - Russian Standard Time - Europe/Moscow - E. Africa Standard Time - Africa/Nairobi - Iran Standard Time - Asia/Tehran - Arabian Standard Time - Asia/Dubai - Astrakhan Standard Time - Europe/Astrakhan - Azerbaijan Standard Time - Asia/Baku - Russia Time Zone 3 - Europe/Samara - Mauritius Standard Time - Indian/Mauritius - Saratov Standard Time - Europe/Saratov - Georgian Standard Time - Asia/Tbilisi - Caucasus Standard Time - Asia/Yerevan - Afghanistan Standard Time - Asia/Kabul - West Asia Standard Time - Asia/Tashkent - Ekaterinburg Standard Time - Asia/Yekaterinburg - Pakistan Standard Time - Asia/Karachi - India Standard Time - Asia/Calcutta - Sri Lanka Standard Time - Asia/Colombo - Nepal Standard Time - Asia/Katmandu - Central Asia Standard Time - Asia/Almaty - Bangladesh Standard Time - Asia/Dhaka - Omsk Standard Time - Asia/Omsk - Myanmar Standard Time - Asia/Rangoon - SE Asia Standard Time - Asia/Bangkok - Altai Standard Time - Asia/Barnaul - W. Mongolia Standard Time - Asia/Hovd - North Asia Standard Time - Asia/Krasnoyarsk - N. Central Asia Standard Time - Asia/Novosibirsk - Tomsk Standard Time - Asia/Tomsk - China Standard Time - Asia/Shanghai - North Asia East Standard Time - Asia/Irkutsk - Singapore Standard Time - Asia/Singapore - W. Australia Standard Time - Australia/Perth - Taipei Standard Time - Asia/Taipei - Ulaanbaatar Standard Time - Asia/Ulaanbaatar - Aus Central W. Standard Time - Australia/Eucla - Transbaikal Standard Time - Asia/Chita - Tokyo Standard Time - Asia/Tokyo - North Korea Standard Time - Asia/Pyongyang - Korea Standard Time - Asia/Seoul - Yakutsk Standard Time - Asia/Yakutsk - Cen. Australia Standard Time - Australia/Adelaide - AUS Central Standard Time - Australia/Darwin - E. Australia Standard Time - Australia/Brisbane - AUS Eastern Standard Time - Australia/Sydney - West Pacific Standard Time - Pacific/Port_Moresby - Tasmania Standard Time - Australia/Hobart - Vladivostok Standard Time - Asia/Vladivostok - Lord Howe Standard Time - Australia/Lord_Howe - Bougainville Standard Time - Pacific/Bougainville - Russia Time Zone 10 - Asia/Srednekolymsk - Magadan Standard Time - Asia/Magadan - Norfolk Standard Time - Pacific/Norfolk - Sakhalin Standard Time - Asia/Sakhalin - Central Pacific Standard Time - Pacific/Guadalcanal - Russia Time Zone 11 - Asia/Kamchatka - New Zealand Standard Time - Pacific/Auckland - UTC+12 - Etc/GMT-12 - Fiji Standard Time - Pacific/Fiji - Chatham Islands Standard Time - Pacific/Chatham - UTC+13 - Etc/GMT-13 - Tonga Standard Time - Pacific/Tongatapu - Samoa Standard Time - Pacific/Apia - Line Islands Standard Time - Pacific/Kiritimati - - diff --git a/Sources/CoreFoundation/include/WindowsResources.h b/Sources/CoreFoundation/include/WindowsResources.h deleted file mode 100644 index f1bd285a97..0000000000 --- a/Sources/CoreFoundation/include/WindowsResources.h +++ /dev/null @@ -1,4 +0,0 @@ - -#define IDR_WINDOWS_OLSON_MAPPING 101 -#define IDR_OLSON_WINDOWS_MAPPING 102 - diff --git a/Sources/CoreFoundation/internalInclude/CFTimeZone_WindowsMapping.h b/Sources/CoreFoundation/internalInclude/CFTimeZone_WindowsMapping.h new file mode 100644 index 0000000000..e504f3a9c9 --- /dev/null +++ b/Sources/CoreFoundation/internalInclude/CFTimeZone_WindowsMapping.h @@ -0,0 +1,18 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// + +#include "CFBase.h" +#include "CFString.h" + +#if TARGET_OS_WINDOWS + +CF_PRIVATE CFStringRef _CFTimeZoneCopyWindowsNameForOlsonName(CFStringRef olson); +CF_PRIVATE CFStringRef _CFTimeZoneCopyOlsonNameForWindowsName(CFStringRef windows); + +#endif From a39f398a6e07acc5f17edfc68d5d97ecd0e40451 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld Date: Fri, 16 Aug 2024 13:01:17 -0700 Subject: [PATCH 138/198] Repair the Windows SwiftPM build (#5068) * Repair the Windows SwiftPM build * Update XCTSkip message --- Package.swift | 70 ++++++-- Sources/CoreFoundation/CFRuntime.c | 10 ++ .../CFURLSessionInterface.c | 2 +- Tests/Foundation/TestBundle.swift | 10 +- Tests/Foundation/TestFileManager.swift | 2 +- Tests/Foundation/TestHTTPCookieStorage.swift | 2 +- Tests/Foundation/TestProcess.swift | 158 ++++++++---------- 7 files changed, 148 insertions(+), 106 deletions(-) diff --git a/Package.swift b/Package.swift index 2f3e287c41..fe9cb4aaee 100644 --- a/Package.swift +++ b/Package.swift @@ -14,19 +14,20 @@ let platformsWithThreads: [Platform] = [ .linux, .windows, ] -var dispatchIncludeFlags: [CSetting] + +var dispatchIncludeFlags: [CSetting] = [] if let environmentPath = Context.environment["DISPATCH_INCLUDE_PATH"] { - dispatchIncludeFlags = [.unsafeFlags([ + dispatchIncludeFlags.append(.unsafeFlags([ "-I\(environmentPath)", "-I\(environmentPath)/Block" - ])] + ])) } else { - dispatchIncludeFlags = [ + dispatchIncludeFlags.append( .unsafeFlags([ "-I/usr/lib/swift", "-I/usr/lib/swift/Block" ], .when(platforms: [.linux, .android])) - ] + ) if let sdkRoot = Context.environment["SDKROOT"] { dispatchIncludeFlags.append(.unsafeFlags([ "-I\(sdkRoot)usr\\include", @@ -35,10 +36,55 @@ if let environmentPath = Context.environment["DISPATCH_INCLUDE_PATH"] { } } +var libxmlIncludeFlags: [CSetting] = [] +if let environmentPath = Context.environment["LIBXML_INCLUDE_PATH"] { + libxmlIncludeFlags = [ + .unsafeFlags([ + "-I\(environmentPath)" + ]), + .define("LIBXML_STATIC") + ] +} + +var curlIncludeFlags: [CSetting] = [] +if let environmentPath = Context.environment["CURL_INCLUDE_PATH"] { + curlIncludeFlags = [ + .unsafeFlags([ + "-I\(environmentPath)" + ]), + .define("CURL_STATICLIB") + ] +} + +var curlLinkFlags: [LinkerSetting] = [ + .linkedLibrary("libcurl.lib", .when(platforms: [.windows])), + .linkedLibrary("zlibstatic.lib", .when(platforms: [.windows])) +] +if let environmentPath = Context.environment["CURL_LIBRARY_PATH"] { + curlLinkFlags.append(.unsafeFlags([ + "-L\(environmentPath)" + ])) +} +if let environmentPath = Context.environment["ZLIB_LIBRARY_PATH"] { + curlLinkFlags.append(.unsafeFlags([ + "-L\(environmentPath)" + ])) +} + +var libxmlLinkFlags: [LinkerSetting] = [ + .linkedLibrary("libxml2s.lib", .when(platforms: [.windows])) +] +if let environmentPath = Context.environment["LIBXML2_LIBRARY_PATH"] { + libxmlLinkFlags.append(.unsafeFlags([ + "-L\(environmentPath)" + ])) +} + let coreFoundationBuildSettings: [CSetting] = [ .headerSearchPath("internalInclude"), .define("DEBUG", .when(configuration: .debug)), .define("CF_BUILDING_CF"), + .define("CF_WINDOWS_EXECUTABLE_INITIALIZER", .when(platforms: [.windows])), // Ensure __CFInitialize is run even when statically linked into an executable .define("DEPLOYMENT_ENABLE_LIBDISPATCH", .when(platforms: platformsWithThreads)), .define("DEPLOYMENT_RUNTIME_SWIFT"), .define("HAVE_STRUCT_TIMESPEC"), @@ -216,25 +262,27 @@ let package = Package( name: "_CFXMLInterface", dependencies: [ "CoreFoundation", - "Clibxml2", + .target(name: "Clibxml2", condition: .when(platforms: [.linux])), ], path: "Sources/_CFXMLInterface", exclude: [ "CMakeLists.txt" ], - cSettings: interfaceBuildSettings + cSettings: interfaceBuildSettings + libxmlIncludeFlags, + linkerSettings: libxmlLinkFlags ), .target( name: "_CFURLSessionInterface", dependencies: [ "CoreFoundation", - "Clibcurl", + .target(name: "Clibcurl", condition: .when(platforms: [.linux])), ], path: "Sources/_CFURLSessionInterface", exclude: [ "CMakeLists.txt" ], - cSettings: interfaceBuildSettings + cSettings: interfaceBuildSettings + curlIncludeFlags, + linkerSettings: curlLinkFlags ), .systemLibrary( name: "Clibxml2", @@ -292,8 +340,8 @@ let package = Package( "Foundation", "FoundationXML", "FoundationNetworking", - .targetItem(name: "XCTest", condition: .when(platforms: [.linux])), - "xdgTestHelper" + "XCTest", + .target(name: "xdgTestHelper", condition: .when(platforms: [.linux])) ], resources: [ .copy("Foundation/Resources") diff --git a/Sources/CoreFoundation/CFRuntime.c b/Sources/CoreFoundation/CFRuntime.c index 2c151b8cc4..11c20ff0c1 100644 --- a/Sources/CoreFoundation/CFRuntime.c +++ b/Sources/CoreFoundation/CFRuntime.c @@ -1380,6 +1380,16 @@ static CFBundleRef RegisterCoreFoundationBundle(void) { #define DLL_THREAD_DETACH 3 #define DLL_PROCESS_DETACH 0 +#if CF_WINDOWS_EXECUTABLE_INITIALIZER +static void __CFWindowsExecutableInitializer(void) __attribute__ ((constructor)) __attribute__ ((used)); + +void __CFWindowsExecutableInitializer(void) { + static CFBundleRef cfBundle = NULL; + __CFInitialize(); + cfBundle = RegisterCoreFoundationBundle(); +} +#endif + int DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID pReserved ) { static CFBundleRef cfBundle = NULL; if (dwReason == DLL_PROCESS_ATTACH) { diff --git a/Sources/_CFURLSessionInterface/CFURLSessionInterface.c b/Sources/_CFURLSessionInterface/CFURLSessionInterface.c index 1409150589..e493ad77e8 100644 --- a/Sources/_CFURLSessionInterface/CFURLSessionInterface.c +++ b/Sources/_CFURLSessionInterface/CFURLSessionInterface.c @@ -18,8 +18,8 @@ /// //===----------------------------------------------------------------------===// -#include "CFURLSessionInterface.h" #include "CFInternal.h" +#include "CFURLSessionInterface.h" #include "CFString.h" #include diff --git a/Tests/Foundation/TestBundle.swift b/Tests/Foundation/TestBundle.swift index 4590bafab7..cedadac897 100644 --- a/Tests/Foundation/TestBundle.swift +++ b/Tests/Foundation/TestBundle.swift @@ -42,8 +42,16 @@ internal func testBundleName() -> String { return testBundle().infoDictionary!["CFBundleName"] as! String } -internal func xdgTestHelperURL() -> URL { +internal func xdgTestHelperURL() throws -> URL { + #if os(Windows) + // Adding the xdgTestHelper as a dependency of TestFoundation causes its object files (including the main function) to be linked into the test runner executable as well + // While this works on Linux due to special linker functionality, this doesn't work on Windows and results in a collision between the two main symbols + // SwiftPM also cannot support depending on this executable (to ensure it is built) without also linking its objects into the test runner + // For those reasons, using the xdgTestHelper on Windows is currently unsupported and tests that rely on it must be skipped + throw XCTSkip("xdgTestHelper is not supported during testing on Windows (test executables are not supported by SwiftPM on Windows)") + #else testBundle().bundleURL.deletingLastPathComponent().appendingPathComponent("xdgTestHelper") + #endif } diff --git a/Tests/Foundation/TestFileManager.swift b/Tests/Foundation/TestFileManager.swift index 241fcbac7a..b4555d7ca5 100644 --- a/Tests/Foundation/TestFileManager.swift +++ b/Tests/Foundation/TestFileManager.swift @@ -1251,7 +1251,7 @@ class TestFileManager : XCTestCase { environment[entry.key] = entry.value } - let helper = xdgTestHelperURL() + let helper = try xdgTestHelperURL() let (stdout, _) = try runTask([ helper.path, "--nspathfor", method, identifier ], environment: environment) diff --git a/Tests/Foundation/TestHTTPCookieStorage.swift b/Tests/Foundation/TestHTTPCookieStorage.swift index 607d32dfb7..ecd46fa7bd 100644 --- a/Tests/Foundation/TestHTTPCookieStorage.swift +++ b/Tests/Foundation/TestHTTPCookieStorage.swift @@ -334,7 +334,7 @@ class TestHTTPCookieStorage: XCTestCase { // Test by setting the environmental variable let task = Process() - task.executableURL = xdgTestHelperURL() + task.executableURL = try xdgTestHelperURL() task.arguments = ["--xdgcheck"] var environment = ProcessInfo.processInfo.environment let testPath = NSHomeDirectory() + "/TestXDG" diff --git a/Tests/Foundation/TestProcess.swift b/Tests/Foundation/TestProcess.swift index 3754cab9f3..e92d746214 100644 --- a/Tests/Foundation/TestProcess.swift +++ b/Tests/Foundation/TestProcess.swift @@ -13,7 +13,7 @@ class TestProcess : XCTestCase { func test_exit0() throws { let process = Process() - let executableURL = xdgTestHelperURL() + let executableURL = try xdgTestHelperURL() if #available(macOS 10.13, *) { process.executableURL = executableURL } else { @@ -31,7 +31,7 @@ class TestProcess : XCTestCase { func test_exit1() throws { let process = Process() - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = ["--exit", "1"] try process.run() @@ -42,7 +42,7 @@ class TestProcess : XCTestCase { func test_exit100() throws { let process = Process() - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = ["--exit", "100"] try process.run() @@ -53,7 +53,7 @@ class TestProcess : XCTestCase { func test_sleep2() throws { let process = Process() - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = ["--sleep", "2"] try process.run() @@ -64,7 +64,7 @@ class TestProcess : XCTestCase { func test_terminationReason_uncaughtSignal() throws { let process = Process() - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = ["--signal-self", SIGTERM.description] try process.run() process.waitUntilExit() @@ -75,7 +75,7 @@ class TestProcess : XCTestCase { func test_pipe_stdin() throws { let process = Process() - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = ["--cat"] let outputPipe = Pipe() process.standardOutput = outputPipe @@ -109,7 +109,7 @@ class TestProcess : XCTestCase { func test_pipe_stdout() throws { let process = Process() - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = ["--getcwd"] let pipe = Pipe() process.standardOutput = pipe @@ -131,7 +131,7 @@ class TestProcess : XCTestCase { func test_pipe_stderr() throws { let process = Process() - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = ["--cat", "invalid_file_name"] let errorPipe = Pipe() @@ -154,7 +154,7 @@ class TestProcess : XCTestCase { func test_pipe_stdout_and_stderr_same_pipe() throws { let process = Process() - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = ["--cat", "invalid_file_name"] let pipe = Pipe() @@ -189,7 +189,7 @@ class TestProcess : XCTestCase { func test_file_stdout() throws { let process = Process() - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = ["--getcwd"] let url: URL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(ProcessInfo.processInfo.globallyUniqueString, isDirectory: false) @@ -213,50 +213,38 @@ class TestProcess : XCTestCase { XCTAssertEqual(string.trimmingCharacters(in: CharacterSet(["\r", "\n"])), FileManager.default.currentDirectoryPath) } - func test_passthrough_environment() { - do { - let (output, _) = try runTask([xdgTestHelperURL().path, "--env"], environment: nil) - let env = try parseEnv(output) + func test_passthrough_environment() throws { + let (output, _) = try runTask([try xdgTestHelperURL().path, "--env"], environment: nil) + let env = try parseEnv(output) #if os(Windows) - // On Windows, Path is always passed to the sub process - XCTAssertGreaterThan(env.count, 1) + // On Windows, Path is always passed to the sub process + XCTAssertGreaterThan(env.count, 1) #else - XCTAssertGreaterThan(env.count, 0) + XCTAssertGreaterThan(env.count, 0) #endif - } catch { - XCTFail("Test failed: \(error)") - } } - func test_no_environment() { - do { - let (output, _) = try runTask([xdgTestHelperURL().path, "--env"], environment: [:]) - let env = try parseEnv(output) + func test_no_environment() throws { + let (output, _) = try runTask([try xdgTestHelperURL().path, "--env"], environment: [:]) + let env = try parseEnv(output) #if os(Windows) - // On Windows, Path is always passed to the sub process - XCTAssertEqual(env.count, 1) + // On Windows, Path is always passed to the sub process + XCTAssertEqual(env.count, 1) #else - XCTAssertEqual(env.count, 0) + XCTAssertEqual(env.count, 0) #endif - } catch { - XCTFail("Test failed: \(error)") - } } - func test_custom_environment() { - do { - let input = ["HELLO": "WORLD", "HOME": "CUPERTINO"] - let (output, _) = try runTask([xdgTestHelperURL().path, "--env"], environment: input) - var env = try parseEnv(output) + func test_custom_environment() throws { + let input = ["HELLO": "WORLD", "HOME": "CUPERTINO"] + let (output, _) = try runTask([try xdgTestHelperURL().path, "--env"], environment: input) + var env = try parseEnv(output) #if os(Windows) - // On Windows, Path is always passed to the sub process, remove it - // before comparing. - env.removeValue(forKey: "Path") + // On Windows, Path is always passed to the sub process, remove it + // before comparing. + env.removeValue(forKey: "Path") #endif - XCTAssertEqual(env, input) - } catch { - XCTFail("Test failed: \(error)") - } + XCTAssertEqual(env, input) } func test_current_working_directory() throws { @@ -276,67 +264,57 @@ class TestProcess : XCTestCase { // Test that getcwd() returns the currentDirectoryPath do { - let (pwd, _) = try runTask([xdgTestHelperURL().path, "--getcwd"], currentDirectoryPath: tmpDir) + let (pwd, _) = try runTask([try xdgTestHelperURL().path, "--getcwd"], currentDirectoryPath: tmpDir) // Check the sub-process used the correct directory XCTAssertEqual(pwd.trimmingCharacters(in: .newlines).standardizePath(), tmpDir) - } catch { - XCTFail("Test failed: \(error)") } // Test that $PWD by default is set to currentDirectoryPath do { - let (pwd, _) = try runTask([xdgTestHelperURL().path, "--echo-PWD"], currentDirectoryPath: tmpDir) + let (pwd, _) = try runTask([try xdgTestHelperURL().path, "--echo-PWD"], currentDirectoryPath: tmpDir) // Check the sub-process used the correct directory let cwd = FileManager.default.currentDirectoryPath.standardizePath() XCTAssertNotEqual(cwd, tmpDir) XCTAssertNotEqual(pwd.trimmingCharacters(in: .newlines).standardizePath(), tmpDir) - } catch { - XCTFail("Test failed: \(error)") } // Test that $PWD can be over-ridden do { var env = ProcessInfo.processInfo.environment env["PWD"] = "/bin" - let (pwd, _) = try runTask([xdgTestHelperURL().path, "--echo-PWD"], environment: env, currentDirectoryPath: tmpDir) + let (pwd, _) = try runTask([try xdgTestHelperURL().path, "--echo-PWD"], environment: env, currentDirectoryPath: tmpDir) // Check the sub-process used the correct directory XCTAssertEqual(pwd.trimmingCharacters(in: .newlines), "/bin") - } catch { - XCTFail("Test failed: \(error)") } // Test that $PWD can be set to empty do { var env = ProcessInfo.processInfo.environment env["PWD"] = "" - let (pwd, _) = try runTask([xdgTestHelperURL().path, "--echo-PWD"], environment: env, currentDirectoryPath: tmpDir) + let (pwd, _) = try runTask([try xdgTestHelperURL().path, "--echo-PWD"], environment: env, currentDirectoryPath: tmpDir) // Check the sub-process used the correct directory XCTAssertEqual(pwd.trimmingCharacters(in: .newlines), "") - } catch { - XCTFail("Test failed: \(error)") } XCTAssertEqual(previousWorkingDirectory, fm.currentDirectoryPath) } - func test_run() { + func test_run() throws { let fm = FileManager.default let cwd = fm.currentDirectoryPath do { - let process = try Process.run(xdgTestHelperURL(), arguments: ["--exit", "123"], terminationHandler: nil) + let process = try Process.run(try xdgTestHelperURL(), arguments: ["--exit", "123"], terminationHandler: nil) process.waitUntilExit() XCTAssertEqual(process.terminationReason, .exit) XCTAssertEqual(process.terminationStatus, 123) - } catch { - XCTFail("Cant execute \(xdgTestHelperURL().path): \(error)") } XCTAssertEqual(fm.currentDirectoryPath, cwd) do { // Check running the process twice throws an error. let process = Process() - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = ["--exit", "0"] XCTAssertNoThrow(try process.run()) process.waitUntilExit() @@ -350,7 +328,7 @@ class TestProcess : XCTestCase { do { let process = Process() - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = ["--exit", "0"] process.currentDirectoryURL = URL(fileURLWithPath: "/.../_no_such_directory", isDirectory: true) XCTAssertThrowsError(try process.run()) @@ -368,7 +346,7 @@ class TestProcess : XCTestCase { _ = fm.changeCurrentDirectoryPath(cwd) } - func test_preStartEndState() { + func test_preStartEndState() throws { let process = Process() XCTAssertNil(process.executableURL) XCTAssertNotNil(process.currentDirectoryURL) @@ -378,7 +356,7 @@ class TestProcess : XCTestCase { XCTAssertEqual(process.processIdentifier, 0) XCTAssertEqual(process.qualityOfService, .default) - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = ["--cat"] _ = try? process.run() XCTAssertTrue(process.isRunning) @@ -395,7 +373,7 @@ class TestProcess : XCTestCase { #if os(Windows) throw XCTSkip("Windows does not have signals") #else - let helper = _SignalHelperRunner() + let helper = try _SignalHelperRunner() do { try helper.start() } catch { @@ -434,8 +412,8 @@ class TestProcess : XCTestCase { #endif } - func test_terminate() { - guard let process = try? Process.run(xdgTestHelperURL(), arguments: ["--cat"]) else { + func test_terminate() throws { + guard let process = try? Process.run(try xdgTestHelperURL(), arguments: ["--cat"]) else { XCTFail("Cant run 'cat'") return } @@ -452,7 +430,7 @@ class TestProcess : XCTestCase { #if os(Windows) throw XCTSkip("Windows does not have signals") #else - nonisolated(unsafe) let helper = _SignalHelperRunner() + nonisolated(unsafe) let helper = try _SignalHelperRunner() do { try helper.start() } catch { @@ -507,9 +485,9 @@ class TestProcess : XCTestCase { } - func test_redirect_stdin_using_null() { + func test_redirect_stdin_using_null() throws { let task = Process() - task.executableURL = xdgTestHelperURL() + task.executableURL = try xdgTestHelperURL() task.arguments = ["--cat"] task.standardInput = FileHandle.nullDevice XCTAssertNoThrow(try task.run()) @@ -517,18 +495,18 @@ class TestProcess : XCTestCase { } - func test_redirect_stdout_using_null() { + func test_redirect_stdout_using_null() throws { let task = Process() - task.executableURL = xdgTestHelperURL() + task.executableURL = try xdgTestHelperURL() task.arguments = ["--env"] task.standardOutput = FileHandle.nullDevice XCTAssertNoThrow(try task.run()) task.waitUntilExit() } - func test_redirect_stdin_stdout_using_null() { + func test_redirect_stdin_stdout_using_null() throws { let task = Process() - task.executableURL = xdgTestHelperURL() + task.executableURL = try xdgTestHelperURL() task.arguments = ["--cat"] task.standardInput = FileHandle.nullDevice task.standardOutput = FileHandle.nullDevice @@ -539,7 +517,7 @@ class TestProcess : XCTestCase { func test_redirect_stderr_using_null() throws { let task = Process() - task.executableURL = xdgTestHelperURL() + task.executableURL = try xdgTestHelperURL() task.arguments = ["--env"] task.standardError = FileHandle.nullDevice XCTAssertNoThrow(try task.run()) @@ -549,7 +527,7 @@ class TestProcess : XCTestCase { func test_redirect_all_using_null() throws { let task = Process() - task.executableURL = xdgTestHelperURL() + task.executableURL = try xdgTestHelperURL() task.arguments = ["--cat"] task.standardInput = FileHandle.nullDevice task.standardOutput = FileHandle.nullDevice @@ -560,7 +538,7 @@ class TestProcess : XCTestCase { func test_redirect_all_using_nil() throws { let task = Process() - task.executableURL = xdgTestHelperURL() + task.executableURL = try xdgTestHelperURL() task.arguments = ["--cat"] task.standardInput = nil task.standardOutput = nil @@ -645,7 +623,7 @@ class TestProcess : XCTestCase { } do { - let (stdout, _) = try runTask([xdgTestHelperURL().path, "--getcwd"], currentDirectoryPath: "/") + let (stdout, _) = try runTask([try xdgTestHelperURL().path, "--getcwd"], currentDirectoryPath: "/") var directory = stdout.trimmingCharacters(in: CharacterSet(["\n", "\r"])) #if os(Windows) let zero: String.Index = directory.startIndex @@ -665,7 +643,7 @@ class TestProcess : XCTestCase { #if !os(Windows) XCTAssertNotEqual("/", FileManager.default.currentDirectoryPath) XCTAssertNotEqual(FileManager.default.currentDirectoryPath, "/") - let (stdout, _) = try runTask([xdgTestHelperURL().path, "--echo-PWD"], currentDirectoryPath: "/") + let (stdout, _) = try runTask([try xdgTestHelperURL().path, "--echo-PWD"], currentDirectoryPath: "/") let directory = stdout.trimmingCharacters(in: CharacterSet(["\n", "\r"])) XCTAssertEqual(directory, ProcessInfo.processInfo.environment["PWD"]) XCTAssertNotEqual(directory, "/") @@ -674,7 +652,7 @@ class TestProcess : XCTestCase { do { let process = Process() - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = [ "--getcwd" ] process.currentDirectoryPath = "" @@ -698,11 +676,9 @@ class TestProcess : XCTestCase { } let directory = stdout.trimmingCharacters(in: CharacterSet(["\n", "\r"])) XCTAssertEqual(directory, FileManager.default.currentDirectoryPath) - } catch { - XCTFail(String(describing: error)) } - XCTAssertThrowsError(try runTask([xdgTestHelperURL().path, "--getcwd"], currentDirectoryPath: "/some_directory_that_doesnt_exsit")) { error in + XCTAssertThrowsError(try runTask([try xdgTestHelperURL().path, "--getcwd"], currentDirectoryPath: "/some_directory_that_doesnt_exsit")) { error in let code = CocoaError.Code(rawValue: (error as NSError).code) XCTAssertEqual(code, .fileReadNoSuchFile) } @@ -712,7 +688,7 @@ class TestProcess : XCTestCase { func test_fileDescriptorsAreNotInherited() throws { let task = Process() let someExtraFDs = [dup(1), dup(1), dup(1), dup(1), dup(1), dup(1), dup(1)] - task.executableURL = xdgTestHelperURL() + task.executableURL = try xdgTestHelperURL() task.arguments = ["--print-open-file-descriptors"] task.standardInput = FileHandle.nullDevice let stdoutPipe = Pipe() @@ -747,12 +723,12 @@ class TestProcess : XCTestCase { } #endif - func test_pipeCloseBeforeLaunch() { + func test_pipeCloseBeforeLaunch() throws { let process = Process() let stdInput = Pipe() let stdOutput = Pipe() - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = ["--cat"] process.standardInput = stdInput process.standardOutput = stdOutput @@ -775,17 +751,17 @@ class TestProcess : XCTestCase { } } - func test_multiProcesses() { + func test_multiProcesses() throws { let source = Process() - source.executableURL = xdgTestHelperURL() + source.executableURL = try xdgTestHelperURL() source.arguments = [ "--getcwd" ] let cat1 = Process() - cat1.executableURL = xdgTestHelperURL() + cat1.executableURL = try xdgTestHelperURL() cat1.arguments = [ "--cat" ] let cat2 = Process() - cat2.executableURL = xdgTestHelperURL() + cat2.executableURL = try xdgTestHelperURL() cat2.arguments = [ "--cat" ] let pipe1 = Pipe() @@ -820,7 +796,7 @@ class TestProcess : XCTestCase { // The process group of the child process should be different to the parent's. let process = Process() - process.executableURL = xdgTestHelperURL() + process.executableURL = try xdgTestHelperURL() process.arguments = ["--pgrp"] let pipe = Pipe() process.standardOutput = pipe @@ -871,8 +847,8 @@ class _SignalHelperRunner { var sigContCount: Int { return sQueue.sync { return _sigContCount } } - init() { - process.executableURL = xdgTestHelperURL() + init() throws { + process.executableURL = try xdgTestHelperURL() process.environment = ProcessInfo.processInfo.environment process.arguments = ["--signal-test"] process.standardOutput = outputPipe.fileHandleForWriting From 1b8c1ea03ab240ae8f4928777ab56b8937437a55 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld Date: Wed, 21 Aug 2024 10:10:36 -0700 Subject: [PATCH 139/198] Fix up tests for Windows (#5074) * Disable crashing URLSession test * Fix URL test failures * Fix TestProcessInfo failures * Fix a bundle test * Fix Process tests * Fix FileManager failures * Fix linking failure * Disable failing FileManager test * Disable crashing Thread tests --- Package.swift | 2 +- Sources/Foundation/NSPathUtilities.swift | 12 +- Tests/Foundation/TestBundle.swift | 26 ++++- Tests/Foundation/TestFileManager.swift | 136 +++++++++++------------ Tests/Foundation/TestNSString.swift | 4 + Tests/Foundation/TestProcess.swift | 12 +- Tests/Foundation/TestProcessInfo.swift | 9 +- Tests/Foundation/TestThread.swift | 4 + Tests/Foundation/TestURL.swift | 42 ++++--- Tests/Foundation/TestURLSession.swift | 11 +- 10 files changed, 136 insertions(+), 122 deletions(-) diff --git a/Package.swift b/Package.swift index fe9cb4aaee..b63612a790 100644 --- a/Package.swift +++ b/Package.swift @@ -74,7 +74,7 @@ if let environmentPath = Context.environment["ZLIB_LIBRARY_PATH"] { var libxmlLinkFlags: [LinkerSetting] = [ .linkedLibrary("libxml2s.lib", .when(platforms: [.windows])) ] -if let environmentPath = Context.environment["LIBXML2_LIBRARY_PATH"] { +if let environmentPath = Context.environment["LIBXML_LIBRARY_PATH"] { libxmlLinkFlags.append(.unsafeFlags([ "-L\(environmentPath)" ])) diff --git a/Sources/Foundation/NSPathUtilities.swift b/Sources/Foundation/NSPathUtilities.swift index 408b18bebf..8043ef00c0 100644 --- a/Sources/Foundation/NSPathUtilities.swift +++ b/Sources/Foundation/NSPathUtilities.swift @@ -21,7 +21,9 @@ let validPathSeps: [Character] = ["/"] #endif public func NSTemporaryDirectory() -> String { - FileManager.default.temporaryDirectory.path() + FileManager.default.temporaryDirectory.withUnsafeFileSystemRepresentation { + String(cString: $0!) + } + String(validPathSeps[0]) } extension String { @@ -614,12 +616,16 @@ public func NSSearchPathForDirectoriesInDomains(_ directory: FileManager.SearchP } public func NSHomeDirectory() -> String { - FileManager.default.homeDirectoryForCurrentUser.path + FileManager.default.homeDirectoryForCurrentUser.withUnsafeFileSystemRepresentation { + String(cString: $0!) + } } public func NSHomeDirectoryForUser(_ user: String?) -> String? { guard let user else { return NSHomeDirectory() } - return FileManager.default.homeDirectory(forUser: user)?.path + return FileManager.default.homeDirectory(forUser: user)?.withUnsafeFileSystemRepresentation { + String(cString: $0!) + } } public func NSUserName() -> String { diff --git a/Tests/Foundation/TestBundle.swift b/Tests/Foundation/TestBundle.swift index cedadac897..ccdc08f13a 100644 --- a/Tests/Foundation/TestBundle.swift +++ b/Tests/Foundation/TestBundle.swift @@ -78,6 +78,14 @@ class BundlePlayground { #endif } } + + var fileNameSuffix: String? { + #if os(Windows) && DEBUG + "_debug" + #else + nil + #endif + } var flatPathExtension: String? { #if os(Windows) @@ -216,7 +224,7 @@ class BundlePlayground { // Make a main and an auxiliary executable: self.mainExecutableURL = bundleURL - .appendingPathComponent(bundleName) + .appendingPathComponent(bundleName + (executableType.fileNameSuffix ?? "")) if let ext = executableType.flatPathExtension { self.mainExecutableURL.appendPathExtension(ext) @@ -227,7 +235,7 @@ class BundlePlayground { } var auxiliaryExecutableURL = bundleURL - .appendingPathComponent(auxiliaryExecutableName) + .appendingPathComponent(auxiliaryExecutableName + (executableType.fileNameSuffix ?? "")) if let ext = executableType.flatPathExtension { auxiliaryExecutableURL.appendPathExtension(ext) @@ -270,7 +278,7 @@ class BundlePlayground { // Make a main and an auxiliary executable: self.mainExecutableURL = temporaryDirectory .appendingPathComponent(executableType.fhsPrefix) - .appendingPathComponent(executableType.nonFlatFilePrefix + bundleName) + .appendingPathComponent(executableType.nonFlatFilePrefix + bundleName + (executableType.fileNameSuffix ?? "")) if let ext = executableType.pathExtension { self.mainExecutableURL.appendPathExtension(ext) @@ -280,7 +288,7 @@ class BundlePlayground { let executablesDirectory = temporaryDirectory.appendingPathComponent("libexec").appendingPathComponent("\(bundleName).executables") try FileManager.default.createDirectory(atPath: executablesDirectory.path, withIntermediateDirectories: true, attributes: nil) var auxiliaryExecutableURL = executablesDirectory - .appendingPathComponent(executableType.nonFlatFilePrefix + auxiliaryExecutableName) + .appendingPathComponent(executableType.nonFlatFilePrefix + auxiliaryExecutableName + (executableType.fileNameSuffix ?? "")) if let ext = executableType.pathExtension { auxiliaryExecutableURL.appendPathExtension(ext) @@ -317,7 +325,7 @@ class BundlePlayground { // Make a main executable: self.mainExecutableURL = temporaryDirectory - .appendingPathComponent(executableType.nonFlatFilePrefix + bundleName) + .appendingPathComponent(executableType.nonFlatFilePrefix + bundleName + (executableType.fileNameSuffix ?? "")) if let ext = executableType.pathExtension { self.mainExecutableURL.appendPathExtension(ext) @@ -330,7 +338,7 @@ class BundlePlayground { // Make an auxiliary executable: var auxiliaryExecutableURL = resourcesDirectory - .appendingPathComponent(executableType.nonFlatFilePrefix + auxiliaryExecutableName) + .appendingPathComponent(executableType.nonFlatFilePrefix + auxiliaryExecutableName + (executableType.fileNameSuffix ?? "")) if let ext = executableType.pathExtension { auxiliaryExecutableURL.appendPathExtension(ext) } @@ -516,11 +524,14 @@ class TestBundle : XCTestCase { XCTFail("should not fail to load") } + // This causes a dialog box to appear on Windows which will suspend the tests, so skip testing this on Windows for now + #if !os(Windows) // Executable cannot be located try! _withEachPlaygroundLayout { (playground) in let bundle = Bundle(path: playground.bundlePath) XCTAssertThrowsError(try bundle!.loadAndReturnError()) } + #endif } func test_bundleWithInvalidPath() { @@ -531,12 +542,15 @@ class TestBundle : XCTestCase { func test_bundlePreflight() { XCTAssertNoThrow(try testBundle(executable: true).preflight()) + // Windows DLL bundles are always executable + #if !os(Windows) try! _withEachPlaygroundLayout { (playground) in let bundle = Bundle(path: playground.bundlePath)! // Must throw as the main executable is a dummy empty file. XCTAssertThrowsError(try bundle.preflight()) } + #endif } func test_bundleFindExecutable() { diff --git a/Tests/Foundation/TestFileManager.swift b/Tests/Foundation/TestFileManager.swift index b4555d7ca5..7e22282c9f 100644 --- a/Tests/Foundation/TestFileManager.swift +++ b/Tests/Foundation/TestFileManager.swift @@ -63,7 +63,7 @@ class TestFileManager : XCTestCase { } - func test_createFile() { + func test_createFile() throws { let fm = FileManager.default let path = NSTemporaryDirectory() + "testfile\(NSUUID().uuidString)" @@ -76,38 +76,22 @@ class TestFileManager : XCTestCase { XCTAssertTrue(exists) XCTAssertFalse(isDir.boolValue) - do { - try fm.removeItem(atPath: path) - } catch { - XCTFail("Failed to clean up file") - } + try fm.removeItem(atPath: path) #if os(Windows) - let permissions = NSNumber(value: Int16(0o700)) + let permissions = NSNumber(value: Int16(0o600)) #else let permissions = NSNumber(value: Int16(0o753)) #endif let attributes = [FileAttributeKey.posixPermissions: permissions] XCTAssertTrue(fm.createFile(atPath: path, contents: Data(), attributes: attributes)) - guard let retrievedAtributes = try? fm.attributesOfItem(atPath: path) else { - XCTFail("Failed to retrieve file attributes from created file") - return - } + let retrievedAtributes = try fm.attributesOfItem(atPath: path) - XCTAssertTrue(retrievedAtributes.contains(where: { (attribute) -> Bool in - guard let attributeValue = attribute.value as? NSNumber else { - return false - } - return (attribute.key == .posixPermissions) - && (attributeValue == permissions) - })) + let retrievedPermissions = try XCTUnwrap(retrievedAtributes[.posixPermissions] as? NSNumber) + XCTAssertEqual(retrievedPermissions, permissions) - do { - try fm.removeItem(atPath: path) - } catch { - XCTFail("Failed to clean up file") - } + try fm.removeItem(atPath: path) } func test_creatingDirectoryWithShortIntermediatePath() { @@ -174,12 +158,7 @@ class TestFileManager : XCTestCase { try fm.createDirectory(atPath: tmpDir.path, withIntermediateDirectories: false, attributes: nil) XCTAssertTrue(fm.createFile(atPath: testFile.path, contents: Data())) try fm.createSymbolicLink(atPath: goodSymLink.path, withDestinationPath: testFile.path) -#if os(Windows) - // Creating a broken symlink is expected to fail on Windows - XCTAssertNil(try? fm.createSymbolicLink(atPath: badSymLink.path, withDestinationPath: "no_such_file")) -#else try fm.createSymbolicLink(atPath: badSymLink.path, withDestinationPath: "no_such_file") -#endif try fm.createSymbolicLink(atPath: dirSymLink.path, withDestinationPath: "..") var isDirFlag: ObjCBool = false @@ -335,11 +314,7 @@ class TestFileManager : XCTestCase { //read back the attributes do { let attributes = try fm.attributesOfItem(atPath: path) -#if os(Windows) - XCTAssert((attributes[.posixPermissions] as? NSNumber)?.int16Value == 0o0700) -#else XCTAssert((attributes[.posixPermissions] as? NSNumber)?.int16Value == 0o0600) -#endif XCTAssertEqual((attributes[.modificationDate] as? NSDate)?.timeIntervalSince1970 ?? .nan, modificationDate.timeIntervalSince1970, accuracy: 1.0) } catch { XCTFail("\(error)") } @@ -689,9 +664,9 @@ class TestFileManager : XCTestCase { do { // Check a bad path fails - XCTAssertNil(fm.subpaths(atPath: "/...")) + XCTAssertNil(fm.subpaths(atPath: "/does-not-exist")) - let _ = try fm.subpathsOfDirectory(atPath: "/...") + let _ = try fm.subpathsOfDirectory(atPath: "/does-not-exist") XCTFail() } catch { @@ -1046,7 +1021,7 @@ class TestFileManager : XCTestCase { try fm.createSymbolicLink(atPath: testDir1.appendingPathComponent("foo1").path, withDestinationPath: "foo.txt") try fm.createSymbolicLink(atPath: testDir1.appendingPathComponent("bar2").path, withDestinationPath: "foo1") let unreadable = testDir1.appendingPathComponent("unreadable_file").path - try "unreadable".write(toFile: unreadable, atomically: false, encoding: .ascii) + try "".write(toFile: unreadable, atomically: false, encoding: .ascii) try fm.setAttributes([.posixPermissions: NSNumber(value: 0)], ofItemAtPath: unreadable) try Data().write(to: testDir1.appendingPathComponent("empty_file")) try fm.createSymbolicLink(atPath: symlink, withDestinationPath: testFile1URL.path) @@ -1057,11 +1032,6 @@ class TestFileManager : XCTestCase { // testDir2 try fm.createDirectory(atPath: testDir2.path, withIntermediateDirectories: true) -#if os(Windows) - try "foo".write(toFile: testDir2.appendingPathComponent("foo1").path, atomically: false, encoding: .ascii) - try fm.createDirectory(atPath: testDir2.appendingPathComponent("../testDir1").path, withIntermediateDirectories: true) - try "foo".write(toFile: testDir2.appendingPathComponent("../testDir1/foo.txt").path, atomically: false, encoding: .ascii) -#endif try fm.createSymbolicLink(atPath: testDir2.appendingPathComponent("bar2").path, withDestinationPath: "foo1") try fm.createSymbolicLink(atPath: testDir2.appendingPathComponent("foo2").path, withDestinationPath: "../testDir1/foo.txt") @@ -1113,7 +1083,6 @@ class TestFileManager : XCTestCase { XCTAssertFalse(fm.contentsEqual(atPath: symlink, andPath: testFile1URL.path)) XCTAssertTrue(fm.contentsEqual(atPath: testDir1.path, andPath: testDir1.path)) - XCTAssertTrue(fm.contentsEqual(atPath: testDir2.path, andPath: testDir3.path)) XCTAssertFalse(fm.contentsEqual(atPath: testDir1.path, andPath: testDir2.path)) // Copy everything in testDir1 to testDir2 to make them equal @@ -1258,18 +1227,14 @@ class TestFileManager : XCTestCase { return stdout.trimmingCharacters(in: CharacterSet.newlines) } - func assertFetchingPath(withConfiguration config: String, identifier: String, yields path: String) { + func assertFetchingPath(withConfiguration config: String, identifier: String, yields path: String) throws { for method in [ "NSSearchPath", "FileManagerDotURLFor", "FileManagerDotURLsFor" ] { - do { - let found = try printPathByRunningHelper(withConfiguration: config, method: method, identifier: identifier) - XCTAssertEqual(found, path) - } catch let error { - XCTFail("Failed with method \(method), configuration \(config), identifier \(identifier), equal to \(path), error \(error)") - } + let found = try printPathByRunningHelper(withConfiguration: config, method: method, identifier: identifier) + XCTAssertEqual(found, path) } } - func test_fetchXDGPathsFromHelper() { + func test_fetchXDGPathsFromHelper() throws { let prefix = NSHomeDirectory() + "/_Foundation_Test_" let configuration = """ @@ -1282,13 +1247,13 @@ class TestFileManager : XCTestCase { VIDEOS=\(prefix)/Videos """ - assertFetchingPath(withConfiguration: configuration, identifier: "desktop", yields: "\(prefix)/Desktop") - assertFetchingPath(withConfiguration: configuration, identifier: "download", yields: "\(prefix)/Download") - assertFetchingPath(withConfiguration: configuration, identifier: "publicShare", yields: "\(prefix)/PublicShare") - assertFetchingPath(withConfiguration: configuration, identifier: "documents", yields: "\(prefix)/Documents") - assertFetchingPath(withConfiguration: configuration, identifier: "music", yields: "\(prefix)/Music") - assertFetchingPath(withConfiguration: configuration, identifier: "pictures", yields: "\(prefix)/Pictures") - assertFetchingPath(withConfiguration: configuration, identifier: "videos", yields: "\(prefix)/Videos") + try assertFetchingPath(withConfiguration: configuration, identifier: "desktop", yields: "\(prefix)/Desktop") + try assertFetchingPath(withConfiguration: configuration, identifier: "download", yields: "\(prefix)/Download") + try assertFetchingPath(withConfiguration: configuration, identifier: "publicShare", yields: "\(prefix)/PublicShare") + try assertFetchingPath(withConfiguration: configuration, identifier: "documents", yields: "\(prefix)/Documents") + try assertFetchingPath(withConfiguration: configuration, identifier: "music", yields: "\(prefix)/Music") + try assertFetchingPath(withConfiguration: configuration, identifier: "pictures", yields: "\(prefix)/Pictures") + try assertFetchingPath(withConfiguration: configuration, identifier: "videos", yields: "\(prefix)/Videos") } #endif // !os(Android) #endif // !DEPLOYMENT_RUNTIME_OBJC @@ -1300,38 +1265,46 @@ class TestFileManager : XCTestCase { // are throwable, an NSError is thrown instead which is more useful. let fm = FileManager.default - XCTAssertEqual(fm.homeDirectory(forUser: ""), URL(filePath: "/var/empty", directoryHint: .isDirectory)) - XCTAssertEqual(NSHomeDirectoryForUser(""), "/var/empty") + #if os(Windows) + let defaultHomeDirectory = ProcessInfo.processInfo.environment["ALLUSERSPROFILE"]! + let emptyFileNameError: CocoaError.Code? = .fileReadInvalidFileName + #else + let defaultHomeDirectory = "/var/empty" + let emptyFileNameError: CocoaError.Code? = nil + #endif + + XCTAssertEqual(fm.homeDirectory(forUser: ""), URL(filePath: defaultHomeDirectory, directoryHint: .isDirectory)) + XCTAssertEqual(NSHomeDirectoryForUser(""), defaultHomeDirectory) XCTAssertThrowsError(try fm.contentsOfDirectory(atPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadNoSuchFile) + XCTAssertEqual(code, emptyFileNameError ?? .fileReadNoSuchFile) } XCTAssertNil(fm.enumerator(atPath: "")) XCTAssertNil(fm.subpaths(atPath: "")) XCTAssertThrowsError(try fm.subpathsOfDirectory(atPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadNoSuchFile) + XCTAssertEqual(code, emptyFileNameError ?? .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.createDirectory(atPath: "", withIntermediateDirectories: true)) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileNoSuchFile) + XCTAssertEqual(code, emptyFileNameError ?? .fileNoSuchFile) } XCTAssertFalse(fm.createFile(atPath: "", contents: Data())) XCTAssertThrowsError(try fm.removeItem(atPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileNoSuchFile) + XCTAssertEqual(code, emptyFileNameError ?? .fileNoSuchFile) } XCTAssertThrowsError(try fm.copyItem(atPath: "", toPath: "/tmp/t")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadNoSuchFile) + XCTAssertEqual(code, emptyFileNameError ?? .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.copyItem(atPath: "", toPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadNoSuchFile) + XCTAssertEqual(code, emptyFileNameError ?? .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.copyItem(atPath: "/tmp/t", toPath: "")) { let code = ($0 as? CocoaError)?.code @@ -1342,25 +1315,33 @@ class TestFileManager : XCTestCase { // TODO: re-enable when URLResourceValues are supported in swift-foundation XCTAssertThrowsError(try fm.moveItem(atPath: "", toPath: "/tmp/t")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadInvalidFileName) + XCTAssertEqual(code, emptyFileNameError ?? .fileReadInvalidFileName) } #endif XCTAssertThrowsError(try fm.moveItem(atPath: "", toPath: "")) { let code = ($0 as? CocoaError)?.code + #if os(Windows) + XCTAssertEqual(code, .fileNoSuchFile) + #else XCTAssertEqual(code, .fileWriteFileExists) + #endif } XCTAssertThrowsError(try fm.moveItem(atPath: "/tmp/t", toPath: "")) { let code = ($0 as? CocoaError)?.code + #if os(Windows) + XCTAssertEqual(code, .fileNoSuchFile) + #else XCTAssertEqual(code, .fileWriteFileExists) + #endif } XCTAssertThrowsError(try fm.linkItem(atPath: "", toPath: "/tmp/t")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadNoSuchFile) + XCTAssertEqual(code, emptyFileNameError ?? .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.linkItem(atPath: "", toPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadNoSuchFile) + XCTAssertEqual(code, emptyFileNameError ?? .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.linkItem(atPath: "/tmp/t", toPath: "")) { let code = ($0 as? CocoaError)?.code @@ -1369,11 +1350,11 @@ class TestFileManager : XCTestCase { XCTAssertThrowsError(try fm.createSymbolicLink(atPath: "", withDestinationPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileNoSuchFile) + XCTAssertEqual(code, emptyFileNameError ?? .fileNoSuchFile) } XCTAssertThrowsError(try fm.createSymbolicLink(atPath: "", withDestinationPath: "/tmp/t")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileNoSuchFile) + XCTAssertEqual(code, emptyFileNameError ?? .fileNoSuchFile) } XCTAssertThrowsError(try fm.createSymbolicLink(atPath: "/tmp/t", withDestinationPath: "")) { let code = ($0 as? CocoaError)?.code @@ -1382,22 +1363,26 @@ class TestFileManager : XCTestCase { XCTAssertThrowsError(try fm.destinationOfSymbolicLink(atPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadNoSuchFile) + XCTAssertEqual(code, emptyFileNameError ?? .fileReadNoSuchFile) } XCTAssertFalse(fm.fileExists(atPath: "")) XCTAssertFalse(fm.fileExists(atPath: "", isDirectory: nil)) XCTAssertFalse(fm.isReadableFile(atPath: "")) XCTAssertFalse(fm.isWritableFile(atPath: "")) XCTAssertFalse(fm.isExecutableFile(atPath: "")) + #if os(Windows) + XCTAssertFalse(fm.isDeletableFile(atPath: "")) + #else XCTAssertTrue(fm.isDeletableFile(atPath: "")) + #endif XCTAssertThrowsError(try fm.attributesOfItem(atPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadNoSuchFile) + XCTAssertEqual(code, emptyFileNameError ?? .fileReadNoSuchFile) } XCTAssertThrowsError(try fm.attributesOfFileSystem(forPath: "")) { let code = ($0 as? CocoaError)?.code - XCTAssertEqual(code, .fileReadNoSuchFile) + XCTAssertEqual(code, emptyFileNameError ?? .fileReadNoSuchFile) } XCTAssertNil(fm.contents(atPath: "")) @@ -1690,7 +1675,7 @@ class TestFileManager : XCTestCase { throw XCTSkip("This test is only enabled on Windows") #else let fm = FileManager.default - let tmpPath = writableTestDirectoryURL.path + let tmpPath = writableTestDirectoryURL.withUnsafeFileSystemRepresentation { String(cString: $0!) } do { try fm.createDirectory(atPath: tmpPath, withIntermediateDirectories: true, attributes: nil) } catch { @@ -1717,7 +1702,6 @@ class TestFileManager : XCTestCase { "\(tmpPath)\\testfile", // C:/Users/...\testfile "\(tmpPath)/testfile", // C:/Users.../testfile "\(tmpPath)/testfile", // /Users/user/.../testfile - "\(tmpPath.first!):testfile", // C:testfile // Relative Paths ".\\testfile", @@ -1748,6 +1732,9 @@ class TestFileManager : XCTestCase { - Bug: [SR-12272](https://bugs.swift.org/browse/SR-12272) */ func test_concurrentGetItemReplacementDirectory() throws { + #if os(Windows) + throw XCTSkip("Test expected to fail - intermittent SEGFAULT") + #else let fileManager = FileManager.default let operationCount = 10 @@ -1784,6 +1771,7 @@ class TestFileManager : XCTestCase { XCTFail("One of the concurrent calls to get the item replacement directory failed: \(error)") } } + #endif } func testNSNumberUpcall() throws { diff --git a/Tests/Foundation/TestNSString.swift b/Tests/Foundation/TestNSString.swift index 3ad5ee7b36..130dbbd8c0 100644 --- a/Tests/Foundation/TestNSString.swift +++ b/Tests/Foundation/TestNSString.swift @@ -1047,7 +1047,11 @@ class TestNSString: LoopbackServerTest { let path = NSString(string: "~\(userName)/") let result = path.expandingTildeInPath // next assert fails in VirtualBox because home directory for unknown user resolved to /var/run/vboxadd + #if os(Windows) + XCTAssertEqual(result, ProcessInfo.processInfo.environment["ALLUSERSPROFILE"]) + #else XCTAssertEqual(result, "/var/empty", "Return copy of receiver if home directory could not be resolved.") + #endif } } diff --git a/Tests/Foundation/TestProcess.swift b/Tests/Foundation/TestProcess.swift index e92d746214..c0ec2268fe 100644 --- a/Tests/Foundation/TestProcess.swift +++ b/Tests/Foundation/TestProcess.swift @@ -413,10 +413,7 @@ class TestProcess : XCTestCase { } func test_terminate() throws { - guard let process = try? Process.run(try xdgTestHelperURL(), arguments: ["--cat"]) else { - XCTFail("Cant run 'cat'") - return - } + let process = try Process.run(try xdgTestHelperURL(), arguments: ["--cat"]) process.terminate() process.waitUntilExit() @@ -549,6 +546,10 @@ class TestProcess : XCTestCase { func test_plutil() throws { + #if os(Windows) + // See explanation in xdgTestHelperURL() as to why this is unsupported + throw XCTSkip("Running plutil as part of unit tests is not supported on Windows") + #else let task = Process() guard let url = testBundle(executable: true).url(forAuxiliaryExecutable: "plutil") else { @@ -576,6 +577,7 @@ class TestProcess : XCTestCase { } XCTAssertEqual(String(data: $0, encoding: .utf8)?.trimmingCharacters(in: .whitespacesAndNewlines), "No files specified.") } + #endif } @available(*, deprecated) // test of deprecated API, suppress deprecation warning @@ -613,7 +615,7 @@ class TestProcess : XCTestCase { XCTAssertEqual(process.currentDirectoryPath, "") XCTAssertNil(process.currentDirectoryURL) process.currentDirectoryURL = nil - XCTAssertEqual(process.currentDirectoryPath, cwd.path) + XCTAssertEqual(process.currentDirectoryPath, cwd.withUnsafeFileSystemRepresentation { String(cString: $0!) }) process.executableURL = URL(fileURLWithPath: "/some_file_that_doesnt_exist", isDirectory: false) diff --git a/Tests/Foundation/TestProcessInfo.swift b/Tests/Foundation/TestProcessInfo.swift index fdfdb3ca6a..9e9034086d 100644 --- a/Tests/Foundation/TestProcessInfo.swift +++ b/Tests/Foundation/TestProcessInfo.swift @@ -45,16 +45,9 @@ class TestProcessInfo : XCTestCase { } func test_processName() { -#if DARWIN_COMPATIBILITY_TESTS - let targetName = "xctest" -#elseif os(Windows) - let targetName = "swift-corelibs-foundationPackageTests.exe" -#else - let targetName = "swift-corelibs-foundationPackageTests.xctest" -#endif let processInfo = ProcessInfo.processInfo let originalProcessName = processInfo.processName - XCTAssertEqual(originalProcessName, targetName) + XCTAssertEqual(originalProcessName, "swift-corelibs-foundationPackageTests.xctest") // Try assigning a new process name. let newProcessName = "TestProcessName" diff --git a/Tests/Foundation/TestThread.swift b/Tests/Foundation/TestThread.swift index 1cdbcb9b75..281d0903dd 100644 --- a/Tests/Foundation/TestThread.swift +++ b/Tests/Foundation/TestThread.swift @@ -104,6 +104,8 @@ class TestThread : XCTestCase { func test_callStackSymbols() throws { #if os(Android) || os(OpenBSD) throw XCTSkip("Android/OpenBSD doesn't support backtraces at the moment.") + #elseif os(Windows) + throw XCTSkip("This test is unexpectedly crashing in CI at the moment.") #else let symbols = Thread.callStackSymbols XCTAssertTrue(symbols.count > 0) @@ -114,6 +116,8 @@ class TestThread : XCTestCase { func test_callStackReturnAddresses() throws { #if os(Android) || os(OpenBSD) throw XCTSkip("Android/OpenBSD doesn't support backtraces at the moment.") + #elseif os(Windows) + throw XCTSkip("This test is unexpectedly crashing in CI at the moment.") #else let addresses = Thread.callStackReturnAddresses XCTAssertTrue(addresses.count > 0) diff --git a/Tests/Foundation/TestURL.swift b/Tests/Foundation/TestURL.swift index c10d4963cd..4e044c05ec 100644 --- a/Tests/Foundation/TestURL.swift +++ b/Tests/Foundation/TestURL.swift @@ -27,6 +27,16 @@ let kCFURLCreateAbsoluteURLWithBytesCreator = "CFURLCreateAbsoluteURLWithBytes" let kNullURLString = "" let kNullString = "" +func XCTAssertEqualFileSystemPaths(_ lhs: String?, _ rhs: String?, _ message: @autoclosure () -> String = "", file: StaticString = #filePath, line: UInt = #line) { + #if os(Windows) + let mappedLHS = lhs?.replacingOccurrences(of: "\\", with: "/") + let mappedRHS = rhs?.replacingOccurrences(of: "\\", with: "/") + XCTAssertEqual(mappedLHS, mappedRHS, message(), file: file, line: line) + #else + XCTAssertEqual(lhs, rhs, message(), file: file, line: line) + #endif +} + /// Reads the test data plist file and returns the list of objects private func getTestData() -> [Any]? { let testFilePath = testBundle().url(forResource: "NSURLTestData", withExtension: "plist") @@ -54,17 +64,6 @@ class TestURL : XCTestCase { let u1 = URL(fileURLWithPath: "S:\\b\\u1/") XCTAssertEqual(u1.absoluteString, "file:///S:/b/u1/") - // ensure that trailing slashes are compressed - // e.g. NOT file:///S:/b/u2%2F%2F%2F%/ - let u2 = URL(fileURLWithPath: "S:\\b\\u2/////") - XCTAssertEqual(u2.absoluteString, "file:///S:/b/u2/") - - // ensure that the trailing slashes are compressed even when mixed - // e.g. NOT file:///S:/b/u3%2F%/%2F%2/ - let u3 = URL(fileURLWithPath: "S:\\b\\u3//\\//") - XCTAssertEqual(u3.absoluteString, "file:///S:/b/u3/") - XCTAssertEqual(u3.path, "S:/b/u3") - // ensure that the regular conversion works let u4 = URL(fileURLWithPath: "S:\\b\\u4") XCTAssertEqual(u4.absoluteString, "file:///S:/b/u4") @@ -103,9 +102,6 @@ class TestURL : XCTestCase { let u3 = URL(fileURLWithPath: "\\", isDirectory: false) XCTAssertEqual(u3.absoluteString, "file:///") - let u4 = URL(fileURLWithPath: "S:\\b\\u3//\\//") - XCTAssertEqual(u4.absoluteString, "file:///S:/b/u3/") - // ensure leading slash doesn't break everything let u5 = URL(fileURLWithPath: "\\abs\\path") XCTAssertEqual(u5.absoluteString, "file:///abs/path") @@ -124,7 +120,7 @@ class TestURL : XCTestCase { func test_fileURLWithPath_relativeTo() { let homeDirectory = NSHomeDirectory() let homeURL = URL(fileURLWithPath: homeDirectory, isDirectory: true) - XCTAssertEqual(homeDirectory, homeURL.path) + XCTAssertEqualFileSystemPaths(homeDirectory, homeURL.withUnsafeFileSystemRepresentation { String(cString: $0!) }) #if os(macOS) let baseURL = URL(fileURLWithPath: homeDirectory, isDirectory: true) @@ -411,25 +407,25 @@ class TestURL : XCTestCase { var path = TestURL.gFileExistsPath var url = NSURL(fileURLWithPath: path) XCTAssertFalse(url.hasDirectoryPath, "did not expect URL with directory path: \(url)") - XCTAssertEqual(path, url.path, "path from file path URL is wrong") + XCTAssertEqualFileSystemPaths(path, url.path, "path from file path URL is wrong") // test with file that doesn't exist path = TestURL.gFileDoesNotExistPath url = NSURL(fileURLWithPath: path) XCTAssertFalse(url.hasDirectoryPath, "did not expect URL with directory path: \(url)") - XCTAssertEqual(path, url.path, "path from file path URL is wrong") + XCTAssertEqualFileSystemPaths(path, url.path, "path from file path URL is wrong") // test with directory that exists path = TestURL.gDirectoryExistsPath url = NSURL(fileURLWithPath: path) XCTAssertTrue(url.hasDirectoryPath, "expected URL with directory path: \(url)") - XCTAssertEqual(path, url.path, "path from file path URL is wrong") + XCTAssertEqualFileSystemPaths(path, url.path, "path from file path URL is wrong") // test with directory that doesn't exist path = TestURL.gDirectoryDoesNotExistPath url = NSURL(fileURLWithPath: path) XCTAssertFalse(url.hasDirectoryPath, "did not expect URL with directory path: \(url)") - XCTAssertEqual(path, url.path, "path from file path URL is wrong") + XCTAssertEqualFileSystemPaths(path, url.path, "path from file path URL is wrong") // test with name relative to current working directory path = TestURL.gFileDoesNotExistName @@ -473,7 +469,7 @@ class TestURL : XCTestCase { XCTAssertTrue(url.hasDirectoryPath, "expected URL with directory path: \(url)") url = NSURL(fileURLWithPath: path, isDirectory: false) XCTAssertFalse(url.hasDirectoryPath, "did not expect URL with directory path: \(url)") - XCTAssertEqual(path, url.path, "path from file path URL is wrong") + XCTAssertEqualFileSystemPaths(path, url.path, "path from file path URL is wrong") // test with file that doesn't exist path = TestURL.gFileDoesNotExistPath @@ -481,7 +477,7 @@ class TestURL : XCTestCase { XCTAssertTrue(url.hasDirectoryPath, "expected URL with directory path: \(url)") url = NSURL(fileURLWithPath: path, isDirectory: false) XCTAssertFalse(url.hasDirectoryPath, "did not expect URL with directory path: \(url)") - XCTAssertEqual(path, url.path, "path from file path URL is wrong") + XCTAssertEqualFileSystemPaths(path, url.path, "path from file path URL is wrong") // test with directory that exists path = TestURL.gDirectoryExistsPath @@ -489,7 +485,7 @@ class TestURL : XCTestCase { XCTAssertFalse(url.hasDirectoryPath, "did not expect URL with directory path: \(url)") url = NSURL(fileURLWithPath: path, isDirectory: true) XCTAssertTrue(url.hasDirectoryPath, "expected URL with directory path: \(url)") - XCTAssertEqual(path, url.path, "path from file path URL is wrong") + XCTAssertEqualFileSystemPaths(path, url.path, "path from file path URL is wrong") // test with directory that doesn't exist path = TestURL.gDirectoryDoesNotExistPath @@ -497,7 +493,7 @@ class TestURL : XCTestCase { XCTAssertFalse(url.hasDirectoryPath, "did not expect URL with directory path: \(url)") url = NSURL(fileURLWithPath: path, isDirectory: true) XCTAssertTrue(url.hasDirectoryPath, "expected URL with directory path: \(url)") - XCTAssertEqual(path, url.path, "path from file path URL is wrong") + XCTAssertEqualFileSystemPaths(path, url.path, "path from file path URL is wrong") // test with name relative to current working directory path = TestURL.gFileDoesNotExistName diff --git a/Tests/Foundation/TestURLSession.swift b/Tests/Foundation/TestURLSession.swift index 2218c3ddf0..29b71407c6 100644 --- a/Tests/Foundation/TestURLSession.swift +++ b/Tests/Foundation/TestURLSession.swift @@ -652,6 +652,9 @@ final class TestURLSession: LoopbackServerTest, @unchecked Sendable { } func test_repeatedRequestsStress() async throws { + #if os(Windows) + throw XCTSkip("This test is currently disabled on Windows") + #else // TODO: try disabling curl connection cache to force socket close early. Or create several url sessions (they have cleanup in deinit) let config = URLSessionConfiguration.default @@ -692,6 +695,7 @@ final class TestURLSession: LoopbackServerTest, @unchecked Sendable { checkCountAndRunNext() waitForExpectations(timeout: 30) + #endif } func test_httpRedirectionWithCode300() async throws { @@ -1018,8 +1022,10 @@ final class TestURLSession: LoopbackServerTest, @unchecked Sendable { } } - // temporarily disabled (https://bugs.swift.org/browse/SR-5751) - func test_httpRedirectionTimeout() async { + func test_httpRedirectionTimeout() async throws { + #if os(Windows) + throw XCTSkip("temporarily disabled (https://bugs.swift.org/browse/SR-5751)") + #else let urlString = "http://127.0.0.1:\(TestURLSession.serverPort)/UnitedStates" var req = URLRequest(url: URL(string: urlString)!) req.timeoutInterval = 3 @@ -1037,6 +1043,7 @@ final class TestURLSession: LoopbackServerTest, @unchecked Sendable { } task.resume() waitForExpectations(timeout: 12) + #endif } func test_httpRedirectionChainInheritsTimeoutInterval() async throws { From 4418280309b5d1f7f42671f5a45ffd3157a11cbd Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld Date: Wed, 21 Aug 2024 10:21:30 -0700 Subject: [PATCH 140/198] Add stub for Testing module (#5077) * Add stub for Testing module * Fix indentation --- Package.swift | 9 ++++++++- Sources/Testing/Testing.swift | 25 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 Sources/Testing/Testing.swift diff --git a/Package.swift b/Package.swift index b63612a790..2b5b5e0534 100644 --- a/Package.swift +++ b/Package.swift @@ -323,17 +323,23 @@ let package = Package( .swiftLanguageMode(.v6) ] ), - .target( // swift-corelibs-foundation has a copy of XCTest's sources so: // (1) we do not depend on the toolchain's XCTest, which depends on toolchain's Foundation, which we cannot pull in at the same time as a Foundation package // (2) we do not depend on a swift-corelibs-xctest Swift package, which depends on Foundation, which causes a circular dependency in swiftpm // We believe Foundation is the only project that needs to take this rather drastic measure. + // We also have a stub for swift-testing for the same purpose, but without an implementation since this package has no swift-testing style tests + .target( name: "XCTest", dependencies: [ "Foundation" ], path: "Sources/XCTest" ), + .target( + name: "Testing", + dependencies: [], + path: "Sources/Testing" + ), .testTarget( name: "TestFoundation", dependencies: [ @@ -341,6 +347,7 @@ let package = Package( "FoundationXML", "FoundationNetworking", "XCTest", + "Testing", .target(name: "xdgTestHelper", condition: .when(platforms: [.linux])) ], resources: [ diff --git a/Sources/Testing/Testing.swift b/Sources/Testing/Testing.swift new file mode 100644 index 0000000000..712d9deef4 --- /dev/null +++ b/Sources/Testing/Testing.swift @@ -0,0 +1,25 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// + +#if canImport(Glibc) +import Glibc +#elseif canImport(Musl) +import Musl +#elseif os(WASI) +import WASILibc +#elseif canImport(CRT) +import CRT +#endif + + +// This function is used to mimic a bare minimum of the swift-testing library. Since this package has no swift-testing tests, we simply exit. +// The test runner will automatically call this function when running tests, so it must exit gracefully rather than using `fatalError()`. +public func __swiftPMEntryPoint(passing _: (any Sendable)? = nil) async -> Never { + exit(0) +} From ef225c7bdf28e8740141f02e78ca5a30a3fc1120 Mon Sep 17 00:00:00 2001 From: "LamTrinh.Dev" Date: Sat, 31 Aug 2024 00:25:40 +0700 Subject: [PATCH 141/198] Add one more XCTAssert for isLeapMonth in TestDate.swift (#5080) --- Tests/Foundation/TestDate.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Tests/Foundation/TestDate.swift b/Tests/Foundation/TestDate.swift index ed068ab172..aa7d9dec50 100644 --- a/Tests/Foundation/TestDate.swift +++ b/Tests/Foundation/TestDate.swift @@ -134,6 +134,7 @@ class TestDate : XCTestCase { XCTAssertEqual(recreatedComponents.weekOfMonth, 2) XCTAssertEqual(recreatedComponents.weekOfYear, 45) XCTAssertEqual(recreatedComponents.yearForWeekOfYear, 2017) + XCTAssertEqual(recreatedComponents.isLeapMonth, false) // Quarter is now supported by Calendar XCTAssertEqual(recreatedComponents.quarter, 4) From c820f72fc67f34e14d3c7ad28efb6b7a422cb4fc Mon Sep 17 00:00:00 2001 From: Egor Zhdan Date: Tue, 3 Sep 2024 17:45:04 +0100 Subject: [PATCH 142/198] Fix compiler error in CoreFoundation when building in C++ mode (#5081) `__CFAllocatorRespectsHintZeroWhenAllocating` has two declarations in different headers: `ForFoundationOnly.h` and `ForSwiftFoundationOnly.h`. One of the declarations was under `extern "C"` block, the other one wasn't. Clang accepts this in C language mode, but it is a hard compiler error in C++ language mode due to a linkage mismatch. This was blocking clients from using CoreFoundation in Swift projects that enable C++ interoperability. This change makes sure that both declarations of `__CFAllocatorRespectsHintZeroWhenAllocating` are under `extern "C"` blocks. --- Sources/CoreFoundation/include/ForFoundationOnly.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Sources/CoreFoundation/include/ForFoundationOnly.h b/Sources/CoreFoundation/include/ForFoundationOnly.h index 533f22f50a..aef916621d 100644 --- a/Sources/CoreFoundation/include/ForFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForFoundationOnly.h @@ -57,6 +57,8 @@ CF_IMPLICIT_BRIDGING_DISABLED #include #endif +_CF_EXPORT_SCOPE_BEGIN + #if __BLOCKS__ /* These functions implement standard error handling for reallocation. Their parameters match their unsafe variants (realloc/CFAllocatorReallocate). They differ from reallocf as they provide a chance for you to clean up a buffers contents (in addition to freeing the buffer, etc.) @@ -69,10 +71,13 @@ CF_EXPORT void *_Nonnull __CFSafelyReallocateWithAllocator(CFAllocatorRef _Nulla #endif Boolean __CFAllocatorRespectsHintZeroWhenAllocating(CFAllocatorRef _Nullable allocator); + typedef CF_ENUM(CFOptionFlags, _CFAllocatorHint) { _CFAllocatorHintZeroWhenAllocating = 1 }; +_CF_EXPORT_SCOPE_END + #define NSISARGTYPE void * _Nullable #pragma mark - CFBundle From 83062fa276c05745f4d336a483447e483b794d3e Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Sat, 7 Sep 2024 21:02:21 -0700 Subject: [PATCH 143/198] Tests: prefer `XCTAssertEqual` over `XCTAssertTrue` Use the `XCTAssertEqual` check for the equality over an inline equal check. This allows the message to describe both sides of the comparison and helps identify the issue more easily. --- Tests/Foundation/TestXMLDocument.swift | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Tests/Foundation/TestXMLDocument.swift b/Tests/Foundation/TestXMLDocument.swift index 2f9eaaab9e..2db981dca4 100644 --- a/Tests/Foundation/TestXMLDocument.swift +++ b/Tests/Foundation/TestXMLDocument.swift @@ -27,16 +27,16 @@ class TestXMLDocument : LoopbackServerTest { XCTAssert(element.name! == "D:propfind") XCTAssert(element.rootDocument == nil) if let namespace = element.namespaces?.first { - XCTAssert(namespace.prefix == "D") - XCTAssert(namespace.stringValue == "DAV:") + XCTAssertEqual(namespace.prefix, "D") + XCTAssertEqual(namespace.stringValue, "DAV:") } else { XCTFail("Namespace was not parsed correctly") } if let child = element.elements(forName: "D:prop").first { - XCTAssert(child.localName == "prop") - XCTAssert(child.prefix == "D") - XCTAssert(child.name == "D:prop") + XCTAssertEqual(child.localName, "prop") + XCTAssertEqual(child.prefix, "D") + XCTAssertEqual(child.name, "D:prop") } else { XCTFail("Child element was not parsed correctly!") } @@ -484,8 +484,8 @@ class TestXMLDocument : LoopbackServerTest { let elementDecl = XMLDTDNode(kind: .elementDeclaration) elementDecl.name = "MyElement" elementDecl.stringValue = "(#PCDATA | array)*" - XCTAssert(elementDecl.stringValue == "(#PCDATA | array)*", elementDecl.stringValue ?? "nil string value") - XCTAssert(elementDecl.name == "MyElement") + XCTAssertEqual(elementDecl.stringValue, "(#PCDATA | array)*") + XCTAssertEqual(elementDecl.name, "MyElement") } func test_documentWithDTD() throws { @@ -562,9 +562,9 @@ class TestXMLDocument : LoopbackServerTest { XCTAssert(newNS.name == "F") let root = doc.rootElement()! - XCTAssert(root.localName == "propfind") - XCTAssert(root.name == "D:propfind") - XCTAssert(root.prefix == "D") + XCTAssertEqual(root.localName, "propfind") + XCTAssertEqual(root.name, "D:propfind") + XCTAssertEqual(root.prefix, "D") let node = doc.findFirstChild(named: "prop") XCTAssert(node != nil, "failed to find existing node") XCTAssert(node?.localName == "prop") From 86a733f50607d3ffed67357d2a518f8010c208b3 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Tue, 17 Sep 2024 02:23:44 +0900 Subject: [PATCH 144/198] [XMLParser] Fix reentrancy issue around `currentParser` (#5061) * [XMLParser] Use `TaskLocal` for storing the current parser Instead of thread-local storage, use `TaskLocal` to store the current parser. This solves three issues: 1. If someone calls `XMLParser.parse()` with a new parser instance in a delegate method call, it overwrote the current parser and wrote it back after the call as `nil`, not the previous current parser. This reentrancy issue can be a problem especially when someone uses external entity resolving since the feature depends on the current parser tracking. Using `TaskLocal` solves this issue since it tracks values as a stack and restores the previous value at the end of the `withValue` call. 2. Since jobs of different tasks can be scheduled on the same thread, different tasks can refer to the same thread-local storage. This wouldn't be a problem for now since the `parse()` method doesn't have any suspention points and different tasks can't run on the same thread during the parsing. However, it's better to use `TaskLocal` to leverage the concurrency model of Swift. 3. The global variable `_currentParser` existed in the WASI platform path but it's unsafe in the Swift concurrency model. It wouldn't be a problem on WASI since it's always single-threaded, we should avoid platform-specific assumption as much as possible. * Remove unnecessary `#if os(WASI)` condition in XMLParser.swift * Keep the current parser in TLS instead of TaskLocal TaskLocal storage is inherited by non-detached child tasks, which can lead to the parser being shared between tasks. This is not our intention and can lead to inconsistent state. Instead, we should keep the current parser in thread-local storage. This should be safe as long as we don't have any structured suspension points in `withCurrentParser` block. * Simplify the current parser context management --- Sources/FoundationXML/XMLParser.swift | 89 ++++++++++----------------- Tests/Foundation/TestXMLParser.swift | 43 ++++++++++++- 2 files changed, 73 insertions(+), 59 deletions(-) diff --git a/Sources/FoundationXML/XMLParser.swift b/Sources/FoundationXML/XMLParser.swift index d89d0ee1f4..62c94679ee 100644 --- a/Sources/FoundationXML/XMLParser.swift +++ b/Sources/FoundationXML/XMLParser.swift @@ -398,9 +398,7 @@ extension XMLParser : @unchecked Sendable { } open class XMLParser : NSObject { private var _handler: _CFXMLInterfaceSAXHandler -#if !os(WASI) internal var _stream: InputStream? -#endif internal var _data: Data? internal var _chunkSize = Int(4096 * 32) // a suitably large number for a decent chunk size @@ -414,9 +412,6 @@ open class XMLParser : NSObject { // initializes the parser with the specified URL. public convenience init?(contentsOf url: URL) { -#if os(WASI) - return nil -#else setupXMLParsing() if url.isFileURL { if let stream = InputStream(url: url) { @@ -434,7 +429,6 @@ open class XMLParser : NSObject { return nil } } -#endif } // create the parser from data @@ -450,7 +444,6 @@ open class XMLParser : NSObject { _CFXMLInterfaceDestroyContext(_parserContext) } -#if !os(WASI) //create a parser that incrementally pulls data from the specified stream and parses it. public init(stream: InputStream) { setupXMLParsing() @@ -458,7 +451,6 @@ open class XMLParser : NSObject { _handler = _CFXMLInterfaceCreateSAXHandler() _parserContext = nil } -#endif open weak var delegate: XMLParserDelegate? @@ -469,33 +461,35 @@ open class XMLParser : NSObject { open var externalEntityResolvingPolicy: ExternalEntityResolvingPolicy = .never open var allowedExternalEntityURLs: Set? - -#if os(WASI) - private static var _currentParser: XMLParser? -#endif + #if os(WASI) + /// The current parser associated with the current thread. (assuming no multi-threading) + /// FIXME: Unify the implementation with the other platforms once we unlock `threadDictionary` + /// or migrate to `FoundationEssentials._ThreadLocal`. + private static nonisolated(unsafe) var _currentParser: XMLParser? = nil + #else + /// The current parser associated with the current thread. + private static var _currentParser: XMLParser? { + get { + return Thread.current.threadDictionary["__CurrentNSXMLParser"] as? XMLParser + } + set { + Thread.current.threadDictionary["__CurrentNSXMLParser"] = newValue + } + } + #endif + + /// The current parser associated with the current thread. internal static func currentParser() -> XMLParser? { -#if os(WASI) return _currentParser -#else - if let current = Thread.current.threadDictionary["__CurrentNSXMLParser"] { - return current as? XMLParser - } else { - return nil - } -#endif } - - internal static func setCurrentParser(_ parser: XMLParser?) { -#if os(WASI) + + /// Execute the given closure with the current parser set to the given parser. + internal static func withCurrentParser(_ parser: XMLParser, _ body: () -> R) -> R { + let oldParser = _currentParser _currentParser = parser -#else - if let p = parser { - Thread.current.threadDictionary["__CurrentNSXMLParser"] = p - } else { - Thread.current.threadDictionary.removeObject(forKey: "__CurrentNSXMLParser") - } -#endif + defer { _currentParser = oldParser } + return body() } internal func _handleParseResult(_ parseResult: Int32) -> Bool { @@ -569,7 +563,6 @@ open class XMLParser : NSObject { return result } -#if !os(WASI) internal func parseFrom(_ stream : InputStream) -> Bool { var result = true @@ -598,37 +591,17 @@ open class XMLParser : NSObject { return result } -#else - internal func parse(from data: Data) -> Bool { - var result = true - var chunkStart = 0 - var chunkEnd = min(_chunkSize, data.count) - while result && chunkStart < chunkEnd { - let chunk = data[chunkStart.. Bool { -#if os(WASI) - return _data.map { parse(from: $0) } ?? false -#else - XMLParser.setCurrentParser(self) - defer { XMLParser.setCurrentParser(nil) } - - if _stream != nil { - return parseFrom(_stream!) - } else if _data != nil { - return parseData(_data!, lastChunkOfData: true) + return Self.withCurrentParser(self) { + if _stream != nil { + return parseFrom(_stream!) + } else if _data != nil { + return parseData(_data!, lastChunkOfData: true) + } + return false } - - return false -#endif } // called by the delegate to stop the parse. The delegate will get an error message sent to it. diff --git a/Tests/Foundation/TestXMLParser.swift b/Tests/Foundation/TestXMLParser.swift index c98741eb38..df3685a82e 100644 --- a/Tests/Foundation/TestXMLParser.swift +++ b/Tests/Foundation/TestXMLParser.swift @@ -198,5 +198,46 @@ class TestXMLParser : XCTestCase { ElementNameChecker("noPrefix").check() ElementNameChecker("myPrefix:myLocalName").check() } - + + func testExternalEntity() throws { + class Delegate: XMLParserDelegateEventStream { + override func parserDidStartDocument(_ parser: XMLParser) { + // Start a child parser, updating `currentParser` to the child parser + // to ensure that `currentParser` won't be reset to `nil`, which would + // ignore any external entity related configuration. + let childParser = XMLParser(data: "".data(using: .utf8)!) + XCTAssertTrue(childParser.parse()) + super.parserDidStartDocument(parser) + } + } + try withTemporaryDirectory { dir, _ in + let greetingPath = dir.appendingPathComponent("greeting.xml") + try Data("".utf8).write(to: greetingPath) + let xml = """ + + + ]> + &greeting; + """ + + let parser = XMLParser(data: xml.data(using: .utf8)!) + // Explicitly disable external entity resolving + parser.externalEntityResolvingPolicy = .never + let delegate = Delegate() + parser.delegate = delegate + // The parse result changes depending on the libxml2 version + // because of the following libxml2 commit (shipped in libxml2 2.9.10): + // https://gitlab.gnome.org/GNOME/libxml2/-/commit/eddfbc38fa7e84ccd480eab3738e40d1b2c83979 + // So we don't check the parse result here. + _ = parser.parse() + XCTAssertEqual(delegate.events, [ + .startDocument, + .didStartElement("doc", nil, nil, [:]), + // Should not have parsed the external entity + .didEndElement("doc", nil, nil), + .endDocument, + ]) + } + } } From 9c03e2eded83ce7a1e1e24717af96b4c21e4d4d8 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 19 Sep 2024 04:16:20 +0000 Subject: [PATCH 145/198] CMake: Fix accidental variable expansion of `WASI` CMake recently introduced a new variable `WASI` to check if the target platform is WASI (https://gitlab.kitware.com/cmake/cmake/-/merge_requests/9659). However, the change led to `WASI` being expanded as a variable, which is not what we want in checking the platform name. To have compatibility with older and newer versions of CMake, we should quote the string `WASI` to prevent it from being expanded as a variable. --- CMakeLists.txt | 8 ++++---- Sources/CoreFoundation/CMakeLists.txt | 2 +- Sources/_CFXMLInterface/CMakeLists.txt | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index abecd29bd3..054b49e761 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,7 +64,7 @@ if(BUILD_SHARED_LIBS) endif() set(FOUNDATION_BUILD_NETWORKING_default ON) -if(CMAKE_SYSTEM_NAME STREQUAL WASI) +if(CMAKE_SYSTEM_NAME STREQUAL "WASI") # Networking is not supported on WASI set(FOUNDATION_BUILD_NETWORKING_default OFF) endif() @@ -133,7 +133,7 @@ endif() # System dependencies # We know libdispatch is always unavailable on WASI -if(NOT CMAKE_SYSTEM_NAME STREQUAL WASI) +if(NOT CMAKE_SYSTEM_NAME STREQUAL "WASI") find_package(LibRT) find_package(dispatch CONFIG) if(NOT dispatch_FOUND) @@ -170,7 +170,7 @@ list(APPEND _Foundation_common_build_flags "-Wno-switch" "-fblocks") -if(NOT CMAKE_SYSTEM_NAME STREQUAL WASI) +if(NOT CMAKE_SYSTEM_NAME STREQUAL "WASI") list(APPEND _Foundation_common_build_flags "-DDEPLOYMENT_ENABLE_LIBDISPATCH" "-DSWIFT_CORELIBS_FOUNDATION_HAS_THREADS") @@ -206,7 +206,7 @@ list(APPEND _Foundation_swift_build_flags "-Xfrontend" "-require-explicit-sendable") -if(CMAKE_SYSTEM_NAME STREQUAL WASI) +if(CMAKE_SYSTEM_NAME STREQUAL "WASI") # Enable wasi-libc emulation features set(WASI_EMULATION_DEFS _WASI_EMULATED_MMAN _WASI_EMULATED_SIGNAL _WASI_EMULATED_PROCESS_CLOCKS) foreach(def ${WASI_EMULATION_DEFS}) diff --git a/Sources/CoreFoundation/CMakeLists.txt b/Sources/CoreFoundation/CMakeLists.txt index 7ae617b497..9afac9e972 100644 --- a/Sources/CoreFoundation/CMakeLists.txt +++ b/Sources/CoreFoundation/CMakeLists.txt @@ -119,7 +119,7 @@ target_link_libraries(CoreFoundation _FoundationICU dispatch) -if(CMAKE_SYSTEM_NAME STREQUAL WASI) +if(CMAKE_SYSTEM_NAME STREQUAL "WASI") # On WASI, we use vendored BlocksRuntime instead of the one from libdispatch add_subdirectory(BlockRuntime) # Add BlocksRuntime object library to CoreFoundation static archive diff --git a/Sources/_CFXMLInterface/CMakeLists.txt b/Sources/_CFXMLInterface/CMakeLists.txt index 9ca0c27900..1a7144fd1a 100644 --- a/Sources/_CFXMLInterface/CMakeLists.txt +++ b/Sources/_CFXMLInterface/CMakeLists.txt @@ -33,7 +33,7 @@ target_link_libraries(_CFXMLInterface PRIVATE dispatch LibXml2::LibXml2) -if(CMAKE_SYSTEM_NAME STREQUAL WASI) +if(CMAKE_SYSTEM_NAME STREQUAL "WASI") target_link_libraries(_CFXMLInterface PRIVATE BlocksRuntime) endif() From d493cfbfa9c049fe74d51e5c76a48153980d2389 Mon Sep 17 00:00:00 2001 From: Paris Date: Fri, 20 Sep 2024 12:59:32 -0700 Subject: [PATCH 146/198] Delete CODE_OF_CONDUCT.md preparing for migration to /swiftlang we have an org wide code of conduct policy set at the root .github repo of /swiftlang that all repos will adhere to. this file present at the root means there is a different process than the rest of the org. --- CODE_OF_CONDUCT.md | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index ebaf5602df..0000000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,3 +0,0 @@ -# Code of Conduct - -The code of conduct for this project can be found at https://swift.org/community/#code-of-conduct From 6425c145e3c9b01de2759c5e1d6199845df3db29 Mon Sep 17 00:00:00 2001 From: Paris Date: Fri, 20 Sep 2024 15:24:19 -0700 Subject: [PATCH 147/198] Update CONTRIBUTING.md unifying the contributing guides a bit for swiftlang and removing the redundant license text from this doc --- CONTRIBUTING.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5c3dfa65df..077f4357e7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,10 +2,6 @@ Contributions to Foundation are welcome! This project follows the [contribution guidelines for the Swift project](https://swift.org/contributing/#contributing-code). If you are interested in contributing, please consult with our [status page](Docs/Status.md) to see what work remains to be done. A few additional details are outlined below. -## Licensing - -By submitting a pull request, you represent that you have the right to license your contribution to Apple and the community, and agree by submitting the patch that your contributions are licensed under the [Swift license](https://swift.org/LICENSE.txt). - ## Bug Reports From b70557a014249fa6b3625759bc89c7d9904add01 Mon Sep 17 00:00:00 2001 From: jiang7369 Date: Sun, 22 Sep 2024 19:24:19 +0800 Subject: [PATCH 148/198] Correct spelling mistake: manDocumentURL -> mainDocumentURL --- Sources/FoundationNetworking/HTTPCookieStorage.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/FoundationNetworking/HTTPCookieStorage.swift b/Sources/FoundationNetworking/HTTPCookieStorage.swift index 8881f59eee..8f78c6ca8c 100644 --- a/Sources/FoundationNetworking/HTTPCookieStorage.swift +++ b/Sources/FoundationNetworking/HTTPCookieStorage.swift @@ -311,7 +311,7 @@ open class HTTPCookieStorage: NSObject, @unchecked Sendable { if mainDocumentURL != nil && cookieAcceptPolicy == .onlyFromMainDocumentDomain { guard let mainDocumentHost = mainDocumentURL?.host?.lowercased() else { return } - //the url.host must be a suffix of manDocumentURL.host, this is based on Darwin's behaviour + //the url.host must be a suffix of mainDocumentURL.host, this is based on Darwin's behaviour guard mainDocumentHost.hasSuffix(urlHost) else { return } } From 7f0f8dad651a2a8f4ddd90c522f588ed620017a4 Mon Sep 17 00:00:00 2001 From: Jonathan Grynspan Date: Tue, 24 Sep 2024 15:57:40 -0400 Subject: [PATCH 149/198] Fix a test marked `@MainActor` but not `async`. SPM and swift-corelibs-xctest do not support main-actor-isolated tests unless they are marked `async` because the compilation stage that finds tests is not actor-aware. This test is preventing us from merging https://github.com/swiftlang/swift-package-manager/pull/7967. --- Tests/Foundation/TestURLSession.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Foundation/TestURLSession.swift b/Tests/Foundation/TestURLSession.swift index 29b71407c6..91dd6847c6 100644 --- a/Tests/Foundation/TestURLSession.swift +++ b/Tests/Foundation/TestURLSession.swift @@ -410,7 +410,7 @@ final class TestURLSession: LoopbackServerTest, @unchecked Sendable { } } - func test_taskCopy() { + func test_taskCopy() async { let url = URL(string: "http://127.0.0.1:\(TestURLSession.serverPort)/Nepal")! let session = URLSession(configuration: URLSessionConfiguration.default, delegate: nil, From 001fb5ce277ea28bdfc0b649dd801c20ed30cb2c Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Sat, 15 Jun 2024 23:47:10 -0700 Subject: [PATCH 150/198] Add a thread-safe implementation of Process.currentDirectoryURL posix_spawn_file_actions_addchdir_np is the official way to set the working directory of a spawned process and is supported on both macOS and glibc (Linux, etc.). This makes Process.currentDirectoryURL thread-safe, as the current approach will result in the working directory being nondeterministically assigned when spawning processes across multiple threads, using different working directories. --- Sources/CoreFoundation/CFPlatform.c | 29 +++++++++++++++++++ .../include/ForSwiftFoundationOnly.h | 1 + Sources/Foundation/Process.swift | 14 ++------- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/Sources/CoreFoundation/CFPlatform.c b/Sources/CoreFoundation/CFPlatform.c index 38d8c5278e..b13b778c32 100644 --- a/Sources/CoreFoundation/CFPlatform.c +++ b/Sources/CoreFoundation/CFPlatform.c @@ -57,6 +57,10 @@ #define kCFPlatformInterfaceStringEncoding CFStringGetSystemEncoding() #endif +#ifndef __GLIBC_PREREQ +#define __GLIBC_PREREQ(maj, min) 0 +#endif + extern void __CFGetUGIDs(uid_t *euid, gid_t *egid); #if TARGET_OS_MAC @@ -2274,6 +2278,31 @@ CF_EXPORT int _CFPosixSpawnFileActionsAddClose(_CFPosixSpawnFileActionsRef file_ return posix_spawn_file_actions_addclose((posix_spawn_file_actions_t *)file_actions, filedes); } +CF_EXPORT int _CFPosixSpawnFileActionsChdir(_CFPosixSpawnFileActionsRef file_actions, const char *path) { + #if defined(__GLIBC__) && !__GLIBC_PREREQ(2, 29) + // Glibc versions prior to 2.29 don't support posix_spawn_file_actions_addchdir_np, impacting: + // - Amazon Linux 2 (EoL mid-2025) + return ENOSYS; + #elif defined(__GLIBC__) || TARGET_OS_DARWIN || defined(__FreeBSD__) || defined(__ANDROID__) + // Pre-standard posix_spawn_file_actions_addchdir_np version available in: + // - Solaris 11.3 (October 2015) + // - Glibc 2.29 (February 2019) + // - macOS 10.15 (October 2019) + // - musl 1.1.24 (October 2019) + // - FreeBSD 13.1 (May 2022) + // - Android 14 (October 2023) + return posix_spawn_file_actions_addchdir_np((posix_spawn_file_actions_t *)file_actions, path); + #else + // Standardized posix_spawn_file_actions_addchdir version (POSIX.1-2024, June 2024) available in: + // - Solaris 11.4 (August 2018) + // - NetBSD 10.0 (March 2024) + // Currently missing as of: + // - OpenBSD 7.5 (April 2024) + // - QNX 8 (December 2023) + return posix_spawn_file_actions_addchdir((posix_spawn_file_actions_t *)file_actions, path); + #endif +} + CF_EXPORT int _CFPosixSpawn(pid_t *_CF_RESTRICT pid, const char *_CF_RESTRICT path, _CFPosixSpawnFileActionsRef file_actions, _CFPosixSpawnAttrRef _Nullable _CF_RESTRICT attrp, char *_Nullable const argv[_Nullable _CF_RESTRICT], char *_Nullable const envp[_Nullable _CF_RESTRICT]) { return posix_spawn(pid, path, (posix_spawn_file_actions_t *)file_actions, (posix_spawnattr_t *)attrp, argv, envp); } diff --git a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h index a2ba56cd95..f3c7f51bb2 100644 --- a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h @@ -725,6 +725,7 @@ CF_EXPORT int _CFPosixSpawnFileActionsDestroy(_CFPosixSpawnFileActionsRef file_a CF_EXPORT void _CFPosixSpawnFileActionsDealloc(_CFPosixSpawnFileActionsRef file_actions); CF_EXPORT int _CFPosixSpawnFileActionsAddDup2(_CFPosixSpawnFileActionsRef file_actions, int filedes, int newfiledes); CF_EXPORT int _CFPosixSpawnFileActionsAddClose(_CFPosixSpawnFileActionsRef file_actions, int filedes); +CF_EXPORT int _CFPosixSpawnFileActionsChdir(_CFPosixSpawnFileActionsRef file_actions, const char *path); #ifdef __cplusplus CF_EXPORT int _CFPosixSpawn(pid_t *_CF_RESTRICT pid, const char *_CF_RESTRICT path, _CFPosixSpawnFileActionsRef file_actions, _CFPosixSpawnAttrRef _Nullable _CF_RESTRICT attrp, char *const argv[], char *const envp[]); #else diff --git a/Sources/Foundation/Process.swift b/Sources/Foundation/Process.swift index ee35c23a33..de2f2e43fd 100644 --- a/Sources/Foundation/Process.swift +++ b/Sources/Foundation/Process.swift @@ -925,6 +925,9 @@ open class Process: NSObject, @unchecked Sendable { for fd in addclose.filter({ $0 >= 0 }) { try _throwIfPosixError(_CFPosixSpawnFileActionsAddClose(fileActions, fd)) } + if let dir = currentDirectoryURL?.path { + try _throwIfPosixError(_CFPosixSpawnFileActionsChdir(fileActions, dir)) + } #if canImport(Darwin) || os(Android) || os(OpenBSD) var spawnAttrs: posix_spawnattr_t? = nil @@ -947,17 +950,6 @@ open class Process: NSObject, @unchecked Sendable { } #endif - let fileManager = FileManager() - let previousDirectoryPath = fileManager.currentDirectoryPath - if let dir = currentDirectoryURL?.path, !fileManager.changeCurrentDirectoryPath(dir) { - throw _NSErrorWithErrno(errno, reading: true, url: currentDirectoryURL) - } - - defer { - // Reset the previous working directory path. - _ = fileManager.changeCurrentDirectoryPath(previousDirectoryPath) - } - // Launch var pid = pid_t() From 4623e8eebc4a6c577dbb06fa60da75c41b1b437a Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Sat, 28 Sep 2024 16:29:38 -0700 Subject: [PATCH 151/198] Restore thread-unsafe fallback for setting the Process working directory Swift still needs to support Amazon Linux 2 until it EoLs in mid-2025. So restore the thread-unsafe fallback for systems with glibc older than version 2.29, which was removed in #4981. --- Sources/Foundation/Process.swift | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/Sources/Foundation/Process.swift b/Sources/Foundation/Process.swift index de2f2e43fd..758dd1dfd4 100644 --- a/Sources/Foundation/Process.swift +++ b/Sources/Foundation/Process.swift @@ -925,8 +925,15 @@ open class Process: NSObject, @unchecked Sendable { for fd in addclose.filter({ $0 >= 0 }) { try _throwIfPosixError(_CFPosixSpawnFileActionsAddClose(fileActions, fd)) } + let useFallbackChdir: Bool if let dir = currentDirectoryURL?.path { - try _throwIfPosixError(_CFPosixSpawnFileActionsChdir(fileActions, dir)) + let chdirResult = _CFPosixSpawnFileActionsChdir(fileActions, dir) + useFallbackChdir = chdirResult == ENOSYS + if !useFallbackChdir { + try _throwIfPosixError(chdirResult) + } + } else { + useFallbackChdir = false } #if canImport(Darwin) || os(Android) || os(OpenBSD) @@ -950,6 +957,27 @@ open class Process: NSObject, @unchecked Sendable { } #endif + // Unsafe fallback for systems missing posix_spawn_file_actions_addchdir[_np] + // This includes Glibc versions older than 2.29 such as on Amazon Linux 2 + let previousDirectoryPath: String? + if useFallbackChdir { + let fileManager = FileManager() + previousDirectoryPath = fileManager.currentDirectoryPath + if let dir = currentDirectoryURL?.path, !fileManager.changeCurrentDirectoryPath(dir) { + throw _NSErrorWithErrno(errno, reading: true, url: currentDirectoryURL) + } + } else { + previousDirectoryPath = nil + } + + defer { + if let previousDirectoryPath { + // Reset the previous working directory path. + let fileManager = FileManager() + _ = fileManager.changeCurrentDirectoryPath(previousDirectoryPath) + } + } + // Launch var pid = pid_t() From ebc24af9a027693171b341b97ea0c658bcdb2112 Mon Sep 17 00:00:00 2001 From: LordBurtz <71921875+LordBurtz@users.noreply.github.com> Date: Thu, 3 Oct 2024 01:44:02 +0200 Subject: [PATCH 152/198] Update FileManager.swift to include bracket in save message (#5093) When attempting to save a document multiple times the closing bracket was missing in the printed message This fixes [Issue 953(}https://github.com/swiftlang/swift-foundation/issues/953) --- Sources/Foundation/FileManager.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Foundation/FileManager.swift b/Sources/Foundation/FileManager.swift index a5d75820df..5a68934853 100644 --- a/Sources/Foundation/FileManager.swift +++ b/Sources/Foundation/FileManager.swift @@ -151,7 +151,7 @@ extension FileManager { if attempt == 0 { return "(A Document Being Saved By \(name))" } else { - return "(A Document Being Saved By \(name) \(attempt + 1)" + return "(A Document Being Saved By \(name) \(attempt + 1))" } } From 6304081f48e5a6dac7a7acd219f9707d3537740a Mon Sep 17 00:00:00 2001 From: Alastair Houghton Date: Fri, 4 Oct 2024 14:33:07 +0100 Subject: [PATCH 153/198] [Musl] Add back missing autolink arguments, fix CFPosixSpawnFileActionsChdir. We need a handful more autolink arguments; these were in a previous PR, but seem to have gone missing at some point during the re-core. Additionally, Musl has the `posix_spawn_file_actions_addchdir_np()` function rather than the non-`_np()` version. Fixes #5089. --- CMakeLists.txt | 1 + Sources/CoreFoundation/CFPlatform.c | 2 +- Sources/FoundationNetworking/CMakeLists.txt | 11 ++++++++++- Sources/FoundationXML/CMakeLists.txt | 7 +++++++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 054b49e761..fa842040f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,6 +57,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift) option(BUILD_SHARED_LIBS "build shared libraries" ON) +option(BUILD_FULLY_STATIC "build fully static" NO) # Optionally build tools (on by default) but only when building shared libraries if(BUILD_SHARED_LIBS) diff --git a/Sources/CoreFoundation/CFPlatform.c b/Sources/CoreFoundation/CFPlatform.c index b13b778c32..69631185ba 100644 --- a/Sources/CoreFoundation/CFPlatform.c +++ b/Sources/CoreFoundation/CFPlatform.c @@ -2283,7 +2283,7 @@ CF_EXPORT int _CFPosixSpawnFileActionsChdir(_CFPosixSpawnFileActionsRef file_act // Glibc versions prior to 2.29 don't support posix_spawn_file_actions_addchdir_np, impacting: // - Amazon Linux 2 (EoL mid-2025) return ENOSYS; - #elif defined(__GLIBC__) || TARGET_OS_DARWIN || defined(__FreeBSD__) || defined(__ANDROID__) + #elif defined(__GLIBC__) || TARGET_OS_DARWIN || defined(__FreeBSD__) || defined(__ANDROID__) || defined(__musl__) // Pre-standard posix_spawn_file_actions_addchdir_np version available in: // - Solaris 11.3 (October 2015) // - Glibc 2.29 (February 2019) diff --git a/Sources/FoundationNetworking/CMakeLists.txt b/Sources/FoundationNetworking/CMakeLists.txt index 90e5ddeef1..6ad40968dc 100644 --- a/Sources/FoundationNetworking/CMakeLists.txt +++ b/Sources/FoundationNetworking/CMakeLists.txt @@ -61,7 +61,16 @@ if(NOT BUILD_SHARED_LIBS) target_compile_options(FoundationNetworking PRIVATE "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend curl>") target_compile_options(FoundationNetworking PRIVATE - "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend swiftSynchronization>") + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend swiftSynchronization>") + + if(BUILD_FULLY_STATIC) + target_compile_options(FoundationNetworking + PRIVATE + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend crypto>" + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend ssl>" + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend z>") + endif() + endif() set_target_properties(FoundationNetworking PROPERTIES diff --git a/Sources/FoundationXML/CMakeLists.txt b/Sources/FoundationXML/CMakeLists.txt index 72021afb38..5c8a0fb301 100644 --- a/Sources/FoundationXML/CMakeLists.txt +++ b/Sources/FoundationXML/CMakeLists.txt @@ -37,6 +37,13 @@ if(NOT BUILD_SHARED_LIBS) "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend xml2>") target_compile_options(FoundationXML PRIVATE "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend swiftSynchronization>") + + if(BUILD_FULLY_STATIC) + target_compile_options(FoundationXML + PRIVATE + "SHELL:$<$:-Xfrontend -public-autolink-library -Xfrontend z>") + endif() + endif() set_target_properties(FoundationXML PROPERTIES From 301bafedf53d5b9e748c6393809057ace1dd8f3a Mon Sep 17 00:00:00 2001 From: Alastair Houghton Date: Fri, 11 Oct 2024 19:06:02 +0100 Subject: [PATCH 154/198] [CFXMLInterface] Remove spurious include path. (#5101) The include path for libxml2 should be being set automatically by CMake because of the `target_link_libraries()` call; there is no need to add it explicitly. rdar://137567628 --- Sources/_CFXMLInterface/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Sources/_CFXMLInterface/CMakeLists.txt b/Sources/_CFXMLInterface/CMakeLists.txt index 1a7144fd1a..80c7520594 100644 --- a/Sources/_CFXMLInterface/CMakeLists.txt +++ b/Sources/_CFXMLInterface/CMakeLists.txt @@ -19,8 +19,7 @@ target_include_directories(_CFXMLInterface include ../CoreFoundation/include PRIVATE - ../CoreFoundation/internalInclude - ${LIBXML2_INCLUDE_DIR}) + ../CoreFoundation/internalInclude) target_compile_options(_CFXMLInterface INTERFACE "$<$:SHELL:-Xcc -fmodule-map-file=${CMAKE_CURRENT_SOURCE_DIR}/../CoreFoundation/include/module.modulemap>" From f1b2fb27547022677f92d8d8749e7c0c417f3af4 Mon Sep 17 00:00:00 2001 From: Jason Toffaletti Date: Tue, 15 Oct 2024 19:10:59 +0200 Subject: [PATCH 155/198] Fix bounds checking error when parsing WWW-Authenticate field (#5103) * add TestURLProtectionSpace.test_createWithInvalidAuth to test parsing an invalid www-authenticate field * add bounds checking to rangeOfTokenPrefix. Fixes Fatal error: Substring index is out of bounds --- .../URLSession/HTTP/HTTPMessage.swift | 2 +- Tests/Foundation/TestURLProtectionSpace.swift | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift b/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift index fae1e612d4..d31b7a4951 100644 --- a/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift +++ b/Sources/FoundationNetworking/URLSession/HTTP/HTTPMessage.swift @@ -433,7 +433,7 @@ private extension String.UnicodeScalarView.SubSequence { var rangeOfTokenPrefix: Range? { guard !isEmpty else { return nil } var end = startIndex - while self[end].isValidMessageToken { + while end != self.endIndex && self[end].isValidMessageToken { end = self.index(after: end) } guard end != startIndex else { return nil } diff --git a/Tests/Foundation/TestURLProtectionSpace.swift b/Tests/Foundation/TestURLProtectionSpace.swift index 9ffbe11fae..83c5f22afa 100644 --- a/Tests/Foundation/TestURLProtectionSpace.swift +++ b/Tests/Foundation/TestURLProtectionSpace.swift @@ -203,5 +203,22 @@ class TestURLProtectionSpace : XCTestCase { XCTAssertEqual(param8_2_2.name, "param") XCTAssertEqual(param8_2_2.value, "") } + + func test_createWithInvalidAuth() throws { + let headerFields1 = [ + "Server": "Microsoft-IIS/10.0", + "request-id": "c71c2202-4013-4d64-9319-d40aba6bbe5c", + "WWW-Authenticate": "fdsfds", + "X-Powered-By": "ASP.NET", + "X-FEServer": "AM6PR0502CA0062", + "Date": "Sat, 04 Apr 2020 16:19:39 GMT", + "Content-Length": "0", + ] + let response1 = try XCTUnwrap(HTTPURLResponse(url: URL(string: "https://outlook.office365.com/Microsoft-Server-ActiveSync")!, + statusCode: 401, + httpVersion: "HTTP/1.1", + headerFields: headerFields1)) + XCTAssertNil(URLProtectionSpace.create(with: response1)) + } #endif } From cb6b2fa46992e04ae3f77fae30e2d86cebd2b440 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Tue, 15 Oct 2024 14:12:10 -0700 Subject: [PATCH 156/198] Fix a leak when mutating CharacterSet by moving away from _SwiftNSCharacterSet wrapper (#5107) rdar://137806932 --- Sources/Foundation/CharacterSet.swift | 415 ++++++---------------- Sources/Foundation/NSCFCharacterSet.swift | 4 + 2 files changed, 110 insertions(+), 309 deletions(-) diff --git a/Sources/Foundation/CharacterSet.swift b/Sources/Foundation/CharacterSet.swift index 0faeceef29..b8e105ab75 100644 --- a/Sources/Foundation/CharacterSet.swift +++ b/Sources/Foundation/CharacterSet.swift @@ -18,135 +18,48 @@ private func _utfRangeToNSRange(_ inRange : ClosedRange) -> NSRan return NSRange(location: Int(inRange.lowerBound.value), length: Int(inRange.upperBound.value - inRange.lowerBound.value + 1)) } -internal final class _SwiftNSCharacterSet : NSCharacterSet, _SwiftNativeFoundationType { - internal typealias ImmutableType = NSCharacterSet - internal typealias MutableType = NSMutableCharacterSet - - fileprivate var __wrapped : _MutableUnmanagedWrapper - - init(immutableObject: AnyObject) { - // Take ownership. - __wrapped = .Immutable(Unmanaged.passRetained(_unsafeReferenceCast(immutableObject, to: ImmutableType.self))) - super.init() - } - - init(mutableObject: AnyObject) { - // Take ownership. - __wrapped = .Mutable(Unmanaged.passRetained(_unsafeReferenceCast(mutableObject, to: MutableType.self))) - super.init() - } - - internal required init(unmanagedImmutableObject: Unmanaged) { - // Take ownership. - __wrapped = .Immutable(unmanagedImmutableObject) - - super.init() - } - - internal required init(unmanagedMutableObject: Unmanaged) { - // Take ownership. - __wrapped = .Mutable(unmanagedMutableObject) - - super.init() - } - - convenience required init(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - deinit { - releaseWrappedObject() - } - - - override func copy(with zone: NSZone? = nil) -> Any { - return _mapUnmanaged { $0.copy(with: zone) } - } - - override func mutableCopy(with zone: NSZone? = nil) -> Any { - return _mapUnmanaged { $0.mutableCopy(with: zone) } - } - - public override var classForCoder: AnyClass { - return NSCharacterSet.self - } - - override var bitmapRepresentation: Data { - return _mapUnmanaged { $0.bitmapRepresentation } - } - - override var inverted : CharacterSet { - return _mapUnmanaged { $0.inverted } - } - - override func hasMemberInPlane(_ thePlane: UInt8) -> Bool { - return _mapUnmanaged {$0.hasMemberInPlane(thePlane) } - } - - override func characterIsMember(_ member: unichar) -> Bool { - return _mapUnmanaged { $0.characterIsMember(member) } - } - - override func longCharacterIsMember(_ member: UInt32) -> Bool { - return _mapUnmanaged { $0.longCharacterIsMember(member) } - } - - override func isSuperset(of other: CharacterSet) -> Bool { - return _mapUnmanaged { $0.isSuperset(of: other) } - } - - override var _cfObject: CFType { - // We cannot inherit super's unsafeBitCast(self, to: CFType.self) here, because layout of _SwiftNSCharacterSet - // is not compatible with CFCharacterSet. We need to bitcast the underlying NSCharacterSet instead. - return _mapUnmanaged { unsafeBitCast($0, to: CFType.self) } - } -} - /** A `CharacterSet` represents a set of Unicode-compliant characters. Foundation types use `CharacterSet` to group characters together for searching operations, so that they can find any of a particular set of characters during a search. This type provides "copy-on-write" behavior, and is also bridged to the Objective-C `NSCharacterSet` class. */ -public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgebra, Sendable, _MutablePairBoxing { +public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgebra, Sendable { public typealias ReferenceType = NSCharacterSet - internal typealias SwiftNSWrapping = _SwiftNSCharacterSet - internal typealias ImmutableType = SwiftNSWrapping.ImmutableType - internal typealias MutableType = SwiftNSWrapping.MutableType - - internal nonisolated(unsafe) var _wrapped : _SwiftNSCharacterSet + // This may be either an NSCharacterSet or an NSMutableCharacterSet (dynamically) + internal nonisolated(unsafe) var _wrapped : NSCharacterSet // MARK: Init methods internal init(_bridged characterSet: NSCharacterSet) { // We must copy the input because it might be mutable; just like storing a value type in ObjC - _wrapped = _SwiftNSCharacterSet(immutableObject: characterSet.copy() as! NSObject) + _wrapped = characterSet.copy() as! NSCharacterSet } /// Initialize an empty instance. public init() { - _wrapped = _SwiftNSCharacterSet(immutableObject: NSCharacterSet()) + _wrapped = NSCharacterSet() } /// Initialize with a range of integers. /// /// It is the caller's responsibility to ensure that the values represent valid `UnicodeScalar` values, if that is what is desired. public init(charactersIn range: Range) { - _wrapped = _SwiftNSCharacterSet(immutableObject: NSCharacterSet(range: _utfRangeToNSRange(range))) + _wrapped = NSCharacterSet(range: _utfRangeToNSRange(range)) } /// Initialize with a closed range of integers. /// /// It is the caller's responsibility to ensure that the values represent valid `UnicodeScalar` values, if that is what is desired. public init(charactersIn range: ClosedRange) { - _wrapped = _SwiftNSCharacterSet(immutableObject: NSCharacterSet(range: _utfRangeToNSRange(range))) + _wrapped = NSCharacterSet(range: _utfRangeToNSRange(range)) } /// Initialize with the characters in the given string. /// /// - parameter string: The string content to inspect for characters. public init(charactersIn string: String) { - _wrapped = _SwiftNSCharacterSet(immutableObject: NSCharacterSet(charactersIn: string)) + _wrapped = NSCharacterSet(charactersIn: string) } /// Initialize with a bitmap representation. @@ -154,7 +67,7 @@ public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgeb /// This method is useful for creating a character set object with data from a file or other external data source. /// - parameter data: The bitmap representation. public init(bitmapRepresentation data: Data) { - _wrapped = _SwiftNSCharacterSet(immutableObject: NSCharacterSet(bitmapRepresentation: data)) + _wrapped = NSCharacterSet(bitmapRepresentation: data) } #if !os(WASI) @@ -164,7 +77,7 @@ public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgeb /// - parameter file: The file to read. public init?(contentsOfFile file: String) { if let interior = NSCharacterSet(contentsOfFile: file) { - _wrapped = _SwiftNSCharacterSet(immutableObject: interior) + _wrapped = interior } else { return nil } @@ -172,19 +85,15 @@ public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgeb #endif public func hash(into hasher: inout Hasher) { - hasher.combine(_mapUnmanaged { $0 }) + _wrapped.hash(into: &hasher) } public var description: String { - return _mapUnmanaged { $0.description } + _wrapped.description } public var debugDescription: String { - return _mapUnmanaged { $0.debugDescription } - } - - private init(reference: NSCharacterSet) { - _wrapped = _SwiftNSCharacterSet(immutableObject: reference) + _wrapped.debugDescription } // MARK: Static functions @@ -300,31 +209,57 @@ public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgeb /// Returns a representation of the `CharacterSet` in binary format. public var bitmapRepresentation: Data { - return _mapUnmanaged { $0.bitmapRepresentation } + _wrapped.bitmapRepresentation } /// Returns an inverted copy of the receiver. public var inverted : CharacterSet { - return _mapUnmanaged { $0.inverted } + _wrapped.inverted } /// Returns true if the `CharacterSet` has a member in the specified plane. /// /// This method makes it easier to find the plane containing the members of the current character set. The Basic Multilingual Plane (BMP) is plane 0. public func hasMember(inPlane plane: UInt8) -> Bool { - return _mapUnmanaged { $0.hasMemberInPlane(plane) } + _wrapped.hasMemberInPlane(plane) } // MARK: Mutable functions + private mutating func _add(charactersIn nsRange: NSRange) { + if !isKnownUniquelyReferenced(&_wrapped) { + let copy = _wrapped.mutableCopy() as! NSMutableCharacterSet + copy.addCharacters(in: nsRange) + _wrapped = copy + } else if let mutable = _wrapped as? NSMutableCharacterSet { + mutable.addCharacters(in: nsRange) + } else { + let copy = _wrapped.mutableCopy() as! NSMutableCharacterSet + copy.addCharacters(in: nsRange) + _wrapped = copy + } + } + + private mutating func _remove(charactersIn nsRange: NSRange) { + if !isKnownUniquelyReferenced(&_wrapped) { + let copy = _wrapped.mutableCopy() as! NSMutableCharacterSet + copy.removeCharacters(in: nsRange) + _wrapped = copy + } else if let mutable = _wrapped as? NSMutableCharacterSet { + mutable.removeCharacters(in: nsRange) + } else { + let copy = _wrapped.mutableCopy() as! NSMutableCharacterSet + copy.removeCharacters(in: nsRange) + _wrapped = copy + } + } + /// Insert a range of integer values in the `CharacterSet`. /// /// It is the caller's responsibility to ensure that the values represent valid `UnicodeScalar` values, if that is what is desired. public mutating func insert(charactersIn range: Range) { let nsRange = _utfRangeToNSRange(range) - _applyUnmanagedMutation { - $0.addCharacters(in: nsRange) - } + _add(charactersIn: nsRange) } /// Insert a closed range of integer values in the `CharacterSet`. @@ -332,44 +267,64 @@ public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgeb /// It is the caller's responsibility to ensure that the values represent valid `UnicodeScalar` values, if that is what is desired. public mutating func insert(charactersIn range: ClosedRange) { let nsRange = _utfRangeToNSRange(range) - _applyUnmanagedMutation { - $0.addCharacters(in: nsRange) - } + _add(charactersIn: nsRange) } /// Remove a range of integer values from the `CharacterSet`. public mutating func remove(charactersIn range: Range) { let nsRange = _utfRangeToNSRange(range) - _applyUnmanagedMutation { - $0.removeCharacters(in: nsRange) - } + _remove(charactersIn: nsRange) } /// Remove a closed range of integer values from the `CharacterSet`. public mutating func remove(charactersIn range: ClosedRange) { let nsRange = _utfRangeToNSRange(range) - _applyUnmanagedMutation { - $0.removeCharacters(in: nsRange) - } + _remove(charactersIn: nsRange) } /// Insert the values from the specified string into the `CharacterSet`. public mutating func insert(charactersIn string: String) { - _applyUnmanagedMutation { - $0.addCharacters(in: string) + if !isKnownUniquelyReferenced(&_wrapped) { + let copy = _wrapped.mutableCopy() as! NSMutableCharacterSet + copy.addCharacters(in: string) + _wrapped = copy + } else if let mutable = _wrapped as? NSMutableCharacterSet { + mutable.addCharacters(in: string) + } else { + let copy = _wrapped.mutableCopy() as! NSMutableCharacterSet + copy.addCharacters(in: string) + _wrapped = copy } } /// Remove the values from the specified string from the `CharacterSet`. public mutating func remove(charactersIn string: String) { - _applyUnmanagedMutation { - $0.removeCharacters(in: string) + if !isKnownUniquelyReferenced(&_wrapped) { + let copy = _wrapped.mutableCopy() as! NSMutableCharacterSet + copy.removeCharacters(in: string) + _wrapped = copy + } else if let mutable = _wrapped as? NSMutableCharacterSet { + mutable.removeCharacters(in: string) + } else { + let copy = _wrapped.mutableCopy() as! NSMutableCharacterSet + copy.removeCharacters(in: string) + _wrapped = copy } } /// Invert the contents of the `CharacterSet`. public mutating func invert() { - _applyUnmanagedMutation { $0.invert() } + if !isKnownUniquelyReferenced(&_wrapped) { + let copy = _wrapped.mutableCopy() as! NSMutableCharacterSet + copy.invert() + _wrapped = copy + } else if let mutable = _wrapped as? NSMutableCharacterSet { + mutable.invert() + } else { + let copy = _wrapped.mutableCopy() as! NSMutableCharacterSet + copy.invert() + _wrapped = copy + } } // ----- @@ -382,9 +337,7 @@ public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgeb @discardableResult public mutating func insert(_ character: UnicodeScalar) -> (inserted: Bool, memberAfterInsert: UnicodeScalar) { let nsRange = NSRange(location: Int(character.value), length: 1) - _applyUnmanagedMutation { - $0.addCharacters(in: nsRange) - } + _add(charactersIn: nsRange) // TODO: This should probably return the truth, but figuring it out requires two calls into NSCharacterSet return (true, character) } @@ -395,9 +348,7 @@ public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgeb @discardableResult public mutating func update(with character: UnicodeScalar) -> UnicodeScalar? { let nsRange = NSRange(location: Int(character.value), length: 1) - _applyUnmanagedMutation { - $0.addCharacters(in: nsRange) - } + _add(charactersIn: nsRange) // TODO: This should probably return the truth, but figuring it out requires two calls into NSCharacterSet return character } @@ -411,15 +362,13 @@ public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgeb // TODO: Add method to NSCharacterSet to do this in one call let result : UnicodeScalar? = contains(character) ? character : nil let r = NSRange(location: Int(character.value), length: 1) - _applyUnmanagedMutation { - $0.removeCharacters(in: r) - } + _remove(charactersIn: r) return result } /// Test for membership of a particular `UnicodeScalar` in the `CharacterSet`. public func contains(_ member: UnicodeScalar) -> Bool { - return _mapUnmanaged { $0.longCharacterIsMember(member.value) } + _wrapped.longCharacterIsMember(member.value) } /// Returns a union of the `CharacterSet` with another `CharacterSet`. @@ -432,7 +381,17 @@ public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgeb /// Sets the value to a union of the `CharacterSet` with another `CharacterSet`. public mutating func formUnion(_ other: CharacterSet) { - _applyUnmanagedMutation { $0.formUnion(with: other) } + if !isKnownUniquelyReferenced(&_wrapped) { + let copy = _wrapped.mutableCopy() as! NSMutableCharacterSet + copy.formUnion(with: other) + _wrapped = copy + } else if let mutable = _wrapped as? NSMutableCharacterSet { + mutable.formUnion(with: other) + } else { + let copy = _wrapped.mutableCopy() as! NSMutableCharacterSet + copy.formUnion(with: other) + _wrapped = copy + } } /// Returns an intersection of the `CharacterSet` with another `CharacterSet`. @@ -445,8 +404,16 @@ public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgeb /// Sets the value to an intersection of the `CharacterSet` with another `CharacterSet`. public mutating func formIntersection(_ other: CharacterSet) { - _applyUnmanagedMutation { - $0.formIntersection(with: other) + if !isKnownUniquelyReferenced(&_wrapped) { + let copy = _wrapped.mutableCopy() as! NSMutableCharacterSet + copy.formIntersection(with: other) + _wrapped = copy + } else if let mutable = _wrapped as? NSMutableCharacterSet { + mutable.formIntersection(with: other) + } else { + let copy = _wrapped.mutableCopy() as! NSMutableCharacterSet + copy.formIntersection(with: other) + _wrapped = copy } } @@ -472,12 +439,12 @@ public struct CharacterSet : ReferenceConvertible, Equatable, Hashable, SetAlgeb /// Returns true if `self` is a superset of `other`. public func isSuperset(of other: CharacterSet) -> Bool { - return _mapUnmanaged { $0.isSuperset(of: other) } + _wrapped.isSuperset(of: other) } /// Returns true if the two `CharacterSet`s are equal. public static func ==(lhs : CharacterSet, rhs: CharacterSet) -> Bool { - return lhs._mapUnmanaged { $0.isEqual(rhs) } + lhs._wrapped.isEqual(rhs._wrapped) } } @@ -528,173 +495,3 @@ extension CharacterSet : Codable { try container.encode(self.bitmapRepresentation, forKey: .bitmap) } } - -// MARK: - Boxing protocols -// Only used by CharacterSet at this time - -fileprivate enum _MutableUnmanagedWrapper where MutableType : NSMutableCopying { - case Immutable(Unmanaged) - case Mutable(Unmanaged) -} - -fileprivate protocol _SwiftNativeFoundationType: AnyObject { - associatedtype ImmutableType : NSObject - associatedtype MutableType : NSObject, NSMutableCopying - var __wrapped : _MutableUnmanagedWrapper { get } - - init(unmanagedImmutableObject: Unmanaged) - init(unmanagedMutableObject: Unmanaged) - - func mutableCopy(with zone : NSZone) -> Any - - func hash(into hasher: inout Hasher) - var hashValue: Int { get } - - var description: String { get } - var debugDescription: String { get } - - func releaseWrappedObject() -} - -extension _SwiftNativeFoundationType { - - @inline(__always) - func _mapUnmanaged(_ whatToDo : (ImmutableType) throws -> ReturnType) rethrows -> ReturnType { - defer { _fixLifetime(self) } - - switch __wrapped { - case .Immutable(let i): - return try i._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo($0) - } - case .Mutable(let m): - return try m._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo(_unsafeReferenceCast($0, to: ImmutableType.self)) - } - } - } - - func releaseWrappedObject() { - switch __wrapped { - case .Immutable(let i): - i.release() - case .Mutable(let m): - m.release() - } - } - - func mutableCopy(with zone : NSZone) -> Any { - return _mapUnmanaged { ($0 as NSObject).mutableCopy() } - } - - func hash(into hasher: inout Hasher) { - _mapUnmanaged { hasher.combine($0) } - } - - var hashValue: Int { - return _mapUnmanaged { return $0.hashValue } - } - - var description: String { - return _mapUnmanaged { return $0.description } - } - - var debugDescription: String { - return _mapUnmanaged { return $0.debugDescription } - } - - func isEqual(_ other: AnyObject) -> Bool { - return _mapUnmanaged { return $0.isEqual(other) } - } -} - -fileprivate protocol _MutablePairBoxing { - associatedtype WrappedSwiftNSType : _SwiftNativeFoundationType - var _wrapped : WrappedSwiftNSType { get set } -} - -extension _MutablePairBoxing { - @inline(__always) - func _mapUnmanaged(_ whatToDo : (WrappedSwiftNSType.ImmutableType) throws -> ReturnType) rethrows -> ReturnType { - // We are using Unmanaged. Make sure that the owning container class - // 'self' is guaranteed to be alive by extending the lifetime of 'self' - // to the end of the scope of this function. - // Note: At the time of this writing using withExtendedLifetime here - // instead of _fixLifetime causes different ARC pair matching behavior - // foiling optimization. This is why we explicitly use _fixLifetime here - // instead. - defer { _fixLifetime(self) } - - let unmanagedHandle = Unmanaged.passUnretained(_wrapped) - let wrapper = unmanagedHandle._withUnsafeGuaranteedRef { $0.__wrapped } - switch (wrapper) { - case .Immutable(let i): - return try i._withUnsafeGuaranteedRef { - return try whatToDo($0) - } - case .Mutable(let m): - return try m._withUnsafeGuaranteedRef { - return try whatToDo(_unsafeReferenceCast($0, to: WrappedSwiftNSType.ImmutableType.self)) - } - } - } - - @inline(__always) - mutating func _applyUnmanagedMutation(_ whatToDo : (WrappedSwiftNSType.MutableType) throws -> ReturnType) rethrows -> ReturnType { - // We are using Unmanaged. Make sure that the owning container class - // 'self' is guaranteed to be alive by extending the lifetime of 'self' - // to the end of the scope of this function. - // Note: At the time of this writing using withExtendedLifetime here - // instead of _fixLifetime causes different ARC pair matching behavior - // foiling optimization. This is why we explicitly use _fixLifetime here - // instead. - defer { _fixLifetime(self) } - - var unique = true - let _unmanagedHandle = Unmanaged.passUnretained(_wrapped) - let wrapper = _unmanagedHandle._withUnsafeGuaranteedRef { $0.__wrapped } - - // This check is done twice because: Value kept live for too long causing uniqueness check to fail - switch (wrapper) { - case .Immutable: - break - case .Mutable: - unique = isKnownUniquelyReferenced(&_wrapped) - } - - switch (wrapper) { - case .Immutable(let i): - // We need to become mutable; by creating a new instance we also become unique - let copy = Unmanaged.passRetained(i._withUnsafeGuaranteedRef { - return _unsafeReferenceCast($0.mutableCopy(), to: WrappedSwiftNSType.MutableType.self) } - ) - - // Be sure to set the var before calling out; otherwise references to the struct in the closure may be looking at the old value - _wrapped = WrappedSwiftNSType(unmanagedMutableObject: copy) - return try copy._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo($0) - } - case .Mutable(let m): - // Only create a new box if we are not uniquely referenced - if !unique { - let copy = Unmanaged.passRetained(m._withUnsafeGuaranteedRef { - return _unsafeReferenceCast($0.mutableCopy(), to: WrappedSwiftNSType.MutableType.self) - }) - _wrapped = WrappedSwiftNSType(unmanagedMutableObject: copy) - return try copy._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo($0) - } - } else { - return try m._withUnsafeGuaranteedRef { - _onFastPath() - return try whatToDo($0) - } - } - } - } -} - diff --git a/Sources/Foundation/NSCFCharacterSet.swift b/Sources/Foundation/NSCFCharacterSet.swift index bff3e8a00c..06351012fb 100644 --- a/Sources/Foundation/NSCFCharacterSet.swift +++ b/Sources/Foundation/NSCFCharacterSet.swift @@ -78,6 +78,10 @@ internal class _NSCFCharacterSet : NSMutableCharacterSet { override func invert() { CFCharacterSetInvert(_cfMutableObject) } + + override var classForCoder: AnyClass { + return NSCharacterSet.self + } } internal func _CFSwiftCharacterSetExpandedCFCharacterSet(_ cset: CFTypeRef) -> Unmanaged? { From bf7369a3909583c82f36b901917a92ea0d639a9f Mon Sep 17 00:00:00 2001 From: noriaki watanabe Date: Sat, 19 Oct 2024 00:50:52 +0900 Subject: [PATCH 157/198] Fixed an infinite loop caused by force casting NSError to CocoaError. (#5115) --- Sources/Foundation/NSError.swift | 4 +++- Tests/Foundation/TestNSError.swift | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index 6f21d3a03d..908d565a95 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -708,7 +708,9 @@ extension CocoaError: _ObjectiveCBridgeable { } public static func _forceBridgeFromObjectiveC(_ x: NSError, result: inout CocoaError?) { - result = _unconditionallyBridgeFromObjectiveC(x) + if !_conditionallyBridgeFromObjectiveC(x, result: &result) { + fatalError("Unable to bridge \(NSError.self) to \(self)") + } } public static func _conditionallyBridgeFromObjectiveC(_ x: NSError, result: inout CocoaError?) -> Bool { diff --git a/Tests/Foundation/TestNSError.swift b/Tests/Foundation/TestNSError.swift index d597fb0a99..5521895d3a 100644 --- a/Tests/Foundation/TestNSError.swift +++ b/Tests/Foundation/TestNSError.swift @@ -222,4 +222,10 @@ class TestCocoaError: XCTestCase { XCTAssertNotNil(e.underlying as? POSIXError) XCTAssertEqual(e.underlying as? POSIXError, POSIXError.init(.EACCES)) } + + func test_forceCast() { + let nsError = NSError(domain: NSCocoaErrorDomain, code: CocoaError.coderInvalidValue.rawValue) + let error = nsError as! CocoaError + XCTAssertEqual(error.errorCode, CocoaError.coderInvalidValue.rawValue) + } } From 64ba207d4dc2013557a03b816ac104ab862994f0 Mon Sep 17 00:00:00 2001 From: Alastair Houghton Date: Fri, 18 Oct 2024 17:23:55 +0100 Subject: [PATCH 158/198] [CoreFoundation] Replace use of strlcpy/strlcat with our own functions. (#5113) These can _use_ `strlcpy` and `strlcat` if we have them, but we mustn't go defining `strlcpy` or `strlcat` because (a) those names are reserved, and (b) doing so without explicitly testing for their presence runs the risk of build failures from trying to define them when they already exist. rdar://137567627 --- Sources/CoreFoundation/CFBigNumber.c | 2 +- Sources/CoreFoundation/CFFileUtilities.c | 24 ++++++++-------- Sources/CoreFoundation/CFLocale.c | 22 +++++++-------- Sources/CoreFoundation/CFLocaleIdentifier.c | 12 ++++---- Sources/CoreFoundation/CFPlatform.c | 4 +-- Sources/CoreFoundation/CFSocketStream.c | 6 ++-- Sources/CoreFoundation/CFString.c | 6 ++-- Sources/CoreFoundation/CFStringEncodings.c | 12 ++++---- Sources/CoreFoundation/CFSystemDirectories.c | 4 +-- Sources/CoreFoundation/CFURL.c | 2 +- .../internalInclude/CoreFoundation_Prefix.h | 28 +++++++++++-------- 11 files changed, 64 insertions(+), 58 deletions(-) diff --git a/Sources/CoreFoundation/CFBigNumber.c b/Sources/CoreFoundation/CFBigNumber.c index b55afb85cb..c3a045a92e 100644 --- a/Sources/CoreFoundation/CFBigNumber.c +++ b/Sources/CoreFoundation/CFBigNumber.c @@ -508,7 +508,7 @@ void _CFBigNumToCString(const _CFBigNum *vp, Boolean leading_zeros, Boolean lead char *s = tmp; while (*s == '0') s++; if (*s == 0) s--; // if tmp is all zeros, copy out at least one zero - strlcpy(buffer, s, buflen); + cf_strlcpy(buffer, s, buflen); } } diff --git a/Sources/CoreFoundation/CFFileUtilities.c b/Sources/CoreFoundation/CFFileUtilities.c index 6d34dcc005..c2ab0b9f1d 100644 --- a/Sources/CoreFoundation/CFFileUtilities.c +++ b/Sources/CoreFoundation/CFFileUtilities.c @@ -458,9 +458,9 @@ CF_PRIVATE CFMutableArrayRef _CFCreateContentsOfDirectory(CFAllocatorRef alloc, // Ugh; must stat. char subdirPath[CFMaxPathLength]; struct statinfo statBuf; - strlcpy(subdirPath, dirPath, sizeof(subdirPath)); - strlcat(subdirPath, "/", sizeof(subdirPath)); - strlcat(subdirPath, dp->d_name, sizeof(subdirPath)); + cf_strlcpy(subdirPath, dirPath, sizeof(subdirPath)); + cf_strlcat(subdirPath, "/", sizeof(subdirPath)); + cf_strlcat(subdirPath, dp->d_name, sizeof(subdirPath)); if (stat(subdirPath, &statBuf) == 0) { isDir = ((statBuf.st_mode & S_IFMT) == S_IFDIR); } @@ -1040,7 +1040,7 @@ CF_PRIVATE void _CFIterateDirectory(CFStringRef directoryPath, Boolean appendSla // Make sure there is room for the additional space we need in the win32 api if (strlen(directoryPathBuf) > CFMaxPathSize - 2) return; - strlcat(directoryPathBuf, "\\*", CFMaxPathSize); + cf_strlcat(directoryPathBuf, "\\*", CFMaxPathSize); UniChar wideBuf[CFMaxPathSize]; @@ -1110,8 +1110,8 @@ CF_PRIVATE void _CFIterateDirectory(CFStringRef directoryPath, Boolean appendSla struct stat statBuf; char pathToStat[sizeof(dent->d_name)]; strncpy(pathToStat, directoryPathBuf, sizeof(pathToStat)); - strlcat(pathToStat, "/", sizeof(pathToStat)); - strlcat(pathToStat, dent->d_name, sizeof(pathToStat)); + cf_strlcat(pathToStat, "/", sizeof(pathToStat)); + cf_strlcat(pathToStat, dent->d_name, sizeof(pathToStat)); if (stat(pathToStat, &statBuf) == 0) { if (S_ISDIR(statBuf.st_mode)) { dent->d_type = DT_DIR; @@ -1135,7 +1135,7 @@ CF_PRIVATE void _CFIterateDirectory(CFStringRef directoryPath, Boolean appendSla CFStringRef fileName = CFStringCreateWithFileSystemRepresentation(kCFAllocatorSystemDefault, dent->d_name); // This buffer has to be 1 bigger than the size of the one in the dirent so we can hold the extra '/' if it's required - // Be sure to initialize the first character to null, so that strlcat below works correctly + // Be sure to initialize the first character to null, so that cf_strlcat below works correctly #if TARGET_OS_WASI // wasi-libc's dirent.d_name is not a fixed-size array but a pointer, so we need to calculate // the size of buffer at first. @@ -1199,8 +1199,8 @@ CF_PRIVATE void _CFIterateDirectory(CFStringRef directoryPath, Boolean appendSla struct stat statBuf; char pathToStat[sizeof(dent->d_name)]; strncpy(pathToStat, directoryPathBuf, sizeof(pathToStat)); - strlcat(pathToStat, "/", sizeof(pathToStat)); - strlcat(pathToStat, dent->d_name, sizeof(pathToStat)); + cf_strlcat(pathToStat, "/", sizeof(pathToStat)); + cf_strlcat(pathToStat, dent->d_name, sizeof(pathToStat)); if (stat(pathToStat, &statBuf) == 0) { isDirectory = S_ISDIR(statBuf.st_mode); } @@ -1210,11 +1210,11 @@ CF_PRIVATE void _CFIterateDirectory(CFStringRef directoryPath, Boolean appendSla if (isDirectory) { // Append the file name and the trailing / - strlcat(fullPathToFile, dent->d_name, sizeof(fullPathToFile)); - strlcat(fullPathToFile, "/", sizeof(fullPathToFile)); + cf_strlcat(fullPathToFile, dent->d_name, sizeof(fullPathToFile)); + cf_strlcat(fullPathToFile, "/", sizeof(fullPathToFile)); } else if (stuffToPrefix) { // Append just the file name to our previously-used buffer - strlcat(fullPathToFile, dent->d_name, sizeof(fullPathToFile)); + cf_strlcat(fullPathToFile, dent->d_name, sizeof(fullPathToFile)); } diff --git a/Sources/CoreFoundation/CFLocale.c b/Sources/CoreFoundation/CFLocale.c index 6c6f8a6a6d..243a78980d 100644 --- a/Sources/CoreFoundation/CFLocale.c +++ b/Sources/CoreFoundation/CFLocale.c @@ -1830,10 +1830,10 @@ static bool __CFLocaleICUKeywordValueName(const char *locale, const char *value, // Need to make a fake locale ID char lid[ULOC_FULLNAME_CAPACITY+ULOC_KEYWORD_AND_VALUES_CAPACITY]; if (strlen(value) < ULOC_KEYWORD_AND_VALUES_CAPACITY) { - strlcpy(lid, "en_US@", sizeof(lid)); - strlcat(lid, keyword, sizeof(lid)); - strlcat(lid, "=", sizeof(lid)); - strlcat(lid, value, sizeof(lid)); + cf_strlcpy(lid, "en_US@", sizeof(lid)); + cf_strlcat(lid, keyword, sizeof(lid)); + cf_strlcat(lid, "=", sizeof(lid)); + cf_strlcat(lid, value, sizeof(lid)); size = uloc_getDisplayKeywordValue(lid, keyword, locale, name, kMaxICUNameSize, &icuStatus); if (U_SUCCESS(icuStatus) && size > 0 && icuStatus != U_USING_DEFAULT_WARNING) { *out = CFStringCreateWithCharacters(kCFAllocatorSystemDefault, (UniChar *)name, size); @@ -1925,8 +1925,8 @@ static bool __CFLocaleCountryName(const char *locale, const char *value, CFStrin // Need to make a fake locale ID char lid[ULOC_FULLNAME_CAPACITY]; if (strlen(value) < sizeof(lid) - 3) { - strlcpy(lid, "en_", sizeof(lid)); - strlcat(lid, value, sizeof(lid)); + cf_strlcpy(lid, "en_", sizeof(lid)); + cf_strlcat(lid, value, sizeof(lid)); return __CFLocaleICUName(locale, lid, out, uloc_getDisplayCountry); } return false; @@ -1941,9 +1941,9 @@ static bool __CFLocaleScriptName(const char *locale, const char *value, CFString // Need to make a fake locale ID char lid[ULOC_FULLNAME_CAPACITY]; if (strlen(value) == 4) { - strlcpy(lid, "en_", sizeof(lid)); - strlcat(lid, value, sizeof(lid)); - strlcat(lid, "_US", sizeof(lid)); + cf_strlcpy(lid, "en_", sizeof(lid)); + cf_strlcat(lid, value, sizeof(lid)); + cf_strlcat(lid, "_US", sizeof(lid)); return __CFLocaleICUName(locale, lid, out, uloc_getDisplayScript); } return false; @@ -1958,8 +1958,8 @@ static bool __CFLocaleVariantName(const char *locale, const char *value, CFStrin // Need to make a fake locale ID char lid[ULOC_FULLNAME_CAPACITY+ULOC_KEYWORD_AND_VALUES_CAPACITY]; if (strlen(value) < sizeof(lid) - 6) { - strlcpy(lid, "en_US_", sizeof(lid)); - strlcat(lid, value, sizeof(lid)); + cf_strlcpy(lid, "en_US_", sizeof(lid)); + cf_strlcat(lid, value, sizeof(lid)); return __CFLocaleICUName(locale, lid, out, uloc_getDisplayVariant); } return false; diff --git a/Sources/CoreFoundation/CFLocaleIdentifier.c b/Sources/CoreFoundation/CFLocaleIdentifier.c index de4bc4c602..a1058783ed 100644 --- a/Sources/CoreFoundation/CFLocaleIdentifier.c +++ b/Sources/CoreFoundation/CFLocaleIdentifier.c @@ -1779,7 +1779,7 @@ CFStringRef CFLocaleCreateCanonicalLanguageIdentifierFromString(CFAllocatorRef a } if (foundEntry) { // It does match, so replace old string with new - strlcpy(inLocaleString, foundEntry->result, sizeof(inLocaleString)); + cf_strlcpy(inLocaleString, foundEntry->result, sizeof(inLocaleString)); varKeyValueString[0] = 0; } else { char * langRegSubtag = NULL; @@ -1812,7 +1812,7 @@ CFStringRef CFLocaleCreateCanonicalLanguageIdentifierFromString(CFAllocatorRef a sizeof(KeyStringToResultString), _CompareTestEntryToTableEntryKey ); if (foundEntry) { // it does match - strlcpy(inLocaleString, foundEntry->result, sizeof(inLocaleString)); + cf_strlcpy(inLocaleString, foundEntry->result, sizeof(inLocaleString)); } else { // skip to any region tag or java-type variant char * inLocalePtr = inLocaleString; @@ -1871,7 +1871,7 @@ CFStringRef CFLocaleCreateCanonicalLocaleIdentifierFromString(CFAllocatorRef all sizeof(KeyStringToResultString), _CompareTestEntryToTableEntryKey ); if (foundEntry) { // It does match, so replace old string with new // <1.10> - strlcpy(inLocaleString, foundEntry->result, sizeof(inLocaleString)); + cf_strlcpy(inLocaleString, foundEntry->result, sizeof(inLocaleString)); varKeyValueString[0] = 0; } else { char * langRegSubtag = NULL; @@ -1997,8 +1997,8 @@ Boolean CFLocaleGetLanguageRegionEncodingForLocaleIdentifier(CFStringRef localeI // Append whichever other component we first found if (componentLength > 0) { - strlcat(searchString, "_", sizeof(searchString)); - strlcat(searchString, componentString, sizeof(searchString)); + cf_strlcat(searchString, "_", sizeof(searchString)); + cf_strlcat(searchString, componentString, sizeof(searchString)); } // Search @@ -2176,7 +2176,7 @@ CFStringRef CFLocaleCreateLocaleIdentifierFromComponents(CFAllocatorRef allocato asprintf(&buf1, "%s%s%s%s%s%s%s", language ? language : "", script ? "_" : "", script ? script : "", (country || variant ? "_" : ""), country ? country : "", variant ? "_" : "", variant ? variant : ""); char cLocaleID[2 * ULOC_FULLNAME_CAPACITY + 2 * ULOC_KEYWORD_AND_VALUES_CAPACITY]; - strlcpy(cLocaleID, buf1, sizeof(cLocaleID)); + cf_strlcpy(cLocaleID, buf1, sizeof(cLocaleID)); free(language); free(script); free(country); diff --git a/Sources/CoreFoundation/CFPlatform.c b/Sources/CoreFoundation/CFPlatform.c index 69631185ba..83fbfd7743 100644 --- a/Sources/CoreFoundation/CFPlatform.c +++ b/Sources/CoreFoundation/CFPlatform.c @@ -534,8 +534,8 @@ CFURLRef CFCopyHomeDirectoryURL(void) { const char *cdrive = __CFgetenv("HOMEDRIVE"); if (cdrive && cpath) { char fullPath[CFMaxPathSize]; - strlcpy(fullPath, cdrive, sizeof(fullPath)); - strlcat(fullPath, cpath, sizeof(fullPath)); + cf_strlcpy(fullPath, cdrive, sizeof(fullPath)); + cf_strlcat(fullPath, cpath, sizeof(fullPath)); str = CFStringCreateWithCString(kCFAllocatorSystemDefault, fullPath, kCFPlatformInterfaceStringEncoding); retVal = CFURLCreateWithFileSystemPath(kCFAllocatorSystemDefault, str, kCFURLWindowsPathStyle, true); CFRelease(str); diff --git a/Sources/CoreFoundation/CFSocketStream.c b/Sources/CoreFoundation/CFSocketStream.c index b250272916..37c64e0cca 100644 --- a/Sources/CoreFoundation/CFSocketStream.c +++ b/Sources/CoreFoundation/CFSocketStream.c @@ -135,11 +135,11 @@ static void initializeCFNetworkSupport(void) { // not loaded yet, try to load from the filesystem char path[MAX_PATH+1]; if (!CFNetworkSupport.image) { - strlcpy(path, (const char *)_CFDLLPath(), sizeof(path)); + cf_strlcpy(path, (const char *)_CFDLLPath(), sizeof(path)); #if _DEBUG - strlcat(path, "\\CFNetwork_debug.dll", sizeof(path)); + cf_strlcat(path, "\\CFNetwork_debug.dll", sizeof(path)); #else - strlcat(path, "\\CFNetwork.dll", sizeof(path)); + cf_strlcat(path, "\\CFNetwork.dll", sizeof(path)); #endif CFNetworkSupport.image = LoadLibraryA(path); } diff --git a/Sources/CoreFoundation/CFString.c b/Sources/CoreFoundation/CFString.c index f8899e1589..fccec8f880 100644 --- a/Sources/CoreFoundation/CFString.c +++ b/Sources/CoreFoundation/CFString.c @@ -1896,7 +1896,7 @@ CFStringRef __CFStringMakeConstantString(const char *cStr) { CFIndex keySize = strlen(cStr) + 1; key = (char *)CFAllocatorAllocate(kCFAllocatorSystemDefault, keySize, 0); if (__CFOASafe) __CFSetLastAllocationEventName((void *)key, "CFString (CFSTR key)"); - strlcpy(key, cStr, keySize); // !!! We will leak this, if the string is removed from the table (or table is freed) + cf_strlcpy(key, cStr, keySize); // !!! We will leak this, if the string is removed from the table (or table is freed) } { @@ -2292,7 +2292,7 @@ Boolean CFStringGetPascalString(CFStringRef str, Str255 buffer, CFIndex bufferSi #if defined(DEBUG) if (bufferSize > 0) { - strlcpy((char *)buffer + 1, CONVERSIONFAILURESTR, bufferSize - 1); + cf_strlcpy((char *)buffer + 1, CONVERSIONFAILURESTR, bufferSize - 1); buffer[0] = (unsigned char)((CFIndex)sizeof(CONVERSIONFAILURESTR) < (bufferSize - 1) ? (CFIndex)sizeof(CONVERSIONFAILURESTR) : (bufferSize - 1)); } #else @@ -2334,7 +2334,7 @@ Boolean CFStringGetCString(CFStringRef str, char *buffer, CFIndex bufferSize, CF return true; } else { #if defined(DEBUG) - strlcpy(buffer, CONVERSIONFAILURESTR, bufferSize); + cf_strlcpy(buffer, CONVERSIONFAILURESTR, bufferSize); #else if (bufferSize > 0) buffer[0] = 0; #endif diff --git a/Sources/CoreFoundation/CFStringEncodings.c b/Sources/CoreFoundation/CFStringEncodings.c index e4f6f4eb57..9c2d500c07 100644 --- a/Sources/CoreFoundation/CFStringEncodings.c +++ b/Sources/CoreFoundation/CFStringEncodings.c @@ -1147,8 +1147,8 @@ void _CFStringGetUserDefaultEncoding(UInt32 *oScriptValue, UInt32 *oRegionValue) path = passwdp->pw_dir; } - strlcpy(filename, path, sizeof(filename)); - strlcat(filename, __kCFUserEncodingFileName, sizeof(filename)); + cf_strlcpy(filename, path, sizeof(filename)); + cf_strlcat(filename, __kCFUserEncodingFileName, sizeof(filename)); int no_hang_fd = __CFProphylacticAutofsAccess ? open("/dev/autofs_nowait", 0) : -1; int fd = open(filename, O_RDONLY, 0); @@ -1206,8 +1206,8 @@ void _CFStringGetInstallationEncodingAndRegion(uint32_t *encoding, uint32_t *reg const char *path = passwdp->pw_dir; char filename[MAXPATHLEN + 1]; - strlcpy(filename, path, sizeof(filename)); - strlcat(filename, __kCFUserEncodingFileName, sizeof(filename)); + cf_strlcpy(filename, path, sizeof(filename)); + cf_strlcat(filename, __kCFUserEncodingFileName, sizeof(filename)); int no_hang_fd = __CFProphylacticAutofsAccess ? open("/dev/autofs_nowait", 0) : -1; int fd = open(filename, O_RDONLY, 0); @@ -1239,8 +1239,8 @@ Boolean _CFStringSaveUserDefaultEncoding(UInt32 iScriptValue, UInt32 iRegionValu } char filename[MAXPATHLEN + 1]; - strlcpy(filename, path, sizeof(filename)); - strlcat(filename, __kCFUserEncodingFileName, sizeof(filename)); + cf_strlcpy(filename, path, sizeof(filename)); + cf_strlcat(filename, __kCFUserEncodingFileName, sizeof(filename)); int no_hang_fd = __CFProphylacticAutofsAccess ? open("/dev/autofs_nowait", 0) : -1; (void)unlink(filename); diff --git a/Sources/CoreFoundation/CFSystemDirectories.c b/Sources/CoreFoundation/CFSystemDirectories.c index 1a394db3d1..90d517b4ce 100644 --- a/Sources/CoreFoundation/CFSystemDirectories.c +++ b/Sources/CoreFoundation/CFSystemDirectories.c @@ -42,7 +42,7 @@ CFSearchPathEnumerationState __CFGetNextSearchPathEnumeration(CFSearchPathEnumer if (pathSize < PATH_MAX) { uint8_t tempPath[PATH_MAX]; result = sysdir_get_next_search_path_enumeration(state, (char *)tempPath); - strlcpy((char *)path, (char *)tempPath, pathSize); + cf_strlcpy((char *)path, (char *)tempPath, pathSize); } else { result = sysdir_get_next_search_path_enumeration(state, (char *)path); } @@ -75,7 +75,7 @@ CFArrayRef CFCopySearchPathForDirectoriesInDomains(CFSearchPathDirectory directo } if (homeLen + strlen(cPath) < CFMaxPathSize) { home[homeLen] = '\0'; - strlcat(home, &cPath[1], sizeof(home)); + cf_strlcat(home, &cPath[1], sizeof(home)); url = CFURLCreateFromFileSystemRepresentation(kCFAllocatorSystemDefault, (uint8_t *)home, strlen(home), true); } } else { diff --git a/Sources/CoreFoundation/CFURL.c b/Sources/CoreFoundation/CFURL.c index b9f5cbe549..a974ae1a67 100644 --- a/Sources/CoreFoundation/CFURL.c +++ b/Sources/CoreFoundation/CFURL.c @@ -844,7 +844,7 @@ static CFStringRef CreateStringFromFileSystemRepresentationByAddingPercentEscape if ( bufStartPtr != NULL ) { if ( isAbsolute ) { // start with the fileURLPrefix - strlcpy((char *)bufStartPtr, (char *)fileURLPrefixPtr, bufferLength); + cf_strlcpy((char *)bufStartPtr, (char *)fileURLPrefixPtr, bufferLength); bufBytePtr = bufStartPtr + fileURLPrefixLength - 1; } else { diff --git a/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h index dea3b57537..804396d2a4 100644 --- a/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h +++ b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h @@ -109,11 +109,6 @@ typedef char * Class; #include #endif -#if TARGET_OS_WASI -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#endif - #if TARGET_OS_WIN32 #define BOOL WINDOWS_BOOL @@ -204,10 +199,20 @@ static dispatch_queue_t __ ## PREFIX ## Queue(void) { \ #endif #endif -#if !TARGET_OS_MAC -#if !HAVE_STRLCPY +// We know some things (Darwin, WASI, Glibc >= 2.38) have strlcpy/strlcat +#if TARGET_OS_MAC || TARGET_OS_WASI \ + || (defined(__GLIBC__) && \ + ((__GLIBC_MAJOR__ == 2 && __GLIBC_MINOR__ >= 38) \ + || __GLIBC_MAJOR__ > 2)) +#define HAVE_STRLCPY 1 +#define HAVE_STRLCAT 1 +#endif + +#if HAVE_STRLCPY +#define cf_strlcpy strlcpy +#else CF_INLINE size_t -strlcpy(char * dst, const char * src, size_t maxlen) { +cf_strlcpy(char *dst, const char *src, size_t maxlen) { const size_t srclen = strlen(src); if (srclen < maxlen) { memcpy(dst, src, srclen+1); @@ -219,9 +224,11 @@ strlcpy(char * dst, const char * src, size_t maxlen) { } #endif -#if !HAVE_STRLCAT +#if HAVE_STRLCAT +#define cf_strlcat strlcat +#else CF_INLINE size_t -strlcat(char * dst, const char * src, size_t maxlen) { +cf_strlcat(char *dst, const char *src, size_t maxlen) { const size_t srclen = strlen(src); const size_t dstlen = strnlen(dst, maxlen); if (dstlen == maxlen) return maxlen+srclen; @@ -234,7 +241,6 @@ strlcat(char * dst, const char * src, size_t maxlen) { return dstlen + srclen; } #endif -#endif // !TARGET_OS_MAC #if TARGET_OS_WIN32 // Compatibility with boolean.h From af2bcc5ec5d3a6c5fec75ed783c9645476aeed45 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Tue, 22 Oct 2024 14:52:49 -0700 Subject: [PATCH 159/198] Ensure that NSCharacterSet always returns an NSObject on copy (follow up to #5107) (#5118) rdar://138005684 --- Sources/Foundation/NSCharacterSet.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/Foundation/NSCharacterSet.swift b/Sources/Foundation/NSCharacterSet.swift index 6e153906ba..ecb532dc79 100644 --- a/Sources/Foundation/NSCharacterSet.swift +++ b/Sources/Foundation/NSCharacterSet.swift @@ -371,9 +371,9 @@ open class NSCharacterSet : NSObject, NSCopying, NSMutableCopying, NSSecureCodin open func copy(with zone: NSZone? = nil) -> Any { if type(of: self) == NSCharacterSet.self || type(of: self) == NSMutableCharacterSet.self { - return _CFCharacterSetCreateCopy(kCFAllocatorSystemDefault, self._cfObject) + return _CFCharacterSetCreateCopy(kCFAllocatorSystemDefault, self._cfObject)._nsObject } else if type(of: self) == _NSCFCharacterSet.self { - return CFCharacterSetCreateCopy(kCFAllocatorSystemDefault, self._cfObject) as Any + return CFCharacterSetCreateCopy(kCFAllocatorSystemDefault, self._cfObject)._nsObject } else { NSRequiresConcreteImplementation() } From b1b460325cd4b2932220356a1a50ef64fc947bc1 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Wed, 30 Oct 2024 15:02:47 -0700 Subject: [PATCH 160/198] Move __CFAllocatorRespectsHintZeroWhenAllocating to a CF-internal header to avoid confusion over its linkage. Resolves #5125 (#5126) --- Sources/CoreFoundation/CFBase.c | 2 +- Sources/CoreFoundation/include/ForFoundationOnly.h | 2 -- Sources/CoreFoundation/include/ForSwiftFoundationOnly.h | 2 -- Sources/CoreFoundation/internalInclude/CFInternal.h | 2 ++ 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Sources/CoreFoundation/CFBase.c b/Sources/CoreFoundation/CFBase.c index 848cb65728..3d71d7667a 100644 --- a/Sources/CoreFoundation/CFBase.c +++ b/Sources/CoreFoundation/CFBase.c @@ -790,7 +790,7 @@ void *__CFSafelyReallocateWithAllocator(CFAllocatorRef allocator, void *destinat return _CLANG_ANALYZER_IGNORE_NONNULL(reallocated);; } -Boolean __CFAllocatorRespectsHintZeroWhenAllocating(CFAllocatorRef allocator) { +CF_PRIVATE Boolean __CFAllocatorRespectsHintZeroWhenAllocating(CFAllocatorRef allocator) { return allocator == kCFAllocatorSystemDefault || allocator == kCFAllocatorMallocZone; } diff --git a/Sources/CoreFoundation/include/ForFoundationOnly.h b/Sources/CoreFoundation/include/ForFoundationOnly.h index aef916621d..e5f96e9fed 100644 --- a/Sources/CoreFoundation/include/ForFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForFoundationOnly.h @@ -70,8 +70,6 @@ CF_EXPORT void *_Nonnull __CFSafelyReallocate(void * _Nullable destination, size CF_EXPORT void *_Nonnull __CFSafelyReallocateWithAllocator(CFAllocatorRef _Nullable, void * _Nullable destination, size_t newCapacity, CFOptionFlags options, void (^_Nullable reallocationFailureHandler)(void *_Nonnull original, bool *_Nonnull outRecovered)); #endif -Boolean __CFAllocatorRespectsHintZeroWhenAllocating(CFAllocatorRef _Nullable allocator); - typedef CF_ENUM(CFOptionFlags, _CFAllocatorHint) { _CFAllocatorHintZeroWhenAllocating = 1 }; diff --git a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h index f3c7f51bb2..88fb3d361f 100644 --- a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h @@ -105,8 +105,6 @@ _CF_EXPORT_SCOPE_BEGIN -CF_PRIVATE Boolean __CFAllocatorRespectsHintZeroWhenAllocating(CFAllocatorRef _Nullable allocator); - struct __CFSwiftObject { uintptr_t isa; }; diff --git a/Sources/CoreFoundation/internalInclude/CFInternal.h b/Sources/CoreFoundation/internalInclude/CFInternal.h index 79dc4e6001..cc13eb7253 100644 --- a/Sources/CoreFoundation/internalInclude/CFInternal.h +++ b/Sources/CoreFoundation/internalInclude/CFInternal.h @@ -1057,6 +1057,8 @@ CF_INLINE CFAllocatorRef __CFGetAllocator(CFTypeRef cf) { // !!! Use with CF typ return *(CFAllocatorRef *)((char *)cf - 16); } +CF_PRIVATE Boolean __CFAllocatorRespectsHintZeroWhenAllocating(CFAllocatorRef allocator); + /* !!! Avoid #importing objc.h; e.g. converting this to a .m file */ struct __objcFastEnumerationStateEquivalent { unsigned long state; From 974106b48134a90ba2339befead101ac6ba6e1c2 Mon Sep 17 00:00:00 2001 From: Jonathan Flat <50605158+jrflat@users.noreply.github.com> Date: Thu, 31 Oct 2024 23:57:58 -0600 Subject: [PATCH 161/198] Skip test_emptyFilename on Windows while we investigate the failure (#5124) --- Tests/Foundation/TestFileManager.swift | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Tests/Foundation/TestFileManager.swift b/Tests/Foundation/TestFileManager.swift index 7e22282c9f..1ed44a8b18 100644 --- a/Tests/Foundation/TestFileManager.swift +++ b/Tests/Foundation/TestFileManager.swift @@ -1258,8 +1258,10 @@ class TestFileManager : XCTestCase { #endif // !os(Android) #endif // !DEPLOYMENT_RUNTIME_OBJC - func test_emptyFilename() { - + func test_emptyFilename() throws { + #if os(Windows) + throw XCTSkip("This test is disabled while we investigate why it's failing on Windows.") + #else // Some of these tests will throw an NSException on Darwin which would be normally be // modelled by a fatalError() or other hard failure, however since most of these functions // are throwable, an NSError is thrown instead which is more useful. @@ -1398,6 +1400,7 @@ class TestFileManager : XCTestCase { // Not Implemented - XCTAssertNil(fm.componentsToDisplay(forPath: "")) // Not Implemented - XCTAssertEqual(fm.displayName(atPath: ""), "") + #endif // os(Windows) } func test_getRelationship() throws { From 9cc5d4c862e91e828bccffe0ce223a63c939fdfa Mon Sep 17 00:00:00 2001 From: noriaki watanabe Date: Sat, 2 Nov 2024 05:07:04 +0900 Subject: [PATCH 162/198] Align fatalError messages in Objective-C bridging methods for consistency (#5123) * Updated fatalError message in DateComponents bridging method to reflect correct type information. * Aligned fatalError message in Notification bridging method with the format used in other bridging methods. --- Sources/Foundation/DateComponents.swift | 2 +- Sources/Foundation/Notification.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/Foundation/DateComponents.swift b/Sources/Foundation/DateComponents.swift index 95865d25bb..3f87791aab 100644 --- a/Sources/Foundation/DateComponents.swift +++ b/Sources/Foundation/DateComponents.swift @@ -38,7 +38,7 @@ extension DateComponents : _ObjectiveCBridgeable { public static func _forceBridgeFromObjectiveC(_ dateComponents: NSDateComponents, result: inout DateComponents?) { if !_conditionallyBridgeFromObjectiveC(dateComponents, result: &result) { - fatalError("Unable to bridge \(DateComponents.self) to \(self)") + fatalError("Unable to bridge \(NSDateComponents.self) to \(self)") } } diff --git a/Sources/Foundation/Notification.swift b/Sources/Foundation/Notification.swift index 936d28caf7..b125bead13 100644 --- a/Sources/Foundation/Notification.swift +++ b/Sources/Foundation/Notification.swift @@ -111,7 +111,7 @@ extension Notification : _ObjectiveCBridgeable { public static func _forceBridgeFromObjectiveC(_ x: NSNotification, result: inout Notification?) { if !_conditionallyBridgeFromObjectiveC(x, result: &result) { - fatalError("Unable to bridge type") + fatalError("Unable to bridge \(NSNotification.self) to \(self)") } } From 8c0a11ee6f0e6a7872d765d6be2e252816123c6a Mon Sep 17 00:00:00 2001 From: Jonathan Flat <50605158+jrflat@users.noreply.github.com> Date: Fri, 1 Nov 2024 18:13:16 -0600 Subject: [PATCH 163/198] Fix crash when using WebSockets with URLSession.shared (#5128) --- .../WebSocket/WebSocketURLProtocol.swift | 13 ++++-- Tests/Foundation/TestURLSession.swift | 46 ++++++++++++++++++- 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift b/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift index 40a012905d..8216f23d58 100644 --- a/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift +++ b/Sources/FoundationNetworking/URLSession/WebSocket/WebSocketURLProtocol.swift @@ -129,9 +129,16 @@ internal class _WebSocketURLProtocol: _HTTPURLProtocol { guard let t = self.task else { fatalError("Cannot notify") } - guard case .taskDelegate = t.session.behaviour(for: self.task!), - let task = self.task as? URLSessionWebSocketTask else { - fatalError("WebSocket internal invariant violated") + switch t.session.behaviour(for: t) { + case .noDelegate: + break + case .taskDelegate: + break + default: + fatalError("Unexpected behaviour for URLSessionWebSocketTask") + } + guard let task = t as? URLSessionWebSocketTask else { + fatalError("Cast to URLSessionWebSocketTask failed") } // Buffer the response message in the task diff --git a/Tests/Foundation/TestURLSession.swift b/Tests/Foundation/TestURLSession.swift index 91dd6847c6..df12d9a085 100644 --- a/Tests/Foundation/TestURLSession.swift +++ b/Tests/Foundation/TestURLSession.swift @@ -2155,7 +2155,51 @@ final class TestURLSession: LoopbackServerTest, @unchecked Sendable { XCTAssertEqual(delegate.callbacks.count, callbacks.count) XCTAssertEqual(delegate.callbacks, callbacks, "Callbacks for \(#function)") } - + + func test_webSocketShared() async throws { + guard #available(macOS 12, iOS 13.0, watchOS 6.0, tvOS 13.0, *) else { return } + guard URLSessionWebSocketTask.supportsWebSockets else { + print("libcurl lacks WebSockets support, skipping \(#function)") + return + } + + let urlString = "ws://127.0.0.1:\(TestURLSession.serverPort)/web-socket" + let url = try XCTUnwrap(URL(string: urlString)) + + let task = URLSession.shared.webSocketTask(with: url) + task.resume() + + // We interleave sending and receiving, as the test HTTPServer implementation is barebones, and can't handle receiving more than one frame at a time. So, this back-and-forth acts as a gating mechanism + try await task.send(.string("Hello")) + + let stringMessage = try await task.receive() + switch stringMessage { + case .string(let str): + XCTAssert(str == "Hello") + default: + XCTFail("Unexpected String Message") + } + + try await task.send(.data(Data([0x20, 0x22, 0x10, 0x03]))) + + let dataMessage = try await task.receive() + switch dataMessage { + case .data(let data): + XCTAssert(data == Data([0x20, 0x22, 0x10, 0x03])) + default: + XCTFail("Unexpected Data Message") + } + + do { + try await task.sendPing() + // Server hasn't closed the connection yet + } catch { + // Server closed the connection before we could process the pong + let urlError = try XCTUnwrap(error as? URLError) + XCTAssertEqual(urlError._nsError.code, NSURLErrorNetworkConnectionLost) + } + } + func test_webSocketCompletions() async throws { guard #available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) else { return } guard URLSessionWebSocketTask.supportsWebSockets else { From 1acc48bc8f545a393708b4f9f343fd89be07cdb8 Mon Sep 17 00:00:00 2001 From: Christian Date: Tue, 5 Nov 2024 20:15:51 +0300 Subject: [PATCH 164/198] improve CustomNSError.errorDomain calculation (#5132) --- Sources/Foundation/NSError.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index 908d565a95..2b75bd4ffd 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -300,7 +300,7 @@ public protocol CustomNSError : Error { public extension CustomNSError { /// Default domain of the error. static var errorDomain: String { - return String(reflecting: self) + return _typeName(self, qualified: true) } /// The error code within the given domain. From f812a85623a1f18980f31a1c17d2f1acd4fe1ed0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C5=93ur?= Date: Tue, 5 Nov 2024 10:06:45 -0800 Subject: [PATCH 165/198] suggestedFilename always returns a valid filename (#5019) * suggestedFilename always returns a valid filename * re-sanitizing for supportsSecureCoding * code review: prefer `if let` to catch null case --- .../FoundationNetworking/URLResponse.swift | 71 +++++++++++-------- Tests/Foundation/TestHTTPURLResponse.swift | 3 +- Tests/Foundation/TestURLResponse.swift | 42 ++++++++++- 3 files changed, 83 insertions(+), 33 deletions(-) diff --git a/Sources/FoundationNetworking/URLResponse.swift b/Sources/FoundationNetworking/URLResponse.swift index de61e457b8..65e78cfebf 100644 --- a/Sources/FoundationNetworking/URLResponse.swift +++ b/Sources/FoundationNetworking/URLResponse.swift @@ -35,7 +35,6 @@ open class URLResponse : NSObject, NSSecureCoding, NSCopying, @unchecked Sendabl guard let nsurl = aDecoder.decodeObject(of: NSURL.self, forKey: "NS.url") else { return nil } self.url = nsurl as URL - if let mimetype = aDecoder.decodeObject(of: NSString.self, forKey: "NS.mimeType") { self.mimeType = mimetype as String } @@ -46,8 +45,11 @@ open class URLResponse : NSObject, NSSecureCoding, NSCopying, @unchecked Sendabl self.textEncodingName = encodedEncodingName as String } - if let encodedFilename = aDecoder.decodeObject(of: NSString.self, forKey: "NS.suggestedFilename") { - self.suggestedFilename = encodedFilename as String + // re-sanitizing with lastPathComponent because of supportsSecureCoding + if let encodedFilename = aDecoder.decodeObject(of: NSString.self, forKey: "NS.suggestedFilename")?.lastPathComponent, !encodedFilename.isEmpty { + self.suggestedFilename = encodedFilename + } else { + self.suggestedFilename = "Unknown" } } @@ -177,6 +179,25 @@ open class URLResponse : NSObject, NSSecureCoding, NSCopying, @unchecked Sendabl /// protocol responses. open class HTTPURLResponse : URLResponse, @unchecked Sendable { + private static func sanitize(headerFields: [String: String]?) -> [String: String] { + // Canonicalize the header fields by capitalizing the field names, but not X- Headers + // This matches the behaviour of Darwin. + guard let headerFields = headerFields else { return [:] } + var canonicalizedFields: [String: String] = [:] + + for (key, value) in headerFields { + if key.isEmpty { continue } + if key.hasPrefix("x-") || key.hasPrefix("X-") { + canonicalizedFields[key] = value + } else if key.caseInsensitiveCompare("WWW-Authenticate") == .orderedSame { + canonicalizedFields["WWW-Authenticate"] = value + } else { + canonicalizedFields[key.capitalized] = value + } + } + return canonicalizedFields + } + /// Initializer for HTTPURLResponse objects. /// /// - Parameter url: the URL from which the response was generated. @@ -186,30 +207,13 @@ open class HTTPURLResponse : URLResponse, @unchecked Sendable { /// - Returns: the instance of the object, or `nil` if an error occurred during initialization. public init?(url: URL, statusCode: Int, httpVersion: String?, headerFields: [String : String]?) { self.statusCode = statusCode - - self._allHeaderFields = { - // Canonicalize the header fields by capitalizing the field names, but not X- Headers - // This matches the behaviour of Darwin. - guard let headerFields = headerFields else { return [:] } - var canonicalizedFields: [String: String] = [:] - - for (key, value) in headerFields { - if key.isEmpty { continue } - if key.hasPrefix("x-") || key.hasPrefix("X-") { - canonicalizedFields[key] = value - } else if key.caseInsensitiveCompare("WWW-Authenticate") == .orderedSame { - canonicalizedFields["WWW-Authenticate"] = value - } else { - canonicalizedFields[key.capitalized] = value - } - } - return canonicalizedFields - }() - + + self._allHeaderFields = HTTPURLResponse.sanitize(headerFields: headerFields) + super.init(url: url, mimeType: nil, expectedContentLength: 0, textEncodingName: nil) - expectedContentLength = getExpectedContentLength(fromHeaderFields: headerFields) ?? -1 - suggestedFilename = getSuggestedFilename(fromHeaderFields: headerFields) ?? "Unknown" - if let type = ContentTypeComponents(headerFields: headerFields) { + expectedContentLength = getExpectedContentLength(fromHeaderFields: _allHeaderFields) ?? -1 + suggestedFilename = getSuggestedFilename(fromHeaderFields: _allHeaderFields) ?? "Unknown" + if let type = ContentTypeComponents(headerFields: _allHeaderFields) { mimeType = type.mimeType.lowercased() textEncodingName = type.textEncoding?.lowercased() } @@ -222,13 +226,18 @@ open class HTTPURLResponse : URLResponse, @unchecked Sendable { self.statusCode = aDecoder.decodeInteger(forKey: "NS.statusCode") - if aDecoder.containsValue(forKey: "NS.allHeaderFields") { - self._allHeaderFields = aDecoder.decodeObject(of: NSDictionary.self, forKey: "NS.allHeaderFields") as! [String: String] - } else { - self._allHeaderFields = [:] - } + // re-sanitizing dictionary because of supportsSecureCoding + self._allHeaderFields = HTTPURLResponse.sanitize(headerFields: aDecoder.decodeObject(of: NSDictionary.self, forKey: "NS.allHeaderFields") as? [String: String]) super.init(coder: aDecoder) + + // re-sanitizing from _allHeaderFields because of supportsSecureCoding + expectedContentLength = getExpectedContentLength(fromHeaderFields: _allHeaderFields) ?? -1 + suggestedFilename = getSuggestedFilename(fromHeaderFields: _allHeaderFields) ?? "Unknown" + if let type = ContentTypeComponents(headerFields: _allHeaderFields) { + mimeType = type.mimeType.lowercased() + textEncodingName = type.textEncoding?.lowercased() + } } open override func encode(with aCoder: NSCoder) { diff --git a/Tests/Foundation/TestHTTPURLResponse.swift b/Tests/Foundation/TestHTTPURLResponse.swift index 41a6a52e4c..08e27279f5 100644 --- a/Tests/Foundation/TestHTTPURLResponse.swift +++ b/Tests/Foundation/TestHTTPURLResponse.swift @@ -228,7 +228,8 @@ class TestHTTPURLResponse: XCTestCase { func test_NSCoding() { let url = URL(string: "https://apple.com")! - let f = ["Content-Type": "text/HTML; charset=ISO-8859-4"] + let f = ["Content-Type": "text/HTML; charset=ISO-8859-4", + "Content-Disposition": "attachment; filename=fname.ext"] let responseA = HTTPURLResponse(url: url, statusCode: 200, httpVersion: "HTTP/1.1", headerFields: f)! let responseB = NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: responseA)) as! HTTPURLResponse diff --git a/Tests/Foundation/TestURLResponse.swift b/Tests/Foundation/TestURLResponse.swift index d0d5b69d26..d0d0f3bdea 100644 --- a/Tests/Foundation/TestURLResponse.swift +++ b/Tests/Foundation/TestURLResponse.swift @@ -81,7 +81,7 @@ class TestURLResponse : XCTestCase { func test_NSCoding() { let url = URL(string: "https://apple.com")! let responseA = URLResponse(url: url, mimeType: "txt", expectedContentLength: 0, textEncodingName: nil) - let responseB = NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: responseA)) as! URLResponse + let responseB = try! NSKeyedUnarchiver.unarchivedObject(ofClass: URLResponse.self, from: NSKeyedArchiver.archivedData(withRootObject: responseA))! //On macOS unarchived Archived then unarchived `URLResponse` is not equal. XCTAssertEqual(responseA.url, responseB.url, "Archived then unarchived url response must be equal.") @@ -91,6 +91,46 @@ class TestURLResponse : XCTestCase { XCTAssertEqual(responseA.suggestedFilename, responseB.suggestedFilename, "Archived then unarchived url response must be equal.") } + func test_NSCodingEmptySuggestedFilename() { + let url = URL(string: "https://apple.com")! + let responseA = URLResponse(url: url, mimeType: "txt", expectedContentLength: 0, textEncodingName: nil) + + // archiving in xml format + let archiver = NSKeyedArchiver(requiringSecureCoding: false) + archiver.outputFormat = .xml + archiver.encode(responseA, forKey: NSKeyedArchiveRootObjectKey) + var plist = String(data: archiver.encodedData, encoding: .utf8)! + + // clearing the filename in the archive + plist = plist.replacingOccurrences(of: "Unknown", with: "") + let data = plist.data(using: .utf8)! + + // unarchiving + let responseB = try! NSKeyedUnarchiver.unarchivedObject(ofClass: URLResponse.self, from: data)! + + XCTAssertEqual(responseB.suggestedFilename, "Unknown", "Unarchived filename must be valid.") + } + + func test_NSCodingInvalidSuggestedFilename() { + let url = URL(string: "https://apple.com")! + let responseA = URLResponse(url: url, mimeType: "txt", expectedContentLength: 0, textEncodingName: nil) + + // archiving in xml format + let archiver = NSKeyedArchiver(requiringSecureCoding: false) + archiver.outputFormat = .xml + archiver.encode(responseA, forKey: NSKeyedArchiveRootObjectKey) + var plist = String(data: archiver.encodedData, encoding: .utf8)! + + // invalidating the filename in the archive + plist = plist.replacingOccurrences(of: "Unknown", with: "invalid/valid") + let data = plist.data(using: .utf8)! + + // unarchiving + let responseB = try! NSKeyedUnarchiver.unarchivedObject(ofClass: URLResponse.self, from: data)! + + XCTAssertEqual(responseB.suggestedFilename, "valid", "Unarchived filename must be valid.") + } + func test_equalWithTheSameInstance() throws { let url = try XCTUnwrap(URL(string: "http://example.com/")) let response = URLResponse(url: url, mimeType: nil, expectedContentLength: -1, textEncodingName: nil) From 13d628aa3756b0e4762f2347c63e74d15dddae79 Mon Sep 17 00:00:00 2001 From: Jonathan Flat Date: Tue, 5 Nov 2024 19:35:54 -0800 Subject: [PATCH 166/198] Fix Dictionary ordering in TestHTTPURLResponse.test_NSCoding --- Tests/Foundation/TestHTTPURLResponse.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Tests/Foundation/TestHTTPURLResponse.swift b/Tests/Foundation/TestHTTPURLResponse.swift index 08e27279f5..b06ed20eb2 100644 --- a/Tests/Foundation/TestHTTPURLResponse.swift +++ b/Tests/Foundation/TestHTTPURLResponse.swift @@ -236,7 +236,8 @@ class TestHTTPURLResponse: XCTestCase { //On macOS unarchived Archived then unarchived `URLResponse` is not equal. XCTAssertEqual(responseA.statusCode, responseB.statusCode, "Archived then unarchived http url response must be equal.") - XCTAssertEqual(Array(responseA.allHeaderFields.keys), Array(responseB.allHeaderFields.keys), "Archived then unarchived http url response must be equal.") + // Dictionary ordering is unpredictable after encoding/decoding because every Dictionary instance has its own hash table salt. Compare Sets of the keys instead. + XCTAssertEqual(Set(responseA.allHeaderFields.keys), Set(responseB.allHeaderFields.keys), "Archived then unarchived http url response must be equal.") for key in responseA.allHeaderFields.keys { XCTAssertEqual(responseA.allHeaderFields[key] as? String, responseB.allHeaderFields[key] as? String, "Archived then unarchived http url response must be equal.") From 21b3196b33a64d53a0989881fc9a486227b4a316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C5=93ur?= Date: Wed, 6 Nov 2024 10:39:17 -0800 Subject: [PATCH 167/198] Fix various typos (#5075) * Fix various typos * code review: avoid using reserved C++ keywords --- CMakeLists.txt | 2 +- README.md | 2 +- Sources/CoreFoundation/CFBundle.c | 4 ++-- Sources/CoreFoundation/CFBundle_InfoPlist.c | 2 +- Sources/CoreFoundation/CFBundle_Tables.c | 2 +- Sources/CoreFoundation/CFCalendar.c | 2 +- Sources/CoreFoundation/CFCalendar_Enumerate.c | 4 ++-- Sources/CoreFoundation/CFData.c | 2 +- Sources/CoreFoundation/CFDateFormatter.c | 20 +++++++++---------- Sources/CoreFoundation/CFICUConverters.c | 2 +- Sources/CoreFoundation/CFLocale.c | 8 ++++---- Sources/CoreFoundation/CFLocaleIdentifier.c | 14 ++++++------- Sources/CoreFoundation/CFStream.c | 2 +- Sources/CoreFoundation/CFString.c | 9 ++++----- .../CoreFoundation/CFStringEncodingDatabase.c | 2 +- Sources/CoreFoundation/CFStringEncodings.c | 2 +- Sources/CoreFoundation/CFStringUtilities.c | 2 +- .../CFURLComponents_URIParser.c | 2 +- .../CoreFoundation/CFXMLPreferencesDomain.c | 2 +- Sources/CoreFoundation/include/CFBundle.h | 2 +- Sources/CoreFoundation/include/CFBundlePriv.h | 2 +- .../CoreFoundation/include/CFCharacterSet.h | 10 +++++----- .../include/CFCharacterSetPriv.h | 2 +- Sources/CoreFoundation/include/CFPriv.h | 4 ++-- Sources/CoreFoundation/include/CFStream.h | 4 ++-- Sources/CoreFoundation/include/CFStreamPriv.h | 8 ++++---- .../include/CFStringEncodingConverter.h | 4 ++-- .../include/CFStringEncodingDatabase.h | 2 +- Sources/CoreFoundation/include/CFTree.h | 4 ++-- Sources/CoreFoundation/include/CFURL.h | 4 ++-- Sources/CoreFoundation/include/CFURLPriv.h | 10 +++++----- .../include/ForFoundationOnly.h | 2 +- .../internalInclude/CFInternal.h | 2 +- .../internalInclude/CFPropertyList_Internal.h | 4 ++-- .../internalInclude/CFRuntime_Internal.h | 2 +- .../internalInclude/CFStreamInternal.h | 8 ++++---- .../internalInclude/CFURL.inc.h | 4 ++-- .../CFURLComponents_Internal.h | 2 +- .../internalInclude/CoreFoundation_Prefix.h | 4 ++-- Sources/Foundation/DateFormatter.swift | 6 +++--- Sources/Foundation/FileManager+POSIX.swift | 4 ++-- Sources/Foundation/FileManager+Win32.swift | 4 ++-- .../Foundation/JSONSerialization+Parser.swift | 2 +- Sources/Foundation/JSONSerialization.swift | 2 +- Sources/Foundation/NSKeyedUnarchiver.swift | 2 +- Sources/Foundation/NSObject.swift | 2 +- Sources/Foundation/NSPathUtilities.swift | 2 +- Sources/Foundation/NSURL.swift | 2 +- Sources/Foundation/Operation.swift | 2 +- Sources/Foundation/Port.swift | 2 +- .../DataURLProtocol.swift | 2 +- .../URLSession/URLSessionConfiguration.swift | 2 +- .../URLSession/libcurl/EasyHandle.swift | 2 +- Tests/Foundation/HTTPServer.swift | 6 +++--- Tests/Foundation/TestJSONSerialization.swift | 16 +++++++-------- Tests/Foundation/TestNSError.swift | 2 +- .../Foundation/TestNSTextCheckingResult.swift | 2 +- Tests/Foundation/TestNotificationQueue.swift | 2 +- Tests/Foundation/TestNumberFormatter.swift | 2 +- Tests/Foundation/TestScanner.swift | 4 ++-- Tests/Foundation/TestURLProtectionSpace.swift | 2 +- 61 files changed, 120 insertions(+), 121 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fa842040f1..62a9c6a225 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,7 +74,7 @@ option(FOUNDATION_BUILD_NETWORKING "build FoundationNetworking" set(CMAKE_POSITION_INDEPENDENT_CODE YES) -# Fetchable dependcies +# Fetchable dependencies include(FetchContent) if (_SwiftFoundationICU_SourceDIR) FetchContent_Declare(SwiftFoundationICU diff --git a/README.md b/README.md index b760fea76d..e7d6551e3d 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ It is designed with these goals in mind: There is more information on the Foundation framework [here](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/ObjC_classic/). -This project, `swift-corelibs-foundation`, provides an compatibility implementation of the Foundation API for platforms where there is no Objective-C runtime. On macOS, iOS, and other Apple platforms, apps should use the Foundation that comes with the operating system. +This project, `swift-corelibs-foundation`, provides a compatibility implementation of the Foundation API for platforms where there is no Objective-C runtime. On macOS, iOS, and other Apple platforms, apps should use the Foundation that comes with the operating system. ## Project Navigator diff --git a/Sources/CoreFoundation/CFBundle.c b/Sources/CoreFoundation/CFBundle.c index 607c7bd925..cbd5b1ddfb 100644 --- a/Sources/CoreFoundation/CFBundle.c +++ b/Sources/CoreFoundation/CFBundle.c @@ -784,7 +784,7 @@ static CFBundleRef _CFBundleCreate(CFAllocatorRef allocator, CFURLRef bundleURL, } - // This section of _CFBundleCreate touches the disk, so it should be done outside the lock. This avoids blocking threads which are just attempting to get an existing bundle on file system access, potentially from a lower-piority thread. + // This section of _CFBundleCreate touches the disk, so it should be done outside the lock. This avoids blocking threads which are just attempting to get an existing bundle on file system access, potentially from a lower-priority thread. _CFBundleVersion localVersion = _CFBundleGetBundleVersionForURL(newURL); if (_CFBundleVersionFlat == localVersion) { Boolean exists = false; @@ -1741,7 +1741,7 @@ CFBundleRef _CFBundleGetBundleWithIdentifierAndLibraryName(CFStringRef bundleID, } static void _CFBundleEnsureAllBundlesUpToDate(void) { - // This method returns all the statically linked bundles. This includes the main bundle as well as any frameworks that the process was linked against at launch time. It does not include frameworks or opther bundles that were loaded dynamically. + // This method returns all the statically linked bundles. This includes the main bundle as well as any frameworks that the process was linked against at launch time. It does not include frameworks or other bundles that were loaded dynamically. CFArrayRef imagePaths = NULL; // Tickle the main bundle into existence (void)CFBundleGetMainBundle(); diff --git a/Sources/CoreFoundation/CFBundle_InfoPlist.c b/Sources/CoreFoundation/CFBundle_InfoPlist.c index bf818a2ff9..0c84913324 100644 --- a/Sources/CoreFoundation/CFBundle_InfoPlist.c +++ b/Sources/CoreFoundation/CFBundle_InfoPlist.c @@ -1017,7 +1017,7 @@ CF_PRIVATE void _CFBundleRefreshInfoDictionaryAlreadyLocked(CFBundleRef bundle) if (bundle->_infoPlistUrl) { CFRelease(bundle->_infoPlistUrl); } - bundle->_infoPlistUrl = infoPlistUrl; // transfered as retained + bundle->_infoPlistUrl = infoPlistUrl; // transferred as retained // Add or fixup any keys that will be expected later if (bundle->_infoDict) _CFBundleInfoPlistFixupInfoDictionary(bundle, (CFMutableDictionaryRef)bundle->_infoDict); diff --git a/Sources/CoreFoundation/CFBundle_Tables.c b/Sources/CoreFoundation/CFBundle_Tables.c index a0c1b9ea2e..f36399a2fe 100644 --- a/Sources/CoreFoundation/CFBundle_Tables.c +++ b/Sources/CoreFoundation/CFBundle_Tables.c @@ -91,7 +91,7 @@ static void _CFBundleRemoveFromTables(CFBundleRef bundle, CFURLRef bundleURL, CF // Since we no longer allow bundles to be removed from tables, this method does nothing. Modifying the tables during deallocation is risky because if the caller has over-released the bundle object then we will deadlock on the global lock. #if TARGET_OS_OSX if (_useUnsafeUnretainedTables()) { - // Except for special cases of unsafe-unretained, where we must clean up the table or risk handing out a zombie object. There may still be outstanding pointers to these bundes (e.g. the result of CFBundleGetBundleWithIdentifier) but there is nothing we can do about that after this point. + // Except for special cases of unsafe-unretained, where we must clean up the table or risk handing out a zombie object. There may still be outstanding pointers to these bundles (e.g. the result of CFBundleGetBundleWithIdentifier) but there is nothing we can do about that after this point. // Unique bundles aren't in the tables anyway if (bundle->_isUnique) return; diff --git a/Sources/CoreFoundation/CFCalendar.c b/Sources/CoreFoundation/CFCalendar.c index f4342411bb..54bb2bf10d 100644 --- a/Sources/CoreFoundation/CFCalendar.c +++ b/Sources/CoreFoundation/CFCalendar.c @@ -129,7 +129,7 @@ static void __CFCalendarSetToFirstInstant(CFCalendarRef calendar, CFCalendarUnit int32_t qmonth[] = {0, 0, 0, 3, 3, 3, 6, 6, 6, 9, 9, 9, 9}; month = qmonth[month]; } - // #warning if there is a lunar leap month of the same number *preceeding* month N, + // #warning if there is a lunar leap month of the same number *preceding* month N, // then we should set the calendar to the leap month, not the regular month. __cficu_ucal_set(calendar->_cal, UCAL_MONTH, month); __cficu_ucal_set(calendar->_cal, UCAL_IS_LEAP_MONTH, 0); diff --git a/Sources/CoreFoundation/CFCalendar_Enumerate.c b/Sources/CoreFoundation/CFCalendar_Enumerate.c index d60bf7f39d..733ce9d776 100644 --- a/Sources/CoreFoundation/CFCalendar_Enumerate.c +++ b/Sources/CoreFoundation/CFCalendar_Enumerate.c @@ -1755,13 +1755,13 @@ static CFDateRef _Nullable _CFCalendarCreateAdjustedDateForMismatchedLeapMonthOr if (!foundGregLeap || !foundGregLeapMatchesComps) { if (strictMatching) { if (isGregorianCalendar) { - *exactMatch = false; // We couldn't find what we needed but we found sumthin. Step C will decide whether or not to NULL the date out. + *exactMatch = false; // We couldn't find what we needed but we found something. Step C will decide whether or not to NULL the date out. } else { // For other calendars (besides Chinese which is already being handled), go to the top of the next period for the next highest unit of the one that bailed. Boolean eraMatch = false; CFDateRef tempDate = _CFCalendarCreateMatchingDateAfterStartDateMatchingComponentsInNextHighestUnitRange(calendar, &eraMatch, matchingComponents, nextHighestUnit, searchingDate, goBackwards, findLast, opts); if (!eraMatch) { - *exactMatch = false; // We couldn't find what we needed but we found sumthin. Step C will decide whether or not to NULL the date out. + *exactMatch = false; // We couldn't find what we needed but we found something. Step C will decide whether or not to NULL the date out. CFRelease(tempDate); } else { CFRelease(result); diff --git a/Sources/CoreFoundation/CFData.c b/Sources/CoreFoundation/CFData.c index ba159e14ee..44864a8a42 100644 --- a/Sources/CoreFoundation/CFData.c +++ b/Sources/CoreFoundation/CFData.c @@ -105,7 +105,7 @@ enum { }; typedef enum { - kCFImmutable = 0x0, /* unchangable and fixed capacity; default */ + kCFImmutable = 0x0, /* unchangeable and fixed capacity; default */ kCFFixedMutable = 0x1, /* changeable and fixed capacity */ kCFMutable = 0x3 /* changeable and variable capacity */ } _CFDataMutableVariety; diff --git a/Sources/CoreFoundation/CFDateFormatter.c b/Sources/CoreFoundation/CFDateFormatter.c index 5c1e4d3324..ad938a4337 100644 --- a/Sources/CoreFoundation/CFDateFormatter.c +++ b/Sources/CoreFoundation/CFDateFormatter.c @@ -155,12 +155,12 @@ CFStringRef CFDateFormatterCreateDateFormatFromTemplate(CFAllocatorRef allocator } UChar pattern[BUFFER_SIZE] = {0}, skel[BUFFER_SIZE] = {0}, bpat[BUFFER_SIZE] = {0}; - CFIndex tmpltLen = CFStringGetLength(tmplateString); - if (BUFFER_SIZE < tmpltLen) tmpltLen = BUFFER_SIZE; - CFStringGetCharacters(tmplateString, CFRangeMake(0, tmpltLen), (UniChar *)pattern); + CFIndex tmplateLen = CFStringGetLength(tmplateString); + if (BUFFER_SIZE < tmplateLen) tmplateLen = BUFFER_SIZE; + CFStringGetCharacters(tmplateString, CFRangeMake(0, tmplateLen), (UniChar *)pattern); CFRelease(tmplateString); - int32_t patlen = tmpltLen; + int32_t patlen = tmplateLen; UErrorCode status = U_ZERO_ERROR; int32_t skellen = __cficu_udatpg_getSkeleton(ptg, pattern, patlen, skel, sizeof(skel) / sizeof(skel[0]), &status); if (!U_FAILURE(status)) { @@ -872,7 +872,7 @@ static CFMutableStringRef __createISO8601FormatString(CFISO8601DateFormatOptions CFStringAppendCString(resultStr, "HH:mm:ss", kCFStringEncodingUTF8); } - // Add support for fracional seconds + // Add support for fractional seconds if (includeFractionalSecs) { CFStringAppendCString(resultStr, ".SSS", kCFStringEncodingUTF8); } @@ -2174,8 +2174,8 @@ CFTypeRef CFDateFormatterCopyProperty(CFDateFormatterRef formatter, CFStringRef } CFStringRef _CFDateFormatterCreateSkeletonFromTemplate(CFStringRef tmplateString, CFLocaleRef locale, UErrorCode *outErrorCode) { - CFIndex const tmpltLen = CFStringGetLength(tmplateString); - if (tmpltLen == 0) { + CFIndex const tmplateLen = CFStringGetLength(tmplateString); + if (tmplateLen == 0) { if (outErrorCode) { *outErrorCode = U_ILLEGAL_ARGUMENT_ERROR; } @@ -2186,15 +2186,15 @@ CFStringRef _CFDateFormatterCreateSkeletonFromTemplate(CFStringRef tmplateString Boolean success = useTemplatePatternGenerator(locale, ^(UDateTimePatternGenerator *ptg) { #define BUFFER_SIZE 768 - SAFE_STACK_BUFFER_DECL(UChar, ubuffer, tmpltLen, BUFFER_SIZE); + SAFE_STACK_BUFFER_DECL(UChar, ubuffer, tmplateLen, BUFFER_SIZE); UChar const *ustr = (UChar *)CFStringGetCharactersPtr(tmplateString); if (ustr == NULL) { - CFStringGetCharacters(tmplateString, CFRangeMake(0, tmpltLen), (UniChar *)ubuffer); + CFStringGetCharacters(tmplateString, CFRangeMake(0, tmplateLen), (UniChar *)ubuffer); ustr = ubuffer; } UChar skel[BUFFER_SIZE] = {0}; - int32_t patlen = tmpltLen; + int32_t patlen = tmplateLen; UErrorCode status = U_ZERO_ERROR; int32_t skelLen = __cficu_udatpg_getSkeleton(ptg, ustr, patlen, skel, sizeof(skel) / sizeof(skel[0]), &status); if (U_SUCCESS(status)) { diff --git a/Sources/CoreFoundation/CFICUConverters.c b/Sources/CoreFoundation/CFICUConverters.c index 78b60b3fc7..06d8f1a3a2 100644 --- a/Sources/CoreFoundation/CFICUConverters.c +++ b/Sources/CoreFoundation/CFICUConverters.c @@ -263,7 +263,7 @@ CF_PRIVATE CFIndex __CFStringEncodingICUToBytes(const char *icuName, uint32_t fl ucnv_fromUnicode(converter, &destination, destinationLimit, (const UChar **)&source, (const UChar *)sourceLimit, NULL, flush, &errorCode); #if HAS_ICU_BUG_6024743 -/* Another critical ICU design issue. Similar to conversion error, source pointer returned from U_BUFFER_OVERFLOW_ERROR is already beyond the last valid character position. It renders the returned value from source entirely unusable. We have to manually back up until succeeding Intrestingly, this issue doesn't apply to ucnv_toUnicode. The asynmmetric nature makes this more dangerous */ +/* Another critical ICU design issue. Similar to conversion error, source pointer returned from U_BUFFER_OVERFLOW_ERROR is already beyond the last valid character position. It renders the returned value from source entirely unusable. We have to manually back up until succeeding Interestingly, this issue doesn't apply to ucnv_toUnicode. The asynmmetric nature makes this more dangerous */ if (U_BUFFER_OVERFLOW_ERROR == errorCode) { const uint8_t *bitmap = CFUniCharGetBitmapPtrForPlane(kCFUniCharNonBaseCharacterSet, 0); const uint8_t *nonBase; diff --git a/Sources/CoreFoundation/CFLocale.c b/Sources/CoreFoundation/CFLocale.c index 243a78980d..06f8617f60 100644 --- a/Sources/CoreFoundation/CFLocale.c +++ b/Sources/CoreFoundation/CFLocale.c @@ -507,7 +507,7 @@ CFArrayRef _CFLocaleCopyValidNumberingSystemsForLocaleIdentifier(CFStringRef loc return numberingSystemIDs; } -CFStringRef _CFLocaleCreateLocaleIdentiferByReplacingLanguageCodeAndScriptCode(CFStringRef localeIDWithDesiredLangCode, CFStringRef localeIDWithDesiredComponents) { +CFStringRef _CFLocaleCreateLocaleIdentifierByReplacingLanguageCodeAndScriptCode(CFStringRef localeIDWithDesiredLangCode, CFStringRef localeIDWithDesiredComponents) { CFStringRef localeID = NULL; if (localeIDWithDesiredLangCode && localeIDWithDesiredComponents) { CFStringRef langIDToUse = _CFLocaleCopyLanguageIdentifierWithScriptCodeForLocaleIdentifier(localeIDWithDesiredLangCode); @@ -540,7 +540,7 @@ CFStringRef _CFLocaleCreateLocaleIdentiferByReplacingLanguageCodeAndScriptCode(C if (indexOfNumberingSystem == kCFNotFound || indexOfNumberingSystem == 0) { CFDictionaryRemoveValue(mutableComps, CFSTR("numbers")); } - // If the numbering system for `localeIDWithDesiredComponents` is compatible with the constructed locale’s language and is not already the default numbering system (index 0), then set it on the new locale, e.g. `hi_IN@numbers=latn` + `ar` shoudl get `ar_IN@numbers=latn`, since `latn` is valid for `ar`. + // If the numbering system for `localeIDWithDesiredComponents` is compatible with the constructed locale’s language and is not already the default numbering system (index 0), then set it on the new locale, e.g. `hi_IN@numbers=latn` + `ar` should get `ar_IN@numbers=latn`, since `latn` is valid for `ar`. else if (indexOfNumberingSystem > 0) { CFDictionarySetValue(mutableComps, CFSTR("numbers"), numberingSystem); } @@ -601,7 +601,7 @@ static CFStringRef _CFLocaleCreateLocaleIdentifierForAvailableLocalizations(CFAr if (CFEqual(preferredLocaleLanguageID, preferredLocalizationLanguageID)) { result = CFRetain(preferredLocaleID); } else { - result = _CFLocaleCreateLocaleIdentiferByReplacingLanguageCodeAndScriptCode(preferredLocalization, preferredLocaleID); + result = _CFLocaleCreateLocaleIdentifierByReplacingLanguageCodeAndScriptCode(preferredLocalization, preferredLocaleID); } } if (preferredLocaleLanguageID) { CFRelease(preferredLocaleLanguageID); } @@ -723,7 +723,7 @@ static CFLocaleRef _CFLocaleCopyCurrentGuts(CFStringRef name, Boolean useCache, if (!ident) { ident = (CFStringRef)CFRetain(FALLBACK_LOCALE_NAME); - // CFLocaleCopyCurrent() failed to look up current locale -- gpsd dameon is not localized, does not interact directly with users + // CFLocaleCopyCurrent() failed to look up current locale -- gpsd daemon is not localized, does not interact directly with users // This log was added to try to catch scenarios in which apps fail to look up the current locale thanks to sandboxing issues or CFPreferences issues. It turns out that in its current formulation, this log has a high false positive rate and is very confusing. // Disabled for now. /* diff --git a/Sources/CoreFoundation/CFLocaleIdentifier.c b/Sources/CoreFoundation/CFLocaleIdentifier.c index a1058783ed..f797ae0c01 100644 --- a/Sources/CoreFoundation/CFLocaleIdentifier.c +++ b/Sources/CoreFoundation/CFLocaleIdentifier.c @@ -1950,7 +1950,7 @@ SPI: CFLocaleGetLanguageRegionEncodingForLocaleIdentifier gets the appropriate otherwise may set *langCode and/or *regCode to -1 if there is no appropriate legacy value for the locale. This is a replacement for the CFBundle SPI CFBundleGetLocalizationInfoForLocalization (which was intended to be temporary and transitional); this function is more up-to-date in its handling of locale strings, and is in CFLocale where this functionality should belong. Compared - to CFBundleGetLocalizationInfoForLocalization, this function does not spcially interpret a NULL localeIdentifier to mean use the single most + to CFBundleGetLocalizationInfoForLocalization, this function does not specially interpret a NULL localeIdentifier to mean use the single most preferred localization in the current context (this function returns NO for a NULL localeIdentifier); and in this function langCode, regCode, and scriptCode are all SInt16* (not SInt32* like the equivalent parameters in CFBundleGetLocalizationInfoForLocalization). */ @@ -1966,18 +1966,18 @@ Boolean CFLocaleGetLanguageRegionEncodingForLocaleIdentifier(CFStringRef localeI char localeCString[kLocaleIdentifierCStringMax]; if ( CFStringGetCString(canonicalIdentifier, localeCString, sizeof(localeCString), kCFStringEncodingASCII) ) { UErrorCode icuStatus = U_ZERO_ERROR; - int32_t languagelength; + int32_t languageLength; char searchString[ULOC_LANG_CAPACITY + ULOC_FULLNAME_CAPACITY]; - languagelength = uloc_getLanguage( localeCString, searchString, ULOC_LANG_CAPACITY, &icuStatus ); - if ( U_SUCCESS(icuStatus) && languagelength > 0 ) { + languageLength = uloc_getLanguage( localeCString, searchString, ULOC_LANG_CAPACITY, &icuStatus ); + if ( U_SUCCESS(icuStatus) && languageLength > 0 ) { // OK, here we have at least a language code, check for other components in order LocaleToLegacyCodes searchEntry = { (const char *)searchString, 0, 0, 0 }; const LocaleToLegacyCodes * foundEntryPtr; int32_t componentLength; char componentString[ULOC_FULLNAME_CAPACITY]; - languagelength = strlen(searchString); // in case it got truncated + languageLength = strlen(searchString); // in case it got truncated icuStatus = U_ZERO_ERROR; componentLength = uloc_getScript( localeCString, componentString, sizeof(componentString), &icuStatus ); Boolean foundScript = false; @@ -2006,9 +2006,9 @@ Boolean CFLocaleGetLanguageRegionEncodingForLocaleIdentifier(CFStringRef localeI // Do not try fallback if string encoding is requested AND a script is present in the passed-in locale since the script might affect the string encoding: BOOL lookingForScript = foundScript && stringEncoding != NULL; - if (foundEntryPtr == NULL && (int32_t) strlen(searchString) > languagelength && !lookingForScript) { + if (foundEntryPtr == NULL && (int32_t) strlen(searchString) > languageLength && !lookingForScript) { // Otherwise truncate to language alone and try again - searchString[languagelength] = 0; + searchString[languageLength] = 0; foundEntryPtr = (const LocaleToLegacyCodes *)bsearch( &searchEntry, localeToLegacyCodes, kNumLocaleToLegacyCodes, sizeof(LocaleToLegacyCodes), CompareLocaleToLegacyCodesEntries ); } diff --git a/Sources/CoreFoundation/CFStream.c b/Sources/CoreFoundation/CFStream.c index 5d3786df21..9079192ebd 100644 --- a/Sources/CoreFoundation/CFStream.c +++ b/Sources/CoreFoundation/CFStream.c @@ -561,7 +561,7 @@ static void _signalEventSync(struct _CFStream* stream) /* What happens if the callback sets the client to NULL? We're in a loop here... Hmm. */ /* After writing that comment, I see: CFReadStreamSetClient(..., NULL) unsafely releases info pointer immediately */ - /* Of note, when the stream callbacks are set to to NULL, we're re-initalized so as not to receive more events, so we + /* Of note, when the stream callbacks are set to to NULL, we're re-initialized so as not to receive more events, so we * should break pout of this loop */ } } diff --git a/Sources/CoreFoundation/CFString.c b/Sources/CoreFoundation/CFString.c index fccec8f880..d2b88aa6d3 100644 --- a/Sources/CoreFoundation/CFString.c +++ b/Sources/CoreFoundation/CFString.c @@ -852,7 +852,7 @@ void __CFStringHandleOutOfMemory(CFTypeRef _Nullable obj) CLANG_ANALYZER_NORETUR CFStringRef msg = CFSTR("Out of memory. We suggest restarting the application. If you have an unsaved document, create a backup copy in Finder, then try to save."); } -/* Reallocates the backing store of the string to accomodate the new length. Space is reserved or characters are deleted as indicated by insertLength and the ranges in deleteRanges. The length is updated to reflect the new state. Will also maintain a length byte and a null byte in 8-bit strings. If length cannot fit in length byte, the space will still be reserved, but will be 0. (Hence the reason the length byte should never be looked at as length unless there is no explicit length.) +/* Reallocates the backing store of the string to accommodate the new length. Space is reserved or characters are deleted as indicated by insertLength and the ranges in deleteRanges. The length is updated to reflect the new state. Will also maintain a length byte and a null byte in 8-bit strings. If length cannot fit in length byte, the space will still be reserved, but will be 0. (Hence the reason the length byte should never be looked at as length unless there is no explicit length.) */ static void __CFStringChangeSizeMultiple(CFMutableStringRef str, const CFRange *deleteRanges, CFIndex numDeleteRanges, CFIndex insertLength, Boolean makeUnicode) { const uint8_t *curContents = (uint8_t *)__CFStrContents(str); @@ -2434,7 +2434,7 @@ CF_INLINE bool _CFCanUseLocale(CFLocaleRef locale) { #define HANGUL_SYLLABLE_END (0xD7AF) -// Returns the length of characters filled into outCharacters. If no change, returns 0. maxBufLen shoule be at least 8 +// Returns the length of characters filled into outCharacters. If no change, returns 0. maxBufLen should be at least 8 static CFIndex __CFStringFoldCharacterClusterAtIndex(UTF32Char character, CFStringInlineBuffer *buffer, CFIndex index, CFOptionFlags flags, const uint8_t *langCode, UTF32Char *outCharacters, CFIndex maxBufferLength, CFIndex *consumedLength, bool *insufficientBufferSpace) { CFIndex filledLength = 0, currentIndex = index; @@ -4579,9 +4579,8 @@ CFRange CFStringGetRangeOfComposedCharactersAtIndex(CFStringRef theString, CFInd (length 0), in which case no search is performed. @param searchOptions The bitwise-or'ed option flags to control the search behavior. The supported options are - kCFCompareBackwards andkCFCompareAnchored. - If other option flags are specified, the behavior - is undefined. + kCFCompareBackwards and kCFCompareAnchored. + If other option flags are specified, the behavior is undefined. @param result The pointer to a CFRange supplied by the caller in which the search result is stored. If a pointer to an invalid memory is specified, the behavior is undefined. diff --git a/Sources/CoreFoundation/CFStringEncodingDatabase.c b/Sources/CoreFoundation/CFStringEncodingDatabase.c index 3f25102a7f..94ea7a145f 100644 --- a/Sources/CoreFoundation/CFStringEncodingDatabase.c +++ b/Sources/CoreFoundation/CFStringEncodingDatabase.c @@ -209,7 +209,7 @@ static const uint16_t __CFWindowsCPList[] = { 0, 54936, - 50221, // we prefere this over 50220/50221 since that's what CF coverter generates + 50221, // we prefer this over 50220/50221 since that's what CF converter generates 0, 0, 0, diff --git a/Sources/CoreFoundation/CFStringEncodings.c b/Sources/CoreFoundation/CFStringEncodings.c index 9c2d500c07..bd20a0fe3b 100644 --- a/Sources/CoreFoundation/CFStringEncodings.c +++ b/Sources/CoreFoundation/CFStringEncodings.c @@ -683,7 +683,7 @@ CFIndex __CFStringEncodeByteStream(CFStringRef string, CFIndex rangeLoc, CFIndex static dispatch_once_t onceToken; static CFStringEncodingToBytesProc __CFToUTF8 = NULL; dispatch_once(&onceToken, ^{ - // Thiis encoder is built-in, no need to check it more than once + // This encoder is built-in, no need to check it more than once __CFToUTF8 = CFStringEncodingGetConverter(kCFStringEncodingUTF8)->toBytes.standard; }); diff --git a/Sources/CoreFoundation/CFStringUtilities.c b/Sources/CoreFoundation/CFStringUtilities.c index 8f48bf3d34..ff6a73cbf2 100644 --- a/Sources/CoreFoundation/CFStringUtilities.c +++ b/Sources/CoreFoundation/CFStringUtilities.c @@ -651,7 +651,7 @@ CF_PRIVATE CFComparisonResult _CFCompareStringsWithLocale(CFStringInlineBuffer * CFIndex str2Max = str2Range.location + str2Range.length; CFIndex bufferSize; - // Extend forward and compare until the result is deterministic. The result is indeterministic if the differences are weak and can be resolved by character folding. For example, comparision between "abc" and "ABC" is considered to be indeterministic. + // Extend forward and compare until the result is deterministic. The result is indeterministic if the differences are weak and can be resolved by character folding. For example, comparison between "abc" and "ABC" is considered to be indeterministic. do { if (str1Range.location < str1Max) { str1Range.location = __extendLocationForward(str1Range.location, str1, alnumBMP, punctBMP, controlBMP, str1Max); diff --git a/Sources/CoreFoundation/CFURLComponents_URIParser.c b/Sources/CoreFoundation/CFURLComponents_URIParser.c index 76242fe823..e6045a4eaf 100644 --- a/Sources/CoreFoundation/CFURLComponents_URIParser.c +++ b/Sources/CoreFoundation/CFURLComponents_URIParser.c @@ -716,7 +716,7 @@ CF_PRIVATE Boolean _CFURIParserParseURIReference(CFStringRef urlString, struct _ // clear the parseInfo bzero(parseInfo, sizeof(*parseInfo)); - // Make sure the URL string isn't too long. We're limiting it to 2GB for backwards compatibility with 32-bit excutables using NS/CFURL + // Make sure the URL string isn't too long. We're limiting it to 2GB for backwards compatibility with 32-bit executables using NS/CFURL if ( (urlStringLength > 0) && (urlStringLength <= INT_MAX) ) { CFStringInitInlineBuffer(urlString, &buf, CFRangeMake(0, urlStringLength)); diff --git a/Sources/CoreFoundation/CFXMLPreferencesDomain.c b/Sources/CoreFoundation/CFXMLPreferencesDomain.c index 28af3673d9..4b02b1c126 100644 --- a/Sources/CoreFoundation/CFXMLPreferencesDomain.c +++ b/Sources/CoreFoundation/CFXMLPreferencesDomain.c @@ -83,7 +83,7 @@ CF_INLINE void URLPropertyDictRelease(void) { __CFUnlock(&_propDictLock); } -// Asssumes caller already knows the directory doesn't exist. +// Assumes caller already knows the directory doesn't exist. static Boolean _createDirectory(CFURLRef dirURL, Boolean worldReadable) { CFAllocatorRef alloc = __CFPreferencesAllocator(); CFURLRef parentURL = CFURLCreateCopyDeletingLastPathComponent(alloc, dirURL); diff --git a/Sources/CoreFoundation/include/CFBundle.h b/Sources/CoreFoundation/include/CFBundle.h index 36d6d061f9..c0769b24c7 100644 --- a/Sources/CoreFoundation/include/CFBundle.h +++ b/Sources/CoreFoundation/include/CFBundle.h @@ -64,7 +64,7 @@ CFBundleRef CFBundleGetBundleWithIdentifier(CFStringRef bundleID); CF_EXPORT CFArrayRef CFBundleGetAllBundles(void); /* This is potentially expensive, and not thread-safe. Use with care. */ - /* Best used for debuggging or other diagnostic purposes. */ + /* Best used for debugging or other diagnostic purposes. */ /* ===================== Creating Bundles ===================== */ diff --git a/Sources/CoreFoundation/include/CFBundlePriv.h b/Sources/CoreFoundation/include/CFBundlePriv.h index 1a823b3183..9f1cb73ea7 100644 --- a/Sources/CoreFoundation/include/CFBundlePriv.h +++ b/Sources/CoreFoundation/include/CFBundlePriv.h @@ -269,7 +269,7 @@ CF_EXPORT cpu_type_t _CFBundleGetPreferredExecutableArchitectureForURL(CFURLRef url) API_AVAILABLE(macos(10.16)) API_UNAVAILABLE(ios, watchos, tvos); #endif -/* SPI for AppKit usage only, they should be only used in limited secnarios of the application load lifecycle */ +/* SPI for AppKit usage only, they should be only used in limited scenarios of the application load lifecycle */ CF_EXPORT Boolean _CFBundleAddResourceURL(CFBundleRef bundle, CFURLRef url) API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0)); diff --git a/Sources/CoreFoundation/include/CFCharacterSet.h b/Sources/CoreFoundation/include/CFCharacterSet.h index 9e316afc35..bb1697db2a 100644 --- a/Sources/CoreFoundation/include/CFCharacterSet.h +++ b/Sources/CoreFoundation/include/CFCharacterSet.h @@ -27,7 +27,7 @@ bitmap representation rarely has 136K byte. For detailed discussion of the external bitmap representation, refer to the comments for CFCharacterSetCreateWithBitmapRepresentation below. - Note that the existance of non-BMP characters in a character set + Note that the existence of non-BMP characters in a character set does not imply the membership of the corresponding surrogate characters. For example, a character set with U+10000 does not match with U+D800. @@ -135,7 +135,7 @@ CFCharacterSetRef CFCharacterSetCreateWithCharactersInString(CFAllocatorRef allo /*! @function CFCharacterSetCreateWithBitmapRepresentation - Creates a new immutable character set with the bitmap representtion in the given data. + Creates a new immutable character set with the bitmap representation in the given data. @param alloc The CFAllocator which should be used to allocate memory for the array and its storage for values. This parameter may be NULL in which case the current default @@ -181,10 +181,10 @@ CF_EXPORT CFCharacterSetRef CFCharacterSetCreateInvertedSet(CFAllocatorRef alloc Reports whether or not the character set is a superset of the character set specified as the second parameter. @param theSet The character set to be checked for the membership of theOtherSet. If this parameter is not a valid CFCharacterSet, the behavior is undefined. - @param theOtherset The character set to be checked whether or not it is a subset of theSet. + @param theOtherSet The character set to be checked whether or not it is a subset of theSet. If this parameter is not a valid CFCharacterSet, the behavior is undefined. */ -CF_EXPORT Boolean CFCharacterSetIsSupersetOfSet(CFCharacterSetRef theSet, CFCharacterSetRef theOtherset); +CF_EXPORT Boolean CFCharacterSetIsSupersetOfSet(CFCharacterSetRef theSet, CFCharacterSetRef theOtherSet); /*! @function CFCharacterSetHasMemberInPlane @@ -288,7 +288,7 @@ CFDataRef CFCharacterSetCreateBitmapRepresentation(CFAllocatorRef alloc, CFChara /*! @function CFCharacterSetAddCharactersInRange - Adds the given range to the charaacter set. + Adds the given range to the character set. @param theSet The character set to which the range is to be added. If this parameter is not a valid mutable CFCharacterSet, the behavior is undefined. diff --git a/Sources/CoreFoundation/include/CFCharacterSetPriv.h b/Sources/CoreFoundation/include/CFCharacterSetPriv.h index 73f12b3a07..23ac2de5c3 100644 --- a/Sources/CoreFoundation/include/CFCharacterSetPriv.h +++ b/Sources/CoreFoundation/include/CFCharacterSetPriv.h @@ -47,7 +47,7 @@ CF_INLINE UTF32Char CFCharacterSetGetLongCharacterForSurrogatePair(UniChar surro return (UTF32Char)(((surrogateHigh - 0xD800UL) << 10) + (surrogateLow - 0xDC00UL) + 0x0010000UL); } -/* Check to see if the character represented by the surrogate pair surrogateHigh & surrogateLow is in the chraracter set */ +/* Check to see if the character represented by the surrogate pair surrogateHigh & surrogateLow is in the character set */ CF_EXPORT Boolean CFCharacterSetIsSurrogatePairMember(CFCharacterSetRef theSet, UniChar surrogateHigh, UniChar surrogateLow) ; /* Keyed-coding support diff --git a/Sources/CoreFoundation/include/CFPriv.h b/Sources/CoreFoundation/include/CFPriv.h index b9a025d06f..b403db102f 100644 --- a/Sources/CoreFoundation/include/CFPriv.h +++ b/Sources/CoreFoundation/include/CFPriv.h @@ -562,7 +562,7 @@ CF_EXPORT CFHashCode _CFNonObjCHash(CFTypeRef cf); *langCode and/or *regCode to -1 if there is no appropriate legacy value for the locale. This is a replacement for the CFBundle SPI CFBundleGetLocalizationInfoForLocalization (which was intended to be temporary and transitional); this function is more up-to-date in its handling of locale strings, and is in CFLocale where this functionality should belong. Compared - to CFBundleGetLocalizationInfoForLocalization, this function does not spcially interpret a NULL localeIdentifier to mean use the single most + to CFBundleGetLocalizationInfoForLocalization, this function does not specially interpret a NULL localeIdentifier to mean use the single most preferred localization in the current context (this function returns NO for a NULL localeIdentifier); and in this function langCode, regCode, and scriptCode are all SInt16* (not SInt32* like the equivalent parameters in CFBundleGetLocalizationInfoForLocalization). */ @@ -664,7 +664,7 @@ CF_EXPORT void _CFRunLoopSetWindowsMessageQueueHandler(CFRunLoopRef rl, CFString #endif -CF_EXPORT CFArrayRef CFDateFormatterCreateDateFormatsFromTemplates(CFAllocatorRef allocator, CFArrayRef tmplates, CFOptionFlags options, CFLocaleRef locale); +CF_EXPORT CFArrayRef CFDateFormatterCreateDateFormatsFromTemplates(CFAllocatorRef allocator, CFArrayRef templates, CFOptionFlags options, CFLocaleRef locale); #if TARGET_OS_IPHONE // Available for internal use on embedded diff --git a/Sources/CoreFoundation/include/CFStream.h b/Sources/CoreFoundation/include/CFStream.h index 097b3243ff..6108fedf83 100644 --- a/Sources/CoreFoundation/include/CFStream.h +++ b/Sources/CoreFoundation/include/CFStream.h @@ -187,7 +187,7 @@ CF_EXPORT const CFStringRef _Nonnull kCFStreamPropertySOCKSVersion CF_AVAILABLE( * kCFStreamSocketSOCKSVersion4 * * Discussion: - * CFDictionary value for SOCKS proxy information. Indcates that + * CFDictionary value for SOCKS proxy information. Indicates that * SOCKS will or is using version 4 of the SOCKS protocol. * */ @@ -437,7 +437,7 @@ Boolean CFWriteStreamSetProperty(CFWriteStreamRef _Null_unspecified stream, CFSt or on one or more run loops. If scheduled on a run loop, it is the caller's responsibility to ensure that at least one of the scheduled run loops is being run. - NOTE: Unlike other CoreFoundation APIs, pasing a NULL clientContext here will remove + NOTE: Unlike other CoreFoundation APIs, passing a NULL clientContext here will remove the client. If you do not care about the client context (i.e. your only concern is that your callback be called), you should pass in a valid context where every entry is 0 or NULL. diff --git a/Sources/CoreFoundation/include/CFStreamPriv.h b/Sources/CoreFoundation/include/CFStreamPriv.h index 78763f81ce..1c9e9d180d 100644 --- a/Sources/CoreFoundation/include/CFStreamPriv.h +++ b/Sources/CoreFoundation/include/CFStreamPriv.h @@ -38,10 +38,10 @@ struct _CFStreamCallBacks { Boolean (*open)(struct _CFStream *stream, CFErrorRef *error, Boolean *openComplete, void *info); Boolean (*openCompleted)(struct _CFStream *stream, CFErrorRef *error, void *info); CFIndex (*read)(CFReadStreamRef stream, UInt8 *buffer, CFIndex bufferLength, CFErrorRef *error, Boolean *atEOF, void *info); - const UInt8 *(*getBuffer)(CFReadStreamRef sream, CFIndex maxBytesToRead, CFIndex *numBytesRead, CFErrorRef *error, Boolean *atEOF, void *info); - Boolean (*canRead)(CFReadStreamRef, CFErrorRef *error, void *info); - CFIndex (*write)(CFWriteStreamRef, const UInt8 *buffer, CFIndex bufferLength, CFErrorRef *error, void *info); - Boolean (*canWrite)(CFWriteStreamRef, CFErrorRef *error, void *info); + const UInt8 *(*getBuffer)(CFReadStreamRef stream, CFIndex maxBytesToRead, CFIndex *numBytesRead, CFErrorRef *error, Boolean *atEOF, void *info); + Boolean (*canRead)(CFReadStreamRef stream, CFErrorRef *error, void *info); + CFIndex (*write)(CFWriteStreamRef stream, const UInt8 *buffer, CFIndex bufferLength, CFErrorRef *error, void *info); + Boolean (*canWrite)(CFWriteStreamRef stream, CFErrorRef *error, void *info); void (*close)(struct _CFStream *stream, void *info); CFTypeRef (*copyProperty)(struct _CFStream *stream, CFStringRef propertyName, void *info); diff --git a/Sources/CoreFoundation/include/CFStringEncodingConverter.h b/Sources/CoreFoundation/include/CFStringEncodingConverter.h index 0447727cb6..948af6bcb4 100644 --- a/Sources/CoreFoundation/include/CFStringEncodingConverter.h +++ b/Sources/CoreFoundation/include/CFStringEncodingConverter.h @@ -17,7 +17,7 @@ CF_EXTERN_C_BEGIN /* Values for flags argument for the conversion functions below. These can be combined, but the three NonSpacing behavior flags are exclusive. */ -// kCFStringEncodingBasicDirectionLeftToRight ~ kCFStringEncodingPrependBOM will probably be deprecated and superceded by kCFStringEncodingPartialInput flag +// kCFStringEncodingBasicDirectionLeftToRight ~ kCFStringEncodingPrependBOM will probably be deprecated and superseded by kCFStringEncodingPartialInput flag enum { kCFStringEncodingAllowLossyConversion = (1UL << 0), // Uses fallback functions to substitutes non mappable chars kCFStringEncodingBasicDirectionLeftToRight = (1UL << 1), // Converted with original direction left-to-right. @@ -29,7 +29,7 @@ enum { kCFStringEncodingUseHFSPlusCanonical = (1UL << 7), // Always use canonical form but leaves 0x2000 ranges kCFStringEncodingPrependBOM = (1UL << 8), // Prepend BOM sequence (i.e. ISO2022KR) kCFStringEncodingDisableCorporateArea = (1UL << 9), // Disable the usage of 0xF8xx area for Apple proprietary chars in converting to UniChar, resulting loosely mapping. - kCFStringEncodingASCIICompatibleConversion = (1UL << 10), // This flag forces strict ASCII compatible converion. i.e. MacJapanese 0x5C maps to Unicode 0x5C. + kCFStringEncodingASCIICompatibleConversion = (1UL << 10), // This flag forces strict ASCII compatible conversion. i.e. MacJapanese 0x5C maps to Unicode 0x5C. kCFStringEncodingLenientUTF8Conversion = (1UL << 11), // 10.1 (Puma) compatible lenient UTF-8 conversion. kCFStringEncodingPartialInput = (1UL << 12), // input buffer is a part of stream kCFStringEncodingPartialOutput = (1UL << 13) // output buffer streaming diff --git a/Sources/CoreFoundation/include/CFStringEncodingDatabase.h b/Sources/CoreFoundation/include/CFStringEncodingDatabase.h index 3700cd2e52..e0b195135f 100644 --- a/Sources/CoreFoundation/include/CFStringEncodingDatabase.h +++ b/Sources/CoreFoundation/include/CFStringEncodingDatabase.h @@ -20,4 +20,4 @@ CF_PRIVATE CFStringEncoding __CFStringEncodingGetFromCanonicalName(const char *c CF_PRIVATE CFStringEncoding __CFStringEncodingGetMostCompatibleMacScript(CFStringEncoding encoding); -CF_PRIVATE const char *__CFStringEncodingGetName(CFStringEncoding encoding); // Returns simple non-localizd name +CF_PRIVATE const char *__CFStringEncodingGetName(CFStringEncoding encoding); // Returns simple non-localized name diff --git a/Sources/CoreFoundation/include/CFTree.h b/Sources/CoreFoundation/include/CFTree.h index 7d76e34868..0ff7041ec9 100644 --- a/Sources/CoreFoundation/include/CFTree.h +++ b/Sources/CoreFoundation/include/CFTree.h @@ -199,7 +199,7 @@ void CFTreeGetChildren(CFTreeRef tree, CFTreeRef *children); /*! @function CFTreeApplyFunctionToChildren Calls a function once for each child of the tree. Note that the applier - only operates one level deep, and does not operate on descendents further + only operates one level deep, and does not operate on descendants further removed than the immediate children of the tree. @param tree The tree to be operated upon. If this parameter is not a valid CFTree, the behavior is undefined. @@ -219,7 +219,7 @@ void CFTreeApplyFunctionToChildren(CFTreeRef tree, CFTreeApplierFunction CF_NOES /*! @function CFTreeFindRoot - Returns the root tree of which the specified tree is a descendent. + Returns the root tree of which the specified tree is a descendant. @param tree The tree to be queried. If this parameter is not a valid CFTree, the behavior is undefined. @result A reference to the root of the tree. diff --git a/Sources/CoreFoundation/include/CFURL.h b/Sources/CoreFoundation/include/CFURL.h index 0ff668e1ce..e475d936c7 100644 --- a/Sources/CoreFoundation/include/CFURL.h +++ b/Sources/CoreFoundation/include/CFURL.h @@ -152,7 +152,7 @@ a relative URL against its base). The full URL is therefore If a given CFURL can be decomposed (that is, conforms to RFC 1808), you can ask for each of the four basic pieces (scheme, net location, path, -and resource specifer) separately, as well as for its base URL. The +and resource specifier) separately, as well as for its base URL. The basic pieces are returned with any percent-escape sequences still in place (although note that the scheme may not legally include any percent-escapes); this is to allow the caller to distinguish between @@ -1209,7 +1209,7 @@ CFDataRef CFURLCreateBookmarkData ( CFAllocatorRef allocator, CFURLRef url, CFUR CF_EXPORT CFURLRef CFURLCreateByResolvingBookmarkData ( CFAllocatorRef allocator, CFDataRef bookmark, CFURLBookmarkResolutionOptions options, CFURLRef relativeToURL, CFArrayRef resourcePropertiesToInclude, Boolean* isStale, CFErrorRef* error ) API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); -/* Returns the resource propertyies identified by a specified array of keys contained in specified bookmark data. If the result dictionary does not contain a resource value for one or more of the requested resource keys, it means those resource properties are not available in the bookmark data. +/* Returns the resource properties identified by a specified array of keys contained in specified bookmark data. If the result dictionary does not contain a resource value for one or more of the requested resource keys, it means those resource properties are not available in the bookmark data. */ CF_EXPORT CFDictionaryRef CFURLCreateResourcePropertiesForKeysFromBookmarkData ( CFAllocatorRef allocator, CFArrayRef resourcePropertiesToReturn, CFDataRef bookmark ) API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); diff --git a/Sources/CoreFoundation/include/CFURLPriv.h b/Sources/CoreFoundation/include/CFURLPriv.h index 4e2c004ea4..53e659ca4c 100644 --- a/Sources/CoreFoundation/include/CFURLPriv.h +++ b/Sources/CoreFoundation/include/CFURLPriv.h @@ -178,7 +178,7 @@ CF_EXPORT const CFStringRef _kCFURLCustomIconImageDataKey API_AVAILABLE(macos(10 /* Icon image data of the item's custom icon, if any (CFData) */ CF_EXPORT const CFStringRef _kCFURLEffectiveIconFlattenedReferenceDataKey API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); - /* Icon flattened reference, suitable for cheaply sharing the effective icon reference across processess (CFData) */ + /* Icon flattened reference, suitable for cheaply sharing the effective icon reference across processes (CFData) */ CF_EXPORT const CFStringRef _kCFURLBundleIdentifierKey API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); /* If resource is a bundle, the bundle identifier (CFString) */ @@ -201,13 +201,13 @@ CF_EXPORT const CFStringRef _kCFURLStatModeKey API_AVAILABLE(macos(10.6), ios(4. /* To determine which dictionary to request from _kCFURLLocalizedNameDictionaryKey or _kCFURLLocalizedNameWithExtensionsHiddenDictionaryKey, you can consult _LSGetShowAllExtensionsPreference() on macOS. On iOS, extensions are always hidden. */ CF_EXPORT const CFStringRef _kCFURLLocalizedNameDictionaryKey API_AVAILABLE(macos(10.7), ios(9.0), watchos(2.0), tvos(9.0)); - /* For items with localized display names, the dictionary of all available localizations. The keys are the cannonical locale strings for the available localizations. (CFDictionary) */ + /* For items with localized display names, the dictionary of all available localizations. The keys are the canonical locale strings for the available localizations. (CFDictionary) */ CF_EXPORT const CFStringRef _kCFURLLocalizedNameWithExtensionsHiddenDictionaryKey API_AVAILABLE(macosx(10.13), ios(11.0), watchos(4.0), tvos(11.0)); /* For items with localized display names, the dictionary of all available localizations with extensions hidden if safe. The keys are the cannonical locale strings for the available localizations. (CFDictionary) */ CF_EXPORT const CFStringRef _kCFURLLocalizedTypeDescriptionDictionaryKey API_AVAILABLE(macos(10.7), ios(9.0), watchos(2.0), tvos(9.0)); - /* The dictionary of all available localizations of the item kind string. The keys are the cannonical locale strings for the available localizations. (CFDictionary) */ + /* The dictionary of all available localizations of the item kind string. The keys are the canonical locale strings for the available localizations. (CFDictionary) */ CF_EXPORT const CFStringRef _kCFURLApplicationCategoriesKey API_AVAILABLE(macos(10.7)) API_UNAVAILABLE(ios, watchos, tvos); /* The array of category UTI strings associated with the url. (CFArray) */ @@ -421,7 +421,7 @@ CF_EXPORT const CFStringRef kCFURLUbiquitousSharedItemRoleOwner API_AVAILABLE(ma CF_EXPORT const CFStringRef kCFURLUbiquitousSharedItemRoleParticipant API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0)); // the current user is a participant of this shared item. CF_EXPORT const CFStringRef kCFURLUbiquitousSharedItemOwnerNameComponentsKey API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0)); // returns a NSPersonNameComponents, or nil if the current user. (Read-only, value type NSPersonNameComponents) -CF_EXPORT const CFStringRef kCFURLUbiquitousSharedItemMostRecentEditorNameComponentsKey API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); // returns a NSPersonNameComponents for the most recent editro fo the file, or nil if the current user. (Read-only, value type NSPersonNameComponents) +CF_EXPORT const CFStringRef kCFURLUbiquitousSharedItemMostRecentEditorNameComponentsKey API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); // returns a NSPersonNameComponents for the most recent editor of the file, or nil if the current user. (Read-only, value type NSPersonNameComponents) CF_EXPORT const CFStringRef kCFURLUbiquitousSharedItemCurrentUserPermissionsKey API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); // returns the permissions for a participant of this shared item, or nil if not shared. (Read-only, value type NSString). Possible values below. CF_EXPORT const CFStringRef kCFURLUbiquitousSharedItemPermissionsReadOnly API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); // participants are only allowed to read this item @@ -867,7 +867,7 @@ CF_EXPORT CFArrayRef _CFURLRevocableBookmarksCopyClientBundleIdentifiers(Boolean /** Set the active state of the app with the given bundle identifier. This does not delete the security token for the app, thus is less secure than revoking the bundle identifier. */ CF_EXPORT Boolean _CFURLRevocableBookmarksSetActiveStatusForBundleIdentifier(CFStringRef identifier, Boolean active) API_AVAILABLE(macos(10.16)) API_UNAVAILABLE(ios, watchos, tvos); -/** Securely revokes all bookmarks for the bundie identifier. This is not reversable. */ +/** Securely revokes all bookmarks for the bundle identifier. This is not reversable. */ CF_EXPORT Boolean _CFURLRevocableBookmarksRevokeForBundleIdentifier(CFStringRef identifier) API_AVAILABLE(macos(10.16)) API_UNAVAILABLE(ios, watchos, tvos); /** Notification sent when the set of active clients changes. */ diff --git a/Sources/CoreFoundation/include/ForFoundationOnly.h b/Sources/CoreFoundation/include/ForFoundationOnly.h index e5f96e9fed..5bfea27735 100644 --- a/Sources/CoreFoundation/include/ForFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForFoundationOnly.h @@ -108,7 +108,7 @@ _CF_EXPORT_SCOPE_END _CF_EXPORT_SCOPE_BEGIN /// Compares UUID bytes using a secure constant-time comparison rdar://47657832. -/// Ensure that `lhs` and `rhs` are 128-bytes (`CFUUIDBytes` or `uuid_t`) for the comparision to be valid. +/// Ensure that `lhs` and `rhs` are 128-bytes (`CFUUIDBytes` or `uuid_t`) for the comparison to be valid. CF_INLINE Boolean __CFisEqualUUIDBytes(const void * const lhs, const void * const rhs) { uint64_t lhsBytes[2]; memcpy(lhsBytes, lhs, sizeof(lhsBytes)); diff --git a/Sources/CoreFoundation/internalInclude/CFInternal.h b/Sources/CoreFoundation/internalInclude/CFInternal.h index cc13eb7253..a348793120 100644 --- a/Sources/CoreFoundation/internalInclude/CFInternal.h +++ b/Sources/CoreFoundation/internalInclude/CFInternal.h @@ -1250,7 +1250,7 @@ CF_EXTERN_C_END // Load 16,32,64 bit values from unaligned memory addresses. These need to be done bytewise otherwise // it is undefined behaviour in C. On some architectures, eg x86, unaligned loads are allowed by the -// processor and the compiler will convert these byte accesses into the appropiate DWORD/QWORD memory +// processor and the compiler will convert these byte accesses into the appropriate DWORD/QWORD memory // access. CF_INLINE uint32_t _CFUnalignedLoad32(const void *ptr) { diff --git a/Sources/CoreFoundation/internalInclude/CFPropertyList_Internal.h b/Sources/CoreFoundation/internalInclude/CFPropertyList_Internal.h index 76f247c672..e2893bbb4e 100644 --- a/Sources/CoreFoundation/internalInclude/CFPropertyList_Internal.h +++ b/Sources/CoreFoundation/internalInclude/CFPropertyList_Internal.h @@ -14,7 +14,7 @@ /// Limit for the max recursion depth to avoid unbounded stack explosion when /// parsing a crafted plist during validation of an object graph and during reading. -/// For macOS use maximum recusrion limit of `512` is used. +/// For macOS use maximum recursion limit of `512` is used. /// For iPhone, tvOS, and Watches use `128` due to the memory limitations. /// /// rdar://61207578 ([Ward CFPropertyList audit, Low] unbounded recursion (binary and plain plists)) @@ -32,7 +32,7 @@ CF_INLINE size_t _CFPropertyListMaxRecursionDepth() { /// /// rdar://61529878 ([Ward CFPropertyList audit, Medium] Plist exponential growth DoS) CF_INLINE size_t _CFPropertyListMaxRecursionWidth() { - // For now let's start with a resonable value that during testing allows many common cases but prevents very "wide" references to the same collections + // For now let's start with a reasonable value that during testing allows many common cases but prevents very "wide" references to the same collections return _CFPropertyListMaxRecursionDepth() * 3; } diff --git a/Sources/CoreFoundation/internalInclude/CFRuntime_Internal.h b/Sources/CoreFoundation/internalInclude/CFRuntime_Internal.h index 06a5d50de0..5c9c53252f 100644 --- a/Sources/CoreFoundation/internalInclude/CFRuntime_Internal.h +++ b/Sources/CoreFoundation/internalInclude/CFRuntime_Internal.h @@ -180,7 +180,7 @@ CF_PRIVATE const CFRuntimeClass __CFRelativeDateTimeFormatterClass; CF_PRIVATE const CFRuntimeClass __CFListFormatterClass; CF_PRIVATE const CFRuntimeClass __CFDateIntervalFormatterClass; -#pragma mark - Private initialiers to run at process start time +#pragma mark - Private initializers to run at process start time CF_PRIVATE void __CFDateInitialize(void); CF_PRIVATE void __CFCharacterSetInitialize(void); diff --git a/Sources/CoreFoundation/internalInclude/CFStreamInternal.h b/Sources/CoreFoundation/internalInclude/CFStreamInternal.h index dfc8464a96..0dba0c8074 100644 --- a/Sources/CoreFoundation/internalInclude/CFStreamInternal.h +++ b/Sources/CoreFoundation/internalInclude/CFStreamInternal.h @@ -41,10 +41,10 @@ struct _CFStream { typedef Boolean (*_CFStreamCBOpenV1)(struct _CFStream *stream, CFStreamError *error, Boolean *openComplete, void *info); typedef Boolean (*_CFStreamCBOpenCompletedV1)(struct _CFStream *stream, CFStreamError *error, void *info); typedef CFIndex (*_CFStreamCBReadV1)(CFReadStreamRef stream, UInt8 *buffer, CFIndex bufferLength, CFStreamError *error, Boolean *atEOF, void *info); -typedef const UInt8 *(*_CFStreamCBGetBufferV1)(CFReadStreamRef sream, CFIndex maxBytesToRead, CFIndex *numBytesRead, CFStreamError *error, Boolean *atEOF, void *info); -typedef Boolean (*_CFStreamCBCanReadV1)(CFReadStreamRef, void *info); -typedef CFIndex (*_CFStreamCBWriteV1)(CFWriteStreamRef, const UInt8 *buffer, CFIndex bufferLength, CFStreamError *error, void *info); -typedef Boolean (*_CFStreamCBCanWriteV1)(CFWriteStreamRef, void *info); +typedef const UInt8 *(*_CFStreamCBGetBufferV1)(CFReadStreamRef stream, CFIndex maxBytesToRead, CFIndex *numBytesRead, CFStreamError *error, Boolean *atEOF, void *info); +typedef Boolean (*_CFStreamCBCanReadV1)(CFReadStreamRef stream, void *info); +typedef CFIndex (*_CFStreamCBWriteV1)(CFWriteStreamRef stream, const UInt8 *buffer, CFIndex bufferLength, CFStreamError *error, void *info); +typedef Boolean (*_CFStreamCBCanWriteV1)(CFWriteStreamRef stream, void *info); struct _CFStreamCallBacksV1 { CFIndex version; diff --git a/Sources/CoreFoundation/internalInclude/CFURL.inc.h b/Sources/CoreFoundation/internalInclude/CFURL.inc.h index cee0c97c88..41d0753f6c 100644 --- a/Sources/CoreFoundation/internalInclude/CFURL.inc.h +++ b/Sources/CoreFoundation/internalInclude/CFURL.inc.h @@ -15,7 +15,7 @@ CFURL's URL string parser needs to be able to parse either an array of char or an array of UniChar. - The code in CFURL.c used to use this macro "#define STRING_CHAR(x) (useCString ? cstring[(x)] : ustring[(x)])" to determine which array to get a character from for every character looked at in the URL string. That macro added one or more compare and branch instructins to the parser's execution for *every* character in the URL string. Those extra compares and branches added up to 10% of the time (for long URL strings) it takes to create a URL object. + The code in CFURL.c used to use this macro "#define STRING_CHAR(x) (useCString ? cstring[(x)] : ustring[(x)])" to determine which array to get a character from for every character looked at in the URL string. That macro added one or more compare and branch instructions to the parser's execution for *every* character in the URL string. Those extra compares and branches added up to 10% of the time (for long URL strings) it takes to create a URL object. To ensure the exact same parser code is run over a char or a UniChar string, the source code was move to this .h file and is included multiple times by CFURL.c as needed. "STRING_CHAR(x)" was replaced by "characterArray[x]", and characterArray is defined as either an "const char *" or a "const UniChar *" for the two sets of function headers that are either parsing an array of char or an array of UniChar. @@ -344,7 +344,7 @@ surrogatePair[0] = ch; surrogatePair[1] = characterArray[idx + 1]; if ( _appendPercentEscapesForCharacter(surrogatePair, true, encoding, *escapedString) ) { - // we consumed 2 chararacters instead of 1 + // we consumed 2 characters instead of 1 *mark = idx + 2; ++idx; } diff --git a/Sources/CoreFoundation/internalInclude/CFURLComponents_Internal.h b/Sources/CoreFoundation/internalInclude/CFURLComponents_Internal.h index 3f9e67ba62..1541cdd0c8 100644 --- a/Sources/CoreFoundation/internalInclude/CFURLComponents_Internal.h +++ b/Sources/CoreFoundation/internalInclude/CFURLComponents_Internal.h @@ -33,7 +33,7 @@ struct _URIParseInfo { unsigned long hostExists : 1; unsigned long portExists : 1; // pathExists is not needed because there's always a path... it just might be zero length. - unsigned long semicolonInPathExists : 1; // param is obsolete, but we still percent-encode the ';' for backwards compatiblity with NSURL/CFURL. + unsigned long semicolonInPathExists : 1; // param is obsolete, but we still percent-encode the ';' for backwards compatibility with NSURL/CFURL. unsigned long queryExists : 1; unsigned long fragmentExists : 1; }; diff --git a/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h index 804396d2a4..6dea303681 100644 --- a/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h +++ b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h @@ -164,14 +164,14 @@ static dispatch_queue_t __ ## PREFIX ## Queue(void) { \ #endif -// hint to the analyzer that the caller is no longer responsable for the object and that it will be transfered to the reciver that is opaque to the caller +// hint to the analyzer that the caller is no longer responsible for the object and that it will be transferred to the receiver that is opaque to the caller #if __clang_analyzer__ #define CF_TRANSFER_OWNERSHIP(obj) (__typeof(obj))[(id)obj autorelease] #else #define CF_TRANSFER_OWNERSHIP(obj) obj #endif -// hint to the analyzer that the retain/releases are balanced in other locations; the string should be searchable to identify the coorisponding location for the retain/release. These macros should be used with great caution in that they distort the actual retain/release nature of what is happening to the analyzer. Reasonable locations would be in the cases where a value needs to be retained over the lifespan of an external event like a remote machine/process etc. +// hint to the analyzer that the retain/releases are balanced in other locations; the string should be searchable to identify the corresponding location for the retain/release. These macros should be used with great caution in that they distort the actual retain/release nature of what is happening to the analyzer. Reasonable locations would be in the cases where a value needs to be retained over the lifespan of an external event like a remote machine/process etc. // NOTE: these seem like they may be backwards - however they are intended to be promises to the analyzer of what will come to pass #if __clang_analyzer__ #define CF_RELEASE_BALANCED_ELSEWHERE(obj, identified_location) if (obj) CFRetain(obj) diff --git a/Sources/Foundation/DateFormatter.swift b/Sources/Foundation/DateFormatter.swift index 760e776dae..91d5527ee6 100644 --- a/Sources/Foundation/DateFormatter.swift +++ b/Sources/Foundation/DateFormatter.swift @@ -564,7 +564,7 @@ open class DateFormatter : Formatter, @unchecked Sendable { } // Apple DateFormatter implementation returns nil - // if non-whitespace sharacters are left after parsed content. + // if non-whitespace characters are left after parsed content. let remainder = String(string[swiftRange.upperBound...]) let characterSet = CharacterSet(charactersIn: remainder) guard CharacterSet.whitespaces.isSuperset(of: characterSet) else { @@ -594,8 +594,8 @@ open class DateFormatter : Formatter, @unchecked Sendable { return df.string(for: date._nsObject)! } - open class func dateFormat(fromTemplate tmplate: String, options opts: Int, locale: Locale?) -> String? { - guard let res = CFDateFormatterCreateDateFormatFromTemplate(kCFAllocatorSystemDefault, tmplate._cfObject, CFOptionFlags(opts), locale?._cfObject) else { + open class func dateFormat(fromTemplate template: String, options opts: Int, locale: Locale?) -> String? { + guard let res = CFDateFormatterCreateDateFormatFromTemplate(kCFAllocatorSystemDefault, template._cfObject, CFOptionFlags(opts), locale?._cfObject) else { return nil } return res._swiftObject diff --git a/Sources/Foundation/FileManager+POSIX.swift b/Sources/Foundation/FileManager+POSIX.swift index e89b3bf633..845ca89221 100644 --- a/Sources/Foundation/FileManager+POSIX.swift +++ b/Sources/Foundation/FileManager+POSIX.swift @@ -270,8 +270,8 @@ extension FileManager { guard statxErrno == 0 else { switch statxErrno { case EPERM, ENOSYS: - // statx() may be blocked by a security mechanism (eg libseccomp or Docker) even if the kernel verison is new enough. EPERM or ENONSYS may be reported. - // Dont try to use it in future and fallthough to a normal lstat() call. + // statx() may be blocked by a security mechanism (eg libseccomp or Docker) even if the kernel version is new enough. EPERM or ENONSYS may be reported. + // Dont try to use it in future and fallthrough to a normal lstat() call. previousStatxFailed.withLock { $0 = true } return try _statxFallback(atPath: path, withFileSystemRepresentation: fsRep) diff --git a/Sources/Foundation/FileManager+Win32.swift b/Sources/Foundation/FileManager+Win32.swift index c4d2ceaff9..3f8c7f9cac 100644 --- a/Sources/Foundation/FileManager+Win32.swift +++ b/Sources/Foundation/FileManager+Win32.swift @@ -52,8 +52,8 @@ internal func withNTPathRepresentation(of path: String, _ body: (UnsafeP // the path. path = path.replacing("/", with: "\\") - // Droop trailing slashes unless it follows a drive specification. The - // trailing arc separator after a drive specifier iindicates the root as + // Drop trailing slashes unless it follows a drive specification. The + // trailing arc separator after a drive specifier indicates the root as // opposed to a drive relative path. while path.count > 1, path[path.index(before: path.endIndex)] == "\\", !(path.count == 3 && diff --git a/Sources/Foundation/JSONSerialization+Parser.swift b/Sources/Foundation/JSONSerialization+Parser.swift index a7448666f9..a364bf4406 100644 --- a/Sources/Foundation/JSONSerialization+Parser.swift +++ b/Sources/Foundation/JSONSerialization+Parser.swift @@ -96,7 +96,7 @@ internal struct JSONParser { self.depth += 1 defer { depth -= 1 } - // parse first value or end immediatly + // parse first value or end immediately switch try reader.consumeWhitespace() { case ._space, ._return, ._newline, ._tab: preconditionFailure("Expected that all white space is consumed") diff --git a/Sources/Foundation/JSONSerialization.swift b/Sources/Foundation/JSONSerialization.swift index dd9e73d1bb..7e2674cc1e 100644 --- a/Sources/Foundation/JSONSerialization.swift +++ b/Sources/Foundation/JSONSerialization.swift @@ -339,7 +339,7 @@ private extension JSONSerialization { } // If there is no BOM present, we might be able to determine the encoding based on - // occurences of null bytes. + // occurrences of null bytes. if bytes.count >= 4 { switch (bytes[0], bytes[1], bytes[2], bytes[3]) { case (0, 0, 0, _): diff --git a/Sources/Foundation/NSKeyedUnarchiver.swift b/Sources/Foundation/NSKeyedUnarchiver.swift index 7f6509b8fc..cf7f0fe345 100644 --- a/Sources/Foundation/NSKeyedUnarchiver.swift +++ b/Sources/Foundation/NSKeyedUnarchiver.swift @@ -892,7 +892,7 @@ open class NSKeyedUnarchiver : NSCoder { } } - // Enables secure coding support on this keyed unarchiver. When enabled, anarchiving a disallowed class throws an exception. Once enabled, attempting to set requiresSecureCoding to NO will throw an exception. This is to prevent classes from selectively turning secure coding off. This is designed to be set once at the top level and remain on. Note that the getter is on the superclass, NSCoder. See NSCoder for more information about secure coding. + // Enables secure coding support on this keyed unarchiver. When enabled, unarchiving a disallowed class throws an exception. Once enabled, attempting to set requiresSecureCoding to NO will throw an exception. This is to prevent classes from selectively turning secure coding off. This is designed to be set once at the top level and remain on. Note that the getter is on the superclass, NSCoder. See NSCoder for more information about secure coding. open override var requiresSecureCoding: Bool { get { return _flags.contains(.requiresSecureCoding) diff --git a/Sources/Foundation/NSObject.swift b/Sources/Foundation/NSObject.swift index c7856bf655..e96564cb04 100644 --- a/Sources/Foundation/NSObject.swift +++ b/Sources/Foundation/NSObject.swift @@ -249,7 +249,7 @@ open class NSObject : NSObjectProtocol, Equatable, Hashable { return 0 } - // TODO: move these back into extensions once extension methods can be overriden + // TODO: move these back into extensions once extension methods can be overridden /// Overridden by subclasses to substitute a class other than its own during coding. /// diff --git a/Sources/Foundation/NSPathUtilities.swift b/Sources/Foundation/NSPathUtilities.swift index 8043ef00c0..e9c300096c 100644 --- a/Sources/Foundation/NSPathUtilities.swift +++ b/Sources/Foundation/NSPathUtilities.swift @@ -549,7 +549,7 @@ extension NSString { // If we have a RFC8089 style path, e.g. `/[drive-letter]:/...`, drop // the leading '/', otherwise, a leading slash indicates a rooted path - // on the drive for the current working directoyr. + // on the drive for the current working directory. if fsr.count >= 3 { let index0 = fsr.startIndex let index1 = fsr.index(after: index0) diff --git a/Sources/Foundation/NSURL.swift b/Sources/Foundation/NSURL.swift index 6af73f16ea..fc22292b7e 100644 --- a/Sources/Foundation/NSURL.swift +++ b/Sources/Foundation/NSURL.swift @@ -861,7 +861,7 @@ extension NSURL { // File URLs can't be handled on WASI without file system access #if !os(WASI) - // Since we are appending to a URL, path seperators should + // Since we are appending to a URL, path separators should // always be '/', even if we're on Windows if !pathComponent.hasSuffix("/") && isFileURL { if let urlWithoutDirectory = result { diff --git a/Sources/Foundation/Operation.swift b/Sources/Foundation/Operation.swift index f70f41b940..f5f1871c47 100644 --- a/Sources/Foundation/Operation.swift +++ b/Sources/Foundation/Operation.swift @@ -878,7 +878,7 @@ open class OperationQueue : NSObject, ProgressReporting, @unchecked Sendable { // There are only three cases where an operation might have a nil queue // A) The operation was never added to a queue and we got here by a normal KVO change // B) The operation was somehow already finished - // C) the operation was attempted to be added to a queue but an exception occured and was ignored... + // C) the operation was attempted to be added to a queue but an exception occurred and was ignored... // Option C is NOT supported! let isBarrier = op is _BarrierOperation _lock() diff --git a/Sources/Foundation/Port.swift b/Sources/Foundation/Port.swift index c4ed8282bf..acef3c9960 100644 --- a/Sources/Foundation/Port.swift +++ b/Sources/Foundation/Port.swift @@ -156,7 +156,7 @@ fileprivate let FOUNDATION_IPPROTO_TCP = Int32(WinSDK.IPPROTO_TCP.rawValue) SocketPort transmits ports by sending _Darwin_ sockaddr values serialized over the wire. (Yeah.) This means that whatever the platform, we need to be able to send Darwin sockaddrs and figure them out on the other side of the wire. - Now, the vast majority of the intreresting ports that may be sent is AF_INET and AF_INET6 — other sockets aren't uncommon, but they are generally local to their host (eg. AF_UNIX). So, we make the following tactical choice: + Now, the vast majority of the interesting ports that may be sent is AF_INET and AF_INET6 — other sockets aren't uncommon, but they are generally local to their host (eg. AF_UNIX). So, we make the following tactical choice: - swift-corelibs-foundation clients across all platforms can interoperate between themselves and with Darwin as long as all the ports that are sent through SocketPort are AF_INET or AF_INET6; - otherwise, it is the implementor and deployer's responsibility to make sure all the clients are on the same platform. For sockets that do not leave the machine, like AF_UNIX, this is trivial. diff --git a/Sources/FoundationNetworking/DataURLProtocol.swift b/Sources/FoundationNetworking/DataURLProtocol.swift index c4783b2dc4..652b2565f8 100644 --- a/Sources/FoundationNetworking/DataURLProtocol.swift +++ b/Sources/FoundationNetworking/DataURLProtocol.swift @@ -139,7 +139,7 @@ internal class _DataURLProtocol: URLProtocol { while let element = iterator.next() { switch element { case .asciiCharacter(let ch) where ch == Character(","): - // ";base64 must be the last part just before the ',' that seperates the header from the data + // ";base64 must be the last part just before the ',' that separates the header from the data if foundCharsetKey { charSet = part } else { diff --git a/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift b/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift index 4c787ad501..9236854f4c 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift @@ -36,7 +36,7 @@ import Foundation /// A background session can be used to perform networking operations /// on behalf of a suspended application, within certain constraints. open class URLSessionConfiguration : NSObject, NSCopying, @unchecked Sendable { - // -init is silently incorrect in URLSessionCofiguration on the desktop. Ensure code that relied on swift-corelibs-foundation's init() being functional is redirected to the appropriate cross-platform class property. + // -init is silently incorrect in URLSessionConfiguration on the desktop. Ensure code that relied on swift-corelibs-foundation's init() being functional is redirected to the appropriate cross-platform class property. @available(*, deprecated, message: "Use .default instead.", renamed: "URLSessionConfiguration.default") public override init() { self.requestCachePolicy = URLSessionConfiguration.default.requestCachePolicy diff --git a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift index 8c4437cac1..cdf8875fce 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift @@ -56,7 +56,7 @@ internal func xferInfoFunctionSupported() -> Bool { /// TCP streams and HTTP transfers / easy handles. A single TCP stream and /// its socket may be shared by multiple easy handles. /// -/// A single HTTP request-response exchange (refered to here as a +/// A single HTTP request-response exchange (referred to here as a /// *transfer*) corresponds directly to an easy handle. Hence anything that /// needs to be configured for a specific transfer (e.g. the URL) will be /// configured on an easy handle. diff --git a/Tests/Foundation/HTTPServer.swift b/Tests/Foundation/HTTPServer.swift index ec0fd78c1b..b1a18a61de 100644 --- a/Tests/Foundation/HTTPServer.swift +++ b/Tests/Foundation/HTTPServer.swift @@ -185,13 +185,13 @@ class _TCPSocket: CustomStringConvertible { var buffer = [CChar](repeating: 0, count: 4096) #if os(Windows) - var dwNumberOfBytesRecieved: DWORD = 0; + var dwNumberOfBytesReceived: DWORD = 0 try buffer.withUnsafeMutableBufferPointer { var wsaBuffer: WSABUF = WSABUF(len: ULONG($0.count), buf: $0.baseAddress) var flags: DWORD = 0 - _ = try attempt("WSARecv", valid: { $0 != SOCKET_ERROR }, WSARecv(connectionSocket, &wsaBuffer, 1, &dwNumberOfBytesRecieved, &flags, nil, nil)) + _ = try attempt("WSARecv", valid: { $0 != SOCKET_ERROR }, WSARecv(connectionSocket, &wsaBuffer, 1, &dwNumberOfBytesReceived, &flags, nil, nil)) } - let length = Int(dwNumberOfBytesRecieved) + let length = Int(dwNumberOfBytesReceived) #else let length = try attempt("read", valid: { $0 >= 0 }, read(connectionSocket, &buffer, buffer.count)) #endif diff --git a/Tests/Foundation/TestJSONSerialization.swift b/Tests/Foundation/TestJSONSerialization.swift index b155deb982..79f2d97a01 100644 --- a/Tests/Foundation/TestJSONSerialization.swift +++ b/Tests/Foundation/TestJSONSerialization.swift @@ -994,7 +994,7 @@ extension TestJSONSerialization { func test_serialize_dictionaryWithDecimal() { //test serialize values less than 1 with maxFractionDigits = 15 - func excecute_testSetLessThanOne() { + func execute_testSetLessThanOne() { //expected : input to be serialized let params = [ ("0.1",0.1), @@ -1026,7 +1026,7 @@ extension TestJSONSerialization { } } //test serialize values grater than 1 with maxFractionDigits = 15 - func excecute_testSetGraterThanOne() { + func execute_testSetGraterThanOne() { let paramsBove1 = [ ("1.1",1.1), ("1.2",1.2), @@ -1043,7 +1043,7 @@ extension TestJSONSerialization { } //test serialize values for whole integer where the input is in Double format - func excecute_testWholeNumbersWithDoubleAsInput() { + func execute_testWholeNumbersWithDoubleAsInput() { let paramsWholeNumbers = [ ("-1" ,-1.0), @@ -1057,7 +1057,7 @@ extension TestJSONSerialization { } } - func excecute_testWholeNumbersWithIntInput() { + func execute_testWholeNumbersWithIntInput() { for i in -10..<10 { let iStr = "\(i)" let testDict = [iStr : i] @@ -1065,10 +1065,10 @@ extension TestJSONSerialization { XCTAssertEqual(str!, "{\"\(iStr)\":\(i)}", "expect that serialized value should not contain trailing zero or decimal as they are whole numbers ") } } - excecute_testSetLessThanOne() - excecute_testSetGraterThanOne() - excecute_testWholeNumbersWithDoubleAsInput() - excecute_testWholeNumbersWithIntInput() + execute_testSetLessThanOne() + execute_testSetGraterThanOne() + execute_testWholeNumbersWithDoubleAsInput() + execute_testWholeNumbersWithIntInput() } func test_serialize_null() { diff --git a/Tests/Foundation/TestNSError.swift b/Tests/Foundation/TestNSError.swift index 5521895d3a..584da06c38 100644 --- a/Tests/Foundation/TestNSError.swift +++ b/Tests/Foundation/TestNSError.swift @@ -128,7 +128,7 @@ class TestNSError : XCTestCase { XCTAssertEqual((SwiftError.fortyTwo as NSError).code, 42) } - func test_ConvertErrorToNSError_errorCodeWithAssosiatedValue() { + func test_ConvertErrorToNSError_errorCodeWithAssociatedValue() { // Default error code for enum case is based on EnumImplStrategy::getTagIndex enum SwiftError: Error { case one // 2 diff --git a/Tests/Foundation/TestNSTextCheckingResult.swift b/Tests/Foundation/TestNSTextCheckingResult.swift index 725790276a..0a8f2eda9b 100644 --- a/Tests/Foundation/TestNSTextCheckingResult.swift +++ b/Tests/Foundation/TestNSTextCheckingResult.swift @@ -126,7 +126,7 @@ class TestNSTextCheckingResult: XCTestCase { } } - func test_loadedVauesMatch() throws { + func test_loadedValuesMatch() throws { for fixture in fixtures { try fixture.assertLoadedValuesMatch(areEqual(_:_:)) } diff --git a/Tests/Foundation/TestNotificationQueue.swift b/Tests/Foundation/TestNotificationQueue.swift index 85f3f76010..eb9f45d718 100644 --- a/Tests/Foundation/TestNotificationQueue.swift +++ b/Tests/Foundation/TestNotificationQueue.swift @@ -218,7 +218,7 @@ class TestNotificationQueue : XCTestCase { waitForExpectations(timeout: 0.2) // There is a small time gap between "e.fulfill()" - // and actuall thread termination. + // and actual thread termination. // We need a little delay to allow bgThread actually die. // Callers of this function are assuming thread is // deallocated after call. diff --git a/Tests/Foundation/TestNumberFormatter.swift b/Tests/Foundation/TestNumberFormatter.swift index 5560d643d5..bcd1b775b3 100644 --- a/Tests/Foundation/TestNumberFormatter.swift +++ b/Tests/Foundation/TestNumberFormatter.swift @@ -232,7 +232,7 @@ class TestNumberFormatter: XCTestCase { XCTAssertEqual(numberFormatter.secondaryGroupingSize, 0) } - func test_defaultCurrenyAccountingPropertyValues() { + func test_defaultCurrencyAccountingPropertyValues() { let numberFormatter = NumberFormatter() numberFormatter.numberStyle = .currencyAccounting numberFormatter.locale = Locale(identifier: "en_US") diff --git a/Tests/Foundation/TestScanner.swift b/Tests/Foundation/TestScanner.swift index f2b471e208..e5ef7a6741 100644 --- a/Tests/Foundation/TestScanner.swift +++ b/Tests/Foundation/TestScanner.swift @@ -81,7 +81,7 @@ class TestScanner : XCTestCase { expectEqual($0.scanDouble(), 0, "Parse '0.' as a Double") expectEqual($0.scanDouble(), 0.1, "Parse '.1' as a Double") expectEqual($0.scanDouble(), nil, "Dont parse '.' as a Double") - expectEqual($0.scanString("."), ".", "Consue '.'") + expectEqual($0.scanString("."), ".", "Consume '.'") expectEqual($0.scanDouble(), 100, "Parse '1e2' as a Double") expectEqual($0.scanDouble(), nil, "Dont parse 'e+3' as a Double") // "e+3" doesnt parse as Double expectEqual($0.scanString("e+3"), "e+3", "Consume the 'e+3'") @@ -174,7 +174,7 @@ class TestScanner : XCTestCase { expectEqual($0.scanInt64(), -1 as Int64, "Minus one") expectEqual($0.scanInt64(), -1 as Int64, "Minus one after whitespace") expectEqual($0.scanInt64(), Int64.min, "Min") - expectEqual($0.scanInt64(), Int64.max, "Max again after min (no joining it with preceding min even with ignroed whitespace)") + expectEqual($0.scanInt64(), Int64.max, "Max again after min (no joining it with preceding min even with ignored whitespace)") } // Overflow: diff --git a/Tests/Foundation/TestURLProtectionSpace.swift b/Tests/Foundation/TestURLProtectionSpace.swift index 83c5f22afa..c17de76a42 100644 --- a/Tests/Foundation/TestURLProtectionSpace.swift +++ b/Tests/Foundation/TestURLProtectionSpace.swift @@ -42,7 +42,7 @@ class TestURLProtectionSpace : XCTestCase { #if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT func test_createWithHTTPURLresponse() throws { - // Real responce from outlook.office365.com + // Real response from outlook.office365.com let headerFields1 = [ "Server": "Microsoft-IIS/10.0", "request-id": "c71c2202-4013-4d64-9319-d40aba6bbe5c", From 731f3aefe4ac98d3352ce256a20d7e49b000592a Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld Date: Wed, 20 Nov 2024 11:46:15 -0800 Subject: [PATCH 168/198] [Windows] FileManager.enumerator(at:) default error handler should continue rather than exiting (#5136) --- Sources/Foundation/FileManager+Win32.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/Foundation/FileManager+Win32.swift b/Sources/Foundation/FileManager+Win32.swift index 3f8c7f9cac..b761c3550a 100644 --- a/Sources/Foundation/FileManager+Win32.swift +++ b/Sources/Foundation/FileManager+Win32.swift @@ -322,11 +322,11 @@ extension FileManager { override func nextObject() -> Any? { func firstValidItem() -> URL? { while let url = _stack.popLast() { - if !FileManager.default.fileExists(atPath: url.path) { - guard let handler = _errorHandler else { return nil } - if !handler(url, _NSErrorWithWindowsError(GetLastError(), reading: true, paths: [url.path])) { + guard FileManager.default.fileExists(atPath: url.path) else { + if let handler = _errorHandler, !handler(url, _NSErrorWithWindowsError(GetLastError(), reading: true, paths: [url.path])) { return nil } + continue } _lastReturned = url return _lastReturned From c28bf23e18e217709dddd5c2c1b3ee1f2a4151cb Mon Sep 17 00:00:00 2001 From: "Giyeop Hyeon (Jamie)" Date: Thu, 21 Nov 2024 09:12:33 +0900 Subject: [PATCH 169/198] CGPoint, CGSize, CGRect Conforms Hashable (#5134) --- Sources/Foundation/NSGeometry.swift | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Sources/Foundation/NSGeometry.swift b/Sources/Foundation/NSGeometry.swift index be58ff0330..3dc58a2e48 100644 --- a/Sources/Foundation/NSGeometry.swift +++ b/Sources/Foundation/NSGeometry.swift @@ -39,7 +39,7 @@ extension CGPoint: Equatable { } } -extension CGPoint: NSSpecialValueCoding { +extension CGPoint: NSSpecialValueCoding, Hashable { init(bytes: UnsafeRawPointer) { self.x = bytes.load(as: CGFloat.self) self.y = bytes.load(fromByteOffset: MemoryLayout.stride, as: CGFloat.self) @@ -75,7 +75,7 @@ extension CGPoint: NSSpecialValueCoding { } } - func hash(into hasher: inout Hasher) { + public func hash(into hasher: inout Hasher) { hasher.combine(x) hasher.combine(y) } @@ -132,7 +132,7 @@ extension CGSize: Equatable { } } -extension CGSize: NSSpecialValueCoding { +extension CGSize: NSSpecialValueCoding, Hashable { init(bytes: UnsafeRawPointer) { self.width = bytes.load(as: CGFloat.self) self.height = bytes.load(fromByteOffset: MemoryLayout.stride, as: CGFloat.self) @@ -168,7 +168,7 @@ extension CGSize: NSSpecialValueCoding { } } - func hash(into hasher: inout Hasher) { + public func hash(into hasher: inout Hasher) { hasher.combine(width) hasher.combine(height) } @@ -451,7 +451,7 @@ public typealias NSRect = CGRect public typealias NSRectPointer = UnsafeMutablePointer public typealias NSRectArray = UnsafeMutablePointer -extension CGRect: NSSpecialValueCoding { +extension CGRect: NSSpecialValueCoding, Hashable { init(bytes: UnsafeRawPointer) { self.origin = CGPoint( x: bytes.load(as: CGFloat.self), @@ -491,7 +491,7 @@ extension CGRect: NSSpecialValueCoding { } } - func hash(into hasher: inout Hasher) { + public func hash(into hasher: inout Hasher) { origin.hash(into: &hasher) size.hash(into: &hasher) } From de3d58f48208d1d93a06edfa81a4e83fb23f6c81 Mon Sep 17 00:00:00 2001 From: Finagolfin Date: Fri, 6 Dec 2024 10:05:49 +0530 Subject: [PATCH 170/198] [android] Fix package manifest and one Bionic function's API version --- Package.swift | 11 ++++++----- Sources/CoreFoundation/CFPlatform.c | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Package.swift b/Package.swift index 2b5b5e0534..4a9dc5dc71 100644 --- a/Package.swift +++ b/Package.swift @@ -26,7 +26,7 @@ if let environmentPath = Context.environment["DISPATCH_INCLUDE_PATH"] { .unsafeFlags([ "-I/usr/lib/swift", "-I/usr/lib/swift/Block" - ], .when(platforms: [.linux, .android])) + ], .when(platforms: [.linux])) ) if let sdkRoot = Context.environment["SDKROOT"] { dispatchIncludeFlags.append(.unsafeFlags([ @@ -245,7 +245,8 @@ let package = Package( "BlockRuntime", "CMakeLists.txt" ], - cSettings: coreFoundationBuildSettings + cSettings: coreFoundationBuildSettings, + linkerSettings: [.linkedLibrary("log", .when(platforms: [.android]))] ), .target( name: "BlocksRuntime", @@ -262,7 +263,7 @@ let package = Package( name: "_CFXMLInterface", dependencies: [ "CoreFoundation", - .target(name: "Clibxml2", condition: .when(platforms: [.linux])), + .target(name: "Clibxml2", condition: .when(platforms: [.linux, .android])), ], path: "Sources/_CFXMLInterface", exclude: [ @@ -275,7 +276,7 @@ let package = Package( name: "_CFURLSessionInterface", dependencies: [ "CoreFoundation", - .target(name: "Clibcurl", condition: .when(platforms: [.linux])), + .target(name: "Clibcurl", condition: .when(platforms: [.linux, .android])), ], path: "Sources/_CFURLSessionInterface", exclude: [ @@ -348,7 +349,7 @@ let package = Package( "FoundationNetworking", "XCTest", "Testing", - .target(name: "xdgTestHelper", condition: .when(platforms: [.linux])) + .target(name: "xdgTestHelper", condition: .when(platforms: [.linux, .android])) ], resources: [ .copy("Foundation/Resources") diff --git a/Sources/CoreFoundation/CFPlatform.c b/Sources/CoreFoundation/CFPlatform.c index 83fbfd7743..90f4aa78df 100644 --- a/Sources/CoreFoundation/CFPlatform.c +++ b/Sources/CoreFoundation/CFPlatform.c @@ -2283,7 +2283,7 @@ CF_EXPORT int _CFPosixSpawnFileActionsChdir(_CFPosixSpawnFileActionsRef file_act // Glibc versions prior to 2.29 don't support posix_spawn_file_actions_addchdir_np, impacting: // - Amazon Linux 2 (EoL mid-2025) return ENOSYS; - #elif defined(__GLIBC__) || TARGET_OS_DARWIN || defined(__FreeBSD__) || defined(__ANDROID__) || defined(__musl__) + #elif defined(__GLIBC__) || TARGET_OS_DARWIN || defined(__FreeBSD__) || (defined(__ANDROID__) && __ANDROID_API__ >= 34) || defined(__musl__) // Pre-standard posix_spawn_file_actions_addchdir_np version available in: // - Solaris 11.3 (October 2015) // - Glibc 2.29 (February 2019) From 8255a77659534f845342515d30e0fdb3e01fefd5 Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld Date: Fri, 6 Dec 2024 15:51:17 -0800 Subject: [PATCH 171/198] Home directory for non-existent user should not fall back to /var/empty or %ALLUSERSPROFILE% (#5142) --- Tests/Foundation/TestFileManager.swift | 10 ++++------ Tests/Foundation/TestNSString.swift | 6 +----- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/Tests/Foundation/TestFileManager.swift b/Tests/Foundation/TestFileManager.swift index 1ed44a8b18..faff3631d4 100644 --- a/Tests/Foundation/TestFileManager.swift +++ b/Tests/Foundation/TestFileManager.swift @@ -929,8 +929,8 @@ class TestFileManager : XCTestCase { func test_homedirectoryForUser() { let filemanger = FileManager.default - XCTAssertNotNil(filemanger.homeDirectory(forUser: "someuser")) - XCTAssertNotNil(filemanger.homeDirectory(forUser: "")) + XCTAssertNil(filemanger.homeDirectory(forUser: "someuser")) + XCTAssertNil(filemanger.homeDirectory(forUser: "")) XCTAssertNotNil(filemanger.homeDirectoryForCurrentUser) } @@ -1268,15 +1268,13 @@ class TestFileManager : XCTestCase { let fm = FileManager.default #if os(Windows) - let defaultHomeDirectory = ProcessInfo.processInfo.environment["ALLUSERSPROFILE"]! let emptyFileNameError: CocoaError.Code? = .fileReadInvalidFileName #else - let defaultHomeDirectory = "/var/empty" let emptyFileNameError: CocoaError.Code? = nil #endif - XCTAssertEqual(fm.homeDirectory(forUser: ""), URL(filePath: defaultHomeDirectory, directoryHint: .isDirectory)) - XCTAssertEqual(NSHomeDirectoryForUser(""), defaultHomeDirectory) + XCTAssertNil(fm.homeDirectory(forUser: "")) + XCTAssertNil(NSHomeDirectoryForUser("")) XCTAssertThrowsError(try fm.contentsOfDirectory(atPath: "")) { let code = ($0 as? CocoaError)?.code diff --git a/Tests/Foundation/TestNSString.swift b/Tests/Foundation/TestNSString.swift index 130dbbd8c0..b3e24278a3 100644 --- a/Tests/Foundation/TestNSString.swift +++ b/Tests/Foundation/TestNSString.swift @@ -1047,11 +1047,7 @@ class TestNSString: LoopbackServerTest { let path = NSString(string: "~\(userName)/") let result = path.expandingTildeInPath // next assert fails in VirtualBox because home directory for unknown user resolved to /var/run/vboxadd - #if os(Windows) - XCTAssertEqual(result, ProcessInfo.processInfo.environment["ALLUSERSPROFILE"]) - #else - XCTAssertEqual(result, "/var/empty", "Return copy of receiver if home directory could not be resolved.") - #endif + XCTAssertEqual(result, "~\(userName)", "Return copy of receiver if home directory could not be resolved.") } } From fddda82649f8eff684c677ceea02b4e03f9e558e Mon Sep 17 00:00:00 2001 From: Michael Chiu Date: Sun, 8 Dec 2024 19:15:13 -0800 Subject: [PATCH 172/198] Fix FreeBSD build Various fixes to enable building on FreeBSD. Fixed an issue that warning messages from libthr can be emitted to stderr when thread specific data is used. This is due to CoreFoundation setting the TSD to `CF_TSD_BAD_PTR` even after `PTHERAD_DESTRUCTOR_ITERATIONS` iterators of dtor calls. This causes libthr to emit a warning to stderr about left-over non-null TSD after max destructor iterations. --- Sources/CoreFoundation/CFPlatform.c | 8 ++++++-- Sources/CoreFoundation/include/CoreFoundation.h | 2 +- .../internalInclude/CFBundle_Internal.h | 2 +- Sources/Foundation/FileManager+POSIX.swift | 2 +- Sources/Foundation/FileManager.swift | 8 +++++++- Sources/Foundation/Host.swift | 6 +++--- Sources/Foundation/NSLock.swift | 6 +++--- Sources/Foundation/NSPlatform.swift | 2 +- Sources/Foundation/Port.swift | 4 ++-- Sources/Foundation/Process.swift | 4 ++-- Sources/Foundation/Thread.swift | 13 ++++++++++--- 11 files changed, 37 insertions(+), 20 deletions(-) diff --git a/Sources/CoreFoundation/CFPlatform.c b/Sources/CoreFoundation/CFPlatform.c index 83fbfd7743..d9c4d5b6be 100644 --- a/Sources/CoreFoundation/CFPlatform.c +++ b/Sources/CoreFoundation/CFPlatform.c @@ -281,7 +281,7 @@ const char *_CFProcessPath(void) { #if TARGET_OS_MAC || TARGET_OS_WIN32 || TARGET_OS_BSD CF_CROSS_PLATFORM_EXPORT Boolean _CFIsMainThread(void) { -#if defined(__OpenBSD__) +#if defined(__OpenBSD__) || defined(__FreeBSD__) return pthread_equal(pthread_self(), _CFMainPThread) != 0; #else return pthread_main_np() == 1; @@ -928,9 +928,13 @@ static void __CFTSDFinalize(void *arg) { #if _POSIX_THREADS && !TARGET_OS_WASI if (table->destructorCount == PTHREAD_DESTRUCTOR_ITERATIONS - 1) { // On PTHREAD_DESTRUCTOR_ITERATIONS-1 call, destroy our data free(table); - + + // FreeBSD libthr emits debug message to stderr if there are leftover nonnull TSD after PTHREAD_DESTRUCTOR_ITERATIONS + // On this platform, the destructor will never be called again, therefore it is unneccessary to set the TSD to CF_TSD_BAD_PTR + #if !defined(FreeBSD) // Now if the destructor is called again we will take the shortcut at the beginning of this function. __CFTSDSetSpecific(CF_TSD_BAD_PTR); + #endif return; } #else diff --git a/Sources/CoreFoundation/include/CoreFoundation.h b/Sources/CoreFoundation/include/CoreFoundation.h index 64313f0b9f..027f067df3 100644 --- a/Sources/CoreFoundation/include/CoreFoundation.h +++ b/Sources/CoreFoundation/include/CoreFoundation.h @@ -74,7 +74,7 @@ #include "ForSwiftFoundationOnly.h" -#if TARGET_OS_OSX || TARGET_OS_IPHONE || TARGET_OS_WIN32 || TARGET_OS_LINUX || TARGET_OS_WASI +#if TARGET_OS_OSX || TARGET_OS_IPHONE || TARGET_OS_WIN32 || TARGET_OS_LINUX || TARGET_OS_WASI || TARGET_OS_BSD # if !TARGET_OS_WASI #include "CFMessagePort.h" #include "CFPlugIn.h" diff --git a/Sources/CoreFoundation/internalInclude/CFBundle_Internal.h b/Sources/CoreFoundation/internalInclude/CFBundle_Internal.h index 265e65de09..b087fca188 100644 --- a/Sources/CoreFoundation/internalInclude/CFBundle_Internal.h +++ b/Sources/CoreFoundation/internalInclude/CFBundle_Internal.h @@ -431,7 +431,7 @@ CF_PRIVATE const CFStringRef _kCFBundleUseAppleLocalizationsKey; // The buffer must be PATH_MAX long or more. static bool _CFGetPathFromFileDescriptor(int fd, char *path); -#if TARGET_OS_MAC || (TARGET_OS_BSD && !defined(__OpenBSD__)) +#if TARGET_OS_MAC || (TARGET_OS_BSD && !defined(__OpenBSD__) && !defined(__FreeBSD__)) static bool _CFGetPathFromFileDescriptor(int fd, char *path) { return fcntl(fd, F_GETPATH, path) != -1; diff --git a/Sources/Foundation/FileManager+POSIX.swift b/Sources/Foundation/FileManager+POSIX.swift index 845ca89221..e2fd67290c 100644 --- a/Sources/Foundation/FileManager+POSIX.swift +++ b/Sources/Foundation/FileManager+POSIX.swift @@ -89,7 +89,7 @@ extension FileManager { } urls = mountPoints(statBuf, Int(fsCount)) } -#elseif os(OpenBSD) +#elseif os(OpenBSD) || os(FreeBSD) func mountPoints(_ statBufs: UnsafePointer, _ fsCount: Int) -> [URL] { var urls: [URL] = [] diff --git a/Sources/Foundation/FileManager.swift b/Sources/Foundation/FileManager.swift index 5a68934853..2349717661 100644 --- a/Sources/Foundation/FileManager.swift +++ b/Sources/Foundation/FileManager.swift @@ -316,9 +316,15 @@ extension FileManager { flags |= flagsToSet flags &= ~flagsToUnset - guard chflags(fsRep, flags) == 0 else { +#if os(FreeBSD) + guard chflags(path, UInt(flags)) == 0 else { throw _NSErrorWithErrno(errno, reading: false, path: path) } +#else + guard chflags(path, flags) == 0 else { + throw _NSErrorWithErrno(errno, reading: false, path: path) + } +#endif #endif } diff --git a/Sources/Foundation/Host.swift b/Sources/Foundation/Host.swift index 6c4f5291f6..d6c32760c3 100644 --- a/Sources/Foundation/Host.swift +++ b/Sources/Foundation/Host.swift @@ -194,7 +194,7 @@ open class Host: NSObject { let family = ifa_addr.pointee.sa_family if family == sa_family_t(AF_INET) || family == sa_family_t(AF_INET6) { let sa_len: socklen_t = socklen_t((family == sa_family_t(AF_INET6)) ? MemoryLayout.size : MemoryLayout.size) -#if os(OpenBSD) +#if os(OpenBSD) || os(FreeBSD) let hostlen = size_t(NI_MAXHOST) #else let hostlen = socklen_t(NI_MAXHOST) @@ -294,7 +294,7 @@ open class Host: NSObject { } var hints = addrinfo() hints.ai_family = PF_UNSPEC -#if os(macOS) || os(iOS) || os(Android) || os(OpenBSD) || canImport(Musl) +#if os(macOS) || os(iOS) || os(Android) || os(OpenBSD) || canImport(Musl) || os(FreeBSD) hints.ai_socktype = SOCK_STREAM #else hints.ai_socktype = Int32(SOCK_STREAM.rawValue) @@ -324,7 +324,7 @@ open class Host: NSObject { } let sa_len: socklen_t = socklen_t((family == AF_INET6) ? MemoryLayout.size : MemoryLayout.size) let lookupInfo = { (content: inout [String], flags: Int32) in -#if os(OpenBSD) +#if os(OpenBSD) || os(FreeBSD) let hostlen = size_t(NI_MAXHOST) #else let hostlen = socklen_t(NI_MAXHOST) diff --git a/Sources/Foundation/NSLock.swift b/Sources/Foundation/NSLock.swift index fe1d08b775..6ea390f109 100644 --- a/Sources/Foundation/NSLock.swift +++ b/Sources/Foundation/NSLock.swift @@ -39,7 +39,7 @@ extension NSLocking { private typealias _MutexPointer = UnsafeMutablePointer private typealias _RecursiveMutexPointer = UnsafeMutablePointer private typealias _ConditionVariablePointer = UnsafeMutablePointer -#elseif CYGWIN || os(OpenBSD) +#elseif CYGWIN || os(OpenBSD) || os(FreeBSD) private typealias _MutexPointer = UnsafeMutablePointer private typealias _RecursiveMutexPointer = UnsafeMutablePointer private typealias _ConditionVariablePointer = UnsafeMutablePointer @@ -287,14 +287,14 @@ open class NSRecursiveLock: NSObject, NSLocking, @unchecked Sendable { InitializeConditionVariable(timeoutCond) InitializeSRWLock(timeoutMutex) #else -#if CYGWIN || os(OpenBSD) +#if CYGWIN || os(OpenBSD) || os(FreeBSD) var attrib : pthread_mutexattr_t? = nil #else var attrib = pthread_mutexattr_t() #endif withUnsafeMutablePointer(to: &attrib) { attrs in pthread_mutexattr_init(attrs) -#if os(OpenBSD) +#if os(OpenBSD) || os(FreeBSD) let type = Int32(PTHREAD_MUTEX_RECURSIVE.rawValue) #else let type = Int32(PTHREAD_MUTEX_RECURSIVE) diff --git a/Sources/Foundation/NSPlatform.swift b/Sources/Foundation/NSPlatform.swift index a18090265d..4b63904252 100644 --- a/Sources/Foundation/NSPlatform.swift +++ b/Sources/Foundation/NSPlatform.swift @@ -9,7 +9,7 @@ #if os(macOS) || os(iOS) fileprivate let _NSPageSize = Int(vm_page_size) -#elseif os(Linux) || os(Android) || os(OpenBSD) +#elseif os(Linux) || os(Android) || os(OpenBSD) || os(FreeBSD) fileprivate let _NSPageSize = Int(getpagesize()) #elseif os(Windows) import WinSDK diff --git a/Sources/Foundation/Port.swift b/Sources/Foundation/Port.swift index acef3c9960..39dbaf1fd5 100644 --- a/Sources/Foundation/Port.swift +++ b/Sources/Foundation/Port.swift @@ -107,7 +107,7 @@ fileprivate let FOUNDATION_SOCK_STREAM = SOCK_STREAM fileprivate let FOUNDATION_IPPROTO_TCP = IPPROTO_TCP #endif -#if canImport(Glibc) && !os(Android) && !os(OpenBSD) +#if canImport(Glibc) && !os(Android) && !os(OpenBSD) && !os(FreeBSD) import Glibc fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM.rawValue) fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) @@ -119,7 +119,7 @@ fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM) fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) #endif -#if canImport(Glibc) && os(Android) || os(OpenBSD) +#if canImport(Glibc) && os(Android) || os(OpenBSD) || os(FreeBSD) import Glibc fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM) fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) diff --git a/Sources/Foundation/Process.swift b/Sources/Foundation/Process.swift index 758dd1dfd4..81ab9ab610 100644 --- a/Sources/Foundation/Process.swift +++ b/Sources/Foundation/Process.swift @@ -779,7 +779,7 @@ open class Process: NSObject, @unchecked Sendable { } var taskSocketPair : [Int32] = [0, 0] -#if os(macOS) || os(iOS) || os(Android) || os(OpenBSD) || canImport(Musl) +#if os(macOS) || os(iOS) || os(Android) || os(OpenBSD) || os(FreeBSD) || canImport(Musl) socketpair(AF_UNIX, SOCK_STREAM, 0, &taskSocketPair) #else socketpair(AF_UNIX, Int32(SOCK_STREAM.rawValue), 0, &taskSocketPair) @@ -936,7 +936,7 @@ open class Process: NSObject, @unchecked Sendable { useFallbackChdir = false } -#if canImport(Darwin) || os(Android) || os(OpenBSD) +#if canImport(Darwin) || os(Android) || os(OpenBSD) || os(FreeBSD) var spawnAttrs: posix_spawnattr_t? = nil #else var spawnAttrs: posix_spawnattr_t = posix_spawnattr_t() diff --git a/Sources/Foundation/Thread.swift b/Sources/Foundation/Thread.swift index 5e79579c62..5a9a2a94f4 100644 --- a/Sources/Foundation/Thread.swift +++ b/Sources/Foundation/Thread.swift @@ -224,7 +224,7 @@ open class Thread : NSObject { get { _attrStorage.value } set { _attrStorage.value = newValue } } -#elseif CYGWIN || os(OpenBSD) +#elseif CYGWIN || os(OpenBSD) || os(FreeBSD) internal var _attr : pthread_attr_t? = nil #else internal var _attr = pthread_attr_t() @@ -264,7 +264,7 @@ open class Thread : NSObject { _status = .finished return } -#if CYGWIN || os(OpenBSD) +#if CYGWIN || os(OpenBSD) || os(FreeBSD) if let attr = self._attr { _thread = self.withRetainedReference { return _CFThreadCreate(attr, NSThreadStart, $0) @@ -388,6 +388,8 @@ open class Thread : NSObject { #elseif os(Windows) let count = RtlCaptureStackBackTrace(0, DWORD(maxSupportedStackDepth), addrs, nil) +#elseif os(FreeBSD) + let count = backtrace(addrs, maxSupportedStackDepth) #else let count = backtrace(addrs, Int32(maxSupportedStackDepth)) #endif @@ -449,7 +451,12 @@ open class Thread : NSObject { #else return backtraceAddresses({ (addrs, count) in var symbols: [String] = [] - if let bs = backtrace_symbols(addrs, Int32(count)) { +#if os(FreeBSD) + let bs = backtrace_symbols(addrs, count) +#else + let bs = backtrace_symbols(addrs, Int32(count)) +#endif + if let bs { symbols = UnsafeBufferPointer(start: bs, count: count).map { guard let symbol = $0 else { return "" From fef99303c8e2728028a863b4cb51fc218a7d64c8 Mon Sep 17 00:00:00 2001 From: Michael Chiu Date: Sun, 8 Dec 2024 22:13:34 -0800 Subject: [PATCH 173/198] typo --- Sources/CoreFoundation/CFPlatform.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/CoreFoundation/CFPlatform.c b/Sources/CoreFoundation/CFPlatform.c index d9c4d5b6be..8a6e2adf4f 100644 --- a/Sources/CoreFoundation/CFPlatform.c +++ b/Sources/CoreFoundation/CFPlatform.c @@ -931,7 +931,7 @@ static void __CFTSDFinalize(void *arg) { // FreeBSD libthr emits debug message to stderr if there are leftover nonnull TSD after PTHREAD_DESTRUCTOR_ITERATIONS // On this platform, the destructor will never be called again, therefore it is unneccessary to set the TSD to CF_TSD_BAD_PTR - #if !defined(FreeBSD) + #if !defined(__FreeBSD__) // Now if the destructor is called again we will take the shortcut at the beginning of this function. __CFTSDSetSpecific(CF_TSD_BAD_PTR); #endif From 9b2dde9f80e6852e245cf8eda03aee7da83fa4e7 Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Tue, 6 Aug 2024 13:33:31 -0700 Subject: [PATCH 174/198] Merge commit '246b3474fd4cb91d13b5ecb8fb5175aa6b50aa1e' into github/main --- .../include/ForSwiftFoundationOnly.h | 7 +++++++ .../internalInclude/CoreFoundation_Prefix.h | 5 +++++ Sources/Foundation/CGFloat.swift | 4 ++++ Sources/Foundation/FileHandle.swift | 7 ++++++- Sources/Foundation/FileManager+POSIX.swift | 19 +++++++++++++++---- Sources/Foundation/FileManager.swift | 2 ++ Sources/Foundation/Host.swift | 9 +++++---- Sources/Foundation/NSData.swift | 5 +++++ Sources/Foundation/NSError.swift | 2 ++ Sources/Foundation/NSLock.swift | 2 ++ Sources/Foundation/NSPathUtilities.swift | 2 ++ Sources/Foundation/NSPlatform.swift | 3 +++ Sources/Foundation/NSSwiftRuntime.swift | 2 ++ Sources/Foundation/NSURL.swift | 2 ++ Sources/Foundation/Port.swift | 11 ++++++++--- Sources/Foundation/Process.swift | 9 +++++++++ Sources/Foundation/Thread.swift | 2 ++ Sources/FoundationNetworking/HTTPCookie.swift | 2 ++ Sources/plutil/main.swift | 3 +++ Sources/xdgTestHelper/main.swift | 2 ++ Tests/Foundation/FTPServer.swift | 2 ++ Tests/Foundation/HTTPServer.swift | 2 ++ Tests/Foundation/TestFileHandle.swift | 4 +++- Tests/Foundation/TestNSData.swift | 8 ++++++++ Tests/Foundation/TestProcess.swift | 3 +++ Tests/Foundation/TestSocketPort.swift | 2 ++ Tests/Foundation/TestTimeZone.swift | 2 +- Tests/Foundation/TestURL.swift | 4 ++++ 28 files changed, 113 insertions(+), 14 deletions(-) diff --git a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h index 88fb3d361f..53a5d56052 100644 --- a/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForSwiftFoundationOnly.h @@ -69,6 +69,13 @@ #include #include #include +#include +#ifdef __swift__ +// The linux/stat header is private in the Android modulemap. +#pragma clang module import posix_filesystem.linux_stat +#else +#include +#endif #elif TARGET_OS_WASI #include #include diff --git a/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h index 6dea303681..20fc2bff9d 100644 --- a/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h +++ b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h @@ -109,6 +109,11 @@ typedef char * Class; #include #endif +#if TARGET_OS_ANDROID +#define HAVE_STRLCPY 1 +#define HAVE_STRLCAT 1 +#endif + #if TARGET_OS_WIN32 #define BOOL WINDOWS_BOOL diff --git a/Sources/Foundation/CGFloat.swift b/Sources/Foundation/CGFloat.swift index ffe3a6c6ff..c59977f88a 100644 --- a/Sources/Foundation/CGFloat.swift +++ b/Sources/Foundation/CGFloat.swift @@ -7,6 +7,10 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +#if canImport(Android) +import Android +#endif + @frozen public struct CGFloat: Sendable { #if arch(i386) || arch(arm) || arch(wasm32) diff --git a/Sources/Foundation/FileHandle.swift b/Sources/Foundation/FileHandle.swift index b07c49acca..7a985f2ef8 100644 --- a/Sources/Foundation/FileHandle.swift +++ b/Sources/Foundation/FileHandle.swift @@ -34,6 +34,11 @@ import WASILibc fileprivate let _read = WASILibc.read(_:_:_:) fileprivate let _write = WASILibc.write(_:_:_:) fileprivate let _close = WASILibc.close(_:) +#elseif canImport(Android) +import Android +fileprivate let _read = Android.read(_:_:_:) +fileprivate let _write = Android.write(_:_:_:) +fileprivate let _close = Android.close(_:) #endif #if canImport(WinSDK) @@ -324,7 +329,7 @@ open class FileHandle : NSObject, @unchecked Sendable { let data = mmap(nil, mapSize, PROT_READ, MAP_PRIVATE, _fd, 0) // Swift does not currently expose MAP_FAILURE if data != UnsafeMutableRawPointer(bitPattern: -1) { - return NSData.NSDataReadResult(bytes: data!, length: mapSize) { buffer, length in + return NSData.NSDataReadResult(bytes: data, length: mapSize) { buffer, length in munmap(buffer, length) } } diff --git a/Sources/Foundation/FileManager+POSIX.swift b/Sources/Foundation/FileManager+POSIX.swift index 845ca89221..7cd2c4b4ed 100644 --- a/Sources/Foundation/FileManager+POSIX.swift +++ b/Sources/Foundation/FileManager+POSIX.swift @@ -7,6 +7,10 @@ // #if !os(Windows) +#if canImport(Android) +import Android +#endif + #if os(Android) && (arch(i386) || arch(arm)) // struct stat.st_mode is UInt32 internal func &(left: UInt32, right: mode_t) -> mode_t { return mode_t(left) & right @@ -351,7 +355,14 @@ extension FileManager { defer { ps.deallocate() } ps.initialize(to: UnsafeMutablePointer(mutating: fsRep)) ps.advanced(by: 1).initialize(to: nil) - return fts_open(ps, FTS_PHYSICAL | FTS_XDEV | FTS_NOCHDIR | FTS_NOSTAT, nil) + return ps.withMemoryRebound(to: UnsafeMutablePointer.self, capacity: 2) { rebound_ps in +#if canImport(Android) + let arg = rebound_ps +#else + let arg = ps +#endif + return fts_open(arg, FTS_PHYSICAL | FTS_XDEV | FTS_NOCHDIR | FTS_NOSTAT, nil) + } } if _stream == nil { throw _NSErrorWithErrno(errno, reading: true, url: url) @@ -398,13 +409,13 @@ extension FileManager { _current = fts_read(stream) while let current = _current { - let filename = FileManager.default.string(withFileSystemRepresentation: current.pointee.fts_path, length: Int(current.pointee.fts_pathlen)) + let filename = FileManager.default.string(withFileSystemRepresentation: current.pointee.fts_path!, length: Int(current.pointee.fts_pathlen)) switch Int32(current.pointee.fts_info) { case FTS_D: let (showFile, skipDescendants) = match(filename: filename, to: _options, isDir: true) if skipDescendants { - fts_set(_stream, _current, FTS_SKIP) + fts_set(stream, _current!, FTS_SKIP) } if showFile { return URL(fileURLWithPath: filename, isDirectory: true) @@ -578,7 +589,7 @@ extension FileManager { let finalErrno = originalItemURL.withUnsafeFileSystemRepresentation { (originalFS) -> Int32? in return newItemURL.withUnsafeFileSystemRepresentation { (newItemFS) -> Int32? in // This is an atomic operation in many OSes, but is not guaranteed to be atomic by the standard. - if rename(newItemFS, originalFS) == 0 { + if rename(newItemFS!, originalFS!) == 0 { return nil } else { return errno diff --git a/Sources/Foundation/FileManager.swift b/Sources/Foundation/FileManager.swift index 5a68934853..c2295c033a 100644 --- a/Sources/Foundation/FileManager.swift +++ b/Sources/Foundation/FileManager.swift @@ -21,6 +21,8 @@ import WinSDK #if os(WASI) import WASILibc +#elseif canImport(Android) +import Android #endif #if os(Windows) diff --git a/Sources/Foundation/Host.swift b/Sources/Foundation/Host.swift index 6c4f5291f6..fb13063121 100644 --- a/Sources/Foundation/Host.swift +++ b/Sources/Foundation/Host.swift @@ -12,8 +12,9 @@ import WinSDK #endif -#if os(Android) - // Android Glibc differs a little with respect to the Linux Glibc. +#if canImport(Android) + import Android + // Android Bionic differs a little with respect to the Linux Glibc. // IFF_LOOPBACK is part of the enumeration net_device_flags, which needs to // convert to UInt32. @@ -24,8 +25,8 @@ import WinSDK } // getnameinfo uses size_t for its 4th and 6th arguments. - private func getnameinfo(_ addr: UnsafePointer?, _ addrlen: socklen_t, _ host: UnsafeMutablePointer?, _ hostlen: socklen_t, _ serv: UnsafeMutablePointer?, _ servlen: socklen_t, _ flags: Int32) -> Int32 { - return Glibc.getnameinfo(addr, addrlen, host, Int(hostlen), serv, Int(servlen), flags) + private func getnameinfo(_ addr: UnsafePointer, _ addrlen: socklen_t, _ host: UnsafeMutablePointer?, _ hostlen: socklen_t, _ serv: UnsafeMutablePointer?, _ servlen: socklen_t, _ flags: Int32) -> Int32 { + return Android.getnameinfo(addr, addrlen, host, Int(hostlen), serv, Int(servlen), flags) } // getifaddrs and freeifaddrs are not available in Android 6.0 or earlier, so call these functions dynamically. diff --git a/Sources/Foundation/NSData.swift b/Sources/Foundation/NSData.swift index ae54f971ec..65eb0d93e2 100644 --- a/Sources/Foundation/NSData.swift +++ b/Sources/Foundation/NSData.swift @@ -11,6 +11,9 @@ #if !os(WASI) import Dispatch #endif +#if canImport(Android) +import Android +#endif extension NSData { public typealias ReadingOptions = Data.ReadingOptions @@ -469,6 +472,8 @@ open class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding { let createMode = Int(Musl.S_IRUSR) | Int(Musl.S_IWUSR) | Int(Musl.S_IRGRP) | Int(Musl.S_IWGRP) | Int(Musl.S_IROTH) | Int(Musl.S_IWOTH) #elseif canImport(WASILibc) let createMode = Int(WASILibc.S_IRUSR) | Int(WASILibc.S_IWUSR) | Int(WASILibc.S_IRGRP) | Int(WASILibc.S_IWGRP) | Int(WASILibc.S_IROTH) | Int(WASILibc.S_IWOTH) +#elseif canImport(Android) + let createMode = Int(Android.S_IRUSR) | Int(Android.S_IWUSR) | Int(Android.S_IRGRP) | Int(Android.S_IWGRP) | Int(Android.S_IROTH) | Int(Android.S_IWOTH) #endif guard let fh = FileHandle(path: path, flags: flags, createMode: createMode) else { throw _NSErrorWithErrno(errno, reading: false, path: path) diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index 2b75bd4ffd..9543fb0c56 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -16,6 +16,8 @@ import Darwin import Glibc #elseif canImport(CRT) import CRT +#elseif canImport(Android) +import Android #endif @_implementationOnly import CoreFoundation diff --git a/Sources/Foundation/NSLock.swift b/Sources/Foundation/NSLock.swift index fe1d08b775..ddb63125d8 100644 --- a/Sources/Foundation/NSLock.swift +++ b/Sources/Foundation/NSLock.swift @@ -11,6 +11,8 @@ #if canImport(Glibc) import Glibc +#elseif canImport(Android) +import Android #endif #if os(Windows) diff --git a/Sources/Foundation/NSPathUtilities.swift b/Sources/Foundation/NSPathUtilities.swift index e9c300096c..ba8a48fad3 100644 --- a/Sources/Foundation/NSPathUtilities.swift +++ b/Sources/Foundation/NSPathUtilities.swift @@ -10,6 +10,8 @@ @_implementationOnly import CoreFoundation #if os(Windows) import WinSDK +#elseif canImport(Android) +import Android #elseif os(WASI) import WASILibc #endif diff --git a/Sources/Foundation/NSPlatform.swift b/Sources/Foundation/NSPlatform.swift index a18090265d..5424f5bb92 100644 --- a/Sources/Foundation/NSPlatform.swift +++ b/Sources/Foundation/NSPlatform.swift @@ -10,6 +10,9 @@ #if os(macOS) || os(iOS) fileprivate let _NSPageSize = Int(vm_page_size) #elseif os(Linux) || os(Android) || os(OpenBSD) +#if canImport(Android) +import Android +#endif fileprivate let _NSPageSize = Int(getpagesize()) #elseif os(Windows) import WinSDK diff --git a/Sources/Foundation/NSSwiftRuntime.swift b/Sources/Foundation/NSSwiftRuntime.swift index 03176c17cf..1509c31d71 100644 --- a/Sources/Foundation/NSSwiftRuntime.swift +++ b/Sources/Foundation/NSSwiftRuntime.swift @@ -19,6 +19,8 @@ internal import Synchronization @_exported import Glibc #elseif canImport(Musl) @_exported import Musl +#elseif canImport(Bionic) +@_exported import Bionic #elseif os(WASI) @_exported import WASILibc #elseif os(Windows) diff --git a/Sources/Foundation/NSURL.swift b/Sources/Foundation/NSURL.swift index fc22292b7e..4eb12a9e43 100644 --- a/Sources/Foundation/NSURL.swift +++ b/Sources/Foundation/NSURL.swift @@ -22,6 +22,8 @@ import Darwin import Glibc #elseif canImport(Musl) import Musl +#elseif canImport(Android) +import Android #endif // NOTE: this represents PLATFORM_PATH_STYLE diff --git a/Sources/Foundation/Port.swift b/Sources/Foundation/Port.swift index acef3c9960..404e0f4266 100644 --- a/Sources/Foundation/Port.swift +++ b/Sources/Foundation/Port.swift @@ -107,7 +107,7 @@ fileprivate let FOUNDATION_SOCK_STREAM = SOCK_STREAM fileprivate let FOUNDATION_IPPROTO_TCP = IPPROTO_TCP #endif -#if canImport(Glibc) && !os(Android) && !os(OpenBSD) +#if canImport(Glibc) && !os(OpenBSD) import Glibc fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM.rawValue) fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) @@ -119,14 +119,19 @@ fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM) fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) #endif -#if canImport(Glibc) && os(Android) || os(OpenBSD) +#if canImport(Glibc) || os(OpenBSD) import Glibc fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM) fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) fileprivate let INADDR_ANY: in_addr_t = 0 -#if os(OpenBSD) fileprivate let INADDR_LOOPBACK = 0x7f000001 #endif + +#if canImport(Android) +import Android +fileprivate let FOUNDATION_SOCK_STREAM = Int32(Android.SOCK_STREAM) +fileprivate let FOUNDATION_IPPROTO_TCP = Int32(Android.IPPROTO_TCP) +fileprivate let INADDR_ANY: in_addr_t = 0 #endif diff --git a/Sources/Foundation/Process.swift b/Sources/Foundation/Process.swift index 758dd1dfd4..7d6a1a3952 100644 --- a/Sources/Foundation/Process.swift +++ b/Sources/Foundation/Process.swift @@ -18,6 +18,8 @@ import struct WinSDK.HANDLE #if canImport(Darwin) import Darwin +#elseif canImport(Android) +import Android #endif internal import Synchronization @@ -940,6 +942,13 @@ open class Process: NSObject, @unchecked Sendable { var spawnAttrs: posix_spawnattr_t? = nil #else var spawnAttrs: posix_spawnattr_t = posix_spawnattr_t() +#endif +#if os(Android) + guard var spawnAttrs else { + throw NSError(domain: NSPOSIXErrorDomain, code: Int(errno), userInfo: [ + NSURLErrorKey:self.executableURL! + ]) + } #endif try _throwIfPosixError(posix_spawnattr_init(&spawnAttrs)) try _throwIfPosixError(posix_spawnattr_setflags(&spawnAttrs, .init(POSIX_SPAWN_SETPGROUP))) diff --git a/Sources/Foundation/Thread.swift b/Sources/Foundation/Thread.swift index 5e79579c62..c08fe68333 100644 --- a/Sources/Foundation/Thread.swift +++ b/Sources/Foundation/Thread.swift @@ -17,6 +17,8 @@ import WinSDK import Glibc #elseif canImport(Musl) import Musl +#elseif canImport(Android) +import Android #endif // WORKAROUND_SR9811 diff --git a/Sources/FoundationNetworking/HTTPCookie.swift b/Sources/FoundationNetworking/HTTPCookie.swift index e0d1cbbd9f..237c1daf55 100644 --- a/Sources/FoundationNetworking/HTTPCookie.swift +++ b/Sources/FoundationNetworking/HTTPCookie.swift @@ -15,6 +15,8 @@ import Foundation #if os(Windows) import WinSDK +#elseif canImport(Android) +import Android #endif public struct HTTPCookiePropertyKey : RawRepresentable, Equatable, Hashable, Sendable { diff --git a/Sources/plutil/main.swift b/Sources/plutil/main.swift index 29316d165b..b2b1996a10 100644 --- a/Sources/plutil/main.swift +++ b/Sources/plutil/main.swift @@ -15,6 +15,9 @@ import Glibc #elseif canImport(Musl) import Foundation import Musl +#elseif canImport(Android) +import Foundation +import Android #elseif canImport(CRT) import Foundation import CRT diff --git a/Sources/xdgTestHelper/main.swift b/Sources/xdgTestHelper/main.swift index d515a63f04..51ca70e51b 100644 --- a/Sources/xdgTestHelper/main.swift +++ b/Sources/xdgTestHelper/main.swift @@ -19,6 +19,8 @@ import FoundationNetworking #endif #if os(Windows) import WinSDK +#elseif os(Android) +import Android #endif enum HelperCheckStatus : Int32 { diff --git a/Tests/Foundation/FTPServer.swift b/Tests/Foundation/FTPServer.swift index bc3753baae..8328a7ff7e 100644 --- a/Tests/Foundation/FTPServer.swift +++ b/Tests/Foundation/FTPServer.swift @@ -15,6 +15,8 @@ import Dispatch import Glibc #elseif canImport(Darwin) import Darwin +#elseif canImport(Android) + import Android #endif final class ServerSemaphore : Sendable { diff --git a/Tests/Foundation/HTTPServer.swift b/Tests/Foundation/HTTPServer.swift index b1a18a61de..f5459ff4b3 100644 --- a/Tests/Foundation/HTTPServer.swift +++ b/Tests/Foundation/HTTPServer.swift @@ -21,6 +21,8 @@ import Dispatch import Darwin #elseif canImport(Glibc) import Glibc +#elseif canImport(Android) + import Android #endif #if !os(Windows) diff --git a/Tests/Foundation/TestFileHandle.swift b/Tests/Foundation/TestFileHandle.swift index f754361483..8650c207e2 100644 --- a/Tests/Foundation/TestFileHandle.swift +++ b/Tests/Foundation/TestFileHandle.swift @@ -19,6 +19,8 @@ import Dispatch #if os(Windows) import WinSDK +#elseif canImport(Android) +import Android #endif class TestFileHandle : XCTestCase { @@ -111,7 +113,7 @@ class TestFileHandle : XCTestCase { #else var fds: [Int32] = [-1, -1] fds.withUnsafeMutableBufferPointer { (pointer) -> Void in - pipe(pointer.baseAddress) + pipe(pointer.baseAddress!) } close(fds[1]) diff --git a/Tests/Foundation/TestNSData.swift b/Tests/Foundation/TestNSData.swift index 4ecb4eda2f..fc829994c7 100644 --- a/Tests/Foundation/TestNSData.swift +++ b/Tests/Foundation/TestNSData.swift @@ -10,6 +10,10 @@ import XCTest @testable import Foundation +#if canImport(Android) +import Android +#endif + class TestNSData: XCTestCase { class AllOnesImmutableData : NSData { @@ -213,6 +217,8 @@ class TestNSData: XCTestCase { let permission = try fileManager.attributesOfItem(atPath: url.path)[.posixPermissions] as? Int #if canImport(Darwin) let expected = Int(S_IRUSR) | Int(S_IWUSR) | Int(S_IRGRP) | Int(S_IWGRP) | Int(S_IROTH) | Int(S_IWOTH) +#elseif canImport(Android) + let expected = Int(Android.S_IRUSR) | Int(Android.S_IWUSR) | Int(Android.S_IRGRP) | Int(Android.S_IWGRP) | Int(Android.S_IROTH) | Int(Android.S_IWOTH) #else let expected = Int(Glibc.S_IRUSR) | Int(Glibc.S_IWUSR) | Int(Glibc.S_IRGRP) | Int(Glibc.S_IWGRP) | Int(Glibc.S_IROTH) | Int(Glibc.S_IWOTH) #endif @@ -236,6 +242,8 @@ class TestNSData: XCTestCase { let permission = try fileManager.attributesOfItem(atPath: url.path)[.posixPermissions] as? Int #if canImport(Darwin) let expected = Int(S_IRUSR) | Int(S_IWUSR) | Int(S_IRGRP) | Int(S_IWGRP) | Int(S_IROTH) | Int(S_IWOTH) +#elseif canImport(Android) + let expected = Int(Android.S_IRUSR) | Int(Android.S_IWUSR) | Int(Android.S_IRGRP) | Int(Android.S_IWGRP) | Int(Android.S_IROTH) | Int(Android.S_IWOTH) #else let expected = Int(Glibc.S_IRUSR) | Int(Glibc.S_IWUSR) | Int(Glibc.S_IRGRP) | Int(Glibc.S_IWGRP) | Int(Glibc.S_IROTH) | Int(Glibc.S_IWOTH) #endif diff --git a/Tests/Foundation/TestProcess.swift b/Tests/Foundation/TestProcess.swift index c0ec2268fe..219ae8b658 100644 --- a/Tests/Foundation/TestProcess.swift +++ b/Tests/Foundation/TestProcess.swift @@ -8,6 +8,9 @@ // import Synchronization +#if canImport(Android) +import Android +#endif class TestProcess : XCTestCase { diff --git a/Tests/Foundation/TestSocketPort.swift b/Tests/Foundation/TestSocketPort.swift index b79fb95073..0a6ec281a9 100644 --- a/Tests/Foundation/TestSocketPort.swift +++ b/Tests/Foundation/TestSocketPort.swift @@ -8,6 +8,8 @@ // #if os(Windows) import WinSDK +#elseif canImport(Android) +import Android #endif class TestPortDelegateWithBlock: NSObject, PortDelegate { diff --git a/Tests/Foundation/TestTimeZone.swift b/Tests/Foundation/TestTimeZone.swift index 6d2fbaf2ae..69b745df9f 100644 --- a/Tests/Foundation/TestTimeZone.swift +++ b/Tests/Foundation/TestTimeZone.swift @@ -164,7 +164,7 @@ class TestTimeZone: XCTestCase { var lt = tm() localtime_r(&t, <) let zoneName = NSTimeZone.system.abbreviation() ?? "Invalid Abbreviation" - let expectedName = String(cString: lt.tm_zone, encoding: .ascii) ?? "Invalid Zone" + let expectedName = String(cString: lt.tm_zone!, encoding: .ascii) ?? "Invalid Zone" XCTAssertEqual(zoneName, expectedName, "expected name \"\(expectedName)\" is not equal to \"\(zoneName)\"") } #endif diff --git a/Tests/Foundation/TestURL.swift b/Tests/Foundation/TestURL.swift index 4e044c05ec..cfd5eb258f 100644 --- a/Tests/Foundation/TestURL.swift +++ b/Tests/Foundation/TestURL.swift @@ -7,6 +7,10 @@ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // +#if canImport(Android) +import Android +#endif + let kURLTestParsingTestsKey = "ParsingTests" let kURLTestTitleKey = "In-Title" From 7f4bf4ba8597849af44b890c6ca205f364b29267 Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Tue, 6 Aug 2024 13:34:03 -0700 Subject: [PATCH 175/198] Fix fts_open now that apinotes are applied --- Sources/Foundation/FileManager+POSIX.swift | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/Sources/Foundation/FileManager+POSIX.swift b/Sources/Foundation/FileManager+POSIX.swift index 7cd2c4b4ed..72368ee5e3 100644 --- a/Sources/Foundation/FileManager+POSIX.swift +++ b/Sources/Foundation/FileManager+POSIX.swift @@ -355,14 +355,7 @@ extension FileManager { defer { ps.deallocate() } ps.initialize(to: UnsafeMutablePointer(mutating: fsRep)) ps.advanced(by: 1).initialize(to: nil) - return ps.withMemoryRebound(to: UnsafeMutablePointer.self, capacity: 2) { rebound_ps in -#if canImport(Android) - let arg = rebound_ps -#else - let arg = ps -#endif - return fts_open(arg, FTS_PHYSICAL | FTS_XDEV | FTS_NOCHDIR | FTS_NOSTAT, nil) - } + return fts_open(ps, FTS_PHYSICAL | FTS_XDEV | FTS_NOCHDIR | FTS_NOSTAT, nil) } if _stream == nil { throw _NSErrorWithErrno(errno, reading: true, url: url) From 5f40cce853e4a2a6f6631aaef8bed0005343c510 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Wed, 7 Aug 2024 08:50:27 -0700 Subject: [PATCH 176/198] Update Sources/Foundation/FileManager+POSIX.swift --- Sources/Foundation/FileManager+POSIX.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Foundation/FileManager+POSIX.swift b/Sources/Foundation/FileManager+POSIX.swift index 72368ee5e3..89bc95b101 100644 --- a/Sources/Foundation/FileManager+POSIX.swift +++ b/Sources/Foundation/FileManager+POSIX.swift @@ -408,7 +408,7 @@ extension FileManager { case FTS_D: let (showFile, skipDescendants) = match(filename: filename, to: _options, isDir: true) if skipDescendants { - fts_set(stream, _current!, FTS_SKIP) + fts_set(stream, current, FTS_SKIP) } if showFile { return URL(fileURLWithPath: filename, isDirectory: true) From e505ccf19d725350e7fc09ba247d8a15de387065 Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Wed, 11 Dec 2024 13:39:17 -0800 Subject: [PATCH 177/198] fix Port.swift conditional --- Sources/Foundation/Port.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Foundation/Port.swift b/Sources/Foundation/Port.swift index 404e0f4266..2185836818 100644 --- a/Sources/Foundation/Port.swift +++ b/Sources/Foundation/Port.swift @@ -119,7 +119,7 @@ fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM) fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) #endif -#if canImport(Glibc) || os(OpenBSD) +#if canImport(Glibc) && os(OpenBSD) import Glibc fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM) fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) From 90c4f5c128c64b6e819543c51b754474f78f9959 Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Wed, 11 Dec 2024 20:10:30 -0800 Subject: [PATCH 178/198] Ensure that the Android build on a windows host doesn't turn on WMO yet The windows host builds with the old driver for now, so it doesn't yet support wmo --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 62a9c6a225..861387e8bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,7 +42,7 @@ if(NOT SWIFT_SYSTEM_NAME) endif() # Don't enable WMO on Windows due to linker failures -if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows) +if(NOT CMAKE_HOST_SYSTEM_NAME STREQUAL Windows) # Enable whole module optimization for release builds & incremental for debug builds if(POLICY CMP0157) set(CMAKE_Swift_COMPILATION_MODE "$,wholemodule,incremental>") From 70ce5131e7564bac8a005b023cd1439c39b23bac Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Thu, 12 Dec 2024 10:19:22 -0800 Subject: [PATCH 179/198] [android] fix pthread flag inclusion in libxml2 package --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 861387e8bc..265c9d3de7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -150,6 +150,12 @@ if(NOT CMAKE_SYSTEM_NAME STREQUAL "WASI") "-I${DISPATCH_INCLUDE_PATH}/Block") endif() endif() +if(ANDROID) + # LibXml2 looks for the Threads package, so + # ensure that it doesn't try to use the `-pthread` + # flag on Android. + set(CMAKE_HAVE_LIBC_PTHREAD YES) +endif() find_package(LibXml2 REQUIRED) if(FOUNDATION_BUILD_NETWORKING) find_package(CURL REQUIRED) From 1da58eb5f807c2e7272d84407960282390c545af Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Thu, 12 Dec 2024 11:05:25 -0800 Subject: [PATCH 180/198] review fixes --- .../internalInclude/CoreFoundation_Prefix.h | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h index 20fc2bff9d..1cbefad215 100644 --- a/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h +++ b/Sources/CoreFoundation/internalInclude/CoreFoundation_Prefix.h @@ -109,11 +109,6 @@ typedef char * Class; #include #endif -#if TARGET_OS_ANDROID -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#endif - #if TARGET_OS_WIN32 #define BOOL WINDOWS_BOOL @@ -205,9 +200,9 @@ static dispatch_queue_t __ ## PREFIX ## Queue(void) { \ #endif // We know some things (Darwin, WASI, Glibc >= 2.38) have strlcpy/strlcat -#if TARGET_OS_MAC || TARGET_OS_WASI \ - || (defined(__GLIBC__) && \ - ((__GLIBC_MAJOR__ == 2 && __GLIBC_MINOR__ >= 38) \ +#if TARGET_OS_MAC || TARGET_OS_WASI || TARGET_OS_ANDROID \ + || (defined(__GLIBC__) && \ + ((__GLIBC_MAJOR__ == 2 && __GLIBC_MINOR__ >= 38) \ || __GLIBC_MAJOR__ > 2)) #define HAVE_STRLCPY 1 #define HAVE_STRLCAT 1 From bc2b9665ed77e392a3fa088229497c6a6ff2432e Mon Sep 17 00:00:00 2001 From: Finagolfin Date: Tue, 17 Dec 2024 15:36:53 +0530 Subject: [PATCH 181/198] [android] Use Bionic imports instead where possible --- Sources/Foundation/FileManager.swift | 4 ++-- Sources/Foundation/NSLock.swift | 4 ++-- Sources/Foundation/NSURL.swift | 4 ++-- Sources/Foundation/Thread.swift | 4 ++-- Sources/Testing/Testing.swift | 2 ++ Sources/plutil/main.swift | 4 ++-- Sources/xdgTestHelper/main.swift | 2 +- 7 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Sources/Foundation/FileManager.swift b/Sources/Foundation/FileManager.swift index c2295c033a..c28ee293b7 100644 --- a/Sources/Foundation/FileManager.swift +++ b/Sources/Foundation/FileManager.swift @@ -21,8 +21,8 @@ import WinSDK #if os(WASI) import WASILibc -#elseif canImport(Android) -import Android +#elseif canImport(Bionic) +import Bionic #endif #if os(Windows) diff --git a/Sources/Foundation/NSLock.swift b/Sources/Foundation/NSLock.swift index ddb63125d8..9d0fadc910 100644 --- a/Sources/Foundation/NSLock.swift +++ b/Sources/Foundation/NSLock.swift @@ -11,8 +11,8 @@ #if canImport(Glibc) import Glibc -#elseif canImport(Android) -import Android +#elseif canImport(Bionic) +import Bionic #endif #if os(Windows) diff --git a/Sources/Foundation/NSURL.swift b/Sources/Foundation/NSURL.swift index 4eb12a9e43..a9972c1ac2 100644 --- a/Sources/Foundation/NSURL.swift +++ b/Sources/Foundation/NSURL.swift @@ -22,8 +22,8 @@ import Darwin import Glibc #elseif canImport(Musl) import Musl -#elseif canImport(Android) -import Android +#elseif canImport(Bionic) +import Bionic #endif // NOTE: this represents PLATFORM_PATH_STYLE diff --git a/Sources/Foundation/Thread.swift b/Sources/Foundation/Thread.swift index c08fe68333..0985a4826d 100644 --- a/Sources/Foundation/Thread.swift +++ b/Sources/Foundation/Thread.swift @@ -17,8 +17,8 @@ import WinSDK import Glibc #elseif canImport(Musl) import Musl -#elseif canImport(Android) -import Android +#elseif canImport(Bionic) +import Bionic #endif // WORKAROUND_SR9811 diff --git a/Sources/Testing/Testing.swift b/Sources/Testing/Testing.swift index 712d9deef4..2483c14ed6 100644 --- a/Sources/Testing/Testing.swift +++ b/Sources/Testing/Testing.swift @@ -11,6 +11,8 @@ import Glibc #elseif canImport(Musl) import Musl +#elseif canImport(Bionic) +import Bionic #elseif os(WASI) import WASILibc #elseif canImport(CRT) diff --git a/Sources/plutil/main.swift b/Sources/plutil/main.swift index b2b1996a10..29584596d3 100644 --- a/Sources/plutil/main.swift +++ b/Sources/plutil/main.swift @@ -15,9 +15,9 @@ import Glibc #elseif canImport(Musl) import Foundation import Musl -#elseif canImport(Android) +#elseif canImport(Bionic) import Foundation -import Android +import Bionic #elseif canImport(CRT) import Foundation import CRT diff --git a/Sources/xdgTestHelper/main.swift b/Sources/xdgTestHelper/main.swift index 51ca70e51b..fb037e2435 100644 --- a/Sources/xdgTestHelper/main.swift +++ b/Sources/xdgTestHelper/main.swift @@ -19,7 +19,7 @@ import FoundationNetworking #endif #if os(Windows) import WinSDK -#elseif os(Android) +#elseif canImport(Android) import Android #endif From c466923dcaeeb058fc570f0e0cadbb04afb2b5df Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld Date: Wed, 15 Jan 2025 12:20:15 -0500 Subject: [PATCH 182/198] Fix race condition in __CFStringGetEightBitStringEncoding (#5155) --- Sources/CoreFoundation/include/ForFoundationOnly.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Sources/CoreFoundation/include/ForFoundationOnly.h b/Sources/CoreFoundation/include/ForFoundationOnly.h index 5bfea27735..b524163d4c 100644 --- a/Sources/CoreFoundation/include/ForFoundationOnly.h +++ b/Sources/CoreFoundation/include/ForFoundationOnly.h @@ -287,8 +287,11 @@ CF_EXPORT CFStringEncoding __CFDefaultEightBitStringEncoding; CF_EXPORT CFStringEncoding __CFStringComputeEightBitStringEncoding(void); CF_INLINE CFStringEncoding __CFStringGetEightBitStringEncoding(void) { - if (__CFDefaultEightBitStringEncoding == kCFStringEncodingInvalidId) __CFStringComputeEightBitStringEncoding(); - return __CFDefaultEightBitStringEncoding; + if (__CFDefaultEightBitStringEncoding == kCFStringEncodingInvalidId) { + return __CFStringComputeEightBitStringEncoding(); + } else { + return __CFDefaultEightBitStringEncoding; + } } enum { From 0129358ceac4e587b6340a52977ea75f8b4601d5 Mon Sep 17 00:00:00 2001 From: 3405691582 Date: Fri, 24 Jan 2025 12:03:57 -0500 Subject: [PATCH 183/198] Fix OpenBSD clause. (#5160) OpenBSD, as the comment string in _CFPosixSpawnFileActionsChdir says, doesn't have posix_spawn_file_actions_addchdir. Therefore, don't link against it; just return ENOSYS like other similarly situated platforms do. --- Sources/CoreFoundation/CFPlatform.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Sources/CoreFoundation/CFPlatform.c b/Sources/CoreFoundation/CFPlatform.c index 68e4b48013..186a6e8970 100644 --- a/Sources/CoreFoundation/CFPlatform.c +++ b/Sources/CoreFoundation/CFPlatform.c @@ -2287,6 +2287,10 @@ CF_EXPORT int _CFPosixSpawnFileActionsChdir(_CFPosixSpawnFileActionsRef file_act // Glibc versions prior to 2.29 don't support posix_spawn_file_actions_addchdir_np, impacting: // - Amazon Linux 2 (EoL mid-2025) return ENOSYS; + #elif defined(__OpenBSD__) + // Currently missing as of: + // - OpenBSD 7.5 (April 2024) + return ENOSYS; #elif defined(__GLIBC__) || TARGET_OS_DARWIN || defined(__FreeBSD__) || (defined(__ANDROID__) && __ANDROID_API__ >= 34) || defined(__musl__) // Pre-standard posix_spawn_file_actions_addchdir_np version available in: // - Solaris 11.3 (October 2015) @@ -2300,8 +2304,6 @@ CF_EXPORT int _CFPosixSpawnFileActionsChdir(_CFPosixSpawnFileActionsRef file_act // Standardized posix_spawn_file_actions_addchdir version (POSIX.1-2024, June 2024) available in: // - Solaris 11.4 (August 2018) // - NetBSD 10.0 (March 2024) - // Currently missing as of: - // - OpenBSD 7.5 (April 2024) // - QNX 8 (December 2023) return posix_spawn_file_actions_addchdir((posix_spawn_file_actions_t *)file_actions, path); #endif From 871e2885a62a9f69a3f3859989570efa44f1ea5e Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld Date: Mon, 10 Feb 2025 12:23:30 -0800 Subject: [PATCH 184/198] Disallow creation of CFStrings from non-8bit c-strings (#5165) --- Sources/CoreFoundation/CFString.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Sources/CoreFoundation/CFString.c b/Sources/CoreFoundation/CFString.c index d2b88aa6d3..b233293929 100644 --- a/Sources/CoreFoundation/CFString.c +++ b/Sources/CoreFoundation/CFString.c @@ -1294,6 +1294,12 @@ CF_PRIVATE CFStringRef __CFStringCreateImmutableFunnel3( Boolean possiblyExternalFormat, Boolean tryToReduceUnicode, Boolean hasLengthByte, Boolean hasNullByte, Boolean noCopy, CFAllocatorRef contentsDeallocator, UInt32 converterFlags) { + if (hasNullByte && !__CFStringEncodingIsSupersetOfASCII(encoding)) { + // Non-8bit encodings cannot be safely read as c-strings because they may contain many null bytes + // This was documented as invalid previously, but now we validate that eagerly here to prevent creating truncated strings or strings that incorrectly assume 8bit representation + HALT_MSG("CFStringCreateWithCString can only be called with an 8-bit encoding"); + } + CFMutableStringRef str = NULL; CFVarWidthCharBuffer vBuf; CFIndex size; @@ -2232,6 +2238,10 @@ static inline const char * _CFStringGetCStringPtrInternal(CFStringRef str, CFStr __CFAssertIsString(str); + // __CFStrHasNullByte(str) implies the string was created from a c-string + // All strings created from c-strings must be 8bit since c-strings are not possible with non-8bit encodings + // CFStringCreateWithCString validates that all strings created must have been created from bytes of an 8bit encoding, so __CFStrHasNullByte alone is sufficient here since it implies __CFStrIsEightBit + // For the non-null-terminated case, we must still validate that the underlying contents are an 8bit representation if ((!requiresNullTermination && __CFStrIsEightBit(str)) || __CFStrHasNullByte(str)) { // Note: this is called a lot, 27000 times to open a small xcode project with one file open. // Of these uses about 1500 are for cStrings/utf8strings. From bb396c4886b162f9fe2220cbb543f8002e153e42 Mon Sep 17 00:00:00 2001 From: Guoye Zhang Date: Mon, 10 Feb 2025 15:33:58 -0800 Subject: [PATCH 185/198] New HTTP loader for URLSession (#5162) --- Sources/Foundation/NSError.swift | 1 + Sources/Foundation/NSURLError.swift | 1 + Sources/FoundationNetworking/NSURLRequest.swift | 2 ++ Sources/FoundationNetworking/URLProtectionSpace.swift | 2 ++ Sources/FoundationNetworking/URLRequest.swift | 1 + .../URLSession/URLSessionConfiguration.swift | 9 ++++++--- .../URLSession/URLSessionTaskMetrics.swift | 1 + 7 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index 9543fb0c56..5d9d78672f 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -803,6 +803,7 @@ extension URLError { } /// The string for the URL which caused a load to fail. + @available(swift, deprecated: 6.1, message: "Use failingURL instead") public var failureURLString: String? { return _nsUserInfo[NSURLErrorFailingURLStringErrorKey] as? String } diff --git a/Sources/Foundation/NSURLError.swift b/Sources/Foundation/NSURLError.swift index a2fbb62b60..a3133962e1 100644 --- a/Sources/Foundation/NSURLError.swift +++ b/Sources/Foundation/NSURLError.swift @@ -20,6 +20,7 @@ public let NSURLErrorFailingURLErrorKey: String = "NSErrorFailingURLKey" /// The `NSError` userInfo dictionary key used to store and retrieve the NSString /// object for the URL which caused a load to fail. +@available(swift, deprecated: 6.1, message: "Use NSURLErrorFailingURLErrorKey instead") public let NSURLErrorFailingURLStringErrorKey: String = "NSErrorFailingURLStringKey" /// The `NSError` userInfo dictionary key used to store and retrieve the diff --git a/Sources/FoundationNetworking/NSURLRequest.swift b/Sources/FoundationNetworking/NSURLRequest.swift index cdda7bcadd..a0d179863c 100644 --- a/Sources/FoundationNetworking/NSURLRequest.swift +++ b/Sources/FoundationNetworking/NSURLRequest.swift @@ -373,6 +373,7 @@ open class NSURLRequest : NSObject, NSSecureCoding, NSCopying, NSMutableCopying open internal(set) var httpShouldHandleCookies: Bool = true + @available(swift, deprecated: 6.1, message: "HTTP/1 pipelining has known compatibility issues, please adopt HTTP/2 and HTTP/3 instead") open internal(set) var httpShouldUsePipelining: Bool = true open override var description: String { @@ -573,6 +574,7 @@ open class NSMutableURLRequest : NSURLRequest { set { super.httpShouldHandleCookies = newValue } } + @available(swift, deprecated: 6.1, message: "HTTP/1 pipelining has known compatibility issues, please adopt HTTP/2 and HTTP/3 instead") open override var httpShouldUsePipelining: Bool { get { return super.httpShouldUsePipelining } set { super.httpShouldUsePipelining = newValue } diff --git a/Sources/FoundationNetworking/URLProtectionSpace.swift b/Sources/FoundationNetworking/URLProtectionSpace.swift index 6470657bc5..26dcc234cf 100644 --- a/Sources/FoundationNetworking/URLProtectionSpace.swift +++ b/Sources/FoundationNetworking/URLProtectionSpace.swift @@ -29,6 +29,7 @@ public let NSURLProtectionSpaceHTTPS: String = "NSURLProtectionSpaceHTTPS" @const NSURLProtectionSpaceFTP @abstract The protocol for FTP */ +@available(swift, deprecated: 6.1, message: "FTP is deprecated") public let NSURLProtectionSpaceFTP: String = "NSURLProtectionSpaceFTP" /*! @@ -47,6 +48,7 @@ public let NSURLProtectionSpaceHTTPSProxy: String = "NSURLProtectionSpaceHTTPSPr @const NSURLProtectionSpaceFTPProxy @abstract The proxy type for ftp proxies */ +@available(swift, deprecated: 6.1, message: "FTP is deprecated") public let NSURLProtectionSpaceFTPProxy: String = "NSURLProtectionSpaceFTPProxy" /*! diff --git a/Sources/FoundationNetworking/URLRequest.swift b/Sources/FoundationNetworking/URLRequest.swift index f8ab4c8c7d..e87201e528 100644 --- a/Sources/FoundationNetworking/URLRequest.swift +++ b/Sources/FoundationNetworking/URLRequest.swift @@ -224,6 +224,7 @@ public struct URLRequest : ReferenceConvertible, Equatable, Hashable, Sendable { /// `true` if the receiver should transmit before the previous response /// is received. `false` if the receiver should wait for the previous response /// before transmitting. + @available(swift, deprecated: 6.1, message: "HTTP/1 pipelining has known compatibility issues, please adopt HTTP/2 and HTTP/3 instead") public var httpShouldUsePipelining: Bool { get { return _handle.map { $0.httpShouldUsePipelining } diff --git a/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift b/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift index 9236854f4c..89bb774dd7 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionConfiguration.swift @@ -204,6 +204,7 @@ open class URLSessionConfiguration : NSObject, NSCopying, @unchecked Sendable { */ /* Allow the use of HTTP pipelining */ + @available(swift, deprecated: 6.1, message: "HTTP/1 pipelining has known compatibility issues, please adopt HTTP/2 and HTTP/3 instead") open var httpShouldUsePipelining: Bool /* Allow the session to set cookies on requests */ @@ -229,9 +230,7 @@ open class URLSessionConfiguration : NSObject, NSCopying, @unchecked Sendable { /* The URL resource cache, or nil to indicate that no caching is to be performed */ open var urlCache: URLCache? - /* Enable extended background idle mode for any tcp sockets created. Enabling this mode asks the system to keep the socket open - * and delay reclaiming it when the process moves to the background (see https://developer.apple.com/library/ios/technotes/tn2277/_index.html) - */ + @available(swift, deprecated: 6.1, message: "Not supported") open var shouldUseExtendedBackgroundIdleMode: Bool /* An optional array of Class objects which subclass URLProtocol. @@ -253,6 +252,10 @@ open class URLSessionConfiguration : NSObject, NSCopying, @unchecked Sendable { @available(*, unavailable, message: "Not available on non-Darwin platforms") open var multipathServiceType: URLSessionConfiguration.MultipathServiceType { NSUnsupported() } + /* Uses the classic network loader */ + @available(*, unavailable, message: "Not available on non-Darwin platforms") + open var usesClassicLoadingMode: Bool { NSUnsupported() } + } @available(*, unavailable, message: "Not available on non-Darwin platforms") diff --git a/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift b/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift index 5de19fdeef..eaa0cdd030 100644 --- a/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift +++ b/Sources/FoundationNetworking/URLSession/URLSessionTaskMetrics.swift @@ -29,6 +29,7 @@ open class URLSessionTaskMetrics : NSObject, @unchecked Sendable { public enum ResourceFetchType: Int, Sendable { case unknown = 0 case networkLoad = 1 + @available(swift, deprecated: 6.1, message: "Server push is not supported") case serverPush = 2 case localCache = 3 } From 8caf77d12d55860ff87497d9e8de6351ad51d97c Mon Sep 17 00:00:00 2001 From: Tina Liu <49205802+itingliu@users.noreply.github.com> Date: Mon, 17 Feb 2025 14:13:55 -0800 Subject: [PATCH 186/198] Add an unknown case in case FoundationEssentials.Calendar exposes more calendar identifiers (#5169) --- Sources/Foundation/NSCalendar.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Sources/Foundation/NSCalendar.swift b/Sources/Foundation/NSCalendar.swift index 20774d22d9..465912e6a5 100644 --- a/Sources/Foundation/NSCalendar.swift +++ b/Sources/Foundation/NSCalendar.swift @@ -59,6 +59,9 @@ extension NSCalendar { case .republicOfChina: self = .republicOfChina case .islamicTabular: self = .islamicTabular case .islamicUmmAlQura: self = .islamicUmmAlQura + @unknown default: + // Default to gregorian if `FoundationEssentials.Calendar` adds more calendar that we do not support here yet + self = .gregorian } } From 35f5bcc3feba1fca3be2a5dafceb7aa2f45f9875 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Thu, 20 Feb 2025 16:22:38 -0800 Subject: [PATCH 187/198] Disable a base64 test while we investigate (#5174) --- Tests/Foundation/TestNSData.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Foundation/TestNSData.swift b/Tests/Foundation/TestNSData.swift index fc829994c7..87a999e9d4 100644 --- a/Tests/Foundation/TestNSData.swift +++ b/Tests/Foundation/TestNSData.swift @@ -461,7 +461,7 @@ class TestNSData: XCTestCase { XCTAssertEqual(encodedTextResult, encodedText) } - func test_base64EncodeDoesNotAddLineSeparatorsWhenStringFitsInLine() { + func disabled_test_base64EncodeDoesNotAddLineSeparatorsWhenStringFitsInLine() { XCTAssertEqual( Data(repeating: 0, count: 48).base64EncodedString(options: .lineLength64Characters), From fb8d64d0c5c185f021515ea761219ab68b5f1b5c Mon Sep 17 00:00:00 2001 From: finagolfin Date: Sat, 22 Feb 2025 15:29:11 +0530 Subject: [PATCH 188/198] Remove incorrect `guard` check for Android (#5171) --- Sources/Foundation/Process.swift | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Sources/Foundation/Process.swift b/Sources/Foundation/Process.swift index c3730cddf8..29fefb9d47 100644 --- a/Sources/Foundation/Process.swift +++ b/Sources/Foundation/Process.swift @@ -942,13 +942,6 @@ open class Process: NSObject, @unchecked Sendable { var spawnAttrs: posix_spawnattr_t? = nil #else var spawnAttrs: posix_spawnattr_t = posix_spawnattr_t() -#endif -#if os(Android) - guard var spawnAttrs else { - throw NSError(domain: NSPOSIXErrorDomain, code: Int(errno), userInfo: [ - NSURLErrorKey:self.executableURL! - ]) - } #endif try _throwIfPosixError(posix_spawnattr_init(&spawnAttrs)) try _throwIfPosixError(posix_spawnattr_setflags(&spawnAttrs, .init(POSIX_SPAWN_SETPGROUP))) From 9dd8777f14f2d59487faeb2cac5952d76cc08c53 Mon Sep 17 00:00:00 2001 From: Johannes Weiss Date: Wed, 26 Feb 2025 15:10:24 +0000 Subject: [PATCH 189/198] always @preconcurrency import Glibc/Musl (#5170) Co-authored-by: Johannes Weiss --- Sources/Foundation/CGFloat.swift | 2 +- Sources/Foundation/FileHandle.swift | 6 +++--- Sources/Foundation/FileManager+POSIX.swift | 2 +- Sources/Foundation/FileManager.swift | 2 +- Sources/Foundation/Host.swift | 2 +- Sources/Foundation/NSData.swift | 2 +- Sources/Foundation/NSError.swift | 4 ++-- Sources/Foundation/NSLock.swift | 4 ++-- Sources/Foundation/NSPathUtilities.swift | 2 +- Sources/Foundation/NSPlatform.swift | 2 +- Sources/Foundation/NSSwiftRuntime.swift | 6 +++--- Sources/Foundation/NSURL.swift | 6 +++--- Sources/Foundation/Port.swift | 8 ++++---- Sources/Foundation/Process.swift | 2 +- Sources/Foundation/Thread.swift | 6 +++--- Sources/FoundationNetworking/HTTPCookie.swift | 2 +- Sources/Testing/Testing.swift | 6 +++--- Sources/XCTest/Public/XCTestMain.swift | 2 +- Sources/plutil/main.swift | 6 +++--- Sources/xdgTestHelper/main.swift | 2 +- Tests/Foundation/FTPServer.swift | 4 ++-- Tests/Foundation/HTTPServer.swift | 4 ++-- Tests/Foundation/TestFileHandle.swift | 2 +- Tests/Foundation/TestNSData.swift | 2 +- Tests/Foundation/TestProcess.swift | 2 +- Tests/Foundation/TestSocketPort.swift | 2 +- Tests/Foundation/TestURL.swift | 2 +- 27 files changed, 46 insertions(+), 46 deletions(-) diff --git a/Sources/Foundation/CGFloat.swift b/Sources/Foundation/CGFloat.swift index c59977f88a..425ab259fe 100644 --- a/Sources/Foundation/CGFloat.swift +++ b/Sources/Foundation/CGFloat.swift @@ -8,7 +8,7 @@ // #if canImport(Android) -import Android +@preconcurrency import Android #endif @frozen diff --git a/Sources/Foundation/FileHandle.swift b/Sources/Foundation/FileHandle.swift index 7a985f2ef8..191348df7d 100644 --- a/Sources/Foundation/FileHandle.swift +++ b/Sources/Foundation/FileHandle.swift @@ -20,12 +20,12 @@ fileprivate let _read = Darwin.read(_:_:_:) fileprivate let _write = Darwin.write(_:_:_:) fileprivate let _close = Darwin.close(_:) #elseif canImport(Glibc) -import Glibc +@preconcurrency import Glibc fileprivate let _read = Glibc.read(_:_:_:) fileprivate let _write = Glibc.write(_:_:_:) fileprivate let _close = Glibc.close(_:) #elseif canImport(Musl) -import Musl +@preconcurrency import Musl fileprivate let _read = Musl.read(_:_:_:) fileprivate let _write = Musl.write(_:_:_:) fileprivate let _close = Musl.close(_:) @@ -35,7 +35,7 @@ fileprivate let _read = WASILibc.read(_:_:_:) fileprivate let _write = WASILibc.write(_:_:_:) fileprivate let _close = WASILibc.close(_:) #elseif canImport(Android) -import Android +@preconcurrency import Android fileprivate let _read = Android.read(_:_:_:) fileprivate let _write = Android.write(_:_:_:) fileprivate let _close = Android.close(_:) diff --git a/Sources/Foundation/FileManager+POSIX.swift b/Sources/Foundation/FileManager+POSIX.swift index e51aba6e72..c16f9b3956 100644 --- a/Sources/Foundation/FileManager+POSIX.swift +++ b/Sources/Foundation/FileManager+POSIX.swift @@ -8,7 +8,7 @@ #if !os(Windows) #if canImport(Android) -import Android +@preconcurrency import Android #endif #if os(Android) && (arch(i386) || arch(arm)) // struct stat.st_mode is UInt32 diff --git a/Sources/Foundation/FileManager.swift b/Sources/Foundation/FileManager.swift index 54864b85b4..f5dd433579 100644 --- a/Sources/Foundation/FileManager.swift +++ b/Sources/Foundation/FileManager.swift @@ -22,7 +22,7 @@ import WinSDK #if os(WASI) import WASILibc #elseif canImport(Bionic) -import Bionic +@preconcurrency import Bionic #endif #if os(Windows) diff --git a/Sources/Foundation/Host.swift b/Sources/Foundation/Host.swift index 7b72fb6b10..1a4aeb415e 100644 --- a/Sources/Foundation/Host.swift +++ b/Sources/Foundation/Host.swift @@ -13,7 +13,7 @@ import WinSDK #endif #if canImport(Android) - import Android + @preconcurrency import Android // Android Bionic differs a little with respect to the Linux Glibc. // IFF_LOOPBACK is part of the enumeration net_device_flags, which needs to diff --git a/Sources/Foundation/NSData.swift b/Sources/Foundation/NSData.swift index 65eb0d93e2..1a076beff7 100644 --- a/Sources/Foundation/NSData.swift +++ b/Sources/Foundation/NSData.swift @@ -12,7 +12,7 @@ import Dispatch #endif #if canImport(Android) -import Android +@preconcurrency import Android #endif extension NSData { diff --git a/Sources/Foundation/NSError.swift b/Sources/Foundation/NSError.swift index 5d9d78672f..d6a4d1868c 100644 --- a/Sources/Foundation/NSError.swift +++ b/Sources/Foundation/NSError.swift @@ -13,11 +13,11 @@ #if canImport(Darwin) import Darwin #elseif canImport(Glibc) -import Glibc +@preconcurrency import Glibc #elseif canImport(CRT) import CRT #elseif canImport(Android) -import Android +@preconcurrency import Android #endif @_implementationOnly import CoreFoundation diff --git a/Sources/Foundation/NSLock.swift b/Sources/Foundation/NSLock.swift index 5a2d06bfe0..938074d9e5 100644 --- a/Sources/Foundation/NSLock.swift +++ b/Sources/Foundation/NSLock.swift @@ -10,9 +10,9 @@ @_implementationOnly import CoreFoundation #if canImport(Glibc) -import Glibc +@preconcurrency import Glibc #elseif canImport(Bionic) -import Bionic +@preconcurrency import Bionic #endif #if os(Windows) diff --git a/Sources/Foundation/NSPathUtilities.swift b/Sources/Foundation/NSPathUtilities.swift index ba8a48fad3..0c1c163adc 100644 --- a/Sources/Foundation/NSPathUtilities.swift +++ b/Sources/Foundation/NSPathUtilities.swift @@ -11,7 +11,7 @@ #if os(Windows) import WinSDK #elseif canImport(Android) -import Android +@preconcurrency import Android #elseif os(WASI) import WASILibc #endif diff --git a/Sources/Foundation/NSPlatform.swift b/Sources/Foundation/NSPlatform.swift index 6a4636453a..522375bef9 100644 --- a/Sources/Foundation/NSPlatform.swift +++ b/Sources/Foundation/NSPlatform.swift @@ -11,7 +11,7 @@ fileprivate let _NSPageSize = Int(vm_page_size) #elseif os(Linux) || os(Android) || os(OpenBSD) || os(FreeBSD) #if canImport(Android) -import Android +@preconcurrency import Android #endif fileprivate let _NSPageSize = Int(getpagesize()) diff --git a/Sources/Foundation/NSSwiftRuntime.swift b/Sources/Foundation/NSSwiftRuntime.swift index 1509c31d71..1276a03b80 100644 --- a/Sources/Foundation/NSSwiftRuntime.swift +++ b/Sources/Foundation/NSSwiftRuntime.swift @@ -16,11 +16,11 @@ internal import Synchronization #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) @_exported import Darwin #elseif canImport(Glibc) -@_exported import Glibc +@_exported @preconcurrency import Glibc #elseif canImport(Musl) -@_exported import Musl +@_exported @preconcurrency import Musl #elseif canImport(Bionic) -@_exported import Bionic +@_exported @preconcurrency import Bionic #elseif os(WASI) @_exported import WASILibc #elseif os(Windows) diff --git a/Sources/Foundation/NSURL.swift b/Sources/Foundation/NSURL.swift index a9972c1ac2..88f6cd1108 100644 --- a/Sources/Foundation/NSURL.swift +++ b/Sources/Foundation/NSURL.swift @@ -19,11 +19,11 @@ internal let kCFURLWindowsPathStyle = CFURLPathStyle.cfurlWindowsPathStyle #if canImport(Darwin) import Darwin #elseif canImport(Glibc) -import Glibc +@preconcurrency import Glibc #elseif canImport(Musl) -import Musl +@preconcurrency import Musl #elseif canImport(Bionic) -import Bionic +@preconcurrency import Bionic #endif // NOTE: this represents PLATFORM_PATH_STYLE diff --git a/Sources/Foundation/Port.swift b/Sources/Foundation/Port.swift index be7374a9a8..7dc582b3bb 100644 --- a/Sources/Foundation/Port.swift +++ b/Sources/Foundation/Port.swift @@ -108,19 +108,19 @@ fileprivate let FOUNDATION_IPPROTO_TCP = IPPROTO_TCP #endif #if canImport(Glibc) && !os(OpenBSD) && !os(FreeBSD) -import Glibc +@preconcurrency import Glibc fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM.rawValue) fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) #endif #if canImport(Musl) -import Musl +@preconcurrency import Musl fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM) fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) #endif #if canImport(Glibc) && (os(OpenBSD) || os(FreeBSD)) -import Glibc +@preconcurrency import Glibc fileprivate let FOUNDATION_SOCK_STREAM = Int32(SOCK_STREAM) fileprivate let FOUNDATION_IPPROTO_TCP = Int32(IPPROTO_TCP) fileprivate let INADDR_ANY: in_addr_t = 0 @@ -128,7 +128,7 @@ fileprivate let INADDR_LOOPBACK = 0x7f000001 #endif #if canImport(Android) -import Android +@preconcurrency import Android fileprivate let FOUNDATION_SOCK_STREAM = Int32(Android.SOCK_STREAM) fileprivate let FOUNDATION_IPPROTO_TCP = Int32(Android.IPPROTO_TCP) fileprivate let INADDR_ANY: in_addr_t = 0 diff --git a/Sources/Foundation/Process.swift b/Sources/Foundation/Process.swift index 29fefb9d47..8e864ccb70 100644 --- a/Sources/Foundation/Process.swift +++ b/Sources/Foundation/Process.swift @@ -19,7 +19,7 @@ import struct WinSDK.HANDLE #if canImport(Darwin) import Darwin #elseif canImport(Android) -import Android +@preconcurrency import Android #endif internal import Synchronization diff --git a/Sources/Foundation/Thread.swift b/Sources/Foundation/Thread.swift index 4b9f3d1ddb..ac1aa0eed4 100644 --- a/Sources/Foundation/Thread.swift +++ b/Sources/Foundation/Thread.swift @@ -14,11 +14,11 @@ import WinSDK #endif #if canImport(Glibc) -import Glibc +@preconcurrency import Glibc #elseif canImport(Musl) -import Musl +@preconcurrency import Musl #elseif canImport(Bionic) -import Bionic +@preconcurrency import Bionic #endif // WORKAROUND_SR9811 diff --git a/Sources/FoundationNetworking/HTTPCookie.swift b/Sources/FoundationNetworking/HTTPCookie.swift index 237c1daf55..18a62776bb 100644 --- a/Sources/FoundationNetworking/HTTPCookie.swift +++ b/Sources/FoundationNetworking/HTTPCookie.swift @@ -16,7 +16,7 @@ import Foundation #if os(Windows) import WinSDK #elseif canImport(Android) -import Android +@preconcurrency import Android #endif public struct HTTPCookiePropertyKey : RawRepresentable, Equatable, Hashable, Sendable { diff --git a/Sources/Testing/Testing.swift b/Sources/Testing/Testing.swift index 2483c14ed6..601f9e28a5 100644 --- a/Sources/Testing/Testing.swift +++ b/Sources/Testing/Testing.swift @@ -8,11 +8,11 @@ // #if canImport(Glibc) -import Glibc +@preconcurrency import Glibc #elseif canImport(Musl) -import Musl +@preconcurrency import Musl #elseif canImport(Bionic) -import Bionic +@preconcurrency import Bionic #elseif os(WASI) import WASILibc #elseif canImport(CRT) diff --git a/Sources/XCTest/Public/XCTestMain.swift b/Sources/XCTest/Public/XCTestMain.swift index e19184e69f..2cfefbdbb5 100644 --- a/Sources/XCTest/Public/XCTestMain.swift +++ b/Sources/XCTest/Public/XCTestMain.swift @@ -27,7 +27,7 @@ #if canImport(Darwin) import Darwin #elseif canImport(Glibc) - import Glibc + @preconcurrency import Glibc #endif /// Starts a test run for the specified test cases. diff --git a/Sources/plutil/main.swift b/Sources/plutil/main.swift index 29584596d3..34b1d5e332 100644 --- a/Sources/plutil/main.swift +++ b/Sources/plutil/main.swift @@ -11,13 +11,13 @@ import Darwin import SwiftFoundation #elseif canImport(Glibc) import Foundation -import Glibc +@preconcurrency import Glibc #elseif canImport(Musl) import Foundation -import Musl +@preconcurrency import Musl #elseif canImport(Bionic) import Foundation -import Bionic +@preconcurrency import Bionic #elseif canImport(CRT) import Foundation import CRT diff --git a/Sources/xdgTestHelper/main.swift b/Sources/xdgTestHelper/main.swift index fb037e2435..769ac33882 100644 --- a/Sources/xdgTestHelper/main.swift +++ b/Sources/xdgTestHelper/main.swift @@ -20,7 +20,7 @@ import FoundationNetworking #if os(Windows) import WinSDK #elseif canImport(Android) -import Android +@preconcurrency import Android #endif enum HelperCheckStatus : Int32 { diff --git a/Tests/Foundation/FTPServer.swift b/Tests/Foundation/FTPServer.swift index 8328a7ff7e..8a27a210b2 100644 --- a/Tests/Foundation/FTPServer.swift +++ b/Tests/Foundation/FTPServer.swift @@ -12,11 +12,11 @@ import Dispatch #if canImport(Glibc) - import Glibc + @preconcurrency import Glibc #elseif canImport(Darwin) import Darwin #elseif canImport(Android) - import Android + @preconcurrency import Android #endif final class ServerSemaphore : Sendable { diff --git a/Tests/Foundation/HTTPServer.swift b/Tests/Foundation/HTTPServer.swift index f5459ff4b3..a6457f285f 100644 --- a/Tests/Foundation/HTTPServer.swift +++ b/Tests/Foundation/HTTPServer.swift @@ -20,9 +20,9 @@ import Dispatch #elseif canImport(Darwin) import Darwin #elseif canImport(Glibc) - import Glibc + @preconcurrency import Glibc #elseif canImport(Android) - import Android + @preconcurrency import Android #endif #if !os(Windows) diff --git a/Tests/Foundation/TestFileHandle.swift b/Tests/Foundation/TestFileHandle.swift index 8650c207e2..aa36f3ccde 100644 --- a/Tests/Foundation/TestFileHandle.swift +++ b/Tests/Foundation/TestFileHandle.swift @@ -20,7 +20,7 @@ import Dispatch #if os(Windows) import WinSDK #elseif canImport(Android) -import Android +@preconcurrency import Android #endif class TestFileHandle : XCTestCase { diff --git a/Tests/Foundation/TestNSData.swift b/Tests/Foundation/TestNSData.swift index 87a999e9d4..ffc9330147 100644 --- a/Tests/Foundation/TestNSData.swift +++ b/Tests/Foundation/TestNSData.swift @@ -11,7 +11,7 @@ import XCTest @testable import Foundation #if canImport(Android) -import Android +@preconcurrency import Android #endif class TestNSData: XCTestCase { diff --git a/Tests/Foundation/TestProcess.swift b/Tests/Foundation/TestProcess.swift index 219ae8b658..caa1fa9d20 100644 --- a/Tests/Foundation/TestProcess.swift +++ b/Tests/Foundation/TestProcess.swift @@ -9,7 +9,7 @@ import Synchronization #if canImport(Android) -import Android +@preconcurrency import Android #endif class TestProcess : XCTestCase { diff --git a/Tests/Foundation/TestSocketPort.swift b/Tests/Foundation/TestSocketPort.swift index 0a6ec281a9..521d809b25 100644 --- a/Tests/Foundation/TestSocketPort.swift +++ b/Tests/Foundation/TestSocketPort.swift @@ -9,7 +9,7 @@ #if os(Windows) import WinSDK #elseif canImport(Android) -import Android +@preconcurrency import Android #endif class TestPortDelegateWithBlock: NSObject, PortDelegate { diff --git a/Tests/Foundation/TestURL.swift b/Tests/Foundation/TestURL.swift index cfd5eb258f..36f9e38f67 100644 --- a/Tests/Foundation/TestURL.swift +++ b/Tests/Foundation/TestURL.swift @@ -8,7 +8,7 @@ // #if canImport(Android) -import Android +@preconcurrency import Android #endif let kURLTestParsingTestsKey = "ParsingTests" From d2de9754cf3de6780e447f63fc0985e42bd790d1 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Thu, 27 Feb 2025 09:40:59 -0800 Subject: [PATCH 190/198] Process: unwrap the `posix_spawnattr_t` on Android This is required as while `posix_spawnattr_init` permits a nullable type, `posix_spawnattr_setflags` properly expects a non-null parameter. Unwrap the newly minted spawnattr or abort if the allocation failed. --- Sources/Foundation/Process.swift | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Sources/Foundation/Process.swift b/Sources/Foundation/Process.swift index 8e864ccb70..5ebcbd5123 100644 --- a/Sources/Foundation/Process.swift +++ b/Sources/Foundation/Process.swift @@ -944,6 +944,12 @@ open class Process: NSObject, @unchecked Sendable { var spawnAttrs: posix_spawnattr_t = posix_spawnattr_t() #endif try _throwIfPosixError(posix_spawnattr_init(&spawnAttrs)) +#if os(Android) + guard var spawnAttrs else { + throw NSError(domain: NSPOSIXErrorDomain, code: Int(errno), + userInfo: [NSURLErrorKey:self.executableURL!]) + } +#endif try _throwIfPosixError(posix_spawnattr_setflags(&spawnAttrs, .init(POSIX_SPAWN_SETPGROUP))) #if canImport(Darwin) try _throwIfPosixError(posix_spawnattr_setflags(&spawnAttrs, .init(POSIX_SPAWN_CLOEXEC_DEFAULT))) From a563acec95f721223859b2e704843f6ca78611e7 Mon Sep 17 00:00:00 2001 From: Fabrice de Gans Date: Thu, 27 Feb 2025 11:07:37 -0800 Subject: [PATCH 191/198] Set CMP0157 to OLD for Android There is no early swift-driver build for the Windows toolchain. As a result, swift-collections fails to build properly when CMP0157 is set to NEW due to object files not being generated. This sets CMP0157 to OLD when targetting Android until the early swift-driver is available on Windows. --- CMakeLists.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 265c9d3de7..762430295c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,8 +22,15 @@ if(POLICY CMP0156) endif() if(POLICY CMP0157) - # New Swift build model: improved incremental build performance and LSP support - cmake_policy(SET CMP0157 NEW) + if(CMAKE_SYSTEM_NAME STREQUAL Android) + # CMP0157 causes swift-collections to fail to compile when targetting + # Android on Windows due to swift-driver not being present during the + # toolchain build. Disable it for now. + cmake_policy(SET CMP0157 OLD) + else() + # New Swift build model: improved incremental build performance and LSP support + cmake_policy(SET CMP0157 NEW) + endif() endif() if (NOT DEFINED CMAKE_C_COMPILER) From 853b68167d1ea012b732aa19eecebfbd9e3b10fd Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Sat, 1 Mar 2025 21:33:37 -0800 Subject: [PATCH 192/198] CoreFoundation: adjust declaration of private SPI The SPI declaration for `libdispatch_init` was not attribtued properly. The result of this omission was an improper reference to the function on Windows when disaptch is _not_ linked statically. Correct the declaration by re-using the `DISPATCH_EXPORT` macro to decorate the declaration with the appropriate DLLStorage as necessary. This was caught by running the Foundation tests with SPM with a refactoring of the toolchain layout during the build. --- Sources/CoreFoundation/CFRuntime.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Sources/CoreFoundation/CFRuntime.c b/Sources/CoreFoundation/CFRuntime.c index 11c20ff0c1..3336852904 100644 --- a/Sources/CoreFoundation/CFRuntime.c +++ b/Sources/CoreFoundation/CFRuntime.c @@ -45,6 +45,10 @@ OBJC_EXPORT void *objc_destructInstance(id obj); #include #endif +#if __HAS_DISPATCH__ && !TARGET_OS_MAC +#include +#endif + enum { // retain/release recording constants -- must match values // used by OA for now; probably will change in the future @@ -1165,8 +1169,8 @@ CF_EXPORT CF_PRIVATE os_unfair_recursive_lock CFPlugInGlobalDataLock; -#if __HAS_DISPATCH__ -extern void libdispatch_init(); +#if __HAS_DISPATCH__ && !TARGET_OS_MAC +DISPATCH_EXPORT void libdispatch_init(); #endif void __CFInitialize(void) { From 01576d74016e2d611bca898cd678be1bc44a8525 Mon Sep 17 00:00:00 2001 From: Fabrice de Gans Date: Mon, 3 Mar 2025 09:28:06 -0800 Subject: [PATCH 193/198] Set CMP0157 to OLD only for Windows hosts --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 762430295c..c0d46e43cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,7 @@ if(POLICY CMP0156) endif() if(POLICY CMP0157) - if(CMAKE_SYSTEM_NAME STREQUAL Android) + if(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows AND CMAKE_SYSTEM_NAME STREQUAL Android) # CMP0157 causes swift-collections to fail to compile when targetting # Android on Windows due to swift-driver not being present during the # toolchain build. Disable it for now. From 4a9694d396b34fb198f4c6dd865702f7dc0b0dcf Mon Sep 17 00:00:00 2001 From: Jason Toffaletti Date: Wed, 5 Mar 2025 14:00:57 -0800 Subject: [PATCH 194/198] ensure curlver.h has been included before checking LIBCURL_VERSION (#5159) - move all LIBCURL_VERSION_MAJOR checks into CFURLSessionInterface.c - modify EasyHandle.swift to use the byproducts of libcurl version checks --- .../URLSession/libcurl/EasyHandle.swift | 6 ++--- .../CFURLSessionInterface.c | 27 ++++++++++++++++++- .../include/CFURLSessionInterface.h | 26 +----------------- 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift index cdf8875fce..e9b90a23f1 100644 --- a/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift +++ b/Sources/FoundationNetworking/URLSession/libcurl/EasyHandle.swift @@ -29,15 +29,15 @@ import Dispatch // These helper functions avoid warnings about "will never be executed" code which checks the availability of the underlying libcurl features. internal func curlInfoCAInfoSupported() -> Bool { - NS_CURL_CURLINFO_CAINFO_SUPPORTED == 1 + CFURLSessionInfoCAINFO.value != CFURLSessionInfoNONE.value } internal func maxHostConnectionsSupported() -> Bool { - NS_CURL_MAX_HOST_CONNECTIONS_SUPPORTED == 1 + CFURLSessionMultiOptionMAX_HOST_CONNECTIONS.value != 0 } internal func xferInfoFunctionSupported() -> Bool { - NS_CURL_XFERINFOFUNCTION_SUPPORTED == 1 + CFURLSessionOptionXFERINFOFUNCTION.value != 0 } /// Minimal wrapper around the [curl easy interface](https://curl.haxx.se/libcurl/c/) diff --git a/Sources/_CFURLSessionInterface/CFURLSessionInterface.c b/Sources/_CFURLSessionInterface/CFURLSessionInterface.c index e493ad77e8..327397fe78 100644 --- a/Sources/_CFURLSessionInterface/CFURLSessionInterface.c +++ b/Sources/_CFURLSessionInterface/CFURLSessionInterface.c @@ -23,6 +23,31 @@ #include "CFString.h" #include +#if !defined(LIBCURL_VERSION_MAJOR) +#error "LIBCURL_VERSION_MAJOR not defined, missing curlver.h" +#endif + +// 7.84.0 or later +#if LIBCURL_VERSION_MAJOR > 7 || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR > 84) || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR == 84 && LIBCURL_VERSION_PATCH >= 0) +#define NS_CURL_CURLINFO_CAINFO_SUPPORTED 1 +#else +#define NS_CURL_CURLINFO_CAINFO_SUPPORTED 0 +#endif + +// 7.30.0 or later +#if LIBCURL_VERSION_MAJOR > 7 || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR > 30) || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR == 30 && LIBCURL_VERSION_PATCH >= 0) +#define NS_CURL_MAX_HOST_CONNECTIONS_SUPPORTED 1 +#else +#define NS_CURL_MAX_HOST_CONNECTIONS_SUPPORTED 0 +#endif + +// 7.32.0 or later +#if LIBCURL_VERSION_MAJOR > 7 || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR > 32) || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR == 32 && LIBCURL_VERSION_PATCH >= 0) +#define NS_CURL_XFERINFOFUNCTION_SUPPORTED 1 +#else +#define NS_CURL_XFERINFOFUNCTION_SUPPORTED 0 +#endif + FILE* aa = NULL; CURL * gcurl = NULL; @@ -223,7 +248,7 @@ CFURLSessionEasyCode const CFURLSessionEasyCodeFTP_COULDNT_RETR_FILE = { CURLE_F #if LIBCURL_VERSION_MAJOR > 7 || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR > 67) || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR == 67 && LIBCURL_VERSION_PATCH >= 1) CFURLSessionEasyCode const CFURLSessionEasyCodeHTTP3 = { CURLE_HTTP3 }; #else -CFURLSessionEasyCode const CFURLSessionEasyCodeOBSOLETE20 = { CURLE_OBSOLETE20 }; +CFURLSessionEasyCode const CFURLSessionEasyCodeHTTP3 = { CURLE_OBSOLETE20 }; #endif CFURLSessionEasyCode const CFURLSessionEasyCodeQUOTE_ERROR = { CURLE_QUOTE_ERROR }; CFURLSessionEasyCode const CFURLSessionEasyCodeHTTP_RETURNED_ERROR = { CURLE_HTTP_RETURNED_ERROR }; diff --git a/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h b/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h index 64c3495543..c6ca3766be 100644 --- a/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h +++ b/Sources/_CFURLSessionInterface/include/CFURLSessionInterface.h @@ -35,26 +35,6 @@ #include #endif -// 7.84.0 or later -#if LIBCURL_VERSION_MAJOR > 7 || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR > 84) || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR == 84 && LIBCURL_VERSION_PATCH >= 0) -#define NS_CURL_CURLINFO_CAINFO_SUPPORTED 1 -#else -#define NS_CURL_CURLINFO_CAINFO_SUPPORTED 0 -#endif - -// 7.30.0 or later -#if LIBCURL_VERSION_MAJOR > 7 || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR > 30) || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR == 30 && LIBCURL_VERSION_PATCH >= 0) -#define NS_CURL_MAX_HOST_CONNECTIONS_SUPPORTED 1 -#else -#define NS_CURL_MAX_HOST_CONNECTIONS_SUPPORTED 0 -#endif - -// 7.32.0 or later -#if LIBCURL_VERSION_MAJOR > 7 || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR > 32) || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR == 32 && LIBCURL_VERSION_PATCH >= 0) -#define NS_CURL_XFERINFOFUNCTION_SUPPORTED 1 -#else -#define NS_CURL_XFERINFOFUNCTION_SUPPORTED 0 -#endif CF_IMPLICIT_BRIDGING_ENABLED CF_EXTERN_C_BEGIN @@ -104,11 +84,7 @@ CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeFTP_CANT_GET_HOST; // C CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeFTP_COULDNT_SET_TYPE; // CURLE_FTP_COULDNT_SET_TYPE CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodePARTIAL_FILE; // CURLE_PARTIAL_FILE CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeFTP_COULDNT_RETR_FILE; // CURLE_FTP_COULDNT_RETR_FILE -#if LIBCURL_VERSION_MAJOR > 7 || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR > 67) || (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR == 67 && LIBCURL_VERSION_PATCH >= 1) -CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeHTTP3; // CURLE_HTTP3 -#else -CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeOBSOLETE20; // CURLE_OBSOLETE20 -#endif +CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeHTTP3; // CURLE_HTTP3 || CURLE_OBSOLETE20 CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeQUOTE_ERROR; // CURLE_QUOTE_ERROR CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeHTTP_RETURNED_ERROR; // CURLE_HTTP_RETURNED_ERROR CF_EXPORT CFURLSessionEasyCode const CFURLSessionEasyCodeWRITE_ERROR; // CURLE_WRITE_ERROR From 15022ff98da1ee10cff7fd6523e479b87ef888ca Mon Sep 17 00:00:00 2001 From: Jeremy Schonfeld Date: Thu, 20 Mar 2025 14:08:56 -0700 Subject: [PATCH 195/198] Pass -fno-omit-frame-pointer on Linux (#5191) --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index c0d46e43cc..da372ef7d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,6 +124,11 @@ add_compile_definitions( if(CMAKE_SYSTEM_NAME STREQUAL Linux) check_symbol_exists(sched_getaffinity "sched.h" HAVE_SCHED_GETAFFINITY) add_compile_definitions($<$:HAVE_SCHED_GETAFFINITY>) + + # Pass -fno-omit-frame-pointer while compiling for better backtraces + add_compile_options( + "$<$:SHELL:-Xcc -fno-omit-frame-pointer>" + "$<$:-fno-omit-frame-pointer>") endif() # Precompute module triple for installation From cb4ee87b53772737959cb878b981cf666813a6ea Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Mon, 24 Mar 2025 09:27:31 -0700 Subject: [PATCH 196/198] Deprecate cString on non-Darwin (#3885) (#5190) * Deprecate cString on non-Darwin (#3885) * Address review feedback * Undeprecate one version of the API, which can be implemented correctly --- Sources/Foundation/NSConcreteValue.swift | 1 + Sources/Foundation/NSSpecialValue.swift | 1 + Sources/Foundation/NSString.swift | 56 ++++++++++++++---------- Sources/Foundation/NSStringAPI.swift | 5 +-- Tests/Foundation/TestNSString.swift | 6 +++ 5 files changed, 42 insertions(+), 27 deletions(-) diff --git a/Sources/Foundation/NSConcreteValue.swift b/Sources/Foundation/NSConcreteValue.swift index c28f5b2547..9b121f8000 100644 --- a/Sources/Foundation/NSConcreteValue.swift +++ b/Sources/Foundation/NSConcreteValue.swift @@ -97,6 +97,7 @@ internal class NSConcreteValue : NSValue, @unchecked Sendable { value.copyMemory(from: self._storage, byteCount: self._size) } + @available(*, deprecated, message: "On platforms without Objective-C autorelease pools, use withCString instead") override var objCType : UnsafePointer { return NSString(self._typeInfo.name).utf8String! // XXX leaky } diff --git a/Sources/Foundation/NSSpecialValue.swift b/Sources/Foundation/NSSpecialValue.swift index 3f95cc47eb..055fabdc9d 100644 --- a/Sources/Foundation/NSSpecialValue.swift +++ b/Sources/Foundation/NSSpecialValue.swift @@ -97,6 +97,7 @@ internal class NSSpecialValue : NSValue, @unchecked Sendable { _value.encodeWithCoder(aCoder) } + @available(*, deprecated, message: "On platforms without Objective-C autorelease pools, use withCString instead") override var objCType : UnsafePointer { let typeName = NSSpecialValue._objCTypeFromType(type(of: _value)) return typeName!._bridgeToObjectiveC().utf8String! // leaky diff --git a/Sources/Foundation/NSString.swift b/Sources/Foundation/NSString.swift index 79ec002d5b..88379a9351 100644 --- a/Sources/Foundation/NSString.swift +++ b/Sources/Foundation/NSString.swift @@ -160,32 +160,19 @@ internal func _createRegexForPattern(_ pattern: String, _ options: NSRegularExpr return regex } -internal func _bytesInEncoding(_ str: NSString, _ encoding: String.Encoding, _ fatalOnError: Bool, _ externalRep: Bool, _ lossy: Bool) -> UnsafePointer? { - let theRange = NSRange(location: 0, length: str.length) +// Caller must free, or leak, the pointer +fileprivate func _allocateBytesInEncoding(_ str: NSString, _ encoding: String.Encoding) -> UnsafeMutableBufferPointer? { + let theRange: NSRange = NSRange(location: 0, length: str.length) var cLength = 0 - var used = 0 - var options: NSString.EncodingConversionOptions = [] - if externalRep { - options.formUnion(.externalRepresentation) - } - if lossy { - options.formUnion(.allowLossy) - } - if !str.getBytes(nil, maxLength: Int.max - 1, usedLength: &cLength, encoding: encoding.rawValue, options: options, range: theRange, remaining: nil) { - if fatalOnError { - fatalError("Conversion on encoding failed") - } + if !str.getBytes(nil, maxLength: Int.max - 1, usedLength: &cLength, encoding: encoding.rawValue, options: [], range: theRange, remaining: nil) { return nil } - let buffer = malloc(cLength + 1)!.bindMemory(to: Int8.self, capacity: cLength + 1) - if !str.getBytes(buffer, maxLength: cLength, usedLength: &used, encoding: encoding.rawValue, options: options, range: theRange, remaining: nil) { - fatalError("Internal inconsistency; previously claimed getBytes returned success but failed with similar invocation") - } + let buffer = UnsafeMutableBufferPointer.allocate(capacity: cLength + 1) + buffer.initialize(repeating: 0) + _ = str.getBytes(buffer.baseAddress, maxLength: cLength, usedLength: nil, encoding: encoding.rawValue, options: [], range: theRange, remaining: nil) - buffer.advanced(by: cLength).initialize(to: 0) - - return UnsafePointer(buffer) // leaked and should be autoreleased via a NSData backing but we cannot here + return buffer } internal func isALineSeparatorTypeCharacter(_ ch: unichar) -> Bool { @@ -903,8 +890,13 @@ extension NSString { } } + @available(*, deprecated, message: "On platforms without Objective-C autorelease pools, use withCString instead") public var utf8String: UnsafePointer? { - return _bytesInEncoding(self, .utf8, false, false, false) + guard let buffer = _allocateBytesInEncoding(self, .utf8) else { + return nil + } + // leaked. On Darwin, freed via an autorelease + return UnsafePointer(buffer.baseAddress) } public var fastestEncoding: UInt { @@ -961,8 +953,24 @@ extension NSString { 0, nil, 0, nil) == length } - public func cString(using encoding: UInt) -> UnsafePointer? { - return _bytesInEncoding(self, String.Encoding(rawValue: encoding), false, false, false) + @available(*, deprecated, message: "On platforms without Objective-C autorelease pools, use withCString(encodedAs:_) instead") + public func cString(using encoding: UInt) -> UnsafePointer? { + // leaked. On Darwin, freed via an autorelease + guard let buffer = _allocateBytesInEncoding(self, String.Encoding(rawValue: encoding)) else { + return nil + } + // leaked. On Darwin, freed via an autorelease + return UnsafePointer(buffer.baseAddress) + } + + internal func _withCString(using encoding: UInt, closure: (UnsafePointer?) -> T) -> T { + let buffer = _allocateBytesInEncoding(self, String.Encoding(rawValue: encoding)) + let result = closure(buffer?.baseAddress) + if let buffer { + buffer.deinitialize() + buffer.deallocate() + } + return result } public func getCString(_ buffer: UnsafeMutablePointer, maxLength maxBufferCount: Int, encoding: UInt) -> Bool { diff --git a/Sources/Foundation/NSStringAPI.swift b/Sources/Foundation/NSStringAPI.swift index 26e99c48e8..d725d944e6 100644 --- a/Sources/Foundation/NSStringAPI.swift +++ b/Sources/Foundation/NSStringAPI.swift @@ -633,9 +633,8 @@ extension StringProtocol { /// Returns a representation of the string as a C string /// using a given encoding. public func cString(using encoding: String.Encoding) -> [CChar]? { - return withExtendedLifetime(_ns) { - (s: NSString) -> [CChar]? in - _persistCString(s.cString(using: encoding.rawValue)) + return _ns._withCString(using: encoding.rawValue) { + _persistCString($0) } } diff --git a/Tests/Foundation/TestNSString.swift b/Tests/Foundation/TestNSString.swift index b3e24278a3..73d80bd119 100644 --- a/Tests/Foundation/TestNSString.swift +++ b/Tests/Foundation/TestNSString.swift @@ -316,6 +316,12 @@ class TestNSString: LoopbackServerTest { XCTAssertNil(string) } + func test_cStringArray() { + let str = "abc" + let encoded = str.cString(using: .ascii) + XCTAssertEqual(encoded, [97, 98, 99, 0]) + } + func test_FromContentsOfURL() throws { throw XCTSkip("Test is flaky in CI: https://bugs.swift.org/browse/SR-10514") #if false From 4c93e5bc2aa8eead99dd4748727bba2ee29a925b Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Mon, 24 Mar 2025 09:57:58 -0700 Subject: [PATCH 197/198] Fix the comment about the posix_spawn_file_actions_addchdir support state (#5192) The refactoring in #5160 moved a comment around such that it appeared as if QNX supports this function - it does not. Clarify the situation. --- Sources/CoreFoundation/CFPlatform.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/CoreFoundation/CFPlatform.c b/Sources/CoreFoundation/CFPlatform.c index 186a6e8970..42164af56e 100644 --- a/Sources/CoreFoundation/CFPlatform.c +++ b/Sources/CoreFoundation/CFPlatform.c @@ -2287,9 +2287,10 @@ CF_EXPORT int _CFPosixSpawnFileActionsChdir(_CFPosixSpawnFileActionsRef file_act // Glibc versions prior to 2.29 don't support posix_spawn_file_actions_addchdir_np, impacting: // - Amazon Linux 2 (EoL mid-2025) return ENOSYS; - #elif defined(__OpenBSD__) + #elif defined(__OpenBSD__) || defined(__QNX__) // Currently missing as of: // - OpenBSD 7.5 (April 2024) + // - QNX 8 (December 2023) return ENOSYS; #elif defined(__GLIBC__) || TARGET_OS_DARWIN || defined(__FreeBSD__) || (defined(__ANDROID__) && __ANDROID_API__ >= 34) || defined(__musl__) // Pre-standard posix_spawn_file_actions_addchdir_np version available in: @@ -2304,7 +2305,6 @@ CF_EXPORT int _CFPosixSpawnFileActionsChdir(_CFPosixSpawnFileActionsRef file_act // Standardized posix_spawn_file_actions_addchdir version (POSIX.1-2024, June 2024) available in: // - Solaris 11.4 (August 2018) // - NetBSD 10.0 (March 2024) - // - QNX 8 (December 2023) return posix_spawn_file_actions_addchdir((posix_spawn_file_actions_t *)file_actions, path); #endif } From af2ecd85fa4c1feb84937a6e2a882b7158890715 Mon Sep 17 00:00:00 2001 From: Tony Parker Date: Tue, 25 Mar 2025 09:10:51 -0700 Subject: [PATCH 198/198] Add callout for FoundationEssentials to handle non-UTF encodings (#5193) (#5194) --- Sources/Foundation/NSString.swift | 13 ++++++++++++- Tests/Foundation/TestNSString.swift | 12 ++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Sources/Foundation/NSString.swift b/Sources/Foundation/NSString.swift index 88379a9351..ccd0ae083f 100644 --- a/Sources/Foundation/NSString.swift +++ b/Sources/Foundation/NSString.swift @@ -7,7 +7,7 @@ // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // - +@_spi(SwiftCorelibsFoundation) @_exported import FoundationEssentials @_implementationOnly import CoreFoundation internal import Synchronization @@ -1677,3 +1677,14 @@ extension String : CVarArg, _CVarArgObject { } } #endif + +// Upcall from swift-foundation for conversion of less frequently-used encodings +@_dynamicReplacement(for: _cfStringEncodingConvert(string:using:allowLossyConversion:)) +private func _cfStringEncodingConvert_corelibs_foundation(string: String, using encoding: UInt, allowLossyConversion: Bool) -> Data? { + return (string as NSString).data(using: encoding, allowLossyConversion: allowLossyConversion) +} + +@_dynamicReplacement(for: _cfMakeStringFromBytes(_:encoding:)) +private func _cfMakeStringFromBytes_corelibs_foundation(_ bytes: UnsafeBufferPointer, encoding: UInt) -> String? { + return NSString(bytes: bytes.baseAddress!, length: bytes.count, encoding: encoding) as? String +} diff --git a/Tests/Foundation/TestNSString.swift b/Tests/Foundation/TestNSString.swift index 73d80bd119..b3622e2dc3 100644 --- a/Tests/Foundation/TestNSString.swift +++ b/Tests/Foundation/TestNSString.swift @@ -1731,4 +1731,16 @@ class TestNSString: LoopbackServerTest { XCTAssertNotNil(str) XCTAssertEqual(str?.isEmpty, true) } + + func test_windows1252Encoding() { + // Define an array of CP1252 encoded bytes representing "Hallo " followed by the Euro sign + let cp1252Bytes: [UInt8] = [72, 97, 108, 108, 111, 32, 0x80] + let cp1252Data = Data(cp1252Bytes) + + let nativeString = String(data: cp1252Data, encoding: .windowsCP1252) + XCTAssertEqual(nativeString, "Hallo €") + + let producedData = nativeString?.data(using: .windowsCP1252) + XCTAssertEqual(producedData, cp1252Data) + } }